ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTY1ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzODQ5ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTQ4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkMDQ0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU2F0IERlYyAyMiAxOTo1MDoyNCBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkMTA0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mjk6MTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzA0MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozOSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3MDUwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDYucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS42LjUsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDU4NWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19idWphdmEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBTY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gImNsaWVudCIgc2NlbmFyaW8uCi1TY2VuYXJpb1R5cGU9c2VydmljZQotCi0hLS0gSW5pdGlhbFNlbGVjdGlvbiBSRVFVSVJFRC4gIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIGlucHV0IFdTREwgb3IgSmF2YQotSW5pdGlhbFNlbGVjdGlvbj0vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9wYWNrYWdlbmFtZS9teVNlcnZpY2UuamF2YQotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC42MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPUphdmEgQmVhbgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBFQVIgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBhIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIEVBUiBwcm9qZWN0IGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlIHByb2plY3QuICB0eXBlOiBTdHJpbmcKLSEtLVNlcnZpY2VFYXJQcm9qZWN0TmFtZT1zZXJ2aWNlRWFyUHJvamVjdE5hbWUKLQotIS0tIE1hcHBpbmdzCi0hLS0gVG9wIGRvd24gb3IgYm90dG9tIHVwIHNjZW5hcmlvLiBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy4KLSEtLSBUb3AgRG93bjogTWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkIEphdmEgdGVtcGxhdGUgY2xhc3Nlcy4KLSEtLSBUaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCBuYW1lc3BhY2U9cGFja2FnZSAgCi0hLS0gQm90dG9tIFVwOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBXU0RMLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UgCi0hLS1NYXBwaW5ncz0vdGVzdFByb2ovbWFwcGluZ3MvbWFwcGluZ3MudHh0Ci0KLSEtLSBKYXZhT3V0cHV0Ci0hLS0gVG9wIGRvd24gLSBTdHJpbmc6IHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIGZvciBhIEphdmEgc291cmNlIGZvbGRlciBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUgLSBtdXN0IGJlIGV4aXN0aW5nIHdvcmtzcGFjZSBzb3VyY2UgZm9sZGVyCi0hLS1KYXZhT3V0cHV0PS9wcm9qZWN0TmFtZS9KYXZhU291cmNlCi0KLSEtLSBNZXRob2RzCi0hLS0gQm90dG9tIHVwIC0gc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcyAoaS5lLiBtZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpKSB0byBiZSBleHBvc2VkIGluIG91dHB1dCBXU0RMLiAgSWYgbm8gbGlzdCBpcyBwcm92aWRlZCwgYWxsIG1ldGhvZHMgYXJlIGV4cG9zZWQuCi0hLS0gTWV0aG9kcz0KLQotIS0tIFN0eWxlCi0hLS0gQm90dG9tIHVwIC0gU3RyaW5nOiBvbmUgb2Y6IFJQQywgRE9DVU1FTlQsIFdSQVBQRUQKLSEtLVN0eWxlPURPQ1VNRU5UCi0KLSEtLSBVc2UKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogTElURVJBTCwgRU5DT0RFRCAKLSEtLVVzZT1MSVRFUkFMCi0KLSEtLU92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIG92ZXJ3cml0ZSBmaWxlcyB0aGF0IGFscmVhZHkgZXhpc3QuIHR5cGU6Ym9vbGVhbiAKLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLU92ZXJ3cml0ZUZpbGVzRW5hYmxlZD10cnVlCi0KLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkIC0gc2V0IHRvIHRydWUgY3JlYXRlIGZvbGRlcnMgbmVjZXNzYXJ5IGR1cmluZyBmaWxlIGdlbmVyYXRpb24gdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZD10cnVlCi0KLSEtLUNoZWNrb3V0RmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gY2hlY2sgb3V0IGZpbGVzIHdpdGggbm8gd2FybmluZyB0byB0aGUgdXNlciB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNoZWNrb3V0RmlsZXNFbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19idWphdmEueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZjk0MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLiI+Ci0KLTxlY2hvIG1lc3NhZ2U9InB1bGxpbmcgaW4gcHJvcGVydHkgZmlsZXMiLz4KLTxwcm9wZXJ0eSBmaWxlPSJheGlzX2J1amF2YS5wcm9wZXJ0aWVzIi8+Ci0JCi08ZWNobyBtZXNzYWdlPSJjYWxsaW5nIHRoZSB3ZWIgc2VydmljZXMgZ2VuZXJhdGlvbiBhbnQgdGFzazogYXhpc19idWphdmEiLz4KLSA8dGFyZ2V0IG5hbWU9Im1haW4iID4KLSAgCSA8d3NnZW4vPgotICA8L3RhcmdldD4KLSAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTVkZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tU2NlbmFyaW9UeXBlIFJFUVVJUkVELiBEaWZmZXJlbnRpYXRlcyBmcm9tICJzZXJ2aWNlIiBzY2VuYXJpby4KLVNjZW5hcmlvVHlwZT1jbGllbnQKLQotIS0tSW5pdGlhbFNlbGVjdGlvbiBSRVFVSVJFRC4gIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIGlucHV0IFdTREwgb3IgSmF2YS4KLUluaXRpYWxTZWxlY3Rpb249L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L3dzZGwvbXlTZXJ2aWNlLndzZGwKLQotIS0tVXRpbGl0eSBwcm9wZXJ0eSB2YWx1ZXMgLSB1c2UgdGhlc2UgdG8gbGlzdCB2YWx1ZXMgZm9yIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLSEtLSBDbGllbnQuUnVudGltZUlkLCBDbGllbnQuU2VydmVySWQgCi1MaXN0UnVudGltZXM9dHJ1ZQotTGlzdFNlcnZlcnM9dHJ1ZQotIS0tIFZlcmJvc2Ugd2lsbCBsaXN0IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgYXMgd2VsbCBhcyBlcnJvcnMgaWYgc2V0IHRvIHRydWUKLVZlcmJvc2U9dHJ1ZQotCi0gCi0hLS1DbGllbnQuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKLUNsaWVudC5SdW50aW1lSWQ9b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVAotIS0tQ2xpZW50LlNlcnZlcklkIC0gSUQgb2YgdGFyZ2V0IHNlcnZlciAKLUNsaWVudC5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC42MAotCi0hLS1DbGllbnRQcm9qZWN0TmFtZSAtIG5hbWUgb2YgQ2xpZW50IHByb2plY3QgLSB0aGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdpdmUgdGhlIGNsaWVudCBwcm9qZWN0IGEgCi0hLS0gZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbgotIS0tQ2xpZW50UHJvamVjdE5hbWU9Y2xpZW50UHJvamVjdE5hbWUKLQotIS0tQ2xpZW50RWFyUHJvamVjdE5hbWUtIG5hbWUgb2YgQ2xpZW50IEVBUiBwcm9qZWN0IC0gc2V0IG9ubHkgaWYgYXBwbGljYWJsZSBmb3Igc2VsZWN0ZWQgc2VydmVyIHR5cGUKLSEtLUNsaWVudEVhclByb2plY3ROYW1lPWNsaWVudEVBUlByb2plY3ROYW1lCi0KLSEtLUNsaWVudENvbXBvbmVudFR5cGUgLSB0eXBlIG9mIENsaWVudCBwcm9qZWN0IC0gdGhlIGZvbGxvd2luZyBhcmUgdmFsaWQgQXhpcyB0ZW1wbGF0ZXM6IHRlbXBsYXRlLmpzdC53ZWIgYW5kIHRlbXBsYXRlLmpzdC51dGlsaXR5Ci0hLS1DbGllbnRDb21wb25lbnRUeXBlPXRlbXBsYXRlLmpzdC53ZWIKLQotIS0tIEN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzIC0gc2V0IHRvIHRydWUgdG8gc3VwcGx5IHBhY2thZ2UtbmFtZXNwYWNlIG1hcHBpbmdzIHR5cGU6IGJvb2xlYW4KLSEtLUN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzPWZhbHNlICAKLSAgICAKLSEtLSBNYXBwaW5ncyAKLSEtLSBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncwotIS0tIE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhY2thZ2UgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBKYXZhIGNsYXNzZXMuCi0hLS0gTmVlZCBub3QgYmUgc2V0IGlmIEN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzIGlzIGZhbHNlICAKLSEtLSBUaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCBuYW1lc3BhY2U9cGFja2FnZS4KLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIE92ZXJ3cml0ZUZpbGVzRW5hYmxlZD10cnVlCi0KLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkIC0gc2V0IHRvIHRydWUgY3JlYXRlIGZvbGRlcnMgbmVjZXNzYXJ5IGR1cmluZyBmaWxlIGdlbmVyYXRpb24gdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS0gQ3JlYXRlRm9sZGVyc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIGNoZWNrIG91dCBmaWxlcyB3aXRoIG5vIHdhcm5pbmcgdG8gdGhlIHVzZXIgdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS0gQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiZmUyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNfY2xpZW50LnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiBheGlzX2NsaWVudCIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc190ZGphdmEucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc190ZGphdmEucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NiZDMwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS0gU2NlbmFyaW9UeXBlIFJFUVVJUkVELiBEaWZmZXJlbnRpYXRlcyBmcm9tICJjbGllbnQiIHNjZW5hcmlvLgotU2NlbmFyaW9UeXBlPXNlcnZpY2UKLQotIS0tIEluaXRpYWxTZWxlY3Rpb24gUkVRVUlSRUQuICBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBpbnB1dCBXU0RMIG9yIEphdmEKLUluaXRpYWxTZWxlY3Rpb249L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsCi0KLSEtLVV0aWxpdHkgcHJvcGVydHkgdmFsdWVzIC0gdXNlIHRoZXNlIHRvIGxpc3QgdmFsaWQgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0hLS0gU2VydmljZS5SdW50aW1lSWQsIFNlcnZpY2UuU2VydmVySWQgCi1MaXN0UnVudGltZXM9dHJ1ZQotTGlzdFNlcnZlcnM9dHJ1ZQotIS0tIFZlcmJvc2Ugd2lsbCBsaXN0IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgYXMgd2VsbCBhcyBlcnJvcnMgaWYgc2V0IHRvIHRydWUKLVZlcmJvc2U9dHJ1ZQotCi0hLS0gIFNlcnZpY2UuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKLVNlcnZpY2UuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKLSEtLSBTZXJ2aWNlLlNlcnZlcklkIC0gIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1TZXJ2aWNlLlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjYwCi0hLS0gU2VydmljZS5UeXBlSWQgLSBKYXZhIEJlYW4gaXMgZGVmYXVsdCBmb3IgYm90aCBUb3AgRG93biBhbmQgQm90dG9tIFVwCi0hLS0gU2VydmljZS5UeXBlSWQ9SmF2YSBCZWFuCi0KLSEtLSBTZXJ2aWNlUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nICAgIAotIS0tU2VydmljZVByb2plY3ROYW1lPXNlcnZpY2VQcm9qZWN0TmFtZQotIS0tIFNlcnZpY2VFYXJQcm9qZWN0TmFtZSAtICEtLXR5cGU6U3RyaW5nIC0gbmFtZSBvZiBTZXJ2aWNlIEVBUiBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgRUFSIHByb2plY3QgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlcnZpY2UgcHJvamVjdC4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX3RkamF2YS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNfdGRqYXZhLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiBheGlzX3RkamF2YSIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTJiYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwODAzMDEgICAyMjA4Nzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFudC8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmNmU2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBzZXJ2aWNlIEF4aXMgQ29uc3VtcHRpb24gQ29yZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLXhwV1NERENvbnRlbnRUeXBlID0gQXhpcyBXZWIgU2VydmljZSBEZXBsb3ltZW50IERlc2NyaXB0b3IKLQotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0FYSVM9QXBhY2hlIEF4aXMgV2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX0FYSVM9QXBhY2hlIEF4aXMgQ29tcG9uZW50cwotCi0KLSNydW50aW1lIGxhYmVscwotCi1MQUJFTF9SVU5USU1FX0FYSVM9QXBhY2hlIEF4aXMKLQotI3NjZW5hcmlvIGxhYmVscwotCi1MQUJFTF9CT1RUT01fVVBfSkFWQV9CRUFOPUJvdHRvbSB1cCBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLUxBQkVMX1RPUF9ET1dOX0pBVkFfQkVBTj1Ub3AgZG93biBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLUxBQkVMX0NMSUVOVD1DbGllbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjM4ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24ud3NmaW5kZXIiPgotICAgICAgPHdzZmluZGVyCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS53c2ZpbmRlci5XU0ZpbmRlckF4aXMiCi0gICAgICAgICAgICBuYW1lPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyI+Ci0gICAgICA8L3dzZmluZGVyPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gRXh0ZW5zaW9uIHByb3ZpZGluZyB3b3Jrc3BhY2UgV1NETCBkaXNjb3ZlcnkgLS0+ICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciI+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5Ci0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9BWElTIi8+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvci5BeGlzV2ViU2VydmljZUxvY2F0b3IiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmF4aXMiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9BWElTIj4KLSAgICAgIDwvd2ViU2VydmljZUxvY2F0b3I+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0KLSAgIDwhLS0gZGVmaW5lIGEgd3NkZCBmaWxlIHR5cGUgZm9yIEF4aXMgV2ViIFNlcnZpY2UgRGVwbG95bWVudCBEZXNjcmlwdG9ycyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnRlYW0uY29yZS5maWxlVHlwZXMiPgotICAgICAgPGZpbGVUeXBlcwotICAgICAgICAgICAgdHlwZT0idGV4dCIKLSAgICAgICAgICAgIGV4dGVuc2lvbj0id3NkZCI+Ci0gICAgICA8L2ZpbGVUeXBlcz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIGRlZmluZSBhIHdzZGQgY29udGVudCB0eXBlIGZvciBBeGlzIFdlYiBTZXJ2aWNlIERlcGxveW1lbnQgRGVzY3JpcHRvcnMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLSAgICAgIDxjb250ZW50LXR5cGUKLSAgICAgICAgICAgIHByaW9yaXR5PSJoaWdoIgotICAgICAgICAgICAgbmFtZT0iJXhwV1NERENvbnRlbnRUeXBlIgotICAgICAgICAgICAgaWQ9IndzZGRzb3VyY2UiCi0gICAgICAgICAgICBiYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0gICAgICAgICAgICBkZWZhdWx0LWNoYXJzZXQ9IlVURi04IgotICAgICAgICAgICAgZmlsZS1leHRlbnNpb25zPSJ3c2RkIiAvPgotICAgPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIAotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLmFudGZpbGVzIj4KLSAgCQk8YW50ZmlsZXMKLSAgICAJCWlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUVG9wSmF2YSIKLSAgICAJCXJ1bnRpbWVpZD0iYXhpcyIKLSAgICAJCXBsdWdpbmxvY2F0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIgotICAgIAkJcGF0aD0iYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMiCi0gICAgCQl3c2dlbnBhdGg9ImFudC9heGlzX3RkamF2YS54bWwiCi0gICAgCQlydW50aW1lbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVMiCi0gICAgCQlzY2VuYXJpb2xhYmVsPSIlTEFCRUxfVE9QX0RPV05fSkFWQV9CRUFOIj4KLSAgCQk8L2FudGZpbGVzPgotICAJCTxhbnRmaWxlcwotICAgIAkJaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlRCVUphdmEiCi0gICAgCQlydW50aW1laWQ9ImF4aXMiCi0gICAgCQlwbHVnaW5sb2NhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZSIKLSAgICAJCXBhdGg9ImFudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIgotICAgIAkJd3NnZW5wYXRoPSJhbnQvYXhpc19idWphdmEueG1sIgotICAgIAkJcnVudGltZWxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTIgotICAgIAkJc2NlbmFyaW9sYWJlbD0iJUxBQkVMX0JPVFRPTV9VUF9KQVZBX0JFQU4iPgotICAJCTwvYW50ZmlsZXM+Ci0gIAkJPGFudGZpbGVzCi0gICAgCQlpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVENsaWVudCIKLSAgICAJCXJ1bnRpbWVpZD0iYXhpcyIKLSAgICAJCXBsdWdpbmxvY2F0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIgotICAgIAkJcGF0aD0iYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMiCi0gICAgCQl3c2dlbnBhdGg9ImFudC9heGlzX2NsaWVudC54bWwiCi0gICAgCQlydW50aW1lbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVMiCi0gICAgCQlzY2VuYXJpb2xhYmVsPSIlTEFCRUxfQ0xJRU5UIj4KLSAgCQk8L2FudGZpbGVzPgotICAJPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTgzZmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTIgICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGZvciBBeGlzRGVwbG95Q29tbWFuZAotIwotTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQ9SVdBQjAwNTRFIFdlYiBwcm9qZWN0IFVSTCBmb3IgZGVwbG95bWVudCBvZiBXZWIgc2VydmljZSBpcyBub3Qgc2V0IGluIEF4aXNEZXBsb3lDb21tYW5kCi1NU0dfRVJST1JfREVQTE9ZX0ZJTEVfUEFSQU1fTk9UX1NFVD1JV0FCMDQ4OEUgTG9jYXRpb24gb2YgQXhpcyBkZXBsb3ltZW50IGZpbGUgaXMgbm90IHNldCBpbiBBeGlzRGVwbG95Q29tbWFuZAotTVNHX0VSUk9SX0FYSVNfREVQTE9ZPUlXQUIwNDg5RSBFcnJvciB3aGVuIGRlcGxveWluZyBXZWIgc2VydmljZSB0byBBeGlzIHJ1bnRpbWUKLU1TR19BWElTX0RFUExPWT1EZXBsb3lpbmcgV2ViIHNlcnZpY2UgdG8gQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudAotCi0jCi0jIE1lc3NhZ2VzIGZvciBKYXZhMldTRExDb21tYW5kCi0jCi1NU0dfR0VORVJBVEVfV1NETD1HZW5lcmF0aW5nIFdTREwgZmlsZTogezB9Ci1NU0dfRVJST1JfSkFWQV9XU0RMX0dFTkVSQVRFPUlXQUIwMzk4RSBFcnJvciBpbiBnZW5lcmF0aW5nIFdTREwgZnJvbSBKYXZhOiAKLQotIwotIyBNZXNzYWdlcyBmb3IgV1NETDJKYXZhQ29tbWFuZAotIwotTVNHX1BBUlNJTkdfV1NETD1QYXJzaW5nIFdTREwgZmlsZTogezB9Ci1NU0dfRVJST1JfV1NETF9KQVZBX0dFTkVSQVRFPUlXQUIwMzk5RSBFcnJvciBpbiBnZW5lcmF0aW5nIEphdmEgZnJvbSBXU0RMOiAKLU1TR19FUlJPUl9NT1ZFX1JFU09VUkNFPUlXQUIwNTIzRSBFcnJvciBtb3ZpbmcgcmVzb3VyY2U6IHswfQotTVNHX0VSUk9SX0NSRUFURV9URU1QX0RJUj1FcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5Ci0KLSMKLSMgTWVzc2FnZXMgY29tbW9uIGZvciBhbGwKLSMKLU1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVD1JV0FCMDM5N0UgSmF2YVdTRExQYXJhbSBub3Qgc2V0Ci1NU0dfRVJST1JfRk9MREVSX05PVF9GT1VORD1PdXRwdXQgZm9sZGVyOiB7MH0gd2FzIG5vdCBmb3VuZC4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRhODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX1VSTF9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9ERVBMT1lfRklMRV9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BWElTX0RFUExPWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQVhJU19ERVBMT1k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0dFTkVSQVRFX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfV1NETF9HRU5FUkFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUEFSU0lOR19XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX0pBVkFfR0VORVJBVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NT1ZFX1JFU09VUkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfVEVNUF9ESVI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5EOwotICAKLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9BeGlzRGVwbG95Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTliMTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjI3ICAgMTE5OTY0IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDYxMyAgIDIzNjUyMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgT3ZlcndyaXRlIHNldHRpbmcgb24gV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGNvdXBsZWQgd2l0aCBwcmVmZXJlbmNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkFkbWluQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy50b29scy5hbnQuYXhpcy5BZG1pbkNsaWVudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuZmlsdGVycy5TdHJpbmdJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0vKioKLSAqIENvbW1hbmRzIGFyZSBleGVjdXRhYmxlLCB1bmRvYWJsZSwgcmVkb2FibGUgb2JqZWN0cy4gRXZlcnkgQ29tbWFuZCBoYXMgYSBuYW1lIGFuZCBhIGRlc2NyaXB0aW9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBBeGlzRGVwbG95Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRVhUID0gIi9zZXJ2aWNlcy9BZG1pblNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUl9DT05GSUcgPSAic2VydmVyLWNvbmZpZy53c2RkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdF87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEF4aXNEZXBsb3lDb21tYW5kLgotICAgKiBAcGFyYW0gU3RyaW5nIGRlc2NyaXB0aW9uCi0gICAqIEBwYXJhbSBTdHJpbmcgbmFtZQotICAgKiAKLSAgICovCi0gIHB1YmxpYyBBeGlzRGVwbG95Q29tbWFuZCgpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIEF4aXNEZXBsb3lDb21tYW5kKFN0cmluZyBwcm9qZWN0ICl7Ci0JICB0aGlzLnByb2plY3RfID0gcHJvamVjdDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKQotICAgIHsgICAgIAotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIGlmIChqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKSA9PSBudWxsIHx8IGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpLmVxdWFscygiIikpCi0gICAgeyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX1VSTF9QQVJBTV9OT1RfU0VUKTsKLSAgICB9Ci0KLSAgICBpZiAoamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKSA9PSBudWxsIHx8IGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKCkubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfREVQTE9ZX0ZJTEVfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19BWElTX0RFUExPWSk7Ci0KLSAgICBJU3RhdHVzIHN0YXR1cyA9IGV4ZWN1dGVBbnRUYXNrKG1vbml0b3IpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgewotICAgIAllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBbnRUYXNrKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLSAgewotICAgIGZpbmFsIGNsYXNzIERlcGxveVRhc2sgZXh0ZW5kcyBBZG1pbkNsaWVudFRhc2sKLSAgICB7Ci0gICAgICBwdWJsaWMgRGVwbG95VGFzaygpCi0gICAgICB7Ci0JCXN1cGVyLnNldFByb2plY3QobmV3IFByb2plY3QoKSk7Ci0JCXN1cGVyLmdldFByb2plY3QoKS5pbml0KCk7Ci0JCXN1cGVyLnNldFRhc2tUeXBlKCJheGlzIik7IC8vJE5PTi1OTFMtMSQKLQkJc3VwZXIuc2V0VGFza05hbWUoImF4aXMtYWRtaW4iKTsgLy8kTk9OLU5MUy0xJAotCQlzdXBlci5zZXRPd25pbmdUYXJnZXQobmV3IFRhcmdldCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBEZXBsb3lUYXNrIGFkbWluQ2xpZW50ID0gbmV3IERlcGxveVRhc2soKTsKLSAgICBTdHJpbmcgdXJsID0gamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgKyBTRVJWSUNFX0VYVDsKLSAgICBhZG1pbkNsaWVudC5zZXRVcmwodXJsKTsKLSAgICBhZG1pbkNsaWVudC5zZXRYbWxGaWxlKG5ldyBGaWxlKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKClbMF0pKTsKLQotICAgIC8vIFNpbmNlIHRoZSBhZG1pbiBzZXJ2ZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgcmlnaHQgYXdheSB3ZSB3aWxsIHRyeQotICAgIC8vIHNldmVyYWwgdGltZXMgdG8gZXhlY3V0ZSBpdC4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdWlsZEV4Y2VwdGlvbiBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IDIwOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgICAgICBhZG1pbkNsaWVudC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEJ1aWxkRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gZXhjOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRocmVhZC5zbGVlcCggMjAwICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB0aHJlYWRFeGNlcHRpb24gICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBubyBleGNlcHRpb24gb2NjdXJlZCB0aGVuIHdlIHNob3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgIGlmKCBsYXN0RXhjZXB0aW9uID09IG51bGwgKSBicmVhazsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gSWYgYWZ0ZXIgbWFueSB0cmllcyB3ZSBzdGlsbCBnZXQgYW4gZXhjZXB0aW9uLCB0aGVuIHdlIHdpbGwgcmUgdGhyb3cgaXQuCi0gICAgICBpZiggbGFzdEV4Y2VwdGlvbiAhPSBudWxsICkgdGhyb3cgbGFzdEV4Y2VwdGlvbjsKLSAgICAgIAotICAgICAgcmV0dXJuIGNyZWF0ZUNvbmZpZ0ZpbGUobW9uaXRvciwgdXJsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLSAgICB9Ci0gIH0KLQotICAvKiogQ3JlYXRlcyAnc2VydmVyLWNvbmZpZy53c2RkJyBpbiB0aGUgV2ViQ29udGVudCBmb2xkZXIgaW4gdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHByb2plY3QgCi0gICAqIEBwYXJhbSBtb25pdG9yCi0gICAqIEBwYXJhbSB1cmwKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBJU3RhdHVzIGNyZWF0ZUNvbmZpZ0ZpbGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBTdHJpbmcgdXJsKSB7Ci0JQWRtaW5DbGllbnQgbGlzdEFkbWluID0gbmV3IEFkbWluQ2xpZW50KCk7Ci0JU3RyaW5nIGNvbmZpZyA9ICIiOwotICAgIHRyeSB7Ci0JCWNvbmZpZyA9IGxpc3RBZG1pbi5wcm9jZXNzKG5ldyBTdHJpbmdbXSB7ICItbCIgKyB1cmwsICJsaXN0IiB9KTsKLQotCQlJUGF0aCB3ZWJJbmZQYXRoID0gSjJFRVV0aWxzLmdldFdlYkluZlBhdGgoUmVzb3VyY2VzUGx1Z2luCi0JCQkJCS5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0XykpOwotCQlJUGF0aCByZWxhdGl2ZVNlcnZlckNvbmZpZ1BhdGggPSB3ZWJJbmZQYXRoLmFwcGVuZChTRVJWRVJfQ09ORklHKTsKLQkJSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IGdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQlSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCkgZ2V0RW52aXJvbm1lbnQoKSkKLQkJCQkJLmdldFJlc291cmNlQ29udGV4dCgpOwotCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHJlbGF0aXZlU2VydmVyQ29uZmlnUGF0aCwKLQkJCQkJbmV3IFN0cmluZ0lucHV0U3RyZWFtKGNvbmZpZyksIG1vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3RyaW5nIG1lc3NhZ2UgPSBlLmdldE1lc3NhZ2UoKTsKLQkgICAgaWYgKGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLQkgICAgfQotCSAgICAgIAotCSAgICBJU3RhdHVzW10gY2hpbGRTdGF0dXMgPSBuZXcgU3RhdHVzWzFdOwotCSAgICBjaGlsZFN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlKTsKLQkgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLQl9Ci0JcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7IAotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU1YTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0dlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQXhpc0VuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuc2VydmVyLkF4aXNTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnRvb2xzLmFudC5heGlzLkFkbWluQ2xpZW50VGFzazsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudXRpbHMuQ2xhc3NVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWlsZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBDb21tYW5kcyBhcmUgZXhlY3V0YWJsZSwgdW5kb2FibGUsIHJlZG9hYmxlIG9iamVjdHMuIEV2ZXJ5IENvbW1hbmQgaGFzIGEgbmFtZSBhbmQgYSBkZXNjcmlwdGlvbi4KLSAqLwotCi1wdWJsaWMgY2xhc3MgR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0gIHByaXZhdGUgU3RyaW5nIHByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFYSVNfU0VSVkVSX0NPTkZJR19GSUxFID0gImF4aXMuU2VydmVyQ29uZmlnRmlsZSI7Ci0gIAotICBJRm9sZGVyIG91dHB1dFJvb3Q7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuCi0gKiBAcGFyYW0gU3RyaW5nIHByb2plY3ROYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLSAgICB9Ci0KLSAgICBpZiAoamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgPT0gbnVsbCB8fCBqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKS5lcXVhbHMoIiIpKQotICAgIHsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9VUkxfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKCkgPT0gbnVsbCB8fCBqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpLmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLSAgICAgIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfREVQTE9ZX0ZJTEVfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19BWElTX0RFUExPWSk7Ci0KLSAgICBJU3RhdHVzIHN0YXR1cyA9IGV4ZWN1dGVBZG1pblRhc2soKTsKLSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfSAgICAKLSAgICAKLSAgICBzdGF0dXMgPSBleGVjdXRlQW50VGFzaygpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgewotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBbnRUYXNrKCkKLSAgewotICAgIGZpbmFsIGNsYXNzIERlcGxveVRhc2sgZXh0ZW5kcyBBZG1pbkNsaWVudFRhc2sKLSAgICB7Ci0gICAgICBwdWJsaWMgRGVwbG95VGFzaygpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnNldFByb2plY3QobmV3IFByb2plY3QoKSk7Ci0JCXN1cGVyLmdldFByb2plY3QoKS5pbml0KCk7Ci0JCXN1cGVyLnNldFRhc2tUeXBlKCJheGlzIik7IC8vJE5PTi1OTFMtMSQKLQkJc3VwZXIuc2V0VGFza05hbWUoImF4aXMtYWRtaW4iKTsgLy8kTk9OLU5MUy0xJAotCQlzdXBlci5zZXRPd25pbmdUYXJnZXQobmV3IFRhcmdldCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBEZXBsb3lUYXNrIGFkbWluQ2xpZW50ID0gbmV3IERlcGxveVRhc2soKTsKLSAgICBTdHJpbmcgdXJsID0gamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgKyBBeGlzRGVwbG95Q29tbWFuZC5TRVJWSUNFX0VYVDsKLSAgICBhZG1pbkNsaWVudC5zZXRVcmwodXJsKTsKLSAgICBhZG1pbkNsaWVudC5zZXRYbWxGaWxlKG5ldyBGaWxlKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKClbMF0pKTsKLQotICAgIC8vIFNpbmNlIHRoZSBhZG1pbiBzZXJ2ZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgcmlnaHQgYXdheSB3ZSB3aWxsIHRyeQotICAgIC8vIHNldmVyYWwgdGltZXMgdG8gZXhlY3V0ZSBpdC4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdWlsZEV4Y2VwdGlvbiBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IDIwOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgICAgICBhZG1pbkNsaWVudC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEJ1aWxkRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gZXhjOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRocmVhZC5zbGVlcCggMjAwICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB0aHJlYWRFeGNlcHRpb24gICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBubyBleGNlcHRpb24gb2NjdXJlZCB0aGVuIHdlIHNob3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgIGlmKCBsYXN0RXhjZXB0aW9uID09IG51bGwgKSBicmVhazsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gSWYgYWZ0ZXIgbWFueSB0cmllcyB3ZSBzdGlsbCBnZXQgYW4gZXhjZXB0aW9uLCB0aGVuIHdlIHdpbGwgcmUgdGhyb3cgaXQuCi0gICAgICBpZiggbGFzdEV4Y2VwdGlvbiAhPSBudWxsICkgdGhyb3cgbGFzdEV4Y2VwdGlvbjsKLSAgICB9Ci0gICAgY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7IAotCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBZG1pblRhc2soKXsKLSAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgLy8gY2hlY2sgaWYgc2VydmVyLWNvbmZpZy53c2RkIGV4aXN0cwotICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KCBwcm9qZWN0TmFtZV8gKTsKLSAgICBvdXRwdXRSb290ID0gSjJFRVV0aWxzLmdldE91dHB1dENvbnRhaW5lclJvb3QoIGNvbXBvbmVudCApOwotICAgIElQYXRoIHBhdGggPSBuZXcgUGF0aCggIldFQi1JTkYiICkuYXBwZW5kKCAic2VydmVyLWNvbmZpZy53c2RkIiApOyAgICAKLSAgICBJRmlsZSBkZXNjcmlwdG9yRmlsZSA9IG91dHB1dFJvb3QuZ2V0RmlsZSggcGF0aCApOwotICAgIAotICAgIGlmICghZGVzY3JpcHRvckZpbGUuZXhpc3RzKCkpewotICAgICAgc3RhdHVzID0gY3JlYXRlU2VydmVyQ29uZmlnRmlsZSgpOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIC8vIGNoZWNrIGlmIGRlcGxveS53c2RkIGV4aXN0cwotICAgIFN0cmluZyBkZXBsb3lXU0REID0gamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKVswXTsKLSAgICBGaWxlIGRlcGxveUZpbGUgPSBuZXcgRmlsZShkZXBsb3lXU0REKTsKLSAgICBpZiAoZGVwbG95RmlsZT09bnVsbCB8fCAhZGVwbG95RmlsZS5leGlzdHMoKSl7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgLy8gZ2V0IENsYXNzcGF0aAotICAgICAgU3RyaW5nIGphcnNDUCA9IG5ldyBTdHJpbmcoKTsKLSAgICAgIC8vIGNsYXNzZXMgZGlyCi0gICAgICBJUGF0aCBjbGFzc2VzUGF0aCA9IG5ldyBQYXRoKCJXRUItSU5GIikuYXBwZW5kKCJjbGFzc2VzIik7Ci0gICAgICBJRmlsZSBjbGFzc2VzRGlyID0gb3V0cHV0Um9vdC5nZXRGaWxlKGNsYXNzZXNQYXRoKTsKLSAgICAgIGphcnNDUCA9ICJcIiIrY2xhc3Nlc0Rpci5nZXRSYXdMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSsiXCIiOwotICAgICAgCi0gICAgICAvLyBsaWIgSkFScwotICAgICAgSVBhdGggbGliUGF0aCA9IG5ldyBQYXRoKCJXRUItSU5GIikuYXBwZW5kKCJsaWIiKTsKLSAgICAgIElGaWxlIGxpYkVudHJ5ID0gb3V0cHV0Um9vdC5nZXRGaWxlKGxpYlBhdGgpOwotICAgICAgSUZvbGRlciBsaWJGb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShsaWJFbnRyeS5nZXRGdWxsUGF0aCgpKTsKLSAgICAgIElSZXNvdXJjZVtdIEpBUmZpbGVzID0gbGliRm9sZGVyLm1lbWJlcnMoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPEpBUmZpbGVzLmxlbmd0aDtpKyspewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gSkFSZmlsZXNbaV07Ci0gICAgICAgIGlmIChyZXMuZ2V0RmlsZUV4dGVuc2lvbigpLmVxdWFscygiamFyIikpewotICAgICAgICAgIGphcnNDUCA9IGphcnNDUCArICI7XCIiKyByZXMuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkrIlwiIjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBmb3JtIGFuZCBydW4gdXRpbHMuQWRtaW4gY29tbWFuZAotICAgICAgU3RyaW5nIGFkbWluQ29tbWFuZCA9IG5ldyBTdHJpbmcoImphdmEgLURheGlzLlNlcnZlckNvbmZpZ0ZpbGU9IisgZGVzY3JpcHRvckZpbGUuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkgCi0gICAgICAgICAgKyIgLWNwICIramFyc0NQKyIgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkFkbWluIHNlcnZlciAiK2RlcGxveUZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLSAgICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoYWRtaW5Db21tYW5kKTsKLQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoQVhJU19TRVJWRVJfQ09ORklHX0ZJTEUsInNlcnZlci1jb25pZmcud3NkZCIpOyAgICAgIAotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgLyoqdAotICAgKiBDcmVhdGVzIHRoZSBpbml0aWFsIHNlcnZlci1jb25maWcud3NkZCBmaWxlIGZyb20gYSB0ZW1wbGF0ZSBpbiBBeGlzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgSVN0YXR1cyBjcmVhdGVTZXJ2ZXJDb25maWdGaWxlKCl7Ci0gICAgdHJ5ewotCi0gICAgICAvLyBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZQotICAgICAgSVBhdGggICAgICAgICAgICAgcGF0aCAgICAgICAgICAgPSBuZXcgUGF0aCggIldFQi1JTkYiICkuYXBwZW5kKCAic2VydmVyLWNvbmZpZy53c2RkIiApOyAgICAKLSAgICAgIElGaWxlICAgICAgICAgICAgIGRlc2NyaXB0b3JGaWxlID0gb3V0cHV0Um9vdC5nZXRGaWxlKCBwYXRoICk7ICAgICAgCi0KLSAgICAgIC8vIGNyZWF0ZSB0aGUgaW5pdGlhbCBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZQotICAgICAgQXhpc0VuZ2luZSBwcmVFbmdpbmUgPSBuZXcgQXhpc1NlcnZlcigpOwotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBDbGFzc1V0aWxzLmdldFJlc291cmNlQXNTdHJlYW0ocHJlRW5naW5lLmdldENsYXNzKCksICJzZXJ2ZXItY29uZmlnLndzZGQiKTsKLSAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzY3JpcHRvckZpbGUuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotICAgICAgUmVzb3VyY2VVdGlscy5jb3B5U3RyZWFtKGlzLCBmb3MpOwotICAgICAgZm9zLmNsb3NlKCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGUuZ2V0Q2F1c2UoKS50b1N0cmluZygpOwotICAgICAgfQotCi0gICAgICBJU3RhdHVzW10gY2hpbGRTdGF0dXMgPSBuZXcgU3RhdHVzWzFdOwotICAgICAgY2hpbGRTdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSk7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9BWElTX0RFUExPWSwgY2hpbGRTdGF0dXMpOwotCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvSmF2YTJXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvSmF2YTJXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjY2MTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0phdmEyV1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMDYgICAxMjExOTkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwODEzICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudG9vbHMuYW50LndzZGwuSmF2YTJXc2RsQW50VGFzazsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudG9vbHMuYW50LndzZGwuTmFtZXNwYWNlTWFwcGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWlsZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIENvbW1hbmRzIGFyZSBleGVjdXRhYmxlLCB1bmRvYWJsZSwgcmVkb2FibGUgb2JqZWN0cy4KLSAqIEV2ZXJ5IENvbW1hbmQgaGFzIGEgbmFtZSBhbmQgYSBkZXNjcmlwdGlvbi4KLSAqLwotCi1wdWJsaWMgY2xhc3MgSmF2YTJXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgRmlsZSB0ZW1wT3V0cHV0V3NkbEZpbGU7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVNUCA9ICJ0ZW1wIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFdTRExfRVhUID0gIi53c2RsIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIEphdmEyV1NETENvbW1hbmQoKSB7Ci0JfQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSmF2YTJXU0RMQ29tbWFuZC4KLQkgKi8KLQlwdWJsaWMgSmF2YTJXU0RMQ29tbWFuZChKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXN1cGVyKCk7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQlpZiAoamF2YVdTRExQYXJhbV8gPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlpZiAoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfR0VORVJBVEVfV1NETCwgamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSApKTsKLQotCQlyZXR1cm4gZXhlY3V0ZUFudFRhc2soZW52aXJvbm1lbnQsIG1vbml0b3IpOwotCX0KLQotCXByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBbnRUYXNrKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJZmluYWwgY2xhc3MgRW1pdHRlciBleHRlbmRzIEphdmEyV3NkbEFudFRhc2sgewotCQkJcHVibGljIEVtaXR0ZXIoKSB7Ci0JCQkJc3VwZXIuc2V0UHJvamVjdChuZXcgUHJvamVjdCgpKTsKLQkJCQlzdXBlci5nZXRQcm9qZWN0KCkuaW5pdCgpOwotCQkJCXN1cGVyLnNldFRhc2tUeXBlKCJheGlzIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlzdXBlci5zZXRUYXNrTmFtZSgiYXhpcy1qYXZhMndzZGwiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXN1cGVyLnNldE93bmluZ1RhcmdldChuZXcgVGFyZ2V0KCkpOwotCQkJfQotCQl9Ci0KLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlJTG9nIGVudkxvZyA9IGVudmlyb25tZW50LmdldExvZygpOwotCQlFbWl0dGVyIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwotCQllbWl0dGVyLmNyZWF0ZUNsYXNzcGF0aCgpLnNldFBhdGgoamF2YVdTRExQYXJhbV8uZ2V0Q2xhc3NwYXRoKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAwOCwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIkNsYXNzIFBhdGggPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRDbGFzc3BhdGgoKSk7Ci0JCQotCQllbWl0dGVyLnNldFBvcnRUeXBlTmFtZShqYXZhV1NETFBhcmFtXy5nZXRQb3J0VHlwZU5hbWUoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDA5LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiUG9ydCBUeXBlIE5hbWUgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRQb3J0VHlwZU5hbWUoKSk7Ci0JCQotCQllbWl0dGVyLnNldFNlcnZpY2VFbGVtZW50TmFtZShqYXZhV1NETFBhcmFtXy5nZXRTZXJ2aWNlTmFtZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTAsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJTZXJ2aWNlIE5hbWUgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRTZXJ2aWNlTmFtZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0TG9jYXRpb24oamF2YVdTRExQYXJhbV8uZ2V0VXJsTG9jYXRpb24oKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDExLCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiVVJMIExvY2F0aW9uID0gIisgamF2YVdTRExQYXJhbV8uZ2V0VXJsTG9jYXRpb24oKSk7Ci0JCQotCQllbWl0dGVyLnNldE1ldGhvZHMoamF2YVdTRExQYXJhbV8uZ2V0TWV0aG9kU3RyaW5nKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxMiwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIk1ldGhvZHMgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRNZXRob2RTdHJpbmcoKSk7Ci0JCQotCQllbWl0dGVyLnNldFN0eWxlKGphdmFXU0RMUGFyYW1fLmdldFN0eWxlKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxMywgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIlN0eWxlID0gIisgamF2YVdTRExQYXJhbV8uZ2V0U3R5bGUoKSk7Ci0JCQotCQllbWl0dGVyLnNldFVzZShqYXZhV1NETFBhcmFtXy5nZXRVc2UoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDE0LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiVXNlID0gIisgamF2YVdTRExQYXJhbV8uZ2V0VXNlKCkpOwotCQkJCQotCQkvLyBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UgYXMgb3V0cHV0IGRpcmVjdG9yeSBmb3IgamF2YTJ3c2RsCi0JCUlQYXRoIHBsdWdpblN0YXRlTG9jID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTdGF0ZUxvY2F0aW9uKCk7Ci0JCUZpbGUgdGVtcERpciA9IG5ldyBGaWxlKHBsdWdpblN0YXRlTG9jLnRvU3RyaW5nKCkpOwotCQlGaWxlIG5ld1RlbXBGaWxlID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW5ld1RlbXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZShURU1QLCBXU0RMX0VYVCwgdGVtcERpcik7Ci0JCQl0ZW1wT3V0cHV0V3NkbEZpbGUgPSBuZXdUZW1wRmlsZTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXRlbXBPdXRwdXRXc2RsRmlsZSA9IG5ldyBGaWxlIChwbHVnaW5TdGF0ZUxvYy5hcHBlbmQoVEVNUCtXU0RMX0VYVCkudG9TdHJpbmcoKSk7Ci0JCX0KLQotCQllbWl0dGVyLnNldE91dHB1dCh0ZW1wT3V0cHV0V3NkbEZpbGUpOwotCQkKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTUsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJXU0RMIExvY2F0aW9uID0gIisgamF2YVdTRExQYXJhbV8uZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCkpOwotCQkKLQkJZW1pdHRlci5zZXROYW1lc3BhY2UoamF2YVdTRExQYXJhbV8uZ2V0TmFtZXNwYWNlKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxNiwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIk5hbWUgU3BhY2UgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXROYW1lc3BhY2UoKSk7Ci0JCQotCQllbWl0dGVyLnNldENsYXNzTmFtZShqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTcsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJCZWFuIG5hbWUgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0SW1wbENsYXNzKGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkpOwotCQkKLQkgICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCSAgICAKLQkgICAgaWYgKGNvbnRleHQuaXNVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZCgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VXNlSW5oZXJpdGVkTWV0aG9kc0RlZmF1bHQoKSkKLQkgICAgewotCSAgICAJZW1pdHRlci5zZXRVc2VJbmhlcml0ZWRNZXRob2RzKGNvbnRleHQuaXNVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZCgpKTsKLQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDk5LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiIHNldCBVc2VJbmhlcml0ZWRNZXRob2RzIDogIiArIGNvbnRleHQuaXNVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZCgpICk7Ci0JICAgIH0KLQkJCi0JCUhhc2hNYXAgbWFwcGluZ3MgPSBqYXZhV1NETFBhcmFtXy5nZXRNYXBwaW5ncygpOwotCQlpZihtYXBwaW5ncyAhPSBudWxsKXsKLQkJCUl0ZXJhdG9yIGtleXMgPSBtYXBwaW5ncy5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoa2V5cy5oYXNOZXh0KCkpewotCQkJCVN0cmluZyBwYWthZ2UgPSAoU3RyaW5nKWtleXMubmV4dCgpOwotCQkJCVN0cmluZyBuYW1lc3BhY2UgPSAoU3RyaW5nKW1hcHBpbmdzLmdldChwYWthZ2UpOwotCQkJCU5hbWVzcGFjZU1hcHBpbmcgbWFwID0gbmV3IE5hbWVzcGFjZU1hcHBpbmcoKTsKLQkJCQltYXAuc2V0UGFja2FnZShwYWthZ2UpOwotCQkJCW1hcC5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLQkJCQllbWl0dGVyLmFkZE1hcHBpbmcobWFwKTsJCQotCQkJfQotCQl9Ci0JCQotCQotCQl0cnkgewotCQkJZW1pdHRlci5leGVjdXRlKCk7Ci0JCQlzdGF0dXMgPSBtb3ZlR2VuZXJhdGVkV1NETChlbnZpcm9ubWVudCwgbW9uaXRvcik7Ci0JCX0gY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGUpIHsKLQkJCWVudkxvZy5sb2coSUxvZy5FUlJPUiwgNTAxOCwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgZSk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCUF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX0dFTkVSQVRFICsgIiAiIC8vJE5PTi1OTFMtMSQKLQkJCStlLmdldENhdXNlKCkudG9TdHJpbmcoKSwgZS5nZXRDYXVzZSgpKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQl9IGZpbmFsbHkgewotCQlpZiAodGVtcE91dHB1dFdzZGxGaWxlLmV4aXN0cygpKSB7Ci0JCQl0ZW1wT3V0cHV0V3NkbEZpbGUuZGVsZXRlKCk7Ci0JCX0KLQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0KLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgbW92ZUdlbmVyYXRlZFdTREwoSUVudmlyb25tZW50IGVudmlyb25tZW50LAotCQkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJRmlsZUlucHV0U3RyZWFtIGZpblN0cmVhbSA9IG51bGw7Ci0JCQotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgICAgID0gKChCYXNlRWNsaXBzZUVudmlyb25tZW50KWVudmlyb25tZW50KS5nZXRSZXNvdXJjZUNvbnRleHQoKTsgICAgICAgIAotCQlJU3RhdHVzSGFuZGxlciAgc3RhdHVzSGFuZGxlciA9IGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKTsKLQkJCi0JCVN0cmluZyBvdXRwdXRXc2RsTG9jYXRpb24gPSBqYXZhV1NETFBhcmFtXy5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKTsKLQkJSVBhdGggdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKG91dHB1dFdzZGxMb2NhdGlvbik7Ci0JCXRyeSB7Ci0JCQlmaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHRlbXBPdXRwdXRXc2RsRmlsZSk7Ci0JCQlpZiAoZmluU3RyZWFtICE9IG51bGwpIHsKLQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihjb250ZXh0LCB0YXJnZXRQYXRoLm1ha2VBYnNvbHV0ZSgpLCBmaW5TdHJlYW0sCi0JCQkJCQltb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLQkJCQlmaW5TdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfTU9WRV9SRVNPVVJDRSxuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaWYgKGZpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLQlwdWJsaWMgU3RhdHVzIHVuZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdGF0dXMgcmVkbyhJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFybSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJtOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotCXsKLQkgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldEphdmFXU0RMUGFyYW0oKS5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKSk7IAotCSAgICBTdHJpbmcgdXJsID0gIiI7Ci0JCSAgdHJ5IHsKLQkgICAgCXVybCA9IGZpbGUudG9VUkwoKS50b1N0cmluZygpOwotCSAgICB9Ci0JCSAgY2F0Y2goTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11ZSl7fQotCQlyZXR1cm4gdXJsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL1dTREwySmF2YUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL1dTREwySmF2YUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1NmM5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9XU0RMMkphdmFDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA0MDQgICAxMzQ3OTEgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDgxMyAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDkyNyAgIDIwNDY0OSBrZWx2aW5oY0BjYS5pYm0uY29tIC0gS2VsdmluIENoZXVuZwotICogMjAwODA1MDUgICAyMjU2MjUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgRml4ZWQgbnVsbCBwb2ludGVyIHByb2JsZW0sIGlmIHVzZXIgY2FuY2VsbHMgb3V0IG9mIG92ZXJ3cml0ZSByZXNvdXJjZS4KLSAqIDIwMDgwNjA0ICAgMjM1NjQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFcnJvcnMgaW4gY2xpZW50IHByb3h5IGlmIHVzaW5nIGRlZmF1bHQgbmFtZXNwYWNlIHRvIHBhY2thZ2UgbWFwcGluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLndzZGwudG9KYXZhLkVtaXR0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLndzZGwudG9KYXZhLkdlbmVyYXRlZEZpbGVJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LkF4aXNFbWl0dGVyRGVmYXVsdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW4uV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMMkphdmFDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVQTE9ZX1RZUEUgPSAiZGVwbG95IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFVOREVQTE9ZX1RZUEUgPSAidW5kZXBsb3kiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVNUCA9ICJ0ZW1wIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotCXByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQlwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0JcHJpdmF0ZSBMaXN0IGRlcGxveUZpbGVzOwotCXByaXZhdGUgTGlzdCBqYXZhRmlsZXM7Ci0JcHJpdmF0ZSBGaWxlIHRlbXBPdXRwdXRGaWxlOwotCi0JcHVibGljIFdTREwySmF2YUNvbW1hbmQoKSB7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJTG9nIGVudkxvZyA9IGVudmlyb25tZW50LmdldExvZygpOwotCQlJU3RhdHVzIHN0YXR1czsKLQkJaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQkJCUF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCQotCQlpZiAod3NkbFVSSSAhPSBudWxsKSAvL2JvdHRvbSB1cCBjYXNlIGhhcyBhbHJlYWR5IGhhcyB0aGUgY29ycmVjdCBXU0RMIG9uIGphdmFXU0RMUGFyYW0KLQkJewotCQkJamF2YVdTRExQYXJhbS5zZXRJbnB1dFdzZGxMb2NhdGlvbih3c2RsVVJJKTsKLQkJfQotCQlqYXZhV1NETFBhcmFtLnNldEhUVFBVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotCQlqYXZhV1NETFBhcmFtLnNldEhUVFBQYXNzd29yZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotCQkKLQkJRW1pdHRlciB3c2RsMkphdmEgPSBuZXcgRW1pdHRlcigpOwotCQlpZiAoZW52TG9nLmlzRW5hYmxlZCgiZW1pdHRlciIpKSB7Ci0JCQl3c2RsMkphdmEuc2V0VmVyYm9zZSh0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCXdzZGwySmF2YS5zZXRWZXJib3NlKGZhbHNlKTsKLQkJfQotCQlib29sZWFuIHNlcnZlclNpZGUgPSBqYXZhV1NETFBhcmFtLmdldFNlcnZlclNpZGUoKSA9PSBKYXZhV1NETFBhcmFtZXRlci5TRVJWRVJfU0lERV9CRUFOOwotCQl3c2RsMkphdmEuc2V0U2VydmVyU2lkZShzZXJ2ZXJTaWRlKTsKLQkJaWYgKHNlcnZlclNpZGUpIHsKLQkJCXdzZGwySmF2YS5zZXRTa2VsZXRvbldhbnRlZChqYXZhV1NETFBhcmFtLmlzU2tlbGV0b25EZXBsb3koKSk7Ci0JCX0KLQkJCi0JCS8vIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHVzZSBhcyBvdXRwdXQgZGlyZWN0b3J5IGZvciB3c2RsMmphdmEKLQkJdGVtcE91dHB1dEZpbGUgPSBjcmVhdGVUZW1wRGlyKCk7Ci0JCXdzZGwySmF2YS5zZXRPdXRwdXREaXIodGVtcE91dHB1dEZpbGUudG9TdHJpbmcoKSk7Ci0JCQotCQl0cnkgewotCQkJaWYgKGphdmFXU0RMUGFyYW0uaXNNZXRhSW5mT25seSgpKSB7Ci0JCQkJLy8gZm9yIHRoZSBjYXNlIEphdmEyV1NETC1XU0RMMkphdmEKLQkJCQlIYXNoTWFwIHBjazJuc01hcCA9IGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKTsKLQkJCQlpZiAocGNrMm5zTWFwICE9IG51bGwpIHsKLQkJCQkJSGFzaE1hcCBuczJwY2tNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQkJCQlJdGVyYXRvciBrZXlzID0gcGNrMm5zTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJCXdoaWxlIChrZXlzLmhhc05leHQoKSkgewotCQkJCQkJU3RyaW5nIHBha2FnZSA9IChTdHJpbmcpIGtleXMubmV4dCgpOwotCQkJCQkJU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpIHBjazJuc01hcC5nZXQocGFrYWdlKTsKLQkJCQkJCW5zMnBja01hcC5wdXQobmFtZXNwYWNlLCBwYWthZ2UpOwotCQkJCQl9Ci0JCQkJCXdzZGwySmF2YS5zZXROYW1lc3BhY2VNYXAobnMycGNrTWFwKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vICBmb3IgdGhlIGNhc2UgV1NETDJKYXZhCQkJCi0JCQkJaWYgKGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKSAhPSBudWxsKSB7Ci0JCQkJCXdzZGwySmF2YS5zZXROYW1lc3BhY2VNYXAoamF2YVdTRExQYXJhbS5nZXRNYXBwaW5ncygpKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxOSwgdGhpcywgImV4ZWN1dGUiLCAiSmF2YSBvdXRwdXQgPSAiICsgamF2YVdTRExQYXJhbS5nZXRKYXZhT3V0cHV0KCkpOwotCQkJaWYgKGphdmFXU0RMUGFyYW0uZ2V0SFRUUFBhc3N3b3JkKCkgIT0gbnVsbCkgewotCQkJCXdzZGwySmF2YS5zZXRQYXNzd29yZChqYXZhV1NETFBhcmFtLmdldEhUVFBQYXNzd29yZCgpKTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTA4MSwgdGhpcywgImV4ZWN1dGUiLCAicGFzc3dvcmQ6ICIgKyBqYXZhV1NETFBhcmFtLmdldEhUVFBQYXNzd29yZCgpKTsKLQkJCX0KLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldEhUVFBVc2VybmFtZSgpICE9IG51bGwpIHsKLQkJCQl3c2RsMkphdmEuc2V0VXNlcm5hbWUoamF2YVdTRExQYXJhbS5nZXRIVFRQVXNlcm5hbWUoKSk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwODIsIHRoaXMsICJleGVjdXRlIiwgInVzZXJuYW1lOiAiICsgamF2YVdTRExQYXJhbS5nZXRIVFRQVXNlcm5hbWUoKSk7Ci0JCQl9Ci0JCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAyMCwgdGhpcywgImV4ZWN1dGUiLCAiV1NETCBMb2NhdGlvbiA9ICIgKyBqYXZhV1NETFBhcmFtLmdldElucHV0V3NkbExvY2F0aW9uKCkpOwotCQkJCi0JCQkvLyBJZiB0aW1lb3V0IGlzIG5vdCBzZXQsIHRoZSBkZWZhdWx0IHRpbWVvdXQgZm9yIHdzZGwyamF2YSBpcyA0NSBzZWNvbmRzLiAgCi0JCQkvLyBUaGUgdXNlciBjYW4gY2hhbmdlIHRoZSB0aW1lb3V0IHZhbHVlIGJ5IHNldHRpbmcgCi0JCQkvLyAiLURBeGlzV3NkbDJKYXZhVGltZW91dD08dGltZW91dF92YWx1ZV9pbl9taWxsaXNlY29uZHM+IiBhcyBWTSBhcmd1bWVudAotCQkJLy8gd2hlbiBzdGFydGluZyB0aGUgRWNsaXBzZSB3b3JrYmVuY2guCi0JCQkvLwotCQkJLy8gRm9yIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBzdGFydCB0aGUgRWNsaXBzZSB3b3JrYmVuY2ggCi0JCQkvLyBpbiBvcmRlciB0byBzZXQgdGhlIEF4aXMgV1NETCB0byBKYXZhIGVtaXR0ZXIgdGltZW91dCB0byA2MCBzZWNvbmRzOgotCQkJLy8KLQkJCS8vIAkJZWNsaXBzZSAtdm1hcmdzICItREF4aXNXc2RsMkphdmFUaW1lb3V0PTYwMDAwIgotCQkJLy8KLQkJCS8vIFdoZW4gQXhpc1dzZGwySmF2YVRpbWVvdXQgaXMgc2V0LCB0aGUgQXhpcyBlbWl0dGVyIHByZWZlcmVuY2UgcGFnZSB0aW1lb3V0IHNldHRpbmcgaXMgaWdub3JlZAotCQkgICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQkJU3RyaW5nIHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQXhpc1dzZGwySmF2YVRpbWVvdXQiKTsKLQkJCWxvbmcgdGltZW91dDsKLQkJCWlmICh3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgIT0gbnVsbCkgewotCQkJCXRpbWVvdXQgPSBuZXcgSW50ZWdlcih3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkpLmxvbmdWYWx1ZSgpOwotCQkJCXdzZGwySmF2YS5zZXRUaW1lb3V0KHRpbWVvdXQpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDkxLCB0aGlzLCAiZXhlY3V0ZSIsICJBeGlzV3NkbDJKYXZhVGltZW91dCA9ICIgKyB0aW1lb3V0KTsJCQkJCi0JCQl9Ci0JCQllbHNlIGlmKGNvbnRleHQuZ2V0VGltZU91dCgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VGltZU91dERlZmF1bHQoKSkKLQkJCXsKLQkJCQl0aW1lb3V0ID0gY29udGV4dC5nZXRUaW1lT3V0KCkgPT0gLTEgPyAtMSA6IGNvbnRleHQuZ2V0VGltZU91dCgpKiAxMDAwOyAKLQkJCQl3c2RsMkphdmEuc2V0VGltZW91dCh0aW1lb3V0KTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwMCwgdGhpcywgImV4ZWN1dGUiLCAiVGltZW91dCA9ICIgKyB0aW1lb3V0KTsKLQkJCX0KLQkJICAgIGlmIChjb250ZXh0LmdldERlcGxveVNjb3BlVHlwZSgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0RGVwbG95U2NvcGVEZWZhdWx0KCkpCi0JCSAgICB7Ci0JCSAgICAJc3dpdGNoIChjb250ZXh0LmdldERlcGxveVNjb3BlVHlwZSgpKQotCQkgICAgCXsKLQkJICAgIAkJY2FzZSBBeGlzRW1pdHRlckNvbnRleHQuREVQTE9ZX1NDT1BFX1RZUEVfQVBQTElDQVRJT046Ci0JCSAgICAJCQl3c2RsMkphdmEuc2V0U2NvcGUoU2NvcGUuQVBQTElDQVRJT04pOwotCQkJCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDEsIHRoaXMsICJleGVjdXRlIiwgIiBEZXBsb3kgU2NvcGU6IEFwcGxpY2F0aW9uIiApOwotCQkgICAgCQkJYnJlYWs7Ci0JCSAgICAJCWNhc2UgQXhpc0VtaXR0ZXJDb250ZXh0LkRFUExPWV9TQ09QRV9UWVBFX1JFUVVFU1Q6Ci0JCSAgICAJCQl3c2RsMkphdmEuc2V0U2NvcGUoU2NvcGUuUkVRVUVTVCk7Ci0JCQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwMiwgdGhpcywgImV4ZWN1dGUiLCAiIERlcGxveSBTY29wZTogUmVxdWVzdCIgKTsKLQkJICAgIAkJCWJyZWFrOwotCQkgICAgCQljYXNlIEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9TRVNTVElPTjoKLQkJICAgIAkJCXdzZGwySmF2YS5zZXRTY29wZShTY29wZS5TRVNTSU9OKTsKLQkJCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTAzLCB0aGlzLCAiZXhlY3V0ZSIsICIgRGVwbG95IFNjb3BlOiBTZXNzaW9uIiApOwotCQkgICAgCQkJYnJlYWs7Ci0JCSAgICAJCWRlZmF1bHQ6Ci0JCSAgICAJfQotCQkgICAgfQotCQkgICAgCi0JCSAgICBpZiAoY29udGV4dC5pc0FsbFdhbnRlZEVuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldEFsbFdhbnRlZERlZmF1bHQoKSkKLQkJICAgIHsKLQkJICAgIAl3c2RsMkphdmEuc2V0QWxsV2FudGVkKGNvbnRleHQuaXNBbGxXYW50ZWRFbmFibGVkKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTA0LCB0aGlzLCAiZXhlY3V0ZSIsICIgc2V0IEFsbFdhbnRlZCA6ICIgKyBjb250ZXh0LmlzQWxsV2FudGVkRW5hYmxlZCgpICk7Ci0JCSAgICB9Ci0KLQkJICAgIGlmIChjb250ZXh0LmlzSGVscGVyV2FudGVkRW5hYmxlZCgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKQotCQkgICAgewotCQkgICAgCXdzZGwySmF2YS5zZXRIZWxwZXJXYW50ZWQoY29udGV4dC5pc0hlbHBlcldhbnRlZEVuYWJsZWQoKSk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDUsIHRoaXMsICJleGVjdXRlIiwgIiBzZXQgSGVscGVyV2FudGVkIDogIiArIGNvbnRleHQuaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkgKTsKLQkJCX0KLQkJICAgIGlmIChjb250ZXh0LmlzV3JhcEFycmF5c0VuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFdyYXBBcnJheXNEZWZhdWx0KCkpCi0JCSAgICB7Ci0JCSAgICAJd3NkbDJKYXZhLnNldFdyYXBBcnJheXMoY29udGV4dC5pc1dyYXBBcnJheXNFbmFibGVkKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTA2LCB0aGlzLCAiZXhlY3V0ZSIsICIgc2V0IFdyYXBBcnJheXMgOiAiICsgY29udGV4dC5pc1dyYXBBcnJheXNFbmFibGVkKCkgKTsKLQkJICAgIH0KLQkJCQotCQkJUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19QQVJTSU5HX1dTREwsIGphdmFXU0RMUGFyYW0uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKSApICk7Ci0JCQkKLQkJCXdzZGwySmF2YS5ydW4oamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpKTsKLQkJCQotCQkJamF2YUZpbGVzID0gd3NkbDJKYXZhLmdldEdlbmVyYXRlZEZpbGVOYW1lcygpOwotCQkJCi0JCQlkZXBsb3lGaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWlmIChzZXJ2ZXJTaWRlKSB7Ci0JCQkJLy8gc2V0IGRlcGxveW1lbnQgZmlsZXMKLQkJCQlMaXN0IGRlcGxveW1lbnRGaWxlczEgPSB3c2RsMkphdmEuZ2V0R2VuZXJhdGVkRmlsZUluZm8oKS5maW5kVHlwZShERVBMT1lfVFlQRSk7Ci0JCQkJTGlzdCBkZXBsb3ltZW50RmlsZXMyID0gd3NkbDJKYXZhLmdldEdlbmVyYXRlZEZpbGVJbmZvKCkuZmluZFR5cGUoVU5ERVBMT1lfVFlQRSk7Ci0JCQkJaWYgKGRlcGxveW1lbnRGaWxlczEgIT0gbnVsbCAmJiBkZXBsb3ltZW50RmlsZXMyICE9IG51bGwpIHsKLQkJCQkJZGVwbG95bWVudEZpbGVzMS5hZGRBbGwoZGVwbG95bWVudEZpbGVzMik7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGVwbG95bWVudEZpbGVzMS5zaXplKCk7IGkrKykgewotCQkJCQkJR2VuZXJhdGVkRmlsZUluZm8uRW50cnkgZW50cnkgPSAoR2VuZXJhdGVkRmlsZUluZm8uRW50cnkpIGRlcGxveW1lbnRGaWxlczEuZ2V0KGkpOwotCQkJCQkJZGVwbG95RmlsZXMuYWRkKGVudHJ5LmZpbGVOYW1lKTsKLQkJCQkJfQotCQkJCX0JCi0JCQkJamF2YUZpbGVzLnJlbW92ZUFsbChkZXBsb3lGaWxlcyk7Ci0JCQl9Ci0JCQkKLQkJCS8vIHVwZGF0ZSB0aGUgbmFtZTJwYWNrYWdlIG1hcCB3aXRoIGFjdHVhbCBwYWNrYWdlIHZhbHVlcyB1c2VkIGJ5IHRoZSBlbWl0dGVyCi0JCQkvLyBiZWNhdXNlIGVtaXR0ZXIgd2lsbCBwcmVmaXggaWxsZWdhbCBwYWNrYWdlIG5hbWVzIHdpdGggIl8iLiAgU2VlIGJ1ZwotCQkJLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIzNTY0OAotCQkJaWYgKCFqYXZhV1NETFBhcmFtLmlzTWV0YUluZk9ubHkoKSAmJiBqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCkgIT0gbnVsbCkgewotCQkJCQotCQkJCU1hcCBwa2cyTnNNYXAgPSB3c2RsMkphdmEuZ2V0TmFtZXNwYWNlcygpLmdldFBrZzJOYW1lc3BhY2VzTWFwKCk7Ci0JCQkJCi0JCQkJSXRlcmF0b3IgaXRlciA9IHBrZzJOc01hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJCQotCQkJCQlNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KSBpdGVyLm5leHQoKTsKLQkJCQkJCi0JCQkJCVN0cmluZyBwa2cgPSAoU3RyaW5nKSBlbnRyeS5nZXRLZXkoKTsKLQkJCQkJTGlzdCBuc0xpc3QgPSAoTGlzdCkgZW50cnkuZ2V0VmFsdWUoKTsKLQkJCQkJCi0JCQkJCUl0ZXJhdG9yIGl0ZXIyID0gbnNMaXN0Lml0ZXJhdG9yKCk7Ci0JCQkJCXdoaWxlIChpdGVyMi5oYXNOZXh0KCkpIHsKLQkJCQkJCVN0cmluZyBucyA9IChTdHJpbmcpIGl0ZXIyLm5leHQoKTsKLQkJCQkJCWlmIChqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCkuY29udGFpbnNLZXkobnMpKQotCQkJCQkJCWphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKS5wdXQobnMsIHBrZyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCXN0YXR1cyA9IG1vdmVHZW5lcmF0ZWRGaWxlcyhlbnZpcm9ubWVudCwgbW9uaXRvcik7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWVudkxvZy5sb2coSUxvZy5FUlJPUiwgNTAyMSwgdGhpcywgImV4ZWN1dGUiLCBlKTsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJCQlBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfSkFWQV9HRU5FUkFURSArICIgIiAvLyROT04tTkxTLTEkCi0JCQkJCSsgZS50b1N0cmluZygpLCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQl9IGZpbmFsbHkgewotCQkJZGVsZXRlRGlyKHRlbXBPdXRwdXRGaWxlKTsgCQkJCi0JCX0KLQkJcmV0dXJuIHN0YXR1czsJCi0JfQotCSAgCi0JcHVibGljIElTdGF0dXMgbW92ZUdlbmVyYXRlZEZpbGVzKCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIAotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlJU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpOwkJCi0JCUZpbGVJbnB1dFN0cmVhbSBmaW5TdHJlYW0gPSBudWxsOwotCQkKLQkJdHJ5IHsKLQkJCVN0cmluZyBvdXRwdXREaXIsIGphdmFPdXRwdXQ7Ci0JCQlvdXRwdXREaXIgPSByZW1vdmVGaWxlUHJvdG9jb2woamF2YVdTRExQYXJhbS5nZXRPdXRwdXQoKSk7Ci0JCQlqYXZhT3V0cHV0ID0gcmVtb3ZlRmlsZVByb3RvY29sKGphdmFXU0RMUGFyYW0uZ2V0SmF2YU91dHB1dCgpKTsKLQkJCQotCQkJUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52aXJvbm1lbnQpLmdldFJlc291cmNlQ29udGV4dCgpOwkJCQkKLQkJCUlQYXRoICAgICAgICAgICBvdXRwdXRQYXRoID0gbmV3IFBhdGggKG91dHB1dERpcik7Ci0JCQkKLQkJCVN0cmluZyBmaWxlTmFtZTsKLQkJCUlQYXRoIHRhcmdldFBhdGg9bnVsbDsKLQotCQkJU3RyaW5nIGRlcGxveUZpbGU7Ci0JCQlJdGVyYXRvciBpdGVyYXRvcjsKLQkJCQotCQkJU3RyaW5nIHRlbXBPdXRwdXREaXIgPSB0ZW1wT3V0cHV0RmlsZS50b1N0cmluZygpOwotCQkJU3RyaW5nIFtdIG1vdmVkRGVwbG95RmlsZXMgPSBuZXcgU3RyaW5nIFtkZXBsb3lGaWxlcy5zaXplKCldOwotCQkJaXRlcmF0b3IgPSBkZXBsb3lGaWxlcy5pdGVyYXRvcigpOwotCQkJaW50IGkgPSAwOwotCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCWRlcGxveUZpbGUgPSAoU3RyaW5nKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJRmlsZSBzb3VyY2UgPSBuZXcgRmlsZShkZXBsb3lGaWxlKTsKLQkJCQlmaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZSk7Ci0JCQkJaWYgKGZpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWlmIChkZXBsb3lGaWxlLnN0YXJ0c1dpdGgodGVtcE91dHB1dERpcikpIHsKLQkJCQkJCWZpbGVOYW1lID0gZGVwbG95RmlsZS5zdWJzdHJpbmcodGVtcE91dHB1dERpci5sZW5ndGgoKSk7Ci0JCQkJCQl0YXJnZXRQYXRoID0gb3V0cHV0UGF0aC5hcHBlbmQoZmlsZU5hbWUpLm1ha2VBYnNvbHV0ZSgpOyAgCi0JCQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihjb250ZXh0LCAgCi0JCQkJCQkJCXRhcmdldFBhdGgsCi0JCQkJCQkJCWZpblN0cmVhbSwKLQkJCQkJCQkJbW9uaXRvciwKLQkJCQkJCQkJc3RhdHVzSGFuZGxlcik7Ci0JCQkJCQltb3ZlZERlcGxveUZpbGVzW2krK109IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGVGb3JMb2NhdGlvbih0YXJnZXRQYXRoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQkJCX0KLQkJCQkJZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlqYXZhV1NETFBhcmFtLnNldERlcGxveW1lbnRGaWxlcyhtb3ZlZERlcGxveUZpbGVzKTsKLQkJCQotCQkJSVBhdGggamF2YU91dHB1dFBhdGggPSBuZXcgUGF0aCAoamF2YU91dHB1dCk7Ci0JCQkKLQkJCVN0cmluZyBqYXZhRmlsZTsKLQkJCVN0cmluZyBmdWxsQ2xhc3NOYW1lID0gbnVsbDsKLQkJCVZlY3RvciBtb3ZlZEphdmFGaWxlcyA9ICBuZXcgVmVjdG9yKCk7OwotCQkJaXRlcmF0b3IgPSBqYXZhRmlsZXMuaXRlcmF0b3IoKTsKLQkJCWkgPSAwOwotCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCWphdmFGaWxlID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCQkJCUZpbGUgc291cmNlID0gbmV3IEZpbGUoamF2YUZpbGUpOwotCQkJCWZpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc291cmNlKTsKLQkJCQlpZiAoZmluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJLy8gZm9yIHRoZSBjYXNlIEphdmEyV1NETC1XU0RMMkphdmEsIG5vIG5lZWQgdG8gbW92ZSBKYXZhIGZpbGVzLCBqdXN0IGRlbGV0ZSB0aGVtCi0JCQkJCWlmICghamF2YVdTRExQYXJhbS5pc01ldGFJbmZPbmx5KCkpIHsKLQkJCQkJCS8vIGZvciB0aGUgY2FzZSBXU0RMMkphdmEsIG1vdmUgSmF2YSBmaWxlcyB0byBKYXZhIG91dHB1dCBkaXJlY3RvcnkKLQkJCQkJCWlmIChqYXZhRmlsZS5zdGFydHNXaXRoKHRlbXBPdXRwdXREaXIpKSB7Ci0JCQkJCQkJZnVsbENsYXNzTmFtZSA9IGphdmFGaWxlLnN1YnN0cmluZyh0ZW1wT3V0cHV0RGlyLmxlbmd0aCgpKTsKLQkJCQkJCQl0YXJnZXRQYXRoID0gamF2YU91dHB1dFBhdGguYXBwZW5kKGZ1bGxDbGFzc05hbWUpLm1ha2VBYnNvbHV0ZSgpOyAKLQkJCQkJCQlJRmlsZSBmaWxlID0gRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZUF0TG9jYXRpb24oY29udGV4dCwgIAotCQkJCQkJCQkJdGFyZ2V0UGF0aCwKLQkJCQkJCQkJCWZpblN0cmVhbSwKLQkJCQkJCQkJCW1vbml0b3IsCi0JCQkJCQkJCQlzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQkKLQkJCQkJCQlpZiggZmlsZSAhPSBudWxsICkKLQkJCQkJCQl7Ci0JCQkJCQkJICBmaWxlLnNldENoYXJzZXQoIlVURi04IiwgbW9uaXRvcik7Ci0JCQkJCQkJICBtb3ZlZEphdmFGaWxlcy5hZGQoIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGVGb3JMb2NhdGlvbih0YXJnZXRQYXRoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkgKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFXU0RMUGFyYW0uc2V0SmF2YUZpbGVzKCAoU3RyaW5nW10pbW92ZWRKYXZhRmlsZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApICk7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfTU9WRV9SRVNPVVJDRSxuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCQlzdGF0dXNIYW5kbGVyLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQl9CQkJCi0JCX0KLQkJCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHVuZGVyIGRpci4gCi0JICogSnVzdCBpZ25vcmUgYW5kIGtlZXAgZ29pbmcgaWYgZGVsZXRlIGlzIG5vdCBzdWNjZXNzZnVsCi0JICogCi0JICogQHBhcmFtIGRpciBkaXJlY3RvcnkgdG8gZGVsZXRlCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlRGlyKEZpbGUgZGlyKSB7Ci0JCWlmIChkaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJU3RyaW5nW10gY2hpbGRyZW4gPSBkaXIubGlzdCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCWRlbGV0ZURpcihuZXcgRmlsZShkaXIsIGNoaWxkcmVuW2ldKSk7Ci0JCQl9Ci0JCX0KLQkJLy8gVGhlIGRpcmVjdG9yeSBpcyBub3cgZW1wdHkgc28gZGVsZXRlIGl0Ci0JCWRpci5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdW5kZXIgdGhlIHBsdWdpbidzIHN0YXRlIGxvY2F0aW9uIChpLmUuCi0JICogLm1ldGFkYXRhLy5wbHVnaW4gZGlyZWN0b3J5KQotCSAqIAotCSAqIEByZXR1cm4gRmlsZQotCSAqLwotCXByaXZhdGUgRmlsZSBjcmVhdGVUZW1wRGlyKCkgewotCQlTdHJpbmcgcGx1Z2luVGVtcERpciA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luCi0JCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b1N0cmluZygpOwotCQlGaWxlIHRlbXBEaXIgPSBuZXcgRmlsZShwbHVnaW5UZW1wRGlyKTsKLQkJRmlsZSBuZXdUZW1wRGlyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW5ld1RlbXBEaXIgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKFRFTVAsICIiLCB0ZW1wRGlyKTsKLQkJCS8vIGRlbGV0ZSB0aGUgdGVtcCBmaWxlIGFuZCBjcmVhdGUgYSB0ZW1wIGRpcmVjdG9yeSBpbnN0ZWFkCi0JCQlpZiAobmV3VGVtcERpci5kZWxldGUoKSkgewotCQkJCWlmIChuZXdUZW1wRGlyLm1rZGlyKCkpIHsKLQkJCQkJdGVtcERpciA9IG5ld1RlbXBEaXI7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRlbXBEaXI7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gdGVtcERpcjsKLQkJfQotCX0KLQkJCi0JLyoKLQkgKiBIYWNrOiBBeGlzIGRvZXNuJ3QgbGlrZSBmaWxlIFVSTHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZW1vdmVGaWxlUHJvdG9jb2woU3RyaW5nIHMpIHsKLQkJaWYgKHMuc3RhcnRzV2l0aCgiZmlsZToiKSkgewotCQkJU3RyaW5nIG5ld1MgPSBzLnN1YnN0cmluZyg1LCBzLmxlbmd0aCgpKTsKLQkJCWludCBpID0gbmV3Uy5pbmRleE9mKCc6Jyk7Ci0JCQlpZiAoaSAhPSAtMSkgewotCQkJCVN0cmluZyBwcm90b2NvbCA9IG5ld1Muc3Vic3RyaW5nKDAsIGkpOwotCQkJCWludCBqID0gcHJvdG9jb2wuaW5kZXhPZignLycpOwotCQkJCWludCBrID0gcHJvdG9jb2wuaW5kZXhPZignXFwnKTsKLQkJCQlpbnQgbWF4ID0gTWF0aC5tYXgoaiwgayk7Ci0JCQkJaWYgKG1heCAhPSAtMSkKLQkJCQkJbmV3UyA9IG5ld1Muc3Vic3RyaW5nKG1heCArIDEsIG5ld1MubGVuZ3RoKCkpOwotCQkJfQotCQkJcmV0dXJuIG5ld1M7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCi0JcHVibGljIFN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RhdHVzIHJlZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmYzQzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uaW50ZXJuYWwuZW52aXJvbm1lbnQuZWNsaXBzZS5GaWxlUmVzb3VyY2VVdGlsczsKLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1Nb2RpZmllciBpbXBsZW1lbnRzIEJlYW5Nb2RpZmllciB7Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBwcm9wZXJ0eUhvbGRlcikKLQl7Ci0JCUphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JCWlmIChiZWFuICE9IG51bGwpCi0JCXsKLQkJCWphdmFXU0RMUGFyYW0gPSAoSmF2YVdTRExQYXJhbWV0ZXIpYmVhbjsJCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlqYXZhV1NETFBhcmFtID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCX0KLQkJIAotCQkvL2xvb2sgZm9yIGVhY2gga25vd24ga2V5IGluIHRoZSBtYXAgJiBpZiB0aGVyZSwgY29udmVydCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IG9uIGphdmFXU0RMUGFyYW0KLQkJaWYgKHByb3BlcnR5SG9sZGVyIGluc3RhbmNlb2YgTWFwKQotCQl7CQotCQkJTWFwIHByb3BlcnR5TWFwID0gKE1hcClwcm9wZXJ0eUhvbGRlcjsKLQkJCQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJVc2UiKSkKLQkJCXsJCQkJCi0JCQkgICBqYXZhV1NETFBhcmFtLnNldFVzZSgoU3RyaW5nKXByb3BlcnR5TWFwLmdldCgiVXNlIikpOwkKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiU3R5bGUiKSkKLQkJCXsKLQkJCQlqYXZhV1NETFBhcmFtLnNldFN0eWxlKChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJTdHlsZSIpKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiSmF2YU91dHB1dCIpKQotCQkJewkJCQkgCi0gICAgICAgIFN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJKYXZhT3V0cHV0Iik7Ci0gICAgICAgIGludCAgICBpbmRleCAgICAgICAgICA9IG91dHB1dExvY2F0aW9uLmluZGV4T2YoICc6JyApOwotICAgICAgICAKLSAgICAgICAgaWYoIGluZGV4ID09IC0xICkKLSAgICAgICAgewotICAgICAgICAgIC8vIEEgY29sb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RyaW5nIHNvIHdlIHdpbGwgYXNzdW1lIHRoYXQKLSAgICAgICAgICAvLyBpdCBpcyBhIHdvcmtzcGFjZSByZWxhdGl2ZSB1cmkgZm9yIG5vdy4KLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRMb2NhdGlvbiApICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHJlc291cmNlID09IG51bGwgfHwgcmVzb3VyY2UuZ2V0TG9jYXRpb24oKSA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuYmluZCggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExvY2F0aW9uICkgKTsgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG91dHB1dExvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIAotCQkJCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dCggb3V0cHV0TG9jYXRpb24gKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiTWV0aG9kcyIpKQotCQkJewotCQkJCS8vZ2V0IE1ldGhvZCBsaXN0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBtZXRob2RMaXN0ID0gKFN0cmluZylwcm9wZXJ0eU1hcC5nZXQoIk1ldGhvZHMiKTsKLQkJCQkKLQkJCQkvL3Rva2VuaXplIHRoZSBtZXRob2QgbGlzdAotCQkJCVN0cmluZ1Rva2VuaXplciB0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG1ldGhvZExpc3QsICIgIik7Ci0JCQkJSGFzaHRhYmxlIG1ldGhvZHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQkJd2hpbGUgKHRvay5oYXNNb3JlVG9rZW5zKCkpCi0JCQkJewotICAgICAgICAgIFN0cmluZyBtZXRob2QgPSAoU3RyaW5nKXRvay5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbWV0aG9kLmluZGV4T2YoICcoJyApID09IC0xICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXRob2QgPSBtZXRob2QgKyAiKCkiOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLQkJCQkJbWV0aG9kcy5wdXQoIG1ldGhvZCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCQkJCX0JCQkJCi0JCQkJamF2YVdTRExQYXJhbS5zZXRNZXRob2RzKG1ldGhvZHMpOwotCQkJfQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJNYXBwaW5ncyIpKQotCQkJewotCQkJCS8vZ2V0IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlIG1hcHBpbmdzIGluIGl0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJNYXBwaW5ncyIpOwotICAgICAgICAKLQkJCQkvL2dldCB0aGUgbGlzdCBvZiBtYXBwaW5nIGZyb20gdGhlIGZpbGUKLQkJCQlIYXNoTWFwIG1hcHBpbmdzID0gcmVhZE1hcHBpbmdzRnJvbUZpbGUoZmlsZW5hbWUpOwotICAgICAgICAKLQkJCQlqYXZhV1NETFBhcmFtLnNldE1hcHBpbmdzKG1hcHBpbmdzKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBiZWFuTmFtZSA9IGphdmFXU0RMUGFyYW0uZ2V0QmVhbk5hbWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBiZWFuTmFtZSAhPSBudWxsICYmICFiZWFuTmFtZS5lcXVhbHMoIiIpICkKLSAgICAgICAgewotICAgICAgICAgIGludCAgICBsYXN0RG90ICAgICA9IGJlYW5OYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBsYXN0RG90ID09IC0xID8gbnVsbCA6IGJlYW5OYW1lLnN1YnN0cmluZyggMCwgbGFzdERvdCApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBtYXBwaW5ncyAhPSBudWxsICYmIHBhY2thZ2VOYW1lICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0bnMgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCggcGFja2FnZU5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIHRucyAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgamF2YVdTRExQYXJhbS5zZXROYW1lc3BhY2UodG5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgCi0gICAgICAgIH0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIEhhc2hNYXAgcmVhZE1hcHBpbmdzRnJvbUZpbGUoU3RyaW5nIGZpbGVuYW1lKQotCSAgewotCQlIYXNoTWFwIGhhc2htYXAgPSBuZXcgSGFzaE1hcCgpOwotCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlbmFtZSkpOwotCQkKLQkJaWYgKHJlc291cmNlICE9IG51bGwgKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wcy5sb2FkKHJlc291cmNlLmdldENvbnRlbnRzKCkpOwkJCQotCQkJaGFzaG1hcC5wdXRBbGwocHJvcHMpOwkJCQkJCQotCQkgIH0KLQkJICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgICAgLy8gVE9ETyBSZXBvcnQgc29tZSBlcnJvciBoZXJlLgotCQkgIH0KLQkJfQkKLQkJcmV0dXJuIGhhc2htYXA7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZmExZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1ldGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBTRVJWRVJfU0lERV9OT05FID0gMDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgU0VSVkVSX1NJREVfQkVBTiA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFNFUlZFUl9TSURFX0VKQiA9IDI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAiUlBDIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gIkRPQ1VNRU5UIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX1dSQVBQRUQgPSAiV1JBUFBFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9MSVRFUkFMID0gIkxJVEVSQUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0VOQ09ERUQgPSAiRU5DT0RFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJlYW5OYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbgotCXByaXZhdGUgU3RyaW5nIGNsYXNzcGF0aCA9IG51bGw7Ci0JLy8gVGhlIGNsYXNzIHBhdGggZm9yIGxvYWRpbmcgdGhlIGJlYW4gYW5kIGNvbW1hbmQgZXhlY3V0aW9uCi0JcHJpdmF0ZSBTdHJpbmcgYmVhblBhY2thZ2UgPSBudWxsOyAvLyBUaGUgcGFja2FnZSBsb2NhdGlvbiBvZiB0aGUgYmVhbgotCXByaXZhdGUgU3RyaW5nIHBvcnRUeXBlTmFtZSA9IG51bGw7IC8vIFRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VOYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIG91dHB1dFdzZGxMb2NhdGlvbiA9IG51bGw7Ci0JLy8gVGhlIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgaW5wdXRXc2RsTG9jYXRpb24gPSBudWxsOwotCS8vIFRoZSBpbnB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgdXJsTG9jYXRpb24gPSBudWxsOyAvLyBUaGUgVVJMIGxvY2F0aW9uIG9mIHRoZSB3ZWIgc2VydmljZQotCXByaXZhdGUgSGFzaHRhYmxlIG1ldGhvZHMgPSBudWxsOyAvLyBUaGUgYXJyYXkgb2YgbWV0aG9kIG5hbWVzCi0JcHJpdmF0ZSBTdHJpbmcgbWV0aG9kU3RyaW5nXyA9ICIiOyAvLyROT04tTkxTLTEkCi0JIC8vVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0aG9kIGFycmF5Ci0JcHJpdmF0ZSBTdHJpbmcgc3R5bGUgPSBudWxsOwotCS8vIFRoZSBzdHlsZSAoUlBDIHwgRE9DVU1FTlQgfCBXUkFQUEVEKSBhdHRyaWJ1dGUgZm9yIHRoZSBnZW5lcmF0ZWQgV1NETAotCXByaXZhdGUgU3RyaW5nIHVzZSA9IG51bGw7Ci0JLy8gVGhlIHVzZSAoTElURVJBTCB8IEVOQ09ERUQpIGF0dHJpYnR1ZSBmb3IgdGhlIGdlbmVyYXRlZCBXU0RMCi0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBkZXBsb3ltZW50IGRlc2NyaXB0b3JzICYgSmF2YSBjb2RlIChvdXRwdXQgZnJvbSBXU0RMMkphdmEgY29tbWFuZCkKLQlwcml2YXRlIFN0cmluZyBqYXZhT3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBKYXZhIGNvZGUgKG91dHB1dCBmcm9tIFdTREwySmF2YSBjb21tYW5kKQotCXByaXZhdGUgYm9vbGVhbiBtZXRhSW5mT25seSA9IGZhbHNlOyAvLyBNRVRBLUlORi1PTkxZIGZsYWcKLQlwcml2YXRlIGJ5dGUgc2VydmVyU2lkZSA9IFNFUlZFUl9TSURFX05PTkU7Ci0JLy8gc2VydmVyLXNpZGUgZmxhZyAoU0VSVkVSX1NJREVfTk9ORSB8IFNFUlZFUl9TSURFX0JFQU4gfCBTRVJWRVJfU0lERV9FSkIpCi0JcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gc2tlbGV0b25EZXBsb3kgPSB0cnVlOwotCXByaXZhdGUgU3RyaW5nIGNvbnRhaW5lciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBkZXBsb3ltZW50RmlsZXMgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nW10gamF2YUZpbGVzID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZ3Vlc3NQcm9qZWN0VVJMID0gZmFsc2U7Ci0JcHJpdmF0ZSBIYXNoTWFwIG1hcHBpbmdQYWlyczsKLQlwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldENvbnRhaW5lcihTdHJpbmcgY29udGFpbmVyKSB7Ci0JCXRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGFpbmVyKCkgewotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBKYXZhV1NETFBhcmFtZXRlci4KLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIoKSB7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmVhbk5hbWUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEJlYW5OYW1lKCkgewotCQlyZXR1cm4gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRCZWFuUGFja2FnZSgpIHsKLQkJcmV0dXJuIGJlYW5QYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBvcnRUeXBlTmFtZS4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lKCkgewotCQlyZXR1cm4gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTmFtZSgpIHsKLQkJcmV0dXJuIHNlcnZpY2VOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG91dHB1dC4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0KCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGhvZHMuCi0JICogQHJldHVybiBTdHJpbmdbXQotCSAqLwotCXB1YmxpYyBIYXNodGFibGUgZ2V0TWV0aG9kcygpIHsKLQkJcmV0dXJuIG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tbWEgc2VwZXJhdGVkIHN0cmluZyByZXByZXNldGF0aW9uIG9mIHRoZSBtZXRob2RzLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRNZXRob2RTdHJpbmcoKSB7Ci0JCWlmIChtZXRob2RTdHJpbmdfLmVxdWFscygiIikpCi0JCXsJCQotCQkJRW51bWVyYXRpb24gZSA9IG1ldGhvZHMua2V5cygpOwotCSAJCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotCSAgICAJewotCQotCQkJCVN0cmluZyBzaWduYXR1cmUgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0JCQkJaWYgKCgoQm9vbGVhbikgbWV0aG9kcy5nZXQoc2lnbmF0dXJlKSkuYm9vbGVhblZhbHVlKCkpewotCQkJCQkJCQlpbnQgaW5kZXggPSBzaWduYXR1cmUuaW5kZXhPZignKCcpOwotCQkJCQkJCQlTdHJpbmcgbmFtZSA9IHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCQkJCQltZXRob2RTdHJpbmdfICs9IG5hbWU7Ci0JCQkJfQotCQkgICAgCWlmIChpICE9IG1ldGhvZHMuc2l6ZSgpIC0xKSAvLyB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcnJheSBpdGVtCQotCQkJCXsKLQkJCQkJbWV0aG9kU3RyaW5nXyArPSAiLCI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBtZXRob2RTdHJpbmdfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBtZXRob2RzCSAqCi0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kU3RyaW5nKFN0cmluZyBtZXRob2RzKQotCXsKLQkJbWV0aG9kU3RyaW5nXyA9IG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3R5bGUgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHlsZSgpIHsKLQkJcmV0dXJuIHN0eWxlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVybExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRVcmxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIHVybExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVzZSBhdHRyaWJ1dGUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFVzZSgpIHsKLQkJcmV0dXJuIHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIG91dHB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBiZWFuTmFtZS4KLQkgKiBAcGFyYW0gYmVhbk5hbWUgVGhlIGJlYW5OYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJlYW5OYW1lKFN0cmluZyBiZWFuTmFtZSkgewotCQl0aGlzLmJlYW5OYW1lID0gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QmVhblBhY2thZ2UoU3RyaW5nIGJlYW5QYWNrYWdlKSB7Ci0JCXRoaXMuYmVhblBhY2thZ2UgPSBiZWFuUGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBwb3J0VHlwZU5hbWUuCi0JICogQHBhcmFtIHBvcnRUeXBlTmFtZSBUaGUgcG9ydFR5cGVOYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKSB7Ci0JCXRoaXMucG9ydFR5cGVOYW1lID0gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgc2VydmljZU5hbWUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZU5hbWUoU3RyaW5nIHNlcnZpY2VOYW1lKSB7Ci0JCXRoaXMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXQuCi0JICogQHBhcmFtIG91dHB1dCBUaGUgb3V0cHV0IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dChTdHJpbmcgb3V0cHV0KSB7Ci0JCXRoaXMub3V0cHV0ID0gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIG1ldGhvZHMuCi0JICogQHBhcmFtIG1ldGhvZHMgVGhlIG1ldGhvZHMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kcyhIYXNodGFibGUgbWV0aG9kcykgewotCQl0aGlzLm1ldGhvZHMgPSBtZXRob2RzOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHN0eWxlLgotCSAqIEBwYXJhbSBzdHlsZSBUaGUgc3R5bGUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHN0eWxlKSB7Ci0JCXRoaXMuc3R5bGUgPSBzdHlsZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB1cmxMb2NhdGlvbi4KLQkgKiBAcGFyYW0gdXJsTG9jYXRpb24gVGhlIHVybExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVybExvY2F0aW9uKFN0cmluZyB1cmxMb2NhdGlvbikgewotCQl0aGlzLnVybExvY2F0aW9uID0gdXJsTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlLgotCSAqIEBwYXJhbSB1c2UgVGhlIHVzZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVc2UoU3RyaW5nIHVzZSkgewotCQl0aGlzLnVzZSA9IHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHBhcmFtIG91dHB1dFdzZGxMb2NhdGlvbiBUaGUgb3V0cHV0V3NkbExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dFdzZGxMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMub3V0cHV0V3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGFJbmZPbmx5LgotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzTWV0YUluZk9ubHkoKSB7Ci0JCXJldHVybiBtZXRhSW5mT25seTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBtZXRhSW5mT25seS4KLQkgKiBAcGFyYW0gbWV0YUluZk9ubHkgVGhlIG1ldGFJbmZPbmx5IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE1ldGFJbmZPbmx5KGJvb2xlYW4gbWV0YUluZk9ubHkpIHsKLQkJdGhpcy5tZXRhSW5mT25seSA9IG1ldGFJbmZPbmx5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZlclNpZGUuCi0JICogQHJldHVybiBieXRlCi0JICovCi0JcHVibGljIGJ5dGUgZ2V0U2VydmVyU2lkZSgpIHsKLQkJcmV0dXJuIHNlcnZlclNpZGU7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgc2VydmVyU2lkZS4KLQkgKiBAcGFyYW0gc2VydmVyU2lkZSBUaGUgc2VydmVyU2lkZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJTaWRlKGJ5dGUgc2VydmVyU2lkZSkgewotCQl0aGlzLnNlcnZlclNpZGUgPSBzZXJ2ZXJTaWRlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJbnB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGlucHV0V3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEBwYXJhbSBpbnB1dFdzZGxMb2NhdGlvbiBUaGUgaW5wdXRXc2RsTG9jYXRpb24gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0SW5wdXRXc2RsTG9jYXRpb24oU3RyaW5nIGlucHV0V3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMuaW5wdXRXc2RsTG9jYXRpb24gPSBpbnB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgb3V0cHV0LgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRKYXZhT3V0cHV0KCkgewotCQlyZXR1cm4gamF2YU91dHB1dDsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhT3V0cHV0LgotCSAqIEBwYXJhbSBqYXZhT3V0cHV0IFRoZSBKYXZhIG91dHB1dCB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRKYXZhT3V0cHV0KFN0cmluZyBqYXZhT3V0cHV0KSB7Ci0JCXRoaXMuamF2YU91dHB1dCA9IGphdmFPdXRwdXQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NwYXRoKCkgewotCQlyZXR1cm4gY2xhc3NwYXRoOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGFzc3BhdGgoU3RyaW5nIHN0cmluZykgewotCQljbGFzc3BhdGggPSBzdHJpbmc7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2tlbGV0b25EZXBsb3koKSB7Ci0JCXJldHVybiBza2VsZXRvbkRlcGxveTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNrZWxldG9uRGVwbG95KGJvb2xlYW4gYikgewotCQlza2VsZXRvbkRlcGxveSA9IGI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXREZXBsb3ltZW50RmlsZXMoKSB7Ci0JCXJldHVybiBkZXBsb3ltZW50RmlsZXM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3ltZW50RmlsZXMoU3RyaW5nW10gc3RyaW5ncykgewotCQlkZXBsb3ltZW50RmlsZXMgPSBzdHJpbmdzOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YUZpbGVzKCkgewotCQlyZXR1cm4gamF2YUZpbGVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmdzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SmF2YUZpbGVzKFN0cmluZ1tdIHN0cmluZ3MpIHsKLQkJamF2YUZpbGVzID0gc3RyaW5nczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9qZWN0VVJMKCkgewotCQlyZXR1cm4gcHJvamVjdFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdFVSTChTdHJpbmcgc3RyaW5nKSB7Ci0JCXByb2plY3RVUkwgPSBzdHJpbmc7Ci0JfQotCQotCXB1YmxpYyBIYXNoTWFwIGdldE1hcHBpbmdzKCkKLQl7Ci0JCQlyZXR1cm4gbWFwcGluZ1BhaXJzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1hcHBpbmdzKEhhc2hNYXAgbWFwKQotCXsKLQkJCW1hcHBpbmdQYWlycyA9IG1hcDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhUVFBVc2VybmFtZSgpCi0JewotCSAgcmV0dXJuIGh0dHBVc2VybmFtZV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHBhcmFtIFN0cmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhUVFBVc2VybmFtZShTdHJpbmcgaHR0cFVzZXJuYW1lKQotCXsKLQkgIGh0dHBVc2VybmFtZV8gPSBodHRwVXNlcm5hbWU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFzc3dvcmQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SFRUUFBhc3N3b3JkKCkKLQl7Ci0JICByZXR1cm4gaHR0cFBhc3N3b3JkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0SFRUUFBhc3N3b3JkKFN0cmluZyBodHRwUGFzc3dvcmQpIHsKLQkJaHR0cFBhc3N3b3JkXyA9IGh0dHBQYXNzd29yZDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0d1ZXNzUHJvamVjdFVSTCgpIHsKLQkJcmV0dXJuIGd1ZXNzUHJvamVjdFVSTDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRHdWVzc1Byb2plY3RVUkwoYm9vbGVhbiBndWVzc1Byb2plY3RVUkwpIHsKLQkJdGhpcy5ndWVzc1Byb2plY3RVUkwgPSBndWVzc1Byb2plY3RVUkw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL05hbWVNYXBwaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFmZGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC50b0phdmEuVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lTWFwcGluZ1V0aWxzIHsKLQotICBwcml2YXRlIE5hbWVNYXBwaW5nVXRpbHMoKSB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgbmFtZXNwYWNlLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICAqIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZQotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJCi0gICAqIEByZXR1cm4gcGFja2FnZSBuYW1lIGJhc2VkIG9uIG5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgCXJldHVybiBVdGlscy5tYWtlUGFja2FnZU5hbWUobmFtZXNwYWNlVVJJKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIHhtbE5hbWVUb0phdmFDbGFzcwotICAgKiBAcGFyYW0geG1sbmFtZQotICAgKiBAcmV0dXJuIEphdmEgY2xhc3MgbmFtZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgeG1sTmFtZVRvSmF2YUNsYXNzKFN0cmluZyB4bWxuYW1lKQotICB7Ci0gIAlyZXR1cm4gVXRpbHMueG1sTmFtZVRvSmF2YUNsYXNzKHhtbG5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogZ2V0UG9ydE5hbWUKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gcG9ydCBuYW1lIHVzZWQgYnkgdGhlIEF4aXMgZW1pdHRlcgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoU3RyaW5nIHBvcnROYW1lKSAKLSAgewotICAJaWYgKCFKYXZhVXRpbHMuaXNKYXZhSWQocG9ydE5hbWUpKSAKLSAgICAgICAgcG9ydE5hbWUgPSB4bWxOYW1lVG9KYXZhQ2xhc3MocG9ydE5hbWUpOwotICAJcmV0dXJuIHBvcnROYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhMjgxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBBeGlzRW1pdHRlckNvbnRleHQgewotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhbGxfd2FudGVkIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9BTExfV0FOVEVEID0gImFsbFdhbnRlZCI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgaGVscGVyX3dhbnRlZCBnZW5lcmFsCi0JICogcHJlZmVyZW5jZSBmcm9tIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRCA9ICJoZWxwZXJXYW50ZWQiOwotCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIHdyYXBfYXJyYXlzIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XUkFQX0FSUkFZUyA9ICJ3cmFwQXJyYXlzIjsKLQotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBkZXBsb3lfc2NvcGUgZ2VuZXJhbAotCSAqIHByZWZlcmVuY2UgZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSA9ICJkZXBsb3lTY29wZSI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdGltZV9vdXQgZ2VuZXJhbCBwcmVmZXJlbmNlCi0JICogZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1RJTUVfT1VUID0gInRpbWVPdXQiOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIG9yZGVyIGlzIHRoZSBzYW1lIGFzIGl0IGluIGRlcGxveVNjb3BlVHlwZXMuc2V0SXRlbXMoLi4uKSBmb3IKLQkgKiBjbGFzcwotCSAqIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfQVBQTElDQVRJT04gPSAwOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfUkVRVUVTVCA9IDE7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfVFlQRV9TRVNTVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdXNlX2luaGVyaXRlZF9tZXRob2RzIGdlbmVyYWwKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSAidXNlSW5oZXJpdGVkTWV0aG9kcyI7Ci0JCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQyIKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyA9ICJ2YWxpZGF0ZUFnYWluc3RKQVhSUEMiOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVuYWJsZQotCSAqICAgICAgICAgICAgc2V0IHdoZXRoZXIgZ2VuZXJhdGluZyBjb2RlIGZvciBhbGwgZWxlbWVudHMgaXMgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbGxXYW50ZWRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBbGxXYW50ZWRFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBlbWl0dGluZyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhIGlzCi0JICogICAgICAgICAgICBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhlbHBlcldhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgZW1pdHRpbmcgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YSBpcwotCSAqICAgICAgICAgICAgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0hlbHBlcldhbnRlZEVuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbmFibGUKLQkgKiAgICAgICAgICAgIHNldCB3aGV0aGVyIHdyYXBwaW5nIGFycmF5cyBpcyBlbmFibGVkLgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0V3JhcEFycmF5c0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgd3JhcHBpbmcgYXJyYXlzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1dyYXBBcnJheXNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciB1c2luZyBpbmhlcml0ZWQgbWV0aG9kcyBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSByZXR1cm5zCi0JICogICAgICAgICAgICB3aGV0aGVyIHVzaW5nIGluaGVyaXRlZCBtZXRob2RzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDRW5hYmxlZChib29sZWFuIGVuYWJsZSk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWxlY3Rpb24KLQkgKiAgICAgICAgICAgIHNldCB0aGUgZGVwbG95IHNjb3BlIHR5cGUuCi0JICovCi0KLQlwdWJsaWMgdm9pZCBzZWxlY3REZXBsb3lTY29wZVR5cGUoaW50IHNlbGVjdGlvbik7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIGRlcGxveSBzY29wZSB0eXBlLgotCSAqLwotCi0JcHVibGljIGludCBnZXREZXBsb3lTY29wZVR5cGUoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWNvbmRzCi0JICogICAgICAgICAgICBzZXQgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcyk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIGludCBnZXRUaW1lT3V0KCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgQXhpc0VtaXR0ZXJDb250ZXh0LgotCSAqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWFkYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L0F4aXNFbWl0dGVyRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCAgIGJ1ZyAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgQXhpc0VtaXR0ZXJEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUID0gZmFsc2U7Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX1dSQVBfQVJSQVlTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMgPSB0cnVlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfREVGQVVMVCA9IEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9SRVFVRVNUOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FX09VVF9ERUZBVUxUID0gNDU7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRBbGxXYW50ZWREZWZhdWx0ICgpCi0gewotIAlyZXR1cm4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBlbWl0dGluZyBzZXBlcmF0ZSBoZWxwc2VyIGNsYXNzIGZvciBtZXRhZGF0YS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0SGVscGVyV2FudGVkRGVmYXVsdCAoKQotIHsgCi0JcmV0dXJuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUOwotIH0KLQotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXRpbmcgZm9yIHdyYXBwaW5nIGFycmF5cy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0V3JhcEFycmF5c0RlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9XUkFQX0FSUkFZU19ERUZBVUxUOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdXNpbmcgaW5oZXJpdGVkIG1ldGhvZHMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkKLSB7Ci0JcmV0dXJuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBKQVgtUlBDIHZhbGlkYXRpb24gb2YgdGhlIHNlcnZpY2UgY2xhc3MuCi0gICogTm90ZTogVGhpcyBpcyBub3QgYSB0cnVlIEF4aXMgZW1pdHRlciBwcmVmZXJlbmNlLiBUaGlzIHByZWZlcmVuY2UgY29udHJvbHMgd2hldGhlcgotICAqIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIGJvdHRvbS11cCBzY2VuYXJpbyBhbmFseXplcyB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZQotICAqIHRvIEpBWC1SUEMgc29tZSB0aW1lIGJlZm9yZSBjYWxsaW5nIHRoZSBlbWl0dGVycy4gCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFZhbGlkYXRlQWdhaW5zdEpBWFJQQygpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgZGVwbG95IHNjb3BlIHR5cGUuCi0gICovCi0gcHVibGljIHN0YXRpYyBpbnQgZ2V0RGVwbG95U2NvcGVEZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBERVBMT1lfU0NPUEVfREVGQVVMVDsKLSB9Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHRpbWUgb3V0LgotICAqLwotIHB1YmxpYyBzdGF0aWMgaW50IGdldFRpbWVPdXREZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBUSU1FX09VVF9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1NDNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9QZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzCUF4aXNFbWl0dGVyQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dF8gPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0IGdldEluc3RhbmNlKCkgCi0JewotCQlpZiAoY29udGV4dF8gPT0gbnVsbCkgewotCQkJY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQkJY29udGV4dF8ubG9hZCgpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbnRleHRfOwotCX0KLQotCXByaXZhdGUgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpIAotCXsKLQkJc3VwZXIoV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgbG9hZCgpIAotCXsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0FMTF9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0QWxsV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFdyYXBBcnJheXNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDKCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1RJTUVfT1VULCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFsbFdhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIAotCXsKLQkJc2V0VmFsdWUoUFJFRkVSRU5DRV9BTExfV0FOVEVELCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQWxsV2FudGVkRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfQUxMX1dBTlRFRCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVscGVyV2FudGVkRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIGVuYWJsZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9IRUxQRVJfV0FOVEVEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXcmFwQXJyYXlzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV3JhcEFycmF5c0VuYWJsZWQoKSAKLQl7Ci0JCXJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1dSQVBfQVJSQVlTKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1VTRV9JTkhFUklURURfTUVUSE9EUywgZW5hYmxlKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLCBlbmFibGUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKQotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdERlcGxveVNjb3BlVHlwZShpbnQgc2VsZWN0aW9uKSB7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBzZWxlY3Rpb24pOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RGVwbG95U2NvcGVUeXBlKCkgewotCQlyZXR1cm4gZ2V0VmFsdWVBc0ludChQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcykgewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1RJTUVfT1VULCBzZWNvbmRzKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFRpbWVPdXQoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfVElNRV9PVVQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2NTIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmljZXNTYXhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotCXByaXZhdGUgVmVjdG9yIHdlYlNlcnZpY2VzTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQlpZiAobG9jYWxOYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygic2VydmljZSIpKQotCQl7CQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGF0dHMuZ2V0TG9jYWxOYW1lKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygibmFtZSIpKQotCQkJCXsKLQkJCQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gYXR0cy5nZXRWYWx1ZShpKTsKLQkJICAgICAgICAgICAgd2ViU2VydmljZXNOYW1lcy5hZGQoc2VydmljZU5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlc05hbWVzKCkKLQl7Ci0JCXJldHVybiB0aGlzLndlYlNlcnZpY2VzTmFtZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2xvY2F0b3IvQXhpc1NlcnZsZXRTYXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4YmNjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2bGV0U2F4SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi17Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFYSVNfU0VSVkxFVF9DTEFTU19OQU1FID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNFUlZMRVRfQ0xBU1NfTkFNRSA9ICJzZXJ2bGV0LWNsYXNzIjsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0ID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgY3VycmVudEVsZW1lbnQgPSBudWxsOwotCQotCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCWlmICggIWlzVGhlcmVBeGlzU2VydmxldCAmJiBTRVJWTEVUX0NMQVNTX05BTUUuZXF1YWxzKGN1cnJlbnRFbGVtZW50LnRyaW0oKSkgJiYgU3RyaW5nLnZhbHVlT2YoY2gpLmluZGV4T2YoQVhJU19TRVJWTEVUX0NMQVNTX05BTUUpID4gLTEpCi0JCXsKLQkJCWlzVGhlcmVBeGlzU2VydmxldCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0KCkKLQl7Ci0JCXJldHVybiB0aGlzLmlzVGhlcmVBeGlzU2VydmxldDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzV2ViU2VydmljZUxvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzVhZjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MTIxNCAgIDE2NTcxNiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2UgZmluZGVyIGRvZXMgbm90IGxvY2F0ZSBBeGlzIFdlYiBzZXJ2aWNlIGRlcGxveWVkIG9uIGNlcnRhaW4gc2VydmVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGVIaWVyYXJjaHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGUgQXhpcyBXZWIgc2VydmljZSBsb2NhdG9yIHBsdWdzIGl0c2VsZiBpbnRvIHRoZQotICogV2ViIFNlcnZpY2VzIEZpbmRlciBmcmFtZXdvcmsgYW5kIGRvZXMgdGhlIGpvYiBvZgotICogbG9jYXRpbmcgQXhpcyBjbGllbnRzIGFuZCBzZXJ2aWNlcy4KLSAqLwotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlTG9jYXRvciBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IKLXsKLQlwcml2YXRlIFN0cmluZyBBWElTX1NUVUIgPSAib3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViIjsKLQkKLQkvKioKLQkgKiBTZWFyY2hlcyB0aGUgd29ya3NwYWNlIGZvciBBeGlzIGNsaWVudHMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IG5vbi1zdHViIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQKLQkgKiBTRUlzIHRoYXQgYXJlIGltcGxlbWVudGVkIGJ5IHN0dWJzIHRoYXQgaW1wbGVtZW50Ci0JICogb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzIChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCUlKYXZhUHJvamVjdFtdIGphdmFQcm9qZWN0cyA9IGphdmFNb2RlbC5nZXRKYXZhUHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxqYXZhUHJvamVjdHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJLy8gV2UncmUgb25seSBpbnRlcmVzdGVkIGluIEphdmEgcHJvamVjdHMgd2l0aGluIHdoaWNoCi0JCQkJLy8gdGhlIEF4aXMgcnVudGltZSdzIGNsaWVudCAiU3R1YiIgY2xhc3MgaXMgbG9hZGFibGU6Ci0JCQkJSVR5cGUgYXhpc1N0dWIgPSBqYXZhUHJvamVjdHNbaV0uZmluZFR5cGUoQVhJU19TVFVCKTsKLQkJCQlpZiAoYXhpc1N0dWIgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCS8vIEZpbmQgIlByb3h5IiBjbGFzc2VzIGluIHRoZSBwcm9qZWN0IGFuZCBhZGQgdG8gdGhlIGxpc3QuCi0JCQkJCWFkZEF4aXNQcm94aWVzKGphdmFQcm9qZWN0c1tpXSxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgdGhlIHdvcmtzcGFjZSBmb3IgQXhpcyBjbGllbnRzIGFzCi0JICogaWRlbnRpZmllZCBieSBub24tc3R1YiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50Ci0JICogU0VJcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieSBzdHVicyB0aGF0IGltcGxlbWVudAotCSAqIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1Yi4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJaWYgKHByb2plY3RzID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50cyhtb25pdG9yKTsKLQkJfQotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBqYXZhTW9kZWwuZ2V0SmF2YVByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLQkJCQkvLyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gSmF2YSBwcm9qZWN0cyB3aXRoaW4gd2hpY2gKLQkJCQkvLyB0aGUgQXhpcyBydW50aW1lJ3MgY2xpZW50ICJTdHViIiBjbGFzcyBpcyBsb2FkYWJsZToKLQkJCQlJVHlwZSBheGlzU3R1YiA9IGphdmFQcm9qZWN0LmZpbmRUeXBlKEFYSVNfU1RVQik7Ci0JCQkJaWYgKGF4aXNTdHViICE9IG51bGwpCi0JCQkJewotCQkJCQkvLyBGaW5kICJQcm94eSIgY2xhc3NlcyBpbiB0aGUgcHJvamVjdCBhbmQgYWRkIHRvIHRoZSBsaXN0LgotCQkJCQlhZGRBeGlzUHJveGllcyhqYXZhUHJvamVjdCxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogVHJpZXMgdG8gZmluZCBBeGlzICJQcm94eSIgY2xhc3NlcyByZWxhdGVkIHRoZSBnaXZlbiBTdHViLgotCSAqIEBwYXJhbSBheGlzU3R1YiBUaGUgQXhpcyBjbGllbnQgIlN0dWIiIGZyb20gd2hpY2ggdG8gc2VhcmNoLgotCSAqIEBwYXJhbSBsaXN0IEEgbGlzdCB0byB3aGljaCB3ZSdsbCBhZGQgYW5kIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyBmb3IgIlByb3h5IiBjbGFzc2VzIHdlIGZpbmQgaW4gdGhlIHNlYXJjaC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEF4aXNQcm94aWVzIChJSmF2YVByb2plY3QgamF2YVByb2plY3QsIElUeXBlIGF4aXNTdHViLCBMaXN0IGxpc3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCXRyeQotCQl7Ci0JCQkvLyBDb21wdXRlIGEgaGllcmFyY2h5IHRvIGhlbHAgdXMgZmluZCBhbGwgdGhlCi0JCQkvLyBnZW5lcmF0ZWQgU3R1YiBzdWJjbGFzc2VzIG9mIHRoZSBBeGlzICJTdHViIgotCQkJLy8gY2xhc3MgYWNyb3NzIHRoZSBlbnRpcmUgd29ya3NwYWNlOgotCQkJSVR5cGVIaWVyYXJjaHkgYXhpc1N0dWJIaWVyYXJjaHkgPSBheGlzU3R1Yi5uZXdUeXBlSGllcmFyY2h5KGphdmFQcm9qZWN0LG1vbml0b3IpOwotCQkJSVR5cGVbXSBzdHVicyA9IGF4aXNTdHViSGllcmFyY2h5LmdldFN1YnR5cGVzKGF4aXNTdHViKTsKLQkJCWZvciAoaW50IHM9MDsgczxzdHVicy5sZW5ndGg7IHMrKykKLQkJCXsKLQkJCQkvLyBGb3IgZWFjaCBzdHViLCBmaW5kIGFsbCBpdHMgc3VwZXItaW50ZXJmYWNlcyBvZiB3aGljaAotCQkJCS8vIHRoZXJlIHNob3VsZCBiZSBvbmUsIG5hbWVseSB0aGUgZ2VuZXJhdGVkIFNFSToKLQkJCQlJVHlwZSBzZWlzW10gPSBheGlzU3R1YkhpZXJhcmNoeS5nZXRTdXBlckludGVyZmFjZXMoc3R1YnNbc10pOwotCQkJCWZvciAoaW50IGk9MDsgaTxzZWlzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJdHJ5Ci0JCQkJCXsKLQkJCQkJCS8vIENvbXB1dGUgYSBoaWVyYXJjaHkgdG8gaGVscCB1cyBmaW5kIGFsbCB0aGUKLQkJCQkJCS8vIGdlbmVyYXRlZCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoZSBTRUkKLQkJCQkJCS8vIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IHByb2plY3Q6Ci0JCQkJCQlJVHlwZUhpZXJhcmNoeSBzZWlIaWVyYXJjaHkgPSBzZWlzW2ldLm5ld1R5cGVIaWVyYXJjaHkoamF2YVByb2plY3QsbW9uaXRvcik7Ci0JCQkJCQlJVHlwZVtdIHByb3hpZXMgPSBzZWlIaWVyYXJjaHkuZ2V0U3VidHlwZXMoc2Vpc1tpXSk7Ci0JCQkJCQlmb3IgKGludCBwPTA7IHA8cHJveGllcy5sZW5ndGg7IHArKykKLQkJCQkJCXsKLQkJCQkJCQkvLyBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB3ZSBzaG91bGQgZmluZCB0d28gc3ViY2xhc3NlczoKLQkJCQkJCQkvLyAxLiBUaGUgZ2VuZXJhdGVkIHN0dWIgdGhhdCBnb3QgdXMgaGVyZSAodHdvIGxvb3BzIGFib3ZlKS4KLQkJCQkJCQkvLyAyLiBUaGUgZ2VuZXJhdGVkICJQcm94eSIgdGhhdCB3ZSdyZSBsb29raW5nIGZvci4KLQkJCQkJCQkvLyBTa2lwICMxIGFuZCBjYXB0dXJlICMyOgotCQkJCQkJCWlmICghcHJveGllc1twXS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKS5lcXVhbHMoc3R1YnNbc10uZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpKQotCQkJCQkJCXsKLQkJCQkJCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IG5ld1dlYlNlcnZpY2VDbGllbnRJbmZvKHByb3hpZXNbcF0pOwotCQkJCQkJCQlpZiAod3NjSW5mbyAhPSBudWxsKQotCQkJCQkJCQl7Ci0JCQkJCQkJCQlsaXN0LmFkZCh3c2NJbmZvKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQkJCXsKLQkJCQkJCS8vIFdlJ2xsIGxhbmQgaGVyZSBpZiB0aGUgSkRUIHdhcyB1bmFibGUgdG8gY29tcHV0ZQotCQkJCQkJLy8gYSB0eXBlIGhpZXJhcmNoeSBmb3IgdGhlIGN1cnJlbnQgU0VJLgotCQkJCQkJLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywKLQkJCQkJCS8vIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGV4Y2VwdCBieXBhc3MgdGhlIFNFSQotCQkJCQkJLy8gYW5kIGxvb3Agb24gdG8gdGhlIG5leHQgb25lLgotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gV2UnbGwgbGFuZCBoZXJlIGlmIEpEVCB3YXMgdW5hYmxlIHRvIGNvbXB1dGUKLQkJCS8vIGEgdHlwZSBoaWVyYXJjaHkgZm9yIHRoZSBBeGlzIGNsaWVudCAiU3R1YiIgY2xhc3MuCi0JCQkvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLAotCQkJLy8gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gZXhjZXB0IGJhaWwgb3V0LCBoYXZpbmcKLQkJCS8vIGFkZGVkIG5vdGhpbmcgdG8gdGhlIGxpc3QuCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgZm9yIGEKLQkgKiBKRFQgSVR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGdlbmVyYXRlZCBQcm94eS4KLQkgKiBAcGFyYW0gYXhpc1Byb3h5IFRoZSBJVHlwZSBvZiB0aGUgZ2VuZXJhdGVkIFByb3h5LgotCSAqIEByZXR1cm4gQSBuZXcgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIFByb3h5LAotCSAqIG9yIG51bGwgaWYgdGhlIElUeXBlIGRvZXMgbm90IGFwcGVhciB0byBkZXNjcmliZSBhIG5vcm1hbCBQcm94eS4gCi0JICovCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBuZXdXZWJTZXJ2aWNlQ2xpZW50SW5mbyAoSVR5cGUgYXhpc1Byb3h5KQotCXsKLQkJV2ViU2VydmljZUphdmFDbGllbnRJbmZvIHdzY0luZm8gPSBudWxsOwotCQl0cnkKLQkJewotCQkJSVJlc291cmNlIHJlc291cmNlID0gYXhpc1Byb3h5LmdldFVuZGVybHlpbmdSZXNvdXJjZSgpOwotCQkJaWYgKHJlc291cmNlICE9IG51bGwpCi0JCQl7Ci0JCQkJSVBhdGggcHJveHlQYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJCQlpZiAocHJveHlQYXRoICE9IG51bGwpCi0JCQkJewotCQkJCQlTdHJpbmcgcHJveHlVUkwgPSBwcm94eVBhdGgudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotCQkJCQl3c2NJbmZvID0gbmV3IFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbygpOwotCQkJCQl3c2NJbmZvLnNldFR5cGUoYXhpc1Byb3h5KTsKLQkJCQkJd3NjSW5mby5zZXRJbXBsVVJMKHByb3h5VVJMKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBXZSdsbCBsYW5kIGhlcmUgaWYgd2UgY291bGQgbm90IGNvbnZlcnQgdGhlIElUeXBlCi0JCQkvLyBpbnRvIGFuIElSZXNvdXJjZSwgb3IgaWYgd2UgY291bGQgbm90IGNvbXB1dGUgYSBVUkwKLQkJCS8vIGZyb20gdGhhdCByZXNvdXJjZS4gRWl0aGVyIHdheSwgaXQgZGVmaW5pdGVseSBpc24ndAotCQkJLy8gYSBub3JtYWwgZ2VuZXJhdGVkIFByb3h5LCBzbyBnZXQgb3V0IGFuZCByZXR1cm4gbnVsbC4KLQkJfQotCQlyZXR1cm4gd3NjSW5mbzsJCQotCX0KLQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzKG51bGwsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJVmVjdG9yIHdlYlNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotCQlpZiAocHJvamVjdHMgPT0gbnVsbCkKLQkJewotCQkJcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0JCX0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJewotCQkJLy8gd2UgYXJlIG9ubHkgaW50ZXJzdGVkIGluIGR5bmFtaWMgd2ViIHByb2plY3QKLQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdHNbaV0pKQotCQkJewotCQkJCXRyeSAKLQkJCQl7Ci0JCQkJCXdlYlNlcnZpY2VzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldLCBtb25pdG9yKSk7Ci0JCQkJfSAKLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIAotCQkJCXsKLQkJCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJCQl9IAotCQkJfQotCQl9Ci0JCXJldHVybiB3ZWJTZXJ2aWNlczsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgZm9yIGEgcGFydGljdWxhciB3ZWIgcHJvamVjdCBmb3IgQXhpcyBzZXJ2aWNlcyBhcwotCSAqIGlkZW50aWZpZWQgYnkgc2VydmVyLWNvbmZpZy53c2RkIDxzZXJ2aWNlPiBlbGVtZW50cwotCSAqIHdpdGggYW4gQXhpcyBzZXJ2bGV0IHJlZ2lzdGVyZWQKLQkgKiBpbiB0aGUgd2ViLnhtbCBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLQl7CQotCQkvLyBTZWFyY2ggdGhlIHdlYi54bWwgaW4gZml4ZWQgbG9jYXRpb24KLQkJSVBhdGggd2ViRGVzY3JpcHRvclBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChwcm9qZWN0KS5hcHBlbmQoIi93ZWIueG1sIik7Ci0JCUlGaWxlIHdlYlhtbEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUod2ViRGVzY3JpcHRvclBhdGgpOwotCQkKLQkJaWYgKHdlYlhtbEZpbGUgIT0gbnVsbCAmJiBpc0F4aXNTZXJ2bGV0RXhpc3RlZCh3ZWJYbWxGaWxlLCBtb25pdG9yKSkKLQkJewotCQkJLy8gU2VhcmNoIGZvciBhbGwgc2VydmVyLWNvbmZpZy53c2RkIGluc2lkZSB0aGlzIHByb2plY3QKLQkJCVNlcnZlckNvbmZpZ1dTRERWaXNpdG9yIHZpc2l0b3IgPSBuZXcgU2VydmVyQ29uZmlnV1NERFZpc2l0b3IoKTsKLQkJCXByb2plY3QuYWNjZXB0KHZpc2l0b3IpOwkJCi0JCQl2aXNpdG9yLnZpc2l0KHByb2plY3QpOwotCQkJVmVjdG9yIHdzZGRGaWxlcyA9IHZpc2l0b3IuZ2V0V3NkZEZpbGVzKCk7Ci0JCQlWZWN0b3Igc2VydmljZXNOYW1lcyA9IG5ldyBWZWN0b3IoKTsgCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHdzZGRGaWxlcy5zaXplKCk7IGkrKykKLQkJCXsKLQkJCQlzZXJ2aWNlc05hbWVzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc05hbWVzRnJvbUF4aXNDb25maWcoKElGaWxlKXdzZGRGaWxlcy5nZXQoaSksIG1vbml0b3IpKTsKLQkJCX0KLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlcyhwcm9qZWN0LCBzZXJ2aWNlc05hbWVzLCBtb25pdG9yKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJldHVybiBuZXcgVmVjdG9yKCk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZWIueG1sIGNvbnRhaW5zIGF4aXMgc2VydmxldAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0F4aXNTZXJ2bGV0RXhpc3RlZChJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZsZXRTYXhIYW5kbGVyIGhhbmRsZXIgPSBuZXcgQXhpc1NlcnZsZXRTYXhIYW5kbGVyKCk7Ci0JCXBhcnNlci5wYXJzZShpbnB1dFN0cmVhbSwgaGFuZGxlcik7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCXJldHVybiBoYW5kbGVyLmlzVGhlcmVBeGlzU2VydmxldCgpOwotCX0KLQkKLQkvKgotCSAqIEdpdmVuIGEgbGlzdCBvZiBzZXJ2aWNlcywgZmluZCB0aGUgc2VydmVycyB0aGlzIHByb2plY3QgaXMgYXNzb2NpYXRlZCwKLQkgKiBDb21iaW5lIHRoZW0gYW5kIGZvcm0gdmFyaW91cyBlbmQgcG9pbnQKLQkgKi8KLQlwcml2YXRlIExpc3QgZ2V0V2ViU2VydmljZXMoSVByb2plY3QgcHJvamVjdCwgTGlzdCBzZXJ2aWNlc05hbWVzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlWZWN0b3Igd2ViU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCksbW9uaXRvcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIGhvc3QgPSBzZXJ2ZXJzW2ldLmdldEhvc3QoKTsKLQkJCVNlcnZlclBvcnQgaHR0cFBvcnQgPSBnZXRIdHRwUG9ydChzZXJ2ZXJzW2ldLmdldFNlcnZlclBvcnRzKG1vbml0b3IpKTsKLQkJCWlmIChodHRwUG9ydCAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXNOYW1lcy5zaXplKCk7IGorKykKLQkJCQl7Ci0JCQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCQkJCQlTdHJpbmcgZW5kUG9pbnRVUkwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgaHR0cFBvcnQuZ2V0UG9ydCgpICsgIi8iICsgSjJFRVV0aWxzLmdldEZpcnN0V2ViTW9kdWxlTmFtZShwcm9qZWN0KSArICIvc2VydmljZXMvIiArIChTdHJpbmcpc2VydmljZXNOYW1lcy5nZXQoaik7Ci0JCQkJCXdzSW5mby5zZXRFbmRQb2ludFVSTChlbmRQb2ludFVSTCk7Ci0JCQkJCXdzSW5mby5zZXRXc2RsVVJMKGVuZFBvaW50VVJMKyI/d3NkbCIpOwotCQkgICAgICAgICAgICB3ZWJTZXJ2aWNlcy5hZGQod3NJbmZvKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlNlcnZpY2VzOwotCX0KLQkKLQkvKgotCSAqIFBhcnNlIHRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSwgcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBvZiB3ZWIgc2VydmljZXMgCi0JICovCi0JcHJpdmF0ZSBMaXN0IGdldFdlYlNlcnZpY2VzTmFtZXNGcm9tQXhpc0NvbmZpZyhJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZpY2VzU2F4SGFuZGxlciBoYW5kbGVyID0gbmV3IEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIoKTsKLQkJcGFyc2VyLnBhcnNlKGlucHV0U3RyZWFtLCBoYW5kbGVyKTsKLQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJcmV0dXJuIGhhbmRsZXIuZ2V0V2ViU2VydmljZXNOYW1lcygpOwkKLQl9Ci0JCi0JLyoKLQkgKiBmaW5kIHRoZSByaWdodCBwb3J0IChodHRwKSBmcm9tIGEgbGlzdCBvciBwb3J0cwotCSAqLwotCXByaXZhdGUgU2VydmVyUG9ydCBnZXRIdHRwUG9ydChTZXJ2ZXJQb3J0W10gcG9ydHMpCi0JewotCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgcHJvdG9jb2wgPSBwb3J0c1tpXS5nZXRQcm90b2NvbCgpOyAKLQkJCWlmICggcHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC50cmltKCkudG9Mb3dlckNhc2UoKS5lcXVhbHMoImh0dHAiKSkgcmV0dXJuIHBvcnRzW2ldOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9TZXJ2ZXJDb25maWdXU0REVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRkMTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJDb25maWdXU0REVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSA9ICJTZXJ2ZXItY29uZmlnLndzZGQiOwotCVZlY3RvciB3c2RkRmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKQotICAgIHsKLQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJeyAgICAgCi0JCQlpZiAocmVzb3VyY2UuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSkpCi0JCQl7Ci0JCQkJd3NkZEZpbGVzLmFkZCgoSUZpbGUpcmVzb3VyY2UpOwotCQkJfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCXB1YmxpYyBWZWN0b3IgZ2V0V3NkZEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RkRmlsZXM7IAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjZjdjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LlBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLQotCS8qKgotCSogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLQkqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0KLQkJIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBJTG9nIGxvZ187Ci0KLQlwcml2YXRlIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgYXhpc0VtaXR0ZXJDb250ZXh0XzsKLQkvKioKLQkqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotCSogVGhlICJwbHVnaW4iIGVsZW1lbnQgaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlCi0JKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLQkJCWluc3RhbmNlXyA9IHRoaXM7Ci0JCX0KLQkJbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLQl9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIGxvZ2dpbmcgZnJvbSBibG93aW5nIHVwLgotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBJRDsgIAotICB9Ci0gIAotCS8qKgotCSogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLQkqIChXZWJTZXJ2aWNlV2FzQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwIik7Ci0JKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBzaW5nbGV0b24uCi0JKi8KLQlzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQlwdWJsaWMgQXhpc0VtaXR0ZXJDb250ZXh0IGdldEF4aXNFbWl0dGVyQ29udGV4dCgpCi0JewotCQlpZiAoYXhpc0VtaXR0ZXJDb250ZXh0XyA9PSBudWxsKSAKLQkgIAkJYXhpc0VtaXR0ZXJDb250ZXh0XyA9IFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIGF4aXNFbWl0dGVyQ29udGV4dF87Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0JKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0JKi8KLQlwdWJsaWMgdm9pZCBzdGFydCggQnVuZGxlQ29udGV4dCBidW5kbGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWxvZ18ubG9nKElMb2cuSU5GTywgNTA4NywgdGhpcywgInN0YXJ0IiwgIlN0YXJ0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotCQkgIHN1cGVyLnN0YXJ0KCBidW5kbGUgKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGxvZ18ubG9nKCBJTG9nLkVSUk9SLCA1MDg4LCB0aGlzLCAic3RhcnQiLCBleGMgKTsKLSAgICB9Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLQkqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGlzIHBsdWdpbiBmYWlscyB0byBzaHV0ZG93bi4KLQkqLwotCXB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJbG9nXy5sb2coSUxvZy5JTkZPLCA1MDg5LCB0aGlzLCAic2h1dGRvd24iLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwOTAsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YTAzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkYWM4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliNzNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjEwOjE4IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiYjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM4NDAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTA1LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotSW1wb3J0LVBhY2thZ2U6IGNvbS5pYm0uaWN1LnRleHQ7IHZlcnNpb249IjMuOCIsCi0gY29tLmlibS5pY3UudXRpbDsgdmVyc2lvbj0iMy44IgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNS4wLDEuNi4wKSIsCi0gb3JnLmFwYWNoZS5heGlzO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3MmI2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E0OTI3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWJzZXJ2aWNlIEF4aXMgQ29uc3VtcHRpb24gVUkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1XRUJTRVJWSUNFQ0xJRU5UVFlQRV9OQU1FX0pBVkFfQVhJUz1KYXZhIHByb3h5Ci1MQUJFTF9SVU5USU1FX0FYSVNfMTE9QXBhY2hlIEF4aXMKLURFU0NfUlVOVElNRV9BWElTXzExPUFwYWNoZSBBeGlzCi0jCi0jCVdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfQVhJU19FTUlUVEVSPUF4aXMgRW1pdHRlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTkxN2E0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0gICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IkF4aXNDbGllbnRDb25maWciCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkRlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQuQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgICAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudFByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50UHJvamVjdCIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5BeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDdXN0b21pemVDbGllbnRNYXBwaW5ncyIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50LlN0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIiLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAJCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkNsaWVudENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICA8L2V4dGVuc2lvbj4gCi0gICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPiAgICAgCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfQVhJU19FTUlUVEVSIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL0F4aXNDb25zdW1wdGlvblVJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YWE4NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjAyMTYgICAxMjY5ODkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0jIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotTVNHX0VSUk9SX0RFRkFVTFRfQkVBTj1JV0FCMDQ5MUUgRXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgc2V0dGluZyB1cCBkZWZhdWx0IHZhbHVlcyBmb3IgSmF2YSBiZWFuCi1NU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OPUlXQUIwNDk1RSBXU0RMIGZpbGUgYXQgezB9IGhhcyBubyBkZWZpbml0aW9uIGVsZW1lbnQKLU1TR19FUlJPUl9XU0RMX05PX1BPUlQ9SVdBQjA0OTZFIFdTREwgZmlsZSBhdCB7MH0gaGFzIG5vIHBvcnQgZWxlbWVudAotTVNHX0VSUk9SX1dSSVRFX1dTREw9SVdBQjA0OTdFIEVycm9yIGluIHdyaXRpbmcgV1NETCBmaWxlIHswfQotCi0jCi0jIE1lc3NhZ2VzIGZvciBDb3B5Q2xpZW50V1NETFRhc2sKLSMKLU1TR19FUlJPUl9JTVBPUlRfV1NETD1JV0FCMDUzMUUgRXJyb3IgaW4gcmVzb2x2aW5nIFdTREwgZmlsZSB7MH0sIGltcG9ydCBXU0RMIGZpbGUgbXVzdCBoYXZlIGFic29sdXRlIFVSTCBvciByZWxhdGl2ZSBVUkwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0KLQotIwotI0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kCi0jCi1NU0dfRVJST1JfV1NETF9MT0NBVElPTl9OT1RfU0VUPUlXQUIwNTAxRSBXU0RMIGxvY2F0aW9uIG5vdCBzZXQuCi0KLSMKLSNBZGRKYXJzVG9Qcm9qZWN0QnVpbGRQYXRoVGFzawotIwotTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkU9SVdBQjA1MDJXIFRoZSBwcm9qZWN0IGlzIG5vdCBhIEphdmEgcHJvamVjdC4KLU1TR19FUlJPUl9CQURfQlVJTERQQVRIPUlXQUIwNTAzRSBVbmFibGUgdG8gdXBkYXRlIEphdmEgYnVpbGQgcGF0aC4gUGxlYXNlIGNoZWNrIHlvdXIgc3lzdGVtIGVudmlyb25tZW50LgotCi0jCi0jQ29weUF4aXNKYXJDb21tYW5kCi0jCi1QUk9HUkVTU19JTkZPX0NPUFlfQVhJU19DRkc9SVdBQjA1MDVJIENvcHlpbmcgQXhpcyBqYXIgZmlsZXMgdG8gd2ViIHByb2plY3QuCi1NU0dfRVJST1JfRklMRUNPUFk9SVdBQjA1MDZFIEVycm9yIHdoZW4gY29weWluZyBBeGlzIGphciBmaWxlcyB0byB3ZWIgcHJvamVjdAotCi0jCi0jUmVmcmVzaFByb2plY3RUYXNrCi0jCi1NU0dfRVJST1JfUkVGUkVTSF9QUk9KRUNUPUlXQUIwNTA4RSBVbmFibGUgdG8gcmVmcmVzaCBwcm9qZWN0LgotCi0jCi0jV2ViU2VydmljZUF4aXNQcm94eVBhZ2UKLSMKLVRPT0xUSVBfUFdKQl9QQUdFPVBhZ2UKLVRPT0xUSVBfUFdKQl9URVhUX0ZPTERFUj1Gb2xkZXIgZm9yIHByb3h5IHRvIGJlIGdlbmVyYXRlZCBmb3IgdGhlIHNlbGVjdGVkIGJpbmRpbmcuCi1UT09MVElQX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFk9Q2hlY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm94eS4KLQotUEFHRV9USVRMRV9XU19BWElTX1BST1hZPVdlYiBTZXJ2aWNlIFByb3h5IFBhZ2UKLVBBR0VfREVTQ19XU19BWElTX1BST1hZPVNlbGVjdCBnZW5lcmF0ZSBwcm94eSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBwcm94eSBmb3IgeW91ciBzZXJ2aWNlLgotQ0hFQ0tCT1hfR0VOUFJPWFk9R2VuZXJhdGUgcHJveHkKLUxBQkVMX0ZPTERFUl9OQU1FPU91dHB1dCBmb2xkZXIKLQotIwotIyBNZXNzYWdlcyBmb3IgV2ViU2VyaXZjZUF4aXNNYXBwaW5nc1BhZ2UKLSMKLVBBR0VfVElUTEVfV1NfQkVBTjJYTUw9V2ViIFNlcnZpY2UgUGFja2FnZSB0byBOYW1lc3BhY2UgTWFwcGluZwotUEFHRV9USVRMRV9XU19YTUwyUFJPWFk9V2ViIFNlcnZpY2UgQ2xpZW50IE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmcKLVBBR0VfREVTQ19QMk5fTUFQUElOR1M9RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBwYWNrYWdlIHRvIG5hbWVzcGFjZS4KLQotCi1MQUJFTF9NQVBQSU5HX1BBSVJTPU1hcHBpbmcgcGFpcnMKLVRBQkxFX0NPTFVNTl9MQUJFTF9QQUNLQUdFPXBhY2thZ2UKLVRBQkxFX0NPTFVNTl9MQUJFTF9OQU1FU1BBQ0U9bmFtZXNwYWNlCi1MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOPURlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2UuCi1UT09MVElQX04yUF9TSE9XX01BUFBJTkdTPURlZmluZSBuYW1lc3BhY2UgdG8gcGFja2FnZSBtYXBwaW5nIGZvciBjdXN0b21pemF0aW9uLgotCi0jIE1lc3NhZ2VzIGZvciBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlCi1UT09MVElQX1BQQUVfUEFHRT1TZXQgcHJlZmVyZW5jZXMgdGhhdCBjb250cm9sIEF4aXMgRW1pdHRlci4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEPUJ5IGRlZmF1bHQsIGNvZGUgaXMgZ2VuZXJhdGVkIG9ubHkgZm9yIHJlZmVyZW5jZWQgZWxlbWVudHMuIFxuQ2FsbCBiR2VuZXJhdGVBbGwodHJ1ZSkgYW5kIFdTREwySmF2YSB3aWxsIGdlbmVyYXRlIGNvZGUgXG5mb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBzY29wZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgcmVmZXJlbmNlZC4gXG5TY29wZSBtZWFuczogYnkgZGVmYXVsdCwgYWxsIFdTREwgZmlsZXM7IGlmIGdlbmVyYXRlSW1wb3J0cyhmYWxzZSksXG50aGVuIG9ubHkgdGhlIGltbWVkaWF0ZSBXU0RMIGZpbGUuCi1UT09MVElQX1BQQUVfQ0hFQ0tCT1hfSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhLgotVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTPVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlcy4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFM9SWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gZXhwb3J0IGludG8gdGhlIFdTREwgZmlsZS4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQz1JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUgdHlwZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNhdGlzZmllcyBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uICAgIAotVE9PTFRJUF9QUEFFX0NPTUJPX0RFUExPWV9TQ09QRT1BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQuCi1UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQ9VGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzIDQ1LCBzcGVjaWZ5IC0xIHRvIGRpc2FibGUpLgotVE9PTFRJUF9QUEFFX0dST1VQX1dTREwySkFWQT1TZXQgcHJlZmVyZW5jZXMgZm9yIHdzZGwyamF2YS4KLVRPT0xUSVBfUFBBRV9HUk9VUF9KQVZBMldTREw9U2V0IHByZWZlcmVuY2VzIGZvciBqYXZhMndzZGwuCi1CVVRUT05fQUxMX1dBTlRFRD0mR2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzLCBldmVuIHVucmVmZXJlbmNlZCBvbmVzCi1CVVRUT05fSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSAmaGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YQotQlVUVE9OX1dSQVBfQVJSQVlTPVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciAmd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXMKLUJVVFRPTl9VU0VfSU5IRVJJVEVEX01FVEhPRFM9TG9vayBmb3IgYWxsb3dlZCAmbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MKLUJVVFRPTl9WQUxJREFURV9BR0FJTlNUX0pBWFJQQz1BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcgY29kZQotTEFCRUxfREVQTE9ZX1NDT1BFPUFkZCAmc2NvcGUgdG8gZGVwbG95LndzZGQ6Ci1MQUJFTF9USU1FX09VVD0mVGltZW91dCBpbiBzZWNvbmRzOgotR1JPVVBfV1NETDJKQVZBX05BTUU9V3NkbDJKYXZhCi1HUk9VUF9KQVZBMldTRExfTkFNRT1KYXZhMldzZGwKLURFUExPWV9TQ09QRV9BUFBMSUNBVElPTj1BcHBsaWNhdGlvbgotREVQTE9ZX1NDT1BFX1JFUVVFU1Q9UmVxdWVzdAotREVQTE9ZX1NDT1BFX1NFU1NJT049U2Vzc2lvbgotTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQ9SW52YWxpZCB0aW1lb3V0ISBUaW1lb3V0IHNob3VsZCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIC0xIHRvIGRpc2FibGUuCi1NU0dfVVNFX0pWTV9BUkdVTUVOVF9GT1JfVElNRV9PVVQ9VXNpbmcgdGltZW91dCB2YWx1ZSAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIEpWTSBhcmd1bWVudHMgQXhpc1dzZGwySmF2YVRpbWVvdXQKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDAzOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfREVGQVVMVF9CRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX05PX0RFRklOSVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfTk9fUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1JJVEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU1QT1JUX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfTE9DQVRJT05fTk9UX1NFVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9OT19KQVZBX05BVFVSRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQkFEX0JVSUxEUEFUSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX0NPUFlfQVhJU19DRkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVDT1BZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRUZSRVNIX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0pCX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0pCX1RFWFRfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX0FYSVNfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX0FYSVNfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfR0VOUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRk9MREVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19CRUFOMlhNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1hNTDJQUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfUDJOX01BUFBJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01BUFBJTkdfUEFJUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfTjJQX1NIT1dfTUFQUElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DT01CT19ERVBMT1lfU0NPUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0ZJRUxEX1RJTUVfT1VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9HUk9VUF9XU0RMMkpBVkE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0dST1VQX0pBVkEyV1NETDsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0FMTF9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0hFTFBFUl9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1dSQVBfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9VU0VfSU5IRVJJVEVEX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0RFUExPWV9TQ09QRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9USU1FX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9XU0RMMkpBVkFfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9KQVZBMldTRExfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERVBMT1lfU0NPUEVfQVBQTElDQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX1JFUVVFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX1NFU1NJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VTRV9KVk1fQVJHVU1FTlRfRk9SX1RJTUVfT1VUOwotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDIxYjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0vKioKLSAqIAotICogQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpb18gID0gdHJ1ZTsKLQlwcml2YXRlIGJvb2xlYW4gY3VzdG9taXplTWFwcGluZ3NfID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIGdlbmVyYXRlUHJveHlfID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyBjbGllbnRSdW50aW1lSWRfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm94eVByb2plY3RfID0gbnVsbDsKLQlwcml2YXRlIElQcm9qZWN0IGNsaWVudFByb2plY3RFQVJfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJMXzsKLQlwcml2YXRlIGJvb2xlYW4gdGVzdFByb3h5U2VsZWN0ZWRfOwotCXByaXZhdGUgSVNlcnZlciBjbGllbnRFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgY2xpZW50U2VydmVyXzsKLQlwcml2YXRlIGJvb2xlYW4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlQcm9qZWN0Rm9sZGVyXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQlwdWJsaWMgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kKCApIAotCXsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQljbGllbnRFeGlzdGluZ1NlcnZlcl8gPSBnZXRTZXJ2ZXJGcm9tU2VydmVyTGFiZWwoKTsKLS8vCQlpZiAoY2xpZW50RXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpIHsKLS8vCQkJLy9UT0RPIFRoZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KLS8vCQkJY2xpZW50RXhpc3RpbmdTZXJ2ZXJfLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotLy8JCX0gZWxzZSB7Ci0vLwkJCS8vVE9ETyBnZXQgdGhlIGZhY3RvcnkgaWQgZm9yIHRoZSB0eXBlLgotLy8JCX0KLQkJLy9qYXZhV1NETFBhcmFtCi0JCWphdmFXU0RMUGFyYW1fID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCQotCQkvLyBwcm94eVByb2plY3RGb2xiZXJfCi0JCQotCQl3ZWJTZXJ2aWNlc1BhcnNlcl8gPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UnVudGltZUlEKFN0cmluZyBjbGllbnRSdW50aW1lSWQpIHsKLQkJY2xpZW50UnVudGltZUlkXyA9IGNsaWVudFJ1bnRpbWVJZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJRCgpIHsKLQkJcmV0dXJuIHRoaXMuY2xpZW50UnVudGltZUlkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFByb2plY3QuCi0JICovCi0JcHVibGljIElQcm9qZWN0IGdldENsaWVudFByb2plY3QoKSB7Ci0JCXJldHVybiBwcm94eVByb2plY3RfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRQcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgY2xpZW50UHJvamVjdCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0JCXRoaXMucHJveHlQcm9qZWN0XyA9IGNsaWVudFByb2plY3Q7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRQcm9qZWN0RUFSLgotCSAqLwotCXB1YmxpYyBJUHJvamVjdCBnZXRDbGllbnRQcm9qZWN0RUFSKCkgewotCQlyZXR1cm4gY2xpZW50UHJvamVjdEVBUl87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudFByb2plY3RFQVIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRQcm9qZWN0RUFSIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0RUFSKElQcm9qZWN0IGNsaWVudFByb2plY3RFQVIpIHsKLQkJdGhpcy5jbGllbnRQcm9qZWN0RUFSXyA9IGNsaWVudFByb2plY3RFQVI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSB0ZXN0UHJveHlTZWxlY3RlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0UHJveHlTZWxlY3RlZCgpIHsKLQkJcmV0dXJuIHRlc3RQcm94eVNlbGVjdGVkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGVzdFByb3h5U2VsZWN0ZWQKLQkgKiAgICAgICAgICAgIFRoZSB0ZXN0UHJveHlTZWxlY3RlZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGVzdFByb3h5U2VsZWN0ZWQoYm9vbGVhbiB0ZXN0UHJveHlTZWxlY3RlZCkgewotCQl0aGlzLnRlc3RQcm94eVNlbGVjdGVkXyA9IHRlc3RQcm94eVNlbGVjdGVkOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NkbFVSTC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JICByZXR1cm4gd3NkbFVSTF87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHdzZGxVUkwKLQkgKiAgICAgICAgICAgIFRoZSB3c2RsVVJMIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMud3NkbFVSTF8gPSB3c2RsVVJMOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50U2VydmVyLgotCSAqLwotCXB1YmxpYyBJU2VydmVyIGdldENsaWVudEV4aXN0aW5nU2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50RXhpc3RpbmdTZXJ2ZXJfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRTZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRTZXJ2ZXIgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldENsaWVudFNlcnZlcihTdHJpbmcgY2xpZW50U2VydmVyKSB7Ci0JCXRoaXMuY2xpZW50U2VydmVyXyA9IGNsaWVudFNlcnZlcjsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNDbGllbnRJc0V4aXN0aW5nU2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcl87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRJc0V4aXN0aW5nU2VydmVyIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRJc0V4aXN0aW5nU2VydmVyKGJvb2xlYW4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcikgewotCQl0aGlzLmNsaWVudElzRXhpc3RpbmdTZXJ2ZXJfID0gY2xpZW50SXNFeGlzdGluZ1NlcnZlcjsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncygpIHsKLQkJcmV0dXJuIGN1c3RvbWl6ZU1hcHBpbmdzXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncyhib29sZWFuIHZhbHVlKSB7Ci0JCWN1c3RvbWl6ZU1hcHBpbmdzXyA9IHZhbHVlOwotCX0KLQotCXByaXZhdGUgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tU2VydmVyTGFiZWwoKSB7Ci0JCWlmICh0cnVlKQotCQkvLyByc2sgcmV2aXNpdCBpZiAoY2xpZW50SXNFeGlzdGluZ1NlcnZlcl8pCi0JCXsKLQkJCS8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZVJlZ2lzdHJ5Ci0JCQl7Ci0JCQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLQkJCQlpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoIT0wKSB7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykgewotCQkJCQkJSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcikgc2VydmVyc1tpXTsKLQkJCQkJCWlmICgoc2VydmVyLmdldE5hbWUoKSkuZXF1YWxzKGNsaWVudFNlcnZlcl8pKQotCQkJCQkJCXJldHVybiBzZXJ2ZXI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkvLwotCQl9IGVsc2UgewotCQkJLy9UT0RPIGNyZWF0ZSB0aGUgc2VydmVyCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlQcm9qZWN0Rm9sZGVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlQcm9qZWN0Rm9sZGVyKCkgewotCQlpZiAocHJveHlQcm9qZWN0XyE9bnVsbCkgewotCQkJcHJveHlQcm9qZWN0Rm9sZGVyXyA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb3h5UHJvamVjdF8gKS50b1N0cmluZygpOwotCQl9CQkKLQkJcmV0dXJuIHByb3h5UHJvamVjdEZvbGRlcl87ICAKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLQkJcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlcl8gPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQl9Ci0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5lcmF0ZVByb3h5LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKSB7Ci0JCXJldHVybiBnZW5lcmF0ZVByb3h5XzsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIGdlbmVyYXRlUHJveHkgVGhlIGdlbmVyYXRlUHJveHkgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KSB7Ci0JCXRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5OwotCX0KLQkKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzQ2xpZW50U2NlbmFyaW9fLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldElzQ2xpZW50U2NlbmFyaW8oKQotICAgIHsKLSAgICAgIHJldHVybiBpc0NsaWVudFNjZW5hcmlvXzsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGlzQ2xpZW50U2NlbmFyaW9fIFRoZSBpc0NsaWVudFNjZW5hcmlvXyB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SXNDbGllbnRTY2VuYXJpbyhib29sZWFuIGlzQ2xpZW50U2NlbmFyaW8pCi0gICAgewotICAgICAgaXNDbGllbnRTY2VuYXJpb18gPSBpc0NsaWVudFNjZW5hcmlvOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNldEVuZHBvaW50TWV0aG9kKCkKLSAgICB7Ci0gICAgICByZXR1cm4gInNldEVuZHBvaW50IjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudElucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzllZGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudElucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd3NjXzsKLQotCQlwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0XyA9IG51bGw7Ci0JCXByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotCQlwcml2YXRlIFN0cmluZyBjbGllbnRTZXJ2ZXJfOwotCQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEF4aXNDbGllbnRJbnB1dENvbW1hbmQoKSB7Ci0JCX0KLQkJCi0JCXB1YmxpYyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kKElXZWJTZXJ2aWNlQ2xpZW50IHdzYywgSUNvbnRleHQgY29udGV4dCwgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzY18gPSB3c2M7Ci0JCQljbGllbnRQcm9qZWN0XyA9IHByb2plY3Q7IAotCQl9Ci0JCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7CSAgICAKLQkJd3NkbFVSTF8gPSB3c2NfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0V3NkbFVSTCgpOwotCQljbGllbnRTZXJ2ZXJfID0gd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXIoKSB7Ci0JCXJldHVybiBjbGllbnRTZXJ2ZXJfOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpIHsKLQkJcmV0dXJuIGNsaWVudFByb2plY3RfOwotCX0KLQotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLQkJcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JCXJldHVybiB3c2RsVVJMXzsKLQl9Ci0JICAKLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzI5ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQkKLQlwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdzY187Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuXzsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50XzsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kKCkgewotCQl9Ci0JCQotCQlwdWJsaWMgQXhpc0NsaWVudE91dHB1dENvbW1hbmQoSVdlYlNlcnZpY2VDbGllbnQgd3NjLCBJQ29udGV4dCBjb250ZXh0KSB7Ci0JCQl3c2NfID0gd3NjOwotCQl9Ci0JCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7CQotCQl3c2NfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuc2V0SW1wbFVSTChwcm94eUJlYW5fKTsKLQkJd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLnNldFByb3h5RW5kcG9pbnQocHJveHlFbmRwb2ludF8pOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQotCXB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKSB7Ci0JCXRoaXMucHJveHlCZWFuXyA9IHByb3h5QmVhbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm94eUVuZHBvaW50KFN0cmluZyBwcm94eUVuZHBvaW50KSB7Ci0JCXRoaXMucHJveHlFbmRwb2ludF8gPSBwcm94eUVuZHBvaW50OwotCX0KLQkgIAotCQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ29weUNsaWVudFdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NvcHlDbGllbnRXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmZhNGU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ29weUNsaWVudFdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODE1ICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIENvcHlDbGllbnRXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIAotICBwcml2YXRlIFN0cmluZyB3c2RsVVJMXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50V1NETFBhdGhOYW1lXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3c1BhcnNlcl87Ci0gIAotICBwdWJsaWMgQ29weUNsaWVudFdTRExDb21tYW5kKCkKLSAgewotICAgCi0gIH0KLSAgCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIERlZmluaXRpb24gZGVmID0gd3NQYXJzZXJfLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkxfKTsKLSAgICBpZihkZWY9PW51bGwpCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tde3dzZGxVUkxffSkpOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgSVBhdGggY2xpZW50V1NETFBhdGggPSBuZXcgUGF0aChjbGllbnRXU0RMUGF0aE5hbWVfKTsKLSAgICBJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2VSb290ID0gRmlsZVJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpOwotICAgIHN0YXR1cyA9IHJlc29sdmVXU0RMKHdvcmtzcGFjZVJvb3QsIGRlZiwgY2xpZW50V1NETFBhdGgsIGVudiwgbW9uaXRvcik7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0JcHJpdmF0ZSBJU3RhdHVzIHJlc29sdmVXU0RMKAotCQlJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2UsCi0JCURlZmluaXRpb24gd3NkbERlZiwKLQkJSVBhdGggd3NkbFBhdGgsCi0JCUlFbnZpcm9ubWVudCBlbnYsIAotCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJdHJ5IHsKLQkJCXdyaXRlV1NETEZpbGUod29ya3NwYWNlLCB3c2RsRGVmLCB3c2RsUGF0aCwgZW52LCBtb25pdG9yKTsKLQkJCU1hcCBpbXBvcnREZWZzID0gd3NkbERlZi5nZXRJbXBvcnRzKCk7Ci0JCQlTZXQga2V5c1NldCA9IGltcG9ydERlZnMua2V5U2V0KCk7Ci0JCQlmb3IgKEl0ZXJhdG9yIGUgPSBrZXlzU2V0Lml0ZXJhdG9yKCk7IGUuaGFzTmV4dCgpOykgewotCQkJCU9iamVjdCBrZXlOYW1lID0gZS5uZXh0KCk7Ci0JCQkJVmVjdG9yIHZlY3RvciA9IChWZWN0b3IpIGltcG9ydERlZnMuZ2V0KGtleU5hbWUpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0JCQkJCUltcG9ydCBpbXBvcnREZWYgPSAoSW1wb3J0KSB2ZWN0b3IuZ2V0KGkpOwotCQkJCQlEZWZpbml0aW9uIGRlZiA9IGltcG9ydERlZi5nZXREZWZpbml0aW9uKCk7Ci0JCQkJCVN0cmluZyBuZXdQYXRoU3RyaW5nID0KLQkJCQkJCXdzZGxQYXRoLnRvU3RyaW5nKCkuc3Vic3RyaW5nKAotCQkJCQkJCTAsCi0JCQkJCQkJd3NkbFBhdGgudG9TdHJpbmcoKS5sYXN0SW5kZXhPZigiLyIpICsgMSk7CSAvLyROT04tTkxTLTEkCi0JCQkJCWlmIChpc0ludmFsaWRJbXBvcnRXU0RMKGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpKSkgewotCQkJCQkgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9JTVBPUlRfV1NETCxuZXcgU3RyaW5nW117aW1wb3J0RGVmLmdldExvY2F0aW9uVVJJKCl9KSk7Ci0JCQkJCX0KLQkJCQkJSVBhdGggbmV3UGF0aCA9Ci0JCQkJCQluZXcgUGF0aChuZXdQYXRoU3RyaW5nICsgaW1wb3J0RGVmLmdldExvY2F0aW9uVVJJKCkpOwotCQkJCQlJU3RhdHVzIHN0YXR1cyA9IHJlc29sdmVXU0RMKHdvcmtzcGFjZSwgZGVmLCBuZXdQYXRoLCBlbnYsIG1vbml0b3IpOwotCQkJCQlpZiAoc3RhdHVzICE9IG51bGwKLQkJCQkJCSYmIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NETCxuZXcgU3RyaW5nW10geyB3c2RsUGF0aC50b1N0cmluZygpIH0pLCBlKTsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNJbnZhbGlkSW1wb3J0V1NETChTdHJpbmcgd3NkbFBhdGgpIHsKLQotCQkvLyByZWxhdGl2ZSB1cmwKLQkJaWYgKCF3c2RsUGF0aC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKSkgeyAvLyROT04tTkxTLTEkCi0KLQkJCWlmICh3c2RsUGF0aC5pbmRleE9mKCIvIikgIT0gLTEpIHsgLy8kTk9OLU5MUy0xJAotCQkJCWlmICghd3NkbFBhdGguc3RhcnRzV2l0aCgiLi8iKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgd3JpdGVXU0RMRmlsZSgKLQkJSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlLAotCQlEZWZpbml0aW9uIHdzZGxEZWYsCi0JCUlQYXRoIHdzZGxQYXRoLAotCQlJRW52aXJvbm1lbnQgZW52LCAKLQkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJLy9XU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCS8vV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotCQlXU0RMV3JpdGVyIHdzZGxXcml0ZXIgPSAobmV3IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbCgpKS5uZXdXU0RMV3JpdGVyKCk7Ci0JCXdzZGxXcml0ZXIud3JpdGVXU0RMKHdzZGxEZWYsIGJhb3MpOwotCQlieXRlW10gYiA9IGJhb3MudG9CeXRlQXJyYXkoKTsKLQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKTsKLQotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gKChCYXNlRWNsaXBzZUVudmlyb25tZW50KWVudikuZ2V0UmVzb3VyY2VDb250ZXh0KCk7ICAgIAotICAgIAotCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKAotCQkJY29udGV4dCwKLQkJCXdzZGxQYXRoLm1ha2VBYnNvbHV0ZSgpLAotCQkJYmFpcywKLQkJCW1vbml0b3IsCi0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpKTsKLQotCQliYW9zLmNsb3NlKCk7Ci0JCWJhaXMuY2xvc2UoKTsKLQotCX0gIAotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBjbGllbnRXU0RMUGF0aE5hbWVfIFRoZSBjbGllbnRXU0RMUGF0aE5hbWVfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFdTRExQYXRoTmFtZShTdHJpbmcgY2xpZW50V1NETFBhdGhOYW1lKQotICB7Ci0gICAgdGhpcy5jbGllbnRXU0RMUGF0aE5hbWVfID0gY2xpZW50V1NETFBhdGhOYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFVSTF8gVGhlIHdzZGxVUkxfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkwoU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgICB0aGlzLndzZGxVUkxfID0gd3NkbFVSTDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHdzUGFyc2VyXyBUaGUgd3NQYXJzZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53c1BhcnNlcl8gPSB3c1BhcnNlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9EZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9EZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmM1ZWMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MDMgICAxMjY4MTkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA4MDEyMiAgIDIxNTg2NiB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLlBsYXRmb3JtVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuTW9kdWxlQ29yZU5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIJamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBJUHJvamVjdAkJCQkJcHJveHlQcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCVdTRExTZXJ2aWNlVVJMXzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCVdTRExTZXJ2aWNlUGF0aG5hbWVfOwotCXByaXZhdGUgU3RyaW5nCQkJCQkJb3V0cHV0Rm9sZGVyXzsKLQotCXB1YmxpYyBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZCgpCi0JewotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQkKLQkJaWYoIG91dHB1dEZvbGRlcl8gPT0gbnVsbCApCi0JCXsKLQkJCUlQYXRoW10gcGF0aHMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJveHlQcm9qZWN0Xyk7Ci0JCQlvdXRwdXRGb2xkZXJfID0gcGF0aHNbMF0udG9TdHJpbmcoKTsKLQkJfQotCQkKLQkJaWYgKGphdmFXU0RMUGFyYW1fID09IG51bGwpCi0JCXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzCi0JCQkJCS5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRhSW5mT25seShmYWxzZSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZlclNpZGUoSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfTk9ORSk7Ci0JCU1vZHVsZUNvcmVOYXR1cmUgbW4gPSBNb2R1bGVDb3JlTmF0dXJlLmdldE1vZHVsZUNvcmVOYXR1cmUocHJveHlQcm9qZWN0Xyk7Ci0JCWlmIChtbiAhPSBudWxsKQotCQl7Ci0JCQlJUGF0aCB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24ocHJveHlQcm9qZWN0Xyk7Ci0JCQkvLyBTdHJpbmcgb3V0cHV0ID0gUGxhdGZvcm1VdGlscy5nZXRQbGF0Zm9ybVVSTCh3ZWJNb2R1bGVTZXJ2ZXJSb290KTsKLQkJCVN0cmluZyBvdXRwdXQgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3ZWJNb2R1bGVTZXJ2ZXJSb290KS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQkvLyBTdHJpbmcgb3V0cHV0ID0KLQkJCS8vIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZvbGRlcih3ZWJNb2R1bGVTZXJ2ZXJSb290KS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQlJUGF0aCBqYXZhT3V0cHV0ID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRGb2xkZXJfICkpLmdldExvY2F0aW9uKCk7Ci0JCQlqYXZhV1NETFBhcmFtXy5zZXRKYXZhT3V0cHV0KGphdmFPdXRwdXQudG9TdHJpbmcoKSk7Ci0JCQkKLQotCQkJSVBhdGggd2ViTW9kdWxlUGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0V2ViQ29tcG9uZW50U2VydmVyUm9vdFBhdGgocHJveHlQcm9qZWN0Xyk7Ci0JCQkvLyBvdXRwdXQgPSBQbGF0Zm9ybVV0aWxzLmdldFBsYXRmb3JtVVJMKHdlYk1vZHVsZVBhdGgpOwotCQkJSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdlYk1vZHVsZVBhdGgpOwotCQkJaWYgKHJlcyAhPSBudWxsKSB7Ci0JCQkJb3V0cHV0ID0gcmVzLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJCX0KLQkJCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLy8gQ2hlY2sgaWYgaXQncyBhIHBsYWluIG9sZCBKYXZhIHByb2plY3QKLQkJCWlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJveHlQcm9qZWN0XykpCi0JCQl7Ci0JCQkJSVBhdGggb3V0cHV0ID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRGb2xkZXJfICkpLmdldExvY2F0aW9uKCk7Ci0JCQkJamF2YVdTRExQYXJhbV8uc2V0SmF2YU91dHB1dChvdXRwdXQudG9TdHJpbmcoKSk7Ci0JCQkJamF2YVdTRExQYXJhbV8uc2V0T3V0cHV0KG91dHB1dC50b1N0cmluZygpKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvLyBOb3QgZmFtaWxpYXIgd2l0aCB0aGlzIGtpbmQgb2YgcHJvamVjdAotCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkUpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCX0KLQkJaWYgKFdTRExTZXJ2aWNlUGF0aG5hbWVfID09IG51bGwpCi0JCXsKLQkJCWlmIChXU0RMU2VydmljZVVSTF8gPT0gbnVsbCkKLQkJCXsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX0xPQ0FUSU9OX05PVF9TRVQpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlXU0RMU2VydmljZVVSTF8gPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVGcm9tUGxhdGZvcm0oV1NETFNlcnZpY2VQYXRobmFtZV8pOwotCQl9Ci0JCWphdmFXU0RMUGFyYW1fLnNldElucHV0V3NkbExvY2F0aW9uKFdTRExTZXJ2aWNlVVJMXyk7Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICogCi0JICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotCSAqLwotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLQl7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIAotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtCi0JICogICAgICAgICAgVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKQotCXsKLQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHByb3h5UHJvamVjdF8KLQkgKiAgICAgICAgICBUaGUgcHJveHlQcm9qZWN0XyB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJveHlQcm9qZWN0KElQcm9qZWN0IHByb3h5UHJvamVjdCkKLQl7Ci0JCXRoaXMucHJveHlQcm9qZWN0XyA9IHByb3h5UHJvamVjdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc2VydmljZVVSTF8KLQkgKiAgICAgICAgICBUaGUgd1NETFNlcnZpY2VVUkxfIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXU0RMU2VydmljZVVSTChTdHJpbmcgc2VydmljZVVSTCkKLQl7Ci0JCVdTRExTZXJ2aWNlVVJMXyA9IHNlcnZpY2VVUkw7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VQYXRobmFtZV8KLQkgKiAgICAgICAgICBUaGUgd1NETFNlcnZpY2VQYXRobmFtZV8gdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFdTRExTZXJ2aWNlUGF0aG5hbWUoU3RyaW5nIHNlcnZpY2VQYXRobmFtZSkKLQl7Ci0JCVdTRExTZXJ2aWNlUGF0aG5hbWVfID0gc2VydmljZVBhdGhuYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0Rm9sZGVyKCkKLQl7Ci0JICByZXR1cm4gb3V0cHV0Rm9sZGVyXzsJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlcihTdHJpbmcgb3V0cHV0Rm9sZGVyKQotCXsKLQkJb3V0cHV0Rm9sZGVyXyA9IG91dHB1dEZvbGRlcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMzBiZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0KLQkvKioKLQkqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0JKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9Ci0JCSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSI7Ci0KLQkvKioKLQkqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLQkqLwotCXByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBJTG9nIGxvZ187Ci0KLQkvKioKLQkqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotCSogVGhlICJwbHVnaW4iIGVsZW1lbnQgaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlCi0JKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VQbHVnaW4iLgotCSogQHBhcmFtIGRlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwdWJsaWMgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLQkJCWluc3RhbmNlXyA9IHRoaXM7Ci0JCX0KLQkJbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLQl9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIGxvZ2dpbmcgZnJvbSBibG93aW5nIHVwLgotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBJRDsgIAotICB9Ci0gIAotCS8qKgotCSogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLQkqIChXZWJTZXJ2aWNlV2FzQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwIik7Ci0JKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlV2FzQ29uc3VtcHRpb25QbHVnaW4gc2luZ2xldG9uLgotCSovCi0Jc3RhdGljIHB1YmxpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4gZ2V0SW5zdGFuY2UoKSB7Ci0JCXJldHVybiBpbnN0YW5jZV87Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0JKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0JKi8KLQlwdWJsaWMgdm9pZCBzdGFydCggQnVuZGxlQ29udGV4dCBidW5kbGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWxvZ18ubG9nKElMb2cuSU5GTywgNTA2NiwgdGhpcywgInN0YXJ0IiwgIlN0YXJ0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSIpOwotICAgIAotICAgIHRyeQotICAgIHsKLQkJICBzdXBlci5zdGFydCggYnVuZGxlICk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBsb2dfLmxvZyggSUxvZy5FUlJPUiwgNTA2NiwgdGhpcywgInN0YXJ0IiwgZXhjICk7Ci0gICAgfQotCX0KLQotCS8qKgotCSogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgdW5sb2FkZWQuCi0JKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc2h1dGRvd24uCi0JKi8KLQlwdWJsaWMgdm9pZCBzdG9wKCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWxvZ18ubG9nKElMb2cuSU5GTywgNTA2NywgdGhpcywgInNodXRkb3duIiwgIlNodXR0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSIpOwotICAgIAotICAgIHRyeQotICAgIHsKLQkJICBzdXBlci5zdG9wKCBjb250ZXh0ICk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBsb2dfLmxvZyggSUxvZy5FUlJPUiwgNTA2NiwgdGhpcywgInN0b3AiLCBleGMgKTsgICAgICAKLSAgICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZjYzYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpICAgIAotICogMjAwODA0MjggICAyMjQ3MjYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZ1BhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JTWVzc2FnZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LkF4aXNFbWl0dGVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdGFja0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotCi0KLQotcHVibGljIGNsYXNzIEF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDEgZm9yIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX1BBR0UgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gYWxsV2FudGVkOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDIgZm9yIHRoZSBhbGwgd2FudGVkIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEID0gIlBQQUUwMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gaGVscGVyV2FudGVkOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDMgZm9yIGhlbHBlciB3YW50ZWQgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQgPSAiUFBBRTAwMDMiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiB3cmFwQXJyYXlzOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDQgZm9yIHRoZSB3cmFwIGFycmF5cyBjaGVjayBib3ggb24gdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfQ0hFQ0tCT1hfV1JBUF9BUlJBWVMgPSAiUFBBRTAwMDQiOwotCi0gIHByaXZhdGUgQ29tYm8gZGVwbG95U2NvcGVUeXBlczsKLSAgLy8qQ09OVEVYVF9JRCBQUEFFMDAwNSBmb3IgdGhlIGRlcGxveSBzY29wZSB0eXBlIGNvbWJvIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFID0gIlBQQUUwMDA1IjsKLSAgCi0gIHByaXZhdGUgU3RhY2tMYXlvdXQgdGltZU91dFN1YkNvbXBvc2l0ZVN0YWNrTGF5b3V0OwotICAKLSAgcHJpdmF0ZSBUZXh0IHRpbWVPdXRGaWVsZDsKLSAgaW50IHRpbWVPdXQ7Ci0gIFN0cmluZyB3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkF4aXNXc2RsMkphdmFUaW1lb3V0Iik7Ci0gIAotICBwcml2YXRlIFRleHQgdGltZU91dE1zZ1RleHQ7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwNiBmb3IgdGhlIHRpbWUgb3V0IGZpZWxkIG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUID0gIlBQQUUwMDA2IjsKLQotICBwcml2YXRlIEJ1dHRvbiB1c2VJbmhlcml0ZWRNZXRob2RzOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDcgZm9yIHRoZSB1c2UgaW5oZXJpdGVkIG1ldGhvZHMgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1VTRV9JTkhFUklURURfTUVUSE9EUyA9ICJQUEFFMDAwNyI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdmFsaWRhdGVBZ2FpbnN0SkFYUlBDOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMTAgZm9yIHRoZSAidmFsaWRhdGUgYWdhaW5zdCBKQVhSUEMuLi4iIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyA9ICJQUEFFMDAxMCI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDggZm9yIHRoZSB3c2RsMmphdmEgZ3JvdXAgb24gdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfR1JPVVBfV1NETDJKQVZBID0gIlBQQUUwMDA4IjsKLSAgLypDT05URVhUX0lEIFBQQUUwMDA5IGZvciB0aGUgamF2YTJ3c2RsIGdyb3VwIG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0dST1VQX0pBVkEyV1NETCA9ICJQUEFFMDAwOSI7Ci0vKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnQgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotCVVJVXRpbHMgdXRpbHMgPSBuZXcgVUlVdGlscyggV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICk7Ci0gIAlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gIAkKLSAgICBDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfUEFHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QUEFFX1BBR0UpOwotICAgIEdyb3VwIHdzZGwySmF2YUdyb3VwID0gdXRpbHMuY3JlYXRlR3JvdXAocGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkdST1VQX1dTREwySkFWQV9OQU1FLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9HUk9VUF9XU0RMMkpBVkEsIElORk9QT1BfUFBBRV9HUk9VUF9XU0RMMkpBVkEsIDIsIDEwLDEwKTsKLSAgICBhbGxXYW50ZWQgPSBjcmVhdGVDaGVja0JveCh3c2RsMkphdmFHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQUxMX1dBTlRFRCxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVELElORk9QT1BfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEKTsKLQotICAgIGhlbHBlcldhbnRlZCAgPSBjcmVhdGVDaGVja0JveCh3c2RsMkphdmFHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fSEVMUEVSX1dBTlRFRCxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVELElORk9QT1BfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVEKTsKLQotICAgIHdyYXBBcnJheXMgPSBjcmVhdGVDaGVja0JveCh3c2RsMkphdmFHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fV1JBUF9BUlJBWVMsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfQ0hFQ0tCT1hfV1JBUF9BUlJBWVMsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTKTsgICAgCi0gICAgCi0gICAgZGVwbG95U2NvcGVUeXBlcyA9IHV0aWxzLmNyZWF0ZUNvbWJvKHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0RFUExPWV9TQ09QRSwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFLCBJTkZPUE9QX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkpOwotICAgIC8qIAotICAgICAqIEVuc3VyZSB0aGUgb3JkZXIgaXMgdGhlIHNhbWUgYXMgaXQgaW4gdGhlIGZpZWxkcyBmb3IgY2xhc3MKLSAgICAgKiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0Ci0gICAgICovCi0gICAgZGVwbG95U2NvcGVUeXBlcy5zZXRJdGVtcyhuZXcgU3RyaW5nIFtde0F4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuREVQTE9ZX1NDT1BFX0FQUExJQ0FUSU9OLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRFUExPWV9TQ09QRV9SRVFVRVNULEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuREVQTE9ZX1NDT1BFX1NFU1NJT059KTsKLSAgICAKLSAgICBMYWJlbCB0aW1lb3V0TGFiZWwgPSBuZXcgTGFiZWwod3NkbDJKYXZhR3JvdXAsIFNXVC5XUkFQKTsKLSAgICB0aW1lb3V0TGFiZWwuc2V0VGV4dChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RJTUVfT1VUKTsKLSAgICB0aW1lb3V0TGFiZWwuc2V0VG9vbFRpcFRleHQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQpOwotICAgIAotICAgIENvbXBvc2l0ZSB0aW1lT3V0U3ViQ29tcG9zaXRlID0gdXRpbHMuY3JlYXRlQ29tcG9zaXRlKHdzZGwySmF2YUdyb3VwLCAxKTsKLSAgICB0aW1lT3V0U3ViQ29tcG9zaXRlU3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKLSAgICB0aW1lT3V0U3ViQ29tcG9zaXRlLnNldExheW91dCh0aW1lT3V0U3ViQ29tcG9zaXRlU3RhY2tMYXlvdXQpOwotICAgIAotICAgIC8vIG9ubHkgb25lIG9mIHRoaXMgaXMgZGlzcGxheWVkIGF0IG9uZSB0aW1lLCB0aGV5IHNoYXJlIGluZm9wb3AgYW5kIHRvb2x0aXAgdGV4dAotICAgIHRpbWVPdXRGaWVsZCA9IGNyZWF0ZVRleHRGaWVsZCh0aW1lT3V0U3ViQ29tcG9zaXRlLCBudWxsICxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9GSUVMRF9USU1FX09VVCxJTkZPUE9QX1BQQUVfRklFTERfVElNRV9PVVQpOwotICAgIHRpbWVPdXRNc2dUZXh0ID0gY3JlYXRlVGV4dEZpZWxkKHRpbWVPdXRTdWJDb21wb3NpdGUsIG51bGwgLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0ZJRUxEX1RJTUVfT1VULElORk9QT1BfUFBBRV9GSUVMRF9USU1FX09VVCk7Ci0gICAgCi0gICAgdGltZU91dE1zZ1RleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotICAgIAotICAgIEdyb3VwIGphdmEyV3NkbEdyb3VwID0gdXRpbHMuY3JlYXRlR3JvdXAocGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkdST1VQX0pBVkEyV1NETF9OQU1FLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9HUk9VUF9KQVZBMldTREwsIElORk9QT1BfUFBBRV9HUk9VUF9KQVZBMldTREwsIDIsIDEwLDEwKTsKLSAgICB1c2VJbmhlcml0ZWRNZXRob2RzID0gY3JlYXRlQ2hlY2tCb3goamF2YTJXc2RsR3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1VTRV9JTkhFUklURURfTUVUSE9EUyxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFMsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1VTRV9JTkhFUklURURfTUVUSE9EUyk7Ci0gICAgdmFsaWRhdGVBZ2FpbnN0SkFYUlBDID0gY3JlYXRlQ2hlY2tCb3goamF2YTJXc2RsR3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLElORk9QT1BfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyk7Ci0KLSAgICBpbml0aWFsaXplVmFsdWVzKCk7Ci0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsgICAgCi0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyBjaGVja2JveCB3aXRoIGhvcml6b250YWxTcGFuID0gMiBpbiBpdHMgZ3JpZCBkYXRhIGluIG9yZGVyIHRvCi0gICAqIG1hdGNoIHRoZSBncmlkIGxheW91dCBmb3IgY29tYm8gCi0gICAqLwotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wICkKLSAgewotICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKCBwYXJlbnQsIFNXVC5DSEVDSyApOwotICAgIGJ1dHRvbi5zZXRUZXh0KGxhYmVsTmFtZSk7Ci0gICAgYnV0dG9uLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGJ1dHRvbiwgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi4iICsgaW5mb3BvcCApOwotCUdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOwotCWdkLmhvcml6b250YWxTcGFuPSAyOwotCWJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsJCi0gICAgcmV0dXJuIGJ1dHRvbjsKLSAgfQotICAgICAKLSAgcHJpdmF0ZSBUZXh0IGNyZWF0ZVRleHRGaWVsZChDb21wb3NpdGUgcGFyZW50LFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCkgCi0gIHsgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0JaWYoIGxhYmVsTmFtZSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgICBsYWJlbC5zZXRUZXh0KCBsYWJlbE5hbWUgKTsKLSAgICAgIGxhYmVsLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0gICAgfQotICAgICBUZXh0IHRleHQgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAgdGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgICB0ZXh0LnNldFRvb2xUaXBUZXh0KHRvb2x0aXApOwotICAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggdGV4dCwgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi4iICsgaW5mb3BvcCApOwotICAgICAKLSAgICAgdGV4dC5hZGRNb2RpZnlMaXN0ZW5lciggbmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCW51bWJlckZpZWxkQ2hhbmdlZCgoVGV4dCkgZS53aWRnZXQpOwotCQl9Ci0JIH0KLSAgICAgKTsKLSAgICAgcmV0dXJuIHRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgaWYodmFsaWRhdGVOdW1iZXIodGltZU91dEZpZWxkLmdldFRleHQoKSkuaXNPSygpKQotICAgIAlzdG9yZVZhbHVlcygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHBlcmZvcm1PaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgeyB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgdXNpbmcgZGVmYXVsdCB2YWx1ZXMKLSAgICogaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIGFsbFdhbnRlZC5zZXRTZWxlY3Rpb24oIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0QWxsV2FudGVkRGVmYXVsdCgpKTsKLSAgICBoZWxwZXJXYW50ZWQuc2V0U2VsZWN0aW9uKCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldEhlbHBlcldhbnRlZERlZmF1bHQoKSk7Ci0gICAgd3JhcEFycmF5cy5zZXRTZWxlY3Rpb24oIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0V3JhcEFycmF5c0RlZmF1bHQoKSk7Ci0gICAgZGVwbG95U2NvcGVUeXBlcy5zZWxlY3QoQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXREZXBsb3lTY29wZURlZmF1bHQoKSk7Ci0gICAgaWYgKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSAhPSBudWxsKSB0aW1lT3V0RmllbGQuc2V0VGV4dCgiIisgZ2V0VGltZU91dFZhbHVlV2l0aFByb3BlcnR5KCkpOwotICAgIGVsc2UgdGltZU91dEZpZWxkLnNldFRleHQoIiIgKyBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpOwkKLSAgICB1c2VJbmhlcml0ZWRNZXRob2RzLnNldFNlbGVjdGlvbihBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpOwotICAgIHZhbGlkYXRlQWdhaW5zdEpBWFJQQy5zZXRTZWxlY3Rpb24oQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRWYWxpZGF0ZUFnYWluc3RKQVhSUEMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgLy8gZ2V0IHRoZSBwZXJzaXN0ZW50IGNvbnRleHQgZnJvbSB0aGUgcGx1Z2luCi0gICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotICAgIGFsbFdhbnRlZC5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNBbGxXYW50ZWRFbmFibGVkKCkpOwotICAgIGhlbHBlcldhbnRlZC5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkpOwotICAgIHdyYXBBcnJheXMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzV3JhcEFycmF5c0VuYWJsZWQoKSk7Ci0gICAgZGVwbG95U2NvcGVUeXBlcy5zZWxlY3QoY29udGV4dC5nZXREZXBsb3lTY29wZVR5cGUoKSk7Ci0gICAgdXNlSW5oZXJpdGVkTWV0aG9kcy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZCgpKTsKLSAgICB2YWxpZGF0ZUFnYWluc3RKQVhSUEMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzVmFsaWRhdGVBZ2FpbnN0SkFYUlBDRW5hYmxlZCgpICk7Ci0gICAgaWYgKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSAhPSBudWxsKSAKLSAgICB7CXRpbWVPdXQ9Z2V0VGltZU91dFZhbHVlV2l0aFByb3BlcnR5KCk7Ci0gICAgCS8vdGltZU91dEZpZWxkLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIAl0aW1lT3V0U3ViQ29tcG9zaXRlU3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IHRpbWVPdXRNc2dUZXh0OwotICAgICAgICB0aW1lT3V0TXNnVGV4dC5zZXRUZXh0KEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1VTRV9KVk1fQVJHVU1FTlRfRk9SX1RJTUVfT1VUKTsJCQotICAgIH0KLQllbHNlCi0JewotCSAgICB0aW1lT3V0ID0gY29udGV4dC5nZXRUaW1lT3V0KCk7Ci0JICAgIHRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dC50b3BDb250cm9sID0gdGltZU91dEZpZWxkOwotCX0KLSAgICB0aW1lT3V0RmllbGQuc2V0VGV4dCgiIisgdGltZU91dCk7Ci0gICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIC8vIGdldCB0aGUgcGVyc2lzdGVudCBjb250ZXh0IGZyb20gdGhlIHBsdWdpbgotICAgIEF4aXNFbWl0dGVyQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBeGlzRW1pdHRlckNvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldEFsbFdhbnRlZEVuYWJsZWQoIGFsbFdhbnRlZC5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHQuc2V0SGVscGVyV2FudGVkRW5hYmxlZCggaGVscGVyV2FudGVkLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRXcmFwQXJyYXlzRW5hYmxlZCggd3JhcEFycmF5cy5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHQuc2VsZWN0RGVwbG95U2NvcGVUeXBlKGRlcGxveVNjb3BlVHlwZXMuZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0gICAgdGltZU91dCA9IEludGVnZXIucGFyc2VJbnQodGltZU91dEZpZWxkLmdldFRleHQoKS50cmltKCkpOwotICAgIGNvbnRleHQuc2V0VGltZU91dCh0aW1lT3V0KTsKLSAgICBjb250ZXh0LnNldFVzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCB1c2VJbmhlcml0ZWRNZXRob2RzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRWYWxpZGF0ZUFnYWluc3RKQVhSUENFbmFibGVkKCB2YWxpZGF0ZUFnYWluc3RKQVhSUEMuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIG51bWJlckZpZWxkQ2hhbmdlZChUZXh0IHRleHRDb250cm9sKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gdmFsaWRhdGVOdW1iZXIodGV4dENvbnRyb2wuZ2V0VGV4dCgpKTsKLQkJc2V0VmFsaWQoIXN0YXR1cy5tYXRjaGVzKElTdGF0dXMuRVJST1IpKTsKLQkJYXBwbHlUb1N0YXR1c0xpbmUodGhpcyxzdGF0dXMpOwkKLSB9Ci0gIAotICBwcml2YXRlIGludCBnZXRUaW1lT3V0VmFsdWVXaXRoUHJvcGVydHkoKSAKLSAgewotCSAgaWYgKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSAhPSBudWxsKQotCSAgewl0cnkgewotCQkgIGxvbmcgdGltZU91dFByb3BlcnR5ID0gTG9uZy5wYXJzZUxvbmcod3NkbDJKYXZhVGltZW91dFByb3BlcnR5KTsKLQkJICBpZiAodGltZU91dFByb3BlcnR5IDwgMCkgcmV0dXJuIC0xOyAvLyB0aW1lb3V0ID0gLTEgZXF1YWxzIG5ldmVyIHRpbWUgb3V0OyB0cmVhdGluZyBhbGwgbmVnYXRpdmUgbnVtYmVyIGFzIC0xCi0JCSAgZWxzZSByZXR1cm4gKGludClNYXRoLmNlaWwodGltZU91dFByb3BlcnR5LzEwMDAuMCk7Ci0JICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKXsKLQkgICAgICBTeXN0ZW0uZXJyLnByaW50KCJBeGlzV1NETDJKYXZhVGltZW91dCBpcyBub3QgYSB2YWxpZCBudW1iZXIiKTsKLQkgICAgICByZXR1cm4gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRUaW1lT3V0RGVmYXVsdCgpOwotCSAgICB9Ci0JICB9Ci0JICBlbHNlIHJldHVybiBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyB2YWxpZGF0ZU51bWJlcihTdHJpbmcgbnVtYmVyU3RyaW5nKQotICB7Ci0JICAgIElTdGF0dXMgc3RhdHVzOwotCQl0cnkgCi0JCXsKLQkJCWludCBudW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KG51bWJlclN0cmluZyk7Ci0JCQlpZiAobnVtYmVyIDw9IDAgJiYgbnVtYmVyICE9IC0xKQotCQkJewotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9USU1FX09VVCwgbnVsbCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7CXRpbWVPdXQgPSBudW1iZXI7Ci0JCQkJc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkvL3dlIHNldCBwYXJhbTptZXNzYWdlPSIiIGhlcmUsIExhdGVyIGluIAotCQkJCS8vYXBwbHlUb1N0YXR1c0xpbmUoKSwgd2UgZG8gcGFnZS5zZXRNZXNzYWdlKG51bGwsdHlwZSkgCi0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIElTdGF0dXMuT0ssICIiLG51bGwpOwotCQkJfQotCQl9IAotCQljYXRjaCAKLQkJKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSAKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQsIG51bGwpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7IAotICAJfQotICAKLQlwcml2YXRlIHZvaWQgYXBwbHlUb1N0YXR1c0xpbmUoRGlhbG9nUGFnZSBwYWdlLCBJU3RhdHVzIHN0YXR1cykgewotCQlTdHJpbmcgbWVzc2FnZT0gc3RhdHVzLmdldE1lc3NhZ2UoKTsKLQkJc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkgewotCQkJY2FzZSBJU3RhdHVzLk9LOgotCQkJCXBhZ2Uuc2V0TWVzc2FnZShudWxsLCBJTWVzc2FnZVByb3ZpZGVyLk5PTkUpOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJU3RhdHVzLldBUk5JTkc6Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuV0FSTklORyk7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7CQkJCQotCQkJY2FzZSBJU3RhdHVzLklORk86Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuSU5GT1JNQVRJT04pOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJCWJyZWFrOwkJCQotCQkJZGVmYXVsdDoKLQkJCQlpZiAobWVzc2FnZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJCW1lc3NhZ2U9IG51bGw7Ci0JCQkJfQotCQkJCXBhZ2Uuc2V0TWVzc2FnZShudWxsKTsKLQkJCQlwYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKLQkJCQlicmVhazsJCQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9DbGllbnRDb2RlR2VuT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NsaWVudENvZGVHZW5PcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkY2RmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NsaWVudENvZGVHZW5PcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDYwMyAgIDIzNTM2NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgIklXQUIwMDE0RSBVbmV4cGVjdGVkIGV4Y2VwdGlvbiBvY2N1cnJlZCIgZnJvbSBhbnQgdGFzayBmb3Igd2ViIHNlcnZpY2UgY2xpZW50IGdlbmVyYXRpb24KLSAqIDIwMDgwNjI2ICAgMjI5ODY3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBNaXNzaW5nIG1ldGhvZCBpbiBnZW5lcmF0ZWQgcHJveHkgY2xhc3MKLSAqIDIwMDgwNzA5ICAgMjQwMjI1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRDb2RlR2VuT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgQ29weUF4aXNKYXJDb21tYW5kIGNvcHlBeGlzSmFyQ29tbWFuZCA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBXU0RMMkphdmFDb21tYW5kIHdzZGwySmF2YUNvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotCQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQkKLQlwcml2YXRlIFN0dWIyQmVhbkNvbW1hbmQgc3R1YjJCZWFuQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQlwcml2YXRlIFN0cmluZyBvdXRwdXRGb2xkZXI7Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotCXByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnQ7Ci0JCi0JcHJpdmF0ZSBSZWZyZXNoUHJvamVjdENvbW1hbmQgcmVmcmVzaFByb2plY3RDb21tYW5kID0gbnVsbDsKLQotCXB1YmxpYyBDbGllbnRDb2RlR2VuT3BlcmF0aW9uKCl7Ci0JCWNvcHlBeGlzSmFyQ29tbWFuZCA9IG5ldyBDb3B5QXhpc0phckNvbW1hbmQoKTsKLQkJd3NkbDJKYXZhQ29tbWFuZCA9IG5ldyBXU0RMMkphdmFDb21tYW5kKCk7Ci0JCXN0dWIyQmVhbkNvbW1hbmQgPSBuZXcgU3R1YjJCZWFuQ29tbWFuZCgpOwotCQlyZWZyZXNoUHJvamVjdENvbW1hbmQgPSBuZXcgUmVmcmVzaFByb2plY3RDb21tYW5kKCk7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHsKLQotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJQ2xpZW50V1NNb2RpZnlPcGVyYXRpb24gYnVPcGVyYXRpb24gPSBuZXcgQ2xpZW50V1NNb2RpZnlPcGVyYXRpb24oaW5mbywgZW52KTsKLQkJdHJ5IHsKLQkJCWJ1T3BlcmF0aW9uLmV4ZWN1dGUobW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IGNlLmdldFN0YXR1cygpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCX0KLQotCQotCXByaXZhdGUgY2xhc3MgQ2xpZW50V1NNb2RpZnlPcGVyYXRpb24gZXh0ZW5kcyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gewotCQkKLQkJICBwcml2YXRlIElBZGFwdGFibGUgaW5mbyA9IG51bGw7Ci0JCSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52ID0gbnVsbDsKLQotCQkgIAotCQkgIHByb3RlY3RlZCBDbGllbnRXU01vZGlmeU9wZXJhdGlvbihJQWRhcHRhYmxlIGFkYXB0YWJsZSwgSUVudmlyb25tZW50IGVudmlyb25tZW50KXsKLQkJCSAgaW5mbyA9IGFkYXB0YWJsZTsKLQkJCSAgZW52ID0gZW52aXJvbm1lbnQ7Ci0JCSAgfQotCQkgIAotCQkgIHByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbnsKLQkJICAKLQkJCSAgICBJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0KLQkJCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkJCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0KTsKLQkJCSAgICBzdGF0dXMgPSBjb3B5QXhpc0phckNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkJCSAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCSAgICB9Ci0JCQkJCi0JCQkJLy8gV1NETDJKYXZhQ29tbWFuZAotCQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRXc2RsVVJJKHdzZGxVUkkpOwotCQkJCXN0YXR1cyA9IHdzZGwySmF2YUNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCQkJCQkJCQkKLQkJCQkvLyBTdHViMkJlYW5Db21tYW5kCi0JCQkJc3R1YjJCZWFuQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0V2ViU2VydmljZXNQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0T3V0cHV0Rm9sZGVyKG91dHB1dEZvbGRlcik7Ci0JCQkJc3R1YjJCZWFuQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0Q2xpZW50UHJvamVjdChwcm9qZWN0KTsKLQkJCQlzdGF0dXMgPSBzdHViMkJlYW5Db21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQlwcm94eUJlYW4gPSBzdHViMkJlYW5Db21tYW5kLmdldFByb3h5QmVhbigpOwotCQkJCXByb3h5RW5kcG9pbnQgPSBzdHViMkJlYW5Db21tYW5kLmdldFByb3h5RW5kcG9pbnQoKTsKLQkJCSAgCi0JCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldFByb2plY3QocHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gcmVmcmVzaFByb2plY3RDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQkKLQkJICB9Ci0JCQotCX0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0Rm9sZGVyKFN0cmluZyBvdXRwdXRGb2xkZXIpIHsKLQkJdGhpcy5vdXRwdXRGb2xkZXIgPSBvdXRwdXRGb2xkZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0JCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkgewotCQlyZXR1cm4gcHJveHlCZWFuOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3h5RW5kcG9pbnQoKSB7Ci0JCXJldHVybiBwcm94eUVuZHBvaW50OwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ29weUF4aXNKYXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NvcHlBeGlzSmFyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDFhZjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ29weUF4aXNKYXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjM0MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjgJICAxNTU0MzkgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDUwMSAgIDE4NDUwNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDIgICAxODQ1MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFVwZGF0ZSBKQVIgc2l6ZXMKLSAqIDIwMDcxMTAyICAgMjA4NjIwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgSkFSIHNpemVzCi0gKiAyMDA3MTEwMiAgIDIwMjIyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAxMjIgICAyMTYxNjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjI0MTQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBzY2VuYXJpb3MgYnJva2UgaW4gbGF0ZXN0IGJ1aWxkcyB3aXRoIEVxdWlub3ggcDIKLSAqIDIwMTAwMzA0ICAgMzA0Mzg1IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgQWxsb3cgdXNlcnMgdG8gZGlzYWJsZSBjb3B5aW5nIGF4aXMgamFycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5CdW5kbGVVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgQ29weUF4aXNKYXJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQVhJU19KQVIgPSAiYXhpcy5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQVhJU19SVU5USU1FX1BMVUdJTl9JRCA9ICJvcmcuYXBhY2hlLmF4aXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTU9OX0RJU0NPVkVSWV9QTFVHSU5fSUQgPSAib3JnLmFwYWNoZS5jb21tb25zLmRpc2NvdmVyeSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fRElTQ09WRVJZX0pBUiA9ICJjb21tb25zLWRpc2NvdmVyeS0wLjIuamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFYX1hNTF9SUENfUExVR0lOX0lEID0gImphdmF4LnhtbC5ycGMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfWE1MX1JQQ19KQVIgPSAiamF4cnBjLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfU09BUF9QTFVHSU5fSUQgPSAiamF2YXgueG1sLnNvYXAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfWE1MX1NPQVBfSkFSID0gInNhYWouamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFYX1dTRExfUExVR0lOX0lEID0gImphdmF4LndzZGwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfV1NETF9KQVIgPSAid3NkbDRqLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fTE9HR0lOR19QTFVHSU5fSUQgPSAib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTU9OX0xPR0dJTkdfSkFSID0gImNvbW1vbnMtbG9nZ2luZy5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBBWElTX0pBUl9TSVpFID0gMTU4ODA2M0w7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBDT01NT05fRElTQ09WRVJZX0pBUl9TSVpFID0gNzE0NTFMOwotCXByaXZhdGUgc3RhdGljIGxvbmcgSkFWQVhfWE1MX1JQQ19KQVJfU0laRSA9IDMyMzYxTDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIEpBVkFYX1hNTF9TT0FQX0pBUl9TSVpFID0gMTk1ODJMOwotCXByaXZhdGUgc3RhdGljIGxvbmcgSkFWQVhfV1NETF9KQVJfU0laRSA9IDEzNDA4NUw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBDT01NT05fTE9HR0lOR19KQVJfU0laRSA9IDM5MzUzTDsKLQotLy8gV2ViIFNlcnZpY2VzIEphcnMgVXNlZCBpbiBwcmV2aW91cyBWZXJzaW9ucyBvZiBXVFAgYnV0IG5vdyBvYnNvbGV0ZQotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIE9CU09MRVRFX0pBUlMgPSBuZXcgU3RyaW5nW117ImNvbW1vbnMtZGlzY292ZXJ5LmphciIsICJjb21tb25zLWxvZ2dpbmctMS4wLjQuamFyIiwgImxvZzRqLTEuMi40LmphciIsICJsb2c0ai0xLjIuOC5qYXIiLCAid3NkbDRqLTEuNS4xLmphciIsICJheGlzLWFudC5qYXIifTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gPSAibGliLyI7Ci0KLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0JcHJpdmF0ZSBCb29sZWFuIHByb2plY3RSZXN0YXJ0UmVxdWlyZWRfID0gQm9vbGVhbi5GQUxTRTsKLQlwcml2YXRlIElDbGFzc3BhdGhFbnRyeVtdIG9sZENsYXNzcGF0aDsKLQlwcml2YXRlIEFycmF5TGlzdCBuZXdKYXJOYW1lc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENUT1I7Ci0JICovCi0JcHVibGljIENvcHlBeGlzSmFyQ29tbWFuZCgpIHsKLQl9Ci0KLQkvKioKLQkgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0JICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JCQotCQlpZiAoV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRCb29sZWFuKCJkaXNhYmxlQXhpc0phckNvcHkiKSkgewotCQkJLy9JU3RhdHVzIHN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIkNvcHlpbmcgb2YgQXBhY2hlIEF4aXMgV2ViIFNlcnZpY2VzIGphcnMgaGFzIGJlZW4gZGlzYWJsZWQiKTsKLQkJCS8vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJfQotCi0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZX0FYSVNfQ0ZHKTsKLQotCQlpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3QpKSB7Ci0JCQljb3B5QXhpc0phcnNUb1Byb2plY3QocHJvamVjdCwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gQ2hlY2sgaWYgaXQncyBhIHBsYWluIG9sZCBKYXZhIHByb2plY3QKLQkJCWlmIChKMkVFVXRpbHMuaXNKYXZhQ29tcG9uZW50KHByb2plY3QpKSB7Ci0JCQkJc3RhdHVzID0gYWRkQXhpc0phcnNUb0J1aWxkUGF0aChwcm9qZWN0LCBlbnYsIG1vbml0b3IpOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkUpOwotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gc3RhdHVzOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvcHlBeGlzSmFyc1RvUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJU3RhdHVzIHN0YXR1cywgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVBhdGggd2ViTW9kdWxlUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJaWYgKHdlYk1vZHVsZVBhdGggPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9OT1RfRk9VTkQpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJZGVsZXRlT2Jzb2xldGVKYXJzKHdlYk1vZHVsZVBhdGgpOwotCi0KLQkJY29weUlGaWxlKEFYSVNfUlVOVElNRV9QTFVHSU5fSUQsICJsaWIvIiArIEFYSVNfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEFYSVNfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoQ09NTU9OX0RJU0NPVkVSWV9QTFVHSU5fSUQsICJsaWIvIiArIENPTU1PTl9ESVNDT1ZFUllfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIENPTU1PTl9ESVNDT1ZFUllfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQsICJsaWIvIiArIEpBVkFYX1hNTF9SUENfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEpBVkFYX1hNTF9SUENfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoSkFWQVhfWE1MX1NPQVBfUExVR0lOX0lELCAibGliLyIgKyBKQVZBWF9YTUxfU09BUF9KQVIsIHdlYk1vZHVsZVBhdGgsICJXRUItSU5GL2xpYi8iICsgSkFWQVhfWE1MX1NPQVBfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5UGx1Z2luSmFyKEpBVkFYX1dTRExfUExVR0lOX0lELCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEpBVkFYX1dTRExfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCWNvcHlQbHVnaW5KYXIoQ09NTU9OX0xPR0dJTkdfUExVR0lOX0lELCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIENPTU1PTl9MT0dHSU5HX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgdm9pZCBjb3B5SUZpbGUoU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgc291cmNlLCBJUGF0aCB0YXJnZXRQYXRoLCBTdHJpbmcgdGFyZ2V0RmlsZSwgSVN0YXR1cyBzdGF0dXMsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChuZXcgUGF0aCh0YXJnZXRGaWxlKSk7Ci0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZSU5HX0ZJTEUpOwotCi0JCXRyeSB7Ci0JCQlSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLQkJCWNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCQkJY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkJCWNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JCQlVUkwgc291cmNlVVJMID0gQnVuZGxlVXRpbHMuZ2V0VVJMRnJvbUJ1bmRsZShwbHVnaW5JZCwgc291cmNlKTsKLQkJCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh0YXJnZXQpOwotCQkJaWYgKCFyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJCUlGaWxlIGZpbGUgPSBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHRhcmdldCwgc291cmNlVVJMLm9wZW5TdHJlYW0oKSwgbW9uaXRvciwgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0JCQkJaWYgKChwcm9qZWN0UmVzdGFydFJlcXVpcmVkXy5ib29sZWFuVmFsdWUoKSA9PSBmYWxzZSkgJiYgZmlsZS5leGlzdHMoKSkgewotCQkJCQlwcm9qZWN0UmVzdGFydFJlcXVpcmVkXyA9IEJvb2xlYW4uVFJVRTsKLQkJCQl9Ci0KLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZLCBlKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29weSBwbHVnaW5zIHRoYXQgaGFzIGJlZW4gSkFSZWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29weVBsdWdpbkphcihTdHJpbmcgcGx1Z2luSWQsIElQYXRoIHRhcmdldFBhdGgsIFN0cmluZyB0YXJnZXRGaWxlLCBJU3RhdHVzIHN0YXR1cywgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCUlQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKG5ldyBQYXRoKHRhcmdldEZpbGUpKTsKLQkJUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX0NPUFlJTkdfRklMRSk7Ci0KLQkJdHJ5IHsKLQkJCVJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCQkJY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JCQljb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKHRydWUpOwotCQkJY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLQotCQkJRmlsZSBqYXJGaWxlID0gRmlsZUxvY2F0b3IuZ2V0QnVuZGxlRmlsZShQbGF0Zm9ybS5nZXRCdW5kbGUocGx1Z2luSWQpKTsKLQkJCWlmIChqYXJGaWxlICE9IG51bGwgJiYgamFyRmlsZS5pc0ZpbGUoKSkgewotCQkJCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh0YXJnZXQpOwotCi0JCQkJaWYgKCFyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJCQlJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oamFyRmlsZSk7Ci0JCQkJCUlGaWxlIGZpbGUgPSBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHRhcmdldCwgaXMsIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJCQlpZiAoKHByb2plY3RSZXN0YXJ0UmVxdWlyZWRfLmJvb2xlYW5WYWx1ZSgpID09IGZhbHNlKSAmJiBmaWxlLmV4aXN0cygpKSB7Ci0JCQkJCQlwcm9qZWN0UmVzdGFydFJlcXVpcmVkXyA9IEJvb2xlYW4uVFJVRTsKLQkJCQkJfQotCi0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfRklMRUNPUFksIGUpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCi0JCX0KLQl9Ci0KLQkvKgotCSAqIENoZWNrIGZvciBhbnkgb2Jzb2xldGUgSmFycyBpbiBXRUItSU5GL2xpYiBmb2xkZXIgT2Jzb2xldGUgamFycyB3b3VsZAotCSAqIGJlIGZvdW5kIGluIHByb2plY3RzIG1pZ3JhdGVkIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV1RQCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRlbGV0ZU9ic29sZXRlSmFycyhJUGF0aCB3ZWJNb2R1bGVQYXRoKSB7Ci0JCS8vIEZpcnN0IGNoZWNrIGZvciBBbnkgamFycyB0aGF0IGhhdmUgbmFtZXMgdGhhdCBhcmUga25vd24gdG8gYmUKLQkJLy8gb2Jzb2xldGUKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBPQlNPTEVURV9KQVJTLmxlbmd0aDsgaSsrKSB7Ci0JCQlJUGF0aCBwYXRoID0gd2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBPQlNPTEVURV9KQVJTW2ldKTsKLQotCQkJSUZpbGUgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJaWYgKHJlc291cmNlLmV4aXN0cygpKSB7Ci0JCQkJZGVsZXRlUmVzb3VyY2UocmVzb3VyY2UpOwotCQkJfQotCQl9Ci0KLQkJLy8gZGVsZXRlIG9sZGVyIEpBUnMgb2YgdGhlIHNhbWUgbmFtZQotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBBWElTX0pBUiksIEFYSVNfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBDT01NT05fRElTQ09WRVJZX0pBUiksIENPTU1PTl9ESVNDT1ZFUllfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBKQVZBWF9YTUxfUlBDX0pBUiksIEpBVkFYX1hNTF9SUENfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBKQVZBWF9YTUxfU09BUF9KQVIpLCBKQVZBWF9YTUxfU09BUF9KQVJfU0laRSk7Ci0JCWRlbGV0ZU9sZEphcih3ZWJNb2R1bGVQYXRoLmFwcGVuZCgiV0VCLUlORi9saWIvIiArIEpBVkFYX1dTRExfSkFSKSwgSkFWQVhfV1NETF9KQVJfU0laRSk7Ci0JCWRlbGV0ZU9sZEphcih3ZWJNb2R1bGVQYXRoLmFwcGVuZCgiV0VCLUlORi9saWIvIiArIENPTU1PTl9MT0dHSU5HX0pBUiksIENPTU1PTl9MT0dHSU5HX0pBUl9TSVpFKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBkZWxldGVPbGRKYXIoSVBhdGggamFyUGF0aCwgbG9uZyBqYXJTaXplKSB7Ci0JCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShqYXJQYXRoKTsKLQkJaWYgKHJlc291cmNlLmV4aXN0cygpKSB7Ci0JCQkvLyBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHJlc291cmNlIGJ5IGdldHRpbmcgdGhlIGphdmEuaW8uRmlsZQotCQkJbG9uZyBmaWxlU2l6ZSA9IHJlc291cmNlLmdldExvY2F0aW9uKCkudG9GaWxlKCkubGVuZ3RoKCk7Ci0JCQlpZiAoZmlsZVNpemUgIT0gamFyU2l6ZSkgewotCQkJCWRlbGV0ZVJlc291cmNlKHJlc291cmNlKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkZWxldGVSZXNvdXJjZShJRmlsZSByZXNvdXJjZSkgeyAvLyBkZWxldGUgdGhlIHJlc291cmNlCi0JCXRyeSB7Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oIk9ic29sZXRlIEphciEhICIgKyByZXNvdXJjZS5nZXROYW1lKCkpOwotCQkJcmVzb3VyY2UuZGVsZXRlKHRydWUsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBBZGRlcyBBeGlzIEpBUnMgdG8gdGhlIGJ1aWxkIHBhdGggb2YgSmF2YSBwcm9qZWN0Ci0JICogCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFkZEF4aXNKYXJzVG9CdWlsZFBhdGgoSVByb2plY3QgcHJvamVjdCwgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVN0YXR1cyBzdGF0dXM7Ci0KLQkJdHJ5IHsKLQkJCWdldEphdmFQcm9qZWN0Q2xhc3NwYXRoKGVudiwgbW9uaXRvcik7Ci0KLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBBWElTX0pBUiwgZ2V0VGhlSmFyUGF0aChBWElTX1JVTlRJTUVfUExVR0lOX0lELCBQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgQVhJU19KQVIpKTsKLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBDT01NT05fRElTQ09WRVJZX0pBUiwgZ2V0VGhlSmFyUGF0aChDT01NT05fRElTQ09WRVJZX1BMVUdJTl9JRCwgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIENPTU1PTl9ESVNDT1ZFUllfSkFSKSk7Ci0JCQlhZGROZXdKYXJFbnRyeShQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgSkFWQVhfWE1MX1JQQ19KQVIsIGdldFRoZUphclBhdGgoSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQsIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9YTUxfUlBDX0pBUikpOwotCQkJYWRkTmV3SmFyRW50cnkoUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEpBVkFYX1hNTF9TT0FQX0pBUiwgZ2V0VGhlSmFyUGF0aChKQVZBWF9YTUxfU09BUF9QTFVHSU5fSUQsIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9YTUxfU09BUF9KQVIpKTsKLQotCQkJSVBhdGggamF2YXhXc2RsSmFyUGF0aCA9IEJ1bmRsZVV0aWxzLmdldEphcnJlZFBsdWdpblBhdGgoSkFWQVhfV1NETF9QTFVHSU5fSUQpOwotCQkJaWYgKGphdmF4V3NkbEphclBhdGggIT0gbnVsbCkgewotCQkJCWFkZE5ld0phckVudHJ5KGphdmF4V3NkbEphclBhdGgudG9TdHJpbmcoKSwgamF2YXhXc2RsSmFyUGF0aCk7Ci0JCQl9Ci0JCQkKLQkJCUlQYXRoIGNvbW1vbkxvZ2dpbmdKYXJQYXRoID0gQnVuZGxlVXRpbHMuZ2V0SmFycmVkUGx1Z2luUGF0aChDT01NT05fTE9HR0lOR19QTFVHSU5fSUQpOwotCQkJaWYgKGNvbW1vbkxvZ2dpbmdKYXJQYXRoICE9IG51bGwpIHsKLQkJCQlhZGROZXdKYXJFbnRyeShjb21tb25Mb2dnaW5nSmFyUGF0aC50b1N0cmluZygpLCBjb21tb25Mb2dnaW5nSmFyUGF0aCk7Ci0JCQl9Ci0JCQl1cGRhdGVDbGFzc3BhdGgobW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9CQURfQlVJTERQQVRILCBlKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZW52Ci0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuIFRoZSBKYXZhIHByb2plY3QgY2xhc3NwYXRoCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgZ2V0SmF2YVByb2plY3RDbGFzc3BhdGgoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0XyA9IG51bGw7Ci0JCW9sZENsYXNzcGF0aCA9IG51bGw7Ci0JCWphdmFQcm9qZWN0XyA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQotCQlvbGRDbGFzc3BhdGggPSBqYXZhUHJvamVjdF8uZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBTdG9yZSBuZXcgSkFSIG5hbWUgaW4gbmV3SmFyTmFtZXNMaXN0IGlmIGl0J3Mgbm90IGFscmVhZHkgb24gYnVpbGQgcGF0aAotCSAqIAotCSAqIEBwYXJhbSBqYXJOYW1lCi0JICogICAgICAgICAgICBuYW1lIG9mIHRoZSBKQVIKLQkgKiBAcGFyYW0gamFyUGF0aAotCSAqICAgICAgICAgICAgQWJzb2x1dGUgcGF0aCB0byB0aGUgSkFSCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZE5ld0phckVudHJ5KFN0cmluZyBqYXJOYW1lLCBJUGF0aCBqYXJQYXRoKSB7Ci0KLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG9sZENsYXNzcGF0aC5sZW5ndGg7IGkrKykgewotCQkJZm91bmQgPSBvbGRDbGFzc3BhdGhbaV0uZ2V0UGF0aCgpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChqYXJOYW1lLnRvTG93ZXJDYXNlKCkpOwotCQkJaWYgKGZvdW5kKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIWZvdW5kKSB7Ci0JCQluZXdKYXJOYW1lc0xpc3QuYWRkKG5ldyBKYXJFbnRyeShqYXJOYW1lLCBqYXJQYXRoKSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIFVwZGF0ZSB0aGUgSmF2YSBwcm9qZWN0IGNsYXNzcGF0aCBhZGRpbmcgY2xhc3NwYXRoIGZyb20gbmV3SmFyTmFtZXNMaXN0Ci0JICogdG8gb2xkQ2xhc3NwYXRoCi0JICogCi0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgdXBkYXRlQ2xhc3NwYXRoKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiB7Ci0KLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCWlmIChuZXdKYXJOYW1lc0xpc3Quc2l6ZSgpID4gMCkgewotCQkJSmFyRW50cnlbXSBuZXdKYXJFbnRyaWVzID0gKEphckVudHJ5W10pIG5ld0phck5hbWVzTGlzdC50b0FycmF5KG5ldyBKYXJFbnRyeVtde30pOwotCi0JCQlJQ2xhc3NwYXRoRW50cnlbXSBuZXdDbGFzc3BhdGggPSBuZXcgSUNsYXNzcGF0aEVudHJ5W29sZENsYXNzcGF0aC5sZW5ndGggKyBuZXdKYXJFbnRyaWVzLmxlbmd0aF07Ci0JCQlpbnQgaSA9IDA7Ci0JCQkvLyBBZGQgb2xkQ2xhc3NwYXRoIGVudHJpZXMKLQkJCXdoaWxlIChpIDwgb2xkQ2xhc3NwYXRoLmxlbmd0aCkgewotCQkJCW5ld0NsYXNzcGF0aFtpXSA9IG9sZENsYXNzcGF0aFtpXTsKLQkJCQlpKys7Ci0JCQl9Ci0KLQkJCWludCBtID0gMDsKLQkJCXdoaWxlIChpIDwgbmV3Q2xhc3NwYXRoLmxlbmd0aCkgewotCQkJCW5ld0NsYXNzcGF0aFtpXSA9IEphdmFDb3JlLm5ld0xpYnJhcnlFbnRyeShuZXdKYXJFbnRyaWVzW21dLmdldEphclBhdGgoKSwgbnVsbCwgbnVsbCk7Ci0JCQkJbSsrOwotCQkJCWkrKzsKLQkJCX0KLQotCQkJLy8KLQkJCS8vIFRoZW4gdXBkYXRlIHRoZSBwcm9qZWN0IGNsYXNzcGF0aC4KLQkJCS8vCi0KLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXdDbGFzc3BhdGgsIG1vbml0b3IpOwotCi0JCX0KLQotCQlyZXR1cm4gc3RhdHVzOwotCi0JfQotCi0JLy8KLQkvLyBSZXR1cm5zIHRoZSBsb2NhbCBuYXRpdmUgcGF0aG5hbWUgb2YgdGhlIGphci4KLQkvLwotCXByaXZhdGUgSVBhdGggZ2V0VGhlSmFyUGF0aChTdHJpbmcgcGx1Z2luSWQsIFN0cmluZyB0aGVKYXIpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKHBsdWdpbklkICE9IG51bGwpIHsKLQkJCVVSTCBsb2NhbFVSTCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwoQnVuZGxlVXRpbHMuZ2V0VVJMRnJvbUJ1bmRsZShwbHVnaW5JZCwgdGhlSmFyKSk7Ci0JCQlyZXR1cm4gbmV3IFBhdGgobG9jYWxVUkwuZ2V0RmlsZSgpKTsKLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBuZXcgUGF0aCh0aGVKYXIpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRQcm9qZWN0UmVzdGFydFJlcXVpcmVkKCkgewotCQlyZXR1cm4gcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8uYm9vbGVhblZhbHVlKCk7Ci0JfQotCi0JcHVibGljIGNsYXNzIEphckVudHJ5IHsKLQkJcHJpdmF0ZSBTdHJpbmcgamFyTmFtZTsKLQkJcHJpdmF0ZSBJUGF0aCBqYXJQYXRoOwotCi0JCXB1YmxpYyBKYXJFbnRyeShTdHJpbmcgbmFtZSwgSVBhdGggcGF0aCkgewotCQkJamFyTmFtZSA9IG5hbWU7Ci0JCQlqYXJQYXRoID0gcGF0aDsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0SmFyTmFtZSgpIHsKLQkJCXJldHVybiBqYXJOYW1lOwotCQl9Ci0KLQkJcHVibGljIElQYXRoIGdldEphclBhdGgoKSB7Ci0JCQlyZXR1cm4gamFyUGF0aDsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0RlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkNzg5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0RlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWwuRGlhbG9nV1dXQXV0aGVudGljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZUVudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxTZXJ2aWNlVVJMOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0KLSAgcHVibGljIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JeyAgIAotICAgIGlmICh3c2RsU2VydmljZVVSTCAhPSBudWxsICYmIHdzZGxTZXJ2aWNlVVJMLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZXNQYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgICAgICAgLy93c2Uuc2V0V1NQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotICAgICAgfQotICAgICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c2RsU2VydmljZVVSTCk7Ci0gICAgICBpZiAod3NFbnRpdHkgPT0gbnVsbCB8fCAhd3NFbnRpdHkuaXNFbnRpdHlSZXNvbHZlZCgpKQotICAgICAgewotICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRVUkkod3NkbFNlcnZpY2VVUkwpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnBhcnNlKFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX05PTkUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSkKLSAgICAgICAgewotICAgICAgICAgIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uIGRpYWxvZyA9IG5ldyBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgICAgIGRpYWxvZy5oYW5kbGVXV1dBdXRoZW50aWNhdGlvbih3d3dhZSk7Ci0gICAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gZGlhbG9nLmdldFVzZXJuYW1lKCk7Ci0gICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gZGlhbG9nLmdldFBhc3N3b3JkKCk7Ci0gICAgICAgICAgaWYgKHVzZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICAgICAgd2ViU2VydmljZXNQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKHBhc3N3b3JkKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9OT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZShudWxsKTsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChudWxsKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgd3NFbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NkbFNlcnZpY2VVUkwpOwotICAgICAgfQotICAgICAgaWYgKHdzRW50aXR5ICE9IG51bGwgJiYgd3NFbnRpdHkuZ2V0VHlwZSgpID09IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKQotICAgICAgewotICAgICAgICBTdHJpbmcgaHR0cFVzZXJuYW1lID0gd3NFbnRpdHkuZ2V0SFRUUFVzZXJuYW1lKCk7Ci0gICAgICAgIFN0cmluZyBodHRwUGFzc3dvcmQgPSB3c0VudGl0eS5nZXRIVFRQUGFzc3dvcmQoKTsKLSAgICAgICAgaWYgKGh0dHBVc2VybmFtZSAhPSBudWxsICYmIGh0dHBQYXNzd29yZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgamF2YVdTRExQYXJhbS5zZXRIVFRQVXNlcm5hbWUoaHR0cFVzZXJuYW1lKTsKLSAgICAgICAgICBqYXZhV1NETFBhcmFtLnNldEhUVFBQYXNzd29yZChodHRwUGFzc3dvcmQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsU2VydmljZVVSTCBUaGUgd3NkbFNlcnZpY2VVUkwgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFNlcnZpY2VVUkwoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKSB7Ci0gICAgdGhpcy53c2RsU2VydmljZVVSTCA9IHdzZGxTZXJ2aWNlVVJMOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLSAgICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9SZWZyZXNoUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svUmVmcmVzaFByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MGI1MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9SZWZyZXNoUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFByb2plY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0KLQlwdWJsaWMgUmVmcmVzaFByb2plY3RDb21tYW5kKCkKLQl7Ci0JfQotCi0JLyoqCi0JKiBFeGVjdXRlIFJlZnJlc2hQcm9qZWN0VGFzawotCSovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JCXRyeQotCQl7Ci0JCQlpZiAocHJvamVjdCE9bnVsbCkKLQkJCXByb2plY3QucmVmcmVzaExvY2FsKElQcm9qZWN0LkRFUFRIX0lORklOSVRFLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfUkVGUkVTSF9QUk9KRUNULCBlKTsKLQkJICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCSAgcmV0dXJuIHN0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0MDIxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MDMgICAxMjY4MTkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUxNSAgIDExODMxNSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDYxMyAgIDIzNjUyMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgT3ZlcndyaXRlIHNldHRpbmcgb24gV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGNvdXBsZWQgd2l0aCBwcmVmZXJlbmNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLk5hbWVNYXBwaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Nb2R1bGVDb3JlTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBTdHViMkJlYW5Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWU7Ci0gIHByaXZhdGUgVmVjdG9yIHBvcnRUeXBlc187Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbl87Ci0gIHByaXZhdGUgU3RyaW5nIG91dHB1dEZvbGRlcl87Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnRfOwotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBjbGllbnRQcm9qZWN0XzsKLSAgCi0gIHB1YmxpYyBTdHViMkJlYW5Db21tYW5kKCl7Ci0JICBzdXBlcigpOwotCSAgcG9ydFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsJICAKLSAgfQotCi0gIC8qKgotICAqIEV4ZWN1dGUKLSAgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOyAgICAgICAKLSAgICBTdHJpbmcgaW5wdXRXc2RsTG9jYXRpb24gPSBqYXZhV1NETFBhcmFtXy5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotICAgIERlZmluaXRpb24gZGVmID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24oaW5wdXRXc2RsTG9jYXRpb24pOwotICAgIC8qCi0gICAgKiBIYWNrOiBBeGlzIGlzIG5vdCB1c2luZyBhIHByb3BlciBqYXZhLm5ldC5VUkwgYXMgaXRzIGlucHV0V3NkbExvY2F0aW9uLgotICAgICogV2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIGEgcHJvcGVyIGZpbGUgVVJMLgotICAgICovCi0gICAgaWYgKGRlZiA9PSBudWxsKQotICAgIHsKLSAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGlucHV0V3NkbExvY2F0aW9uKTsKLSAgICAgIGlmIChmaWxlLmV4aXN0cygpKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKGZpbGUudG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9FbnN1cmUgdGhlIGNsaWVudCBwcm9qZWN0IGlzIGVpdGhlciBhIGZsZXhpYmxlIHByb2plY3Qgb3IgYSBKYXZhIHByb2plY3QKLSAgICBNb2R1bGVDb3JlTmF0dXJlIG1uID0gTW9kdWxlQ29yZU5hdHVyZS5nZXRNb2R1bGVDb3JlTmF0dXJlKGNsaWVudFByb2plY3RfKTsKLSAgICBpZiAobW49PW51bGwpCi0gICAgewotICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgcGxhaW4gb2xkIEphdmEgcHJvamVjdCAgICAKLQkJaWYgKCFSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QoY2xpZW50UHJvamVjdF8pKQotCQl7Ci0JIAkJICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9OT19KQVZBX05BVFVSRSk7CQotCSAJCSAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAJCSAgIHJldHVybiBzdGF0dXM7Ci0JCX0gICAgCQotICAgIH0KLSAgICAKLSAgICBNYXAgcGtnMm5zTWFwcGluZyA9IGphdmFXU0RMUGFyYW1fLmdldE1hcHBpbmdzKCk7Ci0gICAgTWFwIHNlcnZpY2VzID0gZGVmLmdldFNlcnZpY2VzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpaXQubmV4dCgpOwotICAgICAgU3RyaW5nIHNlcnZpY2VQa2dOYW1lID0gTmFtZU1hcHBpbmdVdGlscy5nZXRQYWNrYWdlTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIHBrZzJuc01hcHBpbmcpOwotICAgICAgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWUgPSBjb21wdXRlQ2xhc3NOYW1lKHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBTdHJpbmcgam5kaU5hbWUgPSBzZXJ2aWNlQ2xhc3NOYW1lOwotICAgICAgTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZpY2VDbGFzc05hbWUuZXF1YWxzKGNvbXB1dGVDbGFzc05hbWUoKChQb3J0KWl0Mi5uZXh0KCkpLmdldEJpbmRpbmcoKS5nZXRQb3J0VHlwZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKSkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VDbGFzc05hbWUgPSBzZXJ2aWNlQ2xhc3NOYW1lICsgIl9TZXJ2aWNlIjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXQyLm5leHQoKTsKLSAgICAgICAgaWYgKGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lICE9IG51bGwgJiYgIWRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lLmVxdWFscyhwb3J0LmdldE5hbWUoKSkpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gbnVsbDsKLSAgICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0MyA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOyBpdDMuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc29hcEFkZHJlc3MgPSAoU09BUEFkZHJlc3Mpb2JqZWN0OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNvYXBBZGRyZXNzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwcm94eUVuZHBvaW50XyA9IHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBwb3J0LmdldEJpbmRpbmcoKS5nZXRQb3J0VHlwZSgpOwotICAgICAgICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpOwotICAgICAgICAgIFN0cmluZ0J1ZmZlciBwb3J0VHlwZUlEID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIHBvcnRUeXBlSUQuYXBwZW5kKHBvcnRUeXBlUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgIHBvcnRUeXBlSUQuYXBwZW5kKCIjIik7Ci0gICAgICAgICAgcG9ydFR5cGVJRC5hcHBlbmQocG9ydFR5cGVRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgaWYgKCFwb3J0VHlwZXNfLmNvbnRhaW5zKHBvcnRUeXBlSUQudG9TdHJpbmcoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcG9ydFR5cGVzXy5hZGQocG9ydFR5cGVJRC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIFN0dWIyQmVhbkluZm8gc3R1YjJCZWFuSW5mbyA9IG5ldyBTdHViMkJlYW5JbmZvKCk7Ci0gICAgICAgICAgICBzdHViMkJlYW5JbmZvLnNldENsaWVudFByb2plY3QoY2xpZW50UHJvamVjdF8pOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5zZXRPdXRwdXRGb2xkZXIoIG91dHB1dEZvbGRlcl8gKTsKLSAgICAgICAgICAgIFN0cmluZyBwb3J0VHlwZVBrZ05hbWUgPSBOYW1lTWFwcGluZ1V0aWxzLmdldFBhY2thZ2VOYW1lKHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIHBrZzJuc01hcHBpbmcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogSWYgdGhlIHBhY2thZ2UgbmFtZSBhbmQgbWV0aG9kIG5hbWUgYXJlIHRoZSBzYW1lIHRoZSBBeGlzCi0gICAgICAgICAgICAgKiB3c2RsMkphdmEgRW1pdHRlciBhZGRzIGEgIl9wa2ciIHN1ZmZpeCB0byB0aGUgcGFja2FnZSBuYW1lCi0gICAgICAgICAgICAgKiBvZiBnZW5lcmF0ZWQgY29kZS4KLSAgICAgICAgICAgICAqIAotICAgICAgICAgICAgICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHByb3h5IGdldCdzIHB1dCBpbiB0aGlzIHNhbWUgcGFja2FnZQotICAgICAgICAgICAgICogaWYgYW4gb3BlcmF0aW9uIG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KLSAgICAgICAgICAgICAqIChNYXJrIEh1dGNoaW5zb24gLSBCdWcgMTE4MzE1KQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAgICAgICBJdGVyYXRvciBvcGVySXRlciA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gYWRkU3VmZml4ID0gZmFsc2U7Ci0gICAgICAgICAgICB3aGlsZSAob3Blckl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJJdGVyLm5leHQoKTsKLSAgICAgICAgICAgIAlpZiAob3BlcmF0aW9uLmdldE5hbWUoKS5lcXVhbHMocG9ydFR5cGVQa2dOYW1lKSkKLSAgICAgICAgICAgIAl7Ci0gICAgICAgICAgICAJCWFkZFN1ZmZpeCA9IHRydWU7ICAgICAgICAgICAgCQotICAgICAgICAgICAgCX0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhZGRTdWZmaXgpIHsKLSAgICAgICAgICAgIAlwb3J0VHlwZVBrZ05hbWUgPSBwb3J0VHlwZVBrZ05hbWUgKyAiX3BrZyI7Ci0gICAgICAgICAgICAJc2VydmljZVBrZ05hbWUgPSBzZXJ2aWNlUGtnTmFtZSArICJfcGtnIjsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHBvcnRUeXBlQ2xhc3NOYW1lID0gY29tcHV0ZUNsYXNzTmFtZShwb3J0VHlwZVFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgICAgIHN0dWIyQmVhbkluZm8uc2V0UGFja2FnZShwb3J0VHlwZVBrZ05hbWUpOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5zZXRDbGFzcyhwb3J0VHlwZUNsYXNzTmFtZSArICJQcm94eSIpOwotICAgICAgICAgICAgcHJveHlCZWFuXyA9IHBvcnRUeXBlUGtnTmFtZSsiLiIrcG9ydFR5cGVDbGFzc05hbWUrIlByb3h5IjsKLSAgICAgICAgICAgIGlmIChqbmRpTmFtZS5lcXVhbHMocG9ydFR5cGVDbGFzc05hbWUpKQotICAgICAgICAgICAgICBwb3J0VHlwZUNsYXNzTmFtZSA9IHBvcnRUeXBlQ2xhc3NOYW1lICsgIl9Qb3J0VHlwZSI7Ci0gICAgICAgICAgICBzdHViMkJlYW5JbmZvLmFkZFNFSShwb3J0VHlwZVBrZ05hbWUsIHBvcnRUeXBlQ2xhc3NOYW1lLCBzZXJ2aWNlUGtnTmFtZSwgc2VydmljZUNsYXNzTmFtZSwgam5kaU5hbWUsIE5hbWVNYXBwaW5nVXRpbHMuZ2V0UG9ydE5hbWUocG9ydC5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIHN0dWIyQmVhbkluZm8ud3JpdGUoZW52aXJvbm1lbnQsIG1vbml0b3IpOwotICAgICAgICAgICAgICBpZiAoZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFRoZSBkaXNjb3ZlcmVkIHBvcnQgd2FzIHByb2Nlc3NlZC4gSWdub3JlIGFsbCBvdGhlciBwb3J0cyBhbmQgc2VydmljZXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlQ2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLQkgIHJldHVybiBOYW1lTWFwcGluZ1V0aWxzLnhtbE5hbWVUb0phdmFDbGFzcyhjbGFzc05hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0gICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLSAgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAgIGphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLSAgICByZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEBwYXJhbSBkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSBUaGUgZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUoU3RyaW5nIGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lKSB7Ci0gICAgdGhpcy5kaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSA9IGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lOwotICB9Ci0KLSAgLyoqCi0JKiBAcGFyYW0gY2xpZW50UHJvamVjdCBUaGUgY2xpZW50UHJvamVjdCB0byBzZXQuCi0JKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0JCXRoaXMuY2xpZW50UHJvamVjdF8gPSBjbGllbnRQcm9qZWN0OwotICB9Ci0JCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBwcm94eUJlYW4uCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm94eUJlYW4oKSB7Ci0JCXJldHVybiBwcm94eUJlYW5fOwotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0Rm9sZGVyKCBTdHJpbmcgb3V0cHV0Rm9sZGVyICkKLQl7Ci0JCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQcm94eUVuZHBvaW50KCkgewotCQlyZXR1cm4gcHJveHlFbmRwb2ludF87Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwNGVhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MTcgICAxNDE0ODEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTMgICAxNzY1ODAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEdlbmVyYXRlIGEgQ2xpZW50IFdTIFByb3h5IGFjY2VwdGluZyBVUkwKLSAqIDIwMDgwNjEzICAgMjM2NTIzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBPdmVyd3JpdGUgc2V0dGluZyBvbiBXZWIgc2VydmljZSB3aXphcmQgaXMgY291cGxlZCB3aXRoIHByZWZlcmVuY2UKLSAqIDIwMDgwNzA5ICAgMjQwMjI1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFWaXNpYmlsaXR5S2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgU3R1YjJCZWFuSW5mbwotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBORVdfTElORSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICBwcml2YXRlIGludCBpbmRlbnRDb3VudDsKLQotICBwcml2YXRlIFN0cmluZyBwYWNrYWdlXzsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgaW1wb3J0c187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHNlaXNfOwotICBwcml2YXRlIFN0cmluZ0J1ZmZlciBzZXJ2aWNlc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIGpuZGlOYW1lc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHBvcnRzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NfOwotICBwcml2YXRlIFZlY3RvciB1c2VkTmFtZXM7Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudFByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgIG91dHB1dEZvbGRlcl87Ci0gIAotICBwdWJsaWMgU3R1YjJCZWFuSW5mbygpCi0gIHsKLSAgICBpbmRlbnRDb3VudCA9IDA7Ci0gICAgcGFja2FnZV8gPSBudWxsOwotICAgIGltcG9ydHNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNlaXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNlcnZpY2VzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBqbmRpTmFtZXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHBvcnRzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBjbGFzc18gPSAiU0VJQmVhbiI7Ci0gICAgdXNlZE5hbWVzID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0gIAl0aGlzLmNsaWVudFByb2plY3RfID0gIGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlciggU3RyaW5nIG91dHB1dEZvbGRlciApCi0gIHsKLSAgCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFBhY2thZ2UoU3RyaW5nIHBrZ05hbWUpCi0gIHsKLQkgIHBhY2thZ2VfID0gcGtnTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEltcG9ydHMoU3RyaW5nIHBrZ05hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICBpbXBvcnRzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShwa2dOYW1lLCBjbGFzc05hbWUpKTsKLSAgICBpbXBvcnRzXy5hcHBlbmQoIjsiKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNFSShTdHJpbmcgc2VpUGtnTmFtZSwgU3RyaW5nIHNlaUNsYXNzTmFtZSwgU3RyaW5nIHNlcnZpY2VQa2dOYW1lLCBTdHJpbmcgc2VydmljZUNsYXNzTmFtZSwgU3RyaW5nIHBvcnROYW1lKQotICB7Ci0gICAgYWRkU0VJKHNlaVBrZ05hbWUsIHNlaUNsYXNzTmFtZSwgc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIHBvcnROYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNFSShTdHJpbmcgc2VpUGtnTmFtZSwgU3RyaW5nIHNlaUNsYXNzTmFtZSwgU3RyaW5nIHNlcnZpY2VQa2dOYW1lLCBTdHJpbmcgc2VydmljZUNsYXNzTmFtZSwgU3RyaW5nIGpuZGlOYW1lLCBTdHJpbmcgcG9ydE5hbWUpCi0gIHsKLSAgICBzZWlzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShzZWlQa2dOYW1lLCBzZWlDbGFzc05hbWUpKTsKLSAgICBzZWlzXy5hcHBlbmQoIjsiKTsKLSAgICBzZXJ2aWNlc18uYXBwZW5kKHRvRnVsbHlRdWFsaWZpZWRDbGFzc05hbWUoc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUpKTsKLSAgICBzZXJ2aWNlc18uYXBwZW5kKCI7Iik7Ci0gICAgam5kaU5hbWVzXy5hcHBlbmQoam5kaU5hbWUpOwotICAgIGpuZGlOYW1lc18uYXBwZW5kKCI7Iik7Ci0gICAgcG9ydHNfLmFwcGVuZChwb3J0TmFtZSk7Ci0gICAgcG9ydHNfLmFwcGVuZCgiOyIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3MoU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotCSAgY2xhc3NfID0gY2xhc3NOYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgdG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShTdHJpbmcgcGtnTmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQocGtnTmFtZSk7Ci0gICAgc2IuYXBwZW5kKCIuIik7Ci0gICAgc2IuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBxbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiBxbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldENsYXNzTmFtZShTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBxbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiBxbmFtZS5zdWJzdHJpbmcoaW5kZXgrMSwgcW5hbWUubGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGZpcnN0Q2hhclRvTG93ZXJDYXNlKFN0cmluZyBzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChzLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpKTsKLSAgICBzYi5hcHBlbmQocy5zdWJzdHJpbmcoMSwgcy5sZW5ndGgoKSkpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RnVsbHlRdWFsaWZpZWROYW1lKEphdmFIZWxwZXJzIGphdmFIZWxwZXJzKQotICB7Ci0gICAgaWYgKGphdmFIZWxwZXJzLmlzUHJpbWl0aXZlKCkpCi0gICAgICByZXR1cm4gamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gamF2YUhlbHBlcnMuZ2V0UXVhbGlmaWVkTmFtZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgd3JpdGUoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0JSVN0YXR1c0hhbmRsZXIgc3RhdHVzTW9uaXRvciA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCi0gICAgSVBhdGggICAgICAgIG91dHB1dFBhdGggPSBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApOwotICAgIElQcm9qZWN0ICAgICBwcm9qZWN0ICAgID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YoIG91dHB1dFBhdGggKTsKLSAgICBTdHJpbmdXcml0ZXIgc3cgICAgICAgICA9IG5ldyBTdHJpbmdXcml0ZXIoMjA0OCk7Ci0gICAgCi0gICAgd3JpdGVQYWNrYWdlKHN3KTsKLSAgICB3cml0ZUltcG9ydHMoc3cpOwotICAgIHdyaXRlQ2xhc3Moc3cpOwotICAgIHN3LmNsb3NlKCk7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gc3cuZ2V0QnVmZmVyKCkudG9TdHJpbmcoKS5nZXRCeXRlcyggcHJvamVjdC5nZXREZWZhdWx0Q2hhcnNldCgpICk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChwYWNrYWdlXyAhPSBudWxsICYmIHBhY2thZ2VfLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQocGFja2FnZV8pOwotICAgICAgc2IuYXBwZW5kKCIuIik7Ci0gICAgfQotICAgIHNiLmFwcGVuZChjbGFzc18pOwotICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihzYi50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnLycpKTsKLSAgICBzYi5hcHBlbmQoIi5qYXZhIik7Ci0KLSAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKTsKLSAgICAKLSAgICBJUGF0aCBuZXdGaWxlUGF0aCA9IG5ldyBQYXRoKG91dHB1dEZvbGRlcl8pLmFwcGVuZCggc2IudG9TdHJpbmcoKSApOwotICAgIAotICAgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoKChCYXNlRWNsaXBzZUVudmlyb25tZW50KSBlbnYpLmdldFJlc291cmNlQ29udGV4dCgpLCBuZXdGaWxlUGF0aCwgYmFpcywgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVBhY2thZ2UoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhY2thZ2VfICE9IG51bGwgJiYgcGFja2FnZV8ubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHcud3JpdGUoInBhY2thZ2UgIik7Ci0gICAgICB3LndyaXRlKHBhY2thZ2VfKTsKLSAgICAgIHcud3JpdGUoIjsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlSW1wb3J0cyhXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGltcG9ydHNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKCJpbXBvcnQgIik7Ci0gICAgICB3LndyaXRlKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIjsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlQ2xhc3MoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgY2xhc3MgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIiAiKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHcud3JpdGUoImltcGxlbWVudHMgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgIGlmIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgfQotICAgIHcud3JpdGUoIiB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3cml0ZUZpZWxkc0RlY2xhcmF0aW9ucyh3KTsKLSAgICB3cml0ZUNvbnN0cnVjdG9yKHcpOwotICAgIHdyaXRlSW5pdCh3KTsKLSAgICAvKgotICAgICogQ2Fubm90IHVzZSBKTkRJIGxvb2t1cCBmb3IgQVhJUwotICAgICoKLSAgICB3cml0ZVVzZUpOREkodyk7Ci0gICAgKi8KLSAgICB3cml0ZUdldFNldEVuZHBvaW50KHcpOwotICAgIHdyaXRlU0VJR2V0dGVycyh3KTsKLSAgICB3cml0ZVNFSU1ldGhvZHModyk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVGaWVsZHNEZWNsYXJhdGlvbnMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLyoKLSAgICAqIENhbm5vdCB1c2UgSk5ESSBsb29rdXAgZm9yIEFYSVMKLSAgICAqCi0gICAgdy53cml0ZSgicHJpdmF0ZSBib29sZWFuIF91c2VKTkRJID0gdHJ1ZTsiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgICovCi0gICAgdy53cml0ZSgicHJpdmF0ZSBTdHJpbmcgX2VuZHBvaW50ID0gbnVsbDsiKTsKLSAgICB1c2VkTmFtZXMuYWRkKCJfZW5kcG9pbnQiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoInByaXZhdGUgIik7Ci0gICAgICBTdHJpbmcgc2VpID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB3LndyaXRlKHNlaSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgICBTdHJpbmcgc3R1Yk5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc2VpKSk7Ci0gICAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICAgIHVzZWROYW1lcy5hZGQoc3R1Yk5hbWUpOwotICAgICAgdy53cml0ZSgiID0gbnVsbDsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlQ29uc3RydWN0b3IoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9pbml0Iik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgCi0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIihTdHJpbmcgZW5kcG9pbnQpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9lbmRwb2ludCA9IGVuZHBvaW50OyIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUluaXQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwcml2YXRlIHZvaWQgX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgidHJ5IHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIC8qCi0gICAgKiBDYW5ub3QgdXNlIEpOREkgbG9va3VwIGZvciBBWElTCi0gICAgKgotICAgIHcud3JpdGUoImlmIChfdXNlSk5ESSkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHNlcnZpY2VUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlcnZpY2VzXy50b1N0cmluZygpLCAiOyIpOwotICAgIC8vU3RyaW5nVG9rZW5pemVyIGpuZGlOYW1lVG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihqbmRpTmFtZXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHBvcnRUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHBvcnRzXy50b1N0cmluZygpLCAiOyIpOwotICAgIC8qCi0gICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKCJqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKGZpcnN0Q2hhclRvTG93ZXJDYXNlKGdldENsYXNzTmFtZShzdC5uZXh0VG9rZW4oKSkpKTsKLSAgICAgIHcud3JpdGUoIiA9ICgoIik7Ci0gICAgICB3LndyaXRlKHNlcnZpY2VUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiKWN0eC5sb29rdXAoXCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvIik7Ci0gICAgICB3LndyaXRlKGpuZGlOYW1lVG9rZW5zLm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIlwiKSkuZ2V0Iik7Ci0gICAgICB3LndyaXRlKG1hbmdsZUNsYXNzTmFtZShwb3J0VG9rZW5zLm5leHRUb2tlbigpKSk7Ci0gICAgICB3LndyaXRlKCIoKTsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiZWxzZSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBzZXJ2aWNlVG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZXJ2aWNlc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBwb3J0VG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihwb3J0c18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICAqLwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaU5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc3QubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgPSAobmV3ICIpOwotICAgICAgdy53cml0ZShzZXJ2aWNlVG9rZW5zLm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIkxvY2F0b3IoKSkuZ2V0Iik7Ci0gICAgICB3LndyaXRlKHBvcnRUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiaWYgKCIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIiAhPSBudWxsKSB7Iik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJpZiAoX2VuZHBvaW50ICE9IG51bGwpIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCIoKGphdmF4LnhtbC5ycGMuU3R1YikiKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIpLl9zZXRQcm9wZXJ0eShcImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzXCIsIF9lbmRwb2ludCk7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJlbHNlIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJfZW5kcG9pbnQgPSAoU3RyaW5nKSgoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX2dldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIik7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIn0iKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICAgIC8qCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgKi8KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIC8qCi0gICAgdy53cml0ZSgiY2F0Y2ggKGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb24gbmFtaW5nRXhjZXB0aW9uKSB7fSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICB3LndyaXRlKCJjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNldFByb3BlcnR5RW5kcG9pbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaU5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc3QubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoImlmICgiKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgIT0gbnVsbCkiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIigoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX3NldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIiwgX2VuZHBvaW50KTsiKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotIAotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlHZXR0ZXJzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzZWkgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIFN0cmluZyBzZWlDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUoc2VpKTsKLSAgICAgIFN0cmluZyBzZWlGaWVsZE5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShzZWlDbGFzc05hbWUpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICAgIHcud3JpdGUoc2VpKTsKLSAgICAgIHcud3JpdGUoIiBnZXQiKTsKLSAgICAgIHcud3JpdGUoc2VpQ2xhc3NOYW1lKTsKLSAgICAgIHcud3JpdGUoIigpIHsiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoImlmICgiKTsKLSAgICAgIHcud3JpdGUoc2VpRmllbGROYW1lKTsKLSAgICAgIHcud3JpdGUoIiA9PSBudWxsKSIpOwotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICAgIHcud3JpdGUoY2xhc3NfKTsKLSAgICAgIHcud3JpdGUoIigpOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgicmV0dXJuICIpOwotICAgICAgdy53cml0ZShzZWlGaWVsZE5hbWUpOwotICAgICAgdy53cml0ZSgiOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgifSIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlNZXRob2RzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIG5ld0xpbmUodyk7Ci0gICAgLy9XZWJTZXJ2aWNlRWxlbWVudCB3c2UgPSBXZWJTZXJ2aWNlRWxlbWVudC5nZXRXZWJTZXJ2aWNlRWxlbWVudChtb2RlbF8pOwotICAgIGlmIChjbGllbnRQcm9qZWN0XyA9PSBudWxsKSByZXR1cm47Ly93c2UuZ2V0UHJveHlQcm9qZWN0KCk7Ci0gICAgYm9vbGVhbiBidWlsZFByb2plY3RDYWxsZWQgPSBmYWxzZTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2VpID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhnZXRQYWNrYWdlTmFtZShzZWkpLCBnZXRDbGFzc05hbWUoc2VpKSwgY2xpZW50UHJvamVjdF8pOwotICAgICAgaWYgKGphdmFDbGFzcyA9PSBudWxsKSB7IC8vIGJ1aWxkIHRoZSBwcm9qZWN0IGlmIGJ1aWxkIHByb2plY3QgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQgYW5kIHRyeSBhZ2FpbgotICAgIAkgIGlmICghYnVpbGRQcm9qZWN0Q2FsbGVkKSB7Ci0gICAgICAJCWNsaWVudFByb2plY3RfLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgCQlidWlsZFByb2plY3RDYWxsZWQgPSB0cnVlOwotICAgICAgCQlqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGdldFBhY2thZ2VOYW1lKHNlaSksIGdldENsYXNzTmFtZShzZWkpLCBjbGllbnRQcm9qZWN0Xyk7Ci0gICAgICAJfQotICAgICAgfQotICAgICAgaWYgKGphdmFDbGFzcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG1ldGhvZHMgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotICAgICAgICBpZiAobWV0aG9kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgCWlmICghYnVpbGRQcm9qZWN0Q2FsbGVkKSB7IC8vIGJ1aWxkIHRoZSBwcm9qZWN0IGlmIGJ1aWxkIHByb2plY3QgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQgYW5kIHRyeSBhZ2FpbgotICAgICAgICAJCWNsaWVudFByb2plY3RfLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICAJCWJ1aWxkUHJvamVjdENhbGxlZCA9IHRydWU7Ci0gICAgICAgIAkJamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhnZXRQYWNrYWdlTmFtZShzZWkpLCBnZXRDbGFzc05hbWUoc2VpKSwgY2xpZW50UHJvamVjdF8pOwotICAgICAgICAJCWlmIChqYXZhQ2xhc3MgIT0gbnVsbCkKLSAgICAgICAgCQkJbWV0aG9kcyA9IGphdmFDbGFzcy5nZXRNZXRob2RzKCk7Ci0gICAgICAgIAl9ICAgIAkKLSAgICAgICAgfQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbWV0aG9kcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpaXQubmV4dCgpOwotICAgICAgICAgIGlmICghbWV0aG9kLmlzQ29uc3RydWN0b3IoKSAmJiAhbWV0aG9kLmlzTmF0aXZlKCkgJiYgbWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSBKYXZhVmlzaWJpbGl0eUtpbmQuUFVCTElDKQotICAgICAgICAgICAgd3JpdGVTRUlNZXRob2RzKHcsIGphdmFDbGFzcywgbWV0aG9kKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNFSU1ldGhvZHMoV3JpdGVyIHcsIEphdmFDbGFzcyBqYXZhQ2xhc3MsIE1ldGhvZCBtZXRob2QpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgdy53cml0ZSgicHVibGljICIpOwotICAgIC8vIGlzVm9pZAotICAgIGlmIChtZXRob2QuaXNWb2lkKCkpCi0gICAgICB3LndyaXRlKCJ2b2lkICIpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3LndyaXRlKGdldEZ1bGx5UXVhbGlmaWVkTmFtZShtZXRob2QuZ2V0UmV0dXJuVHlwZSgpKSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgfQotICAgIC8vIG1ldGhvZCBuYW1lCi0gICAgdy53cml0ZShtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICB3LndyaXRlKCIoIik7Ci0gICAgLy8gaW5wdXQgcGFyYW1ldGVycwotICAgIEphdmFQYXJhbWV0ZXJbXSBpbnB1dFBhcmFtcyA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0UGFyYW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpID4gMCkKLSAgICAgICAgdy53cml0ZSgiLCAiKTsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXJzID0gaW5wdXRQYXJhbXNbaV0uZ2V0SmF2YVR5cGUoKTsKLSAgICAgIHcud3JpdGUoZ2V0RnVsbHlRdWFsaWZpZWROYW1lKGphdmFIZWxwZXJzKSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gZ2V0Q2xhc3NOYW1lKGlucHV0UGFyYW1zW2ldLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICB3LndyaXRlKGdldFVudXNlZE5hbWUocGFyYW1OYW1lKSk7Ci0gICAgfQotICAgIHcud3JpdGUoIikiKTsKLSAgICAvLyBleGNlcHRpb25zCi0gICAgTGlzdCBleGNlcHRpb25zID0gbWV0aG9kLmdldEphdmFFeGNlcHRpb25zKCk7Ci0gICAgaWYgKCFleGNlcHRpb25zLmlzRW1wdHkoKSkKLSAgICAgIHcud3JpdGUoIiB0aHJvd3MgIik7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGV4Y2VwdGlvbnMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBKYXZhQ2xhc3MgZXhjZXB0aW9uID0gKEphdmFDbGFzcylpdC5uZXh0KCk7Ci0gICAgICB3LndyaXRlKGV4Y2VwdGlvbi5nZXRRdWFsaWZpZWROYW1lRm9yUmVmbGVjdGlvbigpKTsKLSAgICAgIGlmIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgfQotICAgIC8vIG1ldGhvZCBib2R5Ci0gICAgdy53cml0ZSgieyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgU3RyaW5nIHN0dWJOYW1lID0gZmlyc3RDaGFyVG9Mb3dlckNhc2UoamF2YUNsYXNzLmdldE5hbWUoKSk7Ci0gICAgdy53cml0ZSgiaWYgKCIpOwotICAgIHcud3JpdGUoc3R1Yk5hbWUpOwotICAgIHcud3JpdGUoIiA9PSBudWxsKSIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBpZiAoIW1ldGhvZC5pc1ZvaWQoKSkKLSAgICAgIHcud3JpdGUoInJldHVybiAiKTsKLSAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICB3LndyaXRlKCIuIik7Ci0gICAgdy53cml0ZShtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICB3LndyaXRlKCIoIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dFBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSA+IDApCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gZ2V0Q2xhc3NOYW1lKGlucHV0UGFyYW1zW2ldLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICB3LndyaXRlKGdldFVudXNlZE5hbWUocGFyYW1OYW1lKSk7Ci0gICAgfQotICAgIHcud3JpdGUoIik7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBuZXdMaW5lKHcpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlR2V0U2V0RW5kcG9pbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgicmV0dXJuIF9lbmRwb2ludDsiKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgicHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJfZW5kcG9pbnQgPSBlbmRwb2ludDsiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHdyaXRlU2V0UHJvcGVydHlFbmRwb2ludCh3KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnRDb3VudCsrOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRlY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnRDb3VudC0tOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluZGVudChXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGVudENvdW50OyBpKyspCi0gICAgICB3LndyaXRlKCIgICIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG5ld0xpbmUoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgdy53cml0ZShORVdfTElORSk7Ci0gICAgaW5kZW50KHcpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRVbnVzZWROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgaWYgKHVzZWROYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmV3TmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKG5hbWUpKS5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoaSkpLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmICghdXNlZE5hbWVzLmNvbnRhaW5zKG5ld05hbWUpKQotICAgICAgICAgIHJldHVybiBuZXdOYW1lOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9WYWxpZGF0ZVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1ZhbGlkYXRlV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFjYjk5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1ZhbGlkYXRlV1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2s7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0KLSAgcHVibGljIFZhbGlkYXRlV1NETENvbW1hbmQoKQotICB7Ci0gIH0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCWlmICh3c2RsVVJJICE9IG51bGwgJiYgd3NkbFVSSS5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpOwotCQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLQkJCXsKLQkJCQlpbnQgbnVtU2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkuc2l6ZSgpOwotCQkJCWlmIChudW1TZXJ2aWNlcyA8IDEpCi0JCQkJewotCQkJCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfSEFTX05PX1NFUlZJQ0VfRUxFTUVOVCwgbmV3IE9iamVjdFtdIHt3c2RsVVJJfSksIG51bGwpOwotCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdzZGxVUkkgVGhlIHdzZGxVUkkgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0NsYXNzcGF0aFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0NsYXNzcGF0aFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OTRjNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9DbGFzc3BhdGhVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwMyAgIDEyNjQxOCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbFJlc291cmNlOwotCi1wdWJsaWMgY2xhc3MgQ2xhc3NwYXRoVXRpbHMgewotCi0JLy8JQ29weXJpZ2h0Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDMuIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NwYXRoVXRpbHMgaW5zdGFuY2VfOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERPVF9KQVIgPSAiLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgSkFSID0gImphciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgV0VCSU5GX0xJQiA9ICIvV0VCLUlORi9saWIiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIENsYXNzcGF0aFV0aWxzKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgQ2xhc3NwYXRoVXRpbHMgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLQkJCWluc3RhbmNlXyA9IG5ldyBDbGFzc3BhdGhVdGlscygpOwotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENsYXNzcGF0aFN0cmluZyhJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZ0J1ZmZlciBjbGFzc3BhdGggPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVN0cmluZ1tdIGNsYXNzcGF0aEVudHJpZXMgPSBnZXRDbGFzc3BhdGgocHJvamVjdCwgZmFsc2UpOwotCi0JCVZlY3RvciBjbGFzc3BhdGhWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3NwYXRoRW50cmllcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKCFjbGFzc3BhdGhWZWN0b3IuY29udGFpbnMoY2xhc3NwYXRoRW50cmllc1tpXSkpIHsKLQkJCQljbGFzc3BhdGhWZWN0b3IuYWRkKGNsYXNzcGF0aEVudHJpZXNbaV0pOwotCQkJCWNsYXNzcGF0aC5hcHBlbmQoY2xhc3NwYXRoRW50cmllc1tpXSk7Ci0JCQkJY2xhc3NwYXRoLmFwcGVuZCgiOyIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIGNsYXNzcGF0aC50b1N0cmluZygpOwotCX0KLQotCQkKLQlwcml2YXRlIFN0cmluZ1tdIGdldENsYXNzcGF0aChJUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIGlzRGVwZW5kZW50KSB7Ci0JCVN0cmluZ1tdIG1vZHVsZUNsYXNzcGF0aCA9IG5ldyBTdHJpbmdbMF07Ci0JCUFycmF5TGlzdCBwcm9qZWN0Q2xhc3NwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQlib29sZWFuIG5lZWRKYXZhQ2xhc3NwYXRoID0gZmFsc2U7Ci0JCQotCQlJVmlydHVhbENvbXBvbmVudCBjb21wID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCWlmIChjb21wICE9IG51bGwpIHsKLQkJCS8vIGdldCB0aGUgbW9kdWxlJ3MgY2xhc3NwYXRoCi0JCQkKLQkJCWlmIChKMkVFVXRpbHMuaXNFQVJDb21wb25lbnQoY29tcCkpIHsKLQkJCQltb2R1bGVDbGFzc3BhdGggPSBnZXRDbGFzc3BhdGhGb3JFQVJQcm9qZWN0KHByb2plY3QsIGNvbXAuZ2V0TmFtZSgpKTsKLS8vCQkJCSBhZGQgbW9kdWxlIGNsYXNzcGF0aCB0byBwcm9qZWN0IGNsYXNzcGF0aAotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbW9kdWxlQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKG1vZHVsZUNsYXNzcGF0aFtqXSk7Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY29tcCkgfHwgSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChjb21wKSkgewotCQkJCW5lZWRKYXZhQ2xhc3NwYXRoID0gdHJ1ZTsKLQkJCQkKLQkJCQlJQ29udGFpbmVyIG91dHB1dENvbnRhaW5lciA9IG51bGw7Ci0JCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IG51bGw7Ci0JCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBwa2dGcmFnbWVudFJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyhwcm9qZWN0KTsKLQkJCQlBcnJheUxpc3Qgd2ViTW9kdWxlQ2xhc3NwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCXRyeSB7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGtnRnJhZ21lbnRSb290Lmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQlmcmFnbWVudFJvb3QgPSBwa2dGcmFnbWVudFJvb3RbaV0uZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJCQlpZiAoZnJhZ21lbnRSb290ICE9IG51bGwKLQkJCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRQcm9qZWN0KCkuZXF1YWxzKHByb2plY3QpKQotCQkJCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkpIHsJCQkJCQotCQkJCQkJCW91dHB1dENvbnRhaW5lciA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldE91dHB1dENvbnRhaW5lcihwcm9qZWN0LCBwa2dGcmFnbWVudFJvb3RbaV0pOwotCQkJCQkJCWlmIChvdXRwdXRDb250YWluZXIgIT0gbnVsbCkgeyAKLQkJCQkJCQkJd2ViTW9kdWxlQ2xhc3NwYXRoLmFkZChvdXRwdXRDb250YWluZXIuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJfQotCQkJCQotCQkJCS8vIGFkZCBXZWIgbW9kdWxlIGNsYXNzcGF0aCB0byBwcm9qZWN0IGNsYXNzcGF0aAotCQkJCUl0ZXJhdG9yIGl0ZXIgPSB3ZWJNb2R1bGVDbGFzc3BhdGguaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQkJcHJvamVjdENsYXNzcGF0aC5hZGQoKFN0cmluZykgaXRlci5uZXh0KCkpOwotCQkJCX0JCQotCQkJfQotCQkJCi0JCQlpZiAoIWlzRGVwZW5kZW50KSB7Ci0JCQkJaWYgKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjb21wKSkgewotCQkJCQluZWVkSmF2YUNsYXNzcGF0aCA9IHRydWU7Ci0JCQkJCW1vZHVsZUNsYXNzcGF0aCA9IGdldFdFQklORkxpYihwcm9qZWN0KTsKLQkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtb2R1bGVDbGFzc3BhdGgubGVuZ3RoOyBqKyspIHsKLQkJCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKG1vZHVsZUNsYXNzcGF0aFtqXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJfSBlbHNlIHsKLQkJCW5lZWRKYXZhQ2xhc3NwYXRoID0gdHJ1ZTsKLQkJfQotCQkKLQkJLy8gSWYgdGhlcmUgYXJlIFdlYiBvciBKYXZhIG1vZHVsZSBpbiB0aGUgcHJvamVjdCwgZ2V0IHRoZSBwcm9qZWN0J3MgSmF2YSBjbGFzc3BhdGgKLQkJaWYgKG5lZWRKYXZhQ2xhc3NwYXRoKSB7Ci0JCQlTdHJpbmdbXSBqYXZhQ2xhc3NwYXRoOwotCQkJdHJ5IHsKLQkJCQlJSmF2YVByb2plY3QgamF2YVByb2ogPSAoSUphdmFQcm9qZWN0KSBwcm9qZWN0LmdldE5hdHVyZShKYXZhQ29yZS5OQVRVUkVfSUQpOwotCQkJCWlmIChqYXZhUHJvaiAhPSBudWxsKSB7Ci0JCQkJCWphdmFDbGFzc3BhdGggPSBnZXRDbGFzc3BhdGhGb3JKYXZhUHJvamVjdChqYXZhUHJvaik7Ci0JCQkJCWZvciAoaW50IGogPSAwOyBqIDwgamF2YUNsYXNzcGF0aC5sZW5ndGg7IGorKykgewotCQkJCQkJcHJvamVjdENsYXNzcGF0aC5hZGQoamF2YUNsYXNzcGF0aFtqXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBub3QgYWJsZSB0byBnZXQgSmF2YSBjbGFzc3BhdGgsIGp1c3QgaWdub3JlCi0JCQl9CQotCQl9Ci0JCQotCQlyZXR1cm4gKFN0cmluZ1tdKSBwcm9qZWN0Q2xhc3NwYXRoLnRvQXJyYXkobmV3IFN0cmluZ1twcm9qZWN0Q2xhc3NwYXRoLnNpemUoKV0pOwotCX0KLQotCS8vIE5lZWQgdG8gZ2V0IGFsbCBtb2R1bGVzIGluIHRoZSBwcm9qZWN0LiBJZiB0aGVyZSdzIGEgRUFSIG1vZHVsZSwgZ2V0IHRoZSB1dGlsaXR5IEpBUnMgCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRVdGlsaXR5SmFyQ2xhc3NwYXRoKElQcm9qZWN0IHByb2plY3QpIHsKLQkJU3RyaW5nW10gdXRpbGl0eUphclN0cmluZyA9IG5ldyBTdHJpbmdbMF07Ci0JCVN0cmluZ1tdIG1vZHVsZUNsYXNzcGF0aCA9IG5ldyBTdHJpbmdbMF07Ci0JCUFycmF5TGlzdCB1dGlsaXR5SmFyc0NsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCVN0cmluZyBtb2R1bGU7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJaWYgKGNvbXAgIT0gbnVsbCkgewotCQkJbW9kdWxlID0gY29tcC5nZXROYW1lKCk7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzRUFSQ29tcG9uZW50KGNvbXApKSB7Ci0JCQkJbW9kdWxlQ2xhc3NwYXRoID0gZ2V0Q2xhc3NwYXRoRm9yRUFSUHJvamVjdChwcm9qZWN0LCBtb2R1bGUpOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbW9kdWxlQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJCXV0aWxpdHlKYXJzQ2xhc3NwYXRoLmFkZChtb2R1bGVDbGFzc3BhdGhbal0pOwotCQkJCX0KLQkJCQl1dGlsaXR5SmFyU3RyaW5nID0gKFN0cmluZ1tdKSB1dGlsaXR5SmFyc0NsYXNzcGF0aC50b0FycmF5KG5ldyBTdHJpbmdbdXRpbGl0eUphcnNDbGFzc3BhdGguc2l6ZSgpXSk7Ci0JCQl9Ci0JCX0gCi0KLQkJcmV0dXJuIHV0aWxpdHlKYXJTdHJpbmc7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nW10gZ2V0Q2xhc3NwYXRoRm9yRUFSUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgbW9kdWxlKSB7Ci0JCUlQYXRoIHByb2plY3RQYXRoID0KLQkJCXByb2plY3QuZ2V0UHJvamVjdCgpLmdldExvY2F0aW9uKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS5hcHBlbmQobW9kdWxlKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpOwotCQlyZXR1cm4gZ2V0RGlyZWN0b3J5SmFyRmlsZXMocHJvamVjdFBhdGgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gZ2V0RGlyZWN0b3J5SmFyRmlsZXMoSVBhdGggaVBhdGgpIHsKLQkJRmlsZSBkaXIgPSBpUGF0aC50b0ZpbGUoKTsKLQkJVmVjdG9yIGphcnNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCWlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCVN0cmluZ1tdIGZpbGVuYW1lcyA9IGRpci5saXN0KCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChmaWxlbmFtZXNbaV0uZW5kc1dpdGgoRE9UX0pBUikpCi0JCQkJCWphcnNWZWN0b3IuYWRkKHBhdGgyU3RyaW5nKGlQYXRoKSArIGZpbGVuYW1lc1tpXSk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nW10gamFycyA9IG5ldyBTdHJpbmdbamFyc1ZlY3Rvci5zaXplKCldOwotCQlqYXJzVmVjdG9yLmNvcHlJbnRvKGphcnMpOwotCQlyZXR1cm4gamFyczsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldFdFQklORkxpYihJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZ1tdIHdlYmluZkxpYkphcnMgPSBuZXcgU3RyaW5nWzBdOwotCQlBcnJheUxpc3QgYW5BcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7CQkJCi0JCQkJCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCQlpZiAoY29tcG9uZW50ICE9IG51bGwpIHsKLQkJCQkJCQotCQkJCQkJSVZpcnR1YWxGb2xkZXIgd2ViSW5mTGliID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoCi0JCQkJCQkJCVdFQklORl9MSUIpKTsKLQkJCQkJCWlmICh3ZWJJbmZMaWIgIT0gbnVsbCkgewotCQkJCQkJCUlWaXJ0dWFsUmVzb3VyY2VbXSByZXNvdXJjZXMgPSB3ZWJJbmZMaWIubWVtYmVycygpOwotCQkJCQkJCUlSZXNvdXJjZSBhUmVzb3VyY2UgPSBudWxsOwotCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJCWFSZXNvdXJjZSA9IHJlc291cmNlc1tpXS5nZXRVbmRlcmx5aW5nUmVzb3VyY2UoKTsKLQkJCQkJCQkJaWYgKEpBUi5lcXVhbHNJZ25vcmVDYXNlKGFSZXNvdXJjZS5nZXRGaWxlRXh0ZW5zaW9uKCkpKQotCQkJCQkJCQkJYW5BcnJheUxpc3QuYWRkKCBhUmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQkJCX0KLQkJCQkJCQlpZiAoYW5BcnJheUxpc3Quc2l6ZSgpICE9IDApCi0JCQkJCQkJCXdlYmluZkxpYkphcnMgPSAoU3RyaW5nW10pIGFuQXJyYXlMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1thbkFycmF5TGlzdC5zaXplKCldKTsKLQkJCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCXJldHVybiB3ZWJpbmZMaWJKYXJzOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gZ2V0Q2xhc3NwYXRoRm9ySmF2YVByb2plY3QoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KSB7Ci0JCUFycmF5TGlzdCBwcm9qZWN0Q2xhc3NwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewotCQkJSUNsYXNzcGF0aEVudHJ5W10gYnVpbGRQYXRoID0KLQkJCQlqYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aCh0cnVlKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYnVpbGRQYXRoLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nW10gYnVpbGRQYXRoU3RyaW5nID0KLQkJCQkJY2xhc3NwYXRoRW50cnkyU3RyaW5nKAotCQkJCQkJYnVpbGRQYXRoW2ldLAotCQkJCQkJamF2YVByb2plY3QuZ2V0UHJvamVjdCgpKTsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGJ1aWxkUGF0aFN0cmluZy5sZW5ndGg7IGorKykgewotCQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZChidWlsZFBhdGhTdHJpbmdbal0pOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkgewotCQl9Ci0KLQkJU3RyaW5nW10gdXRpbGl0eUphcnNDbGFzc3BhdGg7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCk7Ci0JCUlQcm9qZWN0W10gcmVmZXJlbmNpbmdQcm9qZWN0cyA9IHByb2plY3QuZ2V0UmVmZXJlbmNpbmdQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jaW5nUHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXV0aWxpdHlKYXJzQ2xhc3NwYXRoID0gZ2V0VXRpbGl0eUphckNsYXNzcGF0aChyZWZlcmVuY2luZ1Byb2plY3RzW2ldKTsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgdXRpbGl0eUphcnNDbGFzc3BhdGgubGVuZ3RoOyBqKyspIHsKLQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZCh1dGlsaXR5SmFyc0NsYXNzcGF0aFtqXSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gKFN0cmluZ1tdKSBwcm9qZWN0Q2xhc3NwYXRoLnRvQXJyYXkobmV3IFN0cmluZ1twcm9qZWN0Q2xhc3NwYXRoLnNpemUoKV0pOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gY2xhc3NwYXRoRW50cnkyU3RyaW5nKAotCQlJQ2xhc3NwYXRoRW50cnkgZW50cnksCi0JCUlQcm9qZWN0IHByb2plY3QpIAotCXsKLQkJc3dpdGNoIChlbnRyeS5nZXRFbnRyeUtpbmQoKSkgewotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX0xJQlJBUlkgOgotCQkJewotCQkJCXJldHVybiBuZXcgU3RyaW5nW10geyBwYXRoMlN0cmluZyhlbnRyeS5nZXRQYXRoKCkpfTsJCi0JCQl9Ci0JCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfUFJPSkVDVCA6Ci0JCQl7CQkJCi0JCQkJcmV0dXJuIGdldENsYXNzcGF0aCgKLQkJCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KAotCQkJCQkJZW50cnkuZ2V0UGF0aCgpLmxhc3RTZWdtZW50KCkpLCB0cnVlKTsKLQkJCX0KLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9TT1VSQ0UgOgotCQkJCXsKLQkJCQkJSVBhdGggcGF0aCA9IGVudHJ5LmdldFBhdGgoKTsKLQkJCQkJaWYgKHBhdGguc2VnbWVudCgwKS5lcXVhbHMocHJvamVjdC5nZXROYW1lKCkpKQotCQkJCQkJcGF0aCA9IHBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cygxKTsKLQkJCQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0JCQkJCQlwYXRoMlN0cmluZygKLQkJCQkJCQlwcm9qZWN0Ci0JCQkJCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJCQkJCS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpCi0JCQkJCQkJCS5hcHBlbmQoCi0JCQkJCQkJCXBhdGgpKX07Ci0JCQkJfQotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1ZBUklBQkxFIDoKLQkJCXsKLQkJCQlyZXR1cm4gY2xhc3NwYXRoRW50cnkyU3RyaW5nKAotCQkJCQlKYXZhQ29yZS5nZXRSZXNvbHZlZENsYXNzcGF0aEVudHJ5KGVudHJ5KSwKLQkJCQkJcHJvamVjdCk7Ci0JCQl9Ci0JCQlkZWZhdWx0IDoKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgcGF0aDJTdHJpbmcoZW50cnkuZ2V0UGF0aCgpKX07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBwYXRoMlN0cmluZyhJUGF0aCBwYXRoKSB7Ci0JCXJldHVybiBwYXRoLnRvT1NTdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0ZpbGVVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGJiOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLQotcHVibGljIGNsYXNzIEZpbGVVdGlsCi17Ci0gIHB1YmxpYyBGaWxlVXRpbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNvcHlGaWxlKFN0cmluZyBzcmMsIFN0cmluZyBkZXN0KQotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc3JjKTsKLSAgICAgIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3QpOwotICAgICAgaW50IGMgPSAwOwotICAgICAgYnl0ZVtdIGFycmF5ID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgICB3aGlsZSAoKGMgPSBpcy5yZWFkKGFycmF5KSkgPj0gMCkKLSAgICAgIHsKLSAgICAgICAgZm9zLndyaXRlKGFycmF5LCAwLCBjKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBmb3MuY2xvc2UoKTsKLSAgICAgICAgaXMuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEZpbGUgY3JlYXRlRmlsZUFuZFBhcmVudERpcmVjdG9yaWVzKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOwotICAgIEZpbGUgcGFyZW50ID0gZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgaWYgKCFwYXJlbnQuZXhpc3RzKCkpCi0gICAgewotICAgICAgcGFyZW50Lm1rZGlycygpOwotICAgIH0KLSAgICBmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKLSAgICByZXR1cm4gZmlsZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkZWxldGVEaXJlY3RvcmllcyhGaWxlIGRpcikgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVtdIGNoaWxkcmVuID0gZGlyLmxpc3RGaWxlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGNoaWxkcmVuW2ldLmxpc3QoKSAhPSBudWxsICYmIGNoaWxkcmVuW2ldLmxpc3QoKS5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBkZWxldGVEaXJlY3RvcmllcyhjaGlsZHJlbltpXSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNoaWxkcmVuW2ldLmRlbGV0ZSgpOwotICAgICAgfQotICAgIH0KLSAgICBkaXIuZGVsZXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIGZvbGRlciBhbmQgYWxsIHBhcmVudCBmb2xkZXJzIGlmIG5vdCBleGlzdGluZyBQcm9qZWN0IG11c3QgZXhpc3QKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVGb2xkZXIoSUZvbGRlciBmb2xkZXIsIGJvb2xlYW4gZm9yY2UsIGJvb2xlYW4gbG9jYWwpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoIWZvbGRlci5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJQ29udGFpbmVyIHBhcmVudCA9IGZvbGRlci5nZXRQYXJlbnQoKTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJRm9sZGVyKQotICAgICAgewotICAgICAgICBjcmVhdGVGb2xkZXIoKElGb2xkZXIpcGFyZW50LCBmb3JjZSwgbG9jYWwpOwotICAgICAgfQotICAgICAgZm9sZGVyLmNyZWF0ZShmb3JjZSwgbG9jYWwsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVUYXJnZXRGaWxlKFN0cmluZyBzb3VyY2VGaWxlTmFtZSwgU3RyaW5nIHRhcmdldEZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBjcmVhdGVUYXJnZXRGaWxlKHNvdXJjZUZpbGVOYW1lLCB0YXJnZXRGaWxlTmFtZSwgZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZVRhcmdldEZpbGUoU3RyaW5nIHNvdXJjZUZpbGVOYW1lLCBTdHJpbmcgdGFyZ2V0RmlsZU5hbWUsIGJvb2xlYW4gb3ZlcndyaXRlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBGaWxlIGlkZWFsUmVzdWx0RmlsZSA9IG5ldyBGaWxlKHRhcmdldEZpbGVOYW1lKTsKLSAgICBpZiAob3ZlcndyaXRlIHx8ICFpZGVhbFJlc3VsdEZpbGUuZXhpc3RzKCkpCi0gICAgewotICAgICAgRmlsZVV0aWwuY3JlYXRlRmlsZUFuZFBhcmVudERpcmVjdG9yaWVzKHRhcmdldEZpbGVOYW1lKTsKLSAgICAgIEZpbGVVdGlsLmNvcHlGaWxlKHNvdXJjZUZpbGVOYW1lLCB0YXJnZXRGaWxlTmFtZSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1BsYXRmb3JtVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvUGxhdGZvcm1VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWYwZTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvUGxhdGZvcm1VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotcHVibGljIGNsYXNzIFBsYXRmb3JtVXRpbHMgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk1fUk9PVCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdJTl9GSUxFX1BST1RPQ09MID0gImZpbGU6LyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE5YX0ZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk0gPSAicGxhdGZvcm0iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU09VUkNFID0gIi9yZXNvdXJjZSI7Ci0KLQlwcml2YXRlIFBsYXRmb3JtVXRpbHMoKSB7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcGxhdGZvcm0gVVJMIGdpdmVuIGFuIElQYXRoCi0JKiBAcGFyYW0gSVBhdGggcGF0aAotCSogQHJldHVybiBTdHJpbmcgcGxhdGZvcm1VUkwKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsYXRmb3JtVVJMKElQYXRoIHBhdGgpIHsKLQkJU3RyaW5nIHBsYXRmb3JtVVJMOwotCQlwbGF0Zm9ybVVSTCA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHBhdGgudG9TdHJpbmcoKSkudG9TdHJpbmcoKTsKLQkJLy8gb2xkIG1ldGhvZDogZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24KLQkJLy8gCXBsYXRmb3JtVVJMID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJcmV0dXJuIHBsYXRmb3JtVVJMOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgVVJMIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQbGF0Zm9ybSBVUkwgZ2l2ZW4gYW4gSVBhdGgKLQkqIFRoZSBQbGF0Zm9ybVJlc291cmNlTWFuYWdlciB1bmRlcmRzdGFuZHMgdGhpcyBmb3JtYXQgYW5kIHRoZXJlZm9yZQotCSogdGhpcyBpcyBzdWl0ZWQgZm9yIGNvbW1hbmQgVVJMJ3MKLQkqIEBwYXJhbSBJUGF0aCBwYXRoCi0JKiBAcmV0dXJuIFVSTCBQbGF0Zm9ybSBVUkwKLQkqLwotCXB1YmxpYyBzdGF0aWMgVVJMIGdldENvbW1hbmRQbGF0Zm9ybVVSTChJUGF0aCBwYXRoKSB7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkgewotCQkJdXJsID0gbmV3IFVSTChQTEFURk9STSwgbnVsbCwgUkVTT1VSQ0UgKyBwYXRoLnRvU3RyaW5nKCkpOwotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIHVybDsKLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBhdGggZ2l2ZW4gcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcmV0dXJuIFN0cmluZyBwYXRoIHN0cmluZwotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGF0aEZyb21QbGF0Zm9ybShTdHJpbmcgcGxhdGZvcm1TdHIpIHsKLQkJU3RyaW5nIHBhdGhTdHIgPSBwbGF0Zm9ybVN0cjsKLQotCQlTdHJpbmcgcm9vdExvY2F0aW9uOwotCQlyb290TG9jYXRpb24gPSBQTEFURk9STV9ST09UOwotCQkvLyBvbGQgbWV0aG9kOiBmaWxlIHN5c3RlbSByZXByZXNlbnRhdGlvbgotCQkvLwlyb290TG9jYXRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJaWYgKHBsYXRmb3JtU3RyLnN0YXJ0c1dpdGgocm9vdExvY2F0aW9uKSkKLQkJCXBhdGhTdHIgPSBwbGF0Zm9ybVN0ci5zdWJzdHJpbmcocm9vdExvY2F0aW9uLmxlbmd0aCgpKTsKLQkJcmV0dXJuIHBhdGhTdHI7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcGxhdGZvcm0gVVJMIGdpdmVuIHRoZSBwYXRoIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwYXRoIHN0cmluZwotCSogQHJldHVybiBTdHJpbmcgcGxhdGZvcm0gVVJMIHN0cmluZwotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1Gcm9tUGF0aChTdHJpbmcgcGF0aFN0cikgewotCQlTdHJpbmcgcGxhdGZvcm1TdHIgPSBwYXRoU3RyOwotCi0JCVN0cmluZyByb290TG9jYXRpb247Ci0JCXJvb3RMb2NhdGlvbiA9IFBMQVRGT1JNX1JPT1Q7Ci0JCS8vIG9sZCBtZXRob2Q6IGZpbGUgc3lzdGVtIHJlcHJlc2VudGF0aW9uCi0JCS8vCXJvb3RMb2NhdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlwbGF0Zm9ybVN0ciA9IHJvb3RMb2NhdGlvbiArIHBhdGhTdHI7Ci0JCXJldHVybiBwbGF0Zm9ybVN0cjsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gZmlsZSBnaXZlbiBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcGFyYW0gU3RyaW5nIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqIEByZXR1cm4gU3RyaW5nIGZpbGUgc3RyaW5nCi0JKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlRnJvbVBsYXRmb3JtKFN0cmluZyBwbGF0Zm9ybVN0cikgewotCQlTdHJpbmcgZmlsZVN0ciA9IHBsYXRmb3JtU3RyOwotCQlTdHJpbmcgcGF0aFN0ciA9IGdldFBhdGhGcm9tUGxhdGZvcm0ocGxhdGZvcm1TdHIpOwotCi0JCWZpbGVTdHIgPQotCQkJUmVzb3VyY2VzUGx1Z2luCi0JCQkJLmdldFdvcmtzcGFjZSgpCi0JCQkJLmdldFJvb3QoKQotCQkJCS5nZXRGaWxlKG5ldyBQYXRoKHBhdGhTdHIpKQotCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJLnRvU3RyaW5nKCk7Ci0KLQkJLy8gb2xkIG1ldGhvZDogZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24KLQkJLy8JRG8gbm90aGluZwotCi0JCXJldHVybiBmaWxlU3RyOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgZmlsZSBwcm90b2NvbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gZmlsZSBnaXZlbiBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcGFyYW0gU3RyaW5nIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqIEByZXR1cm4gU3RyaW5nIHRoZSBmaWxlIHByb3RvY29sIHVyaQotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZVVSTEZyb21QbGF0Zm9ybShTdHJpbmcgcGxhdGZvcm1TdHIpIHsKLQkJU3RyaW5nIGZpbGVTdHIgPSBwbGF0Zm9ybVN0cjsKLQkJU3RyaW5nIHBhdGhTdHIgPSBnZXRQYXRoRnJvbVBsYXRmb3JtKHBsYXRmb3JtU3RyKTsKLQkJdHJ5IHsKLQkJCWZpbGVTdHIgPQotCQkJCVJlc291cmNlc1BsdWdpbgotCQkJCQkuZ2V0V29ya3NwYWNlKCkKLQkJCQkJLmdldFJvb3QoKQotCQkJCQkuZ2V0RmlsZShuZXcgUGF0aChwYXRoU3RyKSkKLQkJCQkJLmdldExvY2F0aW9uKCkKLQkJCQkJLnRvRmlsZSgpCi0JCQkJCS50b1VSTCgpCi0JCQkJCS50b1N0cmluZygpOwotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpIHsKLQkJCWZpbGVTdHIgPSBnZXRGaWxlVVJMRnJvbVBhdGgobmV3IFBhdGgocGF0aFN0cikpOwotCQl9Ci0JCXJldHVybiBmaWxlU3RyOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgZmlsZSBwcm90b2NvbCByZXByZXNlbnRhdGlvbiBvZiBhIGxvY2FsIGZpbGUKLQkqIEBwYXJhbSBJUGF0aCB0aGUgUGF0aCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWxlCi0JKiBAcmV0dXJuIFN0cmluZyB0aGUgZmlsZSBwcm90b2NvbCB1cmkKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVVUkxGcm9tUGF0aChJUGF0aCBwYXRoKSB7Ci0KLQkJU3RyaW5nIGZpbGUgPSBudWxsOwotCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQlpZiAoIXBhdGguaXNBYnNvbHV0ZSgpKSB7Ci0JCQkJZmlsZSA9Ci0JCQkJCVJlc291cmNlc1BsdWdpbgotCQkJCQkJLmdldFdvcmtzcGFjZSgpCi0JCQkJCQkuZ2V0Um9vdCgpCi0JCQkJCQkuZ2V0RmlsZShwYXRoKQotCQkJCQkJLmdldExvY2F0aW9uKCkKLQkJCQkJCS50b1N0cmluZygpOwotCQkJCWlmIChmaWxlLmNoYXJBdCgwKSA9PSBJUGF0aC5TRVBBUkFUT1IpIHsKLQkJCQkJZmlsZSA9IExOWF9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCQl9IGVsc2UgewotCQkJCQlmaWxlID0gV0lOX0ZJTEVfUFJPVE9DT0wgKyBmaWxlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZmlsZSA9IHBhdGgudG9TdHJpbmcoKTsKLQkJCX0KLQkJCWlmIChmaWxlICE9IG51bGwgJiYgZmlsZS5jaGFyQXQoMCkgPT0gSVBhdGguU0VQQVJBVE9SKSB7Ci0JCQkJZmlsZSA9IExOWF9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCX0gZWxzZSB7Ci0JCQkJZmlsZSA9IFdJTl9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZSA9PSBudWxsID8gbnVsbCA6IGZpbGU7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1dTRExVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9XU0RMVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiMzY3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1dTRExVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLndzZGwudG9KYXZhLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgV1NETFV0aWxzIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9UID0gIi4iOwotCi0gIC8qKgotICAqIFRoZXNlIGFyZSBqYXZhIGtleXdvcmRzIGFzIHNwZWNpZmllZCBhdCB0aGUgZm9sbG93aW5nIFVSTCAoc29ydGVkIGFscGhhYmV0aWNhbGx5KS4KLSAgKiBodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3MvamxzL3NlY29uZF9lZGl0aW9uL2h0bWwvbGV4aWNhbC5kb2MuaHRtbCMyMjkzMDgKLSAgKiBOb3RlIHRoYXQgZmFsc2UsIHRydWUsIGFuZCBudWxsIGFyZSBub3Qgc3RyaWN0bHkga2V5d29yZHM7IHRoZXkgYXJlIGxpdGVyYWwgdmFsdWVzLAotICAqIGJ1dCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgYXJyYXksIHRoZXkgY2FuIGJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuCi0gICovCi0gIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5d29yZHNbXSA9Ci0gIHsKLSAgICAgICJhYnN0cmFjdCIsICAiYm9vbGVhbiIsICAgICAgImJyZWFrIiwgICAgICAiYnl0ZSIsICAgICAgImNhc2UiLAotICAgICAgImNhdGNoIiwgICAgICJjaGFyIiwgICAgICAgICAiY2xhc3MiLCAgICAgICJjb25zdCIsICAgICAiY29udGludWUiLAotICAgICAgImRlZmF1bHQiLCAgICJkbyIsICAgICAgICAgICAiZG91YmxlIiwgICAgICJlbHNlIiwgICAgICAiZXh0ZW5kcyIsCi0gICAgICAiZmFsc2UiLCAgICAgImZpbmFsIiwgICAgICAgICJmaW5hbGx5IiwgICAgImZsb2F0IiwgICAgICJmb3IiLAotICAgICAgImdvdG8iLCAgICAgICJpZiIsICAgICAgICAgICAiaW1wbGVtZW50cyIsICJpbXBvcnQiLCAgICAiaW5zdGFuY2VvZiIsCi0gICAgICAiaW50IiwgICAgICAgImludGVyZmFjZSIsICAgICJsb25nIiwgICAgICAgIm5hdGl2ZSIsICAgICJuZXciLAotICAgICAgIm51bGwiLCAgICAgICJwYWNrYWdlIiwgICAgICAicHJpdmF0ZSIsICAgICJwcm90ZWN0ZWQiLCAicHVibGljIiwKLSAgICAgICJyZXR1cm4iLCAgICAic2hvcnQiLCAgICAgICAgInN0YXRpYyIsICAgICAic3RyaWN0ZnAiLCAgInN1cGVyIiwKLSAgICAgICJzd2l0Y2giLCAgICAic3luY2hyb25pemVkIiwgInRoaXMiLCAgICAgICAidGhyb3ciLCAgICAgInRocm93cyIsCi0gICAgICAidHJhbnNpZW50IiwgInRydWUiLCAgICAgICAgICJ0cnkiLCAgICAgICAgInZvaWQiLCAgICAgICJ2b2xhdGlsZSIsCi0gICAgICAid2hpbGUiCi0gIH07Ci0KLSAgLyoqIENvbGxhdG9yIGZvciBjb21wYXJpbmcgdGhlIHN0cmluZ3MgKi8KLSAgc3RhdGljIGZpbmFsIENvbGxhdG9yIGVuZ2xpc2hDb2xsYXRvciA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsKLQotICAvKiogVXNlIHRoaXMgY2hhcmFjdGVyIGFzIHN1ZmZpeCAqLwotICBzdGF0aWMgZmluYWwgY2hhciBrZXl3b3JkUHJlZml4ID0gJ18nOwotCi0gIHByaXZhdGUgV1NETFV0aWxzKCkgewotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgc2VydmljZSBlbGVtZW50IGluIHRoZSBXU0RMIGRlZmluaXRpb24uCi0gICogQHJldHVybiBTdHJpbmcgc2VydmljZSBlbGVtZW50IG5hbWUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmljZUVsZW1lbnROYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgCXJldHVybiBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgZWxlbWVudCBwb2ludHMgdG8gYnkgdGhlIGZpcnN0IHNlcnZpY2UgYW5kIHBvcnQgZWxlbWVudCBpbiB0aGUgV1NETCBkZWZpbml0aW9uLgotICAqIEByZXR1cm4gU3RyaW5nIHBvcnQgdHlwZSBlbGVtZW50IG5hbWUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyAKLSAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKTtpKyspIHsKLSAgICAgICAgaWYgKHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KGkpIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKLSAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICAgICAgIHJldHVybiBiaW5kaW5nLmdldFBvcnRUeXBlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gIiI7Ci0gIAotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcG9ydCBlbGVtZW50IGluIHRoZSBXU0RMIGRlZmluaXRpb24uCi0gICogQHJldHVybiBTdHJpbmcgcG9ydCBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnROYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyAKLSAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKTtpKyspIHsKLSAgICAgICAgaWYgKHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KGkpIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIAotICAgICAgICAgIHJldHVybiBwb3J0LmdldE5hbWUoKTsKLSAgICAgIH0gIAotICAgIH0KLSAgICAgcmV0dXJuICIiOwotICB9Ci0KLQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VOYW1lc3BhY2UgKFN0cmluZyBjbHNOYW1lKSB7Ci0JICByZXR1cm4gbWFrZU5hbWVzcGFjZShjbHNOYW1lLCAiaHR0cCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ha2UgbmFtZXNwYWNlIGZyb20gYSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZQotICAgKiBhbmQgdGhlIGdpdmVuIHByb3RvY29sCi0gICAqCi0gICAqIEBwYXJhbSBjbHNOYW1lIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lCi0gICAqIEBwYXJhbSBwcm90b2NvbCBwcm90b2NvbCBTdHJpbmcKLSAgICogQHJldHVybiBuYW1lc3BhY2UgbmFtZXNwYWNlIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbWFrZU5hbWVzcGFjZSAoU3RyaW5nIGNsc05hbWUsIFN0cmluZyBwcm90b2NvbCkgewotCSAgaWYgKGNsc05hbWUubGFzdEluZGV4T2YoJy4nKSA9PSAtMSkKLQkJICByZXR1cm4gcHJvdG9jb2wgKyAiOi8vIiArICJEZWZhdWx0TmFtZXNwYWNlIjsKLQkgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNsc05hbWUuc3Vic3RyaW5nKDAsIGNsc05hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0JICByZXR1cm4gbWFrZU5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgcHJvdG9jb2wpOyAgICAgICAKLSAgfQotCi0gICAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBtYWtlTmFtZXNwYWNlRnJvbVBhY2thZ2VOYW1lKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHByb3RvY29sKSB7Ci0JICBpZiAocGFja2FnZU5hbWUgPT0gbnVsbCB8fCBwYWNrYWdlTmFtZS5lcXVhbHMoIiIpKQotCQkgIHJldHVybiBwcm90b2NvbCArICI6Ly8iICsgIkRlZmF1bHROYW1lc3BhY2UiOwotCSAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplciggcGFja2FnZU5hbWUsICIuIiApOwotCSAgU3RyaW5nW10gd29yZHMgPSBuZXcgU3RyaW5nWyBzdC5jb3VudFRva2VucygpIF07Ci0JICBmb3IoaW50IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpCi0JCSAgd29yZHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLQotCSAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcig4MCk7Ci0JICBmb3IoaW50IGkgPSB3b3Jkcy5sZW5ndGgtMTsgaSA+PSAwOyAtLWkpIHsKLQkJICBTdHJpbmcgd29yZCA9IHdvcmRzW2ldOwotCQkgIC8vIHNlcGVyYXRlIHdpdGggZG90Ci0JCSAgaWYoIGkgIT0gd29yZHMubGVuZ3RoLTEgKQotCQkJICBzYi5hcHBlbmQoJy4nKTsKLQkJICBzYi5hcHBlbmQoIHdvcmQgKTsKLQkgIH0KLQkgIHJldHVybiBwcm90b2NvbCArICI6Ly8iICsgc2IudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybiBhIERlZmluaXRpb24gZm9yIHRoZSB3c2RsIHVybCBnaXZlbiAKLSAgKgotICAqLwotICBwdWJsaWMgc3RhdGljIERlZmluaXRpb24gZ2V0V1NETERlZmluaXRpb24oU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgICBpZih3c2RsVVJMID09IG51bGwpIHJldHVybiBudWxsOwotCi0gICAgV1NETEZhY3Rvcnkgd3NkbEZhY3Rvcnk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICB0cnkgewotICAgICAgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSB3c2RsRmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCh3c2RsVVJMKTsKLSAgICB9IAotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBjYW4gYmUgV1NETEV4Y2VwdGlvbiBvciBJT0V4Y2VwdGlvbgotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICAgfQotICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKFBvcnQgcG9ydCwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwgJiYgbnMycGtnTWFwICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICBRTmFtZSBibmRRTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBibmRRTmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIE9iamVjdCBwa2cgPSBuczJwa2dNYXAuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwocG9ydCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgbnMycGtnTWFwICE9IG51bGwpCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChwb3J0LCBuczJwa2dNYXApOwotICAgIH0KLSAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChkZWZpbml0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgUG9ydCBwb3J0ID0gbnVsbDsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgIHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKHBvcnQpOwotICB9Ci0KLS8vIFRoaXMgaXMgeWV0IGFub3RoZXIgbmFtaW5nIGFsZ29yaXRobSBiYXNlZCBvbiB3ZWJzZXJ2aWNlcy5qYXIKLS8vIFRoZXkgYWx3YXlzIHVzZSB0aGUgYmluZGluZyBuYW1lc3BhY2UgYXMgdGhlIHBhY2thZ2UgbmFtZQotLy8gb2YgdGhlIEJpbmRpbmdJbXBsIGNsYXNzLgotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChQb3J0IHBvcnQpCi17Ci0gICBpZiAocG9ydCAhPSBudWxsKQotICAgewotCSAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0vLwkgIFBvcnRUeXBlIHBvcnRUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpOwotCSAgUU5hbWUgYm5kUU5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCk7Ci0JICBTdHJpbmcgbmFtZXNwYWNlID0gYm5kUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JICByZXR1cm4gbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKG5hbWVzcGFjZSk7Ci0gICB9Ci0gICByZXR1cm4gIiI7Ci19Ci0KLS8qKgotKiBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhlIFBvcnQgVHlwZQotKiAKLSovCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0VHlwZU5hbWVzcGFjZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi17Ci0gIFN0cmluZyBuYW1lc3BhY2UgPSAiIjsKLSAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgewotCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgCi0Jd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8cG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCk7aSsrKSB7Ci0gICAgICAgIGlmIChwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldChpKSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKXsgCi0JICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBwb3J0LmdldEJpbmRpbmcoKS5nZXRQb3J0VHlwZSgpOwotCSAgICAgIFFOYW1lIGJuZFFOYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLQkgICAgICBuYW1lc3BhY2UgPSBibmRRTmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIAl9ICAKLQkgIH0KLSAgCX0KLSAgfSAgCi0gIHJldHVybiBuYW1lc3BhY2U7Ci19Ci0KLS8vIFRoaXMgaXMgeWV0IGFub3RoZXIgbmFtaW5nIGFsZ29yaXRobSBiYXNlZCBvbiB3ZWJzZXJ2aWNlcy5qYXIKLS8vIFRoZXkgYWx3YXlzIHVzZSB0aGUgcG9ydHR5cGUgbmFtZXNwYWNlIGFzIHRoZSBwYWNrYWdlIG5hbWUKLS8vIG9mIHRoZSBKYXZhIGNsYXNzIChpbiBlamIpLgotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JQb3J0VHlwZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi17Ci0gICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgewotCSAgU3RyaW5nIG5hbWVzcGFjZSA9IGdldFBvcnRUeXBlTmFtZXNwYWNlKGRlZmluaXRpb24pOwotCSAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLSAgLyoqCi0gICogY2hlY2tzIGlmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYSB2YWxpZCBqYXZhIGtleXdvcmQuCi0gICogQHJldHVybiBib29sZWFuIHRydWUvZmFsc2UKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YUtleXdvcmQoU3RyaW5nIGtleXdvcmQpIHsKLSAgICByZXR1cm4gKEFycmF5cy5iaW5hcnlTZWFyY2goa2V5d29yZHMsIGtleXdvcmQsIGVuZ2xpc2hDb2xsYXRvcikgPj0gMCk7Ci0gIH0KLQotICAvKioKLSAgKiBUdXJuIGEgamF2YSBrZXl3b3JkIHN0cmluZyBpbnRvIGEgbm9uLUphdmEga2V5d29yZCBzdHJpbmcuICAoUmlnaHQgbm93Ci0gICogdGhpcyBzaW1wbHkgbWVhbnMgYXBwZW5kaW5nIGFuIHVuZGVyc2NvcmUuKQotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlTm9uSmF2YUtleXdvcmQoU3RyaW5nIGtleXdvcmQpewotICAgIHJldHVybiAga2V5d29yZFByZWZpeCArIGtleXdvcmQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGdWxseVF1YWxpZmllZFBvcnRUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYmVhbk5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYmVhbk5hbWUuYXBwZW5kKGdldFBhY2thZ2VOYW1lRm9yUG9ydFR5cGUoZGVmaW5pdGlvbikpOyAKLSAgICBiZWFuTmFtZS5hcHBlbmQoRE9UKTsKLSAgICBiZWFuTmFtZS5hcHBlbmQoZ2V0UG9ydFR5cGVOYW1lKGRlZmluaXRpb24pKTsKLSAgICByZXR1cm4gYmVhbk5hbWUudG9TdHJpbmcoKTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIGdldE5hbWUKLSAgICogQHBhcmFtIHVyaSBTdHJpbmcKLSAgICogQHJldHVybiBnZXQgdGhlIGZpbGUgbmFtZSBhZnRlciB0aGUgbGFzdCBcIGFuZCAvCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROYW1lKFN0cmluZyB1cmkpIHsKLQotCS8vIEdldCBldmVyeXRoaW5nIGFmdGVyIGxhc3Qgc2xhc2ggb3IgYmFja3NsYXNoCi0JaW50IGJzbGFzaCA9IHVyaS5sYXN0SW5kZXhPZigiXFwiKTsKLQlpbnQgc2xhc2ggPSB1cmkubGFzdEluZGV4T2YoIi8iKTsKLQlpbnQgaSA9ICBic2xhc2ggPiBzbGFzaCA/IGJzbGFzaCA6IHNsYXNoOwotCVN0cmluZyBmaWxlTmFtZSA9IHVyaS5zdWJzdHJpbmcoaSsxKS5yZXBsYWNlKCc/JywgJy4nKTsKLQotCXJldHVybiBmaWxlTmFtZTsKLSAgfQotCi0KLS8qKgotICogZ2V0V1NETE5hbWUKLSAqIEBwYXJhbSB1cmkgU3RyaW5nCi0gKiBAcmV0dXJuIGdldCB0aGUgZmlsZSBuYW1lIGFmdGVyIHRoZSBsYXN0IFwgYW5kIC8sIHRyaW1tZWQsIGRlZmF1bHRlZCB0bwotICogICAgICAgICAiZGVmYXVsdC53c2RsIiBpZiB0aGVyZSBpcyBubyBuYW1lLCBhbmQgZW5kaW5nIHdpdGggIi53c2RsIi4KLSAqLwotIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExOYW1lKFN0cmluZyB1cmkpIHsKLQotCS8vIEdldCBldmVyeXRoaW5nIGFmdGVyIGxhc3Qgc2xhc2ggb3IgYmFja3NsYXNoIGZyb20gaW5wdXQgVVJJCi0JLy8gd2l0aCBubyB3aGl0ZXNwYWNlLgotCVN0cmluZyBXU0RMTmFtZSA9IGdldE5hbWUodXJpKS50cmltKCk7Ci0KLQkvLyBpZiBlbXB0eSwgcmV0dXJuIHRoZSBkZWZhdWx0ICJkZWZhdWx0LndzZGwiCi0JaWYgKCBXU0RMTmFtZS5lcXVhbHMoICIiICkgKSB7Ci0JCVdTRExOYW1lID0gImRlZmF1bHQud3NkbCI7Ci0JfQotCi0JLy8gbWFrZSBzdXJlIG5hbWUgZW5kcyB3aXRoICIud3NkbCIsIGxvd2VyIGNhc2UuCi0JZWxzZSB7Ci0JCWlmICggISBXU0RMTmFtZS5lbmRzV2l0aCggIi53c2RsIiApICkgewotCQkJaWYgKCBXU0RMTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCAiLndzZGwiICkgKSB7Ci0JCQkJaW50IGxhc3REb3QgPSBXU0RMTmFtZS5sYXN0SW5kZXhPZigiLiIpOwotCQkJCVdTRExOYW1lID0gV1NETE5hbWUuc3Vic3RyaW5nKCAwLCBsYXN0RG90ICkgKyAiLndzZGwiOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJV1NETE5hbWUgPSBXU0RMTmFtZSArICIud3NkbCI7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gV1NETE5hbWU7Ci0gfQotCi0gLyoqCi0gICogZ2V0UG9ydFR5cGVOYW1lRnJvbUJlYW5OYW1lCi0gICogQHBhcmFtIGJlYW5uYW1lIFN0cmluZwotICAqIEByZXR1cm4gZ2V0IHRoZSBwb3J0IHR5cGUgbmFtZSBiYXNlZCBvbiB0aGUgYmVhbiBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnRUeXBlTmFtZUZyb21CZWFuTmFtZShTdHJpbmcgYmVhbk5hbWUpIHsKLSAgICByZXR1cm4gYmVhbk5hbWUuc3Vic3RyaW5nKGJlYW5OYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTsJCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTZXJ2aWNlIHNlcnZpY2UsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAoc2VydmljZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobnMycGtnTWFwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBwa2cgPSBuczJwa2dNYXAuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgICAgIGlmIChwa2cgIT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gKFN0cmluZylwa2c7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKG5hbWVzcGFjZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKFBvcnQgcG9ydCwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWUocG9ydC5nZXRCaW5kaW5nKCksIG5zMnBrZ01hcCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoQmluZGluZyBiaW5kaW5nLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gYmluZGluZy5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5zMnBrZ01hcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpcGtnOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShQb3J0VHlwZSBwb3J0VHlwZSwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5zMnBrZ01hcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpcGtnOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gIiI7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUKLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSQotICAgKiBAcmV0dXJuIHBhY2thZ2UgbmFtZSBiYXNlZCBvbiBuYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gIAkvKioKLSAgCSAqIFRPRE86ICBUaGUgbWFrZVBhY2thZ2VOYW1lIG1ldGhvZCBmcm9tIAotICAJICogb3JnLmFwYWNoZS5heGlzLndzZGwudG9KYXZhLlV0aWxzIGluIGF4aXMtMV8xIGlzIGNhbGxlZCB0byBtYXAgbmFtZXNwYWNlIHRvIHBhY2thZ2UgbmFtZS4gIAotICAJICogVGhpcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYW4gZXh0ZW5zaW9uIHBvaW50IHRvIHBsdWcgaW4gcnVudGltZSBlbWl0dGVyIHNwZWNpZmljIG5hbWVzcGFjZSB0byAKLSAgCSAqIHBhY2thZ2UgbWFwcGluZyBhbGdvcml0aG0gCi0gIAkgKi8KLSAgCXJldHVybiBVdGlscy5tYWtlUGFja2FnZU5hbWUobmFtZXNwYWNlVVJJKTsKLSAgCQotLy8gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcig4MCk7Ci0vLyAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwgJiYgbmFtZXNwYWNlVVJJLmxlbmd0aCgpID4gMCkKLS8vICAgIHsKLS8vICAgICAgU3RyaW5nIGhvc3RuYW1lID0gbnVsbDsKLS8vICAgICAgdHJ5Ci0vLyAgICAgIHsKLS8vICAgICAgICBob3N0bmFtZSA9IG5ldyBVUkwobmFtZXNwYWNlVVJJKS5nZXRIb3N0KCk7Ci0vLyAgICAgIH0KLS8vICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotLy8gICAgICB7Ci0vLyAgICAgICAgaW50IGluZGV4ID0gbmFtZXNwYWNlVVJJLmluZGV4T2YoIjoiKTsKLS8vICAgICAgICBpZiAoaW5kZXggPiAtMSkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBob3N0bmFtZSA9IG5hbWVzcGFjZVVSSS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0vLyAgICAgICAgICBpbmRleCA9IGhvc3RuYW1lLmluZGV4T2YoIi8iKTsKLS8vICAgICAgICAgIGlmIChpbmRleCA+IC0xKQotLy8gICAgICAgICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIGVsc2UKLS8vICAgICAgICAgIGhvc3RuYW1lID0gbmFtZXNwYWNlVVJJOwotLy8gICAgICB9Ci0vLyAgICAgIAotLy8JICAvLyBpZiB3ZSBkaWRuJ3QgZmlsZSBhIGhvc3RuYW1lLCBiYWlsCi0vLwkgIGlmIChob3N0bmFtZSA9PSBudWxsKSB7Ci0vLwkJICByZXR1cm4gbnVsbDsKLS8vCSAgfQotLy8KLS8vICAgICAgLy9jb252ZXJ0IGlsbGVnYWwgamF2YSBpZGVudGlmaWVyCi0vLyAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgnLScsICdfJyk7Ci0vLyAgICAgIC8vIHRva2VuaXplIHRoZSBob3N0bmFtZSBhbmQgcmV2ZXJzZSBpdAotLy8gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhvc3RuYW1lLCAiLiIpOwotLy8gICAgICBTdHJpbmdbXSB3b3JkcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0vLyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpCi0vLyAgICAgICAgd29yZHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLS8vICAgICAgZm9yKGludCBpID0gd29yZHMubGVuZ3RoLTE7IGkgPj0gMDsgLS1pKQotLy8gICAgICB7Ci0vLyAgICAgICAgU3RyaW5nIHdvcmQgPSB3b3Jkc1tpXTsKLS8vICAgICAgICBpZiAoaXNKYXZhS2V5d29yZCh3b3JkKSkKLS8vICAgICAgICAgIHdvcmQgPSBtYWtlTm9uSmF2YUtleXdvcmQod29yZCk7Ci0vLyAgICAgICAgLy8gc2VwZXJhdGUgd2l0aCBkb3QKLS8vICAgICAgICBpZiAoaSAhPSB3b3Jkcy5sZW5ndGgtMSkKLS8vICAgICAgICAgIHNiLmFwcGVuZCgnLicpOwotLy8gICAgICAgIC8vIGNvbnZlcnQgZGlnaXRzIHRvIHVuZGVyc2NvcmVzCi0vLyAgICAgICAgaWYgKENoYXJhY3Rlci5pc0RpZ2l0KHdvcmQuY2hhckF0KDApKSkKLS8vICAgICAgICAgIHNiLmFwcGVuZCgnXycpOwotLy8gICAgICAgICAgc2IuYXBwZW5kKHdvcmQpOwotLy8gICAgICB9Ci0vLyAgICB9Ci0vLyAgICByZXR1cm4gbm9ybWFsaXplUGFja2FnZU5hbWUoc2IudG9TdHJpbmcoKSwgRE9ULmNoYXJBdCgwKSk7Ci0gIH0KLQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZURvdEluUG9ydE5hbWUoU3RyaW5nIG5hbWUpIHsKLQlpZihuYW1lLmluZGV4T2YoIi4iKTwwKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBib29sZWFuIGFmdGVyRG90ID0gZmFsc2U7Ci0gICAgZm9yKGludCBpPTA7IGk8bmFtZS5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAJaWYobmFtZS5jaGFyQXQoaSk9PScuJykKLSAgICAJewotICAgIAkJYWZ0ZXJEb3QgPSB0cnVlOwotICAgIAl9Ci0gICAgCWVsc2UgaWYoYWZ0ZXJEb3QpCi0gICAgCXsKLSAgICAJCXNiLmFwcGVuZChuYW1lLnN1YnN0cmluZyhpLGkrMSkudG9VcHBlckNhc2UoKSk7Ci0gICAgCQlhZnRlckRvdD1mYWxzZTsKLSAgICAJfQotICAgIAllbHNlCi0gICAgCXsKLSAgICAJCXNiLmFwcGVuZChuYW1lLmNoYXJBdChpKSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkMzRjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzTWFwcGluZ3NGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gc2hvd01hcHBpbmdzXzsKLQotICBwdWJsaWMgQXhpc01hcHBpbmdzRnJhZ21lbnQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIG5ldyBTaW1wbGVGcmFnbWVudCggIkF4aXNNYXBwaW5nc1dpZGdldCIgKSk7Ci0gICAgc2V0Q29uZGl0aW9uKCBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNob3dNYXBwaW5nc187Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0gKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2hvd01hcHBpbmcoIGJvb2xlYW4gc2hvd01hcHBpbmdzICkKLSAgewotICAgIHNob3dNYXBwaW5nc18gPSBzaG93TWFwcGluZ3M7Ci0gIH0gICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWQxMWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNjE2ICAgMjM1NjQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFcnJvcnMgaW4gY2xpZW50IHByb3h5IGlmIHVzaW5nIGRlZmF1bHQgbmFtZXNwYWNlIHRvIHBhY2thZ2UgbWFwcGluZwotICogMjAwODA5MTcgICAyNDc1NjEgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBFcnJvciBpZiB3aGl0ZXNwYWNlIGVudGVyZWQgaW4gbWFwcGluZyBwYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlRhYmxlVmlld2VyV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc01hcHBpbmdzV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSI7Ci0gIAotICBwcml2YXRlIFRhYmxlVmlld2VyV2lkZ2V0IG1hcHBpbmdzXzsKLQotICBwcml2YXRlIGJ5dGUgbW9kZV87Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVBhcmFtZXRlcl87Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfQkVBTjJYTUwgPSAoYnl0ZSkwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9YTUwyQkVBTiA9IChieXRlKTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1hNTDJQUk9YWSA9IChieXRlKTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1hNTDJFSkIgPSAoYnl0ZSkzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9FSkIyWE1MID0gKGJ5dGUpNDsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfUEFDS0FHRSA9ICJjdXN0b20uamF2YXBhY2thZ2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX05BTUVTUEFDRSA9ICJodHRwOi8vY3VzdG9tLm5hbWVzcGFjZSI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdKTTAwMDEgZm9yIHRoZSBXU0RMIHRvIEphdmEgTWFwcGluZ3MgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdKTV9QQUdFID0gIlBXSk0wMDAxIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIEF4aXNNYXBwaW5nc1dpZGdldCggYnl0ZSBtb2RlICkKLSAgewotICAgIG1vZGVfID0gbW9kZTsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAgICAgICAKLSAgICAvLyBUT0RPIFRoZSBUT09MVElQX1BXSk1fUEFHRSBrZXkgZG9lc24ndCBzZWVtIHRvIGV4aXN0IGFueXdoZXJlPz8/Ci0JLy9wYXJlbnQuc2V0VG9vbFRpcFRleHQoIG1zZ1V0aWxzLmdldE1lc3NhZ2UoICJUT09MVElQX1BXSk1fUEFHRSIgKSApOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QV0pNX1BBR0UgKTsKLSAgICAKLSAgICBUZXh0IG1hcHBpbmdMYWJlbCA9IG5ldyBUZXh0KCBwYXJlbnQsIFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCApOwotICAgIG1hcHBpbmdMYWJlbC5zZXRUZXh0KCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX01BUFBJTkdfUEFJUlMgKTsKLSAgICBtYXBwaW5nTGFiZWwuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBMaXN0IGluaXRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgaWYoIG1vZGVfID09IE1PREVfQkVBTjJYTUwgfHwgbW9kZV8gPT0gTU9ERV9FSkIyWE1MKSAKLSAgICB7Ci0JCVN0cmluZ1tdIGNvbHVtbnMgPSB7IEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0UsCi0JCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fTEFCRUxfTkFNRVNQQUNFfTsKLQkJbWFwcGluZ3NfID0gbmV3IFRhYmxlVmlld2VyV2lkZ2V0KCBjb2x1bW5zLCBpbml0VmFsdWVzLCBuZXcgU3RyaW5nW10ge0RFRkFVTFRfUEFDS0FHRSwgREVGQVVMVF9OQU1FU1BBQ0V9LCBUYWJsZVZpZXdlcldpZGdldC5NQVBfT05FX1RPX09ORSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0JZWxzZSAKLQl7Ci0gICAgICAJU3RyaW5nW10gY29sdW1ucyA9IHsgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fTEFCRUxfTkFNRVNQQUNFLAotICAgICAgCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fTEFCRUxfUEFDS0FHRX07Ci0JCW1hcHBpbmdzXyA9IG5ldyBUYWJsZVZpZXdlcldpZGdldCggY29sdW1ucywgaW5pdFZhbHVlcywgbmV3IFN0cmluZ1tdIHtERUZBVUxUX05BTUVTUEFDRSwgREVGQVVMVF9QQUNLQUdFIH0sIFRhYmxlVmlld2VyV2lkZ2V0Lk1BUF9NQU5ZX1RPX09ORSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gICAgCi0JbWFwcGluZ3NfLmFkZENvbnRyb2xzKCBwYXJlbnQsIHN0YXR1c0xpc3RlbmVyICk7Ci0gICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBtYXBwaW5nc18uZ2V0U3RhdHVzKCk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SmF2YVBhcmFtZXRlciggSmF2YVdTRExQYXJhbWV0ZXIgcGFyYW1ldGVyICkKLSAgewotICAgIGphdmFQYXJhbWV0ZXJfID0gcGFyYW1ldGVyOwotICB9Ci0gIAotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVBhcmFtZXRlcigpCi0gIHsKLSAgICBpZiggbW9kZV8gPT0gTU9ERV9CRUFOMlhNTCB8fCBtb2RlXyA9PSBNT0RFX0VKQjJYTUwgfHwgbW9kZV8gPT0gTU9ERV9YTUwyQkVBTiB8fCBtb2RlXyA9PSBNT0RFX1hNTDJQUk9YWSkKLSAgICB7Ci0gICAgICAvL1NldCB0aGUgbWFwcGluZ3Mgb24gamF2YVBhcmFtZXRlcgotICAgICAgVGFibGVJdGVtW10gcGFpcnMgPSBtYXBwaW5nc18uZ2V0SXRlbXMoKTsKLSAgCSAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAJICBmb3IgKGludCBpPTA7IGk8cGFpcnMubGVuZ3RoOyBpKyspCi0gIAkgIHsKLSAgCQltYXAucHV0KHBhaXJzW2ldLmdldFRleHQoMCkudHJpbSgpLHBhaXJzW2ldLmdldFRleHQoMSkudHJpbSgpKTsKLSAgCSAgfQotICAJICBqYXZhUGFyYW1ldGVyXy5zZXRNYXBwaW5ncyhtYXApOwotICAJICAKLSAgCSAgLy9TZXQgdGhlIG5hbWVzcGFjZSBvbiB0aGUgamF2YVBhcmFtZXRlcgotICAJICBTdHJpbmcgYmVhbk5hbWUgPSBqYXZhUGFyYW1ldGVyXy5nZXRCZWFuTmFtZSgpOwotCSAgaWYoYmVhbk5hbWUgIT0gbnVsbCAmJiAhYmVhbk5hbWUuZXF1YWxzKCIiKSkKLQkgIHsKLQkJU3RyaW5nIHBhY2thZ2VOYW1lID0gYmVhbk5hbWUuc3Vic3RyaW5nKDAsIGJlYW5OYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCQlpZihtYXAuY29udGFpbnNLZXkocGFja2FnZU5hbWUpKQotCQl7Ci0JCSAgU3RyaW5nIHRucyA9IChTdHJpbmcpbWFwLmdldChwYWNrYWdlTmFtZSk7Ci0JCSAgamF2YVBhcmFtZXRlcl8uc2V0TmFtZXNwYWNlKHRucyk7Ci0JCX0JCQotCSAgfQotCi0gICAgfQotICAgIHJldHVybiBqYXZhUGFyYW1ldGVyXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzUHJveHlXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc1Byb3h5V2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDhiZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzUHJveHlXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzUHJveHlXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQV0pCMDAwMSBmb3IgdGhlIFdTREwgdG8gSmF2YSBCaW5kaW5ncyBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QV0pCX1BBR0UgPSAiUFdKQjAwMDEiOwkvLyROT04tTkxTLTEkCi0JCQotICBwcml2YXRlIENvbWJvIG91dHB1dEZvbGRlckNvbWJvXzsKLSAgLypDT05URVhUX0lEIFBXSkIwMDAzIGZvciB0aGUgRm9sZGVyIGZpZWxkIG9mIHRoZSBXU0RMIHRvIEphdmEgQmluZGluZ3MgUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFdKQl9URVhUX0ZPTERFUiA9ICJQV0pCMDAwMyI7CS8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIEJ1dHRvbiBnZW5Qcm94eUNoZWNrYm94XzsKLSAgLypDT05URVhUX0lEIFBXSkIwMDA5IEluZGljYXRlcyB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgcHJveHkgb3Igbm90LiAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFkgPSAiUFdKQjAwMDkiOwkvLyROT04tTkxTLTEkCi0JCQotICBwcml2YXRlIEJ1dHRvbiBzaG93TWFwcGluZ3NDaGVja2JveF87Ci0gIC8qQ09OVEVYVF9JRCBQV0pCMDAxNiBmb3IgdGhlIFNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9OMlBfU0hPV19NQVBQSU5HUyA9ICJQV0pCMDAxNiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLSAgICBVSVV0aWxzICAgICAgdWlVdGlscyAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWRfICk7Ci0gICAgCi0JcGFyZW50LnNldFRvb2xUaXBUZXh0KCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdKQl9QQUdFICk7Ci0JUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggcGFyZW50LCBwbHVnaW5JZF8gKyAiLiIgKyAgSU5GT1BPUF9QV0pCX1BBR0UpOwotICAgIAotICAgIGdlblByb3h5Q2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkNIRUNLQk9YX0dFTlBST1hZLAotICAgIAkJCQkJCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFkgKTsKLSAgICBnZW5Qcm94eUNoZWNrYm94Xy5hZGRMaXN0ZW5lciggU1dULlNlbGVjdGlvbiwgc3RhdHVzTGlzdGVuZXIgKTsKLSAgICBnZW5Qcm94eUNoZWNrYm94Xy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlR2VuUHJveHkoKTsgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIHRleHRHcm91cCA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDIsIDUsIDAgKTsKLSAgICAKLSAgICBvdXRwdXRGb2xkZXJDb21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKCB0ZXh0R3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRk9MREVSX05BTUUsCi0gICAgCQkJCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXSkJfVEVYVF9GT0xERVIsCi0gICAgCQkJCQkJCQkJSU5GT1BPUF9QV0pCX1RFWFRfRk9MREVSLAotICAgIAkJCQkJCQkJCVNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIAotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94XyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3goIHBhcmVudCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOLAotICAgIAkJCQkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9OMlBfU0hPV19NQVBQSU5HUywKLSAgICAJCQkJCQkJCQlJTkZPUE9QX04yUF9TSE9XX01BUFBJTkdTICk7Ci0gICAgLy8gU2luY2UgdGhpcyB3aWRnZXQgYWZmZWN0cyB3aGV0aGVyIHRoZSBuZXh0IHBhZ2UgaXMgc2hvd24gb3Igbm90IHdlCi0gICAgLy8gbmVlZCB0byBhZGQgdGhlIHN0YXR1c0xpc3RlbmVyLgotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5hZGRMaXN0ZW5lciggU1dULlNlbGVjdGlvbiwgc3RhdHVzTGlzdGVuZXIgKTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUdlblByb3h5KCkKLSAgewotICAgIGJvb2xlYW4gZW5hYmxlZCA9IGdlblByb3h5Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIG91dHB1dEZvbGRlckNvbWJvXy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KQotICB7ICAJCi0gICAgSVBhdGhbXSBwYXRocyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhjbGllbnRQcm9qZWN0KTsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aCA7IGkrKykKLSAgICB7Ci0gICAgICBvdXRwdXRGb2xkZXJDb21ib18uYWRkKHBhdGhzW2ldLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiggcGF0aHMubGVuZ3RoID4gMCApCi0gICAgewotICAgIAlvdXRwdXRGb2xkZXJDb21ib18uc2VsZWN0KDApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPdXRwdXRGb2xkZXIoKQotICB7Ci0gIAlyZXR1cm4gb3V0cHV0Rm9sZGVyQ29tYm9fLmdldFRleHQoKTsKLSAgfQotICAgICAgICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eSggQm9vbGVhbiBnZW5Qcm94eSApCi0gIHsKLSAgICBnZW5Qcm94eUNoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIGdlblByb3h5LmJvb2xlYW5WYWx1ZSgpICk7Ci0gIH0gICAgCi0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2VuUHJveHlDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgKTsKLSAgfSAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0Q3VzdG9taXplQ2xpZW50TWFwcGluZ3MoIGJvb2xlYW4gc2hvd01hcHBpbmdzICkKLSAgewotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIHNob3dNYXBwaW5ncyApOwotICB9ICAgICAgICAgICAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncygpCi0gIHsKLSAgICByZXR1cm4gc2hvd01hcHBpbmdzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpICYmIGdlblByb3h5Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9ICAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRJc0NsaWVudFNjZW5hcmlvKCBib29sZWFuIGlzQ2xpZW50U2NlbmFyaW8gKQotICB7Ci0gICAgZ2VuUHJveHlDaGVja2JveF8uc2V0RW5hYmxlZCggIWlzQ2xpZW50U2NlbmFyaW8gKTsgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2l6YXJkL2NsaWVudC9XZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9jbGllbnQvV2ViU2VydmljZUNsaWVudEF4aXNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkODUxYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2l6YXJkL2NsaWVudC9XZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MjMgICAxNDMyODQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5BeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5EZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkNsaWVudENvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suVmFsaWRhdGVXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNNYXBwaW5nc1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNQcm94eVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi0vKioKLSAgKiBEZXZlbG9wZXJzIHdobyBhcmUgYWRkaW5nIHdlYiBzZXJ2aWNlIGNsaWVudHMgaW50byB0aGUgd2l6YXJkIHNob3VsZCBjcmVhdGUKLSAgKiBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4gIAotKiovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudEF4aXNUeXBlIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcgCi17Ci0KLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLSAgewotICAJLy8gQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kICAJCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzIiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlByb3h5UHJvamVjdEZvbGRlciIsIEF4aXNQcm94eVdpZGdldC5jbGFzcywgIlByb3h5Rm9sZGVyIiwgbnVsbCApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzQ2xpZW50U2NlbmFyaW8iLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIEF4aXNQcm94eVdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIG51bGwpOwotICAgIAotICAgIC8vIEF4aXNQcm94eVdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzUHJveHlXaWRnZXQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzUHJveHlXaWRnZXQuY2xhc3MsICJPdXRwdXRGb2xkZXIiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcyApOwotICAgIAotICAgIC8vQXhpc01hcHBpbmdzV2lkZ2V0Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7IC8vT0sKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7IC8vT0sKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgVmFsaWRhdGVXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgLy9PSwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAvL09LCi0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSAKLSAgewotICAgCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQXhpc0NsaWVudFN0YXJ0IiwgCi0gICAgICAgIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19BWElTX1BST1hZLAotICAgICAgICBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19BWElTX1BST1hZLAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQXhpc1Byb3h5V2lkZ2V0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9ICk7Ci0gICAgCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQXhpc0NsaWVudEJlYW5NYXBwaW5nIiwgCi0gICAgICAgIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19YTUwyUFJPWFksCi0gICAgICAgIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19YTUwyQkVBTiwKLSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEF4aXNNYXBwaW5nc1dpZGdldChBeGlzTWFwcGluZ3NXaWRnZXQuTU9ERV9YTUwyUFJPWFkgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5I2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKSAKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgLy9kZWFkIGNvZGUgLSBkb2Vzbid0IG1hdHRlciB3aGF0IGdldHMgcmV0dXJuZWQgaGVyZS4KLSAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIAotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RiN2U5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93c3J0L0F4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc1Byb3h5V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuV2ViU2VydmljZUNsaWVudEF4aXNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeSBpbXBsZW1lbnRzIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB7Ci0KLQlwcml2YXRlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yICAgICAgICAgICAgIHByb3h5Q29uZmlnV2lkZ2V0XzsKLQlwcml2YXRlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yICAgICAgICAgICAgIG1hcHBpbmdzV2lkZ2V0XzsKLQlwcml2YXRlIEF4aXNQcm94eVdpZGdldCAgICAgICAgICAgICAgICAgICAgIHByb3h5V2lkZ2V0XzsKLQlwcml2YXRlIFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyIGFkYXB0ZXJfOwotCQotCXB1YmxpYyBBeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeSgpCi0JewotCSAgYWRhcHRlcl8gPSBuZXcgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIoIG5ldyBXZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUoKSApOwotCSAgCi0JICBwcm94eUNvbmZpZ1dpZGdldF8gPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzQ2xpZW50U3RhcnQiICk7Ci0JICBwcm94eVdpZGdldF8gICAgICAgPSAoQXhpc1Byb3h5V2lkZ2V0KXByb3h5Q29uZmlnV2lkZ2V0Xy5nZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKS5jcmVhdGUoKTsKLQkgIG1hcHBpbmdzV2lkZ2V0XyAgID0gYWRhcHRlcl8uZ2V0V2lkZ2V0KCAiQXhpc0NsaWVudEJlYW5NYXBwaW5nIiApOwotCX0KLQkKLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotCXsKLQkgIHJldHVybiBwcm94eUNvbmZpZ1dpZGdldF87Ci0JfQotCi0JcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldE5leHROYW1lZFdpZGdldCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0Q29udHJpYnV0b3IpIAotCXsKLQkgIHJldHVybiB3aWRnZXRDb250cmlidXRvciA9PSBwcm94eUNvbmZpZ1dpZGdldF8gJiYgcHJveHlXaWRnZXRfLmdldEN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzKCkgPyBtYXBwaW5nc1dpZGdldF8gOiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0JewotCSAgYWRhcHRlcl8ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeSApOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VDbGllbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY0NTA5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnRJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5BeGlzQ2xpZW50T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkRlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ2xpZW50Q29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkRlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5WYWxpZGF0ZVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LkFic3RyYWN0V2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VDbGllbnQgZXh0ZW5kcyBBYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQKLXsJCQotCi0JcHVibGljIEF4aXNXZWJTZXJ2aWNlQ2xpZW50KFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm8pCi0JewotCQlzdXBlcihpbmZvKTsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsCi0JCQlJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLSAgICBFY2xpcHNlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSAoRWNsaXBzZUVudmlyb25tZW50KWVudjsKLQkJcmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGVudmlyb25tZW50LmdldENvbW1hbmRNYW5hZ2VyKCkuZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkpOwotCQkKLQkJVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCQljb21tYW5kcy5hZGQobmV3IEF4aXNDbGllbnRJbnB1dENvbW1hbmQodGhpcywgY3R4LCBwcm9qZWN0KSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kKCkpOwotLy8JCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkF4aXNDbGllbnRTdGFydCIpKTsKLS8vCQljb21tYW5kcy5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJBeGlzQ2xpZW50QmVhbk1hcHBpbmciKSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZCgpKTsKLS8vCQljb21tYW5kcy5hZGQobmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZCgpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBWYWxpZGF0ZVdTRExDb21tYW5kKCkpOwotCQljb21tYW5kcy5hZGQobmV3IENsaWVudENvZGVHZW5PcGVyYXRpb24oKSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQXhpc0NsaWVudE91dHB1dENvbW1hbmQodGhpcyxjdHgpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBCdWlsZFByb2plY3RDb21tYW5kKCkpOwotCQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpIAotCXsKLQkJLy8gQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudElucHV0Q29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwKLQkJCQluZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlEIiwKLS8vCQkJCW51bGwpOwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsCi0vLwkJCQkiQ2xpZW50UHJvamVjdEVBUiIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudElucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkwiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAvLyBVUkkKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHRvCi0JCS8vIFVSTAotCQkvLyB0cmFuc2Zvcm1lcgotCQkvLyByZXEnZD8/Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RQcm94eVNlbGVjdGVkIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLAotLy8JCQkJIlRlc3RQcm94eVNlbGVjdGVkIiwgbnVsbCk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudElucHV0Q29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlciIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzQ2xpZW50U2NlbmFyaW8iLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnRJbnB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkJLy8gRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZCgpCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuY2xhc3MpOyAvL09LCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSTCIsIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuY2xhc3MsICJXc2RsU2VydmljZVVSTCIsIG51bGwpOyAvL09LCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmNsYXNzKTsgLy9PSyAgICAKLQkJCi0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG51bGwpOwotCi0JCS8vIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kKCkgLy8gamF2YVBhcmFtXywgbW9kZWxfCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MsICJQcm94eVByb2plY3QiLAotCQkJCW51bGwpOwotCQkvLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJMIiwKLQkJLy8gRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MsIldTRExTZXJ2aWNlUGF0aG5hbWUiLG51bGwpOwotCQkvLyAvLwotCQkvLyBVUkwgdG8gVVJMPz8KLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJMIiwgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MsICJXU0RMU2VydmljZVVSTCIsIG51bGwpOyAvLyBVUkkKLQkJLy8gdG8KLQkJLy8gVVJMPz8KLQkJLy8gVmFsaWRhdGVXU0RMQ29tbWFuZCgpCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxTZXJ2aWNlVVJMIiwgVmFsaWRhdGVXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQotCQkvLyBXU0RMMkphdmFDb21tYW5kKCkgLy8gamF2YVBhcmFtXwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJMIiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIldzZGxVUkkiLCBudWxsKTsKLQotCQkvLyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiUHJvamVjdCIsIG51bGwpOwkJCi0JCQotCQkvLyBTdHViMkJlYW5Db21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzLCAiT3V0cHV0Rm9sZGVyIiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcyApOwotCQkKLQkJLy8gQnVpbGRQcm9qZWN0Q29tbWFuZCgpCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRm9yY2VCdWlsZCIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlZhbGlkYXRpb25NYW5hZ2VyIiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JCQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJQcm94eUJlYW4iLCBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIG51bGwpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJQcm94eUVuZHBvaW50IiwgQXhpc0NsaWVudE91dHB1dENvbW1hbmQuY2xhc3MpOwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2V0RW5kcG9pbnRNZXRob2QiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NmQ0OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MjZjMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzcy1heGlzLXVpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZTkzYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNmRkODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNXZWQgU2VwIDI2IDA2OjI4OjI3IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MzYyMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jVGh1IE1heSAzMSAxMzoxMToxNiBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZGJiYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDE6MzAgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA2YjU5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwNi5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2l6YXJkLmJlYW5zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2l6YXJkLndzZGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjUuMCwxLjYuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWZlZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgZGVwbG95LnhzbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2RlcGxveS54c2wgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2RlcGxveS54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGYxNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9kZXBsb3kueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IgotICAgIHhtbG5zOm5zMT0iaHR0cDovL3htbC5hcGFjaGUub3JnL2F4aXMvd3NkZC8iCi0gICAgeG1sbnM6amF2YT0iaHR0cDovL3htbC5hcGFjaGUub3JnL2F4aXMvd3NkZC9wcm92aWRlcnMvamF2YSI+Ci0gICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGVuY29kaW5nPSJVVEYtOCIvPgotICAKLSAgIDx4c2w6cGFyYW0gbmFtZT0ibmV3Q2xhc3NOYW1lIiBzZWxlY3Q9InNzIi8+Ci0gICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvbnMxOmRlcGxveW1lbnQvbnMxOnNlcnZpY2UvbnMxOnBhcmFtZXRlcltAbmFtZT0nY2xhc3NOYW1lJ10iPgotICAgIDx4c2w6Y29weT4KLSAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5jbGFzc05hbWU8L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgCSA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+IAkKLSAgCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuZXdDbGFzc05hbWUiLz4gIAkgCQotICAgICAgIAkgPC94c2w6YXR0cmlidXRlPgotICAgICAgIAk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0gICAgICAgCTwveHNsOmNvcHk+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIj4KLSAgICAJPHhzbDpjb3B5PgotICAgIAkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAKnxub2RlKCkiLz4KLSAgICAJPC94c2w6Y29weT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhYTBiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWJzZXJ2aWNlIEF4aXMgQ3JlYXRpb24gVUkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1MQUJFTF9SVU5USU1FX0FYSVNfMTE9QXBhY2hlIEF4aXMKLURFU0NfUlVOVElNRV9BWElTXzExPUFwYWNoZSBBeGlzCi0KLSMKLSNXU1dTRExBeGlzVHlwZQotIwotV1NfTkFNRV9XU0RMQVhJUz1Ta2VsZXRvbiBKYXZhIGJlYW4gQXhpcyBXZWIgc2VydmljZQotCi0jCi0jV1NCZWFuQXhpc1R5cGUKLSMKLVdTX05BTUVfQkVBTkFYSVM9SmF2YSBiZWFuIEF4aXMgV2ViIHNlcnZpY2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlOWE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLSAgIAotICAgPCEtLSBTZXJ2ZXIgRGVmYXVsdGVycyAtLT4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnNlcnZlckRlZmF1bHRlciI+Ci0gICAgICA8c2VydmVyRGVmYXVsdGVyCi0gICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5BeGlzU2VydmVyRGVmYXVsdGVyIj4KLSAgICAgIDwvc2VydmVyRGVmYXVsdGVyPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53ZWJTZXJ2aWNlUnVudGltZSI+Ci0gIAk8d2ViU2VydmljZVJ1bnRpbWUKLSAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICBsYWJlbD0iJUxBQkVMX1JVTlRJTUVfQVhJU18xMSIKLSAgICBzZXJ2aWNlVHlwZXM9Im9yZy5lY2xpcHNlLmpzdC53cy5zZXJ2aWNlVHlwZS5qYXZhIgotICAgIGNsaWVudFR5cGVzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50VHlwZS5qYXZhLndlYk9ubHkiCi0gICAgc2VydmxldExldmVscz0iMjMgMjQiCi0gICAgajJlZUxldmVscz0iMTMgMTQiCi0gICAgc2VydmVycz0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDAgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDEgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZXJvbmltby4xMCIKLSAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZVJ1bnRpbWUiPgotICAJPC93ZWJTZXJ2aWNlUnVudGltZT4KLQk8L2V4dGVuc2lvbj4gCi0gICAtLT4KLSAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRSZWdpc3RyeSI+Ci0gICAgICAgPHdpZGdldEZhY3RvcnkgICAKLSAgICAgICAgICAgICBpZD0iQXhpc0JlYW5Db25maWciCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkJVQ29uZmlnQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJBeGlzU2tlbGV0b25Db25maWciCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLlREQ29uZmlnQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5Ii8+Ci0gICAgPC9leHRlbnNpb24+IAotICAgIAotICAgIDwhLS0gTTkgZXh0ZW5zaW9ucyAtLT4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucnVudGltZXMiPgotICAgICAgPHJ1bnRpbWUKLSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiCi0gICAgICAgIGxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTXzExIgotICAgICAgICBzZXJ2ZXJSZXF1aXJlZD0iZmFsc2UiLz4KLSAgICA8L2V4dGVuc2lvbj4KLQotICAgIDwhLS0gZGVmaW5lIHN1cHBvcnQgZm9yIEF4aXMgSmF2YSBiZWFuIGJvdHRvbSB1cCBhbmQgdG9wLWRvd24gc3VwcG9ydCBpbiB3ZWIgcHJvamVjdHMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcyI+Ci0gICAgICA8c2VydmljZVJ1bnRpbWUKLSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmphdmEiCi0gICAgICAgIHNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGVJZD0ib3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIgotICAgICAgICBydW50aW1lSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiCi0gICAgICAgIHJ1bnRpbWVDaGVja2VyPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIiCi0gICAgICAgIGJvdHRvbVVwPSJ0cnVlIgotICAgICAgICB0b3BEb3duPSJ0cnVlIgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZVJ1bnRpbWUiPgotCi0gICAgICAgIDxyZXF1aXJlZC1mYWNldC12ZXJzaW9uIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjMiIGFsbG93LW5ld2VyPSJ0cnVlIi8+Ci0KLSAgICAgIDwvc2VydmljZVJ1bnRpbWU+Ci0gICAgPC9leHRlbnNpb24+ICAgCi0KLSAgICA8IS0tIGRlZmluZSBzdXBwb3J0IGZvciBBeGlzIEphdmEgY2xpZW50cyBpbiBKYXZhIHByb2plY3RzIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyI+Ci0gICAgICA8Y2xpZW50UnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uamF2YSIKLSAgICAgICAgY2xpZW50SW1wbGVtZW50YXRpb25UeXBlSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnQudHlwZS5qYXZhIgotICAgICAgICBydW50aW1lSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZSI+Ci0KLSAgICAgICAgPHJlcXVpcmVkLWZhY2V0LXZlcnNpb24gZmFjZXQ9ImpzdC51dGlsaXR5IiB2ZXJzaW9uPSIxLjAiIGFsbG93LW5ld2VyPSJ0cnVlIi8+Ci0KLSAgICAgIDwvY2xpZW50UnVudGltZT4KLSAgICA8L2V4dGVuc2lvbj4gICAgCi0gICAgCi0gICAgPCEtLSBkZWZpbmUgc3VwcG9ydCBmb3IgQXhpcyBKYXZhIGNsaWVudHMgaW4gV2ViIHByb2plY3RzIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyI+Ci0gICAgICA8Y2xpZW50UnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24ud2ViIgotICAgICAgICBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgICAgIHJ1bnRpbWVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VSdW50aW1lIj4KLQotICAgICAgICA8cmVxdWlyZWQtZmFjZXQtdmVyc2lvbiBmYWNldD0ianN0LndlYiIgdmVyc2lvbj0iMi4zIiBhbGxvdy1uZXdlcj0idHJ1ZSIvPgotCi0gICAgICA8L2NsaWVudFJ1bnRpbWU+Ci0gICAgPC9leHRlbnNpb24+ICAgICAgICAKLSAgICAKLSAgICA8IS0tIGV4dGVuZCBXZWJTZXJ2aWNlU2FtcGxlVGVzdCB0byBzdXBwb3J0IHRoZSBBeGlzIGNsaWVudCBydW50aW1lcyAtLT4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkudGVzdGVyIj4KLSAgICAgIDx0ZXN0ZXIKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VTYW1wbGVUZXN0IgotICAgICAgICAgc3VwcG9ydGVkQ2xpZW50UnVudGltZXM9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLndlYiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5qYXZhIj4KLSAgICAgIDwvdGVzdGVyPgotICAgIDwvZXh0ZW5zaW9uPgotICAgIAotICAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ik9iamVjdFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSmF2YU91dHB1dCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJNZXRob2RzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlN0eWxlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlVzZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCi0gICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJKYXZhT3V0cHV0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1ldGhvZHMiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotCQk8bWFwCi0gICAgICAgICAgICAgIGtleT0iU3R5bGUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iVXNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKLSAgPC9leHRlbnNpb24+IAotCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiMGY1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDIxNiAgIDEyNjk4OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDYwMzI5CSAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAgLSBLYXRoeSBDaGFuCi0jIDIwMDYwMzI5CSAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAgLSBLYXRoeSBDaGFuCi0jIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotIwotIyBFcnJvciBtZXNzYWdlcyB1c2VkIGluIHRoaXMgcGx1Z2luCi0jCi1NU0dfRVJST1JfUFJPSkVDVF9VUkw9SVdBQjA1MTRFIFVuYWJsZSB0byBnZXQgVVJMIGZvciBwcm9qZWN0IHswfQotTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU49SVdBQjAwMTVFIEEgSmF2YSBiZWFuIHdhcyBub3Qgc2VsZWN0ZWQKLU1TR19FUlJPUl9OT19QUk9KRUNUPUlXQUIwMDE2RSBBIHByb2plY3Qgd2FzIG5vdCBzZWxlY3RlZAotTVNHX0VSUk9SX0NBTk5PVF9MT0FEX0pBVkFfQkVBTj1JV0FCMDAxN0UgVGhlIEphdmEgYmVhbiwgezB9LCBjYW5ub3QgYmUgbG9hZGVkIGZyb20gezF9Ci1NU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQ9SVdBQjA1MjFFIEZhaWxlZCB0byBhbmFseXplIHRoZSBKYXZhIGJlYW46IHswfS4KLU1TR19FUlJPUl9SRUFEX0JFQU49SVdBQjA1MjJFIEVycm9yIGluIHJlYWRpbmcgbWV0aG9kcyBmcm9tIEphdmEgYmVhbi4KLU1TR19FUlJPUl9VUERBVEVfQVhJU19XU0REPUlXQUIwNTI0RSBFcnJvciB1cGRhdGluZyBBeGlzIGRlcGxveS53c2RkIGZpbGUKLQotIwotI0phdmFUb1dTRExNZXRob2RDb21tYW5kCi0jCi1NU0dfRVJST1JfSkFWQV9UT19NRVRIT0Q9SVdBQjAwMTlFIEVycm9yIGluIGdldHRpbmcgbWV0aG9kIGZyb20gSmF2YSBiZWFuLgotCi0jCi0jVXBkYXRlV0VCWE1MQ29tbWFuZAotIwotTVNHX0VSUk9SX1VQREFURV9XRUJfWE1MPUlXQUIwMDIwRSBFcnJvciBpbiBhZGRpbmcgc2VydmxldCBpbiB3ZWIueG1sLgotCi0jCi0jVXBkYXRlQXhpc1dTRERGaWxlVGFzawotIwotTVNHX1BMVUdJTl9GSUxFX1VSTD1Qcm9ibGVtIGxvY2F0aW5nIHBsdWdpbiBmaWxlCi0KLSMKLSNXZWJTZXJ2aWNlV1NETEF4aXNTZWxlY3Rpb25QYWdlCi0jCi1QQUdFX01TR19OT19GSUxFX1NQRUNJRklFRD1ObyBmaWxlIHNwZWNpZmllZC4KLVBBR0VfTVNHX05PX01FVEhPRF9TRUxFQ1RFRD1ObyBtZXRob2RzIHNlbGVjdGVkLgotCi0jCi0jV2ViU2VydmljZVNrZWxldG9uQXhpc0NvbmZpZ1BhZ2UKLSMKLVRPT0xUSVBfUEJTQ19QQUdFPQotVE9PTFRJUF9QQkNGX1RFWFRfVVJJPVRoZSBTT0FQIGJvZHkgbmFtZXNwYWNlIGFuZCB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgV2ViIHNlcnZpY2UuCi1UT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZPTERFUj1UaGUgZm9sZGVyIG9mIHRoZSBXU0RMIGZpbGUuCi1UT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZJTEU9VGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZS4KLUxBQkVMX1VSST1XZWIgc2VydmljZSBVUkk6Ci1MQUJFTF9PVVRQVVRfRk9MREVSX05BTUU9V1NETCBmb2xkZXI6Ci1MQUJFTF9PVVRQVVRfRklMRV9OQU1FPVdTREwgZmlsZToKLQotIwotI1dlYlNlcnZpY2VBeGlzQmVhbkNsYXNzUGFnZQotIwotUEFHRV9USVRMRV9XU0JFQU5fQ0xBU1M9V2ViIFNlcnZpY2UgSmF2YSBCZWFuIFNlbGVjdGlvbgotUEFHRV9ERVNDX1dTQkVBTl9DTEFTUz1TZWxlY3QgYSBKYXZhIGJlYW4KLUxBQkVMX0VYUExPUkVfTUFQUElOR1NfQkVBTjJYTUw9RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBwYWNrYWdlIHRvIG5hbWVzcGFjZS4KLVRPT0xUSVBfUDJOX1NIT1dfTUFQUElOR1M9RGVmaW5lIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmcgZm9yIGN1c3RvbWl6YXRpb24uCi0KLSMKLSNXZWJTZXJ2aWNlQXhpc0JlYW5Db25maWdQYWdlCi0jCi1UT09MVElQX1BCQ0ZfUEFHRT0KLVRPT0xUSVBfUEJNRV9UUkVFX01FVEhPRFM9SmF2YSBiZWFuIG1ldGhvZHMgdG8gaW5jbHVkZS4KLVBBR0VfVElUTEVfV1NCRUFOX0NPTkZJRz1XZWIgU2VydmljZSBKYXZhIEJlYW4gSWRlbnRpdHkKLVBBR0VfREVTQ19XU0JFQU5fQ09ORklHPUNvbmZpZ3VyZSB0aGUgSmF2YSBiZWFuIGFzIGEgV2ViIHNlcnZpY2UuCi1MQUJFTF9TVFlMRV9VU0U9U3R5bGUgYW5kIHVzZQotU1RZTEVfUlBDX0xJVEVSQUw9ZG9jdW1lbnQvbGl0ZXJhbAotU1RZTEVfRE9DX0xJVEVSQUw9ZG9jdW1lbnQvbGl0ZXJhbCAod3JhcHBlZCkKLVNUWUxFX1JQQ19FTkNPREVEPVJQQy9lbmNvZGVkCi0KLSMKLSMgQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQKLSMKLU1TR19FUlJPUl9DT01QSUxFUl9MRVZFTF9OT1RfQ09NUEFUSUJMRT1UaGUgd29ya2JlbmNoIGlzIHJ1bm5pbmcgb24gSmF2YSBWTSB2ZXJzaW9uIHswfSwgaG93ZXZlciwgdGhlIGNvbXBpbGVyIGNvbXBsaWFuY2UgbGV2ZWwgb2YgXAotdGhlIHByb2plY3QgInsxfSIgaXMgc2V0IHRvIEphdmEgdmVyc2lvbiB7Mn0uICBcCi1HZW5lcmF0aW9uIG9mIGEgV2ViIHNlcnZpY2UgZnJvbSBKYXZhIGNhbm5vdCBwcm9jZWVkIGJlY2F1c2UgdGhlIHRvb2xzIHdpbGwgYmUgdW5hYmxlIHRvIHByb2Nlc3MgdGhlIGNsYXNzIGZpbGUgY29tcGlsZWQgd2l0aGluIHRoZSBwcm9qZWN0LiAgXAotVG8gY29ycmVjdCB0aGUgcHJvYmxlbSwgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOiBcCi1cbjEuIE9wZW4gcHJvamVjdCBwcm9wZXJ0aWVzLCBzZWxlY3QgUHJvamVjdCBGYWNldHMsIGFuZCB1c2UgQWRkL1JlbW92ZSBQcm9qZWN0IEZhY2V0IHRvIGNoYW5nZSBKYXZhIHZlcnNpb24gdG8gezB9IG9yIGxvd2VyLlwKLVxuMi4gUmVzdGFydCB0aGUgd29ya2JlbmNoIG9uIGEgdmVyc2lvbiB7Mn0gSmF2YSBWTS4KLQotIwotIyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZAotIwotTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVD1FcnJvciBpbiBtb2RpZnlpbmcgdGhlIHNvYXA6YWRkcmVzcyBsb2NhdGlvbiBVUkkgZm9yIFdTREwgZmlsZSB7MH0uCi0KLSMKLSMgTWVzc2FnZXMgZm9yIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLSMKLVdTSV9JTkNPTVBMSUFOQ0VfUlBDX0VOQ09ERUQ9UlBDIEVuY29kZWQgaXMgc2VsZWN0ZWQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDM3ZWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL0F4aXNDcmVhdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyOQkgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gIC0gS2F0aHkgQ2hhbgotICogMjAwNjAzMjkJIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA3ICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfVVJMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9OT19QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfTE9BRF9KQVZBX0JFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfTU9GX1JFRkxFQ1RfRkFJTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRUFEX0JFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VQREFURV9BWElTX1dTREQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfVE9fTUVUSE9EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VUERBVEVfV0VCX1hNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUExVR0lOX0ZJTEVfVVJMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX05PX0ZJTEVfU1BFQ0lGSUVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX05PX01FVEhPRF9TRUxFQ1RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCU0NfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfVEVYVF9VUkk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNGX1RFWFRfV1NETF9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNGX1RFWFRfV1NETF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9PVVRQVVRfRk9MREVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfT1VUUFVUX0ZJTEVfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTQkVBTl9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NCRUFOX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0VYUExPUkVfTUFQUElOR1NfQkVBTjJYTUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QMk5fU0hPV19NQVBQSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCTUVfVFJFRV9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NCRUFOX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NCRUFOX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVFlMRV9VU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RZTEVfUlBDX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RZTEVfRE9DX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RZTEVfUlBDX0VOQ09ERUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NPTVBJTEVSX0xFVkVMX05PVF9DT01QQVRJQkxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NT0RJRllfRU5EUE9JTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX0lOQ09NUExJQU5DRV9SUENfRU5DT0RFRDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzNjNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHNlcnZpY2UgYmVhbiBpcyBub3QgYXQgYSBjb21waWxlciBjb21wbGlhbmNlIHNldHRpbmcKLSAqIHRoYXQncyBoaWdoZXIgdGhhbiB0aGUgSmF2YSBWTSB0aGUgd29ya2JlbmNoIGlzIGxhdW5jaGVkIHdpdGguIAotICovCi1wdWJsaWMgY2xhc3MgQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJQcm9qZWN0XzsKLQotCS8qKgotCSAqIERlZmF1bHQgQ1RPUgotCSAqLwotCXB1YmxpYyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZCgpIHsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuSVVuZG9hYmxlT3BlcmF0aW9uI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IsIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlKQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCQkKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlTdHJpbmcgamF2YVNwZWNWZXJzaW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbiIpOwotCQlpZiAoamF2YVNwZWNWZXJzaW9uICE9IG51bGwpCi0JCXsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmVyUHJvamVjdF8pOwotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOyAgICAKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyBwcm9qZWN0Q29tcGlsZXJMZXZlbCA9IGphdmFQcm9qZWN0LmdldE9wdGlvbigib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZSIsIGZhbHNlKTsKLQkJCQlpZiAocHJvamVjdENvbXBpbGVyTGV2ZWwgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCXByb2plY3RDb21waWxlckxldmVsID0gKFN0cmluZylKYXZhQ29yZS5nZXREZWZhdWx0T3B0aW9ucygpLmdldCgib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZSIpOwotCQkJCX0KLQkJCQlpZiAocHJvamVjdENvbXBpbGVyTGV2ZWwgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWlmICghY29tcGlsZXJMZXZlbHNDb21wYXRpYmxlKGphdmFTcGVjVmVyc2lvbiwgcHJvamVjdENvbXBpbGVyTGV2ZWwpKSB7Ci0JCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ09NUElMRVJfTEVWRUxfTk9UX0NPTVBBVElCTEUsIG5ldyBTdHJpbmdbXSB7amF2YVNwZWNWZXJzaW9uLCBzZXJ2ZXJQcm9qZWN0XywgcHJvamVjdENvbXBpbGVyTGV2ZWx9KSk7Ci0JCQkJCQlnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQl9CQkJCi0JCQkJfSAJCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIEphdmEgc3BlY2lmaWNhdGlvbiBsZXZlbAotCSAqIG9mIHRoZSBFY2xpcHNlIEpSRSAoPGNvZGU+amF2YVNwZWNWZXJzaW9uPC9jb2RlPiBpcyBub3QKLQkgKiBsb3dlciB0aGFuIHRoZSBKYXZhIHNwZWNpZmljYXRpb24gbGV2ZWwgb2YgdGhlIGNvbXBpbGVyCi0JICogKDxjb2RlPnByb2plY3RDb21waWxlckxldmVsPC9jb2RlPi4gCi0JICogQHBhcmFtIGphdmFTcGVjVmVyc2lvbiBUaGUgSmF2YSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gb2YgdGhlIEpSRS4KLQkgKiBAcGFyYW0gcHJvamVjdENvbXBpbGVyTGV2ZWwgVGhlIEphdmEgcHJvamVjdCdzIGNvbXBpbGVyIGxldmVsLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgSmF2YSBzcGVjaWZpY2F0aW9uIGxldmVsIG9mIHRoZSBwcm9qZWN0J3MKLQkgKiBjb21waWxlciBkb2VzIG5vdCBleGNlZWQgdGhlIEphdmEgc3BlY2lmaWNhdGlvbiBsZXZlbCBvZiB0aGUKLQkgKiBKUkUgdGhhdCBFY2xpcHNlIGlzIHJ1bm5pbmcgb24sIGFuZCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNvbXBpbGVyTGV2ZWxzQ29tcGF0aWJsZShTdHJpbmcgamF2YVNwZWNWZXJzaW9uLCBTdHJpbmcgcHJvamVjdENvbXBpbGVyTGV2ZWwpIHsKLQkJcmV0dXJuIChqYXZhU3BlY1ZlcnNpb24uY29tcGFyZVRvKHByb2plY3RDb21waWxlckxldmVsKSA+PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBwcm9qZWN0IHdob3NlIGNvbXBpbGVyIGxldmVsIHNob3VsZCBiZSBjaGVja2VkLgotCSAqIEBwYXJhbSBzZXJ2ZXJQcm9qZWN0IFRoZSBwcm9qZWN0IHdob3NlIGNvbXBpbGVyIGxldmVsIHNob3VsZCBiZSBjaGVja2VkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpIHsKLQkJc2VydmVyUHJvamVjdF8gPSBzZXJ2ZXJQcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc091dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc091dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZGEzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgQXhpc1dlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0KLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzZGxVUklfOwotCSAgCSAgCi0JCS8qKgotCQkqIERlZmF1bHQgQ1RPUgotCQkqLwotCQlwdWJsaWMgQXhpc091dHB1dENvbW1hbmQoKSB7Ci0JCX0KLQkJCi0JCXB1YmxpYyBBeGlzT3V0cHV0Q29tbWFuZChBeGlzV2ViU2VydmljZSB3cykgewotCQkJd3NfID0gd3M7Ci0JCX0KLQkJCi0JCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQkJewotCQkgIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAJCi0JCSAgCXdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLnNldFdzZGxVUkwod3NkbFVSSV8pOwotCQkJQXhpc1dlYlNlcnZpY2VJbmZvIGF4aXNXU0luZm8gPSBuZXcgQXhpc1dlYlNlcnZpY2VJbmZvKCk7Ci0JCQlheGlzV1NJbmZvLnNldEphdmFXU0RMUGFyYW1ldGVyKGphdmFXU0RMUGFyYW1fKTsKLQkJCXdzXy5zZXRBeGlzV2ViU2VydmljZUluZm8oYXhpc1dTSW5mbyk7CQkgICAgCi0JCSAgCQotCQkgIAlyZXR1cm4gc3RhdHVzOyAgICAgIAkKLQkJICB9Ci0KLQkJICAvKioKLQkJICAgKiBAcGFyYW0gd3NkbFVSSQotCQkgICAqICAgICAgICAgICAgVGhlIHdzZGxVUkkgdG8gc2V0LgotCQkgICAqLwotCQkgIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0JCSAgewotCQkgICAgd3NkbFVSSV8gPSB3c2RsVVJJOwotCQkgIH0KLQotCQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtIChKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXykgewotCQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW1fOwotCQl9Ci0JCSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNSdW5JbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1J1bklucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY3NDgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1J1bklucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQXhpc1J1bklucHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uewotCQotCXByaXZhdGUgQXhpc1dlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOyAKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWRfOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotCQotCXB1YmxpYyBBeGlzUnVuSW5wdXRDb21tYW5kKCkgewotCX0KLQkKLQlwdWJsaWMgQXhpc1J1bklucHV0Q29tbWFuZChBeGlzV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJd3NfID0gd3M7Ci0JCXNlcnZlclByb2plY3RfID0gcHJvamVjdDsgCi0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JIAlqYXZhV1NETFBhcmFtXyA9IHdzXy5nZXRBeGlzV2ViU2VydmljZUluZm8oKS5nZXRKYXZhV1NETFBhcmFtZXRlcigpOwotCSAJc2VydmVySW5zdGFuY2VJZF8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JIAlzZXJ2ZXJGYWN0b3J5SWRfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JIAl3c2RsVVJJXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFdzZGxVUkwoKTsKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCQotCSAvKioKLQkgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyUHJvamVjdC4KLQkgICAqLwotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkgIHsKLQkJICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0JICB9Ci0JICAKLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW1fOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpIHsKLQkJcmV0dXJuIHNlcnZlckluc3RhbmNlSWRfOwotCX0JCi0JCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWRfOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpIHsKLQkJcmV0dXJuIHdzZGxVUklfOwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNTZXJ2ZXJEZWZhdWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1NlcnZlckRlZmF1bHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzc4YjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1NlcnZlckRlZmF1bHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLklTZXJ2ZXJEZWZhdWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5TZXJ2ZXJJbmZvOwotCi0KLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2ZXJEZWZhdWx0ZXIgaW1wbGVtZW50cyBJU2VydmVyRGVmYXVsdGVyCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLklTZXJ2ZXJEZWZhdWx0ZXIjcmVjb21tZW5kRGVmYXVsdFNlcnZlcihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkKLSAgICovCi0gIHB1YmxpYyBTZXJ2ZXJJbmZvIHJlY29tbWVuZERlZmF1bHRTZXJ2ZXIoSVByb2plY3QgcHJvamVjdCkKLSAgeyAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUF4aXNJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQlVBeGlzSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTNlMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUF4aXNJbnB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotCi1wdWJsaWMgY2xhc3MgQlVBeGlzSW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3RfOyAKLQlwcml2YXRlIFN0cmluZyBqYXZhQmVhbk5hbWVfOwotCi0JICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkgIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfID0gbnVsbDsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEJVQXhpc0lucHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIEJVQXhpc0lucHV0Q29tbWFuZChJV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzXyA9IHdzOwotCQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OyAKLQkJfQotCQkKLQkJcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCQl7Ci0JICAgICAgIAotCQlTdHJpbmcgc2VydmVySW5zdGFuY2VJZCA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpOwotCQlqYXZhQmVhbk5hbWVfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0SW1wbFVSTCgpOwotCQkKLQkJLy8gVGhlIGZvbGxvd2luZyAiaWYiIGJsb2NrIGRyaXZlcyB2YWxpZGF0aW9uIG9mIHRoZSBnaXZlbgotCQkvLyBKYXZhIHNlcnZpY2UgY2xhc3MgKGphdmFCZWFuTmFtZV8pIGFnYWluc3QgSkFYLVJQQyBpZiB0aGUKLQkJLy8gSkFYLVJQQyB2YWxpZGF0aW9uIHByZWZlcmVuY2UgaXMgc3dpdGNoZWQgb24uCi0JCS8vIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgSkFYLVJQQyBhbmFseXplciByZXR1cm5zIHdhcm5pbmdzCi0JCS8vIGZvciB2aW9sYXRpb25zIG9mIHRoZSBKQVgtUlBDIHNwZWMsIGFuZCBlcnJvcnMgb25seSBpZgotCQkvLyBhY3R1YWwgSkRUIG1vZGVsIG5hdmlnYXRpb24gZmFpbHMgZHVlIHRvIGJhZCBjbGFzc3BhdGhzLgotCQkvLyBUaGlzIGFsbG93cyB1c2VycyB0aGUgY2hvaWNlIG9mIGhlZWRpbmcgb3IgaWdub3JpbmcgdGhlCi0JCS8vIG1lc3NhZ2VzIHJldHVybmVkIGJ5IHRoZSBhbmFseXplci4KLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQlpZiAoamF2YUJlYW5OYW1lXyAhPSBudWxsICYmIGNvbnRleHQuaXNWYWxpZGF0ZUFnYWluc3RKQVhSUENFbmFibGVkKCkpCi0JCXsKLQkJCUpBWFJQQ1dlYlNlcnZpY2VBbmFseXplciBhbmFseXplciA9IG5ldyBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIoKTsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmVyUHJvamVjdF8pOyAKLQkJCWlmIChwcm9qZWN0ICE9IG51bGwpCi0JCQl7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSBhbmFseXplci5hbmFseXplKHByb2plY3QsamF2YUJlYW5OYW1lXyxtb25pdG9yKTsKLQkJCQlpZiAoIXN0YXR1cy5pc09LKCkpCi0JCQkJewotCQkJCQl0cnkKLQkJCQkJewotCQkJCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChTdGF0dXNFeGNlcHRpb24gZSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlpZiAoc2VydmVySW5zdGFuY2VJZCAhPSBudWxsKSB7IC8vIHNlcnZlciBleGlzdHMKLQkgICAgCXNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCQlpZiAoc2VydmljZUV4aXN0aW5nU2VydmVyXyAhPSBudWxsKQotCQkgICAgewotCQkgICAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JCSAgICB9Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JICAgIAlzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZlckZhY3RvcnlJZDsKLQkgICAgfQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JICAKLQkJLyoqCi0JCSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJQcm9qZWN0LgotCQkgICAqLwotCQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUHJvamVjdCgpCi0JCSAgewotCQkJICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0JCSAgfQotCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlU2VydmVyVHlwZUlEKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRF87Ci0JCSAgfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0SmF2YUJlYW5OYW1lKCkgewotCQkJcmV0dXJuIGphdmFCZWFuTmFtZV87Ci0JCX0KLQkJCi0JCXB1YmxpYyBJU2VydmVyIGdldFNlcnZpY2VFeGlzdGluZ1NlcnZlcigpCi0JCSAgewotCQkgICAgcmV0dXJuIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0JCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUNvZGVHZW5PcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQlVDb2RlR2VuT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZTIyNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUNvZGVHZW5PcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAKLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjMyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5KYXZhMldTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5XU0RMMkphdmFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ29weUF4aXNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suVXBkYXRlQXhpc1dTRERGaWxlVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQlVDb2RlR2VuT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JLy8gQ29weUF4aXNKYXJDb21tYW5kCi0JcHJpdmF0ZSBDb3B5QXhpc0phckNvbW1hbmQgY29weUF4aXNKYXJDb21tYW5kID0gbnVsbDsKLQkKLQkvLyBKYXZhMldTRExDb21tYW5kCi0JcHJpdmF0ZSBKYXZhMldTRExDb21tYW5kIGphdmEyV1NETENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsgIAotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7IAotCQotCS8vIHdzZGwySmF2YUNvbW1hbmQKLQlwcml2YXRlIFdTREwySmF2YUNvbW1hbmQgd3NkbDJKYXZhQ29tbWFuZCA9IG51bGw7Ci0JCQotCS8vIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sKLQlwcml2YXRlIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sgdXBkYXRlQXhpc1dzZGRDb21tYW5kID0gbnVsbDsKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0OwotCQotCS8vIFVwZGF0ZVdFQlhNTENvbW1hbmQKLQlwcml2YXRlIFVwZGF0ZVdFQlhNTENvbW1hbmQgdXBkYXRlV2ViWE1MQ29tbWFuZCA9IG51bGw7Ci0JCi0JLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JcHJpdmF0ZSBSZWZyZXNoUHJvamVjdENvbW1hbmQgcmVmcmVzaFByb2plY3RDb21tYW5kID0gbnVsbDsKLQotCS8qKgotCSAqIFRoaXMgY29tbWFuZCBydW5zIHRoZSBjb21tYW5kcyBpbiB0aGUgY29uc3RydWN0b3IgaW4gYSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24uCi0JICogVGhlIGNvbW1hbmRzIGFyZSBsaXN0ZWQgYWJvdmUsIGFsb25nIHdpdGggdGhlaXIgcmVsZXZhbnQgZGF0YSByZWdpc3RyeSBwYXJhbWV0ZXJzIAotCSAqIEBwYXJhbSBqYXZhMldTREwKLQkgKiBAcGFyYW0gd3NkbDJKYXZhCi0JICogQHBhcmFtIHVwZGF0ZUF4aXNXc2RkCi0JICogQHBhcmFtIHVwZGF0ZVdlYlhNTAotCSAqLwotCXB1YmxpYyBCVUNvZGVHZW5PcGVyYXRpb24oKXsKLQkJY29weUF4aXNKYXJDb21tYW5kID0gbmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpOwotCQlqYXZhMldTRExDb21tYW5kID0gbmV3IEphdmEyV1NETENvbW1hbmQoKTsKLQkJd3NkbDJKYXZhQ29tbWFuZCA9IG5ldyBXU0RMMkphdmFDb21tYW5kKCk7Ci0JCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZCA9IG5ldyBVcGRhdGVBeGlzV1NEREZpbGVUYXNrKCk7Ci0JCXVwZGF0ZVdlYlhNTENvbW1hbmQgPSBuZXcgVXBkYXRlV0VCWE1MQ29tbWFuZCgpOwotCQlyZWZyZXNoUHJvamVjdENvbW1hbmQgPSBuZXcgUmVmcmVzaFByb2plY3RDb21tYW5kKCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgewotCi0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlCb3R0b21VcFdTTW9kaWZ5T3BlcmF0aW9uIGJ1T3BlcmF0aW9uID0gbmV3IEJvdHRvbVVwV1NNb2RpZnlPcGVyYXRpb24oaW5mbywgZW52KTsKLQkJdHJ5IHsKLQkJCWJ1T3BlcmF0aW9uLmV4ZWN1dGUobW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IGNlLmdldFN0YXR1cygpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCX0KLQotCXByaXZhdGUgY2xhc3MgQm90dG9tVXBXU01vZGlmeU9wZXJhdGlvbiBleHRlbmRzIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiB7Ci0JCQotCQkgIHByaXZhdGUgSUFkYXB0YWJsZSBpbmZvID0gbnVsbDsKLQkJICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnYgPSBudWxsOwotCi0JCSAgCi0JCSAgcHJvdGVjdGVkIEJvdHRvbVVwV1NNb2RpZnlPcGVyYXRpb24oSUFkYXB0YWJsZSBhZGFwdGFibGUsIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCl7Ci0JCQkgIGluZm8gPSBhZGFwdGFibGU7Ci0JCQkgIGVudiA9IGVudmlyb25tZW50OwotCQkgIH0KLQkJICAKLQkJICBwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb257Ci0JCSAgCi0JCQkgICAgSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQkJICAKLQkJCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkJCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ci0JCQkgICAgc3RhdHVzID0gY29weUF4aXNKYXJDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCQkgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkgICAgfQotCQkJICAgIAotCQkJICAJLy8gSmF2YTJXU0RMQ29tbWFuZAotCQkJCWphdmEyV1NETENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQlqYXZhMldTRExDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQkJc3RhdHVzID0gamF2YTJXU0RMQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJd3NkbFVSSSA9IGphdmEyV1NETENvbW1hbmQuZ2V0V3NkbFVSSSgpOwotCQkJCQotCQkJCS8vIFdTREwySmF2YUNvbW1hbmQKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXN0YXR1cyA9IHdzZGwySmF2YUNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCQkJCWphdmFXU0RMUGFyYW0gPSB3c2RsMkphdmFDb21tYW5kLmdldEphdmFXU0RMUGFyYW0oKTsKLQkJCQkKLQkJCQkvLyBVcGRhdGVBeGlzV3NkZENvbW1hbmQKLQkJCQl1cGRhdGVBeGlzV3NkZENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl1cGRhdGVBeGlzV3NkZENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCQl1cGRhdGVBeGlzV3NkZENvbW1hbmQuc2V0U2VydmljZVByb2plY3Qoc2VydmljZVByb2plY3QpOwotCQkJCXN0YXR1cyA9IHVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJamF2YVdTRExQYXJhbSA9IHVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5nZXRKYXZhV1NETFBhcmFtKCk7Ci0JCQkJCi0JCQkJLy8gVXBkYXRlV2ViWE1MQ29tbWFuZAotCQkJCXVwZGF0ZVdlYlhNTENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldFNlcnZlclByb2plY3Qoc2VydmljZVByb2plY3QpOwotCQkJCXN0YXR1cyA9IHVwZGF0ZVdlYlhNTENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCQkJCQotCQkJCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZAotCQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KTsKLQkJCQlzdGF0dXMgPSByZWZyZXNoUHJvamVjdENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCi0JCQkgIAotCQkgIH0KLQkJCi0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSTsKLQl9Ci0JCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JCXRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0NvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWZlODQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDEzMDc1NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEyMjEgICAxNjg3ODcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwODE1ICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLklNb2R1bGVQdWJsaXNoSGVscGVyOwotCi0vKioKLSAqIAotICogVGhpcyBjb21tYW5kIGNvcGllcyB0aGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgdG8gaXQncyBwcm9wZXIgbG9jYXRpb24gaW4gdGhlIG1vZHVsZS4KLSAqIAotICovCi0KLXB1YmxpYyBjbGFzcyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXRUJfSU5GID0gIldFQi1JTkYiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9DT05GSUcgPSAic2VydmVyLWNvbmZpZy53c2RkIjsKLSAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgRUFSUHJvamVjdE5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLgotICogQHBhcmFtIFN0cmluZyBkZXNjcmlwdGlvbgotICogQHBhcmFtIFN0cmluZyBuYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQoIFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGVhclByb2plY3ROYW1lICkKLSAgeyAKLSAgICBwcm9qZWN0TmFtZV8gICA9IHByb2plY3ROYW1lOwotICAgIEVBUlByb2plY3ROYW1lXyAgID0gZWFyUHJvamVjdE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAKLQkgIEZpbGVJbnB1dFN0cmVhbSBmaW5TdHJlYW0gPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQoIHByb2plY3ROYW1lXyApOwotCQkgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBzZXJ2ZXJJbnN0YW5jZUlkXyApOwotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWVfKTsKLQkJICBJTW9kdWxlIHByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZShwcm9qZWN0KTsKLQkJICAKLQkJICBpZiAoc2VydmVyICE9IG51bGwgJiYgY29tcG9uZW50ICE9IG51bGwgJiYgcHJvamVjdE1vZHVsZSAhPSBudWxsKSB7Ci0JCQkgIElNb2R1bGVQdWJsaXNoSGVscGVyIHB1Ymxpc2hIZWxwZXIgPSAoSU1vZHVsZVB1Ymxpc2hIZWxwZXIpIAotCQkJICAJc2VydmVyLmxvYWRBZGFwdGVyKElNb2R1bGVQdWJsaXNoSGVscGVyLmNsYXNzLCBtb25pdG9yKTsKLQkJCSAgaWYgKHB1Ymxpc2hIZWxwZXIgIT0gbnVsbCkgewotCQkJCSAgSU1vZHVsZVtdIHNlcnZlck1vZHVsZXM7Ci0JCQkJICBpZiAoRUFSUHJvamVjdE5hbWVfID09IG51bGwpIHsKLQkJCQkJICBzZXJ2ZXJNb2R1bGVzID0gbmV3IElNb2R1bGUgW10ge3Byb2plY3RNb2R1bGV9OwotCQkJCSAgfSBlbHNlIHsKLQkJCQkJICBJUHJvamVjdCBFQVJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KEVBUlByb2plY3ROYW1lXyk7Ci0JCQkJCSAgSU1vZHVsZSBFQVJQcm9qZWN0TW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUoRUFSUHJvamVjdCk7Ci0JCQkJCSAgc2VydmVyTW9kdWxlcyA9IG5ldyBJTW9kdWxlIFtdIHtFQVJQcm9qZWN0TW9kdWxlLCBwcm9qZWN0TW9kdWxlfTsKLQkJCQkgIH0KLQkJCQkgIElQYXRoIHB1Ymxpc2hEaXJQYXRoID0gcHVibGlzaEhlbHBlci5nZXRQdWJsaXNoRGlyZWN0b3J5KHNlcnZlck1vZHVsZXMpOwotCQkJCSAgCi0JCQkJICBpZiAocHVibGlzaERpclBhdGggIT0gbnVsbCkgewotCQkJCQkgIElWaXJ0dWFsRm9sZGVyIHJvb3RGb2xkZXIgPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpOwotCQkJCQkgIElQYXRoIHJvb3RGb2xkZXJQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShyb290Rm9sZGVyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpKS5nZXRMb2NhdGlvbigpOwotCQkJCQkgIGlmIChyb290Rm9sZGVyUGF0aCAhPSBudWxsKSB7Ci0JCQkJCQkgIEZpbGUgcm9vdEZvbGRlckZpbGUgPSByb290Rm9sZGVyUGF0aC50b0ZpbGUoKTsKLQkJCQkJCSAgRmlsZSBwdWJsaXNoRGlyRmlsZSA9IHB1Ymxpc2hEaXJQYXRoLnRvRmlsZSgpOwotCQkJCQkJICBpZiAoIXJvb3RGb2xkZXJGaWxlLmVxdWFscyhwdWJsaXNoRGlyRmlsZSkpIHsKLQkJCQkJCQkgIC8vIGNvcHkgdGhlIHNlcnZlci1jb25maWcud3NkZCBpZiB0aGUgcHVibGlzaCBkaXJlY3RvcnkgaXMgbm90IGluIHRoZSBzYW1lIGFzIHRoZSBwcm9qZWN0IHJvb3QgZm9sZGVyCi0JCQkJCQkJICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoIFdFQl9JTkYgKS5hcHBlbmQoIFNFUlZFUl9DT05GSUcgKTsKLQkJCQkJCQkgIElQYXRoIHNlcnZlckNvbmZpZ1BhdGggPSBwdWJsaXNoRGlyUGF0aC5hcHBlbmQocGF0aCk7Ci0JCQkJCQkJICBpZiAoc2VydmVyQ29uZmlnUGF0aCAhPSBudWxsKSB7CQkJICAKLQkJCQkJCQkJICBJVmlydHVhbEZpbGUgbmV3TG9jYXRpb24gPSByb290Rm9sZGVyLmdldEZpbGUocGF0aCk7Ci0JCQkJCQkJCSAgSVBhdGggdGFyZ2V0UGF0aCA9IG5ld0xvY2F0aW9uLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkJCQkJCQkgIGlmICh0YXJnZXRQYXRoICE9IG51bGwpIHsKLQkJCQkJCQkJCSAgZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzZXJ2ZXJDb25maWdQYXRoLnRvU3RyaW5nKCkpOwotCQkJCQkJCQkJICBpZiAoZmluU3RyZWFtICE9IG51bGwpIAotCQkJCQkJCQkJICB7Ci0JCQkJCQkJCQkJICBJU3RhdHVzSGFuZGxlciAgc3RhdHVzSGFuZGxlciA9IGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKTsKLQkJCQkJCQkJCSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCllbnZpcm9ubWVudCkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JCQkJCQkJCQkgICAgCi0JCQkJCQkJCQkJICBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsICAKLQkJCQkJCQkJCQkJCSAgdGFyZ2V0UGF0aCwKLQkJCQkJCQkJCQkJCSAgZmluU3RyZWFtLAotCQkJCQkJCQkJCQkJICBtb25pdG9yLAotCQkJCQkJCQkJCQkJICBzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQkJCQkgIGZpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCQkJICB9Ci0JCQkJCQkJCSAgfQotCQkJCQkJCSAgfQotCQkJCQkJICB9Ci0JCQkJCSAgfQotCQkJCSAgfSAgCi0JCQkgIH0gCSAgCQkgIAotCQkgIH0JICAKLQkgIH0KLQkgIGNhdGNoKCBUaHJvd2FibGUgZSApCi0JICB7Ci0JCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9NT1ZFX1JFU09VUkNFLCBuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICB9IGZpbmFsbHkgewotCQkgIGlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJICB0cnkgewotCQkJCSAgZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCSAgfQotCQkgIH0JCQkKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHN0YXR1czsKLQkgIAotICB9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKSB7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZF8gPSBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzNDE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0phdmFUb1dTRExNZXRob2RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIEphdmFUb1dTRExNZXRob2RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpBVkFfRVhURU5TSU9OID0gIi5qYXZhIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBDTEFTU19FWFRFTlNJT04gPSAiLmNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBIYXNodGFibGUgZk1ldGhvZE5hbWVzOwotCXByaXZhdGUgU3RyaW5nIGZDbGFzc05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZmJlYW5CYXNlTmFtZTsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCi0JLyoqCi0JKiBEZWZhdWx0IENUT1IKLQkqLwotCXB1YmxpYyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgpIHsKLQl9Ci0JLyoqCi0JKiBEZWZhdWx0IENUT1IKLQkqLwotCXB1YmxpYyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgKLQkJSmF2YVdTRExQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciwKLQkJSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJamF2YVdTRExQYXJhbV8gPSBqYXZhUGFyYW1ldGVyOwotCQlzZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLQotCX0KLQotCS8qKgotCSogSmF2YVRvVG9XU0RMTWV0aG9kIGV4ZWN1dGUKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJZmJlYW5CYXNlTmFtZSA9IGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCk7Ci0JCWVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLklORk8sIDUwNzAsIHRoaXMsICJleGVjdXRlIiwgImJlYW5CYXNlTmFtZSA9ICIrZmJlYW5CYXNlTmFtZSk7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQl0cnkgewotCQkJLy9HZXQgdGhlIHF1YWxpZmllZCBiZWFuIG5hbWU7IG15LnBhY2thZ2UuTXlDbGFzcwotCQkJZk1ldGhvZE5hbWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJSGFzaHRhYmxlIG9sZE1ldGhvZHNOYW1lcyA9IGphdmFXU0RMUGFyYW1fLmdldE1ldGhvZHMoKTsKLQkJCVN0cmluZyBxTmFtZSA9IGZiZWFuQmFzZU5hbWU7Ci0KLQkJCWlmIChxTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKEpBVkFfRVhURU5TSU9OKQotCQkJCXx8IHFOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoQ0xBU1NfRVhURU5TSU9OKSkgewotCQkJCXFOYW1lID0gcU5hbWUuc3Vic3RyaW5nKDAsIHFOYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCQkJfQotCi0JCQlKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhxTmFtZSwgc2VydmljZVByb2plY3RfKTsKLQkJCQotCQkJaWYgKCFqYXZhQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKSkgewotCQkJCWVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLkVSUk9SLCA1MDIyLCB0aGlzLCAiZXhlY3V0ZSIsIAotCQkJCQkJTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQsCi0JCQkJCQluZXcgU3RyaW5nW10geyBxTmFtZSB9KSk7Ci0JCQkJCi0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQkJCQlOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX01PRl9SRUZMRUNUX0ZBSUxFRCwKLQkJCQkJbmV3IFN0cmluZ1tdIHsgcU5hbWUgfSkpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCS8vIEdldCB0aGUgcXVhbGlmaWVkIG5hbWUKLQkJCWZDbGFzc05hbWUgPSBqYXZhQ2xhc3MuZ2V0UXVhbGlmaWVkTmFtZSgpOwotCQkJU3RyaW5nIGJlYW5OYW1lOwotCQkJaWYgKGZDbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKSAhPSAtMSkgewotCQkJCWJlYW5OYW1lID0KLQkJCQkJZkNsYXNzTmFtZS5zdWJzdHJpbmcoCi0JCQkJCQlmQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxLAotCQkJCQkJZkNsYXNzTmFtZS5sZW5ndGgoKSk7Ci0JCQl9IGVsc2UKLQkJCQliZWFuTmFtZSA9IGZDbGFzc05hbWU7Ci0KLQkJCS8vIFdhbGsgdGhlIGphdmEgY2xhc3MgYW5kIGdldCB0aGUgbWV0aG9kIG5hbWVzCi0JCQlnYXRoZXJNZXRob2RzKGphdmFDbGFzcywgYmVhbk5hbWUsIG9sZE1ldGhvZHNOYW1lcyk7Ci0JCQkvKgotCQkJSXRlcmF0b3IgbSA9IGphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzRXh0ZW5kZWQoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKG0uaGFzTmV4dCgpKSB7Ci0JCQkJTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpIG0ubmV4dCgpOyAgCi0JCQkJaWYgKCAhIG1ldGhvZC5pc0NvbnN0cnVjdG9yKCkpeyAKLQkJCQlpZiAoIWJlYW5OYW1lLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKQotCQkJCQkmJiAhKGlzRHVwbGljYXRlTWV0aG9kTmFtZShtZXRob2QKLQkJCQkJCS5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpKQotCQkJCQkmJiAhKG1ldGhvZAotCQkJCQkJLmdldENvbnRhaW5pbmdKYXZhQ2xhc3MoKQotCQkJCQkJLmdldEphdmFOYW1lKCkKLQkJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZheC5lamIuRUpCT2JqZWN0IikpCS8vJE5PTi1OTFMtMSQKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdFtdIikpCS8vJE5PTi1OTFMtMSQKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdCIpKQkvLyROT04tTkxTLTEkCi0JCQkJCSYmICEobWV0aG9kCi0JCQkJCQkuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpCi0JCQkJCQkuZ2V0SmF2YU5hbWUoKQotCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5PYmplY3RbXSIpKSkgewkvLyROT04tTkxTLTEkCi0JCQkJCS8vIGFkZCB0aGUgbWV0aG9kIG5hbWUgdG8gb3VyIGxpc3Qgb2YgbWV0aG9kIG5hbWVzCi0JCQkJCVN0cmluZyBtZXRob2ROYW1lID1tZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpOwotCQkgICAgICAgICAgQm9vbGVhbiBpc1NlbGVjdGVkID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgIAkJICBpZiAob2xkTWV0aG9kc05hbWVzICE9IG51bGwgJiYgb2xkTWV0aG9kc05hbWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUpKQotICAgICAgICAgIAkJCWlzU2VsZWN0ZWQgPSAoQm9vbGVhbilvbGRNZXRob2RzTmFtZXMuZ2V0KG1ldGhvZE5hbWUpOwotCQkgICAgICAgICAgZk1ldGhvZE5hbWVzLnB1dChtZXRob2ROYW1lLCBpc1NlbGVjdGVkKTsKLQkJCQl9IAotCQkJCX0KLQkJCX0KLQkJCSovCi0JCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRob2RzKGZNZXRob2ROYW1lcyk7Ci0JCQkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllbnZpcm9ubWVudC5nZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgNTAyMywgdGhpcywgImV4ZWN1dGUiLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9SRUFEX0JFQU4pOwotCQkKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfVE9fTUVUSE9ELCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0KLQotICBwcml2YXRlIHZvaWQgZ2F0aGVyTWV0aG9kcyhKYXZhQ2xhc3MgamF2YUNsYXNzLCBTdHJpbmcgYmVhbk5hbWUsIEhhc2h0YWJsZSBvbGRNZXRob2RzTmFtZXMpCi0gIHsKLSAgICBTdHJpbmcgamF2YU5hbWUgPSBqYXZhQ2xhc3MuZ2V0SmF2YU5hbWUoKTsKLSAgICBpZiAoIWphdmFDbGFzcy5pc0ludGVyZmFjZSgpCi0gICAgICAgICYmICFqYXZhTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZheC5lamIuRUpCT2JqZWN0W10iKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdCIpCi0gICAgICAgICYmICFqYXZhTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZhLmxhbmcuT2JqZWN0W10iKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdCIpKQotICAgIHsKLSAgICAgIExpc3QgcHVibGljTWV0aG9kcyA9IGphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcHVibGljTWV0aG9kcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpdC5uZXh0KCk7Ci0gICAgICAgIGlmICghbWV0aG9kLmlzQ29uc3RydWN0b3IoKQotICAgICAgICAgICAgJiYgIWJlYW5OYW1lLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKQotICAgICAgICAgICAgJiYgIShpc0R1cGxpY2F0ZU1ldGhvZE5hbWUobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gYWRkIHRoZSBtZXRob2QgbmFtZSB0byBvdXIgbGlzdCBvZiBtZXRob2QgbmFtZXMKLSAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCk7Ci0gICAgICAgICAgQm9vbGVhbiBpc1NlbGVjdGVkID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgICAgaWYgKG9sZE1ldGhvZHNOYW1lcyAhPSBudWxsICYmIG9sZE1ldGhvZHNOYW1lcy5jb250YWluc0tleShtZXRob2ROYW1lKSkKLSAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSAoQm9vbGVhbilvbGRNZXRob2RzTmFtZXMuZ2V0KG1ldGhvZE5hbWUpOwotICAgICAgICAgIGZNZXRob2ROYW1lcy5wdXQobWV0aG9kTmFtZSwgaXNTZWxlY3RlZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdhdGhlck1ldGhvZHMoamF2YUNsYXNzLmdldFN1cGVydHlwZSgpLCBiZWFuTmFtZSwgb2xkTWV0aG9kc05hbWVzKTsKLSAgICB9Ci0gIH0KLQkgIAotCS8vUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBtZXRob2QgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgCi0JLy9mTWV0aG9kTmFtZXMgdmVjdG9yLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRldGVjdCBvdmVybG9hZGVkIAotCS8vbWV0aG9kcyBpbiBCZWFucyBhbmQgRUpCcywgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4KLQlwcml2YXRlIGJvb2xlYW4gaXNEdXBsaWNhdGVNZXRob2ROYW1lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCXJldHVybiAoZk1ldGhvZE5hbWVzID09IG51bGwgPyBmYWxzZTogZk1ldGhvZE5hbWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0JewotCSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRmMDI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpICB7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQl0cnkgewotCQkJLy8gdGhlIGNvcnJlY3QgcHJvamVjdCBVUkwgaGFzIGFscmVhZHkgYmVlbiBvYnRhaW5lZCwgbm8gbmVlZCB0byBtb2RpZnkgPHNvYXA6YWRkcmVzcz4gbG9jYXRpb24gVVJJCi0JCQlpZiAoIWphdmFXU0RMUGFyYW0uaXNHdWVzc1Byb2plY3RVUkwoKSkgeyAKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQotCQkJU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwkJCi0KLQkJCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJCWlmKHNlcnZlckluc3RhbmNlSWQhPW51bGwpIHsKLQkJCQlzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCQl9Ci0KLQkJCWlmKHNlcnZlciE9bnVsbCkgewotCQkJCXByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcik7Ci0JCQl9IGVsc2UgewotCQkJCXByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJfQotCi0JCQlpZihwcm9qZWN0VVJMPT1udWxsIHx8IHByb2plY3RVUkwudHJpbSgpLmxlbmd0aCgpPT0wKSB7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9VUkwsIG5ldyBTdHJpbmdbXSB7c2VydmljZVByb2plY3QuZ2V0TmFtZSgpfSkpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKSA9PSBwcm9qZWN0VVJMKSB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9IAotCi0JCQlqYXZhV1NETFBhcmFtLnNldFByb2plY3RVUkwocHJvamVjdFVSTCk7ICAvLyBwcm9qZWN0IFVSTCBuZWVkZWQgZm9yIEF4aXMgZGVwbG95Ci0KLQkJCS8vIG1vZGlmeSB0aGUgPHNvYXA6YWRkcmVzcz4gbG9jYXRpb24gVVJJIHRvIHJlZmxlY3QgdGhlIGNvcnJlY3QgcHJvamVjdCBVUkwKLQkJCWlmKHdzZGxVUkkhPW51bGwpIHsJCQkJCQkJCi0JCQkJYm9vbGVhbiBtb2RpZmllZCA9IGZhbHNlOwkJCQkJCQkKLQkJCQlpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkgewotCQkJCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCQkJCX0KLQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCQlNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0JCQkJZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQkJCQkJU2VydmljZSBzZXIgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0JCQkJCU1hcCBwb3J0cyA9IHNlci5nZXRQb3J0cygpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIGl0MiA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Mi5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlQb3J0IHAgPSAoUG9ydClpdDIubmV4dCgpOwotCQkJCQkJZm9yIChJdGVyYXRvciBpdDMgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0My5oYXNOZXh0KCk7KSB7Ci0JCQkJCQkJT2JqZWN0IG9iaiA9IGl0My5uZXh0KCk7Ci0JCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0JCQkJCQkJCVNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iajsKLQkJCQkJCQkJU3RyaW5nIHdzZGxTb2FwQWRkcmVzcyA9IHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0KLQkJCQkJCQkJLy8gY2hlY2sgaWYgdGhlIFdTREwgU09BUCBhZGRyZXNzIGhhcyB0aGUgcmlnaHQgcHJvamVjdCBVUkwsIGlmIG5vdCwgdXBkYXRlIGl0Ci0JCQkJCQkJCWlmKHdzZGxTb2FwQWRkcmVzcyE9bnVsbCkgewotCQkJCQkJCQkJaWYgKCF3c2RsU29hcEFkZHJlc3Muc3RhcnRzV2l0aChwcm9qZWN0VVJMKSkgewotCQkJCQkJCQkJCS8vIGUuZy4gImh0dHA6Ly90ZW1wdXJpLm9yZy9zZXJ2aWNlcy9TZXJ2aWNlTmFtZSIgYmVjb21lcyAiL3NlcnZpY2VzL1NlcnZpY2VOYW1lIiAKLQkJCQkJCQkJCQlTdHJpbmcgc2VydmljZXNTdHJpbmcgPSB3c2RsU29hcEFkZHJlc3Muc3Vic3RyaW5nKHdzZGxTb2FwQWRkcmVzcy5pbmRleE9mKFNFUlZJQ0VfRVhUKSk7Ci0JCQkJCQkJCQkJc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkocHJvamVjdFVSTCArIHNlcnZpY2VzU3RyaW5nKTsKLQkJCQkJCQkJCQltb2RpZmllZCA9IHRydWU7Ci0JCQkJCQkJCQl9Ci0KLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChtb2RpZmllZCkgewotCQkJCQkvLyB1cGRhdGUgdGhlIFdTREwgZmlsZSBhbmQgcmVmcmVzaCBpbiB3b3Jrc3BhY2UKLQkJCQkJV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0JCQkJCVdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLQkJCQkJT3V0cHV0U3RyZWFtIG9zID0gZW52aXJvbm1lbnQuZ2V0VVJJRmFjdG9yeSgpLm5ld1VSSSh3c2RsVVJJLnRvU3RyaW5nKCkpLmdldE91dHB1dFN0cmVhbSgpOwotCQkJCQl3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBvcyk7Ci0JCQkJCW9zLmNsb3NlKCk7Ci0KLQkJCQkJVVJMIHdzZGxVUkwgPSBuZXcgVVJMICh3c2RsVVJJKTsKLQkJCQkJSVJlc291cmNlIHdzZGxGaWxlID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2VBdExvY2F0aW9uKHdzZGxVUkwuZ2V0UGF0aCgpLCBzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJCWlmICh3c2RsRmlsZSAhPSBudWxsKSB7Ci0JCQkJCQl3c2RsRmlsZS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX1pFUk8sIG1vbml0b3IpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RJRllfRU5EUE9JTlQsIG5ldyBTdHJpbmdbXSB7d3NkbFVSSX0pKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVCwgbmV3IFN0cmluZ1tdIHt3c2RsVVJJfSkpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJZCkgewotCQl0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQl0aGlzLnNlcnZlckZhY3RvcnlJZCA9IHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0ID0gc2VydmljZVByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkgewotCQl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikgewotCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IHBhcnNlcjsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLQl7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotCXsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQXhpc0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9UREF4aXNJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlZDY4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQXhpc0lucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0KLXB1YmxpYyBjbGFzcyBUREF4aXNJbnB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBJV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCi0JICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJTZXJ2ZXJfOwotICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87IAotCSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotCSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0JICBwcml2YXRlIFdlYlNlcnZpY2VJbmZvIHdlYlNlcnZpY2VJbmZvXzsKLQkgIAkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIFREQXhpc0lucHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIFREQXhpc0lucHV0Q29tbWFuZChJV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzXyA9IHdzOwotCQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OwotCQl9Ci0JCQotCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JCXsJICAgIAotCQlzZXJ2ZXJTZXJ2ZXJfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCi0JCVN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCWlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwpIHsgLy8gc2VydmVyIGV4aXN0cwotCSAgICAJc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJbnN0YW5jZUlkKTsKLQkJCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0JCSAgICB7Ci0JCSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgCXNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmVyRmFjdG9yeUlkOwotCSAgICB9Ci0JCQotCQl3c2RsVVJJXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFdzZGxVUkwoKTsKLQkJd2ViU2VydmljZUluZm9fID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCk7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCQkvKioKLQkJICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0JCSAgICovCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkJICB7Ci0JCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkJICB9Ci0KLQkJICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclNlcnZlcigpCi0JCSAgewotCQkgICAgcmV0dXJuIHNlcnZlclNlcnZlcl87Ci0JCSAgfQotICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlclR5cGVJRCgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotICAgICAgICAgIH0gICAgICAgICAgCi0KLQkJcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQkJcmV0dXJuIHdzZGxVUklfOwotCQl9Ci0KLQkJcHVibGljIFdlYlNlcnZpY2VJbmZvIGdldFdlYlNlcnZpY2VJbmZvKCkgewotCQkJcmV0dXJuIHdlYlNlcnZpY2VJbmZvXzsKLQkJfQotCQkKLQkJcHVibGljIElTZXJ2ZXIgZ2V0U2VydmljZUV4aXN0aW5nU2VydmVyKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLQkJICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERDb2RlR2VuT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQ29kZUdlbk9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFiOTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERDb2RlR2VuT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjMyNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5XU0RMMkphdmFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ29weUF4aXNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQmFja3VwU2tlbEltcGxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suU2tlbGV0b24yV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBURENvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQkvLyBDb3B5QXhpc0phckNvbW1hbmQKLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCS8vIEJhY2t1cFNrZWxJbXBsQ29tbWFuZAotCXByaXZhdGUgQmFja3VwU2tlbEltcGxDb21tYW5kIGJhY2t1cFNrZWxJbXBsQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbzsKLQkKLQkvLyBXU0RMMkphdmFDb21tYW5kCi0JcHJpdmF0ZSBXU0RMMkphdmFDb21tYW5kIHdzZGwySmF2YUNvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0JcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotCXByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQkKLQkvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCXByaXZhdGUgU2tlbGV0b24yV1NETENvbW1hbmQgc2tlbGV0b24yV1NETENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEOwotCXByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0JICAKLQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JcHJpdmF0ZSBVcGRhdGVXRUJYTUxDb21tYW5kIHVwZGF0ZVdlYlhNTENvbW1hbmQgPSBudWxsOwotCi0JLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JcHJpdmF0ZSBSZWZyZXNoUHJvamVjdENvbW1hbmQgcmVmcmVzaFByb2plY3RDb21tYW5kID0gbnVsbDsKLQkKLQkvKioKLQkgKiBUaGlzIGNvbW1hbmQgcnVucyB0aGUgY29tbWFuZHMgcGFzc2VkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpbiBhIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbi4KLQkgKiBUaGUgY29tbWFuZHMgYXJlIGxpc3RlZCBhYm92ZSwgd2l0aCBvbmx5IHNvbWUgb2YgdGhlaXIgZGF0YSByZWdpc3RyeSBwYXJhbWV0ZXJzIHNpbmNlIHNvbWUgYXBwZWFyIAotCSAqIHRvIG92ZXJsYXAgdGhlIGNvbW1hbmRzLgotCSAqIEBwYXJhbSBiYWNrdXBTa2VsSW1wbAotCSAqIEBwYXJhbSB3c2RsMkphdmEKLQkgKiBAcGFyYW0gc2tlbGV0b24yV1NETAotCSAqIEBwYXJhbSB1cGRhdGVXZWJYTUwKLQkgKi8KLQlwdWJsaWMgVERDb2RlR2VuT3BlcmF0aW9uKCkgeyAKLQkJY29weUF4aXNKYXJDb21tYW5kID0gbmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpOwotCQliYWNrdXBTa2VsSW1wbENvbW1hbmQgPSBuZXcgQmFja3VwU2tlbEltcGxDb21tYW5kKCk7Ci0JCXdzZGwySmF2YUNvbW1hbmQgPSBuZXcgV1NETDJKYXZhQ29tbWFuZCgpOwotCQlza2VsZXRvbjJXU0RMQ29tbWFuZCA9IG5ldyBTa2VsZXRvbjJXU0RMQ29tbWFuZCgpOwotCQl1cGRhdGVXZWJYTUxDb21tYW5kID0gbmV3IFVwZGF0ZVdFQlhNTENvbW1hbmQoKTsKLQkJcmVmcmVzaFByb2plY3RDb21tYW5kID0gbmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlUb3BEb3duV1NNb2RpZnlPcGVyYXRpb24gdGRPcGVyYXRpb24gPSBuZXcgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uKGluZm8sIGVudik7Ci0JCXRyeSB7Ci0JCQl0ZE9wZXJhdGlvbi5leGVjdXRlKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gY2UpewotCQkJSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCQotCQotCXByaXZhdGUgY2xhc3MgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQotCQlwcml2YXRlIElBZGFwdGFibGUgaW5mbyA9IG51bGw7Ci0JCXByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0JCQotCQlwcm90ZWN0ZWQgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uKElBZGFwdGFibGUgYWRhcHRhYmxlLCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpewotCQkJaW5mbyA9IGFkYXB0YWJsZTsKLQkJCWVudiA9IGVudmlyb25tZW50OwotCQl9Ci0JCQotCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCi0JCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCQkKLQkJICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkJICAgIHN0YXR1cyA9IGNvcHlBeGlzSmFyQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCSAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJICAgIH0KLQkJCQotCQkJLy8gYmFja3VwU2tlbEltcGxDb21tYW5kCi0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCWJhY2t1cFNrZWxJbXBsQ29tbWFuZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCWJhY2t1cFNrZWxJbXBsQ29tbWFuZC5zZXRXZWJTZXJ2aWNlSW5mbyh3ZWJTZXJ2aWNlSW5mbyk7Ci0JCQlzdGF0dXMgPSBiYWNrdXBTa2VsSW1wbENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCi0JCQkvLyB3c2RsMkphdmFDb21tYW5kCi0JCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkKTsKLQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCXN0YXR1cyA9IHdzZGwySmF2YUNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCQkJamF2YVdTRExQYXJhbSA9IHdzZGwySmF2YUNvbW1hbmQuZ2V0SmF2YVdTRExQYXJhbSgpOwotCQkJCi0JCQkvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQlza2VsZXRvbjJXU0RMQ29tbWFuZC5zZXRTZXJ2ZXJQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotCQkJc3RhdHVzID0gc2tlbGV0b24yV1NETENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCQkJd3NkbFVSSSA9IHNrZWxldG9uMldTRExDb21tYW5kLmdldFdzZGxVUkkoKTsKLQkJCi0JCQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldFNlcnZlclByb2plY3Qoc2VydmVyUHJvamVjdCk7Ci0JCQlzdGF0dXMgPSB1cGRhdGVXZWJYTUxDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCQotCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQlyZWZyZXNoUHJvamVjdENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc3RhdHVzID0gcmVmcmVzaFByb2plY3RDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCQotCQl9Ci0JCi0JfQotCi0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlSW5mbyhXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbykgewotCQl0aGlzLndlYlNlcnZpY2VJbmZvID0gd2ViU2VydmljZUluZm87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSTsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHNlcnZlclByb2plY3QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmVyUHJvamVjdCkgewotCSAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLQl9Ci0JCSAgCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpIHsKLQkgIHRoaXMuc2VydmljZVNlcnZlclR5cGVJRCA9IGlkOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2ZXIpIHsKLQkJICB0aGlzLnNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IHNlcnZlcjsKLQkJfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1VwZGF0ZVdFQlhNTENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVXBkYXRlV0VCWE1MQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWZlYTY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVXBkYXRlV0VCWE1MQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTI4ICAgMTg2MDU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuSU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuTW9kZWxQcm92aWRlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0TWFwcGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViYXBwbGljYXRpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuY29yZS5EaXNwbGF5TmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuSmF2YWVlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuVXJsUGF0dGVyblR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlV0VCWE1MQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLQotICBwdWJsaWMgVXBkYXRlV0VCWE1MQ29tbWFuZCggKQotICB7Ci0gIH0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCWlmIChzZXJ2ZXJQcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJCXN0YXR1cyA9IGFkZFNlcnZsZXQoc2VydmVyUHJvamVjdCwgZ2V0QXhpc1NlcnZsZXREZXNjcmlwdG9yKCkpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCQlhZGRTZXJ2bGV0KHNlcnZlclByb2plY3QsIGdldEFkbWludFNlcnZsZXREZXNjcmlwdG9yKCkpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBTZXJ2bGV0RGVzY3JpcHRvciBnZXRBeGlzU2VydmxldERlc2NyaXB0b3IoKSB7Ci0KLQkJU2VydmxldERlc2NyaXB0b3Igc2QgPSBuZXcgU2VydmxldERlc2NyaXB0b3IoKTsKLQkJc2QuX25hbWUgPSAiQXhpc1NlcnZsZXQiOyAvLyROT04tTkxTLTEkCi0JCXNkLl9kaXNwbGF5TmFtZSA9ICJBcGFjaGUtQXhpcyBTZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX21hcHBpbmdzID0gbmV3IFN0cmluZ1tdIHsgIi9zZXJ2bGV0L0F4aXNTZXJ2bGV0IiwgLy8kTk9OLU5MUy0xJAotCQkJCQkJCQkJCSIqLmp3cyIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQkJCQkiL3NlcnZpY2VzLyoiIH07IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIHNkOwotCX0KLQotCXByaXZhdGUgU2VydmxldERlc2NyaXB0b3IgZ2V0QWRtaW50U2VydmxldERlc2NyaXB0b3IoKSB7Ci0JCVNlcnZsZXREZXNjcmlwdG9yIHNkID0gbmV3IFNlcnZsZXREZXNjcmlwdG9yKCk7Ci0JCXNkLl9uYW1lID0gIkFkbWluU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2Rpc3BsYXlOYW1lID0gIkF4aXMgQWRtaW4gU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2NsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmF4aXMudHJhbnNwb3J0Lmh0dHAuQWRtaW5TZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fbWFwcGluZ3MgPSBuZXcgU3RyaW5nW10geyAiL3NlcnZsZXQvQWRtaW5TZXJ2bGV0IiB9OyAvLyROT04tTkxTLTEkCi0JCXNkLl9sb2FkT25TdGFydHVwID0gbmV3IEludGVnZXIoMTAwKTsKLQkJcmV0dXJuIHNkOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBhZGRTZXJ2bGV0KGZpbmFsIElQcm9qZWN0IHdlYlByb2plY3QsIGZpbmFsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yKSB7Ci0JCi0JCXRyeSB7Ci0JCQkKLQkJCWZpbmFsIElNb2RlbFByb3ZpZGVyIHByb3ZpZGVyID0gTW9kZWxQcm92aWRlck1hbmFnZXIuZ2V0TW9kZWxQcm92aWRlcih3ZWJQcm9qZWN0KTsKLQkJCQotCQkJcHJvdmlkZXIubW9kaWZ5KG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCU9iamVjdCBvYmplY3QgPSBwcm92aWRlci5nZXRNb2RlbE9iamVjdCgpOwotCQkJCQlpZiAob2JqZWN0IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViQXBwKSB7Ci0JCQkJCQlvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHAgamF2YWVlV2ViQXBwID0gKG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLldlYkFwcCkgb2JqZWN0OwotCQkJCQkJYWRkSmF2YWVlU2VydmxldCh3ZWJQcm9qZWN0LCBzZXJ2bGV0RGVzY3JpcHRvciwgamF2YWVlV2ViQXBwKTsKLQkJCQkJfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHApIHsKLQkJCQkJCVdlYkFwcCB3ZWJBcHAgPSAoV2ViQXBwKSBvYmplY3Q7Ci0JCQkJCQlhZGRTZXJ2bGV0KHdlYlByb2plY3QsIHNlcnZsZXREZXNjcmlwdG9yLCB3ZWJBcHApOwotCQkJCQl9Ci0JCQkJCQotCQkJCX0KLQkJCX0KLQkJCQksIG51bGwpOwotCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCi0JCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUERBVEVfV0VCX1hNTCwKLQkJCQllKTsKLQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFNlcnZsZXQoSVByb2plY3Qgd2ViUHJvamVjdCwgU2VydmxldERlc2NyaXB0b3Igc2VydmxldERlc2NyaXB0b3IsIFdlYkFwcCB3ZWJhcHApIHsKLQotCQlMaXN0IHRoZVNlcnZsZXRzID0gd2ViYXBwLmdldFNlcnZsZXRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2VydmxldHMuc2l6ZSgpOyBpKyspIHsKLQkJCVNlcnZsZXQgYVNlcnZsZXQgPSAoU2VydmxldCkgdGhlU2VydmxldHMuZ2V0KGkpOwotCQkJaWYgKGFTZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkuZXF1YWxzKHNlcnZsZXREZXNjcmlwdG9yLl9uYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCVdlYmFwcGxpY2F0aW9uRmFjdG9yeSBmYWN0b3J5ID0gV2ViYXBwbGljYXRpb25GYWN0b3J5LmVJTlNUQU5DRTsKLQotCQlTZXJ2bGV0IHNlcnZsZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXQoKTsKLQkJU2VydmxldFR5cGUgc2VydmxldFR5cGUgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRUeXBlKCk7Ci0JCXNlcnZsZXQuc2V0V2ViVHlwZShzZXJ2bGV0VHlwZSk7Ci0JCXNlcnZsZXQuc2V0U2VydmxldE5hbWUoc2VydmxldERlc2NyaXB0b3IuX25hbWUpOwotCQlzZXJ2bGV0VHlwZS5zZXRDbGFzc05hbWUoc2VydmxldERlc2NyaXB0b3IuX2NsYXNzTmFtZSk7Ci0JCWlmKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSAhPSBudWxsKXsKLQkJCXNlcnZsZXQuc2V0RGlzcGxheU5hbWUoc2VydmxldERlc2NyaXB0b3IuX2Rpc3BsYXlOYW1lKTsKLQkJfQotCQlpZihzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCAhPSBudWxsKXsKLQkJCXNlcnZsZXQuc2V0TG9hZE9uU3RhcnR1cChzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCk7Ci0JCX0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyAhPSBudWxsKXsKLQkJCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IHNlcnZsZXQuZ2V0UGFyYW1zQXNQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wZXJ0aWVzLnB1dEFsbChzZXJ2bGV0RGVzY3JpcHRvci5fcGFyYW1zKTsKLQkJfQotCQl3ZWJhcHAuZ2V0U2VydmxldHMoKS5hZGQoc2VydmxldCk7Ci0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzICE9IG51bGwpewotCQkJZm9yKGludCBpPTA7IGk8c2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzLmxlbmd0aDsgaSsrKXsKLQkJCQlTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZyA9IGZhY3RvcnkuY3JlYXRlU2VydmxldE1hcHBpbmcoKTsKLQkJCQlzZXJ2bGV0TWFwcGluZy5zZXRTZXJ2bGV0KHNlcnZsZXQpOwotCQkJCXNlcnZsZXRNYXBwaW5nLnNldFVybFBhdHRlcm4oc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzW2ldKTsKLQkJCQl3ZWJhcHAuZ2V0U2VydmxldE1hcHBpbmdzKCkuYWRkKHNlcnZsZXRNYXBwaW5nKTsJCQkJCQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGRKYXZhZWVTZXJ2bGV0KElQcm9qZWN0IHdlYlByb2plY3QsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yLCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHAgd2ViYXBwKSB7Ci0KLQkJTGlzdCB0aGVTZXJ2bGV0cyA9IHdlYmFwcC5nZXRTZXJ2bGV0cygpOwotCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2VydmxldHMuc2l6ZSgpOyBpKyspIHsKLQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldCBhU2VydmxldCA9IChvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0KSB0aGVTZXJ2bGV0cy5nZXQoaSk7Ci0JCWlmIChhU2VydmxldC5nZXRTZXJ2bGV0TmFtZSgpLmVxdWFscyhzZXJ2bGV0RGVzY3JpcHRvci5fbmFtZSkpIHsKLQkJCXJldHVybjsKLQkJIH0KLQkgICB9Ci0JICAgCi0JICAgV2ViRmFjdG9yeSBmYWN0b3J5ID0gV2ViRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLQkgICBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0IHNlcnZsZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXQoKTsKLQotCSAgIHNlcnZsZXQuc2V0U2VydmxldE5hbWUoc2VydmxldERlc2NyaXB0b3IuX25hbWUpOwotCSAgIHNlcnZsZXQuc2V0U2VydmxldENsYXNzKHNlcnZsZXREZXNjcmlwdG9yLl9jbGFzc05hbWUpOwotCSAgIAotCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSAhPSBudWxsKXsKLQkJICAgRGlzcGxheU5hbWUgZGlzcGxheU5hbWVPYmogPSBKYXZhZWVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEaXNwbGF5TmFtZSgpOwotCQkJZGlzcGxheU5hbWVPYmouc2V0VmFsdWUoc2VydmxldERlc2NyaXB0b3IuX2Rpc3BsYXlOYW1lKTsKLQkJCXNlcnZsZXQuZ2V0RGlzcGxheU5hbWVzKCkuYWRkKGRpc3BsYXlOYW1lT2JqKTsgIAotCSAgIH0KLQkgICBpZihzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCAhPSBudWxsKXsKLQkJICBzZXJ2bGV0LnNldExvYWRPblN0YXJ0dXAoc2VydmxldERlc2NyaXB0b3IuX2xvYWRPblN0YXJ0dXApOwotCSAgIH0KLS8vCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9wYXJhbXMgIT0gbnVsbCl7Ci0vLwkJICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBzZXJ2bGV0LmdldFBhcmFtc0FzUHJvcGVydGllcygpOwotLy8JCSAgcHJvcGVydGllcy5wdXRBbGwoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyk7Ci0vLwkgICB9Ci0JICAgd2ViYXBwLmdldFNlcnZsZXRzKCkuYWRkKHNlcnZsZXQpOwotCQotCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9tYXBwaW5ncyAhPSBudWxsKXsKLQkJICBmb3IoaW50IGk9MDsgaTxzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3MubGVuZ3RoOyBpKyspewotCQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldE1hcHBpbmcgc2VydmxldE1hcHBpbmcgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRNYXBwaW5nKCk7CQkJCi0JCQlzZXJ2bGV0TWFwcGluZy5zZXRTZXJ2bGV0TmFtZShzZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkpOwotCQkJVXJsUGF0dGVyblR5cGUgdXJsID0gSmF2YWVlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVXJsUGF0dGVyblR5cGUoKTsKLQkJCXVybC5zZXRWYWx1ZShzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3NbaV0pOwotCQkJc2VydmxldE1hcHBpbmcuZ2V0VXJsUGF0dGVybnMoKS5hZGQodXJsKTsKLQkJCXdlYmFwcC5nZXRTZXJ2bGV0TWFwcGluZ3MoKS5hZGQoc2VydmxldE1hcHBpbmcpOwkJCQkJCi0JCSAgfQotCSAgIH0KLX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0gIH0KLQotCXB1YmxpYyBjbGFzcyBTZXJ2bGV0RGVzY3JpcHRvciB7Ci0JCVN0cmluZyBfbmFtZTsKLQkJU3RyaW5nIF9jbGFzc05hbWU7Ci0JCVN0cmluZyBfZGlzcGxheU5hbWU7Ci0JCU1hcCBfcGFyYW1zOwotCQlTdHJpbmdbXSBfbWFwcGluZ3M7Ci0JCUludGVnZXIgX2xvYWRPblN0YXJ0dXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1ZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTU2MzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0gPSBudWxsOwotICAgcHJpdmF0ZSBWZWN0b3Igc3RhdHVzID0gbnVsbDsKLSAgIHByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfID0gbnVsbDsKLQotICAgcHVibGljIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQoKSB7Ci0gIH0KLQotICAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkKLSAgewotIAotCSAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkgICBpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKSB7Ci0JCSAgIElTdGF0dXMgc2ltcGxlU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2ltcGxlU3RhdHVzKTsKLQkJICAgcmV0dXJuIHNpbXBsZVN0YXR1czsKLQkgICB9CQkKLQkKLSAgICBzdGF0dXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50V1NJQ29udGV4dCgpOwotICAgIGludCBzZXZlcml0eSA9IFdTSUNvbXBsaWFuY2VVdGlscy5nZXRXU0lTZXZlcml0eShzZXJ2aWNlUHJvamVjdF8sIHdzaUNvbnRleHQpOwotICAgIGNoZWNrUlBDRW5jb2RlZChzZXZlcml0eSk7Ci0gICAgU3RhdHVzW10gc3RhdHVzZXMgPSAoU3RhdHVzW10pIHN0YXR1cy50b0FycmF5KG5ldyBTdGF0dXNbc3RhdHVzLnNpemUoKV0pOwotCi0gICAgaWYgKHN0YXR1c2VzLmxlbmd0aCA9PSAwIHx8Ci0gICAgCQlXU0lDb21wbGlhbmNlVXRpbHMuY2hlY2tXU0lDb21wbGlhbmNlIChlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCksIHN0YXR1c2VzLCBzZXJ2aWNlUHJvamVjdF8sIHdzaUNvbnRleHQpKQotICAgIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBlbHNlIHsKLSAgICAJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCIiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tSUENFbmNvZGVkKGludCBzZXZlcml0eSkKLSAgewotICAJCWlmIChKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9SUEMuZXF1YWxzKGphdmFXU0RMUGFyYW0uZ2V0U3R5bGUoKSkgJiYgCi0gIAkJICAgSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0VOQ09ERUQuZXF1YWxzKGphdmFXU0RMUGFyYW0uZ2V0VXNlKCkpKQotICAJCSAgIHN0YXR1cy5hZGQgKG5ldyBTdGF0dXMoc2V2ZXJpdHksICJWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kIiwgMCwgCi0gIAkJCQkgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5XU0lfSU5DT01QTElBTkNFX1JQQ19FTkNPREVELCBudWxsKSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAgKiBwbHVnaW4ucHJvcGVydGllcy4KLSAgICogQHJldHVybiBUaGUgU3RyaW5nIG1lc3NhZ2UuCi0gICAqLwotCi0vKioKLSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAqIEB0b2RvIEdlbmVyYXRlZCBjb21tZW50Ci0gKi8KLXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci19Ci0KLS8qKgotICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0XyBUaGUgc2VydmljZVByb2plY3RfIHRvIHNldC4KLSAqIEB0b2RvIEdlbmVyYXRlZCBjb21tZW50Ci0gKi8KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XykgewotCXRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3RfOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWRkZDJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSI7CS8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0gIHByaXZhdGUgSUxvZyBsb2dfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotICAqIGNsYXNzID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVBsdWdpbiIuCi0gICogQHBhcmFtIGRlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gdGhpczsKLSAgICB9Ci0gICAgbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLSAgfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBsb2dnaW5nIGZyb20gYmxvd2luZyB1cC4KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gSUQ7ICAKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZVdhc0NyZWF0aW9uVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwLnVpIik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIGZpcnN0IGxvYWRlZC4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gIAlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjgsIHRoaXMsICJzdGFydCIsICJTdGFydGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5zdGFydCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjgsIHRoaXMsICJzdGFydCIsIGV4YyApOyAgCi0gICAgfQotICAgIAotICAgIHNldFByZWZlcmVuY2VzKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc2h1dGRvd24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgCWxvZ18ubG9nKElMb2cuSU5GTywgNTA2OSwgdGhpcywgInN0b3AiLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjgsIHRoaXMsICJzdGFydCIsIGV4YyApOyAgICAgICAgCi0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogU2V0cyB0aGUgZ2VuZXJhbCBwcmVmZXJlbmNlcyB0byB0aGUgdmFsdWVzIGluIHRoZSBwcmVmZXJlbmNlcyBzdG9yZS4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIHNldFByZWZlcmVuY2VzKCkKLSAgewotICAgLy8gc2V0RGlhbG9nc1ByZWZlcmVuY2VzKCk7Ci0gIH0KLQotIC8qKgotICAgKiBAc2VlIEFic3RyYWN0VUlQbHVnaW4jaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyhJUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2VTdG9yZSkgewotCi0JLy8gU2V0IHRoZSBkZWZhdWx0cyBQcmVmZXJlbmNlCi0vLwlBY3Rpb25EaWFsb2dzUHJlZmVyZW5jZUhlbHBlci5pbml0aWFsaXplRGVmYXVsdHMocHJlZmVyZW5jZVN0b3JlKTsKLSAgfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CVUNvbmZpZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQlVDb25maWdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOGVmNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CVUNvbmZpZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEJVQ29uZmlnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwdWJsaWMgQlVDb25maWdDb21tYW5kKCkgewotCX0KLQotCS8qCi0JICogVGhlIGV4ZWN1dGUgbWV0aG9kIG9mIHRoaXMgY29tbWFuZCBkbyBub3RoaW5nLiAgSXQgaXMgbWVyZWx5IGFuIGFuY2hvciBwb2ludCBmb3IgVUkgcGFnZQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQmFja3VwU2tlbEltcGxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0JhY2t1cFNrZWxJbXBsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzA2MzIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQmFja3VwU2tlbEltcGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwIDEyODgyNyAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQwMyAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgMTI3MzQzICAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDExNiAxNjkxMzggICBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24JCi0gKiAyMDA3MDgxNSAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTExMyAgIDIwOTA3NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLlBsYXRmb3JtVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBCYWNrdXBTa2VsSW1wbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTVBMID0gIkltcGwiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPVCA9ICIuIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBID0gImphdmEiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsgCi0gIAotICBwcml2YXRlIFdlYlNlcnZpY2VJbmZvIHdlYlNlcnZpY2VJbmZvOwotCi0gIHB1YmxpYyBCYWNrdXBTa2VsSW1wbENvbW1hbmQoICkgewotICB9Ci0gIAotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLQkgIHsKLQkJICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7Ci0JICB9Ci0JICAKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIC8vIFJlYWQgV1NETAotCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQkgIFN0cmluZyB3c2RsVVJMID0gamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotCSAgdHJ5Ci0JICB7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwod3NkbFVSTCk7Ci0JCSAgZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHVybC50b1N0cmluZygpKTsKLQkgIH0KLQkgIGNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCSAgewotCQkgIHdzZGxVUkwgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChuZXcgUGF0aCh3c2RsVVJMKSk7Ci0JCSAgZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCSAgfQotCSAgCi0JICAvLyBDb21wdXRlIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgSmF2YSBiZWFuIHNrZWxldG9uCi0JICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotCSAgUG9ydCBwb3J0ID0gbnVsbDsKLQkgIEFycmF5TGlzdCBpbXBsVVJMTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJICBTdHJpbmdCdWZmZXIgYmVhbk5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCSAgCi0JCSAgLy9maXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG1hcHBpbmcgZm9yIHRoaXMgbmFtZXNwYWNlIHRvIGEgcGFja2FnZSBuYW1lCi0JCSAgLy9pZiBub3QgdGhlbiBjb21wdXRlIHBhY2thZ2UgbmFtZSBmcm9tIG5hbWVzcGFjZQotCQkgIFN0cmluZyBiZWFuUGFja2FnZU5hbWUgPSBudWxsOwotCQkgIE1hcCBtYXBwaW5ncyA9IGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKTsKLQkJICBpZiAobWFwcGluZ3MgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJICBiZWFuUGFja2FnZU5hbWUgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCh0YXJnZXROYW1lc3BhY2UpOwotCQkgIH0KLQkJICBpZiAoYmVhblBhY2thZ2VOYW1lID09IG51bGwpCi0JCSAgewotCQkJICBiZWFuUGFja2FnZU5hbWUgPSBXU0RMVXRpbHMuZ2V0UGFja2FnZU5hbWUoZGVmaW5pdGlvbik7Ci0JCSAgfQkJICAKLQkJICAKLQkJICBqYXZhV1NETFBhcmFtLnNldEJlYW5QYWNrYWdlKGJlYW5QYWNrYWdlTmFtZSk7CQkgIAotCQkgIGJlYW5OYW1lLmFwcGVuZChiZWFuUGFja2FnZU5hbWUpOwotCQkgIGJlYW5OYW1lLmFwcGVuZChET1QpOwotCQkgIAotCQkgIHNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIHBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCQkgIAotCQkgIFN0cmluZyBxTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsJCSAgCi0JCSAgYmVhbk5hbWUuYXBwZW5kKHFOYW1lLnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkpOy8vRml4IGZvciBidWcgMTY5MTM4LCBuZWVkIHRvIGVuc3VyZSBmaXJzdCBjaGFyIGlzIHVwcGVyY2FzZQotCQkgIGJlYW5OYW1lLmFwcGVuZChxTmFtZS5zdWJzdHJpbmcoMSkpOwotCi0JCSAgYmVhbk5hbWUuYXBwZW5kKElNUEwpOwotCQkgIFN0cmluZyBiZWFuTmFtZVN0cmluZyA9IGJlYW5OYW1lLnRvU3RyaW5nKCk7Ci0JCSAgamF2YVdTRExQYXJhbS5zZXRCZWFuTmFtZShiZWFuTmFtZVN0cmluZyk7Ci0JCSAgCi0JCSAgLy8gRGVmZWN0IDIwOTA3NSAtIERvIG5vdCBiYWNrIHVwIGFueW1vcmUgc2luY2Ugc2tlbGV0b24gbWVyZ2UgaXMgZGVmYXVsdGVkIHRvIG9uLgotCQkgIAotCQkgIFN0cmluZyBiZWFuTmFtZVBhdGhTdHJpbmcgPSBiZWFuTmFtZVN0cmluZy5yZXBsYWNlKCcuJyxJUGF0aC5TRVBBUkFUT1IpOwotCQkgIElQYXRoIHNrZWxJbXBsUGF0aCA9IG5ldyBQYXRoIChqYXZhV1NETFBhcmFtLmdldEphdmFPdXRwdXQoKSkuYXBwZW5kKG5ldyBQYXRoIChiZWFuTmFtZVBhdGhTdHJpbmcpKS5hZGRGaWxlRXh0ZW5zaW9uKEpBVkEpOwotCQkgIAotCQkgIC8vIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSBpbXBsVVJMCi0JCSAgU3RyaW5nIGltcGxVUkxTdHJpbmc7Ci0JCSAgdHJ5IHsKLQkJCSAgaW1wbFVSTFN0cmluZyA9IHNrZWxJbXBsUGF0aC50b0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUxKSB7Ci0JCQkgIGltcGxVUkxTdHJpbmcgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChza2VsSW1wbFBhdGgpOwotCQkgIH0KLQkJICBpbXBsVVJMTGlzdC5hZGQoIGltcGxVUkxTdHJpbmcgKTsKLQkJICAKLQkJICBTdHJpbmdbXSBpbXBsVVJMQXJyYXkgPSBuZXcgU3RyaW5nW2ltcGxVUkxMaXN0LnNpemUoKV07Ci0JCSAgd2ViU2VydmljZUluZm8uc2V0SW1wbFVSTHMoIChTdHJpbmdbXSkgKGltcGxVUkxMaXN0LnRvQXJyYXkoaW1wbFVSTEFycmF5KSkpOwotCi0JICB9IAotCSAgZWxzZSB7Ci0JCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tdIHt3c2RsVVJMfSkpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgfSAgCi0JICAKLQkgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0gICAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLQotcHVibGljIHZvaWQgc2V0V2ViU2VydmljZUluZm8oV2ViU2VydmljZUluZm8gd2ViU2VydmljZUluZm8pIHsKLQl0aGlzLndlYlNlcnZpY2VJbmZvID0gd2ViU2VydmljZUluZm87Ci19Ci0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNTYzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyNCAgIDEyODYwMSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5DbGFzc3BhdGhVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuUGxhdGZvcm1VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV8gPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87IC8vIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGJ5IHRoZSBleHRlbnNpb24gd2l0aCBpbml0aWFsIHNlbGVjdGlvbgotCXByaXZhdGUgU3RyaW5nIFdTRExTZXJ2aWNlVVJMXzsKLQlwcml2YXRlIFN0cmluZyBXU0RMU2VydmljZVBhdGhuYW1lXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIFdTUGFyc2VyXzsKLSAgICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBieXRlIE1PREVfQkVBTiA9IChieXRlKSAwOwotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9OQU1FX0VYVCA9ICJTZXJ2aWNlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVBfVVJJID0gImh0dHA6Ly90ZW1wdXJpLm9yZy8iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsKLQotCXB1YmxpYyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCggKSAKLQl7Ci0JfQotCQotCi0JLyoqCi0JKiBFeGVjdXRlIERlZmF1bHRzRm9ySmF2YVRvV1NETFRhc2sKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJCi0JCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsgIC8vIGVpdGhlciBzZXQgYnkgZXh0ZW5zaW9uIHBvaW50IG9yIGJlYW4gY2xhc3MgcGFnZQotCQkJamF2YUJlYW5OYW1lXyA9IGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCk7Ci0JCQlpZiAoamF2YUJlYW5OYW1lXyA9PSBudWxsKSB7Ci0JCQkJLy9ybSBqYXZhQmVhbk5hbWVfID0gaXNkRWxlbWVudC5nZXRKYXZhQmVhbk5hbWUoKTsKLQkJCQlqYXZhV1NETFBhcmFtXy5zZXRCZWFuTmFtZShqYXZhQmVhbk5hbWVfKTsKLQkJCX0KLQkJfQotCQkvLyBybSBXU1BhcnNlcl8gPQkoV2ViU2VydmljZXNQYXJzZXIpIHdzZV8uZ2V0V1NQYXJzZXIoKTsKLQkJCi0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZlclNpZGUoSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfQkVBTik7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNrZWxldG9uRGVwbG95KGZhbHNlKTsKLQotCQlqYXZhV1NETFBhcmFtXy5zZXRCZWFuTmFtZShqYXZhQmVhbk5hbWVfKTsKLQkJU3RyaW5nIGNsYXNzcGF0aCA9IENsYXNzcGF0aFV0aWxzLmdldEluc3RhbmNlKCkuZ2V0Q2xhc3NwYXRoU3RyaW5nKHNlcnZpY2VQcm9qZWN0Xyk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldENsYXNzcGF0aChjbGFzc3BhdGgpOwotCi0JCVN0cmluZyBzaW1wbGVCZWFuTmFtZSA9IGphdmFCZWFuTmFtZV87Ci0JCWlmIChqYXZhQmVhbk5hbWVfICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IGphdmFCZWFuTmFtZV8ubGFzdEluZGV4T2YoJy4nKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCXNpbXBsZUJlYW5OYW1lID0gamF2YUJlYW5OYW1lXy5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgbmFtZXNwYWNlID0gV1NETFV0aWxzLm1ha2VOYW1lc3BhY2UoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldFBvcnRUeXBlTmFtZShzaW1wbGVCZWFuTmFtZSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZpY2VOYW1lKHNpbXBsZUJlYW5OYW1lICsgU0VSVklDRV9OQU1FX0VYVCk7Ci0KLQkJSVBhdGggbW9kdWxlU2VydmVyUm9vdCA9IG51bGw7Ci0KLQkJSVBhdGggbW9kdWxlUGF0aCA9IHNlcnZpY2VQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpOwotCQlJUGF0aCB3ZWJpbmZQYXRoID0gc2VydmljZVByb2plY3RfLmdldEZ1bGxQYXRoKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHNlcnZpY2VQcm9qZWN0XykpewotCQkJCW1vZHVsZVNlcnZlclJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihzZXJ2aWNlUHJvamVjdF8pOwotCQkJCW1vZHVsZVBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoc2VydmljZVByb2plY3RfKTsKLQkJCQl3ZWJpbmZQYXRoID0gSjJFRVV0aWxzLmdldFdlYkluZlBhdGgoIHNlcnZpY2VQcm9qZWN0XyApOwkJCQkKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9ICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfREVGQVVMVF9CRUFOLCBlICk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlJUGF0aCB3c2RsUGF0aCA9Ci0JCQltb2R1bGVQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikuYXBwZW5kKHNpbXBsZUJlYW5OYW1lKS5hZGRGaWxlRXh0ZW5zaW9uKFdTRExfRVhUKTsKLQotCQl0cnl7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZvbGRlcihtb2R1bGVQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikpOwotCQkJRmlsZVV0aWwuY3JlYXRlRm9sZGVyKGZvbGRlciwgdHJ1ZSwgdHJ1ZSk7Ci0JCQotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gZSl7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NETCwgZSApOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCQotCQlTdHJpbmcgd3NkbExvY2F0aW9uID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh3c2RsUGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCQlqYXZhV1NETFBhcmFtXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihuZXcgRmlsZSh3c2RsTG9jYXRpb24pLnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCVdTRExTZXJ2aWNlUGF0aG5hbWVfID0gd3NkbFBhdGgudG9TdHJpbmcoKTsKLQotCQlpZiAod3NkbFBhdGggIT0gbnVsbCkgewotCQkJU3RyaW5nIHdzZGxVUkwgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChuZXcgUGF0aCh3c2RsTG9jYXRpb24pKTsKLQkJCVdTRExTZXJ2aWNlVVJMXyA9IHdzZGxVUkw7Ci0JCQkvLyBzZXQgcGFyc2VyIAotCQkJaWYgKHdzZGxVUkwgPT0gbnVsbCB8fCB3c2RsVVJMLmxlbmd0aCgpIDw9IDApIHsKLQkJCQlJUmVzb3VyY2UgcmVzID0KLQkJCQkJUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoV1NETFNlcnZpY2VQYXRobmFtZV8pOwotCQkJCWlmIChyZXMgIT0gbnVsbCkKLQkJCQkJd3NkbFVSTCA9IChuZXcgVXRpbHMoKSkudG9GaWxlU3lzdGVtVVJJKHJlcyk7Ci0JCQl9Ci0JCQlpZiAod3NkbFVSTCAhPSBudWxsICYmIHdzZGxVUkwubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaWYgKFdTUGFyc2VyXyA9PSBudWxsKSB7Ci0JCQkJCVdTUGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWphdmFXU0RMUGFyYW1fLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1dSQVBQRUQpOwotCQlqYXZhV1NETFBhcmFtXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0xJVEVSQUwpOwotCi0gICAgICAgIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLSAgICAgICAgaWYgKHNlcnZpY2VTZXJ2ZXJUeXBlSURfICE9IG51bGwgJiYgc2VydmljZVNlcnZlclR5cGVJRF8ubGVuZ3RoKCk+MCkKLSAgICAgICAgewotCQkgIHByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0Xywgc2VydmljZVNlcnZlclR5cGVJRF8sIHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9qZWN0VVJMID09IG51bGwpIC8vIGVpdGhlciBubyBzZXJ2ZXIgdHlwZSBkZWZpbmVkIG9yIHNlcnZlciBub3QgYWJsZSB0byBnZXQgcHJvamVjdCBVUkwKLSAgICAgICAgeyAKLSAgICAgICAgICBwcm9qZWN0VVJMID0gVEVNUF9VUkkgKyBzZXJ2aWNlUHJvamVjdF8uZ2V0TmFtZSgpOyAKLSAgICAgICAgICBqYXZhV1NETFBhcmFtXy5zZXRHdWVzc1Byb2plY3RVUkwodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgamF2YVdTRExQYXJhbV8uc2V0UHJvamVjdFVSTChwcm9qZWN0VVJMKTsKLQkJU3RyaW5nIHNlcnZpY2VVUkwgPSBwcm9qZWN0VVJMICsgU0VSVklDRV9FWFQgKyBzaW1wbGVCZWFuTmFtZTsKLQkJamF2YVdTRExQYXJhbV8uc2V0VXJsTG9jYXRpb24oc2VydmljZVVSTCk7Ci0JCQotCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRhSW5mT25seSh0cnVlKTsKLQotCQlTdHJpbmcgamF2YU91dHB1dCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVNlcnZlclJvb3QpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkKLQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gamF2YVdTRExQYXJhbV8uZ2V0U2VydmljZU5hbWUoKTsKLQkJSVBhdGggb3V0cHV0UGF0aCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdlYmluZlBhdGgpLmdldExvY2F0aW9uKCk7Ci0JCVN0cmluZyBvdXRwdXQgPSBzZXJ2aWNlUHJvamVjdF8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQlpZiAob3V0cHV0UGF0aCE9bnVsbCkKLQkJIG91dHB1dCA9IG91dHB1dFBhdGguYXBwZW5kKHNlcnZpY2VOYW1lKS50b1N0cmluZygpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldEphdmFPdXRwdXQoamF2YU91dHB1dCk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRKYXZhQmVhbk5hbWUoU3RyaW5nIGphdmFCZWFuTmFtZSkgewotCQl0aGlzLmphdmFCZWFuTmFtZV8gPSBqYXZhQmVhbk5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VVUkwoKSB7Ci0JCXJldHVybiBXU0RMU2VydmljZVVSTF87Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VQYXRobmFtZSgpIHsKLQkJcmV0dXJuIFdTRExTZXJ2aWNlUGF0aG5hbWVfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXIpIHsKLQkJdGhpcy5XU1BhcnNlcl8gPSB3c1BhcnNlcjsKLQl9Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFBhcnNlcigpIHsKLQkJcmV0dXJuIFdTUGFyc2VyXzsKLQl9Ci0KLSAgcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIGlmIChvYmplY3RTZWxlY3Rpb24gIT0gbnVsbCAmJiAhb2JqZWN0U2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgc2V0SmF2YUJlYW5OYW1lKChTdHJpbmcpb2JqZWN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIGlkKQotICB7Ci0gICAgc2VydmljZVNlcnZlclR5cGVJRF8gPSBpZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgZXhpc3RpbmdTZXJ2ZXIpIHsKLQkJc2VydmljZUV4aXN0aW5nU2VydmVyID0gZXhpc3RpbmdTZXJ2ZXI7Ci0JfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmNmM0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1NrZWxldG9uMldTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICogMjAwNzAxMTIgICAxNjU3MjEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTREwgaW1wb3J0IGNhbm5vdCB1c2UgcmVsYXRpdmUgaW1wb3J0IHdpdGggdG8gcGFyZW50IGRpcmVjdG9yaWVzCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5QbGF0Zm9ybVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLldTRExDb3BpZXI7Ci0KLXB1YmxpYyBjbGFzcyBTa2VsZXRvbjJXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRVhUID0gIi9zZXJ2aWNlcy8iOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0gIHByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87ICAKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBURU1QX1VSSSA9ICJodHRwOi8vdGVtcHVyaS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBTa2VsZXRvbjJXU0RMQ29tbWFuZCggKSB7Ci0gIH0KLQotICAvKioKLSAgKiBFeGVjdXRlIFNrZWxldG9uMldTRExDb21tYW5kCi0gICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLQkJewotCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0gIC8vIFJlYWQgV1NETAotICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCVN0cmluZyB3c2RsVVJMID0gamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotCXRyeQotCXsKLQkJVVJMIHVybCA9IG5ldyBVUkwod3NkbFVSTCk7Ci0JCWRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih1cmwudG9TdHJpbmcoKSk7Ci0JfQotCWNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCXsKLQkJd3NkbFVSTCA9IFBsYXRmb3JtVXRpbHMuZ2V0RmlsZVVSTEZyb21QYXRoKG5ldyBQYXRoKHdzZGxVUkwpKTsKLQkJZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCX0KLQotICAgIC8vIENvbXB1dGUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBKYXZhIGJlYW4gc2tlbGV0b24KLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotICAgIAkKLSAgICAJLy8gYmVhbk5hbWUgYW5kIGJlYW5QYWNrYWdlTmFtZSBhcmUgbm93IHNldCBpbiBCYWNrdXBTa2VsSW1wbENvbW1hbmQKLSAgICAJCi0gICAgCXNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAlwb3J0ID0gKFBvcnQpIHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAJCi0gICAgCWphdmFXU0RMUGFyYW0uc2V0UG9ydFR5cGVOYW1lKFdTRExVdGlscy5nZXRQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbikpOwotICAgIAlqYXZhV1NETFBhcmFtLnNldFNlcnZpY2VOYW1lKFdTRExVdGlscy5nZXRTZXJ2aWNlRWxlbWVudE5hbWUoZGVmaW5pdGlvbikpOwotCi0gICAgfSAKLSAgICBlbHNlIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tdIHt3c2RsVVJMfSkpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIC8vIE1vZGlmeSBXU0RMIGVuZHBvaW50Ci0gICAgaWYgKHBvcnQgPT0gbnVsbCkgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9OT19QT1JULCBuZXcgU3RyaW5nW10ge3dzZGxVUkx9KSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIHNlcnZpY2VzSXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBzZXJ2aWNlc0l0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNJdC5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzLmdldFBvcnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIHBvcnRzSXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBwb3J0c0l0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcCA9IChQb3J0KXBvcnRzSXQubmV4dCgpOwotICAgICAgICBtb2RpZnlFbmRwb2ludChwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgV1NETCBmaWxlIG5hbWU6IGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0gICAgSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQotICAgIFN0cmluZyB3c2RsTG9jYXRpb24gPSBqYXZhV1NETFBhcmFtLmdldE91dHB1dFdzZGxMb2NhdGlvbigpOwotICAgIElQYXRoIHdzZGxQYXRoID0gbnVsbDsKLSAgICBJRmlsZSBvdXRwdXRGaWxlID0gbnVsbDsKLSAgICB0cnkgewotICAgICBpZih3c2RsTG9jYXRpb24gIT0gbnVsbCl7Ci0JCW91dHB1dEZpbGUgPSB3b3Jrc3BhY2UuZ2V0RmlsZUZvckxvY2F0aW9uKCBuZXcgUGF0aCh3c2RsTG9jYXRpb24pKTsKLSAgICAgfQotICAgICBlbHNlewotLy8JCXdzZGxQYXRoID0gc2VydmVyUHJvamVjdC5nZXRGdWxsUGF0aCgpOwotLy8JCQotLy8JCWlmIChzZXJ2ZXJQcm9qZWN0Lmhhc05hdHVyZShJV2ViTmF0dXJlQ29uc3RhbnRzLkoyRUVfTkFUVVJFX0lEKSkgewotLy8JCQkgICBKMkVFV2ViTmF0dXJlUnVudGltZSB3ZWJQcm9qZWN0ID0KLS8vCQkJCSAoSjJFRVdlYk5hdHVyZVJ1bnRpbWUpIHNlcnZlclByb2plY3QuZ2V0TmF0dXJlKAotLy8JCQkJICAgSVdlYk5hdHVyZUNvbnN0YW50cy5KMkVFX05BVFVSRV9JRCk7Ci0vLwkJCSAgIHdzZGxQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKCBzZXJ2ZXJQcm9qZWN0LCBtb2R1bGVOYW1lXyApOwotLy8JCQkgICAvL3dzZGxQYXRoID0gd3NkbFBhdGguYXBwZW5kKHdlYlByb2plY3QuZ2V0V0VCSU5GUGF0aCgpKTsKLS8vCQkJIH0KLS8vCQllbHNlIGlmIChzZXJ2ZXJQcm9qZWN0Lmhhc05hdHVyZShJRUpCTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkpCi0vLwkJewotLy8JCQlFSkJOYXR1cmVSdW50aW1lIGVqYlByb2plY3QgPSBFSkJOYXR1cmVSdW50aW1lLmdldFJ1bnRpbWUoc2VydmVyUHJvamVjdCk7Ci0vLwkJCXdzZGxQYXRoID0gd3NkbFBhdGguYXBwZW5kKGVqYlByb2plY3QuZ2V0TWV0YUZvbGRlcigpLmdldFByb2plY3RSZWxhdGl2ZVBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpKTsKLS8vCQl9CQkKLS8vIFRPRE86ICBoYW5kbGUgRUpCIGNhc2UKLQkJICAgICB3c2RsUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aCggc2VydmVyUHJvamVjdCApOwotCQkJIElQYXRoIHdzZGxGaWxlUGF0aCA9IHdzZGxQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikuYXBwZW5kKHBvcnQuZ2V0TmFtZSgpKS5hZGRGaWxlRXh0ZW5zaW9uKFdTRExfRVhUKTsKLQkJICAgICBJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMKLQkJCQkJCQkJLmdldFdvcmtzcGFjZVJvb3QoKQotCQkJCQkJCQkuZ2V0Rm9sZGVyKHdzZGxQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikpOwotCQkJIEZpbGVVdGlsLmNyZWF0ZUZvbGRlcihmb2xkZXIsIHRydWUsIHRydWUpOwkKLQkJICAgICBvdXRwdXRGaWxlID0gd29ya3NwYWNlLmdldEZpbGUod3NkbEZpbGVQYXRoKTsKLQkJCSB3c2RsTG9jYXRpb24gPSBvdXRwdXRGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJCSBqYXZhV1NETFBhcmFtLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCQkJIAotICAgICB9Ci0KLSAgICAgU3RyaW5nIGZvbGRlciAgID0gb3V0cHV0RmlsZS5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgU3RyaW5nIGZpbGVuYW1lID0gb3V0cHV0RmlsZS5nZXROYW1lKCk7Ci0JCi0gICAgIFdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIod2ViU2VydmljZXNQYXJzZXIpOwotICAgICBjb3BpZXIuc2V0U291cmNlVVJJKHdzZGxVUkwsIGRlZmluaXRpb24pOwotICAgICBjb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlcik7Ci0gICAgIGNvcGllci5zZXRUYXJnZXRGaWxlbmFtZShmaWxlbmFtZSk7Ci0JCi0gICAgIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbW9uaXRvcik7Ci0JCi0gICAgIFN0cmluZyBuZXdQYXRoID0gb3V0cHV0RmlsZS5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpLmFwcGVuZChjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkpLnRvU3RyaW5nKCk7Ci0gICAgIGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKG5ld1BhdGgpOyAgICAgCi0gICAgfSAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTREwsIG5ldyBTdHJpbmdbXSB7IHdzZGxMb2NhdGlvbiB9KSwgZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIG1vZGlmeUVuZHBvaW50KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gbnVsbDsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB7Ci0gICAgICAgIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iajsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChzb2FwQWRkcmVzcyAhPSBudWxsKQotICAgIHsKLSAgICAgIAotICAgICAgU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwotICAgICAgaWYgKHNlcnZpY2VTZXJ2ZXJUeXBlSURfICE9IG51bGwgJiYgc2VydmljZVNlcnZlclR5cGVJRF8ubGVuZ3RoKCk+MCkKLSAgICAgIHsKLQkgICAgcHJvamVjdFVSTCA9IFNlcnZlclV0aWxzLmdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoc2VydmVyUHJvamVjdCwgc2VydmljZVNlcnZlclR5cGVJRF8sIHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChwcm9qZWN0VVJMID09IG51bGwpIC8vIGVpdGhlciBubyBzZXJ2ZXIgdHlwZSBkZWZpbmVkIG9yIHNlcnZlciBub3QgYWJsZSB0byBnZXQgcHJvamVjdCBVUkwKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdFVSTCA9IFRFTVBfVVJJICsgc2VydmVyUHJvamVjdC5nZXROYW1lKCk7IAotICAgICAgICBqYXZhV1NETFBhcmFtLnNldEd1ZXNzUHJvamVjdFVSTCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGphdmFXU0RMUGFyYW0uc2V0UHJvamVjdFVSTChwcm9qZWN0VVJMKTsKLSAgICAgIFN0cmluZ0J1ZmZlciBzZXJ2aWNlVVJMID0gbmV3IFN0cmluZ0J1ZmZlcihwcm9qZWN0VVJMKTsKLSAgICAgIHNlcnZpY2VVUkwuYXBwZW5kKFNFUlZJQ0VfRVhUKS5hcHBlbmQocG9ydC5nZXROYW1lKCkpOwotICAgICAgamF2YVdTRExQYXJhbS5zZXRVcmxMb2NhdGlvbihzZXJ2aWNlVVJMLnRvU3RyaW5nKCkpOwotICAgICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoc2VydmljZVVSTC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHNlcnZlclByb2plY3QgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0KSB7Ci0gICAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gIAlGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRKYXZhV1NETFBhcmFtKCkuZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCkpOyAKLSAgICBTdHJpbmcgdXJsID0gIiI7Ci0JICB0cnkgewotICAgIAl1cmwgPSBmaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0JICBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKXt9Ci0JcmV0dXJuIHVybDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IGlkOwotICB9Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihJU2VydmVyIGV4aXN0aW5nU2VydmVyKSB7Ci0Jc2VydmljZUV4aXN0aW5nU2VydmVyID0gZXhpc3RpbmdTZXJ2ZXI7Ci19ICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svVERDb25maWdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNDEyZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFREQ29uZmlnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICBwdWJsaWMgVERDb25maWdDb21tYW5kKCkgCi0gIHsKLSAgfQotICAKLSAgLyoKLSAgICogVGhlIGV4ZWN1dGUgbWV0aG9kIG9mIHRoaXMgY29tbWFuZCBkbyBub3RoaW5nLiAgSXQgaXMgbWVyZWx5IGFuIGFuY2hvciBwb2ludCBmb3IgVUkgcGFnZQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9VcGRhdGVBeGlzV1NEREZpbGVUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyNWNiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MTcgICAxMzQxMDQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDMwICAgMTI4NDE5IGtlbHZpbmhjQGNhLmlibS5jb20gLSBLZWx2aW4gSC4gQ2hldW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVQTE9ZX1hTTCA9ICJkZXBsb3kueHNsIjsJLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFUExPWV9CQUsgPSAiZGVwbG95LndzZGQuYmFrIjsJCS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfUEFSQU0gPSAibmV3Q2xhc3NOYW1lIjsJCS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotICAgIAotCXB1YmxpYyBVcGRhdGVBeGlzV1NEREZpbGVUYXNrKCkgCi0JewotCX0KLQkKLQkvKioKLQkqIEV4ZWN1dGUgVXBkYXRlQXhpc1dTRERGaWxlVGFzawotCSovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsgICAgCi0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJCQotCQlpZiAoamF2YVdTRExQYXJhbV8gPT0gbnVsbCkgewotCQkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7CQkgIAotCQl9Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0XzsKLSAgICAgICAgCi0JCVN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IGphdmFXU0RMUGFyYW1fLmdldEphdmFPdXRwdXQoKTsKLQkJaWYgKG91dHB1dExvY2F0aW9uID09IG51bGwpIHsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlTdHJpbmcgd2ViQ29udGVudFBhdGggPQlKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lciggcHJvamVjdCApLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJdHJ5IHsKLQotCQkJaWYgKGphdmFXU0RMUGFyYW1fLmdldERlcGxveW1lbnRGaWxlcygpICE9IG51bGwKLQkJCQkmJiBqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPiAwKSB7Ci0KLQkJCQlTdHJpbmcgd3NkZF9kZXBsb3kgPSBqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKVswXTsKLQkJCQlJUGF0aCBkZXBsb3lQYXRoID0gbmV3IFBhdGgod3NkZF9kZXBsb3kpOwotCQkJCVN0cmluZyBkZXBsb3lCYWNrdXAgPQotCQkJCQlkZXBsb3lQYXRoCi0JCQkJCQkucmVtb3ZlTGFzdFNlZ21lbnRzKDEpCi0JCQkJCQkuYXBwZW5kKERFUExPWV9CQUspCi0JCQkJCQkudG9TdHJpbmcoKTsKLQkJCQlGaWxlVXRpbC5jcmVhdGVUYXJnZXRGaWxlKHdzZGRfZGVwbG95LCBkZXBsb3lCYWNrdXAsIHRydWUpOwotCi0JCQkJVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLQkJCQkvLyBVc2UgdGhlIFRyYW5zZm9ybWVyRmFjdG9yeSB0byBpbnN0YW50aWF0ZSBhIFRyYW5zZm9ybWVyIHRoYXQgd2lsbCB3b3JrIHdpdGggIAotCQkJCS8vIHRoZSBzdHlsZXNoZWV0IHlvdSBzcGVjaWZ5LiBUaGlzIG1ldGhvZCBjYWxsIGFsc28gcHJvY2Vzc2VzIHRoZSBzdHlsZXNoZWV0Ci0JCQkJLy8gaW50byBhIGNvbXBpbGVkIFRlbXBsYXRlcyBvYmplY3QuCi0JCQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPQotCQkJCQl0RmFjdG9yeS5uZXdUcmFuc2Zvcm1lcihuZXcgU3RyZWFtU291cmNlKGdldFBsdWdpbkZpbGVBc0lucHV0U3RyZWFtKERFUExPWV9YU0wpKSk7Ci0JCQkJdHJhbnNmb3JtZXIuc2V0UGFyYW1ldGVyKENMQVNTTkFNRV9QQVJBTSwgamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0KLQkJCQkvLyBVc2UgdGhlIFRyYW5zZm9ybWVyIHRvIGFwcGx5IHRoZSBhc3NvY2lhdGVkIFRlbXBsYXRlcyBvYmplY3QgdG8gYW4gWE1MIGRvY3VtZW50Ci0JCQkJLy8gKGZvby54bWwpIGFuZCB3cml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSAoZm9vLm91dCkuCi0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gd3NkZFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCB3c2RkX2RlcGxveSApOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQkJCQkgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSggbmV3IFN0cmVhbVNvdXJjZShkZXBsb3lCYWNrdXApLCBuZXcgU3RyZWFtUmVzdWx0KHdzZGRTdHJlYW0pICk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgd3NkZFN0cmVhbS5jbG9zZSgpOwotICAgICAgICB9Ci0KLQotICAgICAgICBJUmVzb3VyY2UgZGVwbG95RmlsZSA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlQXRMb2NhdGlvbih3c2RkX2RlcGxveSwgcHJvamVjdCk7Ci0gICAgICAgIGlmKCBkZXBsb3lGaWxlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgIAlkZXBsb3lGaWxlLnJlZnJlc2hMb2NhbCggSVJlc291cmNlLkRFUFRIX1pFUk8sIG1vbml0b3IgKTsKLSAgICAgICAgfQotCi0JCX0KLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgICAgU3RyaW5nW10gZXJyb3JNc2dTdHJpbmdzID0gbmV3IFN0cmluZ1tde3Byb2plY3QudG9TdHJpbmcoKSwgb3V0cHV0TG9jYXRpb24udG9TdHJpbmcoKSwgd2ViQ29udGVudFBhdGgudG9TdHJpbmcoKX07IAotCQkgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVVBEQVRFX0FYSVNfV1NERCwgZXJyb3JNc2dTdHJpbmdzKSwgZSk7Ci0JCSAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICAgIHJldHVybiBzdGF0dXM7CQkgIAkJICAKLQkJfQotCQkKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRQbHVnaW5GaWxlQXNJbnB1dFN0cmVhbShTdHJpbmcgcGx1Z2luZmlsZU5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUlucHV0U3RyZWFtIGlzID0gV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkocGx1Z2luZmlsZU5hbWUpLm9wZW5TdHJlYW0oKTsKLQkJCi0JCQlyZXR1cm4gaXM7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCW5ldyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzKAotCQkJCQlJU3RhdHVzLldBUk5JTkcsCi0JCQkJCVdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5JRCwKLQkJCQkJMCwKLQkJCQkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfUExVR0lOX0ZJTEVfVVJMLAotCQkJCQllKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0JKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLQkqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQlqYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLQl7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9CQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0JewotCSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotCSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjc5NWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIAotICAvL1Byb3ZpZGUKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0gIHByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsKLSAgcHJpdmF0ZSBib29sZWFuIGZvcmNlQnVpbGRfID0gdHJ1ZTsKLSAgcHJpdmF0ZSBCb29sZWFuIElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQgPSBCb29sZWFuLlRSVUU7IC8vIHJzayByZXZpc2l0Ci0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgdmFsaWRhdGlvbk1hbmFnZXJfOwotICBwcml2YXRlIGJvb2xlYW4gY3VzdG9taXplU2VydmljZU1hcHBpbmdzXyA9IGZhbHNlOwotICAKLSAgLy9UaGlzIGlzIHByb3h5IGFuZCBjbGllbnQgcmVsYXRlZCBpbmZvcm1hdGlvbgotICAvL3doaWNoIGNhbiBiZSBudWxsZWQgZm9yIGNvbW1hbmRzIGRlYWxpbmcKLSAgLy93aXRoIHNlcnZpY2UgY3JlYXRpb24uCi0gIC8vcnNrIHJldmlzaXQKLSAgcHJpdmF0ZSBCb29sZWFuIGlzUHJveHlQcm9qZWN0XyA9IEJvb2xlYW4uRkFMU0U7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVJRF8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHByb3h5UHJvamVjdF8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZVByb2plY3RfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEXyA9IG51bGw7Ci0gIHByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotICAKLSAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLQkvL2phdmFXU0RMUGFyYW0KLQlqYXZhV1NETFBhcmFtXyA9IG5ldyBKYXZhV1NETFBhcmFtZXRlcigpOwotICAgIAotCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOKTsKLQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotICAgIAotICAgIC8vcGFyc2VyCi0gICAgcGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgIAotICAgIC8vdmFsaWRhdGlvbk1hbmFnZXIKLSAgICB2YWxpZGF0aW9uTWFuYWdlcl8gPSBuZXcgVmFsaWRhdGlvbk1hbmFnZXIoKTsKLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQkKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UnVudGltZUlEXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlEKCkKLSAgewotICAgIHJldHVybiBjbGllbnRSdW50aW1lSURfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGZvcmNlQnVpbGRfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Rm9yY2VCdWlsZCgpCi0gIHsKLSAgICByZXR1cm4gZm9yY2VCdWlsZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNQcm94eVByb2plY3RfLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0SXNQcm94eVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGlzUHJveHlQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBqYXZhQmVhbk5hbWVfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRKYXZhQmVhbk5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGphdmFCZWFuTmFtZV87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbV8uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbV87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlQcm9qZWN0Xy4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm94eVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHByb3h5UHJvamVjdF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfLgotICAgKi8KLSAgcHVibGljIElTZXJ2ZXIgZ2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZUV4aXN0aW5nU2VydmVyXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVQcm9qZWN0Xy4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRTYW1wbGVQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBzYW1wbGVQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVTZXJ2ZXJUeXBlSURfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZVNlcnZlclR5cGVJRF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsaWRhdGlvbk1hbmFnZXJfLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NYW5hZ2VyIGdldFZhbGlkYXRpb25NYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiB2YWxpZGF0aW9uTWFuYWdlcl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uCi0gICAqLwotICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0gIH0KLSAgCi0gCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpCi0gIHsKLSAgICByZXR1cm4gY3VzdG9taXplU2VydmljZU1hcHBpbmdzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCgpCi0gIHsKLSAgICByZXR1cm4gSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZDsKLSAgfQotCi1wdWJsaWMgdm9pZCBzZXRKYXZhQmVhbk5hbWUoU3RyaW5nIGphdmFCZWFuTmFtZSkgewotCXRoaXMuamF2YUJlYW5OYW1lXyA9IGphdmFCZWFuTmFtZTsKLX0KLSAgCi0vLyAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykKLS8vICB7Ci0vLyAgICBzZXJ2aWNlSWRzXyA9IGlkczsKLS8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL0JlYW5Db25maWdXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNhYjY4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eSwgcmVtb3ZlIHJlZHVuZGFudCB3c2RsIFVSSSwgZm9sZGVyIGFuZCBmaWxlIGNvbnRyb2xzCi0gKiAyMDA2MDUyNCAgIDEyODYwMSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA5MDMwMiAgIDI0MjQ2MiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBTYXZlIFdlYiBzZXJ2aWNlcyB3aXphcmQgc2V0dGluZ3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5Db21ib1dpdGhIaXN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIEJlYW5Db25maWdXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgCi17Ci0KLSAgcHJpdmF0ZSBCdXR0b24gICBycGNFbmNvZGVkQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBycGNMaXRlcmFsQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBkb2NMaXRlcmFsQnV0dG9uXzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICAKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyXzsKLSAgCi0gIC8qIENPTlRFWFRfSUQgUEJDRjAwMDEgZm9yIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9QQUdFID0gIlBCQ0YwMDAxIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIFN0cmluZyB3c2RsRm9sZGVyXzsKLSAgCi0gIHByaXZhdGUgQ29tYm9XaXRoSGlzdG9yeSB3c2RsRmlsZVRleHRfOwotICAvKiBDT05URVhUX0lEIFBCQ0YwMDA3IGZvciB0aGUgV1NETCBGaWxlIGZpZWxkIG9mIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9URVhUX1dTRExfRklMRSA9ICJQQkNGMDAwNyI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBUcmVlIG1ldGhvZHNUcmVlXzsKLSAgLyogQ09OVEVYVF9JRCBQQk1FMDAwMiBmb3IgdGhlIE1ldGhvZHMgdHJlZSBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX1RSRUVfTUVUSE9EUyA9ICJQQk1FMDAwMiI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBCdXR0b24gc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl87Ci0gIC8qIENPTlRFWFRfSUQgUEJNRTAwMTAgZm9yIHRoZSBTZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX0JVVFRPTl9TRUxFQ1RfQUxMID0gIlBCTUUwMDEwIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIEJ1dHRvbiBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fOwotICAvKiBDT05URVhUX0lEIFBCTUUwMDExIGZvciB0aGUgRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwgPSAiUEJNRTAwMTEiOyAvLyROT04tTkxTLTEkCi0JCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLyogQ09OVEVYVF9JRCBQQkNGMDAxNiBmb3IgdGhlIFNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlICovICAgCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUDJOX1NIT1dfTUFQUElOR1MgPSAiUEJDRjAwMTYiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotCVN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiOwkgIAotCi0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgICAgICAgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgIFVJVXRpbHMgICAgICBiYXNlQ29uVWlVdGlscyA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLSAgICAKLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsgICAgCi0JcGFyZW50LnNldFRvb2xUaXBUZXh0KCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDRl9QQUdFICApOwotCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QQkNGX1BBR0UgKTsKLSAgICAKLSAgICBDb21wb3NpdGUgY29uZmlnR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyICk7ICAgIAotICAgIAotICAgIHdzZGxGaWxlVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvV2l0aEhpc3RvcnkoY29uZmlnR3JvdXAsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTEFCRUxfT1VUUFVUX0ZJTEVfTkFNRSwKLSAgICAJCUF4aXNDcmVhdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNGX1RFWFRfV1NETF9GSUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDRl9URVhUX1dTRExfRklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiAgLCBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREaWFsb2dTZXR0aW5ncygpKTsKLSAgICB3c2RsRmlsZVRleHRfLmFkZExpc3RlbmVyKCBTV1QuTW9kaWZ5LCBzdGF0dXNMaXN0ZW5lciApOwotICAgIAotICAgIC8vIFRPRE8gdGhpcyBncm91cCBoYXMgbm8gVE9PTFRJUCBvciBJTkZPUE9QLgotICAgIEdyb3VwICAgIG1ldGhvZHNHcm91cCA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZUdyb3VwKCBwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9NRVRIT0RTLCBudWxsLCBudWxsICk7Ci0JbWV0aG9kc0dyb3VwLnNldExheW91dERhdGEoIHVpVXRpbHMuY3JlYXRlRmlsbEFsbCgpICk7Ci0JCi0JR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JbWV0aG9kc0dyb3VwLnNldExheW91dCggbGF5b3V0ICk7Ci0JCi0JbWV0aG9kc1RyZWVfID0gdWlVdGlscy5jcmVhdGVUcmVlKCBtZXRob2RzR3JvdXAsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQk1FX1RSRUVfTUVUSE9EUywgCi0JCQkJCQkJCQkJSU5GT1BPUF9QQk1FX1RSRUVfTUVUSE9EUywKLQkgICAgICAgICAgICAgICAgICAgCQkJCSAgIFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwJfCBTV1QuQ0hFQ0sgKTsKLQltZXRob2RzVHJlZV8uYWRkTGlzdGVuZXIoIFNXVC5TZWxlY3Rpb24sIHN0YXR1c0xpc3RlbmVyICk7Ci0KLSAgICBDb21wb3NpdGUgc2VsZWN0QnV0dG9ucyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBtZXRob2RzR3JvdXAsIDIgKTsKLSAgICAKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXyAKLSAgICAgID0gYmFzZUNvblVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggc2VsZWN0QnV0dG9ucywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9TRUxFQ1RfQUxMLCAKLSAgICAJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJNRV9CVVRUT05fU0VMRUNUX0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEwgKTsKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFsbCggdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXyAKLSAgICAgID0gYmFzZUNvblVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggc2VsZWN0QnV0dG9ucywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9ERVNFTEVDVF9BTEwsIAotICAgIAkJICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwgKTsKLSAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBbGwoIGZhbHNlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgLy8gVE9ETyB0aGlzIGdyb3VwIGhhcyBubyBUT09MVElQIG9yIElORk9QT1AuCi0gICAgR3JvdXAgc3R5bGVHcm91cCA9IHVpVXRpbHMuY3JlYXRlR3JvdXAoIHBhcmVudCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVFlMRV9VU0UsIG51bGwsIG51bGwgKTsKLSAgICAKLSAgICAvLyBUT0RPIHJhZGlvIGJ1dHRvbnMgaGF2ZSBubyBUT09MVElQIG9yIElORk9QT1AuCi0gICAgZG9jTGl0ZXJhbEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKCBzdHlsZUdyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlNUWUxFX0RPQ19MSVRFUkFMLCBudWxsLCBudWxsICk7Ci0gICAgcnBjTGl0ZXJhbEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKCBzdHlsZUdyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlNUWUxFX1JQQ19MSVRFUkFMLCBudWxsLCBudWxsICk7Ci0gICAgcnBjRW5jb2RlZEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKCBzdHlsZUdyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlNUWUxFX1JQQ19FTkNPREVELCBudWxsLCBudWxsICk7Ci0gICAgCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLkxBQkVMX0VYUExPUkVfTUFQUElOR1NfQkVBTjJYTUwsCi0gICAgCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUDJOX1NIT1dfTUFQUElOR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QMk5fU0hPV19NQVBQSU5HUyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaGFuZGxlU2VsZWN0QWxsKCBib29sZWFuIHZhbHVlICkKLSAgewotCVRyZWVJdGVtW10gaXRlbXMgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLQkKLQlmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgCi0JewotCSAgaXRlbXNbaV0uc2V0Q2hlY2tlZCh2YWx1ZSk7Ci0JfQotCQotCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVTZXJ2aWNlTWFwcGluZ3MoIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggdmFsdWUgKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3VzdG9taXplU2VydmljZU1hcHBpbmdzKCkKLSAgewotICAgIHJldHVybiBzaG93TWFwcGluZ3NDaGVja2JveF8gPT0gbnVsbCA/IGZhbHNlIDogc2hvd01hcHBpbmdzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKYXZhUGFyYW1ldGVyKCBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyICkKLSAgewotICAgIGphdmFQYXJhbWV0ZXJfID0gamF2YVBhcmFtZXRlcjsKLSAgICAKLQlTdHJpbmcgd3NkbExvY2F0aW9uID0gamF2YVBhcmFtZXRlci5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKTsKLQlJUGF0aCB3c2RsUGF0aCA9IG5ldyBQYXRoKCB3c2RsTG9jYXRpb24gKTsKLQkKLQl3c2RsRm9sZGVyXyA9IHdzZGxQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKS50b1N0cmluZygpOyAgICAKLQl3c2RsRmlsZVRleHRfLnNldFRleHQod3NkbFBhdGgubGFzdFNlZ21lbnQoKSk7Ci0gICAgCi0JbWV0aG9kc1RyZWVfLnJlbW92ZUFsbCgpOwotCUhhc2h0YWJsZSBtZXRob2RzID0gamF2YVBhcmFtZXRlci5nZXRNZXRob2RzKCk7Ci0JRW51bWVyYXRpb24gZSA9IG1ldGhvZHMua2V5cygpOwotCQotCXdoaWxlKCBlLmhhc01vcmVFbGVtZW50cygpICkKLQl7Ci0JICBTdHJpbmcgICBuYW1lID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOwotICAgICAgVHJlZUl0ZW0gaXRlbSA9IG5ldyBUcmVlSXRlbShtZXRob2RzVHJlZV8sIFNXVC5OVUxMKTsKLSAgICAgIAotICAgCSAgaXRlbS5zZXREYXRhKG5hbWUpOwotICAgICAgaXRlbS5zZXRUZXh0KG5hbWUpOwotICAgICAgaXRlbS5zZXRDaGVja2VkKCgoKEJvb2xlYW4pIG1ldGhvZHMuZ2V0KG5hbWUpKS5ib29sZWFuVmFsdWUoKSkpOwotCX0KLQkKLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JaWYoIGl0ZW1zLmxlbmd0aCA+IDAgKSAKLQl7Ci0JICBtZXRob2RzVHJlZV8uc2V0U2VsZWN0aW9uKCBuZXcgVHJlZUl0ZW1bXXsgaXRlbXNbMF0gfSApOwotCX0KLQkKLQlTdHJpbmcgc3R5bGUgPSBqYXZhUGFyYW1ldGVyLmdldFN0eWxlKCk7Ci0JCi0JaWYoIHN0eWxlLmVxdWFscyggSmF2YVdTRExQYXJhbWV0ZXIuU1RZTEVfUlBDICkgKQotCXsKLQkgIHJwY0VuY29kZWRCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLQl9Ci0JZWxzZSBpZiggc3R5bGUuZXF1YWxzKCBKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9ET0NVTUVOVCApICkKLQl7Ci0JICBycGNMaXRlcmFsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7CSAgCi0JfQotCWVsc2UKLQl7Ci0JICBkb2NMaXRlcmFsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7ICAKLQl9Ci0gIH0KLSAgCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhUGFyYW1ldGVyKCkKLSAgewotICAgIAotICAgIElQYXRoIHdzZGxQYXRoIAotICAgID0gbmV3IFBhdGgoIHdzZGxGb2xkZXJfLnRyaW0oKSApLmFwcGVuZCggd3NkbEZpbGVUZXh0Xy5nZXRUZXh0KCkudHJpbSgpICk7Ci0gICAgCi0JLy8gVE9ETyBEbyB3ZSBuZWVkIHRvIGdvIHRvIHRoZSBlY2xpcHNlIGZpbGUgc3lzdGVtPz8KLQkvL1N0cmluZyB3c2RsTG9jYXRpb24gPSB3b3Jrc3BhY2UuZ2V0RmlsZSh3c2RsUGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCVN0cmluZyB3c2RsTG9jYXRpb24gPSB3c2RsUGF0aC50b1N0cmluZygpOwotCQotCWphdmFQYXJhbWV0ZXJfLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCWphdmFQYXJhbWV0ZXJfLnNldElucHV0V3NkbExvY2F0aW9uKG5ldyBGaWxlKHdzZGxMb2NhdGlvbikudG9VUkkoKS50b1N0cmluZygpKTsKLQkKLQlIYXNodGFibGUgbWV0aG9kcyA9IG5ldyBIYXNodGFibGUoKTsKLQotCVRyZWVJdGVtW10gaXRlbXMgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLQkKLQlmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgCi0JewotCSAgVHJlZUl0ZW0gaXRlbSA9IGl0ZW1zW2ldOwotCSAgbWV0aG9kcy5wdXQoKFN0cmluZylpdGVtLmdldERhdGEoKSwgbmV3IEJvb2xlYW4oaXRlbS5nZXRDaGVja2VkKCkpKTsKLQl9Ci0JCi0JamF2YVBhcmFtZXRlcl8uc2V0TWV0aG9kcyhtZXRob2RzKTsKLQkKLQlpZiggcnBjRW5jb2RlZEJ1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIAotCXsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1JQQyk7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0VOQ09ERUQpOwotCX0gCi0JZWxzZSBpZiggcnBjTGl0ZXJhbEJ1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIAotCXsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX0RPQ1VNRU5UKTsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFVzZShKYXZhV1NETFBhcmFtZXRlci5VU0VfTElURVJBTCk7Ci0JfSAKLQllbHNlIAotCXsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1dSQVBQRUQpOwotCSAgamF2YVBhcmFtZXRlcl8uc2V0VXNlKEphdmFXU0RMUGFyYW1ldGVyLlVTRV9MSVRFUkFMKTsKLQl9Ci0gICAgCi0JcmV0dXJuIGphdmFQYXJhbWV0ZXJfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjZ2V0U3RhdHVzKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIAotICB7Ci0gICAgSVN0YXR1cyAgICAgICByZXN1bHQgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHdzZGxGaWxlVGV4dF8uZ2V0VGV4dCgpLmVxdWFscyggIiIgKSApCi0gICAgewotICAgICAgcmVzdWx0ID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfTk9fRklMRV9TUEVDSUZJRUQgKTsgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBUcmVlSXRlbVtdIGl0ZW1zICAgICAgICA9IG1ldGhvZHNUcmVlXy5nZXRJdGVtcygpOwotICAgICAgYm9vbGVhbiAgICBpdGVtU2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGlmKCBpdGVtc1tpbmRleF0uZ2V0Q2hlY2tlZCgpICkKLSAgICAgICAgewotICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoICFpdGVtU2VsZWN0ZWQgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19OT19NRVRIT0RfU0VMRUNURUQgKTsgCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotcHVibGljIHZvaWQgZXh0ZXJuYWxpemUoKSB7Ci0Jc3VwZXIuZXh0ZXJuYWxpemUoKTsKLQl3c2RsRmlsZVRleHRfLnN0b3JlV2lkZ2V0SGlzdG9yeSgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuLkJlYW5Db25maWdXaWRnZXQud3NkbEZpbGVUZXh0XyIpOwotfQotCi1wdWJsaWMgdm9pZCBpbnRlcm5hbGl6ZSgpIHsJCQotCQotCXdzZGxGaWxlVGV4dF8ucmVtb3ZlTGlzdGVuZXIoU1dULk1vZGlmeSwgc3RhdHVzTGlzdGVuZXJfKTsKLQl3c2RsRmlsZVRleHRfLnJlc3RvcmVXaWRnZXRIaXN0b3J5KCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW4uQmVhbkNvbmZpZ1dpZGdldC53c2RsRmlsZVRleHRfIik7Ci0gICAgd3NkbEZpbGVUZXh0Xy5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCBzdGF0dXNMaXN0ZW5lcl8pOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL1ZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL1ZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWMwNzQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9WYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSmF2YVJlc291cmNlRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIEpBVkFfRVhURU5TSU9OID0gIi5qYXZhIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFN0cmluZyBDTEFTU19FWFRFTlNJT04gPSAiLmNsYXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVByb2plY3ROYW1lOwotCi0gIAotICAvKioKLSAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHNlbGVjdGVkIEphdmEgYmVhbiBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHNlcnZpY2UgcHJvamVjdC4gSWYgaXQgY2FuJ3QsIGFuIGVycm9yIGlzIGRpc3BsYXllZC4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgLy9NYWtlIHN1cmUgYSBiZWFuIGlzIHNlbGVjdGVkCi0gICAgU3RyaW5nIGphdmFCZWFuTmFtZSA9IG51bGw7Ci0gICAgaWYgKG9iamVjdFNlbGVjdGlvbiAhPSBudWxsICYmICFvYmplY3RTZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBvYmplY3RTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgewotICAgICAgICBqYXZhQmVhbk5hbWUgPSAoKFN0cmluZylvYmplY3QpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCS8vVGhlIE9iamVjdFNlbGVjdGlvbldpZGdldCBuZXZlciBhcHBlYXJlZCBhbmQgc28gdGhlIElTdHVjdHVyZWRTZWxlY3Rpb24gZnJvbSAKLSAgICAgIAkvL09iamVjdFNlbGVjdGlvbldpZGdldE91dHB1dENvbW1hbmQgaXMgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAKLSAgICAgIAkvL0dldCB0aGUgSmF2YSBiZWFuIG5hbWUgZnJvbSB0aGUgc2VsZWN0aW9uLgotICAgICAgCXRyeQotCQl7Ci0gICAgICAJICBTeXN0ZW0ub3V0LnByaW50bG4ob2JqZWN0LmdldENsYXNzKCkudG9TdHJpbmcoKSk7Ci0gICAgICAJICBqYXZhQmVhbk5hbWUgPSBnZXRKYXZhQmVhbkZyb21PYmplY3RTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOKTsKLQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkgIHJldHVybiBlcnJvclN0YXR1czsJCQkKLQkJfQotICAgICAgfQotICAgIH0gICAgCi0gICAgCi0gICAgaWYgKGphdmFCZWFuTmFtZT09bnVsbCB8fCBqYXZhQmVhbk5hbWUubGVuZ3RoKCk9PTApCi0gICAgewotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU4pOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLSAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgLy9NYWtlIHN1cmUgYSBwcm9qZWN0IGlzIHNlbGVjdGVkCi0gICAgSVByb2plY3Qgc2VydmljZVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lKTsKLSAgICBpZiAoc2VydmljZVByb2plY3Q9PW51bGwpCi0gICAgewotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX05PX1BST0pFQ1QpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLSAgICAgIHJldHVybiBlcnJvclN0YXR1czsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9NYWtlIHN1cmUgdGhlIHNlbGVjdGVkIGJlYW4gY2FuIGJlIGxvYWRlZCBmcm9tIHRoZSBzZWxlY3RlZCBwcm9qZWN0Ci0JaWYgKGphdmFCZWFuTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKEpBVkFfRVhURU5TSU9OKQotCQl8fCBqYXZhQmVhbk5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChDTEFTU19FWFRFTlNJT04pKSB7Ci0JCWphdmFCZWFuTmFtZSA9IGphdmFCZWFuTmFtZS5zdWJzdHJpbmcoMCwgamF2YUJlYW5OYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCX0KLQkKLSAgICB0cnkKLSAgICB7Ci0JICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhqYXZhQmVhbk5hbWUsIHNlcnZpY2VQcm9qZWN0KTsgCi0JICBpZiAoIWphdmFDbGFzcy5pc0V4aXN0aW5nVHlwZSgpKSAKLQkgIHsJCQotCQlJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9MT0FEX0pBVkFfQkVBTiwgbmV3IFN0cmluZ1tdIHsgamF2YUJlYW5OYW1lLCBzZXJ2aWNlUHJvamVjdE5hbWUgfSkpOwotCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQlyZXR1cm4gZXJyb3JTdGF0dXM7Ci0JICB9Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0JICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9MT0FEX0pBVkFfQkVBTiwgbmV3IFN0cmluZ1tdIHsgamF2YUJlYW5OYW1lLCBzZXJ2aWNlUHJvamVjdE5hbWUgfSkpOwotCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLSAgICAgIHJldHVybiBlcnJvclN0YXR1czsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gc2VydmljZVByb2plY3ROYW1lIFRoZSBzZXJ2aWNlUHJvamVjdE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3ROYW1lKFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUpCi0gIHsKLSAgICB0aGlzLnNlcnZpY2VQcm9qZWN0TmFtZSA9IHNlcnZpY2VQcm9qZWN0TmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBvYmplY3RTZWxlY3Rpb24gVGhlIG9iamVjdFNlbGVjdGlvbiB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5vYmplY3RTZWxlY3Rpb24gPSBvYmplY3RTZWxlY3Rpb247Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRKYXZhQmVhbkZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGJlYW5DbGFzcyA9ICIiOwotICAgIEphdmFSZXNvdXJjZUZpbHRlciBmaWx0ZXIgPSBuZXcgSmF2YVJlc291cmNlRmlsdGVyKCk7IAotICAgIC8vSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gaW5pdGlhbFNlbGVjdGlvbl87Ci0gICAgLy8KLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IG9iamVjdFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBJUmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHNlbGVjdGlvbgotICAgICAgICBJUmVzb3VyY2UgcmVzID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJlcyA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgIAotICAgICAgICBpZiAoZmlsdGVyLmFjY2VwdHMocmVzKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGdldCB0aGUgcGFja2FnZS1xdWFsaWZpZWQgY2xhc3MgbmFtZSB3aXRob3V0IGZpbGUgZXh0ZW5zaW9ucwotICAgICAgICAgIFN0cmluZyBiZWFuUGFja2FnZSA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUocmVzLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIGlmIChiZWFuUGFja2FnZT09bnVsbCkKLSAgICAgICAgICAgIGJlYW5QYWNrYWdlID0gIiI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmVhblBhY2thZ2UgPSBiZWFuUGFja2FnZSArICIuIjsKLQotICAgICAgICAgIGJlYW5DbGFzcyA9IGJlYW5QYWNrYWdlICsgcmVzLmdldE5hbWUoKTsKLQotICAgICAgICAgIGlmIChiZWFuQ2xhc3MudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmphdmEiKSB8fCBiZWFuQ2xhc3MudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgIGJlYW5DbGFzcyA9IGJlYW5DbGFzcy5zdWJzdHJpbmcoMCxiZWFuQ2xhc3MubGFzdEluZGV4T2YoJy4nKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vCi0gICAgcmV0dXJuIGJlYW5DbGFzczsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjYjFlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL0F4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XU0RMUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb247Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0gIAotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0gICAgamF2YVdTRExQYXJhbSA9IG5ldyBKYXZhV1NETFBhcmFtZXRlcigpOwotICAgIGphdmFXU0RMUGFyYW0uc2V0U2VydmVyU2lkZShKYXZhV1NETFBhcmFtZXRlci5TRVJWRVJfU0lERV9CRUFOKTsKLSAgICBqYXZhV1NETFBhcmFtLnNldFNrZWxldG9uRGVwbG95KHRydWUpOwotICAgIGphdmFXU0RMUGFyYW0uc2V0TWV0YUluZk9ubHkoZmFsc2UpOwotICAgIGphdmFXU0RMUGFyYW0uc2V0SW5wdXRXc2RsTG9jYXRpb24od3NkbFVSSV8pOwotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLmluaXRpYWxTZWxlY3Rpb24gPSBpbml0aWFsU2VsZWN0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotICAKLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlc1BhcnNlciA9PSBudWxsKQotCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IFdTRExQYXJzZXJGYWN0b3J5LmdldFdTRExQYXJzZXIoKTsKLSAgICByZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQotICB7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgT2JqZWN0IGZpcnN0RWxlbWVudCA9IGluaXRpYWxTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAoZmlyc3RFbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIElGaWxlIGlmaWxlID0gKElGaWxlKWZpcnN0RWxlbWVudDsKLSAgICAgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSBpZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0gICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmVxdWFscygid3NkbCIpIHx8Ci0gICAgICAgICAgICBmaWxlRXh0ZW5zaW9uLmVxdWFscygid3NpbCIpIHx8Ci0gICAgICAgICAgICBmaWxlRXh0ZW5zaW9uLmVxdWFscygiaHRtbCIpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGlmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotCSAgcmV0dXJuIHdzZGxVUklfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0JICB3c2RsVVJJXyA9IHdzZGxVUkk7Ci0JICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuV1NJTCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVSSSgpCi0gIHsKLSAgICBTdHJpbmcgd3NVUkkgPSBnZXRXc2RsVVJJKCk7Ci0gICAgaW50IGluZGV4ID0gd3NVUkkubGFzdEluZGV4T2YoJy4nKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih3c1VSSS5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKLSAgICAgIHNiLmFwcGVuZCgiLndzaWwiKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLSAgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkuZ2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhVc2VybmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZXNQYXJzZXIoKS5nZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoKTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2MDMwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTA2ICAgMTIxMTk5IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIE34bGxlcgotICogMjAwNjAzMjEgICAxMjg4Mjcgam9hbiAtIEpvYW4gSGFnZ2FydHksIHJlbW92ZSByZWR1bmRhbnQgd3NkbCBVUkksIGZvbGRlciBhbmQgZmlsZSBjb250cm9scwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIFNrZWxldG9uQ29uZmlnV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLQotICAvKiBDT05URVhUX0lEIFBCU0MwMDAxIGZvciB0aGUgU2tlbGV0b24gQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElORk9QT1BfUEJTQ19QQUdFID0gIlBCU0MwMDAxIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgLy8gcHJpdmF0ZSBUZXh0IHVyaVRleHRfOwotICAvKiBDT05URVhUX0lEIFBCQ0YwMDAyIGZvciB0aGUgVVJJIGZpZWxkIG9mIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIC8vcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQkNGX1RFWFRfVVJJID0gIlBCQ0YwMDAyIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBDb21ibyBza2VsZXRvbkZvbGRlclRleHRfOwotICAvKiBDT05URVhUX0lEIFBCU0MwMDA0IGZvciB0aGUgU2tlbGV0b24gRm9sZGVyIGZpZWxkIG9mIHRoZSBTa2VsZXRvbiBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQlNDX1RFWFRfU0tFTEVUT05fRk9MREVSID0gIlBCU0MwMDA0IjsgLy8kTk9OLU5MUy0xJAotCi0KLSAgLyogQ09OVEVYVF9JRCBQQlNDMDAwNSBmb3IgdGhlIFNrZWxldG9uIEZvbGRlciBCcm93c2UgYnV0dG9uIG9mIHRoZSBTa2VsZXRvbiBDb25maWcgUGFnZSAqLwotICAvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFID0gIlBCU0MwMDA1IjsgLy8kTk9OLU5MUy0xJAotICAvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTFRJUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFID0gIlRPT0xUSVBfUEJTQ19CVVRUT05fU0tFTEVUT05fRk9MREVSX0JST1dTRSI7Ci0gIAotICBwcml2YXRlIEJ1dHRvbiBzaG93TWFwcGluZ3NDaGVja2JveF87Ci0gIC8qIENPTlRFWFRfSUQgUEJTQzAwMTYgZm9yIHRoZSBTaG93IE1hcHBpbmdzIGNoZWNrYm94IG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZSAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9OMlBfU0hPV19NQVBQSU5HUyA9ICJQQlNDMDAxNiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdF87Ci0JCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIFN0cmluZyAgICAgICBwbHVnaW5JZCAgICAgICAgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiOwotICAgIAotICAgIFVJVXRpbHMgICAgICB1aVV0aWxzICAgICAgICAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWQgKTsKLSAgICBVSVV0aWxzICAgICAgY29uVWlVdGlscyAgICAgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkICk7Ci0gICAgVUlVdGlscyAgICAgIGJhc2VDb25VaVV0aWxzICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZCApOwotCi0gIAlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBwYXJlbnQsIHBsdWdpbklkICsgIi4iICsgIElORk9QT1BfUEJTQ19QQUdFICk7Ci0gIAlwYXJlbnQuc2V0VG9vbFRpcFRleHQoIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQlNDX1BBR0UgKTsKLSAgICAKLSAgICBDb21wb3NpdGUgdGV4dEdyb3VwID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMiwgMCwgMCApOwotCi0gICAgLyoKLSAgICB1cmlUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCggdGV4dEdyb3VwLCAiTEFCRUxfVVJJIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE9PTFRJUF9QQkNGX1RFWFRfVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0ZfVEVYVF9VUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgICovCi0gICAgCi0gICAgc2tlbGV0b25Gb2xkZXJUZXh0XyA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZUNvbWJvKCB0ZXh0R3JvdXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TS0VMRVRPTl9ST09UX05BTUUsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQlNDX1RFWFRfU0tFTEVUT05fRk9MREVSLAotICAgICAgICBJTkZPUE9QX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVIsCi0gICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfID0gY29uVWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0VYUExPUkVfTUFQUElOR1NfWE1MMkJFQU4sCi0gICAgCQkJCQkJCQkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9OMlBfU0hPV19NQVBQSU5HUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX04yUF9TSE9XX01BUFBJTkdTICk7Ci0gICAgICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludFVSSShTdHJpbmcgZW5kcG9pbnRVUkkpCi0gIHsKLSAgCS8qCi0gICAgaWYgKGVuZHBvaW50VVJJICE9IG51bGwpCi0gICAgICB1cmlUZXh0Xy5zZXRUZXh0KGVuZHBvaW50VVJJKTsKLSAgICAqLwotICB9ICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldE91dHB1dEphdmFGb2xkZXIoU3RyaW5nIG91dHB1dEphdmFGb2xkZXIpCi0gIHsKLSAgICBpZiAob3V0cHV0SmF2YUZvbGRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IHNrZWxldG9uRm9sZGVyVGV4dF8uaW5kZXhPZihvdXRwdXRKYXZhRm9sZGVyKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZWxlY3QoaW5kZXgpOwotICAgICAgZWxzZSBpZiAoc2tlbGV0b25Gb2xkZXJUZXh0Xy5nZXRJdGVtQ291bnQoKSA8PSAwKQotICAgICAgewotICAgICAgICBTdHJpbmcgcm9vdCA9IGdldFdvcmtzcGFjZVJvb3RMb2NhdGlvbigpOwotICAgICAgICBpZiAob3V0cHV0SmF2YUZvbGRlci5zdGFydHNXaXRoKHJvb3QpKQotICAgICAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2V0VGV4dChvdXRwdXRKYXZhRm9sZGVyLnN1YnN0cmluZyhyb290Lmxlbmd0aCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBza2VsZXRvbkZvbGRlclRleHRfLnNldFRleHQob3V0cHV0SmF2YUZvbGRlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTaG93TWFwcGluZyhib29sZWFuIHNob3dNYXBwaW5nKQotICB7Ci0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLnNldFNlbGVjdGlvbihzaG93TWFwcGluZyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dNYXBwaW5nKCkKLSAgewotICAgIHJldHVybiBzaG93TWFwcGluZ3NDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotICAgKi8KLSAgcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0KLS8vCSAgRG8gbm90IGJhc2UgSmF2YSBvdXRwdXQgZGlyZWN0b3J5IG9uIHdvcmtzcGFjZSByb290IHNpbmNlIHRoZSBwcm9qZWN0IGNvdWxkIGJlIG5vdCAKLS8vCSAgcGh5c2ljYWxseSBsb2NhdGVkIGluIHRoZSB3b3Jrc3BhY2Ugcm9vdCwgZ2V0IHRoZSBwcm9qZWN0IHNwZWNpZmljIHJvb3QgaW5zdGVhZAotCSAgCi0JICBTdHJpbmcgcHJvamVjdFNwZWNpZmljUm9vdCA9IHNlcnZlclByb2plY3RfLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkgIFN0cmluZyBza2VsZXRvbkZvbGRlciA9IHNrZWxldG9uRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwotCSAgU3RyaW5nIHByb2plY3RQYXRoU3RyaW5nID0gc2VydmVyUHJvamVjdF8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCSAgaWYgKHNrZWxldG9uRm9sZGVyLnN0YXJ0c1dpdGgocHJvamVjdFBhdGhTdHJpbmcpKSB7Ci0JCSAgc2tlbGV0b25Gb2xkZXIgPSBza2VsZXRvbkZvbGRlci5zdWJzdHJpbmcocHJvamVjdFBhdGhTdHJpbmcubGVuZ3RoKCkpOwotCSAgfQotCSAgamF2YVdTRExQYXJhbS5zZXRKYXZhT3V0cHV0KHByb2plY3RTcGVjaWZpY1Jvb3QgKyBza2VsZXRvbkZvbGRlcik7Ci0JICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0gIHsKLQkgIHNlcnZlclByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0gICAgU3RyaW5nIG9yaWdpbmFsU2tlbGV0b25Gb2xkZXIgPSBza2VsZXRvbkZvbGRlclRleHRfLmdldFRleHQoKTsKLSAgICBza2VsZXRvbkZvbGRlclRleHRfLnJlbW92ZUFsbCgpOwotICAgIElQYXRoW10gcGF0aHMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMoc2VydmljZVByb2plY3QpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoIDsgaSsrKQotICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5hZGQocGF0aHNbaV0udG9TdHJpbmcoKSk7Ci0gICAgaW50IGluZGV4ID0gc2tlbGV0b25Gb2xkZXJUZXh0Xy5pbmRleE9mKG9yaWdpbmFsU2tlbGV0b25Gb2xkZXIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2VsZWN0KGluZGV4KTsKLSAgICBlbHNlCi0gICAgICBza2VsZXRvbkZvbGRlclRleHRfLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V29ya3NwYWNlUm9vdExvY2F0aW9uKCkKLSAgewotICAJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS5yZW1vdmVUcmFpbGluZ1NlcGFyYXRvcigpLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYmU4OGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQotICBwdWJsaWMgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCggKQotICB7Ci0gIH0KLSAgCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJCi0JCVN0cmluZyBvdXRwdXREaXIgPQlSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aCggc2VydmVyUHJvamVjdCApKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCWphdmFXU0RMUGFyYW0uc2V0T3V0cHV0KCBvdXRwdXREaXIgKTsKLS8vCQlEbyBub3QgYmFzZSBKYXZhIG91dHB1dCBkaXJlY3Rvcnkgb24gd29ya3NwYWNlIHJvb3Qgc2luY2UgdGhlIHByb2plY3QgY291bGQgYmUgbm90IHBoeXNpY2FsbHkgbG9jYXRlZCBpbiB0aGUgd29ya3NwYWNlIHJvb3QKLS8vCQlqYXZhV1NETFBhcmFtLnNldEphdmFPdXRwdXQoZ2V0Um9vdFVSTCgpICsgZ2V0T3V0cHV0SmF2YUZvbGRlcigpKTsgCi0JCVN0cmluZyBqYXZhT3V0cHV0ID0JUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZ2V0T3V0cHV0SmF2YUZvbGRlcigpKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dChqYXZhT3V0cHV0KTsKLQkKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpCi0gIHsKLSAgICB0aGlzLnNlcnZlclByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmVyUHJvamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50VVJJKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdTRExGb2xkZXIoKQotICB7Ci0JICBJUGF0aCB3c2RsUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChzZXJ2ZXJQcm9qZWN0ICkuYXBwZW5kKCJ3c2RsIik7Ci0gICAgICByZXR1cm4gd3NkbFBhdGgudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPdXRwdXRXU0RMRmlsZSgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB3c2RsVVJJLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaW5kZXggPSB3c2RsVVJJLmxhc3RJbmRleE9mKCdcXCcpOwotICAgIHJldHVybiB3c2RsVVJJLnN1YnN0cmluZyhpbmRleCsxLCB3c2RsVVJJLmxlbmd0aCgpKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPdXRwdXRKYXZhRm9sZGVyKCkKLSAgewotICAgIGlmIChzZXJ2ZXJQcm9qZWN0IT1udWxsKXsKLSAgICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihzZXJ2ZXJQcm9qZWN0KS50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dNYXBwaW5nKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTaG93TWFwcGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2hvd01hcHBpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKQotICB7Ci0gIAl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0gIAotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi1wdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKSB7Ci0JcmV0dXJuIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotfQotCi1wdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEKSB7Ci0JdGhpcy5zZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZpY2VTZXJ2ZXJUeXBlSUQ7Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aXphcmQvYmVhbnMvV1NCZWFuQXhpc1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC9iZWFucy9XU0JlYW5BeGlzVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDRiY2UxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC9iZWFucy9XU0JlYW5BeGlzVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjMgICAxNDMyODQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDYwNSAgIDE0NTQwNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2l6YXJkLmJlYW5zOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc01hcHBpbmdzV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5KYXZhVG9XU0RMTWV0aG9kQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW4uQmVhbkNvbmZpZ1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIGNsYXNzIGZvciB0aGUKLSogQXhpcyBib3R0b20gdXAgSmF2YSBCZWFuIHNjZW5hcmlvCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBXU0JlYW5BeGlzVHlwZSBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17CQotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJOYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcnVudGltZU5hbWVfOwotICBwcml2YXRlIGJvb2xlYW4gaXNXZWJNb2R1bGVSZXF1aXJlZF87Ci0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgU2VydmVyIHN1cHBvcnRlZCBieSB0aGlzIFdlYiBTZXJ2aWNlIHR5cGUKLSAgKiBAcmV0dXJuIEEgbG9jYWxlIHNwZWNpZmljIHNlcnZlciBsYWJlbCBmcm9tIHNlcnZlciBwbHVnaW5zCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlck5hbWVfOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgc2VydmVyIGxhYmVsIHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lIGZvdW5kIGluIHRoZSBzZXJ2ZXIgcGx1Z2lucy4KLSAgKiBAcGFyYW0gc2VydmVyIG5hbWUKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyTGFiZWwoU3RyaW5nIHNlcnZlckxhYmVsKQotICB7Ci0gICAgc2VydmVyTmFtZV8gPSBzZXJ2ZXJMYWJlbDsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyBhIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIGRlcGxveW1lbnQgcnVudGltZSBvZiB0aGlzIFdlYiBTZXJ2aWNlIHR5cGUKLSAgKiBAcmV0dXJuIEEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgZGVwbG95bWVudCBydW50aW1lCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUxhYmVsKCkKLSAgewotICAgIHJldHVybiBydW50aW1lTmFtZV87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSBydW50aW1lIGxhYmVsIGZvciB0aGUgYXBwcm9wcmlhdGUgcnVudGltZQotICAqIEBwYXJhbSBzZXJ2ZXIgbmFtZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lTGFiZWwoU3RyaW5nIHJ1bnRpbWVMYWJlbCkKLSAgewotICAgIHJ1bnRpbWVOYW1lXyA9IHJ1bnRpbWVMYWJlbDsKLSAgfQotCi0KLSAgLyoqCi0gICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhIFdlYiBNb2R1bGUgaXMgcmVxdWlyZWQgZm9yIHRoaXMgV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlCi0gICogQHJldHVybiB0cnVlIGlmIHJlcXVpcmVXZWJNb2R1bGUKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXZWJNb2R1bGVSZXF1aXJlZCgpCi0gIHsKLSAgICByZXR1cm4gaXNXZWJNb2R1bGVSZXF1aXJlZF87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSBib29sZWFuIHZhbHVlIGF0IHJ1bnRpbWUgYWNjb3JkaW5nIHRvIHJlcXVpcmVXZWJNb2R1bGUgYXR0cmlidXRlIGZyb20gdGhlIG1hbmlmZXN0IGZpbGUKLSAgKiBAcGFyYW0gcmVxdWlyZVdlYk1vZHVsZSAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViTW9kdWxlUmVxdWlyZWQoYm9vbGVhbiByZXF1aXJlV2ViTW9kdWxlKQotICB7Ci0gICAgaXNXZWJNb2R1bGVSZXF1aXJlZF8gPSByZXF1aXJlV2ViTW9kdWxlOwotICB9Ci0KLSAgCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5XZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUjaXNFSkJNb2R1bGVSZXF1aXJlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNFSkJNb2R1bGVSZXF1aXJlZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlI3NldEVKQk1vZHVsZVJlcXVpcmVkKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0RUpCTW9kdWxlUmVxdWlyZWQoYm9vbGVhbiBhcmcwKSB7Ci0JCXJldHVybjsKLQotCX0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLSAgewotICAgIC8qCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEN1cnJlbnRQYWdlQ29tbWFuZC5jbGFzcywgIkN1cnJlbnRQYWdlIiwgQmVhbkNsYXNzV2lkZ2V0LmNsYXNzICk7Ci0gICAgLy9CZWFuQ2xhc3NXaWRnZXQgLSBhcyB0YXJnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFCZWFuTmFtZSIsIEJlYW5DbGFzc1dpZGdldC5jbGFzcywgIkJlYW5DbGFzc05hbWUiLCBudWxsKTsKLSAgICAvL0JlYW5DbGFzc1dpZGdldCAtIGFzIHNvdXJjZQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5DbGFzc1dpZGdldC5jbGFzcywgIkJlYW5DbGFzc05hbWUiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFCZWFuTmFtZSIsIG51bGwpOyAgICAvL0JlYW5Db25maWdXaWRnZXQKLSAgICAqLwotICAgIC8vIE9iamVjdFNlbGVjdGlvbldpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbldpZGdldC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvL0JlYW5Db25maWdXaWRnZXQgLSBhcyB0YXJnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIG51bGwgKTsKLSAgICAvL0JlYW5Db25maWdXaWRnZXQgLSBhcyBzb3VyY2UKLQotICAgIC8vICBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0KLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgSmF2YTJXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgICAgICAgCi0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIFdTREwySmF2YUNvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLSAgICAvL0F4aXNNYXBwaW5nc1dpZGdldCAtIGFzIHRhcmdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvL0F4aXNNYXBwaW5nc1dpZGdldCAtIGFzIHNvdXJjZQotCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgICAgICAgCi0gIAotICAgIAotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIERlZmF1bHRzRm9yQ29uZmlnLmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIEJlYW5Db25maWdXaWRnZXQuY2xhc3MgKTsKLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBEZWZhdWx0c0ZvckNvbmZpZy5jbGFzcywgIkN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncyIsIEJlYW5Db25maWdXaWRnZXQuY2xhc3MgKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpIAotICB7Ci0gICAKLSAgICAvKgotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkJlYW5TZWxlY3Rpb24iLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU0JFQU5fQ0xBU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU0JFQU5fQ0xBU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJlYW5DbGFzc1dpZGdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgKi8KLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkJlYW5Db25maWciLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU0JFQU5fQ09ORklHLAotICAgICAgICAgICAgICAgICAgICAgICAgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NCRUFOX0NPTkZJRywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmVhbkNvbmZpZ1dpZGdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0KLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkF4aXNTZXJ2aWNlQmVhbk1hcHBpbmciLCAKLSAgICAJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19CRUFOMlhNTCwKLSAgICAJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1AyTl9NQVBQSU5HUywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXhpc01hcHBpbmdzV2lkZ2V0KEF4aXNNYXBwaW5nc1dpZGdldC5NT0RFX0JFQU4yWE1MICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5I2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKSAKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgewotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgewotICAgICAgICAgIC8vZGVhZCBjb2RlIC0gZG9lc24ndCBtYXR0ZXIgd2hhdCBnZXRzIHJldHVybmVkIGhlcmUuCi0gICAgCSAgcmV0dXJuIG5ldyBTaW1wbGVGcmFnbWVudCgpOwotICAgICAgfQotICAgIH07Ci0gIH0KLSAgICAKLX0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC93c2RsL1dTV1NETEF4aXNUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aXphcmQvd3NkbC9XU1dTRExBeGlzVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTNkYjg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC93c2RsL1dTV1NETEF4aXNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzIxICAgMTI4ODI3IGpvYW4gLSBKb2FuIEhhZ2dhcnR5LCByZW1vdmUgcmVkdW5kYW50IHdzZGwgVVJJLCBmb2xkZXIgYW5kIGZpbGUgY29udHJvbHMKLSAqIDIwMDYwNTIzICAgMTQzMjg0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA2MDUgICAxNDU0MDcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2l6YXJkLndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc01hcHBpbmdzRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzTWFwcGluZ3NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLlNrZWxldG9uQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBjbGFzcyBmb3IgdGhlIEF4aXMgV2ViIHNlcnZpY2UgdHlwZS4KLSovCi1wdWJsaWMgY2xhc3MgV1NXU0RMQXhpc1R5cGUgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZyAKLXsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJOYW1lXzsKLQlwcml2YXRlIFN0cmluZyBydW50aW1lTmFtZV87Ci0JcHJpdmF0ZSBib29sZWFuIGlzV2ViTW9kdWxlUmVxdWlyZWRfOwotCi0JLyoqCi0JKiBSZXR1cm5zIGEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgU2VydmVyIHN1cHBvcnRlZCBieSB0aGlzIFdlYiBTZXJ2aWNlIHR5cGUKLQkqIEByZXR1cm4gQSBsb2NhbGUgc3BlY2lmaWMgc2VydmVyIGxhYmVsIGZyb20gc2VydmVyIHBsdWdpbnMKLQkqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTGFiZWwoKSB7Ci0JCXJldHVybiBzZXJ2ZXJOYW1lXzsKLQl9Ci0KLQkvKioKLQkqIFNldHMgdGhlIHNlcnZlciBsYWJlbCB0byB0aGUgYXBwcm9wcmlhdGUgbmFtZSBmb3VuZCBpbiB0aGUgc2VydmVyIHBsdWdpbnMuCi0JKiBAcGFyYW0gc2VydmVyIG5hbWUKLQkqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlckxhYmVsKFN0cmluZyBzZXJ2ZXJMYWJlbCkgewotCQlzZXJ2ZXJOYW1lXyA9IHNlcnZlckxhYmVsOwotCX0KLQotCS8qKgotCSogUmV0dXJucyBhIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIGRlcGxveW1lbnQgcnVudGltZSBvZiB0aGlzIFdlYiBTZXJ2aWNlIHR5cGUKLQkqIEByZXR1cm4gQSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBkZXBsb3ltZW50IHJ1bnRpbWUKLQkqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUxhYmVsKCkgewotCQlyZXR1cm4gcnVudGltZU5hbWVfOwotCX0KLQotCS8qKgotCSogU2V0cyB0aGUgcnVudGltZSBsYWJlbCBmb3IgdGhlIGFwcHJvcHJpYXRlIHJ1bnRpbWUKLQkqIEBwYXJhbSBzZXJ2ZXIgbmFtZQotCSovCi0JcHVibGljIHZvaWQgc2V0UnVudGltZUxhYmVsKFN0cmluZyBydW50aW1lTGFiZWwpIHsKLQkJcnVudGltZU5hbWVfID0gcnVudGltZUxhYmVsOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhIFdlYiBNb2R1bGUgaXMgcmVxdWlyZWQgZm9yIHRoaXMgV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlCi0JKiBAcmV0dXJuIHRydWUgaWYgcmVxdWlyZVdlYk1vZHVsZQotCSovCi0JcHVibGljIGJvb2xlYW4gaXNXZWJNb2R1bGVSZXF1aXJlZCgpIHsKLQkJcmV0dXJuIGlzV2ViTW9kdWxlUmVxdWlyZWRfOwotCX0KLQotCS8qKgotCSogU2V0cyB0aGUgYm9vbGVhbiB2YWx1ZSBhdCBydW50aW1lIGFjY29yZGluZyB0byByZXF1aXJlV2ViTW9kdWxlIGF0dHJpYnV0ZSBmcm9tIHRoZSBtYW5pZmVzdCBmaWxlCi0JKiBAcGFyYW0gcmVxdWlyZVdlYk1vZHVsZSAKLQkqLwotCXB1YmxpYyB2b2lkIHNldFdlYk1vZHVsZVJlcXVpcmVkKGJvb2xlYW4gcmVxdWlyZVdlYk1vZHVsZSkgewotCQlpc1dlYk1vZHVsZVJlcXVpcmVkXyA9IHJlcXVpcmVXZWJNb2R1bGU7Ci0JfQotCi0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLldlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSNpc0VKQk1vZHVsZVJlcXVpcmVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0VKQk1vZHVsZVJlcXVpcmVkKCkgewotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlI3NldEVKQk1vZHVsZVJlcXVpcmVkKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0RUpCTW9kdWxlUmVxdWlyZWQoYm9vbGVhbiBhcmcwKSB7Ci0JCXJldHVybjsKLQotCX0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgCi0gIHsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gICAgLy8gU2tlbGV0b25Db25maWdXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBuZXcgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVuZHBvaW50VVJJIiwgU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJPdXRwdXRKYXZhRm9sZGVyIiwgU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTaG93TWFwcGluZyIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzKTsKLQotICAgIC8vICBCYWNrdXBTa2VsSW1wbENvbW1hbmQgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLSAgICAKLSAgICAvLyBBeGlzTWFwcGluZ3NGcmFnbWVudAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTaG93TWFwcGluZyIsIEF4aXNNYXBwaW5nc0ZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIlNob3dNYXBwaW5nIiwgQXhpc01hcHBpbmdzRnJhZ21lbnQuY2xhc3MpOwotCi0gICAgLy8gQXhpc01hcHBpbmdzV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIG51bGwpOwotCi0gICAgLy8gV1NETDJKYXZhQ29tbWFuZAotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBXU0RMMkphdmFDb21tYW5kLmNsYXNzKTsKLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFdTREwySmF2YUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpIAotICB7Ci0gICAKLSAgICAvKgotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIldTRExTZWxlY3Rpb24iLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NFTEVDVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0VMRUNUSU9OLAotCQkgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkgICAgICAgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCSAgICAgICAgICAgICAgICAgIH0KLQkJICAgICAgICAgICAgICAgIH0gKTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIldTRExTZWxlY3Rpb25UcmVlV2lkZ2V0IiwgCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTRExfU0VMRUNUSU9OLAotICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTRExfU0VMRUNUSU9OLAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgKi8KLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIlNrZWxldG9uQ29uZmlnIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU1NLRUxfQ09ORklHLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU1NLRUxfQ09ORklHLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTa2VsZXRvbkNvbmZpZ1dpZGdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJBeGlzTWFwcGluZ3NXaWRnZXQiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1hNTDJCRUFOLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19OMlBfTUFQUElOR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF4aXNNYXBwaW5nc1dpZGdldChBeGlzTWFwcGluZ3NXaWRnZXQuTU9ERV9YTUwyQkVBTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5I2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKSAKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgewotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgewotICAgICAgICAgIC8vZGVhZCBjb2RlIC0gZG9lc24ndCBtYXR0ZXIgd2hhdCBnZXRzIHJldHVybmVkIGhlcmUuIAotICAgIAkgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdlNmI1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW4uQmVhbkNvbmZpZ1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQuYmVhbnMuV1NCZWFuQXhpc1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEF4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeSBpbXBsZW1lbnRzIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB7Ci0KLQlwcml2YXRlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yICAgICAgICAgICAgIGJlYW5Db25maWdXaWRnZXRfOwotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgbWFwcGluZ3NXaWRnZXRfOwotCXByaXZhdGUgQmVhbkNvbmZpZ1dpZGdldCAgICAgICAgICAgICAgICAgICAgYmVhbldpZGdldF87Ci0JcHJpdmF0ZSBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciBhZGFwdGVyXzsKLQkKLQlwdWJsaWMgQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5KCkKLQl7Ci0JICBhZGFwdGVyXyA9IG5ldyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciggbmV3IFdTQmVhbkF4aXNUeXBlKCkgKTsKLQkgIAotCSAgYmVhbkNvbmZpZ1dpZGdldF8gPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJCZWFuQ29uZmlnIiApOwotCSAgYmVhbldpZGdldF8gICAgICAgPSAoQmVhbkNvbmZpZ1dpZGdldCliZWFuQ29uZmlnV2lkZ2V0Xy5nZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKS5jcmVhdGUoKTsKLQkgIG1hcHBpbmdzV2lkZ2V0XyAgID0gYWRhcHRlcl8uZ2V0V2lkZ2V0KCAiQXhpc1NlcnZpY2VCZWFuTWFwcGluZyIgKTsKLQl9Ci0JCi0JcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKSAKLQl7Ci0JICByZXR1cm4gYmVhbkNvbmZpZ1dpZGdldF87Ci0JfQotCi0JcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldE5leHROYW1lZFdpZGdldCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0Q29udHJpYnV0b3IpIAotCXsKLQkgIHJldHVybiB3aWRnZXRDb250cmlidXRvciA9PSBiZWFuQ29uZmlnV2lkZ2V0XyAmJiBiZWFuV2lkZ2V0Xy5nZXRDdXN0b21pemVTZXJ2aWNlTWFwcGluZ3MoKSA/IG1hcHBpbmdzV2lkZ2V0XyA6IG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLQl7Ci0JICBhZGFwdGVyXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5ICk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4YjhmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQud3NkbC5XU1dTRExBeGlzVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeSBpbXBsZW1lbnRzIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB7Ci0KLQlwcml2YXRlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yICAgICAgICAgICAgIHNrZWxDb25maWdXaWRnZXRfOwotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgbWFwcGluZ3NXaWRnZXRfOwotCXByaXZhdGUgU2tlbGV0b25Db25maWdXaWRnZXQgICAgICAgICAgICAgICAgc2tlbFdpZGdldF87Ci0JcHJpdmF0ZSBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciBhZGFwdGVyXzsKLQkKLQlwdWJsaWMgQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeSgpCi0JewotCSAgYWRhcHRlcl8gPSBuZXcgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIoIG5ldyBXU1dTRExBeGlzVHlwZSgpICk7Ci0JICAKLQkgIHNrZWxDb25maWdXaWRnZXRfID0gYWRhcHRlcl8uZ2V0V2lkZ2V0KCAiU2tlbGV0b25Db25maWciICk7Ci0JICBza2VsV2lkZ2V0XyAgICAgICA9IChTa2VsZXRvbkNvbmZpZ1dpZGdldClza2VsQ29uZmlnV2lkZ2V0Xy5nZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKS5jcmVhdGUoKTsKLQkgIG1hcHBpbmdzV2lkZ2V0XyAgID0gYWRhcHRlcl8uZ2V0V2lkZ2V0KCAiQXhpc01hcHBpbmdzV2lkZ2V0IiApOwotCX0KLQkKLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotCXsKLQkgIHJldHVybiBza2VsQ29uZmlnV2lkZ2V0XzsKLQl9Ci0KLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0JewotCSAgcmV0dXJuIHdpZGdldENvbnRyaWJ1dG9yID09IHNrZWxDb25maWdXaWRnZXRfICYmIHNrZWxXaWRnZXRfLmdldFNob3dNYXBwaW5nKCkgPyBtYXBwaW5nc1dpZGdldF8gOiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0JewotCSAgYWRhcHRlcl8ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeSApOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4MTczNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMzMCAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjMyNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTI0ICAgMTMwNzU1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwNyAgIDE0NDk3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MTAgICAxMzUzOTUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEVuYWJsZSBXVFAgV2ViIHNlcnZpY2UgZnJhbWV3b3JrIG9wZW5pbmcgSmF2YSBlZGl0b3IKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICogMjAwODAyMjcgICAxMTk5NjQgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqIDIwMDgxMTExICAgMjUyMDYyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgRG9uJ3QgZGVwZW5kIG9uIEF1dG9CdWlsZCB0byBjb21waWxlIGJlYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkF4aXNEZXBsb3lDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5HZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suVmFsaWRhdGVXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQXhpc091dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5BeGlzUnVuSW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVBeGlzSW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkphdmFUb1dTRExNZXRob2RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5UREF4aXNJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5WYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQlVDb25maWdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5URENvbmZpZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuLkJVQXhpc0RlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZEJlYW5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZSBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZQotewotCXByaXZhdGUgQXhpc1dlYlNlcnZpY2VJbmZvIGF4aXNXZWJTZXJ2aWNlSW5mb187Ci0KLQlwdWJsaWMgQXhpc1dlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbykKLQl7Ci0JCXN1cGVyKGluZm8pOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LAotCQkJSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCQotCQlWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50IGVudmlyb25tZW50ID0gKEVjbGlwc2VFbnZpcm9ubWVudCllbnY7Ci0JCQotCQlpZiAoY3R4LmdldFNjZW5hcmlvKCkuZ2V0VmFsdWUoKSA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApIHsKLQkJCQotCQkJcmVnaXN0ZXJCVURhdGFNYXBwaW5ncyggZW52aXJvbm1lbnQuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRNYXBwaW5nUmVnaXN0cnkoKSk7Ci0JCQkKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVBeGlzSW5wdXRDb21tYW5kKHRoaXMsIHByb2plY3QpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQoKSk7Ci0vLwkJCWNvbW1hbmRzLmFkZChuZXcgVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEphdmFUb1dTRExNZXRob2RDb21tYW5kKCkpOwotCQkJLy8gY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCggIkJlYW5Db25maWciICkpOwotCQkJLy8gY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCggIkF4aXNTZXJ2aWNlQmVhbk1hcHBpbmciICkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBCVUNvbmZpZ0NvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQoKSk7Ci0JCQkvL2NvbW1hbmRzLmFkZChuZXcgV2FpdEZvckF1dG9CdWlsZENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJ1aWxkQmVhbkNvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJVQ29kZUdlbk9wZXJhdGlvbigpKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNPdXRwdXRDb21tYW5kKHRoaXMpKTsKLQkJCQotCQl9IGVsc2UgaWYgKGN0eC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pIHsKLQkJCQotCQkJcmVnaXN0ZXJURERhdGFNYXBwaW5ncyggZW52aXJvbm1lbnQuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRNYXBwaW5nUmVnaXN0cnkoKSk7Ci0JCQkKLQkJCWNvbW1hbmRzLmFkZChuZXcgVERBeGlzSW5wdXRDb21tYW5kKHRoaXMsIHByb2plY3QpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlV1NETENvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0vLwkJCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJTa2VsZXRvbkNvbmZpZyIgKSk7Ci0vLwkJCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzTWFwcGluZ3NXaWRnZXQiICkpOwotCQkgICAgY29tbWFuZHMuYWRkKG5ldyBURENvbmZpZ0NvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IFREQ29kZUdlbk9wZXJhdGlvbigpKTsKLS8vCQkgICAgY29tbWFuZHMuYWRkKG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNPdXRwdXRDb21tYW5kKHRoaXMpKTsKLQkJCQotCQl9IGVsc2UgewotCQkJLy9UT0RPOiBSZW1vdmUgcHJpbnRsbiBhbmQgcmVhc3Nlc3MgdGhpcyAiZXJyb3IiLgotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciAtIFdlYlNlcnZpY2VTY2VuYXJpbyBzaG91bGQgbm90IGJlIENsaWVudCBmb3IgQXhpc1dlYlNlcnZpY2UiKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQkKLQkJcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCi0JCWlmIChjdHguZ2V0U2NlbmFyaW8oKS5nZXRWYWx1ZSgpID09IFdlYlNlcnZpY2VTY2VuYXJpby5DTElFTlQpIHsKLQkJCS8vVE9ETzogUmVtb3ZlIHByaW50bG4gYW5kIHJlYXNzZXNzIHRoaXMgImVycm9yIi4KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgLSBXZWJTZXJ2aWNlU2NlbmFyaW8gc2hvdWxkIG5vdCBiZSBDbGllbnQgZm9yIEF4aXNXZWJTZXJ2aWNlIik7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBlbHNlIHsvLyBGb3IgQk9UVE9NX1VQIGFuZCBUT1BfRE9XTgotCQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzUnVuSW5wdXRDb21tYW5kKHRoaXMsIHByb2plY3QpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IEF4aXNEZXBsb3lDb21tYW5kKHByb2plY3QpKTsKLQotCQkJY29tbWFuZHMuYWRkKG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKSk7Ci0KLQkJCXJldHVybiBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoY29tbWFuZHMpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyQlVEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSkgCi0JICB7Ci0JCS8vQlVBeGlzSW5wdXRDb21tYW5kCi0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiSmF2YUJlYW5OYW1lIiwgQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLQkJCi0JICAgIC8vVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kCi0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsIlNlcnZpY2VQcm9qZWN0TmFtZSIsIG51bGwgKTsKLQkgICAgCi0JICAgIC8vQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLS8vS1NDICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCSAgICAJICAgIAotCQkvLyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZC5jbGFzcyk7Ci0JCQotCSAgICAvL0JVQXhpc0NvbW1hbmRzMiAtIHRoZXNlIHJ1biBhZnRlciBCZWFuQ2xhc3NXaWRnZXQKLQkgICAgLy9EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlclR5cGVJRCIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsgCi0gICAgICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZUV4aXN0aW5nU2VydmVyIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOyAgICAgICAgCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhQmVhbk5hbWUiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQYXJzZXIiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JICAgIAotCSAgICAvL0phdmFXU0RMTWV0aG9kQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEphdmFUb1dTRExNZXRob2RDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0KLQkgICAgLy8gQlVBeGlzQ29tbWFuZHMzIC0gdGhlc2UgcnVuIGFmdGVyIEJlYW5Db25maWdXaWRnZXQKLSAgICAJICAgIAotCSAgICAvL0NvcHlBeGlzSmFyQ29tbWFuZAotCSAgICAvL3JlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIENvcHlBeGlzSmFyQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICAJICAgIAotCSAgICAvLyBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAotCSAgICAvL0phdmEyV1NETENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICAKLQkgICAgLy9SZWZyZXNoUHJvamVjdENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgUmVmcmVzaFByb2plY3RDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAotCSAgICAvL1VwZGF0ZVdFQlhNTENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiU2VydmljZVByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICAKLQkgICAgLy9CdWlsZEJlYW5Db21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIEJ1aWxkQmVhbkNvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vQnVpbGRQcm9qZWN0Q29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJGb3JjZUJ1aWxkIiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJWYWxpZGF0aW9uTWFuYWdlciIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgLy9TdGFydFByb2plY3RDb21tYW5kCi0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsgICAgCi0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vS1NDICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2FtcGxlU2VydmVyVHlwZUlEIiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFeGlzdGluZ1NlcnZlciIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTYW1wbGVFeGlzdGluZ1NlcnZlciIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkIixTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkgICAgICAgIAotCQkvLyBBeGlzT3V0cHV0Q29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIldzZGxVUkkiLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNPdXRwdXRDb21tYW5kLmNsYXNzKTsJICAgIAotICAgCi0JCQotCQkvLyBSdW4gZXh0ZW5zaW9uCi0JCQotLy8JCU1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckZhY3RvcnlJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiU2VydmljZVByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUGFyc2VyIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIG51bGwpOwotCi0JCS8vIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsJCQotCSAgICAKLQkJLy9BeGlzRGVwbG95Q29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkJCi0JICAgIC8vIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgLy9SZWZyZXNoUHJvamVjdENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFJlZnJlc2hQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICAKLQkgIH0KLQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyVEREYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0JICB7Ci0JICAgIC8vIFRyYW5zZm9ybWVycwotCSAgICBQcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyIHByb2plY3RUcmFuc2Zvcm1lciA9IG5ldyBQcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyKCk7Ci0KLQkJLy8gVE9ETzogIG1hcCAiSW5pdGlhbFNlbGVjdGlvbiIgYW5kICJPYmplY3RTZWxlY3Rpb24iIGZyb20gVERBeGlzSW5wdXRDb21tYW5kCi0JCQotLy8JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotLy8JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0vLwkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JICAgIAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkgICAgLy8gVmFsaWRhdGVXU0RMQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgVmFsaWRhdGVXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgLy8gU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JICAgICAgIAotCSAgICAvLyBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkh0dHBCYXNpY0F1dGhVc2VybmFtZSIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSHR0cEJhc2ljQXV0aFBhc3N3b3JkIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBDb3B5QXhpc0phckNvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgcHJvamVjdFRyYW5zZm9ybWVyKTsKLQotCSAgICAvLyBCYWNrdXBTa2VsSW1wbENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7ICAgICAgCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VJbmZvIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIFNrZWxldG9uMldTRExDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgcHJvamVjdFRyYW5zZm9ybWVyKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlclR5cGVJRCIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VFeGlzdGluZ1NlcnZlciIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7CQotCi0JICAgIC8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgUmVmcmVzaFByb2plY3RDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0JICAgIAotCSAgICAvLyBCdWlsZFByb2plY3RDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0KLQkgICAgLy8JTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyRmFjdG9yeUlkIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiU2VydmljZVByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQotCSAgICAvLyBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgLy8gQXhpc0RlcGxveUNvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgQXhpc0RlcGxveUNvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgLy8gQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgLy8gQXhpc091dHB1dENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiV3NkbFVSSSIsIEF4aXNPdXRwdXRDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNPdXRwdXRDb21tYW5kLmNsYXNzKTsgCi0JICB9Ci0JcHVibGljIEF4aXNXZWJTZXJ2aWNlSW5mbyBnZXRBeGlzV2ViU2VydmljZUluZm8oKSB7Ci0JCXJldHVybiBheGlzV2ViU2VydmljZUluZm9fOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEF4aXNXZWJTZXJ2aWNlSW5mbyhBeGlzV2ViU2VydmljZUluZm8gYXhpc1dlYlNlcnZpY2VJbmZvKSB7Ci0JCWF4aXNXZWJTZXJ2aWNlSW5mb18gPSBheGlzV2ViU2VydmljZUluZm87Ci0JfQotfQkKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlN2Y3OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZUluZm8gewotCQotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbWV0ZXI7Ci0KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbWV0ZXIoKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtZXRlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtZXRlcihKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtZXRlcikgewotCQl0aGlzLmphdmFXU0RMUGFyYW1ldGVyID0gamF2YVdTRExQYXJhbWV0ZXI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlUnVudGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJiZDEwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlUnVudGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LkFic3RyYWN0V2ViU2VydmljZVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZVJ1bnRpbWUgZXh0ZW5kcyBBYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lCi17Ci0KLQlwdWJsaWMgSVdlYlNlcnZpY2UgZ2V0V2ViU2VydmljZShXZWJTZXJ2aWNlSW5mbyBpbmZvKQotCXsKLSAgICByZXR1cm4gbmV3IEF4aXNXZWJTZXJ2aWNlKGluZm8pOwotCX0KLQotCXB1YmxpYyBJV2ViU2VydmljZUNsaWVudCBnZXRXZWJTZXJ2aWNlQ2xpZW50KFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm8pCi0JewotCQlyZXR1cm4gbmV3IEF4aXNXZWJTZXJ2aWNlQ2xpZW50KGluZm8pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQxYTQxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMyNiAgIDE5ODQzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLQotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgZXh0ZW5kcwotCQlBYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgewotCQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrU2VydmljZUNsaWVudENvbXBhdGliaWxpdHkoYm9vbGVhbiBzZXJ2aWNlTmVlZEVBUiwKLQkJCVN0cmluZyBzZXJ2aWNlRUFSTmFtZSwgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSwKLQkJCWJvb2xlYW4gY2xpZW50TmVlZEVBUiwgU3RyaW5nIGNsaWVudEVBUk5hbWUsCi0JCQlTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUpIHsKLQotCQlpZiAoc2VydmljZVByb2plY3ROYW1lICE9IG51bGwgJiYgc2VydmljZVByb2plY3ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoY2xpZW50UHJvamVjdE5hbWUpKSB7Ci0JCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX1BST0pFQ1RTKTsKLQkJfQotCQlpZiAoc2VydmljZU5lZWRFQVIgJiYgY2xpZW50TmVlZEVBUikgewotCQkJaWYgKHNlcnZpY2VFQVJOYW1lICE9IG51bGwgJiYgc2VydmljZUVBUk5hbWUuZXF1YWxzKGNsaWVudEVBUk5hbWUpKSB7Ci0JCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX0VBUlMsCi0JCQkJCQluZXcgU3RyaW5nW10geyAiRUFSIiB9KSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjljMDc5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzYy11aS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKLW9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aV8qLmphcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMjYwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNDAyZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBOb3YgMTkgMTM6NTk6NTYgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1M2VkZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjIwIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5N2QwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMjA0LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZWxlY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDt4LWludGVybmFsOj10cnVlCi1JbXBvcnQtUGFja2FnZTogY29tLmlibS5pY3UudXRpbDsgdmVyc2lvbj0iMy44IiwKLSBjb20uaWJtLmljdS50ZXh0OyB2ZXJzaW9uPSIzLjgiCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbWY7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW1md29ya2JlbmNoLmludGVncmF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2U7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZiOGNiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IHNjaGVtYS8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9hc3NlbWJsZS5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfYXNzZW1ibGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjc2Njc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9hc3NlbWJsZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfZGVwbG95LmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9kZXBsb3kuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2ZjODY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9kZXBsb3kuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2RldmVsb3AuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2RldmVsb3AuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjU5ZTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9kZXZlbG9wLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9pbnN0YWxsLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9pbnN0YWxsLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgyMjUwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfaW5zdGFsbC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfbm9uZS5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfbm9uZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYzhmYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X25vbmUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X3J1bi5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfcnVuLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzYWM3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfcnVuLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF90ZXN0LmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF90ZXN0LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiOTQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfdGVzdC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvY29uZmlndXJlX2hhbmRsZXJzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9jb25maWd1cmVfaGFuZGxlcnMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTEzYzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9jb25maWd1cmVfaGFuZGxlcnMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L2dlbmVyYXRlZF9zYW1wbGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L2dlbmVyYXRlZF9zYW1wbGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWJhNTFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9nZW5lcmF0ZWRfc2FtcGxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9uZXdjbGllbnRfd2Vic2Vydl93aXouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld2NsaWVudF93ZWJzZXJ2X3dpei5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZTA1ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld2NsaWVudF93ZWJzZXJ2X3dpei5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2R0b29sL2NvbmZpZ3VyZV9oYW5kbGVycy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2R0b29sL2NvbmZpZ3VyZV9oYW5kbGVycy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNjBkZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9kdG9vbC9jb25maWd1cmVfaGFuZGxlcnMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9kdG9vbC9nZW5lcmF0ZWRfc2FtcGxlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvZHRvb2wvZ2VuZXJhdGVkX3NhbXBsZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MGQzOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9kdG9vbC9nZW5lcmF0ZWRfc2FtcGxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2NvbmZpZ19oYW5kbGVyX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjExODliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2NvbmZpZ19oYW5kbGVyX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9nZW5fc2FtcGxlX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9nZW5fc2FtcGxlX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYmFmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZ2VuX3NhbXBsZV93aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0LXdzaWxfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2ltcG9ydC13c2lsX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWJkYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0LXdzaWxfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2ltcG9ydF93c193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0X3dzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzhlZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0X3dzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc2NsaWVudF93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyMzM1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc2NsaWVudF93aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvaW1wb3J0X3dzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2ltcG9ydF93cy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MWZlODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvaW1wb3J0X3dzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3JlZ2lzdHJ5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3JlZ2lzdHJ5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0M2NhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9yZWdpc3RyeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTBfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTBfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYTVjYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUwX2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUxX2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUxX2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjEyMDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMV9iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMl9iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMl9iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0MWZkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTJfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTNfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTNfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZDRlMjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUzX2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU0X2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU0X2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmJiZDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNF9iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNV9iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNV9iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4MDZmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTVfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTZfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTZfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOGJjZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU2X2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2VydmVycy9leGlzdGluZ19zZXJ2ZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NlcnZlcnMvZXhpc3Rpbmdfc2VydmVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYjZjYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2VydmVycy9leGlzdGluZ19zZXJ2ZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NlcnZlcnMvc2VydmVyc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2VydmVycy9zZXJ2ZXJzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYjZjYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2VydmVycy9zZXJ2ZXJzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL2h0bWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC9odG1sLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlN2RiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL2h0bWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC9pbXBvcnRfd3NpbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL2ltcG9ydF93c2lsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4YTk0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL2ltcG9ydF93c2lsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvd3NkbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL3dzZGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI4NDRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvd3NkbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL3dzaWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC93c2lsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1OTE2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL3dzaWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYwY2Y3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA1MTUgICAxNDE1MzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA3MDgyMCAgIDE5MTU4NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDcwOTE3ICAgMjAyMzAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotIyAyMDA5MDkwOSAgIDI0NDgxNCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIENvbnN1bXB0aW9uIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLUZFQVRVUkVfREVTQ1JJUFRJT049V2ViIHNlcnZpY2VzCi1XRUJTRVJWSUNFU19DQVRFR09SWT1XZWIgc2VydmljZXMKLQotWFBfd3NJbXBsPVdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9ucwotWFBfd3NDbGllbnRJbXBsPVdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbnMKLVhQX3J1bnRpbWVzPVdlYiBzZXJ2aWNlIHJ1bnRpbWVzCi1YUF9zZXJ2aWNlUnVudGltZXM9Q29tYmluYXRpb24gb2YgYSBXZWIgc2VydmljZSBydW5pbWUsIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSwgYW5kIHJlcXVpcmVkIGZhY2V0cwotWFBfY2xpZW50UnVudGltZXM9Q29tYmluYXRpb24gb2YgYSBXZWIgc2VydmljZSBydW5pbWUsIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLCBhbmQgcmVxdWlyZWQgZmFjZXRzCi1YUF90ZXN0ZXI9V2ViIHNlcnZpY2UgdGVzdCBmYWNpbGl0aWVzCi0KLVhQX1BVQkxJQ19VRERJX1JFR0lTVFJZX1RZUEVTPVB1YmxpYyBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1YUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVM9UHJpdmF0ZSBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1YUF9XRUJfU0VSVklDRV9DTElFTlRfVFlQRVM9V2ViIFNlcnZpY2UgQ2xpZW50IFR5cGVzCi1YUF9XRUJfU0VSVklDRV9URVNUPVdlYiBTZXJ2aWNlIFRlc3QKLVhQX1dFQl9TRVJWSUNFX1NFUlZFUl9SVU5USU1FX1RZUEVTPVdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIFR5cGVzCi1YUF9XRUJfU0VSVklDRV9DTElFTlRfUFJPSkVDVF9UWVBFPWNsaWVudFByb2plY3RUeXBlCi1YUF9PQkpFQ1RfU0VMRUNUSU9OX1dJREdFVD1vYmplY3RTZWxlY3Rpb25XaWRnZXQKLQotIwotIyBXaXphcmRzLgotIwotV0laQVJEX1RJVExFX1dTQz1XZWIgU2VydmljZSBDbGllbnQKLQotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci1QTFVHSU5fSU1QT1JUX1dJWkFSRF9OQU1FX1dTPVdlYiBTZXJ2aWNlCi1QTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX0NMSUVOVD1BY2Nlc3MgYW4gZXhpc3RpbmcgWE1MIHdlYiBzZXJ2aWNlCi1QTFVHSU5fSU1QT1JUX1dJWkFSRF9ERVNDX1dTPUEgd2l6YXJkIGZvciBpbXBvcnRpbmcgYSB3ZWIgc2VydmljZQotSU1QT1JUX1dJWkFSRF9ERVNDX1dTSUw9SW1wb3J0IFdTREwgcmVmZXJlbmNlcyB0byBhIFdTSUwgZG9jdW1lbnQKLQotIwotIyBXZWIgU2FtcGxlcyBJRHMKLSMKLVNBTVBMRV9UWVBFX1dFQlNFUlZJQ0VTX0lEPUpBWC1SUEMgSlNQcwotCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWT1HZW5lcmF0ZSBDbGllbnQKLUFDVElPTl9HRU5fU0FNUExFPUdlbmVyYXRlIEpBWC1SUEMgSlNQcwotCi0jCi0jIERpYWxvZ3MKLSMKLUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfSkFWQV9QUk9YWV9ESUFMT0c9SGlkZSAmR2VuZXJhdGUgSmF2YSBiZWFuIFByb3h5IERpYWxvZwotQ0hFQ0tCT1hfU0hPV19QUk9YWTJTQU1QTEVfRElBTE9HPUhpZGUgJlByb3h5IFRvIFNhbXBsZSBHZW5lcmF0aW9uIERpYWxvZwotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1dTREwyUFJPWFk9SGlkZSB0aGUgZGlhbG9nIGZvciBnZW5lcmF0aW5nIHRoZSBKYXZhIGJlYW4gcHJveHkgYWN0aW9uLgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BST1hZMlNBTVBMRT1IaWRlIHRoZSBkaWFsb2cgZm9yIGdlbmVyYXRpbmcgdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiBhY3Rpb24uCi0KLSMKLSMgICAgICAgV2ViIFNlcnZpY2VzIFByZWZlcmFuY2UgUGFnZXMKLSMKLSMgQ2F0ZWdvcmllcwotCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1NFUlZFUl9SVU5USU1FPVNlcnZlciBhbmQgUnVudGltZQotUFJFRkVSRU5DRV9DQVRFR09SWV9QUk9KRUNUX1RPUE9MT0dZPVByb2plY3QgVG9wb2xvZ3kKLVBSRUZFUkVOQ0VfQ0FURUdPUllfVEVTVF9GQUNJTElUWT1UZXN0IEZhY2lsaXR5IERlZmF1bHRzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX0RJQUxPR1M9UG9wdXAgRGlhbG9nIFNlbGVjdGlvbgotCi0KLSMKLSMgV2ViU2VydmljZVRlc3RQYWdlCi0jCi1XU0VYUExPUkVSX0lEPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0jCi0jIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSMKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA9U0FQIFVEREkgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVD1TQVAgVURESSBUZXN0IFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM9WE1ldGhvZHMgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NPU5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeQotCi0jCi0jIFdTSUwgcHJveHkKLSMKLUlNUE9SVF9XSVpBUkRfTkFNRV9XU0lMPVdTSUwKLVBPUFVQX0dFTkVSQVRFX1dTSUw9R2VuZXJhdGUgV1NJTAotCi0jCi0jIFdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIFR5cGUKLSMKLVdFQlNFUlZJQ0VUWVBFX05BTUVfV1NETD1Ta2VsZXRvbiBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLVdFQlNFUlZJQ0VUWVBFX05BTUVfSkFWQT1KYXZhIGJlYW4gV2ViIFNlcnZpY2UKLQotIwotIyBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotIwotSkFWQV9QUk9YWT1KYXZhIFByb3h5Ci0jCi0jIENsaWVudCBwcm9qZWN0IHR5cGUKLSMKLUxBQkVMX0NMSUVOVF9UWVBFX1dFQj1XZWIKLUxBQkVMX0NMSUVOVF9UWVBFX0VKQj1FSkIKLUxBQkVMX0NMSUVOVF9UWVBFX0FQUF9DTElFTlQ9QXBwbGljYXRpb24gQ2xpZW50Ci1MQUJFTF9DTElFTlRfVFlQRV9DT05UQUlORVJMRVNTPUphdmEKLQotIwotIyBIYW5kbGVycyBDb25maWd1cmF0aW9uIHdpemFyZCBwYWdlCi0jCi1QT1BVUF9BRERfSEFORExFUlM9Q29uZmlndXJlIEhhbmRsZXJzCi1QT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTPUNvbmZpZ3VyZSBDbGllbnQgSGFuZGxlcnMKLUxBQkVMX0hBTkRMRVJTX0NPTkZJRz1Db25maWd1cmUgSGFuZGxlcnMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWFhMjYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0icHVibGljVURESVJlZ2lzdHJ5VHlwZSIKLSAgICAgIG5hbWU9IiVYUF9QVUJMSUNfVURESV9SRUdJU1RSWV9UWVBFUyIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSIKLSAgICAgIG5hbWU9IiVYUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVMiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0id2ViU2VydmljZVRlc3QiCi0gICAgICBuYW1lPSIlWFBfV0VCX1NFUlZJQ0VfVEVTVCIKLSAgICAgIHNjaGVtYT0ic2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0ib2JqZWN0U2VsZWN0aW9uV2lkZ2V0IgotICAgICAgbmFtZT0iJVhQX09CSkVDVF9TRUxFQ1RJT05fV0lER0VUIgotICAgICAgc2NoZW1hPSJzY2hlbWEvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmV4c2QiLz4KLQotICAgPCEtLSBVRERJIFJlZ2lzdHJ5IFR5cGVzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnB1YmxpY1VERElSZWdpc3RyeVR5cGUiPgotICAgICAgPHB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQX1RFU1QiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QiPgotICAgICAgPC9wdWJsaWNVRERJUmVnaXN0cnlUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucHVibGljVURESVJlZ2lzdHJ5VHlwZSI+Ci0gICAgICA8cHVibGljVURESVJlZ2lzdHJ5VHlwZQotICAgICAgICAgICAgbmFtZT0iJVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVAiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVNBUCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5U0FQIj4KLSAgICAgIDwvcHVibGljVURESVJlZ2lzdHJ5VHlwZT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnB1YmxpY1VERElSZWdpc3RyeVR5cGUiPgotICAgICAgPHB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFMiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaS5QdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcyI+Ci0gICAgICA8L3B1YmxpY1VERElSZWdpc3RyeVR5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5wdWJsaWNVRERJUmVnaXN0cnlUeXBlIj4KLSAgICAgIDxwdWJsaWNVRERJUmVnaXN0cnlUeXBlCi0gICAgICAgICAgICBuYW1lPSIlUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU0iCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeU5UVENvbW0iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeU5UVENvbW0iPgotICAgICAgPC9wdWJsaWNVRERJUmVnaXN0cnlUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gVGVzdCBGYWNpbGl0aWVzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VUZXN0Ij4KLQotICAgICAgPHdlYlNlcnZpY2VUZXN0Ci0gICAgICAgICAgICBtZXRob2RzbmVlZGVkPSJ0cnVlIgotICAgICAgICAgICAgbmFtZT0iJVNBTVBMRV9UWVBFX1dFQlNFUlZJQ0VTX0lEIgotICAgICAgICAgICAgamF2YT0idHJ1ZSIKLSAgICAgICAgICAgIGNvZGVnZW49InRydWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZS5XZWJTZXJ2aWNlV1NTYW1wbGVFeGVjdXRhYmxlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVNhbXBsZVRlc3QiPgotICAgICAgPC93ZWJTZXJ2aWNlVGVzdD4KLQotICAgICAgPHdlYlNlcnZpY2VUZXN0Ci0gICAgICAgICAgICBtZXRob2RzbmVlZGVkPSJmYWxzZSIKLSAgICAgICAgICAgIG5hbWU9IiVXU0VYUExPUkVSX0lEIgotICAgICAgICAgICAgamF2YT0iZmFsc2UiCi0gICAgICAgICAgICBjb2RlZ2VuPSJmYWxzZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyLldlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlci5XZWJTZXJ2aWNlRXhwbG9yZXJFeGVjdXRhYmxlIj4KLSAgICAgIDwvd2ViU2VydmljZVRlc3Q+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIER5bmFtaWMgV2l6YXJkcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfQ0xJRU5UIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdG9vbDE2L25ld2NsaWVudF93ZWJzZXJ2X3dpei5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAlUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19DTElFTlQKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgICA8c2VsZWN0aW9uCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIj4KLSAgICAgICAgIDwvc2VsZWN0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc2NsaWVudF93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ2xpZW50V2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vZ2VuX3NhbXBsZV93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuR2VuU2FtcGxlV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gSGFuZGxlciBleHRlbnNpb25zIC0tPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlTEFCRUxfSEFORExFUlNfQ09ORklHIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuc2VydmljZSI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ29uZmlnQ2xpZW50SGFuZGxlcnNXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgdGl0bGU9IiVMQUJFTF9IQU5ETEVSU19DT05GSUciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5jbGllbnQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vY29uZmlnX2hhbmRsZXJfd2l6LnBuZyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkNvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlTEFCRUxfSEFORExFUlNfQ09ORklHIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+ICAKLSAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5pbXBvcnRXaXphcmRzIj4KLSAgICAgIDxjYXRlZ29yeQotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbXBvcnQuY2F0ZWdvcnkiCi0gICAgICAgICAgICAgbmFtZT0iJVdFQlNFUlZJQ0VTX0NBVEVHT1JZIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmltcG9ydFdpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9JTVBPUlRfV0laQVJEX05BTUVfV1MiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9pbXBvcnRfd3MuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAlUExVR0lOX0lNUE9SVF9XSVpBUkRfREVTQ19XUwotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0X3dzX3dpei5wbmciCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0lNUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkltcG9ydFdTV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbXBvcnQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5pbXBvcnRXaXphcmRzIj4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVJTVBPUlRfV0laQVJEX05BTUVfV1NJTCIKLSAgICAgICAgICAgIGljb249Imljb25zL3dzaWwvaW1wb3J0X3dzaWwuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICVJTVBPUlRfV0laQVJEX0RFU0NfV1NJTAotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0LXdzaWxfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVJTVBPUlRfV0laQVJEX05BTUVfV1NJTCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkltcG9ydFdTSUxXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFByZWZlcmVuY2UgUGFnZXMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfU0VSVkVSX1JVTlRJTUUiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlNlcnZlclJ1bnRpbWVQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlIj4gICAgICAgICAgICAKLSAgICAgIDwvcGFnZT4KLSAgICAgIAotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX0RJQUxPR1MiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5Ij4KLSAgICAgIDwvcGFnZT4KLQotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1RFU1RfRkFDSUxJVFkiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlRlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlRlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neVByZWZlcmVuY2VQYWdlIj4KLSAgICAgIDwvcGFnZT4KLSAgICAgIAotICAgPC9leHRlbnNpb24+Ci0KLQotICAgPCEtLSAiRG9uJ3QgU2hvdyBNZSIgRXh0ZW5zaW9ucyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSI+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgc2hvd2NoZWNrYm94PSJ0cnVlIgotICAgICAgICAgICAgbmFtZT0iJUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfSkFWQV9QUk9YWV9ESUFMT0ciCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETDJQUk9YWSIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5QUEFEMDAwNCIKLSAgICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NkbCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NpbCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NkbC5yZXNvdXJjZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZXJlZiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19QUk9YWTJTQU1QTEVfRElBTE9HIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BST1hZMlNBTVBMRSIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5QUEFEMDAwNSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmZpbGUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgc2hvd2NoZWNrYm94PSJmYWxzZSIKLSAgICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbndzaWwiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPCEtLSBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgc2hvd2NoZWNrYm94PSJmYWxzZSIKLSAgICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgLS0+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFBvcHVwcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vud3NpbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0dFTkVSQVRFX1dTSUwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2RsIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NpbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NpbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VOX1NBTVBMRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkNvbXBpbGF0aW9uVW5pdCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IiouamF2YSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQuamF2YSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5fU0FNUExFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbnNhbXBsZXdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vud3NpbC5zZXJ2aWNlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfR0VORVJBVEVfV1NJTCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IndlYnNlcnZpY2VzLnhtbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci5maWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQUREX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuc2VydmljZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3Iuc2VydmljZSIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0FERF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuc2VydmljZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5XZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLm5hdkdyb3VwIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQUREX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycyI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgIDx2aXNpYmlsaXR5PgotCQkJPG9iamVjdFN0YXRlCi0gICAgICAgICAgICAgICAgICBuYW1lPSJ0eXBlIgotICAgICAgICAgICAgICAgICAgdmFsdWU9IkhhbmRsZXJzIj4KLSAgICAgICAgICAgIDwvb2JqZWN0U3RhdGU+Ci0gICAgICAgICA8L3Zpc2liaWxpdHk+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci53c2RsUmVzIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQUREX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5zZXJ2aWNlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgICAgICAgICAgCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IndlYnNlcnZpY2VzY2xpZW50LnhtbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci54bWxmaWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQ09ORklHX0NMSUVOVF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSJlamItamFyLnhtbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci5lamJmaWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQ09ORklHX0NMSUVOVF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgICAKLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0id2ViLnhtbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci53ZWJmaWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQ09ORklHX0NMSUVOVF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3IuYXBwZmlsZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0NPTkZJR19DTElFTlRfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5jbGllbnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLnNlcnZpY2VyZWYiCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5jbGllbnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAKLSAgICAgIAotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkLndzZGwucmVzb3VyY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZXJlZiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbndzaWwud3NkbC5yZXNvdXJjZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0dFTkVSQVRFX1dTSUwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbGltcG9ydCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW53c2lsLnNlcnZpY2VyZWYiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9HRU5FUkFURV9XU0lMIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIE9iamVjdCBTZWxlY3Rpb24gV2lkZ2V0cyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5vYmplY3RTZWxlY3Rpb25XaWRnZXQiPgotICAgICAgPG9iamVjdFNlbGVjdGlvbldpZGdldAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkphdmFCZWFuU2VsZWN0aW9uTGF1bmNoYWJsZSIKLSAgICAgICAgICAgIGV4dGVybmFsX21vZGlmeT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSmF2YUJlYW5TZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICB0cmFuc2Zvcm1lcj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkphdmFCZWFuU2VsZWN0aW9uVHJhbnNmb3JtZXIiPgotICAgICAgPC9vYmplY3RTZWxlY3Rpb25XaWRnZXQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5vYmplY3RTZWxlY3Rpb25XaWRnZXQiPgotICAgICAgPG9iamVjdFNlbGVjdGlvbldpZGdldAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5FSkJTZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICBleHRlcm5hbF9tb2RpZnk9ImZhbHNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5FSkJTZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICB0cmFuc2Zvcm1lcj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkVKQlNlbGVjdGlvblRyYW5zZm9ybWVyIj4KLSAgICAgIDwvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkub2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ij4KLSAgICAgIDxvYmplY3RTZWxlY3Rpb25XaWRnZXQKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIGV4dGVybmFsX21vZGlmeT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIHRyYW5zZm9ybWVyPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyIj4KLSAgICAgIDwvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHRob3VnaCBsaWtlbHkgdG8gYmUgbWFkZSBwdWJsaWMgd2l0aCBjaGFuZ2VzIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NJbXBsIiBuYW1lPSIlWFBfd3NJbXBsIi8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHRob3VnaCBsaWtlbHkgdG8gYmUgbWFkZSBwdWJsaWMgd2l0aCBjaGFuZ2VzIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NDbGllbnRJbXBsIiBuYW1lPSIlWFBfd3NDbGllbnRJbXBsIi8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHRob3VnaCBsaWtlbHkgdG8gYmUgbWFkZSBwdWJsaWMgd2l0aCBjaGFuZ2VzIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icnVudGltZXMiIG5hbWU9IiVYUF9ydW50aW1lcyIgLz4KLSAgIAotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJzZXJ2aWNlUnVudGltZXMiIG5hbWU9IiVYUF9zZXJ2aWNlUnVudGltZXMiIC8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHRob3VnaCBsaWtlbHkgdG8gYmUgbWFkZSBwdWJsaWMgd2l0aCBjaGFuZ2VzIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iY2xpZW50UnVudGltZXMiIG5hbWU9IiVYUF9jbGllbnRSdW50aW1lcyIgLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ0ZXN0ZXIiIG5hbWU9IiVYUF90ZXN0ZXIiLz4KLQotPCEtLSBUZXN0IEV4dGVuc2lvbnMgYmVnaW5uaW5nICAtLT4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnRlc3RlciI+Ci0gIDx0ZXN0ZXIKLSAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlU2FtcGxlVGVzdCIKLSAgICBsYWJlbD0iJVNBTVBMRV9UWVBFX1dFQlNFUlZJQ0VTX0lEIgotICAgIHRlc3RXU0RMPSJubyIKLSAgICB0ZXN0SmF2YVByb3h5PSJ5ZXMiCi0gICAgd3NDbGllbnRJbXBsSWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSIKLSAgICBtb2R1bGV0eXBlcz0id2VibW9kdWxlIgotICAgIG1ldGhvZHNuZWVkZWQ9InRydWUiCi0gICAgY29kZUdlbmVyYXRlZD0idHJ1ZSIKLSAgICBzZXJ2ZXJSZXF1aXJlZD0idHJ1ZSIKLSAgICBpc2RlZmF1bHRqYXhycGM9InRydWUiCi0gICAgYWxsb3dDbGllbnRSdW50aW1lc1Jlc3RyaWN0aW9uPSJ0cnVlIgotICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0Lndzc2FtcGxlLkdTVENXZWJTZXJ2aWNlVGVzdGVyIj4KLSAgPC90ZXN0ZXI+Ci08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS50ZXN0ZXIiPgotICA8dGVzdGVyCi0gICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXIuV2ViU2VydmljZUV4cGxvcmVyIgotICAgIGxhYmVsPSIlV1NFWFBMT1JFUl9JRCIKLSAgICB0ZXN0V1NETD0ieWVzIgotICAgIHRlc3RKYXZhUHJveHk9Im5vIgotICAgIHdzQ2xpZW50SW1wbElkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgbW9kdWxldHlwZXM9IndlYm1vZHVsZSIKLSAgICBtZXRob2RzbmVlZGVkPSJmYWxzZSIKLSAgICBjb2RlR2VuZXJhdGVkPSJmYWxzZSIKLSAgICBzZXJ2ZXJSZXF1aXJlZD0iZmFsc2UiCi0gICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXIuV1NFV2ViU2VydmljZVRlc3RlciI+Ci0gIDwvdGVzdGVyPgotPC9leHRlbnNpb24+Ci0KLTwhLS0gVGVzdCBFeHRlbnNpb25zIGVuZCAgLS0+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwiPgotICA8d2ViU2VydmljZUltcGwKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiCi0gICAgICAgICAgICBsYWJlbD0iJVdFQlNFUlZJQ0VUWVBFX05BTUVfSkFWQSIKLSAgICAgICAgICAgIHJlc291cmNlVHlwZU1ldGFkYXRhPSJGaWxlIElSZXNvdXJjZSBDb21waWxhdGlvblVuaXQiCi0gICAgICAgICAgICBleHRlbnNpb25NZXRhZGF0YT0iLmphdmEgLmNsYXNzIgotICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSmF2YUJlYW5TZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICBtZXJnZXJDbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5KYXZhTWVyZ2VyIj4KLSAgPC93ZWJTZXJ2aWNlSW1wbD4KLTwvZXh0ZW5zaW9uPiAgIAotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzQ2xpZW50SW1wbCI+Ci0gIDx3ZWJTZXJ2aWNlQ2xpZW50SW1wbAotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnQudHlwZS5qYXZhIgotICAgICAgICAgICAgbGFiZWw9IiVKQVZBX1BST1hZIj4KLSAgPC93ZWJTZXJ2aWNlQ2xpZW50SW1wbD4KLTwvZXh0ZW5zaW9uPiAgIAotCi0gICAJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJTdGFydENsaWVudFNlcnZlciIKLSAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50UnVuQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlcnZlci5TdGFydENsaWVudFdpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4KLSAgICAKLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYW50U2NlbmFyaW8iPgotICAgICAgICA8YW50U2NlbmFyaW8KLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYW50LkFudENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQiCi0gICAgICAgICAgICBzY2VuYXJpb1R5cGU9ImNsaWVudCIvPgotICAgICA8L2V4dGVuc2lvbj4KLSAgICAgCi0gICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnREYXRhTWFwcGluZyI+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJJbml0aWFsU2VsZWN0aW9uIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSW5pdGlhbEluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJJbml0aWFsU2VsZWN0aW9uIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLldTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+Ci0KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLQotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlNlcnZlcklkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5UeXBlSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlRlc3RTZXJ2aWNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJUZXN0U2VydmljZSIvPgotCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJNb25pdG9yU2VydmljZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iTW9uaXRvclNlcnZpY2UiLz4gICAgICAgICAgICAgIAotCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuUnVudGltZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4gICAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnRQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50UHJvamVjdE5hbWUiLz4gIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50UHJvamVjdE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRQcm9qZWN0TmFtZSIvPiAgICAgICAgICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnRFYXJQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50RWFyUHJvamVjdE5hbWUiLz4gICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudENvbXBvbmVudFR5cGUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudENvbXBvbmVudFR5cGUiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4gICAgICAgICAgICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4gICAgICAgICAgICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAKLSAgICAgICAgIDwhLS0gbWFwcGluZ3MgZm9yIGxpc3Rpbmcgb3B0aW9ucyAtLT4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ikxpc3RSdW50aW1lcyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5MaXN0T3B0aW9uc0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJMaXN0UnVudGltZXMiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudC5TdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyIgotICAgICAgICAgICAgICAvPiAKLQotICAJCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJMaXN0U2VydmVycyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5MaXN0T3B0aW9uc0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJMaXN0U2VydmVycyIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50LlN0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIiCi0gICAgICAgICAgICAgIC8+ICAJCi0gICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIAotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW50ZXJuYWxGYWNldE9wZXJhdGlvbkRlbGVnYXRlIj4KLSAgCQkJPEZhY2V0T3BlcmF0aW9uRGVsZWdhdGUgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSIgLz4KLSAgICAgPC9leHRlbnNpb24+IAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvY2xpZW50UHJvamVjdFR5cGUuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS9jbGllbnRQcm9qZWN0VHlwZS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTQwZGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS9jbGllbnRQcm9qZWN0VHlwZS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiBpZD0iY2xpZW50UHJvamVjdFR5cGUiIG5hbWU9IkNsaWVudCBQcm9qZWN0IFR5cGUiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZGVmaW5lcyBjbGllbnQgY29udGFpbmVyIHR5cGVzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGllbnRQcm9qZWN0VHlwZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImNsaWVudFByb2plY3RUeXBlIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5jbHVkZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGJsYW5rIGRlbGltaXRlZCBsaXN0IG9mIFByb2plY3QgTmF0dXJlIElkcy4gIFRoZSBsaXN0ZWQgSURzIGluZGljYXRlIHRoYXQgdGhpcyB0eXBlIG9ubHkgd29ya3Mgd2l0aCB0aGVzZSBwYXJ0aWN1bGFyIHByb2plY3QgdHlwZXMuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0eXBlIG9ubHkgd29ya3Mgd2l0aCB3ZWIgcHJvamVjdHMgYW4gSUQgb2Ygb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLldlYk5hdHVyZSB3b3VsZCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGJsYW5rIGRlbGltaXRlZCBsaXN0IG9mIFByb2plY3QgTmF0dXJlIElkcy4gIFRoZSBsaXN0ZWQgSURzIGluZGljYXRlIHRoYXQgdGhpcyB0eXBlIERPRVMgTk9UIHdvcmsgd2l0aCB0aGVzZSBwYXJ0aWN1bGFyIHByb2plY3QgdHlwZXMuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0eXBlIGRvZXMgbm90IHdvcmsgd2l0aCB3ZWIgcHJvamVjdHMgYW4gSUQgb2Ygb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLldlYk5hdHVyZSB3b3VsZCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBsYWJlbCByZXByZXNlbnRzIHRoaXMgY2xpZW50IHByb2plY3QgdHlwZS4gIEl0IGlzIGRpc3BsYXllZCB0byB0aGUgdXNlciBzbyBpdCBtdXN0IGJlIHRyYW5zbGF0ZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBjbGllbnQgcHJvamVjdCB0eXBlLiAgVGhpcyBpZGVudGlmaWVyIGlzIHJlZmVyZW5jZWQgaW4gdGhlIGNsaWVudFByb2plY3RUeXBlIGF0dHJpYnV0ZSBvZiB0aGUgd2ViU2VydmljZUNsaWVudFR5cGUgZWxlbWVudCBvZiBhbiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2ViU2VydmljZUNsaWVudFR5cGUgZXh0ZW5zaW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MmQ0MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL29iamVjdFNlbGVjdGlvbldpZGdldC5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiBpZD0ib2JqZWN0U2VsZWN0aW9uV2lkZ2V0IiBuYW1lPSJPYmplY3QgU2VsZWN0aW9uIFdpZGdldCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ib2JqZWN0U2VsZWN0aW9uV2lkZ2V0IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0ib2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ij4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBlbnRyeSBhbGxvd3MgYW4gZXh0ZW5kZXIgdG8gYWRkIG5ldyB3YXlzIG9mIGJyb3dzaW5nL2ZpbmRpbmcgYXJ0aWZhY3RzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBkZWZpbmVzIFNlbGVjdGlvbiBXaWRnZXQgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBPYmplY3QgU2VsZWN0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzLiAgVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudCB0aGUgb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LklPYmplY3RTZWxlY3Rpb25XaWRnZXQgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaWQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIG9iamVjdFNlbGVjdGlvbldpZGdldCBlbGVtZW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zZm9ybWVyIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIGNsYXNzIHRoYXQgbXVzdCBpbXBsZW1lbnQgdGhlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIgaW50ZXJmYWNlLiAgVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgYSB0cmFuc2Zvcm0gbWV0aG9kLiAgRXZlbiB0aG91Z2ggdGhlIHR5cGUgb2YgdGhlIGlucHV0IHBhcmFtZXRlciBhbmQgdGhlIHJldHVybiB2YWx1ZSBhcmUgb2YgdHlwZSBPYmplY3QgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGV5IHdpbGwgYmUgdXNlZCB3aXRoIHRoZSB0eXBlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb24uICBUaGlzIHRyYW5zZm9ybWF0aW9uIG1ldGhvZCBhbGxvd3MgdGhlIGV4dGVuZGVyIHRvIG1vZGlmeSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gdG8gYW4gSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0IHRoYXQgaXMgbW9yZSByZWFkaWx5IHVzYWJsZSBieSB0aGUgcnVudGltZSBzZXJ2ZXIgdHlwZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJleHRlcm5hbF9tb2RpZnkiIHR5cGU9ImJvb2xlYW4iIHVzZT0iZGVmYXVsdCIgdmFsdWU9ImZhbHNlIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgb2JqZWN0IHNlbGVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG91dHNpZGUgdGhlIG9iamVjdCBzZWxlY3Rpb24gd2lkZ2V0LiAgQW4gZXhhbXBsZSwgb2YgdGhpcyB3b3VsZCBiZSBvbiBwYWdlIG9uZSBvZiB0aGUgd2ViIHNlcnZpY2Ugd2lkZ2V0IGJ5IHR5cGluZyBpbiBhIHRleHQgZmllbGQuICBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGV4dGVuZGVyIG9mIE9iamVjdFNlbGVjdGlvbldpZGdldCBtdXN0IHByb3ZpZGUgYSB2YWxpZGF0ZShTdHJpbmcpIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBhbnkgbmVjZXNzYXJ5IHZhbGlkYXRpb24gYW5kIHNldHMgdGhlIG9iamVjdCBzZWxlY3Rpb24gb24gdGhlIHdpZGdldC4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGZhbHNlLiAgQW55IHRleHQgZmllbGRzIHdpbGwgYmUgc2V0IHRvIFJFQURfT05MWSBzdHlsZSBzbyB0aGUgb2JqZWN0IHNlbGVjdGlvbiBjYW4gb25seSBiZSBtb2RpZmllZCB3aXRoIG9iamVjdCBzZWxlY3Rpb24gd2lkZ2V0IGltcGxlbWVudGF0aW9uIGRpcmVjdGx5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZUNsaWVudFR5cGUuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS93ZWJTZXJ2aWNlQ2xpZW50VHlwZS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2JkZDNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS93ZWJTZXJ2aWNlQ2xpZW50VHlwZS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiBpZD0id2ViU2VydmljZUNsaWVudFR5cGUiIG5hbWU9IldlYiBTZXJ2aWNlIENsaWVudCBUeXBlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBkZWZpbmVzIFdlYiBTZXJ2aWNlIENsaWVudCB0eXBlcy4gIFRoaXMgaXMgZG9uZSBieSBkZWZpbmluZyB3ZWJTZXJ2aWNlQ2xpZW50VHlwZSBlbGVtZW50cy4gIFRoZXNlIGVsZW1lbnRzIHJlZmVyIHRvIGEgc2VydmVyIGFuZCBhIFdlYiBTZXJ2aWNlIHJ1bnRpbWUuICBUaGVzZSBhcmUgcmVzcGVjdGl2ZWx5IGRlZmluZWQgaW4gdGhlIHdlYlNlcnZpY2VTZXJ2ZXIgZWxlbWVudCBhbmQgdGhlIHdlYlNlcnZpY2VSdW50aW1lIGVsZW1lbnQuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VTZXJ2ZXIiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZVJ1bnRpbWUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZUNsaWVudFR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlU2VydmVyIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBzZXJ2ZXIgdHlwZS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmFjdG9yeUlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZhY3RvcnkgaWQgZm9yIGEgc2VydmVyLiAgVGhpcyBpZCBpcyBkZWZpbmVkIGJ5Ci10aGUgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnNlcnZlclR5cGVzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGlzIHNlcnZlciBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzZXJ2ZXIuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgc2VydmVyIGFzIHRoZWlyIGRlZmF1bHQgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAgU2hvdWxkIGNvbnRhaW4gYSB2YWx1ZSBvZiBlaXRoZXIgJnF1b3Q7dHJ1ZSZxdW90OyBvciAmcXVvdDtmYWxzZSZxdW90Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgbG9jYWwgSUQgZm9yIHRoaXMgc2VydmVyLiAgVGhlIHNlcnZlciBhdHRyaWJ1dGUgb2YgdGhlIHdlYnNlcnZpY2VDbGllbnRUeXBlIGVsZW1lbnQgcmVmZXJzIHRvIHRoaXMgSUQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icnVudGltZVR5cGVJZHMiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaXMgY3VycmVudGx5IGEgcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZGV2ZWxvcG1lbnQuICBQbGVhc2UsIGRvIG5vdCB1c2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VSdW50aW1lIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBXZWIgU2VydmljZXMgcnVudGltZS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBsYWJlbCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgZm9yIHRoaXMgcnVudGltZS4gIFRoZXJlZm9yZSwgaXMgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhpcyBXZWIgU2VydmljZXMgcnVudGltZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGlzIHJ1bnRpbWUgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcnVudGltZS4gIE5vdGU6ICB0aGlzIGRlZmF1bHQgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgYWJzZW5jZSBvZiBvdGhlciBpbmZvcm1hdGlvbi4gIElmIHRoZSB1c2VyIGhhcyBkZWZpbmVkIGEgcGFydGljdWxhciBydW50aW1lIGFzIHRoZWlyIGRlZmF1bHQgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAgU2hvdWxkIGNvbnRhaW4gYSB2YWx1ZSBvZiBlaXRoZXIgJnF1b3Q7dHJ1ZSZxdW90OyBvciAmcXVvdDtmYWxzZSZxdW90Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJqMmVldmVyc2lvbiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIEoyRUUgdmVyc2lvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgcnVudGltZS4gIFRoZSBhbGxvd2FibGUgdmFsdWVzIGFyZSAxMiwgMTMsIGFuZCAxNC4gIElmIG1vcmUgdGhhbiBvbmUgSjJFRSB2ZXJzaW9uIGlzIHN1cHBvcnRlZCBlYWNoIEoyRUUgbGV2ZWwgc2hvdWxkIGJlIHNwZWNpZmllZCB3aXRoIGEgYmxhbmsgZGVsaW1pdGVyLihlZy4gaWYgSjJFRSB2ZXJzaW9uIDEuMiBhbmQgMS4zIGFyZSBzdXBwb3J0ZWQgdGhlbiB0aGlzIGF0dHJpYnV0ZSBzdHJpbmcgd291bGQgYmUgJnF1b3Q7MTIgMTMmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VDbGllbnRUeXBlIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBXZWIgU2VydmljZXMgY2xpZW50IHR5cGUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIElEIGZvciB0aGlzIFdlYiBTZXJ2aWNlIENsaWVudCB0eXBlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgbmFtZSBmb3IgdGhpcyBXZWIgU2VydmljZSBDbGllbnQgdHlwZS4gIEl0IGlzIGRpc3BsYXllZCB0byB0aGUgdXNlciBzbyBpdCBtdXN0IGJlIHRyYW5zbGF0ZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xpZW50VHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBraW5kIG9mIFdlYiBTZXJ2aWNlIENsaWVudCB0eXBlIGJlaW5nIGRlZmluZWQuIChpZS4gdGhlIHZhbHVlIG9mIHRoZSBKYXZhIGNsaWVudCBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJydW50aW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIHJ1bnRpbWUgSUQgZm9yIHRoaXMgV2ViIFNlcnZpY2UgY2xpZW50IHR5cGUuICBUaGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIHdlYlNlcnZpY2VSdW50aW1lIGVsZW1lbnQgd2l0aCBhbiBhdHRyaWJ1dGUgY2FsbGVkIGlkIHRoYXQgaGFzIHRoaXMgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2VydmVyIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgc2VydmVyIGZvciB0aGlzIFdlYiBTZXJ2aWNlIGNsaWVudCB0eXBlLiAgVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlU2VydmVyIGVsZW1lbnQgd2l0aCBhbiBhdHRyaWJ1dGUgY2FsbGVkIGlkIHRoYXQgaGFzIHRoaXMgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xpZW50UHJvamVjdFR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJkZWZhdWx0IiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFByb2plY3RUeXBlLldlYiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBzcGFjZSBkZWxpbWl0ZWQgbGlzdCBvZiBjbGllbnQgcHJvamVjdCB0eXBlIGlkcyBzdXBwb3J0ZWQgYnkgdGhpcyBieSB0aGlzIHdlYlNlcnZpY2VDbGllbnRUeXBlIGVsZW1lbnQuICBUaGUgY2xpZW50IHByb2plY3QgdHlwZSBpZHMgYXJlIGRlZmluZWQgYnkgdGhlIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRQcm9qZWN0VHlwZSBleHRlbnNpb24gcG9pbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGV2ZWxvcEJpbmRpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgQ29tbWFuZFdpZGdldEJpbmRpbmcgY2xhc3MuICBUaGlzIGNsYXNzIHNwZWNpZmllcyB0aGUgQ29tbWFuZHMgYW5kIFVJIGVsZW1lbnRzIGFzc29jaWF0ZSB3aXRoIEoyRUUgZGV2ZWxvcG1lbnQgcGhhc2UuICBUaGUgQ29tbWFuZCBhbmQgVUkgZWxlbWVudHMgaW4gdGhpcyBiaW5kaW5nIGFsd2F5cyBjb21lIGZpcnN0IGluIHRoZSB3aXphcmQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXNzZW1ibHlCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGFzc2VtYmx5IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgZGV2ZWxvcG1lbnQgcGhhc2UgYmluZGluZyBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlcGxveUJpbmRpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgQ29tbWFuZFdpZGdldEJpbmRpbmcgY2xhc3MuICBUaGlzIGNsYXNzIHNwZWNpZmllcyB0aGUgQ29tbWFuZHMgYW5kIFVJIGVsZW1lbnRzIGFzc29jaWF0ZSB3aXRoIEoyRUUgZGVwbG95IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgYXNzZW1ibHkgcGhhc2UgYmluZGluZyBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imluc3RhbGxCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGluc3RhbGwgcGhhc2UuICBUaGUgQ29tbWFuZCBhbmQgVUkgZWxlbWVudHMgaW4gdGhpcyBiaW5kaW5nIGFsd2F5cyBjb21lIGFmdGVyIHRoZSBkZXBsb3kgcGhhc2UgYmluZGluZyBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZGQ3MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiBpZD0id2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlIiBuYW1lPSJXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSBUeXBlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBkZWZpbmVzIFdlYiBTZXJ2aWNlIFNlcnZlciB0eXBlcy4gIFRoaXMgaXMgZG9uZSBieSBkZWZpbmluZyB3ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUgZWxlbWVudHMuICBUaGVzZSBlbGVtZW50cyByZWZlciB0byBhIHNlcnZlciBhbmQgYSBXZWIgU2VydmljZSBydW50aW1lLiAgVGhlc2UgYXJlIHJlc3BlY3RpdmVseSBkZWZpbmVkIGluIHRoZSB3ZWJTZXJ2aWNlU2VydmVyIGVsZW1lbnQgYW5kIHRoZSB3ZWJTZXJ2aWNlUnVudGltZSBlbGVtZW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlU2VydmVyIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VSdW50aW1lIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlVHlwZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VTZXJ2ZXIiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIHNlcnZlciB0eXBlLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJmYWN0b3J5SWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZmFjdG9yeSBpZCBmb3IgYSBzZXJ2ZXIuICBUaGlzIGlkIGlzIGRlZmluZWQgYnkKLXRoZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuc2VydmVyVHlwZXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlzRGVmYXVsdCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaW5kaWNhdGVzIGlmIHRoaXMgc2VydmVyIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHNlcnZlci4gIE5vdGU6ICB0aGlzIGRlZmF1bHQgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgYWJzZW5jZSBvZiBvdGhlciBpbmZvcm1hdGlvbi4gIElmIHRoZSB1c2VyIGhhcyBkZWZpbmVkIGEgcGFydGljdWxhciBzZXJ2ZXIgYXMgdGhlaXIgZGVmYXVsdCB0aGVuIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuICBTaG91bGQgY29udGFpbiBhIHZhbHVlIG9mIGVpdGhlciAmcXVvdDt0cnVlJnF1b3Q7IG9yICZxdW90O2ZhbHNlJnF1b3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBsb2NhbCBJRCBmb3IgdGhpcyBzZXJ2ZXIuICBUaGUgc2VydmVyIGF0dHJpYnV0ZSBvZiB0aGUgd2Vic2VydmljZVNlcnZlclJ1bnRpbWVUeXBlIGVsZW1lbnQgcmVmZXJzIHRvIHRoaXMgSUQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icnVudGltZVR5cGVJZHMiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaXMgY3VycmVudGx5IGEgcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZGV2ZWxvcG1lbnQuICBQbGVhc2UsIGRvIG5vdCB1c2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VSdW50aW1lIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBXZWIgU2VydmljZXMgcnVudGltZS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBsYWJlbCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgZm9yIHRoaXMgcnVudGltZS4gIFRoZXJlZm9yZSwgaXMgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhpcyBXZWIgU2VydmljZXMgcnVudGltZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGlzIHJ1bnRpbWUgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcnVudGltZS4gIE5vdGU6ICB0aGlzIGRlZmF1bHQgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgYWJzZW5jZSBvZiBvdGhlciBpbmZvcm1hdGlvbi4gIElmIHRoZSB1c2VyIGhhcyBkZWZpbmVkIGEgcGFydGljdWxhciBydW50aW1lIGFzIHRoZWlyIGRlZmF1bHQgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAgU2hvdWxkIGNvbnRhaW4gYSB2YWx1ZSBvZiBlaXRoZXIgJnF1b3Q7dHJ1ZSZxdW90OyBvciAmcXVvdDtmYWxzZSZxdW90Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJqMmVldmVyc2lvbiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIEoyRUUgdmVyc2lvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgcnVudGltZS4gIFRoZSBhbGxvd2FibGUgdmFsdWVzIGFyZSAxMiwgMTMsIGFuZCAxNC4gIElmIG1vcmUgdGhhbiBvbmUgSjJFRSB2ZXJzaW9uIGlzIHN1cHBvcnRlZCBlYWNoIEoyRUUgbGV2ZWwgc2hvdWxkIGJlIHNwZWNpZmllZCB3aXRoIGEgYmxhbmsgZGVsaW1pdGVyLihlZy4gaWYgSjJFRSB2ZXJzaW9uIDEuMiBhbmQgMS4zIGFyZSBzdXBwb3J0ZWQgdGhlbiB0aGlzIGF0dHJpYnV0ZSBzdHJpbmcgd291bGQgYmUgJnF1b3Q7MTIgMTMmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIHNlcnZlciBydW50aW1lIHR5cGUuICBBbiBlbnRyeSBmb3IgdGhpcyBlbGVtZW50IGRlZmluZXMgYSB2YWxpZCBjb21iaW5hdGlvbiBvZiBzZXJ2ZXIsIHJ1bnRpbWUsIGFuZCB3ZWJzZXJ2aWNlIHR5cGUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIElEIGZvciB0aGlzIFdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIHR5cGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBuYW1lIGZvciB0aGlzIFdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIHR5cGUuICBJdCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgc28gaXQgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJ1bnRpbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgcnVudGltZSBJRCBmb3IgdGhpcyBXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSB0eXBlLiAgVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlUnVudGltZSBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNlcnZlciIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHNlcnZlciBmb3IgdGhpcyBXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSB0eXBlLiAgVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlU2VydmVyIGVsZW1lbnQgd2l0aCBhbiBhdHRyaWJ1dGUgY2FsbGVkIGlkIHRoYXQgaGFzIHRoaXMgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBraW5kIG9mIFdlYiBTZXJ2aWNlIFJ1bnRpbWUgdHlwZSBiZWluZyBkZWZpbmVkLiAoZWcuIHRoZSB2YWx1ZSBvZiBhIEphdmEgQmVhbiBXZWJzZXJ2aWNlIGlzIG9yZy5lY2xpcHNlLmpzdC53cy50eXBlLmphdmEpCi1UaGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIHdlYlNlcnZpY2VUeXBlIGVsZW1lbnQgd2l0aCBhbiBhdHRyaWJ1dGUgY2FsbGVkIGlkIHRoYXQgaGFzIHRoaXMgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGV2ZWxvcEJpbmRpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgQ29tbWFuZFdpZGdldEJpbmRpbmcgY2xhc3MuICBUaGlzIGNsYXNzIHNwZWNpZmllcyB0aGUgQ29tbWFuZHMgYW5kIFVJIGVsZW1lbnRzIGFzc29jaWF0ZSB3aXRoIEoyRUUgZGV2ZWxvcG1lbnQgcGhhc2UuICBUaGUgQ29tbWFuZCBhbmQgVUkgZWxlbWVudHMgaW4gdGhpcyBiaW5kaW5nIGFsd2F5cyBjb21lIGZpcnN0IGluIHRoZSB3aXphcmQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXNzZW1ibHlCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGFzc2VtYmx5IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgZGV2ZWxvcG1lbnQgcGhhc2UgYmluZGluZyBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlcGxveUJpbmRpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgQ29tbWFuZFdpZGdldEJpbmRpbmcgY2xhc3MuICBUaGlzIGNsYXNzIHNwZWNpZmllcyB0aGUgQ29tbWFuZHMgYW5kIFVJIGVsZW1lbnRzIGFzc29jaWF0ZSB3aXRoIEoyRUUgZGVwbG95IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgYXNzZW1ibHkgcGhhc2UgYmluZGluZyBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imluc3RhbGxCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGluc3RhbGwgcGhhc2UuICBUaGUgQ29tbWFuZCBhbmQgVUkgZWxlbWVudHMgaW4gdGhpcyBiaW5kaW5nIGFsd2F5cyBjb21lIGFmdGVyIHRoZSBkZXBsb3kgcGhhc2UgYmluZGluZyBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVFSkJNb2R1bGUiIHR5cGU9ImJvb2xlYW4iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIElmIHRoZSBXZWJzZXJ2aWNlIGZvciB0aGlzIFNlcnZlciBSdW50aW1lIFR5cGUgaXMgcmVxdWlyZWQgdG8gYmUgaW4gYW4gRUpCIG1vZHVsZSB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBzaG91bGQgYmUgdHJ1ZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlV2ViTW9kdWxlIiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJZiB0aGUgV2Vic2VydmljZSBmb3IgdGhpcyBTZXJ2ZXIgUnVudGltZSBUeXBlIGlzIHJlcXVpcmVkIHRvIGJlIGluIGFuIFdlYiBtb2R1bGUgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRydWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VUeXBlIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgZGVmaW5lcyBhIHBhcnRpY3VsYXIgV2ViIHNlcnZpY2Uga2luZC4gIFN1Y2ggYXMgYSBKYXZhIEJlYW4gd2ViIHNlcnZpY2UsIGEgU2tlbGV0b24gV2ViIHNlcnZpY2UsIGFuIEVKQiAgV2ViIHNlcnZpY2UsIGV0Yy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhIHVuaXF1ZSBJRCBmb3IgdGhpcyBXZWIgc2VydmljZSB0eXBlLiAgSXQgaXMgcmVmZXJlbmNlZCBpbiB0aGUgd2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlIGVsZW1lbnQgd2l0aCB0aGUgdHlwZSBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIHRyYW5zbGF0YWJsZSBsYWJlbCBmb3IgdGhpcyB3ZWIgc2VydmljZSB0eXBlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlc291cmNlVHlwZU1ldGFkYXRhIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgYmxhbmsgZGVsaW1pdGVkIGxpc3QgY2xhc3MgTmFtZXMuIChpZS5ObyBwYWNrYWdlIHByZWZpeCkgIFRoZSBjbGFzc2VzIGxpc3RlZCBkZWZpbmUgdGhlIGFsbG93YWJsZSBFY2xpcHNlIHJlc291cmNlcyB0aGF0IHRoaXMgd2ViIHNlcnZpY2UgdHlwZSB1bmRlcnN0YW5kcyBhbmQgdHVybiBpbnRvIGEgV2ViIHNlcnZpY2UuICBGb3IgZXhhbXBsZSwgaWYgYSB1c2VyIHNlbGVjdHMgYSBKYXZhIHNvdXJjZSBmaWxlIGluIHRoZSBwYWNrYWdlIGV4cGxvcmVyIHZpZXcgYW5kIHRoZW4gc3RhcnRzIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIGEgQ29tcGlsYXRpb25Vbml0IG9iamVjdCB3aWxsIGJlIHBhc3NlZCBpbiBhcyBwYXJ0IG9mIGFuIElTdHJ1Y3R1cmVkU2VsZWN0aW9uLiAgQnkgcHV0dGluZyAmcXVvdDtDb21waWxhdGlvblVuaXQmcXVvdDsgYXMgb25lIG9mIHRoZSBjbGFzc2VzIGluIHRoaXMgYXR0cmlidXRlIGl0IGluZGljYXRlcyB0aGF0IHRoaXMgdHlwZSBjYW4gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSB0aGUgQ29tcGlsYXRpb25Vbml0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImV4dGVuc2lvbk1ldGFkYXRhIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGFsbG93cyB0aGlzIFdlYiBzZXJ2aWNlIHR5cGUgdG8gcmVzdHJpY3QgbmFtZXMgb2YgdGhlIGlucHV0IGZpbGVzIHRoYXQgaXQgdW5kZXJzdGFuZHMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHZhbHVlIGlzIHNldCB0byAmcXVvdDsuamF2YSAuY2xhc3MmcXVvdDsgaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBXZWIgc2VydmljZSB0eXBlIG9ubHkgdW5kZXJzdGFuZHMgcmVzb3VyY2UgbmFtZXMgdGhhdCBlbmQgd2l0aCAuamF2YSBvciBlbmQgd2l0aCAuY2xhc3MuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib2JqZWN0U2VsZWN0aW9uV2lkZ2V0IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9uIHBhZ2UgMiBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkIHRoZXJlIGlzIGFuIE9iamVjdCBzZWxlY3Rpb24gcGFnZS4gIFRoaXMgc2VsZWN0aW9uIHBhZ2UgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcgdGhpcyBhdHRyaWJ1dGUsIHNpbmNlIGRpZmZlcmVudCBXZWIgc2VydmljZSB0eXBlcyBtYXkgbmVlZCBkaWZmZXJlbnQgbWV0aG9kcyBvZiBzZWxlY3RpbmcgdGhlbS4gIFRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBzaG91bGQgYmUgdGhlIGlkIG9mIGEgb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLm9iamVjdFNlbGVjdGlvbldpZGdldCBleHRlbnNpb24uICBUaGUgcHJlZGVmaW5lZCBpZCBmb3IgYSBKYXZhIHNlbGVjdGlvbiB3aWRnZXQgaXMgb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkphdmFCZWFuU2VsZWN0aW9uV2lkZ2V0LiAgVGhlIHByZWRlZmluZWQgaWQgZm9yIGEgV1NETCBzZWxlY3Rpb24gd2lkZ2V0IGlzIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0LiAgVGhlIHByZWRlZmluZWQgaWQgZm9yIGFuIEVKQiBzZWxlY3Rpb24gd2lkZ2V0IGlzIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5FSkJTZWxlY3Rpb25XaWRnZXQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5jbHVkZU5hdHVyZXMiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBibGFuayBkZWxpbWl0ZWQgbGlzdCBvZiBQcm9qZWN0IE5hdHVyZSBJZHMuICBUaGUgbGlzdGVkIElEcyBpbmRpY2F0ZSB0aGF0IHRoaXMgdHlwZSBvbmx5IHdvcmtzIHdpdGggdGhlc2UgcGFydGljdWxhciBwcm9qZWN0IHR5cGVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgdHlwZSBvbmx5IHdvcmtzIHdpdGggd2ViIHByb2plY3RzIGFuIElEIG9mIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5XZWJOYXR1cmUgd291bGQgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGVOYXR1cmVzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgYmxhbmsgZGVsaW1pdGVkIGxpc3Qgb2YgUHJvamVjdCBOYXR1cmUgSWRzLiAgVGhlIGxpc3RlZCBJRHMgaW5kaWNhdGUgdGhhdCB0aGlzIHR5cGUgRE9FUyBOT1Qgd29yayB3aXRoIHRoZXNlIHBhcnRpY3VsYXIgcHJvamVjdCB0eXBlcy4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHR5cGUgZG9lcyBub3Qgd29yayB3aXRoIHdlYiBwcm9qZWN0cyBhbiBJRCBvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIuV2ViTmF0dXJlIHdvdWxkIGJlIHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZVRlc3QuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiZjYzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZVRlc3QuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9IndlYlNlcnZpY2VUZXN0IiBuYW1lPSJXZWIgU2VydmljZSBUZXN0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGRlZmluZXMgV2ViIHNlcnZpY2UgdGVzdCBmYWNpbGl0aWVzIHRoYXQgY2FuIGJlIHBsdWdnZWQgaW50byB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VUZXN0IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2ViU2VydmljZVRlc3QiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtZXRob2RzbmVlZGVkIiB0eXBlPSJib29sZWFuIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaWYgdGhpcyB0ZXN0IGZhY2lsaXR5IG5lZWQgdG8gbWV0aG9kcyBmcm9tIGEgcHJveHkgYmVhbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgZm9yIHRoaXMgdGVzdCBmYWNpbGl0eS4gIEl0IG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJqYXZhIiB0eXBlPSJib29sZWFuIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIHRlc3QgZmFjaWxpdHkgaXMgaW50ZW5kZWQgZm9yIGNsaWVudHMgdGhhdCBnZW5lcmF0ZSBhIEphdmEgYmVhbiBhcyBvdXRwdXQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29kZWdlbiIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoaXMgdGVzdCBmYWNpbGl0eSBnZW5lcmF0ZXMgY29kZSBvciBub3QsIHN1Y2ggYXMgSlNQIGZpbGVzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgY2xhc3MgbmFtZS4gIFRoZSBjbGFzcyBtdXN0IGltcGxlbWVudCBvcmcuZWNsaXBzZS5qc3Qud3MuZXh0LldlYlNlcnZpY2VFeGVjdXRhYmxlLiAgVGhpcyBjbGFzcyBhbGxvd3MgdGhlIGV4dGVuZGVyIHRvIHByb3ZpZGUgdGhlIENvbW1hbmRzIHRoYXQgd2lsbCBleGVjdXRlIGZvciB0aGlzIHRlc3QgZmFjaWxpdHkuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHRlc3QgZmFjaWxpdHkuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9Db25zdW1wdGlvblVJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMTBhMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9Db25zdW1wdGlvblVJLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jICAyMDA2MDIwNCAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0jIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDMyOSAgIDEyODA2OSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA0MDcgICAxMzU0NDMgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDQxMSAgIDEzNjEzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA2MDQxNyAgIDEzNjM5MCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0jIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0jIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0jIDIwMDYwNTEwICAgMTQxMTE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDUwOSAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDYwNjAyICAgMTQ1MDU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDcwNDI3ICAgMTc3MzYwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwNzEwMzEgICAxNDA1MTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA4MDMxOCAgIDIxMzMzMCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgTm9uLWNvbnZlbnRpb25hbCBKYXZhIG5hbWluZyBwcmV2ZW50cyBjcmVhdGluZyBXZWIgU2VydmljZXMgKGNsaWVudCkKLSMgMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIGltcHJvdmUgQW50VGFzayBlcnJvcnMgcmVwb3J0Ci0jIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSMgMjAwODAzMzEgICAyMjUwMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEVycm9yIG1zZyByZWZlcmVuY2VzIHJlbmFtZWQgY2F0ZWdvcnkKLSMgMjAwODA0MTYgICAyMTUwODQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotIyAyMDA4MDQyNSAgIDIyMTIzMiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0jIDIwMDkwMzAyICAgMjQ5NjAyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFBJSS0gYXNzb2NpYXRpb24gd2FybmluZyBtZXNzYWdlIG5lZWRzIHVwZGF0ZQotIyAyMDA5MDQwMSAgIDI2OTk5NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBOTFMtIFZhbGlkYXRpb24gbWVzc2FnZXMgdW5jbGVhciB3aGVuIHNlcnZlcnMgZG9uJ3Qgc3VwcG9ydCBydW50aW1lL3Byb2plY3QgY29tYm8KLSMgMjAwOTA5MDkgICAyNDQ4MTQgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci0jCi0jIFdlYiBzZXJ2aWNlcyAiSW50ZXJuZXQiIHByZWZlcmVuY2VzIGV4dGVuc2lvbi4KLSMKLQotIwotIyBXZWIgU2FtcGxlcyBJRHMKLSMKLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFk9R2VuZXJhdGUgQ2xpZW50Ci0KLSMKLSMgRGlhbG9ncwotIwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9KQVZBX1BST1hZX0RJQUxPRz1TaG93IEdlbmVyYXRlIEphdmEgYmVhbiBQcm94eSBEaWFsb2cKLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZPVNob3cgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyB0aGUgSmF2YSBiZWFuIHByb3h5IGFjdGlvbi4KLQotIwotIyAgICAgICBXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi0jCi0KLSMKLSMgUHJlZmVyZW5jZXMgVG9vbHRpcHMKLSMKLQotIwotI1NlcnZlciBSdW50aW1lIFByZWZlcmVuY2VzCi0jCi1UT09MVElQX1NSUEZfQ09NQk9fU0VSVkVSPVRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUKLVRPT0xUSVBfU1JQRl9DT01CT19SVU5USU1FPVRoZSBwcmVmZXJyZWQgV2ViIHNlcnZpY2UgcnVudGltZQotVE9PTFRJUF9TUlBGX0NPTUJPX0oyRUU9VGhlIHByZWZlcnJlZCBKMkVFIHZlcnNpb24KLQotIwotIyBHZW5lcmFsIG1lc3NhZ2VzLgotIwotTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQ9SVdBQjAyMzRFIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkLiBEZXRhaWxzOiB7MH0KLU1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRT1ObyBzdWl0YWJsZSBzZXJ2ZXIgY2FuIGJlIGZvdW5kIGZvciB0aGUgezB9IFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIEdvIHRvIFdpbmRvdyA+IFByZWZlcmVuY2VzLiBTZWxlY3QgU2VydmVyID4gUnVudGltZSBFbnZpcm9ubWVudHMgYW5kIGNvbmZpZ3VyZSBhIHNlcnZlciBydW50aW1lLgotTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FX0lOU1RBTExFRD17MH0gaXMgbm90IGluc3RhbGxlZC4gR28gdG8gV2luZG93ID4gUHJlZmVyZW5jZXMuIFNlbGVjdCBTZXJ2ZXIgPiBSdW50aW1lIEVudmlyb25tZW50cyBhbmQgY29uZmlndXJlIGEgc2VydmVyIHJ1bnRpbWUuCi0KLQotIwotIyBXaXphcmQgcGFnZSB0YXNrIGxhYmVscyBhbmQgZGVzY3JpcHRpb25zCi0jICh1c2VkIG9ubHkgZm9yIHByb2dyZXNzIGluZGljYXRpb24pLgotIwotCi0jCi0jIENvbW1vbiB3aXphcmQgc3RyaW5ncy4KLSMKLUxBQkVMX0ZPTERFUl9OQU1FPUZvbGRlcjoKLUxBQkVMX0pTUF9GT0xERVJfTkFNRT1KU1AgZm9sZGVyOgotTEFCRUxfV0VCX1BST0pFQ1RfTkFNRT1XZWIgcHJvamVjdDoKLUxBQkVMX1dFQlNFUlZJQ0VUWVBFPSZXZWIgc2VydmljZSB0eXBlOgotTEFCRUxfV0VCU0VSVklDRUlNUEw9U2VydmljZSBpbXBsZW1lbnRhdGlvbjoKLUxBQkVMX1dFQlNFUlZJQ0VERUY9U2VydmljZSBkZWZpbml0aW9uOgotTEFCRUxfSjJFRV9WRVJTSU9OPUoyRUUgdmVyc2lvbjoKLUxBQkVMX05BPU4vQQotCi1CVVRUT05fQlJPV1NFPUImcm93c2UuLi4KLUJVVFRPTl9CUk9XU0VfRklMRVM9QnJvd3NlIGZpbGVzLi4uCi0KLUJPVFRPTVVQX0xBQkVMPUJvdHRvbSB1cAotVE9QRE9XTl9MQUJFTD1Ub3AgZG93bgotQ0xJRU5UX0xBQkVMPUNsaWVudAotQ09NQklORURfVFlQRV9BTkRfUlVOVElNRV9MQUJFTD17MH0gezF9Ci0KLSMKLSMgV2l6YXJkcy4KLSMKLVdJWkFSRF9USVRMRV9XU0M9V2ViIFNlcnZpY2UgQ2xpZW50Ci0KLSMKLSMgV2ViU2VydmljZVByb2plY3RQYWdlCi0jCi1QQUdFX1RJVExFX1dTX1BST0pFQ1Q9V2ViIFNlcnZpY2VzCi1QQUdFX0RFU0NfV1NfU0VSVklDRT1TZWxlY3QgYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIG9yIGRlZmluaXRpb24gYW5kIG1vdmUgdGhlIHNsaWRlcnMgdG8gc2V0IHRoZSBsZXZlbCBvZiBzZXJ2aWNlIGFuZCBjbGllbnQgZ2VuZXJhdGlvbi4KLVBBR0VfREVTQ19XU19DTElFTlQ9U2VsZWN0IGEgc2VydmljZSBkZWZpbml0aW9uIGFuZCBtb3ZlIHRoZSBzbGlkZXIgdG8gc2V0IHRoZSBsZXZlbCBvZiBjbGllbnQgZ2VuZXJhdGlvbi4KLUJVVFRPTl9TVEFSVF9XRUJfUFJPSkVDVD0mU3RhcnQgV2ViIHNlcnZpY2UgaW4gV2ViIHByb2plY3QKLSNCVVRUT05fREVQTE9ZX1dFQl9QUk9KRUNUPURlcGxveSBXZWIgc2VydmljZSB0byBhIHNlcnZlciB0eXBlCi1CVVRUT05fSU5TVEFMTF9TRVJWSUNFX1dFQl9QUk9KRUNUPSZJbnN0YWxsIFdlYiBzZXJ2aWNlIG9uIHNlcnZlcgotQlVUVE9OX0lOU1RBTExfQ0xJRU5UX1dFQl9QUk9KRUNUPUluc3RhbGwgV2ViIHNlcnZpY2UgJmNsaWVudCBvbiBzZXJ2ZXIgKG1hbmFnZWQgY2xpZW50cyBvbmx5KQotR1JPVVBfU0NFTkFSSU9fU0VSVklDRT1TZXJ2aWNlCi1HUk9VUF9TQ0VOQVJJT19DTElFTlQ9Q2xpZW50IHByb3h5Ci1MQUJFTF9XRUJTRVJWSUNFQ0xJRU5UVFlQRT0mQ2xpZW50IHR5cGU6Ci0KLVRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LPUNsaWNrIG9uIHRoZSBsaW5rIHRvIGVkaXQgc2VydmljZSBwcm9qZWN0IGFuZCBFQVIgc2V0dGluZ3MuCi1UT09MVElQX1dTV1NDRU5fQ0xJRU5UUFJPSkVDVF9MSU5LPUNsaWNrIG9uIHRoZSBsaW5rIHRvIGVkaXQgY2xpZW50IHByb2plY3QgYW5kIEVBUiBzZXR0aW5ncy4KLQotRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OPVNlbGVjdCBTZXJ2aWNlIEltcGxlbWVudGF0aW9uCi1ESUFMT0dfVElUSUxFX1NFUlZJQ0VfREVGX1NFTEVDVElPTj1TZWxlY3QgU2VydmljZSBEZWZpbml0aW9uCi1ESUFMT0dfVElUSUxFX1NFUlZJQ0VfUFJPSkVDVF9TRVRUSU5HUz1TcGVjaWZ5IFNlcnZpY2UgUHJvamVjdCBTZXR0aW5ncwotRElBTE9HX1RJVElMRV9DTElFTlRfUFJPSkVDVF9TRVRUSU5HUz1TcGVjaWZ5IENsaWVudCBQcm9qZWN0IFNldHRpbmdzCi0KLSMgSXRlbXMgY29tbW9uIHRvIFdlYlNlcnZpY2VSdW50aW1lU2VsZWN0aW9uUGFnZSBhbmQgV2ViU2VydmljZUNsaWVudFJ1bnRpbWVTZWxlY3Rpb25QYWdlCi0jIFdlYlNlcnZpY2VSdW50aW1lU2VsZWN0aW9uUGFnZQotTEFCRUxfU1VNTUFSWT1Db25maWd1cmF0aW9uOgotTEFCRUxfU1VNTUFSWV9OT19DTElFTlQ9Q29uZmlndXJhdGlvbjogTm8gY2xpZW50IGdlbmVyYXRpb24uCi1QQUdFX1RJVExFX1dTX1JVTlRJTUVfU0VMRUNUSU9OPVNlcnZpY2UgRGVwbG95bWVudCBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfV1NfUlVOVElNRV9TRUxFQ1RJT049Q2hvb3NlIGZyb20gdGhlIGxpc3Qgb2YgcnVudGltZXMgYW5kIGRlcGxveW1lbnQgc2VydmVycywgb3IgdXNlIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotTEFCRUxfUlVOVElNRVNfTElTVD1XZWIgc2VydmljZSBydW50aW1lOgotTEFCRUxfU0VSVkVSU19MSVNUPVNlcnZlciBydW50aW1lOgotTEFCRUxfU0VSVkVSU19JTlNUQU5DRVM9U2VydmVyIG5hbWU6Ci1MQUJFTF9FRElUX0JVVFRPTj1FZGl0Li4uCi1MQUJFTF9TRVJWSUNFX0VBUl9NT0RVTEU9U2VydmljZSBFQVIgbW9kdWxlOgotTEFCRUxfQ0xJRU5UX0VBUl9NT0RVTEU9Q2xpZW50IEVBUiBtb2R1bGU6Ci1MQUJFTF9DTElFTlRfTU9EVUxFPUNsaWVudCBtb2R1bGU6Ci1MQUJFTF9TRVJWSUNFX01PRFVMRT1TZXJ2aWNlIG1vZHVsZToKLUxBQkVMX0NMSUVOVF9QUk9KRUNUPUNsaWVudCBwcm9qZWN0OgotTEFCRUxfU0VSVklDRV9QUk9KRUNUPVNlcnZpY2UgcHJvamVjdDoKLUxBQkVMX0NMSUVOVF9FQVJfUFJPSkVDVD1DbGllbnQgRUFSIHByb2plY3Q6Ci1MQUJFTF9TRVJWSUNFX0VBUl9QUk9KRUNUPVNlcnZpY2UgRUFSIHByb2plY3Q6Ci0KLSMKLSMgQ2xpZW50IGNvbXBvbmVudCB0eXBlIGxhYmVscwotIwotTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9XRUI9V2ViCi1MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0VKQj1FSkIKLUxBQkVMX0NMSUVOVF9DT01QX1RZUEVfQVBQX0NMSUVOVD1BcHBsaWNhdGlvbiBDbGllbnQKLUxBQkVMX0NMSUVOVF9DT01QX1RZUEVfQ09OVEFJTkVSTEVTUz1KYXZhCi0KLQotVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRT1DbGljayBvbiB0aGUgbGluayB0byBzcGVjaWZ5IHRoZSB3ZWIgc2VydmljZSBydW50aW1lLgotVE9PTFRJUF9QV1JTX1RFWFRfU0VSVkVSPUNsaWNrIG9uIHRoZSBsaW5rIHRvIHNwZWNpZnkgYSBzZXJ2ZXIuCi1UT09MVElQX1BXUlNfSjJFRV9WRVJTSU9OPUoyRUUgdmVyc2lvbiB0byBiZSB1c2VkLgotCi1MQUJFTF9TRUxFQ1RJT05fVklFV19USVRMRT1TZXJ2ZXItU2lkZSBEZXBsb3ltZW50IFNlbGVjdGlvbjoKLUxBQkVMX1NFTEVDVElPTl9WSUVXX1JVTlRJTUU9Q2hvb3NlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZmlyc3QKLUxBQkVMX1NFTEVDVElPTl9WSUVXX1NFUlZFUj1DaG9vc2Ugc2VydmVyIGZpcnN0Ci1MQUJFTF9TRUxFQ1RJT05fVklFV19FWFBMT1JFPUV4cGxvcmUgb3B0aW9ucwotCi1MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlM9RXhpc3RpbmcgU2VydmVycwotTEFCRUxfVFJFRV9TRVJWRVJfVFlQRVM9U2VydmVyIFR5cGVzCi0KLU1TR19OT19PQkpFQ1RfU0VMRUNUSU9OPVNlbGVjdCBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uCi1NU0dfTk9fU0VSVklDRV9TRUxFQ1RJT049U2VsZWN0IGEgc2VydmljZSBkZWZpbml0aW9uLgotTVNHX1dBUk5fU0VSVklDRV9JTVBMX05BTUlOR19DT05WRU5USU9OPVRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHNlbGVjdGVkIGRvZXMgbm90IGZvbGxvdyBKYXZhIG5hbWluZyBjb252ZW50aW9ucy4KLU1TR19JTlZBTElEX1NFUlZJQ0VfSU1QTD1UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBzZWxlY3RlZCBpcyBpbnZhbGlkLgotTVNHX0lOVkFMSURfU0VSVklDRV9ERUY9VGhlIHNlcnZpY2UgZGVmaW5pdGlvbiBzZWxlY3RlZCBpcyBpbnZhbGlkLgotTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlM9ezB9IGRvZXMgbm90IHN1cHBvcnQgdGhlIHsxfSBXZWIgc2VydmljZSBydW50aW1lLiBDaG9vc2UgYSBkaWZmZXJlbnQgc2VydmVyIG9yIHJ1bnRpbWUgdG8gcHJvY2VlZCB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkLgotTVNHX05PX1JVTlRJTUU9Tm8gcnVudGltZSBzcGVjaWZpZWQgZm9yIHRoZSB7MH0gc2NlbmFyaW8uCi1NU0dfTk9fU0VSVkVSPU5vIHNlcnZlciBzcGVjaWZpZWQgZm9yIHRoZSB7MH0gc2NlbmFyaW8uCi1NU0dfRVJST1JfU1RVQl9PTkxZPXswfSBoYXMgb25seSBzdHViIHJ1bnRpbWVzIGFzc29jaWF0ZWQgd2l0aCBpdC4gQ2hvb3NlIGEgZGlmZmVyZW50IHNlcnZlciBvciBjb25maWd1cmUgYSBub24tc3R1YiBydW50aW1lIGluIHRoZSBzZXJ2ZXIgcHJlZmVyZW5jZXMuIAotTVNHX1dBUk5fU1RVQl9PTkxZPXswfSBoYXMgb25seSBzdHViIHJ1bnRpbWVzIGFzc29jaWF0ZWQgd2l0aCBpdCBzbyB0aGUgc2VydmVyIHdpbGwgbm90IGJlIGNyZWF0ZWQgb3Igc3RhcnRlZC4KLU1TR19XQVJOX05PX1NFUlZJQ0VfU0VSVkVSPU5vIHNlcnZlciBoYXMgYmVlbiBzZWxlY3RlZC4gVGhlIFdlYiBzZXJ2aWNlIHdpbGwgbm90IGJlIGRlcGxveWVkLCBpbnN0YWxsZWQsIG9yIHJ1bi4KLU1TR19XQVJOX05PX0NMSUVOVF9TRVJWRVI9Tm8gc2VydmVyIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGUgV2ViIHNlcnZpY2UgY2xpZW50IHdpbGwgbm90IGJlIGRlcGxveWVkLCBpbnN0YWxsZWQsIG9yIHJ1bi4KLQotTVNHX1NFUlZFUl9UQVJHRVRfTUlTTUFUQ0g9VGhlIHByb2plY3QsIHswfSwgaGFzIGEgc2VydmVyIHRhcmdldCB3aGljaCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdHlwZQotTVNHX0oyRUVfTUlTTUFUQ0g9VGhlIHByb2plY3QsIHswfSwgaGFzIGEgZGlmZmVyZW50IEoyRUUgbGV2ZWwgZnJvbSB0aGUgc2VsZWN0ZWQgSjJFRSBsZXZlbAotTVNHX1NFUlZJQ0VfUFJPSkVDVF9FTVBUWT1UaGUgc2VydmljZSBwcm9qZWN0IHswfSBjYW5ub3QgYmUgZW1wdHkuIFNlbGVjdCBhIHNlcnZpY2UgcHJvamVjdCB7MH0uCi1NU0dfU0VSVklDRV9QUk9KRUNUX1RZUEVfRU1QVFk9U2VsZWN0IGEgc2VydmljZSBwcm9qZWN0IHR5cGUuCi1NU0dfU0VSVklDRV9FQVJfRU1QVFk9VGhlIHNlcnZpY2UgRUFSIHswfSBjYW5ub3QgYmUgZW1wdHkuIFNlbGVjdCBhIHNlcnZpY2UgRUFSIHswfS4KLU1TR19DTElFTlRfUFJPSkVDVF9FTVBUWT1UaGUgY2xpZW50IHByb2plY3QgezB9IGNhbm5vdCBiZSBlbXB0eS4gU2VsZWN0IGEgY2xpZW50IHByb2plY3QgezB9LgotTVNHX0NMSUVOVF9QUk9KRUNUX1RZUEVfRU1QVFk9U2VsZWN0IGEgY2xpZW50IHByb2plY3QgdHlwZS4KLU1TR19DTElFTlRfRUFSX0VNUFRZPVRoZSBjbGllbnQgRUFSIHswfSBjYW5ub3QgYmUgZW1wdHkuIFNlbGVjdCBhIGNsaWVudCBFQVIgezB9LgotCi1NU0dfSU5WQUxJRF9FSkJfUFJPSkVDVD17MH0gaXMgbm90IGFuIEVKQiBwcm9qZWN0LiBDaG9vc2UgYW4gRUpCIHByb2plY3QsIG9yIGVudGVyIGEgbmV3IEVKQiBwcm9qZWN0IG5hbWUuCi1NU0dfSU5WQUxJRF9XRUJfUFJPSkVDVD17MH0gaXMgbm90IGEgV2ViIHByb2plY3QuIENob29zZSBhIFdlYiBwcm9qZWN0LCBvciBlbnRlciBhIG5ldyBXZWIgcHJvamVjdCBuYW1lLgotTVNHX0lOVkFMSURfUFJPSkVDVF9UWVBFPXswfSBpcyBub3QgYSB7MX0gcHJvamVjdC4gQ2hvb3NlIGEgezF9IHByb2plY3QsIG9yIGVudGVyIGEgbmV3IHByb2plY3QgbmFtZS4KLU1TR19NT0RVTEU9bW9kdWxlCi1NU0dfTU9EVUxFX05BTUVfQU5EX1BST0pFQ1RfTkFNRV9OT1RfVEhFX1NBTUU9VGhlIGZsZXhpYmxlIHByb2plY3QgcHJlZmVyZW5jZSBpcyBvZmYuIFRoZXJlZm9yZSwgcHJvamVjdCBuYW1lcyBhbmQgbW9kdWxlIG5hbWVzIG11c3QgYmUgdGhlIHNhbWUgZm9yIG5ldyBtb2R1bGVzLgotCi1NU0dfU0VSVklDRV9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVD1UaGUgezB9IFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaW4gezF9IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvamVjdCB7Mn0uCi1NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUPVRoZSB7MH0gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvamVjdCB7MX0uCi1NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9KQVZBUFJPSkVDVD1UaGUgezB9IHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBKYXZhIHByb2plY3QgezF9LgotTVNHX1NFUlZJQ0VfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFPVRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZSBpbiB7MX0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGUgezJ9LgotTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU9VGhlIHswfSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGUgezF9LgotCi1NU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUPVRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZSBpbiB7MX0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2xpZW50IHByb2plY3QgezJ9LgotTVNHX0NMSUVOVF9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUPVRoZSB7MH0gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaWVudCBwcm9qZWN0IHsxfS4KLU1TR19DTElFTlRfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFPVRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZSBpbiB7MX0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2xpZW50IHByb2plY3QgdHlwZSB7Mn0uCi1NU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFPVRoZSB7MH0gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaWVudCBwcm9qZWN0IHR5cGUgezF9LgotCi1NU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfRUFSUz1Zb3VyIHNlbGVjdGVkIHNlcnZpY2UgYW5kIGNsaWVudCB7MH0gbW9kdWxlcyBoYXZlIHRoZSBzYW1lIG5hbWUuICBQcm9jZWVkaW5nIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIG1heSByZXN1bHQgaW4gcnVudGltZSBlcnJvcnMuCi1NU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfQ09NUE9ORU5UUz1Zb3VyIHNlbGVjdGVkIHNlcnZpY2UgYW5kIGNsaWVudCB7MH0gbW9kdWxlcyBoYXZlIHRoZSBzYW1lIG5hbWUuICBQcm9jZWVkaW5nIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIHJ1bnRpbWUgZXJyb3JzLgotTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX1BST0pFQ1RTPVlvdXIgc2VsZWN0ZWQgc2VydmljZSBhbmQgY2xpZW50IHByb2plY3RzIGFyZSB0aGUgc2FtZS4gIFByb2NlZWRpbmcgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gd2lsbCByZXN1bHQgaW4gZXJyb3JzLgotTVNHX1dST05HX0NMSUVOVF9QUk9KRUNUX1RZUEU9VGhlIHNlbGVjdGVkIGNsaWVudCBwcm9qZWN0LCB7MH0sIGlzIG5vdCBhIHsxfSBwcm9qZWN0LiBQbGVhc2Ugc2VsZWN0IGEgezF9IHByb2plY3Qgb3IgZW50ZXIgYSBuZXcgcHJvamVjdCBuYW1lLgotTVNHX0NMSUVOVF9TVUI9Y2xpZW50Ci1NU0dfU0VSVklDRV9TVUI9c2VydmljZQotTVNHX0dFTkVSQUxfUFJPSkVDVF9BTkRfRUFSPVNlbGVjdCB0aGUgezB9IHByb2plY3QgYW5kIHRoZSBFQVIgcHJvamVjdCB3aXRoIHdoaWNoIHlvdSB3YW50IGl0IHRvIGJlIGFzc29jaWF0ZWQuCi1NU0dfRUFSX1BST0pFQ1RfV0lMTF9CRV9DUkVBVEVEPUlmIGFuIEVBUiBvciBwcm9qZWN0IGRvZXMgbm90IGV4aXN0IG9yIGlzIGN1cnJlbnRseSB1bmFzc29jaWF0ZWQsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgXG5hc3NvY2lhdGVkIGFzIHJlcXVpcmVkIHdoZW4geW91IGNsaWNrIE5leHQuCi0KLU1TR19FQVJfV0lMTF9CRV9BU1NPQ0lBVEVEPVRoZSBzZWxlY3RlZCB7MH0gcHJvamVjdCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuCi1NU0dfUFJPSkVDVF9XSUxMX0JFX0NSRUFURUQ9VGhlIHswfSBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIgcHJvamVjdC4KLU1TR19FQVJfV0lMTF9CRV9DUkVBVEVEPVRoZSB7MH0gRUFSIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2plY3QuCi1NU0dfUFJPSkVDVF9BTkRfRUFSX0NSRUFURUQ9VGhlIHswfSBwcm9qZWN0IGFuZCBFQVIgcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCBvbmUgYW5vdGhlci4KLQotTVNHX0NMSUVOVF9DQU5OT1RfQVNTT0NJQVRFPVRoZSBjbGllbnQgcHJvamVjdCwgezB9LCBpcyBhdCBhbiBpbmNvbXBhdGlibGUgSmF2YSBFRSBzcGVjaWZpY2F0aW9uIGxldmVsIHRoYW4gdGhhdCBvZiB0aGUgInsxfSIgRW50ZXJwcmlzZSBBcHBsaWNhdGlvbi4KLU1TR19TRVJWSUNFX0NBTk5PVF9BU1NPQ0lBVEU9VGhlIHNlcnZpY2UgcHJvamVjdCwgezB9LCBpcyBhdCBhbiBpbmNvbXBhdGlibGUgSmF2YSBFRSBzcGVjaWZpY2F0aW9uIGxldmVsIHRoYW4gdGhhdCBvZiB0aGUgInsxfSIgRW50ZXJwcmlzZSBBcHBsaWNhdGlvbi4KLQotTVNHX1BST0pFQ1RfTVVTVF9FWElTVD1ObyBzZXJ2ZXIgY2FuIGJlIGZvdW5kIGFuZCB7MH0gZG9lcyBub3QgZXhpc3QuIENob29zZSBhbiBleGlzdGluZyBwcm9qZWN0IG9yIHVzZSB0aGUgcHJlZmVyZW5jZXMgdG8gY29uZmlndXJlIGEgc2VydmVyIHJ1bnRpbWUuICAKLQotCi0jIFdlYlNlcnZpY2VDbGllbnRSdW50aW1lU2VsZWN0aW9uUGFnZQotUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT049Q2xpZW50IEVudmlyb25tZW50IENvbmZpZ3VyYXRpb24KLVBBR0VfREVTQ19XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT049Q2hvb3NlIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJ1bnRpbWVzIGFuZCBzZXJ2ZXJzIGZvciB0aGUgY2xpZW50IGVudmlyb25tZW50LCBvciB1c2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi0KLUxBQkVMX0NMSUVOVF9TRUxFQ1RJT05fVklFV19USVRMRT1DbGllbnQtU2lkZSBFbnZpcm9ubWVudCBTZWxlY3Rpb246Ci1MQUJFTF9DTElFTlRfVFlQRT1DbGllbnQgUHJvamVjdCB0eXBlOgotTEFCRUxfU0VSVklDRV9UWVBFPVNlcnZpY2UgUHJvamVjdCB0eXBlOgotTEFCRUxfV0VCPVdlYgotTEFCRUxfRUpCPUVKQgotTEFCRUxfTk9fTEFCRUw9Ci0KLSMKLSMgSXRlbXMgY29tbW9uIHRvIFdlYlNlcnZpY2VNYXBwaW5nc1BhZ2UsIFdlYlNlcnZpY2VNYXBwaW5nc1BhZ2UgKGNsaWVudCksIGFuZCBXZWJTZXJ2aWNlU09BUEJpbmRpbmdQYWdlCi0jCi1QQUdFX01TR19WQUxJREFUSU9OX0lOVEVSTkFMX0VSUk9SPUFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIGR1cmluZyBwYWdlIHZhbGlkYXRpb24uIFNlZSBsb2dzIGZvciBkZXRhaWxzLgotCi0jCi0jIFdlYlNlcnZpY2VNYXBwaW5nc1BhZ2UKLSMKLVBBR0VfVElUTEVfV1NfWE1MMkJFQU49V2ViIFNlcnZpY2UgU2tlbGV0b24gWE1MIHRvIEphdmEgTWFwcGluZ3MKLVBBR0VfREVTQ19OMlBfTUFQUElOR1M9RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBuYW1lc3BhY2UgdG8gcGFja2FnZS4KLU1TR19NQVBQSU5HX0RVUExJQ0FURV9FTlRSSUVTPUR1cGxpY2F0ZSB7MH0gbWFwcGVkIHRvIHRoZSBzYW1lIHsxfS4KLQotCi0jCi0jIFRoZSB0d28gSVRFTV8qIHN0cmluZ3MgYXJlIGVudHJpZXMgaW4gYSBsaXN0IGJveCBvZiBtYXBwaW5ncy4KLSMgVGhlcmUgYXJlIHR3byBmb3Jtcywgb25lIHdoZW4gdGhlIHBhZ2UgaXMgaW4gSmF2YS10by1YTUwgbW9kZToKLSMgICA8amF2YS1iZWFuLW5hbWU+LCA8ZW5jb2Rpbmctc3R5bGU+Ci0jIGFuZCBvbmUgd2hlbiB0aGUgcGFnZSBpcyBpbiBYTUwtdG8tSmF2YSBtb2RlOgotIyAgIDx4bWwtbmFtZXNwYWNlLXVyaT46PHhtbC1zaG9ydC1uYW1lPiwgPGVuY29kaW5nLXN0eWxlPgotIyB3aGVyZToKLSMgICA8amF2YS1iZWFuLW5hbWU+IGlzIGEgZnVsbHktcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZQotIyAgIDx4bWwtbmFtZXNwYWNlLXVyaT4gaXMgdGhlIG5hbWVzcGFjZSBvZiBhbiBYTUwgdHlwZQotIyAgIDx4bWwtc2hvcnQtbmFtZT4gaXMgdGhlIFhNTCB0eXBlIG5hbWUgd2l0aGluIHRoZSBuYW1lc3BhY2UKLSMgICA8ZW5jb2Rpbmctc3R5bGU+IGlzIHRoZSBlbmNvZGluZyBzdHlsZSAoU09BUCBvciBMaXRlcmFsIFhNTCkKLSMKLQotIwotIyBXZWJTZXJ2aWNlUHJveHlQYWdlCi0jCi1CVVRUT05fR0VORVJBVEVfUFJPWFk9JkdlbmVyYXRlIGEgcHJveHkKLQotIwotIyBXZWJTZXJ2aWNlU2tlbGV0b25Db25maWdQYWdlCi0jCi1QQUdFX0RFU0NfV1NTS0VMX0NPTkZJRz1EZWZpbmUgYSBza2VsZXRvbiBKYXZhIGJlYW4gYXMgYSBXZWIgc2VydmljZS4KLVBBR0VfVElUTEVfV1NTS0VMX0NPTkZJRz1XZWIgU2VydmljZSBTa2VsZXRvbiBKYXZhIEJlYW4gQ29uZmlndXJhdGlvbgotVE9PTFRJUF9QQlNDX1RFWFRfU0tFTEVUT05fRk9MREVSPUZvbGRlciBmb3IgZ2VuZXJhdGVkIEphdmEgc2tlbGV0b24uCi1UT09MVElQX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0U9QnJvd3NlIGZvbGRlcnMuCi1MQUJFTF9TS0VMRVRPTl9ST09UX05BTUU9U2tlbGV0b24gZm9sZGVyOgotCi0jCi0jIFdlYlNlcnZpY2VCZWFuQ2xhc3NQYWdlCi0jCi1MQUJFTF9CRUFOX0NMQVNTX05BTUU9QmVhbjoKLVBBR0VfTVNHX0JFQU5fQ0FOTk9UX0JFX0VNUFRZPVBsZWFzZSBzZWxlY3QgYSBKYXZhIGJlYW4gY2xhc3MuCi1CVVRUT05fQlJPV1NFX0NMQVNTRVM9QnJvd3NlIGNsYXNzZXMuLi4KLQotCi0jCi0jIFdlYlNlcnZpY2VUZXN0UGFnZQotIwotUEFHRV9USVRMRV9XU1RFU1Q9VGVzdCBXZWIgU2VydmljZQotUEFHRV9ERVNDX1dTVEVTVD1TZWxlY3QgYSB0ZXN0IGZhY2lsaXR5Ci1DSEVDS0JPWF9URVNUX1dFQlNFUlZJQ0U9JlRlc3QgdGhlIFdlYiBzZXJ2aWNlCi1DSEVDS0JPWF9NT05JVE9SX1dFQlNFUlZJQ0U9Jk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlCi1DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVM9Jk92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHdhcm5pbmcKLU1TR19FUlJPUl9VTkFCTEVfVE9fTEFVTkNIX1dTRExfVEVTVD1BbiBlcnJvciBvY2N1cnJlZC4gVW5hYmxlIHRvIGxhdW5jaCBXU0RMIHRlc3QgZmFjaWxpdHkuCi0KLSMKLSMgV2ViU2VydmljZUV4cGxvcmVyUGFnZQotIwotQlVUVE9OX0xBVU5DSF9TRVJWSUNFX1RFU1Q9TGF1bmNoCi0KLSMKLSMgV2ViU2VydmljZUNsaWVudFRlc3RQYWdlCi0jCi1QQUdFX1RJVExFX1dTX1NBTVBMRT1XZWIgU2VydmljZSBDbGllbnQgVGVzdAotUEFHRV9ERVNDX1dTX1NBTVBMRT1EbyB5b3Ugd2FudCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHk/Ci1CVVRUT05fVEVTVD1UZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkKLUxBQkVMX1RFU1RfVFlQRVM9VGVzdCBmYWNpbGl0eToKLUJVVFRPTl9SVU5fVEVTVD1SdW4gdGVzdCBvbiBzZXJ2ZXIKLUxBQkVMX01FVEhPRFM9TWV0aG9kcwotTEFCRUxfSlNQX1BST0pFQ1RfTkFNRT1KU1AgcHJvamVjdDoKLU1TR19FUlJPUl9KVFNfUFJPWFlfTk9UX0NPTVBJTEVEPUlXQUIwMzU3RSBUaGUgR2VuZXJhdGVkIHByb3h5IHdhcyBub3QgZm91bmQuIFdlYlNlcnZpY2Ugc2FtcGxlIGpzcHMgY2Fubm90IGJlIGdlbmVyYXRlZC4KLU1TR19FUlJPUl9NQUxGT1JNRURfVVJMPUlXQUIwMzU4RSBUZXN0IGNsaWVudCBVUkwgaXMgbWFsZm9ybWVkLgotTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZPVVuYWJsZSB0byBlc3RhYmxpc2ggbW9kdWxlIGRlcGVuZGVuY3kgZnJvbSB7MH0gdG8gezF9LgotCi0jCi0jIFdlYlNlcnZpY2VCZWFuTWV0aG9kc1BhZ2UKLSMKLUJVVFRPTl9TRUxFQ1RfQUxMPVNlbGVjdCBBbGwKLUJVVFRPTl9ERVNFTEVDVF9BTEw9RGVzZWxlY3QgQWxsCi1UT09MVElQX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEw9U2VsZWN0IGFsbCBtZXRob2RzCi1UT09MVElQX1BCTUVfQlVUVE9OX0RFU0VMRUNUX0FMTD1EZXNlbGVjdCBhbGwgbWV0aG9kcwotCi0jCi0jIFdlYlNlcnZpY2VXU0RMU2VsZWN0aW9uUGFnZQotIwotUEFHRV9USVRMRV9XU0RMX1NFTEVDVElPTj1XZWIgU2VydmljZSBXU0RMIEZpbGUgU2VsZWN0aW9uCi1QQUdFX0RFU0NfV1NETF9TRUxFQ1RJT049U2VsZWN0IGEgV1NETCBmaWxlLgotCi0jCi0jIFdlYlNlcnZpY2VQdWJsaXNoUGFnZQotIwotUEFHRV9USVRMRV9XU19QVUJMSVNIPVdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uCi1QQUdFX0RFU0NfV1NfUFVCTElTSD1EbyB5b3Ugd2FudCB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2U/Ci1QQUdFX1RJVExFX1dTX0ZJTkQ9RmluZCBhIFdlYiBzZXJ2aWNlCi1QQUdFX0RFU0NfV1NfRklORD1EbyB5b3Ugd2FudCB0byBmaW5kIGEgV2ViIHNlcnZpY2U/Ci1CVVRUT05fV1NfUFVCTElTSD0mTGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcHVibGlzaCB0aGlzIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBSZWdpc3RyeQotQlVUVE9OX1dTX1BVQkxJU0hfUFJJVkFURV9VRERJPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byB0aGUgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLUJVVFRPTl9XU19GSU5EPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGZpbmQgYSBXZWIgc2VydmljZSBmcm9tIGEgVURESSBSZWdpc3RyeQotQlVUVE9OX1dTX0ZJTkRfUFJJVkFURV9VRERJPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGZpbmQgYSBXZWIgc2VydmljZSBmcm9tIHRoZSBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotTEFCRUxfUFVCTElDX1VERElfUkVHSVNUUklFUz1QdWJsaWMgVURESSBSZWdpc3RyeQotCi0jCi0jIEVKQiBVSSBzdHJpbmdzCi0jCi1MQUJFTF9FSkJfQkVBTl9OQU1FPUVKQiBiZWFuCi1UQUJMRV9USVRMRV9FSkJfQkVBTl9OQU1FUz1TdGF0ZWxlc3MgRUpCIGJlYW5zCi1UQUJMRV9USVRMRV9FSkJfUFJPSkVDVF9OQU1FPUVKQiBwcm9qZWN0Ci1MQUJFTF9FQVJfUFJPSkVDVFM9RUFSIHByb2plY3Q6Ci1UT09MVElQX0VBUl9QUk9KRUNUUz1FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzLgotVE9PTFRJUF9UQUJMRV9CRUFOX05BTUVTPVNlbGVjdCBhbiBFSkIuCi1MQUJFTF9TSE9XX0FMTF9TVEFURUxFU1NfU0VTU0lPTl9FSkJTPTw8U2hvdyBhbGwgc3RhdGVsZXNzIHNlc3Npb24gRUpCcz4+Ci0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYlNlcnZpY2VXU0RMU2VsZWN0aW9uUGFnZQotIwotVE9PTFRJUF9QV1dTX1BBR0U9Ci0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYiBTZXJ2aWNlIFdpemFyZCBTY2VuYXJpbyBQYWdlCi0jCi1CVVRUT05fV1NXU0NFTl9QVUJMSVNIPSZQdWJsaXNoIHRoZSBXZWIgc2VydmljZQotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A9RGV2ZWxvcAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFPUFzc2VtYmxlCi1UT09MVElQX1dTV1NDRU5fU0NBTEVfREVQTE9ZPURlcGxveQotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw9SW5zdGFsbAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTj1TdGFydAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1RFU1Q9VGVzdAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0U9TW92ZSB0aGUgc2xpZGVyIHRvIHNldCB0aGUgbGV2ZWwgb2Ygc2VydmljZSBnZW5lcmF0aW9uLgotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVD1Nb3ZlIHRoZSBzbGlkZXIgdG8gc2V0IHRoZSBsZXZlbCBvZiBjbGllbnQgZ2VuZXJhdGlvbi4gU2VydmljZSBtdXN0IGJlIHN0YXJ0ZWQgdG8gZW5hYmxlIGNsaWVudCBnZW5lcmF0aW9uLgotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVF9PTkxZPU1vdmUgdGhlIHNsaWRlciB0byBzZXQgdGhlIGxldmVsIG9mIGNsaWVudCBnZW5lcmF0aW9uLiAKLVRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEw9SW1wbGVtZW50YXRpb24gZm9yIHRoZSB3ZWIgc2VydmljZS4KLVRPT0xUSVBfV1NXU0NFTl9CVVRUT05fQlJPV1NFX0lNUEw9QnJvd3NlIGltcGxlbWVudGF0aW9uIGZpbGVzIGZvciBzcGVjaWZpZWQgc2VydmljZSB0eXBlLgotVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVM9RXhpc3RpbmcgZmlsZXMgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIG5vIHdhcm5pbmcgZHVyaW5nIGdlbmVyYXRpb24uCi0KLSMKLSMgVG9vbHRpcHMgZm9yIGJlYW5zLldlYlNlcnZpY2VCZWFuQ2xhc3NQYWdlCi0jCi1UT09MVElQX1BCQ0xfUEFHRT0KLVRPT0xUSVBfUEJDTF9URVhUX0JFQU5fQ0xBU1M9U2VsZWN0ZWQgSmF2YSBiZWFuLgotVE9PTFRJUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRT1Ccm93c2UgY2xhc3Nlcy4KLVRPT0xUSVBfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0U9QnJvd3NlIEphdmEgZmlsZXMuCi0KLSMKLSMgVG9vbHRpcHMgZm9yIGJlYW5zLldlYlNlcnZpY2VUZXN0UGFnZQotIwotVE9PTFRJUF9QU1RQX0NPTUJPQk9YX1RFU1Q9VGVzdCBmYWNpbGl0aWVzIGF2YWlsYWJsZSB0byB0ZXN0IHRoZSBzZXJ2aWNlLgotVE9PTFRJUF9QU1RQX0xBVU5DSF9CVVRUT049TGF1bmNoIHRoZSBzZWxlY3RlZCB0ZXN0IGZhY2lsaXR5LgotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWJTZXJ2aWNlUnVudGltZVNlbGVjdGlvblBhZ2UKLSMKLVRPT0xUSVBfUFdSU19QQUdFPQotVE9PTFRJUF9QV1JTX0xJU1RfUlVOVElNRVM9U2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBkZXBsb3ltZW50IHJ1bnRpbWUocykuCi1UT09MVElQX1BXUlNfTElTVF9TRVJWRVJTPVNlbGVjdCBmcm9tIGFwcGxpY2F0aW9uIHNlcnZlcihzKS4KLVRPT0xUSVBfUFdSU19SQURJT19TRVJWRVI9U2VydmVyIG9yaWVudGVkIHNlbGVjdGlvbi4KLVRPT0xUSVBfUFdSU19SQURJT19SVU5USU1FPVJ1bnRpbWUgb3JpZW50ZWQgc2VsZWN0aW9uLgotVE9PTFRJUF9QV1JTX1JBRElPX0VYUExPUkU9RXhwbG9yZSBjb21iaW5hdGlvbnMuCi0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYlNlcnZpY2VDbGllbnRSdW50aW1lU2VsZWN0aW9uUGFnZQotIwotVE9PTFRJUF9QV0NSX0NPTUJPX0NMSUVOVF9UWVBFPUNsaWVudCBwcm9qZWN0IHR5cGUuCi1UT09MVElQX1BXQ1JfQ09NQk9fU0VSVklDRV9UWVBFPVNlcnZpY2UgcHJvamVjdCB0eXBlLgotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWJTZXJ2aWNlUHJvamVjdFBhZ2UKLSMKLVRPT0xUSVBfUFdQUl9DT01CT19UWVBFPVdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUuCi1UT09MVElQX1BXUFJfR1JPVVBfU0NFTkFSSU9fU0VSVklDRT1TZXJ2aWNlIGRlZmF1bHRzIGZvciB0aGlzIHdpemFyZCBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9HRU5FUkFURV9QUk9YWT1FbmFibGUvZGlzYWJsZSBwcm94eSBnZW5lcmF0aW9uIGZvciB0aGlzIHNjZW5hcmlvLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1NUQVJUX1dFQl9QUk9KRUNUPVN0YXJ0IFdlYiBzZXJ2aWNlIGluIFdlYiBwcm9qZWN0IGZvciB0aGlzIHNjZW5hcmlvLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfU0VSVklDRV9XRUJfUFJPSkVDVD1JbnN0YWxsIHRoZSBXZWIgc2VydmljZSBvbiB0aGUgc2VydmVyIGZvciB0aGlzIHNjZW5hcmlvLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfQ0xJRU5UX1dFQl9QUk9KRUNUPUluc3RhbGwgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBvbiB0aGUgc2VydmVyIGZvciB0aGlzIHNjZW5hcmlvIChtYW5hZ2VkIGNsaWVudCBvbmx5KS4gCi1UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTEFVTkNIX1dTPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlIGluIHRoaXMgc2NlbmFyaW8gdG8gYSBVRERJIFJlZ2lzdHJ5LgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1RFU1RfU0VSVklDRT1TZWxlY3QgdGhpcyB0byBleHBsb3JlIHRoZSBXZWIgc2VydmljZSBjcmVhdGVkLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX01PTklUT1JfU0VSVklDRT1TZWxlY3QgdGhpcyB0byBtb25pdG9yIHRoZSBTT0FQIHRyYWZmaWMgb2YgdGhpcyBXZWIgc2VydmljZS4KLVRPT0xUSVBfUFdQUl9HUk9VUF9TQ0VOQVJJT19DTElFTlQ9Q2xpZW50IHByb3h5IGRlZmF1bHRzIGZvciB0aGlzIHdpemFyZCBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DT01CT19DTElFTlRUWVBFPUNsaWVudCBwcm94eSBzZWxlY3Rpb24gdHlwZS4KLQotIwotIyBUb29sdGlwcyBmb3IgV2ViU2VydmljZVB1Ymxpc2hQYWdlCi0jCi1UT09MVElQX1BXUEJfUEFHRT0KLVRPT0xUSVBfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0g9UHVibGlzaCB0aGUgV2ViIHNlcnZpY2UuCi0KLSMKLSMgV1NJTCBwcm94eQotIwotUEFHRV9XU0lMX0lNUE9SVD1XU0lMIEltcG9ydCBQYWdlCi1USVRMRV9XU0lMX0lNUE9SVD1XU0lMIEltcG9ydAotREVTQ19XU0lMX0lNUE9SVD1JbXBvcnQgV1NETCByZWZlcmVuY2VzIHRvIGEgV1NJTCBkb2N1bWVudAotUEFHRV9USVRMRV9XU19TRUxFQ1RJT049V2ViIFNlcnZpY2UgU2VsZWN0aW9uIFBhZ2UKLVBBR0VfREVTQ19XU19TRUxFQ1RJT049RW50ZXIgYSB3ZWIgc2VydmljZSBVUkkuCi0KLVBBR0VfTVNHX0xPQURJTkdfV0VCX1NFUlZJQ0VfVVJJPUxvYWRpbmcgV2ViIHNlcnZpY2UgVVJJLi4uCi1QQUdFX01TR19JTlZBTElEX1dFQl9TRVJWSUNFX1VSST1JbnZhbGlkIFdlYiBzZXJ2aWNlIFVSSS4gIEVudGVyIGEgVVJJIHRvIGEgV1NETCwgV1NJTCBvciBIVE1MIGRvY3VtZW50LgotUEFHRV9NU0dfTk9fU1VDSF9GSUxFPUZpbGUgInswfSIgZG9lcyBub3QgZXhpc3QuCi1QQUdFX01TR19TRUxFQ1RJT05fTVVTVF9CRV9XU0RMPVNlbGVjdGlvbiBtdXN0IGJlIFdTREwuCi1QQUdFX01TR19JTlZBTElEX1dTSUxfRklMRV9OQU1FPUludmFsaWQgV1NJTCBmaWxlIG5hbWUuICBXU0lMIGZpbGUgbmFtZSBtdXN0IGVuZCB3aXRoIC53c2lsCi0KLU1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEU9SVdBQjA0NjlFICJ7MH0iIGlzIG5vdCByZXNvbHZhYmxlLgotTVNHX0VSUk9SX1dTRExfSEFTX05PX1NFUlZJQ0VfRUxFTUVOVD1JV0FCMDU1MUUgV1NETCBmaWxlIGF0IHswfSBoYXMgbm8gc2VydmljZSBlbGVtZW50LgotCi1MQUJFTF9XU0lMX1VSST1XU0lMIFVSSToKLUxBQkVMX0JST1dTRT1Ccm93c2UKLUxBQkVMX1dTREw9V1NETDoKLUxBQkVMX1dTRExfVVJJPVdTREwgVVJJCi1MQUJFTF9JTVBPUlQ9SW1wb3J0Li4uCi1MQUJFTF9BREQ9QWRkCi1MQUJFTF9SRU1PVkU9UmVtb3ZlCi1MQUJFTF9XU19TRUxFQ1RJT049RW50ZXIgYSBVUkkgdG8gYSBXU0RMLCBXU0lMIG9yIEhUTUwgZG9jdW1lbnQ6Ci1MQUJFTF9TRUxFQ1RfV1NETD1TZWxlY3QgYSBXU0RMCi1MQUJFTF9WQUxJREFURV9NRVNTQUdFUz1XU0RMIHZhbGlkYXRpb24gbWVzc2FnZXM6Ci0KLVRPT0xUSVBfV1NJTF9JTVBPUlRfUEFHRT1UaGlzIHBhZ2UgYWxsb3dzIHlvdSB0byBhZGQgV1NETCByZWZlcmVuY2VzIHRvIGEgV1NJTCBkb2N1bWVudC4KLVRPT0xUSVBfV1NJTF9URVhUX1dTSUw9RW50ZXIgdGhlIGxvY2F0aW9uIG9mIGEgbmV3IG9yIGV4aXN0aW5nIFdTSUwgZG9jdW1lbnQuCi1UT09MVElQX1dTSUxfQlVUVE9OX0JST1dTRV9XU0lMPUJyb3dzZSBmb3IgYSBXU0lMIGRvY3VtZW50LgotVE9PTFRJUF9XU0lMX1RBQkxFX1dTREw9RW50ZXIgdGhlIFVSSXMgb2YgdGhlIFdTRExzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIGFzIHNlcnZpY2UgcmVmZXJlbmNlcy4KLVRPT0xUSVBfUENPTl9QQUdFPVNlbGVjdCBhIHdlYiBzZXJ2aWNlIGZvciBjb25zdW1wdGlvbi4KLVRPT0xUSVBfUENPTl9URVhUX1dTPUVudGVyIGEgVVJJIHRvIGEgV1NETCwgV1NJTCBvciBIVE1MIGRvY3VtZW50LgotVE9PTFRJUF9QQ09OX0JVVFRPTl9CUk9XU0VfV1M9QnJvd3NlIGZvciBhIHdlYiBzZXJ2aWNlIHJlc291cmNlLgotVE9PTFRJUF9WQUxJREFURV9URVhUX01FU1NBR0U9TWVzc2FnZXMgZnJvbSBXU0RMIHZhbGlkYXRpb24uCi1UT09MVElQX1RBQkxFX1ZBTElEQVRFX01FU1NBR0U9VXNlIHRoZSBXZWIgU2VydmljZSBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcHJlZmVyZW5jZSB0byBlbmFibGUgb3IgZGlzYWJsZSBXU0RMIHZhbGlkYXRpb24uCi0KLSMKLSMgVGFibGUgY29sdW1uIGhlYWRpbmcgZm9yIFZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0Ci0jCi1UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9TRVZFUklUWT1TZXZlcml0eQotVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTElORT1MaW5lCi1UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9DT0xVTU49Q29sdW1uCi1UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9NRVNTQUdFPU1lc3NhZ2UKLSMKLSMgVG9vbHRpcHMgZm9yIGNsaWVudC5XZWJTZXJ2aWNlQ2xpZW5UZXN0UGFnZQotIwotVE9PTFRJUF9QV1NNX1BBR0U9Ci1UT09MVElQX1BXU01fQ0hFQ0tCT1hfVEVTVD1FbmFibGUvZGlzYWJsZSBUZXN0LgotVE9PTFRJUF9QV1NNX0NPTUJPQk9YX1RFU1Q9U2VsZWN0IHRoZSB0ZXN0IHR5cGUuCi1UT09MVElQX1BXU01fQ09NQk9CT1hfU0VSVkVSPVNlbGVjdCB0aGUgc2VydmVyIHR5cGUuCi1UT09MVElQX1BXU01fQ09NQk9CT1hfU0VSVkVSX0lOU1RBTkNFPVNlbGVjdCB0aGUgc2VydmVyIGluc3RhbmNlLgotVE9PTFRJUF9QV1NNX0NIRUNLQk9YX0xBVU5DSD1SdW4gdGVzdCBvbiBhIHNlcnZlci4KLVRPT0xUSVBfUFdTTV9URVhUX0pTUF9GT0xERVI9RGVzdGluYXRpb24gZm9sZGVyIG9mIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi1UT09MVElQX1BXU01fQlVUVE9OX0pTUF9GT0xERVJfQlJPV1NFPUJyb3dzZSBmb2xkZXJzLgotVE9PTFRJUF9QV1NNX0JVVFRPTl9TRUxFQ1RfQUxMPVNlbGVjdCBhbGwgbWV0aG9kcy4KLVRPT0xUSVBfUFdTTV9CVVRUT05fREVTRUxFQ1RfQUxMPURlc2VsZWN0IGFsbCBtZXRob2RzLgotVE9PTFRJUF9QV1NNX0NPTUJPX1BST0pFQ1Q9V2ViIHByb2plY3QgZm9yIGdlbmVyYXRlZCBzYW1wbGUuCi1UT09MVElQX1BXU01fVEVYVF9TQU1QTEVfRk9MREVSPURlc3RpbmF0aW9uIGZvbGRlciBvZiBnZW5lcmF0ZWQgc2FtcGxlIGZpbGVzLgotVE9PTFRJUF9QV1NNX1RSRUVfTUVUSE9EUz1NZXRob2RzIHRvIGdlbmVyYXRlIGludG8gdGhlIHNhbXBsZS4KLVRPT0xUSVBfUFdTTV9FQVJfUFJPSkVDVD1FQVIgcHJvamVjdCBmb3IgdGhlIGdlbmVyYXRlZCBzYW1wbGUuCi0KLSMKLSMgSFRUUCBCYXNpYyBBdXRoCi0jCi1ESUFMT0dfVElUTEVfSFRUUF9CQVNJQ19BVVRIPUhUVFAgQmFzaWMgQXV0aGVudGljYXRpb24KLUxBQkVMX1VSTD1VUkw6Ci1MQUJFTF9IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUU9VXNlciBuYW1lOgotTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEPVBhc3N3b3JkOgotCi1UT09MVElQX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRT1FbnRlciB5b3VyIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gdXNlciBuYW1lLgotVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQ9RW50ZXIgeW91ciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkLgotCi0jCi0jIEdlbmVyYXRlIEhhbmRsZXIgU2tlbGV0b24KLSMKLU1TR19FUlJPUl9HRU5FUkFURV9IQU5ETEVSX1NLRUxFVE9OPUlXQUIwMzU5RSBFcnJvciBpbiBnZW5lcmF0aW5nIGhhbmRsZXIgc2tlbGV0b24uCi1NU0dfRVJST1JfV1JJVEVfRklMRT1JV0FCMDM2MEUgRXJyb3IgaW4gd3JpdGluZyBmaWxlIHswfS4KLQotIwotIyBIYW5kbGVycyBDb25maWd1cmF0aW9uIHdpemFyZCBwYWdlCi0jCi1MQUJFTF9IQU5ETEVSU19DT05GSUc9SGFuZGxlciBjb25maWd1cmF0aW9uCi1MQUJFTF9CVVRUT05fQUREPUFkZAotTEFCRUxfQlVUVE9OX1JFTU9WRT1SZW1vdmUKLUxBQkVMX0JVVFRPTl9NT1ZFX1VQPU1vdmUgdXAKLUxBQkVMX0JVVFRPTl9NT1ZFX0RPV049TW92ZSBkb3duCi1MQUJFTF9CVVRUT05fR0VOX1NLRUxFVE9OPUdlbmVyYXRlIHNrZWxldG9uIGNsYXNzZXMgZm9yIG5ldyBoYW5kbGVycwotTEFCRUxfQ09NQk9fU09VUkNFX0xPQz1PdXRwdXQgZm9sZGVyOgotTEFCRUxfQ09NQk9fV1NfQ0xJRU5UX1JFRj1DbGllbnQgU2VydmljZSBSZWZlcmVuY2VzOgotTEFCRUxfQ09NQk9fV1NfU0VSVklDRV9ERVNDPVNlcnZpY2UgRGVzY3JpcHRpb25zOgotTVNHX1RFWFRfTlVNX09GX1NFUlZJQ0VTPVlvdSBoYXZlIHNlbGVjdGVkIHswfSBzZXJ2aWNlcy4KLU1TR19URVhUX05VTV9PRl9DTElFTlRTPVlvdSBoYXZlIHNlbGVjdGVkIHswfSBjbGllbnQgc2VydmljZXMuCi0gCi1MQUJFTF9IQU5ETEVSX05BTUU9TmFtZQotTEFCTEVfSEFORExFUl9DTEFTUz1DbGFzcyBuYW1lCi1MQUJFTF9IQU5ETEVSX1BPUlQ9UG9ydCBuYW1lCi0gCi1ESUFMT0dfVElUTEVfV1NfQUREX0hBTkRMRVI9QWRkIE5ldyBIYW5kbGVyCi1MQUJFTF9URVhUX0hBTkRMRVJfTkFNRT1OYW1lOgotTEFCRUxfVEVYVF9IQU5ETEVSX0NMQVNTPUNsYXNzIG5hbWU6Ci1MQUJFTF9URVhUX0hBTkRMRVJfUE9SVD1Qb3J0IG5hbWU6Ci0gCi1QQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUc9U2VydmljZSBIYW5kbGVycyBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfU0VSVklDRV9IRExSX0NPTkZJRz1Db25maWd1cmUgc2VydmljZS1zaWRlIGhhbmRsZXJzCi1QQUdFX1RJVExFX0NMSUVOVF9IRExSX0NPTkZJRz1DbGllbnQgSGFuZGxlcnMgQ29uZmlndXJhdGlvbgotUEFHRV9ERVNDX0NMSUVOVF9IRExSX0NPTkZJRz1Db25maWd1cmUgY2xpZW50LXNpZGUgaGFuZGxlcnMKLVBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUc9QWRkIGhhbmRsZXJzIHRvIG11bHRpcGxlIFdlYiBzZXJ2aWNlcy4KLVBBR0VfREVTQ19NVUxUSVBMRV9DTElFTlRTX0NPTkZJRz1BZGQgaGFuZGxlcnMgdG8gbXVsdGlwbGUgV2ViIHNlcnZpY2UgY2xpZW50cy4KLSAKLVRPT0xUSVBfRURJVF9XU19IQU5ETEVSUz1Db25maWd1cmUgV2ViIFNlcnZpY2UgSGFuZGxlcnMKLVRPT0xUSVBfQlVUVE9OX0dFTl9TS0VMRVRPTj1TZWxlY3QgdG8gZ2VuZXJhdGUgc2tlbGV0b24gY2xhc3NlcyBmb3IgbmV3IGhhbmRsZXJzLgotVE9PTFRJUF9DT01CT19TT1VSQ0VfTE9DPVNlbGVjdCB0aGUgb3V0cHV0IGxvY2F0aW9uIGZvciBmaWxlIGdlbmVyYXRpb24uCi1UT09MVElQX1RFWFRfSEFORExFUl9OQU1FPUhhbmRsZXIgbmFtZQotVE9PTFRJUF9URVhUX0hBTkRMRVJfQ0xBU1M9SGFuZGxlciBjbGFzcyBuYW1lCi1UT09MVElQX1RFWFRfSEFORExFUl9QT1JUPUhhbmRsZXIgcG9ydCBjb21wb25lbnQgbmFtZQotVE9PTFRJUF9XU19DTElFTlRfUkVGPVNlbGVjdCBhIGNsaWVudCBzZXJ2aWNlLXJlZmVyZW5jZSB0byBzaG93IGl0cyBoYW5kbGVycy4KLVRPT0xUSVBfV1NfU0VSVklDRV9ERVNDPVNlbGVjdCBhIHNlcnZpY2UgZGVzY3JpcHRpb24gdG8gc2hvdyBpdHMgaGFuZGxlcnMuCi0gCi0jCi0jIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLSMKLU1TR19FUlJPUl9XRUJfU0VSVklDRV9DTElFTlRTX05PVF9GT1VORD1ObyBXZWIgc2VydmljZSBjbGllbnRzIHdlcmUgZm91bmQuIENyZWF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCBiZWZvcmUgY29uZmlndXJpbmcgV2ViIHNlcnZpY2UgY2xpZW50IGhhbmRsZXJzLgotIAotIwotIyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotIwotTVNHX0VSUk9SX1dFQl9TRVJWSUNFU19OT1RfRk9VTkQ9Tm8gV2ViIHNlcnZpY2VzIHdlcmUgZm91bmQuICBDcmVhdGUgYSBXZWIgc2VydmljZSBiZWZvcmUgY29uZmlndXJpbmcgV2ViIHNlcnZpY2UgaGFuZGxlcnMuCi1NU0dfRVJST1JfV1NERF9OT1RfRk9VTkQ9VW5hYmxlIHRvIGxhdW5jaCBoYW5kbGVyIHdpemFyZC4gIE5vIGRlcGxveW1lbnQgZGVzY3JpcHRvciB3YXMgZm91bmQgZm9yIHRoaXMgV2ViIHNlcnZpY2UuCi1NU0dfRVJST1JfSU5WQUxJRF9NVUxUSVBMRV9TRVJWSUNFX1NFTEVDVD1JbnZhbGlkIG11bHRpcGxlIHNlbGVjdGlvbiBvZiBTZXJ2aWNlcy4gIEVuc3VyZSBhbGwgc2VsZWN0aW9ucyBhcmUgU2VydmljZXMuIwotCi0jIE9wZW5KYXZhRWRpdG9yQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19PUEVOX0pBVkFfRURJVE9SPUlXQUIwMDI5RSBVbmFibGUgdG8gb3BlbiBjbGFzcyB7MH0gZnJvbSBwcm9qZWN0IHsxfSBpbiB0aGUgSmF2YSBlZGl0b3IuCi0KLSMKLSMgQ2hlY2tJZlNlcnZpY2VQcm9qZWN0Ci0jCi1NU0dfV0FSTl9JU19TRVJWSUNFX1BST0pFQ1Q9VGhlIHNlbGVjdGVkIGNsaWVudCBwcm9qZWN0LCB7MH0sIGNvbnRhaW5zIHRoZSBXZWIgc2VydmljZS4gUHJvY2VlZGluZyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBtYXkgcmVzdWx0IGluIHJ1bnRpbWUgZXJyb3JzIHdoZW4gaW52b2tpbmcgdGhlIFdlYiBzZXJ2aWNlLiBXb3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPwotTVNHX1VTRVJfQUJPUlRFRD1Vc2VyIHByZXNzZWQgY2FuY2VsIGluIHdhcm5pbmcgZGlhbG9nIHdoaWNoIHdhcm5lZCBhYm91dCB0aGUgc2VsZWN0ZWQgY2xpZW50IHByb2plY3QgYmVpbmcgdGhlIHNlcnZpY2UgcHJvamVjdC4KLQotIwotIyBNaXNzaW5nIHRoaXJkIHBhcnR5IGZpbGUgZXJyb3IgbWVzc2FnZQotIwotTVNHX01JU1NJTkdfVEhJUkRfUEFSVFlfRklMRVM9TWlzc2luZyB0aGlyZCBwYXJ0eSBmaWxlcy4gIFJlZmVyIHRvIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMvd3MvZG93bmxvYWRfaW5zdHJ1Y3Rpb25zX2Zvcl9qYXJzLmh0bWwKLQotIwotIyBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZAotIwotTVNHX1dBUk5JTkdfTk9fU0VSVklDRV9FTEVNRU5UPVRoZSBXU0RMIGZpbGUgZG9lcyBub3QgY29udGFpbiBhIFNlcnZpY2UgZWxlbWVudC4gIFRoZXJlZm9yZSBhIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBKYXZhIHByb3h5IHdpbGwgbm90IGJlIGdlbmVyYXRlZCBhbmQgYXMgYSByZXN1bHQsIGEgSmF2YSB0ZXN0IGNsaWVudCB3aWxsIG5vdCBiZSBsYXVuY2hlZC4gIENsaWNrIE9LIHRvIHByb2NlZWQsIG9yIGNsaWNrIENhbmNlbCB0byBzZWxlY3QgYW5vdGhlciBXU0RMIGZpbGUuICBBbHRlcm5hdGVseSwgZXhpdCB0aGUgd2l6YXJkIGFuZCB1c2UgdGhlIFdTREwgZWRpdG9yIHRvIGNyZWF0ZSBhIFNlcnZpY2UgV1NETCBkb2N1bWVudC4KLQotIwotIyBDaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZAotIwotU1RJTExfVkFMSURBVElOR19XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaW4gUHJvZ3Jlc3MuICBcbi0gQ2xpY2sgQ2FuY2VsIHRvIGNhbmNlbCB0aGUgY3VycmVudCBXU0RMIHZhbGlkYXRpb24gYW5kIGNvbnRpbnVlLiBcbi0gQ2xpY2sgQ2FuY2VsIGFuZCBVcGRhdGUgdG8gdXBkYXRlIHRoZSBwcmVmZXJlbmNlIHRvIGFsd2F5cyBjYW5jZWwgaW5jb21wbGV0ZSBXU0RMIHZhbGlkYXRpb24gd2hpbGUgdHJhdmVyc2luZyB0aGUgd2l6YXJkLiAgXG4tIENsaWNrIFdhaXQgdG8gd2FpdCBmb3IgV1NETCB2YWxpZGF0aW9uIHRvIGNvbXBsZXRlLgotQ0FOQ0VMX1ZBTElEQVRJT05fTEFCRUw9Q2FuY2VsCi1DQU5DRUxfVkFMSURBVElPTl9ERVNDUklQVElPTj1DYW5jZWwgdGhlIGN1cnJlbnQgV1NETCB2YWxpZGF0aW9uIGFuZCBjb250aW51ZQotQ0FOQ0VMX0FMTF9WQUxJREFUSU9OX0xBQkVMPUNhbmNlbCBhbmQgVXBkYXRlCi1DQU5DRUxfQUxMX1ZBTElEQVRJT05fREVTQ1JJUFRJT049VXBkYXRlIHRoZSBwcmVmZXJlbmNlIHRvIGFsd2F5cyBjYW5jZWwgaW5jb21wbGV0ZSBXU0RMIHZhbGlkYXRpb24gd2hpbGUgdHJhdmVyc2luZyB0aGUgd2l6YXJkLgotV0FJVF9WQUxJREFUSU9OX0xBQkVMPVdhaXQKLVdBSVRfVkFMSURBVElPTl9ERVNDUklQVElPTj1XYWl0IGZvciBXU0RMIHZhbGlkYXRpb24gdG8gY29tcGxldGUKLVRBU0tfTEFCRUxfQ0hFQ0tfV1NETF9WQUxJREFUSU9OPUNoZWNrIGZvciBXU0RMIHZhbGlkYXRpb24KLVRBU0tfREVTQ19DSEVDS19XU0RMX1ZBTElEQVRJT049Q2hlY2sgaWYgV1NETCB2YWxpZGF0aW9uIGhhcyBjb21wbGV0ZWQKLQotIwotIyBXU0RMVmFsaWRhdGlvbiBtZXNzYWdlcwotIwotTUVTU0FHRV9WQUxJREFURV9OT19XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQuCi1NRVNTQUdFX1ZBTElEQVRFX1JFTU9URV9XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaXMgb25seSBlbmFibGVkIGZvciByZW1vdGUgZmlsZXMuCi1NRVNTQUdFX1ZBTElEQVRFX0FMTF9XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaXMgZW5hYmxlZC4KLU1FU1NBR0VfVkFMSURBVEVfSU5fUFJPR1JFU1M9V1NETCB2YWxpZGF0aW9uIGluIHByb2dyZXNzIC4uLgotRVJST1JfTUVTU0FHRVNfSU5fVkFMSURBVElPTj1UaGUgV1NETCBmaWxlIGNvbnRhaW5zIHZhbGlkYXRpb24gZXJyb3IocykuCi1XQVJOSU5HX01FU1NBR0VTX0lOX1ZBTElEQVRJT049VGhlIFdTREwgZmlsZSBjb250YWlucyB2YWxpZGF0aW9uIHdhcm5pbmcocykuCi1XQVJOSU5HX0lGX0NPTlRJTlVFPUNvbnRpbnVpbmcgd2l0aCB0aGUgd2l6YXJkIG1heSByZXN1bHQgaW4gZ2VuZXJhdGlvbiBvciBydW50aW1lIHByb2JsZW0uCi1WQUxJREFUSU9OX0NPTVBMRVRFRD1XU0RMIHZhbGlkYXRpb24gY29tcGxldGVzIHdpdGggbm8gd2FybmluZyBvciBlcnJvci4KLVRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFX1NVTU1BUlk9V1NETCB2YWxpZGF0aW9uIHByZWZlcmVuY2UgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcHJlZmVyZW5jZS4KLQotTEFCRUxfQlVUVE9OX1NUT1BfV1NETF9WQUxJREFUSU9OPVN0b3AgVmFsaWRhdGlvbgotVE9PTFRJUF9TVE9QX1ZBTElEQVRJT05fQlVUVE9OPVN0b3BzIHRoZSBjdXJyZW50IFdTREwgdmFsaWRhdGlvbiBvcGVyYXRpb24uCi0KLQotIwotIyBTdGFydCBzZXJ2ZXIgcGFnZQotIwotUEFHRV9USVRMRV9XU19TVEFSVF9TRVJWRVI9U2VydmVyIHN0YXJ0dXAKLVBBR0VfREVTQ19XU19TVEFSVF9TRVJWRVI9U3RhcnQgdGhlIHNlcnZlciBmcm9tIHRoaXMgcGFnZS4KLUxBQkVMX1NUQVJUX1NFUlZFUl9URVhUMT1JbiBvcmRlciB0byBwcm9jZWVkIHRoZSBzZXJ2ZXIgInswfSIgbXVzdCBiZSBzdGFydGVkLgotTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQyPU9uY2UgdGhlIHNlcnZlciBpcyBzdGFydGVkIHRoZSAibmV4dCIgYnV0dG9uIHdpbGwgYmUgZW5hYmxlZC4KLUxBQkVMX1NUQVJUX1NFUlZFUl9URVhUMz1UaGUgImJhY2siIGJ1dHRvbiBjYW4gYmUgdXNlZCB3aGlsZSB0aGUgc2VydmVyIGlzIHN0YXJ0aW5nIHRvCi1MQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDQ9Y2hhbmdlIGFueSBwcmV2aW91cyBzZXR0aW5ncyBpbiB0aGlzIHdpemFyZC4KLUxBQkVMX1NUQVJUX1NFUlZFUl9CVVRUT049JlN0YXJ0IHNlcnZlcgotVE9PTFRJUF9TVEFSVF9TRVJWRVJfQlVUVE9OPVN0YXJ0IHRoZSBzZXJ2ZXIKLVRFWFRfU0VSVkVSX1NUQVRVUz1DdXJyZW50bHkgdGhlIHNlcnZlciBpcyB7MH0uCi1URVhUX1NFUlZFUl9NU0c9U2VydmVyIHswfQotVEVYVF9TRVJWRVJfU1RBUlRFRD1zdGFydGVkCi1URVhUX1NFUlZFUl9TVEFSVElORz1zdGFydGluZwotVEVYVF9TRVJWRVJfU1RPUFBFRD1zdG9wcGVkCi0KLSMKLSMgV2FybmluZ3MKLSMKLQotTVNHX1NFUlZFUl9OT1RfRk9VTkRfV0FSTklORz1BIHN1aXRhYmxlIHNlcnZlciB3YXMgbm90IGZvdW5kLiBUaGUgc2FtcGxlIGNhbiBiZSBnZW5lcmF0ZWQgYnV0IGNhbm5vdCBiZSBsYXVuY2hlZC4KLQotCi0jCi0jIEFudCB0YXNrIExpc3Qgb3B0aW9ucwotIwotCi0jIE5vdGUgdG8gdHJhbnNsYXRpb24gZG8gbm90IHRyYW5zbGF0ZSBrZXl3b3JkIFJ1bnRpbWVJZAotTVNHX0lORk9fQU5UX1JVTlRJTUVfSEVBRElORz1XZWIgU2VydmljZSBSdW50aW1lIElEcyAoUnVudGltZUlkKQotTVNHX0lORk9fQU5UX1NFUlZFUl9SVU5USU1FPVNlcnZlciBydW50aW1lOiB7MH0KLU1TR19JTkZPX0FOVF9DTElFTlRfUlVOVElNRT1DbGllbnQgcnVudGltZTogezB9IAotCi0jIE5vdGUgdG8gdHJhbnNsYXRpb24gZG8gbm90IHRyYW5zbGF0ZSBrZXl3b3JkIFNlcnZlcklkCi1NU0dfSU5GT19BTlRfU0VSVkVSX0hFQURJTkc9U2VydmVyIElEcyAoU2VydmVySWQpCi1NU0dfSU5GT19BTlRfU0VSVkVSPVNlcnZlcjogezB9Ci0KLU1TR19JTkZPX1dTRExfT1BFUkFUSU9OX1RJTUVEX09VVD1Db3VsZCBub3QgcmV0cmlldmUgdGhlIFdTREwgZmlsZSB7MH0uICBEbyB5b3Ugd2FudCB0byBjb250aW51ZSB0byB3YWl0IGZvciB0aGlzIGZpbGU/CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9Db25zdW1wdGlvblVJTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5MWU4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAyMjEgMTE5MTExICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyOSAxMjgwNjkgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIDIwMDYwNDExICAgMTM2MTM0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxNyAgIDEzNjM5MC8xMzYxNTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyMCAgIDEzNjE1OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNiAgIDEzODY0NyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUxMCAgIDE0MTExNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTA5ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNzE5ICAgMTM5OTc3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTAzMSAgIDE0MDUxOCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA4MDMxOCAgIDIxMzMzMCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgTm9uLWNvbnZlbnRpb25hbCBKYXZhIG5hbWluZyBwcmV2ZW50cyBjcmVhdGluZyBXZWIgU2VydmljZXMgKGNsaWVudCkKLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA0MTYgICAyMTUwODQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA0MjUgICAyMjEyMzIgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBDb25zdW1wdGlvblVJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIENvbnN1bXB0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9KQVZBX1BST1hZX0RJQUxPRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETDJQUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1NSUEZfQ09NQk9fU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU1JQRl9DT01CT19SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU1JQRl9DT01CT19KMkVFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9UQVNLX0VYQ0VQVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUVfSU5TVEFMTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0ZPTERFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0pTUF9GT0xERVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XRUJfUFJPSkVDVF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VJTVBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VERUY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSjJFRV9WRVJTSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX05BOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0JST1dTRV9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCT1RUT01VUF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT1BET1dOX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENMSUVOVF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01CSU5FRF9UWVBFX0FORF9SVU5USU1FX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdJWkFSRF9USVRMRV9XU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1NUQVJUX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9JTlNUQUxMX1NFUlZJQ0VfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0lOU1RBTExfQ0xJRU5UX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEdST1VQX1NDRU5BUklPX1NFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgR1JPVVBfU0NFTkFSSU9fQ0xJRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VDTElFTlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NfUlVOVElNRV9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1JVTlRJTUVfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NVTU1BUlk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1VNTUFSWV9OT19DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfUlVOVElNRVNfTElTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWRVJTX0xJU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVkVSU19JTlNUQU5DRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRURJVF9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9FQVJfTU9EVUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9FQVJfTU9EVUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9NT0RVTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9NT0RVTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9FQVJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFX0VBUl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9DT01QX1RZUEVfV0VCOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9DT01QX1RZUEVfRUpCOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9DT01QX1RZUEVfQVBQX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfQ09NUF9UWVBFX0NPTlRBSU5FUkxFU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfVEVYVF9TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX0oyRUVfVkVSU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRUxFQ1RJT05fVklFV19USVRMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRUxFQ1RJT05fVklFV19SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFTEVDVElPTl9WSUVXX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRUxFQ1RJT05fVklFV19FWFBMT1JFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1RSRUVfRVhJU1RJTkdfU0VSVkVSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9UUkVFX1NFUlZFUl9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTk9fT0JKRUNUX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTk9fU0VSVklDRV9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lOVkFMSURfU0VSVklDRV9ERUY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lOVkFMSURfU0VSVklDRV9JTVBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX1NFUlZJQ0VfSU1QTF9OQU1JTkdfQ09OVkVOVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTk9fUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTk9fU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TVFVCX09OTFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fU1RVQl9PTkxZOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX05PX1NFUlZJQ0VfU0VSVkVSOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX05PX0NMSUVOVF9TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZFUl9UQVJHRVRfTUlTTUFUQ0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0oyRUVfTUlTTUFUQ0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfUFJPSkVDVF9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9QUk9KRUNUX1RZUEVfRU1QVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfRUFSX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19DTElFTlRfUFJPSkVDVF9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1BST0pFQ1RfVFlQRV9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX0VBUl9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9FSkJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9QUk9KRUNUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTU9EVUxFX05BTUVfQU5EX1BST0pFQ1RfTkFNRV9OT1RfVEhFX1NBTUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfSkFWQVBST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfRUFSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfQ09NUE9ORU5UUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfUFJPSkVDVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dST05HX0NMSUVOVF9QUk9KRUNUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9TVUI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU1VCOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19HRU5FUkFMX1BST0pFQ1RfQU5EX0VBUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRUFSX1BST0pFQ1RfV0lMTF9CRV9DUkVBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FQVJfV0lMTF9CRV9BU1NPQ0lBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QUk9KRUNUX1dJTExfQkVfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRUFSX1dJTExfQkVfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUFJPSkVDVF9BTkRfRUFSX0NSRUFURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfU0VMRUNUSU9OX1ZJRVdfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FSkI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTk9fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfVkFMSURBVElPTl9JTlRFUk5BTF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1hNTDJCRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19OMlBfTUFQUElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX01BUFBJTkdfRFVQTElDQVRFX0VOVFJJRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0dFTkVSQVRFX1BST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU1NLRUxfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NTS0VMX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NLRUxFVE9OX1JPT1RfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CRUFOX0NMQVNTX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfQkVBTl9DQU5OT1RfQkVfRU1QVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0JST1dTRV9DTEFTU0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NURVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfVEVTVF9XRUJTRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENIRUNLQk9YX01PTklUT1JfV0VCU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5BQkxFX1RPX0xBVU5DSF9XU0RMX1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0xBVU5DSF9TRVJWSUNFX1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19TQU1QTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1NBTVBMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9URVNUX1RZUEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9SVU5fVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0pTUF9QUk9KRUNUX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19QUk9YWV9OT1RfQ09NUElMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01BTEZPUk1FRF9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1NFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0RFU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU0RMX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NETF9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NfRklORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfRklORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NfUFVCTElTSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NXU0NFTl9QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XU19QVUJMSVNIX1BSSVZBVEVfVURESTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NfRklORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NfRklORF9QUklWQVRFX1VEREk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfUFVCTElDX1VERElfUkVHSVNUUklFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FSkJfQkVBTl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX1RJVExFX0VKQl9CRUFOX05BTUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX1RJVExFX0VKQl9QUk9KRUNUX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRUFSX1BST0pFQ1RTOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NIT1dfQUxMX1NUQVRFTEVTU19TRVNTSU9OX0VKQlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRJTEVfU0VSVklDRV9QUk9KRUNUX1NFVFRJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRJTEVfQ0xJRU5UX1BST0pFQ1RfU0VUVElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRJTEVfU0VSVklDRV9ERUZfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9DTElFTlRQUk9KRUNUX0xJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVBMT1k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlRfT05MWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9CVVRUT05fT1ZFUldSSVRFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9CVVRUT05fQlJPV1NFX0lNUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9FQVJfUFJPSkVDVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9UQUJMRV9CRUFOX05BTUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdXU19QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDTF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDTF9URVhUX0JFQU5fQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFNUUF9DT01CT0JPWF9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFNUUF9MQVVOQ0hfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19MSVNUX1NFUlZFUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX1JBRElPX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfUkFESU9fUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfUkFESU9fRVhQTE9SRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXQ1JfQ09NQk9fQ0xJRU5UX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0NSX0NPTUJPX1NFUlZJQ0VfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ09NQk9fVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfR1JPVVBfU0NFTkFSSU9fU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfR0VORVJBVEVfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1NUQVJUX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DSEVDS0JPWF9JTlNUQUxMX1NFUlZJQ0VfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfQ0xJRU5UX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DSEVDS0JPWF9MQVVOQ0hfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1RFU1RfU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9HUk9VUF9TQ0VOQVJJT19DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NPTUJPX0NMSUVOVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BCX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BCX0NIRUNLQk9YX1dTX0xBVU5DSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1dTSUxfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX1dTSUxfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERFU0NfV1NJTF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19MT0FESU5HX1dFQl9TRVJWSUNFX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19JTlZBTElEX1dFQl9TRVJWSUNFX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19OT19TVUNIX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfU0VMRUNUSU9OX01VU1RfQkVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19JTlZBTElEX1dTSUxfRklMRV9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfSEFTX05PX1NFUlZJQ0VfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU0lMX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU0RMX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQUREOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JFTU9WRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU19TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VMRUNUX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVkFMSURBVEVfTUVTU0FHRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU0lMX0lNUE9SVF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NJTF9URVhUX1dTSUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU0lMX0JVVFRPTl9CUk9XU0VfV1NJTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTSUxfVEFCTEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BDT05fUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BDT05fVEVYVF9XUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BDT05fQlVUVE9OX0JST1dTRV9XUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1ZBTElEQVRFX1RFWFRfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1RBQkxFX1ZBTElEQVRFX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fU0VWRVJJVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTElORTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQUJMRV9DT0xVTU5fVkFMSURBVElPTl9DT0xVTU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ0hFQ0tCT1hfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ09NQk9CT1hfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ09NQk9CT1hfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9DT01CT0JPWF9TRVJWRVJfSU5TVEFOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX0NIRUNLQk9YX0xBVU5DSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fVEVYVF9KU1BfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9CVVRUT05fSlNQX0ZPTERFUl9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX0JVVFRPTl9TRUxFQ1RfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9CVVRUT05fREVTRUxFQ1RfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9DT01CT19QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9URVhUX1NBTVBMRV9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX1RSRUVfTUVUSE9EUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fRUFSX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVExFX0hUVFBfQkFTSUNfQVVUSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfR0VORVJBVEVfSEFORExFUl9TS0VMRVRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1JJVEVfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9IQU5ETEVSU19DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQlVUVE9OX0FERDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CVVRUT05fUkVNT1ZFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JVVFRPTl9NT1ZFX1VQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JVVFRPTl9NT1ZFX0RPV047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQlVUVE9OX0dFTl9TS0VMRVRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DT01CT19TT1VSQ0VfTE9DOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NPTUJPX1dTX0NMSUVOVF9SRUY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ09NQk9fV1NfU0VSVklDRV9ERVNDOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19URVhUX05VTV9PRl9TRVJWSUNFUzsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfVEVYVF9OVU1fT0ZfQ0xJRU5UUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9IQU5ETEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCTEVfSEFORExFUl9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9IQU5ETEVSX1BPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVExFX1dTX0FERF9IQU5ETEVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1RFWFRfSEFORExFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1RFWFRfSEFORExFUl9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9URVhUX0hBTkRMRVJfUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1NFUlZJQ0VfSERMUl9DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9DTElFTlRfSERMUl9DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX0NMSUVOVF9IRExSX0NPTkZJRzsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfTVVMVElQTEVfU0VSVklDRVNfQ09ORklHOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19NVUxUSVBMRV9DTElFTlRTX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0VESVRfV1NfSEFORExFUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9CVVRUT05fR0VOX1NLRUxFVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfQ09NQk9fU09VUkNFX0xPQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1RFWFRfSEFORExFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfVEVYVF9IQU5ETEVSX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfVEVYVF9IQU5ETEVSX1BPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU19DTElFTlRfUkVGOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NfU0VSVklDRV9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fT1BFTl9KQVZBX0VESVRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9JU19TRVJWSUNFX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VTRVJfQUJPUlRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTUlTU0lOR19USElSRF9QQVJUWV9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTklOR19OT19TRVJWSUNFX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RJTExfVkFMSURBVElOR19XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBTkNFTF9WQUxJREFUSU9OX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBTkNFTF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBTkNFTF9BTExfVkFMSURBVElPTl9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfQUxMX1ZBTElEQVRJT05fREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FJVF9WQUxJREFUSU9OX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBSVRfVkFMSURBVElPTl9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX0NIRUNLX1dTRExfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0RFU0NfQ0hFQ0tfV1NETF9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1FU1NBR0VfVkFMSURBVEVfTk9fV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNRVNTQUdFX1ZBTElEQVRFX1JFTU9URV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1FU1NBR0VfVkFMSURBVEVfQUxMX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9WQUxJREFURV9JTl9QUk9HUkVTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9NRVNTQUdFU19JTl9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5JTkdfTUVTU0FHRVNfSU5fVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQVJOSU5HX0lGX0NPTlRJTlVFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZBTElEQVRJT05fQ09NUExFVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFX1NVTU1BUlk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQlVUVE9OX1NUT1BfV1NETF9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU1RPUF9WQUxJREFUSU9OX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1NUQVJUX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfU1RBUlRfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUQVJUX1NFUlZFUl9URVhUMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUQVJUX1NFUlZFUl9URVhUNDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVEFSVF9TRVJWRVJfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU1RBUlRfU0VSVkVSX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBURVhUX1NFUlZFUl9TVEFUVVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9TRVJWRVJfTVNHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfU0VSVkVSX1NUQVJURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9TRVJWRVJfU1RBUlRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9TRVJWRVJfU1RPUFBFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19BTlRfUlVOVElNRV9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX0FOVF9TRVJWRVJfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19BTlRfQ0xJRU5UX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX1NFUlZFUl9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX0FOVF9TRVJWRVI7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dFQl9TRVJWSUNFX0NMSUVOVFNfTk9UX0ZPVU5EOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XRUJfU0VSVklDRVNfTk9UX0ZPVU5EOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0REX05PVF9GT1VORDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX0NBTk5PVF9BU1NPQ0lBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfQ0FOTk9UX0FTU09DSUFURTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUFJPSkVDVF9NVVNUX0VYSVNUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlZBTElEX01VTFRJUExFX1NFUlZJQ0VfU0VMRUNUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19XU0RMX09QRVJBVElPTl9USU1FRF9PVVQ7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZFUl9OT1RfRk9VTkRfV0FSTklORzsKLQotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2FudC9BbnRDbGllbnRSb290Q29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2FudC9BbnRDbGllbnRSb290Q29tbWFuZEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTBkMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9hbnQvQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUzMCAgIDE0NDM1OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MzAgICAxNDQzNTAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqIDIwMDcwNTAxICAgMTc4MTI5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3b3Jrc3BhY2UgcmVwb3J0cyAiY3Jhc2ggZGV0ZWN0ZWQiIGFmdGVyIHJ1bm5pbmcgV1MgYW50IHRhc2sgKGNtZGxpbmUpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudERlZmF1bHRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50UmVzdG9yaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnRXb3Jrc3BhY2VTYXZlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5DaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5MaXN0T3B0aW9uc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YS5FY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5GaW5pc2hGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlNjZW5hcmlvQ2xlYW51cENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5DbGllbnRSb290RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnREZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLldTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLldTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkZpbmlzaERlZmF1bHRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkFzc2VtYmxlQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGVwbG95Q2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGV2ZWxvcENsaWVudEZyYWdtZW50OwotCi0vKioKLSAqIAotICogQ29tbWFuZCBmcmFnbWVudCBmb3IgZ2VuZXJhdGluZyBhIHdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFzay4KLSAqIFJ1biBoZWFkbGVzcyBFY2xpcHNlIG9yIHdpdGhpbiB3b3Jrc3BhY2UgdXNpbmcgUnVuIGFzIEFudCBCdWlsZC4gIFRoaXMgZnJhZ21lbnQgZWxpbWluYXRlcyBhbnkgVUkgc3BlY2lmaWMgCi0gKiBjb21tYW5kcyBhbmQgZGF0YSBtYXBwaW5ncyBiZXR3ZWVuIGNvbW1hbmRzIGFuZCB3aWRnZXRzLiAgV2lkZ2V0IHRvIGNvbW1hbmQgbWFwcGluZ3MgYXJlCi0gKiByZXBsYWNlZCBieSBBbnQgcHJvcGVydHkgZmlsZSB0byBjb21tYW5kIG1hcHBpbmdzIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGEgYW50RGF0YU1hcHBpbmcgZXh0ZW5zaW9uIAotICogcG9pbnQgaW4gdGhlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnR7Ci0JCi0gIHB1YmxpYyBBbnRDbGllbnRSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgewkgCi0JICAgIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudChuZXcgTGlzdE9wdGlvbnNDb21tYW5kKCksICIiKSk7Ci0gIGFkZCAobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBBbnREZWZhdWx0aW5nT3BlcmF0aW9uKCksICIiKSk7Ci0gIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKHRydWUpLCAiIiApICk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgCi0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQoKSwgIiIpKTsKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgCi0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIHRydWUgKSwgIiIpKTsKLSAgYWRkKCBuZXcgQ2xpZW50Um9vdEZyYWdtZW50KCkgKTsKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkgKTsKLSAKLSAgYWRkKG5ldyBGaW5pc2hGcmFnbWVudCgpKTsKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBBbnRSZXN0b3JpbmdDb21tYW5kKCksICIiICkpOwotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQoKSwgIiIpKTsKLSAKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5wcm92aXNpb25hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgeyAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVudGltZTJDbGllbnRUeXBlcyIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJDb21wb25lbnROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW50aW1lMkNsaWVudFR5cGVzIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0vLyAgICBNYXAgQW50RGVmYXVsdGluZ09wZXJhdGlvbiAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkNsaWVudElkc0ZpeGVkIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJTdGFydFNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkRlcGxveUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgICAKLSAgICAgIC8vIE1hcCBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbldTSUwiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2lsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZVVSSSIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgLy8gV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxDb21wb25lbnROYW1lIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICAKLSAgICAgIC8vIFNldHVwIHRoZSBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC4gIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SjJFRVZlcnNpb24iLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0VHlwZSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLQkgIAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBudWxsKTsgICAgICAKLQkgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlQ2xpZW50IiwgbnVsbCApOwotCQkJCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7ICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJDb21wb25lbnROYW1lIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kIGNvbW1hbmQuCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLQotICAgICAgLy8gTUFQIHBvc3Qgc2VydmVyIGNvbmZpZyBjYWxsICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdE5hbWUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVySW5zdGFuY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRXhpc3RpbmdTZXJ2ZXJJZCIsIG51bGwpOyAgICAgCi0gICAgICAgICAgICAKLSAgICAgIC8vTWFwcGluZ3MgdG8gZW5hYmxlIHBlZWstYWhlYWQgZm9yIFBhZ2UgMyBvZiB0aGUgY2xpZW50IHdpemFyZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJDb21wb25lbnROYW1lIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzLCAiUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOyAgCi0gICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiUmVuZGVyZXJWYWxpZGF0aW9uIiwgQW50UmVzdG9yaW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgICAgIAotICAgfSAgICAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50RGVmYXVsdGluZ09wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudERlZmF1bHRpbmdPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZiZjU3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50RGVmYXVsdGluZ09wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjEwMTEgICAxNTkyODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHByb2plY3Qgbm90IGFzc29jaWF0ZWQgdG8gRUFSIHdoZW4gdXNpbmcgYW50IG9uIGNvbW1hbmQtbGluZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uaW50ZXJuYWwuZW1mLnJlc291cmNlLlJlbmRlcmVyRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEFudERlZmF1bHRpbmdPcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbnsKLQotCXByaXZhdGUgYm9vbGVhbiByZW5kZXJlclZhbGlkYXRpb247Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotCQlyZW5kZXJlclZhbGlkYXRpb24gPSBSZW5kZXJlckZhY3RvcnkuZ2V0RGVmYXVsdFJlbmRlcmVyRmFjdG9yeSgpLmlzVmFsaWRhdGluZygpOwkJCi0JCVJlbmRlcmVyRmFjdG9yeS5nZXREZWZhdWx0UmVuZGVyZXJGYWN0b3J5KCkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgdW5kbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQotCQlSZW5kZXJlckZhY3RvcnkuZ2V0RGVmYXVsdFJlbmRlcmVyRmFjdG9yeSgpLnNldFZhbGlkYXRpbmcocmVuZGVyZXJWYWxpZGF0aW9uKTsKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRTZXJ2aWNlSWRzRml4ZWQoKQotCXsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50SWRzRml4ZWQoKQotCXsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldFN0YXJ0U2VydmljZSgpCi0JewotCQlyZXR1cm4gZmFsc2U7CQotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGdldERlcGxveVNlcnZpY2UoKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lDbGllbnQoKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZW5kZXJlclZhbGlkYXRpb24oKQotICAgIHsKLSAgICAJcmV0dXJuIHJlbmRlcmVyVmFsaWRhdGlvbjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50UmVzdG9yaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFJlc3RvcmluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3MzkwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50UmVzdG9yaW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmludGVybmFsLmVtZi5yZXNvdXJjZS5SZW5kZXJlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBbnRSZXN0b3JpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb257Ci0KLQlwcml2YXRlIGJvb2xlYW4gcmVuZGVyZXJWYWxpZGF0aW9uOwotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCi0JCVJlbmRlcmVyRmFjdG9yeS5nZXREZWZhdWx0UmVuZGVyZXJGYWN0b3J5KCkuc2V0VmFsaWRhdGluZyhyZW5kZXJlclZhbGlkYXRpb24pOwotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLSAgICBwdWJsaWMgdm9pZCBzZXRSZW5kZXJlclZhbGlkYXRpb24oYm9vbGVhbiByZW5kZXJlclZhbGlkYXRpb24pCi0gICAgewotICAgIAl0aGlzLnJlbmRlcmVyVmFsaWRhdGlvbiA9IHJlbmRlcmVyVmFsaWRhdGlvbjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BbnRXb3Jrc3BhY2VTYXZlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTAwMDk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BbnRXb3Jrc3BhY2VTYXZlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAxICAgMTc4MTI5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3b3Jrc3BhY2UgcmVwb3J0cyAiY3Jhc2ggZGV0ZWN0ZWQiIGFmdGVyIHJ1bm5pbmcgV1MgYW50IHRhc2sgKGNtZGxpbmUpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQkvLyBhdHRlbXB0IHRvIHNhdmUgdGhlIHN0YXRlIG9mIHRoZSB3b3Jrc3BhY2UKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG1vbml0b3IpOwotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IEV4ZWN1dGlvbkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1Njc0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5WYWxpZGF0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotLyoqCi0gKiBUaGlzIGNvbW1hbmQgY2hlY2tzIHRvIHNlZSBpZiB0aGUgc2VsZWN0ZWQgY2xpZW50IHByb2plY3QgaXMgdGhlCi0gKiBzZXJ2aWNlIHByb2plY3QuIElmIHNvLCB0aGUgdXNlciBpcyB3YXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBDaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIC8vU2VsZWN0aW9uTGlzdENob2ljZXMgcnVudGltZTJDbGllbnRUeXBlczsKLSAgU3RyaW5nIGNsaWVudFByb2plY3ROYW1lOwotICBTdHJpbmcgd3NkbFVSSTsKLSAgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gICAgCi0gIHB1YmxpYyBDaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZCgpCi0gIHsKLSAgfQotICAKLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGNsaWVudFByb2plY3ROYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotICAKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS5Db21tYW5kI2V4ZWN1dGUob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkVudmlyb25tZW50KQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZiAoY2xpZW50UHJvamVjdE5hbWU9PW51bGwgfHwgd3NkbFVSST09bnVsbCB8fCB3c2RsVVJJLmxlbmd0aCgpPT0wIHx8IHdlYlNlcnZpY2VzUGFyc2VyPT1udWxsKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICBpZiAoY2xpZW50UHJvamVjdE5hbWU9PW51bGwgfHwgY2xpZW50UHJvamVjdE5hbWUubGVuZ3RoKCk9PTApCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWUpOwotICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICBib29sZWFuIGlzU2VydmljZVByb2plY3QgPSB2dS5pc1Byb2plY3RTZXJ2aWNlUHJvamVjdChjbGllbnRQcm9qZWN0LCB3c2RsVVJJLCB3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0gICAgaWYgKGlzU2VydmljZVByb2plY3QpCi0gICAgewotICAgICAgSVN0YXR1cyB3U3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX0lTX1NFUlZJQ0VfUFJPSkVDVCwgbmV3IFN0cmluZ1tde2NsaWVudFByb2plY3ROYW1lfSkgKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHdTdGF0dXMpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBzZSkKLSAgICAgIHsKLSAgICAgICAgLy9Vc2VyIGRlY2lkZWQgdG8gYWJvcnQuIFJldHVybiBhbiBlcnJvciBzdGF0dXMKLSAgICAgICAgSVN0YXR1cyBlU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfVVNFUl9BQk9SVEVEICk7Ci0gICAgICAgIHJldHVybiBlU3RhdHVzOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzgyNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0dlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgICAxMzQ5MTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKiAyMDA2MDUxNyAgIDE0MjAyNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRW52aXJvbm1lbnRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVBhdGggb3V0cHV0TG9jYXRpb25fOwotICBwcml2YXRlIGJvb2xlYW4gZ2VuU2tlbGV0b25fOwotICBwcml2YXRlIFN0cmluZyBoYW5kbGVyTmFtZUZvckVkaXRfID0gbnVsbDsKLSAgCi0gIHByaXZhdGUgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl87Ci0gIHByaXZhdGUgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW11oYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfOwotICAKLSAgcHVibGljIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZCgpCi0gIHsKLSAgfQotICAKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAKLSAgICBJU3RhdHVzICAgICByZXR1cm5TdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0gIAlpZiAoIWdlblNrZWxldG9uXykJcmV0dXJuIHJldHVyblN0YXR1czsgCi0gIAkKLSAgICAgIC8vIGZvcm0gdGhlIG1hcCBvZiBjbGFzc25hbWUgdG8gbG9jYXRpb25zCi0gICAgICBpZiAoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyE9bnVsbCl7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8ubGVuZ3RoO2krKyl7Ci0gICAgICAgICAgSGFzaHRhYmxlIGhhbmRsZXJUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICBJUGF0aCBvdXRQYXRoID0gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tpXS5nZXRTb3VyY2VPdXRwdXRQYXRoKCk7Ci0gICAgICAgICAgTGlzdCBoYW5kbGVycyA9IGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICBmb3IgKGludCBqPTA7ajxoYW5kbGVycy5zaXplKCk7aisrKXsKLSAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0paGFuZGxlcnMuZ2V0KGopOwotICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lIT1udWxsICYmIG91dFBhdGghPW51bGwpCi0gICAgICAgICAgICAgIGhhbmRsZXJUYWJsZS5wdXQoY2xhc3NOYW1lLCBvdXRQYXRoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuU3RhdHVzID0gZ2VuSGFuZGxlcnNDbGFzc2VzKGhhbmRsZXJUYWJsZSwgbW9uaXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8aGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfLmxlbmd0aDtpKyspewotICAgICAgICAgIEhhc2h0YWJsZSBoYW5kbGVyVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgSVBhdGggb3V0UGF0aCA9IGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5nZXRTb3VyY2VPdXRwdXRQYXRoKCk7Ci0gICAgICAgICAgTGlzdCBoYW5kbGVycyA9IGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICAgIGZvciAoaW50IGo9MDtqPGhhbmRsZXJzLnNpemUoKTtqKyspewotICAgICAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSloYW5kbGVycy5nZXQoaik7Ci0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKTsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUhPW51bGwgJiYgb3V0UGF0aCE9bnVsbCkKLSAgICAgICAgICAgICAgaGFuZGxlclRhYmxlLnB1dChjbGFzc05hbWUsIG91dFBhdGgpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm5TdGF0dXMgPSBnZW5IYW5kbGVyc0NsYXNzZXMoaGFuZGxlclRhYmxlLCBtb25pdG9yKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIAotIAotICAgIHJldHVybiByZXR1cm5TdGF0dXM7Ci0KLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGdlbkhhbmRsZXJzQ2xhc3NlcyhIYXNodGFibGUgaGFuZGxlcnNGb3JHZW4sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcil7Ci0gICAgSUVudmlyb25tZW50IGVudiAgICAgICAgICA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgTXVsdGlTdGF0dXMgc3RhdHVzICAgICAgID0gbnVsbDsKLSAgICBJU3RhdHVzICAgICByZXR1cm5TdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGJvb2xlYW4gZXJyb3IgPSBmYWxzZTsKLSAgICAKLSAgICBJU3RhdHVzIHdyaXRlU3RhdHVzOyAgICAKLSAgICBFbnVtZXJhdGlvbiBrZXlzID0gaGFuZGxlcnNGb3JHZW4ua2V5cygpOwotICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgd3JpdGVTdGF0dXMgPSB3cml0ZUZpbGUoZW52LCBjbGFzc05hbWUsIChJUGF0aCloYW5kbGVyc0Zvckdlbi5nZXQoY2xhc3NOYW1lKSwgbW9uaXRvciApOwotICAgICAgICAvLyBoYW5kbGUgc3RhdHVzIHJldHVybgotICAgICAgICBpZiAod3JpdGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsgIC8vIHdyaXRlIHN0YXR1cyBpcyBPSyBvciBFUlJPUgotICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfR0VORVJBVEVfSEFORExFUl9TS0VMRVRPTiwgbmV3IElTdGF0dXNbMF0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXR1cy5hZGQod3JpdGVTdGF0dXMpOwotICAgICAgICB9IAotICAgIH0KLSAgICAKLSAgICBpZiAoZXJyb3IpIAotICAgIHsKLSAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgcmV0dXJuU3RhdHVzID0gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmV0dXJuU3RhdHVzOwotICAgIAotICB9Ci0gIAotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIHdyaXRlRmlsZSAoSUVudmlyb25tZW50IGVudiwgU3RyaW5nIGNsYXNzTmFtZSwgSVBhdGggb3V0cHV0TG9jYXRpb24sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIAotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlpbnQgaW5kZXg7Ci0gIAkKLSAgCVN0cmluZyBzaW1wbGVDbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gIAlTdHJpbmcgcGFja2FnZU5hbWUgPSBudWxsOwotICAJSVBhdGggZmlsZVBhdGggPSBvdXRwdXRMb2NhdGlvbjsKLSAgCWlmIChjbGFzc05hbWUgIT0gbnVsbCkgewotICAJCWluZGV4ID0gY2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gIAkJaWYgKGluZGV4ICE9IC0xKSB7Ci0gIAkJCXNpbXBsZUNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgCQkJcGFja2FnZU5hbWUgPSBjbGFzc05hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgCQkJCi0gIAkJICAJU3RyaW5nIHBhY2thZ2VTZWdtZW50ID0gcGFja2FnZU5hbWU7Ci0gIAkJICAJaW50IGogPSAwOwotICAJCSAgCWogPSBwYWNrYWdlU2VnbWVudC5pbmRleE9mKCcuJyk7Ci0gIAkJICAJd2hpbGUgKGogIT0gLTEpIHsKLSAgCQkgIAkJZmlsZVBhdGggPSBmaWxlUGF0aC5hcHBlbmQocGFja2FnZVNlZ21lbnQuc3Vic3RyaW5nKDAsIGopKTsKLSAgCQkgIAkJcGFja2FnZVNlZ21lbnQgPSBwYWNrYWdlU2VnbWVudC5zdWJzdHJpbmcoaiArIDEpOwotICAJCSAgCQlqID0gcGFja2FnZVNlZ21lbnQuaW5kZXhPZignLicpOwotICAJCSAgCX0KLSAgCQkgICAgZmlsZVBhdGggPSBmaWxlUGF0aC5hcHBlbmQocGFja2FnZVNlZ21lbnQpOwotICAJCX0KLSAgCQllbHNlIHsKLSAgCQkgIHBhY2thZ2VOYW1lID0gIiI7Ci0gIAkJfQotICAJfQotICAJCi0gIAlmaWxlUGF0aCA9IGZpbGVQYXRoLmFwcGVuZChzaW1wbGVDbGFzc05hbWUpOwotICAJCi0gIAlmaWxlUGF0aCA9IGZpbGVQYXRoLmFkZEZpbGVFeHRlbnNpb24oImphdmEiKTsKLQotICAJLy8gY2hlY2sgaWYgSGFuZGxlciBhbHJlYWR5IGV4aXN0czsgZG8gbm90IG92ZXJ3cml0ZSBleGlzdGluZyBIYW5kbGVycwotICAJSVJlc291cmNlIHdvcmtzcGFjZVJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGZpbGVQYXRoKTsKLSAgCWlmICh3b3Jrc3BhY2VSZXMhPW51bGwgJiYgd29ya3NwYWNlUmVzLmV4aXN0cygpKSB7Ci0gIAkJcmV0dXJuIHN0YXR1czsKLSAgCX0KLSAgCQotICAJaWYgKGhhbmRsZXJOYW1lRm9yRWRpdF8gPT0gbnVsbCl7Ci0gIAkJaGFuZGxlck5hbWVGb3JFZGl0XyA9IGNsYXNzTmFtZTsKLSAgICAgICAgb3V0cHV0TG9jYXRpb25fID0gb3V0cHV0TG9jYXRpb247Ci0gIAl9Ci0gIAkKLSAgCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBGaWxlUmVzb3VyY2VVdGlscy5uZXdGaWxlT3V0cHV0U3RyZWFtKCBFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBmaWxlUGF0aCwgbW9uaXRvciwgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0gIAkvLyBjcmVhdGUgYnVmZmVyZWQgd3JpdGVyIGZvciB3cml0aW5nIGZpbGUKLSAgCUJ1ZmZlcmVkV3JpdGVyIGJ3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtKSk7Ci0gIAl0cnkgewotICAJCWlmIChwYWNrYWdlTmFtZS5sZW5ndGgoKSAhPSAwKSB7Ci0gIAkJCWJ3LndyaXRlKCJwYWNrYWdlICIgK3BhY2thZ2VOYW1lKyI7Iik7Ci0gIAkJCWJ3Lm5ld0xpbmUoKTsKLSAgCQkJYncubmV3TGluZSgpOwotICAJCX0KLSAgCQlidy53cml0ZSgiaW1wb3J0IGphdmF4LnhtbC5ycGMuaGFuZGxlci5HZW5lcmljSGFuZGxlcjsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoImltcG9ydCBqYXZheC54bWwucnBjLmhhbmRsZXIuTWVzc2FnZUNvbnRleHQ7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCJpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCQotICAJCWJ3LndyaXRlKCJwdWJsaWMgY2xhc3MgIitzaW1wbGVDbGFzc05hbWUrIiBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCJ7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQkKLSAgCQlidy53cml0ZSgiICAgcHVibGljIFFOYW1lW10gZ2V0SGVhZGVycyAoKSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgeyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgLy8gRmlsbCBpbiBtZXRob2QgYm9keSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgcmV0dXJuIG51bGw7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB9Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVxdWVzdCggTWVzc2FnZUNvbnRleHQgY29udGV4dCApIik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICAgICAvLyBGaWxsIGluIG1ldGhvZCBib2R5IG9yIGRlbGV0ZSBtZXRob2QgdG8gdXNlIEdlbmVyaWNIYW5kbGVyIik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICAgICByZXR1cm4gdHJ1ZTsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIH0iKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZSggTWVzc2FnZUNvbnRleHQgY29udGV4dCApIik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICAgICAvLyBGaWxsIGluIG1ldGhvZCBib2R5IG9yIGRlbGV0ZSBtZXRob2QgdG8gdXNlIEdlbmVyaWNIYW5kbGVyICIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgcmV0dXJuIHRydWU7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB9Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQgKSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgeyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgLy8gRmlsbCBpbiBtZXRob2QgYm9keSBvciBkZWxldGUgbWV0aG9kIHRvIHVzZSBHZW5lcmljSGFuZGxlciIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgcmV0dXJuIHRydWU7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB9Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCQotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgifSIpOwotICAJCWJ3LmNsb3NlKCk7Ci0gIAkJc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJCi0gIAl9IAotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSAKLSAgICB7Ci0gIAkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfRklMRSwgbmV3IFN0cmluZ1tdeyBjbGFzc05hbWUgfSksIGUgKTsKLSAgCQlpZiAoYncgIT0gbnVsbCkgewotICAJCQl0cnkgewotICAJCQkJYncuY2xvc2UoKTsKLSAgCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKLSAgCQkJfQotICAJCX0KLSAgCX0KLSAgCXJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlblNrZWxldG9uRW5hYmxlZChib29sZWFuIGdlblNrZWxldG9uKQotICB7Ci0gIAl0aGlzLmdlblNrZWxldG9uXyA9IGdlblNrZWxldG9uOwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpewotICAJSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0gIAlpZiAob3V0cHV0TG9jYXRpb25fIT1udWxsKXsKLSAgCQlwcm9qZWN0ID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2Yob3V0cHV0TG9jYXRpb25fKTsKLSAgCX0KLSAgCXJldHVybiBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRDbGFzc05hbWVzKCl7Ci0gIAlMaXN0IGNsYXNzZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlpZiAoaGFuZGxlck5hbWVGb3JFZGl0XyE9bnVsbCl7Ci0gIAkJY2xhc3Nlcy5hZGQoaGFuZGxlck5hbWVGb3JFZGl0Xyk7Ci0gIAl9Ci0gIAlyZXR1cm4gY2xhc3NlczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFuIGFycmF5IG9mIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoYW5kbGVySG9sZGVycyl7Ci0gICAgdGhpcy5oYW5kbGVyU2VydmljZVJlZkhvbGRlcl8gPSBoYW5kbGVySG9sZGVyczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFuIGFycmF5IG9mIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyhIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBoYW5kbGVySG9sZGVycyl7Ci0gICAgdGhpcy5oYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvTGlzdE9wdGlvbnNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvTGlzdE9wdGlvbnNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWE3YzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0xpc3RPcHRpb25zQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotLyoqCi0gKiBDb21tYW5kIGxpc3RzIHZhbGlkIHByb3BlcnR5IHZhbHVlcyB3aGVyZSByZXF1ZXN0ZWQuCi0gKiBSZXF1ZXN0cyBtYWRlIHZpYSBhIEFudCBwcm9wZXJ0eSB2YWx1ZSBzZXR0aW5nIHdoaWNoIGlzIG1hcHBlZCB0byB0aGlzIGNvbW1hbmQgaW4gdGhlIHBsdWdpbi54bWwgCi0gKi8KLQotcHVibGljIGNsYXNzIExpc3RPcHRpb25zQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgYm9vbGVhbiBydW50aW1lc18gPSBmYWxzZTsKLQlwcml2YXRlIGJvb2xlYW4gc2VydmVyc18gPSBmYWxzZTsKLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKQotCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQkJICAJCi0JCWlmIChydW50aW1lc18pCi0JCXsJCQkJCi0JCQkJU3RyaW5nW10gdHlwZUlkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VUeXBlTGFiZWxzKCkuZ2V0SWRzXygpOwotCQkJICAgIFZlY3RvciBydW50aW1lSWRzID0gbmV3IFZlY3RvcigpOwotCQkJCQlmb3IgKGludCBrID0gMDsgayA8IHR5cGVJZHMubGVuZ3RoOyBrKyspIHsKLQkJCQkJCQotCQkJCQkJU3RyaW5nIHR5cGVJZCA9IHR5cGVJZHNba107CQkJCQkJCi0JCQkJICAgIAlTdHJpbmdbXSBydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwkJCQkgICAgCQotCQkJCQkJCQkgICAgCi0JCQkJICAgIAlmb3IgKGludCBqID0gMDsgaiA8IHJ1bnRpbWVzLmxlbmd0aDsgaisrKSB7Ci0JCQkJICAgIAkJU3RyaW5nIHJ1bnRpbWUgPSBydW50aW1lc1tqXTsKLQkJCQkgICAgCQlpZiAoIXJ1bnRpbWVJZHMuY29udGFpbnMocnVudGltZSkpCi0JCQkJICAgIAkJewotCQkJCSAgICAJCQlydW50aW1lSWRzLmFkZChydW50aW1lKTsJCi0JCQkJICAgIAkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQotCQkJCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJCVdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklELAotCQkJCQkJCUlTdGF0dXMuT0ssCi0JCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX0FOVF9SVU5USU1FX0hFQURJTkcsIAotCQkJCQkJCW51bGwpOwkJCQkJCi0JCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8oc3RhdHVzT2JqKTsKLQkJCQkJCi0JICAgICAgICAKLQkJCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBydW50aW1lSWRzLml0ZXJhdG9yKCk7IGl0ZXJhdG9yCi0JCQkJCS5oYXNOZXh0KCk7KSB7CQkJCi0JCQkJICBnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRJbmZvKG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCAKLQkJCQkJCVdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklELAotCQkJCQkJSVN0YXR1cy5PSywgCi0JCQkJCQlOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lORk9fQU5UX1NFUlZFUl9SVU5USU1FLAotCQkJCQkJCQlpdGVyYXRvci5uZXh0KCkpLCBudWxsKSk7Ci0JCQl9Ci0JCQkJCi0JCQkKLQkJICAgIFN0cmluZ1tdIGNsaWVudFJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsUnVudGltZXNGb3JDbGllbnRTaWRlKCk7Ci0JCSAgICAKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2xpZW50UnVudGltZXMubGVuZ3RoOyBpKyspIHsJCQkJCi0JCQkJCi0JCQkJZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgCi0JCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJCUlTdGF0dXMuT0ssIAotCQkJCQkJTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX0FOVF9DTElFTlRfUlVOVElNRSwKLQkJCQkJCQkJY2xpZW50UnVudGltZXNbaV0pLCBudWxsKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChzZXJ2ZXJzXykKLQkJewkJCQotCQkJZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgCi0JCQkJCVdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklELAotCQkJCQlJU3RhdHVzLk9LLCAKLQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX0FOVF9TRVJWRVJfSEVBRElORywgbnVsbCkpOwotCQkJCi0JCQlJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQkgICAgICBmb3IgKGludCBpPTA7IGk8c2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0JCSAgICAgIHsJCSAgICAgICAgCi0JCQkJZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgCi0JCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJCUlTdGF0dXMuT0ssIAotCQkJCQkJTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX0FOVF9TRVJWRVIsCi0JCQkJCQkJCXNlcnZlclR5cGVzW2ldLmdldElkKCkpLCBudWxsKSk7Ci0KLQkJICAgICAgfQotCQl9ICAKLQkJICAKLQkJcmV0dXJuIE9LX1NUQVRVUzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TGlzdFJ1bnRpbWVzKGJvb2xlYW4gdmFsdWUpCi0JewkJCi0JCXJ1bnRpbWVzXz12YWx1ZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TGlzdFNlcnZlcnMoYm9vbGVhbiB2YWx1ZSkKLQl7CQkKLQkJc2VydmVyc189dmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL09wZW5KYXZhRWRpdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL09wZW5KYXZhRWRpdG9yQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2JlZGQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9PcGVuSmF2YUVkaXRvckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIE9wZW5KYXZhRWRpdG9yQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgTGlzdCBjbGFzc05hbWVzOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0VuYWJsZWRfID0gdHJ1ZTsgIC8vIGlzIHRydWUgYnkgZGVmYXVsdAotCi0gIHB1YmxpYyBPcGVuSmF2YUVkaXRvckNvbW1hbmQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIGlmIChpc0VuYWJsZWRfKSB7Ci0gICAgICBPcGVuSmF2YUVkaXRvckpvYiBqb2IgPSBuZXcgT3BlbkphdmFFZGl0b3JKb2IoY2xhc3NOYW1lcywgcHJvamVjdCk7Ci0gICAgICBqb2Iuc2V0UHJpb3JpdHkoSm9iLkxPTkcpOwotICAgICAgam9iLnNjaGVkdWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lcyhMaXN0IGNsYXNzTmFtZXMpCi0gIHsKLSAgICB0aGlzLmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SXNFbmFibGVkKGJvb2xlYW4gaXNFbmFibGVkKXsKLSAgICB0aGlzLmlzRW5hYmxlZF8gPSBpc0VuYWJsZWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgT3BlbkphdmFFZGl0b3JKb2IgZXh0ZW5kcyBVSUpvYgotICB7Ci0gICAgcHJpdmF0ZSBMaXN0IGNsYXNzTmFtZXM7Ci0gICAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCi0gICAgcHVibGljIE9wZW5KYXZhRWRpdG9ySm9iKExpc3QgY2xhc3NOYW1lcywgSVByb2plY3QgcHJvamVjdCkKLSAgICB7Ci0gICAgICBzdXBlcigib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuT3BlbkphdmFFZGl0b3JKb2IiKTsKLSAgICAgIHRoaXMuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7Ci0gICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLSAgICB7Ci0gICAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIGNsYXNzTmFtZXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY2xhc3NOYW1lcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IChTdHJpbmcpaXQubmV4dCgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElUeXBlIHR5cGUgPSBqYXZhUHJvamVjdC5maW5kVHlwZShjbGFzc05hbWUpOwotICAgICAgICAgICAgSmF2YVVJLm9wZW5JbkVkaXRvcih0eXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cyhvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzLkVSUk9SLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwgMCwgTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fT1BFTl9KQVZBX0VESVRPUiwgbmV3IFN0cmluZ1tde2NsYXNzTmFtZSwgcHJvamVjdC5nZXROYW1lKCl9KSwgdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZSBpZiAocHJvamVjdCE9bnVsbCB8fCBjbGFzc05hbWVzLmlzRW1wdHkoKSl7Ci0gICAgICAgIC8vIGRvIG5vdGhpbmcgOyBub3RoaW5nIHRvIG9wZW4KLSAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cyhvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzLkVSUk9SLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwgMCwgTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fT1BFTl9KQVZBX0VESVRPUiwgbmV3IFN0cmluZ1tde2NsYXNzTmFtZXMgIT0gbnVsbCA/IGNsYXNzTmFtZXMudG9TdHJpbmcoKSA6ICIiLCBwcm9qZWN0ICE9IG51bGwgPyBwcm9qZWN0LmdldE5hbWUoKSA6ICIifSksIG51bGwpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL1N0YXJ0U2VydmVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL1N0YXJ0U2VydmVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODNmMDExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9TdGFydFNlcnZlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MjYgICAxNjIyODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZlciBwdWJsaXNoIGNhbmNlbCBidXR0b24gdW5hdmFpbGFibGUKLSAqIDIwMDgwNTA5ICAgMTY1MzI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVc2UgQVBJIGZyb20gSVNlcnZlciB0byBjYWxsIHNob3VsZFB1Ymxpc2ggYW5kIHNob3VsZFJlc3RhcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotLyoqCi0gKiAoUmUpU3RhcnRzIGFuZCBwdWJsaXNoZXMgdGhlIHNlcnZlciBzcGVjaWZlZCBieSB0aGUgc2VydmVySW5zdGFuY2VJZCBhdHRyaWJ1dGUuCi0gKiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElMb2cgbG9nOwotICBwcml2YXRlIGJvb2xlYW4gZG9Bc3luY1B1Ymxpc2hfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLQkKLSAgCi0gIHB1YmxpYyBTdGFydFNlcnZlckNvbW1hbmQoKQotICB7Ci0gICAgbG9nICAgICAgICAgICAgID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICBkb0FzeW5jUHVibGlzaF8gPSB0cnVlOwotICB9Ci0JIAotICBwdWJsaWMgU3RhcnRTZXJ2ZXJDb21tYW5kKCBib29sZWFuIGRvQXN5bmNQdWJsaXNoICkKLSAgewotICAgIHRoaXMoKTsKLSAgICAKLSAgICBkb0FzeW5jUHVibGlzaF8gPSBkb0FzeW5jUHVibGlzaDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgSVNlcnZlciBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0gICAgaWYgKHNlcnZlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORCk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIGludCBzZXJ2ZXJTdGF0ZSA9IHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpOwotCi0gICAgLy8gIFB1Ymxpc2ggaWYgcmVxdWlyZWQKLSAgICBpZiAoc2VydmVyLnNob3VsZFB1Ymxpc2goKSkgewotICAgIAlpZiAoc2VydmVyLmNhblB1Ymxpc2goKS5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0spCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBwdWJsaXNoKHNlcnZlciwgSVNlcnZlci5QVUJMSVNIX0lOQ1JFTUVOVEFMLCBtb25pdG9yICk7Ci0gICAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAgc3RhcnQvcmVzdGFydCBzZXJ2ZXIgaWYgcmVxdWlyZWQKLSAgICAJCi0gICAgc3dpdGNoIChzZXJ2ZXJTdGF0ZSkKLSAgICB7Ci0gICAgICBjYXNlIElTZXJ2ZXIuU1RBVEVfU1RPUFBFRDoKLSAgICAgICAgaWYgKHNlcnZlci5jYW5TdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSkuZ2V0U2V2ZXJpdHkoKT09SVN0YXR1cy5PSykKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IHN0YXJ0KHNlcnZlciwgbW9uaXRvciApOwotICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICAgewotICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJU2VydmVyLlNUQVRFX1NUQVJURUQ6ICAgIAkKLSAgICAJYm9vbGVhbiBzaG91bGRSZXN0YXJ0ID0gc2VydmVyLnNob3VsZFJlc3RhcnQoKTsgICAgCQotICAgIAkKLSAgICAJaWYgKHNob3VsZFJlc3RhcnQgJiYgc2VydmVyLmNhblJlc3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUpLmdldFNldmVyaXR5KCk9PUlTdGF0dXMuT0spCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSByZXN0YXJ0KHNlcnZlciwgbW9uaXRvciApOwotICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICAgewotICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9ICAgICAgIAotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgcHVibGlzaChmaW5hbCBJU2VydmVyIHNlcnZlciwgZmluYWwgaW50IGtpbmQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgZmluYWwgSVN0YXR1c1tdIGlzdGF0dXMgPSBuZXcgSVN0YXR1c1sxXTsgCi0gICAgbW9uaXRvci5zdWJUYXNrKENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19QVUJMSVNISU5HX1NFUlZFUik7Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JewotICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHNoZWxsTW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0JCXsKLSAgCQkJaXN0YXR1c1swXSA9IHNlcnZlci5wdWJsaXNoKGtpbmQsIHNoZWxsTW9uaXRvcik7Ci0JCX0gIAkJCi0JfTsKLQkKLQl0cnkKLQl7Ci0JCWlmKCBkb0FzeW5jUHVibGlzaF8gKQotCQl7CQotCQkgIFByb2dyZXNzTW9uaXRvckRpYWxvZyBkaWFsb2cgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKG51bGwpOwotCQkgIGRpYWxvZy5ydW4odHJ1ZSwgdHJ1ZSwgcnVubmFibGUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkgIHJ1bm5hYmxlLnJ1biggbW9uaXRvciApOwotCQl9Ci0JCQotCX0KLQljYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLQl7Ci0JICBpc3RhdHVzWzBdID0gbmV3IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXMoIElTdGF0dXMuRVJST1IsICJpZCIsIDAsIGl0ZS5nZXRNZXNzYWdlKCksIGl0ZSApOwotCSAgaXRlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQljYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkKLQl7Ci0JICBpc3RhdHVzWzBdID0gbmV3IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXMoIElTdGF0dXMuRVJST1IsICJpZCIsIDAsIGllLmdldE1lc3NhZ2UoKSwgaWUgKTsKLQkgIGllLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLSAgICAKLSAgICAKLQlpZiAoaXN0YXR1c1swXS5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuT0spCi0gICAgewotICAgICAgc3RhdHVzID0gaXN0YXR1c1swXTsKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkNBTkNFTCkKLSAgICAJICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygiIik7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICBsb2cubG9nKElMb2cuSU5GTywgNTA1MSwgdGhpcywgInB1Ymxpc2hQcm9qZWN0IiwgIklTZXJ2ZXI9IiArIHNlcnZlciArICIsIFB1Ymxpc2ggY29tbWFuZCBjb21wbGV0ZWQiKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIHJlc3RhcnQoSVNlcnZlciBzZXJ2ZXIsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbW9uaXRvci5zdWJUYXNrKENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19TVEFSVElOR19TRVJWRVIpOwotICAgICAgc2VydmVyLnN5bmNocm9ub3VzUmVzdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSwgbW9uaXRvcik7Ci0gICAgICBsb2cubG9nKElMb2cuSU5GTywgNTA1MiwgdGhpcywgImV4ZWN1dGUiLCAiSVNlcnZlcj0iICsgc2VydmVyICsgIiwgUmVzdGFydCBjb21tYW5kIGNvbXBsZXRlZCIpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBlKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgc3RhcnQoSVNlcnZlciBzZXJ2ZXIsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbW9uaXRvci5zdWJUYXNrKENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19TVEFSVElOR19TRVJWRVIpOwotICAgICAgc2VydmVyLnN5bmNocm9ub3VzU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG1vbml0b3IpOwotICAgICAgbG9nLmxvZyhJTG9nLklORk8sIDUwNTMsIHRoaXMsICJleGVjdXRlIiwgIklTZXJ2ZXI9IiArIHNlcnZlciArICIsIFN0YXJ0IGNvbW1hbmQgY29tcGxldGVkIik7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLSAgfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9XU0lOb25Db21wbGlhbnRSdW50aW1lQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL1dTSU5vbkNvbXBsaWFudFJ1bnRpbWVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwN2NkYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL1dTSU5vbkNvbXBsaWFudFJ1bnRpbWVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjAgICAxMjA3MTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUFQQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlVXRpbHM7Ci0KLQotCi1wdWJsaWMgY2xhc3MgV1NJTm9uQ29tcGxpYW50UnVudGltZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCQotICBwdWJsaWMgV1NJTm9uQ29tcGxpYW50UnVudGltZUNvbW1hbmQoKQotICB7Ci0gIH0gCi0gIAotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgCVBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCB3c2lTU0JQQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsgCi0gIAlQZXJzaXN0ZW50V1NJQVBDb250ZXh0IHdzaUFQQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJQVBDb250ZXh0KCk7IAotICAgIFZlY3RvciBzdGF0dXNTU0JQID0gbmV3IFZlY3RvcigpOwotICAgIHN0YXR1c1NTQlAuYWRkKCBuZXcgU3RhdHVzKCBXU0lDb21wbGlhbmNlVXRpbHMuZ2V0V1NJU2V2ZXJpdHkoc2VydmljZVByb2plY3RfLCB3c2lTU0JQQ29udGV4dCksICJpZCIsIDAsCi0gICAgICAgIFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX1NTQlBfSU5DT01QTElBTlRfUlVOVElNRSwgbnVsbCApICk7Ci0gICAgU3RhdHVzW10gc3RhdHVzZXNTU0JQID0gKFN0YXR1c1tdKSBzdGF0dXNTU0JQLnRvQXJyYXkobmV3IFN0YXR1c1tzdGF0dXNTU0JQLnNpemUoKV0pOwotICAgIAotICAgIFZlY3RvciBzdGF0dXNBUCA9IG5ldyBWZWN0b3IoKTsKLSAgICBzdGF0dXNBUC5hZGQoIG5ldyBTdGF0dXMoIFdTSUNvbXBsaWFuY2VVdGlscy5nZXRXU0lTZXZlcml0eShzZXJ2aWNlUHJvamVjdF8sIHdzaUFQQ29udGV4dCksICJpZCIsIDAsIAotICAgIAkJV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfQVBfSU5DT01QTElBTlRfUlVOVElNRSwgbnVsbCApKTsKLSAgICBTdGF0dXNbXSBzdGF0dXNlc0FQID0gKFN0YXR1c1tdKSBzdGF0dXNBUC50b0FycmF5KG5ldyBTdGF0dXNbc3RhdHVzQVAuc2l6ZSgpXSk7Ci0KLSAgICBpZiAoV1NJQ29tcGxpYW5jZVV0aWxzLmNoZWNrV1NJQ29tcGxpYW5jZSAoZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLCBzdGF0dXNlc0FQLCBzZXJ2aWNlUHJvamVjdF8sIHdzaUFQQ29udGV4dCkpIAotICAgIHsKLSAgICAJaWYgKFdTSUNvbXBsaWFuY2VVdGlscy5jaGVja1dTSUNvbXBsaWFuY2UgKGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKSwgc3RhdHVzZXNTU0JQLCBzZXJ2aWNlUHJvamVjdF8sIHdzaVNTQlBDb250ZXh0KSkgCi0gICAgICB7Ci0gICAgCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAJfSAKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgCSAgLy8gU2V0IG1lc3NhZ2UgdG8gZW1wdHkgc3RyaW5nIHNvIHRoYXQgYW4gZXJyb3IgZGlhbG9nIGRvZXMKLSAgICAJICAvLyBub3QgcG9wLXVwIHRlbGxpbmcgdGhlIHVzZXIgdGhhdCB0aGV5IGNhbm5vdCBjb250aW51ZQotICAgIAkgIC8vIGJlY2F1c2UgdGhleSBjaG9vc2Ugbm90IHRvIGlnbm9yZSB0aGUgV1MtSSBub24tY29tcGxpYW5jZSB3YXJuaW5nLgotICAgIAkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCAiIiApOwotICAgIAl9Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAJLy8gU2V0IG1lc3NhZ2UgdG8gZW1wdHkgc3RyaW5nIHNvIHRoYXQgYW4gZXJyb3IgZGlhbG9nIGRvZXMKLSAgCSAgCS8vIG5vdCBwb3AtdXAgdGVsbGluZyB0aGUgdXNlciB0aGF0IHRoZXkgY2Fubm90IGNvbnRpbnVlCi0gIAkgIAkvLyBiZWNhdXNlIHRoZXkgY2hvb3NlIG5vdCB0byBpZ25vcmUgdGhlIFdTLUkgbm9uLWNvbXBsaWFuY2Ugd2FybmluZy4KLQkJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoICIiICk7Ci0JfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCXRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL0VjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzVlMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLQotcHVibGljIGNsYXNzIEVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIFN0cmluZyBzID0gdmFsdWUudG9TdHJpbmcoKTsKLSAgICBpZiAocy5pbmRleE9mKCI6IikgPCAwKQotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICBpZiAocmVzLmV4aXN0cygpKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHMgPSByZXMuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjVmNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTI0MzAyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFByb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvamVjdCA9IChTdHJpbmcpIHZhbHVlOwotICAgICAgaW50IHNsYXNoSW5kZXggPSBwcm9qZWN0LmluZGV4T2YoJy8nKTsKLSAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3Q7Ci0KLSAgICAgIGlmIChzbGFzaEluZGV4ICE9IC0xKQotICAgICAgewotICAgICAgICBwcm9qZWN0TmFtZSA9IHByb2plY3Quc3Vic3RyaW5nKDAsIHNsYXNoSW5kZXgpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICB9IGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1NlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVySW5zdFRvSVNlcnZlclRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmODgxY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVySW5zdFRvSVNlcnZlclRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIEFwciAyMCwgMjAwNAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi0vKgotICogVHJhbnNmb3JtcyBhIHNlcnZlciBpbnN0YW5jZSBpZCB0byBhbiBJU2VydmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJJbnN0VG9JU2VydmVyVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIjdHJhbnNmb3JtKGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsKLSAgICAKLSAgICBTdHJpbmcgZXhpc3RpbmdTZXJ2ZXJJbnN0SWQgPSAoU3RyaW5nKXZhbHVlOwotICAgIElTZXJ2ZXIgc2VydmVySW5zdCA9IG51bGw7Ci0gICAgaWYgKGV4aXN0aW5nU2VydmVySW5zdElkICE9IG51bGwpIHsKLSAgICAJc2VydmVySW5zdCA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihleGlzdGluZ1NlcnZlckluc3RJZCk7Ci0gICAgfQotICAgIHJldHVybiBzZXJ2ZXJJbnN0OwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1NlcnZlck5hbWUySVNlcnZlclRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9TZXJ2ZXJOYW1lMklTZXJ2ZXJUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTVkNzk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1NlcnZlck5hbWUySVNlcnZlclRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJOYW1lMklTZXJ2ZXJUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIHsKLSAgICAgIFN0cmluZyBzZXJ2ZXJOYW1lID0gdmFsdWUudG9TdHJpbmcoKTsKLSAgICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gICAgICBpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoIT0wKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBJU2VydmVyIHNlcnZlciA9IChJU2VydmVyKXNlcnZlcnNbaV07Ci0gICAgICAgICAgaWYgKChzZXJ2ZXIuZ2V0TmFtZSgpKS5lcXVhbHMoc2VydmVyTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2VydmVyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9EZWZhdWx0aW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjg2NjdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA3MDcyMyAgIDE5NDQzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50IG5vdCBkZWxldGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBEZWZhdWx0aW5nVXRpbHMgewotCQotCXB1YmxpYyBEZWZhdWx0aW5nVXRpbHMoKQotCXsKLQkJCQotCX0KLQkKLQkvKioKLQkgKiAKLQkgKiBVc2VzIHRoZSBmb2xsb3dpbmcgc3RlcHMgdG8gZGV0ZXJtaW5lIGEgdmFsaWQgZGVmYXVsdCBFQVIgcHJvamVjdCBuYW1lOgotCSAqICAKLQkgKiAxLiBJZiBwcm9qZWN0IGRvZXMgZXhpc3Q6Ci0JICogCQlhIC0gbG9vayBmb3IgYW4gZXhpc3RpbmcsIHJlZmVyZW5jaW5nIEVBUiBjb21wb25lbnQsIGlmIG9uZSBleGlzdHMgcmV0dXJuIHRoYXQgRUFSIG5hbWUKLQkgKiAJCWIgLSBsb29rIGZvciBhbiBleGlzdGluZyBFQVIgY29tcG9uZW50IHdpdGggdGhlIHNhbWUgSjJFRSB2ZXJzaW9uIGFzIHRoZSBwcm9qZWN0Ci0JICogMi4gSWYgY2FuJ3QgZmluZCBhbiBhcHByb3ByaWF0ZSBleGlzdGluZyBFQVIgY29tcG9uZW50IG9yIHByb2plY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIAotCSAqICAgICB3b3Jrc3BhY2UsIHJldHVybiBhIG5ldyBFQVIgbmFtZSBvZiBmb3JtIHByb2plY3ROYW1lRUFSCi0JICogMy4gSWYgcHJvamVjdCBuYW1lIGlzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nIHJldHVybiB0aGUgZGVmYXVsdCBFQVIgbmFtZQotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0TmFtZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgZm9yIHRoZSBzZXJ2aWNlCi0JICogQHJldHVybiBhIHN0cmluZyB0byBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IEVBUiBwcm9qZWN0IG5hbWUgZm9yIHRoZSBwcm9qZWN0IG5hbWUgcHJvdmlkZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0RUFSUHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3ROYW1lKQotCXsKLQotCQlpZiAocHJvamVjdE5hbWUgIT0gbnVsbCAmJiBwcm9qZWN0TmFtZS5sZW5ndGgoKSA+IDApIHsKLQkJCQotCQkJSVByb2plY3QgcHJvaiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0KLQkJCWlmIChwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCi0JCQkJLy9TdGVwIDFhIC0gcmV0dXJuIGEgcmVmZXJlbmNpbmcgRUFSIHByb2plY3QKLQkJCQlJVmlydHVhbENvbXBvbmVudFtdIGVhcnMgPSBKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFQVJDb21wb25lbnRzKHByb2opOwotCQkJCWlmIChlYXJzICE9IG51bGwgJiYgZWFycy5sZW5ndGggPiAwKSB7Ci0JCQkJCXJldHVybiBlYXJzWzBdLmdldE5hbWUoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy9TdGVwIDFiIC0gcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGV4aXN0aW5nIEVBUiBwcm9qZWN0Ci0JCQkgICAgSVZpcnR1YWxDb21wb25lbnRbXSBhbGxFYXJDb21wcyA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7CQkJICAgICAgCi0KLQkJCSAgICBpZiAoYWxsRWFyQ29tcHMubGVuZ3RoID4gMCkKLQkJCSAgICB7CQkJICAgICAgCi0JCQkgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGFsbEVhckNvbXBzLmxlbmd0aDsgaSsrKQotCQkJICAgICAgICB7Ci0JCQkgICAgICAgICAgSVByb2plY3QgZWFyUHJvamVjdCA9IGFsbEVhckNvbXBzW2ldLmdldFByb2plY3QoKTsKLQkJCSAgICAgICAgICBib29sZWFuIGNhbkFzc29jaWF0ZSA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVJXaXRob3V0V2FybmluZyhwcm9qLCBlYXJQcm9qZWN0KTsKLQkJCSAgICAgICAgICBpZiAoY2FuQXNzb2NpYXRlKQotCQkJICAgICAgICAgIHsKLQkJCSAgICAgICAgICAgIHJldHVybiBhbGxFYXJDb21wc1tpXS5nZXROYW1lKCk7IAotCQkJICAgICAgICAgIH0KLQkJCSAgICAgICAgfQkJCSAgICAgIAkJCSAgICAgIAotCQkJICAgIH0KLQkJCX0KLQkJCQotCQkJCi0JCQlTdHJpbmcgYmFzZUVBUk5hbWUgPSBwcm9qZWN0TmFtZSArIFJlc291cmNlVXRpbHMuZ2V0RGVmYXVsdEVBUkV4dGVuc2lvbigpOwotCQkJU3RyaW5nIGVhck5hbWUgPSBiYXNlRUFSTmFtZTsKLQotCQkJYm9vbGVhbiBmb3VuZEVBUiA9IGZhbHNlOwotCQkJaW50IGkgPSAxOwotCQkJCi0JCQl3aGlsZSAoIWZvdW5kRUFSKSB7Ci0JCQkJLy8gMTk0NDM0IC0gQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50cyB0aGF0J3Mgbm90IGRlbGV0ZWQgcHJldmlvdXNseQotCQkJCUlTdGF0dXMgY2FuQ3JlYXRlRUFSU3RhdHVzID0gSjJFRVV0aWxzLmNhbkNyZWF0ZUVBUihQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyTmFtZSkpOwotCQkJCWlmIChjYW5DcmVhdGVFQVJTdGF0dXMuaXNPSygpKSB7Ci0JCQkJCWZvdW5kRUFSID0gdHJ1ZTsKLQkJCQl9IGVsc2UgewotCQkJCQllYXJOYW1lID0gYmFzZUVBUk5hbWUgKyBpOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQkKLQkJCS8vU3RlcCAyIC0gcmV0dXJuIHByb2plY3QgbmFtZSB3aXRoIEVBUiBvbiB0aGUgZW5kCi0JCQlyZXR1cm4gZWFyTmFtZTsJCQkKLQkJfQotCQkKLQkJLy9TdGVwIDMgLSByZXR1cm4gdGhlIGRlZmF1bHQgRUFSIHByb2plY3QgbmFtZQotCQlyZXR1cm4gUmVzb3VyY2VVdGlscy5nZXREZWZhdWx0U2VydmljZUVBUlByb2plY3ROYW1lKCk7CQkKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GYWNldE9wZXJhdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GYWNldE9wZXJhdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmJjOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA5MDMwMyAgIDI0MjYzNSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFJlbW92ZSB1bm5lY2Vzc2FyeSBVSSBkZXBlbmRlbmNpZXMgZnJvbSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24KLSAqIDIwMDkwODE5ICAgMjg2ODc0IHppbmFAY2EuaWJtLmNvbSAtIFppbmEgTW9zdGFmaWEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5JRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElGYWNldE9wZXJhdGlvbkRlbGVnYXRlIHsKLQotCXB1YmxpYyBJU3RhdHVzIGFkZEZhY2V0c1RvUHJvamVjdChmaW5hbCBJRmFjZXRlZFByb2plY3QgZnByb2plY3QsIGZpbmFsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucykgewotCQlmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0JCXN0YXR1c1swXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCWZpbmFsIFNldCBhY3Rpb25zID0gRmFjZXRVdGlscy5nZXRJbnN0YWxsQWN0aW9ucyhwcm9qZWN0RmFjZXRWZXJzaW9ucyk7Ci0KLQkJLy8gQ3JlYXRlIGEgcnVubmFibGUgdGhhdCBhcHBsaWVzIHRoZSBpbnN0YWxsIGFjdGlvbnMgdG8gdGhlIGZhY2V0ZWQgcHJvamVjdAotCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3Igc2hlbGxNb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQkJCXRyeSB7Ci0JCQkJCWZwcm9qZWN0Lm1vZGlmeShhY3Rpb25zLCBzaGVsbE1vbml0b3IpOwotCQkJCQlmaXhFSkJDbGFzc1BhdGgoZnByb2plY3QpOwotCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQlzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvckFkZGluZ0ZhY2V0cyhmcHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBwcm9qZWN0RmFjZXRWZXJzaW9ucywgZSk7Ci0JCQkJfQotCQkJfQotCQl9OwotCi0JCS8vIFJ1biB0aGUgcnVubmFibGUgaW4gYW5vdGhlciB0aHJlYWQgdW5sZXNzIHRoZXJlIGlzIG5vIFVJIHRocmVhZCAoQW50IHNjZW5hcmlvcykKLQkJaWYgKGRpc3BsYXlQcmVzZW50KCkpIHsKLQkJCXRyeSB7Ci0JCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSwgZmFsc2UsIHJ1bm5hYmxlKTsKLQkJCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JCQkJc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoZnByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIGl0ZSk7Ci0JCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewotCQkJCXN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKGZwcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIHByb2plY3RGYWNldFZlcnNpb25zLCBpZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl0cnkgewotCQkJCWZwcm9qZWN0Lm1vZGlmeShhY3Rpb25zLCBudWxsKTsKLQkJCQlmaXhFSkJDbGFzc1BhdGgoZnByb2plY3QpOwotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoZnByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIGUpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1c1swXTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZml4RUpCQ2xhc3NQYXRoKElGYWNldGVkUHJvamVjdCBwcm9qZWN0KSB7Ci0JCWlmICghSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50KHByb2plY3QuZ2V0UHJvamVjdCgpKSkgcmV0dXJuOwotCQlJUHJvamVjdCBlamJQcm9qZWN0ID0gcHJvamVjdC5nZXRQcm9qZWN0KCk7Ci0JCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShlamJQcm9qZWN0KTsKLQkJUGF0aCBwcm9qZWN0Um9vdCA9IG5ldyBQYXRoKFBhdGguUk9PVC5hcHBlbmQobmV3IFBhdGgoZWpiUHJvamVjdC5nZXROYW1lKCkpKS50b1N0cmluZygpKTsKLQkJSVBhdGggZWpiTW9kdWxlUGF0aCA9IHByb2plY3RSb290LmFwcGVuZCgiZWpiTW9kdWxlIik7Ci0JCXRyeSB7Ci0JCQlJQ2xhc3NwYXRoRW50cnlbXSBvcmlnaW5hbFNldCA9IGphdmFQcm9qZWN0LmdldFJhd0NsYXNzcGF0aCgpOwotCQkJYm9vbGVhbiBmb3VuZEVKQk1vZHVsRW50cnkgPSBmYWxzZTsKLQkJCWZvciAoSUNsYXNzcGF0aEVudHJ5IGVudHJ5IDogb3JpZ2luYWxTZXQpIHsKLQkJCQlpZiAoZW50cnkuZ2V0UGF0aCgpLmVxdWFscyhlamJNb2R1bGVQYXRoKSkKLQkJCQkJZm91bmRFSkJNb2R1bEVudHJ5ID0gdHJ1ZTsKLQkJCX0KLQkJCWlmICghZm91bmRFSkJNb2R1bEVudHJ5KSB7Ci0JCQkJSUNsYXNzcGF0aEVudHJ5W10gbmV3U2V0ID0gbmV3IElDbGFzc3BhdGhFbnRyeVtvcmlnaW5hbFNldC5sZW5ndGggKyAxXTsKLQkJCQlpbnQgaT0wOwotCi0JCQkJZm9yIChJQ2xhc3NwYXRoRW50cnkgZW50cnkgOiBvcmlnaW5hbFNldCkgewotCQkJCQluZXdTZXRbaSsrXSA9IGVudHJ5OwotCQkJCX0KLQkJCQluZXdTZXRbaV0gPSBKYXZhQ29yZS5uZXdTb3VyY2VFbnRyeShlamJNb2R1bGVQYXRoKTsKLQkJCQlqYXZhUHJvamVjdC5zZXRSYXdDbGFzc3BhdGgobmV3U2V0LG51bGwpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gVE9ETzogaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGNyZWF0ZU5ld0ZhY2V0ZWRQcm9qZWN0KGZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSkgewotCQlmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0JCXN0YXR1c1swXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCS8vIENyZWF0ZSBhIHJ1bm5hYmxlIHRoYXQgY3JlYXRlcyBhIG5ldyBmYWNldGVkIHByb2plY3QuCi0JCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHNoZWxsTW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCUlGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0TmFtZSwgbnVsbCwgc2hlbGxNb25pdG9yKTsKLQkJCQkJCWlmIChmUHJvamVjdCA9PSBudWxsKSB7Ci0JCQkJCQkJc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotCQkJCQkJfQotCQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCXN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pLCBlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX07Ci0KLQkJCS8vIFJ1biB0aGUgcnVubmFibGUgaW4gYW5vdGhlciB0aHJlYWQgdW5sZXNzIHRoZXJlIGlzIG5vIFVJIHRocmVhZCAoQW50IHNjZW5hcmlvcykKLQkJCXRyeSB7Ci0JCQkJaWYgKGRpc3BsYXlQcmVzZW50KCkpIHsKLQkJCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSwgZmFsc2UsIHJ1bm5hYmxlKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0cnkgewotCQkJCQkJSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCQkJCWlmIChmUHJvamVjdCA9PSBudWxsKSB7Ci0JCQkJCQkJc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotCQkJCQkJfQotCQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCXN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pLCBlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JCQkJc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGl0ZSk7Ci0JCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewotCQkJCXN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pLCBpZSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RhdHVzWzBdOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIHNldEZhY2V0UnVudGltZU9uUHJvamVjdChmaW5hbCBJRmFjZXRlZFByb2plY3QgZlByb2plY3QsIGZpbmFsIElSdW50aW1lIGZSdW50aW1lKSB7Ci0JCWZpbmFsIElTdGF0dXNbXSBzdGF0dXMgPSBuZXcgSVN0YXR1c1sxXTsKLQkJc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotCQkvLyBDcmVhdGUgYSBydW5uYWJsZSB0aGF0IHNldHMgdGhlIGZhY2V0IHJ1bnRpbWUgb24gdGhlIGZhY2V0ZWQgcHJvamVjdAotCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3Igc2hlbGxNb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQkJCXRyeSB7Ci0JCQkJCWZQcm9qZWN0LnNldFRhcmdldGVkUnVudGltZXMoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGZSdW50aW1lKSwgc2hlbGxNb25pdG9yKTsKLQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VUVElOR19SVU5USU1FLCBuZXcgU3RyaW5nW10geyBmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmUnVudGltZS5nZXROYW1lKCkgfSksIGUpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBSdW4gdGhlIHJ1bm5hYmxlIGluIGFub3RoZXIgdGhyZWFkIHVubGVzcyB0aGVyZSBpcyBubyBVSSB0aHJlYWQgKEFudCBzY2VuYXJpb3MpCi0JCWlmIChkaXNwbGF5UHJlc2VudCgpKSB7Ci0JCQl0cnkgewotCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsIGZhbHNlLCBydW5uYWJsZSk7Ci0JCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCQkJCXN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsgZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZlJ1bnRpbWUuZ2V0TmFtZSgpIH0pLCBpdGUpOwotCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKLQkJCQlzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUUsIG5ldyBTdHJpbmdbXSB7IGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZSdW50aW1lLmdldE5hbWUoKSB9KSwgaWUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJdHJ5IHsKLQkJCQlmUHJvamVjdC5zZXRUYXJnZXRlZFJ1bnRpbWVzKENvbGxlY3Rpb25zLnNpbmdsZXRvbihmUnVudGltZSksIG51bGwpOwotCi0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQlzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUUsIG5ldyBTdHJpbmdbXSB7IGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZSdW50aW1lLmdldE5hbWUoKSB9KSwgZSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RhdHVzWzBdOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIHNldEZpeGVkRmFjZXRzT25Qcm9qZWN0KGZpbmFsIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCwgZmluYWwgU2V0IGZpeGVkRmFjZXRzKSB7Ci0JCWZpbmFsIElTdGF0dXNbXSBzdGF0dXMgPSBuZXcgSVN0YXR1c1sxXTsKLQkJc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotCQkvLyBDcmVhdGUgYSBydW5uYWJsZSB0aGF0IHNldHMgdGhlIGZpeGVkIGZhY2V0cyBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0JCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBzaGVsbE1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCQkJdHJ5IHsKLQkJCQkJZlByb2plY3Quc2V0Rml4ZWRQcm9qZWN0RmFjZXRzKGZpeGVkRmFjZXRzKTsKLQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZml4ZWRGYWNldHMsIGUpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBSdW4gdGhlIHJ1bm5hYmxlIGluIGFub3RoZXIgdGhyZWFkIHVubGVzcyB0aGVyZSBpcyBubyBVSSB0aHJlYWQgKEFudCBzY2VuYXJpb3MpCi0JCWlmIChkaXNwbGF5UHJlc2VudCgpKSB7Ci0JCQl0cnkgewotCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsIGZhbHNlLCBydW5uYWJsZSk7Ci0JCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCQkJCXN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yU2V0dGluZ0ZpeGVkRmFjZXRzKGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZpeGVkRmFjZXRzLCBpdGUpOwotCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKLQkJCQlzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvclNldHRpbmdGaXhlZEZhY2V0cyhmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmaXhlZEZhY2V0cywgaWUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJdHJ5IHsKLQkJCQlmUHJvamVjdC5zZXRGaXhlZFByb2plY3RGYWNldHMoZml4ZWRGYWNldHMpOwotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZml4ZWRGYWNldHMsIGUpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1c1swXTsKLQl9Ci0KLQkvLyBDaGVjayB0byBzZWUgaWYgU1dUIGlzIGFjdGl2ZSBhbmQgdGhlIERpc3BsYXkgaXMgcHJlc2VudCBvciBub3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc3BsYXlQcmVzZW50KCkgewotCQlCdW5kbGUgYiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uuc3d0Iik7Ci0JCWlmIChiID09IG51bGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlpZiAoKGIuZ2V0U3RhdGUoKSAhPSBCdW5kbGUuUkVTT0xWRUQgJiYgYi5nZXRTdGF0ZSgpICE9IEJ1bmRsZS5BQ1RJVkUpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJdHJ5IHsKLQkJCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSA9PSBudWxsKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZTEpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgCi0JCQkvLyBpZiB0aGUgRGlzcGxheSBjbGFzcyBjYW5ub3QgYmUgbG9hZGVkIGZvciB3aGF0ZXZlciByZWFzb24KLQkJCXJldHVybiBmYWxzZTsKLQotCQl9Ci0JfQotCi0JLy8gdGhlIGZvbGxvd2luZyBwcml2YXRlIG1ldGhvZHMgaGFkIHRvIGJlIGNvcGllZCBmcm9tIEZhY2V0VXRpbHMKLQkvKioKLQkgKiBSZXR1cm5zIGEgdHJhbnNsYXRhYmxlIGRlbGltaXRlZCBsaXN0IG9mIGZhY2V0IGxhYmVscyBkZXJpdmVkIGZyb20gdGhlCi0JICogcHJvdmlkZWQgc2V0IG9mIGZhY2V0cwotCSAqIAotCSAqIEBwYXJhbSBmYWNldHMKLQkgKiAgICAgICAgICAgIGEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldH0KLQkgKiBAcmV0dXJuIFN0cmluZyBhIGRlbGltaXRlZCBsaXN0IG9mIGZhY2V0IGxhYmVscwotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKFNldCBmYWNldHMpIHsKLQkJU3RyaW5nIGZhY2V0TGlzdE1lc3NhZ2UgPSAiIjsKLQkJaW50IHNpemUgPSBmYWNldHMuc2l6ZSgpOwotCQlpZiAoc2l6ZSA+IDApIHsKLQkJCUl0ZXJhdG9yIGl0ciA9IGZhY2V0cy5pdGVyYXRvcigpOwotCQkJSVByb2plY3RGYWNldCBmaXJzdFByb2plY3RGYWNldCA9IChJUHJvamVjdEZhY2V0KSBpdHIubmV4dCgpOwotCQkJZmFjZXRMaXN0TWVzc2FnZSA9IGZpcnN0UHJvamVjdEZhY2V0LmdldExhYmVsKCk7Ci0KLQkJCS8vIENvbnRpbnVlIGFwcGVuZGluZyB0byBmYWNldExpc3RNZXNzYWdlIHVudGlsIGFsbCB0aGUgZmFjZXQgbGFiZWxzCi0JCQkvLyBhcmUgaW4gdGhlIGxpc3QuCi0JCQl3aGlsZSAoaXRyLmhhc05leHQoKSkgewotCQkJCUlQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gKElQcm9qZWN0RmFjZXQpIGl0ci5uZXh0KCk7Ci0JCQkJU3RyaW5nIHBmTGFiZWwgPSBwcm9qZWN0RmFjZXQuZ2V0TGFiZWwoKTsKLQkJCQlmYWNldExpc3RNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRkFDRVRTLCBuZXcgU3RyaW5nW10geyBmYWNldExpc3RNZXNzYWdlLCBwZkxhYmVsIH0pOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhY2V0TGlzdE1lc3NhZ2U7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBlcnJvciBzdGF0dXMgaW5kaWNhdGluZyB0aGF0IHRoZSBmYWNldHMgY291bGQgbm90IGJlIHNldCBhcwotCSAqIGZpeGVkIGZhY2V0cyBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogICAgICAgICAgICBhIHByb2plY3QgbmFtZSB0byBpbnNlcnQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIElTdGF0dXMKLQkgKiBAcGFyYW0gZmFjZXRzCi0JICogICAgICAgICAgICBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXR9LiBUaGUKLQkgKiAgICAgICAgICAgIGZhY2V0cyBpbiB0aGlzIHNldCB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUKLQkgKiAgICAgICAgICAgIElTdGF0dXMuCi0JICogQHBhcmFtIHQKLQkgKiAgICAgICAgICAgIGEgVGhyb3dhYmxlIHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIElTdGF0dXMKLQkgKiBAcmV0dXJuIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVN0YXR1cyBnZXRFcnJvclN0YXR1c0ZvclNldHRpbmdGaXhlZEZhY2V0cyhTdHJpbmcgcHJvamVjdE5hbWUsIFNldCBmYWNldHMsIFRocm93YWJsZSB0KSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJaW50IHNpemUgPSBmYWNldHMuc2l6ZSgpOwotCQlpZiAoc2l6ZSA+IDApIHsKLQkJCVN0cmluZyBmYWNldExpc3QgPSBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKGZhY2V0cyk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSVhFRF9GQUNFVFMsIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBmYWNldExpc3QgfSksIHQpOwotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGVycm9yIHN0YXR1cyBpbmRpY2F0aW5nIHRoYXQgdGhlIGZhY2V0IHZlcnNpb25zIGNvdWxkIG5vdCBiZQotCSAqIGFkZGVkIHRvIHRoZSBmYWNldGVkIHByb2plY3QKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUKLQkgKiAgICAgICAgICAgIGEgcHJvamVjdCBuYW1lIHRvIGluc2VydCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgSVN0YXR1cwotCSAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucwotCSAqICAgICAgICAgICAgYSBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLQkgKiAgICAgICAgICAgIC4gVGhlIGZhY2V0cyBpbiB0aGlzIHNldCB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZQotCSAqICAgICAgICAgICAgaW4gdGhlIElTdGF0dXMuCi0JICogQHBhcmFtIHQKLQkgKiAgICAgICAgICAgIGEgVGhyb3dhYmxlIHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIElTdGF0dXMKLQkgKiBAcmV0dXJuIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVN0YXR1cyBnZXRFcnJvclN0YXR1c0ZvckFkZGluZ0ZhY2V0cyhTdHJpbmcgcHJvamVjdE5hbWUsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucywgVGhyb3dhYmxlIHQpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlpbnQgc2l6ZSA9IHByb2plY3RGYWNldFZlcnNpb25zLnNpemUoKTsKLQkJaWYgKHNpemUgPiAwKSB7Ci0JCQlTZXQgZmFjZXRzID0gbmV3IEhhc2hTZXQoKTsKLQkJCS8vIEl0ZXJhdGUgb3ZlciBwcm9qZWN0RmFjZXRWZXJzaW9ucyB0byBmb3JtIGEgc2V0IG9mIElQcm9qZWN0RmFjZXRzCi0JCQlJdGVyYXRvciBpdHIgPSBwcm9qZWN0RmFjZXRWZXJzaW9ucy5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ci5oYXNOZXh0KCkpIHsKLQkJCQlJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXQgPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ci5uZXh0KCk7Ci0JCQkJSVByb2plY3RGYWNldCBmYWNldCA9IHByb2plY3RGYWNldC5nZXRQcm9qZWN0RmFjZXQoKTsKLQkJCQlmYWNldHMuYWRkKGZhY2V0KTsKLQkJCX0KLQkJCVN0cmluZyBmYWNldExpc3QgPSBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKGZhY2V0cyk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1QsIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBmYWNldExpc3QgfSksIHQpOwotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0ZpbmlzaEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GaW5pc2hGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDhlNzA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0ZpbmlzaEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA0LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBGaW5pc2hGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLSAgcHVibGljIEZpbmlzaEZyYWdtZW50KCkKLSAgewkKLQlhZGQobmV3IEZpbmlzaFRlc3RGcmFnbWVudCgpICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjNiYmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAyMDA2MDQwNCAxMzQ5MTMgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotCi0KLQotcHVibGljIGNsYXNzIEhhbmRsZXJEZXNjcmlwdGlvbkhlbHBlciB7Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2QgZm9yIGdldHRpbmcgdGhlIEhhbmRsZXJEZXNjcmlwdG9ySG9sZGVyIGdpdmVuIHRoZSBuYW1lCi0gICAqIEBwYXJhbSBoZGhzCi0gICAqIEBwYXJhbSBkZXNjTmFtZQotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlciBnZXRGb3JEZXNjcmlwdGlvbk5hbWUoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGRocywgU3RyaW5nIGRlc2NOYW1lKXsKLSAgICBmb3IgKGludCBpPTA7aTxoZGhzLmxlbmd0aDtpKyspewotICAgICAgU3RyaW5nIG5hbWUgPSBoZGhzW2ldLmdldERlc2NyaXB0aW9uTmFtZSgpOwotICAgICAgaWYgKG5hbWUhPW51bGwgJiYgbmFtZS5lcXVhbHMoZGVzY05hbWUpKXsKLSAgICAgICAgcmV0dXJuIGhkaHNbaV07Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAgbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2QgZm9yIGdldHRpbmcgYWxsIGRlc2NyaXB0aW9uIG5hbWVzCi0gICAqIEBwYXJhbSBoZGhzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsRGVzY3JpcHRpb25OYW1lcyhIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBoZGhzKXsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbaGRocy5sZW5ndGhdOwotICAgIGZvcihpbnQgaT0wO2k8aGRocy5sZW5ndGg7aSsrKXsKLSAgICAgIG5hbWVzW2ldPWhkaHNbaV0uZ2V0RGVzY3JpcHRpb25OYW1lKCk7Ci0gICAgfQotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsSGFuZGxlckNsYXNzTmFtZXMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGRocyl7Ci0gICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8aGRocy5sZW5ndGg7aSsrKXsKLSAgICAgIExpc3QgbGlzdCA9IGhkaHNbaV0uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgIGlmIChsaXN0IT1udWxsICYmICFsaXN0LmlzRW1wdHkoKSl7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPGxpc3Quc2l6ZSgpO2orKyl7Ci0gICAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSlsaXN0LmdldChqKTsKLSAgICAgICAgICB2LmFkZChodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZ1tdKXYudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjYmFkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE4IDE0MjU1NCBzZW5ncGxAY2EuaWJtLmNvbSAgLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuUG9ydENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Xc2RkRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5Xc2RkRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci0KLQotcHVibGljIGNsYXNzIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlciB7Ci0gIAotICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbk5hbWU7Ci0gIHByaXZhdGUgTGlzdCBoYW5kbGVyTGlzdDsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gZGVzY3JpcHRpb25PYmplY3Q7Ci0gIHByaXZhdGUgSVBhdGggc291cmNlT3V0cHV0UGF0aDsKLSAgCi0gICAgCi0gIHB1YmxpYyBJUGF0aCBnZXRTb3VyY2VPdXRwdXRQYXRoKCkgewotICAgIHJldHVybiBzb3VyY2VPdXRwdXRQYXRoOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTb3VyY2VPdXRwdXRQYXRoKElQYXRoIHNvdXJjZU91dHB1dFBhdGgpIHsKLSAgICB0aGlzLnNvdXJjZU91dHB1dFBhdGggPSBzb3VyY2VPdXRwdXRQYXRoOwotICB9Ci0KLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKXsKLSAgICBpZiAoZGVzY3JpcHRpb25PYmplY3QhPW51bGwpCi0gICAgICByZXR1cm4gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGRlc2NyaXB0aW9uT2JqZWN0KTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoKLSAgICogZ2V0IHRoZSBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gb2JqZWN0IAotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbk9iamVjdCgpIHsKLSAgICByZXR1cm4gZGVzY3JpcHRpb25PYmplY3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBzZXQgV2ViU2VydmljZURlc2NyaXB0aW9uIG9iamVjdAotICAgKiBAcGFyYW0gZGVzY3JpcHRpb25PYmplY3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uT2JqZWN0KFdlYlNlcnZpY2VEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbk9iamVjdCkgewotICAgIHRoaXMuZGVzY3JpcHRpb25PYmplY3QgPSBkZXNjcmlwdGlvbk9iamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBnZXQgRGVzY3JpcHRpb24gbmFtZQotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uTmFtZSgpIHsKLSAgICByZXR1cm4gZGVzY3JpcHRpb25OYW1lOwotICB9Ci0gIAotICAvKioKLSAgICogc2V0IERlc2NyaXB0aW9uIG5hbWUKLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uTmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25OYW1lKFN0cmluZyBkZXNjcmlwdGlvbk5hbWUpIHsKLSAgICB0aGlzLmRlc2NyaXB0aW9uTmFtZSA9IGRlc2NyaXB0aW9uTmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGdldCBMaXN0IG9mIEhhbmRsZXJUYWJsZUl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbgotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRIYW5kbGVyTGlzdCgpIHsKLSAgICByZXR1cm4gaGFuZGxlckxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogc2V0IExpc3Qgb2YgSGFuZGxlclRhYmxlSXRlbSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlIGRlc2NyaXB0aW9uCi0gICAqIEBwYXJhbSBoYW5kbGVyTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGFuZGxlckxpc3QoTGlzdCBoYW5kbGVyTGlzdCkgewotICAgIHRoaXMuaGFuZGxlckxpc3QgPSBoYW5kbGVyTGlzdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkSGFuZGxlclRvQWxsUG9ydHMoKXsKLSAgICAKLSAgICBpZiAoaGFuZGxlckxpc3QhPW51bGwgJiYgIWhhbmRsZXJMaXN0LmlzRW1wdHkoKSl7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IHo9MDt6PGhhbmRsZXJMaXN0LnNpemUoKTt6KyspewotICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWhhbmRsZXJMaXN0LmdldCh6KTsgIAotICAgICAgICBpZiAoZGVzY3JpcHRpb25PYmplY3QhPW51bGwpIHsKLSAgICAgICAgICBMaXN0IHBvcnRDb21wb25lbnRzID0gZGVzY3JpcHRpb25PYmplY3QuZ2V0UG9ydENvbXBvbmVudHMoKTsKLSAgICAgICAgICBmb3IgKGludCB4PTA7eDxwb3J0Q29tcG9uZW50cy5zaXplKCk7eCsrKXsKLSAgICAgICAgICAgIFBvcnRDb21wb25lbnQgd3NQb3J0ID0gKFBvcnRDb21wb25lbnQpIHBvcnRDb21wb25lbnRzLmdldCh4KTsKLSAgICAgICAgICAgIExpc3Qgd3NIYW5kbGVycyA9IHdzUG9ydC5nZXRIYW5kbGVycygpOwotICAgICAgICAgICAgaWYgKHdzSGFuZGxlcnMhPW51bGwpewotICAgICAgICAgICAgICBib29sZWFuIGFscmVhZHlFeGlzdHMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgZm9yIChpbnQgeT0wO3k8d3NIYW5kbGVycy5zaXplKCk7eSsrKXsKLSAgICAgICAgICAgICAgICBIYW5kbGVyIGhhbmRsZXIgPSAoSGFuZGxlcil3c0hhbmRsZXJzLmdldCh5KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5nZXRIYW5kbGVyQ2xhc3MoKS5lcXVhbHMoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSkpewotICAgICAgICAgICAgICAgICAgYWxyZWFkeUV4aXN0cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgICAgIGlmICghYWxyZWFkeUV4aXN0cykgewotICAgICAgICAgICAgICAgIC8vY3JlYXRlIGl0IGFuZCBhZGQgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICBXc2RkRmFjdG9yeSB3c2RkRmFjdG9yeSA9IG5ldyBXc2RkRmFjdG9yeUltcGwoKTsKLSAgICAgICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c2RkRmFjdG9yeS5jcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyTmFtZShodGkuZ2V0SGFuZGxlck5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyQ2xhc3MoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSk7Ci0gICAgICAgICAgICAgICAgd3NIYW5kbGVycy5hZGQobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYWZmM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIDIwMDYwNDA0IDEzNDkxMyAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1IAotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotCi0KLXB1YmxpYyBjbGFzcyBIYW5kbGVyU2VydmljZVJlZkhlbHBlciB7Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2QgZm9yIGdldHRpbmcgdGhlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIGdpdmVuIHRoZSBuYW1lCi0gICAqIEBwYXJhbSBoc3JoCi0gICAqIEBwYXJhbSBkZXNjTmFtZQotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIGdldEZvclNlcnZpY2VSZWZOYW1lKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaHNyaCwgU3RyaW5nIGRlc2NOYW1lKXsKLSAgICBmb3IgKGludCBpPTA7aTxoc3JoLmxlbmd0aDtpKyspewotICAgICAgU3RyaW5nIG5hbWUgPSBoc3JoW2ldLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICBpZiAobmFtZSE9bnVsbCAmJiBuYW1lLmVxdWFscyhkZXNjTmFtZSkpewotICAgICAgICByZXR1cm4gaHNyaFtpXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0cyBhbGwgdGhlIGhhbmRsZXIgQ2xhc3MgbmFtZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggc2VydmljZSByZWYKLSAgICogQHBhcmFtIGhzcmgKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxIYW5kbGVyQ2xhc3NOYW1lcyhIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGhzcmgpewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPGhzcmgubGVuZ3RoO2krKyl7Ci0gICAgICBMaXN0IGxpc3QgPSBoc3JoW2ldLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICBpZiAobGlzdCE9bnVsbCAmJiAhbGlzdC5pc0VtcHR5KCkpewotICAgICAgICBmb3IgKGludCBqPTA7ajxsaXN0LnNpemUoKTtqKyspewotICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pbGlzdC5nZXQoaik7Ci0gICAgICAgICAgdi5hZGQoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmdbXSl2LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYWxsIHRoZSBzZXJ2aWNlIFJlZiBuYW1lcwotICAgKiBAcGFyYW0gaHNyaAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbFNlcnZpY2VSZWZOYW1lcyhIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGhzcmgpewotICAgIFN0cmluZ1tdIG5hbWVzID0gbmV3IFN0cmluZ1toc3JoLmxlbmd0aF07Ci0gICAgZm9yKGludCBpPTA7aTxoc3JoLmxlbmd0aDtpKyspewotICAgICAgbmFtZXNbaV09aHNyaFtpXS5nZXRTZXJ2aWNlUmVmTmFtZSgpOwotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyU2VydmljZVJlZkhvbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFiMDA0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyU2VydmljZVJlZkhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAgIDEzNDkxM3NlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MTcgICAxNDIzMzkgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LldlYnNlcnZpY2VfY2xpZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LmludGVybmFsLmltcGwuV2Vic2VydmljZV9jbGllbnRGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkphdmFNT0ZVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLQotCi1wdWJsaWMgY2xhc3MgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIgewotCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VSZWZOYW1lOwotICBwcml2YXRlIExpc3QgaGFuZGxlckxpc3Q7Ci0gIHByaXZhdGUgU2VydmljZVJlZiBzZXJ2aWNlUmVmOwotICBwcml2YXRlIElQYXRoIHNvdXJjZU91dHB1dFBhdGg7Ci0gIAotICBwdWJsaWMgSVBhdGggZ2V0U291cmNlT3V0cHV0UGF0aCgpIHsKLSAgICByZXR1cm4gc291cmNlT3V0cHV0UGF0aDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U291cmNlT3V0cHV0UGF0aChJUGF0aCBzb3VyY2VPdXRwdXRQYXRoKSB7Ci0gICAgdGhpcy5zb3VyY2VPdXRwdXRQYXRoID0gc291cmNlT3V0cHV0UGF0aDsKLSAgfSAgCi0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLSAgICBpZiAoc2VydmljZVJlZiE9bnVsbCkKLSAgICAgIHJldHVybiBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVJlZik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRIYW5kbGVyTGlzdCgpIHsKLSAgICByZXR1cm4gaGFuZGxlckxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJMaXN0KExpc3QgaGFuZGxlckxpc3QpIHsKLSAgICB0aGlzLmhhbmRsZXJMaXN0ID0gaGFuZGxlckxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUmVmIGdldFNlcnZpY2VSZWYoKSB7Ci0gICAgcmV0dXJuIHNlcnZpY2VSZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSZWYoU2VydmljZVJlZiBzZXJ2aWNlUmVmKSB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmID0gc2VydmljZVJlZjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUmVmTmFtZSgpIHsKLSAgICByZXR1cm4gc2VydmljZVJlZk5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSZWZOYW1lKFN0cmluZyBzZXJ2aWNlUmVmTmFtZSkgewotICAgIHRoaXMuc2VydmljZVJlZk5hbWUgPSBzZXJ2aWNlUmVmTmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkSGFuZGxlclRvU2VydmljZVJlZigpewotICAgIGlmIChoYW5kbGVyTGlzdCE9bnVsbCAmJiAhaGFuZGxlckxpc3QuaXNFbXB0eSgpKXsKLSAgICAgIAotICAgICAgZm9yIChpbnQgeD0wO3g8aGFuZGxlckxpc3Quc2l6ZSgpO3grKyl7Ci0gICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0paGFuZGxlckxpc3QuZ2V0KHgpOwotICAgICAgICBpZiAoc2VydmljZVJlZiE9bnVsbCl7Ci0gICAgICAgICAgTGlzdCBleGlzdGluZ0hhbmRsZXJzID0gc2VydmljZVJlZi5nZXRIYW5kbGVycygpOwotICAgICAgICAgIGJvb2xlYW4gYWxyZWFkeUV4aXN0cyA9IGZhbHNlOwotICAgICAgICAgIGZvciAoaW50IGk9MDtpPGV4aXN0aW5nSGFuZGxlcnMuc2l6ZSgpO2krKyl7Ci0gICAgICAgICAgICBIYW5kbGVyIGhhbmRsZXIgPSAoSGFuZGxlcilleGlzdGluZ0hhbmRsZXJzLmdldChpKTsKLSAgICAgICAgICAgIGlmIChoYW5kbGVyLmdldEhhbmRsZXJDbGFzcygpLmdldEphdmFOYW1lKCkuZXF1YWxzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpKXsKLSAgICAgICAgICAgICAgYWxyZWFkeUV4aXN0cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmICghYWxyZWFkeUV4aXN0cykgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBXZWJzZXJ2aWNlX2NsaWVudEZhY3Rvcnkgd3NDbGllbnRGYWN0b3J5ID0gbmV3IFdlYnNlcnZpY2VfY2xpZW50RmFjdG9yeUltcGwoKTsKLSAgICAgICAgICAgIEhhbmRsZXIgbmV3SGFuZGxlciA9IHdzQ2xpZW50RmFjdG9yeS5jcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgICAgICBuZXdIYW5kbGVyLnNldEhhbmRsZXJOYW1lKGh0aS5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVJlZik7Ci0gICAgICAgICAgICAgIGlmIChwcm9qZWN0IT1udWxsKSB7Ci0gICAgICAgICAgICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IEphdmFNT0ZVdGlscy5nZXRKYXZhQ2xhc3MoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSwgcHJvamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKGphdmFDbGFzcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnNldEhhbmRsZXJDbGFzcyhqYXZhQ2xhc3MpOwotICAgICAgICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICAgICAgZXhpc3RpbmdIYW5kbGVycy5hZGQobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0xhYmVsc0FuZElkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vTGFiZWxzQW5kSWRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTYwMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vTGFiZWxzQW5kSWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKiAyMDA4MDQyNSAgIDIyMTIzMiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDYxNiAgIDIzNzI5OCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDYxOSAgIDIzNzc5NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgTGFiZWxzQW5kSWRzCi17Ci0gIHByaXZhdGUgVmVjdG9yIGxhYmVsc18gPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGlkc18gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAKLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsKXsKLQkgIGlkc18uYWRkKGlkKTsKLQkgIGxhYmVsc18uYWRkKGxhYmVsKTsKLSAgfQotICAKLSAgcHVibGljIGludCBzaXplKCl7Ci0JICByZXR1cm4gbGFiZWxzXy5zaXplKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoaW50IGluZGV4KXsKLQkgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggKyAxID4gaWRzXy5zaXplKCkpIHJldHVybiBudWxsOwotCSAgcmV0dXJuIChTdHJpbmcpaWRzXy5nZXQoaW5kZXgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhcigpewotCSAgbGFiZWxzXy5jbGVhcigpOwotCSAgaWRzXy5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpZHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldElkcygpCi0gIHsKLQkgIFN0cmluZ1tdIHN0cmluZ0FycmF5ID0gbmV3IFN0cmluZ1tpZHNfLnNpemUoKV07IAotCSAgaWRzXy5jb3B5SW50byhzdHJpbmdBcnJheSk7Ci0JICByZXR1cm4gc3RyaW5nQXJyYXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMYWJlbHMoKQotICB7Ci0JICBTdHJpbmdbXSBzdHJpbmdBcnJheSA9IG5ldyBTdHJpbmdbaWRzXy5zaXplKCldOyAKLQkgIGxhYmVsc18uY29weUludG8oc3RyaW5nQXJyYXkpOwotCSAgcmV0dXJuIHN0cmluZ0FycmF5OwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vU2NlbmFyaW9DbGVhbnVwQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vU2NlbmFyaW9DbGVhbnVwQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWI0NGY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1NjZW5hcmlvQ2xlYW51cENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqICBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgdG8gY2xlYW4gdXAgZGF0YSBhZnRlciBlaXRoZXIgdGhlCi0gKiAgY2xpZW50IG9yIHNlcnZpY2Ugd2l6YXJkcy4gIEN1cnJlbnRseSBpcyBqdXN0IHJlc2V0cyB0aGUKLSAqICBwYXJzZXIgZmFjdG9yeS4gCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIFdTRExQYXJzZXJGYWN0b3J5LmtpbGxQYXJzZXIoKTsKLSAgICBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmNsZWFudXAoKTsKLQkKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHVuZG8oIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICAvLyBFdmVuIGlmIHRoZSB1c2VyIGNhbmNlbHMgb3V0IG9mIHRoZSB3aXphcmQgd2Ugd2FudCB0bwotCSAgLy8ga2lsbCB0aGUgcGFyc2VyLgotCSAgV1NETFBhcnNlckZhY3Rvcnkua2lsbFBhcnNlcigpOwotICAgIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuY2xlYW51cCgpOwotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TZXJ2ZXJTZWxlY3Rpb25VdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vU2VydmVyU2VsZWN0aW9uVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkZmFiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TZXJ2ZXJTZWxlY3Rpb25VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyNCAgIDExNjc1MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDcwMTE5ICAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLklTZXJ2ZXJEZWZhdWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5TZXJ2ZXJJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJTZWxlY3Rpb25VdGlscwotewotCi0gIHB1YmxpYyBzdGF0aWMgSVJ1bnRpbWUgZ2V0UnVudGltZVRhcmdldChTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgCWlmKCBwcm9qZWN0TmFtZSAhPSBudWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApeyAvLyROT04tTkxTLTEkCi0gIAkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gIAkJaWYoIHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpICl7Ci0gIAkJCXJldHVybiBTZXJ2ZXJDb3JlLmdldFByb2plY3RQcm9wZXJ0aWVzKHByb2plY3QpLmdldFJ1bnRpbWVUYXJnZXQoKTsgCi0gIAkJfQotICAJfQotICAJcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRGaXJzdEV4aXN0aW5nU2VydmVyRnJvbUZhY3RvcnlJZChTdHJpbmcgZmFjdG9yeUlkKQotICB7Ci0gIAlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotICAJaWYgKHNlcnZlcnM9PW51bGwgfHwgc2VydmVycy5sZW5ndGghPTApCi0gICAgICAgIHJldHVybiBudWxsOwotICAJZWxzZQotICAJewotICAJICBmb3IgKGludCBpPTA7IGk8c2VydmVycy5sZW5ndGg7IGkrKykKLSAgCSAgewotICAJICAgIElTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpc2VydmVyc1tpXTsKLSAgCSAgICBpZiAoc2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyhmYWN0b3J5SWQpKQotICAJICAgIHsKLSAgCSAgICAgIHJldHVybiBzZXJ2ZXI7Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVNlcnZlcltdIGdldENvbXBhdGlibGVFeGlzdGluZ1NlcnZlcnMoSVJ1bnRpbWUgcnVudGltZSkKLSAgewotICAgIGlmIChydW50aW1lID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotICAgIGlmIChzZXJ2ZXJzPT1udWxsIHx8IHNlcnZlcnMubGVuZ3RoPT0wKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgQXJyYXlMaXN0IGNvbXBhdGlibGVTZXJ2ZXJzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0gICAgaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0gICAgewotICAgIAlTdHJpbmcgcnVudGltZUlkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJZm9yIChpbnQgaT0wOyBpPHNlcnZlcnMubGVuZ3RoOyBpKyspCi0JCXsKLQkJICBJU2VydmVyIHNlcnZlciA9IChJU2VydmVyKXNlcnZlcnNbaV07Ci0JCSAgSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlMiA9IHNlcnZlci5nZXRSdW50aW1lKCkuZ2V0UnVudGltZVR5cGUoKTsKLQkJICBpZiAocnVudGltZVR5cGUyICE9IG51bGwpCi0JCSAgewotCQkJICBTdHJpbmcgc2VydmVyUnVudGltZUlkID0gcnVudGltZVR5cGUyLmdldElkKCk7Ci0JCQkgIGlmIChzZXJ2ZXJSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0JCQkgICAgY29tcGF0aWJsZVNlcnZlcnNMaXN0LmFkZChzZXJ2ZXIpOwotCQkgIH0KLQkJICAKLQkJfQotICAgIH0KLSAgICBpZiAoY29tcGF0aWJsZVNlcnZlcnNMaXN0LnNpemUoKTwxKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgCi0gICAgT2JqZWN0W10gY29tcGF0aWJsZVNlcnZlcnNBcnJheSA9IGNvbXBhdGlibGVTZXJ2ZXJzTGlzdC50b0FycmF5KCk7Ci0gICAgSVNlcnZlcltdIGNvbXBhdGlibGVTZXJ2ZXJzID0gbmV3IElTZXJ2ZXJbY29tcGF0aWJsZVNlcnZlcnNBcnJheS5sZW5ndGhdOwotICAgIGZvciAoaW50IGo9MDsgajxjb21wYXRpYmxlU2VydmVyc0FycmF5Lmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIGNvbXBhdGlibGVTZXJ2ZXJzW2pdID0gKElTZXJ2ZXIpY29tcGF0aWJsZVNlcnZlcnNBcnJheVtqXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXBhdGlibGVTZXJ2ZXJzOwotICB9Ci0gICAgCi0gIHB1YmxpYyBzdGF0aWMgU2VydmVySW5mbyBnZXRFeHRlbmRlclJlY29tbWVuZGF0aW9uKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKCJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iLCAic2VydmVyRGVmYXVsdGVyIik7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE9iamVjdCBzZXJ2ZXJEZWZhdWx0ZXJPYmplY3QgPSBlbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgICAgaWYgKHNlcnZlckRlZmF1bHRlck9iamVjdCBpbnN0YW5jZW9mIElTZXJ2ZXJEZWZhdWx0ZXIpCi0gICAgICB7Ci0gICAgICAgIElTZXJ2ZXJEZWZhdWx0ZXIgc2VydmVyRGVmYXVsdGVyID0gKElTZXJ2ZXJEZWZhdWx0ZXIpc2VydmVyRGVmYXVsdGVyT2JqZWN0OwotICAgICAgICBTZXJ2ZXJJbmZvIHNlcnZlckluZm8gPSBzZXJ2ZXJEZWZhdWx0ZXIucmVjb21tZW5kRGVmYXVsdFNlcnZlcihwcm9qZWN0KTsKLSAgICAgICAgaWYgKHNlcnZlckluZm8gIT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gc2VydmVySW5mbzsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vVmFsaWRhdGlvblV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9WYWxpZGF0aW9uVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVlNGZhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9WYWxpZGF0aW9uVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTE1ODM0IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNjE1OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2NzA1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjEgICAxMzY3NjEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNSAgIDEzNzgzMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI3ICAgMTI2NzgwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMzgwNTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA5MDUgICAxNTYyMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEhhbmRsaW5nIHByb2plY3RzIHdpdGggbm8gdGFyZ2V0IHJ1bnRpbWUKLSAqIDIwMDcwMTE5ICAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzA3MjMgICAxOTQ0MzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIENoZWNrIGZvciBub24tZXhpc3RpbmcgRUFSIHdpdGggY29udGVudCBub3QgZGVsZXRlZAotICogMjAwNzExMDcgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDIwNSAgIDE3MDE0MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MTYgICAyMTUwODQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA0MTcgICAyMjc1OTkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNzE3ICAgMjQxMjgzIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIENsYXNzIHZlcnNpb24gZXJyb3Igd2hlbiBpbnZva2luZyBzYW1wbGUgSlNQIG9uIFRvbWNhdCA1LjUgd2hlbiBKYXZhIHByb2plY3QgaXMgSmF2YSA2Ci0gKiAyMDA4MTAwMSAgIDI0Mzg2OSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXZWIgU2VydmljZSB0b29scyBhbGxvd2luZyBtaXhlZCBKMkVFIGxldmVscwotICogMjAwOTAxMjEgICAyNjE3MzAgemhhbmdAY2EuaWJtLmNvbSAtIEFsbGFuIFpoYW5nLCBXZWJTZXJ2aWNlIGNsaWVudCBydW50aW1lIGlkIHJldHVybiBudWxsCi0gKiAyMDA5MDMwMiAgIDI0OTYwMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBQSUktIGFzc29jaWF0aW9uIHdhcm5pbmcgbWVzc2FnZSBuZWVkcyB1cGRhdGUKLSAqIDIwMDkwNDAxICAgMjY5OTk0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIE5MUy0gVmFsaWRhdGlvbiBtZXNzYWdlcyB1bmNsZWFyIHdoZW4gc2VydmVycyBkb24ndCBzdXBwb3J0IHJ1bnRpbWUvcHJvamVjdCBjb21ibwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Xb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5pbnRlcm5hbC52YWxpZGF0aW9uLkVBUlZhbGlkYXRpb25NZXNzYWdlUmVzb3VyY2VIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UuaW50ZXJuYWwuV2ViU2VydmljZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuUG9ydENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV1NETFBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuRmFjZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdENob2ljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuSU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uVXRpbHMKLXsKLQkvL0NvbnN0YW50cyB0byBoZWxwIGRlY2lkZSBob3cgbXVjaCB2YWxpZGF0aW9uIHRvIGRvLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRFX05PTkUgPSAwOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRFX0FMTCA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUyA9IDI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTID0gMzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFURV9TQ0FMRV9DSEFOR0VTID0gNDsKLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvblV0aWxzKCkKLSAgewotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyB2YWxpZGF0aW9uIHN0YXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbGlkYXRpb24gc3RhdGUKLSAgICogYW5kIHRoZSByZXF1ZXN0ZWQgdmFsaWRhdGlvbiBzdGF0ZS4gSWYgdGhlIHJlcXVlc3RlZCB2YWxpZGF0aW9uIHN0YXRlCi0gICAqIGRvZXMgbm90IGNvdmVyIGFsbCB0aGUgdmFsaWRhdGlvbiBjb3ZlcmVkIGJ5IHRoZSBjdXJyZW50IHZhbGlkYXRpb24KLSAgICogc3RhdGUsIFZBTElEQVRFX0FMTCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgcmVxdWVzdGVkIHZhbGlkYXRpb24KLSAgICogc3RhdGUgaXMgcmV0dXJuZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY3VycmVudFZhbGlkYXRpb25TdGF0ZSB0aGUgdmFsaWRhdG9uIHN0YXRlIGF0IHRoZSB0aW1lIHRoZSBjYWxsZXIncyByZXF1ZXN0cyBhIGNoYW5nZQotICAgKiBAcGFyYW0gcmVxdWVzdGVkVmFsaWRhdGlvblN0YXRlIHRoZSB2YWxpZGF0aW9uIHN0YXRlIGJlaW5nIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLgotICAgKiBAcmV0dXJuIFJldHVybnMgVkFMSURBVEVfQUxMIGlmIHRoZSByZXF1ZXN0ZWQgdmFsaWRhdGlvbiBzdGF0ZQotICAgKiBkb2VzIG5vdCBjb3ZlciBhbGwgdGhlIHZhbGlkYXRpb24gY292ZXJlZCBieSB0aGUgY3VycmVudCB2YWxpZGF0aW9uCi0gICAqIHN0YXRlLiBSZXR1cm5lZCByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGUgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGludCBnZXROZXdWYWxpZGF0aW9uU3RhdGUoaW50IGN1cnJlbnRWYWxpZGF0aW9uU3RhdGUsIGludCByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGUpIHsKLQkJaW50IG5ld1ZhbGlkYXRpb25TdGF0ZTsKLQkJaWYgKGN1cnJlbnRWYWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfTk9ORQotCQkJCXx8IGN1cnJlbnRWYWxpZGF0aW9uU3RhdGUgPT0gcmVxdWVzdGVkVmFsaWRhdGlvblN0YXRlKSB7Ci0JCQluZXdWYWxpZGF0aW9uU3RhdGUgPSByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGU7Ci0JCX0gZWxzZSB7Ci0JCQluZXdWYWxpZGF0aW9uU3RhdGUgPSBWQUxJREFURV9BTEw7Ci0JCX0KLQotCQlyZXR1cm4gbmV3VmFsaWRhdGlvblN0YXRlOwotCi0JfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgSVN0YXR1cyByZXN1bHRpbmcgZnJvbSBjaGVja2luZyBmb3IgZW1wdHkgZmllbGRzLiBVc2VkIGZvciB2YWxpZGF0aW9uIG9mIHBhZ2UgMSBvZiB0aGUKLSAgICogV2ViIHNlcnZpY2UvY2xpZW50IHdpemFyZHMuCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uU3RhdGUgb25lIG9mIFZBTElEQVRFX05PTkUsIFZBTElEQVRFX0FMTCwgVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUywgVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTLCBWQUxJREFURV9TQ0FMRV9DSEFOR0VTCi0gICAqIEBwYXJhbSB0eXBlSWQgV2ViIHNlcnZpY2UgdHlwZSBpZCAoaXNDbGllbnQ9ZmFsc2UpIG9yIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkIChpc0NsaWVudD10cnVlKSAKLSAgICogQHBhcmFtIHNlcnZpY2VJbXBsIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IHNlbGVjdGlvbiBmcm9tIHBhZ2UgMQotICAgKiBAcGFyYW0gcnVudGltZUlkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQKLSAgICogQHBhcmFtIHNlcnZlcklkIHNlcnZlciB0eXBlIGlkCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIHByb2plY3QKLSAgICogQHBhcmFtIG5lZWRFYXIgYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiBFQVIgaXMgcmVxdWlyZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuCi0gICAqIEBwYXJhbSBlYXJQcm9qZWN0TmFtZSBuYW1lIG9mIEVBUiBwcm9qZWN0Ci0gICAqIEBwYXJhbSBwcm9qZWN0VHlwZUlkIHRlbXBsYXRlIGlkCi0gICAqIEBwYXJhbSBpc0NsaWVudCBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIGZvciBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLCAKLSAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBzZXJ2aWNlIHNpZGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5PSyBpZiBhbGwgbWFuZGF0b3J5IGZpZWxkcyBhcmUgbm9uLW51bGwgYW5kIG5vbi1lbXB0eS4gCi0gICAqIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKGludCB2YWxpZGF0aW9uU3RhdGUsIFN0cmluZyB0eXBlSWQsIFN0cmluZyBzZXJ2aWNlSW1wbCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHNlcnZlcklkLAotCQkJU3RyaW5nIHByb2plY3ROYW1lLCBib29sZWFuIG5lZWRFYXIsIFN0cmluZyBlYXJQcm9qZWN0TmFtZSwgU3RyaW5nIHByb2plY3RUeXBlSWQsCi0JCQlib29sZWFuIGlzQ2xpZW50KQotICB7Ci0JCS8vIE9iamVjdCBzZWxlY3Rpb24JICAKLQkgIGlmICh2YWxpZGF0aW9uU3RhdGU9PVZBTElEQVRFX0FMTCAmJiAhaXNDbGllbnQpCi0JICB7Ci0JCWlmIChzZXJ2aWNlSW1wbC5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlpbnQgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKTsKLQkJCWlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCQl7Ci0JCQkgIHJldHVybiBTdGF0dXNVdGlscwotCQkJCQkuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19PQkpFQ1RfU0VMRUNUSU9OKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCSAgcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1NFUlZJQ0VfU0VMRUNUSU9OKTsJCQkJCi0JCQl9Ci0JCX0KLQkgIH0KLQotCQkvLyBXZWIgc2VydmljZSBydW50aW1lCi0JICAgIGlmICh2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfQUxMIHx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTKSB7Ci0JCQlpZiAocnVudGltZUlkID09IG51bGwgfHwgcnVudGltZUlkLmxlbmd0aCgpID09IDApIHsKLQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fUlVOVElNRSwKLQkJCQkJCQluZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUIgfSkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1JVTlRJTUUsCi0JCQkJCQkJbmV3IFN0cmluZ1tdIHsgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1NVQiB9KSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUykgewotCQkJLy8gUHJvamVjdAotCQkJaWYgKHByb2plY3ROYW1lID09IG51bGwgfHwgcHJvamVjdE5hbWUubGVuZ3RoKCkgPT0gMCkgewotCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfUFJPSkVDVF9FTVBUWSwgbmV3IFN0cmluZ1tdIHsgIiIgfSkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfUFJPSkVDVF9FTVBUWSwgbmV3IFN0cmluZ1tdIHsgIiIgfSkpOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gUHJvamVjdCB0eXBlIChpZiBwcm9qZWN0IGRvZXMgbm90IGV4aXN0KQotCQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlpZiAocHJvamVjdFR5cGVJZCA9PSBudWxsIHx8IHByb2plY3RUeXBlSWQubGVuZ3RoKCkgPT0gMCkgewotCi0JCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9QUk9KRUNUX1RZUEVfRU1QVFkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfUFJPSkVDVF9UWVBFX0VNUFRZKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJLy8gRWFyIChpZiBuZWVkIGVhcikKLQkJCWlmIChuZWVkRWFyKSB7Ci0JCQkJaWYgKGVhclByb2plY3ROYW1lID09IG51bGwgfHwgZWFyUHJvamVjdE5hbWUubGVuZ3RoKCkgPT0gMCkgewotCQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW10geyAiIiB9KSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9FQVJfRU1QVFksIG5ldyBTdHJpbmdbXSB7ICIiIH0pKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCSAgICAKLQkJLy8gU2VydmVyIChpZiBXZWIgc2VydmljZSBydW50aW1lIHJlcXVpcmVzIGEgc2VydmVyIG9yIHByb2plY3QgZG9lcyBub3QKLQkJLy8gZXhpc3QpCi0JICAgIGlmICh2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfQUxMIHx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTCi0JCQkJfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUykgewotCQkJaWYgKHNlcnZlcklkID09IG51bGwgfHwgc2VydmVySWQubGVuZ3RoKCkgPT0gMCkgewotCQkJCVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChydW50aW1lSWQpOwotCQkJCWlmIChkZXNjLmdldFNlcnZlclJlcXVpcmVkKCkpIHsKLQkJCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCQlTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1NFUlZFUiwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfU1VCIH0pKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCVN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVkVSLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU1VCIH0pKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX01VU1RfRVhJU1QsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pKTsKLQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgSVN0YXR1cyByZXN1bHRpbmcgZnJvbSBjaGVja2luZyBmb3IgZXJyb3JzLiBVc2VkIGZvciB2YWxpZGF0aW9uIG9mIHBhZ2UgMSBvZiB0aGUKLSAgICogV2ViIHNlcnZpY2UvY2xpZW50IHdpemFyZHMuCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uU3RhdGUgb25lIG9mIFZBTElEQVRFX05PTkUsIFZBTElEQVRFX0FMTCwgVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUywgVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTLCBWQUxJREFURV9TQ0FMRV9DSEFOR0VTCi0gICAqIEBwYXJhbSB0eXBlUnVudGltZVNlcnZlciBXZWIgc2VydmljZSBydW50aW1lLCB0eXBlIGFuZCBzZXJ2ZXIgCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIHByb2plY3QKLSAgICogQHBhcmFtIG5lZWRFYXIgYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiBFQVIgaXMgcmVxdWlyZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuCi0gICAqIEBwYXJhbSBlYXJQcm9qZWN0TmFtZSBuYW1lIG9mIEVBUiBwcm9qZWN0Ci0gICAqIEBwYXJhbSBwcm9qZWN0VHlwZUlkIHRlbXBsYXRlIGlkCi0gICAqIEBwYXJhbSBpc0NsaWVudCBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIGZvciBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLCAKLSAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBzZXJ2aWNlIHNpZGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5PSyBpZiBubyBlcnJvcnMgYXJlIHByZXNlbnQsCi0gICAqIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoaW50IHZhbGlkYXRpb25TdGF0ZSwgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIsIFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGluaXRpYWxQcm9qZWN0TmFtZSwgYm9vbGVhbiBuZWVkRWFyLCBTdHJpbmcgZWFyUHJvamVjdE5hbWUsIFN0cmluZyBwcm9qZWN0VHlwZUlkLAotCQkJYm9vbGVhbiBpc0NsaWVudCkgewotCQotCSAgCS8vIEVuc3VyZSBzZXJ2ZXIsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsIGFuZCBXZWIgc2VydmljZSB0eXBlIGFyZQotCQkvLyBjb21wYXRpYmxlCi0KLQkJU3RyaW5nIHR5cGVJZCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgcnVudGltZUlkID0gdHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0UnVudGltZUlkKCk7Ci0JCVN0cmluZyBzZXJ2ZXJJZCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkID0gdHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCi0JCS8vIExhYmVscwotCSAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSAiIjsKLQkgICAgaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCk+MCkKLQkgICAgewotCSAgICAJc2VydmVyTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCSAgICB9Ci0JCVN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0JCQotCSAgICBpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUykgewotCSAgICAJaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCWlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIKLQkJCQkJCQkuaXNTZXJ2ZXJDbGllbnRSdW50aW1lVHlwZVN1cHBvcnRlZChzZXJ2ZXJJZCwKLQkJCQkJCQkJCXJ1bnRpbWVJZCwgdHlwZUlkKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCQkJCS5lcnJvclN0YXR1cyhOTFMKLQkJCQkJCQkJCQkuYmluZCgKLQkJCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUywKLQkJCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotCQkJCQkJCQkJCQkJCQlydW50aW1lTGFiZWwgfSkpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkJCQkJCS5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlcnZlcklkLCBydW50aW1lSWQsCi0JCQkJCQkJCQl0eXBlSWQpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKE5MUwotCQkJCQkJCQkJCS5iaW5kKAotCQkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TLAotCQkJCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsCi0JCQkJCQkJCQkJCQkJCXJ1bnRpbWVMYWJlbCB9KSk7Ci0JCQkJCX0KLQkJCQkKLQkJCQkJaWYgKGluaXRpYWxQcm9qZWN0TmFtZSAhPSAiIiAmJiBzZXJ2ZXJJZCAhPSBudWxsICYmICFwcm9qZWN0TmFtZS5lcXVhbHMoaW5pdGlhbFByb2plY3ROYW1lKSAmJgotCQkJCSAgICAJCShXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKSA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApICYmCi0JCQkJICAgIAkJSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoaW5pdGlhbFByb2plY3ROYW1lKSkpewotCQkJCSAgICAJCQotCQkJCSAgICAJCWlmKCFkb2VzU2VydmVyU3VwcG9ydFByb2plY3Qoc2VydmVySWQsaW5pdGlhbFByb2plY3ROYW1lKSl7Ci0JCQkJICAgIAkgICAgCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfSkFWQVBST0pFQ1QsCi0JCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsIGluaXRpYWxQcm9qZWN0TmFtZSB9KSk7Ci0JCQkJICAJCSAgICB9Ci0JCQkJICAgIAl9Ci0JCQkJfQotCQkJfQotCSAgICAJCi0JCX0KLQkgICAgCi0JCS8vIElmIHRoZSBwcm9qZWN0IGV4aXN0cywgZW5zdXJlIGl0IHN1cHBvcnRzIHRoZSBXZWIgc2VydmljZSB0eXBlLCBXZWIKLQkJLy8gc2VydmljZSBydW50aW1lLCBhbmQgc2VydmVyLiBJZiB0aGUgRWFyIGFsc28gZXhpc3RzIGFuZCB0aGUgcHJvamVjdAotCQkvLyBhbmQgRWFyIGFyZSBub3QgYWxyZWFkeSBhc3NvY2lhdGVkLCBlbnN1cmUgdGhleSBjYW4gYmUuCi0JCS8vIElmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0LCBlbnN1cmUgdGhlIHByb2plY3QgdHlwZSBzdXBwb3J0cyB0aGUKLQkJLy8gV2ViIHNlcnZpY2UgdHlwZSwgV2ViIHNlcnZpY2UgcnVudGltZSwgYW5kIHNlcnZlcgotCQlpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUwotCQkJCXx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsKLQkJCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJaWYgKHByb2plY3QuZXhpc3RzKCkpIHsKLQotCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkvLyBDaGVjayBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50VHlwZUFuZFJ1bnRpbWVTdXBwb3J0UHJvamVjdCgKLQkJCQkJCQl0eXBlSWQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHNlcnZlckxhYmVsLCBwcm9qZWN0TmFtZSB9KSk7Ci0JCQkJCX0KLQotCQkJCQkvLyBDaGVjayBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0LgotCQkJCQlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApIHsKLQkJCQkJCWlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRQcm9qZWN0KHNlcnZlcklkLCBwcm9qZWN0TmFtZSkpIHsKLQkJCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVCwKLQkJCQkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwgcHJvamVjdE5hbWUgfSkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHJ1bnRpbWUgc3VwcG9ydHMgaXQuCi0JCQkJCWlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VUeXBlQW5kUnVudGltZVN1cHBvcnRQcm9qZWN0KAotCQkJCQkJCXR5cGVJZCwgcnVudGltZUlkLCBwcm9qZWN0TmFtZSkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHNlcnZlckxhYmVsLCBwcm9qZWN0TmFtZSB9KSk7Ci0JCQkJCX0KLQotCQkJCQkvLyBDaGVjayBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0LgotCQkJCQlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApCi0JCQkJCXsKLQkJCQkJICBpZiAoIXZhbFV0aWxzLmRvZXNTZXJ2ZXJTdXBwb3J0UHJvamVjdChzZXJ2ZXJJZCwgcHJvamVjdE5hbWUpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwgcHJvamVjdE5hbWUgfSkpOwotCQkJCQkgIH0KLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gTG9vayBhdCB0aGUgcHJvamVjdCB0eXBlIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHN1aXRhYmxlIGZvcgotCQkJCS8vIHRoZQotCQkJCS8vIHNlbGVjdGVkIHJ1bnRpbWUgYW5kIHNlcnZlci4KLQkJCQlTdHJpbmcgdGVtcGxhdGVJZCA9IHByb2plY3RUeXBlSWQ7Ci0JCQkJU3RyaW5nIHRlbXBsYXRlTGFiZWwgPSBGYWNldFV0aWxzLmdldFRlbXBsYXRlTGFiZWxCeUlkKHRlbXBsYXRlSWQpOwotCi0JCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCS8vIENoZWNrIGlmIHRoZSBydW50aW1lIHN1cHBvcnRzIGl0LgotCQkJCQlpZiAoIVdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZSgKLQkJCQkJCQl0eXBlSWQsIHJ1bnRpbWVJZCwgdGVtcGxhdGVJZCkpIHsKLQotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEUsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHJ1bnRpbWVMYWJlbCwgc2VydmVyTGFiZWwsIHRlbXBsYXRlTGFiZWwgfSkpOwotCQkJCQl9Ci0KLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCk+MCkKLQkJCQkJewotCQkJCQkgIGlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRUZW1wbGF0ZShzZXJ2ZXJJZCwgdGVtcGxhdGVJZCkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEUsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLCB0ZW1wbGF0ZUxhYmVsIH0pKTsKLQkJCQkJICB9Ci0JCQkJCX0KLQotCQkJCSAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKHR5cGVSdW50aW1lU2VydmVyLCBwcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCkgPT0gIiIpCi0JCQkJICAgIHsKLQkJCQkgICAgCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHNlcnZlckxhYmVsLCB0ZW1wbGF0ZUxhYmVsIH0pKTsKLQkJCQkgICAgfQotCQkJCQkKLQkJCQl9IGVsc2UgewotCQkJCQkvLyBDaGVjayBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKAotCQkJCQkJCXR5cGVJZCwgcnVudGltZUlkLCB0ZW1wbGF0ZUlkKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCQkJCS5lcnJvclN0YXR1cyhOTFMKLQkJCQkJCQkJCQkuYmluZCgKLQkJCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEUsCi0JCQkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHNlcnZlckxhYmVsLCB0ZW1wbGF0ZUxhYmVsIH0pKTsKLQkJCQkJfQotCi0JCQkJCS8vIENoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQuCi0JCQkJCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCQkJCXsKLQkJCQkJICBpZiAoIXZhbFV0aWxzLmRvZXNTZXJ2ZXJTdXBwb3J0VGVtcGxhdGUoc2VydmVySWQsIHRlbXBsYXRlSWQpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURSwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsIHRlbXBsYXRlTGFiZWwgfSkpOwotCQkJCQkgIH0KLQkJCQkJfQotCQkJCX0KLQotCQkJfQkJCQkJCQotCQkJCi0JCX0KLQkJCi0JICAgIGlmICh2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfQUxMIHx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsKLQkJCS8vIENoZWNrIGlmIHByb2plY3QvRUFSIGFzc29jaWF0aW9uIGlzIGdvb2QuCi0JCQlpZiAobmVlZEVhcikgewotCQkJCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJCUlQcm9qZWN0IGVwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclByb2plY3ROYW1lKTsKLQkJCQkKLQkJCQkvLyAxOTQ0MzQgLSBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnRzIHRoYXQncyBub3QgZGVsZXRlZCBwcmV2aW91c2x5Ci0JCQkJSVN0YXR1cyBjYW5DcmVhdGVFQVJTdGF0dXMgPSBKMkVFVXRpbHMuY2FuQ3JlYXRlRUFSKGVwKTsKLQkJCQlpZiAoIWNhbkNyZWF0ZUVBUlN0YXR1cy5pc09LKCkpIHsKLQkJCQkJcmV0dXJuIGNhbkNyZWF0ZUVBUlN0YXR1czsKLQkJCQl9Ci0JCQkKLQkJCQlpZiAocHJvamVjdC5leGlzdHMoKSAmJiBlcC5leGlzdHMoKSkgewotCQkJCQlpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZXAsIHByb2plY3QpKSB7Ci0JCQkJCQlib29sZWFuIGFzc29jaWF0ZVN0YXR1cyA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVJXaXRob3V0V2FybmluZyhwcm9qZWN0LCBlcCk7Ci0JCQkJCQlpZiAoIWFzc29jaWF0ZVN0YXR1cykgewotCQkJCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9DQU5OT1RfQVNTT0NJQVRFLAotCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBlcC5nZXROYW1lKCl9KSk7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX0NBTk5PVF9BU1NPQ0lBVEUsCi0JCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUsIGVwLmdldE5hbWUoKX0pKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0JCQotCSAgICAgICAgCQotCSAgICAvLyBEZWZlY3QgMjAzODI2IC0gR2l2ZSBleHRlbmRlciBhIHdheSB0byB2ZXRvIHNlcnZlciwgcHJvamVjdCwgcHJvamVjdCB0eXBlIGFuZCBFQVIgY2hvaWNlcwotCSAgICBpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUwotCQkJCXx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsJCi0JICAgIAlUeXBlUnVudGltZVNlcnZlciB0cnMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgICAgCXRycy5zZXRUeXBlSWQodHlwZUlkKTsKLQkgICAgCXRycy5zZXRSdW50aW1lSWQocnVudGltZUlkKTsKLQkgICAgCXRycy5zZXRTZXJ2ZXJJZChzZXJ2ZXJJZCk7Ci0JICAgIAlJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIHJ1bnRpbWVDaGVja2VyID0gbnVsbDsKLQkgICAgCWlmIChpc0NsaWVudCkgewotCSAgICAJCVN0cmluZyBjbGllbnRSdW50aW1lSWQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lSWQodHJzLCBwcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCk7Ci0JICAgIAkJcnVudGltZUNoZWNrZXIgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lQ2hlY2tlcihjbGllbnRSdW50aW1lSWQpOwotCSAgICAJCQotCSAgICAJfSBlbHNlIHsKLQkgICAgCQlTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lSWQodHJzLCBwcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCk7Ci0JICAgIAkJcnVudGltZUNoZWNrZXIgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUNoZWNrZXIoc2VydmljZVJ1bnRpbWVJZCk7Ci0JICAgIAl9Ci0JICAgIAlpZiAocnVudGltZUNoZWNrZXIgIT0gbnVsbCkgewotCSAgICAJCXJldHVybiBydW50aW1lQ2hlY2tlci5jaGVja1J1bnRpbWVDb21wYXRpYmlsaXR5KHNlcnZlcklkLCBzZXJ2ZXJJbnN0YW5jZUlkLCBwcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCwgZWFyUHJvamVjdE5hbWUpOwotCQkgICAgfQotCSAgICB9Ci0JICAgIAkgICAgCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgSVN0YXR1cyByZXN1bHRpbmcgZnJvbSBjaGVja2luZyBmb3Igd2FybmluZ3MuIFVzZWQgZm9yIHZhbGlkYXRpb24gb2YgcGFnZSAxIG9mIHRoZQotICAgKiBXZWIgc2VydmljZS9jbGllbnQgd2l6YXJkcy4gCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uU3RhdGUgb25lIG9mIFZBTElEQVRFX05PTkUsIFZBTElEQVRFX0FMTCwgVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUywgVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTLCBWQUxJREFURV9TQ0FMRV9DSEFOR0VTCi0gICAqIEBwYXJhbSBzY2FsZVNldHRpbmcgb25lIG9mIDxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19URVNUPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX0lOU1RBTEw8QlIvPgotICAgKiBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A8QlIvPgotICAgKiBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORQotICAgKiBAcGFyYW0gc2VydmVySWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHNlcnZlcklkIHNlcnZlciBpbnN0YW5jZSBpZAotICAgKiBAcGFyYW0gaXNDbGllbnQgYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCBmb3IgY2xpZW50IHNpZGUgdmFsaWRhdGlvbiwgCi0gICAqIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3Igc2VydmljZSBzaWRlIHZhbGlkYXRpb24uCi0gICAqIEByZXR1cm4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuT0sgaWYgbm8gZXJyb3JzIGFyZSBwcmVzZW50LAotICAgKiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5XQVJOSU5HIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGNoZWNrV2FybmluZ1N0YXR1cyhpbnQgdmFsaWRhdGlvblN0YXRlLCBpbnQgc2NhbGVTZXR0aW5nLCBTdHJpbmcgc2VydmVySWQsCi0JCQlTdHJpbmcgc2VydmVySW5zdGFuY2VJZCwgYm9vbGVhbiBpc0NsaWVudCkgewotCQkvLyBSZXR1cm4gYSB3YXJuaW5nIGlmIHRoZXJlIGlzIG5vIHNlcnZlciBzZWxlY3Rpb24gYW5kIHNjYWxlIHNldHRpbmcgaXMKLQkJLy8gYW55dGhpbmcgYmV5b25kIGFzc2VtYmxlLgotCQlpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0NBTEVfQ0hBTkdFUwotCQkJCXx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTKSB7Ci0JCQlpZiAoc2VydmVySWQgPT0gbnVsbCB8fCBzZXJ2ZXJJZC5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJaWYgKHNjYWxlU2V0dGluZyA8IFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRSkgewotCQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fQ0xJRU5UX1NFUlZFUiwgbmV3IFN0cmluZ1swXSkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9OT19TRVJWSUNFX1NFUlZFUiwgbmV3IFN0cmluZ1swXSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyBSZXR1cm4gYSB3YXJuaW5nIGlmIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgaGFzIG9ubHkgc3R1YgotCQkJCS8vIHJ1bnRpbWVzCi0JCQkJLy8gYW5kIHRoZSBzY2FsZSBzZXR0aW5nIGlzIGFueXRoaW5nIGJleW9uZCBkZXBsb3kuCi0JCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVySWQpOwotCQkJCWlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLQkJCQkJLy8gRmluZCBhIFJ1bnRpbWUgd2hpY2ggaXMgbm90IGEgc3R1YgotCQkJCQlJUnVudGltZSBub25TdHViUnVudGltZSA9IFNlcnZlclV0aWxzLmdldE5vblN0dWJSdW50aW1lKHNlcnZlcklkKTsKLQkJCQkJaWYgKChzY2FsZVNldHRpbmcgPCBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZKSAmJiBub25TdHViUnVudGltZSA9PSBudWxsICYmIHNlcnZlckluc3RhbmNlSWQgPT0gbnVsbCkgewotCQkJCQkJU3RyaW5nIHNlcnZlcnR5cGVMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyCi0JCQkJCQkJCS5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9TVFVCX09OTFksCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlcnR5cGVMYWJlbCB9KSk7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBmYWNldCB2ZXJzaW9ucyBvbiB0aGUgcHJvdmlkZWQgcHJvamVjdAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHNlcnZlciB0eXBlIGlkCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGEgcHJvamVjdCB0aGF0IG1heSBvciBtYXkgbm90IGV4aXN0LgotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBmYWNldCB2ZXJzaW9ucyBvbiB0aGUgcHJvamVjdCAoZmFjZXRzIHZlcnNpb25zIGFyZSBpbmZlcnJlZCBmcm9tIGEgSmF2YSBwcm9qZWN0KSwgCi0gICAqIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgc2VydmVyIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmFjZXQgdmVyc2lvbnMgb3IgZmFjZXQgdmVyc2lvbnMgb24gdGhlIHByb2plY3QgY2Fubm90IGJlIGRldGVybWluZWQuICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9lc1NlcnZlclN1cHBvcnRQcm9qZWN0KFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotCVNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdE5hbWUpOwotCWlmIChmYWNldHMgPT0gbnVsbCkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZSAKLQkJcmV0dXJuIGRvZXNTZXJ2ZXJTdXBwb3J0RmFjZXRzKHNlcnZlckZhY3RvcnlJZCwgZmFjZXRzKTsgCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGZhY2V0IHZlcnNpb25zIGluIHRoZSBwcm92aWRlZCBzZXQuCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIGZhY2V0cyBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZmFjZXQgdmVyc2lvbnMgaW4gdGhlIHByb3ZpZGVkIHNldCwKLSAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvZXNTZXJ2ZXJTdXBwb3J0RmFjZXRzKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFNldCBmYWNldHMpCi0gIHsKLSAgICBTZXQgcnVudGltZXMgPSBGYWNldFV0aWxzLmdldFJ1bnRpbWVzKG5ldyBTZXRbXXtmYWNldHN9KTsKLSAgICBJdGVyYXRvciBpdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotICAgIElTZXJ2ZXJUeXBlIHN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOyAgICAgICAgCi0gICAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBzdC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0gICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IChvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lKWl0ci5uZXh0KCk7Ci0gICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotICAgICAgewotCSAgICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JICAgICAgaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwgJiYgcnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVR5cGUuZ2V0SWQoKSkpCi0JICAgICAgewotCSAgICAgICAgLy9mb3VuZCBhIG1hdGNoCi0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyBhdCBsZWFzdCBvbmUgdmVyc2lvbiBvZgotICAgKiBlYWNoIG9mIHRoZSBmaXhlZCBmYWNldHMgb24gdGhlIHByb3ZpZGVkIHRlbXBsYXRlCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc2VydmVyIHR5cGUgc3VwcG9ydHMgYXQgbGVhc3Qgb25lIHZlcnNpb24gb2YKLSAgICogZWFjaCBvZiB0aGUgZml4ZWQgZmFjZXRzIG9uIHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvZXNTZXJ2ZXJTdXBwb3J0VGVtcGxhdGUoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIFNldCB0ZW1wbGF0ZUZhY2V0cyA9IHRlbXBsYXRlLmdldEZpeGVkUHJvamVjdEZhY2V0cygpOwotICAgIEl0ZXJhdG9yIHRlbXBsYXRlRmFjZXRzSXRyID0gdGVtcGxhdGVGYWNldHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAodGVtcGxhdGVGYWNldHNJdHIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2VydmVyU3VwcG9ydHNUaGlzT25lID0gZmFsc2U7Ci0gICAgICBJUHJvamVjdEZhY2V0IGZpeGVkRmFjZXQgPSAoSVByb2plY3RGYWNldCl0ZW1wbGF0ZUZhY2V0c0l0ci5uZXh0KCk7ICAgICAgCi0gICAgICBMaXN0IHZlcnNpb25zID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB2ZXJzaW9ucyA9IGZpeGVkRmFjZXQuZ2V0U29ydGVkVmVyc2lvbnModHJ1ZSk7Ci0gICAgICB9IGNhdGNoIChWZXJzaW9uRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZml4ZWRGYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZml4ZWRGYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9IAotICAgICAgSXRlcmF0b3IgdmVyc2lvbnNJdHIgPSB2ZXJzaW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUodmVyc2lvbnNJdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pdmVyc2lvbnNJdHIubmV4dCgpOwotICAgICAgICBTZXQgcGZ2cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIHBmdnMuYWRkKHBmdik7Ci0gICAgICAgIGlmIChkb2VzU2VydmVyU3VwcG9ydEZhY2V0cyhzZXJ2ZXJGYWN0b3J5SWQsIHBmdnMpKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmVyU3VwcG9ydHNUaGlzT25lID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmICghc2VydmVyU3VwcG9ydHNUaGlzT25lKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgcHJvamVjdCBvciBwcm9qZWN0IHR5cGUgKGlmIHRoZSBwcm9qZWN0IGlzIG51bGwgb3IgZG9lcyBub3QgZXhpc3QpCi0gICAqIHJ1bGVzIG91dCB0aGUgbmVlZCBmb3IgYW4gRUFSLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhIHByb2plY3QKLSAgICogQHBhcmFtIHByb2plY3RUeXBlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LiBNdXN0IGJlIG5vbi1lbXB0eSBpZiB0aGUgcHJvamVjdCBpcyBudWxsIG9yCi0gICAqIGRvZXMgbm90IGV4aXN0LiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBuZWVkIGZvciBhbiBFQVIgaXMgbm90IHJ1bGVkIG91dCwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0JcHVibGljIGJvb2xlYW4gcHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBwcm9qZWN0VHlwZUlkKQotCXsKLQkJLy8gSWYgdGhlIHByb2plY3QgaXMgYSBzaW1wbGUgSmF2YSBwcm9qZWN0IG9yIHRoZSBwcm9qZWN0IHR5cGUgaXMKLQkJLy8gSmF2YSB1dGlsaXR5IHJldHVybiBmYWxzZS4KLQkJaWYgKHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwKSB7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQlpZiAocHJvamVjdC5leGlzdHMoKSkgewotCQkJCWlmIChGYWNldFV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpIHsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8vIFByb2plY3QgZGlkbid0IHJ1bGUgb3V0IHRoZSBuZWVkIGZvciBhbiBFQVIKLQkJLy8gc28gY2hlY2sgdGhlIHByb2VjdCB0eXBlCi0JCVN0cmluZyB0ZW1wbGF0ZUlkID0gcHJvamVjdFR5cGVJZDsKLQkJaWYgKHRlbXBsYXRlSWQgIT0gbnVsbCAmJiB0ZW1wbGF0ZUlkLmxlbmd0aCgpID4gMCkgewotCQkJaWYgKEZhY2V0VXRpbHMuaXNVdGlsaXR5VGVtcGxhdGUodGVtcGxhdGVJZCkpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhbiBKMkVFIDEuMyBFQVIgcHJvamVjdCBjYW4gYmUgaW5zdGFsbGVkIG9uIGEgc2VydmVyIG9mCi0JICogdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlLgotCSAqIEBwYXJhbSBzZXJ2ZXJUeXBlSWQgc2VydmVyIHR5cGUgaWQKLQkgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSBKMkVFIDEuMyBFQVIgcHJvamVjdCBjYW4gYmUgaW5zdGFsbGVkIG9uIGEgc2VydmVyIG9mCi0JICogdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLiAKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzZXJ2ZXJOZWVkc0VBUihTdHJpbmcgc2VydmVyVHlwZUlkKQotCXsKLQkJaWYgKHNlcnZlclR5cGVJZCA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkgICAgaWYgKHNlcnZlclR5cGVJZC5sZW5ndGgoKSA+IDApIHsKLQkJCVN0cmluZyB0YXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVyVHlwZUlkKTsKLQkJCWlmICh0YXJnZXRJZCAhPSBudWxsICYmIHRhcmdldElkLmxlbmd0aCgpID4gMCkgewotCQkJCWlmICghU2VydmVyVXRpbHMuaXNUYXJnZXRWYWxpZEZvckVBUih0YXJnZXRJZCwgIjEzIikpIC8vIHJtIGoyZWUKLQkJCQl7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlUHJvamVjdFRhcmdldEFuZEoyRUUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgY29tcE5hbWUsIFN0cmluZyBlYXJOYW1lLCBTdHJpbmcgZWFyQ29tcE5hbWUsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBqMmVlTGV2ZWwpCi0gIHsKLSAgICBJUHJvamVjdCBwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBJUHJvamVjdCBlYXJQID0gbnVsbDsKLSAgICBpZiAoZWFyTmFtZSE9bnVsbCAmJiAhZWFyTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCIiKSkgewotICAgIAllYXJQID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhck5hbWUpOwotICAgIH0KLSAgICBJU3RhdHVzIHRhcmdldFN0YXR1cyA9IGRvZXNQcm9qZWN0VGFyZ2V0TWF0Y2hTZXJ2ZXJUeXBlKHAsIHNlcnZlckZhY3RvcnlJZCk7Ci0gICAgaWYgKGVhclAhPW51bGwgJiYgdGFyZ2V0U3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5PSykKLSAgICB7Ci0gICAgICAvL2NoZWNrIHRoZSBFQVIgICAgICAKLSAgICAgIElTdGF0dXMgZWFyVGFyZ2V0U3RhdHVzID0gZG9lc1Byb2plY3RUYXJnZXRNYXRjaFNlcnZlclR5cGUoZWFyUCwgc2VydmVyRmFjdG9yeUlkKTsKLSAgICAgIGlmKGVhclRhcmdldFN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlYXJUYXJnZXRTdGF0dXM7Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gdGFyZ2V0U3RhdHVzOwotICAgIH0KLSAgICAKLQotICAgIC8vVmFsaWRhdGUgc2VydmljZSBzaWRlIEoyRUUgbGV2ZWwgICAgCi0gICAgSVN0YXR1cyBqMmVlU3RhdHVzID0gZG9lc1Byb2plY3RNYXRjaEoyRUVMZXZlbChwLCBjb21wTmFtZSwgajJlZUxldmVsKTsKLSAgICBpZihlYXJQIT1udWxsICYmIGoyZWVTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLk9LKQotICAgIHsKLSAgICAgIElTdGF0dXMgZWFySjJFRVN0YXR1cyA9IGRvZXNQcm9qZWN0TWF0Y2hKMkVFTGV2ZWwoZWFyUCwgZWFyQ29tcE5hbWUsIGoyZWVMZXZlbCk7Ci0gICAgICBpZihlYXJKMkVFU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGVhckoyRUVTdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gajJlZVN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHJpdmF0ZSBJU3RhdHVzIGRvZXNQcm9qZWN0VGFyZ2V0TWF0Y2hTZXJ2ZXJUeXBlKElQcm9qZWN0IHAsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0gIHsKLSAgICBpZiAocCE9bnVsbCAmJiBwLmV4aXN0cygpKQotICAgIHsKLSAgICAgIElSdW50aW1lIHByb2plY3RUYXJnZXQgPSBTZXJ2ZXJTZWxlY3Rpb25VdGlscy5nZXRSdW50aW1lVGFyZ2V0KHAuZ2V0TmFtZSgpKTsKLSAgICAgIGlmIChwcm9qZWN0VGFyZ2V0IT1udWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJvamVjdFRhcmdldElkID0gcHJvamVjdFRhcmdldC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVyRmFjdG9yeUlkKTsKLSAgICAgICAgaWYgKHNlcnZlclRhcmdldElkIT1udWxsICYmIHNlcnZlclRhcmdldElkLmxlbmd0aCgpPjApCi0gICAgICAgIHsKLSAgICAgICAgICBpZighcHJvamVjdFRhcmdldElkLmVxdWFscyhzZXJ2ZXJUYXJnZXRJZCkpCi0gICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWRVJfVEFSR0VUX01JU01BVENILG5ldyBTdHJpbmdbXXtwLmdldE5hbWUoKX0pICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgICAgCi0gIH0KLQotICAvL1RPRE86IFRoaXMgbWV0aG9kIGlzIG9ic2VsZXRlIC0gc2hvdWxkIGJlIHJlbW92ZWQuCi0gIHByaXZhdGUgSVN0YXR1cyBkb2VzUHJvamVjdE1hdGNoSjJFRUxldmVsKElQcm9qZWN0IHAsIFN0cmluZyBjb21wTmFtZSwgU3RyaW5nIGoyZWVMZXZlbCkKLSAgewotCi0gICAgdHJ5IHsKLQkJaWYgKHAhPW51bGwgJiYgcC5leGlzdHMoKSkKLQkJewotICAJICBpbnQgcHJvamVjdEoyRUVMZXZlbCA9IEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbihwKTsKLQkJICBpZiAocHJvamVjdEoyRUVMZXZlbCE9LTEpCi0JCSAgewotCQkgICAgU3RyaW5nIHByb2plY3RKMkVFTGV2ZWxTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihwcm9qZWN0SjJFRUxldmVsKTsKLQkJICAgIGlmIChqMmVlTGV2ZWwhPW51bGwgJiYgajJlZUxldmVsLmxlbmd0aCgpPjApCi0JCSAgICB7Ci0JCSAgICAgIGlmICghcHJvamVjdEoyRUVMZXZlbFN0cmluZy5lcXVhbHMoajJlZUxldmVsKSkKLQkJICAgICAgewotCQkgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19KMkVFX01JU01BVENILG5ldyBTdHJpbmdbXXtwLmdldE5hbWUoKX0pICk7Ci0JCSAgICAgIH0KLQkJICAgIH0KLQkJICB9Ci0JCX0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKLSAgICAKLSAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgICAgCi0gIH0KLSAgCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVQcm9qZWN0VHlwZShTdHJpbmcgcHJvamVjdE5hbWUsIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJ1bnRpbWUyQ2xpZW50VHlwZXMpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSVByb2plY3QgcCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKHA9PW51bGwgfHwgIXAuZXhpc3RzKCkpCi0gICAgewotICAgICAgLy9Qcm9qZWN0IGRvZXMgbm90IGV4aXN0IHdoaWNoIG1lYW5zIGEgbmV3IHByb2plY3Qgb2YgdGhlIGNvcnJlY3QgdHlwZSB3aWxsIGJlIGNyZWF0ZWQKLSAgICAgIC8vV2UncmUgZG9uZS4gQWxsIGlzIGdvb2QuCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAgIAotICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCB3ZSBzaG91bGQgc2VlIGl0IGluIHRoZSBwcm9qZWN0IGxpc3QgZm9yIHRoZSBzZWxlY3RlZCBjbGllbnQKLSAgICAvL3Byb2plY3QgdHlwZS4KLSAgICBTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBydW50aW1lMkNsaWVudFR5cGVzLmdldENob2ljZSgpLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAocHJvamVjdE5hbWUuZXF1YWxzKHByb2plY3ROYW1lc1tpXSkpCi0gICAgICB7Ci0gICAgICAgIC8vRm91bmQgdGhlIHByb2plY3QuIEFsbCBpcyBnb29kLgotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL0RpZG4ndCBmaW5kIHRoZSBwcm9qZWN0LiBSZXR1cm4gYW4gZXJyb3IuCi0gICAgLy9HZXQgdGhlIGxhYmVsIGZvciB0aGUgY2xpZW50IHR5cGUgaWQKLSAgICBTdHJpbmcgY2xpZW50VHlwZUxhYmVsID0gZ2V0Q2xpZW50VHlwZUxhYmVsKHJ1bnRpbWUyQ2xpZW50VHlwZXMuZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldFNlbGVjdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV1JPTkdfQ0xJRU5UX1BST0pFQ1RfVFlQRSxuZXcgU3RyaW5nW117cHJvamVjdE5hbWUsIGNsaWVudFR5cGVMYWJlbH0pOwotICAgIElTdGF0dXMgZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlICk7Ci0gICAgcmV0dXJuIGVTdGF0dXM7Ci0gICAgCi0gIH0KLSAgCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q2xpZW50VHlwZUxhYmVsKCBTdHJpbmcgdHlwZSApCi0gIHsJICAKLQkgIGlmICh0eXBlLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKSkKLQkgIHsKLQkJICByZXR1cm4gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9DT01QX1RZUEVfV0VCOwotCSAgfQotCSAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSkpCi0JICB7Ci0JCSAgcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0VKQjsKLQkgIH0KLQkgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUpKQotCSAgewotCQkgIHJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9BUFBfQ0xJRU5UOwotCSAgfQotCSAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9NT0RVTEUpKQotCSAgewotCQkgIHJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9DT05UQUlORVJMRVNTOwotCSAgfQotCSAgZWxzZQotCSAgewotCQkgIC8vTm8ga25vd24gbGFiZWwsIHJldHVybiB0aGUgdHlwZUlkIGl0c2VsZi4gCi0JCSAgcmV0dXJuIHR5cGU7Ci0JICB9CSAgCSAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyBwcm9qZWN0IGlzIGxpa2VseSBob3N0aW5nIGFueSBvZiB0aGUgc2VydmljZXMKLSAgICogaW4gdGhlIHByb3ZpZGVkIFdTREwgYXMgYSBKMkVFIFdlYiBzZXJ2aWNlLgotICAgKiBAcGFyYW0gcCBJUHJvamVjdCBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSB3c2RsVVJMIFVSTCBvZiBhIFdTREwgZG9jdW1lbnQKLSAgICogQHBhcmFtIHBhcnNlcgotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3QgY29udGFpbnMgYSB3ZWJzZXJ2aWNlcy54bWwgCi0gICAqIGRlcGxveW1lbnQgZGVzY3JpcHRvciB0aGF0IHBvaW50cyB0byBhdCBsZWFzdCBvbmUgb2YgdGhlIHBvcnRzIGluIHRoZSBwcm92aWRlZCBXU0RMLiAKLSAgICogUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcm9qZWN0U2VydmljZVByb2plY3QoSVByb2plY3QgcCwgU3RyaW5nIHdzZGxVUkwsIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikKLSAgewotICAgIGlmIChwPT1udWxsIHx8IHdzZGxVUkw9PW51bGwgfHwgd3NkbFVSTC5sZW5ndGgoKT09MCB8fCBwYXJzZXI9PW51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSVJlc291cmNlIHdzWE1MID0gZ2V0V2ViU2VydmNlc1hNTChwKTsKLSAgICBpZiAod3NYTUw9PW51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgCi0gICAgLy9NYWtlIGEgbGlzdCBvZiBhbGwgdGhlIHdzZGwtcG9ydCdzIGluIHdlYnNlcnZpY2VzLnhtbAotICAgIGlmICghKHdzWE1MIGluc3RhbmNlb2YgSUZpbGUpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgIAotICAgIFJlc291cmNlIHJlcyA9IFdvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZS5nZXRSZXNvdXJjZSgoSUZpbGUpd3NYTUwsIHRydWUpOwotICAgIFdzZGRSZXNvdXJjZSB3c2RkUmVzID0gKFdzZGRSZXNvdXJjZSlyZXM7ICAgIAotICAgIFdlYlNlcnZpY2VzIHdlYlNlcnZpY2VzID0gd3NkZFJlcy5nZXRXZWJTZXJ2aWNlcygpOwotICAgIEl0ZXJhdG9yIHdzRGVzY3MgPSB3ZWJTZXJ2aWNlcy5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICBBcnJheUxpc3Qgd3NkbFBvcnRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHdoaWxlKHdzRGVzY3MuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c0Rlc2MgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKXdzRGVzY3MubmV4dCgpOwotICAgICAgSXRlcmF0b3IgcGNzID0gd3NEZXNjLmdldFBvcnRDb21wb25lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKHBjcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnRDb21wb25lbnQgcGMgPSAoUG9ydENvbXBvbmVudClwY3MubmV4dCgpOwotICAgICAgICBXU0RMUG9ydCB3c2RsUG9ydCA9IHBjLmdldFdzZGxQb3J0KCk7Ci0gICAgICAgIHdzZGxQb3J0TGlzdC5hZGQobmV3IFF1YWxpZmllZE5hbWUod3NkbFBvcnQuZ2V0TmFtZXNwYWNlVVJJKCksIHdzZGxQb3J0LmdldExvY2FsUGFydCgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIEFycmF5TGlzdCBwb3J0TGlzdCA9IGdldFBvcnROYW1lc0Zyb21Xc2RsKHdzZGxVUkwsIHBhcnNlcik7Ci0KLSAgICAvL0lmIGFueSBvZiB0aGUgUXVhbGlmaWVkTmFtZXMgaW4gcG9ydExpc3QgZXF1YWxzIGFueSBvZiB0aGUgUXVhbGlmaWVkTmFtZXMKLSAgICAvL2luIHdzZGxQb3J0TGlzdCwgdGhpcyBpcyB0aGUgc2VydmljZSBwcm9qZWN0LiBSZXR1cm4gdHJ1ZS4KLSAgICBPYmplY3RbXSBwb3J0cyA9IHBvcnRMaXN0LnRvQXJyYXkoKTsKLSAgICBPYmplY3RbXSB3c2RsUG9ydHMgPSB3c2RsUG9ydExpc3QudG9BcnJheSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgUXVhbGlmaWVkTmFtZSBwb3J0TmFtZSA9IChRdWFsaWZpZWROYW1lKSBwb3J0c1tpXTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NkbFBvcnRzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBRdWFsaWZpZWROYW1lIHdzZGxQb3J0TmFtZSA9IChRdWFsaWZpZWROYW1lKSB3c2RsUG9ydHNbal07Ci0gICAgICAgIGlmIChwb3J0TmFtZS5lcXVhbHMod3NkbFBvcnROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgSVJlc291cmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYnNlcnZpY2VzLnhtbCBpbiB0aGUgcHJvdmlkZWQgcHJvamVjdC4KLSAgICogQHBhcmFtIHAgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZS4KLSAgICogQHJldHVybiBJUmVzb3VyY2UgY29ycmVzcG9uZGluZyB0byB0aGUgd2Vic2VydmljZXMueG1sIGluIHRoZSBwcm92aWRlZCBwcm9qZWN0LAotICAgKiBudWxsIGlmIHRoZXJlIGlzIG5vIHdlYnNlcnZpY2VzLnhtbCBpbiB0aGUgcHJvamVjdC4KLSAgICovCi0gIHByaXZhdGUgSVJlc291cmNlIGdldFdlYlNlcnZjZXNYTUwoSVByb2plY3QgcCkKLSAgewotICAgIC8vR2V0IHRoZSBtb2R1bGUgcm9vdC4gICAgCi0gICAgSVJlc291cmNlIG1vZHVsZVJvb3QgPSBnZXRNb2R1bGVSb290KHApOwotICAgIGlmICghKG1vZHVsZVJvb3QgaW5zdGFuY2VvZiBJQ29udGFpbmVyKSkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgSVJlc291cmNlIHdlYlNlcnZpY2VzWE1MID0gbnVsbDsKLSAgICBpZiAoSjJFRVByb2plY3RVdGlsaXRpZXMuaXNEeW5hbWljV2ViUHJvamVjdChwKSkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgd3NQYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgd3NQYXRoLmFwcGVuZCgiV0VCLUlORi8iKTsKLSAgICAgIHdzUGF0aC5hcHBlbmQoV2ViU2VydmljZUNvbnN0YW50cy5XRUJTRVJWSUNFX0REX1NIT1JUX05BTUUpOwotICAgICAgd2ViU2VydmljZXNYTUwgPSAoKElDb250YWluZXIpIG1vZHVsZVJvb3QpLmZpbmRNZW1iZXIod3NQYXRoLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHdzUGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHdzUGF0aC5hcHBlbmQoIk1FVEEtSU5GLyIpOwotICAgICAgd3NQYXRoLmFwcGVuZChXZWJTZXJ2aWNlQ29uc3RhbnRzLldFQlNFUlZJQ0VfRERfU0hPUlRfTkFNRSk7Ci0gICAgICB3ZWJTZXJ2aWNlc1hNTCA9ICgoSUNvbnRhaW5lcikgbW9kdWxlUm9vdCkuZmluZE1lbWJlcih3c1BhdGgudG9TdHJpbmcoKSk7ICAgICAgCi0gICAgfQotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1hNTDsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUmVzb3VyY2UgZ2V0TW9kdWxlUm9vdChJUHJvamVjdCBwKQotICB7Ci0gICAgSVBhdGggbW9kdWxlUGF0aCA9IG51bGw7Ci0gICAgdHJ5IAotICAgIHsKLSAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIG1vZHVsZVBhdGggPSB2Yy5nZXRSb290Rm9sZGVyKCkuZ2V0V29ya3NwYWNlUmVsYXRpdmVQYXRoKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICAKLSAgICB9IAotICAgIAotICAgIElSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShtb2R1bGVQYXRoKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgV1NETCBwb3J0cyBpbiB0aGUgcHJvdmlkZWQgV1NETAotICAgKiBAcGFyYW0gd3NkbFVSTCBVUkwgb2YgYSBXU0RMIGRvY3VtZW50Ci0gICAqIEBwYXJhbSBwYXJzZXIgCi0gICAqIEByZXR1cm4gQXJyYXlMaXN0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgUXVhbGlmaWVkTmFtZX0KLSAgICovCi0gIHByaXZhdGUgQXJyYXlMaXN0IGdldFBvcnROYW1lc0Zyb21Xc2RsKFN0cmluZyB3c2RsVVJMLCBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpCi0gIHsKLSAgCUFycmF5TGlzdCBwb3J0TmFtZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlEZWZpbml0aW9uIGRlZiA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICBNYXAgc2VydmljZXMgPSBkZWYuZ2V0U2VydmljZXMoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHNlcnZpY2UgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgIAlQb3J0IHBvcnQgPSAoUG9ydClpdDIubmV4dCgpOwotICAgICAgCXBvcnROYW1lTGlzdC5hZGQobmV3IFF1YWxpZmllZE5hbWUobmFtZXNwYWNlLCBwb3J0LmdldE5hbWUoKSkpOwotICAgICAgfQotICAgIH0gICAgICAgIAotICAJCi0gIAlyZXR1cm4gcG9ydE5hbWVMaXN0OwotICAJCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgUXVhbGlmaWVkTmFtZQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSTsKLQotICAgIFN0cmluZyBsb2NhbFBhcnQ7Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJCi0gICAgICogQHBhcmFtIGxvY2FsUGFydAotICAgICAqLwotICAgIHB1YmxpYyBRdWFsaWZpZWROYW1lKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbFBhcnQpCi0gICAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIHRoaXMubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgICAgdGhpcy5sb2NhbFBhcnQgPSBsb2NhbFBhcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBsb2NhbFBhcnQuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRMb2NhbFBhcnQoKQotICAgIHsKLSAgICAgIHJldHVybiBsb2NhbFBhcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGxvY2FsUGFydAotICAgICAqICAgICAgICAgIFRoZSBsb2NhbFBhcnQgdG8gc2V0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldExvY2FsUGFydChTdHJpbmcgbG9jYWxQYXJ0KQotICAgIHsKLSAgICAgIHRoaXMubG9jYWxQYXJ0ID0gbG9jYWxQYXJ0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgbmFtZXNwYWNlVVJJLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkKLSAgICAgKiAgICAgICAgICBUaGUgbmFtZXNwYWNlVVJJIHRvIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoUXVhbGlmaWVkTmFtZSBxbikKLSAgICB7Ci0gICAgICByZXR1cm4gKHFuLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhuYW1lc3BhY2VVUkkpICYmIHFuLmdldExvY2FsUGFydCgpCi0gICAgICAgICAgLmVxdWFscyhsb2NhbFBhcnQpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL0NsaWVudFJvb3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vQ2xpZW50Um9vdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNGZlYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vQ2xpZW50Um9vdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EYXRhT2JqZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BDbGllbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JbnN0YWxsQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuUnVuQ2xpZW50RnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRSb290RnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IAotewotICBwdWJsaWMgQ2xpZW50Um9vdEZyYWdtZW50KCkKLSAgewotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IERldmVsb3BDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlQ2xpZW50RGVwbG95Q29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGVwbG95Q2xpZW50RnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IEluc3RhbGxDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnRSdW5Db21tYW5kKCksIAotICAgIAkgIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50UnVuQ29tbWFuZCIgKSApOwotICAgIGFkZCggbmV3IFJ1bkNsaWVudEZyYWdtZW50KCkgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpIAotICB7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAkKLQkvLyBNYXAgdGhlIFByZUNsaWVudERldmVsb3BDb21tYW5kIGludG8gdGhlIGRhdGFPYmplY3QuCi0JcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJEYXRhT2JqZWN0IiwgRGF0YU9iamVjdENvbW1hbmQuY2xhc3MgKTsKLQkJCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgCi0gICAgLy9NYXBwaW5ncyBmcm9tIGZyYW1ld29yayB0byBmcmFtZXdvcmsgY29tbWFuZHMKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudERlcGxveUNvbW1hbmQuY2xhc3MgKTsKLSAgICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gICAgCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOyAgIAotCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlQ2xpZW50UnVuQ29tbWFuZC5jbGFzcyApOyAgICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVDbGllbnRSdW5Db21tYW5kLmNsYXNzICk7Ci0JCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZTVkNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNSAgIDIyMjQ3MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIEVBUiB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIG1vZHVsZXMgdG8gYmUgYWRkZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgCSAgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JICBpZiAoY29udGV4dF8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRBc3NlbWJsZSgpKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIENoZWNrIGlmIEVBUiBtb2R1bGUgaXMgcmVxJ2QsIGllLiAhPW51bGwKLQkJICBpZiAoZWFyUHJvamVjdF89PW51bGwpCi0JCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCSAgLy8gIENyZWF0ZSB0aGUgY2xpZW50IEVBUiBtb2R1bGUKLQkJICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKGVhclByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFRlbXBsYXRlSWQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9URU1QTEFURSk7Ci0KLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhGYWNldFV0aWxzLmdldFJlcXVpcmVkRUFSRmFjZXRWZXJzaW9ucyhwcm9qZWN0KSk7IAotCi0JCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKSk7Ci0JCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgewotCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkJICByZXR1cm4gc3RhdHVzOwotCQkgIH0gICAgICAgIAotCi0KLQkJICAvL0Fzc29jaWF0ZSB0aGUgY2xpZW50IG1vZHVsZSBhbmQgc2VydmljZSBFQVIKLQkJICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhc3NvY2lhdGVDb21tYW5kID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldEVBUlByb2plY3QoZWFyUHJvamVjdF8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RWFyKGVhcl8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCSAgc3RhdHVzID0gYXNzb2NpYXRlQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJICB7Ci0JCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggIHN0YXR1cyApOyAgICAgCi0JCSAgfSAgICAgCi0KLQkgIH0KLQkgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0ICkKLSAgewotICAgIHByb2plY3RfID0gcHJvamVjdDsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0gICAgbW9kdWxlXyA9IG1vZHVsZTsKLSAgfSAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLSAgewotICAgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotICAgIGVhcl8gPSBlYXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudCApCi0gIHsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2VDbGllbnQ7ICAKLSAgfSAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkgewotCSAgY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXBsb3lDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXBsb3lDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTcxZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGVwbG95Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnREZXBsb3lDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIGlmIChjb250ZXh0XyAhPSBudWxsICYmIGNvbnRleHRfLmdldERlcGxveSgpKQotICAgIHsKLSAgICAgIC8vSWYgYW5kIHdoZW4gdGhlcmUgYXJlIGZyYW1ld29yayBzcGVjaWZpYyBkZXBsb3kgdGhpbmdzIHRvIGJlIGRvbmUsCi0gICAgICAvL2RvIHRoZW0gaGVyZS4KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotICAgICAgY29udGV4dF89Y29udGV4dDsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXZlbG9wQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjJjYzBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTE2ICAgMTI2OTY1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjMgICAxNjc0ODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNDAzICAgMTczNjU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA3MjQgICAyNDEyNzUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgVmFsaWRhdGUgV1NETCBiZWZvcmUgZG9pbmcgbWFqb3IgV2ViIHNlcnZpY2UgcHJvY2Vzc2luZy4KLSAqIDIwMDgxMDAxICAgMjQzODY5IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFdlYiBTZXJ2aWNlIHRvb2xzIGFsbG93aW5nIG1peGVkIEoyRUUgbGV2ZWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5IVFRQVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZUVudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuU2ltcGxlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVN0YXRlOwotCi1wdWJsaWMgY2xhc3MgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGNsaWVudFJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgY29udGV4dF87Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiAgICAgICAgc2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIG1vZHVsZVR5cGVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgajJlZUxldmVsXzsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgICByZXNvdXJjZUNvbnRleHRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGRldmVsb3BfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGFzc2VtYmxlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXBsb3lfOwotICBwcml2YXRlIGJvb2xlYW4JCQl0ZXN0XzsKLSAgcHJpdmF0ZSBib29sZWFuCQkJaW5zdGFsbF87Ci0gIHByaXZhdGUgYm9vbGVhbgkJCXJ1bl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgd3NkbFVSSV87Ci0gIHByaXZhdGUgT2JqZWN0ICAgICAgICAgICAgZGF0YU9iamVjdF87Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIAotCSAgaWYgKGRldmVsb3BfKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLQkJICBpbnQgaW5kZXggPSBtb2R1bGVfLmluZGV4T2YoIi8iKTsKLQkJICBpZiAoaW5kZXghPS0xKXsKLQkJCSAgcHJvamVjdF8gPSBtb2R1bGVfLnN1YnN0cmluZygwLGluZGV4KTsKLQkJCSAgbW9kdWxlXyA9IG1vZHVsZV8uc3Vic3RyaW5nKGluZGV4KzEpOwotCQkgIH0KLQotCQkgIGlmIChlYXJfIT1udWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJICB7Ci0JCQkgIGludCBlYXJJbmRleCA9IGVhcl8uaW5kZXhPZigiLyIpOwotCQkJICBpZiAoZWFySW5kZXghPS0xKSB7Ci0JCQkJICBlYXJQcm9qZWN0XyA9IGVhcl8uc3Vic3RyaW5nKDAsZWFySW5kZXgpOwotCQkJCSAgZWFyXyA9IGVhcl8uc3Vic3RyaW5nKGVhckluZGV4KzEpOwotCQkJICB9Ci0JCSAgfSAgICAKLQotCQkgIGVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLklORk8sICJ3c19mcmFtZXdvcmsiLCA1MTA4LCB0aGlzLCAiUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQiLCAiY2xpZW50UnVudGltZUlkXyA9ICIrIGNsaWVudFJ1bnRpbWVJZF8pOwotCQkgIElXZWJTZXJ2aWNlUnVudGltZSB3c3J0ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIKLQkJICAuZ2V0Q2xpZW50UnVudGltZShjbGllbnRSdW50aW1lSWRfKTsKLQkJICBXZWJTZXJ2aWNlQ2xpZW50SW5mbyB3c0luZm8gPSBuZXcgV2ViU2VydmljZUNsaWVudEluZm8oKTsKLQotCQkgIHdzSW5mby5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkgIHdzSW5mby5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkgIHdzSW5mby5zZXRTdGF0ZShXZWJTZXJ2aWNlU3RhdGUuVU5LTk9XTl9MSVRFUkFMKTsKLQkJICB3c0luZm8uc2V0V2ViU2VydmljZVJ1bnRpbWVJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0UnVudGltZUlkKCkpOwotCQkgIAotCQkgIC8vIGNoZWNrIGZvciByZWRpcmVjdGlvbiBpbiB0aGUgd3NkbAotCQkgIEhUVFBVdGlsaXR5IGh0dHBVdGlsID0gbmV3IEhUVFBVdGlsaXR5KCk7CQkgIAotICAgICAgU3RyaW5nICAgICAgbmV3V3NkbFVSTCAgPSBodHRwVXRpbC5oYW5kbGVSZWRpcmVjdCh3c2RsVVJJXyk7Ci0gICAgICAKLSAgICAgIHdzSW5mby5zZXRXc2RsVVJMKCBuZXdXc2RsVVJMICk7ICAgCi0gICAgICAKLSAgICAgIC8vIFZhbGlkYXRlIHRoZSB1cmwgYmVmb3JlIHByb2NlZWRpbmcuCi0gICAgICBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIHRpbWVkQ21kID0gbmV3IFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQoKTsKLSAgICAgIFdlYlNlcnZpY2VzUGFyc2VyICAgICAgICAgICAgICAgICAgcGFyc2VyICAgPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0gICAgICAKLSAgICAgIHRpbWVkQ21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKCBwYXJzZXIgKTsKLSAgICAgIHRpbWVkQ21kLnNldFdlYlNlcnZpY2VVUkkoIG5ld1dzZGxVUkwgKTsKLSAgICAgIHRpbWVkQ21kLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgICAgIAotICAgICAgV2ViU2VydmljZUVudGl0eSBlbnRpdHkgPSBwYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKCBuZXdXc2RsVVJMICk7Ci0gICAgICAKLSAgICAgIGlmKCBlbnRpdHkgPT0gbnVsbCB8fCBlbnRpdHkuZ2V0VHlwZSgpICE9IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBpc24ndCBhIHdzZGwgZmlsZQotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1NFTEVDVElPTl9NVVNUX0JFX1dTREwgKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLQotCQkgIHdlYlNlcnZpY2VDbGllbnRfID0gd3NydC5nZXRXZWJTZXJ2aWNlQ2xpZW50KHdzSW5mbyk7Ci0JCSAgV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvID0gV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVF9MSVRFUkFMOwotCQkgIGNvbnRleHRfID0gbmV3IFNpbXBsZUNvbnRleHQoZGV2ZWxvcF8sIGFzc2VtYmxlXywgZGVwbG95XywgaW5zdGFsbF8sIHJ1bl8sIHRydWUsIHRlc3RfLAotCQkJCSAgZmFsc2UsIHNjZW5hcmlvLCByZXNvdXJjZUNvbnRleHRfLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCksCi0JCQkJICByZXNvdXJjZUNvbnRleHRfLmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSwgcmVzb3VyY2VDb250ZXh0XwotCQkJCSAgLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0KLQkJICAvLyBDcmVhdGUgdGhlIGNsaWVudCBtb2R1bGUgaWYgbmVlZGVkLgotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdF8pOwotCQkgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJICB7Ci0JCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGNsaWVudFJ1bnRpbWVJZF8sIG1vZHVsZVR5cGVfKTsKLQkJCSAgaWYgKG1hdGNoZXMpCi0JCQkgIHsgIAotCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKLQkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7Ci0JCQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnYpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRFYXJQcm9qZWN0TmFtZShlYXJQcm9qZWN0Xyk7Ci0JCQkJICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJCQkgIHsKLQkJCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkJICB9ICAgICAgICAKLQkJCSAgfSAgICAgICAgICAgIAotCQkgIH0gZWxzZSB7Ci0JCQkJLy8gYWRkIGZhY2V0cyByZXF1aXJlZCBieSBXZWIgc2VydmljZSBydW50aW1lCi0JCSAgICAgICAgaWYgKHJmdi5sZW5ndGggIT0gMCkgewotCQkgICAgICAgIAlzdGF0dXMgPSBGYWNldFV0aWxzLmFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KHByb2plY3QsIHJmdiwgbW9uaXRvcik7Ci0JCSAgICAgICAgCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgICAgICAgCXsKLQkJICAgICAgICAJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCSAgICAgICAgCQlyZXR1cm4gc3RhdHVzOwotCQkgICAgICAgIAl9ICAgICAgCi0JCSAgICAgICAgfQotCQkgIH0gICAgICAgIAotCSAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlciApCi0gIHsKLQl0eXBlUnVudGltZVNlcnZlcl8gPSB0eXBlUnVudGltZVNlcnZlcjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRSdW50aW1lSWQoIFN0cmluZyBpZCkKLSAgewotICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBpZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50SjJFRVZlcnNpb24oIFN0cmluZyBqMmVlTGV2ZWwgKQotICB7Ci0JajJlZUxldmVsXyA9IGoyZWVMZXZlbDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEoyZWVMZXZlbCgpCi0gIHsKLSAgICByZXR1cm4gajJlZUxldmVsXzsgIAotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZSgpCi0gIHsKLQlyZXR1cm4gd2ViU2VydmljZUNsaWVudF87ICAKLSAgfQotICAKLSAgcHVibGljIElDb250ZXh0IGdldENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQgKQotICB7Ci0gICAgcmVzb3VyY2VDb250ZXh0XyA9IHJlc291cmNlQ29udGV4dDsJICAKLSAgfQotICAKLSAgcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25fOwkgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIElTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotCXNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdF87ICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE1vZHVsZSgpCi0gIHsKLSAgICByZXR1cm4gbW9kdWxlXzsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLSAgewotCW1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZVR5cGUoIFN0cmluZyBtb2R1bGVUeXBlKQotICB7Ci0gICAgbW9kdWxlVHlwZV8gPSBtb2R1bGVUeXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFYXJQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBlYXJQcm9qZWN0XzsgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFYXIoKQotICB7Ci0JcmV0dXJuIGVhcl87ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCWVhcl8gPSBlYXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGV2ZWxvcENsaWVudChib29sZWFuIGRldmVsb3BDbGllbnQpIHsKLQkgIGRldmVsb3BfID0gZGV2ZWxvcENsaWVudDsKLSAgfQkKLQotICBwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JICBhc3NlbWJsZV8gPSBhc3NlbWJsZUNsaWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlcGxveUNsaWVudChib29sZWFuIGRlcGxveUNsaWVudCkKLSAgewotICAgICAgZGVwbG95XyA9IGRlcGxveUNsaWVudDsKLSAgfQotCQotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KGJvb2xlYW4gaW5zdGFsbENsaWVudCkKLSAgewotCWluc3RhbGxfID0gaW5zdGFsbENsaWVudDsKLSAgfQkKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLQl0ZXN0XyA9IHRlc3RTZXJ2aWNlOwotICB9CQkKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShib29sZWFuIHN0YXJ0U2VydmljZSkKLSAgewotCSAgcnVuXyA9IHN0YXJ0U2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgd3NkbFVSSV8gPSB1cmk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERhdGFPYmplY3QoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgZGF0YU9iamVjdF8gPSBvYmplY3Q7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0RGF0YU9iamVjdCgpCi0gIHsKLQlPYmplY3QgcmVzdWx0ID0gbnVsbDsKLQkKLSAgICBpZiggZGF0YU9iamVjdF8gIT0gbnVsbCAmJiBkYXRhT2JqZWN0XyBpbnN0YW5jZW9mIElXZWJTZXJ2aWNlICkKLQl7Ci0JICAvLyBUaGUgZGF0YSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBzZXQgd2l0aCBhbiBJV2ViU2VydmljZQotCSAgLy8gc28gd2Ugd2lsbCBrZWVwIHRoaXMgdmFsdWUuCi0JICByZXN1bHQgPSBkYXRhT2JqZWN0XzsKLQl9Ci0gICAgZWxzZQotCXsKLQkgIHJlc3VsdCA9IHdlYlNlcnZpY2VDbGllbnRfOwkKLQl9Ci0JCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEluc3RhbGxDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjg4MDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MjUgICAyMjA5ODUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEsIFNlcnZlciBpcyByZWNyZWF0ZWQgd2hlbiBwcmV2IHB1Ymxpc2ggZmFpbGVkCi0gKiAyMDA4MDQyOSAgIDIyMDk4NSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODA1MjAgICAyMzMwNjUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZlciBub3QgZm91bmQgZXJyb3IgaW4gV2ViIHNlcnZpY2UgZ2VuZXJhdGlvbgotICogMjAwODA3MjIgICAyNDAyMzEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICBwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIG1vZHVsZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgcHJpdmF0ZSBJQ29udGV4dAkJCWNvbnRleHRfOwotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsJICAKLQkgIGlmIChjb250ZXh0XyAhPSBudWxsICYmIGNvbnRleHRfLmdldEluc3RhbGwoKSkKLQkgIHsgIAotCSAgICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAgICAgCi0JICAgICAgaWYgKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpPT1udWxsKQotCSAgICAgIHsKLSAgICAJCS8vIEF0dGVtcHQgdG8gZmluZCBhIHNlcnZlciBpbnN0YW5jZSBpbiB0aGUgd29ya3NwYWNlIG1hdGNoaW5nCi0JCQkvLyB0aGUgc2VydmVyIGlkIG9mIHRoZSB3ZWJTZXJ2aWNlXwotCQkJLy8gSWYgd2UgY2FuIGZpbmQgb25lLCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBzZXJ2ZXIuCi0JCQlJU2VydmVyW10gYWxsU2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotCQkJaWYgKGFsbFNlcnZlcnMgIT0gbnVsbCAmJiBhbGxTZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFNlcnZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJSVNlcnZlciBvbmVTZXJ2ZXIgPSBhbGxTZXJ2ZXJzW2ldOwotCQkJCQlpZiAob25lU2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscygKLQkJCQkJCQl3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKSkgewotCQkJCQkJCi0JCQkJCQl3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLnNldFNlcnZlckluc3RhbmNlSWQob25lU2VydmVyLmdldElkKCkpOwotCQkJCQkJd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5zZXRTZXJ2ZXJDcmVhdGVkKHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJLy8gQ2Fubm90IGZpbmQgYW4gYXBwcm9wcmlhdGUgc2VydmVyLCBzbyB3ZSB3aWxsIGNyZWF0ZSBvbmUKLQkJCWlmICh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSA9PSBudWxsKSB7Ci0JCSAgICAgICAgQ3JlYXRlU2VydmVyQ29tbWFuZCBjcmVhdGVTZXJ2ZXJDb21tYW5kID0gbmV3IENyZWF0ZVNlcnZlckNvbW1hbmQoKTsKLQkJICAgICAgICBjcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlckZhY3RvcnlpZCh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkJICAgICAgICBjcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlclJ1bnRpbWVJZCh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlclJ1bnRpbWVJZCgpKTsKLQkJICAgICAgICBjcmVhdGVTZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCQkgICAgICAgIElTdGF0dXMgY3JlYXRlU2VydmVyU3RhdHVzID0gY3JlYXRlU2VydmVyQ29tbWFuZC5leGVjdXRlKG51bGwsIG51bGwpOwotCQkgICAgICAgIGlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLk9LKQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuc2V0U2VydmVySW5zdGFuY2VJZChjcmVhdGVTZXJ2ZXJDb21tYW5kLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgICAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLnNldFNlcnZlckNyZWF0ZWQodHJ1ZSk7Ci0JCSAgICAgICAgfQotCQkgICAgICAgIGVsc2UKLQkJICAgICAgICB7Ci0JCSAgICAgICAgICBpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBjcmVhdGVTZXJ2ZXJTdGF0dXMgKTsKLQkJICAgICAgICAgIH0gICAgICAgICAgICAgICAKLQkJICAgICAgICAgIHJldHVybiBjcmVhdGVTZXJ2ZXJTdGF0dXM7Ci0JCSAgICAgICAgfQotCQkJfQotCSAgICAgIH0KLQkgICAgICAKLQkgICAgICBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKTsKLQkgICAgICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCSAgICAgIGlmIChlYXJQcm9qZWN0XyAhPSBudWxsICYmIGVhclByb2plY3RfLmxlbmd0aCgpPjAgJiYgZWFyXyE9IG51bGwgJiYgZWFyXy5sZW5ndGgoKT4wKQotCSAgICAgIHsKLQkgICAgICAgIGNvbW1hbmQuc2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JICAgICAgICBjb21tYW5kLnNldE1vZHVsZShlYXJfKTsKLQkgICAgICB9Ci0JICAgICAgZWxzZQotCSAgICAgIHsKLQkgICAgICAgIGNvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0Xyk7Ci0JICAgICAgICBjb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsgICAgICAgCi0JICAgICAgfQotCQotCSAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLQkgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkgICAgICB7Ci0JICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCSAgICAgIH0gICAgIAotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICAgfQotCSAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotICAgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0ICkKLSAgICB7Ci0gICAgICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gICAgfQotICAgICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Q2FuUnVuVGVzdENsaWVudCgpewotICAJICBpZih3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsKSByZXR1cm4gdHJ1ZTsKLSAgCSAgCi0gIAkgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLSAgICB7Ci0gICAgICBtb2R1bGVfID0gbW9kdWxlOwotICAgIH0gCi0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdCggU3RyaW5nIGVhclByb2plY3QgKQotICAgIHsKLSAgICAgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgICB7Ci0gICAgICBlYXJfID0gZWFyOyAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnQgKQotICAgIHsKLSAgICAgIHdlYlNlcnZpY2VDbGllbnRfID0gd2ViU2VydmljZUNsaWVudDsgIAotICAgIH0gICAgCi0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAJY29udGV4dF8gPSBjb250ZXh0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudFJ1bkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudFJ1bkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzMTViZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRSdW5Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5TdGFydFNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLQotcHVibGljIGNsYXNzIFByZUNsaWVudFJ1bkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAKLQkgIGlmIChjb250ZXh0XyAhPSBudWxsICYmIGNvbnRleHRfLmdldFJ1bigpKQotCSAgewotCSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOyAgIAotCSAgICAKLQkgICAgU3RhcnRTZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKCk7Ci0JICAgIGNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JICAgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkgICAgewotCSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7ICAgICAgIAotCSAgICB9IAotCSAgfQotCSAgCi0gICAgcmV0dXJuIHN0YXR1czsJICAKLSAgfQotCSAgCi0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudCApCi0gIHsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2VDbGllbnQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0JICBjb250ZXh0Xz1jb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5OTM2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTA0ICAgMTM2MTE4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0KLSAgLyoqCi0gICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luIGluc3RhbmNlXzsKLQotICBwcml2YXRlIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBzZXJ2ZXJSdW50aW1lQ29udGV4dF87Ci0gIHByaXZhdGUgUGVyc2lzdGVudFByb2plY3RUb3BvbG9neUNvbnRleHQgcHJvamVjdFRvcG9sb2d5Q29udGV4dF87Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luIHNpbmdsZXRvbi4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotICAgKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IgKCBTdHJpbmcgbmFtZSApCi0gICB7Ci0gCXRyeQotICAgICB7CQotICAgICAJVVJMIGltYWdlVVJMID0gRmlsZUxvY2F0b3IuZmluZChpbnN0YW5jZV8uZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIkbmwkLyIrbmFtZSksIG51bGwpOwotICAgICAJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLSAgICAgfQotICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgfQotICAgfQotCi0gIHB1YmxpYyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKQotICB7Ci0gICAgaWYgKHByb2plY3RUb3BvbG9neUNvbnRleHRfID09IG51bGwpCi0gICAgewotICAgICAgcHJvamVjdFRvcG9sb2d5Q29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICAgIHByb2plY3RUb3BvbG9neUNvbnRleHRfLmxvYWQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHByb2plY3RUb3BvbG9neUNvbnRleHRfOwotICB9Ci0KLSAgcHVibGljIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBnZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpIAotCXsKLQkgIGlmIChzZXJ2ZXJSdW50aW1lQ29udGV4dF8gPT0gbnVsbCkKLQkgIAl7Ci0JICAJCXNlcnZlclJ1bnRpbWVDb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkgIAkJc2VydmVyUnVudGltZUNvbnRleHRfLmxvYWQoKTsKLQkgIAl9Ci0JICByZXR1cm4gc2VydmVyUnVudGltZUNvbnRleHRfOwotCX0gIAotICB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NjJlOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwMiAgIDExOTc4MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDIyNyAgIDEyNDM5MiByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgaW1wbGVtZW50cyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0Ci17Ci0KLSAgcHVibGljIFBlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0ICgpIAotICB7Ci0JICBzdXBlciggV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxvYWQoKSAKLSAgewotICAgIC8vTG9hZCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGVzCi0gICAgU3RyaW5nW10gc2VydmljZUlkcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldFNlcnZpY2VUeXBlcygpOwotICAgIFN0cmluZ0J1ZmZlciBzZXJ2aWNlU2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpICE9IDApCi0gICAgICAgIHNlcnZpY2VTYi5hcHBlbmQoIiAiKTsKLSAgICAgIHNlcnZpY2VTYi5hcHBlbmQoc2VydmljZUlkc1tpXSk7Ci0gICAgfQotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX1NFUlZJQ0VfVFlQRVMsIHNlcnZpY2VTYi50b1N0cmluZygpKTsKLSAgICAKLSAgICAvL0xvYWQgdGhlIGNsaWVudCBwcm9qZWN0IHR5cGVzCi0gICAgU3RyaW5nW10gaWRzID0gUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuZ2V0Q2xpZW50VHlwZXMoKTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgc2IuYXBwZW5kKCIgIik7Ci0gICAgICBzYi5hcHBlbmQoaWRzW2ldKTsKLSAgICB9Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfQ0xJRU5UX1RZUEVTLCBzYi50b1N0cmluZygpKTsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVVNFX1RXT19FQVJTLCBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5pc1VzZVR3b0VBUnMoKSk7Ci0gfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlcyhTdHJpbmdbXSBpZHMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgc2IuYXBwZW5kKCIgIik7Ci0gICAgICBzYi5hcHBlbmQoaWRzW2ldKTsKLSAgICB9Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9TRVJWSUNFX1RZUEVTLCBzYi50b1N0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRTZXJ2aWNlVHlwZXMoKQotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUykpOwotICAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykKLSAgICAgIHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICByZXR1cm4gczsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRTZXJ2aWNlVHlwZXMoKQotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUykpOwotICAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykKLSAgICAgIHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICByZXR1cm4gczsgICAgICAgIAotICB9Ci0gICAgCi0gcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZXMoU3RyaW5nW10gaWRzKQotIHsKLSAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgewotICAgICBpZiAoaSAhPSAwKQotICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICBzYi5hcHBlbmQoaWRzW2ldKTsKLSAgIH0KLSAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfQ0xJRU5UX1RZUEVTLCBzYi50b1N0cmluZygpKTsKLSB9Ci0KLSBwdWJsaWMgU3RyaW5nW10gZ2V0Q2xpZW50VHlwZXMoKQotIHsKLSAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUykpOwotICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0gICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspCi0gICAgIHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgIHJldHVybiBzOwotIH0KLSAKLSBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdENsaWVudFR5cGVzKCkKLSB7Ci0gICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9DTElFTlRfVFlQRVMpKTsKLSAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKQotICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICByZXR1cm4gczsgICAgICAgIAotIH0gCi0KLSBwdWJsaWMgdm9pZCBzZXRVc2VUd29FQVJzKGJvb2xlYW4gdXNlKQotIHsKLSAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfVVNFX1RXT19FQVJTLCB1c2UpOwotIH0KLSBwdWJsaWMgYm9vbGVhbiBpc1VzZVR3b0VBUnMoKQotIHsKLSAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1VTRV9UV09fRUFSUyk7Ci0gfQotCi0gcHVibGljIFByb2plY3RUb3BvbG9neUNvbnRleHQgY29weSgpIHsKLSAJVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldFNlcnZpY2VUeXBlcyhnZXRTZXJ2aWNlVHlwZXMoKSk7Ci0gICAgY29udGV4dC5zZXREZWZhdWx0U2VydmljZVR5cGVzKGdldERlZmF1bHRTZXJ2aWNlVHlwZXMoKSk7Ci0JY29udGV4dC5zZXRDbGllbnRUeXBlcyhnZXRDbGllbnRUeXBlcygpKTsKLSAgICBjb250ZXh0LnNldERlZmF1bHRDbGllbnRUeXBlcyhnZXREZWZhdWx0Q2xpZW50VHlwZXMoKSk7Ci0JY29udGV4dC5zZXRVc2VUd29FQVJzKGlzVXNlVHdvRUFScygpKTsKLQlyZXR1cm4gY29udGV4dDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNzZlMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODA0MTUgICAyMjcxNTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5lZWQgYSB3YXkgdG8gc3BlY2lmeSBhIGJhY2t1cCBXZWIgc2VydmljZSBydW50aW1lCi0gKiAyMDA4MDkxOCAgIDI0NzUzNyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFVwZGF0ZSBkZWZhdWx0IHNlcnZlciBydW50aW1lIHRvIFRvbWNhdCA2Ci0gKiAyMDA5MDgwMyAgIDI4MzM5OSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXZWIgU2VydmljZXMgPiBTZXJ2ZXIgJiBSdW50aW1lIHByZWZlcmVuY2UgdW5kZWZpbmVkCi0gKiAyMDA5MTAwNyAgIDI4MzM5OSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXZWIgU2VydmljZXMgPiBTZXJ2ZXIgJiBSdW50aW1lIHByZWZlcmVuY2UgdW5kZWZpbmVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotCi0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgUFJFRkVSRU5DRV9TRVJWRVIgPSAiUFJFRkVSRU5DRV9TRVJWRVIiOwotCXByaXZhdGUgU3RyaW5nIFBSRUZFUkVOQ0VfUlVOVElNRSA9ICJQUkVGRVJFTkNFX1JVTlRJTUUiOwotCXByaXZhdGUgU3RyaW5nIEZBTExCQUNLX1JVTlRJTUUgPSAiRkFMTEJBQ0tfUlVOVElNRSI7ICAvLyBXZWIgc2VydmljZSBydW50aW1lIHRvIGZhbGxiYWNrIHRvIGlmIHByZWZlcnJlZCBydW50aW1lIGlzIG5vdCBzdWl0YWJsZQotCS8vcHJpdmF0ZSBTdHJpbmcgUFJFRkVSRU5DRV9KMkVFX1ZFUlNJT04gPSAiUFJFRkVSRU5DRV9KMkVFX1ZFUlNJT04iOwotCQotCXByaXZhdGUgU3RyaW5nIFNFUlZFUl9GQUNUT1JZX0lEX0RFRkFVTFQgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNjAiOwotCXByaXZhdGUgU3RyaW5nIFJVTlRJTUVfSURfREVGQVVMVCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIjsKLQkKLQlwdWJsaWMgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0KCkKLQl7Ci0JCXN1cGVyKFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5Db250ZXh0I2xvYWQoKQotCSAqLwotCXB1YmxpYyB2b2lkIGxvYWQoKSB7Ci0JCS8vRGVmYXVsdHMgd2lsbCBiZSBzZXQgdmlhIHRoZSAuaW5pIGN1c3RvbWl6YXRpb24uIFRoZXkgYXJlIGhhcmQgY29kZWQgdG8gZGVmYXVsdCB2YWx1ZXMgaW4gdGhlCi0JCS8vYWJzZW5jZSBvZiBhIC5pbmkgZmlsZS4KLQkJU3RyaW5nIHNlcnZlckRlZmF1bHQgPSBnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsKLQkJaWYgKHNlcnZlckRlZmF1bHQ9PW51bGwgfHwgc2VydmVyRGVmYXVsdC5sZW5ndGgoKT09MCB8fCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVyRGVmYXVsdCk9PW51bGwpCi0JCXsKLQkJICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfU0VSVkVSLCBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUKTsKLQkJfQotCi0JCVN0cmluZyBydW50aW1lRGVmYXVsdCA9IGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9SVU5USU1FKTsKLQkJaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVMYWJlbEJ5SWQocnVudGltZURlZmF1bHQpPT1udWxsKQotCQkJLy90cnkgYWdhaW4gdXNpbmcgZmFsbCBiYWNrIHJ1bnRpbWUKLQkJCXJ1bnRpbWVEZWZhdWx0ID0gZ2V0RGVmYXVsdFN0cmluZyhGQUxMQkFDS19SVU5USU1FKTsKLQkJaWYgKHJ1bnRpbWVEZWZhdWx0PT1udWxsIHx8IHJ1bnRpbWVEZWZhdWx0Lmxlbmd0aCgpPT0wIHx8IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVMYWJlbEJ5SWQocnVudGltZURlZmF1bHQpPT1udWxsKQotCQl7Ci0JCSAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1JVTlRJTUUsIFJVTlRJTUVfSURfREVGQVVMVCk7Ci0JCX0gZWxzZSB7Ci0JCSAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1JVTlRJTUUsIHJ1bnRpbWVEZWZhdWx0KTsKLQkJfQotCQkKLQkJCQkKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0U2VydmVyRmFjdG9yeUlkKCkKLQl7Ci0JCXJldHVybiBnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRSdW50aW1lSWQoKQotCXsKLQkJcmV0dXJuIGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9SVU5USU1FKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEZhbGxiYWNrUnVudGltZUlkKCkKLQl7Ci0JCXJldHVybiBnZXREZWZhdWx0U3RyaW5nKEZBTExCQUNLX1JVTlRJTUUpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpCi0JewotCQlTdHJpbmcgdmFsdWUgPSBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsgCi0JCS8qCi0JCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS5sZW5ndGgoKT09MCkKLQkJewotCQkJdmFsdWUgPSBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUOyAKLQkJCXNldFNlcnZlckZhY3RvcnlJZCh2YWx1ZSk7Ci0JCX0KLQkJKi8KLQkJcmV0dXJuIHZhbHVlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJZCgpCi0JewotCQlTdHJpbmcgdmFsdWUgPSBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfUlVOVElNRSk7Ci0JCS8qCi0JCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS5sZW5ndGgoKT09MCkKLQkJewotCQkJdmFsdWUgPSBSVU5USU1FX0lEX0RFRkFVTFQ7IAotCQkJc2V0UnVudGltZUlkKHZhbHVlKTsKLQkJfQotCQkqLwotCQlyZXR1cm4gdmFsdWU7CQkKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBpZCkKLQl7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfU0VSVkVSLGlkKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UnVudGltZUlkKFN0cmluZyBpZCkKLQl7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfUlVOVElNRSwgaWQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMjFjNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvamVjdFRvcG9sb2d5Q29udGV4dCAKLXsKLSAgLyoqCi0gICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgcHJlZmVycmVkIG9yZGVyIG9mIHRoZSBkaWZmZXJlbnQgY2xpZW50IHR5cGVzCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUyA9ICJjbGllbnRUeXBlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUyA9ICJzZXJ2aWNlVHlwZXMiOwotICAKLSAgLyoqCi0gICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdHdvIEVBUiBvcHRpb24KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVVNFX1RXT19FQVJTID0gInVzZVR3b0VBUnMiOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRTZXJ2aWNlVHlwZXMoKTsKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRTZXJ2aWNlVHlwZXMoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRDbGllbnRUeXBlcygpOwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdENsaWVudFR5cGVzKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0VXNlVHdvRUFScyhib29sZWFuIHVzZSk7Ci0gIHB1YmxpYyBib29sZWFuIGlzVXNlVHdvRUFScygpOwotCi0gIHB1YmxpYyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvcHkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5ZTFmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1Byb2plY3RUb3BvbG9neURlZmF1bHRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLQotcHVibGljIGNsYXNzIFByb2plY3RUb3BvbG9neURlZmF1bHRzCi17Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGdldFNlcnZpY2VUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsU2VydmljZVByb2plY3RUeXBlcygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGdldENsaWVudFR5cGVzKCkKLSAgewotICAgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRBbGxDbGllbnRQcm9qZWN0VHlwZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1VzZVR3b0VBUnMoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2NWIyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1Byb2plY3RUb3BvbG9neVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTUgICAxNDEzOTggY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VG9wb2xvZ3lQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICAvKkNPTlRFWFRfSUQgUFRQUDAwMDEgZm9yIHRoZSBQcm9qZWN0IFRvcG9sb2d5IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFRQUF9QQUdFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5QVFBQMDAwMSI7Ci0KLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciBzZXJ2aWNlVHlwZVZpZXdlcl87Ci0gIHByaXZhdGUgQnV0dG9uIHNlcnZpY2VNb3ZlVXBfOwotICBwcml2YXRlIEJ1dHRvbiBzZXJ2aWNlTW92ZURvd25fOwotICBwcml2YXRlIFZlY3RvciBzZXJ2aWNlVHlwZXNfOwotICAKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciBjbGllbnRUeXBlVmlld2VyXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW92ZVVwXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW92ZURvd25fOwotICBwcml2YXRlIFZlY3RvciBjbGllbnRUeXBlc187Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdHdvRUFSXzsKLQotIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BUUFBfUEFHRSk7Ci0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCxJTkZPUE9QX1BUUFBfUEFHRSk7ICAKLQotICAgIEdyb3VwIHNlcnZpY2VUeXBlQ29tcG9zaXRlID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZExheW91dCBzZXJ2aWNlZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIHNlcnZpY2VnbC5udW1Db2x1bW5zID0gMjsKLSAgICAvL3NlcnZpY2VnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIC8vc2VydmljZWdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBzZXJ2aWNlVHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXQoc2VydmljZWdsKTsKLSAgICBzZXJ2aWNlVHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApKTsKLSAgICBzZXJ2aWNlVHlwZUNvbXBvc2l0ZS5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1RZUEVfTkFNRSk7Ci0gICAgCi0gICAgVGFibGUgc2VydmljZVRhYmxlPSBuZXcgVGFibGUoc2VydmljZVR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBzZXJ2aWNlZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgc2VydmljZWdkLndpZHRoSGludCA9IDI1NjsKLSAgICBzZXJ2aWNlVGFibGUuc2V0TGF5b3V0RGF0YShzZXJ2aWNlZ2QpOwotICAgIHNlcnZpY2VUYWJsZS5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9TRVJWSUNFX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIHNlcnZpY2VUeXBlc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VydmljZVR5cGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKHNlcnZpY2VUYWJsZSk7Ci0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgQ2xpZW50VHlwZUNvbnRlbnRQcm92aWRlcigpKTsKLSAgICBzZXJ2aWNlVHlwZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgQ2xpZW50VHlwZUxhYmVsUHJvdmlkZXIoKSk7Ci0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnNldElucHV0KHNlcnZpY2VUeXBlc18pOwotCi0gICAgVGFibGVMYXlvdXQgc2VydmljZVRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0gICAgVGFibGVDb2x1bW4gc2VydmljZVRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHNlcnZpY2VUYWJsZSwgU1dULk5PTkUpOwotICAgIHNlcnZpY2VUYWJsZUNvbHVtbi5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1RZUEVfTkFNRSk7Ci0gICAgQ29sdW1uV2VpZ2h0RGF0YSBzZXJ2aWNlQ29sdW1uRGF0YSA9IG5ldyBDb2x1bW5XZWlnaHREYXRhKDI1NiwgMjU2LCBmYWxzZSk7Ci0gICAgc2VydmljZVRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoc2VydmljZUNvbHVtbkRhdGEpOwotICAgIHNlcnZpY2VUYWJsZS5zZXRMYXlvdXQoc2VydmljZVRhYmxlTGF5b3V0KTsKLSAgICAKLSAgICBDb21wb3NpdGUgc2VydmljZWMgPSBuZXcgQ29tcG9zaXRlKHNlcnZpY2VUeXBlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgc2VydmljZWdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBzZXJ2aWNlZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgLy9zZXJ2aWNlZ2wubWFyZ2luSGVpZ2h0ID0gMTA7Ci0gICAgc2VydmljZWdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBzZXJ2aWNlYy5zZXRMYXlvdXQoc2VydmljZWdsKTsKLSAgICBzZXJ2aWNlYy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQotICAgIHNlcnZpY2VNb3ZlVXBfID0gbmV3IEJ1dHRvbihzZXJ2aWNlYywgU1dULlBVU0gpOwotICAgIHNlcnZpY2VNb3ZlVXBfLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfVVApOwotICAgIHNlcnZpY2VNb3ZlVXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIHNlcnZpY2VNb3ZlVXBfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHNlcnZpY2VNb3ZlVXBfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfVVApOwotCi0gICAgc2VydmljZU1vdmVEb3duXyA9IG5ldyBCdXR0b24oc2VydmljZWMsIFNXVC5QVVNIKTsKLSAgICBzZXJ2aWNlTW92ZURvd25fLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfRE9XTik7Ci0gICAgc2VydmljZU1vdmVEb3duXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBzZXJ2aWNlTW92ZURvd25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHNlcnZpY2VNb3ZlRG93bl8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9ET1dOKTsKLQotICAgIHNlcnZpY2VUYWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihzZXJ2aWNlTW92ZVVwXywgc2VydmljZU1vdmVEb3duXywgc2VydmljZVRhYmxlKSk7Ci0KLSAgICBHcm91cCBjbGllbnRUeXBlQ29tcG9zaXRlID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgLy9nbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIC8vZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBjbGllbnRUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRSk7Ci0KLSAgICBUYWJsZSBjbGllbnRUYWJsZT0gbmV3IFRhYmxlKGNsaWVudFR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgY2xpZW50VGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgY2xpZW50VGFibGUuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIGNsaWVudFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBjbGllbnRUeXBlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcihjbGllbnRUYWJsZSk7Ci0gICAgY2xpZW50VHlwZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBDbGllbnRUeXBlQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IENsaWVudFR5cGVMYWJlbFByb3ZpZGVyKCkpOwotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnNldElucHV0KGNsaWVudFR5cGVzXyk7Ci0KLSAgICBUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotICAgIFRhYmxlQ29sdW1uIHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGNsaWVudFRhYmxlLCBTV1QuTk9ORSk7Ci0gICAgdGFibGVDb2x1bW4uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRSk7Ci0gICAgQ29sdW1uV2VpZ2h0RGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEoMjU2LCAyNTYsIGZhbHNlKTsKLSAgICB0YWJsZUxheW91dC5hZGRDb2x1bW5EYXRhKGNvbHVtbkRhdGEpOwotICAgIGNsaWVudFRhYmxlLnNldExheW91dCh0YWJsZUxheW91dCk7Ci0KLSAgICBDb21wb3NpdGUgYyA9IG5ldyBDb21wb3NpdGUoY2xpZW50VHlwZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICAvL2dsLm1hcmdpbkhlaWdodCA9IDEwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBjLnNldExheW91dChnbCk7Ci0gICAgYy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQotICAgIG1vdmVVcF8gPSBuZXcgQnV0dG9uKGMsIFNXVC5QVVNIKTsKLSAgICBtb3ZlVXBfLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfVVBfMik7Ci0gICAgbW92ZVVwXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlVXBfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIG1vdmVVcF8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9VUCk7Ci0KLSAgICBtb3ZlRG93bl8gPSBuZXcgQnV0dG9uKGMsIFNXVC5QVVNIKTsKLSAgICBtb3ZlRG93bl8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9ET1dOXzIpOwotICAgIG1vdmVEb3duXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlRG93bl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZURvd25fLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfRE9XTik7Ci0KLSAgICBjbGllbnRUYWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihtb3ZlVXBfLCBtb3ZlRG93bl8sIGNsaWVudFRhYmxlKSk7Ci0KLSAgICB0d29FQVJfID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5DSEVDSyB8IFNXVC5XUkFQICk7Ci0gICAgdHdvRUFSXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9FTkFCTEVfVFdPX0VBUlMpOwotICAgIHR3b0VBUl8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfRU5BQkxFX1RXT19FQVJTKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLSAgewotICAgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotICAgIGluaXRpYWxpemVEZWZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0gIHsKLSAgICBzdG9yZVZhbHVlcygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHBlcmZvcm1PaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgeyB9Ci0KLSAgCi0gIC8qKgotICAgKiBBZGRzIHRoZSBTdHJpbmcgZWxlbWVudHMgb2YgYXJyYXkgYSBpbnRvIFZlY3RvciB2LiBJZiBTdHJpbmcgYXJyYXkgYiBjb250YWlucyBhbnkgZWxlbWVudHMKLSAgICogdGhhdCBhcmUgbm90IGFscmVhZHkgaW4gYXJyYXkgYSwgYXBwZW5kcyB0aGVzZSBlbGVtZW50cyBmcm9tIGFycmF5IGIgdG8gdGhlIGVuZCBvZiBWZWN0b3Igdi4gCi0gICAqIEBwYXJhbSBhIGEgU3RyaW5nIGFycmF5Ci0gICAqIEBwYXJhbSBiIGEgU3RyaW5nIGFycmF5Ci0gICAqIEBwYXJhbSB2IGEgbm9uLW51bGwgVmVjdG9yCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKFN0cmluZ1tdIGEsIFN0cmluZ1tdIGIsIFZlY3RvciB2KQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFbaV0pOwotICAgIH0KLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHYuaW5kZXhPZihiW2ldKSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdi5hZGQoYltpXSk7Ci0gICAgICB9Ci0gICAgfSAgIAotICB9Ci0gIAotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB0byB0aGVpciBidXJuZWQtaW4gZGVmYXVsdHMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIHNlcnZpY2VUeXBlc18uY2xlYXIoKTsKLSAgICBTdHJpbmdbXSBkZWZhdWx0U2VydmljZVR5cGVzID0gY29udGV4dC5nZXREZWZhdWx0U2VydmljZVR5cGVzKCk7Ci0gICAgU3RyaW5nW10gYWxsU2VydmljZVR5cGVzID0gUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKGRlZmF1bHRTZXJ2aWNlVHlwZXMsIGFsbFNlcnZpY2VUeXBlcywgc2VydmljZVR5cGVzXyk7ICAgIAotICAgIHNlcnZpY2VUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgCi0gICAgY2xpZW50VHlwZXNfLmNsZWFyKCk7Ci0gICAgU3RyaW5nW10gZGVmYXVsdENsaWVudFR5cGVzID0gY29udGV4dC5nZXREZWZhdWx0Q2xpZW50VHlwZXMoKTsKLSAgICBTdHJpbmdbXSBhbGxDbGllbnRUeXBlcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldENsaWVudFR5cGVzKCk7Ci0gICAgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKGRlZmF1bHRDbGllbnRUeXBlcywgYWxsQ2xpZW50VHlwZXMsIGNsaWVudFR5cGVzXyk7ICAgICAgICAgCi0gICAgY2xpZW50VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgIAotICAgIHR3b0VBUl8uc2V0U2VsZWN0aW9uKHRydWUpOwotICB9Ci0gIAotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIGhlbHBlci4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIC8vSW5pdGlhbCBzZXJ2aWNlIHByb2plY3QgdHlwZXMuCi0gICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gc2VydmljZVR5cGVzRnJvbUNvbnRleHQgPSBjb250ZXh0LmdldFNlcnZpY2VUeXBlcygpOwotICAgIFN0cmluZ1tdIGFsbFNlcnZpY2VUeXBlcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldFNlcnZpY2VUeXBlcygpOwotICAgIHNldFZlY3RvckNvbnRlbnRzRnJvbVR3b0FycmF5cyhzZXJ2aWNlVHlwZXNGcm9tQ29udGV4dCwgYWxsU2VydmljZVR5cGVzLCBzZXJ2aWNlVHlwZXNfKTsKLSAgICBpZiAoYWxsU2VydmljZVR5cGVzLmxlbmd0aCA+IHNlcnZpY2VUeXBlc0Zyb21Db250ZXh0Lmxlbmd0aCkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSBzZXJ2aWNlVHlwZXNBcnJheSA9IG5ldyBTdHJpbmdbc2VydmljZVR5cGVzXy5zaXplKCldOwotICAgICAgc2VydmljZVR5cGVzXy5jb3B5SW50byhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgICBjb250ZXh0LnNldFNlcnZpY2VUeXBlcyhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgfQotICAgIC8vIHJlZnJlc2ggdmlld2VyCi0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaW4gdGhpcyB0YWJsZQotICAgIGlmIChzZXJ2aWNlVHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRJdGVtQ291bnQoKSA+IDApewotICAgIAlzZXJ2aWNlVHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5zZXRTZWxlY3Rpb24oMCk7Ci0gICAgCXNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0gICAgfQotCi0gICAgLy9Jbml0aWFsaXplIGNsaWVudCBwcm9qZWN0IHR5cGVzLgotICAgIFN0cmluZ1tdIGNsaWVudFR5cGVzRnJvbUNvbnRleHQgPSBjb250ZXh0LmdldENsaWVudFR5cGVzKCk7Ci0gICAgU3RyaW5nW10gYWxsQ2xpZW50VHlwZXMgPSBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5nZXRDbGllbnRUeXBlcygpOwotICAgIHNldFZlY3RvckNvbnRlbnRzRnJvbVR3b0FycmF5cyhjbGllbnRUeXBlc0Zyb21Db250ZXh0LCBhbGxDbGllbnRUeXBlcywgY2xpZW50VHlwZXNfKTsKLSAgICBpZiAoYWxsQ2xpZW50VHlwZXMubGVuZ3RoID4gY2xpZW50VHlwZXNGcm9tQ29udGV4dC5sZW5ndGgpCi0gICAgewotICAgICAgU3RyaW5nW10gY2xpZW50VHlwZXNBcnJheSA9IG5ldyBTdHJpbmdbY2xpZW50VHlwZXNfLnNpemUoKV07Ci0gICAgICBjbGllbnRUeXBlc18uY29weUludG8oY2xpZW50VHlwZXNBcnJheSk7Ci0gICAgICBjb250ZXh0LnNldENsaWVudFR5cGVzKGNsaWVudFR5cGVzQXJyYXkpOwotICAgIH0KLSAgICAKLSAgICAvLyByZWZyZXNoIHZpZXdlcgotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaW4gdGhpcyB0YWJsZQotICAgIFRhYmxlIHRhYmxlID0gY2xpZW50VHlwZVZpZXdlcl8uZ2V0VGFibGUoKTsKLQlpZiAodGFibGUuZ2V0SXRlbUNvdW50KCkgPiAwKXsKLSAgICAJdGFibGUuc2V0U2VsZWN0aW9uKDApOwotICAgIAl0YWJsZS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotICAgIH0KLSAgICAKLSAgICB0d29FQVJfLnNldFNlbGVjdGlvbihjb250ZXh0LmlzVXNlVHdvRUFScygpKTsKLSAgIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2UgaGVscGVyLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VUeXBlc0FycmF5ID0gbmV3IFN0cmluZ1tzZXJ2aWNlVHlwZXNfLnNpemUoKV07Ci0gICAgc2VydmljZVR5cGVzXy5jb3B5SW50byhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgY29udGV4dC5zZXRTZXJ2aWNlVHlwZXMoc2VydmljZVR5cGVzQXJyYXkpOyAgICAKLSAgICBTdHJpbmdbXSB0eXBlcyA9IG5ldyBTdHJpbmdbY2xpZW50VHlwZXNfLnNpemUoKV07Ci0gICAgY2xpZW50VHlwZXNfLmNvcHlJbnRvKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldENsaWVudFR5cGVzKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldFVzZVR3b0VBUnModHdvRUFSXy5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICAgIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZVVwXyB8fCBlLndpZGdldCA9PSBzZXJ2aWNlTW92ZURvd25fKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IHNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZVVwXyAmJiBpbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gc2VydmljZVR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIHNlcnZpY2VUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXgtMSk7Ci0gICAgICAgICAgc2VydmljZVR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZURvd25fICYmIGluZGV4IDwgc2VydmljZVR5cGVzXy5zaXplKCktMSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBzZXJ2aWNlVHlwZXNfLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgc2VydmljZVR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCsxKTsKLSAgICAgICAgICBzZXJ2aWNlVHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgICAgIHNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gfHwgZS53aWRnZXQgPT0gbW92ZURvd25fKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IGNsaWVudFR5cGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gJiYgaW5kZXggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGNsaWVudFR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIGNsaWVudFR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCAtIDEpOwotICAgICAgICAgIGNsaWVudFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLndpZGdldCA9PSBtb3ZlRG93bl8gJiYgaW5kZXggPCBjbGllbnRUeXBlc18uc2l6ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBjbGllbnRUeXBlc18ucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBjbGllbnRUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXggKyAxKTsKLSAgICAgICAgICBjbGllbnRUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xpZW50VHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50VHlwZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgdmFsdWUpIAotICAgIHsKLSAgICAgIHJldHVybiAoKFZlY3Rvcil2YWx1ZSkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChWaWV3ZXIsIE9iamVjdCwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgYXJnMCwgT2JqZWN0IGFyZzEsIE9iamVjdCBhcmcyKSAKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDbGllbnRUeXBlTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBDbGllbnRUeXBlTGFiZWxQcm92aWRlcigpCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKE9iamVjdCkKLSAgICAqLwotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgYXJnMCkgCi0gICAgeyAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IHZhbHVlKSAKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKCAoU3RyaW5nKXZhbHVlICk7Ci0gICAgICAKLSAgICAgIHJldHVybiB0ZW1wbGF0ZS5nZXRMYWJlbCgpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIGNsYXNzIFRhYmxlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHJpdmF0ZSBCdXR0b24gZG93bjsKLSAgICBwcml2YXRlIEJ1dHRvbiB1cDsKLSAgICBwcml2YXRlIFRhYmxlICB0YWJsZTsKLQotICAgIHB1YmxpYyBUYWJsZVNlbGVjdGlvbkxpc3RlbmVyKEJ1dHRvbiB1cCwgQnV0dG9uIGRvd24sIFRhYmxlIG93bmVyVGFibGUpCi0gICAgewotICAgICAgdGhpcy51cCA9IHVwOwotICAgICAgdGhpcy5kb3duID0gZG93bjsKLSAgICAgIHRoaXMudGFibGUgPSBvd25lclRhYmxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgaW50IGkgPSB0YWJsZS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgaWYgKGkgPT0gdGFibGUuZ2V0SXRlbUNvdW50KCkgLSAxKSBkb3duLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWxzZSBpZiAoaSA+IC0xKSBkb3duLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICBpZiAoaSA9PSAwKSB1cC5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIGVsc2UgaWYgKGkgPiAtMSkgdXAuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1NlcnZlclJ1bnRpbWVQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGFiZTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4CSAgMTUxNzIzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMDkgICAxMzA5NjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDI4ICAgMjI0NzI2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwNTEyICAgMTgwMTM1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdENob2ljZXM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotCi0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFNlcnZlclJ1bnRpbWVQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBMaXN0ZW5lciAKLXsKLQlwcml2YXRlIFN0cmluZyBwbHVnaW5JZF89ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotCQotCS8qIENPTlRFWFRfSUQgU1JQRjAwMDEgZm9yIHNlcnZlciBwcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIgcnVudGltZSBwcmVmZXJlbmNlIHBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYgPSAiU1JQRjAwMDEiOwotCXByaXZhdGUgQ29tYm8gc2VydmVyXzsKLQotCS8qIENPTlRFWFRfSUQgU1JQRjAwMDIgZm9yIHJ1bnRpbWUgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiA9ICJTUlBGMDAwMiI7Ci0JcHJpdmF0ZSBDb21ibyBydW50aW1lXzsJCi0KLQkvKiBDT05URVhUX0lEIFNSUEYwMDAzIGZvciBKMkVFIHZlcnNpb24gcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0gICAgLyoKLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfSjJFRV9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMyI7Ci0JcHJpdmF0ZSBDb21ibyBqMmVlVmVyc2lvbl87Ci0gICAgKi8KLQkKLQlTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotCQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9CQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIAotCXsKLQkgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0JICAKLQkgIENvbXBvc2l0ZSBwYWdlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCSAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0JICBwYWdlLnNldExheW91dChnbCk7Ci0JICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkgIHBhZ2Uuc2V0TGF5b3V0RGF0YShnZCk7Ci0JICAKLQkgIHNlcnZlcl8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhZ2UsQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwKLQkJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1JQRl9DT01CT19TRVJWRVIsCi0JCQkJCQkJCQlJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYsCi0JCQkJCQkJCQlTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0JICAKLQkgIHJ1bnRpbWVfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYWdlLENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SVU5USU1FU19MSVNULAotCQkJICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9TUlBGX0NPTUJPX1JVTlRJTUUsCi0JCQkJCQkJCQkgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiwKLQkJCQkJCQkJCSBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0KLS8qCi0JICBqMmVlVmVyc2lvbl8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhZ2UsQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0oyRUVfVkVSU0lPTiwKLQkJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1JQRl9DT01CT19KMkVFLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1NSUEZfSjJFRV9QUkVGLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7CSAgCi0qLwotCi0JICBpbml0aWFsaXplVmFsdWVzKCk7Ci0JICBzdGFydExpc3RlbmluZygpOwotCSAgYXBwbHlEaWFsb2dGb250KHBhZ2UpOwotCSAgcmV0dXJuIHBhZ2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotCXsKLQkJUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICAgIHNlcnZlclRvUnVudGltZVRvSjJFRV8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJUb1J1bnRpbWVUb0oyRUUoKTsKLQotCi0JCXNldFNlcnZlckl0ZW1zKHNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0TGlzdCgpLmdldExpc3QoKSk7Ci0JCVN0cmluZyBkZWZhdWx0U2VydmVyVGV4dCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCXNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0TGlzdCgpLnNldFNlbGVjdGlvblZhbHVlKGRlZmF1bHRTZXJ2ZXJUZXh0KTsKLQkJc2V0U2VydmVyU2VsZWN0aW9uKGRlZmF1bHRTZXJ2ZXJUZXh0KTsKLQkJCi0JCXNldFJ1bnRpbWVJdGVtcyhzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRMaXN0KCkpOwotCQlTdHJpbmcgZGVmYXVsdFJ1bnRpbWVUZXh0ID0gY29udGV4dC5nZXRSdW50aW1lSWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFJ1bnRpbWVUZXh0KTsKLQkJc2V0UnVudGltZVNlbGVjdGlvbihkZWZhdWx0UnVudGltZVRleHQpOwkJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChzZXJ2ZXJfID09IGV2ZW50LndpZGdldCkKLQkJewotCQkJaGFuZGxlU2VydmVyU2VsZWN0ZWQoKTsKLQkJfQotCQllbHNlIGlmIChydW50aW1lXyA9PSBldmVudC53aWRnZXQpCi0JCXsKLQkJCWhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZVNlcnZlclNlbGVjdGVkKCkKLQl7Ci0JCXN0b3BMaXN0ZW5pbmcoKTsKLQkJCi0JCVN0cmluZyBzZWxlY3RlZFRleHQgPSBnZXRTZXJ2ZXJTZWxlY3Rpb24oKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoc2VsZWN0ZWRUZXh0KTsKLQkJCi0JCS8vIFRPRE8gKHNlZSBidWcgMTE2MDI1KSAtIFNpbmNlIHRoZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgc2V0IGluIHNlcnZlclRvUnVudGltZVRvSjJFRSBpcyBqdXN0IHRoZSBsaXN0IG9mIAotCQkvLyBhbGwgc2VydmVycyBhbmQgYWxsIHJ1bnRpbWUgKGkuZS4gbm8gdmFsaWRhdGlvbiBjaGVja2luZyBpcyBiZWluZyBkb25lKSwgbm8gbmVlZCB0byB1cGRhdGUgdGhlIHJ1bnRpbWUsCi0JCS8vIGp1c3Qga2VlcCB0aGUgb3JpZ2luYWwgdmFsdWUuCi0JCS8vVXBkYXRlIHRoZSBydW50aW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCQlzZXRSdW50aW1lSXRlbXMoc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0TGlzdCgpKTsKLS8vCQlpZiAoc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0TGlzdCgpLmxlbmd0aCA+IDApCi0vLwkJICBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5zZXRJbmRleCgwKTsKLS8vCQkKLS8vCQlTdHJpbmcgbmV3UnVudGltZVRleHQgPSBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRTZWxlY3Rpb24oKTsKLS8vCQlpZiAobmV3UnVudGltZVRleHQhPW51bGwgJiYgbmV3UnVudGltZVRleHQubGVuZ3RoKCk+MCkKLS8vCQkJc2V0UnVudGltZVNlbGVjdGlvbihuZXdSdW50aW1lVGV4dCk7CQkKLQkJCi0JCXN0YXJ0TGlzdGVuaW5nKCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBoYW5kbGVSdW50aW1lU2VsZWN0ZWQoKQotCXsKLQkJc3RvcExpc3RlbmluZygpOwotCQkKLQkJU3RyaW5nIHNlbGVjdGVkVGV4dCA9IGdldFJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoc2VsZWN0ZWRUZXh0KTsJCQkJCQkKLQkJc3RhcnRMaXN0ZW5pbmcoKTsJCQotCX0KLQkKLQotICAgIC8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotCXsKLQkgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCSAgc2V0VG9EZWZhdWx0cygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VG9EZWZhdWx0cygpCi0JewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQotCQlTdHJpbmcgZGVmYXVsdFNlcnZlclRleHQgPSBjb250ZXh0LmdldERlZmF1bHRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFNlcnZlclRleHQpOwotCQlzZXRTZXJ2ZXJTZWxlY3Rpb24oZGVmYXVsdFNlcnZlclRleHQpOwotCQkKLQkJc2V0UnVudGltZUl0ZW1zKHNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldExpc3QoKSk7Ci0JCVN0cmluZyBkZWZhdWx0UnVudGltZVRleHQgPSBjb250ZXh0LmdldERlZmF1bHRSdW50aW1lSWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFJ1bnRpbWVUZXh0KTsKLQkJc2V0UnVudGltZVNlbGVjdGlvbihkZWZhdWx0UnVudGltZVRleHQpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0JewotCSAgc3RvcmVWYWx1ZXMoKTsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0JewotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBjb250ZXh0LnNldFNlcnZlckZhY3RvcnlJZChnZXRTZXJ2ZXJTZWxlY3Rpb24oKSk7Ci0gICAgICBjb250ZXh0LnNldFJ1bnRpbWVJZChnZXRSdW50aW1lU2VsZWN0aW9uKCkpOyAgICAgIAotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotCXsKLQkgIHBlcmZvcm1PaygpOwotCX0KLQkKLSAgCQotCXByaXZhdGUgdm9pZCBzdGFydExpc3RlbmluZygpCi0JewotCSAgc2VydmVyXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLHRoaXMpOwotCSAgcnVudGltZV8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbix0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcExpc3RlbmluZygpCi0JewotCSAgc2VydmVyXy5yZW1vdmVMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLQkgIHJ1bnRpbWVfLnJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRTZXJ2ZXJJdGVtcyhTdHJpbmdbXSBmYWN0b3J5SWRzKQotCXsKLQkgIAotCSAgaWYgKGZhY3RvcnlJZHMgIT0gbnVsbCkKLQkgIHsKLQkgICAgQXJyYXlMaXN0IHNlcnZlckxhYmVsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCSAgZm9yIChpbnQgaT0wO2k8ZmFjdG9yeUlkcy5sZW5ndGg7aSsrKQotCQkgIHsKLQkJCSAgLy9TdHJpbmcgdGhpc1NlcnZlckxhYmVsID0gV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJMYWJlbChmYWN0b3J5SWRzW2ldKTsKLSAgICAgICAgU3RyaW5nIHRoaXNTZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChmYWN0b3J5SWRzW2ldKTsKLQkJCSAgaWYgKHRoaXNTZXJ2ZXJMYWJlbCE9bnVsbCAmJiB0aGlzU2VydmVyTGFiZWwubGVuZ3RoKCk+MCkKLQkJCSAgewotCQkJICAgIHNlcnZlckxhYmVsc0xpc3QuYWRkKHRoaXNTZXJ2ZXJMYWJlbCk7Ci0JCQkgIH0KLQkJCQotCQkgIH0KLQkJICBTdHJpbmdbXSBzZXJ2ZXJMYWJlbHMgPSBjb252ZXJ0VG9TdHJpbmdBcnJheShzZXJ2ZXJMYWJlbHNMaXN0LnRvQXJyYXkoKSk7Ci0JCSAgQ29sbGF0b3IgY29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOwotCQkgIEFycmF5cy5zb3J0KHNlcnZlckxhYmVscywgY29sbGF0b3IpOwotCQkgIHNlcnZlcl8uc2V0SXRlbXMoc2VydmVyTGFiZWxzKTsKLQkgIH0KLQkJCi0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRSdW50aW1lSXRlbXMoU3RyaW5nW10gaWRzKQotCXsKLQkgIGlmIChpZHMgIT0gbnVsbCkKLQkgIHsKLQkJU3RyaW5nW10gcnVudGltZUxhYmVscyA9IG5ldyBTdHJpbmdbaWRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGk9MDtpPGlkcy5sZW5ndGg7aSsrKQotCQl7Ci0JCSAgLy9ydW50aW1lTGFiZWxzW2ldID0gV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRSdW50aW1lTGFiZWwoaWRzW2ldKTsKLSAgICAgIHJ1bnRpbWVMYWJlbHNbaV0gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc1tpXSk7Ci0JCX0KLQotCQkvL3NvcnQgdGhlIGxhYmVscyAoYnVnIDE1MTcyMykKLQkJQ29sbGF0b3IgY29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOwotCQlBcnJheXMuc29ydChydW50aW1lTGFiZWxzLCBjb2xsYXRvcik7Ci0JCXJ1bnRpbWVfLnNldEl0ZW1zKHJ1bnRpbWVMYWJlbHMpOwotCSAgfQotCQkKLQl9Ci0JCi0gICAgLyoKLSAgICBwcml2YXRlIHZvaWQgc2V0SjJFRUl0ZW1zKFN0cmluZ1tdIHZlcnNpb25zKQotICAgIHsKLSAgICAgIGlmICh2ZXJzaW9ucyAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSBqMmVlTGFiZWxzID0gbmV3IFN0cmluZ1t2ZXJzaW9ucy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcnNpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGxhYmVsID0gSjJFRVV0aWxzLmdldExhYmVsRnJvbUoyRUVWZXJzaW9uKHZlcnNpb25zW2ldKTsKLSAgICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCAmJiBsYWJlbC5sZW5ndGgoKT4wKQotICAgICAgICAgICAgajJlZUxhYmVsc1tpXSA9IGxhYmVsOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGoyZWVMYWJlbHNbaV0gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfTkE7Ci0gICAgICAgIH0KLSAgICAgICAgajJlZVZlcnNpb25fLnNldEl0ZW1zKGoyZWVMYWJlbHMpOwotICAgICAgICAKLSAgICAgICAgLy9EaXNhYmxlIHRoZSBjb21ibyBpZiBpdCBoYXMgbm8gaXRlbXMuCi0gICAgICAgIGlmIChqMmVlTGFiZWxzLmxlbmd0aCA+IDApCi0gICAgICAgICAgajJlZVZlcnNpb25fLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBqMmVlVmVyc2lvbl8uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICB9Ci0gICAgICAgIAotICAgIH0KLSAgICAqLwotCQotCXByaXZhdGUgU3RyaW5nIGdldFNlcnZlclNlbGVjdGlvbigpCi0JewotCSAgU3RyaW5nIHNlcnZlckxhYmVsID0gc2VydmVyXy5nZXRUZXh0KCk7Ci0JICAvL3JldHVybiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJMYWJlbCk7Ci0gICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJMYWJlbCk7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldFJ1bnRpbWVTZWxlY3Rpb24oKQotCXsKLSAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBydW50aW1lXy5nZXRUZXh0KCk7Ci0JICAvL3JldHVybiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJ1bnRpbWVJZChydW50aW1lTGFiZWwpOwotICAgICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVJZChydW50aW1lTGFiZWwpOwotCX0KLQkKLSAgICAvKgotCXByaXZhdGUgU3RyaW5nIGdldEoyRUVTZWxlY3Rpb24oKQotCXsKLQkgIFN0cmluZyBqMmVlTGFiZWwgPSBqMmVlVmVyc2lvbl8uZ2V0VGV4dCgpOwotCSAgcmV0dXJuIEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbkZyb21MYWJlbChqMmVlTGFiZWwpOwkJCi0JfQotICAgICovCi0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlcnZlclNlbGVjdGlvbihTdHJpbmcgZmFjdG9yeUlkKQotCXsKLQkJLy9TdHJpbmcgbGFiZWwgPSBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlckxhYmVsKGZhY3RvcnlJZCk7Ci0gICAgU3RyaW5nIGxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKGZhY3RvcnlJZCk7Ci0JCXNldFNlbGVjdGlvbihzZXJ2ZXJfLGxhYmVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFJ1bnRpbWVTZWxlY3Rpb24oU3RyaW5nIGlkKQotCXsKLQkJLy9TdHJpbmcgbGFiZWwgPSBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJ1bnRpbWVMYWJlbChpZCk7Ci0gICAgU3RyaW5nIGxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChpZCk7Ci0JCXNldFNlbGVjdGlvbihydW50aW1lXyxsYWJlbCk7CQkKLQl9Ci0JCi0gICAgLyoKLQlwcml2YXRlIHZvaWQgc2V0SjJFRVNlbGVjdGlvbihTdHJpbmcgdmVyc2lvbikKLQl7Ci0JICBTdHJpbmcgbGFiZWwgPSBKMkVFVXRpbHMuZ2V0TGFiZWxGcm9tSjJFRVZlcnNpb24odmVyc2lvbik7Ci0gICAgICBzZXRTZWxlY3Rpb24oajJlZVZlcnNpb25fLCBsYWJlbCk7Ci0JfQotICAgICovCi0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbihDb21ibyBjb21ibywgU3RyaW5nIHMpCi0JewotCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKGl0ZW1zW2ldLmVxdWFscyhzKSkKLQkJCXsKLQkJCQljb21iby5zZWxlY3QoaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nW10gY29udmVydFRvU3RyaW5nQXJyYXkoT2JqZWN0W10gYSkKLQl7Ci0JICBpZiAoYT09bnVsbCkgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JICAJCi0JICBpbnQgbGVuZ3RoID0gYS5sZW5ndGg7Ci0JICBTdHJpbmdbXSBzYSA9IG5ldyBTdHJpbmdbbGVuZ3RoXTsKLQkgIGZvciAoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKLQkgIHsKLQkgIAlPYmplY3Qgb2JqID0gYVtpXTsKLQkgIAlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKQotCSAgCXsKLQkgICAgICBzYVtpXSA9IChTdHJpbmcpb2JqOwotCSAgCX0KLQkgIH0KLQkgIHJldHVybiBzYTsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9UcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1RyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwMjczMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1RyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNyAgIDEyNDM5MiByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotCi1wdWJsaWMgY2xhc3MgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCBpbXBsZW1lbnRzIFByb2plY3RUb3BvbG9neUNvbnRleHQKLXsKLSBwcml2YXRlIFN0cmluZ1tdIHNlcnZpY2VUeXBlczsKLSBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRTZXJ2aWNlVHlwZXM7Ci0gCi0gcHJpdmF0ZSBTdHJpbmdbXSBjbGllbnRUeXBlczsKLSBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRDbGllbnRUeXBlczsKLSAKLSBwcml2YXRlIGJvb2xlYW4gdHdvRUFSczsKLSAKLSBwdWJsaWMgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCAoKSB7fQotCi0gcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVzKFN0cmluZ1tdIHNlcnZpY2VUeXBlcykKLSB7Ci0gICB0aGlzLnNlcnZpY2VUeXBlcyA9IHNlcnZpY2VUeXBlczsKLSB9Ci0gcHVibGljIFN0cmluZ1tdIGdldFNlcnZpY2VUeXBlcygpCi0gewotICAgcmV0dXJuIHNlcnZpY2VUeXBlczsKLSB9Ci0gCi0gcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZXMoU3RyaW5nW10gY2xpZW50VHlwZXMpCi0gewotICAgdGhpcy5jbGllbnRUeXBlcyA9IGNsaWVudFR5cGVzOwotIH0KLSBwdWJsaWMgU3RyaW5nW10gZ2V0Q2xpZW50VHlwZXMoKQotIHsKLSAgIHJldHVybiBjbGllbnRUeXBlczsKLSB9Ci0KLSBwdWJsaWMgdm9pZCBzZXRVc2VUd29FQVJzKGJvb2xlYW4gdXNlKQotIHsKLSAgIHRoaXMudHdvRUFScyA9IHVzZTsKLSB9Ci0gcHVibGljIGJvb2xlYW4gaXNVc2VUd29FQVJzKCkKLSB7Ci0gICByZXR1cm4gdHdvRUFSczsKLSB9Ci0KLSBwdWJsaWMgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb3B5KCkgewotIAlUcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0U2VydmljZVR5cGVzKGdldFNlcnZpY2VUeXBlcygpKTsKLSAgICBjb250ZXh0LnNldERlZmF1bHRTZXJ2aWNlVHlwZXMoZ2V0RGVmYXVsdFNlcnZpY2VUeXBlcygpKTsKLQljb250ZXh0LnNldENsaWVudFR5cGVzKGdldENsaWVudFR5cGVzKCkpOwotICAgIGNvbnRleHQuc2V0RGVmYXVsdENsaWVudFR5cGVzKGdldERlZmF1bHRDbGllbnRUeXBlcygpKTsKLQljb250ZXh0LnNldFVzZVR3b0VBUnMoaXNVc2VUd29FQVJzKCkpOwotCXJldHVybiBjb250ZXh0OwotIH0KLQotIAotcHVibGljIHZvaWQgc2V0RGVmYXVsdFNlcnZpY2VUeXBlcyhTdHJpbmdbXSBkZWZhdWx0U2VydmljZVR5cGVzKQotewotICB0aGlzLmRlZmF1bHRTZXJ2aWNlVHlwZXMgPSBkZWZhdWx0U2VydmljZVR5cGVzOwotfQotCi1wdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdFNlcnZpY2VUeXBlcygpCi17Ci0gIHJldHVybiBkZWZhdWx0U2VydmljZVR5cGVzOwotCi19Ci0KLQotcHVibGljIHZvaWQgc2V0RGVmYXVsdENsaWVudFR5cGVzKFN0cmluZ1tdIGRlZmF1bHRDbGllbnRUeXBlcykKLXsKLSAgdGhpcy5kZWZhdWx0Q2xpZW50VHlwZXMgPSBkZWZhdWx0Q2xpZW50VHlwZXM7Ci19Ci0KLXB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0Q2xpZW50VHlwZXMoKQotewotICByZXR1cm4gZGVmYXVsdENsaWVudFR5cGVzOwotCi19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlbGVjdGlvbi9TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZWxlY3Rpb24vU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM5N2YyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlbGVjdGlvbi9TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIAotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIAotICB7Ci0JSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5TZWxlY3Rpb24gID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotCVNlbGVjdGlvbiAgICAgICAgICAgIG91dFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKLQkKLQlpZiAoaW5TZWxlY3Rpb24gIT0gbnVsbCkKLQl7Ci0JCW91dFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oIGluU2VsZWN0aW9uLnRvQXJyYXkoKSApOwkKLQl9Ci0JCi0JcmV0dXJuIG91dFNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTVhNzZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydENsaWVudFdpZGdldENvbnRyaWJ1dG9yIGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIHByaXZhdGUgSVNlcnZlciAgICAgIHNlcnZlcl87Ci0JICAKLSAgcHVibGljIFN0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IoIElTZXJ2ZXIgc2VydmVyICkKLSAgewotCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSAKLSAgewotCXJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIAotICB7Ci0JcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIAotICB7Ci0JcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgCi0gIHsKLQlyZXR1cm4gbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JICAgICAgIHsKLQkJCSBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgCi0JCQkgewotCQkJCXJldHVybiBuZXcgU3RhcnRTZXJ2ZXJXaWRnZXQoIHNlcnZlcl8gKTsKLSAJCQkgfQotCSAgICAgICB9OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlcnZlci9TdGFydENsaWVudFdpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjc3MjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDcyMiAgIDI0MDIzMSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZXJ2ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLlByZUNsaWVudERldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydENsaWVudFdpZGdldEZhY3RvcnkgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2Vic2VydmljZUNsaWVudF87Ci0gIHByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotICB7Ci0gICAgSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotICAgIAotICAgIGlmKCB3ZWJzZXJ2aWNlQ2xpZW50XyAhPSBudWxsICYmIHdlYnNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGwgICYmIGNvbnRleHRfLmdldFJ1bigpKQotICAgIHsKLSAgICAgIHNlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcih3ZWJzZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSApOwotICAgIH0KLSAgICAKLSAgICBpZiggc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclN0YXRlKCkgIT0gSVNlcnZlci5TVEFURV9TVEFSVEVEICkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IoIHNlcnZlciApOwotICAgIH0KLSAgICAKLQlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yKSAKLSAgewotCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFN0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5jbGFzcyApOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBTdGFydENsaWVudFdpZGdldEZhY3RvcnkuY2xhc3MgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2VDbGllbnQgd2Vic2VydmljZUNsaWVudCApCi0gIHsKLSAgICB3ZWJzZXJ2aWNlQ2xpZW50XyA9IHdlYnNlcnZpY2VDbGllbnQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoIElDb250ZXh0IGNvbnRleHQgKQotICB7Ci0gICAgY29udGV4dF8gPSBjb250ZXh0OyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTYyZmVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZXJ2ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYkNoYW5nZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLlByb2dyZXNzTW9uaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5TdGFydFNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlcldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciAKLXsKLSAgcHJpdmF0ZSBJU2VydmVyICAgICAgICAgICAgIHNlcnZlcl87Ci0gIHByaXZhdGUgSVN0YXR1cyAgICAgICAgICAgICAgc3RhdHVzXzsKLSAgcHJpdmF0ZSBMaXN0ZW5lciAgICAgICAgICAgIHN0YXR1c0xpc3RlbmVyXzsKLSAgcHJpdmF0ZSBCdXR0b24gICAgICAgICAgICAgIGJ1dHRvbl87Ci0gIHByaXZhdGUgSm9iQ2hhbmdlQWRhcHRlciAgICBqb2JDaGFuZ2VBZGFwdGVyXzsKLSAgcHJpdmF0ZSBUZXh0ICAgICAgICAgICAgICAgIHNlcnZlclN0YXRlVGV4dF87Ci0gIHByaXZhdGUgUHJvZ3Jlc3NNb25pdG9yUGFydCBwcm9ncmVzc01vbml0b3JfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgcGx1Z2luSWRfOwotICBwcml2YXRlIENvbXBvc2l0ZSAgICAgICAgICAgYnV0dG9uR3JvdXBfOwotICAgIAotICAvKkNPTlRFWFRfSUQgU1NXUDAwMDEgU3RhcnQgdGhlIHNlcnZlciBidXR0b24uICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfU1NXUF9TRVJWRVJfQlVUVE9OID0gIlNTV1AwMDAxIjsKLSAgCi0gIHB1YmxpYyBTdGFydFNlcnZlcldpZGdldCggSVNlcnZlciBzZXJ2ZXIgKQotICB7Ci0JcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0JCQotICAgIHNlcnZlcl8gPSBzZXJ2ZXI7Ci0gICAgCi0gICAgam9iQ2hhbmdlQWRhcHRlcl8gPSBuZXcgSm9iQ2hhbmdlQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvbmUoZmluYWwgSUpvYkNoYW5nZUV2ZW50IGV2ZW50KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJCSAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgCi0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkgICAgICAgIAkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLQkgICAgICAgIAkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXJ2ZXJTdGF0ZSgpOwkKLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzTW9uaXRvcl8uZG9uZSgpOwotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3JJZlJlcXVpcmVkKCAoU3RhcnRTZXJ2ZXJKb2IpZXZlbnQuZ2V0Sm9iKCkgKTsKLQkgICAgICAgIAkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJCSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikgCi0gIHsKLQlzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLQkKLQlVSVV0aWxzICAgICAgdWlVdGlscyAgICAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWRfICk7Ci0JQ29tcG9zaXRlICAgIGdyb3VwICAgICAgID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSApOwotCQotCVRleHQgICAgICAgICB0ZXh0MSAgICAgICAgPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGdyb3VwLCBudWxsLCBudWxsLCBudWxsLCBTV1QuUkVBRF9PTkxZICk7Ci0JdGV4dDEuc2V0VGV4dCggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NUQVJUX1NFUlZFUl9URVhUMSwgbmV3IFN0cmluZ1tdeyBzZXJ2ZXJfLmdldE5hbWUoKSB9ICkpOwotCQotCVRleHQgICAgICAgICB0ZXh0MiAgICAgICAgPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGdyb3VwLCBudWxsLCBudWxsLCBudWxsLCBTV1QuUkVBRF9PTkxZICk7Ci0JdGV4dDIuc2V0VGV4dCggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NUQVJUX1NFUlZFUl9URVhUMiwgbmV3IFN0cmluZ1tdeyBzZXJ2ZXJfLmdldE5hbWUoKSB9ICkpOwotCQotCVRleHQgICAgICAgICB0ZXh0MyAgICAgICAgPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGdyb3VwLCBudWxsLCBudWxsLCBudWxsLCBTV1QuUkVBRF9PTkxZICk7Ci0JdGV4dDMuc2V0VGV4dCggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NUQVJUX1NFUlZFUl9URVhUMywgbmV3IFN0cmluZ1tdeyBzZXJ2ZXJfLmdldE5hbWUoKSB9ICkpOwotCQotCVRleHQgICAgICAgICB0ZXh0NCAgICAgICAgPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGdyb3VwLCBudWxsLCBudWxsLCBudWxsLCBTV1QuUkVBRF9PTkxZICk7Ci0JdGV4dDQuc2V0VGV4dCggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NUQVJUX1NFUlZFUl9URVhUNCwgbmV3IFN0cmluZ1tdeyBzZXJ2ZXJfLmdldE5hbWUoKSB9ICkpOyAKLQkKLQlidXR0b25Hcm91cF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggZ3JvdXAsIDIsLTEsIDAgKTsKLQlzZXJ2ZXJTdGF0ZVRleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KCBidXR0b25Hcm91cF8sIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQlzZXJ2ZXJTdGF0ZVRleHRfLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSgpICk7Ci0JCQotCWJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGJ1dHRvbkdyb3VwXywgCi0JCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX0JVVFRPTiwKLQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1NUQVJUX1NFUlZFUl9CVVRUT04sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9TU1dQX1NFUlZFUl9CVVRUT04gKTsKLQkKLQlidXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCQkgICAgICAgICAgICAgICAgICAgICAgewotCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgCSAgIHNlcnZlclN0YXRlVGV4dF8uc2V0VGV4dCggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBVFVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSApOwotCQkJICAgICAgICAgICAgICAgICAgICAJICAgcHJvZ3Jlc3NNb25pdG9yXy5iZWdpblRhc2soIGdldFN0YXRlTWVzc2FnZSggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX01TRywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX1NUQVJUSU5HICksIElQcm9ncmVzc01vbml0b3IuVU5LTk9XTiApOwotCQkJICAgICAgICAgICAgICAgICAgICAJICAgYnV0dG9uXy5zZXRFbmFibGVkKCBmYWxzZSApOwotCQkJICAgICAgICAgICAgICAgICAgICAJICAgYnV0dG9uR3JvdXBfLnBhY2soKTsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2VydmVySm9iKCk7Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQkgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJICAgICAgICAgICAgICAgICAgICAgIH0gKTsJCi0JCi0JcHJvZ3Jlc3NNb25pdG9yXyA9IG5ldyBQcm9ncmVzc01vbml0b3JQYXJ0KCBncm91cCwgbmV3IEdyaWRMYXlvdXQoKSApOwotCXByb2dyZXNzTW9uaXRvcl8uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSk7Ci0JCi0Jc2V0U2VydmVyU3RhdGUoKTsKLQlyZXR1cm4gdGhpczsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIAotICB7Ci0JcmV0dXJuIHN0YXR1c187Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXRTZXJ2ZXJTdGF0ZSgpCi0gIHsKLQlpbnQgc3RhdGUgPSBzZXJ2ZXJfLmdldFNlcnZlclN0YXRlKCk7Ci0JCi0Jc3dpdGNoKCBzdGF0ZSApCi0JewotCSAgY2FzZSBJU2VydmVyLlNUQVRFX1NUQVJURUQ6Ci0JICB7Ci0JCXN0YXR1c18gPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlidXR0b25fLnNldEVuYWJsZWQoIGZhbHNlICk7Ci0JCXNlcnZlclN0YXRlVGV4dF8uc2V0VGV4dCggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBVFVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRFRCApICk7Ci0JCQotCSAgICBicmVhazsJICAKLQkgIH0KLQkgIAotCSAgY2FzZSBJU2VydmVyLlNUQVRFX1NUQVJUSU5HOgotCSAgewotCQlzdGF0dXNfID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoICIiICk7Ci0JCWJ1dHRvbl8uc2V0RW5hYmxlZCggZmFsc2UgKTsgIAotCQlzZXJ2ZXJTdGF0ZVRleHRfLnNldFRleHQoIGdldFN0YXRlTWVzc2FnZSggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX1NUQVRVUywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX1NUQVJUSU5HICkgKTsKLQkJcHJvZ3Jlc3NNb25pdG9yXy5iZWdpblRhc2soIGdldFN0YXRlTWVzc2FnZSggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX01TRywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX1NUQVJUSU5HICksIElQcm9ncmVzc01vbml0b3IuVU5LTk9XTiApOwotCQkKLQkJLy8gVGhlIHNlcnZlciBpcyBzdGlsbCBzdGFydGluZyBzbyB3ZSBuZWVkIHRvIHJlY29ubmVjdCB0byB0aGUgam9iCi0JCS8vIHRoYXQgaXMgc3RhcnRpbmcgaXQuCi0JCXN0YXJ0U2VydmVySm9iKCk7Ci0JICAgIGJyZWFrOwkgIAotCSAgfQotCSAgCi0JICBkZWZhdWx0OgotCSAgewotCQlzdGF0dXNfID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoICIiICk7Ci0gICAgICAgIGJ1dHRvbl8uc2V0RW5hYmxlZCggdHJ1ZSApOwotCQlzZXJ2ZXJTdGF0ZVRleHRfLnNldFRleHQoIGdldFN0YXRlTWVzc2FnZSggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX1NUQVRVUywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRFWFRfU0VSVkVSX1NUT1BQRUQgKSApOwotCQlicmVhazsgIAotCSAgfQotCX07Ci0JCi0Jc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KCBudWxsICk7Ci0JYnV0dG9uR3JvdXBfLnBhY2soKTsKLSAgfSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBnZXRTdGF0ZU1lc3NhZ2UoIFN0cmluZyBtYWluS2V5LCBTdHJpbmcgc3ViS2V5ICkKLSAgewotCXJldHVybiBOTFMuYmluZCggbWFpbktleSwgbmV3IFN0cmluZ1tdeyBzdWJLZXkgfSApOwotICB9Ci0gIAotICAvLyBDb25uZWN0IHRvIGFuIGV4aXN0aW5nIHNlcnZlciB0aHJlYWQgb3RoZXJ3aXNlIHN0YXJ0IGEgbmV3IG9uZS4KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0U2VydmVySm9iKCkKLSAgewotCUlKb2JNYW5hZ2VyICAgIGpvYk1hbmFnZXIgICAgID0gUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpOwotCUpvYltdICAgICAgICAgIGpvYnMgICAgICAgICAgID0gam9iTWFuYWdlci5maW5kKCBTdGFydFNlcnZlckZhbWlseSApOwotCVN0YXJ0U2VydmVySm9iIHN0YXJ0U2VydmVySm9iID0gbnVsbDsKLQkKLQkvLyBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBqb2Igc3RhcnRpbmcgZm9yIGRpZmZlcmVudCBzZXJ2ZXJzLgotCS8vIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBmaW5kIHRoZSBvbmUgZm9yIG91ciBzZXJ2ZXIgaWYgaXQgaXMgYXZhaWxhYmxlLgotCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBqb2JzLmxlbmd0aDsgaW5kZXgrKyApCi0JewotCSAgU3RhcnRTZXJ2ZXJKb2Igam9iRm91bmQgPSAoU3RhcnRTZXJ2ZXJKb2Ipam9ic1tpbmRleF07Ci0JICAKLQkgIGlmKCBqb2JGb3VuZC5nZXRTZXJ2ZXIoKSA9PSBzZXJ2ZXJfICkKLQkgIHsKLQkgICAgc3RhcnRTZXJ2ZXJKb2IgPSBqb2JGb3VuZDsKLQkgICAgYnJlYWs7Ci0JICB9Ci0JfQotCQotCWlmKCBzdGFydFNlcnZlckpvYiAhPSBudWxsICkKLQl7Ci0JICBzeW5jaHJvbml6ZWQoIFN0YXJ0U2VydmVyRmFtaWx5ICkgCi0JICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gc3RhcnRTZXJ2ZXJKb2IuZ2V0U3RhdHVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBhcmUgdXNpbmcgc3RhdHVzIHRvIGRldGVybWluZSBpZiB0aGUgam9iIGhhcyBjb21wbGV0ZWQgb3Igbm90LgotICAgICAgICAvLyBOb3JtYWxseSwgd2Ugd291bGQgbm90IGdldCBoZXJlIGlmIHRoZSBqb2IgaGFkIGFscmVhZHkgY29tcGxldGVkLAotICAgICAgICAvLyBidXQgdGhlcmUgaXMgYSBzbGltIHdpbmRvdyB3aGVyZSB0aGUgam9iIG1hbmFnZXIgZ2l2ZXMgdXMgdGhlIGpvYgotICAgICAgICAvLyBhbmQgdGhlbiBpdCBpbW1lZGlhdGVseSBjb21wbGV0ZXMuCi0gICAgICAgIGlmKCBzdGF0dXMgPT0gbnVsbCApCi0gICAgICAgIHsgICAgICAgIAotICAgICAgICAgIC8vIFRoZSBqb2IgaGFkIG5vdCBjb21wbGV0ZWQgeWV0IHNvIHdlIHdpbGwgYWRkIGEgam9iIGNoYW5nZSBsaXN0ZW5lci4KLSAgICAgICAgICAvLyBXZSBhcmUgYWRkaW5nIHRoZSBqb2IgbGlzdGVuZXIgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gYXNzdW1lCi0gICAgICAgICAgLy8gdGhhdCB0aGlzIGluc3RhbmNlIG9mIHRoaXMgd2lkZ2V0IGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBpbnN0YW5jZS4KLSAgICAgICAgICAvLyBJZiBzdGFydFNlcnZlckpvYiBhbHJlYWR5IGhhcyAiam9iQ2hhbmdlQWRhcHRlcl8iIGFkZGVkIHRvIGl0IHRoaXMKLSAgICAgICAgICAvLyBtZXRob2QgY2FsbCB3aWxsIG5vdCBoYXZlIGFuIGVmZmVjdC4oV2hpY2ggaXMgd2hhdCB3ZSB3YW50LikKLSAgICAgICAgICBzdGFydFNlcnZlckpvYi5hZGRKb2JDaGFuZ2VMaXN0ZW5lciggam9iQ2hhbmdlQWRhcHRlcl8gKTsgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gTm90ZTogdGhpcyBqb2Igd2FzIHJlcG9ydGluZyBwcm9ncmVzcyB0byBkaWZmZXJlbnQgcHJvZ3Jlc3NNb25pdG9yXwotICAgICAgICAgIC8vICAgICAgIGNvbnRyb2wuICBXZSBuZWVkIHRvIHRlbGwgdGhlIGpvYiB0aGF0IGl0IHNob3VsZCByZXBvcnQgcHJvZ3Jlc3MKLSAgICAgICAgICAvLyAgICAgICB0byBvdXIgbmV3IHByb2dyZXNzTW9uaXRvcl8gY29udHJvbCBvbiB0aGlzIHdpemFyZCBwYWdlLgotICAgICAgICAgIFByb2dyZXNzTW9uaXRvcldyYXBwZXIgbW9uaXRvciA9IChQcm9ncmVzc01vbml0b3JXcmFwcGVyKXN0YXJ0U2VydmVySm9iLmdldE1vbml0b3IoKTsKLSAgICAgICAgICBtb25pdG9yLnNldE1vbml0b3IoIHByb2dyZXNzTW9uaXRvcl8gKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgam9iIGNvbXBsZXRlZCBiZWZvcmUgd2UgaGFkIGEgY2hhbmNlIHRvIGFkZCB0aGUgam9iIGNoYW5nZSBsaXN0ZW5lcgotICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ugd2lsbCBqdXN0IGNhbGwgam9iQ2hhbmdlQWRhcHRlcl8gZGlyZWN0bHkgdG8gbm90aWZ5Ci0gICAgICAgICAgLy8gdGhlIFVJIHRoYXQgdGhlIGpvYiBoYXMgY29tcGxldGVkLgotICAgICAgICAgIGpvYkNoYW5nZUFkYXB0ZXJfLmRvbmUoIG51bGwgKTsKLSAgICAgICAgfQotCSAgfQotCX0KLQllbHNlCi0JewotCSAgc3RhcnRTZXJ2ZXJKb2IgPSBuZXcgU3RhcnRTZXJ2ZXJKb2IoKTsJCi0JICBzdGFydFNlcnZlckpvYi5hZGRKb2JDaGFuZ2VMaXN0ZW5lciggam9iQ2hhbmdlQWRhcHRlcl8gKTsKLQkgIHN0YXJ0U2VydmVySm9iLnNjaGVkdWxlKCk7Ci0JfQotICB9Ci0gICAgIAotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3JJZlJlcXVpcmVkKCBTdGFydFNlcnZlckpvYiBzZXJ2ZXJKb2IgKQotICB7Ci0JICBJU3RhdHVzIHN0YXR1cyA9IHNlcnZlckpvYi5nZXRTdGF0dXMoKTsKLQkKLQkgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotCSAgewotCSAgICBTaGVsbCAgICAgICAgICAgICAgICBzaGVsbCAgID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotICAgICAgRWNsaXBzZVN0YXR1c0hhbmRsZXIgaGFuZGxlciA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlciggc2hlbGwgKTsKLSAgICAgIAotICAgICAgaGFuZGxlci5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JICB9Ci0gIH0KLSAgCi0gIGZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyAgU3RhcnRTZXJ2ZXJGYW1pbHkgPSAiU3RhcnRTZXJ2ZXJGYW1pbHkiOwotICAKLSAgLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHN0YXJ0IHVwIHRoZSBzZXJ2ZXIgaW4gYW4gRWNsaXBzZSBqb2IuCi0gIHByaXZhdGUgY2xhc3MgU3RhcnRTZXJ2ZXJKb2IgZXh0ZW5kcyBKb2IKLSAgewotCSAgcHJpdmF0ZSBJU3RhdHVzICAgICAgICAgICAgICAgIHN0YXR1c18gPSBudWxsOwotCSAgcHJpdmF0ZSBQcm9ncmVzc01vbml0b3JXcmFwcGVyIGVudk1vbml0b3JfOwotCQotCSAgcHVibGljIFN0YXJ0U2VydmVySm9iKCkKLQkgIHsKLQkgICAgc3VwZXIoICJTdGFydFNlcnZlckpvYiIgKTsKLQkgIAotCSAgICBlbnZNb25pdG9yXyA9IG5ldyBQcm9ncmVzc01vbml0b3JXcmFwcGVyKCBwcm9ncmVzc01vbml0b3JfICk7Ci0JICB9Ci0JCi0JICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2ZXIoKQotCSAgewotCSAgICByZXR1cm4gc2VydmVyXzsJCi0JICB9Ci0JCi0JICBwdWJsaWMgUHJvZ3Jlc3NNb25pdG9yV3JhcHBlciBnZXRNb25pdG9yKCkKLQkgIHsKLQkgICAgcmV0dXJuIGVudk1vbml0b3JfOwkKLQkgIH0KLQkKLQkgIHB1YmxpYyBib29sZWFuIGJlbG9uZ3NUbyhPYmplY3QgZmFtaWx5KSAKLQkgIHsKLQkgICAgcmV0dXJuIGZhbWlseSA9PSBTdGFydFNlcnZlckZhbWlseTsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgCi0JICB7Ci0JICAgIEJhc2VTdGF0dXNIYW5kbGVyICAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgQmFzZVN0YXR1c0hhbmRsZXIoKTsKLQkgICAgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLQkgICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgIGVudmlyb25tZW50ICAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwscmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0JICAgIFN0YXJ0U2VydmVyQ29tbWFuZCAgICAgICBzZXJ2ZXJDb21tYW5kICAgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKCBmYWxzZSApOwotCSAgICAKLQkgICAgc2VydmVyQ29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKCBzZXJ2ZXJfLmdldElkKCkgKTsKLSAgICAgIHNlcnZlckNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JICAgIAotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHNldFN0YXR1cyggc2VydmVyQ29tbWFuZC5leGVjdXRlKCBlbnZNb25pdG9yXywgbnVsbCApICk7CQkKLQkgICAgfQotCSAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JICAgIHsKLQkJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgICBzZXRTdGF0dXMoIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBleGMgKSApOwotCSAgICB9Ci0JICAJCi0JICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCQotCSAgLy8gQ2FsbHMgdG8gdGhpcyBtZXRob2QgbmVlZCB0byBmaXJzdCBzeW5jaHJvbml6ZSBvbiB0aGUKLQkgIC8vIFN0YXJ0U2VydmVyRmFtaWx5IG9iamVjdC4KLQkgIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0JICB7Ci0JICAgIHJldHVybiBzdGF0dXNfOwotCSAgfQotCQotCSAgcHJpdmF0ZSB2b2lkIHNldFN0YXR1cyggSVN0YXR1cyBzdGF0dXMgKQotCSAgewotCSAgICBzeW5jaHJvbml6ZWQoIFN0YXJ0U2VydmVyRmFtaWx5ICkgCi0JICAgIHsKLSAgICAgICAgc3RhdHVzXyA9IHN0YXR1czsKLQkgICAgfQotCSAgfQotICB9Ci0gICAgCi0gIHByaXZhdGUgY2xhc3MgUHJvZ3Jlc3NNb25pdG9yV3JhcHBlciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IKLSAgewotICAgIHByaXZhdGUgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yXyA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0gIAkgIAkKLSAgICBwdWJsaWMgUHJvZ3Jlc3NNb25pdG9yV3JhcHBlciggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgICB7Ci0gICAgICBtb25pdG9yXyA9IG1vbml0b3I7ICAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0TW9uaXRvciggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgICB7Ci0gICAgICBtb25pdG9yXyA9IG1vbml0b3I7CQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBiZWdpblRhc2soZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIGludCB0b3RhbFdvcmspIAotICAgIHsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICBtb25pdG9yXy5iZWdpblRhc2soIG5hbWUsIHRvdGFsV29yayApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZG9uZSgpIAotICAgIHsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8uZG9uZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGZpbmFsIGRvdWJsZSB3b3JrKSAKLSAgICB7Ci0gICAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMoIG5ldyBSdW5uYWJsZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3JfLmludGVybmFsV29ya2VkKCB3b3JrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIAotICAgIHsKLSAgICAgIHJldHVybiBwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSA/IGZhbHNlIDogbW9uaXRvcl8uaXNDYW5jZWxlZCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIAotICAgIHsKLSAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotICAgICAgewotICAJICAgIG1vbml0b3JfLnNldENhbmNlbGVkKCB2YWx1ZSApOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKGZpbmFsIFN0cmluZyBuYW1lKSAKLSAgICB7Ci0gIAkgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8uc2V0VGFza05hbWUoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdWJUYXNrKCBmaW5hbCBTdHJpbmcgbmFtZSkgCi0gICAgewotICAJICBEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMoIG5ldyBSdW5uYWJsZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3JfLnN1YlRhc2soIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB3b3JrZWQoZmluYWwgaW50IHdvcmspIAotICAgIHsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8ud29ya2VkKCB3b3JrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQWJzdHJhY3RIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDbWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTJmNmFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBBYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZAotICoKLSAqIEluaXRpYWxpemUgYW5kIGxvYWQgdGhlIGhhbmRsZXJzIGRhdGEKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIAotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb25fOyAKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGluaXRpYWxTZWxlY3Rpb25fOwotICAgIGlmIChzZWxlY3Rpb24gPT0gbnVsbCkgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgfQotICAKLQotICBwdWJsaWMgTGlzdCBnZXRDbGllbnRIYW5kbGVycygpewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsZWN0aW9uKXsKLSAgICB0aGlzLmluaXRpYWxTZWxlY3Rpb25fID0gaW5pdFNlbGVjdGlvbjsKLSAgfQotICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldEluaXRpYWxTZWxlY3Rpb24oKXsKLSAgICByZXR1cm4gdGhpcy5pbml0aWFsU2VsZWN0aW9uXzsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElSZXNvdXJjZSBnZXRSZXNvdXJjZUZyb21Jbml0aWFsU2VsZWN0aW9uKCkKLSAgewotICAgIGlmIChpbml0aWFsU2VsZWN0aW9uXyAhPSBudWxsICYmIGluaXRpYWxTZWxlY3Rpb25fLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpbml0aWFsU2VsZWN0aW9uXy5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0gICAKLSAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKXsKLSAgICAKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUZyb21Jbml0aWFsU2VsZWN0aW9uKCk7Ci0JaWYgKHJlc291cmNlICE9IG51bGwpCi0JewotCSAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKCByZXNvdXJjZS5nZXRGdWxsUGF0aCgpICk7Ci0JfQotCSAKLQlyZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCl7Ci0gICAgSVJlc291cmNlIHJlc291cmNlID0gZ2V0UmVzb3VyY2VGcm9tSW5pdGlhbFNlbGVjdGlvbigpOwotICAgIGlmIChyZXNvdXJjZSE9bnVsbCkgewotICAgICAgSVBhdGggYWJzb2x1dGVQYXRoID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsKLSAgICAgIGlmIChhYnNvbHV0ZVBhdGguaXNBYnNvbHV0ZSgpKSB7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVBhdGguc2VnbWVudCgxKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0vLyAgcHVibGljIFdlYlNlcnZpY2VFZGl0TW9kZWwgZ2V0V2ViU2VydmljZUVkaXRNb2RlbCgpIHsKLS8vICAgIFdlYlNlcnZpY2VzTWFuYWdlciB3c20gPSBuZXcgV2ViU2VydmljZXNNYW5hZ2VyKCk7Ci0vLyAgICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdCgpOwotLy8gICAgcmV0dXJuIHdzbS5nZXRXU0VkaXRNb2RlbChwcm9qZWN0KTsgICAgCi0vLyAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdE9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdE9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwMGNjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBpbXBsZW1lbnRzIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIHsKLQotCXB1YmxpYyBpbnQgbGF1bmNoKFNoZWxsIHNoZWxsKSB7CQkKLQkJcmV0dXJuIC0xOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pIHsKLQkJIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQkJIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLQlwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkgewotCQkgLy8gIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB7Ci0JCSAvLyAgc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0JfQkKLQkKLQlwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkKLQl7Ci0JCSAvLyAgc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0JCXJldHVybiAiIjsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpIHsKLQkJLy8gc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0JCXJldHVybiB0cnVlOwotCX0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQWRkSGFuZGxlckRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0FkZEhhbmRsZXJEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1YWEzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQWRkSGFuZGxlckRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKiAyMDA2MDUyOSAgIDE0MzUxOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nLkRpYWxvZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgQWRkSGFuZGxlckRpYWxvZyBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIExpc3RlbmVyIHsKLQotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVPbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0NsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VydmljZXNfOwotICBwcml2YXRlIFN0cmluZyBjbGFzc05hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIHNlbGVjdGVkUG9ydE5hbWU7Ci0gIAotICBwcml2YXRlIFRleHQgY2xhc3NOYW1lVGV4dDsKLSAgcHJpdmF0ZSBUZXh0IG5hbWVUZXh0OwotICBwcml2YXRlIENvbWJvIHBvcnROYW1lQ29tYm87Ci0gIAotICAvLyAtLS0tVE9PTFRJUFMgU2VjdGlvbi0tLS0KLSAgLyogQ09OVEVYVF9JRCBBSERMMDAwMSBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9URVhUX0hBTkRMRVJfTkFNRSAgPSAiQUhETDAwMDEiOyAvLyROT04tTkxTLTEkCi0gIAotICAvKiBDT05URVhUX0lEIEFIREwwMDAyIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1RFWFRfSEFORExFUl9DTEFTUyAgPSAiQUhETDAwMDIiOyAvLyROT04tTkxTLTEkCi0gIAotICAvKiBDT05URVhUX0lEIEFIREwwMDAxIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1RFWFRfSEFORExFUl9QT1JUICA9ICJBSERMMDAwMyI7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgcHJpdmF0ZSBCdXR0b24gYmVhbkNsYXNzQnJvd3NlQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBCQ0wwMDAzIGZvciB0aGUgQmVhbiBDbGFzcyBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRSA9ICJQQkNMMDAwMyI7Ci0gIAotICBwdWJsaWMgQWRkSGFuZGxlckRpYWxvZyggU2hlbGwgc2hlbGwsIGJvb2xlYW4gaXNDbGllbnRIYW5kbGVyKQotICB7Ci0gICAgc3VwZXIoc2hlbGwpOwotICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0gICAgaXNDbGllbnRfID0gaXNDbGllbnRIYW5kbGVyOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotICAgIENvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlQ29udGVudHMocGFyZW50KTsKLSAgICBwYXJlbnQuZ2V0U2hlbGwoKS5wYWNrKCk7Ci0gICAgcmV0dXJuIGNvbXA7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLSAgICB2YWxpZGF0ZU9uXyA9IGZhbHNlOwotICAgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0gICAgCi0gICAgU2hlbGwgdGhpc1NoZWxsID0gcGFyZW50LmdldFNoZWxsKCk7Ci0gICAgaWYgKHRoaXNTaGVsbCA9PSBudWxsKSB7Ci0gICAgICB0aGlzU2hlbGwgPSBjcmVhdGVTaGVsbCgpOwotICAgIH0KLSAgICB0aGlzU2hlbGwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVExFX1dTX0FERF9IQU5ETEVSKTsKLSAgICAKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOyAgICAKLSAgICAKLSAgICBDb21wb3NpdGUgc291cmNlTG9jYXRpb25Db21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoY29tcG9zaXRlLCAzKTsKLSAgICAKLSAgICBjbGFzc05hbWVUZXh0ID0gdWlVdGlscy5jcmVhdGVUZXh0KHNvdXJjZUxvY2F0aW9uQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFWFRfSEFORExFUl9DTEFTUywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVEVYVF9IQU5ETEVSX0NMQVNTLCBJTkZPUE9QX1RFWFRfSEFORExFUl9DTEFTUywgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIGNsYXNzTmFtZVRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSx0aGlzKTsKLSAgICAKLSAgICBiZWFuQ2xhc3NCcm93c2VCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCBzb3VyY2VMb2NhdGlvbkNvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQlJPV1NFX0NMQVNTRVMsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFICk7Ci0gICAgYmVhbkNsYXNzQnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgewotICAgICAgICAgICAgaGFuZGxlQnJvd3NlQ2xhc3NlcygpOyAgCi0gICAgICAgICAgfQotICAgICAgICB9ICk7Ci0gICAgCi0gICAgbmFtZVRleHQgPSB1aVV0aWxzLmNyZWF0ZVRleHQoc291cmNlTG9jYXRpb25Db21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVEVYVF9IQU5ETEVSX05BTUUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1RFWFRfSEFORExFUl9OQU1FLCBJTkZPUE9QX1RFWFRfSEFORExFUl9OQU1FLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgIG5hbWVUZXh0LmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotICAgIAotICAgIC8vIGR1bW15IGxhYmVsIGZvciBjb2x1bW4gMy4KLSAgICBuZXcgTGFiZWwoIHNvdXJjZUxvY2F0aW9uQ29tcCwgU1dULk5PTkUgKTsKLSAgICAKLSAgICBpZiAoIWlzQ2xpZW50XyAmJiAhaXNNdWx0aXBsZVNlcnZpY2VzXyl7Ci0gICAgICBwb3J0TmFtZUNvbWJvID0gdWlVdGlscy5jcmVhdGVDb21ibyhzb3VyY2VMb2NhdGlvbkNvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9URVhUX0hBTkRMRVJfUE9SVCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVEVYVF9IQU5ETEVSX1BPUlQsIElORk9QT1BfVEVYVF9IQU5ETEVSX1BPUlQsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSICk7Ci0gICAgICBwb3J0TmFtZUNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotICAgICAgCi0gICAgICAvLyBkdW1teSBsYWJlbCBmb3IgY29sdW1uIDMuCi0gICAgICBuZXcgTGFiZWwoIHNvdXJjZUxvY2F0aW9uQ29tcCwgU1dULk5PTkUgKTsKLSAgICB9Ci0gICAgdmFsaWRhdGVPbl8gPSB0cnVlOwotICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUJyb3dzZUNsYXNzZXMoKQotICB7Ci0gICAgU2hlbGwgc2hlbGwgPSBnZXRTaGVsbCgpOwotICAgIElUeXBlIGl0eXBlID0gRGlhbG9nVXRpbHMuYnJvd3NlQ2xhc3Nlc0FzSVR5cGUoc2hlbGwsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKSwgbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhzaGVsbCkpOwotICAgIAotICAgIGlmKCBpdHlwZSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBjbGFzc05hbWVUZXh0LnNldFRleHQoaXR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOyAgICAgIAotICAgIH0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyI2hhbmRsZUV2ZW50KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLSAgICBpZiAoIXZhbGlkYXRlT25fKQotICAgICAgcmV0dXJuOwotICAgIGlmIChjbGFzc05hbWVUZXh0ID09IGV2ZW50LndpZGdldCkgewotICAgICAgaGFuZGxlQ2xhc3NOYW1lVGV4dEV2ZW50KCk7Ci0gICAgICB2YWxpZGF0ZVRleHRGaWVsZEVudHJpZXMoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG5hbWVUZXh0ID09IGV2ZW50LndpZGdldCkgewotICAgICAgaGFuZGxlTmFtZVRleHRFdmVudCgpOwotICAgICAgdmFsaWRhdGVUZXh0RmllbGRFbnRyaWVzKCk7ICAgICAgCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwb3J0TmFtZUNvbWJvID09IGV2ZW50LndpZGdldCkgewotICAgICAgaGFuZGxlUG9ydE5hbWVUZXh0RXZlbnQoKTsKLSAgICAgIHZhbGlkYXRlVGV4dEZpZWxkRW50cmllcygpOyAgICAgIAotICAgICAgcmV0dXJuOwotICAgIH0gICAgCi0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQ2xhc3NOYW1lVGV4dEV2ZW50KCl7Ci0gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lVGV4dC5nZXRUZXh0KCk7Ci0gICAgaWYgKGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLmphdmEiKSAhPSAtMSl7Ci0gICAgICBuYW1lVGV4dC5zZXRUZXh0KGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuamF2YSIpKSk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgbmFtZVRleHQuc2V0VGV4dChjbGFzc05hbWUpOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuIikgIT0gLTEpewotICAgICAgbmFtZVRleHQuc2V0VGV4dChjbGFzc05hbWUuc3Vic3RyaW5nKGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLiIpKzEsIGNsYXNzTmFtZS5sZW5ndGgoKSkpOwotICAgIH0KLSAgICBuYW1lID0gbmFtZVRleHQuZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlTmFtZVRleHRFdmVudCgpIHsKLSAgIG5hbWUgPSBuYW1lVGV4dC5nZXRUZXh0KCk7IAotCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVQb3J0TmFtZVRleHRFdmVudCgpewotICAgIHNlbGVjdGVkUG9ydE5hbWUgPSBwb3J0TmFtZUNvbWJvLmdldFRleHQoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGRpc2FibGVPS0J1dHRvbigpIHsKLSAgICBpZiAoZ2V0QnV0dG9uKDApICE9IG51bGwpCi0gICAgICBnZXRCdXR0b24oMCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZW5hYmxlT0tCdXR0b24oKSB7Ci0gICAgaWYgKGdldEJ1dHRvbigwKSAhPSBudWxsKQotICAgICAgZ2V0QnV0dG9uKDApLnNldEVuYWJsZWQodHJ1ZSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVRleHRGaWVsZEVudHJpZXMoKXsKLSAgCWlmIChjbGFzc05hbWVUZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKXsKLSAgCQlkaXNhYmxlT0tCdXR0b24oKTsKLSAgCQlyZXR1cm47Ci0gIAl9Ci0gIAlpZiAobmFtZVRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpewotICAJCWRpc2FibGVPS0J1dHRvbigpOwotICAJCXJldHVybjsKLSAgCX0KLSAgCWlmICghaXNDbGllbnRfICYmICFpc011bHRpcGxlU2VydmljZXNfKXsKLSAgCQlpZiAocG9ydE5hbWVDb21iby5nZXRUZXh0KCkhPW51bGwgJiYgcG9ydE5hbWVDb21iby5nZXRUZXh0KCkuZXF1YWxzKCIiKSl7Ci0gIAkJCWRpc2FibGVPS0J1dHRvbigpOwotICAJCQlyZXR1cm47Ci0gIAkJfQotICAJCWVsc2UgaWYgKHBvcnROYW1lQ29tYm8uZ2V0VGV4dCgpPT1udWxsKSB7Ci0gIAkJCWRpc2FibGVPS0J1dHRvbigpOwotICAJCQlyZXR1cm47Ci0gIAkJfQotICAJfQotICAJCi0gIAllbmFibGVPS0J1dHRvbigpOwotICAJCi0JCi0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsYXNzTmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewotICAgIGlmIChjbGFzc05hbWUubGFzdEluZGV4T2YoIi5qYXZhIikgIT0gLTEpewotICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuamF2YSIpKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICByZXR1cm4gY2xhc3NOYW1lOwotICAgIH0KLSAgfQotICAvKioKLSAgICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3NOYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcG9ydE5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBvcnROYW1lKCkgewotICAgIHJldHVybiBzZWxlY3RlZFBvcnROYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcG9ydE5hbWUgVGhlIHBvcnROYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBvcnROYW1lcyhTdHJpbmdbXSBwb3J0TmFtZXMpIHsKLSAgICBwb3J0TmFtZUNvbWJvLnNldEl0ZW1zKHBvcnROYW1lcyk7Ci0gICAgcG9ydE5hbWVDb21iby5zZWxlY3QoMCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZXJ2aWNlcyhib29sZWFuIGlzTXVsdGlwbGVTZXJ2aWNlcyl7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VydmljZXNfID0gaXNNdWx0aXBsZVNlcnZpY2VzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2hlY2tXU0RMVmFsaWRhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYyZDgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LlZhbGlkYXRlV1NETEpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBDaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17CSAgCi0JCi0JcHVibGljIENoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kICgpIHsKLQl9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIElKb2JNYW5hZ2VyICAgIGpvYk1hbmFnZXIgICAgID0gUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpOwotCSAgSm9iW10gICAgICAgICAgam9icyAgICAgICAgICAgPSBqb2JNYW5hZ2VyLmZpbmQoIFZhbGlkYXRlV1NETEpvYi5WQUxJREFURV9XU0RMX0pPQl9GQU1JTFkgKTsKLQkgIFZhbGlkYXRlV1NETEpvYiBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYiA9IG51bGw7Ci0JICAKLQkgIGlmKCBqb2JzLmxlbmd0aCA+IDAgKQotCSAgewotCQkgIGZvciAoaW50IGk9MDsgaTxqb2JzLmxlbmd0aDsgaSsrKSB7Ci0JCQkgIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gKFZhbGlkYXRlV1NETEpvYilqb2JzW2ldOwotCQkJICAKLQkJCSAgaWYgKGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iLmdldFN0YXRlKCkgIT0gSm9iLk5PTkUpIHsgCi0JCQkJICBpZiAoaWdub3JlV1NETFZhbGlkYXRpb24oZW52KSkgewotCQkJCQkgIC8vIGlmIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgdmFsaWRhdGlvbiwgY2FuY2VsIGV4aXN0aW5nIHZhbGlkYXRpb24gam9iCi0JCQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuY2FuY2VsKCk7Ci0JCQkJCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQkJICB9IGVsc2UgewotCQkJCQkgIC8vIFNldHRpbmcgdGhlIGVycm9yIHN0cmluZyB0byBhbiBlbXB0eSBzdHJpbmcgc28gdGhhdCB0aGUgY29tbWFuZCBlbmdpbmUgd291bGQgbm90Ci0JCQkJCSAgLy8gcG9wLXVwIGFub3RoZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSB1c2VyIGRlY2lkZWQgdG8gd2FpdCBmb3IgV1NETCB2YWxpZGF0aW9uLgotCQkJCQkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLQkJCQkgIH0KLQkJCSAgfQotCQkgIH0KLQkgIH0KLQkgIAotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICAKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGlnbm9yZVdTRExWYWxpZGF0aW9uKElFbnZpcm9ubWVudCBlbnYpIHsKLQkgIGlmICghV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCkuZ2V0UGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbigpKSAKLQkJICByZXR1cm4gdHJ1ZTsgLy8gZG8gbm90IHdhbnQgdG8gd2FpdCBmb3IgV1NETCB2YWxpZGF0aW9uLCBpLmUuIElnbm9yZSBhbGwKLQkJICAKLQkJLy8gZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSB3aXRoIHRoZSBvcHRpb25zIHRvIHN0b3AsIGlnbm9yZSB0aGlzIG9uZSwgb3IKLQkJLy8gaWdub3JlIGFsbCBjb21pbmcgbWVzc2FnZXMKLQkJSVN0YXR1cyBzdGF0dXNfID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlNUSUxMX1ZBTElEQVRJTkdfV1NETCApOwotCQkvLyBhZGRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gV1NJIEluY29tcGxpYW5jZXMKLQotCQlDaG9pY2UgaWdub3JlQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5DQU5DRUxfVkFMSURBVElPTl9MQUJFTCwgCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkNBTkNFTF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OKTsKLQkJQ2hvaWNlIGlnbm9yZUFsbENob2ljZSA9IG5ldyBDaG9pY2UoJ0EnLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0FOQ0VMX0FMTF9WQUxJREFUSU9OX0xBQkVMLCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0FOQ0VMX0FMTF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OKTsKLQkJQ2hvaWNlIGNhbmNlbENob2ljZSA9IG5ldyBDaG9pY2UoJ1cnLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuV0FJVF9WQUxJREFUSU9OX0xBQkVMLCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuV0FJVF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OKTsKLQotCQlDaG9pY2UgcmVzdWx0ID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzXywKLQkJCQluZXcgQ2hvaWNlW10geyBpZ25vcmVDaG9pY2UsIGlnbm9yZUFsbENob2ljZSwgY2FuY2VsQ2hvaWNlIH0pOwotCi0JCS8vIGlmIHRoZSB1c2VyIGNsb3NlcyB0aGUgbWVzc2FnZSBib3ggb3Igc2VsZWN0cyBpZ25vcmUgY29udGludWUKLQkJaWYgKHJlc3VsdCA9PSBudWxsCi0JCQkJfHwgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVDaG9pY2UuZ2V0TGFiZWwoKSkpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyBpZ25vcmUgYWxsLCBjaGFuZ2UgdGhlIHByZWZlcmVuY2UKLQkJfSBlbHNlIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoaWdub3JlQWxsQ2hvaWNlLmdldExhYmVsKCkpKSB7Ci0JCQkvLyB1cGRhdGUgaWdub3JlIFdTREwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlCi0JCQlXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5zZXRXYWl0Rm9yV1NETFZhbGlkYXRpb24oZmFsc2UpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyB0byBjYW5jZWwgLCBkbyBub3QgY29udGludWUgd2l0aCB0aGUgY29tbWFuZAotCQllbHNlIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoY2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZmI5MjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guV29ya2JlbmNoUmVzb3VyY2VIZWxwZXJCYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXBwbGljYXRpb25jbGllbnQuY29tcG9uZW50Y29yZS51dGlsLkFwcENsaWVudEFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jbGllbnQuQXBwbGljYXRpb25DbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuY2xpZW50LkFwcGxpY2F0aW9uQ2xpZW50UmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmludGVybmFsLm1vZHVsZWNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXRVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5XZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYnNlcnZpY2UuaGVscGVyLldlYlNlcnZpY2VzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIuY29tcG9uZW50Y29yZS51dGlsLldlYkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViQXBwUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LldlYlNlcnZpY2VzUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0vKioKLSAqIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLSAqCi0gKiBJbml0aWFsaXplIGFuZCBsb2FkIHRoZSBoYW5kbGVycyBkYXRhCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDbWQgewotCi0gIHByaXZhdGUgV2ViU2VydmljZXNNYW5hZ2VyIHdlYlNlcnZpY2VzTWFuYWdlcl87Ci0KLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VSZWZOYW1lXyA9IG51bGw7Ci0gIAotICBwcml2YXRlIExpc3Qgd3NTZXJ2aWNlUmVmc187Ci0gIAotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIFN0cmluZyBlcnJvclN0YXR1c01zZ18gPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICB3ZWJTZXJ2aWNlc01hbmFnZXJfID0gV2ViU2VydmljZXNNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBnZXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVEICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBlbHNlIGlmIChzZWxlY3Rpb24uc2l6ZSgpPjEpewotICAgICAgc3RhdHVzID0gcHJvY2Vzc011bHRpcGxlSGFuZGxlcnMoKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgc3RhdHVzID0gcHJvY2Vzc0hhbmRsZXJzKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEZvciBwcm9jZXNzaW5nIGhhbmRsZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIHByb2Nlc3NIYW5kbGVycygpIHsKLSAgICB0cnkgewotCi0gICAgICBDb2xsZWN0aW9uIHNlbGVjdGVkU2VydmljZVJlZnMgPSBnZXRXU1NlcnZpY2VSZWZzRnJvbVNlbGVjdGlvbigpOyAvLyBnZXQgaW5pdGlhbCBzZWxlY3Rpb24gdmFsdWVzCi0gICAgICBpZiAoc2VsZWN0ZWRTZXJ2aWNlUmVmcz09bnVsbCB8fCBzZWxlY3RlZFNlcnZpY2VSZWZzLmlzRW1wdHkoKSl7Ci0gICAgICAgIC8vcmVwb3J0IG5vIFdlYiBzZXJ2aWNlIGNsaWVudCBpcyBhdmFpbGFibGUKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dFQl9TRVJWSUNFX0NMSUVOVFNfTk9UX0ZPVU5EKTsKLSAgICAgIH0KLSAgICAgIHdzU2VydmljZVJlZnNfID0gd2ViU2VydmljZXNNYW5hZ2VyXy5nZXRBbGxXb3Jrc3BhY2VTZXJ2aWNlUmVmcygpOyAKLQotICAgICAgaWYgKHdzU2VydmljZVJlZnNfICE9IG51bGwpIHsKLSAgICAgICAgaW50IG51bWJlck9mU2VydmljZVJlZnMgPSB3c1NlcnZpY2VSZWZzXy5zaXplKCk7Ci0gICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyA9IG5ldyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcltudW1iZXJPZlNlcnZpY2VSZWZzXTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZTZXJ2aWNlUmVmczsgaSsrKSB7Ci0gICAgICAgICAgU2VydmljZVJlZiB3c1NlcnZpY2VSZWYgPSAoU2VydmljZVJlZikgd3NTZXJ2aWNlUmVmc18uZ2V0KGkpOwotICAgICAgICAgIFZlY3RvciBoYW5kbGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBMaXN0IHdzSGFuZGxlcnMgPSB3c1NlcnZpY2VSZWYuZ2V0SGFuZGxlcnMoKTsKLSAgICAgIAotICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd3NIYW5kbGVycy5zaXplKCk7IGsrKykgewotCi0gICAgICAgICAgICBIYW5kbGVyIHdzSGFuZGxlciA9IChIYW5kbGVyKSB3c0hhbmRsZXJzLmdldChrKTsKLQotICAgICAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBoYW5kbGVySXRlbSA9IG5ldyBIYW5kbGVyVGFibGVJdGVtKCk7Ci0gICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRIYW5kbGVyKHdzSGFuZGxlcik7Ci0gICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRIYW5kbGVyTmFtZSh3c0hhbmRsZXIuZ2V0SGFuZGxlck5hbWUoKSk7Ci0gICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRIYW5kbGVyQ2xhc3NOYW1lKHdzSGFuZGxlci5nZXRIYW5kbGVyQ2xhc3MoKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0V3NEZXNjUmVmKHdzU2VydmljZVJlZik7Ci0KLSAgICAgICAgICAgIGhhbmRsZXJzLmFkZChoYW5kbGVySXRlbSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIFN0cmluZyB3c1NlcnZpY2VSZWZOYW1lID0gd3NTZXJ2aWNlUmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldID0gbmV3IEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKCk7Ci0gICAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLnNldEhhbmRsZXJMaXN0KGhhbmRsZXJzKTsKLSAgICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0U2VydmljZVJlZih3c1NlcnZpY2VSZWYpOwotICAgICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5zZXRTZXJ2aWNlUmVmTmFtZSh3c1NlcnZpY2VSZWZOYW1lKTsKLSAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwgZSk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgcHJvY2Vzc011bHRpcGxlSGFuZGxlcnMoKXsKLSAgICAgIFNlcnZpY2VSZWZbXSBzZXJ2aWNlUmVmcyA9IGdldFNlcnZpY2VSZWZzKCk7Ci0gICAgICBpZiAoZXJyb3JTdGF0dXNNc2dfICE9IG51bGwpewotICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvclN0YXR1c01zZ18pOwotICAgICAgfQotICAgICAgaXNNdWx0aXBsZVNlbGVjdGlvbl8gPSB0cnVlOwotICAgICAgCi0gICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8gPSBuZXcgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbc2VydmljZVJlZnMubGVuZ3RoXTsKLSAgICAgIFZlY3RvciBoYW5kbGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VSZWZzLmxlbmd0aDtpKyspewotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHJlZk5hbWUgPSBzZXJ2aWNlUmVmc1tpXS5nZXRTZXJ2aWNlUmVmTmFtZSgpOwotICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0gPSBuZXcgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoKTsKLSAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLnNldEhhbmRsZXJMaXN0KGhhbmRsZXJzKTsKLSAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLnNldFNlcnZpY2VSZWZOYW1lKHJlZk5hbWUpOwotICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0U2VydmljZVJlZihzZXJ2aWNlUmVmc1tpXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgICAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNHZW5Ta2VsZXRvbkVuYWJsZWRfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuU2tlbGV0b25FbmFibGVkKCkgewotICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXykKLSAgICAgIHJldHVybiBmYWxzZTsgICAgCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJlZk5hbWUoKSB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZVJlZk5hbWVfOwotICB9Ci0KLSAgcHVibGljIElQcm9qZWN0IGdldENsaWVudFByb2plY3QoKSB7Ci0gICAgcmV0dXJuIHByb2plY3RfOwotICB9Ci0gIAotICBwcml2YXRlIFNlcnZpY2VSZWZbXSBnZXRTZXJ2aWNlUmVmcygpewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdFNlbCA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICAgIFNlcnZpY2VSZWZbXSBzZXJ2aWNlUmVmcyA9IG5ldyBTZXJ2aWNlUmVmW2luaXRTZWwuc2l6ZSgpXTsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBpbml0U2VsLml0ZXJhdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpbml0U2VsLnNpemUoKTtpKyspIHsKLSAgICAgICAgICBPYmplY3Qgb2JqID0gaXRlci5uZXh0KCk7Ci0gICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpewotICAgICAgICAgICAgICBzZXJ2aWNlUmVmc1tpXSA9IChTZXJ2aWNlUmVmKW9iajsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgZXJyb3JTdGF0dXNNc2dfID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX01VTFRJUExFX1NFUlZJQ0VfU0VMRUNUOwotICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2VydmljZVJlZnM7Ci19Ci0KLSAgcHJpdmF0ZSBDb2xsZWN0aW9uIGdldFdTU2VydmljZVJlZnNGcm9tU2VsZWN0aW9uKCkgewotCi0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdFNlbCA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICBpZiAoaW5pdFNlbCAhPSBudWxsICYmIGluaXRTZWwuc2l6ZSgpID09IDEpIHsKLSAgICAgIE9iamVjdCBvYmogPSBpbml0U2VsLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgU2VydmljZVJlZiBzZXJ2aWNlUmVmID0gbnVsbDsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTZXJ2aWNlUmVmKSB7Ci0gICAgICAgIC8vIENsaWVudCBTZXJ2aWNlUmVmCi0gICAgICAgIHNlcnZpY2VSZWYgPSAoU2VydmljZVJlZikgb2JqOwotICAgICAgICBzZXJ2aWNlUmVmTmFtZV8gPSBzZXJ2aWNlUmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSkgewotICAgICAgICBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlIHdzbmd0ID0gKFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUpIG9iajsKLSAgICAgICAgc2VydmljZVJlZiA9IHdzbmd0LmdldFNlcnZpY2VSZWYoKTsKLSAgICAgICAgc2VydmljZVJlZk5hbWVfID0gc2VydmljZVJlZi5nZXRTZXJ2aWNlUmVmTmFtZSgpOwotICAgICAgICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlUmVmKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIElGaWxlKXsKLSAgICAgICAgICBSZXNvdXJjZSByZXMgPSBXb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2UuZ2V0UmVzb3VyY2UoKElGaWxlKW9iaiwgdHJ1ZSk7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBzZXJ2aWNlUmVmcyA9IG51bGw7Ci0gICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIFdlYlNlcnZpY2VzUmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgLy8gd2Vic2VydmljZXNjbGllbnQueG1sIGZvciBKMkVFIDEuMwotICAgICAgICAgICAgICBXZWJTZXJ2aWNlc1Jlc291cmNlIHdzUmVzID0gKFdlYlNlcnZpY2VzUmVzb3VyY2UpcmVzOwotICAgICAgICAgICAgICBzZXJ2aWNlUmVmcyA9IHdzUmVzLmdldFdlYlNlcnZpY2VzQ2xpZW50KCkuZ2V0U2VydmljZVJlZnMoKTsKLSAgICAgICAgICAgICAgaWYgKCFzZXJ2aWNlUmVmcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlUmVmIHJlZiA9IChTZXJ2aWNlUmVmKSgoTGlzdClzZXJ2aWNlUmVmcykuZ2V0KDApOwotICAgICAgICAgICAgICAgIHNlcnZpY2VSZWZOYW1lXyA9IHJlZi5nZXRTZXJ2aWNlUmVmTmFtZSgpOwotICAgICAgICAgICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHJlZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VSZWZzOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgaWYocmVzIGluc3RhbmNlb2YgV2ViQXBwUmVzb3VyY2UpewotICAgICAgICAgICAgICAgICAgLy8gd2ViLnhtbCBmb3IgSjJFRSAxLjQKLSAgICAgICAgICAgICAgICAgIFdlYkFwcFJlc291cmNlIHdlYkFwcFJlcyA9IChXZWJBcHBSZXNvdXJjZSlyZXM7Ci0gICAgICAgICAgICAgICAgICBzZXJ2aWNlUmVmcyA9IHdlYkFwcFJlcy5nZXRXZWJBcHAoKS5nZXRTZXJ2aWNlUmVmcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIEVKQlJlc291cmNlKXsKLSAgICAgICAgICAgICAgICAgIEVKQlJlc291cmNlIGVqYlJlcyA9IChFSkJSZXNvdXJjZSlyZXM7Ci0gICAgICAgICAgICAgICAgICBzZXJ2aWNlUmVmcyA9IHdlYlNlcnZpY2VzTWFuYWdlcl8uZ2V0U2VydmljZVJlZnMoZWpiUmVzLmdldEVKQkphcigpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChyZXMgaW5zdGFuY2VvZiBBcHBsaWNhdGlvbkNsaWVudFJlc291cmNlKXsKLSAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2xpZW50UmVzb3VyY2UgYXBwQ2xpZW50UmVzID0gKEFwcGxpY2F0aW9uQ2xpZW50UmVzb3VyY2UpcmVzOwotICAgICAgICAgICAgICAgICAgc2VydmljZVJlZnMgPSB3ZWJTZXJ2aWNlc01hbmFnZXJfLmdldFNlcnZpY2VSZWZzKGFwcENsaWVudFJlcy5nZXRBcHBsaWNhdGlvbkNsaWVudCgpKTsvL2FwcENsaWVudFJlcy5nZXRBcHBsaWNhdGlvbkNsaWVudCgpLmdldFNlcnZpY2VSZWZzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKHNlcnZpY2VSZWZzIT1udWxsICYmIHNlcnZpY2VSZWZzLnNpemUoKT4wKSB7Ci0gICAgICAgICAgICAgICAgICBTZXJ2aWNlUmVmIHJlZiA9IChTZXJ2aWNlUmVmKSgoTGlzdClzZXJ2aWNlUmVmcykuZ2V0KDApOwotICAgICAgICAgICAgICAgICAgc2VydmljZVJlZk5hbWVfID0gcmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChyZWYpOyAKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4gc2VydmljZVJlZnM7ICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoaXMgc2VjdGlvbiBpcyBmb3Igb2J0YWluaW5nIGFsbCB0aGUgc2VydmljZVJlZnMgZnJvbSB0aGUgcHJvamVjdCwgZ2l2ZW4gdGhhdCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICAgIC8vIHdhcyBmcm9tIHRoZSBKMkVFIHZpZXcgKFNlcnZpY2VSZWYgb3IgV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSksIGl0IHdpbGwgc2VsZWN0IHRoZSByaWdodCBzZXJ2aWNlUmVmCi0gICAgICBpZiAocHJvamVjdF89PW51bGwpewotICAgICAgICBwcm9qZWN0XyA9IGdldFByb2plY3QoKTsKLSAgICAgIH0KLSAgICAgIGlmIChwcm9qZWN0Xz09bnVsbCl7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfSAgICAgCi0gICAgICAgCi0gICAgICBpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3RfKSkgewotICAgICAgICBXZWJBcnRpZmFjdEVkaXQgd2ViRWRpdCA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0Xyk7ICAgICAgICAgIAotICAgICAgICAgIHdlYkVkaXQgPSBXZWJBcnRpZmFjdEVkaXQuZ2V0V2ViQXJ0aWZhY3RFZGl0Rm9yUmVhZCh2Yyk7Ci0gICAgICAgICAgaWYgKHdlYkVkaXQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBXZWJBcHAgd2ViQXBwID0gKFdlYkFwcCkgd2ViRWRpdC5nZXREZXBsb3ltZW50RGVzY3JpcHRvclJvb3QoKTsKLSAgICAgICAgICAgIGlmICh3ZWJBcHAgIT0gbnVsbCkgewotICAgICAgICAgICAgICByZXR1cm4gd2ViU2VydmljZXNNYW5hZ2VyXy5nZXRTZXJ2aWNlUmVmcyh3ZWJBcHApOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5ewotICAgICAgICAgIGlmKHdlYkVkaXQhPW51bGwpCi0gICAgICAgICAgICB3ZWJFZGl0LmRpc3Bvc2UoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50KHByb2plY3RfKSl7Ci0KLSAgICAJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0Xyk7Ci0gICAgCUVKQkphciBlamJKYXIgPSBFSkJBcnRpZmFjdEVkaXRVdGlsaXRpZXMuZ2V0RUpCSmFyKHZjKTsKLSAgICAgICAgaWYgKGVqYkphciE9bnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzTWFuYWdlcl8uZ2V0U2VydmljZVJlZnMoZWpiSmFyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoSjJFRVV0aWxzLmlzQXBwQ2xpZW50Q29tcG9uZW50KHByb2plY3RfKSl7Ci0gICAgCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0Xyk7Ci0gICAgCSAgQXBwQ2xpZW50QXJ0aWZhY3RFZGl0IGFwcEVkaXQgPSBudWxsOwotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGFwcEVkaXQgPSBBcHBDbGllbnRBcnRpZmFjdEVkaXQuZ2V0QXBwQ2xpZW50QXJ0aWZhY3RFZGl0Rm9yUmVhZCh2Yyk7Ci0gICAgICAgICAgaWYgKGFwcEVkaXQhPW51bGwpewotICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNsaWVudCBhcHBDbGllbnQgPSBhcHBFZGl0LmdldEFwcGxpY2F0aW9uQ2xpZW50KCk7Ci0gICAgICAgICAgICAgIGlmIChhcHBDbGllbnQgIT1udWxsKXsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc01hbmFnZXJfLmdldFNlcnZpY2VSZWZzKGFwcENsaWVudCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGZpbmFsbHl7Ci0gICAgICAgICAgICAgIGlmKGFwcEVkaXQhPW51bGwpewotICAgICAgICAgICAgICAgICAgYXBwRWRpdC5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRXc1NlcnZpY2VSZWZzKCl7Ci0gICAgcmV0dXJuIHRoaXMud3NTZXJ2aWNlUmVmc187Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRJc011bHRpcGxlU2VsZWN0aW9uKCl7Ci0gICAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXzsKLSAgfQotICAKLSAgcHVibGljIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gZ2V0SGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoKXsKLSAgICByZXR1cm4gdGhpcy5oYW5kbGVyU2VydmljZVJlZkhvbGRlcl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNlZTE4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgCi0gKiAyMDA2MDUxNyAgIDE0MjMzOSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbmNsaWVudC5jb21wb25lbnRjb3JlLnV0aWwuQXBwQ2xpZW50QXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5jb21wb25lbnRjb3JlLnV0aWwuRUpCQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5jb21wb25lbnRjb3JlLnV0aWwuV2ViQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5XZWJzZXJ2aWNlX2NsaWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5pbnRlcm5hbC5pbXBsLldlYnNlcnZpY2VfY2xpZW50RmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5pbnRlcm5hbC5lbWYudXRpbGl0aWVzLkV0b29sc0NvcHlVdGlsaXR5OwotCi0vKgotICogUHJvdmlkZSBhIHdheSB0byBleHRlcm5hbGl6ZSB0aGUgZWRpdGVkIGZpZWxkcyBhbmQgY3JlYXRlIG5ldyBoYW5kbGVycwotICogIAotICovCi1wdWJsaWMgY2xhc3MgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0KLSAgcHJpdmF0ZSBIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgb2xkV1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIG5ld1dTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl87Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICB0cnkgewotICAgICAgCi0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pIHsKLSAgICAgICAgaWYgKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyAhPSBudWxsKSB7Ci0gICAgICAgICAgLy8gYWRkIG5ldyBoYW5kbGVyIHRvIGludGVybmFsIG1vZGVsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdAotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uYWRkSGFuZGxlclRvU2VydmljZVJlZigpOwotICAgICAgICAgICAgc2F2ZUVkaXRNb2RlbChoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgb2xkV1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIG5ld1dTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyAhPSBudWxsKSB7Ci0gIAotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfLmxlbmd0aDsgaSsrKSB7Ci0gIAotICAgICAgICAgICAgU2VydmljZVJlZiB3c1NlcnZpY2VSZWYgPWhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5nZXRTZXJ2aWNlUmVmKCk7IAotICAgICAgICAKLSAgICAgICAgICAgIExpc3Qgd3NIYW5kbGVycyA9IHdzU2VydmljZVJlZi5nZXRIYW5kbGVycygpOwotICAgICAgICAgICAgb2xkV1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8ucHV0KHdzU2VydmljZVJlZiwgd3NIYW5kbGVycyk7Ci0gICAgICAgICAgICBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5wdXQod3NTZXJ2aWNlUmVmLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgICAgIH0KLSAgCi0gICAgICAgICAgLy9FbnVtZXJhdGlvbiBlID0gaGFuZGxlcnNUYWJsZV8ua2V5cygpOwotICAgICAgICAgIGZvciAoaW50IGo9MDtqPGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXy5sZW5ndGg7aisrKSB7Ci0KLSAgICAgICAgICAgIExpc3QgaGFuZGxlclRhYmxlSXRlbXNfID0gIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tqXS5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICAgICAgaWYgKGhhbmRsZXJUYWJsZUl0ZW1zXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIC8vIGZvcm0gSGFuZGxlciB0YWJsZXMKLSAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyVGFibGVJdGVtc18uc2l6ZSgpOyBpKyspIHsKLSAgCi0gICAgICAgICAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSkgaGFuZGxlclRhYmxlSXRlbXNfLmdldChpKTsKLSAgICAgICAgICAgICAgICBPYmplY3Qgd3NNb2RlbFJlZiA9IGh0aS5nZXRXc0Rlc2NSZWYoKTsKLSAgICAgICAgICAgICAgICBpZiAod3NNb2RlbFJlZiAhPSBudWxsICYmIHdzTW9kZWxSZWYgaW5zdGFuY2VvZiBTZXJ2aWNlUmVmKSB7Ci0gICAgICAgICAgICAgICAgICBTZXJ2aWNlUmVmIHdzUmVmID0gKFNlcnZpY2VSZWYpIHdzTW9kZWxSZWY7Ci0gIAotICAgICAgICAgICAgICAgICAgT2JqZWN0IGhhbmRsZXIgPSBodGkuZ2V0SGFuZGxlcigpOwotICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyIGluc3RhbmNlb2YgSGFuZGxlcikgewotICAgICAgICAgICAgICAgICAgICAvLyBjbG9uZSBpdAotICAgICAgICAgICAgICAgICAgICBIYW5kbGVyIGNsb25lZEhhbmRsZXIgPSAoSGFuZGxlcikgRXRvb2xzQ29weVV0aWxpdHkuY3JlYXRlQ29weSgoSGFuZGxlcikgaGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICgoTGlzdCkgbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8uZ2V0KHdzUmVmKSkuYWRkKGNsb25lZEhhbmRsZXIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBpdAotICAgICAgICAgICAgICAgICAgICBXZWJzZXJ2aWNlX2NsaWVudEZhY3Rvcnkgd3NDbGllbnRGYWN0b3J5ID0gbmV3IFdlYnNlcnZpY2VfY2xpZW50RmFjdG9yeUltcGwoKTsKLSAgICAgICAgICAgICAgICAgICAgSGFuZGxlciBuZXdIYW5kbGVyID0gd3NDbGllbnRGYWN0b3J5LmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyTmFtZShodGkuZ2V0SGFuZGxlck5hbWUoKSk7Ci0gIAotICAgICAgICAgICAgICAgICAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpLCBwcm9qZWN0Xyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqYXZhQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlckNsYXNzKGphdmFDbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgCi0gICAgICAgICAgICAgICAgICAgICgoTGlzdCkgbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8uZ2V0KHdzUmVmKSkuYWRkKG5ld0hhbmRsZXIpOwotICAgICAgICAgICAgICAgICAgfQotICAKLSAgICAgICAgICAgICAgICB9Ci0gIAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotIAotICAgICAgICAgIC8vIGFkZCBoYW5kbGVycyB0byBwb3J0cwotICAgICAgICAgIGFkZEhhbmRsZXJzVG9TZXJ2aWNlUmVmcygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBzYXZlIHRoZSBhcnRpZmFjdCBlZGl0IG1vZGVsCi0gICAgICAgIHNhdmVFZGl0TW9kZWwoKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIAotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQsIGUpOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2F2ZUVkaXRNb2RlbCgpIHsKLSAgICAgIEFydGlmYWN0RWRpdCBhcnRpZmFjdEVkaXQgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgICBpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3RfKSkgewotICAgICAgICAgICAgICAgIGFydGlmYWN0RWRpdCA9IFdlYkFydGlmYWN0RWRpdC5nZXRXZWJBcnRpZmFjdEVkaXRGb3JXcml0ZShwcm9qZWN0Xyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudChwcm9qZWN0XykpewotICAgICAgICAgICAgICAgIGFydGlmYWN0RWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JXcml0ZShwcm9qZWN0Xyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoSjJFRVV0aWxzLmlzQXBwQ2xpZW50Q29tcG9uZW50KHByb2plY3RfKSl7Ci0gICAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0ID0gQXBwQ2xpZW50QXJ0aWZhY3RFZGl0LmdldEFwcENsaWVudEFydGlmYWN0RWRpdEZvcldyaXRlKHByb2plY3RfKTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5IHsKLSAgICAgICAgICBpZiAoYXJ0aWZhY3RFZGl0IT1udWxsKSB7Ci0gICAgICAgICAgICAgIGFydGlmYWN0RWRpdC5zYXZlKG51bGwpOwotICAgICAgICAgICAgICBhcnRpZmFjdEVkaXQuZGlzcG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNhdmVFZGl0TW9kZWwoSVByb2plY3QgcHJvamVjdCl7Ci0JICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0JICBzYXZlRWRpdE1vZGVsKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRIYW5kbGVyc1RvU2VydmljZVJlZnMoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIEVudW1lcmF0aW9uIHJlZnNUb0hhbmRsZXJzID0gbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8ua2V5cygpOwotICAgICAgd2hpbGUgKHJlZnNUb0hhbmRsZXJzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgIFNlcnZpY2VSZWYgc2VydmljZVJlZiA9IChTZXJ2aWNlUmVmKSByZWZzVG9IYW5kbGVycy5uZXh0RWxlbWVudCgpOwotICAgICAgICBpZiAoc2VydmljZVJlZiAhPSBudWxsKSB7Ci0gICAgICAgICAgTGlzdCBoYW5kbGVycyA9IChMaXN0KSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5nZXQoc2VydmljZVJlZik7Ci0gICAgICAgICAgTGlzdCBtb2RlbEhhbmRsZXJzID0gKExpc3QpIG9sZFdTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfLmdldChzZXJ2aWNlUmVmKTsKLSAgICAgICAgICBtb2RlbEhhbmRsZXJzLmNsZWFyKCk7Ci0gICAgICAgICAgbW9kZWxIYW5kbGVycy5hZGRBbGwoaGFuZGxlcnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotICAgIHRoaXMucHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICAvKioKLSAgICogQW4gYXJyYXkgb2YgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyU2VydmljZVJlZkhvbGRlcihIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGhhbmRsZXJIb2xkZXJzKXsKLSAgICB0aGlzLmhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyA9IGhhbmRsZXJIb2xkZXJzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJc011bHRpcGxlU2VsZWN0aW9uKGJvb2xlYW4gaXNNdWxpdHBsZVNlbGVjdGlvbikgewotICAgIHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbl8gPSBpc011bGl0cGxlU2VsZWN0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U2MDI5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50V2l6YXJkV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA3ICAgMTM1NDE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MTcgICAxMzYzOTAvMTM2MTU5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjQgICAxMzgwNTIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI1ICAgMTM3ODMxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MDkgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjEyICAgMTQ1MDgxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNzI1ICAgMTQ5MzUxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBEZWxldGVkIHNlcnZpY2UgZGVmaW5pdGlvbiBrZWVwcyByZWFwcGVhcmluZwotICogMjAwNjA4MDMgICAxNTI0ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFR5cGluZyBXU0RMIGluIFNlcnZpY2UgZGVmaW5pdGlvbiBmaWVsZCBpcyB2ZXJ5IHNsb3cKLSAqIDIwMDYwODE3ICAgMTQwMDE3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBsb25nZXIgcHJvamVjdCBvciBzZXJ2ZXIvcnVudGltZSBzdHJpbmdzIGRvIG5vdCByZXNpemUgd2l6YXJkCi0gKiAyMDA2MDgyNSAgIDEzNTU3MCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU2VydmljZSBpbXBsZW1lbnRhdGlvbiBVUkwgbm90IGRpc3BsYXllZCBwcm9wZXJseSBvbiBmaXJzdCBwYWdlCi0gKiAyMDA2MDgyOSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd2ViIHNlcnZpY2Ugd2l6YXJkIGhhbmdzIGR1cmluZyByZXNpemUKLSAqIDIwMDYwOTA3ICAgMTU2MjExIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZWxlY3Rpbmcgc2VydmljZSBkZWZpbml0aW9uIGludmFsaWRhdGVkIHByb2plY3QgY29uZmlnIHdoZW4gY3JlYXRpbmcgd2ViIHNlcnZpY2UgamF2YSBjbGllbnQKLSAqIDIwMDYxMjEyICAgMTU5OTExIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBjaGFuZ2luZyBzZXJ2aWNlIGRlZmluaXRpb24gcmVzZXRzIHNvbWUgY29uZmlndXJhdGlvbiBmaWVsZHMKLSAqIDIwMDYwMTI1ICAgMTU5OTExIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBSZW1vdmUgdW51c2VkIG1ldGhvZCBhbmQgaW1wb3J0cwotICogMjAwODA2MTMgICAyMzY1MjMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE92ZXJ3cml0ZSBzZXR0aW5nIG9uIFdlYiBzZXJ2aWNlIHdpemFyZCBpcyBjb3VwbGVkIHdpdGggcHJlZmVyZW5jZQotICogMjAwOTA5MjYgICAyNDg0NDggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBTaG91bGQgbm90IHJlc2l6ZSBXUyBXaXphcmQgZm9yIGxvbmcgV1NETCBmaWxlIG5hbWVzCi0gKiAyMDA5MDMwMiAgIDI0MjQ2MiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBTYXZlIFdlYiBzZXJ2aWNlcyB3aXphcmQgc2V0dGluZ3MKLSAqIDIwMDkwMzEzICAgMjY4NTY3IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIHBlcnNpc3RlZCB3aXphcmQgc2V0dGluZ3MgZ29uZSB1bmxlc3MgbGF1bmNoaW5nIG9uIG9iamVjdAotICogMjAwOTAzMjYgICAyNjkwOTcga2Nob25nQGNhLmlibS5jb20gLSBLZWl0aCBDaG9uZywgW0FjY2Vzc2liaWxpdHldIFdlYiBzZXJ2aWNlcyB3aXphcmQgZGlhbG9nIHNob3VsZCBiZSBzZWxlY3RlZCBhZnRlciBjYW5jZWxpbmcgdGhlIEJyb3dzZSBmb3IgY2xhc3MgZGlhbG9nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLkVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5UaW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5Db21ib1dpdGhIaXN0b3J5OwotCi0KLXB1YmxpYyBjbGFzcyBDbGllbnRXaXphcmRXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBSdW5uYWJsZQoteyAgCi0gIHByaXZhdGUgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQgY2xpZW50V2lkZ2V0XzsKLSAgcHJpdmF0ZSBCdXR0b24gb3ZlcndyaXRlQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW9uaXRvclNlcnZpY2VfOwotCi0gIHByaXZhdGUgQ29tYm9XaXRoSGlzdG9yeSBzZXJ2aWNlSW1wbF87Ci0gIHByaXZhdGUgQnV0dG9uIGJyb3dzZUJ1dHRvbl87Ci0gIHByaXZhdGUgV1NETFNlbGVjdGlvbkRpYWxvZyB3c2RsRGlhbG9nXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZV87Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nIHdlYlNlcnZpY2VVUklfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcl87Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dF87Ci0gIAotICBwcml2YXRlIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyXzsKLSAgcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBvYmplY3RNb2RpZnlMaXN0ZW5lcl8gOwotICBwcml2YXRlIGludCB2YWxpZGF0aW9uU3RhdGVfOwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gdHJ1ZTsKLSAgcHJpdmF0ZSBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlciB3c2RsVmFsaWRhdG9yV2lkZ2V0XzsKLQotICBwcml2YXRlIFRpbWVyIHRpbWVyXyA9IG51bGw7Ci0gIAotICAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIwIGZvciB0aGUgU2VydmljZSBJbXBsZW1lbmF0aW9uIHRleHQgZmllbGQgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMID0gIldTV1NDRU4wMDIwIjsKLQotICAKLSAgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAxNCBmb3IgdGhlIG1vbml0b3Igc2VydmljZSBjaGVja2JveCBvZiB0aGUgU2NlbmFyaW8gcGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFID0gIldTV1NDRU4wMDE0IjsJCi0gIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMzAgZm9yIHRoZSBPdmVyd3JpdGUgRmlsZXMgY2hlY2tib3ggb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX09WRVJXUklURSA9ICJXU1dTQ0VOMDAzMCI7CQotICAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDAxIGZvciB0aGUgU2NlbmFyaW8gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fUEFHRSA9ICJXU1dTQ0VOMDAwMSI7Ci0gIAotICAvKioKLSAgICogUnVuIHRoaXMgQ2xpZW50V2l6YXJkV2lkZ2V0LCB3aGljaCB2YWxpZGF0ZXMgdGhlIGVudHJ5IGZpZWxkIHZhbHVlcy4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLQkgIGlmICh2YWxpZE9iamVjdFNlbGVjdGlvbl8pCi0JCSAgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKHByb2plY3RfLCAKLQkJCQkgIHdzZGxWYWxpZGF0b3JXaWRnZXRfLmdldENvbXBvbmVudE5hbWUoKSwgCi0JCQkJICB3c2RsVmFsaWRhdG9yV2lkZ2V0Xy5nZXRXc2RsVVJJKCkpOwkgIAotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBTdHJpbmcgICAgICAgcGx1Z2luSWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLSAgICBVSVV0aWxzICAgICAgdXRpbHMgICAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWQgKTsKLSAgICB1dGlscy5jcmVhdGVJbmZvUG9wKHBhcmVudCwgSU5GT1BPUF9XU1dTQ0VOX1BBR0UpOwotCi0gICAgc3RhdHVzTGlzdGVuZXJfID0gc3RhdHVzTGlzdGVuZXI7Ci0JdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0gIAkvLyBDcmVhdGUgdGV4dCBmaWVsZCBhbmQgYnJvd3NlIGZvciBzZXJ2aWNlIHNlbGVjdGlvbgotICAJQ29tcG9zaXRlIHR5cGVDb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAzKTsKLQlzZXJ2aWNlSW1wbF8gPSB1dGlscy5jcmVhdGVDb21ib1dpdGhIaXN0b3J5KHR5cGVDb21wb3NpdGUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFREVGLCAKLQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMLAotCQkJSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMLCBTV1QuTEVGVCB8IFNXVC5CT1JERVIsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGlhbG9nU2V0dGluZ3MoKSApOwotCQotCU9iamVjdCBsYXlvdXREYXRhID0gc2VydmljZUltcGxfLmdldExheW91dERhdGEoKTsKLQlpZiAobGF5b3V0RGF0YSBpbnN0YW5jZW9mIEdyaWREYXRhKSB7Ci0JCSgoR3JpZERhdGEpbGF5b3V0RGF0YSkud2lkdGhIaW50ID0gMjI1OwotCX0KLQkKLQlvYmplY3RNb2RpZnlMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKXsKLQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQlpZiAoc2VydmljZUltcGxfLmdldFRleHQoKS5pbmRleE9mKCc6JykgPiAwKSB7Ci0JCSAgICAgICAgdGltZXJfID0gVGltZXIubmV3SW5zdGFuY2UodGltZXJfLCBEaXNwbGF5LmdldEN1cnJlbnQoKSwgQ2xpZW50V2l6YXJkV2lkZ2V0LnRoaXMpOwotCQkgICAgICAgIHRpbWVyXy5zdGFydFRpbWVyKCk7Ci0JCQl9Ci0JCSAgICBlbHNlCi0JCSAgICAgICAgcnVuKCk7Ci0JCX0KLQl9OwotCQotCXNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQotCWJyb3dzZUJ1dHRvbl8gPSB1dGlscy5jcmVhdGVQdXNoQnV0dG9uKHR5cGVDb21wb3NpdGUsCi0JCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9CVVRUT05fQlJPV1NFX0lNUEwsIG51bGwpOwotCQotCWJyb3dzZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFdTRExCcm93c2VMaXN0ZW5lcigpKTsKLQkKLQl1dGlscy5jcmVhdGVIb3Jpem9udGFsU2VwYXJhdG9yKHBhcmVudCwgMSk7Ci0JCi0JQ29tcG9zaXRlIGNsaWVudENvbXBvc2l0ZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAxLCAwLCAwICk7Ci0JCi0gICAgY2xpZW50V2lkZ2V0XyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldCh0cnVlKTsKLSAgICBjbGllbnRXaWRnZXRfLmFkZENvbnRyb2xzKGNsaWVudENvbXBvc2l0ZSAsIHN0YXR1c0xpc3RlbmVyICk7Ci0gICAKLSAgICAvLyAgQ3JlYXRlIHRlc3Qgc2VydmljZSBjaGVjayBib3guCi0gICAgQ29tcG9zaXRlIGJ1dHRvbkdyb3VwID0gdXRpbHMuY3JlYXRlQ29tcG9zaXRlKGNsaWVudENvbXBvc2l0ZSwxKTsKLSAgICAKLSAgICAvLyBDcmVhdGUgbW9uaXRvciBzZXJ2aWNlIGNoZWNrIGJveC4KLSAgICBtb25pdG9yU2VydmljZV8gPSB1dGlscy5jcmVhdGVDaGVja2JveChidXR0b25Hcm91cCAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5DSEVDS0JPWF9NT05JVE9SX1dFQlNFUlZJQ0UsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQUl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UsCi0gICAgCQkJCQkJCQkJSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX01PTklUT1JfU0VSVklDRSk7Ci0KLSAgICAvL3Nob3cgb3ZlcndyaXRlIGlmIGl0IGlzIGVuYWJsZWQgaW4gdGhlIHByZWZlcmVuY2VzCi0gICAgaWYgKGdldFJlc291cmNlQ29udGV4dCgpLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpIHsKLQkJTGFiZWwgcHJlZlNlcGFyYXRvciA9IHV0aWxzLmNyZWF0ZUhvcml6b250YWxTZXBhcmF0b3IocGFyZW50LCAxKTsKLQkJcHJlZlNlcGFyYXRvci5zZXRUZXh0KCJGaWxlIE9wdGlvbnMiKTsKLQkJQ29tcG9zaXRlIHByZWZCdXR0b25QYW5lbCA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnQsIDEpOwotCQlvdmVyd3JpdGVCdXR0b25fID0gdXRpbHMuY3JlYXRlQ2hlY2tib3gocHJlZkJ1dHRvblBhbmVsLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fQlVUVE9OX09WRVJXUklURV9GSUxFUywgCi0JCQkJSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX09WRVJXUklURSk7Ci0JCW92ZXJ3cml0ZUJ1dHRvbl8uc2V0U2VsZWN0aW9uKGdldFJlc291cmNlQ29udGV4dCgpCi0JCQkJLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotCQlvdmVyd3JpdGVCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWdldFJlc291cmNlQ29udGV4dCgpLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChvdmVyd3JpdGVCdXR0b25fLmdldFNlbGVjdGlvbigpKTsKLQkJCX0KLQkJfSk7Ci0JfQotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCBjb250ZXh0ICkKLSAgeyAgICAKLQkgIHJlc291cmNlQ29udGV4dF8gPSBjb250ZXh0OwotICB9Ci0gICAKLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotICB7ICAgCi0gICAgaWYgKHJlc291cmNlQ29udGV4dF8gPT0gbnVsbCkgewotCQlyZXNvdXJjZUNvbnRleHRfID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpCi0JCQkJLmdldFJlc291cmNlQ29udGV4dCgpOwotCX0KLQlyZXR1cm4gcmVzb3VyY2VDb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIGlkcyApCi0gIHsJICAKLSAgICBjbGllbnRXaWRnZXRfLnNldFR5cGVSdW50aW1lU2VydmVyKCBpZHMgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50UHJvamVjdE5hbWUobmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0JICBjbGllbnRXaWRnZXRfLnNldENsaWVudEVhclByb2plY3ROYW1lKG5hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDb21wb25lbnRUeXBlKFN0cmluZyBuYW1lKQotICB7Ci0JICBjbGllbnRXaWRnZXRfLnNldENsaWVudENvbXBvbmVudFR5cGUobmFtZSk7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBiKQotICB7Ci0JICBjbGllbnRXaWRnZXRfLnNldENsaWVudE5lZWRFQVIoYik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlkKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UnVudGltZUlkKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3ROYW1lKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UHJvamVjdE5hbWUoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnROZWVkRUFSKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50TmVlZEVBUigpOwotICB9Ci0gIAotIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHVyaSkKLSB7Ci0gICAgIHdlYlNlcnZpY2VVUklfID0gdXJpOyAgICAKLSB9Ci0JcHVibGljIHZvaWQgZXh0ZXJuYWxpemUoKSB7Ci0JCXN1cGVyLmV4dGVybmFsaXplKCk7Ci0JCQkJaWYgKGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkgIT0gbnVsbCApIHsKLQkJCQkgICAgc2VydmljZUltcGxfLnN0b3JlV2lkZ2V0SGlzdG9yeShnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpLmdldFR5cGVJZCgpKTsKLQkJCX0KLQl9Ci1wdWJsaWMgdm9pZCBpbnRlcm5hbGl6ZSgpIHsJCQotCXNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCWlmICh3ZWJTZXJ2aWNlVVJJXyAhPSBudWxsICYmIHdlYlNlcnZpY2VVUklfLmxlbmd0aCgpICE9IDApCi0JCXNlcnZpY2VJbXBsXy5zZXRUZXh0KHdlYlNlcnZpY2VVUklfKTsgIAotCWlmIChnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpICE9IG51bGwgKSB7Ci0JICAgc2VydmljZUltcGxfLnJlc3RvcmVXaWRnZXRIaXN0b3J5KGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkuZ2V0VHlwZUlkKCkpOwotCX0KLQlzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCi0JRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gbmV3IEVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcigpOwotCXdlYlNlcnZpY2VVUklfID0gKFN0cmluZykgdHJhbnNmb3JtZXIudHJhbnNmb3JtKHdlYlNlcnZpY2VVUklfKTsgICAgCi19Ci0gCi0gcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotIHsKLSAgICAgcHJvamVjdF8gPSBwcm9qZWN0OwotIH0KLSAgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgICAgY29tcG9uZW50TmFtZV8gPSBuYW1lOyAgICAgIAotICB9IAotICAKLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLSAgewotICAgICAgcmV0dXJuIHdlYlNlcnZpY2VVUklfIDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotCSAgcmV0dXJuIGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICAgewotICAgICAgIHJldHVybiBjb21wb25lbnROYW1lXyA7Ci0gICB9Ci0gIAotICAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLQl7Ci0JCXJldHVybiBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikKLQl7Ci0JCXBhcnNlcl8gPSBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpOwotCQljbGllbnRXaWRnZXRfLnNldFdlYlNlcnZpY2VzUGFyc2VyKHBhcnNlcl8pOwotCX0KLSAgIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KCBCb29sZWFuIGluc3RhbGwpCi0gIHsKLSAgICBjbGllbnRXaWRnZXRfLnNldEluc3RhbGxDbGllbnQoIGluc3RhbGwgKTsKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudCgpCi0gIHsKLQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldEluc3RhbGxDbGllbnQoKTsgICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRUZXN0Q2xpZW50KCk7IAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZSggQm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICAgIGNsaWVudFdpZGdldF8uc2V0VGVzdENsaWVudCh2YWx1ZSk7ICAKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRDbGllbnRHZW5lcmF0aW9uKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50R2VuZXJhdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRHZW5lcmF0aW9uKGludCB2YWx1ZSkKLSAgewotCSAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRHZW5lcmF0aW9uKHZhbHVlKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGV2ZWxvcENsaWVudChib29sZWFuIGRldmVsb3ApIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXREZXZlbG9wQ2xpZW50KCBkZXZlbG9wICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXREZXZlbG9wQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlQ2xpZW50KGJvb2xlYW4gYXNzZW1ibGUpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRBc3NlbWJsZUNsaWVudCggYXNzZW1ibGUgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRBc3NlbWJsZUNsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3kpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXREZXBsb3lDbGllbnQoIGRlcGxveSApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveUNsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXREZXBsb3lDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U3RhcnRDbGllbnQoQm9vbGVhbiBzdGFydCkgewotCQljbGllbnRXaWRnZXRfLnNldFN0YXJ0Q2xpZW50KCBzdGFydCApOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFN0YXJ0Q2xpZW50KCkgewkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0U3RhcnRDbGllbnQoKTsKLQl9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4obW9uaXRvclNlcnZpY2VfLmdldFNlbGVjdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvclNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIG1vbml0b3JTZXJ2aWNlXy5zZXRTZWxlY3Rpb24odmFsdWUuYm9vbGVhblZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgewotCQkJCQotCQl2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSBmYWxzZTsJLy8gYXNzdW1lIGZhbHNlIGF0IGZpcnN0Ci0KLQkJSVN0YXR1cyBtaXNzaW5nRmllbGRTdGF0dXMgPSBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpOwotCQlpZiAobWlzc2luZ0ZpZWxkU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIG1pc3NpbmdGaWVsZFN0YXR1czsKLQkJfQotCi0JCUlTdGF0dXMgaW52YWxpZFNlcnZpY2VJbXBsU3RhdHVzID0gY2hlY2tTZXJ2aWNlSW1wbFRleHRTdGF0dXMoKTsKLQkJaWYgKGludmFsaWRTZXJ2aWNlSW1wbFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBpbnZhbGlkU2VydmljZUltcGxTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIHBvc3NpYmxlRXJyb3JTdGF0dXMgPSBjaGVja0Vycm9yU3RhdHVzKCk7Ci0JCWlmIChwb3NzaWJsZUVycm9yU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIHBvc3NpYmxlRXJyb3JTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIHBvc3NpYmxlV2FybmluZ1N0YXR1cyA9IGNoZWNrV2FybmluZ1N0YXR1cygpOwotCQlpZiAocG9zc2libGVXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gcG9zc2libGVXYXJuaW5nU3RhdHVzOwotCQl9Ci0KLQkJLy8gaWYgbm8gZXJyb3JzIG9yIHdhcm5pbmdzIHdlcmUgZm91bmQsIGNsZWFyIHRoZSB2YWxpZGF0aW9uIHN0YXRlLgotCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX05PTkU7Ci0JCWNsaWVudFdpZGdldF8uc2V0VmFsaWRhdGlvblN0YXRlKFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9OT05FKTsKLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCkgewotCi0JCWlmICh2YWxpZGF0aW9uU3RhdGVfID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwpIHsKLQkJCWlmIChzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLnRyaW0oKS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVklDRV9TRUxFQ1RJT04sIG5ldyBTdHJpbmdbXXtDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRUlNUEx9KSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCUlTdGF0dXMgY2xpZW50TWlzc2luZ0ZpZWxkc1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJaWYgKGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gY2xpZW50TWlzc2luZ0ZpZWxkc1N0YXR1czsKLQkJfQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0KLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tFcnJvclN0YXR1cygpIHsKLQkJSVN0YXR1cyBjbGllbnRTaWRlRXJyb3JTdGF0dXMgPSBjbGllbnRXaWRnZXRfLmNoZWNrRXJyb3JTdGF0dXMoKTsKLQkJaWYgKGNsaWVudFNpZGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBjbGllbnRTaWRlRXJyb3JTdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrV2FybmluZ1N0YXR1cygpIHsKLQkJSVN0YXR1cyBjbGllbnRXYXJuaW5nU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja1dhcm5pbmdTdGF0dXMoKTsKLQkJaWYgKGNsaWVudFdhcm5pbmdTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpIHsKLQkJCXJldHVybiBjbGllbnRXYXJuaW5nU3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0JCi0JCi0JLypjYWxsIHZhbGlkYXRpb24gY29kZSBpbiB0aGUgb2JqZWN0IHNlbGVjdGlvbiB3aWRnZXQgdG8gZW5zdXJlCi0JIGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBzZXJ2aWNlSW1wbF8gZmllbGQgYXJlIHZhbGlkKi8KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tTZXJ2aWNlSW1wbFRleHRTdGF0dXMoKSB7Ci0JCQotCQlTdHJpbmcgZmllbGRUZXh0ID0gc2VydmljZUltcGxfLmdldFRleHQoKS50cmltKCk7Ci0KLQkJaWYgKHdzZGxWYWxpZGF0b3JXaWRnZXRfID09IG51bGwpCi0JCQl3c2RsVmFsaWRhdG9yV2lkZ2V0XyA9IG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcigpOwotCQkKLQkJdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gd3NkbFZhbGlkYXRvcldpZGdldF8udmFsaWRhdGUoZmllbGRUZXh0KTsKLQkJCQkKLQkJaWYgKCF2YWxpZE9iamVjdFNlbGVjdGlvbl8pCi0JCXsKLQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU0VSVklDRV9ERUYpOwkJCQotCQl9CQkKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBjb21wb25lbnROYW1lLAotCQkJU3RyaW5nIHdzZGxVUkkpCi0JewotCQkgICBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZCB3c2RsT3V0cHV0Q29tbWFuZCA9IG5ldyBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZCgpOwotCQkgICB3c2RsT3V0cHV0Q29tbWFuZC5zZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE5hbWUpOwotCQkgICB3c2RsT3V0cHV0Q29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3QpOwotCQkgICB3c2RsT3V0cHV0Q29tbWFuZC5zZXRXc2RsVVJJKHdzZGxVUkkpOwotCQkgICB3c2RsT3V0cHV0Q29tbWFuZC5zZXRUZXN0U2VydmljZShnZXRUZXN0U2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0V2ViU2VydmljZXNQYXJzZXIoZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7Ci0JCQotICAgICAgICAgICB3c2RsT3V0cHV0Q29tbWFuZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgCi0gICAgICAgICAgIHNldENvbXBvbmVudE5hbWUod3NkbE91dHB1dENvbW1hbmQuZ2V0Q29tcG9uZW50TmFtZSgpKTsKLSAgICAgICAgICAgc2V0UHJvamVjdCh3c2RsT3V0cHV0Q29tbWFuZC5nZXRQcm9qZWN0KCkpOwotICAgICAgICAgICBzZXRXZWJTZXJ2aWNlc1BhcnNlcih3c2RsT3V0cHV0Q29tbWFuZC5nZXRXZWJTZXJ2aWNlc1BhcnNlcigpKTsKLSAgICAgICAgICAgc2V0V2ViU2VydmljZVVSSSh3c2RsT3V0cHV0Q29tbWFuZC5nZXRXc2RsVVJJKCkpOwotICAgICAgICAgICAKLSAgICAgICAgICAgLy8gYnVnIDE1OTkxMTogb3VyIHN0YXJ0aW5nIHBvaW50IGlzIGEgd3NkbCwgd2Ugc2hvdWxkIG5vdCBuZWVkIHRvCi0gICAgICAgICAgIC8vIHJlZnJlc2ggdGhlIHJ1bnRpbWUgZXZlcnl0aW1lIHRoZSB1c2VyIHNwZWNpZnkgYSBuZXcgd3NkbCBwYXRoCi0gICAgICAgICAgIC8vIHJlZnJlc2hDbGllbnRSdW50aW1lU2VsZWN0aW9uKCk7Ci0gICAgIH0KLQkKLSAgcHJpdmF0ZSBjbGFzcyBXU0RMQnJvd3NlTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0JICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQotCX0KLQkgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJICAKLQkJCS8vIGJ1ZyAyNjkwOTcgLSBVc2UgdGhlIFdlYiBTZXJ2aWNlIENsaWVudCdzIGRpYWxvZyBzaGVsbCwgbm90IHRoZSBwbGF0Zm9ybSB3b3JrYmVuY2gncyBzaGVsbC4KLQkJCXdzZGxEaWFsb2dfID0gbmV3IFdTRExTZWxlY3Rpb25EaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSwgCi0JCQkJICAJCQkJCQluZXcgUGFnZUluZm8oQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9JTVBMX1NFTEVDVElPTiwgIiIsIAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCSAgCQkJCQkJewkKLQkJCQkgIAkJCQkJCQlwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkgIAkJCQkJCQl7CSAgCQkJCQkJIAotCQkJCSAgCQkJCQkJCSAgIHJldHVybiBuZXcgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIoKTsKLQkJCQkgIAkJCQkJCQl9Ci0JCQkJICAJCQkJCQl9KSk7Ci0KLQkJICAgd3NkbERpYWxvZ18uc2V0Q29tcG9uZW50TmFtZShnZXRDb21wb25lbnROYW1lKCkpOwotCQkgICB3c2RsRGlhbG9nXy5zZXRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0JCSAgIHdzZGxEaWFsb2dfLnNldFdlYlNlcnZpY2VVUkkoIHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkgKTsJCQotCQkgICAKLQkJICAgaW50IHJlc3VsdCA9IHdzZGxEaWFsb2dfLm9wZW4oKTsKLQkJICAgCi0JCSAgIGlmIChyZXN1bHQgPT0gRGlhbG9nLk9LKQotCQkgICB7Ci0JCQkgICBzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCSAgIHNlcnZpY2VJbXBsXy5zZXRUZXh0KHdzZGxEaWFsb2dfLmdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkpOwotCQkJICAgc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkgICAKLQkJCSAgIC8vIGNhbGwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQgdG8gY2Fycnkgb3V0IGFueSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgb2JqZWN0U2VsZWN0aW9uCi0JICAgICAgICAgICBjYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24ocHJvamVjdF8sCi0JICAgICAgICAJCQl3c2RsRGlhbG9nXy5nZXRDb21wb25lbnROYW1lKCksIHdzZGxEaWFsb2dfLmdldFdlYlNlcnZpY2VVUkkoKSk7Ci0JICAgICAgICAgICAKLQkJICAgICAgIHZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCQkgICAgICAgY2xpZW50V2lkZ2V0Xy5zZXRWYWxpZGF0aW9uU3RhdGUoVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTCk7Ci0JCSAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7IC8vdmFsaWRhdGUgdGhlIHBhZ2UKLQkJICAgfQotCQkgICB3c2RsRGlhbG9nXyA9IG51bGw7Ci0JICB9Ci0JfQotfQotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODkyYzhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyOCAgIDE1MDU2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MjggICAxNTEwNzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMjI1Mzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDbGllbnQgd2l6YXJkIHJ1bnRpbWUvc2VydmVyIGRlZmF1bHRpbmcgaXMgbm90IHJlc3BlY3RpbmcgdGhlIHByZWZlcmVuY2UKLSAqIDIwMDgwNTI4ICAgMjM0NDg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBXZWIgc2VydmljZSBjbGllbnQgZ2VuCi0gKiAyMDA4MDYxMyAgIDIzNjUyMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgT3ZlcndyaXRlIHNldHRpbmcgb24gV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGNvdXBsZWQgd2l0aCBwcmVmZXJlbmNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17ICAgIAotCXByaXZhdGUgaW50IGNsaWVudEdlbmVyYXRpb25fOwotCXByaXZhdGUgYm9vbGVhbiBkZXZlbG9wQ2xpZW50XzsKLQlwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBkZXBsb3lDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBpbnN0YWxsQ2xpZW50XzsKLQlwcml2YXRlIGJvb2xlYW4gc3RhcnRDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiB0ZXN0Q2xpZW50XzsKLQlwcml2YXRlIGJvb2xlYW4gY2xpZW50T25seV8gPSBmYWxzZTsKLQlwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIGNsaWVudFR5cGVSdW50aW1lU2VydmVyXzsKLQkgIAotCXB1YmxpYyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpIHsKLQl9Ci0JCi0JCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudE9ubHkgIFNldCB0byB0cnVlIGZvciBpZiBjYWxsZWQgZnJvbSBDbGllbnRXaWRnZXRXaXphcmQKLQkgKi8KLQlwdWJsaWMgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoYm9vbGVhbiBjbGllbnRPbmx5KSB7Ci0JCWNsaWVudE9ubHlfID0gY2xpZW50T25seTsKLQl9Ci0JCi0gIHB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0VGVzdFdlYlNlcnZpY2UoKSApOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldE1vbml0b3JXZWJTZXJ2aWNlKCkpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsQ2xpZW50XzsgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIGdldFNjZW5hcmlvQ29udGV4dCgpLmlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpIDsgIAotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gY2xpZW50R2VuZXJhdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpCi0gIHsgCi0gICAgcmV0dXJuICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCkgZ2V0RW52aXJvbm1lbnQoKSkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0gIH0KLSAgCi0gIC8vIEN1cnJlbnQgU2NlbmFyaW9Db250ZXh0IGlzIHVzZWQgdG8gZGVmYXVsdCB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgd2l6YXJkLiAgVGhlIAotICAvLyBwcm9wZXJ0aWVzIGluIFNjZW5hcmlvQ29udGV4dCBhcmUgbWFwcGVkIGluZGl2aWR1YWwuICBUaGVyZWZvcmUsIFNjZW5hcmlvQ29udGV4dAotICAvLyBzaG91bGQgbm90IGFsc28gYmUgbWFwcGVkLgotICBwcm90ZWN0ZWQgU2NlbmFyaW9Db250ZXh0IGdldFNjZW5hcmlvQ29udGV4dCgpCi0gIHsKLSAgICByZXR1cm4gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotICB9Ci0gIAotICAvLyBUT0RPIFNldCBjbGllbnQgbmFtZSBkZWZhdWx0cyBoZXJlLiAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpCi0gIHsKLQlpZiAoY2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXJfID09IG51bGwpIHsKLQkgICAgU3RyaW5nIHR5cGUgPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpOwotCSAgICBTdHJpbmcgcnVudGltZSAgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXREZWZhdWx0Q2xpZW50UnVudGltZVZhbHVlRm9yKHR5cGUpOwotCSAgICBTdHJpbmcgZmFjdG9yeUlEID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0RGVmYXVsdENsaWVudFNlcnZlclZhbHVlRm9yKHR5cGUpOwotCSAgICBjbGllbnRUeXBlUnVudGltZVNlcnZlcl8gPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgICAgCi0JICAgIGNsaWVudFR5cGVSdW50aW1lU2VydmVyXy5zZXRUeXBlSWQoIHR5cGUgKTsKLQkgICAgY2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFJ1bnRpbWVJZCggcnVudGltZSApOwotCSAgICBjbGllbnRUeXBlUnVudGltZVNlcnZlcl8uc2V0U2VydmVySWQoIGZhY3RvcnlJRCApOwotCX0KLQkKLSAgICByZXR1cm4gY2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0JICBkZWZhdWx0Q2xpZW50U2NhbGUoKTsKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBkZWZhdWx0Q2xpZW50U2NhbGUoKSB7Ci0JICBjbGllbnRHZW5lcmF0aW9uXyA9IGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEdlbmVyYXRlQ2xpZW50KCk7Ci0JICAKLQkgIGlmIChjbGllbnRPbmx5XyAmJiBjbGllbnRHZW5lcmF0aW9uXyA9PSBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSkgewotCQkgIGRldmVsb3BDbGllbnRfID0gdHJ1ZTsKLQkJICBhc3NlbWJsZUNsaWVudF8gPSB0cnVlOwotCQkgIGRlcGxveUNsaWVudF8gPSB0cnVlOwotCQkgIGNsaWVudEdlbmVyYXRpb25fID0gU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWTsKLQkgIH0gZWxzZSB7Ci0JCSAgZGV2ZWxvcENsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLQkJICBhc3NlbWJsZUNsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEU7Ci0JCSAgZGVwbG95Q2xpZW50XyA9IGNsaWVudEdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1k7Ci0JICB9Ci0JICBpbnN0YWxsQ2xpZW50XyA9IGNsaWVudEdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMOwotCSAgc3RhcnRDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUOwotCSAgdGVzdENsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsKLQkgIHJldHVybiBkZXZlbG9wQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVDbGllbnQoKSB7Ci0JICByZXR1cm4gYXNzZW1ibGVDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lDbGllbnQoKSB7Ci0JICByZXR1cm4gZGVwbG95Q2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRDbGllbnQoKSB7Ci0JICByZXR1cm4gc3RhcnRDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkgewotCSAgcmV0dXJuIHRlc3RDbGllbnRfOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NTExZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17ICAgIAotICBwcml2YXRlIGJvb2xlYW4gdGVzdFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gbW9uaXRvclNlcnZpY2U7Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgcmVzb3VyY2VDb250ZXh0XzsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBjbGllbnRJZHNfOwotICBwcml2YXRlIGJvb2xlYW4gaW5zdGFsbENsaWVudF87Ci0gIAotICBwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlVVJJXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBydW5UZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIHN0YXJ0Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RDbGllbnRfOyAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiB0ZXN0U2VydmljZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZSggYm9vbGVhbiB0ZXN0U2VydmljZSApCi0gIHsKLSAgICB0ZXN0U2VydmljZV8gPSB0ZXN0U2VydmljZTsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkKLSAgewotICAgIHJldHVybiBydW5UZXN0Q2xpZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJ1blRlc3RDbGllbnQoIGJvb2xlYW4gcnVuVGVzdENsaWVudCApCi0gIHsKLSAgICBydW5UZXN0Q2xpZW50XyA9IHJ1blRlc3RDbGllbnQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudCggYm9vbGVhbiBpbnN0YWxsQ2xpZW50KQotICB7Ci0gICAgaW5zdGFsbENsaWVudF8gPSBpbnN0YWxsQ2xpZW50OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0JcmV0dXJuIGluc3RhbGxDbGllbnRfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERldmVsb3BDbGllbnQoKSB7Ci0JCXJldHVybiBkZXZlbG9wQ2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wQ2xpZW50KGJvb2xlYW4gZGV2ZWxvcENsaWVudCkgewotCQl0aGlzLmRldmVsb3BDbGllbnRfID0gZGV2ZWxvcENsaWVudDsKLQl9CQotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlQ2xpZW50KCkgewotCQlyZXR1cm4gYXNzZW1ibGVDbGllbnRfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlQ2xpZW50KGJvb2xlYW4gYXNzZW1ibGVDbGllbnQpIHsKLQkJdGhpcy5hc3NlbWJsZUNsaWVudF8gPSBhc3NlbWJsZUNsaWVudDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCQlyZXR1cm4gZGVwbG95Q2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpIHsKLQkJdGhpcy5kZXBsb3lDbGllbnRfID0gZGVwbG95Q2xpZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRTdGFydENsaWVudCgpIHsKLQkJcmV0dXJuIHN0YXJ0Q2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdGFydENsaWVudChib29sZWFuIHN0YXJ0Q2xpZW50KSB7Ci0JCXRoaXMuc3RhcnRDbGllbnRfID0gc3RhcnRDbGllbnQ7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldFRlc3RDbGllbnQoKSB7Ci0JCXJldHVybiB0ZXN0Q2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0Q2xpZW50KGJvb2xlYW4gdGVzdENsaWVudCkgewotCQl0aGlzLnRlc3RDbGllbnRfID0gdGVzdENsaWVudDsKLQl9Ci0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBtb25pdG9yU2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvclNlcnZpY2UoYm9vbGVhbiBtb25pdG9yU2VydmljZSkKLSAgewotICAgIHRoaXMubW9uaXRvclNlcnZpY2UgPSBtb25pdG9yU2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotICB7Ci0gICAgCi0gICAgcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgKQotICB7Ci0gICAgcmVzb3VyY2VDb250ZXh0XyA9IGNvbnRleHQ7ICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkKLSAgeyAgICAKLSAgICByZXR1cm4gY2xpZW50SWRzXzsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzICkKLSAgewotICAgIGNsaWVudElkc18gPSBjbGllbnRJZHM7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgICAgcmV0dXJuIHdlYlNlcnZpY2VVUklfIDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgICB3ZWJTZXJ2aWNlVVJJXyA9IHVyaTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgICAgcmV0dXJuIHByb2plY3RfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb21wb25lbnROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgICBjb21wb25lbnROYW1lXyA9IG5hbWU7Ci0gIH0gCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgICByZXR1cm4gY29tcG9uZW50TmFtZV8gOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxNWNjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKiAyMDA2MDQyNiAgIDEzNTYxNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJTZXJ2aWNlUmVmSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlclNlcnZpY2VSZWZIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotLyoqCi0gKiBDb25maWdDbGllbnRIYW5kbGVyc1RyZWVXaWRnZXQKLSAqICAKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgewotCi0gIHByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgU3RyaW5nIG91dHB1dExvY2F0aW9uXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgd2ViU2VydmljZVJlZkNvbXBfOwotICBwcml2YXRlIENvbWJvIHdlYlNlcnZpY2VSZWZDb21ib187Ci0gIHByaXZhdGUgVGV4dCB3ZWJTZXJ2aWNlRGVzY1RleHRfID0gbnVsbDsKLSAgcHJpdmF0ZSBUYWJsZSBoYW5kbGVyc1RhYmxlXzsKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcl87Ci0gIHByaXZhdGUgQnV0dG9uIGFkZEJ1dHRvbl87Ci0gIHByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbl87Ci0gIHByaXZhdGUgQnV0dG9uIGdlblNrZWxldG9uUmFkaW9CdXR0b25fOwotICBwcml2YXRlIENvbXBvc2l0ZSBzb3VyY2VMb2NhdGlvbkNvbXBfOwotICBwcml2YXRlIENvbWJvIHNvdXJjZUxvY2F0aW9uQ29tYm9fOwotCi0gIHByaXZhdGUgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl87Ci0gIHByaXZhdGUgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIgY3VycmVudEhTUkhfOwotICBwcml2YXRlIEhhc2h0YWJsZSBwYXRoc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzTXVsdGlwbGVTZWxlY3Rpb25fID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZF87Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VSZWZOYW1lXzsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9DT0xVTU5fV0lEVEggPSAxNTA7Ci0KLSAgLy8gLS0tLVRPT0xUSVBTIFNlY3Rpb24tLS0tCi0gIC8qIENPTlRFWFRfSUQgSERMUjAwMDEgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfSERMUl9XU19IQU5ETEVSUyA9ICJIRExSMDAwMSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKiBDT05URVhUX0lEIEhETFIwMDAyIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0hETFJfR0VOX1NLRUxFVE9OID0gIkhETFIwMDAyIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qIENPTlRFWFRfSUQgSERMUjAwMDMgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfQ09NQk9fU09VUkNFX0xPQyA9ICJIRExSMDAwMyI7IC8vJE5PTi1OTFMtMSQKLQotICAvKiBDT05URVhUX0lEIEhETFIwMDA0IGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1dTX0NMSUVOVF9SRUYgPSAiSERMUjAwMDQiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgcHVibGljIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQoKSB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKSB7Ci0KLSAgICBVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhwbHVnaW5JZF8pOwotCi0gICAgcGFyZW50XyA9IHBhcmVudDsKLQotICAgIC8vIFdlYiBzZXJ2aWNlIHJlZmVyZW5jZSBjb21ibwotICAgIHdlYlNlcnZpY2VSZWZDb21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHBhcmVudF8sIDIpOwotCi0gICAgQ29tcG9zaXRlIGRpc3BsYXlDb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnRfLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBncmlkbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpOwotICAgIGRpc3BsYXlDb21wLnNldExheW91dChncmlkbGF5b3V0KTsKLSAgICBkaXNwbGF5Q29tcC5zZXRMYXlvdXREYXRhKHVpVXRpbHMuY3JlYXRlRmlsbEFsbCgpKTsKLQotICAgIGZpbmFsIENvbXBvc2l0ZSBoYW5kbGVyc0NvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShkaXNwbGF5Q29tcCwgMSk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHxHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcgCi0gICAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgaGFuZGxlcnNDb21wLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotICAgIGhhbmRsZXJzQ29tcC5zZXRTaXplKDEzMCwgNjAwKTsKLSAgICAKLSAgICBDb21wb3NpdGUgYnV0dG9uc0NvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShkaXNwbGF5Q29tcCwgMSk7Ci0gICAgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKTsKLSAgICBidXR0b25zQ29tcC5zZXRMYXlvdXREYXRhKGdyaWRkYXRhKTsKLQotICAgIFRleHQgaGFuZGxlcnNUZXh0ID0gbmV3IFRleHQoaGFuZGxlcnNDb21wLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBoYW5kbGVyc1RleHQuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUlNfQ09ORklHKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICBoYW5kbGVyc1RleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBoYW5kbGVyc1RhYmxlXyA9IHVpVXRpbHMuY3JlYXRlVGFibGUoaGFuZGxlcnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9FRElUX1dTX0hBTkRMRVJTLCBJTkZPUE9QX0hETFJfV1NfSEFORExFUlMsIFNXVC5NVUxUSSB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5CT1JERVIpOwotICAgIGhhbmRsZXJzVGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgaGFuZGxlcnNUYWJsZV8uc2V0TGluZXNWaXNpYmxlKHRydWUpOwotCi0gICAgLy8gZW1wdHkgc3BhY2UKLSAgICBMYWJlbCB3c0xhYmVsID0gbmV3IExhYmVsKGJ1dHRvbnNDb21wLCBTV1QuTk9ORSk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgd3NMYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIEJ1dHRvbiBtb3ZlVXBCdXR0b24gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uc0NvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fTU9WRV9VUCwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgbXVHcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IG11c2l6ZSA9IG1vdmVVcEJ1dHRvbi5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgIG1vdmVVcEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZU1vdmVVcEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBCdXR0b24gbW92ZURvd25CdXR0b24gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uc0NvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fTU9WRV9ET1dOLCBudWxsLCBudWxsKTsKLSAgICBHcmlkRGF0YSBtZEdyaWRkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgUG9pbnQgbWRzaXplID0gbW92ZURvd25CdXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBtb3ZlRG93bkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZU1vdmVEb3duQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIGVtcHR5IHNwYWNlCi0gICAgd3NMYWJlbCA9IG5ldyBMYWJlbChidXR0b25zQ29tcCwgU1dULk5PTkUpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBhZGRCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX0FERCwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgYWRkR3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsgCi0gICAgUG9pbnQgYWRkU2l6ZSA9IGFkZEJ1dHRvbl8uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBhZGRCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJlbW92ZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uc0NvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fUkVNT1ZFLCBudWxsLCBudWxsKTsKLSAgICBHcmlkRGF0YSByZW1HcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IHJlbVNpemUgPSByZW1vdmVCdXR0b25fLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgcmVtb3ZlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgZW5hYmxlUmVtb3ZlKGZhbHNlKTsKLQotICAgIC8vIHNldCB0aGUgd2lkdGggdG8gdGhlIG1heCBvZiB0aGUgYnV0dG9uIGxhYmVscwotICAgIGludCB3aWR0aEhpbnQgPSAwOwotICAgIGludFtdIHNpemVzID0gbmV3IGludFtde211c2l6ZS54LCBtZHNpemUueCwgYWRkU2l6ZS54LCByZW1TaXplLngsIDEwMH07Ci0gICAgZm9yKGludCBqID0gMDsgaiA8IHNpemVzLmxlbmd0aDsgaisrKSB7Ci0gICAgCWlmIChzaXplc1tqXSA+IHdpZHRoSGludCkKLSAgICAJd2lkdGhIaW50ID0gc2l6ZXNbal07Ci0gICAgfQotICAgIG11R3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIG1kR3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIGFkZEdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICByZW1HcmlkZGF0YS53aWR0aEhpbnQgPSB3aWR0aEhpbnQ7Ci0gICAgCi0gICAgbW92ZVVwQnV0dG9uLnNldExheW91dERhdGEobXVHcmlkZGF0YSk7Ci0gICAgbW92ZURvd25CdXR0b24uc2V0TGF5b3V0RGF0YShtZEdyaWRkYXRhKTsKLSAgICBhZGRCdXR0b25fLnNldExheW91dERhdGEoYWRkR3JpZGRhdGEpOwotICAgIHJlbW92ZUJ1dHRvbl8uc2V0TGF5b3V0RGF0YShyZW1HcmlkZGF0YSk7Ci0gICAgCi0gICAgLy8gdGFibGUgc3R1ZmYKLSAgICBTdHJpbmdbXSBjb2x1bW5zXyA9IG5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9IQU5ETEVSX05BTUUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJMRV9IQU5ETEVSX0NMQVNTfTsKLQotICAgIGZpbmFsIFRhYmxlQ29sdW1uW10gdGFibGVDb2xzID0gbmV3IFRhYmxlQ29sdW1uW2NvbHVtbnNfLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykgewotICAgICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oaGFuZGxlcnNUYWJsZV8sIGkpOwotICAgICAgdGFibGVDb2x1bW4uc2V0VGV4dChjb2x1bW5zX1tpXSk7Ci0gICAgICB0YWJsZUNvbHVtbi5zZXRBbGlnbm1lbnQoU1dULkxFRlQpOwotICAgICAgdGFibGVDb2x1bW4uc2V0V2lkdGgoREVGQVVMVF9DT0xVTU5fV0lEVEgpOwotICAgICAgdGFibGVDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOwotICAgICAgdGFibGVDb2xzW2ldID0gdGFibGVDb2x1bW47Ci0gICAgfQotCi0gICAgaGFuZGxlcnNDb21wLmFkZENvbnRyb2xMaXN0ZW5lcihuZXcgQ29udHJvbEFkYXB0ZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBlKSB7Ci0gICAgICAgICAgUmVjdGFuZ2xlIGFyZWEgPSBoYW5kbGVyc0NvbXAuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgICAgIFBvaW50IHByZWZlcnJlZFNpemUgPSBoYW5kbGVyc1RhYmxlXy5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgICAgICAgIGludCB3aWR0aCA9IGFyZWEud2lkdGggLSAyKmhhbmRsZXJzVGFibGVfLmdldEJvcmRlcldpZHRoKCktMTA7Ci0gICAgICAgICAgaWYgKHByZWZlcnJlZFNpemUueSA+IGFyZWEuaGVpZ2h0ICsgaGFuZGxlcnNUYWJsZV8uZ2V0SGVhZGVySGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFN1YnRyYWN0IHRoZSBzY3JvbGxiYXIgd2lkdGggZnJvbSB0aGUgdG90YWwgY29sdW1uIHdpZHRoCi0gICAgICAgICAgICAvLyBpZiBhIHZlcnRpY2FsIHNjcm9sbGJhciB3aWxsIGJlIHJlcXVpcmVkCi0gICAgICAgICAgICBQb2ludCB2QmFyU2l6ZSA9IGhhbmRsZXJzVGFibGVfLmdldFZlcnRpY2FsQmFyKCkuZ2V0U2l6ZSgpOwotICAgICAgICAgICAgd2lkdGggLT0gdkJhclNpemUueDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgUG9pbnQgb2xkU2l6ZSA9IGhhbmRsZXJzVGFibGVfLmdldFNpemUoKTsKLSAgICAgICAgICBpZiAob2xkU2l6ZS54ID4gYXJlYS53aWR0aCkgewotICAgICAgICAgICAgLy8gdGFibGUgaXMgZ2V0dGluZyBzbWFsbGVyIHNvIG1ha2UgdGhlIGNvbHVtbnMgCi0gICAgICAgICAgICAvLyBzbWFsbGVyIGZpcnN0IGFuZCB0aGVuIHJlc2l6ZSB0aGUgdGFibGUgdG8KLSAgICAgICAgICAgIC8vIG1hdGNoIHRoZSBjbGllbnQgYXJlYSB3aWR0aAotICAgICAgICAgICAgdGFibGVDb2xzWzBdLnNldFdpZHRoKHdpZHRoLzIpOwotICAgICAgICAgICAgdGFibGVDb2xzWzFdLnNldFdpZHRoKHdpZHRoIC0gdGFibGVDb2xzWzBdLmdldFdpZHRoKCkpOwotICAgICAgICAgICAgaGFuZGxlcnNUYWJsZV8uc2V0U2l6ZShhcmVhLndpZHRoLCBhcmVhLmhlaWdodCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHRhYmxlIGlzIGdldHRpbmcgYmlnZ2VyIHNvIG1ha2UgdGhlIHRhYmxlIAotICAgICAgICAgICAgLy8gYmlnZ2VyIGZpcnN0IGFuZCB0aGVuIG1ha2UgdGhlIGNvbHVtbnMgd2lkZXIKLSAgICAgICAgICAgIC8vIHRvIG1hdGNoIHRoZSBjbGllbnQgYXJlYSB3aWR0aAotICAgICAgICAgICAgICBoYW5kbGVyc1RhYmxlXy5zZXRTaXplKGFyZWEud2lkdGgsIGFyZWEuaGVpZ2h0KTsKLSAgICAgICAgICAgICAgdGFibGVDb2xzWzBdLnNldFdpZHRoKHdpZHRoLzIpOwotICAgICAgICAgICAgICB0YWJsZUNvbHNbMV0uc2V0V2lkdGgod2lkdGggLSB0YWJsZUNvbHNbMF0uZ2V0V2lkdGgoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsgICAgCi0gICAgCi0gICAgdGFibGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKGhhbmRsZXJzVGFibGVfKTsKLSAgICBDb250cm9sIGNvbnRyb2wgPSB0YWJsZVZpZXdlcl8uZ2V0Q29udHJvbCgpOwotCi0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb250cm9sLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICB0YWJsZVZpZXdlcl8uc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW5zXyk7Ci0gICAgdGFibGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgTGlzdENvbnRlbnRQcm92aWRlcigpKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgTGlzdExhYmVsUHJvdmlkZXIoKSk7Ci0gICAgdGFibGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgZW5hYmxlUmVtb3ZlKHRydWUpOwotICAgICAgfQotICAgIH0pOwotICAgCi0gICAgLy8gZ2VuIHNrZWxldG9uIGNoZWNrIGJveAotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fID0gdWlVdGlscy5jcmVhdGVDaGVja2JveChwYXJlbnRfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX0dFTl9TS0VMRVRPTiwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfQlVUVE9OX0dFTl9TS0VMRVRPTiwgSU5GT1BPUF9IRExSX0dFTl9TS0VMRVRPTik7Ci0gICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotICAgICAgICBoYW5kbGVHZW5Ta2VsZXRvblJhZGlvQnV0dG9uKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBzb3VyY2UgbG9jYXRpb24gY29tYm8KLSAgICBzb3VyY2VMb2NhdGlvbkNvbXBfID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50XywgMik7Ci0gICAgc291cmNlTG9jYXRpb25Db21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHNvdXJjZUxvY2F0aW9uQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DT01CT19TT1VSQ0VfTE9DLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9DT01CT19TT1VSQ0VfTE9DLCBJTkZPUE9QX0NPTUJPX1NPVVJDRV9MT0MsCi0gICAgICAgIFNXVC5SRUFEX09OTFkpOwotICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgaGFuZGxlU291cmNlTG9jYXRpb25Db21ibyhldnQpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvLyBDYWxsZWQgYXQgc3RhcnQKLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlSGFuZGxlcnNUYWJsZSgpIHsKLSAgICB0cnkgewotICAgICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLQotICAgICAgLy8gcHJvY2VzcyBmb3IgbXVsdGlwbGUgc2VydmljZSBzZWxlY3Rpb24KLSAgICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXykgewotICAgICAgICB3ZWJTZXJ2aWNlRGVzY1RleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KHdlYlNlcnZpY2VSZWZDb21wXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NPTUJPX1dTX0NMSUVOVF9SRUYsIAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NfQ0xJRU5UX1JFRiwgSU5GT1BPUF9XU19DTElFTlRfUkVGLCBTV1QuUkVBRF9PTkxZKTsKLSAgICAgICAgaWYgKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyE9bnVsbCl7Ci0gICAgICAgICAgY3VycmVudEhTUkhfID0gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfWzBdOwotICAgICAgICAgIFN0cmluZyB0ZXh0ID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19URVhUX05VTV9PRl9DTElFTlRTLCBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXy5sZW5ndGgpKTsgICAgICAgICAgCi0gICAgICAgICAgd2ViU2VydmljZURlc2NUZXh0Xy5zZXRUZXh0KHRleHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbXBfLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICByZWZyZXNoKCk7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAKLSAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8od2ViU2VydmljZVJlZkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fV1NfQ0xJRU5UX1JFRiwgCi0gICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU19DTElFTlRfUkVGLCBJTkZPUE9QX1dTX0NMSUVOVF9SRUYsIFNXVC5SRUFEX09OTFkpOwotICAgICAgICB3ZWJTZXJ2aWNlUmVmQ29tYm9fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotICAgICAgICAgICAgaGFuZGxlV2ViU2VydmljZVJlZkNvbWJvKGV2dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBTdHJpbmdbXSB3c1JlZk5hbWVzID0gSGFuZGxlclNlcnZpY2VSZWZIZWxwZXIuZ2V0QWxsU2VydmljZVJlZk5hbWVzKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyk7IAotICAgICAgICB3ZWJTZXJ2aWNlUmVmQ29tYm9fLnNldEl0ZW1zKHdzUmVmTmFtZXMpOwotICAKLSAgICAgICAgaWYgKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXy5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXy5zZWxlY3QoMCk7Ci0gICAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZiAoc2VydmljZVJlZk5hbWVfICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHdlYlNlcnZpY2VSZWZDb21ib18uaW5kZXhPZihzZXJ2aWNlUmVmTmFtZV8pOwotICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB3ZWJTZXJ2aWNlUmVmQ29tYm9fLnNlbGVjdChpbmRleCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18uc2VsZWN0KDApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBzZXQgaGFuZGxlciB0YWJsZQotICAgICAgICBIYW5kbGVyU2VydmljZVJlZkhvbGRlciBoc3JoID0gSGFuZGxlclNlcnZpY2VSZWZIZWxwZXIuZ2V0Rm9yU2VydmljZVJlZk5hbWUoaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfLCB3ZWJTZXJ2aWNlUmVmQ29tYm9fLmdldFRleHQoKSk7Ci0gICAgICAgIGlmIChoc3JoICE9IG51bGwpIHsKLSAgICAgICAgICBjdXJyZW50SFNSSF8gPSBoc3JoOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoc3JoLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnNldElucHV0KGhhbmRsZXJzKTsKLSAgICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBzZXQgb3V0cHV0IGZvbGRlcgotICAgICAgICBzZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpOwotICAgICAgfQotICAgICAgcGFyZW50Xy5nZXRTaGVsbCgpLnNldFNpemUoNTMwLCA2NTApOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNnZXRTdGF0dXMoKQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgewotICAgIElTdGF0dXMgZmluYWxTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXykKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5pbmZvU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfTVVMVElQTEVfQ0xJRU5UU19DT05GSUcpOwotICAgIHJldHVybiBmaW5hbFN0YXR1czsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0KLSAgICBBZGRIYW5kbGVyRGlhbG9nIGRpYWxvZyA9IG5ldyBBZGRIYW5kbGVyRGlhbG9nKHBhcmVudF8uZ2V0U2hlbGwoKSwgdHJ1ZSk7Ci0gICAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFNpemUoIDUwMCwgMjAwICk7Ci0gICAgCi0gICAgaW50IHJlc3VsdCA9IGRpYWxvZy5vcGVuKCk7Ci0KLSAgICBpZiAocmVzdWx0ID09IFdpbmRvdy5PSykgewotICAgICAgU3RyaW5nIG5hbWUgPSBkaWFsb2cuZ2V0TmFtZSgpOwotICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGRpYWxvZy5nZXRDbGFzc05hbWUoKTsKLQotICAgICAgSGFuZGxlclRhYmxlSXRlbSBoaSA9IG5ldyBIYW5kbGVyVGFibGVJdGVtKCk7Ci0gICAgICBoaS5zZXRIYW5kbGVyTmFtZShuYW1lKTsKLSAgICAgIGhpLnNldEhhbmRsZXJDbGFzc05hbWUoY2xhc3NOYW1lKTsKLSAgICAgIAotICAgICAgU2VydmljZVJlZiBzZXJ2aWNlUmVmID0gY3VycmVudEhTUkhfLmdldFNlcnZpY2VSZWYoKTsKLSAgICAgIGhpLnNldFdzRGVzY1JlZihzZXJ2aWNlUmVmKTsKLSAgICAgIGN1cnJlbnRIU1JIXy5nZXRIYW5kbGVyTGlzdCgpLmFkZChoaSk7Ci0gICAgfQotCi0gICAgcmVmcmVzaCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICBoYW5kbGVEZWxldGVLZXlQcmVzc2VkKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNb3ZlVXBCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgaW50IGluZGV4ID0gdGFibGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpIHsKLSAgICAgIGlmIChpbmRleCA+IDApIHsKLSAgICAgICAgaWYgKGN1cnJlbnRIU1JIXyE9bnVsbCkgewotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBjdXJyZW50SFNSSF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaGFuZGxlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBoYW5kbGVycy5hZGQoIGluZGV4IC0gMSwgb2JqZWN0KTsKLSAgICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0KLSAgICBpbnQgaW5kZXggPSB0YWJsZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgaWYgKGN1cnJlbnRIU1JIXyE9bnVsbCl7Ci0gICAgICAgIExpc3QgaGFuZGxlcnMgPSBjdXJyZW50SFNSSF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgaWYgKGluZGV4IDwgaGFuZGxlcnMuc2l6ZSgpIC0gMSkgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBoYW5kbGVycy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIGhhbmRsZXJzLmFkZChpbmRleCArIDEsIG9iamVjdCk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlU291cmNlTG9jYXRpb25Db21ibyhTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgIG91dHB1dExvY2F0aW9uXyA9IHNvdXJjZUxvY2F0aW9uQ29tYm9fLmdldFRleHQoKTsKLSAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICBjdXJyZW50SFNSSF8uc2V0U291cmNlT3V0cHV0UGF0aChvdXRwdXRQYXRoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUdlblNrZWxldG9uUmFkaW9CdXR0b24oKSB7Ci0gICAgaWYgKGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmlzRW5hYmxlZCgpKSB7Ci0gICAgICBpZiAoZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIHsKLSAgICAgICAgdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF8gPSB0cnVlOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gZmFsc2U7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVdlYlNlcnZpY2VSZWZDb21ibyhTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgaWYgKHdlYlNlcnZpY2VSZWZDb21ib18hPW51bGwgJiYgd2ViU2VydmljZVJlZkNvbWJvXy5pc0VuYWJsZWQoKSkgewotICAgICAgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIgaHNyaCA9IEhhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmdldEZvclNlcnZpY2VSZWZOYW1lKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXywgd2ViU2VydmljZVJlZkNvbWJvXy5nZXRUZXh0KCkpOwotICAgICAgY3VycmVudEhTUkhfID0gaHNyaDsgICAgICAKLSAgICAgIHJlZnJlc2goKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzR2VuU2tlbGV0b25FbmFibGVkXyl7Ci0gICAgICBzZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpOwotICAgIH0KLSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzR2VuU2tlbGV0b25FbmFibGVkXy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzR2VuU2tlbGV0b25FbmFibGVkXygpIHsKLSAgICByZXR1cm4gaXNHZW5Ta2VsZXRvbkVuYWJsZWRfOwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIgewotCi0gICAgcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpIHsKLQotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEhhbmRsZXJUYWJsZUl0ZW0pIHsKLSAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSkgb2JqZWN0OwotICAgICAgICBpZiAoY29sdW1uSW5kZXggPT0gMCkgewotCi0gICAgICAgICAgcmV0dXJuIGh0aS5nZXRIYW5kbGVyTmFtZSgpICE9IG51bGwgPyBodGkuZ2V0SGFuZGxlck5hbWUoKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvbHVtbkluZGV4ID09IDEpIHsgcmV0dXJuIGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkgIT0gbnVsbCA/IGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkgOiAiIjsgfQotICAgICAgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgZW5hYmxlUmVtb3ZlKGJvb2xlYW4gZW5hYmxlZCkgewotICAgIHJlbW92ZUJ1dHRvbl8uc2V0RW5hYmxlZChlbmFibGVkICYmICF0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0Q29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIgewotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBlbGVtZW50KSB7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFZlY3RvcikgeyByZXR1cm4gKChWZWN0b3IpIGVsZW1lbnQpLnRvQXJyYXkoKTsgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZCwgT2JqZWN0IG5ld29iaikgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVsZXRlZChPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpIHsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkgewotICAgICAgaW50IHNlbGVjdGlvbkluZGV4ID0gaGFuZGxlcnNUYWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpewotICAgICAgICBjdXJyZW50SFNSSF8uZ2V0SGFuZGxlckxpc3QoKS5yZW1vdmUoc2VsZWN0aW9uSW5kZXgpOwotICAgICAgfQotICAgICAgcmVmcmVzaCgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIHRhYmxlVmlld2VyXy5zZXRJbnB1dChudWxsKTsKLSAgICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgIHRhYmxlVmlld2VyXy5zZXRJbnB1dChoYW5kbGVycyk7Ci0gICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEdlblNrZWxldG9uRW5hYmxlZChib29sZWFuIGlzR2VuU2tlbGV0b25FbmFibGVkKSB7Ci0gICAgdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF8gPSBpc0dlblNrZWxldG9uRW5hYmxlZDsKLSAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRTZWxlY3Rpb24oaXNHZW5Ta2VsZXRvbkVuYWJsZWQpOwotCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5Ta2VsZXRvbkVuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFNvdXJjZU91dHB1dExvY2F0aW9uKCl7Ci0gICAgaWYgKGN1cnJlbnRIU1JIXyE9bnVsbCl7ICAgIAotICAgICAgSVByb2plY3QgcHJvamVjdCA9IGN1cnJlbnRIU1JIXy5nZXRQcm9qZWN0KCk7Ci0gICAgICBpZiAocHJvamVjdCE9bnVsbCl7Ci0gICAgICAgIElQYXRoW11sb2NhdGlvbnMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJvamVjdCk7Ci0gICAgICAgIFN0cmluZ1tdIHBhdGhzID0gbmV3IFN0cmluZ1tsb2NhdGlvbnMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBwYXRoc1tpXSA9IGxvY2F0aW9uc1tpXS50b1N0cmluZygpOwotICAgICAgICAgIHBhdGhzVGFibGVfLnB1dChwYXRoc1tpXSwgbG9jYXRpb25zW2ldKTsKLSAgICAgICAgfQotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRJdGVtcyhwYXRocyk7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNlbGVjdCgwKTsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICAvLyBzZXQgaW4gbW9kZWwKLSAgICAgIG91dHB1dExvY2F0aW9uXyA9IHNvdXJjZUxvY2F0aW9uQ29tYm9fLmdldFRleHQoKTsKLSAgICAgIElQYXRoIG91dHB1dFBhdGggPSAoSVBhdGgpIHBhdGhzVGFibGVfLmdldChvdXRwdXRMb2NhdGlvbl8pOwotICAgICAgY3VycmVudEhTUkhfLnNldFNvdXJjZU91dHB1dFBhdGgob3V0cHV0UGF0aCk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbnRlcm5hbGl6ZSgpewotICAgIHBvcHVsYXRlSGFuZGxlcnNUYWJsZSgpOwotICB9IAotICAKLSAgLyoqCi0gICAqIEluaXRpYWwgc2VsZWN0aW9uCi0gICAqIEBwYXJhbSB3c1JlZk5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSZWZOYW1lKFN0cmluZyB3c1JlZk5hbWUpIHsKLSAgICBzZXJ2aWNlUmVmTmFtZV8gPSB3c1JlZk5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogdHJ1ZSBpZiBtdWx0aXBsZSBjbGllbnRzIGFyZSBzZWxlY3RlZAotICAgKiBAcGFyYW0gaXNNdWxpdHBsZVNlbGVjdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SXNNdWx0aXBsZVNlbGVjdGlvbihib29sZWFuIGlzTXVsaXRwbGVTZWxlY3Rpb24pIHsKLSAgICB0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25fID0gaXNNdWxpdHBsZVNlbGVjdGlvbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFuIGFycmF5IG9mIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoYW5kbGVySG9sZGVycyl7Ci0gICAgdGhpcy5oYW5kbGVyU2VydmljZVJlZkhvbGRlcl8gPSBoYW5kbGVySG9sZGVyczsKLSAgfQotICAKLSAgcHVibGljIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gZ2V0SGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoKXsKLSAgICByZXR1cm4gdGhpcy5oYW5kbGVyU2VydmljZVJlZkhvbGRlcl87Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Db25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2IxNWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Db25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKiAyMDA2MDQyNiAgIDEzNTYxNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTI5ICAgMTQzNTE4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJEZXNjcmlwdGlvbkhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0vKioKLSAqIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RyZWVXaWRnZXQKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgewotCi0gIHByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50XzsKLSAgcHJpdmF0ZSBUYWJsZSBoYW5kbGVyc1RhYmxlXzsKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcl87Ci0gIHByaXZhdGUgQ29tcG9zaXRlIHdlYlNlcnZpY2VEZXNjQ29tcF87Ci0gIHByaXZhdGUgQ29tYm8gd2ViU2VydmljZURlc2NDb21ib18gPSBudWxsOwotICBwcml2YXRlIFRleHQgd2ViU2VydmljZURlc2NUZXh0XyA9IG51bGw7Ci0gIHByaXZhdGUgQnV0dG9uIGFkZEJ1dHRvbl87Ci0gIHByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbl87Ci0gIHByaXZhdGUgQnV0dG9uIGdlblNrZWxldG9uUmFkaW9CdXR0b25fOwotICBwcml2YXRlIENvbXBvc2l0ZSBzb3VyY2VMb2NhdGlvbkNvbXBfOwotICBwcml2YXRlIENvbWJvIHNvdXJjZUxvY2F0aW9uQ29tYm9fOwotICAKLSAgcHJpdmF0ZSBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfOwotICBwcml2YXRlIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlciBjdXJyZW50SERIXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGF0aHNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7ICAvLyBhdmFpbGFibGUgcGF0aHMgZm9yIGNvbWJvICAKLSAgcHJpdmF0ZSBTdHJpbmcgb3V0cHV0TG9jYXRpb25fOyAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBwYXRoIGZyb20gY29tYm8KLSAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb25OYW1lXyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXyA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWRfOwotCi0gIHByaXZhdGUgaW50IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gMTAwOwotCi0gIC8vIC0tLS1UT09MVElQUyBTZWN0aW9uLS0tLQotICAvKiBDT05URVhUX0lEIFNITEQwMDAxIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0hETFJfV1NfSEFORExFUlMgPSAiU0hETDAwMDEiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBTSERMMDAwMiBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9IRExSX0dFTl9TS0VMRVRPTiA9ICJTSERMMDAwMiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKiBDT05URVhUX0lEIFNIREwwMDAzIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0NPTUJPX1NPVVJDRV9MT0MgPSAiU0hETDAwMDMiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBTSERMMDAwNCBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU19TRVJWSUNFX0RFU0MgPSAiU0hETDAwMDQiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgcHVibGljIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0KCkgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikgewotICAgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0KLSAgICBwYXJlbnRfID0gcGFyZW50OwotCi0gICAgLy8gV2ViIHNlcnZpY2UgZGVzY3JpcHRpb24gY29tcG9zaXRlIChjb21iby90ZXh0IHRvIGJlIGNyZWF0ZWQgbGF0ZXIpCi0gICAgd2ViU2VydmljZURlc2NDb21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHBhcmVudF8sIDIpOwotICAgIAotICAgIENvbXBvc2l0ZSBkaXNwbGF5Q29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50XywgU1dULk5PTkUpOwotCi0gICAgR3JpZExheW91dCBncmlkbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpOwotICAgIGRpc3BsYXlDb21wLnNldExheW91dChncmlkbGF5b3V0KTsKLSAgICBkaXNwbGF5Q29tcC5zZXRMYXlvdXREYXRhKHVpVXRpbHMuY3JlYXRlRmlsbEFsbCgpKTsKLQotICAgIGZpbmFsIENvbXBvc2l0ZSBoYW5kbGVyc0NvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShkaXNwbGF5Q29tcCwgMSk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HCi0gICAgICAgIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBoYW5kbGVyc0NvbXAuc2V0TGF5b3V0RGF0YShncmlkZGF0YSk7Ci0gICAgaGFuZGxlcnNDb21wLnNldFNpemUoMTMwLCA2MDApOwotICAgIAotICAgIENvbXBvc2l0ZSBidXR0b25zQ29tcCA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKGRpc3BsYXlDb21wLCAxKTsKLSAgICBncmlkZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpOwotICAgIGJ1dHRvbnNDb21wLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotCi0gICAgVGV4dCBoYW5kbGVyc1RleHQgPSBuZXcgVGV4dChoYW5kbGVyc0NvbXAsIFNXVC5SRUFEX09OTFkpOwotICAgIGhhbmRsZXJzVGV4dC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9IQU5ETEVSU19DT05GSUcpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIGhhbmRsZXJzVGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICAKLSAgICBoYW5kbGVyc1RhYmxlXyA9IHVpVXRpbHMuY3JlYXRlVGFibGUoaGFuZGxlcnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9FRElUX1dTX0hBTkRMRVJTLCBJTkZPUE9QX0hETFJfV1NfSEFORExFUlMsIFNXVC5NVUxUSQotICAgICAgICB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5CT1JERVIpOwotICAgIGhhbmRsZXJzVGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgaGFuZGxlcnNUYWJsZV8uc2V0TGluZXNWaXNpYmxlKHRydWUpOwotCi0gICAgLy8gZW1wdHkgc3BhY2UKLSAgICBMYWJlbCB3c0xhYmVsID0gbmV3IExhYmVsKGJ1dHRvbnNDb21wLCBTV1QuTk9ORSk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgd3NMYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIEJ1dHRvbiBtb3ZlVXBCdXR0b24gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uc0NvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fTU9WRV9VUCwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgbXVHcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IG11c2l6ZSA9IG1vdmVVcEJ1dHRvbi5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgIG1vdmVVcEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZU1vdmVVcEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBCdXR0b24gbW92ZURvd25CdXR0b24gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uc0NvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fTU9WRV9ET1dOLCBudWxsLCBudWxsKTsKLSAgICBHcmlkRGF0YSBtZEdyaWRkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgUG9pbnQgbWRzaXplID0gbW92ZURvd25CdXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBtb3ZlRG93bkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZU1vdmVEb3duQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIGVtcHR5IHNwYWNlCi0gICAgd3NMYWJlbCA9IG5ldyBMYWJlbChidXR0b25zQ29tcCwgU1dULk5PTkUpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBhZGRCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX0FERCwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgYWRkR3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsgCi0gICAgUG9pbnQgYWRkU2l6ZSA9IGFkZEJ1dHRvbl8uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBhZGRCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJlbW92ZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uc0NvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fUkVNT1ZFLCBudWxsLCBudWxsKTsKLSAgICBHcmlkRGF0YSByZW1HcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IHJlbVNpemUgPSByZW1vdmVCdXR0b25fLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgcmVtb3ZlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgZW5hYmxlUmVtb3ZlKGZhbHNlKTsKLQotICAgIGludCB3aWR0aEhpbnQgPSAwOwotICAgIGludFtdIHNpemVzID0gbmV3IGludFtde211c2l6ZS54LCBtZHNpemUueCwgYWRkU2l6ZS54LCByZW1TaXplLngsIDEwMH07Ci0gICAgZm9yKGludCBqID0gMDsgaiA8IHNpemVzLmxlbmd0aDsgaisrKSB7Ci0gICAgCWlmIChzaXplc1tqXSA+IHdpZHRoSGludCkKLSAgICAJd2lkdGhIaW50ID0gc2l6ZXNbal07Ci0gICAgfQotICAgIG11R3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIG1kR3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIGFkZEdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICByZW1HcmlkZGF0YS53aWR0aEhpbnQgPSB3aWR0aEhpbnQ7Ci0gICAgCi0gICAgbW92ZVVwQnV0dG9uLnNldExheW91dERhdGEobXVHcmlkZGF0YSk7Ci0gICAgbW92ZURvd25CdXR0b24uc2V0TGF5b3V0RGF0YShtZEdyaWRkYXRhKTsKLSAgICBhZGRCdXR0b25fLnNldExheW91dERhdGEoYWRkR3JpZGRhdGEpOwotICAgIHJlbW92ZUJ1dHRvbl8uc2V0TGF5b3V0RGF0YShyZW1HcmlkZGF0YSk7Ci0gICAgCi0gICAgLy8gdGFibGUgc3R1ZmYgaGVyZQotICAgIFN0cmluZ1tdIGNvbHVtbnNfID0gbmV3IFN0cmluZ1tdIHsgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0hBTkRMRVJfTkFNRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkxFX0hBTkRMRVJfQ0xBU1MsCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9IQU5ETEVSX1BPUlR9OwotCi0gICAgZmluYWwgVGFibGVDb2x1bW5bXSB0YWJsZUNvbHMgPSBuZXcgVGFibGVDb2x1bW5bY29sdW1uc18ubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBUYWJsZUNvbHVtbiB0YWJsZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihoYW5kbGVyc1RhYmxlXywgU1dULkxFRlQpOwotICAgICAgdGFibGVDb2x1bW4uc2V0VGV4dChjb2x1bW5zX1tpXSk7Ci0gICAgICB0YWJsZUNvbHVtbi5zZXRBbGlnbm1lbnQoU1dULkxFRlQpOwotICAgICAgdGFibGVDb2x1bW4uc2V0V2lkdGgoREVGQVVMVF9DT0xVTU5fV0lEVEgpOwotICAgICAgdGFibGVDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOwotICAgICAgdGFibGVDb2xzW2ldID0gdGFibGVDb2x1bW47Ci0gICAgfQotICAgIGhhbmRsZXJzQ29tcC5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xBZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZSkgewotICAgICAgICBSZWN0YW5nbGUgYXJlYSA9IGhhbmRsZXJzQ29tcC5nZXRDbGllbnRBcmVhKCk7Ci0gICAgICAgIFBvaW50IHByZWZlcnJlZFNpemUgPSBoYW5kbGVyc1RhYmxlXy5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgICAgICBpbnQgd2lkdGggPSBhcmVhLndpZHRoIC0gMiAqIGhhbmRsZXJzVGFibGVfLmdldEJvcmRlcldpZHRoKCkgLSAxMDsKLSAgICAgICAgaWYgKHByZWZlcnJlZFNpemUueSA+IGFyZWEuaGVpZ2h0ICsgaGFuZGxlcnNUYWJsZV8uZ2V0SGVhZGVySGVpZ2h0KCkpIHsKLSAgICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgc2Nyb2xsYmFyIHdpZHRoIGZyb20gdGhlIHRvdGFsIGNvbHVtbiB3aWR0aAotICAgICAgICAgIC8vIGlmIGEgdmVydGljYWwgc2Nyb2xsYmFyIHdpbGwgYmUgcmVxdWlyZWQKLSAgICAgICAgICBQb2ludCB2QmFyU2l6ZSA9IGhhbmRsZXJzVGFibGVfLmdldFZlcnRpY2FsQmFyKCkuZ2V0U2l6ZSgpOwotICAgICAgICAgIHdpZHRoIC09IHZCYXJTaXplLng7Ci0gICAgICAgIH0KLSAgICAgICAgUG9pbnQgb2xkU2l6ZSA9IGhhbmRsZXJzVGFibGVfLmdldFNpemUoKTsKLSAgICAgICAgaWYgKG9sZFNpemUueCA+IGFyZWEud2lkdGgpIHsKLSAgICAgICAgICAvLyB0YWJsZSBpcyBnZXR0aW5nIHNtYWxsZXIgc28gbWFrZSB0aGUgY29sdW1ucwotICAgICAgICAgIC8vIHNtYWxsZXIgZmlyc3QgYW5kIHRoZW4gcmVzaXplIHRoZSB0YWJsZSB0bwotICAgICAgICAgIC8vIG1hdGNoIHRoZSBjbGllbnQgYXJlYSB3aWR0aAotICAgICAgICAgIHRhYmxlQ29sc1swXS5zZXRXaWR0aCh3aWR0aCAvIDMpOwotICAgICAgICAgIHRhYmxlQ29sc1sxXS5zZXRXaWR0aCh3aWR0aCAvIDMpOwotICAgICAgICAgIHRhYmxlQ29sc1syXS5zZXRXaWR0aCh3aWR0aCAtICh0YWJsZUNvbHNbMF0uZ2V0V2lkdGgoKSArIHRhYmxlQ29sc1sxXS5nZXRXaWR0aCgpKSk7Ci0gICAgICAgICAgaGFuZGxlcnNUYWJsZV8uc2V0U2l6ZShhcmVhLndpZHRoLCBhcmVhLmhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLy8gdGFibGUgaXMgZ2V0dGluZyBiaWdnZXIgc28gbWFrZSB0aGUgdGFibGUKLSAgICAgICAgICAvLyBiaWdnZXIgZmlyc3QgYW5kIHRoZW4gbWFrZSB0aGUgY29sdW1ucyB3aWRlcgotICAgICAgICAgIC8vIHRvIG1hdGNoIHRoZSBjbGllbnQgYXJlYSB3aWR0aAotICAgICAgICAgIGhhbmRsZXJzVGFibGVfLnNldFNpemUoYXJlYS53aWR0aCwgYXJlYS5oZWlnaHQpOwotICAgICAgICAgIHRhYmxlQ29sc1swXS5zZXRXaWR0aCh3aWR0aCAvIDMpOwotICAgICAgICAgIHRhYmxlQ29sc1sxXS5zZXRXaWR0aCh3aWR0aCAvIDMpOwotICAgICAgICAgIHRhYmxlQ29sc1syXS5zZXRXaWR0aCh3aWR0aCAtICh0YWJsZUNvbHNbMF0uZ2V0V2lkdGgoKSArIHRhYmxlQ29sc1sxXS5nZXRXaWR0aCgpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHRhYmxlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcihoYW5kbGVyc1RhYmxlXyk7Ci0gICAgQ29udHJvbCBjb250cm9sID0gdGFibGVWaWV3ZXJfLmdldENvbnRyb2woKTsKLQotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgY29udHJvbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgdGFibGVWaWV3ZXJfLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uc18pOwotICAgIHRhYmxlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIobmV3IExpc3RDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgdGFibGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IExpc3RMYWJlbFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGVuYWJsZVJlbW92ZSh0cnVlKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fID0gdWlVdGlscy5jcmVhdGVDaGVja2JveChwYXJlbnRfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX0dFTl9TS0VMRVRPTiwKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfQlVUVE9OX0dFTl9TS0VMRVRPTiwgSU5GT1BPUF9IRExSX0dFTl9TS0VMRVRPTik7Ci0gICAgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCk7Ci0gICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0TGF5b3V0RGF0YShncmlkZGF0YSk7Ci0gICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotICAgICAgICBoYW5kbGVHZW5Ta2VsZXRvblJhZGlvQnV0dG9uKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzb3VyY2VMb2NhdGlvbkNvbXBfID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50XywgMik7Ci0gICAgc291cmNlTG9jYXRpb25Db21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHNvdXJjZUxvY2F0aW9uQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DT01CT19TT1VSQ0VfTE9DLAotICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9DT01CT19TT1VSQ0VfTE9DLCBJTkZPUE9QX0NPTUJPX1NPVVJDRV9MT0MsIFNXVC5SRUFEX09OTFkpOwotICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgaGFuZGxlU291cmNlTG9jYXRpb25Db21ibyhldnQpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8gQ2FsbGVkIGF0IHN0YXJ0IGFuZCBvbmx5IGZvciBzaW5nbGUgc2VydmljZSBzZWxlY3Rpb24gCi0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0gICAgIAotICAgICAgLy8gcHJvY2VzcyBmb3IgbXVsdGlwbGUgc2VydmljZSBzZWxlY3Rpb24KLSAgICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXykgewotICAgICAgICBwYXJlbnRfLmdldFNoZWxsKCkuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX01VTFRJUExFX1NFUlZJQ0VTX0NPTkZJRyk7Ci0gICAgICAgIAotICAgICAgICB3ZWJTZXJ2aWNlRGVzY1RleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KHdlYlNlcnZpY2VEZXNjQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DT01CT19XU19TRVJWSUNFX0RFU0MsIAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NfU0VSVklDRV9ERVNDLCBJTkZPUE9QX1dTX1NFUlZJQ0VfREVTQywgU1dULlJFQURfT05MWSk7Ci0gICAgICAgIGlmIChoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfIT1udWxsKXsKLSAgICAgICAgICBjdXJyZW50SERIXyA9IGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bMF07Ci0gICAgICAgICAgU3RyaW5nIHRleHQgPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1RFWFRfTlVNX09GX1NFUlZJQ0VTLCBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8ubGVuZ3RoKSk7Ci0gICAgICAgICAgd2ViU2VydmljZURlc2NUZXh0Xy5zZXRUZXh0KHRleHQpOwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgCi0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tcF8uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgCi0gICAgICAgIHJlZnJlc2goKTsKLQotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIC8vIHBvcHVsYXRlIHRoZSB0YWJsZSBmb3IgYSBzaW5nbGUgc2VydmljZSBzZWxlY3Rpb24KLSAgICAgICAgCi0gICAgICAgIHdlYlNlcnZpY2VEZXNjQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyh3ZWJTZXJ2aWNlRGVzY0NvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fV1NfU0VSVklDRV9ERVNDLAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NfU0VSVklDRV9ERVNDLCBJTkZPUE9QX1dTX1NFUlZJQ0VfREVTQywgU1dULlJFQURfT05MWSk7Ci0gICAgICAgIHdlYlNlcnZpY2VEZXNjQ29tYm9fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgIAotICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotICAgICAgICAgICAgaGFuZGxlV2ViU2VydmljZURlc2NDb21ibyhldnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdbXSB3c0Rlc2NOYW1lcyA9IEhhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5nZXRBbGxEZXNjcmlwdGlvbk5hbWVzKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8pOwotICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5zZXRJdGVtcyh3c0Rlc2NOYW1lcyk7Ci0KLSAgICAgICAgaWYgKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8ubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHdlYlNlcnZpY2VEZXNjQ29tYm9fLnNlbGVjdCgwKTsKLSAgICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZiAoZGVzY3JpcHRpb25OYW1lXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5pbmRleE9mKGRlc2NyaXB0aW9uTmFtZV8pOwotICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5zZWxlY3QoaW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5zZWxlY3QoMCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIHNldCBEZXNjcmlwdGlvbnMKLSAgICAgICAgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyIGhkaCA9IEhhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5nZXRGb3JEZXNjcmlwdGlvbk5hbWUoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXywgd2ViU2VydmljZURlc2NDb21ib18uZ2V0VGV4dCgpKTsKLSAgICAgICAgaWYgKGhkaCE9bnVsbCl7Ci0gICAgICAgICAgY3VycmVudEhESF8gPSBoZGg7Ci0gICAgICAgICAgTGlzdCBoYW5kbGVycyA9IGhkaC5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5zZXRJbnB1dChoYW5kbGVycyk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgICAvLyBzZXQgb3V0cHV0IGZvbGRlcgotICAgICAgICBzZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpOyAgCi0gICAgICB9Ci0gICAgICBwYXJlbnRfLmdldFNoZWxsKCkuc2V0U2l6ZSg1MzAsIDY1MCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjZ2V0U3RhdHVzKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLSAgICBJU3RhdHVzIGZpbmFsU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuaW5mb1N0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX01VTFRJUExFX1NFUlZJQ0VTX0NPTkZJRyk7Ci0gICAgcmV0dXJuIGZpbmFsU3RhdHVzOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICBBZGRIYW5kbGVyRGlhbG9nIGRpYWxvZyA9IG5ldyBBZGRIYW5kbGVyRGlhbG9nKHBhcmVudF8uZ2V0U2hlbGwoKSwgZmFsc2UpOwotICAgIGRpYWxvZy5zZXRJc011bHRpcGxlU2VydmljZXMoaXNNdWx0aXBsZVNlbGVjdGlvbl8pOwotICAgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICAKLSAgICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gc2VydmljZURlc2MgPSBudWxsOwotICAgIGlmICghaXNNdWx0aXBsZVNlbGVjdGlvbl8gKXsKLSAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCkgewotICAgICAgICBzZXJ2aWNlRGVzYyA9ICBjdXJyZW50SERIXy5nZXREZXNjcmlwdGlvbk9iamVjdCgpOwotICAgICAgICBTdHJpbmdbXSBwb3J0TmFtZXMgPSBnZXRQb3J0Q29tcG9uZW50TmFtZXMoc2VydmljZURlc2MpOwotICAgICAgICBkaWFsb2cuc2V0UG9ydE5hbWVzKHBvcnROYW1lcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZGlhbG9nLmdldFNoZWxsKCkuc2V0U2l6ZSg1MDAsIDIzMCk7Ci0gICAgCi0gICAgaW50IHJlc3VsdCA9IGRpYWxvZy5vcGVuKCk7Ci0KLSAgICBpZiAocmVzdWx0ID09IFdpbmRvdy5PSykgewotICAgICAgU3RyaW5nIG5hbWUgPSBkaWFsb2cuZ2V0TmFtZSgpOwotICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGRpYWxvZy5nZXRDbGFzc05hbWUoKTsKLSAgICAgIFN0cmluZyBwb3J0ID0gZGlhbG9nLmdldFBvcnROYW1lKCk7Ci0gICAgICBpZiAocG9ydCA9PSBudWxsKQotICAgICAgICBwb3J0ID0gIioiOwotCi0gICAgICBIYW5kbGVyVGFibGVJdGVtIGhpID0gbmV3IEhhbmRsZXJUYWJsZUl0ZW0oKTsKLSAgICAgIGhpLnNldEhhbmRsZXJOYW1lKG5hbWUpOwotICAgICAgaGkuc2V0SGFuZGxlckNsYXNzTmFtZShjbGFzc05hbWUpOwotICAgICAgaGkuc2V0UG9ydE5hbWUocG9ydCk7Ci0KLSAgICAgIGlmIChzZXJ2aWNlRGVzYyE9bnVsbCl7Ci0gICAgICAgIGhpLnNldFdzRGVzY1JlZihzZXJ2aWNlRGVzYyk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCl7Ci0gICAgICAgIExpc3QgaGFuZGxlcnMgPSBjdXJyZW50SERIXy5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICBoYW5kbGVycy5hZGQoaGkpOwotICAgICAgfQotCi0gICAgfQotCi0gICAgcmVmcmVzaCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRQb3J0Q29tcG9uZW50TmFtZXMoV2ViU2VydmljZURlc2NyaXB0aW9uIHdlYlNlcnZpY2VEZXNjKSB7Ci0KLSAgICBMaXN0IHBvcnRzID0gd2ViU2VydmljZURlc2MuZ2V0UG9ydENvbXBvbmVudHMoKTsKLSAgICBpZiAocG9ydHMgIT0gbnVsbCkgewotICAgICAgU3RyaW5nW10gcG9ydE5hbWVzID0gbmV3IFN0cmluZ1twb3J0cy5zaXplKCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5zaXplKCk7IGkrKykgewotICAgICAgICBQb3J0Q29tcG9uZW50IHBjID0gKFBvcnRDb21wb25lbnQpIHBvcnRzLmdldChpKTsKLSAgICAgICAgU3RyaW5nIHBjTmFtZSA9IHBjLmdldFBvcnRDb21wb25lbnROYW1lKCk7Ci0gICAgICAgIHBvcnROYW1lc1tpXSA9IHBjTmFtZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwb3J0TmFtZXM7Ci0gICAgfQotICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICBoYW5kbGVEZWxldGVLZXlQcmVzc2VkKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNb3ZlVXBCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgaW50IGluZGV4ID0gdGFibGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpIHsKLSAgICAgIGlmIChpbmRleCA+IDApIHsKLSAgICAgICAgaWYgKGN1cnJlbnRIREhfIT1udWxsKXsKLSAgICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBjdXJyZW50SERIXy5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGhhbmRsZXJzLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICBoYW5kbGVycy5hZGQoaW5kZXggLSAxLCBvYmplY3QpOwotICAgICAgICAgIH0KLSAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZU1vdmVEb3duQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGludCBpbmRleCA9IHRhYmxlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgaWYgKGluZGV4IDwgaGFuZGxlcnMuc2l6ZSgpIC0gMSkgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBoYW5kbGVycy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIGhhbmRsZXJzLmFkZChpbmRleCsxLCBvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTb3VyY2VMb2NhdGlvbkNvbWJvKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgb3V0cHV0TG9jYXRpb25fID0gc291cmNlTG9jYXRpb25Db21ib18uZ2V0VGV4dCgpOwotICAgIElQYXRoIG91dHB1dFBhdGggPSAoSVBhdGgpIHBhdGhzVGFibGVfLmdldChvdXRwdXRMb2NhdGlvbl8pOwotICAgIGN1cnJlbnRIREhfLnNldFNvdXJjZU91dHB1dFBhdGgob3V0cHV0UGF0aCk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlR2VuU2tlbGV0b25SYWRpb0J1dHRvbigpIHsKLSAgICBpZiAoZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uaXNFbmFibGVkKCkpIHsKLSAgICAgIGlmIChnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5nZXRTZWxlY3Rpb24oKSkgewotICAgICAgICB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXyA9IHRydWU7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF8gPSBmYWxzZTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlV2ViU2VydmljZURlc2NDb21ibyhTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgaWYgKHdlYlNlcnZpY2VEZXNjQ29tYm9fIT1udWxsICYmIHdlYlNlcnZpY2VEZXNjQ29tYm9fLmlzRW5hYmxlZCgpKSB7Ci0gICAgICBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgaGRoID0gSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyLmdldEZvckRlc2NyaXB0aW9uTmFtZShoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLCB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5nZXRUZXh0KCkpOwotICAgICAgY3VycmVudEhESF8gPSBoZGg7ICAgICAgCi0gICAgICByZWZyZXNoKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChpc0dlblNrZWxldG9uRW5hYmxlZF8pewotICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZF8oKSB7Ci0gICAgcmV0dXJuIGlzR2VuU2tlbGV0b25FbmFibGVkXzsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0TGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyIHsKLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbkluZGV4KSB7Ci0KLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBIYW5kbGVyVGFibGVJdGVtKSB7Ci0gICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pIG9iamVjdDsKLSAgICAgICAgaWYgKGNvbHVtbkluZGV4ID09IDApIHsKLSAgICAgICAgICByZXR1cm4gaHRpLmdldEhhbmRsZXJOYW1lKCkgIT0gbnVsbCA/IGh0aS5nZXRIYW5kbGVyTmFtZSgpIDogIiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMSkgewotICAgICAgICAgIHJldHVybiBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpICE9IG51bGwgPyBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpIDogIiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIGh0aS5nZXRQb3J0TmFtZSgpICE9IG51bGwgPyBodGkuZ2V0UG9ydE5hbWUoKSA6ICIiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBlbmFibGVSZW1vdmUoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgcmVtb3ZlQnV0dG9uXy5zZXRFbmFibGVkKGVuYWJsZWQgJiYgIXRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciB7Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGVsZW1lbnQpIHsKLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgVmVjdG9yKSB7IHJldHVybiAoKFZlY3RvcikgZWxlbWVudCkudG9BcnJheSgpOyB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkLCBPYmplY3QgbmV3b2JqKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWxldGVkKE9iamVjdCBvYmplY3QpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVEZWxldGVLZXlQcmVzc2VkKCkgewotICAgIC8vIGludGVybmFsRGlzcG9zZSgpOwotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pKSB7Ci0gICAgICBpbnQgc2VsZWN0aW9uSW5kZXggPSBoYW5kbGVyc1RhYmxlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgaWYgKGN1cnJlbnRIREhfIT1udWxsKXsKLSAgICAgICAgY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKS5yZW1vdmUoc2VsZWN0aW9uSW5kZXgpOwotICAgICAgfQotICAgICAgcmVmcmVzaCgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHRhYmxlVmlld2VyXy5zZXRJbnB1dChudWxsKTsKLSAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCl7Ci0gICAgICAgIExpc3QgaGFuZGxlcnMgPSBjdXJyZW50SERIXy5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQoaGFuZGxlcnMpOwotICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRHZW5Ta2VsZXRvbkVuYWJsZWQoYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZCkgewotICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gaXNHZW5Ta2VsZXRvbkVuYWJsZWQ7Ci0gICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0U2VsZWN0aW9uKGlzR2VuU2tlbGV0b25FbmFibGVkKTsKLQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuU2tlbGV0b25FbmFibGVkKCkgewotICAgIHJldHVybiB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpewotICAgIElQcm9qZWN0IHByb2plY3QgPSBjdXJyZW50SERIXy5nZXRQcm9qZWN0KCk7Ci0gICAgaWYgKHByb2plY3QhPW51bGwpewotICAgICAgSVBhdGhbXSBsb2NhdGlvbnMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJvamVjdCk7Ci0gICAgICAKLSAgICAgIFN0cmluZ1tdIHBhdGhzID0gbmV3IFN0cmluZ1tsb2NhdGlvbnMubGVuZ3RoXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHBhdGhzW2ldID0gbG9jYXRpb25zW2ldLnRvU3RyaW5nKCk7Ci0gICAgICAgIHBhdGhzVGFibGVfLnB1dChwYXRoc1tpXSwgbG9jYXRpb25zW2ldKTsKLSAgICAgIH0KLSAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldEl0ZW1zKHBhdGhzKTsKLSAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNlbGVjdCgwKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gc2V0IGluIG1vZGVsCi0gICAgb3V0cHV0TG9jYXRpb25fID0gc291cmNlTG9jYXRpb25Db21ib18uZ2V0VGV4dCgpOwotICAgIElQYXRoIG91dHB1dFBhdGggPSAoSVBhdGgpIHBhdGhzVGFibGVfLmdldChvdXRwdXRMb2NhdGlvbl8pOwotICAgIGN1cnJlbnRIREhfLnNldFNvdXJjZU91dHB1dFBhdGgob3V0cHV0UGF0aCk7ICAKLSAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIEFuIGFycmF5IG9mIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyhIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBoYW5kbGVySG9sZGVycyl7Ci0gICAgdGhpcy5oYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBnZXRIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzKCl7Ci0gICAgcmV0dXJuIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEZvciBnZXR0aW5nIHRoZSBoYW5kbGVycyB0byBhcHBseSBmb3IgbXVsdGlwbGUgc2VydmljZXMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SGFuZGxlcnNMaXN0KCl7Ci0gICAgaWYgKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bMF0hPW51bGwpCi0gICAgICByZXR1cm4gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1swXS5nZXRIYW5kbGVyTGlzdCgpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbk5hbWUoU3RyaW5nIHdzRGVzY05hbWUpIHsKLSAgICBkZXNjcmlwdGlvbk5hbWVfID0gd3NEZXNjTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbnRlcm5hbGl6ZSgpewotICAgIHBvcHVsYXRlSGFuZGxlcnNUYWJsZSgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9IYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGEyMTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9IYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5XZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLS8qKgotICogSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZAotICogCi0gKiBEZXRlcm1pbmUgaWYgSGFuZGxlcnMgYmVsb25ncyB0byBzZXJ2aWNlIG9yIGNsaWVudCBzaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBIYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDbWQgCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0NsaWVudEhhbmRsZXJfID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1NlcnZpY2VIYW5kbGVyXyA9IGZhbHNlOwotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUpIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlIHdzbmd0ID0gKFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUpIG9iajsKLSAgICAgICAgICBpZiAod3NuZ3QuZ2V0V3NkbFNlcnZpY2UoKSE9bnVsbCl7Ci0gICAgICAgICAgCWlzU2VydmljZUhhbmRsZXJfID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKHdzbmd0LmdldFNlcnZpY2VSZWYoKSE9bnVsbCl7Ci0gICAgICAgICAgCWlzQ2xpZW50SGFuZGxlcl8gPSB0cnVlOwotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVEICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgfQotCi0gIAotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzQ2xpZW50SGFuZGxlcl8uCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldElzQ2xpZW50SGFuZGxlcigpIHsKLQlyZXR1cm4gaXNDbGllbnRIYW5kbGVyXzsKLX0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBpc1NlcnZpY2VIYW5kbGVyXy4KLSAqLwotcHVibGljIGJvb2xlYW4gZ2V0SXNTZXJ2aWNlSGFuZGxlcigpIHsKLQlyZXR1cm4gaXNTZXJ2aWNlSGFuZGxlcl87Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTlhZDZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgewotCSAgLyoqCi0JICAgKiBUaGUgZnJhbWV3b3JrIHdpbGwgY2FsbCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0JICAgKiB2YWx1ZSB0aGF0IHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQuCi0JICAgKiAKLQkgICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB0aGUgdXNlciBzcGVjaWZpZWQuCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbik7Ci0JICAKLQkgIC8qKgotCSAgICogVGhlIGludGVudCBvZiB0aGUgT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXQgaXMgdGhhdCB0aGUgdXNlciBoYXMKLQkgICAqIHRoZSBvcHBvcnR1bml0eSBjaGFuZ2UvZmluZCB0aGUgb2JqZWN0IHRoYXQgdGhleSB3YW50IHRvIHR1cm4gaW50bwotCSAgICogYSBXZWIgc2VydmljZS4KLQkgICAqIAotCSAgICogQHJldHVybiByZXR1cm5zIHRoZSBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3QgdGhhdCB0aGUgdXNlcgotCSAgICogd2FudCB0byB0dXJuIGludG8gYSBXZWIgc2VydmljZS4gIFRoaXMgb2JqZWN0IG1heSBiZSBkaWZmZXJlbnQgdGhhbgotCSAgICogdGhlIGluaXRpYWxTZWxlY3Rpb24gcGFzc2VkIGluIGJ5IHRoZSBzZXRJbml0aWFsU2VsZWN0aW9uIG1ldGhvZC4KLQkgICAqLwotCSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpOwotCSAgCi0JICAvKioKLQkgICAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBvYmplY3RTZWxlY3Rpb24gcGFyYW1ldGVyIGlzIHZhbGlkIGZvcgotCSAgICogdGhpcyBPYmplY3Qgc2VsZWN0aW9uIHdpZGdldC4gIEFuIGVycm9yIHN0YXR1cyBzaG91bGQgYmUgcmV0dXJuZWQKLQkgICAqIGlmIHRoaXMgb2JqZWN0IGlzIG5vdCB2YWx1ZS4gIE90aGVyd2lzZSwgYW5kIG9rIHN0YXR1cyBzaG91bGQgYmUKLQkgICAqIHJldHVybmVkCi0JICAgKiAKLQkgICAqIEBwYXJhbSBvYmplY3RTZWxlY3Rpb24gdGhlIG9iamVjdCB0byBiZSB2YWxpZGF0ZWQuCi0JICAgKiBAcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIHZhbGlkYXRpb24uCi0JICAgKi8KLQkgIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbik7Ci0JIAotCSAgLyoqCi0JICAgKiAKLQkgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSVByb2plY3QgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0aW9uCi0JICAgKiBvYmplY3QgdGhhdCB0aGUgdXNlciBoYXMgY2hvc2VuIHdpdGggdGhpcyB3aWRnZXQuICBUaGUgdmFsdWUgY2FuIGJlIAotCSAgICogbnVsbCBpZiB0aGVyZSBpcyBubyBJUHJvamVjdCBmb3IgdGhpcyBvYmplY3QuCi0JICAgKi8KLQkgIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCk7Ci0JICAKLQkgIC8qKgotCSAgICogCi0JICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIElWaXJ0dWFsQ29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGlvbgotCSAgICogb2JqZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGNob3NlbiB3aXRoIHRoaXMgd2lkZ2V0LiAgVGhlIHZhbHVlIGNhbiBiZSAKLQkgICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gSVZpcnR1YWxDb21wb25lbnQgZm9yIHRoaXMgb2JqZWN0Ci0JICAgKi8KLQkgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpOwotCSAgCi0JICAvKioKLQkgICAqIENhbGxlZCB0byBsYXVuY2ggYSBkaWFsb2cgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIG1ha2UgYW4gb2JqZWN0IHNlbGVjdGlvbi4KLQkgICAqIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gaW1wbGVtZW50aW5nIElPYmplY3RTZWxlY3Rpb25XaWRnZXQgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIGRpYWxvZyBmcmFtZXdvcmsuCi0JICAgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2Qgc2hvdWxkIGNhbGwgdGhlIG5lY2Vzc2FyeSBnZXR0ZXJzIG9uIHRoZSBkaWFsb2cgdG8gdXBkYXRlIHRoZSAKLQkgICAqIG9iamVjdCBzZWxlY3Rpb24uIAotCSAgICogCi0JICAgKiBAcmV0dXJuIHRoZSBzdGF0dXMgb2YgY29tcGxldGluZyB0aGUgZGlhbG9nIGxhdW5jaAotCSAgICovCi0JICBwdWJsaWMgaW50IGxhdW5jaChTaGVsbCBzaGVsbCk7Ci0JICAKLQkgIC8qKgotCSAgICogCi0JICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0cmluZyB0byBkaXNwbGF5ZWQgaW4gdGhlIFVJIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0Ci0JICAgKi8KLQkgIHB1YmxpYyAgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JICAKLQkgIC8qKgotCSAgICogCi0JICAgKiBAcGFyYW0gcyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IHNlbGVjdGlvbgotCSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgcmVwcmVzZW50cyBhIHZhbGlkIG9iamVjdCBzZWxlY3Rpb24uCi0gICAgICAgKiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBzZXQgdGhlIHdpZGdldCBvYmplY3Qgc2VsZWN0aW9uCi0JICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBpbnB1dCBzdHJpbmcgc28gdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0byBnZXRPYmplY3RTZWxlY3Rpb24KLQkgICAqICB3aWxsIHJldHJpZXZlIHRoZSBjb3JyZWN0IG9iamVjdC4KLQkgICAqLyAgCi0JICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgcyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSVBhY2thYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSVBhY2thYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MDBiZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lQYWNrYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSB0aGF0IG1hcmtzIGFuIFVJIGVsZW1lbnQgYXMgaGF2aW5nIHNvbWUgY3VzdG9tIHBhY2tpbmcgY29kZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBJUGFja2FibGUgewotCQotCS8qKgotCSAqIENhbGxpbmcgdGhpcyBtZXRob2Qgc2hvdWxkIGNhdXNlIHRoZSBVSSBlbGVtZW50IHRvIHBhY2sgaXRzZWxmLiAgTm90ZSB0aGF0Ci0JICogdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHRoZSBwYWNrKCkgbWV0aG9kIGluIFNXVC4KLQkgKi8KLQl2b2lkIHBhY2tJdCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0ltcG9ydFdTSUxXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JbXBvcnRXU0lMV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjN2IxOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0ltcG9ydFdTSUxXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODA1MDEgICAyMjk3MjggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHVwcGVyY2FzZSAuV1NETCBjYW5ub3QgYmUgZm91bmQgYnkgdGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFQWN0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5Bcmd1bWVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWwuVGFibGVWaWV3ZXJFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5EaWFsb2dSZXNvdXJjZUJyb3dzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2lsLkFkZFdTRExUb1dTSUxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi0vKioKLSogUGFnZSBmb3IgaW1wb3J0aW5nIFdTREwgcmVmZXJlbmNlcyBpbnRvIGEgV1NJTCBpbiB0aGUgd29ya2JlbmNoLgotKi8KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0lMV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIC8qQ09OVEVYVF9JRCBXU0lMMDAwMSBmb3IgdGhlIFdTSUwgSW1wb3J0IFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1dTSUxfSU1QT1JUX1BBR0UgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuV1NJTDAwMDEiOwotCi0gIC8qQ09OVEVYVF9JRCBXU0lMMDAwMiBmb3IgdGhlIFdTSUwgdGV4dCBmaWVsZCovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NJTF9URVhUX1dTSUwgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuV1NJTDAwMDIiOwotCi0gIC8qQ09OVEVYVF9JRCBXU0lMMDAwMyBmb3IgdGhlIFdTSUwgYnJvd3NlIGJ1dHRvbiovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NJTF9CVVRUT05fQlJPV1NFX1dTSUwgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuV1NJTDAwMDMiOwotCi0gIC8qQ09OVEVYVF9JRCBXU0lMMDAwNCBmb3IgdGhlIFdTREwgdGFibGUqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1dTSUxfVEFCTEVfV1NETCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwNCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5TUEVDVElPTl9XU0lMID0gImluc3BlY3Rpb24ud3NpbCI7Ci0KLSAgcHJpdmF0ZSBUZXh0IHdzaWxfOwotICBwcml2YXRlIEJ1dHRvbiBicm93c2VfOwotICBwcml2YXRlIFRhYmxlVmlld2VyRWRpdG9yIHdzZGxzXzsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgcGFnZS4KLSAgKi8KLSAgcHVibGljIEltcG9ydFdTSUxXaWRnZXQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAJSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotICAJCi0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTSUxfSU1QT1JUX1BBR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChwYXJlbnQsIElORk9QT1BfV1NJTF9JTVBPUlRfUEFHRSk7Ci0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMzsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV1NJTF9VUkkpOwotICAgIGxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotCi0gICAgd3NpbF8gPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5XUkFQIHwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgZ2Qud2lkdGhIaW50ID0gMjU2OwotICAgIHdzaWxfLnNldExheW91dERhdGEoZ2QpOwotICAgIHdzaWxfLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHN0YXR1c0xpc3RlbmVyKTsKLSAgICB3c2lsXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU0lMX1RFWFRfV1NJTCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHdzaWxfLCBJTkZPUE9QX1dTSUxfVEVYVF9XU0lMKTsKLQotICAgIGJyb3dzZV8gPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZSwgU1dULlBVU0gpOwotICAgIGJyb3dzZV8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlJPV1NFKTsKLSAgICBicm93c2VfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIGJyb3dzZV8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwKLSAgICAgIG5ldyBMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlQnJvd3NlRXZlbnQoZXZlbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBicm93c2VfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTSUxfQlVUVE9OX0JST1dTRV9XU0lMKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoYnJvd3NlXywgSU5GT1BPUF9XU0lMX0JVVFRPTl9CUk9XU0VfV1NJTCk7Ci0KLSAgICBDb21wb3NpdGUgd3NkbENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgd3NkbENvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IDM7Ci0gICAgd3NkbENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBsYWJlbCA9IG5ldyBMYWJlbCh3c2RsQ29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV1NETCk7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgU3RyaW5nW10gY29sdW1ucyA9IHtDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV1NETF9VUkl9OwotICAgIHdzZGxzXyA9IG5ldyBUYWJsZVZpZXdlckVkaXRvcih3c2RsQ29tcG9zaXRlLCBjb2x1bW5zLCBuZXcgQXJyYXlMaXN0KCksICJodHRwOi8vIik7Ci0gICAgd3NkbHNfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTSUxfVEFCTEVfV1NETCk7Ci0gICAgd3NkbHNfLnNldEluZm9wb3AoSU5GT1BPUF9XU0lMX1RBQkxFX1dTREwpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlQnJvd3NlRXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBEaWFsb2dSZXNvdXJjZUJyb3dzZXIgZGlhbG9nID0gbmV3IERpYWxvZ1Jlc291cmNlQnJvd3Nlcihicm93c2VfLmdldFNoZWxsKCksIG51bGwsIG5ldyBGaWxlRXh0ZW5zaW9uRmlsdGVyKG5ldyBTdHJpbmdbXSB7IndzaWwifSkpOwotICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgSVJlc291cmNlIHJlcyA9IGRpYWxvZy5nZXRGaXJzdFNlbGVjdGlvbigpOwotICAgIGlmIChyZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAocmVzIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICAgIHdzaWxfLnNldFRleHQocmVzLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHdzaWxfLnNldFRleHQocmVzLmdldEZ1bGxQYXRoKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS5hcHBlbmQoSU5TUEVDVElPTl9XU0lMKS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgaWYgKCF3c2lsXy5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLndzaWwiKSkKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0lOVkFMSURfV1NJTF9GSUxFX05BTUUgKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUZpbGUpIHsKLSAgICAgICAgICBJRmlsZSBmaWxlID0gKElGaWxlKSBvYmplY3Q7Ci0gICAgICAgICAgU3RyaW5nIGV4dCA9IGZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgICAgICAgIGlmIChleHQgIT0gbnVsbCkgewotCSAgICAgICAgICBpZiAoZXh0LmVxdWFsc0lnbm9yZUNhc2UoIndzZGwiKSkKLQkgICAgICAgIAkgIGxpc3QuYWRkKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsKLQkgICAgICAgICAgZWxzZSBpZiAoZXh0LmVxdWFsc0lnbm9yZUNhc2UoIndzaWwiKSkKLQkgICAgICAgIAkgIHdzaWxfLnNldFRleHQoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICAgICAgbGlzdC5hZGQoSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTSUxQYXRoKCgoU2VydmljZUltcGwpKG9iamVjdCkpKSk7CQotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZVJlZikKLSAgICAgICAgICBsaXN0LmFkZChKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NJTFBhdGgoKChTZXJ2aWNlUmVmKShvYmplY3QpKSkpOwkJCi0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgICAgIGxpc3QuYWRkKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0lMUGF0aCgoKFdTRExSZXNvdXJjZUltcGwpKG9iamVjdCkpKSk7CQotICAgICAgfQotICAgIH0KLSAgICB3c2Rsc18uc2V0SW5wdXQobGlzdCk7Ci0gICAgd3NkbHNfLnJlZnJlc2goKTsKLSAgICBpZiAobGlzdC5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBwYXRoID0gbmV3IFN0cmluZ0J1ZmZlcihsaXN0LmdldCgwKS50b1N0cmluZygpKTsKLSAgICAgIC8vIGNoYW5nZSBleHRlbnNpb24gZnJvbSAud3NkbCB0byAud3NpbAotICAgICAgaW50IGxlbmd0aCA9IHBhdGgubGVuZ3RoKCk7Ci0gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKGxlbmd0aC00LCBsZW5ndGgsICJ3c2lsIik7Ci0gICAgICB3c2lsXy5zZXRUZXh0KHBhdGgudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgQXJndW1lbnRzIGdldEdlbldTSUxBcmd1bWVudHMoKQotICB7Ci0gICAgQXJndW1lbnRzIGFyZ3MgPSBuZXcgQXJndW1lbnRzKCk7Ci0gICAgU3RyaW5nIHdzaWxQYXRoID0gd3NpbF8uZ2V0VGV4dCgpOwotICAgIGlmICh3c2lsUGF0aC5pbmRleE9mKCc6JykgPCAwKQotICAgICAgYXJncy5hZGQoQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTSUwsIFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHdzaWxfLmdldFRleHQoKSkudG9TdHJpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgYXJncy5hZGQoQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTSUwsIHdzaWxQYXRoKTsKLSAgICBUYWJsZUl0ZW1bXSBpdGVtcyA9IHdzZGxzXy5nZXRJdGVtcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHVyaSA9IGl0ZW1zW2ldLmdldFRleHQoMCk7Ci0gICAgICBpZiAodXJpLmluZGV4T2YoJzonKSA8IDApCi0gICAgICB7Ci0gICAgICAgIElSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh1cmkpOwotICAgICAgICBpZiAocmVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB1cmkgPSByZXMuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgICAgewotICAgICAgICAgIAltdXJsZS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBhcmdzLmFkZChBZGRXU0RMVG9XU0lMQ29tbWFuZC5BUkdfV1NETCwgdXJpKTsKLSAgICB9Ci0gICAgYXJncy5hZGQoQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1JFU09MVkVfV1NETCwgbnVsbCk7Ci0gICAgcmV0dXJuIGFyZ3M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9KYXZhQmVhblNlbGVjdGlvbkxhdW5jaGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9KYXZhQmVhblNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIzNmY0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzE5ICAgMTQ5MzUyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNjA4MjYgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwNzAzMTMgICAxNzAxMjYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJVSmF2YSBzY2VuYXJpbyBkb2Vzbid0IGNhdGNoIGltcHJvcGVyIHNlcnZpY2UgZGVmaW5pdGlvbgotICogMjAwODAzMTAgICAyMjIwNzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENhbm5vdCBsYXVuY2ggV2ViIFNlcnZpY2Ugd2l6YXJkIG9uIGFuIElUeXBlCi0gKiAyMDA4MDMxOCAgIDIxMzMzMCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgTm9uLWNvbnZlbnRpb25hbCBKYXZhIG5hbWluZyBwcmV2ZW50cyBjcmVhdGluZyBXZWIgU2VydmljZXMgKGNsaWVudCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29udmVudGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5Qb3J0Q29tcG9uZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbEJlYW5JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhQmVhblNlbGVjdGlvbkxhdW5jaGFibGUgZXh0ZW5kcyBBYnN0cmFjdE9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgewotCi0JICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0JICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7CSAgCi0JICBwcml2YXRlIFN0cmluZyBiZWFuQ2xhc3NTdHJpbmdfPSIiOwotCSAgcHJpdmF0ZSBJU3RhdHVzIHZhbGlkYXRpb25TdGF0dXM7Ci0JCSAgIAotCSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotCSAgewotCSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLQkgICAgewotCSAgICAgIE9iamVjdCBvYmplY3QgPSBpbml0aWFsU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLQkgICAgICB7Ci0JICAgICAgCUlGaWxlIGlGaWxlID0gKElGaWxlKW9iamVjdDsKLQkgICAgICAJU3RyaW5nIGZpbGVFeHQgPSBpRmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkudG9Mb3dlckNhc2UoKTsKLQkgICAgICAJaWYgKGZpbGVFeHQuZXF1YWxzKCJqYXZhIikgfHwgZmlsZUV4dC5lcXVhbHMoImNsYXNzIikpCi0JICAgICAgICAgIHNldEJlYW5DbGFzcyhpRmlsZSk7Ci0JICAgICAgfQotCSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElUeXBlKQotCSAgICAJc2V0QmVhbkNsYXNzKChJVHlwZSkgb2JqZWN0KTsKLQkgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0KQotCSAgICAgIAlzZXRCZWFuQ2xhc3MoKChJQ29tcGlsYXRpb25Vbml0KW9iamVjdCkuZ2V0UmVzb3VyY2UoKSk7Ci0JICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuSW1wbCkKLQkgICAgICAJc2V0QmVhbkNsYXNzKChTZXJ2aWNlSW1wbEJlYW5JbXBsKW9iamVjdCk7Ci0JICAgICAgZWxzZSBpZihvYmplY3QgaW5zdGFuY2VvZiBCZWFuTGluaykKLQkgICAgICAJc2V0QmVhbkNsYXNzKChCZWFuTGluaylvYmplY3QpOwotCSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLQkgICAgCWJlYW5DbGFzc1N0cmluZ18gPSAoU3RyaW5nKSBvYmplY3Q7IC8vIHVzZSBmb3IgZGlzcGxheWFibGUgc3RyaW5nCi0JICAgIH0KLQkgIH0KLQotCSBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLQkgIHsJCSAKLQkgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGJlYW5DbGFzc1N0cmluZ18pOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0JICB7Ci0JICAgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLQkgIHsKLQkgICAgcmV0dXJuIHNlcnZlckNvbXBvbmVudE5hbWVfOwotCSAgfQotCi0JcHVibGljIGludCBsYXVuY2goU2hlbGwgc2hlbGwpIHsJCQotCQkgICAKLQkJICAgIElUeXBlIGl0eXBlID0gRGlhbG9nVXRpbHMuYnJvd3NlQ2xhc3Nlc0FzSVR5cGUoc2hlbGwsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKSwgbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhzaGVsbCkpOwotCQkgICAgcmV0dXJuIHNldEJlYW5DbGFzcyhpdHlwZSk7Ci0JfQotCQkgIAkKLQlwcml2YXRlIGludCBzZXRCZWFuQ2xhc3MoSVR5cGUgaXR5cGUpIHsKLQkJICAgIGlmIChpdHlwZSAhPSBudWxsKQotCQkgICAgewotCQkgICAgICAgYmVhbkNsYXNzU3RyaW5nXyA9IGl0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQkgICAgICB0cnkKLQkJICAgICAgewotCQkgICAgICAgIElSZXNvdXJjZSByZXMgPSBpdHlwZS5nZXRVbmRlcmx5aW5nUmVzb3VyY2UoKTsKLQkJICAgICAgICBpZiAocmVzICE9IG51bGwpCi0JCSAgICAgICAgewotCQkgICAgICAgICAgc2VydmVyUHJvamVjdF8gPSByZXMuZ2V0UHJvamVjdCgpOwotCQkgICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzKTsKLQkJICAgICAgICAgIGlmIChjb21wIT1udWxsKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IGNvbXAuZ2V0TmFtZSgpOwotCQkgICAgICAgICAgfQotCQkgICAgICAgIH0KLQkJICAgICAgICBlbHNlCi0JCSAgICAgICAgewotCQkgICAgICAgICAgc2VydmVyUHJvamVjdF8gPSBudWxsOwotCQkgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwotCQkgICAgICAgIH0KLQkJICAgICAgICByZXR1cm4gU3RhdHVzLk9LOwotCQkgICAgICB9Ci0JCSAgICAgIGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gam1lKQotCQkgICAgICB7Ci0JCSAgICAgICAgc2VydmVyUHJvamVjdF8gPSBudWxsOwotCQkgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gbnVsbDsKLQkJICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SOwotCQkgICAgICB9Ci0JCSAgICB9CQkJICAgIAotCQlyZXR1cm4gU3RhdHVzLkNBTkNFTDsKLQl9CQotICAJCi0JICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKElSZXNvdXJjZSByZXNvdXJjZSkKLQkgIHsKLQkgICAgaWYoIHJlc291cmNlICE9IG51bGwgJiYgcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSApCi0JICAgIHsKLQkgICAgICBJUGF0aCAgcGF0aCAgICAgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotCSAgICAgIFN0cmluZyBiYXNlbmFtZSA9IHBhdGgubGFzdFNlZ21lbnQoKTsKLQkgICAgICAKLQkgICAgICBpZiggYmFzZW5hbWUgIT0gbnVsbCAmJiBiYXNlbmFtZS5sZW5ndGgoKSA+IDAgKQotCSAgICAgIHsKLQkgICAgICAgIFN0cmluZyBiZWFuUGFja2FnZSA9IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShwYXRoKTsKLQkgICAgICAgIFN0cmluZyBiZWFuQ2xhc3MgPSAoYmVhblBhY2thZ2UgPT0gbnVsbCB8fCBiZWFuUGFja2FnZS5sZW5ndGgoKSA9PSAwID8gYmFzZW5hbWUgOiAoYmVhblBhY2thZ2UgKyAiLiIgKyBiYXNlbmFtZSkpOwotCSAgICAgICAgCi0JICAgICAgICBpZiggYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIgKSApCi0JICAgICAgICB7Ci0JICAgICAgICAgIGJlYW5DbGFzcyA9IGJlYW5DbGFzcy5zdWJzdHJpbmcoIDAsIGJlYW5DbGFzcy5sYXN0SW5kZXhPZignLicpICk7Ci0JICAgICAgICB9Ci0JICAgICAgICAKLQkgICAgICAgIGJlYW5DbGFzc1N0cmluZ18gPSBiZWFuQ2xhc3M7Ci0JICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9ICBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihwYXRoKTsKLQkgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKHJlc291cmNlKTsKLQkgICAgICAgIAotCSAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0JICAgICAgICB7CQotCSAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IGNvbXAuZ2V0TmFtZSgpOwotCSAgICAgICAgfSAgICAgICAgCi0JICAgICAgICAKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQotCSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhTZXJ2aWNlSW1wbEJlYW5JbXBsIHNlcnZpY2VJbXBsKQotCSAgewotCSAgICBpZiggc2VydmljZUltcGwgIT0gbnVsbCApCi0JICAgIHsKLQkgICAgICBFT2JqZWN0IGVPYmplY3QgPSBzZXJ2aWNlSW1wbC5lQ29udGFpbmVyKCk7Ci0JICAgICAgaWYoZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnRJbXBsKXsKLQkgICAgICAJUG9ydENvbXBvbmVudEltcGwgcGNpID0gKFBvcnRDb21wb25lbnRJbXBsKWVPYmplY3Q7Ci0JICAgICAgCWJlYW5DbGFzc1N0cmluZ18gPSBwY2kuZ2V0U2VydmljZUVuZHBvaW50SW50ZXJmYWNlKCk7CSAgICAgIAkKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhCZWFuTGluayBzZXJ2aWNlSW1wbCkKLQkgIHsKLQkgICAgaWYoIHNlcnZpY2VJbXBsICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgRU9iamVjdCBlT2JqZWN0ID0gc2VydmljZUltcGwuZUNvbnRhaW5lcigpOwotCSAgICAgIGlmKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW5JbXBsKXsKLQkgICAgICAJc2V0QmVhbkNsYXNzKChTZXJ2aWNlSW1wbEJlYW5JbXBsKWVPYmplY3QpOwotCSAgICAgIH0KLQkgICAgfQotCSAgfQotCSAgCi0JICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotCSAgewotCQlpZiAoYmVhbkNsYXNzU3RyaW5nXy5sZW5ndGgoKSA8PSAwKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19CRUFOX0NBTk5PVF9CRV9FTVBUWSk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLQkgIHsKLQkJaWYgKHZhbGlkYXRpb25TdGF0dXMgPT0gbnVsbCkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkKLQkJcmV0dXJuIHZhbGlkYXRpb25TdGF0dXM7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSB7CQkgIAotCQkJICByZXR1cm4gYmVhbkNsYXNzU3RyaW5nXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpIHsKLQkJICBiZWFuQ2xhc3NTdHJpbmdfID0gczsKLQkJICBTdHJpbmcgc291cmNlTGV2ZWwgPSBKYXZhQ29yZS5nZXRPcHRpb24oSmF2YUNvcmUuQ09NUElMRVJfU09VUkNFKTsKLQkJICBTdHJpbmcgY29tcGxpYW5jZUxldmVsID0gSmF2YUNvcmUuZ2V0T3B0aW9uKEphdmFDb3JlLkNPTVBJTEVSX0NPTVBMSUFOQ0UpOwotCQkgIHZhbGlkYXRpb25TdGF0dXMgPSBKYXZhQ29udmVudGlvbnMudmFsaWRhdGVKYXZhVHlwZU5hbWUocywgc291cmNlTGV2ZWwsIGNvbXBsaWFuY2VMZXZlbCk7Ci0JCSAgcmV0dXJuIHZhbGlkYXRpb25TdGF0dXMuaXNPSygpOwotCSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHJlZmVyZW5jZXNTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QcmVmZXJlbmNlc1NlbGVjdGlvbldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmM0NjQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QcmVmZXJlbmNlc1NlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZXNTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsgICAgCi0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0IGNvbnRleHRfOwotICAKLSAgLypDT05URVhUX0lEIFBXUFIwMDAzIGZvciB0aGUgT3ZlcndyaXRlIEZpbGVzIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1BSX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUyA9ICJQV1BSMDAwMyI7Ci0gIHByaXZhdGUgQnV0dG9uIG92ZXJ3cml0ZUZpbGVzQ2hlY2tib3hfOwotICAKLSAgLypDT05URVhUX0lEIFBXUFIwMDA0IGZvciB0aGUgQ3JlYXRlIEZvbGRlcnMgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUFJfQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlMgPSAiUFdQUjAwMDQiOwotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVGb2xkZXJzQ2hlY2tib3hfOwotICAKLSAgLypDT05URVhUX0lEIFBXUFIwMDE1IGZvciB0aGUgQ2hlY2sgT3V0IEZpbGVzIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1BSX0NIRUNLQk9YX0NIRUNLT1VUX0ZJTEVTID0gIlBXUFIwMDE1IjsgIAotICBwcml2YXRlIEJ1dHRvbiBjaGVja291dEZpbGVzQ2hlY2tib3hfOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2FkZENvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXIpCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBTdHJpbmcgICAgICAgY29uUGx1Z2luSWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCVVJVXRpbHMgICAgICB1dGlscyAgICAgICA9IG5ldyBVSVV0aWxzKCBjb25QbHVnaW5JZCApOwotICAJCi0gICAgQ29tcG9zaXRlIHJlc291cmNlc0dyb3VwID0gdXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDEgKTsKLSAgICAKLSAgICBvdmVyd3JpdGVGaWxlc0NoZWNrYm94XyA9IHV0aWxzLmNyZWF0ZUNoZWNrYm94KCByZXNvdXJjZXNHcm91cCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9PVkVSV1JJVEVfRklMRVMsCi0gICAgCQlXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1BSX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGNyZWF0ZUZvbGRlcnNDaGVja2JveF8gPSB1dGlscy5jcmVhdGVDaGVja2JveCggcmVzb3VyY2VzR3JvdXAsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fQ1JFQVRFX0ZPTERFUlMsCi0gICAgCQlXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTICwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXUFJfQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGNoZWNrb3V0RmlsZXNDaGVja2JveF8gPSB1dGlscy5jcmVhdGVDaGVja2JveCggcmVzb3VyY2VzR3JvdXAsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fQ0hFQ0tPVVRfRklMRVMsCi0gICAgCQlXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXUFJfQ0hFQ0tCT1hfQ0hFQ0tPVVRfRklMRVMgKTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgKQotICB7IAotICAgIG92ZXJ3cml0ZUZpbGVzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggY29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpICk7Ci0gICAgY3JlYXRlRm9sZGVyc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpICk7Ci0gICAgY2hlY2tvdXRGaWxlc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpICk7IAotICAgIAotICAgIGNvbnRleHRfID0gY29udGV4dDsKLSAgfQotICAKLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKSAKLSAgeyAgICAKLSAgICBjb250ZXh0Xy5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoIG92ZXJ3cml0ZUZpbGVzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dF8uc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoIGNyZWF0ZUZvbGRlcnNDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0Xy5zZXRDaGVja291dEZpbGVzRW5hYmxlZCggY2hlY2tvdXRGaWxlc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSApOwotICAgIAotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1Byb2plY3RTZWxlY3Rpb25EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Qcm9qZWN0U2VsZWN0aW9uRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNDNjYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1Byb2plY3RTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDgwMiAgIDE0ODczMSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDgwNjAzICAgMjM0MjUxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVwZGF0ZWQgdGhlIHNpemUgb2YgcHJvamVjdCBzZWxlY3Rpb24gZGlhbG9nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLlByb2plY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIFNpbXBsZURpYWxvZyB7Ci0KLQlTdHJpbmcgdGl0bGVUZXh0Xz0iIjsKLQlTdHJpbmcgcHJvamVjdE5hbWVfPSIiOwotCVN0cmluZyBlYXJQcm9qZWN0TmFtZV89IiI7Ci0JU3RyaW5nIGNvbXBvbmVudFR5cGVfPSIiOwotCVR5cGVSdW50aW1lU2VydmVyIHRyc187Ci0JYm9vbGVhbiBuZWVkRUFSXzsKLQkKLQlwdWJsaWMgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyhTaGVsbCBzaGVsbCwgUGFnZUluZm8gcGFnZUluZm8pCi0JewotCQlzdXBlcihzaGVsbCwgcGFnZUluZm8pOwotCQl0aXRsZVRleHRfID0gcGFnZUluZm8uZ2V0UGFnZU5hbWUoKTsKLQl9CQotCQotCXByb3RlY3RlZCB2b2lkIGNhbGxTZXR0ZXJzKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCVByb2plY3RTZWxlY3Rpb25XaWRnZXQgcHJvaldpZGdldCA9IChQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpOwkJCi0JCXByb2pXaWRnZXQuc2V0RWFyUHJvamVjdE5hbWUoZWFyUHJvamVjdE5hbWVfKTsKLQkJcHJvaldpZGdldC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZV8pOwotCQlwcm9qV2lkZ2V0LnNldENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZV8pOwotCQlwcm9qV2lkZ2V0LnNldE5lZWRFQVIobmVlZEVBUl8pOwotCQlwcm9qV2lkZ2V0LnNldFR5cGVSdW50aW1lU2VydmVyKHRyc18pOwotCQkKLQkJcHJvaldpZGdldC5yZWZyZXNoUHJvamVjdEl0ZW1zKCk7Ci0JfQotCQotCSAgcHJvdGVjdGVkIFBvaW50IGdldEluaXRpYWxTaXplKCkKLQkgIHsKLQkgICAgcmV0dXJuIHRoaXMuZ2V0U2hlbGwoKS5jb21wdXRlU2l6ZSgzMjUsIFNXVC5ERUZBVUxULCB0cnVlKTsgCi0JICB9Ci0KLQotCSAgcHJvdGVjdGVkIHZvaWQgc2V0U2hlbGxTdHlsZShpbnQgbmV3U2hlbGxTdHlsZSkKLQkgIHsKLQkgICAgc3VwZXIuc2V0U2hlbGxTdHlsZSggbmV3U2hlbGxTdHlsZSB8IFNXVC5SRVNJWkUgKTsgIAotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbChTaGVsbCBuZXdTaGVsbCkKLQkgIHsKLQkgICAgbmV3U2hlbGwuc2V0VGV4dCh0aXRsZVRleHRfKTsgICAKLQkgICAgc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCSAgfQkKLQkJCi0JCXB1YmxpYyB2b2lkIHNldFByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCQkgIHsKLQkJCQlwcm9qZWN0TmFtZV8gPSBuYW1lOwotCQkgIH0KLQkJCi0JCXB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdE5hbWUoKQotCQkgIHsKLQkJCQlyZXR1cm4gcHJvamVjdE5hbWVfOwotCQkgIH0KLQkJCi0JCSBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkJICB7CQkJCi0JCQkJZWFyUHJvamVjdE5hbWVfID0gbmFtZTsKLQkJICB9IAotCQkgCi0JCSBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3ROYW1lKCkKLQkJIHsKLQkJCSByZXR1cm4gZWFyUHJvamVjdE5hbWVfOwotCQkgfQotCQkgCi0JCSBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0Q29tcG9uZW50VHlwZSggU3RyaW5nIHR5cGUgKQotCQkgIHsKLQkJCSAgICBjb21wb25lbnRUeXBlXyA9IHR5cGU7Ci0JCSAgfQotCi0JCSBwdWJsaWMgU3RyaW5nIGdldFByb2plY3RDb21wb25lbnRUeXBlKCkKLQkJICB7Ci0JCQkgcmV0dXJuIGNvbXBvbmVudFR5cGVfOwotCQkgIH0KLQkJIAotCQkgcHVibGljIHZvaWQgc2V0TmVlZEVBUihib29sZWFuIGIpCi0JCSAgewotCQkJICAgIG5lZWRFQVJfID0gYjsJCQkgICAgCi0JCSAgfQotCQkgCi0JCSBwdWJsaWMgYm9vbGVhbiBnZXROZWVkRUFSKCkKLQkJICB7Ci0JCQkgICAgcmV0dXJuIG5lZWRFQVJfOwkJCQkKLQkJICB9Ci0JCSAKLQkJIHB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHRycykKLQkJIHsKLQkJCSAgICB0cnNfID0gdHJzOyAKLQkJIH0KLQkJIAotCQkgcHVibGljIGJvb2xlYW4gY2xvc2UoKSB7Ci0KLQkJCXByb2plY3ROYW1lXyA9ICgoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0UHJvamVjdE5hbWUoKTsKLQkJCWVhclByb2plY3ROYW1lXyA9ICgoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0RWFyUHJvamVjdE5hbWUoKTsgCi0JCQluZWVkRUFSXyA9ICgoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0TmVlZEVBUigpOwotCQkJY29tcG9uZW50VHlwZV8gPSAoKFByb2plY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldENvbXBvbmVudFR5cGUoKTsKLQkJCXJldHVybiBzdXBlci5jbG9zZSgpOwotCQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODExMzhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5OwotICBwcml2YXRlIGJvb2xlYW4gcHVibGlzaFRvUHJpdmF0ZVVEREk7Ci0gIHByaXZhdGUgQ29tbWFuZFdpZGdldEJpbmRpbmcgcHJpdmF0ZVVERElCaW5kaW5nOwotICAKLSAgcHVibGljIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKG51bGwsICIiKTsKLSAgICBwcml2YXRlVURESUJpbmRpbmcgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKS5nZXRCaW5kaW5nKCk7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7Ci0gICAgaWYgKHByaXZhdGVVRERJQmluZGluZyAhPSBudWxsICYmIHB1Ymxpc2hUb1ByaXZhdGVVRERJICYmICFQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkKLSAgICB7Ci0gICAgICBwcml2YXRlVURESUJpbmRpbmcucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnkpOwotICAgICAgcHJpdmF0ZVVERElCaW5kaW5nLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAgICAgcHJpdmF0ZVVERElCaW5kaW5nLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnkpOwotICAgICAgcmV0dXJuIHByaXZhdGVVRERJQmluZGluZy5jcmVhdGUoKS5jcmVhdGUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudChDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgCWRhdGFNYXBwaW5nUmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gbmV3IFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50KCk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyQ2FuRmluaXNoKGNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnkpOwotICAJZnJhZ21lbnQuc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkocHVibGlzaFRvUHJpdmF0ZVVEREkpOwotICAJcmV0dXJuIGZyYWdtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkoYm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVEREkgPSBwdWJsaXNoOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFdTV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFdTV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNzRkNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1B1Ymxpc2hXU1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDQzMCAgIDIxNDYyNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUmVtb3ZlIGZhdm91cml0ZSBVRERJIHJlZ2lzdHJpZXMgZnJvbSBXZWIgU2VydmljZSBQdWJsaXNoIHBhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS51ZGRpLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uczsKLQotCi1wdWJsaWMgY2xhc3MgUHVibGlzaFdTV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIC8qIENPTlRFWFRfSUQgUFdQQjAwMDEgZm9yIHRoZSBVRERJIFB1Ymxpc2ggUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUEJfUEFHRSA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QV1BCMDAwMSI7Ci0gIC8qIENPTlRFWFRfSUQgUFdQQjAwMDIgZm9yIHRoZSBVRERJIExhdW5jaCBjaGVjayBib3ggb2YgdGhlIFVEREkgUHVibGlzaCBQYWdlICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0ggPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFdQQjAwMDIiOwotICBwcml2YXRlIEJ1dHRvbiBsYXVuY2hVRERJQ2hlY2tib3hfOwotICBwcml2YXRlIEJ1dHRvbiBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94XzsKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBCb29sZWFuIHB1Ymxpc2g7Ci0KLSAgcHVibGljIFB1Ymxpc2hXU1dpZGdldChib29sZWFuIHB1Ymxpc2gpCi0gIHsKLQkgIHRoaXMucHVibGlzaCA9IG5ldyBCb29sZWFuKHB1Ymxpc2gpOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICB0aGlzLnN0YXR1c0xpc3RlbmVyID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgTGlzdGVuZXIgc2VsTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBoYW5kbGVTZWxlY3Rpb25FdmVudChldmVudCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQQl9QQUdFKTsKLSAgICBJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QV1BCX1BBR0UpOwotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5DSEVDSyk7Ci0gICAgaWYgKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpCi0gICAgICBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fV1NfUFVCTElTSF9QUklWQVRFX1VEREkpOwotICAgIGVsc2UKLSAgICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU19GSU5EX1BSSVZBVEVfVURESSk7Ci0gICAgbGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0gpOwotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHNlbExpc3RlbmVyKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAobGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF8sIElORk9QT1BfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0gpOwotICAgIGxhdW5jaFVERElDaGVja2JveF8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLSAgICBpZiAocHVibGlzaC5ib29sZWFuVmFsdWUoKSkKLSAgICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1dTX1BVQkxJU0gpOwotICAgIGVsc2UKLSAgICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1dTX0ZJTkQpOwotICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0gpOwotICAgIGxhdW5jaFVERElDaGVja2JveF8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgc2VsTGlzdGVuZXIpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChsYXVuY2hVRERJQ2hlY2tib3hfLCBJTkZPUE9QX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIKTsKLSAgICBpbml0UHJpdmF0ZVVEREkoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0UHJpdmF0ZVVEREkoKQotICB7Ci0gICAgaWYgKCFwdWJsaXNoLmJvb2xlYW5WYWx1ZSgpICYmICFQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkKLSAgICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNlbGVjdGlvbkV2ZW50KEV2ZW50IGV2ZW50KQotICB7Ci0gICAgc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHVibGljVURESShib29sZWFuIHB1Ymxpc2gpCi0gIHsKLSAgICBsYXVuY2hVRERJQ2hlY2tib3hfLnNldFNlbGVjdGlvbihwdWJsaXNoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1B1YmxpY1VEREkoQm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgc2V0UHVibGlzaFRvUHVibGljVURESShwdWJsaXNoLmJvb2xlYW5WYWx1ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKGJvb2xlYW4gcHVibGlzaCkKLSAgewotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldFNlbGVjdGlvbihwdWJsaXNoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKEJvb2xlYW4gcHVibGlzaCkKLSAgewotICAgIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaFRvUHVibGljVURESSgpCi0gIHsKLSAgICByZXR1cm4gbGF1bmNoVURESUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2hUb1ByaXZhdGVVRERJKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEZvcmNlTGF1bmNoT3V0c2lkZUlERSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgTGF1bmNoT3B0aW9uW10gZ2V0TGF1bmNoT3B0aW9ucygpCi0gIHsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChsYXVuY2hVRERJQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMLCAiIikpOwotICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuUFVCTElTSF9VUkwsICIiKSk7Ci0gICAgfQotICAgIGlmIChsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IHByaXZhdGVSZWcgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBwcml2YXRlVHlwZSA9IHByaXZhdGVSZWcuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKTsKLSAgICAgIFN0cmluZ1tdIHByaXZhdGVJbnF1aXJ5VVJMID0gcHJpdmF0ZVR5cGUuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeUlucXVpcnlBUEkoKTsKLSAgICAgIFN0cmluZ1tdIHByaXZhdGVQdWJsaXNoVVJMID0gcHJpdmF0ZVR5cGUuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVB1Ymxpc2hBUEkoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpdmF0ZUlucXVpcnlVUkwubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMLCBwcml2YXRlSW5xdWlyeVVSTFtpXSkpOwotICAgICAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5QVUJMSVNIX1VSTCwgcHJpdmF0ZVB1Ymxpc2hVUkxbaV0pKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChMYXVuY2hPcHRpb25bXSkgbGF1bmNoT3B0aW9uVmVjdG9yLnRvQXJyYXkobmV3IExhdW5jaE9wdGlvblswXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZWFiMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0ICAgMTM0OTEzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgIAotICogMjAwNjA1MTcgICAxNDIwMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxOCAgIDE0MjU1NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLldvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYnNlcnZpY2UuV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWJzZXJ2aWNlLmhlbHBlci5XZWJTZXJ2aWNlc01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICogCi0gKiBJbml0aWFsaXplIGFuZCBsb2FkIHRoZSBoYW5kbGVycyBkYXRhCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kIHsKLQotICBwcml2YXRlIFdzZGRSZXNvdXJjZVtdIHdzZGRSZXNvdXJjZV8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbk5hbWVfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JTdGF0dXNNc2dfID0gbnVsbDsKLSAgcHJpdmF0ZSBib29sZWFuIGlzTXVsdGlwbGVTZWxlY3Rpb25fOwotICBwcml2YXRlIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl87Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uID09IG51bGwpIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQgKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlbGVjdGlvbi5zaXplKCk+MSl7Ci0gICAgCXN0YXR1cyA9IHByb2Nlc3NNdWx0aXBsZUhhbmRsZXJzKGVudik7Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgc3RhdHVzID0gcHJvY2Vzc0hhbmRsZXJzKGVudik7Ci0gICAgcmV0dXJuIHN0YXR1czsKLQotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgcHJvY2Vzc0hhbmRsZXJzKElFbnZpcm9ubWVudCBlbnYpIHsKLSAgICB0cnkgewotICAgICAgV2ViU2VydmljZXNNYW5hZ2VyIHdlYlNlcnZpY2VzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLSAgICAgIExpc3QgYWxsV1NETFNlcnZpY2VzID0gd2ViU2VydmljZXNNYW5hZ2VyLmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgaW50IHNlcnZpY2VzU2l6ZSA9IGFsbFdTRExTZXJ2aWNlcy5zaXplKCk7Ci0KLSAgICAgIHdzZGRSZXNvdXJjZV89IG5ldyBXc2RkUmVzb3VyY2Vbc2VydmljZXNTaXplXTsKLSAgICAgIHdzZGRSZXNvdXJjZV9bMF0gPSBnZXRXc2RkUmVzb3VyY2VGcm9tU2VsZWN0aW9uKCk7Ci0gICAgICBpZiAod3NkZFJlc291cmNlX1swXSA9PSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NERF9OT1RfRk9VTkQpOwotICAgICAgfQotICAgICAKLSAgICAgIC8vIGNoZWNrIGZvciBhbm90aGVyIHdzZGRSZXNvdXJjZSBvZiBhbm90aGVyIEoyRUUgbGV2ZWwKLSAgICAgIGludCB4ID0gMDsKLSAgICAgIHdoaWxlICh4PHNlcnZpY2VzU2l6ZSkgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSApYWxsV1NETFNlcnZpY2VzLmdldCh4KTsKLSAgICAgICAgV3NkZFJlc291cmNlIHdzZGRSZXMgPSB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKHNlcnZpY2UpOwotICAgICAgICBib29sZWFuIGlzVW5pcXVlV3NkZCA9IHRydWU7Ci0gICAgICAgIGZvciAoaW50IHc9MDt3PHdzZGRSZXNvdXJjZV8ubGVuZ3RoO3crKyl7Ci0gICAgICAgIAlpZiAod3NkZFJlcy5lcXVhbHMod3NkZFJlc291cmNlX1t3XSkpewotICAgICAgICAJCWlzVW5pcXVlV3NkZCA9IGZhbHNlOwotICAgICAgICAJCWJyZWFrOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNVbmlxdWVXc2RkKSB7Ci0gICAgICAgICAgd3NkZFJlc291cmNlX1t4XSA9IHdzZGRSZXM7Ci0gICAgICAgIH0KLSAgICAgICAgeCsrOwotICAgICAgfQotCi0gICAgICAvLyBkZXRlcm1pbmUgdG90YWwgIyBmb3IgZGVzY3JpcHRpb25zCi0gICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfID0gbmV3IEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltnZXROdW1iZXJvZlNlcnZpY2VzKHdzZGRSZXNvdXJjZV8pXTsKLSAgICAgIAotICAgICAgaW50IGRlc2NDb3VudGVyID0gMDsKLSAgICAgIGZvciAoaW50IHk9MDt5PHdzZGRSZXNvdXJjZV8ubGVuZ3RoO3krKykgewotICAgICAgICBpZiAod3NkZFJlc291cmNlX1t5XSAhPW51bGwpIHsKLQkgICAgICAgIFdlYlNlcnZpY2VzIHdlYlNlcnZpY2VzID0gd3NkZFJlc291cmNlX1t5XS5nZXRXZWJTZXJ2aWNlcygpOwotCSAgICAgICAgaWYgKHdlYlNlcnZpY2VzICE9IG51bGwpIHsKLQkgICAgICAgICAgTGlzdCB3c0Rlc2NyaXB0aW9ucyA9IHdlYlNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKTsKLQkgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c0Rlc2NyaXB0aW9ucy5zaXplKCkgOyBpKyspIHsKLQkgCi0JICAgICAgICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzRGVzY3JpcHRpb24gPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKSB3c0Rlc2NyaXB0aW9ucy5nZXQoaSk7Ci0JICAgICAgICAgICAgVmVjdG9yIGhhbmRsZXJzID0gbmV3IFZlY3RvcigpOyAgCi0JICAgICAgICAgICAgTGlzdCB3c1BvcnRDb21wb25lbnRzID0gd3NEZXNjcmlwdGlvbi5nZXRQb3J0Q29tcG9uZW50cygpOwotCSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NQb3J0Q29tcG9uZW50cy5zaXplKCk7IGorKykgewotCSAgICAgICAgICAgICAgUG9ydENvbXBvbmVudCB3c1BvcnQgPSAoUG9ydENvbXBvbmVudCkgd3NQb3J0Q29tcG9uZW50cy5nZXQoaik7Ci0JICAgICAgICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSB3c1BvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKTsKLQkgICAgICAgICAgICAgIExpc3Qgd3NIYW5kbGVycyA9IHdzUG9ydC5nZXRIYW5kbGVycygpOwotCSAgICAgCi0JICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdzSGFuZGxlcnMuc2l6ZSgpOyBrKyspIHsKLQkgIAotCSAgICAgICAgICAgICAgICBIYW5kbGVyIHdzSGFuZGxlciA9IChIYW5kbGVyKSB3c0hhbmRsZXJzLmdldChrKTsKLQkgIAotCSAgICAgICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGhhbmRsZXJJdGVtID0gbmV3IEhhbmRsZXJUYWJsZUl0ZW0oKTsKLQkgICAgICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0SGFuZGxlcih3c0hhbmRsZXIpOwotCSAgICAgICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRIYW5kbGVyTmFtZSh3c0hhbmRsZXIuZ2V0SGFuZGxlck5hbWUoKSk7Ci0JICAgICAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJDbGFzc05hbWUod3NIYW5kbGVyLmdldEhhbmRsZXJDbGFzcygpKTsKLQkgICAgICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0UG9ydCh3c1BvcnQpOwotCSAgICAgICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRQb3J0TmFtZShwb3J0TmFtZSk7Ci0JICAgICAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldFdzRGVzY1JlZih3c0Rlc2NyaXB0aW9uKTsKLQkgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgICAgIGhhbmRsZXJzLmFkZChoYW5kbGVySXRlbSk7Ci0JICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIFN0cmluZyB3c0Rlc2NOYW1lID0gd3NEZXNjcmlwdGlvbi5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25OYW1lKCk7Ci0JICAgICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tkZXNjQ291bnRlcl0gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyKCk7Ci0JICAgICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tkZXNjQ291bnRlcl0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotCSAgICAgICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bZGVzY0NvdW50ZXJdLnNldERlc2NyaXB0aW9uT2JqZWN0KHdzRGVzY3JpcHRpb24pOwotCSAgICAgICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bZGVzY0NvdW50ZXJdLnNldERlc2NyaXB0aW9uTmFtZSh3c0Rlc2NOYW1lKTsKLQkgICAgICAgICAgICBkZXNjQ291bnRlcisrOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9PSBudWxsKXsKLSAgICAgICAgICAvL3JlcG9ydCBubyBXZWIgc2VydmljZSBpcyBhdmFpbGFibGUKLSAgICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XRUJfU0VSVklDRVNfTk9UX0ZPVU5EKTsgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwgZSk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgLyoqCi0gICAqIEZvciBwcm9jZXNzaW5nIG11bHRpcGxlIHNlcnZpY2Ugc2VsZWN0aW9uOyBvbmx5IHByZXBhcmUgdGFibGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbiBuYW1lcwotICAgKiBkZXNjcmlwdGlvbiBvYmplY3RzIHdpbGwgYmUgcHJvY2Vzc2VkIGxhdGVyIGJ5IHRoZSBvdXRwdXQgY29tbWFuZCAKLSAgICogQHBhcmFtIGVudgotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIElTdGF0dXMgcHJvY2Vzc011bHRpcGxlSGFuZGxlcnMoSUVudmlyb25tZW50IGVudil7Ci0KLQkgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGdldFNlbGVjdGVkU2VydmljZXMoKTsKLSAgICAgIGlmIChlcnJvclN0YXR1c01zZ18gIT0gbnVsbCl7Ci0gICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yU3RhdHVzTXNnXyk7Ci0gICAgICB9Ci0gICAgICBpc011bHRpcGxlU2VsZWN0aW9uXyA9IHRydWU7Ci0KLSAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW3NlcnZpY2VzLmxlbmd0aF07Ci0gICAgICBWZWN0b3IgaGFuZGxlcnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5sZW5ndGg7aSsrKXsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBkZXNjTmFtZSA9IHNlcnZpY2VzW2ldLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c0Rlc2NyaXB0aW9uID0gZ2V0U2VydmljZURlc2NyaXB0aW9uKHNlcnZpY2VzW2ldLCBkZXNjTmFtZSk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyKCk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotICAgICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2ldLnNldERlc2NyaXB0aW9uTmFtZShkZXNjTmFtZSk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uc2V0RGVzY3JpcHRpb25PYmplY3Qod3NEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICAqIE1hdGNoZXMgdGhlIHNlcnZpY2VOYW1lIHdpdGggdGhlIFNlcnZpY2VEZXNjcmlwdGlvbk5hbWUgdG8gZ2V0IHRoZSBXZWJTZXJ2aWNlRGVzY3JpcHRpb24KLSAgICogQHBhcmFtIHNlcnZpY2UKLSAgICogQHBhcmFtIHNlcnZpY2VOYW1lCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgV2ViU2VydmljZURlc2NyaXB0aW9uIGdldFNlcnZpY2VEZXNjcmlwdGlvbihTZXJ2aWNlIHNlcnZpY2UsIFN0cmluZyBzZXJ2aWNlTmFtZSl7Ci0gICAgV2ViU2VydmljZXNNYW5hZ2VyIHdlYlNlcnZpY2VzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLSAgICBXc2RkUmVzb3VyY2Ugd3NkZFJlc291cmNlID0gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZShzZXJ2aWNlKTsKLSAgICBpZiAod3NkZFJlc291cmNlIT1udWxsKSB7Ci0gICAgICBXZWJTZXJ2aWNlcyBzZXJ2aWNlcyA9IHdzZGRSZXNvdXJjZS5nZXRXZWJTZXJ2aWNlcygpOwotICAgICAgaWYgKHNlcnZpY2VzIT1udWxsKSB7Ci0gICAgICAgIExpc3QgZGVzY3JpcHRpb25zICA9IHNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLnNpemUoKTtpKyspewotICAgICAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKWRlc2NyaXB0aW9ucy5nZXQoaSk7Ci0gICAgICAgICAgaWYgKHdzZCE9bnVsbCAmJiB3c2QuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9uTmFtZSgpLmVxdWFscyhzZXJ2aWNlTmFtZSkpewotICAgICAgICAgICAgcmV0dXJuIHdzZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldElzTXVsdGlwbGVTZWxlY3Rpb24oKXsKLQkgIHJldHVybiB0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25fOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5Ta2VsZXRvbkVuYWJsZWQoKSB7Ci0gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3Rpb25fKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc291cmNlT3V0cHV0TG9jYXRpb25fLgotICAgKi8KLSAgcHVibGljIElQYXRoW10gZ2V0U291cmNlT3V0cHV0TG9jYXRpb24oKSB7Ci0gICAgSVBhdGhbXSBsb2NhdGlvbnMgPSBudWxsOwotICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0KLSAgICBpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0gICAgICBsb2NhdGlvbnMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJvamVjdCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcHJvamVjdCA9IHByb2plY3RfOwotICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCkgewotICAgICAgICBsb2NhdGlvbnMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJvamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgV3NkZFJlc291cmNlCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBXc2RkUmVzb3VyY2VbXSBnZXRXc2RkUmVzb3VyY2UoKSB7Ci0gICAgcmV0dXJuIHdzZGRSZXNvdXJjZV87Ci0gIH0KLQotICBwcml2YXRlIFdzZGRSZXNvdXJjZSBnZXRXc2RkUmVzb3VyY2VGcm9tU2VsZWN0aW9uKCkgewotICAgIFdlYlNlcnZpY2VzTWFuYWdlciB3ZWJTZXJ2aWNlc01hbmFnZXIgPSBuZXcgV2ViU2VydmljZXNNYW5hZ2VyKCk7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgIGlmIChpbml0U2VsICE9IG51bGwgJiYgaW5pdFNlbC5zaXplKCkgPT0gMSkgewotICAgICAgT2JqZWN0IG9iaiA9IGluaXRTZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU2VydmljZUltcGwpIHsKLSAgICAgICAgLy8gU2VydmljZSBvYmplY3QKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIG9iajsKLSAgICAgICAgZGVzY3JpcHRpb25OYW1lXyA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZSk7Ci0gICAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKHNlcnZpY2UpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkgewotICAgICAgICAvLyBXU0RMIHJlc291cmNlCi0gICAgICAgIFdTRExSZXNvdXJjZUltcGwgcmVzID0gKFdTRExSZXNvdXJjZUltcGwpIG9iajsKLSAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocmVzKTsKLSAgICAgICAgTGlzdCB3c2RsUmVzb3VyY2VzID0gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdTRExTZXJ2aWNlcyhyZXMpOwotICAgICAgICByZXR1cm4gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZSgoU2VydmljZSkgd3NkbFJlc291cmNlcy5nZXQoMCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSkgewotICAgICAgICBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlIHdzbmd0ID0gKFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUpIG9iajsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upd3NuZ3QuZ2V0V3NkbFNlcnZpY2UoKTsKLSAgICAgICAgZGVzY3JpcHRpb25OYW1lXyA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsgICAgICAgIAotICAgICAgICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlKTsKLSAgICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzTWFuYWdlci5nZXRXc2RkUmVzb3VyY2Uoc2VydmljZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJRmlsZSl7Ci0gICAgCSAgLy8gd2Vic2VydmljZXMueG1sIGZpbGUKLSAgICAJICBSZXNvdXJjZSByZXMgPSBXb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2UuZ2V0UmVzb3VyY2UoKElGaWxlKW9iaiwgdHJ1ZSk7Ci0gICAgCSAgV3NkZFJlc291cmNlIHdzZGRSZXMgPSAoV3NkZFJlc291cmNlKXJlczsKLSAgICAgICAgICBXZWJTZXJ2aWNlcyB3ZWJTZXJ2aWNlcyA9IHdzZGRSZXMuZ2V0V2ViU2VydmljZXMoKTsKLSAgICAgICAgICBpZiAod2ViU2VydmljZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgTGlzdCB3c0Rlc2NyaXB0aW9ucyA9IHdlYlNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgICAgIGlmICh3c0Rlc2NyaXB0aW9ucyE9bnVsbCkgewotICAgICAgICAgICAgICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NkID0gKFdlYlNlcnZpY2VEZXNjcmlwdGlvbil3c0Rlc2NyaXB0aW9ucy5nZXQoMCk7Ci0gICAgICAgICAgICAgIGRlc2NyaXB0aW9uTmFtZV8gPSB3c2QuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9uTmFtZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAJICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChyZXMpOwotICAgIAkgIHJldHVybiB3c2RkUmVzOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbDsKLQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRvdGFsIG51bWJlciBvZiBTZXJ2aWNlRGVzY3JpcHRpb25zIGdpdmVuIDE0IGFuZCAxMyBzZXJ2aWNlcwotICAgKiBAcGFyYW0gd3NkZFJlcwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGludCBnZXROdW1iZXJvZlNlcnZpY2VzKFdzZGRSZXNvdXJjZVtdIHdzZGRSZXMpewotICAgIGludCBudW09IDA7Ci0gICAgZm9yIChpbnQgaT0wO2k8d3NkZFJlcy5sZW5ndGg7aSsrKXsKLSAgICAJaWYgKHdzZGRSZXNbaV0hPW51bGwpIHsKLSAgICAJCVdlYlNlcnZpY2VzIHdzID0gd3NkZFJlc1tpXS5nZXRXZWJTZXJ2aWNlcygpOwotICAgIAkJaWYgKHdzIT1udWxsKXsKLSAgICAJCQludW0gKz0gd3MuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9ucygpLnNpemUoKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgICByZXR1cm4gbnVtOwotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEZvciBtdWx0aXBsZSBzZWxlY3Rpb24gb2YgU2VydmljZXMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBTZXJ2aWNlW10gZ2V0U2VsZWN0ZWRTZXJ2aWNlcygpewotCSAgV2ViU2VydmljZXNNYW5hZ2VyIHdzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLQkgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRTZWwgPSBnZXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0gIAkgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IG5ldyBTZXJ2aWNlW2luaXRTZWwuc2l6ZSgpXTsKLSAgCSAgd3NkZFJlc291cmNlXyA9IG5ldyBXc2RkUmVzb3VyY2VbaW5pdFNlbC5zaXplKCldOwotICAJICBJdGVyYXRvciBpdGVyID0gaW5pdFNlbC5pdGVyYXRvcigpOwotICAJICBmb3IgKGludCBpPTA7aTxpbml0U2VsLnNpemUoKTtpKyspIHsKLSAgCQkgIE9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLSAgCQkgIGlmIChvYmogaW5zdGFuY2VvZiBTZXJ2aWNlKXsKLSAgCQkJICBzZXJ2aWNlc1tpXSA9IChTZXJ2aWNlKW9iajsKLSAgCQkJICB3c2RkUmVzb3VyY2VfW2ldID0gd3NNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZShzZXJ2aWNlc1tpXSk7Ci0gIAkJICB9Ci0gIAkJICBlbHNlewotICAJCQkgIGVycm9yU3RhdHVzTXNnXyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9NVUxUSVBMRV9TRVJWSUNFX1NFTEVDVDsKLSAgCQkJICByZXR1cm4gbnVsbDsKLSAgCQkgIH0KLSAgCSAgfQotICAJICByZXR1cm4gc2VydmljZXM7Ci0gIH0KLSAgCi0KLSAgCi0gIC8qKgotICAgKiBHZXQgRGVzY3JpcHRpb24gTmFtZSBmb3Igc2luZ2xlIFdlYiBzZXJ2aWNlcyBzZWxlY3RlZAotICAgKiBudWxsIGlmIG11bGl0cGxlIHNlcnZpY2VzIGFyZSBzZWxlY3RlZAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uTmFtZSgpewotICAgIHJldHVybiBkZXNjcmlwdGlvbk5hbWVfOwotICB9Ci0gIAotICAvKioKLSAgICogQW4gYXJyYXkgb2YgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gZ2V0SGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycygpewotICAgIHJldHVybiBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfOwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY4YzYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAgIDEzNDkxMyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAKLSAqIDIwMDYwNTE3ICAgMTQyMDI3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Qb3J0Q29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Xc2RkUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuV3NkZEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5pbnRlcm5hbC5lbWYudXRpbGl0aWVzLkV0b29sc0NvcHlVdGlsaXR5OwotCi0vKgotICogUHJvdmlkZSBhIHdheSB0byBleHRlcm5hbGl6ZSB0aGUgZWRpdGVkIGZpZWxkcyBhbmQgY3JlYXRlIG5ldyBoYW5kbGVycwotICogIAotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBXc2RkUmVzb3VyY2VbXSB3c2RkUmVzb3VyY2VfOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl87Ci0gIHByaXZhdGUgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLQotICAvKioKLSAgICogRm9yIGVhY2ggSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLCB0aGUgdXNlciBzZWxlY3RlZCBIYW5kbGVycyBhcmUKLSAgICogc3luYydkIHVwIHdpdGggdGhlIGludGVybmFsIG1vZGVsCi0gICAqIEZvciBtdWx0aXBsZSBzZXJ2aWNlcywgaGFuZGxlcnMgYXJlIGFkZGVkIChub3QgcmVtb3ZlZCkgdG8gZWFjaCBwb3J0LgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIHRyeSB7Ci0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pewotICAgICAgICBmb3IgKGludCBpPTA7IGk8aGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXy5sZW5ndGg7aSsrKXsKLSAgICAgICAgICAgCi0gICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tpXS5hZGRIYW5kbGVyVG9BbGxQb3J0cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLy8gYWRkIGhhbmRsZXIocykgZm9yIHNpbmdsZSBzZXJ2aWNlIHNlbGVjdGVkCi0gICAgICAgIGZvciAoaW50IGg9MDtoPGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8ubGVuZ3RoO2grKyl7Ci0gIAotICAgICAgICAgIEhhc2h0YWJsZSB3c1BvcnRzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgSGFzaHRhYmxlIHdzUG9ydFRvSGFuZGxlclRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgICAgICAgICBTdHJpbmcgc2VydmljZURlc2NOYW1lID0gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1toXS5nZXREZXNjcmlwdGlvbk5hbWUoKTsKLSAgICAgICAgICAvLyBsb2FkIFBvcnROYW1lIC0+IFBvcnRDb21wb25lbnQgdGFibGUKLSAgICAgICAgICBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgaGRoID0gSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyLmdldEZvckRlc2NyaXB0aW9uTmFtZShoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLCBzZXJ2aWNlRGVzY05hbWUpOwotICAgICAgICAgIGlmIChoZGghPW51bGwpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzRGVzY3JpcHRpb25fID0gIGhkaC5nZXREZXNjcmlwdGlvbk9iamVjdCgpOyAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh3c0Rlc2NyaXB0aW9uXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIExpc3Qgd3NQb3J0cyA9IHdzRGVzY3JpcHRpb25fLmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd3NQb3J0cy5zaXplKCk7IGsrKykgewotICAgICAgICAgICAgICAgIFBvcnRDb21wb25lbnQgcG9ydCA9IChQb3J0Q29tcG9uZW50KSB3c1BvcnRzLmdldChrKTsKLSAgICAgICAgICAgICAgICB3c1BvcnRzVGFibGUucHV0KHBvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKSwgcG9ydCk7Ci0gICAgICAgICAgICAgICAgd3NQb3J0VG9IYW5kbGVyVGFibGUucHV0KHBvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKSwgbmV3IEFycmF5TGlzdCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMaXN0IGhhbmRsZXJUYWJsZUl0ZW1zID0gaGRoLmdldEhhbmRsZXJMaXN0KCk7ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhbmRsZXJUYWJsZUl0ZW1zICE9IG51bGwpIHsKLSAgCi0gICAgICAgICAgICAgIFdzZGRGYWN0b3J5IHdzZGRGYWN0b3J5ID0gbmV3IFdzZGRGYWN0b3J5SW1wbCgpOwotICAKLSAgICAgICAgICAgICAgLy9mb3JtIHBvcnQgY29tcG9uZW50cyB0YWJsZXMgZmlyc3QKLSAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyVGFibGVJdGVtcy5zaXplKCk7IGkrKykgewotICAKLSAgICAgICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKSBoYW5kbGVyVGFibGVJdGVtcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgUG9ydENvbXBvbmVudCB3c1BvcnQgPSAoUG9ydENvbXBvbmVudCkgaHRpLmdldFBvcnQoKTsKLSAgICAgICAgICAgICAgICBpZiAod3NQb3J0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvL2ZpbmQgaXQKLSAgICAgICAgICAgICAgICAgIGlmICh3c1BvcnRzVGFibGUuZ2V0KGh0aS5nZXRQb3J0TmFtZSgpKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB3c1BvcnQgPSAoUG9ydENvbXBvbmVudCkgd3NQb3J0c1RhYmxlLmdldChodGkuZ2V0UG9ydE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGl0OyBzaG91bGQgbm90IGdldCBpbnRvIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgd3NQb3J0ID0gd3NkZEZhY3RvcnkuY3JlYXRlUG9ydENvbXBvbmVudCgpOwotICAgICAgICAgICAgICAgICAgICB3c1BvcnQuc2V0UG9ydENvbXBvbmVudE5hbWUoaHRpLmdldFBvcnROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICB3c1BvcnRzVGFibGUucHV0KHdzUG9ydC5nZXRQb3J0Q29tcG9uZW50TmFtZSgpLCB3c1BvcnQpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3c1BvcnRUb0hhbmRsZXJUYWJsZS5wdXQod3NQb3J0LmdldFBvcnRDb21wb25lbnROYW1lKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgCi0gICAgICAgICAgICAgIC8vIGZvcm0gSGFuZGxlciBhbmQgcG9ydHMgdGFibGUKLSAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyVGFibGVJdGVtcy5zaXplKCk7IGkrKykgewotICAgIAotICAgICAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pIGhhbmRsZXJUYWJsZUl0ZW1zLmdldChpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSBodGkuZ2V0UG9ydE5hbWUoKTsKLSAgICAKLSAgICAgICAgICAgICAgICBQb3J0Q29tcG9uZW50IHBvcnQgPSAoUG9ydENvbXBvbmVudCkgd3NQb3J0c1RhYmxlLmdldChwb3J0TmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcnQgPT0gbnVsbCkgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICAgICAgICAgICAgICBMaXN0IGV4aXN0aW5nSGFuZGxlcnMgPSBwb3J0LmdldEhhbmRsZXJzKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgT2JqZWN0IGhhbmRsZXIgPSBodGkuZ2V0SGFuZGxlcigpOwotICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdIYW5kbGVycy5jb250YWlucyhoYW5kbGVyKSkgewotICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGl0Ci0gICAgICAgICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c2RkRmFjdG9yeS5jcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnNldEhhbmRsZXJOYW1lKGh0aS5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlckNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgKChMaXN0KSB3c1BvcnRUb0hhbmRsZXJUYWJsZS5nZXQocG9ydE5hbWUpKS5hZGQobmV3SGFuZGxlcik7Ci0gICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAvLyBjbG9uZSBpdAotICAgICAgICAgICAgICAgICAgRXRvb2xzQ29weVV0aWxpdHkgY29weVV0aWwgPSBuZXcgRXRvb2xzQ29weVV0aWxpdHkoKTsKLSAgICAgICAgICAgICAgICAgIGNvcHlVdGlsLnNldENvcHlBZGFwdGVycyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgIEhhbmRsZXIgY2xvbmVkSGFuZGxlciA9IChIYW5kbGVyKSBjb3B5VXRpbC5jb3B5KChIYW5kbGVyKSBoYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICgoTGlzdCkgd3NQb3J0VG9IYW5kbGVyVGFibGUuZ2V0KHBvcnROYW1lKSkuYWRkKGNsb25lZEhhbmRsZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotIAotICAgICAgICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIGhhbmRsZXJzIGZyb20gcG9ydHMKLSAgICAgICAgICAgIHJlbW92ZUV4aXN0aW5nSGFuZGxlcnMod3NQb3J0c1RhYmxlLCB3c1BvcnRUb0hhbmRsZXJUYWJsZSk7Ci0gICAgCi0gICAgICAgICAgICAvLyBhZGQgcG9ydHMgdG8gd3NEZXNjcmlwdGlvbgotICAgICAgICAgICAgYWRkUG9ydHNUb0Rlc2NyaXB0aW9ucyh3c1BvcnRzVGFibGUsIHdzRGVzY3JpcHRpb25fKTsKLSAgICAKLSAgICAgICAgICAgIC8vIGFkZCBoYW5kbGVycyB0byBwb3J0cwotICAgICAgICAgICAgYWRkSGFuZGxlcnNUb1BvcnRzKHdzUG9ydHNUYWJsZSwgd3NQb3J0VG9IYW5kbGVyVGFibGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvLyBzYXZlCi0gICAgICBpZiAod3NkZFJlc291cmNlXyAhPSBudWxsKSB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHdzZGRSZXNvdXJjZV8ubGVuZ3RoO2krKykgewotICAgICAgICAJaWYgKHdzZGRSZXNvdXJjZV9baV0hPW51bGwpCi0gICAgICAgIAkJd3NkZFJlc291cmNlX1tpXS5zYXZlKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gIAotICAgICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZW1vdmVFeGlzdGluZ0hhbmRsZXJzKEhhc2h0YWJsZSBwb3J0c1RhYmxlLCBIYXNodGFibGUgcG9ydHNUb0hhbmRsZXJzVGFibGUpIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcG9ydHMgPSBwb3J0c1RvSGFuZGxlcnNUYWJsZS5rZXlzKCk7Ci0gICAgICB3aGlsZSAocG9ydHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgU3RyaW5nIHBvcnROYW1lID0gKFN0cmluZykgcG9ydHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgT2JqZWN0IHBvcnQgPSBwb3J0c1RhYmxlLmdldChwb3J0TmFtZSk7Ci0gICAgICAgIGlmIChwb3J0ICE9IG51bGwgJiYgcG9ydCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gKChQb3J0Q29tcG9uZW50KSBwb3J0KS5nZXRIYW5kbGVycygpOwotICAgICAgICAgIGhhbmRsZXJzLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRQb3J0c1RvRGVzY3JpcHRpb25zKEhhc2h0YWJsZSBwb3J0c1RhYmxlLCBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NEZXNjcmlwdGlvbl8pIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcG9ydHMgPSBwb3J0c1RhYmxlLmtleXMoKTsKLSAgICAgIHdoaWxlIChwb3J0cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSAoU3RyaW5nKSBwb3J0cy5uZXh0RWxlbWVudCgpOwotICAgICAgICAvLyBuZXdseSBlZGl0ZWQgcG9ydAotICAgICAgICBPYmplY3QgcG9ydCA9IHBvcnRzVGFibGUuZ2V0KHBvcnROYW1lKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGV4aXN0aW5nIHBvcnQKLSAgICAgICAgTGlzdCBlbWZQb3J0cyA9IHdzRGVzY3JpcHRpb25fLmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgICAgIGlmICghZW1mUG9ydHMuY29udGFpbnMocG9ydCkgJiYgcG9ydCAhPSBudWxsICYmIHBvcnQgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50KSB7Ci0gICAgICAgICAgZW1mUG9ydHMuYWRkKChQb3J0Q29tcG9uZW50KSBwb3J0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkSGFuZGxlcnNUb1BvcnRzKEhhc2h0YWJsZSBwb3J0c1RhYmxlLCBIYXNodGFibGUgcG9ydHNUb0hhbmRsZXJzVGFibGUpIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcG9ydHMgPSBwb3J0c1RvSGFuZGxlcnNUYWJsZS5rZXlzKCk7Ci0gICAgICB3aGlsZSAocG9ydHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgU3RyaW5nIHBvcnROYW1lID0gKFN0cmluZykgcG9ydHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgT2JqZWN0IHBvcnQgPSBwb3J0c1RhYmxlLmdldChwb3J0TmFtZSk7Ci0gICAgICAgIGlmIChwb3J0ICE9IG51bGwgJiYgcG9ydCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gKExpc3QpIHBvcnRzVG9IYW5kbGVyc1RhYmxlLmdldChwb3J0TmFtZSk7Ci0KLSAgICAgICAgICBMaXN0IG1vZGVsSGFuZGxlcnMgPSAoKFBvcnRDb21wb25lbnQpIHBvcnQpLmdldEhhbmRsZXJzKCk7Ci0gICAgICAgICAgbW9kZWxIYW5kbGVycy5hZGRBbGwoaGFuZGxlcnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyCi0gICAqIEBwYXJhbSBoZGhzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzKEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhkaHMpewotICAgIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IGhkaHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHNldFdzZGRSZXNvdXJjZShXc2RkUmVzb3VyY2VbXSB3c2RkUmVzKSB7Ci0gICAgdGhpcy53c2RkUmVzb3VyY2VfID0gd3NkZFJlczsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1RhYmxlVmlld2VyV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGFibGVWaWV3ZXJXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjMjUyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGFibGVWaWV3ZXJXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDUgICAxMzk5MTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5Qcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nLkRpYWxvZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlRhYmxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRm9jdXNBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRm9jdXNFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgVGFibGVWaWV3ZXJXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVCA9IDEwMDsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9DT0xVTU5fV0lEVEggPSA4MDsKLQotICBwdWJsaWMgc3RhdGljIGJ5dGUgTUFQX09ORV9UT19PTkUgPSAzOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgTUFQX01BTllfVE9fT05FID0gMTsKLSAgcHVibGljIHN0YXRpYyBieXRlIE1BUF9NQU5ZX1RPX01BTlkgPSAwOwotCi0gIHByaXZhdGUgU3RyaW5nW10gY29sdW1uc187Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXJfOwotICBwcml2YXRlIFRhYmxlIHRhYmxlXzsKLSAgcHJpdmF0ZSBUYWJsZUVkaXRvciBlZGl0b3JfOwotICBwcml2YXRlIFRhYmxlRWRpdG9yTGlzdGVuZXIgdGFibGVFZGl0b3JMaXN0ZW5lcl87Ci0gIHByaXZhdGUgVGV4dCB0ZXh0XzsKLSAgcHJpdmF0ZSBCdXR0b24gaW1wb3J0XzsKLSAgcHJpdmF0ZSBCdXR0b24gYWRkXzsKLSAgcHJpdmF0ZSBCdXR0b24gcmVtb3ZlXzsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgTGlzdGVuZXIgIHN0YXR1c0xpc3RlbmVyXzsKLQotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlID0gbnVsbDsKLSAgcHJpdmF0ZSBieXRlIHJlc2NyaWN0aW9uID0gTUFQX01BTllfVE9fTUFOWTsKLQotICBwcml2YXRlIExpc3QgdmFsdWVzXzsKLSAgcHJpdmF0ZSBPYmplY3QgZGVmYXVsdFZhbHVlXzsKLQotICBwcml2YXRlIFByb3BlcnRpZXNSZXNvdXJjZUZpbHRlciBmaWx0ZXJfID0gbmV3IFByb3BlcnRpZXNSZXNvdXJjZUZpbHRlcigpOwotCi0gIHB1YmxpYyBUYWJsZVZpZXdlcldpZGdldChTdHJpbmdbXSBjb2x1bW5zLCBMaXN0IGluaXRWYWx1ZXMsIE9iamVjdCBkZWZhdWx0VmFsdWUsIGJ5dGUgcmVzY3JpY3Rpb24pCi0gIHsKLQljb2x1bW5zXyA9IGNvbHVtbnM7Ci0JdmFsdWVzXyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpZiAoaW5pdFZhbHVlcyAhPSBudWxsICYmIGluaXRWYWx1ZXMuc2l6ZSgpID4gMCkKLQkgIHZhbHVlc18uYWRkQWxsKGluaXRWYWx1ZXMpOwotCWRlZmF1bHRWYWx1ZV8gPSAoZGVmYXVsdFZhbHVlICE9IG51bGwpID8gZGVmYXVsdFZhbHVlIDogbmV3IFN0cmluZygiIik7Ci0JdGhpcy5yZXNjcmljdGlvbiA9IHJlc2NyaWN0aW9uOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgeyAKLSAgICBwYXJlbnRfICAgICAgICAgPSBwYXJlbnQ7Ci0gICAgc3RhdHVzTGlzdGVuZXJfID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgCi0JQ29tcG9zaXRlICBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCUdyaWRMYXlvdXQgZ2wgICAgICAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkKLQlnbC5tYXJnaW5IZWlnaHQgPSAwOwotCWdsLm1hcmdpbldpZHRoID0gMDsKLQljb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQl0YWJsZV8gPSBuZXcgVGFibGUoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkJPUkRFUik7Ci0JR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQlnZC5oZWlnaHRIaW50ID0gREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVDsKLQl0YWJsZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0JdGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JdGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQlUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotCWludCBtYXhXaWR0aCA9IERFRkFVTFRfQ09MVU1OX1dJRFRIOwotCWZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspCi0JewotCSAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGVfLCBTV1QuTk9ORSk7Ci0JICB0YWJsZUNvbHVtbi5zZXRUZXh0KGNvbHVtbnNfW2ldKTsKLQkgIHRhYmxlQ29sdW1uLnBhY2soKTsKLQkgIGludCB0YWJsZUNvbHVtbldpZHRoID0gTWF0aC5tYXgoREVGQVVMVF9DT0xVTU5fV0lEVEgsIHRhYmxlQ29sdW1uLmdldFdpZHRoKCkpOwotCSAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGFibGVDb2x1bW5XaWR0aCk7Ci0JICBDb2x1bW5XZWlnaHREYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uV2VpZ2h0RGF0YSh0YWJsZUNvbHVtbldpZHRoLCB0YWJsZUNvbHVtbldpZHRoLCB0cnVlKTsKLQkgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0JfQotCXRhYmxlXy5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotCS8vIGluaXRpYWxpemUgdGhlIHRhYmxlIGVkaXRvcgotCWVkaXRvcl8gPSBuZXcgVGFibGVFZGl0b3IodGFibGVfKTsKLQkvLyBUaGUgZWRpdG9yIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBjZWxsIGFuZCBtdXN0Ci0JLy8gbm90IGJlIGFueSBzbWFsbGVyIHRoYW4gNTAgcGl4ZWxzLgotCWVkaXRvcl8uaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5MRUZUOwotCWVkaXRvcl8uZ3JhYkhvcml6b250YWwgPSB0cnVlOwotCWVkaXRvcl8ubWluaW11bVdpZHRoID0gbWF4V2lkdGg7Ci0JdGFibGVFZGl0b3JMaXN0ZW5lcl8gPSBuZXcgVGFibGVFZGl0b3JMaXN0ZW5lcigpOwotCXRhYmxlXy5hZGRNb3VzZUxpc3RlbmVyKHRhYmxlRWRpdG9yTGlzdGVuZXJfKTsKLQl0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGVfKTsKLQl0YWJsZVZpZXdlcl8uZ2V0Q29udHJvbCgpLmFkZEtleUxpc3RlbmVyKAotCSAgbmV3IEtleUxpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotCQl7Ci0JCSAgaW50IGFzY2lpRGVsID0gKGludCllLmNoYXJhY3RlcjsKLQkJICAvLyBEZWwKLQkJICBpZiAoYXNjaWlEZWwgPT0gMTI3KSAKLQkJCWhhbmRsZURlbGV0ZUtleVByZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAvLyBFbnRlciBvciBzcGFjZQotICAgICAgICAgICAgICAgIGlmICgoKGludCllLmNoYXJhY3RlcikgPT0gMTMgfHwgKChpbnQpZS5jaGFyYWN0ZXIpID09IDMyKQotICAgICAgICAgICAgICAgICAgdGFibGVFZGl0b3JMaXN0ZW5lcl8uZWRpdFNlbGVjdGlvbigpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0JCXsKLQkJfQotCSAgfQotCSk7Ci0JdGFibGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgTGlzdENvbnRlbnRQcm92aWRlcigpKTsKLQl0YWJsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgTGlzdExhYmVsUHJvdmlkZXIoKSk7Ci0JdGFibGVWaWV3ZXJfLnNldElucHV0KHZhbHVlc18pOwotCXRhYmxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCi0JICBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0JICB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQl7Ci0JCSAgZW5hYmxlUmVtb3ZlKHRydWUpOwotCQl9Ci0JICB9Ci0JKTsKLQotCUNvbXBvc2l0ZSBidXR0b25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCWdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlnbC5udW1Db2x1bW5zID0gMzsKLQlnbC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotCWJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCWJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCi0JaW1wb3J0XyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0JaW1wb3J0Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9JTVBPUlQpOwotCWltcG9ydF8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0JaW1wb3J0Xy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0JICB7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCSAgaGFuZGxlSW1wb3J0QnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLQkJewotCQl9Ci0JICB9Ci0JKTsKLQkKLQlhZGRfID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5QVVNIKTsKLQlhZGRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0FERCk7Ci0JYWRkXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQlhZGRfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotCSAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0JCXsKLQkJICBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChldmVudCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCX0KLQkgIH0KLQkpOwotCi0JCi0JcmVtb3ZlXyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0JcmVtb3ZlXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SRU1PVkUpOwotCXJlbW92ZV8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0JcmVtb3ZlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0JICB7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCSAgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLQkJewotCQl9Ci0JICB9Ci0JKTsKLQllbmFibGVSZW1vdmUoZmFsc2UpOwotCQotCXJldHVybiB0aGlzOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZVJlbW92ZShib29sZWFuIGVuYWJsZWQpCi0gIHsKLQlyZW1vdmVfLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlSW1wb3J0QnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBEaWFsb2dVdGlscy5icm93c2VSZXNvdXJjZXMoCi0JICBwYXJlbnRfLmdldFNoZWxsKCksCi0JICBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKSwKLQkgIG51bGwsCi0JICBmaWx0ZXJfCi0JKTsKLQlpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotCXsKLQkgIHRyeQotCSAgewotCQlQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJcHJvcHMubG9hZCgoKElGaWxlKXJlc291cmNlKS5nZXRDb250ZW50cygpKTsKLQkJU2V0IHNldCA9IHByb3BzLmVudHJ5U2V0KCk7Ci0JCWphdmEudXRpbC5MaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJdGVyYXRvciBpID0gc2V0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkgIE1hcC5FbnRyeSBtZSA9IChNYXAuRW50cnkpaS5uZXh0KCk7Ci0JCSAgU3RyaW5nIGtleSA9IChTdHJpbmcpbWUuZ2V0S2V5KCk7Ci0JCSAgU3RyaW5nIHZhbCA9IChTdHJpbmcpbWUuZ2V0VmFsdWUoKTsKLQkJICBsaXN0LmFkZChuZXcgU3RyaW5nW10ge2tleSx2YWx9KTsKLQkJfQotCQl2YWx1ZXNfLmFkZEFsbChsaXN0KTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgIHsKLQkgICAgLy8gVE9ETyBSZXBvcnQgc29tZSBlcnJvciBoZXJlLgotCSAgfQotCX0KLQlyZWZyZXNoKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQl2YWx1ZXNfLmFkZChkZWZhdWx0VmFsdWVfKTsKLQlyZWZyZXNoKCk7Ci0Jc2V0U2VsZWN0aW9uQXNPYmplY3QodmFsdWVzXy5nZXQodGFibGVfLmdldEl0ZW1Db3VudCgpLTEpKTsKLQl0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQloYW5kbGVEZWxldGVLZXlQcmVzc2VkKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpCi0gIHsKLQlpbnRlcm5hbERpc3Bvc2UoKTsKLQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkKLQl7Ci0JICBpbnQgc2VsZWN0aW9uSW5kZXggPSB0YWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkgIGludCBzZWxlY3Rpb25Db3VudCA9IHRhYmxlXy5nZXRJdGVtQ291bnQoKTsKLQkgIHZhbHVlc18ucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLQkgIGlmIChzZWxlY3Rpb25JbmRleCA8IHNlbGVjdGlvbkNvdW50LTEpCi0JCXNldFNlbGVjdGlvbkFzT2JqZWN0KHZhbHVlc18uZ2V0KHNlbGVjdGlvbkluZGV4KSk7Ci0JICBlbHNlIGlmIChzZWxlY3Rpb25Db3VudCAtMiA+PSAwKQotCQlzZXRTZWxlY3Rpb25Bc09iamVjdCh2YWx1ZXNfLmdldChzZWxlY3Rpb25Db3VudC0yKSk7Ci0JICByZWZyZXNoKCk7Ci0JfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsUmVmcmVzaCgpCi0gIHsKLQkvLyBzeW5jaHJvbml6ZSB0ZXh0IGZpZWxkLCBwcmV2aW91c2x5IHNlbGVjdGVkIHRhYmxlIGNlbGwgYW5kIG1vZGVsIChpbnB1dE9iamVjdCkKLQlpZiAodGV4dF8gIT0gbnVsbCkKLQl7Ci0JICBUYWJsZUl0ZW0gb2xkVGFibGVJdGVtID0gZWRpdG9yXy5nZXRJdGVtKCk7Ci0JICBpbnQgb2xkQ29sdW1uSW5kZXggPSBlZGl0b3JfLmdldENvbHVtbigpOwotCSAgaWYgKG9sZFRhYmxlSXRlbSAhPSBudWxsICYmIG9sZENvbHVtbkluZGV4ID49IDAgJiYgb2xkQ29sdW1uSW5kZXggPCBjb2x1bW5zXy5sZW5ndGgpCi0JICB7Ci0JCVN0cmluZyBvbGRUZXh0ID0gdGV4dF8uZ2V0VGV4dCgpOwotCQlvbGRUYWJsZUl0ZW0uc2V0VGV4dChvbGRDb2x1bW5JbmRleCwgb2xkVGV4dCk7Ci0JCWludCBvbGRSb3dJbmRleCA9IHRhYmxlXy5pbmRleE9mKG9sZFRhYmxlSXRlbSk7Ci0JCXZhbHVlc18uc2V0KG9sZFJvd0luZGV4LCBuZXcgU3RyaW5nW10ge29sZFRhYmxlSXRlbS5nZXRUZXh0KDApLCBvbGRUYWJsZUl0ZW0uZ2V0VGV4dCgxKX0pOwotCSAgfQotCX0KLQljaGVja01hcHBpbmdDb25zdHJhaW50cygpOwotCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTWFwcGluZ0NvbnN0cmFpbnRzKCkgewotCi0JSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgCi0JZm9yKGludCBjbnQ9MDsgY250PHZhbHVlc18uc2l6ZSgpOyBjbnQrKyl7Ci0JCVN0cmluZ1tdIHZhbHVlID0gKFN0cmluZ1tdKXZhbHVlc18uZ2V0KGNudCk7Ci0JCWlmKG1hcC5jb250YWluc0tleSh2YWx1ZVswXSkgJiYgKChyZXNjcmljdGlvbiAmIDEpIT0wKSl7Ci0JCQltZXNzYWdlID1OTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX01BUFBJTkdfRFVQTElDQVRFX0VOVFJJRVMsIG5ldyBTdHJpbmdbXXtjb2x1bW5zX1swXSxjb2x1bW5zX1sxXX0pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmKG1hcC5jb250YWluc1ZhbHVlKHZhbHVlWzFdKSAmJiAoKHJlc2NyaWN0aW9uICYgMikhPTApKXsKLQkJCW1lc3NhZ2UgPU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTUFQUElOR19EVVBMSUNBVEVfRU5UUklFUywgbmV3IFN0cmluZ1tde2NvbHVtbnNfWzFdLGNvbHVtbnNfWzBdfSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbWFwLnB1dCh2YWx1ZVswXSx2YWx1ZVsxXSk7Ci0KLQl9Ci0JbWVzc2FnZSA9IG51bGw7Ci0KLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZSA9PSBudWxsID8gU3RhdHVzLk9LX1NUQVRVUyA6IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbkFzT2JqZWN0KE9iamVjdCBvYmplY3QpCi0gIHsKLQl0YWJsZVZpZXdlcl8uc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCksIHRydWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaCgpCi0gIHsKLQlpbnRlcm5hbFJlZnJlc2goKTsKLQl0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICB9Ci0KLSAgcHVibGljIFRhYmxlSXRlbVtdIGdldEl0ZW1zKCkKLSAgewotCS8vaW50ZXJuYWxSZWZyZXNoKCk7Ci0JcmV0dXJuIHRhYmxlXy5nZXRJdGVtcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLQlhZGRfLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JZW5hYmxlUmVtb3ZlKGVuYWJsZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLQlpbnRlcm5hbERpc3Bvc2UoKTsKLQlpZiAoZWRpdG9yXyAhPSBudWxsKQotCSAgZWRpdG9yXy5kaXNwb3NlKCk7Ci0JaWYgKHRhYmxlXyAhPSBudWxsKQotCSAgdGFibGVfLmRpc3Bvc2UoKTsKLQlpZiAoYWRkXyAhPSBudWxsKQotCSAgYWRkXy5kaXNwb3NlKCk7Ci0JaWYgKHJlbW92ZV8gIT0gbnVsbCkKLQkgIHJlbW92ZV8uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsRGlzcG9zZSgpCi0gIHsKLQlpZiAodGV4dF8gIT0gbnVsbCkKLQkgIHRleHRfLmRpc3Bvc2UoKTsKLQl0ZXh0XyA9IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFZGl0b3JMaXN0ZW5lciBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIKLSAgewotCXByaXZhdGUgaW50IGN1cnJTZWxlY3Rpb25JbmRleF87Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdFJvd187Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdENvbHVtbl87Ci0KLQlwdWJsaWMgVGFibGVFZGl0b3JMaXN0ZW5lcigpCi0JewotCSAgc3VwZXIoKTsKLQkgIGN1cnJTZWxlY3Rpb25JbmRleF8gPSAtMTsKLSAgICAgICAgIGVkaXRSb3dfID0gLTE7Ci0gICAgICAgICBlZGl0Q29sdW1uXyA9IC0xOwotCX0KLQotCXB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2soTW91c2VFdmVudCBlKQotCXsKLQkgIG1vdXNlRG93bihlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBtb3VzZURvd24oTW91c2VFdmVudCBlKQotCXsKLQkgIC8vIHJlZnJlc2ggdGFibGUKLQkgIGludGVybmFsUmVmcmVzaCgpOwotCSAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgdGV4dCBlZGl0b3IgY29udHJvbAotCSAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0JICAvLyB1cGRhdGUgdGFibGUKLQkgIGlmICh0YWJsZV8uaXNGb2N1c0NvbnRyb2woKSkKLQkgIHsKLQkJaW50IHNlbGVjdGVkUm93SW5kZXggPSBnZXRTZWxlY3RlZFJvdyh0YWJsZV8sIGUueSk7Ci0JCWlmIChjdXJyU2VsZWN0aW9uSW5kZXhfICE9IC0xICYmIHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY3VyclNlbGVjdGlvbkluZGV4XyA9PSBzZWxlY3RlZFJvd0luZGV4KQotCQl7Ci0JCSAgVGFibGVJdGVtIHRhYmxlSXRlbSA9IHRhYmxlXy5nZXRJdGVtKHNlbGVjdGVkUm93SW5kZXgpOwotCQkgIGludCBzZWxlY3RlZENvbHVtbkluZGV4ID0gZ2V0U2VsZWN0ZWRDb2x1bW4odGFibGVJdGVtLCBlLngsIGUueSk7Ci0JCSAgaWYgKHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gLTEgJiYgKHRleHRfID09IG51bGwgfHwgdGV4dF8uaXNEaXNwb3NlZCgpIHx8IHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gZWRpdG9yXy5nZXRDb2x1bW4oKSkpCi0JCQllZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIHNlbGVjdGVkQ29sdW1uSW5kZXgpOwotCQl9Ci0JCWN1cnJTZWxlY3Rpb25JbmRleF8gPSBzZWxlY3RlZFJvd0luZGV4OwotCSAgfQotCX0KLQotCXB1YmxpYyB2b2lkIG1vdXNlVXAoTW91c2VFdmVudCBlKQotCXsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRTZWxlY3RlZFJvdyhUYWJsZSB0YWJsZSwgaW50IHkpCi0JewotCSAgVGFibGVJdGVtW10gdGFibGVJdGVtcyA9IHRhYmxlLmdldEl0ZW1zKCk7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IHRhYmxlSXRlbXMubGVuZ3RoOyBpKyspCi0JICB7Ci0JCVJlY3RhbmdsZSByZWN0YW5nbGUgPSB0YWJsZUl0ZW1zW2ldLmdldEJvdW5kcygwKTsKLQkJaWYgKHJlY3RhbmdsZSAhPSBudWxsICYmIHkgPj0gcmVjdGFuZ2xlLnkgJiYgeSA8IChyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpKQotCQkgIHJldHVybiBpOwotCSAgfQotCSAgcmV0dXJuIC0xOwotCX0KLQotCXByaXZhdGUgaW50IGdldFNlbGVjdGVkQ29sdW1uKFRhYmxlSXRlbSB0YWJsZUl0ZW0sIGludCB4LCBpbnQgeSkKLQl7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnNfLmxlbmd0aDsgaSsrKQotCSAgewotCQlpZiAodGFibGVJdGVtLmdldEJvdW5kcyhpKS5jb250YWlucyh4LCB5KSkKLQkJICByZXR1cm4gaTsKLQkgIH0KLQkgIHJldHVybiAtMTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZWRpdFNlbGVjdGlvbihpbnQgcm93LCBpbnQgY29sdW1uKQotCXsKLSAgICAgICAgIGVkaXRSb3dfID0gcm93OwotICAgICAgICAgZWRpdENvbHVtbl8gPSBjb2x1bW47Ci0JICBUYWJsZUl0ZW0gdGFibGVJdGVtID0gdGFibGVfLmdldEl0ZW0ocm93KTsKLQkgIC8vIFNldHVwIGFkYXB0ZXIgZm9yIHRoZSBuZXcgc2VsZWN0aW9uCi0JICB0ZXh0XyA9IG5ldyBUZXh0KHRhYmxlXywgU1dULk5PTkUpOwotCSAgU3RyaW5nIHRleHQgPSB0YWJsZUl0ZW0uZ2V0VGV4dChjb2x1bW4pOwotCSAgdGV4dF8uc2V0VGV4dCgodGV4dCAhPSBudWxsKSA/IHRleHQgOiAiIik7Ci0gICAgICAgICB0ZXh0Xy5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdGVuZXIoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIC8vIEVzYwotICAgICAgICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAyNykKLSAgICAgICAgICAgICAgICAgY2FuY2VsU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAgICAgKTsKLSAgICAgICAgIHRleHRfLmFkZFRyYXZlcnNlTGlzdGVuZXIobmV3IFRyYXZlcnNlTGlzdGVuZXIoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIHZvaWQga2V5VHJhdmVyc2VkKFRyYXZlcnNlRXZlbnQgZSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1RBQl9ORVhUKQotICAgICAgICAgICAgICAgICB0cmF2ZXJzZVRhYk5leHQoKTsKLSAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9UQUJfUFJFVklPVVMpCi0gICAgICAgICAgICAgICAgIHRyYXZlcnNlVGFiUHJldmlvdXMoKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH0KLSAgICAgICAgICk7Ci0gICAgICAgICAKLSAgICB0ZXh0Xy5hZGRGb2N1c0xpc3RlbmVyKCBuZXcgRm9jdXNBZGFwdGVyKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotCSAgZWRpdG9yXy5zZXRFZGl0b3IodGV4dF8sIHRhYmxlSXRlbSwgY29sdW1uKTsKLQkgIHRleHRfLnNldEZvY3VzKCk7Ci0JICB0ZXh0Xy5zZWxlY3RBbGwoKTsKLQl9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRhYk5leHQoKQotICAgIHsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpZiAoIShlZGl0Um93XyA9PSB0YWJsZV8uZ2V0SXRlbXMoKS5sZW5ndGgtMSAmJiBlZGl0Q29sdW1uXyA9PSBjb2x1bW5zXy5sZW5ndGgtMSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChlZGl0Q29sdW1uXyA8IGNvbHVtbnNfLmxlbmd0aC0xKQotICAgICAgICAgIGVkaXRDb2x1bW5fKys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVkaXRDb2x1bW5fID0gMDsKLSAgICAgICAgICBlZGl0Um93XysrOwotICAgICAgICAgIHRhYmxlXy5zZWxlY3QoZWRpdFJvd18pOwotICAgICAgICB9Ci0gICAgICAgIGVkaXRTZWxlY3Rpb24oZWRpdFJvd18sIGVkaXRDb2x1bW5fKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRhYlByZXZpb3VzKCkKLSAgICB7Ci0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICAgIGludGVybmFsRGlzcG9zZSgpOwotICAgICAgaWYgKCEoZWRpdFJvd18gPT0gMCAmJiBlZGl0Q29sdW1uXyA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVkaXRDb2x1bW5fID4gMCkKLSAgICAgICAgICBlZGl0Q29sdW1uXy0tOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBlZGl0Q29sdW1uXyA9IGNvbHVtbnNfLmxlbmd0aC0xOwotICAgICAgICAgIGVkaXRSb3dfLS07Ci0gICAgICAgICAgdGFibGVfLnNlbGVjdChlZGl0Um93Xyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWRpdFNlbGVjdGlvbihlZGl0Um93XywgZWRpdENvbHVtbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFNlbGVjdGlvbigpCi0gICAgewotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICB9Ci0KLQlwdWJsaWMgdm9pZCBlZGl0U2VsZWN0aW9uKCkKLQl7Ci0JICBpbnQgc2VsZWN0ZWRSb3dJbmRleCA9IHRhYmxlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotCSAgaWYgKHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY29sdW1uc18ubGVuZ3RoID4gMCkKLQkgIHsKLQkJLy8gcmVmcmVzaCB0YWJsZQotCQlpbnRlcm5hbFJlZnJlc2goKTsKLQkJLy8gQ2xlYW4gdXAgYW55IHByZXZpb3VzIGVkaXRvciBjb250cm9sCi0JCWludGVybmFsRGlzcG9zZSgpOwotCQllZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIDApOwotCSAgfQotCSAgY3VyclNlbGVjdGlvbkluZGV4XyA9IHNlbGVjdGVkUm93SW5kZXg7Ci0JfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQl7Ci0JICB0YWJsZVZpZXdlcl8uYWRkKGdldEVsZW1lbnRzKG5ld0lucHV0KSk7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JewotCSAgaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIExpc3QpCi0JICB7Ci0JCUxpc3QgbGlzdCA9IChMaXN0KWlucHV0RWxlbWVudDsKLQkJT2JqZWN0W10gb2JqZWN0cyA9IG5ldyBPYmplY3RbbGlzdC5zaXplKCldOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspCi0JCSAgb2JqZWN0c1tpXSA9IGxpc3QuZ2V0KGkpOwotCQlyZXR1cm4gb2JqZWN0czsKLQkgIH0KLQkgIGVsc2UKLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlcgotICB7Ci0JcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCSAgcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCQlyZXR1cm4gKChTdHJpbmdbXSllbGVtZW50KVtjb2x1bW5JbmRleF07CSAgCQotCX0KLQotCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotCXsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQl9Ci0gIH0KLSB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1RpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2YjZlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA0ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uLlRpbWVkT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gaW1wbGVtZW50cyBDb25kaXRpb24KLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgICAgICAgICAgICAgICAgICBUSU1FT1VUX1BSRUZFUkVOQ0UgPSAid3NkbFRpbWVPdXQiOwotICBwcml2YXRlIFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIHNlbGVjdGlvbkNvbW1hbmQ7Ci0gIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZU91dFZhbHVlOwotICAKLSAgcHVibGljIFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQoKQotICB7Ci0gICAgc2VsZWN0aW9uQ29tbWFuZCA9IG5ldyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpOwotICAgIAotICAgIElQcmVmZXJlbmNlU3RvcmUgcHJlZlN0b3JlID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLSAgICAKLSAgICB0aW1lT3V0VmFsdWUgPSBwcmVmU3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhUSU1FT1VUX1BSRUZFUkVOQ0UpLmVxdWFscygiIikgPyAxMDAwMCA6IHByZWZTdG9yZS5nZXRJbnQoIFRJTUVPVVRfUFJFRkVSRU5DRSApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICBzZWxlY3Rpb25Db21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKCB3ZWJTZXJ2aWNlc1BhcnNlciApOwotICB9Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgdGltZU91dE1lc3NhZ2UgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuYmluZCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX1dTRExfT1BFUkFUSU9OX1RJTUVEX09VVCwgZ2V0V2ViU2VydmljZVVSSSgpICk7Ci0gICAgCi0gICAgVGltZWRPcGVyYXRpb24gdGltZWRPcGVyYXRpb24gPSBuZXcgVGltZWRPcGVyYXRpb24oIHNlbGVjdGlvbkNvbW1hbmQsIHRpbWVPdXRWYWx1ZSwgdGltZU91dE1lc3NhZ2UgKTsKLSAgICAKLSAgICByZXR1cm4gdGltZWRPcGVyYXRpb24uZXhlY3V0ZShtb25pdG9yLCBhZGFwdGFibGUpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uQ29tbWFuZC5ldmFsdWF0ZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldFdlYlNlcnZpY2VVUkkoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdlYlNlcnZpY2VVUkkpCi0gIHsKLSAgICBzZWxlY3Rpb25Db21tYW5kLnNldFdlYlNlcnZpY2VVUkkod2ViU2VydmljZVVSSSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZVVSSSgpOwotICB9Ci0vKioKLSAqIEByZXR1cm4gUmV0dXJucyB0aGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkLgotICovCi1wdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpIHsKLQlyZXR1cm4gc2VsZWN0aW9uQ29tbWFuZC5nZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKTsKLX0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBodHRwQmFzaWNBdXRoVXNlcm5hbWUuCi0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkgewotCXJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldEh0dHBCYXNpY0F1dGhVc2VybmFtZSgpOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI2MDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWwuRGlhbG9nV1dXQXV0aGVudGljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBpbXBsZW1lbnRzIENvbmRpdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlVVJJOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRXU0RMU2VsZWN0aW9uVHJlZVdpZGdldDsKLSAgCi0gIHB1YmxpYyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAJaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpCi0gIAkgIHdlYlNlcnZpY2VzUGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIAlyZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gIAluZWVkV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgPSBmYWxzZTsKLSAgCVdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IGdldFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0gIAlwYXJzZXIuc2V0VVJJKHdlYlNlcnZpY2VVUkkpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHBhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9XU0lMIHwgV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfRElTQ08gfCBXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9MSU5LUyk7Ci0gICAgfQotICAgIGNhdGNoIChXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSkKLSAgICB7Ci0gICAgICBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbiBkaWFsb2cgPSBuZXcgRGlhbG9nV1dXQXV0aGVudGljYXRpb24oUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgIGRpYWxvZy5oYW5kbGVXV1dBdXRoZW50aWNhdGlvbih3d3dhZSk7Ci0gICAgICBTdHJpbmcgdXNlcm5hbWUgPSBkaWFsb2cuZ2V0VXNlcm5hbWUoKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IGRpYWxvZy5nZXRQYXNzd29yZCgpOwotICAgICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBwYXNzd29yZDsKLSAgICAgIGlmICh1c2VybmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICBwYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKHBhc3N3b3JkKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBwYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfV1NJTCB8IFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX0RJU0NPIHwgV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTElOS1MpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEUsIG5ldyBPYmplY3RbXSB7d2ViU2VydmljZVVSSX0pLCB0KTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICBwYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKG51bGwpOwotICAgICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEUsIG5ldyBPYmplY3RbXSB7d2ViU2VydmljZVVSSX0pLCB0KTsKLSAgICB9Ci0gICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IHBhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod2ViU2VydmljZVVSSSk7Ci0gICAgaWYgKHdzRW50aXR5ICE9IG51bGwpCi0gICAgewotICAgICAgaW50IHR5cGUgPSB3c0VudGl0eS5nZXRUeXBlKCk7Ci0gICAgICBpZiAodHlwZSAhPSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgIAluZWVkV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5lZWRXU0RMU2VsZWN0aW9uVHJlZVdpZGdldDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZVVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdlYlNlcnZpY2VVUkkpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VVUkkgPSB3ZWJTZXJ2aWNlVVJJOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gICAgcmV0dXJuIGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgfQotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGh0dHBCYXNpY0F1dGhQYXNzd29yZC4KLSAqLwotcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKSB7Ci0JcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLX0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBodHRwQmFzaWNBdXRoVXNlcm5hbWUuCi0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkgewotCXJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0Mjc2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI1ICAgMTQyMjgxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5QYWdlSW5mbzsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdGlvbkRpYWxvZyB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgdGl0bGVUZXh0XzsKLQlwcml2YXRlIFN0cmluZyB3c1VyaV87Ci0JcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZV87Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLQkKLQlwdWJsaWMgV1NETFNlbGVjdGlvbkRpYWxvZyhTaGVsbCBwYXJlbnQsIFBhZ2VJbmZvIHBhZ2VJbmZvKSB7Ci0JCXN1cGVyKHBhcmVudCwgcGFnZUluZm8pOwotCQl0aXRsZVRleHRfID0gcGFnZUluZm8uZ2V0UGFnZU5hbWUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjYWxsU2V0dGVycygpCi0JewkJCi0JCSgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLnNldENvbXBvbmVudE5hbWUoY29tcG9uZW50TmFtZV8pOwotCQkoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuc2V0V2ViU2VydmljZVVSSSh3c1VyaV8pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb21wb25lbnROYW1lKFN0cmluZyBjb21wb25lbnROYW1lKQotCXsKLSAgICAgICAgIGNvbXBvbmVudE5hbWVfID0gY29tcG9uZW50TmFtZTsgICAgICAJICAgCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0JewotICAgICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWVfIDsgICAgICAJICAgCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLQl7Ci0JCXByb2plY3RfID0gcHJvamVjdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd3NVcmkpCi0JewotCQl3c1VyaV8gPSB3c1VyaTsKLQl9CQotCSAKLQkgIHByb3RlY3RlZCB2b2lkIHNldFNoZWxsU3R5bGUoaW50IG5ld1NoZWxsU3R5bGUpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNoZWxsU3R5bGUoIG5ld1NoZWxsU3R5bGUgfCBTV1QuUkVTSVpFICk7ICAKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JICB7Ci0JICAgIG5ld1NoZWxsLnNldFRleHQodGl0bGVUZXh0Xyk7ICAgCi0JICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKG5ld1NoZWxsKTsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpIHsKLQkJICAKLQkJIHJldHVybiAoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotCX0KLQkgIAotCSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpIHsKLQkJICByZXR1cm4gKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JfQotCSAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0JICB7Ci0JCSAgcmV0dXJuIHdzVXJpXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKXsKLQkJICByZXR1cm4gcHJvamVjdF87Ci0JICB9Ci0KLSAgICAgIHB1YmxpYyBib29sZWFuIGNsb3NlKCkgewotICAgICAgICBzZXRDb21wb25lbnROYW1lKCgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLmdldENvbXBvbmVudE5hbWUoKSk7Ci0gICAgICAgIHNldFByb2plY3QoKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgc2V0V2ViU2VydmljZVVSSSgoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5nZXRXZWJTZXJ2aWNlVVJJKCkpOwotICAgIAlyZXR1cm4gc3VwZXIuY2xvc2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjEzMTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZTsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0U2VydmljZTsKLSAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0U2VydmljZSgpIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZSkgewotICAgIHRoaXMudGVzdFNlcnZpY2UgPSB0ZXN0U2VydmljZTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKiAgICAgICAgICBUaGUgcHJvamVjdCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotICB9Ci0gIAotICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gY29tcG9uZW50TmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAgICAKLSAgICBpZiAod3NkbFVSSSAhPSBudWxsICYmIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSkgIT0gbnVsbCkgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOyAgICAgCi0gICAgICBNYXAgc2VydmljZXMgPSBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpLmdldFNlcnZpY2VzKCk7Ci0gICAgICBpZiAoc2VydmljZXMuaXNFbXB0eSgpKXsKLSAgICAgICAgaWYgKHRlc3RTZXJ2aWNlPT10cnVlKXsKLSAgICAgICAgICAgIHRlc3RTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5JTkdfTk9fU0VSVklDRV9FTEVNRU5UICk7Ci0gICAgICAgICAgICB0cnl7Ci0gICAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0gICAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOSU5HX05PX1NFUlZJQ0VfRUxFTUVOVCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9ICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1NFTEVDVElPTl9NVVNUX0JFX1dTREwgKTsKLSAgICAgIGlmIChlbnYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uVHJlZVdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25UcmVlV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4Y2MxNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25UcmVlV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM2NzEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDcwMTMxICAgMTY4Nzg2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3c2RsIHVybCBvbiB3ZWIgc2VydmljZSB3aXphcmQgcGFnZSAxIGlzIG5vdCByZWZsZWN0ZWQgaW4gYnJvd3NlIGRpYWxvZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi0vKioKLSogVGhpcyB3aXphcmQgcGFnZSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IHRoZSBXU0RMIFVSSSBmb3IgY29uc3VtcHRpb24KLSovCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0KLSAgLypDT05URVhUX0lEIFBXV1MwMDAxIGZvciB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFdXU19QQUdFID0gIi5QV1dTMDAwMSI7Ci0KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVVSSTsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0gIHByaXZhdGUgVHJlZVZpZXdlciB0cmVlVmlld2VyXzsKLSAgcHJpdmF0ZSBUcmVlQ29udGVudFByb3ZpZGVyIHRyZWVDb250ZW50UHJvdmlkZXI7Ci0gIHByaXZhdGUgVHJlZSB0cmVlXzsKLSAgcHJpdmF0ZSBpbnQgcGFnZVdpZHRoXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlRW50aXR5IGVudGl0eV87Ci0KLSAgLyoqCi0gICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgKi8KLSAgcHVibGljIFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0KCkKLSAgewotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAJdGhpcy5zdGF0dXNMaXN0ZW5lciA9IHN0YXR1c0xpc3RlbmVyOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1dTX1BBR0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCBwbHVnaW5JZF8gKyBJTkZPUE9QX1BXV1NfUEFHRSk7Ci0KLSAgICBMYWJlbCB3c2RsTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgd3NkbExhYmVsLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFTEVDVF9XU0RMKTsKLSAgICB3c2RsTGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0KLSAgICB0cmVlXyA9IG5ldyBUcmVlKHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ2QuaGVpZ2h0SGludCA9IDIwMDsKLSAgICB0cmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBwYWdlV2lkdGhfID0gdHJlZV8uZ2V0U2hlbGwoKS5nZXRTaXplKCkueDsKLSAgICB0cmVlVmlld2VyXyA9IG5ldyBUcmVlVmlld2VyKHRyZWVfKTsKLSAgICB0cmVlQ29udGVudFByb3ZpZGVyID0gbmV3IFRyZWVDb250ZW50UHJvdmlkZXIoKTsKLSAgICB0cmVlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIodHJlZUNvbnRlbnRQcm92aWRlcik7Ci0gICAgdHJlZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgVHJlZUxhYmVsUHJvdmlkZXIoKSk7Ci0gICAgdHJlZVZpZXdlcl8uYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAotICAgICAgbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICAJaGFuZGxlVHJlZVNlbGVjdGlvbkNoYW5nZWRFdmVudChldmVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlVHJlZVNlbGVjdGlvbkNoYW5nZWRFdmVudChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0gIHsKLSAgCXN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KG5ldyBFdmVudCgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gIAlyZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgCXRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgCXRyZWVWaWV3ZXJfLnNldElucHV0KHRoaXMud2ViU2VydmljZXNQYXJzZXIpOwotICAJcmVmcmVzaFRyZWVWaWV3ZXIoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdzVVJJKQotICB7Ci0gIAl3ZWJTZXJ2aWNlVVJJID0gd3NVUkk7Ci0gIAlpZiAoIXRyZWVfLmlzRGlzcG9zZWQoKSkgewotICAJCXRyZWVDb250ZW50UHJvdmlkZXIuc2V0V2ViU2VydmljZVVSSSh3ZWJTZXJ2aWNlVVJJKTsKLSAgCQlyZWZyZXNoVHJlZVZpZXdlcigpOwotICAJfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaFRyZWVWaWV3ZXIoKQotICB7Ci0gIAlpZiAod2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCAmJiB3ZWJTZXJ2aWNlVVJJICE9IG51bGwpCi0gIAl7Ci0gIAkgIHRyZWVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgCSAgQ29udHJvbCBzaGVsbCA9IHRyZWVfLmdldFNoZWxsKCk7Ci0gIAkgIGlmICh0cmVlXy5nZXRTaXplKCkueCA+IHBhZ2VXaWR0aF8gfHwgc2hlbGwuZ2V0U2l6ZSgpLnggPiBwYWdlV2lkdGhfKQotICAJICB7Ci0gIAkgICAgdHJlZV8uc2V0U2l6ZShwYWdlV2lkdGhfLCB0cmVlXy5nZXRTaXplKCkueSk7Ci0gIAkgICAgc2hlbGwuc2V0U2l6ZShwYWdlV2lkdGhfLCBzaGVsbC5nZXRTaXplKCkueSk7Ci0gIAkgICAgc2hlbGwuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgCSAgICBzaGVsbC5yZWRyYXcoKTsKLSAgCSAgfQotICAJfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkKLSAgewotICAgIHRyZWVfLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gdHJlZV8uaXNFbmFibGVkKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsJICAKLQkgIAlpZiAoZW50aXR5XyAhPSBudWxsKQotCSAgCSAgcmV0dXJuIGVudGl0eV8uZ2V0VVJJKCk7Ci0JICAJZWxzZQotCSAgCSAgcmV0dXJuIHdlYlNlcnZpY2VVUkk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgV2ViU2VydmljZUVudGl0eSBnZXRTZWxlY3Rpb25Bc1dlYlNlcnZpY2VFbnRpdHkoKQotICB7Ci0gIAlpZiAodHJlZVZpZXdlcl8gIT0gbnVsbCkKLSAgCXsKLSAgICAgIElTZWxlY3Rpb24gc2VsID0gdHJlZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICBpZiAoIXNlbC5pc0VtcHR5KCkgJiYgKHNlbCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3NlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWw7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBzc2VsLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZUVudGl0eSkKLSAgICAgICAgICByZXR1cm4gKFdlYlNlcnZpY2VFbnRpdHkpb2JqZWN0OwotICAgICAgfQotICAJfQotICAgIHJldHVybiBudWxsOyAgCQotICB9Ci0gICAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsgICAgCi0JZW50aXR5XyA9IGdldFNlbGVjdGlvbkFzV2ViU2VydmljZUVudGl0eSgpOwotICAgIGlmIChlbnRpdHlfID09IG51bGwgfHwgZW50aXR5Xy5nZXRUeXBlKCkgIT0gV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19TRUxFQ1RJT05fTVVTVF9CRV9XU0RMICk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFRyZWVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJVHJlZUNvbnRlbnRQcm92aWRlcgotICB7Ci0gIAlwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlVVJJOwotCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VzUGFyc2VyKQotICAgICAgewotICAgICAgCVdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IChXZWJTZXJ2aWNlc1BhcnNlcilpbnB1dEVsZW1lbnQ7Ci0gICAgICAgIE9iamVjdCB3c0VudGl0eSA9IHBhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod2ViU2VydmljZVVSSSk7Ci0gICAgICAgIGlmICh3c0VudGl0eSAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W10ge3dzRW50aXR5fTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgT2JqZWN0WzBdOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VFbnRpdHkpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9ICgoV2ViU2VydmljZUVudGl0eSlwYXJlbnRFbGVtZW50KS5nZXRDaGlsZHJlbigpOwotICAgICAgICBPYmplY3RbXSBvYmplY3RzID0gbmV3IE9iamVjdFtsaXN0LnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBvYmplY3RzW2ldID0gbGlzdC5nZXQoaSk7Ci0gICAgICAgIHJldHVybiBvYmplY3RzOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlRW50aXR5KQotICAgICAgICByZXR1cm4gKChXZWJTZXJ2aWNlRW50aXR5KWVsZW1lbnQpLmdldFBhcmVudCgpOwotICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIChnZXRDaGlsZHJlbihlbGVtZW50KS5sZW5ndGggPiAwKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd3NVUkkpCi0gICAgewotICAgICAgd2ViU2VydmljZVVSSSA9IHdzVVJJOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVHJlZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIHN3aXRjaCAoKChXZWJTZXJ2aWNlRW50aXR5KWVsZW1lbnQpLmdldFR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfSFRNTDoKLSAgICAgICAgICByZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy93c2lsL2h0bWwuZ2lmIikuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgY2FzZSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTDoKLSAgICAgICAgICByZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy93c2lsL3dzaWwuZ2lmIikuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgY2FzZSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETDoKLSAgICAgICAgICByZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy93c2lsL3dzZGwuZ2lmIikuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuICgoV2ViU2VydmljZUVudGl0eSllbGVtZW50KS5nZXRVUkkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOGU1ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwNzA0MTAgICAxODE4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjIwICAgMjE5NTM3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA4MDUwMSAgIDIyOTcyOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgdXBwZXJjYXNlIC5XU0RMIGNhbm5vdCBiZSBmb3VuZCBieSB0aGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZAotICogMjAwODEyMDggICAyNTc2MTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBBZGQgTWVjaGFuaXNtIGZvciBBZG9wdGVycyB0byBtYXAgU2VydmljZXMgdG8gV1NETCBVUkxzCi0gKiAyMDA5MDMxMCAgIDI0MjQ0MCB5ZW5sdUBjYS5pYm0uY29tIC0gWWVuIEx1LCBQbHVnZ2FibGUgSUZpbGUgdG8gVVJJIENvbnZlcnRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbnZlcnRlci5JSUZpbGUyVXJpQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldTRExVUkxTdHJpbmdXcmFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb25fOwotICBwcml2YXRlIFN0cmluZyB1cmlfOwotICAKLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLSAgewotCWlmICh1cmlfICE9IG51bGwpCi0JCXJldHVybiB1cmlfOwotCSAgCi0gICAgdXJpXyA9ICIiOwotICAgIAotICAJaWYgKHNlbGVjdGlvbl8gIT0gbnVsbCAmJiAhc2VsZWN0aW9uXy5pc0VtcHR5KCkpCi0gIAl7Ci0gIAkgIE9iamVjdCBmaXJzdFNlbCA9IHNlbGVjdGlvbl8uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gIAkgIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIElGaWxlKQotICAJICB7Ci0gIAkgICAgSUZpbGUgaWZpbGUgPSAoSUZpbGUpZmlyc3RTZWw7Ci0gIAkgICAgU3RyaW5nIGV4dCA9IGlmaWxlLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgCSAgICBpZiAoZXh0ICE9IG51bGwgJiYgKGV4dC5lcXVhbHNJZ25vcmVDYXNlKCJ3c2RsIikgfHwgZXh0LmVxdWFsc0lnbm9yZUNhc2UoIndzaWwiKSB8fCBleHQuZXF1YWxzSWdub3JlQ2FzZSgiaHRtbCIpKSkKLSAgCSAgICB7ICAJICAgIAotICAJICAgICAgSUlGaWxlMlVyaUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldElGaWxlMlVyaUNvbnZlcnRlcigpOwotICAJICAgICAgYm9vbGVhbiBhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gdHJ1ZTsKLSAgCSAgICAgIGlmIChjb252ZXJ0ZXIgIT0gbnVsbCkKLSAgCSAgICAgIHsKLSAgCSAgICAJICB1cmlfID0gY29udmVydGVyLmNvbnZlcnQoaWZpbGUpOwotICAJICAgIAkgIGlmICh1cmlfID09IG51bGwpCi0gIAkgICAgCQkgIGFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUgPSBjb252ZXJ0ZXIuYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSgpOwotICAJICAgIAkJICAKLSAgCSAgICAgIH0KLSAgCSAgICAgIGlmICgodXJpXyA9PSBudWxsIHx8IHVyaV8ubGVuZ3RoKCkgPT0gMCkgJiYgYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSkKLSAgCSAgICAgICAgdXJpXyA9IGlmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgCSAgICB9Ci0gIAkgIH0gCi0gIAkgIGVsc2UgaWYgKFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuaGFzQWRhcHRlcihmaXJzdFNlbCwgV1NETFVSTFN0cmluZ1dyYXBwZXIuY2xhc3MuZ2V0TmFtZSgpKSkgewotCQlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIoZmlyc3RTZWwsIFdTRExVUkxTdHJpbmdXcmFwcGVyLmNsYXNzLmdldE5hbWUoKSk7Ci0gIAkJV1NETFVSTFN0cmluZ1dyYXBwZXIgd3JhcHBlciA9IChXU0RMVVJMU3RyaW5nV3JhcHBlcilhZGFwdGVkT2JqZWN0OwotICAJCXVyaV8gPSB3cmFwcGVyLmdldFdTRExVUkxTdHJpbmcoKTsgIAkJCi0gIAkgIH0KLSAgCSAgZWxzZSBpZiAoZmlyc3RTZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUltcGwgc2VydmljZUltcGwgPSAoU2VydmljZUltcGwpZmlyc3RTZWw7Ci0gICAgICAgIHVyaV8gPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCk7Ci0gICAgICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU2VydmljZVJlZikKLSAgICAgIHsKLSAgCSAgICBTZXJ2aWNlUmVmIHNlcnZpY2VSZWYgPSAoU2VydmljZVJlZilmaXJzdFNlbDsKLSAgICAgICAgdXJpXyA9IEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKHNlcnZpY2VSZWYpOwotICAgICAgfSBlbHNlIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCi0gIAkgIHsKLSAgCSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxSSSA9IChXU0RMUmVzb3VyY2VJbXBsKWZpcnN0U2VsOwotICAJICAgIHVyaV8gPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSSh3c2RsUkkpOwotICAJICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU3RyaW5nKQotICAJICB7Ci0gIAkgICAgdXJpXyA9IChTdHJpbmcpZmlyc3RTZWw7Ci0gIAkgIH0gZWxzZSB7Ci0gIAkJU3RyaW5nIGFkYXB0ZWRVcmkgPSBBZGFwdGVyVXRpbHMuZ2V0QWRhcHRlZFdTREwoZmlyc3RTZWwpOwotICAJCWlmIChhZGFwdGVkVXJpICE9IG51bGwpIHsKLSAgCQkJdXJpXyA9IGFkYXB0ZWRVcmk7Ci0gIAkJfQotICAJICB9Ci0gIAkgIAotICAJICB1cmlfID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvUGF0aCh1cmlfKTsKLSAgCX0KLSAgICByZXR1cm4gdXJpXzsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgICAKLSAgICB1cmlfID0gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuV1NJTCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVSSSgpCi0gIHsKLSAgCVN0cmluZyB3c1VSSSA9IGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgCWlmICh3c1VSSSAhPSBudWxsICYmIHdzVVJJLmxlbmd0aCgpID4gMCAmJiB3c1VSSS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCJ3c2RsIikpCi0gIAl7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHdzVVJJLnN1YnN0cmluZygwLCB3c1VSSS5sZW5ndGgoKS00KSk7Ci0gICAgICBzYi5hcHBlbmQoIndzaWwiKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAJfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gIAlJUHJvamVjdCBwID0gZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKHNlbGVjdGlvbl8pOwotICAJcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgY25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUluaXRpYWxTZWxlY3Rpb24oc2VsZWN0aW9uXyk7Ci0gICAgcmV0dXJuIGNuYW1lOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzUHJvdG9jb2woU3RyaW5nIHVybCkgewkgIAotICAgIHJldHVybiB1cmwuaW5kZXhPZigiOiIpICE9IC0xOwkgIAotICB9Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3RGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIHVyaSA9IGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgICAgICAgICAgIGlmIChoYXNQcm90b2NvbCh1cmkpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihuZXcgUGF0aCh1cmkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXA7Ci0gICAgICAgICAgaWYgKHJlc291cmNlPT1udWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0gZ2V0V2ViU2VydmljZVVSSSgpOwotICAgICAgICAgICAgaWYgKGhhc1Byb3RvY29sKHVyaSkpIHJldHVybiBudWxsOyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihuZXcgUGF0aCh1cmkpKSA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0gICAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgICAKLSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmE5YTZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldyYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyIGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgV1NETFNlbGVjdGlvbldpZGdldCB3c2RsU2VsZWN0aW9uV2lkZ2V0OwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbXBvbmVudE5hbWU7Ci0gIAotICBwdWJsaWMgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIoKQotICB7Ci0JICB3c2RsU2VsZWN0aW9uV2lkZ2V0ID0gbmV3IFdTRExTZWxlY3Rpb25XaWRnZXQoKTsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsgICAgCi0gICAgd3NkbFNlbGVjdGlvbldpZGdldC5hZGRDb250cm9scyhwYXJlbnQsIHN0YXR1c0xpc3RlbmVyKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldFN0YXR1cygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVVJJKFN0cmluZyB3c1VyaSkKLSAgewotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbDsKLSAgICBpZiAod3NVcmkgIT0gbnVsbCkKLSAgICAgIHNlbCA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdzVXJpKTsKLSAgICBlbHNlCi0gICAgICBzZWwgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotICAgIHdzZGxTZWxlY3Rpb25XaWRnZXQuc2V0SW5pdGlhbFNlbGVjdGlvbihzZWwpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsICAgID0gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLSAgICBPYmplY3QgICAgICAgICAgICAgICBvYmplY3QgPSBzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiAob2JqZWN0ICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBXU0RMU2VsZWN0aW9uV3JhcHBlciApCi0gICAgICB7ICAgIAotICAgICAgICAvLyBHZXQgYXQgdGhlIGlubmVyIHN0cnVjdHVyZWQgc2VsZWN0aW9uIG9iamVjdC4KLSAgICAgICAgV1NETFNlbGVjdGlvbldyYXBwZXIgd3JhcHBlciAgICAgICAgPSAoV1NETFNlbGVjdGlvbldyYXBwZXIpb2JqZWN0OwotICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbm5lclNlbGVjdGlvbiA9IHdyYXBwZXIud3NkbFNlbGVjdGlvbjsKLSAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgaW5uZXJPYmplY3QgICAgPSBpbm5lclNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IGlubmVyT2JqZWN0ID09IG51bGwgPyBudWxsIDogaW5uZXJPYmplY3QudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gb2JqZWN0LnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgCXJldHVybiBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICByZXR1cm4gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRXZWJTZXJ2aWNlc1BhcnNlcigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAJSVByb2plY3QgcCA9IHdzZGxTZWxlY3Rpb25XaWRnZXQuZ2V0UHJvamVjdCgpOwotICAJaWYgKHA9PW51bGwpCi0gIAl7Ci0gIAkgIHJldHVybiBwcm9qZWN0OwotICAJfQotICAJZWxzZQotICAJICByZXR1cm4gcDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgY25hbWUgPSB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldENvbXBvbmVudE5hbWUoKTsKLSAgICBpZiAoY25hbWU9PW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBjbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCSAgaWYgKHdzZGxTZWxlY3Rpb25XaWRnZXQgIT0gbnVsbCkKLQkgIHsKLQkJICByZXR1cm4gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOyAgCi0JICB9Ci0JICBlbHNlIHJldHVybiAiIjsgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKSB7Ci0JICByZXR1cm4gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpCi0gIHsKLQkgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LnZhbGlkYXRlKHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODVmNGM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDcgICAxMzU0NDMgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzYwMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDExICAgMTM2MTY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxNyAgIDEzNjM5MCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzY3MDUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMSAgIDEzNjc2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI0ICAgMTM4MDUyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNSAgIDEzNzgzMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI2ICAgMTM3NjIyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTA0ICAgMTM4MDM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwNyAgIDE0NDgyNiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYwNyAgIDE0NDA0OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYxNCAgIDE0NjI3MCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcxNyAgIDE1MDU3NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNjA3MjYgICAxNTA4NjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDgxNyAgIDE0MDAxNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgbG9uZ2VyIHByb2plY3Qgb3Igc2VydmVyL3J1bnRpbWUgc3RyaW5ncyBkbyBub3QgcmVzaXplIHdpemFyZAotICogMjAwNjA4MjkgICAxNTU0NDEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdlYiBzZXJ2aWNlIHdpemFyZCBoYW5ncyBkdXJpbmcgcmVzaXplCi0gKiAyMDA3MDEyNiAgIDEzODQ4NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjA1ICAgMTcwMTQxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMxMiAgIDE0NzQ0MiB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODAzMTEgICAyMjIxMDMgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIENoYW5naW5nIHNlcnZpY2Ugc2NhbGUgZG9lc24ndCB1cGRhdGUgY29tcGxldGVseSBub24tVUkgcGFydCBvZiBjbGllbnQgc2NhbGUKLSAqIDIwMDgwMzI3ICAgMjI0NDUyIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDQxNiAgIDIxNTA4NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA5MDEyMSAgIDI2MTczMCB6aGFuZ0BjYS5pYm0uY29tIC0gQWxsYW4gWmhhbmcsIFdlYlNlcnZpY2UgY2xpZW50IHJ1bnRpbWUgaWQgcmV0dXJuIG51bGwKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuUHJvamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY2FsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5IeXBlcmxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBJUGFja2FibGUKLXsgICAgCi0JIC8vIElORk9QT1BTCSAKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMiBmb3IgdGhlIFNlcnZlciBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19TRVJWRVIgPSAiV1NXU0NFTjAwMjIiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIzIGZvciB0aGUgUnVudGltZSBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19SVU5USU1FID0gIldTV1NDRU4wMDIzIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNCBmb3IgdGhlUHJvamVjdHMgaHlwZXJsaW5rIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0gICAgIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUFJPSkVDVFMgID0gIldTV1NDRU4wMDI0IjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNSBmb3IgdGhlQ2xpZW50IFR5cGUgY29tYm8gYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DT01CT19DTElFTlRUWVBFID0gIldTV1NDRU4wMDI1IjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNiBmb3IgdGhlQ2xpZW50IFNsaWRlciBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fU0NBTEVfQ0xJRU5UID0gIldTV1NDRU4wMDI2IjsKLQkKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfMD0iaWNvbnMvY2xpZW50X3Rlc3QuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfMT0iaWNvbnMvY2xpZW50X3J1bi5qcGciOyAgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfMj0iaWNvbnMvY2xpZW50X2luc3RhbGwuanBnIjsgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF8zPSJpY29ucy9jbGllbnRfZGVwbG95LmpwZyI7IC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfND0iaWNvbnMvY2xpZW50X2Fzc2VtYmxlLmpwZyI7IC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfNT0iaWNvbnMvY2xpZW50X2RldmVsb3AuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfNj0iaWNvbnMvY2xpZW50X25vbmUuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMD0iaWNvbnMvc2NhbGUwX2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18xPSJpY29ucy9zY2FsZTFfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzI9Imljb25zL3NjYWxlMl9iZ3JvdW5kLmpwZyI7ICAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMz0iaWNvbnMvc2NhbGUzX2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR180PSJpY29ucy9zY2FsZTRfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzU9Imljb25zL3NjYWxlNV9iZ3JvdW5kLmpwZyI7ICAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfNj0iaWNvbnMvc2NhbGU2X2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIGNsaWVudENvbXBvc2l0ZV87Ci0gIHByaXZhdGUgQ29tcG9zaXRlIGhDb21wQ2xpZW50XzsKLSAgcHJpdmF0ZSBTaGVsbCBzaGVsbF87Ci0gIHByaXZhdGUgQ29tYm8gIGNsaWVudFR5cGVDb21ib187ICAKLSAgcHJpdmF0ZSBTY2FsZSBjbGllbnRTY2FsZV87ICAKLSAgcHJpdmF0ZSBMYWJlbCB0b3BvbG9neVNwb3RfOwotICBwcml2YXRlIExhYmVsIGNsaWVudERldGFpbHNMYWJlbF87ICAKLSAgcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtDbGllbnRSdW50aW1lXzsKLSAgcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtDbGllbnRTZXJ2ZXJfOwotICBwcml2YXRlIEh5cGVybGluayBoTGlua0NsaWVudFByb2plY3RfOwotICBwcml2YXRlIEh5cGVybGluayBoTGlua0NsaWVudEVBUl87Ci0gIHByaXZhdGUgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyBwcm9qZWN0RGlhbG9nXzsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGRlcGxveUNsaWVudF87Ci0JCi0gIHByaXZhdGUgQm9vbGVhbiB0ZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBCb29sZWFuIGluc3RhbGxDbGllbnRfOwotICBwcml2YXRlIEJvb2xlYW4gc3RhcnRDbGllbnRfOyAgICAKLSAgICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBpZHNfOwotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBlbmFibGVQcm94eV87ICAvL3NlcnZpY2Ugc2NhbGUgaXMgc2V0IHRvIGEgbGV2ZWwgdGhhdCB0aGUgY2xpZW50IHNjYWxlIGNhbiBiZSBlbmFibGVkCi0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnRPbmx5Xz1mYWxzZTsKLSAgcHJpdmF0ZSBpbnQgY2xpZW50U2NhbGVTZXR0aW5nXzsKLSAgcHJpdmF0ZSBJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXJfOwotICBwcml2YXRlIFN0cmluZyBlYXJQcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIHByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRFYXJfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRDb21wb25lbnRUeXBlXzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIGludCB2YWxpZGF0aW9uU3RhdGVfOwotICAKLSAgcHJpdmF0ZSBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyIHNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lcigpOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1JVTlRJTUVfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1JVTlRJTUVTX0xJU1QgOyAKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1NFUlZFUl9QUkVGSVggPSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVDsKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9QUk9KRUNUOwotICBwcml2YXRlIFN0cmluZyBDTElFTlRfRUFSX1BSRUZJWCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfRUFSX1BST0pFQ1Q7Ci0gIAotICBwcml2YXRlIENvbXBvc2l0ZSBjbGllbnRHcm91cENvbXBvc2l0ZV8gOwotCQotICBwcml2YXRlIFVJVXRpbHMgdXRpbHNfID0gbmV3IFVJVXRpbHMoIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIpOwotICBwcml2YXRlIElQYWNrYWJsZSBwYWNrYWJsZV8gPSBudWxsOyAgCi0gIHByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsSWRzXzsKLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldChib29sZWFuIGNsaWVudE9ubHkpIHsKLQkgICAgY2xpZW50T25seV8gPSBjbGllbnRPbmx5OwotCQlpbml0SW1hZ2VSZWdpc3RyeSgpOwotCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQl9Ci0gICAKLSAgICAvKioKLSAgICAgKiBHaXZlIHRoaXMgd2lkZ2V0IGEgaGFuZGxlIHRvIGFuIElQYWNrYWJsZSBpbnN0YW5jZSwgd2hpY2ggd2lsbCBhbHNvIGJlCi0gICAgICogcGFja2VkIHdoZW4gdGhpcyB3aWRnZXQncyBwYWNrSXQoKSBpcyBjYWxsZWQuCi0gICAgICogCi0gICAgICogQHBhcmFtIHBhY2thYmxlIFRoZSBJUGFja2FibGUgaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UGFja2FibGUoSVBhY2thYmxlIHBhY2thYmxlKSB7Ci0gICAgCXBhY2thYmxlXyA9IHBhY2thYmxlOwotICAgIH0KLSAgCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSVBhY2thYmxlI3BhY2tJdCgpCi0JICovCi0JcHVibGljIHZvaWQgcGFja0l0KCkgewotCQljbGllbnRHcm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsJCQotCQl1dGlsc18uaG9yaXpvbnRhbFJlc2l6ZShjbGllbnRHcm91cENvbXBvc2l0ZV8uZ2V0U2hlbGwoKSwgY2xpZW50R3JvdXBDb21wb3NpdGVfLCBVSVV0aWxzLkRFRkFVTFRfUEFERElORyk7Ci0JCWlmICghY2xpZW50T25seV8gJiYgcGFja2FibGVfICE9IG51bGwpCi0JCQlwYWNrYWJsZV8ucGFja0l0KCk7Ci0JfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2FkZENvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXIpCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICBDb21wb3NpdGUgY2xpZW50VHlwZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JR3JpZExheW91dCBjY2xheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JY2NsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JY2NsYXlvdXQubWFyZ2luVG9wPTM7Ci0JY2xpZW50VHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXQoIGNjbGF5b3V0ICk7Ci0gICAgR3JpZERhdGEgY2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOyAKLSAgICBjbGllbnRUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoY2NHcmlkRGF0YSk7Ci0gICAgCi0gICAgaW50IGNvbWJvU3R5bGUgPSBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFk7Ci0gICAgY2xpZW50VHlwZUNvbWJvXyA9IHV0aWxzXy5jcmVhdGVDb21ibyggY2xpZW50VHlwZUNvbXBvc2l0ZSwgCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRUNMSUVOVFRZUEUsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1BSX0NPTUJPX0NMSUVOVFRZUEUsIAotICAgIAkJSU5GT1BPUF9XU1dTQ0VOX0NPTUJPX0NMSUVOVFRZUEUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYm9TdHlsZSApOwotICAgIEdyaWREYXRhIGNvbWJvR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBjbGllbnRUeXBlQ29tYm9fLnNldExheW91dERhdGEoY29tYm9HcmlkRGF0YSk7Ci0JY2xpZW50VHlwZUNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJU3RyaW5nIG9sZFR5cGVJZCA9IGlkc18uZ2V0VHlwZUlkKCk7Ci0JCQkJaW50IGN1cnJlbnRTZWxlY3Rpb25JZHggPSBjbGllbnRUeXBlQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRUeXBlSWQgPSBsYWJlbElkc18uZ2V0SWRzXygpW2N1cnJlbnRTZWxlY3Rpb25JZHhdOwotCQkJCWlmICghb2xkVHlwZUlkLmVxdWFscyhjdXJyZW50VHlwZUlkKSkgewkJCi0JCQkJCS8vIGhhbmRsZSBjaGFuZ2luZyBjbGllbnQgdHlwZQotCQkJCQlpZHNfLnNldFR5cGVJZChjdXJyZW50VHlwZUlkKTsKLQkJCQkJcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCQkJfQotCi0JCX0pOyAgICAKLSAgICAKLSAgICBjbGllbnRHcm91cENvbXBvc2l0ZV8gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyAgICAKLQlHcmlkTGF5b3V0IGdjbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlnY2xheW91dC5udW1Db2x1bW5zID0gMjsKLQlnY2xheW91dC5ob3Jpem9udGFsU3BhY2luZz0wOwkJCi0JZ2NsYXlvdXQubWFyZ2luSGVpZ2h0PTA7CQkKLQlnY2xheW91dC5tYXJnaW5Cb3R0b209NTsKLQljbGllbnRHcm91cENvbXBvc2l0ZV8uc2V0TGF5b3V0KCBnY2xheW91dCApOwotICAgIEdyaWREYXRhIGdjR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkJFR0lOTklORywgdHJ1ZSwgdHJ1ZSk7IAotICAgIGNsaWVudEdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKGdjR3JpZERhdGEpOwotICAgIAotICAgIGNsaWVudEdyb3VwQ29tcG9zaXRlXy5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xMaXN0ZW5lcigpCi0JewotCQlwdWJsaWMgdm9pZCBjb250cm9sTW92ZWQoQ29udHJvbEV2ZW50IGUpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCQotCQl9Ci0JCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBlKSB7Ci0JCQljbGllbnRHcm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsKLQkJfQotCX0pOwotICAgIAotICAgICAgIAotCWNsaWVudENvbXBvc2l0ZV8gPSAgbmV3IENvbXBvc2l0ZShjbGllbnRHcm91cENvbXBvc2l0ZV8sIFNXVC5OT05FKTsKLQlHcmlkTGF5b3V0IGdyaWRsYXlvdXQgICA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ3JpZGxheW91dC5udW1Db2x1bW5zICAgPSAyOwotICAgIGdyaWRsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmc9MDsKLSAgICBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodD0wOwotICAgIGNsaWVudENvbXBvc2l0ZV8uc2V0TGF5b3V0KCBncmlkbGF5b3V0ICk7Ci0gICAgR3JpZERhdGEgc2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGNsaWVudENvbXBvc2l0ZV8uc2V0TGF5b3V0RGF0YShzY0dyaWREYXRhKTsKLSAgICAKLSAgICBjbGllbnRTY2FsZV8gPSBuZXcgU2NhbGUoY2xpZW50Q29tcG9zaXRlXyAsIFNXVC5WRVJUSUNBTCB8IFNXVC5CT1JERVIpOwkJCi0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoY2xpZW50U2NhbGVfLCBJTkZPUE9QX1dTV1NDRU5fU0NBTEVfQ0xJRU5UKTsJCi0JY2xpZW50U2NhbGVfLnNldE1pbmltdW0oMCk7Ci0JY2xpZW50U2NhbGVfLnNldE1heGltdW0oNik7Ci0JY2xpZW50U2NhbGVfLnNldEluY3JlbWVudCgxKTsKLQljbGllbnRTY2FsZV8uc2V0UGFnZUluY3JlbWVudCgxKTsKLQljbGllbnRTY2FsZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoc2NhbGVTZWxlY3Rpb25MaXN0ZW5lcik7CQkKLQlzZXRDbGllbnRTY2FsZShnZXRDbGllbnRHZW5lcmF0aW9uKCkpOwotCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVCk7Ci0JCi0JQWNjZXNzaWJsZSBhY2Nlc3NpYmxlU2NhbGUgPSBjbGllbnRTY2FsZV8uZ2V0QWNjZXNzaWJsZSgpOwotCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIobmV3IEFjY2Vzc2libGVBZGFwdGVyKCl7Ci0JCS8vIHJldHVybiBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB3aGF0IHRvIGRvIHdpdGggdGhlIHNsaWRlcgotCQkvLyAgdGhpcyBpcyByZWFkIGJ5IHRoZSBzY3JlZW4gcmVhZGVyIHdoZW4gdGhlIHNsaWRlciBmaXJzdCBnZXRzIGZvY3VzCi0JCXB1YmxpYyB2b2lkIGdldE5hbWUoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQ7CQkJCi0JCX0JCQkKLQl9KTsKLQlhY2Nlc3NpYmxlU2NhbGUuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lcihuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyKCl7Ci0JCS8vIHJldHVybiBhIG1lYW5pbmdmdWwgc3RyaW5nIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIKLQkJLy8gYXR0ZW1wdHMgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzZXJ2aWNlIHNjYWxlCi0JCXB1YmxpYyB2b2lkIGdldFZhbHVlKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJaW50IHNlbGVjdGlvbiA9IGNsaWVudFNjYWxlXy5nZXRTZWxlY3Rpb24oKTsKLQkJCXN3aXRjaCAoc2VsZWN0aW9uKSB7Ci0JCQljYXNlIDA6Ci0JCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1RFU1Q7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfSU5TVEFMTDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzoKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVQTE9ZOwotCQkJCWJyZWFrOwotCQkJY2FzZSA0OgotCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9BU1NFTUJMRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgNToKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUDsKLQkJCQlicmVhazsKLQkJCWNhc2UgNjoJCQkJCi0JCQkJaWYgKGNsaWVudE9ubHlfKQotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UX09OTFk7Ci0JCQkJZWxzZQotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UOwkJCQkKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9CQkJCQkJCQkKLQkJfQotCX0pOwotCQotCUdyaWREYXRhIGxheW91dERhdGExID0gbmV3IEdyaWREYXRhKCk7Ci0JbGF5b3V0RGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudD1TV1QuQ0VOVEVSOwotCWxheW91dERhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQlSZWN0YW5nbGUgc2NhbGVSID0gKGltYWdlUmVnXy5nZXQoSUNPTl9TQ0FMRV9CR18wKSkuZ2V0Qm91bmRzKCk7CQotCWxheW91dERhdGExLmhlaWdodEhpbnQ9c2NhbGVSLmhlaWdodDsKLQlsYXlvdXREYXRhMS53aWR0aEhpbnQ9c2NhbGVSLndpZHRoKzE7Ci0JY2xpZW50U2NhbGVfLnNldExheW91dERhdGEobGF5b3V0RGF0YTEpOwotCQkKLQl0b3BvbG9neVNwb3RfID0gbmV3IExhYmVsKGNsaWVudENvbXBvc2l0ZV8gLCBTV1QuQ0VOVEVSIHwgU1dULkJPUkRFUiApOwotCXRvcG9sb2d5U3BvdF8uc2V0QmFja2dyb3VuZChEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfV0hJVEUpKTsKLQlpZiAoY2xpZW50T25seV8pCi0JCXRvcG9sb2d5U3BvdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlRfT05MWSk7Ci0JZWxzZQotCXRvcG9sb2d5U3BvdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQpOwotCQotCUdyaWREYXRhIGxheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQlsYXlvdXREYXRhLnZlcnRpY2FsQWxpZ25tZW50PVNXVC5CRUdJTk5JTkc7Ci0JbGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5CRUdJTk5JTkc7Ci0JUmVjdGFuZ2xlIHRvcFIgPSAoaW1hZ2VSZWdfLmdldChHUkFQSElDX0NMSUVOVF82KSkuZ2V0Qm91bmRzKCk7Ci0JbGF5b3V0RGF0YS53aWR0aEhpbnQ9dG9wUi53aWR0aDsKLQlsYXlvdXREYXRhLmhlaWdodEhpbnQ9dG9wUi5oZWlnaHQ7Ci0JdG9wb2xvZ3lTcG90Xy5zZXRMYXlvdXREYXRhKGxheW91dERhdGEpOwkJCi0JCi0Jc2V0R3JhcGhpY3MoZ2V0Q2xpZW50R2VuZXJhdGlvbigpKTsKLQkJCi0JaENvbXBDbGllbnRfID0gdXRpbHNfLmNyZWF0ZUNvbXBvc2l0ZShjbGllbnRHcm91cENvbXBvc2l0ZV8sIDEpOwotCQotCWNsaWVudERldGFpbHNMYWJlbF8gPSBuZXcgTGFiZWwoaENvbXBDbGllbnRfLCBTV1QuTk9ORSk7Ci0JY2xpZW50RGV0YWlsc0xhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZKTsKLQkKLQloTGlua0NsaWVudFNlcnZlcl89IG5ldyBIeXBlcmxpbmsoaENvbXBDbGllbnRfLCBTV1QuTlVMTCk7Ci0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoaExpbmtDbGllbnRTZXJ2ZXJfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUik7Ci0JaExpbmtDbGllbnRTZXJ2ZXJfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfVEVYVF9TRVJWRVIpOwotCWhMaW5rQ2xpZW50U2VydmVyXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKHRydWUsIHRydWUpOwkJCQkKLQkJfQotCQlwdWJsaWMgdm9pZCBsaW5rRW50ZXJlZChIeXBlcmxpbmtFdmVudCBlKXt9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCX0pOwotCQotCWhMaW5rQ2xpZW50UnVudGltZV8gPSBuZXcgSHlwZXJsaW5rKGhDb21wQ2xpZW50XywgU1dULk5VTEwpOwotCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rQ2xpZW50UnVudGltZV8sIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUlVOVElNRSk7Ci0JaExpbmtDbGllbnRSdW50aW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRSk7Ci0JaExpbmtDbGllbnRSdW50aW1lXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKHRydWUpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JfSk7Ci0JCi0JSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCXByb2plY3REaWFsb2dfID0gbmV3IFByb2plY3RTZWxlY3Rpb25EaWFsb2cod29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIAotCQkJbmV3IFBhZ2VJbmZvKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX0NMSUVOVF9QUk9KRUNUX1NFVFRJTkdTLCAiIiwgCi0gICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCQkJewkKLQkJCQkJCQlwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkJCQl7CSAgCQkJCQkJIAotCQkJCQkJCSAgIHJldHVybiBuZXcgUHJvamVjdFNlbGVjdGlvbldpZGdldCh0cnVlKTsKLQkJCQkJCQl9Ci0JCQkJCQl9KSk7Ci0JCi0JaExpbmtDbGllbnRQcm9qZWN0XyA9IG5ldyBIeXBlcmxpbmsoaENvbXBDbGllbnRfLCBTV1QuTlVMTCk7Ci0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoaExpbmtDbGllbnRSdW50aW1lXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyk7Ci0JaExpbmtDbGllbnRQcm9qZWN0Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0NMSUVOVFBST0pFQ1RfTElOSyk7Ci0JaExpbmtDbGllbnRQcm9qZWN0Xy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQlwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpe30JCQkKLQl9KTsKLQkKLQloTGlua0NsaWVudEVBUl8gPSBuZXcgSHlwZXJsaW5rKGhDb21wQ2xpZW50XywgU1dULk5VTEwpOwkKLQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua0NsaWVudFJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQloTGlua0NsaWVudEVBUl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9DTElFTlRQUk9KRUNUX0xJTkspOwotCWhMaW5rQ2xpZW50RUFSXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQlwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpe30JCQkKLQl9KTsKLQkKLQloTGlua0NsaWVudFNlcnZlcl8uc2V0VGV4dChDTElFTlRfU0VSVkVSX1BSRUZJWCk7IAotCWhMaW5rQ2xpZW50UnVudGltZV8uc2V0VGV4dChDTElFTlRfUlVOVElNRV9QUkVGSVgpOwotCWhMaW5rQ2xpZW50UHJvamVjdF8uc2V0VGV4dChDTElFTlRfUFJPSkVDVF9QUkVGSVgpOwotCWhMaW5rQ2xpZW50RUFSXy5zZXRUZXh0KENMSUVOVF9FQVJfUFJFRklYKTsJCi0JCi0JSHlwZXJsaW5rR3JvdXAgc2VydmVyUnVudGltZUdyb3VwID0gbmV3IEh5cGVybGlua0dyb3VwKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rQ2xpZW50U2VydmVyXyk7Ci0Jc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua0NsaWVudFJ1bnRpbWVfKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rQ2xpZW50UHJvamVjdF8pOwotCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtDbGllbnRFQVJfKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuc2V0SHlwZXJsaW5rVW5kZXJsaW5lTW9kZShIeXBlcmxpbmtTZXR0aW5ncy5VTkRFUkxJTkVfQUxXQVlTKTsKLSAgICAKLQllbmFibGVDbGllbnRTbGlkZXIoZ2V0R2VuZXJhdGVQcm94eSgpKTsKLQkKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZW5hYmxlQ2xpZW50U2xpZGVyKCBib29sZWFuIGVuYWJsZSApCi0gIHsKLQllbmFibGVQcm94eV8gPSBlbmFibGU7Ci0JY2xpZW50U2NhbGVfLnNldEVuYWJsZWQoZW5hYmxlKTsKLQlpbnQgc2VsZWN0aW9uID0gZ2V0Q2xpZW50R2VuZXJhdGlvbigpOwotCWlmIChlbmFibGUpCi0JewkJCQkKLQkJc2V0R3JhcGhpY3Moc2VsZWN0aW9uKTsKLQl9Ci0JZWxzZQotCXsKLQkJc2V0Q2xpZW50U2NhbGUoU2NlbmFyaW9Db250ZXh0LldTX05PTkUpOwotCQl1cGRhdGVGaWVsZHMoU2NlbmFyaW9Db250ZXh0LldTX05PTkUpOwotCQlzZXRHcmFwaGljcyhTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSk7Ci0JCWNsaWVudFNjYWxlXy5zZXRCYWNrZ3JvdW5kSW1hZ2UobnVsbCk7ICAvL292ZXJyaWRlIGJhY2tncm91bmQgZm9yIGRpc2FibGUgdG8gZ3JleQkJCi0JfQkKLQlzaG93U3VtbWFyeShlbmFibGUgJiYgKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUZpZWxkcyhpbnQgc2VsZWN0aW9uKSB7Ci0JCXNldERldmVsb3BDbGllbnQoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsKLQkJc2V0QXNzZW1ibGVDbGllbnQoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRSk7Ci0JCXNldERlcGxveUNsaWVudChzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWSk7Ci0JCXNldFRlc3RDbGllbnQobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19URVNUKSk7Ci0JCXNldEluc3RhbGxDbGllbnQobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMKSk7Ci0JCXNldFN0YXJ0Q2xpZW50KG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzaG93U3VtbWFyeShib29sZWFuIHNob3cpCi0gIHsKLQkgIGlmIChjbGllbnRPbmx5XykKLQkJICBzaG93ID0gdHJ1ZTsgIC8vc2hvcnQgY2lyY3VpdCB0byBlbGltaW5hdGUgZmxpY2tlci4uLgkgIAotCSAgCi0JICBoTGlua0NsaWVudEVBUl8uc2V0VmlzaWJsZShzaG93ICYmIG5lZWRFYXJfKTsKLQkgIGhMaW5rQ2xpZW50UHJvamVjdF8uc2V0VmlzaWJsZShzaG93KTsKLQkgIGhMaW5rQ2xpZW50UnVudGltZV8uc2V0VmlzaWJsZShzaG93KTsKLQkgIGhMaW5rQ2xpZW50U2VydmVyXy5zZXRWaXNpYmxlKHNob3cpOwotCSAgCi0JICBpZiAoc2hvdykKLQkgIHsKLQkJICBjbGllbnREZXRhaWxzTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NVTU1BUlkpOwotCSAgfQotCSAgZWxzZQotCSAgewotCQkgIGlmIChjbGllbnRPbmx5XykKLQkJCSAgaENvbXBDbGllbnRfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UX09OTFkpOwotCQkJZWxzZQotCQkgIGhDb21wQ2xpZW50Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVCk7Ci0JCSAgY2xpZW50RGV0YWlsc0xhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZX05PX0NMSUVOVCk7CQkgIAotCSAgfQkgIAotCSAgY2xpZW50RGV0YWlsc0xhYmVsXy5wYWNrKHRydWUpOwotCSAgaExpbmtDbGllbnRQcm9qZWN0Xy5wYWNrKHRydWUpOwotCSAgaExpbmtDbGllbnRFQVJfLnBhY2sodHJ1ZSk7Ci0JICBwYWNrSXQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0JTGFiZWxzQW5kSWRzICAgICAgICAgICAgICAgICBsYWJlbElkcyAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50VHlwZUxhYmVscygpOwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICA9IDA7Ci0gICAgU3RyaW5nW10gICAgICAgICAgICAgICAgICAgICBjbGllbnRJZHMgID0gbGFiZWxJZHMuZ2V0SWRzXygpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZCA9IGlkcy5nZXRUeXBlSWQoKTsKLSAgICAKLSAgICBsYWJlbElkc18gPSBsYWJlbElkczsKLQkvLyByc2tyZWcKLSAgICBjbGllbnRUeXBlQ29tYm9fLnNldEl0ZW1zKCBsYWJlbElkcy5nZXRMYWJlbHNfKCkgKTsKLSAgICAKLSAgICAvLyBOb3cgZmluZCB0aGUgc2VsZWN0ZWQgb25lLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGllbnRJZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBpZiggc2VsZWN0ZWRJZC5lcXVhbHMoIGNsaWVudElkc1tpbmRleCBdKSApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbiA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgY2xpZW50VHlwZUNvbWJvXy5zZWxlY3QoIHNlbGVjdGlvbiApOyAgICAKLQlpZHNfID0gaWRzOwotCQotCWlmIChpZHNfICE9IG51bGwpCi0JewotCQlTdHJpbmcgY2xpZW50U2VydmVyVGV4dCA9ICIiOwotCQlTdHJpbmcgc2VydmVySWQgPSBpZHNfLmdldFNlcnZlcklkKCk7Ci0JCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCXsKLQkJCWNsaWVudFNlcnZlclRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCQl9IAotCQlTdHJpbmcgY2xpZW50UnVudGltZVRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc18uZ2V0UnVudGltZUlkKCkpOwotCQkKLQkJU3RyaW5nIGN1cnJlbnRTZXJ2ZXJUZXh0ID0gaExpbmtDbGllbnRTZXJ2ZXJfLmdldFRleHQoKTsKLQkJU3RyaW5nIGN1cnJlbnRSdW50aW1lVGV4dCA9IGhMaW5rQ2xpZW50UnVudGltZV8uZ2V0VGV4dCgpOwotCQlTdHJpbmcgbmV3U2VydmVyVGV4dCA9IENMSUVOVF9TRVJWRVJfUFJFRklYICsgIiAiICsgY2xpZW50U2VydmVyVGV4dDsKLQkJU3RyaW5nIG5ld1J1bnRpbWVUZXh0ID0gQ0xJRU5UX1JVTlRJTUVfUFJFRklYICsgIiAiICsgY2xpZW50UnVudGltZVRleHQ7Ci0JCWhMaW5rQ2xpZW50U2VydmVyXy5zZXRUZXh0KG5ld1NlcnZlclRleHQpOwotCQloTGlua0NsaWVudFJ1bnRpbWVfLnNldFRleHQobmV3UnVudGltZVRleHQpOwotCQkKLQkJLypjaGVjayB0byBzZWUgaWYgdGV4dCBoYXMgY2hhbmdlZCBmb3Igc2VydmVyIG9yIHJ1bnRpbWUKLQkJaWYgc28sIHJlcGFpbnQgbGlua3MgKi8KLQkJaWYgKCFuZXdTZXJ2ZXJUZXh0LmVxdWFscyhjdXJyZW50U2VydmVyVGV4dCkpCi0JCXsKLQkJCWhMaW5rQ2xpZW50U2VydmVyXy5wYWNrKHRydWUpOwotCQkJcGFja0l0KCk7Ci0JCX0JCQkKLQkJCi0JCWlmICghbmV3UnVudGltZVRleHQuZXF1YWxzKGN1cnJlbnRSdW50aW1lVGV4dCkpCi0JCXsKLQkJCWhMaW5rQ2xpZW50UnVudGltZV8ucGFjayh0cnVlKTsKLQkJCXBhY2tJdCgpOwotCQl9IAkKLQl9Ci0JCi0gICAgaWYgKHByb2plY3REaWFsb2dfICE9IG51bGwpCi0gICAgCXByb2plY3REaWFsb2dfLnNldFR5cGVSdW50aW1lU2VydmVyKGlkc18pOwotICAgIAotCS8vV2hlbiB0aGUgc2VydmVyIGNoYW5nZXMsIHRoZSBzdGF0ZSBvZiBuZWVkRWFyIGNvdWxkIGNoYW5nZS4KLQkvL0lmIHRoZSB0aGUgc2VydmVyIGNoYW5nZSByZXN1bHRzIGluIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLAotCS8vdXBkYXRlIG5lZWRFYXIgYW5kIGNsaWVudEVhclByb2plY3ROYW1lLiAgICAKLSAgICAKLQlWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JYm9vbGVhbiBvbGROZWVkRWFyID0gZ2V0Q2xpZW50TmVlZEVBUigpOwotCWJvb2xlYW4gY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcjsKLQotCWlmICghb2xkTmVlZEVhcikgewotCQkJLy8gSWYgYW4gRUFSIHdhcyBub3QgbmVlZGVkIHByZXZpb3VzbHkgaXQgY291bGQgaGF2ZSBiZWVuIGJlY2F1c2Ugb2YKLQkJCS8vIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSBvciB0aGUgc2VydmVyLgotCQkJLy8gSWYgaXQgd2FzIGJlY2F1c2Ugb2YgdGhlIHByb2plY3QvcHJvamVjdCB0eXBlLCBjaGFuZ2luZyB0aGUKLQkJCS8vIHNlcnZlciBzaG91bGQgaGF2ZSBubyBpbXBhY3QKLQkJCS8vIG9uIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLgotCQkJY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhciA9IHZ1LnByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIoZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSwKLQkJCQkJZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpKTsKLQkJfSBlbHNlIHsKLQkJCWNsaWVudFByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB0cnVlOwotCQl9Ci0KLQkJLy8gYm9vbGVhbiBjbGllbnRQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0KLQkJLy8gdnUucHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihnZXRDbGllbnRQcm9qZWN0TmFtZSgpLAotCQkvLyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkpOwotCQlpZiAoY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcikgewotCQkJLy8gQ291bGQgbm90IHJ1bGUgb3V0IG5lZWQgZm9yIGFuIEVhciBmcm9tIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZQotCQkJLy8gc28gY2hhbmdpbmcgdGhlIHNlcnZlcgotCQkJLy8gbWF5IGltcGFjdCB0aGUgbmVlZCBmb3IgYW4gRWFyLgotCQkJYm9vbGVhbiBjdXJyZW50U2VydmVyTmVlZHNFYXIgPSB2dS5zZXJ2ZXJOZWVkc0VBUihnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQkJaWYgKG9sZE5lZWRFYXIgIT0gY3VycmVudFNlcnZlck5lZWRzRWFyKSB7Ci0JCQkJLy8gVXBkYXRlIG5lZWRFYXIgYW5kIHNlcnZpY2VFYXJQcm9qZWN0TmFtZS4KLQkJCQlpZiAoY3VycmVudFNlcnZlck5lZWRzRWFyKSB7Ci0JCQkJCS8vIENhbGN1bGF0ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgdGhlIEVhciBwcm9qZWN0IG5hbWUKLQkJCQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShnZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLQkJCQkJc2V0Q2xpZW50TmVlZEVBUihjdXJyZW50U2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShlYXJQcm9qZWN0TmFtZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0Q2xpZW50TmVlZEVBUihjdXJyZW50U2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgiIik7Ci0JCQkJfQotCi0JCQl9Ci0JCX0JCSAgICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBpZHNfOyAgCi0gIH0KLSAgICAgIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotCSAgcmV0dXJuIGdldENsaWVudEdlbmVyYXRpb24oKSA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsKLQkgIHJldHVybiBkZXZlbG9wQ2xpZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICB0aGlzLmRldmVsb3BDbGllbnRfID0gZGV2ZWxvcENsaWVudDsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkgIHJldHVybiBhc3NlbWJsZUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JICB0aGlzLmFzc2VtYmxlQ2xpZW50XyA9IGFzc2VtYmxlQ2xpZW50OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpIHsKLQkgIHRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdENsaWVudChCb29sZWFuIHZhbHVlKQotICB7Ci0JICB0ZXN0Q2xpZW50XyA9IHZhbHVlOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkKLSAgewotCSAgcmV0dXJuIHRlc3RDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGluc3RhbGxDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpCi0gIHsKLQkgIHJldHVybiBzdGFydENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoIEJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgICBpbnN0YWxsQ2xpZW50XyA9IHZhbHVlOyAgICAKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRTdGFydENsaWVudCggQm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICAgIHN0YXJ0Q2xpZW50XyA9IHZhbHVlOyAgICAKLSAgfQotCi0gIAotCXByaXZhdGUgdm9pZCBsYXVuY2hQcm9qZWN0RGlhbG9nKCkKLQl7Ci0JCVN0cmluZyBjdXJyZW50UHJvamVjdE5hbWUgPSBnZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgY3VycmVudEVhclByb2plY3ROYW1lID0gZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0VHlwZSA9IGdldENsaWVudENvbXBvbmVudFR5cGUoKTsKLQkJYm9vbGVhbiBjdXJyZW50TmVlZEVhciA9IGdldENsaWVudE5lZWRFQVIoKTsKLQkJCi0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3ROYW1lKGN1cnJlbnRQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldEVhclByb2plY3ROYW1lKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldE5lZWRFQVIoY3VycmVudE5lZWRFYXIpOwkKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdENvbXBvbmVudFR5cGUoY3VycmVudFByb2plY3RUeXBlKTsKLQkJCi0JCWludCBzdGF0dXMgPSBwcm9qZWN0RGlhbG9nXy5vcGVuKCk7Ci0JCQotCQlpZiAoc3RhdHVzID09IFdpbmRvdy5PSykKLQkJewotCQkJU3RyaW5nIG5ld1Byb2plY3ROYW1lID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdE5hbWUoKTsKLQkJCVN0cmluZyBuZXdFYXJQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldEVhclByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3UHJvamVjdFR5cGUgPSBwcm9qZWN0RGlhbG9nXy5nZXRQcm9qZWN0Q29tcG9uZW50VHlwZSgpOwotCQkJYm9vbGVhbiBuZXdOZWVkRWFyID0gcHJvamVjdERpYWxvZ18uZ2V0TmVlZEVBUigpOwkKLQkJCQotCQkJLy9VcGRhdGUgcHJvamVjdCBzZXR0aW5ncyBhbmQgdmFsaWRhdGUgcGFnZSBpZiBzZWxlY3Rpb25zIGNoYW5nZWQuCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpCi0JCQkJCXx8ICFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3UHJvamVjdFR5cGUuZXF1YWxzKGN1cnJlbnRQcm9qZWN0VHlwZSkKLQkJCQkJfHwgbmV3TmVlZEVhciAhPSBjdXJyZW50TmVlZEVhcikgewotCQkJCXNldENsaWVudFByb2plY3ROYW1lKG5ld1Byb2plY3ROYW1lKTsKLQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShuZXdFYXJQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0Q2xpZW50TmVlZEVBUihuZXdOZWVkRWFyKTsKLQkJCQlzZXRDbGllbnRDb21wb25lbnRUeXBlKG5ld1Byb2plY3RUeXBlKTsJCQkJCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKTsKLQkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0JCQl9Ci0JCQkKLQkJCS8qY2hlY2sgdG8gc2VlIGlmIHRleHQgaGFzIGNoYW5nZWQgZm9yIHByb2plY3Qgb3IgRUFSCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua0NsaWVudFByb2plY3RfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja0l0KCk7Ci0JCQl9Ci0JCQlpZiAoIW5ld0VhclByb2plY3ROYW1lLmVxdWFscyhjdXJyZW50RWFyUHJvamVjdE5hbWUpKQotCQkJewotCQkJCWhMaW5rQ2xpZW50RUFSXy5wYWNrKHRydWUpOwotCQkJCXBhY2tJdCgpOwotCQkJfQotCQl9CQkKLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQpIHsKLQkgIGxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coY2xpZW50Q29udGV4dCwgZmFsc2UpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQsIGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpCi0JewotCSAgICBUeXBlUnVudGltZVNlcnZlciBjdXJyZW50Q2xpZW50VFJTID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgICAgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyByc3NkID0gbmV3IFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coc2hlbGxfLCAoYnl0ZSkxLCBnZXRUeXBlUnVudGltZVNlcnZlcigpLCAiMTQiKTsKLQkgICAgcnNzZC5zZXRTZWxlY3RTZXJ2ZXJGaXJzdChzZWxlY3RTZXJ2ZXJGaXJzdCk7Ci0JICAgIGludCBzdGF0dXMgPSByc3NkLm9wZW4oKTsKLQkJaWYgKHN0YXR1cyA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCVR5cGVSdW50aW1lU2VydmVyIG5ld0NsaWVudFRSUyA9IHJzc2QuZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsJCQkKLQkJCWlmICghY3VycmVudENsaWVudFRSUy5lcXVhbHMobmV3Q2xpZW50VFJTKSkKLQkJCXsKLQkJCQlzZXRUeXBlUnVudGltZVNlcnZlcihyc3NkLmdldFR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy92YWxpZGF0ZSB0aGUgcGFnZQotCQkJfQotCQl9CQkKLQl9Ci0gIAotICAvL1ByaXZhdGUgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGNsaWVudFNjYWxlXyBzZXR0aW5nIGlzIGNoYW5nZWQKLSAgLy9pbnN0ZWFkIG9mIGNhbGxpbmcgY2xpZW50U2NhbGVfLnNldFNlbGVjdGlvbiBkaXJlY3RseS4KLSAgcHJpdmF0ZSB2b2lkIHNldENsaWVudFNjYWxlKGludCBzZXR0aW5nKQotICB7Ci0JICBjbGllbnRTY2FsZV8uc2V0U2VsZWN0aW9uKHNldHRpbmcpOwotCSAgY2xpZW50U2NhbGVTZXR0aW5nXyA9IHNldHRpbmc7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGluaXRJbWFnZVJlZ2lzdHJ5KCkKLQl7Ci0JCWltYWdlUmVnXyA9IG5ldyBJbWFnZVJlZ2lzdHJ5KERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCi0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18wLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18wKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18xLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18xKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18yKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18zLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18zKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR180LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR180KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR181LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR181KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR182LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR182KSk7Ci0JCQotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfQ0xJRU5UXzAsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX0NMSUVOVF8wKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfMSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzEpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX0NMSUVOVF8yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19DTElFTlRfMikpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfQ0xJRU5UXzMsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX0NMSUVOVF8zKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfNCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzQpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX0NMSUVOVF81LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19DTElFTlRfNSkpOwkJCi0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfNiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzYpKTsKLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0R3JhcGhpY3MoaW50IHNlbGVjdGlvbikKLSAgewotICAgICBTdHJpbmcgaWNvbkltYWdlID0gIiI7Ci0gICAgIFN0cmluZyB0b3BvbG9neUltYWdlID0gIiI7Ci0gICAgIAotCSAgc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkgICAgY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzA7Ci0JCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzA7Ci0JCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUKTsKLQkJCWJyZWFrOwotCSAgICBjYXNlIFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzE7Ci0JCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzE7Ci0JCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgU2NlbmFyaW9Db250ZXh0LldTX0lOU1RBTEw6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18yOwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF8yOwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfSU5TVEFMTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMzsKLQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfMzsKLQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEU6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR180OwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF80OwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR181OwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF81OwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORToJCQkKLQkJCWlmICghY2xpZW50T25seV8pCi0JCQl7Ci0JCQkJaWYgKGVuYWJsZVByb3h5XykgIC8vaWYgc2VydmljZSBpcyBzdGFydCBvciB0ZXN0Li4uCi0JCQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzY7ICAKLQkJCQllbHNlCi0JCQkJCWljb25JbWFnZT1udWxsOwotCQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfNjsKLQkJCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXNldENsaWVudFNjYWxlKFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsgLy8ibm8gc2VsZWN0aW9uIiBpcyBub3QgYWxsb3dlZC4uLm11c3QgZGV2ZWxvcCBjbGllbnQgQCBtaW5pbXVtCi0JCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfNTsKLQkJCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzU7CQkJCQotCQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1ApOwkJCQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQljbGllbnRTY2FsZV8uc2V0QmFja2dyb3VuZEltYWdlKGltYWdlUmVnXy5nZXQoaWNvbkltYWdlKSk7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0SW1hZ2UoaW1hZ2VSZWdfLmdldCh0b3BvbG9neUltYWdlKSk7CQotICB9Ci0gIAotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotCXsKLQkJcmV0dXJuIG9iamVjdFNlbGVjdGlvbl87CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0gICAgICAgIG9iamVjdFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0JfQotCQotICBwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gY2xpZW50U2NhbGVTZXR0aW5nXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50R2VuZXJhdGlvbihpbnQgdmFsdWUpCi0gIHsKLQkgIGlmIChjbGllbnRPbmx5XyAmJiB2YWx1ZSA9PSBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSkgewotCQkgIHZhbHVlID0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A7Ci0JCSAgc2V0RGV2ZWxvcENsaWVudCh0cnVlKTsKLQkgIH0KLQotCSAgc2V0Q2xpZW50U2NhbGUodmFsdWUpOwotCSAgCSAgCi0JICBzZXRHcmFwaGljcyh2YWx1ZSk7Ci0JICBzaG93U3VtbWFyeSh2YWx1ZSA8IFNjZW5hcmlvQ29udGV4dC5XU19OT05FKTsKLQkgIHVwZGF0ZUZpZWxkcyh2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotCSAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLQkgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotICB7Ci0JICAvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY2xpZW50UnVudGltZUlkIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3MuCi0JICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKGdldFR5cGVSdW50aW1lU2VydmVyKCksIGdldENsaWVudFByb2plY3ROYW1lKCksIGdldENsaWVudENvbXBvbmVudFR5cGUoKSk7ICAgCi0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLSAgewotCSAgY2xpZW50Q29tcG9uZW50VHlwZV89IHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudENvbXBvbmVudFR5cGUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHByb2plY3ROYW1lXyA9IG5hbWU7ICAgICAgCi0JaExpbmtDbGllbnRQcm9qZWN0Xy5zZXRUZXh0KENMSUVOVF9QUk9KRUNUX1BSRUZJWCArICIgIiArIHByb2plY3ROYW1lXyk7CQotCWhMaW5rQ2xpZW50UHJvamVjdF8ucGFjayh0cnVlKTsgICAKLQlwYWNrSXQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0TmFtZSgpCi0gIHsgIAotCSAgaWYgKHByb2plY3ROYW1lXyA9PSBudWxsKQotCQkgIHJldHVybiAiIjsKLQkgIHJldHVybiBwcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZWFyUHJvamVjdE5hbWVfID0gbmFtZTsgIAotICAgIHJlZnJlc2hFQVJMaW5rKCk7Ci0gICAJCSAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoRUFSTGluaygpCi0gIHsKLQkgIGhMaW5rQ2xpZW50RUFSXy5zZXRWaXNpYmxlKG5lZWRFYXJfICYmIGdldEdlbmVyYXRlUHJveHkoKSk7Ci0JICBpZiAobmVlZEVhcl8pCi0JICB7ICAgIAkKLQkJICBoTGlua0NsaWVudEVBUl8uc2V0VGV4dChDTElFTlRfRUFSX1BSRUZJWCArICIgIiArIGVhclByb2plY3ROYW1lXyk7Ci0JCSAgaExpbmtDbGllbnRFQVJfLnBhY2sodHJ1ZSk7IAotCQkgIHBhY2tJdCgpOwotCSAgfSAgCi0gIH0KLQkgICAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotICB7Ci0JICBpZiAoZWFyUHJvamVjdE5hbWVfID09IG51bGwpCi0JCSAgcmV0dXJuICIiOwotICAgICByZXR1cm4gZWFyUHJvamVjdE5hbWVfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBiKQotICB7Ci0gICAgIG5lZWRFYXJfID0gYjsKLSAgICAgcmVmcmVzaEVBUkxpbmsoKTsKLSAgfSAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotICB7Ci0gICAgIHJldHVybiBuZWVkRWFyXzsKLSAgfSAKLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0JewotCQlyZXR1cm4gcGFyc2VyXzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKQotCXsKLQkJcGFyc2VyXyA9IHBhcnNlcjsJCQotCX0KLSAgCi0gICAgLy9mb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FibGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2cKLQlwdWJsaWMgdm9pZCBkaXNhYmxlTm9uUHJlZmVyZW5jZVdpZGdldHMoKQotCXsKLQkJaWYgKGhDb21wQ2xpZW50XyAhPSBudWxsKQotCQl7Ci0JCQloQ29tcENsaWVudF8uc2V0VmlzaWJsZShmYWxzZSk7CQkJCi0JCX0KLQl9Ci0JCi0JcHVibGljIGludCBnZXRWYWxpZGF0aW9uU3RhdGUoKQotCXsKLQkJcmV0dXJuIHZhbGlkYXRpb25TdGF0ZV87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25TdGF0ZShpbnQgc3RhdGUpCi0JewotCQl2YWxpZGF0aW9uU3RhdGVfID0gc3RhdGU7Ci0JfQotCQkKLQlwdWJsaWMgSVN0YXR1cyBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpIHsKLQotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCVN0cmluZyBydW50aW1lSWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IGdldENsaWVudFByb2plY3ROYW1lKCk7Ci0JCWJvb2xlYW4gbmVlZEVhciA9IGdldENsaWVudE5lZWRFQVIoKTsKLQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIHByb2plY3RUeXBlSWQgPSBnZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tNaXNzaW5nRmllbGRTdGF0dXModmFsaWRhdGlvblN0YXRlXywgbnVsbCwgbnVsbCwgcnVudGltZUlkLCBzZXJ2ZXJJZCwKLQkJCQlwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIHRydWUpOwotCQlyZXR1cm4gbWlzc2luZ0ZpZWxkU3RhdHVzOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoKSB7Ci0KLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotCQlib29sZWFuIG5lZWRFYXIgPSBnZXRDbGllbnROZWVkRUFSKCk7Ci0JCVN0cmluZyBlYXJQcm9qZWN0TmFtZSA9IGdldENsaWVudEVhclByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBwcm9qZWN0VHlwZUlkID0gZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpOwotCQkvLyBEZWZlY3QgMjE1MDg0IC0gbm8gbmVlZCB0byBwYXNzIGluaXRpYWwgcHJvamVjdCBmb3IgY2xpZW50IHNjZW5hcmlvCi0JCUlTdGF0dXMgcG9zc2libGVFcnJvclN0YXR1cyA9IHZhbFV0aWxzLmNoZWNrRXJyb3JTdGF0dXModmFsaWRhdGlvblN0YXRlXywgZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKSwgcHJvamVjdE5hbWUsIiIsIG5lZWRFYXIsIGVhclByb2plY3ROYW1lLCBwcm9qZWN0VHlwZUlkLCB0cnVlKTsKLQkJCXJldHVybiBwb3NzaWJsZUVycm9yU3RhdHVzOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrV2FybmluZ1N0YXR1cygpIHsKLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCi0JCWludCBzY2FsZVNldHRpbmcgPSBnZXRDbGllbnRHZW5lcmF0aW9uKCk7Ci0JCVN0cmluZyBzZXJ2ZXJJZCA9IGdldFR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySWQoKTsKLQkJSVN0YXR1cyB3YXJuaW5nU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tXYXJuaW5nU3RhdHVzKHZhbGlkYXRpb25TdGF0ZV8sIHNjYWxlU2V0dGluZywgc2VydmVySWQsIGdldFR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpLCB0cnVlKTsKLQkJcmV0dXJuIHdhcm5pbmdTdGF0dXM7Ci0JfQkKLQkKLQkKLSAgcHJpdmF0ZSBjbGFzcyBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLQl7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCSAgICBpbnQgb2xkQ2xpZW50U2NhbGVTZXR0aW5nID0gY2xpZW50U2NhbGVTZXR0aW5nXzsKLQkJCSAgICAJCQkJCi0JCQkJaW50IHNlbGVjdGlvbiA9IGNsaWVudFNjYWxlXy5nZXRTZWxlY3Rpb24oKTsKLQkJCQkKLQkJCQkvL1dBUk5JTkc6IE5vIHNjYWxlIGNoYW5nZSBzaG91bGQgYmUgZG9uZSBhZnRlciB0aGUgbGluZSBiZWxvdywgJ3NlbGVjdGlvbicgbWlnaHQgbm90IGhhdmUgdGhlIGNvcnJlY3QgdmFsdWUKLQkJCQlzZXRDbGllbnRHZW5lcmF0aW9uKHNlbGVjdGlvbik7Ci0JCQkJCi0JCQkJLy9XaGVuIGNsaWVudCBzbGlkZXIgbW92ZXMgb3V0IG9mIHRoZSAiV1NfTk9ORSIgc3RhdGUsIFZBTElEQVRFX0FMTCBzaG91bGQgYmUgZG9uZS4gCi0JCQkJLy9PdGhlcndpc2UsIFZBTElEQVRFX1NDQUxFX0NIQU5HRVMgaXMgc3VmZmljaWVudC4KLQkJCQlpZiAob2xkQ2xpZW50U2NhbGVTZXR0aW5nPT1TY2VuYXJpb0NvbnRleHQuV1NfTk9ORSAmJiBjbGllbnRTY2FsZVNldHRpbmdfIT1TY2VuYXJpb0NvbnRleHQuV1NfTk9ORSkKLQkJCQl7Ci0JCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gKG5ldyBWYWxpZGF0aW9uVXRpbHMoKSkuZ2V0TmV3VmFsaWRhdGlvblN0YXRlKHZhbGlkYXRpb25TdGF0ZV8sIFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9TQ0FMRV9DSEFOR0VTKTsJCi0JCQkJfQkJCQkKLQkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7IC8vdmFsaWRhdGUgdGhlIHBhZ2UKLQkJCX0KLQkJCi0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCXdpZGdldFNlbGVjdGVkKGUpOwotCQl9Ci0JfSAKLSAgCi0gIHByaXZhdGUgdm9pZCByZWZyZXNoU2VydmVyUnVudGltZVNlbGVjdGlvbigpCi0JewkJCi0JCS8vbmV3IHVwIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotCQlDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY2xpZW50UlREZWZhdWx0Q21kID0gbmV3IENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpOwotCQkKLQkJICAvL2NhbGwgc2V0dGVycyBvZiBuZXcgZGVmYXVsdGluZyBjb21tYW5kOgotCQkgIGNsaWVudFJURGVmYXVsdENtZC5zZXRDbGllbnRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkJICBjbGllbnRSVERlZmF1bHRDbWQuc2V0Q2xpZW50SW5pdGlhbFByb2plY3QoZ2V0UHJvamVjdCgpKTsJICAgICAgCi0JICAgICAgY2xpZW50UlREZWZhdWx0Q21kLnNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKGdldFR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkgIGNsaWVudFJURGVmYXVsdENtZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcihnZXRXZWJTZXJ2aWNlc1BhcnNlcigpKTsgICAgIAotCSAgICAgIGNsaWVudFJURGVmYXVsdENtZC5zZXRDbGllbnRFYXJQcm9qZWN0TmFtZShnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpKTsKLQkJICAJCSAgCi0JCSAgY2xpZW50UlREZWZhdWx0Q21kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JCSAgCi0JCSAgLy9wZXJmb3JtIG1hcHBpbmdzIGZyb20gdGhlIGRlZmF1bHRpbmcgY29tbWFuZCB0byB0aGUgcHJvamVjdCBzZXR0aW5ncy4uLgkKLQkJICBzZXRDbGllbnRQcm9qZWN0TmFtZShjbGllbnRSVERlZmF1bHRDbWQuZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoY2xpZW50UlREZWZhdWx0Q21kLmdldENsaWVudEVhclByb2plY3ROYW1lKCkpOwotCQkgIHNldENsaWVudENvbXBvbmVudFR5cGUoY2xpZW50UlREZWZhdWx0Q21kLmdldENsaWVudENvbXBvbmVudFR5cGUoKSk7Ci0JCSAgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoY2xpZW50UlREZWZhdWx0Q21kLmdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkpOwotICAgICAgICAgIHNldENsaWVudE5lZWRFQVIoY2xpZW50UlREZWZhdWx0Q21kLmdldENsaWVudE5lZWRFQVIoKSk7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9DbGllbnRXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9DbGllbnRXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZTI0NTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ2xpZW50V2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQ0MDggICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICogMjAwNjAyMDQgMTIxNjA1ICAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjEgMTE5MTExICAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjMgMTI5MDIwICAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDYgMTM1MzUwICAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQwNyAxMzU0MTUgICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNSAxMzgwNTIgICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTE3IDE0MTg4MCAgICBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MzAgICAxNDQzNTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcxNyAgIDE0NjMzMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwMiAgIDE4MDMwNCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA3MTAzMSAgIDE0MDUxOCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDUwNiAgIDIyNzg0OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRGlzYWJsZWQgIlJ1biBvbiBTZXJ2ZXIiIGNoZWNrYm94IGlzIGluIGNoZWNrZWQgc3RhdGUKLSAqIDIwMDgwNzE1ICAgMjQwNzIyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDYW5ub3Qgc2V0dXAgVENQL0lQIE1vbml0b3IgZm9yIHNvYXAxMiBlbmRwb2ludHMKLSAqIDIwMDgwNzIyICAgMjQwMjMxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkNoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5TY2VuYXJpb0NsZWFudXBDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uQ2xpZW50Um9vdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnRJbnN0YWxsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoRGVmYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5UZXN0RGVmYXVsdGluZ0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BDbGllbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JbnN0YWxsQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuUnVuQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3IuR2V0TW9uaXRvckNvbW1hbmQ7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwoteyAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRSb290Q29tbWFuZEZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7IAotCSAgLy9qdmggbWFwcGluZyBmb3IgaW5pdGlhbHNlbGVjdGlvbj8/Pz8KLQkgIAotICAgIC8vIEJlZm9yZSBDbGllbnRXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MgKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50R2VuZXJhdGlvbiIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gQWZ0ZXIgQ2xpZW50V2l6YXJkV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAvL2p2aCBhZGRlZC4uCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgICAgICAgCi0gICAgLy9qdmggLSByZXJvdXRlZCB0aGUgZGVmYXVsdGluZyBjb21tYW5kIHRvIHRoZSBDbGllbnRXaXphcmRXaWRnZXQgCi0gICAgLy8gQmVmb3JlIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50VHlwZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIAotICAgIC8vanZoIC0gcmVyb3V0ZWQgZnJvbSBDbGllbnRXaXphcmRXaWRnZXQgaW5zdGVhZCBvZiBydW50aW1lc2VydmVyd2lkZ2V0LSBhZGQgZ2V0dGVycyB0byBDbGllbnRXaXphcmRXaWRnZXQgZm9yIHRoZW0KLSAgICAvLyBBZnRlciBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgIAotICAgIC8vIEJlZm9yZSBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcgotICAgIC8vIGp2aCAtIHJlcm91dGVkIHRoZXNlIHRvIENsaWVudFdpemFyZFdpZGdldCAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZVVSSSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgCi0vKiAgICAvLyBBZnRlciBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcgotICAgIC8vanZoIC0gcmVyb3V0ZSB0aGVzZSBmcm9tIHRoZSBkaWFsb2cgdG8gQ2xpZW50V2l6YXJkV2lkZ2V0IC0gY2FsbCBzZXR0ZXJzIG9uIHRoZSBvdGhlciBkaWFsb2dzLi4uCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuY2xhc3MsICJXc2RsVVJJIiwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuY2xhc3MsICJQcm9qZWN0IiwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSovICAgIAotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MpOwotCQotICAgIC8vIEJlZm9yZSBDbGllbnQgVGVzdCB3aWRnZXQuCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcywgIkNhblJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLQotICAgIC8vIEFmdGVyIHRoZSBjbGllbnQgdGVzdCB3aWRnZXQgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJDYW5SdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0U2VydmljZSIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdElEIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJJc1Rlc3RXaWRnZXQiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgICAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRXaXphcmRXaWRnZXQiLCAKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1BST0pFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX0NMSUVOVCwKLQkJCQkgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCSAgICAgICAgewotCQkJCSAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkgICAgICAgICAgewotCQkJCSAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpZW50V2l6YXJkV2lkZ2V0KCk7Ci0JCQkJICAgICAgICAgIH0KLQkJCQkgICAgICAgIH0gKTsKLSAgICAKLSAgICAvL2p2aAotICAgIC8qd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfQ0xJRU5UX1JVTlRJTUVfU0VMRUNUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT04sCi0JCQkJCQluZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkJCQkJCSAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JCQkJCQkgIHsKLQkJCQkJCSAgICByZXR1cm4gbmV3IENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCQkJCSAgfQotCQkJCQkJfSApOyovCi0gICAgCi0gICAgLy9qdmgKLSAgICAvKndpZGdldFJlZ2lzdHJ5LmFkZCggIldTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TRUxFQ1RJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NFTEVDVElPTiwKLQkJICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotCQkgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJICAgICAgICAgICAgICAgICAgewotCQkgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIoKTsKLQkJICAgICAgICAgICAgICAgICAgfQotCQkgICAgICAgICAgICAgICAgfSApOyovCi0gICAgCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQ2xpZW50VGVzdFdpZGdldCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfU0FNUExFLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TQU1QTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsaWVudFRlc3RXaWRnZXQoKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci0gIHsKLSAgICBwdWJsaWMgQ2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgICAgCi0gICAgICAvL2FkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2hlY2tGb3JNaXNzaW5nRmlsZXMoKSwgIiIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCh0cnVlKSwgIiIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsgLy9qdmggbW92ZWQgdGhpcyB1cAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsgIC8vanZoIG1vdmVkIHRoaXMgdXAgICAgICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCAiQ2xpZW50V2l6YXJkV2lkZ2V0IiApICk7Ci0JICAvL2FkZCggbmV3IFRlc3RDb21tYW5kRmFjdG9yeUZyYWdtZW50KCkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIAotICAgICAgLy9hZGQoIG5ldyBUZXN0Q29tbWFuZEZhY3RvcnlGcmFnbWVudDIoKSApOwotICAgICAgLy9hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCB0cnVlICksICIiKSk7Ci0gICAgICAvL2FkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENsaWVudFNlcnZlckRlcGxveWFibGVDb25maWdDb21tYW5kKGZhbHNlKSwgIiIpKTsgLy9Ob3RlOiBhZGRlZCBoZXJlIGZvciBjbGllbnQgICAgICAKLSAgICAgIC8vYWRkKCBuZXcgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQoKSApOwotCSAgYWRkKCBuZXcgQ2xpZW50Um9vdEZyYWdtZW50KCkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudChuZXcgR2V0TW9uaXRvckNvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KG5ldyBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50KCksIiIpKTsKLSAgICAgIGFkZCggbmV3IENsaWVudFRlc3RGcmFnbWVudCggIkNsaWVudFRlc3RXaWRnZXQiKSApOyAKLSAgICAgIGFkZChuZXcgRmluaXNoRnJhZ21lbnQoKSk7Ci0gICAgICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCgpLCAiIiApKTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICAvL01hcCBTZWxlY3Rpb25Db21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxJbml0aWFsU2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgR2V0TW9uaXRvckNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVudGltZTJDbGllbnRUeXBlcyIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgLy8gTWFwIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZVVSSSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBuZXcgRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyKCkpOwotICAgICAgICAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5XU0lMIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NpbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vanZoIC0gcmVyb3V0ZWQgdGhlc2UgdG8gdGhlIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlVVJJIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBuZXcgRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyKCkpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZAotICAgICAgLy9qdmggLSByZXJvdXRlZCB0aGVzZSBmcm9tIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgR2V0TW9uaXRvckNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIEdldE1vbml0b3JDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCi0gICAgICAKLSAgICAgIC8vanZoIC0gYWRkIGNvZGUgdG8gd2lkZ2V0IHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHNldHMgaGFwcGVuIGFuZCBkZWZhdWx0aW5nIG9jY3VycyBhZ2FpbiBhZnRlciBvYmplY3Qgc2VsZWN0aW9uCi0gICAgICAvKmRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ki8KLSAgICAgIAotCSAgLy8gU2V0dXAgdGhlIFByZUNsaWVudERldmVsb3BDb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgbnVsbCk7ICAgICAgCi0KLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsJCQkJCQkKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdFR5cGUiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIAotCQkJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlQ2xpZW50IiwgbnVsbCApOwotCQkJCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICAgICAgIAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MsIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBudWxsKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm94eUJlYW4iLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsgICAgICAKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm94eUJlYW4iLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlFbmRwb2ludCIsIEdldE1vbml0b3JDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJDYW5HZW5lcmF0ZVByb3h5IiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJDYW5HZW5lcmF0ZVByb3h5IiwgRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXRFbmRwb2ludE1ldGhvZCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0KLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MgKTsKLQkgIAotICAgICAgLy8gR2V0TW9uaXRvckNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEdldE1vbml0b3JDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnRzIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIC8vIE1BUCBwb3N0IHNlcnZlciBjb25maWcgY2FsbCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkVhclByb2plY3ROYW1lIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkV4aXN0aW5nU2VydmVySWQiLCBudWxsKTsKLSAgICAgIAotICAgICAgLy8gTWFwIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlJ1bkNsaWVudFRlc3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAgICAgICAKLSAgICAgIC8vTWFwcGluZ3MgdG8gZW5hYmxlIHBlZWstYWhlYWQgZm9yIFBhZ2UgMyBvZiB0aGUgY2xpZW50IHdpemFyZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzLCAiUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsgICAgICAKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnQ2xpZW50SGFuZGxlcnNXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YjNmYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnQ2xpZW50SGFuZGxlcnNXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0ICAgMTM0OTEzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqIDIwMDYwNTE3ICAgMTQyMzM5IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5PcGVuSmF2YUVkaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi0vKioKLSAqIAotICogSGFuZGxlciBDb25maWd1cmF0aW9uIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUKLSAqIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgQ29uZmlnQ2xpZW50SGFuZGxlcnNXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcgCi17Ci0gIAotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSB7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQiLCAKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfQ0xJRU5UX0hETFJfQ09ORklHLCAKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19DTElFTlRfSERMUl9DT05GSUcsIAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgewotCi0gICAgICAJcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIHsKLSAgICAgIAkgIHJldHVybiBuZXcgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldCgpOwotICAgICAgCX0KLSAgICB9KTsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotICAgIAotICAgIC8vIHdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIlNlcnZpY2VSZWZOYW1lIiwgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gb3V0cHV0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiQ2xpZW50UHJvamVjdCIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIiLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIGdlbiBza2VsZXRvbgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MpOwotCi0gICAgLy8gb3BlbiBpbiBlZGl0b3IKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIlByb2plY3QiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcywiQ2xhc3NOYW1lcyIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzLCJJc0VuYWJsZWQiLCBudWxsKTsKLSAgICAKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgewotCi0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5I2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKSB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkgewotCi0gICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpIHsKLQotICAgICAgICByZXR1cm4gbmV3IENsaWVudEhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50SGFuZGxlcnNDb25maWdDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50ewotICAgCi0gICAgcHVibGljIENsaWVudEhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50KCkKLSAgICB7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggIkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQiICkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgT3BlbkphdmFFZGl0b3JDb21tYW5kKCksICIiKSk7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gICAgewotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiV3NTZXJ2aWNlUmVmcyIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJDbGllbnRQcm9qZWN0IiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICB9Ci0gCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9Db25maWdTZXJ2aWNlSGFuZGxlcnNXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9Db25maWdTZXJ2aWNlSGFuZGxlcnNXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YjdjN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5PcGVuSmF2YUVkaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi0vKioKLSAqIAotICogSGFuZGxlciBDb25maWd1cmF0aW9uIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUKLSAqIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIHsKLSAgCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpIHsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQiLCAKLSAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfU0VSVklDRV9IRExSX0NPTkZJRywgCi0gICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfU0VSVklDRV9IRExSX0NPTkZJRywgCi0gICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSB7Ci0KLSAgICAgIAlwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgewotICAgICAgCSAgcmV0dXJuIG5ldyBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldCgpOwotICAgICAgCX0KLSAgICB9KTsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotICAgIAotCS8vIHdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJEZXNjcmlwdGlvbk5hbWUiLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gb3V0cHV0IGNvbW1hbmQgKGFkZHMvcmVtb3ZlcyBmcm9tIG1vZGVsKQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc011bHRpcGxlU2VsZWN0aW9uIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIldzZGRSZXNvdXJjZSIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAKLQotICAgIC8vIGdlbiBza2VsZXRvbiBjb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLSAKLSAgICAvLyBvcGVuIEphdmEgZWRpdG9yICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIlByb2plY3QiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcywiQ2xhc3NOYW1lcyIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcywiSXNFbmFibGVkIiwgbnVsbCk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIHsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpIHsKLQotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKSB7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlSGFuZGxlcnNDb25maWdDb21tYW5kRnJhZ21lbnQoKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBTZXJ2aWNlSGFuZGxlcnNDb25maWdDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50ewotICAgCi0gICAgcHVibGljIFNlcnZpY2VIYW5kbGVyc0NvbmZpZ0NvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCAiQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQiICkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IE9wZW5KYXZhRWRpdG9yQ29tbWFuZCgpLCAiIikpOwotCi0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gICAgewotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkZFJlc291cmNlIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIAotICAgIH0KLSAKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlndXJlSGFuZGxlcnNXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTY5YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlndXJlSGFuZGxlcnNXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLk9wZW5KYXZhRWRpdG9yQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5Db25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgQ29uZmlndXJlSGFuZGxlcnNXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcgewotCi0KLSAgcHVibGljIENvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZygpIHsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpIHsKLQotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgSGFuZGxlcnNDb21tYW5kRnJhZ21lbnQoKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpLAotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotCi0gICAgLy8gTWFwIGNsaWVudC1zaWRlIHdpZGdldHMgdG8gY29tbWFuZHMKLSAgICAvLyB3aWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJTZXJ2aWNlUmVmTmFtZSIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIG91dHB1dAotCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIiLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIGdlbiBza2VsZXRvbgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MpOwotCi0gICAgLy8gb3BlbiBpbiBlZGl0b3IKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MsIklzRW5hYmxlZCIsIG51bGwpOwotICAKLSAKLSAgICAvLyBNYXAgc2VydmljZS1zaWRlIHdpZGdldHMgdG8gY29tbWFuZHMKLSAgICAvLyB3aWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiRGVzY3JpcHRpb25OYW1lIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIG91dHB1dCBjb21tYW5kIChhZGRzL3JlbW92ZXMgZnJvbSBtb2RlbCkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIAotCi0gICAgLy8gZ2VuIHNrZWxldG9uIGNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MpOwotIAotICAgIC8vIG9wZW4gSmF2YSBlZGl0b3IgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MsIklzRW5hYmxlZCIsIG51bGwpOwotCi0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSB7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IiwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfU0VSVklDRV9IRExSX0NPTkZJRywgCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1NFUlZJQ0VfSERMUl9DT05GSUcsIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldCIsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX0NMSUVOVF9IRExSX0NPTkZJRywgCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX0NMSUVOVF9IRExSX0NPTkZJRywgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpIHsKLQotICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgSGFuZGxlcnNDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IHsKLQotICAgIHB1YmxpYyBIYW5kbGVyc0NvbW1hbmRGcmFnbWVudCgpIHsKLQotICAgICAgYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotCi0gICAgICBhZGQobmV3IFNlcnZpY2VIYW5kbGVyc0ZyYWdtZW50KCkpOwotICAgICAgYWRkKG5ldyBDbGllbnRIYW5kbGVyc0ZyYWdtZW50KCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSB7Ci0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc0NsaWVudEhhbmRsZXIiLCBDbGllbnRIYW5kbGVyc0ZyYWdtZW50LmNsYXNzLCAiQ2xpZW50SGFuZGxlcnNFbmFibGVkIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhIYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNTZXJ2aWNlSGFuZGxlciIsIFNlcnZpY2VIYW5kbGVyc0ZyYWdtZW50LmNsYXNzLCAiU2VydmljZUhhbmRsZXJzRW5hYmxlZCIsIG51bGwpOwotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJJc011bHRpcGxlU2VsZWN0aW9uIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcywiUHJvamVjdCIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIkNsYXNzTmFtZXMiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJXc2RkUmVzb3VyY2UiLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcywiUHJvamVjdCIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIkNsYXNzTmFtZXMiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOyAgICAgIAotCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIHsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENsaWVudEhhbmRsZXJzRnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQgewotCi0gICAgYm9vbGVhbiBpc0NsaWVudF8gPSBmYWxzZTsKLQotICAgIHB1YmxpYyBDbGllbnRIYW5kbGVyc0ZyYWdtZW50KCkgewotICAgICAgc2V0Q29uZGl0aW9uKG5ldyBDb25kaXRpb24oKSB7Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKSB7Ci0gICAgICAgICAgcmV0dXJuIGlzQ2xpZW50XzsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICAgIFNlcXVlbmNlRnJhZ21lbnQgY2xpZW50SGFuZGxlcnNSb290RnJhZ21lbnQgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotCi0gICAgICBjbGllbnRIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0KLSAgICAgIGNsaWVudEhhbmRsZXJzUm9vdEZyYWdtZW50LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQiKSk7Ci0gICAgICBjbGllbnRIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGNsaWVudEhhbmRsZXJzUm9vdEZyYWdtZW50LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZCgpLCAiIikpOwotCi0gICAgICBzZXRUcnVlRnJhZ21lbnQoY2xpZW50SGFuZGxlcnNSb290RnJhZ21lbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENsaWVudEhhbmRsZXJzRW5hYmxlZChib29sZWFuIGlzQ2xpZW50KSB7Ci0gICAgICBpc0NsaWVudF8gPSBpc0NsaWVudDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIChub24tSmF2YWRvYykKLSAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLQotICAgIH0KLQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBTZXJ2aWNlSGFuZGxlcnNGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudCB7Ci0KLSAgICBib29sZWFuIGlzU2VydmljZV8gPSBmYWxzZTsKLQotICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcnNGcmFnbWVudCgpIHsKLSAgICAgIHNldENvbmRpdGlvbihuZXcgQ29uZGl0aW9uKCkgewotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkgewotICAgICAgICAgIHJldHVybiBpc1NlcnZpY2VfOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgU2VxdWVuY2VGcmFnbWVudCBzZXJ2aWNlSGFuZGxlcnNSb290RnJhZ21lbnQgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgc2VydmljZUhhbmRsZXJzUm9vdEZyYWdtZW50LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0KLSAgICAgIFNlcXVlbmNlRnJhZ21lbnQgc2VydmljZUhhbmRsZXJzRnJhZ21lbnQgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgc2VydmljZUhhbmRsZXJzRnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQiKSk7Ci0gICAgICBzZXJ2aWNlSGFuZGxlcnNGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gICAgICBzZXJ2aWNlSGFuZGxlcnNGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQoKSwgIiIpKTsKLQotICAgICAgc2VydmljZUhhbmRsZXJzUm9vdEZyYWdtZW50LmFkZChzZXJ2aWNlSGFuZGxlcnNGcmFnbWVudCk7Ci0KLSAgICAgIHNldFRydWVGcmFnbWVudChzZXJ2aWNlSGFuZGxlcnNSb290RnJhZ21lbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VIYW5kbGVyc0VuYWJsZWQoYm9vbGVhbiBpc1NlcnZpY2UpIHsKLSAgICAgIGlzU2VydmljZV8gPSBpc1NlcnZpY2U7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAobm9uLUphdmFkb2MpCi0gICAgICogCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSB7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RkUmVzb3VyY2UiLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLQotICAgIH0KLQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvR2VuU2FtcGxlV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvR2VuU2FtcGxlV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzU3ZTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0dlblNhbXBsZVdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA4ICAgMTQ1NTI5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcxNyAgIDE0NjMzMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNzA1MTYgICAxODYyMzMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwMzMxICAgMjI0OTUzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNDE1ICAgMjI3MjM3IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNDI1ICAgMjIxMjMyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNjE2ICAgMjM3Mjk4IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNjE5ICAgMjM3Nzk3IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDkwMzI0ICAgMjQ3NTM1IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgV3Jvbmcgc2VydmVyIGluc3RhbmNlKHMpIGlzIGNob3NlbiBkdXJpbmcgSkFYLVJQQyBzYW1wbGUgZ2VuZXJhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoRGVmYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5UZXN0RGVmYXVsdGluZ0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuVGVzdFdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLQotcHVibGljIGNsYXNzIEdlblNhbXBsZVdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwoteyAgCi0KLQkKLQkKLS8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHZW5TYW1wbGVSb290Q29tbWFuZEZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRMZWdpdFRlc3RGYWNpbGl0eSgpCi0gIHsKLSAgIAlTY2VuYXJpb0NvbnRleHQgc2NlbmFyaW9Db250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpLmNvcHkoKTsKLSAgCVN0cmluZ1tdIHRlc3RUeXBlcyA9IHNjZW5hcmlvQ29udGV4dC5nZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCk7CSAgCi0gIAlMaXN0IG5ld1Rlc3RUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0gIAlmb3IoaW50IGkgPSAwO2k8dGVzdFR5cGVzLmxlbmd0aDtpKyspewotICAJCVdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIGV4dGVuc2lvbiA9Ci0gIAkJCShXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpCi0gIAkJCS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSh0ZXN0VHlwZXNbaV0pOwotCQkgIAotICAJCWlmKGV4dGVuc2lvbi50ZXN0SmF2YVByb3h5KCkpewotICAJCQlib29sZWFuIGRlZmF1bHRKYXhycGMgPSBleHRlbnNpb24uaXNEZWZhdWx0SkFYUlBDKCk7Ci0gIAkJCWlmKGRlZmF1bHRKYXhycGMpewotICAJCQkJbmV3VGVzdFR5cGVzLmFkZCh0ZXN0VHlwZXNbaV0pOyAKLSAgICAJCQl9Ci0gIAkJfQotICAJfQkKLSAgCVN0cmluZ1tdIHRlbXBBcnJheSA9IG5ldyBTdHJpbmdbbmV3VGVzdFR5cGVzLnNpemUoKV07Ci0gIAlyZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3QoKFN0cmluZ1tdKSBuZXdUZXN0VHlwZXMudG9BcnJheSh0ZW1wQXJyYXkpLCAwKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgeyAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gQmVmb3JlIENsaWVudCBUZXN0IHdpZGdldC4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJDYW5SdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJJc1dlYlByb2plY3QiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIlBvcHVwIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0KLSAgICAvLyBBZnRlciB0aGUgY2xpZW50IHRlc3Qgd2lkZ2V0ICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSXNUZXN0V2lkZ2V0IixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgICAgICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkNsaWVudFRlc3RXaWRnZXQiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NBTVBMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0FNUExFLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRUZXN0V2lkZ2V0KCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBJbml0aWFsaXplUHJveHlDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLSAgewotICAgIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLQlwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyXzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLS8vCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyUHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBlYXJfOwotCXByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2RsVVJJXzsKLQlwcml2YXRlIGJvb2xlYW4gY2FuUnVuVGVzdENsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIGlzV2ViUHJvamVjdCA9IGZhbHNlOwotICAgIAotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotCXsgICAgCi0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CQotCi0JICAgIC8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLQkgICAgaW50IGluZGV4ID0gbW9kdWxlXy5pbmRleE9mKCIvIik7Ci0JICAgIGlmIChpbmRleCE9LTEpewotCSAgICAJcHJvamVjdF8gPSBtb2R1bGVfLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgCW1vZHVsZV8gPSBtb2R1bGVfLnN1YnN0cmluZyhpbmRleCsxKTsKLQkgICAgfQotCi0JICAgIAotCSAgICBpZiAoZWFyXyE9bnVsbCAmJiBlYXJfLmxlbmd0aCgpPjApCi0JICAgIHsKLQkgICAgCWludCBlYXJJbmRleCA9IGVhcl8uaW5kZXhPZigiLyIpOwotCSAgICAJaWYgKGVhckluZGV4IT0tMSkgewotLy8JICAgIAkJZWFyUHJvamVjdF8gPSBlYXJfLnN1YnN0cmluZygwLGVhckluZGV4KTsKLQkgICAgCQllYXJfID0gZWFyXy5zdWJzdHJpbmcoZWFySW5kZXgrMSk7Ci0JICAgIAl9Ci0JICAgIH0gICAgCi0JICAKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0Xyk7Ci0JICAgIFdlYlNlcnZpY2VDbGllbnRJbmZvIGNsaWVudEluZm8gPSBuZXcgV2ViU2VydmljZUNsaWVudEluZm8oKTsKLQkgICAgY2xpZW50SW5mby5zZXRJbXBsVVJMKGdldFByb3h5QmVhbigpKTsKLQkgICAgLy9jbGllbnRJbmZvLnNldEoyZWVMZXZlbChqMmVlTGV2ZWxfKTsKLQkgICAgY2xpZW50SW5mby5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCSAgCWNsaWVudEluZm8uc2V0U2VydmVySW5zdGFuY2VJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgIAljbGllbnRJbmZvLnNldFN0YXRlKFdlYlNlcnZpY2VTdGF0ZS5VTktOT1dOX0xJVEVSQUwpOwotCSAgCWNsaWVudEluZm8uc2V0V2ViU2VydmljZVJ1bnRpbWVJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0UnVudGltZUlkKCkpOwotCSAgCWNsaWVudEluZm8uc2V0V3NkbFVSTCh3c2RsVVJJXyk7Ci0JICAJLyoKLQkgIAlpZiAoY2xpZW50SW5mby5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk9PW51bGwpCi0JICAJewotCSAgCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNyZWF0ZVNlcnZlckNvbW1hbmQgPSBuZXcgQ3JlYXRlU2VydmVyQ29tbWFuZCgpOwotCSAgCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlckZhY3RvcnlpZChjbGllbnRJbmZvLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkgIAkJY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAJCUlTdGF0dXMgY3JlYXRlU2VydmVyU3RhdHVzID0gY3JlYXRlU2VydmVyQ29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0JICAJCWlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLk9LKXsKLQkgIAkJCWNsaWVudEluZm8uc2V0U2VydmVySW5zdGFuY2VJZChjcmVhdGVTZXJ2ZXJDb21tYW5kLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JICAJCQljbGllbnRJbmZvLnNldFNlcnZlckNyZWF0ZWQodHJ1ZSk7Ci0JICAJCQljYW5SdW5UZXN0Q2xpZW50XyA9IHRydWU7Ci0JICAJCX0KLQkgIAkJZWxzZSBpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUil7Ci0JICAJCQlpZihKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdCkpCi0JICAJCQkJY2FuUnVuVGVzdENsaWVudF8gPSBmYWxzZTsKLQkgIAkJCWVsc2UgCi0JICAJCQkJY2FuUnVuVGVzdENsaWVudF8gPSB0cnVlOwotCSAgCQl9ICAgICAgICAgICAgICAgCi0JICAJfQotCSAgCWVsc2UgewotCSAgCQljYW5SdW5UZXN0Q2xpZW50XyA9IHRydWU7Ci0JICAJfSovCi0JICAJCi0JICAJY2FuUnVuVGVzdENsaWVudF8gPSB0cnVlOwotCSAgCUlQcm9qZWN0W10gZWFycHJvamVjdCA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldFJlZmVyZW5jaW5nRUFSUHJvamVjdHMocHJvamVjdCk7Ci0JICAJYm9vbGVhbiBlYXJOdWxsID0gZmFsc2U7Ci0JICAJaWYgKGVhcnByb2plY3QubGVuZ3RoPDEpIGVhck51bGwgPSB0cnVlOwotCSAgCQkKLQkgIAlib29sZWFuIGoyZWVQcm9qZWN0ID0gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNKRUVQcm9qZWN0KHByb2plY3QpOwotCSAgCWlmKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChwcm9qZWN0KSkKLQkgIAkJaXNXZWJQcm9qZWN0ID0gdHJ1ZTsKLQkgIAkKLQkgIAlpZiAoajJlZVByb2plY3QgJiYgZWFyTnVsbCkKLQkgIAkJY2FuUnVuVGVzdENsaWVudF8gPSBmYWxzZTsKLQkgIC8qCQkgIAkKLQkJaWYgKCFlYXJOdWxsICYmIGNsaWVudEluZm8uZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGwpewotCSAgCQkKLQkgIAkJQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JICAJCWNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZChjbGllbnRJbmZvLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JICAJCWNvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0Xyk7Ci0JICAJCWNvbW1hbmQuc2V0TW9kdWxlKG1vZHVsZV8pOwotCSAgCQljb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgIAkJc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICAJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgCQl7Ci0JICAJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICAJCX0gICAgIAotCSAgCX0qLwotCSAgCXdlYlNlcnZpY2VDbGllbnRfID0gbmV3IFRlc3RXZWJTZXJ2aWNlQ2xpZW50KGNsaWVudEluZm8pOwotCSAgCXJldHVybiBzdGF0dXM7Ci0gIAl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0UG9wdXAoKXsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkKLSAgICB7Ci0JCVN0cmluZyBwcm94eUJlYW4gPSAiIjsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgCUlSZXNvdXJjZSByZXNvdXJjZSAgICA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKCBzZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpICk7Ci0gICAgICAgIAlTdHJpbmcgICAgYmVhblBhY2thZ2UgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKCByZXNvdXJjZS5nZXRGdWxsUGF0aCgpICk7Ci0gICAgICAgIAotICAgICAgICAJaWYoIGJlYW5QYWNrYWdlPT1udWxsICkKLSAgICAgICAgCQliZWFuUGFja2FnZSA9ICIiOwotICAgICAgICAJZWxzZQotICAgICAgICAJCWJlYW5QYWNrYWdlID0gYmVhblBhY2thZ2UgKyAiLiI7Ci0KLSAgICAgICAgCXByb3h5QmVhbiA9IGJlYW5QYWNrYWdlICsgcmVzb3VyY2UuZ2V0TmFtZSgpOwotCi0gICAgICAgIAlpZiggcHJveHlCZWFuLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgcHJveHlCZWFuLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIpKSAKLSAgICAgICAgCXsKLSAgICAgICAgCQlwcm94eUJlYW4gPSBwcm94eUJlYW4uc3Vic3RyaW5nKDAscHJveHlCZWFuLmxhc3RJbmRleE9mKCcuJykpOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsgICAgICAgIAotICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgcmV0dXJuIHByb3h5QmVhbjsKLSAgICB9Ci0gICAgCi0JcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2VDbGllbnQoKQotCXsKLQkgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50XzsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2FuUnVuVGVzdENsaWVudCgpewotCQlyZXR1cm4gY2FuUnVuVGVzdENsaWVudF87Ci0JfQotCQotICAgIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRDYW5HZW5lcmF0ZVByb3h5KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFRlc3RGYWNpbGl0eSgpCi0gICAgewotICAgIAlyZXR1cm4gZ2V0TGVnaXRUZXN0RmFjaWxpdHkoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0SXNXZWJQcm9qZWN0KCkKLSAgICB7Ci0gICAgCXJldHVybiBpc1dlYlByb2plY3Q7Ci0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlciApCi0JewotICAgICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXI7ICAKLQl9Ci0JICAKLQlwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotCXsKLQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0JfQotCSAgCi0JcHVibGljIHZvaWQgc2V0TW9kdWxlVHlwZSggU3RyaW5nIG1vZHVsZVR5cGUpCi0JewotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQgKQotCXsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbiggSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIEdlblNhbXBsZVJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci0gIHsKLSAgICBwdWJsaWMgR2VuU2FtcGxlUm9vdENvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCh0cnVlKSwgIiIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCB0cnVlICksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEluaXRpYWxpemVQcm94eUNvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50KCksIiIpKTsKLSAgICAgIGFkZCggbmV3IENsaWVudFRlc3RGcmFnbWVudCggIkNsaWVudFRlc3RXaWRnZXQiKSApOyAKLSAgICAgIGFkZCggbmV3IEZpbmlzaEZyYWdtZW50KCkgKTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICAvL01hcCBTZWxlY3Rpb25Db21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcyApOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBuZXcgRm9yY2VUcnVlKCkgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbldTSUwiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2lsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZVVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKSk7Ci0gICAgICAgICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyApOyAgICAgCi0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MsIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlckluc3RhbmNlSWQiLCBGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0VHlwZSIsIEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcyApOwotCSAgCi0JICAKLQkgIAotCSAgCi0gICAgICAvLyBNYXAgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VDbGllbnQiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOyAgICAgIAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAgICAgIAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotCSAgCi0gICAgICAvLyBNQVAgcG9zdCBzZXJ2ZXIgY29uZmlnIGNhbGwgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFQVJQcm9qZWN0TmFtZSIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkV4aXN0aW5nU2VydmVySWQiLCBudWxsKTsKLSAgICAgICAgICAgIAotICAgICAgCi0gICAgICAvLyBNYXAgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBGb3JjZVRydWUgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotICB7Ci0gICAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKSAKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9JbXBvcnRXU0lMV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvSW1wb3J0V1NJTFdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3ZWYzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9JbXBvcnRXU0lMV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkltcG9ydFdTSUxXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWwuQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNlbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0lMV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHB1YmxpYyBJbXBvcnRXU0lMV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkltcG9ydFdTSUxXaWRnZXQiKSk7Ci0gICAgICAgICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEFkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZCgpLCAiIikpOwotICAgICAgICAgICAgICAgcmV0dXJuIHJvb3Q7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7ICAgIAotICAgIC8vIEltcG9ydFdTSUxXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIEltcG9ydFdTSUxXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIEFkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEltcG9ydFdTSUxXaWRnZXQuY2xhc3MsICJHZW5XU0lMQXJndW1lbnRzIiwgQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kLmNsYXNzLCAiQXJncyIsIG51bGwpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkltcG9ydFdTSUxXaWRnZXQiLCAKLSAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5USVRMRV9XU0lMX0lNUE9SVCwKLSAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ERVNDX1dTSUxfSU1QT1JULAotICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBJbXBvcnRXU0lMV2lkZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9JbXBvcnRXU1dpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0ltcG9ydFdTV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTVjZDQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0ltcG9ydFdTV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5QdWJsaXNoV1NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotCi0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU1dpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5ICAgY2FuRmluaXNoUmVnaXN0cnk7Ci0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkgICAgICB3aWRnZXRSZWdpc3RyeTsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0gIHByaXZhdGUgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnOwotCi0gIHB1YmxpYyBJbXBvcnRXU1dpZGdldEJpbmRpbmcoKQotICB7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnID0gbmV3IFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50KCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBTZXF1ZW5jZUZyYWdtZW50IHJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJXU0ltcG9ydCIpKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyk7Ci0gICAgICAgICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKSwgIiIpKTsKLSAgICAgICAgICAgICAgIHJldHVybiByb290OyAgCi0gICAgICAgICAgICAgfQotICAgICAgICAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5ID0gY2FuRmluaXNoUmVnaXN0cnk7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyQ2FuRmluaXNoKHRoaXMuY2FuRmluaXNoUmVnaXN0cnkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5kYXRhTWFwcGluZ1JlZ2lzdHJ5ID0gZGF0YVJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckRhdGFNYXBwaW5ncyh0aGlzLmRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAgIAotICAgIC8vIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIlB1Ymxpc2hUb1ByaXZhdGVVRERJIiwgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQuY2xhc3MpOwotICAgIAotICAgIC8vIExhdW5jaFdlYlNlcnZpY2VzRXhwbG9yZXJDb21tYW5kCi0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIkZvcmNlTGF1bmNoT3V0c2lkZUlERSIsIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJMYXVuY2hPcHRpb25zIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLndpZGdldFJlZ2lzdHJ5ID0gd2lkZ2V0UmVnaXN0cnk7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3ModGhpcy53aWRnZXRSZWdpc3RyeSk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIldTSW1wb3J0IiwgCi0gICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfRklORCwKLSAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX0ZJTkQsCi0gICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbmV3IFB1Ymxpc2hXU1dpZGdldChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIwYmM4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgxOCAgIDE1NDQwMiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgzMCAgIDE1MTA5MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgQ2xpZW50IHNpZGUgc3RpbGwgZW5hYmxlZCB3aGVuIHRoZXJlJ3Mgb25seSBzdHViIHNlcnZlcgotICogMjAwODAyMDUgICAxNzAxNDEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNTA2ICAgMjI3ODQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBEaXNhYmxlZCAiUnVuIG9uIFNlcnZlciIgY2hlY2tib3ggaXMgaW4gY2hlY2tlZCBzdGF0ZQotICogMjAwODA3MjkgICAyNDEyNzUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgTm8gVmFsaWRhdGlvbiBlcnJvciBnZW5lcmF0aW5nIFdlYiBTZXJ2aWNlIGNsaWVudCBpZiBkaWFsb2cgaGlkZGVuCi0gKiAyMDA5MDgwMyAgIDI4MzMxMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBBTlQgQ2xpZW50IGdlbi0gbWVzc2FnZSBtaXNzaW5nIHNlcnZlciBuYW1lIHN1YnN0LiB2YXJpYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5WYWxpZGF0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIC8vIENsaWVudFdpemFyZFdpZGdldAotCQotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGV2ZWxvcENsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBhc3NlbWJsZUNsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXBsb3lDbGllbnRfOwotCQotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyICAgIGNsaWVudElkc187Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgY2xpZW50UnVudGltZUlkXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICB0ZXN0U2VydmljZTsKLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBpbnN0YWxsQ2xpZW50OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIHN0YXJ0Q2xpZW50OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIHJ1blRlc3RDbGllbnQ7Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgICAgcmVzb3VyY2VDb250ZXh0OwotICAKLSAgLy8gQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldAotICAvL3ByaXZhdGUgU2VsZWN0aW9uTGlzdENob2ljZXMgY2xpZW50Q2hvaWNlc187Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICAvL3ByaXZhdGUgU3RyaW5nIGNsaWVudENvbXBvbmVudE5hbWVfOwotICAvL3ByaXZhdGUgU3RyaW5nIGNsaWVudEVhckNvbXBvbmVudE5hbWVfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRDb21wb25lbnRUeXBlXzsKLSAgLy9wcml2YXRlIFN0cmluZyBqMmVlVmVyc2lvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudE5lZWRFQVJfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlckZhY3RvcnlJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXzsKLSAgCi0gIC8vIFdTRExTZWxlY3Rpb25XaWRnZXQKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5XU0lMOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzaWxVUkk7Ci0gIAotICAvLyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZAotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICAKLSAgLy8gV1NETFNlbGVjdGlvblRyZWVXaWRnZXQKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2RsVVJJOwotICAKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBpc0NsaWVudFNjZW5hcmlvXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5Qcm94eV8gPSB0cnVlOwotICBwcml2YXRlIFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgCi0gIC8vU2VydmVyRGVwbG95YWJsZUNvbmZpZ3VyYXRpb25Db21tYW5kCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RJZF87Ci0gIAotICBwdWJsaWMgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpbyApCi0gIHsKLSAgICBpc0NsaWVudFNjZW5hcmlvXyA9IGlzQ2xpZW50U2NlbmFyaW87Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgY29tbWFuZCBpcyBydW5uaW5nIGluIHRoZSBjbGllbnQgd2l6YXJkIGFuZAotICAgKiBmYWxzZSBpZiB0aGlzIGNvbW1hbmQgaXMgcnVubmluZyBpbiB0aGUgY3JlYXRlIHdlYiBzZXJ2aWNlIHdpemFyZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldElzQ2xpZW50U2NlbmFyaW8oKQotICB7Ci0gICAgcmV0dXJuIGlzQ2xpZW50U2NlbmFyaW9fOyAKLSAgfQotICAKLSAgLyoKLSAgcHVibGljIHZvaWQgc2V0UnVudGltZTJDbGllbnRUeXBlcyggU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyApCi0gIHsKLSAgICBjbGllbnRDaG9pY2VzXyA9IGNob2ljZXM7ICAKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBnZXRSdW50aW1lMkNsaWVudFR5cGVzKCkKLSAgewotICAgIHJldHVybiBjbGllbnRDaG9pY2VzXzsgIAotICB9Ci0gICovCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpCi0gIHsKLSAgICBjbGllbnRJZHNfID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0JaWYgKGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpPT1udWxsIHx8IGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpLmxlbmd0aCgpPT0wKQotCXsKLQkJLy9TZXQgdGhlIGluc3RhbmNlIGlkIGZyb20gdGhlIHNlcnZpY2Ugc2lkZSBpZiB0aGUgZmFjdG9yeSBpZHMgbWF0Y2gKLQkJaWYgKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXyE9bnVsbCAmJiBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZF8ubGVuZ3RoKCk+MCkKLQkJewotCQkJaWYgKHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfIT1udWxsICYmIHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfLmxlbmd0aCgpPjApCi0JCQl7Ci0JCQkJaWYgKHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfLmVxdWFscyhjbGllbnRJZHNfLmdldFNlcnZlcklkKCkpKQotCQkJCXsKLQkJCQkJY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotICAgIHJldHVybiBjbGllbnRJZHNfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRSdW50aW1lSWQoU3RyaW5nIGlkKQotICB7Ci0gICAgY2xpZW50UnVudGltZUlkXyA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJZCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UnVudGltZUlkXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVySW5zdElkKFN0cmluZyBzZXJ2ZXJJbnN0SWQpIHsKLSAgCXRoaXMuc2VydmVySW5zdElkXyA9IHNlcnZlckluc3RJZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJJbnN0SWQoKXsKLSAgCXJldHVybiB0aGlzLnNlcnZlckluc3RJZF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0NsaWVudElzRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRQcm9qZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0KCkKLSAgewotCSAgLy9yZXR1cm4gY2xpZW50UHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50Q29tcG9uZW50TmFtZV87Ci0gICAgICByZXR1cm4gY2xpZW50UHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50UHJvamVjdE5hbWVfOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UHJvamVjdEVBUi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdEVBUigpCi0gIHsKLSAgICBpZiAoY2xpZW50RWFyUHJvamVjdE5hbWVfIT1udWxsICYmIGNsaWVudEVhclByb2plY3ROYW1lXy5sZW5ndGgoKT4wKQotICAgIHsKLQkgICAgLy9yZXR1cm4gY2xpZW50RWFyUHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50RWFyQ29tcG9uZW50TmFtZV87Ci0gICAgICByZXR1cm4gY2xpZW50RWFyUHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotICAKLSAgLyoKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TW9kdWxlUHJvamVjdE5hbWUoIFN0cmluZyBwcm9qZWN0TmFtZSApCi0gIHsKLQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0JCi0JaWYoIHByb2plY3ROYW1lICE9IG51bGwgJiYgIXByb2plY3ROYW1lLmVxdWFscygiIikgKQotCXsKLQkgIElQYXRoICAgIHByb2plY3RQYXRoID0gbmV3IFBhdGgoIHByb2plY3ROYW1lICk7Ci0JICBJUHJvamVjdCBwcm9qZWN0ICAgICA9IChJUHJvamVjdClSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSggcHJvamVjdFBhdGggKTsKLQkgIFN0cmluZyAgIG1vZHVsZU5hbWUgID0gSjJFRVV0aWxzLmdldEZpcnN0V2ViTW9kdWxlTmFtZSggcHJvamVjdCApOwotCSAgCi0JICByZXN1bHQgPSBwcm9qZWN0TmFtZSArICIvIiArIG1vZHVsZU5hbWU7Ci0JfQotCQotCXJldHVybiByZXN1bHQ7Ci0gIH0KLSAgKi8KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UHJvamVjdFR5cGUuCi0gICAqLwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0VHlwZSgpCi0gIHsKLSAgICAvL3JldHVybiBjbGllbnRDaG9pY2VzXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIGNsaWVudENvbXBvbmVudFR5cGVfOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRSdW50aW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lKCkKLSAgewotICAgIHJldHVybiBjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50U2VydmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudElkc18uZ2V0U2VydmVySWQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXJJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50SWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7ICAgIAotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0SWQpewotICAgIAotICAgIGlmIChjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLSAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJJbnN0SWQpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5XU0lMLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNHZW5XU0lMKCkKLSAgewotICAgIHJldHVybiBnZW5XU0lMOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBnZW5XU0lMCi0gICAqICAgICAgICAgICAgVGhlIGdlbldTSUwgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuV1NJTChib29sZWFuIGdlbldTSUwpCi0gIHsKLSAgICB0aGlzLmdlbldTSUwgPSBnZW5XU0lMOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcmVzb3VyY2VDb250ZXh0LgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlQ29udGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcmVzb3VyY2VDb250ZXh0Ci0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlQ29udGV4dCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCkKLSAgewotICAgIHRoaXMucmVzb3VyY2VDb250ZXh0ID0gcmVzb3VyY2VDb250ZXh0OwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFByb3h5U2VsZWN0ZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHRlc3RQcm94eVNlbGVjdGVkCi0gICAqICAgICAgICAgICAgVGhlIHRlc3RQcm94eVNlbGVjdGVkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB0ZXN0UHJveHlTZWxlY3RlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHJ1blRlc3RDbGllbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHRlc3RQcm94eVNlbGVjdGVkCi0gICAqICAgICAgICAgICAgVGhlIHRlc3RQcm94eVNlbGVjdGVkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJ1blRlc3RDbGllbnQoYm9vbGVhbiBydW5UZXN0Q2xpZW50KQotICB7Ci0gICAgdGhpcy5ydW5UZXN0Q2xpZW50ID0gcnVuVGVzdENsaWVudDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsKLQkgIHJldHVybiBkZXZlbG9wQ2xpZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICB0aGlzLmRldmVsb3BDbGllbnRfID0gZGV2ZWxvcENsaWVudDsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkgIHJldHVybiBhc3NlbWJsZUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JICB0aGlzLmFzc2VtYmxlQ2xpZW50XyA9IGFzc2VtYmxlQ2xpZW50OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpIHsKLQkgIHRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaW5zdGFsbENsaWVudC4KLSAgICovCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxDbGllbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGluc3RhbGxDbGllbnQKLSAgICogICAgICAgICAgICBUaGUgaW5zdGFsbENsaWVudCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KEJvb2xlYW4gaW5zdGFsbENsaWVudCkKLSAgewotICAgIHRoaXMuaW5zdGFsbENsaWVudCA9IGluc3RhbGxDbGllbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHN0YXJ0Q2xpZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0Q2xpZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBzdGFydENsaWVudAotICAgKiAgICAgICAgICAgIFRoZSBzdGFydENsaWVudCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydENsaWVudChib29sZWFuIHN0YXJ0Q2xpZW50KQotICB7Ci0gICAgdGhpcy5zdGFydENsaWVudCA9IHN0YXJ0Q2xpZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJCi0gICAqICAgICAgICAgICAgVGhlIHdzZGxVUkkgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2lsVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVVJJKCkKLSAgewotICAgIHJldHVybiB3c2lsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2lsVVJJCi0gICAqICAgICAgICAgICAgVGhlIHdzaWxVUkkgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NpbFVSSShTdHJpbmcgd3NpbFVSSSkKLSAgewotICAgIHRoaXMud3NpbFVSSSA9IHdzaWxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyCi0gICAqICAgICAgICAgICAgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgajJlZVZlcnNpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEoyRUVWZXJzaW9uKCkKLSAgewotCSAgcmV0dXJuICIxNCI7IC8vcm0gajJlZQotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBqMmVlVmVyc2lvbiB0byBzZXQuCi0gICAqLwotICAvKgotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRKMkVFVmVyc2lvbihTdHJpbmcgdmVyc2lvbikKLSAgewotCSAgajJlZVZlcnNpb24gPSB2ZXJzaW9uOwotICB9Ci0gICovCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgYSBwcm94eSBzaG91bGQgYmUgZ2VuZXJhdGVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAgIHJldHVybiBnZW5Qcm94eV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoIGJvb2xlYW4gZ2VuUHJveHkgKQotICB7Ci0gICAgZ2VuUHJveHlfID0gZ2VuUHJveHk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZShTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpCi0gIHsKLSAgCXRoaXMubGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGZhY2lsaXR5IHRvIGxhdW5jaC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gIAlyZXR1cm4gbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIGNsaWVudCBwcm9qZWN0IG5lZWRzIGFuIEVBUiBwcm9qZWN0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50TmVlZEVBUl87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBjbGllbnROZWVkRUFSKQotICB7Ci0gICAgY2xpZW50TmVlZEVBUl8gPSBjbGllbnROZWVkRUFSOwotICB9Ci0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudENvbXBvbmVudFR5cGUoU3RyaW5nIGNsaWVudENvbXBvbmVudFR5cGUpCi0gIHsKLSAgICB0aGlzLmNsaWVudENvbXBvbmVudFR5cGVfID0gY2xpZW50Q29tcG9uZW50VHlwZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3ROYW1lKFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdE5hbWVfID0gY2xpZW50UHJvamVjdE5hbWU7Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDb21wb25lbnROYW1lKFN0cmluZyBjbGllbnRDb21wb25lbnROYW1lKQotICB7Ci0gICAgdGhpcy5jbGllbnRDb21wb25lbnROYW1lXyA9IGNsaWVudENvbXBvbmVudE5hbWU7Ci0gIH0KLSAgKi8KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBjbGllbnRFYXJQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50RWFyUHJvamVjdE5hbWVfID0gY2xpZW50RWFyUHJvamVjdE5hbWU7Ci0gIH0KLSAgCi0gIC8qCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhckNvbXBvbmVudE5hbWUoU3RyaW5nIGNsaWVudEVhckNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNsaWVudEVhckNvbXBvbmVudE5hbWVfID0gY2xpZW50RWFyQ29tcG9uZW50TmFtZTsKLSAgfQotICAqLwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICB9Ci0gIAotICAvKgotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVhckNvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudEVhckNvbXBvbmVudE5hbWVfOwotICB9Ci0gICovCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyRmFjdG9yeUlkKFN0cmluZyBpZCkKLSAgewotICAJc2VydmljZVNlcnZlckZhY3RvcnlJZF8gPSBpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBpZCkKLSAgewotICAJc2VydmljZVNlcnZlckluc3RhbmNlSWRfID0gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENhblJ1blRlc3RDbGllbnQoKXsKLQkgIGlmKGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGwpIHJldHVybiB0cnVlOwotCSAgCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAvL0RvIHNvbWUgYmFzaWMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIHNlcnZlci9ydW50aW1lL3R5cGUgY29tYmluYXRpb24gaXMgc3VwcG9ydGVkLgotICAgIC8vVGhpcyBpcyBuZWVkZWQgdG8gY2F0Y2ggcHJvYmxlbXMgaW4gdGhlIGRlZmF1bHRpbmcKLSAgICAvL3doZW4gdGhlIHVzZXIgY2xpY2tzIEZpbmlzaCBwcmlvciB0byBwYWdlIDMgb2YgdGhlIHdpemFyZC4KLSAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIAotICAgIFN0cmluZyBzY2VuYXJpbyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1NVQjsKLQotICAgIC8vRW5zdXJlIHNlcnZlciBhbmQgcnVudGltZSBhcmUgbm9uLW51bGwKLSAgICBTdHJpbmcgcnVudGltZUlkID0gY2xpZW50SWRzXy5nZXRSdW50aW1lSWQoKTsKLSAgICBTdHJpbmcgc2VydmVySWQgPSBjbGllbnRJZHNfLmdldFNlcnZlcklkKCk7Ci0gICAgU3RyaW5nIHR5cGVJZCA9IGNsaWVudElkc18uZ2V0VHlwZUlkKCk7Ci0gICAgCi0gICAgaWYoIHJ1bnRpbWVJZCA9PSBudWxsIHx8IHJ1bnRpbWVJZC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1JVTlRJTUUsIG5ldyBTdHJpbmdbXXsgc2NlbmFyaW8gfSApICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIGlmKCBzZXJ2ZXJJZCA9PSBudWxsIHx8IHNlcnZlcklkLmxlbmd0aCgpPT0wKQotICAgIHsKLSAgICAgIC8vUG9wdXAgYW5kIGVycm9yIGlmIHRoZSBzZWxlY3RlZCBjbGllbnQgcHJvamVjdCBkb2VzIG5vdCBleGlzdC4KLSAgICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKLSAgICAgIGlmICghY2xpZW50UHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJ1bnRpbWVMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVMYWJlbEJ5SWQocnVudGltZUlkKTsKLSAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX01VU1RfRVhJU1QsIG5ldyBTdHJpbmdbXXtjbGllbnRQcm9qZWN0TmFtZV8sIHJ1bnRpbWVMYWJlbCB9ICkgKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUJ5SWQocnVudGltZUlkKTsKLQotICAgICAgICBpZiAoZGVzYy5nZXRTZXJ2ZXJSZXF1aXJlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19TRVJWRVIsIG5ldyBTdHJpbmdbXSB7IHNjZW5hcmlvIH0pKTsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE5vIHNlcnZlciBoYXMgYmVlbiBzZWxlY3RlZCBhbmQgdGhlIHNlbGVjdGVkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICAgICAgICAvLyBkb2VzIG5vdAotICAgICAgICAgIC8vIHJlcXVpcmUgYSBzZXJ2ZXIuIFNldCBkZXBsb3ksIGluc3RhbGwsIHJ1biwgYW5kIHRlc3QgdG8gZmFsc2UuCi0gICAgICAgICAgZGVwbG95Q2xpZW50XyA9IGZhbHNlOwotICAgICAgICAgIGluc3RhbGxDbGllbnQgPSBCb29sZWFuLkZBTFNFOwotICAgICAgICAgIHN0YXJ0Q2xpZW50ID0gZmFsc2U7Ci0gICAgICAgICAgLy90ZXN0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gSWYgdGhlIHNlcnZlciBpcyBub24tbnVsbCwgZW5zdXJlIHRoZXJlIGlzIGFuIGluc3RhbGxlZCBzZXJ2ZXIgd2l0aCBJRCB0aGUgc2FtZSBhcyAnc2VydmVySUQnIHJlZ2lzdGVyZWQgaW4gRWNsaXBzZQotCWJvb2xlYW4gbm9SdW50aW1lSW5zdGFsbGVkID0gdHJ1ZTsKLQlpZiAoc2VydmVySWQgIT0gbnVsbCkgewotICAgIC8vIElmIHRoZSBzZXJ2ZXIgaXMgbm9uLW51bGwsIGVuc3VyZSB0aGVyZSBpcyBhbiBpbnN0YWxsZWQgc2VydmVyIHdpdGggSUQgdGhlIHNhbWUgYXMgJ3NlcnZlcklEJyByZWdpc3RlcmVkIGluIEVjbGlwc2UKLSAgICBTdHJpbmdbXSBydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCWlmIChydW50aW1lc1tpXS5lcXVhbHMoc2VydmVySWQpKXsKLQkJCW5vUnVudGltZUluc3RhbGxlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0gICAgaWYgKG5vUnVudGltZUluc3RhbGxlZCl7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0gICAgICAgIGlmIChzZXJ2ZXJMYWJlbCA9PSBudWxsKSAvLyBDYW5ub3QgdHJhbnNsYXRlIGZyb20gaWQgdG8gbGFiZWwsIHNvIGxldCdzIGp1c3QgdXNlIHRoZSBpZAotICAgICAgICAJc2VydmVyTGFiZWwgPSBzZXJ2ZXJJZDsKLSAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRV9JTlNUQUxMRUQsIG5ldyBTdHJpbmdbXSB7c2VydmVyTGFiZWx9KSk7Ci0gICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9Ci0JfQotICAgIAotICAgIC8vSWYgdGhlIHNlcnZlciBpcyBub24tbnVsbCBhbmQgaXMgaW5zdGFsbGVkIGluIEVjbGlwc2UsIGVuc3VyZSB0aGUgc2VydmVyLCBydW50aW1lLCBhbmQgdHlwZSBhcmUgY29tcGF0aWJsZQotICAgIGlmICghbm9SdW50aW1lSW5zdGFsbGVkICYmIHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIGlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuaXNTZXJ2ZXJDbGllbnRSdW50aW1lVHlwZVN1cHBvcnRlZChzZXJ2ZXJJZCwgcnVudGltZUlkLCB0eXBlSWQpKQotICAgICAgewotICAgICAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotICAgICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChydW50aW1lSWQpOwotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsIG5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotICAgICAgICAgICAgcnVudGltZUxhYmVsIH0pKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIGVuc3VyZSBpdCBzdXBwb3J0cyB0aGUgV2ViIHNlcnZpY2UgdHlwZSwgV2ViIHNlcnZpY2UgcnVudGltZSwgYW5kIHNlcnZlci4KLSAgICAgIGlmIChjbGllbnRQcm9qZWN0TmFtZV8gIT0gbnVsbCAmJiBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKS5leGlzdHMoKSkgewotICAgIAkgIFZhbGlkYXRpb25VdGlscyB2VXRpbCA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICAgICAgICBpZiAoIXZVdGlsLmRvZXNTZXJ2ZXJTdXBwb3J0UHJvamVjdChzZXJ2ZXJJZCxjbGllbnRQcm9qZWN0TmFtZV8pKSB7Ci0gICAgCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1QsCi0JCQkJCW5ldyBTdHJpbmdbXSB7IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCksY2xpZW50UHJvamVjdE5hbWVfIH0pKTsKLSAgICAJICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdHlwZSBoYXMgb25seSBzdHViIHJ1bnRpbWVzIGFzc29jaWF0ZWQKLSAgICAgIC8vIHdpdGggaXQgYW5kIGlmIGEgc2VydmVyIGluc3RhbmNlIGlzIG5vdCBzZWxlY3RlZC4KLSAgICAgIC8vIElmIHNvLCBzZXQgaW5zdGFsbCBhbmQgdGVzdCB0byBmYWxzZSBpbiB0aGUgY29udGV4dC4KLSAgICAgIElSdW50aW1lIG5vblN0dWJSdW50aW1lID0gU2VydmVyVXRpbHMuZ2V0Tm9uU3R1YlJ1bnRpbWUoc2VydmVySWQpOwotICAgICAgaWYgKG5vblN0dWJSdW50aW1lID09IG51bGwgJiYgY2xpZW50SWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW5zdGFsbENsaWVudCA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIHN0YXJ0Q2xpZW50ID0gZmFsc2U7Ci0gICAgICAgIC8vdGVzdFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgfQotICAgIH0KLQotCSAgLy8gY2FsY3VsYXRlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGNsaWVudFJ1bnRpbWVJZCBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzLgotCSAgY2xpZW50UnVudGltZUlkXyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVJZChjbGllbnRJZHNfLCBjbGllbnRQcm9qZWN0TmFtZV8sIGNsaWVudENvbXBvbmVudFR5cGVfKTsgICAKLQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwNWQwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5FeHRlbnNpb25GcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQgZXh0ZW5kcyBFeHRlbnNpb25GcmFnbWVudAoteyAgCi0gIHB1YmxpYyBDbGllbnRFeHRlbnNpb25GcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIENsaWVudEV4dGVuc2lvbkZyYWdtZW50KCBDbGllbnRFeHRlbnNpb25GcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewotICAgIHNldEV4dGVuc2lvbklkcyggbmV3IFN0cmluZ1tdeyBpZHMuZ2V0VHlwZUlkKCksIGlkcy5nZXRSdW50aW1lSWQoKSwgaWRzLmdldFNlcnZlcklkKCkgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNjbG9uZSgpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLSAgICByZXR1cm4gbmV3IENsaWVudEV4dGVuc2lvbkZyYWdtZW50KCB0aGlzICk7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDYzMWQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDIgICAxODAzMDQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwcm94eUJlYW4uCi0gICAqLwotICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm94eUJlYW4oKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0SW1wbFVSTCgpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIGdldENhbkdlbmVyYXRlUHJveHkoKQotICB7Ci0JcmV0dXJuICEod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRJbXBsVVJMKCkgPT0gbnVsbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNldEVuZHBvaW50TWV0aG9kLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXRFbmRwb2ludE1ldGhvZCgpCi0gIHsKLQlyZXR1cm4gInNldEVuZHBvaW50IjsKLSAgfQotICAJCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VDbGllbnQoSVdlYlNlcnZpY2VDbGllbnQgd3NjKQotICB7Ci0Jd2ViU2VydmljZUNsaWVudF8gPSB3c2M7Ci0gIH0KLQkKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUlkKCkKLSAgewotCXJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLSAgfQotCQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpCi0gIHsKLQlyZXR1cm4gd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHByb3h5RW5kcG9pbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb3h5RW5kcG9pbnQoKSB7Ci0gIAlyZXR1cm4gd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRQcm94eUVuZHBvaW50KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiYmZkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyMyAgIDE1NDkzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDIwNSAgIDE3MDE0MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIGltcHJvdmUgQW50VGFzayBlcnJvcnMgcmVwb3J0Ci0gKiAyMDA4MDQwOSAgIDIxOTEyMSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODA3MjkgICAyNDEyNzUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgTm8gVmFsaWRhdGlvbiBlcnJvciBnZW5lcmF0aW5nIFdlYiBTZXJ2aWNlIGNsaWVudCBpZiBkaWFsb2cgaGlkZGVuCi0gKiAyMDA4MTAyOCAgIDI0ODYyNSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBFeGNlcHRpb25zIHJ1bm5pbmcgQU5UIHRhc2tzIHVzaW5nIGluYXBwcm9wcmlhdGUgcHJvamVjdHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXZlbG9wU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBhc3NlbWJsZVNlcnZpY2VfOwotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGVwbG95U2VydmljZV87Ci0KLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBpbnN0YWxsU2VydmljZTsKLSAgcHJpdmF0ZSBJUHJvamVjdAkJCWluaXRpYWxQcm9qZWN0XzsKLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBzdGFydFNlcnZpY2U7Ci0gIHByaXZhdGUgQm9vbGVhbiAgICAgICAgICAgICAgdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgQm9vbGVhbiAgICAgICAgICAgICAgcHVibGlzaFNlcnZpY2U7Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgICAgc2VydmljZUlkc187Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZVJ1bnRpbWVJZF87Ci0gIC8vcHJpdmF0ZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2aWNlQ2hvaWNlc187Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZVByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgLy9wcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VDb21wb25lbnROYW1lXzsKLSAgLy9wcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VFYXJDb21wb25lbnROYW1lXzsKLSAgLy9wcml2YXRlIFN0cmluZyBqMmVlVmVyc2lvbjsKLSAgcHJpdmF0ZSBib29sZWFuIHNlcnZpY2VOZWVkRUFSXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3c2RsUGFyc2VyXzsKLSAgCi0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpCi0gIHsKLSAgICBzZXJ2aWNlSWRzXyA9IGlkczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RJZCl7Ci0gICAgCi0gICAgaWYgKHNlcnZpY2VJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVySW5zdElkKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFR5cGVSdW50aW1lU2VydmljZSBvYmplY3QgdGhhdCB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgb24KLSAgICogcGFnZSAzIG9mIHRoZSB3aXphcmQuCi0gICAqLwotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlSWRzXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVJ1bnRpbWVJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlUnVudGltZUlkXyA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VSdW50aW1lSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VSdW50aW1lSWRfOwotICB9Ci0KLSAgLyoKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QyRUFSUHJvamVjdChTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjaG9pY2VzKQotICB7Ci0gICAgc2VydmljZUNob2ljZXNfID0gY2hvaWNlczsKLSAgfQotICAqLwotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHB1Ymxpc2hTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0UHVibGlzaFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBwdWJsaXNoU2VydmljZQotICAgKiAgICAgICAgICAgIFRoZSBwdWJsaXNoU2VydmljZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoU2VydmljZShCb29sZWFuIHB1Ymxpc2hTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5wdWJsaXNoU2VydmljZSA9IHB1Ymxpc2hTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVySXNFeGlzdGluZ1NlcnZlci4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNlcnZlcklzRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsOwotICB9Ci0KLSAgLyoqCi0KLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0TmFtZV8gKyAiLyIgKyBzZXJ2aWNlUHJvamVjdE5hbWVfOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyUHJvamVjdEVBUi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUHJvamVjdEVBUigpCi0gIHsKLSAgICBpZiAoc2VydmljZUVhclByb2plY3ROYW1lXyE9bnVsbCAmJiBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfLmxlbmd0aCgpPjApCi0gICAgewotICAgICAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gKyAiLyIgKyBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclJ1bnRpbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclJ1bnRpbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyU2VydmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2aWNlU2NlbmFyaW9JZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNjZW5hcmlvSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcFNlcnZpY2UoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcFNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGV2ZWxvcFNlcnZpY2UoYm9vbGVhbiBkZXZlbG9wU2VydmljZSkgewotCSAgdGhpcy5kZXZlbG9wU2VydmljZV8gPSBkZXZlbG9wU2VydmljZTsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JICByZXR1cm4gYXNzZW1ibGVTZXJ2aWNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCSAgdGhpcy5hc3NlbWJsZVNlcnZpY2VfID0gYXNzZW1ibGVTZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkgIHJldHVybiBkZXBsb3lTZXJ2aWNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JICB0aGlzLmRlcGxveVNlcnZpY2VfID0gZGVwbG95U2VydmljZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaW5zdGFsbFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFsbFNlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpbnN0YWxsU2VydmljZQotICAgKiAgICAgICAgICAgIFNwZWNpZmllcyBpZiBzZXJ2aWNlIHNob3VsZCBiZSBpbnN0YWxsZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsU2VydmljZShCb29sZWFuIGluc3RhbGxTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5pbnN0YWxsU2VydmljZSA9IGluc3RhbGxTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc3RhcnRTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0U3RhcnRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzdGFydFNlcnZpY2U7Ci0gIH0KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFByb2plY3QoSVByb2plY3QgaW5pdGlhbFByb2plY3QpCi0gIHsKLQkgIGluaXRpYWxQcm9qZWN0XyA9IGluaXRpYWxQcm9qZWN0OyAgCi0gIH0JCi0gICAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRJbml0aWFsUHJvamVjdCgpCi0gIHsKLQkgIHJldHVybiBpbml0aWFsUHJvamVjdF87ICAKLSAgfQkKLSAgLyoqCi0gICAqIEBwYXJhbSBzdGFydFNlcnZpY2UKLSAgICogICAgICAgICAgICBUaGUgc3RhcnRTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShCb29sZWFuIHN0YXJ0U2VydmljZSkKLSAgewotICAgIHRoaXMuc3RhcnRTZXJ2aWNlID0gc3RhcnRTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHRlc3RTZXJ2aWNlCi0gICAqICAgICAgICAgICAgVGhlIHRlc3RTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKEJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgQm9vbGVhbiBnZXRQdWJsaXNoKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbih0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGoyZWVWZXJzaW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlSjJFRVZlcnNpb24oKQotICB7Ci0gIAlyZXR1cm4gIjE0IjsgLy9ybSBqMmVlCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHdlYiBzZXJ2aWNlIHByb2plY3QgbmVlZHMgdG8gYmUgaW4gYW4gRUFSIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTZXJ2aWNlTmVlZEVBUigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZU5lZWRFQVJfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTmVlZEVBUihib29sZWFuIHNlcnZpY2VOZWVkRUFSKQotICB7Ci0gICAgc2VydmljZU5lZWRFQVJfID0gc2VydmljZU5lZWRFQVI7Ci0gIH0gICAgCi0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsUGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiggd3NkbFBhcnNlcl8gPT0gbnVsbCApCi0gICAgewotICAgICAgd3NkbFBhcnNlcl8gPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd3NkbFBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsUGFyc2VyXyBUaGUgd3NkbFBhcnNlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NkbFBhcnNlciApCi0gIHsKLSAgICB3c2RsUGFyc2VyXyA9IHdzZGxQYXJzZXI7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuc2VydmljZVByb2plY3ROYW1lXyA9IHNlcnZpY2VQcm9qZWN0TmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlRWFyUHJvamVjdE5hbWVfID0gc2VydmljZUVhclByb2plY3ROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMuc2VydmljZUNvbXBvbmVudFR5cGVfID0gdHlwZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUNvbXBvbmVudFR5cGVfOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgLy9EbyBzb21lIGJhc2ljIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBzZXJ2ZXIvcnVudGltZS90eXBlIGNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZC4KLSAgICAvL1RoaXMgaXMgbmVlZGVkIHRvIGNhdGNoIHByb2JsZW1zIGluIHRoZSBkZWZhdWx0aW5nCi0gICAgLy93aGVuIHRoZSB1c2VyIGNsaWNrcyBGaW5pc2ggcHJpb3IgdG8gcGFnZSAzIG9mIHRoZSB3aXphcmQuCi0gICAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgIAotICAgIFN0cmluZyBzY2VuYXJpbyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUI7Ci0KLSAgICAvL0Vuc3VyZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgYXJlIG5vbi1udWxsCi0gICAgU3RyaW5nIHJ1bnRpbWVJZCA9IHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpOwotICAgIFN0cmluZyBzZXJ2ZXJJZCA9IHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCk7Ci0gICAgU3RyaW5nIHR5cGVJZCA9IHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpOwotICAgIAotICAgIGlmKCBydW50aW1lSWQgPT0gbnVsbCB8fCBydW50aW1lSWQubGVuZ3RoKCk9PTApCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19SVU5USU1FLCBuZXcgU3RyaW5nW117IHNjZW5hcmlvIH0gKSApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICBpZiggc2VydmVySWQgPT0gbnVsbCB8fCBzZXJ2ZXJJZC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICAvL1BvcHVwIGFuZCBlcnJvciBpZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0LgotICAgICAgSVByb2plY3Qgc2VydmljZVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgICBpZiAoIXNlcnZpY2VQcm9qZWN0LmV4aXN0cygpKSAgICAgICAgCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfUFJPSkVDVF9NVVNUX0VYSVNULCBuZXcgU3RyaW5nW117IHNlcnZpY2VQcm9qZWN0TmFtZV8sIHJ1bnRpbWVMYWJlbCB9ICkgKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotCi0gICAgICAgIFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChydW50aW1lSWQpOwotICAgICAgICBpZiAoZGVzYy5nZXRTZXJ2ZXJSZXF1aXJlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19TRVJWRVIsIG5ldyBTdHJpbmdbXSB7IHNjZW5hcmlvIH0pKTsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE5vIHNlcnZlciBoYXMgYmVlbiBzZWxlY3RlZCBhbmQgdGhlIHNlbGVjdGVkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICAgICAgICAvLyBkb2VzIG5vdCByZXF1aXJlIGEgc2VydmVyLiBTZXQgZGVwbG95LCBpbnN0YWxsLCBydW4sIGFuZCB0ZXN0IHRvIGZhbHNlLgotICAgICAgICAgIGRlcGxveVNlcnZpY2VfID0gZmFsc2U7Ci0gICAgICAgICAgaW5zdGFsbFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgICAgIHN0YXJ0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgICAgdGVzdFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIElmIHRoZSBzZXJ2ZXIgaXMgbm9uLW51bGwsIGVuc3VyZSB0aGVyZSBpcyBhbiBpbnN0YWxsZWQgc2VydmVyIHdpdGggSUQgdGhlIHNhbWUgYXMgJ3NlcnZlcklEJyByZWdpc3RlcmVkIGluIEVjbGlwc2UKLQlib29sZWFuIG5vUnVudGltZUluc3RhbGxlZCA9IHRydWU7Ci0JaWYgKHNlcnZlcklkICE9IG51bGwpIHsKLSAgICBTdHJpbmdbXSBydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspIHsKLQkJaWYgKHJ1bnRpbWVzW2ldLmVxdWFscyhzZXJ2ZXJJZCkpewotCQkJbm9SdW50aW1lSW5zdGFsbGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCX0KLSAgICBpZiAobm9SdW50aW1lSW5zdGFsbGVkKXsKLSAgICAgICAgU3RyaW5nIHNlcnZlckxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlcnZlcklkKTsKLSAgICAgICAgaWYgKHNlcnZlckxhYmVsID09IG51bGwpIC8vIENhbm5vdCB0cmFuc2xhdGUgZnJvbSBpZCB0byBsYWJlbCwgc28gbGV0J3MganVzdCB1c2UgdGhlIGlkCi0gICAgICAgIAlzZXJ2ZXJMYWJlbCA9IHNlcnZlcklkOwotICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FX0lOU1RBTExFRCwgbmV3IFN0cmluZ1tdIHtzZXJ2ZXJMYWJlbH0pKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0KLQl9Ci0gICAgCi0gICAgLy9JZiB0aGUgc2VydmVyIGlzIG5vbi1udWxsIGFuZCBpcyBpbnN0YWxsZWQgaW4gRWNsaXBzZSwgZW5zdXJlIHRoZSBzZXJ2ZXIsIHJ1bnRpbWUsIGFuZCB0eXBlIGFyZSBjb21wYXRpYmxlCi0gICAgaWYgKCFub1J1bnRpbWVJbnN0YWxsZWQgJiYgc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlcnZlcklkLCBydW50aW1lSWQsIHR5cGVJZCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUywgbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsCi0gICAgICAgICAgICBydW50aW1lTGFiZWwgfSkpOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgZW5zdXJlIGl0IHN1cHBvcnRzIHRoZSBXZWIgc2VydmljZSB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgc2VydmVyLgotICAgICAgaWYgKGdldEluaXRpYWxQcm9qZWN0KCkgIT0gbnVsbCAmJiBnZXRJbml0aWFsUHJvamVjdCgpLmdldE5hbWUoKSAhPSBudWxsICYmIFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChnZXRJbml0aWFsUHJvamVjdCgpLmdldE5hbWUoKSkuZXhpc3RzKCkpIHsKLSAgICAJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotICAgIAkKLQkJaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCAmJgotCSAgICAJCUZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChnZXRJbml0aWFsUHJvamVjdCgpKSl7Ci0JICAgIAkJaWYoIXZhbFV0aWxzLmRvZXNTZXJ2ZXJTdXBwb3J0UHJvamVjdChzZXJ2ZXJJZCxnZXRJbml0aWFsUHJvamVjdCgpLmdldE5hbWUoKSkpewotCSAgICAJICAgIAlzdGF0dXMgID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX0pBVkFQUk9KRUNULAotCQkJCQkJCW5ldyBTdHJpbmdbXSB7IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCksIGdldEluaXRpYWxQcm9qZWN0KCkuZ2V0TmFtZSgpIH0pKTsKLQkgICAgCSAgICAJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgCQkgICAgfQotCQl9IAotCQlpZiAoIXZhbFV0aWxzLmRvZXNTZXJ2ZXJTdXBwb3J0UHJvamVjdChzZXJ2ZXJJZCwgc2VydmljZVByb2plY3ROYW1lXykpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVCwKLQkJCQkJbmV3IFN0cmluZ1tdIHsgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlcnZlcklkKSwKLQkJCQkJCQlzZXJ2aWNlUHJvamVjdE5hbWVfIH0pKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJfQotCSAgfQotICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdHlwZSBoYXMgb25seSBzdHViIHJ1bnRpbWVzIGFzc29jaWF0ZWQKLSAgICAgIC8vIHdpdGggaXQgYW5kIGlmIGEgc2VydmVyIGluc3RhbmNlIGlzIG5vdCBzZWxlY3RlZC4KLSAgICAgIC8vIElmIHNvLCBzZXQgaW5zdGFsbCwgcnVuLCBhbmQgdGVzdCB0byBmYWxzZSBpbiB0aGUgY29udGV4dC4KLSAgICAgIElSdW50aW1lIG5vblN0dWJSdW50aW1lID0gU2VydmVyVXRpbHMuZ2V0Tm9uU3R1YlJ1bnRpbWUoc2VydmVySWQpOwotICAgICAgaWYgKG5vblN0dWJSdW50aW1lID09IG51bGwgJiYgc2VydmljZUlkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGluc3RhbGxTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgc3RhcnRTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgdGVzdFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgfQotICAgIH0KLQotCS8vIGNhbGN1bGF0ZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBjbGllbnRSdW50aW1lSWQgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncy4KLQlzZXJ2aWNlUnVudGltZUlkXyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lSWQoIHNlcnZpY2VJZHNfLCBzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlQ29tcG9uZW50VHlwZV8pOyAgIAotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDBhNDk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkV4dGVuc2lvbkZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCBleHRlbmRzIEV4dGVuc2lvbkZyYWdtZW50Ci17ICAKLSAgcHVibGljIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50KCkKLSAgewotCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCggU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0gICAgc2V0RXh0ZW5zaW9uSWRzKCBuZXcgU3RyaW5nW117IGlkcy5nZXRUeXBlSWQoKSwgaWRzLmdldFJ1bnRpbWVJZCgpLCBpZHMuZ2V0U2VydmVySWQoKSB9ICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2Nsb25lKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotICAgIHJldHVybiBuZXcgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQoIHRoaXMgKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODNjZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgLy9wcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzZGxVUklfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdzZGxQYXJzZXJfOwotCXByaXZhdGUgSVdlYlNlcnZpY2UgCQkJd2ViU2VydmljZV87Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8gPSBmYWxzZTsKLSAgICAKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdzZGxVUkkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0V3NkbFVSTCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJCi0gICAqICAgICAgICAgICAgVGhlIHdzZGxVUkkgdG8gc2V0LgotICAgKi8KLQkvKgotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgd3NkbFVSSV8gPSB3c2RsVVJJOwotICB9Ci0gICovCi0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZShJV2ViU2VydmljZSB3cykKLQl7Ci0JCXdlYlNlcnZpY2VfID0gd3M7Ci0JfQotCQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsUGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiggd3NkbFBhcnNlcl8gPT0gbnVsbCApCi0gICAgewotICAgICAgd3NkbFBhcnNlcl8gPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd3NkbFBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsUGFyc2VyXyBUaGUgd3NkbFBhcnNlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NkbFBhcnNlcl8pCi0gIHsKLSAgICB0aGlzLndzZGxQYXJzZXJfID0gd3NkbFBhcnNlcl87Ci0gIH0KLS8qKgotICogQHBhcmFtIGVhclByb2plY3ROYW1lIFRoZSBlYXJQcm9qZWN0TmFtZSB0byBzZXQuCi0gKi8KLXB1YmxpYyB2b2lkIHNldEVhclByb2plY3ROYW1lKFN0cmluZyBlYXJQcm9qZWN0TmFtZSkgewotfQotLyoqCi0gKiBAcGFyYW0gZXhpc3RpbmdTZXJ2ZXJJZCBUaGUgZXhpc3RpbmdTZXJ2ZXJJZCB0byBzZXQuCi0gKi8KLXB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVySWQoU3RyaW5nIGV4aXN0aW5nU2VydmVySWQpIHsKLX0KLQotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzUmVzdGFydFByb2plY3ROZWVkZWQuCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoKSB7Ci0JcmV0dXJuIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfOwotfQotLyoqCi0gKiBAcGFyYW0gaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCBUaGUgaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCB0byBzZXQuCi0gKi8KLXB1YmxpYyB2b2lkIHNldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoYm9vbGVhbiBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkKSB7Ci0JdGhpcy5pc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXyA9IGlzUmVzdGFydFByb2plY3ROZWVkZWQ7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlckZhY3RvcnlJZCgpCi17Ci0JcmV0dXJuIHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoKQotewotCXJldHVybiB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLX0KLQotcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotewotICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1Yzk3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci17Ci0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLSAgewotICAgIC8vIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotICB9Ci0KLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLSAgICAvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgIHB1YmxpYyAgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkKLSAgIHsKLQkgICAgLy8gIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotCSAgcmV0dXJuICIiOwotICAgfQotICAgCi0gICBwdWJsaWMgUG9pbnQgZ2V0V2lkZ2V0U2l6ZSgpCi0gICB7Ci0gICAgICAvLyBzdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB3aXRoIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQgZGlhbG9nIHNpemUgZm9yIHRoaXMgd2lkZ2V0CSAgCi0gCSAgcmV0dXJuIG51bGw7ICAKLSAgIH0KLSAgIAotICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpIHsKLSAgICAvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQlyZXR1cm4gdHJ1ZTsKLSAgICB9ICAKLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmQ4M2YxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKiAyMDA4MDIxMiAgIDIwODc5NSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXUyB3aXphcmQgZnJhbWV3b3JrIHNob3VsZCBzdXBwb3J0IEVKQiAzLjAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuRUpCTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuUG9ydENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLlNlc3Npb25CZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBFSkJTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgT2JqZWN0IHNlbCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdmFsdWUpLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKHNlbCBpbnN0YW5jZW9mIEVudGVycHJpc2VCZWFuKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKChFbnRlcnByaXNlQmVhbilzZWwpLmdldE5hbWUoKSk7Ci0gICAgICB9IAotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgU2Vzc2lvbkJlYW4pIAotICAgICAgewotICAgIAkgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigoKFNlc3Npb25CZWFuKXNlbCkuZ2V0RWpiTmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldEJlYW5OYW1lKChTZXJ2aWNlSW1wbEJlYW4pIHNlbCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgRUpCTGluaykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldEJlYW5OYW1lKChFSkJMaW5rKSBzZWwpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRCZWFuTmFtZShTZXJ2aWNlSW1wbEJlYW4gYmVhbikgewotCSAgRU9iamVjdCBlT2JqZWN0ID0gYmVhbi5lQ29udGFpbmVyKCk7Ci0JICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLQkJICBQb3J0Q29tcG9uZW50IHBjID0gKFBvcnRDb21wb25lbnQpIGVPYmplY3Q7Ci0JCSAgcmV0dXJuIHBjLmdldFBvcnRDb21wb25lbnROYW1lKCk7CSAgICAgIAkKLQkgIH0KLQkgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoRUpCTGluayBsaW5rKSB7Ci0JICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotCQkgIHJldHVybiBnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKLQkgIHJldHVybiAiIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNGM4MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25XaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjgwNjkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxOCAgIDEzNjE4MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgICAxNDExOTQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwODAyMTIgICAyMDg3OTUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgV1Mgd2l6YXJkIGZyYW1ld29yayBzaG91bGQgc3VwcG9ydCBFSkIgMy4wCi0gKiAyMDA4MDIyOSAgIDIxODY5NiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBBUElzIHVzaW5nIEVKQkFydGlmYWN0RWRpdCBub3QgYWJsZSB0byBkZWFsIHdpdGggc29tZSBFSkIgMy4wIGJlYW5zIHByb3Blcmx5Ci0gKiAyMDA4MDQyOCAgIDIyNDcyNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCSmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuU2Vzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLklNb2RlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLk1vZGVsUHJvdmlkZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLkVudGVycHJpc2VCZWFuczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5TZXNzaW9uQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuQ29tcG9uZW50VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBFSkJTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBBYnN0cmFjdE9iamVjdFNlbGVjdGlvbldpZGdldCBpbXBsZW1lbnRzIElPYmplY3RTZWxlY3Rpb25XaWRnZXQKLXsKLQotICBwcml2YXRlIENvbWJvIGVhckxpc3Q7Ci0gIHByaXZhdGUgRUpCVGFibGVWaWV3ZXIgYmVhbkxpc3Q7Ci0gIHByaXZhdGUgSVZpcnR1YWxDb21wb25lbnRbXSBlYXJDb21wb25lbnRzOwotICBwcml2YXRlIEludGVnZXIgc2VsZWN0ZWRCZWFuSW5kZXggPSBudWxsOwotICBwcml2YXRlIFZlY3RvciBlamJCZWFuTmFtZXM7Ci0gIHByaXZhdGUgVmVjdG9yIGVqYkNvbXBvbmVudE5hbWVzOwotICBwcml2YXRlIFZlY3RvciBlamJDb21wb25lbnRQcm9qZWN0TmFtZXM7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGVqYlZhbHVlc0J5RUFSU2VsZWN0aW9uQ2FjaGU7Ci0gIHByaXZhdGUgTGlzdGVuZXIgIHN0YXR1c0xpc3RlbmVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZGlzcGxheVN0cmluZ18gPSAiIjsKLSAgLyogQ09OVEVYVF9JRCBQRUJEMDAwMSBmb3IgdGhlIEVBUiBQcm9qZWN0cyBkcm9wLWRvd24gYm94ICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEVCRF9FQVJfUFJPSkVDVFMgPSAiUEVCRDAwMDEiOwotICAvKiBDT05URVhUX0lEIFBFQkQwMDAyIGZvciB0aGUgdGFibGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGJlYW4gbmFtZXMgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QRUJEX1RBQkxFX0JFQU5fTkFNRVMgPSAiUEVCRDAwMDIiOwotCi0gIHB1YmxpYyBFSkJTZWxlY3Rpb25XaWRnZXQoKQotICB7Ci0JZWFyQ29tcG9uZW50cyA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0gICAgZWpiVmFsdWVzQnlFQVJTZWxlY3Rpb25DYWNoZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0ZWRCZWFuKCkKLSAgewotICAgIGlmIChzZWxlY3RlZEJlYW5JbmRleCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU3RyaW5nKSAoZWpiQmVhbk5hbWVzLmVsZW1lbnRBdChzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpKSk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RlZFByb2plY3QoKQotICB7Ci0gICAgaWYgKHNlbGVjdGVkQmVhbkluZGV4ICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChTdHJpbmcpIChlamJDb21wb25lbnRQcm9qZWN0TmFtZXMuZWxlbWVudEF0KHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIHN0YXR1c0xpc3RlbmVyXyAgPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICBVSVV0aWxzIHV0aWxzID0gbmV3IFVJVXRpbHMoIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnQsIDEsIDAsIDApOwotICAgIAotICAgIENvbXBvc2l0ZSBwcm9qZWN0Q29tcG9zaXRlID0gdXRpbHMuY3JlYXRlQ29tcG9zaXRlKGNvbXBvc2l0ZSwgMik7Ci0gICAgbmV3IExhYmVsKHByb2plY3RDb21wb3NpdGUsIFNXVC5OVUxMKS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FQVJfUFJPSkVDVFMpOwotICAgIGVhckxpc3QgPSBuZXcgQ29tYm8ocHJvamVjdENvbXBvc2l0ZSwgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkpOwotICAgIGVhckxpc3Quc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0gICAgZWFyTGlzdC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KQotICAgICAgewotICAgICAgICBDb21ibyB3aWRnZXQgPSAoQ29tYm8pIChldnQud2lkZ2V0KTsKLSAgICAgICAgaW50IGVhckxpc3RTZWxlY3Rpb25JbmRleCA9IHdpZGdldC5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgICBpZiAoZWFyTGlzdFNlbGVjdGlvbkluZGV4ID4gMCkKLSAgICAgICAgewotICAgICAgICAgIHNldEJlYW5MaXN0KGVhckNvbXBvbmVudHNbZWFyTGlzdFNlbGVjdGlvbkluZGV4LTFdKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRCZWFuTGlzdChudWxsKTsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3RlZEJlYW5JbmRleCA9IG51bGw7Ci0gICAgICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBhZGRFQVJOYW1lc1RvTGlzdCgpOwotICAgIGVhckxpc3Quc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfRUFSX1BST0pFQ1RTKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGVhckxpc3QsIElORk9QT1BfUEVCRF9FQVJfUFJPSkVDVFMpOwotICAgIAotICAgIEdyb3VwIGJlYW5Db21wb3NpdGUgPSB1dGlscy5jcmVhdGVHcm91cChjb21wb3NpdGUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FSkJfQkVBTl9OQU1FLCAiIiwgIiIpOwotICAgIGJlYW5MaXN0ID0gbmV3IEVKQlRhYmxlVmlld2VyKGJlYW5Db21wb3NpdGUpOyAgICAKLSAgICBUYWJsZSBiZWFuVGFibGUgPSBiZWFuTGlzdC5nZXRUYWJsZSgpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpOwotICAgIGdkLmhlaWdodEhpbnQgPSAxMDA7Ci0gICAgYmVhblRhYmxlLnNldExheW91dERhdGEoZ2QpOwotICAgIGJlYW5UYWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KQotICAgICAgewotICAgICAgICBUYWJsZSB0YWJsZSA9IChUYWJsZSkgKGV2dC53aWRnZXQpOwotICAgICAgICBzZWxlY3RlZEJlYW5JbmRleCA9IG5ldyBJbnRlZ2VyKHRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCkpOwotICAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgYmVhblRhYmxlLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1RBQkxFX0JFQU5fTkFNRVMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoYmVhblRhYmxlLCBJTkZPUE9QX1BFQkRfVEFCTEVfQkVBTl9OQU1FUyk7Ci0gICAgCi0gICAgaWYgKGVhckNvbXBvbmVudHMgIT0gbnVsbCAmJiBlYXJDb21wb25lbnRzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgc2V0QmVhbkxpc3QoZWFyQ29tcG9uZW50c1swXSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRCZWFuTGlzdChudWxsKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhIGR1bW15IGxhYmVsIHRoYXQgZm9yY2VzIHRoZSBzdGF0dXMgbGFiZWwgaW50byB0aGUgc2Vjb25kCi0gICAgLy8gY29sdW1uLgotICAgIG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OVUxMKS5zZXRUZXh0KCIiKTsKLSAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgCi0gIAotICBwcml2YXRlIHZvaWQgYWRkRUFSTmFtZXNUb0xpc3QoKQotICB7Ci0gICAgZWFyTGlzdC5hZGQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NIT1dfQUxMX1NUQVRFTEVTU19TRVNTSU9OX0VKQlMpOwotICAgIGlmIChlYXJDb21wb25lbnRzICE9IG51bGwgJiYgZWFyQ29tcG9uZW50cy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBlYXJDb21wb25lbnRzLmxlbmd0aDsgaW5kZXgrKykKLSAgICAgIHsKLSAgICAgICAgZWFyTGlzdC5hZGQoZWFyQ29tcG9uZW50c1tpbmRleF0uZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGVhckxpc3Quc2V0VGV4dChlYXJMaXN0LmdldEl0ZW0oMSkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRCZWFuTGlzdChJVmlydHVhbENvbXBvbmVudCBlYXJDb21wb25lbnQpCi0gIHsgICAgCi0gICAgU3RyaW5nIGNhY2hlS2V5ID0gKGVhckNvbXBvbmVudCA9PSBudWxsKT8gZWFyTGlzdC5nZXRJdGVtKDApOiBlYXJDb21wb25lbnQuZ2V0TmFtZSgpOwotICAgIAotICAgIC8vQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSBjYWNoZWQgcmVzdWx0cyBmb3IgdGhpcyBjYXNlLiBJZiBzbywgdXNlIHRoZQotICAgIC8vY2FjaGVkIHZhbHVlcyBhbmQgcmV0dXJuLiBJZiBub3QsIGNvbnRpbnVlLgotICAgIEVKQlRhYmxlVmFsdWVzIGNhY2hlZFZhbHVlcyA9IChFSkJUYWJsZVZhbHVlcyllamJWYWx1ZXNCeUVBUlNlbGVjdGlvbkNhY2hlLmdldChjYWNoZUtleSk7Ci0gICAgaWYgKGNhY2hlZFZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGVqYkJlYW5OYW1lcyA9IGNhY2hlZFZhbHVlcy5jYWNoZWRFamJCZWFuTmFtZXM7Ci0gICAgICBlamJDb21wb25lbnROYW1lcyA9IGNhY2hlZFZhbHVlcy5jYWNoZWRFamJDb21wb25lbnROYW1lczsKLSAgICAgIGVqYkNvbXBvbmVudFByb2plY3ROYW1lcyA9IGNhY2hlZFZhbHVlcy5jYWNoZGVkRWpiQ29tcG9uZW50UHJvamVjdE5hbWVzOwotICAgICAgYmVhbkxpc3Quc2V0RGF0YShlamJCZWFuTmFtZXMsIGVqYkNvbXBvbmVudE5hbWVzKTsKLSAgICAgIGJlYW5MaXN0LnNldElucHV0KGVqYkJlYW5OYW1lcyk7ICAgIAotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBJVmlydHVhbENvbXBvbmVudFtdIGVqYkNvbXBvbmVudHNBcnJheSA9IG51bGw7Ci0gICAgaWYgKGVhckNvbXBvbmVudCA9PSBudWxsKQotICAgIHsgIAotICAgICAgZWpiQ29tcG9uZW50c0FycmF5ID0gSjJFRVV0aWxzLmdldEFsbEVKQkNvbXBvbmVudHMoKTsgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVqYkNvbXBvbmVudHNBcnJheSA9IEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VKQkNvbXBvbmVudHNGcm9tRUFSKGVhckNvbXBvbmVudC5nZXRQcm9qZWN0KCkpOwotICAgIH0KLSAgICAKLSAgICBUYWJsZSBiZWFuVGFibGUgPSBiZWFuTGlzdC5nZXRUYWJsZSgpOwotICAgIGJlYW5UYWJsZS5yZW1vdmVBbGwoKTsKLSAgICBlamJCZWFuTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZWpiQ29tcG9uZW50TmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZWpiQ29tcG9uZW50UHJvamVjdE5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBlamJDb21wb25lbnRzQXJyYXkubGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAJSVByb2plY3QgcHJvamVjdCA9IGVqYkNvbXBvbmVudHNBcnJheVtpbmRleF0uZ2V0UHJvamVjdCgpOwotICAgICAgICBWZWN0b3IgYmVhbnMgPSBKMkVFVXRpbHMuZ2V0QmVhbk5hbWVzKHByb2plY3QpOwotICAgICAgICBTdHJpbmcgY29tcG9uZW50TmFtZSA9IGVqYkNvbXBvbmVudHNBcnJheVtpbmRleF0uZ2V0TmFtZSgpOwotICAgICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBlamJDb21wb25lbnRzQXJyYXlbaW5kZXhdLmdldFByb2plY3QoKS5nZXROYW1lKCk7Ci0gICAgICAgIGVqYkJlYW5OYW1lcy5hZGRBbGwoYmVhbnMpOwotICAgICAgICBlamJDb21wb25lbnROYW1lcy5hZGRBbGwoQ29sbGVjdGlvbnMubkNvcGllcyhiZWFucy5zaXplKCksIGNvbXBvbmVudE5hbWUpKTsKLSAgICAgICAgZWpiQ29tcG9uZW50UHJvamVjdE5hbWVzLmFkZEFsbChDb2xsZWN0aW9ucy5uQ29waWVzKGJlYW5zLnNpemUoKSwgcHJvamVjdE5hbWUpKTsgICAgICAgICAgICAgICAgCi0gICAKLSAgICB9Ci0gICAgYmVhbkxpc3Quc2V0RGF0YShlamJCZWFuTmFtZXMsIGVqYkNvbXBvbmVudE5hbWVzKTsKLSAgICBiZWFuTGlzdC5zZXRJbnB1dChlamJCZWFuTmFtZXMpOwotICAgIAotICAgIC8vQ2FjaGUgdGhlIHJlc3VsdHMgZm9yIG5leHQgdGltZQotICAgIEVKQlRhYmxlVmFsdWVzIGVqYlRhYmxlVmFsdWVzID0gbmV3IEVKQlRhYmxlVmFsdWVzKCk7Ci0gICAgZWpiVGFibGVWYWx1ZXMuY2FjaGVkRWpiQmVhbk5hbWVzID0gZWpiQmVhbk5hbWVzOwotICAgIGVqYlRhYmxlVmFsdWVzLmNhY2hlZEVqYkNvbXBvbmVudE5hbWVzID0gZWpiQ29tcG9uZW50TmFtZXM7Ci0gICAgZWpiVGFibGVWYWx1ZXMuY2FjaGRlZEVqYkNvbXBvbmVudFByb2plY3ROYW1lcyA9IGVqYkNvbXBvbmVudFByb2plY3ROYW1lczsKLSAgICBlamJWYWx1ZXNCeUVBUlNlbGVjdGlvbkNhY2hlLnB1dChjYWNoZUtleSwgZWpiVGFibGVWYWx1ZXMpOyAgICAgICAgCi0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IGluaXRpYWxTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2Vzc2lvbikKLSAgICAgIHsKLSAgICAgICAgU2Vzc2lvbiBzZXNzaW9uID0gKFNlc3Npb24pIG9iamVjdDsKLSAgICAgICAgRUpCSmFyIGphciA9IHNlc3Npb24uZ2V0RWpiSmFyKCk7Ci0gICAgICAgIGlmIChqYXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWFyQ29tcG9uZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0JCQkgICAgICBJVmlydHVhbENvbXBvbmVudFtdIGVqYkNvbXBvbmVudHMgPSBKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFSkJDb21wb25lbnRzRnJvbUVBUihlYXJDb21wb25lbnRzW2ldLmdldFByb2plY3QoKSk7Ci0JCQkgICAgICBmb3IgKGludCBqPTA7IGogPGVqYkNvbXBvbmVudHMubGVuZ3RoOyBqKyspCi0JCQkgICAgICB7Ci0gICAgICAgICAgICAgIEVKQkFydGlmYWN0RWRpdCAgZWpiRWRpdCA9IG51bGw7Ci0gICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKGVqYkNvbXBvbmVudHNbal0pOwotICAgICAgICAgICAgICAgIEVKQlJlc291cmNlIGVqYlJlcyA9IGVqYkVkaXQuZ2V0RUpCSmFyWG1pUmVzb3VyY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZWpiUmVzLmdldEVKQkphcigpID09IGphcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBlYXJMaXN0LnNldFRleHQoZWFyQ29tcG9uZW50c1tpXS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgc2V0QmVhbkxpc3QoZWFyQ29tcG9uZW50c1tpXSk7Ci0gICAgICAgICAgICAgICAgICBiZWFuTGlzdC5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obmV3IEludGVnZXJbXXtuZXcgSW50ZWdlcihlamJCZWFuTmFtZXMuaW5kZXhPZihzZXNzaW9uLmdldE5hbWUoKSkpfSkpOwotICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRCZWFuSW5kZXggPSBuZXcgSW50ZWdlcihlamJCZWFuTmFtZXMuaW5kZXhPZihzZXNzaW9uLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCi0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBpZiAoZWpiRWRpdCE9bnVsbCkKLSAgICAgICAgICAgICAgICAgIGVqYkVkaXQuZGlzcG9zZSgpOwotICAgICAgICAgICAgICB9Ci0JCQkJCi0JCQkgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vSGF2ZW4ndCByZXR1cm5lZCB5ZXQgc28gd2UgZGlkIG5vdCBmaW5kIGFuIEVBUiB0aGF0IGNvbnRhaW5zIHRoaXMgRUpCLiBJbml0aWFsaXplIHRoZSBwYWdlIGFjY29yZGluZ2x5LgotICAgICAgICAgIGVhckxpc3Quc2V0VGV4dChlYXJMaXN0LmdldEl0ZW0oMCkpOwotICAgICAgICAgIHNldEJlYW5MaXN0KG51bGwpOwotICAgICAgICAgIGJlYW5MaXN0LnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihuZXcgSW50ZWdlcltde25ldyBJbnRlZ2VyKGVqYkJlYW5OYW1lcy5pbmRleE9mKHNlc3Npb24uZ2V0TmFtZSgpKSl9KSk7Ci0gICAgICAgICAgc2VsZWN0ZWRCZWFuSW5kZXggPSBuZXcgSW50ZWdlcihlamJCZWFuTmFtZXMuaW5kZXhPZihzZXNzaW9uLmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgCSAgZGlzcGxheVN0cmluZ18gPSAoU3RyaW5nKSBvYmplY3Q7IC8vIHNhdmUgZm9yIGRpc3BsYXkgdXNlCi0gICAgfQotICB9Ci0KLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLQkJU3RyaW5nIHNlbEVKQk5hbWUgPSAoU3RyaW5nKSBlamJCZWFuTmFtZXMuZ2V0KHNlbGVjdGVkQmVhbkluZGV4Ci0JCQkJLmludFZhbHVlKCkpOwotCQlpZiAoc2VsRUpCTmFtZSAhPSBudWxsKSB7Ci0JCQkvLyBHZXQgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgYmVhbiB0byBnZXQgdGhlIGNvcnJlc3BvbmRpbmcKLQkJCS8vIFNlc3Npb24gb2JqZWN0LgotCQkJLy8gVGhlbiByZXR1cm4gdGhlIFNlc3Npb24gb2JqZWN0IGluIGFuIElTdHJ1Y3R1cmVkU2VsZWN0aW9uLgotCQkJU3RyaW5nIGVqYkNvbXBvbmVudE5hbWUgPSAoU3RyaW5nKSBlamJDb21wb25lbnROYW1lcwotCQkJCQkuZ2V0KHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCkpOwotCQkJSVZpcnR1YWxDb21wb25lbnQgZWpiQ29tcG9uZW50ID0gQ29tcG9uZW50VXRpbGl0aWVzCi0JCQkJCS5nZXRDb21wb25lbnQoZWpiQ29tcG9uZW50TmFtZSk7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gZWpiQ29tcG9uZW50LmdldFByb2plY3QoKTsKLQkJCUlNb2RlbFByb3ZpZGVyIHByb3ZpZGVyID0gTW9kZWxQcm92aWRlck1hbmFnZXIKLQkJCQkJLmdldE1vZGVsUHJvdmlkZXIocHJvamVjdCk7Ci0JCQlPYmplY3QgbW9kZWxPYmplY3QgPSBwcm92aWRlci5nZXRNb2RlbE9iamVjdCgpOwotCQkJTGlzdCBzZXNzaW9ucyA9IG5ldyBWZWN0b3IoKTsKLQkJCWJvb2xlYW4gaXNKMkVFNSA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzSkVFUHJvamVjdChwcm9qZWN0KTsKLQkJCWlmIChpc0oyRUU1KSB7Ci0JICAgIAkJLy9hIEpFRTUgcHJvamVjdAotCSAgICAJCUVudGVycHJpc2VCZWFucyBlQmVhbnMgPSAoKG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLkVKQkphciltb2RlbE9iamVjdCkuZ2V0RW50ZXJwcmlzZUJlYW5zKCk7Ci0JICAgIAkJaWYgKGVCZWFucyAhPW51bGwpCi0JICAgIAkJCXNlc3Npb25zID0gZUJlYW5zLmdldFNlc3Npb25CZWFucygpOwotCQkJfSBlbHNlIHsKLQkJCQlzZXNzaW9ucyA9ICgoRUpCSmFyKSBtb2RlbE9iamVjdCkuZ2V0U2Vzc2lvbkJlYW5zKCk7Ci0JCQl9Ci0JCQlmb3IgKEl0ZXJhdG9yIGl0MiA9IHNlc3Npb25zLml0ZXJhdG9yKCk7IGl0Mi5oYXNOZXh0KCk7KSB7Ci0JCQkJT2JqZWN0IG5leHQgPSAoaXQyLm5leHQoKSk7Ci0JCQkJaWYgKGlzSjJFRTUpIHsKLQkJCQkJU2Vzc2lvbkJlYW4gc2Vzc2lvbiA9IChTZXNzaW9uQmVhbikgbmV4dDsKLQkJCQkJaWYgKHNlbEVKQk5hbWUuZXF1YWxzKHNlc3Npb24uZ2V0RWpiTmFtZSgpKSkKLQkJCQkJCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigKLQkJCQkJCQkJbmV3IFNlc3Npb25CZWFuW10geyBzZXNzaW9uIH0pOwotCi0JCQkJfSBlbHNlIHsKLQkJCQkJU2Vzc2lvbiBzZXNzaW9uID0gKFNlc3Npb24pIG5leHQ7Ci0JCQkJCWlmIChzZWxFSkJOYW1lLmVxdWFscyhzZXNzaW9uLmdldE5hbWUoKSkpCi0JCQkJCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oCi0JCQkJCQkJCW5ldyBTZXNzaW9uW10geyBzZXNzaW9uIH0pOwotCQkJCX0KLQotCQkJfQotCQl9Ci0JCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihuZXcgT2JqZWN0WzBdKTsKLQl9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXRTZWxlY3RlZFByb2plY3QoKTsKLSAgICBpZiAocHJvamVjdE5hbWUgIT0gbnVsbCAmJiBwcm9qZWN0TmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICByZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIGlmIChzZWxlY3RlZEJlYW5JbmRleCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU3RyaW5nKSAoZWpiQ29tcG9uZW50TmFtZXMuZWxlbWVudEF0KHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0gICAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCSAgCi0JICBpZiAoZWpiQmVhbk5hbWVzID09IG51bGwpCi0JCSAgcmV0dXJuIGRpc3BsYXlTdHJpbmdfOwotCSAgCi0JICBpbnQgaW5kZXggPSBzZWxlY3RlZEJlYW5JbmRleCA9PSBudWxsID8gMCA6IHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCk7Ci0JICBTdHJpbmcgYmVhbiA9IChTdHJpbmcpIGVqYkJlYW5OYW1lcy5nZXQoaW5kZXgpOwotCSAgcmV0dXJuIGJlYW4gPT0gbnVsbCA/IGRpc3BsYXlTdHJpbmdfIDogYmVhbjsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsgIAkKLSAgICBpZiAoc2VsZWN0ZWRCZWFuSW5kZXggPT0gbnVsbCkKLSAgICB7Ci0gICAgCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLSAgICB9Ci0gICAgCi0gIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldFdpZGdldFNpemUoKSB7Ci0JcmV0dXJuIG5ldyBQb2ludCg0NTAsIDM1MCk7Ci0gIH0gCi0gICAgCi0gIHByaXZhdGUgY2xhc3MgRUpCVGFibGVWYWx1ZXMKLSAgewotICAgIFZlY3RvciBjYWNoZWRFamJCZWFuTmFtZXM7Ci0gICAgVmVjdG9yIGNhY2hlZEVqYkNvbXBvbmVudE5hbWVzOwotICAgIFZlY3RvciBjYWNoZGVkRWpiQ29tcG9uZW50UHJvamVjdE5hbWVzOyAKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCVGFibGVWaWV3ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCVGFibGVWaWV3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1YjRmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0VKQlRhYmxlVmlld2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQxMTk0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci0KLXB1YmxpYyBjbGFzcyBFSkJUYWJsZVZpZXdlciBleHRlbmRzIFRhYmxlVmlld2VyCi17Ci0gIHByaXZhdGUgVmVjdG9yIGJlYW5OYW1lczsKLSAgcHJpdmF0ZSBWZWN0b3IgcHJvamVjdE5hbWVzOwotCi0gIHB1YmxpYyBFSkJUYWJsZVZpZXdlcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgc3VwZXIocGFyZW50LCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5GVUxMX1NFTEVDVElPTik7Ci0gICAgCi0gICAgU3RyaW5nIGNvbHVtblByb3BlcnRpZXNbXSA9IHtDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfVElUTEVfRUpCX0JFQU5fTkFNRVMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9USVRMRV9FSkJfUFJPSkVDVF9OQU1FfTsKLSAgICBpbnQgY29sdW1uc1dpZHRoW10gPSB7NjAsIDIwfTsKLSAgICBpbnQgY29sdW1uTWluc1tdID0gezE3NSwgMTI1fTsKLSAgICAKLSAgICBUYWJsZSB0YWJsZSA9IGdldFRhYmxlKCk7Ci0gICAgdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLSAgICB0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0gICAgVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Qcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFRhYmxlQ29sdW1uIGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUsIGkpOwotICAgICAgY29sdW1uLnNldFRleHQoY29sdW1uUHJvcGVydGllc1tpXSk7Ci0gICAgICBjb2x1bW4ucGFjaygpOwotICAgICAgbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoY29sdW1uc1dpZHRoW2ldLCBjb2x1bW5NaW5zW2ldLCB0cnVlKSk7ICAgICAgCi0gICAgfQotICAgIHRhYmxlLnNldExheW91dChsYXlvdXQpOwotICAgIHNldENvbHVtblByb3BlcnRpZXMoY29sdW1uUHJvcGVydGllcyk7Ci0gICAgc2V0Q29udGVudFByb3ZpZGVyKG5ldyBFSkJDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgc2V0TGFiZWxQcm92aWRlcihuZXcgRUpCTGFiZWxQcm92aWRlcigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGF0YShWZWN0b3IgYmVhbk5hbWVzLCBWZWN0b3IgcHJvamVjdE5hbWVzKQotICB7Ci0gICAgdGhpcy5iZWFuTmFtZXMgPSBiZWFuTmFtZXM7Ci0gICAgdGhpcy5wcm9qZWN0TmFtZXMgPSBwcm9qZWN0TmFtZXM7Ci0gIH0KLSAgcHJpdmF0ZSBjbGFzcyBFSkJMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSW50ZWdlcikKLSAgICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gKChJbnRlZ2VyKSBvYmplY3QpLmludFZhbHVlKCk7Ci0gICAgICAgIGlmIChjb2x1bW5JbmRleCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpIChiZWFuTmFtZXMuZWxlbWVudEF0KGluZGV4KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiAoU3RyaW5nKSAocHJvamVjdE5hbWVzLmVsZW1lbnRBdChpbmRleCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0gIHB1YmxpYyBjbGFzcyBFSkJDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChiZWFuTmFtZXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IHNpemUgPSBiZWFuTmFtZXMuc2l6ZSgpOwotICAgICAgICBPYmplY3RbXSByZXN1bHQgPSBuZXcgT2JqZWN0W3NpemVdOwotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBuZXcgSW50ZWdlcihpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZCwgT2JqZWN0IG5ld29iaikKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWxldGVkKE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9IYW5kbGVyVGFibGVJdGVtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0hhbmRsZXJUYWJsZUl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiZTZmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0hhbmRsZXJUYWJsZUl0ZW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgSGFuZGxlclRhYmxlSXRlbSB7Ci0gIAotICBwcml2YXRlIFN0cmluZyBoYW5kbGVyQ2xhc3NOYW1lOwotICBwcml2YXRlIFN0cmluZyBoYW5kbGVyTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgcG9ydE5hbWU7Ci0gIHByaXZhdGUgaW50IGluZGV4OwotICAKLSAgcHJpdmF0ZSBQb3J0Q29tcG9uZW50IHBvcnQ7Ci0gIHByaXZhdGUgT2JqZWN0IGhhbmRsZXI7Ci0gIHByaXZhdGUgT2JqZWN0IHdzRGVzY1JlZjsKLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBoYW5kbGVyQ2xhc3NOYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIYW5kbGVyQ2xhc3NOYW1lKCkgewotICAgIHJldHVybiBoYW5kbGVyQ2xhc3NOYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gaGFuZGxlckNsYXNzTmFtZSBUaGUgaGFuZGxlckNsYXNzTmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyQ2xhc3NOYW1lKFN0cmluZyBoYW5kbGVyQ2xhc3NOYW1lKSB7Ci0gICAgdGhpcy5oYW5kbGVyQ2xhc3NOYW1lID0gaGFuZGxlckNsYXNzTmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBoYW5kbGVyTmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SGFuZGxlck5hbWUoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXJOYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gaGFuZGxlck5hbWUgVGhlIGhhbmRsZXJOYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJOYW1lKFN0cmluZyBoYW5kbGVyTmFtZSkgewotICAgIHRoaXMuaGFuZGxlck5hbWUgPSBoYW5kbGVyTmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwb3J0LgotICAgKi8KLSAgcHVibGljIFBvcnRDb21wb25lbnQgZ2V0UG9ydCgpIHsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydChQb3J0Q29tcG9uZW50IHBvcnQpIHsKLSAgICB0aGlzLnBvcnQgPSBwb3J0OwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGhhbmRsZXIuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldEhhbmRsZXIoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBoYW5kbGVyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXIoT2JqZWN0IGhhbmRsZXIpIHsKLSAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHBvcnROYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQb3J0TmFtZSgpIHsKLSAgICByZXR1cm4gcG9ydE5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBwb3J0TmFtZSBUaGUgcG9ydE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydE5hbWUoU3RyaW5nIHBvcnROYW1lKSB7Ci0gICAgdGhpcy5wb3J0TmFtZSA9IHBvcnROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaW5kZXguCi0gICAqLwotICBwdWJsaWMgaW50IGdldEluZGV4KCkgewotICAgIHJldHVybiBpbmRleDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpIHsKLSAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NEZXNjUmVmLgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXc0Rlc2NSZWYoKSB7Ci0gICAgcmV0dXJuIHdzRGVzY1JlZjsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHdzRGVzY1JlZiBUaGUgd3NEZXNjUmVmIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzRGVzY1JlZihPYmplY3Qgd3NEZXNjUmVmKSB7Ci0gICAgdGhpcy53c0Rlc2NSZWYgPSB3c0Rlc2NSZWY7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSU9iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiODBjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFDb250cmlidXRvcjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGV4dHJhIG1ldGhvZHMgdGhhdCBPYmplY3QgU2VsZWN0aW9uIFdpZGdldHMKLSAqIG5lZWQgdG8gaW1wbGVtZW50LiAgT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXRzIGFyZSBkaXNwbGF5ZWQgb24gcGFnZSAyCi0gKiBvZiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIC8qKgotICAgKiBUaGUgZnJhbWV3b3JrIHdpbGwgY2FsbCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqIHZhbHVlIHRoYXQgdGhlIHVzZXIgaGFzIHNwZWNpZmllZC4KLSAgICogCi0gICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB0aGUgdXNlciBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pOwotICAKLSAgLyoqCi0gICAqIFRoZSBpbnRlbnQgb2YgdGhlIE9iamVjdCBTZWxlY3Rpb24gV2lkZ2V0IGlzIHRoYXQgdGhlIHVzZXIgaGFzCi0gICAqIHRoZSBvcHBvcnR1bml0eSBjaGFuZ2UvZmluZCB0aGUgb2JqZWN0IHRoYXQgdGhleSB3YW50IHRvIHR1cm4gaW50bwotICAgKiBhIFdlYiBzZXJ2aWNlLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3QgdGhhdCB0aGUgdXNlcgotICAgKiB3YW50IHRvIHR1cm4gaW50byBhIFdlYiBzZXJ2aWNlLiAgVGhpcyBvYmplY3QgbWF5IGJlIGRpZmZlcmVudCB0aGFuCi0gICAqIHRoZSBpbml0aWFsU2VsZWN0aW9uIHBhc3NlZCBpbiBieSB0aGUgc2V0SW5pdGlhbFNlbGVjdGlvbiBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIG9iamVjdFNlbGVjdGlvbiBwYXJhbWV0ZXIgaXMgdmFsaWQgZm9yCi0gICAqIHRoaXMgT2JqZWN0IHNlbGVjdGlvbiB3aWRnZXQuICBBbiBlcnJvciBzdGF0dXMgc2hvdWxkIGJlIHJldHVybmVkCi0gICAqIGlmIHRoaXMgb2JqZWN0IGlzIG5vdCB2YWx1ZS4gIE90aGVyd2lzZSwgYW5kIG9rIHN0YXR1cyBzaG91bGQgYmUKLSAgICogcmV0dXJuZWQKLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3RTZWxlY3Rpb24gdGhlIG9iamVjdCB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbik7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSVByb2plY3QgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0aW9uCi0gICAqIG9iamVjdCB0aGF0IHRoZSB1c2VyIGhhcyBjaG9zZW4gd2l0aCB0aGlzIHdpZGdldC4gIFRoZSB2YWx1ZSBjYW4gYmUgCi0gICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gSVByb2plY3QgZm9yIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBJVmlydHVhbENvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24KLSAgICogb2JqZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGNob3NlbiB3aXRoIHRoaXMgd2lkZ2V0LiAgVGhlIHZhbHVlIGNhbiBiZSAKLSAgICogbnVsbCBpZiB0aGVyZSBpcyBubyBJVmlydHVhbENvbXBvbmVudCBmb3IgdGhpcyBvYmplY3QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0cmluZyB0byBkaXNwbGF5ZWQgaW4gdGhlIFVJIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0Ci0gICAqLwotICBwdWJsaWMgIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgaW5pdGlhbCBzaXplIGZvciB0aGUgd2lkZ2V0IHRvIGJlIGNhbGxlZCBmcm9tIGdldEluaXRpYWxTaXplIGZyb20gYW55IHBhcmVudCBkaWFsb2cKLSAgICovCi0gIHB1YmxpYyBQb2ludCBnZXRXaWRnZXRTaXplKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Qgc2VsZWN0aW9uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYSB2YWxpZCBvYmplY3Qgc2VsZWN0aW9uCi0gICAqLyAgCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9KYXZhQmVhblNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNzZiODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9KYXZhQmVhblNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuUG9ydENvbXBvbmVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEphdmFCZWFuU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBPYmplY3Qgc2VsID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbil2YWx1ZSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAoc2VsIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihjb21wdXRlRnVsbHlRdWFsaWZpZWRKYXZhTmFtZSgoSUZpbGUpc2VsKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0KQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gKChJQ29tcGlsYXRpb25Vbml0KXNlbCkuZ2V0UmVzb3VyY2UoKTsKLSAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihjb21wdXRlRnVsbHlRdWFsaWZpZWRKYXZhTmFtZSgoSUZpbGUpcmVzKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoc2VsIGluc3RhbmNlb2YgU2VydmxldExpbmspCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRCZWFuTmFtZSgoU2VydmxldExpbmspIHNlbCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlRnVsbHlRdWFsaWZpZWRKYXZhTmFtZShJRmlsZSByZXNvdXJjZSkKLSAgewotICAgIElQYXRoIHBhdGggPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotICAgIFN0cmluZyBiYXNlbmFtZSA9IHBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICBTdHJpbmcgYmVhbkNsYXNzID0gIiI7Ci0gICAgaWYgKGJhc2VuYW1lICE9IG51bGwgJiYgYmFzZW5hbWUubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyBiZWFuUGFja2FnZSA9IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShwYXRoKTsKLSAgICAgIGJlYW5DbGFzcyA9IChiZWFuUGFja2FnZSA9PSBudWxsIHx8IGJlYW5QYWNrYWdlLmxlbmd0aCgpID09IDAgPyBiYXNlbmFtZSA6IChiZWFuUGFja2FnZSArICIuIiArIGJhc2VuYW1lKSk7Ci0gICAgICBpZiAoYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIpKQotICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuQ2xhc3Muc3Vic3RyaW5nKDAsIGJlYW5DbGFzcy5sYXN0SW5kZXhPZignLicpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJlYW5DbGFzczsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLSAgICBFT2JqZWN0IGVPYmplY3QgPSBiZWFuLmVDb250YWluZXIoKTsKLSAgICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnRJbXBsKSB7Ci0gICAgICBQb3J0Q29tcG9uZW50SW1wbCBwY2kgPSAoUG9ydENvbXBvbmVudEltcGwpIGVPYmplY3Q7Ci0gICAgICByZXR1cm4gcGNpLmdldFNlcnZpY2VFbmRwb2ludEludGVyZmFjZSgpOwkgICAgICAJCi0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoU2VydmxldExpbmsgbGluaykgeyAgICAKLSAgICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLSAgICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLSAgICAgIHJldHVybiBnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkNDAxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0phdmFCZWFuU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5pbnRlcm5hbC5pbXBsLlBvcnRDb21wb25lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsQmVhbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSmF2YVJlc291cmNlRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIEphdmFCZWFuU2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci17Ci0gIHByaXZhdGUgSVByb2plY3QgICAgICAgICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwotICBwcml2YXRlIENvbXBvc2l0ZSAgICAgICAgICBwYXJlbnRfID0gbnVsbDsKLSAgcHJpdmF0ZSBKYXZhUmVzb3VyY2VGaWx0ZXIgZmlsdGVyXyA9IG5ldyBKYXZhUmVzb3VyY2VGaWx0ZXIoKTsKLSAgcHJpdmF0ZSBJUmVzb3VyY2UgICAgICAgICAgaW5pdGlhbFJlc291cmNlXyA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDEgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QQkNMX1BBR0UgPSAiUEJDTDAwMDEiOwotICAKLSAgcHJpdmF0ZSBUZXh0IGJlYW5DbGFzc1RleHRfOwotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDIgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBmaWVsZCBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9URVhUX0JFQU5fQ0xBU1MgPSAiUEJDTDAwMDIiOwotCi0gIHByaXZhdGUgQnV0dG9uIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQQkNMMDAwMyBmb3IgdGhlIEJlYW4gQ2xhc3MgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UgPSAiUEJDTDAwMDMiOwotCi0gIHByaXZhdGUgQnV0dG9uIGJlYW5SZXNvdXJjZUJyb3dzZUJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQQkNMMDAwNCBmb3IgdGhlIEJlYW4gUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0UgPSAiUEJDTDAwMDQiOwotICAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLQlTdHJpbmcgICAgICAgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7CSAgCi0gICAgdGhpcy5zdGF0dXNMaXN0ZW5lciA9IHN0YXR1c0xpc3RlbmVyOwotICAgIFVJVXRpbHMgICAgICB1aVV0aWxzICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsgCi0gICAgCi0gICAgcGFyZW50XyA9IHBhcmVudDsKLSAgICAKLSAgICBDb21wb3NpdGUgZ3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCA0ICk7Ci0gICAgCi0gICAgZ3JvdXAuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfUEFHRSApOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGdyb3VwLCBwbHVnaW5JZF8gKyAiLiIgKyBJTkZPUE9QX1BCQ0xfUEFHRSApOwotICAgIAotICAgIGJlYW5DbGFzc1RleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KCBncm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JFQU5fQ0xBU1NfTkFNRSwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfVEVYVF9CRUFOX0NMQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0xfVEVYVF9CRUFOX0NMQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgYmVhbkNsYXNzVGV4dF8uYWRkTW9kaWZ5TGlzdGVuZXIoCi0gICAgICBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVNb2RpZnlCZWFuQ2xhc3NUZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIAotICAgIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGdyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRV9DTEFTU0VTLAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRSApOwotICAgIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQnJvd3NlQ2xhc3NlcygpOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotICAgIGJlYW5SZXNvdXJjZUJyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGdyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRV9GSUxFUywKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0UgKTsKLSAgICBiZWFuUmVzb3VyY2VCcm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJyb3dzZUZpbGVzKCk7ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVNb2RpZnlCZWFuQ2xhc3NUZXh0KCkKLSAgewotICAgIHN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KG51bGwpOwotICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLSAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQnJvd3NlQ2xhc3NlcygpCi0gIHsKLSAgICBTaGVsbCBzaGVsbCA9IHBhcmVudF8uZ2V0U2hlbGwoKTsKLSAgICBJVHlwZSBpdHlwZSA9IERpYWxvZ1V0aWxzLmJyb3dzZUNsYXNzZXNBc0lUeXBlKHNoZWxsLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCksIG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coc2hlbGwpKTsKLSAgICBpZiAoaXR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiZWFuQ2xhc3NUZXh0Xy5zZXRUZXh0KGl0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gaXR5cGUuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0gICAgICAgIGlmIChyZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZlclByb2plY3RfID0gcmVzLmdldFByb2plY3QoKTsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXMpOwotICAgICAgICAgIGlmIChjb21wIT1udWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLSAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gam1lKQotICAgICAgewotICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0gICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVCcm93c2VGaWxlcygpCi0gIHsKLSAgICBJUmVzb3VyY2UgdG9wUmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKTsKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBEaWFsb2dVdGlscy5icm93c2VSZXNvdXJjZXMoIHBhcmVudF8uZ2V0U2hlbGwoKSwgdG9wUmVzb3VyY2UsIGluaXRpYWxSZXNvdXJjZV8sIGZpbHRlcl8gKTsKLSAgICBzZXRCZWFuQ2xhc3MocmVzb3VyY2UpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKElSZXNvdXJjZSByZXNvdXJjZSkKLSAgewotICAgIGlmKCByZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUgKQotICAgIHsKLSAgICAgIElQYXRoICBwYXRoICAgICA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7Ci0gICAgICBTdHJpbmcgYmFzZW5hbWUgPSBwYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgICAKLSAgICAgIGlmKCBiYXNlbmFtZSAhPSBudWxsICYmIGJhc2VuYW1lLmxlbmd0aCgpID4gMCApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBiZWFuUGFja2FnZSA9IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShwYXRoKTsKLSAgICAgICAgU3RyaW5nIGJlYW5DbGFzcyA9IChiZWFuUGFja2FnZSA9PSBudWxsIHx8IGJlYW5QYWNrYWdlLmxlbmd0aCgpID09IDAgPyBiYXNlbmFtZSA6IChiZWFuUGFja2FnZSArICIuIiArIGJhc2VuYW1lKSk7Ci0gICAgICAgIAotICAgICAgICBpZiggYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuQ2xhc3Muc3Vic3RyaW5nKCAwLCBiZWFuQ2xhc3MubGFzdEluZGV4T2YoJy4nKSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBiZWFuQ2xhc3NUZXh0Xy5zZXRUZXh0KGJlYW5DbGFzcyk7Ci0gICAgICAgIHNlcnZlclByb2plY3RfID0gIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHBhdGgpOwotICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgewkKLSAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhTZXJ2aWNlSW1wbEJlYW5JbXBsIHNlcnZpY2VJbXBsKQotICB7Ci0gICAgaWYoIHNlcnZpY2VJbXBsICE9IG51bGwgKQotICAgIHsKLSAgICAgIEVPYmplY3QgZU9iamVjdCA9IHNlcnZpY2VJbXBsLmVDb250YWluZXIoKTsKLSAgICAgIGlmKGVPYmplY3QgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50SW1wbCl7Ci0gICAgICAJUG9ydENvbXBvbmVudEltcGwgcGNpID0gKFBvcnRDb21wb25lbnRJbXBsKWVPYmplY3Q7Ci0gICAgICAJU3RyaW5nIGJlYW5DbGFzcyA9IHBjaS5nZXRTZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UoKTsKLSAgICAgIAliZWFuQ2xhc3NUZXh0Xy5zZXRUZXh0KGJlYW5DbGFzcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKEJlYW5MaW5rIHNlcnZpY2VJbXBsKQotICB7Ci0gICAgaWYoIHNlcnZpY2VJbXBsICE9IG51bGwgKQotICAgIHsKLSAgICAgIEVPYmplY3QgZU9iamVjdCA9IHNlcnZpY2VJbXBsLmVDb250YWluZXIoKTsKLSAgICAgIGlmKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW5JbXBsKXsKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKFNlcnZpY2VJbXBsQmVhbkltcGwpZU9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgIAlJRmlsZSBpRmlsZSA9IChJRmlsZSlvYmplY3Q7Ci0gICAgICAJU3RyaW5nIGZpbGVFeHQgPSBpRmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgIAlpZiAoZmlsZUV4dC5lcXVhbHMoImphdmEiKSB8fCBmaWxlRXh0LmVxdWFscygiY2xhc3MiKSkKLSAgICAgICAgICBzZXRCZWFuQ2xhc3MoaUZpbGUpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKChJQ29tcGlsYXRpb25Vbml0KW9iamVjdCkuZ2V0UmVzb3VyY2UoKSk7Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW5JbXBsKQotICAgICAgCXNldEJlYW5DbGFzcygoU2VydmljZUltcGxCZWFuSW1wbClvYmplY3QpOwotICAgICAgZWxzZSBpZihvYmplY3QgaW5zdGFuY2VvZiBCZWFuTGluaykKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKEJlYW5MaW5rKW9iamVjdCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihiZWFuQ2xhc3NUZXh0Xy5nZXRUZXh0KCkpOwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlckNvbXBvbmVudE5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgU3RyaW5nIGJlYW5DbGFzc05hbWUgPSBiZWFuQ2xhc3NUZXh0Xy5nZXRUZXh0KCkudHJpbSgpOwotICAgIGlmIChiZWFuQ2xhc3NOYW1lID09IG51bGwgfHwgYmVhbkNsYXNzTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfQkVBTl9DQU5OT1RfQkVfRU1QVFkpOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSB7Ci0JLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiAiSmF2YSBiZWFuIHN0cmluZyAiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNzdkYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNlbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0KLXB1YmxpYyBjbGFzcyBPYmplY3RTZWxlY3Rpb25GcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQgaW1wbGVtZW50cyBDb25kaXRpb24KLXsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcjsKLSAgcHJpdmF0ZSBib29sZWFuIGhhc09iamVjdFNlbGVjdGlvbldpZGdldDsKLQotICBwdWJsaWMgT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBCb29sZWFuRnJhZ21lbnQgYm9vbEZyYWdtZW50ID0gbmV3IEJvb2xlYW5GcmFnbWVudChuZXcgU2ltcGxlRnJhZ21lbnQoIk9iamVjdFNlbGVjdGlvbldpZGdldCIpLCBuZXcgU2ltcGxlRnJhZ21lbnQoIiIpLCB0aGlzKTsKLSAgICBhZGQoYm9vbEZyYWdtZW50KTsKLSAgICBhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gICAgaGFzT2JqZWN0U2VsZWN0aW9uV2lkZ2V0ID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCByZXRyaWV2ZSB0aGUgZGF0YSBtYXBwaW5ncyBmb3IgdGhpcyBjb21tYW5kIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIE9iamVjdFNlbGVjdGlvbldpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbkZyYWdtZW50LmNsYXNzLCAiVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbkZyYWdtZW50LmNsYXNzLCAiVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJQcm9qZWN0IiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICB7Ci0gICAgcmV0dXJuIGhhc09iamVjdFNlbGVjdGlvbldpZGdldDsKLSAgfQotCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRUeXBlUnVudGltZVNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gdHlwZVJ1bnRpbWVTZXJ2ZXI7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHR5cGVSdW50aW1lU2VydmVyIFRoZSB0eXBlUnVudGltZVNlcnZlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcikKLSAgewotICAgIHRoaXMudHlwZVJ1bnRpbWVTZXJ2ZXIgPSB0eXBlUnVudGltZVNlcnZlcjsKLSAgICBpZiAodHlwZVJ1bnRpbWVTZXJ2ZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3N0ID0gdHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0VHlwZUlkKCk7Ci0KLSAgICAgIGludCBzY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh3c3QpOwotICAgICAgU3RyaW5nIGltcGxJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0gICAgICB7Ci0gICAgICAgIC8vTXVzdCBoYXZlIFdTREwgb2JqZWN0IHNlbGVjdGlvbi4gTm8gY2hvaWNlLgotICAgICAgICBoYXNPYmplY3RTZWxlY3Rpb25XaWRnZXQ9dHJ1ZTsgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgICAgaWYgKHdzaW1wbCE9bnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gd3NpbXBsLmdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpOyAKLSAgICAgICAgICBoYXNPYmplY3RTZWxlY3Rpb25XaWRnZXQgPSBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCAhPSBudWxsICYmIG9iamVjdFNlbGVjdGlvbldpZGdldElkLmxlbmd0aCgpID4gMDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM3OGUxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MzAgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgVXBkYXRlZCBwYXRjaCBmb3IgdGhpcyBkZWZlY3QuCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKiAyMDA3MDMyNiAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0KLXB1YmxpYyBjbGFzcyBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkXzsKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiAgIG9iamVjdFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgSU9iamVjdFNlbGVjdGlvbldpZGdldCBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICAgICAgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciAgICAgIHBhcnNlcl87Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICAgdG9wRG93bl8gPSBmYWxzZTsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIC8vIFRyYW5zZm9ybWF0aW9uCi0gICAgaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldElkXyAhPSBudWxsICYmIG9iamVjdFNlbGVjdGlvbldpZGdldElkXy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgICAgICAgICAgPSBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFRyYW5zZm9ybWVyKG9iamVjdFNlbGVjdGlvbldpZGdldElkXyk7Ci0gICAgICBPYmplY3QgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybWVyID09IG51bGwgPyBudWxsIDogdHJhbnNmb3JtZXIudHJhbnNmb3JtKG9iamVjdFNlbGVjdGlvbl8pOwotICAgICAgCi0gICAgICBpZiAodHJhbnNmb3JtZWRTZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICAgIHsKLSAgICAgICAgb2JqZWN0U2VsZWN0aW9uXyA9IChJU3RydWN0dXJlZFNlbGVjdGlvbil0cmFuc2Zvcm1lZFNlbGVjdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0JCi0gICAgLy8gVmFsaWRhdGlvbgotICAgIElTdGF0dXMgc3RhdHVzID0gKG9iamVjdFNlbGVjdGlvbldpZGdldF8gIT0gbnVsbCkgPyBvYmplY3RTZWxlY3Rpb25XaWRnZXRfLnZhbGlkYXRlU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKSA6IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpICE9IFN0YXR1cy5PSyAmJiBlbnYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotCQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHR5cGVSdW50aW1lU2VydmVyIFRoZSB0eXBlUnVudGltZVNlcnZlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcikKLSAgewotICAgIGlmICh0eXBlUnVudGltZVNlcnZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB3c3QgPSB0eXBlUnVudGltZVNlcnZlci5nZXRUeXBlSWQoKTsKLQotICAgICAgaW50IHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBTdHJpbmcgaW1wbElkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLQotICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxCeUlkKGltcGxJZCk7Ci0JICAgIC8vSVdlYlNlcnZpY2VUeXBlIHdzdCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VUeXBlQnlJZCh0eXBlUnVudGltZVNlcnZlci5nZXRUeXBlSWQoKSk7Ci0KLSAgICAgIGlmICh3c2ltcGwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gbnVsbDsKLSAgICAgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiOwotICAgICAgICAgIHRvcERvd25fID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IHdzaW1wbC5nZXRPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIAotCQkgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWRfID0gb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQ7Ci0gICAgICAgIAotCQkgICAgT2JqZWN0IG9iamVjdCA9IE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0U2VsZWN0aW9uV2lkZ2V0KG9iamVjdFNlbGVjdGlvbldpZGdldElkXyk7Ci0gICAgICAgIAotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbldpZGdldCApCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VsZWN0aW9uLgotICAgKi8KLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0U2VsZWN0aW9uXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlbGVjdGlvbiBUaGUgc2VsZWN0aW9uIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICBvYmplY3RTZWxlY3Rpb25fID0gb2JqZWN0U2VsZWN0aW9uOwotICAgIAotICAgIC8vU2V0IHRoZSBwcm9qZWN0IGlmIHlvdSBjYW4KLSAgICBpZiAocHJvamVjdF89PW51bGwpCi0gICAgewotICAgICAgcHJvamVjdF8gPSBnZXRQcm9qZWN0RnJvbU9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICAvL1NldCB0aGUgY29tcG9uZW50TmFtZSBpZiB5b3UgY2FuCi0gICAgaWYgKGNvbXBvbmVudE5hbWVfID09IG51bGwpCi0gICAgewotICAgICAgY29tcG9uZW50TmFtZV8gPSBnZXRDb21wb25lbnROYW1lRnJvbU9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgV1NETCBzZWxlY3Rpb24gb2JqZWN0LiAgSWYgaXQgaXMgd2UgbmVlZAotICAgIC8vIHRvIHVud3JhcCBpdC4KLSAgICBpZiggb2JqZWN0U2VsZWN0aW9uICE9IG51bGwgJiYgIW9iamVjdFNlbGVjdGlvbi5pc0VtcHR5KCkgKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBvYmplY3RTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBXU0RMU2VsZWN0aW9uV3JhcHBlciApCi0gICAgICB7Ci0gICAgICAgIFdTRExTZWxlY3Rpb25XcmFwcGVyIHdzZGxXcmFwcGVyID0gKFdTRExTZWxlY3Rpb25XcmFwcGVyKW9iamVjdDsKLSAgICAgICAgCi0gICAgICAgIG9iamVjdFNlbGVjdGlvbl8gPSB3c2RsV3JhcHBlci53c2RsU2VsZWN0aW9uOwotICAgICAgICBwYXJzZXJfICAgICAgICAgID0gd3NkbFdyYXBwZXIucGFyc2VyOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgaWYgKHByb2plY3RfID09IG51bGwgJiYgdG9wRG93bl8pCi0gICAgICBwcm9qZWN0XyA9IGdldFByb2plY3RGcm9tVHJhbnNmb3JtZWRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRoaXMucHJvamVjdF8gPSBwcm9qZWN0OwotICB9ICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50TmFtZV8gPT0gbnVsbCAmJiB0b3BEb3duXykKLSAgICAgIGNvbXBvbmVudE5hbWVfID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UcmFuc2Zvcm1lZFNlbGVjdGlvbigpOwotICAgIHJldHVybiBjb21wb25lbnROYW1lXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNvbXBvbmVudE5hbWVfID0gY29tcG9uZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHBhcnNlcl8uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlcl87Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNQcm90b2NvbChTdHJpbmcgdXJsKSB7IAotICAgIHJldHVybiB1cmwuaW5kZXhPZigiOiIpICE9IC0xOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVJlc291cmNlIGZpbmRSZXNvdXJjZUZyb21TZWxlY3Rpb24oT2JqZWN0IHNlbGVjdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCSAgCi0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24pOyAKLQkgIAotICAgICAgLy8gdHJ5IGZpbmRpbmcgYXQgbGVhc3QgdGhlIHByb2plY3QgdXNpbmcgdGhlIEVNRiB3YXkKLSAgICAgIGlmIChyZXNvdXJjZSA9PSBudWxsICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgICAgICAgcmVzb3VyY2UgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VsZWN0aW9uKTsKLQkgIAotICAgICAgcmV0dXJuIHJlc291cmNlOwotICB9Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3RGcm9tVHJhbnNmb3JtZWRTZWxlY3Rpb24oKSB7Ci0gICAgaWYgKG9iamVjdFNlbGVjdGlvbl8gIT0gbnVsbCAmJiBvYmplY3RTZWxlY3Rpb25fLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBvYmplY3RTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICBTdHJpbmcgc3RyID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvUGF0aCgoU3RyaW5nKSBvYmopOwotICAgICAgICBpZiAoaGFzUHJvdG9jb2woc3RyKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihuZXcgUGF0aChzdHIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gZmluZFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkKLSAgICAgICAgCXJldHVybiAoSVByb2plY3QpIHJlc291cmNlOwotICAgICAgICAgIElQcm9qZWN0IHAgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihyZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKLSAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21UcmFuc2Zvcm1lZFNlbGVjdGlvbigpIHsKLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uXyAhPSBudWxsICYmIG9iamVjdFNlbGVjdGlvbl8uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IG9iamVjdFNlbGVjdGlvbl8uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKSB7IAotICAgICAgICBTdHJpbmcgc3RyID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvUGF0aCgoU3RyaW5nKSBvYmopOwotICAgICAgICBpZiAoaGFzUHJvdG9jb2woc3RyKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKG5ldyBQYXRoKHN0cikpOwotICAgICAgICByZXR1cm4gY29tcCA9PSBudWxsID8gbnVsbCA6IGNvbXAuZ2V0TmFtZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsJICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gZmluZFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgCi0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzb3VyY2UpOwotICAgICAKLSAgICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiMjkxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODMwICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVwZGF0ZWQgcGF0Y2ggZm9yIHRoaXMgZGVmZWN0LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgc3RhdGljIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5IGluc3RhbmNlOwotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudFtdICAgICAgICBlbGVtZW50czsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkU2VsZWN0aW9uV2lkZ2V0czsKLSAgCi0gIHByaXZhdGUgT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkoKQotICB7Ci0gICAgZWxlbWVudHMgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgIm9iamVjdFNlbGVjdGlvbldpZGdldCIpOwotICAgIGNhY2hlZFNlbGVjdGlvbldpZGdldHMgPSBuZXcgSGFzaHRhYmxlKCk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaWQgaWYgdGhlIHNlbGVjdGlvbiB3aWRnZXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlmIGhhcyBiZWVuIHNwZWNpZmllZC4gIE90aGVyd2lzZQotICAgKiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIFRyYW5zZm9ybWVyIGdldFRyYW5zZm9ybWVyKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgVGFibGVFbnRyeSAgZW50cnkgID0gZ2V0VGFibGVFbnRyeSggaWQgKTsKLSAgICBUcmFuc2Zvcm1lciByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBlbnRyeSAhPSBudWxsICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGVudHJ5LmVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigidHJhbnNmb3JtZXIiKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBUcmFuc2Zvcm1lciApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSAoVHJhbnNmb3JtZXIpb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKXt9ICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaWQgaWYgdGhlIHNlbGVjdGlvbiB3aWRnZXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBleHRlcm5hbCBtb2RpZnkgYXR0cmlidXRlIGlmCi0gICAqIGl0IGhhcyBiZWVuIHNwZWNpZmllZC4gIE90aGVyd2lzZSBmYWxzZSBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEV4dGVybmFsTW9kaWZ5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgVGFibGVFbnRyeSBlbnRyeSAgPSBnZXRUYWJsZUVudHJ5KCBpZCApOwotICAgIGJvb2xlYW4gICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYoIGVudHJ5ICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0cmluZyBtb2RpZnlTdHJpbmcgPSBlbnRyeS5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZXh0ZXJuYWxfbW9kaWZ5Iik7IAotICAgICAgCi0gICAgICByZXN1bHQgPSBuZXcgQm9vbGVhbiggbW9kaWZ5U3RyaW5nICkuYm9vbGVhblZhbHVlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXRzIHRoZSBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGJhc2VkIG9uIHRoZSBzZWxlY3Rpb25JZC4gIElmIG9uZSBpcwotICAgKiBub3QgZm91bmQgbnVsbCBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb25JZCB0aGUgSUQgb2YgdGhlIHNlbGVjdGlvbiB3aWRnZXQuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0U2VsZWN0aW9uV2lkZ2V0KCBTdHJpbmcgc2VsZWN0aW9uSWQgKQotICB7Ci0gICAgVGFibGVFbnRyeSBlbnRyeSA9IGdldFRhYmxlRW50cnkoIHNlbGVjdGlvbklkICk7Ci0gICAgCi0gICAgcmV0dXJuIGVudHJ5ID09IG51bGwgPyBudWxsIDogZW50cnkub2JqZWN0U2VsZWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICBlbGVtZW50cyA9IG51bGw7Ci0gICAgY2FjaGVkU2VsZWN0aW9uV2lkZ2V0cyA9IG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgVGFibGVFbnRyeSBnZXRUYWJsZUVudHJ5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgaWYoIGlkID09IG51bGwgKSByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBUYWJsZUVudHJ5IGVudHJ5ID0gKFRhYmxlRW50cnkpY2FjaGVkU2VsZWN0aW9uV2lkZ2V0cy5nZXQoIGlkICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50cy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTsKLSAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIGVsZW1JZCAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggImlkIiApOwotICAgICAgCi0gICAgICAgIGlmKCBpZC5lcXVhbHMoIGVsZW1JZCApICkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHx8IG9iamVjdCBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZW50cnkgPSBuZXcgVGFibGVFbnRyeSgpOwotICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgZW50cnkub2JqZWN0U2VsZWN0aW9uID0gb2JqZWN0OwotICAgICAgICAgICAgICBjYWNoZWRTZWxlY3Rpb25XaWRnZXRzLnB1dCggaWQsIGVudHJ5ICk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKXt9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFRhYmxlRW50cnkKLSAgewotICAgIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgIGVsZW1lbnQ7Ci0gICAgcHVibGljIE9iamVjdCAgICAgICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWExYTU5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNCAgIDEyOTM4NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTIyMCAgIDE2MTIzMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQuc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSBjYWxsZWQgdHdpY2UgZWFjaCB0aW1lIEJyb3dzZSBwcmVzc2VkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotCi1wdWJsaWMgY2xhc3MgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci17Ci0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudDsKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgY29tcG9zaXRlOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbXBvbmVudE5hbWU7Ci0gIHByaXZhdGUgSU9iamVjdFNlbGVjdGlvbldpZGdldCBjaGlsZDsKLSAgcHJpdmF0ZSBQb2ludCB3aWRnZXRTaXplXzsKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnRDb21wb3NpdGUsIExpc3RlbmVyIHN0YXRMaXN0ZW5lcikKLSAgewotICAgIHRoaXMucGFyZW50ID0gcGFyZW50Q29tcG9zaXRlOwotICAgIHRoaXMuc3RhdHVzTGlzdGVuZXIgPSBzdGF0TGlzdGVuZXI7Ci0gICAgY29tcG9zaXRlID0gbnVsbDsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpewotCSAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSB0eXBlUnVudGltZVNlcnZlciBUaGUgdHlwZVJ1bnRpbWVTZXJ2ZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIpCi0gIHsKLSAgICBpZiAoY29tcG9zaXRlICE9IG51bGwpCi0gICAgewotICAgICAgY29tcG9zaXRlLmRpc3Bvc2UoKTsKLSAgICAgIGNoaWxkID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHR5cGVSdW50aW1lU2VydmVyICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHdzdCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFR5cGVJZCgpOwotICAgICAgaW50IHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBTdHJpbmcgaW1wbElkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLSAgICAgIFdlYlNlcnZpY2VJbXBsIHdzaW1wbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsQnlJZChpbXBsSWQpOwotICAgICAgCi0JICAgIC8vSVdlYlNlcnZpY2VUeXBlIHdzdCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMuZ2V0V2ViU2VydmljZVR5cGVCeUlkKHR5cGVSdW50aW1lU2VydmVyLmdldFR5cGVJZCgpKTsKLSAgICAgIGlmICh3c2ltcGwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gbnVsbDsKLSAgICAgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gd3NpbXBsLmdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0U2VsZWN0aW9uV2lkZ2V0KCBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCApOwotICAgICAgICAKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25XaWRnZXQgKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGQgPSAoSU9iamVjdFNlbGVjdGlvbldpZGdldClvYmplY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBjaGlsZCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIENvbnRyb2wgc2hlbGwgPSBwYXJlbnQuZ2V0U2hlbGwoKTsKLSAgICAgICAgICBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgICAgICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgICAgICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgICAgICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgICAgICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgICAgICAgY29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgICAgICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotICAgICAgICAgIGNoaWxkLmFkZENvbnRyb2xzKGNvbXBvc2l0ZSwgc3RhdHVzTGlzdGVuZXIpOwotCi0gICAgICAgICAgUG9pbnQgb3JpZ1NpemUgPSBzaGVsbC5nZXRTaXplKCk7Ci0gICAgICAgICAgUG9pbnQgY29tcFNpemUgPSBjb21wb3NpdGUuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgICAgICBpbnQgICBuZXdYICAgICA9IG9yaWdTaXplLng7Ci0gICAgICAgICAgaW50ICAgbmV3WSAgICAgPSBvcmlnU2l6ZS55OwotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgLy8gTm90ZTogd2UgYXJlIHRyeWluZyB0byBkZXRlcm1pbmUgaGVyZSBpZiB0aGUgd2l6YXJkIHBhZ2Ugc2hvdWxkCi0gICAgICAgICAgLy8gICAgICAgYmUgcmVzaXplZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCB0aGF0IGlzCi0gICAgICAgICAgLy8gICAgICAgZ2l2ZW4gdG8gdXMgYnkgdGhlIGV4dGVuc2lvbi4gIFRoZSBoYXJkIGNvZGVkIGNvbnN0YW50cwotICAgICAgICAgIC8vICAgICAgIGJlbG93IHJlcHJlc2VudCB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgcGl4ZWxzIHRoYXQgbmVlZAotICAgICAgICAgIC8vICAgICAgIHRvIGdvIGFyb3VuZCBvYmplY3Qgc2VsZWN0aW9uIGNvbnRyb2wuICBIb3BlZnVsbHksIGEgbW9yZQotICAgICAgICAgIC8vICAgICAgIHByb2dyYW1hdGljIG1ldGhvZCBvZiBkb2luZyB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgIGlmKCBjb21wU2l6ZS54ICsgMjAgPiBvcmlnU2l6ZS54ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuZXdYID0gY29tcFNpemUueCArIDIwOwotICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIGlmKCBjb21wU2l6ZS55ICsgMjA1ID4gb3JpZ1NpemUueSApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmV3WSA9IGNvbXBTaXplLnkgKyAyMDU7Ci0gICAgICAgICAgfQotICAgCi0gICAgICAgICAgd2lkZ2V0U2l6ZV8gPSBuZXcgUG9pbnQobmV3WCwgbmV3WSk7ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gKGNoaWxkICE9IG51bGwpID8gY2hpbGQuZ2V0U3RhdHVzKCkgOiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgcHJvamVjdCA9IGdldFByb2plY3RGcm9tSW5pdGlhbFNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uKTsKLSAgICBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21Jbml0aWFsU2VsZWN0aW9uKGluaXRpYWxTZWxlY3Rpb24pOwotICAgIGlmIChjaGlsZCAhPSBudWxsKQotICAgICAgY2hpbGQuc2V0SW5pdGlhbFNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uKTsKLSAgfQotICAgIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiAoY2hpbGQgIT0gbnVsbCkgPyBjaGlsZC5nZXRPYmplY3RTZWxlY3Rpb24oKSA6IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIHJldHVybiAoY2hpbGQgIT0gbnVsbCkgPyBjaGlsZC52YWxpZGF0ZVNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pIDogU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgaWYgKGNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgSVByb2plY3QgcCA9IGNoaWxkLmdldFByb2plY3QoKTsKLSAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICAgIHJldHVybiBwOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gcHJvamVjdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIGlmIChjaGlsZCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBjbmFtZSA9IGNoaWxkLmdldENvbXBvbmVudE5hbWUoKTsKLSAgICAgIGlmIChjbmFtZSAhPSBudWxsICYmIGNuYW1lLmxlbmd0aCgpPjApCi0gICAgICAgIHJldHVybiBjbmFtZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9ICAgIAotCSAKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0gICAgICAgICAgaWYgKGNvbXAgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7ICAKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCXJldHVybiBjaGlsZC5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOyAgICAKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldFdpZGdldFNpemUoKQotICB7Ci0JICBQb2ludCBjaGlsZFdpZGdldFNpemUgPSBjaGlsZC5nZXRXaWRnZXRTaXplKCk7Ci0JICBpZiAoY2hpbGRXaWRnZXRTaXplID09IG51bGwpCi0JCSAgCSAgcmV0dXJuIHdpZGdldFNpemVfOwotCSAgcmV0dXJuIGNoaWxkV2lkZ2V0U2l6ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9UaW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9UaW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjUwNjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvVGltZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1wdWJsaWMgY2xhc3MgVGltZXIgZXh0ZW5kcyBUaHJlYWQKLXsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIE9ORV9TRUNPTkQgPSAxMDAwOwotICBwcml2YXRlIGxvbmcgcmVmcmVzaFRpbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1J1bm5pbmcgPSB0cnVlOwotICBwcml2YXRlIERpc3BsYXkgZGlzcGxheTsKLSAgcHJpdmF0ZSBSdW5uYWJsZSBydW5uYWJsZTsKLQotICBwcml2YXRlIFRpbWVyKERpc3BsYXkgZGlzcGxheSwgUnVubmFibGUgcnVubmFibGUpCi0gIHsKLSAgICB0aGlzLmRpc3BsYXkgPSBkaXNwbGF5OwotICAgIHRoaXMucnVubmFibGUgPSBydW5uYWJsZTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFRpbWVyIG5ld0luc3RhbmNlKFRpbWVyIHRpbWVyLCBEaXNwbGF5IGRpc3BsYXksIFJ1bm5hYmxlIHJ1bm5hYmxlKQotICB7Ci0gICAgaWYgKCFUaW1lci5pc1J1bm5pbmcodGltZXIpKQotICAgICAgcmV0dXJuIG5ldyBUaW1lcihkaXNwbGF5LCBydW5uYWJsZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRpbWVyOwotICB9Ci0gIAotICBwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBib29sZWFuIGlzUnVubmluZyhUaW1lciB0aW1lcikKLSAgewotICAgIHJldHVybiB0aW1lciAhPSBudWxsICYmIHRpbWVyLmlzUnVubmluZzsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGFydFRpbWVyKCkKLSAgewotICAgIHJlZnJlc2hUaW1lID0gZ2V0Q3VycmVudFRpbWUoKSArIE9ORV9TRUNPTkQ7Ci0gICAgaWYgKCFpc0FsaXZlKCkpCi0gICAgICB0aGlzLnN0YXJ0KCk7Ci0gIH0KLQotICBwcml2YXRlIGxvbmcgZ2V0Q3VycmVudFRpbWUoKQotICB7Ci0gICAgcmV0dXJuIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpLmdldFRpbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBsb25nIGN1cnJUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTsKLSAgICB3aGlsZSAoY3VyclRpbWUgPCByZWZyZXNoVGltZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc2xlZXAocmVmcmVzaFRpbWUgLSBjdXJyVGltZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBjdXJyVGltZSA9IGdldEN1cnJlbnRUaW1lKCk7Ci0gICAgfQotICAgIGlzUnVubmluZyA9IGZhbHNlOwotICAgIGRpc3BsYXkuc3luY0V4ZWMocnVubmFibGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRlV1NETEpvYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0ZVdTRExKb2IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI3ZWUwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRlV1NETEpvYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMSm9iIGV4dGVuZHMgSm9iIHsKLQkKLQlmaW5hbCBwdWJsaWMgc3RhdGljIFN0cmluZyBWQUxJREFURV9XU0RMX0pPQl9GQU1JTFkgPSAiVmFsaWRhdGVXU0RMSm9iSmFtaWx5IjsKLQkKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJJXyA9IG51bGw7Ci0JcHJpdmF0ZSBJVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxpZGF0aW9uTWVzc2FnZXNfID0gbnVsbDsKLQlwcml2YXRlIGludCB2YWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5XyA9IC0xOyAvLyBkZWZhdWx0IHZhbHVlCi0KLQlwdWJsaWMgVmFsaWRhdGVXU0RMSm9iKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXN1cGVyKCJWYWxpZGF0ZVdTRExKb2IiKTsKLQkJd3NkbFVSSV8gPSB3c2RsVVJJOwotCX0KLQotCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotCSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxSZXBvcnQgPSB3c2RsVmFsaWRhdG9yLnZhbGlkYXRlKHdzZGxVUklfKTsKLQkgICAgdmFsaWRhdGlvbk1lc3NhZ2VzXyA9IHZhbFJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQkgICAgcmVwb3J0U3VtbWFyeSgpOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JLy8gY2FsY3VsYXRlIHRoZSBoaWdoZXIgc2V2ZXJpdHkgZm9yIGFsbCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcwotCXByaXZhdGUgdm9pZCByZXBvcnRTdW1tYXJ5KCkgewotCQlpbnQgaTsKLQkJaW50IHNldmVyaXR5OwotCQlpbnQgZXJyb3JDb3VudCA9IDA7Ci0JCWludCB3YXJuaW5nQ291bnQgPSAwOwotCQlmb3IgKGk9MDsgaTx2YWxpZGF0aW9uTWVzc2FnZXNfLmxlbmd0aCAmJiBlcnJvckNvdW50ID09IDA7IGkrKykgewotCQkJc2V2ZXJpdHkgPSB2YWxpZGF0aW9uTWVzc2FnZXNfW2ldLmdldFNldmVyaXR5KCk7Ci0JCQlzd2l0Y2ggKHNldmVyaXR5KSB7Ci0JCQljYXNlIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1I6Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkc6Ci0JCQkJd2FybmluZ0NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvckNvdW50ID4gMCkgewotCQkJdmFsaWRhdGlvbk1lc3NhZ2VTZXZlcml0eV8gPSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SOwotCQl9IGVsc2UgaWYgKHdhcm5pbmdDb3VudCA+IDApIHsKLQkJCXZhbGlkYXRpb25NZXNzYWdlU2V2ZXJpdHlfID0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HOwotCQl9Ci0JCQotCX0KLQotCXB1YmxpYyBib29sZWFuIGJlbG9uZ3NUbyhPYmplY3QgZmFtaWx5KQotCXsKLQkJcmV0dXJuIGZhbWlseSA9PSBWQUxJREFURV9XU0RMX0pPQl9GQU1JTFk7Ci0JfQotCQotCXB1YmxpYyBJVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKSB7Ci0JCXJldHVybiB2YWxpZGF0aW9uTWVzc2FnZXNfOwotCX0KLQkKLQlwdWJsaWMgaW50IGdldFZhbGlkYXRpb25NZXNzYWdlU2V2ZXJpdHkoKSB7Ci0JCXJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5XzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKSB7Ci0JCXJldHVybiB3c2RsVVJJXzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3N2Y1ZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxMCAgIDEzMTM1MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDQxMSAgIDEzNjEzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjAgICAxMzYyMjEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2hhcmVkSW1hZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIGludCBERUZBVUxUX1RBQkxFX0hFSUdIVF9ISU5UID0gMTAwOwotICBwcml2YXRlIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyXzsKLSAgcHJpdmF0ZSBUYWJsZSB0YWJsZV87Ci0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2UgPSBudWxsOwotICBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbHVtbnNfW10gPSB7Q29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX1NFVkVSSVRZLAotCSAgCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTElORSwKLQkgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX0NPTFVNTiwKLQkgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX01FU1NBR0V9OwotICBzdGF0aWMgZmluYWwgaW50IGNvbHVtbnNXaWR0aF9bXSA9IHsxMiwgMTAsIDEwLCA2MH07Ci0gIHN0YXRpYyBmaW5hbCBpbnQgY29sdW1uTWluc19bXSA9IHs2MCwgNTAsIDUwLCAzMDB9OwotCi0gIAotCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsgCi0gICAKLQlDb21wb3NpdGUgIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JR3JpZExheW91dCBnbCAgICAgICAgPSBuZXcgR3JpZExheW91dCgpOwotCQotCWdsLm1hcmdpbkhlaWdodCA9IDA7Ci0JZ2wubWFyZ2luV2lkdGggPSAwOwotCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkKLSAgICBUZXh0IG1lc3NhZ2VMYWJlbCA9IG5ldyBUZXh0KCBjb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOwotICAgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVkFMSURBVEVfTUVTU0FHRVMpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgbWVzc2FnZUxhYmVsLnNldExheW91dERhdGEoZ2QpOwotICAgIG1lc3NhZ2VMYWJlbC5zZXRUb29sVGlwVGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFICk7Ci0KLQl0YWJsZV8gPSBuZXcgVGFibGUoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkJPUkRFUik7Ci0JZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQlnZC5oZWlnaHRIaW50ID0gREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVDsKLQl0YWJsZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0JdGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JdGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQl0YWJsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVEFCTEVfVkFMSURBVEVfTUVTU0FHRSApOwotCVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykKLQl7Ci0JICBUYWJsZUNvbHVtbiB0YWJsZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZV8sIFNXVC5OT05FKTsKLQkgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotCSAgdGFibGVDb2x1bW4ucGFjaygpOwotCSAgQ29sdW1uV2VpZ2h0RGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEoY29sdW1uc1dpZHRoX1tpXSwgY29sdW1uTWluc19baV0sIHRydWUpOwotCSAgdGFibGVMYXlvdXQuYWRkQ29sdW1uRGF0YShjb2x1bW5EYXRhKTsKLQl9Ci0JdGFibGVfLnNldExheW91dCh0YWJsZUxheW91dCk7Ci0KLQl0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGVfKTsKLQotCXRhYmxlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIobmV3IExpc3RDb250ZW50UHJvdmlkZXIoKSk7Ci0JdGFibGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IExpc3RMYWJlbFByb3ZpZGVyKCkpOwotCi0JcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcykKLSAgewotICAJdGFibGVWaWV3ZXJfLnNldElucHV0KG1lc3NhZ2VzKTsKLSAgCXRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNsZWFySW5wdXQoKQotICB7Ci0JICBJVmFsaWRhdGlvbk1lc3NhZ2UgZW1wdHlNZXNzYWdlc1tdID0ge307Ci0JICB0aGlzLnNldElucHV0KGVtcHR5TWVzc2FnZXMpOwotICB9Ci0gIAotICBwdWJsaWMgSUNvbnRlbnRQcm92aWRlciBnZXRDb250ZW50UHJvdmlkZXIoKQotICB7Ci0JICByZXR1cm4gdGFibGVWaWV3ZXJfLmdldENvbnRlbnRQcm92aWRlcigpOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlID09IG51bGwgPyBTdGF0dXMuT0tfU1RBVFVTIDogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKG1lc3NhZ2UgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2goKQotICB7Ci0JdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgfQotCi0gIHB1YmxpYyBUYWJsZUl0ZW1bXSBnZXRJdGVtcygpCi0gIHsKLQkvL2ludGVybmFsUmVmcmVzaCgpOwotCXJldHVybiB0YWJsZV8uZ2V0SXRlbXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewkKLQlpZiAodGFibGVfICE9IG51bGwpCi0JICB0YWJsZV8uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQl7Ci0JICB0YWJsZVZpZXdlcl8uYWRkKGdldEVsZW1lbnRzKG5ld0lucHV0KSk7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JewotCQlpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgSVZhbGlkYXRpb25NZXNzYWdlW10pCi0JICB7Ci0JCQlJVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxNZXNzYWdlcyA9IChJVmFsaWRhdGlvbk1lc3NhZ2VbXSkgaW5wdXRFbGVtZW50OwotCQkgIHJldHVybiB2YWxNZXNzYWdlczsKLQkgIH0KLQkgIGVsc2UKLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlcgotICB7Ci0JcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElWYWxpZGF0aW9uTWVzc2FnZSkKLQkJewotCQkJSVZhbGlkYXRpb25NZXNzYWdlIG1zZyA9IChJVmFsaWRhdGlvbk1lc3NhZ2UpIGVsZW1lbnQ7Ci0JCQkKLQkJCWlmIChjb2x1bW5JbmRleCA9PSAwKQotCQkJewkKLQkJCQlpbnQgc2V2ZXJpdHkgPSBtc2cuZ2V0U2V2ZXJpdHkoKTsKLQkJCQlpZiAoc2V2ZXJpdHkgPT0gMCkgewotCQkJCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0VSUk9SX1RTSyk7Ci0JCQkJfSBlbHNlIGlmIChzZXZlcml0eSA9PSAxKSB7Ci0JCQkJCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfV0FSTl9UU0spOwotCQkJCX0gZWxzZSBpZiAoc2V2ZXJpdHkgPT0gMikgewotCQkJCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKTsKLQkJCQl9Ci0JCQl9Ci0JCX0JCi0JICByZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLQl7Ci0JCVN0cmluZyB0ZXh0ID0gIiI7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVZhbGlkYXRpb25NZXNzYWdlKQotCQl7Ci0JCQlJVmFsaWRhdGlvbk1lc3NhZ2UgbXNnID0gKElWYWxpZGF0aW9uTWVzc2FnZSkgZWxlbWVudDsKLQkJCQotCQkJc3dpdGNoIChjb2x1bW5JbmRleCkgewotCQkJY2FzZSAwOgkJCi0JCQkJLy8gbm8gdGV4dCB0byBkaXNwbGF5LCBvbmx5IGRpc3BsYXkgc2V2ZXJpdHkgYXMgaW1hZ2UKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQl0ZXh0ID0gKG5ldyBJbnRlZ2VyKG1zZy5nZXRMaW5lKCkpKS50b1N0cmluZygpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCXRleHQgPSAobmV3IEludGVnZXIobXNnLmdldENvbHVtbigpKSkudG9TdHJpbmcoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzoKLQkJCQl0ZXh0ID0gbXNnLmdldE1lc3NhZ2UoKTsKLQkJCQlicmVhazsJCQotCQkJCQotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0gCi0JCX0KLQkJcmV0dXJuIHRleHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikKLQl7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0JewotCSAgcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLSAgfQotIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOThjMjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDcxMyAgIDE5MTM1NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODEyMDggICAyNTc2MTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBBZGQgTWVjaGFuaXNtIGZvciBBZG9wdGVycyB0byBtYXAgU2VydmljZXMgdG8gV1NETCBVUkxzCi0gKiAyMDA5MDMxMCAgIDI0MjQ0MCB5ZW5sdUBjYS5pYm0uY29tIC0gWWVuIEx1LCBQbHVnZ2FibGUgSUZpbGUgdG8gVVJJIENvbnZlcnRlcgotICogMjAxMDAyMDkgICAzMDIwMDkgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBDbGFzc0Nhc3RFeGNlcHRpb24gd2hlbiBvcmcuZWNsaXBzZS53c3Qud3MuaWZpbGUydXJpY29udmVydGVyIHBsdWdnZWQgaW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VSZWZJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFQWN0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29udmVydGVyLklJRmlsZTJVcmlDb252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XU0RMVVJMU3RyaW5nV3JhcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgCi0gICAgICBPYmplY3Qgc2VsID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKHNlbCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc2VsIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICAgICAgewotICAgICAgICAJSUZpbGUgZmlsZSA9IChJRmlsZSlzZWw7Ci0gICAgICAgIAlJSUZpbGUyVXJpQ29udmVydGVyIGNvbnZlcnRlciA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SUZpbGUyVXJpQ29udmVydGVyKCk7Ci0gICAgICAgIAlpZiAoY29udmVydGVyICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkgIFN0cmluZyB3c2RsVXJsID0gY29udmVydGVyLmNvbnZlcnQoZmlsZSk7Ci0gICAgICAgIAkgIGlmICh3c2RsVXJsICE9IG51bGwgfHwgIWNvbnZlcnRlci5hbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlKCkpCi0gICAgICAgIAkgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdzZGxVcmwpOwotICAgICAgICAJfQotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKChJUmVzb3VyY2Upc2VsKS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmhhc0FkYXB0ZXIoc2VsLCBXU0RMVVJMU3RyaW5nV3JhcHBlci5jbGFzcy5nZXROYW1lKCkpKSB7Ci0gICAgCU9iamVjdCBhZGFwdGVkT2JqZWN0ID0gUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5sb2FkQWRhcHRlcihzZWwsIFdTRExVUkxTdHJpbmdXcmFwcGVyLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCVdTRExVUkxTdHJpbmdXcmFwcGVyIHdyYXBwZXIgPSAoV1NETFVSTFN0cmluZ1dyYXBwZXIpYWRhcHRlZE9iamVjdDsKLSAgICAJcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdyYXBwZXIuZ2V0V1NETFVSTFN0cmluZygpKTsgIAkJCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChTZXJ2aWNlSW1wbClzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFNlcnZpY2VSZWZJbXBsKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFNlcnZpY2VSZWZJbXBsKXNlbCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChXU0RMUmVzb3VyY2VJbXBsKXNlbCkpOwotICAgICAgfQotICAgICAgLyoKLSAgICAgICAqIFRPRE8gLSBSZW1vdmUgdGhlIGNhc2VzIGJlbG93IGFmdGVyIGJ1ZyAxNzA4MzQgaXMgZml4ZWQKLSAgICAgICAqIAotICAgICAgICogV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyIHNob3VsZCBub3QgbmVlZCB0byBoYW5kbGUgU2VydmljZUltcGxCZWFuIGFuZCBCZWFuTGluayB3aGljaAotICAgICAgICogcmVwcmVzZW50IHNlcnZpY2UgY2xhc3Nlcy4gIFRoZXNlIGNhdGNoZXMgYXJlIGhlcmUgZm9yIG5vdyBzaW5jZSB3ZSBpbmNvcnJlY3RseSBhbGxvdwotICAgICAgICogdGhlIHdpemFyZCB0byBkZWZhdWx0IHRvIHRvcC1kb3duIHNjZWFucmlvIHdoZW4gbGF1bmNoIGZyb20gdGhlc2Ugb2JqZWN0cyBpbiB0aGUgSlNSLTEwOQotICAgICAgICogYnJhbmNoLiAKLSAgICAgICAqLwotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0V1NETFVSSSgoU2VydmljZUltcGxCZWFuKSBzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIEJlYW5MaW5rKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0V1NETFVSSSgoQmVhbkxpbmspIHNlbCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAJICBTdHJpbmcgd3NkbFVSSSA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChzZWwpOwotICAgIAkgIGlmICh3c2RsVVJJICE9IG51bGwpIHsKLSAgICAJCSAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdzZGxVUkkpOwotICAgIAkgIH0KLSAgICAgIH0KLSAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFdTRExVUkkoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLQkgIEVPYmplY3QgZU9iamVjdCA9IGJlYW4uZUNvbnRhaW5lcigpOwotCSAgaWYgKGVPYmplY3QgPT0gbnVsbCkKLQkJICByZXR1cm4gIiI7Ci0gICAgICAgICAgCi0JICBlT2JqZWN0ID0gZU9iamVjdC5lQ29udGFpbmVyKCk7Ci0gICAgICAKLQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZURlc2NyaXB0aW9uKSB7Ci0JCSAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzZCA9IChXZWJTZXJ2aWNlRGVzY3JpcHRpb24pIGVPYmplY3Q7Ci0JCSAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh3c2QpOyAgICAJICAKLSAgICAJICAKLQkJICAvLyBnZXRXZWJDb250ZW50UGF0aCByZXR1cm5zIHRoZSAiV2ViQ29udGVudCIgZm9sZGVyIHBhdGggZm9yIFdlYiBwcm9qZWN0cwotCQkgIC8vIGZvciBFSkIgcHJvamVjdHMsIGl0IHJldHVybnMgdGhlICJlYmpNb2R1bGUiIGZvbGRlciBwYXRoCi0JCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsgICAgCSAKLQkJICBwYXRoID0gcGF0aC5hcHBlbmQod3NkLmdldFdzZGxGaWxlKCkpOyAKLSAgICAJICAKLQkJICByZXR1cm4gcGF0aC50b1N0cmluZygpOyAgICAJICAgIAotCSAgfQotCSAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXU0RMVVJJKEJlYW5MaW5rIGxpbmspIHsKLQkgIEVPYmplY3QgZU9iamVjdCA9IGxpbmsuZUNvbnRhaW5lcigpOwotCSAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0JCSAgcmV0dXJuIGdldFdTRExVUkkoKFNlcnZpY2VJbXBsQmVhbikgZU9iamVjdCk7Ci0JICByZXR1cm4gIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNzlhMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEwICAgMTM1NDQxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEwICAgMTM2MDExIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUwNCAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyNSAgIDE0MjI4MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYwNyAgIDE0NDkzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MTIgICAxNDUwODEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MTkgICAxMzk5Nzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODAzICAgMTUyNzAxIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwNjA4MzEgICAxNTU4ODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHNlcnZpY2UgaW1wbCBmaWVsZCBkb2Vzbid0IHdvcmsgYWZ0ZXIgc3dpdGNoaW5nIGZyb20gQlUgdG8gVEQKLSAqIDIwMDYxMTA2ICAgMTQyNTAwIGRhdmlkLnNjaG5laWRlckB1bmlzeXMuY29tIC0gRGF2aWQgU2NobmVpZGVyLCBXVFAgcHJvcGVydGllcyBwYWdlcyBmb250cyBkb24ndCBmb2xsb3cgRWNsaXBzZSBwcmVmZXJlbmNlcwotICogMjAwNjEyMTEgICAxNjE1ODkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5QRSBpbiBzZXJ2aWNlIGdlbmVyYXRpb24gYWZ0ZXIgb3BlbmluZyBhbmQgY2FuY2VsbGluZyBmcm9tIGJyb3dzZSBkaWFsb2cKLSAqIDIwMDcwMTMxICAgMTY4Nzg2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3c2RsIHVybCBvbiB3ZWIgc2VydmljZSB3aXphcmQgcGFnZSAxIGlzIG5vdCByZWZsZWN0ZWQgaW4gYnJvd3NlIGRpYWxvZwotICogMjAwNzAzMjYgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwOTAzMTAgICAyNDI0NDAgeWVubHVAY2EuaWJtLmNvbSAtIFllbiBMdSwgUGx1Z2dhYmxlIElGaWxlIHRvIFVSSSBDb252ZXJ0ZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYkNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLklKb2JNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2JDaGFuZ2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XU0RMUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV1NETFNlbGVjdGlvblRyZWVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5EaWFsb2dSZXNvdXJjZUJyb3dzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbnZlcnRlci5JSUZpbGUyVXJpQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLlVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBBYnN0cmFjdE9iamVjdFNlbGVjdGlvbldpZGdldCBpbXBsZW1lbnRzIElPYmplY3RTZWxlY3Rpb25XaWRnZXQsIFJ1bm5hYmxlCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZF87Ci0gIHByaXZhdGUgRmlsZUV4dGVuc2lvbkZpbHRlciB3c0ZpbHRlcl87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50XzsKLSAgcHJpdmF0ZSBMaXN0ZW5lciAgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIE1vZGlmeUxpc3RlbmVyIG1vZGlmeUxpc3RlbmVyXzsKLSAgcHJpdmF0ZSBXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCB0cmVlOwotICAKLSAgcHJpdmF0ZSBUaW1lciB0aW1lcl8gPSBudWxsOwotICAKLSAgLypDT05URVhUX0lEIFBDT04wMDAxIGZvciB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUENPTl9QQUdFID0gIlBDT04wMDAxIjsKLQotICAvKkNPTlRFWFRfSUQgUENPTjAwMDIgZm9yIHRoZSBXU0RMIERvY3VtZW50IHRleHQgZmllbGQgb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BDT05fVEVYVF9XU0RMID0gIlBDT04wMDAyIjsKLSAgcHJpdmF0ZSBUZXh0IHdlYlNlcnZpY2VVUkk7Ci0KLSAgLypDT05URVhUX0lEIFBDT04wMDAzIGZvciB0aGUgV1NETCBSZXNvdXJjZSBCcm93c2UgYnV0dG9uIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQ09OX0JVVFRPTl9CUk9XU0VfV1NETCA9ICJQQ09OMDAwMyI7Ci0gIHByaXZhdGUgQnV0dG9uIHdzQnJvd3NlQnV0dG9uXzsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQQ09OMDAwNCBmb3IgdGhlIFdpemFyZCBXU0RMIFZhbGlkYXRpb24gdGFibGUgb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0IG1zZ1ZpZXdlcl87Ci0gIHByaXZhdGUgVmFsaWRhdGVXU0RMSm9iIHZhbGlkYXRlV1NETEpvYl87Ci0gIHByaXZhdGUgSm9iQ2hhbmdlQWRhcHRlciAgICBqb2JDaGFuZ2VBZGFwdGVyXzsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQQ09OMDAwNSBmb3IgdGhlIFdpemFyZCBXU0RMIFZhbGlkYXRpb24gc3VtbWFyeSBtZXNzYWdlIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBUZXh0IHZhbGlkYXRpb25TdW1tYXJ5VGV4dF87Ci0gIHByaXZhdGUgVGV4dCB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXzsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQQ09OMDAwNiBmb3IgdGhlIFN0b3AgV2l6YXJkIFdTREwgVmFsaWRhdGlvbiBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiBzdG9wVmFsaWRhdGlvbkJ1dHRvbl87Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUENPTl9CVVRUT05fU1RPUF9WQUxJREFUSU9OID0gIlBDT04wMDA2IjsKLSAgCi0gIHB1YmxpYyBXU0RMU2VsZWN0aW9uV2lkZ2V0KCkKLSAgewotICAgIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotICAgIHdzRmlsdGVyXyA9IG5ldyBGaWxlRXh0ZW5zaW9uRmlsdGVyKG5ldyBTdHJpbmdbXSB7IndzZGwiLCAid3NpbCIsICJodG1sIn0pOwotICAgIHdlYlNlcnZpY2VzUGFyc2VyID0gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotICAgIAotICAgIGZpbmFsIFJ1bm5hYmxlIGhhbmRsZVZhbGlkYXRpb25NZXNzYWdlcyA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotCSAgcHVibGljIHZvaWQgcnVuKCkgCi0gICAgICB7Ci0JCSAgbXNnVmlld2VyXy5zZXRJbnB1dCh2YWxpZGF0ZVdTRExKb2JfLmdldFZhbGlkYXRpb25NZXNzYWdlcygpKTsKLQkJICB1cGRhdGVWYWxpZGF0aW9uU3VtbWFyeSh2YWxpZGF0ZVdTRExKb2JfLmdldFZhbGlkYXRpb25NZXNzYWdlU2V2ZXJpdHkoKSk7Ci0JCSAgc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MoZmFsc2UpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgam9iQ2hhbmdlQWRhcHRlcl8gPSBuZXcgSm9iQ2hhbmdlQWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgZG9uZShJSm9iQ2hhbmdlRXZlbnQgZXZlbnQpIAotICAgICAgeyAgIAkKLSAgICAJICBpZiAobXNnVmlld2VyXyE9IG51bGwgJiYgbXNnVmlld2VyXy5nZXRDb250ZW50UHJvdmlkZXIoKSAhPSBudWxsKSB7Ci0gICAgCQkgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggaGFuZGxlVmFsaWRhdGlvbk1lc3NhZ2VzICk7Ci0JCSAgfQotICAgICAgfQotICAgIH07Ci0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLSAgICBVSVV0aWxzIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgIHBhcmVudF8gICAgICAgICAgPSBwYXJlbnQ7Ci0gICAgc3RhdHVzTGlzdGVuZXJfICA9IHN0YXR1c0xpc3RlbmVyOwotCi0JICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BDT05fUEFHRSApOwotCSAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggcGFyZW50LCBwbHVnaW5JZF8gKyAiLiIgKyBJTkZPUE9QX1BDT05fUEFHRSApOwotICAgIAotICAgIENvbXBvc2l0ZSB3c2RsR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyLCA1LCAwICk7Ci0gICAgCi0gICAgTGFiZWwgd3NMYWJlbCA9IG5ldyBMYWJlbCggd3NkbEdyb3VwLCBTV1QuV1JBUCk7Ci0gICAgd3NMYWJlbC5zZXRUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV1NfU0VMRUNUSU9OKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICB3c0xhYmVsLnNldExheW91dERhdGEoZ2QpOwotICAgIHdzTGFiZWwuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BDT05fVEVYVF9XUyApOwotICAgIAotICAgIHdlYlNlcnZpY2VVUkkgPSB1aVV0aWxzLmNyZWF0ZVRleHQoIHdzZGxHcm91cCwgbnVsbCwgCi0gICAgCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUENPTl9URVhUX1dTLCAKLSAgICAJCQkJCQlJTkZPUE9QX1BDT05fVEVYVF9XU0RMLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgIG1vZGlmeUxpc3RlbmVyXyA9Ci0gICAgICBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlV2ViU2VydmljZVVSSU1vZGlmeUV2ZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgCi0gICAgd2ViU2VydmljZVVSSS5hZGRNb2RpZnlMaXN0ZW5lcihtb2RpZnlMaXN0ZW5lcl8pOwotICAgIAotLy8gICAgd2ViU2VydmljZVVSSS5hZGRMaXN0ZW5lciggU1dULk1vZGlmeSwgc3RhdHVzTGlzdGVuZXIgKTsKLQotICAgIHdzQnJvd3NlQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggd3NkbEdyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRSwgCi0gICAgCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQ09OX0JVVFRPTl9CUk9XU0VfV1MsIAotICAgIAkJCQkJCQkJSU5GT1BPUF9QQ09OX0JVVFRPTl9CUk9XU0VfV1NETCApOwotICAgIHdzQnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZVdTRExCdXR0b24oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVXU0RMQnV0dG9uKCk7Ci0gICAgICAgIH0gCi0gICAgICB9KTsKLQotICAgIHRyZWUgPSBuZXcgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQoKTsKLSAgICB0cmVlLmFkZENvbnRyb2xzKHBhcmVudCwgc3RhdHVzTGlzdGVuZXIpOwotICAgIHRyZWUuc2V0V2ViU2VydmljZXNQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOyAgICAKLSAgICAKLSAgICBtc2dWaWV3ZXJfID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0KCk7Ci0gICAgbXNnVmlld2VyXy5hZGRDb250cm9scyhwYXJlbnQsIHN0YXR1c0xpc3RlbmVyKTsKLSAgICAKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfID0gbmV3IFRleHQoIHBhcmVudCwgU1dULldSQVApOwotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0RWRpdGFibGUoZmFsc2UpOwotICAgIEdyaWREYXRhIGdkMSA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIGZhbHNlLCBmYWxzZSk7Ci0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRMYXlvdXREYXRhKGdkMSk7Ci0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUb29sVGlwVGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFX1NVTU1BUlkgKTsKLSAgICAKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXyA9IG5ldyBUZXh0KCBwYXJlbnQsIFNXVC5XUkFQKTsKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0TGF5b3V0RGF0YShnZDEpOwotICAgIAotICAgIHN0b3BWYWxpZGF0aW9uQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbihwYXJlbnQsIAotICAgIAkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CVVRUT05fU1RPUF9XU0RMX1ZBTElEQVRJT04sIAotICAgIAkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1NUT1BfVkFMSURBVElPTl9CVVRUT04sIAotICAgIAkJCUlORk9QT1BfUENPTl9CVVRUT05fU1RPUF9WQUxJREFUSU9OKTsKLSAgICBzZXRWYWxpZGF0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgCi0gICAgc3RvcFZhbGlkYXRpb25CdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotICAgIAkJbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLSAgICAJCXsKLSAgICAJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgCQkJewotICAgIAkJCQloYW5kbGVTdG9wVmFsaWRhdGlvbkJ1dHRvbigpOwotICAgIAkJCX0KLQotICAgIAkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgIAkJCXsKLSAgICAJCQkJaGFuZGxlU3RvcFZhbGlkYXRpb25CdXR0b24oKTsKLSAgICAJCQl9IAotICAgIAkJfSk7Ci0gICAgCi0gICAgc2V0TWVzc2FnZVN1bW1hcnkoKTsKLSAgICBEaWFsb2cuYXBwbHlEaWFsb2dGb250KHBhcmVudCk7ICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0TWVzc2FnZVN1bW1hcnkoKSB7Ci0JICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1FU1NBR0VfVkFMSURBVEVfTk9fV1NETDsKLQkgIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgd3NkbFZhbGlkYXRpb25Db250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVmFsaWRhdGlvbkNvbnRleHQoKTsKLQkgIFN0cmluZyB2YWxpZGF0aW9uU2VsZWN0aW9uID0gd3NkbFZhbGlkYXRpb25Db250ZXh0LmdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpOwotCSAgaWYgKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfUkVNT1RFX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pKSB7Ci0JCSAgdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1FU1NBR0VfVkFMSURBVEVfUkVNT1RFX1dTREw7Ci0JICB9IGVsc2UgaWYgKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfQUxMX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pKSB7Ci0JCSAgdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1FU1NBR0VfVkFMSURBVEVfQUxMX1dTREw7Ci0JICB9Ci0JICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRleHQoIHZhbGlkYXRpb25NZXNzYWdlU3VtbWFyeSApOwotCSAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0VGV4dCgiICIpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlV2ViU2VydmljZVVSSU1vZGlmeUV2ZW50KCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlVVJJLmdldFRleHQoKS5pbmRleE9mKCc6JykgPiAwKSB7Ci0gICAgICB0aW1lcl8gPSBUaW1lci5uZXdJbnN0YW5jZSh0aW1lcl8sIERpc3BsYXkuZ2V0Q3VycmVudCgpLCB0aGlzKTsKLSAgICAgIHRpbWVyXy5zdGFydFRpbWVyKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGhhbmRsZVdlYlNlcnZpY2VVUkkoKTsKLSAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVXZWJTZXJ2aWNlVVJJKCkgewotCSAgaGFuZGxlV2ViU2VydmljZVVSSSh3ZWJTZXJ2aWNlVVJJLmdldFRleHQoKSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVXZWJTZXJ2aWNlVVJJKFN0cmluZyB3c1VSSSkKLSAgeyAgICAKLSAgICBpZiAod3NVUkkuaW5kZXhPZignOicpIDwgMCkKLSAgICB7Ci0gICAgICBJRmlsZSBmaWxlID0gdXJpMklGaWxlKHdzVVJJKTsKLSAgICAgIGlmIChmaWxlICE9IG51bGwpCi0gICAgICAgIHdzVVJJID0gaUZpbGUyVVJJKGZpbGUpOwotICAgIH0KLSAgICBpZiAod3NVUkkgIT0gbnVsbCAmJiB3c1VSSS5pbmRleE9mKCc6JykgPj0gMCAmJiB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpID09IG51bGwpCi0gICAgewotICAgICAgVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCBjbWQgPSBuZXcgVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpOwotICAgICAgY21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLSAgICAgIGNtZC5zZXRXZWJTZXJ2aWNlVVJJKHdzVVJJKTsKLSAgICAgIGNtZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgIH0KLSAgICBXZWJTZXJ2aWNlRW50aXR5IGVudGl0eSA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c1VSSSk7Ci0gICAgaWYgKGVudGl0eSAhPSBudWxsICYmIGVudGl0eS5nZXRUeXBlKCkgPT0gV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpCi0gICAgICB0cmVlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIGVsc2UKLSAgICAgIHRyZWUuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICB0cmVlLnNldFdlYlNlcnZpY2VVUkkod3NVUkkpOwotICAgIHRyZWUucmVmcmVzaFRyZWVWaWV3ZXIoKTsgIAotICAgIHdzZGxVUklfID0gd3NVUkk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBoYW5kbGVXZWJTZXJ2aWNlVVJJKCk7Ci0gICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdTRExCdXR0b24oKQotICB7Ci0gICAgRGlhbG9nUmVzb3VyY2VCcm93c2VyIGRpYWxvZyA9IG5ldyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoIHBhcmVudF8uZ2V0U2hlbGwoKSwgbnVsbCwgd3NGaWx0ZXJfKTsKLSAgICBkaWFsb2cub3BlbigpOwotICAgIElSZXNvdXJjZSByZXMgPSBkaWFsb2cuZ2V0Rmlyc3RTZWxlY3Rpb24oKTsKLSAgICBpZiggcmVzICE9IG51bGwgKQotICAgIHsKLSAgICAJd3NkbFVSSV8gPSByZXMuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotICAgIAl3ZWJTZXJ2aWNlVVJJLnNldFRleHQoIHdzZGxVUklfICk7ICAgIAkKLSAgICB9Ci0gICAgCQotICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldFZhbGlkYXRpb25JblByb2dyZXNzKGJvb2xlYW4gdmFsaWRhdGluZykgewotCSAgc3RvcFZhbGlkYXRpb25CdXR0b25fLnNldEVuYWJsZWQodmFsaWRhdGluZyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVTdG9wVmFsaWRhdGlvbkJ1dHRvbigpCi0gIHsKLQkgIElKb2JNYW5hZ2VyICAgIGpvYk1hbmFnZXIgICAgID0gUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpOwotCSAgSm9iW10gICAgICAgICAgam9icyAgICAgICAgICAgPSBqb2JNYW5hZ2VyLmZpbmQoIFZhbGlkYXRlV1NETEpvYi5WQUxJREFURV9XU0RMX0pPQl9GQU1JTFkgKTsKLQkgIFZhbGlkYXRlV1NETEpvYiBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYiA9IG51bGw7Ci0JICAKLQkgIGlmKCBqb2JzLmxlbmd0aCA+IDAgKQotCSAgewotCQkgIGZvciAoaW50IGk9MDsgaTxqb2JzLmxlbmd0aDsgaSsrKSB7Ci0JCQkgIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gKFZhbGlkYXRlV1NETEpvYilqb2JzW2ldOwotCi0JCQkgIGlmIChleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5nZXRTdGF0ZSgpICE9IEpvYi5OT05FKSB7IAotCQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuY2FuY2VsKCk7Ci0JCQkgIH0KLQkJICB9Ci0JICB9Ci0JICBjbGVhclZhbGlkYXRpb25NZXNzYWdlcygpOwotCSAgc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MoZmFsc2UpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKSB7Ci0JICBtc2dWaWV3ZXJfLmNsZWFySW5wdXQoKTsKLQkgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VGV4dCgiICIgKTsKLQkgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldFRleHQoIiAiKTsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIC8vIFRpbWVyIHZhbGlkYXRpb24KLSAgICAvKgotICAgICAqIENvbW1lbnRpbmcgb3V0IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBibG9jayBmYXN0IHR5cGVycyBmcm9tIGhpdHRpbmcgTmV4dC9GaW5pc2ggCi0gICAgaWYgKFRpbWVyLmlzUnVubmluZygpKQotICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTdGF0dXMoIiIsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19MT0FESU5HX1dFQl9TRVJWSUNFX1VSSSwgU3RhdHVzLkVSUk9SKTsKLSAgICAqLwotCQotICAgIC8vIFZhbGlkYXRlIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdlYiBzZXJ2aWNlIFVSSQotICAgIC8vIEZvciBleGFtcGxlLCBpcyBpdCBwb2ludGluZyB0byBhbiBleGlzdGluZyByZXNvdXJjZSBpbiB0aGUgd29ya3NwYWNlPwotICAgIFN0cmluZyB3c1BhdGggID0gd2ViU2VydmljZVVSSS5nZXRUZXh0KCk7Ci0gICAgaWYoIHdzUGF0aCA9PSBudWxsIHx8IHdzUGF0aC5sZW5ndGgoKSA8PSAwICkgewotICAgIAljbGVhclZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgIAlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19JTlZBTElEX1dFQl9TRVJWSUNFX1VSSSApOwotICAgIH0KLSAgICBlbHNlIGlmKCB3c1BhdGguaW5kZXhPZignOicpIDwgMCApCi0gICAgewotICAgIAlJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod3NQYXRoKTsKLSAgICAJaWYoIHJlcyA9PSBudWxsICkgewotICAgIAkJY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX05PX1NVQ0hfRklMRSwgbmV3IE9iamVjdFtdIHt3c1BhdGh9KSApOwotICAgIAl9Ci0gICAgCWVsc2UgaWYoIHJlcy5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUgKSB7Ci0gICAgCQljbGVhclZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgIAkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfSU5WQUxJRF9XRUJfU0VSVklDRV9VUkkgKTsKLSAgICAJfQotICAgIH0KLQotICAgIAotICAgIC8vIFZhbGlkYXRlIHRoZSBjb250ZW50IG9mIHRoZSBXZWIgc2VydmljZSBVUkkKLSAgICAvLyBGb3IgZXhhbXBsZSwgaXMgc2VsZWN0aW9uIGEgV1NETCBVUkk/Ci0gICAgaWYgKCFUaW1lci5pc1J1bm5pbmcodGltZXJfKSAmJiB0cmVlLmlzRW5hYmxlZCgpKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gdHJlZS5nZXRTdGF0dXMoKTsKLSAgICAgIGlmIChzdGF0dXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7Ci0gICAgICAgIGlmIChzZXZlcml0eSA9PSBTdGF0dXMuRVJST1IgfHwgc2V2ZXJpdHkgPT0gU3RhdHVzLldBUk5JTkcpIHsKLSAgICAgICAgCWNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgCWlmKCB3c1BhdGguaW5kZXhPZignOicpIDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgd3NkbFVSSSA9IGlGaWxlMlVSSSgoSUZpbGUpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod3NQYXRoKSk7Ci0gICAgICAgICAgaWYgKHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpID09IG51bGwpIHsKLSAgICAgICAgCSAgY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19TRUxFQ1RJT05fTVVTVF9CRV9XU0RMICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIGlmICghVGltZXIuaXNSdW5uaW5nKHRpbWVyXykpIHsKLSAgICAJU3RyaW5nIHdzZGxVUkkxID0gd3NQYXRoOwotICAgIAkgYm9vbGVhbiBpc1JlbW90ZSA9IHRydWU7Ci0gICAgCWlmICh0cmVlLmlzRW5hYmxlZCgpKSB7IC8vIGlzIHdzaWwKLSAgICAJCXdzZGxVUkkxID0gdHJlZS5nZXRXc2RsVVJJKCk7Ci0gICAgCQlpZiAod3NkbFVSSTEuc3RhcnRzV2l0aCgiZmlsZToiKSB8fCB3c2RsVVJJMS5zdGFydHNXaXRoKCJwbGF0Zm9ybToiKSkKLSAgICAJCXsKLSAgICAJCQlpc1JlbW90ZSA9IGZhbHNlOwotICAgIAkJfQotICAgIAl9IGVsc2UgewotICAgIAkJaWYgKHdzUGF0aC5pbmRleE9mKCc6JykgPCAwKQotICAgIAkJewotICAgIAkJCWlzUmVtb3RlID0gZmFsc2U7Ci0gICAgCQkJd3NkbFVSSTEgPSBpRmlsZTJVUkkoKElGaWxlKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdzUGF0aCkpOwotICAgIAkJfQotICAgIAkJZWxzZSBpZiAod3NQYXRoLnN0YXJ0c1dpdGgoImZpbGU6IikgfHwgd3NQYXRoLnN0YXJ0c1dpdGgoInBsYXRmb3JtOiIpKQotICAgIAkJewotICAgIAkJCWlzUmVtb3RlID0gZmFsc2U7Ci0gICAgCQl9Ci0gICAgCX0KLSAgCSAgCi0gICAgICBzZXRNZXNzYWdlU3VtbWFyeSgpOwotCSAgbXNnVmlld2VyXy5jbGVhcklucHV0KCk7Ci0gIAkgIHZhbGlkYXRlV1NETCh3c2RsVVJJMSwgaXNSZW1vdGUpOwotICAgIH0KLSAgICAKLQotICAgIC8vIE9LIHN0YXR1cwotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVXU0RMIChTdHJpbmcgd3NkbFVSSSwgYm9vbGVhbiBpc1JlbW90ZSkgewotCi0JICBTdHJpbmcgdmFsaWRhdGlvblNlbGVjdGlvbiA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCkuZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCk7OwotCSAgaWYgKChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX0FMTF9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgfHwKLQkJCSAgKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfUkVNT1RFX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pICYmIGlzUmVtb3RlKSkgewotCi0JCSAgSUpvYk1hbmFnZXIgICAgam9iTWFuYWdlciAgICAgPSBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCk7Ci0JCSAgSm9iW10gICAgICAgICAgam9icyAgICAgICAgICAgPSBqb2JNYW5hZ2VyLmZpbmQoIFZhbGlkYXRlV1NETEpvYi5WQUxJREFURV9XU0RMX0pPQl9GQU1JTFkgKTsKLQkJICBWYWxpZGF0ZVdTRExKb2IgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IgPSBudWxsOwotCQkgIAotCQkgIGJvb2xlYW4gc3RhcnRXU0RMVmFsaWRhdGlvbiA9IHRydWU7Ci0JCSAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTUVTU0FHRV9WQUxJREFURV9JTl9QUk9HUkVTUyApOwotCQkgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldFRleHQoIiAiKTsKLQkJICBpZiggam9icy5sZW5ndGggPiAwICkKLQkJICB7Ci0JCQkgIGZvciAoaW50IGk9MDsgaTxqb2JzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJICBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYiA9IChWYWxpZGF0ZVdTRExKb2Ipam9ic1tpXTsKLQkJCQkgIAotCQkJCSAgaWYgKGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iLmdldFN0YXRlKCkgIT0gSm9iLk5PTkUpIHsgCi0JCQkJCSAgLy8gSm9iIHJ1bm5pbmcgb3IgdG8gYmUgcnVuCi0JCQkJCSAgLy8gSWYgdGhlIGpvYiBpcyB2YWxpZGF0aW5nIHRoZSBzYW1lIHdzZGxVUkksIGxldCBpdCBmaW5pc2ggcnVubmluZyBhbmQgaWdub3JlIHRoaXMgb25lLgotCQkJCQkgIC8vIEl0IGlzIG5vdCBmb3IgdGhlIHNhbWUgd3NkbFVSSSwgY2FuY2VsIHRoZSBqb2IgYW5kIHNjaGVkdWxlIHRoaXMgb25lLgotCi0JCQkJCSAgaWYgKCF3c2RsVVJJLmVxdWFscyhleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5nZXRXc2RsVVJJKCkpKSB7Ci0JCQkJCQkgIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iLmNhbmNlbCgpOwotCQkJCQkJICBzZXRWYWxpZGF0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7Ci0JCQkJCSAgfSBlbHNlIHsJCQkJCQkgIAotCQkJCQkJICBzdGFydFdTRExWYWxpZGF0aW9uID0gZmFsc2U7Ci0JCQkJCSAgfQotCQkJCSAgfSAKLQkJCSAgfQotCQkgIH0gCi0JCSAgCi0JCSAgaWYgKHN0YXJ0V1NETFZhbGlkYXRpb24pIHsKLQkJCSAgc3RhcnRXU0RMVmFsaWRhdGlvbkpvYih3c2RsVVJJKTsKLQkJICB9Ci0JICB9Ci0JICByZXR1cm47Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzdGFydFdTRExWYWxpZGF0aW9uSm9iIChTdHJpbmcgd3NkbFVSSSkgewotCSAgdmFsaWRhdGVXU0RMSm9iXyA9IG5ldyBWYWxpZGF0ZVdTRExKb2Iod3NkbFVSSSk7Ci0JICB2YWxpZGF0ZVdTRExKb2JfLmFkZEpvYkNoYW5nZUxpc3RlbmVyKCBqb2JDaGFuZ2VBZGFwdGVyXyApOwotCSAgdmFsaWRhdGVXU0RMSm9iXy5zY2hlZHVsZSgpOwotCSAgc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3ModHJ1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZVZhbGlkYXRpb25TdW1tYXJ5KGludCBtZXNzYWdlU2V2ZXJpdHkpCi0gIHsKLSAgCQotICAJc3dpdGNoIChtZXNzYWdlU2V2ZXJpdHkpIHsKLSAgCWNhc2UgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUjoKLQkJdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5FUlJPUl9NRVNTQUdFU19JTl9WQUxJREFUSU9OKTsKLQkJdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuV0FSTklOR19JRl9DT05USU5VRSk7Ci0JCWJyZWFrOwotCWNhc2UgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HOgotCQl2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLldBUk5JTkdfTUVTU0FHRVNfSU5fVkFMSURBVElPTik7Ci0JCXZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLldBUk5JTkdfSUZfQ09OVElOVUUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlZBTElEQVRJT05fQ09NUExFVEVEKTsKLQkJdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0VGV4dCgiICIpOwotCQlicmVhazsKLQl9Ci0gIH0KLSAgCi0gIHByaXZhdGUgSUZpbGUgdXJpMklGaWxlKFN0cmluZyB1cmkpCi0gIHsKLSAgICBJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHVyaSk7Ci0gICAgCi0gICAgaWYgKHJlcyBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgcmV0dXJuIChJRmlsZSlyZXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGlGaWxlMlVSSShJRmlsZSBmaWxlKQotICB7Ci0JU3RyaW5nIHVyaSA9IG51bGw7Ci0JSUlGaWxlMlVyaUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldElGaWxlMlVyaUNvbnZlcnRlcigpOwotCWJvb2xlYW4gYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSA9IHRydWU7CQotCWlmIChjb252ZXJ0ZXIgIT0gbnVsbCkKLQl7Ci0JCXVyaSA9IGNvbnZlcnRlci5jb252ZXJ0KGZpbGUpOwotCQlpZiAodXJpID09IG51bGwpCi0JCQlhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gY29udmVydGVyLmFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUoKTsKLQl9Ci0JaWYgKHVyaSA9PSBudWxsICYmIGFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUpCi0JewotICAJICBGaWxlIGYgPSBmaWxlLmdldExvY2F0aW9uKCkudG9GaWxlKCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdXJpID0gZi50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgewotICAgIAl1cmkgPSBmLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0JfQotICAgIHJldHVybiB1cmk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyB3c2RsVVJJID0gdG9Xc2RsVVJJKG9iamVjdCk7ICAKLSAgICAgIHdzZGxVUklfID0gd3NkbFVSSTsKLSAgICAgIAotICAgICAgaWYgKHdzZGxVUkkgIT0gbnVsbCAmJiB3ZWJTZXJ2aWNlVVJJICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGhhbmRsZVdlYlNlcnZpY2VVUkkod3NkbFVSSSk7Ci0gICAgCQotICAgICAgICB3ZWJTZXJ2aWNlVVJJLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG1vZGlmeUxpc3RlbmVyXyk7Ci0gICAgICAgIHdlYlNlcnZpY2VVUkkuc2V0VGV4dChnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpKTsgICAgICAgCi0gICAgICAgIHdlYlNlcnZpY2VVUkkuYWRkTW9kaWZ5TGlzdGVuZXIobW9kaWZ5TGlzdGVuZXJfKTsKLSAgICAgIH0KLSAgICB9ICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgdG9Xc2RsVVJJKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICByZXR1cm4gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFNlcnZpY2VJbXBsKW9iamVjdCk7Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgIHJldHVybiBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSSgoV1NETFJlc291cmNlSW1wbClvYmplY3QpOwotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpCi0gICAgICByZXR1cm4gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFNlcnZpY2VSZWYpb2JqZWN0KTsKLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHJldHVybiAoKElGaWxlKW9iamVjdCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgIHJldHVybiAoU3RyaW5nKW9iamVjdDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLQkgIFN0cnVjdHVyZWRTZWxlY3Rpb24gc3M7IAotCSAgaWYgKHRyZWUgIT0gbnVsbCAmJiB0cmVlLmdldFdzZGxVUkkoKSAhPSBudWxsKQotCQkgIHNzID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odHJlZS5nZXRXc2RsVVJJKCkpOwotCSAgZWxzZQotCQkgIHNzID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24od3NkbFVSSV8pOwotCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbiggCi0gICAgICAgICAgICAgICBuZXcgV1NETFNlbGVjdGlvbldyYXBwZXIoIHdlYlNlcnZpY2VzUGFyc2VyLCBzcykpOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0JU3RyaW5nIHdzZGxVUkk7Ci0KLQlpZiAodHJlZSAhPSBudWxsKQotICAgICAgIHdzZGxVUkkgPSB0cmVlLmdldFdzZGxVUkkoKTsKLQllbHNlCi0JCXdzZGxVUkkgPSB3c2RsVVJJXzsKLQkKLSAgICBpZiAod3NkbFVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSBnZXRQcm9qZWN0RnJvbVVSSSh3c2RsVVJJKTsKLSAgICAgIGlmIChwIT1udWxsICYmIHAuZXhpc3RzKCkpCi0gICAgICAgIHJldHVybiBwOwotICAgICAgCi0gICAgICBTdHJpbmcgd3NSZWxQYXRoID0gd3NkbFVSSV87Ci0gICAgICBJUmVzb3VyY2Ugd3NSZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3c1JlbFBhdGgpOwotICAgICAgaWYgKHdzUmVzIT1udWxsICYmIHdzUmVzIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0IHAyID0gKChJRmlsZSl3c1JlcykuZ2V0UHJvamVjdCgpOwotICAgICAgICByZXR1cm4gcDI7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLQkgCi0gICAgU3RyaW5nIHdzZGxVUkk7Ci0gICAgaWYgKHRyZWUgIT0gbnVsbCkKLSAgICAJd3NkbFVSSSA9IHRyZWUuZ2V0V3NkbFVSSSgpOwotICAgIGVsc2UgCi0gICAgCXdzZGxVUkkgPSB3c2RsVVJJXzsKLSAgICAKLSAgICBpZiAod3NkbFVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBjbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVVJJKHdzZGxVUkkpOwotICAgICAgaWYgKGNuYW1lIT1udWxsICYmIGNuYW1lLmxlbmd0aCgpPjApCi0gICAgICAgIHJldHVybiBjbmFtZTsKLSAgICAgIAotICAgICAgU3RyaW5nIHdzUmVsUGF0aCA9IHdzZGxVUklfOwotICAgICAgSVJlc291cmNlIHdzUmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod3NSZWxQYXRoKTsKLSAgICAgIGlmICh3c1JlcyE9bnVsbCAmJiB3c1JlcyBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZih3c1Jlcyk7Ci0gICAgICAgIGlmIChjb21wIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21VUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIFN0cmluZyB3a3NwY1Jvb3RMb2MgPSByb290LmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLSAgICBpbnQgaWR4ID0gdXJpLmluZGV4T2Yod2tzcGNSb290TG9jKTsKLSAgICBpZiAoaWR4ICE9IC0xKSAKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVsUGF0aCA9IHVyaS5zdWJzdHJpbmcod2tzcGNSb290TG9jLmxlbmd0aCgpK2lkeCk7Ci0gICAgICBJUmVzb3VyY2UgcmVzID0gcm9vdC5maW5kTWVtYmVyKG5ldyBQYXRoKHJlbFBhdGgpKTsKLSAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3QgcCA9ICgoSUZpbGUpcmVzKS5nZXRQcm9qZWN0KCk7Ci0gICAgICAgIHJldHVybiBwOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21VUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIFN0cmluZyB3a3NwY1Jvb3RMb2MgPSByb290LmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLSAgICBpbnQgaWR4ID0gdXJpLmluZGV4T2Yod2tzcGNSb290TG9jKTsKLSAgICBpZiAoaWR4ICE9IC0xKSAKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVsUGF0aCA9IHVyaS5zdWJzdHJpbmcod2tzcGNSb290TG9jLmxlbmd0aCgpK2lkeCk7Ci0gICAgICBJUmVzb3VyY2UgcmVzID0gcm9vdC5maW5kTWVtYmVyKG5ldyBQYXRoKHJlbFBhdGgpKTsKLSAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzKTsKLSAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSAKLSAgewkKLSAgICBpZiAodHJlZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9QYXRoKHRyZWUuZ2V0V3NkbFVSSSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkgICAgcmV0dXJuIFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgod3NkbFVSSV8pOwotICAgIH0KLQl9Ci0gIAotICBwdWJsaWMgUG9pbnQgZ2V0V2lkZ2V0U2l6ZSgpIHsJCi0JICByZXR1cm4gbmV3IFBvaW50KCA1ODAsIDU4MCk7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpIHsKLQkgIFN0cmluZyB3c1VSSSA9IHM7Ci0JICAgIAotCSAgICBpZiAod3NVUkkuaW5kZXhPZignOicpIDwgMCkKLQkgICAgewotCSAgICAgIElGaWxlIGZpbGUgPSB1cmkySUZpbGUod3NVUkkpOwotCSAgICAgIGlmIChmaWxlICE9IG51bGwpCi0JICAgICAgICB3c1VSSSA9IGlGaWxlMlVSSShmaWxlKTsKLQkgICAgfQotCSAgICBpZiAod3NVUkkgIT0gbnVsbCAmJiB3c1VSSS5pbmRleE9mKCc6JykgPj0gMCAmJiB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpID09IG51bGwpCi0JICAgIHsKLQkgICAgICBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIGNtZCA9IG5ldyBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kKCk7Ci0JICAgICAgY21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLQkgICAgICBjbWQuc2V0V2ViU2VydmljZVVSSSh3c1VSSSk7Ci0JICAgICAgY21kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JICAgIH0KLQkJCi0JICAgIC8vIHByaW1lIHdpZGdldCBiYXNlZCBvbiB0aGUgc3RyaW5nCi0JICAgIHdzZGxVUklfID0gd3NVUkk7Ci0JICAgIGlmICh0cmVlICE9IG51bGwpCi0JICAgIAl0cmVlLnNldFdlYlNlcnZpY2VVUkkod3NVUkkpOwotCSAgICAKLQkgICAgV2ViU2VydmljZUVudGl0eSBlbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpOwotCSAgICBpZiAoZW50aXR5ICE9IG51bGwgJiYgZW50aXR5LmdldFR5cGUoKSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgZWxzZQotCSAgICAJcmV0dXJuIGZhbHNlOwotCSAgICAKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldyYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhNmMxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25XcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhIHZlcnkgc2ltcGxlIHdyYXBwZXIgdGhhdCBiaW5kcyBhIFdTREwgcGFyc2VyIHdpdGgKLSAqIGEgd3NkbFNlbGVjdGlvbiBvYmplY3QuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uV3JhcHBlciAKLXsKLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyICAgIHBhcnNlcjsKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHdzZGxTZWxlY3Rpb247Ci0gIAotICBwdWJsaWMgV1NETFNlbGVjdGlvbldyYXBwZXIoIFdlYlNlcnZpY2VzUGFyc2VyICAgIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgdGhpcy5wYXJzZXIgICAgICAgID0gcGFyc2VyOwotICAgIHRoaXMud3NkbFNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlmZTlkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIElCTSBDb3Jwb3JhdGlvbi4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIDIwMDcwNTIzICAgMTU4MjMwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgaW1wcm92ZSBBbnRUYXNrIGVycm9ycyByZXBvcnQKLSAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQwMiAgIDIyNTAzMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwODA0MTUgICAyMjcxNTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5lZWQgYSB3YXkgdG8gc3BlY2lmeSBhIGJhY2t1cCBXZWIgc2VydmljZSBydW50aW1lCi0gKiAyMDA4MDQyMSAgIDIyODA1NCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgTlBFIGluIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICogMjAwODA1MjcgICAyMzQyMjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNzMxICAgMjQyNzIxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuRmFjZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5EZWZhdWx0aW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5WYWxpZGF0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkNsaWVudFJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkZhY2V0TWF0Y2hDYWNoZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5TZXJ2aWNlUnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdENob2ljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgoteyAgIAotICBwcml2YXRlIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FQVJfUFJPSkVDVF9FWFQgPSAiRUFSIjsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciAgICBjbGllbnRJZHNfOwotICBwcml2YXRlIGJvb2xlYW4gY2xpZW50SWRzRml4ZWRfID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjbGllbnROZWVkRUFSXyA9IHRydWU7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudENvbXBvbmVudFR5cGVfOwotICBwcml2YXRlIEZhY2V0TWF0Y2hlciBjbGllbnRGYWNldE1hdGNoZXJfOwotICAKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uICAgICAgICBzZWxlY3Rpb25fOwotICBwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgdGVzdF87Ci0gIAotICAvL0Egbm90ZSBvbiBpbml0aWFsIHByb2plY3RzIC4uLgotICAvL1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gY2xpZW50SW5pdGlhbFByb2plY3RfIGFuZCBpbml0aWFsUHJvamVjdF8gaXMgdGhhdAotICAvL2NsaWVudEluaXRpYWxQcm9qZWN0XyBjb21lcyBmcm9tIHRoZSBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHdoaWxlIGluaXRpYWxQcm9qZWN0XwotICAvL2NvbWVzIGZyb20gU2VsZWN0aW9uQ29tbWFuZCAoaS5lLiBpdCBpcyB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSB0aGluZyB0aGF0IHdhcyBzZWxlY3RlZCBiZWZvcmUgCi0gIC8vdGhlIHdpemFyZCB3YXMgbGF1bmNoZWQpLiBJbiB0aGUgZGVmYXVsdGluZyBhbGdvcml0aG0sIGNsaWVudEluaXRpYWxQcm9qZWN0XyB3aWxsIAotICAvL2JlIGdpdmVuIGZpcnN0IHByaW9yaXR5LiBJZiwgaG93ZXZlciwgaXQgaXMgZGVlbWVkIHRoYXQgY2xpZW50SW5pdGlhbFByb2plY3RfIGlzIG5vdCBhIHZhbGlkIHByb2plY3QgCi0gIC8vYmVjYXVzZSBpdCBjb250YWlucyB0aGUgSjJFRSBXZWIgc2VydmljZSBmb3Igd2hpY2ggd2UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBjbGllbnQsIGluaXRpYWxQcm9qZWN0XwotICAvL3dpbGwgYmUgZ2l2ZW4gc2Vjb25kIHByaW9yaXR5LgotICBwcml2YXRlIElQcm9qZWN0IGluaXRpYWxQcm9qZWN0XzsgLy9UaGlzIGlzIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBwcmlvciB0byB0aGUgd2l6YXJkIGJlaW5nIGxhdW5jaGVkLgotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudEluaXRpYWxQcm9qZWN0XzsgLy9UaGlzIGlzIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIG9iamVjdCBzZWxlY3Rpb24gZnJvbSBwYWdlIDIuCi0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcl87ICAKLQotICBwdWJsaWMgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0gICAgY2xpZW50SWRzXyA9IGlkczsKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBjbGllbnRJZHNfOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50SWRzRml4ZWQoYm9vbGVhbiBiKQotICB7Ci0gICAgY2xpZW50SWRzRml4ZWRfID0gYjsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJZCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UnVudGltZUlkXzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdE5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVhclByb2plY3ROYW1lKCkKLSAgewotICAgIHJldHVybiBjbGllbnRFYXJQcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgY2xpZW50RWFyUHJvamVjdE5hbWVfID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkKLSAgewotICAgIHJldHVybiAgY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2ViU2VydmljZUNsaWVudCBnZXRXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50XzsgIAotICB9Ci0gICAgCi0gIHB1YmxpYyBJQ29udGV4dCBnZXRDb250ZXh0KCkKLSAgewotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfSAgCi0gIAotICBwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogRGVmYXVsdHMgdGhlIGZvbGxvd2luZyBiaXRzIG9mIGluZm9ybWF0aW9uIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0gICAqIGNsaWVudFJ1bnRpbWVJZF8gOiB0aGUgY2xpZW50UnVudGltZUlkLiBNdXN0IGJlIGRlZmF1bHRlZCB0byBub24tZW1wdHkgU3RyaW5nLgotICAgKiBjbGllbnRJZHNfLnJ1bnRpbWVJZF86IHRoZSBXZWIgc2VydmljZSBydW50aW1lIGlkLiBNdXN0IGJlIGRlZmF1bHRlZCB0byBub24tZW1wdHkgU3RyaW5nLgotICAgKiBjbGllbnRQcm9qZWN0TmFtZV8gOiB0aGUgbmFtZSBvZiB0aGUgY2xpZW50IHByb2plY3QuIE11c3QgYmUgbm9uLWVtcHR5LiBNYXkgb3IgbWF5IG5vdCBleGlzdC4KLSAgICogY2xpZW50Q29tcG9uZW50VHlwZV86IHRoZSBpZCBvZiB0aGUgY2xpZW50IHByb2plY3QgdGVtcGxhdGUuIE11c3QgYmUgZW1wdHkgaWYgdGhlIGNsaWVudAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZXhpc3RzLiBNdXN0IGJlIG5vbi1lbXB0eSBvZiB0aGUgY2xpZW50IHByb2plY3QgZG9lcyBub3QgZXhpc3QuCi0gICAqIGNsaWVudElkc18uc2VydmVySWRfOiB0aGUgc2VydmVyIHR5cGUgaWQuIE1heSBiZSBhbiBlbXB0eSBTdHJpbmcgaWYgdGhlIGRlZmF1bHRlZCBXZWIgc2VydmljZSBydW50aW1lCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBhIHNlcnZlci4KLSAgICogY2xpZW50SWRzXy5zZXJ2ZXJJbnN0YW5jZUlkXzogdGhlIHNlcnZlciBpZC4gTWF5IGJlIG51bGwgb3IgYW4gZW1wdHkgU3RyaW5nLgotICAgKiBjbGllbnROZWVkRUFSXzogdHJ1ZSBpZiBhbiBFQVIgaXMgbmVlZGVkLiBGYWxzZSBvdGhlcndpc2UuCi0gICAqIGNsaWVudEVhclByb2plY3ROYW1lXzogdGhlIGNsaWVudCBFQVIgcHJvamVjdC4gTXVzdCBiZSBlbXB0eSBpZiB0aGUgY2xpZW50TmVlZEVBUl8gaXMgZmFsc2UuCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgbm9uLWVtcHR5IGlmIHRoZSBjbGllbnROZWVkRUFSXyBpcyB0cnVlLgotICAgKiB3ZWJTZXJ2aWNlQ2xpZW50XyA6IHRoZSBJV2ViU2VydmljZUNsaWVudCBiYXNlZCBvbiB0aGUgY2FsY3VsYXRlZCBkZWZhdWx0cy4gTXVzdCBiZSBub24tbnVsbCBmb3IgIk5leHQiCi0gICAqICAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHRvIGJlIGVuYWJsZWQgb24gdGhlIHBhZ2UgZm9sbG93aW5nIHRoaXMgY29tbWFuZC4KLSAgICogY29udGV4dF8gOiBhbiBJQ29udGV4dC4gTXVzdCBiZSBub24tbnVsbCBmb3IgIk5leHQiIGJ1dHRvbiB0byBiZSBlbmFibGVkIG9uIHRoZSBwYWdlIGZvbGxvd2luZyB0aGlzIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgKi8gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpCi0gIHsKLQotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgCi0gICAgICAvLyoqU3RlcCAxKiogRGVmYXVsdCB0aGUgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICAJCi0gICAgICAvL2NsaWVudElkc0ZpeGVkXyBpcyBzZXQgdG8gdHJ1ZSBmb3IgdGhlIEFudCBzY2VuYXJpby4gSXQncyBhbHdheXMgZmFsc2UgZm9yIHRoZSB3aXphcmQKLSAgICAgIC8vc2NlbmFyaW9zLgotICAgICAgaWYgKGNsaWVudElkc0ZpeGVkXyAmJiAoY2xpZW50UHJvamVjdE5hbWVfID09IG51bGwpKQotICAgICAgewotICAgICAgICAvLyBTZXQgdGhlIGNsaWVudFJ1bnRpbWUgYmFzZWQgb24gdGhlIHJ1bnRpbWUsIHNlcnZlciwgYW5kIGluaXRpYWwKLSAgICAgICAgLy8gc2VsZWN0aW9uLgotICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gZ2V0RGVmYXVsdENsaWVudFJ1bnRpbWVGb3JGaXhlZFJ1bnRpbWVBbmRTZXJ2ZXIoY2xpZW50SW5pdGlhbFByb2plY3RfLCBjbGllbnRJZHNfLmdldFNlcnZlcklkKCkpOwotICAgICAgICBjbGllbnRGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgICAgICBjbGllbnRQcm9qZWN0TmFtZV8gPSBkcnQuZ2V0UHJvamVjdE5hbWUoKTsKLSAgICAgICAgY2xpZW50UnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsgICAgICAgIAotICAgICAgfSAKLSAgICAgIGVsc2UgICAgICAKLSAgICAgIHsJCi0gICAgICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNldCB0aGUgcnVudGltZSBiYXNlZCBvbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBvYmplY3Qgc2VsZWN0aW9uL2luaXRpYWwgc2VsZWN0aW9uLgotICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmICghdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QoY2xpZW50SW5pdGlhbFByb2plY3RfLCB3c2RsVVJJXywgcGFyc2VyXykgJiYgIWNsaWVudElkc0ZpeGVkXykKLSAgICAgICAgewotICAgICAgICAgIC8vSWYgY2xpZW50SW50aWFsUHJvamVjdF8gZG9lcyBub3QgY29udGFpbiB0aGUgSjJFRSBXZWIgc2VydmljZSwgY2hvb3NlIGEgY2xpZW50UnVudGltZSBiYXNlZCBvbiBpdC4KLSAgICAgICAgICBkcnQgPSBnZXREZWZhdWx0UnVudGltZShjbGllbnRJbml0aWFsUHJvamVjdF8sIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgY2xpZW50RmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAgICAgICBjbGllbnRQcm9qZWN0TmFtZV8gPSBkcnQuZ2V0UHJvamVjdE5hbWUoKTsgCi0gICAgICAgICAgY2xpZW50UnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9jbGllbnRJbml0aWFsUHJvamVjdF8gY29udGFpbnMgdGhlIEoyRUUgV2ViIHNlcnZpY2Ugc28gZG9uJ3QgdXNlIGl0LgotICAgICAgICAgIC8vVHJ5IHVzaW5nIHRoZSBpbml0YWxQcm9qZWN0XyBpbnN0ZWFkLgotICAgICAgICAgIGlmICghdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QoaW5pdGlhbFByb2plY3RfLCB3c2RsVVJJXywgcGFyc2VyXykgJiYgIWNsaWVudElkc0ZpeGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL0lmIGludGlhbFByb2plY3RfIGRvZXMgbm90IGNvbnRhaW4gdGhlIEoyRUUgV2ViIHNlcnZpY2UsIGNob29zZSBhIGNsaWVudFJ1bnRpbWUgYmFzZWQgb24gaXQuCi0gICAgICAgICAgICBkcnQgPSBnZXREZWZhdWx0UnVudGltZShpbml0aWFsUHJvamVjdF8sIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgICBjbGllbnRGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgICAgICAgICAgY2xpZW50UHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9Cb3RoIGNsaWVudEludGlhbFByb2plY3RfIGFuZCBpbml0aWFsUHJvamVjdF8gY29udGFpbiB0aGUgSjJFRSBXZWIgc2VydmljZQotICAgICAgICAgICAgLy9hbmQgY2Fubm90IGJlIHVzZWQgdG8gaW5mbHVlbmNlIGNsaWVudFJ1bnRpbWUgZGVmYXVsdGluZy4KLSAgICAgICAgICAgIC8vQ2hvb3NlIGEgY2xpZW50UnVudGltZSBidXQgZG9uJ3QgY2hvb3NlIGNsaWVudEluaXRpYWxQcm9qZWN0XwotICAgICAgICAgICAgLy9hcyB0aGUgY2xpZW50UHJvamVjdC4KLSAgICAgICAgICAgIGRydCA9IGdldERlZmF1bHRSdW50aW1lKG51bGwsIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvL1NldCB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSBpZCBmcm9tIHRoZSBjbGllbnRSdW50aW1lCi0gICAgICAgIGNsaWVudElkc18uc2V0UnVudGltZUlkKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWRfKS5nZXRSdW50aW1lKCkKLSAgICAgICAgICAgIC5nZXRJZCgpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8qKlN0ZXAgMioqIERlZmF1bHQgdGhlIGNsaWVudCBwcm9qZWN0IGlmIGl0IHdhcyBub3QgYWxyZWFkeSBkZWZhdWx0ZWQgCi0gICAgICAvL2FzIHBhcnQgb2YgZGVmYXVsdGluZyB0aGUgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICAgIGlmIChjbGllbnRQcm9qZWN0TmFtZV8gPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gUHJvamVjdCBuYW1lIGRpZCBub3QgZ2V0IHNldCB3aGVuIHRoZSBydW50aW1lIHdhcyBzZXQsIHNvIHNldCBpdCBub3cKLSAgICAgICAgY2xpZW50UHJvamVjdE5hbWVfID0gZ2V0RGVmYXVsdENsaWVudFByb2plY3ROYW1lKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vKipTdGVwIDMqKiBEZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCB0eXBlLiAgICAgIAotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgICAgaWYgKCFjbGllbnRQcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICAvLyBTZXQgdGhlIHByb2plY3QgdGVtcGxhdGUKLSAgICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSBnZXREZWZhdWx0Q2xpZW50UHJvamVjdFRlbXBsYXRlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU2V0IGl0IHRvIGFuIGVtcHR5IFN0cmluZwotICAgICAgICBjbGllbnRDb21wb25lbnRUeXBlXyA9ICIiOwotICAgICAgfQotCi0KLSAgICAgIC8vKipTdGVwIDQqKiBEZWZhdWx0IHRoZSBjbGllbnQgc2VydmVyIGlmIHRoaXMgaXMgbm90IGFuIEFudCBzY2VuYXJpby4KLSAgICAgIGlmICghY2xpZW50SWRzRml4ZWRfKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHNlcnZlclN0YXR1cyA9IHNldENsaWVudERlZmF1bHRTZXJ2ZXIoKTsKLSAgICAgICAgaWYgKHNlcnZlclN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2VydmVyU3RhdHVzKTsKLSAgICAgICAgICByZXR1cm4gc2VydmVyU3RhdHVzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vKipTdGVwIDUqKiBEZWZhdWx0IGNsaWVudE5lZWRFQVIgYW5kIGNsaWVudCBFQVIgaWYgYW4gRUFSIGlzIG5lZWRlZAotICAgICAgc2V0RGVmYXVsdENsaWVudEVhclByb2plY3QoKTsgICAgICAKLSAgICAgIAotICAgICAgCi0gICAgICAvLyoqU3RlcCA2KiogQ2FsY3VsYXRlIGRlZmF1bHQgSVdlYlNlcnZpY2VDbGllbnQuIFRoaXMgaXMgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAotICAgICAgLy8gTmV4dCBpcyBlbmFibGVkIG9uIHRoZSBwYWdlIGZvbGxvd2luZyB0aGlzIGNvbW1hbmQuCi0gICAgICBzZXREZWZhdWx0c0ZvckV4dGVuc2lvbihlbnYpOwotCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIAotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIENhdGNoIGFsbCBFeGNlcHRpb25zIGluIG9yZGVyIHRvIGdpdmUgc29tZSBmZWVkYmFjayB0byB0aGUgdXNlcgotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBlLmdldE1lc3NhZ2UoKSB9KSwgZSk7Ci0gICAgICAgIAotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBoYXMgbm8gZXJyb3IgbXNnLCBpdCdzIGtpbmQgb2YgdXNlbGVzcyB0byB0aGUgdXNlciBzbyBsZXQncyBsb2cgaXQKLSAgICAgIGlmICggZS5nZXRNZXNzYWdlKCkgPT0gbnVsbCl7Ci0gICAgICAgIElMb2cgcGx1Z2lubG9nID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRMb2coKTsKLSAgICAgICAgcGx1Z2lubG9nLmxvZyhlcnJvclN0YXR1cyk7Ci0gICAgICAgIAkgIAotICAgICAgICAvLyBjcmVhdGUgYSBuZXcgSVN0YXR1cyB3aGljaCBoYXMgYSBub24tbnVsbCBtc2csIHRoaXMgaXMgdG8gYmUgdGhyb3duIHRvIHRoZSB1c2VyLgotICAgICAgICBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwKLSAgICAgIAkgICAgICAgbmV3IFN0cmluZ1tdIHsgV1NVSVBsdWdpbk1lc3NhZ2VzLk1TR19TRUVfRVJST1JfTE9HIH0pLCBlKTsgIAotICAgICAgfQotICAgICAgICAgIAotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdENsaWVudEVhclByb2plY3QoKQotICB7ICAgIAotICAgIC8vRG9uJ3QgbmVlZCBhbiBlYXIgaWYgdGhpcyBpcyBhIEphdmEgcHJvamVjdCwgb3IgaWYgdGhlIHNlbGVjdGVkIHRlbXBsYXRlIGlzIGpzdC51dGlsaXR5Ci0gICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgIGlmIChjbGllbnRQcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIGNsaWVudE5lZWRFQVJfID0gIShGYWNldFV0aWxzLmlzSmF2YVByb2plY3QoY2xpZW50UHJvamVjdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2xpZW50TmVlZEVBUl8gPSAhKEZhY2V0VXRpbHMuaXNVdGlsaXR5VGVtcGxhdGUoY2xpZW50Q29tcG9uZW50VHlwZV8pKTsgIAotICAgIH0KLSAgICAKLSAgICAvL0lmIGNsaWVudE5lZWRFQVJfIGlzIHN0aWxsIHRydWUsIGl0IG1lYW5zIHRoYXQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIEphdmEgcHJvamVjdAotICAgIC8vb3IgSmF2YSBwcm9qZWN0IHR5cGUuIENoZWNrIHRoZSBzZXJ2ZXIuCi0gICAgaWYgKGNsaWVudE5lZWRFQVJfKQotICAgIHsKLSAgICAgIC8vIERldGVybWluZSBpZiBhbiBlYXIgc2VsZWN0aW9uIGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUgc2VydmVyIHR5cGUuCi0KLSAgICAgIFN0cmluZyBzZXJ2ZXJJZCA9IGNsaWVudElkc18uZ2V0U2VydmVySWQoKTsKLSAgICAgIGlmIChzZXJ2ZXJJZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBVc2UgdGhlIHNlcnZlciB0eXBlCi0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVySWQpOwotICAgICAgICBpZiAoc2VydmVyVGFyZ2V0SWQgIT0gbnVsbCAmJiBzZXJ2ZXJUYXJnZXRJZC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIVNlcnZlclV0aWxzLmlzVGFyZ2V0VmFsaWRGb3JFQVIoc2VydmVyVGFyZ2V0SWQsICIxMyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlIEVBUiBzZWxlY3Rpb24gdG8gYmUgZW1wdHkKLSAgICAgICAgICAgIGNsaWVudE5lZWRFQVJfID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgeyAgLy8gc2VydmVySWQgPT0gbnVsbCwgYXNzdW1lIHRoYXQgaXQgZG9lcyBub3QgbmVlZCBFQVIKLSAgICAJICBjbGllbnROZWVkRUFSXyA9IGZhbHNlOwotICAgIAkgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoY2xpZW50TmVlZEVBUl8pCi0gICAgewotICAgIAljbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKGNsaWVudFByb2plY3ROYW1lXyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSAiIjsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBzZXRDbGllbnREZWZhdWx0U2VydmVyKCkKLSAgewotICAgIC8vQ2hvb3NlIGFuIGV4aXN0aW5nIHNlcnZlciB0aGUgbW9kdWxlIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGlmIHBvc3NpYmxlCi0gICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgIElTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKFNlcnZlclV0aWxzLmdldE1vZHVsZShjbGllbnRQcm9qZWN0KSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzIT1udWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aD4wICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7ICAgICAgICAgICAgCQotICAgIH0KLSAgICAKLSAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgY2hvb3NlIGEgc3VpdGFibGUgc2VydmVyIG9yIHNlcnZlciB0eXBlIGJhc2VkIG9uIHRoZSBleGlzdGluZyBwcm9qZWN0J3MgcnVudGltZSBvciBmYWNldHMKLSAgICBpZiAoY2xpZW50UHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICBpZiAoc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlclR5cGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL0hhdmVuJ3QgcGlja2VkIGEgc2VydmVyL3NlcnZlciB0eXBlIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdC4gUGljayBhIHNlcnZlci9zZXJ2ZXIgdHlwZQotICAgIC8vdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNsaWVudFJ1bnRpbWVJZC4KLSAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKTsKLSAgICBpZiAoc2VydmVyIT1udWxsICYmIHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotICAgIAotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBnZXRTZXJ2ZXJUeXBlRnJvbUNsaWVudFJ1bnRpbWVJZCgpOwotICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfSAgICAKLSAgICAKLSAgICAvLyBObyBzdWl0YWJsZSBzZXJ2ZXIgd2FzIGZvdW5kLiBQb3B1cCBhbiBlcnJvciBpZiB0aGUgZGVmYXVsdCBXZWIgc2VydmljZQotICAgIC8vIHJ1bnRpbWUgcmVxdWlyZXMgYSBzZXJ2ZXIuCi0gICAgUnVudGltZURlc2NyaXB0b3IgcnVudGltZURlc2NyaXB0b3IgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICBpZiAocnVudGltZURlc2NyaXB0b3IuZ2V0U2VydmVyUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICBydW50aW1lTGFiZWx9KSk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU2VydmVyIGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKQotICB7Ci0gICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICBpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoID4gMCkgewotICAgIAkKLSAgICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotICAgICAgICAKLSAgICAgICAgLy9JZiBhIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGlzIHByZXNlbnQsIGNoZWNrIHRoYXQgb25lIGZpcnN0Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmVycy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChzZXJ2ZXJzW2pdICE9IG51bGwgJiYgc2VydmVyc1tqXS5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0JICAgICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotCSAgICAgICAgICBpZiAoc2VydmVyRmFjdG9yeUlkLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihjbGllbnRSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2pdOwotCSAgICAgICAgICAgIH0KLQkgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9BIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGNvdWxkIG5vdCBiZSBmb3VuZCBvciBkaWQgbm90IG1hdGNoLiBDaGVjayBhbGwgdGhlIGV4aXN0aW5nIHNlcnZlcnMuICAgIAotICAgIAkKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbaV0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoY2xpZW50UnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbaV07Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21DbGllbnRSdW50aW1lSWQoKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmVyVHlwZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pOwotICAgIGlmIChzZXJ2ZXJUeXBlcyE9bnVsbCAmJiBzZXJ2ZXJUeXBlcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgcHJlZmVycmVkIG9uZSBpZiBpdCBpcyBpbiB0aGUgbGlzdAotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclR5cGVzW2ldLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZXNbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVzWzBdKTsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLSAgICBJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0gICAgCi0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICAKLSAgICBpZiAoc2VydmVycy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gICAgICAgIAotICAgICAgLy8gR2V0IHRoZSBydW50aW1lLgotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBudWxsOwotCi0gICAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgaWYgKGZQcm9qZWN0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAJICBmUnVudGltZSA9IGZQcm9qZWN0LmdldFByaW1hcnlSdW50aW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IGFuIGV4aXN0aW5nIHNlcnZlciB0aGF0IGhhcyB0aGUgc2FtZSBydW50aW1lLgotICAgICAgICBJU2VydmVyIGZpcnN0TWF0Y2hpbmdTZXJ2ZXIgPSBudWxsOyAgICAJICAKLSAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIElTZXJ2ZXIgdGhpc1NlcnZlciA9IHNlcnZlcnNbaV07Ci0gICAgICAgICAgSVJ1bnRpbWUgdGhpc1NlcnZlclJ1bnRpbWUgPSB0aGlzU2VydmVyLmdldFJ1bnRpbWUoKTsKLSAgICAgICAgICBpZiAoIHRoaXNTZXJ2ZXJSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUgIT0gbnVsbCAmJiB0aGlzU2VydmVyUnVudGltZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZS5nZXRJZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlcj09bnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZmlyc3RNYXRjaGluZ1NlcnZlciA9IHRoaXNTZXJ2ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXIgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgIAkgIAotICAgICAgICAgICAgICBzZXJ2ZXIgPSB0aGlzU2VydmVyOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy9JZiBhIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIHdhcyBub3QgZm91bmQgYnV0Ci0gICAgICAgIC8vdGhlcmUgd2FzIGEgc2VydmVyIHRoYXQgbWF0Y2hlZCwgcmV0dXJuIHRoYXQgb25lLgotICAgICAgICBpZiAoc2VydmVyID09IG51bGwgJiYgZmlyc3RNYXRjaGluZ1NlcnZlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmVyID0gZmlyc3RNYXRjaGluZ1NlcnZlcjsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0KLSAgICAgIC8vIElmIGFuIGV4aXN0aW5nIHNlcnZlciBjb3VsZCBub3QgYmUgY2hvc2VuIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdCdzCi0gICAgICAvLyBydW50aW1lLAotICAgICAgLy8gdHJ5IHRvIGZpbmQgYW4gZXhpc3Rpbmcgc2VydmVyIHVzaW5nIHRoZSBwcm9qZWN0J3MgZmFjZXRzIGFuZCB0aGUKLSAgICAgIC8vIGZhY2V0c1RvQWRkLgotICAgICAgaWYgKHNlcnZlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBpZiAocHJvamVjdCE9bnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgU2V0IGZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgaWYgKGZhY2V0cyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNldCBmYWNldHNDbG9uZSA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICBmYWNldHNDbG9uZS5hZGRBbGwoZmFjZXRzKTsgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChmYWNldE1hdGNoZXIgIT0gbnVsbCAmJiBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVyYXRvciBpdHIgPSBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZhY2V0c0Nsb25lLmFkZChpdHIubmV4dCgpKTsgIAotICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXJ2ZXIgPSBnZXRTZXJ2ZXJGcm9tRmFjZXRzKGZhY2V0c0Nsb25lKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXIgZ2V0U2VydmVyRnJvbUZhY2V0cyhTZXQgZmFjZXRzKQotICB7Ci0JICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkgICAgU2V0IHJ1bnRpbWVzID0gRmFjZXRVdGlscy5nZXRSdW50aW1lcyhuZXcgU2V0W117ZmFjZXRzfSk7Ci0JICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0JICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0JICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCSAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkgICAgCi0JICAgIC8vSWYgb25lIG9mIHRoZSBzZXJ2ZXJzIGlzIG9mIHRoZSBwcmVmZXJyZWQgdHlwZSwgYW5kIGl0cyBydW50aW1lCi0JICAgIC8vaXMgaW4gdGhlIHNldCBvZiBtYXRjaGluZyBydW50aW1lcywgcmV0dXJuIHRoYXQgc2VydmVyLgotCSAgICBmb3IgKGludCBqPTA7IGo8c2VydmVycy5sZW5ndGg7IGorKykgICAgICAKLQkgICAgewotCSAgICAgIElTZXJ2ZXIgdGhpc1NlcnZlciA9IHNlcnZlcnNbal07Ci0JICAgICAgaWYgKHRoaXNTZXJ2ZXIgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpICE9IG51bGwgJiYgdGhpc1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLQkgICAgICB7Ci0JICAgIAlJUnVudGltZSB0aGlzU2VydmVyUnVudGltZSA9IHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpOwotCSAgICAgICAgLy9DaGVjayB0byBzZWUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIHJ1bnRpbWVzLgotCSAgICAgICAgSXRlcmF0b3IgcnVudGltZXNJdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUocnVudGltZXNJdHIuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpcnVudGltZXNJdHIubmV4dCgpOwotCSAgICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWUuZ2V0SWQoKSkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBzZXJ2ZXIgPSB0aGlzU2VydmVyOwotCSAgICAgICAgICB9ICAgICAgICAgIAotCSAgICAgICAgfQotCSAgICAgIH0gICAgICAgICAgICAKLQkgICAgfQotCSAgICAKLQkgICAgaWYgKHNlcnZlciA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgb3V0ZXI6IHdoaWxlIChpdHIuaGFzTmV4dCgpKQotCSAgICAgIHsKLQkgICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSAob3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSkgaXRyCi0JICAgICAgICAgICAgLm5leHQoKTsKLQkgICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotCSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKQotCSAgICAgICAgewotCSAgICAgICAgICBJU2VydmVyIHRoaXNTZXJ2ZXIgPSBzZXJ2ZXJzW2ldOwotCSAgICAgICAgICBJUnVudGltZSB0aGlzU2VydmVyUnVudGltZSA9IHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpOwotCSAgICAgICAgICBpZiAodGhpc1NlcnZlclJ1bnRpbWUgIT0gbnVsbCAmJiBzUnVudGltZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJSdW50aW1lLmdldElkKCkuZXF1YWxzKHNSdW50aW1lLmdldElkKCkpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgc2VydmVyID0gdGhpc1NlcnZlcjsKLQkgICAgICAgICAgICBicmVhayBvdXRlcjsKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCi0JICAgIHJldHVybiBzZXJ2ZXI7Ci0KLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXJUeXBlIGdldFNlcnZlclR5cGVGcm9tUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLQkgICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IG51bGw7Ci0JICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCSAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkgICAgCi0JICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCSAgICBJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCSAgICAKLQkgICAgLy9HZXQgdGhlIHJ1bnRpbWUuCi0JICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSBudWxsOwotCSAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBudWxsOwotCSAgICAKLQkgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotCSAgICB7Ci0JICAgICAgdHJ5Ci0JICAgICAgewotCSAgICAgICAgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0JICAgICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgIAlmUnVudGltZSA9IGZQcm9qZWN0LmdldFByaW1hcnlSdW50aW1lKCk7Ci0JICAgICAgICB9Ci0JICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgICAgICB7Ci0JICAgICAgICAKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmIChmUnVudGltZSAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgLy9HZXQgYSBzZXJ2ZXIgdHlwZSB0aGF0IGhhcyB0aGUgc2FtZSBydW50aW1lIHR5cGUuCi0JICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7IAotCSAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotCSAgICAgIHsKLQkJICAgICAgSVJ1bnRpbWVUeXBlIHNSdW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCSAgICAgIElTZXJ2ZXJUeXBlIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlID0gbnVsbDsKLQkJICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQotCQkgICAgICB7Ci0JCSAgICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tpXTsKLQkJICAgICAgICBJUnVudGltZVR5cGUgdGhpc1NlcnZlclJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKLQkJICAgICAgICBpZiAoc1J1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWVUeXBlLmdldElkKCkuZXF1YWxzKHNSdW50aW1lVHlwZS5nZXRJZCgpKSkKLQkJICAgICAgICB7Ci0JCSAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPT0gbnVsbCkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPSB0aGlzU2VydmVyVHlwZTsKLQkJICAgICAgICAgIH0KLQkJICAgICAgICAgIGlmICh0aGlzU2VydmVyVHlwZS5nZXRJZCgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JCSAgICAgICAgICAgIGJyZWFrOwotCQkgICAgICAgICAgfQotCQkgICAgICAgIH0gICAgIAotCQkgICAgICB9Ci0JCSAgICAgIAotCQkgICAgICAvL0lmIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgd2FzIG5vdCBmb3VuZCBidXQKLQkJICAgICAgLy90aGVyZSB3YXMgYSBzZXJ2ZXIgdHlwZSB0aGF0IG1hdGNoZWQsIHJldHVybiB0aGF0IG9uZS4gICAgICAgIAotCQkgICAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsICYmIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlICE9IG51bGwpCi0JCSAgICAgIHsgICAgICAgIAotCQkgICAgICAgIHNlcnZlclR5cGUgPSBmaXJzdE1hdGNoaW5nU2VydmVyVHlwZTsKLQkJICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCi0JICAgIC8vSWYgYSBzZXJ2ZXIgdHlwZSBjb3VsZCBub3QgYmUgY2hvc2VuIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdCdzIHJ1bnRpbWUsCi0JICAgIC8vdHJ5IHRvIGZpbmQgYSBzZXJ2ZXIgdHlwZSB1c2luZyB0aGUgcHJvamVjdCdzIGZhY2V0cyBhbmQgdGhlIGZhY2V0c1RvQWRkLgotCSAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotCSAgICAgIHsKLQkgICAgICAgIFNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotCSAgICAgICAgaWYgKGZhY2V0cyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBTZXQgZmFjZXRzQ2xvbmUgPSBuZXcgSGFzaFNldCgpOwotCSAgICAgICAgICBmYWNldHNDbG9uZS5hZGRBbGwoZmFjZXRzKTsgICAgICAgICAgCi0JICAgICAgICAgIGlmIChmYWNldE1hdGNoZXIgIT0gbnVsbCAmJiBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkuaXRlcmF0b3IoKTsKLQkgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLQkgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICBmYWNldHNDbG9uZS5hZGQoaXRyLm5leHQoKSk7ICAKLQkgICAgICAgICAgICB9ICAgICAgICAgICAgCi0JICAgICAgICAgIH0KLQkgICAgICAgICAgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tRmFjZXRzKGZhY2V0c0Nsb25lKTsgICAgICAgICAgCi0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gc2VydmVyVHlwZTsKLQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21GYWNldHMoU2V0IGZhY2V0cykKLSAgewotCSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gbnVsbDsKLQkgICAgU2V0IHJ1bnRpbWVzID0gRmFjZXRVdGlscy5nZXRSdW50aW1lcyhuZXcgU2V0W117ZmFjZXRzfSk7Ci0JICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0JICAgIElTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0JICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCSAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsgICAgCi0KLQkgICAgLy9JZiBvbmUgb2YgdGhlIHNlcnZlciB0eXBlcyBpcyBvZiB0aGUgcHJlZmVycmVkIHR5cGUsIGFuZCBpdHMgcnVudGltZQotCSAgICAvL2lzIGluIHRoZSBzZXQgb2YgbWF0Y2hpbmcgcnVudGltZXMsIHJldHVybiB0aGF0IHNlcnZlciB0eXBlLgotCSAgICBmb3IgKGludCBqPTA7IGo8c2VydmVyVHlwZXMubGVuZ3RoOyBqKyspICAgICAgCi0JICAgIHsKLQkgICAgICBJU2VydmVyVHlwZSB0aGlzU2VydmVyVHlwZSA9IHNlcnZlclR5cGVzW2pdOwotCSAgICAgIElSdW50aW1lVHlwZSB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKLQkgICAgICBpZiAodGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgewotCSAgICAgICAgLy9DaGVjayB0byBzZWUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIHJ1bnRpbWVzLgotCSAgICAgICAgSXRlcmF0b3IgcnVudGltZXNJdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUocnVudGltZXNJdHIuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpcnVudGltZXNJdHIubmV4dCgpOwotCSAgICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwpCi0JICAgICAgICAgIHsKLQkgICAgICAgIAkgIElSdW50aW1lVHlwZSBzUnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkgICAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JCSAgICAgICAgICB9ICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfSAgICAgICAgICAgIAotCSAgICB9Ci0JICAgIAotCSAgICAKLQkgICAgaWYgKHNlcnZlclR5cGUgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIG91dGVyOiB3aGlsZSAoaXRyLmhhc05leHQoKSkKLQkgICAgICB7Ci0JICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpIGl0cgotCSAgICAgICAgICAgIC5uZXh0KCk7Ci0JICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotCSAgICAgICAgewotCQkgICAgICAgIElSdW50aW1lVHlwZSBzUnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0JCSAgICAgICAgewotCQkgICAgICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tpXTsKLQkJICAgICAgICAgIGlmICh0aGlzU2VydmVyVHlwZSAhPSBudWxsKQotCQkgICAgICAgICAgewotCQkJICAgICAgICAgIElSdW50aW1lVHlwZSB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCSAgICAgICAgICBpZiAoc1J1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQotCQkJICAgICAgICAgIHsKLQkJCSAgICAgICAgICAgIHNlcnZlclR5cGUgPSB0aGlzU2VydmVyVHlwZTsKLQkJCSAgICAgICAgICAgIGJyZWFrIG91dGVyOwotCQkJICAgICAgICAgIH0KLQkJICAgICAgICAgIH0KLQkJICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0KLQkgICAgcmV0dXJuIHNlcnZlclR5cGU7Ci0KLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tUHJvamVjdFR5cGUoU3RyaW5nIHRlbXBsYXRlSWQsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLSAgICBJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0gICAgU2V0IGZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0SW5pdGlhbEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgaWYgKGZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBmYWNldHMuYWRkKGl0ci5uZXh0KCkpOyAgCi0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIHNlcnZlciA9IGdldFNlcnZlckZyb21GYWNldHMoZmFjZXRzKTsKLSAgICByZXR1cm4gc2VydmVyOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0VHlwZShTdHJpbmcgdGVtcGxhdGVJZCwgRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcikKLSAgewotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBudWxsOwotICAgIFNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEluaXRpYWxGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIGlmIChmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IGZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZmFjZXRzLmFkZChpdHIubmV4dCgpKTsgIAotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICAvL1RPRE8gSW5zdGVhZCBvZiBwYXNzaW5nIGluIGEgc2luZ2xlIHNldCBvZiBmYWNldHMsIHBhc3MgaW4gbXVsdGlwbGUgc2V0cywgaWYgdGhlCi0gICAgLy9qc3QuamF2YSBmYWNldCBpcyBvbmUgb2YgdGhlbSBhbmQgdGhlIGNsaWVudFJ1bnRpbWVJZCBhbGxvd3MgbmV3ZXIuCi0gICAgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tRmFjZXRzKGZhY2V0cyk7Ci0gICAgcmV0dXJuIHNlcnZlclR5cGU7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50UHJvamVjdFRlbXBsYXRlKCkKLSAgewotICAgIFN0cmluZ1tdIHRlbXBsYXRlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSwgY2xpZW50SWRzXy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgCi0gICAgLy9XYWxrIHRoZSBsaXN0IG9mIGNsaWVudCBwcm9qZWN0IHR5cGVzIGluIHRoZSBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UKLSAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0Yz0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0Q2xpZW50VHlwZXMoKTsKLSAgICBmb3IgKGludCBqPTA7IGo8cHJlZmVycmVkVGVtcGxhdGVJZHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wOyBpPHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICAKLSAgICAgICAgICBib29sZWFuIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRUZW1wbGF0ZShjbGllbnRSdW50aW1lSWRfLCB0ZW1wbGF0ZUlkKTsKLSAgICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVzW2ldOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIC8vU2luY2UgdGhlIHByZWZlcnJlZFRlbXBsYXRlSWRzIGNvbnRhaW5zIHRoZSB1bmlvbiBvZiBhbGwgcHJvamVjdCB0eXBlcyBmb3IgYWxsIGNsaWVudCBydW50aW1lcywgd2UgYXJlCi0gICAgLy9ndWFyYW50ZWVkIHRvIGhhdmUgcmV0dXJuZWQgYnkgbm93LCBzbyB0aGUgY29kZSBiZWxvdyB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIHVuZGVyIG5vcm1hbAotICAgIC8vY2lyY3Vtc3RhbmNlcy4gSnVzdCByZXR1cm4gc29tZXRoaW5nIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyLiAgICAKLSAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICByZXR1cm4gdGVtcGxhdGVzWzBdOwotICAgIAotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFByb2plY3ROYW1lKCkKLSAgewotICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkXyk7Ci0gICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAKLSAgICAvL0NoZWNrIGVhY2ggcHJvamVjdCBhbmQgaXRzIGZhY2V0UnVudGltZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBjbGllbnRSdW50aW1lCi0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICghdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QocHJvamVjdHNbaV0sIHdzZGxVUklfLCBwYXJzZXJfKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBmUnVudGltZU5hbWUgPSBudWxsOwotICAgICAgICBmUnVudGltZSA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRSdW50aW1lRm9yUHJvamVjdChwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZSdW50aW1lTmFtZSA9IGZSdW50aW1lLmdldE5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmYWNldFZlcnNpb25zICE9IG51bGwpCi0gICAgICAgIHsKLQotICAgICAgICAgIC8vIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocmZ2cywgZmFjZXRWZXJzaW9ucyk7Ci0gICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KHRydWUsIGNsaWVudFJ1bnRpbWVJZF8sIHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgYm9vbGVhbiBmYWNldFJ1bnRpbWVNYXRjaGVzID0gdHJ1ZTsKLSAgICAgICAgICBpZiAoZlJ1bnRpbWVOYW1lICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFjZXRSdW50aW1lTWF0Y2hlcyA9IEZhY2V0VXRpbHMuaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQocmZ2cywgZlJ1bnRpbWVOYW1lKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpICYmIGZhY2V0UnVudGltZU1hdGNoZXMpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2xpZW50RmFjZXRNYXRjaGVyXyA9IGZtOwotICAgICAgICAgICAgcmV0dXJuIHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9ObyBwcm9qZWN0IHdhcyBzdWl0YWJsZSwgcmV0dXJuIGEgbmV3IHByb2plY3QgbmFtZQotICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldERlZmF1bHRXZWJQcm9qZWN0TmFtZSgpOwotICAgIAotICB9Ci0gIAotICBwcml2YXRlIERlZmF1bHRSdW50aW1lVHJpcGxldCBnZXREZWZhdWx0Q2xpZW50UnVudGltZUZvckZpeGVkUnVudGltZUFuZFNlcnZlcihJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgcnVudGltZVByZWZlcnJlZFNlcnZlcikKLSAgewotICAgIFN0cmluZ1tdIGNsaWVudFJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSwgcnVudGltZVByZWZlcnJlZFNlcnZlcik7Ci0gICAgQXJyYXlMaXN0IHZhbGlkQ2xpZW50UnVudGltZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGNsaWVudFJ1bnRpbWVzLmxlbmd0aDsgaSsrICkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVzW2ldKTsKLSAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgLy9DaGVjayBpZiB0aGlzIGNsaWVudCBydW50aW1lIHN1cHBvcnRzIHRoZSBzZXJ2ZXIKLSAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihkZXNjLmdldElkKCksIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxpZENsaWVudFJ1bnRpbWVzLmFkZChkZXNjLmdldElkKCkpOwotICAgICAgICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL1JlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChmYWNldFZlcnNpb25zICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRVdGlscy5tYXRjaChyZnYsIGZhY2V0VmVyc2lvbnMpOwotICAgICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QodHJ1ZSwgY2xpZW50UnVudGltZXNbaV0sIHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0UnVudGltZUlkKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRydDsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZhbGlkQ2xpZW50UnVudGltZXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICAvL1dlIGNvdWxkbid0IG1hdGNoIHRvIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgcHJvamVjdCBzbyByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIHJ1bnRpbWUuCi0gICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShudWxsKTsKLSAgICAgIGRydC5zZXRSdW50aW1lSWQoKChTdHJpbmdbXSl2YWxpZENsaWVudFJ1bnRpbWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBjbGllbnQgcnVudGltZXMgdGhhdCBtYXRjaCB0aGUgZml4ZWQgcnVudGltZSBhbmQgc2VydmVyLiBGYWxsIGJhY2sgdG8gb3JpZ2luYWwgYWxnb3JpdGhtCi0gICAgICBjbGllbnRJZHNGaXhlZF8gPSBmYWxzZTsKLSAgICAgIHJldHVybiBnZXREZWZhdWx0UnVudGltZShwcm9qZWN0LCBjbGllbnRJZHNfLmdldFR5cGVJZCgpLCB0cnVlLCBjbGllbnRJZHNfLmdldFNlcnZlcklkKCkpOwotICAgIH0KLSAgfSAgCi0gICAgCi0gIHByb3RlY3RlZCBEZWZhdWx0UnVudGltZVRyaXBsZXQgZ2V0RGVmYXVsdFJ1bnRpbWUoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHR5cGVJZCwgYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXIpCi0gIHsKLSAgICBTdHJpbmdbXSBydW50aW1lcyA9IG51bGw7Ci0gICAgaWYgKGlzQ2xpZW50KQotICAgIHsKLSAgICAgIHJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUodHlwZUlkLCBydW50aW1lUHJlZmVycmVkU2VydmVyKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQsIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXIpOwotICAgIH0KLSAgICAgICAgCi0gICAgLy9TcGxpdCB0aGUgYXJyYXkgb2Ygc2VydmljZS9jbGllbnQgcnVudGltZXMgaW50byBvbmUgY29udGFpbmluZyB0aGUgcHJlZmVycmVkIHNldCBhbmQgb25lIGNvbnRhaW5pbmcgdGhlIHJlc3QuCi0gICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgU3RyaW5nIHByZWZlcnJlZFJ1bnRpbWVJZCA9IGNvbnRleHQuZ2V0UnVudGltZUlkKCk7Ci0gICAgU3RyaW5nIGZhbGxiYWNrUnVudGltZUlkID0gY29udGV4dC5nZXRGYWxsYmFja1J1bnRpbWVJZCgpOwotICAgIEFycmF5TGlzdCBwcmVmZXJyZWRSdW50aW1lSWRzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBBcnJheUxpc3Qgb3RoZXJSdW50aW1lSWRzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBrPTA7IGs8cnVudGltZXMubGVuZ3RoOyBrKysgKQotICAgIHsKLSAgICAgIFN0cmluZyBkZXNjUnVudGltZUlkID0gbnVsbDsKLSAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgIHsKLSAgICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChydW50aW1lc1trXSk7Ci0gICAgICAgIGRlc2NSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQocnVudGltZXNba10pOwotICAgICAgICBkZXNjUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKGRlc2NSdW50aW1lSWQuZXF1YWxzKHByZWZlcnJlZFJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFJ1bnRpbWVJZHNMaXN0LmFkZChydW50aW1lc1trXSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChkZXNjUnVudGltZUlkLmVxdWFscyhmYWxsYmFja1J1bnRpbWVJZCkpIAotICAgICAgewotICAgIAlvdGhlclJ1bnRpbWVJZHNMaXN0LmFkZCgwLCBydW50aW1lc1trXSk7ICAvLyBhZGQgdG8gYmVnaW5uaW5nIG9mIG90aGVyUnVudGltZUlkc0xpc3QKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgb3RoZXJSdW50aW1lSWRzTGlzdC5hZGQocnVudGltZXNba10pOwotICAgICAgfQotICAgIH0KLSAgICBTdHJpbmdbXSBwcmVmZXJyZWRSdW50aW1lSWRzID0gKFN0cmluZ1tdKXByZWZlcnJlZFJ1bnRpbWVJZHNMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgU3RyaW5nW10gb3RoZXJSdW50aW1lSWRzID0gKFN0cmluZ1tdKW90aGVyUnVudGltZUlkc0xpc3QudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAKLSAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IG51bGw7Ci0gICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgU3RyaW5nIGZSdW50aW1lTmFtZSA9IG51bGw7Ci0gICAgCi0gICAgLy9JZiB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHByb2plY3QgZXhpc3RzIGFuZCBmYWNldHMgY2FuIGJlIGluZmVycmVkIGZyb20gaXQsIGxvb2sgZm9yCi0gICAgLy9hIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWUgdGhhdCBtYXRjaGVzIHRoZSBwcm9qZWN0J3MgZmFjZXRzIGFuZCBhbHNvLCBpZiBwb3NzaWJsZSwgaXRzIGZhY2V0IHJ1bnRpbWUuCi0gICAgLy9QcmVmZXJlbmNlIHNob3VsZCBiZSBnaXZlbiB0byB0aGUgcHJlZmVycmVkIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWVzLiAKLSAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICBmUnVudGltZSA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRSdW50aW1lRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICBmUnVudGltZU5hbWUgPSBudWxsOwotICAgICAgaWYgKGZSdW50aW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZSdW50aW1lTmFtZSA9IGZSdW50aW1lLmdldE5hbWUoKTsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLzEuIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiBvbmUgb2YgdGhlIHByZWZlcnJlZCBzZXJ2aWNlL2NsaWVudCBydW50aW1lcyBtYXRjaGVzIHRoZSBleGlzdGluZwotICAgICAgICAvL3Byb2plY3QncyBmYWNldHMgYW5kIHJ1bnRpbWUuCi0gICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgcHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGg7IHArKykKLSAgICAgICAgewotICAgICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcHJmdiA9IG51bGw7Ci0gICAgICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQocHJlZmVycmVkUnVudGltZUlkc1twXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChwcmVmZXJyZWRSdW50aW1lSWRzW3BdKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy9GYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHByZnYsIGZhY2V0VmVyc2lvbnMpOwotICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdChpc0NsaWVudCwgcHJlZmVycmVkUnVudGltZUlkc1twXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgIGJvb2xlYW4gZmFjZXRSdW50aW1lTWF0Y2hlcyA9IHRydWU7Ci0gICAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhY2V0UnVudGltZU1hdGNoZXMgPSBGYWNldFV0aWxzLmlzRmFjZXRSdW50aW1lU3VwcG9ydGVkKHByZnYsIGZSdW50aW1lTmFtZSk7ICAKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgIAotICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkgJiYgZmFjZXRSdW50aW1lTWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzW3BdKTsKLSAgICAgICAgICAgIHJldHVybiBkcnQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLzIuIFNlY29uZCwgY2hlY2sgdG8gc2VlIGlmIG9uZSBvZiB0aGUgb3RoZXIgY2xpZW50UnVudGltZXMgbWF0Y2hlcyB0aGUgZXhpc3RpbmcKLSAgICAgICAgLy9wcm9qZWN0J3MgZmFjZXRzIGFuZCBydW50aW1lLiAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGk9MDsgaTxvdGhlclJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsgICAgICAgIAotICAgICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gbnVsbDsKLSAgICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKG90aGVyUnVudGltZUlkc1tpXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7ICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQob3RoZXJSdW50aW1lSWRzW2ldKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGlzQ2xpZW50LCBvdGhlclJ1bnRpbWVJZHNbaV0sIHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBib29sZWFuIGZhY2V0UnVudGltZU1hdGNoZXMgPSB0cnVlOwotICAgICAgICAgIGlmIChmUnVudGltZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYWNldFJ1bnRpbWVNYXRjaGVzID0gRmFjZXRVdGlscy5pc0ZhY2V0UnVudGltZVN1cHBvcnRlZChyZnYsIGZSdW50aW1lTmFtZSk7ICAKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkgJiYgZmFjZXRSdW50aW1lTWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChvdGhlclJ1bnRpbWVJZHNbaV0pOwotICAgICAgICAgICAgcmV0dXJuIGRydDsKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vMy4gVGhpcmQsIGNoZWNrIHRvIHNlZSBpZiBvbmUgb2YgdGhlIHByZWZlcnJlZCBjbGllbnRSdW50aW1lcyBtYXRjaGVzIHRoZSBleGlzdGluZwotICAgICAgICAvL3Byb2plY3QncyBmYWNldHMuCi0gICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgcHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGg7IHArKykKLSAgICAgICAgewotICAgICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGlzQ2xpZW50LCBwcmVmZXJyZWRSdW50aW1lSWRzW3BdLCBwcm9qZWN0LmdldE5hbWUoKSk7IAotICAgICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQocHJlZmVycmVkUnVudGltZUlkc1twXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBkcnQ7Ci0gICAgICAgICAgICB9ICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vNC4gRm91cnRoLCBjaGVjayB0byBzZWUgaWYgdGhlIG9uZSB0aGUgb3RoZXIgY2xpZW50UnVudGltZXMgbWF0Y2hlcyB0aGUgZXhpc3RpbmcKLSAgICAgICAgLy9wcm9qZWN0J3MgZmFjZXRzLiAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGk9MDsgaTxvdGhlclJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdChpc0NsaWVudCwgb3RoZXJSdW50aW1lSWRzW2ldLCBwcm9qZWN0LmdldE5hbWUoKSk7IAotICAgICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQob3RoZXJSdW50aW1lSWRzW2ldKTsKLSAgICAgICAgICAgICAgcmV0dXJuIGRydDsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9IYXZlbid0IHJldHVybmVkIHlldCBzbyB0aGlzIG1lYW5zIHRoYXQgdGhlIGludGl0aWFsbHkgc2VsZWN0ZWQgcHJvamVjdCBjYW5ub3QgYmUgdXNlZAotICAgIC8vdG8gaW5mbHVlbmNlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWUuIAotICAgIAotICAgICAgLy9Vc2UgdGhlIHByZWZlcnJlZCBwcm9qZWN0IHR5cGVzIHRvIGluZmx1ZW5jZSB0aGUgc2VsZWN0aW9uIG9mIGEgcnVudGltZS4KLSAgICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgcHRjID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IG51bGw7Ci0gICAgICBpZiAoaXNDbGllbnQpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFRlbXBsYXRlSWRzID0gcHRjLmdldENsaWVudFR5cGVzKCk7ICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAKLSAgICAgIGZvciAoaW50IG49MDsgbjxwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IG4rKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByZWZlcnJlZFRlbXBsYXRlSWQgPSBwcmVmZXJyZWRUZW1wbGF0ZUlkc1tuXTsKLQotICAgICAgICBmb3IgKGludCBtPTA7IG08cHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGg7IG0rKykKLSAgICAgICAgewotICAgICAgICAgIC8vSWYgdGhpcyBjbGllbnQgb3Igc2VydmljZSBydW50aW1lIHN1cHBvcnRzIHRoaXMgdGVtcGxhdGUsIGNob29zZSBpdCBhbmQgZXhpdC4gICAgICAgIAotICAgICAgICAgIGJvb2xlYW4gbWF0Y2hlcyA9IGZhbHNlOwotICAgICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtYXRjaGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUocHJlZmVycmVkUnVudGltZUlkc1ttXSwgcHJlZmVycmVkVGVtcGxhdGVJZCk7ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtYXRjaGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFRlbXBsYXRlKHByZWZlcnJlZFJ1bnRpbWVJZHNbbV0sIHByZWZlcnJlZFRlbXBsYXRlSWQpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgICAgICAgIC8vSWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdCwgdXNlIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4KLSAgICAgICAgICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBpdCBtZWFucyB0aGF0IHByZXZpb3VzIGNvZGUgaW4gdGhpcyBtZXRob2QKLSAgICAgICAgICAgIC8vZGV0ZXJtaW5lZCBpdCB0byBub3QgYmUgYSBzdWl0YWJsZSBwcm9qZWN0LiBDbGVhciB0aGUgcHJvamVjdCBuYW1lLgotICAgICAgICAgICAgaWYgKHByb2plY3Q9PW51bGwgfHwgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzW21dKTsKLSAgICAgICAgICAgIHJldHVybiBkcnQ7ICAgICAgICAgICAgCi0gICAgICAgICAgfSAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAKLSAgICAKLSAgICAvL1N0aWxsIGhhdmVuJ3QgcmV0dXJuZWQuIFJldHVybiB0aGUgZmlyc3QgcHJlZmVycmVkIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWUgaWQuCi0gICAgaWYgKHByZWZlcnJlZFJ1bnRpbWVJZHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgIC8vSWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdCwgdXNlIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4KLSAgICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBpdCBtZWFucyB0aGF0IHByZXZpb3VzIGNvZGUgaW4gdGhpcyBtZXRob2QKLSAgICAgIC8vZGV0ZXJtaW5lZCBpdCB0byBub3QgYmUgYSBzdWl0YWJsZSBwcm9qZWN0LiBDbGVhciB0aGUgcHJvamVjdCBuYW1lLiAgICAgIAotICAgICAgaWYgKHByb2plY3Q9PW51bGwgfHwgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgfQotICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgCi0gICAgfQotICAgICAgCi0gICAgaWYgKG90aGVyUnVudGltZUlkcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgLy9JZiB0aGUgcHJvamVjdCBkb2Vzbid0IGV4aXN0LCB1c2UgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCB3YXMgcGFzc2VkIGluLgotICAgICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIGl0IG1lYW5zIHRoYXQgcHJldmlvdXMgY29kZSBpbiB0aGlzIG1ldGhvZAotICAgICAgLy9kZXRlcm1pbmVkIGl0IHRvIG5vdCBiZSBhIHN1aXRhYmxlIHByb2plY3QuIENsZWFyIHRoZSBwcm9qZWN0IG5hbWUuCi0gICAgICBpZiAocHJvamVjdD09bnVsbCB8fCBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBkcnQuc2V0UnVudGltZUlkKG90aGVyUnVudGltZUlkc1swXSk7Ci0gICAgICByZXR1cm4gZHJ0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgIGRydC5zZXRGYWNldE1hdGNoZXIobnVsbCk7Ci0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QsIHVzZSB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4uCi0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgaXQgbWVhbnMgdGhhdCBwcmV2aW91cyBjb2RlIGluIHRoaXMgbWV0aG9kCi0gICAgICAvL2RldGVybWluZWQgaXQgdG8gbm90IGJlIGEgc3VpdGFibGUgcHJvamVjdC4gQ2xlYXIgdGhlIHByb2plY3QgbmFtZS4KLSAgICAgIGlmIChwcm9qZWN0PT1udWxsIHx8IHByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShudWxsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGRydC5zZXRSdW50aW1lSWQobnVsbCk7Ci0gICAgICByZXR1cm4gZHJ0OwotICAgIH0gICAgCi0gIH0KLSAgLyoqCi0gKiAKLSAqIEBwYXJhbSBwcm9qZWN0Ci0gKiBAcmV0dXJuCi0gKi8KLSAgcHJvdGVjdGVkIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldFByb2plY3RFQVJDaG9pY2UoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIFN0cmluZ1tdIGZsZXhQcm9qZWN0cyA9IGdldEFsbEZsZXhpYmxlUHJvamVjdHMoKTsKLSAgICBTZWxlY3Rpb25MaXN0IGxpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChmbGV4UHJvamVjdHMsIDApOwotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMobGlzdCwgbnVsbCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTZWxlY3Rpb25MaXN0IGdldEVBUlByb2plY3RzKCkKLSAgewotICAgIFN0cmluZ1tdIGZsZXhQcm9qZWN0cyA9IGdldEFsbEZsZXhpYmxlUHJvamVjdHMoKTsKLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3QoZmxleFByb2plY3RzLCAwKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElSZXNvdXJjZSBnZXRSZXNvdXJjZUZyb21Jbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIAotICAgICAgCi0gIC8qCi0gICAqIFNldCBkZWZhdWx0cyBmb3IgdGhlIGNsaWVudC1zaWRlIGZyb20gdGhlIHNlcnZpY2Utc2lkZSBpZiBwb3NzaWJsZS4KLSAgICogU2V0cyBjbGllbnRQcm9qZWN0TmFtZV8gdG8gYSB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VydmljZSBwcm9qZWN0IG5hbWUuCi0gICAqIAotICAgKiBSZXR1cm5zIGFuIElTdGF0dXMuT0sgaWYgdGhlIHNlcnZpY2Ugc2lkZSB2YWx1ZXMgZm9yIHNlcnZlciBhbmQgV2ViIAotICAgKiBzZXJ2aWNlIHJ1bnRpbWUgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSB2YWx1ZXMgZm9yIGNsaWVudFJ1bnRpbWVJZF8sCi0gICAqIGNsaWVudENvbXBvbmVudFR5cGVfLCBhbGwgdGhlIHZhbHVlcyBpbiBjbGllbnRJZHNfLCBhbmQgY2xpZW50RWFyUHJvamVjdE5hbWVfLgotICAgKiAKLSAgICogUmV0dXJucyBhbiBJU3RhdHVzLkVSUk9SIG90aGVyd2lzZSwgbGVhdmluZyBvbmx5IHRoZSBjbGllbnRQcm9qZWN0TmFtZV8gc2V0LiAKLSAgICovCi0gIHByb3RlY3RlZCBJU3RhdHVzIGRlZmF1bHRDbGllbnRTaWRlRnJvbVNlcnZpY2VTaWRlKFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUsIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VJZHMsIGJvb2xlYW4gc2VydmljZU5lZWRFQVIsIFN0cmluZyBzZXJ2aWNlRWFyUHJvamVjdE5hbWUpCi0gIHsKLSAgICAvLzEuIFN0YXJ0IHdpdGggc2V0dGluZyB0aGUgZGVmYXVsdCBjbGllbnQgcHJvamVjdCBuYW1lIGJhc2VkIG9uIHRoZSBzZXJ2aWNlIHByb2plY3QgbmFtZS4KLSAgICBib29sZWFuIGlzRUpCID0gZmFsc2U7Ci0gICAgU3RyaW5nIGltcGxJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHNlcnZpY2VJZHMuZ2V0VHlwZUlkKCkpOwotICAgIGlzRUpCID0gKGltcGxJZC5lcXVhbHMoIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuZWpiIikpOwotICAgIFN0cmluZ1tdIHVwZGF0ZWROYW1lcyA9IFJlc291cmNlVXRpbHMuZ2V0Q2xpZW50UHJvamVjdENvbXBvbmVudE5hbWUoc2VydmljZVByb2plY3ROYW1lLCBzZXJ2aWNlUHJvamVjdE5hbWUsIGlzRUpCKTsKLSAgICBjbGllbnRQcm9qZWN0TmFtZV8gPSB1cGRhdGVkTmFtZXNbMF07Ci0gICAgCi0gICAgLy8yLiBJZGVhbGx5LCB0aGUgc2VydmVyIGFuZCBydW50aW1lIG9uIHRoZSBjbGllbnQtc2lkZSB3aWxsIGJlIGRlZmF1bHRlZAotICAgIC8vICAgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSBzZXJ2aWNlIHNpZGUuIElmIGEgY2xpZW50IHJ1bnRpbWUgaWQgdGhhdCAKLSAgICAvLyAgIHN1cHBvcnRzIGNsaWVudFByb2plY3ROYW1lXyBhbmQgdGhlIHNlcnZpY2Utc2lkZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgZGVmYXVsdHMKLSAgICAvLyAgIGNhbiBiZSBmb3VuZCwgY2hvb3NlIGl0LgotICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKLSAgICBUeXBlUnVudGltZVNlcnZlciB0ZXN0SWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0gICAgdGVzdElkcy5zZXRUeXBlSWQoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSk7Ci0gICAgdGVzdElkcy5zZXRSdW50aW1lSWQoc2VydmljZUlkcy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgdGVzdElkcy5zZXRTZXJ2ZXJJZChzZXJ2aWNlSWRzLmdldFNlcnZlcklkKCkpOwotICAgIHRlc3RJZHMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2aWNlSWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgCi0gICAgaWYgKGNsaWVudFByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSAiIjsKLSAgICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lSWQodGVzdElkcywgc2VydmljZVByb2plY3ROYW1lLCBjbGllbnRDb21wb25lbnRUeXBlXyk7Ci0gICAgICBpZiAoY2xpZW50UnVudGltZUlkXyAhPSBudWxsICYmIGNsaWVudFJ1bnRpbWVJZF8ubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgY2xpZW50SWRzXy5zZXRSdW50aW1lSWQoc2VydmljZUlkcy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VJZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU2VlIGlmIHRoZXJlIGlzIGEgY2xpZW50IHByb2plY3QgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBzZXJ2aWNlLXNpZGUKLSAgICAgIC8vc2VydmVyIGFuZCBydW50aW1lIGRlZmF1bHRzLiBQaWNrIGEgY2xpZW50IHByb2plY3QgdHlwZSBiYXNlZCBvbiBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2VzLgotICAgICAgLy9DaG9vc2UgdGhlIGNsaWVudFJ1bnRpbWVJZF8gYWNjb3JkaW5nbHkuCi0gICAgICBTdHJpbmdbXSB0ZW1wbGF0ZUlkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSwgdGVzdElkcy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgICBpZiAodGVtcGxhdGVJZHMgIT0gbnVsbCAmJiB0ZW1wbGF0ZUlkcy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0YyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRDbGllbnRUeXBlcygpOwotICAgICAgICBvdXRlcjogZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcGxhdGVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZUlkc1tpXTsKLSAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEdldCBhIGNsaWVudFJ1bnRpbWVJZCBmb3IgdGhpcyB0ZW1wbGF0ZQotICAgICAgICAgICAgICBTdHJpbmcgbmV3Q2xpZW50UnVudGltZUlkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKHRlc3RJZHMsIGNsaWVudFByb2plY3ROYW1lXywKLSAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQpOwotICAgICAgICAgICAgICBpZiAobmV3Q2xpZW50UnVudGltZUlkLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBuZXdDbGllbnRSdW50aW1lSWQ7Ci0gICAgICAgICAgICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSB0ZW1wbGF0ZUlkOwotICAgICAgICAgICAgICAgIGNsaWVudElkc18uc2V0UnVudGltZUlkKHNlcnZpY2VJZHMuZ2V0UnVudGltZUlkKCkpOwotICAgICAgICAgICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgLy8zLiBJZiBzdGVwIDIgd2FzIHN1Y2Nlc3NmdWwsIGNsaWVudFJ1bnRpbWVJZF8gc2hvdWxkIG5vdyBiZSBzZXQsIGFsb25nIHdpdGggY2xpZW50UHJvamVjdE5hbWVfLAotICAgIC8vICAgY2xpZW50Q29tcG9uZW50VHlwZV8sIGFuZCBhbGwgdGhlIHZhbHVlcyBpbiBjbGllbnRJZHNfLiBBbGwgdGhhdCByZW1haW5zIGlzIHNldHRpbmcgdGhlIEVBUi4KLSAgICBpZiAoY2xpZW50UnVudGltZUlkXyAhPSBudWxsICYmIGNsaWVudFJ1bnRpbWVJZF8ubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBzZXREZWZhdWx0Q2xpZW50RWFyUHJvamVjdCgpOwotICAgICAgLy9VcGRhdGUgdGhlIGNsaWVudCBzaWRlIEVBUiBmcm9tIHRoZSBzZXJ2aWNlIHNpZGUgRUFSIGlmIG5lY2Vzc2FyeS4KLSAgICAgIGlmIChzZXJ2aWNlTmVlZEVBUikKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdENsaWVudEVhckZyb21TZXJ2aWNlRWFyKHNlcnZpY2VQcm9qZWN0TmFtZSwgc2VydmljZUVhclByb2plY3ROYW1lKTsgCi0gICAgICB9Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3RlcCAyIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gQ2xpZW50IHNpZGUgZGVmYXVsdGluZyBjYW5ub3QgYmUgZG9uZSB1c2luZyB0aGUgc2VydmljZSBzaWRlIHNlcnZlcgotICAgICAgLy9hbmQgd2ViIHNlcnZpY2UgcnVudGltZSBkZWZhdWx0cy4gUmV0dXJuIGFuIGVycm9yIHN0YXR1cy4KLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygiIik7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBkZWZhdWx0Q2xpZW50RWFyRnJvbVNlcnZpY2VFYXIoU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSwgU3RyaW5nIHNlcnZpY2VFYXJQcm9qZWN0TmFtZSkKLSAgewotICAgIC8vQ2xpZW50IHNpZGUKLSAgICBpZiAoY2xpZW50TmVlZEVBUl8pCi0gICAgewotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgICAgaWYoY2xpZW50UHJvamVjdD09bnVsbCB8fCAhY2xpZW50UHJvamVjdC5leGlzdHMoKSAKLSAgICAgICAgfHwgIShjbGllbnRFYXJQcm9qZWN0TmFtZV8uZXF1YWxzSWdub3JlQ2FzZShzZXJ2aWNlRWFyUHJvamVjdE5hbWUpKSkKLSAgICAgIHsKLSAgICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGM9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOyAgICAgICAgIAotICAgICAgICBpZiAoIXB0Yy5pc1VzZVR3b0VBUnMoKSkgCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBzZXJ2aWNlRWFyUHJvamVjdE5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAKLSAgICAgICAgewotICAgICAgICAgIElQcm9qZWN0IHByb3h5RUFSUHJvamVjdCA9IGdldFVuaXF1ZUNsaWVudEVBUihjbGllbnRFYXJQcm9qZWN0TmFtZV8sIHNlcnZpY2VFYXJQcm9qZWN0TmFtZSwgY2xpZW50UHJvamVjdE5hbWVfLCBzZXJ2aWNlUHJvamVjdE5hbWUpOwotICAgICAgICAgIGNsaWVudEVhclByb2plY3ROYW1lXyA9IHByb3h5RUFSUHJvamVjdC5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRVbmlxdWVDbGllbnRFQVIoU3RyaW5nIGVhclByb2plY3ROYW1lLCBTdHJpbmcgc2VydmljZUVBUlByb2plY3QsIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSwgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSkgewotCi0gICAgU3RyaW5nIHByb2plY3ROYW1lID0gbmV3IFN0cmluZygpOwotICAgIC8vSWYgdGhlIGNsaWVudCBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QgYW5kIHRoZSBzZXJ2aWNlIHByb2plY3QgZG9lcywgZW5zdXJlIHRoZQotICAgIC8vdGhlIGNsaWVudCBzaWRlIEVBUidzIEoyRUUgbGV2ZWwgaXMgc3VjaCB0aGF0IHRoZSBzZXJ2aWNlIHByb2plY3QgY291bGQgYmUgYWRkZWQgdG8gaXQuCi0gICAgLy9UaGlzIHdpbGwgZW5zdXJlIHdlIGRvbid0IGRlZmF1bHQgdGhlIHBhZ2Ugd2l0aCBhIGNsaWVudCBwcm9qZWN0IEVBUiBhdCBhIGxvd2VyCi0gICAgLy9KMkVFIGxldmVsIHRoYW4gdGhlIHNlcnZpY2Ugc2lkZS4KLSAgICBib29sZWFuIGdvb2RKMkVFTGV2ZWwgPSB0cnVlOwotICAgIGlmICghZWFyUHJvamVjdE5hbWUuZXF1YWxzSWdub3JlQ2FzZShzZXJ2aWNlRUFSUHJvamVjdCkpCi0gICAgewotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZSk7Ci0gICAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWUpOwotICAgICAgSVByb2plY3QgZWFyUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0TmFtZSk7Ci0gICAgICBpZiAoIWNsaWVudFByb2plY3QuZXhpc3RzKCkgJiYgc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gY2FuQXNzb2NpYXRlID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUldpdGhvdXRXYXJuaW5nKHNlcnZpY2VQcm9qZWN0LCBlYXJQcm9qZWN0KTsKLSAgICAgICAgZ29vZEoyRUVMZXZlbCA9IChjYW5Bc3NvY2lhdGUpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoIWVhclByb2plY3ROYW1lLmVxdWFsc0lnbm9yZUNhc2Uoc2VydmljZUVBUlByb2plY3QpICYmIGdvb2RKMkVFTGV2ZWwpIHsKLSAgICAgIHByb2plY3ROYW1lID0gZWFyUHJvamVjdE5hbWU7Ci0gICAgfSAgICAKLSAgICBlbHNlIHsKLSAgICAgIHByb2plY3ROYW1lID0gY2xpZW50UHJvamVjdE5hbWUrREVGQVVMVF9DTElFTlRfRUFSX1BST0pFQ1RfRVhUOwotICAgICAgaW50IGk9MTsgICAgICAKLSAgICAgIHdoaWxlIChwcm9qZWN0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHNlcnZpY2VFQVJQcm9qZWN0KSkgewotICAgICAgICBwcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lK2k7Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb2plY3ROYW1lLmVxdWFscygiIikgPyBudWxsIDogUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXREZWZhdWx0c0ZvckV4dGVuc2lvbihJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgSVdlYlNlcnZpY2VSdW50aW1lIHdzcnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pOwotICAgIGlmICh3c3J0ICE9IG51bGwpCi0gICAgewotICAgICAgV2ViU2VydmljZUNsaWVudEluZm8gd3NJbmZvID0gbmV3IFdlYlNlcnZpY2VDbGllbnRJbmZvKCk7ICAgICAgCi0gICAgICB3c0luZm8uc2V0U2VydmVyRmFjdG9yeUlkKGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICB3c0luZm8uc2V0U2VydmVySW5zdGFuY2VJZChjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgICB3c0luZm8uc2V0U3RhdGUoV2ViU2VydmljZVN0YXRlLlVOS05PV05fTElURVJBTCk7Ci0gICAgICB3c0luZm8uc2V0V2ViU2VydmljZVJ1bnRpbWVJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIHdzSW5mby5zZXRXc2RsVVJMKHdzZGxVUklfKTsKLQotICAgICAgd2ViU2VydmljZUNsaWVudF8gPSB3c3J0LmdldFdlYlNlcnZpY2VDbGllbnQod3NJbmZvKTsKLSAgICAgIFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5DTElFTlRfTElURVJBTDsKLSAgICAgIGlmIChyZXNvdXJjZUNvbnRleHRfICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbnRleHRfID0gbmV3IFNpbXBsZUNvbnRleHQodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdGVzdF8sIGZhbHNlLCBzY2VuYXJpbywgcmVzb3VyY2VDb250ZXh0Xy5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpLCByZXNvdXJjZUNvbnRleHRfCi0gICAgICAgICAgICAuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpLCByZXNvdXJjZUNvbnRleHRfLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoY2xpZW50SW5pdGlhbFByb2plY3RfID09IG51bGwpCi0gICAgewotICAgICAgY2xpZW50SW5pdGlhbFByb2plY3RfID0gZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgfQotICB9Ci0gIAotICAvLyBUaGlzIGlzIGZvciB0aGUgQW50IHNjZW5hcmlvIHdoZXJlIHRoZSBjbGllbnQgcHJvamVjdCBuYW1lIGNhbiBiZSBzZXQgaW4gdGhlIHByb3BlcnR5IGZpbGUuCi0gIC8vIElmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIENsaWVudFByb2plY3ROYW1lIHVzZSBpdCBmb3IgZGVmYXVsdGluZyBwdXJwb3NlcwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotCSAgY2xpZW50UHJvamVjdE5hbWVfID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEluaXRpYWxQcm9qZWN0KElQcm9qZWN0IGNsaWVudEluaXRpYWxQcm9qZWN0KQotICB7Ci0gICAgY2xpZW50SW5pdGlhbFByb2plY3RfID0gY2xpZW50SW5pdGlhbFByb2plY3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gaW5pdGlhbEluaXRpYWxTZWxlY3Rpb25fIFRoZSBpbml0aWFsSW5pdGlhbFNlbGVjdGlvbl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbEluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpbml0aWFsUHJvamVjdF8gPSBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oaW5pdGlhbEluaXRpYWxTZWxlY3Rpb24pOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnROZWVkRUFSKCkKLSAgewotICAgIHJldHVybiBjbGllbnROZWVkRUFSXzsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcGFyc2VyXyBUaGUgcGFyc2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpIHsKLSAgICBwYXJzZXJfID0gcGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgd3NkbFVSSV8gPSB3c2RsVVJJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGVzdF8gPSB0ZXN0U2VydmljZTsKLSAgfSAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7ICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRBbGxGbGV4aWJsZVByb2plY3RzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIXByb2plY3RzW2ldLmdldE5hbWUoKS5lcXVhbHMoIlNlcnZlcnMiKSAmJiAhcHJvamVjdHNbaV0uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkKLSAgICAgIHsKLSAgICAgICAgdi5hZGQocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pdi50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgY2xhc3MgRmFjZXRSdW50aW1lTWF0Y2hlcgotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcjsKLSAgICBib29sZWFuIHJ1bnRpbWVNYXRjaGVzOwotICAgIAotICAgIHB1YmxpYyBGYWNldE1hdGNoZXIgZ2V0RmFjZXRNYXRjaGVyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFjZXRNYXRjaGVyOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRGYWNldE1hdGNoZXIoRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcikKLSAgICB7Ci0gICAgICB0aGlzLmZhY2V0TWF0Y2hlciA9IGZhY2V0TWF0Y2hlcjsKLSAgICB9Ci0gICAgcHVibGljIGJvb2xlYW4gaXNSdW50aW1lTWF0Y2hlcygpCi0gICAgewotICAgICAgcmV0dXJuIHJ1bnRpbWVNYXRjaGVzOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lTWF0Y2hlcyhib29sZWFuIHJ1bnRpbWVNYXRjaGVzKQotICAgIHsKLSAgICAgIHRoaXMucnVudGltZU1hdGNoZXMgPSBydW50aW1lTWF0Y2hlczsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBjbGFzcyBEZWZhdWx0UnVudGltZVRyaXBsZXQKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXJfOwotICAgIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gICAgU3RyaW5nIHJ1bnRpbWVJZF87Ci0gICAgCi0gICAgCi0gICAgcHVibGljIERlZmF1bHRSdW50aW1lVHJpcGxldCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgRmFjZXRNYXRjaGVyIGdldEZhY2V0TWF0Y2hlcigpCi0gICAgewotICAgICAgcmV0dXJuIGZhY2V0TWF0Y2hlcl87Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHNldEZhY2V0TWF0Y2hlcihGYWNldE1hdGNoZXIgZmFjZXRNYXRjaGVyXykKLSAgICB7Ci0gICAgICB0aGlzLmZhY2V0TWF0Y2hlcl8gPSBmYWNldE1hdGNoZXJfOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3ROYW1lKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWVfKQotICAgIHsKLSAgICAgIHRoaXMucHJvamVjdE5hbWVfID0gcHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJZCgpCi0gICAgewotICAgICAgcmV0dXJuIHJ1bnRpbWVJZF87Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHNldFJ1bnRpbWVJZChTdHJpbmcgcnVudGltZUlkXykKLSAgICB7Ci0gICAgICB0aGlzLnJ1bnRpbWVJZF8gPSBydW50aW1lSWRfOwotICAgIH0gICAgICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MzNjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvUHJvamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDgsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIyMSAgIDEyMjY2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjIzICAgMTI5MDIwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTEwICAgMTQwODY4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MjQgICAxNDEwMjQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA4MjkgICAxNDU0NDkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBzZXJ2aWNlIGNsaWVudCBwcm9qZWN0IHR5cGUgZHJvcGRvd24gZGlzYWJsZWQgYWZ0ZXIgc2VsZWN0aW5nIGNsaWVudCBwcm9qZWN0Ci0gKiAyMDA2MDgyOSAgIDE4MDgzMyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCAgTmV3IFdlYiBTZXJ2aWNlIHdpemFyZCBzZXJ2aWNlIHNldHRpbmdzIGRpYWxvZyBoYXMgdW5sYWJlbGxlZCBlbmFibGVkIHRleHQgZmllbGRzCi0gKiAyMDA4MDQwOSAgIDIyNjA0NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MjggICAyMjQ3MjYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKLSAqIDIwMDkwMzAyICAgMjQ5NjAyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFBJSS0gYXNzb2NpYXRpb24gd2FybmluZyBtZXNzYWdlIG5lZWRzIHVwZGF0ZQotICogMjAwOTA5MTAgICAyODkxMTMgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycyAtICBMaW51eDogdXNhYmlsaXR5IGlzc3VlIHdoZW4gc2VsZWN0aW5nIGEgSmF2YSBQcm9qZWN0IGluIHRoZSBTcGVjaWZ5IENsaWVudCBQcm9qZWN0IFNldHRpbmdzIGRpYWxvZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5pbnRlcm5hbC52YWxpZGF0aW9uLkVBUlZhbGlkYXRpb25NZXNzYWdlUmVzb3VyY2VIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRGVmYXVsdGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIHsKLQotCi0gIAotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCi0gIC8vcHJpdmF0ZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBwcm9qZWN0c187Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gbmVlZEVBUl87Ci0gIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHRyc0lkc187Ci0KLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcl87Ci0KLSAgcHJpdmF0ZSBUZXh0IG1lc3NhZ2VUZXh0XzsKLQotICBwcml2YXRlIGJvb2xlYW4gaXNDbGllbnRfID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBieXRlIENSRUFURV9QUk9KRUNUID0gKGJ5dGUpIDE7Ci0KLSAgcHJpdmF0ZSBieXRlIENSRUFURV9FQVIgPSAoYnl0ZSkgMjsKLQotICBwcml2YXRlIGJ5dGUgQUREX0VBUl9BU1NPQ0lBVElPTiA9IChieXRlKSA0OwotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50XzsKLSAgcHJpdmF0ZSBDb21ibyBtb2R1bGVQcm9qZWN0XzsKLSAgcHJpdmF0ZSBDb21ibyBlYXJQcm9qZWN0XzsKLSAgcHJpdmF0ZSBDb21ibyBwcm9qZWN0VHlwZV87Ci0gIAotICBwcml2YXRlIFN0cmluZ1tdIHRlbXBsYXRlc187Ci0KLSAgLy9wcml2YXRlIFN0cmluZyAgIGNvbXBvbmVudFR5cGVfOwotICAKLSAgcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VHlwZUxpc3RlbmVyXzsKLSAgcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBtb2R1bGVQcm9qZWN0TGlzdGVuZXJfOwotICBwcml2YXRlIE1vZGlmeUxpc3RlbmVyIGVhclByb2plY3RMaXN0ZW5lcl87Ci0KLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxNiBmb3IgdGhlIHNlcnZpY2Utc2lkZSBXZWIgcHJvamVjdCBjb21ibyBib3ggb2YgdGhlCi0gICAqIHJ1bnRpbWUgc2VsZWN0aW9uIFBhZ2UKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19DT01CT19QUk9KRUNUID0gIlBXUlMwMDE2IjsKLQotICAvL3ByaXZhdGUgQ29tYm8gbW9kdWxlXzsKLQotICAvKiBDT05URVhUX0lEIFBXUlMwMDE4IGZvciB0aGUgY2xpZW50IHByb2plY3QgdHlwZSBjb21ibyBib3ggb2YgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIFBhZ2UgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1JTX0NPTUJPX0NMSUVOVF9QUk9KRUNUX1RZUEUgPSAiUFdSUzAwMTgiOwotICAKLSAgLyogQ09OVEVYVF9JRCBQV1JTMDAyMCBmb3IgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlIGNvbWJvIGJveCBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fU0VSVklDRV9QUk9KRUNUX1RZUEUgPSAiUFdSUzAwMjAiOyAgICAKLQotICAvL3ByaXZhdGUgQ29tYm8gZWFyTW9kdWxlXzsKLQotICAvKgotICAgKiBEZWZhdWx0IENvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgUHJvamVjdFNlbGVjdGlvbldpZGdldCgpIHsKLSAgfQotCi0gIC8qCi0gICAqIFByb2plY3RTZWxlY3Rpb25XaWRnZXQgQHBhcmFtIGlzQ2xpZW50Ci0gICAqLwotICBwdWJsaWMgUHJvamVjdFNlbGVjdGlvbldpZGdldChib29sZWFuIGlzQ2xpZW50KSB7Ci0gICAgdGhpcy5pc0NsaWVudF8gPSBpc0NsaWVudDsKLSAgfQotICAgIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikgewotCSAgCi0gICAgcGFyZW50XyA9IHBhcmVudDsKLSAgICBVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhwbHVnaW5JZF8pOwotCi0gICAgc3RhdHVzTGlzdGVuZXJfID0gc3RhdHVzTGlzdGVuZXI7Ci0JCQotICAgIGlmIChpc0NsaWVudF8pCi0JewotCSAgbW9kdWxlUHJvamVjdF8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhcmVudCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9QUk9KRUNULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1BST0pFQ1QsIElORk9QT1BfUFdSU19DT01CT19QUk9KRUNULCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgICAgcHJvamVjdFR5cGVfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfVFlQRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdDUl9DT01CT19DTElFTlRfVFlQRSwgSU5GT1BPUF9QV1JTX0NPTUJPX0NMSUVOVF9QUk9KRUNUX1RZUEUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHxTV1QuUkVBRF9PTkxZKTsgICAgICAKLQkgIGVhclByb2plY3RfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfRUFSX1BST0pFQ1QsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfRUFSX1BST0pFQ1QsIElORk9QT1BfUFdSU19DT01CT19QUk9KRUNULCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgIH0KLSAgICBlbHNlIAotCXsgICAgICAKLQkgIG1vZHVsZVByb2plY3RfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1BST0pFQ1QsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1BST0pFQ1QsIElORk9QT1BfUFdSU19DT01CT19QUk9KRUNULCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgICAgcHJvamVjdFR5cGVfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1RZUEUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXQ1JfQ09NQk9fU0VSVklDRV9UWVBFLCBJTkZPUE9QX1BXUlNfQ09NQk9fU0VSVklDRV9QUk9KRUNUX1RZUEUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSk7ICAgICAgCi0JICBlYXJQcm9qZWN0XyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9FQVJfUFJPSkVDVCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfRUFSX1BST0pFQ1QsIElORk9QT1BfUFdSU19DT01CT19QUk9KRUNULCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgIH0KLSAgICAKLSAgICAvL1RlbXBvcmFyaWx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzCi0gICAgCi0gICAgcHJvamVjdFR5cGVMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZXZ0KSAKLSAgICAgIHsKLSAgICAgICAgaGFuZGxlUHJvamVjdFR5cGVDaGFuZ2VkKCk7Ci0gICAgICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotICAgICAgfQotICAgIH07ICAgIAotICAgIAotCW1vZHVsZVByb2plY3RMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotCSAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldnQpIAotCQkJCQkgICAgICAgICAgIHsKLQkJCQkJICAgICAgICAgICAgIGhhbmRsZVByb2plY3RDaGFuZ2VkKCk7Ci0JCQkJCSAgICAgICAgICAgICB1cGRhdGVFQVJTdGF0ZSgpOwotCQkJCQkgICAgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KCBudWxsICk7Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgIAotCWVhclByb2plY3RMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldnQpIAotCQkJCSAgICAgICAgICAgIHsKLQkJCQkgICAgICAgICAgICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotCSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgCQkJCQkgIAotICAgIC8vIG1lc3NhZ2UgYXJlYQotICAgIG1lc3NhZ2VUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dChwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9OT19MQUJFTCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX05PX0xBQkVMLCBudWxsLCBTV1QuV1JBUCB8IFNXVC5NVUxUSSB8IFNXVC5SRUFEX09OTFkpOwotICAgIG1lc3NhZ2VUZXh0Xy5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXRCYWNrZ3JvdW5kKCkpOwotICAgIHNldEVhclByb2plY3RJdGVtcygpOwotICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbmVyc09uKCkKLSAgewotCXByb2plY3RUeXBlXy5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VHlwZUxpc3RlbmVyXyk7Ci0JbW9kdWxlUHJvamVjdF8uYWRkTW9kaWZ5TGlzdGVuZXIoIG1vZHVsZVByb2plY3RMaXN0ZW5lcl8gKTsKLQllYXJQcm9qZWN0Xy5hZGRNb2RpZnlMaXN0ZW5lciggZWFyUHJvamVjdExpc3RlbmVyXyApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbGlzdGVuZXJzT2ZmKCkKLSAgewotICAgIHByb2plY3RUeXBlXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VHlwZUxpc3RlbmVyXyk7Ci0gICAgbW9kdWxlUHJvamVjdF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIoIG1vZHVsZVByb2plY3RMaXN0ZW5lcl8gKTsKLSAgICBlYXJQcm9qZWN0Xy5yZW1vdmVNb2RpZnlMaXN0ZW5lciggZWFyUHJvamVjdExpc3RlbmVyXyApOyAgCi0gIH0KLSAgICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0TmFtZSgpCi0gIHsKLQlyZXR1cm4gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZSggU3RyaW5nIG5hbWUgKQotICB7Ci0JbGlzdGVuZXJzT2ZmKCk7Ci0gICAgbW9kdWxlUHJvamVjdF8uc2V0VGV4dCggbmFtZSApOwotICAgIGhhbmRsZVByb2plY3RDaGFuZ2VkKCk7Ci0gICAgdXBkYXRlRUFSU3RhdGUoKTsKLQlsaXN0ZW5lcnNPbigpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3ROYW1lKCkKLSAgewotICAgIHJldHVybiBlYXJQcm9qZWN0Xy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3ROYW1lKCBTdHJpbmcgbmFtZSApCi0gIHsgCi0JbGlzdGVuZXJzT2ZmKCk7Ci0JZWFyUHJvamVjdF8uc2V0VGV4dCggbmFtZSApOwotCWxpc3RlbmVyc09uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudFR5cGUoIFN0cmluZyB0eXBlICkKLSAgewotICAgIGxpc3RlbmVyc09mZigpOwotICAgIGlmICh0eXBlICE9IG51bGwgJiYgdHlwZS5sZW5ndGgoKT4wKQotICAgIHsKLSAgICAgIFN0cmluZyBsYWJlbCA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbEJ5SWQodHlwZSk7Ci0JICBwcm9qZWN0VHlwZV8uc2V0VGV4dChsYWJlbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHByb2plY3RUeXBlXy5zZXRUZXh0KCIiKTsKLSAgICAKLSAgICBoYW5kbGVQcm9qZWN0VHlwZUNoYW5nZWQoKTsKLSAgICBsaXN0ZW5lcnNPbigpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgaW50IGlkeCA9IHByb2plY3RUeXBlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmICh0ZW1wbGF0ZXNfICE9IG51bGwgJiYgaWR4ID4gLTEpCi0gICAgewotICAgICAgcmV0dXJuIHRlbXBsYXRlc19baWR4XTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyB0ZW1wbGF0ZUxhYmVsID0gcHJvamVjdFR5cGVfLmdldFRleHQoKTsKLSAgICAgIFN0cmluZyB0ZW1wbGF0ZUlkID0gRmFjZXRVdGlscy5nZXRUZW1wbGF0ZUlkQnlMYWJlbCh0ZW1wbGF0ZUxhYmVsKTsKLSAgICAgIHJldHVybiB0ZW1wbGF0ZUlkOwotICAgIH0KLQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXROZWVkRUFSKCkKLSAgewotICAgIHJldHVybiBuZWVkRUFSXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmVlZEVBUihib29sZWFuIGIpCi0gIHsKLSAgICBsaXN0ZW5lcnNPZmYoKTsKLSAgICBuZWVkRUFSXyA9IGI7Ci0gICAgaWYgKG5lZWRFQVJfKQotICAgIHsKLSAgICAgZWFyUHJvamVjdF8uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgcG9wdWxhdGVFQVJDb21ib3MoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVhclByb2plY3RfLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWFyUHJvamVjdF8uc2V0VGV4dCgiIik7Ci0gICAgfQotICAgIGxpc3RlbmVyc09uKCk7Ci0gIH0gICAgCi0KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzKQotICB7Ci0gICAgdHJzSWRzXyA9IHRyczsKLSAgICBpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgCWxpc3RlbmVyc09mZigpOwotICAgICAgICB1cGRhdGVFQVJTdGF0ZSgpOwotICAgICAgICBsaXN0ZW5lcnNPbigpOwkKLSAgICB9CQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoUHJvamVjdEl0ZW1zKCkKLSAgewotICAgIGxpc3RlbmVyc09mZigpOwotICAgIFN0cmluZyBzZWxlY3RlZE1vZHVsZVByb2plY3QgPSBtb2R1bGVQcm9qZWN0Xy5nZXRUZXh0KCk7ICAgIAotICAgIFN0cmluZyBydW50aW1lSWQgPSB0cnNJZHNfLmdldFJ1bnRpbWVJZCgpOwotICAgIFN0cmluZyB0eXBlSWQgPSB0cnNJZHNfLmdldFR5cGVJZCgpOwotICAgIAotICAgIC8vR2V0IGFsbCB0aGUgcHJvamVjdHMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0eXBlIGFuZCBydW50aW1lCi0gICAgU3RyaW5nW10gcHJvamVjdE5hbWVzID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnRfKQotICAgIHsKLSAgICAgIHByb2plY3ROYW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yQ2xpZW50VHlwZUFuZFJ1bnRpbWUodHlwZUlkLCBydW50aW1lSWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvamVjdE5hbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUodHlwZUlkLCBydW50aW1lSWQpOwotICAgIH0KLSAgICAKLSAgICBtb2R1bGVQcm9qZWN0Xy5zZXRJdGVtcyhwcm9qZWN0TmFtZXMpOwotICAgIG1vZHVsZVByb2plY3RfLnNldFRleHQoc2VsZWN0ZWRNb2R1bGVQcm9qZWN0KTsKLSAgICBoYW5kbGVQcm9qZWN0Q2hhbmdlZCgpOwotICAgIHVwZGF0ZUVBUlN0YXRlKCk7Ci0gICAgbGlzdGVuZXJzT24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdEl0ZW1zKCkKLSAgewotICAgIElWaXJ0dWFsQ29tcG9uZW50W10gZWFycyA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0gICAgU3RyaW5nW10gZWFyUHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tlYXJzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaT0wOyBpPGVhclByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBlYXJQcm9qZWN0TmFtZXNbaV09ZWFyc1tpXS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBlYXJQcm9qZWN0Xy5zZXRJdGVtcyhlYXJQcm9qZWN0TmFtZXMpOwotICAgIAotICAgIGlmIChlYXJQcm9qZWN0TmFtZXMubGVuZ3RoID4gMCkKLSAgICAgIGVhclByb2plY3RfLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb2plY3RUeXBlQ2hhbmdlZCgpCi0gIHsKLSAgICB1cGRhdGVFQVJTdGF0ZSgpOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb2plY3RDaGFuZ2VkKCkKLSAgeyAKLSAgICB1cGRhdGVUZW1wbGF0ZXMoKTsgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVUZW1wbGF0ZXMoKQotICB7Ci0gICAgU3RyaW5nIHByb2plY3ROYW1lID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIGlmIChwcm9qZWN0TmFtZSAhPSBudWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpPjApCi0gICAgewotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdFR5cGVfLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBwcm9qZWN0VHlwZV8uZGVzZWxlY3RBbGwoKTsgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwb3B1bGF0ZVByb2plY3RUeXBlQ29tYm8oKTsKLSAgICAgICAgcHJvamVjdFR5cGVfLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVQcm9qZWN0VHlwZUNvbWJvKCkKLSAgewotICAgIC8vR2V0IHRoZSBvbGQgdmFsdWUgaWYgdGhlcmUgd2FzIG9uZS4KLSAgICBTdHJpbmcgb2xkVGVtcGxhdGVJZCA9IGdldENvbXBvbmVudFR5cGUoKTsKLSAgICAKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBudWxsOwotICAgIGlmICh0cnNJZHNfICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgIHsKLSAgICAgICAgdGVtcGxhdGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UHJvamVjdFRlbXBsYXRlcyh0cnNJZHNfLmdldFR5cGVJZCgpLCB0cnNJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGVtcGxhdGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVByb2plY3RUZW1wbGF0ZXModHJzSWRzXy5nZXRUeXBlSWQoKSwgdHJzSWRzXy5nZXRSdW50aW1lSWQoKSk7ICAgICAgCi0gICAgICB9Ci0gICAgCi0gICAgICBTdHJpbmdbXSB0ZW1wbGF0ZUxhYmVscyA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbHModGVtcGxhdGVzKTsKLSAgICAgIHByb2plY3RUeXBlXy5zZXRJdGVtcyh0ZW1wbGF0ZUxhYmVscyk7Ci0gICAgICB0ZW1wbGF0ZXNfID0gdGVtcGxhdGVzOwotICAgICAgCi0gICAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAKLSAgICAgICAgLy9TZWxlY3QgdGhlIHByZXZpb3VzIHRlbXBsYXRlIHNlbGVjdGlvbiBpZiB0aGF0IG9uZSBpcyBpbiB0aGUgbGlzdC4KLSAgICAgICAgaW50IGlkeCA9IGdldEluZGV4T2ZUZW1wbGF0ZUlkKHRlbXBsYXRlcywgb2xkVGVtcGxhdGVJZCk7Ci0gICAgICAgIGlmIChpZHggPiAtMSkgICAgICAgIAotICAgICAgICB7Ci0gICAgICAgICAgcHJvamVjdFR5cGVfLnNlbGVjdChpZHgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFNlbGVjdCB0aGUgcHJlZmVycmVkIGNsaWVudCBwcm9qZWN0IHR5cGUuCi0gICAgICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGMgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICAgICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IG51bGw7Ci0gICAgICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRDbGllbnRUeXBlcygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGJvb2xlYW4gc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICBvdXRlcjogZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm9qZWN0VHlwZV8uc2VsZWN0KGkpOwotICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghc2VsZWN0ZWQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJvamVjdFR5cGVfLnNlbGVjdCgwKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0KLSAgcHJpdmF0ZSBpbnQgZ2V0SW5kZXhPZlRlbXBsYXRlSWQoU3RyaW5nW10gdGVtcGxhdGVJZHMsIFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHRlbXBsYXRlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0ZW1wbGF0ZUlkc1tpXS5lcXVhbHModGVtcGxhdGVJZCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gLTE7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdXBkYXRlRUFSU3RhdGUoKQotICB7Ci0gICAgICBpZighcHJvamVjdE5lZWRzRUFSKG1vZHVsZVByb2plY3RfLmdldFRleHQoKSkpCi0gICAgICB7Ci0JICAgIGVhclByb2plY3RfLnNldEVuYWJsZWQoZmFsc2UpOyAgIAotICAgICAgICBlYXJQcm9qZWN0Xy5zZXRUZXh0KCIiKTsKLSAgICAgICAgbmVlZEVBUl8gPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbmVlZEVBUl8gPSB0cnVlOwotICAgICAgICBlYXJQcm9qZWN0Xy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICBwb3B1bGF0ZUVBUkNvbWJvcygpOwotICAgICAgfQotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRUFSQ29tYm9zKCkKLSAgewotICAgIGVhclByb2plY3RfLnJlbW92ZUFsbCgpOyAgICAKLSAgICBzZXRFYXJQcm9qZWN0SXRlbXMoKTsgCi0gICAgCi0gICAgU3RyaW5nIGVhck5hbWUgPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKG1vZHVsZVByb2plY3RfLmdldFRleHQoKSk7Ci0gICAgZWFyUHJvamVjdF8uc2V0VGV4dChlYXJOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9qZWN0TmVlZHNFQVIoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgLy9JZiB0aGUgcHJvamVjdCBpcyBhIHNpbXBsZSBKYXZhIHByb2plY3Qgb3IgdGhlIHByb2plY3QgdHlwZSBpcyAKLSAgICAvL0phdmEgdXRpbGl0eSByZXR1cm4gZmFsc2UuCi0gICAgaWYgKHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgIGlmIChwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBpZiAoRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KHByb2plY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy9Qcm9qZWN0IGRpZG4ndCBydWxlIG91dCB0aGUgbmVlZCBmb3IgYW4gRUFSCi0gICAgLy9zbyBjaGVjayB0aGUgcHJvZWN0IHR5cGUKLSAgICBTdHJpbmcgdGVtcGxhdGVJZCA9IGdldENvbXBvbmVudFR5cGUoKTsKLSAgICBpZiAodGVtcGxhdGVJZCAhPSBudWxsICYmIHRlbXBsYXRlSWQubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBpZiAoRmFjZXRVdGlscy5pc1V0aWxpdHlUZW1wbGF0ZSh0ZW1wbGF0ZUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAgICAgCi0JLy9Qcm9qZWN0IG9yIHByb2plY3QgdHlwZSBkaWRuJ3QgcnVsZSBvdXQgdGhlIG5lZWQgZm9yIGFuIEVBUgotICAgIC8vc28gY2hlY2sgdGhlIHNlcnZlciB0eXBlLgotICAgIGlmICh0cnNJZHNfICE9IG51bGwgJiYgdHJzSWRzXy5nZXRTZXJ2ZXJJZCgpICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHRhcmdldElkID0gU2VydmVyVXRpbHMuZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZCh0cnNJZHNfLmdldFNlcnZlcklkKCkpOwotICAJICBpZiAodGFyZ2V0SWQhPW51bGwgJiYgdGFyZ2V0SWQubGVuZ3RoKCk+MCkKLSAgCSAgewotICAJICAgIGlmICghU2VydmVyVXRpbHMuaXNUYXJnZXRWYWxpZEZvckVBUih0YXJnZXRJZCwiMTMiKSkgLy9ybSBqMmVlCi0gIAkgICAgewotICAJICAgICAgcmV0dXJuIGZhbHNlOwotICAJICAgIH0KLSAgCSAgfQotICAgIH0KLSAgCSAKLSAgCXJldHVybiB0cnVlOyAgICAKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBoYW5kbGVTZXRNZXNzYWdlVGV4dCgpIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdHJ5IHsKLSAgICAgIGJ5dGUgcmVzdWx0ID0gKGJ5dGUpIDA7Ci0gICAgICBpZiAobW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpLmxlbmd0aCgpICE9IDAgJiYgZWFyUHJvamVjdF8uZ2V0VGV4dCgpLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgU3RyaW5nIHByb2plY3RUZXh0ID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgICAgICBTdHJpbmcgZWFyVGV4dCA9IGVhclByb2plY3RfLmdldFRleHQoKTsKLSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdFRleHQpOwotICAgICAgICBJUHJvamVjdCBlYXIgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGVhclRleHQpOwotICAgICAgICBpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAoYnl0ZSkgKHJlc3VsdCB8IENSRUFURV9QUk9KRUNUKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFlYXIuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IChieXRlKSAocmVzdWx0IHwgQ1JFQVRFX0VBUik7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHByb2plY3QuZXhpc3RzKCkgJiYgSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0KSAmJiBlYXIuZXhpc3RzKCkgJiYgSjJFRVV0aWxzLmV4aXN0cyhlYXIpKSB7Ci0gICAgICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZWFyLCBwcm9qZWN0KSkgcmVzdWx0ID0gKGJ5dGUpIChyZXN1bHQgfCBBRERfRUFSX0FTU09DSUFUSU9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChpc0NsaWVudF8pIHsKLSAgICAgICAgbWVzc2FnZVRleHRfLnNldFRleHQoZ2V0VmFsaWRhdGlvbk1lc3NhZ2UocmVzdWx0LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUIpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBtZXNzYWdlVGV4dF8uc2V0VGV4dChnZXRWYWxpZGF0aW9uTWVzc2FnZShyZXN1bHQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUIpKTsKLSAgICAgIH0KLSAgICAgIHBhcmVudF8ubGF5b3V0KCk7ICAvL2ZvcmNlIG1lc3NhZ2UgYXJlYSByZXNpemUvd3JhcAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1ZBTElEQVRJT05fSU5URVJOQUxfRVJST1IsIGUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UoYnl0ZSByZXN1bHQsIFN0cmluZyBzZXJ2aWNlT3JDbGllbnQpIHsKLSAgICBTdHJpbmcgbXNnID0gbnVsbDsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgMDoKLSAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSA1OgotICAgICAgbXNnID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX1dJTExfQkVfQ1JFQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICBjYXNlIDY6Ci0gICAgICBtc2cgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VBUl9XSUxMX0JFX0NSRUFURUQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgY2FzZSA3OgotICAgICAgbXNnID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX0FORF9FQVJfQ1JFQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgIG1zZyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRUFSX1dJTExfQkVfQVNTT0NJQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbXNnICE9IG51bGwgPyBOTFMuYmluZChtc2csIG5ldyBPYmplY3RbXSB7IHNlcnZpY2VPckNsaWVudH0pIDogIiI7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotICAgIElTdGF0dXMgZmluYWxTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGhhbmRsZVNldE1lc3NhZ2VUZXh0KCk7Ci0gICAgU3RyaW5nIHByb2plY3RUZXh0ID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIFN0cmluZyBlYXJUZXh0ID0gZWFyUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIAotICAgIGlmIChwcm9qZWN0VGV4dD09bnVsbCB8fCBwcm9qZWN0VGV4dC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBpZiAoaXNDbGllbnRfKQotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1BST0pFQ1RfRU1QVFksIG5ldyBTdHJpbmdbXXsiIn0gKSApOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5lZWRFQVJfICYmIChlYXJUZXh0PT1udWxsIHx8IGVhclRleHQubGVuZ3RoKCk9PTApKQotICAgIHsKLSAgICAgIGlmIChpc0NsaWVudF8pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9JZiB0aGUgcHJvamVjdCBhbmQgRUFSIGJvdGggZXhpc3QgYW5kIHRoZSBwcm9qZWN0IGlzIG5vdCBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSLCBlbnN1cmUKLSAgICAvL3RoZXkgY2FuIGJlIGFzc29jaWF0ZWQuCi0gICAgaWYgKG5lZWRFQVJfKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdFRleHQudHJpbSgpKTsKLSAgICAgIElQcm9qZWN0IGVwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclRleHQudHJpbSgpKTsKLSAgICAgIGlmIChwLmV4aXN0cygpICYmIGVwLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZXAscCkpCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIGFzc29jaWF0ZVN0YXR1cyA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVJXaXRob3V0V2FybmluZyhwLCBlcCk7Ci0gICAgICAgICAgaWYgKCFhc3NvY2lhdGVTdGF0dXMpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX0NBTk5PVF9BU1NPQ0lBVEUsIG5ldyBTdHJpbmdbXXtwLmdldE5hbWUoKSwgZXAuZ2V0TmFtZSgpfSApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCl9ICkgKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpbmFsU3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMmVkNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA2MTAgICAyMjQ0MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5lZWQgYmV0dGVyIGVycm9yIG1lc3NhZ2UgaW4gc2FtcGxlIEpTUCBnZW5lcmF0aW9uIHdoZW4gSmF2YSBwcm94eSBiZWFuIGRvZXMgbm90IGV4aXN0IChjb250LikKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLQotLyoKLSogVGhlIEpTUEdlbmVyYXRpb24gdGFzayBydW5zIHRoZSBqc3AgZ2VuZXJhdGlvbiBlbmdpbmUgZm91bmQgaW4gdGhlIAotKiBKQldpemFyZCBQbHVnaW4KLSoKLSoKLSovCi1wdWJsaWMgY2xhc3MgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZVRlc3RSZWdpc3RyeSB0ZXN0UmVnaXN0cnk7Ci0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCB0ZXN0RmFjaWxpdGllczsKLSAgcHJpdmF0ZSBTdHJpbmcganNwRm9sZGVyOwotICBwcml2YXRlIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0gIHByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotICBwcml2YXRlIGJvb2xlYW4gcnVuVGVzdENsaWVudDsKLSAgcHJpdmF0ZSBib29sZWFuIGNhblJ1blRlc3RDbGllbnQgPSB0cnVlOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVQOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBjbGllbnRQOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRDOwotICBwcml2YXRlIGJvb2xlYW4gY2xpZW50TmVlZEVBUjsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudEVhckNvbXBvbmVudE5hbWU7Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmVySWRzOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVA7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxTZXJ2aWNlVVJMOwotICBwcml2YXRlIGJvb2xlYW4gaXNUZXN0V2lkZ2V0ID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIHNldEVuZHBvaW50TWV0aG9kOwotICBwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotCi0gIHB1YmxpYyBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kICgpCi0gIHsKLSAgICB0ZXN0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCVN0cmluZyBjbGllbnRUZXN0SUQgPSB0ZXN0RmFjaWxpdGllcy5nZXRTZWxlY3Rpb24oKTsKLSAgCQotCS8vR2V0IHRoZSB3ZWJzZXJ2aWNlIGV4dGVuc2lvbgotCQotCVdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzY3RlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKXRlc3RSZWdpc3RyeS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZShjbGllbnRUZXN0SUQpOwotCVRlc3RJbmZvIHRlc3RJbmZvID0gZ2V0VGVzdEluZm8oKTsKLQkKLQlpZiAod3NjdGUuaXNDb2RlR2VuTmVlZGVkKCkgJiYgdGVzdEluZm8uZ2V0UHJveHlCZWFuKCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSlRTX1BST1hZX05PVF9DT01QSUxFRCk7Ci0JCi0JSVdlYlNlcnZpY2VUZXN0ZXIgaXdzdCA9IChJV2ViU2VydmljZVRlc3Rlcil3c2N0ZS5nZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwkJCi0JCQotCXN0YXR1cyA9IGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKGl3c3QuZ2VuZXJhdGUodGVzdEluZm8pLGVudiwgbW9uaXRvciApOwotCWlmKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JICByZXR1cm4gc3RhdHVzOwkKLQl9Ci0JCi0JdGVzdEluZm8uc2V0UnVuVGVzdENsaWVudChydW5UZXN0Q2xpZW50KTsKLQkKLQlpZihjYW5SdW5UZXN0Q2xpZW50KXsKLQkJc3RhdHVzID0gY29tbWFuZEZhY3RvcnlFeGVjdXRpb24oaXdzdC5sYXVuY2godGVzdEluZm8pLGVudiwgbW9uaXRvciApOwotCQlpZihzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotCQkJcmV0dXJuIHN0YXR1czsJCi0JCX0KLQl9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKElDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOyAgCQotCQotCXdoaWxlKGNvbW1hbmRGYWN0b3J5Lmhhc05leHQoKSkKLSAgewotICAgIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbW1hbmRGYWN0b3J5LmdldE5leHRDb21tYW5kKCk7Ci0gICAgb3BlcmF0aW9uLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBvcGVyYXRpb24uZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGV4YyApOyAgCi0gICAgfQotICAgIAotCSAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQlzSGFuZGxlci5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCSAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICAKLSAgLy9IZWxwZXIgbWV0aG9kIHdoaWNoIHNldHMgdXAgdGhlIFRlc3RJbmZvIGRhdGEgc3RydWN0dXJlCi0gIHByaXZhdGUgVGVzdEluZm8gZ2V0VGVzdEluZm8oKQotICB7Ci0JSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBudWxsOwotCVN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEID0gbnVsbDsKLQkJCi0JLy9zZXJ2aWNlIHNlcnZlciBpbmZvCi0JaWYoc2VydmVySWRzICE9IG51bGwpewotCSAgaWYgKHNlcnZlcklkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgIT0gbnVsbCkgCi0JICAgIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQl9CQotCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgIT0gbnVsbCkKLSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0gICAgCi0JCi0JaWYoY2xpZW50UHJvamVjdCAhPSBudWxsKXsKLSAgCSAgaW50IGluZGV4ID0gY2xpZW50UHJvamVjdC5pbmRleE9mKCIvIik7Ci0gICAgICBpZiAoaW5kZXghPS0xKXsKLSAgICAgICAgY2xpZW50UCA9IGNsaWVudFByb2plY3Quc3Vic3RyaW5nKDAsaW5kZXgpOwotICAgICAgICBjbGllbnRDID0gY2xpZW50UHJvamVjdC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgIH0KLSAgCX0KLQotICAKLQlpZihzYW1wbGVQcm9qZWN0ICE9IG51bGwpewotCSAgaW50IGluZGV4ID0gc2FtcGxlUHJvamVjdC5pbmRleE9mKCIvIik7Ci0gICAgICBpZiAoaW5kZXghPS0xKXsKLSAgICAgICAgc2FtcGxlUCA9IHNhbXBsZVByb2plY3Quc3Vic3RyaW5nKDAsaW5kZXgpOwotICAgICAgfQotCX0KLQkKLQlUZXN0SW5mbyB0ZXN0SW5mbyA9IG5ldyBUZXN0SW5mbygpOyAgCi0JdGVzdEluZm8uc2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoc2FtcGxlRXhpc3RpbmdTZXJ2ZXIpOwotCXRlc3RJbmZvLnNldENsaWVudFNlcnZlclR5cGVJRChzYW1wbGVTZXJ2ZXJUeXBlSUQpOwotCXRlc3RJbmZvLnNldEpzcEZvbGRlcihqc3BGb2xkZXIpOwotCXRlc3RJbmZvLnNldEV4dGVybmFsQnJvd3NlcihmYWxzZSk7Ci0JdGVzdEluZm8uc2V0RW5kcG9pbnQoZW5kcG9pbnRzKTsKLQl0ZXN0SW5mby5zZXRHZW5lcmF0aW9uUHJvamVjdChzYW1wbGVQKTsKLQl0ZXN0SW5mby5zZXRQcm94eUJlYW4ocHJveHlCZWFuKTsKLQl0ZXN0SW5mby5zZXRTZXRFbmRwb2ludE1ldGhvZChzZXRFbmRwb2ludE1ldGhvZCk7Ci0JdGVzdEluZm8uc2V0Q2xpZW50UHJvamVjdChjbGllbnRQKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRNb2R1bGUoY2xpZW50Qyk7Ci0JdGVzdEluZm8uc2V0Q2xpZW50TmVlZEVBUihjbGllbnROZWVkRUFSKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRFQVJQcm9qZWN0KGNsaWVudEVhclByb2plY3ROYW1lKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRFQVJNb2R1bGUoY2xpZW50RWFyQ29tcG9uZW50TmFtZSk7Ci0JdGVzdEluZm8uc2V0TWV0aG9kcyhtZXRob2RzKTsKLQkKLQkvL2lmIHRoaXMgaXMgYSBjbGllbnQgc2NlbmFyaW8gdGhlIHNlcnZpY2Ugc3R1ZmYgaXMgZW1wdHkKLQlpZihzZXJ2aWNlU2VydmVyVHlwZUlEID09IG51bGwpewotCSAgc2VydmljZVNlcnZlclR5cGVJRCA9IHNhbXBsZVNlcnZlclR5cGVJRDsKLQkgIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IHNhbXBsZUV4aXN0aW5nU2VydmVyOwotCX0KLQkKLQkKLQl0ZXN0SW5mby5zZXRTZXJ2aWNlU2VydmVyVHlwZUlEKHNlcnZpY2VTZXJ2ZXJUeXBlSUQpOwotCXRlc3RJbmZvLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotCS8vd3NkbCBzdHVmZgotCXRlc3RJbmZvLnNldFNlcnZpY2VQcm9qZWN0KGdldFdTRExQcm9qZWN0KCkpOwotCXRlc3RJbmZvLnNldFdzZGxTZXJ2aWNlVVJMKHdzZGxTZXJ2aWNlVVJMKTsKLQlyZXR1cm4gdGVzdEluZm87Ci0gIH0KLSAgIAotCi0gIAotICAvL1RoZSB0ZXN0IGZhY2lsaXRpZXMgcmV0cmlldmVkIGZyb20gdGhlIGV4dGVuc2lvbgotICAvL3BsdXMgdGhlIGRlZmF1bHQKLSAgcHVibGljIHZvaWQgc2V0VGVzdEZhY2lsaXR5KFNlbGVjdGlvbkxpc3Qgc2VsZWN0aW9uKQotICB7Ci0gICAgdGVzdEZhY2lsaXRpZXMgPSBzZWxlY3Rpb247Ci0gIH0gCi0gIAotICBwdWJsaWMgdm9pZCBzZXRGb2xkZXIoU3RyaW5nIGZvbGRlcikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoU3RyaW5nIGpzcEZvbGRlcikKLSAgewotICAJdGhpcy5qc3BGb2xkZXIgPSBqc3BGb2xkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpCi0gIHsKLSAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzOyAgCi0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0UnVuVGVzdENsaWVudChib29sZWFuIHJ1blRlc3RDbGllbnQpCi0gIHsKLSAgICB0aGlzLnJ1blRlc3RDbGllbnQgPSBydW5UZXN0Q2xpZW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoU3RyaW5nIHNhbXBsZVByb2plY3QpCi0gIHsKLSAgCXRoaXMuc2FtcGxlUHJvamVjdCA9IHNhbXBsZVByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgCXRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNjZW5hcmlvQ29udGV4dChTY2VuYXJpb0NvbnRleHQgc2NlbmFyaW9Db250ZXh0KQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFRlc3RSZWdpc3RyeShXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHRlc3RSZWdpc3RyeSkKLSAgewotICAJdGhpcy50ZXN0UmVnaXN0cnkgPSB0ZXN0UmVnaXN0cnk7Ci0gIH0KLSAgIAotICBwdWJsaWMgdm9pZCBzZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJRCkKLSAgewotICAJdGhpcy5zYW1wbGVTZXJ2ZXJUeXBlSUQgPSBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXIpCi0gIHsKLSAgCXRoaXMuc2FtcGxlRXhpc3RpbmdTZXJ2ZXIgPSBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKQotICB7Ci0gICAgc2VydmVySWRzID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVNlcnZlclR5cGVJRCgpCi0gIHsKLSAgCXJldHVybiBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU2VydmVyIGdldFNhbXBsZUV4aXN0aW5nU2VydmVyKCkKLSAgewotICAJcmV0dXJuIHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50U2VydmVyKFN0cmluZyBjbGllbnRTZXJ2ZXIpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmljZVByb2plY3QpCi0gIHsKLSAgCXRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUHJvamVjdCgpCi0gIHsKLSAgCSBpZihzZXJ2aWNlUHJvamVjdCAhPSBudWxsKXsKLQkgICAgIGludCBpbmRleCA9IHNlcnZpY2VQcm9qZWN0LmluZGV4T2YoIi8iKTsKLSAgICAgICBpZiAoaW5kZXghPS0xKSB7Ci0JCSAgICAgc2VydmljZVAgPSBzZXJ2aWNlUHJvamVjdC5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgICAgIHJldHVybiBzZXJ2aWNlUDsKLSAgICAgICB9Ci0gIAl9CQotCQotICAJcmV0dXJuIGNsaWVudFA7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKQotICB7Ci0gICAgdGhpcy53c2RsU2VydmljZVVSTCA9IHdzZGxTZXJ2aWNlVVJMOwotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldElzVGVzdFdpZGdldCgpCi0gIHsKLSAgCXJldHVybiBpc1Rlc3RXaWRnZXQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWUpCi0gIHsKLSAgICAgdGhpcy5jbGllbnRFYXJQcm9qZWN0TmFtZSA9IGNsaWVudEVhclByb2plY3ROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJDb21wb25lbnROYW1lKFN0cmluZyBjbGllbnRFYXJDb21wb25lbnROYW1lKQotICB7Ci0JdGhpcy5jbGllbnRFYXJDb21wb25lbnROYW1lID0gY2xpZW50RWFyQ29tcG9uZW50TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2FuUnVuVGVzdENsaWVudChib29sZWFuIGNhblJ1blRlc3RDbGllbnQpewotCSAgdGhpcy5jYW5SdW5UZXN0Q2xpZW50ID0gY2FuUnVuVGVzdENsaWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBzZXRFbmRwb2ludE1ldGhvZCBUaGUgc2V0RW5kcG9pbnRNZXRob2QgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2V0RW5kcG9pbnRNZXRob2QoU3RyaW5nIHNldEVuZHBvaW50TWV0aG9kKQotICB7Ci0gICAgdGhpcy5zZXRFbmRwb2ludE1ldGhvZCA9IHNldEVuZHBvaW50TWV0aG9kOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gZW5kcG9pbnQgVGhlIGVuZHBvaW50IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkKLSAgewotICAgIGlmIChlbmRwb2ludCAhPSBudWxsICYmIGVuZHBvaW50Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHYuYWRkKGVuZHBvaW50KTsKLSAgICAgIHNldEVuZHBvaW50cyh2KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50cyhMaXN0IGVuZHBvaW50cykKLSAgewotICAgIHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnROZWVkRUFSKCkgewotCQlyZXR1cm4gY2xpZW50TmVlZEVBUjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnROZWVkRUFSKGJvb2xlYW4gY2xpZW50TmVlZEVBUikgewotCQl0aGlzLmNsaWVudE5lZWRFQVIgPSBjbGllbnROZWVkRUFSOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NjM4YWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTAyICAgMTgwMzA0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFRlc3RGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBnZW5Qcm94eTsgIC8vIFRoaXMgYWN0dWFsbHkgcmVwcmVzZW50IHdoZXRoZXIgY2xpZW50IHRlc3QgaXMgcmVxdWVzdGVkCi0gIHByaXZhdGUgYm9vbGVhbiBsYXVuY2hlZFRlc3QgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNhbkdlblByb3h5OwotICAKLSAgcHVibGljIENsaWVudFRlc3RGcmFnbWVudCggU3RyaW5nIGlkICkKLSAgewotICAgIFNlcXVlbmNlRnJhZ21lbnQgY2xpZW50VGVzdFJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgIENvbmRpdGlvbiAgICAgICAgY29uZGl0aW9uICAgICAgPSBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFNlcnZpY2UgJiYgZ2VuUHJveHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgIHNldENvbmRpdGlvbiggY29uZGl0aW9uICk7Ci0gICAgCi0gICAgCi0gICAgQ29uZGl0aW9uIGpzcENvbmRpdGlvbiAgICAgID0gbmV3IENvbmRpdGlvbigpCi0gICAgewotICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgewotICAgICAgICByZXR1cm4gY2FuR2VuUHJveHk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIFNpbXBsZUZyYWdtZW50IHNpbXBsZUpTUEZyYWdtZW50ID0gbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZCgpLCAiIiApOwotICAgIEJvb2xlYW5GcmFnbWVudCBjaG9pY2VKU1BGcmFnbWVudCA9IG5ldyBCb29sZWFuRnJhZ21lbnQoKTsKLSAgICBjaG9pY2VKU1BGcmFnbWVudC5zZXRUcnVlRnJhZ21lbnQoc2ltcGxlSlNQRnJhZ21lbnQpOwotICAgIGNob2ljZUpTUEZyYWdtZW50LnNldENvbmRpdGlvbihqc3BDb25kaXRpb24pOwotICAgIGNsaWVudFRlc3RSb290LmFkZChjaG9pY2VKU1BGcmFnbWVudCk7Ci0gICAgCi0gICAgY2xpZW50VGVzdFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIGlkICkgKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIGNsaWVudFRlc3RSb290ICk7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoIGJvb2xlYW4gZ2VuUHJveHkgKQotICB7Ci0gICAgdGhpcy5nZW5Qcm94eSA9IGdlblByb3h5OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENhbkdlbmVyYXRlUHJveHkoIGJvb2xlYW4gY2FuR2VuUHJveHkgKQotICB7Ci0gICAgdGhpcy5jYW5HZW5Qcm94eSA9IGNhbkdlblByb3h5OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKCBCb29sZWFuIHRlc3RTZXJ2aWNlICkKLSAgewotICAgIHRoaXMudGVzdFNlcnZpY2UgPSB0ZXN0U2VydmljZS5ib29sZWFuVmFsdWUoKTsgIAotICB9IAotCi0gCi0gICAgCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaGVkVGVzdCgpCi0gIHsKLSAgCXJldHVybiBsYXVuY2hlZFRlc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViMDE3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0V2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwODE1ICAgMTA0ODcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBlbmFibGUvZGlzYWJsZSB0ZXN0IHBhZ2UgY29udHJvbHMgYmFzZSBvbiBzZXR0aW5ncyBpbiB0ZXN0IGZhY2lsaXR5IGV4dGVuc2lvbgotICogMjAwNjA4MTUgICAxNTM5MDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJyb3dzZSBkb2VzIG5vdCB3b3JrIGluIGdlbmVyYXRlIGNsaWVudCB0ZXN0IHBhZ2UKLSAqIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNDI1ICAgMjIxMjMyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNTA2ICAgMjI3ODQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBEaXNhYmxlZCAiUnVuIG9uIFNlcnZlciIgY2hlY2tib3ggaXMgaW4gY2hlY2tlZCBzdGF0ZQotICogMjAwODA1MjcgICAyMzQxOTIgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA2MTYgICAyMzcyOTggZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA2MTkgICAyMzc3OTcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA3MjMgICAyNDEzMDMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA4MDggICAyNDM2MDIgcmtrbGFpQGNhLmlibS5jb20gICAtIFJheW1vbmQgTGFpLCBmaXggTlBFIHdoZW4gY2hhbmdpbmcgcnVudGltZSAodGhlIHNlcnZlciBjb21ibykKLSAqIDIwMDkwMzAyICAgMjQyNDYyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFNhdmUgV2ViIHNlcnZpY2VzIHdpemFyZCBzZXR0aW5ncwotICogMjAwOTAzMjQgICAyNDc1MzUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBXcm9uZyBzZXJ2ZXIgaW5zdGFuY2UocykgaXMgY2hvc2VuIGR1cmluZyBKQVgtUlBDIHNhbXBsZSBnZW5lcmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRm9sZGVyUmVzb3VyY2VGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkxhYmVsc0FuZElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkNvbWJvV2l0aEhpc3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLmZhY2V0cy5GYWNldFV0aWw7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFRlc3RXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0KLSAgLypDT05URVhUX0lEIFBXU00wMDAxIGZvciB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fUEFHRSA9ICAiUFdTTTAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiB0ZXN0Q2hlY2tib3hfOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDIgZm9yIHRoZSBUZXN0IGNoZWNrIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQ0hFQ0tCT1hfVEVTVCA9ICJQV1NNMDAwMiI7Ci0KLSAgcHJpdmF0ZSBDb21ibyB0ZXN0VHlwZUNvbWJvXzsKLSAgIC8qQ09OVEVYVF9JRCBQV1NNMDAwMyBmb3IgdGhlIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0NPTUJPQk9YX1RFU1QgPSAiUFdTTTAwMDMiOwotICAKLSAgcHJpdmF0ZSBDb21ibyBydW50aW1lc0NvbWJvOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDQgZm9yIHRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0NPTUJPQk9YX1NFUlZFUiA9ICJQV1NNMDAwNCI7Ci0gIAotICBwcml2YXRlIENvbWJvIHNlcnZlckluc3RhbmNlVHlwZUNvbWJvXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDA1IGZvciB0aGUgc2VydmVyIGluc3RhbmNlIGNvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQ09NQk9CT1hfU0VSVkVSX0lOU1RBTkNFID0gIlBXU00wMDA1IjsKLQotICBwcml2YXRlIFRleHQgIGpzcEZvbGRlclRleHRfOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDggZm9yIHRoZSBKU1AgRm9sZGVyIGZpZWxkIG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9URVhUX0pTUF9GT0xERVIgPSAiUFdTTTAwMDgiOwotCi0gIHByaXZhdGUgQnV0dG9uIHNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQV1NNMDAwOSBmb3IgdGhlIEpTUCBGb2xkZXIgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQlVUVE9OX0pTUF9GT0xERVJfQlJPV1NFID0gIlBXU00wMDA5IjsKLQotICBwcml2YXRlIFRleHQgcHJvamVjdENvbWJvXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDEwIGZvciB0aGUgUHJvamVjdCBjb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0NPTUJPX1BST0pFQ1QgPSAiUFdTTTAwMTAiOwotCi0gIHByaXZhdGUgVHJlZSBtZXRob2RzVHJlZV87Ci0KLSAgcHJpdmF0ZSBCdXR0b24gc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQV1NNMDAwNiBmb3IgdGhlIFNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9CVVRUT05fU0VMRUNUX0FMTCA9ICJQV1NNMDAwNiI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDA3IGZvciB0aGUgRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQlVUVE9OX0RFU0VMRUNUX0FMTCA9ICJQV1NNMDAwNyI7Ci0KLSAgcHJpdmF0ZSBDb21ib1dpdGhIaXN0b3J5IHNhbXBsZUZvbGRlclRleHRfOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMTQgZm9yIHRoZSBGb2xkZXIgZmllbGQgb2YgdGhlIFNhbXBsZSBQYWdlKi8gICAKLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX1RFWFRfU0FNUExFX0ZPTERFUiA9ICJQV1NNMDAxNCI7Ci0gIHByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgc2FtcGxlRm9sZGVyVGV4dE1vZGlmeUxpc3RlbmVyOwotCi0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIHJ1blRlc3RDaGVja2JveF87ICAKLSAgLypDT05URVhUX0lEIFBXU00wMDE1IGZvciB0aGUgcnVuIHRlc3QgY2hlY2sgYm94IG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9DSEVDS0JPWF9MQVVOQ0ggPSAiUFdTTTAwMTUiOwotICAvLwotICBwcml2YXRlIFRleHQgZWFyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMTYgZm9yIHRoZSBFQVIgY29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9FQVJfQ09NQk8gPSAiUFdTTTAwMTYiOwotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgICAgICAgICAgICBjb21ib0dyb3VwXzsgCi0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCAgICAgICAgdGVzdEZhY2lsaXRpZXNfOwotICBwcml2YXRlIEZvbGRlclJlc291cmNlRmlsdGVyIGZvbGRlckZpbHRlcl8gPSBuZXcgRm9sZGVyUmVzb3VyY2VGaWx0ZXIoKTsKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVGVzdFdpZGdldCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNQb3B1cCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNXZWJQcm9qZWN0ID0gZmFsc2U7Ci0gIAotICBwcml2YXRlIExhYmVsc0FuZElkcyBydW50aW1lc187Ci0gIHByaXZhdGUgTGFiZWxzQW5kSWRzIHNlcnZlckluc3RhbmNlc187Ci0gIAotICBwcml2YXRlIElQYXRoIHdlYkNvbnRlbnRQYXRoXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugd2ViQ29udGVudF87Ci0gICAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLSAgICAKLQkgIAotCWlzVGVzdFdpZGdldCA9IHRydWU7Ci0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgICAgICAKLQlwYXJlbnQuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fUEFHRSApOwotCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QV1NNX1BBR0UgKTsKLSAgICAKLSAgICB0ZXN0Q2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1RFU1QsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0NIRUNLQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9DSEVDS0JPWF9URVNUICk7Ci0gICAgdGVzdENoZWNrYm94Xy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUZXN0QnV0dG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgY29tYm9Hcm91cF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAzLCA1LCAwICk7Ci0gICAgCi0gICAgdGVzdFR5cGVDb21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKCBjb21ib0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFU1RfVFlQRVMsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9DT01CT0JPWF9URVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAJCW5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgIAkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLSAgICAJCQkJaGFuZGxlVGVzdEZhY2lsaXR5U2VsZWN0aW9uKCk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgICk7ICAgIAotICAgIAotICAgIAotICAgIAotICAgIG5ldyBMYWJlbCggY29tYm9Hcm91cF8sIFNXVC5OT05FICk7Ci0gICAgCi0gICAgcHJvamVjdENvbWJvXyA9IHVpVXRpbHMuY3JlYXRlVGV4dCggY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9KU1BfUFJPSkVDVF9OQU1FLAotICAgIAkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fQ09NQk9fUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9DT01CT19QUk9KRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgCi0gICAgbmV3IExhYmVsKCBjb21ib0dyb3VwXywgU1dULk5PTkUgKTsKLSAgICAKLSAgICAKLSAgICBlYXJDb21ib18gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRUFSX1BST0pFQ1RTLAotICAgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9FQVJfUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fRUFSX0NPTUJPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIAotICAgIG5ldyBMYWJlbCggY29tYm9Hcm91cF8sIFNXVC5OT05FICk7Ci0gICAgCi0gICAgCi0gICAgCi0gICAgc2FtcGxlRm9sZGVyVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvV2l0aEhpc3RvcnkoY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9GT0xERVJfTkFNRSwKLSAgICAJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9URVhUX1NBTVBMRV9GT0xERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9URVhUX1NBTVBMRV9GT0xERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSICwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREaWFsb2dTZXR0aW5ncygpKTsKLSAgICAKLSAgICAKLQlzYW1wbGVGb2xkZXJUZXh0TW9kaWZ5TGlzdGVuZXIgPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKSAKLQkJCXsKLQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZXZ0KSB7Ci0JCQkJaGFuZGxlRm9sZGVyVGV4dCgpOwotCQkJfQotCi0JCQl9OwotCQkKLSAgICBzYW1wbGVGb2xkZXJUZXh0Xy5hZGRNb2RpZnlMaXN0ZW5lcihzYW1wbGVGb2xkZXJUZXh0TW9kaWZ5TGlzdGVuZXIpOwotICAgICAgIAotICAgIHNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRSwgCi0gICAgCQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0JVVFRPTl9KU1BfRk9MREVSX0JST1dTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQlVUVE9OX0pTUF9GT0xERVJfQlJPV1NFICk7Ci0gICAgc2FtcGxlRm9sZGVyQnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTYW1wbGVCcm93c2UoKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAganNwRm9sZGVyVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9KU1BfRk9MREVSX05BTUUsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX1RFWFRfSlNQX0ZPTERFUiwKLSAgICAgICAgICAgIElORk9QT1BfUFdTTV9URVhUX0pTUF9GT0xERVIsCi0gICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICAKLSAgICAKLSAgICBuZXcgTGFiZWwoIGNvbWJvR3JvdXBfLCBTV1QuTk9ORSApOwotICAgIAotICAgIEdyb3VwIG1ldGhvZHNHcm91cCA9IHVpVXRpbHMuY3JlYXRlR3JvdXAoIHBhcmVudCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX01FVEhPRFMsICAKLSAgICAJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9UUkVFX01FVEhPRFMsIG51bGwgKTsKLSAgICAKLQltZXRob2RzR3JvdXAuc2V0TGF5b3V0RGF0YSggdWlVdGlscy5jcmVhdGVGaWxsQWxsKCkgKTsKLQkKLQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQltZXRob2RzR3JvdXAuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLQkKLQkvLyBUT0RPIE5vIGluZm9wb3AgZm9yIHRoaXMgdHJlZS4KLQltZXRob2RzVHJlZV8gPSB1aVV0aWxzLmNyZWF0ZVRyZWUoIG1ldGhvZHNHcm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9UUkVFX01FVEhPRFMsIAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLQkgICAgICAgICAgICAgICAgICAgCQkJCSAgIFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwJfCBTV1QuQ0hFQ0sgKTsKLQotICAgIENvbXBvc2l0ZSBzZWxlY3RCdXR0b25zID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIG1ldGhvZHNHcm91cCwgMiApOwotICAgIAotICAgIHNlbGVjdEFsbE1ldGhvZHNCdXR0b25fIAotICAgICAgPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNlbGVjdEJ1dHRvbnMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fU0VMRUNUX0FMTCwgCi0gICAgCQkgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fQlVUVE9OX1NFTEVDVF9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0JVVFRPTl9TRUxFQ1RfQUxMICk7Ci0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBbGwoIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8gCi0gICAgICA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggc2VsZWN0QnV0dG9ucywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9ERVNFTEVDVF9BTEwsIAotICAgIAkJICAJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fQlVUVE9OX0RFU0VMRUNUX0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQlVUVE9OX0RFU0VMRUNUX0FMTCApOwotICAgIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFsbCggZmFsc2UgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICBydW5UZXN0Q2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1JVTl9URVNULAotICAgIAkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0NIRUNLQk9YX0xBVU5DSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0NIRUNLQk9YX0xBVU5DSCApOwotICAgIHJ1blRlc3RDaGVja2JveF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgCi0gICAgewotICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZVJ1blRlc3RDaGVja0JveCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVJ1blRlc3RDaGVja0JveCgpewotCSAgYm9vbGVhbiBlbmFibGVkID0gcnVuVGVzdENoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLQkgIHJ1bnRpbWVzQ29tYm8uc2V0RW5hYmxlZChlbmFibGVkKTsKLQkgIHNlcnZlckluc3RhbmNlVHlwZUNvbWJvXy5zZXRFbmFibGVkKGVuYWJsZWQpOwotCSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVGb2xkZXJUZXh0KCkKLSAgewotCS8vIHdlYkNvbnRlbnRQYXRoXyBpcyBzZXQgd2hlbiBqc3BGb2xkZXJUZXh0XyBpcyBzZXQgZm9yIHRoZSBmaXJzdCB0aW1lLiAgVGhlcmVmb3JlLAotCS8vIGlmIHdlYkNvbnRlbnRQYXRoXyBpcyBzdGlsbCBudWxsLCB0aGVyZSBpcyBubyBuZWVkIHRvIHRvdWNoIGpzcEZvbGRlclRleHRfIHlldC4KLQkgIAotCWlmICh3ZWJDb250ZW50UGF0aF8gPT0gbnVsbCkKLQkJcmV0dXJuOwotCSAgCi0gIAlTdHJpbmcgZm9sZGVyID0gc2FtcGxlRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwkKLSAgICBqc3BGb2xkZXJUZXh0Xy5zZXRUZXh0KHdlYkNvbnRlbnRQYXRoXy50b1N0cmluZygpICsgSVBhdGguU0VQQVJBVE9SICsgZm9sZGVyKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNhbXBsZUJyb3dzZSgpCi0gIHsKLSAgICBJUGF0aCAgICAgIHNlbGVjdGVkUGF0aCAgICAgICA9IG51bGw7Ci0gICAgSVJlc291cmNlICBpbml0aWFsUmVzb3VyY2UgICAgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGluaXRpYWxSZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKCBpbml0aWFsU2VsZWN0aW9uXyApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsgIAotICAgIH0KLSAgICAKLSAgICBpZiggaW5pdGlhbFJlc291cmNlID09IG51bGwgKWluaXRpYWxSZXNvdXJjZSA9IHdlYkNvbnRlbnRfOwotICAgIAotICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IERpYWxvZ1V0aWxzLmJyb3dzZVJlc291cmNlcyggY29tYm9Hcm91cF8uZ2V0U2hlbGwoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJDb250ZW50XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxSZXNvdXJjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJGaWx0ZXJfICk7Ci0gICAgCi0gICAgaWYoIHJlc291cmNlICE9IG51bGwgKQotICAgIHsKLSAgICAgIHNlbGVjdGVkUGF0aCA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7ICAgCi0gICAgCi0gICAgICBpbnQgd2ViTW9kdWxlU2VnbWVudHMgPSBzZWxlY3RlZFBhdGgubWF0Y2hpbmdGaXJzdFNlZ21lbnRzKHdlYkNvbnRlbnRQYXRoXyk7Ci0gIAkgIAotICAgICAgc2FtcGxlRm9sZGVyVGV4dF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIoc2FtcGxlRm9sZGVyVGV4dE1vZGlmeUxpc3RlbmVyKTsKLSAgICAgIHNhbXBsZUZvbGRlclRleHRfLnJlbW92ZUFsbCgpOwotICAgICAgCi0gICAgICBpZiAoIHdlYk1vZHVsZVNlZ21lbnRzIDwgd2ViQ29udGVudFBhdGhfLnNlZ21lbnRDb3VudCgpICkKLSAgICAgIHsKLSAgICAJc2FtcGxlRm9sZGVyVGV4dF8uYWRkKCIiLCAwKTsKLSAgICAgICAgaGFuZGxlRm9sZGVyVGV4dCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5hZGQoc2VsZWN0ZWRQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMod2ViTW9kdWxlU2VnbWVudHMpLnRvU3RyaW5nKCksIDApOwotICAgICAgICBoYW5kbGVGb2xkZXJUZXh0KCk7Ci0gICAgICB9Ci0gICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZWxlY3QoMCk7Ci0gICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5yZXN0b3JlV2lkZ2V0SGlzdG9yeSgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0V2lkZ2V0LnNhbXBsZUZvbGRlclRleHRfIik7Ci0gICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5hZGRNb2RpZnlMaXN0ZW5lcihzYW1wbGVGb2xkZXJUZXh0TW9kaWZ5TGlzdGVuZXIpOwotCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlVGVzdEJ1dHRvbigpCi0gIHsKLSAgICBib29sZWFuIGVuYWJsZWQgPSB0ZXN0Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIHRlc3RUeXBlQ29tYm9fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICAKLSAgICBpZiAoZW5hYmxlZCAmJiB0ZXN0RmFjaWxpdGllc18gIT0gbnVsbCkgewotICAgIAloYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKTsKLSAgICAJcmV0dXJuOwotICAgIH0gICAgCi0KLSAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgbWV0aG9kc1RyZWVfLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBpZihjYW5SdW5UZXN0Q2xpZW50XykKLSAgICAJcnVuVGVzdENoZWNrYm94Xy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICAgIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICAgIHNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICAgIAotICAKLSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKSB7Ci0JICAKLQkgIFN0cmluZyBjbGllbnRUZXN0SUQgPSBnZXRUZXN0RmFjaWxpdHkoKS5nZXRTZWxlY3Rpb24oKTsKLQkgIAkKLQkgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHRlc3RFeHRlbnNpb24gPSAKLQkJICAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKQotCQkgIC5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZShjbGllbnRUZXN0SUQpOwotCSAgICAKLSAgICAgIGJvb2xlYW4gaGFzQ29kZUdlbiA9IHRlc3RFeHRlbnNpb24uaXNDb2RlR2VuTmVlZGVkKCk7Ci0gICAgICAKLSAgICAgIC8vIGZvbGRlciBzZWxlY3Rpb24gaXMgb25seSBhcHBsaWNhYmxlIGZvciB0ZXN0IGZhY2lsaXRpZXMgd2l0aCBjb2RlZ2VuCi0gICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRFbmFibGVkKCBoYXNDb2RlR2VuICk7Ci0gICAgICBzYW1wbGVGb2xkZXJCcm93c2VCdXR0b25fLnNldEVuYWJsZWQoIGhhc0NvZGVHZW4gJiYgd2ViQ29udGVudF8gIT0gbnVsbCApOwotICAgICAgCi0gICAgICBib29sZWFuIGhhc01ldGhvZHMgPSB0ZXN0RXh0ZW5zaW9uLmFyZU1ldGhvZHNOZWVkZWQoKTsKLSAgICAgIAotICAgICAgLy8gbWV0aG9kIHNlbGVjdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHRlc3QgZmFjaWxpdGllcyB3aXRoIG1ldGhvZHMKLSAgICAgIG1ldGhvZHNUcmVlXy5zZXRFbmFibGVkKCBoYXNNZXRob2RzICk7ICAgICAgCi0gICAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5zZXRFbmFibGVkKCBoYXNNZXRob2RzICk7Ci0gICAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLnNldEVuYWJsZWQoIGhhc01ldGhvZHMgKTsKLSAgICAgIAotICAgICAgLy8gcnVuIG9uIHNlcnZlciBvbmx5IGFwcGxpY2FibGUgZm9yIHRlc3QgZmFjaWxpdGllcyB0aGF0IG5lZWRzIGxhdW5jaGluZwotICAgICAgaWYoY2FuUnVuVGVzdENsaWVudF8pCi0gICAgCSAgcnVuVGVzdENoZWNrYm94Xy5zZXRFbmFibGVkKCB0ZXN0RXh0ZW5zaW9uLmlzU2VydmVyTmVlZGVkKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNlbGVjdEFsbCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JZm9yKCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyApIAotCXsKLQkgIGl0ZW1zW2ldLnNldENoZWNrZWQodmFsdWUpOwotCX0KLSAgfSAKLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVTZXJ2ZXJDaGFuZ2UoKQotICB7Ci0JICBpbnQgc2VsZWN0aW9uID0gcnVudGltZXNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotCSAgc2VydmVySW5zdGFuY2VzXy5jbGVhcigpOwotCSAgc2VydmVySW5zdGFuY2VUeXBlQ29tYm9fLnJlbW92ZUFsbCgpOwotCSAgSVNlcnZlcltdIHNlcnZlcnMgPSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0JICBmb3IoaW50IGogPTA7IGo8c2VydmVycy5sZW5ndGg7aisrKXsKLQkJCVN0cmluZyBpZCA9IHJ1bnRpbWVzXy5nZXRJZChzZWxlY3Rpb24pOwotCQkJaWYoaWQuZXF1YWxzKHNlcnZlcnNbal0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpKXsKLQkJCQlzZXJ2ZXJJbnN0YW5jZXNfLmFkZChzZXJ2ZXJzW2pdLmdldElkKCksIHNlcnZlcnNbal0uZ2V0TmFtZSgpKTsKLQkJCQlzZXJ2ZXJJbnN0YW5jZVR5cGVDb21ib18uYWRkKHNlcnZlcnNbal0uZ2V0TmFtZSgpKTsKLQkJCX0KLQkgIH0KLQkgIHNlcnZlckluc3RhbmNlVHlwZUNvbWJvXy5zZWxlY3QoMCk7Ci0JICAKLQkgIHNlcnZlckluc3RhbmNlVHlwZUNvbWJvXy5zZXRFbmFibGVkKHNlcnZlckluc3RhbmNlc18uc2l6ZSgpID4gMCApOwotICB9ICAKLSAgCi0gIC8vIEhlcmUgYXJlIHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciB0aGlzIHdpZGdldC4KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIEJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGVzdENoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIHRlc3RTZXJ2aWNlLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgaGFuZGxlVGVzdEJ1dHRvbigpOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIHRlc3RDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdEZhY2lsaXR5KCBTZWxlY3Rpb25MaXN0IHRlc3RGYWNpbGl0aWVzICkKLSAgewotICAgIHRlc3RGYWNpbGl0aWVzXyA9IHRlc3RGYWNpbGl0aWVzOwotICAgIHRlc3RUeXBlQ29tYm9fLnNldEl0ZW1zKCB0ZXN0RmFjaWxpdGllcy5nZXRMaXN0KCkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZWxlY3QoIHRlc3RGYWNpbGl0aWVzLmdldEluZGV4KCkgKTsKLSAgICBoYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgZ2V0VGVzdEZhY2lsaXR5KCkKLSAgewotICAgIHRlc3RGYWNpbGl0aWVzXy5zZXRJbmRleCggdGVzdFR5cGVDb21ib18uZ2V0U2VsZWN0aW9uSW5kZXgoKSApOwotICAgIHJldHVybiB0ZXN0RmFjaWxpdGllc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdElEKCkKLSAgewotICAgIHJldHVybiB0ZXN0VHlwZUNvbWJvXy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHaXZlbiBhIHByb2plY3QgbmFtZSB3aGljaCBtYXkgYmUgb2YgdGhlIChvYnNvbGV0ZSkgZm9ybWF0ICJwcm9qZWN0L21vZHVsZSIsCi0gICAqIHJldHVybiBvbmx5IHRoZSBwcm9qZWN0IHBhcnQgb2YgdGhlIG5hbWUKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IG5hbWUuCi0gICAqIEByZXR1cm4gSWYgdGhlIG5hbWUgaGFzIHRoZSBmb3JtYXQgInByb2plY3QvbW9kdWxlIiwgcmV0dXJucyBvbmx5ICJwcm9qZWN0IiwgCi0gICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIGFzIGlzLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZXh0cmFjdFByb2plY3ROYW1lKFN0cmluZyBwcm9qZWN0KSB7Ci0JICAKLQkgIGludCBpbmRleCA9IHByb2plY3QuaW5kZXhPZigiLyIpOwotCSAgCi0JICBpZiAoaW5kZXggIT0gLTEpCi0JCSAgcHJvamVjdCA9IHByb2plY3Quc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkgIAotCSAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFNlcnZlclR5cGVJZEZvclJ1bnRpbWUoSVJ1bnRpbWUgcnQpIHsKLQkgIElTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0JICBmb3IgKElTZXJ2ZXJUeXBlIHNUeXBlIDogc2VydmVyVHlwZXMpIHsKLQkJICBpZiAoc1R5cGUuZ2V0UnVudGltZVR5cGUoKSA9PSBydC5nZXRSdW50aW1lVHlwZSgpICl7Ci0JCQkgIHJldHVybiBzVHlwZS5nZXRJZCgpOwotCi0JCSAgfQotCSAgfQotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXRTZXJ2ZXJzVHlwZXMoKSAKLSAgewotCWlmKHJ1bnRpbWVzXyAgPT0gbnVsbCkKLQkJcnVudGltZXNfID0gbmV3IExhYmVsc0FuZElkcygpOwotCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotCUlSdW50aW1lW10gcnVudGltZXMgPSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZS5nZXRSdW50aW1lcygpOwotCQotCVN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RDb21ib18uZ2V0VGV4dCgpOwotCQotCVNldCBwcm9qZWN0RmFjZXRzID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3ROYW1lKTsKLQlmb3IoaW50IGkgPSAwO2k8cnVudGltZXMubGVuZ3RoO2krKyl7Ci0JCWJvb2xlYW4gc2hvd1NlcnZlciA9IGZhbHNlOwotCQkKLQkJaWYocnVudGltZXNbaV0uaXNTdHViKCkpewotCQkJZm9yKGludCBsID0wOyBsPHNlcnZlcnMubGVuZ3RoO2wrKyl7Ci0JCQkJaWYoc2VydmVyc1tsXS5nZXRSdW50aW1lKCkgIT0gbnVsbCl7Ci0JCQkJCWlmKHJ1bnRpbWVzW2ldLmdldElkKCkuZXF1YWxzKHNlcnZlcnNbbF0uZ2V0UnVudGltZSgpLmdldElkKCkpKXsKLQkJCQkJCXNob3dTZXJ2ZXIgPSB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2Ugc2hvd1NlcnZlciA9IHRydWU7Ci0JCQotCQlpZihzaG93U2VydmVyICYmIGNhblJ1blRlc3RDbGllbnRfKXsJCi0JCQlpZihpc1dlYlByb2plY3QpewotCQkJCW9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgcnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKHJ1bnRpbWVzW2ldKTsKLQkJCQlpZihGYWNldFV0aWxzLmRvZXNSdW50aW1lU3VwcG9ydEZhY2V0cyhydW50aW1lLCBwcm9qZWN0RmFjZXRzKSl7Ci0JCQkJCXJ1bnRpbWVzXy5hZGQoZ2V0U2VydmVyVHlwZUlkRm9yUnVudGltZShydW50aW1lc1tpXSksIHJ1bnRpbWVzW2ldLmdldE5hbWUoKSk7Ci0JCQkJCXJ1bnRpbWVzQ29tYm8uYWRkKCBydW50aW1lc1tpXS5nZXROYW1lKCkgKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlewotCQkJCXJ1bnRpbWVzXy5hZGQoZ2V0U2VydmVyVHlwZUlkRm9yUnVudGltZShydW50aW1lc1tpXSksIHJ1bnRpbWVzW2ldLmdldE5hbWUoKSk7Ci0JCQkJcnVudGltZXNDb21iby5hZGQoIHJ1bnRpbWVzW2ldLmdldE5hbWUoKSApOwkKLQkJCX0KLQkJfQotCX0KLQkKLQlydW50aW1lc0NvbWJvLnNlbGVjdCgwKTsKLQlpZihzZXJ2ZXJJbnN0YW5jZXNfICA9PSBudWxsKQotCQlzZXJ2ZXJJbnN0YW5jZXNfID0gbmV3IExhYmVsc0FuZElkcygpOwotCQotCQotCVN0cmluZyBpZCA9IHJ1bnRpbWVzXy5nZXRJZCgwKTsKLQlpZihpZCAhPSBudWxsKXsKLQkJZm9yKGludCBrID0wOyBrPHNlcnZlcnMubGVuZ3RoO2srKyl7Ci0JCQlpZihzZXJ2ZXJzW2tdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKXsKLQkJCQlpZihpZC5lcXVhbHMoc2VydmVyc1trXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSkmJiBjYW5SdW5UZXN0Q2xpZW50Xyl7Ci0JCQkJCXNlcnZlckluc3RhbmNlc18uYWRkKHNlcnZlcnNba10uZ2V0SWQoKSwgc2VydmVyc1trXS5nZXROYW1lKCkpOwotCQkJCQlzZXJ2ZXJJbnN0YW5jZVR5cGVDb21ib18uYWRkKHNlcnZlcnNba10uZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJc2VydmVySW5zdGFuY2VUeXBlQ29tYm9fLnNlbGVjdCgwKTsKLQl9Ci0JCQotCXNlcnZlckluc3RhbmNlVHlwZUNvbWJvXy5zZXRFbmFibGVkKGNhblJ1blRlc3RDbGllbnRfICYmIHJ1blRlc3RDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkpOwotCXJ1bnRpbWVzQ29tYm8uc2V0RW5hYmxlZChjYW5SdW5UZXN0Q2xpZW50XyAmJiBydW5UZXN0Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpKTsKLSAgfQotICAKLSAgCi0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkgCi0gIHsKLQlwcm9qZWN0Q29tYm9fLnNldFRleHQoZXh0cmFjdFByb2plY3ROYW1lKGNsaWVudFByb2plY3QpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdEVBUihTdHJpbmcgY2xpZW50UHJvamVjdEVBUikgCi0gIHsKLSAgICBlYXJDb21ib18uc2V0VGV4dChleHRyYWN0UHJvamVjdE5hbWUoY2xpZW50UHJvamVjdEVBUikpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEZvbGRlcigpCi0gIHsKLSAgICByZXR1cm4gc2FtcGxlRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRGb2xkZXIoIFN0cmluZyBmb2xkZXIgKQotICB7Ci0gICAgc2FtcGxlRm9sZGVyVGV4dF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIoc2FtcGxlRm9sZGVyVGV4dE1vZGlmeUxpc3RlbmVyKTsKLSAgICBzYW1wbGVGb2xkZXJUZXh0Xy5yZW1vdmVBbGwoKTsKLSAgICBzYW1wbGVGb2xkZXJUZXh0Xy5hZGQoIGZvbGRlcik7Ci0gICAgc2FtcGxlRm9sZGVyVGV4dF8uc2VsZWN0KDApOwotICAgIHNhbXBsZUZvbGRlclRleHRfLmFkZE1vZGlmeUxpc3RlbmVyKHNhbXBsZUZvbGRlclRleHRNb2RpZnlMaXN0ZW5lcik7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldElzVGVzdFdpZGdldCgpCi0gIHsKLSAgCXJldHVybiBpc1Rlc3RXaWRnZXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEpzcEZvbGRlciggU3RyaW5nIGZvbGRlciApCi0gIHsKLQl3ZWJDb250ZW50UGF0aF8gPSAobmV3IFBhdGgoZm9sZGVyKSkucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotCXdlYkNvbnRlbnRfID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod2ViQ29udGVudFBhdGhfKTsJCi0Jc2FtcGxlRm9sZGVyQnJvd3NlQnV0dG9uXy5zZXRFbmFibGVkKHdlYkNvbnRlbnRfICE9IG51bGwpOwotCSAgCi0gICAganNwRm9sZGVyVGV4dF8uc2V0VGV4dCggZm9sZGVyICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SnNwRm9sZGVyKCkKLSAgewotICAgIHJldHVybiBqc3BGb2xkZXJUZXh0Xy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaGVkU2VydmljZVRlc3ROYW1lIChTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gcnVuVGVzdENoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UnVuVGVzdENsaWVudCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLQkgIHJ1blRlc3RDaGVja2JveF8uc2V0U2VsZWN0aW9uKCB2YWx1ZSApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJc1dlYlByb2plY3QoIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0JICBpc1dlYlByb2plY3QgPSB2YWx1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNhblJ1blRlc3RDbGllbnRfOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2FuUnVuVGVzdENsaWVudChib29sZWFuIGNhblJ1blRlc3RDbGllbnQpewotCSAgY2FuUnVuVGVzdENsaWVudF8gPSBjYW5SdW5UZXN0Q2xpZW50OwotCSAgaWYoIWNhblJ1blRlc3RDbGllbnRfKSB7Ci0JCSAgcnVuVGVzdENoZWNrYm94Xy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkgIHJ1blRlc3RDaGVja2JveF8uc2V0RW5hYmxlZChmYWxzZSk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFBvcHVwKGJvb2xlYW4gcG9wdXApewotCSAgaXNQb3B1cCA9IHBvcHVwOwotCSAgaWYoaXNQb3B1cCl7Ci0JCSAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotCQkgIHJ1bnRpbWVzQ29tYm8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKCBjb21ib0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwKLQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9DT01CT0JPWF9TRVJWRVIsCi0JCQkJCUlORk9QT1BfUFdTTV9DT01CT0JPWF9TRVJWRVIsCi0JCSAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0JCSAgICAJcnVudGltZXNDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkJICAgIAkJbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCSAgICAJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCSAgICAJCQkJaGFuZGxlU2VydmVyQ2hhbmdlKCk7Ci0JCSAgICAJCQl9Ci0JCSAgICAJCX0KLQkJICAgIAkpOyAgICAKLQkJICAgIAotCQkgIG5ldyBMYWJlbCggY29tYm9Hcm91cF8sIFNXVC5OT05FICk7Ci0JCQotCSAgCi0JCSAgc2VydmVySW5zdGFuY2VUeXBlQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWRVJTX0lOU1RBTkNFUywKLQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9DT01CT0JPWF9TRVJWRVJfSU5TVEFOQ0UsCi0JCQkJCUlORk9QT1BfUFdTTV9DT01CT0JPWF9TRVJWRVJfSU5TVEFOQ0UsCi0JCSAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0JCSAgICAKLQkJICBuZXcgTGFiZWwoIGNvbWJvR3JvdXBfLCBTV1QuTk9ORSApOwotCQkgIGluaXRTZXJ2ZXJzVHlwZXMoKTsKLQkgIAotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDYW5SdW5UZXN0Q2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGNhblJ1blRlc3RDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKXsKLQkgIGludCBpbnN0YW5jZUxhYmVsID0gc2VydmVySW5zdGFuY2VUeXBlQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JICBpZihpbnN0YW5jZUxhYmVsID09IC0xKSByZXR1cm4gbnVsbDsKLQkgIHJldHVybiBzZXJ2ZXJJbnN0YW5jZXNfLmdldElkKGluc3RhbmNlTGFiZWwpOwotICB9Ci0gIAotICAKLSAgcHVibGljIFN0cmluZyBnZXRFeGlzdGluZ1NlcnZlcklkKCl7Ci0JICBpbnQgdHlwZUxhYmVsID0gcnVudGltZXNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotCSAgaWYodHlwZUxhYmVsID09IC0xKSByZXR1cm4gbnVsbDsKLQkgIHJldHVybiBydW50aW1lc18uZ2V0SWQodHlwZUxhYmVsKTsKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb25bXSBnZXRNZXRob2RzKCkKLSAgewotICAgIFRyZWVJdGVtW10gICAgICAgICBpdGVtcyAgID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0gICAgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMgPSBuZXcgQm9vbGVhblNlbGVjdGlvbltpdGVtcy5sZW5ndGhdOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIG1ldGhvZHNbaW5kZXhdID0gbmV3IEJvb2xlYW5TZWxlY3Rpb24oIGl0ZW1zW2luZGV4XS5nZXRUZXh0KCksIGl0ZW1zW2luZGV4XS5nZXRDaGVja2VkKCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1ldGhvZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzICkKLSAgewotICAgIG1ldGhvZHNUcmVlXy5yZW1vdmVBbGwoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGlmKG1ldGhvZHNbaW5kZXhdID09IG51bGwpY29udGludWU7Ci0gICAgICBUcmVlSXRlbSBpdGVtID0gbmV3IFRyZWVJdGVtKCBtZXRob2RzVHJlZV8sIFNXVC5OVUxMICk7Ci0gICAgICBpdGVtLnNldFRleHQoIG1ldGhvZHNbaW5kZXhdLmdldFZhbHVlKCkgKTsKLSAgICAgIGl0ZW0uc2V0Q2hlY2tlZCggbWV0aG9kc1tpbmRleF0uaXNTZWxlY3RlZCgpICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgaW5pdGlhbFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkgIGlmKCFjYW5SdW5UZXN0Q2xpZW50XykKLQkJICByZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZFUl9OT1RfRk9VTkRfV0FSTklORyk7Ci0gIAotCSAgcmV0dXJuICBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLXB1YmxpYyB2b2lkIGV4dGVybmFsaXplKCkgewotCXN1cGVyLmV4dGVybmFsaXplKCk7Ci0Jc2FtcGxlRm9sZGVyVGV4dF8uc3RvcmVXaWRnZXRIaXN0b3J5KCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RXaWRnZXQuc2FtcGxlRm9sZGVyVGV4dF8iKTsKLX0KLQotcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKSB7CQkKLQlzYW1wbGVGb2xkZXJUZXh0Xy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihzYW1wbGVGb2xkZXJUZXh0TW9kaWZ5TGlzdGVuZXIpOwotCXNhbXBsZUZvbGRlclRleHRfLnJlc3RvcmVXaWRnZXRIaXN0b3J5KCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RXaWRnZXQuc2FtcGxlRm9sZGVyVGV4dF8iKTsKLQlzYW1wbGVGb2xkZXJUZXh0Xy5hZGRNb2RpZnlMaXN0ZW5lcihzYW1wbGVGb2xkZXJUZXh0TW9kaWZ5TGlzdGVuZXIpOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4N2QyNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTU3MDM5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBuZXcgd2Vic2VydmljZXV0aWxzLmphciBub3QgY29waWVkIGluIGNsaWVudCBnZW5lcmF0aW9uCi0gKiAyMDA2MTAyNSAgIDE2MTI1MCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgSW5zdGFsbGF0aW9ucyBvciB3b3Jrc3BhY2UgcGF0aHMgd2l0aCBzcGFjZXMgYnJlYWsgU2FtcGxlIEdlbiBhbmQgSmF2YSBFZGl0b3IgTGF1bmNoCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uQnVuZGxlVXRpbHM7Ci0KLQotcHVibGljIGNsYXNzIENvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVByb2plY3Q7Ci0JCi0vKioKLSAqIERlZmF1bHQgQ1RPUjsKLSAqLwotCi0KLXB1YmxpYyBDb3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZCgpCi17Ci0KLX0KLQotLyoqCi0gKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gKi8KLXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotewotICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCi0gIHRyeQotICB7Ci0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZX1dFQlNFUlZJQ0VfVVRJTFMgKTsKLSAgICBJUHJvamVjdCBzYW1wbGVJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzYW1wbGVQcm9qZWN0KTsgICAgCi0gICAgSVBhdGggd2ViTW9kdWxlUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChzYW1wbGVJUHJvamVjdCk7CQotICAgIGlmICh3ZWJNb2R1bGVQYXRoID09IG51bGwpCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EICk7Ci0gICAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IGNvcHlJRmlsZSgid2Vic2VydmljZXV0aWxzLmphciIsd2ViTW9kdWxlUGF0aCwiV0VCLUlORi9saWIvd2Vic2VydmljZXV0aWxzLmphciIsIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5nZXRJbnN0YW5jZSgpLGVudiwgbW9uaXRvcik7Ci0gICAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLSAgICAgIElTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfRklMRUNPUFlfV0VCU0VSVklDRV9VVElMUyApOwotICAgICAgc0hhbmRsZXIucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwkKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgIH0KLSAgICAgIAotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTICk7Ci0gICAgICBzSGFuZGxlci5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7CQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTLCBlKTsKLSAgICB9Ci0gIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotfQotCi0vKioKLSAqCi0gKi8KLXByaXZhdGUgSVN0YXR1cyBjb3B5SUZpbGUoU3RyaW5nIHNvdXJjZSwgSVBhdGggdGFyZ2V0UGF0aCwgU3RyaW5nIHRhcmdldEZpbGUsIFBsdWdpbiBwbHVnaW4sSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLXsKLSAgICAKLSAgaWYgKHBsdWdpbiAhPSBudWxsKQotICB7Ci0gICAgSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQobmV3IFBhdGgodGFyZ2V0RmlsZSkpOwotICAgIAotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFICk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgICAgIGNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgIGNvbnRleHQuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UodGFyZ2V0KTsKLSAgICAgICBVUkwgc291cmNlVVJMID0gQnVuZGxlVXRpbHMuZ2V0VVJMRnJvbUJ1bmRsZSggV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELCBzb3VyY2UgKTsgICAgICAgCi0gICAgICAgaWYocmVzb3VyY2UgIT0gbnVsbCkgeyAgICAJICAgICAgCSAgIAotICAgIAkgICBGaWxlIHNvdXJjZUZpbGUgPSBuZXcgRmlsZShGaWxlTG9jYXRvci50b0ZpbGVVUkwoc291cmNlVVJMKS5nZXRQYXRoKCkpOyAgIAotICAgIAkgICBpZiAocmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKS5sZW5ndGgoKSA9PSBzb3VyY2VGaWxlLmxlbmd0aCgpKQotICAgIAkJICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgfQotICAgICAgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoY29udGV4dCwgCi0gICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCXRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTC5vcGVuU3RyZWFtKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTICxlKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoU3RyaW5nIHNhbXBsZVByb2plY3QpCi17Ci0gIHRoaXMuc2FtcGxlUHJvamVjdCA9IHNhbXBsZVByb2plY3Q7ICAKLX0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hEZWZhdWx0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoRGVmYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY0MjgyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hEZWZhdWx0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNDI1ICAgMjIxMjMyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNTI3ICAgMjM0MTY5IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLQotLyoKLSogVGhlIEpTUEdlbmVyYXRpb24gdGFzayBydW5zIHRoZSBqc3AgZ2VuZXJhdGlvbiBlbmdpbmUgZm91bmQgaW4gdGhlIAotKiBKQldpemFyZCBQbHVnaW4KLSoKLSoKLSovCi1wdWJsaWMgY2xhc3MgRmluaXNoRGVmYXVsdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0gIHByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVySW5zdGFuY2VJZDsKLQotICAKLSAgcHVibGljIEZpbmlzaERlZmF1bHRDb21tYW5kICgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlpZihzYW1wbGVTZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwpewotICAJICBzYW1wbGVFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzYW1wbGVTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgCSAgaWYgKHNhbXBsZUV4aXN0aW5nU2VydmVyICE9IG51bGwpCi0gIAkJICBzYW1wbGVTZXJ2ZXJUeXBlSUQgPSBzYW1wbGVFeGlzdGluZ1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLSAgICB9Ci0gIAllbHNlIGlmKHNhbXBsZVNlcnZlclR5cGVJRCAhPSBudWxsKXsKLSAgCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNyZWF0ZVNlcnZlciA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0gIAkJY3JlYXRlU2VydmVyLnNldFNlcnZlckZhY3RvcnlpZChzYW1wbGVTZXJ2ZXJUeXBlSUQpOwotICAJCWNyZWF0ZVNlcnZlci5leGVjdXRlKG1vbml0b3IsIGFkYXB0YWJsZSk7Ci0gIAkJc2FtcGxlU2VydmVySW5zdGFuY2VJZCA9IGNyZWF0ZVNlcnZlci5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0gIAkJaWYoc2FtcGxlU2VydmVySW5zdGFuY2VJZCAhPSBudWxsKQotICAJCQlzYW1wbGVFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzYW1wbGVTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgCQotICAJfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKQotICB7Ci0JdGhpcy5zYW1wbGVTZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoKQotICB7Ci0gIAlyZXR1cm4gc2FtcGxlU2VydmVyVHlwZUlEOwotCQotICB9Ci0gIAotICBwdWJsaWMgSVNlcnZlciBnZXRTYW1wbGVFeGlzdGluZ1NlcnZlcigpCi0gIHsKLSAgCXJldHVybiBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVySWQoU3RyaW5nIGV4aXN0aW5nU2VydmVySWQpCi0gIHsKLQkgIHNhbXBsZVNlcnZlclR5cGVJRD1leGlzdGluZ1NlcnZlcklkOwotICB9ICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoSmF2YVRlc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoSmF2YVRlc3RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGNhMzQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaEphdmFUZXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQnVpbGRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIEZpbmlzaEphdmFUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQgCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5OwotCQotICBwdWJsaWMgRmluaXNoSmF2YVRlc3RGcmFnbWVudCgpCi0gIHsKLSAgCVNlcXVlbmNlRnJhZ21lbnQgamF2YVRlc3RSb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgCUNvbmRpdGlvbiBjb25kaXRpb24gPSBuZXcgQ29uZGl0aW9uKCkKLQl7Ci0JICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0JICB7Ci0JICAgIHJldHVybiBnZW5lcmF0ZVByb3h5OyAKLQkgIH0KLQl9OwotICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICAgIGphdmFUZXN0Um9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBUZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQoKSwgIiIpKTsKLSAgICBqYXZhVGVzdFJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpLCAiIikpOwotICAgIHNldFRydWVGcmFnbWVudChqYXZhVGVzdFJvb3QpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHkpCi0gIHsKLSAgCXRoaXMuZ2VuZXJhdGVQcm94eSA9IGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzSlNQR2VuKGJvb2xlYW4ganNwR2VuKQotICB7Ci0gIAkKLSAgfQotICAKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoVGVzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hUZXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllYjE2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hUZXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTAyICAgMTgwMzA0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBGaW5pc2hUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnR7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzVGVzdFdpZGdldDsJCi0gIHByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5OyAgLy8gVGhpcyBhY3R1YWxseSByZXByZXNlbnQgd2hldGhlciBjbGllbnQgdGVzdCBpcyByZXF1ZXN0ZWQKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0U2VydmljZTsKLSAgcHJpdmF0ZSBTdHJpbmcgdGVzdElEOwotICBwdWJsaWMgRmluaXNoVGVzdEZyYWdtZW50KCkKLSAgewotICAgIENvbmRpdGlvbiBjb25kaXRpb24gPSBuZXcgQ29uZGl0aW9uKCkKLQl7Ci0JICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0JICB7Ci0JICAgIGlmKCF0ZXN0U2VydmljZSkgcmV0dXJuIGZhbHNlOwotCSAgCWlmKGxhdW5jaGVkU2VydmljZVRlc3ROYW1lID09IG51bGwpIHJldHVybiB0cnVlOwotCSAgICBpZihsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSAhPSBudWxsKQotCSAgICAgIGlmKCghbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUuZXF1YWxzKCIiKSAmJiAgKCFpc1ByZWZlcmVkQVdTRExUZXN0KCkgfHwgKGlzVGVzdFdpZGdldCAmJiBpc0NsaWVudFRlc3RKYXZhKCkpKSAmJiBnZW5lcmF0ZVByb3h5KSB8fCBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZS5lcXVhbHMoIiIpKSByZXR1cm4gdHJ1ZTsJCi0JICAgIAotCSAgCXJldHVybiBmYWxzZTsgCi0JICB9Ci0JfTsKLQkgICAKLQlzZXRUcnVlRnJhZ21lbnQobmV3IFdlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQoKSk7Ci0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gIH0KLQkgICAgCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaGVkU2VydmljZVRlc3ROYW1lKFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSkKLSAgewotCXRoaXMubGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgfQotCSAgCi0gIHB1YmxpYyBib29sZWFuIGlzUHJlZmVyZWRBV1NETFRlc3QoKQotICB7Ci0gICAgU2NlbmFyaW9Db250ZXh0IHNjZW5hcmlvQ29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKS5jb3B5KCk7Ci0JU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsKLQlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHdzdHRSZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQlXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil3c3R0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdFR5cGVzWzBdKTsgIAkKLQlpZih3c2N0ZS50ZXN0V1NETCgpKQkKLQkgIHJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQ2xpZW50VGVzdEphdmEoKQotICB7Ci0gIAlpZih0ZXN0SUQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3R0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NjdGUgPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pd3N0dFJlZ2lzdHJ5LmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKHRlc3RJRCk7ICAJCi0JaWYoIXdzY3RlLnRlc3RXU0RMKCkpCQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOyAgIAkKLSAgfQotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7CSAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENhbkdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gICAgdGhpcy5nZW5lcmF0ZVByb3h5ID0gZ2VuZXJhdGVQcm94eTsJIAotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VGVzdElEKFN0cmluZyB0ZXN0SUQpCi0gIHsKLSAgICB0aGlzLnRlc3RJRCA9IHRlc3RJRDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElzVGVzdFdpZGdldChib29sZWFuIGlzVGVzdFdpZGdldCkKLSAgewotICAJdGhpcy5pc1Rlc3RXaWRnZXQgPSBpc1Rlc3RXaWRnZXQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RDbGllbnREZXBhcnR1cmVJbml0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjJmNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1hciAyNSwgMjAwNAotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gZm9yY2VCdWlsZDsJCi0JCi0gIHB1YmxpYyBUZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQoKQotICB7Ci0gIAlmb3JjZUJ1aWxkID0gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEZvcmNlQnVpbGQoKQotICB7Ci0gIAlyZXR1cm4gZm9yY2VCdWlsZDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdERlZmF1bHRpbmdGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdERlZmF1bHRpbmdGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI5NGZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3REZWZhdWx0aW5nRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA2MDkwNyAgIDE1NjYwNiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgbm8gc2FtcGxlIEpTUCBpbiB0aGUgcG9wLXVwIGFjdGlvbiBvZiBHZW5lcmF0ZSBTYW1wbGUgSlNQcwotICogMjAwOTA3MjQgICAyODQ1ODIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBXUyBUZXN0IGZhY2lsaXR5IHNlbGVjdGlvbiBpZ25vcmVkIHdoZW4gd2l6YXJkIGNvbXBsZXRlcy4gRGVmYXVsdCBhbHdheXMgY2hvc2VuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA0LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgCi0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCB0ZXN0RmFjaWxpdGllczsKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIHByaXZhdGUgU2NlbmFyaW9Db250ZXh0IHNjZW5hcmlvQ29udGV4dDsJCi0gIHByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5OyAgLy8gVGhpcyBhY3R1YWxseSByZXByZXNlbnQgd2hldGhlciBjbGllbnQgdGVzdCBpcyByZXF1ZXN0ZWQKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVJZF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0gIAlzY2VuYXJpb0NvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuY29weSgpOwotICAJaWYgKGdlbmVyYXRlUHJveHkgfHwgdGVzdEZhY2lsaXRpZXMgPT0gbnVsbCkgewotICAJCXNlbGVjdFRlc3RGYWNpbGl0eSgpOwotICAJfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQkKLSAgLy8gVGhlIHRlc3QgZmFjaWxpdGllcyByZXRyaWV2ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uCi0gIC8vIHBsdXMgdGhlIGRlZmF1bHQKLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgZ2V0VGVzdEZhY2lsaXR5KCkKLSAgewotICAgIHJldHVybiB0ZXN0RmFjaWxpdGllczsKLSAgfSAKLQkgIAotICAKLSAgCi0gIC8vCSoqKioqKioqKioqKioqKioqKioqKioqIAotICAvLyBUaGlzIG1ldGhvZCB1c2VzIHRoZSBwcmVmZXJlbmNlIHRvIAotICAvLyBzZWxlY3QgdGhlIGNvcnJlY3QgdGVzdCBmYWNpbGl0eSAKLSAgLy8gCi0gIC8vKioqKioqKioqKioqKioqKioqKioqKioKLSAgcHJpdmF0ZSB2b2lkIHNlbGVjdFRlc3RGYWNpbGl0eSgpCi0gIHsKLSAgICAvL2lmIHdlIGZpbmQgc29tZXRoaW5nIHdlIGxhdW5jaGVkIGVhcmxpZXIgCi0gICAgLy9wdXQgaXQgb24gdGhlIGJvdHRvbQotICAgIFN0cmluZ1tdIHRlc3RUeXBlcyA9IHNjZW5hcmlvQ29udGV4dC5nZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCk7CSAgCi0gICAgTGlzdCBuZXdUZXN0VHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JU3RyaW5nW10gd3NkbENhc2VzID0gc2NlbmFyaW9Db250ZXh0LmdldE5vbkphdmFUZXN0U2VydmljZSgpOwotCWJvb2xlYW4gbGF1bmNoZWQgPSBmYWxzZTsKLQkKLSAgICBmb3IoaW50IGkgPSAwO2k8dGVzdFR5cGVzLmxlbmd0aDtpKyspewotICAgIAkKLSAgICAgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIGV4dGVuc2lvbiA9Ci0gICAgCSAgKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkKLSAgICAJICAuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdFR5cGVzW2ldKTsKLQkJICAKLSAgICAgIGlmIChjbGllbnRSdW50aW1lSWRfICE9IG51bGwgJiYgIWV4dGVuc2lvbi5zdXBwb3J0c1J1bnRpbWUoY2xpZW50UnVudGltZUlkXykpCi0gICAgCSAgY29udGludWU7Ci0gICAgCQotCSAgaWYodGVzdFR5cGVzW2ldLmVxdWFscyhsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSkpCi0JICAgIGxhdW5jaGVkID0gdHJ1ZTsKLQkgIGVsc2V7Ci0JICAgICBuZXdUZXN0VHlwZXMuYWRkKHRlc3RUeXBlc1tpXSk7IAotCSAgfQotCX0KLQkgICAJCi0gICAgaWYobGF1bmNoZWQpCi0JICBuZXdUZXN0VHlwZXMuYWRkKGxhdW5jaGVkU2VydmljZVRlc3ROYW1lKTsKLSAgICAKLQkKLQlpZighZ2VuZXJhdGVQcm94eSkKLSAgICAgIHRlc3RGYWNpbGl0aWVzID0gbmV3IFNlbGVjdGlvbkxpc3Qod3NkbENhc2VzLDApOwkKLQllbHNlIHsKLQkgIFN0cmluZ1tdIHRlbXBBcnJheSA9IG5ldyBTdHJpbmdbbmV3VGVzdFR5cGVzLnNpemUoKV07Ci0JICB0ZXN0RmFjaWxpdGllcyA9IG5ldyBTZWxlY3Rpb25MaXN0KChTdHJpbmdbXSkgbmV3VGVzdFR5cGVzLnRvQXJyYXkodGVtcEFycmF5KSwgMCk7Ci0JfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVRlc3RGYWNpbGl0aWVzKFNlbGVjdGlvbkxpc3QgZmFjaWxpdGllcykgewotCSAgdGhpcy50ZXN0RmFjaWxpdGllcyA9IGZhY2lsaXRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaGVkU2VydmljZVRlc3ROYW1lKFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSkKLSAgewotICAJdGhpcy5sYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSA9IGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gZ2VuZXJhdGVQcm94eSkKLSAgewotICAJdGhpcy5nZW5lcmF0ZVByb3h5ID0gZ2VuZXJhdGVQcm94eTsKLSAgfQotICAgIAotICAvKioKLSAgICogU2V0cyB0aGUgY2xpZW50IHJ1bnRpbWUgSUQuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50UnVudGltZUlkIFRoZSBjbGllbnQgcnVudGltZSBJRC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFJ1bnRpbWVJZChTdHJpbmcgY2xpZW50UnVudGltZUlkKSB7Ci0JICBjbGllbnRSdW50aW1lSWRfID0gY2xpZW50UnVudGltZUlkOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9UZXN0V2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGVmYWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLQotcHVibGljIGNsYXNzIFRlc3RXZWJTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50IHsKLSAgCi0gIHB1YmxpYyBUZXN0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBjbGllbnRJbmZvKXsKLQlzdXBlcihjbGllbnRJbmZvKTsgIAotICB9Ci0gIAotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0JCQkKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCl7Ci0gICAgcmV0dXJuIG51bGw7CSAgCi0gIH0KLQkJCQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkgICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0JCQkJCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkgICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwotICB9Ci0JCQkKLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkgICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV1NETEZpbmlzaEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMRmluaXNoRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ1NTNlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMRmluaXNoRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIFdTRExGaW5pc2hGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudHsKLSAgCi0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMVGVzdExhdW5jaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dTRExUZXN0TGF1bmNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDZhNzJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dTRExUZXN0TGF1bmNoQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIFdTRExUZXN0TGF1bmNoQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHRlc3RJRDsgCi0gIHByaXZhdGUgU3RyaW5nIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VpZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlck1vZHVsZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBib29sZWFuIGV4dGVybmFsQnJvd3NlcjsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IG51bGw7Ci0JCi0gIHB1YmxpYyBXU0RMVGVzdExhdW5jaENvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0gIAlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHRlc3RSZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgCVdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzY3RlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKXRlc3RSZWdpc3RyeS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSh0ZXN0SUQpOwotCUlXZWJTZXJ2aWNlVGVzdGVyIGl3c3QgPSAoSVdlYlNlcnZpY2VUZXN0ZXIpd3NjdGUuZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24oKTsKLQlUZXN0SW5mbyB0ZXN0SW5mbyA9IGdldFRlc3RJbmZvKCk7Ci0JCi0JCi0Jc3RhdHVzID0gY29tbWFuZEZhY3RvcnlFeGVjdXRpb24oaXdzdC5sYXVuY2godGVzdEluZm8pLGVudiwgbW9uaXRvcik7Ci0JCi0gICAgLy9Eb250IG5lZWQgdG8gc2h1dCBldmVyeXRoaW5nIGRvd24gYmVjYXVzZSB0aGUgd3NkbCB0ZXN0IGRvZXNudCB3b3JrCi0gICAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgIT0gU3RhdHVzLk9LKXsKLSAgICAgIElTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgIElTdGF0dXMgaW5mb1N0YXR1cyA9IFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX0xBVU5DSF9XU0RMX1RFU1QgKTsKLSAgICAgIHNIYW5kbGVyLnJlcG9ydEluZm8oaW5mb1N0YXR1cyk7Ci0gICAgICByZXR1cm4gaW5mb1N0YXR1czsJCi0gICAgfQotICAgcmV0dXJuIHN0YXR1czsKLSAgCQotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKElDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gIHsKLQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAJCi0Jd2hpbGUoY29tbWFuZEZhY3RvcnkuaGFzTmV4dCgpKQotICB7IAotCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tbWFuZEZhY3RvcnkuZ2V0TmV4dENvbW1hbmQoKTsKLSAgICAKLQkgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgICBzdGF0dXMgPSBvcGVyYXRpb24uZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZXhjICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotCSAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQlzSGFuZGxlci5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCSAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICAKLSAgcHJpdmF0ZSBUZXN0SW5mbyBnZXRUZXN0SW5mbygpCi0gIHsKLSAgICAvLwlnZXQgdGhlIHNlcnZlciBzdHVmZgotICAgIGlmIChzZXJ2aWNlaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsKSAKLQkgIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2aWNlaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgZWxzZSBpZiAoc2VydmljZVNlcnZlckluc3RhbmNlSWQhPW51bGwpCi0JCXNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCk7Ci0JCi0JaWYgKHNlcnZpY2VFeGlzdGluZ1NlcnZlciAhPSBudWxsKQotCSAgc2VydmljZVNlcnZlclR5cGVJRCA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQllbHNlCi0JICBzZXJ2aWNlU2VydmVyVHlwZUlEID0gc2VydmljZWlkcy5nZXRTZXJ2ZXJJZCgpOwotCS8vIHNlcnZlciB3aWxsIGJlIGNyZWF0ZWQgaW4gU2VydmVyRGVwbG95YWJsZUNvbmZpZ3VyYXRpb25Db21tYW5kCi0gIAotICAgIFRlc3RJbmZvIHRlc3RJbmZvID0gbmV3IFRlc3RJbmZvKCk7Ci0JaWYgKHNlcnZpY2VFeGlzdGluZ1NlcnZlciE9bnVsbCkKLQkJdGVzdEluZm8uc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7Ci0gICAgdGVzdEluZm8uc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLQl0ZXN0SW5mby5zZXRTZXJ2aWNlUHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQl0ZXN0SW5mby5zZXRXc2RsU2VydmljZVVSTCh3c2RsVVJJKTsKLQl0ZXN0SW5mby5zZXRFeHRlcm5hbEJyb3dzZXIoZXh0ZXJuYWxCcm93c2VyKTsKLQl0ZXN0SW5mby5zZXRFbmRwb2ludChlbmRwb2ludHMpOwotCXJldHVybiB0ZXN0SW5mbzsKLQkKLSAgfQotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RJRChTdHJpbmcgdGVzdElEKQotICB7Ci0gIAl0aGlzLnRlc3RJRCA9IHRlc3RJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwkKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gIAl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpCi0gIHsKLSAgICB0aGlzLnNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0OwotICB9Ci0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBzZXJ2aWNlaWRzKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlaWRzID0gc2VydmljZWlkczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsQnJvd3NlcikKLSAgewotCSAgdGhpcy5leHRlcm5hbEJyb3dzZXIgPSBleHRlcm5hbEJyb3dzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KExpc3QgZW5kcG9pbnRzKQotICB7Ci0gICAgdGhpcy5lbmRwb2ludHMgPSBlbmRwb2ludHM7Ci0gIH0KLQotcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJNb2R1bGUoKSB7Ci0JcmV0dXJuIHNlcnZlck1vZHVsZTsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmVyTW9kdWxlKFN0cmluZyBzZXJ2ZXJNb2R1bGUpIHsKLQl0aGlzLnNlcnZlck1vZHVsZSA9IHNlcnZlck1vZHVsZTsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNzSW5zdGFuY2VJZCl7Ci0JdGhpcy5zZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IHNzSW5zdGFuY2VJZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTYzOWExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MDggICAxNDQ1MDAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDgxOCAgIDE1MzkwMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQnJvd3NlIGRvZXMgbm90IHdvcmsgaW4gZ2VuZXJhdGUgY2xpZW50IHRlc3QgcGFnZQotICogMjAwNjA5MDYgICAxNTQ1NDggZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cywgVGhpcyBmaXhlcyBuYW1lIGNvbGxpc2lvbnMgd2hlbiBjcmVhdGluZyBhIHNhbXBsZSBwcm9qZWN0Ci0gKiAyMDA2MDkyMiAgIDE1ODE3NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgTlBFIHdoZW4gY3JlYXRpbmcgd2ViIHNlcnZpY2UgY2xpZW50IGludG8gZXhpc3RpbmcgSmF2YSBwcm9qZWN0IHdpdGggdGVzdAotICogMjAwODA1MDcgICAyMjQ0MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5lZWQgYmV0dGVyIGVycm9yIG1lc3NhZ2UgaW4gc2FtcGxlIEpTUCBnZW5lcmF0aW9uIHdoZW4gSmF2YSBwcm94eSBiZWFuIGRvZXMgbm90IGV4aXN0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotKiBUaGlzIHRhc2sgc2V0cyB1cCBhbGwgdGhlIGRlZmF1bHRzIGZvciB0aGUgd2Vic2VydmljZSB0ZXN0Ci0qIGNsaWVudCBwYWdlCi0qCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1dFQl9NT0RVTEVfUk9PVCA9ICJXZWJDb250ZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TQU1QTEVfV0VCX1BST0pFQ1RfRVhUID0gIlNhbXBsZSI7Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU0FNUExFX0RJUiA9ICJzYW1wbGUiOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdEVBUjsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50QzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBjbGllbnRJUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9sZGVyOwotICBwcml2YXRlIFN0cmluZyBqc3BGb2xkZXI7Ci0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlUDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlQzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlUHJvamVjdEVBUjsKLQotICAKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsVGFzayBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbGFiZWwgYW5kIGRlc2NyaXB0aW9uLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZCAoKQotICB7Ci0KLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gIAkKLSAgICBpZihwcm94eUJlYW4gPT0gbnVsbCl7Ci0gICAgICAgIElTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19QUk9YWV9OT1RfQ09NUElMRUQgKTsKLSAgICAgICAgc0hhbmRsZXIucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgICAgIAotICAgIH0gCQotICAgIAotCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotCXNhbXBsZVByb2plY3RBbmRFYXJTZXR1cChlbnYpOwotCUlQYXRoIHdlYmNvbnRlbnRQYXRoID0gbnVsbDsKLQotCS8vICpuZWVkKiB0byBkb3VibGUtY2hlY2sgdGhhdCBjbGllbnRJUHJvamVjdCBpcyBhIHdlYiBwcm9qZWN0Ci0JaWYgKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpCi0JCXdlYmNvbnRlbnRQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKGNsaWVudElQcm9qZWN0KTsKLQkKLSAgICAvL0dldCB0aGUgc2FtcGxlIEZvbGRlciByZWFkeQotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAKLSAgICBpZiAod2ViY29udGVudFBhdGggIT0gbnVsbCkKLSAgICB7CQotICAgIAlTdHJpbmcgcGF0aCA9IHdlYmNvbnRlbnRQYXRoLnRvU3RyaW5nKCk7Ci0gICAgCXNiLmFwcGVuZChwYXRoKS5hcHBlbmQoIi8iKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsJLy90aGVuIGp1c3QgdXNlIHRoZSBkZWZhdWx0Ci0gICAgCXNiLmFwcGVuZCgiLyIpLmFwcGVuZChzYW1wbGVDKS5hcHBlbmQoIi8iKS5hcHBlbmQoREVGQVVMVF9XRUJfTU9EVUxFX1JPT1QpLmFwcGVuZCgiLyIpOwotICAgIH0KLSAgICBmb2xkZXIgPSBTQU1QTEVfRElSICsgZ2V0QmVhbigpOyAKLSAgICAgICAgCi0gICAgc2IuYXBwZW5kKGZvbGRlcik7Ci0gICAganNwRm9sZGVyID0gc2IudG9TdHJpbmcoKTsKLSAgICAKLSAgICAvL2dldCB0aGUgbWV0aG9kIG5hbWVzIHJlYWR5Ci0gICAgLy9maW5kIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGUgaW4gdGhlIHByb2plY3QKLSAgICAvKgotICAgICogR2V0dGluZyB0aGUgbWV0aG9kIG5hbWVzIHVzaW5nIGphdmFtb2YgaW50cm9zcGVjdGlvbgotICAgICovCi0gICAgCi0gICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFtb2Zjb21tYW5kID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOyAKLSAgICBqYXZhbW9mY29tbWFuZC5zZXRQcm94eUJlYW4ocHJveHlCZWFuKTsKLSAgICBqYXZhbW9mY29tbWFuZC5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFApOwotICAgIGphdmFtb2Zjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAKLSAgICAKLSAgICAKLSAgICB0cnl7IAotICAgICAgSVN0YXR1cyBtb2ZTdGF0dXMgPSBqYXZhbW9mY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsKTsKLSAgICAgIGlmKG1vZlN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgIAlyZXR1cm4gbW9mU3RhdHVzOwotICAgIH1jYXRjaChFeGNlcHRpb24gZXhjKXsKLSAgICAJSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSlRTX1BST1hZX05PVF9DT01QSUxFRCApOwotICAgICAgICBzSGFuZGxlci5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICB9ICAKLSAgICBKYXZhSGVscGVycyBqYXZhSGVscGVycyA9IGphdmFtb2Zjb21tYW5kLmdldEphdmFDbGFzcygpOwotICAgIGlmIChqYXZhSGVscGVycyA9PSBudWxsKSByZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IG51bGw7IAotICAgIGlmKGphdmFIZWxwZXJzIGluc3RhbmNlb2YgSmF2YUNsYXNzKSAKLSAgICAgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhSGVscGVyczsgCi0gICAgZWxzZSByZXR1cm4gc3RhdHVzOyAKLSAgICBMaXN0IG1ldGhvZExpc3QgPSBqYXZhQ2xhc3MuZ2V0UHVibGljTWV0aG9kcygpOwotIAlCb29sZWFuU2VsZWN0aW9uW10gdGVtcE1ldGhvZHMgPSBuZXcgQm9vbGVhblNlbGVjdGlvblttZXRob2RMaXN0LnNpemUoKV07Ci0gICAgTGlzdEl0ZXJhdG9yIGxpc3RJdGVyYXRvciA9IG1ldGhvZExpc3QubGlzdEl0ZXJhdG9yKCk7Ci0gICAgCi0gICAgaW50IGogPSAwOwotIAl3aGlsZSAobGlzdEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClsaXN0SXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYobWV0aG9kLmlzQ29uc3RydWN0b3IoKSkgY29udGludWU7Ci0gICAgICAKLSAgICAgIHRlbXBNZXRob2RzW2pdID0gbmV3IEJvb2xlYW5TZWxlY3Rpb24oIG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCksIHRydWUpOyAgICAgIAotICAgICAgaisrOwotICAgIH0gCi0gICAgbWV0aG9kcyA9IHRlbXBNZXRob2RzOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TQU1QTEVfRUFSX1BST0pFQ1RfRVhUID0gIkVBUiI7Ci0gIAotICBwcml2YXRlIHZvaWQgc2FtcGxlUHJvamVjdEFuZEVhclNldHVwKElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLQlpZihjbGllbnRQcm9qZWN0ID09IG51bGwpIHJldHVybjsKLSAgCWVsc2V7Ci0JICBpbnQgaW5kZXggPSBjbGllbnRQcm9qZWN0LmluZGV4T2YoIi8iKTsKLQkgIGNsaWVudFAgPSBjbGllbnRQcm9qZWN0LnN1YnN0cmluZygwLGluZGV4KTsKLQkgIGNsaWVudEMgPSBjbGllbnRQcm9qZWN0LnN1YnN0cmluZyhpbmRleCArIDEpOwotICAJfQotCSAgCi0JY2xpZW50SVByb2plY3QgPSAoSVByb2plY3QpUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGNsaWVudFApOwotICAJCi0gIAlpZihKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY2xpZW50SVByb2plY3QpKXsKLSAgICAgIHNhbXBsZVByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotCSAgc2FtcGxlUCA9IGNsaWVudFA7Ci0JICBzYW1wbGVDID0gY2xpZW50QzsKLSAJfSAgCQotICAJZWxzZXsgCi0gIAkgIHNhbXBsZVAgPSBjbGllbnRQICsgREVGQVVMVF9TQU1QTEVfV0VCX1BST0pFQ1RfRVhUOwotCSAgc2FtcGxlQyA9IGNsaWVudEMgKyBERUZBVUxUX1NBTVBMRV9XRUJfUFJPSkVDVF9FWFQ7Ci0JICBzYW1wbGVQcm9qZWN0ID0gc2FtcGxlUCArICIvIiArIHNhbXBsZUM7Ci0JICAKLQkgIFN0cmluZyBzYW1wbGVUZW1wID0gc2FtcGxlUDsKLQkgIAotCSAgYm9vbGVhbiBuYW1lRm91bmQgPSBmYWxzZTsKLQkgIGludCBpID0gMTsKLQkgIHdoaWxlKCFuYW1lRm91bmQpewotCQkgIElQcm9qZWN0IHNhbXBsZUlQcm9qZWN0ID0gKElQcm9qZWN0KVByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzYW1wbGVUZW1wKTsKLQkJICBpZihzYW1wbGVJUHJvamVjdC5leGlzdHMoKSAmJiAhSjJFRVByb2plY3RVdGlsaXRpZXMuaXNEeW5hbWljV2ViUHJvamVjdChzYW1wbGVJUHJvamVjdCkpewotCQkJICBzYW1wbGVUZW1wID0gc2FtcGxlUCArIEludGVnZXIudG9TdHJpbmcoaSk7Ci0JCQkgIHNhbXBsZVByb2plY3QgPSBzYW1wbGVUZW1wICsgIi8iICsgc2FtcGxlQzsKLQkJICAgICAgCi0JCSAgfQotCQkgIGVsc2UKLQkJCSAgbmFtZUZvdW5kID0gdHJ1ZTsgCi0JCSAgCi0JCSAgaSsrOwotCSAgfQotCSAgc2FtcGxlUCA9IHNhbXBsZVRlbXA7Ci0gICAgCi0gIAl9ICAKLQkKLSAgCQotICAJCi0gIAkKLSAgCXNhbXBsZVByb2plY3RFQVIgPSBjbGllbnRQcm9qZWN0RUFSOwotCWlmIChzYW1wbGVQcm9qZWN0RUFSID09IG51bGwgfHwgc2FtcGxlUHJvamVjdEVBUi5sZW5ndGgoKT09MCl7Ci0JICBzYW1wbGVQcm9qZWN0RUFSID0gc2FtcGxlUCArIERFRkFVTFRfU0FNUExFX0VBUl9QUk9KRUNUX0VYVCArICIvIiArIHNhbXBsZUMgKyBERUZBVUxUX1NBTVBMRV9FQVJfUFJPSkVDVF9FWFQ7CQotCX0KLQkKLSAgfQotICAgIAotICAvL2dldHRlcnMgYW5kIHNldHRlcnMKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEJlYW4oKQotICB7Ci0gIAlpbnQgaW5kZXggPSBwcm94eUJlYW4ubGFzdEluZGV4T2YoIi4iKTsKLSAgCVN0cmluZyBlbmQgPSAiIjsKLSAgCWlmKGluZGV4ICE9IC0xKXsKLSAgCSAgZW5kID0gcHJveHlCZWFuLnN1YnN0cmluZyhpbmRleCArIDEpOyAgCQotICAJfQotICAJU3RyaW5nIGJlYW4gPSBlbmQuc3Vic3RyaW5nKDAsZW5kLmxlbmd0aCgpKTsKLSAgICAKLSAgCXJldHVybiBiZWFuOwotICB9Ci0gIAotICAKLSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9sZGVyKCkKLSAgewotICAJcmV0dXJuIGZvbGRlcjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKc3BGb2xkZXIoKQotICB7Ci0gIAlyZXR1cm4ganNwRm9sZGVyOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhblNlbGVjdGlvbltdIGdldE1ldGhvZHMoKQotICB7Ci0gICAgcmV0dXJuIG1ldGhvZHM7ICAKLSAgfQotICAgIAotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVByb2plY3QoKQotICB7Ci0gIAlyZXR1cm4gc2FtcGxlUHJvamVjdDsKLSAgfQotICAgICAgIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSAgICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdEVBUihTdHJpbmcgY2xpZW50UHJvamVjdEVBUikKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdEVBUiA9IGNsaWVudFByb2plY3RFQVI7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2FtcGxlUHJvamVjdEVBUigpCi0gIHsKLSAgICByZXR1cm4gc2FtcGxlUHJvamVjdEVBUjsKLSAgfQotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3RDbGllbnREZXBhcnR1cmVGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3RDbGllbnREZXBhcnR1cmVGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDk0NWE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWFyIDI1LCAyMDA0Ci0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgZmlsZSBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBHZW5lcmF0aW9uIC0gQ29kZSBhbmQgQ29tbWVudHMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZS5BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBHZW5lcmF0aW9uIC0gQ29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IAotewotICBwdWJsaWMgV2ViU2VydmljZVRlc3RDbGllbnREZXBhcnR1cmVGcmFnbWVudCgpCi0gIHsKLSAgCWFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEZpbmlzaERlZmF1bHRDb21tYW5kKCksIiIpKTsKLSAgIAlhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kKCksIiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQuY2xhc3MsICJGb3JjZUJ1aWxkIixCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzLCAiU2FtcGxlU2VydmVyVHlwZUlEIixBZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzLCAiU2FtcGxlRXhpc3RpbmdTZXJ2ZXIiLEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQuY2xhc3MpOwotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MsICJTYW1wbGVTZXJ2ZXJUeXBlSUQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MsICJTYW1wbGVFeGlzdGluZ1NlcnZlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gIAkgICAgCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL0V4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZTdiNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldTRExUZXN0RmluaXNoQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEV4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gaW1wbGVtZW50cyBXU0RMVGVzdEZpbmlzaENvbW1hbmQKLXsKLQotICBwcml2YXRlIGJvb2xlYW4gZXh0ZXJuYWxCcm93c2VyID0gdHJ1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFNlcnZpY2VVUkw7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IFdlYlNlcnZpY2VFeHBsb3JlckxhdW5jaCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbGFiZWwgYW5kIGRlc2NyaXB0aW9uLgotICAqLwotICBwdWJsaWMgRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQgKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgICBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGxhdW5jaENvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKGV4dGVybmFsQnJvd3Nlcik7Ci0gICAgVmVjdG9yIGxhdW5jaE9wdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQlTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCWxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pKTsKLQlsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pKTsKLSAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCx3c2RsU2VydmljZVVSTCkpOwotICAgIGlmIChlbmRwb2ludHMgIT0gbnVsbCkKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBlbmRwb2ludHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQsIGl0Lm5leHQoKS50b1N0cmluZygpKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRMYXVuY2hPcHRpb25zKChMYXVuY2hPcHRpb25bXSlsYXVuY2hPcHRpb25WZWN0b3IudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgc3RhdHVzID0gbGF1bmNoQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsQnJvd3NlcikKLSAgewotICAJdGhpcy5leHRlcm5hbEJyb3dzZXIgPSBleHRlcm5hbEJyb3dzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxTZXJ2aWNlVVJMKFN0cmluZyB3c2RsU2VydmljZVVSTCkKLSAgewotICAJdGhpcy53c2RsU2VydmljZVVSTCA9IHdzZGxTZXJ2aWNlVVJMOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQpCi0gIHsKLSAgICAvL1RPRE86IFR5cGUgbWFwcGluZ3MgdG8gdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpCi0gIHsKLSAgICAvL1RPRE86IFR5cGUgbWFwcGluZ3MgdG8gdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoU3RyaW5nIHNlcnZpY2VQcm9qZWN0KQotICB7Ci0gICAgLy9UT0RPOiBUeXBlIG1hcHBpbmdzIHRvIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KExpc3QgZW5kcG9pbnRzKQotICB7Ci0gICAgdGhpcy5lbmRwb2ludHMgPSBlbmRwb2ludHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRUdlbmVyYXRlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFR2VuZXJhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDZlZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFR2VuZXJhdGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIFdTRUdlbmVyYXRlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCi0gIHByaXZhdGUgVGVzdEluZm8gdGVzdEluZm87Ci0JICAKLSAgcHVibGljIFdTRUdlbmVyYXRlQ29tbWFuZChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gICAgdGhpcy50ZXN0SW5mbyA9IHRlc3RJbmZvOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgICBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGxhdW5jaENvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKHRlc3RJbmZvLmdldEV4dGVybmFsQnJvd3NlcigpKTsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCVN0cmluZyBzdGF0ZUxvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKCk7Ci0JbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04sc3RhdGVMb2NhdGlvbikpOwotCWxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLkRFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OLGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikpOwotICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLldTRExfVVJMLHRlc3RJbmZvLmdldFdzZGxTZXJ2aWNlVVJMKCkpKTsKLSAgICBpZiAodGVzdEluZm8uZ2V0RW5kcG9pbnQoKSAhPSBudWxsKQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHRlc3RJbmZvLmdldEVuZHBvaW50KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQsIGl0Lm5leHQoKS50b1N0cmluZygpKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRMYXVuY2hPcHRpb25zKChMYXVuY2hPcHRpb25bXSlsYXVuY2hPcHRpb25WZWN0b3IudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgc3RhdHVzID0gbGF1bmNoQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFV2ViU2VydmljZVRlc3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFV2ViU2VydmljZVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmExMTZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRVdlYlNlcnZpY2VUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIFdTRVdlYlNlcnZpY2VUZXN0ZXIgaW1wbGVtZW50cyBJV2ViU2VydmljZVRlc3RlciAgewotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2VuZXJhdGUoVGVzdEluZm8gdGVzdEluZm8pewotICAgIFZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLSAgfQotCSAgCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgbGF1bmNoKFRlc3RJbmZvIHRlc3RJbmZvKXsKLSAgICBWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0JY29tbWFuZHMuYWRkKG5ldyBXU0VHZW5lcmF0ZUNvbW1hbmQodGVzdEluZm8pKTsKLQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsJCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV2ViU2VydmljZUV4cGxvcmVyRXhlY3V0YWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV2ViU2VydmljZUV4cGxvcmVyRXhlY3V0YWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmZjOWFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeGVjdXRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYSBraW5kIG9mCi0qIFdlYiBTZXJ2aWNlLVNlcnZlci1SdW50aW1lIGFydGlmYWN0LiBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIGEgV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlCi0qIG9iamVjdCBpcyB0byBtYW51ZmFjdHVyZSB0aGUgd2l6YXJkIHBhZ2VzIHRoYXQgc3VwcG9ydCB0aGUgdHlwZSwgc2VydmVyLCBhbmQgcnVudGltZSBjb25maWd1cmF0aW9uLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRXhwbG9yZXJFeGVjdXRhYmxlIGltcGxlbWVudHMgV2ViU2VydmljZUV4ZWN1dGFibGUKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gICAKLSAgCi0gIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBnZXRGaW5pc2hDb21tYW5kKCkKLSAgewotICAgIHJldHVybiBuZXcgRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQoKTsKLSAgfQotICAKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MDRiZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyNCAgIDEyMjc5OSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTAzICAgMTM4NDc4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTAgICAxNDExMTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA3MTIxMgkgIDIwMDE5MyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDIxMSAgIDExNzkyNCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA1MjcgICAyMzQxNjkgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0Lndzc2FtcGxlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jbGFzc3BhdGhkZXAuVXBkYXRlQ2xhc3NwYXRoQXR0cmlidXRlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuU3RhcnRTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uVmFsaWRhdGlvblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLXB1YmxpYyBjbGFzcyBBZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgCi0gIHByaXZhdGUgVGVzdEluZm8gdGVzdEluZm87CQotCQotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZUlQcm9qZWN0OwotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudElQcm9qZWN0OwotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZUVBUklQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVFQVJQcm9qZWN0OwotICAKLSAgcHVibGljIEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQoVGVzdEluZm8gdGVzdEluZm8pCi0gIHsKLSAgICB0aGlzLnRlc3RJbmZvID0gdGVzdEluZm87Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSBXZWJTZXJ2ZXJEZWZhdWx0aW5nVGFzayBTZXQgdGhlIGRlZmF1bHQgc2VydmVyIG5hbWUgYW5kIGlkIGdpdmVuIGEKLSAgICogZGVwbG95YWJsZS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgIC8vMS4gQ3JlYXRlIGEgV2ViIHByb2plY3QgZm9yIHRoZSBzYW1wbGUgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCi0JICBzYW1wbGVJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpKTsKLQkgIGJvb2xlYW4gY3JlYXRlZFNhbXBsZVByb2plY3QgPSBmYWxzZTsKLSAgICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICAgIGJvb2xlYW4gc2VydmVyTmVlZHNFQVIgPSB2dS5zZXJ2ZXJOZWVkc0VBUih0ZXN0SW5mby5nZXRDbGllbnRTZXJ2ZXJUeXBlSUQoKSk7Ci0gICAgICBpZiAoc2VydmVyTmVlZHNFQVIpIHsKLQkJaWYgKHRlc3RJbmZvLmdldENsaWVudEVBUlByb2plY3QoKSA9PSBudWxsCi0JCQkJfHwgdGVzdEluZm8uZ2V0Q2xpZW50RUFSUHJvamVjdCgpLmxlbmd0aCgpID09IDApIHsKLQkJCXNhbXBsZUVBUlByb2plY3QgPSB0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpICsgREVGQVVMVF9TQU1QTEVfRUFSX1BST0pFQ1RfRVhUOwotCQl9IGVsc2UgewotCQkJc2FtcGxlRUFSUHJvamVjdCA9IHRlc3RJbmZvLmdldENsaWVudEVBUlByb2plY3QoKTsKLQkJfQotICAgICAgfQotICAgICAgaWYgKCFzYW1wbGVJUHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsgICAgCQotICAgICAgICAgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotICAgICAgICAgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0gICAgICAgICAgY29tbWFuZC5zZXRUZW1wbGF0ZUlkKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUpOyAgICAgICAgICAKLSAgICAgICAgICAvLyBSZXF1aXJlZEZhY2V0VmVyc2lvbnMgaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBpbXBvc2UgYW55IGFkZGl0aW9uYWwgY29uc3RyYWludHMuCi0gICAgICAgICAgLy8gV2UganVzdCB3YW50IHRvIGNyZWF0ZSB0aGUgaGlnaGVzdCBsZXZlbCBvZiBXZWIgcHJvamVjdCB0aGF0IHRoZSBzZWxlY3RlZCBzZXJ2ZXIgc3VwcG9ydHMuCi0gICAgICAgICAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdKTsgICAgICAgICAgIAotICAgICAgICAgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHRlc3RJbmZvLmdldENsaWVudFNlcnZlclR5cGVJRCgpKTsKLSAgICAgICAgICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQodGVzdEluZm8uZ2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoKS5nZXRJZCgpKTsKLSAgICAgICAgICBjb21tYW5kLnNldEVhclByb2plY3ROYW1lKHNhbXBsZUVBUlByb2plY3QpOwotICAgICAgICAgIElTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLSAgICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAJICAKLSAgICAgICAgICBjcmVhdGVkU2FtcGxlUHJvamVjdCA9IHRydWU7Ci0gICAgICB9Ci0JICAKLQkgIC8vMi4gSWYgdGhlIHNlbGVjdGVkIHNlcnZlciByZXF1aXJlcyBhbiBFQVIgYW5kIG5vIEVBUiBuYW1lCi0JICAvL2hhcyBiZWVuIHByb3ZpZGVkLCBjaG9vc2UgYW4gRUFSIG5hbWUgYW5kIGNyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgICAgaWYgKHNlcnZlck5lZWRzRUFSKSB7Ci0JCQlzYW1wbGVFQVJJUHJvamVjdCAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2FtcGxlRUFSUHJvamVjdCk7Ci0JCQlpZiAoc2FtcGxlRUFSSVByb2plY3QgPT0gbnVsbCB8fCAhc2FtcGxlRUFSSVByb2plY3QuZXhpc3RzKCkpCi0JCQl7Ci0JCSAgICAgICAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLQkJICAgICAgICAgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUoc2FtcGxlRUFSUHJvamVjdCk7Ci0JCSAgICAgICAgICBjb21tYW5kLnNldFRlbXBsYXRlSWQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9URU1QTEFURSk7ICAgICAgICAgIAotCQkgICAgICAgICAgLy8gUmVxdWlyZWRGYWNldFZlcnNpb25zIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheSBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gaW1wb3NlIGFueSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLgotCQkgICAgICAgICAgLy8gV2UganVzdCB3YW50IHRvIGNyZWF0ZSB0aGUgaGlnaGVzdCBsZXZlbCBvZiBXZWIgcHJvamVjdCB0aGF0IHRoZSBzZWxlY3RlZCBzZXJ2ZXIgc3VwcG9ydHMuCi0JCSAgICAgICAgICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMF0pOyAgICAgICAgICAgCi0JCSAgICAgICAgICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh0ZXN0SW5mby5nZXRDbGllbnRTZXJ2ZXJUeXBlSUQoKSk7Ci0JCSAgICAgICAgICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQodGVzdEluZm8uZ2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoKS5nZXRJZCgpKTsKLQkJICAgICAgICAgIElTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgICAgICAgICB7Ci0JCSAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotCQkgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCSAgCQkJCQotCQkJfQotCQkJCi0JICB9Ci0gCi0JICAvLyAzLiBJZiB0aGUgc2VsZWN0ZWQgc2VydmVyIHJlcXVpcmVzIGFuIEVBUiwgYW5kIHRoZSBzYW1wbGUgcHJvamVjdCBoYXMKLQkJLy8gbm90IGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRUFSLCBhZGQgaXQuCi0gICAgICBpZiAoc2VydmVyTmVlZHNFQVIpCi0gICAgICB7Ci0gIAkgICAgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQgYXNzb2NpYXRlQ29tbWFuZCA9IG5ldyBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCgpOwotCSAgICBhc3NvY2lhdGVDb21tYW5kLnNldFByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0JICAgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RUFSUHJvamVjdChzYW1wbGVFQVJQcm9qZWN0KTsKLQkgICAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFYXIoc2FtcGxlRUFSUHJvamVjdCk7Ci0JCWFzc29jaWF0ZUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCSAgICBJU3RhdHVzIHN0YXR1cyA9IGFzc29jaWF0ZUNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkgICAgewotCSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsgICAgIAotCSAgICB9ICAgICAgCSAgCi0gICAgICB9Ci0JICAKLQotICAgICAgCi0JICAKLQkgIC8vIDQuIElmIHNlcnZlciByZXF1aXJlcyBhbiBFQVIsIGFuZCB0aGUgc2FtcGxlIEVBUiBoYXMgbm90IGFscmVhZHkgYmVlbgotCQkvLyBhZGRlZCB0byB0aGUgc2VydmVyLCBhZGQgaXQuCi0JICAvLyAgIElmIG5vIEVBUiBpcyByZXF1aXJlZCwgYW5kIHNhbXBsZSBwcm9qZWN0IGhhcyBub3QgYmVlbiBhZGRlZCB0byB0aGUgc2VydmVyIGFkZCBpdC4KLSAgICAgIGlmIChzZXJ2ZXJOZWVkc0VBUiAmJiB0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpICE9IG51bGwpCi0gICAgICB7Ci0gICAgCS8vQWRkIHNhbXBsZUVBUklQcm9qZWN0IHRvIHRoZSBzZXJ2ZXIgaWYgbmVlZGVkLgotICAJCUFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCBtb2RUb1NlcnZlciA9IG5ldyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKTsKLQkJbW9kVG9TZXJ2ZXIuc2V0TW9kdWxlKHNhbXBsZUVBUlByb2plY3QpOwotCQltb2RUb1NlcnZlci5zZXRQcm9qZWN0KHNhbXBsZUVBUlByb2plY3QpOwotCQltb2RUb1NlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0JCW1vZFRvU2VydmVyLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBtb2RUb1NlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgICB7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOyAgICAgCi0JICAgIH0gICAgICAgICAJICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAJICAvL2FkZCBzYW1wbGVJUHJvamVjdCBkaXJlY3RseSB0byB0aGUgc2VydmVyIGlmIG5lZWRlZC4KLSAgICAJICBpZih0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpIT0gbnVsbCl7Ci0gICAgCQkgIEFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCBhZGRUb1NlcnZlciA9IG5ldyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKTsKLSAgICAJCSAgYWRkVG9TZXJ2ZXIuc2V0TW9kdWxlKHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotICAgIAkJICBhZGRUb1NlcnZlci5zZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotICAgIAkJICBhZGRUb1NlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0gICAgCQkgIGFkZFRvU2VydmVyLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAJCSAgSVN0YXR1cyBzdGF0dXMgPSBhZGRUb1NlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotICAgIAkJICB7Ci0gICAgCQkJICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7ICAgICAKLSAgICAJCSAgfSAgICAgICAgICAgICAgICAgIAkgICAgICAJICAKLSAgICAJICB9ICAKLSAgICB9Ci0JICAKLQkgIC8vNS4gQ2FsbCBTdGFydFNlcnZlckNvbW1hbmQgaWYgdGhpcyBjb21tYW5kIGhhZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBwcm9qZWN0LgotICAgICAgaWYgKGNyZWF0ZWRTYW1wbGVQcm9qZWN0KQotICAgICAgewotCQlTdGFydFNlcnZlckNvbW1hbmQgc3RhcnRTZXJ2ZXIgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKHRydWUpOwotCQlzdGFydFNlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0JCXN0YXJ0U2VydmVyLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBzdGFydFNlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgICB7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOyAgICAgCi0JICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgCi0JICAvLzYuIEVzdGFibGlzaCBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNsaWVudCBwcm9qZWN0LCBzYW1wbGUgcHJvamVjdCwgYW5kIEVBUgotICAgICAgCi0JICBjbGllbnRJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh0ZXN0SW5mby5nZXRDbGllbnRQcm9qZWN0KCkpOwotCi0JCWlmIChjbGllbnRJUHJvamVjdCAhPSBudWxsICYmICFKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY2xpZW50SVByb2plY3QpKSB7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpIHsJCQkJCi0JCQkJSjJFRVV0aWxzLmFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKGNsaWVudElQcm9qZWN0LCBzYW1wbGVFQVJJUHJvamVjdCwgbW9uaXRvcik7Ci0JCQkJSjJFRVV0aWxzLmFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKGNsaWVudElQcm9qZWN0LCBzYW1wbGVJUHJvamVjdCxtb25pdG9yKTsKLQkJCX0KLQotCQkJCXRyeQotCQkJCXsKLQkJCQkgIFN0cmluZyB1cmkgPSBjbGllbnRJUHJvamVjdC5nZXROYW1lKCkgKyAiLmphciI7Ci0JCQkJICBKMkVFVXRpbHMuYWRkSkFST3JNb2R1bGVEZXBlbmRlbmN5KHNhbXBsZUlQcm9qZWN0LCB1cmkpOwotCQkJCSAgCi0JCQkJICAvLyBBZGRpbmcgdGhlIGF0dHJpYnV0ZSB0byB0aGUgcmVmZXJlbmNlZCBwcm9qZWN0J3MgY2xhc3NwYXRoIGVudHJpZXMgb2YgJ2xpYicga2luZAotCQkJCSAgLy8gc28gdGhhdCB0aGVzZSBsaWJzIHdpbGwgYmUgYnVuZGxlZCBhbG9uZyB3aXRoIHRoZSBwcm9qZWN0IHdoZW4gZXhwb3J0ZWQKLQkJCQkgIElDbGFzc3BhdGhFbnRyeVtdIGNsYXNzUGF0aCA9IEphdmFDb3JlLmNyZWF0ZShjbGllbnRJUHJvamVjdCkuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCQkJICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzUGF0aC5sZW5ndGg7IGkrKykgewotCQkJCQlJQ2xhc3NwYXRoRW50cnkgY2xhc3NwYXRoRW50cnkgPSBjbGFzc1BhdGhbaV07Ci0JCQkJCWlmICggY2xhc3NwYXRoRW50cnkuZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZICl7Ci0JCQkJCQlVcGRhdGVDbGFzc3BhdGhBdHRyaWJ1dGVVdGlsLmFkZERlcGVuZGVuY3lBdHRyaWJ1dGUobW9uaXRvciwgY2xpZW50SVByb2plY3QuZ2V0TmFtZSgpLCBjbGFzc3BhdGhFbnRyeSk7Ci0JCQkJCX0KLQkJCQkgIH0KLQkJCQkgIAotCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JCQkJewotCQkJCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWSwgbmV3IFN0cmluZ1tde3NhbXBsZUlQcm9qZWN0LmdldE5hbWUoKSwgY2xpZW50SVByb2plY3QuZ2V0TmFtZSgpfSk7Ci0JCQkJCUlTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvck1lc3NhZ2UpOwotCQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0JCQkJewotCQkJCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWSwgbmV3IFN0cmluZ1tde3NhbXBsZUlQcm9qZWN0LmdldE5hbWUoKSwgY2xpZW50SVByb2plY3QuZ2V0TmFtZSgpfSk7Ci0JCQkJCUlTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvck1lc3NhZ2UpOwotCQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsJCQkJCQotCQkJCX0gY2F0Y2ggKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9CQkJCQkJCQotCQkJCi0JCQkKLQkJfSAgICAgIAkgIAotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotIAotCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NBTVBMRV9FQVJfUFJPSkVDVF9FWFQgPSAiRUFSIjsKLSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENHZW5lcmF0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENHZW5lcmF0ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdkOTFkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9HU1RDR2VuZXJhdGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5JbnB1dEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLk1ldGhvZEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLlJlc3VsdEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLlRlc3RDbGllbnRGaWxlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZC5HZW5lcmF0ZVBhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZC5KYXZhVG9Nb2RlbENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5Db3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FbnZpcm9ubWVudFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIEdTVENHZW5lcmF0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBJTlBVVCAgICAgICA9ICJJbnB1dC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBURVNUX0NMSUVOVCA9ICJUZXN0Q2xpZW50LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFU1VMVCAgICAgID0gIlJlc3VsdC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNRVRIT0QgICAgICA9ICJNZXRob2QuanNwIjsKLQkKLSAgcHJpdmF0ZSBUZXN0SW5mbyB0ZXN0SW5mbzsKLSAgcHJpdmF0ZSBNb2RlbCBwcm94eU1vZGVsOwotICBwcml2YXRlIFN0cmluZyBqc3Bmb2xkZXI7Ci0gIAotICBwdWJsaWMgR1NUQ0dlbmVyYXRlQ29tbWFuZChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gIAl0aGlzLnRlc3RJbmZvID0gdGVzdEluZm87Ci0gIH0KLQkKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQgY29weSA9IG5ldyBDb3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZCgpOyAgICAKLQljb3B5LnNldFNhbXBsZVByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0gICAgY29weS5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0Jc3RhdHVzID0gY29weS5leGVjdXRlKCBtb25pdG9yLCBudWxsKTsKLQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotCXNldEpTUEZvbGRlcigpOwotCXN0YXR1cyA9IGNyZWF0ZU1vZGVsKGVudiwgbW9uaXRvcik7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLQlzdGF0dXMgPSBnZW5lcmF0ZVBhZ2VzKGVudik7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLQlyZXR1cm4gc3RhdHVzOyAgIAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEpTUEZvbGRlcigpewotICAgIC8vaWYgdGhlIGNsaWVudCBpcyBub3QgYSB3ZWJjb21wb25lbnQgdGhlbiB0aGUgCi0JLy9zYW1wbGUgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCwgd2UgbXVzdCBub3cgZmFjdG9yIGluIAotCS8vZmxleGlibGUgcHJvamVjdHMgIAotCSAgCi0JSVByb2plY3QgY2xpZW50SVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0Q2xpZW50UHJvamVjdCgpKTsKLSAgICBpZiAoY2xpZW50SVByb2plY3QgIT0gbnVsbCAmJiAhSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KGNsaWVudElQcm9qZWN0KSl7ICAgCi0JICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkgIGludCBpbmRleCA9IHRlc3RJbmZvLmdldEpzcEZvbGRlcigpLmxhc3RJbmRleE9mKCIvIik7Ci0JICBTdHJpbmcganNwID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CQotCSAgc2IuYXBwZW5kKCIvIikuYXBwZW5kKHBhdGgudG9TdHJpbmcoKSkuYXBwZW5kKCIvIikuYXBwZW5kKGpzcCk7CSAgCi0JICBqc3Bmb2xkZXIgPSBzYi50b1N0cmluZygpOwotCX0gCi0gICAgZWxzZQotCSAganNwZm9sZGVyID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCk7CQotICAKLSAgCi0gIH0KLSAgCi0gIC8vY3JlYXRlIHRoZSBtb2RlbCBmcm9tIHRoZSByZXNvdXJjZQotICBwcml2YXRlIElTdGF0dXMgY3JlYXRlTW9kZWwoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgewotICAgIEphdmFUb01vZGVsQ29tbWFuZCBqdG1jID0gbmV3IEphdmFUb01vZGVsQ29tbWFuZCgpOwotCWp0bWMuc2V0TWV0aG9kcyh0ZXN0SW5mby5nZXRNZXRob2RzKCkpOwotCWp0bWMuc2V0Q2xpZW50UHJvamVjdCh0ZXN0SW5mby5nZXRDbGllbnRQcm9qZWN0KCkpOwotCWp0bWMuc2V0UHJveHlCZWFuKHRlc3RJbmZvLmdldFByb3h5QmVhbigpKTsKLQlqdG1jLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQlJU3RhdHVzIHN0YXR1cyA9IGp0bWMuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCk7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLSAgICBwcm94eU1vZGVsID0ganRtYy5nZXRKYXZhRGF0YU1vZGVsKCk7Ci0JcmV0dXJuIHN0YXR1czsKLSAgfSAKLSAgCi0gICAvKioKLSAgICogR2VuZXJhdGUgdGhlIGZvdXIganNwcyB0aGF0IG1ha2UgdXAgdGhpcwotICAgKiBzYW1wbGUgYXBwLgotICAgKi8KLSAgIHByaXZhdGUgSVN0YXR1cyBnZW5lcmF0ZVBhZ2VzKElFbnZpcm9ubWVudCBlbnYpCi0gICB7Ci0gICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCUlQYXRoIGZEZXN0aW5hdGlvbkZvbGRlclBhdGggPSBuZXcgUGF0aChqc3Bmb2xkZXIpOwotICAgIGZEZXN0aW5hdGlvbkZvbGRlclBhdGggPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLm1ha2VBYnNvbHV0ZSgpOyAgICAKLSAgICBJV29ya3NwYWNlUm9vdCBmV29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQotICAgICBJUGF0aCBwYXRoVGVzdCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGguYXBwZW5kKFRFU1RfQ0xJRU5UKTsKLSAgICAgSUZpbGUgZmlsZVRlc3QgPSBmV29ya3NwYWNlLmdldEZpbGUocGF0aFRlc3QpOwotICAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY1Rlc3QgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgIG5ldyBUZXN0Q2xpZW50RmlsZUdlbmVyYXRvcihJTlBVVCxNRVRIT0QsUkVTVUxUKSxmaWxlVGVzdCk7Ci0gICAgIC8vZ3BjVGVzdC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgIGdwY1Rlc3Quc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICBzdGF0dXMgPSBncGNUZXN0LmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0gICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAKLQotICAgICAvL2lucHV0IGNvZGVnZW4KLSAgICAgSVBhdGggcGF0aElucHV0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoSU5QVVQpOwotICAgICBJRmlsZSBmaWxlSW5wdXQgPSBmV29ya3NwYWNlLmdldEZpbGUocGF0aElucHV0KTsKLSAgICAgSW5wdXRGaWxlR2VuZXJhdG9yIGlucHV0R2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUdlbmVyYXRvcihSRVNVTFQpOwotICAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY0lucHV0ID0gbmV3IEdlbmVyYXRlUGFnZUNvbW1hbmQoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgcHJveHlNb2RlbCwKLSAgICAgICBpbnB1dEdlbmVyYXRvcixmaWxlSW5wdXQpOwotICAgICAvL2dwY0lucHV0LnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICAgZ3BjSW5wdXQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICBzdGF0dXMgPSBncGNJbnB1dC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotICAgICAJcmV0dXJuIHN0YXR1czsKLQotICAgICAvL21ldGhvZCBjb2RlZ2VuCi0gICAgIElQYXRoIHBhdGhNZXRob2QgPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLmFwcGVuZChNRVRIT0QpOwotICAgICBJRmlsZSBmaWxlTWV0aG9kID0gZldvcmtzcGFjZS5nZXRGaWxlKHBhdGhNZXRob2QpOwotICAgICBNZXRob2RGaWxlR2VuZXJhdG9yIG1ldGhvZEdlbmVyYXRvciA9IG5ldyBNZXRob2RGaWxlR2VuZXJhdG9yKElOUFVUKTsKLSAgICAgbWV0aG9kR2VuZXJhdG9yLnNldENsaWVudEZvbGRlclBhdGgoanNwZm9sZGVyKTsKLSAgICAgR2VuZXJhdGVQYWdlQ29tbWFuZCBncGNNZXRob2QgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgIG1ldGhvZEdlbmVyYXRvcixmaWxlTWV0aG9kKTsKLSAgICAgLy9ncGNNZXRob2Quc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICBncGNNZXRob2Quc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICBzdGF0dXMgPSBncGNNZXRob2QuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SICkKLSAgICAgCXJldHVybiBzdGF0dXM7ICAgIAotCi0KLSAgICAgLy9yZXN1bHQgY29kZWdlbgotICAgICBJUGF0aCBwYXRoUmVzdWx0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoUkVTVUxUKTsKLSAgICAgSUZpbGUgZmlsZVJlc3VsdCA9IGZXb3Jrc3BhY2UuZ2V0RmlsZShwYXRoUmVzdWx0KTsKLSAgICAgUmVzdWx0RmlsZUdlbmVyYXRvciByZmcgPSBuZXcgUmVzdWx0RmlsZUdlbmVyYXRvcigpOwotICAgICByZmcuc2V0Q2xpZW50Rm9sZGVyUGF0aChqc3Bmb2xkZXIpOwotICAgICByZmcuc2V0U2V0RW5kcG9pbnRNZXRob2QodGVzdEluZm8uZ2V0U2V0RW5kcG9pbnRNZXRob2QoKSk7Ci0gICAgIEdlbmVyYXRlUGFnZUNvbW1hbmQgZ3BjUmVzdWx0ID0gbmV3IEdlbmVyYXRlUGFnZUNvbW1hbmQoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgcHJveHlNb2RlbCwKLSAgICAgICByZmcsZmlsZVJlc3VsdCk7Ci0gICAgIGdwY1Jlc3VsdC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgIHN0YXR1cyA9IGdwY1Jlc3VsdC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICByZXR1cm4gc3RhdHVzOwotICAgfQotCi0gICAKLQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENMYXVuY2hDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9HU1RDTGF1bmNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGJiNzgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENMYXVuY2hDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM0MzIyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMjQzNjgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDkwMzEyCSAgMjUwOTg0IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgVXNlIGFub3RoZXIgbWVjaGFuaXNtIHRvIHdhaXQgZm9yIGJ1aWxkIHRvIGJlIGNvbXBsZXRlZAotICogMjAwOTEyMDEgICAyOTY1MjkgeWVubHVAY2EuaWJtLmNvbSAtIFllbiBMdSwgRGV0ZXJtaW5hdGlvbiBvZiB3aGVuIHRoZSBzYW1wbGUgSlNQIGdvZXMgbGl2ZSBpcyBub3Qgcm9idXN0LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZEJlYW5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuU3RhcnRTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYnJvd3Nlci5JV2ViQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXb3JrYmVuY2hCcm93c2VyU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLXB1YmxpYyBjbGFzcyBHU1RDTGF1bmNoQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSU5QVVQgICAgICAgPSAiSW5wdXQuanNwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgVEVTVF9DTElFTlQgPSAiVGVzdENsaWVudC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRVNVTFQgICAgICA9ICJSZXN1bHQuanNwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTUVUSE9EICAgICAgPSAiTWV0aG9kLmpzcCI7Ci0JCQotICBwcml2YXRlIFRlc3RJbmZvIHRlc3RJbmZvOwotICBwcml2YXRlIFN0cmluZyBqc3Bmb2xkZXI7Ci0gIAotICBwdWJsaWMgR1NUQ0xhdW5jaENvbW1hbmQoVGVzdEluZm8gdGVzdEluZm8pewotICAgIHRoaXMudGVzdEluZm8gPSB0ZXN0SW5mbzsKLSAgfQotCQkKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgc2V0SlNQRm9sZGVyKCk7Ci0gICAgCi0JcmV0dXJuIGxhdW5jaFNhbXBsZShlbnYsIG1vbml0b3IpOwotICB9Ci0gIHByaXZhdGUgdm9pZCBzZXRKU1BGb2xkZXIoKXsKLQkgICAgLy9pZiB0aGUgY2xpZW50IGlzIG5vdCBhIHdlYmNvbXBvbmVudCB0aGVuIHRoZSAKLQkJLy9zYW1wbGUgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCwgd2UgbXVzdCBub3cgZmFjdG9yIGluIAotCQkvL2ZsZXhpYmxlIHByb2plY3RzICAKLQkJICAKLQkJSVByb2plY3QgY2xpZW50SVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0Q2xpZW50UHJvamVjdCgpKTsKLQkgICAgaWYgKGNsaWVudElQcm9qZWN0ICE9IG51bGwgJiYgIUoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpeyAgIAotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0JCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJICBpbnQgaW5kZXggPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKS5sYXN0SW5kZXhPZigiLyIpOwotCQkgIFN0cmluZyBqc3AgPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CQotCQkgIHNiLmFwcGVuZCgiLyIpLmFwcGVuZChwYXRoLnRvU3RyaW5nKCkpLmFwcGVuZCgiLyIpLmFwcGVuZChqc3ApOwkgIAotCQkgIGpzcGZvbGRlciA9IHNiLnRvU3RyaW5nKCk7Ci0JCX0gCi0JICAgIGVsc2UKLQkJICBqc3Bmb2xkZXIgPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKTsJCi0JICAKLQkgIAotCSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGxhdW5jaFNhbXBsZSAoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQlJUGF0aCBmRGVzdGluYXRpb25Gb2xkZXJQYXRoID0gbmV3IFBhdGgoanNwZm9sZGVyKTsKLQlmRGVzdGluYXRpb25Gb2xkZXJQYXRoID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5tYWtlQWJzb2x1dGUoKTsgICAgCi0KLQlJUHJvamVjdCBzYW1wbGVQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCQotCUJ1aWxkQmVhbkNvbW1hbmQgYnVpbGRDb21tYW5kID0gbmV3IEJ1aWxkQmVhbkNvbW1hbmQoKTsKLQlidWlsZENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQlidWlsZENvbW1hbmQuc2V0UHJvamVjdChzYW1wbGVQcm9qZWN0KTsKLQl0cnkgewotCQkvL2Vuc3VyZSB0aGUgc2FtcGxlIHByb2plY3QgaXMgYnVpbHQKLQkJYnVpbGRDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JfSBjYXRjaCAoRXhlY3V0aW9uRXhjZXB0aW9uIGUyKSB7Ci0JCS8vanVzdCBpZ25vcmUgYW5kIHNlZSBpZiB3ZSBjYW4gbW92ZSBvbgotCX0KLQkgCi0JU3RhcnRTZXJ2ZXJDb21tYW5kIHNlcnZlckNvbW1hbmQgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKCB0cnVlICk7Ci0Jc2VydmVyQ29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKCB0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpLmdldElkKCkgKTsKLQlzZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkKLQlzdGF0dXMgPSBzZXJ2ZXJDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLQkKLQlTdHJpbmcgICBuZXdQYXRoID0gU2VydmVyVXRpbHMuZ2V0V2ViQ29tcG9uZW50VVJMKHNhbXBsZVByb2plY3QsIHRlc3RJbmZvLmdldENsaWVudFNlcnZlclR5cGVJRCgpLHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkpOwotCWludCBjb3VudCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChzYW1wbGVQcm9qZWN0KS5zZWdtZW50Q291bnQoKTsKLQkKLQluZXdQYXRoID0gbmV3UGF0aCArICIvIiArIGZEZXN0aW5hdGlvbkZvbGRlclBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhjb3VudCk7Ci0JU3RyaW5nQnVmZmVyIHVybFN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoIG5ld1BhdGggKyAiLyIgKyBURVNUX0NMSUVOVCApOwotCWlmICh0ZXN0SW5mby5nZXRFbmRwb2ludCgpICE9IG51bGwgJiYgIXRlc3RJbmZvLmdldEVuZHBvaW50KCkuaXNFbXB0eSgpKQotCXsKLQkgIHVybFN0cmluZy5hcHBlbmQoIj9lbmRwb2ludD0iKTsKLQkgIHVybFN0cmluZy5hcHBlbmQodGVzdEluZm8uZ2V0RW5kcG9pbnQoKS5nZXQoMCkudG9TdHJpbmcoKSk7Ci0JfQotCSAgICAKLQl0cnl7Ci0JICAgICAgVVJMIHVybDsKLQkgICAgICB1cmwgPSBuZXcgVVJMKHVybFN0cmluZy50b1N0cmluZygpKTsKLSAgICAgICAgCi0JICAgICAgZm9yKCBpbnQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCAyMDsgcmV0cmllcysrICkKLQkgICAgICB7Ci0JICAgICAgICB0cnkKLQkgICAgICAgIHsKLQkgICAgICAgICAgLy8gVGVzdCB0aGUgVVJMcwotCSAgICAgICAgICBVUkwgc2FtcGxlVXJsID0gbmV3IFVSTChuZXdQYXRoICsgIi8iICsgUkVTVUxUKTsKLQkgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbilzYW1wbGVVcmwub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IHVybENvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKHJldHJpZXMgKyAiOiByZXN1bHQgSFRUUCBjb2RlID0gIiArIHJlc3BvbnNlQ29kZSk7Ci0JICAgICAgICAgIC8vZHVtcFVybENvbnRlbnRzKHVybENvbm4pOwkgICAgICAgICAgCi0JICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykKLQkgICAgICAgIAkgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotCSAgICAgICAgICAKLQkgICAgICAgICAgc2FtcGxlVXJsID0gbmV3IFVSTChuZXdQYXRoICsgIi8iICsgTUVUSE9EKTsKLQkgICAgICAgICAgdXJsQ29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbilzYW1wbGVVcmwub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgICAgICAgcmVzcG9uc2VDb2RlID0gdXJsQ29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4ocmV0cmllcyArICI6IG1ldGhvZCBIVFRQIGNvZGUgPSAiICsgcmVzcG9uc2VDb2RlKTsKLQkgICAgICAgICAgLy9kdW1wVXJsQ29udGVudHModXJsQ29ubik7CSAgICAgICAgICAKLQkgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSBIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LKQotCSAgICAgICAgCSAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0JICAgICAgICAgIAotCSAgICAgICAgICBzYW1wbGVVcmwgPSBuZXcgVVJMKG5ld1BhdGggKyAiLyIgKyBJTlBVVCk7Ci0JICAgICAgICAgIHVybENvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pc2FtcGxlVXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgICAgICAgIHJlc3BvbnNlQ29kZSA9IHVybENvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CSAgICAgICAgICAKLQkgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4ocmV0cmllcyArICI6IGlucHV0IEhUVFAgY29kZSA9ICIgKyByZXNwb25zZUNvZGUpOwotCSAgICAgICAgICAvL2R1bXBVcmxDb250ZW50cyh1cmxDb25uKTsJICAgICAgICAgIAotCSAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0spCi0JICAgICAgICAJICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsJCi0JICAgICAgICAgIAotCSAgICAgICAgICBzYW1wbGVVcmwgPSBuZXcgVVJMKG5ld1BhdGggKyAiLyIgKyBURVNUX0NMSUVOVCk7Ci0JICAgICAgICAgIHVybENvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pc2FtcGxlVXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgICAgICAgIHJlc3BvbnNlQ29kZSA9IHVybENvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CSAgICAgICAgICAKLQkgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4ocmV0cmllcyArICI6IHRlc3QgY2xpZW50IEhUVFAgY29kZSA9ICIgKyByZXNwb25zZUNvZGUpOwotCSAgICAgICAgICAvL2R1bXBVcmxDb250ZW50cyh1cmxDb25uKTsJICAgICAgICAgIAotCSAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0spCi0JICAgICAgICAJICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsJICAgIAotICAgICAgICAgICAgCi0JICAgICAgICAgIC8vIExvb2tzIGdvb2QsIGV4aXQgbG9vcAotCSAgICAgICAgICBicmVhazsKLQkgICAgICAgIH0KLQkgICAgICAgIGNhdGNoKCBJT0V4Y2VwdGlvbiBpb2UgKQotCSAgICAgICAgewotCSAgICAgICAgICB0cnkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKLQkgICAgICAgICAgfQotCSAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHt9IAkgIAkgICAgICAgICAgCi0JICAgICAgICB9Ci0JICAgICAgfQotCi0JCQlJV29ya2JlbmNoQnJvd3NlclN1cHBvcnQgYnJvd3NlclN1cHBvcnQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEJyb3dzZXJTdXBwb3J0KCk7Ci0JCQlJV2ViQnJvd3NlciBicm93c2VyID0gYnJvd3NlclN1cHBvcnQuY3JlYXRlQnJvd3NlcihJV29ya2JlbmNoQnJvd3NlclN1cHBvcnQuTE9DQVRJT05fQkFSLCBudWxsLCBudWxsLCBudWxsKTsKLQkJCWJyb3dzZXIub3BlblVSTCh1cmwpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JCSB9Y2F0Y2goUGFydEluaXRFeGNlcHRpb24gZXhjKXsKLQkJCWVudi5nZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgNTA0OCwgdGhpcywgImxhdW5jaFNhbXBsZSIsIGV4Yyk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhleGMuZ2V0TWVzc2FnZSgpLCBleGMpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAJcmV0dXJuIHN0YXR1czsKLQkgICAgfWNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBleGMpewotCSAgICAJZW52LmdldExvZygpLmxvZyhJTG9nLldBUk5JTkcsIDUwNDgsIHRoaXMsICJsYXVuY2hTYW1wbGUiLCBleGMpOwotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NQUxGT1JNRURfVVJMLCBleGMgKTsKLQkJCXRyeSB7Ci0JCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLQkJCX0gY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBlKSB7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTUFMRk9STUVEX1VSTCwgZSApOwotCQkJfQotCSAgICAJcmV0dXJuIHN0YXR1czsKLQkgICAgfQotICAgICB9Ci0vKiAgCi0gICAgIHByaXZhdGUgdm9pZCBkdW1wVXJsQ29udGVudHMoVVJMQ29ubmVjdGlvbiBjb25uKQotICAgICB7ICAgIAkgCi0gICAgCSBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0gICAgCSB0cnkKLSAgICAJIHsKLSAgICAJCSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAJCSBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLSAgICAJCSBTdHJpbmcgcyA9IG51bGw7Ci0gICAgCQkgd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAJCQkgU3lzdGVtLm91dC5wcmludGxuKHMpOwotICAgIAkgfQotICAgIAkgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgCSB7ICAgIAkJIAotICAgIAkgfQotICAgIAkgZmluYWxseQotICAgIAkgewotICAgIAkJIGlmIChpcyAhPSBudWxsKQotICAgIAkJIHsKLSAgICAJCQkgdHJ5Ci0gICAgCQkJIHsKLSAgICAJCQkgICBpcy5jbG9zZSgpOwotICAgIAkJCSB9Ci0gICAgCQkJIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIAkJCSB7ICAgIAkJCQkgCi0gICAgCQkJIH0KLSAgICAJCSB9Ci0gICAgCSB9Ci0gICAgIH0KLSovICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENXZWJTZXJ2aWNlVGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9HU1RDV2ViU2VydmljZVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTA2ODU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENXZWJTZXJ2aWNlVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MDggICAxNDU1Mjkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi1wdWJsaWMgY2xhc3MgR1NUQ1dlYlNlcnZpY2VUZXN0ZXIgaW1wbGVtZW50cyBJV2ViU2VydmljZVRlc3RlciAgewotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2VuZXJhdGUoVGVzdEluZm8gdGVzdEluZm8pewotICAgIFZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQljb21tYW5kcy5hZGQobmV3IEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQodGVzdEluZm8pKTsKLQljb21tYW5kcy5hZGQobmV3IEdTVENHZW5lcmF0ZUNvbW1hbmQodGVzdEluZm8pKTsKLQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLSAgfQotICAKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBsYXVuY2goVGVzdEluZm8gdGVzdEluZm8pewotCVZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQlpZiAodGVzdEluZm8uZ2V0UnVuVGVzdENsaWVudCgpKSB7Ci0JCWNvbW1hbmRzLmFkZChuZXcgR1NUQ0xhdW5jaENvbW1hbmQodGVzdEluZm8pKTsKLQl9Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7CQotICB9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMDBkYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGkuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHByaXZhdGUgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgaW5zdGFuY2VfOwotCi0gIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSgpIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIFdlYlNlcnZpY2VDbGllbnRUeXBlUmVnaXN0cnkgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaXZhdGVVRERJUmVnaXN0cnlUeXBlIik7Ci0KLSAgICB0cnkgewotICAgICAgT2JqZWN0IGNvbmZpZ0VsZW1lbnQgPSAoKGNvbmZpZy5sZW5ndGggPiAwKSA/IGNvbmZpZ1swXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpIDogbnVsbCk7Ci0gICAgICBpZihjb25maWdFbGVtZW50ICE9IG51bGwgJiYgY29uZmlnRWxlbWVudCBpbnN0YW5jZW9mIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKSAKLSAgICAgICAgcmV0dXJuIChQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSljb25maWdFbGVtZW50OyAKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9QdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNmOTQyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9QdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotCi0gIHByaXZhdGUgc3RhdGljIFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBpbnN0YW5jZV87Ci0gIHByaXZhdGUgVmVjdG9yIHR5cGVzXzsKLSAgcHJpdmF0ZSBWZWN0b3IgY29uZmlnRWxlbWVudHNfOwotCi0gIHByaXZhdGUgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCkgewotICAgIHR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBjb25maWdFbGVtZW50c18gPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBpbml0KCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICogQHJldHVybiBBIHNpbmdsZXRvbiBXZWJTZXJ2aWNlQ2xpZW50VHlwZVJlZ2lzdHJ5IG9iamVjdC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KCkgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1YmxpY1VERElSZWdpc3RyeVR5cGUiKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB0cnkgewotICAgICAgICBPYmplY3QgY29uZmlnRWxlbWVudCA9IGNvbmZpZ1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCi0gICAgICAgIGlmKCBjb25maWdFbGVtZW50IGluc3RhbmNlb2YgUHVibGljVURESVJlZ2lzdHJ5VHlwZSkgIHsKLSAgICAgICAgICB0eXBlc18uYWRkKGNvbmZpZ0VsZW1lbnQpOwotICAgICAgICAgIGNvbmZpZ0VsZW1lbnRzXy5hZGQoY29uZmlnW2ldKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkge30KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUHVibGljVURESVJlZ2lzdHJ5VHlwZVtdIGdldEFsbFB1YmxpY1VERElSZWdpc3RyeVR5cGVzKCkgewotICAgIFB1YmxpY1VERElSZWdpc3RyeVR5cGVbXSB0eXBlcyA9IG5ldyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlW3R5cGVzXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICB0eXBlc1tpXSA9IChQdWJsaWNVRERJUmVnaXN0cnlUeXBlKXR5cGVzXy5lbGVtZW50QXQoaSk7Ci0gICAgfQotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlIGdldFB1YmxpY1VERElSZWdpc3RyeVR5cGVCeUlEKFN0cmluZyBpZCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgYyA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpY29uZmlnRWxlbWVudHNfLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChjLmdldEF0dHJpYnV0ZSgiaWQiKS5lcXVhbHMoaWQpKQotICAgICAgICByZXR1cm4gKFB1YmxpY1VERElSZWdpc3RyeVR5cGUpdHlwZXNfLmVsZW1lbnRBdChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1YmxpY1VERElSZWdpc3RyeVR5cGVJREJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBQdWJsaWNVRERJUmVnaXN0cnlUeXBlIHR5cGUgPSAoUHVibGljVURESVJlZ2lzdHJ5VHlwZSl0eXBlc18uZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHR5cGUuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLSAgICAgICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KWNvbmZpZ0VsZW1lbnRzXy5lbGVtZW50QXQoaSkpLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTM1MDk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1J1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyNyAgIDEzMTYwNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNzE3ICAgMTUwNTc3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA2MDcyNiAgIDE1MDg2NSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNzI2ICAgMTUwODY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA3MjgJICAxNTE3MjMgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDgwMiAgIDE0ODczMSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcxMTI5CSAgMjA2MDgwIHppbmFAY2EuaWJtLmNvbQktIFppbmEgTW9zdGFmaWEgU2VydmljZSBEZXBsb3ltZW50IENvbmZpZyBEaWFsb2cgZ3JvdXAgbmFtZSB0cnVuY2F0ZWQgaW4gTkwgVGVzdGluZwotICogMjAwNzExMjkJICAyMDU1ODMgemluYUBjYS5pYm0uY29tCS0gWmluYSBNb3N0YWZpYSBTZWxlY3RlZCBTZXJ2ZXIgb3IgU2VydmVyIFR5cGUgaXMgbm90IGhpZ2hsaWdodGVkIGluIFNlcnZpY2UgRGVwLkNvbmZpZwotICogMjAwODA0MjggICAyMjQ3MjYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA1MjcgICAyMzQyMjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDkwMjI2CSAgMjY2MDYzIHppbmFAY2EuaWJtLmNvbSAtIFppbmEgTW9zdGFmaWEgRXJyb3IgbWVzc2FnZSB0cnVuY2F0ZWQgaW4gdGhlIFNlcnZpY2UgRGVwbG95bWVudCBjb25maWd1cmF0aW9uIGRpYWxvZyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5UaXRsZUFyZWFEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJVSUNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBSdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nIGV4dGVuZHMgVGl0bGVBcmVhRGlhbG9nIHsKLQotCXByaXZhdGUgU2hlbGwgdGhpc1NoZWxsOwotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2VCYW5uZXJfOwotCXByaXZhdGUgQ29tcG9zaXRlIHByaW1hcnlHcm91cF87Ci0JcHJpdmF0ZSBHcm91cCBydW50aW1lc0dyb3VwXzsKLQlwcml2YXRlIEdyb3VwIHNlcnZlcnNHcm91cF87Ci0JcHJpdmF0ZSBUcmVlIHJ1bnRpbWVzTGlzdF87Ci0JcHJpdmF0ZSBUcmVlIHNlcnZlckxpc3RfOwotCXByaXZhdGUgQnV0dG9uIHZpZXdTZWxlY3Rpb25CeVJ1bnRpbWVCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIHZpZXdTZWxlY3Rpb25CeVNlcnZlckJ1dHRvbl87Ci0JcHJpdmF0ZSBCdXR0b24gdmlld1NlbGVjdGlvbkJ5RXhwbG9yZUJ1dHRvbl87Ci0JcHJpdmF0ZSBJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyXzsKLQlwcml2YXRlIEltYWdlIHNlcnZlclR5cGVzSWNvbjsKLQlwcml2YXRlIEltYWdlIGV4aXN0aW5nU2VydmVyc0ljb247Ci0KLQkvKgotCSAqIENPTlRFWFRfSUQgUFdSUzAwMDEgZm9yIHRoZSBzZWxlY3Rpb24gb2YgcnVudGltZSwgc2VydmVyIGFuZCBwcm9qZWN0IGNvbWJpbmF0aW9uCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1JTX0RJQUxPRyA9ICJQV1JTMDAwMSI7Ci0JLyogQ09OVEVYVF9JRCBQV1JTMDAwMiBmb3IgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIG9uIGluIHRoZSBkYWlsb2cgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfTElTVF9SVU5USU1FUyA9ICJQV1JTMDAwMiI7Ci0JLyogQ09OVEVYVF9JRCBQV1JTMDAwMyBmb3IgdGhlIHNlcnZlciBzZWxlY3Rpb24gaW4gdGhlIGRpYWxvZyAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19MSVNUX1NFUlZFUlMgPSAiUFdSUzAwMDMiOwotCS8qCi0JICogQ09OVEVYVF9JRCBQV1JTMDAwNCBmb3IgdGhlIEVKQiBQcm9qZWN0IGNvbWJvIGJveCBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gZGlhbG9nCi0JICovCi0JLy8gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19FSkJfUFJPSkVDVCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklECi0JLy8gKyAiLlBXUlMwMDA0IjsKLQkvKgotCSAqIENPTlRFWFRfSUQgUFdSUzAwMDUgZm9yIHRoZSBydW50aW1lIHZpZXcgcmFkaW8gYnV0dG9uIG9mIHRoZSBydW50aW1lIHNlbGVjdGlvbiBkaWFsb2cKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfUkFESU9fUlVOVElNRSA9ICJQV1JTMDAwNSI7Ci0JLyoKLQkgKiBDT05URVhUX0lEIFBXUlMwMDA2IGZvciB0aGUgc2VydmVyIHZpZXcgcmFkaW8gYnV0dG9uIG9mIHRoZSBydW50aW1lIHNlbGVjdGlvbiBkaWFsb2cKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfUkFESU9fU0VSVkVSID0gIlBXUlMwMDA2IjsKLQkvKgotCSAqIENPTlRFWFRfSUQgUFdSUzAwMDcgZm9yIHRoZSBleHBsb3JlIHZpZXcgcmFkaW8gYnV0dG9uIG9mIHRoZSBydW50aW1lIHNlbGVjdGlvbiBkaWFsb2cKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfUkFESU9fRVhQTE9SRSA9ICJQV1JTMDAwNyI7Ci0JcHJpdmF0ZSBIYXNodGFibGU8U3RyaW5nLCBTdHJpbmc+IHNlcnZlckxhYmVsc187Ci0JcHJpdmF0ZSBIYXNodGFibGUgPFN0cmluZywgSVNlcnZlcj5leGlzdGluZ1NlcnZlcnNUYWJsZV87Ci0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFNlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFJ1bnRpbWVfOwotCXByaXZhdGUgU3RyaW5nIHR5cGVJZF87Ci0KLQlwcml2YXRlIFJ1bnRpbWVEZXNjcmlwdG9yIHNlbGVjdGVkUnVudGltZV87Ci0KLQlwcml2YXRlIElTZXJ2ZXIgc2VsZWN0ZWRTZXJ2ZXJfOwotCXByaXZhdGUgU3RyaW5nIHNlbGVjdGVkU2VydmVyTGFiZWxfOwotCXByaXZhdGUgU3RyaW5nIHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXzsKLQlwcml2YXRlIGJvb2xlYW4gaXNFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlT25fID0gZmFsc2U7Ci0JcHJpdmF0ZSBieXRlIHNlbGVjdGlvbk1vZGVfOwotCXByaXZhdGUgZmluYWwgYnl0ZSBNT0RFX1NFUlZJQ0UgPSAoYnl0ZSkgMDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfVFlQRVNfSUNPTiA9ICJpY29ucy9zZXJ2ZXJzL3NlcnZlcnNfb2JqLmdpZiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRVhJU1RJTkdfU0VSVkVSU19JQ09OID0gImljb25zL3NlcnZlcnMvZXhpc3Rpbmdfc2VydmVyX29iai5naWYiOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSURfOwotCi0JcHJpdmF0ZSBib29sZWFuIHNlbGVjdFNlcnZlckZpcnN0XyA9IGZhbHNlOwotCi0JcHVibGljIFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coU2hlbGwgc2hlbGwsIGJ5dGUgbW9kZSwgVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzLCBTdHJpbmcgajJlZVZlcnNpb24pIHsKLQkJc3VwZXIoc2hlbGwpOwotCQltZXNzYWdlQmFubmVyXyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfUlVOVElNRV9TRUxFQ1RJT047Ci0JCXNldFNoZWxsU3R5bGUoU1dULkNMT1NFIHwgU1dULlRJVExFIHwgU1dULkJPUkRFUgotCQkJCXwgU1dULkFQUExJQ0FUSU9OX01PREFMIHwgU1dULlJFU0laRSB8IGdldERlZmF1bHRPcmllbnRhdGlvbigpKTsKLQkJc2VsZWN0aW9uTW9kZV8gPSBtb2RlOwotCQl0eXBlSWRfID0gaWRzLmdldFR5cGVJZCgpOwotCQlkZWZhdWx0UnVudGltZV8gPSBpZHMuZ2V0UnVudGltZUlkKCk7Ci0JCWRlZmF1bHRTZXJ2ZXJfID0gaWRzLmdldFNlcnZlcklkKCk7Ci0JCXNlcnZlckluc3RhbmNlSURfID0gaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJc2V0SXNFeGlzdGluZ1NlcnZlcihpZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGwpOwotCQlzZXJ2ZXJMYWJlbHNfID0gbmV3IEhhc2h0YWJsZTxTdHJpbmcsU3RyaW5nPigpOwotCQlleGlzdGluZ1NlcnZlcnNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlPFN0cmluZywgSVNlcnZlcj4oKTsKLQkJbGFiZWxQcm92aWRlcl8gPSBTZXJ2ZXJVSUNvcmUuZ2V0TGFiZWxQcm92aWRlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlbGVjdFNlcnZlckZpcnN0KGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpIHsKLQkJc2VsZWN0U2VydmVyRmlyc3RfID0gc2VsZWN0U2VydmVyRmlyc3Q7Ci0JfQotCi0JcHJvdGVjdGVkIFBvaW50IGdldEluaXRpYWxTaXplKCkKLQl7Ci0JCXJldHVybiB0aGlzLmdldFNoZWxsKCkuY29tcHV0ZVNpemUoNTUwLCBTV1QuREVGQVVMVCwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFR5cGVSdW50aW1lU2VydmVyKCkgewotCQlUeXBlUnVudGltZVNlcnZlciBpZHMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQotCQlpZHMuc2V0VHlwZUlkKHR5cGVJZF8pOwotCQlpZiAoc2VsZWN0ZWRSdW50aW1lXyAhPSBudWxsKQotCQkJaWRzLnNldFJ1bnRpbWVJZChzZWxlY3RlZFJ1bnRpbWVfLmdldElkKCkpOwotCi0JCWlmKCBzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gPT0gbnVsbCApCi0JCXsKLQkJCWlkcy5zZXRTZXJ2ZXJJZCggZGVmYXVsdFNlcnZlcl8gKTsKLQkJCWlkcy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKCBzZXJ2ZXJJbnN0YW5jZUlEXyApOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWRzLnNldFNlcnZlcklkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyk7Ci0KLQkJCWlmIChpc0V4aXN0aW5nU2VydmVyXyAmJiBzZWxlY3RlZFNlcnZlcl8gIT0gbnVsbCkgCi0JCQl7Ci0JCQkJaWRzLnNldFNlcnZlckluc3RhbmNlSWQoc2VsZWN0ZWRTZXJ2ZXJfLmdldElkKCkpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGlkczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZ2V0SXNFeGlzdGluZ1NlcnZlcigpIHsKLQkJcmV0dXJuIGlzRXhpc3RpbmdTZXJ2ZXJfOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRJc0V4aXN0aW5nU2VydmVyKGJvb2xlYW4gaXNFeGlzdGluZykgewotCQlpc0V4aXN0aW5nU2VydmVyXyA9IGlzRXhpc3Rpbmc7Ci0JfQotCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgY29tcCA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZUNvbnRlbnRzKHBhcmVudCk7ICAKLQkJY29tcC5wYWNrKCk7IAotCi0JCWlmIChzZWxlY3RTZXJ2ZXJGaXJzdF8pIHsKLQkJCXZpZXdTZWxlY3Rpb25CeVNlcnZlckJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOyAgCi0JCQloYW5kbGVTZXJ2ZXJWaWV3U2VsZWN0aW9uRXZlbnQoKTsKLQkJfQotCQllbHNlCi0JCQl2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0KLQkJcmV0dXJuIGNvbXA7Ci0JfSAKLQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQl2YWxpZGF0ZU9uXyA9IGZhbHNlOwotCQl0aGlzU2hlbGwgPSBwYXJlbnQuZ2V0U2hlbGwoKTsKLQkJaWYgKHRoaXNTaGVsbCA9PSBudWxsKSB7Ci0JCQl0aGlzU2hlbGwgPSBjcmVhdGVTaGVsbCgpOwotCQl9Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCXNldE1lc3NhZ2UobWVzc2FnZUJhbm5lcl8pOwotCQlVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCk7Ci0JCS8vIFdpbmRvdyB0aXRsZQotCQlpZiAoc2VsZWN0aW9uTW9kZV8gPT0gTU9ERV9TRVJWSUNFKSB7Ci0JCQl0aGlzU2hlbGwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19SVU5USU1FX1NFTEVDVElPTik7Ci0JCQlzZXRUaXRsZShDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19SVU5USU1FX1NFTEVDVElPTik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0aGlzU2hlbGwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT04pOwotCQkJc2V0VGl0bGUoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfQ0xJRU5UX1JVTlRJTUVfU0VMRUNUSU9OKTsKLQkJfQotCQlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0JCWhlbHBTeXN0ZW0uc2V0SGVscCh0aGlzU2hlbGwsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi4iICsgSU5GT1BPUF9QV1JTX0RJQUxPRyk7Ci0KLQkJLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQkJbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkhPUklaT05UQUwpOwotCQkvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCQkvLyBTZWxlY3Rpb24KLQkJdGhpc1NoZWxsLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfUEFHRSk7Ci0KLQkJU3RyaW5nIGdyb3VwTmFtZSA9KHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgPyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUSU9OX1ZJRVdfVElUTEU6Ci0JCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1NFTEVDVElPTl9WSUVXX1RJVExFOwotCQlHcm91cCB2aWV3U2VsZWN0aW9uR3JvdXBfID0gdWlVdGlscy5jcmVhdGVHcm91cChjb21wb3NpdGUsIGdyb3VwTmFtZSwgbnVsbCwgbnVsbCk7Ci0KLQkJQ29tcG9zaXRlIHZpZXdTZWxlY3Rpb25Db21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHZpZXdTZWxlY3Rpb25Hcm91cF8sIDEpOwotCQl2aWV3U2VsZWN0aW9uQnlTZXJ2ZXJCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbih2aWV3U2VsZWN0aW9uQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRUxFQ1RJT05fVklFV19TRVJWRVIsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfUkFESU9fU0VSVkVSLCBJTkZPUE9QX1BXUlNfUkFESU9fU0VSVkVSKTsKLQkJdmlld1NlbGVjdGlvbkJ5U2VydmVyQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlciAoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJaWYgKCF2YWxpZGF0ZU9uXykJICAgICAgcmV0dXJuOwotCQkJCWhhbmRsZVNlcnZlclZpZXdTZWxlY3Rpb25FdmVudCgpOwotCQkJfQkKLQkJfSk7Ci0KLQkJdmlld1NlbGVjdGlvbkJ5UnVudGltZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKHZpZXdTZWxlY3Rpb25Db21wXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFTEVDVElPTl9WSUVXX1JVTlRJTUUsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19SQURJT19SVU5USU1FLCBJTkZPUE9QX1BXUlNfUkFESU9fUlVOVElNRSk7Ci0JCXZpZXdTZWxlY3Rpb25CeVJ1bnRpbWVCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWlmICghdmFsaWRhdGVPbl8pCSAgICAgIHJldHVybjsKLQkJCQloYW5kbGVSdW50aW1lVmlld1NlbGVjdGlvbkV2ZW50KCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXZpZXdTZWxlY3Rpb25CeUV4cGxvcmVCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbih2aWV3U2VsZWN0aW9uQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRUxFQ1RJT05fVklFV19FWFBMT1JFLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfUkFESU9fRVhQTE9SRSwgSU5GT1BPUF9QV1JTX1JBRElPX0VYUExPUkUpOwotCQl2aWV3U2VsZWN0aW9uQnlFeHBsb3JlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlpZiAoIXZhbGlkYXRlT25fKQkgICAgICByZXR1cm47Ci0JCQkJaGFuZGxlRXhwbG9yZVZpZXdTZWxlY3Rpb25FdmVudCgpOwotCQkJCXN1cGVyLndpZGdldFNlbGVjdGVkKGUpOwotCQkJfQotCQl9KTsKLQotCQlwcmltYXJ5R3JvdXBfID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoY29tcG9zaXRlLCAxKTsKLQkJcnVudGltZXNHcm91cF8gPSB1aVV0aWxzLmNyZWF0ZUdyb3VwKCBwcmltYXJ5R3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfUlVOVElNRVNfTElTVCwgCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTLCBJTkZPUE9QX1BXUlNfTElTVF9SVU5USU1FUyk7Ci0JCXJ1bnRpbWVzR3JvdXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpKTsKLQkJcnVudGltZXNMaXN0XyA9IHVpVXRpbHMuY3JlYXRlVHJlZShydW50aW1lc0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTLCAKLQkJCQlJTkZPUE9QX1BXUlNfTElTVF9SVU5USU1FUywgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCQlydW50aW1lc0xpc3RfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWlmICghdmFsaWRhdGVPbl8pCSAgICAgIHJldHVybjsKLQkJCQlUcmVlSXRlbVtdIHJ1bnRpbWVTZWwgPSBydW50aW1lc0xpc3RfLmdldFNlbGVjdGlvbigpOwotCQkJCXByb2Nlc3NSdW50aW1lTGlzdFNlbGVjdGlvbihydW50aW1lU2VsWzBdLmdldFRleHQoKSk7Ci0JCQkJdmFsaWRhdGVTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCS8vICBTZXJ2ZXIgbGFiZWxzIGNvbnRyb2wKLQkJc2VydmVyc0dyb3VwXyA9IHVpVXRpbHMuY3JlYXRlR3JvdXAocHJpbWFyeUdyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwgCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19MSVNUX1NFUlZFUlMsIG51bGwpOwotCQlzZXJ2ZXJzR3JvdXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpKTsKLQkJc2VydmVyTGlzdF8gPSB1aVV0aWxzLmNyZWF0ZVRyZWUoc2VydmVyc0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19MSVNUX1NFUlZFUlMsIElORk9QT1BfUFdSU19MSVNUX1NFUlZFUlMsCi0JCQkJU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCQlzZXJ2ZXJMaXN0Xy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKSk7Ci0JCXNlcnZlckxpc3RfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWlmICghdmFsaWRhdGVPbl8pCSAgICAgIHJldHVybjsKLQkJCQlwcm9jZXNzU2VydmVyTGlzdFNlbGVjdGlvbigpOwotCQkJCXZhbGlkYXRlU2VydmVyUnVudGltZVNlbGVjdGlvbigpOwotCQkJfQkKLQkJfSk7Ci0KLQkJU2VydmVyc0xpc3Qgc2VydmVyTGlzdCA9IG5ldyBTZXJ2ZXJzTGlzdCgpOwotCQlzZXJ2ZXJMaXN0LnNldFNlcnZlclRyZWVJdGVtcyhzZXJ2ZXJMaXN0Xyk7Ci0KLQkJc2V0UnVudGltZXNHcm91cCgpOwotCQkvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCQluZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuSE9SSVpPTlRBTCk7Ci0JCXZhbGlkYXRlT25fID0gdHJ1ZTsKLQkJb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHBhcmVudCk7Ci0JCXJldHVybiBjb21wb3NpdGU7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgZ2V0U3RhdHVzKCkgewotCQlpZiAoc2VsZWN0aW9uTW9kZV8gPT0gTU9ERV9TRVJWSUNFKSB7Ci0JCQlpZiAoc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfICE9IG51bGwgJiYgc2VsZWN0ZWRSdW50aW1lXyAhPSBudWxsKSAKLQkJCXsKLQotCQkJCWlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXywgc2VsZWN0ZWRSdW50aW1lXy5nZXRJZCgpLAotCQkJCQkJdHlwZUlkXykpCi0JCQkJewotCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQl9IGVsc2UKLQkJCQl7Ci0JCQkJCVN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8pOwotCQkJCQlTdHJpbmcgcnVudGltZUxhYmVsID0gc2VsZWN0ZWRSdW50aW1lXy5nZXRMYWJlbCgpOwotCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TLCBuZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwKLQkJCQkJCQlydW50aW1lTGFiZWwgfSkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQotCQkJaWYgKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyAhPSBudWxsICYmIHNlbGVjdGVkUnVudGltZV8gIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgY2xpZW50SWQgPSB0eXBlSWRfOwotCQkJCWlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXywgc2VsZWN0ZWRSdW50aW1lXwotCQkJCQkJLmdldElkKCksIGNsaWVudElkKSkKLQkJCQl7Ci0JCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJCX0gZWxzZQotCQkJCXsKLQkJCQkJU3RyaW5nIHNlcnZlckxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyk7Ci0JCQkJCVN0cmluZyBydW50aW1lTGFiZWwgPSBzZWxlY3RlZFJ1bnRpbWVfLmdldExhYmVsKCk7Ci0JCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsIG5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotCQkJCQkJCXJ1bnRpbWVMYWJlbCB9KSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8vIERpc2FibGUgT0sgYnV0dG9uIGlmIHRoZSBydW50aW1lIHNlbGVjdGlvbiBpcyBpbnZhbGlkCi0JCVRyZWVJdGVtW10gcnVudGltZVNlbCA9IHJ1bnRpbWVzTGlzdF8uZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmIChydW50aW1lU2VsID09IG51bGwgfHwgcnVudGltZVNlbC5sZW5ndGggPD0gMCB8fCBydW50aW1lU2VsWzBdLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlyZXR1cm4gU3RhdHVzVXRpbHMuaW5mb1N0YXR1cyhtZXNzYWdlQmFubmVyXyk7Ci0JCX0KLQkJLy8gRGlzYWJsZSBPSyBidXR0b24gaWYgc2VydmVyIHNlbGVjdGlvbiBpcyBpbnZhbGlkCi0JCVRyZWVJdGVtW10gc2VydmVyU2VsID0gc2VydmVyTGlzdF8uZ2V0U2VsZWN0aW9uKCk7Ci0JCVN0cmluZyBjdXJyZW50U2VsZWN0aW9uID0gKHNlcnZlclNlbCAhPSBudWxsICYmIHNlcnZlclNlbC5sZW5ndGggPiAwKSA/IHNlcnZlclNlbFswXS5nZXRUZXh0KCkgOiAiIjsKLQkJaWYgKHNlcnZlclNlbCA9PSBudWxsIHx8IGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKCkgPT0gMCkgewotCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmluZm9TdGF0dXMobWVzc2FnZUJhbm5lcl8pOwotCQl9Ci0JCWlmICghc2VydmVyTGFiZWxzXy5jb250YWluc0tleShjdXJyZW50U2VsZWN0aW9uKSB8fCAhZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmNvbnRhaW5zS2V5KGN1cnJlbnRTZWxlY3Rpb24pKSB7Ci0JCQlyZXR1cm4gU3RhdHVzVXRpbHMuaW5mb1N0YXR1cyhtZXNzYWdlQmFubmVyXyk7Ci0JCX0KLQkJLy8gRGlzYWJsZSBPSyBidXR0b24gaWYgY2F0ZWdvcnkgaXMgc2VsZWN0ZWQgcmF0aGVyIHRoYW4gYSBzZXJ2ZXIKLQkJaWYgKHNlcnZlclNlbC5sZW5ndGggPiAwICYmIHNlcnZlclNlbFswXS5nZXRJdGVtQ291bnQoKSE9MCkgewotCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmluZm9TdGF0dXMobWVzc2FnZUJhbm5lcl8pOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlU2VydmVyUnVudGltZVNlbGVjdGlvbigpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBnZXRTdGF0dXMoKTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSBuZXcgU3RyaW5nKG1lc3NhZ2VCYW5uZXJfKTsKLQkJbWVzc2FnZSA9IG5ldyBTdHJpbmcoc3RhdHVzLmdldE1lc3NhZ2UoKSk7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXNldE1lc3NhZ2UobWVzc2FnZSxJTWVzc2FnZVByb3ZpZGVyLkVSUk9SKTsKLQkJCWdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJfQotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLldBUk5JTkcpIHsKLQkJCXNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKTsKLQkJCWdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKS5zZXRFbmFibGVkKHRydWUpOwotCQl9Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuSU5GTykgewotCQkJc2V0TWVzc2FnZShtZXNzYWdlLCBJTWVzc2FnZVByb3ZpZGVyLklORk9STUFUSU9OKTsKLQkJCWdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJfQotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLk9LKSB7IAotCQkJc2V0TWVzc2FnZShtZXNzYWdlQmFubmVyXyk7Ci0JCQlnZXRCdXR0b24oSURpYWxvZ0NvbnN0YW50cy5PS19JRCkuc2V0RW5hYmxlZCh0cnVlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBoYW5kbGVSdW50aW1lVmlld1NlbGVjdGlvbkV2ZW50KCkgewotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2wubnVtQ29sdW1ucyA9IDE7Ci0JCWdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCXByaW1hcnlHcm91cF8uc2V0TGF5b3V0KGdsKTsKLQkJcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcnVudGltZXNHcm91cF8ubW92ZUFib3ZlKHNlcnZlcnNHcm91cF8pOwotCQlwcmltYXJ5R3JvdXBfLmxheW91dCgpOwotCi0JCS8vIFRPRE86IFNob3cgYWxsIHJ1bnRpbWVzLCBhbmQgb25seSBzZXJ2ZXJzIHN1cHBvcnRlZCBieSBjdXJyZW50IHR5cGUgaWQKLQl9Ci0KLQkvLyAKLQkvLyBDYWxsZWQgYnkgaGFuZGxlRXZlbnQoKSB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgdGhlIGxheW91dCB0byB2aWV3Ci0JLy8KLQlwdWJsaWMgdm9pZCBoYW5kbGVTZXJ2ZXJWaWV3U2VsZWN0aW9uRXZlbnQoKSB7Ci0JCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCQlnbC5udW1Db2x1bW5zID0gMTsKLQkJZ2wubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXQoZ2wpOwotCQlwcmltYXJ5R3JvdXBfLnNldExheW91dERhdGEoZ2QpOwotCQlzZXJ2ZXJzR3JvdXBfLm1vdmVBYm92ZShydW50aW1lc0dyb3VwXyk7Ci0JCXByaW1hcnlHcm91cF8ubGF5b3V0KCk7Ci0KLQkJLy8gVE9ETzogU2hvdyBhbGwgc2VydmVycywgYW5kIG9ubHkgcnVudGltZXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IHR5cGUgaWQKLQl9Ci0KLQkvLyAKLQkvLyBDYWxsZWQgYnkgaGFuZGxlRXZlbnQoKSB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgdGhlIGxheW91dCB0byB2aWV3Ci0JLy8KLQlwcml2YXRlIHZvaWQgaGFuZGxlRXhwbG9yZVZpZXdTZWxlY3Rpb25FdmVudCgpIHsKLQkJR3JpZExheW91dCBnbDsKLQkJZ2wgPSAoR3JpZExheW91dCkgcHJpbWFyeUdyb3VwXy5nZXRMYXlvdXQoKTsKLQkJZ2wubnVtQ29sdW1ucyA9IDI7Ci0JCWdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCXByaW1hcnlHcm91cF8uc2V0TGF5b3V0KGdsKTsKLQkJcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcnVudGltZXNHcm91cF8ubW92ZUFib3ZlKHNlcnZlcnNHcm91cF8pOwotCQlwcmltYXJ5R3JvdXBfLmxheW91dCgpOwotCi0JCS8vIFRPRE86IFNob3cgYWxsIHNlcnZlcnMgYW5kIHJ1bnRpbWVzIGZyb20gdGhlIHR5cGUgaWQKLQotCX0KLQotCXByaXZhdGUgdm9pZCBwcm9jZXNzUnVudGltZUxpc3RTZWxlY3Rpb24oU3RyaW5nIHJ1bnRpbWVOYW1lKSB7Ci0KLQkJaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCQkJc2VsZWN0ZWRSdW50aW1lXyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUxhYmVsKHJ1bnRpbWVOYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCXNlbGVjdGVkUnVudGltZV8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlMYWJlbChydW50aW1lTmFtZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc1NlcnZlckxpc3RTZWxlY3Rpb24oKSB7Ci0JCVN0cmluZyBjdXJyZW50U2VsZWN0aW9uOwotCQlUcmVlSXRlbVtdIHNlcnZlclNlbCA9IHNlcnZlckxpc3RfLmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VydmVyU2VsICE9IG51bGwgJiYgc2VydmVyU2VsLmxlbmd0aCA+IDApIHsKLQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBzZXJ2ZXJTZWxbMF0uZ2V0VGV4dCgpOwotCQkJaWYgKHNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikgfHwgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmNvbnRhaW5zS2V5KGN1cnJlbnRTZWxlY3Rpb24pKSB7Ci0JCQkJaWYgKGV4aXN0aW5nU2VydmVyc1RhYmxlXy5jb250YWluc0tleShjdXJyZW50U2VsZWN0aW9uKSkgewotCQkJCQlzZWxlY3RlZFNlcnZlcl8gPSAoSVNlcnZlcikgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmdldChjdXJyZW50U2VsZWN0aW9uKTsKLQkJCQkJc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8gPSBjdXJyZW50U2VsZWN0aW9uOwotCQkJCQlzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gPSBzZWxlY3RlZFNlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikpIHsKLQkJCQkJVHJlZUl0ZW0gcGFyZW50SXRlbSA9IHNlcnZlclNlbFswXS5nZXRQYXJlbnRJdGVtKCk7Ci0JCQkJCWlmIChwYXJlbnRJdGVtICE9IG51bGwgJiYgIXBhcmVudEl0ZW0uZ2V0VGV4dCgpLmVxdWFsc0lnbm9yZUNhc2UoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RSRUVfRVhJU1RJTkdfU0VSVkVSUykpIHsKLQkJCQkJCXNlbGVjdGVkU2VydmVyTGFiZWxfID0gY3VycmVudFNlbGVjdGlvbjsKLQkJCQkJCXNlbGVjdGVkU2VydmVyXyA9IG51bGw7Ci0JCQkJCQlzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gPSAoU3RyaW5nKSBzZXJ2ZXJMYWJlbHNfLmdldChjdXJyZW50U2VsZWN0aW9uKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCS8vIGNoZWNrIGlmIGlzRXhpc3RpbmdTZXJ2ZXIgb3IgbmV3IFNlcnZlclR5cGUKLQkJCQlUcmVlSXRlbSBwYXJlbnRJdGVtID0gc2VydmVyU2VsWzBdLmdldFBhcmVudEl0ZW0oKTsKLQkJCQlpZiAocGFyZW50SXRlbSAhPSBudWxsICYmIHBhcmVudEl0ZW0uZ2V0VGV4dCgpLmVxdWFsc0lnbm9yZUNhc2UoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RSRUVfRVhJU1RJTkdfU0VSVkVSUykpIHsKLQkJCQkJc2V0SXNFeGlzdGluZ1NlcnZlcih0cnVlKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCXNldElzRXhpc3RpbmdTZXJ2ZXIoZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCXNlbGVjdGVkU2VydmVyXyA9IG51bGw7Ci0JCQkJc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8gPSBudWxsOwotCQkJCXNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyA9IG51bGw7Ci0JCQkJc2V0SXNFeGlzdGluZ1NlcnZlcihmYWxzZSk7Ci0JCQkJcmV0dXJuOwotCQkJfSAgICAgIAotCQl9Ci0JfQotCi0JLy8JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGtleSkgewotCS8vCXJldHVybiBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRNZXNzYWdlKGtleSk7Ci0JLy8JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFJ1bnRpbWVzR3JvdXAoKSB7Ci0JCXJ1bnRpbWVzTGlzdF8ucmVtb3ZlQWxsKCk7Ci0JCVN0cmluZ1tdIHJ1bnRpbWVzID0gbnVsbDsKLQotCQlpZiAoc2VsZWN0aW9uTW9kZV8gPT0gTU9ERV9TRVJWSUNFKSB7Ci0JCQlydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWRfKTsKLQkJfQotCQllbHNlIHsKLQkJCXJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZXNCeUNsaWVudFR5cGUodHlwZUlkXyk7Ci0JCX0KLQotCQkvL3NvcnQgdGhlIHJ1bnRpbWVzIGJhc2VkIG9uIHRoZSBydW50aW1lIG5hbWUgKGJ1ZyAxNTE3MjMpCi0JCUNvbXBhcmF0b3I8U3RyaW5nPiBjb21wYXJhdG9yID0gbmV3IFJ1bnRpbWVOYW1lQ29tcGFyYXRvcigpOwotCQlBcnJheXMuc29ydChydW50aW1lcywgY29tcGFyYXRvcik7Ci0KLQkJVHJlZUl0ZW1bXSBydW50aW1lTmFtZSA9IG5ldyBUcmVlSXRlbVtydW50aW1lcy5sZW5ndGhdOwotCi0JCWlmIChydW50aW1lcyAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIHJ1bnRpbWVMYWJlbCA9IGdldFJ1bnRpbWVMYWJlbChydW50aW1lc1tpXSk7Ci0JCQkJcnVudGltZU5hbWVbaV0gPSBuZXcgVHJlZUl0ZW0ocnVudGltZXNMaXN0XywgU1dULk5PTkUpOwotCQkJCXJ1bnRpbWVOYW1lW2ldLnNldFRleHQocnVudGltZUxhYmVsKTsKLQotCQkJCWlmIChydW50aW1lc1tpXS5lcXVhbHNJZ25vcmVDYXNlKGRlZmF1bHRSdW50aW1lXykpIHsKLQkJCQkJcnVudGltZXNMaXN0Xy5zZXRTZWxlY3Rpb24obmV3IFRyZWVJdGVtW10geyBydW50aW1lTmFtZVtpXX0pOwotCQkJCQlzZWxlY3RlZFJ1bnRpbWVfID0gZ2V0UnVudGltZShydW50aW1lc1tpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSAgCi0KLQlwcml2YXRlIGNsYXNzIFJ1bnRpbWVOYW1lQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgPFN0cmluZz4KLQl7Ci0JCXB1YmxpYyBSdW50aW1lTmFtZUNvbXBhcmF0b3IoKQotCQl7CQkKLQkJfQotCQkvL0NvbXBhcmUgdG8gcnVudGltZSBJRCBzdHJpbmdzIGJ5IHRoZWlyIGxhYmVscy4gIFVzZWQgZm9yIHNvcnRpbmcuCi0JCXB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgaXRlbTEsIFN0cmluZyBpdGVtMikgewotCQkJdHJ5IHsKLQkJCQlTdHJpbmcgcnVudGltZTEgPSAoU3RyaW5nKWl0ZW0xOwotCQkJCVN0cmluZyBydW50aW1lMiA9IChTdHJpbmcpaXRlbTI7CQkKLQotCQkJCXJldHVybiBnZXRSdW50aW1lTGFiZWwocnVudGltZTEpLmNvbXBhcmVUb0lnbm9yZUNhc2UoZ2V0UnVudGltZUxhYmVsKHJ1bnRpbWUyKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7IC8vSnVzdCBpbiBjYXNlIG9mIGNsYXNzIGNhc3QgZXhjZXB0aW9uIG9yIE5QRS4gIHNob3VsZCBuZXZlciBoYXBwZW4KLQkJCX0JCQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoU3RyaW5nIHR5cGUpIHsKLQkJcmV0dXJuIGdldFJ1bnRpbWUodHlwZSkuZ2V0TGFiZWwoKTsKLQl9Ci0KLQlwcml2YXRlIFJ1bnRpbWVEZXNjcmlwdG9yIGdldFJ1bnRpbWUoU3RyaW5nIHR5cGUpIHsKLQkJaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCQkJcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHR5cGUpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHR5cGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogU2VydmVyc0xpc3QgY2xhc3MKLQkgKiAKLQkgKiBDbGFzcyB3aGljaCBlYXNpbHkgY3JlYXRlcyB0aGUgVHJlZSBzdHJ1Y3R1cmUgYW5kIGVudHJpZXMgZm9yIGV4aXN0aW5nIHNlcnZlcnMgYW5kIHNlcnZlciB0eXBlcwotCSAqLwotCXB1YmxpYyBjbGFzcyBTZXJ2ZXJzTGlzdCB7Ci0KLQkJcHJpdmF0ZSBUcmVlSXRlbVtdIGV4aXN0aW5nU2VydmVyc1RyZWU7Ci0JCWJvb2xlYW4gZXhpc3RpbmdTZXJ2ZXIgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUcmVlSXRlbXMoVHJlZSBzZXJ2ZXJzTGlzdCkgewotCQkJdGhpcy5zZXRFeGlzdGluZ1NlcnZlcnNUcmVlKHNlcnZlcnNMaXN0KTsKLQkJCXRoaXMuc2V0U2VydmVyVHlwZXNUcmVlKHNlcnZlcnNMaXN0KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVyc1RyZWUoVHJlZSBzZXJ2ZXJMaXN0KSB7Ci0JCQlTdHJpbmdbXSBzZXJ2ZXJJZHMgPSB0aGlzLmdldEFsbEV4aXN0aW5nU2VydmVycygpOwotCQkJZXhpc3RpbmdTZXJ2ZXJzVHJlZSA9IG5ldyBUcmVlSXRlbVsxXTsKLQkJCVRyZWVJdGVtW10gZXhpc3RpbmdTZXJ2ZXJJdGVtcyA9IG5ldyBUcmVlSXRlbVtzZXJ2ZXJJZHMubGVuZ3RoXTsKLQkJCWV4aXN0aW5nU2VydmVyc1RyZWVbMF0gPSBuZXcgVHJlZUl0ZW0oc2VydmVyTGlzdCwgU1dULk5PTkUpOwotCQkJZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlMpOwotCQkJSW1hZ2VEZXNjcmlwdG9yIGlkID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKEVYSVNUSU5HX1NFUlZFUlNfSUNPTik7Ci0JCQlpZiAoaWQgIT0gbnVsbCkgewotCQkJCWV4aXN0aW5nU2VydmVyc0ljb24gPSBpZC5jcmVhdGVJbWFnZSgpOwotCQkJCWV4aXN0aW5nU2VydmVyc1RyZWVbMF0uc2V0SW1hZ2UoZXhpc3RpbmdTZXJ2ZXJzSWNvbik7Ci0JCQl9Ci0JCQlmb3IgKGludCBrID0gMDsgayA8IHNlcnZlcklkcy5sZW5ndGg7IGsrKykgewotCQkJCUlTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpIGV4aXN0aW5nU2VydmVyc1RhYmxlXy5nZXQoc2VydmVySWRzW2tdKTsKLQkJCQlpZiAoc2VydmVyICE9IG51bGwpIHsKLQkJCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCk7Ci0JCQkJCWlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBzZXJ2ZXJJRCA9IHNlcnZlclR5cGUuZ2V0SWQoKTsKLQkJCQkJCWV4aXN0aW5nU2VydmVySXRlbXNba10gPSBuZXcgVHJlZUl0ZW0oZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXSwgU1dULk5PTkUpOwotCQkJCQkJZXhpc3RpbmdTZXJ2ZXJJdGVtc1trXS5zZXRUZXh0KHNlcnZlcklkc1trXSk7Ci0JCQkJCQlpZiAoc2VydmVySUQuZXF1YWxzSWdub3JlQ2FzZShkZWZhdWx0U2VydmVyXykgJiYgZ2V0SXNFeGlzdGluZ1NlcnZlcigpKSB7Ci0JCQkJCQkJZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXS5zZXRFeHBhbmRlZCh0cnVlKTsKLQkJCQkJCQlzZXJ2ZXJMaXN0LnNldFNlbGVjdGlvbihuZXcgVHJlZUl0ZW1bXSB7IGV4aXN0aW5nU2VydmVySXRlbXNba119KTsKLQkJCQkJCQlleGlzdGluZ1NlcnZlciA9IHRydWU7Ci0JCQkJCQkJUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy50aGlzLnNldElzRXhpc3RpbmdTZXJ2ZXIodHJ1ZSk7Ci0JCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJfID0gc2VydmVyOwotCQkJCQkJCXNlbGVjdGVkU2VydmVyTGFiZWxfID0gc2VydmVySWRzW2tdOwotCQkJCQkJCXNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyA9IHNlcnZlcklEOwotCQkJCQkJfQotCQkJCQkJZXhpc3RpbmdTZXJ2ZXJJdGVtc1trXS5zZXRJbWFnZShsYWJlbFByb3ZpZGVyXy5nZXRJbWFnZShzZXJ2ZXJUeXBlKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUeXBlc1RyZWUoVHJlZSBzZXJ2ZXJMaXN0KSB7Ci0KLQkJCVRyZWVJdGVtW10gc2VydmVyVHlwZXNUcmVlID0gbmV3IFRyZWVJdGVtWzFdOwotCQkJc2VydmVyVHlwZXNUcmVlWzBdID0gbmV3IFRyZWVJdGVtKHNlcnZlckxpc3QsIFNXVC5OT05FKTsKLQkJCXNlcnZlclR5cGVzVHJlZVswXS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX1NFUlZFUl9UWVBFUyk7Ci0JCQlJbWFnZURlc2NyaXB0b3IgaWQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoU0VSVkVSX1RZUEVTX0lDT04pOwotCQkJaWYgKGlkICE9IG51bGwpIHsKLQkJCQlzZXJ2ZXJUeXBlc0ljb24gPSBpZC5jcmVhdGVJbWFnZSgpOwotCQkJCXNlcnZlclR5cGVzVHJlZVswXS5zZXRJbWFnZShzZXJ2ZXJUeXBlc0ljb24pOwotCQkJfQotCQkJSGFzaHRhYmxlIDxJU2VydmVyVHlwZSwgSVJ1bnRpbWVUeXBlPiBjYXRlZ29yaWVzXyA9IG5ldyBIYXNodGFibGU8SVNlcnZlclR5cGUsIElSdW50aW1lVHlwZT4oKTsKLQkJCUhhc2h0YWJsZSA8SVJ1bnRpbWVUeXBlLCBUcmVlSXRlbT5jYXRlZ29yeVRyZWVJdGVtID0gbmV3IEhhc2h0YWJsZTxJUnVudGltZVR5cGUsIFRyZWVJdGVtPigpOwotCQkJU3RyaW5nW10gc2VydmVySWRzID0gbnVsbDsKLQkJCS8vIHJtIFN0cmluZyB3c3QgPSB3c2UuZ2V0V2ViU2VydmljZVR5cGUoKTsKLQkJCWlmIChzZWxlY3Rpb25Nb2RlXyA9PSBNT0RFX1NFUlZJQ0UpIHsKLQkJCQlzZXJ2ZXJJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlVHlwZSh0eXBlSWRfKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNlcnZlcklkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbENsaWVudFNlcnZlckZhY3RvcnlJZHMoKTsKLQkJCX0KLQkJCS8vIHJtIHNlcnZlcklkID0KLQkJCS8vIHdzc3J0UmVnaXN0cnkuZ2V0U2VydmVyRmFjdG9yeUlkc0J5VHlwZSh3c2UuZ2V0V2ViU2VydmljZVR5cGUoKSk7Ci0JCQlpZiAoc2VydmVySWRzID09IG51bGwpIHsKLQkJCQlzZXJ2ZXJJZHMgPSBnZXRBbGxTZXJ2ZXJUeXBlcygpOwotCQkJfQotCQkJVHJlZUl0ZW1bXSBwYXJlbnQgPSBuZXcgVHJlZUl0ZW1bc2VydmVySWRzLmxlbmd0aF07Ci0JCQlUcmVlSXRlbVtdIGl0ZW0gPSBuZXcgVHJlZUl0ZW1bc2VydmVySWRzLmxlbmd0aF07Ci0JCQlpZiAoc2VydmVySWRzICE9IG51bGwpIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcklkcy5sZW5ndGg7IGkrKykgewotCQkJCQlTdHJpbmcgc2VydmVyID0gU2VydmVyVXRpbHMuZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJMYWJlbEZvcklkKHNlcnZlcklkc1tpXSk7Ci0JCQkJCWlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCQkJCQkJUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy50aGlzLnNlcnZlckxhYmVsc18ucHV0KHNlcnZlciwgc2VydmVySWRzW2ldKTsKLQkJCQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlcklkc1tpXSk7Ci0JCQkJCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQkJCQlpZiAoIWNhdGVnb3JpZXNfLmNvbnRhaW5zS2V5KHNlcnZlclR5cGUpICYmIHJ1bnRpbWVUeXBlICE9IG51bGwpIHsKLQkJCQkJCQljYXRlZ29yaWVzXy5wdXQoc2VydmVyVHlwZSwgcnVudGltZVR5cGUpOwotCQkJCQkJCWlmIChjYXRlZ29yeVRyZWVJdGVtLmdldChydW50aW1lVHlwZSkgPT0gbnVsbCkgewotCQkJCQkJCQlTdHJpbmcgY2F0ZWdvcnlUZXh0ID0gcnVudGltZVR5cGUuZ2V0TmFtZSgpOwotCQkJCQkJCQlJbWFnZSBjYXRlZ29yeUltYWdlID0gbGFiZWxQcm92aWRlcl8uZ2V0SW1hZ2UocnVudGltZVR5cGUpOwotCQkJCQkJCQlwYXJlbnRbaV0gPSBuZXcgVHJlZUl0ZW0oc2VydmVyVHlwZXNUcmVlWzBdLCBTV1QuTk9ORSk7Ci0JCQkJCQkJCXBhcmVudFtpXS5zZXRUZXh0KGNhdGVnb3J5VGV4dCk7Ci0JCQkJCQkJCXBhcmVudFtpXS5zZXRJbWFnZShjYXRlZ29yeUltYWdlKTsKLQkJCQkJCQkJY2F0ZWdvcnlUcmVlSXRlbS5wdXQocnVudGltZVR5cGUsIHBhcmVudFtpXSk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UgewotCQkJCQkJCQlwYXJlbnRbaV0gPSAoVHJlZUl0ZW0pIGNhdGVnb3J5VHJlZUl0ZW0uZ2V0KHJ1bnRpbWVUeXBlKTsKLQkJCQkJCQl9Ci0JCQkJCQkJU3RyaW5nIGZhY3RvcnlUZXh0ID0gc2VydmVyVHlwZS5nZXROYW1lKCk7Ci0JCQkJCQkJSW1hZ2UgZmFjdG9yeUltYWdlID0gbGFiZWxQcm92aWRlcl8uZ2V0SW1hZ2Uoc2VydmVyVHlwZSk7Ci0JCQkJCQkJaXRlbVtpXSA9IG5ldyBUcmVlSXRlbShwYXJlbnRbaV0sIFNXVC5OT05FKTsKLQkJCQkJCQlpdGVtW2ldLnNldFRleHQoZmFjdG9yeVRleHQpOwotCQkJCQkJCWl0ZW1baV0uc2V0SW1hZ2UoZmFjdG9yeUltYWdlKTsKLQkJCQkJCQlpdGVtW2ldLnNldERhdGEoc2VydmVyVHlwZSk7Ci0JCQkJCQkJaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoZGVmYXVsdFNlcnZlcl8pICYmICFleGlzdGluZ1NlcnZlcikgewotCQkJCQkJCQlzZXJ2ZXJMaXN0LnNldFNlbGVjdGlvbihuZXcgVHJlZUl0ZW1bXSB7IGl0ZW1baV19KTsKLQkJCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJfID0gbnVsbDsKLQkJCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8gPSBmYWN0b3J5VGV4dDsKLQkJCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfID0gKFN0cmluZykgc2VydmVyTGFiZWxzXy5nZXQoc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8pOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9Ci0KLQkJLyoqCi0JCSAqIEdldCBhbGwgc2VydmVycyBpbiB0aGUgd29ya3NwYWNlCi0JCSAqIAotCQkgKiBAcmV0dXJuIFN0cmluZ1tdIG9mIGV4aXN0aW5nIHNlcnZlciBuYW1lcwotCQkgKi8KLQkJcHJpdmF0ZSBTdHJpbmdbXSBnZXRBbGxFeGlzdGluZ1NlcnZlcnMoKSB7Ci0JCQlWZWN0b3I8U3RyaW5nPiBzZXJ2ZXJJZHMgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLQkJCXsKLQkJCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotCQkJCWlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGghPTApIHsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQlJU2VydmVyIHNlcnZlciA9IChJU2VydmVyKSBzZXJ2ZXJzW2ldOwotCQkJCQkJc2VydmVySWRzLmFkZChzZXJ2ZXIuZ2V0TmFtZSgpKTsKLQkJCQkJCWV4aXN0aW5nU2VydmVyc1RhYmxlXy5wdXQoc2VydmVyLmdldE5hbWUoKSwgc2VydmVyKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAoU3RyaW5nW10pIHNlcnZlcklkcy50b0FycmF5KG5ldyBTdHJpbmdbc2VydmVySWRzLnNpemUoKV0pOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEdldCBhbGwgc2VydmVyIHR5cGVzIGF2YWlsYWJsZSBmb3IgY3JlYXRpb24KLQkJICogCi0JCSAqIEByZXR1cm4gU3RyaW5nW10gb2Ygc2VydmVyIG5hbWVzCi0JCSAqLwotCQlwcml2YXRlIFN0cmluZ1tdIGdldEFsbFNlcnZlclR5cGVzKCkgewotCQkJVmVjdG9yPFN0cmluZz5zZXJ2ZXJUeXBlc18gPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLQkJCUlTZXJ2ZXJUeXBlW10gZGVmYXVsdFNlcnZlcnNMaXN0ID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZhdWx0U2VydmVyc0xpc3QubGVuZ3RoOyBpKyspIHsKLQkJCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gKElTZXJ2ZXJUeXBlKSBkZWZhdWx0U2VydmVyc0xpc3RbaV07Ci0JCQkJc2VydmVyVHlwZXNfLmFkZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotCQkJfQotCQkJcmV0dXJuIChTdHJpbmdbXSkgc2VydmVyVHlwZXNfLnRvQXJyYXkobmV3IFN0cmluZ1tzZXJ2ZXJUeXBlc18uc2l6ZSgpXSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uRmlsdGVyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbkZpbHRlcjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxNTE5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uRmlsdGVyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwNiAgIDEwNTA0NSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24gICAgICAgICAgCi0gKiAyMDA3MDMyOCAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA1MDEgICAyMjk3MjggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHVwcGVyY2FzZSAuV1NETCBjYW5ub3QgYmUgZm91bmQgYnkgdGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQKLSAqIDIwMDgwNTIzICAgMjMzNzY0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBUb3AgZG93biBFSkIgcHJlZmVyZW5jZSBub3QgcmVzcGVjdGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLQotcHVibGljIGNsYXNzIFR5cGVTZWxlY3Rpb25GaWx0ZXIyCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVHlwZUJ5SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uLCBBcnJheUxpc3Qgd2ViU2VydmljZVR5cGVMaXN0KQotICB7Ci0gICAgICAgIAotICAgIEFycmF5TGlzdCBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmIGluaXRpYWxTZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgCi0gICAgICAvLyBDaGVjayBmb3IgbnVsbCBpbml0aWFsIHNlbGVjdGlvbgotICAgICAgT2JqZWN0IGluaXRpYWxPYmplY3QgPSBpbml0aWFsU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKGluaXRpYWxPYmplY3QgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICAvLyBNYXRjaCB1cCByZXNvdXJjZSB0eXBlIG1ldGFkYXRhIHdpdGggaW5pdGlhbCBzZWxlY3Rpb24KLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSB3ZWJTZXJ2aWNlVHlwZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHdzdCA9IChTdHJpbmcpaXRlci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBzY2VuYXJpbyA9IHdzdC5zdWJzdHJpbmcoMCx3c3QuaW5kZXhPZigiLyIpKTsKLSAgICAgICAgU3RyaW5nIGltcGxJZCA9IHdzdC5zdWJzdHJpbmcod3N0LmluZGV4T2YoIi8iKSsxKTsgICAgICAgIAotICAgICAgICAvL0lXZWJTZXJ2aWNlVHlwZSB3c3QgPSAoSVdlYlNlcnZpY2VUeXBlKWl0ZXIubmV4dCgpOwotICAgICAgICAvL1N0cmluZyB0eXBlSWQgPSAoU3RyaW5nKXdzdC5nZXRJZCgpOwotICAgICAgICBpZiAoc2NlbmFyaW8uZXF1YWxzKFN0cmluZy52YWx1ZU9mKFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkpICYmICFzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh3c3QpKQotICAgICAgICB7Ci0KLSAgICAgICAgICAKLSAgICAgICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgICAgICBTdHJpbmdbXSByZXNvdXJjZVR5cGVzID0gd3NpbXBsLmdldFJlc291cmNlVHlwZU1ldGFkYXRhKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHJlc291cmNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZXNbaV0hPW51bGwpCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgaWYgKChpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpKS5lbmRzV2l0aChyZXNvdXJjZVR5cGVzW2ldKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihpbml0aWFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBuYW1lID0gaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiggcmVzb3VyY2UgIT0gbnVsbCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmdbXSBleHRlbnNpb25zID0gd3NpbXBsLmdldEV4dGVuc2lvbk1ldGFkYXRhKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2VwdHNOYW1lKG5hbWUsIGV4dGVuc2lvbnMpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzLmFkZCh3c3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy9UT0RPOiBCdWcgMTc5NzUxIC0gTmVlZCB0byBtYWtlIGNoZWNraW5nIGZvciB0eXBlcyByZWNvZ25pemVkIGFzIGJvdHRvbS11cCB0byBiZSBtb3JlIGV4dGVuc2libGUgICAgICAgICAKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoc3VwcG9ydGVkVHlwZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIAkgIGlmIChpbml0aWFsT2JqZWN0IGluc3RhbmNlb2YgQmVhbkxpbmsgfHwgaW5pdGlhbE9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbiB8fCBpbml0aWFsT2JqZWN0IGluc3RhbmNlb2YgSVR5cGUpIHsKLSAgICAgICAgCQkgIHN1cHBvcnRlZFR5cGVzLmFkZCh3c3QpOwotICAgICAgICAJICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vSWYgbm8gd3NJbXBscyBoYXZlIGFjY2VwdGVkIHRoaXMgc2VsZWN0aW9uLCBjaGVjayBpZiB0aGlzIGlzIFdTREwuIElmIGl0IGlzLAotICAgICAgLy9hZGQgdGhlIHRvcC1kb3duIEphdmEgc2VydmljZSB0eXBlIHRvIHRoZSBsaXN0LgotICAgICAgaWYgKHN1cHBvcnRlZFR5cGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nW10gcmVzb3VyY2VUeXBlcyA9IHsiRmlsZSIsICJJUmVzb3VyY2UiLCAiU3RyaW5nIiwgIlNlcnZpY2VJbXBsIiwgIlNlcnZpY2VSZWZJbXBsIiwgIldTRExSZXNvdXJjZUltcGwifTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPHJlc291cmNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlc1tpXSE9bnVsbCkKLSAgICAgICAgICB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgoaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSkuZW5kc1dpdGgocmVzb3VyY2VUeXBlc1tpXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24oaW5pdGlhbE9iamVjdCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc291cmNlID0gbnVsbDsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmKCByZXNvdXJjZSAhPSBudWxsICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbE9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgICAgeyAvL3RoZSBpbml0aWFsT2JqZWN0IGNvdWxkIGJlIGEgcGF0aCBuYW1lIHRoYXQgaXMgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICAvL2J1ZyAxMDUwNDUKLSAgICAgICAgICAgIAluYW1lID0gKFN0cmluZylpbml0aWFsT2JqZWN0OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWUgPSBpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICB9ICAgIAotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgU3RyaW5nW10gZXh0ZW5zaW9ucyA9IHsiLndzZGwiLCAiLndzaWwiLCAiLmh0bWwiLCAiLlNlcnZpY2VJbXBsIiwgIi5TZXJ2aWNlUmVmSW1wbCIsICIuV1NETFJlc291cmNlSW1wbCJ9OwotICAgICAgICAgICAgICBpZiAoYWNjZXB0c05hbWUobmFtZSwgZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLSAgICAgICAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXMuYWRkKGVudHJ5YnVmZi50b1N0cmluZygpICsgIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIpOwotICAgICAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzLmFkZChlbnRyeWJ1ZmYudG9TdHJpbmcoKSArICJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmVqYiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgIH0gICAgCi0gIAotCi0gICAgCi0gICAgaWYgKHN1cHBvcnRlZFR5cGVzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAvL0l0J3Mgbm90IGEgcmVnaXN0ZXJlZCBpbXBsZW1lbnRhdGlvbiBhbmQgaXRzIG5vdCBXU0RMIHNvIHJldHVybiBudWxsOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZ1tdKXN1cHBvcnRlZFR5cGVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgfQotICB9Ci0gIC8vCi0gIC8vIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhY2NlcHRhYmxlIGJhc2VkIHVwb24gaXRzIGV4dGVuc2lvbgotICAvLwotICBwcml2YXRlIGJvb2xlYW4gYWNjZXB0c05hbWUgKCBTdHJpbmcgbmFtZSwgU3RyaW5nW10gZXh0ZW5zaW9ucykKLSAgewotICAgIC8vUmV0dXJuIHRydWUgaWYgImFsbCIgZXh0ZW5zaW9ucyBhcmUgc3VwcG9ydGVkLgotCi0gICAgaWYgKGV4dGVuc2lvbnNbMF0hPW51bGwpCi0gICAgewotICAgICAgaWYgKGV4dGVuc2lvbnNbMF0uZXF1YWxzKCJhbGwiKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wOyBpPGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGV4dGVuc2lvbnNbaV0hPW51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0ZW5zaW9uc1tpXS50b0xvd2VyQ2FzZSgpKSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbk1ldGFkYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uTWV0YWRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3NWFjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uTWV0YWRhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotICAvLwotICAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBzZXQgb2YgZGlzdGluZ3Vpc2hpbmcgZmFjdG9ycyBpbiBkZXRlcm1pbmluZyAKLSAgLy8gdGhlIGRlZmF1bHQgV2ViIHNlcnZpY2UgdHlwZS4gIFRoZSBkZWZhdWx0IFdlYiBTZXJ2aWNlIHR5cGUgd2lsbCBiZSBkZXRlcm1pbmVkCi0gIC8vIGJ5IHBhdHRlcm4gbWF0Y2hpbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHdpdGggdGhlIHN1cHBvcnRlZCBleHRlbnNpb24gCi0gIC8vIGFuZCB0aGUgcmVzb3VyY2UgdHlwZSBtZXRhZGF0YSBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0IGZpbGUuCi0gIC8vCi0gIHB1YmxpYyBjbGFzcyBUeXBlU2VsZWN0aW9uTWV0YWRhdGEKLSAgewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgIHB1YmxpYyBTdHJpbmdbXSBleHRlbnNpb25NZXRhOwotICAgIHB1YmxpYyBTdHJpbmdbXSByZXNvdXJjZVR5cGVNZXRhOwotCi0gICAgcHVibGljIFR5cGVTZWxlY3Rpb25NZXRhZGF0YShTdHJpbmcgZXh0ZW5zaW9uTUQsIFN0cmluZyByZXNvdXJjZVR5cGVNRCkKLSAgICB7Ci0gICAgICBzZXRFeHRlbnNpb25NZXRhZGF0YShleHRlbnNpb25NRCk7Ci0gICAgICBzZXRSZXNvdXJjZVR5cGVNZXRhZGF0YShyZXNvdXJjZVR5cGVNRCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvbk1ldGFkYXRhKFN0cmluZyBleHRlbnNpb25NZXRhZGF0YSkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGV4dGVuc2lvbk1ldGFkYXRhKTsKLSAgICAgIGV4dGVuc2lvbk1ldGEgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgICAgaW50IGk9MDsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuID0gKFN0cmluZylzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKGV4dGVuIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZXh0ZW5zaW9uTWV0YVtpXT1leHRlbjsKLSAgICAgICAgfQotICAgICAgICBpKys7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RXh0ZW5zaW9uTWV0YWRhdGEoKQotICAgIHsKLSAgICAgIHJldHVybiBleHRlbnNpb25NZXRhOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZVR5cGVNZXRhZGF0YShTdHJpbmcgcmVzb3VyY2VUeXBlTWV0YWRhdGEpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZXNvdXJjZVR5cGVNZXRhZGF0YSk7Ci0gICAgICByZXNvdXJjZVR5cGVNZXRhID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICAgIGludCBpPTA7Ci0gICAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZXNvdXJjZVR5cGUgPSAoU3RyaW5nKXN0Lm5leHRUb2tlbigpOwotICAgICAgICBpZiAocmVzb3VyY2VUeXBlIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YVtpXT1yZXNvdXJjZVR5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgaSsrOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXNvdXJjZVR5cGVNZXRhZGF0YSgpCi0gICAgewotICAgICAgcmV0dXJuIHJlc291cmNlVHlwZU1ldGE7Ci0gICAgfQotCi0gIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvV2ViU2VydmljZUluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1dlYlNlcnZpY2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YmM1NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvV2ViU2VydmljZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi0KLS8qKgotKiBUaGlzIHR5cGUgaXMgdXNlZCB0byBob2xkIHVzZXIgb3IgY2FsY3VsYXRlZCAKLSogZGF0YSB0byBiZSB1c2UgYnkgZmluc2loIHRhc2tzCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlSW5mbwotewotCi19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlOVFRDb21tLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5M2VmYmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlOVFRDb21tLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLlBsdWdpbk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbSBpbXBsZW1lbnRzIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLXsKLQotICAgIC8vIENvcHlyaWdodAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBQbHVnaW5NZXNzYWdlcy5QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3d3dy51ZGRpLm5lLmpwL3Vici9pbnF1aXJ5YXBpIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudWRkaS5uZS5qcC91YnIvcHVibGlzaGFwaSI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3d3dy5udHQuY29tL3VkZGkvIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzJmNGZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLlBsdWdpbk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgUHVibGljVURESVJlZ2lzdHJ5U0FQIGltcGxlbWVudHMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotewotCi0gICAgLy8gQ29weXJpZ2h0Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIuIjsKLQotICAgIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlTQVAoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gUGx1Z2luTWVzc2FnZXMuUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3VkZGkuc2FwLmNvbS9VRERJL2FwaS9pbnF1aXJ5LyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vdWRkaS5zYXAuY29tL1VEREkvYXBpL3B1Ymxpc2gvIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwOi8vdWRkaS5zYXAuY29tLyI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjI2N2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QbHVnaW5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QgaW1wbGVtZW50cyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlCi17Ci0KLSAgICAvLyBDb3B5cmlnaHQKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotCi0gICAgcHVibGljIFB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gUGx1Z2luTWVzc2FnZXMuUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwOi8vdWRkaXRlc3Quc2FwLmNvbS9VRERJL2FwaS9pbnF1aXJ5LyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vdWRkaXRlc3Quc2FwLmNvbS9VRERJL2FwaS9wdWJsaXNoLyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3VkZGl0ZXN0LnNhcC5jb20vIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZDllNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1wdWJsaWMgaW50ZXJmYWNlIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLXsKLQotICAgIC8vIENvcHlyaWdodAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYmFjZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QbHVnaW5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzIGltcGxlbWVudHMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotewotCi0gICAgLy8gQ29weXJpZ2h0Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIuIjsKLQotICAgIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBQbHVnaW5NZXNzYWdlcy5QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgICAgICAvL3JldHVybiAiaHR0cDovL3VkZGkueG1ldGhvZHMubmV0L2lucXVpcmUiOwotICAgICAgICByZXR1cm4gImh0dHA6Ly91ZGRpLnhtZXRob2RzLm5ldC9pbnF1aXJlMiI7Ci0gICAgfQotCi0gICAgLy8gUmVhZC1vbmx5IHJlZ2lzdHJ5LiBUaGUgcHVibGlzaCBhbmQgcmVnaXN0cmF0aW9uIFVSTHMgZG9uJ3QgZXhpc3QuCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vdWRkaS54bWV0aG9kcy5uZXQvcHVibGlzaDIiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHA6Ly93d3cueG1ldGhvZHMubmV0L3ZlMi9SZWdpc3Rlci5wbz9ldmVudD1yZWdpc3Rlck9yZyI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNTc4NzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NpbC5BZGRXU0RMVG9XU0lMQ29tbWFuZDsKLQotCi0KLXB1YmxpYyBjbGFzcyBBZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIEFkZFdTRExUb1dTSUxDb21tYW5kIGNvbW1hbmQ7Ci0gIHByaXZhdGUgQXJndW1lbnRzIGFyZ3M7Ci0KLSAgcHVibGljIEFkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkV1NETFRvV1NJTENvbW1hbmQoKTsKLSAgICBpZiAoIWFyZ3MuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGNvbW1hbmQuc2V0QXJndW1lbnRzKGFyZ3MuZ2V0U3RyaW5nQXJndW1lbnRzKCkpOwotICAgICAgY29tbWFuZC5zZXRXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIobmV3IERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSkpOwotICAgICAgY29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgICByZXR1cm4gY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBhcmdzIFRoZSBhcmdzIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFyZ3MoQXJndW1lbnRzIGFyZ3MpCi0gIHsKLSAgICB0aGlzLmFyZ3MgPSBhcmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1hbmQoQWRkV1NETFRvV1NJTENvbW1hbmQgY29tbWFuZCkKLSAgewotICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FyZ3VtZW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FyZ3VtZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE3N2M1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9Bcmd1bWVudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBBcmd1bWVudHMKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgYXJnc187Ci0KLSAgcHVibGljIEFyZ3VtZW50cygpCi0gIHsKLSAgICBhcmdzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZChTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBhcmdzXy5hZGQoa2V5KTsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgIGFyZ3NfLmFkZCh2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmUoU3RyaW5nIGtleSkKLSAgewotICAgIGludCBpbmRleCA9IGFyZ3NfLmluZGV4T2Yoa2V5KTsKLSAgICBpZiAoaW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICBhcmdzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgYXJnc18ucmVtb3ZlKGluZGV4KzEpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBrZXkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBhcmdzXy5pbmRleE9mKGtleSk7Ci0gICAgaWYgKGluZGV4ID49IDApCi0gICAgICByZXR1cm4gYXJnc18uZ2V0KGluZGV4KzEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgYXJnc18uY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3RbXSBnZXRBcmd1bWVudHMoKQotICB7Ci0gICAgT2JqZWN0W10gYXJncyA9IG5ldyBPYmplY3RbYXJnc18uc2l6ZSgpXTsKLSAgICBhcmdzXy5jb3B5SW50byhhcmdzKTsKLSAgICByZXR1cm4gYXJnczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRTdHJpbmdBcmd1bWVudHMoKQotICB7Ci0gICAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbYXJnc18uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspCi0gICAgICBhcmdzW2ldID0gYXJnc18uZ2V0KGkpLnRvU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGFyZ3M7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgewotICAgIHJldHVybiBhcmdzXy5pc0VtcHR5KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9EaWFsb2dXV1dBdXRoZW50aWNhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0RpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDc1MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0RpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgV1dXQXV0aGVudGljYXRpb25IYW5kbGVyCi17Ci0KLSAgLypDT05URVhUX0lEIERCQVMwMDAxIGZvciB0aGUgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RCQVNfVVNFUk5BTUUgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuREJBUzAwMDEiOwotCi0gIC8qQ09OVEVYVF9JRCBEQkFTMDAwMiBmb3IgdGhlIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gcGFzc3dvcmQqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RCQVNfUEFTU1dPUkQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuREJBUzAwMDIiOwotCi0gIHByaXZhdGUgU3RyaW5nIHVzZXJuYW1lU3RyaW5nXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmRTdHJpbmdfOwotCi0gIHByaXZhdGUgVGV4dCB1c2VybmFtZV87Ci0gIHByaXZhdGUgVGV4dCBwYXNzd29yZF87Ci0KLSAgcHJpdmF0ZSBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZV87Ci0KLSAgcHVibGljIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uKFNoZWxsIHNoZWxsKQotICB7Ci0gICAgc3VwZXIoc2hlbGwpOwotICAgIHVzZXJuYW1lU3RyaW5nXyA9IG51bGw7Ci0gICAgcGFzc3dvcmRTdHJpbmdfID0gbnVsbDsKLSAgICB3d3dhZV8gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIENhbmNlbCBidXR0b24gaXMgcHJlc3NlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2FuY2VsUHJlc3NlZCgpCi0gIHsKLSAgICB1c2VybmFtZVN0cmluZ18gPSBudWxsOwotICAgIHBhc3N3b3JkU3RyaW5nXyA9IG51bGw7Ci0gICAgc3VwZXIuY2FuY2VsUHJlc3NlZCgpOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIE9LIGJ1dHRvbiBpcyBwcmVzc2VkLgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKQotICB7Ci0gICAgU3RyaW5nIHVzZXJuYW1lU3RyaW5nID0gdXNlcm5hbWVfLmdldFRleHQoKTsKLSAgICB1c2VybmFtZVN0cmluZ18gPSAodXNlcm5hbWVTdHJpbmcubGVuZ3RoKCkgPiAwKSA/IHVzZXJuYW1lU3RyaW5nIDogbnVsbDsKLSAgICBTdHJpbmcgcGFzc3dvcmRTdHJpbmcgPSBwYXNzd29yZF8uZ2V0VGV4dCgpOwotICAgIHBhc3N3b3JkU3RyaW5nXyA9IChwYXNzd29yZFN0cmluZy5sZW5ndGgoKSA+IDApID8gcGFzc3dvcmRTdHJpbmcgOiBudWxsOwotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVExFX0hUVFBfQkFTSUNfQVVUSCk7Ci0gIH0KLQotICAvKiogCi0gICogQ3JlYXRlcyB0aGUgZGlhbG9nIGFyZWEuCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbXBvc2l0ZS4KLSAgKiBAcmV0dXJuIFRoZSBjb250cm9sIGFyZWEuCi0gICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCk7Ci0gICAgZ2Qud2lkdGhIaW50ID0gNDAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ2wudmVydGljYWxTcGFjaW5nID0gMTU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dChnbCk7Ci0KLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICBsYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9VUkwpOwotICAgIGxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dCh3d3dhZV8uZ2V0VVJMKCkpOwotICAgIGxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQotICAgIHVzZXJuYW1lXyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7Ci0gICAgdXNlcm5hbWVfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIHVzZXJuYW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodXNlcm5hbWVfLCBJTkZPUE9QX0RCQVNfVVNFUk5BTUUpOwotCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQotICAgIHBhc3N3b3JkXyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7Ci0gICAgcGFzc3dvcmRfLnNldEVjaG9DaGFyKCcqJyk7Ci0gICAgcGFzc3dvcmRfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIHBhc3N3b3JkXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodXNlcm5hbWVfLCBJTkZPUE9QX0RCQVNfUEFTU1dPUkQpOwotCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVdXV0F1dGhlbnRpY2F0aW9uKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlKQotICB7Ci0gICAgdXNlcm5hbWVTdHJpbmdfID0gbnVsbDsKLSAgICBwYXNzd29yZFN0cmluZ18gPSBudWxsOwotICAgIHd3d2FlXyA9IHd3d2FlOwotICAgIG9wZW4oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHVzZXJuYW1lU3RyaW5nXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIHBhc3N3b3JkU3RyaW5nXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1RhYmxlVmlld2VyRWRpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvVGFibGVWaWV3ZXJFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhNDVmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvVGFibGVWaWV3ZXJFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlRhYmxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi1wdWJsaWMgY2xhc3MgVGFibGVWaWV3ZXJFZGl0b3IgZXh0ZW5kcyBDb21wb3NpdGUKLXsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVCA9IDEwMDsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9DT0xVTU5fV0lEVEggPSA4MDsKLQotICBwcml2YXRlIFN0cmluZ1tdIGNvbHVtbnNfOwotICBwcml2YXRlIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyXzsKLSAgcHJpdmF0ZSBUYWJsZSB0YWJsZV87Ci0gIHByaXZhdGUgVGFibGVFZGl0b3IgZWRpdG9yXzsKLSAgcHJpdmF0ZSBUYWJsZUVkaXRvckxpc3RlbmVyIHRhYmxlRWRpdG9yTGlzdGVuZXJfOwotICBwcml2YXRlIFRleHQgdGV4dF87Ci0gIHByaXZhdGUgQnV0dG9uIGFkZF87Ci0gIHByaXZhdGUgQnV0dG9uIHJlbW92ZV87Ci0KLSAgcHJpdmF0ZSBMaXN0IHZhbHVlc187Ci0gIHByaXZhdGUgT2JqZWN0IGRlZmF1bHRWYWx1ZV87Ci0KLSAgcHVibGljIFRhYmxlVmlld2VyRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZ1tdIGNvbHVtbnMsIExpc3QgaW5pdFZhbHVlcywgT2JqZWN0IGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIHN1cGVyKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGNvbHVtbnNfID0gY29sdW1uczsKLSAgICB2YWx1ZXNfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChpbml0VmFsdWVzICE9IG51bGwgJiYgaW5pdFZhbHVlcy5zaXplKCkgPiAwKQotICAgICAgdmFsdWVzXy5hZGRBbGwoaW5pdFZhbHVlcyk7Ci0gICAgZGVmYXVsdFZhbHVlXyA9IChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgPyBkZWZhdWx0VmFsdWUgOiBuZXcgU3RyaW5nKCIiKTsKLSAgICBjcmVhdGVQYXJ0Q29udHJvbCh0aGlzKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgc2V0TGF5b3V0KGdsKTsKLSAgICBzZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLSAgICB0YWJsZV8gPSBuZXcgVGFibGUoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBnZC5oZWlnaHRIaW50ID0gREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVDsKLSAgICB0YWJsZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgdGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgdGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLSAgICBUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotICAgIGludCBtYXhXaWR0aCA9IERFRkFVTFRfQ09MVU1OX1dJRFRIOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGVfLCBTV1QuTk9ORSk7Ci0gICAgICB0YWJsZUNvbHVtbi5zZXRUZXh0KGNvbHVtbnNfW2ldKTsKLSAgICAgIHRhYmxlQ29sdW1uLnBhY2soKTsKLSAgICAgIGludCB0YWJsZUNvbHVtbldpZHRoID0gTWF0aC5tYXgoREVGQVVMVF9DT0xVTU5fV0lEVEgsIHRhYmxlQ29sdW1uLmdldFdpZHRoKCkpOwotICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGFibGVDb2x1bW5XaWR0aCk7Ci0gICAgICBDb2x1bW5XZWlnaHREYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uV2VpZ2h0RGF0YSh0YWJsZUNvbHVtbldpZHRoLCB0YWJsZUNvbHVtbldpZHRoLCB0cnVlKTsKLSAgICAgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0gICAgfQotICAgIHRhYmxlXy5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotICAgIC8vIGluaXRpYWxpemUgdGhlIHRhYmxlIGVkaXRvcgotICAgIGVkaXRvcl8gPSBuZXcgVGFibGVFZGl0b3IodGFibGVfKTsKLSAgICAvLyBUaGUgZWRpdG9yIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBjZWxsIGFuZCBtdXN0Ci0gICAgLy8gbm90IGJlIGFueSBzbWFsbGVyIHRoYW4gNTAgcGl4ZWxzLgotICAgIGVkaXRvcl8uaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5MRUZUOwotICAgIGVkaXRvcl8uZ3JhYkhvcml6b250YWwgPSB0cnVlOwotICAgIGVkaXRvcl8ubWluaW11bVdpZHRoID0gbWF4V2lkdGg7Ci0gICAgdGFibGVFZGl0b3JMaXN0ZW5lcl8gPSBuZXcgVGFibGVFZGl0b3JMaXN0ZW5lcigpOwotICAgIHRhYmxlXy5hZGRNb3VzZUxpc3RlbmVyKHRhYmxlRWRpdG9yTGlzdGVuZXJfKTsKLSAgICB0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGVfKTsKLSAgICB0YWJsZVZpZXdlcl8uZ2V0Q29udHJvbCgpLmFkZEtleUxpc3RlbmVyKAotICAgICAgbmV3IEtleUxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gRGVsCi0gICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAxMjcpIAotICAgICAgICAgICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICAgICAgICAgIC8vIEVudGVyIG9yIHNwYWNlCi0gICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAxMyB8fCAoKGludCllLmNoYXJhY3RlcikgPT0gMzIpCi0gICAgICAgICAgICB0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQga2V5UmVsZWFzZWQoS2V5RXZlbnQgZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBMaXN0Q29udGVudFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMaXN0TGFiZWxQcm92aWRlcigpKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQodmFsdWVzXyk7Ci0gICAgdGFibGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLSAgICAgIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBlbmFibGVSZW1vdmUodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotCi0gICAgQ29tcG9zaXRlIGJ1dHRvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0gICAgYnV0dG9uQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgYnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLSAgICBhZGRfID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5QVVNIKTsKLSAgICBhZGRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0FERCk7Ci0gICAgYWRkXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBhZGRfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotICAgICAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotCi0gICAgcmVtb3ZlXyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0gICAgcmVtb3ZlXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SRU1PVkUpOwotICAgIHJlbW92ZV8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgcmVtb3ZlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBlbmFibGVSZW1vdmUoZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZVJlbW92ZShib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICByZW1vdmVfLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgICB2YWx1ZXNfLmFkZChkZWZhdWx0VmFsdWVfKTsKLSAgICByZWZyZXNoKCk7Ci0gICAgc2V0U2VsZWN0aW9uQXNPYmplY3QodmFsdWVzXy5nZXQodGFibGVfLmdldEl0ZW1Db3VudCgpLTEpKTsKLSAgICB0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBoYW5kbGVEZWxldGVLZXlQcmVzc2VkKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpCi0gIHsKLSAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0aW9uSW5kZXggPSB0YWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGludCBzZWxlY3Rpb25Db3VudCA9IHRhYmxlXy5nZXRJdGVtQ291bnQoKTsKLSAgICAgIHZhbHVlc18ucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLSAgICAgIGlmIChzZWxlY3Rpb25JbmRleCA8IHNlbGVjdGlvbkNvdW50LTEpCi0gICAgICAgIHNldFNlbGVjdGlvbkFzT2JqZWN0KHZhbHVlc18uZ2V0KHNlbGVjdGlvbkluZGV4KSk7Ci0gICAgICBlbHNlIGlmIChzZWxlY3Rpb25Db3VudCAtMiA+PSAwKQotICAgICAgICBzZXRTZWxlY3Rpb25Bc09iamVjdCh2YWx1ZXNfLmdldChzZWxlY3Rpb25Db3VudC0yKSk7Ci0gICAgICByZWZyZXNoKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsUmVmcmVzaCgpCi0gIHsKLSAgICAvLyBzeW5jaHJvbml6ZSB0ZXh0IGZpZWxkLCBwcmV2aW91c2x5IHNlbGVjdGVkIHRhYmxlIGNlbGwgYW5kIG1vZGVsIChpbnB1dE9iamVjdCkKLSAgICBpZiAodGV4dF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUYWJsZUl0ZW0gb2xkVGFibGVJdGVtID0gZWRpdG9yXy5nZXRJdGVtKCk7Ci0gICAgICBpbnQgb2xkQ29sdW1uSW5kZXggPSBlZGl0b3JfLmdldENvbHVtbigpOwotICAgICAgaWYgKG9sZFRhYmxlSXRlbSAhPSBudWxsICYmIG9sZENvbHVtbkluZGV4ID49IDAgJiYgb2xkQ29sdW1uSW5kZXggPCBjb2x1bW5zXy5sZW5ndGgpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvbGRUZXh0ID0gdGV4dF8uZ2V0VGV4dCgpOwotICAgICAgICBvbGRUYWJsZUl0ZW0uc2V0VGV4dChvbGRDb2x1bW5JbmRleCwgb2xkVGV4dCk7Ci0gICAgICAgIGludCBvbGRSb3dJbmRleCA9IHRhYmxlXy5pbmRleE9mKG9sZFRhYmxlSXRlbSk7Ci0gICAgICAgIHZhbHVlc18uc2V0KG9sZFJvd0luZGV4LCBvbGRUZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0U2VsZWN0aW9uQXNPYmplY3QoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIHRhYmxlVmlld2VyXy5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRUb29sVGlwVGV4dChTdHJpbmcgc3RyaW5nKQotICB7Ci0gICAgdGFibGVfLnNldFRvb2xUaXBUZXh0KHN0cmluZyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbmZvcG9wKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFibGVfLCBzdHJpbmcpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChMaXN0IGxpc3QpCi0gIHsKLSAgICB2YWx1ZXNfLmNsZWFyKCk7Ci0gICAgdmFsdWVzXy5hZGRBbGwobGlzdCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkKLSAgewotICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLQotICBwdWJsaWMgVGFibGVJdGVtW10gZ2V0SXRlbXMoKQotICB7Ci0gICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgcmV0dXJuIHRhYmxlXy5nZXRJdGVtcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgIGFkZF8uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICBlbmFibGVSZW1vdmUoZW5hYmxlZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICBpZiAoZWRpdG9yXyAhPSBudWxsKQotICAgICAgZWRpdG9yXy5kaXNwb3NlKCk7Ci0gICAgaWYgKHRhYmxlXyAhPSBudWxsKQotICAgICAgdGFibGVfLmRpc3Bvc2UoKTsKLSAgICBpZiAoYWRkXyAhPSBudWxsKQotICAgICAgYWRkXy5kaXNwb3NlKCk7Ci0gICAgaWYgKHJlbW92ZV8gIT0gbnVsbCkKLSAgICAgIHJlbW92ZV8uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsRGlzcG9zZSgpCi0gIHsKLSAgICBpZiAodGV4dF8gIT0gbnVsbCkKLSAgICAgIHRleHRfLmRpc3Bvc2UoKTsKLSAgICB0ZXh0XyA9IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFZGl0b3JMaXN0ZW5lciBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIKLSAgewotICAgIHByaXZhdGUgaW50IGN1cnJTZWxlY3Rpb25JbmRleF87Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdFJvd187Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdENvbHVtbl87Ci0KLSAgICBwdWJsaWMgVGFibGVFZGl0b3JMaXN0ZW5lcigpCi0gICAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIGN1cnJTZWxlY3Rpb25JbmRleF8gPSAtMTsKLSAgICAgIGVkaXRSb3dfID0gLTE7Ci0gICAgICBlZGl0Q29sdW1uXyA9IC0xOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2soTW91c2VFdmVudCBlKQotICAgIHsKLSAgICAgIG1vdXNlRG93bihlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtb3VzZURvd24oTW91c2VFdmVudCBlKQotICAgIHsKLSAgICAgIC8vIHJlZnJlc2ggdGFibGUKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgdGV4dCBlZGl0b3IgY29udHJvbAotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICAvLyB1cGRhdGUgdGFibGUKLSAgICAgIGlmICh0YWJsZV8uaXNGb2N1c0NvbnRyb2woKSkKLSAgICAgIHsKLSAgICAgICAgaW50IHNlbGVjdGVkUm93SW5kZXggPSBnZXRTZWxlY3RlZFJvdyh0YWJsZV8sIGUueSk7Ci0gICAgICAgIGlmIChjdXJyU2VsZWN0aW9uSW5kZXhfICE9IC0xICYmIHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY3VyclNlbGVjdGlvbkluZGV4XyA9PSBzZWxlY3RlZFJvd0luZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgVGFibGVJdGVtIHRhYmxlSXRlbSA9IHRhYmxlXy5nZXRJdGVtKHNlbGVjdGVkUm93SW5kZXgpOwotICAgICAgICAgIGludCBzZWxlY3RlZENvbHVtbkluZGV4ID0gZ2V0U2VsZWN0ZWRDb2x1bW4odGFibGVJdGVtLCBlLngsIGUueSk7Ci0gICAgICAgICAgaWYgKHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gLTEgJiYgKHRleHRfID09IG51bGwgfHwgdGV4dF8uaXNEaXNwb3NlZCgpIHx8IHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gZWRpdG9yXy5nZXRDb2x1bW4oKSkpCi0gICAgICAgICAgICBlZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIHNlbGVjdGVkQ29sdW1uSW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJTZWxlY3Rpb25JbmRleF8gPSBzZWxlY3RlZFJvd0luZGV4OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlVXAoTW91c2VFdmVudCBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRTZWxlY3RlZFJvdyhUYWJsZSB0YWJsZSwgaW50IHkpCi0gICAgewotICAgICAgVGFibGVJdGVtW10gdGFibGVJdGVtcyA9IHRhYmxlLmdldEl0ZW1zKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhYmxlSXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSByZWN0YW5nbGUgPSB0YWJsZUl0ZW1zW2ldLmdldEJvdW5kcygwKTsKLSAgICAgICAgaWYgKHJlY3RhbmdsZSAhPSBudWxsICYmIHkgPj0gcmVjdGFuZ2xlLnkgJiYgeSA8IChyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpKQotICAgICAgICAgIHJldHVybiBpOwotICAgICAgfQotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldFNlbGVjdGVkQ29sdW1uKFRhYmxlSXRlbSB0YWJsZUl0ZW0sIGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnNfLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAodGFibGVJdGVtLmdldEJvdW5kcyhpKS5jb250YWlucyh4LCB5KSkKLSAgICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZWRpdFNlbGVjdGlvbihpbnQgcm93LCBpbnQgY29sdW1uKQotICAgIHsKLSAgICAgIGVkaXRSb3dfID0gcm93OwotICAgICAgZWRpdENvbHVtbl8gPSBjb2x1bW47Ci0gICAgICBUYWJsZUl0ZW0gdGFibGVJdGVtID0gdGFibGVfLmdldEl0ZW0ocm93KTsKLSAgICAgIC8vIFNldHVwIGFkYXB0ZXIgZm9yIHRoZSBuZXcgc2VsZWN0aW9uCi0gICAgICB0ZXh0XyA9IG5ldyBUZXh0KHRhYmxlXywgU1dULk5PTkUpOwotICAgICAgU3RyaW5nIHRleHQgPSB0YWJsZUl0ZW0uZ2V0VGV4dChjb2x1bW4pOwotICAgICAgdGV4dF8uc2V0VGV4dCgodGV4dCAhPSBudWxsKSA/IHRleHQgOiAiIik7Ci0gICAgICB0ZXh0Xy5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEVzYwotICAgICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAyNykKLSAgICAgICAgICAgICAgY2FuY2VsU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKTsKLSAgICAgIHRleHRfLmFkZFRyYXZlcnNlTGlzdGVuZXIobmV3IFRyYXZlcnNlTGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQga2V5VHJhdmVyc2VkKFRyYXZlcnNlRXZlbnQgZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1RBQl9ORVhUKQotICAgICAgICAgICAgICB0cmF2ZXJzZVRhYk5leHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9UQUJfUFJFVklPVVMpCi0gICAgICAgICAgICAgIHRyYXZlcnNlVGFiUHJldmlvdXMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICk7Ci0gICAgICBlZGl0b3JfLnNldEVkaXRvcih0ZXh0XywgdGFibGVJdGVtLCBjb2x1bW4pOwotICAgICAgdGV4dF8uc2V0Rm9jdXMoKTsKLSAgICAgIHRleHRfLnNlbGVjdEFsbCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVGFiTmV4dCgpCi0gICAgewotICAgICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICAgIGlmICghKGVkaXRSb3dfID09IHRhYmxlXy5nZXRJdGVtcygpLmxlbmd0aC0xICYmIGVkaXRDb2x1bW5fID09IGNvbHVtbnNfLmxlbmd0aC0xKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVkaXRDb2x1bW5fIDwgY29sdW1uc18ubGVuZ3RoLTEpCi0gICAgICAgICAgZWRpdENvbHVtbl8rKzsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZWRpdENvbHVtbl8gPSAwOwotICAgICAgICAgIGVkaXRSb3dfKys7Ci0gICAgICAgICAgdGFibGVfLnNlbGVjdChlZGl0Um93Xyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWRpdFNlbGVjdGlvbihlZGl0Um93XywgZWRpdENvbHVtbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVGFiUHJldmlvdXMoKQotICAgIHsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpZiAoIShlZGl0Um93XyA9PSAwICYmIGVkaXRDb2x1bW5fID09IDApKQotICAgICAgewotICAgICAgICBpZiAoZWRpdENvbHVtbl8gPiAwKQotICAgICAgICAgIGVkaXRDb2x1bW5fLS07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVkaXRDb2x1bW5fID0gY29sdW1uc18ubGVuZ3RoLTE7Ci0gICAgICAgICAgZWRpdFJvd18tLTsKLSAgICAgICAgICB0YWJsZV8uc2VsZWN0KGVkaXRSb3dfKTsKLSAgICAgICAgfQotICAgICAgICBlZGl0U2VsZWN0aW9uKGVkaXRSb3dfLCBlZGl0Q29sdW1uXyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGVkaXRTZWxlY3Rpb24oKQotICAgIHsKLSAgICAgIGludCBzZWxlY3RlZFJvd0luZGV4ID0gdGFibGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoc2VsZWN0ZWRSb3dJbmRleCAhPSAtMSAmJiBjb2x1bW5zXy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICAvLyByZWZyZXNoIHRhYmxlCi0gICAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgICAvLyBDbGVhbiB1cCBhbnkgcHJldmlvdXMgZWRpdG9yIGNvbnRyb2wKLSAgICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICAgIGVkaXRTZWxlY3Rpb24oc2VsZWN0ZWRSb3dJbmRleCwgMCk7Ci0gICAgICB9Ci0gICAgICBjdXJyU2VsZWN0aW9uSW5kZXhfID0gc2VsZWN0ZWRSb3dJbmRleDsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdENvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotICAgIHsKLSAgICAgIHRhYmxlVmlld2VyXy5hZGQoZ2V0RWxlbWVudHMobmV3SW5wdXQpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgTGlzdCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gKExpc3QpaW5wdXRFbGVtZW50OwotICAgICAgICBPYmplY3RbXSBvYmplY3RzID0gbmV3IE9iamVjdFtsaXN0LnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBvYmplY3RzW2ldID0gbGlzdC5nZXQoaSk7Ci0gICAgICAgIHJldHVybiBvYmplY3RzOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IE9iamVjdFswXTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLSAgICB7Ci0gICAgICByZXR1cm4gZWxlbWVudC50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9VdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYjQ5ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgVXRpbHMKLXsKLSAgcHVibGljIFV0aWxzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b0ZpbGVTeXN0ZW1VUkkoU3RyaW5nIHJlbGF0aXZlUGxhdGZvcm1VUkkpCi0gIHsKLSAgICBpZiAocmVsYXRpdmVQbGF0Zm9ybVVSSSAhPSBudWxsKQotICAgICAgcmV0dXJuIHRvRmlsZVN5c3RlbVVSSShSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShyZWxhdGl2ZVBsYXRmb3JtVVJJKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvRmlsZVN5c3RlbVVSSShJUmVzb3VyY2UgcmVzKQotICB7Ci0gICAgaWYgKHJlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElQYXRoIHBhdGggPSByZXMuZ2V0TG9jYXRpb24oKTsKLSAgICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBhdGgudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NsaWVudFJ1bnRpbWVEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50UnVudGltZURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiMDkxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50UnVudGltZURlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDcgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRSdW50aW1lRGVzY3JpcHRvcgotewotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtOwotICBwcml2YXRlIEhhc2h0YWJsZSBhbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHM7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGFsbFJ1bnRpbWVzOwotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50SW1wbCBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIHByaXZhdGUgUnVudGltZURlc2NyaXB0b3IgcnVudGltZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UnVudGltZUNsYXNzTmFtZTsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZVJ1bnRpbWUgd2ViU2VydmljZVJ1bnRpbWU7Ci0gIHByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnM7Ci0gIHByaXZhdGUgU2V0IHByb2plY3RGYWNldFZlcnNpb25zOwotICBwcml2YXRlIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgd2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotICBwcml2YXRlIFN0cmluZyBydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZTsKLSAgCi0gIHB1YmxpYyBDbGllbnRSdW50aW1lRGVzY3JpcHRvcihJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSwgSGFzaHRhYmxlIGFsbFdlYlNlcnZpY2VDbGllbnRJbXBscywgSGFzaHRhYmxlIGFsbFJ1bnRpbWVzKQotICB7Ci0gICAgdGhpcy5lbGVtID0gZWxlbTsKLSAgICB0aGlzLmFsbFdlYlNlcnZpY2VDbGllbnRJbXBscyA9IGFsbFdlYlNlcnZpY2VDbGllbnRJbXBsczsKLSAgICB0aGlzLmFsbFJ1bnRpbWVzID0gYWxsUnVudGltZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50SW1wbCBnZXRDbGllbnRJbXBsZW1lbnRhdGlvblR5cGUoKQotICB7Ci0gICAgaWYgKGNsaWVudEltcGxlbWVudGF0aW9uVHlwZSA9PSBudWxsKQotICAgIHsKLSAgICAgU3RyaW5nIGNsaWVudEltcGxlbWVudGF0aW9uVHlwZUlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoImNsaWVudEltcGxlbWVudGF0aW9uVHlwZUlkIik7Ci0gICAgIGNsaWVudEltcGxlbWVudGF0aW9uVHlwZSA9IChXZWJTZXJ2aWNlQ2xpZW50SW1wbClhbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHMuZ2V0KGNsaWVudEltcGxlbWVudGF0aW9uVHlwZUlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsaWVudEltcGxlbWVudGF0aW9uVHlwZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lQ2xhc3NOYW1lKCkKLSAgewotICAgIGlmIChjbGllbnRSdW50aW1lQ2xhc3NOYW1lID09IG51bGwpCi0gICAgewotICAgICAgY2xpZW50UnVudGltZUNsYXNzTmFtZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwotICAgIH0KLSAgICByZXR1cm4gY2xpZW50UnVudGltZUNsYXNzTmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICBwdWJsaWMgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKQotICB7Ci0gICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIEFycmF5TGlzdCByZXF1aXJlZEZhY2V0VmVyc2lvbkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBmYWNldEVsZW1zID0gZWxlbS5nZXRDaGlsZHJlbigicmVxdWlyZWQtZmFjZXQtdmVyc2lvbiIpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYWNldEVsZW1zLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb24oKTsKLSAgICAgICAgSVByb2plY3RGYWNldCBwcm9qZWN0RmFjZXQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoImZhY2V0IikpOyAgICAgICAgCi0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHByb2plY3RGYWNldFZlcnNpb24gPSBwcm9qZWN0RmFjZXQuZ2V0VmVyc2lvbihmYWNldEVsZW1zW2ldLmdldEF0dHJpYnV0ZSgidmVyc2lvbiIpKTsKLSAgICAgICAgcmZ2LnNldFByb2plY3RGYWNldFZlcnNpb24ocHJvamVjdEZhY2V0VmVyc2lvbik7Ci0gICAgICAgIFN0cmluZyBhbGxvd05ld2VyVmFsdWUgPSBmYWNldEVsZW1zW2ldLmdldEF0dHJpYnV0ZSgiYWxsb3ctbmV3ZXIiKTsKLSAgICAgICAgaWYgKGFsbG93TmV3ZXJWYWx1ZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmZ2LnNldEFsbG93TmV3ZXIoZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJmdi5zZXRBbGxvd05ld2VyKEJvb2xlYW4udmFsdWVPZihhbGxvd05ld2VyVmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVxdWlyZWRGYWNldFZlcnNpb25MaXN0LmFkZChyZnYpOwotICAgICAgfQotICAgICAgCi0gICAgICByZXF1aXJlZEZhY2V0VmVyc2lvbnMgPSAoUmVxdWlyZWRGYWNldFZlcnNpb25bXSlyZXF1aXJlZEZhY2V0VmVyc2lvbkxpc3QudG9BcnJheShuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bXXt9KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLSAgfQotICAKLSAgcHVibGljIFNldCBnZXRQcm9qZWN0RmFjZXRWZXJzaW9ucygpCi0gIHsKLSAgICBpZiAocHJvamVjdEZhY2V0VmVyc2lvbnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgIHByb2plY3RGYWNldFZlcnNpb25zID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgZm9yIChpbnQgaT0wOyBpPHJmdi5sZW5ndGg7IGkrKykKLSAgICAgewotICAgICAgIHByb2plY3RGYWNldFZlcnNpb25zLmFkZChyZnZbaV0uZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpKTsKLSAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcHJvamVjdEZhY2V0VmVyc2lvbnM7ICAgIAotICB9ICAKLSAgCi0gIHB1YmxpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lKCkKLSAgewotICAgIGlmIChydW50aW1lID09IG51bGwpCi0gICAgewotICAgICBTdHJpbmcgcnVudGltZUlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVJZCIpOwotICAgICBydW50aW1lID0gKFJ1bnRpbWVEZXNjcmlwdG9yKWFsbFJ1bnRpbWVzLmdldChydW50aW1lSWQpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIHJ1bnRpbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2ViU2VydmljZVJ1bnRpbWUgZ2V0V2ViU2VydmljZVJ1bnRpbWUoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VSdW50aW1lID09IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgd2ViU2VydmljZVJ1bnRpbWUgPSAoSVdlYlNlcnZpY2VSdW50aW1lKWVsZW0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd2ViU2VydmljZVJ1bnRpbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGdldENsaWVudFJ1bnRpbWVDaGVja2VyKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgIAlpZiAoZWxlbS5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVDaGVja2VyIikgIT0gbnVsbCApIHsKLSAgICAgICAgCQl3ZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgPSAoSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcillbGVtLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oInJ1bnRpbWVDaGVja2VyIik7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUoKQotICB7Ci0gICAgaWYgKHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlID09IG51bGwpCi0gICAgewotICAgIAlydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSIpOwotICAgIH0KLSAgICByZXR1cm4gcnVudGltZVByZWZlcnJlZFNlcnZlclR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9DbGllbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2M0YjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9DbGllbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotcHVibGljIGNsYXNzIENsaWVudFR5cGUgewotCi0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fOwotICBwcml2YXRlIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfOwotICAgIAotCXByaXZhdGUgU3RyaW5nIGlkOwotCXByaXZhdGUgV2ViU2VydmljZUNsaWVudEltcGwgd2ViU2VydmljZUNsaWVudEltcGw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBtb2R1bGVUeXBlc0luY2x1ZGU7Ci0gIHByaXZhdGUgU3RyaW5nW10gbW9kdWxlVHlwZXNFeGNsdWRlOwotCQotICAKLSAgCi0JcHVibGljIENsaWVudFR5cGUoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fLCBIYXNodGFibGUgd2ViU2VydmljZUNsaWVudEltcGxzXykKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgdGhpcy5lbGVtXyA9IGVsZW1fOwotICAgIHRoaXMud2ViU2VydmljZUNsaWVudEltcGxzXyA9IHdlYlNlcnZpY2VDbGllbnRJbXBsc187Ci0gIH0KLQotCi0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQ9PW51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLQotCi0KLSAgcHVibGljIFN0cmluZ1tdIGdldE1vZHVsZVR5cGVzRXhjbHVkZSgpCi0gIHsKLSAgICBpZiAobW9kdWxlVHlwZXNFeGNsdWRlPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJtb2R1bGVUeXBlc0V4Y2x1ZGUiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgbW9kdWxlVHlwZXNFeGNsdWRlID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb2R1bGVUeXBlc0V4Y2x1ZGUubGVuZ3RoOyBpKyspCi0gICAgICAgICAgbW9kdWxlVHlwZXNFeGNsdWRlW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIH0KLSAgCi0KLQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRNb2R1bGVUeXBlc0luY2x1ZGUoKQotICB7Ci0gICAgaWYgKG1vZHVsZVR5cGVzSW5jbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgibW9kdWxlVHlwZXNJbmNsdWRlIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIG1vZHVsZVR5cGVzSW5jbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kdWxlVHlwZXNJbmNsdWRlLmxlbmd0aDsgaSsrKQotICAgICAgICAgIG1vZHVsZVR5cGVzSW5jbHVkZVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotCi0KLQotICBwdWJsaWMgV2ViU2VydmljZUNsaWVudEltcGwgZ2V0V2ViU2VydmljZUNsaWVudEltcGwoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VDbGllbnRJbXBsPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB3c2NpbXBsSWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImltcGxJZCIpOwotICAgICAgd2ViU2VydmljZUNsaWVudEltcGwgPSAoV2ViU2VydmljZUNsaWVudEltcGwpd2ViU2VydmljZUNsaWVudEltcGxzXy5nZXQod3NjaW1wbElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRJbXBsOwotICB9Ci0gIAotCi0KLSAgLyoKLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlQ2xpZW50VHlwZUlkKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkPT1udWxsKQotICAgIHsKLSAgICAgIHdlYlNlcnZpY2VDbGllbnRUeXBlSWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoIndlYlNlcnZpY2VDbGllbnRUeXBlSWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRUeXBlSWQ7Ci0gIH0KLSAgKi8KLQotCi0JCi0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0YTZlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICogQGF1dGhvciByc2luaGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHQgewkKLQlwcml2YXRlIFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbzsKLQlwcml2YXRlIGJvb2xlYW4gZGV2ZWxvcDsKLQlwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGU7Ci0JcHJpdmF0ZSBib29sZWFuIGRlcGxveTsKLQlwcml2YXRlIGJvb2xlYW4gaW5zdGFsbDsKLQlwcml2YXRlIGJvb2xlYW4gcnVuOwotCXByaXZhdGUgYm9vbGVhbiBjbGllbnQ7Ci0JcHJpdmF0ZSBib29sZWFuIHRlc3Q7Ci0JcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2g7Ci0JcHJpdmF0ZSBib29sZWFuIG92ZXJXcml0ZUZpbGVzOwotCXByaXZhdGUgYm9vbGVhbiBjcmVhdGVGb2xkZXJzOwotCXByaXZhdGUgYm9vbGVhbiBjaGVja091dEZpbGVzOwotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlKCkgewotCQlyZXR1cm4gYXNzZW1ibGU7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldENoZWNrT3V0RmlsZXMoKSB7Ci0JCXJldHVybiBjaGVja091dEZpbGVzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnQoKSB7Ci0JCXJldHVybiBjbGllbnQ7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldENyZWF0ZUZvbGRlcnMoKSB7Ci0JCXJldHVybiBjcmVhdGVGb2xkZXJzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3koKSB7Ci0JCXJldHVybiBkZXBsb3k7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3AoKSB7Ci0JCXJldHVybiBkZXZlbG9wOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsKCkgewotCQlyZXR1cm4gaW5zdGFsbDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0T3ZlcldyaXRlRmlsZXMoKSB7Ci0JCXJldHVybiBvdmVyV3JpdGVGaWxlczsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaCgpIHsKLQkJcmV0dXJuIHB1Ymxpc2g7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldFJ1bigpIHsKLQkJcmV0dXJuIHJ1bjsKLQl9Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsKLQkJcmV0dXJuIHNjZW5hcmlvOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0KCkgewotCQlyZXR1cm4gdGVzdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZShib29sZWFuIGFzc2VtYmxlKSB7Ci0JCXRoaXMuYXNzZW1ibGUgPSBhc3NlbWJsZTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRDaGVja091dEZpbGVzKGJvb2xlYW4gY2hlY2tPdXRGaWxlcykgewotCQl0aGlzLmNoZWNrT3V0RmlsZXMgPSBjaGVja091dEZpbGVzOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldENsaWVudChib29sZWFuIGNsaWVudCkgewotCQl0aGlzLmNsaWVudCA9IGNsaWVudDsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRDcmVhdGVGb2xkZXJzKGJvb2xlYW4gY3JlYXRlRm9sZGVycykgewotCQl0aGlzLmNyZWF0ZUZvbGRlcnMgPSBjcmVhdGVGb2xkZXJzOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldERlcGxveShib29sZWFuIGRlcGxveSkgewotCQl0aGlzLmRlcGxveSA9IGRlcGxveTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wKGJvb2xlYW4gZGV2ZWxvcCkgewotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldEluc3RhbGwoYm9vbGVhbiBpbnN0YWxsKSB7Ci0JCXRoaXMuaW5zdGFsbCA9IGluc3RhbGw7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0T3ZlcldyaXRlRmlsZXMoYm9vbGVhbiBvdmVyV3JpdGVGaWxlcykgewotCQl0aGlzLm92ZXJXcml0ZUZpbGVzID0gb3ZlcldyaXRlRmlsZXM7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0UHVibGlzaChib29sZWFuIHB1Ymxpc2gpIHsKLQkJdGhpcy5wdWJsaXNoID0gcHVibGlzaDsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRSdW4oYm9vbGVhbiBydW4pIHsKLQkJdGhpcy5ydW4gPSBydW47Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0U2NlbmFyaW8oV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvKSB7Ci0JCXRoaXMuc2NlbmFyaW8gPSBzY2VuYXJpbzsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0KGJvb2xlYW4gdGVzdCkgewotCQl0aGlzLnRlc3QgPSB0ZXN0OwotCX0JCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0ZhY2V0TWF0Y2hDYWNoZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0ZhY2V0TWF0Y2hDYWNoZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjQzMTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9GYWNldE1hdGNoQ2FjaGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgICAxMjEwNzEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyIChpbml0aWFsIGNyZWF0aW9uKQotICogMjAwNjA0MjYgICAxMzgwNTEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI3ICAgMTI2NzgwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwODA5MjMgICAyNDc1MjUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBjYWNoZSBub3QgdXBkYXRlZCBwcm9wZXJseSB3aGVuIHByb2plY3QgZmFjZXQgdmVyc2lvbnMgY2hhbmdlZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldE1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFNldHNCeVRlbXBsYXRlQ2FjaGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZTsKLQotLyoqCi0gKiBGYWNldE1hdGNoQ2FjaGUgY2FjaGVzIHJlc3VsdHMgb2YgY2FsY3VsYXRpb25zIG1hZGUgcmVzcGVjdGluZwotICogdGhlIHN1aXRhYmlsaXR5IG9mIHByb2plY3RzIGFuZCBwcm9qZWN0IHR5cGVzIGZvciBzZXJ2aWNlUnVudGltZXMKLSAqIGFuZCBjbGllbnRSdW50aW1lcy4KLSAqIAotICogPGJyLz48YnIvPgotICogVGVybWlub2xvZ3kgdXNlZCBpbiB0aGUgamF2YWRvYyBpbiB0aGlzIGNsYXNzOgotICogPHVsPgotICogPGxpPjxiPnNlcnZpY2VSdW50aW1lPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjwvbGk+Ci0gKiA8bGk+PGI+Y2xpZW50UnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkNsaWVudFJ1bnRpbWVEZXNjcmlwdG9yPC9saT4KLSAqIDwvdWw+Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmFjZXRNYXRjaENhY2hlIGltcGxlbWVudHMgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIKLXsKLSAgLy9zaW5nbGUgaW5zdGFuY2UgcGVyIHdvcmtiZW5jaAotICBwcml2YXRlIHN0YXRpYyBGYWNldE1hdGNoQ2FjaGUgaW5zdGFuY2VfOwotICAKLSAgCi0gIC8vVGFibGVzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZQotICAKLSAgLy9zZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBGb3J3YXJkIHNsYXNoIHNlcGFyYXRlZCBjb25jYXRlbmF0aW9uIG9mIGEgc2VydmljZVJ1bnRpbWVJZCBhbmQgYSBwcm9qZWN0TmFtZSAKLSAgLy8gICAgIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmphdmEvd3ApLgotICAvL3ZhbHVlOiBPYmplY3Qgb2YgdHlwZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlci4KLSAgLy8gICAgICAgVGhlIEZhY2V0TWF0Y2hlciBjb250YWlucyB0aGUgbWF0Y2hpbmcgY2hhcmFjdGVyaXN0aWNzIGNhbGN1bGF0ZWQgZm9yIHRoZSAKLSAgLy8gICAgICAgc2VydmljZVJ1bnRpbWUgYW5kIHByb2plY3QgaW4gdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV87Ci0gIAotICAvL3NlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBwcm9qZWN0IG5hbWUgKGUuZy4gd3ApCi0gIC8vdmFsdWU6IFNldCBvZiBlbGVtZW50cyBvZiB0eXBlIFN0cmluZy4gVGhlIFN0cmluZ3MgaW4gdGhlIFNldCBhcmUga2V5cyBmcm9tIHRoZSBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXyAKLSAgLy8gICAgICAgdGhhdCBjb250YWluIHRoZSBwcm9qZWN0IG5hbWUgKGUuZy4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YS93cCkuIFVzZWQgdG8gcmFwaWRseQotICAvLyAgICAgICBkZWxldGUgZW50cmllcyBmcm9tIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfIGFmdGVyIGEgcHJvamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHdvcmtzcGFjZS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfOwotICAKLSAgLy9jbGllbnRGYWNldE1hdGNoVGFibGVfOwotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLgotICAvLyAgICAgZm9yd2FyZCBzbGFzaCBzZXBhcmF0ZWQgY29uY2F0ZW5hdGlvbiBvZiBhIGNsaWVudFJ1bnRpbWVJZCBhbmQgYSBwcm9qZWN0TmFtZSAKLSAgLy8gICAgIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEvd3ApCi0gIC8vdmFsdWU6IE9iamVjdCBvZiB0eXBlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyCi0gIC8vICAgICAgIFRoZSBGYWNldE1hdGNoZXIgY29udGFpbnMgdGhlIG1hdGNoaW5nIGNoYXJhY3RlcmlzdGljcyBjYWxjdWxhdGVkIGZvciB0aGUgCi0gIC8vICAgICAgIGNsaWVudFJ1bnRpbWUgYW5kIHByb2plY3QgaW4gdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2xpZW50RmFjZXRNYXRjaFRhYmxlXzsKLSAgCi0gIC8vY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8KLSAgLy9rZXk6IE9iamVjdCBvZiB0eXBlIFN0cmluZy4KLSAgLy8gICAgIHByb2plY3QgbmFtZSAoZS5nLiB3cCkKLSAgLy92YWx1ZTogU2V0IG9mIGVsZW1lbnRzIG9mIHR5cGUgU3RyaW5nLiBUaGUgU3RyaW5ncyBpbiB0aGUgU2V0IGFyZSBrZXlzIGZyb20gdGhlIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gCi0gIC8vICAgICAgIHRoYXQgY29udGFpbiB0aGUgcHJvamVjdCBuYW1lIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEvd3ApLiBVc2VkIHRvIHJhcGlkbHkKLSAgLy8gICAgICAgZGVsZXRlIGVudHJpZXMgZnJvbSBjbGllbnRGYWNldE1hdGNoVGFibGVfIGFmdGVyIGEgcHJvamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHdvcmtzcGFjZS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV87Ci0gIAotICAvL3Byb2plY3RFbnRyaWVzVG9EZWxldGVfOiBlbGVtZW50cyBvZiB0eXBlIFN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBwcm9qZWN0cyB0aGF0IGhhdmUKLSAgLy9iZWVuIGRlbGV0ZWQgZnJvbSB0aGUgd29ya3NwYWNlIGJ1dCB0aGVpciBjb3JyZXNwb25kaW5nIGVudHJpZXMgZnJvbSBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXyAKLSAgLy9hbmQgY2xpZW50RmFjZXRNYXRjaFRhYmxlXyBoYXZlIHlldCB0byBiZSBkZWxldGVkLgotICBwcml2YXRlIExpc3QgcHJvamVjdEVudHJpZXNUb0RlbGV0ZV87Ci0gICAgCi0gIAotICAKLSAgLy9UYWJsZXMgcmVsYXRlZCB0byB0ZW1wbGF0ZXMgIAotICAKLSAgLy90ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfOgotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLgotICAvLyAgICAgc2VydmljZVJ1bnRpbWUgaWQKLSAgLy92YWx1ZTogU2V0IG9mIGVsZW1lbnRzIG9mIHR5cGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgICAKLSAgLy8gICAgICAgVGhpcyB0aGUgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IHN1cHBvcnQgdGhlIHNlcnZpY2VSdW50aW1lIGlkZW50aWZpZWQgYnkgdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgdGVtcGxhdGVzQnlTZXJ2aWNlUnVudGltZUlkXzsKLSAgCi0gIC8vdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBjbGllbnRSdW50aW1lIGlkCi0gIC8vdmFsdWU6IFNldCBvZiBlbGVtZW50cyBvZiB0eXBlIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlCi0gIC8vICAgICAgIFRoaXMgdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBzdXBwb3J0IHRoZSBjbGllbnRSdW50aW1lIGlkZW50aWZpZWQgYnkgdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfOwotICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIEZhY2V0TWF0Y2hDYWNoZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBGYWNldE1hdGNoQ2FjaGUgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBGYWNldE1hdGNoQ2FjaGUoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7ICAgIAotICAgIGNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHByb2plY3RFbnRyaWVzVG9EZWxldGVfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHRlbXBsYXRlc0J5Q2xpZW50UnVudGltZUlkXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIC8vTGlzdGVuIGZvciBkZWxldGlvbnMgb2YgcHJvamVjdHMgaW4gb3JkZXIgdG8gZGVsZXRlIGFsbCBlbnRyaWVzIGluCi0gICAgLy9IYXNodGFibGVzIGZvciB0aGUgZGVsZXRlZCBwcm9qZWN0LgotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHRoaXMsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBSRV9ERUxFVEUpOwotICB9Ci0gIAotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIEZhY2V0TWF0Y2hlciByZXN1bHRpbmcgZnJvbSBtYXRjaGluZyBhIHNlcnZpY2VSdW50aW1lIG9yIGNsaWVudFJ1bnRpbWUgd2l0aCBhbiBleGlzdGluZyBwcm9qZWN0LgotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSBpZiBydW50aW1lSWQgaXMgYSBjbGllbnRSdW50aW1lSWQuIGZhbHNlIGlmIHJ1bnRpbWVJZCBpcyBhIHNlcnZpY2VSdW50aW1lSWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgdGhlIGlkIG9mIGEgY2xpZW50UnVudGltZSBpZiBpc0NsaWVudCBpcyB0cnVlIG9yIHRoZSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIGlmCi0gICAqIGlzQ2xpZW50IGlzIGZhbHNlLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogCi0gICAqIEByZXR1cm5zIEZhY2V0TWF0Y2hlciByZXN1bHRpbmcgZnJvbSBjYWxsaW5nIEZhY2V0VXRpbHMubWF0Y2goLi4pIHVzaW5nIHRoZSBzZXJ2aWNlUnVudGltZSBvciBjbGllbnRSdW50aW1lIGlkCi0gICAqIGFuZCB0aGUgcHJvamVjdCBuYW1lLiBSZXR1cm5zIG51bGwgaWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdC4gTm9uLWZhY2V0ZWQgZXhpc3RpbmcgcHJvamVjdHMgd2lsbCBhbHdheXMgcmVzdWx0Ci0gICAqIGluIGEgRmFjZXRNYXRjaGVyIHdpdGggaXNNYXRjaCgpIGVxdWFsIHRvIGZhbHNlICh3aXRoIHRoZSBleGNlcHRpb24gb2YgSmF2YSBwcm9qZWN0cyB3aGljaCBhcmUgYSBzcGVjaWFsIGNhc2UgCi0gICAqIC0gc2VlIEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdCgpKS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgRmFjZXRNYXRjaGVyIGdldE1hdGNoRm9yUHJvamVjdChib29sZWFuIGlzQ2xpZW50LCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsgICAgCi0gICAgLy9EZWxldGUgZW50cmllcyBmcm9tIHRhYmxlcyBpZiB0aGVyZSBhcmUgZGVsZXRpb25zIHBlbmRpbmcuCi0gICAgaWYgKHByb2plY3RFbnRyaWVzVG9EZWxldGVfLnNpemUoKSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgcHJvamVjdEl0ciA9IHByb2plY3RFbnRyaWVzVG9EZWxldGVfLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShwcm9qZWN0SXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lVG9EZWxldGUgPSAoU3RyaW5nKXByb2plY3RJdHIubmV4dCgpOwotICAgICAgIAotICAgICAgICAvL0RlbGV0ZSBlbnRyaWVzIGZyb20gY2xpZW50IHRhYmxlCi0gICAgICAgIHJlbW92ZVRhYmxlRW50cmllc0ZvclByb2plY3QodHJ1ZSwgcHJvamVjdE5hbWVUb0RlbGV0ZSk7Ci0gICAgICAgIAotICAgICAgICAvL0RlbGV0ZSBlbnRyaWVzIGZyb20gc2VydmljZSB0YWJsZQotICAgICAgICByZW1vdmVUYWJsZUVudHJpZXNGb3JQcm9qZWN0KGZhbHNlLCBwcm9qZWN0TmFtZVRvRGVsZXRlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9DbGVhciB0aGUgcHJvamVjdEVudHJpZXNUb0RlbGV0ZSBsaXN0Ci0gICAgICBwcm9qZWN0RW50cmllc1RvRGVsZXRlXy5jbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBGYWNldE1hdGNoZXIgZm0gPSBudWxsOwotICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5ID0gZ2V0S2V5KHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOwotICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgewotICAgICAgICBmbSA9IChGYWNldE1hdGNoZXIpIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8uZ2V0KGtleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGZtID0gKEZhY2V0TWF0Y2hlcikgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8uZ2V0KGtleSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmbSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUaGlzIGNvbWJpbmF0aW9uIGhhcyBub3QgeWV0IGJlZW4gY2FsY3VsYXRlZCBhbmQgY2FjaGVkIHNvIGNhbGN1bGF0ZSBpdCBhbmQgY2FjaGUgaXQuICAgICAgICAKLSAgICAgICAgZm0gPSBjYWxjdWxhdGVGYWNldE1hdGNoZXIoaXNDbGllbnQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOyAgICAgICAgIAotICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnB1dChrZXksZm0pOyAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucHV0KGtleSwgZm0pOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVRhYmxlT2ZLZXlzKGlzQ2xpZW50LCBrZXksIHByb2plY3ROYW1lKTsKLSAgICAgICAgCi0gICAgICB9IGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHByb2plY3QncyBmYWNldHMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlCi0gICAgICAgIC8vIGZhY2V0cyB3ZXJlIGNhbGN1bGF0ZWQsIHJlZnJlc2ggdGhlIGZhY2V0TWF0Y2hlci4gICAgICAgIAotICAgICAgICBTZXQgY3VycmVudEZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBTZXQgcHJldmlvdXNGYWNldFZlcnNpb25zID0gZm0uZ2V0RmFjZXRzVGVzdGVkKCk7Ci0gICAgICAgIGlmICghY3VycmVudEZhY2V0VmVyc2lvbnMuZXF1YWxzKHByZXZpb3VzRmFjZXRWZXJzaW9ucykpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3JlY2FsY3VsYXRlIGFuZCBjYWNoZSB0aGUgRmFjZXRNYXRjaGVyCi0gICAgICAgICAgZm0gPSBjYWxjdWxhdGVGYWNldE1hdGNoZXIoaXNDbGllbnQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOwotICAgICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnB1dChrZXksZm0pOyAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucHV0KGtleSwgZm0pOwotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmbTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBVcGRhdGVzIHNlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXyBvciBjbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXyB3aXRoCi0gICAqIHRoZSBwcm92aWRlZCBwcm9qZWN0IG5hbWUgYW5kIGtleS4gVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgZW50cnkgaXMgCi0gICAqIGFkZGVkIHRvIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfIG9yIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8uCi0gICAqIEBwYXJhbSBpc0NsaWVudCB0cnVlIGlmIHJ1bnRpbWVJZCBpcyBhIGNsaWVudFJ1bnRpbWVJZC4gZmFsc2UgaWYgcnVudGltZUlkIGlzIGEgc2VydmljZVJ1bnRpbWVJZC4KLSAgICogQHBhcmFtIGtleSAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lCi0gICAqLwotICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGVPZktleXMoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIGtleSwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU2V0IHNldE9mS2V5c0ZvclByb2plY3ROYW1lID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnQpCi0gICAgewotICAgICAgc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgPSAoU2V0KWNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9IChTZXQpc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vQWRkIGFuIGVudHJ5IGluIHRoZSB0YWJsZSBmb3IgdGhpcyBwcm9qZWN0LgotICAgICAgU2V0IGtleXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAga2V5cy5hZGQoa2V5KTsKLSAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgIHsKLSAgICAgICAgY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8ucHV0KHByb2plY3ROYW1lLCBrZXlzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnB1dChwcm9qZWN0TmFtZSwga2V5cyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1VwZGF0ZSB0aGUgZW50cnkgaW4gdGhlIHRhYmxlIGZvciB0aGlzIHByb2plY3QuCi0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZS5hZGQoa2V5KTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgRmFjZXRNYXRjaGVyfSBjYWxjdWxhdGVkIGZvciB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUgb3IgY2xpZW50UnVudGltZSBhbmQgcHJvamVjdAotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSBpZiBydW50aW1lSWQgaXMgYSBjbGllbnRSdW50aW1lSWQuIGZhbHNlIGlmIHJ1bnRpbWVJZCBpcyBhIHNlcnZpY2VSdW50aW1lSWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgdGhlIGlkIG9mIGEgY2xpZW50UnVudGltZSBpZiBpc0NsaWVudCBpcyB0cnVlIG9yIHRoZSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIGlmCi0gICAqIGlzQ2xpZW50IGlzIGZhbHNlLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogQHJldHVybiBGYWNldE1hdGNoZXIgcmVzdWx0aW5nIGZyb20gY2FsbGluZyBGYWNldFV0aWxzLm1hdGNoKC4uKSB1c2luZyB0aGUgc2VydmljZVJ1bnRpbWUgb3IgY2xpZW50UnVudGltZSBpZAotICAgKiBhbmQgdGhlIHByb2plY3QgbmFtZS4gUmV0dXJucyBudWxsIGlmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QuIE5vbi1mYWNldGVkIGV4aXN0aW5nIHByb2plY3RzIHdpbGwgYWx3YXlzIHJlc3VsdAotICAgKiBpbiBhIEZhY2V0TWF0Y2hlciB3aXRoIGlzTWF0Y2goKSBlcXVhbCB0byBmYWxzZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIEphdmEgcHJvamVjdHMgd2hpY2ggYXJlIGEgc3BlY2lhbCBjYXNlIAotICAgKiAtIHNlZSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QoKSkuCi0gICAqLwotICBwcml2YXRlIEZhY2V0TWF0Y2hlciBjYWxjdWxhdGVGYWNldE1hdGNoZXIoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gbnVsbDsKLSAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMgPSBudWxsOwotICAgIGlmIChpc0NsaWVudCkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChydW50aW1lSWQpOwotICAgICAgcmZ2cyA9IGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgfQotICAgIAotICAgIFNldCBmYWNldFZlcnNpb25zID0gbmV3IEhhc2hTZXQoRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3ROYW1lKSk7Ci0gICAgaWYgKGZhY2V0VmVyc2lvbnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmbSA9IG5ldyBGYWNldE1hdGNoZXIoKTsKLSAgICAgIGZtLnNldE1hdGNoKGZhbHNlKTsKLSAgICAgIHJldHVybiBmbTsKLSAgICB9ICAgIAotICAgIAotICAgIGZtID0gRmFjZXRVdGlscy5tYXRjaChyZnZzLCBmYWNldFZlcnNpb25zKTsKLSAgICAKLSAgICAvLyBDaGVjayBpZiB0aGUgZmFjZXQgcnVudGltZSByZXF1aXJlZCBieSB0aGUgcmVxdWlyZWQgZmFjZXQgaXMgc3VwcG9ydGVkCi0gICAgLy8gYnkgdGhlIHByb2plY3Qgd2l0aG91dCBjaGFuaW5nIGl0J3MgY3VycmVudCBmYWNldCBydW50aW1lCi0gICAgCi0gICAgSVJ1bnRpbWUgZlByb2plY3RSdW50aW1lID0gRmFjZXRVdGlscy5nZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAoZlByb2plY3RSdW50aW1lICE9IG51bGwpIHsKLSAgICAJU3RyaW5nIGZQcm9qZWN0UnVudGltZU5hbWUgPSBmUHJvamVjdFJ1bnRpbWUuZ2V0TmFtZSgpOwotICAgIAlib29sZWFuIHByb2plY3RTdXBwb3J0UmVxdWlyZWRGYWNldFJ1bnRpbWUgPSBmYWxzZTsKLSAgICAJU2V0IHJ0cyA9IEZhY2V0VXRpbHMuZ2V0UnVudGltZXMocmZ2cyk7Ci0gICAgCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBydHMuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpICYmICFwcm9qZWN0U3VwcG9ydFJlcXVpcmVkRmFjZXRSdW50aW1lOykgewotICAgIAkJSVJ1bnRpbWUgZlJlcXVpcmVkUnVudGltZSA9IChJUnVudGltZSkgaXRlcmF0b3IubmV4dCgpOwotICAgIAkJaWYgKGZSZXF1aXJlZFJ1bnRpbWUgIT0gbnVsbCkgewotICAgIAkJCWlmIChmUmVxdWlyZWRSdW50aW1lLmdldE5hbWUoKS5lcXVhbHMoZlByb2plY3RSdW50aW1lTmFtZSkpIHsKLSAgICAJCQkJcHJvamVjdFN1cHBvcnRSZXF1aXJlZEZhY2V0UnVudGltZSA9IHRydWU7Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAl9Ci0KLSAgICAJLy8gaWYgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBmYWNldCBydW50aW1lLCBzZXQgRmFjZXRNYXRjaCBtYXRjaCB0byBmYWxzZQotICAgIAlpZiAoIXByb2plY3RTdXBwb3J0UmVxdWlyZWRGYWNldFJ1bnRpbWUpIHsKLSAgICAJCWZtLnNldE1hdGNoKGZhbHNlKTsKLSAgICAJfQotICAgIH0KLSAgICByZXR1cm4gZm07Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRLZXkoU3RyaW5nIGEsIFN0cmluZyBiKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGtleXNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGtleXNiLmFwcGVuZChhKTsKLSAgICBrZXlzYi5hcHBlbmQoIi8iKTsKLSAgICBrZXlzYi5hcHBlbmQoYik7ICAgIAotICAgIHJldHVybiBrZXlzYi50b1N0cmluZygpOyAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhbGwgdGFibGUgZW50cmllcyBpbiB0aGlzIGNhY2hlIGZvciB0aGUgZ2l2ZW4gcHJvamVjdAotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSB0byByZW1vdmUgZW50cmllcyBmcm9tIGNsaWVudCBzaWRlIHRhYmxlcy4gZmFsc2UgdG8gcmVtb3ZlIGVudHJpZXMgZnJvbSBzZXJ2aWNlIHNpZGUgdGFibGVzCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZVRhYmxlRW50cmllc0ZvclByb2plY3QoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgLy9GaXJzdCByZW1vdmUgdGhlIGVudHJpZXMgZnJvbSBjbGllbnRGYWNldE1hdGNoVGFibGVfIG9yIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfCi0gICAgLy90aGF0IGhhdmUga2V5cyBjb250YWluaW5nIHRoaXMgcHJvamVjdCBuYW1lLgotICAgIFNldCBzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9IG51bGw7Ci0gICAgaWYgKGlzQ2xpZW50KQotICAgIHsKLSAgICAgIHNldE9mS2V5c0ZvclByb2plY3ROYW1lID0gKFNldCljbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXy5nZXQocHJvamVjdE5hbWUpOyAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgPSAoU2V0KXNlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXy5nZXQocHJvamVjdE5hbWUpOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgIT0gbnVsbCkKLSAgICB7IAotICAgICAgSXRlcmF0b3Iga2V5c0l0ciA9IHNldE9mS2V5c0ZvclByb2plY3ROYW1lLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoa2V5c0l0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXNJdHIubmV4dCgpOwotICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgIHsgCi0gICAgICAgICAgY2xpZW50RmFjZXRNYXRjaFRhYmxlXy5yZW1vdmUoa2V5KTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9TZWNvbmQsIHJlbW92ZSB0aGUgZW50cnkgaW4gY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8gb3Igc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfCi0gICAgICAvL3dpdGggdGhpcyBwcm9qZWN0TmFtZSBhcyB0aGUga2V5LgotICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgewotICAgICAgICBjbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXy5yZW1vdmUocHJvamVjdE5hbWUpOyAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXy5yZW1vdmUocHJvamVjdE5hbWUpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgdGVtcGxhdGVzIHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZQotICAgKiBAcGFyYW0gY2xpZW50UnVudGltZUlkIGlkIG9mIGEgY2xpZW50UnVudGltZQotICAgKiBAcmV0dXJucyBTZXQgKGVsZW1lbnR0eXBlOiBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSkKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgU2V0IGdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkKLSAgewotICAgIFNldCB0ZW1wbGF0ZXMgPSAoU2V0KXRlbXBsYXRlc0J5Q2xpZW50UnVudGltZUlkXy5nZXQoY2xpZW50UnVudGltZUlkKTsKLSAgICBpZiAodGVtcGxhdGVzICE9IG51bGwpCi0gICAgewotICAgICAgLy9SZXR1cm4gdGhlIGNhY2hlZCBzZXQgb2YgdGVtcGxhdGVzLgotICAgICAgcmV0dXJuIHRlbXBsYXRlczsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vQ2FsY3VsYXRlIHRoZSB0ZW1wbGF0ZXMsIGNhY2hlIHRoZW0gZm9yIGxhdGVyIHVzZSwgYW5kIHJldHVybiB0aGVtLgotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWQpOwotICAgICAgU2V0IHZhbGlkVGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfLnB1dChjbGllbnRSdW50aW1lSWQsIHZhbGlkVGVtcGxhdGVzKTsKLSAgICAgIHJldHVybiB2YWxpZFRlbXBsYXRlczsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIHRlbXBsYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lCi0gICAqIEBwYXJhbSBzZXJ2aWNlUnVudGltZUlkIGlkIG9mIGEgc2VydmljZVJ1bnRpbWUKLSAgICogQHJldHVybnMgU2V0IChlbGVtZW50dHlwZTogSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpCi0gICAqLyAgCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgU2V0IGdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKFN0cmluZyBzZXJ2aWNlUnVudGltZUlkKQotICB7Ci0gICAgU2V0IHRlbXBsYXRlcyA9IChTZXQpdGVtcGxhdGVzQnlTZXJ2aWNlUnVudGltZUlkXy5nZXQoc2VydmljZVJ1bnRpbWVJZCk7Ci0gICAgaWYgKHRlbXBsYXRlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vUmV0dXJuIHRoZSBjYWNoZWQgc2V0IG9mIHRlbXBsYXRlcy4KLSAgICAgIHJldHVybiB0ZW1wbGF0ZXM7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0NhbGN1bGF0ZSB0aGUgdGVtcGxhdGVzLCBjYWNoZSB0aGVtIGZvciBsYXRlciB1c2UsIGFuZCByZXR1cm4gdGhlbS4KLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgIFNldCB2YWxpZFRlbXBsYXRlcyA9IGdldFRlbXBsYXRlcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgIHRlbXBsYXRlc0J5U2VydmljZVJ1bnRpbWVJZF8ucHV0KHNlcnZpY2VSdW50aW1lSWQsIHZhbGlkVGVtcGxhdGVzKTsKLSAgICAgIHJldHVybiB2YWxpZFRlbXBsYXRlczsKLSAgICB9Ci0gIH0KLSAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgdGVtcGxhdGVzIHRoYXQgc3VwcG9ydGVkIHRoZSBnaXZlbiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4KLSAgICogQHBhcmFtIHJlcXVpcmVkRmFjZXRWZXJzaW9ucwotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1ldHMgb2YgdHlwZSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LgotICAgKi8KLSAgcHJpdmF0ZSBTZXQgZ2V0VGVtcGxhdGVzKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zKQotICB7Ci0gICAgU2V0IHRlbXBsYXRlcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgCi0gICAgZm9yKCBJdGVyYXRvciBpdHIgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZXMoKS5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgICBmaW5hbCBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSkgaXRyLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZS5nZXRJZCgpOwotICAgICAgICBpZiAodGVtcGxhdGVJZC5pbmRleE9mKCJlYXIiKSA9PSAtMSAmJiB0ZW1wbGF0ZUlkLmluZGV4T2YoIndzdC53ZWIiKSA9PSAtMSkgLy9Eb24ndCBpbmNsdWRlIHRoZSBFQVJzISEKLSAgICAgICAgeyAgICAgICAgICAgCi0gICAgICAgICAgU2V0W10gY29tYmluYXRpb25zID0gRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlLmdldEluc3RhbmNlKCkuZ2V0RmFjZXRWZXJzaW9uQ29tYmluYXRpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb21iaW5hdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRVdGlscy5tYXRjaChyZXF1aXJlZEZhY2V0VmVyc2lvbnMsIGNvbWJpbmF0aW9uc1tpXSk7Ci0gICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL0ZvdW5kIGEgY29tYmluYXRpb24gdGhhdCB3b3JrZWQuIEFkZCB0aGUgdGVtcGxhdGUgdG8gdGhlIGxpc3QgYW5kIG1vdmUgb24uCi0gICAgICAgICAgICAgIHRlbXBsYXRlcy5hZGQodGVtcGxhdGUpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiB0ZW1wbGF0ZXM7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBpZiAoZXZlbnQuZ2V0VHlwZSgpID09IElSZXNvdXJjZUNoYW5nZUV2ZW50LlBSRV9ERUxFVEUpCi0gICAgewotICAgICAgSVJlc291cmNlIHByb2plY3RSZXNvdXJjZSA9IGV2ZW50LmdldFJlc291cmNlKCk7Ci0gICAgICBpZiAocHJvamVjdFJlc291cmNlIT1udWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0UmVzb3VyY2UuZ2V0TmFtZSgpOwotICAgICAgICAKLSAgICAgICAgLy9BZGQgdGhpcyBwcm9qZWN0IG5hbWUgdG8gdGhlIGxpc3Qgb2YgcHJvamVjdCBlbnRyaWVzCi0gICAgICAgIC8vdG8gZGVsZXRlLiBOZXh0IHRpbWUgZ2V0TWF0Y2hGb3JQcm9qZWN0IGlzIGNhbGxlZCBhbGwKLSAgICAgICAgLy9lbnRyaWVzIGZvciB0aGlzIHByb2plY3QgZnJvbSBhbGwgdGFibGVzIGluIHRoaXMgY2FjaGUgCi0gICAgICAgIC8vd2lsbCBiZSBkZWxldGVkLgotICAgICAgICBwcm9qZWN0RW50cmllc1RvRGVsZXRlXy5hZGQocHJvamVjdE5hbWUpOwotICAgICAgfQotICAgIH0gICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1J1bnRpbWVEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvUnVudGltZURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyYmIzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvUnVudGltZURlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVEZXNjcmlwdG9yCi17Ci0KLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbTsKLSAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGxhYmVsOwotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJSZXF1aXJlZFN0cmluZzsKLSAgcHJpdmF0ZSBib29sZWFuIHNlcnZlclJlcXVpcmVkOwotICAKLQotICBwdWJsaWMgUnVudGltZURlc2NyaXB0b3IoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0pCi0gIHsKLSAgICB0aGlzLmVsZW0gPSBlbGVtOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZCA9PSBudWxsKQotICAgIHsKLSAgICAgIGlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpCi0gIHsKLSAgICBpZiAobGFiZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBsYWJlbCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRKMmVlTGV2ZWxzKCkKLSAgewotICAgIHJldHVybiBuZXcgU3RyaW5nW117IjEzIiwgIjE0In07Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFNlcnZlclJlcXVpcmVkKCkKLSAgewotICAgIGlmIChzZXJ2ZXJSZXF1aXJlZFN0cmluZyA9PSBudWxsKQotICAgIHsgICAgIAotICAgICAgLy9EZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBleHRlbnNpb24gb21pdHMgdGhpcyBhdHRyaWJ1dGUKLSAgICAgIHNlcnZlclJlcXVpcmVkID0gdHJ1ZTsKLQotICAgICAgc2VydmVyUmVxdWlyZWRTdHJpbmcgPSBlbGVtLmdldEF0dHJpYnV0ZSgic2VydmVyUmVxdWlyZWQiKTsKLSAgICAgIGlmIChzZXJ2ZXJSZXF1aXJlZFN0cmluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXJ2ZXJSZXF1aXJlZCA9IEJvb2xlYW4udmFsdWVPZihzZXJ2ZXJSZXF1aXJlZFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0gICAgICB9ICAgICAgICAgICAgIAotICAgICAgCi0gICAgfSAgICAKLSAgICByZXR1cm4gc2VydmVyUmVxdWlyZWQ7ICAgIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlbGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzE0NTRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZWxlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb24gaW1wbGVtZW50cyBJU2VsZWN0aW9uIHsKLQotCXByaXZhdGUgT2JqZWN0W10gc2VsZWN0aW9uOwotCQotCXB1YmxpYyBPYmplY3RbXSBnZXRTZWxlY3Rpb24oKSAKLQl7Ci0JCXJldHVybiBzZWxlY3Rpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihPYmplY3RbXSBzZWxlY3Rpb24pCi0JewotCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyZTdjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODAyICAgMTUyMTUwIG1haHV0Y2hAY2EuaWJtLmNvbQotICogMjAwNzExMDcgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA2MjYgICAyMjEzNjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLQotCi1wdWJsaWMgY2xhc3MgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW07Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGFsbFdlYlNlcnZpY2VJbXBsczsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsUnVudGltZXM7Ci0gIHByaXZhdGUgU3RyaW5nIGlkOwotICBwcml2YXRlIFdlYlNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIHByaXZhdGUgUnVudGltZURlc2NyaXB0b3IgcnVudGltZTsKLSAgcHJpdmF0ZSBib29sZWFuIGJvdHRvbVVwID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB0b3BEb3duID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lOwotICBwcml2YXRlIElXZWJTZXJ2aWNlUnVudGltZSB3ZWJTZXJ2aWNlUnVudGltZTsKLSAgcHJpdmF0ZSBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLSAgcHJpdmF0ZSBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnM7Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciB3ZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlOwotICAKLSAgcHVibGljIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcihJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSwgSGFzaHRhYmxlIGFsbFdlYlNlcnZpY2VJbXBscywgSGFzaHRhYmxlIGFsbFJ1bnRpbWVzKQotICB7Ci0gICAgdGhpcy5lbGVtID0gZWxlbTsKLSAgICB0aGlzLmFsbFdlYlNlcnZpY2VJbXBscyA9IGFsbFdlYlNlcnZpY2VJbXBsczsKLSAgICB0aGlzLmFsbFJ1bnRpbWVzID0gYWxsUnVudGltZXM7Ci0KLSAgICBib3R0b21VcCA9IChCb29sZWFuLnZhbHVlT2YoZWxlbS5nZXRBdHRyaWJ1dGUoImJvdHRvbVVwIikpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB0b3BEb3duID0gKEJvb2xlYW4udmFsdWVPZihlbGVtLmdldEF0dHJpYnV0ZSgidG9wRG93biIpKSkuYm9vbGVhblZhbHVlKCk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRCb3R0b21VcCgpCi0gIHsgICAgCi0gICAgcmV0dXJuIGJvdHRvbVVwOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZCA9PSBudWxsKQotICAgIHsKLSAgICAgIGlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIGdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpCi0gIHsKLSAgICBpZiAocmVxdWlyZWRGYWNldFZlcnNpb25zID09IG51bGwpCi0gICAgewotICAgICAgQXJyYXlMaXN0IHJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGZhY2V0RWxlbXMgPSBlbGVtLmdldENoaWxkcmVuKCJyZXF1aXJlZC1mYWNldC12ZXJzaW9uIik7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhY2V0RWxlbXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgU3RyaW5nIGZhY2V0SUQgPSBmYWNldEVsZW1zW2ldLmdldEF0dHJpYnV0ZSgiZmFjZXQiKTsKLSAgICAJICBpZiAoUHJvamVjdEZhY2V0c01hbmFnZXIuaXNQcm9qZWN0RmFjZXREZWZpbmVkKGZhY2V0SUQpKQotICAgIAkgIHsKLQkgICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uIHJmdiA9IG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbigpOwotCSAgICAgICAgSVByb2plY3RGYWNldCBwcm9qZWN0RmFjZXQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoZmFjZXRJRCk7Ci0JICAgICAgICBpZiAocHJvamVjdEZhY2V0ICE9IG51bGwpIHsKLQkgICAgICAgIAlJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0LmdldFZlcnNpb24oZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSk7Ci0JICAgICAgICAJaWYgKHByb2plY3RGYWNldFZlcnNpb24gIT0gbnVsbCkgewotCSAgICAgICAgCQlyZnYuc2V0UHJvamVjdEZhY2V0VmVyc2lvbihwcm9qZWN0RmFjZXRWZXJzaW9uKTsKLQkgICAgICAgIAkJU3RyaW5nIGFsbG93TmV3ZXJWYWx1ZSA9IGZhY2V0RWxlbXNbaV0uZ2V0QXR0cmlidXRlKCJhbGxvdy1uZXdlciIpOwotCSAgICAgICAgCQlpZiAoYWxsb3dOZXdlclZhbHVlID09IG51bGwpCi0JICAgICAgICAJCXsKLQkgICAgICAgIAkJCXJmdi5zZXRBbGxvd05ld2VyKGZhbHNlKTsKLQkgICAgICAgIAkJfQotCSAgICAgICAgCQllbHNlCi0JICAgICAgICAJCXsKLQkgICAgICAgIAkJCXJmdi5zZXRBbGxvd05ld2VyKEJvb2xlYW4udmFsdWVPZihhbGxvd05ld2VyVmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLQkgICAgICAgIAkJfQotCSAgICAgICAgCi0JICAgICAgICAJCXJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC5hZGQocmZ2KTsKLQkgICAgICAgIAl9Ci0JICAgICAgICB9Ci0gICAgCQotICAgIAkgIH0gCi0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgCS8vIGlnbm9yZSB0aGUgZmFjZXQKLSAgCSAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9IChSZXF1aXJlZEZhY2V0VmVyc2lvbltdKXJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC50b0FycmF5KG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbltde30pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVxdWlyZWRGYWNldFZlcnNpb25zOwotICB9Ci0gIAotICBwdWJsaWMgU2V0IGdldFByb2plY3RGYWNldFZlcnNpb25zKCkKLSAgewotICAgIGlmIChwcm9qZWN0RmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgcHJvamVjdEZhY2V0VmVyc2lvbnMgPSBuZXcgSGFzaFNldCgpOwotICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IGdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICBmb3IgKGludCBpPTA7IGk8cmZ2Lmxlbmd0aDsgaSsrKQotICAgICB7Ci0gICAgICAgcHJvamVjdEZhY2V0VmVyc2lvbnMuYWRkKHJmdltpXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkpOwotICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcm9qZWN0RmFjZXRWZXJzaW9uczsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lKCkKLSAgewotICAgIGlmIChydW50aW1lID09IG51bGwpCi0gICAgewotICAgICBTdHJpbmcgcnVudGltZUlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVJZCIpOwotICAgICBydW50aW1lID0gKFJ1bnRpbWVEZXNjcmlwdG9yKWFsbFJ1bnRpbWVzLmdldChydW50aW1lSWQpOyAgICAgCi0gICAgfQotICAgIHJldHVybiBydW50aW1lOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUltcGwgZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpCi0gIHsKLSAgICBpZiAoc2VydmljZUltcGxlbWVudGF0aW9uVHlwZSA9PSBudWxsKQotICAgIHsgICAgICAKLSAgICAgIFN0cmluZyBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlSWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgic2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkIik7Ci0gICAgICBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlID0gKFdlYlNlcnZpY2VJbXBsKWFsbFdlYlNlcnZpY2VJbXBscy5nZXQoc2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJ1bnRpbWVDbGFzc05hbWUoKQotICB7Ci0gICAgaWYgKHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lID09IG51bGwpCi0gICAgewotICAgICAgc2VydmljZVJ1bnRpbWVDbGFzc05hbWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUb3BEb3duKCkKLSAgewotICAgIHJldHVybiB0b3BEb3duOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlUnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VSdW50aW1lID0gKElXZWJTZXJ2aWNlUnVudGltZSllbGVtLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lOwotICB9ICAKLSAgCi0gIHB1YmxpYyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGdldFNlcnZpY2VSdW50aW1lQ2hlY2tlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZVJ1bnRpbWVDaGVja2VyID09IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAJaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCJydW50aW1lQ2hlY2tlciIpICE9IG51bGwgKSB7Ci0gICAgICAgIAkJd2ViU2VydmljZVJ1bnRpbWVDaGVja2VyID0gKElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIpZWxlbS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJydW50aW1lQ2hlY2tlciIpOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB3ZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0gIH0gCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkKLSAgewotICAgIGlmIChydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSA9PSBudWxsKQotICAgIHsKLSAgICAJcnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUgPSBlbGVtLmdldEF0dHJpYnV0ZSgicnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VydmljZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTdjYzI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVR5cGUgewotCi0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fOwotICBwcml2YXRlIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfOwotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlSW1wbCB3ZWJTZXJ2aWNlSW1wbDsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZTsKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0KLSAgCi0KLSAgCi0gIHB1YmxpYyBTZXJ2aWNlVHlwZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV8sIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gICAgdGhpcy53ZWJTZXJ2aWNlSW1wbHNfID0gd2ViU2VydmljZUltcGxzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRCb3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZSgpCi0gIHsKLSAgICBpZiAoYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGU9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImJ1TW9kdWxlVHlwZXNFeGNsdWRlIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlKFN0cmluZ1tdIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlKQotICB7Ci0gICAgdGhpcy5ib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZSA9IGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0Qm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUoKQotICB7Ci0gICAgaWYgKGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJidU1vZHVsZVR5cGVzSW5jbHVkZSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUubGVuZ3RoOyBpKyspCi0gICAgICAgICAgYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGVbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRCb3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZShTdHJpbmdbXSBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSkKLSAgewotICAgIHRoaXMuYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUgPSBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQ9PW51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0VG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZSgpCi0gIHsKLSAgICBpZiAodG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgidGRNb2R1bGVUeXBlc0V4Y2x1ZGUiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgdG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlKFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGUpCi0gIHsKLSAgICB0aGlzLnRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGUgPSB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpCi0gIHsKLSAgICBpZiAodG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgidGRNb2R1bGVUeXBlc0luY2x1ZGUiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgdG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlKFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUpCi0gIHsKLSAgICB0aGlzLnRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUgPSB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUltcGwgZ2V0V2ViU2VydmljZUltcGwoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VJbXBsID09IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHdzaW1wbElkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpbXBsSWQiKTsKLSAgICAgIHdlYlNlcnZpY2VJbXBsID0gKFdlYlNlcnZpY2VJbXBsKXdlYlNlcnZpY2VJbXBsc18uZ2V0KHdzaW1wbElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VJbXBsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlSW1wbDEoV2ViU2VydmljZUltcGwgd2ViU2VydmljZUltcGwpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VJbXBsID0gd2ViU2VydmljZUltcGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzU2NlbmFyaW8oaW50IHNjZW5hcmlvKQotICB7Ci0gICAgc3dpdGNoKHNjZW5hcmlvKQotICAgIHsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgIFN0cmluZ1tdIGJ1cyA9IGdldEJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICBpZiAoYnVzIT1udWxsICYmIGJ1cy5sZW5ndGg+MCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOOgotICAgICAgU3RyaW5nW10gdGRzID0gZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgICAgaWYgKHRkcyE9bnVsbCAmJiB0ZHMubGVuZ3RoPjApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLQlwdWJsaWMgU3RyaW5nW10gZ2V0TW9kdWxlVHlwZXNJbmNsdWRlKGludCBzY2VuYXJpbykKLSAgewotICAgIHN3aXRjaChzY2VuYXJpbykKLSAgICB7Ci0gICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVA6Ci0gICAgICByZXR1cm4gZ2V0Qm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUoKTsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOOgotICAgICAgcmV0dXJuIGdldFRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUoKTsKLSAgICBkZWZhdWx0OiAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLQkKLQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VDbGllbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODdiM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VDbGllbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDbGllbnRJbXBsIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsgCi0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbGFiZWw7Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUNsaWVudEltcGwoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZD09bnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotICB7Ci0gICAgaWYgKGxhYmVsPT1udWxsKQotICAgIHsKLSAgICAgIGxhYmVsID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2FmMWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JTWVyZ2VyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlSW1wbCB7Ci0JCi0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fOwotCXByaXZhdGUgU3RyaW5nIGlkOwotCXByaXZhdGUgU3RyaW5nIGxhYmVsOwotCXByaXZhdGUgU3RyaW5nW10gcmVzb3VyY2VUeXBlTWV0YWRhdGE7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBleHRlbnNpb25NZXRhZGF0YTsKLQlwcml2YXRlIFN0cmluZyBvYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci0JcHJpdmF0ZSBJTWVyZ2VyIG1lcmdlckNsYXNzOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VJbXBsKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXykKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgdGhpcy5lbGVtXyA9IGVsZW1fOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEV4dGVuc2lvbk1ldGFkYXRhKCkKLSAgewotICAgIGlmIChleHRlbnNpb25NZXRhZGF0YT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiZXh0ZW5zaW9uTWV0YWRhdGEiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgZXh0ZW5zaW9uTWV0YWRhdGEgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbk1ldGFkYXRhLmxlbmd0aDsgaSsrKQotICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBleHRlbnNpb25NZXRhZGF0YTsKLSAgfQotICAKLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZD09bnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotICB7Ci0gICAgaWYgKGxhYmVsPT1udWxsKQotICAgIHsKLSAgICAgIGxhYmVsID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0gCi0gIAotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXNvdXJjZVR5cGVNZXRhZGF0YSgpCi0gIHsKLSAgICBpZiAocmVzb3VyY2VUeXBlTWV0YWRhdGE9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoInJlc291cmNlVHlwZU1ldGFkYXRhIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHJlc291cmNlVHlwZU1ldGFkYXRhID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNvdXJjZVR5cGVNZXRhZGF0YS5sZW5ndGg7IGkrKykKLSAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhZGF0YVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gcmVzb3VyY2VUeXBlTWV0YWRhdGE7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpCi0gIHsKLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0PT1udWxsKQotICAgIHsKLSAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgib2JqZWN0U2VsZWN0aW9uV2lkZ2V0Iik7Ci0gICAgfQotICAgIHJldHVybiBvYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci0gIH0KLSAgCi1wdWJsaWMgSU1lcmdlciBnZXRNZXJnZXJDbGFzcygpIHsKLQlpZiAobWVyZ2VyQ2xhc3MgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXJnZXJDbGFzcyA9IChJTWVyZ2VyKSBlbGVtXy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJtZXJnZXJDbGFzcyIpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQkKLQlyZXR1cm4gbWVyZ2VyQ2xhc3M7Ci19Ci0gIAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzU4ZGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeSBpbnN0YW5jZV87Ci0KLSAgSGFzaE1hcCB3ZWJTZXJ2aWNlVHlwZXNfOwotICAKLSAgQXJyYXlMaXN0IHdlYlNlcnZpY2VUeXBlc0xpc3RfOwotICAKLSAgQXJyYXlMaXN0IHdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfOwotCi0gIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfOwotCi0gIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfOwotCi0gIEhhc2h0YWJsZSBzZXJ2aWNlVHlwZXNfOwotCi0gIEhhc2h0YWJsZSBjbGllbnRUeXBlc187Ci0KLSAgSGFzaHRhYmxlIHdlYlNlcnZpY2VSdW50aW1lc187Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgLy8gQ2FuJ3QgZ2V0IHJpZCBvZiB3ZWJTZXJ2aWNlVHlwZXMgaW4gTTQKLSAgICB3ZWJTZXJ2aWNlVHlwZXNfID0gbmV3IEhhc2hNYXAoKTsKLSAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3ZWJTZXJ2aWNlSW1wbHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHdlYlNlcnZpY2VDbGllbnRJbXBsc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgc2VydmljZVR5cGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBjbGllbnRUeXBlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgd2ViU2VydmljZVJ1bnRpbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIAotICAgIC8vTG9hZCBXZWJTZXJ2aWNlSW1wbHMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c0ltcGxFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJ3c0ltcGwiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NJbXBsRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHdzSW1wbEV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJ3ZWJTZXJ2aWNlSW1wbCIpKQotICAgICAgICB7Ci0gICAgICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gbmV3IFdlYlNlcnZpY2VJbXBsKGVsZW0pOwotICAgICAgICAgIHdlYlNlcnZpY2VJbXBsc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCB3c2ltcGwpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIFdlYlNlcnZpY2VDbGllbnRJbXBscwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzQ2xpZW50SW1wbEV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgIndzQ2xpZW50SW1wbCIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDx3c0NsaWVudEltcGxFeHRzLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gd3NDbGllbnRJbXBsRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoIndlYlNlcnZpY2VDbGllbnRJbXBsIikpCi0gICAgICAgIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlQ2xpZW50SW1wbCB3c0NsaWVudEltcGwgPSBuZXcgV2ViU2VydmljZUNsaWVudEltcGwoZWxlbSk7Ci0gICAgICAgICAgd2ViU2VydmljZUNsaWVudEltcGxzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHdzQ2xpZW50SW1wbCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgU2VydmljZVR5cGVzCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gc2VydmljZVR5cGVFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJzZXJ2aWNlVHlwZSIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxzZXJ2aWNlVHlwZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBzZXJ2aWNlVHlwZUV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJzZXJ2aWNlVHlwZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVR5cGUgc3QgPSBuZXcgU2VydmljZVR5cGUoZWxlbSx3ZWJTZXJ2aWNlSW1wbHNfKTsKLSAgICAgICAgICBzZXJ2aWNlVHlwZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgc3QpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIENsaWVudFR5cGVzCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2xpZW50VHlwZUV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgImNsaWVudFR5cGUiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y2xpZW50VHlwZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjbGllbnRUeXBlRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoImNsaWVudFR5cGUiKSkKLSAgICAgICAgewotICAgICAgICAgIENsaWVudFR5cGUgY3QgPSBuZXcgQ2xpZW50VHlwZShlbGVtLHdlYlNlcnZpY2VDbGllbnRJbXBsc18pOwotICAgICAgICAgIGNsaWVudFR5cGVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIGN0KTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBXZWJTZXJpdmNlUnVudGltZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c3J0RXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAid2ViU2VydmljZVJ1bnRpbWUiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NydEV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSB3c3J0RXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoIndlYlNlcnZpY2VSdW50aW1lIikpCi0gICAgICAgIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlUnVudGltZUluZm8gd3NydEluZm8gPSBuZXcgV2ViU2VydmljZVJ1bnRpbWVJbmZvKGVsZW0sIHNlcnZpY2VUeXBlc18sIGNsaWVudFR5cGVzXyk7Ci0gICAgICAgICAgd2ViU2VydmljZVJ1bnRpbWVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHdzcnRJbmZvKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvL1VwZGF0ZSB0aGUgdHlwZSBsaXN0cwotICAgICAgICAgIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdCh3c3J0SW5mbyk7Ci0gICAgICAgICAgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KHdzcnRJbmZvKTsKLSAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICB9ICAKLSAgICAKLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdChXZWJTZXJ2aWNlUnVudGltZUluZm8gd3NydEluZm8pCi0gIHsKLSAgICBTZXJ2aWNlVHlwZVtdIHN0cyA9IHdzcnRJbmZvLmdldFNlcnZpY2VUeXBlcygpOwotICAgIGlmIChzdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGltcGxJZCA9IHN0c1tqXS5nZXRXZWJTZXJ2aWNlSW1wbCgpLmdldElkKCk7Ci0gICAgICAgIFN0cmluZ1tdIGJ1cyA9IHN0c1tqXS5nZXRCb3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgICAgICBTdHJpbmdbXSB0ZHMgPSBzdHNbal0uZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgICAgICBpZiAoYnVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSk7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoaW1wbElkKTsKLSAgICAgICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoIXdlYlNlcnZpY2VUeXBlc0xpc3RfLmNvbnRhaW5zKGVudHJ5KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodGRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLSAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZChpbXBsSWQpOwotICAgICAgICAgIFN0cmluZyBlbnRyeSA9IGVudHJ5YnVmZi50b1N0cmluZygpOwotICAgICAgICAgIGlmICghd2ViU2VydmljZVR5cGVzTGlzdF8uY29udGFpbnMoZW50cnkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VUeXBlc0xpc3RfLmFkZChlbnRyeSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KFdlYlNlcnZpY2VSdW50aW1lSW5mbyB3c3J0SW5mbykKLSAgewotICAgIENsaWVudFR5cGVbXSBjdHMgPSB3c3J0SW5mby5nZXRDbGllbnRUeXBlcygpOwotICAgIGlmIChjdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGltcGxJZCA9IGN0c1tqXS5nZXRXZWJTZXJ2aWNlQ2xpZW50SW1wbCgpLmdldElkKCk7Ci0gICAgICAgIFN0cmluZ1tdIG1vZHMgPSBjdHNbal0uZ2V0TW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICAgIGlmIChtb2RzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVCkpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKGltcGxJZCk7Ci0gICAgICAgICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgaWYgKCF3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0Xy5jb250YWlucyhlbnRyeSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgd2ViU2VydmljZUNsaWVudFR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjJkZjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MgotewotCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyIGluc3RhbmNlXzsKLQotICAvL3dlYlNlcnZpY2VJbXBsc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NJbXBsCi0gIC8vdmFsdWU6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsIAotICBIYXNodGFibGUgd2ViU2VydmljZUltcGxzXzsKLQotICAvL3dlYlNlcnZpY2VDbGllbnRJbXBsc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsCi0gIC8vdmFsdWU6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VDbGllbnRJbXBsICAKLSAgSGFzaHRhYmxlIHdlYlNlcnZpY2VDbGllbnRJbXBsc187Ci0KLSAgLy9ydW50aW1lc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucnVudGltZXMKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3IKLSAgSGFzaHRhYmxlIHJ1bnRpbWVzXzsKLSAgCi0gIC8vc2VydmljZVJ1bnRpbWVzXzogCi0gIC8va2V5OiBpZCBhdHRyaWJ1dGUgb2YgZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yCi0gIEhhc2h0YWJsZSBzZXJ2aWNlUnVudGltZXNfOwotICAKLSAgLy9jbGllbnRSdW50aW1lc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuQ2xpZW50UnVudGltZURlc2NyaXB0b3IgIAotICBIYXNodGFibGUgY2xpZW50UnVudGltZXNfOwotICAKLSAgLy93ZWJTZXJ2aWNlVHlwZXNMaXN0XyBjb250YWlucyBhIGxpc3Qgb2YgU3RyaW5nIHZhbHVlcyBpbiB0aGlzIGZvcm06ICJzY2VuYXJpby93ZWJTZXJ2aWNlSW1wbElkIiwKLSAgLy93aGVyZSBzY2VhbnJpbyB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG9uZSBvZiAKLSAgLy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQIG9yIAotICAvL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpby5UT1BfRE9XTgotICAvL2FuZCB3ZWJTZXJ2aWNlSW1wbElkIGlzIHRoZSBpZCBhdHRyaWJ1dGUgb2YgYW4gZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwKLSAgLy9UaGlzIGxpc3QgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGl0ZW1zIGRpc3BsYXllZCBpbiB0aGUgV2ViU2VydmljZVR5cGUgY29tYm8tYm94IG9mIHBhZ2UgMSBvZiB0aGUgCi0gIC8vV2ViIHNlcml2Y2Ugd2l6YXJkLgotICBBcnJheUxpc3Qgd2ViU2VydmljZVR5cGVzTGlzdF87Ci0gIAotICAvL1RPRE86IE5vdCB1c2VkLiBSZW1vdmUgdGhpcyBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gaXQgaW4gdGhpcyBjbGFzcy4KLSAgQXJyYXlMaXN0IHdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfOyAgCi0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyKCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgd2ViU2VydmljZUltcGxzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHJ1bnRpbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBzZXJ2aWNlUnVudGltZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGNsaWVudFJ1bnRpbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICAKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAKLS8vICBMb2FkIFdlYlNlcnZpY2VJbXBscyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c0ltcGxFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJ3c0ltcGwiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NJbXBsRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHdzSW1wbEV4dHNbaWR4XTsgICAgICAgIAotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJ3ZWJTZXJ2aWNlSW1wbCIpKQotICAgICAgICB7Ci0gICAgICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gbmV3IFdlYlNlcnZpY2VJbXBsKGVsZW0pOyAgICAgICAgICAKLSAgICAgICAgICB3ZWJTZXJ2aWNlSW1wbHNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgd3NpbXBsKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBXZWJTZXJ2aWNlQ2xpZW50SW1wbHMgYnkgcmVhZGluZyBhbGwgZXh0ZW5zaW9ucyB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gd3NDbGllbnRJbXBsRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAid3NDbGllbnRJbXBsIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PHdzQ2xpZW50SW1wbEV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSB3c0NsaWVudEltcGxFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygid2ViU2VydmljZUNsaWVudEltcGwiKSkKLSAgICAgICAgewotICAgICAgICAgIFdlYlNlcnZpY2VDbGllbnRJbXBsIHdzQ2xpZW50SW1wbCA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW1wbChlbGVtKTsKLSAgICAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgd3NDbGllbnRJbXBsKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBydW50aW1lcyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5ydW50aW1lcwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHJ1bnRpbWVFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJydW50aW1lcyIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxydW50aW1lRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHJ1bnRpbWVFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygicnVudGltZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgUnVudGltZURlc2NyaXB0b3IgcmQgPSBuZXcgUnVudGltZURlc2NyaXB0b3IoZWxlbSk7Ci0gICAgICAgICAgcnVudGltZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgcmQpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIHNlcnZpY2VSdW50aW1lcyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBzZXJ2aWNlUnVudGltZUV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgInNlcnZpY2VSdW50aW1lcyIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxzZXJ2aWNlUnVudGltZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBzZXJ2aWNlUnVudGltZUV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJzZXJ2aWNlUnVudGltZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIHJkID0gbmV3IFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcihlbGVtLCB3ZWJTZXJ2aWNlSW1wbHNfLCBydW50aW1lc18pOwotICAgICAgICAgIHNlcnZpY2VSdW50aW1lc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCByZCk7ICAgICAgICAgIAotICAgICAgICAgIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdChyZCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgY2xpZW50UnVudGltZXMgYnkgcmVhZGluZyBhbGwgZXh0ZW5zaW9ucyB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjbGllbnRSdW50aW1lRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAiY2xpZW50UnVudGltZXMiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y2xpZW50UnVudGltZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjbGllbnRSdW50aW1lRXh0c1tpZHhdOwotCi0gICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJjbGllbnRSdW50aW1lIikpCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIHJkID0gbmV3IENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKGVsZW0sIHdlYlNlcnZpY2VDbGllbnRJbXBsc18sIHJ1bnRpbWVzXyk7Ci0gICAgICAgIGNsaWVudFJ1bnRpbWVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHJkKTsKLSAgICAgICAgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KHJkKTsKLSAgICAgICAgICAKLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgfSAgCi0gICAgCi0gIC8qKgotICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIFdlYiBzZXJ2aWNlIHR5cGVzIHdpdGggdGhlIHByb3ZpZGVkIHNlcnZpY2UgcnVudGltZSdzIGNvbnRyaWJ1dGlvbiBvZgotICAgKiBzY2VuYXJpby93ZWJTZXJ2aWNlSW1wbCBjb21iaW5hdGlvbi4KLSAgICogQHBhcmFtIGRlc2NyaXB0b3IKLSAgICovCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVXZWJTZXJ2aWNlVHlwZUxpc3QoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gIHsKLSAgICBTdHJpbmcgc2VydmljZUltcGxJZCA9IGRlc2NyaXB0b3IuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCk7Ci0gICAgYm9vbGVhbiBib3R0b21VcCA9IGRlc2NyaXB0b3IuZ2V0Qm90dG9tVXAoKTsKLSAgICBib29sZWFuIHRvcERvd24gPSBkZXNjcmlwdG9yLmdldFRvcERvd24oKTsKLSAgICBpZiAoYm90dG9tVXApCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSk7Ci0gICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICBlbnRyeWJ1ZmYuYXBwZW5kKHNlcnZpY2VJbXBsSWQpOwotICAgICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAoIXdlYlNlcnZpY2VUeXBlc0xpc3RfLmNvbnRhaW5zKGVudHJ5KSkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZVR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKHRvcERvd24pCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoc2VydmljZUltcGxJZCk7Ci0gICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICAgIGlmICghd2ViU2VydmljZVR5cGVzTGlzdF8uY29udGFpbnMoZW50cnkpKQotICAgICAgewotICAgICAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdlYlNlcnZpY2VDbGllbnRUeXBlTGlzdChDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgU3RyaW5nIGNsaWVudEltcGxJZCA9IGRlc2NyaXB0b3IuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKTsKLSAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVCkpOwotICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICBlbnRyeWJ1ZmYuYXBwZW5kKGNsaWVudEltcGxJZCk7Ci0gICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgaWYgKCF3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0Xy5jb250YWlucyhlbnRyeSkpCi0gICAgewotICAgICAgd2ViU2VydmljZUNsaWVudFR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICB9ICAgIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxOWUxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMjQgICAxMTY3NTAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDcwMTE5ICAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzExMDcgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQwMiAgIDIyNTM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ2xpZW50IHdpemFyZCBydW50aW1lL3NlcnZlciBkZWZhdWx0aW5nIGlzIG5vdCByZXNwZWN0aW5nIHRoZSBwcmVmZXJlbmNlCi0gKiAyMDA4MDUzMCAgIDIzNDg3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV29ya2JlbmNoIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldCBlcnJvciBpbiBjbWRsaW5lIEFudAotICogMjAwODA4MDggICAyNDM2MjMgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBJbXByb3ZlIHNlcnZlciBkZWZhdWx0aW5nIHBlcmZvcm1hbmNlCi0gKiAyMDA5MTIwNyAgIDI5NTY1NCBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCBQcm9qZWN0IHR5cGUgZGVmYXVsdGluZyBpcyBpbmNvcnJlY3QgZm9yIGEgbmV3IHByb2plY3QKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLS8vIFRoaXMgcGx1Zy1pbiBhbHJlYWR5IHJlZmVyZW5jZXMgdGhpcyBpbnRlcm5hbCBjbGFzcwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuRmFjZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuVHlwZVNlbGVjdGlvbkZpbHRlcjI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdENob2ljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlclVJQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBudW1lcm91cyB1dGlsaXR5IG1ldGhvZHMgdGhhdAotICogcHJvY2VzcyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgdGhyb3VnaCBleHRlbnNpb24gcG9pbnRzCi0gKiB3aGljaCBhcmUgcmVhZCBpbiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MjoKLSAqIDx1bD4KLSAqIDxsaT4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzSW1wbCA8L2xpPgotICogPGxpPiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsIDwvbGk+Ci0gKiA8bGk+IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5ydW50aW1lcyA8L2xpPgotICogPGxpPiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuc2VydmljZVJ1bnRpbWVzIDwvbGk+Ci0gKiA8bGk+IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyA8L2xpPgotICogPC91bD4KLSAqIAotICogdG8gcHJvdmlkZSBhbnN3ZXJzIHRvIGNvbW1vbiBxdWVzdGlvbnMgcmVnYXJkaW5nIHdoaWNoIHNlcnZlcnMsCi0gKiBwcm9qZWN0cywgYW5kIHByb2plY3QgdHlwZXMgYSBwYXJ0aWN1bGFyIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAqIHN1cHBvcnRzLgotICogPGJyLz48YnIvPgotICogVGVtaW5vbG9neSB1c2VkIGluIHRoZSBqYXZhZG9jIGluIHRoaXMgY2xhc3M6Ci0gKiA8dWw+Ci0gKiA8bGk+PGI+V2ViIHNlcnZpY2Ugc2NlbmFyaW88L2I+OiBPbmUgb2YgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCBvciBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QX0RPV04uPC9saT4gCi0gKiA8bGk+PGI+V2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NJbXBsLgotICogVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlSW1wbC48L2xpPgotICogPGxpPjxiPldlYiBzZXJ2aWNlIHR5cGU8L2I+OiBGb3J3YXJkIHNsYXNoIHNlcGFyYXRlZCBjb25jYXRlbmF0aW9uIG9mIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24KLSAqIG9mIGEgV2ViIHNlcnZpY2Ugc2NlbmFyaW8gYW5kIGEgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAqIEZvciBleGFtcGxlLCAiMC9vcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiLCByZXByZXNlbnRzIHRoZSBib3R0b20gdXAgSmF2YSBiZWFuIFdlYiBzZXJ2aWNlIHR5cGUuPC9saT4KLSAqIDxsaT48Yj5XZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsLgotICogVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW1wbC48L2xpPgotICogPGxpPjxiPldlYiBzZXJ2aWNlIHJ1bnRpbWU8L2I+OiBleHRlbnNpb24gdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnJ1bnRpbWVzLiAKLSAqIFRoZSBKYXZhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaXMgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3I8L2xpPiAKLSAqIDxsaT48Yj5zZXJ2aWNlUnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuc2VydmljZVJ1bnRpbWVzLgotICogVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5TZXJ2aWNlUnVudGltZURlc2NyaXB0b3I8L2xpPgotICogPGxpPjxiPmNsaWVudFJ1bnRpbWU8L2I+OiBleHRlbnNpb24gdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzLgotICogVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5DbGllbnRSdW50aW1lRGVzY3JpcHRvcjwvbGk+Ci0gKiA8bGk+PGI+c2VydmVyIHR5cGU8L2I+OiBUaGlzIGlzIGEgc2VydmVyIHRvb2xzIGFydGlmYWN0LiBZb3Ugc2VlIGEgbGlzdCBvZiB0aGVzZSB3aGVuIGNyZWF0aW5nIGEgbmV3IHNlcnZlcgotICogaW4gdGhlIHRvb2wuPC9saT4KLSAqIDxsaT48Yj5zZXJ2ZXIgcnVudGltZTwvYj46IFRoaXMgaXMgYSBzZXJ2ZXIgdG9vbHMgYXJ0aWZhY3QuIFlvdSBzZWUgYSBsaXN0IG9mIHRoZXNlIGlmIHlvdSBnbyB0byBQcmVmZXJlbmNlcywgCi0gKiBTZXJ2ZXIgPiBJbnN0YWxsZWQgUnVudGltZXMgaW4gdGhlIHRvb2wuIFRoZSBKYXZhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaXMgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lPC9saT4KLSAqIDxsaT48Yj5mYWNldCBydW50aW1lPC9iPjogVGhlIGZhY2V0IGVxdWl2YWxlbnQgb2YgYSBzZXJ2ZXIgcnVudGltZS4gVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyAKLSAqIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUuIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWwKLSAqIHByb3ZpZGVzIG1ldGhvZHMgdG8gdHJhbnNsYXRlIGZyb20gYSBzZXJ2ZXIgcnVudGltZSB0byBhIGZhY2V0IHJ1bnRpbWUgYW5kIHZpY2UtdmVyc2EuPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotewotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MiByZWdpc3RyeSA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyLmdldEluc3RhbmNlKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgUnVudGltZURlc2NyaXB0b3IgcmVwcmVzZW50aW5nIHRoZSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIHdpdGggYW4gaWQgYXR0cmlidXRlIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBpZAotICAgKiBAcGFyYW0gaWQKLSAgICogQHJldHVybiBSdW50aW1lRGVzY3JpcHRvciByZXByZXNlbnRpbmcgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogd2l0aCBhbiBpZCBhdHRyaWJ1dGUgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGlkLiBSZXR1cm5zIG51bGwKLSAgICogaWYgc3VjaCBhIFJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lQnlJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gcmVnaXN0cnkucnVudGltZXNfLmdldChpZCk7Ci0gICAgaWYgKHJlc3VsdCE9bnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFJ1bnRpbWVEZXNjcmlwdG9yKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgICAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHVuaW9uIG9mIGFsbCBwcm9qZWN0IHR5cGVzIHN1cHBvcnRlZCBieSBhbGwgc2VydmljZVJ1bnRpbWVzLiBVc2VkIGJ5IHRoZQotICAgKiBQcm9qZWN0VG9wb2xvZ3kgcHJlZmVyZW5jZSBwYWdlLiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiB0ZW1wbGF0ZSBpZHMuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2aWNlUHJvamVjdFR5cGVzKCkKLSAgewotICAgIEFycmF5TGlzdCBmaW5hbFRlbXBsYXRlSWRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvL0xvb3AgdGhyb3VnaCBhbGwgdGhlIHNlcnZpY2VSdW50aW1lcwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAKLSAgICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2VydmljZVJ1bnRpbWUKLSAgICAgIFNldCB0ZW1wbGF0ZXMgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JTZXJ2aWNlUnVudGltZShkZXNjLmdldElkKCkpOwotICAgICAgCi0gICAgICAvL0FkZCB0aGUgdGVtcGxhdGUgaWRzIHRvIHRoZSBsaXN0IGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFkZGVkCi0gICAgICBJdGVyYXRvciBpdHIgPSB0ZW1wbGF0ZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSlpdHIubmV4dCgpOwotICAgICAgICBpZiAoIWZpbmFsVGVtcGxhdGVJZExpc3QuY29udGFpbnModGVtcGxhdGUuZ2V0SWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBmaW5hbFRlbXBsYXRlSWRMaXN0LmFkZCh0ZW1wbGF0ZS5nZXRJZCgpKTsKLSAgICAgICAgfQotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICBlbnN1cmVXZWJQcm9qZWN0SXNGaXJzdChmaW5hbFRlbXBsYXRlSWRMaXN0KTsKLSAgICByZXR1cm4gKFN0cmluZ1tdKWZpbmFsVGVtcGxhdGVJZExpc3QudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgZW5zdXJlV2ViUHJvamVjdElzRmlyc3QoTGlzdCBmaW5hbFRlbXBsYXRlSWRMaXN0KQotICB7Ci0gICAgLy8gSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSA9ICJ0ZW1wbGF0ZS5qc3Qud2ViIgotICAgIGludCBpID0gZmluYWxUZW1wbGF0ZUlkTGlzdC5pbmRleE9mKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUpOwotICAgIC8vIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYmFzaWMgd2ViIHByb2plY3QgaXMgZmlyc3QgYXMgZGVmYXVsdCB3aGVuIHRoZSB3b3JrYmVuY2gKLSAgICAvLyBpcyBsYXVuY2hlZCBvbiBhIGNsZWFuL2VtcHR5IHdvcmtzcGFjZSwgYW5kIG5vdCBzb21ldGhpbmcgZWxzZSBjb250cmlidXRlZCBieSBzb21lIG90aGVyIGV4dGVuc2lvbgotICAgIGlmIChpID4gMCkKLSAgICB7Ci0gIAkgIGZpbmFsVGVtcGxhdGVJZExpc3QucmVtb3ZlKGkpOwotICAJICBmaW5hbFRlbXBsYXRlSWRMaXN0LmFkZCgwLCBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB1bmlvbiBvZiBhbGwgcHJvamVjdCB0eXBlcyBzdXBwb3J0ZWQgYnkgYWxsIGNsaWVudFJ1bnRpbWVzLiBVc2VkIGJ5IHRoZQotICAgKiBQcm9qZWN0VG9wb2xvZ3kgcHJlZmVyZW5jZSBwYWdlLiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiB0ZW1wbGF0ZSBpZHMuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxDbGllbnRQcm9qZWN0VHlwZXMoKQotICB7Ci0gICAgQXJyYXlMaXN0IGZpbmFsVGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgLy9Mb29wIHRocm91Z2ggYWxsIHRoZSBjbGllbnRSdW50aW1lcwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgCi0gICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgIFNldCB0ZW1wbGF0ZXMgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAKLSAgICAgIC8vQWRkIHRoZSB0ZW1wbGF0ZSBpZHMgdG8gdGhlIGxpc3QgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IHRlbXBsYXRlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKWl0ci5uZXh0KCk7Ci0gICAgICAgIGlmICghZmluYWxUZW1wbGF0ZUlkTGlzdC5jb250YWlucyh0ZW1wbGF0ZS5nZXRJZCgpKSkKLSAgICAgICAgewotICAgICAgIAkgIGZpbmFsVGVtcGxhdGVJZExpc3QuYWRkKHRlbXBsYXRlLmdldElkKCkpOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIGVuc3VyZVdlYlByb2plY3RJc0ZpcnN0KGZpbmFsVGVtcGxhdGVJZExpc3QpOwotICAgIHJldHVybiAoU3RyaW5nW10pZmluYWxUZW1wbGF0ZUlkTGlzdC50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZSBnaXZlbiBpdHMgaWQKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmcgdGhlIGxhYmVsIG9mIHRoZSBXZWIgc2VydmljZSBydW50aW1lIHdpdGggYW4gaWQgZXF1YWwgdG8gcnVudGltZUlkLgotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UnVudGltZUxhYmVsQnlJZChTdHJpbmcgcnVudGltZUlkKSAKLSAgewotICAgIFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRSdW50aW1lQnlJZChydW50aW1lSWQpOwotICAgIGlmIChkZXNjID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICByZXR1cm4gZGVzYy5nZXRMYWJlbCgpOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFJ1bnRpbWVEZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgd2l0aCB0aGUgcHJvdmlkZWQgbGFiZWwKLSAgICogQHBhcmFtIGxhYmVsIGxhYmVsIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFJ1bnRpbWVEZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgd2l0aCB0aGUgcHJvdmlkZWQgbGFiZWwKLSAgICogUmV0dXJucyBudWxsIGlmIHN1Y2ggYSBXZWIgc2VydmljZSBydW50aW1lIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUnVudGltZURlc2NyaXB0b3IgZ2V0UnVudGltZUJ5TGFiZWwoU3RyaW5nIGxhYmVsKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBSdW50aW1lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gKFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgaWYgKGRlc2NyaXB0b3IhPW51bGwpIHsKLSAgICAgICAgaWYgKGxhYmVsLmVxdWFscyhkZXNjcmlwdG9yLmdldExhYmVsKCkpKQotICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgICAKLSAgfSAgICAgIAotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbCBvZiBhbiBzZXJ2ZXIgdHlwZSBnaXZlbiBpdHMgaWQKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gU3RyaW5nIGxhYmVsIG9mIHRoZSBzZXJ2ZXIgdHlwZSB3aXRoIGFuIGlkIGVxdWFsIHRvIHNlcnZlckZhY3RvcnlJZC4KLSAgICogUmV0dXJucyBudWxsIGlmIHN1Y2ggYSBzZXJ2ZXIgdHlwZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJMYWJlbEJ5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0gICAgaWYgKHNlcnZlclR5cGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIGlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0gICAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSBTZXJ2ZXJVSUNvcmUuZ2V0TGFiZWxQcm92aWRlcigpLmdldFRleHQoc2VydmVyVHlwZSk7ICAgCi0gICAgICByZXR1cm4gc2VydmVyTGFiZWw7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBzZXJ2ZXJUeXBlLmdldE5hbWUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIG9mIGFuIElTZXJ2ZXIgZ2l2ZW4gaXRzIGlkCi0gICAqIEBwYXJhbSBpbnN0YW5jZUlkIGlkIG9mIGFuIElTZXJ2ZXIKLSAgICogQHJldHVybiBTdHJpbmcgbGFiZWwgb2YgdGhlIElTZXJ2ZXIgd2l0aCBhbiBpZCBlcXVhbCB0byBpbnN0YW5jZUlkLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUxhYmVsRnJvbUluc3RhbmNlSWQoIFN0cmluZyBpbnN0YW5jZUlkICkKLSAgewotICAgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBpbnN0YW5jZUlkICk7ICAgIAotICAgIHJldHVybiBzZXJ2ZXIuZ2V0TmFtZSgpOwotICB9ICAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgYWxsIHNlcnZlciB0eXBlIGlkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNldCBydW50aW1lcwotICAgKiBpbiB0aGUgcHJvdmlkZWQgc2V0LgotICAgKiBAcGFyYW0gZmFjZXRSdW50aW1lcyBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElSdW50aW1lfS4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBJU2VydmVyVHlwZSBpZHMuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5RmFjZXRSdW50aW1lcyhTZXQgZmFjZXRSdW50aW1lcykKLSAgewotICAgIAotICAgIEFycmF5TGlzdCBzdXBwb3J0ZWRTZXJ2ZXJGYWN0b3J5SWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVJZHMgPSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCk7Ci0gICAgSXRlcmF0b3IgaXRyID0gZmFjZXRSdW50aW1lcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSVJ1bnRpbWUgZlJ1bnRpbWUgPSAoSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlSWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWRzW2ldKTsKLSAgICAgICAgSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgICBpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotCSAgICAgICAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCSAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKSAhPSBudWxsICYmIHJ1bnRpbWVUeXBlSWQuZXF1YWxzKHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKSkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHN1cHBvcnRlZFNlcnZlckZhY3RvcnlJZHMuYWRkKHNlcnZlclR5cGVJZHNbaV0pOyAgICAgICAgICAKLQkgICAgICAgIH0gICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXN1cHBvcnRlZFNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgZmFjdG9yeSBpZHMgd2l0aCBydW50aW1lcwotICAgIC8vcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsgICAgCi0gIH0KLSAgCi0gIC8vU2VydmljZS1zaWRlIHV0aWxpdGllcwotICAvKioKLSAgICogUmV0dXJucyBhIFdlYlNlcnZpY2VJbXBsIGdpdmVuIHRoZSBpZCBvZiBhIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBpZCAKLSAgICogQHJldHVybiBXZWJTZXJ2aWNlSW1wbCB3aXRoIHRoZSBnaXZlbiBpZAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYlNlcnZpY2VJbXBsIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUltcGwgZ2V0V2ViU2VydmljZUltcGxCeUlkKFN0cmluZyBpZCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSByZWdpc3RyeS53ZWJTZXJ2aWNlSW1wbHNfLmdldChpZCk7Ci0gICAgaWYgKHJlc3VsdCE9bnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFdlYlNlcnZpY2VJbXBsKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHtAbGluayBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3J9IGdpdmVuIHRoZSBpZCBvZiBhIHNlcnZpY1J1bnRpbWUuCi0gICAqIEBwYXJhbSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEByZXR1cm4gU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGlkCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18uZ2V0KGlkKTsKLSAgICBpZiAocmVzdWx0IT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgICAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIElXZWJTZXJ2aWNlUnVudGltZX0gb2YgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLiBFeHRlbmRlcnMgcHJvdmlkZSB0aGUgZnVsbHkgCi0gICAqIHF1YWxpZmllZCBuYW1lIG9mIGEgY29uY3JldGUgSVdlYlNlcnZpY2VSdW50aW1lIGluIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgYSBzZXJ2aWNlUnVudGltZXMgZXh0ZW5zaW9uLgotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEByZXR1cm4gSVdlYlNlcnZpY2VSdW50aW1lCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElXZWJTZXJ2aWNlUnVudGltZSBnZXRTZXJ2aWNlUnVudGltZSggU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgKQotICB7Ci0gICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIElXZWJTZXJ2aWNlUnVudGltZSAgICB3ZWJzZXJ2aWNlUnVudGltZSAgICAgPSBudWxsOwotICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpCi0gICAgewotICAgICAgICB3ZWJzZXJ2aWNlUnVudGltZSA9IGRlc2NyaXB0b3IuZ2V0V2ViU2VydmljZVJ1bnRpbWUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYnNlcnZpY2VSdW50aW1lOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2aWNlUnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBwcm92aWRlZCBXZWIgc2VydmljZSB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLAotICAgKiBzZXJ2ZXIgdHlwZS9zZXJ2ZXIgaW5zdGFuY2UgKGlmIHByZXNlbnQpLCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZS4KLSAgICogQHBhcmFtIHRycyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgVHlwZVJ1bnRpbWVTZXJ2ZXJ9IGNvbnRhaW5pbmcgYSBXZWIgc2VydmljZSB0eXBlIGlkLCBXZWIgc2VydmljZSBydW50aW1lIGlkLAotICAgKiBzZXJ2ZXIgdHlwZSBpZCBhbmQgc2VydmVyIGluc3RhbmNlIGlkLiBUaGUgV2ViIHNlcnZpY2UgdHlwZSBpZCBhbmQgV2ViIHNlcnZpY2UgcnVudGltZSBpZCBtdXN0IGJlIG5vbi1udWxsIAotICAgKiBhbmQgbm9uLWVtcHR5LiBUaGUgc2VydmVyIHR5cGUgaWQgYW5kIHNlcnZlciBpbnN0YW5jZSBpZCBtYXkgYmUgbnVsbCBvciBlbXB0eS4KLSAgICogQHBhcmFtIHByb2plY3ROYW1lIHRoZSBuYW1lIG9mIGFuIElQcm9qZWN0IHRoYXkgbWF5IG9yIG1hdCBub3QgZXhpc3QgaW4gdGhlIHdvcmtzcGFjZS4gTXVzdCBiZSBub24tbnVsbCBhbmQgCi0gICAqIG5vbi1lbXB0eS4KLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgdGhlIGlkIG9mIGFuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uIE11c3QgYmUgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSBpZgotICAgKiBhbiBJUHJvamVjdCB3aXRoIHRoZSBuYW1lIHByb2plY3ROYW1lIGRvZXMgbm90IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIAotICAgKiBAcmV0dXJuIFN0cmluZyBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsCi0gICAqIHNlcnZlciB0eXBlL3NlcnZlciBpbnN0YW5jZSAoaWYgcHJlc2VudCksIHByb2plY3Qgb3IgcHJvamVjdCB0eXBlLiBSZXR1cm5zIGFuIGVtcHR5IFN0cmluZyBpZiBubyAKLSAgICogc3VjaCBzZXJ2aWNlUnVudGltZSBjb3VsZCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZpY2VSdW50aW1lSWQoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzLCBTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgYm9vbGVhbiBzZXJ2ZXJTZWxlY3RlZCA9ICh0cnMuZ2V0U2VydmVySWQoKSAhPSBudWxsKSAmJiAodHJzLmdldFNlcnZlcklkKCkubGVuZ3RoKCkgPiAwKTsgCi0gICAgLy9GaW5kIHRoZSBmaXJzdCBzZXJ2aWNlUnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlLCBydW50aW1lLCBzZXJ2ZXIsIGFuZCBwcm9qZWN0Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHRycy5nZXRUeXBlSWQoKSwgdHJzLmdldFNlcnZlcklkKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxkZXNjcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3NbaV0pOyAgICAgIAotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHRycy5nZXRSdW50aW1lSWQoKSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2ZXJTZWxlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydHNTZXJ2ZXIgPSBkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKGRlc2MuZ2V0SWQoKSwgdHJzLmdldFNlcnZlcklkKCkpOwotICAgICAgICAgIGlmICghc3VwcG9ydHNTZXJ2ZXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgaWYgKHByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFByb2plY3QoZGVzYy5nZXRJZCgpLCBwcm9qZWN0TmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9DaGVjayBpZiB0ZW1wbGF0ZSBpcyBzdXBwb3J0ZWQKLSAgICAgICAgICBpZiAoZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGRlc2MuZ2V0SWQoKSwgdGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBXZWIgc2VydmljZSBzY2VuYXJpbyBmcm9tIHRoZSBXZWIgc2VydmljZSB0eXBlLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHJldHVybiBpbnQgc2NlbmFyaW8gKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCBvciBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QX0RPV04pCi0gICAqLyAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFNjZW5hcmlvRnJvbVR5cGVJZChTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQodHlwZUlkLnN1YnN0cmluZygwLHR5cGVJZC5pbmRleE9mKCIvIikpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVuYXRpb24gdHlwZSBpZCBmcm9uIHRoZSBXZWIgc2VydmljZSB0eXBlIGlkLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHJldHVybiBTdHJpbmcgdGhlIFdlYlNlcnZpY2VJbXBsIGlkLgotICAgKi8gICAgICAgIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZChTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgcmV0dXJuIHR5cGVJZC5zdWJzdHJpbmcodHlwZUlkLmluZGV4T2YoIi8iKSsxKTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZS4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFJ1bnRpbWVzQnlTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkKSAKLSAgewotICAgIGludCBzY2VuYXJpbyA9IGdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwotICAgIFN0cmluZyBpbXBsSWQgPSBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh0eXBlSWQpOyAgICAKLSAgICBBcnJheUxpc3QgaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vQ2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQotICAgICAgaWYgKGRlc2MuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2NlbmFyaW8pCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldEJvdHRvbVVwKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBydW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWYgKCFpZHMuY29udGFpbnMocnVudGltZUlkKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlkcy5hZGQocnVudGltZUlkKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTjoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldFRvcERvd24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHJ1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7IAotICAgICAgICAgICAgICBpZiAoIWlkcy5jb250YWlucyhydW50aW1lSWQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWRzLmFkZChydW50aW1lSWQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKWlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgc2VydmljZVJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybnMgU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBzZXJ2aWNlUnVudGltZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkKSAKLSAgewotICAgIGludCBzY2VuYXJpbyA9IGdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwotICAgIFN0cmluZyBpbXBsSWQgPSBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh0eXBlSWQpOyAgICAKLSAgICBBcnJheUxpc3QgaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vQ2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQotICAgICAgaWYgKGRlc2MuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2NlbmFyaW8pCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldEJvdHRvbVVwKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gZGVzYy5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWRzLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICAgICAgICBpZiAoZGVzYy5nZXRUb3BEb3duKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gZGVzYy5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWRzLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZpY2VSdW50aW1lcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUsIHdpdGggcHJlZmVycmVkIHNlcnZlciAKLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybnMgU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBzZXJ2aWNlUnVudGltZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSAKLSAgewotCS8vICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkvLwkJCS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0JLy8JU3RyaW5nIHByZWZlcnJlZFJ1bnRpbWVJZCA9IGNvbnRleHQuZ2V0UnVudGltZUlkKCk7Ci0JLy8JU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0KLSAgICBpbnQgc2NlbmFyaW8gPSBnZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKTsKLSAgICBTdHJpbmcgaW1wbElkID0gZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQodHlwZUlkKTsgICAgCi0gICAgQXJyYXlMaXN0IGlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBBcnJheUxpc3QgaWRzUHJlZmVycmVkQnlTZXJ2ZXIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpICAgCi0gICAgewotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2VSdW50aW1lIHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAgICBpZiAoZGVzYy5nZXRTZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKS5lcXVhbHMoaW1wbElkKSkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChzY2VuYXJpbykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQOgotICAgICAgICAgICAgaWYgKGRlc2MuZ2V0Qm90dG9tVXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgPSBkZXNjLmdldElkKCk7IAotICAgICAgICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSgpICE9IG51bGwgJiYgZGVzYy5nZXRSdW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgICAgCSAgaWRzUHJlZmVycmVkQnlTZXJ2ZXIuYWRkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgCSAgaWRzLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICAgICAgICBpZiAoZGVzYy5nZXRUb3BEb3duKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gZGVzYy5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUoKSAhPSBudWxsICYmIGRlc2MuZ2V0UnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLSAgICAgICAgICAgIAkgIGlkc1ByZWZlcnJlZEJ5U2VydmVyLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIAkgIGlkcy5hZGQoc2VydmljZVJ1bnRpbWVJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBhcHBlbmQgcHJlZmVycmVkUnVudGltZSBhZnRlciBwcmVmZXJyZWRSdW50aW1lSWRzTGlzdFByZWZlcnJlZEJ5U2VydmVyCi0gICAgU3RyaW5nW10gcHJlZmVycmVkUnVudGltZUlkcyA9IG5ldyBTdHJpbmdbaWRzUHJlZmVycmVkQnlTZXJ2ZXIuc2l6ZSgpK2lkcy5zaXplKCldOwotICAgIEl0ZXJhdG9yIGl0cjEgPSBpZHNQcmVmZXJyZWRCeVNlcnZlci5pdGVyYXRvcigpOwotICAgIGludCBwcmVmZXJyZWRSVENvdW50ZXIgPSAwOwotICAgIHdoaWxlIChpdHIxLmhhc05leHQoKSkgewotCQlTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZykgaXRyMS5uZXh0KCk7Ci0JCXByZWZlcnJlZFJ1bnRpbWVJZHNbcHJlZmVycmVkUlRDb3VudGVyKytdID0gcnVudGltZUlkOwotCX0KLSAgICAKLSAgICBJdGVyYXRvciBpdHIyID0gaWRzLml0ZXJhdG9yKCk7ICAKLSAgICAgCi0gICAgd2hpbGUgKGl0cjIuaGFzTmV4dCgpKSB7Ci0JCVN0cmluZyBydW50aW1lSWQgPSAoU3RyaW5nKSBpdHIyLm5leHQoKTsKLQkJcHJlZmVycmVkUnVudGltZUlkc1twcmVmZXJyZWRSVENvdW50ZXIrK10gPSBydW50aW1lSWQ7CQkKLQl9Ci0KLSAgICByZXR1cm4gcHJlZmVycmVkUnVudGltZUlkczsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSB0eXBlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8gCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1J1bnRpbWVTdXBwb3J0ZWRGb3JTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmljZVJ1bnRpbWVJZHMgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKHNlcnZpY2VSdW50aW1lSWRzIT1udWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNlcnZpY2VSdW50aW1lSWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZHNbaV0pOwotICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWRzIG9mIGFsbCBzZXJ2ZXIgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVR5cGUoU3RyaW5nIHR5cGVJZCkKLSAgewotICAgIEFycmF5TGlzdCBzZXJ2ZXJGYWN0b3J5SWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZ1tdIHNydHMgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKHNydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNydHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vR2V0IHRoZSBydW50aW1lcyB0aGF0IHdvcmsgZm9yIHRoZSBmYWNldHMgcmVxdWlyZWQgZm9yIHRoaXMgc2VydmljZVJ1bnRpbWUgICAgICAgIAotICAgICAgICBTdHJpbmdbXSBmSWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoc3J0c1tpXSk7Ci0gICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFzZXJ2ZXJGYWN0b3J5SWRzLmNvbnRhaW5zKGZJZHNbal0pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZlckZhY3RvcnlJZHMuYWRkKGZJZHNbal0pOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gICAgCi0gICAgLy9UZW1wb3JhcmlseSByZXR1cm4gYWxsIHNlcnZlciB0eXBlIGlkcy4KLSAgICAvL3JldHVybiBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgaWQgb2YgYSBzZXJ2ZXIgdHlwZQotICAgKiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUuIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2ZXJTdXBwb3J0ZWRGb3JDaG9zZW5TZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKGZJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8Zklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKGZJZHNbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWRzIG9mIGFsbCBzZXJ2ZXIgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBzZXJ2aWNlUnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXJ2aWNlUnVudGltZUlkIGlkIG9mIGEgc2VydmljZVJ1bnRpbWUKLSAgICogCi0gICAqIEByZXR1cm5zIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiAKLSAgICovICAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQpCi0gIHsgICAgICAgCi0gICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgICAgICAKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgc2VydmVyIHR5cGVzCi0gICAgLy9yZXR1cm4gZ2V0QWxsU2VydmVyRmFjdG9yeUlkc1dpdGhSdW50aW1lcygpOwotICAgIHJldHVybiBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICB9IAotICAKLQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogc2VydmljZVJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgaWQgb2YgYSBzZXJ2ZXIgdHlwZQotICAgKiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIHNlcnZpY2VSdW50aW1lLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFNlcnZlcihTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZlcklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VSdW50aW1lKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGFiZWxzIGFuZCBpZHMgb2YgYWxsIFdlYiBzZXJ2aWNlIHR5cGVzLiBVc2VkIHRvIHBvcHVsYXRlIHRoZSBXZWIgc2VydmljZSB0eXBlIGNvbWJvIGJveCBvbgotICAgKiBwYWdlIDEgb2YgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZC4KLSAgICogQHJldHVybiB7QGxpbmsgTGFiZWxzQW5kSWRzfQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMYWJlbHNBbmRJZHMgZ2V0U2VydmljZVR5cGVMYWJlbHMoKQotICB7ICAgCi0gICAgTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gbmV3IExhYmVsc0FuZElkcygpOwotICAgIEl0ZXJhdG9yICAgICBpdGVyYXRvciA9IHJlZ2lzdHJ5LndlYlNlcnZpY2VUeXBlc0xpc3RfLml0ZXJhdG9yKCk7Ci0gICAgaW50ICAgICAgICAgIHNpemUgICAgID0gcmVnaXN0cnkud2ViU2VydmljZVR5cGVzTGlzdF8uc2l6ZSgpOwotICAgIFN0cmluZ1tdICAgICBsYWJlbHMgICA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgU3RyaW5nW10gICAgIGlkcyAgICAgID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICBpbnQgICAgICAgICAgaW5kZXggICAgPSAwOwotICAgIAotICAgIGxhYmVsSWRzLnNldExhYmVsc18oIGxhYmVscyApOwotICAgIGxhYmVsSWRzLnNldElkc18oIGlkcyApOwotICAgIAotICAgIHdoaWxlKCBpdGVyYXRvci5oYXNOZXh0KCkgKSAKLSAgICB7Ci0gICAgICBTdHJpbmcgd3N0ID0gKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpbnQgc2NlbmFyaW8gPSBnZXRTY2VuYXJpb0Zyb21UeXBlSWQod3N0KTsKLSAgICAgIFN0cmluZyBpbXBsSWQgPSBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh3c3QpOwotICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gZ2V0V2ViU2VydmljZUltcGxCeUlkKGltcGxJZCk7Ci0gICAgICBTdHJpbmcgaW1wbGxhYmVsID0gd3NpbXBsLmdldExhYmVsKCk7Ci0gICAgICBpZHNbaW5kZXhdICAgID0gd3N0OwotICAgICAgU3RyaW5nIHNjZW5MYWJlbCA9ICIiOwotICAgICAgc3dpdGNoKHNjZW5hcmlvKQotICAgICAgewotICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVA6Ci0gICAgICAgIHNjZW5MYWJlbCA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CT1RUT01VUF9MQUJFTCwgbmV3IFN0cmluZ1swXSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTjoKLSAgICAgICAgc2NlbkxhYmVsID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPUERPV05fTEFCRUwsIG5ldyBTdHJpbmdbMF0pOwotICAgICAgICBicmVhazsgCi0gICAgICBkZWZhdWx0OgotICAgICAgfQotICAgICAgbGFiZWxzW2luZGV4XSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5DT01CSU5FRF9UWVBFX0FORF9SVU5USU1FX0xBQkVMLCBuZXcgU3RyaW5nW117IHNjZW5MYWJlbCwgaW1wbGxhYmVsIH0pOwotICAgICAgaW5kZXgrKzsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBsYWJlbElkczsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAgCi0gICAqIEBwYXJhbSB0eXBlSWQgd2lsbCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFJ1bnRpbWVWYWx1ZUZvcihTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgU3RyaW5nW10gc3JJZHMgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKHNySWRzID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgIFN0cmluZyBwcmVmZXJyZWRSdW50aW1lSWQgPSBjb250ZXh0LmdldFJ1bnRpbWVJZCgpOwotICAgIAotICAgIFN0cmluZyBydW50aW1lSWQ7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcklkcy5sZW5ndGg7IGkrKykgewotCQlydW50aW1lSWQgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNySWRzW2ldKS5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLQkJaWYgKHJ1bnRpbWVJZC5lcXVhbHMocHJlZmVycmVkUnVudGltZUlkKSkgewotCQkJcmV0dXJuIHJ1bnRpbWVJZDsKLQkJfQotCX0KLSAgICAKLSAgICAvLyBUaGUgcHJlZmVycmVkIHJ1bnRpbWUgZG9lcyBub3Qgc3VwcG9ydCB0eXBlSWQuICBKdXN0IHJldHVybiB0aGUgZmlyc3Qgc2VydmljZSBydW50aW1lIHRoYXQgZG9lcyBzdXBwb3J0IHR5cGVJZC4KLSAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc3JJZHNbMF0pOwotICAgIHJldHVybiBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICB9ICAgICAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IHJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IHR5cGUuCi0gICAqICAKLSAgICogQHBhcmFtIHR5cGVJZCBUaGUgY2xpZW50IHR5cGUgSUQuIAotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgcnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgdHlwZS4gCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViIHNlcnZpY2UgY2xpZW50IHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFJ1bnRpbWVWYWx1ZUZvcihTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgU3RyaW5nW10gY3JJZHMgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQpOyAgICAgCQotICAgIGlmIChjcklkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICBTdHJpbmcgcHJlZmVycmVkUnVudGltZUlkID0gY29udGV4dC5nZXRSdW50aW1lSWQoKTsKLSAgICAKLSAgICBTdHJpbmcgcnVudGltZUlkOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3JJZHMubGVuZ3RoOyBpKyspIHsKLQkJcnVudGltZUlkID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKS5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLQkJaWYgKHJ1bnRpbWVJZC5lcXVhbHMocHJlZmVycmVkUnVudGltZUlkKSkgewotCQkJcmV0dXJuIHJ1bnRpbWVJZDsKLQkJfQotCX0KLSAgICAKLSAgICAvLyBUaGUgcHJlZmVycmVkIHJ1bnRpbWUgZG9lcyBub3Qgc3VwcG9ydCB0eXBlSWQuICBKdXN0IHJldHVybiB0aGUgZmlyc3Qgc2VydmljZSBydW50aW1lIHRoYXQgZG9lcyBzdXBwb3J0IHR5cGVJZC4KLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzWzBdKTsKLSAgICByZXR1cm4gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgc2VydmVyIHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogUmV0dXJucyB0aGUgc2VydmVyIHR5cGUgSUQgZnJvbSB0aGUgcHJlZmVyZW5jZSBpZiBpdCBzdXBwb3J0cyB0aGUgdHlwZUlkLgotICAgKiAgCi0gICAqIEBwYXJhbSB0eXBlSWQgd2lsbCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovICAgIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0U2VydmVyVmFsdWVGb3IoU3RyaW5nIHR5cGVJZCkKLSAgewotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChmSWRzPT1udWxsIHx8IGZJZHMubGVuZ3RoPT0wKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmSWRzLmxlbmd0aDsgaSsrKSB7Ci0JCVN0cmluZyBzZXJ2ZXJUeXBlSWQgPSBmSWRzW2ldOwotCQlpZiAoc2VydmVyVHlwZUlkLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKSB7Ci0JCQlyZXR1cm4gc2VydmVyVHlwZUlkOwotCQl9Ci0JfQotICAgIHJldHVybiBmSWRzWzBdOwotICB9ICAgIAotIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgdHlwZS4KLSAgICogUmV0dXJucyB0aGUgc2VydmVyIHR5cGUgSUQgZnJvbSB0aGUgcHJlZmVyZW5jZSBpZiBpdCBzdXBwb3J0cyB0aGUgdHlwZUlkLgotICAgKiAgIAotICAgKiBAcGFyYW0gdHlwZUlkIFRoZSBjbGllbnQgdHlwZSBJRC4KLSAgICogCi0gICAqIEByZXR1cm4gU3RyaW5nIGlkIG9mIGEgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgdHlwZS4gCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgc2VydmVyIHR5cGUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8gICAgCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFNlcnZlclZhbHVlRm9yKFN0cmluZyB0eXBlSWQpCXsJCQotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCVN0cmluZyBmaXJzdCA9IG51bGw7Ly90aGUgZmlyc3Qgc2VydmVyIGZvdW5kCSAgCi0JICAgIFN0cmluZ1tdIGNydHMgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQpOwotCi0JICAgIGlmIChjcnRzICE9IG51bGwpCi0JICAgIHsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNydHMubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgLy9HZXQgdGhlIHJ1bnRpbWVzIHRoYXQgd29yayBmb3IgdGhlIGZhY2V0cyByZXF1aXJlZCBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZSAgICAgICAgCi0JICAgIAlTdHJpbmdbXSBmSWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5Q2xpZW50UnVudGltZShjcnRzW2ldKTsKLQkgICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotCSAgICAgICAgewotCSAgICAgICAgICBpZiAoZmlyc3QgPT0gbnVsbCkgewotCSAgICAgICAgCSAgZmlyc3QgPSBmSWRzW2pdOwotCSAgICAgICAgICB9Ci0JICAgICAgICAgIGlmIChwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKGZJZHNbal0pKSB7Ci0JICAgICAgICAJICByZXR1cm4gZklkc1tqXTsvL2ZvdW5kIHRoZSBwcmVmZXJyZWQgb25lLCBzdG9wIHNlYXJjaGluZyBhbmQgcmV0dXJuIGl0Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9ICAgIAotCSAgICB9Ci0JICAgIHJldHVybiBmaXJzdDsKLSAgfSAgICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBpcwotICAgKiBzdXBwb3J0ZWQuIFVzZWQgZm9yIHZhbGlkYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHR5cGVJZCB3aWxsIGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBpcwotICAgKiBzdXBwb3J0ZWQuIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2ZXJSdW50aW1lVHlwZVN1cHBvcnRlZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdHlwZUlkKSAgCi0gIHsKLSAgICAvL0Vuc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2VydmljZVJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gdHlwZQotICAgIFN0cmluZ1tdIHNlcnZpY2VSdW50aW1lcyA9IGdldFNlcnZpY2VSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoc2VydmljZVJ1bnRpbWVzIT1udWxsICYmIHNlcnZpY2VSdW50aW1lcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL0Vuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBzZXJ2ZXIgcnVudGltZXMgc3VwcG9ydHMgdGhlIGdpdmVuIHNlcnZlcgotICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZpY2VSdW50aW1lcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lc1tpXSk7Ci0gICAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy9NYXRjaGVzIHRoZSB0eXBlIGFuZCB0aGUgcnVudGltZS4gQ2hlY2sgaWYgaXQgbWF0Y2hlcyB0aGUgc2VydmVyCi0gICAgICAgICAgU2V0IHJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMocnVudGltZXMpOwotICAgICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmSWRzW2pdLmVxdWFscyhzZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9kaWRuJ3QgZmluZCBhIG1hdGNoLiByZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFdlYiBzZXJ2aWNlIHR5cGUgaWRzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciB0aGUgcHJvdmlkZWQgc2VsZWN0aW9uLgotICAgKiBVc2VkIHRvIGRlZmF1bHQgdGhlIFdlYiBzZXJ2aWNlIHR5cGUgY29tYm8gYm94IG9uIHBhZ2UgMSBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkCi0gICAqIGJhc2VkIG9uIHRoZSB1c2VyJ3MgaW5pdGlhbCBzZWxlY3Rpb24uCi0gICAqIEBwYXJhbSBzZWxlY3Rpb24KLSAgICogQHJldHVybiBTdHJpbmdbXSBhbiBhcnJheSBvZiBXZWIgc2VydmljZSB0eXBlIGlkcyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlIHByb3ZpZGVkIHNlbGVjdGlvbi4KLSAgICogUmV0dXJucyBudWxsIGlmIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHkgb3Igbm8gc3VpdGFibGUgV2ViIHNlcnZpY2UgdHlwZXMgYXJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVHlwZUJ5U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIFR5cGVTZWxlY3Rpb25GaWx0ZXIyIHRzZiA9IG5ldyBUeXBlU2VsZWN0aW9uRmlsdGVyMigpOwotICAgIFN0cmluZ1tdIHdzdCA9IHRzZi5nZXRXZWJTZXJ2aWNlVHlwZUJ5SW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb24sIHJlZ2lzdHJ5LndlYlNlcnZpY2VUeXBlc0xpc3RfKTsKLSAgICByZXR1cm4gd3N0ID09IG51bGwgPyBudWxsIDogd3N0OwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIDogaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEBwYXJhbSBmYWN0b3J5SWQgOiBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBydW50aW1lIGZvciB0aGUgc2VydmljZSBzaWRlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNSdW50aW1lU3VwcG9ydFNlcnZlckZvclNlcnZpY2VTaWRlKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcnMgdGhhdCBwb2ludCB0byB0aGlzIHJ1bnRpbWVJZAotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vY2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBwb2ludHMgdG8gcnVudGltZUlkCi0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMoZmFjZXRSdW50aW1lcyk7Ci0gICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGZJZHNbal0uZXF1YWxzKGZhY3RvcnlJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgICAKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9ObyBzZXJ2aWNlUnVudGltZSBtYXRjaGVkLiBSZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIG9uIHRoZSBzZXJ2aWNlIHNpZGUuCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaXJzdFN1cHBvcnRlZFNlcnZlckZvclNlcnZpY2VTaWRlKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcnMgdGhhdCBwb2ludCB0byB0aGlzIHJ1bnRpbWVJZAotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vY2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBwb2ludHMgdG8gcnVudGltZUlkCi0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgICAgU3RyaW5nW10gZmFjdG9yeUlkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMoZmFjZXRSdW50aW1lcyk7Ci0gICAgICAgIGlmIChmYWN0b3J5SWRzIT1udWxsICYmIGZhY3RvcnlJZHMubGVuZ3RoID4wKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhY3RvcnlJZHNbMF07Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9kaWRuJ3QgZ2V0IGEgc2luZ2xlIHN1aXRhYmxlIHNlcnZlciB0eXBlIGlkLCByZXR1cm4gbnVsbC4KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2Ugd2hpY2ggc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZQotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2YgcHJvamVjdCBuYW1lcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFByb2plY3RzRm9yU2VydmljZVR5cGVBbmRSdW50aW1lKFN0cmluZyB0eXBlSWQsIFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIEFycmF5TGlzdCB2YWxpZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChkb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QodHlwZUlkLCBydW50aW1lSWQsIHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwcm9qZWN0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUgYW5kIAotICAgKiBXZWIgc2VydmljZSBydW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZSBhbmQgV2ViIHNlcnZpY2UgcnVudGltZSBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiBwcm9qZWN0TmFtZSBpcyBudWxsIG9yIGVtcHR5PC9saT4KLSAgICogPC91bD4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3Nbal0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChkZXNjc1tqXSwgcHJvamVjdE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUnVudGltZUlkIGlkIG9mIGEgc2VydmljZVJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuCi0gICAqIHNlcnZpY2VSdW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgcHJvamVjdE5hbWUgaXMgbnVsbCBvciBlbXB0eTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGZhbHNlLCBzZXJ2aWNlUnVudGltZUlkLCBwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKGZtICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZtLmlzTWF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAgIAotICB9ICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBpZHMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlCi0gICAqIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IGlkcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUKLSAgICogYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgbm8gc2VydmljZVJ1bnRpbWVzIHN1cHBvcnRpbmcKLSAgICogdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZpY2VQcm9qZWN0VGVtcGxhdGVzKFN0cmluZyB0eXBlSWQsIFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICBTdHJpbmdbXSBzcklkcyA9IGdldFNlcnZpY2VSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoc3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBBcnJheUxpc3QgdGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc3JJZHNbaV0pOwotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2VydmljZVJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgIAotICAgICAgICAvL0FkZCB0aGUgdGVtcGxhdGUgaWRzIHRvIHRoZSBsaXN0IGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFkZGVkCi0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IHRlbXBsYXRlcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKWl0ci5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCF0ZW1wbGF0ZUlkTGlzdC5jb250YWlucyh0ZW1wbGF0ZS5nZXRJZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZUlkTGlzdC5hZGQodGVtcGxhdGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9ICAKLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXRlbXBsYXRlSWRMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1tde30pOyAgICAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlCi0gICAqIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc1NlcnZpY2VUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIFN0cmluZ1tdIHNySWRzID0gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChzcklkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNySWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzcklkc1tpXSk7Ci0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgLy9HZXQgdGhlIHRlbXBsYXRlcyBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZQotICAgICAgICBTZXQgdGVtcGxhdGVzID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoc3JJZHNbaV0pOwotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBpZiBhbnkgb2YgdGhlIHRlbXBsYXRlIGlkcyBtYXRjaCB0aGUgZ2l2ZW4gb25lLgotICAgICAgICBJdGVyYXRvciBpdHIgPSB0ZW1wbGF0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSlpdHIubmV4dCgpOwotICAgICAgICAgIGlmICh0ZW1wbGF0ZS5nZXRJZCgpLmVxdWFscyh0ZW1wbGF0ZUlkKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfSAgCi0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gc3VwcG9ydHMgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLgotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBzZXJ2aWNlUnVudGltZS4gUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIHNlcnZpY2VSdW50aW1lCi0gICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIGNoZWNraW5nVGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICByZXR1cm4gdGVtcGxhdGVzLmNvbnRhaW5zKGNoZWNraW5nVGVtcGxhdGUpOwotICB9ICAKLSAgCi0gIC8vQ2xpZW50LXNpZGUgdXRpbGl0aWVzCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgV2ViU2VydmljZUNsaWVudEltcGwgZ2l2ZW4gdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBpZCAKLSAgICogQHJldHVybiB7QGxpbmsgV2ViU2VydmljZUNsaWVudEltcGx9IHdpdGggdGhlIGdpdmVuIGlkCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViU2VydmljZUNsaWVudEltcGwgY2Fubm90IGJlIGZvdW5kLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDbGllbnRJbXBsIGdldFdlYlNlcnZpY2VDbGllbnRJbXBsQnlJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gcmVnaXN0cnkud2ViU2VydmljZUNsaWVudEltcGxzXy5nZXQoaWQpOwotICAgIGlmIChyZXN1bHQhPW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChXZWJTZXJ2aWNlQ2xpZW50SW1wbClyZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSB7QGxpbmsgQ2xpZW50UnVudGltZURlc2NyaXB0b3J9IGdpdmVuIHRoZSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUuCi0gICAqIEBwYXJhbSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHJldHVybiBDbGllbnRSdW50aW1lRGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlbiBpZAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy5nZXQoaWQpOwotICAgIGlmIChyZXN1bHQhPW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilyZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgICAgCi0gIH0gICAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIElXZWJTZXJ2aWNlUnVudGltZX0gb2YgdGhlIGdpdmVuIGNsaWVudFJ1bnRpbWUuIEV4dGVuZGVycyBwcm92aWRlIHRoZSBmdWxseSAKLSAgICogcXVhbGlmaWVkIG5hbWUgb2YgYSBjb25jcmV0ZSBJV2ViU2VydmljZVJ1bnRpbWUgaW4gdGhlIGNsYXNzIGF0dHJpYnV0ZSBvZiBhIGNsaWVudFJ1bnRpbWVzIGV4dGVuc2lvbi4KLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHJldHVybiBJV2ViU2VydmljZVJ1bnRpbWUKLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBJV2ViU2VydmljZVJ1bnRpbWUgZ2V0Q2xpZW50UnVudGltZSggU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCApCi0gIHsKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgSVdlYlNlcnZpY2VSdW50aW1lICAgIHdlYnNlcnZpY2VSdW50aW1lICAgICA9IG51bGw7Ci0gICAgaWYgKGRlc2NyaXB0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHdlYnNlcnZpY2VSdW50aW1lID0gZGVzY3JpcHRvci5nZXRXZWJTZXJ2aWNlUnVudGltZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd2Vic2VydmljZVJ1bnRpbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgcHJvdmlkZWQgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsCi0gICAqIHNlcnZlciB0eXBlL3NlcnZlciBpbnN0YW5jZSAoaWYgcHJlc2VudCksIHByb2plY3Qgb3IgcHJvamVjdCB0eXBlLgotICAgKiBAcGFyYW0gdHJzIGFuIGluc3RhbmNlIG9mIHtAbGluayBUeXBlUnVudGltZVNlcnZlcn0gY29udGFpbmluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLCBXZWIgc2VydmljZSBydW50aW1lIGlkLAotICAgKiBzZXJ2ZXIgdHlwZSBpZCBhbmQgc2VydmVyIGluc3RhbmNlIGlkLiBUaGUgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQgbXVzdCBiZSBub24tbnVsbCAKLSAgICogYW5kIG5vbi1lbXB0eS4gVGhlIHNlcnZlciB0eXBlIGlkIGFuZCBzZXJ2ZXIgaW5zdGFuY2UgaWQgbWF5IGJlIG51bGwgb3IgZW1wdHkuCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSB0aGUgbmFtZSBvZiBhbiBJUHJvamVjdCB0aGF5IG1heSBvciBtYXQgbm90IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIE11c3QgYmUgbm9uLW51bGwgYW5kIAotICAgKiBub24tZW1wdHkuCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIHRoZSBpZCBvZiBhbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LiBNdXN0IGJlIG5vbi1udWxsIGFuZCBub24tZW1wdHkgaWYKLSAgICogYW4gSVByb2plY3Qgd2l0aCB0aGUgbmFtZSBwcm9qZWN0TmFtZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya3NwYWNlLiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBjbGllbnRSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLAotICAgKiBzZXJ2ZXIgdHlwZS9zZXJ2ZXIgaW5zdGFuY2UgKGlmIHByZXNlbnQpLCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZS4gUmV0dXJucyBhbiBlbXB0eSBTdHJpbmcgaWYgbm8gCi0gICAqIHN1Y2ggY2xpZW50UnVudGltZSBjb3VsZCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlkKFR5cGVSdW50aW1lU2VydmVyIHRycywgU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIGJvb2xlYW4gc2VydmVyU2VsZWN0ZWQgPSAodHJzLmdldFNlcnZlcklkKCkhPW51bGwpICYmICh0cnMuZ2V0U2VydmVySWQoKS5sZW5ndGgoKT4wKTsKLSAgICAvL0ZpbmQgdGhlIGZpcnN0IGNsaWVudFJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSwgcnVudGltZSwgc2VydmVyLCBhbmQgcHJvamVjdAotICAgIFN0cmluZ1tdIGRlc2NzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUodHJzLmdldFR5cGVJZCgpLCB0cnMuZ2V0U2VydmVySWQoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGRlc2NzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3NbaV0pOyAgICAgIAotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHRycy5nZXRSdW50aW1lSWQoKSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2ZXJTZWxlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydHNTZXJ2ZXIgPSBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoZGVzYy5nZXRJZCgpLCB0cnMuZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgaWYgKCFzdXBwb3J0c1NlcnZlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KGRlc2MuZ2V0SWQoKSwgcHJvamVjdE5hbWUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBkZXNjLmdldElkKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vQ2hlY2sgaWYgdGVtcGxhdGUgaXMgc3VwcG9ydGVkCi0gICAgICAgICAgaWYgKGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGRlc2MuZ2V0SWQoKSwgdGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgV2ViIHNlcnZpY2UgcnVudGltZSBpZHMgZm9yIHRoZSBjbGllbnQgc2lkZS4KLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBXZWIgc2VydmljZSBydW50aW1lIGlkcyBmb3IgdGhlIGNsaWVudCBzaWRlLgotICAgKiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbFJ1bnRpbWVzRm9yQ2xpZW50U2lkZSgpIAotICB7Ci0gICAgQXJyYXlMaXN0IHJ1bnRpbWVJZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOyAKLSAgICAgIGlmICghcnVudGltZUlkcy5jb250YWlucyh0aGlzUnVudGltZUlkKSkKLSAgICAgIHJ1bnRpbWVJZHMuYWRkKHRoaXNSdW50aW1lSWQpOwotICAgIH0gICAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXJ1bnRpbWVJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShTdHJpbmcgY2xpZW50SW1wbElkKSAKLSAgewotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2VSdW50aW1lIHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAgICBpZiAoZGVzYy5nZXRDbGllbnRJbXBsZW1lbnRhdGlvblR5cGUoKS5nZXRJZCgpLmVxdWFscyhjbGllbnRJbXBsSWQpKQotICAgICAgewotICAgICAgICBpZHMuYWRkKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIHRoZSBwcmVmZXJyZWQgc2VydmVyCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShTdHJpbmcgY2xpZW50SW1wbElkLCBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSAKLSAgewotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IGlkc1ByZWZlcnJlZEJ5U2VydmVyID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5jbGllbnRSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpICAgCi0gICAgewotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vQ2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQotICAgICAgaWYgKGRlc2MuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKS5lcXVhbHMoY2xpZW50SW1wbElkKSkKLSAgICAgIHsKLSAgICAJICBTdHJpbmcgY2xpZW50UnVudGltZUlkID0gZGVzYy5nZXRJZCgpOwotICAgIAkgIGlmIChkZXNjLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCAmJiBkZXNjLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpIHsKLSAgICAJCSAgaWRzUHJlZmVycmVkQnlTZXJ2ZXIuYWRkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgCSAgfSBlbHNlIHsKLSAgICAJCSAgaWRzLmFkZChjbGllbnRSdW50aW1lSWQpOwotICAgIAkgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gLy8gYXBwZW5kIHByZWZlcnJlZFJ1bnRpbWUgYWZ0ZXIgcHJlZmVycmVkUnVudGltZUlkc0xpc3RQcmVmZXJyZWRCeVNlcnZlcgotICAgIFN0cmluZ1tdIHByZWZlcnJlZFJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW2lkc1ByZWZlcnJlZEJ5U2VydmVyLnNpemUoKStpZHMuc2l6ZSgpXTsKLSAgICBJdGVyYXRvciBpdHIxID0gaWRzUHJlZmVycmVkQnlTZXJ2ZXIuaXRlcmF0b3IoKTsKLSAgICBpbnQgcHJlZmVycmVkUlRDb3VudGVyID0gMDsKLSAgICB3aGlsZSAoaXRyMS5oYXNOZXh0KCkpIHsKLQkJU3RyaW5nIHJ1bnRpbWVJZCA9IChTdHJpbmcpIGl0cjEubmV4dCgpOwotCQlwcmVmZXJyZWRSdW50aW1lSWRzW3ByZWZlcnJlZFJUQ291bnRlcisrXSA9IHJ1bnRpbWVJZDsKLQl9Ci0gICAgCi0gICAgSXRlcmF0b3IgaXRyMiA9IGlkcy5pdGVyYXRvcigpOyAgCi0gICAgIAotICAgIHdoaWxlIChpdHIyLmhhc05leHQoKSkgewotCQlTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZykgaXRyMi5uZXh0KCk7Ci0JCXByZWZlcnJlZFJ1bnRpbWVJZHNbcHJlZmVycmVkUlRDb3VudGVyKytdID0gcnVudGltZUlkOwkJCi0JfQotCi0gICAgcmV0dXJuIHByZWZlcnJlZFJ1bnRpbWVJZHM7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBXZWIgc2VydmljZSBydW50aW1lcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UnVudGltZXNCeUNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCkgCi0gIHsKLSAgICBBcnJheUxpc3QgcnVudGltZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAvL0NoZWNrIGlmIHRoaXMgc2VydmljZVJ1bnRpbWUgc3VwcG9ydHMgdGhlIGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICAgIGlmIChkZXNjLmdldENsaWVudEltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGNsaWVudEltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghcnVudGltZUlkcy5jb250YWlucyhkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJ1bnRpbWVJZHMuYWRkKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pcnVudGltZUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnVudGltZVN1cHBvcnRlZEZvckNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNsaWVudFJ1bnRpbWVJZHMgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShjbGllbnRJbXBsSWQpOwotICAgIGlmIChjbGllbnRSdW50aW1lSWRzIT1udWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaSA8IGNsaWVudFJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkc1tpXSk7Ci0gICAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgc2VydmVyIHR5cGUgaWRzIHdpdGggY29uZmlndXJlZCBzZXJ2ZXIgcnVudGltZXMuCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2Ygc2VydmVyIHR5cGUgaWRzLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsQ2xpZW50U2VydmVyRmFjdG9yeUlkcygpIAotICB7ICAgIAotICAgIC8vSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIC8vd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIC8vewotICAgICAgLy9UT0RPIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIHNlcnZlciB0eXBlcyBhbmQgc2VlIGlmIHRoZWlyIHJ1bnRpbWUgdHlwZXMgaGF2ZSBhbgotICAgICAgLy9pZCB0aGF0IG1hdGNoZXMgdGhlIHJ1bnRpbWUgdHlwZSBvZiBhbnkgb2YgdGhlIHJ1bnRpbWVzLiAgICAgICAgICAgIAotICAgICAgLy8gQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vIFNldCBydW50aW1lcyA9IGdldFJ1bnRpbWVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgLy8gSVNlcnZlclR5cGVbXSBhbGxTZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLSAgICAvL30KLSAgICAvL3JldHVybiAoU3RyaW5nW10pc2VydmVyRmFjdG9yeUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgc2VydmVyIHR5cGVzCi0gICAgcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLgotICAgKiAgCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKFN0cmluZyBjbGllbnRJbXBsSWQpCi0gIHsKLSAgICBBcnJheUxpc3Qgc2VydmVyRmFjdG9yeUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmdbXSBjcnRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3J0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgLy9HZXQgdGhlIHJ1bnRpbWVzIHRoYXQgd29yayBmb3IgdGhlIGZhY2V0cyByZXF1aXJlZCBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZSAgICAgICAgCi0gICAgICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGNydHNbaV0pOwotICAgICAgICBmb3IgKGludCBqPTA7IGo8Zklkcy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmICghc2VydmVyRmFjdG9yeUlkcy5jb250YWlucyhmSWRzW2pdKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2ZXJGYWN0b3J5SWRzLmFkZChmSWRzW2pdKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZlclN1cHBvcnRlZEZvckNob3NlbkNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKGNsaWVudEltcGxJZCk7Ci0gICAgaWYgKGZJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8Zklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKGZJZHNbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIGNsaWVudFJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50UnVudGltZUlkIGlkIG9mIGEgY2xpZW50UnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZS4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlckZhY3RvcnlJZHNCeUNsaWVudFJ1bnRpbWUoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkKLSAgeyAgICAgICAKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLQotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgIHJldHVybiBmSWRzOyAgICAKLSAgfSAgICAKLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBjbGllbnRSdW50aW1lLgotICAgKiAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBjbGllbnRSdW50aW1lLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihTdHJpbmcgY2xpZW50UnVudGltZUlkLCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmVySWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5Q2xpZW50UnVudGltZShjbGllbnRSdW50aW1lSWQpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcGFyYW0gZmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZm9yIHRoZSBjbGllbnQgc2lkZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzUnVudGltZVN1cHBvcnRTZXJ2ZXJGb3JDbGllbnRTaWRlKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9ycyB0aGF0IHBvaW50IHRvIHRoaXMgcnVudGltZUlkCi0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9jaGVjayBpZiB0aGlzIGNsaWVudFJ1bnRpbWUgcG9pbnRzIHRvIHJ1bnRpbWVJZAotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8Zklkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChmSWRzW2ldLmVxdWFscyhmYWN0b3J5SWQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL05vIG1hdGNoLgotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogb24gdGhlIGNsaWVudCBzaWRlLgotICAgKiAKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmcgdGhlIGlkIG9mIGEgc2VydmVyIHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBvbiB0aGUgY2xpZW50IHNpZGUuIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgc2VydmVyIHR5cGUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Rmlyc3RTdXBwb3J0ZWRTZXJ2ZXJGb3JDbGllbnRTaWRlKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9ycyB0aGF0IHBvaW50IHRvIHRoaXMgcnVudGltZUlkCi0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9jaGVjayBpZiB0aGlzIGNsaWVudFJ1bnRpbWUgcG9pbnRzIHRvIHJ1bnRpbWVJZAotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgIFN0cmluZ1tdIGZhY3RvcnlJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgICAgICBpZiAoZmFjdG9yeUlkcyE9bnVsbCAmJiBmYWN0b3J5SWRzLmxlbmd0aCA+MCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBmYWN0b3J5SWRzWzBdOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTm8gc3VpdGFibGUgc2VydmVycyBmb3VuZC4gUmV0dXJuIG51bGwuCi0gICAgcmV0dXJuIG51bGw7Ci0KLSAgfQotICAKLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2Ygc2VydmVyIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsIGFuZCAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaXMgc3VwcG9ydGVkLiBVc2VkIGZvciB2YWxpZGF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCAKLSAgICogYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlzIHN1cHBvcnRlZC4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBjbGllbnRJbXBsSWQpICAKLSAgewotICAgIC8vRW5zdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbGllbnRSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIHR5cGUKLSAgICBTdHJpbmdbXSBjbGllbnRSdW50aW1lcyA9IGdldENsaWVudFJ1bnRpbWVzQnlUeXBlKGNsaWVudEltcGxJZCk7Ci0gICAgaWYgKGNsaWVudFJ1bnRpbWVzIT1udWxsICYmIGNsaWVudFJ1bnRpbWVzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIC8vRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIHNlcnZlciBydW50aW1lcyBzdXBwb3J0cyB0aGUgZ2l2ZW4gc2VydmVyCi0gICAgICBmb3IgKGludCBpPTA7IGk8Y2xpZW50UnVudGltZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZXNbaV0pOwotICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgICAgewotICAgICAgICAgIC8vTWF0Y2hlZCB0eXBlIGFuZCBydW50aW1lLiBDaGVjayB0aGUgc2VydmVyLgotICAgICAgICAgIFN0cmluZ1tdIGZhY3RvcnlJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGZhY3RvcnlJZHMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY3RvcnlJZHNbal0uZXF1YWxzKHNlcnZlckZhY3RvcnlJZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL05vIG1hdGNoIGZvdW5kLiByZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBpZHMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gaWRzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgbm8gY2xpZW50UnVudGltZXMgc3VwcG9ydGluZwotICAgKiB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNySWRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBBcnJheUxpc3QgdGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKTsKLSAgICAgIFN0cmluZyB0aGlzUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIGlmICh0aGlzUnVudGltZUlkLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vQWRkIHRoZSB0ZW1wbGF0ZSBpZHMgdG8gdGhlIGxpc3QgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgICBpZiAoIXRlbXBsYXRlSWRMaXN0LmNvbnRhaW5zKHRlbXBsYXRlLmdldElkKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRlbXBsYXRlSWRMaXN0LmFkZCh0ZW1wbGF0ZS5nZXRJZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgIH0gIAotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pdGVtcGxhdGVJZExpc3QudG9BcnJheShuZXcgU3RyaW5nW117fSk7ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50SW1wbElkIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGFuZCBXZWIgc2VydmljZSBydW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNDbGllbnRUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgY2xpZW50SW1wbElkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNySWRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKTsKLSAgICAgIFN0cmluZyB0aGlzUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIGlmICh0aGlzUnVudGltZUlkLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoY3JJZHNbaV0pOwotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBpZiB0aGUgdGVtcGxhdGUgaWRzIGNvbnRhaW5zIHRoZSB0ZW1wbGF0ZSB3ZSdyZSBjaGVja2luZyBmb3IKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgICBpZiAodGVtcGxhdGUuZ2V0SWQoKS5lcXVhbHModGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9ICAKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7ICAgIAotICB9ICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gCi0gICAqIHN1cHBvcnRzIHRoZSBnaXZlbiBjbGllbnRSdW50aW1lCi0gICAqICAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIGNsaWVudFJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgY2xpZW50UnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgY2xpZW50UnVudGltZQotICAgIFNldCB0ZW1wbGF0ZXMgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgY2hlY2tpbmdUZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIHJldHVybiB0ZW1wbGF0ZXMuY29udGFpbnMoY2hlY2tpbmdUZW1wbGF0ZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbHMgYW5kIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGVzLiAKLSAgICogVXNlZCB0byBwb3B1bGF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHR5cGUgY29tYm8gYm94IG9uCi0gICAqIHBhZ2UgMSBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFuZCBXZWIgc2VydmljZSBjbGllbnQgd2l6YXJkLgotICAgKiBAcmV0dXJuIHtAbGluayBMYWJlbHNBbmRJZHN9Ci0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgTGFiZWxzQW5kSWRzIGdldENsaWVudFR5cGVMYWJlbHMoKQotICB7Ci0gICAgCi0gICAgTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gbmV3IExhYmVsc0FuZElkcygpOwotICAgIFN0cmluZ1tdIGlkc0FycmF5ID0gbmV3IFN0cmluZ1swXTsKLSAgICBTdHJpbmdbXSBsYWJlbHNBcnJheSA9IG5ldyBTdHJpbmdbMF07Ci0gICAgbGFiZWxJZHMuc2V0SWRzXyhpZHNBcnJheSk7Ci0gICAgbGFiZWxJZHMuc2V0TGFiZWxzXyhsYWJlbHNBcnJheSk7Ci0gIAotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IGxhYmVscyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gICAgSXRlcmF0b3IgaXRyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ci5uZXh0KCk7Ci0gICAgICBXZWJTZXJ2aWNlQ2xpZW50SW1wbCB0aGlzQ2xpZW50SW1wbCA9IGRlc2MuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCk7Ci0gICAgICBpZiAoIWlkcy5jb250YWlucyh0aGlzQ2xpZW50SW1wbC5nZXRJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgaWRzLmFkZCh0aGlzQ2xpZW50SW1wbC5nZXRJZCgpKTsKLSAgICAgICAgbGFiZWxzLmFkZCh0aGlzQ2xpZW50SW1wbC5nZXRMYWJlbCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaWRzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgaWRzQXJyYXkgPSAoU3RyaW5nW10pIGlkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgbGFiZWxzQXJyYXkgPSAoU3RyaW5nW10pIGxhYmVscy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgbGFiZWxJZHMuc2V0SWRzXyhpZHNBcnJheSk7Ci0gICAgICBsYWJlbElkcy5zZXRMYWJlbHNfKGxhYmVsc0FycmF5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFiZWxJZHM7Ci0KLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgc2VydmVyIHR5cGUgaWRzIGZvciB3aGljaCB0aGVyZSBhcmUgY29uZmlndXJlZCBzZXJ2ZXIgcnVudGltZXMKLSAgICogcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBzZXJ2ZXIgdHlwZSBpZHMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb25maWd1cmVkIHNlcnZlciBydW50aW1lcwotICAgKiBwcmVzZW50IGluIHRoZSB3b3Jrc3BhY2UuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCkKLSAgewotICAgIEFycmF5TGlzdCBmaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIElTZXJ2ZXJUeXBlW10gc3RzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVtdIHJ0cyA9IFNlcnZlckNvcmUuZ2V0UnVudGltZXMoKTsKLSAgICAKLSAgICBmb3IgKGludCBpPTA7IGk8c3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElTZXJ2ZXJUeXBlIHN0ID0gc3RzW2ldOwotICAgICAgZm9yIChpbnQgaj0wOyBqPHJ0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAJaWYgKHN0ID09IG51bGwgfHwgc3QuZ2V0UnVudGltZVR5cGUoKSA9PSBudWxsKSBicmVhazsgICAgCSAgCi0gICAgICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZSBydCA9IHJ0c1tqXTsKLSAgICAgICAgLy8gSWYgdGhlIHNlcnZlciB0eXBlIGhhcyB0aGUgc2FtZSBydW50aW1lIHR5cGUgYXMgdGhpcyBydW50aW1lLCBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgICAgU3RyaW5nIHNlcnZlclR5cGVSdW50aW1lVHlwZUlkID0gc3QuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgCUlSdW50aW1lVHlwZSBydFR5cGUgPSBydC5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgICAJaWYgKHJ0VHlwZSAhPSBudWxsKQotICAgICAgICAJewotCQkgICAgICAgIFN0cmluZyBydW50aW1lUnVudGltZVR5cGVJZCA9IHJ0VHlwZS5nZXRJZCgpOwotCQkgICAgICAgIGlmIChzZXJ2ZXJUeXBlUnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVJ1bnRpbWVUeXBlSWQpKQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIGlmICghZmlkcy5jb250YWlucyhzdC5nZXRJZCgpKSkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZmlkcy5hZGQoc3QuZ2V0SWQoKSk7Ci0JCSAgICAgICAgICB9Ci0JCSAgICAgICAgfQotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlmaWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB3aGljaCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgCi0gICAqIGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBwcm9qZWN0IG5hbWVzLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkKQotICB7Ci0gICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IEZhY2V0VXRpbHMuZ2V0QWxsUHJvamVjdHMoKTsKLSAgICBBcnJheUxpc3QgdmFsaWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QodHlwZUlkLCBydW50aW1lSWQsIHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIAotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhbiBJUHJvamVjdCBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZSBhbmQgCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAqIDx1bD4gCi0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZSBhbmQgCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgcHJvamVjdE5hbWUgaXMgbnVsbCBvciBlbXB0eTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3MubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChkZXNjc1tqXSk7Ci0gICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoZGVzY3Nbal0sIHByb2plY3ROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAKLSAgfSAgCi0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIGNsaWVudFJ1bnRpbWUuCi0gICAqIEBwYXJhbSBjbGllbnRSdW50aW1lSWQgaWQgb2YgYSBjbGllbnRSdW50aW1lCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGFuIElQcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwcm9qZWN0IHN1cHBvcnRzIHRoZSBnaXZlbgotICAgKiBjbGllbnRSdW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZSBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiBwcm9qZWN0TmFtZSBpcyBudWxsIG9yIGVtcHR5PC9saT4KLSAgICogPC91bD4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KFN0cmluZyBjbGllbnRSdW50aW1lSWQsIFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdCh0cnVlLCBjbGllbnRSdW50aW1lSWQsIHByb2plY3ROYW1lKTsKLSAgICBpZiAoZm0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZm0uaXNNYXRjaCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICAKLSAgLy9VdGlsaXRpZXMgdXNlZCBieSB0aGUgU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlCi0gIAotICBwcml2YXRlIHN0YXRpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgc2VydmVyRmFjdG9yeUlkQnlMYWJlbF87Ci0gIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSBydW50aW1lSWRCeUxhYmVsXzsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2VsZWN0aW9uTGlzdENob2ljZXN9IGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgCi0gICAqIHNlcnZlciB0eXBlID4gV2ViIHNlcnZpY2UgcnVudGltZSA+IEoyRUUgY2FzY2FkaW5nIGxpc3RzIC4KLSAgICoge0BsaW5rIFNlbGVjdGlvbkxpc3RDaG9pY2VzfSBpcyBhIGRhdGEgc3RydWN0dXJlICB3aGljaCBpcyBsaWtlIGEgY2FzY2FkaW5nCi0gICAqIHNldCBvZiBsaXN0cyB1c2VmdWwgZm9yIHBvcHVsYXRpbmcgYSBncm91cCBvZiBjb21ibyBib3hlcyBpbiB3aGljaCB0aGUgCi0gICAqIHNlbGVjdGlvbiBpbiBhIGdpdmVuIGNvbWJvIGJveCBkZXRlcm1pbmVzIHRoZSBsaXN0IG9mIGl0ZW1zIHVzZWQgdG8gcG9wdWxhdGUKLSAgICogdGhlIGNvbWJvIGJveCBiZWxvdyBpdC4gVGhlIFNlcnZlciBSdW50aW1lIHByZWZlcmVuY2UgcGFnZSBjb250YWlucyB0d28gY29tYm8KLSAgICogYm94ZXM6IG9uZSBmb3Igc2VydmVyIHR5cGVzIGFuZCwgYmVsb3cgaXQsIG9uZSBmb3IgV2ViIHNlcnZpY2UgcnVudGltZXMuCi0gICAqIFRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3ggaXMgbWVhbnQgdG8gY29udGFpbiB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNlcnZlciB0eXBlcwotICAgKiB0aGF0IHN1cHBvcnQgYXQgbGVhc3Qgb25lIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgb24gZWl0aGVyIHRoZSBjbGllbnQgb3Igc2VydmljZSBzaWRlLiAKLSAgICogVGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY29tYm8gYm94IGlzIG1lYW50IHRvIGNvbnRhaW4gdGhlIHN1YnNldCBvZiBXZWIgc2VydmljZSBydW50aW1lcwotICAgKiBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciB0eXBlIHNlbGVjdGVkIGluIHRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3guCi0gICAqIFRoZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBoYXMgdGhyZWUgbGlzdHM6IHNlcnZlciB0eXBlcywgV2ViIHNlcnZpY2UgcnVudGltZXMsCi0gICAqIGFuZCBKMkVFIGxldmVscy4gVGhlIGZpcnN0IHR3byBsaXN0cyBjb3JyZXNwb25kIHRvIHRoZSBjb21ibyBib3hlcyBvbiB0aGUgcHJlZmVyZW5jZQotICAgKiBwYWdlIGFuZCBhcmUgdXNlZCB0byBwb3B1bGF0ZSB0aGVtLiBUaGUgSjJFRSBsZXZlbHMgbGlzdCBpcyBhIGhpc3RvcmljYWwgcmVtbmFudCBmcm9tCi0gICAqIHdoZW4gSjJFRSBsZXZlbHMgdXNlZCB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHByZWZlcmVuY2UgcGFnZS4gSXQgcmVtYWlucyBpbiB0aGlzIAotICAgKiBkYXRhIHN0cnVjdHVyZSB3aXRoIHNvbWUgaGFyZC1jb2RlZCB2YWx1ZXMgYnV0IGlzIG5vdCByZW5kZXJlZCB0byB0aGUgdXNlci4gCi0gICAqIAotICAgKiBAcmV0dXJuIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJlcHJlc2VudGluZyB0aGUgc2VydmVyIHR5cGUgPiBXZWIgc2VydmljZSBydW50aW1lID4gSjJFRSBjYXNjYWRpbmcgbGlzdHMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0U2VydmVyVG9SdW50aW1lVG9KMkVFKCkKLSAgewotICAgIGlmIChzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfIT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICAgIH0KLSAgICAKLSAgICAvL1RPRE8gKHNlZSBidWcgMTE2MDI1KTogSW5zdGVhZCBvZiBhbGwgc2VydmVyIHR5cGUgaWRzLCB3ZSBzaG91bGQgYmUgY2FsY3VsYXRpbmcgdGhlIHNldCBvZiBzZXJ2ZXIKLSAgICAvL3R5cGVzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCBvbmUgV2ViIHNlcnZpY2UgcnVudGltZSBvbiBlaXRoZXIgdGhlIGNsaWVudCBvciBzZXJ2aWNlIHNpZGUuCi0gICAgLy9HZXR0aW5nIGFsbCBzZXJ2ZXIgdHlwZXMgZm9yIG5vdy4KLSAgICBTdHJpbmdbXSBzZXJ2ZXJzID0gZ2V0QWxsU2VydmVyRmFjdG9yeUlkcygpOwotICAgIAotICAgIFNlbGVjdGlvbkxpc3Qgc2VydmVyc0xpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChzZXJ2ZXJzLCAwKTsKLSAgICBWZWN0b3IgY2hvaWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8c2VydmVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBjaG9pY2VzLmFkZChnZXRSdW50aW1lQ2hvaWNlcyhzZXJ2ZXJzW2ldKSk7Ci0gICAgfQotICAgIHNlcnZlclRvUnVudGltZVRvSjJFRV8gPSBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoc2VydmVyc0xpc3QsIGNob2ljZXMpOwotICAgIHJldHVybiBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0UnVudGltZUNob2ljZXMoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotCS8vVE9ETyAoc2VlIGJ1ZyAxMTYwMjUpOiBJbnN0ZWFkIG9mIGFsbCBXZWIgc2VydmljZSBydW50aW1lcywgd2Ugc2hvdWxkIGJlIAotCS8vY2FsY3VsYXRpbmcgdGhlIHN1YnNldCBvZiBXZWIgc2VydmljZSBydW50aW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciB0eXBlCi0JLy93aXRoIGlkIGVxdWFsIHRvIHNlcnZlckZhY3RvcnlJZC4gR2V0dGluZyBhbGwgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIGZvciBub3cuCi0gICAgU2V0IHJ1bnRpbWVzID0gcmVnaXN0cnkucnVudGltZXNfLmtleVNldCgpOwotICAgIEl0ZXJhdG9yIGl0ciA9IHJlZ2lzdHJ5LnJ1bnRpbWVzXy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZ1tdIHJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW3J1bnRpbWVzLnNpemUoKV07ICAgIAotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZylpdHIubmV4dCgpOwotICAgICAgcnVudGltZUlkc1tpXSA9IHJ1bnRpbWVJZDsKLSAgICAgIGkrKzsgICAgIAotICAgIH0KLQotICAgIFNlbGVjdGlvbkxpc3QgcnVudGltZXNMaXN0ID0gbmV3IFNlbGVjdGlvbkxpc3QocnVudGltZUlkcywgMCk7Ci0gICAgVmVjdG9yIGNob2ljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaj0wOyBqPHJ1bnRpbWVJZHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgY2hvaWNlcy5hZGQoZ2V0SjJFRUNob2ljZXMocnVudGltZUlkc1tqXSkpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKHJ1bnRpbWVzTGlzdCwgY2hvaWNlcyk7ICAgIAotICB9ICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldEoyRUVDaG9pY2VzKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0oyRUUgbGV2ZWxzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIFNlcnZlciBSdW50aW1lIHByZWZlcmVuY2UgcGFnZS4KLSAgICAvL1JldHVybiBzb21lIGhhcmQgY29kZWQgdmFsdWVzLiBUaGVzZSB3aWxsIG5vdCBiZSByZW5kZXJlZCBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLgotICAgIFN0cmluZ1tdIGoyZWVWZXJzaW9ucyA9IG5ldyBTdHJpbmdbXXsiMTMiLCAiMTQifTsKLSAgICBTZWxlY3Rpb25MaXN0IGoyZWVWZXJzaW9uc0xpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChqMmVlVmVyc2lvbnMsIDApOwotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoajJlZVZlcnNpb25zTGlzdCwgbnVsbCk7ICAgICAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzKCkKLSAgewotICAgIC8vVE9ETyAoc2VlIGJ1ZyAxMTYwMjUpOiBJbnN0ZWFkIG9mIGFsbCBzZXJ2ZXIgdHlwZSBpZHMsIHdlIHNob3VsZCBiZSBjYWxjdWxhdGluZyB0aGUgc2V0IG9mIHNlcnZlcgotCS8vdHlwZXMgdGhhdCBzdXBwb3J0IGF0IGxlYXN0IG9uZSBXZWIgc2VydmljZSBydW50aW1lIG9uIGVpdGhlciB0aGUgY2xpZW50IG9yIHNlcnZpY2Ugc2lkZS4KLQkvL1JldHVybiBhbGwgc2VydmVyIHR5cGUgaWRzIGZvciBub3cuCi0gICAgQXJyYXlMaXN0IGlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoc2VydmVyRmFjdG9yeUlkQnlMYWJlbF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIElTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8c2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpZCA9IHNlcnZlclR5cGVzW2ldLmdldElkKCk7Ci0gICAgICAgIFN0cmluZyBsYWJlbCA9IGdldFNlcnZlckxhYmVsQnlJZChpZCk7Ci0gICAgICAgIHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLnB1dChsYWJlbCwgaWQpOwotICAgICAgICBpZHMuYWRkKGlkKTsKLSAgICAgIH0gICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJdGVyYXRvciBmaWRzID0gIHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZmlkcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmaWQgPSAoU3RyaW5nKWZpZHMubmV4dCgpOwotICAgICAgICBpZHMuYWRkKGZpZCk7Ci0gICAgICB9ICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlkcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHNlcnZlckZhY3RvcnlJZHMgPSAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgICByZXR1cm4gc2VydmVyRmFjdG9yeUlkczsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0gIAotICAgIAotICAvKioKLSAgICogUmV0dXJucyBhIHNlcnZlciB0eXBlIGlkIGdpdmVuIHRoZSBzZXJ2ZXIgdHlwZSdzIGxhYmVsCi0gICAqIEBwYXJhbSBsYWJlbCBzZXJ2ZXIgdHlwZSBsYWJlbAotICAgKiBAcmV0dXJuIHNlcnZlciB0eXBlIGlkIG9yIG51bGwgaWYgbm8gc2VydmVyIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gCi0gICAqIGxhYmVsIGlzIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBsYWJlbCkKLSAgewotICAgIGlmIChsYWJlbD09bnVsbCB8fCBsYWJlbC5sZW5ndGgoKT09MCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGdldEFsbFNlcnZlckZhY3RvcnlJZHMoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLmNvbnRhaW5zS2V5KGxhYmVsKSkKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZylzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXy5nZXQobGFiZWwpOyAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9ICAgICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgV2ViIHNlcnZpY2UgcnVudGltZSdzIGlkIGdpdmVuIGl0cyBsYWJlbCAKLSAgICogQHBhcmFtIGxhYmVsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgbGFiZWwKLSAgICogQHJldHVybiBXZWIgc2VydmljZSBydW50aW1lIGlkIG9yIG51bGwgaWYgbm8KLSAgICogV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBnaXZlbiBsYWJlbCBpcyBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJ1bnRpbWVJZChTdHJpbmcgbGFiZWwpCi0gIHsKLSAgICAKLSAgICBpZiAobGFiZWw9PW51bGwgfHwgbGFiZWwubGVuZ3RoKCk9PTApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBpZiAocnVudGltZUlkQnlMYWJlbF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBydW50aW1lSWRCeUxhYmVsXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5ydW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgICAgcnVudGltZUlkQnlMYWJlbF8ucHV0KGRlc2MuZ2V0TGFiZWwoKSwgZGVzYy5nZXRJZCgpKTsgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZylydW50aW1lSWRCeUxhYmVsXy5nZXQobGFiZWwpOyAgICAKLSAgfSAgICAKLSAgCi0gICAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIEBwYXJhbSByZXF1aXJlZEZhY2V0VmVyc2lvbnMgYW4gYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBSZXF1aXJlZEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBTZXQgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIChlbGVtZW50IHR5cGU6IHtAbGluayBJUnVudGltZX0pIAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU2V0IGdldFJ1bnRpbWVzKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zKQotICB7Ci0gICAgcmV0dXJuIEZhY2V0VXRpbHMuZ2V0UnVudGltZXMocmVxdWlyZWRGYWNldFZlcnNpb25zKTsKLSAgfQotICAKLS8qKgotICogR2V0IHRoZSBzZXJ2aWNlIHJ1bnRpbWUgY2hlY2tlciBjbGFzcwotICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgc2VydmljZSBydW50aW1lIElECi0gKiBAcmV0dXJuCi0gKi8KLSAgcHVibGljIHN0YXRpYyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGdldFNlcnZpY2VSdW50aW1lQ2hlY2tlcihTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCkgewotCSAgcmV0dXJuIGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZCkuZ2V0U2VydmljZVJ1bnRpbWVDaGVja2VyKCk7Ci0JICAKLSAgfQotCi0vKioKLSAqIEdldCB0aGUgY2xpZW50IHJ1bnRpbWUgY2hlY2tlciBjbGFzcwotICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZAotICogQHJldHVybgotICovCi1wdWJsaWMgc3RhdGljIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgZ2V0Q2xpZW50UnVudGltZUNoZWNrZXIoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkgewotCSAgcmV0dXJuIGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWQpLmdldENsaWVudFJ1bnRpbWVDaGVja2VyKCk7Ci0JICAKLSAgfQotCi0vKioKLSAqIEdldCB0aGUgc2VydmljZSBydW50aW1lIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZQotICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgc2VydmljZSBydW50aW1lIElECi0gKiBAcmV0dXJuCi0gKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmljZVByZWZlcnJlZFNlcnZlclR5cGUoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQpIHsKLQkgIHJldHVybiBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCk7Ci0JICAKLSAgfQotCi0vKioKLSAqIEdldCB0aGUgY2xpZW50IHJ1bnRpbWUgcHJlZmVycmVkIHNlcnZlciB0eXBlCi0gKiBAcGFyYW0gY2xpZW50UnVudGltZUlkCi0gKiBAcmV0dXJuCi0gKi8KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENsaWVudFByZWZlcnJlZFNlcnZlclR5cGUoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkgewotCSAgcmV0dXJuIGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWQpLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCk7Ci0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGUyNTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVJ1bnRpbWVJbmZvIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsU2VydmljZVR5cGVzXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsQ2xpZW50VHlwZXNfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGxhYmVsOwotCXByaXZhdGUgU2VydmljZVR5cGVbXSBzZXJ2aWNlVHlwZXM7Ci0JcHJpdmF0ZSBDbGllbnRUeXBlW10gY2xpZW50VHlwZXM7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nW10gc2VydmxldExldmVsczsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmdbXSBqMmVlTGV2ZWxzOwotCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZ1tdIHJ1bnRpbWVJZHM7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nW10gc2VydmVyRmFjdG9yeUlkczsKLQlwcml2YXRlIFN0cmluZyBjbGFzc05hbWU7Ci0JcHJpdmF0ZSBJV2ViU2VydmljZVJ1bnRpbWUgd2ViU2VydmljZVJ1bnRpbWVfOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VSdW50aW1lSW5mbyhJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV8sIEhhc2h0YWJsZSBhbGxTZXJ2aWNlVHlwZXNfLCBIYXNodGFibGUgYWxsQ2xpZW50VHlwZXNfKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gICAgdGhpcy5hbGxTZXJ2aWNlVHlwZXNfID0gYWxsU2VydmljZVR5cGVzXzsKLSAgICB0aGlzLmFsbENsaWVudFR5cGVzXyA9IGFsbENsaWVudFR5cGVzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIGlmIChjbGFzc05hbWU9PW51bGwpCi0gICAgewotICAgICAgY2xhc3NOYW1lPWVsZW1fLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgfQotICAKLQotICBwdWJsaWMgQ2xpZW50VHlwZVtdIGdldENsaWVudFR5cGVzKCkKLSAgewotICAgIGlmIChjbGllbnRUeXBlcz09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiY2xpZW50VHlwZXMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgY2xpZW50VHlwZXMgPSBuZXcgQ2xpZW50VHlwZVtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGllbnRUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjdGlkID0gc3QubmV4dFRva2VuKCk7ICAgICAgICAgIAotICAgICAgICAgIGNsaWVudFR5cGVzW2ldID0gKENsaWVudFR5cGUpYWxsQ2xpZW50VHlwZXNfLmdldChjdGlkKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2xpZW50VHlwZXM7Ci0gIH0KLSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQ9PW51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLQotICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLSAgewotICAgIGlmIChsYWJlbD09bnVsbCkKLSAgICB7Ci0gICAgICBsYWJlbCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgibGFiZWwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxhYmVsOwotICB9ICAgCi0KLSAgCi0gIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SjJlZUxldmVscygpCi0gIHsKLSAgICBpZiAoajJlZUxldmVscyA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJqMmVlTGV2ZWxzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGoyZWVMZXZlbHMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGoyZWVMZXZlbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgajJlZUxldmVsc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0gICAgICAKLSAgICAKLSAgICByZXR1cm4gajJlZUxldmVsczsKLSAgfQotICAKLQotICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFJ1bnRpbWVJZHMoKQotICB7Ci0gICAgaWYgKHJ1bnRpbWVJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgicnVudGltZXMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgcnVudGltZUlkcyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBydW50aW1lSWRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfSAgICAgIAotICAgIAotICAgIHJldHVybiBydW50aW1lSWRzOwotICB9Ci0gIAotCi0gIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkcygpCi0gIHsKLSAgICBpZiAoc2VydmVyRmFjdG9yeUlkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJzZXJ2ZXJzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHNlcnZlckZhY3RvcnlJZHMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlckZhY3RvcnlJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgc2VydmVyRmFjdG9yeUlkc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gc2VydmVyRmFjdG9yeUlkczsKLSAgfQotICAKLQotICBwdWJsaWMgU2VydmljZVR5cGVbXSBnZXRTZXJ2aWNlVHlwZXMoKQotICB7Ci0gICAgaWYgKHNlcnZpY2VUeXBlcz09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgic2VydmljZVR5cGVzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHNlcnZpY2VUeXBlcyA9IG5ldyBTZXJ2aWNlVHlwZVtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgY3RpZCA9IHN0Lm5leHRUb2tlbigpOyAgICAgICAgICAKLSAgICAgICAgICBzZXJ2aWNlVHlwZXNbaV0gPSAoU2VydmljZVR5cGUpYWxsU2VydmljZVR5cGVzXy5nZXQoY3RpZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VUeXBlczsKLSAgfQotICAKLQotICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFNlcnZsZXRMZXZlbHMoKQotICB7Ci0gICAgaWYgKHNlcnZsZXRMZXZlbHM9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoInNlcnZsZXRMZXZlbHMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgc2VydmxldExldmVscyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmxldExldmVscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBzZXJ2bGV0TGV2ZWxzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBzZXJ2bGV0TGV2ZWxzOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotCWlmICh3ZWJTZXJ2aWNlUnVudGltZV8gPT0gbnVsbCkKLQl7Ci0JCXRyeQotCQl7Ci0JCQl3ZWJTZXJ2aWNlUnVudGltZV8gPSAoSVdlYlNlcnZpY2VSdW50aW1lKWVsZW1fLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lXzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODVjODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IndlYnNlcnZpY2V1dGlscyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDlkOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13ZWJzZXJ2aWNldXRpbHMuamFyCi13c2MuamFyCi13ZWJzZXJ2aWNldXRpbHNzcmMuemlwCi13c2NzcmMuemlwCi1qYXZhQ29tcGlsZXIud2Vic2VydmljZXV0aWxzLmphci5hcmdzCi1qYXZhQ29tcGlsZXIud3NjLmphci5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzU4OTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyNmJlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNTo1MSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzU1MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjI1IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmMjI1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTA3LnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogLiwKLSB3ZWJzZXJ2aWNldXRpbHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsCi1JbXBvcnQtUGFja2FnZTogY29tLmlibS5pY3UudXRpbDsgdmVyc2lvbj0iMy44IgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNS4wLDEuNi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29kZWdlbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuNS4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjQuMTAwLDIuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk3NDBlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNTAxICAgMTg0NTA1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uud2Vic2VydmljZXV0aWxzLmphciA9IHdlYnNlcnZpY2V1dGlscy8KLWphcnMuY29tcGlsZS5vcmRlciA9IC4sXAotICAgICAgICAgICAgICAgICAgICAgd2Vic2VydmljZXV0aWxzLmphcgotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3ZWJzZXJ2aWNldXRpbHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIC4KLSMgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI1NjAzMyAgICAgICAgICAgICAgCi0jIGphcnMuZXh0cmEuY2xhc3NwYXRoID0gLi4vamF2YXgueG1sLnNvYXAvbGliL3NhYWouamFyCi1leHRyYS5qYXZheC54bWwuc29hcD1wbGF0Zm9ybTovcGx1Z2lucy9qYXZheC54bWwuc29hcC9saWIvc2Fhai5qYXIKLW91dHB1dC4uID0gYmluLwotc291cmNlLi4gPSBzcmMvCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NmM3ODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwOTAzMDIgICAyNDI2MzUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBSZW1vdmUgdW5uZWNlc3NhcnkgVUkgZGVwZW5kZW5jaWVzIGZyb20gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBDb25zdW1wdGlvbgotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi1YUF9XU0ZJTkRFUj1vcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ud3NmaW5kZXIKLVhQX1dFQl9TRVJWSUNFX1NUQVJUX1NFUlZFUl9UWVBFPVdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLVhQX1NFUlZFUl9ERUZBVUxURVI9U2VydmVyIERlZmF1bHRlcgotWFBfRkFDRVRfT1BfREVMRUdBVEU9RmFjZXQgT3BlcmF0aW9uIERlbGVnYXRlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyYzhkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0id3NmaW5kZXIiCi0gICAgICBuYW1lPSIlWFBfV1NGSU5ERVIiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0id2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZSIKLSAgICAgIG5hbWU9IiVYUF9XRUJfU0VSVklDRV9TVEFSVF9TRVJWRVJfVFlQRSIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJzZXJ2ZXJEZWZhdWx0ZXIiCi0gICAgICBuYW1lPSIlWFBfU0VSVkVSX0RFRkFVTFRFUiIvPgotICAgICAgCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImludGVybmFsRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSIKLSAgIAkJbmFtZT0iJVhQX0ZBQ0VUX09QX0RFTEVHQVRFIgotICAgCQlzY2hlbWE9InNjaGVtYS9mYWNldE9wZXJhdGlvbkRlbGVnYXRlLmV4c2QiLz4KLQotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLndlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUiPgotICAgICAgPHdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLSAgICAgICAgICAgIGZhY3RvcnlJZD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuMzIiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLlN0YXJ0VG9tY2F0U2VydmVyIgotICAgICAgICAgICAgaWQ9IlNFUlZFUl9JRF9UT01DQVQzMl9MT0NBTCI+Ci0gICAgICA8L3dlYlNlcnZpY2VTdGFydFNlcnZlclR5cGU+Ci0gICAgICA8d2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZQotICAgICAgICAgICAgZmFjdG9yeUlkPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uU3RhcnRUb21jYXRTZXJ2ZXIiCi0gICAgICAgICAgICBpZD0iU0VSVkVSX0lEX1RPTUNBVDQwX0xPQ0FMIj4KLSAgICAgIDwvd2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZT4KLSAgICAgIDx3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi0gICAgICAgICAgICBmYWN0b3J5SWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5TdGFydFRvbWNhdFNlcnZlciIKLSAgICAgICAgICAgIGlkPSJTRVJWRVJfSURfVE9NQ0FUNDFfTE9DQUwiPgotICAgICAgPC93ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlPgotICAgICAgPHdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLSAgICAgICAgICAgIGZhY3RvcnlJZD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLlN0YXJ0VG9tY2F0U2VydmVyIgotICAgICAgICAgICAgaWQ9IlNFUlZFUl9JRF9UT01DQVQ1MF9MT0NBTCI+Ci0gICAgICA8L3dlYlNlcnZpY2VTdGFydFNlcnZlclR5cGU+Ci0gICAgICA8d2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZQotICAgICAgICAgICAgZmFjdG9yeUlkPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlcm9uaW1vLjEwIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5TdGFydFRvbWNhdFNlcnZlciIKLSAgICAgICAgICAgIGlkPSJTRVJWRVJfSURfR0VST05JTU8xMF9MT0NBTCI+Ci0gICAgICAgPC93ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlPiAKLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc2NoZW1hL2ZhY2V0T3BlcmF0aW9uRGVsZWdhdGUuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NjaGVtYS9mYWNldE9wZXJhdGlvbkRlbGVnYXRlLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YjM0MDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc2NoZW1hL2ZhY2V0T3BlcmF0aW9uRGVsZWdhdGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iIGlkPSJpbnRlcm5hbEZhY2V0T3BlcmF0aW9uRGVsZWdhdGUiIG5hbWU9IkZhY2V0IE9wZXJhdGlvbiBEZWxlZ2F0ZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtJbnRlcm5hbCBFeHRlbnNpb24gUG9pbnQ6Jmx0Oy9iJmd0OyBUaGlzIGludGVybmFsIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgYW4gSUZhY2V0T3BlcmF0aW9uRGVsZWdhdGUgdG8gYmUgcGx1Z2dlZCBpbiB0aGF0IGlzIGRlbGVnYXRlZCBzb21lIGZhY2V0IG9wZXJhdGlvbnMuICZsdDtiJmd0O0RvIG5vdCB1c2UgdGhpcyBleHRlbnNpb24gcG9pbnQuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgaW50ZXJuYWw9InRydWUiIC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IkZhY2V0T3BlcmF0aW9uRGVsZWdhdGUiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyB0aGUgRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBDbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBJRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBXVFAgMy4xCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotCi0KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL0NvbnN1bXB0aW9uLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL0NvbnN1bXB0aW9uLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZjA4YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDIxNyAgIDEyNjc1NyByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA0MDEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwODAzMzEgICAyMjUwMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEVycm9yIG1zZyByZWZlcmVuY2VzIHJlbmFtZWQgY2F0ZWdvcnkKLSMgMjAwODA0MDIgICAyMjI0MDkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwODA0MDIgICAyMjQ0MzMga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFByb3BlcnRpZXMgZmlsZSBjaGFuZ2UKLSMgMjAwODA1MDUgICAxODIxNjcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdhcm5pbmcgbm90IGlzc3VlZCB3aGVuIG5vbi1pbnN0YW50aWFibGUgY2xhc3MgaXMgYnlwYXNzZWQgaW4gc2FtcGUgSlNQcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFNhbXBsZSBtZXNzYWdlcwotIwotTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fTUVUSE9EUz1JV0FCMDE3OUUgVW5hYmxlIHRvIGNyZWF0ZSBhIHNhbXBsZSB0byB0aGUgcHJveHkgYmVjYXVzZSB0aGUgcHJveHkgZG9lcyBub3QgY29udGFpbiBtZXRob2RzLgotTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fREVGQVVMVD1JV0FCMDE4MEUgVW5hYmxlIHRvIGNyZWF0ZSBhIHNhbXBsZSB0byB0aGUgcHJveHkgYmVjYXVzZSB0aGUgcHJveHkgaXMgbm90IGEgYmVhbiAoaS5lLi4gdGhlIHNhbXBsZSBkb2VzIG5vdCBoYXZlIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yKS4KLU1TR19FUlJPUl9KVFNfTk9fUFJPWFlfTUVUSE9EU19QUk9DRVNTRUQ9SVdBQjAxODFFIFVuYWJsZSB0byBjcmVhdGUgYSBzYW1wbGUgdG8gdGhlIHByb3h5IGJlY2F1c2Ugbm9uZSBvZiB0aGUgbWV0aG9kcyBpbiB0aGUgcHJveHkgd2VyZSBwcm9jZXNzZWQuCi1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRT1JV0FCMDE4MlcgVGhlIFNhbXBsZSBKU1AgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvbGxvd2luZyB0eXBlOiB7MH0KLU1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9JTkRFWEVEX1BST1BFUlRJRVM9SVdBQjAxODdXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IEluZGV4ZWQgcHJvcGVydGllczogezB9Ci1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19BUlJBWVM9SVdBQjAyMzdXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGFycmF5czogezB9Ci1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19JTlBVVFM9SVdBQjAxMjRXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGlucHV0IHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IGJlYW5zOiB7MH0KLU1TR19FUlJPUl9KVFNfQ1lDTElDX0JFQU49SVdBQjAxODhFIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGJlYW5zIGNvbnRhaW5pbmcgYXR0cmlidXRlcyB0aGF0IHJlZmVyZW5jZSB0aGUgYmVhbnM6IHswfQotTVNHX1dBUk5fSlRTX1BST1hZX01FVEhPRFNfT01JVFRFRD1JV0FCMDE4OVcgVGhlIFNhbXBsZSBKU1AgY2xpZW50IG9taXR0ZWQgc29tZSBtZXRob2RzIGJlY2F1c2UgdGhleSBjb250YWluZWQgdW5zdXBwb3J0ZWQgdHlwZXMuCi1NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEPUlXQUIwMDIxRSBTYW1wbGUgY3JlYXRpb24gd2FzIGNhbmNlbGVkCi1NU0dfV0FSTl9VTkFCTEVfVE9fRklORF9QUk9YWT1JV0FCMDAyMlcgVGhlIFByb3h5IFJlc291cmNlIGNvdW5kIG5vdCBub3QgYmUgZm91bmQuCi1NU0dfRVJST1JfSlRTX0pTUF9HRU49RXJyb3IgaW4gZ2VuZXJhdGluZyBzYW1wbGUgSlNQCi1NU0dfV0FSTl9KVFNfTk9OX0lOU1RBTlRJQUJMRV9UWVBFPVRoZSBpbnB1dCB0eXBlIHswfSBpcyBhIG5vbi1pbnN0YW50aWFibGUgdHlwZSBhbmQgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHNhbXBsZSBKU1AuICBDb250aW51ZSB3aXRoIHNhbXBsZSBKU1AgZ2VuZXJhdGlvbj8KLQotIyBOb3QgdXNlZAotI01TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0NPTVBPTkVOVD1UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGNhbm5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBjb21wb25lbnQgInswfSIuIENhbmNlbCB0aGUgd2l6YXJkIGFuZCBjcmVhdGUgdGhlIGNvbXBvbmVudCBtYW51YWxseS4KLQotCi0jCi0jIEZpbHRlcnMKLSMKLUZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1Q9SVdBQjAwOTdFIE5vIG9iamVjdCBoYXMgYmVlbiBwcm92aWRlZC4KLUZJTFRFUl9NU0dfRVJST1JfTk9UX0ZJTEU9SVdBQjAwOThFIFRoZSBvYmplY3QgInswfSIgaXMgbm90IGEgZmlsZS4KLUZJTFRFUl9NU0dfRVJST1JfTk9UX0ZPTERFUj1JV0FCMDEzN0UgVGhlIG9iamVjdCAiezB9IiBpcyBub3QgYSBmb2xkZXIuCi0KLUpBVkFfRklMVEVSX05BTUU9SmF2YSBmaWxlcwotSkFWQV9GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLmphdmEiIG9yICIuY2xhc3MiLgotSkFWQV9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTj1JV0FCMDEwMkUgVGhlIGZpbGUgInswfSIgZG9lcyBub3QgZW5kIGluICIuamF2YSIgb3IgIi5jbGFzcyIuCi0KLVdTRExfRklMVEVSX05BTUU9V1NETCBmaWxlcwotV1NETF9GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLndzZGwiLgotV1NETF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTj1JV0FCMDEwM0UgVGhlIGZpbGUgInswfSIgZG9lcyBub3QgZW5kIGluICIud3NkbCIuCi0KLUlTRF9GSUxURVJfTkFNRT1JU0QgZmlsZXMKLUlTRF9GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLmlzZCIuCi1JU0RfRklMVEVSX01TR19FUlJPUl9XUk9OR19FWFRFTlNJT049SVdBQjAwOTVFIFRoZSBmaWxlICJ7MH0iIGRvZXMgbm90IGVuZCBpbiAiLmlzZCIuCi0KLVBST1BFUlRJRVNfRklMVEVSX05BTUU9UHJvcGVydGllcyBmaWxlcwotUFJPUEVSVElFU19GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLnByb3BlcnRpZXMiCi1QUk9QRVJUSUVTX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OPSBUaGUgZmlsZSAiezB9IiBkb2VzIG5vdCBlbmQgaW4gIi5wcm9wZXJ0aWVzIi4KLQotRk9MREVSX0ZJTFRFUl9OQU1FPUZvbGRlcnMKLUZPTERFUl9GSUxURVJfREVTQz1Gb2xkZXJzLgotCi0jCi0jIERlcGxveW1lbnQgc3RhdHVzCi0jCi1QUk9HUkVTU19JTkZPX0NPUFlfV0VCU0VSVklDRV9VVElMUz1JV0FCMDAyM0kgQ29weWluZyB0aGUgd2Vic2VydmljZSB1dGlsaXRpZXMuCi1QUk9HUkVTU19JTkZPX0NPUFlJTkdfRklMRT1JV0FCMDE5N0kgQ29weWluZyBTT0FQIHJ1bi10aW1lIGZpbGUuCi1QUk9HUkVTU19JTkZPX1NUQVJUX1dFQl9QUk9KRUNUPUlXQUIwMTk4SSBTdGFydGluZyBXZWIgcHJvamVjdC4KLVBST0dSRVNTX0lORk9fUFVCTElTSElOR19TRVJWRVI9SVdBQjAxOTlJIFB1Ymxpc2hpbmcgc2VydmVyLgotUFJPR1JFU1NfSU5GT19TVEFSVElOR19TRVJWRVI9SVdBQjAyMDBJIFN0YXJ0aW5nIHNlcnZlci4KLVBST0dSRVNTX0lORk9fUFVCTElTSF9XRUJfUFJPSkVDVD1JV0FCMDIwNUkgUHVibGlzaGluZyBXZWIgcHJvamVjdC4KLQotCi0jCi0jIERlcGxveW1lbnQgbWVzc2FnZXMKLSMKLU1TR19FUlJPUl9QUk9KRUNUX05PVF9GT1VORD1JV0FCMDIwN0UgV2ViIHByb2plY3Qgd2FzIG5vdCBmb3VuZC4KLU1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTPUlXQUIwMDI0RSBFcnJvciBpbiBjb3B5aW5nIFdlYnNlcnZpY2UgVXRpbGl0eSBmaWxlLgotTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORD1JV0FCMDIxMkUgU2VydmVyIHdhcyBub3QgZm91bmQuCi1NU0dfRVJST1JfU0VSVkVSPUlXQUIwMjEzRSBFcnJvciBpbiBzdGFydGluZyBzZXJ2ZXIuCi1NU0dfRVJST1JfUFVCTElTSD1JV0FCMDIxN0UgRXJyb3IgaW4gcHVibGlzaGluZyBXZWIgcHJvamVjdC4KLU1TR19FUlJPUl9BRERfTU9EVUxFPUVycm9yIG9jY3VyZWQgd2hlbiBhZGRpbmcgdGhlIG1vZHVsZSwgezB9LCB0byB0aGUgc2VydmVyCi0KLU1TR19FUlJPUl9DUkVBVEVfU0VSVkVSPUlXQUIwMDI1RSBVbmFibGUgdG8gY3JlYXRlIHNlcnZlci4KLU1TR19FUlJPUl9TVFVCX09OTFk9VW5hYmxlIHRvIGNyZWF0ZSBzZXJ2ZXIgYmVjYXVzZSBvbmx5IHN0dWIgcnVudGltZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHswfSBzZXJ2ZXIgdHlwZS4gR28gdG8gV2luZG93ID4gUHJlZmVyZW5jZXMuIFNlbGVjdCBTZXJ2ZXIgPiBSdW50aW1lIEVudmlyb25tZW50cyB0byBpbnN0YWxsIGEgbm9uLXN0dWIgcnVudGltZS4KLQotIwotIyBFSkIgbWVzc2FnZXMKLSMgNCB1bnVzZWQgbWVzc2FnZXMgaW4ganN0LndzIGFuZCB3c3Qud3MKLVRBU0tfTEFCRUxfQ1JFQVRFX0VKQl9QUk9KRUNUPUNyZWF0ZUVKQlByb2plY3RUYXNrCi1UQVNLX0RFU0NfQ1JFQVRFX0VKQl9QUk9KRUNUPUNyZWF0ZSBhbiBFSkIgUHJvamVjdC4KLU1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0VKQl9QUk9KRUNUPUlXQUIwNDMyRSBVbmFibGUgdG8gY3JlYXRlIEVKQiBwcm9qZWN0LgotTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfQVBQX0NMSUVOVF9QUk9KRUNUPUlXQUIwMDI2RSBVbmFibGUgdG8gY3JlYXRlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHswfS4KLQotTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfSkFWQV9QUk9KRUNUPUlXQUIwMDI3RSBVbmFibGUgdG8gY3JlYXRlIEphdmEgcHJvamVjdCB7MH0uCi1NU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9FQVJfUFJPSkVDVD1JV0FCMDA2MkUgVW5hYmxlIHRvIGNyZWF0ZSBFQVIgcHJvamVjdCB7MH0uCi0KLSMKLSMgVmFsaWRhdG9yIHRhc2sgZGVzY3JpcHRpb25zCi0jCi1UQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OPURpc2FibGUgdmFsaWRhdG9ycy4KLVRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfVkFMSURBVElPTj1UZW1wb3JhcmlseSBkaXNhYmxpbmcgdmFsaWRhdG9ycy4KLVRBU0tfTEFCRUxfV0VCU0VSVklDRV9SRVNUT1JFX1ZBTElEQVRJT049UmVzdG9yZSB2YWxpZGF0b3JzLgotVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OPVJlc3RvcmluZyBzdGF0ZXMgb2YgdmFsaWRhdG9ycy4KLVRBU0tfTEFCRUxfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEPURpc2FibGUgYXV0byBidWlsZC4KLVRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfQlVJTEQ9VGVtcG9yYXJpbHkgZGlzYWJsaW5nIGF1dG8gYnVpbGQuCi1UQVNLX0xBQkVMX1dFQlNFUlZJQ0VfUkVTVE9SRV9CVUlMRD1SZXN0b3JlIGF1dG8gYnVpbGQuCi1UQVNLX0RFU0NfV0VCU0VSVklDRV9SRVNUT1JFX0JVSUxEPVJlc3RvcmluZyBzdGF0ZSBvZiBhdXRvIGJ1aWxkLgotCi0jCi0jIE1JU0MKLSMKLU1TR19FUlJPUl9XRUJfUFJPSkVDVF9DUkVBVEU9SVdBQjAzMTBFIEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgV2ViIFByb2plY3QuCi0KLSMKLSMgQ2hlY2tQcm9qZWN0T0tDb21tYW5kCi0jCi1NU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTj1JV0FCMDEyNkUgVGhlIHNlcnZlciBjb25maWd1cmF0aW9uIGVkaXRvciBpcyBvcGVuIGZvciB7MH0uICBDbG9zZSBpdCBhbmQgcmVzdGFydCB0aGUgd2l6YXJkLgotCi0KLSMKLSMJRGV0ZWN0Tm9uSmF2YUNoYXJzQ29tbWFuZAotIwotTVNHX1dBUk5fSkFWQV9NRVRIT0RfU1RBUlRfV0lUSF9VUFBFUl9DQVNFPUlXQUIwMTI5VyBKYXZhIG1ldGhvZCB7MH0gaW4gY2xhc3MgezF9IHN0YXJ0cyB3aXRoIGFuIHVwcGVyIGNhc2UgbGV0dGVyLiBNZXRob2QgbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggbG93ZXIgY2FzZSBsZXR0ZXJzLgotTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRD1JV0FCMDEzMVcgSmF2YSBtZXRob2QgezB9IG5hbWUgY29udGFpbnMgdW5kZXJzY29yZSBvciBudW1lcmljIGRpZ2l0cyBmb2xsb3dlZCBieSBhIGxvd2VyIGNhc2UgbGV0dGVyLlwKLU1ldGhvZCBuYW1lcyBzaG91bGQgbm90IGNvbnRhaW4gbG93ZXIgY2FzZSBsZXR0ZXJzIGFmdGVyIGEgbnVtZXJpYyBvciB1bmRlcnNjb3JlLgotTVNHX1dBUk5fQk9PTEVBTl9QUk9QRVJUWV9BQ0NFU1NPUlM9SVdBQjAxMzJXIEJvb2xlYW4gcHJvcGVydHkgYWNjZXNzb3IgezB9IGluIGJlYW4gezF9IGJlZ2lucyB3aXRoICJnZXQiLiBCb29sZWFuIGdldHRlciBtZXRob2RzIHNob3VsZCBiZWdpbiB3dGggImlzIi4KLU1TR19XQVJOX1BBQ0tBR0VfTkFNRV9IQVNfVVBQRVJfQ0FTRT1JV0FCMDEzM1cgVGhlIHBhY2thZ2UgbmFtZSB7MH0gb2YgY2xhc3MgezF9IGluY2x1ZGVzIHVwcGVyIGNhc2UgbGV0dGVycy4gUGFja2FnZSBuYW1lcyBzaG91bGQgY29uc2lzdCBvZiBsb3dlciBjYXNlIGxldHRlcnMgb25seS4KLQotV0FSTl9CRUFOX05BTUVfU1RBUlRTX1dJVEhfTE9XRVJfQ0FTRQotCi0jCi0jIEphdmFUb01vZGVsQ29tbWFuZAotIwotTEFCRUxfT0s9T0sKLURFU0NSSVBUSU9OX09LPVNlbGVjdCBPSyB0byBjb250aW51ZQotCi1MQUJFTF9DQU5DRUw9Q2FuY2VsCi1ERVNDUklQVElPTl9DQU5DRUw9U2VsZWN0IENhbmNlbCB0byBjYW5jZWwKLQotIwotIyBDcmVhdGVNb25pdG9yQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SPUlXQUIwMDAxRSBVbmFibGUgdG8gbW9uaXRvciBwb3J0IHswfSBvZiB7MX0uCi1NU0dfSU5GT19NT05JVE9SSU5HX05PVF9TVVBQT1JURUQ9SVdBQjAwMDJJIHswfSBkb2VzIG5vdCBzdXBwb3J0IHBvcnQgbW9uaXRvcmluZy4KLQotIwotIyBDb3B5V1NETENvbW1hbmQKLSMKLUNPTU1BTkRfTEFCRUxfQ09QWV9XU0RMPUNvcHlpbmcgV1NETAotQ09NTUFORF9ERVNDX0NPUFlfV1NETD1Db3B5aW5nIFdTREwgaW50byB0aGUgd29ya3NwYWNlIGZvciBXZWIgc2VydmljZSBkZXBsb3ltZW50Ci1NU0dfRVJST1JfQ09QWV9XU0RMPUlXQUIwMDI4RSBGYWlsZWQgdG8gY29weSBXU0RMIHswfSB0byB7MX0KLQotIwotIyBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19BU1NPQ0lBVEU9VW5hYmxlIHRvIGFzc29jaWF0ZSBjb21wb25lbnQgezB9IHRvIGVhciBjb21wb25lbnQgezF9LgotCi0jCi0jIENyZWF0ZU1vZHVsZUNvbW1hbmQKLSMKLU1TR19FUlJPUl9DUkVBVEVfRkxFWF9QUk9KRVQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgZmxleGlibGUgcHJvamVjdCB7MH0uCi1NU0dfRVJST1JfQ1JFQVRFX0VKQl9DT01QT05FTlQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgRUpCIGNvbXBvbmVudCB7MH0uCi1NU0dfRVJST1JfQ1JFQVRFX0FQUENMSUVOVF9DT01QT05FTlQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgQXBwbGljYXRpb24gQ2xpZW50IGNvbXBvbmVudCB7MH0uCi1NU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OPVVuYWJsZSB0byBjcmVhdGUgcHJvamVjdCB7MH0gYW5kL29yIGNvbXBvbmVudCB7MX0uCi0KLQotIwotIyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQKLSMKLU1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OPVVuYWJsZSB0byBjcmVhdGUgcHJvamVjdCB7MH0uCi0KLQotIwotIyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQKLSMKLU1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNUPVRoZSBwcm9qZWN0IHswfSBkb2VzIG5vdCBleGlzdC4KLU1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOPVRoZSBwcm9qZWN0IHswfSBpcyBub3Qgb3Blbi4KLQotIwotIyBTUEVDSUFMIE5PVEUgVE8gVFJBTlNMQVRPUlM6IFN1YnN0aXR1dGlvbiB7MX0gaW4gTVNHX0VSUk9SX0FERElOR19GQUNFVFNfVE9fUFJPSkVDVCBhbmQKLSMgTVNHX0VSUk9SX0ZJWEVEX0ZBQ0VUUyB3aWxsIGJlIGEgZGVsaW1pdGVkIGxpc3Qgb2YgdHJhbnNsYXRlZCBsYWJlbHMuIFRoZSBsaXN0IGlzIGZvcm1lZCAKLSMgdGhyb3VnaCByZXBlYXRlZCB1c2Ugb2YgTVNHX0ZBQ0VUUy4KLSMKLU1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1Q9VW5hYmxlIHRvIGFkZCB0aGUgZm9sbHdpbmcgZmFjZXRzIHRvIHByb2plY3QgezB9OiB7MX0uCi1NU0dfRVJST1JfRklYRURfRkFDRVRTPVVuYWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBmYWNldHMgYXMgZml4ZWQgb24gcHJvamVjdCB7MH06IHsxfS4KLU1TR19GQUNFVFM9ezB9LCB7MX0KLQotTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRT1VbmFibGUgdG8gYmluZCBwcm9qZWN0IHswfSB0byB0aGUgezF9IHJ1bnRpbWUuCi0KLSMKLSMgU2tlbGV0b24gTWVyZ2UgTWVzc2FnZXMKLSMKLU1TR19FUlJPUl9GSUxFX01FUkdFPUVycm9yIGluIG1lcmdpbmcgZmlsZSB7MH0uCi1NU0dfRVJST1JfRklMRV9NRVJHRV9MT0FEPUVycm9yIGluIGxvYWRpbmcgZmlsZSB7MH0gZm9yIG1lcmdlLiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb25NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMjcyNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTI2NzU3IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMjI0NDMzIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBQcm9wZXJ0aWVzIGZpbGUgY2hhbmdlCi0gKiAyMDA4MDUwNSAgIDE4MjE2NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2FybmluZyBub3QgaXNzdWVkIHdoZW4gbm9uLWluc3RhbnRpYWJsZSBjbGFzcyBpcyBieXBhc3NlZCBpbiBzYW1wZSBKU1BzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIENvbnN1bXB0aW9uTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBDb25zdW1wdGlvbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSlRTX1BST1hZX0hBU19OT19NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9KVFNfUFJPWFlfSEFTX05PX0RFRkFVTFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19OT19QUk9YWV9NRVRIT0RTX1BST0NFU1NFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfSU5ERVhFRF9QUk9QRVJUSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9QQVJBTUVURVJTX0FSUkFZUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19JTlBVVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19DWUNMSUNfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfUFJPWFlfTUVUSE9EU19PTUlUVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fVU5BQkxFX1RPX0ZJTkRfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19KU1BfR0VOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19OT05fSU5TVEFOVElBQkxFX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZJTFRFUl9NU0dfRVJST1JfTk9UX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQV9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU0RfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSVNEX0ZJTFRFUl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElTRF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVJfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSX0ZJTFRFUl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fQ09QWV9XRUJTRVJWSUNFX1VUSUxTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fU1RBUlRfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPR1JFU1NfSU5GT19QVUJMSVNISU5HX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX1BVQkxJU0hfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlNUQU5DRV9OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUFVCTElTSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQUREX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ1JFQVRFX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfU1RVQl9PTkxZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfQ1JFQVRFX0VKQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19DUkVBVEVfRUpCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfRUpCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfQVBQX0NMSUVOVF9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0pBVkFfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9FQVJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX1JFU1RPUkVfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9CVUlMRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0RFU0NfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfV0VCU0VSVklDRV9SRVNUT1JFX0JVSUxEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX1JFU1RPUkVfQlVJTEQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dFQl9QUk9KRUNUX0NSRUFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KQVZBX01FVEhPRF9TVEFSVF9XSVRIX1VQUEVSX0NBU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9CT09MRUFOX1BST1BFUlRZX0FDQ0VTU09SUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9QQUNLQUdFX05BTUVfSEFTX1VQUEVSX0NBU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTl9CRUFOX05BTUVfU1RBUlRTX1dJVEhfTE9XRVJfQ0FTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9PSzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERVNDUklQVElPTl9PSzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DQU5DRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVTQ1JJUFRJT05fQ0FOQ0VMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19NT05JVE9SSU5HX05PVF9TVVBQT1JURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTUFORF9MQUJFTF9DT1BZX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTUFORF9ERVNDX0NPUFlfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09QWV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fQVNTT0NJQVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfRkxFWF9QUk9KRVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NSRUFURV9FSkJfQ09NUE9ORU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfQVBQQ0xJRU5UX0NPTVBPTkVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJWEVEX0ZBQ0VUUzsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRkFDRVRTOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVfTUVSR0VfTE9BRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklMRV9NRVJHRTsKLSAgICAKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIENvbnN1bXB0aW9uTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9HZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9HZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEyNzc0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxMSAgIDE1MzQ4MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgR2VuZXJhdG9yIGltcGxlbWVudHMgVmlzaXRvckFjdGlvbgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgLyoqCi0gICogVGhlIFN0cmluZ0J1ZmZlciB0aGF0IGhvbGRzIHRoZSBjb2RlZ2VuIAotICAqICovCi0gIHByb3RlY3RlZCBTdHJpbmdCdWZmZXIgZmJ1ZmZlcjsgCi0KLSAgLyoqCi0gICogVGhlIFZpc2l0b3IgdGhhdCBjYWxscyB0aGUgdmlzaXQgbWV0aG9kIAotICAqICovCi0gIHByb3RlY3RlZCBWaXNpdG9yIGZWaXNpdG9yOyAKLQotICAvKioKLSAgKiBWZWN0b3IgdGhhdCBob2xkcyBzdGF0ZSBkYXRhIGZvciB0aGlzICBnZW5lcmF0b3IgCi0gICogKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmUmVzaWRlbnRWZWN0b3I7Ci0gCi0gIC8qCi0gICogVGhpcyBpbnQgaG9sZHMgdGhlIGN1cnJlbnQgbnVtYmVyIAotICAqLwotICBwcm90ZWN0ZWQgaW50IGZVbmlxdWVOdW1iZXIgPTA7Ci0gCi0KLSAgcHJvdGVjdGVkIFN0cmluZyBmQ2xpZW50Rm9sZGVyUGF0aDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQUNUT1JZID0gIkZhY3RvcnkiOyAKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUIgPSAiICAgICI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVUJMRV9UQUIgPSAiICAgICAgICAiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTUEFDRSA9ICIgIjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgR2VuZXJhdG9yICgpCi0gIHsKLSAgICAgIGZidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBmUmVzaWRlbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7IAotICAgIAotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIFN0cmluZ0J1ZmZlciBUYWtlcyB0aGUgYnVmZmVyIGl0IHdpbGwgd3JpdGUgY29kZSB0bwotICAqLwotICBwdWJsaWMgR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgICBmYnVmZmVyID0gYnVmZmVyOwotICAgICAgZlJlc2lkZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmcgcmVzaWRlbnQpCi0gIHsKLSAgICAvL25vdGhpbmcgdG8gYmUgZG9uZSBidXQgbXVzdCBiZSBpbXBsZW1lbnRlZAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEZvbGRlclBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGZDbGllbnRGb2xkZXJQYXRoOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Rm9sZGVyUGF0aChTdHJpbmcgZkNsaWVudEZvbGRlclBhdGhfKQotICB7Ci0gICAgZkNsaWVudEZvbGRlclBhdGggPSBmQ2xpZW50Rm9sZGVyUGF0aF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHNlcnZpY2VOYW1lID0gIiI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcG9ydE5hbWUgPSAiIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYWNrYWdlTmFtZSA9ICIiOwotICBwcm90ZWN0ZWQgU3RyaW5nIHByb3h5QmFzZU5hbWUgPSAiIjsKLQotICBwdWJsaWMgdm9pZCBzZXRJbmZvKFN0cmluZyBzZXJ2aWNlLCBTdHJpbmcgcG9ydCwgU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgcHJveHlCYXNlKQotICB7Ci0gICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlOwotICAgIHBvcnROYW1lID0gcG9ydDsKLSAgICB0aGlzLnBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7IAotICAgIHByb3h5QmFzZU5hbWUgPSBwcm94eUJhc2U7ICAKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLSAgcHVibGljIFN0cmluZyBnZXRTZXNzaW9uQmVhbklkKCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gZ2V0Q2xpZW50Rm9sZGVyUGF0aCgpOwotICAgIGludCBpbmRleCA9IG5hbWUubGFzdEluZGV4T2YoIi8iKTsKLSAgICBpbmRleCsrOwotICAgIFN0cmluZ0J1ZmZlciBuZXdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcihuYW1lLnN1YnN0cmluZyhpbmRleCkpOwotICAgIAotICAgIC8vV2UgbmVlZCB0byBtYWtlIHRoaXMgYSB2YWxpZCBqYXZhIGlkZW50aWZpZXIKLSAgICAvL1RvIGRvIHRoaXMgd2Ugd2lsbCByZXBsYWNlIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdmFsaWQgd2l0aCBhbiB1bmRlcnNjb3JlCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdOYW1lLmxlbmd0aCgpOyBpKyspCi0gICAgewotICAgIAljaGFyIGMgPSBuZXdOYW1lLmNoYXJBdChpKTsKLSAgICAJaWYgKGkgPT0gMCAmJiAhQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJTdGFydChjKSB8fCAhQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJQYXJ0KGMpKQotICAgIAl7Ci0gICAgCQluZXdOYW1lLnNldENoYXJBdChpLFVOREVSU0NPUkUpOwotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBuZXdOYW1lICsgImlkIjsKLSAgfQotCi0gIC8qCi0gICogVGhlIE51bWJlciBGYWN0b3J5IGlzIGhlcmUgZm9yIG5hbWluZyBwdXJwb3Nlcy4gSW4gCi0gICogdGhpcyB3YXkgd2UgaW5zdXJlIG5vIG5hbWVzIHdlIGNyZWF0ZSBpbiBhIHBpZWNlIG9mCi0gICogY29kZSBnZW4gYXJlIHRoZSBzYW1lLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXJzCi0gICogdXNlZCBhbmQgd2UgaGFuZCBiYWNrIHRoZSBuZXh0IG9uZS4gTGlrZSB0YWtlIGEgbnVtYmVyIAotICAqIGJ1ZGR5Ci0gICogQHBhcmFtIGludCBudW1iZXIgd2UgYXJlIGF0IGFzIHRoZSBzdGF0ZSBkYXRhIGhhcyB0byBiZSBzZXR0YWJsZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXROdW1iZXJGYWN0b3J5KGludCBudW1iZXIpCi0gIHsKLSAgICAgZlVuaXF1ZU51bWJlciA9IG51bWJlcjsKLSAgfQotCi0KLSAgLyoKLSAgKiBUaGlzIGlzIGEgdW5pcXVlIG51bWJlciBmb3Igc3RhdGUgcHVycG9zZXMKLSAgKiBAcmV0dXJuIGludCAKLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJGYWN0b3J5KCkKLSAgewotICAgICByZXR1cm4gZlVuaXF1ZU51bWJlcjsgCi0gIH0KLSAgLyoKLSAgKiBUaGlzIGlzIGEgdW5pcXVlIG51bWJlciBmb3IgbmFtaW5nIHB1cnBvc2VzCi0gICogQHJldHVybiBpbnQgCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0VW5pcXVlTnVtYmVyKCkKLSAgewotICAgICByZXR1cm4gZlVuaXF1ZU51bWJlcisrOwotICB9Ci0KLQotICAvKioKLSAgKiByZXR1cm5zIHRoZSBjdXJyZW50IFN0cmluZ0J1ZmZlcgotICAqIEByZXR1cm4gU3RyaW5nQnVmZmVyIFRha2VzIHRoZSBidWZmZXIgaXQgd2lsbCB3cml0ZSBjb2RlIHRvbwotICAqLwotICBwdWJsaWMgU3RyaW5nQnVmZmVyIGdldFN0cmluZ0J1ZmZlciAoKQotICB7Ci0gICAgICByZXR1cm4gZmJ1ZmZlcjsKLSAgfQotCi0gIAotICAvKioKLSAgKiByZXR1cm5zIHRoZSBWaXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgZ2VuZXJhdG9yCi0gICogQHJldHVybiBWaXNpdG9yIAotICAqLwotICBwdWJsaWMgVmlzaXRvciBnZXRWaXNpdG9yICgpCi0gIHsKLSAgICAgIHJldHVybiBmVmlzaXRvcjsKLSAgfQotICAKLQotCi0KLSAgLyoqCi0gICogdmVjdG9yIHVzZWQgdG8gaG9sZCBzdGF0ZSBkYXRhIAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvciAKLSAgKi8KLSAgcHVibGljIHZvaWQgcHV0UmVzaWRlbnRWZWN0b3IgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgIGZSZXNpZGVudFZlY3Rvci5hZGRFbGVtZW50KG9iamVjdCk7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogdmVjdG9yIHVzZWQgdG8gaG9sZCBzdGF0ZSBkYXRhIAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvciAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IgKFZlY3RvciB2ZWN0b3IpCi0gIHsKLSAgICAgIGZSZXNpZGVudFZlY3RvciA9IHZlY3RvcjsKLSAgfQotICAKLQotICAvKioKLSAgKiByZXR1cm5zIHRoZSByZXNpZGVudCB2ZWN0b3IKLSAgKiBAcmV0dXJuIFZpc2l0b3IgCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UmVzaWRlbnRWZWN0b3IgKCkKLSAgewotICAgICAgcmV0dXJuIGZSZXNpZGVudFZlY3RvcjsKLSAgfQotICAKLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbnkgc3RhdGUgYSBnZW5lcmF0b3IgbWF5IGhhdmUKLSAgKgotICAqKi8KLQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkKLSAgewotICAgICAvL3RvIGJlIGltcGxlbWVudGVkIGluIHN1Ymxhc3NlcwotICB9Ci0KLQotICAgLyoqCi0gICogc2V0cyB0aGUgdmlzaXRvciB0aGF0IGNhbGxzIHRoZSB2aXNpdAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvciAKLSAgKi8KLQotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFZpc2l0b3IgdmlzaXRvcikKLSAgewotICAgICAgZlZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLQotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgLy9pbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzCi0gIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1JlbFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9SZWxWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYzlmZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1JlbFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuOwotICAgICAgCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWw7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiBUaGlzIHZpc3RvciB3aWxsIHZpc2l0IGVsZW1lbnRzIGluIGEgbW9kZWwgZ2l2ZW4gYSAKLSogcGFydGljdWxhciByZWwKLSogKi8KLXB1YmxpYyBjbGFzcyBSZWxWaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcml2YXRlIGludCBmRWxlbWVudENvdW50ZXI7Ci0gIHByaXZhdGUgaW50IGZUb3RhbEVsZW1lbnRzOwotICBwcml2YXRlIFN0cmluZyBmcmVsTmFtZTsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLQotICBwdWJsaWMgUmVsVmlzaXRvciAoU3RyaW5nIHJlbE5hbWUpCi0gIHsKLSAgICAgZnJlbE5hbWUgPSByZWxOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldFRvdGFsRWxlbWVudHNUb1Zpc2l0KCkKLSAgewotICAgICByZXR1cm4gZlRvdGFsRWxlbWVudHM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0xhc3RFbGVtZW50KCkKLSAgewotICAgICBpZihnZXRUb3RhbEVsZW1lbnRzVG9WaXNpdCgpIC0gcHJlc2VudEVsZW1lbnQoKSA9PSAwKSByZXR1cm4gdHJ1ZTsKLSAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCBwcmVzZW50RWxlbWVudCgpCi0gIHsKLSAgICAgcmV0dXJuIGZFbGVtZW50Q291bnRlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShWaXNpdG9yQWN0aW9uIHZhKQotICB7Ci0gICAgLy9pbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzCi0gIH0gIAotICBwdWJsaWMgSVN0YXR1cyBydW4gKE9iamVjdCBzb3VyY2VFbGVtZW50LFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAJICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgaW5pdGlhbGl6ZSh2QWN0aW9uKTsKLSAgCi0gICAgICAgIHZBY3Rpb24uc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgICAgUmVsIHJlbCA9ICgoQmFzaWNFbGVtZW50KXNvdXJjZUVsZW1lbnQpLmdldFJlbChmcmVsTmFtZSk7Ci0gICAgICAgIC8vc2V0IHNvbWUgc3RhdGUgZGF0YQotICAgICAgICBmVG90YWxFbGVtZW50cyA9IHJlbC5nZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzKCk7Ci0gICAgICAgIGZFbGVtZW50Q291bnRlciA9IDA7ICAKLSAgICAgICAgCi0gICAgICAgIEVudW1lcmF0aW9uIGUgPSByZWwuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgICBCYXNpY0VsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOyAKLSAgICAgICAgICAgZkVsZW1lbnRDb3VudGVyKys7Ci0gICAgICAgICAgIGluaXRpYWxpemUodkFjdGlvbik7Ci0gICAgICAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQodGFyZ2V0RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgfSAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9WaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTcwNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGludGVyZmFjZSBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwdWJsaWMgSVN0YXR1cyBydW4gKE9iamVjdCBvYmplY3QsIFZpc2l0b3JBY3Rpb24gdkFjdGlvbik7Ci0gICAgICAgIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0MTI2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFZpc2l0b3JBY3Rpb24uCi0qIFRoZSB2aXNpdG9yIHdhbGtzIHRoZSBtb2RlbCBhbmQgdGhlIFZpc2l0b3JBY3Rpb24gCi0qIGRvZXMgdGhlIGFjdGlvbgotKiAqLwotcHVibGljIGludGVyZmFjZSBWaXNpdG9yQWN0aW9uIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KTsKLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpOwotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN0cmluZyByZXNpZGVudFN0cmluZyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9BdHRyaWJ1dGVWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9BdHRyaWJ1dGVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZmM2MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vQXR0cmlidXRlVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uUmVsVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEF0dHJpYnV0ZVZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHByaXZhdGUgVmVjdG9yIGZSZXNpZGVudFZlY3RvcjE7Ci0gIHByaXZhdGUgVmVjdG9yIGZSZXNpZGVudFZlY3RvcjI7Ci0KLSAgIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBBdHRyaWJ1dGVWaXNpdG9yICgpCi0gIHsKLSAgICBzdXBlcihUeXBlRWxlbWVudC5SRUxfQVRUUklCVVRFUyk7Ci0gIH0KLQotICBwdWJsaWMgQXR0cmlidXRlVmlzaXRvciAoU3RyaW5nIHJlbCkKLSAgewotICAgIHN1cGVyKHJlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50U3RyaW5nKFN0cmluZyByZXNpZGVudCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IxKFZlY3RvciByZXNpZGVudCkKLSAgewotICAgIGZSZXNpZGVudFZlY3RvcjEgPSByZXNpZGVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50VmVjdG9yMihWZWN0b3IgcmVzaWRlbnQpCi0gIHsKLSAgICBmUmVzaWRlbnRWZWN0b3IyID0gcmVzaWRlbnQ7Ci0gIH0KLQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgICAgLy9oYWNrIGZvciAxOTc3MjYKLQotICAgICBpZih2QWN0aW9uIGluc3RhbmNlb2YgSW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKXsKLSAgICAgICBpZihmUmVzaWRlbnRWZWN0b3IxID09IG51bGwpIGZSZXNpZGVudFZlY3RvcjE9bmV3IFZlY3RvcigpOwotICAgICAgIGlmKGZSZXNpZGVudFZlY3RvcjIgPT0gbnVsbCkgZlJlc2lkZW50VmVjdG9yMj1uZXcgVmVjdG9yKCk7Ci0gICAgICAgKChJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IpdkFjdGlvbikuc2V0UGFyZW50R2V0dGVycyhmUmVzaWRlbnRWZWN0b3IxLGZSZXNpZGVudFZlY3RvcjIpOwotICAgICB9Ci0gIH0KLSAKLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL0ZpZWxkVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vRmllbGRWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NWJlNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vRmllbGRWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEZpZWxkVmlzaXRvciBleHRlbmRzIEF0dHJpYnV0ZVZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJpdmF0ZSBWZWN0b3IgZlJlc2lkZW50VmVjdG9yMTsKLSAgcHJpdmF0ZSBWZWN0b3IgZlJlc2lkZW50VmVjdG9yMjsKLQotICAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIEZpZWxkVmlzaXRvciAoKQotICB7Ci0gICAgc3VwZXIoVHlwZUVsZW1lbnQuUkVMX0ZJRUxEUyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50U3RyaW5nKFN0cmluZyByZXNpZGVudCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IxKFZlY3RvciByZXNpZGVudCkKLSAgewotICAgIGZSZXNpZGVudFZlY3RvcjEgPSByZXNpZGVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50VmVjdG9yMihWZWN0b3IgcmVzaWRlbnQpCi0gIHsKLSAgICBmUmVzaWRlbnRWZWN0b3IyID0gcmVzaWRlbnQ7Ci0gIH0KLQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgICAgLy9oYWNrIGZvciAxOTc3MjYKLQotICAgICBpZih2QWN0aW9uIGluc3RhbmNlb2YgSW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKXsKLSAgICAgICBpZihmUmVzaWRlbnRWZWN0b3IxID09IG51bGwpIGZSZXNpZGVudFZlY3RvcjE9bmV3IFZlY3RvcigpOwotICAgICAgIGlmKGZSZXNpZGVudFZlY3RvcjIgPT0gbnVsbCkgZlJlc2lkZW50VmVjdG9yMj1uZXcgVmVjdG9yKCk7Ci0gICAgICAgKChJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IpdkFjdGlvbikuc2V0UGFyZW50R2V0dGVycyhmUmVzaWRlbnRWZWN0b3IxLGZSZXNpZGVudFZlY3RvcjIpOwotICAgICB9Ci0gIH0KLSAKLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL01ldGhvZFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL01ldGhvZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2NjQ2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9NZXRob2RWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIE1ldGhvZFZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBNZXRob2RWaXNpdG9yICgpCi0gIHsKLSAgICAgc3VwZXIoQmVhbkVsZW1lbnQuUkVMX01FVEhPRFMpOwotICB9Ci0gIAotICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1BhcmFtZXRlclZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1BhcmFtZXRlclZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc0OTMxMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9QYXJhbWV0ZXJWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyVmlzaXRvciBleHRlbmRzIFJlbFZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIFBhcmFtZXRlclZpc2l0b3IgKCkKLSAgewotICAgICBzdXBlcihNZXRob2RFbGVtZW50LlJFTF9QQVJBTUVURVJTKTsKLSAgfQotICAKLSAgIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjIwNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vUmV0dXJuUGFyYW1ldGVyVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5SZWxWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFJldHVyblBhcmFtZXRlclZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBSZXR1cm5QYXJhbWV0ZXJWaXNpdG9yICgpCi0gIHsKLSAgICAgc3VwZXIoTWV0aG9kRWxlbWVudC5SRUxfUkVUVVJOX1BBUkFNRVRFUlMpOwotICB9Ci0gIAotICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1R5cGVWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9UeXBlVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjU0NjE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1R5cGVWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFR5cGVWaXNpdG9yIGV4dGVuZHMgUmVsVmlzaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLQotICBwdWJsaWMgVHlwZVZpc2l0b3IgKCkKLSAgewotICAgIHN1cGVyKFR5cGVFbGVtZW50LlJFTF9UWVBFKTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5NmU5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0RldGVjdE5vbkphdmFDaGFyc0JlYW5WaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZNZXRob2RWaXNpdG9yOwotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQmVhbkVsZW1lbnQgdXNpbmcgdGhlCi0qIEphdmFDbGFzcyBhbmQgdGhlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeQotKiBJdCB3aWxsIGFsc28gYXV0b21hdGljYWxseSB3YWxrIHRoZSBtZXRob2RzIGluIHRoZSBKYXZhQ2xhc3MKLSogKi8KLXB1YmxpYyBjbGFzcyBEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbiBleHRlbmRzIFZpc2l0b3JBY3Rpb25JbXBsCi17Ci0gIHByaXZhdGUgc3RhdGljIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLQotICBwdWJsaWMgRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24gKCBWZWN0b3IgbWVzc2FnZXMsIFZlY3RvciBiZWFucykKLSAgCXsKLSAgCQlzdXBlciAobWVzc2FnZXMsIGJlYW5zKTsKLSAgCX0KLQotICAvKioKLSAgKiBUaGUgdmlzaXQgd2lsbCBjcmVhdGUgdGhlIGJlYW4KLSAgKiBXYWxrIHRoZSBtZXRob2RzCi0gICogQHBhcmFtIEphdmFDbGFzcyB0aGUgY2xhc3MgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGJlYW4gbW9kZWwKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgamF2YWNsYXNzKQotICB7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOwotICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGphdmFDbGFzcy5nZXRKYXZhUGFja2FnZSgpLmdldFBhY2thZ2VOYW1lKCk7Ci0gICAgU3RyaW5nIGJlYW5OYW1lID0gamF2YUNsYXNzLmdldE5hbWUoKTsKLQotICAgIGlmICghaXNCZWFuVmlzaXRlZChqYXZhQ2xhc3MpKSB7Ci0gICAgICAJYWRkVmlzaXRlZEJlYW4oamF2YUNsYXNzKTsKLQkJLy8gY2hlY2sgdGhlIGJlYW4gbmFtZQotCQljaGVja0JlYW5OYW1lKGJlYW5OYW1lKTsKLQkJY2hlY2tQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgYmVhbk5hbWUpOwotCSAgCURldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24gbWV0aG9kVmlzaXRvckFjdGlvbiA9IG5ldyBEZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uKGdldE1lc3NhZ2VzKCksIGdldEJlYW5zVmlzaXRlZCgpKTsKLSAgICAgIAlKYXZhTW9mTWV0aG9kVmlzaXRvciBtZXRob2RWaXNpdG9yID0gbmV3IEphdmFNb2ZNZXRob2RWaXNpdG9yKCk7Ci0gICAgCW1ldGhvZFZpc2l0b3IucnVuKGphdmFDbGFzcyxtZXRob2RWaXNpdG9yQWN0aW9uKTsKLSAgICAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgfQotCi0gICBwcml2YXRlIHZvaWQgY2hlY2tCZWFuTmFtZShTdHJpbmcgYmVhbk5hbWUpCi0gICAJewotCSAKLQkgLy8gY2hlY2sgaWYgdGhlIGJlYW4gc3RhcnRzIHdpdGggYSBsb3dlciBjYXNlCi0JIGlmICggQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGJlYW5OYW1lLmNoYXJBdCgwKSkpCi0gICAgCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5XQVJOX0JFQU5fTkFNRV9TVEFSVFNfV0lUSF9MT1dFUl9DQVNFLCBuZXcgU3RyaW5nW117YmVhbk5hbWV9KTsgIAotCi0JCi0gICAgIC8vY2hlY2sgaWYgdGhlIG5hbWUgaGFzIGFuIHVuZGVyc2NvcmUsIHRoZW4gbmV4dCBsZXR0ZXIgc2hvdWxkIGJlIHVwcGVyIGNhc2UKLSAgICAgaW50IHVuZGVyU2NvcmVJbmRleCA9IGJlYW5OYW1lLmluZGV4T2YoVU5ERVJTQ09SRSk7Ci0JIFN0cmluZyB0ZW1wTmFtZSA9IGJlYW5OYW1lOwotCSB3aGlsZSh1bmRlclNjb3JlSW5kZXggIT0tMSkgewotCQl0ZW1wTmFtZSA9IHRlbXBOYW1lLnN1YnN0cmluZyh1bmRlclNjb3JlSW5kZXgrMSk7Ci0JCWlmICggQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKHRlbXBOYW1lLmNoYXJBdCgwKSkpIHsKLSAgICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX01FVEhPRF9OQU1FX0lOVkFMSUQsIG5ldyBTdHJpbmdbXSB7IGJlYW5OYW1lIH0pOyAgCi0gICAgICAJCWJyZWFrOwotCQkJfQotCQllbHNlCi0JCQl1bmRlclNjb3JlSW5kZXggPSB0ZW1wTmFtZS5pbmRleE9mKFVOREVSU0NPUkUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrUGFja2FnZU5hbWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgYmVhbk5hbWUpCi0JCXsKLQkJCWlmICghcGFja2FnZU5hbWUuZXF1YWxzKHBhY2thZ2VOYW1lLnRvTG93ZXJDYXNlKCkpKQotCQkJCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9QQUNLQUdFX05BTUVfSEFTX1VQUEVSX0NBU0UsIG5ldyBTdHJpbmdbXSB7IHBhY2thZ2VOYW1lLCBiZWFuTmFtZSB9KTsKLQkJfQotIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzTWV0aG9kVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NjBiZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlBhcmFtZXRlclZpc2l0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIEJlYW5FbGVtZW50IHVzaW5nIHRoZSAKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIERldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBWaXNpdG9yQWN0aW9uSW1wbCAKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmljZUJlYW4gPSBmYWxzZTsKLQotICAgcHVibGljIERldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24gKCBWZWN0b3IgbWVzc2FnZXMsIFZlY3RvciBiZWFucykKLSAgCXsKLSAgCQlzdXBlciAobWVzc2FnZXMsIGJlYW5zKTsKLSAgCQlpZiAoIGJlYW5zLnNpemUoKSA9PSAxKQotICAJCQlzZXJ2aWNlQmVhbiA9IHRydWU7Ci0gIAl9Ci0KLSAgLyoqCi0gICogQ3JlYXRlIGEgbWV0aG9kIGVsZW1lbnQgZnJvbSB0aGUgbWV0aG9kIAotICAqIEBwYXJhbSBNZXRob2QgdGhlIGNsYXNzIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgaW1ldGhvZCkKLSAgewotICAgIAotICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKWltZXRob2Q7Ci0gICAgU3RyaW5nICBjbGFzc05hbWUgPSBtZXRob2QuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpLmdldE5hbWUoKTsKLSAgICBTdHJpbmcgbmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7Ci0KLQlpZiAoIHNlcnZpY2VCZWFuICYmICFtZXRob2QuaXNDb25zdHJ1Y3RvcigpICkKLQkJY2hlY2tVcHBlckNhc2UobmFtZSwgY2xhc3NOYW1lKTsKLQkKLQkvLyBmb3Igc2VydmljZSBiZWFuIG9yIGFueSByZWZlcmVuY2VkIGJlYW4gcHJvcGVydHkgYWNjZXNzb3JzCi0JIGlmICggc2VydmljZUJlYW4gfHwgbmFtZS5zdGFydHNXaXRoKCJnZXQiKSB8fCBuYW1lLnN0YXJ0c1dpdGgoInNldCIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiaXMiKSkgCi0JIHsKLQkgICAgY2hlY2tVbmRlclNjb3JlKG5hbWUsIGNsYXNzTmFtZSk7Ci0JICAgIGNoZWNrTnVtZXJpY0RpZ2l0cyhuYW1lLCBjbGFzc05hbWUpOwotCSAgICBjaGVja0Jvb2xlYW5Qcm9wZXJ0aWVzKG1ldGhvZCwgY2xhc3NOYW1lKTsKLQkJICAJCi0JIAlEZXRlY3ROb25KYXZhQ2hhcnNQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uIHBhcmFtZXRlclZpc2l0b3JBY3Rpb24gPSBuZXcgRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbihnZXRNZXNzYWdlcygpLCBnZXRCZWFuc1Zpc2l0ZWQoKSk7Ci0JIAkvLyByc2sgUGFzc2luZyBpbiBudWxsIGZvciB0aGUgZW52aXJvbm1lbnQuIERldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gT0sgc3RhdHVzLgotICAgIAlKYXZhTW9mUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yKG51bGwpOwotICAgIAlwYXJhbWV0ZXJWaXNpdG9yLnJ1bihtZXRob2QsIHBhcmFtZXRlclZpc2l0b3JBY3Rpb24pOyAgIAotCSAgfQotCSAKLQkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja1VwcGVyQ2FzZShTdHJpbmcgbmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAJIC8vIGluIGEgc2VydmljZSBiZWFuIGNoZWNrIGlmIGFueSBtZXRob2Qgc3RhcnRzIHdpdGggdXBwZXIgY2FzZSBsZXR0ZXIKLQkgaWYgKCBDaGFyYWN0ZXIuaXNVcHBlckNhc2UobmFtZS5jaGFyQXQoMCkpKQotICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pBVkFfTUVUSE9EX1NUQVJUX1dJVEhfVVBQRVJfQ0FTRSwgbmV3IFN0cmluZ1tde25hbWUsIGNsYXNzTmFtZX0pOyAgCi0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja1VuZGVyU2NvcmUoU3RyaW5nIG5hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICAgLy9jaGVjayBpZiB0aGUgbmFtZSBoYXMgYW4gdW5kZXJzY29yZSwgdGhlbiBuZXh0IGxldHRlciBzaG91bGQgYmUgdXBwZXIgY2FzZQotICAgICBpbnQgdW5kZXJTY29yZUluZGV4ID0gbmFtZS5pbmRleE9mKFVOREVSU0NPUkUpOwotCSBTdHJpbmcgdGVtcE5hbWUgPSBuYW1lOwotCSB3aGlsZSh1bmRlclNjb3JlSW5kZXggIT0tMSkgewotCQl0ZW1wTmFtZSA9IHRlbXBOYW1lLnN1YnN0cmluZyh1bmRlclNjb3JlSW5kZXgrMSk7Ci0JCWlmICggQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKHRlbXBOYW1lLmNoYXJBdCgwKSkpIHsKLSAgICAJCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9NRVRIT0RfTkFNRV9JTlZBTElELCBuZXcgU3RyaW5nW117bmFtZSwgY2xhc3NOYW1lfSk7ICAKLSAgICAgCQlicmVhazsKLQkJfQotCQllbHNlCi0JCQl1bmRlclNjb3JlSW5kZXggPSB0ZW1wTmFtZS5pbmRleE9mKFVOREVSU0NPUkUpOwotCSAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja051bWVyaWNEaWdpdHMoU3RyaW5nIG5hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICAgLy9jaGVjayBpZiB0aGUgbmFtZSBoYXMgYSBudW1lcmljLCB0aGVuIG5leHQgbGV0dGVyIHNob3VsZCBiZSB1cHBlciBjYXNlCi0gICAgIGZvciAoIGludCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykKLSAgICAgCXsKLSAgICAgCQlpZiAoIENoYXJhY3Rlci5pc0RpZ2l0KG5hbWUuY2hhckF0KGkpKSkKLSAgICAgCQkJewotICAgICAJCQkJaWYgKENoYXJhY3Rlci5pc0xvd2VyQ2FzZShuYW1lLmNoYXJBdChpKzEpKSkgewotCQkJICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX01FVEhPRF9OQU1FX0lOVkFMSUQsIG5ldyBTdHJpbmdbXXtuYW1lLCBjbGFzc05hbWV9KTsgIAotCQkJICAgICAJCWJyZWFrOwotIAkJCQkJfQotCQl9Ci0gICAgIH0KLSAgfQotICBwcml2YXRlIHZvaWQgY2hlY2tCb29sZWFuUHJvcGVydGllcyhNZXRob2QgbWV0aG9kLCBTdHJpbmcgY2xhc3NOYW1lKQotICAJewotICAJCWlmICghc2VydmljZUJlYW4gJiYgbWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCJnZXQiKSAmJiAKLSAgCQkJKG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0TmFtZSgpLmVxdWFscygiYm9vbGVhbiIpIHx8Ci0gIAkJCSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpKQotICAJCQlhZGRNZXNzYWdlKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fQk9PTEVBTl9QUk9QRVJUWV9BQ0NFU1NPUlMsIG5ldyBTdHJpbmdbXXttZXRob2QuZ2V0TmFtZSgpLCBjbGFzc05hbWV9KTsgIAotICAJfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0RldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWUyOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkFycmF5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkJlYW5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIEJlYW5FbGVtZW50IHVzaW5nIHRoZSAKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIERldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBWaXNpdG9yQWN0aW9uSW1wbCAKLXsKLQotICBwdWJsaWMgRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbiAoIFZlY3RvciBtZXNzYWdlcywgVmVjdG9yIGJlYW5zKQotICAJewotICAJCXN1cGVyIChtZXNzYWdlcywgYmVhbnMpOwotICAJfQotCi0gIC8qKgotICAqIENyZWF0ZSBhIG1ldGhvZCBlbGVtZW50IGZyb20gdGhlIG1ldGhvZCAKLSAgKiBAcGFyYW0gTWV0aG9kIHRoZSBjbGFzcyB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGlqYXZhUGFyYW1ldGVyKQotICB7Ci0gICAgCi0gICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyID0gKEphdmFQYXJhbWV0ZXIpIGlqYXZhUGFyYW1ldGVyOwotICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBudWxsOwotICAgIGlmICggamF2YVBhcmFtZXRlci5nZXRKYXZhVHlwZSgpIGluc3RhbmNlb2YgSmF2YUNsYXNzKSAKLSAgICAJewotICAgIAlqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKSBqYXZhUGFyYW1ldGVyLmdldEphdmFUeXBlKCk7Ci0gICAgCWlmIChqYXZhQ2xhc3MuaXNBcnJheSgpKQotICAgIAkgIHsKLSAgICAJICAgIEphdmFIZWxwZXJzIGNvbXBvbmVudFR5cGUgPSAoKEFycmF5VHlwZSlqYXZhQ2xhc3MpLmdldENvbXBvbmVudFR5cGVBc0hlbHBlcigpOwotICAgIAkgICAgaWYgKGNvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpCi0gICAgCSAgICAgIHsKLSAgICAJICAgICAgICBqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKWNvbXBvbmVudFR5cGU7Ci0gICAgCSAgICAgIH0KLSAgICAJICAgIGVsc2UKLSAgICAJICAgICAgewotICAgIAkgICAgICAgIGphdmFDbGFzcyA9IG51bGw7IC8vVGhlIGFycmF5IGNvbnRhaW5zIHByaW1pdGl2ZSB0eXBlcywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZnVydGhlciBjaGVja2luZy4KLSAgICAJICAgICAgfQotICAgIAkgIH0KLSAgICAJfQotICAgCWlmICh0b0JlVmlzaXRlZChqYXZhQ2xhc3MpKSAgICB7Ci0JCQlEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbihnZXRNZXNzYWdlcygpLCBnZXRCZWFuc1Zpc2l0ZWQoKSk7Ci0JCQlKYXZhTW9mQmVhblZpc2l0b3IgYmVhblZpc2l0b3IgPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yKCk7Ci0JCQliZWFuVmlzaXRvci5ydW4oamF2YUNsYXNzLGJlYW5WaXNpdG9yQWN0aW9uKTsKLSAgCSAgCX0KLSAgIAkKLSAgIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQotICBwcml2YXRlIGJvb2xlYW4gdG9CZVZpc2l0ZWQgKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gIHsKLQkvL2NoZWNrIGZvciByZWNvZ25pemVkIHR5cGVzIAotCWlmKCBqYXZhQ2xhc3MgPT0gbnVsbAl8fAotCSAgIGphdmFDbGFzcy5pc1ByaW1pdGl2ZSgpIHx8Ci0JICAgamF2YUNsYXNzLmdldEphdmFOYW1lKCkuc3RhcnRzV2l0aCgiamF2YXgiKSB8fAotICAgICAgIFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGphdmFDbGFzcy5nZXRKYXZhTmFtZSgpKSkKLQkgICAgCXJldHVybiBmYWxzZTsKLQllbHNlCi0JCSAgCXJldHVybiB0cnVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzY2EyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlR5cGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkF0dHJpYnV0ZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uLlNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQXR0cmlidXRlRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgYSBjb21wbGV4IHR5cGUKLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbiBleHRlbmRzIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbgotewotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIHByb2plY3QsIElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRFbGVtZW50LHByb2plY3QsIGVudik7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IHByb3BlcnR5RGVjb3JhdG9yKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAkgIAkKLSAgICAvL1Byb3BlcnR5RGVjb3JhdG9yIHBkID0gKFByb3BlcnR5RGVjb3JhdG9yKXByb3BlcnR5RGVjb3JhdG9yOwotICAgIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciBwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IpcHJvcGVydHlEZWNvcmF0b3I7ICAKLSAgICAKLSAgICAKLSAgICB0cnl7Ci0gICAgICAgLy9pZiB0aGUgdHlwZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyB1bnN1cHBvcnRlZCBkb250IG1ha2UgYW4gQXR0cmlidXRlCi0gICAgICBpZighKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZSgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpKSAKLSAgICAgIAkmJiAoVHlwZUZhY3RvcnkuaXNVblN1cHBvcnRlZFR5cGUoKEphdmFIZWxwZXJzKXBkLmdldFByb3BlcnR5VHlwZSgpKSkpewotICAgICAgCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRSArICgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpLmdldEphdmFOYW1lKCkgKTsKLQkgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotCSAgICAgIC8vQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRSArICgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpLmdldEphdmFOYW1lKCksbnVsbCkpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICB9CQotCi0gICAgICBNZXRob2Qgc2V0TWV0aG9kID0gcGQuZ2V0V3JpdGVNZXRob2QoKTsKLSAgICAgIE1ldGhvZCBnZXRNZXRob2QgPSBwZC5nZXRSZWFkTWV0aG9kKCk7Ci0gICAgICBpZihzZXRNZXRob2QgIT0gbnVsbCl7Ci0gICAgICAJaWYoc2V0TWV0aG9kLmlzU3RhdGljKCkpewotICAgICAgICAgIHNldE1ldGhvZD1udWxsOyAKLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICBpZihnZXRNZXRob2QgIT0gbnVsbCl7Ci0gICAgICAJaWYoZ2V0TWV0aG9kLmlzU3RhdGljKCkpewotICAgICAgICAgIGdldE1ldGhvZD1udWxsOwotICAgICAgCX0KLSAgICAgIH0KLSAgICAgIGlmKHBkLmlzZlN0YXRpYygpKXsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIAotICAgICAgQXR0cmlidXRlRWxlbWVudCBhdHRyaWJ1dGVFbGVtZW50ID0gKEF0dHJpYnV0ZUVsZW1lbnQpQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQocHJvcGVydHlEZWNvcmF0b3IsZlBhcmVudEVsZW1lbnQpOwotCi0gICAgICBpZihhdHRyaWJ1dGVFbGVtZW50ICE9IG51bGwpewotICAgICAgICAKLSAgICAgICAgLy9sZXRzIGNoZWNrIGFuZCBzZWUgaWYgdGhlIGdldHRlciB0YWtlcyBpbnB1dCBwYXJhbXMKLSAgICAgICAgLy9pZiBzbyB0aHJvdyBhbiBlcnJvcgotICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgIGlmKGdldE1ldGhvZCAhPSBudWxsKXsKLQkgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IGdldE1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLQkgICAgICAgIGlmKGphdmFQYXJhbWV0ZXIubGVuZ3RoID4gMCl7Ci0JICAgICAgICAgIGlmKGdldFJldHVyblBhcmFtKCkpIHJldHVybiBzdGF0dXM7Ci0JICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX0lOREVYRURfUFJPUEVSVElFUyArIGdldE1ldGhvZC5nZXROYW1lKCkgKTsKLQkgICAgICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzIChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLQkgICAgICAgICAgLy8JCUNvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX0lOREVYRURfUFJPUEVSVElFUyArIGdldE1ldGhvZC5nZXROYW1lKCksbnVsbCkpOwotCSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotCSAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmKHNldE1ldGhvZCAhPSBudWxsKSBhdHRyaWJ1dGVFbGVtZW50LnNldFNldHRlck1ldGhvZChzZXRNZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgaWYoZ2V0TWV0aG9kICE9IG51bGwpIGF0dHJpYnV0ZUVsZW1lbnQuc2V0R2V0dGVyTWV0aG9kKGdldE1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvckFjdGlvbiB0eXBlVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24oYXR0cmlidXRlRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAgdHlwZVZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoZ2V0QmVhbnNDcmVhdGVkKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsgCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3IoZW52Xyk7Ci0gICAgICAgIHR5cGVWaXNpdG9yLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgc3RhdHVzID0gdHlwZVZpc2l0b3IucnVuKHBkLHR5cGVWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAKLSAgICAgIH0KLSAgICAKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfWNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJZW52Xy5nZXRMb2coKS5sb2coSUxvZy5XQVJOSU5HLCA1MDU0LCB0aGlzLCAidmlzaXQiLCBlKTsKLSAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4sIGUpOwotICAgIAl0cnkgewotCQkJZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0JCX0gY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBlMSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4pOwotCQl9Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIC8vZW52LkxvZy53cml0ZSh0aGlzLCJ2aXNpdCIsSUxvZy5PSyxlKTt9Ci0KLSAgfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZWM2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzEzICAgMTc2NTgwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBHZW5lcmF0ZSBhIENsaWVudCBXUyBQcm94eSBhY2NlcHRpbmcgVVJMCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZC5OdWxsU3RhdHVzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZC5TdGF0dXNNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZGaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZNZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBCZWFuRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24KLXsKLQotICBwcm90ZWN0ZWQgSUVudmlyb25tZW50IGVudl87Ci0gIHByb3RlY3RlZCBWaXNpdG9yIGZWaXNpdG9yOwotCi0gIC8qCi0gICogVGhlIHByb2plY3QgdGhhdCBkZWZpbmVzIHRoZSBjb250ZXh0Ci0gICoqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0KLSAgLyoKLSAgKiBUaGUgU3RhdHVzIG1vbml0b3IKLSAgKiovCi0gIHByb3RlY3RlZCBTdGF0dXNNb25pdG9yIG1vbml0b3JfOwotCi0gIC8qCi0gICogVGhlIG1vZGVsIHRoYXQgd2lsbCBiZSBjcmVhdGVkCi0gICoqLwotICBwcm90ZWN0ZWQgTW9kZWwgZk1vZGVsOwotCi0gIC8qCi0gICogVGhpcyBpcyB0aGUgcGFyZW50IGVsZW1lbnQgdXNlZCB3aGVuIGNyZWF0aW5nIGEKLSAgKiBuZXcgZWxlbWVudAotICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudCBmUGFyZW50RWxlbWVudDsKLQotICAvKgotICAqIE1ldGhvZHMgcHJvY2Vzc2VkIGZyb20gcHJveHkKLSAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmQmVhbnNDcmVhdGVkOwotCi0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIGZNZXRob2RzU2VsZWN0ZWQ7Ci0KLSAgLyoKLSAgKiB0aGlzIGJvb2xlYW4gdGVsbHMgd2V0aGVyIHRoZSBiZWFuIGlzIGEgcmV0dXJuIHBhcmFtZXRlciBvciBhbiBpbnB1dCBwYXJhbWV0ZXIKLSAgKiB1c3VhbGx5IHRoaXMgc2hvdWxkIGJlIHNldCBhcm91bmQgdGhlIHBhcmFtZXRlcnZpc2l0b3JhY3Rpb24sIGFuZCBwYXNzZWQgb24gZnJvbSB0aGVyZQotICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBmUmV0dXJuUGFyYW09ZmFsc2U7Ci0KLSAgcHVibGljIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbihTdHJpbmcgY2xpZW50UHJvamVjdCxCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcywgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gICAgZk1ldGhvZHNTZWxlY3RlZCA9IG1ldGhvZHM7Ci0JZW52XyA9IGVudjsKLSAgfQotCi0KLQotICAvKgotICAqQ29uc3RydWN0b3IKLSAgKiBAcGFyYW0gTW9kZWwgbW9kZWwgaXMgdGhlIE1vZGVsIHRoYXQgdGhpcyBiZWFuIHdpbGwgYmUgcGxhY2VkIGluCi0gICogQHBhcmFtIElQcm9qZWN0IHVzZWQgaW4gbmF0dXJlCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKE1vZGVsIG1vZGVsLCBTdHJpbmcgY2xpZW50UHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gICAgZk1vZGVsID0gbW9kZWw7Ci0JZW52XyA9IGVudjsKLSAgfQotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqIEBwYXJhbSBFbGVtZW50IHRoZSBwYXJlbnQgZWxlbWVudCB0aGF0IHRoaXMgZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvbwotICAqIEBwYXJhbSBJUHJvamVjdCB1c2VkIGluIG5hdHVyZQotICAqKi8KLSAgcHVibGljIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbihFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBjbGllbnRQcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52ICkKLSAgewotICAgIGZQYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotCWVudl8gPSBlbnY7Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgdmlzaXQgd2lsbCBjcmVhdGUgdGhlIGJlYW4KLSAgKiBXYWxrIHRoZSBtZXRob2RzCi0gICogQHBhcmFtIEphdmFDbGFzcyB0aGUgY2xhc3MgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGJlYW4gbW9kZWwKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgamF2YWNsYXNzKQotICB7Ci0gIAlDaG9pY2UgT0tDaG9pY2UgPSBuZXcgQ2hvaWNlKCdPJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9PSywgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9PSyk7Ci0gIAlDaG9pY2UgQ2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfQ0FOQ0VMLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX0NBTkNFTCk7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOwotICAgIAotICAgIAotICAgIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50ID0gKEJlYW5FbGVtZW50KUJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KGphdmFDbGFzcyxmUGFyZW50RWxlbWVudCxmTW9kZWwpOwotICAgIGlmKGJlYW5FbGVtZW50LmlzT3duZXJQYXJhbWV0ZXIoKSkgewotICAgICAgICByZXNldEJlYW5zQ3JlYXRlZCgpOwotICAgIH0KLSAgICBmTW9kZWwgPSBiZWFuRWxlbWVudC5nZXRNb2RlbCgpOwotCi0gICAgLy90aGlzIGZvciB0aGUgc3Vic2VxdWVudCBiZWFucyB0aGF0IHJlcHJlc2VudCB0eXBlcwotICAgIC8vZmlyc3QgZG8gdGhlIGF0dHJpYnV0ZXMKLSAgICAvL2lmIHdlIGFyZSBub3Qgb24gdGhlIHJvb3QKLSAgICBpZiAoIShiZWFuRWxlbWVudCA9PSBmTW9kZWwuZ2V0Um9vdEVsZW1lbnQoKSkpewotICAgICAgIEVudW1lcmF0aW9uIGUgPSBnZXRCZWFuc0NyZWF0ZWQoKS5lbGVtZW50cygpOwotICAgICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgaWYobmFtZS5lcXVhbHMoamF2YUNsYXNzLmdldE5hbWUoKSkpewotICAgICAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfQ1lDTElDX0JFQU4gKTsKLSAgICAgICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyhuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLSAgICAgICAgICAgIAkJCS8vV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLmdldE1lc3NhZ2UoICIlTVNHX0VSUk9SX0pUU19DWUNMSUNfQkVBTiIgKSxudWxsKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgCi0gICAgICAgSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24gYXR0cmlidXRlVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbihiZWFuRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAvL2F0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgIFZlY3RvciBjaGlsZFZlY3RvciA9ICgoVmVjdG9yKWdldEJlYW5zQ3JlYXRlZCgpLmNsb25lKCkpOwotICAgICAgIGNoaWxkVmVjdG9yLmFkZEVsZW1lbnQoamF2YUNsYXNzLmdldE5hbWUoKSk7ICAKLSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yQWN0aW9uLnNldEJlYW5zQ3JlYXRlZChjaGlsZFZlY3Rvcik7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICBKYXZhTW9mQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRSZXR1cm5QYXJhbWV0ZXIoZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRFbnZpcm9ubWVudChlbnZfKTsKLSAgICAgICBzdGF0dXMgPSBhdHRyaWJ1dGVWaXNpdG9yLnJ1bihqYXZhQ2xhc3MsYXR0cmlidXRlVmlzaXRvckFjdGlvbik7Ci0gICAgICAgLy8KLSAgICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgCi0gICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICAgewotICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgIH0KLSAgICAgICAgIAkKLSAgICAgICB9Ci0gICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgIEphdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24gZmllbGRWaXNpdG9yQWN0aW9uID0gbmV3IEphdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24oYmVhbkVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52Xyk7Ci0gICAgICAgLy9maWVsZFZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgIFZlY3RvciBjaGlsZFZlY3RvcjIgPSAoKFZlY3RvcilnZXRCZWFuc0NyZWF0ZWQoKS5jbG9uZSgpKTsKLSAgICAgICBjaGlsZFZlY3RvcjIuYWRkRWxlbWVudChqYXZhQ2xhc3MuZ2V0TmFtZSgpKTsgIAotICAgICAgIGZpZWxkVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoY2hpbGRWZWN0b3IyKTsKLSAgICAgICBmaWVsZFZpc2l0b3JBY3Rpb24uc2V0UmV0dXJuUGFyYW0oZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgSmF2YU1vZkZpZWxkVmlzaXRvciBmaWVsZFZpc2l0b3IgPSBuZXcgSmF2YU1vZkZpZWxkVmlzaXRvcigpOwotICAgICAgIGZpZWxkVmlzaXRvci5zZXRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgICAgc3RhdHVzID0gZmllbGRWaXNpdG9yLnJ1bihqYXZhQ2xhc3MsZmllbGRWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAvLwotICAgICAgIHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgIAotICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgICAgewotICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgICAgIHsKLSAgICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgICAgfQotICAgICAgICAgCQotICAgICAgIH0KLSAgICAgICAvLyAgICAgICAKLSAgICAgICAKLSAgIH0KLQotICAgIC8vdGhpcyBpcyB0byBpbnN1cmUgd2UgYXJlIG9uIHRoZSBwcm94eQotICAgIC8vbm93IGRvIHRoZSBtZXRob2RzCi0gICAgaWYgKGJlYW5FbGVtZW50ID09IGZNb2RlbC5nZXRSb290RWxlbWVudCgpKXsKLSAgICAgIC8vZmlyc3QgbGV0cyBtYWtlIHN1cmUgdGhlIHByb3h5IGlzIGluIGdvb2QgZm9ybQotICAgICAgLy8taXQgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgLy8taXQgaGFzIGF0IGxlYXN0IG9uZSBtZXRob2QKLSAgICAgIC8vb3RoZXJ3aXNlIHJldHVybiB0aGUgcHJvYmxlbSBpbiB0aGUgZm9ybSBvZiBhIHN0YXR1cwotCi0gICAgICBpZiAoIXByb3h5Q2hlY2soamF2YUNsYXNzLCBzdGF0dXMpKSByZXR1cm4gc3RhdHVzOwotICAgICAgSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24gbWV0aG9kVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mTWV0aG9kVmlzaXRvckFjdGlvbihiZWFuRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgIAotICAgICAgLy9tZXRob2RWaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICAgIEphdmFNb2ZNZXRob2RWaXNpdG9yIG1ldGhvZFZpc2l0b3IgPSBuZXcgSmF2YU1vZk1ldGhvZFZpc2l0b3IoKTsKLSAgICAgIG1ldGhvZFZpc2l0b3Iuc2V0TWV0aG9kU2VsZWN0aW9uKGZNZXRob2RzU2VsZWN0ZWQpOwotICAgICAgc3RhdHVzID0gbWV0aG9kVmlzaXRvci5ydW4oamF2YUNsYXNzLG1ldGhvZFZpc2l0b3JBY3Rpb24pOwotCi0gICAgICAvLwotICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgIHsKLSAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICB7Ci0gICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgIH0KLSAgICAgICAgCQotICAgICAgfQotICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAvL1RoaXMgaXMgd2hlcmUgd2UgY2hlY2sgZm9yIHNldmVyYWwgdGhpbmdzOgotICAgICAgLy8taWYgbm8gbWV0aG9kcyB3ZXJlIHByb2Nlc3NlZCBiZWNhdXNlIG9mIHVuc3VwcG9ydGVkIHR5cGVzIHRoZW4gd2Ugc2VuZCBiYWNrIHRoYXQgcmVzdWx0Ci0gICAgICAvLy1pZiB0aGVyZSB3ZXJlIGFueSBtZXRob2RzIG9taXR0ZWQgd2Ugc2hvdWxkIHdhcm4gdGhlbQotCi0gICAgICAvL2ZpcnN0IG5vIG1ldGhvZHMKLSAgICAgIGlmICghbWV0aG9kVmlzaXRvckFjdGlvbi53ZXJlTWV0aG9kc1Byb2Nlc3NlZCgpKXsKLSAgICAgICAgLy90aGlzIGhhcyB0byBiZSBkb25lIHRvIGluc3VyZSB0aGUgZGlhbG9nIGlzIGFuIGVycm9yCi0gICAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19OT19QUk9YWV9NRVRIT0RTX1BST0NFU1NFRCApOwotICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyggbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAvLwkJV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLmdldE1lc3NhZ2UoICIlTVNHX0VSUk9SX0pUU19OT19QUk9YWV9NRVRIT0RTX1BST0NFU1NFRCIgKSxudWxsKSk7Ci0gICAgICB9ICAgICAgICAJCi0gICAgICAvL25vdyBtZXRob2RzIG9taXR0ZWQKLSAgICAgIGVsc2UgaWYobWV0aG9kVmlzaXRvckFjdGlvbi53ZXJlTWV0aG9kc09taXR0ZWQoKSl7Ci0gICAgICAgIC8vVGhlIGRpYWxvZyBpcyBhbHJlYWR5IGEgd2FybmluZyBzbyB3ZSBqdXN0IG5lZWQgdG8gc2V0IHRoZSBvdmVyYWxsIG1lc3NhZ2UKLSAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19QUk9YWV9NRVRIT0RTX09NSVRURUQgKTsKLSAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAvLwkJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfUFJPWFlfTUVUSE9EU19PTUlUVEVELG51bGwpKTsKLSAgICAgIH0JCi0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN0cmluZyByZXNpZGVudCkKLSAgewotICAgIC8vbm90aGluZyB0byBiZSBkb25lIGJ1dCBtdXN0IGJlIGltcGxlbWVudGVkCi0gIH0KLQotCi0gIC8qCi0gICogUmV0dXJuIHRoZSBtb2RlbCB0aGF0IHdhcyBjcmVhdGVkCi0gICogQHJldHVybiBNb2RlbCB0aGUgYmVhbiBtb2RlbCB0aGF0IHdhcyBjcmVhdGVkCi0gICovCi0gIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gZk1vZGVsOwotICB9Ci0KLSAgLyoKLSAgKiBUaGUgcHJveHkgY2hlY2sgaW5zdXJlcyB0aGVyZSBpcyBhIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kCi0gICogYXQgTGVhc3Qgb25lIG1ldGhvZAotICAqIEBwYXJhbSBKYXZhQ2xhc3MgamF2YUNsYXNzIGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIG1ldGhvZHMgb24gdGhlIHByb3h5Ci0gICovCi0gIHB1YmxpYyBib29sZWFuIHByb3h5Q2hlY2soSmF2YUNsYXNzIGphdmFDbGFzcywgSVN0YXR1cyBzdGF0dXMpCi0gIHsKLSAgICAgLy8gZmlyc3QgY2hlY2sgZm9yIGEgbWV0aG9kCi0gICAgIEl0ZXJhdG9yIG09amF2YUNsYXNzLmdldFB1YmxpY01ldGhvZHMoKS5pdGVyYXRvcigpOwotICAgICBpZiAoIW0uaGFzTmV4dCgpKXsKLSAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfUFJPWFlfSEFTX05PX01FVEhPRFMgKTsKLSAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLSAgICAgICAvLwkJCUNvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fTUVUSE9EUyxudWxsKSk7Ci0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgICB9CQotICAgICAvL25vdyBjaGVjayBmb3IgYSBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgIHdoaWxlIChtLmhhc05leHQoKSkgewotICAgICAgIE1ldGhvZCBtZXRob2Q9KE1ldGhvZCltLm5leHQoKTsKLSAgICAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkpewotICAgICAgICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICAgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICAgICAgICBpZiAoamF2YVBhcmFtZXRlci5sZW5ndGggPT0gMCkKLSAgICAgICAgCSAgcmV0dXJuIHRydWU7Ci0gICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gLyoqCi0gICogU2V0cyB0aGUgc3RhdHVzIG1vbml0b3IgdGhhdCB0aGlzIGFjdGlvbiB3aWxsIHVzZSB0byByZXBvcnQgc3RhdHVzIHRoYXQgb2NjcmVzIHdoaWxlIGV4ZWN1dGluZyB0aGUgQWN0aW9uLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNNb25pdG9yICggU3RhdHVzTW9uaXRvciBtb25pdG9yICkKLSAgewotCW1vbml0b3JfID0gbW9uaXRvcjsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHN0YXR1cyBtb25pdG9yIHRoYXQgdGhpcyB0YXNrIGlzIHVzaW5nIHRvIHJlcG9ydCBzdGF0dXMuCi0gICovCi0gIHB1YmxpYyBTdGF0dXNNb25pdG9yIGdldFN0YXR1c01vbml0b3IgKCkKLSAgewotICAgIGlmIChtb25pdG9yXyA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vbml0b3JfID0gbmV3IE51bGxTdGF0dXNNb25pdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiBtb25pdG9yXzsKLSAgfQotCi0KLSAgIC8qKgotICAqIGNoZWNrIGlmIHRoZSBhY3Rpb24gaGFzIGZpbmlzaGVkIHN1Y3Nlc3NmdWxseSAKLSAgKi8KLSAgLyoKLSAgcHVibGljIGJvb2xlYW4gaXNTdWNjZXNzZnVsICgpCi0gIHsKLSAgIAlyZXR1cm4gZ2V0U3RhdHVzTW9uaXRvcigpLmNhbkNvbnRpbnVlKCk7Ci0gIH0KLSAgKi8gCi0gIHB1YmxpYyB2b2lkIHJlc2V0QmVhbnNDcmVhdGVkKCkKLSAgewotICAgIGZCZWFuc0NyZWF0ZWQgPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnZpcm9ubWVudChJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gIAllbnZfID0gZW52OwotICB9Ci0gIAotICAvKgotICAqIFRoZSBjb21tYW5kIHRoYXQgY2FsbGVkIHRoaXMgd2lsbCBnZXQgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbiBpbiB0aGUgZm9ybQotICAqIG9mIGEgc3RhdHVzLgotICAqLwotICBwdWJsaWMgVmVjdG9yIGdldEJlYW5zQ3JlYXRlZCAoKQotICB7Ci0gICAgaWYoZkJlYW5zQ3JlYXRlZCA9PSBudWxsKSBmQmVhbnNDcmVhdGVkID0gbmV3IFZlY3RvcigpOwotICAgIHJldHVybiBmQmVhbnNDcmVhdGVkOwotICB9Ci0KLSAgLyoKLSAgKiBUaGUgY29tbWFuZCB0aGF0IGNhbGxlZCB0aGlzIHdpbGwgZ2V0IHRoZSByZXN1bHRzIG9mIHRoZSBvcGVyYXRpb24gaW4gdGhlIGZvcm0KLSAgKiBvZiBhIHN0YXR1cy4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0QmVhbnNDcmVhdGVkIChWZWN0b3IgYmVhbnNDcmVhdGVkKQotICB7Ci0gICAgZkJlYW5zQ3JlYXRlZCA9IGJlYW5zQ3JlYXRlZDsKLSAgfQotCi0gICAvKgotICAqIFRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbSAKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmV0dXJuUGFyYW0gKCkKLSAgewotICAgIHJldHVybiBmUmV0dXJuUGFyYW07Ci0gIH0KLQotICAvKgotICAqIFRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbSAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW0gKGJvb2xlYW4gcmV0dXJucGFyYW0pCi0gIHsKLSAgICBmUmV0dXJuUGFyYW0gPSByZXR1cm5wYXJhbTsKLSAgfQotCi0gICAvKgotICAqIFRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbSAKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0ICgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBib29sZWFuIHRlbGxzIHdldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmV0dXJuIHBhcmFtIAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0IChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLQotCi0gIC8qKgotICAqIHNldHMgdGhlIHZpc2l0b3IgdGhhdCBjYWxscyB0aGUgdmlzaXQKLSAgKiBAcGFyYW1ldGVyIFZpc2l0b3IKLSAgKi8KLQotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFZpc2l0b3IgdmlzaXRvcikKLSAgewotICAgICAgZlZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLSAgLyoKLSAgKiBTZXRzIHRoZSBwYXJlbnQgZWxlbWVudCB0aGUgY2hpbGQgdGhlbiBrbm93cyB3aGVyZSB0bwotICAqIGFkZCBpdHNlbGYgdG8gdGhlIG1vZGVsCi0gICogQHBhcmFtIEVsZW1lbnQgcGFyZW50IGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBmUGFyZW50RWxlbWVudCA9IGVsZW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkZpZWxkVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDI1N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkZpZWxkRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQXR0cmlidXRlRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgYSBjb21wbGV4IHR5cGUKLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uCi17Ci0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkZpZWxkVmlzaXRvckFjdGlvbihFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBwcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgc3VwZXIocGFyZW50RWxlbWVudCxwcm9qZWN0LCBlbnYpOwotICB9Ci0KLQotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGZpZWxkXykKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIEZpZWxkIGZpZWxkID0gKEZpZWxkKWZpZWxkXzsKLSAgICAgCi0gICAgdHJ5ewotICAgICAgIC8vaWYgdGhlIHR5cGUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgdW5zdXBwb3J0ZWQgZG9udCBtYWtlIGFuIEF0dHJpYnV0ZQotICAgICAgaWYoIShnZXRSZXR1cm5QYXJhbSgpICYmIFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKSkgCi0gICAgICAJJiYgKFR5cGVGYWN0b3J5LmlzVW5TdXBwb3J0ZWRUeXBlKChKYXZhSGVscGVycylmaWVsZC5nZXRKYXZhQ2xhc3MoKSkpKXsKLSAgICAgIAkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1RZUEUgKyAoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKS5nZXRKYXZhTmFtZSgpICk7Ci0JICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzKCBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLQkgICAgICAvL0NvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1RZUEUgKyAoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKS5nZXRKYXZhTmFtZSgpLG51bGwpKTsKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCSAgfQkKLQotCi0gICAgICBGaWVsZEVsZW1lbnQgZmllbGRFbGVtZW50ID0gKEZpZWxkRWxlbWVudClCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudChmaWVsZCxmUGFyZW50RWxlbWVudCk7Ci0KLSAgICAgIGlmKGZpZWxkRWxlbWVudCAhPSBudWxsKXsKLSAgICAgICAgLy9sZXRzIGNoZWNrIGFuZCBzZWUgaWYgdGhlIGdldHRlciB0YWtlcyBpbnB1dCBwYXJhbXMKLSAgICAgICAgLy9pZiBzbyB0aHJvdyBhbiBlcnJvcgotICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgIAotICAgICAgICBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24gdHlwZVZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uKGZpZWxkRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAgdHlwZVZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoZ2V0QmVhbnNDcmVhdGVkKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsgCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3IoZW52Xyk7Ci0gICAgICAgIHR5cGVWaXNpdG9yLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgc3RhdHVzID0gdHlwZVZpc2l0b3IucnVuKGZpZWxkLHR5cGVWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgfWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLSAgICAJZW52Xy5nZXRMb2coKS5sb2coSUxvZy5XQVJOSU5HLCA1MDU1LCB0aGlzLCAidmlzaXQiLCBlKTsKLSAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4sIGUpOwotICAgIAl0cnkgewotICAgIAkJZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0gICAgCX0gCi0gICAgICBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIGUxKSAKLSAgICAgIHsKLSAgICAJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19KU1BfR0VOLCBlMSApOwotICAgIAl9Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0JfQotCi0gIH0KLSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1MTY2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQmVhbkVsZW1lbnQgdXNpbmcgdGhlIAotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0aGUgbWV0aG9kcyBpbiB0aGUgSmF2YUNsYXNzCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgcHVibGljIFN0cmluZyBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lOwotCi0gLyoKLSAgKiBNZXRob2RzIG9taXR0ZWQgZnJvbSB0aGUgcHJveHkKLSAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmTWV0aG9kc09taXR0ZWQ7Ci0KLSAgLyoKLSAgKiBNZXRob2RzIHByb2Nlc3NlZCBmcm9tIHByb3h5Ci0gICovCi0gIHByb3RlY3RlZCBWZWN0b3IgZk1ldGhvZHNQcm9jZXNzZWQ7Ci0KLSAgICAgCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZNZXRob2RWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCxTdHJpbmcgcHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHN1cGVyKHBhcmVudEVsZW1lbnQscHJvamVjdCwgZW52KTsKLSAgICBmTWV0aG9kc09taXR0ZWQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZk1ldGhvZHNQcm9jZXNzZWQgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgfQotICAgCi0gIC8qKgotICAqIENyZWF0ZSBhIG1ldGhvZCBlbGVtZW50IGZyb20gdGhlIG1ldGhvZCAKLSAgKiBAcGFyYW0gTWV0aG9kIHRoZSBjbGFzcyB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGltZXRob2QpCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpbWV0aG9kOwotICAgICAgICAgICAKLSAgICBpZiAobWV0aG9kQ2hlY2sobWV0aG9kKSl7Ci0gICAgICAvL3RoaXMgaXMgdG8gY2hlY2sgaW1tZWRpYXRlIGlucHV0IGFuZCByZXR1cm4gcGFyYW1ldGVycwotICAgICAgLy9pZiB0aGVyZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlIGluIHRoZXNlIHdlIGNhbiByZWFjdCBpbW1lZGlhdGVseQotICAgICAgLy93ZSBhZGQgaXQgdG8gdGhlIG9taXR0ZWQgbWV0aG9kcyBhbiBnbyB0byB0aGUgbmV4dCBvbmUKLSAgICAgIGlmKCFwYXJhbWV0ZXJDaGVjayhtZXRob2QpKXsKLSAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfQVJSQVlTICsgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSApOwotICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMgKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAvLwkJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19BUlJBWVMgKyBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lLG51bGwpKTsKLSAgICAgICAgZk1ldGhvZHNPbWl0dGVkLmFkZEVsZW1lbnQobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBpZighbnVsbENvbnN0cnVjdG9yKG1ldGhvZCkpewotICAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfSU5QVVRTICsgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSApOwotICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMgKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgIAkvLwlDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9QQVJBTUVURVJTX0lOUFVUUyArIGZVbnN1cHBvcnRlZFBhcmFtZXRlck5hbWUsbnVsbCkpOwotICAgICAgICBmTWV0aG9kc09taXR0ZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgfQotCi0gICAgICAvL2NhcnJ5IG9uIGFsbCBwYXJhbWV0ZXJzIHN1cHBvcnRlZAotICAgICAgTWV0aG9kRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKE1ldGhvZEVsZW1lbnQpQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQobWV0aG9kLGZQYXJlbnRFbGVtZW50KTsKLSAgICAgIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uIHBhcmFtZXRlclZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24obWV0aG9kRWxlbWVudCxjbGllbnRQcm9qZWN0LGVudl8pOwotICAgICAgcGFyYW1ldGVyVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgICBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yKGVudl8pOwotICAgICAgc3RhdHVzID0gcGFyYW1ldGVyVmlzaXRvci5ydW4obWV0aG9kLHBhcmFtZXRlclZpc2l0b3JBY3Rpb24pOyAgIAotICAgICAgLy9zb21ldGhpbmcgbWF5IGhhdmUgZ29uZSB3cm9uZyB3aXRoIGFuIGludGVybmFsIHR5cGUKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSE9U3RhdHVzLk9LKXsKLSAgICAgICAgLy9UaGlzIG1ldGhvZCBoYXMgdG8gYmUgb21pdHRlZAotICAgICAgICBmTWV0aG9kc09taXR0ZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgbWV0aG9kRWxlbWVudC5zZXRNZXRob2RPbW1pc3Npb24odHJ1ZSk7ICAKLSAgICAgIH0JCi0gICAgICBlbHNlIHsKLSAgICAgICAgZk1ldGhvZHNQcm9jZXNzZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgIH0JCi0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAKLSAgLyoKLSAgKiBUZWxscyB3ZXRoZXIgYW55IG1ldGhvZHMgd2VyZSBwcm9jZXNzZWQgCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgYW55IG1ldGhvZHMgd2VyZSBwcm9jZXNzZWQgCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHdlcmVNZXRob2RzUHJvY2Vzc2VkKCkKLSAgewotICAgIGlmKGZNZXRob2RzUHJvY2Vzc2VkLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoKLSAgKiBUZWxscyB3ZXRoZXIgdGhlcmUgd2VyZSBtZXRob2RzIG9taXR0ZWQgYmVjYXVzZSBvZiB1bnN1cHBvcnRlZCB0eXBlcwotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIG1ldGhvZHMgd2VyZSBvbWl0dGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHdlcmVNZXRob2RzT21pdHRlZCgpCi0gIHsKLSAgICBpZihmTWV0aG9kc09taXR0ZWQuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZXJlIG1heSBiZSBtZXRob2RzIHRoYXQgd2UgZG9udCBzdXBwb3J0Ci0gICogYW5kIGRvbnQgd2FudCBpbiB0aGUgbW9kZWwKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBmaW5lCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBtZXRob2RDaGVjayhNZXRob2QgbWV0aG9kKQotICB7Ci0gICAgYm9vbGVhbiBvayA9IHRydWU7Ci0gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnN0cnVjdG9yIHdlIHJldHVybiBmYWxzZQotICAgIGlmIChtZXRob2QuaXNDb25zdHJ1Y3RvcigpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAKLSAgICByZXR1cm4gb2s7Ci0gIH0KLQotICAvKioKLSAgKiBUaGVyZSBtYXkgYmUgcGFyYW1ldGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGhhdmUgdHlwZXMKLSAgKiBub3QgeWV0IHN1cHBvcnRlZCByZXR1cm4gZmFsc2UgaWYgd2UgZmluZCBhbnkKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBmaW5lCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBwYXJhbWV0ZXJDaGVjayhNZXRob2QgbWV0aG9kKQotICB7Ci0KLSAgICBib29sZWFuIG9rID0gdHJ1ZTsKLSAgICAKLSAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7IAotICAgIGZvciAoaW50IGkgPSAwO2k8amF2YVBhcmFtZXRlci5sZW5ndGg7aSsrKSB7Ci0gICAgICBKYXZhUGFyYW1ldGVyIHBhcmFtPWphdmFQYXJhbWV0ZXJbaV07Ci0gICAgICBKYXZhSGVscGVycyBqYXZhSGVscGVyMSA9IHBhcmFtLmdldEphdmFUeXBlKCk7Ci0gICAgICBpZihUeXBlRmFjdG9yeS5pc1VuU3VwcG9ydGVkVHlwZShqYXZhSGVscGVyMSkpIHsKLSAgICAgICAgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSA9IHBhcmFtLmdldE5hbWUoKTsgCi0gICAgCXJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgCi0gICAgfQotICByZXR1cm4gb2s7Ci0gIH0KLQotIAotICAvKioKLSAgKiBUaGVyZSBtYXkgYmUgcGFyYW1ldGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGhhdmUgdHlwZXMKLSAgKiBub3QgeWV0IHN1cHBvcnRlZCByZXR1cm4gZmFsc2UgaWYgd2UgZmluZCBhbnkKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBmaW5lCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBudWxsQ29uc3RydWN0b3IoTWV0aG9kIG1ldGhvZCkKLSAgewotICAgIAotICAgIGJvb2xlYW4gb2sgPSB0cnVlOwotICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsgCi0gICAgZm9yIChpbnQgaSA9IDA7aTxqYXZhUGFyYW1ldGVyLmxlbmd0aDtpKyspIHsKLSAgICAgIEphdmFQYXJhbWV0ZXIgcGFyYW09amF2YVBhcmFtZXRlcltpXTsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXIxID0gcGFyYW0uZ2V0SmF2YVR5cGUoKTsKLSAgICAgIGlmKGphdmFIZWxwZXIxIGluc3RhbmNlb2YgSmF2YUNsYXNzKXsKLSAgICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YUhlbHBlcjE7Ci0gICAgICAgIGlmKFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGphdmFDbGFzcy5nZXRKYXZhTmFtZSgpKSlyZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRNZXRob2RzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAobS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIE1ldGhvZCBtZXRob2QyPShNZXRob2QpbS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kMi5nZXROYW1lKCkpKXsKLSAgICAgICAgICAgICAgLy9ub3cgdGhlIGlucHV0cwotICAgICAgICAgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbVtdID0gbWV0aG9kMi5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICAgICAgICAgICAgaWYgKGphdmFQYXJhbS5sZW5ndGggPiAwKXsKLSAgICAgICAgICAgICAgICAvL3RoZW4gd2UgaGF2ZSBubyBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSA9IHBhcmFtLmdldE5hbWUoKTsgCi0gICAgCSAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gIHJldHVybiBvazsKLSAgfQotCi0gCi0KLQotCi0KLQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmY1NDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZUeXBlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuTW9kZWxFbGVtZW50c0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuUGFyYW1ldGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIHBhcmFtZXRlckVsZW1lbnQgdXNpbmcgdGhlIAotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0byBpdHMgdHlwZQotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uIAotewotCi0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24oRWxlbWVudCBwYXJlbnRFbGVtZW50LFN0cmluZyBwcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgc3VwZXIocGFyZW50RWxlbWVudCxwcm9qZWN0LCBlbnYpOwotICB9Ci0gICAKLSAgLyoqCi0gICogQ3JlYXRlIGEgcGFyYW1ldGVyIGVsZW1lbnQgZnJvbSB0aGUgbWV0aG9kIAotICAqIEBwYXJhbSBKYXZhUGFyYW1ldGVyIHRoZSBtb2YgZWxlbWVudCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgUGFyYW1ldGVyCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGlqYXZhUGFyYW1ldGVyKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlDaG9pY2UgT0tDaG9pY2UgPSBuZXcgQ2hvaWNlKCdPJyxDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCUNob2ljZSBDYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9DQU5DRUwsIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fQ0FOQ0VMKTsKLSAgCQotICAgIFBhcmFtZXRlckVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCA9IChQYXJhbWV0ZXJFbGVtZW50KUJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KGlqYXZhUGFyYW1ldGVyLGZQYXJlbnRFbGVtZW50KTsKLSAgICBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24gdHlwZVZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uKHBhcmFtZXRlckVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52Xyk7Ci0gICAgLy90eXBlVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgdHlwZVZpc2l0b3JBY3Rpb24uc2V0UmV0dXJuUGFyYW0ocGFyYW1ldGVyRWxlbWVudC5pc1JldHVybigpKTsKLSAgICBKYXZhTW9mVHlwZVZpc2l0b3IgdHlwZVZpc2l0b3IgPSBuZXcgSmF2YU1vZlR5cGVWaXNpdG9yKGVudl8pOwotICAgIHR5cGVWaXNpdG9yLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICBzdGF0dXMgPSB0eXBlVmlzaXRvci5ydW4oaWphdmFQYXJhbWV0ZXIsdHlwZVZpc2l0b3JBY3Rpb24pOwotICAgIC8vCi0gICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgewotICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgIHsKLSAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgfQotICAgICAgCQotICAgIH0KLSAgICAvLyAgICAgICAgICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NDRhMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwotICogMjAwODA1MDUgICAxODIxNjcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdhcm5pbmcgbm90IGlzc3VlZCB3aGVuIG5vbi1pbnN0YW50aWFibGUgY2xhc3MgaXMgYnlwYXNzZWQgaW4gc2FtcGUgSlNQcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVZpc2liaWxpdHlLaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkJlYW5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgVHlwZUVsZW1lbnQgdXNpbmcgdGhlCi0qIEphdmFDbGFzcyBhbmQgdGhlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeQotKiBJdCB3aWxsIGFsc28gYXV0b21hdGljYWxseSB3YWxrIGEgY29tcGxleCB0eXBlCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uCi17Ci0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCxTdHJpbmcgcHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHN1cGVyKHBhcmVudEVsZW1lbnQscHJvamVjdCwgZW52KTsKLSAgfQotCi0gIC8qKgotICAqIENyZWF0ZSBhIHR5cGUgZWxlbWVudCBmcm9tIHRoZSBKYXZhSGVscGVyCi0gICogQHBhcmFtIEphdmFIZWxwZXIgdGhlIG1vZiBlbGVtZW50IHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBUeXBlCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IHR5cGVOYXZpZ2F0b3IpCi0gIHsKLSAgCSBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAJIENob2ljZSBPS0Nob2ljZSA9IG5ldyBDaG9pY2UoJ08nLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCSBDaG9pY2UgQ2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfQ0FOQ0VMLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX0NBTkNFTCk7ICAJIAotCi0gICAgIC8vaWYgYmVhbgotCSBKYXZhQ2xhc3MgamF2YUNsYXNzID0gbnVsbDsKLQkgaWYodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEphdmFDbGFzcyl7Ci0JICAgIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpdHlwZU5hdmlnYXRvcjsKLQkgfQotCi0KLSAgICAgLyogSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbWV0ZXIgdGhlbiB3ZSBuZWVkIHRvIHRyZWF0IHRoaXMgZGlmZmVyZW50bHkgdGhlbiBpZiBpdCBpcyBhbiBpbnB1dCAKLSAgICAgKiAgcGFyYW1ldGVyLgotICAgICAqICBXZSBuZWVkIHRvIGZpcnN0IHNlZSBpZiBpdCBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgcmV0dXJuIHR5cGVzIGlmIG5vdCB3ZSB0cmVhdCBpdCB0aGUgc2FtZSBhcyBldmVyeXRoaW5nCi0gICAgICogIGVsc2UuCi0gICAgICovCi0gICAgIGlmKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZSgoSmF2YUhlbHBlcnMpdHlwZU5hdmlnYXRvcikpCi0gICAgIHsKLSAgICAgICBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudCh0eXBlTmF2aWdhdG9yLGZQYXJlbnRFbGVtZW50KTsKLSAgICAgfQkKLSAgICAgZWxzZXsKLQkgICAgaWYoVHlwZUZhY3RvcnkuaXNVblN1cHBvcnRlZFR5cGUoKEphdmFIZWxwZXJzKXR5cGVOYXZpZ2F0b3IpKXsKLQkgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFICsgKChKYXZhSGVscGVycyl0eXBlTmF2aWdhdG9yKS5nZXRKYXZhTmFtZSgpICk7CSAgICAJCi0JICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzKCBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLSAgICAgICAgICAgICAgLy9Db25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFICsgKChKYXZhSGVscGVycyl0eXBlTmF2aWdhdG9yKS5nZXRKYXZhTmFtZSgpLG51bGwpKTsKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCSAgICB9CQotCSAgICAKLQkgICAgLy9pZiBqYXZhY2xhc3MgaXMgbnVsbCB0aGVuIHdlIGhhdmUgYSBzaW1wbGUgdHlwZSAKLQkgICAgaWYoKGphdmFDbGFzcyA9PSBudWxsKSB8fCBUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihqYXZhQ2xhc3MuZ2V0SmF2YU5hbWUoKSkpCi0gICAgICB7Ci0JICAgICAgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQodHlwZU5hdmlnYXRvcixmUGFyZW50RWxlbWVudCk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAoamF2YUNsYXNzICE9IG51bGwgJiYgIWdldFJldHVyblBhcmFtKCkgJiYKLQkJCQkvLyB0aGUgZm9sbG93aW5nIGNhc2VzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZm9yIGlucHV0Ci0JCQkJKGphdmFDbGFzcy5pc0ludGVyZmFjZSgpIHx8IGphdmFDbGFzcy5pc0Fic3RyYWN0KCkgfHwgIWhhc0RlZmF1bHRDb25zdHJ1Y3RvcihqYXZhQ2xhc3MpKSkgewotCSAgICAJCi0JICAgIAlFbGVtZW50IGVsZW1lbnQgPSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudCh0eXBlTmF2aWdhdG9yLGZQYXJlbnRFbGVtZW50KTsKLQkgICAgCWVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFLCBCb29sZWFuLlRSVUUpOwotICAgIAkJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygKLSAgICAJCQkJQ29uc3VtcHRpb25NZXNzYWdlcy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX05PTl9JTlNUQU5USUFCTEVfVFlQRSwgZWxlbWVudC5nZXROYW1lKCkpKTsKLQkgICAgfQotCSAgICBlbHNlewotCSAgICAgIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24oZlBhcmVudEVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52Xyk7Ci0JICAgICAgYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotCSAgICAgIGJlYW5WaXNpdG9yQWN0aW9uLnNldEJlYW5zQ3JlYXRlZChnZXRCZWFuc0NyZWF0ZWQoKSk7Ci0gICAgICAgICAgYmVhblZpc2l0b3JBY3Rpb24uc2V0UmV0dXJuUGFyYW0oZ2V0UmV0dXJuUGFyYW0oKSk7Ci0JCSAgSmF2YU1vZkJlYW5WaXNpdG9yIGJlYW5WaXNpdG9yID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvcigpOwotCSAgICAgIHN0YXR1cyA9IGJlYW5WaXNpdG9yLnJ1bihqYXZhQ2xhc3MsYmVhblZpc2l0b3JBY3Rpb24pOwotCSAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIC8vCi0gICAgIGludCBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOyAKLSAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAKLSAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgewotICAgICAgIENob2ljZSByZXN1bHQgPSBlbnZfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzLCBuZXcgQ2hvaWNlW117T0tDaG9pY2UsIENhbmNlbENob2ljZX0pOwotICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgIHsKLSAgICAgICAJIC8vcmV0dXJuIGFuIGVycm9yIHN0YXR1cyBzaW5jZSB0aGUgdXNlciBjYW5jZWxlZAotICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgfQotICAgICAgIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7IC8vIHVzZXIgc2F5cyBpdCdzIE9LCi0gICAgIH0KLSAgICAgLy8KLSAgICAgcmV0dXJuIHN0YXR1czsKLSAgIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBqYXZhQ2xhc3MgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGphdmFDbGFzcyBUaGUgamF2YSBjbGFzcwotICAgKiBAcmV0dXJuIHRydWUgaWYgamF2YUNsYXNzIGhhcyBhIGRlZmF1bHQgY29uc3RydWN0b3IsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0RlZmF1bHRDb25zdHJ1Y3RvcihKYXZhQ2xhc3MgamF2YUNsYXNzKSB7Ci0JICAgCi0JICBMaXN0IG1ldGhvZHMgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotCSAgSXRlcmF0b3IgaXRlciA9IG1ldGhvZHMuaXRlcmF0b3IoKTsKLQkgICAKLQkgIGJvb2xlYW4gZm91bmRDb25zdHJ1Y3RvciA9IGZhbHNlOwotCSAgIAotCSAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCSAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpIGl0ZXIubmV4dCgpOwotCQkgICAKLQkJICBpZiAobWV0aG9kLmdldE5hbWUoKS5lcXVhbHMoamF2YUNsYXNzLmdldE5hbWUoKSkpIHsKLQkJCSAgaWYgKG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKS5sZW5ndGggPT0gMCkKLQkJCQkgIHJldHVybiBtZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IEphdmFWaXNpYmlsaXR5S2luZC5QVUJMSUM7Ci0JCQkgIGZvdW5kQ29uc3RydWN0b3IgPSB0cnVlOwotCQkgIH0KLQkgIH0KLQkgICAKLQkgIC8vIGlmIG5vIGNvbnN0cnVjdG9yIGlzIGZvdW5kIGF0IHRoaXMgcG9pbnQsIGEgZGVmYXVsdCBvbmUgaXMgaW1wbGljaXRseSBwcm92aWRlZAotCSAgcmV0dXJuICFmb3VuZENvbnN0cnVjdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL1Zpc2l0b3JBY3Rpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL1Zpc2l0b3JBY3Rpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGEyZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9WaXNpdG9yQWN0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFZpc2l0b3JBY3Rpb24uCi0qIEl0IHdpbGwgYXV0b21hdGljYWxseSB3YWxrIHRoZSBtZXRob2RzIGluIHRoZSBKYXZhQ2xhc3MKLSogKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBWaXNpdG9yQWN0aW9uSW1wbCBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgcHJpdmF0ZSBWZWN0b3IgYmVhbnNWaXNpdGVkID0gbnVsbDsKLSAgcHJpdmF0ZSBWZWN0b3IgbWVzc2FnZXMgPSBudWxsOwotCi0gIHB1YmxpYyBWaXNpdG9yQWN0aW9uSW1wbCggVmVjdG9yIG1lc3NhZ2VzLCBWZWN0b3IgYmVhbnNWaXNpdGVkKQotICAJewotICAJIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlczsKLSAgCSB0aGlzLmJlYW5zVmlzaXRlZCA9IGJlYW5zVmlzaXRlZDsKLSAgCX0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3RyaW5nIHJlc2lkZW50KQotICB7Ci0gICAgLy9ub3RoaW5nIHRvIGJlIGRvbmUgYnV0IG11c3QgYmUgaW1wbGVtZW50ZWQKLSAgfQotCi0gLyoqCi0gICogUmV0dXJucyB0aGUgdmVjdG9yIG9mIGFsbCBtZXNzYWdlcyBmb3VuZAotICAqLwotICBwdWJsaWMgVmVjdG9yIGdldE1lc3NhZ2VzICgpCi0gIHsKLSAgCWlmIChtZXNzYWdlcyA9PSBudWxsKSAKLSAgCQltZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICByZXR1cm4gbWVzc2FnZXM7Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGdldEJlYW5zVmlzaXRlZCgpCi0gIAl7Ci0JCWlmICggYmVhbnNWaXNpdGVkID09IG51bGwpCi0gIAkJCWJlYW5zVmlzaXRlZCA9IG5ldyBWZWN0b3IoKTsgCi0gICAgICAgIHJldHVybiBiZWFuc1Zpc2l0ZWQ7Ci0gICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkVmlzaXRlZEJlYW4oIEphdmFDbGFzcyBiZWFuKQotICAJewotICAJCWlmICggYmVhbnNWaXNpdGVkID09IG51bGwpCi0gIAkJCWJlYW5zVmlzaXRlZCA9IG5ldyBWZWN0b3IoKTsKLSAgCQliZWFuc1Zpc2l0ZWQuYWRkKGJlYW4pOwotICAJfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQmVhblZpc2l0ZWQgKEphdmFDbGFzcyBiZWFuKQotICAJewotICAJCXJldHVybiAoYmVhbnNWaXNpdGVkICE9IG51bGwgJiYgYmVhbnNWaXNpdGVkLmNvbnRhaW5zKGJlYW4pKTsKLSAgCX0KLQotICAvKioKLSAgKiBzZXRzIHRoZSB2aXNpdG9yIHRoYXQgY2FsbHMgdGhlIHZpc2l0Ci0gICogQHBhcmFtZXRlciBWaXNpdG9yCi0gICovCi0KLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLSAgewotICAgIGdldE1lc3NhZ2VzKCkuYWRkKGtleSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRNZXNzYWdlICggU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncyApCi0gIHsKLSAgICBnZXRNZXNzYWdlcygpLmFkZChOTFMuYmluZChrZXksYXJncykpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1Mjk5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNTA1ICAgMTgyMTY3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXYXJuaW5nIG5vdCBpc3N1ZWQgd2hlbiBub24taW5zdGFudGlhYmxlIGNsYXNzIGlzIGJ5cGFzc2VkIGluIHNhbXBlIEpTUHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uLlNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBib29sZWFuIHJldHVyblBhcmFtZXRlcjsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52OwotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCXRoaXMuZW52ID0gZW52OwotICB9Ci0gIAotICAvKgotICAqIFVzZSB0aGlzIHRvIHJlZmxlY3QgCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotICB9Ci0KLSAgIC8qCi0gICogVXNlIHRoaXMgdG8gcmVmbGVjdCAKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBjbGllbnRQcm9qZWN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW1ldGVyKGJvb2xlYW4gcmV0dXJuUGFyYW1ldGVyKQotICB7Ci0gICAgdGhpcy5yZXR1cm5QYXJhbWV0ZXIgPSByZXR1cm5QYXJhbWV0ZXI7Ci0gIH0KLSAKLSAgCi0gIC8qCi0gICogR2V0IHRoZSBhdHRyaWJ1dGUgYmVsb25naW5nIHRvIHRoaXMgY29tcGxleCB0eXBlIAotICAqIEBwYXJhbSBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgdGhhdCBvd25zIHRoZSB0eXBlCi0gICogQHBhcmFtIFZpc2l0b3JBY3Rpb24gQWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBlYWNoIG1ldGhvZAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgcnVuICggT2JqZWN0IGphdmFjbGFzcywgVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOyAgICAgCi0KLSAgICBIYXNodGFibGUgc3BkTWFwID0gbmV3IEhhc2h0YWJsZSgpOyAgCi0gICAgZm9yIChJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzKCkuaXRlcmF0b3IoKTsgbS5oYXNOZXh0KCk7ICkgewotICAgICAgTWV0aG9kIG1ldGhvZD0oTWV0aG9kKW0ubmV4dCgpOwotICAgICAgaWYgKCgobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKS5zdGFydHNXaXRoKCJnZXQiKSAKLSAgICAgIAl8fCBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImlzIikpIAotICAgICAgICAmJiBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCkubGVuZ3RoID09IDAgKQotICAgICAgICB8fCAobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKS5zdGFydHNXaXRoKCJzZXQiKSAKLSAgICAgICAgJiYgbWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpLmxlbmd0aCA+IDApKSB7Ci0gICAgICAgIGludCBzdWIgPSAzOwotICAgICAgICBpZihtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImlzIikpCi0gICAgICAgICAgc3ViID0gMjsJCi0gICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN1YnN0cmluZyhzdWIpOyAgICAKLSAgICAgICAgU3RyaW5nIGxvd2VyID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLDEpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIFN0cmluZyByZW1haW5kZXIgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDEpOyAKLSAgICAgICAgcHJvcGVydHlOYW1lID0gbG93ZXIgKyByZW1haW5kZXI7Ci0gICAgICAgIGludCBpbmRleCA9IHByb3BlcnR5TmFtZS5sYXN0SW5kZXhPZigiKCIpOwotICAgICAgICBTdHJpbmcgdGVtcCA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgcHJvcGVydHlOYW1lID0gdGVtcC5zdWJzdHJpbmcoMCxpbmRleCk7IAotICAgICAgICAKLSAgICAgICAgLy9maW5kIHRoZSBwcm9wZXJ0eWRlc2NyaXB0b3IKLSAgICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHNwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Ipc3BkTWFwLmdldChwcm9wZXJ0eU5hbWUpOyAKLSAgICAgICAgaWYoc3BkID09IG51bGwpewotICAgICAgICAgIHNwZCA9IG5ldyBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IocHJvcGVydHlOYW1lKTsKLSAgICAgICAgICBzcGRNYXAucHV0KHByb3BlcnR5TmFtZSxzcGQpOyAKLSAgICAgICAgfQotICAgICAgICBpZihtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoInNldCIpKQotICAgICAgICAgIHNwZC5zZXRXcml0ZU1ldGhvZChtZXRob2QpOwotICAgICAgICBlbHNlIAotICAgICAgICAgIHNwZC5zZXRSZWFkTWV0aG9kKG1ldGhvZCk7Ci0KLSAgICAgICAgRmllbGQgZmllbGQgPSBqYXZhQ2xhc3MuZ2V0RmllbGROYW1lZChwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKYXZhSGVscGVycyBwcm9wZXJ0eVR5cGUgPSBudWxsOyAKLSAgICAgICAgaWYoZmllbGQgIT0gbnVsbCl7Ci0gICAgICAgICAgcHJvcGVydHlUeXBlID0gKEphdmFIZWxwZXJzKWZpZWxkLmdldEVUeXBlKCk7Ci0gICAgICAgICAgc3BkLnNldGZTdGF0aWMoZmllbGQuaXNTdGF0aWMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICBpZihtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImdldCIpIHx8IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3RhcnRzV2l0aCgiaXMiKSkKLSAgICAgICAgICAJcHJvcGVydHlUeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLSAgICAgICAgICBlbHNlewotICAgICAgICAgICAgIEphdmFQYXJhbWV0ZXIgcGFyYW1zW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7IAotICAgICAgICAgICAgIHByb3BlcnR5VHlwZSA9IHBhcmFtc1swXS5nZXRKYXZhVHlwZSgpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICAgICAgCQotICAgICAgICBzcGQuc2V0UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZSk7IAotICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgRW51bWVyYXRpb24gc3BkRW51bSA9IHNwZE1hcC5lbGVtZW50cygpOwotICAgIHdoaWxlKHNwZEVudW0uaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHNwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Ipc3BkRW51bS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYoc3BkQ2hlY2soc3BkKSkgewotICAgICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KHNwZCk7ICAgCi0gICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgIAkgIGJyZWFrOwotICAgICAgfQotICAgIH0gCi0gICAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzcGRDaGVjayhTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Igc3BkKQotICB7ICAKLSAgICAvL2NoZWNrIGZvciBpbmRleGVkIHByb3BlcnRpZXMKLSAgCU1ldGhvZCB3cml0ZU1ldGhvZCA9IHNwZC5nZXRXcml0ZU1ldGhvZCgpOwotICAJaWYod3JpdGVNZXRob2QgIT0gbnVsbCkKLSAgCSAgaWYod3JpdGVNZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCkubGVuZ3RoID4gMSkgcmV0dXJuIGZhbHNlOwotICAJCi0gIAlpZihzcGQuZ2V0UHJvcGVydHlUeXBlKCkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIGlmKHNwZC5nZXRQcm9wZXJ0eVR5cGUoKS5pc1ByaW1pdGl2ZSgpKSByZXR1cm4gdHJ1ZTsKLSAgICBpZihyZXR1cm5QYXJhbWV0ZXIgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZShzcGQuZ2V0UHJvcGVydHlUeXBlKCkpKSByZXR1cm4gdHJ1ZTsKLSAgICBpZighcmV0dXJuUGFyYW1ldGVyICYmIFR5cGVGYWN0b3J5LmlzVW5TdXBwb3J0ZWRUeXBlKHNwZC5nZXRQcm9wZXJ0eVR5cGUoKSkpIHJldHVybiB0cnVlOwotICAgIGlmKCFjaGVja1BvbGFyaXR5KHNwZCkpIHJldHVybiBmYWxzZTsgICAKLSAgICAgICAKLSAgICAvLyBzbyBpdHMgYSBiZWFuIG1ha2Ugc3VyZSBpdCBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yICAgICAgIAotICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhTW9mUmVmID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgIGphdmFNb2ZSZWYuc2V0Q2xpZW50UHJvamVjdChnZXRQcm9qZWN0KCkpOwotICAgIGphdmFNb2ZSZWYuc2V0UHJveHlCZWFuKCgoSmF2YUhlbHBlcnMpc3BkLmdldFByb3BlcnR5VHlwZSgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgIGphdmFNb2ZSZWYuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIGphdmFNb2ZSZWYuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICBpZihqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpIGluc3RhbmNlb2YgSmF2YUNsYXNzKXsKLSAgICAgICBpZihUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpLmdldEphdmFOYW1lKCkpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICByZXR1cm4gZGVmYXVsdENoZWNrKChKYXZhQ2xhc3MpamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKSk7Ci0gICAgICAgICAgICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIAotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tQb2xhcml0eShTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Igc3BkKXsKLSAgICAKLSAgCU1ldGhvZCByZWFkTWV0aG9kID0gc3BkLmdldFJlYWRNZXRob2QoKTsKLSAgCU1ldGhvZCB3cml0ZU1ldGhvZCA9IHNwZC5nZXRXcml0ZU1ldGhvZCgpOwotICAJaWYoKHJlYWRNZXRob2QgPT0gbnVsbCAmJiB3cml0ZU1ldGhvZCAhPSBudWxsKSB8fCAocmVhZE1ldGhvZCAhPSBudWxsICYmIHdyaXRlTWV0aG9kID09IG51bGwpKQotICAJICByZXR1cm4gdHJ1ZTsJCi0gIAlpZihyZWFkTWV0aG9kID09IG51bGwgJiYgd3JpdGVNZXRob2QgPT0gbnVsbCkKLSAgCSAgcmV0dXJuIGZhbHNlOwkKLSAgCSAgCQotICAJSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSB3cml0ZU1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICBmb3IoaW50IGkgPSAwO2k8IGphdmFQYXJhbWV0ZXIubGVuZ3RoO2krKyl7Ci0gICAgICBKYXZhUGFyYW1ldGVyIGpwID0gamF2YVBhcmFtZXRlcltpXTsgCQotICAgICAganAuZ2V0SmF2YVR5cGUoKS5nZXRKYXZhTmFtZSgpOwotICAgICAgcmVhZE1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0SmF2YU5hbWUoKTsKLSAgICAgIGlmKGpwLmdldEphdmFUeXBlKCkuZ2V0SmF2YU5hbWUoKS5lcXVhbHMocmVhZE1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0SmF2YU5hbWUoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAKLSAgICB9Ci0gIAlyZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBkZWZhdWx0Q2hlY2soSmF2YUNsYXNzIGphdmFDbGFzcyl7Ci0gICAgCi0gICAgICAgSXRlcmF0b3IgbT1qYXZhQ2xhc3MuZ2V0TWV0aG9kcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIC8vbm93IGNoZWNrIGZvciBhIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICAgICAgYm9vbGVhbiBkZWZhdWx0Q29uc3QgPSB0cnVlOwotICAgICAgICB3aGlsZSAobS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICBNZXRob2QgbWV0aG9kPShNZXRob2QpbS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGphdmFDbGFzcy5nZXROYW1lKCkuZXF1YWxzKG1ldGhvZC5nZXROYW1lKCkpKXsKLSAgICAgICAgICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgICAgICAgICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGphdmFQYXJhbWV0ZXIubGVuZ3RoID4gMCl7Ci0gICAgICAgICAgICAgICAgICAgICAgLy90aGVuIHdlIGhhdmUgbm8gZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb25zdCA9IGZhbHNlOyAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihqYXZhUGFyYW1ldGVyLmxlbmd0aCA9PSAwKXsKLSAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgfQotICAgIAotICAgICAgIHJldHVybiBkZWZhdWx0Q29uc3Q7Ci0gIH0KLSAgICAgICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkJlYW5WaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZCZWFuVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzNhYmIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkJlYW5WaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZkJlYW5WaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZCZWFuVmlzaXRvcigpCi0gIHsKLSAgfQotIAotICBwdWJsaWMgSVN0YXR1cyBydW4gKCBPYmplY3QgamF2YUNsYXNzLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgICByZXR1cm4gdkFjdGlvbi52aXNpdCgoSmF2YUNsYXNzKWphdmFDbGFzcyk7ICAgCi0gIH0KLSAgICAgICAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mRmllbGRWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZGaWVsZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwZjBlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZGaWVsZFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFWaXNpYmlsaXR5S2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZGaWVsZFZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLQotICAvKgotICAqIENvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkZpZWxkVmlzaXRvcigpCi0gIHsKLSAgfQotCi0gIC8qCi0gICogVXNlIHRoaXMgdG8gcmVmbGVjdCAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICAvKgotICAqIEdldCB0aGUgYXR0cmlidXRlIGJlbG9uZ2luZyB0byB0aGlzIGNvbXBsZXggdHlwZSAKLSAgKiBAcGFyYW0gSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyIHRoYXQgb3ducyB0aGUgdHlwZQotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCBqYXZhY2xhc3MsIFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKWphdmFjbGFzczsgICAgIAotCi0gICAgYm9vbGVhbiBob2xkZXJDbGFzcyA9IGZhbHNlOwotICAgIEVMaXN0IGltcGxlbWVudGVkID0gamF2YUNsYXNzLmdldEltcGxlbWVudHNJbnRlcmZhY2VzKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBsZW1lbnRlZC5zaXplKCk7IGkrKykgewotCSAgSmF2YUNsYXNzIGFuSW50ZXJmYWNlID0gKEphdmFDbGFzcykgaW1wbGVtZW50ZWQuZ2V0KGkpOwotCSAgaWYgKGFuSW50ZXJmYWNlLmdldFF1YWxpZmllZE5hbWUoKS5lcXVhbHMoImphdmF4LnhtbC5ycGMuaG9sZGVycy5Ib2xkZXIiKSkKLQkgICAgaG9sZGVyQ2xhc3MgPSB0cnVlOwotCX0gICAgICAKLQotICAgICAvL2JlYW5pbmZvIGNvZGUKLSAgICBpZihob2xkZXJDbGFzcyl7ICAgICAKLSAgICAgIEVMaXN0IGUgID0gamF2YUNsYXNzLmdldEZpZWxkcygpOwotICAgICAgTGlzdEl0ZXJhdG9yIGxpc3QgPSBlLmxpc3RJdGVyYXRvcigpOwotICAgICAgd2hpbGUobGlzdC5oYXNOZXh0KCkpewotICAgICAgICBGaWVsZCBmaWVsZCA9IChGaWVsZClsaXN0Lm5leHQoKTsgICAgIAotICAgICAgICBpZihmaWVsZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gSmF2YVZpc2liaWxpdHlLaW5kLlBVQkxJQyAmJiAhZmllbGQuaXNGaW5hbCgpICYmICFmaWVsZC5pc1N0YXRpYygpKXsKLSAgICAgICAgICBpZihmaWVsZENoZWNrKGZpZWxkKSkKLSAgICAgICAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQoZmllbGQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0gICAgICAgCi0gIHByaXZhdGUgYm9vbGVhbiBmaWVsZENoZWNrKEZpZWxkIGZpZWxkKQotICB7Ci0gICAgLy8gc28gaXRzIGEgYmVhbiBtYWtlIHN1cmUgaXQgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciAKLSAgICBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQgamF2YU1vZlJlZiA9IG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKTsKLSAgICBqYXZhTW9mUmVmLnNldFByb3h5QmVhbigoKEphdmFIZWxwZXJzKWZpZWxkLmdldEVUeXBlKCkpLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgamF2YU1vZlJlZi5zZXRDbGllbnRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgamF2YU1vZlJlZi5leGVjdXRlKG51bGwsIG51bGwpOwotICAgIGlmKGphdmFNb2ZSZWYuZ2V0SmF2YUNsYXNzKCkgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpewotICAgICAgaWYoVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKS5nZXRKYXZhTmFtZSgpKSkgcmV0dXJuIHRydWU7Ci0gICAgICByZXR1cm4gZGVmYXVsdENoZWNrKChKYXZhQ2xhc3MpamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gICAgICAgIAotIHByaXZhdGUgYm9vbGVhbiBkZWZhdWx0Q2hlY2soSmF2YUNsYXNzIGphdmFDbGFzcyl7Ci0gICAgCi0gICBJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRNZXRob2RzKCkuaXRlcmF0b3IoKTsKLSAgIC8vbm93IGNoZWNrIGZvciBhIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgIGJvb2xlYW4gZGVmYXVsdENvbnN0ID0gdHJ1ZTsKLSAgIHdoaWxlIChtLmhhc05leHQoKSkgewotICAgIE1ldGhvZCBtZXRob2Q9KE1ldGhvZCltLm5leHQoKTsKLSAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkpewotICAgICAgLy9ub3cgdGhlIGlucHV0cwotICAgICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7Ci0gICAgICBpZiAoamF2YVBhcmFtZXRlci5sZW5ndGggPiAwKXsKLSAgICAgICAgLy90aGVuIHdlIGhhdmUgbm8gZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgICBkZWZhdWx0Q29uc3QgPSBmYWxzZTsgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmKGphdmFQYXJhbWV0ZXIubGVuZ3RoID09IDApewotICAgICAgICBpZiAobWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSAwKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNlIGlmKG1ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gMSkgCi0gICAgICAgICAgZGVmYXVsdENvbnN0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gICAgCi0gIHJldHVybiBkZWZhdWx0Q29uc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZk1ldGhvZFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZk1ldGhvZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMyZWU4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZNZXRob2RWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODA1MDUgICAxODIxNjcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdhcm5pbmcgbm90IGlzc3VlZCB3aGVuIG5vbi1pbnN0YW50aWFibGUgY2xhc3MgaXMgYnlwYXNzZWQgaW4gc2FtcGUgSlNQcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZNZXRob2RWaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIFN0cmluZyBTRVRfRU5EUE9JTlQgPSAic2V0RW5kUG9pbnQiOwotICBwdWJsaWMgU3RyaW5nIEdFVF9FTkRQT0lOVCA9ICJnZXRFbmRQb2ludCI7Ci0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIGZNZXRob2RzU2VsZWN0ZWQ7Ci0KLQotICAvKgotICAqIENvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZk1ldGhvZFZpc2l0b3IoKQotICB7Ci0gIH0KLSAKLSAgcHVibGljIFN0cmluZyBVTkRFUl9TQ09SRSA9ICJfIjsKLQotICAvKgotICAqIFJ1biB0aHJvdWdoIGFsbCB0aGUgbWV0aG9kcyBpbiB0aGlzIGJlYW4KLSAgKiBAcGFyYW0gSmF2YUNsYXNzIGphdmFjbGFzcyB0aGF0IGhvbGRzIHRoZSBtZXRob2RzCi0gICogQHBhcmFtIFZpc2l0b3JBY3Rpb24gQWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBlYWNoIG1ldGhvZAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgcnVuICggT2JqZWN0IGphdmFjbGFzcywgVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOwotICAgIGZvciAoSXRlcmF0b3IgbT1qYXZhQ2xhc3MuZ2V0UHVibGljTWV0aG9kcygpLml0ZXJhdG9yKCk7IG0uaGFzTmV4dCgpOyApIHsKLSAgICAgIE1ldGhvZCBtZXRob2Q9KE1ldGhvZCltLm5leHQoKTsKLSAgICAgIGlmKGZNZXRob2RzU2VsZWN0ZWQgIT0gbnVsbCkgIHsKLSAgICAgICAgYm9vbGVhbiBtZXRob2RTZWxlY3RlZCA9IGZhbHNlOwotICAgICAgCWZvcihpbnQgaSA9MDtpIDwgZk1ldGhvZHNTZWxlY3RlZC5sZW5ndGg7aSsrKXsKLSAgICAgICAgICBpZihmTWV0aG9kc1NlbGVjdGVkW2ldID09IG51bGwpIGNvbnRpbnVlOwotICAgICAgICAgIGlmICggZk1ldGhvZHNTZWxlY3RlZFtpXS5nZXRWYWx1ZSgpLmVxdWFscyhtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKSkKLSAgICAgICAgICAgIG1ldGhvZFNlbGVjdGVkID0gKGJvb2xlYW4pIGZNZXRob2RzU2VsZWN0ZWRbaV0uaXNTZWxlY3RlZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtZXRob2QuZ2V0TmFtZSgpOwotICAgICAgICAKLSAgICAgICAgaWYobWV0aG9kU2VsZWN0ZWQpIHsKLSAgICAgICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KG1ldGhvZCk7ICAKLSAgICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICAgICAgCSAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KG1ldGhvZCk7ICAgCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZFNlbGVjdGlvbihCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kU2VsZWN0ZWQpCi0gIHsKLSAgICBmTWV0aG9kc1NlbGVjdGVkID0gbWV0aG9kU2VsZWN0ZWQ7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OTA0YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvciBpbXBsZW1lbnRzIFZpc2l0b3IgCi17Ci0gIHByaXZhdGUgSUVudmlyb25tZW50IGVudl87Ci0KLSAgLyoKLSAgKiBDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yKElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCWVudl8gPSBlbnY7Ci0gIH0KLSAgCi0gIC8qCi0gICogUnVuIHRocm91Z2ggYWxsIHRoZSBwYXJhbWV0ZXJzIGluIHRoaXMgbWV0aG9kCi0gICogQHBhcmFtIEphdmFDbGFzcyBqYXZhY2xhc3MgdGhhdCBob2xkcyB0aGUgcGFyYW1ldGVycwotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCBpbWV0aG9kLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCUNob2ljZSBPS0Nob2ljZSA9IG5ldyBDaG9pY2UoJ08nLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCUNob2ljZSBDYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9DQU5DRUwsIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fQ0FOQ0VMKTsgIAkKLSAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpbWV0aG9kOwotICAgCi0gICAgSmF2YUhlbHBlcnMgamF2YVJldHVyblBhcmFtZXRlciA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0gICAgLy9wZ20gVGhpcyB2aXNpdG9yIHVzZWQgdG8gdGFrZSBhIEphdmFQYXJhbWV0ZXIgdHlwZSBhbmQgbm93IGl0IGlzIGJlaW5nIGNhbGxlZAotICAgIC8vICAgIHdpdGggYSBKYXZhSGVscGVycyB0eXBlLiAgR2lsLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhpcyBpcyBPay4KLSAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KGphdmFSZXR1cm5QYXJhbWV0ZXIpOwotICAgIC8vCi0gICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgewotICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgIHsKLSAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgfQotICAgICAgCQotICAgIH0KLSAgICAvLyAgICAgICAgICAgCi0KLSAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgTGlzdCBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlcnMoKTsgCi0gICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpbmRleCsrKSAKLSAgICB7Ci0gICAgICBKYXZhUGFyYW1ldGVyIHBhcmFtPShKYXZhUGFyYW1ldGVyKXBhcmFtZXRlcnMuZ2V0KGluZGV4KTsKLSAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQocGFyYW0pOwotICAgICAgLy8KLSAgICAgIHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgIHsKLSAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICB7Ci0gICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgIH0KLSAgICAgICAgCQotICAgICAgfQotICAgICAgLy8gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgfQotICAKLSAgICAgICAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mVHlwZVZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZlR5cGVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOGZjODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mVHlwZVZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5GaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uLlNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mVHlwZVZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgSUVudmlyb25tZW50IGVudl87Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLQotICAvKgotICAqIENvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZlR5cGVWaXNpdG9yKElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCWVudl8gPSBlbnY7Ci0gIH0KLQotICAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotCi0gICAvKgotICAqIFVzZSB0aGlzIHRvIHJlZmxlY3QgCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSAgLyoKLSAgKiBHZXQgdGhlIHR5cGUgYmVsb25naW5nIHRvIHRoZSBwYXJhbWV0ZXIKLSAgKiBAcGFyYW0gSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyIHRoYXQgb3ducyB0aGUgdHlwZQotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCB0eXBlTmF2aWdhdG9yLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZiAodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEphdmFQYXJhbWV0ZXIpewotCi0gICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgPSAoSmF2YVBhcmFtZXRlcil0eXBlTmF2aWdhdG9yOwotICAgICAgSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMgPSBqYXZhUGFyYW1ldGVyLmdldEphdmFUeXBlKCk7Ci0gICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KGphdmFIZWxwZXJzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEphdmFIZWxwZXJzKXsKLSAgICAJc3RhdHVzID0gdkFjdGlvbi52aXNpdCh0eXBlTmF2aWdhdG9yKTsJCi0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVOYXZpZ2F0b3IgaW5zdGFuY2VvZiBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IpewotICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcil0eXBlTmF2aWdhdG9yOwotICAgICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFNb2ZSZWYgPSBuZXcgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kKCk7Ci0gICAgICBqYXZhTW9mUmVmLnNldENsaWVudFByb2plY3QoY2xpZW50UHJvamVjdCk7Ci0gICAgICBqYXZhTW9mUmVmLnNldFByb3h5QmVhbigoKEphdmFIZWxwZXJzKXBkLmdldFByb3BlcnR5VHlwZSgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgamF2YU1vZlJlZi5zZXRFbnZpcm9ubWVudCggZW52XyApOwotICAgICAgc3RhdHVzID0gamF2YU1vZlJlZi5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLSAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KGphdmFNb2ZSZWYuZ2V0SmF2YUNsYXNzKCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlTmF2aWdhdG9yIGluc3RhbmNlb2YgRmllbGQpewotICAgICAgRmllbGQgZmllbGQgPSAoRmllbGQpdHlwZU5hdmlnYXRvcjsKLSAgICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhTW9mUmVmID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgICAgamF2YU1vZlJlZi5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFByb2plY3QpOwotICAgICAgamF2YU1vZlJlZi5zZXRQcm94eUJlYW4oKChKYXZhSGVscGVycylmaWVsZC5nZXRFVHlwZSgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgamF2YU1vZlJlZi5zZXRFbnZpcm9ubWVudCggZW52XyApOwotICAgICAKLSAgICAgIHN0YXR1cyA9IGphdmFNb2ZSZWYuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgICAgICAgCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Fic3RyYWN0U3RhcnRTZXJ2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWJzdHJhY3RTdGFydFNlcnZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMxMWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWJzdHJhY3RTdGFydFNlcnZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0YXJ0U2VydmVyIHsKLSAKLXByb3RlY3RlZCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3I7Ci1wcml2YXRlIElMb2cgbG9nXzsKLQotcHVibGljIEFic3RyYWN0U3RhcnRTZXJ2ZXIoKQotewotCWxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotfQotCi0vKioKLSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAqLwotcHVibGljIHZvaWQgU3RhcnRTZXJ2ZXIgKElQcm9qZWN0IHByb2plY3QsIElTZXJ2ZXIgc2VydmVyLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIGJvb2xlYW4gcmVzdGFydCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLQl0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotCi0gICB0cnkKLSAgewotICAgCQotLy8gICAgSUphdmFTZXJ2ZXIgamF2YVNlcnZlciA9IChJSmF2YVNlcnZlcikgc2VydmVyLmdldERlbGVnYXRlKCk7Ci0vLyAgICBhZGRKYXJzVG9DbGFzc1BhdGgoamF2YVNlcnZlcik7Ci0gICAgdmFsaWRhdGVSZW1vdGVTZXJ2ZXJQYXRoKHNlcnZlcik7Ci0KLSAgICBpZiAoc2VydmVyLmdldFNlcnZlclN0YXRlKCkgIT0gSVNlcnZlci5TVEFURV9TVE9QUEVEKSAgLy8gVGhlIFNlcnZlciBpcyBydW5uaW5nCi0gICAgeyAKLSAgICAgIGlmIChzZXJ2ZXIuZ2V0U2VydmVyUmVzdGFydFN0YXRlKCkpCi0gICAgICB7ICAgIAotICAgICAgCQotICAgICAgICBzZXJ2ZXIuc3luY2hyb25vdXNTdG9wKGZhbHNlKTsKLSAgICAgICAgbG9nXy5sb2coSUxvZy5JTkZPLCA1MDUwLCB0aGlzLCAiU3RhcnRTZXJ2ZXIiLCAicHJvamVjdD0iK3Byb2plY3QrIiwgU3RvcCBjb21tYW5kIGNvbXBsZXRlZCwgcmVzdGFydCBuZWVkZWQiKTsKLSAgICAgICAgcHVibGlzaFByb2plY3Qoc2VydmVyKTsKLSAgICAJc3RhcnRQcm9qZWN0KHNlcnZlcik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJCi0gICAgICAgIGlmIChyZXN0YXJ0KSAvLyBXRUItSU5GXGxpYiBuZWVkIHRvIGJlIHJlbG9hZGVkCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaXNoUHJvamVjdChzZXJ2ZXIpOyAgICAgIAotICAgICAgICAgIHJlc3RhcnRQcm9qZWN0KHByb2plY3QsIHNlcnZlcik7Ci0gICAgICAgIH0gICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAJCi0gICAgCQlwdWJsaXNoUHJvamVjdChzZXJ2ZXIpOwotICAgIAkJc3RhcnRQcm9qZWN0KHNlcnZlcik7Ci0gICAgCX0KLX0KLQotICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotICAJdGhyb3cgY2U7Ci0gIAl9Ci0gIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCxDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsZSkpOwotICB9Ci19Ci0KLXByb3RlY3RlZCB2b2lkIHB1Ymxpc2hQcm9qZWN0KElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotewotICAgICAgbW9uaXRvci5zdWJUYXNrKCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fUFVCTElTSElOR19TRVJWRVIgKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gc2VydmVyLnB1Ymxpc2goSVNlcnZlci5QVUJMSVNIX0lOQ1JFTUVOVEFMLCBtb25pdG9yKTsKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLk9LKQotICAgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0gICAgICBsb2dfLmxvZyhJTG9nLklORk8sIDUwNTEsIHRoaXMsICJwdWJsaXNoUHJvamVjdCIsICJJU2VydmVyPSIrc2VydmVyKyIsIFB1Ymxpc2ggY29tbWFuZCBjb21wbGV0ZWQiKTsKLSB9Ci0KLXByb3RlY3RlZCB2b2lkIHN0YXJ0UHJvamVjdChJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLSAgdHJ5Ci0gIHsKLSAgICBtb25pdG9yLnN1YlRhc2soIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19TVEFSVElOR19TRVJWRVIgKTsgICAgCi0gICAgc2VydmVyLnN5bmNocm9ub3VzU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG1vbml0b3IpOwotICAgIGxvZ18ubG9nKElMb2cuSU5GTywgNTA1MiwgdGhpcywgInN0YXJ0UHJvamVjdCIsICJJU2VydmVyPSIrc2VydmVyKyIsIFN0YXJ0IGNvbW1hbmQgY29tcGxldGVkIik7Ci0gICAgCi0gIH0KLSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUixlKSk7Ci0gIH0gIAotfQotCi1wcm90ZWN0ZWQgdm9pZCByZXN0YXJ0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLSAgLy9EbyBub3RoaW5nCi19Ci0KLXB1YmxpYyB2b2lkIHJ1blByZVNlcnZlckNvbmZpZyhJU2VydmVyIHNlcnZlciwgSVByb2plY3QgRUFSUHJvamVjdCl7Ci0KLQlyZXR1cm47Ci0JCi19Ci0KLXB1YmxpYyB2b2lkIHJ1blBvc3RTZXJ2ZXJDb25maWcoSVNlcnZlciBzZXJ2ZXIsIElQcm9qZWN0IEVBUlByb2plY3QpewotCi0JcmV0dXJuOwotfQotCi0KLXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGFkZEphcnNUb0NsYXNzUGF0aChJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb247Ci1wcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2YWxpZGF0ZVJlbW90ZVNlcnZlclBhdGgoSVNlcnZlciBzZXJ2ZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgdm9pZCBzdG9wU2VydmVyKElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0KLQlpZiAoc2VydmVyICE9IG51bGwpIHsKLQotCQlpZiAoc2VydmVyLmdldFNlcnZlclN0YXRlKCkgIT0gSVNlcnZlci5TVEFURV9TVE9QUEVEKSB7Ci0JCQlzZXJ2ZXIuc3luY2hyb25vdXNTdG9wKGZhbHNlKTsKLQkJfQotCX0JCi0JCi19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0FkZE1vZHVsZVRvU2VydmVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjBmMzdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTIxIFsxNTgyMTBdIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBDYWxsaW5nIGluY3JlbWVudGFsIGJ1aWxkIG9uIHRoZSBwcm9qZWN0IGJlZm9yZSBhZGRpbmcgdG8gc2VydmVyCi0gKiAyMDA4MDQxNSAgIDIyNzIzNyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA5MDMxMSAyNTA5ODQgICBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFVzZSBhbm90aGVyIG1lY2hhbmlzbSB0byB3YWl0IGZvciBidWlsZCB0byBiZSBjb21wbGV0ZWQKLSAqIDIwMDkwNTE4IFsyNTIwNzddIHRhbmdnQGVtYy5jb20gLSBHYXJ5IFRhbmcsIEZhaWwgdG8gZGVwbG95IGFuIEVBUiBwcm9qZWN0IGlmIGl0IGNvbnRhaW5zIGEgbW9kdWxlCi0gKiAgICAgICAgICAgICAgICAgICBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCAodXBkYXRlZCBwYXRjaCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgbW9kdWxlOwotCQotCXB1YmxpYyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKQotCXsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0JewotICAgICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgICAKLQkgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwkgICAgCi0JICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkgICAgaWYoIShzZXJ2ZXJJbnN0YW5jZUlkID09IG51bGwpKQotCSAgICAJc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZlckluc3RhbmNlSWQpOwotCSAgICBpZiAoc2VydmVyID09IG51bGwpCi0JICAgIHsKLQkgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSU5TVEFOQ0VfTk9UX0ZPVU5EICk7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICAgIH0KLQkgICAKLQkgICAgSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcndjID0gbnVsbDsKLQkgICAgCi0JICAgIHRyeQotCSAgICB7Ci0JICAgIC8vRW5zdXJlIHRoZSBtb2R1bGUgaXMgbm90IGEgSmF2YSB1dGlsaXR5Ci0JICAgIElQcm9qZWN0IGlwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3QpOwotCSAgICBpZiAoIUoyRUVVdGlscy5pc0phdmFDb21wb25lbnQoaXByb2plY3QpKQotCSAgICB7ICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgSU1vZHVsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIG1vZHVsZSBuYW1lCi0gICAgICAgIElNb2R1bGUgaW1vZHVsZSA9IFNlcnZlclV0aWxzLmdldE1vZHVsZShpcHJvamVjdCwgbW9kdWxlKTsKLQotCSAgICAJLy8gVE9ETzogIFRoaXMgd29ya2Fyb3VuZCBmb3IgMTU2NzY4IHNob3VsZCBiZSByZW1vdmVkIG9uY2UgdGhlIGRlZmVjdCBpcyBmaXhlZAotCSAgICAJaWYgKGltb2R1bGUgPT0gbnVsbCkgewotCSAgICAJICAgIC8vIGNhbGxpbmcgaW5jcmVtZW50YWwgYnVpbGQgb24gdGhlIHByb2plY3QgYmVmb3JlIHRyeWluZyBhZ2FpbgotCSAgICAJCWlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsbnVsbCk7Ci0JICAgIAkJaW1vZHVsZSA9IFNlcnZlclV0aWxzLmdldE1vZHVsZShpcHJvamVjdCk7Ci0JICAgIAkJaWYgKGltb2R1bGUgPT0gbnVsbCkgeyAgCi0JICAgIAkJCS8vIHJldHVybiBlcnJvciBpZiBtb2R1bGUgaXMgc3RpbGwgbnVsbCBhZnRlciAxIHJldHJ5Ci0JICAgIAkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9BRERfTU9EVUxFLCBuZXcgU3RyaW5nW117bW9kdWxlfSkgKTsKLQkgICAgCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAJCQlyZXR1cm4gc3RhdHVzOwotCSAgICAJCX0KLQkgICAgCX0KLQkgICAgCS8vIGVuZCBvZiB3b3JrYXJvdW5kIGZvciAxNTY3NjgKLQkgICAgCQotCSAgICAgIGlmICghU2VydmVyVXRpbC5jb250YWluc01vZHVsZShzZXJ2ZXIsIGltb2R1bGUsIG51bGwpKQotCSAgICAgIHsKLQkgICAgICAgIElNb2R1bGVbXSBpbW9kdWxlcyA9IG5ldyBJTW9kdWxlW117aW1vZHVsZX07Ci0JICAgICAgICBzZXJ2ZXJ3YyA9IHNlcnZlci5jcmVhdGVXb3JraW5nQ29weSgpOwotCSAgICAgICAgU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKHNlcnZlcndjLCBpbW9kdWxlcywgbnVsbCwgbnVsbCk7Ci0JICAgICAgfQotCi0JICAgIH0KLQkgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0FERF9NT0RVTEUsIG5ldyBTdHJpbmdbXXttb2R1bGV9KSwgZSk7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAgIHJldHVybiBzdGF0dXM7ICAgICAgCi0JICAgIH0gZmluYWxseQotCSAgICB7Ci0JICAgICAgdHJ5Ci0JICAgICAgewotCSAgICAgICAgaWYgKHNlcnZlcndjICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHNlcnZlcndjLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JICAgICAgICB9Ci0JICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgICAgICB7Ci0JICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQUREX01PRFVMRSwgbmV3IFN0cmluZ1tdIHsgbW9kdWxlIH0pLCBjZSk7Ci0JICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICAgICAgICByZXR1cm4gc3RhdHVzOwotCSAgICAgIH0gICAgICAKLQkgICAgfQotCSAgICAKLQkJcmV0dXJuIHN0YXR1czsKLQkgICAgCi0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vZHVsZShTdHJpbmcgbW9kdWxlKQotCXsKLQkJdGhpcy5tb2R1bGUgPSBtb2R1bGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChTdHJpbmcgcHJvamVjdCkKLQl7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZCkKLQl7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhYjhhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Fzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIFN0cmluZyBwcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyBtb2R1bGVfOwotCXByaXZhdGUgU3RyaW5nIGVhclByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIGVhcl87Ci0JCi0KLSAgcHVibGljIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCl7Ci0KLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLQl7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJSVByb2plY3QgbW9kdWxlUHJvamVjdCA9IG51bGw7Ci0JCUlQcm9qZWN0IGVhclByb2plY3QgPSBudWxsOwotCi0JCS8vIGdldCBwcm9qZWN0cwotCQlpZiAocHJvamVjdF8hPW51bGwpCi0JCQltb2R1bGVQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJaWYgKGVhclByb2plY3RfIT1udWxsKQotCQkJZWFyUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQotCQkvLyBhc3NvY2lhdGUgbW9kdWxlcyBpZiBub3QgYWxyZWFkeSBhc3NvY2lhdGVkCi0JCWlmIChtb2R1bGVQcm9qZWN0IT1udWxsICYmIGVhclByb2plY3QhPW51bGwpIHsKLQkJCWlmICghSjJFRVV0aWxzLmlzQ29tcG9uZW50QXNzb2NpYXRlZChlYXJQcm9qZWN0LCBtb2R1bGVQcm9qZWN0KSkKLQkJCQlKMkVFVXRpbHMuYXNzb2NpYXRlQ29tcG9uZW50VG9FQVIobW9kdWxlUHJvamVjdCwgZWFyUHJvamVjdCk7Ci0JCX0KLQkJCi0JCS8vIGVuc3VyZSBtb2R1bGVzIGFyZSBhc3NvY2lhdGVkIG90aGVyd2lzZSByZXBvcnQgZXJyb3IKLQkJaWYgKCFKMkVFVXRpbHMuaXNDb21wb25lbnRBc3NvY2lhdGVkKGVhclByb2plY3QsIG1vZHVsZVByb2plY3QpKXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fQVNTT0NJQVRFLCBuZXcgU3RyaW5nW117bW9kdWxlXywgZWFyX30pICk7Ci0JCQlpZiAoZW52IT1udWxsKQotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICAgIHJldHVybiBzdGF0dXM7IAotCQl9Ci0JCQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QgKQotICB7Ci0JICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JICBtb2R1bGVfID0gbW9kdWxlOwotICB9CQotCQotICBwdWJsaWMgdm9pZCBzZXRFQVJQcm9qZWN0KCBTdHJpbmcgZWFyUHJvamVjdCApCi0gIHsKLQkgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCSAgZWFyXyA9IGVhcjsgIAotICB9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9CdWlsZEJlYW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkQmVhbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0ZjExOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkQmVhbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MTExMSAgIDI1MjA2MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIERvbid0IGRlcGVuZCBvbiBBdXRvQnVpbGQgdG8gY29tcGlsZSBiZWFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQnVpbGRCZWFuQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0JCi0JLyoKLQkgKiBUaGlzIENvbW1hbmQgYnVpbGRzIHRoZSBzZXJ2aWNlIHByb2plY3QsIGFuZCBhbGwgcHJvamVjdHMgaXQgcmVmZXJlbmNlcy4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKLQkgKiBCdWlsZFByb2plY3RDb21tYW5kIHdoaWNoIG9ubHkgYnVpbGRzIHRoZSBzZXJ2aWNlIHByb2plY3QKLQkgKi8KLQlwdWJsaWMgQnVpbGRCZWFuQ29tbWFuZCgpIHsKLQkJLy9kZWZhdWx0IGNvbnN0cnVjdG9yCi0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQlJUHJvamVjdFtdIHJlZmVyZW5jZWRQcm9qZWN0czsKLQkJCi0JCXRyeSB7Ci0JCQlyZWZlcmVuY2VkUHJvamVjdHMgPSBwcm9qZWN0Xy5nZXRSZWZlcmVuY2VkUHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVmZXJlbmNlZFByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJcmVmZXJlbmNlZFByb2plY3RzW2ldLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG1vbml0b3IpOwotCQkJfQotCQkJcHJvamVjdF8uYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCwgbW9uaXRvcik7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlKTsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JCi0JICAvKioKLQkgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBzZXJ2aWNlIHByb2plY3QgdG8gYmUgYnVpbHQuCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCSAgICB0aGlzLnByb2plY3RfID0gcHJvamVjdDsKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9CdWlsZFByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkUHJvamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUwNmQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwOTAzMTEgMjUwOTg0ICAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBVc2UgYW5vdGhlciBtZWNoYW5pc20gdG8gd2FpdCBmb3IgYnVpbGQgdG8gYmUgY29tcGxldGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBCdWlsZFByb2plY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgdmFsaWRhdGlvbk1hbmFnZXI7Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgYm9vbGVhbiBmb3JjZUJ1aWxkXzsKLSAgLy8gcm0gcHJpdmF0ZSBNb2RlbCBtb2RlbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBDVE9SOwotICAgKi8KLSAgcHVibGljIEJ1aWxkUHJvamVjdENvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoZm9yY2VCdWlsZF8pCi0gICAgICAgIHByb2plY3RfLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgZWxzZSBpZiAodmFsaWRhdGlvbk1hbmFnZXIgPT0gbnVsbCkKLSAgICAgICAgcHJvamVjdF8uYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTWFuYWdlci5nZXRXb3Jrc3BhY2VBdXRvQnVpbGRQcmVmZXJlbmNlKCkpCi0gICAgICAgIHByb2plY3RfLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGZvcmNlQnVpbGQgVGhlIGZvcmNlQnVpbGQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Rm9yY2VCdWlsZChib29sZWFuIGZvcmNlQnVpbGQpIHsKLSAgICB0aGlzLmZvcmNlQnVpbGRfID0gZm9yY2VCdWlsZDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLSAgICB0aGlzLnByb2plY3RfID0gcHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gdmFsaWRhdGlvbk1hbmFnZXIgVGhlIHZhbGlkYXRpb25NYW5hZ2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NYW5hZ2VyKFZhbGlkYXRpb25NYW5hZ2VyIHZhbGlkYXRpb25NYW5hZ2VyKSB7Ci0gICAgdGhpcy52YWxpZGF0aW9uTWFuYWdlciA9IHZhbGlkYXRpb25NYW5hZ2VyOwotICB9Ci0KLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ2hlY2tQcm9qZWN0T0tDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NoZWNrUHJvamVjdE9LQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODFmM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ2hlY2tQcm9qZWN0T0tDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBDaGVja1Byb2plY3RPS0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlkXzsKLQotCi0gIC8qKgotICAgKiBEZWZhdWx0IENUT1IKLSAgICovCi0gIHB1YmxpYyBDaGVja1Byb2plY3RPS0NvbW1hbmQoKSB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgU3RyaW5nIHR5cGVpZCA9IHNlcnZpY2VTZXJ2ZXJUeXBlSWRfOwotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0vLyAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZlcnMuaXRlcmF0b3IoKTsKLSAgICBib29sZWFuIHZpZXdPcGVuID0gZmFsc2U7Ci0gICAgU3RyaW5nIHNlcnZlck5hbWUgPSBudWxsOwotCi0gICAgZm9yIChpbnQgaT0wO2k8c2VydmVycy5sZW5ndGg7aSsrKSB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IChJU2VydmVyKSBzZXJ2ZXJzW2ldOwotCi0gICAgICAvLyBJZiB0aGUgY29uZmlndXJhdGlvbiBlZGl0b3IgaXMgb3BlbiBmb3IgdGhlIHNlcnZlciB0aGF0IHdlIGFyZQotICAgICAgLy8gZGVwbG95aW5nCi0gICAgICAvLyB0byB3ZSB3aWxsIHByb21wdCB0aGUgdXNlciB0byBjbG9zZSBpdC4KLSAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCAmJiBzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHR5cGVpZCkpIHsKLSAgICAgICAgdmlld09wZW4gPSB0cnVlOwotICAgICAgICBzZXJ2ZXJOYW1lID0gc2VydmVyLmdldE5hbWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZpZXdPcGVuKSB7Ci0gICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTiwgbmV3IFN0cmluZ1tdIHsgc2VydmVyTmFtZX0pOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBlcnJvck1lc3NhZ2UgKTsKLSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2aWNlU2VydmVySWQKLSAgICogICAgICAgICAgICBUaGUgc2VydmljZVNlcnZlciBmYWN0b3J5IElkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJZCkgewotICAgIHRoaXMuc2VydmljZVNlcnZlclR5cGVJZF8gPSBzZXJ2aWNlU2VydmVySWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlRW5kcG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OWY3ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlRW5kcG9pbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNjEzICAgMjM3MTE2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBtb25pdG9yaW5nIGZhaWxzIG9uIGh0dHBzIGVuZHBvaW50Ci0gKiAyMDA4MDcxNSAgIDI0MDcyMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ2Fubm90IHNldHVwIFRDUC9JUCBNb25pdG9yIGZvciBzb2FwMTIgZW5kcG9pbnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9uaXRvci5FeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgQm9vbGVhbiBtb25pdG9yU2VydmljZTsKLSAgcHJpdmF0ZSBJbnRlZ2VyIG1vbml0b3JlZFBvcnQ7Ci0KLSAgcHVibGljIENvbXB1dGVFbmRwb2ludENvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIG1vbml0b3JlZFBvcnQgVGhlIG1vbml0b3JlZFBvcnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvcmVkUG9ydChJbnRlZ2VyIG1vbml0b3JlZFBvcnQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JlZFBvcnQgPSBtb25pdG9yZWRQb3J0OwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbW9uaXRvclNlcnZpY2UgVGhlIG1vbml0b3JTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJIFRoZSB3c2RsVVJJIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkKLSAgewotICAgIGlmIChtb25pdG9yU2VydmljZSAhPSBudWxsICYmIG1vbml0b3JTZXJ2aWNlLmJvb2xlYW5WYWx1ZSgpICYmIG1vbml0b3JlZFBvcnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpOwotICAgICAgaWYgKGRlZiAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZGVmLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWl0Lm5leHQoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0MiA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydClpdDIubmV4dCgpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdDMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0My5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXQzLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLSAgICAgICAgICAgICAgaWYgKGV4dCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgICAgICAgCWxvY2F0aW9uID0gKChTT0FQQWRkcmVzcylleHQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIAlsb2NhdGlvbiA9IEV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXJSZWdpc3RyeS5JTlNUQU5DRS50cmFuc2Zvcm0oZXh0KTsKLSAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSkKLSAgICAgICAgICAgICAgICAJbG9jYXRpb24gPSAiaHR0cDovLyIgKyBsb2NhdGlvbi5zdWJzdHJpbmcoOCk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgdXJsID0gbmV3IFVSTCh1cmwuZ2V0UHJvdG9jb2woKSwgdXJsLmdldEhvc3QoKSwgbW9uaXRvcmVkUG9ydC5pbnRWYWx1ZSgpLCB1cmwuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpbnQgcHJvdG9jb2xJbmRleCA9IGxvY2F0aW9uLmluZGV4T2YoIjovLyIpOwotICAgICAgICAgICAgICAgICAgaWYgKHByb3RvY29sSW5kZXggIT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IGxvY2F0aW9uLnN1YnN0cmluZygwLCBwcm90b2NvbEluZGV4KzMpOwotICAgICAgICAgICAgICAgICAgICBpbnQgaG9zdFBvcnRJbmRleCA9IGxvY2F0aW9uLmluZGV4T2YoJy8nLCBwcm90b2NvbEluZGV4KzMpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RQb3J0SW5kZXggPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBob3N0UG9ydEluZGV4ID0gbG9jYXRpb24ubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgZmlsZSA9ICIiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gbG9jYXRpb24uc3Vic3RyaW5nKGhvc3RQb3J0SW5kZXgsIGxvY2F0aW9uLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGhvc3RQb3J0ID0gbG9jYXRpb24uc3Vic3RyaW5nKHByb3RvY29sSW5kZXgrMywgaG9zdFBvcnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBob3N0SW5kZXggPSBob3N0UG9ydC5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdEluZGV4ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0UG9ydC5zdWJzdHJpbmcoMCwgaG9zdEluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RQb3J0ICsgJzonOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3UG9ydCA9IFN0cmluZy52YWx1ZU9mKG1vbml0b3JlZFBvcnQuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbmRwb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIocHJvdG9jb2wpOwotICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC5hcHBlbmQoaG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LmFwcGVuZChuZXdQb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuYXBwZW5kKGZpbGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnQudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OTM0NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNjEzICAgMjM3MTE2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBtb25pdG9yaW5nIGZhaWxzIG9uIGh0dHBzIGVuZHBvaW50Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgQm9vbGVhbiBtb25pdG9yU2VydmljZTsKLSAgcHJpdmF0ZSBJbnRlZ2VyIG1vbml0b3JlZFBvcnQ7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIGVuZHBvaW50OwotCi0gIHB1YmxpYyBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIG1vbml0b3JlZFBvcnQgVGhlIG1vbml0b3JlZFBvcnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvcmVkUG9ydChJbnRlZ2VyIG1vbml0b3JlZFBvcnQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JlZFBvcnQgPSBtb25pdG9yZWRQb3J0OwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbW9uaXRvclNlcnZpY2UgVGhlIG1vbml0b3JTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnQoKQotICB7Ci0gIAlpZiAobW9uaXRvclNlcnZpY2UgIT0gbnVsbCAmJiBtb25pdG9yU2VydmljZS5ib29sZWFuVmFsdWUoKSAmJiBtb25pdG9yZWRQb3J0ICE9IG51bGwpCi0gIAl7Ci0gIAkJLy8gVXNlIHRoZSBlbmRwb2ludCB0aGF0IG1hdGNoZXMgd2l0aCB0aGUgcHJveHkgdGhlIGV4dGVuc2lvbiBwYXNzZXMgdG8gdXMgaWYgaXQgaXMgc2V0Ci0gIAkJaWYgKHByb3h5RW5kcG9pbnQgIT0gbnVsbCkgewotICAJCQlTdHJpbmcgbG9jYXRpb24gPSBwcm94eUVuZHBvaW50OwotICAJCQlpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSkKLSAgICAgICAgICAgIAlsb2NhdGlvbiA9ICJodHRwOi8vIiArIGxvY2F0aW9uLnN1YnN0cmluZyg4KTsKLSAgCQkJdHJ5Ci0JCQl7Ci0gIAkJCQlVUkwgdXJsID0gbmV3IFVSTChsb2NhdGlvbik7Ci0gIAkJCQl1cmwgPSBuZXcgVVJMKHVybC5nZXRQcm90b2NvbCgpLCB1cmwuZ2V0SG9zdCgpLCBtb25pdG9yZWRQb3J0LmludFZhbHVlKCksIHVybC5nZXRGaWxlKCkpOwotICAJCQkJcmV0dXJuIHVybC50b1N0cmluZygpOwotCQkJfQotICAJCQljYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotCQkJewotICAJCQkJaW50IHByb3RvY29sSW5kZXggPSBsb2NhdGlvbi5pbmRleE9mKCI6Ly8iKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgcHJvdG9jb2xJbmRleCszKTsKLSAgICAgICAgICAgICAgICAgIGludCBob3N0UG9ydEluZGV4ID0gbG9jYXRpb24uaW5kZXhPZignLycsIHByb3RvY29sSW5kZXgrMyk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZTsKLSAgICAgICAgICAgICAgICAgIGlmIChob3N0UG9ydEluZGV4ID09IC0xKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBob3N0UG9ydEluZGV4ID0gbG9jYXRpb24ubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUgPSAiIjsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGxvY2F0aW9uLnN1YnN0cmluZyhob3N0UG9ydEluZGV4LCBsb2NhdGlvbi5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdFBvcnQgPSBsb2NhdGlvbi5zdWJzdHJpbmcocHJvdG9jb2xJbmRleCszLCBob3N0UG9ydEluZGV4KTsKLSAgICAgICAgICAgICAgICAgIGludCBob3N0SW5kZXggPSBob3N0UG9ydC5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAgICAgICAgIGlmIChob3N0SW5kZXggIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0UG9ydC5zdWJzdHJpbmcoMCwgaG9zdEluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBob3N0ID0gaG9zdFBvcnQgKyAnOic7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3UG9ydCA9IFN0cmluZy52YWx1ZU9mKG1vbml0b3JlZFBvcnQuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgZW5kcG9pbnQgPSBuZXcgU3RyaW5nQnVmZmVyKHByb3RvY29sKTsKLSAgICAgICAgICAgICAgICAgIGVuZHBvaW50LmFwcGVuZChob3N0KTsKLSAgICAgICAgICAgICAgICAgIGVuZHBvaW50LmFwcGVuZChuZXdQb3J0KTsKLSAgICAgICAgICAgICAgICAgIGVuZHBvaW50LmFwcGVuZChmaWxlKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludC50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIH0KLQkJCX0KLSAgCQl9IGVsc2UgewotICAJCQlyZXR1cm4gZW5kcG9pbnQ7Ci0gIAkJfQotICAJfQotICAJcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBwcm94eUVuZHBvaW50IFRoZSBwcm94eUVuZHBvaW50IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5RW5kcG9pbnQoU3RyaW5nIHByb3h5RW5kcG9pbnQpIHsKLSAgCXRoaXMucHJveHlFbmRwb2ludCA9IHByb3h5RW5kcG9pbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBlbmRwb2ludCBUaGUgZW5kcG9pbnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Ci0gIAl0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvcHlXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2IzMTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYxMjEzICAgMTY1NzIzIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MTIxMyAgIDE2NTcyNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuVVJJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuTmV0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hRGlyZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDb3B5V1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvblVSSTsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZjsKLSAgcHJpdmF0ZSBWZWN0b3IgaWdub3JlTGlzdDsKLQotICBwdWJsaWMgQ29weVdTRExDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgQ29weVdTRExSdW5uYWJsZSBjb3B5V1NETFJ1bm5hYmxlID0gbmV3IENvcHlXU0RMUnVubmFibGUoZW52KTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZSgpLnJ1bihjb3B5V1NETFJ1bm5hYmxlLCBudWxsKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0JCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICB9Ci0KLSAgIAotICBwcml2YXRlIGNsYXNzIENvcHlXU0RMUnVubmFibGUgaW1wbGVtZW50cyBJV29ya3NwYWNlUnVubmFibGUgewotICAJCi0gIAlwcml2YXRlIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IG51bGw7Ci0gIAkKLSAgCXByb3RlY3RlZCBDb3B5V1NETFJ1bm5hYmxlKElFbnZpcm9ubWVudCBlbnYpewotICAJCWVudmlyb25tZW50ID0gZW52OwotICAJfQotICAJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcG0pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLSAgCQlpZ25vcmVMaXN0ID0gbmV3IFZlY3RvcigpOwotICAJCWlmIChkZWYgPT0gbnVsbCkKLSAgCQkJZGVmID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSk7Ci0gIAkJdHJ5IHsKLSAgCQkJY29weVdTREwoZW52aXJvbm1lbnQsIHdzZGxVUkksIGdldEJhc2VVUkkoZGVzdGluYXRpb25VUkkpLCBnZXRMb2NhbG5hbWUoZGVzdGluYXRpb25VUkkpLCBkZWYpOwotICAJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7Ci0gIAkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DT1BZX1dTREwsIG5ldyBTdHJpbmdbXXt3c2RsVVJJLCBkZXN0aW5hdGlvblVSSX0pLCBlKSk7Ci0gIAkJfQotICAJfQotICB9Ci0gIHByaXZhdGUgdm9pZCBjb3B5V1NETChJRW52aXJvbm1lbnQgZW52LCBTdHJpbmcgdXJpLCBTdHJpbmcgZGVzdFVSSSwgU3RyaW5nIGRlc3RMb2NhbG5hbWUpIHRocm93cyBXU0RMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFVSSUV4Y2VwdGlvbgotICB7Ci0gIAlEZWZpbml0aW9uIGRlZmluaXRpb247Ci0JCi0JdHJ5IHsKLQkJZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh1cmkpOwotCQljb3B5V1NETChlbnYsIHVyaSwgZGVzdFVSSSwgZGVzdExvY2FsbmFtZSwgZGVmaW5pdGlvbik7CQotCX0gY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkgewotCQljb3B5WE1MU2NoZW1hKGVudiwgdXJpLCBkZXN0VVJJKTsKLQl9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29weVdTREwoSUVudmlyb25tZW50IGVudiwgU3RyaW5nIHVyaSwgU3RyaW5nIGRlc3RVUkksIFN0cmluZyBkZXN0TG9jYWxuYW1lLCBEZWZpbml0aW9uIGRlZmluaXRpb24pIHRocm93cyBXU0RMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFVSSUV4Y2VwdGlvbgotICB7Ci0JdXJpID0gbm9ybWFsaXplKHVyaSk7Ci0JaWYgKCFuZWVkVG9Db3B5KHVyaSkpIHsKLQkgICAJcmV0dXJuOwotCX0KLQlkZXN0VVJJID0gbm9ybWFsaXplKGRlc3RVUkkpOwotICAgIFN0cmluZyBiYXNlVVJJID0gZ2V0QmFzZVVSSSh1cmkpOwotICAgIGlmIChkZXN0TG9jYWxuYW1lID09IG51bGwgfHwgZGVzdExvY2FsbmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgZGVzdExvY2FsbmFtZSA9IGdldExvY2FsbmFtZSh1cmkpOwotICAgIAotICAgIC8vIGNvcHkgV1NETAotICAgIFN0cmluZ0J1ZmZlciBkZXN0aW5hdGlvbkZpbGVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGFkZFRyYWlsaW5nU2VwYXJhdG9yKGRlc3RVUkkpKTsKLSAgICBkZXN0aW5hdGlvbkZpbGVVUkkuYXBwZW5kKGRlc3RMb2NhbG5hbWUpOwotICAgIFdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgIFdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLSAgICBPdXRwdXRTdHJlYW0gb3MgPSBlbnYuZ2V0VVJJRmFjdG9yeSgpLm5ld1VSSShkZXN0aW5hdGlvbkZpbGVVUkkudG9TdHJpbmcoKSkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgb3MpOwotICAgIG9zLmNsb3NlKCk7Ci0gICAgLy8gY29weSA8d3NkbDppbXBvcnQ+cwotICAgIE1hcCBpbXBvcnRzID0gZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGltcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSAoTGlzdClpdC5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGxpc3RJdCA9IGxpc3QuaXRlcmF0b3IoKTsgbGlzdEl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gKEltcG9ydClsaXN0SXQubmV4dCgpOwotICAgICAgICBTdHJpbmcgd3NkbEltcG9ydFVSSSA9IHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgaWYgKGlzUmVsYXRpdmUod3NkbEltcG9ydFVSSSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgaW1wb3J0QmFzZVVSSSA9IChuZXcgU3RyaW5nQnVmZmVyKGJhc2VVUkkpKS5hcHBlbmQod3NkbEltcG9ydFVSSSkudG9TdHJpbmcoKTsKLSAgICAgICAgICBTdHJpbmcgd3NkbEltcG9ydEJhc2VVUkkgPSBnZXRCYXNlVVJJKHdzZGxJbXBvcnRVUkkpOwotICAgICAgICAgIFN0cmluZ0J1ZmZlciBpbXBvcnREZXN0VVJJID0gbmV3IFN0cmluZ0J1ZmZlcihkZXN0VVJJKTsKLSAgICAgICAgICBpZiAod3NkbEltcG9ydEJhc2VVUkkgIT0gbnVsbCkKLSAgICAgICAgICAgIGltcG9ydERlc3RVUkkuYXBwZW5kKHdzZGxJbXBvcnRCYXNlVVJJKTsKLSAgICAgICAgICBjb3B5V1NETChlbnYsIGltcG9ydEJhc2VVUkksIGltcG9ydERlc3RVUkkudG9TdHJpbmcoKSwgZ2V0TG9jYWxuYW1lKHdzZGxJbXBvcnRVUkkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IHNjaGVtYXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzY2hlbWFzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXQubmV4dCgpOwotICAgICAgICBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBzY2hlbWFFbGVtZW50ID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtZW50OwotICAgICAgICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuY3JlYXRlU2NoZW1hKHNjaGVtYUVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgaW50byBhCi0gICAgICAgICAgICAvLyBYU0RTY2hlbWEgaW5zdGFuY2UKLSAgICAgICAgICB9Ci0gICAgICAgICAgY29weVhNTFNjaGVtYShlbnYsIHhzZFNjaGVtYSwgYmFzZVVSSSwgZGVzdFVSSSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCkKLSAgICAgICAgewotICAgICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBzY2hlbWFFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRFbGVtZW50OwotICAgICAgICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuY3JlYXRlU2NoZW1hKHNjaGVtYUVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgaW50byBhCi0gICAgICAgICAgICAvLyBYU0RTY2hlbWEgaW5zdGFuY2UKLSAgICAgICAgICB9Ci0gICAgICAgICAgY29weVhNTFNjaGVtYShlbnYsIHhzZFNjaGVtYSwgYmFzZVVSSSwgZGVzdFVSSSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTY2hlbWEpCi0gICAgICAgIHsKLSAgICAgICAgICBTY2hlbWEgc2NoZW1hRWxlbWVudCA9IChTY2hlbWEpZXh0RWxlbWVudDsKLSAgICAgICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gbnVsbDsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZ25vcmUgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGludG8gYQotICAgICAgICAgICAgLy8gWFNEU2NoZW1hIGluc3RhbmNlCi0gICAgICAgICAgfQotICAgICAgICAgIGNvcHlYTUxTY2hlbWEoZW52LCB4c2RTY2hlbWEsIGJhc2VVUkksIGRlc3RVUkkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRCYXNlVVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICByZXR1cm4gdXJpLnN1YnN0cmluZygwLCBpbmRleCArIDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TG9jYWxuYW1lKFN0cmluZyB1cmkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICByZXR1cm4gdXJpLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiB1cmk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBhZGRUcmFpbGluZ1NlcGFyYXRvcihTdHJpbmcgcykKLSAgewotICAgIGlmICghKHMuZW5kc1dpdGgoIi8iKSB8fCBzLmVuZHNXaXRoKCJcXCIpKSkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHMpOwotICAgICAgc2IuYXBwZW5kKCcvJyk7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHM7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNSZWxhdGl2ZShTdHJpbmcgdXJpKQotICB7Ci0gICAgcmV0dXJuICh1cmkuaW5kZXhPZignOicpID09IC0xKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb3B5WE1MU2NoZW1hKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyB1cmksIFN0cmluZyBkZXN0VVJJKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFVSSUV4Y2VwdGlvbgotICB7Ci0JICB1cmkgPSBub3JtYWxpemUodXJpKTsKLQkgIGlmICghbmVlZFRvQ29weSh1cmkpKSB7Ci0JICAgIAlyZXR1cm47Ci0JICAgIH0KLQkgIGRlc3RVUkkgPSBub3JtYWxpemUoZGVzdFVSSSk7Ci0gICAgLy8gbG9hZCBhcyBhIGNhY2hlZCBzY2hlbWEKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEodXJpKTsKLSAgICAvLyBpZiBzY2hlbWEgaXMgbm90IGNhY2hlZCwgcGFyc2UgaXQKLSAgICBpZiAoeHNkU2NoZW1hID09IG51bGwpCi0gICAgewotICAgICAgWFNEUGFyc2VyIHAgPSBuZXcgWFNEUGFyc2VyKCk7Ci0gICAgICBJbnB1dFN0cmVhbSBpcyA9IE5ldFV0aWxzLmdldFVSTElucHV0U3RyZWFtKHVyaSk7Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcC5wYXJzZShpcyk7Ci0gICAgICAgIHhzZFNjaGVtYSA9IHAuZ2V0U2NoZW1hKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh4c2RTY2hlbWEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBjb3B5IHNjaGVtYQotICAgICAgRWxlbWVudCBlID0geHNkU2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIERPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwotICAgICAgVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsICJVVEYtOCIpOwotICAgICAgc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotICAgICAgT3V0cHV0U3RyZWFtIG9zID0gZW52LmdldFVSSUZhY3RvcnkoKS5uZXdVUkkoKG5ldyBTdHJpbmdCdWZmZXIoZGVzdFVSSSkpLmFwcGVuZChnZXRMb2NhbG5hbWUodXJpKSkudG9TdHJpbmcoKSkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICBzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3MpKTsKLSAgICAgIG9zLmNsb3NlKCk7Ci0gICAgICAvLyBjb3B5IDx4c2Q6aW1wb3J0PnMgYW5kIDx4c2Q6aW5jbHVkZT5zCi0gICAgICBjb3B5WE1MU2NoZW1hKGVudiwgeHNkU2NoZW1hLCBnZXRCYXNlVVJJKHVyaSksIGRlc3RVUkkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb3B5WE1MU2NoZW1hKElFbnZpcm9ubWVudCBlbnYsIFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyBiYXNlVVJJLCBTdHJpbmcgZGVzdFVSSSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBVUklFeGNlcHRpb24KLSAgewotICAgIGlmICh4c2RTY2hlbWEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBjb3B5IDx4c2Q6aW1wb3J0PnMgYW5kIDx4c2Q6aW5jbHVkZT5zCi0gICAgICBFTGlzdCB4c2RTY2hlbWFDb250ZW50cyA9IHhzZFNjaGVtYS5nZXRDb250ZW50cygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHhzZFNjaGVtYUNvbnRlbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBjb250ZW50ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYURpcmVjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgIFhTRFNjaGVtYURpcmVjdGl2ZSB4c2RTY2hlbWFEaXJlY3RpdmUgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKWNvbnRlbnQ7Ci0gICAgICAgICAgU3RyaW5nIHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uID0geHNkU2NoZW1hRGlyZWN0aXZlLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgaWYgKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uICE9IG51bGwgJiYgaXNSZWxhdGl2ZSh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbikpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGl2ZVVSSSA9IChuZXcgU3RyaW5nQnVmZmVyKGJhc2VVUkkpKS5hcHBlbmQoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBTdHJpbmcgZGlyZWN0aXZlQmFzZVVSSSA9IGdldEJhc2VVUkkoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pOwotICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGRpcmVjdGl2ZURlc3RVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGRlc3RVUkkpOwotICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZUJhc2VVUkkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgZGlyZWN0aXZlRGVzdFVSSS5hcHBlbmQoZGlyZWN0aXZlQmFzZVVSSSk7Ci0gICAgICAgICAgICBjb3B5WE1MU2NoZW1hKGVudiwgZGlyZWN0aXZlVVJJLCBkaXJlY3RpdmVEZXN0VVJJLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBuZWVkVG9Db3B5IChTdHJpbmcgbm9ybWFsaXplZFVSSSkgewkKLQkgIGlmIChpZ25vcmVMaXN0LmNvbnRhaW5zKG5vcm1hbGl6ZWRVUkkpKQotCQkgIHJldHVybiBmYWxzZTsKLQkgIGlnbm9yZUxpc3QuYWRkKG5vcm1hbGl6ZWRVUkkpOwotCSAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0vL25vcm1hbGl6ZSB0aGUgdXJpIHRvIHJlbW92ZSByZWxhdGl2ZSBhZGRyZXNzaW5nICIvLi4iCi0gIHByaXZhdGUgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgdXJpICkKLSAgewotICAJYm9vbGVhbiBub3JtYWxpemVkID0gZmFsc2U7Ci0gIAl3aGlsZSghbm9ybWFsaXplZCl7Ci0gIAkgIGludCBkaXIgPSB1cmkuaW5kZXhPZigiLy4uIik7Ci0gIAkgIGlmKGRpciA9PSAtMSkKLSAgCSAgCW5vcm1hbGl6ZWQgPSB0cnVlOwotICAJICBlbHNlewotICAJICAJU3RyaW5nIGZpcnN0ID0gdXJpLnN1YnN0cmluZygwLGRpcik7Ci0gIAkgICAgU3RyaW5nIHNlY29uZCA9IHVyaS5zdWJzdHJpbmcoZGlyICsgMyk7Ci0gIAkgICAgaW50IG5ld0luZGV4ID0gZmlyc3QubGFzdEluZGV4T2YoIi8iKTsKLSAgCSAgICBpZihuZXdJbmRleCA9PSAtMSl7Ci0gIAkgICAgCW5vcm1hbGl6ZWQgPSB0cnVlOwotICAJICAgIH0gZWxzZSB7Ci0gIAkgICAgCWZpcnN0ID0gZmlyc3Quc3Vic3RyaW5nKDAsbmV3SW5kZXgpOwotICAJICAgIAl1cmkgPSBmaXJzdCArIHNlY29uZDsKLSAgCSAgICB9Ci0gIAkgIH0KLSAgCX0KLSAgCXJldHVybiB1cmk7Ci0gIAotICB9Ci0JICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVVJJKFN0cmluZyBkZXN0aW5hdGlvblVSSSkKLSAgewotICAgIHRoaXMuZGVzdGluYXRpb25VUkkgPSBkZXN0aW5hdGlvblVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICB0aGlzLmRlZiA9IGRlZjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETFRyZWVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvcHlXU0RMVHJlZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJlZGIyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvcHlXU0RMVHJlZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMTIgICAxNjU3MjEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTREwgaW1wb3J0IGNhbm5vdCB1c2UgcmVsYXRpdmUgaW1wb3J0IHdpdGggdG8gcGFyZW50IGRpcmVjdG9yaWVzCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLldTRExDb3BpZXI7Ci0KLS8qKgotICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBXU0RMQ29waWVyfSBpbnN0ZWFkLiAKLSAqLwotcHVibGljIGNsYXNzIENvcHlXU0RMVHJlZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvblVSSTsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFJlbFBhdGg7Ci0gIAotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKHdlYlNlcnZpY2VzUGFyc2VyKTsgICAgICAgIAotICAgICAgY29waWVyLnNldFNvdXJjZVVSSSh3c2RsVVJJLCBkZWYpOwotICAgICAgY29waWVyLnNldFRhcmdldEZvbGRlclVSSShnZXRCYXNlVVJJKGRlc3RpbmF0aW9uVVJJKSk7Ci0gICAgICBjb3BpZXIuc2V0VGFyZ2V0RmlsZW5hbWUoZ2V0TG9jYWxuYW1lKGRlc3RpbmF0aW9uVVJJKSk7Ci0gICAgICAgIAotICAgICAgUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBtb25pdG9yKTsKLSAgICAgICAgCi0gICAgICB3c2RsUmVsUGF0aCA9IGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpOwotCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGNlLmdldFN0YXR1cygpOwotCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEJhc2VVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIGludCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCdcXCcpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiB1cmkuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRMb2NhbG5hbWUoU3RyaW5nIHVyaSkKLSAgewotICAgIGludCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCdcXCcpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiB1cmkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHVyaTsKLSAgfQotIAkgIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25VUkkoU3RyaW5nIGRlc3RpbmF0aW9uVVJJKQotICB7Ci0gICAgdGhpcy5kZXN0aW5hdGlvblVSSSA9IGRlc3RpbmF0aW9uVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHRoaXMuZGVmID0gZGVmOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTRExSZWxQYXRoKCkgewotICAgIHJldHVybiB3c2RsUmVsUGF0aDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0Mjc5ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgIAotICogMjAwNjAyMTcgMTI2NzU3ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDIyMSAxMTkxMTEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI3IDEyNjc4MCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTcgMTI2OTY1ICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwOTA1ICAgMTU2MjMwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBIYW5kbGluZyBwcm9qZWN0cyB3aXRoIG5vIHRhcmdldCBydW50aW1lCi0gKiAyMDA3MDUwNSAgIDE4NDc3MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMDUgICAyMjAzNzEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzA1ICAgMjIwMzcxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuIC0gcmV2ZXJ0aW5nIHByZXZpb3VzIGNoYW5nZSB0byAyMjAzNzEKLSAqIDIwMDgwMzI2ICAgMjIwMzcxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuIC0gcmUtYXBwbHlpbmcgMjIwMzcxCi0gKiAyMDA4MTAwMSAgIDI0Mzg2OSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXZWIgU2VydmljZSB0b29scyBhbGxvd2luZyBtaXhlZCBKMkVFIGxldmVscwotICogMjAwOTExMjMgICAyNDI2MTUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBVc2UgcHJvamVjdCBjcmVhdGlvbiBvcGVyYXRpb25zIHRvIGNyZWF0ZSBwcm9qZWN0cwotICogMjAxMDAyMTEgICAzMDI2MzEgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBjcmVhdGluZyB1dGlsaXR5IHByb2plY3RzIHZpYSBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXBwbGljYXRpb25jbGllbnQuaW50ZXJuYWwuY3JlYXRpb24uQXBwQ2xpZW50RmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5lamIucHJvamVjdC5vcGVyYXRpb25zLkVqYkZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYi5hcmNoaXZlLm9wZXJhdGlvbnMuV2ViRmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LklKMkVFRmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuVXRpbGl0eVByb2plY3RDcmVhdGlvbkRhdGFNb2RlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuZGF0YW1vZGVsLnByb3BlcnRpZXMuSUZhY2V0RGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuZGF0YW1vZGVsLnByb3BlcnRpZXMuSUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuZGF0YW1vZGVsLnByb3BlcnRpZXMuSUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5GYWNldERhdGFNb2RlbE1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5EYXRhTW9kZWxGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuSURhdGFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICAvL25hbWUgb2YgdGhlIHByb2plY3QgdG8gYmUgY3JlYXRlZAotICBwcml2YXRlIFN0cmluZyAgIHByb2plY3ROYW1lOyAKLQotICAvL25hbWUgb2YgdGhlIEVBUiBwcm9qZWN0IGFzc29jaWF0ZWQgd2l0aCBwcm9qZWN0TmFtZQotICBwcml2YXRlIFN0cmluZyAgIGVhclByb2plY3ROYW1lOyAKLQotICAvL2lkIG9mIHRoZSBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIHByb2plY3QuCi0gIHByaXZhdGUgU3RyaW5nICAgdGVtcGxhdGVJZDsKLSAgCi0gIC8vcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgdGhhdCBtdXN0IGJlIHNhdGlzZmllZCB3aGVuIGNyZWF0aW5nIHRoZSBwcm9qZWN0ICh0aGlzIGNvbWVzIGZyb20KLSAgLy90aGUgc2VsZWN0ZWQgc2VydmVyUnVudGltZSBvciBjbGllbnRSdW50aW1lIGluIHRoZSBjYWxsaW5nIHNjZW5hcmlvKQotICBwcml2YXRlIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gICByZXF1aXJlZEZhY2V0VmVyc2lvbnM7Ci0KLSAgLy9zZXJ2ZXIgdHlwZSBpZCAtIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmYWNldCBydW50aW1lIHRoZSBjcmVhdGVkIHByb2plY3Qgd2lsbCBiZSBib3VuZCB0bwotICAvL2lmIHNlcnZlckluc3RhbmNlSWQgaXMgbnVsbCBvciBlbXB0eQotICBwcml2YXRlIFN0cmluZyAgIHNlcnZlckZhY3RvcnlJZDsKLQotICAvL3NlcnZlciBpZCAtIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmYWNldCBydW50aW1lIHRoZSBjcmVhdGVkIHByb2plY3Qgd2lsbCBiZSBib3VuZCB0by4gTWF5Ci0gIC8vYmUgbnVsbCBvciBlbXB0eS4KLSAgcHJpdmF0ZSBTdHJpbmcgICBzZXJ2ZXJJbnN0YW5jZUlkOwotICAKLSAgLy9mYWNldCBydW50aW1lIGRldGVybWluZWQgZnJvbSB0aGUgc2VydmVySW5zdGFuY2VJZCBvciBzZXJ2ZXJGYWN0b3J5SWQKLSAgcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZhY2V0UnVudGltZTsKLSAgCi0gIAotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNXZWJGYWNldChTZXQgZmFjZXRWZXJzaW9ucykgewotCSAgZm9yIChJdGVyYXRvciBpdGVyID0gZmFjZXRWZXJzaW9ucy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJICBJUHJvamVjdEZhY2V0VmVyc2lvbiByZXF1aXJlZEZhY2V0VmVyc2lvbiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbikgaXRlci5uZXh0KCk7Ci0JCSAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9uLmdldFByb2plY3RGYWNldCgpLmdldElkKCkuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpKSB7Ci0JCQkgIHJldHVybiB0cnVlOwotCQkgIH0KLQkgIH0KLQkgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLy9yZXR1cm4gdGhlIHByb2plY3QgY3JlYXRpb24gZGF0YSBtb2RlbCBmb3IgdGhlIHRlbXBsYXRlSWQgb3IgbnVsbCBpZiBubyBkYXRhIG1vZGVsIGZvdW5kCi0gIHByaXZhdGUgSURhdGFNb2RlbCBnZXREYXRhTW9kZWxGb3JUZW1wbGF0ZShTZXQgcmVxdWlyZWRGaXhlZEZhY2V0cykgewotCSAgSURhdGFNb2RlbCBkbSA9IG51bGw7CSAgCi0JICBpZiAodGVtcGxhdGVJZCA9PSBudWxsKSAKLQkJICByZXR1cm4gbnVsbDsKLQkgIGVsc2UgaWYgKHRlbXBsYXRlSWQuZXF1YWxzKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfVEVNUExBVEUpKSB7Ci0JCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgRWpiRmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm92aWRlcigpKTsgIAotCQkgIGRtLnNldFByb3BlcnR5KElKMkVFRmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzLkZBQ0VUX1BST0pFQ1RfTkFNRSwgcHJvamVjdE5hbWUpOwotCQkgIGRtLnNldEJvb2xlYW5Qcm9wZXJ0eShJSjJFRUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCSAgZG0uc2V0UHJvcGVydHkoSUoyRUVGYWNldFByb2plY3RDcmVhdGlvbkRhdGFNb2RlbFByb3BlcnRpZXMuRkFDRVRfUlVOVElNRSwgZmFjZXRSdW50aW1lKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRlbXBsYXRlSWQuZXF1YWxzKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfVEVNUExBVEUpKSB7Ci0JCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQXBwQ2xpZW50RmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJICBkbS5zZXRQcm9wZXJ0eShJSjJFRUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5GQUNFVF9QUk9KRUNUX05BTUUsIHByb2plY3ROYW1lKTsKLQkJICBkbS5zZXRQcm9wZXJ0eShJSjJFRUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5GQUNFVF9SVU5USU1FLCBmYWNldFJ1bnRpbWUpOwkJICAKLQkgIH0KLQkgIGVsc2UgaWYgKHRlbXBsYXRlSWQuZXF1YWxzKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFKSkgewotCQkgIGRtID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IFV0aWxpdHlQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJICBkbS5zZXRQcm9wZXJ0eShJSjJFRUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5GQUNFVF9QUk9KRUNUX05BTUUsIHByb2plY3ROYW1lKTsKLQkJICBkbS5zZXRQcm9wZXJ0eShJSjJFRUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5GQUNFVF9SVU5USU1FLCBmYWNldFJ1bnRpbWUpOwotCSAgfQotCSAgZWxzZSBpZiAodGVtcGxhdGVJZC5lcXVhbHMoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSkgfHwgY29udGFpbnNXZWJGYWNldChyZXF1aXJlZEZpeGVkRmFjZXRzKSkgewotCQkgIC8vd2Ugd2FudCBhbnkgcHJvamVjdCB3aXRoIHRoZSB3ZWIgdGVtcGxhdGUgSUQsIG9yIHRoYXQgY29udGFpbnMgYSBqc3Qud2ViIGZhY2V0IHRvIGJlIGNyZWF0ZWQgd2l0aCB0aGlzIGRhdGEgbW9kZWwKLQkJICBkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBXZWJGYWNldFByb2plY3RDcmVhdGlvbkRhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkgIGRtLnNldFByb3BlcnR5KElKMkVFRmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzLkZBQ0VUX1BST0pFQ1RfTkFNRSwgcHJvamVjdE5hbWUpOwotCQkgIGRtLnNldEJvb2xlYW5Qcm9wZXJ0eShJSjJFRUZhY2V0UHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCSAgZG0uc2V0UHJvcGVydHkoSUoyRUVGYWNldFByb2plY3RDcmVhdGlvbkRhdGFNb2RlbFByb3BlcnRpZXMuRkFDRVRfUlVOVElNRSwgZmFjZXRSdW50aW1lKTsJICAJCSAgCi0JICB9Ci0JICByZXR1cm4gZG07Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotCSAgLy8gY2hlY2sgaWYgZGF0YSByZWFkeQotCSAgc3RhdHVzID0gY2hlY2tEYXRhUmVhZHkoKTsKLQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgewotCQkgIHJldHVybiBzdGF0dXM7Ci0JICB9Ci0KLQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCSAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotCSAgewotCQkgIHRyeXsKLQkJCSAgSVByb2plY3QgY3JlYXRlZFByb2plY3Q7Ci0JCQkgIElGYWNldGVkUHJvamVjdCBmcHJvamVjdDsKLQkJCSAgU2V0IGZhY2V0c1RvQWRkID0gZ2V0RmFjZXRzVG9BZGQoKTsKLQotCQkJICBJRGF0YU1vZGVsIGRtID0gZ2V0RGF0YU1vZGVsRm9yVGVtcGxhdGUoZmFjZXRzVG9BZGQpOwotCQkJICBpZiAoZG0gIT0gbnVsbCkgewotCQkJCSAgLy93ZSBmb3VuZCBhIHByb2plY3QgY3JlYXRpb24gZGF0YSBtb2RlbCBmb3IgdGhpcyB0ZW1wbGF0ZSBpZC4gIHVzZSBpdCB0byBjcmVhdGUgdGhlIHByb2plY3QKLQotCQkJCSAgU2V0IG1pc3NpbmdGYWNldHMgPSBuZXcgSGFzaFNldCgpOwotCi0JCQkJICAvL2hlcmUgd2UgbG9vayBhdCB0aGUgZmFjZXQgdmVyc2lvbnMgaW4gZmFjZXRzVG9BZGQgYW5kIHNldCB0aGUgdmVyc2lvbiBvbiB0aGUgZGF0YSBtb2RlbCB0byBtYXRjaAotCQkJCSAgLy9pZiBubyBmYWNldCBkYXRhIG1vZGVsIGlzIGZvdW5kIHdlIGFkZCBpdCB0byB0aGUgbWlzc2luZ0ZhY2V0cyBjb2xsZWN0aW9uIHRvIGFkZCBsYXRlciAgCi0JCQkJICBpZiAoZG0uaXNQcm9wZXJ0eShJRmFjZXRQcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzLkZBQ0VUX0RNX01BUCkpIHsKLQkJCQkJICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBmYWNldHNUb0FkZC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCQkJCSAgSVByb2plY3RGYWNldFZlcnNpb24gcmVxdWlyZWRGYWNldFZlcnNpb24gPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotCQkJCQkJICBmaW5hbCBGYWNldERhdGFNb2RlbE1hcCBtYXAgPSAoRmFjZXREYXRhTW9kZWxNYXApIGRtLmdldFByb3BlcnR5KElGYWNldFByb2plY3RDcmVhdGlvbkRhdGFNb2RlbFByb3BlcnRpZXMuRkFDRVRfRE1fTUFQKTsKLQkJCQkJCSAgSURhdGFNb2RlbCBmYWNldERNID0gbWFwLmdldEZhY2V0RGF0YU1vZGVsKHJlcXVpcmVkRmFjZXRWZXJzaW9uLmdldFByb2plY3RGYWNldCgpLmdldElkKCkpOwotCQkJCQkJICBpZiAoZmFjZXRETSAhPSBudWxsKSB7Ci0JCQkJCQkJICBmYWNldERNLnNldFN0cmluZ1Byb3BlcnR5KElGYWNldERhdGFNb2RlbFByb3BlcnRpZXMuRkFDRVRfVkVSU0lPTl9TVFIsICByZXF1aXJlZEZhY2V0VmVyc2lvbi5nZXRWZXJzaW9uU3RyaW5nKCkpOwotCQkJCQkJICB9IGVsc2UgewotCQkJCQkJCSAgbWlzc2luZ0ZhY2V0cy5hZGQocmVxdWlyZWRGYWNldFZlcnNpb24pOwotCQkJCQkJICB9Ci0JCQkJCSAgfQotCQkJCSAgfQotCi0JCQkJICBkbS5nZXREZWZhdWx0T3BlcmF0aW9uKCkuZXhlY3V0ZShudWxsLCBudWxsKTsKLQkJCQkgIGNyZWF0ZWRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCQkgIGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGNyZWF0ZWRQcm9qZWN0KTsKLQotCQkJCSAgLy9hZGQgYW55IGZhY2V0cyB0aGF0IHdlcmUgbm90IGFkZGVkIGJ5IHRoZSBwcm9qZWN0IGNyZWF0aW9uIGRhdGEgbW9kZWwKLQkJCQkgIGlmIChtaXNzaW5nRmFjZXRzLnNpemUoKSA+IDApIHsKLQkJCQkJICBzdGF0dXMgPSBGYWNldFV0aWxzLmFkZEZhY2V0c1RvUHJvamVjdChmcHJvamVjdCwgbWlzc2luZ0ZhY2V0cyk7Ci0JCQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQkJCSAgcmV0dXJuIHN0YXR1czsKLQkJCQkJICB9Ci0JCQkJICB9Ci0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJICAvL2RpZCBub3QgZmluZCBhIHByb2plY3QgY3JlYXRpb24gZGF0YSBtb2RlbC4gIGNyZWF0ZSB0aGUgcHJvamVjdCBhbmQgaW5zdGFsbCBmYWNldHMgbWFudWFsbHkKLQkJCQkgIHN0YXR1cyA9IEZhY2V0VXRpbHMuY3JlYXRlTmV3RmFjZXRlZFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfQotCi0JCQkJICBjcmVhdGVkUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQkJICBmcHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShjcmVhdGVkUHJvamVjdCk7Ci0KLQkJCQkgIC8vSW5zdGFsbCB0aGUgZmFjZXQgdmVyc2lvbnMKLQkJCQkgIHN0YXR1cyA9IEZhY2V0VXRpbHMuYWRkRmFjZXRzVG9Qcm9qZWN0KGZwcm9qZWN0LCBmYWNldHNUb0FkZCk7Ci0JCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkJICB9Ci0JCQkJICAvL1NldCB0aGUgaW5zdGFsbGVkIGZhY2V0IHZlcnNpb25zIGFzIGZpeGVkLgotCQkJCSAgU2V0IG5ld0ZhY2V0VmVyc2lvbnMgPSBmcHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0JCQkJICBTZXQgZml4ZWRGYWNldHMgPSBuZXcgSGFzaFNldCgpOwotCQkJCSAgZm9yIChJdGVyYXRvciBpdGVyID0gbmV3RmFjZXRWZXJzaW9ucy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCQkJICBJUHJvamVjdEZhY2V0VmVyc2lvbiBmYWNldFZlcnNpb24gPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotCQkJCQkgIGZpeGVkRmFjZXRzLmFkZChmYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkpOwotCQkJCSAgfQotCQkJCSAgc3RhdHVzID0gRmFjZXRVdGlscy5zZXRGaXhlZEZhY2V0c09uUHJvamVjdChmcHJvamVjdCwgZml4ZWRGYWNldHMpOwotCQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfQotCQkJICB9Ci0KLQkJCSAgLy9TZXQgdGhlIHJ1bnRpbWUgICAgICAgIAotCQkJICBpZiAoZmFjZXRSdW50aW1lICE9IG51bGwpIHsKLQkJCQkgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0RmFjZXRSdW50aW1lT25Qcm9qZWN0KGZwcm9qZWN0LCBmYWNldFJ1bnRpbWUpOwotCQkJICB9Ci0KLQkJCSAgLy8gYWRkIGZhY2V0cyByZXF1aXJlZCBieSBXZWIgc2VydmljZSBydW50aW1lCi0JCQkgIGlmIChyZXF1aXJlZEZhY2V0VmVyc2lvbnMubGVuZ3RoICE9IDApIHsKLQkJCQkgIHN0YXR1cyA9IEZhY2V0VXRpbHMuYWRkUmVxdWlyZWRGYWNldHNUb1Byb2plY3QocHJvamVjdCwgcmVxdWlyZWRGYWNldFZlcnNpb25zLCBtb25pdG9yKTsKLQkJCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfQotCQkJICB9Ci0KLQkJCSAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKSB7Ci0JCQkJICAvLyBhZGQgdGhlIGRlZmF1bHQgZmFjZXRzIHRoYXQncyBub3QgaW4gY29uZmxpY3Qgd2l0aCB0aGUgZXhpc3RpbmcgZmFjZXRzCi0JCQkJICBTZXQgcHJvamVjdEZhY2V0VmVyc2lvblNldCA9IGZwcm9qZWN0LmdldFByb2plY3RGYWNldHMoKTsKLQkJCQkgIFNldCBwcm9qZWN0RmFjZXRTZXQgPSBuZXcgSGFzaFNldCgpOwotCQkJCSAgLy8gZ2V0IHRoZSBwcm9qZWN0IGZhY2V0IGZyb20gdGhlIHByb2plY3QgZmFjZXQgdmVyc2lvbiB3ZSBjYWxjdWxhdGVkCi0JCQkJICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwcm9qZWN0RmFjZXRWZXJzaW9uU2V0Lml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCQkgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbikgaXRlci5uZXh0KCk7Ci0JCQkJCSAgcHJvamVjdEZhY2V0U2V0LmFkZChwZnYuZ2V0UHJvamVjdEZhY2V0KCkpOwotCQkJCSAgfQotCQkJCSAgdHJ5IHsKLQkJCQkJICBTZXQgZGVmYXVsdFByb2plY3RGYWNldFZlcnNpb25TZXQgPSBmYWNldFJ1bnRpbWUuZ2V0RGVmYXVsdEZhY2V0cyhwcm9qZWN0RmFjZXRTZXQpOwotCQkJCQkgIC8vIFRoZSByZXR1cm5lZCBkZWZhdWx0RmFjZXRTZXQgY29udGFpbnMgdGhlIG9yaWdpbmFsIHByb2plY3RGYWNldFNldCBwYXNzZWQgaW50byBnZXREZWZhdWx0RmFjZXRzCi0JCQkJCSAgLy8gcGx1cyBhbnkgZGVmYXVsdCBmYWNldHMgdGhhdCBhcmUgbm90IGluIGNvbmZsaWN0IHdpdGggdGhlIG9yaWdpbmFsIHByb2plY3RGYWNldFNldC4KLQkJCQkJICAvLyBBZGQgdG8gZmFjZXRzVG9BZGQgaWYgdGhlIHRoZSBkZWZhdWx0IGZhY2V0IGlzIG5vdCBpbiB0aGUgb3JpZ2luYWwgc2V0LgotCQkJCQkgIFNldCBkZWZhdWx0RmFjZXRzVG9BZGQgPSBuZXcgSGFzaFNldCgpOwotCQkJCQkgIGZvciAoSXRlcmF0b3IgaXRlciA9IGRlZmF1bHRQcm9qZWN0RmFjZXRWZXJzaW9uU2V0Lml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCQkJICBJUHJvamVjdEZhY2V0VmVyc2lvbiBkZWZhdWx0UHJvakZhY2V0VmVyc2lvbiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbikgaXRlci5uZXh0KCk7Ci0JCQkJCQkgIGlmKCAhIHByb2plY3RGYWNldFNldC5jb250YWlucyggZGVmYXVsdFByb2pGYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkgKSApCi0JCQkJCQkgIHsKLQkJCQkJCQkgIGRlZmF1bHRGYWNldHNUb0FkZC5hZGQoZGVmYXVsdFByb2pGYWNldFZlcnNpb24pOwotCQkJCQkJICB9Ci0JCQkJCSAgfQotCQkJCQkgIGlmICghZGVmYXVsdEZhY2V0c1RvQWRkLmlzRW1wdHkoKSkgewotCQkJCQkJICBzdGF0dXMgPSBGYWNldFV0aWxzLmFkZEZhY2V0c1RvUHJvamVjdChmcHJvamVjdCwgZGVmYXVsdEZhY2V0c1RvQWRkKTsKLQkJCQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkJCQkgIH0KLQkJCQkJICB9Ci0JCQkJICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJICAvLyBJZiB0aGVyZSdzIGFueSBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gZ2V0IHRoZSBkZWZhdWx0IGZhY2V0LCBqdXN0IGlnbm9yZSB0aGUgZGVmYXVsdCBmYWNldAotCQkJCQkgIC8vIGFuZCByZXR1cm4gdGhlIG9yaWdpbmFsIGZhY2V0c1RvQWRkLgotCQkJCSAgfQotCQkJICB9Ci0JCSAgfQotCQkgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSk7Ci0JCSAgfQotCQkgIGNhdGNoIChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQkJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotCQkgIH0KLQotCSAgfQotCi0JICByZXR1cm4gc3RhdHVzOwotICB9Ci0gICAgCi0gIHByaXZhdGUgSVN0YXR1cyBjaGVja0RhdGFSZWFkeSgpCi0gIHsKLQotCWlmIChwcm9qZWN0TmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10ge3Byb2plY3ROYW1lfSkpOwotICAgIH0KLQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2V0IG9mIGZhY2V0cyB0byBpbnN0YWxsIG9uIHRoZSBuZXcgcHJvamVjdC4gVGhlIHNldCB3aWxsIGNvbnNpc3QKLSAgICogb2YgdGhlIGhpZ2hlc3QgdmVyc2lvbiBvZiBlYWNoIG9mIHRoZSB0ZW1wbGF0ZSdzIGZpeGVkIGZhY2V0cyB0aGF0IHNhdGlzZmllcwotICAgKiB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMsIHRoZSBmYWNldCBydW50aW1lLCBhbmQgdGhlIEVBUiBwcm9qZWN0IEoyRUUgbGV2ZWwuCi0gICAqIEByZXR1cm4gU2V0IGEgU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSBJUHJvamVjdEZhY2V0VmVyc2lvbi4KLSAgICovCi0gIHByaXZhdGUgU2V0IGdldEZhY2V0c1RvQWRkKCkKLSAgewotICAgIFNldCBmYWNldHMgPSBudWxsOwotICAgIAotICAgIC8vU2V0IHRoZSBmYWNldCBydW50aW1lLgotICAgIHNldEZhY2V0UnVudGltZSgpOwotICAgIC8vR2V0IGFsbCBmYWNldCB2ZXJzaW9uIGNvbWJpbmF0aW9ucyBmb3IgdGhlIHRlbXBsYXRlIGluIG9yZGVyIG9mIGFzY2VuZGluZyB2ZXJzaW9uIG51bWJlcnMuCi0gICAgU2V0W10gYWxsQ29tYmluYXRpb25zID0gRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlLmdldEluc3RhbmNlKCkuZ2V0RmFjZXRWZXJzaW9uQ29tYmluYXRpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIGludCBuID0gYWxsQ29tYmluYXRpb25zLmxlbmd0aDsKLSAgICBpZiAoZmFjZXRSdW50aW1lICE9IG51bGwpCi0gICAgewotICAgICAgLy9XYWxrIHRoZSBmYWNldCB2ZXJzaW9uIGNvbWJpbmF0aW9ucyBpbiBvcmRlciBvZiBkZXNjZW5kaW5nIHZlcnNpb24gbnVtYmVycy4KLSAgICAgIGZvciAoaW50IGk9bi0xOyBpPj0wOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIC8vQ2hlY2sgdGhpcyB0ZW1wbGF0ZSBjb21iaW5hdGlvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSAKLSAgICAgICAgLy9yZXF1aXJlZCBmYWNldCB2ZXJzaW9ucywgdGhlIHNlcnZlciBydW50aW1lLCBhbmQgdGhlIEVBUi4gSWYgaXQgaXMsIGNob29zZSBpdC4KLSAgICAgICAgU2V0IGNvbWJpbmF0aW9uID0gYWxsQ29tYmluYXRpb25zW2ldOwotICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgY29tYmluYXRpb24pOwotICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy9DaGVjayBhZ2FpbnN0IFJ1bnRpbWUgJiBFQVIKLSAgICAgICAgICBpZiAoRmFjZXRVdGlscy5kb2VzUnVudGltZVN1cHBvcnRGYWNldHMoZmFjZXRSdW50aW1lLCBjb21iaW5hdGlvbikgICYmIGRvZXNFQVJTdXBwb3J0RmFjZXRzKGNvbWJpbmF0aW9uKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9XZSBoYXZlIGEgbWF0Y2guIFVzZSB0aGlzIGNvbWJpbmF0aW9uIG9mIGZhY2V0IHZlcnNpb25zIGZvciBwcm9qZWN0IGNyZWF0aW9uLgotICAgICAgICAgICAgZmFjZXRzID0gY29tYmluYXRpb247Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9bi0xOyBpPj0wOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIC8vQ2hlY2sgdGhpcyB0ZW1wbGF0ZSBjb21iaW5hdGlvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIGJvdGggdGhlIAotICAgICAgICAvL3NlcnZpY2UvY2xpZW50IHJ1bnRpbWUgYW5kIHRoZSBzZXJ2ZXIgcnVudGltZS4gSWYgaXQgaXMsIGNob29zZSBpdC4KLSAgICAgICAgU2V0IGNvbWJpbmF0aW9uID0gYWxsQ29tYmluYXRpb25zW2ldOwotICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgY29tYmluYXRpb24pOwotICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvL1dlIGhhdmUgYSBtYXRjaC4gVXNlIHRoaXMgY29tYmluYXRpb24gb2YgZmFjZXQgdmVyc2lvbnMgZm9yIHByb2plY3QgY3JlYXRpb24uCi0gICAgICAgICAgICBmYWNldHMgPSBjb21iaW5hdGlvbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLSAgIAotICAgIC8vVW5saWtlbHkgdG8gZ2V0IHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUsIGJ1dCBpZiB3ZSBkbywgY2hvb3NlIHRoZSBoaWdoZXN0IHZlcnNpb24KLSAgICAvL29mIGVhY2ggZml4ZWQgZmFjZXQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgcnVudGltZQotICAgIGlmIChmYWNldHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWNldHMgPSBnZXRIaWdoZXN0RmFjZXRWZXJzaW9uc0Zyb21UZW1wbGF0ZUFuZFNlcnZlcigpOwotICAgIH0KLSAgICAgCi0gICAgcmV0dXJuIGZhY2V0czsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBmYWNldFJ1bnRpbWUgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkIG9yIHNlcnZlckZhY3RvcnlJZAotICAgKiBQcmVmZXJlbmNlIGlzIGdpdmVuIHRvIG5vbi1zdHViIGZhY2V0IHJ1bnRpbWVzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEZhY2V0UnVudGltZSgpCi0gIHsKLSAgICAKLQkgIGlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwgJiYgc2VydmVySW5zdGFuY2VJZC5sZW5ndGgoKT4wKQotCSAgewotCQkgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZlckluc3RhbmNlSWQpOwotCQkgIElSdW50aW1lIHNSdW50aW1lID0gc2VydmVyLmdldFJ1bnRpbWUoKTsKLQkJICBmYWNldFJ1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShzUnVudGltZSk7ICAgICAgCi0JICB9Ci0JICBlbHNlCi0JICB7Ci0JCSAgaWYgKHNlcnZlckZhY3RvcnlJZCAhPSBudWxsICYmIHNlcnZlckZhY3RvcnlJZC5sZW5ndGgoKSA+IDApCi0JCSAgewotCQkJICAvL0ZpbmQgYSBub24gU3R1YiBydW50aW1lIHRoYXQgbWF0Y2hlcyB0aGlzIHNlcnZlciB0eXBlCi0JCQkgIElSdW50aW1lIHNlcnZlclJ1bnRpbWUgPSBTZXJ2ZXJVdGlscy5nZXROb25TdHViUnVudGltZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJICBpZiAoc2VydmVyUnVudGltZSAhPSBudWxsKQotCQkJICB7Ci0JCQkJICBmYWNldFJ1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShzZXJ2ZXJSdW50aW1lKTsKLQkJCSAgfQotCQkJICBlbHNlCi0JCQkgIHsKLQkJCQkgIC8vQWNjZXB0IHN0dWIgcnVudGltZS4KLQkJCQkgIElTZXJ2ZXJUeXBlIHN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJCSAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBzdC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7ICAgCi0JCQkJICAvL0ZpbmQgdGhlIGZhY2V0IHJ1bnRpbWUKLQkJCQkgIElSdW50aW1lW10gcnVudGltZXMgPSBTZXJ2ZXJDb3JlLmdldFJ1bnRpbWVzKCk7Ci0JCQkJICBmb3IgKGludCBpPTA7IGk8cnVudGltZXMubGVuZ3RoOyBpKyspCi0JCQkJICB7Ci0JCQkJCSAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBydW50aW1lc1tpXTsKLQkJCQkJICBpZiAoc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lVHlwZUlkKSkKLQkJCQkJICB7Ci0JCQkJCQkgIGZhY2V0UnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKHNSdW50aW1lKTsKLQkJCQkJICB9Ci0JCQkJICB9ICAgICAgICAgICAgICAgIAotCQkJICB9Ci0JCSAgfQotCSAgfQotICB9ICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3ROYW1lKFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMucHJvamVjdE5hbWUgPSBwcm9qZWN0TmFtZTsKLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZW1wbGF0ZUlkKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgdGhpcy50ZW1wbGF0ZUlkID0gdGVtcGxhdGVJZDsKLSAgfSAgICAKLQotICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICB0aGlzLnJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0TmFtZShTdHJpbmcgZWFyUHJvamVjdCkgewotCSAgdGhpcy5lYXJQcm9qZWN0TmFtZSA9IGVhclByb2plY3Q7Ci0gIH0KLSAgCi0JcHJpdmF0ZSBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIGdldFJlcXVpcmVkV2ViRmFjZXRzKCkgewotCQlyZXR1cm4gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uW10geyBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbigKLQkJCQlJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFLAotCQkJCUoyRUVVdGlscy5nZXRXZWJKMkVFVmVyc2lvbkZyb21FQVJKMkVFVmVyc2lvbihQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyUHJvamVjdE5hbWUpKSkgfTsKLQl9Ci0KLQlwcml2YXRlIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gZ2V0UmVxdWlyZWRBcHBDbGllbnRGYWNldHMoKSB7Ci0JCXJldHVybiBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bXSB7IGdldFJlcXVpcmVkRmFjZXRWZXJzaW9uKAotCQkJCUlNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUsCi0JCQkJSjJFRVV0aWxzLmdldEFwcENsaWVudEoyRUVWZXJzaW9uRnJvbUVBUkoyRUVWZXJzaW9uKFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0TmFtZSkpKSB9OwotCX0KLQotCXByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZEVKQkZhY2V0cygpIHsKLQkJcmV0dXJuIG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHsgZ2V0UmVxdWlyZWRGYWNldFZlcnNpb24oCi0JCQkJSU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSwKLQkJCQlKMkVFVXRpbHMuZ2V0RUpCSjJFRVZlcnNpb25Gcm9tRUFSSjJFRVZlcnNpb24oUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclByb2plY3ROYW1lKSkpIH07Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGRvZXNFQVJTdXBwb3J0RmFjZXRzKFNldCBjb21iaW5hdGlvbikgewotCQl0cnkgewotCi0JCQlpZiAoZWFyUHJvamVjdE5hbWUgPT0gbnVsbCB8fCBlYXJQcm9qZWN0TmFtZS5sZW5ndGgoKSA9PSAwCi0JCQkJCXx8ICFQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyUHJvamVjdE5hbWUpLmV4aXN0cygpKQotCQkJCS8vIHRoZSBlYXIgZG9lcyBub3QgZXhpc3Qgb3IgdGhlIHByb2plY3QgdHlwZSB0ZW1wbGF0ZSBpcwotCQkJCS8vIHVuZGVmaW5lZAotCQkJCXJldHVybiB0cnVlOwotCQkJZWxzZSB7Ci0JCQkJaWYgKGNvbWJpbmF0aW9uQ29udGFpbnNGYWNldChjb21iaW5hdGlvbiwgSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkpCi0JCQkJCXJldHVybiBGYWNldFV0aWxzCi0JCQkJCQkJLm1hdGNoKGdldFJlcXVpcmVkV2ViRmFjZXRzKCksIGNvbWJpbmF0aW9uKQotCQkJCQkJCS5pc01hdGNoKCk7Ci0JCQkJZWxzZSBpZiAoY29tYmluYXRpb25Db250YWluc0ZhY2V0KGNvbWJpbmF0aW9uLCBJTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKSkKLQkJCQkJcmV0dXJuIEZhY2V0VXRpbHMKLQkJCQkJCQkubWF0Y2goZ2V0UmVxdWlyZWRFSkJGYWNldHMoKSwgY29tYmluYXRpb24pCi0JCQkJCQkJLmlzTWF0Y2goKTsKLQkJCQllbHNlIGlmIChjb21iaW5hdGlvbkNvbnRhaW5zRmFjZXQoY29tYmluYXRpb24sIElNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUpKQotCQkJCQlyZXR1cm4gRmFjZXRVdGlscy5tYXRjaChnZXRSZXF1aXJlZEFwcENsaWVudEZhY2V0cygpLAotCQkJCQkJCWNvbWJpbmF0aW9uKS5pc01hdGNoKCk7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNvbWJpbmF0aW9uQ29udGFpbnNGYWNldChTZXQgY29tYmluYXRpb24sIFN0cmluZyBmYWNldE5hbWUpIHsKLQkJaWYgKGNvbWJpbmF0aW9uID09IG51bGwgfHwgZmFjZXROYW1lID09IG51bGwgfHwgZmFjZXROYW1lLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IGNvbWJpbmF0aW9uLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotICAgICAgICAJSVByb2plY3RGYWNldFZlcnNpb24gbmV4dEZhY2V0VmVyc2lvbiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbikgaXRlci5uZXh0KCk7Ci0gICAgICAgIAlpZiAoZmFjZXROYW1lLmVxdWFscyhuZXh0RmFjZXRWZXJzaW9uLmdldFByb2plY3RGYWNldCgpLmdldElkKCkpKQotICAgICAgICAJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBSZXF1aXJlZEZhY2V0VmVyc2lvbiBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbihTdHJpbmcgZmFjZXROYW1lLAotCQkJU3RyaW5nIGZhY2V0VmVyc2lvbikgewotCQlJUHJvamVjdEZhY2V0IHByb2plY3RGYWNldCA9IFByb2plY3RGYWNldHNNYW5hZ2VyCi0JCQkJLmdldFByb2plY3RGYWNldChmYWNldE5hbWUpOwotCQlJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qRmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0Ci0JCQkJLmdldFZlcnNpb24oZmFjZXRWZXJzaW9uKTsKLQkJUmVxdWlyZWRGYWNldFZlcnNpb24gcmVxRmFjZXRWZXJzaW9uID0gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uKCk7Ci0JCXJlcUZhY2V0VmVyc2lvbi5zZXRBbGxvd05ld2VyKGZhbHNlKTsKLQkJcmVxRmFjZXRWZXJzaW9uLnNldFByb2plY3RGYWNldFZlcnNpb24ocHJvakZhY2V0VmVyc2lvbik7Ci0JCXJldHVybiByZXFGYWNldFZlcnNpb247Ci0JfQotCi0JICBwcml2YXRlIFNldCBnZXRIaWdoZXN0RmFjZXRWZXJzaW9uc0Zyb21UZW1wbGF0ZUFuZFNlcnZlcigpCi0JICB7Ci0JICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0JICAgIFNldCBmaXhlZEZhY2V0cyA9IHRlbXBsYXRlLmdldEZpeGVkUHJvamVjdEZhY2V0cygpOyAKLQkgICAgSGFzaFNldCBpbml0aWFsID0gbmV3IEhhc2hTZXQoKTsgCi0JICAgIGZvciAoSXRlcmF0b3IgaXRyID0gZml4ZWRGYWNldHMuaXRlcmF0b3IoKTsgaXRyLmhhc05leHQoKTsgKSAKLQkgICAgeyAKLQkgICAgICBJUHJvamVjdEZhY2V0IGZhY2V0ID0gKElQcm9qZWN0RmFjZXQpIGl0ci5uZXh0KCk7IAotCSAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGhpZ2hlc3RGYWNldFZlcnNpb24gPSBudWxsOwotCSAgICAgIHRyeSB7Ci0JICAgIAkgIGhpZ2hlc3RGYWNldFZlcnNpb24gPSBmYWNldC5nZXRMYXRlc3RTdXBwb3J0ZWRWZXJzaW9uKGZhY2V0UnVudGltZSk7Ci0JICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIAkgIHRyeSB7Ci0JICAgIAkJICBoaWdoZXN0RmFjZXRWZXJzaW9uID0gZmFjZXQuZ2V0TGF0ZXN0VmVyc2lvbigpOwotCSAgICAJICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUyKSB7Ci0JICAgIAkJICAvL25vdCBtdWNoIHdlIGNhbiBkbyBoZXJlCi0JICAgIAkgIH0KLQkgICAgCSAgCi0JICAgICAgfQotCSAgICAgIGluaXRpYWwuYWRkKGhpZ2hlc3RGYWNldFZlcnNpb24pOyAKLQkgICAgfSAgICAgICAgICAgICAKLQkgICAgCi0JICAgIHJldHVybiBpbml0aWFsOwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVKYXZhUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlSmF2YVByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTAzNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVKYXZhUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KYXZhUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIENyZWF0ZUphdmFQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHByb2plY3ROYW1lXzsKLQotICAvKioKLSAgICogRGVmYXVsdCBDVE9SCi0gICAqLwotICBwdWJsaWMgQ3JlYXRlSmF2YVByb2plY3RDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lXyk7Ci0gICAgCi0gICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiAhcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSksIG1vbml0b3IpOwotICAgICAgICBwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0gICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZGVzYy5zZXROYXR1cmVJZHMobmV3IFN0cmluZ1tdIHtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLSAgICAgICAgSUNvbW1hbmQgY21kID0gZGVzYy5uZXdDb21tYW5kKCk7Ci0gICAgICAgIGNtZC5zZXRCdWlsZGVyTmFtZShKYXZhQ29yZS5CVUlMREVSX0lEKTsKLSAgICAgICAgZGVzYy5zZXRCdWlsZFNwZWMobmV3IElDb21tYW5kW10ge2NtZH0pOwotICAgICAgICBwcm9qZWN0LnNldERlc2NyaXB0aW9uKGRlc2MsIG1vbml0b3IpOwotICAgICAgICBJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgIFBhdGggcHJvamVjdFJvb3QgPSBuZXcgUGF0aChQYXRoLlJPT1QuYXBwZW5kKG5ldyBQYXRoKHByb2plY3QuZ2V0TmFtZSgpKSkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXcgSUNsYXNzcGF0aEVudHJ5W10ge0phdmFDb3JlLm5ld1NvdXJjZUVudHJ5KHByb2plY3RSb290KSwgSmF2YUNvcmUubmV3Q29udGFpbmVyRW50cnkobmV3IFBhdGgoSmF2YVJ1bnRpbWUuSlJFX0NPTlRBSU5FUikpfSwgbW9uaXRvcik7Ci0gICAgICAgIGphdmFQcm9qZWN0LnNldE91dHB1dExvY2F0aW9uKHByb2plY3RSb290LCBtb25pdG9yKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0pBVkFfUFJPSkVDVCwgbmV3IFN0cmluZ1tdIHtwcm9qZWN0TmFtZV99KSwgY2UpOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICBwcm9qZWN0TmFtZV8gPSBwcm9qZWN0TmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVNb25pdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVNb25pdG9yQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGI4ODZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlTW9uaXRvckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JTW9uaXRvcmVkU2VydmVyUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSVNlcnZlck1vbml0b3JNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJNb25pdG9yTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIENyZWF0ZU1vbml0b3JDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX1NFUlZJQ0VTID0gIldlYiBzZXJ2aWNlcyI7Ci0KLSAgcHJpdmF0ZSBCb29sZWFuIG1vbml0b3JTZXJ2aWNlOwotCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkOwotCi0gIHByaXZhdGUgSW50ZWdlciBtb25pdG9yZWRQb3J0OwotCi0gIHB1YmxpYyBDcmVhdGVNb25pdG9yQ29tbWFuZCgpIHsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgaWYgKG1vbml0b3JTZXJ2aWNlICE9IG51bGwgJiYgbW9uaXRvclNlcnZpY2UuYm9vbGVhblZhbHVlKCkpIHsKLSAgICAgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCi0gICAgICAgIC8vIElNb25pdG9yYWJsZVNlcnZlciBtb25pdG9yYWJsZVNlcnZlciA9IChJTW9uaXRvcmFibGVTZXJ2ZXIpCi0gICAgICAgIC8vIHNlcnZlckRlbGVnYXRlOwotICAgICAgICBTZXJ2ZXJQb3J0W10gcG9ydHMgPSBzZXJ2ZXIuZ2V0U2VydmVyUG9ydHMobnVsbCk7Ci0gICAgICAgIFNlcnZlclBvcnQgcG9ydCA9IG51bGw7Ci0gICAgICAgIGZvciAoaW50IGl0ID0gMDsgaXQgPCBwb3J0cy5sZW5ndGg7IGl0KyspIHsKLSAgICAgICAgICBTZXJ2ZXJQb3J0IHAgPSBwb3J0c1tpdF07Ci0gICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gcC5nZXRQcm90b2NvbCgpOwotICAgICAgICAgIGlmIChwcm90b2NvbCAhPSBudWxsICYmIHByb3RvY29sLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiaHR0cCIpKSB7Ci0gICAgICAgICAgICBwb3J0ID0gcDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocG9ydCAhPSBudWxsKSB7Ci0gICAgICAgICAgSVNlcnZlck1vbml0b3JNYW5hZ2VyIHNlcnZlck1vbml0b3JNYW5hZ2VyID0gU2VydmVyTW9uaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgICBJTW9uaXRvcmVkU2VydmVyUG9ydFtdIG1vbml0b3JlZFBvcnRzID0gc2VydmVyTW9uaXRvck1hbmFnZXIuZ2V0TW9uaXRvcmVkUG9ydHMoc2VydmVyKTsKLSAgICAgICAgICBmb3IgKGludCBpdDIgPSAwOyBpdDIgPCBtb25pdG9yZWRQb3J0cy5sZW5ndGg7IGl0MisrKSB7Ci0gICAgICAgICAgICBJTW9uaXRvcmVkU2VydmVyUG9ydCBpbXNQb3J0ID0gbW9uaXRvcmVkUG9ydHNbaXQyXTsKLSAgICAgICAgICAgIGlmIChwb3J0LmdldFBvcnQoKSA9PSBpbXNQb3J0LmdldFNlcnZlclBvcnQoKS5nZXRQb3J0KCkgJiYgaGFzQ29udGVudFdlYlNlcnZpY2VzKGltc1BvcnQpKSAvLyBwb3J0Ci0gICAgICAgICAgICAvLyBhbHJlYWR5Ci0gICAgICAgICAgICAvLyBiZWluZwotICAgICAgICAgICAgLy8gbW9uaXRvcmVkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaW1zUG9ydC5pc1N0YXJ0ZWQoKSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICBzZXJ2ZXJNb25pdG9yTWFuYWdlci5zdGFydE1vbml0b3IoaW1zUG9ydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0gICAgICAgICAgICAgICAgICBJU3RhdHVzIGVycm9yID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBTdHJpbmcudmFsdWVPZihwb3J0LmdldFBvcnQoKSksIHNlcnZlci5nZXROYW1lKCl9KSwgY2UpOwotICAgICAgICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIG1vbml0b3JlZFBvcnQgPSBuZXcgSW50ZWdlcihpbXNQb3J0LmdldE1vbml0b3JQb3J0KCkpOwotICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIElNb25pdG9yZWRTZXJ2ZXJQb3J0IGltc1BvcnQgPSBzZXJ2ZXJNb25pdG9yTWFuYWdlci5jcmVhdGVNb25pdG9yKHNlcnZlciwgcG9ydCwgLTEsIG5ldyBTdHJpbmdbXSB7IFdFQl9TRVJWSUNFU30pOwotICAgICAgICAgICAgc2VydmVyTW9uaXRvck1hbmFnZXIuc3RhcnRNb25pdG9yKGltc1BvcnQpOwotICAgICAgICAgICAgbW9uaXRvcmVkUG9ydCA9IG5ldyBJbnRlZ2VyKGltc1BvcnQuZ2V0TW9uaXRvclBvcnQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLSAgICAgICAgICAgIElTdGF0dXMgZXJyb3IgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHBvcnQuZ2V0UG9ydCgpKSwgc2VydmVyLmdldE5hbWUoKX0pLCBjZSk7Ci0gICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBJU3RhdHVzIGluZm8gPSBTdGF0dXNVdGlscy5pbmZvU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19JTkZPX01PTklUT1JJTkdfTk9UX1NVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBzZXJ2ZXIuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8oaW5mbyk7Ci0gICAgICAgICAgcmV0dXJuIGluZm87Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaGFzQ29udGVudFdlYlNlcnZpY2VzKElNb25pdG9yZWRTZXJ2ZXJQb3J0IGltc1BvcnQpIHsKLSAgICBTdHJpbmdbXSBjb250ZW50cyA9IGltc1BvcnQuZ2V0Q29udGVudFR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGlmIChXRUJfU0VSVklDRVMuZXF1YWxzKGNvbnRlbnRzW2ldKSkgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyKSB7Ci0gICAgdGhpcy5zZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCkgewotICAgIHRoaXMuc2VydmljZVNlcnZlckluc3RhbmNlSWQgPSBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZDsKLSAgfQotCi0gIHB1YmxpYyBJbnRlZ2VyIGdldE1vbml0b3JlZFBvcnQoKSB7Ci0gICAgcmV0dXJuIG1vbml0b3JlZFBvcnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yU2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0gICAgbW9uaXRvclNlcnZpY2UgPSB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVTZXJ2ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZVNlcnZlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA1ODczYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZVNlcnZlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMjEwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlU2VydmVyQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlclJ1bnRpbWVJZDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkOwotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBzZXJ2ZXIgb2YgdGhlIGZhY3RvcnkgaWQgdXNpbmcgdGhlIHNlcnZlciBydW50aW1lIElkIGlmIHByb3ZpZGVkCi0JICogTm90ZTE6IENoZWNraW5nIGZvciBzZXJ2ZXIgaW5zdGFuY2UgPT0gbnVsbCBpcyBkb25lIGluIHRoZSBQcmVTZXJ2aWNlL0NsaWVudEluc3RhbGxDb21tYW5kcwotCSAqIE5vdGUyOiBSZXBvcnRpbmcgb2YgZXJyb3JzIGlzIGRvbmUgaW4gUHJlU2VydmljZS9DbGllbnRJbnN0YWxsQ29tbWFuZHM7IHNpbXBseSByZXR1cm4gdGhlIHN0YXR1cy4KLQkgKi8KLQlwdWJsaWMgQ3JlYXRlU2VydmVyQ29tbWFuZCgpewotCX0KLQkKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkKLQkJaWYgKHNlcnZlckZhY3RvcnlJZD09bnVsbCl7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DUkVBVEVfU0VSVkVSICk7Ci0JCQlyZXR1cm4gc3RhdHVzOwkJCQotCQl9Ci0JCQotCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV0MgPSBudWxsOwotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJaWYgKHNlcnZlclR5cGUhPW51bGwpIHsKLQkJCQkKLQkJCQlJUnVudGltZSBzZXJ2ZXJSdW50aW1lID0gbnVsbDsKLQkJCQlpZiAoc2VydmVyUnVudGltZUlkICE9IG51bGwpIHsKLQkJCQkJc2VydmVyUnVudGltZSA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWUoc2VydmVyUnVudGltZUlkKTsgIC8vIG1heSByZXR1cm4gbnVsbCBpZiBubyBydW50aW1lIGlzIGZvdW5kCi0JCQkJfQotCQkJCQotCQkJCWlmIChzZXJ2ZXJSdW50aW1lID09IG51bGwpIHsgLy8gZWl0aGVyIHNlcnZlclJ1bnRpbWVJZCBpcyBudWxsIG9yIGRpZCBub3QgZmluZCBhIHJ1bnRpbWUgd2l0aCB0aGF0IElkCi0JCQkJCS8vQ2hvb3NlIGEgUnVudGltZSB3aGljaCBpcyBub3QgYSBzdHViCi0JCQkJCUlSdW50aW1lIG5vblN0dWJSdW50aW1lID0gbnVsbDsKLQkJCQkJSVJ1bnRpbWVbXSBydW50aW1lcyA9IFNlcnZlclV0aWwuZ2V0UnVudGltZXMobnVsbCwgbnVsbCk7Ci0JCQkJCVN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCUlSdW50aW1lIHJ1bnRpbWUgPSBydW50aW1lc1tpXTsKLQkJCQkJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotCQkJCQkJaWYgKHRoaXNSdW50aW1lVHlwZUlkLmVxdWFscyhzZXJ2ZXJSdW50aW1lVHlwZUlkKSAmJiAhcnVudGltZS5pc1N0dWIoKSkgewotCQkJCQkJCS8vRm91bmQgYW4gYXBwcm9wcmlhdGUgSVJ1bnRpbWUgdGhhdCBpcyBub3QgYSBzdHViCi0JCQkJCQkJbm9uU3R1YlJ1bnRpbWUgPSBydW50aW1lOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9CQkJCQotCi0JCQkJCWlmIChub25TdHViUnVudGltZT09bnVsbCkKLQkJCQkJewkJCQkJCi0JCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU1RVQl9PTkxZLG5ldyBTdHJpbmdbXXtzZXJ2ZXJGYWN0b3J5SWR9KSApOwotCQkJCQkJcmV0dXJuIHN0YXR1czsJCQkJCQotCQkJCQl9Ci0KLQkJCQkJc2VydmVyUnVudGltZSA9IG5vblN0dWJSdW50aW1lOwotCQkJCX0gCi0JCQkJCi0JCQkJaWYgKGVudiE9bnVsbCkKLQkJCQl7Ci0JCQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIobnVsbCwgbnVsbCwgc2VydmVyUnVudGltZSwgbW9uaXRvciApOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewkJCQkJCi0JCQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIobnVsbCwgbnVsbCwgc2VydmVyUnVudGltZSwgbnVsbCk7Ci0JCQkJfQotCQkJCQotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCWlmIChlbnYhPW51bGwpCi0JCQkJCQlzZXJ2ZXIgPSBzZXJ2ZXJXQy5zYXZlQWxsKHRydWUsIG1vbml0b3IgKTsKLQkJCQkJZWxzZQotCQkJCQkJc2VydmVyID0gc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBudWxsKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DUkVBVEVfU0VSVkVSLCBjZSk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCQotCQkvLyBzZXQgc2VydmVySW5zdGFuY2VJZAotCQlpZiAoc2VydmVyIT1udWxsKQotCQkJc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlci5nZXRJZCgpOwotCQllbHNlIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DUkVBVEVfU0VSVkVSICk7CQkJCi0JCX0KLQkJCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeWlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0JewotCQl0aGlzLnNlcnZlckZhY3RvcnlJZCA9IHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJSdW50aW1lSWQoU3RyaW5nIHNlcnZlclJ1bnRpbWVJZCkKLQl7Ci0JCXRoaXMuc2VydmVyUnVudGltZUlkID0gc2VydmVyUnVudGltZUlkOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKQotCXsKLQkJcmV0dXJuIHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9EaXNhYmxlQnVpbGRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Rpc2FibGVCdWlsZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEyY2NiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Rpc2FibGVCdWlsZENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLQotcHVibGljIGNsYXNzIERpc2FibGVCdWlsZENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXJfOwotICAvKioKLSAgICogQ1RPUjsKLSAgICovCi0gIHB1YmxpYyBEaXNhYmxlQnVpbGRDb21tYW5kKCkKLSAgewotCi0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuVEFTS19ERVNDX1dFQlNFUlZJQ0VfRElTQUJMRV9CVUlMRCk7Ci0KLSAgICBpZiAobWFuYWdlcl8hPW51bGwpIHsKLSAgICAgIG1hbmFnZXJfLmRpc2FibGVBdXRvQnVpbGQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIG1vZGVsCi0gICAqIAotICAgKiBAcGFyYW0gbW9kZWwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vZGVsKE1vZGVsIG1vZGVsKSB7Ci0gIH0gIAotICAKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gbWFuYWdlcl8gVGhlIG1hbmFnZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NYW5hZ2VyKFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXIpIHsKLSAgICB0aGlzLm1hbmFnZXJfID0gbWFuYWdlcjsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Rpc2FibGVWYWxpZGF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9EaXNhYmxlVmFsaWRhdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1ZGZjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Rpc2FibGVWYWxpZGF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIERpc2FibGVWYWxpZGF0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCi0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcl87Ci0gIHByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCi0gIC8qKgotICAgKiBDVE9SOwotICAgKi8KLSAgcHVibGljIERpc2FibGVWYWxpZGF0aW9uQ29tbWFuZCgpIHsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuVEFTS19ERVNDX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OKTsKLQotICAgIElQcm9qZWN0IHByb2plY3QgPSBzZXJ2aWNlUHJvamVjdF87Ci0gICAgaWYgKHByb2plY3QgIT0gbnVsbCkgbWFuYWdlcl8uZGlzYWJsZVZhbGlkYXRpb25Gb3JQcm9qZWN0KHByb2plY3QpOwotCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gbWFuYWdlcl8KLSAgICogICAgICAgICAgICBUaGUgbWFuYWdlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1hbmFnZXIoVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcikgewotICAgIHRoaXMubWFuYWdlcl8gPSBtYW5hZ2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCl7Ci0gICAgdGhpcy5zZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTI5MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLQotLy9jb3JlIHN0dWZmCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUmVmRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLm5hdHVyZS5FTUZOYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC51dGlsaXR5LkplbVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotKiBUaGlzIGNsYXNzIGlzIHRvIGJlIHVzZWQgdG8gQnVpbGQgdGhlIGRhdGEgbW9kZWwKLSogZmlyc3Qgd2UgZ2V0IHRoZSBqYXZhIGNsYXNzIGFuZCB0aGVuIGJ1aWxkIHRoZSBtb2RlbAotKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMID0gIkphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCI7IAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBERVNDUklQVElPTiA9ICJyZWZsZWN0aW9uIGZvciBhIGdpdmVuIGNsYXNzIjsgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE9LX01FU1NBR0UgPSAgIlRoZSBtb2RlbCBoYXMgYmVlbiBidWlsdCAiOyAKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpBVkFfRVhURU5TSU9OID0gIi5qYXZhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIENMQVNTX0VYVEVOU0lPTiA9ICIuY2xhc3MiOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBKYXZhSGVscGVycyBqYXZhQ2xhc3M7Ci0gIHByaXZhdGUgU3RyaW5nIHFuYW1lOwotICBwcml2YXRlIFN0cmluZyBwcm94eUJlYW47Ci0gCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIHdpdGggdGhlIGdpdmVuIGxhYmVsIGFuZCBkZXNjcmlwdGlvbgotICAqIAotICAqLwotICBwdWJsaWMgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kKCkKLSAgewotICB9Ci0gIAotICAvLyBzZXR0ZXJzIGZvciB0aGlzIGNvbW1hbmQKLSAgCi0gICAgCi0gIC8qKgotICAqIFRoZSBlbmQgcmVzdWx0IG9mIHRoaXMgd2hvbGUgcHJvY2VzcyBpcyB0byBnZXQgdGhlIEphdmEgQ2xhc3MKLSAgKi8KLSAgcHVibGljIEphdmFIZWxwZXJzIGdldEphdmFDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gamF2YUNsYXNzOwotICB9Ci0KLSAgCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzUU5hbWUoKQotICB7Ci0gICAgICBxbmFtZSA9IHByb3h5QmVhbjsKLQkgIGlmIChxbmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKEpBVkFfRVhURU5TSU9OKSkgewotCQkgIHFuYW1lID0gcW5hbWUuc3Vic3RyaW5nKDAsKHFuYW1lLmxlbmd0aCgpIC01KSk7Ci0JICB9Ci0JICBpZiAocW5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChDTEFTU19FWFRFTlNJT04pKSB7Ci0JCSAgcW5hbWUgPSBxbmFtZS5zdWJzdHJpbmcoMCwocW5hbWUubGVuZ3RoKCkgLTYpKTsKLQkgIH0KLSAgIH0KLSAgICAgIAotICAvKioKLSAgKiBHZXQgdGhlIGphdmEgbW9kZWwgZnJvbSB0aGUgcmVzb3VyY2UgdGhlbiAKLSAgKiBidWlsZCB0aGUgbW9kZWwgZnJvbSB0aGUgbW9mCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotIAkgIC8vanVzdCBtYWtlIHN1cmUgdGhlIHByb2plY3QgYW5kIHFuYW1lIGFyZSB0aGVyZQotICAJLy90aGV5IGFyZSBlc3NlbnRpYWwgZm9yIHRoaXMgb3BlcmF0aW9uCi0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlJUHJvamVjdCBjbGllbnRJUHJvamVjdCA9IChJUHJvamVjdClSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShjbGllbnRQcm9qZWN0KTsKLSAgCXByb2Nlc3NRTmFtZSgpOwotICAJaWYoY2xpZW50UHJvamVjdCA9PSBudWxsIHx8IHFuYW1lID09IG51bGwpCi0gIAkgIHJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX1VOQUJMRV9UT19GSU5EX1BST1hZICk7Ci0gIAkKLSAgICB0cnkgewotCQlFTUZOYXR1cmUgbmF0dXJlID0gSmVtUHJvamVjdFV0aWxpdGllcy5nZXRKRU1fRU1GX05hdHVyZShjbGllbnRJUHJvamVjdCwgdHJ1ZSk7Ci0JCWphdmFDbGFzcyA9IEphdmFSZWZGYWN0b3J5LmVJTlNUQU5DRS5yZWZsZWN0VHlwZShxbmFtZSwgbmF0dXJlLmdldFJlc291cmNlU2V0KCkpOwotCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCX0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gIAl0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotICB9Ci0gIAotIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRlY2UxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL01hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgY2xhc3MgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0JcHJpdmF0ZSBCb29sZWFuIGlzU3RhcnRTZXJ2aWNlRW5hYmxlZF87Ci0JcHJpdmF0ZSBCb29sZWFuIGlzVGVzdFNlcnZpY2VFbmFibGVkXzsKLQkKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlkXzsKLQlwcml2YXRlIElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLQkKLQlwcml2YXRlIElQcm9qZWN0IHNhbXBsZVByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJZF87Ci0JcHJpdmF0ZSBJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyXzsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF87Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENUT1I7Ci0JICovCi0JcHVibGljIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kKCApIHsKLQotCX0KLQkKLQkvKioKLQkgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0JICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fU1RBUlRfV0VCX1BST0pFQ1QpOwotCSAKLQkgICAgaWYgKGlzU3RhcnRTZXJ2aWNlRW5hYmxlZF8uYm9vbGVhblZhbHVlKCkgJiYgc2VydmljZUV4aXN0aW5nU2VydmVyXyE9bnVsbCl7Ci0JICAgIAkvL1N5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBzZXJ2aWNlIHNlcnZlciBzdGFydDogIitzZXJ2aWNlUHJvamVjdF8rIiAgIitzZXJ2aWNlU2VydmVyVHlwZUlkXyk7Ci0JICAgIAlTdGFydFByb2plY3RDb21tYW5kIHNwYyA9IG5ldyBTdGFydFByb2plY3RDb21tYW5kKCApOwotCSAgICAJc3BjLnNldFNlcnZpY2VQcm9qZWN0KHNlcnZpY2VQcm9qZWN0Xyk7Ci0JICAgIAlzcGMuc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlU2VydmVyVHlwZUlkXyk7Ci0JICAgIAlzcGMuc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8pOwotCSAgICAJc3BjLnNldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8pOwotCSAgICAJc3BjLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgCXNwYy5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmKGlzVGVzdFNlcnZpY2VFbmFibGVkXy5ib29sZWFuVmFsdWUoKSYmIHNhbXBsZUV4aXN0aW5nU2VydmVyXyE9bnVsbCAmJiBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfIT1udWxsICYmICFzYW1wbGVFeGlzdGluZ1NlcnZlcl8uZXF1YWxzKHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8pKXsKLQkgICAgCS8vU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGNsaWVudCBzZXJ2ZXIgc3RhcnQ6ICIrc2FtcGxlUHJvamVjdF8rIiAgIitzYW1wbGVFeGlzdGluZ1NlcnZlcl9fKTsKLQkgICAgCVN0YXJ0UHJvamVjdENvbW1hbmQgc3BjID0gbmV3IFN0YXJ0UHJvamVjdENvbW1hbmQoICk7Ci0JICAgIAlzcGMuc2V0U2FtcGxlUHJvamVjdChzYW1wbGVQcm9qZWN0Xyk7Ci0JICAgIAlzcGMuc2V0U2FtcGxlU2VydmVyVHlwZUlEKHNhbXBsZVNlcnZlclR5cGVJZF8pOwotCSAgICAJc3BjLnNldFNhbXBsZUV4aXN0aW5nU2VydmVyKHNhbXBsZUV4aXN0aW5nU2VydmVyXyk7Ci0JICAgIAlzcGMuc2V0Q3JlYXRpb25TY2VuYXJpbyhuZXcgQm9vbGVhbigiZmFsc2UiKSk7Ci0JICAgIAlzcGMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCSAgICAJc3BjLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsJICAgIAkKLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIGlzU3RhcnRTZXJ2aWNlRW5hYmxlZCBUaGUgaXNTdGFydFNlcnZpY2VFbmFibGVkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoQm9vbGVhbiBpc1N0YXJ0U2VydmljZUVuYWJsZWQpIHsKLQkJdGhpcy5pc1N0YXJ0U2VydmljZUVuYWJsZWRfID0gaXNTdGFydFNlcnZpY2VFbmFibGVkOwotCX0KLQkvKioKLQkgKiBAcGFyYW0gaXNUZXN0U2VydmljZUVuYWJsZWQgVGhlIGlzVGVzdFNlcnZpY2VFbmFibGVkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShCb29sZWFuIGlzVGVzdFNlcnZpY2VFbmFibGVkKSB7Ci0JCXRoaXMuaXNUZXN0U2VydmljZUVuYWJsZWRfID0gaXNUZXN0U2VydmljZUVuYWJsZWQ7Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgVGhlIHNlcnZpY2VFeGlzdGluZ1NlcnZlciB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyKSB7Ci0JCXRoaXMuc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc2VydmljZVNlcnZlclR5cGVJZCBUaGUgc2VydmljZVNlcnZlclR5cGVJZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJZChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJZCkgewotCQl0aGlzLnNlcnZpY2VTZXJ2ZXJUeXBlSWRfID0gc2VydmljZVNlcnZlclR5cGVJZDsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0IFRoZSBzZXJ2aWNlUHJvamVjdCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJdGhpcy5zZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNhbXBsZUV4aXN0aW5nU2VydmVyIFRoZSBzYW1wbGVFeGlzdGluZ1NlcnZlciB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcikgewotCQl0aGlzLnNhbXBsZUV4aXN0aW5nU2VydmVyXyA9IHNhbXBsZUV4aXN0aW5nU2VydmVyOwotCX0KLQkvKioKLQkgKiBAcGFyYW0gc2FtcGxlUHJvamVjdCBUaGUgc2FtcGxlUHJvamVjdCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChJUHJvamVjdCBzYW1wbGVQcm9qZWN0KSB7Ci0JCXRoaXMuc2FtcGxlUHJvamVjdF8gPSBzYW1wbGVQcm9qZWN0OwotCX0KLQkvKioKLQkgKiBAcGFyYW0gc2FtcGxlU2VydmVyVHlwZUlkIFRoZSBzYW1wbGVTZXJ2ZXJUeXBlSWQgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNhbXBsZVNlcnZlclR5cGVJZChTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlkKSB7Ci0JCXRoaXMuc2FtcGxlU2VydmVyVHlwZUlkXyA9IHNhbXBsZVNlcnZlclR5cGVJZDsKLQl9CQotCQotCS8qKgotCSAqIEBwYXJhbSBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkIFRoZSBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKGJvb2xlYW4gaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCkgewotCQl0aGlzLmlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfID0gaXNSZXN0YXJ0UHJvamVjdE5lZWRlZDsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9SZXN0b3JlQnVpbGRTdGF0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vUmVzdG9yZUJ1aWxkU3RhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMTUyMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9SZXN0b3JlQnVpbGRTdGF0ZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFJlc3RvcmVCdWlsZFN0YXRlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyXzsKLSAgCi0gIC8qKgotICAgKiBEZWZhdWx0IENUT1I7Ci0gICAqLwotICBwdWJsaWMgUmVzdG9yZUJ1aWxkU3RhdGVDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9CVUlMRCk7Ci0KLSAgICBtYW5hZ2VyXy5yZXN0b3JlQXV0b0J1aWxkKCk7Ci0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAgIAotICAvKioKLSAgICogQHBhcmFtIG1hbmFnZXJfIFRoZSBtYW5hZ2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWFuYWdlcihWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyKSB7Ci0gICAgdGhpcy5tYW5hZ2VyXyA9IG1hbmFnZXI7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9SZXN0b3JlVmFsaWRhdGlvblN0YXRlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9SZXN0b3JlVmFsaWRhdGlvblN0YXRlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2U5N2Y1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vUmVzdG9yZVZhbGlkYXRpb25TdGF0ZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFJlc3RvcmVWYWxpZGF0aW9uU3RhdGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcl87Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcnVuVmFsaWRhdGlvbl87Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgQ1RPUjsKLSAgICovCi0gIHB1YmxpYyBSZXN0b3JlVmFsaWRhdGlvblN0YXRlQ29tbWFuZCggYm9vbGVhbiBydW5WYWxpZGF0aW9uICkKLSAgewotICAgIHJ1blZhbGlkYXRpb25fID0gcnVuVmFsaWRhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlRBU0tfREVTQ19XRUJTRVJWSUNFX1JFU1RPUkVfVkFMSURBVElPTik7Ci0KLSAgICBtYW5hZ2VyXy5yZXN0b3JlVmFsaWRhdGlvbkZvclByb2plY3RzKCBydW5WYWxpZGF0aW9uXyApOyAgICAKLQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBAcGFyYW0gbWFuYWdlciBUaGUgdmFsaWRhdGlvbiBtYW5hZ2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NYW5hZ2VyKFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXIpIHsKLSAgICB0aGlzLm1hbmFnZXJfID0gbWFuYWdlcjsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1N0YXJ0UHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vU3RhcnRQcm9qZWN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzRhMGYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vU3RhcnRQcm9qZWN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgY2xhc3MgU3RhcnRQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCi1wcml2YXRlIEJvb2xlYW4gY3JlYXRpb25TY2VuYXJpb18gPSBCb29sZWFuLlRSVUU7Ci0KLXByaXZhdGUgYm9vbGVhbiBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXzsKLXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotcHJpdmF0ZSBJUHJvamVjdCBzYW1wbGVQcm9qZWN0XzsKLXByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEXzsKLXByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfOwotcHJpdmF0ZSBJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyXzsKLQotCi0vKioKLSAqIERlZmF1bHQgQ1RPUjsKLSAqLwotcHVibGljIFN0YXJ0UHJvamVjdENvbW1hbmQoICkgewotCi19Ci0KLS8qKgotICogRGVmYXVsdCBDVE9SOwotICovCi1wdWJsaWMgU3RhcnRQcm9qZWN0Q29tbWFuZChib29sZWFuIGNyZWF0aW9uU2NlbmFyaW8gKSB7Ci0JY3JlYXRpb25TY2VuYXJpb18gPSBuZXcgQm9vbGVhbihjcmVhdGlvblNjZW5hcmlvKTsKLX0KLQotLyoqCi0gKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gKi8KLXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOyAgICAKLSAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fU1RBUlRfV0VCX1BST0pFQ1QpOwotICAgIAotICAgIAotICAgIElQcm9qZWN0IHByb2plY3QgPSAoKGNyZWF0aW9uU2NlbmFyaW9fLmJvb2xlYW5WYWx1ZSgpKSA/IHNlcnZpY2VQcm9qZWN0XyA6IHNhbXBsZVByb2plY3RfKTsKLSAgICBTdHJpbmcgc2VydmVyVHlwZUlEID0gKChjcmVhdGlvblNjZW5hcmlvXy5ib29sZWFuVmFsdWUoKSkgPyBzZXJ2aWNlU2VydmVyVHlwZUlEXyA6IHNhbXBsZVNlcnZlclR5cGVJRF8pOwotICAgIElTZXJ2ZXIgc2VydmVyID0gKChjcmVhdGlvblNjZW5hcmlvXy5ib29sZWFuVmFsdWUoKSkgPyBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfIDogc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfKTsgICAKLSAgICBpZiAoc2VydmVyVHlwZUlEID09IG51bGwgJiYgc2VydmVyIT1udWxsKSB7Ci0gICAgCXNlcnZlclR5cGVJRCA9IHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLSAgICB9Ci0gICAgaWYgKHByb2plY3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9OT1RfRk9VTkQgKTsgIAotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9CQotICAgIElTZXJ2ZXIgaW5zdGFuY2UgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJGb3JNb2R1bGUoU2VydmVyVXRpbHMuZ2V0TW9kdWxlKHByb2plY3QpLCBzZXJ2ZXJUeXBlSUQsIHNlcnZlciwgdHJ1ZSwgbW9uaXRvciApOwotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9JTlNUQU5DRV9OT1RfRk9VTkQgKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICB0cnkKLSAgIAl7Ci0gICAJCUFic3RyYWN0U3RhcnRTZXJ2ZXIgc3RhcnRTZXJ2ZXJDb21tYW5kID0gbnVsbDsKLSAgIAkJV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkgcmVnID0gV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgCXN0YXJ0U2VydmVyQ29tbWFuZCA9IChBYnN0cmFjdFN0YXJ0U2VydmVyKXJlZy5nZXRTZXJ2ZXJTdGFydEJ5VHlwZUlkKGluc3RhbmNlLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLSAgICAJc3RhcnRTZXJ2ZXJDb21tYW5kLlN0YXJ0U2VydmVyKHByb2plY3QsIGluc3RhbmNlLCBtb25pdG9yLCBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXyk7Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0gICAJfQotICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSApCi0gIAl7Ci0gICAgCUlTdGF0dXMgZW1iZWRkZWRTdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLSAgICAJc3RhdHVzID0gZW1iZWRkZWRTdGF0dXM7Ci0gICAgCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgCQlyZXR1cm4gc3RhdHVzOwotICAJfQotICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgCXsKLSAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBlKTsKLSAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAJICAgcmV0dXJuIHN0YXR1czsKLSAgIAl9Ci0gICAKLX0KLQotcHVibGljIHZvaWQgc2V0Q3JlYXRpb25TY2VuYXJpbyhCb29sZWFuIGNyZWF0aW9uU2NlbmFyaW8pCi17Ci0JY3JlYXRpb25TY2VuYXJpb18gPSBjcmVhdGlvblNjZW5hcmlvOwotfQotCi1wdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkKLXsKLSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoSVByb2plY3Qgc2FtcGxlUHJvamVjdCkKLXsKLSAgc2FtcGxlUHJvamVjdF8gPSBzYW1wbGVQcm9qZWN0OwotfQotCi1wdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEKQotewotICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZpY2VTZXJ2ZXJUeXBlSUQ7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNhbXBsZVNlcnZlclR5cGVJRChTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEKQotewotICBzYW1wbGVTZXJ2ZXJUeXBlSURfID0gc2FtcGxlU2VydmVyVHlwZUlEOwotfQotCi1wdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpCi17Ci0gIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0gIGlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0gICAgc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLX0KLQotcHVibGljIHZvaWQgc2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcikKLXsKLSAgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfID0gc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0gIGlmIChzYW1wbGVFeGlzdGluZ1NlcnZlcl8gIT0gbnVsbCkKLSAgICBzZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLX0KLQotcHVibGljIHZvaWQgc2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZChib29sZWFuIHdlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKQotewotICBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXyA9IHdlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkOwotfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldE1hdGNoZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0TWF0Y2hlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmZkMmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0TWF0Y2hlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLXB1YmxpYyBjbGFzcyBGYWNldE1hdGNoZXIKLXsKLSAgcHJpdmF0ZSBib29sZWFuIG1hdGNoOwotICBwcml2YXRlIFNldCBmYWNldHNUZXN0ZWQ7Ci0gIHByaXZhdGUgU2V0IGZhY2V0c1RoYXRNYXRjaGVkOwotICBwcml2YXRlIFNldCBmYWNldHNUb0FkZDsKLSAgCi0gIHB1YmxpYyBTZXQgZ2V0RmFjZXRzVGhhdE1hdGNoZWQoKQotICB7Ci0gICAgcmV0dXJuIGZhY2V0c1RoYXRNYXRjaGVkOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldEZhY2V0c1RoYXRNYXRjaGVkKFNldCBmYWNldHNUaGF0TWF0Y2hlZCkKLSAgewotICAgIHRoaXMuZmFjZXRzVGhhdE1hdGNoZWQgPSBmYWNldHNUaGF0TWF0Y2hlZDsKLSAgfQotICBwdWJsaWMgU2V0IGdldEZhY2V0c1RvQWRkKCkKLSAgewotICAgIHJldHVybiBmYWNldHNUb0FkZDsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRGYWNldHNUb0FkZChTZXQgZmFjZXRzVG9BZGQpCi0gIHsKLSAgICB0aGlzLmZhY2V0c1RvQWRkID0gZmFjZXRzVG9BZGQ7Ci0gIH0KLSAgcHVibGljIGJvb2xlYW4gaXNNYXRjaCgpCi0gIHsKLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLSAgcHVibGljIHZvaWQgc2V0TWF0Y2goYm9vbGVhbiBtYXRjaCkKLSAgewotICAgIHRoaXMubWF0Y2ggPSBtYXRjaDsKLSAgfQotICBwdWJsaWMgU2V0IGdldEZhY2V0c1Rlc3RlZCgpCi0gIHsKLSAgICByZXR1cm4gZmFjZXRzVGVzdGVkOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldEZhY2V0c1Rlc3RlZChTZXQgZmFjZXRzVGVzdGVkKQotICB7Ci0gICAgdGhpcy5mYWNldHNUZXN0ZWQgPSBmYWNldHNUZXN0ZWQ7Ci0gIH0KLSAgCi0gIAotCi0gIAotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2NTM1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyIChjcmVhdGlvbikKLSAqIDIwMDYwNDI3ICAgMTI2NzgwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNzA0MDIgMTUxOTQzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZSBjYWNoZXMgdGhlIHNldHMgb2YgZmFjZXQgdmVyc2lvbiBjb21iaW5hdGlvbnMgZm9yIHRlbXBsYXRlcy4KLSAqLwotcHVibGljIGNsYXNzIEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZQotewotICAvLyBzaW5nbGUgaW5zdGFuY2UgcGVyIHdvcmtiZW5jaAotICBwcml2YXRlIHN0YXRpYyBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUgaW5zdGFuY2VfOwotICAKLSAgLy9mYWNldFNldHNCeVRlbXBsYXRlSWRfOiAKLSAgLy9rZXk6IE9iamVjdCBvZiB0eXBlIFN0cmluZy4gU3RyaW5nIGlkIG9mIGFuIElGYWNldGVkUHJvamVjdFRlbXBsYXRlLgotICAvL3ZhbHVlOiBPYmplY3Qgb2YgU2V0W10uIEFuIGFycmF5IG9mIFNldHMgd2hlcmUgZWFjaCBzZXQgY29udGFpbnMgZWxlbWVudHMgb2YgdHlwZSBJUHJvamVjdEZhY2V0VmVyc2lvbi4KLSAgcHJpdmF0ZSBIYXNodGFibGUgZmFjZXRTZXRzQnlUZW1wbGF0ZUlkXzsKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSBzaW5nbGV0b24gRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZSgpOwotICAgICAgaW5zdGFuY2VfLmxvYWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgZmFjZXRTZXRzQnlUZW1wbGF0ZUlkXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgdGhlIHZhbGlkIGZhY2V0IHZlcnNpb24gY29tYmluYXRpb25zIHRoYXQgY2FuIGJlIGRlcml2ZWQgZnJvbSB0aGUgZml4ZWQgZmFjZXRzCi0gICAqIG9mIHRoZSBnaXZlbiB0ZW1wbGF0ZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSB0ZW1wbGF0ZSBoYXMgdHdvIGZpeGVkIGZhY2V0cywgQSBhbmQgQiwKLSAgICogYW5kIEEgaGFzIHZlcnNpb25zIDEuMCBhbmQgMi4wLCBCIGhhcyB2ZXJzaW9ucyAxLjEsIDIuMSwKLSAgICogdGhlIGZvbGxvd2luZyBhcnJheSBvZiBTZXRzIHdpbGwgYmUgcmV0dXJuZWQgKGFzc3VtaW5nIGZvciB0aGUgc2FrZSBvZiB0aGUgZXhhbXBsZQotICAgKiB0aGF0IGFsbCB0aGUgY29tYmluYXRpb25zIGFyZSB2YWxpZCk6PGJyLz4KLSAgICoge1NldDEsIFNldDIsIFNldDMsIFNldDR9LCB3aGVyZTxici8+Ci0gICAqIFNldDEgPSBbQTEuMCwgQjEuMV08YnIvPgotICAgKiBTZXQyID0gW0EyLjAsIEIxLjFdPGJyLz4KLSAgICogU2V0MyA9IFtBMS4wLCBCMi4xXTxici8+Ci0gICAqIFNldDQgPSBbQTIuMCwgQjIuMV08YnIvPgotICAgKiA8YnIvPgotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCBpZCBvZiBhbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gU2V0W10gQW4gYXJyYXkgb2YgU2V0cyB3aGVyZSBlYWNoIHNldCBjb250YWlucyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0uCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIFNldFtdIGdldEZhY2V0VmVyc2lvbkNvbWJpbmF0aW9uc0Zyb21UZW1wbGF0ZShTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotCS8vUmV0dXJuIHRoZSBjYWNoZWQgY29tYmluYXRpb25zIGlmIHByZXNlbnQuCi0gICAgU2V0W10gY2FjaGVkQ29tYmluYXRpb25zID0gKFNldFtdKWZhY2V0U2V0c0J5VGVtcGxhdGVJZF8uZ2V0KHRlbXBsYXRlSWQpOwotICAgIGlmIChjYWNoZWRDb21iaW5hdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gY2FjaGVkQ29tYmluYXRpb25zOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCi0gICAgICAvL0NvbWJpbmF0aW9ucyBoYXZlIG5vdCB5ZXQgYmVlbiBjYWNoZWQgZm9yIHRoZSBnaXZlbiB0ZW1wbGF0ZS4gCi0gICAgICAvL0RldGVybWluZSB0aGUgY29tYmluYXRpb25zIGFuZCBjYWNoZSB0aGVtLgotICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICAgIFNldCBmaXhlZEZhY2V0cyA9IHRlbXBsYXRlLmdldEZpeGVkUHJvamVjdEZhY2V0cygpOwotICAgICAgCi0gICAgICAvL0NyZWF0ZSBhbiBhcnJheSBvZiBhcnJheXMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgd2lsbCBjb250YWluIHRoZSBhcnJheQotICAgICAgLy9vZiBJUHJvamVjdEZhY2V0VmVyc2lvbnMgZm9yIGVhY2ggSVByb2plY3RGYWNldCBpbiB0aGUgc2V0IG9mIGZpeGVkIGZhY2V0cy4KLSAgICAgIEl0ZXJhdG9yIGl0ciA9IGZpeGVkRmFjZXRzLml0ZXJhdG9yKCk7Ci0gICAgICBBcnJheUxpc3QgcHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cyA9IG5ldyBBcnJheUxpc3QoKTsgICAgICAKLQotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSAoSVByb2plY3RGYWNldCkgaXRyLm5leHQoKTsKLSAgICAgICAgTGlzdCB2ZXJzaW9ucyA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBmYWNldCB2ZXJzaW9ucyBpbiBhc2NlbmRpbmcgb3JkZXIuCi0gICAgICAgICAgdmVyc2lvbnMgPSBmYWNldC5nZXRTb3J0ZWRWZXJzaW9ucyh0cnVlKTsKLSAgICAgICAgfSBjYXRjaCAoVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTZXQgdmVyc2lvblNldCA9IGZhY2V0LmdldFZlcnNpb25zKCk7Ci0gICAgICAgICAgICBJdGVyYXRvciB2ZXJzaW9uU2V0SXRyID0gdmVyc2lvblNldC5pdGVyYXRvcigpOwotICAgICAgICAgICAgdmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICB3aGlsZSAodmVyc2lvblNldEl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBTZXQgdmVyc2lvblNldCA9IGZhY2V0LmdldFZlcnNpb25zKCk7Ci0gICAgICAgICAgSXRlcmF0b3IgdmVyc2lvblNldEl0ciA9IHZlcnNpb25TZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgICB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICB3aGlsZSAodmVyc2lvblNldEl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgICB2ZXJzaW9ucy5hZGQoaXRyLm5leHQoKSk7Ci0gICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpZiAodmVyc2lvbnMuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIC8vQ3JlYXRlIGFuIGFycmF5IG9mIElQcm9qZWN0RmFjZXRWZXJzaW9ucyBmcm9tIHZlcnNpb25zLgotICAgICAgICAgIEl0ZXJhdG9yIHZlcnNpb25JdHIgPSB2ZXJzaW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgIEFycmF5TGlzdCBhcnJheU9mVmVyc2lvbnNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgIHdoaWxlICh2ZXJzaW9uSXRyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pdmVyc2lvbkl0ci5uZXh0KCk7Ci0gICAgICAgICAgICBhcnJheU9mVmVyc2lvbnNMaXN0LmFkZChwZnYpOwotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy9BZGQgdGhlIGFycmF5IG9mIHZlcnNpb25zIHRvIHRoZSBsaXN0IG9mIGFycmF5cy4KLSAgICAgICAgICBwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLmFkZCgoSVByb2plY3RGYWNldFZlcnNpb25bXSlhcnJheU9mVmVyc2lvbnNMaXN0LnRvQXJyYXkobmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uWzBdKSk7Ci0gICAgICAgICAgCi0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgU2V0W10gYWxsVmFsaWRDb21iaW5hdGlvbnNBcnJheSA9IG5ldyBIYXNoU2V0WzBdOwotICAgICAgaWYgKHByb2plY3RGYWNldFZlcnNpb25BcnJheXMuc2l6ZSgpPjApIHsKLSAgICAJICBJUHJvamVjdEZhY2V0VmVyc2lvbltdW10gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMgPSAoSVByb2plY3RGYWNldFZlcnNpb25bXVtdKXByb2plY3RGYWNldFZlcnNpb25BcnJheXMudG9BcnJheShuZXcgSVByb2plY3RGYWNldFZlcnNpb25bMF1bMF0pOwotICAgIAkgIGFsbFZhbGlkQ29tYmluYXRpb25zQXJyYXkgPSBGYWNldFV0aWxzLmdldEZhY2V0Q29tYmluYXRpb25zKGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLCB0cnVlKTsKLSAgICAJICBmYWNldFNldHNCeVRlbXBsYXRlSWRfLnB1dCh0ZW1wbGF0ZUlkLCBhbGxWYWxpZENvbWJpbmF0aW9uc0FycmF5KTsKLSAgICAgIH0KLSAgICAgCi0gICAgICByZXR1cm4gYWxsVmFsaWRDb21iaW5hdGlvbnNBcnJheTsKLSAgICB9ICAgIAotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0VXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmNGQwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJQk0gQ29ycG9yYXRpb24uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAyMDA3MDUyMyAgIDE1ODIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEyMTkgICAyMTMzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI1ICAgMjIyNDczIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgRUFSIHZlcnNpb24gYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgbW9kdWxlcyB0byBiZSBhZGRlZAotICogMjAwODA0MjkgICAyMTM3MzAgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqIDIwMDgwNTA3ICAgMjI5NTMyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA5MDMwMyAgIDI0MjYzNSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFJlbW92ZSB1bm5lY2Vzc2FyeSBVSSBkZXBlbmRlbmNpZXMgZnJvbSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24KLSAqIDIwMTAwMjAzICAgICAgICAgIGtjaG9uZ0BjYS5pYm0uY29tIC0gS2VpdGggQ2hvbmcsIEphdmEgRmFjZXQgY2hhbmdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5KYXZhRmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuY29tbW9uLkoyRUVWZXJzaW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5lamIucHJvamVjdC5vcGVyYXRpb25zLkVqYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLmVqYi5wcm9qZWN0Lm9wZXJhdGlvbnMuSUVqYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5KYXZhRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LklVdGlsaXR5RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LlV0aWxpdHlGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIucHJvamVjdC5mYWNldC5JV2ViRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIucHJvamVjdC5mYWNldC5XZWJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuSU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkRhdGFNb2RlbEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5JRGF0YU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlZlcnNpb25Gb3JtYXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0LkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3QuQWN0aW9uLlR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLlJ1bnRpbWVNYW5hZ2VyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLS8qKgotICogRmFjZXRVdGlscyBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgcmVsYXRlZCB0byBmYWNldHMgYW5kIHRlbXBsYXRlcy4KLSAqIDxici8+PGJyLz4KLSAqIFRlcm1pbm9sb2d5IHVzZWQgaW4gdGhlIEphdmFkb2MgaW4gdGhpcyBjbGFzcwotICogPHVsPgotICogPGxpPjxiPmZhY2V0PC9iPjogQW4ge0BsaW5rIElQcm9qZWN0RmFjZXR9PC9saT4KLSAqIDxsaT48Yj5mYWNldCB2ZXJzaW9uPC9iPjogQW4ge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufSA8L2xpPgotICogPGxpPjxiPmZhY2V0IHJ1bnRpbWU8L2I+OiBBbiB7QGxpbmsgSVJ1bnRpbWV9PC9saT4KLSAqIDxsaT48Yj5mYWNldGVkIHByb2plY3Q8L2I+OiBBbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0fS4gQSBmYWNldGVkIHByb2plY3QgbWF5IGJlIG9idGFpbmVkCi0gKiBmcm9tIGFuIElQcm9qZWN0IChAc2VlIFByb2plY3RGYWNldHNNYW5hZ2VyI2NyZWF0ZSk8L2xpPgotICogPGxpPjxiPnRlbXBsYXRlPC9iPjogQW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfS4gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBhIHByb2plY3QgdHlwZS48L2xpPgotICogPGxpPjxiPnJlcXVpcmVkIGZhY2V0IHZlcnNpb248L2I+OiBBIHtAbGluayBSZXF1aXJlZEZhY2V0VmVyc2lvbn0uIFVzZWQgYnkgc2VydmljZVJ1bnRpbWVzIGFuZCBjbGllbnRSdW50aW1lcwotICogdG8gaWRlbnRpZnkgd2hhdCB0aGV5IHJlcXVpcmUgaW4gdGVybXMgb2YgZmFjZXQgdmVyc2lvbnMuPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGYWNldFV0aWxzCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgSUZhY2V0T3BlcmF0aW9uRGVsZWdhdGUgZGVsZWdhdGU7IC8vaWYgYSBkZWxlZ2F0ZSBpcyBwbHVnZ2VkIGluLCBkZWxlZ2F0ZSBzb21lIG9wZXJhdGlvbnMgdG8gaXQKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmYWlsZWRUb0xvYWREZWxlZ2F0ZSA9IGZhbHNlOwotICAvKioKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiB2YWxpZCBwcm9qZWN0cy4gVmFsaWQgcHJvamVjdHMgaW5jbHVkZSBwcm9qZWN0cyB3aXRoIHRoZSBmYWNldHMgbmF0dXJlIG9yCi0gICAqIHByb2plY3RzIHdpdGggdGhlIEphdmEgbmF0dXJlLgotICAgKiBAcmV0dXJuIElQcm9qZWN0W10gYW4gYXJyYXkgb2YgdmFsaWQgcHJvamVjdHMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBnZXRBbGxQcm9qZWN0cygpCi0gIHsKLSAgICAvL1JldHVybiBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB0aGF0IGhhdmUgdGhlIHByb2plY3QgZmFjZXQgbmF0dXJlIG9yIHRoYXQgZG8gbm90IGhhdmUgdGhlIHByb2plY3QKLSAgICAvL2ZhY2V0IG5hdHVyZSBidXQgaGF2ZSB0aGUgSmF2YSBuYXR1cmUuCi0gICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKTsKLSAgICBBcnJheUxpc3QgdmFsaWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRmFjZXRlZFByb2plY3QgZmFjUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0c1tpXSk7Ci0gICAgICAgIGlmIChmYWNQcm9qZWN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvL0FkZCBpdCB0byB0aGUgbGlzdAotICAgICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdHNbaV0pKQotICAgICAgICAJewotICAgICAgICAgICAgICB2YWxpZFByb2plY3RzLmFkZChwcm9qZWN0c1tpXSk7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgeyAgICAgICAgCi0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiAoSVByb2plY3RbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IElQcm9qZWN0W117fSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWNldCB2ZXJzaW9ucyBvbiB0aGUgZ2l2ZW4gcHJvamVjdC4KLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogQHJldHVybnMgU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259LiAKLSAgICogVGhlc2UgYXJlIHRoZSBmYWNldCB2ZXJzaW9ucyBjdXJyZW50bHkgaW5zdGFsbGVkIG9uIHRoaXMgcHJvamVjdC4gSWYgdGhlIHByb2plY3QKLSAgICogaXMgYSBKYXZhIHByb2plY3QsIGZhY2V0cyBhcmUgaW5mZXJyZWQgZnJvbSB0aGUgSmF2YSBwcm9qZWN0LiBSZXR1cm5zIG51bGwgCi0gICAqIDx1bD4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG5vdCBhIGZhY2V0ZWQgcHJvamVjdCBvciBhIEphdmEgcHJvamVjdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBpcyBudWxsPC9saT4KLSAgICogPC91bD4gIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0RmFjZXRzRm9yUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IG51bGw7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKHByb2plY3QhPW51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICBpZiAoZnByb2plY3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZhY2V0VmVyc2lvbnMgPSBmcHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9JZiB0aGlzIGlzIG5vdCBhIGZhY2V0ZWQgcHJvamVjdCwgaXQgbWF5IHN0aWxsIGJlIG9rYXkgaWYgaXQgaXMgYSBKYXZhIHByb2plY3QKLSAgICAgICAgICAvL2FuZCB0aGUgY2xpZW50IHJ1bnRpbWUgc3VwcG9ydHMgYSBKYXZhIHByb2plY3QuCi0gICAgICAgICAgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gbnVsbDsgICAgICAgICAgICAgIAotICAgICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgICAgewotICAgICAgICAJamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgICBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JKYXZhUHJvamVjdChqYXZhUHJvamVjdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgIAkgIC8vTGVhdmluZyB0aGUgY2F0Y2ggYmxvY2sgZW1wdHkuIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUKLSAgICAJICAvL3dlcmUgYW55IGJsb3ctdXBzIGluIHRoZSBmYWNldCBBUEkgYmVpbmcgY2FsbGVkLgotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFjZXRWZXJzaW9uczsKLSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWNldCBydW50aW1lIHRoZSBnaXZlbiBwcm9qZWN0IGlzIGJvdW5kIHRvLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhbiBleGlzdGluZyBwcm9qZWN0Ci0gICAqIEByZXR1cm4ge0BsaW5rIElSdW50aW1lfSB0aGUgcHJvamVjdCBpcyBib3VuZCB0by4gUmV0dXJucyBudWxsCi0gICAqIDx1bD4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG5vdCBib3VuZCB0byBhIGZhY2V0IHJ1bnRpbWU8L2xpPiAKLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0PC9saT4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG51bGw8L2xpPgotICAgKiA8L3VsPgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJUnVudGltZSBnZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmIChwcm9qZWN0IT1udWxsICYmIHByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdCBmcHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgaWYgKGZwcm9qZWN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gZnByb2plY3QuZ2V0UHJpbWFyeVJ1bnRpbWUoKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAJICAvL0xlYXZpbmcgdGhlIGNhdGNoIGJsb2NrIGVtcHR5LiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlCi0gICAgCSAgLy93ZXJlIGFueSBibG93LXVwcyBpbiB0aGUgZmFjZXQgQVBJIGJlaW5nIGNhbGxlZC4KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgY29tYmluYXRpb25zIG9mIGZhY2V0IHZlcnNpb25zIGRlcml2ZWQgZnJvbSB0aGUgZmFjZXQgdmVyc2lvbnMKLSAgICogaW4gdGhlIHByb3ZpZGVkIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLiBGb3IgZXhhbXBsZSwgaWYgCi0gICAqIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzIGlzIGEgdHdvIGRpbWVuc3Rpb25hbCBhcnJheSBvZiBmYWNldCB2ZXJzaW9ucyB0aGF0IGhhcwotICAgKiBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6PGJyLz4KLSAgICoge3tGYWNldEFfdmVyc2lvbjEsIEZhY2V0QV92ZXJzaW9uMn0sPGJyLz4KLSAgICogIHtGYWNldEJfdmVyc2lvbjF9LDxici8+Ci0gICAqICB7RmFjZXRDX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjJ9fTxici8+Ci0gICAqIHRoZSBmb2xsb3dpbmcgYXJyYXkgb2YgU2V0cyB3aWxsIGJlIHJldHVybmVkOjxici8+Ci0gICAqIHtTZXQxLCBTZXQyLCBTZXQzLCBTZXQ0fSwgd2hlcmU8YnIvPgotICAgKiBTZXQxID0gW0ZhY2V0QV92ZXJzaW9uMSwgRmFjZXRCX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjFdPGJyLz4KLSAgICogU2V0MiA9IFtGYWNldEFfdmVyc2lvbjIsIEZhY2V0Ql92ZXJzaW9uMSwgRmFjZXRDX3ZlcnNpb24xXTxici8+Ci0gICAqIFNldDMgPSBbRmFjZXRBX3ZlcnNpb24xLCBGYWNldEJfdmVyc2lvbjEsIEZhY2V0Q192ZXJzaW9uMl08YnIvPgotICAgKiBTZXQ0ID0gW0ZhY2V0QV92ZXJzaW9uMiwgRmFjZXRCX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjJdPGJyLz4KLSAgICogPGJyLz4KLSAgICogQHBhcmFtIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgCi0gICAqIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcGFyYW0gcmV0dXJuVmFsaWRPbmx5IGZhbHNlIGlmIGFsbCBjb21iaW5hdGlvbnMgb2YgZmFjZXQgdmVyc2lvbnMgYXJlIHRvIGJlIHJldHVybmVkLiAKLSAgICogdHJ1ZSBpZiBvbmx5IHZhbGlkIGNvbWJpbmF0aW9ucyBvZiBmYWNldCB2ZXJzaW9ucyBhcmUgdG8gYmUgcmV0dXJuZWQuICAKLSAgICogQHJldHVybiBTZXRbXSBhbiBhcnJheSBvZiBTZXRzLCB3aGVyZSBlYWNoIFNldCBjb250YWlucyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0uIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXRbXSBnZXRGYWNldENvbWJpbmF0aW9ucyhJUHJvamVjdEZhY2V0VmVyc2lvbltdW10gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMsIGJvb2xlYW4gcmV0dXJuVmFsaWRPbmx5KSAgCi0gIHsKLSAgICBBcnJheUxpc3QgYWxsQ29tYmluYXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgIC8vbWF4Q291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZiB2ZXJzaW9ucyBpbiBlYWNoIGFycmF5IG9mIElQcm9qZWN0RmFjZXRWZXJzaW9ucy4KLSAgICAvL2luaXRpYWxpemUgY291bnRlciwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLgotICAgIGludCBuID0gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMubGVuZ3RoOwotICAgIGludFtdIG1heENvdW50ID0gbmV3IGludFtuXTsKLSAgICBpbnRbXSBjb3VudGVyID0gbmV3IGludFtuXTsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKQotICAgIHsKLSAgICAgIG1heENvdW50W2ldID0gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXNbaV0ubGVuZ3RoIC0gMTsKLSAgICAgIGNvdW50ZXJbaV0gPSAwOwotICAgIH0gICAgICAKLSAgICAKLSAgICAvL05hdmlnYXRlIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzIHRvIGNyZWF0ZSBhbGwgcG9zc2libGUgY29tYmluYXRpb25zLgotICAgIGJvb2xlYW4gZG9uZSA9IGZhbHNlOwotICAgIHdoaWxlICghZG9uZSkKLSAgICB7Ci0gICAgICAvL0NyZWF0ZSBhIGNvbWJpbmF0aW9uIG9mIHNpemUgbiB1c2luZyBjdXJyZW50IHZhbHVlcyBpbiBjb3VudGVyLgotICAgICAgLy9BZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIGNvbWJpbmF0aW9ucywgY2hlY2tpbmcgZmlyc3QgZm9yIHZhbGlkaXR5IGlmIHJldHVyblZhbGlkT25seSBpcyB0cnVlLgotICAgICAgU2V0IGNvbWJpbmF0aW9uID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgIGZvciAoaW50IGo9MDsgajxuOyBqKyspCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzW2pdW2NvdW50ZXJbal1dOwotICAgICAgICBjb21iaW5hdGlvbi5hZGQocGZ2KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9DaGVjayBpZiB2YWxpZC4KLSAgICAgIGlmIChyZXR1cm5WYWxpZE9ubHkpCi0gICAgICB7Ci0gICAgICAgIFNldCBhY3Rpb25zID0gZ2V0SW5zdGFsbEFjdGlvbnMoY29tYmluYXRpb24pOwotCQl0cnkgewotCQkJaWYoIFByb2plY3RGYWNldHNNYW5hZ2VyLmNoZWNrKCBuZXcgSGFzaFNldCgpLCBhY3Rpb25zICkuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LICkgICAgICAgIAotCSAgICAgICAgewotCSAgICAgICAgICBhbGxDb21iaW5hdGlvbnMuYWRkKChjb21iaW5hdGlvbikpOwotCSAgICAgICAgfQotCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgewotCQkJLy8gRG8gbm90aGluZyBpZiBQcm9qZWN0RmFjZXRzTWFuYWdlci5jaGVjaygpIHRocm93cyBleGNlcHRpb24uCi0JCQkvLyBUT0RPIFRoaXMgdHJ5L2NhdGNoIHdpbGwgYmUgdW5uZWNjZXNhcnkgb25jZSBXVFAgYnVnIDEzNzU1MSBpcyBmaXhlZCBzbyB0aGF0IGFuIE9LIFN0YXR1cyAKLQkJCS8vIAkJd291bGQgbm90IGJlIHJldHVybmVkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KLQkJfSAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGFsbENvbWJpbmF0aW9ucy5hZGQoKGNvbWJpbmF0aW9uKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vVXBkYXRlIHRoZSBjb3VudGVycy4KLSAgICAgIGZvciAoaW50IHA9MDsgcDxuOyBwKyspCi0gICAgICB7Ci0gICAgICAgIGlmICggKGNvdW50ZXJbcF0gKyAxKSA8PSBtYXhDb3VudFtwXSkKLSAgICAgICAgewotICAgICAgICAgIChjb3VudGVyW3BdKSsrOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGNvdW50ZXJbcF0gPSAwOwotICAgICAgICAgIGlmIChwID09IG4tMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgU2V0W10gYWxsQ29tYmluYXRpb25zQXJyYXkgPSAoU2V0W10pYWxsQ29tYmluYXRpb25zLnRvQXJyYXkobmV3IFNldFswXSk7ICAgIAotICAgIHJldHVybiBhbGxDb21iaW5hdGlvbnNBcnJheTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHZlcnNpb25zIGdpdmVuIGEgdGVtcGxhdGUuIFRoZSBoaWdoZXN0IGZhY2V0IHZlcnNpb24gb2YgZXZlcnkgZml4ZWQgCi0gICAqIGZhY2V0IGluIHRoZSB0ZW1wbGF0ZSBpcyByZXR1cm5lZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBqc3QuamF2YSBmYWNldCwgd2hlcmUgdGhlIDEuNCAKLSAgICogZmFjZXQgdmVyc2lvbiBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0SW5pdGlhbEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUoU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIFNldCBmaXhlZEZhY2V0cyA9IHRlbXBsYXRlLmdldEZpeGVkUHJvamVjdEZhY2V0cygpOyAKLSAgICBIYXNoU2V0IGluaXRpYWwgPSBuZXcgSGFzaFNldCgpOyAKLSAgICBmb3IgKEl0ZXJhdG9yIGl0cjIgPSBmaXhlZEZhY2V0cy5pdGVyYXRvcigpOyBpdHIyLmhhc05leHQoKTsgKSAKLSAgICB7IAotICAgICAgSVByb2plY3RGYWNldCBmYWNldCA9IChJUHJvamVjdEZhY2V0KSBpdHIyLm5leHQoKTsgCi0gICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBoaWdoZXN0RmFjZXRWZXJzaW9uID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgCSAgaWYgKGlzSmF2YUZhY2V0KGZhY2V0KSkgLy9zcGVjaWFsIGNhc2UgdGhlIGphdmEgZmFjZXQgYmVjYXVzZSAxLjQgaXMgYSBiZXR0ZXIgZGVmYXVsdCB0aGFuIDUuMCBmb3Igbm93LgotICAgIAkgIHsKLSAgICAJCSAgaGlnaGVzdEZhY2V0VmVyc2lvbiA9IGZhY2V0LmdldFZlcnNpb24oIjEuNCIpOwotICAgIAkgIH0gZWxzZSB7Ci0gICAgCQkgIGhpZ2hlc3RGYWNldFZlcnNpb24gPSBmYWNldC5nZXRMYXRlc3RWZXJzaW9uKCk7Ci0gICAgCSAgfQotICAgICAgfSBjYXRjaCAoVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgIH0KLSAgICAgIGluaXRpYWwuYWRkKGhpZ2hlc3RGYWNldFZlcnNpb24pOyAKLSAgICB9ICAgICAgICAgICAgIAotICAgIAotICAgIHJldHVybiBpbml0aWFsOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHNldCBvZiBmYWNldCB2ZXJzaW9ucyBnaXZlbiBhIHRlbXBsYXRlLiBUaGUgZGVmYXVsdCBmYWNldCB2ZXJzaW9uIG9mIGV2ZXJ5IGZpeGVkIAotICAgKiBmYWNldCBpbiB0aGUgdGVtcGxhdGUgaXMgcmV0dXJuZWQuICBJZiB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgdmVyc2lvbnMsIGFuIGVtcHR5IHNldCB3aWxsIGJlIHJldHVybmVkLgotICAgKiAKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXREZWZhdWx0RmFjZXRWZXJzaW9uc0Zyb21UZW1wbGF0ZShTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotCSAgSGFzaFNldCBkZWZhdWx0U2V0ID0gbmV3IEhhc2hTZXQoKTsgCi0JICB0cnkgewotCQkgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0JCSAgU2V0IGZpeGVkRmFjZXRzID0gdGVtcGxhdGUuZ2V0Rml4ZWRQcm9qZWN0RmFjZXRzKCk7IAotCQkgIGZvciAoSXRlcmF0b3IgaXRyMiA9IGZpeGVkRmFjZXRzLml0ZXJhdG9yKCk7IGl0cjIuaGFzTmV4dCgpOyApIAotCQkgIHsgCi0JCQkgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSAoSVByb2plY3RGYWNldCkgaXRyMi5uZXh0KCk7IAotCQkJICBJUHJvamVjdEZhY2V0VmVyc2lvbiBkZWZhdWx0RmFjZXRWZXJzaW9uID0gbnVsbDsKLQkJCSAgZGVmYXVsdEZhY2V0VmVyc2lvbiA9IGZhY2V0LmdldERlZmF1bHRWZXJzaW9uKCk7Ci0JCQkgIGRlZmF1bHRTZXQuYWRkKGRlZmF1bHRGYWNldFZlcnNpb24pOyAKLQkJICB9ICAgICAgICAgICAgIAotCQkgIHJldHVybiBkZWZhdWx0U2V0OwotCSAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJICByZXR1cm4gZGVmYXVsdFNldDsKLQkgIH0gY2F0Y2ggKFZlcnNpb25Gb3JtYXRFeGNlcHRpb24gZSkgewotCQkgIHJldHVybiBkZWZhdWx0U2V0OwotCSAgfSAKLQkgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgbGFibGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIHRlbXBsYXRlSWRzLgotICAgKiBAcGFyYW0gdGVtcGxhdGVJZHMgYXJyYXkgb2YgdmFsaWQgdGVtcGxhdGUgaWRzLiBFYWNoIGlkIG11c3QgY29ycmVzcG9uZCB0byBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2YgdGVtcGxhdGUgbGFiZWxzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRUZW1wbGF0ZUxhYmVscyhTdHJpbmdbXSB0ZW1wbGF0ZUlkcykKLSAgewotICAgIFN0cmluZ1tdIGxhYmVscyA9IG5ldyBTdHJpbmdbdGVtcGxhdGVJZHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpPTA7IGk8dGVtcGxhdGVJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkc1tpXSk7ICAgICAgCi0gICAgICBsYWJlbHNbaV0gPSB0ZW1wbGF0ZS5nZXRMYWJlbCgpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWxzOwotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSB0ZW1wbGF0ZSBnaXZlbiBpdHMgbGFiZWwuIAotICAgKiAKLSAgICogQHBhcmFtIHRlbXBsYXRlTGFiZWwgbGFiZWwgb2YgYSB0ZW1wbGF0ZQotICAgKiBAcmV0dXJuIHRlbXBsYXRlIGlkIG9yIGVtcHR5IFN0cmluZyBpZiBubyB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHdpdGggdGhlCi0gICAqIGdpdmVuIHRlbXBsYXRlTGFiZWwgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZW1wbGF0ZUlkQnlMYWJlbChTdHJpbmcgdGVtcGxhdGVMYWJlbCkKLSAgewotICAgIGZvciggSXRlcmF0b3IgaXRyID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGVzKCkuaXRlcmF0b3IoKTsgaXRyLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgICAgZmluYWwgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpIGl0ci5uZXh0KCk7Ci0gICAgICAgIGlmICh0ZW1wbGF0ZS5nZXRMYWJlbCgpLmVxdWFscyh0ZW1wbGF0ZUxhYmVsKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5nZXRJZCgpOwotCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGFiZWwgb2YgYSB0ZW1wbGF0ZSBnaXZlbiBpdHMgaWQgCi0gICAqIAotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCBpZCBvZiBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0KLSAgICogQHJldHVybiB0ZW1wbGF0ZSBsYWJlbAotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZW1wbGF0ZUxhYmVsQnlJZChTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgcmV0dXJuIHRlbXBsYXRlLmdldExhYmVsKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGluc3RhbGwgYWN0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIGZhY2V0IHZlcnNpb24KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBBY3Rpb259IHdpdGggdGhlIHR5cGUgYXR0cmlidXRlIHNldCB0byBUeXBlLklOU1RBTEwKLSAgICogVGhlIHNldCBjb250YWlucyBvbmUgQWN0aW9uIGZvciBlYWNoIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0gaW4gcHJvamVjdEZhY2V0VmVyc2lvbnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXRJbnN0YWxsQWN0aW9ucyhTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBIYXNoU2V0IGFjdGlvbnMgPSBuZXcgSGFzaFNldCgpOwotICAgIAotICAgIEl0ZXJhdG9yIGZhY2V0cyA9IHByb2plY3RGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgCi0gICAgd2hpbGUoZmFjZXRzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWZhY2V0cy5uZXh0KCk7Ci0gICAgCWlmIChmdiAhPSBudWxsKSB7Ci0gICAgCQlJUHJvamVjdEZhY2V0IHBmID0gZnYuZ2V0UHJvamVjdEZhY2V0KCk7Ci0gICAgCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbihUeXBlLklOU1RBTEwsIGZ2LCBnZXRDb25maWdPYmplY3QocGYpKTsKLSAgICAJCWFjdGlvbnMuYWRkKGFjdGlvbik7Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBkYXRhIG1vZGVsIGNvbmZpZyBvYmplY3QgZm9yIHRoZSBnaXZlbiBwcm9qZWN0IGZhY2V0Ci0gICAqIEZvciBKMkVFIGZhY2V0cywgc2V0IEFkZF9UT19FQVIgcHJvcGVydGllcyBvZiB0aGUgZGF0YSBtb2RlbCB0byBmYWxzZSwgCi0gICAqIGZvciBvdGhlciBmYWNldHMsIGp1c3QgcmV0dXJuIG51bGwKLSAgICogQHBhcmFtIGZhY2V0SUQKLSAgICogQHJldHVybiBkYXRhIG1vZGVsIGNvbmZpZyBvYmplY3QKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldENvbmZpZ09iamVjdChJUHJvamVjdEZhY2V0IHByb2plY3RGYWNldCkKLSAgewotCSAgCi0JICBJRGF0YU1vZGVsIGRtID0gbnVsbDsKLQkgIGlmIChwcm9qZWN0RmFjZXQgIT0gbnVsbCkgewotCQkgIFN0cmluZyBmYWNldElkID0gcHJvamVjdEZhY2V0LmdldElkKCk7Ci0JCSAgaWYgKGZhY2V0SWQgIT0gbnVsbCkgewotCQkJICAvLyBzZXQgQWRkIHRvIEVBUiB0byBmYWxzZQotCQkJICBpZiAoZmFjZXRJZC5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkpIHsgCi0JCQkJICBkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBXZWJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJCQkgIGRtLnNldEJvb2xlYW5Qcm9wZXJ0eShJV2ViRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCQkgIH0gZWxzZSBpZiAoZmFjZXRJZC5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSkpIHsKLQkJCQkgIGRtID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IEVqYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJCSAgZG0uc2V0Qm9vbGVhblByb3BlcnR5KElFamJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkFERF9UT19FQVIsIGZhbHNlKTsKLQkJCSAgfSBlbHNlIGlmIChmYWNldElkLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFKSkgewotCQkJCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCQkJICBkbS5zZXRCb29sZWFuUHJvcGVydHkoSUFwcENsaWVudEZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQUREX1RPX0VBUiwgZmFsc2UpOwotCQkJICB9IGVsc2UgaWYgKGZhY2V0SWQuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfTU9EVUxFKSkgewotCQkJCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgVXRpbGl0eUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJCSAgZG0uc2V0Qm9vbGVhblByb3BlcnR5KElVdGlsaXR5RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCQkgIH0KLQkJICB9Ci0JICB9Ci0JICByZXR1cm4gZG07Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHtAbGluayBGYWNldE1hdGNoZXJ9IGNhbGN1bGF0ZWQgd2hlbiBjaGVja2luZyB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgCi0gICAqIGFnYWluc3QgdGhlIGZhY2V0IHZlcnNpb25zLgotICAgKiAKLSAgICogQHBhcmFtIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyBhcnJheSBvZiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucwotICAgKiBAcGFyYW0gcHJvamVjdEZhY2V0VmVyc2lvbnMgZmFjZXQgdmVyc2lvbnMgdG8gY2hlY2sgYWdhaW5zdC4gU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSAKLSAgICoge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIEZhY2V0TWF0Y2hlciB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzOgotICAgKiA8dWw+Ci0gICAqIDxsaT48Yj5pc01hdGNoPC9iPjogcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyBhbHJlYWR5IGV4aXN0IGluIHRoZSBmYWNldCB2ZXJzaW9ucwotICAgKiBvciBjYW4gYmUgYWRkZWQgdG8gdGhlIGZhY2V0IHZlcnNpb25zLiBpc01hdGNoIHdpbGwgcmV0dXJuIGZhbHNlIG90aGVyd2lzZS48L2xpPgotICAgKiA8bGk+PGI+Z2V0RmFjZXRzVGVzdGVkPC9iPjogcmV0dXJucyB0aGUgc2FtZSBzZXQgb2YgZmFjZXQgdmVyc2lvbnMgYXMgdGhlIGlucHV0IHBhcmFtZXRlciwgcHJvamVjdEZhY2V0VmVyc2lvbnM8L2xpPgotICAgKiA8bGk+PGI+Z2V0RmFjZXRzVGhhdE1hdGNoZWQ8L2I+OiBpZiBpc01hdGNoIHJldHVybnMgZmFsc2UsIGdldEZhY2V0c1RoYXRNYXRjaGVkIHJldHVybnMgbnVsbC4gSWYgaXNNYXRjaCByZXR1cm5zIHRydWUsIAotICAgKiBnZXRGYWNldHNUaGF0TWF0Y2hlZCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgZmFjZXQgdmVyc2lvbnMgaW4gdGhlIGlucHV0IHBhcmFtZXRlciwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIAotICAgKiB0aGF0IG1hdGNoZWQgb25lIG9mIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4gVGhpcyBtYXkgYmUgYW4gZW1wdHkgc2V0LjwvbGk+Ci0gICAqIDxsaT48Yj5nZXRGYWNldHNUb0FkZDwvYj46IGlmIGlzTWF0Y2ggcmV0dXJucyBmYWxzZSwgZ2V0RmFjZXRzVG9BZGQgcmV0dXJucyBudWxsLiBJZiBpc01hdGNoIHJldHVybnMgdHJ1ZSwgCi0gICAqIGdldEZhY2V0c1RvQWRkIHJldHVybnMgdGhlIHN1YnNldCBvZiBmYWNldCB2ZXJzaW9ucyB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGZhY2V0IHZlcnNpb25zIGluCi0gICAqIHByb2plY3RGYWNldFZlcnNpb25zIGluIG9yZGVyIHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuIFRoaXMgbWF5IGJlCi0gICAqIGFuIGVtcHR5IHNldC48L2xpPgotICAgKiA8L3VsPgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBGYWNldE1hdGNoZXIgbWF0Y2goUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucykKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmbSA9IG5ldyBGYWNldE1hdGNoZXIoKTsKLSAgICBmbS5zZXRGYWNldHNUZXN0ZWQocHJvamVjdEZhY2V0VmVyc2lvbnMpOwotICAgIEhhc2hTZXQgZmFjZXRzVG9BZGQgPSBuZXcgSGFzaFNldCgpOwotICAgIEhhc2hTZXQgcmVxdWlyZWRGYWNldFZlcnNpb25zVG9BZGQgPSBuZXcgSGFzaFNldCgpOwotICAgIEhhc2hTZXQgZmFjZXRzVGhhdE1hdGNoZWQgPSBuZXcgSGFzaFNldCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxyZXF1aXJlZEZhY2V0VmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb24gcmZ2ID0gcmVxdWlyZWRGYWNldFZlcnNpb25zW2ldOwotICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcnBmdiA9IHJmdi5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCk7Ci0gICAgICBTdHJpbmcgcmlkID0gcnBmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRJZCgpOwotICAgICAgU3RyaW5nIHJ2ID0gcnBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICBib29sZWFuIGZhY2V0UHJlc2VudCA9IGZhbHNlOwotCi0gICAgICAvL0lzIHRoZSBwcm9qZWN0IGZhY2V0IHByZXNlbnQ/IG9yIGEgbGF0ZXIgdmVyc2lvbiBvZiBhcHBsaWNhYmxlLgotICAgICAgSXRlcmF0b3IgaXRyID0gcHJvamVjdEZhY2V0VmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilpdHIubmV4dCgpOwotICAgICAgICBTdHJpbmcgaWQgPSBwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKTsKLSAgICAgICAgU3RyaW5nIHZlcnNpb24gPSBwZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICBpZiAocmlkLmVxdWFscyhpZCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocnYuZXF1YWxzKHZlcnNpb24pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vZm91bmQgYW4gZXhhY3QgbWF0Y2gKLSAgICAgICAgICAgIGZhY2V0UHJlc2VudCA9IHRydWU7Ci0gICAgICAgICAgICBmYWNldHNUaGF0TWF0Y2hlZC5hZGQocGZ2KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZnYuZ2V0QWxsb3dOZXdlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoZ3JlYXRlclRoYW4odmVyc2lvbiwgcnYpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy9mb3VuZCBhIG1hdGNoCi0gICAgICAgICAgICAgICAgZmFjZXRQcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmYWNldHNUaGF0TWF0Y2hlZC5hZGQocGZ2KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvL05vIG5lZWQgdG8ga2VlcCBpdGVyYXRpbmcgc2luY2Ugd2UgaGl0IGEgZmFjZXQgd2l0aCB0aGUgc2FtZSBpZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvL2lmIG5vdCBwcmVzZW50LCBwdXQgaXQgaW4gdGhlIGxpc3QgdG8gY2hlY2sgaWYgaXQgY2FuIGJlIGFkZGVkLgotICAgICAgaWYgKCFmYWNldFByZXNlbnQpCi0gICAgICB7Ci0gICAgICAgIGZhY2V0c1RvQWRkLmFkZChycGZ2KTsKLSAgICAgICAgcmVxdWlyZWRGYWNldFZlcnNpb25zVG9BZGQuYWRkKHJmdik7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9DaGVjayBpZiB0aGUgZmFjZXRzVG9BZGQgY2FuIGJlIGFkZGVkCi0gICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9uc1RvQWRkLnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy9UZXN0IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZhY2V0cyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQKLSAgICAgIC8vQ3JlYXRlIGFuIGFycmF5IG9mIGFycmF5cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gdGhlIGFycmF5Ci0gICAgICAvL29mIHRoZSBwZXJtaXR0ZWQgSVByb2plY3RGYWNldFZlcnNpb25zIGZvciBlYWNoIHJlcXVpcmVkIGZhY2V0LgotICAgICAgYm9vbGVhbiBmYWNldHNDYW5CZUFkZGVkID0gZmFsc2U7Ci0gICAgICBJdGVyYXRvciBpdHIgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNUb0FkZC5pdGVyYXRvcigpOwotICAgICAgQXJyYXlMaXN0IHByb2plY3RGYWNldFZlcnNpb25BcnJheXMgPSBuZXcgQXJyYXlMaXN0KCk7ICAgICAgCi0KLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZXFGYWNldFZlcnNpb24gPSAoUmVxdWlyZWRGYWNldFZlcnNpb24pIGl0ci5uZXh0KCk7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uW10gdmVyc2lvbnMgPSByZXFGYWNldFZlcnNpb24uZ2V0QWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgIGlmICh2ZXJzaW9ucyAhPSBudWxsICYmIHZlcnNpb25zLmxlbmd0aCA+IDApCi0gICAgICAgIHsgICAgICAgICAgCi0gICAgICAgICAgLy9BZGQgdGhlIGFycmF5IG9mIHZlcnNpb25zIHRvIHRoZSBsaXN0IG9mIGFycmF5cy4KLSAgICAgICAgICBwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLmFkZCh2ZXJzaW9ucyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSVByb2plY3RGYWNldFZlcnNpb25bXVtdIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSlwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLnRvQXJyYXkobmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uWzBdWzBdKTsKLSAgICAgIFNldFtdIGNvbWJpbmF0aW9ucyA9IGdldEZhY2V0Q29tYmluYXRpb25zKGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLCBmYWxzZSk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8Y29tYmluYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICAvL0NoZWNrIGlmIHRoZSBzZXQgY2FuIGJlIGFkZGVkLiBJZiBzbywgdGhpcyBpcyBhIG1hdGNoLiBVcGRhdGUgdGhlIGZhY2V0IG1hdGNoZXIgYW5kIGJyZWFrLgotICAgICAgICBTZXQgYWN0aW9ucyA9IGdldEluc3RhbGxBY3Rpb25zKGNvbWJpbmF0aW9uc1tpXSk7Ci0gICAgICAgIHRyeSB7Ci0JCQlpZiggUHJvamVjdEZhY2V0c01hbmFnZXIuY2hlY2soIHByb2plY3RGYWNldFZlcnNpb25zLCBhY3Rpb25zICkuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LICkKLQkJCXsKLQkJCSAgLy9GYWNldHMgY2FuIGJlIGFkZGVkIHNvIHRoZXJlIGlzIGEgbWF0Y2gKLQkJCSAgZmFjZXRzQ2FuQmVBZGRlZD10cnVlOwotCQkJICBmbS5zZXRNYXRjaCh0cnVlKTsKLQkJCSAgZm0uc2V0RmFjZXRzVGhhdE1hdGNoZWQoZmFjZXRzVGhhdE1hdGNoZWQpOwotCQkJICBmbS5zZXRGYWNldHNUb0FkZChjb21iaW5hdGlvbnNbaV0pOwotCQkJICBicmVhazsKLQkJCX0KLQkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLQkJCS8vIERvIG5vdGhpbmcgaWYgUHJvamVjdEZhY2V0c01hbmFnZXIuY2hlY2soKSB0aHJvd3MgZXhjZXB0aW9uLgotCQkJLy8gVE9ETyBUaGlzIHRyeS9jYXRjaCB3aWxsIGJlIHVubmVjY2VzYXJ5IG9uY2UgV1RQIGJ1ZyAxMzc1NTEgaXMgZml4ZWQgc28gdGhhdCBhbiBPSyBTdGF0dXMgCi0JCQkvLyAJCXdvdWxkIG5vdCBiZSByZXR1cm5lZCB3aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0JCX0gICAgICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIAotICAgICAgaWYgKCFmYWNldHNDYW5CZUFkZGVkKQotICAgICAgewotICAgICAgICBmbS5zZXRNYXRjaChmYWxzZSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBmYWNldHMgdG8gYWRkLgotICAgICAgZm0uc2V0TWF0Y2godHJ1ZSk7Ci0gICAgICBmbS5zZXRGYWNldHNUaGF0TWF0Y2hlZChmYWNldHNUaGF0TWF0Y2hlZCk7Ci0gICAgICBmbS5zZXRGYWNldHNUb0FkZChmYWNldHNUb0FkZCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmbTsKLSAgfQotICAgIAotICAvKioKLSAgICogQWRkcyBmYWNldCB2ZXJzaW9ucyB0byB0aGUgcHJvdmlkZWQgcHJvamVjdCBpZiByZXF1aXJlZCBiYXNlZCBvbiBjaGVja2luZyBwcm92aWRlZCAKLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgYWdhaW5zdCB0aGUgZmFjZXQgdmVyc2lvbnMgYWxyZWFkeSBpbnN0YWxsZWQgb24gcHJvamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IElQcm9qZWN0IHdoaWNoIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSByZnZzIGFycmF5IG9mIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiBAcGFyYW0gbW9uaXRvciBwcm9ncmVzcyBtb25pdG9yCi0gICAqIEByZXR1cm4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1IKLSAgICogPHVsPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgaXMgbm90IG9wZW4gb3I8L2xpPgotICAgKiA8bGk+YW4gYXR0ZW1wdCB0byBhZGQgZmFjZXQgdmVyc2lvbnMgdG8gdGhlIHByb2plY3QgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuPC9saT4KLSAgICogPC91bD4gCi0gICAqIE90aGVyd2lzZSwgcmV0dXJucyBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5PSyAgICAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBhZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgICBTZXQgbWlzc2luZ0ZhY2V0cyA9IG51bGw7Ci0gICAgU2V0IGZhY2V0c1RvQWRkID0gbmV3IEhhc2hTZXQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU2V0IHByb2plY3RGYWNldFZlcnNpb25zID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICBGYWNldE1hdGNoZXIgcHJvamVjdEZhY2V0TWF0Y2hlciA9IEZhY2V0VXRpbHMubWF0Y2gocmZ2cywgcHJvamVjdEZhY2V0VmVyc2lvbnMpOwotICAgICAgICBpZiAocHJvamVjdEZhY2V0TWF0Y2hlci5pc01hdGNoKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaXNzaW5nRmFjZXRzID0gcHJvamVjdEZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpOwotICAgICAgICAgIGlmIChtaXNzaW5nRmFjZXRzLnNpemUoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgSVJ1bnRpbWUgZlJ1bnRpbWUgPSBudWxsOwotICAgICAgICAgICAgZlJ1bnRpbWUgPSBGYWNldFV0aWxzLmdldEZhY2V0UnVudGltZUZvclByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKGZSdW50aW1lICE9IG51bGwpCi0gICAgICAgICAgICB7ICAKLSAgICAgICAgICAgICAgLy9BZGQgdGhlIGhpZ2hlc3QgdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhlIHJ1bnRpbWUgdGhlIHByb2plY3QgaXMgYm91bmQgdG8uCi0gICAgICAgICAgICAgIEl0ZXJhdG9yIG1pc3NpbmdGYWNldHNJdHIgPSBtaXNzaW5nRmFjZXRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgIHdoaWxlIChtaXNzaW5nRmFjZXRzSXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSAoKElQcm9qZWN0RmFjZXRWZXJzaW9uKW1pc3NpbmdGYWNldHNJdHIubmV4dCgpKS5nZXRQcm9qZWN0RmFjZXQoKTsKLSAgICAgICAgICAgICAgICAvL0dldCB0aGUgaGlnaGVzdCBsZXZlbCBvZiB0aGlzIGZhY2V0IHN1cHBvcnRlZCBieSB0aGUgcnVudGltZS4KLSAgICAgICAgICAgICAgICBMaXN0IHZlcnNpb25zID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyA9IGZhY2V0LmdldFNvcnRlZFZlcnNpb25zKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChWZXJzaW9uRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZmFjZXQuZ2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRyID0gdmVyc2lvblNldC5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLmFkZChpdHIubmV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvL0l0ZXJhdGUgb3ZlciB0aGUgdmVyc2lvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBhbmQgcGljayB0aGUgCi0gICAgICAgICAgICAgICAgLy9maXJzdCBvbmUgdGhhdCBmUnVudGltZSBzdXBwb3J0cy4KLSAgICAgICAgICAgICAgICBJdGVyYXRvciB2ZXJzaW9uc0l0ciA9IHZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUodmVyc2lvbnNJdHIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbil2ZXJzaW9uc0l0ci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTZXQgcGZ2cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICAgICAgICBwZnZzLmFkZChwZnYpOwotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAvL0NoZWNrIHRoZSByZXF1aXJlZCBmYWNldHMgdG8gc2VlIGlmIHRoaXMgdmVyc2lvbiBvZiB0aGlzIGZhY2V0IGlzIHN1cHBvcnRlZC4KLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxyZnZzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSByZnZzW2pdOwotICAgICAgICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBycGZ2ID0gcmZ2LmdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKS5lcXVhbHMocGZ2LmdldFByb2plY3RGYWNldCgpLmdldElkKCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHJwZnYuZ2V0VmVyc2lvblN0cmluZygpLmVxdWFscyhwZnYuZ2V0VmVyc2lvblN0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmZ2LmdldEFsbG93TmV3ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyZWF0ZXJUaGFuKHBmdi5nZXRWZXJzaW9uU3RyaW5nKCksIHJwZnYuZ2V0VmVyc2lvblN0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgYWdhaW5zdCBSdW50aW1lCi0gICAgICAgICAgICAgICAgICAgIGlmIChGYWNldFV0aWxzLmRvZXNSdW50aW1lU3VwcG9ydEZhY2V0cyhmUnVudGltZSwgcGZ2cykpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvL1dlIGhhdmUgYSBtYXRjaC4gQWRkIHRoaXMgb25lIHRvIHRoZSBtYXN0ZXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgIGZhY2V0c1RvQWRkLmFkZChwZnYpOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZhY2V0c1RvQWRkID0gbWlzc2luZ0ZhY2V0czsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdHVzID0gYWRkRmFjZXRzVG9Qcm9qZWN0KGZQcm9qZWN0LCBmYWNldHNUb0FkZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAvL0Rpc3BsYXkgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB0byB0aGUgdXNlci4KLSAgICAgIC8vQSBDb3JlRXhjZXB0aW9uIGNvdWxkIGhhdmUgYmVlbiB0aHJvd24gZm9yIGFueSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIHJlYXNvbnMKLSAgICAgIC8vMS4gVGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3QKLSAgICAgIC8vMi4gVGhlIHByb2plY3QgaXMgbm90IG9wZW4KLSAgICAgIC8vMy4gVGhlcmUgd2FzIGEgcHJvYmxlbSBhZGRpbmcgdGhlIGZhY2V0cyB0byB0aGUgcHJvamVjdC4KLSAgICAgIAotICAgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNULCBuZXcgU3RyaW5nW10geyBwcm9qZWN0LmdldE5hbWUoKX0pKTsgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFwcm9qZWN0LmlzT3BlbigpKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0LmdldE5hbWUoKX0pKTsgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgCi0gICAgICAgIHN0YXR1cyA9IGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKHByb2plY3QuZ2V0TmFtZSgpLCBmYWNldHNUb0FkZCwgY2UpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBBZGRzIHRoZSBwcm92aWRlZCBzZXQgb2YgZmFjZXQgdmVyc2lvbnMgdG8gdGhlIHByb3ZpZGVkIGZhY2V0ZWQgcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIGZwcm9qZWN0IEEgZmFjZXRlZCBwcm9qZWN0IHdoaWNoIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBBIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIEFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIElTdGF0dXMuT0sgaWYgdGhlIGZhY2V0IAotICAgKiB2ZXJzaW9ucyB3ZXJlIGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCBhbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZgotICAgKiBJU3RhdHVzLkVSUk9SLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBhZGRGYWNldHNUb1Byb2plY3QoZmluYWwgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0LCBmaW5hbCBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0gICAgc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBmaW5hbCBTZXQgYWN0aW9ucyA9IGdldEluc3RhbGxBY3Rpb25zKHByb2plY3RGYWNldFZlcnNpb25zKTsKLSAgICAKLSAgICBpZiAoaXNFeHRlbnNpb25QcmVzZW50KCkpCi0gICAgeyAgICAKLSAgICAJc3RhdHVzWzBdID0gZGVsZWdhdGUuYWRkRmFjZXRzVG9Qcm9qZWN0KGZwcm9qZWN0LCBwcm9qZWN0RmFjZXRWZXJzaW9ucyk7Ci0JfQotCWVsc2UKLQl7Ci0JCXRyeQotICAgICAgICB7Ci0gICAgICAgICAgZnByb2plY3QubW9kaWZ5KGFjdGlvbnMsIG51bGwpOwotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvckFkZGluZ0ZhY2V0cyhmcHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBwcm9qZWN0RmFjZXRWZXJzaW9ucywgZSk7Ci0gICAgICAgIH0KLQl9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1c1swXTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gZXJyb3Igc3RhdHVzIGluZGljYXRpbmcgdGhhdCB0aGUgZmFjZXQgdmVyc2lvbnMgY291bGQgbm90IGJlCi0gICAqIGFkZGVkIHRvIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBhIHByb2plY3QgbmFtZSB0byBpbnNlcnQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIElTdGF0dXMKLSAgICogQHBhcmFtIHByb2plY3RGYWNldFZlcnNpb25zIGEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259LgotICAgKiBUaGUgZmFjZXRzIGluIHRoaXMgc2V0IHdpbGwgYmUgbGlzdGVkIGluIHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZSBJU3RhdHVzLgotICAgKiBAcGFyYW0gdCBhIFRocm93YWJsZSB3aGljaCB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBJU3RhdHVzCi0gICAqIEByZXR1cm4gYW4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1IKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIElTdGF0dXMgZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoU3RyaW5nIHByb2plY3ROYW1lLCBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMsIFRocm93YWJsZSB0KQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGludCBzaXplID0gcHJvamVjdEZhY2V0VmVyc2lvbnMuc2l6ZSgpOwotICAgIGlmIChzaXplID4gMCkKLSAgICB7ICAgICAgICAgIAotICAgICAgU2V0IGZhY2V0cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAvL0l0ZXJhdGUgb3ZlciBwcm9qZWN0RmFjZXRWZXJzaW9ucyB0byBmb3JtIGEgc2V0IG9mIElQcm9qZWN0RmFjZXRzCi0gICAgICBJdGVyYXRvciBpdHIgPSBwcm9qZWN0RmFjZXRWZXJzaW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHByb2plY3RGYWNldCA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilpdHIubmV4dCgpOwotICAgICAgICBJUHJvamVjdEZhY2V0IGZhY2V0ID0gcHJvamVjdEZhY2V0LmdldFByb2plY3RGYWNldCgpOwotICAgICAgICBmYWNldHMuYWRkKGZhY2V0KTsKLSAgICAgIH0KLSAgICAgIFN0cmluZyBmYWNldExpc3QgPSBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKGZhY2V0cyk7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1QsIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBmYWNldExpc3R9KSwgdCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGZhY2V0ZWQgcHJvamVjdCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgQSBTdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0byBiZSBjcmVhdGVkCi0gICAqIEByZXR1cm4gQW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5PSyBpZiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAqIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSBvciBpZiBhIHByb2plY3Qgb2YgdGhlIHByb3ZpZGVkIG5hbWUgYWxyZWFkeQotICAgKiBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZS4gT3RoZXJ3aXNlLCBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgb2YKLSAgICogSVN0YXR1cy5FUlJPUi4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgY3JlYXRlTmV3RmFjZXRlZFByb2plY3QoZmluYWwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgZmluYWwgSVN0YXR1c1tdIHN0YXR1cyA9IG5ldyBJU3RhdHVzWzFdOwotICAgIHN0YXR1c1swXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgCi0gICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLQkJaWYgKGlzRXh0ZW5zaW9uUHJlc2VudCgpKQotCQl7Ci0JCSAgc3RhdHVzWzBdID0gZGVsZWdhdGUuY3JlYXRlTmV3RmFjZXRlZFByb2plY3QocHJvamVjdE5hbWUpOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotICAJCSAgdHJ5Ci0gIAkJICB7Ci0gICAgICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICAgIGlmIChmUHJvamVjdCA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotICAgICAgICAgICAgICB9Ci0gIAkJICB9IAotICAJCSAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgCQkgIHsKLSAgICAgICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGUpOwotICAJCSAgfSAgCi0JICAJfSAgICAgICAgCi0gICAgfQotICAgIHJldHVybiBzdGF0dXNbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBwcm92aWRlZCBzZXQgb2YgZmFjZXRzIGFzIGZpeGVkIG9uIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBmUHJvamVjdCBBIGZhY2V0ZWQgcHJvamVjdCB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcGFyYW0gZml4ZWRGYWNldHMgQSBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0fQotICAgKiBAcmV0dXJuIEFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIElTdGF0dXMuT0sgaWYgdGhlIGZhY2V0cyAKLSAgICogd2VyZSBzdWNjZXNzZnVsbHkgc2V0IGFzIGZpeGVkIGZhY2V0cyBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0LiAKLSAgICogT3RoZXJ3aXNlLCBhbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLkVSUk9SLgotICAgKiAKLSAgICogQHNlZSBJRmFjZXRlZFByb2plY3Qjc2V0Rml4ZWRQcm9qZWN0RmFjZXRzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgc2V0Rml4ZWRGYWNldHNPblByb2plY3QoZmluYWwgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0LCBmaW5hbCBTZXQgZml4ZWRGYWNldHMpCi0gIHsKLSAgICBmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0gICAgc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIGlmIChpc0V4dGVuc2lvblByZXNlbnQoKSkKLSAgICB7Ci0gICAgCXN0YXR1c1swXSA9IGRlbGVnYXRlLnNldEZpeGVkRmFjZXRzT25Qcm9qZWN0KGZQcm9qZWN0LCBmaXhlZEZhY2V0cyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgCXRyeQotICAgICAgICB7Ci0gICAgICAgICAgZlByb2plY3Quc2V0Rml4ZWRQcm9qZWN0RmFjZXRzKGZpeGVkRmFjZXRzKTsKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZml4ZWRGYWNldHMsIGUpOwotICAgICAgICB9Ci0gICAgfSAgICAgICAKLSAgICAKLSAgICByZXR1cm4gc3RhdHVzWzBdOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbiBlcnJvciBzdGF0dXMgaW5kaWNhdGluZyB0aGF0IHRoZSBmYWNldHMgY291bGQgbm90IGJlCi0gICAqIHNldCBhcyBmaXhlZCBmYWNldHMgb24gdGhlIGZhY2V0ZWQgcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIGEgcHJvamVjdCBuYW1lIHRvIGluc2VydCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgSVN0YXR1cwotICAgKiBAcGFyYW0gZmFjZXRzIGEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldH0uCi0gICAqIFRoZSBmYWNldHMgaW4gdGhpcyBzZXQgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIElTdGF0dXMuCi0gICAqIEBwYXJhbSB0IGEgVGhyb3dhYmxlIHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIElTdGF0dXMKLSAgICogQHJldHVybiBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5FUlJPUgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgSVN0YXR1cyBnZXRFcnJvclN0YXR1c0ZvclNldHRpbmdGaXhlZEZhY2V0cyhTdHJpbmcgcHJvamVjdE5hbWUsIFNldCBmYWNldHMsIFRocm93YWJsZSB0KQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGludCBzaXplID0gZmFjZXRzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgeyAgICAgICAgICAKLSAgICAgIFN0cmluZyBmYWNldExpc3QgPSBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKGZhY2V0cyk7ICAgICAgCi0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSVhFRF9GQUNFVFMsIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBmYWNldExpc3R9KSwgdCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0gIAotICAKLSAgCi0gIC8qKgotICAgKiBCaW5kcyB0aGUgZmFjZXRlZCBwcm9qZWN0IHRvIHRoZSBmYWNldCBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gZlByb2plY3QgQSBmYWNldGVkIHByb2plY3Qgd2hpY2ggZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHBhcmFtIGZSdW50aW1lIEEgZmFjZXQgcnVudGltZQotICAgKiBAcmV0dXJuIEFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIElTdGF0dXMuT0sgaWYgdGhlIGZhY2V0ZWQgcHJvamVjdAotICAgKiB3YXMgYm91bmQgdG8gdGhlIGZhY2V0IHJ1bnRpbWUgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UsIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBvZgotICAgKiBJU3RhdHVzLkVSUk9SLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBzZXRGYWNldFJ1bnRpbWVPblByb2plY3QoZmluYWwgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0LCBmaW5hbCBJUnVudGltZSBmUnVudGltZSkKLSAgewotICAgIGZpbmFsIElTdGF0dXNbXSBzdGF0dXMgPSBuZXcgSVN0YXR1c1sxXTsKLSAgICBzdGF0dXNbMF0gPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgaWYgKGlzRXh0ZW5zaW9uUHJlc2VudCgpKQotICAgIHsKLSAgICAJc3RhdHVzWzBdID0gZGVsZWdhdGUuc2V0RmFjZXRSdW50aW1lT25Qcm9qZWN0KGZQcm9qZWN0LCBmUnVudGltZSk7Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgIAl0cnkKLSAgICAgICAgewotICAgIAkJZlByb2plY3Quc2V0VGFyZ2V0ZWRSdW50aW1lcyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oZlJ1bnRpbWUpLCBudWxsKTsgLy9qdmggLSBoYXBwZW5zIGhlcmUuLi4KLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VUVElOR19SVU5USU1FLCBuZXcgU3RyaW5nW10geyBmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmUnVudGltZS5nZXROYW1lKCkgfSksIGUpOwotICAgICAgICB9Ci0gICAgfSAgICAKLSAgICByZXR1cm4gc3RhdHVzWzBdOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHRyYW5zbGF0YWJsZSBkZWxpbWl0ZWQgbGlzdCBvZiBmYWNldCBsYWJlbHMgZGVyaXZlZCBmcm9tIHRoZSBwcm92aWRlZAotICAgKiBzZXQgb2YgZmFjZXRzCi0gICAqIAotICAgKiBAcGFyYW0gZmFjZXRzIGEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldH0KLSAgICogQHJldHVybiBTdHJpbmcgYSBkZWxpbWl0ZWQgbGlzdCBvZiBmYWNldCBsYWJlbHMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKFNldCBmYWNldHMpCi0gIHsKLSAgICBTdHJpbmcgZmFjZXRMaXN0TWVzc2FnZSA9ICIiOwotICAgIGludCBzaXplID0gZmFjZXRzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRzLml0ZXJhdG9yKCk7Ci0gICAgICBJUHJvamVjdEZhY2V0IGZpcnN0UHJvamVjdEZhY2V0ID0gKElQcm9qZWN0RmFjZXQpaXRyLm5leHQoKTsKLSAgICAgIGZhY2V0TGlzdE1lc3NhZ2UgPSBmaXJzdFByb2plY3RGYWNldC5nZXRMYWJlbCgpOwotICAgICAgCi0gICAgICAvL0NvbnRpbnVlIGFwcGVuZGluZyB0byBmYWNldExpc3RNZXNzYWdlIHVudGlsIGFsbCB0aGUgZmFjZXQgbGFiZWxzCi0gICAgICAvL2FyZSBpbiB0aGUgbGlzdC4KLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUHJvamVjdEZhY2V0IHByb2plY3RGYWNldCA9IChJUHJvamVjdEZhY2V0KWl0ci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBwZkxhYmVsID0gcHJvamVjdEZhY2V0LmdldExhYmVsKCk7Ci0gICAgICAgIGZhY2V0TGlzdE1lc3NhZ2UgPSBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19GQUNFVFMsIG5ldyBTdHJpbmdbXSB7ZmFjZXRMaXN0TWVzc2FnZSwgcGZMYWJlbH0pOwotICAgICAgfSAgICAgICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgcmV0dXJuIGZhY2V0TGlzdE1lc3NhZ2U7Ci0gIH0KLSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2V0IG9mIGZhY2V0IHZlcnNpb25zIHdoaWNoIGNhbiBiZSBpbmZlcnJlZCBmcm9tIHRoZSBwcm92aWRlZCBKYXZhIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBqYXZhUHJvamVjdCBhIEphdmEgcHJvamVjdCB0aGF0IGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0RmFjZXRzRm9ySmF2YVByb2plY3QoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KQotICB7Ci0gICAgU2V0IGZhY2V0cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgU3RyaW5nIGpka0NvbXBsaWFuY2VMZXZlbCA9IG51bGw7Ci0gICAgaWYgKGphdmFQcm9qZWN0IT1udWxsKQotICAgIHsKLSAgICAgIGpka0NvbXBsaWFuY2VMZXZlbCA9IGphdmFQcm9qZWN0LmdldE9wdGlvbigib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZSIsIGZhbHNlKTsKLSAgICAgIGlmIChqZGtDb21wbGlhbmNlTGV2ZWwgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamRrQ29tcGxpYW5jZUxldmVsID0gSmF2YUNvcmUuZ2V0T3B0aW9uKEphdmFDb3JlLkNPTVBJTEVSX0NPTVBMSUFOQ0UpOwotICAgICAgICBpZiAoamRrQ29tcGxpYW5jZUxldmVsID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBqZGtDb21wbGlhbmNlTGV2ZWwgPSAiMS40IjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIElQcm9qZWN0RmFjZXQgamF2YUZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KEphdmFGYWNldC5JRCk7Ci0gICAgSVByb2plY3RGYWNldFZlcnNpb24gamF2YUZhY2V0VmVyc2lvbiA9IG51bGw7Ci0gICAgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuMyIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiMS4zIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuNCIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiMS40Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuNSIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBKYXZhRmFjZXQuSkFWQV81MDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoamRrQ29tcGxpYW5jZUxldmVsLmVxdWFscygiMS42IikpCi0gICAgewotICAgICAgamF2YUZhY2V0VmVyc2lvbiA9IEphdmFGYWNldC5KQVZBXzYwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgamF2YUZhY2V0VmVyc2lvbiA9IGphdmFGYWNldC5nZXRWZXJzaW9uKCIxLjQiKTsKLSAgICB9Ci0gCi0gICAgZmFjZXRzLmFkZChqYXZhRmFjZXRWZXJzaW9uKTsKLSAgICBJUHJvamVjdEZhY2V0IHV0aWxpdHlGYWNldCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX01PRFVMRSk7Ci0gICAgSVByb2plY3RGYWNldFZlcnNpb24gdXRpbGl0eUZhY2V0VmVyc2lvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgdXRpbGl0eUZhY2V0VmVyc2lvbiA9IHV0aWxpdHlGYWNldC5nZXRMYXRlc3RWZXJzaW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLSAgICAgIAotICAgIH0KLSAgICBpZiAodXRpbGl0eUZhY2V0VmVyc2lvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGZhY2V0cy5hZGQodXRpbGl0eUZhY2V0VmVyc2lvbik7Ci0gICAgfQotICAgIHJldHVybiBmYWNldHM7Ci0gIH0KLSAgCi0gIAotICAvL01ldGhvZHMgcmVsYXRlZCB0byBmYWNldCBydW50aW1lcy4KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIEBwYXJhbSByZXF1aXJlZEZhY2V0VmVyc2lvbnMgYW4gYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBSZXF1aXJlZEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBTZXQgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIChlbGVtZW50IHR5cGU6IHtAbGluayBJUnVudGltZX0pIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0UnVudGltZXMoUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICAvL0Zvcm0gdGhlIHNldHMgb2YgSVByb2plY3RGYWNldFZlcnNpb25zIHRoZXNlIFJlcXVpcmVkRmFjZXRWZXJzaW9ucyByZXByZXNlbnQuCi0gICAgQXJyYXlMaXN0IGxpc3RPZkZhY2V0U2V0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICBIYXNoU2V0IGZhY2V0cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgaW50IGphdmFGYWNldEluZGV4ID0gLTE7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHJlcXVpcmVkRmFjZXRWZXJzaW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNbaV0uZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpOwotICAgICAgaWYgKEZhY2V0VXRpbHMuaXNKYXZhRmFjZXQocGZ2LmdldFByb2plY3RGYWNldCgpKSkKLSAgICAgIHsKLSAgICAgICAgLy9SZW1lbWJlciB0aGUgaW5kZXgKLSAgICAgICAgamF2YUZhY2V0SW5kZXggPSBpOwotICAgICAgfQotICAgICAgZmFjZXRzLmFkZChyZXF1aXJlZEZhY2V0VmVyc2lvbnNbaV0uZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpKTsKLSAgICB9Ci0gICAgCi0gICAgbGlzdE9mRmFjZXRTZXRzLmFkZChmYWNldHMpOwotICAgIAotICAgIC8vSWYgdGhlIGphdmEgZmFjZXQgd2FzIG9uZSBvZiB0aGUgZmFjZXRzIGluIHRoZSBzZXQsIGFuZCBuZXcgdmVyc2lvbnMgb2YgamF2YSBhcmUgYWxsb3dlZCwKLSAgICAvL2NyZWF0ZSBzZXRzIHRoYXQgY29udGFpbiB0aGUgbmV3ZXIgcGVybWl0dGVkIHZlcnNpb25zIG9mIHRoZSBqYXZhIGZhY2V0cy4KLSAgICBpZiAoamF2YUZhY2V0SW5kZXggPiAtMSkKLSAgICB7Ci0gICAgICBBcnJheUxpc3QgcGVybWl0dGVkSmF2YVZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb24gcmZ2ID0gcmVxdWlyZWRGYWNldFZlcnNpb25zW2phdmFGYWNldEluZGV4XTsKLSAgICAgIGlmIChyZnYuZ2V0QWxsb3dOZXdlcigpKQotICAgICAgewotICAgICAgICBTdHJpbmcgdmVyc2lvbiA9IHJmdi5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkuZ2V0VmVyc2lvblN0cmluZygpOyAgICAgIAotICAgICAgICBTZXQgYWxsVmVyc2lvbnMgPSByZnYuZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpLmdldFByb2plY3RGYWNldCgpLmdldFZlcnNpb25zKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IGFsbFZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gdGhpc1BmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilpdHIubmV4dCgpOwotICAgICAgICAgIFN0cmluZyB0aGlzVmVyc2lvbiA9IHRoaXNQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIGlmIChncmVhdGVyVGhhbih0aGlzVmVyc2lvbiwgdmVyc2lvbikpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGVybWl0dGVkSmF2YVZlcnNpb25zLmFkZCh0aGlzVmVyc2lvbik7Ci0gICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gamF2YVZlcnNpb25zID0gKFN0cmluZ1tdKXBlcm1pdHRlZEphdmFWZXJzaW9ucy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaj0wOyBqPGphdmFWZXJzaW9ucy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIEhhc2hTZXQgdGhpc0ZhY2V0U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBmb3IgKGludCBrPTA7IGs8cmVxdWlyZWRGYWNldFZlcnNpb25zLmxlbmd0aDsgaysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICBpZiAoaz09amF2YUZhY2V0SW5kZXgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gcmVxdWlyZWRGYWNldFZlcnNpb25zW2tdLmdldFByb2plY3RGYWNldFZlcnNpb24oKS5nZXRQcm9qZWN0RmFjZXQoKS5nZXRWZXJzaW9uKGphdmFWZXJzaW9uc1tqXSk7Ci0gICAgICAgICAgICAgICB0aGlzRmFjZXRTZXQuYWRkKHBmdik7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNba10uZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpOwotICAgICAgICAgICAgICAgdGhpc0ZhY2V0U2V0LmFkZChwZnYpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgbGlzdE9mRmFjZXRTZXRzLmFkZCh0aGlzRmFjZXRTZXQpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL1JldHVybiB0aGUgdW5pb24gb2YgcnVudGltZXMgZm9yIGFsbCB0aGUgZmFjZXRTZXRzLgotICAgIHJldHVybiBnZXRSdW50aW1lcygoU2V0W10pbGlzdE9mRmFjZXRTZXRzLnRvQXJyYXkobmV3IFNldFswXSkpOwotICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBmYWNldCBydW50aW1lIHN1cHBvcnRzIHRoZSBwcm92aWRlZAotICAgKiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4KLSAgICogCi0gICAqIEBwYXJhbSByZXF1aXJlZEZhY2V0VmVyc2lvbnMgYW4gYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBSZXF1aXJlZEZhY2V0VmVyc2lvbn0KLSAgICogQHBhcmFtIGZSdW50aW1lTmFtZSBuYW1lIG9mIGEge0BsaW5rIElSdW50aW1lfQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZhY2V0IHJ1bnRpbWUgc3VwcG9ydHMgdGhlIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQoUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMsIFN0cmluZyBmUnVudGltZU5hbWUpCi0gIHsKLSAgICBTZXQgZlJ1bnRpbWVzID0gZ2V0UnVudGltZXMocmVxdWlyZWRGYWNldFZlcnNpb25zKTsKLSAgICBJdGVyYXRvciBpdHIgPSBmUnVudGltZXMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKWl0ci5uZXh0KCk7Ci0gICAgICBpZiAocnVudGltZS5nZXROYW1lKCkuZXF1YWxzKGZSdW50aW1lTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHVuaW9uIG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgcHJvdmlkZWQgc2V0cyBvZiBmYWNldCB2ZXJzaW9ucy4KLSAgICogCi0gICAqIEBwYXJhbSBmYWNldFNldHMgYXJyYXkgb2YgU2V0cywgd2hlcmUgZWFjaCBTZXQgY29udGFpbnMgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259LgotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElSdW50aW1lfQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0UnVudGltZXMoU2V0W10gZmFjZXRTZXRzKSAgCi0gIHsKLSAgICBIYXNoU2V0IHVuaW9uU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZmFjZXRTZXRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNldCBmYWNldHMgPSBmYWNldFNldHNbaV07Ci0gICAgICBTZXQgcnVudGltZXMgPSBSdW50aW1lTWFuYWdlci5nZXRSdW50aW1lcyhmYWNldHMpOwotICAgICAgSXRlcmF0b3IgaXRyID0gcnVudGltZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKWl0ci5uZXh0KCk7Ci0gICAgICAgIGlmICghdW5pb25TZXQuY29udGFpbnMocnVudGltZSkpCi0gICAgICAgIHsKLSAgICAgICAgICB1bmlvblNldC5hZGQocnVudGltZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHVuaW9uU2V0OwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgZmFjZXQgcnVudGltZSBzdXBwb3J0cyB0aGUgcHJvdmlkZWQgc2V0IG9mIGZhY2V0IHZlcnNpb25zLgotICAgKiAKLSAgICogQHBhcmFtIGZhY2V0UnVudGltZSBhIGZhY2V0IHJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3RGYWNldFZlcnNpb25zIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZhY2V0IHJ1bnRpbWUgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIHNldCBvZiBmYWNldCB2ZXJzaW9ucy4KLSAgICogUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNSdW50aW1lU3VwcG9ydEZhY2V0cyhJUnVudGltZSBmYWNldFJ1bnRpbWUsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucykKLSAgewotICAJaWYgKCBmYWNldFJ1bnRpbWUgPT0gbnVsbCB8fCBwcm9qZWN0RmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAJCXJldHVybiBmYWxzZTsKLSAgCQotICAgIFNldCBydW50aW1lcyA9IFJ1bnRpbWVNYW5hZ2VyLmdldFJ1bnRpbWVzKHByb2plY3RGYWNldFZlcnNpb25zKTsKLSAgICBJdGVyYXRvciBpdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIElSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgIGlmIChydW50aW1lLmdldE5hbWUoKS5lcXVhbHMoZmFjZXRSdW50aW1lLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgZ3JlYXRlciB0aGFuIHZlcnNpb25CCi0gICAqIAotICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICogQHBhcmFtIHZlcnNpb25BIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmb3JtIDEuMi4zCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB2ZXJzaW9uQSBpcyBncmVhdGVyIHRoYW4gdmVyc2lvbkIsIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ3JlYXRlclRoYW4oU3RyaW5nIHZlcnNpb25BLCBTdHJpbmcgdmVyc2lvbkIpCi0gIHsKLSAgCWlmICh2ZXJzaW9uQSA9PSBudWxsIHx8IHZlcnNpb25CID09IG51bGwpCi0gIAkJcmV0dXJuIGZhbHNlOwotICAJCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0QSA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkEsICIuIik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0QiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkIsICIuIik7Ci0gICAgCi0gICAgaW50IHNpemVBID0gc3RBLmNvdW50VG9rZW5zKCk7Ci0gICAgaW50IHNpemVCID0gc3RCLmNvdW50VG9rZW5zKCk7Ci0gICAgCi0gICAgaW50IHNpemU7Ci0gICAgaWYgKHNpemVBIDwgc2l6ZUIpCi0gICAgewotICAgICAgc2l6ZSA9IHNpemVBOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBzaXplID0gc2l6ZUI7Ci0gICAgCi0gICAgZm9yIChpbnQgaT0wOyBpPHNpemU7IGkrKykKLSAgICB7Ci0gICAgICBpbnQgYSA9IEludGVnZXIucGFyc2VJbnQoc3RBLm5leHRUb2tlbigpKTsKLSAgICAgIGludCBiID0gSW50ZWdlci5wYXJzZUludChzdEIubmV4dFRva2VuKCkpOwotICAgICAgaWYgKGEhPWIpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBhID4gYjsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNpemVBID4gc2l6ZUI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZhY2V0IGhhcyBhbiBpZCB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBqYXZhIGZhY2V0Ci0gICAqIEBwYXJhbSBwZiBmYWNldAotICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGZhY2V0IGhhcyBhbiBpZCB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBqYXZhIGZhY2V0LCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YUZhY2V0KElQcm9qZWN0RmFjZXQgcGYpCi0gIHsKLSAgICBpZiAocGYgIT0gbnVsbCAmJiBwZi5lcXVhbHMoSmF2YUZhY2V0LkZBQ0VUKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHByb2plY3QgaXMgYSBmYWNldGVkIEphdmEgdXRpbGl0eSBwcm9qZWN0IG9yIGEgbm9uLWZhY2V0ZWQgSmF2YSBwcm9qZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QgYW4gSVByb2plY3QKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwcm92aWRlZCBwcm9qZWN0IGlzIGEgZmFjZXRlZCBKYXZhIHV0aWxpdHkgcHJvamVjdCAKLSAgICogb3IgYSBub24tZmFjZXRlZCBKYXZhIHByb2plY3QsIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0JICBpZiAocHJvamVjdCA9PSBudWxsKQotCSAgICByZXR1cm4gZmFsc2U7Ci0JICAKLSAgICAvL0NoZWNrIGlmIGl0J3MgYSBmYWNldGVkIHByb2plY3QKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9SZXR1cm4gdHJ1ZSBpZiBpdCdzIGEgdXRpbGl0eSBwcm9qZWN0Ci0gICAgICAgIGlmIChKMkVFVXRpbHMuaXNKYXZhQ29tcG9uZW50KHByb2plY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9TZWUgaWYgdGhlIGphdmEgZmFjZXQgaXMgdGhlIG9ubHkgb25lIGl0IGhhcy4KLSAgICAgICAgICBTZXQgZmFjZXRzID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICAgIGlmIChmYWNldHMuc2l6ZSgpPT0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilmYWNldHMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoaXNKYXZhRmFjZXQocGZ2LmdldFByb2plY3RGYWNldCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSBpZCBpcyBlcXVhbCB0byAidGVtcGxhdGUuanN0LnV0aWxpdHkiCi0gICAqIAotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCB0ZW1wbGF0ZSBpZAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIGlkIGlzIGVxdWFsIHRvICJ0ZW1wbGF0ZS5qc3QudXRpbGl0eSIsIAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXRpbGl0eVRlbXBsYXRlKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgaWYgKHRlbXBsYXRlSWQgIT0gbnVsbCAmJiBQcm9qZWN0RmFjZXRzTWFuYWdlci5pc1RlbXBsYXRlRGVmaW5lZCh0ZW1wbGF0ZUlkKSkKLSAgICB7Ci0gICAgICBpZiAodGVtcGxhdGVJZC5lcXVhbHMoInRlbXBsYXRlLmpzdC51dGlsaXR5IikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAgIAotICAJLyoqCi0gIAkgKiBSZXR1cm5zIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9uIG9mIGEgRUFSIHRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIGdpdmVuIHByb2plY3QuIAotICAJICogCi0gIAkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAJICogQHJldHVybiBBbiBhcnJheSBvZiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4gIElmIG5vIGNvbnN0cmFpbnRzIGNhbiBiZSBpbmZlcnJlZCBmcm9tIHRoZQotICAJICogcHJvamVjdCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWQuCi0gIAkgKi8KLQlwdWJsaWMgc3RhdGljIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gZ2V0UmVxdWlyZWRFQVJGYWNldFZlcnNpb25zKElQcm9qZWN0IHByb2plY3QpIHsKLSAgCQkKLQkJaW50IHZlcnNpb24gPSAwOwotICAJCQotICAJCWlmIChKYXZhRUVQcm9qZWN0VXRpbGl0aWVzLmlzRHluYW1pY1dlYlByb2plY3QocHJvamVjdCkpIHsKLSAgCQkJCi0gIAkJCXZlcnNpb24gPSBKMkVFVmVyc2lvblV0aWwuY29udmVydFdlYlZlcnNpb25TdHJpbmdUb0oyRUVWZXJzaW9uSUQoCi0gIAkJCQkJSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0SjJFRVByb2plY3RWZXJzaW9uKHByb2plY3QpKTsKLSAgCQl9Ci0gIAkJZWxzZSBpZiAoSmF2YUVFUHJvamVjdFV0aWxpdGllcy5pc0VKQlByb2plY3QocHJvamVjdCkpIHsKLSAgCQkJCi0gIAkJCXZlcnNpb24gPSBKMkVFVmVyc2lvblV0aWwuY29udmVydEVKQlZlcnNpb25TdHJpbmdUb0oyRUVWZXJzaW9uSUQoCi0gIAkJCQkJSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0SjJFRVByb2plY3RWZXJzaW9uKHByb2plY3QpKTsKLSAgCQl9Ci0gIAkJZWxzZSBpZiAoSmF2YUVFUHJvamVjdFV0aWxpdGllcy5pc0FwcGxpY2F0aW9uQ2xpZW50UHJvamVjdChwcm9qZWN0KSkgewotICAJCQkKLSAgCQkJdmVyc2lvbiA9IEoyRUVWZXJzaW9uVXRpbC5jb252ZXJ0QXBwQ2xpZW50VmVyc2lvblN0cmluZ1RvSjJFRVZlcnNpb25JRCgKLSAgCQkJCQlKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocHJvamVjdCkpOwotICAJCX0KLSAgCQllbHNlCi0gIAkJCS8vIHJldHVybiBlbXB0eSBhcnJheSwgbm8gY29uc3RyYWludHMKLSAgCQkJcmV0dXJuIG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblswXTsKLQkgIAotICAJCUlQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFKTsKLSAgCQlJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0LmdldFZlcnNpb24oSjJFRVZlcnNpb25VdGlsLmNvbnZlcnRWZXJzaW9uSW50VG9TdHJpbmcodmVyc2lvbikpOwotCi0gIAkJUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMV07Ci0gIAkJcmZ2WzBdID0gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uKCk7Ci0gIAkJcmZ2WzBdLnNldEFsbG93TmV3ZXIoZmFsc2UpOwkgIAotICAJCXJmdlswXS5zZXRQcm9qZWN0RmFjZXRWZXJzaW9uKHByb2plY3RGYWNldFZlcnNpb24pOwotICAJCQotICAJCXJldHVybiByZnY7Ci0gIAl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0V4dGVuc2lvblByZXNlbnQoKSB7Ci0JCQotCQlpZiAoZmFpbGVkVG9Mb2FkRGVsZWdhdGUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfSBpZiAoZGVsZWdhdGUgIT0gbnVsbCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsgIAotCQlJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludCgib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmludGVybmFsRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSIpOwotCQlpZiAocG9pbnQgPT0gbnVsbCkgewotCQkJZmFpbGVkVG9Mb2FkRGVsZWdhdGUgPSB0cnVlOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCUlFeHRlbnNpb25bXSBleHRlbnNpb25zID0gcG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotCi0JCS8vdGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHdlIGtub3cgdGhlcmUgd2lsbCBvbmx5IGJlIHplcm8gb3Igb25lIHBsdWdnZWQgaW4KLQkJaWYgKGV4dGVuc2lvbnMubGVuZ3RoID4gMCAmJiBleHRlbnNpb25zWzBdICE9IG51bGwpIHsKLQkJCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0ZW5zaW9uc1swXS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLQkJCWlmIChlbGVtZW50cy5sZW5ndGggPiAwICYmIGVsZW1lbnRzWzBdICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlkZWxlZ2F0ZSA9IChJRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSllbGVtZW50c1swXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy9kbyBub3RoaW5nLCBqdXN0IHJlcG9ydCB0aGF0IHdlIGZhaWxlZCB0byBsb2FkIHRoZSBleHRlbnNpb24KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmFpbGVkVG9Mb2FkRGVsZWdhdGUgPSB0cnVlOy8vc2V0IHRoaXMgc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgaXQgYWdhaW4KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZvbGRlclJlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9Gb2xkZXJSZXNvdXJjZUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmVjODMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZvbGRlclJlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBKYXZhIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4uamF2YTwvY29kZT4iIG9yICI8Y29kZT4uY2xhc3M8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBGb2xkZXJSZXNvdXJjZUZpbHRlciBleHRlbmRzIEFueUZpbHRlcgotewotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBGb2xkZXJSZXNvdXJjZUZpbHRlciAoKSB7IH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkZPTERFUl9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkZPTERFUl9GSUxURVJfREVTQzsKLSAgfQotCi0gcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAwLAotICAgICAgICBDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1QsCi0gICAgICAgIG51bGwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotCi0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GT0xERVIpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GT0xERVIsbmV3IE9iamVjdFtdIHtuYW1lfSksCi0gICAgICAgICAgbnVsbAotICAgICAgICApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9JRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSUZhY2V0T3BlcmF0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2YTY5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9JRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkwMzAzICAgMjQyNjM1IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgUmVtb3ZlIHVubmVjZXNzYXJ5IFVJIGRlcGVuZGVuY2llcyBmcm9tIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZTsKLQotcHVibGljIGludGVyZmFjZSBJRmFjZXRPcGVyYXRpb25EZWxlZ2F0ZSB7Ci0KLQkvKioKLQkgICogQWRkcyB0aGUgcHJvdmlkZWQgc2V0IG9mIGZhY2V0IHZlcnNpb25zIHRvIHRoZSBwcm92aWRlZCBmYWNldGVkIHByb2plY3QKLQkgICogCi0JICAqIEBwYXJhbSBmcHJvamVjdCBBIGZhY2V0ZWQgcHJvamVjdCB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotCSAgKiBAcGFyYW0gcHJvamVjdEZhY2V0VmVyc2lvbnMgQSBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLQkgICogQHJldHVybiBBbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLk9LIGlmIHRoZSBmYWNldCAKLQkgICogdmVyc2lvbnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSwgYW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YKLQkgICogSVN0YXR1cy5FUlJPUi4gCi0JICAqLwotCSBwdWJsaWMgSVN0YXR1cyBhZGRGYWNldHNUb1Byb2plY3QoZmluYWwgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0LCBmaW5hbCBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMpOwotCSAKLQkgLyoqCi0JICAgKiBDcmVhdGVzIGEgbmV3IGZhY2V0ZWQgcHJvamVjdCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lCi0JICAgKiAKLQkgICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBBIFN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRvIGJlIGNyZWF0ZWQKLQkgICAqIEByZXR1cm4gQW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5PSyBpZiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0JICAgKiB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkgb3IgaWYgYSBwcm9qZWN0IG9mIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkKLQkgICAqIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLiBPdGhlcndpc2UsIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBvZgotCSAgICogSVN0YXR1cy5FUlJPUi4gCi0JICAgKi8KLQkgIHB1YmxpYyBJU3RhdHVzIGNyZWF0ZU5ld0ZhY2V0ZWRQcm9qZWN0KGZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSk7Ci0JICAKLQkgIC8qKgotCSAgICogU2V0cyB0aGUgcHJvdmlkZWQgc2V0IG9mIGZhY2V0cyBhcyBmaXhlZCBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0JICAgKiAKLQkgICAqIEBwYXJhbSBmUHJvamVjdCBBIGZhY2V0ZWQgcHJvamVjdCB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotCSAgICogQHBhcmFtIGZpeGVkRmFjZXRzIEEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldH0KLQkgICAqIEByZXR1cm4gQW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5PSyBpZiB0aGUgZmFjZXRzIAotCSAgICogd2VyZSBzdWNjZXNzZnVsbHkgc2V0IGFzIGZpeGVkIGZhY2V0cyBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0LiAKLQkgICAqIE90aGVyd2lzZSwgYW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5FUlJPUi4KLQkgICAqIAotCSAgICogQHNlZSBJRmFjZXRlZFByb2plY3Qjc2V0Rml4ZWRQcm9qZWN0RmFjZXRzCi0JICAgKi8KLQkgIHB1YmxpYyBJU3RhdHVzIHNldEZpeGVkRmFjZXRzT25Qcm9qZWN0KGZpbmFsIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCwgZmluYWwgU2V0IGZpeGVkRmFjZXRzKTsKLQkgIAotCSAgLyoqCi0JICAgKiBCaW5kcyB0aGUgZmFjZXRlZCBwcm9qZWN0IHRvIHRoZSBmYWNldCBydW50aW1lCi0JICAgKiAKLQkgICAqIEBwYXJhbSBmUHJvamVjdCBBIGZhY2V0ZWQgcHJvamVjdCB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotCSAgICogQHBhcmFtIGZSdW50aW1lIEEgZmFjZXQgcnVudGltZQotCSAgICogQHJldHVybiBBbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLk9LIGlmIHRoZSBmYWNldGVkIHByb2plY3QKLQkgICAqIHdhcyBib3VuZCB0byB0aGUgZmFjZXQgcnVudGltZSBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSwgYW4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IG9mCi0JICAgKiBJU3RhdHVzLkVSUk9SLiAKLQkgICAqLwotCSAgcHVibGljIElTdGF0dXMgc2V0RmFjZXRSdW50aW1lT25Qcm9qZWN0KGZpbmFsIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCwgZmluYWwgSVJ1bnRpbWUgZlJ1bnRpbWUpOwotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSVNlcnZlckRlZmF1bHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSVNlcnZlckRlZmF1bHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzFmMWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0lTZXJ2ZXJEZWZhdWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci0KLQotLyoqCi0gKiBJbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgdG8gcHJvdmlkZSBsb2dpYyB0aGF0IGNhbiBiZSBwbHVnZ2VkIGludG8KLSAqIHRoZSBzZXJ2ZXIgZGVmYXVsdGluZyBhbGdvcml0aG0uIAotICogKFNlZSB0aGUgb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnNlcnZlckRlZmF1bHRlciBleHRlbnNpb24gcG9pbnQpICAKLSAqLwotcHVibGljIGludGVyZmFjZSBJU2VydmVyRGVmYXVsdGVyCi17Ci0gIAotICAvKioKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBTZXJ2ZXJJbmZvLiAKLSAgICogSWYgbm8gZXhpc3Rpbmcgc2VydmVyIG9yIHNlcnZlciB0eXBlIGlzIHJlY29tbWVuZGVkLCByZXR1cm4gbnVsbC4KLSAgICogSWYgYSBzZXJ2ZXIgdHlwZSBpcyByZWNvbW1lbmRlZCwgcmV0dXJuIGFuIGluc3RhbmNlIG9mIFNlcnZlckluZm8gd2l0aCBhIG5vbi1udWxsCi0gICAqIG5vbi1lbXB0eSBTdHJpbmcgZm9yIHRoZSBzZXJ2ZXJGYWN0b3J5SWQgYW5kIG51bGwgZm9yIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkLgotICAgKiBJZiBhIHNlcnZlciBpbnN0YW5jZSBpcyByZWNvbW1lbmRlZCwgcmV0dXJuIGFuIGluc3RhbmNlIG9mIFNlcnZlckluZm8gd2l0aCBhIG5vbi1udWxsCi0gICAqIG5vbi1lbXB0eSBTdHJpbmcgZm9yIHRoZSBzZXJ2ZXJGYWN0b3J5SWQgYW5kIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkLgotICAgKi8KLSAgcHVibGljIFNlcnZlckluZm8gcmVjb21tZW5kRGVmYXVsdFNlcnZlcihJUHJvamVjdCBwcm9qZWN0KTsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhTWVyZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhTWVyZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDkzYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSmF2YU1lcmdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAxMjIgICAyMTUwNDgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNjEzICAgMjM2NTIzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBPdmVyd3JpdGUgc2V0dGluZyBvbiBXZWIgc2VydmljZSB3aXphcmQgaXMgY291cGxlZCB3aXRoIHByZWZlcmVuY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvZGVnZW4ubWVyZ2UuamF2YS5KQ29udHJvbE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuLm1lcmdlLmphdmEuSk1lcmdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29kZWdlbi5tZXJnZS5qYXZhLmZhY2FkZS5GYWNhZGVIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvZGVnZW4udXRpbC5Db2RlR2VuVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudE1lcmdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JTWVyZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0Lk1lcmdlcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKgotICogSmF2YU1lcmdlciBoYW5kbGVzIHRoZSBtZXJnaW5nIG9mIHdvcmtzcGFjZSBmaWxlcyB1c2luZyBKTWVyZ2VyLiAgSWYgdGhlIFVSSXMgc3BlY2lmaWVkIGlzIG5vdCBhIGZpbGUKLSAqIGluIHRoZSB3b3Jrc3BhY2UsIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAqLwotcHVibGljIGNsYXNzIEphdmFNZXJnZXIgZXh0ZW5kcyBNZXJnZXIgaW1wbGVtZW50cyBJTWVyZ2VyIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU1RfV1MgPSAib3JnLmVjbGlwc2Uud3N0LndzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVSR0VfWE1MID0gIm1lcmdlLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpNRVJHRVIgPSAiam1lcmdlciI7Ci0JCi0JcHJpdmF0ZSBpbnQgc2l6ZSA9IDA7IAotCXByaXZhdGUgSUZpbGVbXSB3b3Jrc3BhY2VGaWxlczsKLQlwcml2YXRlIEpNZXJnZXJbXSBtZXJnZU1vZGVsczsKLQlwcml2YXRlIEpDb250cm9sTW9kZWwgak1lcmdlQ29udHJvbE1vZGVsID0gbnVsbDsKLQlwcml2YXRlIElTdGF0dXMgbG9hZFN0YXR1czsKLQkKLQkKLQkvKgotCSAqIENvbnZlcnQgdGhlIFVSSSBzdHJpbmdzIGluIHRoZSB1cmlzIGFycmF5IHRvIEVjbGlwc2UgSUZpbGVzIGFuZCBzdG9yZSBpbiB0aGUgd29ya3NwYWNlRmlsZXMgYXJyYXkuIAotCSAqIExvYWQgdGhlIHdvcmtzcGFjZUZpbGVzIGludG8gSk1lcmdlciBhbmQgc3RvcmUgaW4gdGhlIG1lcmdlck1vZGVscyBhcnJheS4gIAotCSAqIElmIHRoZSBtZXJnZXIgbW9kZWwgY2Fubm90IGJlIG9idGFpbmVkLCBudWxsIGlzIHN0b3JlZCBpbiB0aGUgbWVyZ2VyTW9kZWxzLiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXIjbG9hZChqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JCi0JcHVibGljIElTdGF0dXMgbG9hZChJRmlsZVtdIGZpbGVzKSB7Ci0JCQotCQlsb2FkU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJaWYgKGZpbGVzICE9IG51bGwpIHsKLQkJCXdvcmtzcGFjZUZpbGVzID0gZmlsZXM7Ci0JCQlQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCQlpZiAobWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSkgewotCQkJCS8vIGluaXRpYWxpemUgSk1lcmdlcgotCQkJCWluaXRpYWxpemUoKTsKLQkJCQkKLQkJCQlpZiAoak1lcmdlQ29udHJvbE1vZGVsICE9IG51bGwpIHsKLQkJCQkJLy8gSk1lcmdlciBpbml0aWFsaXplZCBwcm9wZXJseQotCQkJCQlzaXplID0gZmlsZXMubGVuZ3RoOwotCQkJCQltZXJnZU1vZGVscyA9IG5ldyBKTWVyZ2VyW3NpemVdOwotCQkJCQkKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQkJCUpNZXJnZXIgak1lcmdlciA9IG51bGw7Ci0JCQkJCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gbnVsbDsKLQkJCQkJCQotCQkJCQkJZmlsZSA9IGZpbGVzW2ldOwotCQkJCQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpKSB7CQkJCQkJCQkJCQkJCQkKLQkJCQkJCQl0cnkgewotCQkJCQkJCQlpblN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQkJCQkJaWYgKGluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJCQkJCWpNZXJnZXIgPSBuZXcgSk1lcmdlcihqTWVyZ2VDb250cm9sTW9kZWwpOwotCQkJCQkJCQkJak1lcmdlci5zZXRUYXJnZXRDb21waWxhdGlvblVuaXQoak1lcmdlci5jcmVhdGVDb21waWxhdGlvblVuaXRGb3JJbnB1dFN0cmVhbShpblN0cmVhbSkpOwotCQkJCQkJCQl9Ci0JCQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCWxvYWRTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX01FUkdFX0xPQUQsIGZpbGUpLCBlKTsKLQkJCQkJCQl9IGZpbmFsbHkgewotCQkJCQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCQlpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQkJCQkJCS8vIGlnbm9yZSBleGNlcHRpb25zIGluIGNsb3NpbmcgZmlsZQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQkJCQkKLQkJCQkJCX0KLQkJCQkJCW1lcmdlTW9kZWxzW2ldID0gak1lcmdlcjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbG9hZFN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgSk1lcmdlIG1vZGVsCi0JICogRmlsZSBtZXJnZS54bWwgaW4gV2ViU2VydmljZVBsdWdpbiBjb250YWlucyB0aGUgcnVsZXMgZm9yIHRoZSBtZXJnZS4KLQkgKiBJZiB0aGUgbWVyZ2UueG1sIGZpbGUgaXMgbm90IGZvdW5kLCBqTWVyZ2VDb250cm9sTW9kZWwgaXMgbGVhdmUgYXMgbnVsbC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQkJaWYgKGpNZXJnZUNvbnRyb2xNb2RlbCA9PSBudWxsKSB7Ci0JCQlGYWNhZGVIZWxwZXIgZmFjYWRlSGVscGVyID0gQ29kZUdlblV0aWwuaW5zdGFudGlhdGVGYWNhZGVIZWxwZXIoSk1lcmdlci5ERUZBVUxUX0ZBQ0FERV9IRUxQRVJfQ0xBU1MpOwotCQkJak1lcmdlQ29udHJvbE1vZGVsID0gbmV3IEpDb250cm9sTW9kZWwoKTsKLQotCQkJQnVuZGxlICAgICAgICB3c0J1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShXU1RfV1MpOwotCQkJSVBhdGggICAgICAgICBtZXJnZVBhdGggICAgICA9IG5ldyBQYXRoKCBKTUVSR0VSICkuYXBwZW5kKCBNRVJHRV9YTUwgKTsKLQkJCVVSTCAgICAgICAgICAgZmlsZVVSTCAgICAgICAgPSBGaWxlTG9jYXRvci5maW5kKCB3c0J1bmRsZSwgbWVyZ2VQYXRoLCBudWxsKTsKLQkJCWpNZXJnZUNvbnRyb2xNb2RlbC5pbml0aWFsaXplKGZhY2FkZUhlbHBlciwgZmlsZVVSTC50b1N0cmluZygpKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCQotCS8qKgotCSAqIE1lcmdlIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB3b3Jrc3BhY2VGaWxlcyB3aXRoIHRoZSBtZXJnZU1vZGVscyB0aGF0IGhhZCBiZWVuIHN0b3JlZCBlYXJsaWVyLiAgIAotCSAqIFRoZW4gd3JpdGUgdGhlIG1lcmdlZCBjb250ZW50cyBiYWNrIHRvIHRoZSBmaWxlLgotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHBhcmFtIHN0YXR1c0hhbmRsZXIKLQkgKiBAcmV0dXJuIElTdGF0dXMKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBtZXJnZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIpIHsKLQkJCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCWlmIChsb2FkU3RhdHVzICE9IG51bGwgJiYgbG9hZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBsb2FkU3RhdHVzOwotCQl9Ci0JCQotCQlQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCWlmIChtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpKSB7Ci0JCQlSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCQkJcmVzb3VyY2VDb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotCQkJcmVzb3VyY2VDb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKHRydWUpOwotCQkJcmVzb3VyY2VDb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJU3RyaW5nIG1lcmdlZENvbnRlbnQgPSBudWxsOwotCQkJCUpNZXJnZXIgak1lcmdlciA9IG51bGw7Ci0JCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBudWxsOwotCQkJCWJ5dGVbXSBidWYgPSBudWxsOwotCQkJCQotCQkJCWpNZXJnZXIgPSBtZXJnZU1vZGVsc1tpXTsKLQkJCQlmaWxlID0gd29ya3NwYWNlRmlsZXNbaV07Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBqTWVyZ2VyICE9IG51bGwgJiYgZmlsZS5leGlzdHMoKSkgeyAgCi0JCQkJCS8vIGEgSk1lcmdlciBtb2RlbCBvZiB0aGUgZmlsZSBleGlzdHMsIG1lcmdlIHRoZSBjb250ZW50cwotCQkJCQl0cnkgewotCQkJCQkJaW5TdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJCQlqTWVyZ2VyLnNldFNvdXJjZUNvbXBpbGF0aW9uVW5pdChqTWVyZ2VyLmNyZWF0ZUNvbXBpbGF0aW9uVW5pdEZvcklucHV0U3RyZWFtKGluU3RyZWFtKSk7Ci0JCQkJCQlqTWVyZ2VyLm1lcmdlKCk7Ci0JCQkJCQltZXJnZWRDb250ZW50ID0gak1lcmdlci5nZXRUYXJnZXRDb21waWxhdGlvblVuaXRDb250ZW50cygpOwkKLQkJCQkJCWlmIChtZXJnZWRDb250ZW50ICE9IG51bGwpIHsKLQkJCQkJCQl0cnkgewotCQkJCQkJCQlidWYgPSBtZXJnZWRDb250ZW50LmdldEJ5dGVzKGZpbGUuZ2V0Q2hhcnNldCgpKTsKLQkJCQkJCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJYnVmID0gbWVyZ2VkQ29udGVudC5nZXRCeXRlcygpOwotCQkJCQkJCX0KLQkJCQkJCQlpblN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWYpOwotCQkJCQkJCUlQYXRoIHRhcmdldFBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCQkJCQkJaWYgKHRhcmdldFBhdGggIT0gbnVsbCkgewotCQkJCQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihyZXNvdXJjZUNvbnRleHQsIHRhcmdldFBhdGgubWFrZUFic29sdXRlKCksIGluU3RyZWFtLAotCQkJCQkJCQkJICBtb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfRklMRV9NRVJHRSwgZmlsZSksIGUpOwotCQkJCQl9IGZpbmFsbHkgewotCQkJCQkJdHJ5IHsKLQkJCQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkJCQlpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCX0KLQkJCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkvLyBpZ25vcmUgZXhjZXB0aW9ucyBpbiBjbG9zaW5nIGZpbGUKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSmF2YVJlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhUmVzb3VyY2VGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0ZGEyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhUmVzb3VyY2VGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBKYXZhIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4uamF2YTwvY29kZT4iIG9yICI8Y29kZT4uY2xhc3M8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBKYXZhUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBBbnlGaWx0ZXIKLXsKLQotICAvKioKLSAgKiBBIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcjwvY29kZT4gY29uc3RydWN0ZWQgd2l0aCB0aGlzIHZhbHVlIHdpbGwKLSAgKiBhY2NlcHQgIjxjb2RlPi5qYXZhPC9jb2RlPiIsIGJ1dCBub3QgIjxjb2RlPi5jbGFzczwvY29kZT4iLCBvYmplY3RzLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgSkFWQV9GSUxFUyA9IChieXRlKTE7Ci0KLSAgLyoqCi0gICogQSA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXI8L2NvZGU+IGNvbnN0cnVjdGVkIHdpdGggdGhpcyB2YWx1ZSB3aWxsCi0gICogYWNjZXB0ICI8Y29kZT4uY2xhc3M8L2NvZGU+IiwgYnV0IG5vdCAiPGNvZGU+LmphdmE8L2NvZGU+Iiwgb2JqZWN0cy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENMQVNTX0ZJTEVTID0gKGJ5dGUpMjsKLQotICAvKioKLSAgKiBBIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcjwvY29kZT4gY29uc3RydWN0ZWQgd2l0aCB0aGlzIHZhbHVlIHdpbGwKLSAgKiBhY2NlcHQgYm90aCAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBBTExfRklMRVMgPSAoYnl0ZSkyNTU7Ci0KLSAgcHJpdmF0ZSBieXRlIGV4dGVuc2lvbnNfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBKYXZhUmVzb3VyY2VGaWx0ZXIgKCkKLSAgewotICAgIHRoaXMoQUxMX0ZJTEVTKTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBvYmplY3RzLCAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgb2JqZWN0cywKLSAgKiBvciBib3RoIGlmIHRoZSB2YWx1ZSBvZiA8Y29kZT5leHRlbnNpb25zPC9jb2RlPiBpcwotICAqIHtAbGluayAjSkFWQV9GSUxFU30sIHtAbGluayAjQ0xBU1NfRklMRVN9IG9yIHtAbGluayAjQUxMX0ZJTEVTfQotICAqIHJlc3BlY3RpdmVseS4KLSAgKiBAcGFyYW0gZXh0ZW5zaW9ucyBPbmUgb2YKLSAgKiB7QGxpbmsgI0pBVkFfRklMRVN9LCB7QGxpbmsgI0NMQVNTX0ZJTEVTfSBvciB7QGxpbmsgI0FMTF9GSUxFU30uCi0gICovCi0gIHB1YmxpYyBKYXZhUmVzb3VyY2VGaWx0ZXIgKCBieXRlIGV4dGVuc2lvbnMgKQotICB7Ci0gICAgZXh0ZW5zaW9uc18gPSBleHRlbnNpb25zOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuSkFWQV9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkpBVkFfRklMVEVSX0RFU0M7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpZiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIHJlcHJlc2VudHMgYSBKYXZhIHJlc291cmNlLgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVCwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgIGlmIChyZXNvdXJjZS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICAgIG51bGwKLSAgICAgICAgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWUgPSBvYmplY3QudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VwdHNOYW1lKG5hbWUpKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuSkFWQV9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTixuZXcgT2JqZWN0W10ge25hbWV9KSwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci0KLSAgLy8KLSAgLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIGlzIGFjY2VwdGFibGUgYmFzZWQgdXBvbiBpdHMgZXh0ZW5zaW9uCi0gIC8vIGFuZCB0aGUgdmFsdWUgb2YgdGhlIGV4dGVuc2lvbnNfIGJpdG1hc2suCi0gIC8vCi0gIHByaXZhdGUgYm9vbGVhbiBhY2NlcHRzTmFtZSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIHJldHVybiAoIAotICAgICAgKG5hbWUuZW5kc1dpdGgoIi5qYXZhIikgJiYgKChleHRlbnNpb25zXyAmIEpBVkFfRklMRVMpICE9IDApKSB8fAotICAgICAgKG5hbWUuZW5kc1dpdGgoIi5jbGFzcyIpICYmICgoZXh0ZW5zaW9uc18gJiBDTEFTU19GSUxFUykgIT0gMCkpCi0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vTWFwcGluZ1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9NYXBwaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2NDhkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9NYXBwaW5nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci0KLQotLyoqCi0qIFRoaXMgY2xhc3MgY29udGFpbnMgdXNlZnVsIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBTZXJ2ZXIgcGx1Z2luIGZ1bmN0aW9ucwotKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNYXBwaW5nVXRpbHMKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TRVJWSUNFX0VYVCA9ICJTZXJ2aWNlLndzZGwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9CSU5ESU5HX0VYVCA9ICJCaW5kaW5nLndzZGwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9WNF9TRVJWSUNFX0VYVCA9ICItc2VydmljZS53c2RsIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfVjRfQklORElOR19FWFQgPSAiLWJpbmRpbmcud3NkbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VYVEVOU0lPTiA9ICIud3NkbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TS0VMRVRPTl9QQUNLQUdFTkFNRSA9ICJzZXJ2aWNlIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBXU0RMIGZvbGRlciBwYXRoCi0gICogQHBhcmFtIHByb2plY3QgdGhlIHByb2plY3QKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXU0RMRm9sZGVyUGF0aCAoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICBJUGF0aCB3c2RsRm9sZGVyPW51bGw7Ci0vLyAgCUlQYXRoIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldFdlYk1vZHVsZVNlcnZlclJvb3QoIHByb2plY3QgKS5nZXRGdWxsUGF0aCgpOwotICAJSVBhdGggd2ViTW9kdWxlU2VydmVyUm9vdCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLSAgCWlmICh3ZWJNb2R1bGVTZXJ2ZXJSb290ICE9IG51bGwgKQotICAJCXdzZGxGb2xkZXIgPSB3ZWJNb2R1bGVTZXJ2ZXJSb290LmFwcGVuZChXU0RMX0ZPTERFUik7Ci0gICAgcmV0dXJuIHdzZGxGb2xkZXI7Ci0gIH0KLSAgICAKLQotICAgLyoqCi0gICogUmV0dXJucyB0aGUgYmFzZSBuYW1lIGJhc2VkIG9uIFdTREwgZmlsZSBuYW1lCi0gICogQHBhcmFtIHdzZGxOYW1lIFdTREwgZmlsZSBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VOYW1lIChTdHJpbmcgd3NkbExvY2F0aW9uICkKLSAgewotICAJU3RyaW5nIHdzZGxOYW1lPXdzZGxMb2NhdGlvbjsKLSAgCQotICAJaW50IGluZGV4ID0gd3NkbExvY2F0aW9uLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4IT0gLTEpIHsKLSAgICAgIHdzZGxOYW1lID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZyhpbmRleCsxLHdzZGxOYW1lLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIGJhc2VOYW1lPXdzZGxOYW1lOwotICAgIGlmICggd3NkbE5hbWUuZW5kc1dpdGgoREVGQVVMVF9TRVJWSUNFX0VYVCkgKSB7Ci0gICAgICBiYXNlTmFtZSA9IHdzZGxOYW1lLnN1YnN0cmluZygwLCh3c2RsTmFtZS5sZW5ndGgoKSAtIERFRkFVTFRfU0VSVklDRV9FWFQubGVuZ3RoKCkpKTsKLSAgICB9IGVsc2UgaWYgKCB3c2RsTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKERFRkFVTFRfVjRfU0VSVklDRV9FWFQpICkgewotICAgICAgYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCkgLSBERUZBVUxUX1Y0X1NFUlZJQ0VfRVhULmxlbmd0aCgpKSk7Ci0gICAgfSBlbHNlIGlmICh3c2RsTmFtZS5lbmRzV2l0aChERUZBVUxUX0JJTkRJTkdfRVhUKSkgewotICAgICAgYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCktREVGQVVMVF9CSU5ESU5HX0VYVC5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSBpZiAod3NkbE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChERUZBVUxUX1Y0X0JJTkRJTkdfRVhUKSkgewotICAgICAgYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCktREVGQVVMVF9WNF9CSU5ESU5HX0VYVC5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSBpZiAod3NkbE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChXU0RMX0VYVEVOU0lPTikpIHsKLSAgICAJYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCkgLSBXU0RMX0VYVEVOU0lPTi5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBubyByZWNvZ25pemFibGUgc3VmZml4LCBqdXN0IHJlbW92ZSBleHRlbnNpb24sIGlmIGFueQotICAgICAgaW50IGluZGV4NCA9IGJhc2VOYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICBpZiAoaW5kZXg0IT0tMSkKLSAgICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXg0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJhc2VOYW1lOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1Byb3BlcnRpZXNSZXNvdXJjZUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUHJvcGVydGllc1Jlc291cmNlRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNjc5ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUHJvcGVydGllc1Jlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBraW5kIG9mIEZpbHRlciB0aGF0IGFjY2VwdHMgb25seSBvYmplY3RzCi0qIHdoaWNoIGluZGljYXRlIGEgSmF2YSByZXNvdXJjZS4gSW4gcGFydGljdWxhciwgYW55Ci0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9IHdob3NlCi0qIHBhdGhuYW1lLCBvciBhbnkgb2JqZWN0IHdob3NlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcwotKiByZXR1cm5lZCBieSA8Y29kZT50b1N0cmluZygpPC9jb2RlPiwgZW5kcyBpbgotKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBvciAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgd2lsbCBiZSBhY2NlcHRlZC4KLSogQWxsIG90aGVyIG9iamVjdHMgd2lsbCBiZSByZWplY3RlZC4KLSovCi1wdWJsaWMgY2xhc3MgUHJvcGVydGllc1Jlc291cmNlRmlsdGVyIGV4dGVuZHMgQW55RmlsdGVyCi17Ci0gCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBQcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXIgKCkKLSAgewotICAgIAotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPUEVSVElFU19GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST1BFUlRJRVNfRklMVEVSX0RFU0M7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpZiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIHJlcHJlc2VudHMgYSBKYXZhIHJlc291cmNlLgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVCwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgIGlmIChyZXNvdXJjZS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICAgIG51bGwKLSAgICAgICAgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWUgPSBvYmplY3QudG9TdHJpbmcoKTsKLSAgICB9Ci0KLQlpZiAoIW5hbWUuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgMCwKLSAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9QRVJUSUVTX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICBudWxsCi0gICAgICApOwotICAgIH0KLQotICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsIiIsbnVsbCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUmVxdWlyZWRGYWNldFZlcnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1JlcXVpcmVkRmFjZXRWZXJzaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZDJhYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUmVxdWlyZWRGYWNldFZlcnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLQotcHVibGljIGNsYXNzIFJlcXVpcmVkRmFjZXRWZXJzaW9uCi17Ci0gIHByaXZhdGUgSVByb2plY3RGYWNldFZlcnNpb24gcHJvamVjdEZhY2V0VmVyc2lvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGFsbG93TmV3ZXI7Ci0gIHByaXZhdGUgSVByb2plY3RGYWNldFZlcnNpb25bXSBhbGxvd2VkUHJvamVjdEZhY2V0VmVyc2lvbnM7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRBbGxvd05ld2VyKCkKLSAgewotICAgIHJldHVybiBhbGxvd05ld2VyOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldEFsbG93TmV3ZXIoYm9vbGVhbiBhbGxvd05ld2VyKQotICB7Ci0gICAgdGhpcy5hbGxvd05ld2VyID0gYWxsb3dOZXdlcjsKLSAgfQotICBwdWJsaWMgSVByb2plY3RGYWNldFZlcnNpb24gZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdEZhY2V0VmVyc2lvbjsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0RmFjZXRWZXJzaW9uKElQcm9qZWN0RmFjZXRWZXJzaW9uIHByb2plY3RGYWNldFZlcnNpb24pCi0gIHsKLSAgICB0aGlzLnByb2plY3RGYWNldFZlcnNpb24gPSBwcm9qZWN0RmFjZXRWZXJzaW9uOwotICB9ICAKLSAgcHVibGljIElQcm9qZWN0RmFjZXRWZXJzaW9uW10gZ2V0QWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zKCkgIAotICB7Ci0gICAgaWYgKGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIEFycmF5TGlzdCB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIG1pbnBmdiA9IGdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgIHZlcnNpb25zLmFkZChtaW5wZnYpOwotICAgICAgLy9JZiBhbGxvdy1uZXdlciBpcyB0cnVlLCBhZGQgYWxsIHRoZSB2ZXJzaW9ucyBncmVhdGVyIHRoYW4gdGhlIG1pbiB2ZXJzaW9uLgotICAgICAgaWYgKGdldEFsbG93TmV3ZXIoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG1pblZlcnNpb24gPSBtaW5wZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICBJdGVyYXRvciBhbGxWZXJzaW9uc0l0ciA9IG1pbnBmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRWZXJzaW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChhbGxWZXJzaW9uc0l0ci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB0ZXN0cGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWFsbFZlcnNpb25zSXRyLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgdGVzdFZlcnNpb24gPSB0ZXN0cGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoRmFjZXRVdGlscy5ncmVhdGVyVGhhbih0ZXN0VmVyc2lvbiwgbWluVmVyc2lvbikpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbnMuYWRkKHRlc3RwZnYpOyAgICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9ucyA9IChJUHJvamVjdEZhY2V0VmVyc2lvbltdKXZlcnNpb25zLnRvQXJyYXkobmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uWzBdKTsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9uczsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1NlcnZlckluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1NlcnZlckluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYyNWNiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9TZXJ2ZXJJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXIgMjUsIDIwMDQKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFNlcnZlckluZm8KLXsKLSAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLSAgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlckZhY3RvcnlJZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgVGhlIHNlcnZlckZhY3RvcnlJZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIHRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlckluc3RhbmNlSWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlckluc3RhbmNlSWQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZUlkIFRoZSBzZXJ2ZXJJbnN0YW5jZUlkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUGFyc2VyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFBhcnNlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkZDE4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUGFyc2VyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogCi0gKiBUaGUgZmFjdG9yeSBjbGFzcyBjYW4gYmUgdXNlZCB0byBnZXQgYXQgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlCi0gKiBXU0RMIHBhcnNlci4gIE5vdGU6ICBUaGlzIGNsYXNzIGlzIHRlbXBvcmFyeS4gIFdlIHdpbGwgcHJvYmFibHkgY29tZQotICogdXAgd2l0aCBhIGJldHRlciBtZXRob2Qgb2YgaGFuZGxpbmcgcGFzc2luZyBhcm91bmQgdGhlIHBhcnNlci4KLSAqCi0gKi8KLS8vVE9ETyBXZSBuZWVkIHRvIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHBhc3MgYXJvdW5kIHRoZSBwYXJzZXIgdGhhbgotLy8gICAgIHVzaW5nIHRoaXMgc2luZ2xldG9uIGZhY3RvcnkuICBIb3BlZnVsbHksIHdlIGNhbiB0aGVuIGRlbGV0ZQotLy8gICAgIHRoaXMgY2xhc3MuCi1wdWJsaWMgY2xhc3MgV1NETFBhcnNlckZhY3RvcnkgCi17Ci0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlcl87Ci0gIAotICBwcml2YXRlIFdTRExQYXJzZXJGYWN0b3J5KCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdTRExQYXJzZXIoKQotICB7Ci0gICAgaWYoIHBhcnNlcl8gPT0gbnVsbCApCi0JewotCSAgcGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCX0KLQkKLQlyZXR1cm4gcGFyc2VyXzsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGtpbGxQYXJzZXIoKQotICB7Ci0gICAgcGFyc2VyXyA9IG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1dTRExSZXNvdXJjZUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFJlc291cmNlRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZDM3MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFJlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBraW5kIG9mIEZpbHRlciB0aGF0IGFjY2VwdHMgb25seSBvYmplY3RzCi0qIHdoaWNoIGluZGljYXRlIGEgV1NETCByZXNvdXJjZS4gSW4gcGFydGljdWxhciwgYW55Ci0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9IHdob3NlCi0qIHBhdGhuYW1lLCBvciBhbnkgb2JqZWN0IHdob3NlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcwotKiByZXR1cm5lZCBieSA8Y29kZT50b1N0cmluZygpPC9jb2RlPiwgZW5kcyBpbgotKiAiPGNvZGU+LndzZGw8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBBbnlGaWx0ZXIKLXsKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5XU0RMUmVzb3VyY2VGaWx0ZXI8L2NvZGU+LgotICAqLwotICBwdWJsaWMgV1NETFJlc291cmNlRmlsdGVyICgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLldTRExfRklMVEVSX05BTUU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gQ29uc3VtcHRpb25NZXNzYWdlcy5XU0RMX0ZJTFRFUl9ERVNDOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogZGVzY3JpYmluZyB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPidzIGFzc2Vzc21lbnQgb2YKLSAgKiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gQW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgaWYgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4KLSAgKiByZXByZXNlbnRzIGEgV1NETCByZXNvdXJjZS4KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAwLAotICAgICAgICBDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1QsCi0gICAgICAgIG51bGwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotCi0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GSUxFKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgICAwLAotICAgICAgICAgIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OT1RfRklMRSxuZXcgT2JqZWN0W10ge25hbWV9KSwKLSAgICAgICAgICBudWxsCi0gICAgICAgICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lID0gb2JqZWN0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgaWYgKCFuYW1lLmVuZHNXaXRoKCIud3NkbCIpKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuV1NETF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTixuZXcgT2JqZWN0W10ge25hbWV9KSwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwNTg1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHJlZ2lzdHJ5IG9mIFdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUgb2JqZWN0cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkKLXsKLQotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeSBpbnN0YW5jZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIFN0YXJ0U2VydmVyVHlwZXM7Ci0KLSAgLy8KLSAgLy8gTG9hZHMgV2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZSBvYmplY3RzIGludG8gdGhpcyByZWdpc3RyeS4KLSAgLy8gU2VlIG1ldGhvZCBnZXRJbnN0YW5jZSgpLgotICAvLwotICBwcml2YXRlIHZvaWQgbG9hZCAoKQotICB7Ci0gICAgU3RhcnRTZXJ2ZXJUeXBlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIik7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICB0cnkgCi0gICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGZhY3RvcnlJZF8gPSBlbGVtLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0JCSAgU3RhcnRTZXJ2ZXJUeXBlcy5wdXQoZmFjdG9yeUlkXywgZWxlbSk7Ci0JICAKLSAgICAgIH0gCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIElMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICAgICAgbG9nLmxvZyhJTG9nLkVSUk9SLCA1MDQ3LCB0aGlzLCAibG9hZCIsIGUpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5IGdldEluc3RhbmNlICgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IFdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5KCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgIHB1YmxpYyBPYmplY3QgZ2V0U2VydmVyU3RhcnRCeVR5cGVJZCAoU3RyaW5nIHR5cGVJRCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgIHsKLSAgICBpZiAodHlwZUlEPT1udWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KVN0YXJ0U2VydmVyVHlwZXMuZ2V0KHR5cGVJRCkpLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gIH0KLSAgCi0gICBwdWJsaWMgYm9vbGVhbiBpc1JlbW92ZUVBUlJlcXVpcmVkKFN0cmluZyB0eXBlSWQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLSAgIAlpZiAodHlwZUlkIT1udWxsKSB7Ci0gICAJCUlDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gKElDb25maWd1cmF0aW9uRWxlbWVudClTdGFydFNlcnZlclR5cGVzLmdldCh0eXBlSWQpOwotICAgCQlpZiAoZWxlbSE9bnVsbCl7Ci0gICAJCQlTdHJpbmcgdmFsdWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgicmVtb3ZlRUFSIik7Ci0gICAJCQlpZiAodmFsdWUhPW51bGwpewotICAgCQkJCXJldHVybiBCb29sZWFuLnZhbHVlT2YodmFsdWUpLmJvb2xlYW5WYWx1ZSgpOwotICAgCQkJfQotICAgCQl9Ci0gICAJfQotCXJldHVybiB0cnVlOyAgIAkJIAotICAgfSAgIAotfQotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZGI5NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4uCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEubGFuZy5DbGFzcywgamF2YS5iZWFucy5CZWFuRGVzY3JpcHRvci4KLSovCi1wdWJsaWMgY2xhc3MgQXJyYXlFbGVtZW50IGV4dGVuZHMgVHlwZUVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQVJSQVlfTkFNRSA9ICIxMDEwMTAxMGFycmF5MTAxMDEwMTAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfTUVUSE9EUyA9ICJyZWxtZXRob2RzIjsKLSAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIHByb2plY3RFbGVtZW50IFRoZSBwcm9qZWN0IHRoaXMgQmVhbiBiZWxvbmdzIHRvLgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50IChTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMobmFtZSxuZXcgQmFzaWNNb2RlbCgiUHJvamVjdCIpLHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIHBhcmFtZXRlckVsZW1lbnQgVGhlIHBhcmFtZXRlciB0aGlzIEJlYW4gYmVsb25ncyB0by4KLSAgKi8KLSAgcHVibGljIEFycmF5RWxlbWVudCAoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLGJvb2xlYW4gaXNSb290KQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCxUeXBlRWxlbWVudC5BUlJBWSk7Ci0gICAgaWYoaXNSb290KSBtb2RlbC5zZXRSb290RWxlbWVudCh0aGlzKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuUk9PVDsKLSAgfQotICAKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIGZvciB0aGUgY2FzZSB3aGVuIHRoaXMgaXMgbm90IHRoZSByb290IG9iamVjdAotICAqIGhlcmUgaXQgcmVwcmVzZW50cyBjb21wbGV4IHR5cGVzCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBiZWFuIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBBcnJheUVsZW1lbnQgKCBQYXJhbWV0ZXJFbGVtZW50IHBhcmFtZXRlckVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxwYXJhbWV0ZXJFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5BUlJBWSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LlBBUkFNRVRFUl9PV05FUjsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIGZvciB0aGUgY2FzZSB3aGVuIHRoaXMgaXMgbm90IHRoZSByb290IG9iamVjdAotICAqIGhlcmUgaXQgcmVwcmVzZW50cyBjb21wbGV4IHR5cGVzCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBQYXJhbWV0ZXJFbGVtZW50LgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50ICggQXR0cmlidXRlRWxlbWVudCBhdHRyaWJ1dGVFbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYXR0cmlidXRlRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQVJSQVkpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5BVFRSSUJVVEVfT1dORVI7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBvYmplY3QKLSAgKiBoZXJlIGl0IHJlcHJlc2VudHMgY29tcGxleCB0eXBlcwotICAqIEBwYXJhbSBGaWVsZEVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBQYXJhbWV0ZXJFbGVtZW50LgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50ICggRmllbGRFbGVtZW50IGZpZWxkRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGZpZWxkRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQVJSQVkpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5GSUVMRF9PV05FUjsKLSAgfQotCi0KLSAgLyoKLSAgKiBkZXRlcm1pbmUgd2V0aGVyIHRoaXMgaXMgYW4gb2JqZWN0IGFycmF5IG9yCi0gICogcHJpbWl0aXZlIGFycmF5Ci0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIEFSUkFZX05BTUUgKyBnZXROYW1lKCk7Ci0gIH0KLQotIAotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTI1MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BcnJheVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMiAgIDIxMDY5MiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgcmVjb2duaXplZCByZXR1cm4gdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgUmVjb2duaXplZFJldHVyblR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBBcnJheVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcyhUeXBlRmFjdG9yeS5BUlJBWV9OQU1FLHR5cGVOYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBBcnJheVR5cGUoU3RyaW5nIG5hbWUsU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0gCi0KLSAKLSAgIC8qKgotICAqIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IGRpY3RhdGVzIGhvdyB3ZSB3YW50IHRvIGRpc3BsYXkgdGhpcyB0eXBlIAotICAqIHVwb24gcmVjZWl2aW5nIGl0IGFzIGEgcmV0dXJuIGZyb20gYSBwcm94eSBtZXRob2QKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHRoZSB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgVGhlIGRpc3BsYXkgc3RyaW5nCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZUNvbnZlcnNpb24oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgCi0gICAgU3RyaW5nIG5vbkJlYW4gPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmcgdGVtcCIrIGdldFVuaXF1ZU5hbWUoKSArICIgPSBudWxsOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgCQkJCSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImlmKCIgKyBuYW1lICsgIiAhPSBudWxsKXsiICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgIAkJCQkgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJqYXZhLnV0aWwuTGlzdCBsaXN0IiArIGdldFVuaXF1ZU5hbWUoKSArICI9IGphdmEudXRpbC5BcnJheXMuYXNMaXN0KCIgKyBuYW1lICsgIik7IiArU3RyaW5nVXRpbHMuTkVXTElORQotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJ0ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsiID0gbGlzdCIgKyBnZXRVbmlxdWVOYW1lKCkgKyAiLnRvU3RyaW5nKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9dGVtcCIrIGdldFVuaXF1ZU5hbWUoKSArIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIG5vbkJlYW47Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BdHRyaWJ1dGVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzN2NmNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuIG1ldGhvZCBwYXJhbWV0ZXIuCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEuYmVhbnMuUGFyYW1ldGVyRGVzY3JpcHRvci4KLSovCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudCBpbXBsZW1lbnRzIEF0dHJpYnV0ZUVsZW1lbnRUeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9PV05JTkdfQkVBTiA9ICJvd25pbmdiZWFuIjsKLQotICBwcml2YXRlIFN0cmluZyBmU2V0dGVyTWV0aG9kOwotICBwcml2YXRlIFN0cmluZyBmR2V0dGVyTWV0aG9kOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIHRoaXMgdGFrZXMgdGhlIG93bmluZyBiZWFuLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIGJlYW5FbGVtZW50IHRoZSBiZWFuIHRoYXQgb3ducyB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIEF0dHJpYnV0ZUVsZW1lbnQgKCBCZWFuRWxlbWVudCBiZWFuRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGJlYW5FbGVtZW50LFJFTF9PV05JTkdfQkVBTixCZWFuRWxlbWVudC5SRUxfQVRUUklCVVRFUyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNldHRlck1ldGhvZChTdHJpbmcgc2V0dGVyTWV0aG9kKQotICB7Ci0gICAgZlNldHRlck1ldGhvZCA9IHNldHRlck1ldGhvZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0dGVyTWV0aG9kKCkKLSAgewotICAgIHJldHVybiBmU2V0dGVyTWV0aG9kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRHZXR0ZXJNZXRob2QoKQotICB7Ci0gICAgcmV0dXJuIGZHZXR0ZXJNZXRob2Q7Ci0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0R2V0dGVyTWV0aG9kKFN0cmluZyBnZXR0ZXJNZXRob2QpCi0gIHsKLSAgICBmR2V0dGVyTWV0aG9kID0gZ2V0dGVyTWV0aG9kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXR0ZXJTaWduYXR1cmUoU3RyaW5nIGF0dHJpYnV0ZSkKLSAgewotICAgIGludCBicmFja2V0ID0gZlNldHRlck1ldGhvZC5pbmRleE9mKCIoIik7Ci0gICAgYnJhY2tldCsrOwotICAgIFN0cmluZyBzZXR0ZXIgPSBmU2V0dGVyTWV0aG9kLnN1YnN0cmluZygwLGJyYWNrZXQpOwotICAgIFN0cmluZyBmdWxsU2V0dGVyID0gc2V0dGVyICsgYXR0cmlidXRlICsgIik7IjsKLSAgIAotICAgIHJldHVybiBmdWxsU2V0dGVyOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgQmVhbiB0aGF0IG93bnMgdGhpcyBBdHRyaWJ1dGUuCi0gICogQHJldHVybiBCZWFuRWxlbWVudCBUaGUgYmVhbiB0aGF0IG93bnMgdGhpcyBhdHRyaWJ1dGUuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCBnZXRPd25pbmdCZWFuRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05JTkdfQkVBTik7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoQmVhbkVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHR5cGUgdGhhdCBpcyBvd25lZCBieSB0aGlzIGF0dHJpYnV0dGUuCi0gICogQHJldHVybiBUeXBlRWxlbWVudCBUaGUgVHlwZSB0aGF0IG9mIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgVHlwZUVsZW1lbnQgZ2V0VHlwZUVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfVFlQRSk7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoVHlwZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXR0cmlidXRlRWxlbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BdHRyaWJ1dGVFbGVtZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBiNmZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BdHRyaWJ1dGVFbGVtZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuIG1ldGhvZCBwYXJhbWV0ZXIuCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEuYmVhbnMuUGFyYW1ldGVyRGVzY3JpcHRvci4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIEF0dHJpYnV0ZUVsZW1lbnRUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIHZvaWQgc2V0U2V0dGVyTWV0aG9kKFN0cmluZyBzZXR0ZXJNZXRob2QpOwotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlck1ldGhvZCgpOwotICBwdWJsaWMgU3RyaW5nIGdldEdldHRlck1ldGhvZCgpOwotICBwdWJsaWMgdm9pZCBzZXRHZXR0ZXJNZXRob2QoU3RyaW5nIGdldHRlck1ldGhvZCk7Ci0gIHB1YmxpYyBCZWFuRWxlbWVudCBnZXRPd25pbmdCZWFuRWxlbWVudCAoKTsKLSAgcHVibGljIFR5cGVFbGVtZW50IGdldFR5cGVFbGVtZW50ICgpOwotICAvKioKLSAgKiBSZXR1cm4gdGhlIHNpZ25hdHVyZSB3aXRoIHRoaXMgdmFsdWUgYXMgdGhlIHBhcm1ldGVyCi0gICoKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXR0ZXJTaWduYXR1cmUoU3RyaW5nIGF0dHJpYnV0ZSk7Ci0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmVhbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWM5ZDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYxMiAgIDE0NTQzMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmEgYmVhbi4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5sYW5nLkNsYXNzLCBqYXZhLmJlYW5zLkJlYW5EZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBCZWFuRWxlbWVudCBleHRlbmRzIFR5cGVFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNUQVRFTEVTU19CRUFOID0gIjEwMTAxMDEwc3RhdGVsZXNzYmVhbjEwMTAxMDEwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX01FVEhPRFMgPSAicmVsbWV0aG9kcyI7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IFJFQURPTkxZID0gMDsKLSAgcHVibGljIHN0YXRpYyBpbnQgV1JJVEVPTkxZID0gMTsKLSAgcHVibGljIHN0YXRpYyBpbnQgUkVBRFdSSVRFID0gMjsKLSAgcHJpdmF0ZSBpbnQgYXR0cmliID0gMjsKLSAgCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gcHJvamVjdEVsZW1lbnQgVGhlIHByb2plY3QgdGhpcyBCZWFuIGJlbG9uZ3MgdG8uCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCAoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzKG5hbWUsbmV3IEJhc2ljTW9kZWwoIlByb2plY3QiKSx0cnVlKTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIAotICAqIEBwYXJhbSBwYXJhbWV0ZXJFbGVtZW50IFRoZSBwYXJhbWV0ZXIgdGhpcyBCZWFuIGJlbG9uZ3MgdG8uCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCAoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLGJvb2xlYW4gaXNSb290KQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCxUeXBlRWxlbWVudC5CRUFOKTsKLSAgICBpZihpc1Jvb3QpIG1vZGVsLnNldFJvb3RFbGVtZW50KHRoaXMpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5ST09UOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBub3QgdGhlIHJvb3Qgb2JqZWN0Ci0gICogaGVyZSBpdCByZXByZXNlbnRzIGNvbXBsZXggdHlwZXMKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIGJlYW4gZWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50ICggUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUscGFyYW1ldGVyRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQkVBTik7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LlBBUkFNRVRFUl9PV05FUjsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIGZvciB0aGUgY2FzZSB3aGVuIHRoaXMgaXMgbm90IHRoZSByb290IG9iamVjdAotICAqIGhlcmUgaXQgcmVwcmVzZW50cyBjb21wbGV4IHR5cGVzCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBQYXJhbWV0ZXJFbGVtZW50LgotICAqLwotICBwdWJsaWMgQmVhbkVsZW1lbnQgKCBBdHRyaWJ1dGVFbGVtZW50IGF0dHJpYnV0ZUVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxhdHRyaWJ1dGVFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5CRUFOKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuQVRUUklCVVRFX09XTkVSOwotICAgIGF0dHJpYkZ1bmN0aW9uKGF0dHJpYnV0ZUVsZW1lbnQpOwotICB9Ci0gCi0gIHByaXZhdGUgdm9pZCBhdHRyaWJGdW5jdGlvbihBdHRyaWJ1dGVFbGVtZW50IGF0dHJpYnV0ZUVsZW1lbnQpewotCWlmKGF0dHJpYnV0ZUVsZW1lbnQuZ2V0R2V0dGVyTWV0aG9kKCkgIT0gbnVsbCAmJiBhdHRyaWJ1dGVFbGVtZW50LmdldFNldHRlck1ldGhvZCgpICE9IG51bGwpIGF0dHJpYiA9IFJFQURXUklURTsKLQllbHNlIGlmKGF0dHJpYnV0ZUVsZW1lbnQuZ2V0R2V0dGVyTWV0aG9kKCkgPT0gbnVsbCAmJiBhdHRyaWJ1dGVFbGVtZW50LmdldFNldHRlck1ldGhvZCgpICE9IG51bGwpIGF0dHJpYiA9IFdSSVRFT05MWTsKLQllbHNlIGlmKGF0dHJpYnV0ZUVsZW1lbnQuZ2V0R2V0dGVyTWV0aG9kKCkgIT0gbnVsbCAmJiBhdHRyaWJ1dGVFbGVtZW50LmdldFNldHRlck1ldGhvZCgpID09IG51bGwpIGF0dHJpYiA9IFJFQURPTkxZOwotICB9Ci0gIAotICAgLyoqCi0gICogQ29uc3RydWN0b3IgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBub3QgdGhlIHJvb3Qgb2JqZWN0Ci0gICogaGVyZSBpdCByZXByZXNlbnRzIGNvbXBsZXggdHlwZXMKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIFBhcmFtZXRlckVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCAoIEZpZWxkRWxlbWVudCBmaWVsZEVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxmaWVsZEVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LkJFQU4pOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5GSUVMRF9PV05FUjsKLSAgCi0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBNZXRob2Qgb2JqZWN0cyBvZiB0aGlzIEJlYW4uCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBBbGwgTWV0aG9kIG9iamVjdHMgb2YgdGhpcyBCZWFuLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0TWV0aG9kcyAoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9NRVRIT0RTKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBNZXRob2Qgb2JqZWN0cyBvZiB0aGlzIEJlYW4uCi0gICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBNZXRob2Qgb2JqZWN0cyBvZiB0aGlzIEJlYW4uCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZNZXRob2RFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGdldE51bWJlck9mRWxlbWVudHMoUkVMX01FVEhPRFMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICBpZihpc1N0YXRlTGVzcygpKSByZXR1cm4gU1RBVEVMRVNTX0JFQU4gKyBnZXROYW1lKCk7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0QXR0cmliKCkKLSAgewotICAgIHJldHVybiBhdHRyaWI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEF0dHJpYihpbnQgYXR0cmliKQotICB7Ci0gICAgdGhpcy5hdHRyaWIgPSBhdHRyaWI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzU3RhdGVMZXNzKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGVhID0gZ2V0RWxlbWVudHMoVHlwZUVsZW1lbnQuUkVMX0FUVFJJQlVURVMpOwotICAgIEVudW1lcmF0aW9uIGVmID0gZ2V0RWxlbWVudHMoVHlwZUVsZW1lbnQuUkVMX0ZJRUxEUyk7Ci0gICAgaWYoZWEuaGFzTW9yZUVsZW1lbnRzKCkgfHwgZWYuaGFzTW9yZUVsZW1lbnRzKCkpIHJldHVybiBmYWxzZTsKLSAgICBlbHNlIHJldHVybiB0cnVlOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0ZDZhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5GaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tb24uU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSAqIFR5cGVGYWN0b3J5Ci0gKiBDcmVhdGlvbiBkYXRlOiAoNC8xMC8yMDAxIDEyOjQxOjQ4IFBNKQotICogQGF1dGhvcjogR2lsYmVydCBBbmRyZXdzCi0gKi8KLXB1YmxpYyBjbGFzcyBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFVFVSTl9QQVJBTV9OQU1FPSJyZXR1cm5wIjsKLQotICBwcml2YXRlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeSgpe30KLQotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgZ2V0QmVhbk1vZGVsRWxlbWVudChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KG9iamVjdCxudWxsLG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEJlYW5Nb2RlbEVsZW1lbnQoT2JqZWN0IG9iamVjdCxFbGVtZW50IHBhcmVudEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQob2JqZWN0LHBhcmVudEVsZW1lbnQsbnVsbCk7Ci0gIH0KLSAgCi0gLyoKLSAgKiBUYWtlIGluIGFuIG9iamVjdCBhbmQgcmV0dXJuIGFuIGVsZW1lbnQgZGVwZW5kaW5nIG9uIHdoYXQgCi0gICogdHlwZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGZyb20gdGhlIGphdmFtb2YKLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBnZXRCZWFuTW9kZWxFbGVtZW50KE9iamVjdCBvYmplY3QsRWxlbWVudCBwYXJlbnRFbGVtZW50LCBNb2RlbCBtb2RlbCkKLSAgewotICAgIEVsZW1lbnQgcmV0dXJuRWxlbWVudCA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSmF2YUNsYXNzKXsKLSAgICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKW9iamVjdDsKLSAgICAgIFN0cmluZyBqYXZhTmFtZSA9IGphdmFDbGFzcy5nZXRKYXZhTmFtZSgpOwotICAgICAgaWYgKCFqYXZhQ2xhc3MuaXNBcnJheSgpKXsgCi0JICAgICAgaWYocGFyZW50RWxlbWVudCA9PSBudWxsICYmIG1vZGVsID09bnVsbCkgcmV0dXJuRWxlbWVudCA9IG5ldyBCZWFuRWxlbWVudChqYXZhTmFtZSk7Ci0JICAgICAgZWxzZSBpZihwYXJlbnRFbGVtZW50ID09IG51bGwgJiYgbW9kZWwgIT1udWxsKSByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KGphdmFOYW1lLG1vZGVsLGZhbHNlKTsKLQkgICAgICBlbHNlewotCSAgICAgICAgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFBhcmFtZXRlckVsZW1lbnQpeyAKLQkgICAgICAgICAgIFBhcmFtZXRlckVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoUGFyYW1ldGVyRWxlbWVudClwYXJlbnRFbGVtZW50OwotCSAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBCZWFuRWxlbWVudCh0ZW1wRWxlbWVudCxqYXZhTmFtZSk7Ci0JICAgICAgICB9Ci0JICAgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50KXsKLQkgICAgICAgICAgIEF0dHJpYnV0ZUVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoQXR0cmlidXRlRWxlbWVudClwYXJlbnRFbGVtZW50OwotCSAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBCZWFuRWxlbWVudCh0ZW1wRWxlbWVudCxqYXZhTmFtZSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBGaWVsZEVsZW1lbnQpewotICAgICAgICAgICAgICAgRmllbGRFbGVtZW50IHRlbXBFbGVtZW50ID0gKEZpZWxkRWxlbWVudClwYXJlbnRFbGVtZW50OwotCSAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBCZWFuRWxlbWVudCh0ZW1wRWxlbWVudCxqYXZhTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBNZXRob2RFbGVtZW50KXsKLSAgICAgICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOwotICAgICAgICAgICAgfQkgICAgICAgICAKLQkgICAgICB9Ci0gICAgICB9IAotICAgICAgZWxzZXsKLSAgICAgICAgICBpZihwYXJlbnRFbGVtZW50ID09IG51bGwgJiYgbW9kZWwgPT1udWxsKSByZXR1cm5FbGVtZW50ID0gbmV3IEFycmF5RWxlbWVudChqYXZhTmFtZSk7Ci0JICAgICAgZWxzZSBpZihwYXJlbnRFbGVtZW50ID09IG51bGwgJiYgbW9kZWwgIT1udWxsKSByZXR1cm5FbGVtZW50ID0gbmV3IEFycmF5RWxlbWVudChqYXZhTmFtZSxtb2RlbCxmYWxzZSk7Ci0JICAgICAgZWxzZXsKLQkgICAgICAgIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBQYXJhbWV0ZXJFbGVtZW50KXsgCi0JICAgICAgICAgICBQYXJhbWV0ZXJFbGVtZW50IHRlbXBFbGVtZW50ID0gKFBhcmFtZXRlckVsZW1lbnQpcGFyZW50RWxlbWVudDsKLQkgICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEF0dHJpYnV0ZUVsZW1lbnQpewotCSAgICAgICAgICAgQXR0cmlidXRlRWxlbWVudCB0ZW1wRWxlbWVudCA9IChBdHRyaWJ1dGVFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEFycmF5RWxlbWVudCh0ZW1wRWxlbWVudCxqYXZhTmFtZSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBGaWVsZEVsZW1lbnQpewotICAgICAgICAgICAgICAgRmllbGRFbGVtZW50IHRlbXBFbGVtZW50ID0gKEZpZWxkRWxlbWVudClwYXJlbnRFbGVtZW50OwotCSAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBBcnJheUVsZW1lbnQodGVtcEVsZW1lbnQsamF2YU5hbWUpOwotCSAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgTWV0aG9kRWxlbWVudCl7Ci0gICAgICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IFBhcmFtZXRlckVsZW1lbnQoKE1ldGhvZEVsZW1lbnQpcGFyZW50RWxlbWVudCxSRVRVUk5fUEFSQU1fTkFNRSxNZXRob2RFbGVtZW50LlJFTF9SRVRVUk5fUEFSQU1FVEVSUyx0cnVlKTsKLSAgICAgICAgICAgIH0KLQotCSAgICAgIH0KLSAgICAgICB9Ci0KLSAgICB9Ci0gICAgZWxzZSBpZihvYmplY3QgaW5zdGFuY2VvZiBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IpewotICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcilvYmplY3Q7Ci0gICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEF0dHJpYnV0ZUVsZW1lbnQoKEJlYW5FbGVtZW50KXBhcmVudEVsZW1lbnQscGQuZ2V0TmFtZSgpKTsgIAotICAgIH0KLSAgICBlbHNlIGlmKG9iamVjdCBpbnN0YW5jZW9mIEZpZWxkKXsKLSAgICAgIEZpZWxkIGZpZWxkID0gKEZpZWxkKW9iamVjdDsKLSAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgRmllbGRFbGVtZW50KChCZWFuRWxlbWVudClwYXJlbnRFbGVtZW50LGZpZWxkLmdldE5hbWUoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE1ldGhvZCl7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClvYmplY3Q7Ci0gICAgICByZXR1cm5FbGVtZW50ID0gbmV3IE1ldGhvZEVsZW1lbnQoKEJlYW5FbGVtZW50KXBhcmVudEVsZW1lbnQsbWV0aG9kLmdldE5hbWUoKSwgbWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSk7Ci0gICAgfQotICAgIC8vbm9uIGJlYW5pbmZvCi0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKXsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylvYmplY3Q7ICAKLSAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgQXR0cmlidXRlRWxlbWVudCgoQmVhbkVsZW1lbnQpcGFyZW50RWxlbWVudCxuYW1lKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSmF2YVBhcmFtZXRlcil7Ci0gICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgPSAoSmF2YVBhcmFtZXRlcilvYmplY3Q7Ci0KLSAgICAgIAotICAgICAgaWYgKGphdmFQYXJhbWV0ZXIuaXNSZXR1cm4oKSkgCi0gICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IFBhcmFtZXRlckVsZW1lbnQoKE1ldGhvZEVsZW1lbnQpcGFyZW50RWxlbWVudCxSRVRVUk5fUEFSQU1fTkFNRSxNZXRob2RFbGVtZW50LlJFTF9SRVRVUk5fUEFSQU1FVEVSUyx0cnVlKTsgCi0gICAgICBlbHNleyAKLSAgICAgICAgIC8vYSBqYXZhIHBhcmFtZXRlciBnaXZlcyB1cyB0aGUgcXVhbGlmaWVkIG5hbWUgd2UgZG9udCB3YW50IHRoaXMKLSAgICAgICAgIFN0cmluZyBuYW1lID0gamF2YVBhcmFtZXRlci5nZXRRdWFsaWZpZWROYW1lKCk7Ci0gICAgICAgICBTdHJpbmcgc2hvcnROYW1lOwotICAgICAgICAgaW50IGluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgICAgICAgaWYgKGluZGV4ICE9IC0xKXsKLSAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgc2hvcnROYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXgpOwotICAgICAgICAgfQotICAgICAgZWxzZSBzaG9ydE5hbWUgPSBuYW1lOwotCi0gICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IFBhcmFtZXRlckVsZW1lbnQoKE1ldGhvZEVsZW1lbnQpcGFyZW50RWxlbWVudCxzaG9ydE5hbWUsTWV0aG9kRWxlbWVudC5SRUxfUEFSQU1FVEVSUyxmYWxzZSk7IAotCi0gICAgICB9Ci0gICAgIAotICAgIH0KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBKYXZhSGVscGVycyl7Ci0gICAgICBKYXZhSGVscGVycyBqYXZhSGVscGVyID0gKEphdmFIZWxwZXJzKW9iamVjdDsKLSAgICAgIFN0cmluZyBqYXZhTmFtZTsgCi0gICAgICBpZiAoamF2YUhlbHBlci5pc0FycmF5KCkpIGphdmFOYW1lID0gVHlwZUZhY3RvcnkuQVJSQVlfTkFNRTsKLSAgICAgIGVsc2UgamF2YU5hbWUgPSBqYXZhSGVscGVyLmdldEphdmFOYW1lKCk7Ci0gICAgICBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFBhcmFtZXRlckVsZW1lbnQpewotICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgU2ltcGxlRWxlbWVudCgoUGFyYW1ldGVyRWxlbWVudClwYXJlbnRFbGVtZW50LGphdmFOYW1lLGphdmFIZWxwZXIuaXNQcmltaXRpdmUoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50KXsKLSAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IFNpbXBsZUVsZW1lbnQoKEF0dHJpYnV0ZUVsZW1lbnQpcGFyZW50RWxlbWVudCxqYXZhTmFtZSxqYXZhSGVscGVyLmlzUHJpbWl0aXZlKCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgRmllbGRFbGVtZW50KXsKLSAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IFNpbXBsZUVsZW1lbnQoKEZpZWxkRWxlbWVudClwYXJlbnRFbGVtZW50LGphdmFOYW1lLGphdmFIZWxwZXIuaXNQcmltaXRpdmUoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBNZXRob2RFbGVtZW50KXsKLSAgICAgIAlyZXR1cm5FbGVtZW50ID0gbmV3IFBhcmFtZXRlckVsZW1lbnQoKE1ldGhvZEVsZW1lbnQpcGFyZW50RWxlbWVudCxSRVRVUk5fUEFSQU1fTkFNRSxNZXRob2RFbGVtZW50LlJFTF9SRVRVUk5fUEFSQU1FVEVSUyx0cnVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJldHVybkVsZW1lbnQ7Ci0gIH0KLSAgCi0gIAotICAKLQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CaWdEZWNpbWFsVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0RlY2ltYWxUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZGEwYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0RlY2ltYWxUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgQmlnRGVjaW1hbFR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEJpZ0RlY2ltYWxUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LkJJR19ERUNJTUFMX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAibmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKCIgKyBuYW1lICsgIik7IjsKLSAgfQotCi0gIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gbmFtZSArICIudG9TdHJpbmcoKSI7Ci0gIH0KLSAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CaWdJbnRlZ2VyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0ludGVnZXJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZjYwMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0ludGVnZXJUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgQmlnSW50ZWdlclR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEJpZ0ludGVnZXJUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LkJJR19JTlRFR0VSX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAibmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKCIgKyBuYW1lICsgIik7IjsKLSAgfQotCi0gIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gbmFtZSArICIudG9TdHJpbmcoKSI7Ci0gIH0KLSAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9EYXRhVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0RhdGFUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NjFhNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0RhdGFUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzaW1wbGlmeSB0aGUgY29kZWdlbiBwcm9jZXNzCi0qIEJlY2F1c2UgY29kZWdlbiBtYXkgYmUgcHJvY2Vzc2VkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUgdHlwZQotKiB3ZSBjYW4gaGFuZGxlIGhvdyBlYWNoIHR5cGUgd2FudHMgdGhlIGNvZGUgdG8gbG9vayBmb3IgYSBzcGVjaWZpYyB0YXNrIAotKiBieSBjcmVhdGluZyBhIGRhdGF0eXBlIGFuZCBjYWxsaW5nIGdlbmVyaWMgbWV0aG9kcyB0aGF0IGFyZSAKLSogdG8gYmUgc3BlY2lhbGl6ZWQgaW4gc3ViY2xhc3NlcwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGF0YVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9UWVBFID0gInR5cGUiOwotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaGFuZHMgYmFjayB0aGUgY29kZSByZXF1aXJlZCB0byBnbyBmcm9tIHRoZSAKLSAgKiBzdHJpbmcgdGhlIHVzZXIgZW50ZXJlZCB0byB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW0gU3RyaW5nIHR5cGVOYW1lIHRoaXMgaXMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSB0eXBlIGllIGludCxib29sZWFuCi0gICogQHBhcmFtIFN0cmluZyBub2RlTmFtZSBUaGUgbm9kZU5hbWUgaXMganVzdCB0aGUgYXR0cmlidXRlbmFtZSArIFRlbXAuIAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKTsKLQotICAvKioKLSAgKiBPZnRlbiB0aW1lcyBpbiBvcmRlciB0byBjb252ZXJ0IGEgdHlwZSB0byBzdHJpbmcsIHN0cmluZyB0byB0eXBlIG9yIGp1c3QgcGxhaW4gcHJvdmlkZSBhbiBpbnB1dCBmb3JtCi0gICogQSB0ZW1wb3JhcnkgdmFyaWFibGUgaXMgdXNlZC4gSWYgd2UgcnVuIGludG8gYSBzaXR1dGlvbiB3aGVyZSB0d28gb2YgdGhlIHNhbWUgdHlwZXMgYXJlIHVzZWQgaW4gdGhlICAKLSAgKiBzYW1lIG1ldGhvZCB0aGVzZSB0ZW1wb3JhcnkgdmFyaWFibGVzIHNoYXJlIHRoZSBzYW1lIG5hbWUgc3BhY2UuIEl0IGlzbnQgZW5vdWdoIHRvIHVzZSBhIG5hbWUgCi0gICogYmVjYXVzZSBvZiB3ZSBtYXkgaGF2ZSBhIG5lc3RlZCBzY2VuYXJpby4gVGhlcmVmb3JlIGFueSB0ZW1wb3JhcnkgdmFyaWFibGUgdGhhdCBpcyB1c2VkIGluIGEgZGF0YVR5cGUKLSAgKiBtdXN0IHVzZSBhIHVuaXF1ZSBuYW1lIGFwZWVuZGVkIHRvIHRoZSBlbmQuIFRoaXMgbmFtZSBtdXN0IGJlIHBhc3NlZCBpbiBhbmQgaXQgaXMgdXAgdG8gdGhlIHVzZXIgb2YKLSAgKiBEYXRhVHlwZSB0byBpbnN1cmUgaXQgaXMgdW5pcXVlLgotICAqIEByZXR1cm4gVW5pcXVlIE5hbWUgCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIG5hbWUgZWFjaCB0ZW1wIHZhcmlhYmxlIHdpbGwgdXNlCi0gICogCi0gICoKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCk7Ci0gIAotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGRpY3RhdGVzIGhvdyB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSAKLSAgKiBpbmNvbWluZyBzdHJpbmcgZnJvbSB0aGUgaW5wdXQganNwLiBZb3UgbWF5IG9yIG1heSBub3QgdXNlIHRoZSBtYXJrdXAgCi0gICogZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgc2ltcGxlIHR5cGVzIHVzZSBpdC4gRG9tRWxlbWVudCBkb2VzIG5vdAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb2RlIHRvIGJlIGdlbmVyYXRlZAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpOwotCi0KLSAgLyoqCi0gICogSW5wdXQgZm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpOwotICAKLSAgLyoqCi0gICogY29udmVydHMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgcHJveHkgCi0gICogYmFjayB0byBhIHN0cmluZyAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSB0eXBlIHRvIHN0cmluZy4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogcmV0dXJuIHRoZSB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHR5cGUoaW5jbHVkaW5nIHBhY2thZ2UpLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0RhdGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0ZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhOWM0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0ZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMTAgICAyMDkwODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIERhdGVUeXBlIGV4dGVuZHMgU2ltcGxlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBEYXRlVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5CSUdfREVDSU1BTF9OQU1FKTsKLSAgfQotIAotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgc2ltcGxlIGZvcm0gaXMganVzdCBhIHRleHQgaW5wdXQgYm94Ci0gICogVGhpcyBoYXMgYmVlbiBzcGVjaWFsaXplZCB0byBzaG93IGFuIGV4YW1wbGUKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGlucHV0Rm9ybSA9ICI8VEQgQUxJR049XCJsZWZ0XCI+PElOUFVUIFRZUEU9XCJURVhUXCIgTkFNRT1cIiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgIlwiIFNJWkU9MjA+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgImphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciBnY0V4YW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIiAgPSBuZXcgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS51dGlsLkRhdGUgZGF0ZSIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBnY0V4YW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIi5nZXRUaW1lKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdChkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VEQgQUxJR049XCJsZWZ0XCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VFI+IiAgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFREPiA8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFREIEFMSUdOPVwibGVmdFwiPiBlZy4gPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IDwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8L1RSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICByZXR1cm4gaW5wdXRGb3JtOwotICB9Ci0KLQotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3BlY2lhbGl6ZWQKLSAgKiBXZSBtdXN0IHVzZSB0aGUgZGF0ZSBmdW5jdGlvbiB0byBoZWxwCi0gICogdXMgY29udmVydCBiYWNrIGFuZCBmb3J0aAotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgIFN0cmluZyBjb252ZXJzaW9uID0gIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudGV4dC5EYXRlRm9ybWF0IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gamF2YS50ZXh0LkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCk7IiAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBub2RlTmFtZSAgKyAgIj0gZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIucGFyc2UoIiArIGF0dHJpYnV0ZU5hbWUgKyAiKTsiICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAqIHRoaXMgaXMgbmVlZGVkIGZvciBtb3N0IGNhc2UgCi0gICogYnV0IGl0IGlzIHBlcmlwaGVyYWwgYXMgdGhlIHN0cmluZ2NvbnZlcnNpb24gbmVlZGVkIAotICAqIHRvIGJlIG92ZXJyaWRkZW4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotCi0KLSAgLyoqCi0gICogY29udmVydHMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgcHJveHkgCi0gICogYmFjayB0byBhIHN0cmluZyAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSB0eXBlIHRvIHN0cmluZy4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotCi0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJqYXZhLnRleHQuRGF0ZUZvcm1hdCBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGphdmEudGV4dC5EYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgIAkgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLkpzcFV0aWxzLm1hcmt1cChkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIi5mb3JtYXQoIiArIG5hbWUgKyIpKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotCi0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0RvbUVsZW1lbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRG9tRWxlbWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNlMGNlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRG9tRWxlbWVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwOTA5MTcgICAyODk4MDAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBTT0FQRWxlbWVudCBvciBFbGVtZW50IHBhcmFtZXRlcnMgcmVzdWx0IGluIGNvbXBpbGUgZXJyb3JzIGluIHNhbXBsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIERvbUVsZW1lbnRUeXBlIGltcGxlbWVudHMgRGF0YVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmVHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBmVW5pcXVlTmFtZTsKLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIERvbUVsZW1lbnRUeXBlKCkKLSAgewotICAgIGZUeXBlID0gIm9yZy53M2MuZG9tLkVsZW1lbnQiOwotICAgIGZVbmlxdWVOYW1lID0gIiI7Ci0gIH0KLQotICAvKioKLSAgKiBpbnB1dEZvcm0gcmV0dXJucyB0aGUgdXNlciBpbnB1dCBodG1sCi0gICogVGhlIERvbUVsZW1lbnQgZm9ybSBpcyBhIHRleHQgYm94Ci0gICogQHBhcmFtIFN0cmluZyBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50Ci0gICogQHJldHVybiBTdHJpbmcgVGhlIGZvcm0gdXNlZCB0byBjb2xsZWN0IHRoZSBkYXRhCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgaW5wdXRGb3JtKFN0cmluZyBuYW1lKQotICB7Ci0gICAgIFN0cmluZyBpbnB1dEZvcm0gPSAiPFREIEFMSUdOPVwibGVmdFwiPjxURVhUQVJFQSBSb3dzPTcgQ29scz00NSBOQU1FPVwiIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiXCI+PC9URVhUQVJFQT48L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBpbnB1dEZvcm07Ci0gIH0KLQotICAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBkaWN0YXRlcyBob3cgeW91IHdhbnQgdG8gcHJvY2VzcyB0aGUgCi0gICogaW5jb21pbmcgc3RyaW5nIGZyb20gdGhlIGlucHV0IGpzcC4gWW91IG1heSBvciBtYXkgbm90IHVzZSB0aGUgbWFya3VwIAotICAqIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB0aGUgdHlwZS4gVGhlIHNpbXBsZSB0eXBlcyB1c2UgaXQuIERvbUVsZW1lbnQgZG9lcyBub3QKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgY29kZSB0byBiZSBnZW5lcmF0ZWQKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZXF1ZXN0Q29kZShTdHJpbmcgbmFtZSwgU3RyaW5nIGlkKQotICB7Ci0gICAgIFN0cmluZyByZXF1ZXN0Q29kZSA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyIgKyBHZW5lcmF0b3IuU1BBQ0UgCi0gICAgIAkgICAgICAgICAgICAgICAgICAgKyBpZCArICI9ICByZXF1ZXN0LmdldFBhcmFtZXRlcihcIiIKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIG5hbWUgKyJcIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiByZXF1ZXN0Q29kZTsKLSAgfQotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaGFuZHMgYmFjayB0aGUgY29kZSByZXF1aXJlZCB0byBnbyBmcm9tIHRoZSAKLSAgKiBzdHJpbmcgdGhlIHVzZXIgZW50ZXJlZCB0byB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW0gU3RyaW5nIHR5cGVOYW1lIHRoaXMgaXMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSB0eXBlIGllIGludCxib29sZWFuCi0gICogQHBhcmFtIFN0cmluZyBub2RlTmFtZSBUaGUgbm9kZU5hbWUgaXMganVzdCB0aGUgYXR0cmlidXRlbmFtZSArIFRlbXAuIAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0KLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgCi0gICAgICAgICAgICAgICAgICAgICAgICsgbm9kZU5hbWUgKyAiPSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbC5Eb21FbGVtZW50SGVscGVyLmNyZWF0ZURvbUVsZW1lbnRGcm9tWE1MU3RyaW5nKCIgKyBhdHRyaWJ1dGVOYW1lICsgIik7IiAKLQkgICAgICAgICAgICAgICAgICAgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICByZXR1cm4gY29udmVyc2lvbjsgCi0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBkaWN0YXRlcyBob3cgd2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgdHlwZSAKLSAgKiB1cG9uIHJlY2VpdmluZyBpdCBhcyBhIHJldHVybiBmcm9tIGEgcHJveHkgbWV0aG9kCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkaXNwbGF5IHN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHR5cGVUb1N0cmluZyA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLkRvbUVsZW1lbnRIZWxwZXIuZG9tV3JpdGVyKCIgKyBuYW1lICsgIiwgbmV3IGphdmEubGFuZy5TdHJpbmdCdWZmZXIoKSIgKyAiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIHR5cGVUb1N0cmluZzsKLSAgfQotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZVbmlxdWVOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VW5pcXVlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZVbmlxdWVOYW1lID0gbmFtZTsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9GaWVsZEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9GaWVsZEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRmYmIxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRmllbGRFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmEgYmVhbiBtZXRob2QgcGFyYW1ldGVyLgotKiBOZWFyZXN0IG1vcmFsIGVxdWl2YWxlbnRzOiBqYXZhLmJlYW5zLlBhcmFtZXRlckRlc2NyaXB0b3IuCi0qLwotcHVibGljIGNsYXNzIEZpZWxkRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudCBpbXBsZW1lbnRzIEF0dHJpYnV0ZUVsZW1lbnRUeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZlNldHRlck1ldGhvZDsKLSAgcHJpdmF0ZSBTdHJpbmcgZkdldHRlck1ldGhvZDsKLQotIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfVFlQRSA9ICJ0eXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX09XTklOR19CRUFOID0gIm93bmluZ2JlYW4iOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IgdGhpcyB0YWtlcyB0aGUgb3duaW5nIGJlYW4uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gYmVhbkVsZW1lbnQgdGhlIGJlYW4gdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgRmllbGRFbGVtZW50ICggQmVhbkVsZW1lbnQgYmVhbkVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxiZWFuRWxlbWVudCxSRUxfT1dOSU5HX0JFQU4sQmVhbkVsZW1lbnQuUkVMX0ZJRUxEUyk7Ci0gICAgZlNldHRlck1ldGhvZCA9IG5hbWU7Ci0gICAgZkdldHRlck1ldGhvZCA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXR0ZXJNZXRob2QoU3RyaW5nIHNldHRlck1ldGhvZCkKLSAgewotICAgIGZTZXR0ZXJNZXRob2QgPSBzZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlck1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZlNldHRlck1ldGhvZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0R2V0dGVyTWV0aG9kKCkKLSAgewotICAgIHJldHVybiBmR2V0dGVyTWV0aG9kOwotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldEdldHRlck1ldGhvZChTdHJpbmcgZ2V0dGVyTWV0aG9kKQotICB7Ci0gICAgZkdldHRlck1ldGhvZCA9IGdldHRlck1ldGhvZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0dGVyU2lnbmF0dXJlKFN0cmluZyBhdHRyaWJ1dGUpCi0gIHsKLSAgICByZXR1cm4gZlNldHRlck1ldGhvZCArICIgPSAiICsgYXR0cmlidXRlICsgIjsiOwotICB9Ci0gICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgQmVhbiB0aGF0IG93bnMgdGhpcyBBdHRyaWJ1dGUuCi0gICogQHJldHVybiBCZWFuRWxlbWVudCBUaGUgYmVhbiB0aGF0IG93bnMgdGhpcyBhdHRyaWJ1dGUuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCBnZXRPd25pbmdCZWFuRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05JTkdfQkVBTik7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoQmVhbkVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHR5cGUgdGhhdCBpcyBvd25lZCBieSB0aGlzIGF0dHJpYnV0dGUuCi0gICogQHJldHVybiBUeXBlRWxlbWVudCBUaGUgVHlwZSB0aGF0IG9mIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgVHlwZUVsZW1lbnQgZ2V0VHlwZUVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfVFlQRSk7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoVHlwZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvR3JlZ29yaWFuQ2FsZW5kYXJUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvR3JlZ29yaWFuQ2FsZW5kYXJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOWQ5ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0dyZWdvcmlhbkNhbGVuZGFyVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTExMCAgIDIwOTA4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIEdyZWdvcmlhbkNhbGVuZGFyVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXJUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LkdSRUdPUklBTl9DQUxFTkRBUl9OQU1FKTsKLSAgfQotCi0KLSAgLyoqCi0gICogaW5wdXRGb3JtIHJldHVybnMgdGhlIHVzZXIgaW5wdXQgaHRtbAotICAqIFRoZSBzaW1wbGUgZm9ybSBpcyBqdXN0IGEgdGV4dCBpbnB1dCBib3gKLSAgKiBUaGlzIGhhcyBiZWVuIHNwZWNpYWxpemVkIHRvIHNob3cgYW4gZXhhbXBsZQotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSkKLSAgewotICAgICBTdHJpbmcgaW5wdXRGb3JtID0gIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwiIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiXCIgU0laRT0yMD48L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZhLnRleHQuRGF0ZUZvcm1hdCBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGphdmEudGV4dC5EYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIGdjRXhhbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICA9IG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZhLnV0aWwuRGF0ZSBkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGdjRXhhbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmdldFRpbWUoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIuZm9ybWF0KGRhdGUiICsgZ2V0VW5pcXVlTmFtZSgpKyAiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VEQgQUxJR049XCJsZWZ0XCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VFI+IiAgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFREPiA8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFREIEFMSUdOPVwibGVmdFwiPiBlZy4gPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IDwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8L1RSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICByZXR1cm4gaW5wdXRGb3JtOwotICB9Ci0gCi0gCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBzcGVjaWFsaXplZAotICAqIFdlIG11c3QgdXNlIHRoZSBkYXRlIGZ1bmN0aW9uIHRvIGhlbHAKLSAgKiB1cyBjb252ZXJ0IGJhY2sgYW5kIGZvcnRoCi0gICovCi0gICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgIFN0cmluZyBjb252ZXJzaW9uID0gIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudGV4dC5EYXRlRm9ybWF0IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gamF2YS50ZXh0LkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCk7IiAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAgImphdmEudXRpbC5EYXRlIGRhdGVUZW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIiAgPSBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIi5wYXJzZSgiICsgYXR0cmlidXRlTmFtZSArICIpOyIgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBHZW5lcmF0b3IuU1BBQ0UgKyBub2RlTmFtZSArICIgPSAiICsgIm5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKTsiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgbm9kZU5hbWUgKyAiLnNldFRpbWUoZGF0ZVRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiKTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICogdGhpcyBpcyBuZWVkZWQgZm9yIG1vc3QgY2FzZSAKLSAgKiBidXQgaXQgaXMgcGVyaXBoZXJhbCBhcyB0aGUgc3RyaW5nY29udmVyc2lvbiBuZWVkZWQgCi0gICogdG8gYmUgb3ZlcnJpZGRlbgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qKgotICAqIGNvbnZlcnRzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIHByb3h5IAotICAqIGJhY2sgdG8gYSBzdHJpbmcgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgdHlwZSB0byBzdHJpbmcuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZUNvbnZlcnNpb24oU3RyaW5nIG5hbWUpCi0gIHsKLQotICAgIFN0cmluZyBjb252ZXJzaW9uID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAJICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJqYXZhLnV0aWwuRGF0ZSBkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9ICIgKyBuYW1lICsgIi5nZXRUaW1lKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgCSAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gb3JnLmVjbGlwc2UuanN0LndzLnV0aWwuSnNwVXRpbHMubWFya3VwKGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdChkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSArICIpKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotCi0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0hhc2h0YWJsZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9IYXNodGFibGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZmYyY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0hhc2h0YWJsZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHJlY29nbml6ZWQgcmV0dXJuIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIEhhc2h0YWJsZVR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEhhc2h0YWJsZVR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuSEFTSFRBQkxFX05BTUUpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9NYXBUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWFwVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDM1YmZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9NYXBUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBNYXBUeXBlIGV4dGVuZHMgUmVjb2duaXplZFJldHVyblR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBNYXBUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5Lk1BUF9OQU1FKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWV0aG9kRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL01ldGhvZEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxZTRlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWV0aG9kRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuIG1ldGhvZC4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLCBqYXZhLmJlYW5zLk1ldGhvZERlc2NyaXB0b3IuCi0qLwotcHVibGljIGNsYXNzIE1ldGhvZEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0JFQU4gPSAiYmVhbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QQVJBTUVURVJTID0gInBhcmFtZXRlcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUkVUVVJOX1BBUkFNRVRFUlMgPSAicmV0dXJucGFyYW1ldGVycyI7Ci0gIHByaXZhdGUgU3RyaW5nIGZEaXNwbGF5TmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBmTWV0aG9kT21pdHRlZDsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gYmVhbiBUaGUgQmVhbiB0aGF0IG93bnMgdGhpcyBtZXRob2QuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZC4KLSAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbWV0aG9kLgotICAqLwotICBwdWJsaWMgTWV0aG9kRWxlbWVudCAoIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50LCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRpc3BsYXlOYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxiZWFuRWxlbWVudCxSRUxfQkVBTixCZWFuRWxlbWVudC5SRUxfTUVUSE9EUyk7Ci0gICAgZkRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZNZXRob2RPbWl0dGVkID0gZmFsc2U7Ci0gICAgCi0gIH0KLQotICAvKgotICAqIEluIHRoZSBldmVudCB0aGF0IHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUKLSAgKiB3ZSB3aWxsIHNldCB0aGUgb21taXNzaW9uIGJvb2xlYW4gdmFyaWFibGUKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGlzIG1ldGhvZCBpcyB0byBiZSBvbW1pdGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGdldE1ldGhvZE9tbWlzc2lvbigpCi0gIHsKLSAgICByZXR1cm4gZk1ldGhvZE9taXR0ZWQ7Ci0gIH0KLQotICAvKgotICAqIEluIHRoZSBldmVudCB0aGF0IHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUKLSAgKiB3ZSB3aWxsIGdldCB0aGUgb21taXNzaW9uIGJvb2xlYW4gdmFyaWFibGUKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIHRoaXMgbWV0aG9kIGlzIHRvIGJlIG9tbWl0ZWQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kT21taXNzaW9uKGJvb2xlYW4gYm9vbCkKLSAgewotICAgIGZNZXRob2RPbWl0dGVkID0gYm9vbDsKLSAgfQotCi0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBmTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZEaXNwbGF5TmFtZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIEJlYW4gdGhhdCBvd25zIHRoaXMgbWV0aG9kLgotICAqIEByZXR1cm4gQmVhbiBUaGUgQmVhbiB0aGF0IG93bnMgdGhpcyBtZXRob2QuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCBnZXRCZWFuRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9CRUFOKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCZWFuRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgcmV0dXJuIHBhcmFtZXRlciBvZiB0aGlzIG1ldGhvZC4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIGhvbGRzIHRoZSByZXR1cm4gcGFyYW1ldGVyIG9mIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UmV0dXJuUGFyYW1ldGVyRW51bSAoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9SRVRVUk5fUEFSQU1FVEVSUyk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIHRoZSByZXR1cm4gcGFyYW1ldGVyIG9mIHRoaXMgbWV0aG9kLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gaG9sZHMgdGhlIHJldHVybiBwYXJhbWV0ZXIgb2YgdGhpcyBtZXRob2QuCi0gICovCi0gIHB1YmxpYyBQYXJhbWV0ZXJFbGVtZW50IGdldFJldHVyblBhcmFtZXRlckVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRSZXR1cm5QYXJhbWV0ZXJFbnVtKCk7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoUGFyYW1ldGVyRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgUGFyYW1ldGVyIG9iamVjdHMgb2YgdGhpcyBtZXRob2QuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBBbGwgUGFyYW1ldGVyIG9iamVjdHMgb2YgdGhpcyBtZXRob2QuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQYXJhbWV0ZXJFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9QQVJBTUVURVJTKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBQYXJhbWV0ZXIgb2JqZWN0cyBvZiB0aGlzIG1ldGhvZC4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIFBhcmFtZXRlciBvYmplY3RzIG9mIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlck9mUGFyYW1ldGVyRWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9QQVJBTUVURVJTKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvT2JqZWN0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL09iamVjdFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlYmRmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvT2JqZWN0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODIzCSAgMTQ1NjQzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiAoY3JlYXRlZCBjbGFzcykKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgT2JqZWN0VHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgT2JqZWN0VHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5PQkpFQ1RfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7IAotCS8vV2UgY2FuJ3QgZGVzZXJpYWxpemUgYSBTdHJpbmcgdG8gYW4gT2JqZWN0Ci0JLy90aGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBiZSBjYWxsZWQgc2luY2UKLQkvL21ldGhvZHMgd2l0aCBPYmplY3RzIGFzIGlucHV0IGFyZSBvbWl0dGVkLgotICAgIHJldHVybiAibmV3IGphdmEubGFuZy5PYmplY3QoKTsiOwotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1BhcmFtZXRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QYXJhbWV0ZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMWNmYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1BhcmFtZXRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuIG1ldGhvZCBwYXJhbWV0ZXIuCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEuYmVhbnMuUGFyYW1ldGVyRGVzY3JpcHRvci4KLSovCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9NRVRIT0QgPSAibWV0aG9kIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0KLSAgcHVibGljIGJvb2xlYW4gZlJldHVyblBhcmFtZXRlcj1mYWxzZTsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBtZXRob2QgVGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4KLSAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLgotICAqLwotICBwdWJsaWMgUGFyYW1ldGVyRWxlbWVudCAoIE1ldGhvZEVsZW1lbnQgbWV0aG9kRWxlbWVudCwgU3RyaW5nIG5hbWUsIFN0cmluZyByZWxUeXBlLGJvb2xlYW4gcmV0dXJuUGFyYW1ldGVyICkKLSAgewotICAgIHRoaXMobmFtZSxtZXRob2RFbGVtZW50LFJFTF9NRVRIT0QscmVsVHlwZSk7Ci0gICAgZlJldHVyblBhcmFtZXRlciA9IHJldHVyblBhcmFtZXRlcjsKLSAgfQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIG1ldGhvZCBUaGUgTWV0aG9kIHRoYXQgb3ducyB0aGlzIHBhcmFtZXRlci4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLgotICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIuCi0gICovCi0gIHB1YmxpYyBQYXJhbWV0ZXJFbGVtZW50IChTdHJpbmcgbmFtZSwgTWV0aG9kRWxlbWVudCBtZXRob2RFbGVtZW50LCBTdHJpbmcgb3V0UmVsLFN0cmluZyBpblJlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbWV0aG9kRWxlbWVudCxvdXRSZWwsaW5SZWwpOwotICB9Ci0gICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgTWV0aG9kIHRoYXQgb3ducyB0aGlzIHBhcmFtZXRlci4KLSAgKiBAcmV0dXJuIE1ldGhvZCBUaGUgTWV0aG9kIHRoYXQgb3ducyB0aGlzIHBhcmFtZXRlci4KLSAgKi8KLSAgcHVibGljIE1ldGhvZEVsZW1lbnQgZ2V0TWV0aG9kRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9NRVRIT0QpOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKE1ldGhvZEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICogQHJldHVybiBNZXRob2QgVGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICovCi0gIHB1YmxpYyBUeXBlRWxlbWVudCBnZXRUeXBlRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9UWVBFKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChUeXBlRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNSZXR1cm4oKQotICB7Ci0gICAgcmV0dXJuIGZSZXR1cm5QYXJhbWV0ZXI7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQXJyYXlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQXJyYXlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzMwNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUFycmF5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVBcnJheVR5cGUgZXh0ZW5kcyBBcnJheVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVBcnJheVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTUlUSVZFX0FSUkFZX05BTUUsIHR5cGVOYW1lKTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBkaWN0YXRlcyBob3cgd2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgdHlwZSAKLSAgKiB1cG9uIHJlY2VpdmluZyBpdCBhcyBhIHJldHVybiBmcm9tIGEgcHJveHkgbWV0aG9kCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkaXNwbGF5IHN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHRyaXBwbGVUYWIgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5UQUI7Ci0KLSAgICBTdHJpbmcgbm9uQmVhbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wIiArIGdldFVuaXF1ZU5hbWUoKSArICIgPSBcIltcIjsiIAotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJmb3IoaW50IGkiICsgZ2V0VW5pcXVlTmFtZSgpICsgIj0wO2kiICtnZXRVbmlxdWVOYW1lKCkgKyAiPCAiICsgbmFtZSAKLSAgICAJICAgICAgICAgICAgICAgICAgICsgIi5sZW5ndGg7aSIgKyBnZXRVbmlxdWVOYW1lKCkgKyAiKyspeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAJICAgICAgICAgICAgICsgdHJpcHBsZVRhYiArICJ0ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsiID0gdGVtcCIrZ2V0VW5pcXVlTmFtZSgpICsgIiArICIgKyBuYW1lICsgIltpIiArIGdldFVuaXF1ZU5hbWUoKSAKLSAgICAJICAgICAgICAgICAgICAgICAgICsgIl0gKyBcIixcIjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImludCBsZW5ndGgiICsgZ2V0VW5pcXVlTmFtZSgpICsgIiA9IHRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpICsgIi5sZW5ndGgoKTsiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgInRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpICsgIiA9IHRlbXAiK2dldFVuaXF1ZU5hbWUoKSsiLnN1YnN0cmluZygwLChsZW5ndGgiK2dldFVuaXF1ZU5hbWUoKSsiIC0gMSkpICsgXCJdXCI7IiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9dGVtcCIrIGdldFVuaXF1ZU5hbWUoKSArIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIG5vbkJlYW47Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJvb2xlYW5UeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQm9vbGVhblR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU4YWQ5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQm9vbGVhblR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZUJvb2xlYW5UeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVCb29sZWFuVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX0JPT0xFQU5fTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJCb29sZWFuLnZhbHVlT2YoIiArIG5hbWUgKyAiKS5ib29sZWFuVmFsdWUoKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVCeXRlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJ5dGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDVkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJ5dGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVCeXRlVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlQnl0ZVR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9CWVRFX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiQnl0ZS5wYXJzZUJ5dGUoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVDaGFyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUNoYXJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MmY5MDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUNoYXJUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVDaGFyVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlQ2hhclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9DSEFSX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiIiArIG5hbWUgKyAiLmNoYXJBdCgwKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVEb3VibGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRG91YmxlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjM2MmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVEb3VibGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVEb3VibGVUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVEb3VibGVUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fRE9VQkxFX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiRG91YmxlLnBhcnNlRG91YmxlKCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRmxvYXRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRmxvYXRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMGY5ZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUZsb2F0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlRmxvYXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVGbG9hdFR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9GTE9BVF9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIkZsb2F0LnBhcnNlRmxvYXQoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVJbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjMzZGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVJbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVJbnRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVJbnRUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fSU5URUdFUl9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIkludGVnZXIucGFyc2VJbnQoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVKYXZhVHlwZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVKYXZhVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcxNTIzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSmF2YVR5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlSmF2YVR5cGVzIGV4dGVuZHMgU2ltcGxlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVKYXZhVHlwZXMoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBzdXBlcih0eXBlKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlIC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IGZUeXBlICsgIi52YWx1ZU9mKCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsgICAgCi0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJTdHJpbmcudmFsdWVPZigiICsgbmFtZSArICIpIjsKLSAgfQotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUxvbmdUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlTG9uZ1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwYzgyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlTG9uZ1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZUxvbmdUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVMb25nVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX0xPTkdfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJMb25nLnBhcnNlTG9uZygiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLSAgCi0gIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVNob3J0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVNob3J0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjkxY2U2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVTaG9ydFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZVNob3J0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlU2hvcnRUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fU0hPUlRfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJTaG9ydC5wYXJzZVNob3J0KCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxMDZiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTEwICAgMjA5MDg3IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJpbWl0aXZlVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlVHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHN1cGVyKHR5cGUpOwotICB9Ci0gCi0gLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgIFN0cmluZyBjb252ZXJzaW9uID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyB0eXBlTmFtZSArIEdlbmVyYXRvci5TUEFDRSArIG5vZGVOYW1lIAotICAgICAJICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5TUEFDRSArICIgPSAiICsgU3RyaW5nVG9UeXBlKGF0dHJpYnV0ZU5hbWUpIAotICAgICAJICAgICAgICAgICAgICAgICArICIiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJTdHJpbmcudmFsdWVPZigiICsgbmFtZSArICIpIjsKLSAgfQotICAKLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9SZWNvZ25pemVkUmV0dXJuVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1JlY29nbml6ZWRSZXR1cm5UeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzIxYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1JlY29nbml6ZWRSZXR1cm5UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBSZWNvZ25pemVkUmV0dXJuVHlwZSBpbXBsZW1lbnRzIERhdGFUeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZlR5cGU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgZlVuaXF1ZU5hbWU7Ci0KLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBSZWNvZ25pemVkUmV0dXJuVHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIGZUeXBlID0gdHlwZTsKLSAgICBmVW5pcXVlTmFtZSA9ICIiOwotICB9Ci0KLSAgLyoqCi0gICogbm90IHJlbGV2YW50IGF0IHRoaXMgcG9pbnQgCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgaW5wdXRGb3JtKFN0cmluZyBuYW1lKQotICB7Ci0gICAgIHJldHVybiAiIjsKLSAgfQotCi0gICAvKioKLSAgKiBhZ2FpbiBub3QgcmVsZXZhbnQKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZXF1ZXN0Q29kZShTdHJpbmcgbmFtZSwgU3RyaW5nIGlkKQotICB7Ci0gICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaGFuZHMgYmFjayB0aGUgY29kZSByZXF1aXJlZCB0byBnbyBmcm9tIHRoZSAKLSAgKiBzdHJpbmcgdGhlIHVzZXIgZW50ZXJlZCB0byB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW0gU3RyaW5nIHR5cGVOYW1lIHRoaXMgaXMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSB0eXBlIGllIGludCxib29sZWFuCi0gICogQHBhcmFtIFN0cmluZyBub2RlTmFtZSBUaGUgbm9kZU5hbWUgaXMganVzdCB0aGUgYXR0cmlidXRlbmFtZSArIFRlbXAuIAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBub25CZWFuID0gICBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJpZigiICsgbmFtZSArICIhPSBudWxsKXsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgIAotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmcgdGVtcCIgKyBnZXRVbmlxdWVOYW1lKCkrIiA9ICIgKyBuYW1lICsgIi50b1N0cmluZygpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAgIjwlPXRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpICsiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJ9IjsKLSAgICByZXR1cm4gbm9uQmVhbjsKLSAgfQotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZVbmlxdWVOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VW5pcXVlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZVbmlxdWVOYW1lID0gbmFtZTsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TT0FQRWxlbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TT0FQRWxlbWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzMzFhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU09BUEVsZW1lbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkwOTE3ICAgMjg5ODAwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgU09BUEVsZW1lbnQgb3IgRWxlbWVudCBwYXJhbWV0ZXJzIHJlc3VsdCBpbiBjb21waWxlIGVycm9ycyBpbiBzYW1wbGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBTT0FQRWxlbWVudFR5cGUgaW1wbGVtZW50cyBEYXRhVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGZUeXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZVbmlxdWVOYW1lOwotCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgU09BUEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGZUeXBlID0gImphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50IjsKLSAgICBmVW5pcXVlTmFtZSA9ICIiOwotICB9Ci0KLSAgLyoqCi0gICogaW5wdXRGb3JtIHJldHVybnMgdGhlIHVzZXIgaW5wdXQgaHRtbAotICAqIFRoZSBEb21FbGVtZW50IGZvcm0gaXMgYSB0ZXh0IGJveAotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSkKLSAgewotICAgICBTdHJpbmcgaW5wdXRGb3JtID0gIjxURCBBTElHTj1cImxlZnRcIj48VEVYVEFSRUEgUm93cz03IENvbHM9NDUgTkFNRT1cIiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgIlwiPjwvVEVYVEFSRUE+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8L1RSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICByZXR1cm4gaW5wdXRGb3JtOwotICB9Ci0KLSAgIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gZGljdGF0ZXMgaG93IHlvdSB3YW50IHRvIHByb2Nlc3MgdGhlIAotICAqIGluY29taW5nIHN0cmluZyBmcm9tIHRoZSBpbnB1dCBqc3AuIFlvdSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlIG1hcmt1cCAKLSAgKiBmdW5jdGlvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUuIFRoZSBzaW1wbGUgdHlwZXMgdXNlIGl0LiBEb21FbGVtZW50IGRvZXMgbm90Ci0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGNvZGUgdG8gYmUgZ2VuZXJhdGVkCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVxdWVzdENvZGUoU3RyaW5nIG5hbWUsIFN0cmluZyBpZCkKLSAgewotICAgICBTdHJpbmcgcmVxdWVzdENvZGUgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmciICsgR2VuZXJhdG9yLlNQQUNFIAotICAgICAJICAgICAgICAgICAgICAgICAgICsgaWQgKyAiPSAgcmVxdWVzdC5nZXRQYXJhbWV0ZXIoXCIiCi0gICAgIAkgICAgICAgICAgICAgICAgICAgKyBuYW1lICsiXCIpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICByZXR1cm4gcmVxdWVzdENvZGU7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRzIGJhY2sgdGhlIGNvZGUgcmVxdWlyZWQgdG8gZ28gZnJvbSB0aGUgCi0gICogc3RyaW5nIHRoZSB1c2VyIGVudGVyZWQgdG8gdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBlbGVtZW50Ci0gICogQHBhcmFtIFN0cmluZyB0eXBlTmFtZSB0aGlzIGlzIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgdHlwZSBpZSBpbnQsYm9vbGVhbgotICAqIEBwYXJhbSBTdHJpbmcgbm9kZU5hbWUgVGhlIG5vZGVOYW1lIGlzIGp1c3QgdGhlIGF0dHJpYnV0ZW5hbWUgKyBUZW1wLiAKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBhdHRyaWJ1dGVOYW1lIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlIC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBzdHJpbmdDb252ZXJzaW9uKFN0cmluZyB0eXBlTmFtZSwgU3RyaW5nIG5vZGVOYW1lLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgICBTdHJpbmcgY29udmVyc2lvbiA9ICBHZW5lcmF0b3IuRE9VQkxFX1RBQiAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBub2RlTmFtZSArICI9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLlNvYXBFbGVtZW50SGVscGVyLmNyZWF0ZVNPQVBFbGVtZW50RnJvbVhNTFN0cmluZygiICsgYXR0cmlidXRlTmFtZSArICIpOyIgCi0JICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBkaWN0YXRlcyBob3cgd2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgdHlwZSAKLSAgKiB1cG9uIHJlY2VpdmluZyBpdCBhcyBhIHJldHVybiBmcm9tIGEgcHJveHkgbWV0aG9kCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkaXNwbGF5IHN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHR5cGVUb1N0cmluZyA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLlNvYXBFbGVtZW50SGVscGVyLnNvYXBFbGVtZW50V3JpdGVyKCIgKyBuYW1lICsgIiwgbmV3IGphdmEubGFuZy5TdHJpbmdCdWZmZXIoKSIgKyAiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIHR5cGVUb1N0cmluZzsKLSAgfQotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZVbmlxdWVOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VW5pcXVlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZVbmlxdWVOYW1lID0gbmFtZTsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU2ltcGxlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc4MzQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIDEgb2YgdGhyZWUgdHlwZSBlbGVtZW50cyByZXByZXNlbnRzIHByaW1pdGl2ZXMgCi0qLwotcHVibGljIGNsYXNzIFNpbXBsZUVsZW1lbnQgZXh0ZW5kcyBUeXBlRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIHNpbXBsZSB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgc2ltcGxlIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBTaW1wbGVFbGVtZW50ICggUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50LCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBwcmltKQotICB7Ci0gICAgc3VwZXIobmFtZSxwYXJhbWV0ZXJFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5TSU1QTEUpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5QQVJBTUVURVJfT1dORVI7Ci0gICAgc2V0UHJpbWl0aXZlKHByaW0pOwotICB9Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgQXR0cmlidXRlIHRoYXQgb3ducyB0aGlzIHNpbXBsZSB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgQXR0cmlidXRlRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIFNpbXBsZUVsZW1lbnQgKCBBdHRyaWJ1dGVFbGVtZW50IGF0dHJpYnV0ZUVsZW1lbnQsIFN0cmluZyBuYW1lLCBib29sZWFuIHByaW0pCi0gIHsKLSAgICBzdXBlcihuYW1lLGF0dHJpYnV0ZUVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LlNJTVBMRSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkFUVFJJQlVURV9PV05FUjsKLSAgICBzZXRQcmltaXRpdmUocHJpbSk7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgQXR0cmlidXRlIHRoYXQgb3ducyB0aGlzIHNpbXBsZSB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgQXR0cmlidXRlRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIFNpbXBsZUVsZW1lbnQgKCBGaWVsZEVsZW1lbnQgZmllbGRFbGVtZW50LCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBwcmltKQotICB7Ci0gICAgc3VwZXIobmFtZSxmaWVsZEVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LlNJTVBMRSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkZJRUxEX09XTkVSOwotICAgIHNldFByaW1pdGl2ZShwcmltKTsKLSAgfQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NpbXBsZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNmVkZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NpbXBsZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMTAgICAyMDkwODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFNpbXBsZVR5cGUgaW1wbGVtZW50cyBEYXRhVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGZUeXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZVbmlxdWVOYW1lOwotCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgU2ltcGxlVHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIGZUeXBlID0gdHlwZTsKLSAgfQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgc2ltcGxlIGZvcm0gaXMganVzdCBhIHRleHQgaW5wdXQgYm94Ci0gICogQHBhcmFtIFN0cmluZyBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50Ci0gICogQHJldHVybiBTdHJpbmcgVGhlIGZvcm0gdXNlZCB0byBjb2xsZWN0IHRoZSBkYXRhCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgaW5wdXRGb3JtKFN0cmluZyBuYW1lKQotICB7Ci0gICAgIFN0cmluZyBpbnB1dEZvcm0gPSAiPFREIEFMSUdOPVwibGVmdFwiPjxJTlBVVCBUWVBFPVwiVEVYVFwiIE5BTUU9XCIiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICJcIiBTSVpFPTIwPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGRpY3RhdGVzIGhvdyB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSAKLSAgKiBpbmNvbWluZyBzdHJpbmcgZnJvbSB0aGUgaW5wdXQganNwLiBZb3UgbWF5IG9yIG1heSBub3QgdXNlIHRoZSBtYXJrdXAgCi0gICogZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgc2ltcGxlIHR5cGVzIHVzZSBpdC4gRG9tRWxlbWVudCBkb2VzIG5vdAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb2RlIHRvIGJlIGdlbmVyYXRlZAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpCi0gIHsKLSAgICAgU3RyaW5nIHJlcXVlc3RDb2RlID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIiArIEdlbmVyYXRvci5TUEFDRSAKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIGlkICsgIj0gIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiIgotICAgICAJICAgICAgICAgICAgICAgICAgICsgbmFtZSArIlwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIHJlcXVlc3RDb2RlOwotICAgfQotIAotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRzIGJhY2sgdGhlIGNvZGUgcmVxdWlyZWQgdG8gZ28gZnJvbSB0aGUgCi0gICogc3RyaW5nIHRoZSB1c2VyIGVudGVyZWQgdG8gdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBlbGVtZW50Ci0gICogaXQgdXNlcyBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgYWxsIHN1YmNsYXNzZXMgb2YgU2ltcGxlVHlwZSBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50Ci0gICogVGhlIFN0cmluZ1RvVHlwZSBmdW5jdGlvbgotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5TUEFDRSArIG5vZGVOYW1lIAotICAgICAJICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5TUEFDRSArICIgPSAiICsgU3RyaW5nVG9UeXBlKGF0dHJpYnV0ZU5hbWUpIAotICAgICAJICAgICAgICAgICAgICAgICArICIiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0KLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLkpzcFV0aWxzLm1hcmt1cCgiICsgVHlwZVRvU3RyaW5nKG5hbWUpICsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RhdGVMZXNzQmVhblR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TdGF0ZUxlc3NCZWFuVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGY5ZDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TdGF0ZUxlc3NCZWFuVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBTdGF0ZUxlc3NCZWFuVHlwZSBleHRlbmRzIFJlY29nbml6ZWRSZXR1cm5UeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgCi0gIHB1YmxpYyBTdGF0ZUxlc3NCZWFuVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlNUQVRFTEVTU19CRUFOKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RyaW5nVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1N0cmluZ1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5OWM3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RyaW5nVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFN0cmluZ1R5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFN0cmluZ1R5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuU1RSSU5HX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gbmFtZSArICI7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsgICAgCi0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJTdHJpbmcudmFsdWVPZigiICsgbmFtZSArICIpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4MGQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUeXBlRWxlbWVudCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgSmF2YSBiZWFuIGZlYXR1cmVzIHRoYXQgaGF2ZSB0eXBlcy4KLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZUVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX0lOU1RBTlRJQUJMRSA9ICJub25JbnN0YW50aWFibGUiOwotCi0gIHB1YmxpYyBzdGF0aWMgaW50IEJFQU4gPSAwOwotICBwdWJsaWMgc3RhdGljIGludCBTSU1QTEUgPSAxOwotICBwdWJsaWMgc3RhdGljIGludCBBUlJBWSA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgZlR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgZk93bmVyVHlwZTsKLSAgcHJpdmF0ZSBib29sZWFuIGZQcmltaXRpdmUgPSBmYWxzZTsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4gQXV0b21hdGljYWxseSBhZGRzIHRoaXMgb2JqZWN0IHRvIHRoZSBnaXZlbiBtb2RlbC4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdG8gb3duIHRoaXMgb2JqZWN0LgotICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0LCBvbmUgb2YKLSAgKiA8Y29kZT5CRUFOPC9jb2RlPiwgPGNvZGU+U0lNUExFPC9jb2RlPiBvciA8Y29kZT5BUlJBWTwvY29kZT4uCi0gICovCi0gIHByb3RlY3RlZCBUeXBlRWxlbWVudCAoIFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgaW50IHR5cGUgKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgZlR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICovCi0gIHByb3RlY3RlZCBUeXBlRWxlbWVudCAoIFN0cmluZyBuYW1lLCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUsIFN0cmluZyBpbmJvdW5kUmVsTmFtZSwgaW50IHR5cGUgKQotICB7Ci0gICAgc3VwZXIobmFtZSxlbGVtZW50LG91dGJvdW5kUmVsTmFtZSxpbmJvdW5kUmVsTmFtZSk7Ci0gICAgZlR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoKLSAgKlRoaXMgd2lsbCB0ZWxsIHlvdSB3ZXRoZXIgdGhlIHR5cGUgaXMgYSBiZWFuCi0gICpAcGFyYW0gQm9vbGVhbiByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBiZWFuCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBpc0JlYW4oKQotICB7Ci0gICAgaWYgKGZUeXBlID09IEJFQU4pIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICpUaGlzIHdpbGwgdGVsbCB5b3Ugd2V0aGVyIHRoZSB0eXBlIGlzIGEgYmVhbgotICAqQHBhcmFtIEJvb2xlYW4gcmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYmVhbgotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcmltaXRpdmUoKQotICB7Ci0gICAgcmV0dXJuIGZQcmltaXRpdmU7Ci0gIH0KLQotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIGJlYW4KLSAgKkBwYXJhbSBCb29sZWFuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGJlYW4KLSAgKiovCi0gIHByb3RlY3RlZCB2b2lkIHNldFByaW1pdGl2ZShib29sZWFuIHByaW0pCi0gIHsKLSAgICBmUHJpbWl0aXZlID0gcHJpbTsgCi0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGZvciBhcnJheXMgYXMgd2l0aCBhbGwgdHlwZXMgdGhlCi0gICogbmFtZXMgY29tZSBvdXQgYXMgamF2YS51dGlsLnR5cGUsIGJ1dCB3aXRoIGFuIGFycmF5IGl0IAotICAqIGlzbnQgZXhwbGljaXQgaW4gdGVsbGluZyB1cyBpdHMgYW4gYXJyYXkKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0gIAotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIHNpbXBsZQotICAqQHBhcmFtIEJvb2xlYW4gcmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgc2ltcGxlCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NpbXBsZSgpCi0gIHsKLSAgICBpZiAoZlR5cGUgPT0gU0lNUExFKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIGFycmF5Ci0gICpAcGFyYW0gQm9vbGVhbiByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhcnJheQotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gaXNBcnJheSgpCi0gIHsKLSAgICBpZiAoZlR5cGUgPT0gQVJSQVkpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9BVFRSSUJVVEVTID0gImF0dHJpYnV0ZXMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfRklFTERTID0gImZpZWxkcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9UWVBFID0gInR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfT1dORVIgPSAib3duZXIiOwotCi0gIHB1YmxpYyBzdGF0aWMgaW50IFBBUkFNRVRFUl9PV05FUiA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IEFUVFJJQlVURV9PV05FUiA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IEZJRUxEX09XTkVSID0gMjsKLSAgcHVibGljIHN0YXRpYyBpbnQgUk9PVCA9IDM7Ci0KLSAgLyoKLSAgKiBUaGlzIGNvdWxkIGJlIFRoZSByb290IHRlc3QgYmVhbgotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgcm9vdCBiZWFuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzUm9vdCgpCi0gIHsKLSAgICBpZihmT3duZXJUeXBlID09IFJPT1QpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBUeXBlIGNvdWxkIGJlIG93bmVkIGJ5IGEgUGFyYW1ldGVyIG9yIGFuIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgb3duZWQgYnkgYSBwYXJhbWV0ZXIKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPd25lclBhcmFtZXRlcigpCi0gIHsKLSAgICBpZihmT3duZXJUeXBlID09IFBBUkFNRVRFUl9PV05FUikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIFR5cGUgY291bGQgYmUgb3duZWQgYnkgYSBQYXJhbWV0ZXIgb3IgYW4gYXR0cmlidXRlCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhpcyBpcyBvd25lZCBieSBhbiBhdHRyaWJ1dGUgCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3duZXJBdHRyaWJ1dGUoKQotICB7Ci0gICAgaWYoZk93bmVyVHlwZSA9PSBBVFRSSUJVVEVfT1dORVIpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBUeXBlIGNvdWxkIGJlIG93bmVkIGJ5IGEgUGFyYW1ldGVyIG9yIGFuIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgb3duZWQgYnkgYW4gYXR0cmlidXRlIAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc093bmVyRmllbGQoKQotICB7Ci0gICAgaWYoZk93bmVyVHlwZSA9PSBGSUVMRF9PV05FUikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBUeXBlIG1heSBiZSBvd25lZCBieSBhIHBhcmFtZXRlciBvciBhbiBhdHRyaWJ1dGUgCi0gICogVXNlIHRoaXMgbWV0aG9kIGluIGNvbmp1bmN0aW9uIHdpdGggaXNPd25lclBhcmFtdGVyLCBpc093bmVyCi0gICogQHJldHVybiBCYXNpY0VsZW1lbnQgdGhlIGVsZW1lbnQgdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQmFzaWNFbGVtZW50IGdldE93bmluZ0VsZW1lbnQgKCkKLSAgewotICAgIGlmIChpc093bmVyUGFyYW1ldGVyKCkpewotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05FUik7Ci0gICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgICB9Ci0gICAgZWxzZSBpZihpc093bmVyQXR0cmlidXRlKCkpewotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05FUik7Ci0gICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgICB9Ci0gICAgZWxzZSBpZihpc093bmVyRmllbGQoKSl7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX09XTkVSKTsKLSAgICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKEJhc2ljRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9UeXBlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZWQ2MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTQ1Njc2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwODIzCSAgMTQ1NjQzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotLyoqCi0gKiBUeXBlRmFjdG9yeQotICogQ3JlYXRpb24gZGF0ZTogKDQvMTAvMjAwMSAxMjo0MTo0OCBQTSkKLSAqIEBhdXRob3I6IEdpbGJlcnQgQW5kcmV3cwotICovCi1wdWJsaWMgY2xhc3MgVHlwZUZhY3RvcnkgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUkxfTkFNRSAgICAgICAgICAgICAgICAgICA9ICJqYXZhLm5ldC5VUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfTkFNRSAgICAgICAgICAgICAgID0gImphdmEubGFuZy5TdHJpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSUdfREVDSU1BTF9OQU1FICAgICAgICAgID0gImphdmEubWF0aC5CaWdEZWNpbWFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklHX0lOVEVHRVJfTkFNRSAgICAgICAgICA9ICJqYXZhLm1hdGguQmlnSW50ZWdlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEVfTkFNRSAgICAgICAgICAgICAgICAgPSAiamF2YS51dGlsLkRhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSA9ICJqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxFTkRBUl9OQU1FICAgICAgICAgICAgID0gImphdmEudXRpbC5DYWxlbmRhciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT0xFQU5fTkFNRSAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkJvb2xlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCWVRFX05BTUUgICAgICAgICAgICAgICAgICA9ICJqYXZhLmxhbmcuQnl0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVUJMRV9OQU1FICAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkRvdWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMT0FUX05BTUUgICAgICAgICAgICAgICAgID0gImphdmEubGFuZy5GbG9hdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVHRVJfTkFNRSAgICAgICAgICAgICAgID0gImphdmEubGFuZy5JbnRlZ2VyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9OR19OQU1FICAgICAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkxvbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9SVF9OQU1FICAgICAgICAgICAgICAgICA9ICJqYXZhLmxhbmcuU2hvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFSQUNURVJfTkFNRSAgICAgICAgICAgID0gImphdmEubGFuZy5DaGFyYWN0ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfTkFNRQkJCSAgID0gImphdmEubGFuZy5PYmplY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0JPT0xFQU5fTkFNRSAgICAgICAgID0gImJvb2xlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0JZVEVfTkFNRSAgICAgICAgICAgID0gImJ5dGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0RPVUJMRV9OQU1FICAgICAgICAgID0gImRvdWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fRkxPQVRfTkFNRSAgICAgICAgICAgPSAiZmxvYXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0lOVEVHRVJfTkFNRSAgICAgICAgID0gImludCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fTE9OR19OQU1FICAgICAgICAgICAgPSAibG9uZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fU0hPUlRfTkFNRSAgICAgICAgICAgPSAic2hvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0NIQVJfTkFNRSAgICAgICAgICAgID0gImNoYXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWT0lEX05BTUUgICAgICAgICAgICAgICAgICA9ICJ2b2lkIjsKLQotICAvL3NvbWUgc3BlY2lhbCBjb21wbGV4Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPTV9FTEVNRU5UX05BTUUgICA9ICJvcmcudzNjLmRvbS5FbGVtZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNRU5UX05BTUUgPSAiamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFURUxFU1NfQkVBTiA9IEJlYW5FbGVtZW50LlNUQVRFTEVTU19CRUFOOwotCi0KLQotICBwdWJsaWMgc3RhdGljIEhhc2h0YWJsZSBqYXZhVHlwZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICBwdWJsaWMgVHlwZUZhY3RvcnkoKXt9Ci0KLSAgc3RhdGljewotICAgIGphdmFUeXBlcy5wdXQoQk9PTEVBTl9OQU1FLG5ldyBQcmltaXRpdmVKYXZhVHlwZXMoQk9PTEVBTl9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChCWVRFX05BTUUsICAgbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhCWVRFX05BTUUpKTsKLSAgICBqYXZhVHlwZXMucHV0KERPVUJMRV9OQU1FLCBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKERPVUJMRV9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChGTE9BVF9OQU1FLCAgbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhGTE9BVF9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChJTlRFR0VSX05BTUUsbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhJTlRFR0VSX05BTUUpKTsKLSAgICBqYXZhVHlwZXMucHV0KExPTkdfTkFNRSwgICBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKExPTkdfTkFNRSkpOwotICAgIGphdmFUeXBlcy5wdXQoU0hPUlRfTkFNRSwgIG5ldyBQcmltaXRpdmVKYXZhVHlwZXMoU0hPUlRfTkFNRSkpOwotICAgIGphdmFUeXBlcy5wdXQoQ0hBUkFDVEVSX05BTUUsICBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKENIQVJBQ1RFUl9OQU1FKSk7Ci0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gaGFuZGxlIHJlY29nbml6ZWQgYmVhbnMgCi0gICogaW4gZGlzcGxheWluZyBhbmQgZ2VuZXJhdGluZyBjb2RlIGZvciB0aGVtIGluc3RlYWQgb2YgCi0gICogdHJlYXRpbmcgdGhlbSBhcyBjb21wbGV4IHR5cGVzCi0gICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVjb2duaXplZEJlYW4oU3RyaW5nIHR5cGUpCi0gIHsKLQotICAgIC8vICAgICAKLSAgICAvL2N1cnJlbnQgcmVjb2duaXplZCBiZWFucyAobW9zdGx5IGphdmEubGFuZykKLSAgICBpZiAodHlwZS5lcXVhbHMoQk9PTEVBTl9OQU1FKSAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhCWVRFX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoRE9VQkxFX05BTUUpICAgICAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKEZMT0FUX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoSU5URUdFUl9OQU1FKSAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhMT05HX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoU0hPUlRfTkFNRSkgICAgICAgICAgICAgIHx8ICAgICAgCi0gICAgICAgIHR5cGUuZXF1YWxzKENIQVJBQ1RFUl9OQU1FKSAgICAgICAgICB8fCAgICAgIAotICAgICAgICB0eXBlLmVxdWFscyhET01fRUxFTUVOVF9OQU1FKSAgICAgICAgfHwgICAgICAKLQkgICAgdHlwZS5lcXVhbHMoU09BUF9FTEVNRU5UX05BTUUpICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhCSUdfREVDSU1BTF9OQU1FKSAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKEJJR19JTlRFR0VSX05BTUUpICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoREFURV9OQU1FKSAgICAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhHUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSkgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoQ0FMRU5EQVJfTkFNRSkgICAgICAgICAgIHx8IAotICAgICAgICB0eXBlLmVxdWFscyhVUkxfTkFNRSkgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKE9CSkVDVF9OQU1FKQkJCSB8fAotICAgICAgICB0eXBlLmVxdWFscyhTVFJJTkdfTkFNRSkpICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICAgcmV0dXJuIGZhbHNlOyAKLSAgCi0gIH0KLQotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGhhbmRsZSB1bnN1cHBvcnRlZCB0eXBlcyAKLSAgKiBpZiB3ZSBkb250IHdhbnQgdG8gc3VwcG9ydCBhIHR5cGUgYW5kIHdlIHdhbnQgdG8gb21pdHQgdGhpcyAgCi0gICogbWV0aG9kIGZyb20gdGhlIHNhbXBsZXMKLSAgKiBAcGFyYW0gamF2YUhlbHBlcnMgdGhpcyBpcyB0aGUgdHlwZSB0byBiZSBldmFsdWF0ZWQKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkCi0gICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVblN1cHBvcnRlZFR5cGUoSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMpCi0gIHsKLSAgICAvL3dlIGFsc28gZG9udCBzdXBwb3J0IGFycmF5cwotCS8vamF2YS5sYW5nLk9iamVjdHMgYXJlIG9rIGZvciByZXR1cm4gdHlwZXMgYnV0IG5vdCBmb3IgaW5wdXQgdHlwZQotICAgIGlmIChqYXZhSGVscGVycy5pc0FycmF5KCl8fAotICAgIAkJamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoTUFQX05BTUUpfHwKLSAgICAJCWphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKFZFQ1RPUl9OQU1FKXx8Ci0gICAgCQlqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpLmVxdWFscyhEQVRBX0hBTkRMRVIpfHwKLSAgICAJCWphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKE9CSkVDVF9OQU1FKSB8fAotICAgIAkJamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5jbGFzcyIpCSkgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSEFTSFRBQkxFX05BTUUgPSAiamF2YS51dGlsLkhhc2h0YWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1BUF9OQU1FID0gImphdmEudXRpbC5NYXAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBWRUNUT1JfTkFNRSA9ICJqYXZhLnV0aWwuVmVjdG9yIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQVJSQVlfTkFNRSA9IEFycmF5RWxlbWVudC5BUlJBWV9OQU1FOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUklNSVRJVkVfQVJSQVlfTkFNRSA9ICJwcmltaXRpdmVhcnJheSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIERBVEFfSEFORExFUiA9ICJqYXZheC5hY3RpdmF0aW9uLkRhdGFIYW5kbGVyIjsKLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZWNvZ25pemVkUmV0dXJuVHlwZShKYXZhSGVscGVycyBqYXZhSGVscGVycykKLSAgewotICAgIC8vYXJyYXlzIAotICAgIC8vSGFzaHRhYmxlCi0gICAgLy9WZWN0b3JzCi0JLy9qYXZhLmxhbmcuT2JqZWN0cyBhcmUgb2sgZm9yIHJldHVybiB0eXBlcwotICAgIGlmIChqYXZhSGVscGVycy5pc0FycmF5KCkpIHJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKGphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKEhBU0hUQUJMRV9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIGlmIChqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpLmVxdWFscyhWRUNUT1JfTkFNRSkpcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAoamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoTUFQX05BTUUpKXJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKGphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKE9CSkVDVF9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlY29nbml6ZWRSZXR1cm5UeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgLy9hcnJheXMgCi0gICAgLy9IYXNodGFibGUKLSAgICAvL1ZlY3RvcnMKLQkvL2phdmEubGFuZy5PYmplY3RzIGFyZSBvayBmb3IgcmV0dXJuIHR5cGVzCi0gICAgaWYgKHR5cGUuc3RhcnRzV2l0aChBUlJBWV9OQU1FKSkgcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSEFTSFRBQkxFX05BTUUpKXJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFZFQ1RPUl9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNQVBfTkFNRSkpcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoT0JKRUNUX05BTUUpKSByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N0YXRlTGVzc0JlYW4oU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBpZih0eXBlLnN0YXJ0c1dpdGgoU1RBVEVMRVNTX0JFQU4pKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotCi0gIC8qKgotICAqIENyZWF0ZXMgYSB0eXBlIGJhc2VkIG9uIHRoZSBKYXZhSGVscGVyIHRoZW4gc2V0cyB0aGlzIHR5cGUgaW4gdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW1zIEphdmFIZWxwZXJzIHRoaXMgaG9sZHMgdGhlIHR5cGUKLSAgKiBAcGFyYW0gVHlwZUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSB0eXBlIGNyZWF0ZWQKLSAgKiBAcGFyYW0gU3RyaW5nIFVuaXF1ZW5hbWUgdG8gYmUgdXNlZCB3aGVuIG5hbWluZyB0ZW1wIHZhcmlhYmxlcwotICAqLwotIAotICBwdWJsaWMgc3RhdGljIERhdGFUeXBlIGNyZWF0ZVR5cGUoU3RyaW5nIHR5cGUsIFN0cmluZyBVbmlxdWVOYW1lKQotICB7Ci0gICAgLy90aGlzIGd1eSBtaWdodCBiZSBib3RoIHN0YXRlbGVzcyBhbmQgb25lIG9mIHRoZSBiZWxvdyBlbGVtZW50cwotICAgIC8vd2Ugd291bGQgbGlrZSB0byBiZSBhcyBzcGVjaWZpYyBhcyB3ZSBjYW4sIHN0YXRlbGVzcyBpcyB0aGUgd29yc3QgY2FzZSAKLSAgICBib29sZWFuIHN0YXRlbGVzcyA9IGZhbHNlOyAgCi0gICAgaWYodHlwZS5zdGFydHNXaXRoKFNUQVRFTEVTU19CRUFOKSkgewotICAgICAgc3RhdGVsZXNzID0gdHJ1ZTsKLSAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cmluZygyOSk7IAotICAgIH0KLSAgIAotICAgIERhdGFUeXBlIGRhdGF0eXBlID0gbnVsbDsKLSAgICBpZiAgICAgICh0eXBlLmVxdWFscyhQUklNX0JPT0xFQU5fTkFNRSkpIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUJvb2xlYW5UeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUFJJTV9CWVRFX05BTUUpKSAgICAgZGF0YXR5cGUgPSBuZXcgUHJpbWl0aXZlQnl0ZVR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0RPVUJMRV9OQU1FKSkgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZURvdWJsZVR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0ZMT0FUX05BTUUpKSAgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUZsb2F0VHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFBSSU1fTE9OR19OQU1FKSkgICAgZGF0YXR5cGUgPSBuZXcgUHJpbWl0aXZlTG9uZ1R5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0lOVEVHRVJfTkFNRSkpIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUludFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0NIQVJfTkFNRSkpICAgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUNoYXJUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUFJJTV9TSE9SVF9OQU1FKSkgICBkYXRhdHlwZSA9IG5ldyBQcmltaXRpdmVTaG9ydFR5cGUoKTsKLSAgICAKLQotICAgIC8vc2VlIGlmIHRoaXMgY3JpdHRlciBpcyBhIGphdmF0eXBlCi0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoQk9PTEVBTl9OQU1FKSAgICAgfHwKLSAgICAgICAgICAgIHR5cGUuZXF1YWxzKEJZVEVfTkFNRSkgICAgICAgIHx8Ci0gICAgICAgICAgICB0eXBlLmVxdWFscyhET1VCTEVfTkFNRSkgICAgICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoRkxPQVRfTkFNRSkgICAgICAgfHwKLSAgICAgICAgICAgIHR5cGUuZXF1YWxzKElOVEVHRVJfTkFNRSkgICAgIHx8Ci0gICAgICAgICAgICB0eXBlLmVxdWFscyhMT05HX05BTUUpICAgICAgICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoQ0hBUkFDVEVSX05BTUUpICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoU0hPUlRfTkFNRSkpICAgICAgICBkYXRhdHlwZSA9IChEYXRhVHlwZSlqYXZhVHlwZXMuZ2V0KHR5cGUpOyAgIAotCi0gICAgLy9zZWUgaWYgaXRzIGEgY2FzZSB3ZSBoYW5kbGUKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhTVFJJTkdfTkFNRSkpICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgU3RyaW5nVHlwZSgpOyAKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhWT0lEX05BTUUpKSAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgVm9pZFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhET01fRUxFTUVOVF9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgRG9tRWxlbWVudFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhTT0FQX0VMRU1FTlRfTkFNRSkpICAgICAgICAgZGF0YXR5cGUgPSBuZXcgU09BUEVsZW1lbnRUeXBlKCk7ICAKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSUdfREVDSU1BTF9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgQmlnRGVjaW1hbFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSUdfSU5URUdFUl9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgQmlnSW50ZWdlclR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhEQVRFX05BTUUpKSAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gbmV3IERhdGVUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoVVJMX05BTUUpKSAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBVUkxUeXBlKCk7IAotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEdSRUdPUklBTl9DQUxFTkRBUl9OQU1FKSkgIGRhdGF0eXBlID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyVHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKENBTEVOREFSX05BTUUpKSAgZGF0YXR5cGUgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXJUeXBlKCk7Ci0KLSAgICAvL2l0IGNvdWxkIGJlIGEgcmV0dXJuIHR5cGUgd2Ugc3VwcG9ydAotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEhBU0hUQUJMRV9OQU1FKSkgICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBIYXNodGFibGVUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoVkVDVE9SX05BTUUpKSAgICAgICAgICAgICAgIGRhdGF0eXBlID0gbmV3IFZlY3RvclR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNQVBfTkFNRSkpICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgTWFwVHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKE9CSkVDVF9OQU1FKSkJCQkJZGF0YXR5cGUgPSBuZXcgT2JqZWN0VHlwZSgpOwotCi0gICAgLy8gbmVlZCB0byBzZWUgaWYgaXQgaXMgYW4gb2JqZWN0IGFycmF5Ci0gICAgLy9vciBhIHByaW1pdGl2ZQotICAgIGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aChBUlJBWV9OQU1FKSl7ICAgICAgICAgICAgICAKLSAgICAJU3RyaW5nIG5hbWUgPSB0eXBlLnN1YnN0cmluZygyMSk7IAotICAgICAgICBpZihuYW1lLnN0YXJ0c1dpdGgoUFJJTV9CT09MRUFOX05BTUUpIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fQllURV9OQU1FKSAgICAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9ET1VCTEVfTkFNRSkgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fRkxPQVRfTkFNRSkgICAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9MT05HX05BTUUpICAgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fSU5URUdFUl9OQU1FKSAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9DSEFSX05BTUUpICAgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fU0hPUlRfTkFNRSkpCi0gICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBQcmltaXRpdmVBcnJheVR5cGUobmFtZSk7ICAKLSAgICAgICAgZWxzZQotICAgICAgICAJZGF0YXR5cGUgPSBuZXcgQXJyYXlUeXBlKG5hbWUpOwotCi0gICAgfQotICAgIGVsc2UgaWYgKHN0YXRlbGVzcyl7Ci0gICAgICAgIGRhdGF0eXBlID0gbmV3IFN0YXRlTGVzc0JlYW5UeXBlKHR5cGUpOwotCi0gICAgfQotCi0KLSAgICBkYXRhdHlwZS5zZXRVbmlxdWVOYW1lKFVuaXF1ZU5hbWUpOwotICAgIHJldHVybiBkYXRhdHlwZTsKLSAgICAgCi0gIH0KLSAgCi0gIAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9VUkxUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVVJMVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzBmYjI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9VUkxUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgVVJMVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgVVJMVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5VUkxfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAibmV3IGphdmEubmV0LlVSTCgiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247ICAgIAotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZlY3RvclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9WZWN0b3JUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDcxOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZlY3RvclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHJlY29nbml6ZWQgcmV0dXJuIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFZlY3RvclR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFZlY3RvclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuVkVDVE9SX05BTUUpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Wb2lkVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZvaWRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZGU5MWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZvaWRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBWb2lkVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBWb2lkVHlwZSgpCi0gIHsKLSAgICBzdXBlcigidm9pZCIpOwotICB9Ci0KLSAgIC8qKgotICAqIGZvciBhIHZvaWQgdGhlcmUgaXMgbm8gbmVlZCB0byByZXR1cm4gCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiU3RyaW5nLnZhbHVlT2YoIiArIG5hbWUgKyAiKSI7Ci0gIH0KLSAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvdmFsaWRhdGUvVmFsaWRhdGlvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3ZhbGlkYXRlL1ZhbGlkYXRpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDEyOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvdmFsaWRhdGUvVmFsaWRhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgbWFuYWdlcyB0aGUgdmFsaWRhdGlvbiBzdGF0ZSBvZiBwcm9qZWN0cyB0aGF0IHNvbWUgdGFza3MgbWF5IHdhbnQKLSAgKiB0byBkaXNhYmxlLiAgVGhlIG1hbmFnZXIgY2FuIHRoZW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSB2YWxpZGF0aW9uIHN0YXRlLgotKiovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1hbmFnZXIKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgICAqIFRoaXMgc2V0IGNvbnRhaW5zIGEgc2V0IG9mIElQcm9qZWN0cyB0aGF0IG5lZWQgdG8gYmUgdmFsaWRhdGVkLgotICAqKi8KLSAgcHJpdmF0ZSBIYXNoU2V0IHByb2plY3RzID0gbnVsbDsgICAgICAgICAgICAgIAotCi0gIC8qKgotICAgICogVGhpcyBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGoyZWUgdmFsaWRhdG9yLgotICAqKi8KLSAgLy9wZ20gcHJpdmF0ZSBWYWxpZGF0b3JNYW5hZ2VyIGoyZWVNYW5hZ2VyID0gbnVsbDsKLQotICAvKioKLSAgICAqIFRoaXMgYm9vbGVhbiBjb250YWlucyB0aGUgYXV0byBidWlsZCBzZXR0aW5nIHVuZGVyIHByZWZlcnJlbmNlCi0gICoqLwotICBwcml2YXRlIGJvb2xlYW4gaXNBdXRvQnVpbGRfOwotICBwcml2YXRlIGJvb2xlYW4gYXV0b0J1aWxkRGlzYWJsZWRfOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWFuYWdlcigpCi0gIHsKLSAgICBwcm9qZWN0cyAgICA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgLy9wZ20gajJlZU1hbmFnZXIgPSBWYWxpZGF0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKTsKLSAgICBzZXRBdXRvQnVpbGRQcmVmZXJlbmNlKCk7Ci0gICAgYXV0b0J1aWxkRGlzYWJsZWRfID0gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogRGlzYWJsZXMgdGhlIHZhbGlkYXRpb24gZm9yIGEgcHJvamVjdCBpZiByZXF1aXJlZC4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVWYWxpZGF0aW9uRm9yUHJvamVjdCggSVByb2plY3QgcHJvamVjdCApCi0gIHsgICAgCi0gICAgLy8gV2UgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgcHJvamVjdCBuZWVkcyBoYXZlIHZhbGlkYXRpb24gdHVybmVkIGJhY2sgb24uCi0gICAgcHJvamVjdHMuYWRkKCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgLy9wZ20gajJlZU1hbmFnZXIuc3VzcGVuZEFsbFZhbGlkYXRpb24oIHRydWUgKTsKLSAgfQotCi0gIC8qKgotICAgICogUmVzdG9yZXMgdGhlIHZhbGlkYXRpb24gc3RhdGUgZm9yIGFsbCBuZWVkZWQgcHJvamVjdHMuCi0gICoqLwotICBwdWJsaWMgdm9pZCByZXN0b3JlVmFsaWRhdGlvbkZvclByb2plY3RzKCBib29sZWFuIHJ1blZhbGlkYXRpb24gKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlBdXRvQnVpbGQoYm9vbGVhbiBpc0F1dG9CdWlsZCkgewotICAgIHRyeSB7Ci0gICAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICAgIElXb3Jrc3BhY2VEZXNjcmlwdGlvbiB3b3Jrc3BhY2VEZXNjID0gd29ya3NwYWNlLmdldERlc2NyaXB0aW9uKCk7Ci0gICAgICB3b3Jrc3BhY2VEZXNjLnNldEF1dG9CdWlsZGluZyhpc0F1dG9CdWlsZCk7Ci0gICAgICB3b3Jrc3BhY2Uuc2V0RGVzY3JpcHRpb24od29ya3NwYWNlRGVzYyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVBdXRvQnVpbGQoKSB7Ci0gICAgaWYgKCFhdXRvQnVpbGREaXNhYmxlZF8pIHsKLSAgICAgIHNldEF1dG9CdWlsZFByZWZlcmVuY2UoKTsKLSAgICAgIG1vZGlmeUF1dG9CdWlsZChmYWxzZSk7Ci0gICAgICBhdXRvQnVpbGREaXNhYmxlZF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVBdXRvQnVpbGQoKSB7Ci0gICAgaWYgKGF1dG9CdWlsZERpc2FibGVkXykgewotICAgICAgbW9kaWZ5QXV0b0J1aWxkKGdldEF1dG9CdWlsZFByZWZlcmVuY2UoKSk7Ci0gICAgICBhdXRvQnVpbGREaXNhYmxlZF8gPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRBdXRvQnVpbGRQcmVmZXJlbmNlKCkgewotICAgIGlzQXV0b0J1aWxkXyA9IGdldFdvcmtzcGFjZUF1dG9CdWlsZFByZWZlcmVuY2UoKTsKLSAgICByZXR1cm4gaXNBdXRvQnVpbGRfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0J1aWxkUHJlZmVyZW5jZSgpIHsKLSAgICByZXR1cm4gaXNBdXRvQnVpbGRfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0V29ya3NwYWNlQXV0b0J1aWxkUHJlZmVyZW5jZSgpIHsKLSAgICBJV29ya3NwYWNlRGVzY3JpcHRpb24gd29ya3NwYWNlRGVzYyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXREZXNjcmlwdGlvbigpOwotICAgIHJldHVybiB3b3Jrc3BhY2VEZXNjLmlzQXV0b0J1aWxkaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL0JpbmRpbmdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvQmluZGluZ0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FiMWEyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvQmluZGluZ0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1BPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9PUEVSQVRJT05TID0gIm9wZXJhdGlvbnMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfUE9SVF9UWVBFID0gInBvcnR0eXBlIjsKLSAgCi0gIHB1YmxpYyBCaW5kaW5nRWxlbWVudCAoUG9ydEVsZW1lbnQgcG9ydEVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHBvcnRFbGVtZW50LFJFTF9QT1JULFBvcnRFbGVtZW50LlJFTF9CSU5ESU5HKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfUE9SVCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9QT1JUX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9PUEVSQVRJT05TKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9PUEVSQVRJT05TKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvRGVmaW5pdGlvbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9EZWZpbml0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDU0YzIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9EZWZpbml0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC53c2RsbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIERlZmluaXRpb25FbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfU0VSVklDRVMgPSAic2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfV1NETCA9ICJ3c2RsIjsKLSAgCi0gIHB1YmxpYyBEZWZpbml0aW9uRWxlbWVudCAoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHdzZGxFbGVtZW50LFJFTF9XU0RMLFdTRExFbGVtZW50LlJFTF9ERUZJTklUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0V1NETCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1dTREwpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZlNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9TRVJWSUNFUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL01lc3NhZ2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvTWVzc2FnZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJlMjc4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvTWVzc2FnZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfUEFSVFMgPSAicGFydHMiOwotICAKLSAgcHVibGljIE1lc3NhZ2VFbGVtZW50IChPcGVyYXRpb25FbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLG9wZXJhdGlvbkVsZW1lbnQsUkVMX09QRVJBVElPTixPcGVyYXRpb25FbGVtZW50LlJFTF9NRVNTQUdFUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfT1BFUkFUSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1BBUlRTKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUEFSVFMpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9PcGVyYXRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvT3BlcmF0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDg5YzJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9PcGVyYXRpb25FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9NRVNTQUdFUyA9ICJtZXNzYWdlcyI7Ci0KLSAgcHVibGljIE9wZXJhdGlvbkVsZW1lbnQgKEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxiaW5kaW5nRWxlbWVudCxSRUxfQklORElORyxCaW5kaW5nRWxlbWVudC5SRUxfT1BFUkFUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX0JJTkRJTkcpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfTUVTU0FHRVMpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZk1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9NRVNTQUdFUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BhcnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUGFydEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0MDBkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUGFydEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBQYXJ0RWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gICAgCi0gIHB1YmxpYyBQYXJ0RWxlbWVudCAoTWVzc2FnZUVsZW1lbnQgbWVzc2FnZUVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1lc3NhZ2VFbGVtZW50LFJFTF9NRVNTQUdFLE1lc3NhZ2VFbGVtZW50LlJFTF9QQVJUUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX01FU1NBR0UpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9Qb3J0RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YmRhOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgUG9ydEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9CSU5ESU5HID0gImJpbmRpbmciOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfU0VSVklDRSA9ICJzZXJ2aWNlIjsKLSAgCi0gIHB1YmxpYyBQb3J0RWxlbWVudCAoU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHNlcnZpY2VFbGVtZW50LFJFTF9TRVJWSUNFLFNlcnZpY2VFbGVtZW50LlJFTF9QT1JUUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1NFUlZJQ0UpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9CSU5ESU5HKTsKLSAgfQotIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUG9ydFR5cGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUG9ydFR5cGVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZDE1NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRUeXBlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC53c2RsbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFBvcnRUeXBlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIAotICBwdWJsaWMgUG9ydFR5cGVFbGVtZW50IChCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmluZGluZ0VsZW1lbnQsUkVMX0JJTkRJTkcsQmluZGluZ0VsZW1lbnQuUkVMX1BPUlRfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX0JJTkRJTkcpOwotICB9Ci0KLSAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5MWQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1BPUlRTID0gInBvcnRzIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0RFRklOSVRJT04gPSAiZGVmaW5pdGlvbiI7Ci0gIAotICBwdWJsaWMgU2VydmljZUVsZW1lbnQgKERlZmluaXRpb25FbGVtZW50IGRlZmluaXRpb25FbGVtZW50LFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxkZWZpbml0aW9uRWxlbWVudCxSRUxfREVGSU5JVElPTixEZWZpbml0aW9uRWxlbWVudC5SRUxfU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9ERUZJTklUSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1BPUlRTKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUE9SVFMpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9TdHViYmVkV1NETE1vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU3R1YmJlZFdTRExNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhmYTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9TdHViYmVkV1NETE1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTdHViYmVkV1NETE1vZGVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcm90ZWN0ZWQgTW9kZWwgZk1vZGVsOwotICBwdWJsaWMgU3R1YmJlZFdTRExNb2RlbCgpCi0gIHsKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudCgiV1NETEZpbGVzIik7Ci0gICAgZk1vZGVsID0gd3NkbEVsZW1lbnQuZ2V0TW9kZWwoKTsgICAKLSAgfQotCi0gIHB1YmxpYyBNb2RlbCBnZXRXU0RMTW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIGZNb2RlbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKQotICB7Ci0gICAgRGVmaW5pdGlvbkVsZW1lbnQgZGVmMSA9IG5ldyBEZWZpbml0aW9uRWxlbWVudCgoV1NETEVsZW1lbnQpZk1vZGVsLmdldFJvb3RFbGVtZW50KCksIlN0b2NrUXVvdGUiKTsgCi0gICAgU2VydmljZUVsZW1lbnQgc2VyMSA9IG5ldyBTZXJ2aWNlRWxlbWVudChkZWYxLCJnZXRRdW90ZSIpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcjIgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMSwic2V0UXVvdGUiKTsKLSAgICBQb3J0RWxlbWVudCBwb3J0MSA9IG5ldyBQb3J0RWxlbWVudChzZXIxLCJwb3J0MSIpOwotICAgIFBvcnRFbGVtZW50IHBvcnQyID0gbmV3IFBvcnRFbGVtZW50KHNlcjEsInBvcnQyIik7Ci0gICAgUG9ydEVsZW1lbnQgcG9ydDMgPSBuZXcgUG9ydEVsZW1lbnQoc2VyMiwicG9ydDEiKTsKLSAgICBQb3J0RWxlbWVudCBwb3J0NCA9IG5ldyBQb3J0RWxlbWVudChzZXIyLCJwb3J0MiIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQxID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQxLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQyID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQyLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQzID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQzLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQ0ID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQ0LCJiaW5kMSIpOwotICAgIE9wZXJhdGlvbkVsZW1lbnQgb3AxID0gbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDEsIm9wMSIpOwotICAgIG5ldyBPcGVyYXRpb25FbGVtZW50KGJpbmQyLCJvcDEiKTsKLSAgICBuZXcgT3BlcmF0aW9uRWxlbWVudChiaW5kMywib3AxIik7Ci0gICAgbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDQsIm9wMSIpOwotICAgIE1lc3NhZ2VFbGVtZW50IG1lMSA9IG5ldyBNZXNzYWdlRWxlbWVudChvcDEsIm1lMSIpOwotICAgIE1lc3NhZ2VFbGVtZW50IG1lMiA9IG5ldyBNZXNzYWdlRWxlbWVudChvcDEsIm1lMiIpOwotICAgIG5ldyBQYXJ0RWxlbWVudChtZTEsInBlMSIpOwotICAgIG5ldyBQYXJ0RWxlbWVudChtZTIsInBlMiIpOwotCi0gICAgRGVmaW5pdGlvbkVsZW1lbnQgZGVmMiA9IG5ldyBEZWZpbml0aW9uRWxlbWVudCgoV1NETEVsZW1lbnQpZk1vZGVsLmdldFJvb3RFbGVtZW50KCksIlRlbXBDb252ZXJzaW9uIik7IAotICAgIFNlcnZpY2VFbGVtZW50IHNlcjMgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMiwiZ2V0VGVtcCIpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcjQgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMiwic2V0VGVtcCIpOwotICAgIFBvcnRFbGVtZW50IHBvcnQ1ID0gbmV3IFBvcnRFbGVtZW50KHNlcjMsInBvcnQxIik7Ci0gICAgUG9ydEVsZW1lbnQgcG9ydDYgPSBuZXcgUG9ydEVsZW1lbnQoc2VyNCwicG9ydDEiKTsKLSAgICBCaW5kaW5nRWxlbWVudCBiaW5kNSA9IG5ldyBCaW5kaW5nRWxlbWVudChwb3J0NSwiYmluZDEiKTsKLSAgICBCaW5kaW5nRWxlbWVudCBiaW5kNiA9IG5ldyBCaW5kaW5nRWxlbWVudChwb3J0NiwiYmluZDEiKTsKLSAgICBuZXcgT3BlcmF0aW9uRWxlbWVudChiaW5kNSwib3AxIik7Ci0gICAgbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDYsIm9wMSIpOwotCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1dTRExFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliMTQ1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0RFRklOSVRJT05TID0gImRlZmluaXRpb25zIjsKLSAgCi0gIC8qCi0gICoKLSAgKiovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCAoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzKG5hbWUsbmV3IEJhc2ljTW9kZWwoIldTRExNb2RlbCIpKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudCAoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgbW9kZWwuc2V0Um9vdEVsZW1lbnQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9ERUZJTklUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mRGVmaW5pdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldE51bWJlck9mRWxlbWVudHMoUkVMX0RFRklOSVRJT05TKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVBc3NlbWJseUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVBc3NlbWJseUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MjJhYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlQXNzZW1ibHlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5mcmFnbWVudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UHJlQXNzZW1ibHlGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURlcGxveUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVEZXBsb3lGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjY5ZmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURlcGxveUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRQcmVEZXBsb3lGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURldmVsb3BGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZmExZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRQcmVEZXZlbG9wRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVJbnN0YWxsRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZUluc3RhbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDJhMmIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZUluc3RhbGxGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5mcmFnbWVudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UHJlSW5zdGFsbEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUFzc2VtYmx5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVBc3NlbWJseUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Y2VmM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUFzc2VtYmx5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVBc3NlbWJseUZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZURlcGxveUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGVwbG95RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1OGY1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGVwbG95RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVEZXBsb3lGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVEZXZlbG9wRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVEZXZlbG9wRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiNGQyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUHJlRGV2ZWxvcEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUluc3RhbGxGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUluc3RhbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQ5MjQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVJbnN0YWxsRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVJbnN0YWxsRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3BsdWdpbi9XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQwNjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGJ1bGsgb2YgdGhlIFdlYiBTZXJ2aWNlcyBydW50aW1lLgotKiBPbmx5IHRoZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgcG9ydGlvbiBvZiB0aGUgcnVudGltZSBpcwotKiBmb3VuZCBlbHNld2hlcmUgLSBpbiB0aGUgb3JnLmVjbGlwc2UuanN0LndzLnVpIHBsdWdpbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4gaW5zdGFuY2VfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyNWUwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZVR5cGVHZW5lcmF0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgIAotICBwcml2YXRlIGJvb2xlYW4gZlN0YXRlTGVzczsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGN1cnJlbnRMZXZlbCwgaW50IGxldmVsc0RlZXApCi0gIHsKLSAgICAgc3VwZXIoYnVmZmVyLGN1cnJlbnRMZXZlbCxsZXZlbHNEZWVwKTsKLSAgfQotCi0gCi0gIC8qCi0gICogVGFrZXMgaW4gYW4gb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24gYnkgdGhpcyB2aXNpdG9yIGFjdGlvbgotICAqIEBwYXJhbSBPYmplY3QgVGhlIG9iamVjdCB0byBiZSBhY3RlZCB1cG9uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgIAotICAgICBBdHRyaWJ1dGVFbGVtZW50VHlwZSBhdHRyaWJ1dGVFbGVtZW50VHlwZSA9IChBdHRyaWJ1dGVFbGVtZW50VHlwZSlvYmplY3Q7Ci0gICAgIC8vaWYgaXQgaXMgYSBiZWFuIGlzIGl0IHN0YXRlbGVzcwotICAgICBhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpOyAKLSAgICAgaWYoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0U2V0dGVyTWV0aG9kKCkgPT0gbnVsbCkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnRUeXBlLmdldFR5cGVFbGVtZW50KCkuaXNCZWFuKCkpewotICAgICAgIEJlYW5FbGVtZW50IGJlYW4gPSAoQmVhbkVsZW1lbnQpYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKTsKLSAgICAgICBmU3RhdGVMZXNzID0gYmVhbi5pc1N0YXRlTGVzcygpOwotICAgICB9CSAKLQotICAgICBUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBUeXBlVmlzaXRvcigpOwotICAgICBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlVHlwZUdlbmVyYXRvcihmYnVmZmVyLGZDdXJyZW50TGV2ZWwsZkxldmVsc0RlZXApOwotICAgICBpZihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmlzQmVhbigpICYmICFUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSkgCi0gICAgIAkmJiAhKGdldFJldHVyblBhcmFtKCkgJiYgKFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKSB8fCBmU3RhdGVMZXNzKSkpCi0gICAgICAgICAgICAgICAgCi0gICAgIGFkZFBhcmVudEdldHRlcihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRHZXR0ZXJNZXRob2QoKSxhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IuYWRkUGFyZW50R2V0dGVyKHJldHVyblBhcmVudEdldHRlcigpLHJldHVyblBhcmVudEdldHRlclR5cGUoKSk7Ci0gICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0SW5zdGFuY2VOYW1lKGZJbnN0YW5jZU5hbWUpOwotICAgICBpbnB1dEZpbGVUeXBlR2VuZXJhdG9yLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOwotICAgICB0eXBlVmlzaXRvci5ydW4oYXR0cmlidXRlRWxlbWVudFR5cGUsaW5wdXRGaWxlVHlwZUdlbmVyYXRvcik7ICAgCi0gICAgIGZidWZmZXIgPSBpbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotICAgICAKLSAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzQ0ZjUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIGJ1ZyAyOTYyNDUgLSBZZW4gTHUgLSB5ZW5sdUBjYS5pYm0uY29tIC0gSW5wdXQuanNwIHByb2R1Y2VzIG1hbGZvcm1lZCBIVE1MIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBNZXRob2RGaWxlZ2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIElucHV0RmlsZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHB1YmxpYyBTdHJpbmcgZlJlc3VsdE5hbWU7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogdXNlZCBkaXJlY3RseSAKLSAgKi8KLSAgcHVibGljIElucHV0RmlsZUdlbmVyYXRvciAoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIGZSZXN1bHROYW1lID0gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogY2FsbGVkIGZyb20gc3ViY2xhc3NlcwotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgcmVzdWx0KQotICB7Ci0gICAgICBzdXBlcihidWZmZXIpOwotICAgICAgZlJlc3VsdE5hbWUgPSByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBjYWxsZWQgZnJvbSBzdWJjbGFzc2VzCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lcyhTdHJpbmcgcmVzdWx0cykKLSAgewotICAgIGZSZXN1bHROYW1lID0gcmVzdWx0czsKLSAgfQotCi0gIC8vdGFrZXMgaW4gYSBiZWFuIG5vZGUKLSAgIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgRWxlbWVudCBiZWFuRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPklucHV0czwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIMT5JbnB1dHM8L0gxPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIlN0cmluZyBtZXRob2QgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihcIm1ldGhvZFwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiaW50IG1ldGhvZElEID0gMDsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYgKG1ldGhvZCA9PSBudWxsKSBtZXRob2RJRCA9IC0xOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJib29sZWFuIHZhbGlkID0gdHJ1ZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYobWV0aG9kSUQgIT0gLTEpIG1ldGhvZElEID0gSW50ZWdlci5wYXJzZUludChtZXRob2QpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgic3dpdGNoIChtZXRob2RJRCl7ICIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIAkKLSAgICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICAgTWV0aG9kVmlzaXRvciBtZXRob2RWaXNpdG9yID0gbmV3IE1ldGhvZFZpc2l0b3IoKTsKLSAgICAgIElucHV0RmlsZUhlbHAxR2VuZXJhdG9yIGlucHV0RmlsZUhlbHAxR2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUhlbHAxR2VuZXJhdG9yKGZidWZmZXIsZlJlc3VsdE5hbWUpOyAKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LGlucHV0RmlsZUhlbHAxR2VuZXJhdG9yKTsKLSAgICAgIGZidWZmZXIgPSBpbnB1dEZpbGVIZWxwMUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgMTExMTExMTExMToiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgidmFsaWQgPSBmYWxzZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZPUk0gTUVUSE9EPVwiUE9TVFwiIEFDVElPTj1cIiIgKyBmUmVzdWx0TmFtZSArICJcIiBUQVJHRVQ9XCJyZXN1bHRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJISURERU5cIiBOQU1FPVwibWV0aG9kXCIgVkFMVUU9XCI8JT1tZXRob2QlPlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEFCTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFREIENPTFNQQU49XCIxXCIgQUxJR049XCJMRUZUXCI+VVJMU3RyaW5nOjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwidXJsMTExMTExMTExMVwiIFNJWkU9MjA+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9UQUJMRT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SU5QVVQgVFlQRT1cIlNVQk1JVFwiIFZBTFVFPVwiSW52b2tlXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiUkVTRVRcIiBWQUxVRT1cIkNsZWFyXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRk9STT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiYnJlYWs7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgMTExMTExMTExMjoiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgidmFsaWQgPSBmYWxzZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZPUk0gTUVUSE9EPVwiUE9TVFwiIEFDVElPTj1cIiIgKyBmUmVzdWx0TmFtZSArICJcIiBUQVJHRVQ9XCJyZXN1bHRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJISURERU5cIiBOQU1FPVwibWV0aG9kXCIgVkFMVUU9XCI8JT1tZXRob2QlPlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8QlI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiU1VCTUlUXCIgVkFMVUU9XCJJbnZva2VcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJSRVNFVFwiIFZBTFVFPVwiQ2xlYXJcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9GT1JNPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJicmVhazsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAKLSAgICAgIAotCi0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgICAgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYgKHZhbGlkKSB7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiU2VsZWN0IGEgbWV0aG9kIHRvIHRlc3QuIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9CT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hUTUw+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2MTA1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAxR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxfU1RBVEUgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSU5BTF9TVEFURSA9IDI7Ci0KLSAgcHVibGljIGludCBmc3RhdGU7Ci0gICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIGZzdGF0ZSA9IElOSVRJQUxfU1RBVEU7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIsU3RyaW5nIHJlc3VsdE5hbWUpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcixyZXN1bHROYW1lKTsKLSAgICAgIGZzdGF0ZSA9IElOSVRJQUxfU1RBVEU7Ci0gIH0KLSAgCi0gIC8qCi0gICogVGFrZXMgaW4gYW4gZWxlbWVudAotICAqIEBwYXJhbSBPYmplY3QgVGFrZXMgaW4gYW4gb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIGlmIChtZXRob2QuZ2V0TWV0aG9kT21taXNzaW9uKCkpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICAgUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IFBhcmFtZXRlclZpc2l0b3IoKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgIiArIG1ldGhvZC5nZXROdW1iZXJJRCgpKyAiOiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoInZhbGlkID0gZmFsc2U7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8Rk9STSBNRVRIT0Q9XCJQT1NUXCIgQUNUSU9OPVwiIiArIGZSZXN1bHROYW1lICsgIlwiIFRBUkdFVD1cInJlc3VsdFwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiSElEREVOXCIgTkFNRT1cIm1ldGhvZFwiIFZBTFVFPVwiPCU9bWV0aG9kJT5cIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgCi0gICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvciBpbnB1dEZpbGVIZWxwMkdlbmVyYXRvciA9IG5ldyBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgIHBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZEVsZW1lbnQsaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IpOwotICAgICBmYnVmZmVyID0gaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgIAotICAgICBmYnVmZmVyLmFwcGVuZCgiPEJSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiU1VCTUlUXCIgVkFMVUU9XCJJbnZva2VcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8SU5QVVQgVFlQRT1cIlJFU0VUXCIgVkFMVUU9XCJDbGVhclwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRk9STT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoImJyZWFrOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIAotCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgCi0gIH0gICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiN2U2NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5UeXBlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUhlbHAxR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgLyoKLSAgKiBUaGlzIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIHJlc3VsdCBnZW5lcmF0b3IgdG8gc2hvdyB0aGUgCi0gICogcmVzdWx0YW50IEJlYW4KLSAgKiBUaGUgbmFtZSBpcyB0aGUgbmFtZSB0aGUgcmVzdWx0YW50IGJlYW4gaXMgdXNpbmcgYXMgaXRzIGluc3RhbmNlIG5hbWUKLSAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmSW5zdGFuY2VOYW1lOwotICBwcml2YXRlIGJvb2xlYW4gZlJldHVyblBhcmFtPWZhbHNlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gICAgICBmSW5zdGFuY2VOYW1lPSIiOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIHBhcmFtZXRlcnMgdHlwZSBiZWFuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbmNlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZJbnN0YW5jZU5hbWUgPSBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLSAgKiBAcmV0dXJuIFN0cmluZyBuYW1lIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXJzIHR5cGUgYmVhbgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluc3RhbmNlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZkluc3RhbmNlTmFtZTsKLSAgfQotCi0KLSAgLyoKLSAgKiBUYWtlcyBpbiBhbiBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbiBieSB0aGlzIHZpc2l0b3IgYWN0aW9uCi0gICogQHBhcmFtIE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgIEVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGdldFZpc2l0b3IoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUQUJMRT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgIFR5cGVWaXNpdG9yIHR5cGVWaXNpdG9yID0gbmV3IFR5cGVWaXNpdG9yKCk7Ci0gICAgICBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlVHlwZUdlbmVyYXRvcihmYnVmZmVyLDApOwotICAgICAgaW5wdXRGaWxlVHlwZUdlbmVyYXRvci5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0SW5zdGFuY2VOYW1lKGZJbnN0YW5jZU5hbWUpOwotICAgICAgdHlwZVZpc2l0b3IucnVuKHBhcmFtZXRlckVsZW1lbnQsaW5wdXRGaWxlVHlwZUdlbmVyYXRvcik7Ci0gICAgICBmYnVmZmVyID0gaW5wdXRGaWxlVHlwZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvVEFCTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXR1cm5QYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gZlJldHVyblBhcmFtOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW0oYm9vbGVhbiByZXR1cm5QYXJhbSkKLSAgewotICAgIGZSZXR1cm5QYXJhbSA9IHJldHVyblBhcmFtOwotICB9IAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlVHlwZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOWJmNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuU2ltcGxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIElucHV0RmlsZVR5cGVHZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSW5wdXRGaWxlVHlwZUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUhlbHAyR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmUGFyZW50R2V0dGVyczsKLSAgcHJvdGVjdGVkIGludCBmTGV2ZWxzRGVlcDsKLSAgcHJvdGVjdGVkIGludCBmQ29sc3BhbjsKLSAgcHJvdGVjdGVkIGludCBmQ3VycmVudExldmVsOwotICBwcml2YXRlIGJvb2xlYW4gZklzU2ltcGxlOwotICBwcml2YXRlIGJvb2xlYW4gZlN0YXRlTGVzc0JlYW47Ci0gIHByaXZhdGUgVmVjdG9yIGZHZXR0ZXJzOwotICBwcml2YXRlIFZlY3RvciBmVHlwZXM7Ci0gIHByaXZhdGUgYm9vbGVhbiBmV3JpdGUgPSB0cnVlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlVHlwZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGN1cnJlbnRMZXZlbCkKLSAgewotICAgICBzdXBlcihidWZmZXIpOwotICAgICBmQ3VycmVudExldmVsID0gY3VycmVudExldmVsOwotICAgICBmTGV2ZWxzRGVlcCA9IC0xOwotICAgICBmUGFyZW50R2V0dGVycyA9ICIiOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBpbnQgY3VycmVudExldmVsLGludCBsZXZlbHNEZWVwKQotICB7Ci0gICAgIHN1cGVyKGJ1ZmZlcik7Ci0gICAgIGZDdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7Ci0gICAgIGZMZXZlbHNEZWVwID0gbGV2ZWxzRGVlcDsKLSAgICAgZlBhcmVudEdldHRlcnMgPSAiIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEdldHRlcnMoVmVjdG9yIGdldHRlcixWZWN0b3IgdHlwZSkKLSAgewotICAgICBpZihmR2V0dGVycyAhPSBudWxsKXsKLSAgICAgICBmR2V0dGVycy5jbGVhcigpOwotICAgICAgIGZUeXBlcy5jbGVhcigpOwotICAgICB9Ci0gICAgIGFkZFBhcmVudEdldHRlcihnZXR0ZXIsdHlwZSk7Ci0gIH0KLQotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaG9sZHMgc29tZSBzdGF0ZSBkYXRhIHRoYXQgaXMgaW1wb3J0YW50IGluIGdldHRpbmcgdGhlIAotICAqIFN0cmluZ3MgZm9yIGRpc3BsYXkgb2YgcmVzdWx0YW50IGJlYW5zCi0gICogQHBhcmFtIFN0cmluZyBnZXR0ZXIgdGhpcyBpcyB0aGUgZ2V0dGVyIG9mIGFuIGF0dHJpYnV0ZQotICAqIFRoZSBpZGVhIGlzIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoZSBzaW1wbGUgdHlwZQotICAqIHdlIGhhdmUgZ2V0QWRkcmVzcygpLmdldFN0cmVldCgpLi4uLgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJlbnRHZXR0ZXIoU3RyaW5nIGdldHRlciwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBpZihmR2V0dGVycyA9PSBudWxsKSBmR2V0dGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZihmVHlwZXMgPT0gbnVsbCkgZlR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIGZHZXR0ZXJzLmFkZEVsZW1lbnQoZ2V0dGVyKTsKLSAgICBmVHlwZXMuYWRkRWxlbWVudCh0eXBlKTsKLSAgfQotCi0gIC8qCi0gICogdGhpcyB3aWxsIGJlIHVzZWQgd2hlbiBwYXNzaW5nIGJldHdlZW4gdHdvIHZpc2l0b3JzCi0gICoKLSAgKi8KLSAgcHVibGljIHZvaWQgYWRkUGFyZW50R2V0dGVyKFZlY3RvciBnZXR0ZXJzLCBWZWN0b3IgdHlwZXMpCi0gIHsKLSAgICBpZihmR2V0dGVycyA9PSBudWxsKSBmR2V0dGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZihmVHlwZXMgPT0gbnVsbCkgZlR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIGludCBzaXplID0gZ2V0dGVycy5zaXplKCk7ICAgIAotICAgIGZvcihpbnQgaSA9IDA7IGk8c2l6ZTsgaSsrKXsKLSAgICAgIGZHZXR0ZXJzLmFkZEVsZW1lbnQoZ2V0dGVycy5nZXQoaSkpOwotICAgICAgZlR5cGVzLmFkZEVsZW1lbnQodHlwZXMuZ2V0KGkpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHJldHVyblBhcmVudEdldHRlcihpbnQgY291bnQpCi0gIHsKLSAgICBpZiAoZkdldHRlcnMgPT0gbnVsbCB8fCBjb3VudCA+IGZHZXR0ZXJzLnNpemUoKSkgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIChTdHJpbmcpZkdldHRlcnMuZ2V0KGNvdW50KTsgIAotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyByZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKGludCBjb3VudCkKLSAgewotICAgIGlmIChmVHlwZXMgPT0gbnVsbCB8fCBjb3VudCA+IGZUeXBlcy5zaXplKCkpIHJldHVybiBudWxsOwotICAgIHJldHVybiAoU3RyaW5nKWZUeXBlcy5nZXQoY291bnQpOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIHJldHVyblBhcmVudEdldHRlcigpCi0gIHsKLSAgICBpZiAoZkdldHRlcnMgPT0gbnVsbCApIHJldHVybiBuZXcgVmVjdG9yKCk7Ci0gICAgcmV0dXJuIGZHZXR0ZXJzOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIHJldHVyblBhcmVudEdldHRlclR5cGUoKQotICB7Ci0gICAgaWYgKGZUeXBlcyA9PSBudWxsICkgcmV0dXJuIG5ldyBWZWN0b3IoKTsKLSAgICByZXR1cm4gZlR5cGVzOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGdldHRlckNvdW50KCkKLSAgewotICAgIGlmKGZHZXR0ZXJzID09IG51bGwpIHJldHVybiAwOwotICAgIHJldHVybiBmR2V0dGVycy5zaXplKCk7IAotICB9Ci0KLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZSBzdGF0ZSBkYXRhIHRoYXQgaXMgaW1wb3J0YW50IGluIGdldHRpbmcgdGhlIAotICAqIFN0cmluZ3MgZm9yIGRpc3BsYXkgb2YgcmVzdWx0YW50IGJlYW5zCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHN0cmluZyBvZiBnZXR0ZXJzIHRvIHRoaXMgcG9pbnQKLSAgKiBUaGUgaWRlYSBpcyB0aGF0IGJ5IHRoZSB0aW1lIHdlIGdldCB0byB0aGUgc2ltcGxlIHR5cGUKLSAgKiB3ZSBoYXZlIGdldEFkZHJlc3MoKS5nZXRTdHJlZXQoKS4uLi4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRHZXR0ZXJzKCkKLSAgewotICAgIHJldHVybiBmUGFyZW50R2V0dGVyczsKLSAgfQotICAKLSAgLyoKLSAgKiBUYWtlcyBpbiBhbiBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbiBieSB0aGlzIHZpc2l0b3IgYWN0aW9uCi0gICogQHBhcmFtIE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgVHlwZUVsZW1lbnQgZWxlbWVudCA9IChUeXBlRWxlbWVudClvYmplY3Q7Ci0gICAgICAgICAgCi0gICAgIGlmIChCb29sZWFuLlRSVUUuZXF1YWxzKGVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFKSkpCi0JICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaW1wbGVFbGVtZW50KSBmSXNTaW1wbGUgPSB0cnVlOwotICAgICBlbHNlIGZJc1NpbXBsZSA9IGZhbHNlOwotCi0gICAgIC8vdGhpcyBjb3VsZCBiZSBhIHN0YXRlbGVzc2JlYW4gbmVlZCB0byBrbm93Ci0gICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmVhbkVsZW1lbnQgKXsKLSAgICAgICAgQmVhbkVsZW1lbnQgYmVhbiA9IChCZWFuRWxlbWVudCllbGVtZW50OwotICAgICAgICBpZiAoYmVhbi5pc1N0YXRlTGVzcygpKSBmU3RhdGVMZXNzQmVhbiA9IHRydWU7Ci0gICAgICAgIGlmIChiZWFuLmdldEF0dHJpYigpID09IEJlYW5FbGVtZW50LlJFQURPTkxZKSBmV3JpdGUgPSBmYWxzZTsKLSAgICAgfQotCi0KLQotICAgICAvL0NvbXBsZXggdHlwZSBzdXBwb3J0Ci0gICAgIC8vZmlyc3QgSSBuZWVkIHRvIGZpbmQgb3V0IGhvdyBtYW55IGxldmVscyBkZWVwCi0gICAgIGlmKGZMZXZlbHNEZWVwID09IC0xKXsKLSAgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbGR2YSA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbigpOwotICAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnJ1bihlbGVtZW50LGxkdmEpOwotICAgICAgICBmTGV2ZWxzRGVlcCA9IGxkdmEuZ2V0TGV2ZWxzRGVlcCgpOwotICAgICAgICAvL2NoZWNrIG91dCB0aGUgZmllbGRzIAotICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBsZHZhMiA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbigpOwotICAgICAgICBmaWVsZFZpc2l0b3IucnVuKGVsZW1lbnQsbGR2YTIpOwotCi0gICAgICAgIGlmKGZMZXZlbHNEZWVwIDwgbGR2YTIuZ2V0TGV2ZWxzRGVlcCgpKWZMZXZlbHNEZWVwID0gbGR2YTIuZ2V0TGV2ZWxzRGVlcCgpOyAKLSAgICAgICAgZkxldmVsc0RlZXArKzsKLSAgICAgfSAKLSAgICAgZkNvbHNwYW4gPSBmTGV2ZWxzRGVlcCAtIGZDdXJyZW50TGV2ZWw7Ci0KLSAgICAgLy9pZiB3ZSBoYXZlIGEgcmV0dXJuIHBhcmFtIHdpdGggbm8gZ2V0dGVyIG1ha2Ugc3VyZSB3ZSBhcmUgb24gdGhlIAotICAgICAvL2F0dHJpYnV0ZSBhbmQgbm90IHRoZSBwYXJhbWV0ZXIgdGhlbiByZXR1cm4KLSAgICAgaWYoZ2V0UmV0dXJuUGFyYW0oKSAmJiAgZWxlbWVudC5nZXRPd25pbmdFbGVtZW50KCkgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50VHlwZSAmJigoKEF0dHJpYnV0ZUVsZW1lbnRUeXBlKWVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpKS5nZXRHZXR0ZXJNZXRob2QoKSA9PSBudWxsKSApIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgIC8vQ29kZSBnZW4gZm9yIGFsbCBlbGVtZW50cwotICAgICBpZihmV3JpdGUpewotICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZkN1cnJlbnRMZXZlbDtpKyspewotICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQgV0lEVEg9XCI1JVwiPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIH0KLSAgICAgICBmYnVmZmVyLmFwcGVuZCgiPFREIENPTFNQQU49XCIiICsgZkNvbHNwYW4gKyAiXCIgQUxJR049XCJMRUZUXCI+IiArIGVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpLmdldE5hbWUoKSArICI6PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgCi0gICAgIH0KLSAgICAgaWYoZklzU2ltcGxlIHx8IFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGVsZW1lbnQuZ2V0TmFtZSgpKSAKLSAgICAgICAgICAgICAgICB8fCAoZ2V0UmV0dXJuUGFyYW0oKSAmJiBmU3RhdGVMZXNzQmVhbikgCi0gICAgICAgICAgICAgICAgfHwgKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZShlbGVtZW50LmdldFR5cGVOYW1lKCkpKSl7Ci0gICAgICAgIGlmKGdldEluc3RhbmNlTmFtZSgpLmVxdWFscygiIikpewotICAgICAgICAgICBpZihmV3JpdGUpewotICAgICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShlbGVtZW50LmdldE5hbWUoKSxlbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmlucHV0Rm9ybShlbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpKTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgIGlmKGdldFJldHVyblBhcmFtKCkgJiYgKFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoZWxlbWVudC5nZXRUeXBlTmFtZSgpKSB8fCBmU3RhdGVMZXNzQmVhbikpewotICAgICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShlbGVtZW50LmdldFR5cGVOYW1lKCksZWxlbWVudC5nZXRPd25pbmdFbGVtZW50KCkuZ2V0TVVJRCgpKTsgIAotICAgICAgICAgICAgIFN0cmluZyB1bmlxdWVOYW1lID0gInR5cGUiICsgZGF0YVR5cGUuZ2V0VW5pcXVlTmFtZSgpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArICBnZXRJbnN0YW5jZU5hbWUoKSArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIFN0cmluZyBhZnRlclN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOyAKLSAgICAgICAgICAgICBTdHJpbmcgdG1wU3RyaW5nID0gInRlYmVjZSI7Ci0gICAgICAgICAgICAgU3RyaW5nIHByZXZTdHJpbmcgPSBnZXRJbnN0YW5jZU5hbWUoKTsKLSAgICAgICAgICAgICBTdHJpbmcgbmV3VG1wU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBuZXdUbXBTdHJpbmcgPSB0bXBTdHJpbmcgKyBpOwotICAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQocmV0dXJuUGFyZW50R2V0dGVyVHlwZShpKSArICIgIiArIG5ld1RtcFN0cmluZyArICI9IiArIHByZXZTdHJpbmcgKyAiLiIgKyByZXR1cm5QYXJlbnRHZXR0ZXIoaSkgKyAiOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICAgIHByZXZTdHJpbmcgPSBuZXdUbXBTdHJpbmc7IAotICAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoImlmKCIgKyBuZXdUbXBTdHJpbmcgKyAiICE9IG51bGwpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICAgIGFmdGVyU3RyaW5nID0gbmV3VG1wU3RyaW5nOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChlbGVtZW50LmdldE5hbWUoKSArICIgIiArIHVuaXF1ZU5hbWUgKyAiID0gIiArIGFmdGVyU3RyaW5nICsgIi4iICsgKChBdHRyaWJ1dGVFbGVtZW50VHlwZSllbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKSkuZ2V0R2V0dGVyTWV0aG9kKCkrICI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAgICAgICAgICAgICAKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChkYXRhVHlwZS5UeXBlQ29udmVyc2lvbih1bmlxdWVOYW1lKSk7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSIpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgfQotCi0gICAgICAgICAgIGVsc2V7IAotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArICBnZXRJbnN0YW5jZU5hbWUoKSArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIFN0cmluZyBhZnRlclN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOwotICAgICAgICAgICAgIFN0cmluZyB0bXBTdHJpbmcgPSAidGViZWNlIjsKLSAgICAgICAgICAgICBTdHJpbmcgcHJldlN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOwotICAgICAgICAgICAgIFN0cmluZyBuZXdUbXBTdHJpbmcgPSAiIjsKLSAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGdldHRlckNvdW50KCk7aSsrKXsKLSAgICAgICAgICAgICAgIG5ld1RtcFN0cmluZyA9IHRtcFN0cmluZyArIGk7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKGkpICsgIiAiICsgbmV3VG1wU3RyaW5nICsgIj0iICsgcHJldlN0cmluZyArICIuIiArIHJldHVyblBhcmVudEdldHRlcihpKSArICI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgICAgcHJldlN0cmluZyA9IG5ld1RtcFN0cmluZzsgCi0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArIG5ld1RtcFN0cmluZyArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgICAgYWZ0ZXJTdHJpbmcgPSBuZXdUbXBTdHJpbmc7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCU9Iik7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoYWZ0ZXJTdHJpbmcgKyAiLiIgKyAoKEF0dHJpYnV0ZUVsZW1lbnRUeXBlKWVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpKS5nZXRHZXR0ZXJNZXRob2QoKSsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+Iik7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIik7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSIpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgCi0gICAgIH0KLSAgICAgICAgIAotICAgICAgLy9Ob3cgY2Fycnkgb24gZG93biB0aGUgcmVzdCBvZiB0aGUgYmVhbgotICAgICBlbHNlIHsKLSAgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRSZXNpZGVudFZlY3RvcjEocmV0dXJuUGFyZW50R2V0dGVyKCkpOwotICAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnNldFJlc2lkZW50VmVjdG9yMihyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKCkpOwotICAgICAgICBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcihmYnVmZmVyLChmQ3VycmVudExldmVsICsgMSksZkxldmVsc0RlZXApOwotICAgICAgICBpbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3Iuc2V0UmV0dXJuUGFyYW0oZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgIGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5zZXRJbnN0YW5jZU5hbWUoZkluc3RhbmNlTmFtZSk7Ci0gICAgICAgIGF0dHJpYnV0ZVZpc2l0b3IucnVuKGVsZW1lbnQsaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKTsKLSAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAKLSAgICAgICAgLy9ub3cgZG8gZmllbGRzIHZlcnkgc2ltaWxhcgotICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICBmaWVsZFZpc2l0b3Iuc2V0UmVzaWRlbnRWZWN0b3IxKHJldHVyblBhcmVudEdldHRlcigpKTsKLSAgICAgICAgZmllbGRWaXNpdG9yLnNldFJlc2lkZW50VmVjdG9yMihyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKCkpOwotICAgICAgICBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMiA9IG5ldyBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlciwoZkN1cnJlbnRMZXZlbCArIDEpLGZMZXZlbHNEZWVwKTsKLSAgICAgICAgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICAgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXRJbnN0YW5jZU5hbWUoZkluc3RhbmNlTmFtZSk7Ci0gICAgICAgIGZpZWxkVmlzaXRvci5ydW4oZWxlbWVudCxpbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyKTsKLSAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgCi0gICAgICAgIAotCi0gICAgIH0KLQotCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9MZXZlbHNEZWVwVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9MZXZlbHNEZWVwVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjJlMWE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5BdHRyaWJ1dGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uRmllbGRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbi4KLSogKi8KLXB1YmxpYyBjbGFzcyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcml2YXRlIGludCBmTGV2ZWxzRGVlcDsKLSAgcHJpdmF0ZSBpbnQgZkRlZXBlc3RMZXZlbDsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50Ci0gICogCi0gICovCi0gIHB1YmxpYyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiAoKQotICB7Ci0gICAgZkxldmVsc0RlZXAgPSAwOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQKLSAgKiAKLSAgKi8KLSAgcHVibGljIExldmVsc0RlZXBWaXNpdG9yQWN0aW9uIChpbnQgY3VycmVudCxib29sZWFuIGluY3JlbWVudCkKLSAgewotICAgIGZMZXZlbHNEZWVwID0gY3VycmVudDsKLSAgICBpZihpbmNyZW1lbnQpIGZMZXZlbHNEZWVwKys7Ci0gICAgZkRlZXBlc3RMZXZlbCA9IGZMZXZlbHNEZWVwOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmcgcmVzaWRlbnQpCi0gIHsKLSAgICAvL25vdGhpbmcgdG8gYmUgZG9uZSBidXQgbXVzdCBiZSBpbXBsZW1lbnRlZAotICB9Ci0KLQotCi0gIC8qKgotICAqIFRoZSB2aXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgVmlzaXRvckFjdGlvbgotICAqIEBwYXJhbSB2aXNpdG9yIHRoZSB2aXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgdmlzaXRvciBhY3Rpb24KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgfQotCi0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbGV2ZWwgb2YgbmVzdGluZyB3aXRoaW4gdGhpcyBiZWFuCi0gICogQHJldHVybiBpbnQgcmV0dXJucyB0aGUgaW50IG51bWJlciByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBuZXN0cyBvZiB0aGlzIGJlYW4KLSAgKi8KLSAgcHVibGljIGludCBnZXRMZXZlbHNEZWVwKCkKLSAgewotICAgICByZXR1cm4gZkRlZXBlc3RMZXZlbDsKLSAgfQotIAotCi0gIC8qKgotICAqIFRha2VzIGluIGFuIG9iamVjdCB0byBiZSBhY3RlZCB1cG9uIGJ5IHRoaXMgdmlzaXRvciBhY3Rpb24KLSAgKiBAcGFyYW0gT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbgotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBUeXBlRWxlbWVudCl7Ci0gICAgICAgICBUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBUeXBlVmlzaXRvcigpOwotICAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbHZkYSA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbihmTGV2ZWxzRGVlcCx0cnVlKTsKLSAgICAgICAgIHR5cGVWaXNpdG9yLnJ1bihlbGVtZW50LGx2ZGEpOwotCi0gICAgICAgICBpZiAobHZkYS5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYS5nZXRMZXZlbHNEZWVwKCk7IAotICAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmVhbkVsZW1lbnQgJiYgIShUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihlbGVtZW50LmdldE5hbWUoKSkpKXsKLSAgICAgICAgIEF0dHJpYnV0ZVZpc2l0b3IgYXR0cmlidXRlVmlzaXRvciA9IG5ldyBBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0gICAgICAgICBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBsdmRhID0gbmV3IExldmVsc0RlZXBWaXNpdG9yQWN0aW9uKGZMZXZlbHNEZWVwLGZhbHNlKTsKLSAgICAgICAgIGF0dHJpYnV0ZVZpc2l0b3IucnVuKGVsZW1lbnQsbHZkYSk7Ci0gICAgICAgICBpZiAobHZkYS5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYS5nZXRMZXZlbHNEZWVwKCk7IAotICAgCi0gICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbHZkYTIgPSBuZXcgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24oZkxldmVsc0RlZXAsZmFsc2UpOwotICAgICAgICAgZmllbGRWaXNpdG9yLnJ1bihlbGVtZW50LGx2ZGEyKTsKLSAgICAgICAgIGlmIChsdmRhMi5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYTIuZ2V0TGV2ZWxzRGVlcCgpOyAKLSAgIAotICAgICAgfQotICAgICAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgIAotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vTWV0aG9kRmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWM1MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgTWV0aG9kRmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RGaWxlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIFN0cmluZyBmSW5wdXROYW1lOwotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIE1ldGhvZEZpbGVHZW5lcmF0b3IgKFN0cmluZyBpbnB1dHMpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gIH0KLQotICAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIFN0cmluZ0J1ZmZlciBidWZmZXIgdG8gYXBwZW5kIGNvZGVnZW4gCi0gICovCi0gIHB1YmxpYyBNZXRob2RGaWxlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLFN0cmluZyBpbnB1dHMpCi0gIHsKLSAgICBzdXBlcihidWZmZXIpOwotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lcyhTdHJpbmcgaW5wdXRzKQotICB7Ci0gICAgZklucHV0TmFtZSA9IGlucHV0czsKLSAgfQotCi0gIC8vcHVibGljIHN0YXRpYyBTdHJpbmcgTE9DQVRPUiA9ICJMb2NhdG9yIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQkVBTiA9ICJQcm94eSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEdFVCA9ICJnZXQiOwotCi0gIAotICAvL3Rha2VzIGluIGEgYmVhbiBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgRWxlbWVudCBiZWFuRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+Iik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEhUTUw+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPEhFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPFRJVExFPk1ldGhvZHM8L1RJVExFPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8Qk9EWT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8SDE+TWV0aG9kczwvSDE+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPFVMPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIE1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBNZXRob2RWaXNpdG9yKCk7Ci0gICAgICBNZXRob2RGaWxlSGVscEdlbmVyYXRvciBtZXRob2RGaWxlSGVscEdlbmVyYXRvciA9IG5ldyBNZXRob2RGaWxlSGVscEdlbmVyYXRvcihmYnVmZmVyLGZJbnB1dE5hbWUpOyAKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LG1ldGhvZEZpbGVIZWxwR2VuZXJhdG9yKTsKLSAgICAgIGZidWZmZXIgPSBtZXRob2RGaWxlSGVscEdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1VMPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIjwvQk9EWT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8L0hUTUw+Iik7Ci0gICAgICAKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL01ldGhvZEZpbGVIZWxwR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL01ldGhvZEZpbGVIZWxwR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDBiNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlSGVscEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgTWV0aG9kRmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RGaWxlSGVscEdlbmVyYXRvciBleHRlbmRzIE1ldGhvZEZpbGVHZW5lcmF0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqCi0gICovCi0gIHB1YmxpYyBNZXRob2RGaWxlSGVscEdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcixTdHJpbmcgaW5wdXROYW1lKQotICB7Ci0gICAgICBzdXBlcihidWZmZXIsaW5wdXROYW1lKTsKLSAgfQotCi0KLSAgLy90YWtlcyBpbiBhIE1ldGhvZCBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgICBFbGVtZW50IG1ldGhvZEVsZW1lbnQgPSAoRWxlbWVudClvYmplY3Q7Ci0gICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgICBpZiAobWV0aG9kLmdldE1ldGhvZE9tbWlzc2lvbigpKSByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxMST48QSBIUkVGPVwiIiArIGZJbnB1dE5hbWUgKyAiP21ldGhvZD0iICsgbWV0aG9kLmdldE51bWJlcklEKCkpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIlwiIFRBUkdFVD1cImlucHV0c1wiPiAiICsgbWV0aG9kLmdldERpc3BsYXlOYW1lKCkpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvQT48L0xJPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTg2NmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlR5cGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkF0dHJpYnV0ZUVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciBleHRlbmRzIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHByaXZhdGUgVmVjdG9yIGZTZXR0ZXJWZWN0b3I7IAotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgKiBTZXR0ZXIgdmVjdG9yCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U2V0dGVyVmVjdG9yKCkKLSAgewotICAgICAgcmV0dXJuIGZTZXR0ZXJWZWN0b3I7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gUGFyYW1ldGVyIHBhcmFtZXRlciBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIAotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICBBdHRyaWJ1dGVFbGVtZW50VHlwZSBhdHRyaWJ1dGVFbGVtZW50VHlwZSA9IChBdHRyaWJ1dGVFbGVtZW50VHlwZSlvYmplY3Q7Ci0gICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnRUeXBlLmdldFNldHRlck1ldGhvZCgpID09IG51bGwpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICBCYXNpY0VsZW1lbnQgZWxlbWVudCA9IChCYXNpY0VsZW1lbnQpb2JqZWN0OwotICAgICBpZihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmlzU2ltcGxlKCkgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkpKXsgICAgICAKLSAgICAgICAgLy9zdGFydCB0aGUgY29kZWdlbgotICAgICAgICAvL2FzayB0aGUgZGF0YXR5cGUgZm9yIGl0cyByZXF1ZXN0IGxpbmUsIGl0IG1heSBuZWVkIG1hcmsgdXAgb3Igbm90LgotICAgICAgICAvL2llIEZvciB0aGUgc2ltcGxlIHR5cGVzIHdlIG5lZWQgdGhlIG1hcmsgdXAKLSAgICAgICAgLy9mb3IgdGhlIGRvbSBlbGVtZW50IHdlIGNhbnQgdXNlIGl0LgotICAgICAgICBEYXRhVHlwZSBkYXRhVHlwZSA9IFR5cGVGYWN0b3J5LmNyZWF0ZVR5cGUoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCksZWxlbWVudC5nZXRNVUlEKCkpOwotICAgICAgICBzZXRUeXBlT3duZXJJZChpZE5hbWUoZWxlbWVudC5nZXROYW1lKCkpKTsgCi0gICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldFJlcXVlc3RDb2RlKGVsZW1lbnQuZ2V0TVVJRCgpLGdldFR5cGVPd25lcklkKCkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgfQotICAgICAKLSAgICAgVHlwZVZpc2l0b3IgdHlwZVZpc2l0b3IgPSBuZXcgVHlwZVZpc2l0b3IoKTsKLSAgICAgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgIHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0VHlwZU93bmVySWQoZ2V0VHlwZU93bmVySWQoKSk7Ci0gICAgIAotICAgICB0eXBlVmlzaXRvci5ydW4oYXR0cmlidXRlRWxlbWVudFR5cGUscmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IpOwotICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgIFZlY3RvciBzZXR0ZXJJbnB1dHMgPSByZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5nZXRSZXNpZGVudFZlY3RvcigpOyAKLSAgICAgcHV0UmVzaWRlbnRWZWN0b3IoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0U2V0dGVyU2lnbmF0dXJlKChTdHJpbmcpc2V0dGVySW5wdXRzLmZpcnN0RWxlbWVudCgpKSk7Ci0gICAgIAotICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgIAotCi0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Mjc3MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTIzICAgMTQyMjk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBNZXRob2RGaWxlZ2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFJlc3VsdEZpbGVHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRSSVBMRV9UQUIgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5UQUI7IAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBRVUFEX1RBQiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgR2VuZXJhdG9yLkRPVUJMRV9UQUI7Ci0gIAotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVHZW5lcmF0b3IgKCkKLSAgewotICAgICAgc3VwZXIoKTsKLSAgfQotCi0gICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLQotICAvL3Rha2VzIGluIGEgYmVhbiBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgICBFbGVtZW50IGJlYW5FbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgQmVhbkVsZW1lbnQgYmVhbiA9IChCZWFuRWxlbWVudCliZWFuRWxlbWVudDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+IisgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUgcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhcIlVURi04XCIpOyAlPiIrIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPlJlc3VsdDwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIMT5SZXN1bHQ8L0gxPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8anNwOnVzZUJlYW4gaWQ9XCIiKyBnZXRTZXNzaW9uQmVhbklkKCkgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKGJlYW4uZ2V0TmFtZSgpICsgIlwiIC8+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgaWYgKHNldEVuZHBvaW50TWV0aG9kICE9IG51bGwgJiYgc2V0RW5kcG9pbnRNZXRob2QubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKCJpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoXCJlbmRwb2ludFwiKSAhPSBudWxsICYmIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiZW5kcG9pbnRcIikubGVuZ3RoKCkgPiAwKSIpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoZ2V0U2Vzc2lvbkJlYW5JZCgpKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIi4iKTsKLSAgICAgICAgaW50IGluZGV4ID0gc2V0RW5kcG9pbnRNZXRob2QuaW5kZXhPZignPycpOwotICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZC5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiKG5ldyAiKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZC5zdWJzdHJpbmcoaW5kZXgrMSwgc2V0RW5kcG9pbnRNZXRob2QubGVuZ3RoKCkpKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiZW5kcG9pbnRcIikpKTsiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZCk7Ci0gICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIihyZXF1ZXN0LmdldFBhcmFtZXRlcihcImVuZHBvaW50XCIpKTsiKTsKLSAgICAgICAgfQotICAgICAgICBmYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+Iik7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgfQotICAgICAgZmJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7IAotICAgICAgICAgICAgCi0gICAgICAvL2NhcnJ5IG9uIHdpdGggcmVndWxhciBnb3JwCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiU3RyaW5nIG1ldGhvZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwibWV0aG9kXCIpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpbnQgbWV0aG9kSUQgPSAwOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZElEID0gLTE7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoImlmKG1ldGhvZElEICE9IC0xKSBtZXRob2RJRCA9IEludGVnZXIucGFyc2VJbnQobWV0aG9kKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7IAotICAgICAgZmJ1ZmZlci5hcHBlbmQoImJvb2xlYW4gZ290TWV0aG9kID0gZmFsc2U7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoInRyeSB7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInN3aXRjaCAobWV0aG9kSUQpeyAiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgCi0gICAgICAvLyBnbyB0byB0aGUgbmV4dCBnZW5lcmF0b3IKLSAgICAgIE1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBNZXRob2RWaXNpdG9yKCk7Ci0gICAgICBSZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IgcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgICByZXN1bHRGaWxlSGVscDFHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICAgcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLnNldENsaWVudEZvbGRlclBhdGgoZ2V0Q2xpZW50Rm9sZGVyUGF0aCgpKTsKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LHJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvcik7Ci0gICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvci5nZXROdW1iZXJGYWN0b3J5KCkpOwotCi0gICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJleGNlcHRpb246IDwlPSBlICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInJldHVybjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpZighZ290TWV0aG9kKXsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgicmVzdWx0OiBOL0EiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0JPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSFRNTD4iKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCkKLSAgewotICAgIHRoaXMuc2V0RW5kcG9pbnRNZXRob2QgPSBzZXRFbmRwb2ludE1ldGhvZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNjc3ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgUmVzdWx0RmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IgZXh0ZW5kcyBSZXN1bHRGaWxlR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTF9TVEFURSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTkFMX1NUQVRFID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVRFTVAgPSAibXRlbXAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBCRUFOID0gIlByb3h5IjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgICBzdXBlcihidWZmZXIpOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gbWV0aG9kIG1ldGhvZCBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciAKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAKLQotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIGlmIChtZXRob2QuZ2V0TWV0aG9kT21taXNzaW9uKCkpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgIGZidWZmZXIuYXBwZW5kKCJjYXNlICIgKyBtZXRob2QuZ2V0TnVtYmVySUQoKSsgIjoiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIHZpc2l0SGVscGVyKG1ldGhvZCk7Ci0gICAgIAotICAgICBmYnVmZmVyLmFwcGVuZCgiYnJlYWs7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAKLSAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAgCi0gIC8qKgotICAqIEhlbHBzIG91dCB0aGUgdmlzaXRvcgotICAqIEBwYXJhbSBtZXRob2QgbWV0aG9kIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIAotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdEhlbHBlciAoRWxlbWVudCBtZXRob2RFbGVtZW50KQotICB7Ci0KLSAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiZ290TWV0aG9kID0gdHJ1ZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIAotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICBSZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IgcmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgIHJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgIFBhcmFtZXRlclZpc2l0b3IgcGFyYW1ldGVyVmlzaXRvciA9IG5ldyBQYXJhbWV0ZXJWaXNpdG9yKCk7Ci0gICAgIHBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZEVsZW1lbnQscmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yKTsKLSAgICAgZmJ1ZmZlciA9IHJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgLy8gd2UgbXVzdCBub3cgZ3JhYiB0aGUgc3RhdGUgZGF0YSBmcm9tIHRoZSByZXNpZGVudCB2ZWN0b3IKLSAgICAgc2V0UmVzaWRlbnRWZWN0b3IocmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yLmdldFJlc2lkZW50VmVjdG9yKCkpOwotCi0gICAgIAotICAgICAvL3RoZXJlIGlzIG5vIHJldHVybiB0eXBlIGlmIHZvaWQgb2NjdXJzICAgIAotICAgIAotICAgICAKLSAgICAgaWYgKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikpCi0gICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgZ2V0U2Vzc2lvbkJlYW5JZCgpICsgIi4iICttZXRob2QuZ2V0TmFtZSgpICsgIigiKTsKLQotICAgICBlbHNlewotICAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArIG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkgKyBHZW5lcmF0b3IuU1BBQ0UgKyBtZXRob2QuZ2V0TVVJRCgpICsgTVRFTVAgKyBHZW5lcmF0b3IuU1BBQ0UpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPSIgKyBHZW5lcmF0b3IuU1BBQ0UgKyBnZXRTZXNzaW9uQmVhbklkKCkgKyAiLiIgKyBtZXRob2QuZ2V0TmFtZSgpICsgIigiKTsKLSAgICAgfQotCi0gICAgIEVudW1lcmF0aW9uIGUgPSBmUmVzaWRlbnRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgIGZidWZmZXIuYXBwZW5kKChTdHJpbmcpZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICBpZiAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiwiKTsgICAgCi0gICAgIH0KLSAgICAgZmJ1ZmZlci5hcHBlbmQoIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICBpZiAoIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikgJiYgIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5pc1ByaW1pdGl2ZSgpKXsKLSAgICAgICAgLy9pbiBjYXNlIG91ciByZXN1bHQgaXMgbnVsbAotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArIG1ldGhvZC5nZXRNVUlEKCkgKyAibXRlbXAgPT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JT0iICsgbWV0aG9kLmdldE1VSUQoKSArICJtdGVtcCAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgifWVsc2V7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICB9Ci0gICAgIAotICAgICAvL25vdyBsZXRzIGRpc3BsYXkgdGhlIHJldHVybiBiZWFuCi0gICAgIC8vIGlmIGl0IGlzIHNpbXBsZSB3ZSBkb250IG5lZWQgdG8gdXNlIHRoZSBnZW5lcmF0b3IKLSAgICAgCi0gICAgIGlmICghbWV0aG9kLmdldFJldHVyblBhcmFtZXRlckVsZW1lbnQoKS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKS5lcXVhbHMoInZvaWQiKSl7Ci0gICAgICAgIGlmIChtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuaXNTaW1wbGUoKSAKLSAgICAgICAgICAgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4obWV0aG9kLmdldFJldHVyblBhcmFtZXRlckVsZW1lbnQoKS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSkKLSAgICAgICAgICAgfHwgVHlwZUZhY3RvcnkuaXNTdGF0ZUxlc3NCZWFuKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKQotICAgICAgICAgICB8fCBUeXBlRmFjdG9yeS5pc1JlY29nbml6ZWRSZXR1cm5UeXBlKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKSl7Ci0gICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuZ2V0VHlwZU5hbWUoKSxtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldE1VSUQoKSk7Ci0gICAgICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLlR5cGVDb252ZXJzaW9uKG1ldGhvZC5nZXRNVUlEKCkgKyBNVEVNUCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgICAgICAgIGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yLnNldEluc3RhbmNlTmFtZShtZXRob2QuZ2V0TVVJRCgpICsgTVRFTVApOwotICAgICAgICAgICBpbnB1dEZpbGVIZWxwMkdlbmVyYXRvci5zZXRSZXR1cm5QYXJhbSh0cnVlKTsKLSAgICAgICAgICAgUmV0dXJuUGFyYW1ldGVyVmlzaXRvciByZXR1cm5QYXJhbWV0ZXJWaXNpdG9yID0gbmV3IFJldHVyblBhcmFtZXRlclZpc2l0b3IoKTsKLSAgICAgICAgICAgcmV0dXJuUGFyYW1ldGVyVmlzaXRvci5ydW4obWV0aG9kLGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yKTsKLSAgICAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgICAgfQotICAgICB9Ci0KLSAgICBpZiAoIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikgICYmICFtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuaXNQcmltaXRpdmUoKSkgZmJ1ZmZlci5hcHBlbmQoIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgIAotICAgIAotICB9Ci0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyMjgwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuUGFyYW1ldGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBSZXN1bHRGaWxlSGVscDJnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHJpdmF0ZSBTdHJpbmcgZlR5cGVPd25lcklkOyAgCi0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gYnVmZmVyIFN0cmluZ0J1ZmZlciBvYmplY3QgdGhhdCB0aGlzIGNvZGUgZ2VuZXJhdG9yIHdyaXRlcyB0byAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgKiBWaXNpdCBNZXRob2QgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoaXMgVmlzaXRvcgotICAqIEBwYXJhbSBQYXJhbWV0ZXIgcGFyYW1ldGVyIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgCi0KLSAgICAgUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50ID0gKFBhcmFtZXRlckVsZW1lbnQpb2JqZWN0OwotICAgICBwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCk7IAotICAgICBpZihwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuaXNTaW1wbGUoKSB8fCBUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuZ2V0TmFtZSgpKSl7ICAgICAgCi0gICAgICAgIC8vc3RhcnQgdGhlIGNvZGVnZW4KLSAgICAgICAgIC8vYXNrIHRoZSBkYXRhdHlwZSBmb3IgaXRzIHJlcXVlc3QgbGluZSwgaXQgbWF5IG5lZWQgbWFyayB1cCBvciBub3QuCi0gICAgICAgIC8vaWUgRm9yIHRoZSBzaW1wbGUgdHlwZXMgd2UgbmVlZCB0aGUgbWFyayB1cAotICAgICAgICAvL2ZvciB0aGUgZG9tIGVsZW1lbnQgd2UgY2FudCB1c2UgaXQuCi0gICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuZ2V0TmFtZSgpLHBhcmFtZXRlckVsZW1lbnQuZ2V0TVVJRCgpKTsKLSAgICAgICAgc2V0VHlwZU93bmVySWQoaWROYW1lKHBhcmFtZXRlckVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldFJlcXVlc3RDb2RlKHBhcmFtZXRlckVsZW1lbnQuZ2V0TVVJRCgpLGdldFR5cGVPd25lcklkKCkpKTsKLSAgICAgfQotICAgICAgICAgCi0gICAgIC8vdmlzaXQgdGhlIHR5cGUgZ2VuZXJhdG9yCi0gICAgIFJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yIHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yKGZidWZmZXIpOyAKLSAgICAgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICByZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5zZXRUeXBlT3duZXJJZChnZXRUeXBlT3duZXJJZCgpKTsKLSAgICAgVHlwZVZpc2l0b3IgVHlwZVZpc2l0b3IgPSBuZXcgVHlwZVZpc2l0b3IoKTsKLSAgICAgVHlwZVZpc2l0b3IucnVuKHBhcmFtZXRlckVsZW1lbnQscmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IpOwotICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmdldFJlc2lkZW50VmVjdG9yKCkuZmlyc3RFbGVtZW50KCk7Ci0gICAgIHB1dFJlc2lkZW50VmVjdG9yKG5hbWUpOyAKLSAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVPd25lcklkKCkKLSAgewotICAgICBpZiAoZlR5cGVPd25lcklkID09IG51bGwpIGZUeXBlT3duZXJJZCA9ICIiOyAKLSAgICAgcmV0dXJuIGZUeXBlT3duZXJJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVPd25lcklkKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZlR5cGVPd25lcklkID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIAkKLSAgICBTdHJpbmcgdW5pcXVlTnVtID0gU3RyaW5nLnZhbHVlT2YoZ2V0VW5pcXVlTnVtYmVyKCkpOwotICAgIFN0cmluZyBuZXdOYW1lID0gbmFtZS5yZXBsYWNlKCcuJywnMScpICsgIl8iICt1bmlxdWVOdW0gKyAiaWQiOwotICAgIHJldHVybiBuZXdOYW1lOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjBkODk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTAgICAxODA5NTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNhbXBsZSBKU1AgZ2VuZXJhdG9yIGNob2tlcyBvbiBpbnRlcmZhY2VzIGFuZCBhYnN0cmFjdCBjbGFzc2VzCi0gKiAyMDA3MTExMCAgIDIwOTA4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFJlc3VsdEZpbGVIZWxwMmdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRGaWxlVHlwZUdlbmVyYXRvciBleHRlbmRzIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0KLSAgcHVibGljIFN0cmluZyBmVHlwZUlkTmFtZTsKLSAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIGJ1ZmZlciBTdHJpbmdCdWZmZXIgb2JqZWN0IHRoYXQgdGhpcyBjb2RlIGdlbmVyYXRvciB3cml0ZXMgdG8gCi0gICovCi0gIHB1YmxpYyBSZXN1bHRGaWxlVHlwZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgfQotICAKLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gUGFyYW1ldGVyIHBhcmFtZXRlciBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIAotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICBFbGVtZW50IHR5cGVFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICBUeXBlRWxlbWVudCB0eXBlID0gKFR5cGVFbGVtZW50KXR5cGVFbGVtZW50OyAgICAgIAotICAgICAvLyByaWdodCBub3cgd2Ugb25seSBoYXZlIHNpbXBsZSB0byB3b3JyeSBhYm91dAotICAgICBpZih0eXBlLmlzU2ltcGxlKCkgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4odHlwZS5nZXROYW1lKCkpKXsKLSAgICAgICAvLyBjcmVhdGUgdGhlIHR5cGUgdGhhdCByZXByZXNlbnRzIHRoZSBzaW1wbGUgdHlwZSBuYW1lCi0gICAgICAgRGF0YVR5cGUgZGF0YVR5cGUgPSBUeXBlRmFjdG9yeS5jcmVhdGVUeXBlKHR5cGUuZ2V0TmFtZSgpLHR5cGUuZ2V0T3duaW5nRWxlbWVudCgpLmdldE1VSUQoKSk7Ci0gIAotICAgICAgIFN0cmluZyBub2RlTmFtZSA9IGdldFR5cGVPd25lcklkKCkrICJUZW1wIjsKLSAgICAgICBpZighdHlwZS5pc1ByaW1pdGl2ZSgpKXsKLQkJICAKLQkJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBHZW5lcmF0b3IuVEFCICsgdHlwZS5nZXROYW1lKCkgKyAiICIgKyBub2RlTmFtZSArICIgPSBudWxsOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsJICAgCQkgICAKLQkJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiaWYoISIgKyBnZXRUeXBlT3duZXJJZCgpICsgIi5lcXVhbHMoXCJcIikpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQkJICAgZmJ1ZmZlci5hcHBlbmQoZGF0YVR5cGUuc3RyaW5nQ29udmVyc2lvbigiIixub2RlTmFtZSxnZXRUeXBlT3duZXJJZCgpKSk7Ci0JCSAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7CQkgICAJICAgICAgIAotCSAgIH0KLSAgICAgICBlbHNlCi0gICAgCSAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLnN0cmluZ0NvbnZlcnNpb24odHlwZS5nZXROYW1lKCksbm9kZU5hbWUsZ2V0VHlwZU93bmVySWQoKSkpOwotCi0gICAgICAgcHV0UmVzaWRlbnRWZWN0b3Iobm9kZU5hbWUpOwotICAgICB9Ci0KLSAgICAgZWxzZSB7Ci0gICAgICAgLy9tdXN0IGJlIGNvbXBsZXgKLSAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlRWxlbWVudC5nZXROYW1lKCk7IAotICAgICAgIGZUeXBlSWROYW1lID0gaWROYW1lKHR5cGVOYW1lKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgaWYgKCFCb29sZWFuLlRSVUUuZXF1YWxzKHR5cGVFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoVHlwZUVsZW1lbnQuTk9OX0lOU1RBTlRJQUJMRSkpKSB7Ci0gICAgICAgCi0JICAgICAgIEF0dHJpYnV0ZVZpc2l0b3IgYXR0cmlidXRlVmlzaXRvciA9IG5ldyBBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0JICAgICAgIFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciA9IG5ldyBSZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKGZidWZmZXIpOwotCSAgICAgICByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLQkgICAgICAgYXR0cmlidXRlVmlzaXRvci5ydW4odHlwZUVsZW1lbnQscmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcik7Ci0JICAgICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXROdW1iZXJGYWN0b3J5KCkpOwotCSAgICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQkKLQkgICAgICAgRmllbGRWaXNpdG9yIGZpZWxkVmlzaXRvciA9IG5ldyBGaWVsZFZpc2l0b3IoKTsKLQkgICAgICAgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMiA9IG5ldyBSZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKGZidWZmZXIpOwotCSAgICAgICByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0JICAgICAgIGZpZWxkVmlzaXRvci5ydW4odHlwZUVsZW1lbnQscmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIpOwotCSAgICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyLmdldE51bWJlckZhY3RvcnkoKSk7Ci0JICAgICAgIGZidWZmZXIgPSByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgCi0JICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCSAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8anNwOnVzZUJlYW4gaWQ9XCIiICsgZlR5cGVJZE5hbWUgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiICsgdHlwZU5hbWUgKyAiXCIgLz4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCSAgICAgICAKLQkgICAgICAgRW51bWVyYXRpb24gZSA9IHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOwotCSAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKXsKLQkgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBmVHlwZUlkTmFtZSArICIuIiArIGUubmV4dEVsZW1lbnQoKSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCSAgICAgICB9Ci0JCi0JICAgICAgIEVudW1lcmF0aW9uIGUyID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOwotCSAgICAgICB3aGlsZShlMi5oYXNNb3JlRWxlbWVudHMoKSl7Ci0JICAgICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgZlR5cGVJZE5hbWUgKyAiLiIgKyBlMi5uZXh0RWxlbWVudCgpICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIH0gCi0JICAgfQotICAgICAgIGVsc2UKLSAgICAJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyB0eXBlTmFtZSArICIgIiArIGZUeXBlSWROYW1lICsgIiA9IG51bGw7IisgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgICAKLSAgICAgICAKLSAgICAgICBwdXRSZXNpZGVudFZlY3RvcihmVHlwZUlkTmFtZSk7Ci0gICAgICAgLy9lbmQgb2YgY2hhbmdlcwotICAgICAKLSAgICB9Ci0gICAgIAotICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgIAotICAKLQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vVGVzdENsaWVudEZpbGVHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vVGVzdENsaWVudEZpbGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3MTRiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Rlc3RDbGllbnRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgVGVzdENsaWVudEZpbGVnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgVGVzdENsaWVudEZpbGVHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHB1YmxpYyBTdHJpbmcgZk1ldGhvZE5hbWU7Ci0gIHB1YmxpYyBTdHJpbmcgZklucHV0TmFtZTsKLSAgcHVibGljIFN0cmluZyBmUmVzdWx0TmFtZTsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqCi0gICovCi0gIHB1YmxpYyBUZXN0Q2xpZW50RmlsZUdlbmVyYXRvciAoU3RyaW5nIGlucHV0cywgU3RyaW5nIG1ldGhvZHMsIFN0cmluZyByZXN1bHRzKQotICB7Ci0gICAgIHN1cGVyKCk7Ci0gICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gICAgIGZNZXRob2ROYW1lID0gbWV0aG9kczsKLSAgICAgZlJlc3VsdE5hbWUgPSByZXN1bHRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RmlsZU5hbWVzKFN0cmluZyBpbnB1dHMsIFN0cmluZyBtZXRob2RzLCBTdHJpbmcgcmVzdWx0cykKLSAgewotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gICAgZk1ldGhvZE5hbWUgPSBtZXRob2RzOwotICAgIGZSZXN1bHROYW1lID0gcmVzdWx0czsKLSAgfQotCi0gIC8vdGFrZXMgaW4gYSBiZWFuIG5vZGUKLSAgIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlQHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOFwiJT4iKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SFRNTD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEhFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUSVRMRT5XZWIgU2VydmljZXMgVGVzdCBDbGllbnQ8L1RJVExFPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiIik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZSQU1FU0VUICBDT0xTPVwiMjIwLCpcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZSQU1FIFNSQz1cIiIrIGZNZXRob2ROYW1lICsgIlwiIE5BTUU9XCJtZXRob2RzXCIgTUFSR0lOV0lEVEg9XCIxXCIgTUFSR0lOSEVJR0hUPVwiMVwiIFNDUk9MTElORz1cInllc1wiIEZSQU1FQk9SREVSPVwiMVwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8RlJBTUVTRVQgIFJPV1M9XCI4MCUsMjAlXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxGUkFNRSBTUkM9XCIiKyBmSW5wdXROYW1lICArICJcIiBOQU1FPVwiaW5wdXRzXCIgIE1BUkdJTldJRFRIPVwiMVwiIE1BUkdJTkhFSUdIVD1cIjFcIiBTQ1JPTExJTkc9XCJ5ZXNcIiBGUkFNRUJPUkRFUj1cIjFcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiU3RyaW5nQnVmZmVyIHJlc3VsdEpTUCA9IG5ldyBTdHJpbmdCdWZmZXIoXCIiKS5hcHBlbmQoZlJlc3VsdE5hbWUpLmFwcGVuZCgiXCIpOyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJyZXN1bHRKU1AuYXBwZW5kKFwiP1wiKTsiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiamF2YS51dGlsLkVudW1lcmF0aW9uIHJlc3VsdEVudW0gPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Iik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgid2hpbGUgKHJlc3VsdEVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiT2JqZWN0IHJlc3VsdE9iaiA9IHJlc3VsdEVudW0ubmV4dEVsZW1lbnQoKTsiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgicmVzdWx0SlNQLmFwcGVuZChyZXN1bHRPYmoudG9TdHJpbmcoKSkuYXBwZW5kKFwiPVwiKS5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIocmVzdWx0T2JqLnRvU3RyaW5nKCkpKS5hcHBlbmQoXCImXCIpOyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJ9IikuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+IikuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxGUkFNRSBTUkM9XCI8JT1yZXN1bHRKU1AudG9TdHJpbmcoKSU+XCIgTkFNRT1cInJlc3VsdFwiICBNQVJHSU5XSURUSD1cIjFcIiBNQVJHSU5IRUlHSFQ9XCIxXCIgU0NST0xMSU5HPVwieWVzXCIgRlJBTUVCT1JERVI9XCIxXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRlJBTUVTRVQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCi0KLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8Tk9GUkFNRVM+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxCT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJUaGUgV2ViIFNlcnZpY2VzIFRlc3QgQ2xpZW50IHJlcXVpcmVzIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9CT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L05PRlJBTUVTPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0ZSQU1FU0VUPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hUTUw+Iik7Ci0KLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb21tYW5kL0dlbmVyYXRlUGFnZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvR2VuZXJhdGVQYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWQ3Zjg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvR2VuZXJhdGVQYWdlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotCi0vKioKLSAqIE1vZlRvQmVhbk1vZGVsQ29tbWFuZAotICogQ3JlYXRpb24gZGF0ZTogKDQvMTAvMjAwMSAxMjo0MTo0OCBQTSkKLSAqIEBhdXRob3I6IEdpbGJlcnQgQW5kcmV3cwotICovCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVQYWdlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCQkKLXByaXZhdGUgTW9kZWwgbW9kZWxfOwotcHJpdmF0ZSBHZW5lcmF0b3IgZkdlbmVyYXRvcjsKLXByaXZhdGUgSUZpbGUgZklGaWxlOwotcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLXByaXZhdGUgU3RyaW5nQnVmZmVyIGZTdHJpbmdCdWZmZXI7Ci0KLS8qKgotICogQnVpbGQgY29uc3RydWN0b3IgY29tbWVudC4KLSAqLwotcHVibGljIEdlbmVyYXRlUGFnZUNvbW1hbmQoKQotewotfQotCi0vKioKLSogQ29uc3RydWN0b3IKLSogVGhpcyBjb21tYW5kIHdpbGwgZ2VuZXJhdGUgY29kZSBmcm9tIGEgTW9kZWwKLSogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0byBiZSB0cmF2ZXJzZWQKLSogQHBhcmFtIGdlbmVyYXRvciBUaGUgY29kZSBnZW5lcmF0b3IgdG8gYmUgdXNlZAotKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHJlc291cmNlIHRvIHBsYWNlIHRoZSBmaW5pc2hlZCBwcm9kdWN0Ci0qLwotcHVibGljIEdlbmVyYXRlUGFnZUNvbW1hbmQoUmVzb3VyY2VDb250ZXh0IGNvbnRleHQsIE1vZGVsIG1vZGVsLCBHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJRmlsZSBmaWxlKQotewotICBtb2RlbF8gPSBtb2RlbDsKLSAgZkdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLSAgZklGaWxlID0gZmlsZTsKLSAgcmVzb3VyY2VDb250ZXh0XyA9IGNvbnRleHQ7Ci19Ci0KLXB1YmxpYyBNb2RlbCBnZXRKYXZhRGF0YU1vZGVsKCkKLXsKLSAgcmV0dXJuIG1vZGVsXzsKLX0KLQotLyoqCi0gKgotICovCi1wdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLXsKLSAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gIAotICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIHRyeSB7Ci0gICAgZkdlbmVyYXRvci52aXNpdChtb2RlbF8uZ2V0Um9vdEVsZW1lbnQoKSk7Ci0gICAgZlN0cmluZ0J1ZmZlciA9IGZHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nIHRlbXBTdHJpbmcgPSBmU3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgT3V0cHV0U3RyZWFtIGZpbGVSZXNvdXJjZSA9IEZpbGVSZXNvdXJjZVV0aWxzLm5ld0ZpbGVPdXRwdXRTdHJlYW0ocmVzb3VyY2VDb250ZXh0XywgZklGaWxlLmdldEZ1bGxQYXRoKCksIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotICAgIC8vUHJpbnRTdHJlYW0gcHMgPSBuZXcgUHJpbnRTdHJlYW0oZmlsZVJlc291cmNlKTsKLSAgICAvL3BzLnByaW50KHRlbXBTdHJpbmcpOwotICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKGZpbGVSZXNvdXJjZSwiVVRGLTgiKTsKLSAgICBvc3cud3JpdGUodGVtcFN0cmluZywwLGZTdHJpbmdCdWZmZXIubGVuZ3RoKCkpOyAgCi0gICAgb3N3LmNsb3NlKCk7Ci0gICAgZmlsZVJlc291cmNlLmNsb3NlKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9leGMpIHsKLSAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBpb2V4YyApOwotICAJcmV0dXJuIHN0YXR1czsKLSAgfQotfQotCi1wdWJsaWMgdm9pZCBzZXRSb290RWxlbWVudChFbGVtZW50IHJvb3RFbGVtZW50KQotewotfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvSmF2YVRvTW9kZWxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb21tYW5kL0phdmFUb01vZGVsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDA4MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvSmF2YVRvTW9kZWxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9ucy5KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZCZWFuVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY29tbWFuZHMgdGhhdCBuZWVkIHRvIHJlcG9ydCBwcm9ncmVzcwotKiBhbmQgc3RhdHVzIGR1cmluZyBhbmQgYWZ0ZXIgdGhlaXIgZXhlY3V0aW9uLiBUaGlzIGNsYXNzIGV4dGVuZHMKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5BYnN0cmFjdENvbW1hbmQgQWJzdHJhY3RDb21tYW5kfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0qIHdpdGggbWV0aG9kcyB0byB7QGxpbmsgI3NldFByb2dyZXNzTW9uaXRvciBzZXR9Ci0qIGFuZCB7QGxpbmsgI2dldFByb2dyZXNzTW9uaXRvciBnZXR9IGEgcHJvZ3Jlc3MgbW9uaXRvciwKLSogYW5kIHRvIGdldCBhIHN0YXR1cyBvYmplY3Qge0BsaW5rICNnZXRSZWFkeVN0YXR1cyBiZWZvcmV9Ci0qIG9yIHtAbGluayAjZ2V0UmVzdWx0U3RhdHVzIGFmdGVyfSBleGVjdXRpb24uCi0qIDxwPgotKiBOb3RlIHRoYXQgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHByb3ZpZGluZyBhbgotKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IgSVByb2dyZXNzTW9uaXRvcn0KLSogcmVzdHMgd2l0aCBmcmFtZXdvcmtzIHRoYXQgY29uc3RydWN0IG9yIHJ1biBQcm9ncmVzc0NvbW1hbmQgb2JqZWN0cywKLSogd2hlcmVhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgcHJvdmlkaW5nIGFuCi0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotKiBvYmplY3QgbGllcyB3aXRoIHRoZSBzdWJjbGFzc2VzIG9mIFByb2dyZXNzQ29tbWFuZC4KLSogU3ViY2xhc3NlcyBtdXN0IGZvbGxvdyB0aGUgcnVsZXMgZGVzY3JpYmVkIGZvcgotKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkFic3RyYWN0Q29tbWFuZCBBYnN0cmFjdENvbW1hbmR9LgotKi8KLXB1YmxpYyBjbGFzcyBKYXZhVG9Nb2RlbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAgcHJpdmF0ZSBKYXZhQ2xhc3MgamF2YUNsYXNzOwotICBwcml2YXRlIE1vZGVsIG1vZGVsOwotICBwcml2YXRlIEVsZW1lbnQgcGFyZW50RWxlbWVudDsKLSAgCi0gIHB1YmxpYyBKYXZhVG9Nb2RlbENvbW1hbmQgKCkKLSAgewotICB9Ci0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBjcmVhdGVKYXZhUmVmbGVjdGlvbihJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCA9IG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKTsKLSAgICBqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuc2V0Q2xpZW50UHJvamVjdChjbGllbnRQcm9qZWN0KTsKLSAgICBqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuc2V0UHJveHlCZWFuKHByb3h5QmVhbik7Ci0gICAgamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAvL2phdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgc3RhdHVzID0gamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwpOwotICAgIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmdldEphdmFDbGFzcygpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgTW9kZWwgdGhhdCB3YXMgY3JlYXRlZCBmcm9tIHRoaXMgamF2YW1vZgotICAqIEByZXR1cm4gTW9kZWwgVGhlIGRhdGEgbW9kZWwgdGhhdCB3YXMgY3JlYXRlZAotICAqKi8KLSAgcHVibGljIE1vZGVsIGdldEphdmFEYXRhTW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIG1vZGVsOwotICB9Ci0KLSAgLyoqCi0gICogQnVpbGQgdGhlIGRhdGFtb2RlbCBmcm9tIHRoZSBtb2YKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgYnVpbGRNb2RlbEZyb21Nb2YgKElFbnZpcm9ubWVudCBlbnYpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgCQotICAJQ2hvaWNlIE9LQ2hvaWNlID0gbmV3IENob2ljZSgnTycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfT0ssIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fT0spOwotICAJQ2hvaWNlIENhbmNlbENob2ljZSA9IG5ldyBDaG9pY2UoJ0MnLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX0NBTkNFTCwgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9DQU5DRUwpOwotICAJCi0gICAgLy8gd2UgY291bGQgaGF2ZSBvbmUgb2YgdGhyZWUgY2FzZXM6Ci0gICAgLy8xLiBUaGUgbW9kZWwgaXMgbnVsbCBtZWFuaW5nIHdlIHdhbnQgYW5kIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBudWxsLCBtZWFuaW5nIHdlIHdhbnQgdG8KLSAgICAvLyAgIGNyZWF0ZSBhIGJyYW5kIG5ldyBtb2RlbCBhbmQgbWFrZSB0aGlzIGJlYW4gaXRzIHJvb3QKLSAgICAvLzIuIFRoZSBtb2RlbCBpcyBudWxsIGJ1dCB0aGUgcGFyZW50RWxlbWVudCBpcyBub3QsIG1lYW5pbmcgd2Ugd2FudCB0byBhZGQgdGhlIEJlYW4gdG8gdGhlCi0gICAgLy8gICBnaXZlbiBwYXJlbnQgZWxlbWVudAotICAgIC8vMy4gVGhlIG1vZGVsIGlzIG5vdCBudWxsIGhvd2V2ZXIgdGhlIHBhcmVudEVsZW1lbnQgaXMsIG1lYW5pbmcgd2Ugd2FudCB0byBhZGQgdGhpcyBCZWFuIHRvCi0gICAgLy8gICBUaGlzIG1vZGVsIGJ1dCBkb250IGF0dGFjaCBpdCB0byBhbnl0aGluZwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgICBpZihtb2RlbCA9PSBudWxsICYmIHBhcmVudEVsZW1lbnQgPT0gbnVsbCl7Ci0gICAgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKGNsaWVudFByb2plY3QsbWV0aG9kcywgZW52KTsKLSAgICAgICAgIC8vYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotCSAgICAgSmF2YU1vZkJlYW5WaXNpdG9yIGJlYW5WaXNpdG9yID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvcigpOwotICAgICAgICAgc3RhdHVzID0gYmVhblZpc2l0b3IucnVuKGphdmFDbGFzcyxiZWFuVmlzaXRvckFjdGlvbik7Ci0gICAgICAgICAvLwotICAgICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgIAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICAgIHsKLSAgICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICAJCi0gICAgICAgICB9Ci0gICAgICAgICAvLwotICAgICAgICAgbW9kZWwgPSBiZWFuVmlzaXRvckFjdGlvbi5nZXRNb2RlbCgpOwotCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChtb2RlbCA9PSBudWxsICYmIHBhcmVudEVsZW1lbnQgIT0gbnVsbCl7Ci0gICAgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKHBhcmVudEVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52KTsKLSAgICAgICAgIC8vYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotCSAgICAgSmF2YU1vZkJlYW5WaXNpdG9yIGJlYW5WaXNpdG9yID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvcigpOwotICAgICAgICAgc3RhdHVzID0gYmVhblZpc2l0b3IucnVuKGphdmFDbGFzcyxiZWFuVmlzaXRvckFjdGlvbik7Ci0gICAgICAgICAvLwotICAgICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgIAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICAgIHsKLSAgICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICAJCi0gICAgICAgICB9Ci0gICAgICAgICAvLyAgICAgICAgIAotICAgICAgICAgbW9kZWwgPSBiZWFuVmlzaXRvckFjdGlvbi5nZXRNb2RlbCgpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKG1vZGVsLGNsaWVudFByb2plY3QsIGVudik7Ci0gICAgICAgICAvL2JlYW5WaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLQkgICAgIEphdmFNb2ZCZWFuVmlzaXRvciBiZWFuVmlzaXRvciA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3IoKTsKLSAgICAgICAgIHN0YXR1cyA9IGJlYW5WaXNpdG9yLnJ1bihqYXZhQ2xhc3MsYmVhblZpc2l0b3JBY3Rpb24pOwotICAgICAgICAgLy8KLSAgICAgICAgIGludCBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOyAKLSAgICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgICAKLSAgICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgICAgICB7Ci0gICAgICAgICAgIENob2ljZSByZXN1bHQgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICAgICB7Ci0gICAgICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICAgCQotICAgICAgICAgfQotICAgICAgICAgLy8gICAgICAgICAKLSAgICAgICAgIG1vZGVsID0gYmVhblZpc2l0b3JBY3Rpb24uZ2V0TW9kZWwoKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgamF2YSBtb2RlbCBmcm9tIHRoZSByZXNvdXJjZSB0aGVuCi0gICogYnVpbGQgdGhlIG1vZGVsIGZyb20gdGhlIG1vZgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZihjbGllbnRQcm9qZWN0ID09IG51bGwpIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gIAlzdGF0dXMgPSBjcmVhdGVKYXZhUmVmbGVjdGlvbihlbnYsIG1vbml0b3IpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotICAgIHRyeXsKLSAgICAgIHN0YXR1cyA9IGJ1aWxkTW9kZWxGcm9tTW9mKGVudik7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH1jYXRjaChDb3JlRXhjZXB0aW9uIGV4Yyl7Ci0gICAgICBJU3RhdHVzIGVtYmVkZGVkU3RhdHVzID0gZXhjLmdldFN0YXR1cygpOwotICAgICAgc3RhdHVzID0gZW1iZWRkZWRTdGF0dXM7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpCi0gIHsKLSAgCXRoaXMubWV0aG9kcyA9ICBtZXRob2RzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gIAl0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50KEVsZW1lbnQgcGFyZW50RWxlbWVudCkKLSAgewotICAJdGhpcy5wYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKLSAgfQotICAgICAKLSAgcHVibGljIHZvaWQgc2V0UHJveHlCZWFuKFN0cmluZyBwcm94eUJlYW4pCi0gIHsKLSAgCXRoaXMucHJveHlCZWFuID0gcHJveHlCZWFuOwotICB9Ci0KLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1vbi9TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1vbi9TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRmNGIwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb21tb24vU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgUHJvcGVydHlEZXNjcmlwdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHByaXZhdGUgTWV0aG9kIGZSZWFkTWV0aG9kOwotICBwcml2YXRlIE1ldGhvZCBmV3JpdGVNZXRob2Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZQcm9wZXJ0eU5hbWU7Ci0gIHByaXZhdGUgSmF2YUhlbHBlcnMgZlByb3BlcnR5VHlwZTsgCi0gIHByaXZhdGUgYm9vbGVhbiBmU3RhdGljOwotICAKLSAgLyoKLSAgKiBDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcgbmFtZSkKLSAgewotICAgIGZQcm9wZXJ0eU5hbWUgPSBuYW1lOyAKLSAgfQotCi0gIC8qCi0gICogc2V0IHRoZSBSZWFkTWV0aG9kCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFJlYWRNZXRob2QoTWV0aG9kIHJlYWRNZXRob2QpCi0gIHsKLSAgICBmUmVhZE1ldGhvZCA9IHJlYWRNZXRob2Q7Ci0gIH0KLQotICAgLyoKLSAgKiBnZXQgdGhlIFJlYWRNZXRob2QgCi0gICovCi0gIHB1YmxpYyBNZXRob2QgZ2V0UmVhZE1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZlJlYWRNZXRob2Q7Ci0gIH0KLQotICAvKgotICAqIHNldCB0aGUgd3JpdGVNZXRob2QKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3JpdGVNZXRob2QoTWV0aG9kIHdyaXRlTWV0aG9kKQotICB7Ci0gICAgZldyaXRlTWV0aG9kID0gd3JpdGVNZXRob2Q7Ci0gIH0KLQotICAgLyoKLSAgKiBnZXQgdGhlIHdyaXRlTWV0aG9kIAotICAqLwotICBwdWJsaWMgTWV0aG9kIGdldFdyaXRlTWV0aG9kKCkKLSAgewotICAgIHJldHVybiBmV3JpdGVNZXRob2Q7Ci0gIH0KLQotICAvKgotICAqIHNldCB0aGUgcHJvcGVydHlOYW1lCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmUHJvcGVydHlOYW1lPSBuYW1lOwotICB9Ci0KLSAgIC8qCi0gICogZ2V0IHRoZSBwcm9wZXJ0eU5hbWUKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHlOYW1lOwotICB9Ci0KLSAgLyoKLSAgKiBzZXQgdGhlIFByb3BlcnR5VHlwZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVR5cGUoSmF2YUhlbHBlcnMgcHJvcGVydHlUeXBlKQotICB7Ci0gICAgZlByb3BlcnR5VHlwZSA9IHByb3BlcnR5VHlwZTsKLSAgfQotCi0gICAvKgotICAqIGdldCB0aGUgUHJvcGVydHlUeXBlIAotICAqLwotICBwdWJsaWMgSmF2YUhlbHBlcnMgZ2V0UHJvcGVydHlUeXBlKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHlUeXBlOwotICB9Ci0gICAgICAKLSAgcHVibGljIGJvb2xlYW4gaXNmU3RhdGljKCkKLSAgewotICAJcmV0dXJuIGZTdGF0aWM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRmU3RhdGljKGJvb2xlYW4gZlN0YXRpYykKLSAgewotICAgIHRoaXMuZlN0YXRpYyA9IGZTdGF0aWM7CQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0lXU0ZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi93c2ZpbmRlci9JV1NGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhN2ZmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0lXU0ZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0ZpbmRlcgotewotICBwdWJsaWMgU3RyaW5nIGdldElEKCk7Ci0gIHB1YmxpYyB2b2lkIHNldElEKFN0cmluZyBpZCk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpOwotCi0gIHB1YmxpYyBMaXN0IGZpbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvTGl2ZVdTRExGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvTGl2ZVdTRExGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU2MTRiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0xpdmVXU0RMRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExpdmVXU0RMRmlsdGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotICBwcml2YXRlIGJvb2xlYW4gZmluaXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIGxpdmVfOwotCi0gIHB1YmxpYyBMaXZlV1NETEZpbHRlcihTdHJpbmcgd3NkbFVSTCkKLSAgewotICAgIHdzZGxVUkxfID0gd3NkbFVSTDsKLSAgICBmaW5pc2hfID0gZmFsc2U7Ci0gICAgbGl2ZV8gPSBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFVSTF87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaCgpCi0gIHsKLSAgICByZXR1cm4gZmluaXNoXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETExpdmUoKQotICB7Ci0gICAgcmV0dXJuIGxpdmVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGxpdmVfID0gdmFsaWRhdGVXU0RMKCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBsaXZlXyA9IGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgZmluaXNoXyA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlV1NETCgpIHRocm93cyBXU0RMRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gIAlXZWJTZXJ2aWNlc1BhcnNlckV4dCBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSTF8pOwotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICBJdGVyYXRvciBzZXJ2aWNlSXRlcmF0b3IgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChzZXJ2aWNlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBwb3J0SXRlcmF0b3IgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKHBvcnRJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXBvcnRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBpZiAoKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHx8IChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi93c2ZpbmRlci9XU0ZpbmRlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL1dTRmluZGVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJiZjI3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL1dTRmluZGVyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci0KLXB1YmxpYyBjbGFzcyBXU0ZpbmRlclJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgc3RhdGljIFdTRmluZGVyUmVnaXN0cnkgaW5zdGFuY2VfOwotICBwcml2YXRlIFZlY3RvciB3c2ZpbmRlcnNfOwotCi0gIHByaXZhdGUgV1NGaW5kZXJSZWdpc3RyeSgpCi0gIHsKLSAgICB3c2ZpbmRlcnNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICogQHJldHVybiBBIHNpbmdsZXRvbiBXU0ZpbmRlclJlZ2lzdHJ5IG9iamVjdC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0ZpbmRlclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgV1NGaW5kZXJSZWdpc3RyeSgpOwotICAgICAgaW5zdGFuY2VfLmluaXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGluaXQoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbWVudHMgPSBwbHVnaW5SZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKCJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iLCAid3NmaW5kZXIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gY29uZmlnRWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElXU0ZpbmRlcikKLSAgICAgICAgewotICAgICAgICAgIElXU0ZpbmRlciB3c2ZpbmRlciA9IChJV1NGaW5kZXIpb2JqZWN0OwotICAgICAgICAgIHdzZmluZGVyLnNldElEKGNvbmZpZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKSk7Ci0gICAgICAgICAgd3NmaW5kZXIuc2V0TmFtZShjb25maWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7Ci0gICAgICAgICAgd3NmaW5kZXIuc2V0RGVzY3JpcHRpb24oY29uZmlnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlKCJkZXNjcmlwdGlvbiIpKTsKLSAgICAgICAgICB3c2ZpbmRlcnNfLmFkZCh3c2ZpbmRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFdTRmluZGVycygpCi0gIHsKLSAgICByZXR1cm4gd3NmaW5kZXJzXzsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMoKQotICB7Ci0gICAgTGlzdCB3cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBMaXN0IHdzRmluZGVycyA9IGdldFdTRmluZGVycygpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c0ZpbmRlcnMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJV1NGaW5kZXIgd3NGaW5kZXIgPSAoSVdTRmluZGVyKWl0Lm5leHQoKTsKLSAgICAgIHdzLmFkZEFsbCh3c0ZpbmRlci5maW5kKCkpOwotICAgIH0KLSAgICByZXR1cm4gd3M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Eb21FbGVtZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvRG9tRWxlbWVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2VhMmJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Eb21FbGVtZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnV0aWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cmZ3Q7UHJlZmVyZW5jZXMmZ3Q7SmF2YSZndDtDb2RlIEdlbmVyYXRpb24mZ3Q7Q29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIERvbUVsZW1lbnRIZWxwZXIgewotCi0KLSAgcHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5FbGVtZW50IGNyZWF0ZURvbUVsZW1lbnRGcm9tWE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcgeG1sU3RyaW5nICkKLSAgewotICAgIGphdmEuaW8uU3RyaW5nUmVhZGVyIHN0cmluZ1JlYWRlciA9IG5ldyBqYXZhLmlvLlN0cmluZ1JlYWRlcih4bWxTdHJpbmcpOyAKLSAgICBvcmcueG1sLnNheC5JbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBvcmcueG1sLnNheC5JbnB1dFNvdXJjZShzdHJpbmdSZWFkZXIpOyAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY0J1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZG9jQnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZG9tV3JpdGVyKG9yZy53M2MuZG9tLk5vZGUgbm9kZSxqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgIGlmICggbm9kZSA9PSBudWxsICkgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLQlpbnQgdHlwZSA9IG5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQlzd2l0Y2ggKCB0eXBlICkgewotCSAgY2FzZSBvcmcudzNjLmRvbS5Ob2RlLkRPQ1VNRU5UX05PREU6IHsKLQkgIGJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iKSArICI8YnI+Iik7Ci0JICBkb21Xcml0ZXIoKChvcmcudzNjLmRvbS5Eb2N1bWVudClub2RlKS5nZXREb2N1bWVudEVsZW1lbnQoKSxidWZmZXIpOwotCSAgYnJlYWs7Ci0JfQotCSAgY2FzZSBvcmcudzNjLmRvbS5Ob2RlLkVMRU1FTlRfTk9ERTogewotCSAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIjwiICsgbm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0JICBvcmcudzNjLmRvbS5BdHRyIGF0dHJzW10gPSBzb3J0QXR0cmlidXRlcyhub2RlLmdldEF0dHJpYnV0ZXMoKSk7Ci0JICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKyApIHsKLQkgICAgb3JnLnczYy5kb20uQXR0ciBhdHRyID0gYXR0cnNbaV07Ci0JICAgIGJ1ZmZlci5hcHBlbmQoIiAiICsgYXR0ci5nZXROb2RlTmFtZSgpICsgIj1cIiIgKyBKc3BVdGlscy5tYXJrdXAoYXR0ci5nZXROb2RlVmFsdWUoKSkgKyAiXCIiKTsKLQkgIH0KLQkgICAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIj4iKSk7Ci0JICAgIG9yZy53M2MuZG9tLk5vZGVMaXN0IGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JICAgIGlmICggY2hpbGRyZW4gIT0gbnVsbCApIHsKLQkgICAgICBpbnQgbGVuID0gY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7Ci0JCSAgZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7Ci0JCSAgICBpZigoKG9yZy53M2MuZG9tLk5vZGUpY2hpbGRyZW4uaXRlbShpKSkuZ2V0Tm9kZVR5cGUoKSA9PSBvcmcudzNjLmRvbS5Ob2RlLkVMRU1FTlRfTk9ERSkKLQkJCSAgYnVmZmVyLmFwcGVuZCgiPGJyPiIpOwotCQkJZG9tV3JpdGVyKGNoaWxkcmVuLml0ZW0oaSksYnVmZmVyKTsKLQkJICB9Ci0JCX0KLQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIjwvIiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSArICI+IikpOwotCQlicmVhazsKLSAgICAgIH0KLQkgIGNhc2Ugb3JnLnczYy5kb20uTm9kZS5FTlRJVFlfUkVGRVJFTkNFX05PREU6IHsKLQkgICAgb3JnLnczYy5kb20uTm9kZUxpc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkgICAgaWYgKCBjaGlsZHJlbiAhPSBudWxsICkgewotCQkgIGludCBsZW4gPSBjaGlsZHJlbi5nZXRMZW5ndGgoKTsKLQkJICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApCi0JICAgICAgewotCQkgICAgYnVmZmVyLmFwcGVuZChjaGlsZHJlbi5pdGVtKGkpKTsKLQkJICB9Ci0JCX0KLQkJYnJlYWs7Ci0JICB9Ci0JICBjYXNlIG9yZy53M2MuZG9tLk5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFOiB7Ci0JICAgIGJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKTsKLQkgICAgYnJlYWs7Ci0gICAgICB9Ci0JICBjYXNlIG9yZy53M2MuZG9tLk5vZGUuVEVYVF9OT0RFOnsKLQkgICAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAobm9kZS5nZXROb2RlVmFsdWUoKSkpOwotCSAgICBicmVhazsKLQkgIH0KLQkgIGNhc2Ugb3JnLnczYy5kb20uTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6ewotCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPD8iKSk7Ci0JCWJ1ZmZlci5hcHBlbmQobm9kZS5nZXROb2RlTmFtZSgpKTsKLQkJU3RyaW5nIGRhdGEgPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotCQlpZiAoIGRhdGEgIT0gbnVsbCAmJiBkYXRhLmxlbmd0aCgpID4gMCApewotCSAgICAgIGJ1ZmZlci5hcHBlbmQoIiAiKTsKLQkJICBidWZmZXIuYXBwZW5kKGRhdGEpOwotCQl9Ci0JCWJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI/PiIpKTsKLQkJICBicmVhazsKLQkJfQotCSAgfQotCSAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotICAgIH0KLSAKLQlwdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLkF0dHJbXSBzb3J0QXR0cmlidXRlcyhvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXAgYXR0cnMpCi0JewotCSAgaW50IGxlbiA9IChhdHRycyAhPSBudWxsKSA/IGF0dHJzLmdldExlbmd0aCgpIDogMDsKLQkgIG9yZy53M2MuZG9tLkF0dHIgYXJyYXlbXSA9IG5ldyBvcmcudzNjLmRvbS5BdHRyW2xlbl07Ci0JICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApewotCSAgIGFycmF5W2ldID0gKG9yZy53M2MuZG9tLkF0dHIpYXR0cnMuaXRlbShpKTsKLQkgIH0KLQkgIGZvciAoIGludCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKyApIHsKLQkgICAgU3RyaW5nIG5hbWUgID0gYXJyYXlbaV0uZ2V0Tm9kZU5hbWUoKTsKLQkgICAgaW50IGluZGV4ID0gaTsKLQkgICAgZm9yICggaW50IGogPSBpICsgMTsgaiA8IGxlbjsgaisrICkgewotCSAgICAgIFN0cmluZyBjdXJOYW1lID0gYXJyYXlbal0uZ2V0Tm9kZU5hbWUoKTsKLQkJICBpZiAoIGN1ck5hbWUuY29tcGFyZVRvKG5hbWUpIDwgMCApIHsKLQkJICAgIG5hbWUgID0gY3VyTmFtZTsKLQkJCWluZGV4ID0gajsKLQkJICB9Ci0JCX0KLQkJaWYgKCBpbmRleCAhPSBpICkgewotCQkgIG9yZy53M2MuZG9tLkF0dHIgdGVtcCA9IGFycmF5W2ldOwotCQkgIGFycmF5W2ldID0gYXJyYXlbaW5kZXhdOwotCQkgIGFycmF5W2luZGV4XSA9IHRlbXA7Ci0JCX0KLQkgIH0KLQkgIHJldHVybiAoYXJyYXkpOwotICAgIH0KLSAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL0pzcFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvSnNwVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJiOTAxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvSnNwVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbDsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cmZ3Q7UHJlZmVyZW5jZXMmZ3Q7SmF2YSZndDtDb2RlIEdlbmVyYXRpb24mZ3Q7Q29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIEpzcFV0aWxzIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBtYXJrdXAoU3RyaW5nIHRleHQpIHsKLQkJCWlmICh0ZXh0ID09IG51bGwpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7Ci0JCQkJY2hhciBjID0gdGV4dC5jaGFyQXQoaSk7Ci0JCQkJc3dpdGNoIChjKSB7Ci0JCQkJCWNhc2UgJzwnOgotCQkJCQkJYnVmZmVyLmFwcGVuZCgiJmx0OyIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgJyYnOgotCQkJCQkJYnVmZmVyLmFwcGVuZCgiJmFtcDsiKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlICc+JzoKLQkJCQkJCWJ1ZmZlci5hcHBlbmQoIiZndDsiKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlICciJzoKLQkJCQkJCWJ1ZmZlci5hcHBlbmQoIiZxdW90OyIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlidWZmZXIuYXBwZW5kKGMpOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Tb2FwRWxlbWVudEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDMwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgICAxMjM5NjMgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICovCi1wdWJsaWMgY2xhc3MgU29hcEVsZW1lbnRIZWxwZXIKLXsKLQlwdWJsaWMgc3RhdGljIGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50IGNyZWF0ZVNPQVBFbGVtZW50RnJvbVhNTFN0cmluZyhTdHJpbmcgeG1sU3RyaW5nKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbgotCXsKLQkJamF2YS5pby5TdHJpbmdSZWFkZXIgc3RyaW5nUmVhZGVyID0gbmV3IGphdmEuaW8uU3RyaW5nUmVhZGVyKHhtbFN0cmluZyk7IAotCQlvcmcueG1sLnNheC5JbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBvcmcueG1sLnNheC5JbnB1dFNvdXJjZShzdHJpbmdSZWFkZXIpOyAKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJU29hcEVsZW1lbnRTYXhIYW5kbGVyIGhhbmRsZXIgPSBuZXcgU29hcEVsZW1lbnRTYXhIYW5kbGVyKCk7Ci0JCXBhcnNlci5wYXJzZShpbnB1dFNvdXJjZSxoYW5kbGVyKTsKLQkJcmV0dXJuIGhhbmRsZXIuZ2V0U09BUEVsZW1lbnQoKTsgICAgCi0JfQotCi0JcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHNvYXBFbGVtZW50V3JpdGVyKGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50IG5vZGUsamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpCi0JewotCQlpZiAobm9kZSA9PSBudWxsICkgewotCQkJcmV0dXJuICIiOwotCQl9Ci0JCQotCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPCIgKyBub2RlLmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpKTsKLQkJamF2YS51dGlsLkl0ZXJhdG9yIGF0dHJzID0gbm9kZS5nZXRBbGxBdHRyaWJ1dGVzKCk7Ci0JCXdoaWxlKGF0dHJzLmhhc05leHQoKSkgewotCQkJamF2YXgueG1sLnNvYXAuTmFtZSBhdHRyID0gKGphdmF4LnhtbC5zb2FwLk5hbWUpYXR0cnMubmV4dCgpOwotCQkJYnVmZmVyLmFwcGVuZCgiICIgKyBhdHRyLmdldFF1YWxpZmllZE5hbWUoKSArICI9XCIiICsgSnNwVXRpbHMubWFya3VwKG5vZGUuZ2V0QXR0cmlidXRlVmFsdWUoYXR0cikpICsgIlwiIik7Ci0JCX0KLQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIj4iKSk7Ci0JCWphdmEudXRpbC5JdGVyYXRvciBjaGlsZHJlbiA9IG5vZGUuZ2V0Q2hpbGRFbGVtZW50cygpOwotCQlpZiAoIGNoaWxkcmVuICE9IG51bGwgKSB7Ci0JCQl3aGlsZShjaGlsZHJlbi5oYXNOZXh0KCkpewotCQkJCWphdmF4LnhtbC5zb2FwLk5vZGUgY2hpbGROb2RlID0gKGphdmF4LnhtbC5zb2FwLk5vZGUpY2hpbGRyZW4ubmV4dCgpOwotCQkJCWlmKGNoaWxkTm9kZSBpbnN0YW5jZW9mIGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50KXsKLQkJCQkJYnVmZmVyLmFwcGVuZCgiPGJyPiIpOwotCQkJCQlzb2FwRWxlbWVudFdyaXRlcigoamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQpY2hpbGROb2RlLGJ1ZmZlcik7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoKChqYXZheC54bWwuc29hcC5UZXh0KWNoaWxkTm9kZSkuZ2V0VmFsdWUoKSkpOyAKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI8LyIgKyBub2RlLmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxOYW1lKCkgKyAiPiIpKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDY3MGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Tb2FwRWxlbWVudFJ1bnRpbWVFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsOwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyZndDtQcmVmZXJlbmNlcyZndDtKYXZhJmd0O0NvZGUgR2VuZXJhdGlvbiZndDtDb2RlIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgU29hcEVsZW1lbnRSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uICB7Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzNzYxNjkzMzcyNjc0NzQ4NDcxTDsKLQotcHVibGljIFNvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSl7Ci0gICAgc3VwZXIobWVzc2FnZSk7Ci0gIH0KLSAgCi0gIAotICAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRTYXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRTYXhIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNDNjZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50U2F4SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAgIDEyMzk2MyBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA5MDgwNiAgIDI4NTkzMyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBTT0FQRWxlbWVudFNheEhhbmRsZXIgdG8gY3JlYXRlIHRleHQgbm9kZXMgcmVzdWx0cyBpbiBudWxsIHJldHVybiBmb3IgY2hhciBzaXplIDEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5zb2FwLk5hbWU7Ci1pbXBvcnQgamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLnNvYXAuU09BUEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuc29hcC5TT0FQRmFjdG9yeTsKLQotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLS8qKgotICogQGF1dGhvciB4aW56aGFpCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2FwRWxlbWVudFNheEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotCS8vU3RvcmVzIGFsbCB2YWx1ZXMgb2YgcGFpcnMgb2YgcHJlZml4IGFuZCBVUkkgaW4gdGhlIGRvY3VtZW50Ci0JcHJpdmF0ZSBIYXNoTWFwIHByZWZpeFVSSU1hcHBpbmcgPSBuZXcgSGFzaE1hcCgpOwotCS8vU3RvcmVzIGEgbGlzdCBvZiBVUklzIGZvciBhIHBhcnRpY3VsYXIgU09BUCBlbGVtZW50Ci0JcHJpdmF0ZSBBcnJheUxpc3QgdXJpcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkvL1JlcHJlc2VudHMgdGhlIHdob2xlKHJvb3QpIFNPQVAgZG9jdW1lbnQKLQlwcml2YXRlIFNPQVBFbGVtZW50IHJvb3RFbGVtZW50ID0gbnVsbDsKLQkvL1JlcHJlc2VudHMgdGhlIGN1cnJlbnQgU09BUCBlbGVtZW50IHdoZXJlIFNBWCBwYXJzZXIgaXMgcmVhZGluZwotCXByaXZhdGUgU09BUEVsZW1lbnQgY3VycmVudEVsZW1lbnQgPSBudWxsOwotCXByaXZhdGUgU09BUEZhY3Rvcnkgc29hcEZhY3Rvcnk7Ci0JCi0JcHVibGljIFNPQVBFbGVtZW50IGdldFNPQVBFbGVtZW50KCkKLQl7Ci0JCXJldHVybiByb290RWxlbWVudDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc3RhcnREb2N1bWVudCgpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCXRyeSAKLQkJewotCQkJc29hcEZhY3RvcnkgPSBTT0FQRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQl9Ci0JCWNhdGNoIChTT0FQRXhjZXB0aW9uIGUpIAotCQl7Ci0JCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKCJDYW4ndCBjcmVhdGUgYSBTT0FQRmFjdG9yeSBpbnN0YW5jZSIsIGUpOwotCQl9CQotCX0KLQotCXB1YmxpYyB2b2lkIHN0YXJ0UHJlZml4TWFwcGluZyhTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpKQotCXsKLQkJcHJlZml4VVJJTWFwcGluZy5wdXQodXJpLHByZWZpeCk7Ci0JCXVyaXMuYWRkKHVyaSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBzdHIgPSBTdHJpbmcudmFsdWVPZihjaCk7Ci0JCS8vQWRkIG5vbi10cml2aWFsIHRleHQgYXMgYSB0ZXh0IG5vZGUKLQkJaWYgKGxlbmd0aCA+IDApCi0JCXsKLQkJCXRyeSAKLQkJCXsKLQkJCQljdXJyZW50RWxlbWVudC5hZGRUZXh0Tm9kZShzdHIuc3Vic3RyaW5nKHN0YXJ0LHN0YXJ0K2xlbmd0aCkpOwotCQkJfSAKLQkJCWNhdGNoIChTT0FQRXhjZXB0aW9uIGUpIAotCQkJewotCQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24oIkNhbid0IGFkZCBhIHRleHQgbm9kZSBpbnRvIFNPQVBFbGVtZW50IGZyb20gdGV4dCIsIGUpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGVuZEVsZW1lbnQgKFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkKLQl7Ci0JCWlmIChjdXJyZW50RWxlbWVudCAhPSByb290RWxlbWVudCApCi0JCXsKLQkJCWN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotCQl9Ci0JfQotCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpcHJlZml4VVJJTWFwcGluZy5nZXQobmFtZXNwYWNlVVJJKTsKLQkJdHJ5Ci0JCXsKLQkJCS8vIENyZWF0ZSBhbmQvb3IgYWRkIGNoaWxkIGVsZW1lbnQKLQkJCWlmIChyb290RWxlbWVudCA9PSBudWxsICYmIGN1cnJlbnRFbGVtZW50ID09IG51bGwpCi0JCQl7Ci0JCQkJcm9vdEVsZW1lbnQgPSBzb2FwRmFjdG9yeS5jcmVhdGVFbGVtZW50KGxvY2FsTmFtZSxwcmVmaXgsbmFtZXNwYWNlVVJJKTsKLQkJCQljdXJyZW50RWxlbWVudCA9IHJvb3RFbGVtZW50OwotCQkJfSAKLQkJCWVsc2UKLQkJCXsKLQkJCQljdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUscHJlZml4LG5hbWVzcGFjZVVSSSk7Ci0JCQl9Ci0JCQkKLQkJCS8vIEFkZCBuYW1lc3BhY2UgZGVjbGFyYXRpb24KLQkJCWlmICh1cmlzLnNpemUoKSA+IDApCi0JCQl7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB1cmlzLnNpemUoKTsgaSsrKQotCQkJCXsKLQkJCQkJU3RyaW5nIHVyaSA9IChTdHJpbmcpdXJpcy5nZXQoaSk7Ci0JCQkJCVN0cmluZyBwcmUgPSAoU3RyaW5nKXByZWZpeFVSSU1hcHBpbmcuZ2V0KHVyaSk7Ci0JCQkJCWN1cnJlbnRFbGVtZW50LmFkZE5hbWVzcGFjZURlY2xhcmF0aW9uKHByZSx1cmkpOwotCQkJCX0KLQkJCQkvLyBOZWVkIHRvIHJlc2V0IHVyaXMgYXMgd2Ugd2lsbCB1c2UgaXQgZm9yIG5leHQgZWxlbWVudC4KLQkJCQl1cmlzLmNsZWFyKCk7IAotCQkJfQotCQkJCi0JCQkvLyBBZGQgYXR0aWJ1dGVzCi0JCQlmb3IgKGludCBpID0wOyBpPGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJCXsKLQkJCQlOYW1lIGF0dHJpTmFtZTsKLQkJCQlpZiAoYXR0cy5nZXRVUkkoaSkgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCVN0cmluZyBhdHRyaVByZSA9IChTdHJpbmcpcHJlZml4VVJJTWFwcGluZy5nZXQoYXR0cy5nZXRVUkkoaSkpOwotCQkJCQlhdHRyaU5hbWUgPSBzb2FwRmFjdG9yeS5jcmVhdGVOYW1lKGF0dHMuZ2V0TG9jYWxOYW1lKGkpLGF0dHJpUHJlLGF0dHMuZ2V0VVJJKGkpKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJYXR0cmlOYW1lID0gc29hcEZhY3RvcnkuY3JlYXRlTmFtZShhdHRzLmdldExvY2FsTmFtZShpKSk7Ci0JCQkJfQotCQkJCWN1cnJlbnRFbGVtZW50LmFkZEF0dHJpYnV0ZShhdHRyaU5hbWUsIGF0dHMuZ2V0VmFsdWUoaSkpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChTT0FQRXhjZXB0aW9uIGUpIAotCQl7Ci0JCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKGUpOwotCQl9Ci0JfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMjM0NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MjgxYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEp1biAwMyAwMTo1NzowMCBFRFQgMjAwNwotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0xCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MgotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkY2NlYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjMwNCwxLjEuMCkiCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTI5NDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZmU2NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIENyZWF0aW9uIEVKQiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi0jCi0jIFdlYiBzZXJ2aWNlIHR5cGVzCi0jCi1XRUJTRVJWSUNFVFlQRV9OQU1FX0VKQl9UUD1FSkIgV2ViIFNlcnZpY2UKLVdFQlNFUlZJQ0VUWVBFX05BTUVfV1NETF9FSkJfVFA9U2tlbGV0b24gRUpCIFdlYiBTZXJ2aWNlCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRT1DcmVhdGUgV2ViIHNlcnZpY2UKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU0YmRhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgICA8IS0tIEVKQiBXZWIgU2VydmljZSBUeXBlcyAtLT4KLTwhLS0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlIj4KLQotICAgICAgPHdlYlNlcnZpY2VUeXBlCi0gICAgICAgICAgICBsYWJlbD0iJVdFQlNFUlZJQ0VUWVBFX05BTUVfV1NETF9FSkJfVFAiCi0gICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhZGF0YT0iRmlsZSBJUmVzb3VyY2UiCi0gICAgICAgICAgICBleHRlbnNpb25NZXRhZGF0YT0iLndzZGwiCi0gICAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0IgotICAgICAgICAgICAgaW5jbHVkZU5hdHVyZXM9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJOYXR1cmUiCi0gICAgICAgICAgICBleGNsdWRlTmF0dXJlcz0iIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy50eXBlLndzZGwuZWpiIj4KLSAgICAgIDwvd2ViU2VydmljZVR5cGU+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlVHlwZQotCQkgICAgbGFiZWw9IiVXRUJTRVJWSUNFVFlQRV9OQU1FX0VKQl9UUCIKLQkJICAgIHJlc291cmNlVHlwZU1ldGFkYXRhPSJFSkJPYmplY3Qgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuIFNlc3Npb25JbXBsIgotCQkgICAgZXh0ZW5zaW9uTWV0YWRhdGE9Ii5qYXZhIC5jbGFzcyAuU2Vzc2lvbkltcGwiCi0JCSAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5FSkJTZWxlY3Rpb25XaWRnZXQiCi0JCSAgICBpbmNsdWRlTmF0dXJlcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQk5hdHVyZSIKLQkJICAgIGV4Y2x1ZGVOYXR1cmVzPSIiCi0JCSAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnR5cGUuZWpiIj4KLSAgCSA8L3dlYlNlcnZpY2VUeXBlPgotCTwvZXh0ZW5zaW9uPgotLS0+Ci0KLSAgIDwhLS0gUG9wdXBzIC0tPgotICAgICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmVqYiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYi5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLlNlc3Npb25CZWFuIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmVqYjMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5lamIzLnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotCi0KLTwhLS0gRUpCIHN0dWZmIC0tPgotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NJbXBsIj4KLSAgICAgPHdlYlNlcnZpY2VJbXBsCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5lamIiCi0gICAgICAgICAgICBsYWJlbD0iJVdFQlNFUlZJQ0VUWVBFX05BTUVfRUpCX1RQIgotICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGE9IkVKQk9iamVjdCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW4gb3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuRW50ZXJwcmlzZUJlYW5zIFNlc3Npb25JbXBsIFNlc3Npb25CZWFuSW1wbCIKLSAgICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIuamF2YSAuY2xhc3MgLlNlc3Npb25JbXBsIC5TZXNzaW9uQmVhbkltcGwiCi0gICAgICAgICAgICBtZXJnZXJDbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5KYXZhTWVyZ2VyIiAKLSAgICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkVKQlNlbGVjdGlvbldpZGdldCI+Ci0gICAgIDwvd2ViU2VydmljZUltcGw+Ci0gICAgPC9leHRlbnNpb24+ICAgIAotICAgIAotCi0gICAgICAgICAgICAKLSAgIAotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NmQ0OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNmVkZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c3MtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWM4YmZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhYjE4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jU2F0IEp1biAwMiAxNzowNzowNiBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3MWFjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDE6MDQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTFhMjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC41MDgucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuYW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuc2VydmVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5iaW5kaW5nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3Q7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVtZndvcmtiZW5jaC5pbnRlZ3JhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNS4wLDEuNi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGVjMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9leHBvcnRfd3MuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZXhwb3J0X3dzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E0NGVmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9leHBvcnRfd3MuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld193ZWJzZXJ2X3dpei5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3X3dlYnNlcnZfd2l6LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ3MzdmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3X3dlYnNlcnZfd2l6LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2V4cG9ydF93c193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNmJjYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmODc2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9hc3NlbWJsZS5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGVwbG95LmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGVwbG95LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ1OGJjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RlcGxveS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RldmVsb3AuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXZlbG9wLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmZjZhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RldmVsb3AuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfaW5zdGFsbC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZmNkYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfcnVuLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfcnVuLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM5MTJmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3J1bi5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3Rlc3QuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV90ZXN0LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1Njk1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3Rlc3QuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJhYWZkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIENyZWF0aW9uIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfU0VSVklDRT1XZWIgU2VydmljZQotUExVR0lOX0VYUE9SVF9XSVpBUkRfTkFNRV9XUz1XZWIgU2VydmljZQotUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19TRVJWSUNFPUNyZWF0ZSBhIG5ldyBYTUwgd2ViIHNlcnZpY2UuCi1QTFVHSU5fRVhQT1JUX1dJWkFSRF9ERVNDX1dTPUEgd2l6YXJkIGZvciBleHBvcnRpbmcgYSB3ZWIgc2VydmljZS4KLQotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBEaWFsb2dzCi1DSEVDS0JPWF9TSE9XX0RFUExPWV9XRUJfU0VSVklDRV9ESUFMT0c9SGlkZSAmQ3JlYXRlIFdlYiBzZXJ2aWNlIERpYWxvZwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9TS0VMRVRPTl9ESUFMT0c9SGlkZSBHZW5lcmF0ZSBKYXZhIEJlYW4gUyZrZWxldG9uIERpYWxvZwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9XU0RMX0ZJTEVTX0RJQUxPRz1IaWRlIEdlbmVyYXRlIFdTREwgRmlsZXMgRGlhbG9nCi1DSEVDS0JPWF9TSE9XX1BVQkxJU0hfV1NETF9ESUFMT0c9SGlkZSBQdWJsaXNoICZXU0RMIERpYWxvZwotCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTPVNjZW5hcmlvIERlZmF1bHRzCi0KLQotIwotIyBQcmVmZXJlbmNlcyBUb29sdGlwcwotIwotI0FjdGlvbiBEaWFsb2dzCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfREVQTE9ZPUhpZGVzIHRoZSBkaWFsb2cgZm9yIGRlcGxveWluZyBhIFdlYiBzZXJ2aWNlIGFjdGlvbgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1NLRUxFVE9OPUhpZGVzIHRoZSBkaWFsb2cgZm9yIGdlbmVyYXRpbmcgSmF2YSBiZWFuIFNrZWxldG9uIGFjdGlvbgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1dTREw9SGlkZXMgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyBXU0RMIGZpbGVzIGFjdGlvbgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BVQkxJU0g9SGlkZXMgdGhlIGRpYWxvZyBmb3IgcHVibGlzaGluZyB0aGUgV1NETCBhY3Rpb24KLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFPUNyZWF0ZSBXZWIgc2VydmljZQotQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT049R2VuZXJhdGUgSmF2YSBiZWFuIHNrZWxldG9uCi1BQ1RJT05fUFVCTElTSF9XU0RMPVB1Ymxpc2ggV1NETCBmaWxlCi0KLSMKLSMgV2l6YXJkcy4KLSMKLVdJWkFSRF9USVRMRV9XU1M9V2ViIFNlcnZpY2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWMxYjc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgICA8IS0tIFdpemFyZHMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLSAgICAgIDxjYXRlZ29yeQotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3Ij4KLSAgICAgIDwvY2F0ZWdvcnk+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19TRVJWSUNFIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdG9vbDE2L25ld193ZWJzZXJ2X3dpei5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX1NFUlZJQ0UKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmciCi0gICAgICAgICAgICB0aXRsZT0iJVdJWkFSRF9USVRMRV9XU1MiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZy5TZXJ2ZXJXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZXhwb3J0V2l6YXJkcyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndzZXhwb3J0LmNhdGVnb3J5IgotICAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1MiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZXhwb3J0V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0VYUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGljb249Imljb25zL2V4cG9ydF93cy5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndzZXhwb3J0LmNhdGVnb3J5IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzZXhwb3J0Ij4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fRVhQT1JUX1dJWkFSRF9ERVNDX1dTCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fRVhQT1JUX1dJWkFSRF9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuRXhwb3J0V1NXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2V4cG9ydCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fRVhQT1JUX1dJWkFSRF9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuRXhwb3J0V1NXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSAiRG9uJ3QgU2hvdyBNZSIgUHJlZmVyZW5jZXMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUiPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX0RFUExPWV9XRUJfU0VSVklDRV9ESUFMT0ciCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX0RFUExPWSIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS5QUEFEMDAwNiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5lamIgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuZWpiMyBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLmZpbGUgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5jb21wdW5pdCBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLnNlcnZpY2UuYmVhbiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLmJlYW4ubGluayIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgbmFtZT0iJUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfU0tFTEVUT05fRElBTE9HIgotICAgICAgICAgICAgdG9vbHRpcD0iJVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9TS0VMRVRPTiIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS5QUEFEMDAwOCIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5maWxlLndzZGwgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uc2VydmljZSBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi53c2RscmVzIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2VyZWYgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uZmlsZS53c2lsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgbmFtZT0iJUNIRUNLQk9YX1NIT1dfUFVCTElTSF9XU0RMX0RJQUxPRyIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfUFVCTElTSCIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS5QUEFEMDAwOSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2guZmlsZSBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2guc2VydmljZSBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2gud3NkbHJlcyBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2guc2VydmljZXJlZiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gUG9wdXBzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IiouamF2YSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkNvbXBpbGF0aW9uVW5pdCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IiouamF2YSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLmNvbXB1bml0Ij4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5maWxlLndzZGwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uc2VydmljZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24ud3NkbHJlcyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uc2VydmljZXJlZiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW4iCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuc2VydmljZS5iZWFuIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIAotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5iZWFuLmxpbmsiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgICAgICAKLSAgICAgIAotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2lsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLmZpbGUud3NpbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2guZmlsZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9QVUJMSVNIX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fUFVCTElTSF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLSAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2gud3NkbHJlcyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9QVUJMSVNIX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIAotICAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5zZXJ2aWNlcmVmIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX1BVQkxJU0hfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSBQcmVmZXJlbmNlIFBhZ2VzIC0tPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wcmVmZXJlbmNlcy5TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnByZWZlcmVuY2VzLlNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRSZWdpc3RyeSI+Ci0gICAgICAgPHdpZGdldEZhY3RvcnkgICAKLSAgICAgICAgICAgICBpZD0iU3RhcnRTZXJ2aWNlU2VydmVyIgotICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbi5QcmVTZXJ2aWNlUnVuQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnNlcnZlci5TdGFydFNlcnZlcldpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgCi0gICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnRTY2VuYXJpbyI+Ci0gICAgICAgIDxhbnRTY2VuYXJpbwotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5hbnQuQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQiCi0gICAgICAgICAgICBzY2VuYXJpb1R5cGU9InNlcnZpY2UiLz4KLSAgICAgPC9leHRlbnNpb24+ICAgIAotICAgIAotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYW50RGF0YU1hcHBpbmciPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJJbml0aWFsU2VsZWN0aW9uIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iT2JqZWN0U2VsZWN0aW9uIgotICAgICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lciIvPiAgICAgICAgICAgICAgCi0JCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJQcm9qZWN0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iUHJvamVjdCIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ29tcG9uZW50TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNvbXBvbmVudE5hbWUiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuUnVudGltZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgICAgICAKLSAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuUnVudGltZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZVByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VDb21wb25lbnROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlQ29tcG9uZW50TmFtZSIvPgotCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZUVhclByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlRWFyUHJvamVjdE5hbWUiLz4KLSAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZUVhckNvbXBvbmVudE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VFYXJDb21wb25lbnROYW1lIi8+ICAgICAgICAgICAgICAKLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlNlcnZlcklkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3ZDk4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBXaXphcmQgcGFnZXMKLSMKLVBBR0VfVElUTEVfT0JKRUNUX1NFTEVDVElPTj1PYmplY3QgU2VsZWN0aW9uIFBhZ2UKLVBBR0VfREVTQ19PQkpFQ1RfU0VMRUNUSU9OPU9iamVjdCBTZWxlY3Rpb24gUGFnZQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTllOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQ3JlYXRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuQ3JlYXRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBDcmVhdGlvblVJTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfT0JKRUNUX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfT0JKRUNUX1NFTEVDVElPTjsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIENyZWF0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2FudC9BbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGFhMTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MzAgICAxNDQzNTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzUwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyMyAgIDE1NDkzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDUwMSAgIDE3ODEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHJlcG9ydHMgImNyYXNoIGRldGVjdGVkIiBhZnRlciBydW5uaW5nIFdTIGFudCB0YXNrIChjbWRsaW5lKQotICogMjAwODA3MjkgICAyNDEyNzUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgTm8gVmFsaWRhdGlvbiBlcnJvciBnZW5lcmF0aW5nIFdlYiBTZXJ2aWNlIGNsaWVudCBpZiBkaWFsb2cgaGlkZGVuCi0gKiAyMDA4MDkyNSAgIDI0MjMxMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBDYW5ub3QgY3JlYXRlIEJVSkIgV1MgZnJvbSBCZWFuIGluIEphdmEgcHJvamVjdCB1c2luZyBBTlQgdGFza3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50RGVmYXVsdGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnRSZXN0b3JpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudFdvcmtzcGFjZVNhdmVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkxpc3RPcHRpb25zQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uU2NlbmFyaW9DbGVhbnVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VsZWN0aW9uLlNlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZURldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uU2VydmljZVJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotIAotLyoqCi0gKiAKLSAqIENvbW1hbmQgZnJhZ21lbnQgZm9yIGdlbmVyYXRpbmcgd2ViIHNlcnZpY2UgdG9wIGRvd24gb3IgYm90dG9tIHVwIHVzaW5nIEFudCB0YXNrLgotICogUnVuIGhlYWRsZXNzIEVjbGlwc2Ugb3Igd2l0aGluIHdvcmtzcGFjZSB1c2luZyBSdW4gYXMgQW50IEJ1aWxkLiAgVGhpcyBmcmFnbWVudCBlbGltaW5hdGVzIGFueSBVSSBzcGVjaWZpYyAKLSAqIGNvbW1hbmRzIGFuZCBkYXRhIG1hcHBpbmdzIGJldHdlZW4gY29tbWFuZHMgYW5kIHdpZGdldHMuICBXaWRnZXQgdG8gY29tbWFuZCBtYXBwaW5ncyBhcmUKLSAqIHJlcGxhY2VkIGJ5IEFudCBwcm9wZXJ0eSBmaWxlIHRvIGNvbW1hbmQgbWFwcGluZ3Mgd2hpY2ggYXJlIGVuYWJsZWQgYnkgYSBhbnREYXRhTWFwcGluZyBleHRlbnNpb24gCi0gKiBwb2ludCBpbiB0aGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IHBsdWdpbi4KLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBBbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLQkKLSAgcHVibGljIEFudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgeyAKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IExpc3RPcHRpb25zQ29tbWFuZCgpLCAiIikpOwotICAgIGFkZCAobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBBbnREZWZhdWx0aW5nT3BlcmF0aW9uKCksICIiKSk7ICAgIAotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7ICAgIAotICAgIGFkZCggbmV3IE9iamVjdFNlbGVjdGlvbkZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsgICAKLSAgICBhZGQoIG5ldyBTZXJ2aWNlUm9vdEZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKG5ldyBGaW5pc2hGcmFnbWVudCgpKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEFudFJlc3RvcmluZ0NvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQoKSwgIiIpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsgCQotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbENvbXBvbmVudE5hbWUiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxDb21wb25lbnROYW1lIiwgbnVsbCk7ICAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0JCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgCQotICAgIC8vIE1hcCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25GcmFnbWVudC5jbGFzcywgIlR5cGVSdW50aW1lU2VydmVyIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgCi0gICAgLy9NYXAgQW50RGVmYXVsdGluZ0ZyYWdtZW50Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIlNlcnZpY2VJZHNGaXhlZCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkNsaWVudElkc0ZpeGVkIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBNYXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlTmVlZEVBUiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAKLSAgICAvLyBNYXAgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICAJICAKLQkvLyBTZXR1cCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kLgkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7CQkJCi0JCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwpOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVJ1bnRpbWVJZCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlSjJFRVZlcnNpb24iLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAKLSAgICAKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIG5ldyBTZWxlY3Rpb25UcmFuc2Zvcm1lcigpICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0KLSAgICAvLyBNYXAgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBmb3IgU2VydmVyU3RhcnQoKQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJSZW5kZXJlclZhbGlkYXRpb24iLCBBbnRSZXN0b3JpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZDc2NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAzMzAgMTI4ODI3ICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0ICAgMTQxOTI1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMjE4CSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcxMjIwICAgMjEzNjQwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNSAgIDIyMjQ3MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIEVBUiB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIG1vZHVsZXMgdG8gYmUgYWRkZWQKLSAqIDIwMDkwNDE1ICAgMjY0NjgzIGRhbmFpbC5icmFuZWtvdkBzYXAuY29tIC0gRGFuYWlsIEJyYW5la292Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLk1vZGFsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCXByaXZhdGUgSVdlYlNlcnZpY2UJCQkJd2ViU2VydmljZV87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQlwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotCXByaXZhdGUgU3RyaW5nCQkJCQkJZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJpdmF0ZSBJUHJvamVjdAkJaW5pdGlhbFByb2plY3RfOwotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgCi0JICAvLyBGb3IgdG9wIGRvd24gc2NlbmFyaW9zLCBtZXJnZSB0aGUgY29udGVudCBvZiB0aGUgc2tlbGV0b24gZmlsZXMgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbiBzdG9yZWQuCSAgCi0JICAvLyBUaGUgV2ViIHNlcnZpY2UgZXh0ZW5zaW9ucyB0cmlnZ2VycyB0aGUgc3RvcmluZyBvZiB0aGUgY29udGVudCBvZiB0aGUgb2xkIHNrZWxldG9uIGZpbGUgYnkgCi0JICAvLyBjYWxsaW5nIFdlYlNlcnZpY2VJbmZvLnNldEltcGxVUkxzKCkgYmVmb3JlIHRoZSBuZXcgc2tlbGV0b24gaXMgZ2VuZXJhdGVkIGluIHRoZSBleHRlbnNpb24ncyAKLQkgIC8vIGRldmVsb3AoKSBtZXRob2QuCi0JICAKLQkgIGlmIChjb250ZXh0Xy5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pIHsKLQkJICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCSAgSU1lcmdlciBtZXJnZXIgPSB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldE1lcmdlcigpOwotCQkgIGlmIChtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpICYmIG1lcmdlciAhPSBudWxsKSB7Ci0JCQkgIHN0YXR1cyA9IG1lcmdlci5tZXJnZShtb25pdG9yLCBnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKSk7CQotCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkgIH0JCQotCQkgIH0KLQkgIH0KLQkgIAotCSAgaWYgKGNvbnRleHRfLmdldEFzc2VtYmxlKCkpIHsKLQotCQkgIC8vIENoZWNrIGlmIEVBUiBtb2R1bGUgaXMgcmVxJ2QsIGllLiAhPW51bGwKLQkJICBpZiAoZWFyUHJvamVjdF89PW51bGwpCi0JCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0KLQotCQkgIC8vQ3JlYXRlIHRoZSBzZXJ2aWNlIEVBUiBtb2R1bGUKLQotCQkgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCQkgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUoZWFyUHJvamVjdF8pOwotCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX1RFTVBMQVRFKTsKLQotCQkgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdF8pOwotCQkgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKEZhY2V0VXRpbHMuZ2V0UmVxdWlyZWRFQVJGYWNldFZlcnNpb25zKHByb2plY3QpKTsgCi0KLQkJICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkJICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7Ci0JCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJICB7Ci0JCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCQkgIHJldHVybiBzdGF0dXM7Ci0JCSAgfSAgICAgICAgICAgICAgICAKLQotCQkgIC8vQXNzb2NpYXRlIHRoZSBzZXJ2aWNlIG1vZHVsZSBhbmQgc2VydmljZSBFQVIKLQkJICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhc3NvY2lhdGVDb21tYW5kID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldEVBUlByb2plY3QoZWFyUHJvamVjdF8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RWFyKGVhcl8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCSAgc3RhdHVzID0gYXNzb2NpYXRlQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JCSAgewotCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsJCSAgCi0JCSAgfQkJCQotCi0JCSAgLy9tYWtlIHN1cmUgdGhlIGVhciBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQuCi0JCSAgCi0JCSAgaWYoaW5pdGlhbFByb2plY3RfICE9IG51bGwgJiYgRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KGluaXRpYWxQcm9qZWN0XykpIHsKLQkJCSAgSVByb2plY3QgZWFyUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQkgIGFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SW5Nb2RhbEN0eChpbml0aWFsUHJvamVjdF8sIGVhclByb2plY3QsIG1vbml0b3IpOwotCQkgIH0JCSAKLQkgIAotCSAgfQotCSAgcmV0dXJuIHN0YXR1czsJICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SW5Nb2RhbEN0eChmaW5hbCBJUHJvamVjdCBwcm9qZWN0VG9BZGQsIGZpbmFsIElQcm9qZWN0IGVhclByb2plY3QsIGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCWZpbmFsIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBhZGRSdW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJCXsKLQkJCQlKMkVFVXRpbHMuYWRkSmF2YVByb2plY3RBc1V0aWxpdHlKYXIocHJvamVjdFRvQWRkLCBlYXJQcm9qZWN0LCBtb25pdG9yKTsKLQkJCX0KLQkJfTsKLQotCQl0cnkKLQkJewotCQkJTW9kYWxDb250ZXh0LnJ1bihhZGRSdW5uYWJsZSwgdHJ1ZSwgbW9uaXRvciwgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIFRoZSBleGVjdXRlZCBydW5uYWJsZSBkb2VzIG5vdCB0aHJvdyBjaGVja2VkIGV4Y2VwdGlvbnMgdGhlcmVmb3JlIGlmIHRoaXMgaGFwcGVucywgdGhpcyBpcyBhIHJ1bnRpbWUgZXhjZXB0aW9uCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gVGhlIGV4ZWN1dGVkIHJ1bm5hYmxlIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uIGFuZCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci0JCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxQcm9qZWN0KElQcm9qZWN0IGluaXRpYWxQcm9qZWN0KQotICB7Ci0JICBpbml0aWFsUHJvamVjdF8gPSBpbml0aWFsUHJvamVjdDsgIAotICB9CQotICAgIAotICBwdWJsaWMgSVByb2plY3QgZ2V0SW5pdGlhbFByb2plY3QoKQotICB7Ci0JICByZXR1cm4gaW5pdGlhbFByb2plY3RfOyAgCi0gIH0JCi0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCApCi0gIHsKLQkgIHByb2plY3RfID0gcHJvamVjdDsKLSAgfQotCSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0JCi0JCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLSAgewotCSAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotICB7Ci0JICBlYXJfID0gZWFyOyAgCi0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2ViU2VydmljZSApCi0gIHsKLQkgIHdlYlNlcnZpY2VfID0gd2ViU2VydmljZTsgIAotICB9CQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkgewotCSAgY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGVwbG95Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURlcGxveUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU1NTc1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGVwbG95Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFByZVNlcnZpY2VEZXBsb3lDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICBjb250ZXh0XzsKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICAgIGlmIChjb250ZXh0Xy5nZXREZXBsb3koKSkKLSAgICAgIHsKLSAgICAgICAgLy9JZiBhbmQgd2hlbiB0aGVyZSBhcmUgZnJhbWV3b3JrIHNwZWNpZmljIGRlcGxveSB0aGluZ3MgdG8gYmUgZG9uZSwKLSAgICAgICAgLy9kbyB0aGVtIGhlcmUuCi0gICAgICB9Ci0gICAgICAKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLSAgICAgIGNvbnRleHRfPWNvbnRleHQ7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiZGU0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTE2ICAgMTI2OTY1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjMgICAxNjc0ODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNDAzICAgMTczNjU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEyMTIJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEyMjAgICAyMTM2NDAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDcyNCAgIDI0MTI3NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBWYWxpZGF0ZSBXU0RMIGJlZm9yZSBkb2luZyBtYWpvciBXZWIgc2VydmljZSBwcm9jZXNzaW5nLgotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKLSAqIDIwMDkwNDE1ICAgMjY0NjgzIGRhbmFpbC5icmFuZWtvdkBzYXAuY29tIC0gRGFuYWlsIEJyYW5la292Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uTW9kYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XU0RMUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5IVFRQVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZUVudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSU1lcmdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgc2VydmljZVJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgY29udGV4dF87Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiAgICAgICAgc2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcJCQlwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZwkJCW1vZHVsZVR5cGVfOwotICBwcml2YXRlIFN0cmluZwkJCWVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSVByb2plY3QJCQlpbml0aWFsUHJvamVjdF87Ci0JCi0gIHByaXZhdGUgSVdlYlNlcnZpY2UgICAgICAgd2ViU2VydmljZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgajJlZUxldmVsXzsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgICByZXNvdXJjZUNvbnRleHRfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BfOwotICBwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95XzsKLSAgcHJpdmF0ZSBib29sZWFuIGluc3RhbGxfOwotICBwcml2YXRlIGJvb2xlYW4gcnVuXzsKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0XzsKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hfOwotICAKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgaWYgKGRldmVsb3BfKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLQkJICBpbnQgaW5kZXggPSBtb2R1bGVfLmluZGV4T2YoIi8iKTsKLQkJICBpZiAoaW5kZXghPS0xKXsKLQkJCSAgcHJvamVjdF8gPSBtb2R1bGVfLnN1YnN0cmluZygwLGluZGV4KTsKLQkJCSAgbW9kdWxlXyA9IG1vZHVsZV8uc3Vic3RyaW5nKGluZGV4KzEpOwotCQkgIH0KLQotCQkgIGlmIChlYXJfIT1udWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJICB7Ci0JCQkgIGludCBlYXJJbmRleCA9IGVhcl8uaW5kZXhPZigiLyIpOwotCQkJICBpZiAoZWFySW5kZXghPS0xKSB7Ci0JCQkJICBlYXJQcm9qZWN0XyA9IGVhcl8uc3Vic3RyaW5nKDAsZWFySW5kZXgpOwotCQkJCSAgZWFyXyA9IGVhcl8uc3Vic3RyaW5nKGVhckluZGV4KzEpOwotCQkJICB9Ci0JCSAgfQotCi0KLQkJICBJV2ViU2VydmljZVJ1bnRpbWUgd3NydCAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWUoIHNlcnZpY2VSdW50aW1lSWRfICk7Ci0JCSAgV2ViU2VydmljZUluZm8gICAgIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCi0JCSAgd3NJbmZvLnNldFNlcnZlckZhY3RvcnlJZCggdHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkgKTsKLQkJICB3c0luZm8uc2V0U2VydmVySW5zdGFuY2VJZCggdHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgd3NJbmZvLnNldFN0YXRlKCBXZWJTZXJ2aWNlU3RhdGUuVU5LTk9XTl9MSVRFUkFMICk7Ci0JCSAgd3NJbmZvLnNldFdlYlNlcnZpY2VSdW50aW1lSWQoIHR5cGVSdW50aW1lU2VydmVyXy5nZXRSdW50aW1lSWQoKSApOwotCQkgIAotCQkgIGVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLklORk8sICJ3c19mcmFtZXdvcmsiLCA1MTA3LCB0aGlzLCAiUHJlU2VydmljZURldmVsb3BDb21tYW5kIiwgInNlcnZpY2VSdW50aW1lSWRfID0gIisgc2VydmljZVJ1bnRpbWVJZF8pOwotCQkgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBzZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgPSAgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXyk7Ci0JCSAgSU1lcmdlciBtZXJnZXIgPSBzZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldE1lcmdlckNsYXNzKCk7Ci0JCSAgd3NJbmZvLnNldE1lcmdlcihtZXJnZXIpOwkJICAKLQotCQkgIHdlYlNlcnZpY2VfICA9IHdzcnQuZ2V0V2ViU2VydmljZSggd3NJbmZvICk7Ci0KLQkJICAvL1NldCB1cCB0aGUgSUNvbnRleHQKLQkJICBXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8gPSBudWxsOwotCQkgIGludCBzY2VuYXJpb0ludCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0VHlwZUlkKCkpOwotCQkgIGlmIChzY2VuYXJpb0ludCA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgewotCQkJICBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUF9MSVRFUkFMOwotCQkJICBTdHJpbmcgaW1wbCA9IChTdHJpbmcpKHNlbGVjdGlvbl8uZ2V0U2VsZWN0aW9uKCkpWzBdOwotCQkJICB3c0luZm8uc2V0SW1wbFVSTChpbXBsKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAoc2NlbmFyaW9JbnQgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgewotCQkJICBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOX0xJVEVSQUw7Ci0JCQkgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZykoc2VsZWN0aW9uXy5nZXRTZWxlY3Rpb24oKSlbMF07Ci0JCQkgIAotCQkJICAvLyBjaGVjayBmb3IgcmVkaXJlY3Rpb24gaW4gdGhlIHdzZGwKLQkJCSAgSFRUUFV0aWxpdHkgaHR0cFV0aWwgPSBuZXcgSFRUUFV0aWxpdHkoKTsKLQkJCSAgU3RyaW5nICAgICAgbmV3V3NkbFVSTCAgPSBodHRwVXRpbC5oYW5kbGVSZWRpcmVjdCh3c2RsVVJMKTsKLQkJCSAgCi0JCQkgIHdzSW5mby5zZXRXc2RsVVJMKCBuZXdXc2RsVVJMICk7ICAgCi0JCQkgIAotCQkJICAvLyBWYWxpZGF0ZSB0aGUgdXJsIGJlZm9yZSBwcm9jZWVkaW5nLgotCQkJICBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIHRpbWVkQ21kID0gbmV3IFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQoKTsKLQkJCSAgV2ViU2VydmljZXNQYXJzZXIgICAgICAgICAgICAgICAgICBwYXJzZXIgICA9IFdTRExQYXJzZXJGYWN0b3J5LmdldFdTRExQYXJzZXIoKTsKLQkJCSAgCi0JCQkgIHRpbWVkQ21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKCBwYXJzZXIgKTsKLQkJCSAgdGltZWRDbWQuc2V0V2ViU2VydmljZVVSSSggbmV3V3NkbFVSTCApOwotCQkJICB0aW1lZENtZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0JCQkgIAotCSAgICAgIFdlYlNlcnZpY2VFbnRpdHkgZW50aXR5ID0gcGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSggbmV3V3NkbFVSTCApOwotCSAgICAgIAotCSAgICAgIGlmKCBlbnRpdHkgPT0gbnVsbCB8fCBlbnRpdHkuZ2V0VHlwZSgpICE9IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMICkKLQkgICAgICB7Ci0JICAgICAgICAvLyBUaGlzIGlzbid0IGEgd3NkbCBmaWxlCi0JICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1NFTEVDVElPTl9NVVNUX0JFX1dTREwgKTsKLSAgICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0JICAgICAgfQotCQkgIH0KLQotCQkgIGNvbnRleHRfICAgICA9IG5ldyBTaW1wbGVDb250ZXh0KGRldmVsb3BfLCBhc3NlbWJsZV8sIGRlcGxveV8sIGluc3RhbGxfLCBydW5fLCBjbGllbnRfLCB0ZXN0XywgcHVibGlzaF8sIAotCQkJCSAgc2NlbmFyaW8sIAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpLAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCksCi0JCQkJICByZXNvdXJjZUNvbnRleHRfLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0KLQkJICAvLyBDcmVhdGUgdGhlIHNlcnZpY2UgbW9kdWxlIGlmIG5lZWRlZC4KLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJICB7Ci0JCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShzZXJ2aWNlUnVudGltZUlkXywgbW9kdWxlVHlwZV8pOwotCQkJICBpZiAobWF0Y2hlcykKLQkJCSAgewkJCQkgIAotCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKLQkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7Ci0JCQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnYpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRFYXJQcm9qZWN0TmFtZShlYXJQcm9qZWN0Xyk7Ci0JCQkJICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJCQkgIHsKLQkJCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkJICB9ICAgICAgICAKLQkJCSAgfSAgICAgICAgICAgIAotCQkgIH0gZWxzZSB7Ci0JCQkvLyBhZGQgZmFjZXRzIHJlcXVpcmVkIGJ5IFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLQkJICAgICAgICBpZiAocmZ2Lmxlbmd0aCAhPSAwKSB7Ci0JCSAgICAgICAgCXN0YXR1cyA9IEZhY2V0VXRpbHMuYWRkUmVxdWlyZWRGYWNldHNUb1Byb2plY3QocHJvamVjdCwgcmZ2LCBtb25pdG9yKTsKLQkJICAgICAgICAJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJICAgICAgICAJewotCQkgICAgICAgIAkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJICAgICAgICAJCXJldHVybiBzdGF0dXM7Ci0JCSAgICAgICAgCX0gICAgICAKLQkJICAgICAgICB9Ci0JCSAgfQotCSAgCi0JICAKLQkJICBpZihpbml0aWFsUHJvamVjdF8gIT0gbnVsbCAmJiBGYWNldFV0aWxzLmlzSmF2YVByb2plY3QoaW5pdGlhbFByb2plY3RfKSl7Ci0JCQkgIHRyeXsKLQkJCQlhZGRKYXZhUHJvamVjdEFzVXRpbGl0eUluTW9kYWxDdHgoaW5pdGlhbFByb2plY3RfLCBwcm9qZWN0LCBtb25pdG9yKTsKLQkJCSAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQkJICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWSwgbmV3IFN0cmluZ1tde3Byb2plY3QuZ2V0TmFtZSgpLCBpbml0aWFsUHJvamVjdF8uZ2V0TmFtZSgpfSk7Ci0JCQkJICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoZXJyb3JNZXNzYWdlKTsKLQkJCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSl7Ci0JCQkJICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWSwgbmV3IFN0cmluZ1tde3Byb2plY3QuZ2V0TmFtZSgpLCBpbml0aWFsUHJvamVjdF8uZ2V0TmFtZSgpfSk7Ci0JCQkJICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoZXJyb3JNZXNzYWdlKTsKLQkJCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7CQkJCQkKLQkJCSAgfQkJCi0JCSAgfQotCX0KLQkgIHJldHVybiBzdGF0dXM7Ci0KLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZHMgdGhlIHByb2plY3RUb0FkZCBhcyB1dGlsaXR5IHRvIHRoZSBlYXIgcHJvamVjdCBzcGVjaWZpZWQuIFRoZSBvcGVyYXRpb24gaXMgZXhlY3V0ZWQgaW4gYSBtb2RhbCBjb250ZXh0IGluIG9yZGVyIHRvIGF2b2lkIGxvY2tpbmcgdGhlIHdvcmtzcGFjZSByb290IGluIHRoZSBVSSB0aHJlYWQgCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkSmF2YVByb2plY3RBc1V0aWxpdHlJbk1vZGFsQ3R4KGZpbmFsIElQcm9qZWN0IHByb2plY3RUb0FkZCwgZmluYWwgSVByb2plY3QgZWFyUHJvamVjdCwgZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLQl7Ci0JCWZpbmFsIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBhZGRSdW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJCXsKLQkJCQlKMkVFVXRpbHMuYWRkSmF2YVByb2plY3RBc1V0aWxpdHlKYXIocHJvamVjdFRvQWRkLCBlYXJQcm9qZWN0LCBtb25pdG9yKTsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWZpbmFsIFN0cmluZyB1cmkgPSBwcm9qZWN0VG9BZGQuZ2V0TmFtZSgpICsgIi5qYXIiOwotCQkJCQlKMkVFVXRpbHMuYWRkSkFST3JNb2R1bGVEZXBlbmRlbmN5KGVhclByb2plY3QsIHVyaSk7Ci0JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCXRocm93IG5ldyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKGUpOwotCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCXRocm93IG5ldyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKGUpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQkJCi0JCXRyeQotCQl7Ci0JCQlNb2RhbENvbnRleHQucnVuKGFkZFJ1bm5hYmxlLCB0cnVlLCBtb25pdG9yLCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKSk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkKLQkJewotCQkJZmluYWwgVGhyb3dhYmxlIGNhdXNlID0gZS5nZXRDYXVzZSgpOwotCQkJLy8gSU9FeGNldHBpb24gYW5kIENvcmVFeGNlcHRpb24gdGhyb3duIGJ5IEoyRUVVdGlscy5hZGRKQVJPck1vZHVsZURlcGVuZGVuY3kKLQkJCWlmKGNhdXNlIGluc3RhbmNlb2YgSU9FeGNlcHRpb24pCi0JCQl7Ci0JCQkJdGhyb3cgKElPRXhjZXB0aW9uKWNhdXNlOwotCQkJfQotCQkJaWYoY2F1c2UgaW5zdGFuY2VvZiBDb3JlRXhjZXB0aW9uKQotCQkJewotCQkJCXRocm93IChDb3JlRXhjZXB0aW9uKWNhdXNlOwotCQkJfQotCQkJCi0JCQkvLyBPdGhlciB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQsIHJldGhyb3cgaXQgYXMgYSBydW50aW1lIGV4Y2VwdGlvbgotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0JCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIFRoZSBleGVjdXRlZCBydW5uYWJsZSBkb2VzIG5vdCBzdXBwb3J0IGNhbmNlbGxhdGlvbiBhbmQgdGhlcmVmb3JlIHRoaXMgY2FuIG5ldmVyIGhhcHBlbgotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKLQkJfQotCX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIgKQotICB7Ci0JICB0eXBlUnVudGltZVNlcnZlcl8gPSB0eXBlUnVudGltZVNlcnZlcjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUnVudGltZUlkKFN0cmluZyBpZCkKLSAgewotICAgIHNlcnZpY2VSdW50aW1lSWRfID0gaWQ7Ci0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSjJFRVZlcnNpb24oIFN0cmluZyBqMmVlTGV2ZWwgKQotICB7Ci0JajJlZUxldmVsXyA9IGoyZWVMZXZlbDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEoyZWVMZXZlbCgpCi0gIHsKLQkgIHJldHVybiBqMmVlTGV2ZWxfOyAgCi0gIH0KLQkKLSAgcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoKQotICB7Ci0JcmV0dXJuIHdlYlNlcnZpY2VfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJQ29udGV4dCBnZXRDb250ZXh0KCkKLSAgewotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKCBJU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLQlzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdF87CSAgCi0gIH0KLQkgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TW9kdWxlKCkKLSAgewotICAgIHJldHVybiBtb2R1bGVfOwkgIAotICB9Ci0JCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZVR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLQkgIG1vZHVsZVR5cGVfID0gdHlwZTsKLSAgfQotCQotICBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGVhclByb2plY3RfOwkgIAotICB9Ci0JCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyKCkKLSAgewotCSAgcmV0dXJuIGVhcl87ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCSAgZWFyXyA9IGVhcjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsU2VydmljZShib29sZWFuIGluc3RhbGxTZXJ2aWNlKQotCXsKLQkJaW5zdGFsbF8gPSBpbnN0YWxsU2VydmljZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JCWRldmVsb3BfID0gZGV2ZWxvcFNlcnZpY2U7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZVNlcnZpY2UoYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2UpIHsKLQkJYXNzZW1ibGVfID0gYXNzZW1ibGVTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JCWRlcGxveV8gPSBkZXBsb3lTZXJ2aWNlOwotCX0KLSAgCi0JcHVibGljIHZvaWQgc2V0U3RhcnRTZXJ2aWNlKGJvb2xlYW4gc3RhcnRTZXJ2aWNlKQotCXsKLQkJcnVuXyA9IHN0YXJ0U2VydmljZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZSkKLQl7Ci0JCXRlc3RfID0gdGVzdFNlcnZpY2U7Ci0JfQkKLQkKLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFNlcnZpY2UoYm9vbGVhbiBwdWJsaXNoU2VydmljZSkKLSAgewotICAgIHB1Ymxpc2hfID0gcHVibGlzaFNlcnZpY2U7Ci0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlblByb3h5KQotICB7Ci0gICAgY2xpZW50XyA9IGdlblByb3h5OyAgCi0gIH0JCi0JCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxQcm9qZWN0KElQcm9qZWN0IGluaXRpYWxQcm9qZWN0KQotICB7Ci0JICBpbml0aWFsUHJvamVjdF8gPSBpbml0aWFsUHJvamVjdDsgIAotICB9CQotICAgIAotICBwdWJsaWMgSVByb2plY3QgZ2V0SW5pdGlhbFByb2plY3QoKQotICB7Ci0JICByZXR1cm4gaW5pdGlhbFByb2plY3RfOyAgCi0gIH0JCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NTg5NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MjUgICAyMjA5ODUgIC0gVHJ1bmcsIFNlcnZlciBpcyByZWNyZWF0ZWQgd2hlbiBwcmV2IHB1Ymxpc2ggZmFpbGVkCi0gKiAyMDA4MDQyOSAgIDIyMDk4NSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODA1MjAgICAyMzMwNjUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZlciBub3QgZm91bmQgZXJyb3IgaW4gV2ViIHNlcnZpY2UgZ2VuZXJhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZUluc3RhbGxDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0JcHJpdmF0ZSBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlXzsKLQlwcml2YXRlIFN0cmluZwkJcHJvamVjdF87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgICAgICBtb2R1bGVfOwotCXByaXZhdGUgU3RyaW5nCQllYXJQcm9qZWN0XzsKLSAgICBwcml2YXRlIFN0cmluZyAgICAgIGVhcl87Ci0gICAgcHJpdmF0ZSBJQ29udGV4dCAgICBjb250ZXh0XzsKLQkJCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBpZiAoY29udGV4dF8uZ2V0SW5zdGFsbCgpKQotCSAgewotCSAgICAgICAgICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7ICAgICAgCi0JCQkgIAkJCQotCQkJCWlmICh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLQkJCQl7Ci0JCQkJCS8vIEF0dGVtcHQgdG8gZmluZCBhIHNlcnZlciBpbnN0YW5jZSBpbiB0aGUgd29ya3NwYWNlIG1hdGNoaW5nCi0JCQkJCS8vIHRoZSBzZXJ2ZXIgaWQgb2YgdGhlIHdlYlNlcnZpY2VfCi0JCQkJCS8vIElmIHdlIGNhbiBmaW5kIG9uZSwgd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBuZXcgc2VydmVyLgotCQkJCQlJU2VydmVyW10gYWxsU2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotCQkJCQlpZiAoYWxsU2VydmVycyAhPSBudWxsICYmIGFsbFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJSVNlcnZlciBvbmVTZXJ2ZXIgPSBhbGxTZXJ2ZXJzW2ldOwotCQkJCQkJCWlmIChvbmVTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKAotCQkJCQkJCQkJd2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKSkpIHsKLQkJCQkJCQkJCi0JCQkJCQkJCXdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0U2VydmVySW5zdGFuY2VJZChvbmVTZXJ2ZXIuZ2V0SWQoKSk7Ci0JCQkJCQkJCXdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0U2VydmVyQ3JlYXRlZCh0cnVlKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJLy8gQ2Fubm90IGZpbmQgYW4gYXBwcm9wcmlhdGUgc2VydmVyLCBzbyB3ZSB3aWxsIGNyZWF0ZSBvbmUKLQkJCQkJaWYgKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpID09IG51bGwpIHsKLQkJCQkJCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3JlYXRlU2VydmVyQ29tbWFuZCA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlckZhY3RvcnlpZCh3ZWJTZXJ2aWNlXwotCQkJCQkJCQkuZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKSk7Ci0JCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlclJ1bnRpbWVJZCh3ZWJTZXJ2aWNlXwotCQkJCQkJCQkuZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJSdW50aW1lSWQoKSk7Ci0JCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KGVudmlyb25tZW50KTsKLQkJCQkJCUlTdGF0dXMgY3JlYXRlU2VydmVyU3RhdHVzID0gY3JlYXRlU2VydmVyQ29tbWFuZC5leGVjdXRlKAotCQkJCQkJCQltb25pdG9yLCBudWxsKTsKLQkJCQkJCWlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuT0spIHsKLQkJCQkJCQl3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLnNldFNlcnZlckluc3RhbmNlSWQoCi0JCQkJCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCQkJCQkJd2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5zZXRTZXJ2ZXJDcmVhdGVkKHRydWUpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcigKLQkJCQkJCQkJCQljcmVhdGVTZXJ2ZXJTdGF0dXMpOwotCQkJCQkJCX0KLQkJCQkJCQlyZXR1cm4gY3JlYXRlU2VydmVyU3RhdHVzOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCSAgCi0JCQkJCi0JCQkJCi0JCQkJQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJCQlpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCAmJiBlYXJQcm9qZWN0Xy5sZW5ndGgoKT4wICYmIGVhcl8hPSBudWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJCQl7Ci0JCQkJCWNvbW1hbmQuc2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQkJCWNvbW1hbmQuc2V0TW9kdWxlKGVhcl8pOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQljb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCQkJCQljb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsJCQkJCi0JCQkJfQotCQotCSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJCQl7Ci0JCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCX0JCQkKLQkJCSAgICByZXR1cm4gc3RhdHVzOwotCQkgIH0KLQkJICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QgKQotCSAgewotCQkgIHByb2plY3RfID0gcHJvamVjdDsKLQkgIH0KLQkJICAKLQkgIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0JICB7Ci0JCSAgbW9kdWxlXyA9IG1vZHVsZTsKLQkgIH0JCi0JCQotCSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdCggU3RyaW5nIGVhclByb2plY3QgKQotCSAgewotCQkgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLQkgIHsKLQkJICBlYXJfID0gZWFyOyAgCi0JICB9Ci0JCQotCSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2ViU2VydmljZSApCi0JICB7Ci0JCSAgd2ViU2VydmljZV8gPSB3ZWJTZXJ2aWNlOyAgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLQkgIHsKLQkJICBjb250ZXh0Xz1jb250ZXh0OwotCSAgfQotCQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VSdW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlUnVuQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzU4YmNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VSdW5Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuU3RhcnRTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlUnVuQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCXByaXZhdGUgSVdlYlNlcnZpY2UJCQkJd2ViU2VydmljZV87Ci0JcHJpdmF0ZSBJQ29udGV4dAkJCQljb250ZXh0XzsKLQkKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkJICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICAgICAgaWYgKGNvbnRleHRfLmdldFJ1bigpKQotCQkgIHsKLQkgICAgICAgICAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQkJCQotCQkJCVN0YXJ0U2VydmVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFN0YXJ0U2VydmVyQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JICAgICAgICAgICAgY29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkJCQlzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJCQl7Ci0JCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwkJCSAgCi0JCQkJfQotCQkgIH0KLQkJICAKLQkJICByZXR1cm4gc3RhdHVzOwkJCQotCSAgfQotCQkKLQkgIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UgKQotCSAgewotCQkgIHdlYlNlcnZpY2VfID0gd2ViU2VydmljZTsgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0IChJQ29udGV4dCBjb250ZXh0KQotCSAgewotCQkgIGNvbnRleHRfID0gY29udGV4dDsKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vU2VydmljZVJvb3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vU2VydmljZVJvb3RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmU4NTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1NlcnZpY2VSb290RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMzEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMjEyCSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLlByZUNsaWVudERldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkRhdGFPYmplY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkFzc2VtYmxlU2VydmljZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveVNlcnZpY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5EZXZlbG9wU2VydmljZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkluc3RhbGxTZXJ2aWNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuUnVuU2VydmljZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVJvb3RGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBTZXJ2aWNlUm9vdEZyYWdtZW50KCkKLSAgewotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlU2VydmljZURldmVsb3BDb21tYW5kKCksICIiICkgKTsKLSAgICBhZGQoIG5ldyBEZXZlbG9wU2VydmljZUZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IEFzc2VtYmxlU2VydmljZUZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VEZXBsb3lDb21tYW5kKCksICIiICkgKTsKLSAgICBhZGQoIG5ldyBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlU2VydmljZUluc3RhbGxDb21tYW5kKCksICIiICkgKTsKLSAgICBhZGQoIG5ldyBJbnN0YWxsU2VydmljZUZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VSdW5Db21tYW5kKCksIAotICAgIAkgIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZVJ1bkNvbW1hbmQiICkgKTsKLSAgICBhZGQoIG5ldyBSdW5TZXJ2aWNlRnJhZ21lbnQoKSApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSkgCi0gIHsKLQkJLy9NYXBwaW5ncyBmcm9tIGZyYW1ld29yayB0byBleHRlbnNpb24gZnJhZ21lbnRzCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCi0JLy8gTWFwIHRoZSBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQgaW50byB0aGUgZGF0YU9iamVjdCBhbmQgdGhlIFByZUNsaWVudERldmVsb3BDb21tYW5kLgotCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEYXRhT2JqZWN0Q29tbWFuZC5jbGFzcywgIkRhdGFPYmplY3QiLCBudWxsICk7Ci0JcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRGF0YU9iamVjdCIsIG51bGwgKTsKLQkJCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCQotCQkvL01hcHBpbmdzIGZyb20gZnJhbWV3b3JrIHRvIGZyYW1ld29yayBjb21tYW5kcwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0JCQotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVTZXJ2aWNlRGVwbG95Q29tbWFuZC5jbGFzcyApOwotICAgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0KLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVTZXJ2aWNlUnVuQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZVNlcnZpY2VSdW5Db21tYW5kLmNsYXNzICk7Ci0JCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2I4YTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUwNCAgIDEzODExOCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnBsdWdpbjsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIENyZWF0aW9uIFVJIHBsdWdpbi4KLSogPHA+Ci0qIFRoZSBXZWIgU2VydmljZXMgQ3JlYXRpb24gVUkgcGx1Z2luJ3Mgc29sZSBmdW5jdGlvbiBpcyB0byBhZGQgCi0qIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBXZWIgU2VydmljZXMgQ3JlYXRpb24gV2l6YXJkLCBjb250YWluZWQgaW4gIAotKiB0aGUgb3JnLmVjbGlwc2UuanN0LndzLnVpIHBsdWdpbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4gaW5zdGFuY2VfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotICAqIGNsYXNzID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4iLgotICAqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4gKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIGdldEluc3RhbmNlICgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gICAqIGFzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotICAgKi8KLSAgIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvciAoIFN0cmluZyBuYW1lICkKLSAgIHsKLSAJdHJ5Ci0gICAgIHsJCi0gICAgIAlVUkwgaW1hZ2VVUkwgPSBGaWxlTG9jYXRvci5maW5kKGluc3RhbmNlXy5nZXRCdW5kbGUoKSwgbmV3IFBhdGgoIiRubCQvIituYW1lKSwgbnVsbCk7Ci0gICAgIAlyZXR1cm4gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotICAgICB9Ci0gICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgewotICAgICAgIHJldHVybiBudWxsOwotICAgICB9Ci0gICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3ByZWZlcmVuY2VzL1NjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wcmVmZXJlbmNlcy9TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlMDlmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3ByZWZlcmVuY2VzL1NjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxNyAgIDEzNjM5MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotCi0KLQotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgCi17Ci0JcHJpdmF0ZSBTZXJ2ZXJXaXphcmRXaWRnZXQgc2VydmVyV2lkZ2V0XyA9IG51bGw7Ci0JCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgICB7IH0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZSNjcmVhdGVDb250ZW50cyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCi0JICovCi0JCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgCi0JewotCSAgVUlVdGlscyB1dGlscyA9IG5ldyBVSVV0aWxzKG51bGwpOwotCSAgCi0JICBDb21wb3NpdGUgcGFnZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAxICk7Ci0JICAKLSAgICAgIHNlcnZlcldpZGdldF8gPSBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0KCBmYWxzZSwgdHJ1ZSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5hZGRDb250cm9scyggcGFnZSwgbmV3IExpc3RlbmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoIEV2ZW50IGV2dCApe30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsgICAgICAKLQkgIGluaXRpYWxpemVWYWx1ZXMoKTsKLQkgIHNlcnZlcldpZGdldF8uZGlzYWJsZU5vblByZWZlcmVuY2VXaWRnZXRzKCk7Ci0JICBhcHBseURpYWxvZ0ZvbnQocGFnZSk7Ci0JICByZXR1cm4gcGFnZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0JewotCSAgU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0KLSAgICAgIC8vIFNldCB2YWx1ZXMgZnJvbSBjb250ZXh0LgotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmVySWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICBUeXBlUnVudGltZVNlcnZlciBjbGllbnRJZHMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJCi0JICBzZXJ2ZXJJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldFdlYlNlcnZpY2VUeXBlKCkgKTsKLQkgIGNsaWVudElkcy5zZXRUeXBlSWQoIGNvbnRleHQuZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKSApOwotCQkKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCBzZXJ2ZXJJZHMgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIGNsaWVudElkcyApOwotICAgICAgLy9qdmggc2VydmVyV2lkZ2V0Xy5zZXRHZW5lcmF0ZVByb3h5KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldEdlbmVyYXRlUHJveHkoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0UHVibGlzaFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldEluc3RhbGxTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldEluc3RhbGxXZWJTZXJ2aWNlKCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldEluc3RhbGxDbGllbnQoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0SW5zdGFsbENsaWVudCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTdGFydFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0U3RhcnRXZWJTZXJ2aWNlKCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFRlc3RTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFRlc3RXZWJTZXJ2aWNlKCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFRlc3RDbGllbnQoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0VGVzdFdlYlNlcnZpY2UoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0TW9uaXRvclNlcnZpY2UobmV3IEJvb2xlYW4oY29udGV4dC5nZXRNb25pdG9yV2ViU2VydmljZSgpKSk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFNlcnZpY2VHZW5lcmF0aW9uKGNvbnRleHQuZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlKCkpOyAgLy9qdmggICAgICAKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0Q2xpZW50R2VuZXJhdGlvbihjb250ZXh0LmdldEdlbmVyYXRlQ2xpZW50KCkpOyAgLy9qdmgKLSAgICAgIHNlcnZlcldpZGdldF8uaW50ZXJuYWxpemUoKTsKLQl9Ci0JCi0gICAgLyoqCi0JICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkqLwotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0JewotCSAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0JICBzZXRUb0RlZmF1bHRzKCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRUb0RlZmF1bHRzKCkKLQl7Ci0JICBTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQotICAgICAgLy8gU2V0IHZhbHVlcyBmcm9tIGNvbnRleHQuCi0JICBUeXBlUnVudGltZVNlcnZlciBzZXJ2ZXJJZHMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgIFR5cGVSdW50aW1lU2VydmVyIGNsaWVudElkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCQkKLQkgIHNlcnZlcklkcy5zZXRUeXBlSWQoIGNvbnRleHQuZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCkgKTsKLQkgIGNsaWVudElkcy5zZXRUeXBlSWQoIGNvbnRleHQuZ2V0Q2xpZW50V2ViU2VydmljZVR5cGVEZWZhdWx0KCkgKTsKLQkJCi0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggc2VydmVySWRzICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBjbGllbnRJZHMgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0UHVibGlzaFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRJbnN0YWxsU2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRJbnN0YWxsV2ViU2VydmljZURlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0SW5zdGFsbENsaWVudCggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRJbnN0YWxsQ2xpZW50RGVmYXVsdCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTdGFydFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0U3RhcnRXZWJTZXJ2aWNlRGVmYXVsdCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRUZXN0U2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRUZXN0V2ViU2VydmljZURlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0VGVzdENsaWVudCggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRUZXN0V2ViU2VydmljZURlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0TW9uaXRvclNlcnZpY2UobmV3IEJvb2xlYW4oY29udGV4dC5nZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKSkpOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTZXJ2aWNlR2VuZXJhdGlvbihjb250ZXh0LmdldEdlbmVyYXRlV2ViU2VydmljZURlZmF1bHQoKSk7IC8vanZoCi0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldENsaWVudEdlbmVyYXRpb24oY29udGV4dC5nZXRHZW5lcmF0ZUNsaWVudERlZmF1bHQoKSk7IC8vanZoCi0gICAgICBzZXJ2ZXJXaWRnZXRfLmludGVybmFsaXplKCk7Ci0JfQotCi0JLyoqCi0JICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLQl7Ci0JICBzdG9yZVZhbHVlcygpOwotCSAgcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLQl7Ci0JICBTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQkgIAotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmVySWRzID0gc2VydmVyV2lkZ2V0Xy5nZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgIFR5cGVSdW50aW1lU2VydmVyIGNsaWVudElkcyA9IHNlcnZlcldpZGdldF8uZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgIAotICAgICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVHlwZSggc2VydmVySWRzLmdldFR5cGVJZCgpICk7Ci0gICAgICBjb250ZXh0LnNldENsaWVudFdlYlNlcnZpY2VUeXBlKCBjbGllbnRJZHMuZ2V0VHlwZUlkKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggc2VydmVyV2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCBzZXJ2ZXJXaWRnZXRfLmdldFB1Ymxpc2hTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbFdlYlNlcnZpY2UoIHNlcnZlcldpZGdldF8uZ2V0SW5zdGFsbFNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSApOwotICAgICAgY29udGV4dC5zZXRJbnN0YWxsQ2xpZW50KCBzZXJ2ZXJXaWRnZXRfLmdldEluc3RhbGxDbGllbnQoKS5ib29sZWFuVmFsdWUoKSApOwotICAgICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIHNlcnZlcldpZGdldF8uZ2V0U3RhcnRTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0VGVzdFdlYlNlcnZpY2UoIHNlcnZlcldpZGdldF8uZ2V0VGVzdFNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSApOwotICAgICAgY29udGV4dC5zZXRNb25pdG9yV2ViU2VydmljZShzZXJ2ZXJXaWRnZXRfLmdldE1vbml0b3JTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZVdlYlNlcnZpY2Uoc2VydmVyV2lkZ2V0Xy5nZXRTZXJ2aWNlR2VuZXJhdGlvbigpKTsgICAgICAKLSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVDbGllbnQoc2VydmVyV2lkZ2V0Xy5nZXRDbGllbnRHZW5lcmF0aW9uKCkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotCXsKLQkgIHBlcmZvcm1PaygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0Q29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM5NmMxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlcnZlci5TdGFydFNlcnZlcldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yIGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIHByaXZhdGUgSVNlcnZlciAgICAgIHNlcnZlcl87Ci0JICAKLSAgcHVibGljIFN0YXJ0U2VydmVyV2lkZ2V0Q29udHJpYnV0b3IoIElTZXJ2ZXIgc2VydmVyICkKLSAgewotCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSAKLSAgewotCXJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIAotICB7Ci0JcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIAotICB7Ci0JcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgCi0gIHsKLQlyZXR1cm4gbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JICAgICAgIHsKLQkJCSBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgCi0JCQkgewotCQkJCXJldHVybiBuZXcgU3RhcnRTZXJ2ZXJXaWRnZXQoIHNlcnZlcl8gKTsKLSAJCQkgfQotCSAgICAgICB9OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODcxN2IxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDMyOCAgIDE3MzM0NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBQZWVrIG5leHQgcGFnZSBwcm9ibGVtCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbi5QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotcHVibGljIGNsYXNzIFN0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeSBpbXBsZW1lbnRzIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSAKLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZSB3ZWJzZXJ2aWNlXzsKLSAgcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLSAgCi0gIHB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCkgCi0gIHsKLSAgICBJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHdlYnNlcnZpY2VfICE9IG51bGwgJiYgY29udGV4dF8uZ2V0UnVuKCkpCi0gICAgewotICAgICAgU3RyaW5nIGluc3RhbmNlSWQgPSB3ZWJzZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLSAgICAgIAotICAgICAgaWYoIGluc3RhbmNlSWQgIT0gbnVsbCAmJiBpbnN0YW5jZUlkLmxlbmd0aCgpID4gMCApCi0gICAgICB7Ci0gICAgICAgIHNlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlciggaW5zdGFuY2VJZCApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiggc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclN0YXRlKCkgIT0gSVNlcnZlci5TVEFURV9TVEFSVEVEICkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXJ0U2VydmVyV2lkZ2V0Q29udHJpYnV0b3IoIHNlcnZlciApOwotICAgIH0KLSAgICAKLQlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yKSAKLSAgewotCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBTdGFydFNlcnZlcldpZGdldEZhY3RvcnkuY2xhc3MgKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFN0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeS5jbGFzcyApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZSB3ZWJzZXJ2aWNlICkKLSAgewotICAgIHdlYnNlcnZpY2VfID0gd2Vic2VydmljZTsgIAotICB9Ci0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQgKCBJQ29udGV4dCBjb250ZXh0ICkKLSAgewotICAgIGNvbnRleHRfID0gY29udGV4dDsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZjZhOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDcgICAxMzU0MTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQwNyAgIDEzNTQ0MyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMCAgIDEzNTQ0MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzU1NjIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTEgICAxMzYxNjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDE3ICAgMTM2MzkwLzEzNjM5MS8xMzYxNTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNjE1OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2NzA1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzYxODIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDIwICAgMTM3ODIwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjEgICAxMzY3NjEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNCAgIDEzODA1MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjUgICAxMzc4MzEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNiAgIDEzODUxOSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUwNCAgIDEzODAzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyNCAgIDE0MjI3NiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDUgICAxNDUwODEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA2MDcgICAxNDQ4MjYgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA2MDcgICAxNDQwNDkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA2MTQgICAxNDYyNzAgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA2MTYgICAxNDczMTcgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA3MTcgICAxNTA1NzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDYwNzI2ICAgMTUwODY1IHNlbmdwbEBjYS5pYm0uY29tIC0gIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwODAzICAgMTUyNDg2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBUeXBpbmcgV1NETCBpbiBTZXJ2aWNlIGRlZmluaXRpb24gZmllbGQgaXMgdmVyeSBzbG93Ci0gKiAyMDA2MDgxNyAgIDE0MDAxNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgbG9uZ2VyIHByb2plY3Qgb3Igc2VydmVyL3J1bnRpbWUgc3RyaW5ncyBkbyBub3QgcmVzaXplIHdpemFyZAotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwNjA4MjkgICAxNTU0NDEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdlYiBzZXJ2aWNlIHdpemFyZCBoYW5ncyBkdXJpbmcgcmVzaXplCi0gKiAyMDA2MDgzMCAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBVcGRhdGVkIHBhdGNoIGZvciB0aGlzIGRlZmVjdC4KLSAqIDIwMDYwODMxICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTbWFsbCB0d2VhayBmb3IgdGhpcyBidWcKLSAqIDIwMDYxMDAzICAgMTU5MTQyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MTIxMiAgIDE2NDE3NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgSW5jb3JyZWN0IHZhbGlkYXRpb24gZXJyb3IgY29tcGxhaW5pbmcgYWJvdXQgcnVudGltZSBub3Qgc3VwcG9ydGluZyBhIHByb2plY3QgdHlwZQotICogMjAwNjEyMTIgICAxNTk5MTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGNoYW5naW5nIHNlcnZpY2UgZGVmaW5pdGlvbiByZXNldHMgc29tZSBjb25maWd1cmF0aW9uIGZpZWxkcwotICogMjAwNzAyMDUgICAxNzI2ODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5QRSBpbiBTY2VuY2FyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMgcGFnZQotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjA1ICAgMTcwMTQxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDIxNSAgIDIxNjMzNyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMwMSAgIDIyMTAzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMTIgICAxNDc0NDIgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqIDIwMDgwMzE4ICAgMjEzMzMwIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBOb24tY29udmVudGlvbmFsIEphdmEgbmFtaW5nIHByZXZlbnRzIGNyZWF0aW5nIFdlYiBTZXJ2aWNlcyAoY2xpZW50KQotICogMjAwODAzMjYgICAxOTg0Mzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMTk4NDM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQxNiAgIDIxNTA4NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDQxNyAgIDIyNzU5OSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA2MTMgICAyMzY1MjMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE92ZXJ3cml0ZSBzZXR0aW5nIG9uIFdlYiBzZXJ2aWNlIHdpemFyZCBpcyBjb3VwbGVkIHdpdGggcHJlZmVyZW5jZQotICogMjAwOTA5MjYgICAyNDg0NDggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBTaG91bGQgbm90IHJlc2l6ZSBXUyBXaXphcmQgZm9yIGxvbmcgV1NETCBmaWxlIG5hbWVzCi0gKiAyMDA5MDEyMSAgIDI2MTczMCB6aGFuZ0BjYS5pYm0uY29tIC0gQWxsYW4gWmhhbmcsIFdlYlNlcnZpY2UgY2xpZW50IHJ1bnRpbWUgaWQgcmV0dXJuIG51bGwKLSAqIDIwMDkwMzAyICAgMjQyNDYyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFNhdmUgV2ViIHNlcnZpY2VzIHdpemFyZCBzZXR0aW5ncwotICogMjAwOTAzMTMgICAyNjg1NjcgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgcGVyc2lzdGVkIHdpemFyZCBzZXR0aW5ncyBnb25lIHVubGVzcyBsYXVuY2hpbmcgb24gb2JqZWN0Ci0gKiAyMDA5MDMyNiAgIDI2OTA5NyBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCBbQWNjZXNzaWJpbGl0eV0gV2ViIHNlcnZpY2VzIHdpemFyZCBkaWFsb2cgc2hvdWxkIGJlIHNlbGVjdGVkIGFmdGVyIGNhbmNlbGluZyB0aGUgQnJvd3NlIGZvciBjbGFzcyBkaWFsb2cKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLklPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLklQYWNrYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5Qcm9qZWN0U2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLldlYlNlcnZpY2VDbGllbnRUeXBlV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5UaW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLlByb2plY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5SdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5Db21ib1dpdGhIaXN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNjYWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5IeXBlcmxpbmtHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5IeXBlcmxpbmtTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldTVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJXaXphcmRXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBSdW5uYWJsZSwgSVBhY2thYmxlIHsKLQkKLQkvL0lORk9QT1BTCi0gICAgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAwMSBmb3IgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fUEFHRSA9ICJXU1dTQ0VOMDAwMSI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMTAgZm9yIHRoZSBXZWIgU2VydmljZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ09NQk9fU0VSVklDRVRZUEUgPSAiV1NXU0NFTjAwMTAiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDE0IGZvciB0aGUgbW9uaXRvciBzZXJ2aWNlIGNoZWNrYm94IG9mIHRoZSBTY2VuYXJpbyBwYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UgPSAiV1NXU0NFTjAwMTQiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDEyIGZvciB0aGUgTGF1bmNoIFVEREkgY2hlY2sgYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9MQVVOQ0hfV1MgPSAiV1NXU0NFTjAwMTIiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIwIGZvciB0aGUgU2VydmljZSBJbXBsZW1lbmF0aW9uIHRleHQgZmllbGQgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMID0gIldTV1NDRU4wMDIwIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMSBmb3IgdGhlU2VydmljZSBTbGlkZXIgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0UgPSAiV1NXU0NFTjAwMjEiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIyIGZvciB0aGUgU2VydmVyIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUiA9ICJXU1dTQ0VOMDAyMiI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjMgZm9yIHRoZSBSdW50aW1lIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1JVTlRJTUUgPSAiV1NXU0NFTjAwMjMiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDI0IGZvciB0aGVQcm9qZWN0cyBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyAgPSAiV1NXU0NFTjAwMjQiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDMwIGZvciB0aGUgT3ZlcndyaXRlIEZpbGVzIGNoZWNrYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUgPSAiV1NXU0NFTjAwMzAiOwotCSAKLQlwcml2YXRlIFNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgc2NhbGVTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcl87Ci0JcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBvYmplY3RNb2RpZnlMaXN0ZW5lcl8gOwotCXByaXZhdGUgaW50IHZhbGlkYXRpb25TdGF0ZV87Ci0JYm9vbGVhbiB2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSB0cnVlOwotCi0JcHJpdmF0ZSBJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnXzsKLQkKLQlwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIGlkc187Ci0JcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxJZHNfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZV87Ci0JcHJpdmF0ZSBJUHJvamVjdCBpbml0aWFsUHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ29tcG9uZW50VHlwZV87Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXJfOwotCXByaXZhdGUgYm9vbGVhbiBuZWVkRWFyXzsKLQkJIAotCXByaXZhdGUgYm9vbGVhbiBkZXZlbG9wU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuIGRlcGxveVNlcnZpY2VfOwotCQotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uXzsKLQlwcml2YXRlIEJvb2xlYW4gdGVzdFNlcnZpY2VfOwotCXByaXZhdGUgQm9vbGVhbiBzdGFydFNlcnZpY2VfOwotCXByaXZhdGUgQm9vbGVhbiBpbnN0YWxsU2VydmljZV87Ci0KLQlwcml2YXRlIGJvb2xlYW4gZGlzcGxheVByZWZlcmVuY2VzXzsKLQlwcml2YXRlIGJvb2xlYW4gcHJlZmVyZW5jZXNQYWdlXzsKLQotCXByaXZhdGUgQ29tcG9zaXRlIGdyb3VwQ29tcG9zaXRlXzsKLQlwcml2YXRlIENvbXBvc2l0ZSBoQ29tcFNlcnZpY2VfOwkKLQlwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRUeXBlV2lkZ2V0IGNsaWVudFdpZGdldF87Ci0gICAgcHJpdmF0ZSBMYWJlbCBzZXJ2aWNlTGFiZWxfOwotCXByaXZhdGUgQ29tYm8gd2Vic2VydmljZVR5cGVfOwotCXByaXZhdGUgQ29tYm9XaXRoSGlzdG9yeSBzZXJ2aWNlSW1wbF87Ci0JcHJpdmF0ZSBTY2FsZSBzZXJ2aWNlU2NhbGVfOwotCXByaXZhdGUgTGFiZWwgdG9wb2xvZ3lTcG90XzsKLQlwcml2YXRlIEJ1dHRvbiBicm93c2VCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIHB1Ymxpc2hCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIG1vbml0b3JCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIG92ZXJ3cml0ZUJ1dHRvbl87CQotCXByaXZhdGUgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cgYnJvd3NlRGlhbG9nXzsKLQlwcml2YXRlIFByb2plY3RTZWxlY3Rpb25EaWFsb2cgcHJvamVjdERpYWxvZ187Ci0JcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtTZXJ2aWNlUnVudGltZV87Ci0JcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtTZXJ2aWNlU2VydmVyXzsKLQlwcml2YXRlIEh5cGVybGluayBoTGlua1NlcnZpY2VQcm9qZWN0XzsKLQlwcml2YXRlIEh5cGVybGluayBoTGlua1NlcnZpY2VFQVJfOwotCQkKLQlwcml2YXRlIE9iamVjdCBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOyAvL21heSBiZSBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBvciBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0JCi0JcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLQkKLQlwcml2YXRlIFRpbWVyIHRpbWVyXyA9IG51bGw7Ci0JCQotCXByaXZhdGUgVUlVdGlscyB1dGlsc18gPSBuZXcgVUlVdGlscygib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIik7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGZvcmNlUmVmcmVzaFJ1bnRpbWUgPSBmYWxzZTsKLQkKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMD0iaWNvbnMvc2VydmljZV90ZXN0LmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMT0iaWNvbnMvc2VydmljZV9ydW4uanBnIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMj0iaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMz0iaWNvbnMvc2VydmljZV9kZXBsb3kuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV80PSJpY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfNT0iaWNvbnMvc2VydmljZV9kZXZlbG9wLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQkJCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18wPSJpY29ucy9zY2FsZTBfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18xPSJpY29ucy9zY2FsZTFfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18yPSJpY29ucy9zY2FsZTJfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18zPSJpY29ucy9zY2FsZTNfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR180PSJpY29ucy9zY2FsZTRfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR181PSJpY29ucy9zY2FsZTVfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR182PSJpY29ucy9zY2FsZTZfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0KLQlwcml2YXRlIFN0cmluZyBTRVJWSUNFX1JVTlRJTUVfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1JVTlRJTUVTX0xJU1QgOyAKLSAgICBwcml2YXRlIFN0cmluZyBTRVJWSUNFX1NFUlZFUl9QUkVGSVggPSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVDsKLSAgICBwcml2YXRlIFN0cmluZyBTRVJWSUNFX1BST0pFQ1RfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfUFJPSkVDVDsKLSAgICBwcml2YXRlIFN0cmluZyBTRVJWSUNFX0VBUl9QUkVGSVggPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9FQVJfUFJPSkVDVDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gZGlzcGxheVByZWZlcmVuY2VzIFNldCB0byB0cnVlIGlmIHByZWZlcmVuY2VzIHN1Y2ggYXMgb3ZlcndyaXRlIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gdGhlIHdpemFyZCBwYWdlCi0gICAgICogQHBhcmFtIHByZWZQYWdlICBTZXQgdG8gdHJ1ZSBpZiB0aGUgd2lkZ2V0IGlzIGJlaW5nIHVzZWQgb24gdGhlIHByZWZlcmVuY2VzIHBhZ2UuICBBbHRlcnMgd2lkZ2V0IGxheW91dC4KLSAgICAgKi8KLQlwdWJsaWMgU2VydmVyV2l6YXJkV2lkZ2V0KGJvb2xlYW4gZGlzcGxheVByZWZlcmVuY2VzLCBib29sZWFuIHByZWZQYWdlKSB7Ci0JCWRpc3BsYXlQcmVmZXJlbmNlc18gPSBkaXNwbGF5UHJlZmVyZW5jZXM7Ci0JCXByZWZlcmVuY2VzUGFnZV8gPSBwcmVmUGFnZTsKLQkJaW5pdEltYWdlUmVnaXN0cnkoKTsKLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JfQotCQotCXByaXZhdGUgQ29tcG9zaXRlIHNlcnZpY2VDb21wb3NpdGVfOwotCQotCS8qKgotCSAqIFJ1biB0aGlzIFNlcnZlcldpemFyZFdpZGdldCwgd2hpY2ggdmFsaWRhdGVzIHRoZSBlbnRyeSBmaWVsZCB2YWx1ZXMuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQkKLQkJLy8gZG8gbWluaW1hbCBjaGVjayBoZXJlLCB0aGlzIGNhbGwgd2lsbCBkZXRlcm1pbmUgaWYgd2UgYXQgbGVhc3QKLQkJLy8gaGF2ZSBhICJ2YWxpZE9iamVjdFNlbGVjdGlvbl8iCi0JCWNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCk7Ci0JCQotCQlpZiAodmFsaWRPYmplY3RTZWxlY3Rpb25fKQotCQl7Ci0JCQlib29sZWFuIHJlZnJlc2hSdW50aW1lID0gKGdldFdlYlNlcnZpY2VTY2VuYXJpbygpICE9IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKTsgCi0JCQkKLQkJCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfIGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpCi0JCSAgICAgICB7Ci0JCQkJSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgbGF1bmNoYWJsZSA9IChJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSlvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJCWNhbGxPYmplY3RUcmFuc2Zvcm1hdGlvbihsYXVuY2hhYmxlLmdldE9iamVjdFNlbGVjdGlvbigpLCBsYXVuY2hhYmxlLmdldFByb2plY3QoKSwgbGF1bmNoYWJsZS5nZXRDb21wb25lbnROYW1lKCksIHJlZnJlc2hSdW50aW1lKTsJCQkJCQkJCQotCQkgICAgICAgfQotCQkJZWxzZSAKLQkJCXsKLQkJCQlJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHdpZGdldCA9IChJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KW9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQkJY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKHdpZGdldC5nZXRPYmplY3RTZWxlY3Rpb24oKSwgd2lkZ2V0LmdldFByb2plY3QoKSwgd2lkZ2V0LmdldENvbXBvbmVudE5hbWUoKSwgcmVmcmVzaFJ1bnRpbWUpOwotCQkgICAgfQkKLQkJfQotCQllbHNlCi0JCQlzZXRPYmplY3RTZWxlY3Rpb24obnVsbCk7Ci0JCQotCQkvLyBkbyBmdWxsIHZhbGlkYXRpb24gYWZ0ZXIgYWxsIHRyYW5zZm9ybWF0aW9ucyBhbmQgY2FsY3VsYXRpb25zIGhhdmUgb2NjdXJyZWQKLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsJCQotCX0KLQkKLQkvKioKLQkgKiBQYWNrIHRoaXMgd2lkZ2V0IGFuZCB0aGUgY2xpZW50LXNpZGUgd2lkZ2V0IGFzIHdlbGwuIAotCSAqLwotCXByaXZhdGUgdm9pZCBwYWNrU2VsZigpIHsKLQkJLy8gZG9uJ3QgbmVlZCB0byBjYWxsIHBhY2tJdCgpLCBzaW5jZSBjbGllbnRXaWRnZXRfIGhhcyBhIGNhbGxiYWNrIHRvIHBhY2tJdCgpIGFscmVhZHkuCi0JCWNsaWVudFdpZGdldF8ucGFja0l0KCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLklQYWNrYWJsZSNwYWNrSXQoKQotCSAqLwotCXB1YmxpYyB2b2lkIHBhY2tJdCgpIHsJCQotCQlncm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsKLQkJdXRpbHNfLmhvcml6b250YWxSZXNpemUoZ3JvdXBDb21wb3NpdGVfLmdldFNoZWxsKCksIGdyb3VwQ29tcG9zaXRlXywgVUlVdGlscy5ERUZBVUxUX1BBRERJTkcpOwotCX0KLQkKLQlwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LAotCQkJTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpIHsKLQkJCQkKLQkJc3RhdHVzTGlzdGVuZXJfID0gc3RhdHVzTGlzdGVuZXI7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKHBhcmVudCwgSU5GT1BPUF9XU1dTQ0VOX1BBR0UpOwotCQkKLQkJQ29tcG9zaXRlIHR5cGVDb21wb3NpdGUgPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKHBhcmVudCwgMyk7Ci0KLQkJd2Vic2VydmljZVR5cGVfID0gdXRpbHNfLmNyZWF0ZUNvbWJvKHR5cGVDb21wb3NpdGUsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VUWVBFLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ09NQk9fVFlQRSwKLQkJCQlJTkZPUE9QX1dTV1NDRU5fQ09NQk9fU0VSVklDRVRZUEUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSCi0JCQkJCQl8IFNXVC5SRUFEX09OTFkpOwotCQlHcmlkRGF0YSBnZGF0YTEgPSAoR3JpZERhdGEpIHdlYnNlcnZpY2VUeXBlXy5nZXRMYXlvdXREYXRhKCk7Ci0JCWdkYXRhMS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXdlYnNlcnZpY2VUeXBlXy5zZXRMYXlvdXREYXRhKGdkYXRhMSk7Ci0JCQotCQl3ZWJzZXJ2aWNlVHlwZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkge30KLQkJCQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCVN0cmluZyBvbGRUeXBlSWQgPSBpZHNfLmdldFR5cGVJZCgpOwotCQkJCWludCBjdXJyZW50U2VsZWN0aW9uSWR4ID0gd2Vic2VydmljZVR5cGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRUeXBlSWQgPSBsYWJlbElkc18uZ2V0SWRzXygpW2N1cnJlbnRTZWxlY3Rpb25JZHhdOwotCQkJCWlmICghb2xkVHlwZUlkLmVxdWFscyhjdXJyZW50VHlwZUlkKSkgewkJCQkJCi0JCQkJCWlkc18uc2V0VHlwZUlkKGN1cnJlbnRUeXBlSWQpOwotCQkJCQkKLQkJCQkJLy8gZG9uJ3QgbmVlZCB0byByZWZyZXNoIHJ1bnRpbWUgb3IgdmFsaWRhdGUgZmllbGRzIGlmIHdlIGFyZSBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLCBqdXN0IHJldHVybgotCQkJCQlpZiAocHJlZmVyZW5jZXNQYWdlXykKLQkJCQkJCXJldHVybjsKLQkJCQkJCQotCQkJCQlpbnQgb2xkU2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQob2xkVHlwZUlkKTsKLQkJCQkJaW50IGN1cnJlbnRTY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZChjdXJyZW50VHlwZUlkKTsKLQotCQkJICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9IGdldFNlbGVjdGlvbldpZGdldCgpOwotCQkJCQkvLyBjaGFuZ2UgdGhlIGxhYmVsIGZvciB0aGUgc2VydmljZQotCQkJCQkvLyBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIGJhc2VkIG9uIHRoZSB3ZWIgc2VydmljZSB0eXBlCi0JCQkJCWhhbmRsZVR5cGVDaGFuZ2UoKTsJCQkJCQotCi0JCQkJCS8vIEFmdGVyIGJ1ZyAxNTk5MTEsIHdlIHdpbGwgbm90IHJlZnJlc2ggdGhlIHJ1bnRpbWUgaW4gVE9QRE9XTiBzY2VuYXJpbyB1bmxlc3Mgd2UgYWJzb2x1dGVseQotCQkJCQkvLyBoYXZlIHRvLiAgVGhlcmVmb3JlLCBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gYW5vdGhlciBzY2VuYXJpbyB0eXBlLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIAotCQkJCQkvLyBjdXJyZW50IHNlbGVjdGlvbnMgYXJlIHZhbGlkIGZvciB0aGlzIFRPUERPV04gc2NlbmFyaW8sIGlmIG5vdCwgdHJ5IHRvIHBpY2sgYSBtb3JlIHN1aXRhYmxlIAotCQkJCQkvLyBydW50aW1lLgotCQkJCQlpZiAoY3VycmVudFNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKSB7Ci0JCQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVM7Ci0JCQkJCQkKLQkJCQkJCS8vIHRoaXMgd2lsbCBmb3JjZSBhIHJlZnJlc2ggdGhlIG5leHQgdGltZSB0aGUgd3NkbCBpcyBjaGFuZ2VkCi0JCQkJCQlmb3JjZVJlZnJlc2hSdW50aW1lID0gIWNoZWNrRXJyb3JTdGF0dXMoKS5pc09LKCk7Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCS8vaWYgdGhlIHdlYiBzZXJ2aWNlIHR5cGUgY2hhbmdlIGlzIGZyb20gb25lIHRvcC1kb3duIHR5cGUgdG8gYW5vdGhlcgotCQkJCQkvL3RvcC1kb3duIHR5cGUgbGVhdmUgdGhlIG9iamVjdCBzZWxlY3Rpb24gZmllbGQgaW4gdGFjdCBhbmQgcmVmcmVzaAotCQkJCQkvL3RoZSBzZXJ2ZXIvcnVudGltZSBwcm9qZWN0IGRlZmF1bHRpbmcuCi0JCQkJCS8vT3RoZXJ3aXNlIGNsZWFyIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZpZWxkIHNpbmNlIGl0J3MgdmFsdWUgaXMgbm90IHZhbGlkIGFueW1vcmUKLQkJCQkJaWYgKG9sZFNjZW5hcmlvPT1XZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTiAmJiBjdXJyZW50U2NlbmFyaW89PVdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQkJCQkJCQotCQkJCQl7Ci0JCQkJCQkvLyBpZiBzd2l0Y2hpbmcgZnJvbSBvbmUgVE9QRE9XTiBzY2VuYXJpbyB0byBhbm90aGVyIFRPUERPV04gc2NlbmFyaW8gYW5kCi0JCQkJCQkvLyB3ZSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGN1cnJlbnQgcnVudGltZSBzZWxlY3Rpb24gaXMgbm90IHN1aXRhYmxlLCB3ZSAKLQkJCQkJCS8vIGNhbiByZWZyZXNoIHRoZSBydW50aW1lIG5vdyAoZG9uJ3QgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0aW1lIHRoZQotCQkJCQkJLy8gd3NkbCBpcyBjaGFuZ2VkKS4KLQkJCQkJCWlmIChmb3JjZVJlZnJlc2hSdW50aW1lKSB7Ci0JCQkJCQkJcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJCQkJCQlmb3JjZVJlZnJlc2hSdW50aW1lID0gZmFsc2U7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQkvL2NsZWFyIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZpZWxkCi0JCQkJCQkvLyBzZXJ2aWNlSW1wbCBtYXkgYmUgbnVsbCBpZiBvbiB0aGUgcHJlZmVyZW5jZXMgcGFnZQotCQkJCQkJaWYgKHNlcnZpY2VJbXBsXyAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCXNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJCQkJCXNlcnZpY2VJbXBsXy5zZXRUZXh0KCIiKTsKLQkJCQkJCQlzZXRPYmplY3RTZWxlY3Rpb24obnVsbCk7Ci0JCQkJCQkJc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJCQl9CQkJCQkJICAgCi0JCQkJCX0JCi0JCQkJCS8vcmVzdG9yZSB3aWRnZXQgdmFsdWVzLCBzZXJ2aWNlSW1wbCBtYXkgYmUgbnVsbCBpZiBvbiB0aGUgcHJlZmVyZW5jZXMgcGFnZQotCQkJCQlpZiAoc2VydmljZUltcGxfICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyB3ZWJTZXJ2aWNlVHlwZUlEPSBudWxsOwotCQkJCQkJICAgaWYgKGlkc18gIT0gbnVsbCkKLQkJCQkJCQkgICB3ZWJTZXJ2aWNlVHlwZUlEID0gaWRzXy5nZXRUeXBlSWQoKTsKLQkJCQkJCQlzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCQkJCQlTdHJpbmcgY3VycmVudGx5U2VsZWN0ZWRWYWx1ZSA9IHNlcnZpY2VJbXBsXy5nZXRUZXh0KCk7Ci0JCQkJCQkJc2VydmljZUltcGxfLnJlbW92ZUFsbCgpOwotCQkJCQkJCWlmIChjdXJyZW50bHlTZWxlY3RlZFZhbHVlICE9IG51bGwpCi0JCQkJCQkJCXNlcnZpY2VJbXBsXy5zZXRUZXh0KGN1cnJlbnRseVNlbGVjdGVkVmFsdWUpOwotCQkJCQkJCXNlcnZpY2VJbXBsXy5yZXN0b3JlV2lkZ2V0SGlzdG9yeSh3ZWJTZXJ2aWNlVHlwZUlEKTsKLQkJCQkJCQlzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQotCQkJCQl9Ci0KLQkJCSAgIHZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCQkJICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwkJCSAgIAotCQkJCQkKLQkJCX0KLQkJICB9Ci0JCQkKLQkJfSk7Ci0JCQotCQkvLyBDcmVhdGUgdGV4dCBmaWVsZCBhbmQgYnJvd3NlIGZvciBvYmplY3Qgc2VsZWN0aW9uIGlmIG5vdCBvbiBwcmVmZXJlbmNlcyBwYWdlCi0JCWlmICghcHJlZmVyZW5jZXNQYWdlXykKLQkJewotCQkJLy90ZXh0IG9mIHRoaXMgbGFiZWwgaXMgYmFzZWQgb24gdGhlIHdlYiBzZXJ2aWNlIHR5cGUgc2VsZWN0ZWQgaW4gd2Vic2VydmljZVR5cGVfIGNvbWJvCi0JCQlzZXJ2aWNlTGFiZWxfID0gbmV3IExhYmVsKCB0eXBlQ29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0JCQlzZXJ2aWNlTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VJTVBMKTsKLQkJCXNlcnZpY2VMYWJlbF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEwpOwotCi0JCQlzZXJ2aWNlSW1wbF8gPSBuZXcgQ29tYm9XaXRoSGlzdG9yeSh0eXBlQ29tcG9zaXRlLCBTV1QuTEVGVCB8IFNXVC5CT1JERVIsIFdTVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREaWFsb2dTZXR0aW5ncygpKTsKLQkJCUdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0JCQlncmlkZGF0YS53aWR0aEhpbnQgPSAyMjU7Ci0JCQlzZXJ2aWNlSW1wbF8uc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLQkJCXNlcnZpY2VJbXBsXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1RFWFRfSU1QTCk7Ci0JCQl1dGlsc18uY3JlYXRlSW5mb1BvcChzZXJ2aWNlSW1wbF8sIElORk9QT1BfV1NXU0NFTl9URVhUX1NFUlZJQ0VfSU1QTCk7Ci0JCQkKLQkJCW9iamVjdE1vZGlmeUxpc3RlbmVyXyA9IG5ldyBNb2RpZnlMaXN0ZW5lcigpewotCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJCSAgICBpZiAoc2VydmljZUltcGxfLmdldFRleHQoKS5pbmRleE9mKCc6JykgPiAwKSB7Ci0JCQkJICAgICAgICB0aW1lcl8gPSBUaW1lci5uZXdJbnN0YW5jZSh0aW1lcl8sIERpc3BsYXkuZ2V0Q3VycmVudCgpLCBTZXJ2ZXJXaXphcmRXaWRnZXQudGhpcyk7Ci0JCQkJICAgICAgICB0aW1lcl8uc3RhcnRUaW1lcigpOwotCQkJCSAgICB9Ci0JCQkJICAgIGVsc2UKLQkJCQkgICAgICAgIHJ1bigpOwotCQkJCX0KLQkJCX07Ci0JCQkKLQkJCXNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJc2VydmljZUltcGxfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAluZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCQl7Ci0JCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQkJCWludCBpbmRleCA9IHNlcnZpY2VJbXBsXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotCQkJCQkJc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJICAgICAgIAlzZXJ2aWNlSW1wbF8uc2V0VGV4dChzZXJ2aWNlSW1wbF8uZ2V0SXRlbShpbmRleCkpOwotCQkJCSAgICAgICAgc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJfQotCQkJfSk7Ci0JCQlicm93c2VCdXR0b25fID0gdXRpbHNfLmNyZWF0ZVB1c2hCdXR0b24odHlwZUNvbXBvc2l0ZSwKLQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0UsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fQlVUVE9OX0JST1dTRV9JTVBMLCBudWxsKTsKLQotCQkJYnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VydmljZUltcGxCcm93c2VMaXN0ZW5lcigpKTsKLQkJfQotCQkvLyBTZXJ2aWNlIExpZmVjeWNsZSBzZWN0aW9uIC0gc2NhbGVzIGZvciBzZXJ2aWNlICYgY2xpZW50LCBncmFwaGljCi0JCQotCQlncm91cENvbXBvc2l0ZV8gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdjbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2NsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWdjbGF5b3V0Lmhvcml6b250YWxTcGFjaW5nPTA7CQkKLQkJZ2NsYXlvdXQubWFyZ2luSGVpZ2h0PTA7CQkKLQkJZ2NsYXlvdXQubWFyZ2luQm90dG9tPTU7Ci0JCWdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXQoIGdjbGF5b3V0ICk7Ci0JICAgIEdyaWREYXRhIGdjR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkJFR0lOTklORywgdHJ1ZSwgdHJ1ZSk7Ci0JICAgIGdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKGdjR3JpZERhdGEpOwkJCi0JICAgIAotCSAgICBncm91cENvbXBvc2l0ZV8uYWRkQ29udHJvbExpc3RlbmVyKG5ldyBDb250cm9sTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBjb250cm9sTW92ZWQoQ29udHJvbEV2ZW50IGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQkJCi0JCQl9Ci0JCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZSkgewotCQkJCWdyb3VwQ29tcG9zaXRlXy5wYWNrKHRydWUpOwkJCQkKLQkJCX0KLQkJfSk7Ci0JICAgIAotCQlzZXJ2aWNlQ29tcG9zaXRlXyA9ICBuZXcgQ29tcG9zaXRlKGdyb3VwQ29tcG9zaXRlXywgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdyaWRsYXlvdXQgICA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JICAgIGdyaWRsYXlvdXQubnVtQ29sdW1ucyAgID0gMjsKLQkgICAgZ3JpZGxheW91dC5ob3Jpem9udGFsU3BhY2luZz0wOwotCSAgICBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodD0wOwotCSAgICBzZXJ2aWNlQ29tcG9zaXRlXy5zZXRMYXlvdXQoIGdyaWRsYXlvdXQgKTsKLQkgICAgR3JpZERhdGEgc2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotCSAgICBzZXJ2aWNlQ29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKHNjR3JpZERhdGEpOyAgICAKLQkgICAgCi0JCXNlcnZpY2VDb21wb3NpdGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCi0JCQotCQlzZXJ2aWNlU2NhbGVfID0gbmV3IFNjYWxlKHNlcnZpY2VDb21wb3NpdGVfLCBTV1QuVkVSVElDQUwgfCBTV1QuQk9SREVSKTsKLQkgICAgdXRpbHNfLmNyZWF0ZUluZm9Qb3Aoc2VydmljZVNjYWxlXywgSU5GT1BPUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0UpOwotCQlzZXJ2aWNlU2NhbGVfLnNldE1pbmltdW0oMCk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0TWF4aW11bSg2KTsKLQkJc2VydmljZVNjYWxlXy5zZXRJbmNyZW1lbnQoMSk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0UGFnZUluY3JlbWVudCgxKTsKLQkJc2VydmljZVNjYWxlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzY2FsZVNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJc2VydmljZVNjYWxlXy5zZXRTZWxlY3Rpb24oZ2V0U2VydmljZUdlbmVyYXRpb24oKSk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFKTsKLQkJCi0JCUFjY2Vzc2libGUgYWNjZXNzaWJsZVNjYWxlID0gc2VydmljZVNjYWxlXy5nZXRBY2Nlc3NpYmxlKCk7Ci0JCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIobmV3IEFjY2Vzc2libGVBZGFwdGVyKCl7Ci0JCQkvLwlyZXR1cm4gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgd2hhdCB0byBkbyB3aXRoIHRoZSBzbGlkZXIKLQkJCS8vICB0aGlzIGlzIHJlYWQgYnkgdGhlIHNjcmVlbiByZWFkZXIgd2hlbiB0aGUgc2xpZGVyIGZpcnN0IGdldHMgZm9jdXMKLQkJCXB1YmxpYyB2b2lkIGdldE5hbWUoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRTsJCQkKLQkJCX0JCQkKLQkJfSk7Ci0JCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIoKXsKLQkJCS8vIHJldHVybiBhIG1lYW5pbmdmdWwgc3RyaW5nIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIKLQkJCS8vIGF0dGVtcHRzIHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc2VydmljZSBzY2FsZQotCQkJcHVibGljIHZvaWQgZ2V0VmFsdWUoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQkJaW50IHNlbGVjdGlvbiA9IHNlcnZpY2VTY2FsZV8uZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkJCQljYXNlIDA6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU47Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNToJCQkJCQotCQkJCWNhc2UgNjoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0JCQkJCQkJCQotCQkJfQotCQl9KTsJCi0JCQotCQlHcmlkRGF0YSBsYXlvdXREYXRhMSA9IG5ldyBHcmlkRGF0YSgpOwotCQlsYXlvdXREYXRhMS5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5DRU5URVI7Ci0JCWxheW91dERhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQkJUmVjdGFuZ2xlIHNjYWxlUiA9IChpbWFnZVJlZ18uZ2V0KElDT05fU0NBTEVfQkdfMCkpLmdldEJvdW5kcygpOwotCQlsYXlvdXREYXRhMS5oZWlnaHRIaW50PXNjYWxlUi5oZWlnaHQ7Ci0JCWxheW91dERhdGExLndpZHRoSGludD1zY2FsZVIud2lkdGgrMTsKLQkJc2VydmljZVNjYWxlXy5zZXRMYXlvdXREYXRhKGxheW91dERhdGExKTsJCQotCQkKLQkJdG9wb2xvZ3lTcG90XyA9IG5ldyBMYWJlbChzZXJ2aWNlQ29tcG9zaXRlXywgU1dULkJPUkRFUiB8IFNXVC5UT1AgKTsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOwotCQl0b3BvbG9neVNwb3RfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCQotCQlHcmlkRGF0YSBsYXlvdXREYXRhMiA9IG5ldyBHcmlkRGF0YSgpOwkJCi0JCWxheW91dERhdGEyLmhvcml6b250YWxBbGlnbm1lbnQ9U1dULkJFR0lOTklORzsJCQkJCi0JCWxheW91dERhdGEyLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQkJUmVjdGFuZ2xlIHRvcFIgPSAoaW1hZ2VSZWdfLmdldChHUkFQSElDX1NFUlZJQ0VfMCkpLmdldEJvdW5kcygpOwotCQlsYXlvdXREYXRhMi5oZWlnaHRIaW50PXRvcFIuaGVpZ2h0OwotCQlsYXlvdXREYXRhMi53aWR0aEhpbnQ9dG9wUi53aWR0aDsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRMYXlvdXREYXRhKGxheW91dERhdGEyKTsJCQotCQkJCQotCQlzZXRHcmFwaGljcyhnZXRTZXJ2aWNlR2VuZXJhdGlvbigpKTsKLQkJCi0JCWhDb21wU2VydmljZV8gPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKGdyb3VwQ29tcG9zaXRlXywgMSk7Ci0JCQotCQlMYWJlbCBzZXJ2aWNlRGV0YWlsc0xhYmVsID0gbmV3IExhYmVsKGhDb21wU2VydmljZV8sIFNXVC5OT05FKTsKLQkJc2VydmljZURldGFpbHNMYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZKTsKLQkJCi0JCWhMaW5rU2VydmljZVNlcnZlcl89IG5ldyBIeXBlcmxpbmsoaENvbXBTZXJ2aWNlXywgU1dULk5VTEwpOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua1NlcnZpY2VTZXJ2ZXJfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUik7Ci0JCWhMaW5rU2VydmljZVNlcnZlcl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19URVhUX1NFUlZFUik7Ci0JCWhMaW5rU2VydmljZVNlcnZlcl8uYWRkSHlwZXJsaW5rTGlzdGVuZXIobmV3IElIeXBlcmxpbmtMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkJCi0JCQkJbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhmYWxzZSwgdHJ1ZSk7CQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCi0JCWhMaW5rU2VydmljZVJ1bnRpbWVfID0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1JVTlRJTUUpOwotCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRSk7Ci0JCWhMaW5rU2VydmljZVJ1bnRpbWVfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJCQkJCWxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coZmFsc2UpOwotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCQkKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlwcm9qZWN0RGlhbG9nXyA9IG5ldyBQcm9qZWN0U2VsZWN0aW9uRGlhbG9nKHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCAKLQkJCQluZXcgUGFnZUluZm8oQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9QUk9KRUNUX1NFVFRJTkdTLCAiIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgCQkJCQkJewkKLSAgCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAJCQkJCQkJewkgIAkJCQkJCSAKLSAgCQkJCQkJCSAgIHJldHVybiBuZXcgUHJvamVjdFNlbGVjdGlvbldpZGdldCgpOwotICAJCQkJCQkJfQotICAJCQkJCQl9KSk7Ci0JCQotCQloTGlua1NlcnZpY2VQcm9qZWN0Xz0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uYWRkSHlwZXJsaW5rTGlzdGVuZXIobmV3IElIeXBlcmxpbmtMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsKLQkJCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7CQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCQkKLQkJaExpbmtTZXJ2aWNlRUFSXz0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQkJaExpbmtTZXJ2aWNlRUFSXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NFUlZJQ0VQUk9KRUNUX0xJTkspOwotCQloTGlua1NlcnZpY2VFQVJfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJbGF1bmNoUHJvamVjdERpYWxvZygpOwkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwkJCi0KLQkJaExpbmtTZXJ2aWNlU2VydmVyXy5zZXRUZXh0KFNFUlZJQ0VfU0VSVkVSX1BSRUZJWCk7IAotCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUZXh0KFNFUlZJQ0VfUlVOVElNRV9QUkVGSVgpOwotCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5zZXRUZXh0KFNFUlZJQ0VfUFJPSkVDVF9QUkVGSVgpOwotCQloTGlua1NlcnZpY2VFQVJfLnNldFRleHQoU0VSVklDRV9FQVJfUFJFRklYKTsKLQkJCi0JCUh5cGVybGlua0dyb3VwIHNlcnZlclJ1bnRpbWVHcm91cCA9IG5ldyBIeXBlcmxpbmtHcm91cChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZVNlcnZlcl8pOwotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZVJ1bnRpbWVfKTsKLQkJc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua1NlcnZpY2VQcm9qZWN0Xyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtTZXJ2aWNlRUFSXyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5zZXRIeXBlcmxpbmtVbmRlcmxpbmVNb2RlKEh5cGVybGlua1NldHRpbmdzLlVOREVSTElORV9BTFdBWVMpOwotICAgIAotCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwkJCi0JCQotCQkvLyBBZGQgY2xpZW50IHdpZGdldHMuLi4KLQkJY2xpZW50V2lkZ2V0XyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldChmYWxzZSk7Ci0JICAgIGNsaWVudFdpZGdldF8uYWRkQ29udHJvbHMocGFyZW50LCBzdGF0dXNMaXN0ZW5lciApOwotCSAgICBjbGllbnRXaWRnZXRfLnNldFBhY2thYmxlKHRoaXMpOwotCSAgICBjbGllbnRXaWRnZXRfLmVuYWJsZUNsaWVudFNsaWRlcihzZXJ2aWNlU2NhbGVfLmdldFNlbGVjdGlvbigpPD1TY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpOwotCQkKLQkJLy8gQWR2YW5jZWQgYnV0dG9ucyBzZWN0aW9uCi0JCXV0aWxzXy5jcmVhdGVIb3Jpem9udGFsU2VwYXJhdG9yKHBhcmVudCwgMyk7Ci0JCQotCQlDb21wb3NpdGUgYWR2YW5jZWRCdXR0b25QYW5lbCA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJCi0JCXB1Ymxpc2hCdXR0b25fID0gdXRpbHNfLmNyZWF0ZUNoZWNrYm94KGFkdmFuY2VkQnV0dG9uUGFuZWwsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU1dTQ0VOX1BVQkxJU0gsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTEFVTkNIX1dTLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTEFVTkNIX1dTKTsJCQotCQltb25pdG9yQnV0dG9uXyA9IHV0aWxzXy5jcmVhdGVDaGVja2JveChhZHZhbmNlZEJ1dHRvblBhbmVsLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5DSEVDS0JPWF9NT05JVE9SX1dFQlNFUlZJQ0UsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFKTsKLQotCQlpZiAoZGlzcGxheVByZWZlcmVuY2VzXyAmJiBnZXRSZXNvdXJjZUNvbnRleHQoKS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwkJCQotCQkJQ29tcG9zaXRlIHByZWZCdXR0b25QYW5lbCA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJCW92ZXJ3cml0ZUJ1dHRvbl8gPSB1dGlsc18uY3JlYXRlQ2hlY2tib3gocHJlZkJ1dHRvblBhbmVsLAotCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVMsIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUpOwotCQkJb3ZlcndyaXRlQnV0dG9uXy5zZXRTZWxlY3Rpb24oZ2V0UmVzb3VyY2VDb250ZXh0KCkKLQkJCQkJLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotCQkJb3ZlcndyaXRlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJCWdldFJlc291cmNlQ29udGV4dCgpLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChvdmVyd3JpdGVCdXR0b25fLmdldFNlbGVjdGlvbigpKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCi0JCXJldHVybiB0aGlzOwotCX0JCi0JCi0JcHJpdmF0ZSB2b2lkIGxhdW5jaFByb2plY3REaWFsb2coKQotCXsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgY3VycmVudEVhclByb2plY3ROYW1lID0gZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBjdXJyZW50UHJvamVjdFR5cGUgPSBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpOwotCQlib29sZWFuIGN1cnJlbnROZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJCi0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3ROYW1lKGN1cnJlbnRQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldEVhclByb2plY3ROYW1lKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3RDb21wb25lbnRUeXBlKGN1cnJlbnRQcm9qZWN0VHlwZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldE5lZWRFQVIoY3VycmVudE5lZWRFYXIpOwotCQkKLQkJaW50IHN0YXR1cyA9IHByb2plY3REaWFsb2dfLm9wZW4oKTsKLQkJaWYgKHN0YXR1cyA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCVN0cmluZyBuZXdQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldFByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3RWFyUHJvamVjdE5hbWUgPSBwcm9qZWN0RGlhbG9nXy5nZXRFYXJQcm9qZWN0TmFtZSgpOwotCQkJU3RyaW5nIG5ld1Byb2plY3RUeXBlID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdENvbXBvbmVudFR5cGUoKTsKLQkJCWJvb2xlYW4gbmV3TmVlZEVhciA9IHByb2plY3REaWFsb2dfLmdldE5lZWRFQVIoKTsJCi0JCQkKLQkJCS8vVXBkYXRlIHByb2plY3Qgc2V0dGluZ3MgYW5kIHZhbGlkYXRlIHBhZ2UgaWYgc2VsZWN0aW9ucyBjaGFuZ2VkLgotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3RWFyUHJvamVjdE5hbWUuZXF1YWxzKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSkKLQkJCQkJfHwgIW5ld1Byb2plY3RUeXBlLmVxdWFscyhjdXJyZW50UHJvamVjdFR5cGUpCi0JCQkJCXx8IG5ld05lZWRFYXIgIT0gY3VycmVudE5lZWRFYXIpIHsKLQkJCQlzZXRTZXJ2aWNlUHJvamVjdE5hbWUobmV3UHJvamVjdE5hbWUpOwotCQkJCXNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShuZXdFYXJQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0U2VydmljZUNvbXBvbmVudFR5cGUobmV3UHJvamVjdFR5cGUpOwotCQkJCXNldFNlcnZpY2VOZWVkRUFSKG5ld05lZWRFYXIpOwkJCQkKLQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gKG5ldyBWYWxpZGF0aW9uVXRpbHMoKSkuZ2V0TmV3VmFsaWRhdGlvblN0YXRlKHZhbGlkYXRpb25TdGF0ZV8sIFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLQkJCX0KLQkJCQotCQkJLypjaGVjayB0byBzZWUgaWYgdGV4dCBoYXMgY2hhbmdlZCBmb3IgcHJvamVjdCBhbmQgRUFSCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5wYWNrKHRydWUpOwotCQkJCXBhY2tTZWxmKCk7CSAKLQkJCX0KLQkJCWlmICghbmV3RWFyUHJvamVjdE5hbWUuZXF1YWxzKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSkpCi0JCQl7Ci0JCQkJaExpbmtTZXJ2aWNlRUFSXy5wYWNrKHRydWUpOwotCQkJCXBhY2tTZWxmKCk7CSAgCQkJCQkKLQkJCX0KLQkJfQotCX0KLQkJCi0JcHJpdmF0ZSB2b2lkIGxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coYm9vbGVhbiBjbGllbnRDb250ZXh0KQotCXsKLQkJbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhjbGllbnRDb250ZXh0LCBmYWxzZSk7Ci0JfQotCQkKLQlwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQsIGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpIAkKLQl7CQotCQlieXRlIG1vZGUgPSBjbGllbnRDb250ZXh0ID8gKGJ5dGUpMSA6IChieXRlKTA7Ci0JCQotCQkvL1RPRE86IGp2aCAtIGludmVzdGlnYXRlIC0gZG9uJ3QgdGhpbmsgajJlZSB2ZXJzaW9uIHNob3VsZG4ndCBiZSBoYXJkIGNvZGVkIChsYXN0IHBhcm0pIAotCQkvLyAgcXVlc3Rpb24gLSB3aGVyZSB0byBwaWNrIGl0IHVwIGZyb20/Ci0JCS8vUmVtZW1iZXIgdGhlIGN1cnJlbnQgdmFsdWVzCi0JCVR5cGVSdW50aW1lU2VydmVyIGN1cnJlbnRTZXJ2aWNlVFJTID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCUlXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLQkJUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyByc3NkID0gbmV3IFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coCi0JCQkJd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIG1vZGUsIGN1cnJlbnRTZXJ2aWNlVFJTLCAiMTQiKTsJCi0JCXJzc2Quc2V0U2VsZWN0U2VydmVyRmlyc3Qoc2VsZWN0U2VydmVyRmlyc3QpOwkJCi0JCWludCByZXN1bHQgPSByc3NkLm9wZW4oKTsJCQotCQlpZiAocmVzdWx0ID09IFdpbmRvdy5PSykKLQkJewotCQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgbmV3U2VydmljZVRSUyA9IHJzc2QuZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJCWlmICghY3VycmVudFNlcnZpY2VUUlMuZXF1YWxzKG5ld1NlcnZpY2VUUlMpKQotCQkJewotCQkJCXNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihuZXdTZXJ2aWNlVFJTKTsJCi0JCQkJcmVmcmVzaENsaWVudFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsJCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUyk7Ci0JCQkJY2xpZW50V2lkZ2V0Xy5zZXRWYWxpZGF0aW9uU3RhdGUoVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy9SZXZhbGlkYXRlIHRoZSBwYWdlIHNpbmNlIHNlcnZlci9ydW50aW1lIHNlbGVjdGlvbnMgY2hhbmdlZC4KLQkJCX0KLQkJCQotCQl9CQkKLQl9CQotCQotCXB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykgewotCQljbGllbnRXaWRnZXRfLnNldFR5cGVSdW50aW1lU2VydmVyKCBpZHMgKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKSB7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChCb29sZWFuIGluc3RhbGwpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBpbnN0YWxsICk7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRJbnN0YWxsQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFN0YXJ0Q2xpZW50KEJvb2xlYW4gc3RhcnRDbGllbnQpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRTdGFydENsaWVudCggc3RhcnRDbGllbnQgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRTdGFydENsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUZXN0Q2xpZW50KEJvb2xlYW4gdGVzdENsaWVudCkgewotCQljbGllbnRXaWRnZXRfLnNldFRlc3RDbGllbnQoIHRlc3RDbGllbnQgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFRlc3RDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcENsaWVudChib29sZWFuIGRldmVsb3ApIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXREZXZlbG9wQ2xpZW50KCBkZXZlbG9wICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXREZXZlbG9wQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlQ2xpZW50KGJvb2xlYW4gYXNzZW1ibGUpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRBc3NlbWJsZUNsaWVudCggYXNzZW1ibGUgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRBc3NlbWJsZUNsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3kpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXREZXBsb3lDbGllbnQoIGRlcGxveSApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveUNsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXREZXBsb3lDbGllbnQoKTsKLQl9Ci0KLXByaXZhdGUgdm9pZCBoYW5kbGVUeXBlQ2hhbmdlKCkKLQl7Ci0JCWlmICghcHJlZmVyZW5jZXNQYWdlXykgewotCQkgICBpbnQgc2NlbmFyaW8gPSBnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKTsKLQkJICAgCi0JCSAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgIHsKLQkJCSAgc2VydmljZUxhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFSU1QTCk7Ci0JCSAgIH0KLQkJICAgZWxzZSBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgIHsKLQkJCSAgIHNlcnZpY2VMYWJlbF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRURFRik7Ci0JCSAgIH0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpIHsKLQkJTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIKLQkJCQkuZ2V0U2VydmljZVR5cGVMYWJlbHMoKTsKLQkJLy8gcnNrcmVnCi0JCWludCBzZWxlY3Rpb24gPSAwOwotCQlTdHJpbmdbXSBzZXJ2aWNlSWRzID0gbGFiZWxJZHMuZ2V0SWRzXygpOwotCQlTdHJpbmcgc2VsZWN0ZWRJZCA9IGlkcy5nZXRUeXBlSWQoKTsKLQotCQl3ZWJzZXJ2aWNlVHlwZV8uc2V0SXRlbXMobGFiZWxJZHMuZ2V0TGFiZWxzXygpKTsKLQotCQkvLyBOb3cgZmluZCB0aGUgc2VsZWN0ZWQgb25lLgotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2VydmljZUlkcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmIChzZWxlY3RlZElkLmVxdWFscyhzZXJ2aWNlSWRzW2luZGV4XSkpIHsKLQkJCQlzZWxlY3Rpb24gPSBpbmRleDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3ZWJzZXJ2aWNlVHlwZV8uc2VsZWN0KHNlbGVjdGlvbik7Ci0JCQotCQlpZHNfID0gaWRzOwotCQkKLQkJaWYgKGlkc18gIT0gbnVsbCkKLQkJewotCQkJU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUZXh0ID0gIiI7Ci0JCQlTdHJpbmcgc2VydmVySWQgPSBpZHNfLmdldFNlcnZlcklkKCk7Ci0JCQlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKT4wKQotCQkJewotCQkJICBzZXJ2aWNlU2VydmVyVGV4dCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0JCQl9Ci0JCQlTdHJpbmcgc2VydmljZVJ1bnRpbWVUZXh0ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChpZHNfLmdldFJ1bnRpbWVJZCgpKTsKLQkJCQotCQkJU3RyaW5nIGN1cnJlbnRTZXJ2ZXJUZXh0ID0gaExpbmtTZXJ2aWNlU2VydmVyXy5nZXRUZXh0KCk7Ci0JCQlTdHJpbmcgY3VycmVudFJ1bnRpbWVUZXh0ID0gaExpbmtTZXJ2aWNlUnVudGltZV8uZ2V0VGV4dCgpOwotCQkJU3RyaW5nIG5ld1NlcnZlclRleHQgPSBTRVJWSUNFX1NFUlZFUl9QUkVGSVggKyAiICIgKyBzZXJ2aWNlU2VydmVyVGV4dDsKLQkJCVN0cmluZyBuZXdSdW50aW1lVGV4dCA9IFNFUlZJQ0VfUlVOVElNRV9QUkVGSVggKyAiICIgKyBzZXJ2aWNlUnVudGltZVRleHQ7Ci0JCQloTGlua1NlcnZpY2VTZXJ2ZXJfLnNldFRleHQobmV3U2VydmVyVGV4dCk7Ci0JCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUZXh0KG5ld1J1bnRpbWVUZXh0KTsJCQotCQkJCi0JCQkvKmNoZWNrIHRvIHNlZSBpZiB0ZXh0IGhhcyBjaGFuZ2VkIGZvciBzZXJ2ZXIgb3IgcnVudGltZQotCQkJaWYgc28sIHJlcGFpbnQgbGlua3MgKi8KLQkJCWlmICghbmV3U2VydmVyVGV4dC5lcXVhbHMoY3VycmVudFNlcnZlclRleHQpKQotCQkJewotCQkJCWhMaW5rU2VydmljZVNlcnZlcl8ucGFjayh0cnVlKTsKLQkJCQlwYWNrU2VsZigpOwotCQkJfQkJCQotCQkJCi0JCQlpZiAoIW5ld1J1bnRpbWVUZXh0LmVxdWFscyhjdXJyZW50UnVudGltZVRleHQpKQotCQkJewotCQkJCWhMaW5rU2VydmljZVJ1bnRpbWVfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja1NlbGYoKTsKLQkJCX0gCi0JCX0JCQkJCi0JCWxhYmVsSWRzXyA9IGxhYmVsSWRzOwotCQloYW5kbGVUeXBlQ2hhbmdlKCk7Ci0JCQotCQlpZiAocHJvamVjdERpYWxvZ18gIT0gbnVsbCkKLQkJCXByb2plY3REaWFsb2dfLnNldFR5cGVSdW50aW1lU2VydmVyKGlkc18pOwotCQkKLQkJCi0JCS8vV2hlbiB0aGUgc2VydmVyIGNoYW5nZXMsIHRoZSBzdGF0ZSBvZiBuZWVkRWFyIGNvdWxkIGNoYW5nZS4KLQkJLy9JZiB0aGUgdGhlIHNlcnZlciBjaGFuZ2UgcmVzdWx0cyBpbiBhIGNoYW5nZSBpbiB0aGUgc3RhdGUgb2YgbmVlZEVhciwKLQkJLy91cGRhdGUgbmVlZEVhciBhbmQgc2VydmljZUVhclByb2plY3ROYW1lLgotCQlWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCWJvb2xlYW4gb2xkTmVlZEVhciA9IGdldFNlcnZpY2VOZWVkRUFSKCk7Ci0JCWJvb2xlYW4gc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXI7Ci0KLQkJaWYgKCFvbGROZWVkRWFyKQotCQl7Ci0JCQkvL0lmIGFuIEVBUiB3YXMgbm90IG5lZWRlZCBwcmV2aW91c2x5IGl0IGNvdWxkIGhhdmUgYmVlbiBiZWNhdXNlIG9mIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSBvciB0aGUgc2VydmVyLgotCQkJLy9JZiBpdCB3YXMgYmVjYXVzZSBvZiB0aGUgcHJvamVjdC9wcm9qZWN0IHR5cGUsIGNoYW5naW5nIHRoZSBzZXJ2ZXIgc2hvdWxkIGhhdmUgbm8gaW1wYWN0Ci0JCQkvL29uIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLgotCQkJc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB2dS5wcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpLCBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXNlcnZpY2VQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0gdHJ1ZTsKLQkJfQotCQkKLQkJLy9ib29sZWFuIHNlcnZpY2VQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0gdnUucHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSwgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKSk7Ci0JCWlmIChzZXJ2aWNlUHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcikKLQkJewotCQkJLy9Db3VsZCBub3QgcnVsZSBvdXQgbmVlZCBmb3IgYW4gRWFyIGZyb20gdGhlIHByb2plY3QvcHJvamVjdCB0eXBlIHNvIGNoYW5naW5nIHRoZSBzZXJ2ZXIKLQkJCS8vbWF5IGltcGFjdCB0aGUgbmVlZCBmb3IgYW4gRWFyLgotCi0JCQlib29sZWFuIGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIgPSB2dS5zZXJ2ZXJOZWVkc0VBUihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpKTsKLQkJCWlmIChvbGROZWVkRWFyICE9IGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIpCi0JCQl7Ci0JCQkJLy9VcGRhdGUgbmVlZEVhciBhbmQgc2VydmljZUVhclByb2plY3ROYW1lLgotCQkJCWlmIChjdXJyZW50U2VydmljZVNlcnZlck5lZWRzRWFyKQotCQkJCXsKLQkJCQkJLy9DYWxjdWxhdGUgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIHRoZSBFYXIgcHJvamVjdCBuYW1lCi0JCQkJCVN0cmluZyBlYXJQcm9qZWN0TmFtZSA9IERlZmF1bHRpbmdVdGlscy5nZXREZWZhdWx0RUFSUHJvamVjdE5hbWUoZ2V0U2VydmljZVByb2plY3ROYW1lKCkpOwotCQkJCQlzZXRTZXJ2aWNlTmVlZEVBUihjdXJyZW50U2VydmljZVNlcnZlck5lZWRzRWFyKTsKLQkJCQkJc2V0U2VydmljZUVhclByb2plY3ROYW1lKGVhclByb2plY3ROYW1lKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJc2V0U2VydmljZU5lZWRFQVIoY3VycmVudFNlcnZpY2VTZXJ2ZXJOZWVkc0Vhcik7Ci0JCQkJCXNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgiIik7CQkJCQkKLQkJCQl9Ci0JCQkJCi0JCQl9Ci0JCX0JCQotCX0KLQotCXB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSB7Ci0JCXJldHVybiBpZHNfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VHZW5lcmF0aW9uKGludCB2YWx1ZSkKLQl7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0U2VsZWN0aW9uKHZhbHVlKTsKLQkJc2V0R3JhcGhpY3ModmFsdWUpOwotCQkKLQkJLy9lbmFibGUgY2xpZW50IHdpZGdldCBiYXNlZCBvbiBzZXJ2aWNlIHNjYWxlIHNldHRpbmcKLQkJY2xpZW50V2lkZ2V0Xy5lbmFibGVDbGllbnRTbGlkZXIodmFsdWU8PVNjZW5hcmlvQ29udGV4dC5XU19TVEFSVCk7Ci0JCQotCQkvKmZvciBwb3B1cCBjYXNlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFVJIGlzIHJlZnJlc2hlZCBiYXNlZCBvbiAKLQkJY2hhbmdlcyB0byBkYXRhKi8KLQkJcGFja1NlbGYoKTsKLQl9CQotCi0JcHVibGljIGludCBnZXRTZXJ2aWNlR2VuZXJhdGlvbigpCi0JewotCQlyZXR1cm4gc2VydmljZVNjYWxlXy5nZXRTZWxlY3Rpb24oKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcFNlcnZpY2UoKSB7Ci0JCXJldHVybiBkZXZlbG9wU2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcFNlcnZpY2UoYm9vbGVhbiBkZXZlbG9wU2VydmljZSkgewotCQl0aGlzLmRldmVsb3BTZXJ2aWNlXyA9IGRldmVsb3BTZXJ2aWNlOwotCX0JCi0JCi0JcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVTZXJ2aWNlKCkgewotCQlyZXR1cm4gYXNzZW1ibGVTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZVNlcnZpY2UoYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2UpIHsKLQkJdGhpcy5hc3NlbWJsZVNlcnZpY2VfID0gYXNzZW1ibGVTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveVNlcnZpY2UoKSB7Ci0JCXJldHVybiBkZXBsb3lTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lTZXJ2aWNlKGJvb2xlYW4gZGVwbG95U2VydmljZSkgewotCQl0aGlzLmRlcGxveVNlcnZpY2VfID0gZGVwbG95U2VydmljZTsKLQl9Ci0JCi0JcHVibGljIEJvb2xlYW4gZ2V0U3RhcnRTZXJ2aWNlKCl7Ci0JCXJldHVybiBzdGFydFNlcnZpY2VfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotICAgICAgICBzdGFydFNlcnZpY2VfPXZhbHVlOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkgewotCQlyZXR1cm4gaW5zdGFsbFNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEluc3RhbGxTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLSAgICAgICAgaW5zdGFsbFNlcnZpY2VfPXZhbHVlOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgIG5ldyBCb29sZWFuKCB0ZXN0U2VydmljZV8uYm9vbGVhblZhbHVlKCkgfHwgY2xpZW50V2lkZ2V0Xy5nZXRUZXN0Q2xpZW50KCkuYm9vbGVhblZhbHVlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLSAgICAgICAgdGVzdFNlcnZpY2VfPSB2YWx1ZTsKLQl9Ci0JcHVibGljIEJvb2xlYW4gZ2V0TW9uaXRvclNlcnZpY2UoKSB7Ci0JCXJldHVybiBuZXcgQm9vbGVhbihtb25pdG9yQnV0dG9uXy5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TW9uaXRvclNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotCQltb25pdG9yQnV0dG9uXy5zZXRTZWxlY3Rpb24odmFsdWUuYm9vbGVhblZhbHVlKCkpOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFB1Ymxpc2hTZXJ2aWNlKCkgewkJCi0JCXJldHVybiBuZXcgQm9vbGVhbihwdWJsaXNoQnV0dG9uXy5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHVibGlzaFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotCQlwdWJsaXNoQnV0dG9uXy5zZXRTZWxlY3Rpb24oIHZhbHVlLmJvb2xlYW5WYWx1ZSgpICk7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpIHsKLQkJcmV0dXJuIG5ldyBCb29sZWFuKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKTsJCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldENsaWVudEdlbmVyYXRpb24oaW50IHZhbHVlKQotCXsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRHZW5lcmF0aW9uKHZhbHVlKTsKLQkJLypmb3IgcG9wdXAgY2FzZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBVSSBpcyByZWZyZXNoZWQgYmFzZWQgb24gCi0JCQljaGFuZ2VzIHRvIGRhdGEqLwotCQlwYWNrU2VsZigpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudEVhclByb2plY3ROYW1lKCkKLQl7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEVhclByb2plY3ROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdE5hbWUoKQotCXsKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UHJvamVjdE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIGludCBnZXRDbGllbnRHZW5lcmF0aW9uKCkKLQl7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEdlbmVyYXRpb24oKTsKLQl9CQotCi0JcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKSB7Ci0JCWlmIChyZXNvdXJjZUNvbnRleHRfID09IG51bGwpIHsKLQkJCXJlc291cmNlQ29udGV4dF8gPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkKLQkJCQkJLmdldFJlc291cmNlQ29udGV4dCgpOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUNvbnRleHRfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dChSZXNvdXJjZUNvbnRleHQgY29udGV4dCkgewotCQlyZXNvdXJjZUNvbnRleHRfID0gY29udGV4dDsKLQl9Ci0KLQlwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLQl7Ci0JCXJldHVybiBvYmplY3RTZWxlY3Rpb25fOwkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotCXsKLQkJb2JqZWN0U2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsKLQl9Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLQl7Ci0JCXJldHVybiBwYXJzZXJfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpCi0JewotCQlwYXJzZXJfID0gcGFyc2VyOwotCQljbGllbnRXaWRnZXRfLnNldFdlYlNlcnZpY2VzUGFyc2VyKHBhcnNlcik7Ci0JfQotCXB1YmxpYyB2b2lkIGV4dGVybmFsaXplKCkgewotCQlzdXBlci5leHRlcm5hbGl6ZSgpOwotCQlpZiAoIXByZWZlcmVuY2VzUGFnZV8pIHsKLQkJCSAgIFN0cmluZyB3ZWJTZXJ2aWNlVHlwZUlEPSBudWxsOwotCQkJICAgaWYgKGlkc18gIT0gbnVsbCkKLQkJCQkgICB3ZWJTZXJ2aWNlVHlwZUlEID0gaWRzXy5nZXRUeXBlSWQoKTsKLQkJCSAgIHNlcnZpY2VJbXBsXy5zdG9yZVdpZGdldEhpc3Rvcnkod2ViU2VydmljZVR5cGVJRCk7Ci0JCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGludGVybmFsaXplKCkgewkJCi0JCQotCQlpZiAocHJlZmVyZW5jZXNQYWdlXykKLQkJCXJldHVybjsKLQkJCi0JCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfID09IG51bGwpCi0JCQlvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gZ2V0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCQotCQlTdHJpbmcgZGlzcGxheWFibGUgPSBudWxsOwotCQkKLQkJaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkgewkJCi0JCQlJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBsYXVuY2hhYmxlID0gKElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKSBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJbGF1bmNoYWJsZS5zZXRJbml0aWFsU2VsZWN0aW9uKG9iamVjdFNlbGVjdGlvbl8pOwotCQkJb2JqZWN0U2VsZWN0aW9uXyA9IGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JCQlkaXNwbGF5YWJsZSA9IGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsKLQkJfQotCQllbHNlIHsKLQkJCUlPYmplY3RTZWxlY3Rpb25XaWRnZXQgc2VsZWN0aW9uV2lkZ2V0ID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpIG9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQlzZWxlY3Rpb25XaWRnZXQuc2V0SW5pdGlhbFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb25fKTsKLQkJICAgIGRpc3BsYXlhYmxlID0gc2VsZWN0aW9uV2lkZ2V0LmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JCX0KLQotCQlzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJaWYgKGRpc3BsYXlhYmxlICE9IG51bGwgJiYgZGlzcGxheWFibGUubGVuZ3RoKCkgIT0gMCkKLQkJCXNlcnZpY2VJbXBsXy5zZXRUZXh0KGRpc3BsYXlhYmxlKTsKLQkJU3RyaW5nIHdlYlNlcnZpY2VUeXBlSUQgPSBudWxsOwotCQlpZiAoaWRzXyAhPSBudWxsKQotCQkJd2ViU2VydmljZVR5cGVJRCA9IGlkc18uZ2V0VHlwZUlkKCk7Ci0JCXNlcnZpY2VJbXBsXy5yZXN0b3JlV2lkZ2V0SGlzdG9yeSh3ZWJTZXJ2aWNlVHlwZUlEKTsKLQkJc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0KLQkJCQotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJaWYgKG1pc3NpbmdGaWVsZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBtaXNzaW5nRmllbGRTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIHNlcnZpY2VJbXBsVmFsaWRhdGlvblN0YXR1cyA9IGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCk7Ci0JCWlmIChzZXJ2aWNlSW1wbFZhbGlkYXRpb25TdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gc2VydmljZUltcGxWYWxpZGF0aW9uU3RhdHVzOwotCQl9Ci0JCWVsc2UgaWYgKHNlcnZpY2VJbXBsVmFsaWRhdGlvblN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORyl7Ci0JCQlyZXR1cm4gc2VydmljZUltcGxWYWxpZGF0aW9uU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZUVycm9yU3RhdHVzID0gY2hlY2tFcnJvclN0YXR1cygpOwotCQlpZiAocG9zc2libGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgfHwgcG9zc2libGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJcmV0dXJuIHBvc3NpYmxlRXJyb3JTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIHBvc3NpYmxlV2FybmluZ1N0YXR1cyA9IGNoZWNrV2FybmluZ1N0YXR1cygpOwotCQlpZiAocG9zc2libGVXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gcG9zc2libGVXYXJuaW5nU3RhdHVzOwotCQl9Ci0KLQkJLy8gSWYgbm8gd2FybmluZ3MvZXJyb3JzIHdlcmUgcmVwb3J0ZWQsIGNsZWFyIHZhbGlkYXRpb24gc3RhdGUgb24KLQkJLy8gc2VydmljZSBzaWRlIGFuZCBjbGllbnQgc2lkZSAoaWYgZW5hYmxlZCkKLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9OT05FOwotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCWNsaWVudFdpZGdldF8uc2V0VmFsaWRhdGlvblN0YXRlKFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9OT05FKTsKLQkJfQotCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotCS8qCi0JICogY2FsbCB2YWxpZGF0aW9uIGNvZGUgaW4gdGhlIG9iamVjdCBzZWxlY3Rpb24gd2lkZ2V0IHRvIGVuc3VyZSBhbnkKLQkgKiBtb2RpZmljYXRpb25zIHRvIHRoZSBzZXJ2aWNlSW1wbF8gZmllbGQgYXJlIHZhbGlkCi0JICovCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCkgewotCQkKLQkJU3RyaW5nIGZpZWxkVGV4dCA9IHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkudHJpbSgpOwotCi0JCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfID09IG51bGwpCi0JCXsKLQkJCW9iamVjdFNlbGVjdGlvbldpZGdldF8gPSBnZXRTZWxlY3Rpb25XaWRnZXQoKTsKLQkJfQotCQkKLQkJSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgbGF1bmNoYWJsZSA9IG51bGw7Ci0JCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfIGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpCi0JCSAgICB7ICAgICAgCQotCQkJCWxhdW5jaGFibGUgPSAoSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCQl2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSBsYXVuY2hhYmxlLnZhbGlkYXRlKGZpZWxkVGV4dCk7Ci0JCQl9Ci0JCQllbHNlIAotCQkJewotCQkJCUlPYmplY3RTZWxlY3Rpb25XaWRnZXQgd2lkZ2V0ID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCQl2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSB3aWRnZXQudmFsaWRhdGUoZmllbGRUZXh0KTsKLQkJCX0KLQkJCi0JCWlmICghdmFsaWRPYmplY3RTZWxlY3Rpb25fKQotCQl7Ci0JCQlpbnQgc2NlbmFyaW8gPSBnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKTsKLQkJCQotCQkJaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCl7Ci0JCQkJaWYgKGxhdW5jaGFibGUgIT0gbnVsbCl7Ci0JCQkJCUlTdGF0dXMgdmFsU3RhdHVzID0gbGF1bmNoYWJsZS52YWxpZGF0ZVNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihmaWVsZFRleHQpKTsKLQkJCQkJaWYgKHZhbFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9TRVJWSUNFX0lNUExfTkFNSU5HX0NPTlZFTlRJT04pOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU0VSVklDRV9JTVBMKTsKLQkJCX0KLQkJCWVsc2UKLQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NFUlZJQ0VfREVGKTsJCQkKLQkJfQkJCi0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKQotCXsKLQkJICAgaW50IGluZGV4ID0gd2Vic2VydmljZVR5cGVfLmdldFNlbGVjdGlvbkluZGV4KCk7CQotCQkgICBTdHJpbmcgdHlwZUlkID0gbGFiZWxJZHNfLmdldElkc18oKVtpbmRleF07Ci0JCSAgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKTsJCQotCX0KLQkKLQlwcml2YXRlIElTdGF0dXMgY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKSB7Ci0KLQkJLy8gMS4gQ2hlY2sgZm9yIG1pc3NpbmcgZmllbGRzIG9uIHNlcnZpY2Ugc2lkZQotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCVN0cmluZyBzZXJ2aWNlSW1wbCA9IHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkudHJpbSgpOwotCQlTdHJpbmcgdHlwZUlkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0VHlwZUlkKCk7Ci0JCVN0cmluZyBydW50aW1lSWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRSdW50aW1lSWQoKTsKLQkJU3RyaW5nIHNlcnZlcklkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySWQoKTsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gZ2V0U2VydmljZVByb2plY3ROYW1lKCk7Ci0JCWJvb2xlYW4gbmVlZEVhciA9IGdldFNlcnZpY2VOZWVkRUFSKCk7Ci0JCVN0cmluZyBlYXJQcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgcHJvamVjdFR5cGVJZCA9IGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCk7Ci0JCQotCQlJU3RhdHVzIHNlcnZpY2VNaXNzaW5nRmllbGRTdGF0dXMgPSB2YWxVdGlscy5jaGVja01pc3NpbmdGaWVsZFN0YXR1cyh2YWxpZGF0aW9uU3RhdGVfLCB0eXBlSWQsIHNlcnZpY2VJbXBsLAotCQkJCXJ1bnRpbWVJZCwgc2VydmVySWQsIHByb2plY3ROYW1lLCBuZWVkRWFyLCBlYXJQcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCwgZmFsc2UpOwotCQlpZiAoc2VydmljZU1pc3NpbmdGaWVsZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBzZXJ2aWNlTWlzc2luZ0ZpZWxkU3RhdHVzOwotCQl9Ci0KLQkJLy8gMi4gQ2hlY2sgZm9yIG1pc3NpbmcgZmllbGRzIG9uIHRoZSBjbGllbnQgc2lkZSBpZiBpdCdzIHZpc2libGUuCi0JCWlmIChjbGllbnRXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKSkgewotCQkJSVN0YXR1cyBjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja01pc3NpbmdGaWVsZFN0YXR1cygpOwotCQkJaWYgKGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQkJcmV0dXJuIGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXM7Ci0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyBjaGVja0Vycm9yU3RhdHVzKCkgewotCi0JCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQotCQkvLyAxLiBDaGVjayBmb3IgZXJyb3JzIG9uIHNlcnZpY2Ugc2lkZQotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKTsKLQkJYm9vbGVhbiBuZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBwcm9qZWN0VHlwZUlkID0gZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKTsKLQkJU3RyaW5nIGluaXRpYWxQcm9qZWN0TmFtZSA9ICIiOwotCQlpZiAoaW5pdGlhbFByb2plY3RfICE9IG51bGwpIHsKLQkJCWluaXRpYWxQcm9qZWN0TmFtZSA9IGluaXRpYWxQcm9qZWN0Xy5nZXROYW1lKCk7Ci0JCX0gCi0JCUlTdGF0dXMgc2VydmljZVNpZGVFcnJvclN0YXR1cyA9IHZhbFV0aWxzLmNoZWNrRXJyb3JTdGF0dXModmFsaWRhdGlvblN0YXRlXywgZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCksIHByb2plY3ROYW1lLCBpbml0aWFsUHJvamVjdE5hbWUsIG5lZWRFYXIsIGVhclByb2plY3ROYW1lLCBwcm9qZWN0VHlwZUlkLCBmYWxzZSk7Ci0JCWlmIChzZXJ2aWNlU2lkZUVycm9yU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIHNlcnZpY2VTaWRlRXJyb3JTdGF0dXM7Ci0JCX0KLQotCQkvLyAyLiBDaGVjayBmb3IgZXJyb3JzIG9uIGNsaWVudCBzaWRlIGlmIGl0IGlzIHZpc2libGUKLQkJaWYgKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKSB7Ci0JCQlJU3RhdHVzIGNsaWVudFNpZGVFcnJvclN0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tFcnJvclN0YXR1cygpOwotCQkJaWYgKGNsaWVudFNpZGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQlyZXR1cm4gY2xpZW50U2lkZUVycm9yU3RhdHVzOwotCQkJfQotCi0JCQkvLyAzLiBDaGVjayBmb3IgZXJyb3JzIHRoYXQgc3BhbiBzZXJ2aWNlIGFuZCBjbGllbnQgaWYgY2xpZW50IHNpZGUKLQkJCS8vIGlzIHZpc2libGUuCi0JCQlpbnQgY2xpZW50VmFsaWRhdGlvblN0YXRlID0gY2xpZW50V2lkZ2V0Xy5nZXRWYWxpZGF0aW9uU3RhdGUoKTsKLQkJCWlmICh2YWxpZGF0aW9uU3RhdGVfID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwKLQkJCQkJfHwgdmFsaWRhdGlvblN0YXRlXyA9PSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTCi0JCQkJCXx8IGNsaWVudFZhbGlkYXRpb25TdGF0ZSA9PSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMCi0JCQkJCXx8IGNsaWVudFZhbGlkYXRpb25TdGF0ZSA9PSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQkJSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciBydW50aW1lQ2hlY2tlciA9IG51bGw7Ci0KLQkJCQlTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lSWQoZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCksIHByb2plY3ROYW1lLCBwcm9qZWN0VHlwZUlkKTsJICAgIAkJCi0JCQkJcnVudGltZUNoZWNrZXIgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUNoZWNrZXIoc2VydmljZVJ1bnRpbWVJZCk7Ci0KLQkJCQlpZiAocnVudGltZUNoZWNrZXIgIT0gbnVsbCkgewotCQkJCQlyZXR1cm4gcnVudGltZUNoZWNrZXIuY2hlY2tTZXJ2aWNlQ2xpZW50Q29tcGF0aWJpbGl0eSgKLQkJCQkJCQlnZXRTZXJ2aWNlTmVlZEVBUigpLCBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKSwgZ2V0U2VydmljZVByb2plY3ROYW1lKCksIAotCQkJCQkJCWNsaWVudFdpZGdldF8uZ2V0Q2xpZW50TmVlZEVBUigpLCBjbGllbnRXaWRnZXRfLmdldENsaWVudEVhclByb2plY3ROYW1lKCksIAotCQkJCQkJCWNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrV2FybmluZ1N0YXR1cygpIHsKLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCQkvLyAxLiBDaGVjayBmb3Igd2FybmluZ3Mgb24gdGhlIHNlcnZpY2Ugc2lkZQotCQlpbnQgc2NhbGVTZXR0aW5nID0gZ2V0U2VydmljZUdlbmVyYXRpb24oKTsKLQkJU3RyaW5nIHNlcnZlcklkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySWQoKTsKLQkJSVN0YXR1cyBzZXJ2aWNlV2FybmluZ1N0YXR1cyA9IHZhbFV0aWxzLmNoZWNrV2FybmluZ1N0YXR1cyh2YWxpZGF0aW9uU3RhdGVfLCBzY2FsZVNldHRpbmcsIHNlcnZlcklkLCBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCksIGZhbHNlKTsKLQkJaWYgKHNlcnZpY2VXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gc2VydmljZVdhcm5pbmdTdGF0dXM7Ci0JCX0KLQotCQkvLyAyLiBDaGVjayBmb3Igd2FybmluZ3Mgb24gdGhlIGNsaWVudCBzaWRlIGlmIGl0J3MgZW5hYmxlZAotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCUlTdGF0dXMgY2xpZW50V2FybmluZ1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tXYXJuaW5nU3RhdHVzKCk7Ci0JCQlpZiAoY2xpZW50V2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJCXJldHVybiBjbGllbnRXYXJuaW5nU3RhdHVzOwotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCQotCXByb3RlY3RlZCB2b2lkIGluaXRJbWFnZVJlZ2lzdHJ5KCkKLQl7Ci0JCWltYWdlUmVnXyA9IG5ldyBJbWFnZVJlZ2lzdHJ5KERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCi0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18wLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18wKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18xLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18xKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18yKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18zLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18zKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR180LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR180KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR181LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR181KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR182LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR182KSk7Ci0JCQotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV8wLCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzApKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfMSwgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV8xKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzIsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfMikpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV8zLCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzMpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfNCwgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV80KSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzUsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfNSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0QWR2YW5jZWRPcHRpb25zKGJvb2xlYW4gZW5hYmxlZCkKLQl7Ci0JCW1vbml0b3JCdXR0b25fLnNldEVuYWJsZWQoZW5hYmxlZCk7IAotCQlwdWJsaXNoQnV0dG9uXy5zZXRFbmFibGVkKGVuYWJsZWQpOwkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsKLQkJc2VydmljZVByb2plY3ROYW1lXz0gbmFtZTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uc2V0VGV4dChTRVJWSUNFX1BST0pFQ1RfUFJFRklYICsgIiAiICsgc2VydmljZVByb2plY3ROYW1lXyk7Ci0JCWhMaW5rU2VydmljZVByb2plY3RfLnBhY2sodHJ1ZSk7Ci0JCXBhY2tTZWxmKCk7CQotCSAgfQotCQotCXB1YmxpYyB2b2lkIHNldEluaXRpYWxQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0JewotCQlpbml0aWFsUHJvamVjdF8gPSBwcm9qZWN0OwotCX0KLQkKLQkgcHVibGljIHZvaWQgc2V0U2VydmljZUVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCSAgewkgIAotCQkgc2VydmljZUVhclByb2plY3ROYW1lXyA9IG5hbWU7Ci0JCSByZWZyZXNoRUFSTGluaygpOwotCSAgfQotCSAKLQkgIHB1YmxpYyB2b2lkIHJlZnJlc2hFQVJMaW5rKCkKLQkgIHsKLQkJICBoTGlua1NlcnZpY2VFQVJfLnNldFZpc2libGUobmVlZEVhcl8pOyAKLQkJICBpZiAobmVlZEVhcl8pCi0JCSAgewkJCSAKLQkJCSAgaExpbmtTZXJ2aWNlRUFSXy5zZXRUZXh0KFNFUlZJQ0VfRUFSX1BSRUZJWCArICIgIiArIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8pOwotCQkJICBoTGlua1NlcnZpY2VFQVJfLnBhY2sodHJ1ZSk7Ci0JCQkgIHBhY2tTZWxmKCk7Ci0JCSAgfQotCSAgfQotCSBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSggU3RyaW5nIHR5cGUgKQotCSAgewotCQkgc2VydmljZUNvbXBvbmVudFR5cGVfID0gdHlwZTsKLQkgIH0KLQkgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsKLQkgICAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRQcm9qZWN0TmFtZShuYW1lKTsgIAotCSAgfSAgCi0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCSAgewotCSAgICBjbGllbnRXaWRnZXRfLnNldENsaWVudEVhclByb2plY3ROYW1lKG5hbWUpOyAgCi0JICB9Ci0JICAKLQkgIElQcm9qZWN0IHByb2plY3RfOwotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkKLQkgIHsKLQkJICByZXR1cm4gc2VydmljZUNvbXBvbmVudFR5cGVfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDb21wb25lbnRUeXBlKFN0cmluZyB0eXBlKQotCSAgewotCQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50Q29tcG9uZW50VHlwZSh0eXBlKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkKLQkgIHsKLQkJICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0JICB9Ci0JIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKQotCSAgewotCQkgIHJldHVybiBzZXJ2aWNlUHJvamVjdE5hbWVfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpCi0JICB7Ci0JCSAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLQkgIHsKLQkJICBjbGllbnRXaWRnZXRfLnNldFByb2plY3QocHJvamVjdCk7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgSVByb2plY3QgZ2V0Q2xpZW50UHJvamVjdCgpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0UHJvamVjdCgpOyAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotCSAgewotCQkgIHByb2plY3RfID0gcHJvamVjdDsKLQkgIH0JICAKLQkgIAkgIAotCSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotCSAgewotCQkgIHJldHVybiBwcm9qZWN0XzsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUnVudGltZUlkKCkKLQkgIHsKLQkJICAvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgc2VydmljZVJ1bnRpbWVJZCBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzLgotCQkgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUlkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLCBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSwgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKSk7ICAgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJZCgpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UnVudGltZUlkKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VOZWVkRUFSKGJvb2xlYW4gYikKLQkgIHsKLQkJICBuZWVkRWFyXyA9IGI7Ci0JCSAgcmVmcmVzaEVBUkxpbmsoKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZU5lZWRFQVIoKQotCSAgewotCQkgIHJldHVybiBuZWVkRWFyXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q2xpZW50TmVlZEVBUihib29sZWFuIGIpCi0JICB7Ci0JICAgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50TmVlZEVBUihiKTsKLQkgIH0JICAKLQkgIAotCSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50TmVlZEVBUigpOwotCSAgfQotCSAgCi0JICAvLyBsb29rcyB0aHJvdWdoIGV4dGVuc2lvbnMgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIHNlbGVjdGlvbiB3aWRnZXQKLQkgIHByaXZhdGUgT2JqZWN0IGdldFNlbGVjdGlvbldpZGdldCgpCi0JICB7Ci0JCQlTdHJpbmcgICAgICAgICB3c3QgICAgICA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFR5cGVJZCgpOwotCQkJaW50ICAgICAgICAgICAgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQod3N0KTsKLQkJCVN0cmluZyAgICAgICAgIGltcGxJZCAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLQkJICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsQnlJZChpbXBsSWQpOwotICAgICAgT2JqZWN0ICAgICAgICAgcmVzdWx0ICAgPSBudWxsOwotICAgICAgICAKLQkJICAgIAotCQkgIGlmICh3c2ltcGwgIT0gbnVsbCkKLQkJICB7Ci0JCSAgICBTdHJpbmcgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSBudWxsOwotCQkgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotCQkgICAgewotCQkgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldCI7Ci0JCSAgICB9Ci0JCSAgICBlbHNlCi0JCSAgICB7Ci0JCSAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gd3NpbXBsLmdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpOwotCQkgICAgfQotICAgICAgICAKLSAgICAgICAgT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAgICBib29sZWFuIGVkaXRhYmxlID0gcmVnaXN0cnkuZ2V0RXh0ZXJuYWxNb2RpZnkoIG9iamVjdFNlbGVjdGlvbldpZGdldElkICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHNlcnZpY2VJbXBsXy5zZXRFbmFibGVkKCBlZGl0YWJsZSApOwotICAgICAgICByZXN1bHQgPSByZWdpc3RyeS5nZXRTZWxlY3Rpb25XaWRnZXQoIG9iamVjdFNlbGVjdGlvbldpZGdldElkICk7Ci0gICAgICB9Ci0gICAgICAKLQkJICByZXR1cm4gcmVzdWx0OwotCSAgfQotCSAKLQkvLyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FibGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2cKLQlwdWJsaWMgdm9pZCBkaXNhYmxlTm9uUHJlZmVyZW5jZVdpZGdldHMoKQotCXsKLQkJaWYgKHNlcnZpY2VJbXBsXyAhPSBudWxsKQotCQkJc2VydmljZUltcGxfLnNldEVuYWJsZWQoZmFsc2UpOwotCQlpZiAoYnJvd3NlQnV0dG9uXyAhPSBudWxsKQotCQkJYnJvd3NlQnV0dG9uXy5zZXRFbmFibGVkKGZhbHNlKTsKLQkJaWYgKGhDb21wU2VydmljZV8gIT0gbnVsbCkKLQkJewotCQkJaENvbXBTZXJ2aWNlXy5zZXRWaXNpYmxlKGZhbHNlKTsJCQkKLQkJfQotCQljbGllbnRXaWRnZXRfLmRpc2FibGVOb25QcmVmZXJlbmNlV2lkZ2V0cygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0R3JhcGhpY3MoaW50IHZhbHVlKQotCXsKLQkJU3RyaW5nIGljb25JbWFnZSA9ICIiOwotCQlTdHJpbmcgdG9wbG9neUltYWdlID0gIiI7Ci0JCXN3aXRjaCAodmFsdWUpIHsKLQkJY2FzZSAwOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMDsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfMDsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18xOwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV8xOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzI7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzI7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMzsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfMzsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR180OwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV80OwotCQkJYnJlYWs7Ci0JCWNhc2UgNToJCQkJCQotCQljYXNlIDY6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR181OwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV81OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlzZXJ2aWNlU2NhbGVfLnNldEJhY2tncm91bmRJbWFnZShpbWFnZVJlZ18uZ2V0KGljb25JbWFnZSkpOwotCQl0b3BvbG9neVNwb3RfLnNldEltYWdlKGltYWdlUmVnXy5nZXQodG9wbG9neUltYWdlKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZWZyZXNoU2VydmVyUnVudGltZVNlbGVjdGlvbigpCi0JewkJCi0JCS8vbmV3IHVwIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotCQlTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgc2VydmVyUlREZWZhdWx0Q21kID0gbmV3IFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpOwotCQkKLQkJICAvL2NhbGwgc2V0dGVycyBvZiBuZXcgZGVmYXVsdGluZyBjb21tYW5kOgotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0SW5pdGlhbFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0R2VuZXJhdGVQcm94eShjbGllbnRXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCSAgc2VydmVyUlREZWZhdWx0Q21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKGdldFdlYlNlcnZpY2VzUGFyc2VyKCkpOyAgICAgCi0JCSAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRDbGllbnRJbml0aWFsUHJvamVjdChnZXRDbGllbnRQcm9qZWN0KCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRDbGllbnRFYXJQcm9qZWN0TmFtZShjbGllbnRXaWRnZXRfLmdldENsaWVudEVhclByb2plY3ROYW1lKCkpOwotCQkgIHNlcnZlclJURGVmYXVsdENtZC5zZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcihnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpKTsKLQkJICAJCSAgCi0JCSAgc2VydmVyUlREZWZhdWx0Q21kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JCSAgCi0JCSAgLy9wZXJmb3JtIG1hcHBpbmdzIGZyb20gdGhlIGRlZmF1bHRpbmcgY29tbWFuZCB0byB0aGUgcHJvamVjdCBzZXR0aW5ncy4uLgkKLQkJICBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoc2VydmVyUlREZWZhdWx0Q21kLmdldFNlcnZpY2VQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoc2VydmVyUlREZWZhdWx0Q21kLmdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKSk7Ci0JCSAgc2V0Q2xpZW50UHJvamVjdE5hbWUoc2VydmVyUlREZWZhdWx0Q21kLmdldENsaWVudFByb2plY3ROYW1lKCkpOwotCQkgIHNldENsaWVudEVhclByb2plY3ROYW1lKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoc2VydmVyUlREZWZhdWx0Q21kLmdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpKTsKLSAgICAgICAgICBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0gICAgICAgICAgc2V0U2VydmljZU5lZWRFQVIoc2VydmVyUlREZWZhdWx0Q21kLmdldFNlcnZpY2VOZWVkRUFSKCkpOwotICAgICAgICAgIHNldENsaWVudE5lZWRFQVIoc2VydmVyUlREZWZhdWx0Q21kLmdldENsaWVudE5lZWRFQVIoKSk7Ci0gICAgICAgICAgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpKTsKLQl9Ci0JCi0JLyoqCi0JICogIFVwZGF0ZSBjbGllbnQgc2VydmVyIGFuZCBydW50aW1lIGJhc2VkIG9uIHNlcnZpY2Ugc2lkZQotCSAqLwotCXByaXZhdGUgdm9pZCByZWZyZXNoQ2xpZW50U2VydmVyUnVudGltZVNlbGVjdGlvbigpCi0JewkKLQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50VHlwZVJ1bnRpbWVzZXJ2ZXIgPSBnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpOwotCQljbGllbnRUeXBlUnVudGltZXNlcnZlci5zZXRSdW50aW1lSWQoZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0UnVudGltZUlkKCkpOwotCQljbGllbnRUeXBlUnVudGltZXNlcnZlci5zZXRTZXJ2ZXJJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpKTsKLQkJY2xpZW50VHlwZVJ1bnRpbWVzZXJ2ZXIuc2V0U2VydmVySW5zdGFuY2VJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQlzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcihjbGllbnRUeXBlUnVudGltZXNlcnZlcik7Ci0JfQkKLQkJCi0JCi0JcHJpdmF0ZSB2b2lkIGNhbGxPYmplY3RUcmFuc2Zvcm1hdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24sCi0JCQlJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50TmFtZSwgYm9vbGVhbiByZWZyZXNoUnVudGltZSkKLQl7Ci0JCU9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQgb2JqT3V0cHV0Q29tbWFuZCA9IG5ldyBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kKCk7Ci0JCSAgIG9iak91dHB1dENvbW1hbmQuc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkgICBvYmpPdXRwdXRDb21tYW5kLnNldE9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotCSAgICAgICBvYmpPdXRwdXRDb21tYW5kLnNldFByb2plY3QocHJvamVjdCk7Ci0JICAgICAgIG9iak91dHB1dENvbW1hbmQuc2V0Q29tcG9uZW50TmFtZShjb21wb25lbnROYW1lKTsJCQkgICAKLQkgICAgICAgCi0JICAgICAgIG9iak91dHB1dENvbW1hbmQuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICAgICAgCi0JICAgICAgIHNldFdlYlNlcnZpY2VzUGFyc2VyKG9iak91dHB1dENvbW1hbmQuZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7Ci0JICAgICAgIHNldE9iamVjdFNlbGVjdGlvbihvYmpPdXRwdXRDb21tYW5kLmdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkgICAgICAgc2V0UHJvamVjdChvYmpPdXRwdXRDb21tYW5kLmdldFByb2plY3QoKSk7ICAgICAgCQkgICAgICAgCi0JICAgICAgIAotCSAgICAgICBpZiAocmVmcmVzaFJ1bnRpbWUgfHwgZm9yY2VSZWZyZXNoUnVudGltZSkKLQkgICAgCSAgIHJlZnJlc2hTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCk7ICAKLQkgICAgICAgCi0JICAgICAgIGZvcmNlUmVmcmVzaFJ1bnRpbWUgPSBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLQl7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsJCQkKLQkJCSAgICAKLQkJCSAgICBTY2FsZSBzY2FsZSA9IChTY2FsZSllLndpZGdldDsKLQkJCQlpbnQgc2VsZWN0aW9uID0gc2NhbGUuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJCi0JCQkJLy9UT0RPOiBjaGFuZ2UgdGhlIGhhcmQgY29kZWQgaW50ZWdlcnMgaGVyZSB0byB0aGUgdGhlIFNjZW5hcmlvQ29udGV4dC5XU194eHggd2hlbiBpbiBsZXNzIGNyaXRpY2FsIHBoYXNlCi0JCQkJc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkJCQljYXNlIDA6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxOgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfUlVOKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAyOgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfSU5TVEFMTCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzoKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNDoKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1OgkJCQkJCi0JCQkJY2FzZSA2OgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFNlbGVjdGlvbihTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCk7IC8vIm5vIHNlbGVjdGlvbiIgaXMgbm90IGFsbG93ZWQuLi5tdXN0IGRldmVsb3Agc2VydmljZSBAIG1pbmltdW0KLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1ApOwotCQkJCQkvL3Jlc2V0IGxvY2FsIHNlbGVjdGlvbiBzbyB0aGF0IHNldHRlcnMgZ2V0IGNvcnJlY3QgdmFsdWUgYmVsb3cKLQkJCQkJc2VsZWN0aW9uID0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkKLQkJCQlzZXREZXZlbG9wU2VydmljZShzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1ApOwotCQkJCXNldEFzc2VtYmxlU2VydmljZShzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFKTsKLQkJCQlzZXREZXBsb3lTZXJ2aWNlKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZKTsKLQkJCQkKLQkJCQlzZXRUZXN0U2VydmljZShuZXcgQm9vbGVhbihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX1RFU1QpKTsKLQkJCQlzZXRJbnN0YWxsU2VydmljZShuZXcgQm9vbGVhbihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0lOU1RBTEwpKTsKLQkJCQlzZXRTdGFydFNlcnZpY2UobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVCkpOwotCQkJCXNldEFkdmFuY2VkT3B0aW9ucyhzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0lOU1RBTEwpOwotCQkJCWNsaWVudFdpZGdldF8uZW5hYmxlQ2xpZW50U2xpZGVyKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpOwotCQkJCQotCQkJCXNldEdyYXBoaWNzKHNlbGVjdGlvbik7Ci0JCQkJCi0JCQkJLy9WYWxpZGF0ZSB0aGUgcGFnZQotCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NDQUxFX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLQkJCQkKLQkJCX0JCQotCi0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQl3aWRnZXRTZWxlY3RlZChlKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFNlcnZpY2VJbXBsQnJvd3NlTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotCXsKLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIJCQkKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeyAgICAgCi0JCQkgICAKLQkJCSAgaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gPT0gbnVsbCkKLQkJCQkgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gZ2V0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCQkgIAotCQkJICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uID0gbnVsbDsKLQkJCSAgIElQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCQkJICAgU3RyaW5nIGNvbXBvbmVudE5hbWU9IiI7Ci0JCQkgICBpbnQgcmVzdWx0PURpYWxvZy5DQU5DRUw7Ci0JCQkgICAKLQkJCSAgIC8vIFRoaXMgc2hvdWxkIGJlIHRoZSBXZWIgU2VydmljZSBXaXphcmQgRGlhbG9nJ3Mgc2hlbGwsIGFuZCBzaG91bGQgYmUgbm9uLW51bGwuCi0JCQkgICBTaGVsbCBzaGVsbCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCk7Ci0JCQkgICAKLQkJCSAgIGlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfIGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpCi0JCSAgICAgICB7ICAgICAgCQotCQkJCSBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBsYXVuY2hhYmxlID0gKChJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSlvYmplY3RTZWxlY3Rpb25XaWRnZXRfKTsKLQkJCQkgbGF1bmNoYWJsZS5zZXRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQotCQkJCSAvLyBCdWcgMjY5MDk3IC0gVXNlIHRoZSBXZWIgU2VydmljZSdzIGRpYWxvZyBzaGVsbCwgbm90IHRoZSBwbGF0Zm9ybSB3b3JrYmVuY2gncyBzaGVsbAotCQkgICAgICAgICByZXN1bHQgPSBsYXVuY2hhYmxlLmxhdW5jaChzaGVsbCk7Ci0JCSAgICAgICAgIGlmIChyZXN1bHQgPT0gRGlhbG9nLk9LKQotCQkgICAgICAgICB7Ci0JCSAgICAgICAgCSBzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCSAgICAgICAgIHNlcnZpY2VJbXBsXy5zZXRUZXh0KGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSk7Ci0JCQkgICAgICAgICBzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCSAgICAgICAgIG9iamVjdFNlbGVjdGlvbiA9IGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JCQkgICAgICAgICBwcm9qZWN0ID0gbGF1bmNoYWJsZS5nZXRQcm9qZWN0KCk7Ci0JCQkgICAgICAgICBjb21wb25lbnROYW1lPSBsYXVuY2hhYmxlLmdldENvbXBvbmVudE5hbWUoKTsKLQkJICAgICAgICAgfQotCQkgICAgICAgfQotCQkJICAgZWxzZQotCQkJICAgewotCQkJCQkvLyBidWcgMjY5MDk3IC0gIC0gVXNlIHRoZSBXZWIgU2VydmljZSdzIGRpYWxvZyBzaGVsbCwgbm90IHRoZSBwbGF0Zm9ybSB3b3JrYmVuY2gncyBzaGVsbC4KLQkJCQkJYnJvd3NlRGlhbG9nXyA9IG5ldyBTZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZyhzaGVsbCwgCi0JCQkJCQkJbmV3IFBhZ2VJbmZvKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX1NFUlZJQ0VfSU1QTF9TRUxFQ1RJT04sICIiLCAKLQkJCQkJCQkJCW5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCQkJCXsJCi0JCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCQkJCQl7CSAgCQkJCQkJIAotCQkJCQkJCQkJcmV0dXJuIG5ldyBPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0pKTsJCQotCi0JCQkJICAgYnJvd3NlRGlhbG9nXy5zZXRUeXBlUnVudGltZVNlcnZlcihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCQkJICAgYnJvd3NlRGlhbG9nXy5zZXRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkJCSAgICAgICByZXN1bHQgPSBicm93c2VEaWFsb2dfLm9wZW4oKTsKLQkJCSAgICAgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJCSAgICAgICB7Ci0JCQkgICAgCSAgIHNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJCSAgICAgICBzZXJ2aWNlSW1wbF8uc2V0VGV4dChicm93c2VEaWFsb2dfLmdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkpOyAKLQkJCQkgICAgICAgc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJICAgICAgIG9iamVjdFNlbGVjdGlvbiA9IGJyb3dzZURpYWxvZ18uZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JCQkJICAgICAgIHByb2plY3QgPSBicm93c2VEaWFsb2dfLmdldFByb2plY3QoKTsKLQkJCQkgICAgICAgY29tcG9uZW50TmFtZT0gYnJvd3NlRGlhbG9nXy5nZXRDb21wb25lbnROYW1lKCk7CQkJICAgICAgIAotCQkJICAgICAgIH0KLQkJCSAgICAgICBicm93c2VEaWFsb2dfID0gbnVsbDsKLQkJCSAgIH0KLQkJCSAgIAotCQkJICAgLy8gY2FsbCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIGNhcnJ5IG91dCBhbnkgdHJhbnNmb3JtYXRpb24gb24gdGhlIG9iamVjdFNlbGVjdGlvbgotCQkJICAgaWYgKHJlc3VsdCA9PSBEaWFsb2cuT0spCi0JCQkgICB7Ci0JCQkJICAgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKG9iamVjdFNlbGVjdGlvbiwgcHJvamVjdCwgY29tcG9uZW50TmFtZSwgZ2V0V2ViU2VydmljZVNjZW5hcmlvKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pOwkJCQkgICAKLQkJCSAgICAgICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJCSAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7IC8vIHZhbGlkYXRlIHRoZSBwYWdlCi0JCQkgICB9CQkJICAgCi0JICAgIH0KLQl9Ci0KLQkKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg4Yjk1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDIyMCAgIDIxOTUzNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwODA1MjMgICAyMzM3NjQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFRvcCBkb3duIEVKQiBwcmVmZXJlbmNlIG5vdCByZXNwZWN0ZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLXsgICAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb25fOwotICBwcml2YXRlIGludCBzZXJ2aWNlR2VuZXJhdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95U2VydmljZV87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgCi0gICAgU3RyaW5nIHR5cGUgICAgICA9IGdldFNjZW5hcmlvQ29udGV4dCgpLmdldFdlYlNlcnZpY2VUeXBlKCk7Ci0gICAgU3RyaW5nIHJ1bnRpbWUgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldERlZmF1bHRSdW50aW1lVmFsdWVGb3IoIHR5cGUgKTsKLQkKLSAgICBTdHJpbmcgZmFjdG9yeUlEID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0RGVmYXVsdFNlcnZlclZhbHVlRm9yKHR5cGUpOyAgICAKLSAgICB0eXBlUnVudGltZVNlcnZlcl8gPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLSAgICAKLSAgICB0eXBlUnVudGltZVNlcnZlcl8uc2V0VHlwZUlkKCB0eXBlICk7Ci0gICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFJ1bnRpbWVJZCggcnVudGltZSApOwotICAgIHR5cGVSdW50aW1lU2VydmVyXy5zZXRTZXJ2ZXJJZCggZmFjdG9yeUlEICk7Ci0gICAgCi0gICAgLy9EZWZhdWx0IHRoZSB0eXBlSWQgZnJvbSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICBTdHJpbmdbXSB0eXBlSWRzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZVR5cGVCeVNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uXyk7Ci0KLSAgICBpZiAodHlwZUlkcyE9bnVsbCAmJiB0eXBlSWRzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIFN0cmluZyBwcmVmZXJyZWQgPSB0eXBlSWRzWzBdOwkvLyBkZWZhdWx0IHRvIGZpcnN0IGVudHJ5IGluaXRpYWxseQotICAgICAgZm9yIChTdHJpbmcgdHlwZUlkIDogdHlwZUlkcykgewotICAgIAkgIGlmICh0eXBlSWQuZXF1YWxzKHR5cGUpKSB7Ci0gICAgCQkgIHByZWZlcnJlZCA9IHR5cGVJZDsKLSAgICAJCSAgYnJlYWs7Ci0gICAgCSAgfQotICAgICAgfQotICAgICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFR5cGVJZChwcmVmZXJyZWQpOwotICB9IGVsc2UgewotCSAgaWYgKGluaXRpYWxTZWxlY3Rpb25fICE9IG51bGwgJiYgIWluaXRpYWxTZWxlY3Rpb25fLmlzRW1wdHkoKSkKLQkgIHsgCi0JCSAgT2JqZWN0IGluaXRpYWxPYmplY3QgPSBpbml0aWFsU2VsZWN0aW9uXy5nZXRGaXJzdEVsZW1lbnQoKTsgCi0JCSAgLy8gaW5pdGlhbE9iamVjdCB3b3VsZCBub3QgYmUgbnVsbCBzaW5jZSAhaW5pdGlhbFNlbGVjdGlvbl8uaXNFbXB0eSgpCi0JCSAgYm9vbGVhbiBoYXNBZGFwdGVyID0gQWRhcHRlclV0aWxzLmhhc0FkYXB0ZXIoaW5pdGlhbE9iamVjdCk7Ci0JCSAgaWYgKGhhc0FkYXB0ZXIpIHsKLQkJCSAgU3RyaW5nIGVudHJ5ID0gbnVsbDsKLQkJCSAgU3RyaW5nIHByZWZpeCA9IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOICsgIi8iOwotCQkJICBpZiAodHlwZS5zdGFydHNXaXRoKHByZWZpeCkpCi0JCQkJICBlbnRyeSA9IHR5cGU7Ci0JCQkgIGVsc2UgewotCQkJCSAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQkgIGVudHJ5YnVmZi5hcHBlbmQocHJlZml4KTsKLQkJCQkgIGVudHJ5YnVmZi5hcHBlbmQoIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIpOwotCQkJCSAgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLQkJCSAgfQotCQkJICB0eXBlUnVudGltZVNlcnZlcl8uc2V0VHlwZUlkKGVudHJ5KTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgICAKLSAgICBzZXJ2aWNlR2VuZXJhdGlvbl8gPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKTsKLSAgICAJCi0JZGV2ZWxvcFNlcnZpY2VfID0gc2VydmljZUdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QOwotCWFzc2VtYmxlU2VydmljZV8gPSBzZXJ2aWNlR2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFOwotCWRlcGxveVNlcnZpY2VfID0gc2VydmljZUdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1k7Ci0gICAgCi0JZGVmYXVsdENsaWVudFNjYWxlKCk7Ci0JCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaW5pdGlhbFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBpbml0aWFsU2VsZWN0aW9uXyA7Ci0gIH0KLSAgCi0gIElQcm9qZWN0IHByb2plY3RfOyAgCi0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0SW5pdGlhbFByb2plY3QoKQotICB7Ci0JICBpZiAocHJvamVjdF89PW51bGwpCi0JICB7Ci0JICAgIHByb2plY3RfID0gZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24oaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgfSAgCi0JICAKLQkgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbU9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsgCi0gICAgcmV0dXJuIHR5cGVSdW50aW1lU2VydmVyXzsKLSAgfQotCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFN0YXJ0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldFN0YXJ0V2ViU2VydmljZSgpICk7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRUZXN0V2ViU2VydmljZSgpICk7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0UHVibGlzaFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKSApOwotICB9Ci0KLSAgcHVibGljIEJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEdlbmVyYXRlUHJveHkoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuICBnZXRTY2VuYXJpb0NvbnRleHQoKS5pc0xhdW5jaFNhbXBsZUVuYWJsZWQoKTsgIAotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0U2VydmljZUdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gc2VydmljZUdlbmVyYXRpb25fOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0R2VuZXJhdGVDbGllbnQoKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcFNlcnZpY2UoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcFNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JICByZXR1cm4gYXNzZW1ibGVTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkgIHJldHVybiBkZXBsb3lTZXJ2aWNlXzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUyY2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyNyAgIDE0NDM1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIGV4dGVuZHMgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZAoteyAgICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgaW5zdGFsbFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHN0YXJ0U2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgdGVzdFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHRlc3RDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHJ1blRlc3RDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHB1Ymxpc2hTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5lcmF0ZVByb3h5XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXZlbG9wU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgYXNzZW1ibGVTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXBsb3lTZXJ2aWNlXzsgCi0gIAotCXByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgcmVzb3VyY2VDb250ZXh0XzsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87IAotICAgIAotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsgCi0gICAgcmV0dXJuIHR5cGVSdW50aW1lU2VydmVyXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsU2VydmljZV87ICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhcnRTZXJ2aWNlXzsgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gcnVuVGVzdENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2hTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBwdWJsaXNoU2VydmljZV87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAgIHJldHVybiBnZW5lcmF0ZVByb3h5XzsgIAotICB9Ci0JCi0JcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotCXsKLQkJcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0JfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBnZW5lcmF0ZVByb3h5XyBUaGUgZ2VuZXJhdGVQcm94eV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHlfKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0ZVByb3h5XyA9IGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcHVibGlzaFNlcnZpY2VfIFRoZSBwdWJsaXNoU2VydmljZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFNlcnZpY2UoYm9vbGVhbiBwdWJsaXNoU2VydmljZV8pCi0gIHsKLSAgICB0aGlzLnB1Ymxpc2hTZXJ2aWNlXyA9IHB1Ymxpc2hTZXJ2aWNlXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGluc3RhbGxTZXJ2aWNlXyBUaGUgaW5zdGFsbFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxTZXJ2aWNlKGJvb2xlYW4gaW5zdGFsbFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy5pbnN0YWxsU2VydmljZV8gPSBpbnN0YWxsU2VydmljZV87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzdGFydFNlcnZpY2VfIFRoZSBzdGFydFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShib29sZWFuIHN0YXJ0U2VydmljZV8pCi0gIHsKLSAgICB0aGlzLnN0YXJ0U2VydmljZV8gPSBzdGFydFNlcnZpY2VfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gdGVzdFNlcnZpY2VfIFRoZSB0ZXN0U2VydmljZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZV8pCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlXyA9IHRlc3RTZXJ2aWNlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSB0ZXN0U2VydmljZV8gVGhlIHRlc3RTZXJ2aWNlXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudF8pCi0gIHsKLSAgICB0aGlzLnJ1blRlc3RDbGllbnRfID0gcnVuVGVzdENsaWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gdHlwZVJ1bnRpbWVTZXJ2ZXJfIFRoZSB0eXBlUnVudGltZVNlcnZlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyXykKLSAgewotICAgIHRoaXMudHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICB9Ci0JCi0JcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KFJlc291cmNlQ29udGV4dCByYykKLQl7Ci0JCXJlc291cmNlQ29udGV4dF8gPSByYzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsJCi0JfQkKLQkKLQlwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLQl7Ci0JICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3BTZXJ2aWNlKCkgewotCQlyZXR1cm4gZGV2ZWxvcFNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERldmVsb3BTZXJ2aWNlKGJvb2xlYW4gZGV2ZWxvcFNlcnZpY2UpIHsKLQkJdGhpcy5kZXZlbG9wU2VydmljZV8gPSBkZXZlbG9wU2VydmljZTsKLQl9CQotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlU2VydmljZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlU2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGVTZXJ2aWNlKGJvb2xlYW4gYXNzZW1ibGVTZXJ2aWNlKSB7Ci0JCXRoaXMuYXNzZW1ibGVTZXJ2aWNlXyA9IGFzc2VtYmxlU2VydmljZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lTZXJ2aWNlKCkgewotCQlyZXR1cm4gZGVwbG95U2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVwbG95U2VydmljZShib29sZWFuIGRlcGxveVNlcnZpY2UpIHsKLQkJdGhpcy5kZXBsb3lTZXJ2aWNlXyA9IGRlcGxveVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0VGVzdENsaWVudCgpIHsKLQkJcmV0dXJuIHRlc3RDbGllbnRfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRlc3RDbGllbnQoYm9vbGVhbiB0ZXN0Q2xpZW50XykgewotCQl0aGlzLnRlc3RDbGllbnRfID0gdGVzdENsaWVudF87Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDIxMGEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5QYWdlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uRGlhbG9nIHsKLQotCVR5cGVSdW50aW1lU2VydmVyIHRyc187Ci0JU3RyaW5nIHRpdGxlVGV4dF87Ci0JSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLQkKLQlwdWJsaWMgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2coU2hlbGwgcGFyZW50LCBQYWdlSW5mbyBwYWdlSW5mbykgewotCQlzdXBlcihwYXJlbnQsIHBhZ2VJbmZvKTsKLQkJdGl0bGVUZXh0XyA9IHBhZ2VJbmZvLmdldFBhZ2VOYW1lKCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNhbGxTZXR0ZXJzKCkKLQl7CQkKLQkJKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLnNldFR5cGVSdW50aW1lU2VydmVyKHRyc18pOwotCQkoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuc2V0SW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb25fKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzKQotCXsKLQkJdHJzXyA9IHRyczsgCi0JCQotCQkvLyBzZXQgZGlhbG9nIHRpdGxlIHRleHQgYmFzZWQgb24gdGhlIHdlYiBzZXJ2aWNlIHNjZW5hcmlvCi0JCWlmICh0cnMgIT0gbnVsbCkKLQkJewotCQkgICBTdHJpbmcgdHlwZUlkID0gdHJzLmdldFR5cGVJZCgpOwotCQkgICBpbnQgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKTsKLQkJICAgCi0JCSAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgIHsKLQkJCSAgdGl0bGVUZXh0XyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX1NFUlZJQ0VfSU1QTF9TRUxFQ1RJT047Ci0JCSAgIH0KLQkJICAgZWxzZSBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgIHsKLQkJCSAgIHRpdGxlVGV4dF8gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0RFRl9TRUxFQ1RJT047Ci0JCSAgIH0KLQkJfSAgICAgICAgICAgICAJICAgCi0JfQotCSAKLQkgIHByb3RlY3RlZCB2b2lkIHNldFNoZWxsU3R5bGUoaW50IG5ld1NoZWxsU3R5bGUpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNoZWxsU3R5bGUoIG5ld1NoZWxsU3R5bGUgfCBTV1QuUkVTSVpFICk7ICAKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JICB7Ci0JICAgIG5ld1NoZWxsLnNldFRleHQodGl0bGVUZXh0Xyk7ICAgCi0JICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKG5ld1NoZWxsKTsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpIHsKLQkJICAKLQkJIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsKLQl9Ci0JICAKLQkgIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKSB7Ci0JCSAgcmV0dXJuICgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQl9Ci0JICAKLQkgIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCl7Ci0JCSAgcmV0dXJuICgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRQcm9qZWN0KCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpewotCQkgIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0Q29tcG9uZW50TmFtZSgpOyAgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotCSAgewotCQkgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247IAotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgUG9pbnQgZ2V0SW5pdGlhbFNpemUoKQotCSAgewkKLQkJICByZXR1cm4gKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldFdpZGdldFNpemUoKTsJICAgIAotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvRXhwb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9FeHBvcnRXU1dpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAwNjdhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9FeHBvcnRXU1dpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFdTV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZDsKLQotCi1wdWJsaWMgY2xhc3MgRXhwb3J0V1NXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSAgIGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5ICAgICAgd2lkZ2V0UmVnaXN0cnk7Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZzsKLQotICBwdWJsaWMgRXhwb3J0V1NXaWRnZXRCaW5kaW5nKCkKLSAgewotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyA9IG5ldyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiV1NFeHBvcnQiKSk7Ci0gICAgICAgICAgICAgICByb290LmFkZChwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCksICIiKSk7Ci0gICAgICAgICAgICAgICByZXR1cm4gcm9vdDsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckNhbkZpbmlzaCh0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuZGF0YU1hcHBpbmdSZWdpc3RyeSA9IGRhdGFSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJEYXRhTWFwcGluZ3ModGhpcy5kYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAKLSAgICAvLyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9Qcml2YXRlVURESSIsIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsKLSAgICAKLSAgICAvLyBMYXVuY2hXZWJTZXJ2aWNlc0V4cGxvcmVyQ29tbWFuZAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJGb3JjZUxhdW5jaE91dHNpZGVJREUiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiTGF1bmNoT3B0aW9ucyIsIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy53aWRnZXRSZWdpc3RyeSA9IHdpZGdldFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHRoaXMud2lkZ2V0UmVnaXN0cnkpOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJXU0V4cG9ydCIsIAotICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1BVQkxJU0gsCi0gICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19QVUJMSVNILAotICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaXNoV1NXaWRnZXQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9QdWJsaXNoV1NETFdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1B1Ymxpc2hXU0RMV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDBmMzhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1B1Ymxpc2hXU0RMV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIFB1Ymxpc2hXU0RMV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHB1YmxpYyBQdWJsaXNoV1NETFdpZGdldEJpbmRpbmcoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoKTsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpLCAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1NlcnZlcldpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1NlcnZlcldpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1NTNkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9TZXJ2ZXJXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMDQgMTIxNjA1ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDcgICAxMzU0MTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxMCAgIDEzNTU2MiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxNyAgIDEzNjM5MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNSAgIDEzODA1MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzU4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDkgICAgODY0MjEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNzI3ICAgMTQ0MzU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MTAgICAxMzUzOTUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEVuYWJsZSBXVFAgV2ViIHNlcnZpY2UgZnJhbWV3b3JrIG9wZW5pbmcgSmF2YSBlZGl0b3IKLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwMiAgIDE4MDMwNCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA3MTAzMSAgIDE0MDUxOCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA3MTIxOAkgIDIwMDE5MyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDQxNiAgIDIxNTA4NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDUwNiAgIDIyNzg0OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRGlzYWJsZWQgIlJ1biBvbiBTZXJ2ZXIiIGNoZWNrYm94IGlzIGluIGNoZWNrZWQgc3RhdGUKLSAqIDIwMDgwNzI5ICAgMjQxMjc1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIE5vIFZhbGlkYXRpb24gZXJyb3IgZ2VuZXJhdGluZyBXZWIgU2VydmljZSBjbGllbnQgaWYgZGlhbG9nIGhpZGRlbgotICogMjAwOTA3MjQgICAyODQ1ODIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBXUyBUZXN0IGZhY2lsaXR5IHNlbGVjdGlvbiBpZ25vcmVkIHdoZW4gd2l6YXJkIGNvbXBsZXRlcy4gRGVmYXVsdCBhbHdheXMgY2hvc2VuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Db21wdXRlRW5kcG9pbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Db21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vbml0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5NYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuU2VydmVySW5zdFRvSVNlcnZlclRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5TY2VuYXJpb0NsZWFudXBDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uQ2xpZW50Um9vdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbi5TZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5QdWJsaXNoV1NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hEZWZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkZpbmlzaFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LlRlc3REZWZhdWx0aW5nRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XU0RMVGVzdExhdW5jaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZURldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uU2VydmljZVJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lLlNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LkxhdW5jaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3QuU2VydmljZVRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LlNlcnZpY2VUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuY29tbWFuZC5PcGVuRWRpdG9yQ29tbWFuZDsKLQotcHVibGljIGNsYXNzIFNlcnZlcldpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5ICAgY2FuRmluaXNoUmVnaXN0cnlfOwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5ICAgICAgd2lkZ2V0UmVnaXN0cnlfOwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeV87Ci0gIHByaXZhdGUgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnOwotCi0gIHB1YmxpYyBTZXJ2ZXJXaWRnZXRCaW5kaW5nKCkKLSAgewotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyA9IG5ldyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIGNhbkZpbmlzaFJlZ2lzdHJ5XyA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckNhbkZpbmlzaChjYW5GaW5pc2hSZWdpc3RyeV8pOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKSwgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5XyA9IGRhdGFSZWdpc3RyeTsKLQotICAgIC8vIEJlZm9yZSBTZXJ2ZXJXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlR2VuZXJhdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7IAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEdlbmVyYXRpb24iLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICAKLQotICAgIAotICAgIC8vIEFmdGVyIFNlcnZlcldpemFyZFdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU3RhcnRDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJUZXN0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAgIAotICAgIC8vIEJlZm9yZSBPYmplY3RTZWxlY3Rpb25XaWRnZXQgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIAotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0TmFtZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZU5lZWRFQVIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAvL2p2aAotICAgICAgICAgICAgICAgIAotICAgIC8vIEFmdGVyIFNlcnZlcldpemFyZFdpZGdldCAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50VHlwZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlTmVlZEVBUiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLQotICAgIC8vIE1hcCBmcmFnbWVudHMgdGhhdCBkZXBlbmQgb24gZGF0YS4gICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gQ3JlYXRlTW9uaXRvckNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcywgIk1vbml0b3JlZFBvcnQiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcywgIk1vbml0b3JlZFBvcnQiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIENvbXB1dGVFbmRwb2ludENvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnQiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyAgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyAxNDU0MjYKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlFbmRwb2ludCIsIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAvL1NlcnZpY2VUZXN0V2lkZ2V0IG1hcHBpbmdzICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlckluc3RhbmNlSWQiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVRlc3RGYWNpbGl0aWVzIiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIkxhdW5jaGVkU2VydmljZVRlc3ROYW1lIiwgRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIkxhdW5jaGVkU2VydmljZVRlc3ROYW1lIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJTZXJ2aWNlVGVzdEZhY2lsaXRpZXMiLCBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzKTsKLSAgICAgICAgCi0gICAgLy8gQmVmb3JlIENsaWVudCBUZXN0IHdpZGdldC4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAKLSAgICAvLyBCZWZvcmUgQ2xpZW50VGVzdFdpZGdldAotICAgICAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiUnVuQ2xpZW50VGVzdCIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBBZnRlciBDbGllbnRUZXN0V2lkZ2V0ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3QiLEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0U2VydmljZSIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdElEIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJJc1Rlc3RXaWRnZXQiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgLy8gUHVibGlzaFdTV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIlB1Ymxpc2hUb1B1YmxpY1VEREkiLCBudWxsKTsKLSAgICAKLSAgICAvLyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIlB1Ymxpc2hUb1ByaXZhdGVVRERJIiwgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQuY2xhc3MpOwotICAgIAotICAgIC8vIExhdW5jaFdlYlNlcnZpY2VzRXhwbG9yZXJDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHJpdmF0ZVVEREkiLCBMYXVuY2hGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHVibGljVURESSIsIExhdW5jaEZyYWdtZW50LmNsYXNzKTsKLSAgICAvLyBUT0RPIE5lZWQgZGVmYXVsdHMgZm9yIHRoZXNlIHByb3BlcnRpZXMuCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiRm9yY2VMYXVuY2hPdXRzaWRlSURFIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiTGF1bmNoT3B0aW9ucyIsIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuY2xhc3MpOwotICAKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgCi0gICAgd2lkZ2V0UmVnaXN0cnlfID0gd2lkZ2V0UmVnaXN0cnk7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnlfKTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIlNlcnZlcldpemFyZFdpZGdldCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0VSVklDRSwKLQkJCQkgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCSAgICAgICAgewotCQkJCSAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkgICAgICAgICAgewotCQkJCSAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0KCB0cnVlLCBmYWxzZSApOwotCQkJCSAgICAgICAgICB9Ci0JCQkJICAgICAgICB9ICk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJUZXN0U2VydmljZSIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NURVNULAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VUZXN0V2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRUZXN0V2lkZ2V0IiwgCi0gICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TQU1QTEUsCi0gICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NBTVBMRSwKLSAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpZW50VGVzdFdpZGdldCgpOyAKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiUHVibGlzaCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfUFVCTElTSCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfUFVCTElTSCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHVibGlzaFdTV2lkZ2V0KHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gIH0KLSAgICAgIAotICBwcml2YXRlIGNsYXNzIENsaWVudEZyYWdtZW50IGV4dGVuZHMgQm9vbGVhbkZyYWdtZW50Ci0gIHsKLSAgICBib29sZWFuIGdlblByb3h5XyA9IGZhbHNlOwotICAgIAotICAgIHB1YmxpYyBDbGllbnRGcmFnbWVudCgpCi0gICAgeyAgICAgIAotICAgICAgc2V0Q29uZGl0aW9uKCBuZXcgQ29uZGl0aW9uKCkgCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlblByb3h5XzsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgCi0gICAgICBTZXF1ZW5jZUZyYWdtZW50IGNsaWVudFJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgCi0gICAgICBjbGllbnRSb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIGZhbHNlICksICIiKSk7Ci0gICAgICAvL2NsaWVudFJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50U2VydmVyRGVwbG95YWJsZUNvbmZpZ0NvbW1hbmQoKSwgIiIpKTsgLy9Ob3RlOiBhZGRlZCBoZXJlIGZvciBjbGllbnQgICAgIAotICAgICAgLy9jbGllbnRSb290LmFkZCggbmV3IENsaWVudEV4dGVuc2lvbkZyYWdtZW50KCkgKTsKLSAgICAgIGNsaWVudFJvb3QuYWRkKCBuZXcgQ2xpZW50Um9vdEZyYWdtZW50KCkgKTsKLSAgICAgIGNsaWVudFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgCi0gICAgICBzZXRUcnVlRnJhZ21lbnQoIGNsaWVudFJvb3QgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eSggYm9vbGVhbiBnZW5Qcm94eSApCi0gICAgewotICAgICAgZ2VuUHJveHlfID0gZ2VuUHJveHk7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gICAgewotICAgICAgLy8gTWFwIHRoZSBvdXRwdXQgb2YgdGhlIHNlcnZpY2Ugc2NlbmFyaW8gdG8gdGhlIGNsaWVudCBzY2VuYXJpby4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyRmFjdG9yeUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlckluc3RhbmNlSWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCSAgCi0gICAgICAKLSAgICAgIC8vIFNldHVwIHRoZSBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBudWxsKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RUeXBlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBudWxsICk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlQ2xpZW50IiwgbnVsbCApOyAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLSAgewotICAgIHB1YmxpYyBTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgICAgCi0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQgKG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7ICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCAiU2VydmVyV2l6YXJkV2lkZ2V0IiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTZXJ2aWNlUm9vdEZyYWdtZW50KCkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENyZWF0ZU1vbml0b3JDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDb21wdXRlRW5kcG9pbnRDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTZXJ2aWNlVGVzdEZyYWdtZW50KCAiVGVzdFNlcnZpY2UiKSApOwotICAgICAgYWRkKCBuZXcgQ2xpZW50RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IFRlc3REZWZhdWx0aW5nRnJhZ21lbnQoKSwiIikpOyAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IENsaWVudFRlc3RGcmFnbWVudCggIkNsaWVudFRlc3RXaWRnZXQiKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJQdWJsaXNoIikgKTsKLSAgICAgIGFkZChwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBPcGVuRWRpdG9yQ29tbWFuZCgpLCAiIikgKTsKLSAgICAgIGFkZChuZXcgTGF1bmNoRnJhZ21lbnQoKSk7Ci0gICAgICBhZGQobmV3IEZpbmlzaEZyYWdtZW50KCkpOwotICAgICAgCi0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gICAgewotICAgICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnlfKTsgICAKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOyAgICAgICAgICAgIAotCi0gICAgICAvLyBNYXAgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgdG8gT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBudWxsKTsKLSAgICAgIAotICAgICAgLy8gTWFwIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIHRvIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vIE1hcCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLiAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIlB1Ymxpc2hUb1B1YmxpY1VEREkiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgLy8gS1NDCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICAvL01hcCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsU2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxQcm9qZWN0IiwgbnVsbCk7ICAgICAgCi0KLSAgICAgIC8vTWFwIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQgdG8gU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgCi0gICAgICAvL3RvIHRoZSB0ZXN0IHdpemFyZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2aWNlVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFdTRExUZXN0TGF1bmNoQ29tbWFuZC5jbGFzcyk7ICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVJ1bnRpbWVJZCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdDJFQVJQcm9qZWN0IiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRWFyQ29tcG9uZW50TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVudGltZTJDbGllbnRUeXBlcyIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlSjJFRVZlcnNpb24iLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlTmVlZEVBUiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgCi0gICAgICAKLSAgICAgIC8vIE1hcCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmljZVRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2giLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBudWxsKTsKLQkgIAotCSAgICAvLyBTZXR1cCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIG5ldyBTZWxlY3Rpb25UcmFuc2Zvcm1lcigpICk7Ci0JCQotCSAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwgKTsgICAgICAKLQkJCQotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdENsaWVudCIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLSAgIAkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLQotICAgICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQgZm9yIFNlcnZlclN0YXJ0KCkKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotCi0gICAgICAvLyBNQVAgcG9zdCBzZXJ2ZXIgY29uZmlnIGNhbGwKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2V0RW5kcG9pbnRNZXRob2QiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotCSAgCi0gICAgICAvLyBNYXAgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclNlcnZlciIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCJTZXJ2aWNlU2VydmVyVHlwZUlkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MsIlNhbXBsZUV4aXN0aW5nU2VydmVyIiwgbmV3IFNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lcigpKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgCi0gICAgICAvLyBNYXAgT3BlbkVkaXRvckNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgT3BlbkVkaXRvckNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgICAgT3BlbkVkaXRvckNvbW1hbmQuY2xhc3MgKTsgICAgICAKLSAgICAgIAotICAgICAgLy9NYXAgRmluaXNoIENvbW1hbmQgCi0gICAgICAKLSAgICAgIAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI2ZDU1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMxNSAgIDEzMTk2MyByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDE4ICAgMTI5Njg4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyMyAgIDEzMzcxNCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyNSAgIDE0Mzg0MyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQotICogMjAwNzAzMTkJICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uIGFkZGVkIGluIHNvbWUgbnVsbCBjaGVja3MKLSAqIDIwMDcxMjEyCSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotICogMjAwODAzMjYgICAyMjEzNjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMjI1MDMyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA4MDUyNyAgIDIzNDIyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA3MzAgICAyNDI2MTEgemhhbmdAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDkyNSAgIDI0MjMxMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBDYW5ub3QgY3JlYXRlIEJVSkIgV1MgZnJvbSBCZWFuIGluIEphdmEgcHJvamVjdCB1c2luZyBBTlQgdGFza3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRGVmYXVsdGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUHJvamVjdFRvcG9sb2d5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5GYWNldE1hdGNoQ2FjaGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotewkKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5lcmF0ZVByb3h5Xz10cnVlOyAvL2p2aAotICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBzZXJ2aWNlSWRzXzsKLSAgcHJpdmF0ZSBib29sZWFuIHNlcnZpY2VJZHNGaXhlZF8gPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBpbml0aWFsUHJvamVjdF87Ci0gIHByaXZhdGUgYm9vbGVhbiBzZXJ2aWNlTmVlZEVBUl8gPSB0cnVlOwotICBwcml2YXRlIEZhY2V0TWF0Y2hlciBzZXJ2aWNlRmFjZXRNYXRjaGVyXzsKLQotICBwdWJsaWMgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIAotICAvKioKLSAgICogRGVmYXVsdHMgdGhlIGZvbGxvd2luZyBiaXRzIG9mIGluZm9ybWF0aW9uIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0gICAqIHNlcnZpY2VSdW50aW1lSWRfIDogdGhlIHNlcnZpY2VSdW50aW1lSWQuIE11c3QgYmUgZGVmYXVsdGVkIHRvIG5vbi1lbXB0eSBTdHJpbmcuCi0gICAqIHNlcnZpY2VJZHNfLnJ1bnRpbWVJZF86IHRoZSBXZWIgc2VydmljZSBydW50aW1lIGlkLiBNdXN0IGJlIGRlZmF1bHRlZCB0byBub24tZW1wdHkgU3RyaW5nLgotICAgKiBzZXJ2aWNlUHJvamVjdE5hbWVfIDogdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgcHJvamVjdC4gTXVzdCBiZSBub24tZW1wdHkuIE1heSBvciBtYXkgbm90IGV4aXN0LgotICAgKiBzZXJ2aWNlQ29tcG9uZW50VHlwZV86IHRoZSBpZCBvZiB0aGUgc2VydmljZSBwcm9qZWN0IHRlbXBsYXRlLiBNdXN0IGJlIGVtcHR5IGlmIHRoZSBzZXJ2aWNlCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBleGlzdHMuIE11c3QgYmUgbm9uLWVtcHR5IG9mIHRoZSBzZXJ2aWNlIHByb2plY3QgZG9lcyBub3QgZXhpc3QuCi0gICAqIHNlcnZpY2VJZHNfLnNlcnZlcklkXzogdGhlIHNlcnZlciB0eXBlIGlkLiBNYXkgYmUgYW4gZW1wdHkgU3RyaW5nIGlmIHRoZSBkZWZhdWx0ZWQgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgYSBzZXJ2ZXIuCi0gICAqIHNlcnZpY2VJZHNfLnNlcnZlckluc3RhbmNlSWRfOiB0aGUgc2VydmVyIGlkLiBNYXkgYmUgbnVsbCBvciBhbiBlbXB0eSBTdHJpbmcuCi0gICAqIHNlcnZpY2VOZWVkRUFSXzogdHJ1ZSBpZiBhbiBFQVIgaXMgbmVlZGVkLiBGYWxzZSBvdGhlcndpc2UuCi0gICAqIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV86IHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0LiBNdXN0IGJlIGVtcHR5IGlmIHRoZSBzZXJ2aWNlTmVlZEVBUl8gaXMgZmFsc2UuCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgbm9uLWVtcHR5IGlmIHRoZSBzZXJ2aWNlTmVlZEVBUl8gaXMgdHJ1ZS4KLSAgICogRGVmYXVsdHMgdGhlIHBhcmFsbGVsIGluZm9ybWF0aW9uIG9uIHRoZSBjbGllbnQtc2lkZSBpZiBuZWVkZWQgCi0gICAqIChAc2VlIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCNleGVjdXRlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICB0cnkKLSAgICB7ICAgIAkKLSAgICAgCi0gICAgIC8vKipTdGVwIDEqKiBEZWZhdWx0IHRoZSBzZXJ2aWNlUnVudGltZSBhbmQgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAgIC8vc2VydmljZUlkc0ZpeGVkXyBpcyBzZXQgdG8gdHJ1ZSBmb3IgdGhlIEFudCBzY2VuYXJpby4gSXQncyBhbHdheXMgZmFsc2UgZm9yIHRoZSB3aXphcmQKLSAgICAgLy9zY2VuYXJpb3MuICAgIAkKLSAgICAgaWYgKHNlcnZpY2VJZHNGaXhlZF8pCi0gICAgIHsKLSAgICAgICAvL1NldCB0aGUgc2VydmljZVJ1bnRpbWUgYmFzZWQgb24gdGhlIHJ1bnRpbWUgYW5kIHNlcnZlci4KLSAgICAgICAvL0lmIHVzZXIgc2V0IGEgc2VydmljZSBwcm9qZWN0IHVzZSB0aGF0IGFzIGluaXRpYWwgcHJvamVjdCBvdGhlcndpc2UgZGVmYXVsdCBmcm9tIGluaXRpYWwgc2VsZWN0aW9uLgotICAgICAgIC8vKGFib3ZlIGlzIHRydWUgZm9yIGFsbCBzY2VuYXJpb3MgZXhjZXB0IEJVSiBmcm9tIEphdmEgUHJvamVjdC0gZm9yIEJVSiBmcm9tIEphdmEgUHJvamVjdCBuZWVkIHRvIGNyZWF0ZSBhIGRlcGVuZGFuY3kgaW4gZG93bnN0cmVhbSBjb21tYW5kcwotICAgICAgIC8vYmV0d2VlbiB0aGUgaW5pdGlhbCBwcm9qZWN0IGFuZCB0aGUgc2VydmljZSBwcm9qZWN0IHNvIGRvbid0IHVzZSBhcyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gICAgICAgIAotICAgIAkgaWYgKHNlcnZpY2VQcm9qZWN0TmFtZV8gIT0gbnVsbCkgCi0gICAgCSB7Ci0gICAgCSAJIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgIAkgCSAvL3VzZSB0aGUgdXNlciBwcm92aWRlZCBzZXJ2aWNlIHByb2plY3QgdG8gZGVmaW5lIHRoZSBydW50aW1lIHRyaXBsZXQgKGlmIHVzZXIgcHJvdmlkZWQgc2VydmljZSBwcm9qZWN0IGlzIG5vdCB2YWxpZCBmb3IKLSAgICAJIAkgLy90aGUgd2ViIHNlcnZpY2UgdHlwZSwgdGhlIHJ1bnRpbWUgdHJpcGxldCB3aWxsIGNvbnRhaW4gYSBzdWl0YWJsZSBwcm9qZWN0IGlmIG9uZSBleGlzdHMpCi0gICAgCSAJIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBnZXREZWZhdWx0UnVudGltZShzZXJ2aWNlUHJvamVjdCwgc2VydmljZUlkc18uZ2V0VHlwZUlkKCksIGZhbHNlLCBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAJCSBpZiAoIShXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQoc2VydmljZUlkc18uZ2V0VHlwZUlkKCkpID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCAmJgotICAgIAkJICAgIAkJRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KGluaXRpYWxQcm9qZWN0XykpKXsKLSAgICAJCSAgICAgLy91c2VyIHNldCBhIHNlcnZpY2UgcHJvamVjdCwgdXNlIGFzIGluaXRpYWwgcHJvamVjdAotICAgIAkJCSAvL2luaXRpYWxQcm9qZWN0XyBpcyB0aGUgcHJvamVjdCB3aGVyZSB0aGUgc2VsZWN0ZWQgb2JqZWN0IHJlc2lkZXMsIHNldCB0byBiZSB0aGUgc2VydmljZSBwcm9qZWN0IGZvciBub3cgZm9yIGFsbCBzY2VuYXJpb3MgZXhjZXB0IEJVSiBmcm9tIEphdmEgUHJvamVjdCAoZm9yIAotICAgIAkJCSAvL0JVSiBmcm9tIEphdmEgUHJvamVjdCBuZWVkIHRvIGNyZWF0ZSBhIGRlcGVuZGFuY3kgaW4gZG93bnN0cmVhbSBjb21tYW5kcyBiZXR3ZWVuIHRoZSBpbml0aWFsIHByb2plY3QgYW5kIHRoZSBzZXJ2aWNlIHByb2plY3QpCi0gICAgCQkJIGluaXRpYWxQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotICAgIAkJIH0KLSAgICAJCSBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgIAkJCSBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7IC8vYSBzdWl0YWJsZSBzZXJ2aWNlIHByb2plY3QgZm9yIHRoZSB3ZWIgc2VydmljZSB0eXBlLCBvciBudWxsIGlmIGEgc3VpdGFibGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdAotICAgIAkgICAgIHNlcnZpY2VSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAKLQotICAgIAkgICAgICAgaWYgKHNlcnZpY2VSdW50aW1lSWRfICE9IG51bGwpCi0gICAgCSAgICAgICB7Ci0gICAgCSAgICAJICAgc2VydmljZUlkc18uc2V0UnVudGltZUlkKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJ1bnRpbWUoKQotICAgIAkgICAgICAJICAgICAgICAgLmdldElkKCkpOwotICAgIAkgICAgICAgfQotICAgIAkgfQotICAgIAkgZWxzZQotICAgIAkgewotICAgIAkJIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBnZXREZWZhdWx0U2VydmljZVJ1bnRpbWVGb3JGaXhlZFJ1bnRpbWVBbmRTZXJ2ZXIoaW5pdGlhbFByb2plY3RfLCBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpKTsgIAotICAgIAkgICAgIHNlcnZpY2VGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgIAkgICAgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBkcnQuZ2V0UHJvamVjdE5hbWUoKTsKLSAgICAJICAgICBzZXJ2aWNlUnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsJIAotICAgIAkgfSAgIAotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIC8vIFNldCB0aGUgcnVudGltZSBiYXNlZCBvbiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gZ2V0RGVmYXVsdFJ1bnRpbWUoaW5pdGlhbFByb2plY3RfLCBzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgZmFsc2UsIHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCkpOwotICAgICAgIGlmIChkcnQuZ2V0UHJvamVjdE5hbWUoKSA9PSBudWxsICYmIGluaXRpYWxQcm9qZWN0XyAhPSBudWxsCi0gICAgCSAgICYmIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZChzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSkgPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQCi0gICAgCSAgICYmIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpKS5lcXVhbHMoIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuZWpiIikgKQotICAgICAgIHsKLSAgICAJICAgZHJ0LnNldFByb2plY3ROYW1lKGluaXRpYWxQcm9qZWN0Xy5nZXROYW1lKCkpOwotICAgICAgIH0KLSAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgICAgc2VydmljZVJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7ICAgICAgIAotCi0gICAgICAgaWYgKHNlcnZpY2VSdW50aW1lSWRfICE9IG51bGwpCi0gICAgICAgewotICAgIAkgICBzZXJ2aWNlSWRzXy5zZXRSdW50aW1lSWQoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXykuZ2V0UnVudGltZSgpCi0gICAgCQkgICAgICAgICAuZ2V0SWQoKSk7IAotICAgICAgIH0gCi0gICAgIH0KLSAgICAgCi0gICAgIC8vKipTdGVwIDIqKiBEZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IGRlZmF1bHRlZCAKLSAgICAgLy9hcyBwYXJ0IG9mIGRlZmF1bHRpbmcgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAgIGlmIChzZXJ2aWNlUHJvamVjdE5hbWVfID09IG51bGwpCi0gICAgIHsKLSAgICAgICAvLyBQcm9qZWN0IG5hbWUgZGlkIG5vdCBnZXQgc2V0IHdoZW4gdGhlIHJ1bnRpbWUgd2FzIHNldCwgc28gc2V0IGl0IG5vdwotICAgICAgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBnZXREZWZhdWx0U2VydmljZVByb2plY3ROYW1lKCk7Ci0gICAgIH0KLQotICAgICAvLyoqU3RlcCAzKiogRGVmYXVsdCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGUuCi0gICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOyAKLSAgICAgaWYgKCFzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICAgewotICAgICAgIC8vIFNldCB0aGUgcHJvamVjdCB0ZW1wbGF0ZQotICAgICAgIHNlcnZpY2VDb21wb25lbnRUeXBlXyA9IGdldERlZmF1bHRTZXJ2aWNlUHJvamVjdFRlbXBsYXRlKCk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgLy9TZXQgaXQgdG8gYW4gZW1wdHkgU3RyaW5nCi0gICAgICAgc2VydmljZUNvbXBvbmVudFR5cGVfID0gIiI7Ci0gICAgIH0KLSAgICAgLy8qKlN0ZXAgNCoqIERlZmF1bHQgdGhlIHNlcnZlciBpZiB0aGlzIGlzIG5vdCBhbiBBbnQgc2NlbmFyaW8uCi0gICAgIGlmICghc2VydmljZUlkc0ZpeGVkXykKLSAgICAgewotICAgICAgIC8vIFNldCB0aGUgc2VydmVyCi0gICAgICAgSVN0YXR1cyBzZXJ2ZXJTdGF0dXMgPSBzZXRTZXJ2aWNlRGVmYXVsdFNlcnZlcigpOwotICAgICAgIGlmIChzZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgewotICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzZXJ2ZXJTdGF0dXMpOwotICAgICAgICAgcmV0dXJuIHNlcnZlclN0YXR1czsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIC8vKipTdGVwIDUqKiBEZWZhdWx0IGNsaWVudE5lZWRFQVIgYW5kIGNsaWVudCBFQVIgaWYgYW4gRUFSIGlzIG5lZWRlZAotICAgICBzZXREZWZhdWx0U2VydmljZUVhclByb2plY3QoKTsKLSAgICAgCi0gICAgIC8vIGp2aCAtIGZvciBub3cgY29tbWVudCBvdXQgZ2VuZXJhdGUgcHJveHkKLSAgICAgLy8gICBuZWVkIHRvIGxvb2sgYXQgZGVmYXVsdGluZyBiYXNlZCBvbiBhbiBldmVudAotICAgICAvLyAgICBvbiBwYWdlIDEgLSB3aGVuIGNsaWVudCBnZW5lcmF0aW9uIGdvZXMgZnJvbSBub25lCi0gICAgIC8vICAgIHRvIGRldmVsb3AuLi4KLSAgICAgLyppZiAoZ2VuZXJhdGVQcm94eV8pCi0gICAgIHsqLwotICAgIAkgLy9EZWZhdWx0IHRoZSBjbGllbnQtc2lkZS4KLSAgICAJIElTdGF0dXMgY2xpZW50U2lkZVN0YXR1cyA9IGRlZmF1bHRDbGllbnRTaWRlKG1vbml0b3IpOwotICAgICAgICAgaWYgKGNsaWVudFNpZGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICB7Ci0gICAgICAgICAgIHJldHVybiBjbGllbnRTaWRlU3RhdHVzOwotICAgICAgICAgfSAgICAgICAgICAgICAgICAgIAotICAgIC8vIH0KLSAgICAgICAgICAKLSAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgIAotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIENhdGNoIGFsbCBFeGNlcHRpb25zIGluIG9yZGVyIHRvIGdpdmUgc29tZSBmZWVkYmFjayB0byB0aGUgdXNlcgotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBlLmdldE1lc3NhZ2UoKSB9KSwgZSk7Ci0gICAgICAKLSAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gaGFzIG5vIGVycm9yIG1zZywgaXQncyBraW5kIG9mIHVzZWxlc3MgdG8gdGhlIHVzZXIgc28gbGV0J3MgbG9nIGl0Ci0gICAgICBpZiAoIGUuZ2V0TWVzc2FnZSgpID09IG51bGwpewotICAgICAgCUlMb2cgcGx1Z2lubG9nID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRMb2coKTsKLSAgICAgIAlwbHVnaW5sb2cubG9nKGVycm9yU3RhdHVzKTsKLSAgICAgIAkgIAotICAgICAgCS8vIGNyZWF0ZSBhIG5ldyBJU3RhdHVzIHdoaWNoIGhhcyBhIG5vbi1udWxsIG1zZywgdGhpcyBpcyB0byBiZSB0aHJvd24gdG8gdGhlIHVzZXIuCi0gICAgICAJZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQsCi0gICAgCSAgICAgICAgICBuZXcgU3RyaW5nW10geyBXU1VJUGx1Z2luTWVzc2FnZXMuTVNHX1NFRV9FUlJPUl9MT0cgfSksIGUpOyAgCi0gICAgICB9Ci0gICAgICAgIAotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIGRlZmF1bHRDbGllbnRTaWRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLSAgewotICAgIElTdGF0dXMgY2xpZW50RGVmYXVsdEZyb21TZXJ2aWNlU3RhdHVzID0gZGVmYXVsdENsaWVudFNpZGVGcm9tU2VydmljZVNpZGUoc2VydmljZVByb2plY3ROYW1lXywgc2VydmljZUlkc18sIHNlcnZpY2VOZWVkRUFSXywgc2VydmljZUVhclByb2plY3ROYW1lXyk7Ci0KLSAgICAvLyBJZiBhbiBlcnJvciBzdGF0dXMgaXMgcmV0dXJuZWQsIHRoZSBvbmx5IHByb3BlcnR5IHRoYXQgd2FzIHNldCBvbiAKLSAgICAvLyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgaXMgY2xpZW50UHJvamVjdE5hbWVfLiAKLSAgICAvLyBUaGUgcmVzdCBvZiB0aGUgcHJvcGVydGllcyBpbmNsdWRpbmcgY2xpZW50UnVudGltZUlkXywgY2xpZW50Q29tcG9uZW50VHlwZV8sIAotICAgIC8vIGFsbCB0aGUgdmFsdWVzIGluIGNsaWVudElkc18sIGNsaWVudE5lZWRFQVJfLCBhbmQgY2xpZW50RWFyUHJvamVjdE5hbWVfIAotICAgIC8vIGhhdmUgbm90IGJlZW4gc2V0IGJlY2F1c2UgdGhlIHNlcnZpY2Ugc2lkZSBzZXJ2ZXIgYW5kCi0gICAgLy8gd2ViIHNlcnZpY2UgcnVudGltZSBjb3VsZCBub3QgYmUgdXNlZCBvbiB0aGUgY2xpZW50IHNpZGUuIFJ1biB0aGUgZW50aXJlCi0gICAgLy8gY2xpZW50LXNpZGUgZGVmYXVsdGluZyBhbGdvcml0aG0gdXNpbmcgY2xpZW50UHJvamVjdE5hbWVfIGFzIHRoZSAKLSAgICAvLyBjbGllbnRJbml0aWFsUHJvamVjdF8uIFRoZW4gdXBkYXRlIHRoZSBjbGllbnRFYXJQcm9qZWN0TmFtZV8gYmFzZWQgb24gdGhlCi0gICAgLy8gc2VydmljZSBzaWRlIEVBUi4KLSAgICBpZiAoY2xpZW50RGVmYXVsdEZyb21TZXJ2aWNlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICB7Ci0gICAgICAvLyAxLiBSdW4gY2xpZW50IHNpZGUgZGVmYXVsdGluZyBmcm9tIHNjcmF0Y2ggd2l0aCBjbGllbnRJbml0aWFsUHJvamVjdF8KLSAgICAgIC8vIHNldCB0byB0aGUgbmV3IGNsaWVudFByb2plY3ROYW1lXy4KLSAgICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSk7Ci0gICAgICBzZXRDbGllbnRJbml0aWFsUHJvamVjdChjbGllbnRQcm9qZWN0KTsKLSAgICAgIElTdGF0dXMgY2xpZW50RXhlY3V0ZVN0YXR1cyA9IHN1cGVyLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0gICAgICBpZiAoY2xpZW50RXhlY3V0ZVN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNsaWVudEV4ZWN1dGVTdGF0dXM7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDIuIFVwZGF0ZSB0aGUgY2xpZW50LXNpZGUgRUFSIGlmIHNlcnZpY2VOZWVkRUFSXyBpcyB0cnVlOwotICAgICAgaWYgKHNlcnZpY2VOZWVkRUFSXykKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdENsaWVudEVhckZyb21TZXJ2aWNlRWFyKHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8pOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIAotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdFNlcnZpY2VFYXJQcm9qZWN0KCkKLSAgewotICAgIC8vRG9uJ3QgbmVlZCBhbiBlYXIgaWYgdGhpcyBpcyBhIEphdmEgcHJvamVjdCwgb3IgaWYgdGhlIHNlbGVjdGVkIHRlbXBsYXRlIGlzIGpzdC51dGlsaXR5Ci0gICAgSVByb2plY3Qgc2VydmljZVByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgaWYgKHNlcnZpY2VQcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHNlcnZpY2VOZWVkRUFSXyA9ICEoRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXJ2aWNlTmVlZEVBUl8gPSAhKEZhY2V0VXRpbHMuaXNVdGlsaXR5VGVtcGxhdGUoc2VydmljZUNvbXBvbmVudFR5cGVfKSk7ICAKLSAgICB9ICAgIAotICAgIAotICAgIC8vSWYgc2VydmljZU5lZWRFQVJfIGlzIHN0aWxsIHRydWUsIGl0IG1lYW5zIHRoYXQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIEphdmEgcHJvamVjdAotICAgIC8vb3IgSmF2YSBwcm9qZWN0IHR5cGUuIENoZWNrIHRoZSBzZXJ2ZXIuCi0gICAgCi0gICAgCi0gICAgaWYgKHNlcnZpY2VOZWVkRUFSXykKLSAgICB7Ci0gICAgICAKLSAgICAgIC8vIERldGVybWluZSBpZiBhbiBlYXIgc2VsZWN0aW9uIGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUgc2VydmVyIHR5cGUuICAgICAgCi0gICAgICBTdHJpbmcgc2VydmVySWQgPSBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpOwotICAgICAgaWYgKHNlcnZlcklkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFVzZSB0aGUgc2VydmVyIHR5cGUKLSAgICAgICAgU3RyaW5nIHNlcnZlclRhcmdldElkID0gU2VydmVyVXRpbHMuZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZChzZXJ2ZXJJZCk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUYXJnZXRJZCAhPSBudWxsICYmIHNlcnZlclRhcmdldElkLmxlbmd0aCgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICghU2VydmVyVXRpbHMuaXNUYXJnZXRWYWxpZEZvckVBUihzZXJ2ZXJUYXJnZXRJZCwgIjEzIikpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gRGVmYXVsdCB0aGUgRUFSIHNlbGVjdGlvbiB0byBiZSBlbXB0eQotICAgICAgICAgICAgc2VydmljZU5lZWRFQVJfID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgeyAvLyBzZXJ2ZXJJZCA9PSBudWxsLCBhc3N1bWUgdGhhdCBpdCBkb2VzIG5vdCBuZWVkIEVBUgotICAgIAkgIHNlcnZpY2VOZWVkRUFSXyA9IGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoc2VydmljZU5lZWRFQVJfKQotICAgIHsKLSAgICAgIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2VydmljZUVhclByb2plY3ROYW1lXyA9ICIiOwotICAgIH0gICAKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIHNldFNlcnZpY2VEZWZhdWx0U2VydmVyKCkKLSAgewotICAgIC8vQ2hvb3NlIGFuIGV4aXN0aW5nIHNlcnZlciB0aGUgbW9kdWxlIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGlmIHBvc3NpYmxlCi0gICAgSVByb2plY3Qgc2VydmljZVByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgSVNlcnZlcltdIGNvbmZpZ3VyZWRTZXJ2ZXJzID0gbnVsbDsKLSAgICBpZihzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICAJY29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZShTZXJ2ZXJVdGlscy5nZXRNb2R1bGUoc2VydmljZVByb2plY3QpLCBudWxsKTsKLSAgICAKLSAgICBpZiAoY29uZmlndXJlZFNlcnZlcnMhPW51bGwgJiYgY29uZmlndXJlZFNlcnZlcnMubGVuZ3RoPjApCi0gICAgewotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChjb25maWd1cmVkU2VydmVyc1swXS5nZXRJZCgpKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBjaG9vc2UgYSBzdWl0YWJsZSBzZXJ2ZXIgb3Igc2VydmVyIHR5cGUgYmFzZWQgb24gdGhlIGV4aXN0aW5nIHByb2plY3QncyBydW50aW1lIG9yIGZhY2V0cwotICAgIGlmIChzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21Qcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VGYWNldE1hdGNoZXJfKTsKLSAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySWQoc2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLSAgICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VGYWNldE1hdGNoZXJfKTsKLSAgICAgICAgaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKHNlcnZlclR5cGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9IYXZlbid0IHBpY2tlZCBhIHNlcnZlci9zZXJ2ZXIgdHlwZSBvbiB0aGUgYmFzaXMgb2YgdGhlIHByb2plY3QuIFBpY2sgYSBzZXJ2ZXIvc2VydmVyIHR5cGUKLSAgICAvL3RoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzZXJ2aWNlUnVudGltZUlkLgotICAgIElTZXJ2ZXIgc2VydmVyID0gZ2V0U2VydmVyRnJvbVNlcnZpY2VSdW50aW1lSWQoKTsKLSAgICBpZiAoc2VydmVyIT1udWxsKQotICAgIHsKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZlci5nZXRJZCgpKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0KLSAgICAKLSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21TZXJ2aWNlUnVudGltZUlkKCk7Ci0gICAgaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfSAgICAKLQotICAgIC8vTm8gc3VpdGFibGUgc2VydmVyIHdhcyBmb3VuZC4gUG9wdXAgYW4gZXJyb3IuCi0gICAgUnVudGltZURlc2NyaXB0b3IgcnVudGltZURlc2NyaXB0b3IgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChzZXJ2aWNlSWRzXy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgaWYgKHJ1bnRpbWVEZXNjcmlwdG9yLmdldFNlcnZlclJlcXVpcmVkKCkpCi0gICAgeyAgICAKLSAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpKTsgICAgCi0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUUsIG5ldyBTdHJpbmdbXXtydW50aW1lTGFiZWx9KSApOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBJU2VydmVyIGdldFNlcnZlckZyb21TZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gICAgaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApIAotICAgIHsKLSAgICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0KLSAgICAgIC8vSWYgYSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSBpcyBwcmVzZW50LCBjaGVjayB0aGF0IG9uZSBmaXJzdAotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2ZXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgIAlpZiAoc2VydmVyc1tqXSAhPSBudWxsICYmIHNlcnZlcnNbal0uZ2V0U2VydmVyVHlwZSgpICE9IG51bGwpCi0gICAgCXsKLQkgICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotCSAgICAgICAgaWYgKHNlcnZlckZhY3RvcnlJZC5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRTZXJ2ZXIoc2VydmljZVJ1bnRpbWVJZF8sIHNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICByZXR1cm4gc2VydmVyc1tqXTsKLQkgICAgICAgICAgfQotCSAgICAgICAgfSAgCi0gICAgCX0KLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9BIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGNvdWxkIG5vdCBiZSBmb3VuZCBvciBkaWQgbm90IG1hdGNoLiBDaGVjayBhbGwgdGhlIGV4aXN0aW5nIHNlcnZlcnMuICAgIAotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgIAlpZiAoc2VydmVyc1tpXSAhPSBudWxsICYmIHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpICE9IG51bGwpCi0gICAgCXsKLQkgICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotCSAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRTZXJ2ZXIoc2VydmljZVJ1bnRpbWVJZF8sIHNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOwotCSAgICAgICAgfQotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBJU2VydmVyVHlwZSBnZXRTZXJ2ZXJUeXBlRnJvbVNlcnZpY2VSdW50aW1lSWQoKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmVyVHlwZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlUnVudGltZShzZXJ2aWNlUnVudGltZUlkXyk7Ci0gICAgaWYgKHNlcnZlclR5cGVzIT1udWxsICYmIHNlcnZlclR5cGVzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIC8vUmV0dXJuIHRoZSBwcmVmZXJyZWQgb25lIGlmIGl0IGlzIGluIHRoZSBsaXN0Ci0gICAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoc2VydmVyVHlwZXNbaV0uZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZXNbMF0pOwotICAgIH0gICAgCi0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0gIAotICAKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldERlZmF1bHRTZXJ2aWNlUHJvamVjdFRlbXBsYXRlKCkKLSAgewotICAgIFN0cmluZ1tdIHRlbXBsYXRlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VQcm9qZWN0VGVtcGxhdGVzKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpLCBzZXJ2aWNlSWRzXy5nZXRSdW50aW1lSWQoKSk7ICAgIAotICAgIAotICAgIC8vV2FsayB0aGUgbGlzdCBvZiBzZXJ2aWNlIHByb2plY3QgdHlwZXMgaW4gdGhlIHByb2plY3QgdG9wb2xvZ3kgcHJlZmVyZW5jZQotICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgcHRjPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRTZXJ2aWNlVHlwZXMoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHByZWZlcnJlZFRlbXBsYXRlSWRzLmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcGxhdGVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgdGVtcGxhdGVJZCA9IHRlbXBsYXRlc1tpXTsKLSAgICAgICAgaWYgKHRlbXBsYXRlSWQuZXF1YWxzKHByZWZlcnJlZFRlbXBsYXRlSWRzW2pdKSkKLSAgICAgICAgewotICAgICAgICAgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShzZXJ2aWNlUnVudGltZUlkXywgdGVtcGxhdGVJZCk7Ci0gICAgICAgICAgaWYgKG1hdGNoZXMpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlc1tpXTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9TaW5jZSB0aGUgcHJlZmVycmVkVGVtcGxhdGVJZHMgY29udGFpbnMgdGhlIHVuaW9uIG9mIGFsbCBwcm9qZWN0IHR5cGVzIGZvciBhbGwgc2VydmljZSBydW50aW1lcywgd2UgYXJlCi0gICAgLy9ndWFyYW50ZWVkIHRvIGhhdmUgcmV0dXJuZWQgYnkgbm93LCBzbyB0aGUgY29kZSBiZWxvdyB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIHVuZGVyIG5vcm1hbAotICAgIC8vY2lyY3Vtc3RhbmNlcy4gSnVzdCByZXR1cm4gc29tZXRoaW5nIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyLgotICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID4gMCkKLSAgICAgIHJldHVybiB0ZW1wbGF0ZXNbMF07Ci0gICAgCi0gICAgcmV0dXJuICIiOyAgICAKLSAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0U2VydmljZVByb2plY3ROYW1lKCkKLSAgewotICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBGYWNldFV0aWxzLmdldEFsbFByb2plY3RzKCk7Ci0gICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWRfKTsKLSAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMgPSBkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgIAotICAgIC8vQ2hlY2sgZWFjaCBwcm9qZWN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHNlcnZpY2VSdW50aW1lCi0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gbnVsbDsKLSAgICAgIFN0cmluZyBmUnVudGltZU5hbWUgPSBudWxsOwotICAgICAgZlJ1bnRpbWUgPSBGYWNldFV0aWxzLmdldEZhY2V0UnVudGltZUZvclByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgIGlmIChmUnVudGltZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBmUnVudGltZU5hbWUgPSBmUnVudGltZS5nZXROYW1lKCk7ICAgICAgICAKLSAgICAgIH0gICAgICAgICAgICAgIAotICAgICAgCi0gICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgewotICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QoZmFsc2UsIHNlcnZpY2VSdW50aW1lSWRfLCBwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgICBib29sZWFuIGZhY2V0UnVudGltZU1hdGNoZXMgPSB0cnVlOwotICAgICAgICBpZiAoZlJ1bnRpbWVOYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWNldFJ1bnRpbWVNYXRjaGVzID0gRmFjZXRVdGlscy5pc0ZhY2V0UnVudGltZVN1cHBvcnRlZChyZnZzLCBmUnVudGltZU5hbWUpOyAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChmbS5pc01hdGNoKCkgJiYgZmFjZXRSdW50aW1lTWF0Y2hlcykKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VGYWNldE1hdGNoZXJfID0gZm07Ci0gICAgICAgICAgcmV0dXJuIHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vTm8gcHJvamVjdCB3YXMgc3VpdGFibGUsIHJldHVybiBhIG5ldyBwcm9qZWN0IG5hbWUKLSAgICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXREZWZhdWx0V2ViUHJvamVjdE5hbWUoKTsKLSAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIERlZmF1bHRSdW50aW1lVHJpcGxldCBnZXREZWZhdWx0U2VydmljZVJ1bnRpbWVGb3JGaXhlZFJ1bnRpbWVBbmRTZXJ2ZXIoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXIpCi0gIHsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlUnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpLCBydW50aW1lUHJlZmVycmVkU2VydmVyKTsKLSAgICBBcnJheUxpc3Q8U3RyaW5nPiB2YWxpZFNlcnZpY2VSdW50aW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2aWNlUnVudGltZXMubGVuZ3RoOyBpKysgKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZXNbaV0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgc2VydmVyCi0gICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKGRlc2MuZ2V0SWQoKSwgc2VydmljZUlkc18uZ2V0U2VydmVySWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxpZFNlcnZpY2VSdW50aW1lcy5hZGQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpICAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QoZmFsc2UsIHNlcnZpY2VSdW50aW1lc1tpXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZHJ0OwotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIAotICAgIGlmICh2YWxpZFNlcnZpY2VSdW50aW1lcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIC8vV2UgY291bGRuJ3QgbWF0Y2ggdG8gdGhlIGluaXRpYWxseSBzZWxlY3RlZCBwcm9qZWN0IHNvIHJldHVybiB0aGUgZmlyc3QgdmFsaWQgcnVudGltZS4KLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgZHJ0LnNldFJ1bnRpbWVJZCgoKFN0cmluZ1tdKXZhbGlkU2VydmljZVJ1bnRpbWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQgbWF0Y2ggdGhlIGZpeGVkIHJ1bnRpbWUgYW5kIHNlcnZlci4gRmFsbCBiYWNrIHRvIG9yaWdpbmFsIGFsZ29yaXRobS4KLSAgICAgIHNlcnZpY2VJZHNGaXhlZF8gPSBmYWxzZTsKLSAgICAgIHJldHVybiBnZXREZWZhdWx0UnVudGltZShwcm9qZWN0LCBzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgZmFsc2UsIHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCkpOwotICAgIH0KLSAgfQotICAKLQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFByb2plY3QoSVByb2plY3QgaW5pdGlhbFByb2plY3QpCi0gIHsKLSAgICBpbml0aWFsUHJvamVjdF8gPSBpbml0aWFsUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBpbml0aWFsUHJvamVjdF87ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbENvbXBvbmVudE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAvL1RPRE8gVGhpcyBtZXRob2QgYW5kIGFueSBtYXBwaW5ncyB0byBpdAotCS8vIHNob3VsZCBiZSByZW1vdmVkIGlmIG5vIGxvbmdlciBuZWVkZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewotICAgIHNlcnZpY2VJZHNfID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSWRzRml4ZWQoYm9vbGVhbiBiKQotICB7Ci0gICAgc2VydmljZUlkc0ZpeGVkXyA9IGI7ICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc187IAotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlUnVudGltZUlkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5lcmF0ZVByb3h5Xy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gZ2VuZXJhdGVQcm94eV8gVGhlIGdlbmVyYXRlUHJveHlfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5XykKLSAgewotICAgIHRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5XzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0TmFtZV87ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZU5lZWRFQVIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VOZWVkRUFSXzsKLSAgfQotICAKLSAgLy8gVGhpcyBpcyBmb3IgdGhlIEFudCBzY2VuYXJpbyB3aGVyZSB0aGUgc2VydmljZSBwcm9qZWN0IG5hbWUgY2FuIGJlIHNldCBpbiB0aGUgcHJvcGVydHkgZmlsZS4KLSAgLy8gSWYgdGhlIHVzZXIgaGFzIHNldCB0aGUgU2VydmljZVByb2plY3ROYW1lIHVzZSBpdCBmb3IgZGVmYXVsdGluZyBwdXJwb3NlcwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBuYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L0xhdW5jaEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNmRmODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotCi0KLXB1YmxpYyBjbGFzcyBMYXVuY2hGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gcHVibGlzaFRvUHVibGljVURESV87ICAKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJXzsKLSAgCi0gIHB1YmxpYyBMYXVuY2hGcmFnbWVudCgpCi0gIHsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0gICAgewotICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgewotICAgICAgICByZXR1cm4gKHB1Ymxpc2hUb1B1YmxpY1VERElfIHx8IHB1Ymxpc2hUb1ByaXZhdGVVRERJXyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIHNldFRydWVGcmFnbWVudCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpLCAiIiApICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1B1YmxpY1VEREkoYm9vbGVhbiBwdWJsaXNoVG9QdWJsaWNVRERJKQotICB7Ci0gICAgcHVibGlzaFRvUHVibGljVURESV8gPSBwdWJsaXNoVG9QdWJsaWNVRERJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVG9Qcml2YXRlVURESShib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJKQotICB7Ci0gIAlwdWJsaXNoVG9Qcml2YXRlVURESV8gPSBwdWJsaXNoVG9Qcml2YXRlVURESTsKLSAgfQotICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGUxNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XU0RMVGVzdExhdW5jaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlOwotICBwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVQcm94eTsKLSAgCi0gIAotICBwdWJsaWMgU2VydmljZVRlc3RGcmFnbWVudCggU3RyaW5nIGlkICkKLSAgewotICAJU2VxdWVuY2VGcmFnbWVudCB0ZXN0Um9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gIAlDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RTZXJ2aWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIAotICAgIHRlc3RSb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgdGVzdFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIGlkICkgKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIHRlc3RSb290ICk7Ci0gICAgICAKLSAgfQotIAotICAKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgCQotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RJRCIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgCQotICAJLy9mcm9tIHRoZSB3aXphcmQgCi0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFeHRlcm5hbEJyb3dzZXIiLFdTRExUZXN0TGF1bmNoQ29tbWFuZC5jbGFzcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gIAl0aGlzLmdlbmVyYXRlUHJveHkgPSBnZW5lcmF0ZVByb3h5OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAJcmV0dXJuIGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRlc3RTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIGJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1NlcnZpY2VUZXN0V2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMTg2ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV1NETFRlc3RMYXVuY2hDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VUZXN0V2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiOwotCi0gIHByaXZhdGUgQ29tYm8gdGVzdFR5cGVDb21ib187Ci0gIC8qQ09OVEVYVF9JRCBQU1RQMDAwMSBmb3IgdGhlIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QU1RQX0NPTUJPQk9YX1RFU1QgPSAiUFNUUDAwMDEiOwotCi0gIHByaXZhdGUgQnV0dG9uIGxhdW5jaEJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQU1RQMDAwMiBmb3IgdGhlIGxhdW5jaCBidXR0b24gb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QU1RQX0xBVU5DSF9CVVRUT04gPSAiUFNUUDAwMDIiOwotCi0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgZmFjaWxpdGllc187Ci0gIAotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IG51bGw7Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoY3JlYXRlUGx1Z2luSWRfICk7Ci0gICAgICAgIAotICAgIENvbXBvc2l0ZSB0ZXN0Q29tcG9zaXRlID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMywgMCwgMCApOwotICAgIAotICAgIHRlc3RUeXBlQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggdGVzdENvbXBvc2l0ZSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFU1RfVFlQRVMsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFNUUF9DT01CT0JPWF9URVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QU1RQX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICAKLSAgICBsYXVuY2hCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCB0ZXN0Q29tcG9zaXRlLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0xBVU5DSF9TRVJWSUNFX1RFU1QsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFNUUF9MQVVOQ0hfQlVUVE9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QU1RQX0xBVU5DSF9CVVRUT04gKTsKLSAgICBsYXVuY2hCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2ZW50ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGF1bmNoQnV0dG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VpZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIG1vZHVsZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSAiIjsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52OwotICBwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUxhdW5jaEJ1dHRvbigpCi0gIHsKLQkvLyBTcGxpdCB1cCB0aGUgcHJvamVjdCBhbmQgbW9kdWxlCi0JaW50IHAgPSBzZXJ2ZXJQcm9qZWN0LmluZGV4T2YoIi8iKTsKLQlpZiAocCAhPSAtMSl7Ci0JCW1vZHVsZSA9IHNlcnZlclByb2plY3Quc3Vic3RyaW5nKHArMSk7Ci0JCXNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0LnN1YnN0cmluZygwLHApOwotCX0KLSAgCQotICAJU3RyaW5nIHRlc3RJRCA9IHRlc3RUeXBlQ29tYm9fLmdldFRleHQoKTsKLSAgCWxhdW5jaGVkU2VydmljZVRlc3ROYW1lID0gdGVzdElEOwotICAJV1NETFRlc3RMYXVuY2hDb21tYW5kIHd0bGMgPSBuZXcgV1NETFRlc3RMYXVuY2hDb21tYW5kKCk7Ci0gIAl3dGxjLnNldFRlc3RJRCh0ZXN0SUQpOwotICAJd3RsYy5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoc2VydmljZWlkcyk7Ci0JICB3dGxjLnNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgCXd0bGMuc2V0U2VydmVyUHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkgIHd0bGMuc2V0U2VydmVyTW9kdWxlKG1vZHVsZSk7Ci0gIAl3dGxjLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0gIAl3dGxjLnNldEV4dGVybmFsQnJvd3Nlcih0cnVlKTsKLSAgCXd0bGMuc2V0RW5kcG9pbnQoZW5kcG9pbnRzKTsKLSAgCXd0bGMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAJd3RsYy5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUZXN0RmFjaWxpdGllcyggU2VsZWN0aW9uTGlzdCBmYWNpbGl0aWVzICkKLSAgewotICAgIGZhY2lsaXRpZXNfID0gZmFjaWxpdGllczsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZXRJdGVtcyggZmFjaWxpdGllcy5nZXRMaXN0KCkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZWxlY3QoIGZhY2lsaXRpZXMuZ2V0SW5kZXgoKSApOwotICB9Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRTZXJ2aWNlVGVzdEZhY2lsaXRpZXMoKQotICB7Ci0gICAgZmFjaWxpdGllc18uc2V0SW5kZXgoIHRlc3RUeXBlQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCkgKTsKLSAgICByZXR1cm4gZmFjaWxpdGllc187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RJRCgpCi0gIHsKLSAgCXJldHVybiB0ZXN0VHlwZUNvbWJvXy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmljZWlkcykKLSAgewotICAgIHRoaXMuc2VydmljZWlkcyA9IHNlcnZpY2VpZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW52aXJvbm1lbnQoSUVudmlyb25tZW50IGVudikKLSAgewotICAJdGhpcy5lbnYgPSBlbnY7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpCi0gIHsKLSAgICBpZiAoZW5kcG9pbnQgIT0gbnVsbCAmJiBlbmRwb2ludC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB2LmFkZChlbmRwb2ludCk7Ci0gICAgICBzZXRFbmRwb2ludHModik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludHMoTGlzdCBlbmRwb2ludHMpCi0gIHsKLSAgICB0aGlzLmVuZHBvaW50cyA9IGVuZHBvaW50czsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNzSW5zdGFuY2VJZCl7Ci0JICB0aGlzLnNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkID0gc3NJbnN0YW5jZUlkOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFkNmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gQXByIDE1LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3Qgc2VydmljZVRlc3RGYWNpbGl0aWVzOwkKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0ZXN0SUQ7Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgCVNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuY29weSgpOwotICAJdGVzdElEID0gc2NlbmFyaW9Db250ZXh0LmdldE5vbkphdmFUZXN0U2VydmljZSgpOwotICAJU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsKLSAgCSAgCQotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3R0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAkKLSAgICAKLSAgCVZlY3RvciB3c2RsTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAlmb3IoaW50IGkgPTAgO2k8dGVzdFR5cGVzLmxlbmd0aDtpKyspewotICAJICBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil3c3R0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdFR5cGVzW2ldKTsgIAkKLSAgCSAgaWYod3NjdGUudGVzdFdTREwoKSl7Ci0gIAkgICAgd3NkbE5hbWVzLmFkZEVsZW1lbnQodGVzdFR5cGVzW2ldKTsKLSAgCSAgfQotICAJfQotICAgIAotICAJU3RyaW5nIGphdmFOYW1lc0FycmF5W10gPSBuZXcgU3RyaW5nW3dzZGxOYW1lcy5zaXplKCldOwotICAJRW51bWVyYXRpb24gZSA9IHdzZGxOYW1lcy5lbGVtZW50cygpOwotICAJaW50IGkgPSAwOwotICAJd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICBqYXZhTmFtZXNBcnJheVtpXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAJICBpKys7Ci0gIAl9Ci0gIAkKLSAgCQotICAJc2VydmljZVRlc3RGYWNpbGl0aWVzID0gbmV3IFNlbGVjdGlvbkxpc3QoamF2YU5hbWVzQXJyYXksMCk7ICAJCi0gIAkKLSAJcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFNlcnZpY2VUZXN0RmFjaWxpdGllcygpCi0gIHsKLSAgCXJldHVybiBzZXJ2aWNlVGVzdEZhY2lsaXRpZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0VGVzdElEKCkKLSAgewotICAJcmV0dXJuIHRlc3RJRDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RXh0ZXJuYWxCcm93c2VyKCkKLSAgewotICAJcmV0dXJuIGZhbHNlOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE3YTFmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLUBkb3QqCi10ZW1wLmZvbGRlcgotYnVpbGQueG1sCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjhjMDk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWY2ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luLm5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5KQVhSU1VJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS40LjEwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy41LjEwMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy42LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQudWk7YnVuZGxlLXZlcnNpb249IlszLjYuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjQwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi42LjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4yMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuNC4xMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQudWk7YnVuZGxlLXZlcnNpb249IlsxLjQuMTAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjEuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzIuMC40MDAsMy4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWw7Ci0gb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLmNsYXNzcGF0aDsKLSBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwucHJvamVjdC5mYWNldAotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LnVpLmxpYnByb3YKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWYzNzUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5PY3RvYmVyLCAyMDA5PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjRhZmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvaWNvbnMvZnVsbC93aXpiYW4vYWRkbGlicmFyeV93aXouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvaWNvbnMvZnVsbC93aXpiYW4vYWRkbGlicmFyeV93aXouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjhjOWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2FkZGxpYnJhcnlfd2l6LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2ljb25zL29iajE2L2phcl9sX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9pY29ucy9vYmoxNi9qYXJfbF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2IxODVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2ljb25zL29iajE2L2phcl9sX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9pY29ucy9vYmoxNi9qYXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2ljb25zL29iajE2L2phcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmExZDc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2ljb25zL29iajE2L2phcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvaWNvbnMvb2JqMTYvbGlicmFyeV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvaWNvbnMvb2JqMTYvbGlicmFyeV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjU1ZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2ljb25zL29iajE2L2xpYnJhcnlfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNzRlYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXBsdWdpbi5uYW1lPUpBWC1SUyBUb29scyAtIFVJCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLXByZWZlcmVuY2VwYWdlLmpheHJzbGlicmFyaWVzLm5hbWU9SkFYLVJTIExpYnJhcmllcwotY2xhc3NwYXRoQ29udGFpbmVyUGFnZS5uYW1lLjAgPUpBWC1SUyBMaWJyYXJpZXMKLWpheHJzLmxpYnJhcnkucHJvcGVydHkucGFnZSA9SkFYLVJTIChSRVNUIFdlYiBTZXJ2aWNlcykKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzFjZmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLSAgPCEtLSBKQVgtUlMgUHJvamVjdCBGYWNldCAtLT4gCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByb3BlcnR5UGFnZXMiPgotICAgIDxwYWdlCi0gICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5GYWNldHNQcm9wZXJ0eVBhZ2UiCi0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LkpBWFJTTGlicmFyeVByb3BlcnR5UGFnZSIKLSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLnByb2plY3QuZmFjZXQuSkFYUlNMaWJyYXJ5UHJvcGVydHlQYWdlIgotICAgICAgICAgIG5hbWU9IiVqYXhycy5saWJyYXJ5LnByb3BlcnR5LnBhZ2UiPgotICAgICAgPGVuYWJsZWRXaGVuPgotICAgICAgICA8YWRhcHQgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPgotICAgICAgICAgIDx0ZXN0IAotICAgICAgICAgICAgZm9yY2VQbHVnaW5BY3RpdmF0aW9uPSJ0cnVlIgotICAgICAgICAgICAgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByb2plY3RGYWNldCIKLSAgICAgICAgICAgIHZhbHVlPSJqc3QuamF4cnMiLz4KLSAgICAgICAgPC9hZGFwdD4KLSAgICAgIDwvZW5hYmxlZFdoZW4+ICAgICAgICAgIAotICAgIDwvcGFnZT4KLSAgPC9leHRlbnNpb24+Ci0gIDxleHRlbnNpb24gCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQudWkud2l6YXJkUGFnZXMiPgotICAgICA8d2l6YXJkLXBhZ2VzIGFjdGlvbj0ianN0LmpheHJzLnYxMC5pbnN0YWxsIj4KLSAgICAgICAgPHBhZ2UgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LkpBWFJTRmFjZXRJbnN0YWxsUGFnZSIvPgotICAgICA8L3dpemFyZC1wYWdlcz4KLSAgICAgPHdpemFyZC1wYWdlcyBhY3Rpb249ImpzdC5qYXhycy52MTEuaW5zdGFsbCI+Ci0gICAgICAgIDxwYWdlIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwucHJvamVjdC5mYWNldC5KQVhSU0ZhY2V0SW5zdGFsbFBhZ2UiLz4KLSAgICAgPC93aXphcmQtcGFnZXM+Ci0gICAgIAotICA8L2V4dGVuc2lvbj4gIAotCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5saWJyYXJ5UHJvdmlkZXJBY3Rpb25QYW5lbHMiPgotICAgIDxwYW5lbCAKLSAgICAgIHByb3ZpZGVyPSJqYXhycy11c2VyLWxpYnJhcnktcHJvdmlkZXIiCi0gICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLnByb2plY3QuZmFjZXQuSkFYUlNVc2VyTGlicmFyeVByb3ZpZGVySW5zdGFsbFBhbmVsIi8+Ci0gIDwvZXh0ZW5zaW9uPgotICAgICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvSUpBWFJTVUlDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvSUpBWFJTVUlDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRiMTA2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL0lKQVhSU1VJQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwOTEwMjEgICAyOTE5NTQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKiAyMDA5MTEwNiAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqIDIwMTAwMzI0ICAgMzA2OTM3IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUyBQcm9wZXJ0aWVzIHBhZ2UtIE5QRSBhZnRlciBwcmVzc2luZyBPSwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5KQVhSU1VJUGx1Z2luOwotCi0vKioKLSAqIEpBWFJTIENvcmUgZnJhbWV3b3JrIGNvbnN0YW50cwotICogCi0gKiA8cD4KLSAqIDxiPlByb3Zpc2lvbmFsIEFQSSAtIHN1YmplY3QgdG8gY2hhbmdlPC9iPgotICogPC9wPgotICogCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBJSkFYUlNVSUNvbnN0YW50cyB7Ci0JLyoqCi0JICogVGhlIHJvb3QgdmFsdWUgZm9yIHNhdmVkIHNldHRpbmdzCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUVElOR1NfUk9PVCA9IEpBWFJTVUlQbHVnaW4uUExVR0lOX0lECi0JCQkrICIuamF4cnNGYWNldEluc3RhbGwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUl9MSUJSQVJZX0lEID0gImpheHJzLXVzZXItbGlicmFyeS1wcm92aWRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgSUpBWFJTVUlDb25zdGFudHMoKSB7Ci0JCS8vIG5vIGluc3RhbnRpYXRpb24KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL0pBWFJTVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvSkFYUlNVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDhjNTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvSkFYUlNVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA5MTAyMSAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqIDIwMDkxMTA2ICAgMjkxOTU0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlLmludGVybmFsLkpBWFJTQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogSkFYUlMgVUkgcGx1Z2luLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlNVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLyoqCi0JICogVGhlIHBsdWdpbiBpZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkiOyAvLyROT04tTkxTLTEkCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBKQVhSU1VJUGx1Z2luIHBsdWdpbjsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSkFYUlNVSVBsdWdpbigpIHsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJSkFYUlNDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5zZXRKQVhSU1VJRGlhbG9nU2V0dGluZ3MoCi0JCQkJZ2V0RGlhbG9nU2V0dGluZ3MoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICogCi0JICogQHJldHVybiB0aGUgZGVmYXVsdCBwbHVnaW4gaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpBWFJTVUlQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSBmaWxlIGF0IHRoZSBnaXZlbiBwbHVnLWluCi0JICogcmVsYXRpdmUgcGF0aC4KLQkgKiAKLQkgKiBAcGFyYW0gcGF0aAotCSAqICAgICAgICAgICAgdGhlIHBhdGgKLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCXBhdGggPSAiaWNvbnMvIiArIHBhdGg7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKLQkJCQkib3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpIiwgcGF0aCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgc2hhcmVkIGltYWdlIGZvciB0aGUgZ2l2ZW4gbmFtZQotCSAqIDxwPgotCSAqIE5vdGU6IEltYWdlcyByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgYmUgYXV0b21pdGljYWxseSBkaXNwb3NlZCBvZgotCSAqIHdoZW4gdGhpcyBwbHVnLWluIHNodXRzIGRvd24uIENhbGxlcnMgbXVzdCBub3QgZGlzcG9zZSBvZiB0aGVzZSBpbWFnZXMKLQkgKiB0aGVtc2VsdmVzLgotCSAqIDwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgdGhlIGltYWdlIG5hbWUgZm91bmQgaW4gL2ljb25zICh3aXRoIGV4dGVuc2lvbikKLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSwgbnVsbCBvbiBlcnJvciBvciBub3QgZm91bmQuCi0JICovCi0JcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyBuYW1lKSB7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJSW1hZ2VSZWdpc3RyeSBpbWFnZXMgPSBnZXRJbWFnZVJlZ2lzdHJ5KCk7Ci0JCUltYWdlIGltYWdlID0gaW1hZ2VzLmdldChuYW1lKTsKLQkJaWYgKGltYWdlID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJZmluYWwgVVJMIHBsdWdpbkJhc2UgPSBnZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotCQkJCTsKLQkJCQlJbWFnZURlc2NyaXB0b3IgaWQgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChuZXcgVVJMKAotCQkJCQkJcGx1Z2luQmFzZSwgImljb25zLyIgKyBuYW1lKSk7Ci0JCQkJaW1hZ2VzLnB1dChuYW1lLCBpZCk7Ci0KLQkJCQlpbWFnZSA9IGltYWdlcy5nZXQobmFtZSk7Ci0JCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZWUpIHsKLQkJCQkvLyBsb2cuQ29tbW9uUGx1Z2luLmltYWdlLmVycm9yPUltYWdlIHswfSBub3QgZm91bmQuCi0JCQkJLy8gLmVycm9yKCJsb2cubXNnIiwgImxvZy5Db21tb25QbHVnaW4uaW1hZ2UuZXJyb3IiLCBuYW1lLCBlZSk7Ci0JCQkJbG9nKElTdGF0dXMuRVJST1IsICJMb2FkaW5nIGltYWdlIiwgZWUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRoZSBwbHVnaW4gaWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFBsdWdpbklEKCkgewotCQlyZXR1cm4gUExVR0lOX0lEOwotCX0KLQotCS8qKgotCSAqIExvZ3MgdXNpbmcgdGhlIGRlZmF1bHQgSUxvZyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSBnZXRMb2coKS4KLQkgKiAKLQkgKiBAcGFyYW0gc2V2ZXJpdHkKLQkgKiAgICAgICAgICAgIFNldmVyaXR5IChJU3RhdHVzIGNvbnN0YW50KSBvZiBsb2cgZW50cnkKLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgSHVtYW4tcmVhZGFibGUgbWVzc2FnZSBkZXNjcmliaW5nIGxvZyBlbnRyeQotCSAqIEBwYXJhbSBleAotCSAqICAgICAgICAgICAgVGhyb3dhYmxlIGluc3RhbmNlIChjYW4gYmUgbnVsbCkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleCkgewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKAotCQkJCW5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXgpKTsKLQl9Ci0KLQkvKioKLQkgKiBMb2dzIHVzaW5nIHRoZSBkZWZhdWx0IElMb2cgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgZ2V0TG9nKCkuCi0JICogCi0JICogQHBhcmFtIHNldmVyaXR5Ci0JICogICAgICAgICAgICBTZXZlcml0eSAoSVN0YXR1cyBjb25zdGFudCkgb2YgbG9nIGVudHJ5Ci0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIEh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgZGVzY3JpYmluZyBsb2cgZW50cnkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJbG9nKHNldmVyaXR5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4M2Y3OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkxMDIxICAgMjkxOTU0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotICogMjAwOTExMDYgICAyOTE5NTQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKiAyMDEwMDMwMyAgIDI5MTk1NCBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFN0cmluZyByZXNvdXJjZSBoYW5kbGVyLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUlNGYWNldEluc3RhbGxQYWdlX2Rlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTRmFjZXRJbnN0YWxsUGFnZV9KQVhSU1NlcnZsZXRMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfSkFYUlNJbXBsZW1lbnRhdGlvbkxpYnJhcmllc0ZyYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTRmFjZXRJbnN0YWxsUGFnZV9BZGQyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTRmFjZXRJbnN0YWxsUGFnZV9KQVhSU1NlcnZsZXROYW1lTGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUlNGYWNldEluc3RhbGxQYWdlX0pBWFJTU2VydmxldENsYXNzTmFtZUxhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTRmFjZXRJbnN0YWxsUGFnZV9KQVhSU1VSTE1hcHBpbmdMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfUGF0dGVybkRpYWxvZ1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTRmFjZXRJbnN0YWxsUGFnZV9QYXR0ZXJuRGlhbG9nRGVzYzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfUmVtb3ZlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTRmFjZXRJbnN0YWxsUGFnZV9QYXR0ZXJuRW1wdHlNc2c7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUlNGYWNldEluc3RhbGxQYWdlX1BhdHRlcm5TcGVjaWZpZWRNc2c7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUlNGYWNldEluc3RhbGxQYWdlX0Vycm9yTm9XZWJBcHBEYXRhTW9kZWw7Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUlNMaWJyYXJ5Q29uZmlnQ29udHJvbF9JbmNsdWRlR3JvdXBMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhSU0xpYnJhcnlDb25maWdDb250cm9sX0RlcGxveUJ1dHRvbkxhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfRGVwbG95SkFSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfU2hhcmVkTGliQnV0dG9uTGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUlNMaWJyYXJ5Q29uZmlnQ29udHJvbF9Ub29sdGlwSW5jbHVkZUFzU2hhcmVkTGliOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL2NsYXNzcGF0aC9KQVhSU0xpYnJhcnlWYWxpZGF0aW9uRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvY2xhc3NwYXRoL0pBWFJTTGlicmFyeVZhbGlkYXRpb25FdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGExN2U3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvY2xhc3NwYXRoL0pBWFJTTGlicmFyeVZhbGlkYXRpb25FdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkxMDIxICAgMjkxOTU0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotICogMjAwOTExMDYgICAyOTE5NTQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLmNsYXNzcGF0aDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSAqIFZhbGlkYXRpb24gZXZlbnQgdXNlZCBieSBKQVhSU0xpYnJhcnlDb250cm9sIHRvIG5vdGlmeSBjb250YWluZXJzIG9mIHVwZGF0ZXMKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgSkFYUlNMaWJyYXJ5VmFsaWRhdGlvbkV2ZW50IHsKLQlwcml2YXRlIFN0cmluZyBtc2c7Ci0JcHJpdmF0ZSBpbnQgc2V2ZXJpdHk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvcgotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiBAcGFyYW0gc2V2ZXJpdHkKLQkgKiAgICAgICAgICAgIC0gSVN0YXR1cyBpbnQgdmFsdWUKLQkgKi8KLQlwdWJsaWMgSkFYUlNMaWJyYXJ5VmFsaWRhdGlvbkV2ZW50KFN0cmluZyBtc2csIGludCBzZXZlcml0eSkgewotCQl0aGlzLm1zZyA9IG1zZzsKLQkJdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5OwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgZXZlbnQgd2l0aCBzZXZlcml0eSBvZiBJU3RhdHVzLkVSUk9SCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqLwotCXB1YmxpYyBKQVhSU0xpYnJhcnlWYWxpZGF0aW9uRXZlbnQoU3RyaW5nIG1zZykgewotCQl0aGlzKG1zZywgSVN0YXR1cy5FUlJPUik7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB2YWxpZGF0aW9uIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJU3RhdHVzIGludCB2YWx1ZQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0U2V2ZXJpdHkoKSB7Ci0JCXJldHVybiBzZXZlcml0eTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL2NsYXNzcGF0aC9KQVhSU0xpYnJhcnlWYWxpZGF0aW9uTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvY2xhc3NwYXRoL0pBWFJTTGlicmFyeVZhbGlkYXRpb25MaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWVjYmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvY2xhc3NwYXRoL0pBWFJTTGlicmFyeVZhbGlkYXRpb25MaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkxMDIxICAgMjkxOTU0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotICogMjAwOTExMDYgICAyOTE5NTQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLmNsYXNzcGF0aDsKLQotLyoqCi0gKiBMaXN0ZW5lcnMgb2Yge0BsaW5rIEpBWFJTTGlicmFyeVZhbGlkYXRpb25FdmVudH1zIHNob3VsZCBpbXBsZW1lbnQKLSAqIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEpBWFJTTGlicmFyeVZhbGlkYXRpb25MaXN0ZW5lciB7Ci0JLyoqCi0JICogQ2FsbGJhY2sKLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeVZhbGlkYXRpb24oSkFYUlNMaWJyYXJ5VmFsaWRhdGlvbkV2ZW50IGUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ1YTI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA5MTAyMSAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSMgMjAwOTExMDYgICAyOTE5NTQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0jIDIwMTAwMzAzICAgMjkxOTU0IGtjaG9uZ0BjYS5pYm0uY29tIC0gS2VpdGggQ2hvbmcsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotSkFYUlNGYWNldEluc3RhbGxQYWdlX3RpdGxlPUpBWC1SUyBDYXBhYmlsaXRpZXMKLUpBWFJTRmFjZXRJbnN0YWxsUGFnZV9kZXNjcmlwdGlvbj1BZGQgSkFYLVJTIGNhcGFiaWxpdGllcyB0byB0aGlzIFdlYiBQcm9qZWN0Ci1KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfSkFYUlNJbXBsZW1lbnRhdGlvbkxpYnJhcmllc0ZyYW1lPUpBWC1SUyAmSW1wbGVtZW50YXRpb24gTGlicmFyeQotSkFYUlNGYWNldEluc3RhbGxQYWdlX0pBWFJTU2VydmxldExhYmVsPVNlcnZsZXQgSW5mb3JtYXRpb24KLUpBWFJTRmFjZXRJbnN0YWxsUGFnZV9BZGQyPSZBZGQuLi4KLUpBWFJTRmFjZXRJbnN0YWxsUGFnZV9KQVhSU1NlcnZsZXROYW1lTGFiZWw9SkFYLVJTICZzZXJ2bGV0IG5hbWU6Ci1KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfSkFYUlNTZXJ2bGV0Q2xhc3NOYW1lTGFiZWw9SkFYLVJTIHNlcnZsZXQgYyZsYXNzIG5hbWU6Ci1KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfSkFYUlNVUkxNYXBwaW5nTGFiZWw9JlVSTCBtYXBwaW5nIHBhdHRlcm5zOgotSkFYUlNGYWNldEluc3RhbGxQYWdlX1BhdHRlcm5EaWFsb2dUaXRsZT1TcGVjaWZ5IFVSTCBQYXR0ZXJuCi1KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfUGF0dGVybkRpYWxvZ0Rlc2M9VVJMIFBhdHRlcm4KLUpBWFJTRmFjZXRJbnN0YWxsUGFnZV9SZW1vdmU9JlJlbW92ZQotSkFYUlNGYWNldEluc3RhbGxQYWdlX1BhdHRlcm5FbXB0eU1zZz1QYXR0ZXJuIG11c3Qgbm90IGJlIGVtcHR5Ci1KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfUGF0dGVyblNwZWNpZmllZE1zZz1QYXR0ZXJuIGlzIGFscmVhZHkgc3BlY2lmaWVkCi1KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfRXJyb3JOb1dlYkFwcERhdGFNb2RlbD1VbmFibGUgdG8gbG9jYXRlIFdlYkFwcCBkYXRhbW9kZWwKLQotSkFYUlNMaWJyYXJ5Q29uZmlnQ29udHJvbF9EZXBsb3lKQVI9RGVwbG95IGphcnMgdG8gV0VCLUlORi9saWIKLUpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfRGVwbG95QnV0dG9uTGFiZWw9RGVwbG95Ci1KQVhSU0xpYnJhcnlDb25maWdDb250cm9sX0luY2x1ZGVHcm91cExhYmVsPUluY2x1ZGUgbGlicmFyeSB3aXRoIHRoaXMgYXBwbGljYXRpb24KLUpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfU2hhcmVkTGliQnV0dG9uTGFiZWw9U2hhcmVkIExpYnJhcnkKLUpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfVG9vbHRpcEluY2x1ZGVBc1NoYXJlZExpYj1JbmNsdWRlIGFzIHNoYXJlZCBsaWJyYXJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvSkFYUlNGYWNldEluY2x1ZGVMaWJyYXJpZXNHcm91cC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L0pBWFJTRmFjZXRJbmNsdWRlTGlicmFyaWVzR3JvdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlMDEyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvSkFYUlNGYWNldEluY2x1ZGVMaWJyYXJpZXNHcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDEwMDMxMCAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwucHJvamVjdC5mYWNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlLmludGVybmFsLnByb2plY3QuZmFjZXQuSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwuSkFYUlNVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5JRGF0YU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgSkFYUlNGYWNldEluY2x1ZGVMaWJyYXJpZXNHcm91cCBleHRlbmRzIENvbXBvc2l0ZSB7Ci0KLQlwcml2YXRlIEJ1dHRvbiBidG5EZXBsb3lKYXJzOwotCXByaXZhdGUgQnV0dG9uIGJ0blNoYXJlZExpYnJhcnk7Ci0JQnV0dG9uIGNvcHlPblB1Ymxpc2hDaGVja0JveDsKLQlwcml2YXRlIENvbXBvc2l0ZSBpbmNsdWRlTGliUmFkaW9zQ29tcG9zaXRlOwotCi0JcHVibGljIEpBWFJTRmFjZXRJbmNsdWRlTGlicmFyaWVzR3JvdXAoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKHBhcmVudCwgc3R5bGUpOwotCSAgICBjb3B5T25QdWJsaXNoQ2hlY2tCb3ggPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLQkgICAgY29weU9uUHVibGlzaENoZWNrQm94LnNldFRleHQoTWVzc2FnZXMuSkFYUlNMaWJyYXJ5Q29uZmlnQ29udHJvbF9JbmNsdWRlR3JvdXBMYWJlbCk7Ci0JICAgIGluY2x1ZGVMaWJSYWRpb3NDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCSAgICBHcmlkTGF5b3V0IGdyaWRsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCSAgICBncmlkbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotCSAgICBncmlkbGF5b3V0Lm1hcmdpblRvcCA9IDA7Ci0JICAgIGdyaWRsYXlvdXQubWFyZ2luQm90dG9tID0gMDsKLQkgICAgZ3JpZGxheW91dC5tYXJnaW5SaWdodCA9IDA7Ci0JICAgIGdyaWRsYXlvdXQubWFyZ2luTGVmdCA9IDEwOwotCi0JICAgIGluY2x1ZGVMaWJSYWRpb3NDb21wb3NpdGUuc2V0TGF5b3V0KGdyaWRsYXlvdXQpOwotCSAgICBHcmlkRGF0YSBncmlkZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCSAgICBpbmNsdWRlTGliUmFkaW9zQ29tcG9zaXRlLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotCi0JICAgIGJ0bkRlcGxveUphcnMgPSBjcmVhdGVSYWRpb0J1dHRvbihpbmNsdWRlTGliUmFkaW9zQ29tcG9zaXRlLCBNZXNzYWdlcy5KQVhSU0xpYnJhcnlDb25maWdDb250cm9sX0RlcGxveUJ1dHRvbkxhYmVsLCBNZXNzYWdlcy5KQVhSU0xpYnJhcnlDb25maWdDb250cm9sX0RlcGxveUpBUiwgbnVsbCk7Ci0KLQkgICAgYnRuU2hhcmVkTGlicmFyeSA9IGNyZWF0ZVJhZGlvQnV0dG9uKGluY2x1ZGVMaWJSYWRpb3NDb21wb3NpdGUsIE1lc3NhZ2VzLkpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfU2hhcmVkTGliQnV0dG9uTGFiZWwsIE1lc3NhZ2VzLkpBWFJTTGlicmFyeUNvbmZpZ0NvbnRyb2xfVG9vbHRpcEluY2x1ZGVBc1NoYXJlZExpYiwgbnVsbCk7Ci0KLQkgICAgY29weU9uUHVibGlzaENoZWNrQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkgICAgewotCSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCSAgICAgIHsKLQkgICAgICAgIGJvb2xlYW4gc2VsZWN0aW9uID0gY29weU9uUHVibGlzaENoZWNrQm94LmdldFNlbGVjdGlvbigpOwotCSAgICAgICAgYnRuRGVwbG95SmFycy5zZXRFbmFibGVkKHNlbGVjdGlvbik7Ci0JICAgICAgICBidG5TaGFyZWRMaWJyYXJ5LnNldEVuYWJsZWQoc2VsZWN0aW9uKTsKLQotCSAgICAgIH0KLQkgICAgfSk7Ci0JICAgIC8vIE5lZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIHByb3Blcmx5Ci0JICAgIGJ0bkRlcGxveUphcnMuc2V0U2VsZWN0aW9uKHRydWUpOwotCi0JfQotCi0JcHVibGljIEJ1dHRvbiBnZXRCdG5EZXBsb3lKYXJzKCkgewotCQlyZXR1cm4gYnRuRGVwbG95SmFyczsKLQl9Ci0KLQlwdWJsaWMgQnV0dG9uIGdldEJ0blNoYXJlZExpYnJhcnkoKSB7Ci0JCXJldHVybiBidG5TaGFyZWRMaWJyYXJ5OwotCX0KLQotCXB1YmxpYyBCdXR0b24gZ2V0Q29weU9uUHVibGlzaENoZWNrQm94KCkgewotCQlyZXR1cm4gY29weU9uUHVibGlzaENoZWNrQm94OwotCX0KLQotCXB1YmxpYyBDb21wb3NpdGUgZ2V0SW5jbHVkZUxpYlJhZGlvc0NvbXBvc2l0ZSgpIHsKLQkJcmV0dXJuIGluY2x1ZGVMaWJSYWRpb3NDb21wb3NpdGU7Ci0JfQotCi0JcHJpdmF0ZSBCdXR0b24gY3JlYXRlQnV0dG9uKGludCBraW5kLCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3ApCi0JICB7Ci0JICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwga2luZCk7Ci0JCi0JICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotCSAgICBidXR0b24uc2V0VGV4dChsYWJlbE5hbWUpOwotCSAgICBidXR0b24uc2V0VG9vbFRpcFRleHQodG9vbHRpcCk7Ci0JCi0JICAgIGlmIChpbmZvcG9wICE9IG51bGwpCi0JICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChidXR0b24sIEpBWFJTVUlQbHVnaW4uUExVR0lOX0lEICsgIi4iICsgaW5mb3BvcCk7Ci0JCi0JICAgIHJldHVybiBidXR0b247Ci0JICB9Ci0KLQlwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja2JveChDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3ApCi0JICB7Ci0JICAgIHJldHVybiBjcmVhdGVCdXR0b24oU1dULkNIRUNLLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCk7Ci0JICB9Ci0KLQlwcml2YXRlIEJ1dHRvbiBjcmVhdGVSYWRpb0J1dHRvbihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3ApCi0JICB7Ci0JICAgIHJldHVybiBjcmVhdGVCdXR0b24oU1dULlJBRElPLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCk7Ci0JICB9Ci0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvSkFYUlNGYWNldEluc3RhbGxQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvSkFYUlNGYWNldEluc3RhbGxQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZGNhMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L0pBWFJTRmFjZXRJbnN0YWxsUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA5MTAyMSAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqIDIwMDkxMTA2ICAgMjkxOTU0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotICogMjAxMDAzMDIgICAzMDQ0MDUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTIEZhY2V0IDogc3VwcG9ydCBKQVgtUlMgMS4xIChKU1IgMzExKQotICogMjAxMDAzMDMgICAyOTE5NTQga2Nob25nQGNhLmlibS5jb20gLSBLZWl0aCBDaG9uZywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKiAyMDEwMDMxMCAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqIDIwMTAwMzI0ICAgMzA2OTM3IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUyBQcm9wZXJ0aWVzIHBhZ2UtIE5QRSBhZnRlciBwcmVzc2luZyBPSwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5saWJwcm92LklMaWJyYXJ5UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubGlicHJvdi5MaWJyYXJ5SW5zdGFsbERlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmxpYnByb3YuTGlicmFyeVByb3ZpZGVyT3BlcmF0aW9uQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmxpYnByb3YuaW50ZXJuYWwuTGlicmFyeVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5saWJwcm92LkxpYnJhcnlQcm92aWRlckZyYW1ld29ya1VpOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuRWFyVXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuSUoyRUVNb2R1bGVGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwuamF4cnNzaGFyZWRsaWJyYXJ5Y29uZmlnLlNoYXJlZExpYnJhcnlDb25maWd1cmF0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlLmludGVybmFsLnByb2plY3QuZmFjZXQuSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LkpBWFJTU2hhcmVkTGlicmFyeVByb3ZpZGVySW5zdGFsbE9wZXJhdGlvbkNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LkpBWFJTVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxPcGVyYXRpb25Db25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLklKQVhSU1VJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5KQVhSU1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkRhdGFNb2RlbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuRGF0YU1vZGVsRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLmRhdGFtb2RlbC51aS5EYXRhTW9kZWxXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJlc2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuQnJpZGdlZFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LnVpLklGYWNldFdpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LnVpLklXaXphcmRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotCi0vKioKLSAqIEpBWFJTIEZhY2V0IGluc3RhbGxhdGlvbiB3aXphcmQgcGFnZS4KLSAqIAotICovCi1AU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQotcHVibGljIGNsYXNzIEpBWFJTRmFjZXRJbnN0YWxsUGFnZSBleHRlbmRzIERhdGFNb2RlbFdpemFyZFBhZ2UgaW1wbGVtZW50cyBJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLCBJRmFjZXRXaXphcmRQYWdlCi17Ci0gIC8vIFVJCi0gIHByaXZhdGUgU2VydmxldEluZm9ybWF0aW9uR3JvdXAgc2VydmxldEluZm9Hcm91cDsKLQotICBwcml2YXRlIElEaWFsb2dTZXR0aW5ncyBkaWFsb2dTZXR0aW5nczsKLSAgcHJpdmF0ZSBJRGF0YU1vZGVsIHdlYkFwcERhdGFNb2RlbDsKLSAgcHJpdmF0ZSBTdHJpbmcgc0VBUlByb2plY3QgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzV0VCUHJvamVjdCA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHNUYXJnZXRSdW50aW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBJUnVudGltZSB0YXJnZXRSdW50aW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBib29sZWFuIGJBZGRUb0VBUiA9IGZhbHNlOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUVElOR1NfU0VSVkxFVCA9ICJzZXJ2bGV0TmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdTX1NFUlZMRVRfQ0xBU1NOQU1FID0gInNlcnZsZXRDbGFzc25hbWUiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19VUkxfTUFQUElOR1MgPSAidXJsTWFwcGluZ3MiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19VUkxfUEFUVEVSTiA9ICJwYXR0ZXJuIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBudWxsOwotICBwcml2YXRlIGphdmEudXRpbC5MaXN0PElQcm9qZWN0PiBlYXJQcm9qZWN0cyA9IG51bGw7Ci0gIHByaXZhdGUgSVByZXNldCBzZWxlY3RlZFByZXNldCA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1Byb2plY3RDcmVhdGlvbk1vZGUgPSB0cnVlOyAvLyBwcm9qZWN0IGNyZWF0aW9uID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZC9yZW1vdmUgZmFjZXRzIG1vZGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2UKLQotICAvKioKLSAgICogWmVybyBhcmd1bWVudCBjb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEpBWFJTRmFjZXRJbnN0YWxsUGFnZSgpCi0gIHsKLSAgICBzdXBlcihEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQWJzdHJhY3REYXRhTW9kZWxQcm92aWRlcigpCi0gICAgey8qCi0gICAgICAqIGRvIG5vdGhpbmcKLSAgICAgICovCi0gICAgfSksICJqYXhycy5mYWNldC5pbnN0YWxsLnBhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIHNldFRpdGxlKE1lc3NhZ2VzLkpBWFJTRmFjZXRJbnN0YWxsUGFnZV90aXRsZSk7Ci0gICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX2Rlc2NyaXB0aW9uKTsKLSAgICBkaWFsb2dTZXR0aW5ncyA9IEpBWFJTVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUKLSAgICogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLmRhdGFtb2RlbC51aS5EYXRhTW9kZWxXaXphcmRQYWdlCi0gICAqICNjcmVhdGVUb3BMZXZlbENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVRvcExldmVsQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBpbml0aWFsaXplRGlhbG9nVW5pdHMocGFyZW50KTsKLSAgICBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGZpbmFsIEdyaWRMYXlvdXQgamF4cnNDb21wb3NpdGVMYXlvdXQgPSBuZXcgR3JpZExheW91dCgxLCBmYWxzZSk7Ci0gICAgamF4cnNDb21wb3NpdGVMYXlvdXQubWFyZ2luVG9wID0gMDsKLSAgICBqYXhyc0NvbXBvc2l0ZUxheW91dC5tYXJnaW5Cb3R0b20gPSAwOwotICAgIGpheHJzQ29tcG9zaXRlTGF5b3V0Lm1hcmdpblJpZ2h0ID0gMDsKLSAgICBqYXhyc0NvbXBvc2l0ZUxheW91dC5tYXJnaW5MZWZ0ID0gMDsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGpheHJzQ29tcG9zaXRlTGF5b3V0KTsKLQotICAgIGZpbmFsIExpYnJhcnlJbnN0YWxsRGVsZWdhdGUgbGlicmFyaWVzSW5zdGFsbERlbGVnYXRlID0gKExpYnJhcnlJbnN0YWxsRGVsZWdhdGUpIGdldERhdGFNb2RlbCgpLmdldFByb3BlcnR5KExJQlJBUllfUFJPVklERVJfREVMRUdBVEUpOwotCWxpYnJhcmllc0luc3RhbGxEZWxlZ2F0ZS5nZXRMaWJyYXJ5UHJvdmlkZXJzKCk7Ci0JamF2YS51dGlsLkxpc3Q8SUxpYnJhcnlQcm92aWRlcj4gcHJvdmlkZXJzID0gbGlicmFyaWVzSW5zdGFsbERlbGVnYXRlLmdldExpYnJhcnlQcm92aWRlcnMoKTsKLQlpZiAocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJZm9yIChJTGlicmFyeVByb3ZpZGVyIHByb3ZpZGVyIDogcHJvdmlkZXJzKSB7Ci0JCQlpZiAocHJvdmlkZXIgIT0gbnVsbCkgewotCQkJCWlmIChwcm92aWRlciBpbnN0YW5jZW9mIExpYnJhcnlQcm92aWRlcikgewotCQkJCQlpZiAoIXByb3ZpZGVyLmlzQWJzdHJhY3QoKSkgewotCQkJCQkJTGlicmFyeVByb3ZpZGVyT3BlcmF0aW9uQ29uZmlnIGNvbmZpZyA9IGxpYnJhcmllc0luc3RhbGxEZWxlZ2F0ZQotCQkJCQkJCQkuZ2V0TGlicmFyeVByb3ZpZGVyT3BlcmF0aW9uQ29uZmlnKHByb3ZpZGVyKTsKLQotCQkJCQkJaWYgKGNvbmZpZyBpbnN0YW5jZW9mIEpBWFJTVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxPcGVyYXRpb25Db25maWcpIHsKLQkJCQkJCQlKQVhSU1VzZXJMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsT3BlcmF0aW9uQ29uZmlnIGN1c3RvbUNvbmZpZyA9IChKQVhSU1VzZXJMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsT3BlcmF0aW9uQ29uZmlnKSBjb25maWc7Ci0JCQkJCQkJY3VzdG9tQ29uZmlnLnNldE1vZGVsKGdldERhdGFNb2RlbCgpKTsKLQkJCQkJCX0gZWxzZSBpZiAoY29uZmlnIGluc3RhbmNlb2YgSkFYUlNTaGFyZWRMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsT3BlcmF0aW9uQ29uZmlnKSB7Ci0JCQkJCQkJSkFYUlNTaGFyZWRMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsT3BlcmF0aW9uQ29uZmlnIGN1c3RvbUNvbmZpZyA9IChKQVhSU1NoYXJlZExpYnJhcnlQcm92aWRlckluc3RhbGxPcGVyYXRpb25Db25maWcpIGNvbmZpZzsKLQkJCQkJCQljdXN0b21Db25maWcuc2V0TW9kZWwoZ2V0RGF0YU1vZGVsKCkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSAgICAKLQotICAgIGZpbmFsIENvbnRyb2wgbGlicmFyaWVzQ29tcG9zaXRlID0gTGlicmFyeVByb3ZpZGVyRnJhbWV3b3JrVWkuY3JlYXRlSW5zdGFsbExpYnJhcnlQYW5lbChjb21wb3NpdGUsIGxpYnJhcmllc0luc3RhbGxEZWxlZ2F0ZSwgTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX0pBWFJTSW1wbGVtZW50YXRpb25MaWJyYXJpZXNGcmFtZSk7Ci0KLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMzsKLQotICAgIGxpYnJhcmllc0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIHNlcnZsZXRJbmZvR3JvdXAgPSBuZXcgU2VydmxldEluZm9ybWF0aW9uR3JvdXAoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgc2VydmxldEluZm9Hcm91cC5zZXREYXRhTW9kZWwobW9kZWwpOwotCi0gICAgYWRkTW9kaWZpY2F0aW9uTGlzdGVuZXJzKCk7Ci0KLSAgICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgSURpYWxvZ1NldHRpbmdzIHJvb3QgPSBkaWFsb2dTZXR0aW5ncy5nZXRTZWN0aW9uKElKQVhSU1VJQ29uc3RhbnRzLlNFVFRJTkdTX1JPT1QpOwotCi0gICAgaWYgKCF0aGlzLmlzUHJvamVjdENyZWF0aW9uTW9kZSkKLSAgICB7Ci0gICAgICAvLyBXZSBhcmUgaW4gYWRkL3JlbW92ZSBmYWNldHMgbW9kZQotICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFNoYXJlZExpYnJhcnlDb25maWd1cmF0b3JVdGlsLmdldFdlYlByb2plY3QobW9kZWwpOwotICAgICAgaWYgKHdlYlByb2plY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUod2ViUHJvamVjdCk7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBydW50aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2plY3QKLSAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZhY2V0UnVudGltZSA9IGZQcm9qZWN0LmdldFByaW1hcnlSdW50aW1lKCk7Ci0gICAgICAgICAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElSdW50aW1lIHJ1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmYWNldFJ1bnRpbWUpOwotICAgICAgICAgICAgaWYgKHJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSVJ1bnRpbWVUeXBlIHJ0VHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLSAgICAgICAgICAgICAgaWYgKHJ0VHlwZSAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc1RhcmdldFJ1bnRpbWUgPSBydFR5cGUuZ2V0SWQoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvLyBOb3csIHNldCB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgICAgbW9kZWwuc2V0U3RyaW5nUHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRSVU5USU1FLCBzVGFyZ2V0UnVudGltZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhIGZhY2V0ZWQgcHJvamVjdAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgZWFyTmFtZSA9IG1vZGVsLmdldFN0cmluZ1Byb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuRUFSUFJPSkVDVF9OQU1FKTsKLSAgICAgIGlmIChlYXJOYW1lID09IG51bGwgfHwgZWFyTmFtZS5lcXVhbHMoIiIpKQotICAgICAgewotICAgICAgICBpZiAod2ViUHJvamVjdCAhPSBudWxsKQotICAgICAgICB7Ci0KLSAgICAgICAgICBJUHJvamVjdFtdIGVhclByb2plY3RzID0gRWFyVXRpbGl0aWVzLmdldFJlZmVyZW5jaW5nRUFSUHJvamVjdHMod2ViUHJvamVjdCk7IC8vIHJlcXVpcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmcuZWNsaXBzZS5qZW0udXRpbAotICAgICAgICAgIGlmIChlYXJQcm9qZWN0cy5sZW5ndGggPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVhck5hbWUgPSBlYXJQcm9qZWN0c1swXS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBoYXZlIGFuIEVBUi4uLgotICAgICAgICAgICAgdGhpcy5iQWRkVG9FQVIgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5zRUFSUHJvamVjdCA9IGVhck5hbWU7Ci0gICAgICAgICAgICBtb2RlbC5zZXRCb29sZWFuUHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCB0cnVlKTsKLSAgICAgICAgICAgIG1vZGVsLnNldFN0cmluZ1Byb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuRUFSUFJPSkVDVF9OQU1FLCBlYXJOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgc2VydmxldE5hbWUgPSBudWxsOwotICAgIGlmIChyb290ICE9IG51bGwpCi0gICAgICBzZXJ2bGV0TmFtZSA9IHJvb3QuZ2V0KFNFVFRJTkdTX1NFUlZMRVQpOwotICAgIGlmIChzZXJ2bGV0TmFtZSA9PSBudWxsIHx8IHNlcnZsZXROYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotICAgICAgc2VydmxldE5hbWUgPSAoU3RyaW5nKSBtb2RlbC5nZXREZWZhdWx0UHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5TRVJWTEVUX05BTUUpOwotICAgIH0KLSAgICBzZXJ2bGV0SW5mb0dyb3VwLnR4dEpBWFJTU2VydmxldE5hbWUuc2V0VGV4dChzZXJ2bGV0TmFtZSk7Ci0KLSAgICBTdHJpbmcgc2VydmxldENsYXNzbmFtZSA9IG51bGw7Ci0gICAgaWYgKHJvb3QgIT0gbnVsbCkKLSAgICAgIHNlcnZsZXRDbGFzc25hbWUgPSByb290LmdldChTRVRUSU5HU19TRVJWTEVUX0NMQVNTTkFNRSk7Ci0gICAgaWYgKHNlcnZsZXRDbGFzc25hbWUgPT0gbnVsbCB8fCBzZXJ2bGV0Q2xhc3NuYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotICAgICAgc2VydmxldENsYXNzbmFtZSA9IChTdHJpbmcpIG1vZGVsLmdldERlZmF1bHRQcm9wZXJ0eShJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLlNFUlZMRVRfQ0xBU1NOQU1FKTsKLSAgICB9Ci0gICAgc2VydmxldEluZm9Hcm91cC50eHRKQVhSU1NlcnZsZXRDbGFzc05hbWUuc2V0VGV4dChzZXJ2bGV0Q2xhc3NuYW1lKTsKLQotICAgIGxvYWRVUkxNYXBwaW5nUGF0dGVybnMocm9vdCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2F2ZVNldHRpbmdzKCkKLSAgewotICAgIERpYWxvZ1NldHRpbmdzIHJvb3QgPSBuZXcgRGlhbG9nU2V0dGluZ3MoSUpBWFJTVUlDb25zdGFudHMuU0VUVElOR1NfUk9PVCk7Ci0gICAgZGlhbG9nU2V0dGluZ3MuYWRkU2VjdGlvbihyb290KTsKLQotICAgIHJvb3QucHV0KFNFVFRJTkdTX1NFUlZMRVQsIGdldEpBWFJTU2VydmxldE5hbWUoKSk7Ci0gICAgcm9vdC5wdXQoU0VUVElOR1NfU0VSVkxFVF9DTEFTU05BTUUsIGdldEpBWFJTU2VydmxldENsYXNzbmFtZSgpKTsKLSAgICBEaWFsb2dTZXR0aW5ncyBtYXBwaW5ncyA9IG5ldyBEaWFsb2dTZXR0aW5ncyhTRVRUSU5HU19VUkxfTUFQUElOR1MpOwotICAgIHJvb3QuYWRkU2VjdGlvbihtYXBwaW5ncyk7Ci0gICAgbWFwcGluZ3MucHV0KFNFVFRJTkdTX1VSTF9QQVRURVJOLCBnZXRKQVhSU1BhdHRlcm5zKCkpOwotCi0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRKQVhSU1NlcnZsZXROYW1lKCkKLSAgewotICAgIHJldHVybiBzZXJ2bGV0SW5mb0dyb3VwLnR4dEpBWFJTU2VydmxldE5hbWUuZ2V0VGV4dCgpLnRyaW0oKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEpBWFJTU2VydmxldENsYXNzbmFtZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmxldEluZm9Hcm91cC50eHRKQVhSU1NlcnZsZXRDbGFzc05hbWUuZ2V0VGV4dCgpLnRyaW0oKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0SkFYUlNQYXR0ZXJucygpCi0gIHsKLSAgICByZXR1cm4gc2VydmxldEluZm9Hcm91cC5sc3RKQVhSU1NlcnZsZXRVUkxQYXR0ZXJucy5nZXRJdGVtcygpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZQotICAgKiBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQudWkuSUZhY2V0V2l6YXJkUGFnZSNzZXRDb25maWcoamF2YQotICAgKiAubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWcoT2JqZWN0IGNvbmZpZykKLSAgewotICAgIG1vZGVsLnJlbW92ZUxpc3RlbmVyKHRoaXMpOwotICAgIHN5bmNoSGVscGVyLmRpc3Bvc2UoKTsKLQotICAgIG1vZGVsID0gKElEYXRhTW9kZWwpIGNvbmZpZzsKLSAgICBtb2RlbC5hZGRMaXN0ZW5lcih0aGlzKTsKLSAgICBzeW5jaEhlbHBlciA9IGluaXRpYWxpemVTeW5jaEhlbHBlcihtb2RlbCk7Ci0gICAgbW9kZWwuc2V0U3RyaW5nUHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5FQVJQUk9KRUNUX05BTUUsIHNFQVJQcm9qZWN0KTsKLSAgICBtb2RlbC5zZXRTdHJpbmdQcm9wZXJ0eShJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLldFQlBST0pFQ1RfTkFNRSwgc1dFQlByb2plY3QpOwotICAgIG1vZGVsLnNldFN0cmluZ1Byb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUUlVOVElNRSwgc1RhcmdldFJ1bnRpbWUpOwotICAgIG1vZGVsLnNldEJvb2xlYW5Qcm9wZXJ0eShJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkFERF9UT19FQVIsIGJBZGRUb0VBUik7Ci0gICAgCi0gICAgbW9kZWwuc2V0UHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5TRVJWRVJfSVJVTlRJTUUsIHRhcmdldFJ1bnRpbWUpOwotICAgIG1vZGVsLnNldFByb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQ09ORklHVVJBVElPTl9QUkVTRVQsIHNlbGVjdGVkUHJlc2V0KTsKLSAgICBtb2RlbC5zZXRQcm9wZXJ0eShJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkVBUlBST0pFQ1RTLCBlYXJQcm9qZWN0cyk7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWVvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQudWkuSUZhY2V0V2l6YXJkUGFnZSMKLSAgICogdHJhbnNmZXJTdGF0ZVRvQ29uZmlnKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYW5zZmVyU3RhdGVUb0NvbmZpZygpCi0gIHsKLSAgICBzYXZlU2V0dGluZ3MoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRNb2RpZmljYXRpb25MaXN0ZW5lcnMoKQotICB7Ci0vLyBqYXhyc0xpYkNmZ0NvbXAuc2V0U3luY2hIZWxwZXIoc3luY2hIZWxwZXIpOwotICAgIHN5bmNoSGVscGVyLnN5bmNoVGV4dChzZXJ2bGV0SW5mb0dyb3VwLnR4dEpBWFJTU2VydmxldE5hbWUsIFNFUlZMRVRfTkFNRSwgbnVsbCk7Ci0gICAgc3luY2hIZWxwZXIuc3luY2hUZXh0KHNlcnZsZXRJbmZvR3JvdXAudHh0SkFYUlNTZXJ2bGV0Q2xhc3NOYW1lLCBTRVJWTEVUX0NMQVNTTkFNRSwgbnVsbCk7Ci0gICAgc3luY2hIZWxwZXIuc3luY2hMaXN0KHNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMsIFNFUlZMRVRfVVJMX1BBVFRFUk5TLCBudWxsKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2FkVVJMTWFwcGluZ1BhdHRlcm5zKElEaWFsb2dTZXR0aW5ncyByb290KQotICB7Ci0gICAgc2VydmxldEluZm9Hcm91cC5sc3RKQVhSU1NlcnZsZXRVUkxQYXR0ZXJucy5yZW1vdmVBbGwoKTsKLSAgICBJRGlhbG9nU2V0dGluZ3MgbWFwcGluZ3MgPSBudWxsOwotICAgIGlmIChyb290ICE9IG51bGwpCi0gICAgICBtYXBwaW5ncyA9IHJvb3QuZ2V0U2VjdGlvbihTRVRUSU5HU19VUkxfTUFQUElOR1MpOwotICAgIFN0cmluZ1tdIHBhdHRlcm5zID0gbnVsbDsKLSAgICBpZiAobWFwcGluZ3MgIT0gbnVsbCkKLSAgICAgIHBhdHRlcm5zID0gbWFwcGluZ3MuZ2V0QXJyYXkoU0VUVElOR1NfVVJMX1BBVFRFUk4pOwotCi0gICAgaWYgKHBhdHRlcm5zID09IG51bGwgfHwgcGF0dGVybnMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcGF0dGVybnMgPSAoU3RyaW5nW10pIG1vZGVsLmdldERlZmF1bHRQcm9wZXJ0eShJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLlNFUlZMRVRfVVJMX1BBVFRFUk5TKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhZGRJdGVtVG9MaXN0KHBhdHRlcm5zW2ldLCBmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEl0ZW1Ub0xpc3QoU3RyaW5nIHBhdHRlcm4sIGJvb2xlYW4gc2VsZWN0TWUpCi0gIHsKLSAgICBzZXJ2bGV0SW5mb0dyb3VwLmxzdEpBWFJTU2VydmxldFVSTFBhdHRlcm5zLmFkZChwYXR0ZXJuID09IG51bGwgPyAiIiA6IHBhdHRlcm4pOyAvLyROT04tTkxTLTEkCi0gICAgaWYgKHBhdHRlcm4gPT0gbnVsbCAmJiBzZWxlY3RNZSkKLSAgICAgIHNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuc2V0U2VsZWN0aW9uKHNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuZ2V0SXRlbUNvdW50KCkgLSAxKTsKLSAgICAvLyBXaGVuIDExOTMyMSBpcyBmaXhlZCAtIHJlbW92ZSBjb2RlIGJlbG93Ci0gICAgdXBkYXRlTW9kZWxGb3JVUkxQYXR0ZXJuKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlSXRlbUZyb21MaXN0KFN0cmluZ1tdIHNlbGVjdGlvbikKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBzZWwgPSBzZWxlY3Rpb25baV07Ci0gICAgICBzZXJ2bGV0SW5mb0dyb3VwLmxzdEpBWFJTU2VydmxldFVSTFBhdHRlcm5zLnJlbW92ZShzZWwpOwotICAgIH0KLSAgICAvLyBXaGVuIDExOTMyMSBpcyBmaXhlZCAtIHJlbW92ZSBjb2RlIGJlbG93Ci0gICAgdXBkYXRlTW9kZWxGb3JVUkxQYXR0ZXJuKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlTW9kZWxGb3JVUkxQYXR0ZXJuKCkKLSAgewotICAgIG1vZGVsLnNldFByb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuU0VSVkxFVF9VUkxfUEFUVEVSTlMsIHNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuZ2V0SXRlbXMoKSk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlCi0gICAqIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5pbnRlcm5hbC5kYXRhbW9kZWwudWkuRGF0YU1vZGVsV2l6YXJkUGFnZQotICAgKiAjZ2V0VmFsaWRhdGlvblByb3BlcnR5TmFtZXMoKQotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldFZhbGlkYXRpb25Qcm9wZXJ0eU5hbWVzKCkKLSAgewotICAgIHJldHVybiBuZXcgU3RyaW5nW10geyBTRVJWTEVUX05BTUUsIFNFUlZMRVRfQ0xBU1NOQU1FLCBMSUJSQVJZX1BST1ZJREVSX0RFTEVHQVRFIH07Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlCi0gICAqIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5JRmFjZXRXaXphcmRQYWdlI3NldFdpemFyZENvbnRleHQKLSAgICogKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5JV2l6YXJkQ29udGV4dCkKLSAgICovCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgdm9pZCBzZXRXaXphcmRDb250ZXh0KElXaXphcmRDb250ZXh0IGNvbnRleHQpCi0gIHsKLSAgICAvLyBob29rIGludG8gd2ViIGRhdGFtb2RlbCBvZiBuZXcgcHJvamVjdCB3aXphcmQuCi0gICAgc1dFQlByb2plY3QgPSBjb250ZXh0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgSXRlcmF0b3IgaXQgPSBjb250ZXh0LmdldFNlbGVjdGVkUHJvamVjdEZhY2V0cygpLml0ZXJhdG9yKCk7Ci0gICAgSVByb2plY3RGYWNldFZlcnNpb24gd2ViRmFjZXRWZXJzaW9uID0gbnVsbDsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIGZpbmQgV2ViIGZhY2V0Ci0gICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0Lm5leHQoKTsKLSAgICAgIGlmIChwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKS5lcXVhbHMoImpzdC53ZWIiKSkgeyAvLyROT04tTkxTLTEkCi0gICAgICAgIHdlYkZhY2V0VmVyc2lvbiA9IHBmdjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh3ZWJGYWNldFZlcnNpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgd2ViQXBwRGF0YU1vZGVsID0gKElEYXRhTW9kZWwpIGNvbnRleHQuZ2V0Q29uZmlnKHdlYkZhY2V0VmVyc2lvbiwgSUZhY2V0ZWRQcm9qZWN0LkFjdGlvbi5UeXBlLklOU1RBTEwsIGNvbnRleHQuZ2V0UHJvamVjdE5hbWUoKSk7Ci0gICAgICAgIGlmICh3ZWJBcHBEYXRhTW9kZWwgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIHdlYiBmYWNldCBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZCEKLSAgICAgICAgICBpc1Byb2plY3RDcmVhdGlvbk1vZGUgPSBmYWxzZTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgT2JqZWN0IG9BZGRUb0VBUiA9IHdlYkFwcERhdGFNb2RlbC5nZXRQcm9wZXJ0eShJSjJFRU1vZHVsZUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQUREX1RPX0VBUik7Ci0gICAgICAgIE9iamVjdCBvVGFyZ2V0UnVudGltZSA9IHdlYkFwcERhdGFNb2RlbC5nZXRQcm9wZXJ0eShJSjJFRU1vZHVsZUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuRkFDRVRfUlVOVElNRSk7Ci0gICAgICAgIGlmIChvQWRkVG9FQVIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoKEJvb2xlYW4pIG9BZGRUb0VBUikuYm9vbGVhblZhbHVlKCkgPT0gdHJ1ZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBiQWRkVG9FQVIgPSB0cnVlOwotICAgICAgICAgICAgT2JqZWN0IG9FQVJQcm9qZWN0TmFtZSA9IHdlYkFwcERhdGFNb2RlbC5nZXRQcm9wZXJ0eShJSjJFRU1vZHVsZUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuRUFSX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgICAgICBpZiAob0VBUlByb2plY3ROYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRoaXMuc0VBUlByb2plY3QgPSAoU3RyaW5nKSBvRUFSUHJvamVjdE5hbWU7Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9UYXJnZXRSdW50aW1lICE9IG51bGwgJiYgb1RhcmdldFJ1bnRpbWUgaW5zdGFuY2VvZiBCcmlkZ2VkUnVudGltZSkKLSAgICAgICAgewotICAgICAgICAgIEJyaWRnZWRSdW50aW1lIGJyID0gKEJyaWRnZWRSdW50aW1lKSBvVGFyZ2V0UnVudGltZTsKLSAgICAgICAgICBpZiAoYnIgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUnVudGltZSBydW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoYnIpOwotICAgICAgICAgICAgaWYgKHJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSVJ1bnRpbWVUeXBlIHJ0VHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLSAgICAgICAgICAgICAgaWYgKHJ0VHlwZSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHNUYXJnZXRSdW50aW1lID0gcnRUeXBlLmdldElkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdlYkFwcERhdGFNb2RlbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd2ViQXBwRGF0YU1vZGVsLmFkZExpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBKQVhSU1VJUGx1Z2luLmxvZyhJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfRXJyb3JOb1dlYkFwcERhdGFNb2RlbCwgZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZQotICAgKiBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuaW50ZXJuYWwuZGF0YW1vZGVsLnVpLkRhdGFNb2RlbFdpemFyZFBhZ2UKLSAgICogIwotICAgKiBwcm9wZXJ0eUNoYW5nZWQob3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5EYXRhTW9kZWxFdmVudAotICAgKiApCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoRGF0YU1vZGVsRXZlbnQgZXZlbnQpCi0gIHsKLQotICAgIGlmICh3ZWJBcHBEYXRhTW9kZWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gZXZlbnQuZ2V0UHJvcGVydHlOYW1lKCk7Ci0gICAgICBpZiAocHJvcGVydHlOYW1lLmVxdWFscyhJSjJFRU1vZHVsZUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQ09ORklHX0ZPTERFUikpCi0gICAgICB7Ci0gICAgICAgIG1vZGVsLnNldFN0cmluZ1Byb3BlcnR5KFdFQkNPTlRFTlRfRElSLCBldmVudC5nZXRQcm9wZXJ0eSgpLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAocHJvcGVydHlOYW1lLmVxdWFscyhJSjJFRU1vZHVsZUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQUREX1RPX0VBUikpCi0gICAgICB7Ci0gICAgICAgIG1vZGVsLnNldEJvb2xlYW5Qcm9wZXJ0eShBRERfVE9fRUFSLCAoKEJvb2xlYW4pIGV2ZW50LmdldFByb3BlcnR5KCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb3BlcnR5TmFtZS5lcXVhbHMoSUoyRUVNb2R1bGVGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkZBQ0VUX1BST0pFQ1RfTkFNRSkpCi0gICAgICB7Ci0gICAgICAgIG1vZGVsLnNldFN0cmluZ1Byb3BlcnR5KFdFQlBST0pFQ1RfTkFNRSwgZXZlbnQuZ2V0UHJvcGVydHkoKS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb3BlcnR5TmFtZS5lcXVhbHMoSUoyRUVNb2R1bGVGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkVBUl9QUk9KRUNUX05BTUUpKQotICAgICAgewotICAgICAgICBtb2RlbC5zZXRTdHJpbmdQcm9wZXJ0eShFQVJQUk9KRUNUX05BTUUsIGV2ZW50LmdldFByb3BlcnR5KCkudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUuZXF1YWxzKElKMkVFTW9kdWxlRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5GQUNFVF9SVU5USU1FKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmdldFByb3BlcnR5KCkgIT0gbnVsbCkgCi0gICAgICAgICAgbW9kZWwuc2V0U3RyaW5nUHJvcGVydHkoVEFSR0VUUlVOVElNRSwgZXZlbnQuZ2V0UHJvcGVydHkoKS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucHJvcGVydHlDaGFuZ2VkKGV2ZW50KTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUKLSAgICogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLmRhdGFtb2RlbC51aS5EYXRhTW9kZWxXaXphcmRQYWdlCi0gICAqICNkaXNwb3NlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gICAgaWYgKHdlYkFwcERhdGFNb2RlbCAhPSBudWxsKQotICAgICAgd2ViQXBwRGF0YU1vZGVsLnJlbW92ZUxpc3RlbmVyKHRoaXMpOwotCi0vLyBqYXhyc0xpYkNmZ0NvbXAuZGlzcG9zZSgpOwotICAgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUKLSAgICogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLmRhdGFtb2RlbC51aS5EYXRhTW9kZWxXaXphcmRQYWdlCi0gICAqICNyZXN0b3JlRGVmYXVsdFNldHRpbmdzKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlc3RvcmVEZWZhdWx0U2V0dGluZ3MoKQotICB7Ci0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotCi0vLyBjaGVja1RvQ29tcGxldGVQYWdlKGpheHJzTGliQ2ZnQ29tcCk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlCi0gICAqIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5pbnRlcm5hbC5kYXRhbW9kZWwudWkuRGF0YU1vZGVsV2l6YXJkUGFnZQotICAgKiAjc2hvd1ZhbGlkYXRpb25FcnJvcnNPbkVudGVyKCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dWYWxpZGF0aW9uRXJyb3JzT25FbnRlcigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvSkFYUlNMaWJyYXJ5UHJvcGVydHlQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvSkFYUlNMaWJyYXJ5UHJvcGVydHlQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOGU5YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L0pBWFJTTGlicmFyeVByb3BlcnR5UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA5MTEwOSAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqIDIwMTAwMzAzICAgMjkxOTU0IGtjaG9uZ0BjYS5pYm0uY29tIC0gS2VpdGggQ2hvbmcsIEpBWC1SUzogSW1wbGVtZW50IEpBWC1SUyBGYWNldAotICogMjAxMDAzMTkgICAzMDY1OTQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTIGZhY2V0IGluc3RhbGwgZmFpbHMgZm9yIFdlYiAyLjMgJiAyLjQKLSAqIDIwMTAwMzI0ICAgMzA2OTM3IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUyBQcm9wZXJ0aWVzIHBhZ2UtIE5QRSBhZnRlciBwcmVzc2luZyBPSwotICogMjAxMDAzMjUgICAzMDcwNTkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgSkFYLVJTIHByb3BlcnRpZXMgcGFnZS0gZmllbGRzIGVtcHR5IG9yIGluY29ycmVjdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5saWJwcm92LklMaWJyYXJ5UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubGlicHJvdi5MaWJyYXJ5SW5zdGFsbERlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5saWJwcm92LkxpYnJhcnlGYWNldFByb3BlcnR5UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5JTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuVXJsUGF0dGVyblR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0TWFwcGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwuSUpBWFJTQ29yZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LklKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwucHJvamVjdC5mYWNldC5KQVhSU0oyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LkpBWFJTSkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwucHJvamVjdC5mYWNldC5KQVhSU1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5JSkFYUlNVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuSURhdGFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLQotQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKLXB1YmxpYyBmaW5hbCBjbGFzcyBKQVhSU0xpYnJhcnlQcm9wZXJ0eVBhZ2UKLQotZXh0ZW5kcyBMaWJyYXJ5RmFjZXRQcm9wZXJ0eVBhZ2UKLQotaW1wbGVtZW50cyBJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzCi0KLXsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUVElOR1NfU0VSVkxFVCA9ICJzZXJ2bGV0TmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdTX1NFUlZMRVRfQ0xBU1NOQU1FID0gInNlcnZsZXRDbGFzc25hbWUiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19VUkxfTUFQUElOR1MgPSAidXJsTWFwcGluZ3MiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19VUkxfUEFUVEVSTiA9ICJwYXR0ZXJuIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgU2VydmxldEluZm9ybWF0aW9uR3JvdXAgc2VydmxldEluZm9Hcm91cDsKLQotICAvLyBKYXZhIEVFCi0gIHByaXZhdGUgU2VydmxldCBzZXJ2bGV0ID0gbnVsbDsKLSAgcHJpdmF0ZSBTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZyA9IG51bGw7Ci0gIC8vIEoyRUUKLSAgcHJpdmF0ZSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0IGoyZWVTZXJ2bGV0ID0gbnVsbDsKLSAgcHJpdmF0ZSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0TWFwcGluZyBqMmVlU2VydmxldE1hcHBpbmcgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBpbml0aWFsSW5zdGFsbERlbGVnYXRlTGlicmFyeVByb3ZpZGVySUQgPSIiOyAvLyROT04tTkxTLTEkCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVQYWdlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbnRyb2wgYyA9IHN1cGVyLmNyZWF0ZVBhZ2VDb250ZW50cyhwYXJlbnQpOwotICAgIExpYnJhcnlJbnN0YWxsRGVsZWdhdGUgaW5pdGlhbEluc3RhbGxEZWxlZ2F0ZSA9IHN1cGVyLmdldExpYnJhcnlJbnN0YWxsRGVsZWdhdGUoKTsKLSAgICBpZiAoIGluaXRpYWxJbnN0YWxsRGVsZWdhdGUgIT0gbnVsbCApIHsKLSAgICAJSUxpYnJhcnlQcm92aWRlciBpbml0aWFsTGlicmFyeVByb3ZpZGVyID0gaW5pdGlhbEluc3RhbGxEZWxlZ2F0ZS5nZXRMaWJyYXJ5UHJvdmlkZXIoKTsKLSAgICAJaWYgKGluaXRpYWxMaWJyYXJ5UHJvdmlkZXIgIT0gbnVsbCkgewotICAgIAkJU3RyaW5nIGluaXRJRCA9IGluaXRpYWxMaWJyYXJ5UHJvdmlkZXIuZ2V0SWQoKTsKLSAgICAJCWluaXRpYWxJbnN0YWxsRGVsZWdhdGVMaWJyYXJ5UHJvdmlkZXJJRCA9IChpbml0SUQgPT0gbnVsbCkgPyBpbml0aWFsSW5zdGFsbERlbGVnYXRlTGlicmFyeVByb3ZpZGVySUQgOiBpbml0SUQ7IAotICAgIAl9Ci0gICAgfQotICAgIHNlcnZsZXRJbmZvR3JvdXAgPSBuZXcgU2VydmxldEluZm9ybWF0aW9uR3JvdXAoKENvbXBvc2l0ZSkgYywgU1dULk5PTkUpOwotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLQotICAgIHJldHVybiBjOwotICB9Ci0KLSAgcHVibGljIElQcm9qZWN0RmFjZXRWZXJzaW9uIGdldFByb2plY3RGYWNldFZlcnNpb24oKQotICB7Ci0gICAgZmluYWwgSVByb2plY3RGYWNldCBqYXhyc0ZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKQVhSU0NvcmVDb25zdGFudHMuSkFYUlNfRkFDRVRfSUQpOwotICAgIGZpbmFsIElGYWNldGVkUHJvamVjdCBmcHJvaiA9IGdldEZhY2V0ZWRQcm9qZWN0KCk7Ci0gICAgcmV0dXJuIGZwcm9qLmdldEluc3RhbGxlZFZlcnNpb24oamF4cnNGYWNldCk7Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncyh7ICJ1bmNoZWNrZWQiLCAicmF3dHlwZXMiIH0pCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0KLQlJTW9kZWxQcm92aWRlciBwcm92aWRlciA9IEpBWFJTVXRpbHMuZ2V0TW9kZWxQcm92aWRlcihnZXRQcm9qZWN0KCkpOwotCU9iamVjdCB3ZWJBcHBPYmogPSBwcm92aWRlci5nZXRNb2RlbE9iamVjdCgpOwotCUxpc3Q8U2VydmxldE1hcHBpbmc+IHNlcnZsZXRNYXBwaW5ncyA9IG5ldyBBcnJheUxpc3Q8U2VydmxldE1hcHBpbmc+KCk7Ci0gICAgaWYgKHdlYkFwcE9iaiAhPSBudWxsKQotICAgIHsJCi0gICAgCVN0cmluZyBzZXJ2bGV0TmFtZSA9IEpBWFJTVXRpbHMuSkFYUlNfREVGQVVMVF9TRVJWTEVUX05BTUU7IAotICAgIAlTdHJpbmcgc2VydmxldENsYXNzID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKEpBWFJTSkVFVXRpbHMuaXNXZWJBcHAyNW9yMzAod2ViQXBwT2JqKSkgewotCQkJV2ViQXBwIHdlYkFwcCA9IChXZWJBcHApIHdlYkFwcE9iajsKLQkJCVNlcnZsZXQgc2VydmxldCA9IEpBWFJTSkVFVXRpbHMuZmluZEpBWFJTU2VydmxldCh3ZWJBcHApOwotCQkJaWYgKHNlcnZsZXQgIT0gbnVsbCkgewotCQkJCXRoaXMuc2VydmxldCA9IHNlcnZsZXQ7Ci0JCQkJc2VydmxldE1hcHBpbmdzID0gd2ViQXBwLmdldFNlcnZsZXRNYXBwaW5ncygpOwotCQkJCXNlcnZsZXROYW1lID0gKHNlcnZsZXQuZ2V0U2VydmxldE5hbWUoKSA9PSBudWxsKSAgPyAgc2VydmxldE5hbWUgOiBzZXJ2bGV0LmdldFNlcnZsZXROYW1lKCk7Ci0JCQkJc2VydmxldENsYXNzID0oc2VydmxldC5nZXRTZXJ2bGV0Q2xhc3MoKSA9PSBudWxsKSA/IHNlcnZsZXRDbGFzcyA6IHNlcnZsZXQuZ2V0U2VydmxldENsYXNzKCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvLyAyLjMgb3IgMi40IHdlYiBhcHAKLQkJCW9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLldlYkFwcCB3ZWJBcHAgPSAob3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViQXBwKSB3ZWJBcHBPYmo7Ci0JCQlvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0IHNlcnZsZXQgPSBKQVhSU0oyRUVVdGlscwotCQkJCQkuZmluZEpBWFJTU2VydmxldCh3ZWJBcHApOwotCQkJaWYgKHNlcnZsZXQgIT0gbnVsbCkgewotCQkJCXRoaXMuajJlZVNlcnZsZXQgPSBzZXJ2bGV0OwotCQkJCXNlcnZsZXRNYXBwaW5ncyA9IHdlYkFwcC5nZXRTZXJ2bGV0TWFwcGluZ3MoKTsKLQkJCQlzZXJ2bGV0TmFtZSA9IChzZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkgPT0gbnVsbCkgID8gIHNlcnZsZXROYW1lIDogc2VydmxldC5nZXRTZXJ2bGV0TmFtZSgpOwotCQkJCWlmIChzZXJ2bGV0LmdldFNlcnZsZXRDbGFzcygpICE9IG51bGwpIHsKLQkJCQkJc2VydmxldENsYXNzID0oc2VydmxldC5nZXRTZXJ2bGV0Q2xhc3MoKS5nZXRRdWFsaWZpZWROYW1lKCkgPT0gbnVsbCkgPyBzZXJ2bGV0Q2xhc3MgOiBzZXJ2bGV0LmdldFNlcnZsZXRDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJfQotCQlzZXJ2bGV0SW5mb0dyb3VwLnR4dEpBWFJTU2VydmxldE5hbWUuc2V0VGV4dChzZXJ2bGV0TmFtZSk7Ci0gICAgICAgIHNlcnZsZXRJbmZvR3JvdXAudHh0SkFYUlNTZXJ2bGV0Q2xhc3NOYW1lLnNldFRleHQoc2VydmxldENsYXNzKTsKLSAgICAgIC8vIEZpbmQgdGhlIHNlcnZsZXRNYXBwaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNlcnZsZXROYW1lCi0gICAgICAgIGlmIChKQVhSU0pFRVV0aWxzLmlzV2ViQXBwMjVvcjMwKHdlYkFwcE9iaikpIHsKLSAgICAgICAgICAgIHNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMucmVtb3ZlQWxsKCk7Ci0KLSAgICAgIGZvciAoSXRlcmF0b3I8U2VydmxldE1hcHBpbmc+IGkgPSBzZXJ2bGV0TWFwcGluZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNlcnZsZXRNYXBwaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaW5pdCB0aGUgc2VydmxldE1hcHBpbmcKLSAgICAgICAgIAkJU2VydmxldE1hcHBpbmcgbmV4dCA9IChTZXJ2bGV0TWFwcGluZykgbzsKLSAgICAgICAgICBpZiAoc2VydmxldE5hbWUuZXF1YWxzKG5leHQuZ2V0U2VydmxldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgCQkgIHRoaXMuc2VydmxldE1hcHBpbmcgPSBuZXh0OwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBwID0gc2VydmxldE1hcHBpbmcuZ2V0VXJsUGF0dGVybnMoKS5pdGVyYXRvcigpOyBwLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFVybFBhdHRlcm5UeXBlIHBhdHRlcm4gPSAoVXJsUGF0dGVyblR5cGUpIHAubmV4dCgpOwotICAgICAgICAgICAgICBzZXJ2bGV0SW5mb0dyb3VwLmxzdEpBWFJTU2VydmxldFVSTFBhdHRlcm5zLmFkZChwYXR0ZXJuLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgCXNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMucmVtb3ZlQWxsKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3I8U2VydmxldE1hcHBpbmc+IGkgPSBzZXJ2bGV0TWFwcGluZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLlNlcnZsZXRNYXBwaW5nKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGluaXQgdGhlIHNlcnZsZXRNYXBwaW5nCi0gICAgICAgIAkgIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLlNlcnZsZXRNYXBwaW5nIG5leHQgPSAob3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldE1hcHBpbmcpIG87Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzZXJ2bGV0TmFtZS5lcXVhbHMobmV4dC5nZXRTZXJ2bGV0KCkuZ2V0U2VydmxldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgIAkJICB0aGlzLmoyZWVTZXJ2bGV0TWFwcGluZyA9IG5leHQ7Ci0gICAgICAgICAgIAkKLSAgICAgICAgICAgCQkKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGF0dGVybiA9IG5leHQuZ2V0VXJsUGF0dGVybigpOwotICAgICAgICAgICAgICAgIHNlcnZsZXRJbmZvR3JvdXAubHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuYWRkKG5ldyBTdHJpbmcocGF0dGVybikpOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotCSAgICBMaWJyYXJ5SW5zdGFsbERlbGVnYXRlIGluc3RhbGxEZWxlZ2F0ZSA9IHN1cGVyLmdldExpYnJhcnlJbnN0YWxsRGVsZWdhdGUoKTsKLQkgICAgaWYgKCBpbnN0YWxsRGVsZWdhdGUgIT0gbnVsbCApIHsKLQkgICAgCUlMaWJyYXJ5UHJvdmlkZXIgbGlicmFyeVByb3ZpZGVyID0gaW5zdGFsbERlbGVnYXRlLmdldExpYnJhcnlQcm92aWRlcigpOwotCSAgICAJaWYgKGxpYnJhcnlQcm92aWRlciAhPSBudWxsKSB7Ci0JICAgIAkJU3RyaW5nIGlkID0gbGlicmFyeVByb3ZpZGVyLmdldElkKCk7Ci0JICAgIAkJaWYgKCFpbml0aWFsSW5zdGFsbERlbGVnYXRlTGlicmFyeVByb3ZpZGVySUQuZXF1YWxzKGlkKSB8fCBJSkFYUlNVSUNvbnN0YW50cy5VU0VSX0xJQlJBUllfSUQuZXF1YWxzKGlkKSkgewotCSAgICAJCQkvLyBUaGlzIHdpbGwgdXBkYXRlIHRoZSBsaWJyYXJpZXMgYnkgY2FsbGluZyB0aGUgbGlicmFyeSBwcm92aWRlciBkZWxlZ2F0ZQotCSAgICAJCQkgIHN1cGVyLnBlcmZvcm1PaygpOwotCSAgICAJCX0KLQkgICAgCX0KLQkgICAgfQotCi0JICAKLSAgICAvLyBVcGRhdGUgdGhlIHNlcnZsZXQgcHJvcGVydGllcwotICAgIGNyZWF0ZVNlcnZsZXRBbmRNb2RpZnlXZWJYTUwoZ2V0UHJvamVjdCgpLCBudWxsLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVTZXJ2bGV0QW5kTW9kaWZ5V2ViWE1MKGZpbmFsIElQcm9qZWN0IHByb2plY3QsIGZpbmFsIElEYXRhTW9kZWwgY29uZmlnLCBmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gIHsKLSAgICBJTW9kZWxQcm92aWRlciBwcm92aWRlciA9IEpBWFJTVXRpbHMuZ2V0TW9kZWxQcm92aWRlcihwcm9qZWN0KTsKLSAgICBJUGF0aCB3ZWJYTUxQYXRoID0gbmV3IFBhdGgoIldFQi1JTkYiKS5hcHBlbmQoIndlYi54bWwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgTGlzdDxTdHJpbmc+IGxpc3RPZk1hcHBpbmdzID0gQXJyYXlzLmFzTGlzdChzZXJ2bGV0SW5mb0dyb3VwLmxzdEpBWFJTU2VydmxldFVSTFBhdHRlcm5zLmdldEl0ZW1zKCkpOwotCi0gICAgaWYgKEpBWFJTSkVFVXRpbHMuaXNXZWJBcHAyNW9yMzAocHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoKSkpCi0gICAgewotICAgICAgcHJvdmlkZXIubW9kaWZ5KG5ldyBVcGRhdGVXZWJYTUxGb3JKYXZhRUUocHJvamVjdCwgdGhpcy5zZXJ2bGV0LCB0aGlzLnNlcnZsZXRNYXBwaW5nLCBzZXJ2bGV0SW5mb0dyb3VwLnR4dEpBWFJTU2VydmxldE5hbWUuZ2V0VGV4dCgpLCBzZXJ2bGV0SW5mb0dyb3VwLnR4dEpBWFJTU2VydmxldENsYXNzTmFtZS5nZXRUZXh0KCksIGxpc3RPZk1hcHBpbmdzKSwKLSAgICAgICAgICBkb2VzRERGaWxlRXhpc3QocHJvamVjdCwgd2ViWE1MUGF0aCkgPyB3ZWJYTUxQYXRoIDogSU1vZGVsUHJvdmlkZXIuRk9SQ0VTQVZFKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIC8vIG11c3QgYmUgMi4zIG9yIDIuNAotICAgIHsKLSAgICAgIHByb3ZpZGVyLm1vZGlmeShuZXcgVXBkYXRlV2ViWE1MRm9ySjJFRShwcm9qZWN0LCB0aGlzLmoyZWVTZXJ2bGV0LCB0aGlzLmoyZWVTZXJ2bGV0TWFwcGluZywgc2VydmxldEluZm9Hcm91cC50eHRKQVhSU1NlcnZsZXROYW1lLmdldFRleHQoKSwgc2VydmxldEluZm9Hcm91cC50eHRKQVhSU1NlcnZsZXRDbGFzc05hbWUuZ2V0VGV4dCgpLCBsaXN0T2ZNYXBwaW5ncyksIHdlYlhNTFBhdGgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBkb2VzRERGaWxlRXhpc3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggd2ViWE1MUGF0aCkKLSAgewotICAgIHJldHVybiBwcm9qZWN0LmdldFByb2plY3RSZWxhdGl2ZVBhdGgoKS5hcHBlbmQod2ViWE1MUGF0aCkudG9GaWxlKCkuZXhpc3RzKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L0pBWFJTVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxQYW5lbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L0pBWFJTVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxQYW5lbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWQ2MjU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvcHJvamVjdC9mYWNldC9KQVhSU1VzZXJMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsUGFuZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAxMDAzMDMgICAyOTE5NTQga2Nob25nQGNhLmlibS5jb20gLSBLZWl0aCBDaG9uZywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKiAyMDEwMDMxMCAgIDI5MTk1NCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqIDIwMTAwMzE5ICAgMzA2NTk1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIHNldmVyYWwgaW5zdGFsbCBzY2VuYXJpb3MgZmFpbCBmb3IgYm90aCB1c2VyIGxpYnJhcnkgJiBub24tdXNlciBsaWJyYXJ5Ci0gKiAyMDEwMDMyNCAgIDMwNjkzNyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBKQVgtUlMgUHJvcGVydGllcyBwYWdlLSBOUEUgYWZ0ZXIgcHJlc3NpbmcgT0sKLSAqIDIwMTAwNDA3ICAgMzA4NDAxIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEpBWC1SUyBmYWNldCB3aXphcmQgcGFnZSAtIFNoYXJlZC1saWJyYXJ5IG9wdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwucHJvamVjdC5mYWNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmxpYnByb3YuSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubGlicHJvdi5MaWJyYXJ5SW5zdGFsbERlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC51aS5saWJwcm92LnVzZXIuVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxQYW5lbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS5pbnRlcm5hbC5qYXhyc2xpYnJhcnljb25maWcuSkFYUlNMaWJyYXJ5Q29uZmlnRGlhbG9nU2V0dGluZ0RhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwuamF4cnNsaWJyYXJ5Y29uZmlnLkpBWFJTTGlicmFyeUNvbmZpZ01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlLmludGVybmFsLmpheHJzbGlicmFyeWNvbmZpZy5KQVhSU0xpYnJhcnlDb25maWdsTW9kZWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwuamF4cnNzaGFyZWRsaWJyYXJ5Y29uZmlnLlNoYXJlZExpYnJhcnlDb25maWd1cmF0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlLmludGVybmFsLnByb2plY3QuZmFjZXQuSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS5pbnRlcm5hbC5wcm9qZWN0LmZhY2V0LkpBWFJTVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxPcGVyYXRpb25Db25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5JRGF0YU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgSkFYUlNVc2VyTGlicmFyeVByb3ZpZGVySW5zdGFsbFBhbmVsIGV4dGVuZHMgVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxQYW5lbAotewotICBwcml2YXRlIEpBWFJTRmFjZXRJbmNsdWRlTGlicmFyaWVzR3JvdXAgaW5jbHVkZUxpYnNHcm91cDsKLSAgcHJpdmF0ZSBKQVhSU0xpYnJhcnlDb25maWdNb2RlbCB3b3JraW5nQ29weU1vZGVsID0gbnVsbDsKLSAgcHJpdmF0ZSBJRGF0YU1vZGVsIG1vZGVsOwotICBwcml2YXRlIEpBWFJTVXNlckxpYnJhcnlQcm92aWRlckluc3RhbGxPcGVyYXRpb25Db25maWcgY2ZnOzsKLSAgcHJpdmF0ZSBTZXJ2bGV0SW5mb3JtYXRpb25Hcm91cCBzZXJ2bGV0SW5mb0dyb3VwOwotICBwcml2YXRlIGJvb2xlYW4gc2hhcmVkTGliU3VwcG9ydGVkOwotCi0gIHB1YmxpYyBKQVhSU1VzZXJMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsUGFuZWwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRyb2xOZXh0VG9NYW5hZ2VIeXBlcmxpbmsoZmluYWwgQ29tcG9zaXRlIGNvbXBvc2l0ZSkKLSAgewotICAgIGNmZyA9IChKQVhSU1VzZXJMaWJyYXJ5UHJvdmlkZXJJbnN0YWxsT3BlcmF0aW9uQ29uZmlnKSBnZXRPcGVyYXRpb25Db25maWcoKTsKLSAgICBtb2RlbCA9IGNmZy5nZXRNb2RlbCgpOwotCi0KLSAgICBDb21wb3NpdGUgbWFpbkNvbXAgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAxOwotICAgIGdsLm1hcmdpblRvcCA9IDA7Ci0gICAgZ2wubWFyZ2luQm90dG9tID0gMDsKLSAgICBnbC5tYXJnaW5SaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luTGVmdCA9IDA7Ci0gICAgbWFpbkNvbXAuc2V0TGF5b3V0KGdsKTsKLSAgICBpZiAoIW9uUHJvcGVydGllc1BhZ2UoKSkgewotICAgICAgCVN0cmluZyBsaWJyYXJ5SUQgPSAoKExpYnJhcnlJbnN0YWxsRGVsZWdhdGUpbW9kZWwuZ2V0UHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5MSUJSQVJZX1BST1ZJREVSX0RFTEVHQVRFKSkuZ2V0TGlicmFyeVByb3ZpZGVyKCkuZ2V0SWQoKTsKLSAgICAgIAlzaGFyZWRMaWJTdXBwb3J0ZWQgPSBTaGFyZWRMaWJyYXJ5Q29uZmlndXJhdG9yVXRpbAotICAgIAkJCQkJCS5pc1NoYXJlZExpYlN1cHBvcnRBdmFpbGFibGUoCi0gICAgCQkJCQkJCQlsaWJyYXJ5SUQsCi0gICAgCQkJCQkJCQltb2RlbC5nZXRTdHJpbmdQcm9wZXJ0eShJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVFJVTlRJTUUpLAotICAgIAkJCQkJCQkJU2hhcmVkTGlicmFyeUNvbmZpZ3VyYXRvclV0aWwKLSAgICAJCQkJCQkJCQkJLmdldFdlYlByb2plY3QobW9kZWwpLAotICAgIAkJCQkJCQkJU2hhcmVkTGlicmFyeUNvbmZpZ3VyYXRvclV0aWwKLSAgICAJCQkJCQkJCQkJLmdldEVBUlByb2plY3QobW9kZWwpLAotICAgIAkJCQkJCQkJU2hhcmVkTGlicmFyeUNvbmZpZ3VyYXRvclV0aWwKLSAgICAJCQkJCQkJCQkJLmdldEFkZFRvRWFyKG1vZGVsKSk7Ci0KLQotICAgIAkvL3dlIGFyZSBpbiBmYWNldCBpbnN0YWxsIG1vZGUKLSAgICAJaW5jbHVkZUxpYnNHcm91cCA9IG5ldyBKQVhSU0ZhY2V0SW5jbHVkZUxpYnJhcmllc0dyb3VwKG1haW5Db21wLCBTV1QuTk9ORSk7Ci0gICAgCWluY2x1ZGVMaWJzR3JvdXAuZ2V0Q29weU9uUHVibGlzaENoZWNrQm94KCkuc2V0U2VsZWN0aW9uKGNmZy5pc0luY2x1ZGVXaXRoQXBwbGljYXRpb25FbmFibGVkKCkpOwotICAgIAotICAgIAotCi0KLQkJaW5jbHVkZUxpYnNHcm91cC5nZXRDb3B5T25QdWJsaXNoQ2hlY2tCb3goKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkJCQluZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQkJCQkJCWNmZy5zZXRJbmNsdWRlV2l0aEFwcGxpY2F0aW9uRW5hYmxlZChpbmNsdWRlTGlic0dyb3VwCi0JCQkJCQkJCS5nZXRDb3B5T25QdWJsaXNoQ2hlY2tCb3goKS5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJCQlib29sZWFuIGRlcGxveUxpYiA9IGZhbHNlOwotCQkJCQkJYm9vbGVhbiBzaGFyZUxpYiA9IGZhbHNlOwotCQkJCQkJaWYgKGluY2x1ZGVMaWJzR3JvdXAuZ2V0Q29weU9uUHVibGlzaENoZWNrQm94KCkKLQkJCQkJCQkJLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkJCQkJZGVwbG95TGliID0gaW5jbHVkZUxpYnNHcm91cAotCQkJCQkJCQkJLmdldEJ0bkRlcGxveUphcnMoKS5nZXRTZWxlY3Rpb24oKTsKLQkJCQkJCQlzaGFyZUxpYiA9IGluY2x1ZGVMaWJzR3JvdXAKLQkJCQkJCQkJCS5nZXRCdG5TaGFyZWRMaWJyYXJ5KCkuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJCQkJY2ZnLnNldElzRGVwbG95KGRlcGxveUxpYik7Ci0JCQkJCQkJY2ZnLnNldFNoYXJlZExpYnJhcnkoc2hhcmVMaWIpOwotCQkJCQkJCUlEYXRhTW9kZWwgbW9kZWwgPSBjZmcuZ2V0TW9kZWwoKTsKLQkJCQkJCQltb2RlbC5zZXRQcm9wZXJ0eSgKLQkJCQkJCQkJCUlKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuREVQTE9ZX0lNUExFTUVOVEFUSU9OLAotCQkJCQkJCQkJZGVwbG95TGliKTsKLQkJCQkJCQltb2RlbC5zZXRQcm9wZXJ0eSgKLQkJCQkJCQkJCUlKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuU0hBUkVETElCUkFSWSwKLQkJCQkJCQkJCXNoYXJlTGliKTsKLQkJCQkJCQl1cGRhdGVJbmNsdWRlTGlicmFyaWVzR3JvdXBTdGF0ZShzaGFyZUxpYiwgZGVwbG95TGliLCBzaGFyZWRMaWJTdXBwb3J0ZWQpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQljZmcuc2V0SXNEZXBsb3koZGVwbG95TGliKTsKLQkJCQkJCQljZmcuc2V0U2hhcmVkTGlicmFyeShzaGFyZUxpYik7Ci0JCQkJCQkJSURhdGFNb2RlbCBtb2RlbCA9IGNmZy5nZXRNb2RlbCgpOwotCQkJCQkJCW1vZGVsLnNldFByb3BlcnR5KAotCQkJCQkJCQkJSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5ERVBMT1lfSU1QTEVNRU5UQVRJT04sCi0JCQkJCQkJCQlkZXBsb3lMaWIpOwotCQkJCQkJCW1vZGVsLnNldFByb3BlcnR5KAotCQkJCQkJCQkJSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5TSEFSRURMSUJSQVJZLAotCQkJCQkJCQkJc2hhcmVMaWIpOwotCQkJCQkJCXNldENoaWxkcmVuRW5hYmxlZChpbmNsdWRlTGlic0dyb3VwLmdldEluY2x1ZGVMaWJSYWRpb3NDb21wb3NpdGUoKSwgZmFsc2UpOwotCi0JCQkJCQl9Ci0JCQkJCQkKLQkJCQkJCQotCi0JCQkJCX0KLQkJCQl9KTsKLQotCQlpbmNsdWRlTGlic0dyb3VwLmdldEJ0bkRlcGxveUphcnMoKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkJCQluZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCQkJYm9vbGVhbiBkZXBsb3lMaWIgPSBpbmNsdWRlTGlic0dyb3VwLmdldEJ0bkRlcGxveUphcnMoKQotCQkJCQkJCQkuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJCQlib29sZWFuIHNoYXJlTGliID0gaW5jbHVkZUxpYnNHcm91cAotCQkJCQkJCQkuZ2V0QnRuU2hhcmVkTGlicmFyeSgpLmdldFNlbGVjdGlvbigpOwotCQkJCQkJY2ZnLnNldElzRGVwbG95KGRlcGxveUxpYik7Ci0JCQkJCQljZmcuc2V0U2hhcmVkTGlicmFyeShzaGFyZUxpYik7Ci0JCQkJCQlJRGF0YU1vZGVsIG1vZGVsID0gY2ZnLmdldE1vZGVsKCk7Ci0JCQkJCQltb2RlbC5zZXRQcm9wZXJ0eSgKLQkJCQkJCQkJSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5ERVBMT1lfSU1QTEVNRU5UQVRJT04sCi0JCQkJCQkJCWRlcGxveUxpYik7Ci0JCQkJCQltb2RlbC5zZXRQcm9wZXJ0eSgKLQkJCQkJCQkJSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5TSEFSRURMSUJSQVJZLAotCQkJCQkJCQlzaGFyZUxpYik7Ci0JCQkJCX0KLQkJCQl9KTsKLQotCQlpbmNsdWRlTGlic0dyb3VwLmdldEJ0blNoYXJlZExpYnJhcnkoKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkJCQluZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCQkJYm9vbGVhbiBkZXBsb3lMaWIgPSBpbmNsdWRlTGlic0dyb3VwLmdldEJ0bkRlcGxveUphcnMoKQotCQkJCQkJCQkuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJCQlib29sZWFuIHNoYXJlTGliID0gaW5jbHVkZUxpYnNHcm91cAotCQkJCQkJCQkuZ2V0QnRuU2hhcmVkTGlicmFyeSgpLmdldFNlbGVjdGlvbigpOwotCQkJCQkJY2ZnLnNldElzRGVwbG95KGRlcGxveUxpYik7Ci0JCQkJCQljZmcuc2V0U2hhcmVkTGlicmFyeShzaGFyZUxpYik7Ci0JCQkJCQlJRGF0YU1vZGVsIG1vZGVsID0gY2ZnLmdldE1vZGVsKCk7Ci0JCQkJCQltb2RlbC5zZXRQcm9wZXJ0eSgKLQkJCQkJCQkJSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5ERVBMT1lfSU1QTEVNRU5UQVRJT04sCi0JCQkJCQkJCWRlcGxveUxpYik7Ci0JCQkJCQltb2RlbC5zZXRQcm9wZXJ0eSgKLQkJCQkJCQkJSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5TSEFSRURMSUJSQVJZLAotCQkJCQkJCQlzaGFyZUxpYik7Ci0JCQkJCX0KLQkJCQl9KTsKLQotICAgIGZpbmFsIElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoZmluYWwgU3RyaW5nIHByb3BlcnR5LCBmaW5hbCBPYmplY3Qgb2xkVmFsdWUsIGZpbmFsIE9iamVjdCBuZXdWYWx1ZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG9sZFZhbHVlICE9IG5ld1ZhbHVlKQotICAgICAgICB7Ci0vLyAgICAgICAgICBjb3B5T25QdWJsaXNoQ2hlY2tCb3guc2V0U2VsZWN0aW9uKGNmZy5pc0luY2x1ZGVXaXRoQXBwbGljYXRpb25FbmFibGVkKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGNmZy5hZGRMaXN0ZW5lcihsaXN0ZW5lciwgSkFYUlNVc2VyTGlicmFyeVByb3ZpZGVySW5zdGFsbE9wZXJhdGlvbkNvbmZpZy5QUk9QX0lOQ0xVREVfV0lUSF9BUFBMSUNBVElPTl9FTkFCTEVEKTsKLQotICAgIGluY2x1ZGVMaWJzR3JvdXAuZ2V0Q29weU9uUHVibGlzaENoZWNrQm94KCkuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKGZpbmFsIERpc3Bvc2VFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgY2ZnLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICB9Ci0KLSAgICBzZXREb3dubG9hZENvbW1hbmRFbmFibGVkKGZhbHNlKTsKLSAgICBpbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIG1haW5Db21wOwotICB9Ci0KLQlwcml2YXRlIGJvb2xlYW4gb25Qcm9wZXJ0aWVzUGFnZSgpIHsKLQkJcmV0dXJuIGNmZy5nZXRNb2RlbCgpID09IG51bGw7Ci0JfQotCi0KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoKQotICB7Ci0gICAgLy8gaWYgc2hhcmVkIGxpYiBub3Qgc3VwcG9ydGVkIGJ1dCBzaGFyZWQgbGliIHNldHRpbmcgd2FzIHRydWUsIGFzc3VtZSB0aGV5Ci0gICAgLy8gc3RpbGwgd2FudCB0byBpbmNsdWRlIGxpYnJhcmllcwotCUpBWFJTTGlicmFyeUNvbmZpZ2xNb2RlbFNvdXJjZSBzb3VyY2U7Ci0JaWYgKCFvblByb3BlcnRpZXNQYWdlKCkpIAotCQlzb3VyY2UgPSBuZXcgSkFYUlNMaWJyYXJ5Q29uZmlnRGlhbG9nU2V0dGluZ0RhdGEoaW5jbHVkZUxpYnNHcm91cC5nZXRCdG5EZXBsb3lKYXJzKCkuZ2V0U2VsZWN0aW9uKCksIGluY2x1ZGVMaWJzR3JvdXAuZ2V0QnRuU2hhcmVkTGlicmFyeSgpLmdldFNlbGVjdGlvbigpLCB0cnVlKTsKLQllbHNlCi0JCXNvdXJjZSA9IG5ldyBKQVhSU0xpYnJhcnlDb25maWdEaWFsb2dTZXR0aW5nRGF0YSh0cnVlLCBmYWxzZSwgZmFsc2UpOwotICAgIGlmIChzb3VyY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBuZXZlciByZWFkIHBlcnNpc3RlbnRNb2RlbCA9IHNvdXJjZTsKLSAgICAgIHdvcmtpbmdDb3B5TW9kZWwgPSBKQVhSU0xpYnJhcnlDb25maWdNb2RlbC5KQVhSU0xpYnJhcnlDb25maWdNb2RlbEZhY3RvcnkuY3JlYXRlSW5zdGFuY2Uoc291cmNlKTsKLSAgICAgIGluaXRpYWxpemVDb250cm9sVmFsdWVzKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVDb250cm9sVmFsdWVzKCkKLSAgewotLy8gYnRuRGVwbG95SmFycy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotLy8gYnRuU2hhcmVkTGlicmFyeS5zZXRTZWxlY3Rpb24oZmFsc2UpOwotLy8gY29weU9uUHVibGlzaENoZWNrQm94LnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JICAKLSAgICBpZiAoIW9uUHJvcGVydGllc1BhZ2UoKSkKLSAgICB7Ci0gIAkgIGJvb2xlYW4gYlNoYXJlZExpYiA9IChCb29sZWFuKSBtb2RlbAotCQkuZ2V0RGVmYXVsdFByb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuU0hBUkVETElCUkFSWSk7Ci0gIAkgIGJvb2xlYW4gYkRlcGxveSA9IChCb29sZWFuKSBtb2RlbAotCQkuZ2V0RGVmYXVsdFByb3BlcnR5KElKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuREVQTE9ZX0lNUExFTUVOVEFUSU9OKTsKLQkJCQlpZiAoc2hhcmVkTGliU3VwcG9ydGVkKSB7Ci0JCQkJCWJTaGFyZWRMaWIgPSBTaGFyZWRMaWJyYXJ5Q29uZmlndXJhdG9yVXRpbAotCQkJCQkJCS5pc1NoYXJlZExpYlNlbGVjdGVkQnlEZWZhdWx0KG1vZGVsCi0JCQkJCQkJCQkuZ2V0U3RyaW5nUHJvcGVydHkoSUpBWFJTRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRSVU5USU1FKSk7Ci0JCQkJCWlmICghYlNoYXJlZExpYikKLQkJCQkJCWJEZXBsb3kgPSB0cnVlOwotCQkJCQllbHNlCi0JCQkJCQkvLyBkb24ndCB3YW50IGJvdGggdG8gYmUgdHJ1ZSwgc2hhcmVkIGxpYiB0YWtlcwotCQkJCQkJLy8gcHJlY2VkZW5jZQotCQkJCQkJYkRlcGxveSA9IGZhbHNlOwotCi0JCQkJfQotCQkJCS8vIHNldCB0aGUgcHJvcGVydGllcyBvbiB0aGUgbW9kZWwKLQkJCQltb2RlbC5zZXRCb29sZWFuUHJvcGVydHkoCi0JCQkJCQlJSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkRFUExPWV9JTVBMRU1FTlRBVElPTiwKLQkJCQkJCWJEZXBsb3kpOwotCQkJCWlmIChzaGFyZWRMaWJTdXBwb3J0ZWQpIHsKLQkJCQkJbW9kZWwuc2V0Qm9vbGVhblByb3BlcnR5KAotCQkJCQkJCUlKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuU0hBUkVETElCUkFSWSwKLQkJCQkJCQliU2hhcmVkTGliKTsKLQkJCQl9Ci0KLQkJCQl1cGRhdGVJbmNsdWRlTGlicmFyaWVzR3JvdXBTdGF0ZShiU2hhcmVkTGliLCBiRGVwbG95LCBzaGFyZWRMaWJTdXBwb3J0ZWQpOwotCi0JCQl9Ci0KLS8vIHJlZHJhdygpOwotICB9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlSW5jbHVkZUxpYnJhcmllc0dyb3VwU3RhdGUoYm9vbGVhbiBiU2hhcmVkTGliLCBib29sZWFuIGJEZXBsb3ksIGJvb2xlYW4gc2hhcmVkTGliU3VwcG9ydGVkKSB7Ci0JCQlpbmNsdWRlTGlic0dyb3VwLmdldENvcHlPblB1Ymxpc2hDaGVja0JveCgpLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCQlpbmNsdWRlTGlic0dyb3VwLmdldENvcHlPblB1Ymxpc2hDaGVja0JveCgpLnNldFNlbGVjdGlvbihiRGVwbG95Ci0JCQkJCXx8IChzaGFyZWRMaWJTdXBwb3J0ZWQgJiZiU2hhcmVkTGliKSk7Ci0JCQl1cGRhdGVDaGlsZHJlblN0YXRlKGJTaGFyZWRMaWIsIGJEZXBsb3ksIHNoYXJlZExpYlN1cHBvcnRlZCk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlQ2hpbGRyZW5TdGF0ZShib29sZWFuIGJTaGFyZWRMaWIsIGJvb2xlYW4gYkRlcGxveSwgYm9vbGVhbiBzaGFyZWRMaWJTdXBwb3J0ZWQpIHsKLQkJaW5jbHVkZUxpYnNHcm91cC5nZXRCdG5EZXBsb3lKYXJzKCkuc2V0U2VsZWN0aW9uKGJEZXBsb3kKLQkJCQl8fCAoaW5jbHVkZUxpYnNHcm91cC5nZXRDb3B5T25QdWJsaXNoQ2hlY2tCb3goKS5nZXRTZWxlY3Rpb24oKSAmJiAoIXNoYXJlZExpYlN1cHBvcnRlZCB8fCAoc2hhcmVkTGliU3VwcG9ydGVkICYmICFiU2hhcmVkTGliKSkpKTsKLQkJLy8gc2hhcmVkIGxpYnJhcnkgaGFzIHByZWNlZGVuY2UKLQkJaW5jbHVkZUxpYnNHcm91cC5nZXRCdG5TaGFyZWRMaWJyYXJ5KCkuc2V0U2VsZWN0aW9uKHNoYXJlZExpYlN1cHBvcnRlZAotCQkJCSYmIGJTaGFyZWRMaWIpOwotCQlpbmNsdWRlTGlic0dyb3VwLmdldEJ0blNoYXJlZExpYnJhcnkoKS5zZXRFbmFibGVkKGluY2x1ZGVMaWJzR3JvdXAuZ2V0Q29weU9uUHVibGlzaENoZWNrQm94KCkuZ2V0U2VsZWN0aW9uKCkgJiYgc2hhcmVkTGliU3VwcG9ydGVkKTsKLQkJaW5jbHVkZUxpYnNHcm91cC5nZXRCdG5EZXBsb3lKYXJzKCkuc2V0RW5hYmxlZChpbmNsdWRlTGlic0dyb3VwLmdldENvcHlPblB1Ymxpc2hDaGVja0JveCgpLmdldFNlbGVjdGlvbigpKTsKLQkJCi0JfQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDaGlsZHJlbkVuYWJsZWQoQ29tcG9zaXRlIHBhcmVudENvbXBvc2l0ZSwgYm9vbGVhbiBlbmFibGVkKSB7Ci0JCUNvbnRyb2xbXSB3c2RsQ29udHJvbHMgPSBwYXJlbnRDb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLQkJZm9yIChpbnQgaT0wOyBpPHdzZGxDb250cm9scy5sZW5ndGg7IGkrKykgewotCQkJd3NkbENvbnRyb2xzW2ldLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCX0KLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L1NlcnZsZXRJbmZvcm1hdGlvbkdyb3VwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvU2VydmxldEluZm9ybWF0aW9uR3JvdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg4MTAwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvU2VydmxldEluZm9ybWF0aW9uR3JvdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAxMDAzMDMgICAyOTE5NTQga2Nob25nQGNhLmlibS5jb20gLSBLZWl0aCBDaG9uZywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLnByb2plY3QuZmFjZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklJbnB1dFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklucHV0RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwucHJvamVjdC5mYWNldC5JSkFYUlNGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuSURhdGFNb2RlbDsKLQotcHVibGljIGNsYXNzIFNlcnZsZXRJbmZvcm1hdGlvbkdyb3VwIGV4dGVuZHMgQ29tcG9zaXRlIHsKLQotCXByaXZhdGUgR3JvdXAgc2VydmxldEluZm87Ci0JcHJpdmF0ZSBMYWJlbCBsYmxKQVhSU1NlcnZsZXROYW1lOwotCXB1YmxpYyBUZXh0IHR4dEpBWFJTU2VydmxldE5hbWU7Ci0JcHJpdmF0ZSBMYWJlbCBsYmxKQVhSU1NlcnZsZXRDbGFzc05hbWU7Ci0JcHVibGljIFRleHQgdHh0SkFYUlNTZXJ2bGV0Q2xhc3NOYW1lOwotCXByaXZhdGUgTGFiZWwgbGJsSkFYUlNTZXJ2bGV0VVJMUGF0dGVybnM7Ci0JcHVibGljIExpc3QgbHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnM7Ci0JcHVibGljIEJ1dHRvbiBidG5BZGRQYXR0ZXJuOwotCXB1YmxpYyBCdXR0b24gYnRuUmVtb3ZlUGF0dGVybjsKLQotCXByaXZhdGUgSURhdGFNb2RlbCBvcHRpb25hbE1vZGVsOwotCQotCXByaXZhdGUgSURpYWxvZ1NldHRpbmdzIGRpYWxvZ1NldHRpbmdzOwotCXByaXZhdGUgSURhdGFNb2RlbCB3ZWJBcHBEYXRhTW9kZWw7Ci0JcHJpdmF0ZSBTdHJpbmcgc0VBUlByb2plY3QgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIHNXRUJQcm9qZWN0ID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBzVGFyZ2V0UnVudGltZSA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGJBZGRUb0VBUiA9IGZhbHNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19TRVJWTEVUID0gInNlcnZsZXROYW1lIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19TRVJWTEVUX0NMQVNTTkFNRSA9ICJzZXJ2bGV0Q2xhc3NuYW1lIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19VUkxfTUFQUElOR1MgPSAidXJsTWFwcGluZ3MiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdTX1VSTF9QQVRURVJOID0gInBhdHRlcm4iOyAvLyROT04tTkxTLTEkCi0vLwlwcml2YXRlIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBudWxsOwotCQotCXB1YmxpYyBTZXJ2bGV0SW5mb3JtYXRpb25Hcm91cChDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIocGFyZW50LCBzdHlsZSk7Ci0KLSAgICAgICAgR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMSwgdHJ1ZSk7Ci0gICAgICAgIGdyaWRMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICAgICAgZ3JpZExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgICAgIGdyaWRMYXlvdXQudmVydGljYWxTcGFjaW5nID0gMDsKLSAgICAgICAgZ3JpZExheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0gICAgICAgIHNldExheW91dChncmlkTGF5b3V0KTsKLSAgICAgICAgc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLSAgICAgICAgc2VydmxldEluZm8gPSBuZXcgR3JvdXAodGhpcywgU1dULk5PTkUpOwotCQlHcmlkRGF0YSBzZXJ2bGV0R0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJc2VydmxldEluZm8uc2V0TGF5b3V0RGF0YShzZXJ2bGV0R0QpOwotCQlzZXJ2bGV0SW5mby5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJc2VydmxldEluZm8uc2V0VGV4dChNZXNzYWdlcy5KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfSkFYUlNTZXJ2bGV0TGFiZWwpOwotCi0JCWxibEpBWFJTU2VydmxldE5hbWUgPSBuZXcgTGFiZWwoc2VydmxldEluZm8sIFNXVC5OT05FKTsKLQkJbGJsSkFYUlNTZXJ2bGV0TmFtZQotCQkJCS5zZXRUZXh0KE1lc3NhZ2VzLkpBWFJTRmFjZXRJbnN0YWxsUGFnZV9KQVhSU1NlcnZsZXROYW1lTGFiZWwpOwotCQlsYmxKQVhSU1NlcnZsZXROYW1lLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORykpOwotCi0JCXR4dEpBWFJTU2VydmxldE5hbWUgPSBuZXcgVGV4dChzZXJ2bGV0SW5mbywgU1dULkJPUkRFUik7Ci0JCUdyaWREYXRhIGdkMiA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZDIuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQl0eHRKQVhSU1NlcnZsZXROYW1lLnNldExheW91dERhdGEoZ2QyKTsKLQotCQlsYmxKQVhSU1NlcnZsZXRDbGFzc05hbWUgPSBuZXcgTGFiZWwoc2VydmxldEluZm8sIFNXVC5OT05FKTsKLQkJbGJsSkFYUlNTZXJ2bGV0Q2xhc3NOYW1lCi0JCQkJLnNldFRleHQoTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX0pBWFJTU2VydmxldENsYXNzTmFtZUxhYmVsKTsKLQkJbGJsSkFYUlNTZXJ2bGV0Q2xhc3NOYW1lCi0JCQkJLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORykpOwotCi0JCXR4dEpBWFJTU2VydmxldENsYXNzTmFtZSA9IG5ldyBUZXh0KHNlcnZsZXRJbmZvLCBTV1QuQk9SREVSKTsKLQkJR3JpZERhdGEgZ2QyYyA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZDJjLmhvcml6b250YWxTcGFuID0gMjsKLQkJdHh0SkFYUlNTZXJ2bGV0Q2xhc3NOYW1lLnNldExheW91dERhdGEoZ2QyYyk7Ci0KLQkJbGJsSkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMgPSBuZXcgTGFiZWwoc2VydmxldEluZm8sIFNXVC5OVUxMKTsKLQkJbGJsSkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMKLQkJCQkuc2V0VGV4dChNZXNzYWdlcy5KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfSkFYUlNVUkxNYXBwaW5nTGFiZWwpOwotCQlsYmxKQVhSU1NlcnZsZXRVUkxQYXR0ZXJucy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgKLQkJCQlHcmlkRGF0YS5CRUdJTk5JTkcgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQkJbHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMgPSBuZXcgTGlzdChzZXJ2bGV0SW5mbywgU1dULkJPUkRFUik7Ci0JCUdyaWREYXRhIGdkMyA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotLy8JCWdkMy5oZWlnaHRIaW50ID0gY29udmVydEhlaWdodEluQ2hhcnNUb1BpeGVscyg1KTsKLQkJbHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuc2V0TGF5b3V0RGF0YShnZDMpOwotCQlsc3RKQVhSU1NlcnZsZXRVUkxQYXR0ZXJucy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlidG5SZW1vdmVQYXR0ZXJuLnNldEVuYWJsZWQobHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMKLQkJCQkJCS5nZXRTZWxlY3Rpb25Db3VudCgpID4gMCk7Ci0JCQl9Ci0JCX0pOwotCi0JCUNvbXBvc2l0ZSBidG5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNlcnZsZXRJbmZvLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgxLCBmYWxzZSk7Ci0JCWdsLm1hcmdpbkxlZnQgPSAwOwotCQlidG5Db21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLQkJYnRuQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORAotCQkJCXwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCkpOwotCi0JCWJ0bkFkZFBhdHRlcm4gPSBuZXcgQnV0dG9uKGJ0bkNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQlidG5BZGRQYXR0ZXJuLnNldFRleHQoTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX0FkZDIpOwotCQlidG5BZGRQYXR0ZXJuLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTAotCQkJCXwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0JCWJ0bkFkZFBhdHRlcm4uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJSW5wdXREaWFsb2cgZGlhbG9nID0gbmV3IElucHV0RGlhbG9nKGdldFNoZWxsKCksCi0JCQkJCQlNZXNzYWdlcy5KQVhSU0ZhY2V0SW5zdGFsbFBhZ2VfUGF0dGVybkRpYWxvZ1RpdGxlLAotCQkJCQkJTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX1BhdHRlcm5EaWFsb2dEZXNjLCBudWxsLAotCQkJCQkJbmV3IElJbnB1dFZhbGlkYXRvcigpIHsKLQotCQkJCQkJCXB1YmxpYyBTdHJpbmcgaXNWYWxpZChTdHJpbmcgbmV3VGV4dCkgewotCQkJCQkJCQlyZXR1cm4gaXNWYWxpZFBhdHRlcm4obmV3VGV4dCk7Ci0JCQkJCQkJfQotCi0JCQkJCQl9KTsKLQkJCQlkaWFsb2cub3BlbigpOwotCQkJCWlmIChkaWFsb2cuZ2V0UmV0dXJuQ29kZSgpID09IFdpbmRvdy5PSykgewotCQkJCQlhZGRJdGVtVG9MaXN0KGRpYWxvZy5nZXRWYWx1ZSgpLCB0cnVlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCWJ0blJlbW92ZVBhdHRlcm4gPSBuZXcgQnV0dG9uKGJ0bkNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQlidG5SZW1vdmVQYXR0ZXJuLnNldFRleHQoTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX1JlbW92ZSk7Ci0JCWJ0blJlbW92ZVBhdHRlcm4uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMCi0JCQkJfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQkJYnRuUmVtb3ZlUGF0dGVybi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJYnRuUmVtb3ZlUGF0dGVybi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlyZW1vdmVJdGVtRnJvbUxpc3QobHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCWJ0blJlbW92ZVBhdHRlcm4uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQl9Ci0JCX0pOwotCi0JfQotCi0JCi0JCi0JCi0JcHJpdmF0ZSBTdHJpbmcgaXNWYWxpZFBhdHRlcm4oU3RyaW5nIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQlyZXR1cm4gTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX1BhdHRlcm5FbXB0eU1zZzsKLQkJaWYgKGxzdEpBWFJTU2VydmxldFVSTFBhdHRlcm5zLmluZGV4T2YodmFsdWUpID49IDApCi0JCQlyZXR1cm4gTWVzc2FnZXMuSkFYUlNGYWNldEluc3RhbGxQYWdlX1BhdHRlcm5TcGVjaWZpZWRNc2c7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZEl0ZW1Ub0xpc3QoU3RyaW5nIHBhdHRlcm4sIGJvb2xlYW4gc2VsZWN0TWUpIHsKLQkJbHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuYWRkKHBhdHRlcm4gPT0gbnVsbCA/ICIiIDogcGF0dGVybik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHBhdHRlcm4gPT0gbnVsbCAmJiBzZWxlY3RNZSkKLQkJCWxzdEpBWFJTU2VydmxldFVSTFBhdHRlcm5zLnNldFNlbGVjdGlvbihsc3RKQVhSU1NlcnZsZXRVUkxQYXR0ZXJucwotCQkJCQkuZ2V0SXRlbUNvdW50KCkgLSAxKTsKLQkJLy8gV2hlbiAxMTkzMjEgaXMgZml4ZWQgLSByZW1vdmUgY29kZSBiZWxvdwotCQl1cGRhdGVNb2RlbEZvclVSTFBhdHRlcm4oKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZU1vZGVsRm9yVVJMUGF0dGVybigpIHsKLQkJaWYgKG9wdGlvbmFsTW9kZWwgIT0gbnVsbCkKLQkJICBvcHRpb25hbE1vZGVsLnNldFByb3BlcnR5KAotCQkJCUlKQVhSU0ZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuU0VSVkxFVF9VUkxfUEFUVEVSTlMsCi0JCQkJbHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMuZ2V0SXRlbXMoKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZW1vdmVJdGVtRnJvbUxpc3QoU3RyaW5nW10gc2VsZWN0aW9uKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgc2VsID0gc2VsZWN0aW9uW2ldOwotCQkJbHN0SkFYUlNTZXJ2bGV0VVJMUGF0dGVybnMucmVtb3ZlKHNlbCk7Ci0JCX0KLQkJLy8gV2hlbiAxMTkzMjEgaXMgZml4ZWQgLSByZW1vdmUgY29kZSBiZWxvdwotCQl1cGRhdGVNb2RlbEZvclVSTFBhdHRlcm4oKTsKLQl9Ci0KLQkKLQlwdWJsaWMgdm9pZCBzZXREYXRhTW9kZWwoSURhdGFNb2RlbCBtb2RlbCkKLQl7Ci0JICAgdGhpcy5vcHRpb25hbE1vZGVsID0gbW9kZWw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L1VwZGF0ZVdlYlhNTEJhc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvcHJvamVjdC9mYWNldC9VcGRhdGVXZWJYTUxCYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNmFmNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9qYXhycy91aS9pbnRlcm5hbC9wcm9qZWN0L2ZhY2V0L1VwZGF0ZVdlYlhNTEJhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDEwMDMwMyAgIDI5MTk1NCBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCBKQVgtUlM6IEltcGxlbWVudCBKQVgtUlMgRmFjZXQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkuaW50ZXJuYWwucHJvamVjdC5mYWNldDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFVwZGF0ZVdlYlhNTEJhc2UgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvcHJvamVjdC9mYWNldC9VcGRhdGVXZWJYTUxGb3JKMkVFLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvVXBkYXRlV2ViWE1MRm9ySjJFRS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTY0ZDRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvcHJvamVjdC9mYWNldC9VcGRhdGVXZWJYTUxGb3JKMkVFLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAxMDAzMDMgICAyOTE5NTQga2Nob25nQGNhLmlibS5jb20gLSBLZWl0aCBDaG9uZywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLnByb2plY3QuZmFjZXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLk1vZGVsUHJvdmlkZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLlNlcnZsZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldE1hcHBpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUuaW50ZXJuYWwucHJvamVjdC5mYWNldC5KQVhSU0oyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVXZWJYTUxGb3JKMkVFIGV4dGVuZHMgVXBkYXRlV2ViWE1MQmFzZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0JcHJpdmF0ZSBTZXJ2bGV0IHNlcnZsZXQ7Ci0JcHJpdmF0ZSBTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZzsKLQlwcml2YXRlIFN0cmluZyBuZXdTZXJ2bGV0TmFtZSwgbmV3U2VydmxldENsYXNzOwotCXByaXZhdGUgTGlzdDxTdHJpbmc+IGxpc3RPZk1hcHBpbmdzOwotCi0JcHVibGljIFVwZGF0ZVdlYlhNTEZvckoyRUUoSVByb2plY3QgcHJvamVjdCwgU2VydmxldCBzZXJ2bGV0LCBTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZywgU3RyaW5nIG5ld1NlcnZsZXROYW1lLCBTdHJpbmcgbmV3U2VydmxldENsYXNzLCBMaXN0IGxpc3RPZk1hcHBpbmdzKSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JCXRoaXMuc2VydmxldCA9IHNlcnZsZXQ7Ci0JCXRoaXMuc2VydmxldE1hcHBpbmcgPSBzZXJ2bGV0TWFwcGluZzsKLQkJdGhpcy5uZXdTZXJ2bGV0TmFtZSA9IG5ld1NlcnZsZXROYW1lOwotCQl0aGlzLm5ld1NlcnZsZXRDbGFzcyA9IG5ld1NlcnZsZXRDbGFzczsKLQkJdGhpcy5saXN0T2ZNYXBwaW5ncyA9IGxpc3RPZk1hcHBpbmdzOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViQXBwIHdlYkFwcCA9IChvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHApIE1vZGVsUHJvdmlkZXJNYW5hZ2VyCi0JCQkJLmdldE1vZGVsUHJvdmlkZXIocHJvamVjdCkuZ2V0TW9kZWxPYmplY3QoKTsKLQotCQlKQVhSU0oyRUVVdGlscy5jcmVhdGVPclVwZGF0ZVNlcnZsZXRSZWYod2ViQXBwLCB0aGlzLm5ld1NlcnZsZXROYW1lLCB0aGlzLm5ld1NlcnZsZXRDbGFzcywgdGhpcy5zZXJ2bGV0KTsKLQotCQlKQVhSU0oyRUVVdGlscy51cGRhdGVVUkxNYXBwaW5ncyh3ZWJBcHAsIGxpc3RPZk1hcHBpbmdzLCBzZXJ2bGV0KTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvcHJvamVjdC9mYWNldC9VcGRhdGVXZWJYTUxGb3JKYXZhRUUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4cnMvdWkvaW50ZXJuYWwvcHJvamVjdC9mYWNldC9VcGRhdGVXZWJYTUxGb3JKYXZhRUUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzMzZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2pheHJzL3VpL2ludGVybmFsL3Byb2plY3QvZmFjZXQvVXBkYXRlV2ViWE1MRm9ySmF2YUVFLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAxMDAzMDMgICAyOTE5NTQga2Nob25nQGNhLmlibS5jb20gLSBLZWl0aCBDaG9uZywgSkFYLVJTOiBJbXBsZW1lbnQgSkFYLVJTIEZhY2V0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpLmludGVybmFsLnByb2plY3QuZmFjZXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLk1vZGVsUHJvdmlkZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLlNlcnZsZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldE1hcHBpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViQXBwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlLmludGVybmFsLnByb2plY3QuZmFjZXQuSkFYUlNKRUVVdGlsczsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVdlYlhNTEZvckphdmFFRSBleHRlbmRzIFVwZGF0ZVdlYlhNTEJhc2UgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCXByaXZhdGUgU2VydmxldCBzZXJ2bGV0OwotCXByaXZhdGUgU2VydmxldE1hcHBpbmcgc2VydmxldE1hcHBpbmc7Ci0JcHJpdmF0ZSBTdHJpbmcgbmV3U2VydmxldE5hbWUsIG5ld1NlcnZsZXRDbGFzczsKLQlwcml2YXRlIExpc3Q8U3RyaW5nPiBsaXN0T2ZNYXBwaW5nczsKLQotCXB1YmxpYyBVcGRhdGVXZWJYTUxGb3JKYXZhRUUoZmluYWwgSVByb2plY3QgcHJvamVjdCwgU2VydmxldCBzZXJ2bGV0LCBTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZywgU3RyaW5nIG5ld1NlcnZsZXROYW1lLCBTdHJpbmcgbmV3U2VydmxldENsYXNzLCBMaXN0PFN0cmluZz4gbGlzdE9mTWFwcGluZ3MpIHsKLQkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLQkJdGhpcy5zZXJ2bGV0ID0gc2VydmxldDsKLQkJdGhpcy5zZXJ2bGV0TWFwcGluZyA9IHNlcnZsZXRNYXBwaW5nOwotCQl0aGlzLm5ld1NlcnZsZXROYW1lID0gbmV3U2VydmxldE5hbWU7Ci0JCXRoaXMubmV3U2VydmxldENsYXNzID0gbmV3U2VydmxldENsYXNzOwotCQl0aGlzLmxpc3RPZk1hcHBpbmdzID0gbGlzdE9mTWFwcGluZ3M7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlXZWJBcHAgd2ViQXBwID0gKFdlYkFwcCkgTW9kZWxQcm92aWRlck1hbmFnZXIuZ2V0TW9kZWxQcm92aWRlcihwcm9qZWN0KS5nZXRNb2RlbE9iamVjdCgpOwotICAJICAgIEpBWFJTSkVFVXRpbHMuY3JlYXRlT3JVcGRhdGVTZXJ2bGV0UmVmKHdlYkFwcCwgdGhpcy5uZXdTZXJ2bGV0TmFtZSwgdGhpcy5uZXdTZXJ2bGV0Q2xhc3MsIHRoaXMuc2VydmxldCk7Ci0JCQotCQlKQVhSU0pFRVV0aWxzLnVwZGF0ZVVSTE1hcHBpbmdzKHdlYkFwcCwgbGlzdE9mTWFwcGluZ3MsIHNlcnZsZXQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTY1ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ODUzZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdWRkaXJlZ2lzdHJ5LmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjI1NjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYjAyOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM2OjU4IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjY5YjRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NDkgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZmE5MDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5OyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5wbHVnaW4uV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLmJpbmRpbmc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZDt4LWludGVybmFsOj10cnVlCi1JbXBvcnQtUGFja2FnZTogY29tLmlibS5pY3UudXRpbDsgdmVyc2lvbj0iMy44IgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkZWMzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvcmVnaXN0cnkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3JlZ2lzdHJ5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0M2NhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvcmVnaXN0cnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3dpemJhbi91ZGRpcHJpdmF0ZWNvbmZpZ193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3dpemJhbi91ZGRpcHJpdmF0ZWNvbmZpZ193aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmQxNTVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy93aXpiYW4vdWRkaXByaXZhdGVjb25maWdfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUwYWZiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA1MTYgICAxNjMyNjYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgVW5pdmVyc2FsIERlc2NyaXB0aW9uIERpc2NvdmVyeSBhbmQgSW50ZWdyYXRpb24gUmVnaXN0cnkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX1VOSVRfVEVTVF9VRERJPVVuaXQgVGVzdCBVRERJCi0KLVhQX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUz1Qcml2YXRlIFVEREkgUmVnaXN0cnkgVHlwZXMKLVBSSVZBVEVfVURESV9SRUdJU1RSWV9ERVNDPUNyZWF0ZSBhbmQgY29uZmlndXJlIGEgdW5pdCB0ZXN0IFVEREkgcmVnaXN0cnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YWM3NTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByaXZhdGVVRERJUmVnaXN0cnlUeXBlIiBuYW1lPSIlWFBfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTIi8+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiPgotICAgICAgPHByaXZhdGVVRERJUmVnaXN0cnlUeXBlCi0gICAgICAgICAgICBuYW1lPSIlUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVfSU1QTCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsIj4KLSAgICAgIDwvcHJpdmF0ZVVERElSZWdpc3RyeVR5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX1VOSVRfVEVTVF9VRERJIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvcmVnaXN0cnkuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmciPgotICAgICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgJVBSSVZBVEVfVURESV9SRUdJU1RSWV9ERVNDCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfVU5JVF9URVNUX1VEREkiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLmJpbmRpbmcuUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvd2l6YmFuL3VkZGlwcml2YXRlY29uZmlnX3dpei5wbmciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLmJpbmRpbmcuUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nIj4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPCEtLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfVU5JVF9URVNUX1VEREkiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9yZWdpc3RyeS5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVdpemFyZCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVdpemFyZCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAlUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19VTklUX1RFU1RfVURESQotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgIDxzZWxlY3Rpb24KLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiPgotICAgICAgICAgPC9zZWxlY3Rpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgLS0+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkMjZiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgUHJpdmF0ZVVERElDb25maWdQYWdlCi0jCi1QQUdFX1RJVExFX1BSSVZBVEVfVURESV9DT05GSUc9VW5pdCBUZXN0IFVEREkgUmVnaXN0cnkgQ29uZmlndXJhdGlvbgotUEFHRV9ERVNDX1BSSVZBVEVfVURESV9DT05GSUc9Q29uZmlndXJlIHRoZSB1bml0IHRlc3QgVURESSByZWdpc3RyeS4KLQotIwotIyBUb29sdGlwIGZvciBQcml2YXRlVURESUNvbmZpZ1BhZ2UKLSMKLVRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfUEFHRT1EZXBsb3kgb3IgcmVtb3ZlIGEgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLVRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfVFlQRT1DaG9vc2UgdGhlIHR5cGUgb2YgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkgeW91IHdhbnQgdG8gZGVwbG95Ci1UT09MVElQX1BVUFJfREVQTE9ZX1BSSVZBVEVfVUREST1EZXBsb3kgYSBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotVE9PTFRJUF9QVVBSX1VQREFURV9QUklWQVRFX1VEREk9VXBkYXRlIHRoZSBleGlzdGluZyBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotVE9PTFRJUF9QVVBSX1JFTU9WRV9QUklWQVRFX1VEREk9UmVtb3ZlIHRoZSBleGlzdGluZyBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotCi0jCi0jIENvbW1vbiB3aXphcmQgc3RyaW5ncy4KLSMKLUxBQkVMX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUz1Qcml2YXRlIFVEREkgUmVnaXN0cnkgdHlwZToKLUJVVFRPTl9ERVBMT1lfVURESV9SRUdJU1RSWT1EZXBsb3kgdGhlIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1CVVRUT05fVVBEQVRFX1VERElfUkVHSVNUUlk9VXBkYXRlIHRoZSBwcmV2aW91c2x5IGRlcGxveWVkIFVEREkgcmVnaXN0cnkKLUJVVFRPTl9SRU1PVkVfVURESV9SRUdJU1RSWT1SZW1vdmUgdGhlIHByZXZpb3VzbHkgZGVwbG95ZWQgVURESSByZWdpc3RyeQotCi0jCi0jIFdpemFyZCBwYWdlIHRhc2sgbGFiZWxzIGFuZCBkZXNjcmlwdGlvbnMKLSMgKHVzZWQgb25seSBmb3IgcHJvZ3Jlc3MgaW5kaWNhdGlvbikuCi0jCi0KLSMKLSMgRGlhbG9nIG1lc3NhZ2VzCi0jCi0KLSMKLSMgUHJvZ3Jlc3MgbWVzc2FnZXMKLSMKLQotIwotIyBXYXJuaW5nIG1lc3NhZ2VzCi0jCi0KLSMKLSMgRXJyb3IgbWVzc2FnZXMKLSMKLU1TR19FUlJPUl9OT19VRERJX1JFR0lTVFJZX0FWQUlMQUJMRT1JV0FCMDM2M0UgTm8gVURESSByZWdpc3RyeSBhdmFpbGFibGUuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5TWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTI5ZTg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgVURESVJlZ2lzdHJ5TWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5IjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFVERElSZWdpc3RyeU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1BSSVZBVEVfVURESV9DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1BSSVZBVEVfVURESV9DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BVUFJfREVQTE9ZX1BSSVZBVEVfVURESTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BVUFJfVVBEQVRFX1BSSVZBVEVfVURESTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVURESTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0RFUExPWV9VRERJX1JFR0lTVFJZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9VUERBVEVfVURESV9SRUdJU1RSWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fUkVNT1ZFX1VERElfUkVHSVNUUlk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX05PX1VERElfUkVHSVNUUllfQVZBSUxBQkxFOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgVURESVJlZ2lzdHJ5TWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvcGx1Z2luL1dlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9wbHVnaW4vV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjg3YTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9wbHVnaW4vV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbjsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIFVEREkgUmVnaXN0cnkgcGx1Z2luLgotKiA8cD4KLSogVGhlIFdlYiBTZXJ2aWNlcyBVRERJIFJlZ2lzdHJ5IHBsdWdpbidzIGlzIHRvIGFkZCB0aGUKLSogb3B0aW9uIHRvIGNyZWF0ZSBhIHVuaXQgdGVzdCBVRERJIHJlZ2lzdHJ5IAotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5IjsKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gaW5zdGFuY2VfOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotICAqIGFzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbi4KLSAgKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvciAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0gICAgICBVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsbmFtZSk7Ci0gICAgICByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KLSAgKiBwbHVnaW4ucHJvcGVydGllcy4KLSAgKiBAcmV0dXJuIFRoZSBTdHJpbmcgbWVzc2FnZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXkgKQotICB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtLmdldFJlc291cmNlU3RyaW5nKGluc3RhbmNlXy5nZXRCdW5kbGUoKSxrZXkpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KLSAgKiBwbHVnaW4ucHJvcGVydGllcy4gU3Vic3RpdHV0aW9uIHNlcXVlbmNlcyBpbiB0aGUgbWVzc2FnZSBzdHJpbmcKLSAgKiBhcmUgcmVwbGFjZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIHN1YnN0aXR1dGlvbiBvYmplY3RzICh3aGljaAotICAqIGFyZSBtb3N0IGZyZXF1ZW50bHkgc3RyaW5ncykuIFNlZSB0aGUgSkRLJ3MKLSAgKiB7QGxpbmsgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXR9Ci0gICogY2xhc3MgZm9yIGZ1cnRoZXIgZGV0YWlscyBvbiBzdWJzdGl0dXRpb24uCi0gICogQHJldHVybiBUaGUgU3RyaW5nIG1lc3NhZ2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzICkKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRNZXNzYWdlKGtleSksYXJncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNGY5NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotLyoKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLk1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU2ltcGxlU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5wbHVnaW4uV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbjsKLSovCi0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIGJ5dGUgb3BlcmF0aW9uVHlwZTsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdpc3RyeVR5cGU7Ci0gIAotICAvKgotICBwdWJsaWMgU3RhdHVzIGV4ZWN1dGUoRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgTWVzc2FnZVV0aWxzIG1zZ1V0aWxzID0gbmV3IE1lc3NhZ2VVdGlscyhXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wbHVnaW4iLCB0aGlzKTsKLSAgCWlmIChyZWdpc3RyeVR5cGUgIT0gbnVsbCkKLSAgCXsKLSAgCSAgc3dpdGNoIChvcGVyYXRpb25UeXBlKQotICAJICB7Ci0gIAkgIAljYXNlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX0RFUExPWToKLSAgCSAgICAgIHJldHVybiByZWdpc3RyeVR5cGUuZGVwbG95KGVudik7Ci0gIAkgIAljYXNlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX1VQREFURToKLSAgCSAgCSAgcmV0dXJuIHJlZ2lzdHJ5VHlwZS51cGRhdGUoZW52KTsKLSAgCSAgCWNhc2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfUkVNT1ZFOgotICAJICAJICByZXR1cm4gcmVnaXN0cnlUeXBlLnJlbW92ZShlbnYpOwotICAJICAJZGVmYXVsdDoKLSAgCSAgfQotICAJfQotICAJcmV0dXJuIG5ldyBTaW1wbGVTdGF0dXMoIiIpOwotICB9Ci0gICovCi0KLSAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGdldFJlZ2lzdHJ5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKTsKLSAgfQotICAKLSAgcHVibGljIGJ5dGUgZ2V0T3BlcmF0aW9uVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uVHlwZTsKLSAgfQotICAKLSAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkKLSAgewotICAJcmV0dXJuIHJlZ2lzdHJ5VHlwZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJ5VHlwZShQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdUeXBlKQotICB7Ci0gIAlzZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShyZWdUeXBlKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3BlcmF0aW9uVHlwZShieXRlIHR5cGUpCi0gIHsKLSAgICBvcGVyYXRpb25UeXBlID0gdHlwZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgcmVnVHlwZSkKLSAgewotICAJcmVnaXN0cnlUeXBlID0gcmVnVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmYWZhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5BYnN0cmFjdENvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdpc3RyeVR5cGU7Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5OwotICAKLSAgcHVibGljIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50KCkKLSAgewotICAJc3VwZXIobnVsbCwgIiIpOwotICB9Ci0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsKLSAgCWlmIChyZWdpc3RyeVR5cGUgIT0gbnVsbCkKLSAgCXsKLSAgICAgIHJlZ2lzdHJ5VHlwZS5yZWdpc3RlckNhbkZpbmlzaChjYW5GaW5pc2hSZWdpc3RyeSk7Ci0gICAgICByZWdpc3RyeVR5cGUucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gICAgICByZWdpc3RyeVR5cGUucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh3aWRnZXRSZWdpc3RyeSk7Ci0gICAgICByZXR1cm4gcmVnaXN0cnlUeXBlLmNyZWF0ZSgpLmNyZWF0ZSgpOwotICAJfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50KQotICB7Ci0gIAlyZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gIAlkYXRhTWFwcGluZ1JlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY2FuRmluaXNoUmVnaXN0cnkgPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLndpZGdldFJlZ2lzdHJ5ID0gd2lkZ2V0UmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICAqIEFsbCB3aXphcmQgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgCVByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gbmV3IFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50KCk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyQ2FuRmluaXNoKGNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnkpOwotICAJZnJhZ21lbnQuc2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUocmVnaXN0cnlUeXBlKTsKLSAgCXJldHVybiBmcmFnbWVudDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgcmVnaXN0cnlUeXBlKQotICB7Ci0gIAl0aGlzLnJlZ2lzdHJ5VHlwZSA9IHJlZ2lzdHJ5VHlwZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYTNkNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbi5XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotLyoqCi0qIFRoaXMgVURESSBjb25maWd1cmF0aW9uIHBhZ2UgcHJvbXB0cyB0aGUgdXNlcgotKiBmb3IgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGNvbmZpZ3VyZSB0aGUKLSogdW5pdCB0ZXN0IFVEREkgcmVnaXN0cnkuCi0qLwotcHVibGljIGNsYXNzIFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gZGVwbG95UmFkaW9fOwotICBwcml2YXRlIExhYmVsIHR5cGVzTGFiZWxfOwotICBwcml2YXRlIENvbWJvIHR5cGVzQ29tYm9fOwotICBwcml2YXRlIEJ1dHRvbiB1cGRhdGVSYWRpb187Ci0gIHByaXZhdGUgQnV0dG9uIHJlbW92ZVJhZGlvXzsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzXzsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBpbnN0YWxsZWRUeXBlXzsKLQotICAvLyBJbmZvcG9wCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFVQUl9QUklWQVRFX1VERElfUEFHRSA9IFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnB1cHIwMDAxIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfREVQTE9ZX1BSSVZBVEVfVURESSA9IFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnB1cHIwMDAzIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX1VQREFURV9QUklWQVRFX1VEREkgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwNSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDQiOwotCi0gIHB1YmxpYyBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gIAl0aGlzLnN0YXR1c0xpc3RlbmVyID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfUEFHRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsIElORk9QT1BfUFVQUl9QUklWQVRFX1VERElfUEFHRSk7Ci0KLSAgICBHcmlkTGF5b3V0IGdsOwotICAgIEdyaWREYXRhIGdkOwotICAgIAotICAgIExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IExpc3RlbmVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgIAloYW5kbGVXaWRnZXRFdmVudChldmVudCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIElXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLSAgICAKLSAgICBkZXBsb3lSYWRpb18gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICBkZXBsb3lSYWRpb18uc2V0VGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5CVVRUT05fREVQTE9ZX1VERElfUkVHSVNUUlkpOwotICAgIGRlcGxveVJhZGlvXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgZGVwbG95UmFkaW9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLSAgICBkZXBsb3lSYWRpb18uc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX0RFUExPWV9QUklWQVRFX1VEREkpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChkZXBsb3lSYWRpb18sIElORk9QT1BfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJKTsKLQotICAgIENvbXBvc2l0ZSB0eXBlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMjsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSA1OwotICAgIGdsLnZlcnRpY2FsU3BhY2luZyA9IDE1OwotICAgIGdsLm1hcmdpbldpZHRoID0gMjA7Ci0gICAgdHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgdHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIHR5cGVzTGFiZWxfID0gbmV3IExhYmVsKHR5cGVDb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICB0eXBlc0xhYmVsXy5zZXRUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLkxBQkVMX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUyk7Ci0gICAgdHlwZXNMYWJlbF8uc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodHlwZXNMYWJlbF8sIElORk9QT1BfUFVQUl9QUklWQVRFX1VERElfVFlQRSk7Ci0KLSAgICB0eXBlc0NvbWJvXyA9IG5ldyBDb21ibyh0eXBlQ29tcG9zaXRlLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLSAgICB0eXBlc0NvbWJvXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICB0eXBlc0NvbWJvXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7Ci0gICAgdHlwZXNDb21ib18uc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodHlwZXNDb21ib18sIElORk9QT1BfUFVQUl9QUklWQVRFX1VERElfVFlQRSk7Ci0KLSAgICB1cGRhdGVSYWRpb18gPSBuZXcgQnV0dG9uKHBhcmVudCxTV1QuUkFESU8pOwotICAgIHVwZGF0ZVJhZGlvXy5zZXRUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLkJVVFRPTl9VUERBVEVfVURESV9SRUdJU1RSWSk7Ci0gICAgdXBkYXRlUmFkaW9fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgdXBkYXRlUmFkaW9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sbGlzdGVuZXIpOwotICAgIHVwZGF0ZVJhZGlvXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfVVBEQVRFX1BSSVZBVEVfVURESSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHVwZGF0ZVJhZGlvXywgSU5GT1BPUF9QVVBSX1VQREFURV9QUklWQVRFX1VEREkpOwotCi0gICAgcmVtb3ZlUmFkaW9fID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5SQURJTyk7Ci0gICAgcmVtb3ZlUmFkaW9fLnNldFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuQlVUVE9OX1JFTU9WRV9VRERJX1JFR0lTVFJZKTsKLSAgICByZW1vdmVSYWRpb18uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICByZW1vdmVSYWRpb18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOwotICAgIHJlbW92ZVJhZGlvXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVURESSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHJlbW92ZVJhZGlvXywgSU5GT1BPUF9QVVBSX1JFTU9WRV9QUklWQVRFX1VEREkpOyAgICAgICAgICAgICAgICAKLQotICAgIGxvYWRUeXBlcygpOwotICAgIGluaXQoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBsb2FkVHlwZXMoKQotICB7Ci0gICAgdHlwZXNfID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFR5cGVzKCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgaW5pdCgpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzXy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodHlwZXNfW2ldICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzQ29tYm9fLmFkZCh0eXBlc19baV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgaWYgKHR5cGVzX1tpXS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkKLSAgICAgICAgICBpbnN0YWxsZWRUeXBlXyA9IHR5cGVzX1tpXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHR5cGVzQ29tYm9fLmdldEl0ZW1Db3VudCgpID4gMCkKLSAgICAgIHR5cGVzQ29tYm9fLnNldFRleHQodHlwZXNDb21ib18uZ2V0SXRlbSgwKSk7Ci0gICAgaWYgKGluc3RhbGxlZFR5cGVfICE9IG51bGwpCi0gICAgewotICAgICAgdXBkYXRlUmFkaW9fLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICByZW1vdmVSYWRpb18uc2V0RW5hYmxlZCh0cnVlKTsgICAgICAgICAgICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB1cGRhdGVSYWRpb18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICByZW1vdmVSYWRpb18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdpZGdldEV2ZW50KEV2ZW50IGV2ZW50KQotICB7Ci0gICAgaWYgKGV2ZW50LndpZGdldCA9PSByZW1vdmVSYWRpb18gfHwgZXZlbnQud2lkZ2V0ID09IHVwZGF0ZVJhZGlvXykKLSAgICB7Ci0gICAgICBib29sZWFuIGlzVXBkYXRlT3JSZW1vdmVTZWxlY3RlZCA9ICgoQnV0dG9uKWV2ZW50LndpZGdldCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICB0eXBlc0xhYmVsXy5zZXRFbmFibGVkKCFpc1VwZGF0ZU9yUmVtb3ZlU2VsZWN0ZWQpOwotICAgICAgdHlwZXNDb21ib18uc2V0RW5hYmxlZCghaXNVcGRhdGVPclJlbW92ZVNlbGVjdGVkKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IGRlcGxveVJhZGlvXykKLSAgICB7Ci0gICAgICBib29sZWFuIGlzRGVwbG95U2VsZWN0ZWQgPSAoKEJ1dHRvbilldmVudC53aWRnZXQpLmdldFNlbGVjdGlvbigpOwotICAgICAgdHlwZXNMYWJlbF8uc2V0RW5hYmxlZChpc0RlcGxveVNlbGVjdGVkKTsKLSAgICAgIHR5cGVzQ29tYm9fLnNldEVuYWJsZWQoaXNEZXBsb3lTZWxlY3RlZCk7Ci0gICAgfQotICAgIHN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLSAgfQotICAKLSAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkKLSAgewotICAJaWYgKGRlcGxveVJhZGlvXy5nZXRTZWxlY3Rpb24oKSkKLSAgCXsKLSAgCSAgU3RyaW5nIHNlbGVjdGVkUmVnaXN0cnlOYW1lID0gdHlwZXNDb21ib18uZ2V0VGV4dCgpOwotICAJICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzXy5sZW5ndGg7IGkrKykKLSAgICAgICAgaWYgKHNlbGVjdGVkUmVnaXN0cnlOYW1lLmVxdWFscyh0eXBlc19baV0uZ2V0TmFtZSgpKSkKLSAgCSAgCSAgcmV0dXJuIHR5cGVzX1tpXTsKLSAgICAgIHJldHVybiBudWxsOwotICAJfQotICAJZWxzZQotICAJICByZXR1cm4gaW5zdGFsbGVkVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBieXRlIGdldE9wZXJhdGlvblR5cGUoKQotICB7Ci0gIAlpZiAoZGVwbG95UmFkaW9fLmdldFNlbGVjdGlvbigpKQotICAJICByZXR1cm4gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfREVQTE9ZOwotICAJZWxzZSBpZiAodXBkYXRlUmFkaW9fLmdldFNlbGVjdGlvbigpKQotICAgICAgcmV0dXJuIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX1VQREFURTsKLSAgCWVsc2UgaWYgKHJlbW92ZVJhZGlvXy5nZXRTZWxlY3Rpb24oKSkKLSAgICAgIHJldHVybiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9SRU1PVkU7Ci0gIAllbHNlCi0gIAkgIHJldHVybiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9ERVBMT1k7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgcHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgPSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSgpOwotICAgIGlmIChwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSAhPSBudWxsKQotICAgICAgcmV0dXJuIHByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmdldE9wZXJhdGlvblN0YXR1cyhnZXRPcGVyYXRpb25UeXBlKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggVURESVJlZ2lzdHJ5TWVzc2FnZXMuTVNHX0VSUk9SX05PX1VERElfUkVHSVNUUllfQVZBSUxBQkxFICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZWFhOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGltcGxlbWVudHMgQ29uZGl0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBjb25kaXRpb247Ci0KLSAgcHVibGljIFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZCgpCi0gIHsKLSAgICBjb25kaXRpb24gPSB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIGNvbmRpdGlvbiA9ICFjb25kaXRpb247Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHVuZG8oIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgY29uZGl0aW9uID0gIWNvbmRpdGlvbjsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICB7Ci0gICAgcmV0dXJuIGNvbmRpdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvYmluZGluZy9Qcml2YXRlVURESVdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL2JpbmRpbmcvUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDRhNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvYmluZGluZy9Qcml2YXRlVURESVdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLlByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSAgIGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5ICAgICAgd2lkZ2V0UmVnaXN0cnk7Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50IHByaXZhdGVVRERJU2VsRnJhZ21lbnQ7Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kIGNvbmRpdGlvbkNvbW1hbmQ7Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nKCkKLSAgewotICAgIHByaXZhdGVVRERJU2VsRnJhZ21lbnQgPSBuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQoKTsKLSAgICBjb25kaXRpb25Db21tYW5kID0gbmV3IFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZCgpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgIHsKLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgIHsKLSAgICAgICAgU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KGNvbmRpdGlvbkNvbW1hbmQsICIiKSk7Ci0gICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQiKSk7Ci0gICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChjb25kaXRpb25Db21tYW5kLCAiIikpOwotICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZCgpLCAiIikpOwotICAgICAgICByb290LmFkZChwcml2YXRlVURESVNlbEZyYWdtZW50KTsKLSAgICAgICAgcmV0dXJuIHJvb3Q7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICAgIHByaXZhdGVVRERJU2VsRnJhZ21lbnQucmVnaXN0ZXJDYW5GaW5pc2godGhpcy5jYW5GaW5pc2hSZWdpc3RyeSk7Ci0gICAgCi0gICAgY2FuRmluaXNoUmVnaXN0cnkuYWRkQ29uZGl0aW9uKGNvbmRpdGlvbkNvbW1hbmQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeSA9IGRhdGFSZWdpc3RyeTsKLSAgICBwcml2YXRlVURESVNlbEZyYWdtZW50LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAgIAotICAgIC8vIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5jbGFzcywgIlByaXZhdGVVRERJUmVnaXN0cnlUeXBlIiwgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kLmNsYXNzKTsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJPcGVyYXRpb25UeXBlIiwgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5jbGFzcywgIlByaXZhdGVVRERJUmVnaXN0cnlUeXBlIiwgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy53aWRnZXRSZWdpc3RyeSA9IHdpZGdldFJlZ2lzdHJ5OwotICAgIHByaXZhdGVVRERJU2VsRnJhZ21lbnQucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh0aGlzLndpZGdldFJlZ2lzdHJ5KTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQiLCAKLSAgICAgIFVERElSZWdpc3RyeU1lc3NhZ2VzLlBBR0VfVElUTEVfUFJJVkFURV9VRERJX0NPTkZJRywKLSAgICAgIFVERElSZWdpc3RyeU1lc3NhZ2VzLlBBR0VfREVTQ19QUklWQVRFX1VERElfQ09ORklHLAotCSAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICB7Ci0JICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIG5ldyBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCgpOwotCSAgICB9Ci0JICB9Ci0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjYzZDY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZXh0ZW5kcyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICAvLyBvcGVyYXRpb24gdHlwZXMKLSAgcHVibGljIHN0YXRpYyBieXRlIE9QX0RFUExPWSA9IDB4MDsKLSAgcHVibGljIHN0YXRpYyBieXRlIE9QX1VQREFURSA9IDB4MTsKLSAgcHVibGljIHN0YXRpYyBieXRlIE9QX1JFTU9WRSA9IDB4MjsKLQotICAvLyBnZW5lcmFsIGluZm9ybWF0aW9uCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKTsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpOwotICBwdWJsaWMgSVN0YXR1cyBnZXRPcGVyYXRpb25TdGF0dXMoYnl0ZSBvcGVyYXRpb24pOwotCi0gIC8vIHJlZ2lzdHJ5IFVSTHMKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5QVBJKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGlzaEFQSSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMmRiZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLmJpbmRpbmcuUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotCi0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwgaW1wbGVtZW50cyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkudWRkaS5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZQotewotICAgIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkgewotICAgICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFR5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlc1tpXS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFByaXZhdGVVRERJUmVnaXN0cnlJbnF1aXJ5QVBJKCkgewotICAgICAgICBWZWN0b3IgaW5xdWlyeUFQSVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSB0eXBlcyA9IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUeXBlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZXNbaV0uaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHR5cGVzW2ldLmdldElucXVpcnlBUEkoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5xdWlyeUFQSSAhPSBudWxsICYmIGlucXVpcnlBUEkuc3RhcnRzV2l0aCgiaHR0cCIpKQotICAgICAgICAgICAgICAgICAgICBpbnF1aXJ5QVBJVmVjdG9yLmFkZChpbnF1aXJ5QVBJKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1tdIGlucXVpcnlBUElBcnJheSA9IG5ldyBTdHJpbmdbaW5xdWlyeUFQSVZlY3Rvci5zaXplKCldOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gaW5xdWlyeUFQSVZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGlucXVpcnlBUElBcnJheVtqXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgaisrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnF1aXJ5QVBJQXJyYXk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFByaXZhdGVVRERJUmVnaXN0cnlQdWJsaXNoQVBJKCkgewotICAgICAgICBWZWN0b3IgcHVibGlzaEFQSVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSB0eXBlcyA9IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUeXBlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZXNbaV0uaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcHVibGlzaEFQSSA9IHR5cGVzW2ldLmdldFB1Ymxpc2hBUEkoKTsKLSAgICAgICAgICAgICAgICBpZiAocHVibGlzaEFQSSAhPSBudWxsICYmIHB1Ymxpc2hBUEkuc3RhcnRzV2l0aCgiaHR0cCIpKQotICAgICAgICAgICAgICAgICAgICBwdWJsaXNoQVBJVmVjdG9yLmFkZChwdWJsaXNoQVBJKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1tdIHB1Ymxpc2hBUElBcnJheSA9IG5ldyBTdHJpbmdbcHVibGlzaEFQSVZlY3Rvci5zaXplKCldOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gcHVibGlzaEFQSVZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgIHB1Ymxpc2hBUElBcnJheVtqXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgaisrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwdWJsaXNoQVBJQXJyYXk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBDb21tYW5kV2lkZ2V0QmluZGluZyBnZXRCaW5kaW5nKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFByaXZhdGVVRERJV2lkZ2V0QmluZGluZygpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NTUxMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IGluc3RhbmNlXzsKLSAgICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ0VsZW1lbnRzXzsKLQotICAgIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSgpIHsKLSAgICB9Ci0gIAotICAgIC8qKgotICAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAgICogQHJldHVybiBBIHNpbmdsZXRvbiBXZWJTZXJ2aWNlQ2xpZW50VHlwZVJlZ2lzdHJ5IG9iamVjdC4KLSAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBnZXRJbnN0YW5jZSgpIHsKLSAgICAgICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpbnN0YW5jZV8gPSBuZXcgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSgpOwotICAgICAgICAgICAgaW5zdGFuY2VfLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgICB9Ci0gIAotICAgIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBnZXRDb25maWdFbGVtZW50cygpIHsKLSAgICAgICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgICAgIGNvbmZpZ0VsZW1lbnRzXyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSIpOwotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWdFbGVtZW50c18ubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbmZpZ0VsZW1lbnRzX1tpXSk7Ci0gICAgICAgICAgaW50IGluZGV4ID0gLTE7Ci0gICAgICAgICAgZm9yIChpbnQgaiA9IHYuc2l6ZSgpLTE7IGogPj0gMDsgai0tKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh3ZWlnaHQgPiBnZXRXZWlnaHQoKElDb25maWd1cmF0aW9uRWxlbWVudCl2LmdldChqKSkpCi0gICAgICAgICAgICAgIGluZGV4ID0gajsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgICAgIHYuYWRkKGluZGV4LCBjb25maWdFbGVtZW50c19baV0pOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHYuYWRkKGNvbmZpZ0VsZW1lbnRzX1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgdi5jb3B5SW50byhjb25maWdFbGVtZW50c18pOwotICAgICAgICByZXR1cm4gY29uZmlnRWxlbWVudHNfOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldFdlaWdodChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoIndlaWdodCIpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudEJ5SUQoU3RyaW5nIGlkKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDxjb25maWdFbGVtZW50c18ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChjb25maWdFbGVtZW50c19baV0uZ2V0QXR0cmlidXRlKCJpZCIpLmVxdWFscyhpZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ0VsZW1lbnRzX1tpXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSBnZXRUeXBlcygpIHsKLSAgICAgICAgVmVjdG9yIHR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0VsZW1lbnRzXy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBPYmplY3QgdHlwZU9iaiA9IGNvbmZpZ0VsZW1lbnRzX1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlT2JqIGluc3RhbmNlb2YgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHR5cGVzLmFkZCh0eXBlT2JqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgfQotCi0gICAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXNBcnJheSA9IG5ldyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVt0eXBlcy5zaXplKCldOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHR5cGVzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICB0eXBlc0FycmF5W2pdID0gKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKXR5cGVzLmVsZW1lbnRBdChqKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHlwZXNBcnJheTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0VHlwZUJ5SUQoU3RyaW5nIGlkKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBPYmplY3QgdHlwZU9iaiA9IGdldENvbmZpZ0VsZW1lbnRCeUlEKGlkKS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgICAgICAgICAgaWYgKHR5cGVPYmogaW5zdGFuY2VvZiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKXR5cGVPYmo7IAotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFN1cHBvcnRlZFNlcnZlckZhY3RvcnlJREJ5SUQoU3RyaW5nIGlkKSB7Ci0gICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50ID0gZ2V0Q29uZmlnRWxlbWVudEJ5SUQoaWQpOwotICAgICAgICBpZiAoY29uZmlnRWxlbWVudCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgICAgIFZlY3RvciBpZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgic2VydmVyRmFjdG9yeUlEIiksICIsIik7Ci0gICAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKLSAgICAgICAgICAgIGlkVmVjdG9yLmFkZChzdC5uZXh0VG9rZW4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nW10gaWRzID0gbmV3IFN0cmluZ1tpZFZlY3Rvci5zaXplKCldOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZHNbaV0gPSAoU3RyaW5nKWlkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaWRzOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTY1ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZWZmZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13cy11aS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDE2NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjJhNWJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM3OjA3IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY2ZmVhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NDUgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTYwM2ExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDMucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VVSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS51ZGRpO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4yMDQsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWRlYzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvaWNvbnMvamFyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9pY29ucy9qYXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyZjRmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9pY29ucy9qYXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZDAyYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M9V2ViIFNlcnZpY2VzCi0KLSMKLSMJV2ViIFNlcnZpY2VzIFByZWZlcmFuY2UgUGFnZXMKLSMKLSMgQ2F0ZWdvcmllcwotUFJFRkVSRU5DRV9DQVRFR09SWV9SRVNPVVJDRV9NQU5BR0VNRU5UPVJlc291cmNlIE1hbmFnZW1lbnQKLQotIwotIyAgV1MtSSBQcmVmZXJlbmNlIHBhZ2VzCi0jCi0jIFdTLUkgQ29tcGxpYW5jZSBQYWdlCi0jCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1dTST1XUy1JIENvbXBsaWFuY2UKLQotIwotIyBQb3B1cCBhY3Rpb24gQ2F0ZWdvcnkKLSMKLUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUz1XZWIgU2VydmljZXMKLQotIwotIyBNZXNzYWdlcyBmb3IgcG9wdXAgYWN0aW9uIChUZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyKQotIwotUE9QVVBfVEVTVF9XU0RMPVRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIKLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMGM5ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciPgotICAgICAgPC9jYXRlZ29yeT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLSAgICAgIAotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1JFU09VUkNFX01BTkFHRU1FTlQiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlJlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlJlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByb3BlcnR5UGFnZXMiPgotCi0gICAgICAKLQotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiLnBvcHVwTWVudSI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IiVMQUJFTF9QT1BVUF9DQVRFR09SWV9XRUJfU0VSVklDRVMiCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYi5wb3B1cE1lbnUiPgotICAgICAgICAgICAgPHNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgbmFtZT0icG9wdXBBY3Rpb25zIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuU2Vzc2lvbkJlYW4iCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYjMucG9wdXBNZW51Ij4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUyIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiMy5wb3B1cE1lbnUiPgotICAgICAgICAgICAgPHNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgbmFtZT0icG9wdXBBY3Rpb25zIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFjdGlvbi5XU0RMRmlsZU1lbnUiCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBvcHVwLlBvcHVwVGVzdFNlcnZpY2UiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wb3B1cC5Qb3B1cFRlc3RTZXJ2aWNlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTExZjI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDIyNyAgIDEyNDM5MiByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjAzMjkgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjAzMjkgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjAzMzEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwODAzMjQgICAyMjA5ODMgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSMgMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIGltcHJvdmUgQW50VGFzayBlcnJvcnMgcmVwb3J0Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UKLVBMVUdJTl9WRU5ET1I9RWNsaXBzZS5vcmcKLVBMVUdJTl9ERVNDPVwKLVRoZSBXZWIgc2VydmljZXMgR1VJIHBsdWdpbiBkZWxpdmVycyB0aGUgZ3JhcGhpY2FsIFwKLXVzZXIgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZXMgZnVuY3Rpb24gb2YgdGhlIFwKLVdlYiBzZXJ2aWNlcyBwbHVnaW4uCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLQotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1JFU09VUkNFX01BTkFHRU1FTlQ9UmVzb3VyY2UgTWFuYWdlbWVudAotUFJFRkVSRU5DRV9DQVRFR09SWV9DT0RFX0dFTkVSQVRJT049Q29kZSBHZW5lcmF0aW9uCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTPVNjZW5hcmlvIERlZmF1bHRzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1BST0pFQ1RfVE9QT0xPR1k9UHJvamVjdCBUb3BvbG9neQotUFJFRkVSRU5DRV9DQVRFR09SWV9EUklWRVJfSkFSUz1KREJDIGRyaXZlcnMKLQotIwotI1NjZW5hcmlvIERlZmF1bHRzCi1CVVRUT05fTEFVTkNIX1NBTVBMRT0mTGF1bmNoIHRoZSBzYW1wbGUgd2hlbiBnZW5lcmF0ZWQKLUxBQkVMX01PVkVfVVA9JlVwCi1MQUJFTF9NT1ZFX0RPV049JkRvd24KLUxBQkVMX01PVkVfVVBfMj1VJnAKLUxBQkVMX01PVkVfRE9XTl8yPURvdyZuCi0KLSMKLSMgUHJlZmVyZW5jZXMgVG9vbHRpcHMKLSMKLQotI1NjZW5hcmlvIERlZmF1bHRzCi1UT09MVElQX1BQU0RfUEFHRT1TZXQgdGhlIGRlZmF1bHRzIGZvciB0aGUgV2ViIHNlcnZpY2Ugc2NlbmFyaW9zLgotVE9PTFRJUF9QUFNEX0NIRUNLQk9YX0xBVU5DSF9TQU1QTEU9TGF1bmNoIHRoZSBzYW1wbGUgYXBwbGljYXRpb24gYWZ0ZXIgZ2VuZXJhdGlvbi4KLVRPT0xUSVBfU0VSVklDRV9UWVBFX1RBQkxFX1ZJRVdFUj1QcmVmZXJyZWQgb3JkZXIgb2YgdGhlIGxpc3Qgb2Ygc2VydmljZSBwcm9qZWN0IHR5cGVzCi1UT09MVElQX0NMSUVOVF9UWVBFX1RBQkxFX1ZJRVdFUj1QcmVmZXJyZWQgb3JkZXIgb2YgdGhlIGxpc3Qgb2YgY2xpZW50IHByb2plY3QgdHlwZXMKLVRPT0xUSVBfTU9WRV9VUD1Nb3ZlIHRoZSBzZWxlY3RlZCBwcm9qZWN0IHR5cGUgdXAgdGhlIGxpc3QKLVRPT0xUSVBfTU9WRV9ET1dOPU1vdmUgdGhlIHNlbGVjdGVkIHByb2plY3QgdHlwZSBkb3duIHRoZSBsaXN0Ci0KLSMKLSMgUmVzb3VyY2UgTWFuYWdtZW50Ci1UT09MVElQX1BQUk1fUEFHRT1TZXQgcHJlZmVyZW5jZXMgdGhhdCBjb250cm9sIHJlc291cmNlcyB1c2VkL2dlbmVyYXRlZCBieSB0aGUgV2ViIHNlcnZpY2UuCi1UT09MVElQX1BQUk1fQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTPU92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHdhcm5pbmcuCi1UT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlM9Q3JlYXRlIGZvbGRlcnMgd2hlbiBuZWNlc3NhcnkuCi1UT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ0hFQ0tfT1VUPUNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHdhcm5pbmcuCi1UT09MVElQX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0U9RW5hYmxlIG1lcmdpbmcgb2YgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUuCi1CVVRUT05fQ1JFQVRFX0ZPTERFUlM9JkNyZWF0ZSBmb2xkZXJzIHdoZW4gbmVjZXNzYXJ5Ci1CVVRUT05fT1ZFUldSSVRFX0ZJTEVTPSZPdmVyd3JpdGUgZmlsZXMgd2l0aG91dCB3YXJuaW5nCi1CVVRUT05fQ0hFQ0tPVVRfRklMRVM9QyZoZWNrIG91dCBmaWxlcyB3aXRob3V0IHdhcm5pbmcKLUJVVFRPTl9TS0VMRVRPTl9NRVJHRT0mTWVyZ2UgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUKLQotIwotIyBHZW5lcmFsIG1lc3NhZ2VzLgotIwotSVNUQVRVU19XSVRIT1VUX0VYQ0VQVElPTj17MH0KLUlTVEFUVVNfV0lUSF9FWENFUFRJT049ezB9XG5FeGNlcHRpb246IHsxfQotTVNHX0lORk9fU0FWRURfU1RBVFVTPUlXQUIwMjk3SSBQcmVzcyB0aGUgRGV0YWlscyBidXR0b24gdG8gc2VlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMuCi1NU0dfU0VFX0VSUk9SX0xPRz1TZWUgdGhlIFBsYXRmb3JtJ3MgZXJyb3IgbG9nIGZvciBkZXRhaWwKLQotIwotIyBUeXBlU2VsZWN0aW9uRGlhbG9nCi0jCi1ESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFPUJyb3dzZSBDbGFzc2VzCi1MQUJFTF9DTEFTU19CUk9XU0U9Q2xhc3MgbmFtZTogKD8gPSBhbnkgY2hhcmFjdGVyLCAqID0gYW55IHN0cmluZykKLURJQUxPR19USVRMRV9JTlRFUkZBQ0VfQlJPV1NFPUJyb3dzZSBJbnRlcmZhY2VzCi0KLSMKLSMgQ29tbW9uIHdpemFyZCBzdHJpbmdzLgotIwotTEFCRUxfU0FNUExFX1RZUEVTPUphdmEgcHJveHkgc2FtcGxlOgotCi0jCi0jIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nCi0jCi1ESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFPUJyb3dzZSBGaWxlcwotTEFCRUxfUkVTT1VSQ0VfRklMVEVSPUZpbHRlcjoKLQotIwotIyBUb29sdGlwcyBmb3IgZGlhbG9nLlJlc291cmNlU2VsZWN0aW9uRGlhbG9nCi0jIERSRVM9RGlhbG9nL1JFU291cmNlcwotIwotVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEU9VHlwZSBvZiByZXNvdXJjZXMgdG8gYnJvd3NlLgotVE9PTFRJUF9EUkVTX1RSRUVfUkVTT1VSQ0U9UmVzb3VyY2VzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLgotCi0jCi0jIE1lc3NhZ2VzIGZvciBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UgcGFnZQotIwotVE9PTFRJUF9QVFBQX1BBR0U9UHJlZmVyZW5jZSB0aGF0IGNvbnRyb2wgdGhlIHByb2plY3QgdG9wb2xvZ3kgb2YgeW91ciBXZWIgc2VydmljZSBhbmQgY2xpZW50IHNjZW5hcmlvcy4KLVRPT0xUSVBfRU5BQkxFX1RXT19FQVJTPUVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQgaW4gZGlmZmVyZW50IEVBUiBwcm9qZWN0cy4KLQotTEFCRUxfRU5BQkxFX1RXT19FQVJTPSZHZW5lcmF0ZSBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50IGluIGRpZmZlcmVudCBFQVIgcHJvamVjdHMKLUxBQkVMX0NMSUVOVF9UWVBFX05BTUU9Q2xpZW50IHByb2plY3QgdHlwZXMKLUxBQkVMX1NFUlZJQ0VfVFlQRV9OQU1FPVNlcnZpY2UgcHJvamVjdCB0eXBlcwotIwotIyBSZXNvdXJjZSBCcm93c2VyCi0jCi1ESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFUj1SZXNvdXJjZSBicm93c2VyCi1UT09MVElQX1JFU09VUkNFX1RSRUU9Q2hvb3NlIGEgcmVzb3VyY2UuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9XU1VJUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjMTU3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMjkgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzI5ICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MTUgICAxNDEzOTggY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDgwMzI0ICAgMjIwOTgzIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgaW1wcm92ZSBBbnRUYXNrIGVycm9ycyByZXBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NVSVBsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXU1VJUGx1Z2luTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBMVUdJTl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBMVUdJTl9WRU5ET1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX0NPREVfR0VORVJBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX0RSSVZFUl9KQVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9MQVVOQ0hfU0FNUExFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01PVkVfVVA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTU9WRV9ET1dOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01PVkVfVVBfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NT1ZFX0RPV05fMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQU0RfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0NMSUVOVF9UWVBFX1RBQkxFX1ZJRVdFUjsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1NFUlZJQ0VfVFlQRV9UQUJMRV9WSUVXRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9NT1ZFX1VQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfTU9WRV9ET1dOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBSTV9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX1NLRUxFVE9OX01FUkdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9DUkVBVEVfRk9MREVSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fT1ZFUldSSVRFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9DSEVDS09VVF9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fU0tFTEVUT05fTUVSR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSVNUQVRVU19XSVRIT1VUX0VYQ0VQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU1RBVFVTX1dJVEhfRVhDRVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX1NBVkVEX1NUQVRVUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VFX0VSUk9SX0xPRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMQVNTX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfSU5URVJGQUNFX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TQU1QTEVfVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9SRVNPVVJDRV9GSUxURVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9EUkVTX1RSRUVfUkVTT1VSQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVFBQX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9FTkFCTEVfVFdPX0VBUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRU5BQkxFX1RXT19FQVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9UWVBFX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9SRVNPVVJDRV9UUkVFOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZJQ0VfVFlQRV9OQU1FOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV1NVSVBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9MYXVuY2hJbXBvcnRXaXphcmRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL0xhdW5jaEltcG9ydFdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjdjZDdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL0xhdW5jaEltcG9ydFdpemFyZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQ7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGxhdW5jaGVzIHRoZSBpbXBvcnQgd2l6YXJkLgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbkRlbGVnYXRlCi17Ci0gICAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb25fOwotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSAKLSAgICB7Ci0gICAgICBEeW5hbWljV2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljV2l6YXJkKCk7Ci0gICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEoICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbXBvcnQiICk7Ci0gICAgICAgIHdpemFyZC5pbml0KCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLCBzZWxlY3Rpb25fICk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICAKLSAgCSAgV2l6YXJkRGlhbG9nIGRpYWxvZz0gbmV3IFdpemFyZERpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHdpemFyZCk7Ci0JICBkaWFsb2cuc2V0UGFnZVNpemUoIDUwMCwgNDAwICk7Ci0JICBkaWFsb2cuY3JlYXRlKCk7Ci0JICBkaWFsb2cub3BlbigpOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSAKLSAgICB7Ci0gICAgICBpZiggc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gKQotICAgICAgewotICAgICAgICBzZWxlY3Rpb25fID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbjsKLSAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XZWJTZXJ2aWNlRGVwbG95LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XZWJTZXJ2aWNlRGVwbG95LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDQ4YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5hY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZURlcGxveSB7Ci0JcHVibGljIHZvaWQgcnVuKElSZXNvdXJjZSBzZWxlY3Rpb24pOyAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3lBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3lBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ0ODk3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XZWJTZXJ2aWNlRGVwbG95QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZURlcGxveUFjdGlvbiBleHRlbmRzIFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKLXB1YmxpYyB2b2lkIHJ1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiBhY3Rpb24pIHsKLQotICAgSVByb2plY3QgcHJvamVjdCA9IGdldFNlbGVjdGVkUmVzb3VyY2VQcm9qZWN0KCk7Ci0KLSAgIFN0cmluZyBbXSB0eXBlSWRzID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyVHlwZUlkc0J5TW9kdWxlKHByb2plY3QpOwotICAgT2JqZWN0IHRoZUFjdGlvbiA9IG51bGw7Ci0KLSAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKCJvcmcuZWNsaXBzZS5qc3Qud3MudWkiLCAid2Vic2VydmljZWRlcGxveSIpOwotICAgdHJ5IHsKLSAgIAkKLSAgIAlpZiAodHlwZUlkcyA9PSBudWxsIHx8IHR5cGVJZHMubGVuZ3RoIDw9IDApCi0gICAJewotICAgCSAJLy8gdGhhdCBtZWFucyB0aGUgbW9kdWxlIGlzIG5vdCBhdHRhY2hlZCB0byBhIHNlcnZlciB0aGVuIHBpY2sgdGhlIGZpcnN0IGV4dGVuc2lvbiBmb3VuZAotICAgCSAgICB0aGVBY3Rpb24gPSBlbGVtZW50c1swXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgCX0KLSAgIAllbHNlIGlmICggdHlwZUlkcy5sZW5ndGggPT0gMSkKLSAgIAl7Ci0gICAJCS8vIHRoYXQgbWVhbnMgdGhlIG1vZHVsZSBpcyBhdHRhY2hlZCB0byBvbmUgc2VydmVyIHRoZW4gZmluZHMgaXQgaWQgYW5kIGEgbWF0Y2hpbiBleHRlbnNpb24gb3IgZ2l2ZSBhIG1lc3NhZ2UKLSAgIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIAl7Ci0JCSAgIAlTdHJpbmcgaWQgPSBlbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGUoImZhY3RvcnlJZCIpOwotICAgIAkgICAJaWYgKCB0eXBlSWRzWzBdLmVxdWFscyhpZCkpCi0JCSAgIAl7Ci0JCSAgIAkJdGhlQWN0aW9uID0gZWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLQkJICAgCQlicmVhazsKLQkJICAgCX0KLSAgIAkJfQotICAgCQlpZiAodGhlQWN0aW9uID09IG51bGwgKQotICAgCQkJewotICAgCQkJCS8vIGdpdmUgYSBtZXNzYWdlCi0gICAJCQl9Ci0gICAJfQotICAgCWVsc2UKLSAgIAl7Ci0JCS8vIFRoZSBtb2R1bGUgaXMgYXR0YWNoZWQgdG8gbW9yZSB0aGFuIG9uZSBzZXJ2ZXIgZmluZCB0aGUgZmlyc3Qgc2VydmVyLWV4dGVuc2lvbiBjb3VwbGUKLQkJLy8gVEJEOiBhZGQgYSBkaWFsb2cgdG8gY2hvb3NlIHRoZSBzZXJ2ZXIgZm9yIGRlcGxveW1lbnQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIAl7Ci0JCSAgIAlTdHJpbmcgaWQgPSBlbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGUoImZhY3RvcnlJZCIpOwotCQkgICAJZm9yICggaW50IGs9MDsgazwgdHlwZUlkcy5sZW5ndGg7IGsrKykKLQkJICAgCXsKLSAgICAJICAgCQlpZiAoIHR5cGVJZHNba10uZXF1YWxzKGlkKSkKLQkJICAgCQl7Ci0JCSAgIAkJCXRoZUFjdGlvbiA9IGVsZW1lbnRzW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0JCSAgIAkJCWJyZWFrOwotCQkgICAJCX0KLQkJICAgCX0KLQkJICAgaWYgKHRoZUFjdGlvbiAhPSBudWxsKSBicmVhazsKLSAgIAkJIH0KLQkJaWYgKHRoZUFjdGlvbiA9PSBudWxsKSAKLQkJCXsKLQkJCQkvLyBnaXZlIGEgTWVzc2FnZQotCQkJfQotICAgCX0KLQotICAgIGlmICh0aGVBY3Rpb24gaW5zdGFuY2VvZiBXZWJTZXJ2aWNlRGVwbG95KQotICAgICAgICAgICgoV2ViU2VydmljZURlcGxveSl0aGVBY3Rpb24pLnJ1bihwcm9qZWN0KTsgICAKLSAgfQotCi0gIGNhdGNoIChFeGNlcHRpb24gZSkge30KLX0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XaW5kb3dBY3Rpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2luZG93QWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhkNTEyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XaW5kb3dBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ29tcGlsYXRpb25Vbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV2luZG93QWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgewotcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGZTZWxlY3Rpb247Ci0KLXB1YmxpYyBXaW5kb3dBY3Rpb25EZWxlZ2F0ZSgpIHsKLSAgICBzdXBlcigpOwotIH0KLQotcHVibGljIHZvaWQgZGlzcG9zZSgpIAotIHsKLSB9Ci0KLXB1YmxpYyB2b2lkIGluaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsgfQotCi1wdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0gICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgIGZTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLSB9Ci0KLXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotfQotcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKLQlyZXR1cm4gZlNlbGVjdGlvbjsKLX0KLQotcHVibGljIElQcm9qZWN0IGdldFNlbGVjdGVkUmVzb3VyY2VQcm9qZWN0KCkgewotIElQcm9qZWN0IHByb2plY3QgPSBudWxsOwotIElSZXNvdXJjZSByZXNvdXJjZV8gPSBudWxsOwotICAgdHJ5IHsKLSAgIAkJaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCAmJiBmU2VsZWN0aW9uLnNpemUoKSA9PSAxKSAgICB7Ci0gICAgICAJCU9iamVjdCBvYmogPSBmU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCi0gICAgICAJCWlmIChvYmogIT0gbnVsbCkgICAgewotICAgICAgCQkJaWYgKCBvYmogaW5zdGFuY2VvZiBJUmVzb3VyY2UpIAotICAgICAgCQkJCXsKLSAgICAgIAkJCQkJcmVzb3VyY2VfID0gKElSZXNvdXJjZSkgb2JqOwotICAgICAgCQkJCX0KLSAgICAgIAkJCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIElDb21waWxhdGlvblVuaXQpCi0gICAgICAJCQl7Ci0gICAgICAgIAkJCUlDb21waWxhdGlvblVuaXQgY29tcFVuaXQgPSAoSUNvbXBpbGF0aW9uVW5pdClvYmo7Ci0gICAgICAgIAkJCXJlc291cmNlXz0gY29tcFVuaXQuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0gICAgICAJCQl9Ci0JCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUphdmFQcm9qZWN0KSB7Ci0JCQkJCXByb2plY3QgPSAoKElKYXZhUHJvamVjdCkgb2JqKS5nZXRQcm9qZWN0KCk7Ci0JCQkJfQotCi0JCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRU9iamVjdCkgewotCQkJCQlwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KChFT2JqZWN0KSBvYmopOwotCQkJCX0KLQotICAgICAgCQkJaWYgKCByZXNvdXJjZV8gIT0gbnVsbCApCi0gICAJCQkJCXByb2plY3QgPSByZXNvdXJjZV8uZ2V0UHJvamVjdCgpOwotICAgICAgICAgCQkKLSAgICAJCX0KLSAgIAkJfQotICAgCX0JCi0gICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICByZXR1cm4gcHJvamVjdDsKLSB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvY29tbW9uL0NvbWJvV2l0aEhpc3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvY29tbW9uL0NvbWJvV2l0aEhpc3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYxMTUxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9Db21ib1dpdGhIaXN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkwMzAyICAgMjQyNDYyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFNhdmUgV2ViIHNlcnZpY2VzIHdpemFyZCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQ29tYm9XaXRoSGlzdG9yeSBleHRlbmRzIENvbWJvIGltcGxlbWVudHMgV2lkZ2V0V2l0aEhpc3RvcnkgewotCXByaXZhdGUgSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzXzsKLQotCXB1YmxpYyBDb21ib1dpdGhIaXN0b3J5KENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwKLQkJCUlEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncykgewotCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKLQkJc2V0dGluZ3NfID0gc2V0dGluZ3M7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVzdG9yZVdpZGdldEhpc3RvcnkoU3RyaW5nIHJlc3RvcmVLZXkpIHsKLQkJaWYgKHJlc3RvcmVLZXkgPT0gbnVsbCB8fCBzZXR0aW5nc18gPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJU3RyaW5nW10gaGlzdG9yeVZhbHVlcyA9IHNldHRpbmdzXy5nZXRBcnJheShyZXN0b3JlS2V5KTsKLQkJaWYgKGhpc3RvcnlWYWx1ZXMgPT0gbnVsbCB8fCBoaXN0b3J5VmFsdWVzLmxlbmd0aCA9PSAwKSB7Ci0JCQlyZXR1cm47IC8vIGllLi0gbm8gaGlzdG9yeSBzdG9yZWQKLQkJfQotCQlTdHJpbmdbXSBleGlzdGluZ0l0ZW1zID0gdGhpcy5nZXRJdGVtcygpOwotCQlpZiAoZXhpc3RpbmdJdGVtcy5sZW5ndGggPT0gMCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBoaXN0b3J5VmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKGhpc3RvcnlWYWx1ZXNbaV0gIT0gbnVsbCkKLQkJCQkJYWRkKGhpc3RvcnlWYWx1ZXNbaV0pOwotCQkJfQotCQl9IGVsc2UgewotCQkJLy8gb25seSByZXN0b3JlIGZyb20gaGlzdG9yeSBpZiB3aWRnZXQgZG9lc24ndCBhbHJlYWR5IGNvbnRhaW4gdmFsdWUKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaGlzdG9yeVZhbHVlcy5sZW5ndGg7IGkrKykgewotCQkJCWJvb2xlYW4gZm91bmRJbkV4aXN0aW5nSXRlbXMgPSBmYWxzZTsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGV4aXN0aW5nSXRlbXMubGVuZ3RoOyBqKyspIHsKLQotCQkJCQlpZiAoZXhpc3RpbmdJdGVtc1tqXS5lcXVhbHMoaGlzdG9yeVZhbHVlc1tpXSkpIHsKLQkJCQkJCWZvdW5kSW5FeGlzdGluZ0l0ZW1zID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICghZm91bmRJbkV4aXN0aW5nSXRlbXMpCi0JCQkJCS8vIGRvZXNuJ3QgY29udGFpbiB2YWx1ZSBhbHJlYWR5Ci0JCQkJCWlmIChoaXN0b3J5VmFsdWVzW2ldICE9IG51bGwpCi0JCQkJCQlhZGQoaGlzdG9yeVZhbHVlc1tpXSk7Ci0KLQkJCX0KLQkJfQotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKLQkJLy8gZG8gbm90aGluZywgcmVxdWlyZWQgdG8gb3Zlci1yaWRlIHRoaXMgbWV0aG9kIGlmIGV4dGVuZGluZyBTV1QKLQkJLy8gd2lkZ2V0cywKLQkJLy8gbm90IGV4dGVuZGluZyBTV1QgaGVyZSBwZXItc2UgaGVyZSwgYnV0IGp1c3QgYWxsb3dpbmcgZm9yIGEgd3JhcHBlcgotCQkvLyBpbiBvcmRlciB0bwotCQkvLyBhZGQgaGlzdG9yeSB2aWEgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3MKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdG9yZVdpZGdldEhpc3RvcnkoU3RyaW5nIHN0b3JlS2V5KSB7Ci0JCWlmIChzdG9yZUtleSA9PSBudWxsIHx8IHNldHRpbmdzXyA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlTdHJpbmcgY3VycmVudGx5U2VsZWN0ZWRWYWx1ZSA9IGdldFRleHQoKTsKLQkJU3RyaW5nW10gb2xkSGlzdG9yeVZhbHVlcyA9IHNldHRpbmdzXy5nZXRBcnJheShzdG9yZUtleSk7Ci0JCWlmIChvbGRIaXN0b3J5VmFsdWVzID09IG51bGwpIHsKLQkJCW9sZEhpc3RvcnlWYWx1ZXMgPSBuZXcgU3RyaW5nWzBdOwotCQl9Ci0JCS8vIHJpcCBvdXQgYW55IGVtcHR5IGhpc3RvcnksIGRvbid0IGFkZCBzZWxlY3RlZCB2YWx1ZSBhcyBwcm9jZXNzZWQKLQkJLy8gc2VwYXJhdGVseSwKLQkJLy8gYW5kIHRyaW0gbGVuZ3RoIHRvIDUKLQkJQXJyYXlMaXN0IG5ld0hpc3RvcnlWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgb2xkSGlzdG9yeVZhbHVlcy5sZW5ndGggJiYgaSA8IDU7IGkrKykgewotCQkJaWYgKG9sZEhpc3RvcnlWYWx1ZXNbaV0gIT0gbnVsbAotCQkJCQkmJiBvbGRIaXN0b3J5VmFsdWVzW2ldLnRyaW0oKS5sZW5ndGgoKSA+IDAKLQkJCQkJJiYgIW9sZEhpc3RvcnlWYWx1ZXNbaV0uZXF1YWxzKGN1cnJlbnRseVNlbGVjdGVkVmFsdWUpKSB7Ci0JCQkJbmV3SGlzdG9yeVZhbHVlcy5hZGQob2xkSGlzdG9yeVZhbHVlc1tpXSk7Ci0JCQl9Ci0JCX0KLQkJLy8gYWRkIGN1cnJlbnRseSBzZWxlY3RlZCB2YWx1ZSB0byB0b3Agb2YgbGlzdCBpZiBub3QgZW1wdHkgc3RyaW5nCi0JCWlmIChjdXJyZW50bHlTZWxlY3RlZFZhbHVlLnRyaW0oKS5sZW5ndGgoKSA+IDApCi0JCQluZXdIaXN0b3J5VmFsdWVzLmFkZCgwLCBjdXJyZW50bHlTZWxlY3RlZFZhbHVlKTsKLQkJLy8gZG9uZSBwcm9jZXNzaW5nIG9sZCBoaXN0b3J5IHZhbHVlcywgcmVhbGxvY2F0ZSB0aGUgdmFyIHdpdGggc2FtZSBzaXplCi0JCS8vIGFzIG5ldyB2YWx1ZXMgd2UgYXJlIGFib3V0IHRvIHN0b3JlCi0JCW9sZEhpc3RvcnlWYWx1ZXMgPSBuZXcgU3RyaW5nW25ld0hpc3RvcnlWYWx1ZXMuc2l6ZSgpXTsKLQkJbmV3SGlzdG9yeVZhbHVlcy50b0FycmF5KG9sZEhpc3RvcnlWYWx1ZXMpOwotCQlzZXR0aW5nc18ucHV0KHN0b3JlS2V5LCBvbGRIaXN0b3J5VmFsdWVzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvY29tbW9uL0RpYWxvZ1Jlc291cmNlQnJvd3Nlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRGlhbG9nUmVzb3VyY2VCcm93c2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNDlkYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRGlhbG9nUmVzb3VyY2VCcm93c2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDIzICAgMTgzMDc1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotCi0vKioKLSogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGRpYWxvZyBmb3IgYnJvd3Npbmcgd29ya3NwYWNlIHJlc291cmNlcy4KLSovCi1wdWJsaWMgY2xhc3MgRGlhbG9nUmVzb3VyY2VCcm93c2VyIGV4dGVuZHMgRGlhbG9nCi17Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUkVTT1VSQ0VfVFJFRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuRFJFUzAwMDEiOwotCi0gIHByaXZhdGUgSVJlc291cmNlIHJvb3RfOwotICBwcml2YXRlIElGaWx0ZXJbXSBmaWx0ZXJzXzsKLSAgcHJpdmF0ZSBib29sZWFuIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF87Ci0gIHByaXZhdGUgSVJlc291cmNlW10gc2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBUcmVlIHJlc291cmNlVHJlZV87Ci0gIHByaXZhdGUgVHJlZVZpZXdlciBmaWxlVmlld2VyXzsKLSAgcHJpdmF0ZSBIYXNoTWFwICAgIHZpc2l0ZWRDb250YWluZXJzXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgIGZvbGRlcnNTZWxlY3RhYmxlXzsKLQotICBwdWJsaWMgRGlhbG9nUmVzb3VyY2VCcm93c2VyKFNoZWxsIHNoZWxsLCBJUmVzb3VyY2Ugcm9vdCwgSUZpbHRlciBmaWx0ZXIpCi0gIHsKLSAgICB0aGlzKHNoZWxsLCByb290LCBuZXcgSUZpbHRlcltde2ZpbHRlcn0sIGZhbHNlICk7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkRpYWxvZ1Jlc291cmNlQnJvd3NlcjwvY29kZT4KLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cGFyZW50IFNoZWxsPC9jb2RlPi4KLSAgKiBUaGUgZGlhbG9nIHJlbmRlcnMgYWxsIHJlc291cmNlcyBpbmNsdWRpbmcgYW5kCi0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnJvb3QgSVJlc291cmNlPC9jb2RlPgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGx9LgotICAqIG9yIG51bGwgdG8gY3JlYXRlIGEgdG9wLWxldmVsIHNoZWxsLgotICAqIEBwYXJhbSByb290IFRoZSByb290IHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9LAotICAqIG9yIG51bGwgdG8gYmVnaW4gd2l0aCB0aGUgd29ya3NwYWNlIHJvb3QuCi0gICogQHBhcmFtIGZpbHRlcnMgQW4gYXJyYXkgb2YgamF2YS5sYW5nLlN0cmluZwotICAqLwotICBwdWJsaWMgRGlhbG9nUmVzb3VyY2VCcm93c2VyKFNoZWxsIHNoZWxsLCBJUmVzb3VyY2Ugcm9vdCwgSUZpbHRlcltdIGZpbHRlcnMpCi0gIHsKLSAgICB0aGlzKCBzaGVsbCwgcm9vdCwgZmlsdGVycywgZmFsc2UgKTsKLSAgfQotICAKLSAgcHVibGljIERpYWxvZ1Jlc291cmNlQnJvd3NlcihTaGVsbCBzaGVsbCwgSVJlc291cmNlIHJvb3QsIElGaWx0ZXJbXSBmaWx0ZXJzLCBib29sZWFuIGZvbGRlcnNTZWxlY3RhYmxlICkKLSAgewotICAgIHN1cGVyKHNoZWxsKTsKLQotICAgIElSZXNvdXJjZSBtb2R1bGVSb290ID0gcm9vdDsKLSAgICBpZiAocm9vdCBpbnN0YW5jZW9mIElQcm9qZWN0KQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSAoSVByb2plY3QpbW9kdWxlUm9vdDsKLSAgICAgCi0gICAgICAgIG1vZHVsZVJvb3QgPSBwOwotICAgIAotICAgIH0KLQotICAgIHJvb3RfID0gKG1vZHVsZVJvb3QgPT0gbnVsbCkgPyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpIDogbW9kdWxlUm9vdDsKLSAgICBmaWx0ZXJzXyA9IChmaWx0ZXJzID09IG51bGwpID8gbmV3IElGaWx0ZXJbMF0gOiBmaWx0ZXJzOwotICAgIHZpc2l0ZWRDb250YWluZXJzXyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXyA9IGZhbHNlOwotICAgIGZvbGRlcnNTZWxlY3RhYmxlXyA9IGZvbGRlcnNTZWxlY3RhYmxlOwotICAgIHNldFNoZWxsU3R5bGUoU1dULkRJQUxPR19UUklNIHwgU1dULlJFU0laRSB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7Ci0gIH0KLQotICAvKioKLSAgKiBFbmFibGVzIG9yIGRpc2FibGVzIG11bHRpcGxlIHNlbGVjdGlvbiBpbiB0aGUgdHJlZSB2aWV3LgotICAqIE11bHRpcGxlIHNlbGVjdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAqIEBwYXJhbSBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQgVHJ1ZSB0byBlbmFibGVkIG9yIGZhbHNlIHRvIGRpc2FibGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZChib29sZWFuIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCkKLSAgewotICAgIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF8gPSBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQ7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb25zIG1hZGUgaW4gdGhlIGRpYWxvZyBpZiBPSyB3YXMgcHJlc3NlZCwKLSAgKiBvciBudWxsIGlmIENhbmNlbCB3YXMgcHJlc3NlZC4gUmV0dXJucyBudWxsIGlmIHRoZSBkaWFsb2cKLSAgKiBoYXMgbmV2ZXIgYmVlbiBvcGVuZWQuCi0gICogQHJldHVybiBBbiBhcnJheSBvZiBzZWxlY3RlZCByZXNvdXJjZXMsIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotICAqLwotICBwdWJsaWMgSVJlc291cmNlW10gZ2V0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25fOwotICB9Ci0KLSAgcHVibGljIElSZXNvdXJjZSBnZXRGaXJzdFNlbGVjdGlvbigpCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uXyAhPSBudWxsICYmIHNlbGVjdGlvbl8ubGVuZ3RoID4gMCkKLSAgICAgIHJldHVybiBzZWxlY3Rpb25fWzBdOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgIC8qKgotICAqIENhbGxlZCB3aGVuIHRoZSBDYW5jZWwgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogSW5zdXJlcyB0aGF0IHtAbGluayAjZ2V0UmVzdWx0fSB3aWxsIHJldHVybiBudWxsLgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjYW5jZWxQcmVzc2VkKCkKLSAgewotICAgIHNlbGVjdGlvbl8gPSBudWxsOwotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLkNBTkNFTCk7Ci0gICAgc3VwZXIuY2FuY2VsUHJlc3NlZCgpOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIE9LIGJ1dHRvbiBpcyBwcmVzc2VkLgotICAqIFNxdWlycmVscyBhd2F5IHRoZSBsaXN0IG9mIHplcm8gb3IgbW9yZSBzZWxlY3RlZAotICAqIDxjb2RlPklSZXNvdXJjZTwvY29kZT5zIHRvIGJlIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UmVzdWx0fS4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLSAgewotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjdHVyZWRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgc2VsZWN0aW9uXyA9IG5ldyBJUmVzb3VyY2Vbc3RydWN0dXJlZFNlbGVjdGlvbi5zaXplKCldOwotICAgICAgaW50IGkgPSAwOwotICAgICAgSXRlcmF0b3IgaXQgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICAgIHNlbGVjdGlvbl9baSsrXSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgfQotICAgIH0KLSAgICBzZXRSZXR1cm5Db2RlKERpYWxvZy5PSyk7Ci0gICAgc3VwZXIub2tQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBTZWUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cjY29uZmlndXJlU2hlbGx9LgotICAqIEBwYXJhbSBzaGVsbCBUaGUgc2hlbGwuCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIHNoZWxsKQotICB7Ci0gICAgc3VwZXIuY29uZmlndXJlU2hlbGwoc2hlbGwpOwotICAgIHNoZWxsLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkRJQUxPR19USVRMRV9SRVNPVVJDRV9CUk9XU0VSKTsKLSAgfQotCi0gIC8qKiAKLSAgKiBDcmVhdGVzIHRoZSBkaWFsb2cgYXJlYS4KLSAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29tcG9zaXRlLgotICAqIEByZXR1cm4gVGhlIGNvbnRyb2wgYXJlYS4KLSAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC53aWR0aEhpbnQgPSA0MDA7Ci0gICAgZ2QuaGVpZ2h0SGludCA9IDMwMDsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgaWYgKG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF8pCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuTVVMVEkgfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc291cmNlVHJlZV8gPSBuZXcgVHJlZShjb21wb3NpdGUsU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCk7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIHJlc291cmNlVHJlZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9SRVNPVVJDRV9UUkVFKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJlc291cmNlVHJlZV8sIElORk9QT1BfUkVTT1VSQ0VfVFJFRSk7Ci0KLSAgICBmaWxlVmlld2VyXyA9IG5ldyBUcmVlVmlld2VyKHJlc291cmNlVHJlZV8pOwotICAgIGZpbGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGZpbGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IERlY29yYXRpbmdMYWJlbFByb3ZpZGVyKG5ldyBXb3JrYmVuY2hMYWJlbFByb3ZpZGVyKCksIFdlYlNlcnZpY2VVSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldERlY29yYXRvck1hbmFnZXIoKS5nZXRMYWJlbERlY29yYXRvcigpKSk7Ci0gICAgZmlsZVZpZXdlcl8uYWRkRmlsdGVyKAotICAgICAgbmV3IFZpZXdlckZpbHRlcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50T2JqZWN0LCBPYmplY3Qgb2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRSZXNvdXJjZSggKElSZXNvdXJjZSlvYmplY3QgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICAKLSAgICBpZiggIWZvbGRlcnNTZWxlY3RhYmxlXyApCi0gICAgewotICAgICAgZmlsZVZpZXdlcl8uYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3Rpb25DaGFuZ2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgfQotICAgIAotICAgIGZpbGVWaWV3ZXJfLnNldElucHV0KHJvb3RfKTsKLSAgICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNlbGVjdGlvbkNoYW5nZWQoKQotICB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gICAgICA9IGZpbGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpOwotICAgIGJvb2xlYW4gICAgdmFsaWRTZWxlY3Rpb24gPSB0cnVlOwotICAgIAotICAgIGlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWNTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgSXRlcmF0b3IgICAgICAgICAgICAgaXRlciAgICAgICAgICAgPSBzdHJ1Y1NlbGVjdGlvbi5pdGVyYXRvcigpOwotICAgICAgCi0gICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgc2VsZWN0ZWQgaXRlbXMgYXJlIHZhbGlkLgotICAgICAgd2hpbGUoIGl0ZXIuaGFzTmV4dCgpICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIElGaWxlICkKLSAgICAgICAgewotICAgICAgICAgIHZhbGlkU2VsZWN0aW9uID0gYWNjZXB0c0ZpbGUoIChJRmlsZSlvYmplY3QgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxpZFNlbGVjdGlvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggIXZhbGlkU2VsZWN0aW9uICkgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YWxpZFNlbGVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBCdXR0b24gb2tCdXR0b24gPSBnZXRCdXR0b24oIERpYWxvZy5PSyApOwotICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoIHZhbGlkU2VsZWN0aW9uICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBhY2NlcHRzRmlsZSggSVJlc291cmNlIGZpbGUgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbHRlcnNfLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmKCBmaWx0ZXJzX1tpXS5hY2NlcHRzKCBmaWxlICkgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGlzVmFsaWRSZXNvdXJjZSggSVJlc291cmNlIHJlc291cmNlICkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYoIHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUgKQotICAgIHsKLSAgICAgIC8vIExvb3Agb3ZlciBhbGwgZmlsdGVycy4gIElmIG9uZSBpcyBhY2NlcHRhYmxlIHRoZW4gd2Ugd2lsbAotICAgICAgLy8gcmV0dXJuIHRydWUuCi0gICAgICByZXN1bHQgPSBhY2NlcHRzRmlsZSggcmVzb3VyY2UgKTsKLSAgICB9Ci0gICAgZWxzZSBpZiggcmVzb3VyY2UgaW5zdGFuY2VvZiBJQ29udGFpbmVyICkKLSAgICB7Ci0gICAgICAvLyBOb3cgc2VlIGlmIHRoaXMgY29udGFpbmVyIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSB2YWxpZCBmaWxlLgotICAgICAgQm9vbGVhbiB2YWxpZENvbnRhaW5lciA9IChCb29sZWFuKXZpc2l0ZWRDb250YWluZXJzXy5nZXQoIHJlc291cmNlICk7Ci0gICAgICAKLSAgICAgIGlmKCB2YWxpZENvbnRhaW5lciA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZW4ndCBzZWVuIHRoaXMgY29udGFpbmVyIGJlZm9yZS4KLSAgICAgICAgdHJ5IAotICAgICAgICB7Ci0gICAgICAgICAgSUNvbnRhaW5lciAgY29udGFpbmVyID0gKElDb250YWluZXIpcmVzb3VyY2U7Ci0gICAgICAgICAgSVJlc291cmNlW10gbWVtYmVycyAgID0gY29udGFpbmVyLm1lbWJlcnMoKTsKLSAgICAgICAgICAKLSAgICAgICAgICB2aXNpdGVkQ29udGFpbmVyc18ucHV0KCBjb250YWluZXIsIEJvb2xlYW4uRkFMU0UgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWVtYmVycy5sZW5ndGg7IGluZGV4KyspIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBpc1ZhbGlkUmVzb3VyY2UobWVtYmVyc1tpbmRleF0pICkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHZpc2l0ZWRDb250YWluZXJzXy5wdXQoIGNvbnRhaW5lciwgQm9vbGVhbi5UUlVFICk7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkgCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBEbyBub3RoaW5nCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gdmFsaWRDb250YWluZXIuYm9vbGVhblZhbHVlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRmlsZUV4dGVuc2lvbkZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRmlsZUV4dGVuc2lvbkZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODc3ZGNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvY29tbW9uL0ZpbGVFeHRlbnNpb25GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODA1MDEgICAyMjk3MjggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHVwcGVyY2FzZSAuV1NETCBjYW5ub3QgYmUgZm91bmQgYnkgdGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmb3IgYSBjbGFzcyBvZiBvYmplY3RzIHRoYXQgZmlsdGVyCi0qIG90aGVyIG9iamVjdHMgZm9yIGluY2x1c2lvbiBvciBleGNsdXNpb24gYnkgc29tZSBjb25zdW1lci4KLSovCi1wdWJsaWMgY2xhc3MgRmlsZUV4dGVuc2lvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBleHRlbnNpb25zXzsKLQotICBwdWJsaWMgRmlsZUV4dGVuc2lvbkZpbHRlcihTdHJpbmdbXSBleHRlbnNpb25zKQotICB7Ci0gICAgZXh0ZW5zaW9uc18gPSAoZXh0ZW5zaW9ucyAhPSBudWxsKSA/IGV4dGVuc2lvbnMgOiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkuZWRpdG9yLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyIjsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLmVkaXRvci5jb21tb24uRmlsZUV4dGVuc2lvbkZpbHRlciI7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4gVGhpcyBtZXRob2QKLSAgKiBtdXN0IHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9Ci0gICogcmV0dXJucyBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aXRoIGEgc2V2ZXJpdHkgb2YKLSAgKiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQotICAgIHsKLSAgICAgIElGaWxlIGZpbGUgPSAoSUZpbGUpb2JqZWN0OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zXy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpICE9IG51bGwgJiYgZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkuZXF1YWxzSWdub3JlQ2FzZShleHRlbnNpb25zX1tpXSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vSUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vSUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTVkYjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvY29tbW9uL0lGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uOwotCi0vKioKLSogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBhIGNsYXNzIG9mIG9iamVjdHMgdGhhdCBmaWx0ZXIKLSogb3RoZXIgb2JqZWN0cyBmb3IgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBieSBzb21lIGNvbnN1bWVyLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUZpbHRlcgotewotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPkZpbHRlcjwvY29kZT4KLSAgKiBhY2NlcHRzIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LiBUaGlzIG1ldGhvZAotICAqIG11c3QgcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYge0BsaW5rICNzdGF0dXNPZn0KLSAgKiByZXR1cm5zIGFuIDxjb2RlPklTdGF0dXM8L2NvZGU+IHdpdGggYSBzZXZlcml0eSBvZgotICAqIGxlc3MgdGhhbiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPi4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPkZpbHRlcjwvY29kZT4KLSAgKiBhY2NlcHRzIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRzKE9iamVjdCBvYmplY3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vVUlVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vVUlVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjVmOWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvY29tbW9uL1VJVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICogMjAwOTAzMDIgICAyNDI0NjIgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgU2F2ZSBXZWIgc2VydmljZXMgd2l6YXJkIHNldHRpbmdzCi0gKiAyMDA5MDcyMiAgIDI3ODEzNiBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCBVc2UgU1dULkxFRlQgb3IgTEVBRCBpbnN0ZWFkIG9mIFNXVC5XUkFQIHN0eWxlIGZvciBMYWJlbAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5Db21ib1dpdGhIaXN0b3J5OwotCi0KLXB1YmxpYyBjbGFzcyBVSVV0aWxzIAotewotCS8qKgotCSAqIEEgZGVmYXVsdCBwYWRkaW5nIHZhbHVlIGZvciBob3Jpem9udGFsUmVzaXplKCkuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREVGQVVMVF9QQURESU5HID0gMzU7Ci0JCi0gIFN0cmluZyAgICAgICBpbmZvUG9waWRfOwotICAKLSAgcHVibGljIFVJVXRpbHMoIFN0cmluZyBpbmZvUG9waWQgKQotICB7Ci0gICAgaW5mb1BvcGlkXyA9IGluZm9Qb3BpZDsKLSAgfQotICAKLSAgcHVibGljIEJ1dHRvbiBjcmVhdGVSYWRpb0J1dHRvbiggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wICkKLSAgewotICAgIHJldHVybiBjcmVhdGVCdXR0b24oIFNXVC5SQURJTywgcGFyZW50LCBsYWJlbE5hbWUsIHRvb2x0aXAsIGluZm9wb3AgKTsKLSAgfQotICAKLSAgcHVibGljIEJ1dHRvbiBjcmVhdGVDaGVja2JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wICkKLSAgewotICAgIHJldHVybiBjcmVhdGVCdXR0b24oIFNXVC5DSEVDSywgcGFyZW50LCBsYWJlbE5hbWUsIHRvb2x0aXAsIGluZm9wb3AgKTsKLSAgfQotICAKLSAgcHVibGljIEJ1dHRvbiBjcmVhdGVQdXNoQnV0dG9uKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULk5PTkUsIHBhcmVudCwgbGFiZWxOYW1lLCB0b29sdGlwLCBpbmZvcG9wICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBCdXR0b24gY3JlYXRlQnV0dG9uKCBpbnQga2luZCwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wICkKLSAgewotICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKCBwYXJlbnQsIGtpbmQgKTsKLSAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gbGFiZWxOYW1lIDogdG9vbHRpcDsKLSAgICBidXR0b24uc2V0VGV4dCggbGFiZWxOYW1lICk7Ci0gICAgYnV0dG9uLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGJ1dHRvbiwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0gIAotICBwdWJsaWMgQ29tYm8gY3JlYXRlQ29tYm8oIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLSAgeyAgICAKLQkgIHJldHVybiBjcmVhdGVDb21ibyhwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCwgc3R5bGUsIG51bGwpOwotICB9Ci0gIHB1YmxpYyBDb21ibyBjcmVhdGVDb21ibyggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgc3R5bGUsIElEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyApIHsKLQkgICAgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0JICAgIENvbWJvIGNvbWJvOwotCSAgICBpZiggbGFiZWxOYW1lICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoIHBhcmVudCwgU1dULldSQVApOwotCSAgICAgIGxhYmVsLnNldFRleHQoIGxhYmVsTmFtZSApOwotCSAgICAgIGxhYmVsLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0JICAgIH0KLQkgICAgaWYgKHNldHRpbmdzID09IG51bGwpCi0JICAgIAljb21ibyA9IG5ldyBDb21ibyggcGFyZW50LCBzdHlsZSApOwotCSAgICBlbHNlCi0JICAgIAljb21ibyA9IG5ldyBDb21ib1dpdGhIaXN0b3J5KHBhcmVudCwgc3R5bGUsIHNldHRpbmdzKTsKLQkgICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLQkgICAgIAotCSAgICBjb21iby5zZXRMYXlvdXREYXRhKCBncmlkZGF0YSApOwotCSAgICBjb21iby5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCApOwotCSAgICAKLQkgICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGNvbWJvLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotCSAgICAKLQkgICAgcmV0dXJuIGNvbWJvOyAgICAgIAotCi0gIH0KLSAgcHVibGljIENvbWJvV2l0aEhpc3RvcnkgY3JlYXRlQ29tYm9XaXRoSGlzdG9yeShDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSwgSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzICkgewotCSAgcmV0dXJuIChDb21ib1dpdGhIaXN0b3J5KWNyZWF0ZUNvbWJvKHBhcmVudCwgbGFiZWxOYW1lLCB0b29sdGlwLCBpbmZvcG9wLCBzdHlsZSwgc2V0dGluZ3MpOwotICB9Ci0gIHB1YmxpYyBUZXh0IGNyZWF0ZVRleHQoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLSAgeyAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gbGFiZWxOYW1lIDogdG9vbHRpcDsKLSAgICAKLSAgICBpZiggbGFiZWxOYW1lICE9IG51bGwgKQotICAgIHsKLSAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKCBwYXJlbnQsIFNXVC5MRUFEKTsKLSAgICAgIGxhYmVsLnNldFRleHQoICBsYWJlbE5hbWUgICk7Ci0gICAgICBsYWJlbC5zZXRUb29sVGlwVGV4dCggIHRvb2x0aXAgKTsKLSAgICB9Ci0gICAgCi0gICAgVGV4dCB0ZXh0ID0gbmV3IFRleHQoIHBhcmVudCwgc3R5bGUgKTsKLSAgICBHcmlkRGF0YSBncmlkZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIAotICAgIHRleHQuc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLSAgICB0ZXh0LnNldFRvb2xUaXBUZXh0KCB0b29sdGlwKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggdGV4dCwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdGV4dDsgICAgICAKLSAgfQotICAKLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb21wb3NpdGUoIENvbXBvc2l0ZSBwYXJlbnQsIGludCBjb2x1bW5zICkKLSAgewotICAgIHJldHVybiBjcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgY29sdW1ucywgLTEsIC0xICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29tcG9zaXRlKCBDb21wb3NpdGUgcGFyZW50LCBpbnQgY29sdW1ucywgaW50IG1hcmdpbkhlaWdodCwgaW50IG1hcmdpbldpZHRoICkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgCi0gICAgR3JpZExheW91dCBncmlkbGF5b3V0ICAgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdyaWRsYXlvdXQubnVtQ29sdW1ucyAgID0gY29sdW1uczsKLSAgCi0gICAgaWYoIG1hcmdpbkhlaWdodCA+PSAwICkgZ3JpZGxheW91dC5tYXJnaW5IZWlnaHQgPSBtYXJnaW5IZWlnaHQ7Ci0gICAgaWYoIG1hcmdpbldpZHRoID49IDAgKSAgZ3JpZGxheW91dC5tYXJnaW5XaWR0aCAgPSBtYXJnaW5XaWR0aDsKLSAgICAKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KCBncmlkbGF5b3V0ICk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLSAgICAKLSAgICByZXR1cm4gY29tcG9zaXRlOwotICAgIAotICB9Ci0gIHB1YmxpYyBHcm91cCBjcmVhdGVHcm91cCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGdyb3VwTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wICkKLSAgewotICAJcmV0dXJuIGNyZWF0ZUdyb3VwKCBwYXJlbnQsIGdyb3VwTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCwgMSwgLTEsIC0xICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBHcm91cCBjcmVhdGVHcm91cCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGdyb3VwTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgY29sdW1ucywgaW50IG1hcmdpbkhlaWdodCwgaW50IG1hcmdpbldpZHRoICkKLSAgewotICAgIEdyb3VwICAgICAgbmV3R3JvdXAgICAgPSBuZXcgR3JvdXAoIHBhcmVudCwgU1dULk5PTkUgKTsKLSAgICBHcmlkRGF0YSAgIGdyaWRkYXRhICAgID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgR3JpZExheW91dCBncmlkbGF5b3V0ICA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgCi0gICAgZ3JpZGxheW91dC5udW1Db2x1bW5zICA9IGNvbHVtbnM7Ci0gIAotICAgIGlmKCBtYXJnaW5IZWlnaHQgPj0gMCApIGdyaWRsYXlvdXQubWFyZ2luSGVpZ2h0ID0gbWFyZ2luSGVpZ2h0OwotICAgIGlmKCBtYXJnaW5XaWR0aCA+PSAwICkgIGdyaWRsYXlvdXQubWFyZ2luV2lkdGggID0gbWFyZ2luV2lkdGg7Ci0gICAgICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBncm91cE5hbWUgOiB0b29sdGlwOwotICAgIG5ld0dyb3VwLnNldExheW91dCggZ3JpZGxheW91dCApOwotICAgIG5ld0dyb3VwLnNldFRleHQoICBncm91cE5hbWUgICk7Ci0gICAgbmV3R3JvdXAuc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLSAgICBuZXdHcm91cC5zZXRUb29sVGlwVGV4dCggIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChuZXdHcm91cCwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3ApOwotICAgIAotICAgIHJldHVybiBuZXdHcm91cDsKLSAgfQotICAKLSAgcHVibGljIFRyZWUgY3JlYXRlVHJlZSggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgc3R5bGUgKQotICB7Ci0gICAgCi0gICAgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/ICIiIDogdG9vbHRpcDsKLSAgICAKLSAgICBUcmVlIHRyZWUgPSBuZXcgVHJlZSggcGFyZW50LCBzdHlsZSApOwotICAgICAKLSAgICB0cmVlLnNldExheW91dERhdGEoIGNyZWF0ZUZpbGxBbGwoKSApOwotICAgIHRyZWUuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXApOwotICAgIAotICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCB0cmVlLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICAgIAotICAgIHJldHVybiB0cmVlOyAgICAgIAotICAgIAotICB9Ci0gIAotICBwdWJsaWMgVGFibGUgY3JlYXRlVGFibGUoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLSAgewotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyAiIiA6IHRvb2x0aXA7Ci0gICAgCi0gICAgVGFibGUgdGFibGUgPSBuZXcgVGFibGUoIHBhcmVudCwgc3R5bGUgKTsKLSAgICAgCi0gICAgLy90YWJsZS5zZXRMYXlvdXREYXRhKCBjcmVhdGVGaWxsQWxsKCkgKTsKLSAgICB0YWJsZS5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHRhYmxlLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICAgIAotICAgIHJldHVybiB0YWJsZTsgICAgICAKLSAgICAKLSAgfSAgCi0gIAotICBwdWJsaWMgTGFiZWwgY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvciggQ29tcG9zaXRlIHBhcmVudCwgaW50IHNwYWNpbmcgKQotICB7Ci0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IGNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAxLCBzcGFjaW5nLCAtMSApOwotICAgICAKLQlMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoIGNvbXBvc2l0ZSwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMICk7Ci0JCi0JR3JpZERhdGEgZ3JpZGRhdGEgID0gbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgKTsKLQlzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLSAgIAotCXJldHVybiBzZXBhcmF0b3I7Ci0gIH0KLSAgCi0gIHB1YmxpYyBHcmlkRGF0YSBjcmVhdGVGaWxsQWxsKCkKLSAgewotCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwKLQkJCSAgICAgICAgICAgICAgICAgICAgICBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwKLQkJCSAgICAgICAgICAgICAgICAgICAgICBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMICk7Ci0gICAgcmV0dXJuIGRhdGE7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUluZm9Qb3AoQ29udHJvbCBjdHJsLCBTdHJpbmcgaW5mb3BvcCkKLSAgewotCSAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGN0cmwsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXNpemVzIHRoZSB3aWR0aCBvZiB0aGUgdGFyZ2V0IGNvbXBvc2l0ZSBzbyB0aGF0IGl0IGlzIGFzIHdpZGUgYXMgdGhlCi0gICAqIHJlZmVyZW5jZSBjb21wb3NpdGUgcGx1cyBhIHBhZGRpbmcgdmFsdWUuICAKLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXQgVGhlIGNvbXBvc2l0ZSB0byByZXNpemUuCi0gICAqIEBwYXJhbSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBjb21wb3NpdGUKLSAgICogQHBhcmFtIHBhZGRpbmcgVGhlIHBhZGRpbmcgdmFsdWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIGhvcml6b250YWxSZXNpemUoQ29tcG9zaXRlIHRhcmdldCwgQ29tcG9zaXRlIHJlZmVyZW5jZSwgaW50IHBhZGRpbmcpIHsKLQkJCi0JCVBvaW50IG9yaWdpbmFsU2l6ZSAgPSB0YXJnZXQuZ2V0U2l6ZSgpOwotCQlQb2ludCByZWZlcmVuY2VTaXplID0gcmVmZXJlbmNlLmdldFNpemUoKTsKLQkJCi0JCXBhZGRpbmcgPSBwYWRkaW5nID49IDAgPyBwYWRkaW5nIDogREVGQVVMVF9QQURESU5HOwotCQkKLQkJaWYgKHJlZmVyZW5jZVNpemUueCArIHBhZGRpbmcgPiBvcmlnaW5hbFNpemUueCkKLQkJCXRhcmdldC5zZXRTaXplKHJlZmVyZW5jZVNpemUueCArIHBhZGRpbmcsIG9yaWdpbmFsU2l6ZS55KTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9XaWRnZXRXaXRoSGlzdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vV2lkZ2V0V2l0aEhpc3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNkOWVjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9XaWRnZXRXaXRoSGlzdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkwMzAyICAgMjQyNDYyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFNhdmUgV2ViIHNlcnZpY2VzIHdpemFyZCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgV2lkZ2V0V2l0aEhpc3RvcnkgewotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHN0b3JlV2lkZ2V0SGlzdG9yeShTdHJpbmcgc3RvcmVLZXkpOwotCi0JcHVibGljIGFic3RyYWN0IHZvaWQgcmVzdG9yZVdpZGdldEhpc3RvcnkoU3RyaW5nIHJlc3RvcmVLZXkpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2RpYWxvZy9EaWFsb2dVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2YzA4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2RpYWxvZy9EaWFsb2dVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMyNCAgIDIyMDk4MyB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guSUphdmFTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guU2VhcmNoRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC51aS5JSmF2YUVsZW1lbnRTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZENvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkNvbnRhaW5lclNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNlbGVjdGlvbkRpYWxvZzsKLQotCi0vKioKLSogQ29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBsYXVuY2hpbmcgdmFyaW91cyBjb21tb24gZGlhbG9ncy4KLSovCi1wdWJsaWMgZmluYWwgY2xhc3MgRGlhbG9nVXRpbHMKLXsKLQotICAvKioKLSAgKiBSYWlzZXMgYSBkaWFsb2cgZm9yIGJyb3dzaW5nIGNvbnRhaW5lcnMuCi0gICogQHBhcmFtIHBhcmVudFNoZWxsIFRoZSBwYXJlbnQgc2hlbGwsIG9wdGlvbmFsbHkgbnVsbC4KLSAgKiBAcGFyYW0gaW5pdGlhbFBhdGhuYW1lIFRoZSBpbml0aWFsIHNlbGVjdGlvbi4KLSAgKiBAcmV0dXJuIFRoZSBzZWxlY3RlZCBjb250YWluZXIgb3IgbnVsbCBpZiB0aGUgZGlhbG9nCi0gICogaXMgY2FuY2VsbGVkLCBvciB0aGVyZSBpcyBubyBzZWxlY3Rpb24sIG9yIHRoZSBzZWxlY3Rpb24KLSAgKiBpcyBub3QgYSBwcm9qZWN0IG9yIGEgZm9sZGVyLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VDb250YWluZXJzICggU2hlbGwgcGFyZW50U2hlbGwsIFN0cmluZyBpbml0aWFsUGF0aG5hbWUgKQotICB7Ci0gICAgU3RyaW5nIHNlbGVjdGVkUGF0aG5hbWUgPSBudWxsOwotICAgIElQYXRoIGluaXRpYWxQYXRoID0gbmV3IFBhdGgoaW5pdGlhbFBhdGhuYW1lKTsKLSAgICBJUmVzb3VyY2UgaW5pdGlhbFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihpbml0aWFsUGF0aCk7Ci0gICAgaWYgKGluaXRpYWxSZXNvdXJjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChpbml0aWFsUGF0aC5zZWdtZW50Q291bnQoKSA9PSAxKQotICAgICAgewotICAgICAgICBpbml0aWFsUmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGluaXRpYWxQYXRoLnNlZ21lbnQoMCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaW5pdGlhbFBhdGguc2VnbWVudENvdW50KCkgPiAxKQotICAgICAgewotICAgICAgICBpbml0aWFsUmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGb2xkZXIoaW5pdGlhbFBhdGgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGluaXRpYWxSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIGluaXRpYWxSZXNvdXJjZSA9IGluaXRpYWxSZXNvdXJjZS5nZXRQYXJlbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgQ29udGFpbmVyU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IG5ldyBDb250YWluZXJTZWxlY3Rpb25EaWFsb2cocGFyZW50U2hlbGwsKElDb250YWluZXIpaW5pdGlhbFJlc291cmNlLHRydWUsbnVsbCk7Ci0gICAgZGlhbG9nLm9wZW4oKTsKLSAgICBPYmplY3RbXSByZXN1bHQgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHJlc3VsdC5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGlmIChyZXN1bHRbMF0gaW5zdGFuY2VvZiBJUGF0aCkKLSAgICAgIHsKLSAgICAgICAgSVBhdGggcGF0aCA9IChJUGF0aClyZXN1bHRbMF07Ci0gICAgICAgIHNlbGVjdGVkUGF0aG5hbWUgPSBwYXRoLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzZWxlY3RlZFBhdGhuYW1lOwotICB9Ci0KLSAgLyoqCi0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyByZXNvdXJjZXMuCi0gICogQHBhcmFtIHBhcmVudFNoZWxsIFRoZSBwYXJlbnQgc2hlbGwsIG9wdGlvbmFsbHkgbnVsbC4KLSAgKiBAcGFyYW0gdG9wUmVzb3VyY2UgVGhlIHJlc291cmNlIHVuZGVyIHdoaWNoIHRvIGJyb3dzZS4KLSAgKiBJZiBudWxsLCBhbGwgcmVzb3VyY2VzIGluIHRoZSB3b3Jrc3BhY2UgYXJlIGJyb3dzZWQuCi0gICogQHBhcmFtIGluaXRpYWxTZWxlY3Rpb24gVGhlIGluaXRpYWwgc2VsZWN0aW9uLCBvciBudWxsIGZvciBub25lLgotICAqIElmIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBpcyBub3QgbnVsbCBhbmQgZXhpc3RzIGluIHRoZSBzZXQgb2YKLSAgKiByZXNvdXJjZXMgZm91bmQgYnkgdGhlIGJyb3dzZXIsIHRoYXQgcmVzb3VyY2UgaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KLSAgKiBAcGFyYW0gZmlsdGVyIFRoZSByZXNvdXJjZSBmaWx0ZXIgb2JqZWN0LgotICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIHJlc291cmNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBicm93c2VSZXNvdXJjZXMgKCBTaGVsbCBwYXJlbnRTaGVsbCwgSVJlc291cmNlIHRvcFJlc291cmNlLCBJUmVzb3VyY2UgaW5pdGlhbFNlbGVjdGlvbiwgRmlsdGVyIGZpbHRlcikKLSAgewotICAgIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nIHJkcyA9IG5ldyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyhwYXJlbnRTaGVsbCx0b3BSZXNvdXJjZSxpbml0aWFsU2VsZWN0aW9uLGZpbHRlcik7Ci0gICAgcmRzLnNldE11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZChmYWxzZSk7Ci0gICAgaWYgKHJkcy5vcGVuKCkgPT0gRGlhbG9nLk9LKQotICAgIHsKLSAgICAgIElSZXNvdXJjZVtdIHJlc291cmNlcyA9IHJkcy5nZXRSZXN1bHQoKTsKLSAgICAgIGlmIChyZXNvdXJjZXMgIT0gbnVsbCAmJiByZXNvdXJjZXMubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc291cmNlc1swXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiA8Yj5JbXBsZW1lbnRhdGlvbiByZW1haW5zIFRCRC48L2I+PGJyPgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgY2xhc3NlcyBvbiBhIHByb2plY3QncyBjbGFzcyBwYXRoLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QuCi0gICogQHJldHVybiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlbGVjdGVkIGphdmEgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNsYXNzZXMgKCBTaGVsbCBwYXJlbnRTaGVsbCwgSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICByZXR1cm4gYnJvd3NlQ2xhc3NlcyhwYXJlbnRTaGVsbCwgcHJvamVjdCwgKElSdW5uYWJsZUNvbnRleHQpbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VDbGFzc2VzICggU2hlbGwgcGFyZW50U2hlbGwsIElQcm9qZWN0IHByb2plY3QsIElXaXphcmRDb250YWluZXIgY29udGFpbmVyKQotICB7Ci0gICAgcmV0dXJuIGJyb3dzZUNsYXNzZXMocGFyZW50U2hlbGwsIHByb2plY3QsIChJUnVubmFibGVDb250ZXh0KWNvbnRhaW5lcik7Ci0gIH0KLQotICAvKioKLSAgKiBSYWlzZXMgYSBkaWFsb2cgZm9yIGJyb3dzaW5nIGNsYXNzZXMgb24gYSBwcm9qZWN0J3MgY2xhc3MgcGF0aC4KLSAgKiBAcGFyYW0gcGFyZW50U2hlbGwgVGhlIHBhcmVudCBzaGVsbCwgb3B0aW9uYWxseSBudWxsLgotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0LgotICAqIEBwYXJhbSBjb250YWluZXIgVGhlIGNvbnRhaW5lciBvZiB0aGUgbGF1bmNoaW5nIHdpemFyZC4KLSAgKiBAcmV0dXJuIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgamF2YSBjbGFzcy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ2xhc3NlcyAoIFNoZWxsIHBhcmVudFNoZWxsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQcm9qZWN0IHByb2plY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJ1bm5hYmxlQ29udGV4dCBjdHh0KSAKLSAgewotICAgIHJldHVybiBicm93c2VDbGFzc2VzKHBhcmVudFNoZWxsLCBuZXcgSVJlc291cmNlW10ge3Byb2plY3R9LCBjdHh0KTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ2xhc3NlcyhTaGVsbCBwYXJlbnRTaGVsbCwgSVJlc291cmNlW10gcmVzb3VyY2VzLCBJUnVubmFibGVDb250ZXh0IGN0eHQpCi0gIHsKLSAgICBJVHlwZSBpdHlwZSA9IGJyb3dzZUNsYXNzZXNBc0lUeXBlKHBhcmVudFNoZWxsLCByZXNvdXJjZXMsIGN0eHQpOwotICAgIGlmIChpdHlwZSAhPSBudWxsKQotICAgICAgcmV0dXJuIGl0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElUeXBlIGJyb3dzZUNsYXNzZXNBc0lUeXBlKFNoZWxsIHBhcmVudFNoZWxsLCBJUmVzb3VyY2VbXSByZXNvdXJjZXMsIElSdW5uYWJsZUNvbnRleHQgY3R4dCkKLSAgewotCVZlY3RvciBqYXZhRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCByZXNvdXJjZXMubGVuZ3RoOyBpKyspCi0JewotCSAgSUphdmFFbGVtZW50IGphdmFFbGVtZW50ID0gSmF2YUNvcmUuY3JlYXRlKHJlc291cmNlc1tpXSk7Ci0JICBpZiAoamF2YUVsZW1lbnQgIT0gbnVsbCkKLQkgICAgamF2YUVsZW1lbnRzLmFkZChqYXZhRWxlbWVudCk7Ci0JfQotCUlKYXZhRWxlbWVudFtdIGVsZW1lbnRzID0gKElKYXZhRWxlbWVudFtdKWphdmFFbGVtZW50cy50b0FycmF5KG5ldyBJSmF2YUVsZW1lbnRbMF0pOwotCQotICAgIElKYXZhU2VhcmNoU2NvcGUgc2NvcGUgPSBTZWFyY2hFbmdpbmUuY3JlYXRlSmF2YVNlYXJjaFNjb3BlKGVsZW1lbnRzKTsKLSAgICBzY29wZS5zZXRJbmNsdWRlc0NsYXNzcGF0aHModHJ1ZSk7Ci0gICAgc2NvcGUuc2V0SW5jbHVkZXNCaW5hcmllcyh0cnVlKTsKLQotICAgIC8vQ3JlYXRpbmcgYW5kIG9wZW5pbmcgYSBUeXBlU2VsZWN0aW9uRGlhbG9nCi0gICAgdHJ5Ci0JewotICAgICAgLy8gV2Ugd2FudCB0byBzaG93IGV2ZXJ5IGNsYXNzIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQsIHNvIHRocm93IGluIHRoaXMgU3RyaW5nCi0gICAgICBTdHJpbmcgZmlsdGVyU3RyaW5nVG9TZWxlY3RFdmVyeXRoaW5nID0gIiogIjsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gSmF2YVVJLmNyZWF0ZVR5cGVEaWFsb2cocGFyZW50U2hlbGwsIGN0eHQsIHNjb3BlLCBJSmF2YUVsZW1lbnRTZWFyY2hDb25zdGFudHMuQ09OU0lERVJfQ0xBU1NFUywgZmFsc2UsIGZpbHRlclN0cmluZ1RvU2VsZWN0RXZlcnl0aGluZyk7IAotICAgICAgZGlhbG9nLnNldFRpdGxlKFdTVUlQbHVnaW5NZXNzYWdlcy5ESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFKTsKLSAgICAgIGRpYWxvZy5zZXRNZXNzYWdlKFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9DTEFTU19CUk9XU0UpOyAgICAKLSAgICAgIGRpYWxvZy5vcGVuKCk7Ci0KLSAgICAgIC8vR2V0dGluZyB0aGUgcmVzdWx0IGFuZCByZXR1cm5pbmcgaXQKLSAgICAgIE9iamVjdFtdIHJlc3VsdHMgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0gICAgICBpZiAocmVzdWx0cyAhPSBudWxsICYmIHJlc3VsdHMubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdHNbMF0gaW5zdGFuY2VvZiBJVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiAoSVR5cGUpcmVzdWx0c1swXTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkKLQl7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyBpbnRlcmZhY2VzIG9uIGEgcHJvamVjdCdzIGNsYXNzIHBhdGguCi0gICogQHBhcmFtIHBhcmVudFNoZWxsIFRoZSBwYXJlbnQgc2hlbGwsIG9wdGlvbmFsbHkgbnVsbC4KLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdC4KLSAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBjb250YWluZXIgb2YgdGhlIGxhdW5jaGluZyB3aXphcmQuCi0gICogQHJldHVybiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlbGVjdGVkIGphdmEgaW50ZXJmYWNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VJbnRlcmZhY2VzKCBTaGVsbCBwYXJlbnRTaGVsbCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQcm9qZWN0IHByb2plY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lcikgCi0gIAkJCQkJCQkJCSAgICAKLSAgewotICAgIFN0cmluZyBpbnRlcmZhY2VOYW1lID0gbnVsbDsKLQotICAgIC8vTGltaXRpbmcgc2VhcmNoIHNjb3BlIHRvIHRoZSBwcm9qZWN0Ci0gICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gbmV3IElSZXNvdXJjZVsxXTsKLSAgICByZXNvdXJjZXNbMF09cHJvamVjdDsKLQlJSmF2YUVsZW1lbnRbXSBlbGVtZW50cyA9IG5ldyBJSmF2YUVsZW1lbnRbMV07Ci0JZWxlbWVudHNbMF0gPSBKYXZhQ29yZS5jcmVhdGUocmVzb3VyY2VzWzBdKTsKLSAgICBJSmF2YVNlYXJjaFNjb3BlIHNjb3BlID0gU2VhcmNoRW5naW5lLmNyZWF0ZUphdmFTZWFyY2hTY29wZShlbGVtZW50cyk7Ci0gICAgc2NvcGUuc2V0SW5jbHVkZXNDbGFzc3BhdGhzKHRydWUpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQmluYXJpZXModHJ1ZSk7Ci0KLSAgICAvL0NyZWF0aW5nIGFuZCBvcGVuaW5nIGEgVHlwZVNlbGVjdGlvbkRpYWxvZwotICAgIHRyeQotCXsKLSAgICAJU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IEphdmFVSS5jcmVhdGVUeXBlRGlhbG9nKHBhcmVudFNoZWxsLCBjb250YWluZXIsIHNjb3BlLCBJSmF2YUVsZW1lbnRTZWFyY2hDb25zdGFudHMuQ09OU0lERVJfVFlQRVMsIGZhbHNlKTsKLSAgICAJZGlhbG9nLnNldFRpdGxlKFdTVUlQbHVnaW5NZXNzYWdlcy5ESUFMT0dfVElUTEVfSU5URVJGQUNFX0JST1dTRSk7Ci0gICAgCWRpYWxvZy5zZXRNZXNzYWdlKFdTVUlQbHVnaW5NZXNzYWdlcy5ESUFMT0dfVElUTEVfSU5URVJGQUNFX0JST1dTRSk7ICAgIAotICAgIAlkaWFsb2cub3BlbigpOwotCi0gICAgCS8vR2V0dGluZyB0aGUgcmVzdWx0IGFuZCByZXR1cm5pbmcgaXQKLSAgICAJT2JqZWN0W10gcmVzdWx0cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLSAgICAJaWYgKHJlc3VsdHMgIT0gbnVsbCAmJiByZXN1bHRzLmxlbmd0aCA+IDApCi0gICAgCXsKLSAgICAJCWlmIChyZXN1bHRzWzBdIGluc3RhbmNlb2YgSVR5cGUpCi0gICAgCQl7Ci0gICAgCQkJSVR5cGUgcmVzdWx0SW50ZXJmYWNlID0gKElUeXBlKXJlc3VsdHNbMF07Ci0gICAgCQkJaW50ZXJmYWNlTmFtZSA9IHJlc3VsdEludGVyZmFjZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgICBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkKLQl7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnRlcmZhY2VOYW1lOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTNiZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci0KLQotLyoqCi0qIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBkaWFsb2cgZm9yIGJyb3dzaW5nIHdvcmtzcGFjZSByZXNvdXJjZXMuCi0qIFNlZSBhbHNvIHtAbGluayBEaWFsb2dVdGlscyNicm93c2VSZXNvdXJjZXN9LgotKi8KLXB1YmxpYyBjbGFzcyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIExpc3RlbmVyCi17Ci0KLSAgLy8gRGlhbG9nIGNvbnRyb2xzLgotICAvLwotICBwcml2YXRlIExhYmVsIGZpbHRlckxhYmVsXzsKLSAgcHJpdmF0ZSBDb21ibyBmaWx0ZXJDb21ib187Ci0gIC8qQ09OVEVYVF9JRCBEUkVTMDAwMSBmb3IgdGhlIFJlc291cmNlIFR5cGUgY29tYm8gYm94IG9mIHRoZSBSZXNvdXJjZSBTZWxlY3Rpb24gRGlhbG9nKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElORk9QT1BfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5EUkVTMDAwMSI7Ci0KLSAgcHJpdmF0ZSBUcmVlIHJlc291cmNlVHJlZV87Ci0gIHByaXZhdGUgVHJlZVZpZXdlciBmaWxlVmlld2VyXzsKLSAgLypDT05URVhUX0lEIERSRVMwMDAyIGZvciB0aGUgUmVzb3VyY2UgdHJlZSBvZiB0aGUgUmVzb3VyY2UgU2VsZWN0aW9uIERpYWxvZyovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RSRVNfVFJFRV9SRVNPVVJDRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuRFJFUzAwMDIiOwotCi0gIC8vCi0gIC8vIEVzc2VudGlhbCBnb29kaWVzLgotICAvLwotICBwcml2YXRlIElSZXNvdXJjZSByb290XzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2UgaW5pdGlhbFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgRmlsdGVyW10gZmlsdGVyc187Ci0gIHByaXZhdGUgRmlsdGVyIGN1cnJlbnRGaWx0ZXJfOwotICBwcml2YXRlIElSZXNvdXJjZVtdIHNlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2c8L2NvZGU+Ci0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnBhcmVudCBTaGVsbDwvY29kZT4uCi0gICogVGhlIGRpYWxvZyByZW5kZXJzIGFsbCByZXNvdXJjZXMgaW5jbHVkaW5nIGFuZAotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5yb290IElSZXNvdXJjZTwvY29kZT4uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0sCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyAoIFNoZWxsIHBhcmVudCwgSVJlc291cmNlIHJvb3QsIElSZXNvdXJjZSBpbml0aWFsU2VsZWN0aW9uICkKLSAgewotICAgIHRoaXMocGFyZW50LHJvb3QsaW5pdGlhbFNlbGVjdGlvbixuZXcgRmlsdGVyW10ge25ldyBBbnlGaWx0ZXIoKX0pOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZzwvY29kZT4KLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cGFyZW50IFNoZWxsPC9jb2RlPi4KLSAgKiBUaGUgZGlhbG9nIHJlbmRlcnMgYWxsIHJlc291cmNlcyBpbmNsdWRpbmcgYW5kCi0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnJvb3QgSVJlc291cmNlPC9jb2RlPiB0aGF0Ci0gICogYXJlIGFjY2VwdGVkIGJ5IHRoZSBnaXZlbiBmaWx0ZXIuCi0gICogU2VlIHtAbGluayBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkZpbHRlciNhY2NlcHRzfS4KLSAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQge0BsaW5rIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsfSwKLSAgKiBvciBudWxsIHRvIGNyZWF0ZSBhIHRvcC1sZXZlbCBzaGVsbC4KLSAgKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlfSwKLSAgKiBvciBudWxsIHRvIGJlZ2luIHdpdGggdGhlIHdvcmtzcGFjZSByb290LgotICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIFRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgb2JqZWN0IG9yIG51bGwgaWYgbm9uZS4KLSAgKiBAcGFyYW0gZmlsdGVyIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXJ9LAotICAqIG9yIG51bGwgdG8gZGVmYXVsdCB0byBhbGwgcmVzb3VyY2VzIHVuZGVyIHRoZSA8Y29kZT5yb290PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nICggU2hlbGwgcGFyZW50LCBJUmVzb3VyY2Ugcm9vdCwgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb24sIEZpbHRlciBmaWx0ZXIgKQotICB7Ci0gICAgdGhpcyhwYXJlbnQscm9vdCxpbml0aWFsU2VsZWN0aW9uLG5ldyBGaWx0ZXJbXSB7ZmlsdGVyfSk7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlJlc291cmNlU2VsZWN0aW9uRGlhbG9nPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+IHRoYXQKLSAgKiBhcmUgYWNjZXB0ZWQgYnkgdGhlIGdpdmVuIGZpbHRlcnMuCi0gICogU2VlIHtAbGluayBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkZpbHRlciNhY2NlcHRzfS4KLSAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQge0BsaW5rIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsfS4KLSAgKiBvciBudWxsIHRvIGNyZWF0ZSBhIHRvcC1sZXZlbCBzaGVsbC4KLSAgKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlfSwKLSAgKiBvciBudWxsIHRvIGJlZ2luIHdpdGggdGhlIHdvcmtzcGFjZSByb290LgotICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIFRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgb2JqZWN0IG9yIG51bGwgaWYgbm9uZS4KLSAgKiBAcGFyYW0gZmlsdGVycyBBbiBhcnJheSBvZiB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXJ9Ci0gICogb2JqZWN0cy4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgbnVsbCBvciBvZiBsZW5ndGggemVybywgdGhlbiBhbGwgcmVzb3VyY2VzIGFyZSBhY2NlcHRlZAotICAqIChpZS4gZXF1aXZhbGVudCB0byA8Y29kZT5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyhwYXJlbnQscm9vdCk8L2NvZGU+LgotICAqIElmIHRoZSBhcnJheSBpcyBvZiBsZW5ndGggb25lLCB0aGVuIHRoZSBkaWFsb2cgd2lsbCBjb25zaXN0IG9mIGEgc2luZ2xlCi0gICogY29udHJvbCBzaG93aW5nIGEgbGlzdCBvZiBhbGwgZmlsdGVyZWQgcmVzb3VyY2VzLgotICAqIElmIHRoZSBhcnJheSBpcyBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG9uZSwgdGhlbiB0aGUgZGlhbG9nIHdpbGwKLSAgKiBjb25zaXN0IG9mIGEgY29tYm8gYm94IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIHRoZSBmaWx0ZXJzIGFuZCB3aXRoIHRoZQotICAqIGZpcnN0IGZpbHRlciAoaWUuIDxjb2RlPmZpbHRlcnNbMF08L2NvZGU+KSBzZWxlY3RlZCBieSBkZWZhdWx0LCBmb2xsb3dlZAotICAqIGJ5IGEgY29udHJvbCBzaG93aW5nIGEgbGlzdCBvZiBhbGwgcmVzb3VyY2VzIGZpbHRlcmVkIGJ5IHRoZSBzZWxlY3RlZCBmaWx0ZXIuIAotICAqLwotICBwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgKCBTaGVsbCBwYXJlbnQsIElSZXNvdXJjZSByb290LCBJUmVzb3VyY2UgaW5pdGlhbFNlbGVjdGlvbiwgRmlsdGVyW10gZmlsdGVycyApCi0gIHsKLSAgICBzdXBlcihwYXJlbnQpOwotICAgIHJvb3RfID0gcm9vdCA9PSBudWxsID8gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkgOiByb290OwotICAgIGluaXRpYWxTZWxlY3Rpb25fID0gaW5pdGlhbFNlbGVjdGlvbjsKLSAgICBmaWx0ZXJzXyA9IChmaWx0ZXJzID09IG51bGwgfHwgZmlsdGVycy5sZW5ndGggPT0gMCkgPyBuZXcgRmlsdGVyW10ge25ldyBBbnlGaWx0ZXIoKX0gOiBmaWx0ZXJzOwotICAgIGN1cnJlbnRGaWx0ZXJfID0gZmlsdGVyc19bMF07Ci0gICAgbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXyA9IGZhbHNlOwotICAgIHNldFNoZWxsU3R5bGUoU1dULkRJQUxPR19UUklNIHwgU1dULlJFU0laRSB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7Ci0gIH0KLQotICAvKioKLSAgKiBFbmFibGVzIG9yIGRpc2FibGVzIG11bHRpcGxlIHNlbGVjdGlvbiBpbiB0aGUgdHJlZSB2aWV3LgotICAqIE11bHRpcGxlIHNlbGVjdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAqIEBwYXJhbSBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQgVHJ1ZSB0byBlbmFibGVkIG9yIGZhbHNlIHRvIGRpc2FibGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCAoIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkICkKLSAgewotICAgIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF8gPSBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQ7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb25zIG1hZGUgaW4gdGhlIGRpYWxvZyBpZiBPSyB3YXMgcHJlc3NlZCwKLSAgKiBvciBudWxsIGlmIENhbmNlbCB3YXMgcHJlc3NlZC4gUmV0dXJucyBudWxsIGlmIHRoZSBkaWFsb2cKLSAgKiBoYXMgbmV2ZXIgYmVlbiBvcGVuZWQuCi0gICogQHJldHVybiBBbiBhcnJheSBvZiBzZWxlY3RlZCByZXNvdXJjZXMsIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotICAqLwotICBwdWJsaWMgSVJlc291cmNlW10gZ2V0UmVzdWx0ICgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIHRoZSBDYW5jZWwgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogSW5zdXJlcyB0aGF0IHtAbGluayAjZ2V0UmVzdWx0fSB3aWxsIHJldHVybiBudWxsLgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjYW5jZWxQcmVzc2VkICgpCi0gIHsKLSAgICBzZWxlY3Rpb25fID0gbnVsbDsKLSAgICBzZXRSZXR1cm5Db2RlKERpYWxvZy5DQU5DRUwpOwotICAgIHN1cGVyLmNhbmNlbFByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIHRoZSBPSyBidXR0b24gaXMgcHJlc3NlZC4KLSAgKiBTcXVpcnJlbHMgYXdheSB0aGUgbGlzdCBvZiB6ZXJvIG9yIG1vcmUgc2VsZWN0ZWQKLSAgKiA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+cyB0byBiZSByZXR1cm5lZCBieSB7QGxpbmsgI2dldFJlc3VsdH0uCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCAoKQotICB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmaWxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBzZWxlY3Rpb25fID0gbmV3IElSZXNvdXJjZVtzdHJ1Y3R1cmVkU2VsZWN0aW9uLnNpemUoKV07Ci0gICAgICBpbnQgaT0wOwotICAgICAgSXRlcmF0b3IgaXRlciA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0ZXIubmV4dCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgc2VsZWN0aW9uX1tpKytdID0gKElSZXNvdXJjZSlvYmplY3Q7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuT0spOwotICAgIHN1cGVyLm9rUHJlc3NlZCgpOwotICB9Ci0KLSAgLyoqCi0gICogU2VlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93I2NvbmZpZ3VyZVNoZWxsfS4KLSAgKiBAcGFyYW0gc2hlbGwgVGhlIHNoZWxsLgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbCAoIFNoZWxsIHNoZWxsICkKLSAgewotICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKHNoZWxsKTsKLSAgICBzaGVsbC5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5ESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFKTsKLSAgfQotCi0gIC8qKiAKLSAgKiBDcmVhdGVzIHRoZSBkaWFsb2cgYXJlYS4KLSAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29tcG9zaXRlLgotICAqIEByZXR1cm4gVGhlIGNvbnRyb2wgYXJlYS4KLSAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYSAoIENvbXBvc2l0ZSBwYXJlbnQgKQotICB7Ci0gICAgR3JpZExheW91dCBnbDsKLSAgICBHcmlkRGF0YSBnZDsKLQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCk7Ci0gICAgZ2Qud2lkdGhIaW50ID0gNDAwOwotICAgIGdkLmhlaWdodEhpbnQgPSAzMDA7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIGlmIChmaWx0ZXJzXy5sZW5ndGggPiAxKQotICAgIHsKLSAgICAgIENvbXBvc2l0ZSBmID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsU1dULk5PTkUpOwotICAgICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgICAgZi5zZXRMYXlvdXQoZ2wpOwotICAgICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICAgIGYuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICAgIGZpbHRlckxhYmVsXyA9IG5ldyBMYWJlbChmLFNXVC5XUkFQKTsKLSAgICAgIGZpbHRlckxhYmVsXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9SRVNPVVJDRV9GSUxURVIpOwotICAgICAgZmlsdGVyTGFiZWxfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRSk7Ci0KLSAgICAgIGZpbHRlckNvbWJvXyA9IG5ldyBDb21ibyhmLFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgICBmaWx0ZXJDb21ib18uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgICBmaWx0ZXJDb21ib18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbix0aGlzKTsKLSAgICAgIGZpbHRlckNvbWJvXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEUpOwotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChmaWx0ZXJDb21ib18sSU5GT1BPUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEUpOwotICAgIH0KLQotICAgIGlmIChtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfKQotICAgIHsKLSAgICAgIHJlc291cmNlVHJlZV8gPSBuZXcgVHJlZShjb21wb3NpdGUsU1dULk1VTFRJIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLSAgICB9Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICByZXNvdXJjZVRyZWVfLnNldExheW91dERhdGEoZ2QpOwotLy8gIHJlc291cmNlVHJlZV8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbix0aGlzKTsKLSAgICByZXNvdXJjZVRyZWVfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX0RSRVNfVFJFRV9SRVNPVVJDRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChyZXNvdXJjZVRyZWVfLElORk9QT1BfRFJFU19UUkVFX1JFU09VUkNFKTsKLQotICAgIGZpbGVWaWV3ZXJfID0gbmV3IFRyZWVWaWV3ZXIocmVzb3VyY2VUcmVlXyk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcigKLSAgICAgICAgICAgICAgICBuZXcgRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXIoCi0JCQkJICAgICAgICBuZXcgV29ya2JlbmNoTGFiZWxQcm92aWRlcigpLCAKLQkJCQkgICAgICAgIFdlYlNlcnZpY2VVSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldERlY29yYXRvck1hbmFnZXIoKS5nZXRMYWJlbERlY29yYXRvcigpKSk7Ci0gICAgZmlsZVZpZXdlcl8uYWRkRmlsdGVyKAotICAgICAgbmV3IFZpZXdlckZpbHRlciAoKQotICAgICAgewotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzZWxlY3QgKCBWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50T2JqZWN0LCBPYmplY3Qgb2JqZWN0ICkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybgotICAgICAgICAgICgKLSAgICAgICAgICAgICgob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKSAmJiAoKElSZXNvdXJjZSlvYmplY3QpLmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkKLSAgICAgICAgICAgIHx8IChSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZy50aGlzLmN1cnJlbnRGaWx0ZXJfLmFjY2VwdHMob2JqZWN0KSkKLSAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBmaWxlVmlld2VyXy5zZXRJbnB1dChyb290Xyk7Ci0gICAgZmlsZVZpZXdlcl8uYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAotICAgICAgbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCAoIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCApCi0gICAgICAgIHsKLS8vICAgICAgICBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZy50aGlzLnZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIGlmIChpbml0aWFsU2VsZWN0aW9uXyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZpbGVWaWV3ZXJfLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZy50aGlzLmluaXRpYWxTZWxlY3Rpb25fKSx0cnVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYW4gZXZlbnQgb2NjdXJzIG9uIHRoZSBwYWdlLgotICAqIEhhbmRsZXMgdGhlIGV2ZW50IGFuZCByZXZhbGlkYXRlcyB0aGUgcGFnZS4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgb2NjdXJlZC4KLSAgKi8KLSAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQgKCBFdmVudCBldmVudCApCi0gIHsKLS8vICB2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dlYlNlcnZpY2VVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTUxYTU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dlYlNlcnZpY2VVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotCi0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy51aSI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlVUlQbHVnaW4gaW5zdGFuY2VfOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlVUlQbHVnaW4oKSB7Ci0Jc3VwZXIoKTsKLQlpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZVVJUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLnVpIik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZVVJUGx1Z2luIHNpbmdsZXRvbi4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBXZWJTZXJ2aWNlVUlQbHVnaW4gZ2V0SW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCQkKLSAgLyoqCi0gICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLSAgKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotICAqLwotCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgbmFtZSkgewotCQl0cnkgewotCQkJVVJMIGluc3RhbGxVUkwgPSBpbnN0YW5jZV8uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsKLQkJCVVSTCBpbWFnZVVSTCA9IG5ldyBVUkwoaW5zdGFsbFVSTCwgbmFtZSk7Ci0JCQlyZXR1cm4gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wb3B1cC9Qb3B1cFRlc3RTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDg3YjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wb3B1cC9Qb3B1cFRlc3RTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MDMgICAxNTI3OTAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uIChjcmVhdGVkIGNsYXNzKQotICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMTIzICAgMjE2MzcyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA5MDEyNwkgIDI1NzYxOCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDkwMzEwICAgMjQyNDQwIHllbmx1QGNhLmlibS5jb20gLSBZZW4gTHUsIFBsdWdnYWJsZSBJRmlsZSB0byBVUkkgQ29udmVydGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBvcHVwOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XU0RMVVJMU3RyaW5nV3JhcHBlcjsKLQotCi1wdWJsaWMgY2xhc3MgUG9wdXBUZXN0U2VydmljZSBleHRlbmRzIFBvcHVwVGVzdFdTREwKLXsKLSAgcHVibGljIFBvcHVwVGVzdFNlcnZpY2UoKQotICB7Ci0JICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotCVN0cmluZyBzdGF0ZUxvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKCk7Ci0gIAlXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGNvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKGZhbHNlKTsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwpCi0gICAgeyAgICAgIAotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5oYXNBZGFwdGVyKG9iamVjdCwgV1NETFVSTFN0cmluZ1dyYXBwZXIuY2xhc3MuZ2V0TmFtZSgpKSkgewotICAgICAgICAJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmxvYWRBZGFwdGVyKG9iamVjdCwgV1NETFVSTFN0cmluZ1dyYXBwZXIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgCVdTRExVUkxTdHJpbmdXcmFwcGVyIHdyYXBwZXIgPSAoV1NETFVSTFN0cmluZ1dyYXBwZXIpYWRhcHRlZE9iamVjdDsKLSAgICAgICAgCXdzZGxVUkwgPXdyYXBwZXIuZ2V0V1NETFVSTFN0cmluZygpOyAgCQkKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlUmVmKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVJlZiBzZXJ2aWNlUmVmID0gKFNlcnZpY2VSZWYpb2JqZWN0OwotICAgICAgICAgIHdzZGxVUkwgPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSShzZXJ2aWNlUmVmKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgCXdzZGxVUkwgPSAoU3RyaW5nKSBvYmplY3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIAkvLyBPYmplY3QgaXMgbm90IGFueSB0eXBlcyB3ZSByZWNvZ25pemVkLCB3c2RsVVJMIGlzIHN0aWxsIG51bGwuCi0gICAgICAgICAgCS8vIFRyeSBsb29raW5nIHVwIGFuIGFkYXB0ZXIgZm9yIHRoZSBvYmplY3QuCi0gICAgICAgIAkvLyBJZiBmb3VuZCwgdXBkYXRlIHdzZGxVUkwgY29udGFpbnMgdGhlIGFkYXB0ZWQgV1NETCBzdHJpbmcuICAKLSAgICAgICAgCS8vIElmIG5vdCBmb3VuZCwgd3NkbFVSTCB3b3VsZCBzdGlsbCBiZSBudWxsLgotICAgICAgICAJd3NkbFVSTCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhZGRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMsIHdzZGxVUkwsIHN0YXRlTG9jYXRpb24sIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbW1hbmQuc2V0TGF1bmNoT3B0aW9ucygoTGF1bmNoT3B0aW9uW10pbGF1bmNoT3B0aW9ucy50b0FycmF5KG5ldyBMYXVuY2hPcHRpb25bMF0pKTsKLSAgICBjb21tYW5kLmV4ZWN1dGUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9SZXNvdXJjZU1hbmFnbWVudFByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Jlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiM2ZlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Jlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDAzICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NZXJnZURlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotCi0KLQotcHVibGljIGNsYXNzIFJlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotICAvKkNPTlRFWFRfSUQgUFBSTTAwMDEgZm9yIHRoZSBSZXNvdXJjZSBNYW5hZ21lbnQgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUFJNX1BBR0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gb3ZlcldyaXRlRmlsZXM7Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwMiBmb3IgdGhlIGZpbGUgb3ZlcndyaXRlIGNoZWNrIGJveCBvbiB0aGUgUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5QUFJNMDAwMiI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUZvbGRlcnM7Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwMyBmb3IgdGhlIGNyZWF0ZSBmb2xkZXJzIGNoZWNrIGJveCBvbiB0aGUgUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlMgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDAzIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gY2hlY2tvdXRGaWxlczsKLSAgLypDT05URVhUX0lEIFBQUk0wMDA0IGZvciB0aGUgY2hlY2tvdXQgZmlsZXMgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDA0IjsKLSAgCi0gIHByaXZhdGUgQnV0dG9uIHNrZWxldG9uTWVyZ2U7Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwNSBmb3IgdGhlIHNrZWxldG9uIG1lcmdlIGNoZWNrIGJveCBvbiB0aGUgUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDA1IjsKLQotIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gIAlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gIAkKLSAgICBDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9QQUdFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BQUk1fUEFHRSk7Ci0KLSAgICBvdmVyV3JpdGVGaWxlcyA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9PVkVSV1JJVEVfRklMRVMpOwotICAgIG92ZXJXcml0ZUZpbGVzLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAob3ZlcldyaXRlRmlsZXMsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMpOwotCi0gICAgY3JlYXRlRm9sZGVycyAgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fQ1JFQVRFX0ZPTERFUlMpOwotICAgIGNyZWF0ZUZvbGRlcnMuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGNyZWF0ZUZvbGRlcnMsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyk7Ci0KLSAgICBjaGVja291dEZpbGVzID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX0NIRUNLT1VUX0ZJTEVTKTsgICAgCi0gICAgY2hlY2tvdXRGaWxlcy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGNoZWNrb3V0RmlsZXMsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQpOwotICAgIAotICAgIHNrZWxldG9uTWVyZ2UgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fU0tFTEVUT05fTUVSR0UpOyAgICAKLSAgICBza2VsZXRvbk1lcmdlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChza2VsZXRvbk1lcmdlLCBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0UpOwotCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotCi0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotIAotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQoIHRleHQgKTsKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHN0b3JlVmFsdWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcwotICAgKiBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgb3ZlcldyaXRlRmlsZXMuc2V0U2VsZWN0aW9uKCBSZXNvdXJjZURlZmF1bHRzLmdldE92ZXJ3cml0ZUZpbGVzRGVmYXVsdCgpKTsKLSAgICBjcmVhdGVGb2xkZXJzLnNldFNlbGVjdGlvbiggUmVzb3VyY2VEZWZhdWx0cy5nZXRDcmVhdGVGb2xkZXJzRGVmYXVsdCgpKTsKLSAgICBjaGVja291dEZpbGVzLnNldFNlbGVjdGlvbiggUmVzb3VyY2VEZWZhdWx0cy5nZXRDaGVja291dEZpbGVzRGVmYXVsdCgpKTsKLSAgICBza2VsZXRvbk1lcmdlLnNldFNlbGVjdGlvbiggTWVyZ2VEZWZhdWx0cy5nZXRTa2VsZXRvbk1lcmdlRGVmYXVsdCgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgICAvLyBnZXQgdGhlIHBlcnNpc3RlbnQgY29udGV4dCBmcm9tIHRoZSBwbHVnaW4KLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0gICAgb3ZlcldyaXRlRmlsZXMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotICAgIGNyZWF0ZUZvbGRlcnMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSk7Ci0gICAgY2hlY2tvdXRGaWxlcy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKTsKLSAgICBza2VsZXRvbk1lcmdlLnNldFNlbGVjdGlvbiggbWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSk7IAotICAgfQotCi0gIC8qKgotICAgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0gIHsKLSAgICAvLyBnZXQgdGhlIHBlcnNpc3RlbnQgY29udGV4dCBmcm9tIHRoZSBwbHVnaW4KLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0gICAgY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoIG92ZXJXcml0ZUZpbGVzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCggY3JlYXRlRm9sZGVycy5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoIGNoZWNrb3V0RmlsZXMuZ2V0U2VsZWN0aW9uKCkgKTsgIAotICAgIG1lcmdlQ29udGV4dC5zZXRTa2VsZXRvbk1lcmdlRW5hYmxlZCggc2tlbGV0b25NZXJnZS5nZXRTZWxlY3Rpb24oKSApOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvVGVzdEZhY2lsaXR5RGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9UZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNmJjNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9UZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTEzMTY5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwMjIyICAgMTE4NzExIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqIDIwMDgwNDE2ICAgMjI3MzU5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBUZXN0IGZhY2lsaXRpZXMgZG8gbm90IHJlc3BlY3QgZGVmYXVsdCBvcmRlciBpbiBwbHVnaW4gY3VzdG9taXphdGlvbgotICogMjAwODA4MDUgICAyNDI3NzUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBUZXN0IGZhY2lsaXR5IElEIHNob3dpbmcgdXAgZXZlbiBpZiBubyB0ZXN0IGZhY2lsaXR5IGV4dGVuc2lvbiBleGlzdHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvRGVmYXVsdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgCi0gIHByaXZhdGUgVGFibGVWaWV3ZXIgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXzsgCi0gIHByaXZhdGUgQnV0dG9uIG1vdmVVcF87Ci0gIHByaXZhdGUgQnV0dG9uIG1vdmVEb3duXzsKLSAgcHJpdmF0ZSBWZWN0b3Igd2ViU2VydmljZVRlc3RUeXBlc187Ci0gIAotICAvKkNPTlRFWFRfSUQgUFBTRDAwMDEgZm9yIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQU0RfUEFHRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBTRDAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBsYXVuY2hTYW1wbGU7Ci0gIC8qQ09OVEVYVF9JRCBQUFNEMDAwMiBmb3IgdGhlIGxhdW5jaCBzYW1wbGUgY2hlY2sgYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBTRDAwMDIiOwotICAvLwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAgCi0gIAlDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBTRF9QQUdFKTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LElORk9QT1BfUFBTRF9QQUdFKTsgICAgCi0KLSAgICBsYXVuY2hTYW1wbGUgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fTEFVTkNIX1NBTVBMRSk7Ci0gICAgbGF1bmNoU2FtcGxlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChsYXVuY2hTYW1wbGUsIElORk9QT1BfUFBTRF9DSEVDS0JPWF9MQVVOQ0hfU0FNUExFKTsKLQotICAgIAotICAgIFRleHQgdGVzdFNlcnZpY2VUeXBlTGFiZWwgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCk7Ci0gICAgdGVzdFNlcnZpY2VUeXBlTGFiZWwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfU0FNUExFX1RZUEVTKTsKLSAgICB0ZXN0U2VydmljZVR5cGVMYWJlbC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApICk7Ci0KLSAgICBDb21wb3NpdGUgd2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMjsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotCi0gICAgVGFibGUgdGFibGU9IG5ldyBUYWJsZSh3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgdGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgdGFibGUuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfID0gbmV3IFZlY3RvcigpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGUpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBXZWJTZXJ2aWNlVGVzdFR5cGVDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBXZWJTZXJ2aWNlVGVzdFR5cGVMYWJlbFByb3ZpZGVyKCkpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uc2V0SW5wdXQod2ViU2VydmljZVRlc3RUeXBlc18pOwotCi0gICAgVGFibGVMYXlvdXQgdGFibGVMYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLSAgICBUYWJsZUNvbHVtbiB0YWJsZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOwotICAgIHRhYmxlQ29sdW1uLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9UWVBFX05BTUUpOwotICAgIENvbHVtbldlaWdodERhdGEgY29sdW1uRGF0YSA9IG5ldyBDb2x1bW5XZWlnaHREYXRhKDI1NiwgMjU2LCBmYWxzZSk7Ci0gICAgdGFibGVMYXlvdXQuYWRkQ29sdW1uRGF0YShjb2x1bW5EYXRhKTsKLSAgICB0YWJsZS5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotCi0gICAgQ29tcG9zaXRlIGMgPSBuZXcgQ29tcG9zaXRlKHdlYlNlcnZpY2VUZXN0VHlwZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAxMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgYy5zZXRMYXlvdXQoZ2wpOwotICAgIGMuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLSAgICBtb3ZlVXBfID0gbmV3IEJ1dHRvbihjLCBTV1QuUFVTSCk7Ci0gICAgbW92ZVVwXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9NT1ZFX1VQKTsKLSAgICBtb3ZlVXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIG1vdmVVcF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZVVwXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9NT1ZFX1VQKTsKLQotICAgIG1vdmVEb3duXyA9IG5ldyBCdXR0b24oYywgU1dULlBVU0gpOwotICAgIG1vdmVEb3duXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9NT1ZFX0RPV04pOwotICAgIG1vdmVEb3duXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlRG93bl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZURvd25fLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfRE9XTik7Ci0KLSAgICB0YWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihtb3ZlVXBfLCBtb3ZlRG93bl8sIHRhYmxlKSk7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotCi0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCApCi0gIHsKLSAgICBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbiggcGFyZW50LCBTV1QuQ0hFQ0sgKTsKLSAgICBidXR0b24uc2V0VGV4dCggdGV4dCApOwotICAgIHJldHVybiBidXR0b247Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgdHJ5ewotICAgICAgc3RvcmVWYWx1ZXMoKTsKLSAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBleGMpewotICAgIAlleGMucHJpbnRTdGFja1RyYWNlKCk7fQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHRyeXsKLSAgCXBlcmZvcm1PaygpOwotICAgIH1jYXRjaChOdWxsUG9pbnRlckV4Y2VwdGlvbiBleGMpewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHRvIHRoZWlyIGJ1cm5lZC1pbiBkZWZhdWx0cy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gKFBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQpIAotICAgIAlXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0gICAgCi0gICAgd2ViU2VydmljZVRlc3RUeXBlc18uY2xlYXIoKTsKLSAgICBTdHJpbmdbXSB0eXBlcyA9IGNvbnRleHQuZ2V0RGVmYXVsdFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgLy9taDogY2hlY2sgdGhhdCB0aGUgdGVzdCBmYWNpbGl0eSBleHRlbnNpb24gZXhpc3RzIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGxpc3QgKGJ1ZyAyNDI3NzUpCi0gICAgICBpZiAoIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQodHlwZXNbaV0pICE9IG51bGwpIAotICAgICAgewotICAgIAkgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmFkZCh0eXBlc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZSBoZWxwZXIuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgCVNjZW5hcmlvQ29udGV4dCAgY29udGV4dCAgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0gICAgU2NlbmFyaW9EZWZhdWx0cyBkZWZhdWx0cyA9IG5ldyBTY2VuYXJpb0RlZmF1bHRzKCk7Ci0gICAgCi0gICAgbGF1bmNoU2FtcGxlLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0xhdW5jaFNhbXBsZUVuYWJsZWQoKSk7Ci0gICAgICAgIAotICAgIFN0cmluZ1tdIHR5cGVzID0gY29udGV4dC5nZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIC8vbWg6IGNoZWNrIHRoYXQgdGhlIHRlc3QgZmFjaWxpdHkgZXh0ZW5zaW9uIGV4aXN0cyBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBsaXN0IChidWcgMjQyNzc1KQotICAgICAgaWYgKCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKHR5cGVzW2ldKSAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAJICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5hZGQodHlwZXNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICAvLyBjaGVjayB3aGV0aGVyIHdlIG1pc3NlZCBhbnkgdHlwZXMgZnJvbSB0aGUgZGVmYXVsdCBsaXN0Ci0gICAgYm9vbGVhbiBtaXNzZWQgPSBmYWxzZTsKLSAgICB0eXBlcyA9IGRlZmF1bHRzLmdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAod2ViU2VydmljZVRlc3RUeXBlc18uaW5kZXhPZih0eXBlc1tpXSkgPT0gLTEpCi0gICAgICB7ICAgCQotICAgIAkgIC8vbWg6IGNoZWNrIHRoYXQgdGhlIHRlc3QgZmFjaWxpdHkgZXh0ZW5zaW9uIGV4aXN0cyBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBsaXN0IChidWcgMjQyNzc1KQotICAgICAgICAgIGlmICggV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlJZCh0eXBlc1tpXSkgIT0gbnVsbCkgCi0gICAgICAgICAgewotICAgIAkJd2ViU2VydmljZVRlc3RUeXBlc18uYWRkKHR5cGVzW2ldKTsKLSAgICAJCW1pc3NlZCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAobWlzc2VkKQotICAgIHsKLSAgICAgIHR5cGVzID0gbmV3IFN0cmluZ1t3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5zaXplKCldOwotICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uY29weUludG8odHlwZXMpOwotICAgICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdElkcyh0eXBlcyk7Ci0gICAgfQotICAgIC8vIHJlZnJlc2ggdmlld2VyCi0gICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgCi0gICAgLy8gU2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSB0YWJsZQotICAgIFRhYmxlIHRhYmxlID0gd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5nZXRUYWJsZSgpOwotCWlmICh0YWJsZS5nZXRJdGVtQ291bnQoKSA+IDApewotICAgIAl0YWJsZS5zZXRTZWxlY3Rpb24oMCk7Ci0gICAgCXRhYmxlLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0gICAgfQotICAgfQotCi0gIC8qKgotICAgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBoZWxwZXIuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKQotICB7Ci0gICAgU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0gICAgU3RyaW5nW10gdHlwZXMgPSBuZXcgU3RyaW5nW3dlYlNlcnZpY2VUZXN0VHlwZXNfLnNpemUoKV07Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlc18uY29weUludG8odHlwZXMpOwotICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RJZHModHlwZXMpOwotICAgIAotICAgIGNvbnRleHQuc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChsYXVuY2hTYW1wbGUuZ2V0U2VsZWN0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gJiYgaW5kZXggPiAwKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gd2ViU2VydmljZVRlc3RUeXBlc18ucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXgtMSk7Ci0gICAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZS53aWRnZXQgPT0gbW92ZURvd25fICYmIGluZGV4IDwgd2ViU2VydmljZVRlc3RUeXBlc18uc2l6ZSgpLTEpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCsxKTsKLSAgICAgICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICB9Ci0gICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLmdldFRhYmxlKCkubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFdlYlNlcnZpY2VUZXN0VHlwZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgdmFsdWUpIAotICAgIHsKLSAgICAgIHJldHVybiAoKFZlY3Rvcil2YWx1ZSkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChWaWV3ZXIsIE9iamVjdCwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgYXJnMCwgT2JqZWN0IGFyZzEsIE9iamVjdCBhcmcyKSAKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBXZWJTZXJ2aWNlVGVzdFR5cGVMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIFdlYlNlcnZpY2VUZXN0VHlwZUxhYmVsUHJvdmlkZXIoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShPYmplY3QpCi0gICAgKi8KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGFyZzApIAotICAgIHsgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCB2YWx1ZSkgCi0gICAgewotICAgICAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gZXh0ZW5zaW9uID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkKLSAgICAgIAkJLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlJZCh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkKLSAgICAJICByZXR1cm4gZXh0ZW5zaW9uLmdldExhYmVsKCk7Ci0gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBjbGFzcyBUYWJsZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotICAgIEJ1dHRvbiB1cDsKLSAgICBCdXR0b24gZG93bjsKLSAgICBUYWJsZSAgdGFibGU7Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChhcmcwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKQotICAgIHsKLSAgICAgIGludCBpID0gdGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChpID09IHRhYmxlLmdldEl0ZW1Db3VudCgpIC0gMSkgZG93bi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIGVsc2UgaWYgKGkgPiAtMSkgZG93bi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgaWYgKGkgPT0gMCkgdXAuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICBlbHNlIGlmIChpID4gLTEpIHVwLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFRhYmxlU2VsZWN0aW9uTGlzdGVuZXIoQnV0dG9uIHVwLCBCdXR0b24gZG93biwgVGFibGUgdGFibGUpCi0gICAgewotICAgICAgdGhpcy51cCA9IHVwOwotICAgICAgdGhpcy5kb3duID0gZG93bjsKLSAgICAgIHRoaXMudGFibGUgPSB0YWJsZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvdWRkaS9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS91ZGRpL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NmQwMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS91ZGRpL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLQotcHVibGljIGludGVyZmFjZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZQotewotICAgIHB1YmxpYyBib29sZWFuIGlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpOwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5SW5xdWlyeUFQSSgpOwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5UHVibGlzaEFQSSgpOwotICAgIHB1YmxpYyBDb21tYW5kV2lkZ2V0QmluZGluZyBnZXRCaW5kaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTAxYjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3MuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDE0NTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE2NTE1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jV2VkIE9jdCAwMSAwNzoyMDowMiBFRFQgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmNjOGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTo0MiBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MmNjMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cwotQnVuZGxlLVZlcnNpb246IDEuMC41MDcucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGE7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGlhbG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwud3NydAotSW1wb3J0LVBhY2thZ2U6IGNvbS5pYm0uaWN1LnV0aWw7IHZlcnNpb249IjMuOCIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjQuMTAwLDIuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDU5MzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zcmMuaW5jbHVkZXMgPSBjb21wb25lbnQueG1sCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UuLiA9IHNyYy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2NvbXBvbmVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTBiZjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudCB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS5qc3Qud3MiPgotICAgPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+Ci0gICA8L2NvbXBvbmVudC1kZXBlbmRzPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5IiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNWE4YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWFhNzVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1NU0dfRVJST1JfU0VSVkVSPUlXQUIwMjEzRSBFcnJvciBpbiBzdGFydGluZyBzZXJ2ZXIuCi0KLUFOWV9GSUxURVJfTkFNRT1BbGwgZmlsZXMKLUFOWV9GSUxURVJfREVTQz1UaGlzIGlzIGEga2luZCBvZiBGaWx0ZXIgdGhhdCBhY2NlcHRzIGFsbCBvYmplY3RzLgotCi1FUlJPUl9TRUxFQ1RJT05fVFJBTlNGT1JNPVNwZWNpZmllZCBzZWxlY3Rpb24gZG9lcyBub3QgbWF0Y2ggYSByZXNvdXJjZS4KLQotTVNHX0pBWFJQQzExX05PVF9DT01QTElBTlQ9VGhlIHNlcnZpY2UgY2xhc3MgInswfSIgZG9lcyBub3QgY29tcGx5IHRvIG9uZSBvciBtb3JlIHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiwgYW5kIG1heSBub3QgZGVwbG95IG9yIGZ1bmN0aW9uIGNvcnJlY3RseS4KLU1TR19KQVhSUEMxMV9VTlJFU09MVkVEX0NMQVNTPVRoZSBjbGFzcyAiezB9IiBjYW5ub3QgYmUgbG9hZGVkIHZpYSBwcm9qZWN0ICJ7MX0iLiBDaGVjayB0aGF0IHRoZSBwcm9qZWN0IGNvbnRhaW5zIHRoZSBjbGFzcywgb3IgdGhhdCB0aGUgY2xhc3MgaXMgbG9hZGFibGUgYWNjb3JkaW5nIHRvIHRoZSBKYXZhIEJ1aWxkIFBhdGggb2YgdGhlIHByb2plY3QuCi1NU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9UWVBFPUEgZGF0YSB0eXBlLCAiezB9IiwgY291bGQgbm90IGJlIHJlc29sdmVkIHdoaWxlIGFuYWx5emluZyB0aGUgc2VydmljZSBjbGFzcy4gQ2hlY2sgeW91ciBwcm9qZWN0IGNsYXNzcGF0aC4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDE9VGhlIHNlcnZpY2UgY2xhc3MgInswfSIgZG9lcyBub3QgaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLiBDaGFwdGVyIDEwLjEgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSBzZXJ2aWNlIGNsYXNzIHRvIGhhdmUgYSBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgYmUgdW5hYmxlIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmljZSBjbGFzcyB0byBoYW5kbGUgYW4gaW5jb21pbmcgcmVxdWVzdCBtZXNzYWdlLiAKLU1TR19KQVhSUEMxMV9SVUxFXzAwMDI9VGhlIHZhbHVlIHR5cGUgInswfSIgdXNlZCB2aWEgdGhlIHNlcnZpY2UgY2xhc3MgInsxfSIgZG9lcyBub3QgaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLiBDaGFwdGVyIDUuNCBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhIHZhbHVlIHR5cGUgdG8gaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBvdGhlcndpc2UgYSBKQVgtUlBDIDEuMSBjb21wbGlhbnQgV2ViIHNlcnZpY2UgZW5naW5lIG1heSBiZSB1bmFibGUgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSB2YWx1ZSB0eXBlIGR1cmluZyBkZXNlcmlhbGl6YXRpb24uCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDAzPVRoZSBtZXRob2QgInswfSIgb24gdGhlIHNlcnZpY2UgY2xhc3MgInsxfSIgaXMgb3ZlcmxvYWRlZC4gT3ZlcmxvYWRlZCBtZXRob2RzIGFyZSBhbGxvd2VkIGJ5IGNoYXB0ZXIgNS41LjUgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24sIGhvd2V2ZXIsIHNvbWUgSkFYLVJQQyAxLjEgY29tcGxpYW50IHRvb2xzIG1heSBub3QgYWxsb3cgb3ZlcmxvYWRlZCBtZXRob2RzIG9yIG1heSBnZW5lcmF0ZSBXU0RMIHdpdGggb3ZlcmxvYWRlZCBvcGVyYXRpb25zIGFzIGNvbnRyYXJ5IHRvIHJ1bGUgUjIzMDQgb2YgdGhlIFdTLUkgQmFzaWMgUHJvZmlsZS4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDQ9VGhlIHNlcnZpY2Ugc3BlY2lmaWMgZXhjZXB0aW9uIGNsYXNzICJ7MH0iIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgY29uc3RydWN0b3Igd2l0aCBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcgaW4gbnVtYmVyIGFuZCB0eXBlIHRvIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgY2xhc3MuIENoYXB0ZXIgNS41LjUgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSBzZXJ2aWNlIHNwZWNpZmljIGV4Y2VwdGlvbiB0byBoYXZlIGEgcHVibGljIGNvbnN0cnVjdG9yIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgdGhlcmUgYXJlIGdldHRlciBtZXRob2RzLCBhbmQgb2YgbWF0Y2hpbmcgZGF0YSB0eXBlcywgb3RoZXJ3aXNlIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgYmUgdW5hYmxlIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgZXhjZXB0aW9uIGR1cmluZyBkZXNlcmlhbGl6YXRpb24gb2YgYSBmYXVsdCBtZXNzYWdlLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwNT1UaGUgbWV0aG9kICJ7MH0iIG9uIHRoZSBzZXJ2aWNlIGNsYXNzICJ7MX0iIHVzZXMgYSBkYXRhIHR5cGUsICJ7Mn0iLCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4gSW5zdGFuY2VzIG9mIHRoZSB0eXBlIG1heSBub3Qgc2VyaWFsaXplIG9yIGRlc2VyaWFsaXplIGNvcnJlY3RseS4gTG9zcyBvZiBkYXRhIG9yIGNvbXBsZXRlIGZhaWx1cmUgb2YgdGhlIFdlYiBzZXJ2aWNlIG1heSByZXN1bHQuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA2PVRoZSBmaWVsZCBvciBwcm9wZXJ0eSAiezB9IiBvbiB0aGUgdmFsdWUgdHlwZSAiezF9IiB1c2VkIHZpYSB0aGUgc2VydmljZSBjbGFzcyAiezJ9IiBoYXMgYSBkYXRhIHR5cGUsICJ7M30iLCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uIEluc3RhbmNlcyBvZiB0aGUgdHlwZSBtYXkgbm90IHNlcmlhbGl6ZSBvciBkZXNlcmlhbGl6ZSBjb3JyZWN0bHkuIExvc3Mgb2YgZGF0YSBvciBjb21wbGV0ZSBmYWlsdXJlIG9mIHRoZSBXZWIgc2VydmljZSBtYXkgcmVzdWx0LgotTVNHX0pBWFJQQzExX1JVTEVfMDAwNz1UaGUgcHJpbWl0aXZlIHR5cGUgInswfSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gQXMgc3RhdGVkIGluIGNoYXB0ZXIgNS4xLjEgb2YgdGhlIHNwZWNpZmljYXRpb24sIHRoZSBzdXBwb3J0ZWQgcHJpbWl0aXZlIHR5cGVzIGFyZSAiYm9vbGVhbiIsICJieXRlIiwgInNob3J0IiwgImludCIsICJsb25nIiwgImZsb2F0IiBhbmQgImRvdWJsZSIuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA4PVRoZSB3cmFwcGVyIHR5cGUgInswfSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gQXMgc3RhdGVkIGluIGNoYXB0ZXIgNS4xLjEgb2YgdGhlIHNwZWNpZmljYXRpb24sIHRoZSBzdXBwb3J0ZWQgd3JhcHBlciB0eXBlcyBhcmUgdGhvc2UgY29ycmVzcG9uZGluZyB0byAiYm9vbGVhbiIsICJieXRlIiwgInNob3J0IiwgImludCIsICJsb25nIiwgImZsb2F0IiBhbmQgImRvdWJsZSIuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA5PVRoZSBKYXZhIHR5cGUgInswfSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gQXMgc3RhdGVkIGluIGNoYXB0ZXIgNS4xLjMgb2YgdGhlIHNwZWNpZmljYXRpb24sIHRoZSBzdXBwb3J0ZWQgc3RhbmRhcmQgdHlwZXMgYXJlICJqYXZhLmxhbmcuU3RyaW5nIiwgImphdmEudXRpbC5EYXRlIiwgImphdmEudXRpbC5DYWxlbmRhciIsICJqYXZhLm1hdGguQmlnSW50ZWdlciIsICJqYXZhLm1hdGguQmlnRGVjaW1hbCIsICJqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIiBhbmQgImphdmEubmV0LlVSSSIuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDEwPVN1cHBvcnQgZm9yIGNvbGxlY3Rpb24gYW5kIG1hcCBjbGFzc2VzIHN1Y2ggYXMgInswfSIgaXMgbm90IHJlcXVpcmVkIGJ5IEpBWC1SUEMgMS4xLiBEdWUgdG8gdGhlaXIgbm9uLXR5cGUgc2FmZSBuYXR1cmUsIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgbm90IGhhbmRsZSBjb2xsZWN0aW9ucywgb3IgbWF5IHJlcHJlc2VudCB0aGVtIGluIFdTREwgZG9jdW1lbnRzIGFuZCBTT0FQIG1lc3NhZ2VzIGluIGEgbWFubmVyIHRoYXQgaW1wYWlycyBpbnRlcm9wZXJhYmlsaXR5LiBUaGUgdXNlIG9mIGFycmF5cyBpbnN0ZWFkIG9mIGNvbGxlY3Rpb25zIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI5NTc5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqIDIwMDYwNjA3ICAgMTQ1NjA0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU1BsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW4iOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV1NQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBTllfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQU5ZX0ZJTFRFUl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX1NFTEVDVElPTl9UUkFOU0ZPUk07Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX05PVF9DT01QTElBTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDAxOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA3OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwOTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDEwOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV1NQbHVnaW5NZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL051bGxTdGF0dXNNb25pdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvTnVsbFN0YXR1c01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVhYjdkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvTnVsbFN0YXR1c01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotLyoqCi0qIEEgTnVsbFN0YXR1c1JlbmRlcmVyIHRocm93cyBhd2F5IElTdGF0dXMgaW5mb3JtYXRpb24uCi0qLwotcHVibGljIGNsYXNzIE51bGxTdGF0dXNNb25pdG9yIGltcGxlbWVudHMgU3RhdHVzTW9uaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByb3RlY3RlZCBib29sZWFuIHJlc3VsdDsKLQotICAvKioKLSAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAqLwotICBwdWJsaWMgTnVsbFN0YXR1c01vbml0b3IgKCkgIHt9Ci0gIC8qKgotICAqIERvZXMgbm90aGluZy4KLSAgKi8KLSAgcHVibGljIGludCByZXBvcnRTdGF0dXMoSVN0YXR1cyBzdGF0dXMsIFZlY3RvciBvcHRpb25zKSB7IHJldHVybiAwOyB9Ci0gIHB1YmxpYyBib29sZWFuIHJlcG9ydFN0YXR1cyhJU3RhdHVzIHN0YXR1cykgCi0gIHsgCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICBjYXNlIElTdGF0dXMuRVJST1I6Ci0gICAgICBjYXNlIElTdGF0dXMuV0FSTklORzoKLSAgICAgIAkJcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAJCWJyZWFrOwotCSAgY2FzZSBJU3RhdHVzLklORk86Ci0gICAgICBkZWZhdWx0OiAvL0lTdGF0dXMuT0sKLSAgICAgIAkJcmVzdWx0ID0gdHJ1ZTsgCi0gICAgICAJCWJyZWFrOwotICAgICB9Ci0gCXJldHVybiByZXN1bHQ7Ci0gIH0KLSAgcHVibGljIHZvaWQgZHVtcFNhdmVkU3RhdHVzKCkgeyB9Ci0gIHB1YmxpYyBib29sZWFuIGNhbkNvbnRpbnVlKCkgCi0gIHsgCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0ICgpIHsKLSAgCQlyZXN1bHQgPSB0cnVlOwotICAJfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzTW9uaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhYzgwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSogQSBTdGF0dXNNb25pdG9yIHJlcG9ydHMgSVN0YXR1cyBpbmZvcm1hdGlvbiB0byBhIGRpc3BsYXkgc3lzdGVtLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHVzTW9uaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIHJlcG9ydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBzdGF0dXMgb2JqZWN0LgotICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmVwb3J0Ci0gICogSVN0YXR1cyBpbmZvcm1hdGlvbiB0byBhIGdpdmVuIGRpc3BsYXkgc3lzdGVtLAotICAqIHN1Y2ggYXMgU1dULCB0aGUgY29tbWFuZCBsaW5lLCBvciBhIHRyYWNlIGZpbGUuCi0gICovCi0gIHB1YmxpYyBpbnQgcmVwb3J0U3RhdHVzKElTdGF0dXMgc3RhdHVzLCBWZWN0b3Igb3B0aW9ucyk7Ci0gIHB1YmxpYyBib29sZWFuIHJlcG9ydFN0YXR1cyhJU3RhdHVzIHN0YXR1cyk7Ci0gIHB1YmxpYyB2b2lkIGR1bXBTYXZlZFN0YXR1cygpOwotICBwdWJsaWMgYm9vbGVhbiBjYW5Db250aW51ZSgpOwotICBwdWJsaWMgdm9pZCByZXNldCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c1JlbmRlcmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzUmVuZGVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmZjNhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzUmVuZGVyZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSogQSBTdGF0dXNSZW5kZXJlciByZW5kZXJzIElTdGF0dXMgaW5mb3JtYXRpb24gdG8gYSBkaXNwbGF5IHN5c3RlbS4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXR1c1JlbmRlcmVyCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIHN0YXR1cyBvYmplY3QuCi0gICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZW5kZXIKLSAgKiBJU3RhdHVzIGluZm9ybWF0aW9uIHRvIGEgZ2l2ZW4gZGlzcGxheSBzeXN0ZW0sCi0gICogc3VjaCBhcyBTV1QsIHRoZSBjb21tYW5kIGxpbmUsIG9yIGEgdHJhY2UgZmlsZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVuZGVyICggSVN0YXR1cyBzdGF0dXMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0FueUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vQW55RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YThmMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vQW55RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci0KLS8qKgotKiBUaGlzIGlzIGEga2luZCBvZiB7QGxpbmsgRmlsdGVyfSB0aGF0IGFjY2VwdHMgYWxsIG9iamVjdHMsCi0qIGFuZCBpcyBhIHN1aXRhYmxlIGJhc2UgY2xhc3MgZm9yIG5ldyA8Y29kZT5GaWx0ZXJzPC9jb2RlPi4KLSovCi1wdWJsaWMgY2xhc3MgQW55RmlsdGVyIGltcGxlbWVudHMgRmlsdGVyCi17Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5BbnlGaWx0ZXI8L2NvZGU+LgotICAqLwotICBwdWJsaWMgQW55RmlsdGVyICgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBXU1BsdWdpbk1lc3NhZ2VzLkFOWV9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBXU1BsdWdpbk1lc3NhZ2VzLkFOWV9GSUxURVJfREVTQzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogU2VlIHtAbGluayBGaWx0ZXIjc3RhdHVzT2Z9IGZvciBnZW5lcmFsIGNvbW1lbnRzLgotICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPkFueUZpbHRlcjwvY29kZT4KLSAgKiByZXR1cm5zIGEgc3RhdHVzIHdpdGggc2V2ZXJpdHkgPGNvZGU+SVN0YXR1cy5PSzwvY29kZT4uCi0gICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUuCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIEFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHN0YXR1c09mICggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwiIixudWxsKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfSByZXR1cm5zCi0gICogYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfSB3aXRoIGEKLSAgKiBzZXZlcml0eSBvZiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdG8gcHJvdmlkZSBhIGhpZ2hlci1wZXJmb3JtYW5jZQotICAqIGltcGxlbWVudGF0aW9uLgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9IHJldHVybnMKLSAgKiBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9IHdpdGggYQotICAqIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgcmV0dXJuICFzdGF0dXNPZihvYmplY3QpLm1hdGNoZXMoSVN0YXR1cy5FUlJPUik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0ZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ODc2ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGEgY2xhc3Mgb2Ygb2JqZWN0cyB0aGF0IGZpbHRlcgotKiBvdGhlciBvYmplY3RzIGZvciBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIGJ5IHNvbWUgY29uc3VtZXIuCi0qLwotcHVibGljIGludGVyZmFjZSBGaWx0ZXIKLXsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogZGVzY3JpYmluZyB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPidzIGFzc2Vzc21lbnQgb2YKLSAgKiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBUaGUgc2V2ZXJpdHkgb2YgdGhlCi0gICogcmV0dXJuZWQgPGNvZGU+SVN0YXR1czwvY29kZT4gaXMgYXMgZm9sbG93czoKLSAgKiA8dWw+Ci0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNPS30KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBhY2NlcHRzIHRoZSA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0gICogd2l0aCBubyBmdXJ0aGVyIGluZm9ybWF0aW9uIGZvciB0aGUgY2FsbGVyIChtZWFuaW5nIHRoZQotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRNZXNzYWdlfSBhbmQKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0RXhjZXB0aW9ufSBtZXRob2RzCi0gICogYXJlIGlnbm9yZWQpLgotICAqIDxsaT4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjSU5GT30KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBhY2NlcHRzIHRoZSA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0gICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIGZyb20gdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMuCi0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNXQVJOSU5HfQotICAqIGlmIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+IGFjY2VwdHMgdGhlIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIGZyb20gdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMuCi0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNFUlJPUn0KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBkb2VzIG5vdCBhY2NlcHQgdGhlIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIGZyb20gdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMuCi0gICogPC91bD4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gQW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHN0YXR1c09mICggT2JqZWN0IG9iamVjdCApOwotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPkZpbHRlcjwvY29kZT4KLSAgKiBhY2NlcHRzIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LiBUaGlzIG1ldGhvZAotICAqIG11c3QgcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYge0BsaW5rICNzdGF0dXNPZn0KLSAgKiByZXR1cm5zIGFuIDxjb2RlPklTdGF0dXM8L2NvZGU+IHdpdGggYSBzZXZlcml0eSBvZgotICAqIGxlc3MgdGhhbiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPi4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPkZpbHRlcjwvY29kZT4KLSAgKiBhY2NlcHRzIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRzICggT2JqZWN0IG9iamVjdCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSVByb2plY3RUb1N0cmluZ1RyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9JUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwNjFlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9JUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotCi0KLS8qKgotICogVHJhbnNmcm9tcyBhIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvamVjdCB0byBqYXZhLmxhbmcuU3RyaW5nCi0gKi8KLXB1YmxpYyBjbGFzcyBJUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0JCi0JICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0JICB7Ci0JICAJSVByb2plY3QgcHJvamVjdCA9IChJUHJvamVjdCl2YWx1ZTsKLQkgICAgcmV0dXJuIHByb2plY3QuZ2V0TmFtZSgpOwotCSAgfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZGEyNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI1NTc0IHppbmFAY2EuaWJtLmNvbSAtIFppbmEgTW9zdGFmaWEKLSAqIDIwMDYwMjIyICAgMjI1NTc0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDkwMzEwICAgMjQyNDQwIHllbmx1QGNhLmlibS5jb20gLSBZZW4gTHUsIFBsdWdnYWJsZSBJRmlsZSB0byBVUkkgQ29udmVydGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA4LCAyMDA0Ci0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb252ZXJ0ZXIuSUlGaWxlMlVyaUNvbnZlcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKi8KLXB1YmxpYyBjbGFzcyBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkgewotCSAJICAKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldENvbnZlcnRlZFVSSUZyb21JRmlsZShJRmlsZSBmaWxlLFN0cmluZyBkZWZhdWx0VVJJKQotICB7Ci0JU3RyaW5nIGNvbnZlcnRlZExvY2F0aW9uID0gbnVsbDsKLQlib29sZWFuIGFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUgPSB0cnVlOwotCWlmIChmaWxlICE9IG51bGwgJiYgZmlsZS5leGlzdHMoKSkKLQl7CQotCSAgSUlGaWxlMlVyaUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldElGaWxlMlVyaUNvbnZlcnRlcigpOwotCSAgaWYgKGNvbnZlcnRlciAhPSBudWxsKQotCSAgewotCQljb252ZXJ0ZWRMb2NhdGlvbiA9IGNvbnZlcnRlci5jb252ZXJ0KGZpbGUpOwotCQlhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gY29udmVydGVyLmFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUoKTsKLQkgIH0KLQl9Ci0JaWYgKGNvbnZlcnRlZExvY2F0aW9uID09IG51bGwgJiYgYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSkKLQkgIHJldHVybiBkZWZhdWx0VVJJOwotCXJldHVybiBjb252ZXJ0ZWRMb2NhdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldENvbnZlcnRlZFVSSUZyb21VUkkoU3RyaW5nIG9yaWdpbmFsVVJJKQotICB7Ci0JSUZpbGUgZmlsZSA9IG51bGw7Ci0gICAgaWYgKG9yaWdpbmFsVVJJICE9IG51bGwpCi0JewotCSAgU3RyaW5nIHBsYXRmb3JtUmVzb3VyY2UgPSAicGxhdGZvcm06L3Jlc291cmNlIjsKLQkgIGlmIChvcmlnaW5hbFVSSS5zdGFydHNXaXRoKHBsYXRmb3JtUmVzb3VyY2UpKQotCSAgICBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKG9yaWdpbmFsVVJJLnN1YnN0cmluZyhwbGF0Zm9ybVJlc291cmNlLmxlbmd0aCgpKSkpOwotCSAgZWxzZSBpZiAob3JpZ2luYWxVUkkuc3RhcnRzV2l0aCgiZmlsZToiKSkKLQkgIHsKLQkJU3RyaW5nIGZpbGVQYXRoID0gY29udmVydFRvUmVsYXRpdmUob3JpZ2luYWxVUkkpOwotCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JICB9Ci0JfQotICAgIHJldHVybiBnZXRDb252ZXJ0ZWRVUklGcm9tSUZpbGUoZmlsZSxvcmlnaW5hbFVSSSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExVUkkoU2VydmljZUltcGwgc2VydmljZUltcGwpCi0gIHsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHNlcnZpY2VJbXBsLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgCVN0cmluZyBsb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgCXJldHVybiBnZXRDb252ZXJ0ZWRVUklGcm9tVVJJKGxvY2F0aW9uKTsKLSAgfQotICAgCi0gIC8vaGFzIHRvIGJlIHVuZGVyIHRoZSB3ZWJjb250ZW50Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVKQl9NT0RVTEUgPSAiZWpiTW9kdWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBQQ0xJRU5UX01PRFVMRSA9ICJhcHBDbGllbnRNb2R1bGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXRUJfTU9EVUxFID0gIldlYkNvbnRlbnQiOwotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExVUkkoU2VydmljZVJlZiBzZXJ2aWNlSW1wbCkKLSAgewotICAJIFN0cmluZyBtb2R1bGVSb290ID0gbnVsbDsKLQkgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlSW1wbCk7Ci0JIGlmKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChwcm9qZWN0KSkKLQkgewotCSAgIG1vZHVsZVJvb3QgPSBXRUJfTU9EVUxFOwotCSB9Ci0gICAgIGVsc2UgaWYgKEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudChwcm9qZWN0KSkKLQkgewotCSAgIG1vZHVsZVJvb3QgPSBFSkJfTU9EVUxFOwotCSB9Ci0JIGVsc2UgaWYgKEoyRUVVdGlscy5pc0FwcENsaWVudENvbXBvbmVudChwcm9qZWN0KSkKLQkgewotCSAgIG1vZHVsZVJvb3QgPSBBUFBDTElFTlRfTU9EVUxFOwotCSB9Ci0KLQkgaWYgKG1vZHVsZVJvb3QgIT0gbnVsbCkKLQkgewotCSAgIElQYXRoIHBhdGggPSBwcm9qZWN0LmdldExvY2F0aW9uKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKTsKLQkgICBwYXRoID0gcGF0aC5hcHBlbmQobW9kdWxlUm9vdCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKTsKLQkgICBwYXRoID0gcGF0aC5hcHBlbmQoc2VydmljZUltcGwuZ2V0V3NkbEZpbGUoKSk7Ci0JICAgRmlsZSBmaWxlID0gbmV3IEZpbGUocGF0aC50b1N0cmluZygpKTsKLQkgICB0cnkgewotCSAgICAgVVJMIHVybCA9IGZpbGUudG9VUkwoKTsKLQkgICAgIHJldHVybiBnZXRDb252ZXJ0ZWRVUklGcm9tVVJJKHVybC50b1N0cmluZygpKTsKLQkgICB9Ci0JICAgY2F0Y2goTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsJCSAgIAotCSAgIH0KLQkgfQotCSByZXR1cm4gbnVsbDsKLSB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0RMVVJJKFdTRExSZXNvdXJjZUltcGwgd3NkbFJJKQotICB7Ci0gIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUkkuZ2V0RGVmaW5pdGlvbigpOwotICAJU3RyaW5nIGxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotICAJcmV0dXJuIGdldENvbnZlcnRlZFVSSUZyb21VUkkobG9jYXRpb24pOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0lMUGF0aChXU0RMUmVzb3VyY2VJbXBsIHdzZGxSSSkKLSAgewotICAJcmV0dXJuIGNvbnZlcnRUb1JlbGF0aXZlKGdldFdTRExVUkkod3NkbFJJKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTSUxQYXRoKFNlcnZpY2VSZWYgc2VydmljZUltcGwpCi0gIHsKLSAgCXJldHVybiBjb252ZXJ0VG9SZWxhdGl2ZShnZXRXU0RMVVJJKHNlcnZpY2VJbXBsKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTSUxQYXRoKFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsKQotICB7Ci0gIAlyZXR1cm4gY29udmVydFRvUmVsYXRpdmUoZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxFPSJmaWxlOi8iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxFTD0iZmlsZToiOyAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29udmVydFRvUmVsYXRpdmUoU3RyaW5nIHVyaSkKLSAgewotICAJLy9yZW1vdmUgZmlsZToKLSAgCVN0cmluZyByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgcm9vdCA9IEZJTEUgKyByb290OwotICAJU3RyaW5nIHJvb3RMID0gRklMRUwgKyByb290OwotICAgIGlmKHVyaS5zdGFydHNXaXRoKHJvb3QpIHx8IHVyaS5zdGFydHNXaXRoKHJvb3RMKSl7Ci0gICAgICByZXR1cm4gdXJpLnN1YnN0cmluZyhyb290Lmxlbmd0aCgpKTsgIAkKLSAgICB9Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM0M2ZiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0ICAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAzMjkgICAxMjgwNjkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUwMyAgIDEyNjgxOSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI0ICAgMTMxMTMyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzA3MjMgICAxOTQ0MzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIENoZWNrIGZvciBub24tZXhpc3RpbmcgRUFSIHdpdGggY29udGVudCBub3QgZGVsZXRlZAotICogMjAwNzEyMTgJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEyMjEgICAyMTM3MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMTIzICAgMjE2MzQ1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwMjEyICAgMjA4Nzk1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIFdTIHdpemFyZCBmcmFtZXdvcmsgc2hvdWxkIHN1cHBvcnQgRUpCIDMuMAotICogMjAwODAyMjkgICAyMTg2OTYgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgQVBJcyB1c2luZyBFSkJBcnRpZmFjdEVkaXQgbm90IGFibGUgdG8gZGVhbCB3aXRoIHNvbWUgRUpCIDMuMCBiZWFucyBwcm9wZXJseQotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKLSAqIDIwMDkwMTE0ICAgMjYxMDg3IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIE5vIHdheSB0byBnZXQgbWV0YS1pbmYgcGF0aCBmb3IgYSBwcm9qZWN0Ci0gKiAyMDEwMDIwMyAgICAgICAgICBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCBKYXZhIEZhY2V0IGNoYW5nZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5sb2dnZXIucHJveHkuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLkphdmFGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLkFkZENvbXBvbmVudFRvRW50ZXJwcmlzZUFwcGxpY2F0aW9uRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuY29tbW9uYXJjaGl2ZWNvcmUuaW50ZXJuYWwuaGVscGVycy5BcmNoaXZlTWFuaWZlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5TZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5TZXNzaW9uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5jb21tb24uSjJFRVZlcnNpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLmNvbW1vbi5jbGFzc3BhdGguSjJFRUNvbXBvbmVudENsYXNzcGF0aFVwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuSU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuTW9kZWxQcm92aWRlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5FYXJVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuU2Vzc2lvbkJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Nb2R1bGVDb3JlTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5kYXRhbW9kZWwucHJvcGVydGllcy5JQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLm9wZXJhdGlvbi5DcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuQ29tcG9uZW50VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuRGF0YU1vZGVsRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLm9wZXJhdGlvbnMuUHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXJOZXc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgSjJFRSB1dGlsaXRpZXMgZm9yIFdlYiBzZXJ2aWNlcyBpbnRlcm5hbCB1c2UuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBKMkVFVXRpbHMgewotCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFQiA9IDE7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRUpCID0gMjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBBUFBDTElFTlQgPSA0OwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVBUiA9IDg7CQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gSVZpcnR1YWxDb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50IGdldFZpcnR1YWxDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCl7Ci0JCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0VmlydHVhbENvbXBvbmVudChTdHJpbmcgcHJvamVjdE5hbWUpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJaWYgKHByb2plY3ROYW1lIT1udWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApCi0gICAgICBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCi0JCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQl9Ci0JCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKMkVFIHZlcnNpb24KLQkgKiBAcGFyYW0gcCBwcm9qZWN0Ci0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRKMkVFVmVyc2lvbihJUHJvamVjdCBwKXsKLQkJCi0JCVN0cmluZyB2ZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocCk7Ci0JCXJldHVybiBKMkVFVmVyc2lvblV0aWwuY29udmVydFZlcnNpb25TdHJpbmdUb0ludCh2ZXIpOwotCi0JCS8qCi0JCWludCBqMmVlVmVyID0gLTE7Ci0JCXRyeSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwKTsKLSAgICAgICAgICBpZiAodmMhPW51bGwpewotICAgICAgICAgICAgajJlZVZlciA9IGdldEoyRUVWZXJzaW9uKHZjKTsKLSAgICAgICAgICB9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCXJldHVybiBqMmVlVmVyOwotCQkqLwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGludCBnZXRKMkVFVmVyc2lvbihJVmlydHVhbENvbXBvbmVudCBjaCl7Ci0gICAgICBpbnQgajJlZVZlciA9IC0xOwotICAgICAgLy9jaGVjayB0eXBlCi0gICAgICBpZiAoY2ghPW51bGwpewotICAgIAkgIElQcm9qZWN0IHByb2plY3QgPSBjaC5nZXRQcm9qZWN0KCk7Ci0gICAgCSAgajJlZVZlciA9IGdldEoyRUVWZXJzaW9uKHByb2plY3QpOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiAgVXNlIG5ldyBBUEkgcHJvdmlkZWQgYnkgSjJFRSAKLSAgICAgIGlmIChjaCE9bnVsbCkgewotICAgICAgICBpZiAoaXNXZWJDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRXZWJDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50Q29tcG9uZW50KGNoKSkKLSAgICAgICAgICBqMmVlVmVyID0gZ2V0QXBwQ2xpZW50Q29tcG9uZW50SjJFRVZlcnNpb24oY2gpOwotICAgICAgICBlbHNlIGlmIChpc0VKQkNvbXBvbmVudChjaCkpCi0gICAgICAgICAgajJlZVZlciA9IGdldEVKQkNvbXBvbmVudEoyRUVWZXJzaW9uKGNoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNFQVJDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRFQVJDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICB9Ci0gICAgICAqLwotICAgICAgCi0gICAgICByZXR1cm4gajJlZVZlcjsgCi0JfQotCQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSjJFRVZlcnNpb24KLQkgKiBAcGFyYW0gcCBJUHJvamVjdAotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRVZlcnNpb25Bc1N0cmluZyhJUHJvamVjdCBwKXsKLQkJCi0JCVN0cmluZyB2ZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocCk7Ci0JCXJldHVybiAgdmVyICE9IG51bGwgPyB2ZXIgOiBudWxsOwotCQkgCi0JCS8qCi0JCWludCBqMmVlVmVyID0gZ2V0SjJFRVZlcnNpb24ocCk7Ci0JCWlmIChqMmVlVmVyIT0tMSl7Ci0JCQlyZXR1cm4gSjJFRVZlcnNpb25VdGlsLmdldEoyRUVUZXh0VmVyc2lvbihqMmVlVmVyKTsKLQkJfQotCQllbHNlIAotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQkqLwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsQ29tcG9uZW50cygpewotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0c1tpXSk7Ci0gICAgICAgICAgaWYodmMgIT0gbnVsbCkKLSAgICAgICAgCSAgdi5hZGQodmMpOwotICAgICAgICAgIH0KLQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIHRoZSBFQVIgY29tcG9uZW50cyBpbiB0aGUgd29ya3NwYWNlCi0JICogQHJldHVybiBJVmlydHVhbENvbXBvbmVudFtdOyBlbXB0eSBpZiBub25lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFsbEVBUkNvbXBvbmVudHMoKSB7Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldKTsKLQkJCQlmb3IgKGludCBqPTA7IGo8Y29tcG9uZW50cy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAoY29tcG9uZW50c1tqXSE9bnVsbCkKLQkJCQkJCXYuYWRkKGNvbXBvbmVudHNbal0pOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJCX0KLQotCQl9Ci0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFsbFdlYkNvbXBvbmVudHMoKXsKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3RzW2ldKTsKLQkJCQlmb3IgKGludCBqPTA7IGo8Y29tcG9uZW50cy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAoY29tcG9uZW50c1tqXSE9bnVsbCkKLQkJCQkJCXYuYWRkKGNvbXBvbmVudHNbal0pOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJCX0KLQotCQl9Ci0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsRUpCQ29tcG9uZW50cygpewotICAgICAgICBMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cyA9IGdldEVKQkNvbXBvbmVudHMocHJvamVjdHNbaV0pOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxjb21wb25lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2pdIT1udWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdi5hZGQoY29tcG9uZW50c1tqXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vaGFuZGxlIGV4Y2VwdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOyAgICAgICAgCi0gICAgfSAgICAKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBFQVIgY29tcG9uZW50cyBpbiBhIGdpdmVuIElQcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuIGVtcHR5IGlmIG5vIEVBUiBjb21wb25lbnRzOyBtdXN0IG5vdCByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRFQVJDb21wb25lbnRzRnJvbVByb2plY3QoSVByb2plY3QgcHJvamVjdCl7Ci0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsJCQotCQl0cnkgewotCQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCQlpZiAoY29tcG9uZW50ICE9IG51bGwgJiYgaXNFQVJDb21wb25lbnQoY29tcG9uZW50KSl7Ci0JCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBXZWIgY29tcG9uZW50cyBpbiBhIHByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gd2ViIGNvbXBvbmVudHM7IG11c3Qgbm90IHJldHVybiBudWxsCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFdlYkNvbXBvbmVudHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQkvL2dldCBhbGwgY29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQotCQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc1dlYkNvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCQl9CQkKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0gCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJDb21wb25lbnROYW1lcyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3QpOwotCQlyZXR1cm4gdG9Db21wb25lbnROYW1lc0FycmF5KHZjcyk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0RUFSQ29tcG9uZW50TmFtZXMoSVByb2plY3QgcHJvamVjdCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gdmNzID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3QpOwotCQlyZXR1cm4gdG9Db21wb25lbnROYW1lc0FycmF5KHZjcyk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIGNvbXBvbmVudHMgb2YgdHlwZSwgY29tcG9uZW50VHlwZSBpbiB0aGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBjb21wb25lbnRUeXBlIGkuZS4gSjJFRVV0aWxzLldFQgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0Q29tcG9uZW50c0J5VHlwZShJUHJvamVjdCBwcm9qZWN0LCBpbnQgY29tcG9uZW50VHlwZSl7Ci0JCQotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmICggKFdFQiAmIGNvbXBvbmVudFR5cGUpPT1XRUIgKXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gd2ViVkMgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIod2ViVkMsIHYpOwotCQl9Ci0JCWlmICggKEVKQiAmIGNvbXBvbmVudFR5cGUpPT1FSkIgKXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWpiVkMgPSBnZXRFSkJDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIoZWpiVkMsIHYpOwotCQl9Ci0JCWlmICggKEFQUENMSUVOVCAmIGNvbXBvbmVudFR5cGUpPT1BUFBDTElFTlQgKSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudFtdIGFwcENsaWVudFZDID0gZ2V0QXBwQ2xpZW50Q29tcG9uZW50cyhwcm9qZWN0KTsKLQkJCWFkZFRvQXJyYXlMaXN0SGVscGVyKGFwcENsaWVudFZDLCB2KTsKLQkJfQotCQlpZiAoIChFQVIgJiBjb21wb25lbnRUeXBlKT09RUFSICkgewotCQkJSVZpcnR1YWxDb21wb25lbnRbXSBlYXJWQyA9IGdldEVBUkNvbXBvbmVudHNGcm9tUHJvamVjdChwcm9qZWN0KTsKLQkJCWFkZFRvQXJyYXlMaXN0SGVscGVyKGVhclZDLCB2KTsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIGNvbXBvbmVudHMgb2YgdHlwZSwgY29tcG9uZW50VHlwZSBpbiB0aGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBjb21wb25lbnRUeXBlSWQgYXMgZGVmaW5lZCBpbiBJTW9kdWxlQ29uc3RhbnRzLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0Q29tcG9uZW50c0J5VHlwZShJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50VHlwZUlkKXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0IG9mIHR5cGUgY29tcG9uZW50VHlwZUlkCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsJCi0JCQlpZiAoIHZjICE9IG51bGwgJiYgSjJFRVByb2plY3RVdGlsaXRpZXMuaXNQcm9qZWN0T2ZUeXBlKHByb2plY3QsY29tcG9uZW50VHlwZUlkKSkKLQkJCXsKLQkJCQl2LmFkZCh2Yyk7Ci0JCQl9Ci0JCQkvL2lmIChpc1dlYkNvbXBvbmVudChwcm9qZWN0LCBjb21wb25lbnRzW2ldLmdldE5hbWUoKSkpewotCQkJCS8vdi5hZGQoY29tcG9uZW50c1tpXSk7Ci0JCQkvL30JCQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UHJvamVjdHNDb250YWluaW5nQ29tcG9uZW50T2ZUeXBlKFN0cmluZyBjb21wb25lbnRUeXBlSWQpCi0JewotCSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsgCi0JICAgIElWaXJ0dWFsQ29tcG9uZW50W10gY29tcHMgPSBnZXRBbGxDb21wb25lbnRzKCk7Ci0JICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChKMkVFUHJvamVjdFV0aWxpdGllcy5pc1Byb2plY3RPZlR5cGUoY29tcHNbaV0uZ2V0UHJvamVjdCgpLGNvbXBvbmVudFR5cGVJZCkpCi0JCQl7Ci0JCQkJLy9BZGQgdGhlIHByb2plY3QgbmFtZSB0byB0aGUgdmVjdG9yIGlmIGl0IGhhcyBub3QgYmVlbiBhZGRlZCBhbHJlYWR5Ci0JCQkJU3RyaW5nIG5hbWUgPSBjb21wc1tpXS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotCQkJCWlmICghdi5jb250YWlucyhuYW1lKSkKLQkJCQl7Ci0JCQkJCXYuYWRkKG5hbWUpOwkKLQkJCQl9CQkgICAgICAgIAkJCQotCQkJfQotCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKFN0cmluZ1tdKXYudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0gICAKLQkvKioKLQkgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXRDb21wb25lbnRzQnlUeXBlCi0JICogQHBhcmFtIHZjcwotCSAqIEBwYXJhbSB2ZWN0Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRUb0FycmF5TGlzdEhlbHBlcihJVmlydHVhbENvbXBvbmVudFtdIHZjcywgTGlzdCBhbCl7Ci0JCWZvciAoaW50IGk9MDtpPHZjcy5sZW5ndGg7aSsrKXsKLQkJCWFsLmFkZCh2Y3NbaV0pOwotCQl9CQkKLQl9Ci0KLQkKLQkvKioKLQkgKiBFc3NlbnRpYWxseSwgcmV0dXJucyBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gZ2V0QWxsRmxleGlibGVQcm9qZWN0cygpewotCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBQcm9qZWN0VXRpbGl0aWVzLmdldEFsbFByb2plY3RzKCk7Ci0JCQlmb3IoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7aSsrKSB7Ci0JCQkJaWYgKE1vZHVsZUNvcmVOYXR1cmUuZ2V0TW9kdWxlQ29yZU5hdHVyZShwcm9qZWN0c1tpXSkhPW51bGwpewotCQkJCQl2LmFkZChwcm9qZWN0c1tpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCi0JCXJldHVybiAoSVByb2plY3RbXSl2LnRvQXJyYXkobmV3IElQcm9qZWN0WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSB1bmRlcmx5aW5nIHJlc291cmNlIGJhY2tpbmcgdXAgdGhlIGNvbXBvbmVudCBhbmQgcHJvamVjdCAKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUKLQkgKiBAcGFyYW0gY29tcG9uZW50TmFtZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXhpc3RzKFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGNvbXBvbmVudE5hbWUpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJaWYgKHByb2plY3ROYW1lIT1udWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApIHsKLQkJICBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIGV4aXN0cyhwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSB1bmRlcmx5aW5nIHJlc291cmNlIGJhY2tpbmcgdXAgdGhlIGNvbXBvbmVudCBhbmQgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleGlzdHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCWlmIChwcm9qZWN0IT1udWxsKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCXJldHVybiB2Yy5leGlzdHMoKTsKLQkJfQotCQllbHNlIAotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQl9CQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBFQVIgY29tcG9uZW50cyB3aGljaCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUFSQ29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJTGlzdCBlYXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB0YXJnZXRWQyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQlJVmlydHVhbENvbXBvbmVudFtdIGVhclZDID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQkJZm9yIChpbnQgaT0wOyBpPGVhclZDLmxlbmd0aDtpKyspIHsKLQkJCQlJVmlydHVhbFJlZmVyZW5jZVtdIHJlZnMgPSBlYXJWQ1tpXS5nZXRSZWZlcmVuY2VzKCk7Ci0JCQkJZm9yIChpbnQgaz0wO2s8cmVmcy5sZW5ndGg7aysrKSB7Ci0JCQkJCWlmICh0YXJnZXRWQy5lcXVhbHMocmVmc1trXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpKXsKLQkJCQkJCWVhcnMuYWRkKHJlZnNba10uZ2V0RW5jbG9zaW5nQ29tcG9uZW50KCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJfQotCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSllYXJzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgRUpCIENvbXBvbmVudHMgcmVmZXJlbmNlZCBieSB0aGUgZWFyCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUpCQ29tcG9uZW50c0Zyb21FQVIoSVByb2plY3QgcHJvamVjdCl7Ci0KLQkJTGlzdCBlamJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDtpPHJlZnMubGVuZ3RoO2krKyl7Ci0JCQkJaWYgKGlzRUpCQ29tcG9uZW50KHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSl7Ci0JCQkJCWVqYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKWVqYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBqYXIKLQkgKiBAcmV0dXJuICBWZWN0b3Igb2YgYmVhbiBTdHJpbmcgbmFtZXMuCi0JICogQGRlcHJlY2F0ZWQgdXNlIGdldEJlYW5OYW1lcyhJUHJvamVjdCBwcm9qZWN0KQotCSAqLwotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldEJlYW5OYW1lcyhFSkJKYXIgamFyKSB7Ci0JCS8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgU3RhdGVsZXNzIHNlc3Npb24gYmVhbnMuCi0JCS8vIExpc3QgY21wQmVhbnMgPSBqYXIuZ2V0QmVhbk1hbmFnZWRCZWFucygpOwotCQkvLyBMaXN0IGJtcEJlYW5zID0gamFyLmdldENvbnRhaW5lck1hbmFnZWRCZWFucygpOwotCQlMaXN0IHNlc3Npb25CZWFucyA9IGphci5nZXRTZXNzaW9uQmVhbnMoKTsKLQotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJLy8gZ2V0QmVhbk5hbWVzKCBuYW1lcywgY21wQmVhbnMgKTsKLQkJLy8gZ2V0QmVhbk5hbWVzKCBuYW1lcywgYm1wQmVhbnMgKTsKLQkJZ2V0QmVhbk5hbWVzKG5hbWVzLCBzZXNzaW9uQmVhbnMpOwotCi0JCXJldHVybiBuYW1lczsKLQl9Ci0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdC0gdGhlIHByb2plY3QgdG8gZmluZCBzdGF0ZWxlc3Mgc2Vzc2lvbiBiZWFucyBpbgotCSAqIEByZXR1cm4gIFZlY3RvciBvZiBiZWFuIFN0cmluZyBuYW1lcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBnZXRCZWFuTmFtZXMoSVByb2plY3QgcHJvamVjdCkgewotCQkvLyBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IFN0YXRlbGVzcyBzZXNzaW9uIGJlYW5zLgotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCUlNb2RlbFByb3ZpZGVyIHByb3ZpZGVyID0gTW9kZWxQcm92aWRlck1hbmFnZXIuZ2V0TW9kZWxQcm92aWRlcihwcm9qZWN0KTsKLSAgICAJT2JqZWN0IG1vZGVsT2JqZWN0ID0gcHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoKTsKLQotICAgIAlMaXN0IHNlc3Npb25CZWFucyA9IG5ldyBWZWN0b3IoKTsKLQkJYm9vbGVhbiBpc0oyRUU1ID0gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNKRUVQcm9qZWN0KHByb2plY3QpOwotCQlpZiAoaXNKMkVFNSkgewotICAgIAkJLy9hIEpFRTUgcHJvamVjdAotICAgIAkJRW50ZXJwcmlzZUJlYW5zIGVCZWFucyA9ICgob3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuRUpCSmFyKW1vZGVsT2JqZWN0KS5nZXRFbnRlcnByaXNlQmVhbnMoKTsKLSAgICAJCWlmIChlQmVhbnMgIT1udWxsKQotICAgIAkJCXNlc3Npb25CZWFucyA9IGVCZWFucy5nZXRTZXNzaW9uQmVhbnMoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJCXNlc3Npb25CZWFucyA9ICgoRUpCSmFyKW1vZGVsT2JqZWN0KS5nZXRTZXNzaW9uQmVhbnMoKTsKLSAgICAJfQotCi0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gc2Vzc2lvbkJlYW5zLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJT2JqZWN0IG5leHQgPSAoaXRlcmF0b3IubmV4dCgpKTsKLQkJCWlmIChuZXh0IGluc3RhbmNlb2YgRW50ZXJwcmlzZUJlYW4pIHsKLQkJCQlFbnRlcnByaXNlQmVhbiBiZWFuID0gKEVudGVycHJpc2VCZWFuKSBuZXh0OwotCi0JCQkJaWYgKGJlYW4uaXNTZXNzaW9uKCkpIHsKLQkJCQkJU2Vzc2lvbiBzZXNzaW9uQmVhbiA9IChTZXNzaW9uKSBiZWFuOwotCi0JCQkJCWlmIChzZXNzaW9uQmVhbi5nZXRTZXNzaW9uVHlwZSgpLmdldFZhbHVlKCkgPT0gU2Vzc2lvblR5cGUuU1RBVEVMRVNTKSB7Ci0JCQkJCQluYW1lcy5hZGQoYmVhbi5nZXROYW1lKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTZXNzaW9uQmVhbiBiZWFuID0gKFNlc3Npb25CZWFuKSBuZXh0OwotCQkJCWlmIChiZWFuLmdldFNlc3Npb25UeXBlKCkuZ2V0VmFsdWUoKSA9PSBTZXNzaW9uVHlwZS5TVEFURUxFU1MpIHsKLQkJCQkJbmFtZXMuYWRkKGJlYW4uZ2V0RWpiTmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5hbWVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lcwotCSAqICAgICAgICAgICAgc3BlY2lmaWVzIHRoYXQgdmVjdG9yIG9mIHN0cmluZ3MgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYWRkIGJlYW4KLQkgKiAgICAgICAgICAgIG5hbWVzIHRvLgotCSAqIEBwYXJhbSBiZWFucwotCSAqICAgICAgICAgICAgc3BlY2lmaWVzIGEgbGlzdCBvZiBiZWFucy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEJlYW5OYW1lcyhWZWN0b3IgbmFtZXMsIExpc3QgYmVhbnMpIHsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBiZWFucy5pdGVyYXRvcigpOwotCi0JCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCUVudGVycHJpc2VCZWFuIGJlYW4gPSAoRW50ZXJwcmlzZUJlYW4pIChpdGVyYXRvci5uZXh0KCkpOwotCi0JCQlpZiAoYmVhbi5pc1Nlc3Npb24oKSkgewotCQkJCVNlc3Npb24gc2Vzc2lvbkJlYW4gPSAoU2Vzc2lvbikgYmVhbjsKLQotCQkJCWlmIChzZXNzaW9uQmVhbi5nZXRTZXNzaW9uVHlwZSgpLmdldFZhbHVlKCkgPT0gU2Vzc2lvblR5cGUuU1RBVEVMRVNTKSB7Ci0JCQkJCW5hbWVzLmFkZChiZWFuLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCS8qKgotCSAqIFVzZXMgamVtIFByb2plY3RVdGlsaXRpZXMgdG8gZ2V0IHRoZSBwcm9qZWN0Ci0JICogQHBhcmFtIGVqYiBlT2JqZWN0Ci0JICogQHJldHVybiBJUHJvamVjdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgZ2V0UHJvamVjdEZyb21FSkIoRW50ZXJwcmlzZUJlYW4gZWpiKSB7Ci0JCXJldHVybiBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWpiKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgZGVmYXVsdCBKMkVFIDEuMyBFQVIgY29tcG9uZW50IGluIHRoZSB3b3Jrc3BhY2UKLQkgKiBAcmV0dXJuIEVBUiBjb21wb25lbnQgbmFtZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0RGVmYXVsdDEzRUFSQ29tcG9uZW50KCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gYWxsRUFSQ29tcG9uZW50cyA9IGdldEFsbEVBUkNvbXBvbmVudHMoKTsKLQkJZm9yIChpbnQgaj0wO2o8YWxsRUFSQ29tcG9uZW50cy5sZW5ndGg7aisrKXsKLQkJCWludCBqMmVlVmVyc2lvbiA9IGdldEoyRUVWZXJzaW9uKGFsbEVBUkNvbXBvbmVudHNbal0pOwotCQkJaWYgKGoyZWVWZXJzaW9uID09IEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKQotCQkJCSByZXR1cm4gYWxsRUFSQ29tcG9uZW50c1tqXTsKLQkJIH0JCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgZGVmYXVsdCBKMkVFIDEuNCBFQVIgY29tcG9uZW50IGluIHRoZSB3b3Jrc3BhY2UKLQkgKiBAcmV0dXJuIEVBUiBjb21wb25lbnQgbmFtZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0RGVmYXVsdDE0RUFSQ29tcG9uZW50KCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gYWxsRUFSQ29tcG9uZW50cyA9IGdldEFsbEVBUkNvbXBvbmVudHMoKTsKLQkJZm9yIChpbnQgaj0wO2o8YWxsRUFSQ29tcG9uZW50cy5sZW5ndGg7aisrKXsKLQkJCWludCBqMmVlVmVyc2lvbiA9IGdldEoyRUVWZXJzaW9uKGFsbEVBUkNvbXBvbmVudHNbal0pOwotCQkJaWYgKGoyZWVWZXJzaW9uID09IEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKQotCQkJCSByZXR1cm4gYWxsRUFSQ29tcG9uZW50c1tqXTsKLQkJIH0JCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmaXJzdCBFQVIgY29tcG9uZW50IG9mIHRoZSBKMkVFIHZlcnNpb24KLQkgKiBAcGFyYW0gdmVyc2lvbklkCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0RUFSQ29tcG9uZW50b2ZKMkVFVmVyc2lvbihpbnQgdmVyc2lvbklkKXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQlmb3IgKGludCBpPTA7IGk8Y29tcG9uZW50cy5sZW5ndGg7IGkrKyl7Ci0JCQlpZiAoZ2V0SjJFRVZlcnNpb24oY29tcG9uZW50c1tpXSkgPT0gdmVyc2lvbklkKQotCQkJCXJldHVybiBjb21wb25lbnRzW2ldOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBqMmVlVmVyc2lvbkludAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMYWJlbEZyb21KMkVFVmVyc2lvbihTdHJpbmcgajJlZVZlcnNpb25JbnQpIHsKLQkJaWYgKGoyZWVWZXJzaW9uSW50ID09IG51bGwgfHwgajJlZVZlcnNpb25JbnQubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiAiIjsKLQotCQlpbnQgajJlZVZlcnNpb24gPSBJbnRlZ2VyLnBhcnNlSW50KGoyZWVWZXJzaW9uSW50KTsKLQkJc3dpdGNoIChqMmVlVmVyc2lvbikgewotCQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCA6Ci0JCQkJcmV0dXJuIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQ7Ci0JCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEIDoKLQkJCQlyZXR1cm4gSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVDsKLQkJCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQgOgotCQkJCXJldHVybiBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUOwotCQkJZGVmYXVsdCA6Ci0JCQkJcmV0dXJuICIiOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRVZlcnNpb25Gcm9tTGFiZWwoU3RyaW5nIGoyZWVMYWJlbCkgewotCQlTdHJpbmcgajJlZTEyU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQpOwotCQlTdHJpbmcgajJlZTEzU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpOwotCQlTdHJpbmcgajJlZTE0U3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotCQlpZiAoajJlZUxhYmVsLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLQkJCXJldHVybiBqMmVlMTJTdHJpbmc7Ci0KLQkJaWYgKGoyZWVMYWJlbC5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCkpCi0JCQlyZXR1cm4gajJlZTEzU3RyaW5nOwotCi0JCWlmIChqMmVlTGFiZWwuZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotCQkJcmV0dXJuIGoyZWUxNFN0cmluZzsKLQotCQlyZXR1cm4gIiI7Ci0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBTdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIEoyRUUgdmVyc2lvbnMKLQkgKiBAcGFyYW0gYVZlcnNpb24KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRUludFZlcnNpb25Bc1N0cmluZyhTdHJpbmcgYVZlcnNpb24pIHsKLQkJaWYgKGFWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUKSkKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkudG9TdHJpbmcoKTsKLQkJaWYgKGFWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCkudG9TdHJpbmcoKTsKLQkJaWYgKGFWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCkudG9TdHJpbmcoKTsJCQotCQkvLyBkZWZhdWx0Ci0JCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkudG9TdHJpbmcoKTsKLQl9CQotCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCAgLy8gdXNlIGdldEFMTEVBUkNvbXBvbmVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gZ2V0RUFSUHJvamVjdHMoKSB7Ci0JCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLS8vCQkJCWlmIChwcm9qZWN0c1tpXS5oYXNOYXR1cmUoSUVBUk5hdHVyZUNvbnN0YW50cy5OQVRVUkVfSUQpKSB7Ci0JCQkJaWYgKFJlc291cmNlVXRpbHMuaXNFQVJQcm9qZWN0KHByb2plY3RzW2ldKSkgewotCQkJCQl2LmFkZChwcm9qZWN0c1tpXSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gKElQcm9qZWN0W10pdi50b0FycmF5KG5ldyBJUHJvamVjdFswXSk7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IEVBUiBwcm9qZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvamVjdCBhbmQgc2VydmVyCi0JICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0Ci0JICogQHBhcmFtIHNlcnZlcgotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCAgLy8gdG8gYmUgc2ltcGxpZmllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgZ2V0RGVmYXVsdEVBUlByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QsIElTZXJ2ZXIgc2VydmVyKSB7Ci0KLQkJSVByb2plY3RbXSBlYXJQcm9qZWN0cyA9IG51bGw7Ci0JCUlQcm9qZWN0IGVhciA9IG51bGw7Ci0KLQkJaWYgKHNlcnZpY2VQcm9qZWN0ICE9IG51bGwgJiYgc2VydmljZVByb2plY3QuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0KLQkJCQlib29sZWFuIGlzV2ViRUpCT3JBcHBDbGllbnQgPSBSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChzZXJ2aWNlUHJvamVjdCkgLy9zZXJ2aWNlUHJvamVjdC5oYXNOYXR1cmUoSVdlYk5hdHVyZUNvbnN0YW50cy5KMkVFX05BVFVSRV9JRCkKLQkJCQkJCXx8ICBSZXNvdXJjZVV0aWxzLmlzRUpCUHJvamVjdChzZXJ2aWNlUHJvamVjdCkgLy9zZXJ2aWNlUHJvamVjdC5oYXNOYXR1cmUoSUVKQk5hdHVyZUNvbnN0YW50cy5OQVRVUkVfSUQpCi0JCQkJCQl8fCAgUmVzb3VyY2VVdGlscy5pc0FwcENsaWVudFByb2plY3Qoc2VydmljZVByb2plY3QpOy8vc2VydmljZVByb2plY3QuaGFzTmF0dXJlKElBcHBsaWNhdGlvbkNsaWVudE5hdHVyZUNvbnN0YW50cy5OQVRVUkVfSUQpOwotCQkJCWlmICghaXNXZWJFSkJPckFwcENsaWVudCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlJUHJvamVjdFtdIGVhcnMgPSBnZXRFQVJQcm9qZWN0cygpOwotCi0JCQkJLy8gc2VwYXJhdGUgRUFScyB3aGljaCBhcmUgYWxyZWFkeSBkZXBsb3llZCB0byB0aGUgZXhpc3RpbmcKLQkJCQkvLyBzZXJ2ZXIKLQkJCQlpZiAoZWFycyAhPSBudWxsICYmIGVhcnMubGVuZ3RoID49IDEpIHsKLQkJCQkJQXJyYXlMaXN0IHByZWZlcnJlZEVBUkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCUFycmF5TGlzdCBzZWNvbmRhcnlFQVJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGVhcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCWVhciA9IGVhcnNbaV07Ci0JCQkJCQlJTW9kdWxlIG1vZHVsZSA9IFJlc291cmNlVXRpbHMuZ2V0TW9kdWxlKGVhcik7Ci0JCQkJCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCQkJCQlpZiAoc2VydmVyICE9IG51bGwKLQkJCQkJCQkJCXx8IFNlcnZlclV0aWwuY29udGFpbnNNb2R1bGUoc2VydmVyLAotCQkJCQkJCQkJCQltb2R1bGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpKSB7Ci0JCQkJCQkJCXByZWZlcnJlZEVBUkxpc3QuYWRkKGVhcik7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJc2Vjb25kYXJ5RUFSTGlzdC5hZGQoZWFyKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJLy8gYWRkIHNlY29uZGFyeUVBUkxpc3QgaXRlbXMgdG8gZW5kIG9mIHByaW1hcnkgbGlzdAotCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IHNlY29uZGFyeUVBUkxpc3Quc2l6ZSgpOyBqKyspIHsKLQkJCQkJCXByZWZlcnJlZEVBUkxpc3QuYWRkKHNlY29uZGFyeUVBUkxpc3QuZ2V0KGopKTsKLQkJCQkJfQotCQkJCQkvLyB0b0FycmF5Ci0JCQkJCWlmIChwcmVmZXJyZWRFQVJMaXN0ICE9IG51bGwpIHsKLQkJCQkJCWVhclByb2plY3RzID0gKElQcm9qZWN0W10pIHByZWZlcnJlZEVBUkxpc3QudG9BcnJheShuZXcgSVByb2plY3RbMF0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGNlKSB7Ci0JCQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQkJCWxvZy5sb2coSUxvZy5FUlJPUiwgNTAzOSwgSjJFRVV0aWxzLmNsYXNzLCAiZ2V0RUFSUHJvamVjdHMiLCBjZSk7Ci0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZWFyUHJvamVjdHNbMF07Ci0JfQotCi0JLyoqCi0JICogR2V0cyB0aGUgRUpCIENvbXBvbmVudHMgaW4gdGhlIHByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0RUpCQ29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCXRyeSB7Ci0JCQlpZiAoY29tcG9uZW50ICE9IG51bGwgJiYgaXNFSkJDb21wb25lbnQoY29tcG9uZW50KSl7Ci0JCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCX0JCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfSAKLQkKLQkvKioKLQkgKiBHZXRzIHRoZSBBcHBsaWNhdGlvbiBDbGllbnQgY29tcG9uZW50cyBpbiBhIHByb2plY3QuCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFwcENsaWVudENvbXBvbmVudHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQkvL2dldCBhbGwgY29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQotCQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc0FwcENsaWVudENvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCQl9CQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0gCQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRSZWZlcmVuY2luZ0VKQjIwQ29tcG9uZW50c0Zyb21FQVIoSVByb2plY3QgcHJvamVjdCl7Ci0JCSAKLQkJTGlzdCBlamJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxyZWZzLmxlbmd0aDtpKyspIHsKLQkJCQlpZiAoaXNFSkIyMENvbXBvbmVudChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpCi0JCQkJCWVqYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKWVqYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLQkKLQkKLQkvKioKLQkgKiBVdGlsaXR5IG1ldGhvZCB0byBjb21iaW5lIHR3byBJUHJvamVjdFtdCi0JICogQHBhcmFtIHByb2plY3RBcnJheTEKLQkgKiBAcGFyYW0gcHJvamVjdEFycmF5MgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gY29tYmluZVByb2plY3RBcnJheXMoSVByb2plY3RbXSBwcm9qZWN0QXJyYXkxLAotCQkJSVByb2plY3RbXSBwcm9qZWN0QXJyYXkyKSB7Ci0KLQkJLy8gY2hlY2sgaWYgZWl0aGVyIG9yIGJvdGggYXJyYXlzIGFyZSBudWxsLgotCQlpZiAocHJvamVjdEFycmF5MSA9PSBudWxsICYmIHByb2plY3RBcnJheTIgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQllbHNlIGlmIChwcm9qZWN0QXJyYXkxICE9IG51bGwgJiYgcHJvamVjdEFycmF5MiA9PSBudWxsKQotCQkJcmV0dXJuIHByb2plY3RBcnJheTE7Ci0JCWVsc2UgaWYgKHByb2plY3RBcnJheTEgPT0gbnVsbCAmJiBwcm9qZWN0QXJyYXkyICE9IG51bGwpCi0JCQlyZXR1cm4gcHJvamVjdEFycmF5MjsKLQotCQlJUHJvamVjdFtdIGNvbWJpbmVkUHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdEFycmF5MS5sZW5ndGgKLQkJCQkrIHByb2plY3RBcnJheTIubGVuZ3RoXTsKLQotCQlTeXN0ZW0uYXJyYXljb3B5KHByb2plY3RBcnJheTEsIDAsIGNvbWJpbmVkUHJvamVjdHMsIDAsCi0JCQkJcHJvamVjdEFycmF5MS5sZW5ndGgpOwotCQlpZiAocHJvamVjdEFycmF5Mi5sZW5ndGggPiAwKSB7Ci0JCQlTeXN0ZW0uYXJyYXljb3B5KHByb2plY3RBcnJheTIsIDAsIGNvbWJpbmVkUHJvamVjdHMsCi0JCQkJCXByb2plY3RBcnJheTEubGVuZ3RoLCBwcm9qZWN0QXJyYXkyLmxlbmd0aCk7Ci0JCX0KLQotCQlyZXR1cm4gY29tYmluZWRQcm9qZWN0czsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0UmVmZXJlbmNpbmdXZWJDb21wb25lbnRzRnJvbUVBUihJUHJvamVjdCBwcm9qZWN0KXsKLQkJTGlzdCB3ZWJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxyZWZzLmxlbmd0aDtpKyspIHsKLQkJCQlpZiAoaXNXZWJDb21wb25lbnQocmVmc1tpXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpKQotCQkJCQl3ZWJDb21wcy5hZGQocmVmc1tpXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpOwotCQkJfQkJCQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXdlYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCi0JfQotCQotCi0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVqYkNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkIyMENvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBlamJDb21wb25lbnQpewotCQlyZXR1cm4gaXNFSkIyMENvbXBvbmVudChlamJDb21wb25lbnQuZ2V0UHJvamVjdCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUpCMjBDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCl7Ci0JCWJvb2xlYW4gaXNFSkIgPSBmYWxzZTsKLQkJdHJ5IHsKLSAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCSAgaWYgKEVKQkFydGlmYWN0RWRpdC5pc1ZhbGlkRUpCTW9kdWxlKHZjKSkgewotCQkJICBFSkJBcnRpZmFjdEVkaXQgIGVqYkVkaXQgPSBudWxsOwotCQkJICB0cnkgewotCQkJCSAgZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKHZjKTsKLQkJCQkgIEVKQlJlc291cmNlIGVqYlJlcyA9IGVqYkVkaXQuZ2V0RUpCSmFyWG1pUmVzb3VyY2UoKTsKLQkJCQkgIGlmIChlamJSZXMuZ2V0TW9kdWxlVmVyc2lvbklEKCk9PSBKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8wX0lEKSB7Ci0JCQkJCSAgcmV0dXJuIHRydWU7Ci0JCQkJICB9Ci0JCQkgIH0KLQkJCSAgZmluYWxseSB7Ci0JCQkJICBpZiAoZWpiRWRpdCE9bnVsbCkKLQkJCQkJICBlamJFZGl0LmRpc3Bvc2UoKTsKLQkJCSAgfQotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQkJCi0JCXJldHVybiBpc0VKQjsJCQkKLQl9Ci0KLQkKLQkvKioKLQkgKiBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBhdCBjb21wTmFtZSBpcyByZWZlcmVuY2VkIGJ5IHRoZSBlYXIgYXQgZWFyQ29tcE5hbWUKLQkgKiBAcGFyYW0gZWFyUHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NvbXBvbmVudEFzc29jaWF0ZWQoSVByb2plY3QgZWFyUHJvamVjdCwgSVByb2plY3QgcHJvamVjdCkgewotCQlJVmlydHVhbENvbXBvbmVudCB2YzEgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChlYXJQcm9qZWN0KTsKLQkJSVZpcnR1YWxDb21wb25lbnQgdmMyID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCXJldHVybiBpc0NvbXBvbmVudEFzc29jaWF0ZWQodmMxLCB2YzIpOwotCX0KLQkKLQkvKioKLQkgKiBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBlYXIKLQkgKiBAcGFyYW0gZWFyIAotCSAqIEBwYXJhbSBjb21wb25lbnQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXBvbmVudEFzc29jaWF0ZWQoSVZpcnR1YWxDb21wb25lbnQgZWFyLCBJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQpewotCQlib29sZWFuIGlzQXNzb2NpYXRlZCA9IGZhbHNlOwotCQkKLQkJLy8gTm90ZTogbm90IGltcGxlbWVudGVkIGJ5IEoyRUUgeWV0Li4gdG8gYmUgdXNlZCBsYXRlci4KLQkJSVZpcnR1YWxSZWZlcmVuY2VbXSBjb21wUmVmcyA9IGVhci5nZXRSZWZlcmVuY2VzKCk7Ci0JCWlmIChjb21wUmVmcyE9IG51bGwpIHsKLQkJCWZvciAoaW50IGk9MDtpPGNvbXBSZWZzLmxlbmd0aDtpKyspewotCQkJCUlWaXJ0dWFsUmVmZXJlbmNlIHZyZWYgPSBjb21wUmVmc1tpXTsKLQkJCQlpZiAoY29tcG9uZW50LmVxdWFscyh2cmVmLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpCi0JCQkJCQlpc0Fzc29jaWF0ZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBpc0Fzc29jaWF0ZWQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcGFyYW0gZWFyUHJvamVjdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhc3NvY2lhdGVDb21wb25lbnRUb0VBUihJUHJvamVjdCBwcm9qZWN0LCBJUHJvamVjdCBlYXJQcm9qZWN0KSB7Ci0JCQotICAgICAgICBJRGF0YU1vZGVsIGFkZENvbXBvbmVudFRvRUFSRGF0YU1vZGVsID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IEFkZENvbXBvbmVudFRvRW50ZXJwcmlzZUFwcGxpY2F0aW9uRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGVhckNvbXAgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChlYXJQcm9qZWN0KTsKLSAgICAgICAgYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlNPVVJDRV9DT01QT05FTlQsIGVhckNvbXApOwotICAgICAgICBMaXN0IG1vZExpc3QgPSAoTGlzdCkgYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuZ2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCk7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHRhcmdldENvbXAgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgICAgbW9kTGlzdC5hZGQodGFyZ2V0Q29tcCk7Ci0JCWFkZENvbXBvbmVudFRvRUFSRGF0YU1vZGVsLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRfQ09NUE9ORU5UX0xJU1QsIG1vZExpc3QpOwotICAgICAgICAKLQkJdHJ5IHsKLQkJCWFkZENvbXBvbmVudFRvRUFSRGF0YU1vZGVsLmdldERlZmF1bHRPcGVyYXRpb24oKS5leGVjdXRlKG51bGwsIG51bGwpOwotCQl9IGNhdGNoIChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmdldExvZ2dlcigpLmxvZyhlKTsKLQkJfQotICAgICAgICAgICAgCi0JfQotCSAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcHJvamVjdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhclByb2plY3Qgc2FmZWx5LgotICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgcHJvamVjdCwgRUpCIHByb2plY3QsIG9yIEFwcENsaWVudAotICAgICAqIHByb2plY3QgdGhhdCBjYW4gc2FmZWx5IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuIAotICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgcHJvamVjdCwgCi0gICAgICogRUpCIHByb2plY3QsIG9yIEFwcENsaWVudCBwcm9qZWN0IHRoYXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgc2FmZWx5IHdpdGggdGhlIEVBUiBwcm9qZWN0LCBhbmQKLSAgICAgKiB0cnVlIGlmIHByb2plY3QgaXMgbm90IHJlY29nbml6ZWQgYXMgYSBXZWIsIEVKQiwgb3IKLSAgICAgKiBBcHBDbGllbnQgcHJvamVjdCwgYW5kIHR1cmUgaWYgZWFyUHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBFQVIgcHJvamVjdC4KLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSV2l0aG91dFdhcm5pbmcoSVByb2plY3QgcHJvamVjdCwgSVByb2plY3QgZWFyUHJvamVjdCkgewotCQkgIGJvb2xlYW4gdG9SZXR1cm4gPSB0cnVlOwotCSAgICAgIGJvb2xlYW4gaXNXZWIgPSBpc1dlYkNvbXBvbmVudChwcm9qZWN0KTsKLQkgICAgICBib29sZWFuIGlzRUpCID0gaXNFSkJDb21wb25lbnQocHJvamVjdCk7Ci0JICAgICAgYm9vbGVhbiBpc0FwcENsaWVudCA9IGlzQXBwQ2xpZW50Q29tcG9uZW50KHByb2plY3QpOwotCSAgICAgIGJvb2xlYW4gaXNFQVIgPSBpc0VBUkNvbXBvbmVudChlYXJQcm9qZWN0KTsKLQkgICAgICBpZiAoKGlzV2ViIHx8IGlzRUpCIHx8IGlzQXBwQ2xpZW50KSAmJiBpc0VBUikKLQkgICAgICB7ICAgICAgICAKLQkgICAgICAgIHRyeQotCSAgICAgICAgewotCSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0JICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmRWFyUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShlYXJQcm9qZWN0KTsKLQkgICAgICAgICAgCi0JICAgICAgICAgIElQcm9qZWN0RmFjZXQgZWFyUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUpOwotCSAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBlYXJQZnYgPSBmRWFyUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKGVhclBmKTsKLQkgICAgICAgICAgU3RyaW5nIGNvbXBhcmVWZXJzaW9uOwotCSAgICAgICAgICBMaXN0PElQcm9qZWN0RmFjZXRWZXJzaW9uPiBzdXBwb3J0ZWRGYWNldFZlcnNpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxJUHJvamVjdEZhY2V0VmVyc2lvbj4oKTsKLQkgICAgICAgICAgaWYgKGlzV2ViKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldCB3ZWJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSk7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gd2ViUGZ2ID0gZlByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbih3ZWJQZik7Ci0JICAgICAgICAgICAgc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCA9IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCB3ZWJQZik7Ci0JICAgICAgICAgICAgdG9SZXR1cm4gPSBmYWxzZTsKLQkgICAgICAgICAgICBmb3IgKElQcm9qZWN0RmFjZXRWZXJzaW9uIHN1cHBvcnRlZEZhY2V0VmVyc2lvbiA6IHN1cHBvcnRlZEZhY2V0VmVyc2lvbkxpc3QgKSB7Ci0JICAgICAgICAgICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIG5leHQgPSBzdXBwb3J0ZWRGYWNldFZlcnNpb247Ci0JICAgICAgICAgICAgCWNvbXBhcmVWZXJzaW9uID0gd2ViUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgICAgICAgICAJaWYgKG5leHQhPSBudWxsICYmIGNvbXBhcmVWZXJzaW9uIT1udWxsICYmIGNvbXBhcmVWZXJzaW9uLmNvbXBhcmVUbyhuZXh0LmdldFZlcnNpb25TdHJpbmcoKSkgPT0gMCkgeyAKLQkgICAgICAgICAgICAJCXRvUmV0dXJuID0gdHJ1ZTsKLQkgICAgICAgICAgICAJCWJyZWFrOwotCSAgICAgICAgICAgIAl9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICAgIGVsc2UgaWYgKGlzRUpCKSAgICAgICAgICAgIAotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldCBlamJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSk7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWpiUGZ2ID0gZlByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlamJQZik7Ci0JICAgICAgICAgICAgc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCA9IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCBlamJQZik7Ci0JICAgICAgICAgICAgdG9SZXR1cm4gPSBmYWxzZTsKLQkgICAgICAgICAgICBmb3IgKElQcm9qZWN0RmFjZXRWZXJzaW9uIHN1cHBvcnRlZEZhY2V0VmVyc2lvbiA6IHN1cHBvcnRlZEZhY2V0VmVyc2lvbkxpc3QgKSB7Ci0JICAgICAgICAgICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIG5leHQgPSBzdXBwb3J0ZWRGYWNldFZlcnNpb247Ci0JICAgICAgICAgICAgCWNvbXBhcmVWZXJzaW9uID0gZWpiUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgICAgICAgICAJaWYgKG5leHQhPSBudWxsICYmIGNvbXBhcmVWZXJzaW9uIT1udWxsICYmIGNvbXBhcmVWZXJzaW9uLmNvbXBhcmVUbyhuZXh0LmdldFZlcnNpb25TdHJpbmcoKSkgPT0gMCkgeyAKLQkgICAgICAgICAgICAJCXRvUmV0dXJuID0gdHJ1ZTsKLQkgICAgICAgICAgICAJCWJyZWFrOwotCSAgICAgICAgICAgIAl9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50KQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldCBhY1BmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFKTsKLQkgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBhY1BmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oYWNQZik7Ci0JICAgICAgICAgICAgc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCA9IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCBhY1BmKTsKLQkgICAgICAgICAgICB0b1JldHVybiA9IGZhbHNlOwotCSAgICAgICAgICAgIGZvciAoSVByb2plY3RGYWNldFZlcnNpb24gc3VwcG9ydGVkRmFjZXRWZXJzaW9uIDogc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCApIHsKLQkgICAgICAgICAgICAJSVByb2plY3RGYWNldFZlcnNpb24gbmV4dCA9IHN1cHBvcnRlZEZhY2V0VmVyc2lvbjsKLQkgICAgICAgICAgICAJY29tcGFyZVZlcnNpb24gPSBhY1Bmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JICAgICAgICAgICAgCWlmIChuZXh0IT0gbnVsbCAmJiBjb21wYXJlVmVyc2lvbiE9bnVsbCAmJiBjb21wYXJlVmVyc2lvbi5jb21wYXJlVG8obmV4dC5nZXRWZXJzaW9uU3RyaW5nKCkpID09IDApIHsgCi0JICAgICAgICAgICAgCQl0b1JldHVybiA9IHRydWU7Ci0JICAgICAgICAgICAgCQlicmVhazsKLQkgICAgICAgICAgICAJfQotCSAgICAgICAgICAgIH0KLQotCSAgICAgICAgICB9IAotCSAgICAgICAgICAKLQkgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgICAgICAgewotCSAgICAgICAgICAvL25vdCBtdWNoIHdlIGNhbiBkbyBoZXJlLCByZXR1cm4gd2hhdCB3ZSd2ZSBjYWxjdWxhdGVkIHRodXMgZmFyCi0JICAgICAgICB9ICAgICAgICAgCi0JICAgICAgfQotCi0JCQotCQlyZXR1cm4gdG9SZXR1cm47Ci0JCQotCX0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcHJvamVjdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhclByb2plY3QuCi0gICAgICogQHJldHVybnMgSVN0YXR1cyBvZiBPSyBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBwcm9qZWN0LCBFSkIgcHJvamVjdCwgb3IgQXBwQ2xpZW50Ci0gICAgICogcHJvamVjdCB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIEVBUiBwcm9qZWN0LiAKLSAgICAgKiBSZXR1cm5zIElTdGF0dXMgd2l0aCBhbiBFUlJPUiBzZXZlcml0eSBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBwcm9qZWN0LCAKLSAgICAgKiBFSkIgcHJvamVjdCwgb3IgQXBwQ2xpZW50IHByb2plY3QgdGhhdCBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIgcHJvamVjdC4gCi0gICAgICogV2hlbiBhbiBJU3RhdHVzIG9mIHNldmVyaXR5IEVSUk9SIGlzIHJldHVybmVkLCB0aGUgSVN0YXR1cycgbWVzc2FnZSB3aWxsIGNvbnRhaW4gdGhlIAotICAgICAqIGxvd2VzdCBKMkVFIGxldmVsIHRoYXQgdGhpcyBwcm9qZWN0IHJlcXVpcmVzIG9uIGFuIEVBUi4KLSAgICAgKiBSZXR1cm5zIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBPSyBpZiBwcm9qZWN0IGlzIG5vdCByZWNvZ25pemVkIGFzIGEgV2ViLCBFSkIsIG9yCi0gICAgICogQXBwQ2xpZW50IHByb2plY3Qgb3IgaWYgZWFyUHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBFQVIgcHJvamVjdC4KLSAgICAgKiBAZGVwcmVjYXRlZCB1c2UgY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSV2l0aG91dFdhcm5pbmcoSVByb2plY3QgcHJvamVjdCwgSVByb2plY3QgZWFyUHJvamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIElTdGF0dXMgY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKElQcm9qZWN0IHByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QpCi0gICAgewotICAgICAgLy9JZiBwcm9qZWN0IGNvbnRhaW5zIHRoZSB3ZWIsIGVqYiwgb3IgYXBwY2xpZW50IGZhY2V0LCBhbmQgZWFyUHJvamVjdCBjb250YWlucyB0aGUgCi0gICAgICAvL2VhciBmYWNldCwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBmYWNldCB2ZXJzaW9ucyBhcmUgc3VjaCB0aGF0IHRoZSBwcm9qZWN0Ci0gICAgICAvL2NhbiBiZSBhZGRlZCB0byB0aGUgZWFyLiAgICAgIAotCi0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICBib29sZWFuIGlzV2ViID0gaXNXZWJDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzRUpCID0gaXNFSkJDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzQXBwQ2xpZW50ID0gaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzRUFSID0gaXNFQVJDb21wb25lbnQoZWFyUHJvamVjdCk7Ci0gICAgICBpZiAoKGlzV2ViIHx8IGlzRUpCIHx8IGlzQXBwQ2xpZW50KSAmJiBpc0VBUikKLSAgICAgIHsgICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZkVhclByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUoZWFyUHJvamVjdCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgSVByb2plY3RGYWNldCBlYXJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRSk7Ci0gICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWFyUGZ2ID0gZkVhclByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlYXJQZik7Ci0gICAgICAgICAgU3RyaW5nIGVhclZlcnNpb24gPSBlYXJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIAotICAgICAgICAgIFN0cmluZyB3ZWJWZXJzaW9uID0gbnVsbDsKLSAgICAgICAgICBTdHJpbmcgZWpiVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgU3RyaW5nIGFjVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICBpZiAoaXNXZWIpCi0gICAgICAgICAgewotICAgICAgICAgICAgSVByb2plY3RGYWNldCB3ZWJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB3ZWJQZnYgPSBmUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKHdlYlBmKTsKLSAgICAgICAgICAgIHdlYlZlcnNpb24gPSB3ZWJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChpc0VKQikgICAgICAgICAgICAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0IGVqYlBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKTsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGVqYlBmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oZWpiUGYpOwotICAgICAgICAgICAgZWpiVmVyc2lvbiA9IGVqYlBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgYWNQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBhY1BmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oYWNQZik7Ci0gICAgICAgICAgICBhY1ZlcnNpb24gPSBhY1Bmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgfSAKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoKGlzV2ViICYmIHdlYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8yX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNFSkIgJiYgZWpiVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzFfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0FwcENsaWVudCAmJiBhY1ZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotICAgICAgICAgICAgICApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFncmVhdGVyVGhhbk9yRXF1YWxUbyhlYXJWZXJzaW9uLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzJfVEVYVCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKChpc1dlYiAmJiB3ZWJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfM19URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzRUpCICYmIGVqYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8wX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNBcHBDbGllbnQgJiYgYWNWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghZ3JlYXRlclRoYW5PckVxdWFsVG8oZWFyVmVyc2lvbiwgSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKTsKLSAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgICBlbHNlIGlmICgoaXNXZWIgJiYgd2ViVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzRfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0VKQiAmJiBlamJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfMV9URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzQXBwQ2xpZW50ICYmIGFjVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCkpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWdyZWF0ZXJUaGFuT3JFcXVhbFRvKGVhclZlcnNpb24sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCk7Ci0gICAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgLy9JZiBmYWNldCBBUEkgdGhyb3dzIGEgQ29yZUV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBjcmVhdGUgYW4gSUZhY2V0ZWRQcm9qZWN0IGZyb20gCi0gICAgICAgICAgLy9hbiBJUHJvamVjdCwgYW4gT0sgU3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQgYW5kIGNsaWVudHMgb2YgdGhpcyB1dGlsaXR5IG1ldGhvZAotICAgICAgICAgIC8vd29uJ3QgcmFpc2UgYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICB9ICAgICAgICAgCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0JCi0gICAgLyoKLSAgICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4gcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB2ZXJzaW9uQgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ3JlYXRlclRoYW5PckVxdWFsVG8oU3RyaW5nIHZlcnNpb25BLCBTdHJpbmcgdmVyc2lvbkIpCi0gICAgewotICAgICAgaWYgKHZlcnNpb25BLmVxdWFscyh2ZXJzaW9uQikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3RBID0gbmV3IFN0cmluZ1Rva2VuaXplcih2ZXJzaW9uQSwgIi4iKTsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0QiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkIsICIuIik7Ci0KLSAgICAgICAgaW50IHNpemVBID0gc3RBLmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGludCBzaXplQiA9IHN0Qi5jb3VudFRva2VucygpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAoc2l6ZUEgPCBzaXplQikKLSAgICAgICAgewotICAgICAgICAgIHNpemUgPSBzaXplQTsKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNpemUgPSBzaXplQjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGludCBhID0gSW50ZWdlci5wYXJzZUludChzdEEubmV4dFRva2VuKCkpOwotICAgICAgICAgIGludCBiID0gSW50ZWdlci5wYXJzZUludChzdEIubmV4dFRva2VuKCkpOwotICAgICAgICAgIGlmIChhICE9IGIpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPiBiOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzaXplQSA+IHNpemVCOwotICAgICAgfQotICAgIH0KLQkKLQkvKioKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybgotICAgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldFdlYkluZlBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCi0JCS8vc2hvdWxkIFdFQi1JTkYgbG9jYXRpb24gYmUgcHVsbGVkIGluIGZyb20gdGhlIC5jb21wb25lbnQgZmlsZSByYXRoZXIgdGhhbiBoYXJkY29kZWQgaGVyZT8KLQkJSVZpcnR1YWxGb2xkZXIgd2ViSW5mRGlyID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoIi9XRUItSU5GIikpOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gd2ViSW5mRGlyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkKLQkJaWYgKCF3ZWJJbmZEaXIuZXhpc3RzKCkpCi0JCXsJCi0JCQl0cnkgCi0JCQl7CQotCQkJCXdlYkluZkRpci5jcmVhdGUoMCxudWxsKTsJCQkJCi0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJe30KLQkJfQkJCi0JCXJldHVybiBtb2R1bGVQYXRoOwotCX0KLQotCS8qKgotCSAgICogQHBhcmFtIHByb2plY3QKLQkgICAqIEByZXR1cm4KLQkgICAqLwotCQlwdWJsaWMgc3RhdGljIElQYXRoIGdldE1ldGFJbmZQYXRoKElQcm9qZWN0IHByb2plY3QpewotCQkJCi0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQotCQkJLy9zaG91bGQgTUVUQS1JTkYgbG9jYXRpb24gYmUgcHVsbGVkIGluIGZyb20gdGhlIC5jb21wb25lbnQgZmlsZSByYXRoZXIgdGhhbiBoYXJkY29kZWQgaGVyZT8KLQkJCUlWaXJ0dWFsRm9sZGVyIG1ldGFJbmZEaXIgPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpLmdldEZvbGRlcihuZXcgUGF0aCgiL01FVEEtSU5GIikpOwotCQkJSVBhdGggbW9kdWxlUGF0aCA9IG1ldGFJbmZEaXIuZ2V0V29ya3NwYWNlUmVsYXRpdmVQYXRoKCk7Ci0JCQkKLQkJCWlmICghbWV0YUluZkRpci5leGlzdHMoKSkKLQkJCXsJCi0JCQkJdHJ5IAotCQkJCXsJCi0JCQkJCW1ldGFJbmZEaXIuY3JlYXRlKDAsbnVsbCk7CQkJCQotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJCXt9Ci0JCQl9CQkKLQkJCXJldHVybiBtb2R1bGVQYXRoOwotCQl9Ci0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEZpcnN0V2ViQ29udGVudFBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQlJUGF0aCBtb2R1bGVQYXRoID0gbnVsbDsKLQkJdHJ5IHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkgIGlmIChNb2R1bGVDb3JlTmF0dXJlLmlzRmxleGlibGVQcm9qZWN0KHByb2plY3QpKSB7Ci0gICAgICAgICAgICBtb2R1bGVQYXRoID0gdmMuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQotCQlyZXR1cm4gbW9kdWxlUGF0aDsJCQkKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXZWJDb250ZW50UGF0aChJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCUlQYXRoIG1vZHVsZVBhdGggPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQlyZXR1cm4gbW9kdWxlUGF0aDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIGdldEZpcnN0V2ViQ29udGVudENvbnRhaW5lcihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSUNvbnRhaW5lciBjb250YWluZXIgPSBudWxsOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gZ2V0Rmlyc3RXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVBhdGgpOwotCQlpZiAocmVzIT1udWxsKXsKLQkJICBjb250YWluZXIgPSByZXMuZ2V0UGFyZW50KCk7Ci0JCX0JCQotCQkgIAotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElDb250YWluZXIgZ2V0V2ViQ29udGVudENvbnRhaW5lcihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSUNvbnRhaW5lciBjb250YWluZXIgPSBudWxsOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShtb2R1bGVQYXRoKTsKLQkJaWYgKHJlcyBpbnN0YW5jZW9mIElDb250YWluZXIpewotCQkgIGNvbnRhaW5lciA9IChJQ29udGFpbmVyKXJlczsKLQkJfQkJCi0JCXJldHVybiBjb250YWluZXI7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IE1vZHVsZSBuYW1lIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpcnN0V2ViTW9kdWxlTmFtZShJUHJvamVjdCBwcm9qZWN0KXsKLSAgICAgIFN0cmluZyBtb2R1bGVOYW1lID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICAgIG1vZHVsZU5hbWUgPSB2Yy5nZXROYW1lKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZXgpe30KLSAgCi0gICAgICByZXR1cm4gbW9kdWxlTmFtZTsgIAkJCQotCX0KLQkKLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJDb21wb25lbnQoSVZpcnR1YWxDb21wb25lbnQgY29tcCl7Ci0JICAgIHJldHVybiBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0R5bmFtaWNXZWJQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLSAgfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VBUkNvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkgICAgcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzRUFSUHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdmFsaWQgRUpCIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQkNvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBpc0VKQkNvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUpCQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNFSkJQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLQl9CQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50Q29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNBcHBsaWNhdGlvbkNsaWVudFByb2plY3QoY29tcC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNVdGlsaXR5UHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQkKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb21wb25lbnRUeXBlSWQoSVByb2plY3QgcHJvamVjdCkgewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0SjJFRVByb2plY3RUeXBlKHByb2plY3QpOwotCX0KLSAgCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSB0b0NvbXBvbmVudE5hbWVzQXJyYXkoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKXsKLQkJU3RyaW5nW10gZWNOYW1lcyA9IG5ldyBTdHJpbmdbY29tcG9uZW50cy5sZW5ndGhdOwotCQlmb3IoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCWVjTmFtZXNbaV0gPSBjb21wb25lbnRzW2ldLmdldE5hbWUoKTsKLQkJfQotCQlyZXR1cm4gZWNOYW1lczsJCQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gdG9Qcm9qZWN0QXJyYXkoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKXsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtjb21wb25lbnRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCXByb2plY3RzW2ldID0gY29tcG9uZW50c1tpXS5nZXRQcm9qZWN0KCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhIEoyRUUgbGV2ZWwsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIHNlcnZsZXQgbGV2ZWwKLQkgKiBAcGFyYW0gajJlZUxldmVsCi0JICogQHJldHVybiB3ZWIgYXBwIHZlcnNpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXIgZ2V0U2VydmxldFZlcnNpb25Gb3JKMkVFVmVyc2lvbihTdHJpbmcgajJlZUxldmVsKXsKLQkJaW50IGFWZXJzaW9uID0gSW50ZWdlci52YWx1ZU9mKGoyZWVMZXZlbCkuaW50VmFsdWUoKTsKLQkJc3dpdGNoIChhVmVyc2lvbikgewotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzJfSUQpOwotCi0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuV0VCXzJfM19JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl80X0lEKTsKLQkJCQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzNfSUQpOwotCQl9CQkKLQl9Ci0JCi0JLyoqCi0JICogR2l2ZW4gYSBKMkVFIGxldmVsLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBFSkIgdmVyc2lvbgotCSAqIEBwYXJhbSBqMmVlTGV2ZWwKLQkgKiBAcmV0dXJuIGVqYiBzcGVjIHZlcnNpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXIgZ2V0RUpCVmVyc2lvbkZvckoyRUVWZXJzaW9uKFN0cmluZyBqMmVlTGV2ZWwpewotCQlpbnQgYVZlcnNpb24gPSBJbnRlZ2VyLnZhbHVlT2YoajJlZUxldmVsKS5pbnRWYWx1ZSgpOwotCQlzd2l0Y2ggKGFWZXJzaW9uKSB7Ci0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzFfMV9JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8wX0lEKTsKLQotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8yXzFfSUQpOwotCQkJCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzJfMF9JRCk7Ci0JCX0JCQkKLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlmIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBKYXZhIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotCSAgICByZXR1cm4gaXNKYXZhQ29tcG9uZW50KHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgZmFjZXRlZCBwcm9qZWN0IHdpdGggb25seSB0aGUgSmF2YSBmYWNldC4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2V0IGZhY2V0cyA9IGZQcm9qZWN0LmdldFByb2plY3RGYWNldHMoKTsKLSAgICAgICAgICAgICAgaWYgKGZhY2V0cy5zaXplKCk9PTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pZmFjZXRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZXF1YWxzKEphdmFGYWNldC5GQUNFVCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1RoaXMgaXMgbm90IGEgZmFjZXRlZCBwcm9qZWN0LiBDaGVjayBpZiB0aGlzIGlzIGEgc2ltcGxlIEphdmEgcHJvamVjdC4gICAgCi0gICAgICAgICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyBhIHZhbGlkIFdlYiBjb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gaXNXZWJDb21wb25lbnQodmMpOyAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0JCi0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdHJ1ZSBBcHBsaWNhdGlvbiBjbGllbnQgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50Q29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpIHsKLQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkKLSAgICAgIHsKLQkgIHJldHVybiBpc0FwcENsaWVudENvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlzIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBFQVIgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUFSQ29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotCSAgcmV0dXJuIGlzRUFSQ29tcG9uZW50KHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElGb2xkZXIgZ2V0T3V0cHV0Q29udGFpbmVyUm9vdCAoSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCXJldHVybiAoSUZvbGRlcilKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXJzKGNvbXBvbmVudC5nZXRQcm9qZWN0KCkpWzBdOwotCX0KLQkKLQkvLyAxOTQ0MzQgLSBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnRzIHRoYXQncyBub3QgZGVsZXRlZCBwcmV2aW91c2x5Ci0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNhbkNyZWF0ZUVBUihJUHJvamVjdCBlYXJQcm9qZWN0KQotICAgIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlpZiggIWVhclByb2plY3QuZXhpc3RzKCkgKXsKLQkJCUlQYXRoIHBhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7Ci0JCQlwYXRoID0gcGF0aC5hcHBlbmQoZWFyUHJvamVjdC5nZXROYW1lKCkpOwotCQkJc3RhdHVzID0gUHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXJOZXcudmFsaWRhdGVFeGlzdGluZyhlYXJQcm9qZWN0LmdldE5hbWUoKSwgcGF0aC50b09TU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0gICAgfQotCQotCi0JIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRKQVJPck1vZHVsZURlcGVuZGVuY3koSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHVyaSkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JICAgIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdCkpCi0JICAgIHsKLQkgICAgICBBcmNoaXZlTWFuaWZlc3QgbWFuaWZlc3QgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5yZWFkTWFuaWZlc3QocHJvamVjdCk7Ci0JICAgICAgbWFuaWZlc3QubWVyZ2VDbGFzc1BhdGgobmV3IFN0cmluZ1tde3VyaX0pOwotCSAgICAgIEoyRUVQcm9qZWN0VXRpbGl0aWVzLndyaXRlTWFuaWZlc3QocHJvamVjdCwgbWFuaWZlc3QpOwotCSAgICAgIGZvcmNlQ2xhc3NwYXRoVXBkYXRlKHByb2plY3QpOwotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRKYXZhUHJvamVjdEFzVXRpbGl0eUphcihJUHJvamVjdCBqYXZhUHJvamVjdCwgSVByb2plY3QgZWFyUHJvamVjdCxJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JICB7Ci0JCSAgdHJ5IHsKLQkJCSAgSURhdGFNb2RlbCBtaWdyYXRpb25kbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBKYXZhUHJvamVjdE1pZ3JhdGlvbkRhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJICBtaWdyYXRpb25kbS5zZXRQcm9wZXJ0eShJSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzLlBST0pFQ1RfTkFNRSwgamF2YVByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCSAgbWlncmF0aW9uZG0uc2V0UHJvcGVydHkoSUphdmFQcm9qZWN0TWlncmF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBCb29sZWFuLkZBTFNFKTsKLQkJCSAgbWlncmF0aW9uZG0uZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JIAotCSAKLQkJCSAgSURhdGFNb2RlbCByZWZkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCQkgIExpc3QgdGFyZ2V0Q29tcExpc3QgPSAoTGlzdCkgcmVmZG0uZ2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCk7Ci0JIAotCQkJICBJVmlydHVhbENvbXBvbmVudCB0YXJnZXRjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChqYXZhUHJvamVjdCk7Ci0JCQkgIElWaXJ0dWFsQ29tcG9uZW50IHNvdXJjZWNvbXBvbmVudCA9IENvbXBvbmVudFV0aWxpdGllcy5nZXRDb21wb25lbnQoZWFyUHJvamVjdC5nZXROYW1lKCkpOwotCQkJICB0YXJnZXRDb21wTGlzdC5hZGQodGFyZ2V0Y29tcG9uZW50KTsKLQkgCi0JCQkgIHJlZmRtLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5TT1VSQ0VfQ09NUE9ORU5ULHNvdXJjZWNvbXBvbmVudCApOwotCQkJICByZWZkbS5zZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUX0NPTVBPTkVOVF9MSVNULCB0YXJnZXRDb21wTGlzdCk7Ci0JCQkgIHJlZmRtLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRfQ09NUE9ORU5UU19ERVBMT1lfUEFUSCwgICIvV0VCLUlORi9saWIiKTsKLQkJCSAgcmVmZG0uZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JCQkJCSAgCi0JCSAgfWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJICAKLQkJICB9Ci0JICB9Ci0JICAKLQkvL0ZvcmNpbmcgY2xhc3NwYXRoIHVwZGF0ZQotCSAgcHVibGljIHN0YXRpYyB2b2lkIGZvcmNlQ2xhc3NwYXRoVXBkYXRlIChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCSAgSjJFRUNvbXBvbmVudENsYXNzcGF0aFVwZGF0ZXIgY2xhc3NwYXRoVXBkYXRlciA9IEoyRUVDb21wb25lbnRDbGFzc3BhdGhVcGRhdGVyLmdldEluc3RhbmNlKCk7Ci0JCSAgQ29sbGVjdGlvbiBwcm9qQ29sbGVjdGlvbiA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwcm9qZWN0KTsKLQkJICBjbGFzc3BhdGhVcGRhdGVyLmZvcmNlVXBkYXRlKHByb2pDb2xsZWN0aW9uLCB0cnVlKTsKLQkJICBJSm9iTWFuYWdlciBqbSA9IEpvYi5nZXRKb2JNYW5hZ2VyKCk7Ci0JCSAgdHJ5ewotCQkJICBqbS5qb2luKEoyRUVDb21wb25lbnRDbGFzc3BhdGhVcGRhdGVyLk1PRFVMRV9VUERBVEVfSk9CX05BTUUsIG51bGwpOwotCQkgIH1jYXRjaChFeGNlcHRpb24gZXhjKXt9Ci0JICB9Ci0JIC8qKgotICAgICAqIERldGVybWluZXMgdGhlIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFIGZhY2V0IHZlcnNpb24gdGhhdAotICAgICAqIG1hdGNoZXMgdGhlIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFIGZhY2V0IHZlcnNpb24KLSAgICAgKiBAcmV0dXJucyB0aGUgdmVyc2lvbiBTdHJpbmcgZm9yIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFIGZhY2V0LCBpZiB0aGVyZSBpcyBwcm9ibGVtCi0gICAgICogdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgdmVyc2lvbiwgZWl0aGVyIHRoZSBkZWZhdWx0IHZlcnNpb24gb3IgdGhlIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbgotICAgICAqIHdpbGwgYmUgcmV0dXJuZWQKLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJKMkVFVmVyc2lvbkZyb21FQVJKMkVFVmVyc2lvbihJUHJvamVjdCBlYXJQcm9qZWN0KSB7Ci0JCVN0cmluZyByZXR1cm5WZXJzaW9uID0gRWFyVXRpbGl0aWVzLkRZTkFNSUNfV0VCX0ZBQ0VULmdldERlZmF1bHRWZXJzaW9uKCkuZ2V0VmVyc2lvblN0cmluZygpOwotCQl0cnkgewotCQlyZXR1cm5WZXJzaW9uID0gRWFyVXRpbGl0aWVzLkRZTkFNSUNfV0VCX0ZBQ0VULmdldExhdGVzdFZlcnNpb24oKS5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JICAgIElGYWNldGVkUHJvamVjdCBmRWFyUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShlYXJQcm9qZWN0KTsKLQkgICAgSVByb2plY3RGYWNldCBlYXJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRSk7Ci0JICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGVhclBmdiA9IGZFYXJQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oZWFyUGYpOwotCSAgICBJUHJvamVjdEZhY2V0IHdlYlBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKTsKLQkgICAgcmV0dXJuVmVyc2lvbj0gRWFyVXRpbGl0aWVzLmdldFN1cHBvcnRlZEZhY2V0cyhlYXJQZnYsIHdlYlBmKS5nZXQoMCkuZ2V0VmVyc2lvblN0cmluZygpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy9ub3RoaW5nIHdlIGNhbiBkbyBoZXJlLCByZXR1cm4gd2hhdCB3ZSBoYXZlIGNhbGN1bGF0ZWQgdGh1cyBmYXIKLQkJfQotCSAgICByZXR1cm4gcmV0dXJuVmVyc2lvbjsKLQl9Ci0JIC8qKgotICAgICAqIERldGVybWluZXMgdGhlIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFIGZhY2V0IHZlcnNpb24gdGhhdAotICAgICAqIG1hdGNoZXMgdGhlIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFIGZhY2V0IHZlcnNpb24KLSAgICAgKiBAcmV0dXJucyB0aGUgdmVyc2lvbiBTdHJpbmcgZm9yIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFIGZhY2V0LCBpZiB0aGVyZSBpcyBwcm9ibGVtCi0gICAgICogdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgdmVyc2lvbiwgZWl0aGVyIHRoZSBkZWZhdWx0IHZlcnNpb24gb3IgdGhlIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbgotICAgICAqIHdpbGwgYmUgcmV0dXJuZWQKLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBcHBDbGllbnRKMkVFVmVyc2lvbkZyb21FQVJKMkVFVmVyc2lvbihJUHJvamVjdCBlYXJQcm9qZWN0KSB7Ci0JCVN0cmluZyByZXR1cm5WZXJzaW9uID0gRWFyVXRpbGl0aWVzLkFQUExJQ0FUSU9OX0NMSUVOVF9GQUNFVC5nZXREZWZhdWx0VmVyc2lvbigpLmdldFZlcnNpb25TdHJpbmcoKTsKLQkJdHJ5IHsKLQkJcmV0dXJuVmVyc2lvbiA9IEVhclV0aWxpdGllcy5BUFBMSUNBVElPTl9DTElFTlRfRkFDRVQuZ2V0TGF0ZXN0VmVyc2lvbigpLmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgSUZhY2V0ZWRQcm9qZWN0IGZFYXJQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGVhclByb2plY3QpOwotCSAgICBJUHJvamVjdEZhY2V0IGVhclBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFKTsKLQkgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWFyUGZ2ID0gZkVhclByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlYXJQZik7Ci0JICAgIElQcm9qZWN0RmFjZXQgYWNQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSk7Ci0JICAgIHJldHVyblZlcnNpb249IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCBhY1BmKS5nZXQoMCkuZ2V0VmVyc2lvblN0cmluZygpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy9ub3RoaW5nIHdlIGNhbiBkbyBoZXJlLCByZXR1cm4gd2hhdCB3ZSBoYXZlIGNhbGN1bGF0ZWQgdGh1cyBmYXIKLQkJfQotCSAgICByZXR1cm4gcmV0dXJuVmVyc2lvbjsKLQl9Ci0JIC8qKgotICAgICAqIERldGVybWluZXMgdGhlIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFIGZhY2V0IHZlcnNpb24gdGhhdAotICAgICAqIG1hdGNoZXMgdGhlIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFIGZhY2V0IHZlcnNpb24KLSAgICAgKiBAcmV0dXJucyB0aGUgdmVyc2lvbiBTdHJpbmcgZm9yIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFIGZhY2V0LCBpZiB0aGVyZSBpcyBwcm9ibGVtCi0gICAgICogdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgdmVyc2lvbiwgZWl0aGVyIHRoZSBkZWZhdWx0IHZlcnNpb24gb3IgdGhlIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbgotICAgICAqIHdpbGwgYmUgcmV0dXJuZWQKLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFSkJKMkVFVmVyc2lvbkZyb21FQVJKMkVFVmVyc2lvbihJUHJvamVjdCBlYXJQcm9qZWN0KSB7Ci0JCVN0cmluZyByZXR1cm5WZXJzaW9uID0gRWFyVXRpbGl0aWVzLkVKQl9GQUNFVC5nZXREZWZhdWx0VmVyc2lvbigpLmdldFZlcnNpb25TdHJpbmcoKTsKLQkJdHJ5IHsKLQkJcmV0dXJuVmVyc2lvbiA9IEVhclV0aWxpdGllcy5FSkJfRkFDRVQuZ2V0TGF0ZXN0VmVyc2lvbigpLmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgSUZhY2V0ZWRQcm9qZWN0IGZFYXJQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGVhclByb2plY3QpOwotCSAgICBJUHJvamVjdEZhY2V0IGVhclBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFKTsKLQkgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWFyUGZ2ID0gZkVhclByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlYXJQZik7Ci0JICAgIElQcm9qZWN0RmFjZXQgZWpiUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VKQl9NT0RVTEUpOwotCSAgICByZXR1cm5WZXJzaW9uPSBFYXJVdGlsaXRpZXMuZ2V0U3VwcG9ydGVkRmFjZXRzKGVhclBmdiwgZWpiUGYpLmdldCgwKS5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL25vdGhpbmcgd2UgY2FuIGRvIGhlcmUsIHJldHVybiB3aGF0IHdlIGhhdmUgY2FsY3VsYXRlZCB0aHVzIGZhcgotCQl9Ci0JICAgIHJldHVybiByZXR1cm5WZXJzaW9uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0phdmFNT0ZVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSmF2YU1PRlV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NTVmZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSmF2YU1PRlV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2gubmF0dXJlLkVNRk5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLnV0aWxpdHkuSmVtUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVJlZkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVZpc2liaWxpdHlLaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLQotLyoqCi0qIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggdGhlIEphdmFNT0YKLSovCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBKYXZhTU9GVXRpbHMKLXsKLSAvKioKLSAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNsYXNzIG9mIHRoZSBnaXZlbiBuYW1lIGlzIGxvYWRhYmxlIGluIHRoZSBnaXZlbgotICAqIHByb2plY3QuCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGlzIGxvYWRhYmxlIGFuZCBubyBleGNlcHRpb25zIGFyZSB0aHJvd24uIAotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDbGFzc0xvYWRhYmxlKFN0cmluZyBjbGFzc05hbWUsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgIAlyZXR1cm4gaXNDbGFzc0xvYWRhYmxlKGdldEphdmFDbGFzcyhjbGFzc05hbWUscHJvamVjdCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ2xhc3NMb2FkYWJsZShKYXZhQ2xhc3MgamF2YUNsYXNzKQotICB7Ci0JcmV0dXJuIGphdmFDbGFzcy5pc0V4aXN0aW5nVHlwZSgpOyAgICAKLSAgfQotCi0gIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2xhc3MgaGFzIGEgcHVibGljIGNvbnN0cnVjdG9yCi0gICogd2l0aCBhbiBlbXB0eSBwYXJhbWV0ZXIgbGlzdC4KLSAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgaXMgbG9hZGFibGUgZnJvbSB0aGUgcHJvamVjdCBhbmQgdGhlIAotICAqICAgICAgICAgY2xhc3MgaGFzIGEgcHVibGljIGNvbnN0cnVjdG9yIHdpdGggYW4gZW1wdHkgcGFyYW1ldGVyIGxpc3QgIAotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzUHVibGljRGVmYXVsdEN0b3IoU3RyaW5nIGNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBoYXNQdWJsaWNEZWZhdWx0Q3RvcihnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1B1YmxpY0RlZmF1bHRDdG9yKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gIHsKLSAgIAotICAgIExpc3QgbWV0aG9kTGlzdCA9IGphdmFDbGFzcy5nZXRNZXRob2RzKCk7Ci0gICAgaWYgKG1ldGhvZExpc3Q9PW51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEl0ZXJhdG9yIGlNZXRob2RzID0gbWV0aG9kTGlzdC5pdGVyYXRvcigpOwotICAgIGJvb2xlYW4gdXNlckRlZmluZWRDdG9yID0gZmFsc2U7Ci0gICAgd2hpbGUgKGlNZXRob2RzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNZXRob2QgdGhpc01ldGhvZCA9IChNZXRob2QpaU1ldGhvZHMubmV4dCgpOwotCi0gICAgICBpZiAodGhpc01ldGhvZC5pc0NvbnN0cnVjdG9yKCkpCi0gICAgICB7Ci0gICAgICAgIHVzZXJEZWZpbmVkQ3RvciA9IHRydWU7IAotCi0gICAgICAgIC8vU2luY2UgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBjdG9yLCB0aGUgZGVmYXVsdCBjdG9yIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCi0gICAgICAgIC8vV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgdXNlciBoYXMgcHJvdmlkZWQgYSBwdWJsaWMgY3RvciB3aXRoIG5vIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgLy9jaGVjayBpZiBwdWJsaWMKLSAgICAgICAgaWYgKHRoaXNNZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IEphdmFWaXNpYmlsaXR5S2luZC5QVUJMSUMpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3NlZSBpZiBwYXJhbWV0ZXIgbGlzdCBpcyBlbXB0eQotICAgICAgICAgIExpc3QgcGFyYW1MaXN0ID0gdGhpc01ldGhvZC5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgaWYgKHBhcmFtTGlzdC5pc0VtcHR5KCkgKQotICAgICAgICAgIHsKLQkgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICAgIGlmICh1c2VyRGVmaW5lZEN0b3IpCi0gICAgewotCSAgcmV0dXJuIGZhbHNlOyAvL2lmIHRoZSB1c2VyIGRlZmluZWQgYSBjdG9yIGFuZCB3ZSBzdGlsbCBoYXZlbid0Ci0JICAJICAgICAgICAgICAgLy9yZXR1cm5lZCB0cnVlLCBub25lIG9mIHRoZW0gd2VyZSBwdWJsaWMgd2l0aCBubyBwYXJhbWV0ZXJzLgotICAgIH0KLSAgICBlbHNlCi0gICAgeyAKLSAgICAgICByZXR1cm4gdHJ1ZTsgICAgCi0gICAgfQotCi0gIH0KLSAgLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLgotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBpbnRlcmZhY2VOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgaW50ZXJmYWNlCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGFuZCBpbnRlcmZhY2UgYXJlIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kCi0gICogICAgICAgICB0aGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaW1wbGVtZW50c0ludGVyZmFjZShTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgaW50ZXJmYWNlTmFtZSwgSVByb2plY3QgcHJvamVjdCkKLSAgCQkJdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgcmV0dXJuIGltcGxlbWVudHNJbnRlcmZhY2UoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSwgcHJvamVjdCksIGdldEphdmFDbGFzcyhpbnRlcmZhY2VOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotcHVibGljIHN0YXRpYyBib29sZWFuIGltcGxlbWVudHNJbnRlcmZhY2UoSmF2YUNsYXNzIGphdmFDbGFzcywgSmF2YUNsYXNzIGludGVyZmFjZUNsYXNzKQotICB7Ci0gICAKLSAgICBpZiAoIWphdmFDbGFzcy5pc0V4aXN0aW5nVHlwZSgpKSAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpbnRlcmZhY2VDbGFzcy5pc0V4aXN0aW5nVHlwZSgpKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICByZXR1cm4gamF2YUNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2UoaW50ZXJmYWNlQ2xhc3MpOwotICB9Ci0KLSAgLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjbGFzcyBleHRlbmRzIHRoZSBzcGVjaWZpZWQgc3VwZXJjbGFzcwotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBzdXBlckNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHN1cGVyY2xhc3MKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgYW5kIHN1cGVyQ2xhc3MgYXJlIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kCi0gICogICAgICAgICB0aGUgY2xhc3MgZXh0ZW5kcyB0aGUgc3VwZXJDbGFzcwotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXh0ZW5kc0NsYXNzKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBzdXBlckNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkKLSAgICAgICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5kc0NsYXNzKGdldEphdmFDbGFzcyhjbGFzc05hbWUscHJvamVjdCksIGdldEphdmFDbGFzcyhzdXBlckNsYXNzTmFtZSwgcHJvamVjdCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGV4dGVuZHNDbGFzcyhKYXZhQ2xhc3MgamF2YUNsYXNzLCBKYXZhQ2xhc3Mgc3VwZXJDbGFzcykKLSAgewotICAgIHJldHVybiBzdXBlckNsYXNzLmlzQXNzaWduYWJsZUZyb20oamF2YUNsYXNzKTsKLSAgfQotCi0gIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgYWN0dWFsbHkgYW4gaW50ZXJmYWNlCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGlzIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kIGlzIAotICAqICAgICAgICAgYWN0dWFsbHkgYW4gaW50ZXJmYWNlCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ludGVyZmFjZShTdHJpbmcgY2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgIHJldHVybiBpc0ludGVyZmFjZShnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ludGVyZmFjZShKYXZhQ2xhc3MgamF2YUNsYXNzKQotICB7Ci0gICAgICByZXR1cm4gamF2YUNsYXNzLmlzSW50ZXJmYWNlKCk7Ci0gIH0KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzQWJzdHJhY3RNZXRob2RzIChTdHJpbmcgY2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotIAl7Ci0JICAgIHJldHVybiBoYXNBYnN0cmFjdE1ldGhvZHMoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSwgcHJvamVjdCkpOwotICAJfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNBYnN0cmFjdE1ldGhvZHMgKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gCXsKLQkgICBMaXN0IG1ldGhvZExpc3QgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotICAgICAgIGlmIChtZXRob2RMaXN0PT1udWxsKQotICAgICAgCXJldHVybiBmYWxzZTsKLQotCSAgIEl0ZXJhdG9yIGlNZXRob2RzID0gbWV0aG9kTGlzdC5pdGVyYXRvcigpOwotCSAgIHdoaWxlIChpTWV0aG9kcy5oYXNOZXh0KCkpCi0gICAgCXsKLSAgICAgIAkJTWV0aG9kIHRoaXNNZXRob2QgPSAoTWV0aG9kKWlNZXRob2RzLm5leHQoKTsKLQkJCWlmICggdGhpc01ldGhvZC5pc0Fic3RyYWN0KCkpIHJldHVybiB0cnVlOwotCSAgIAl9Ci0JCXJldHVybiBmYWxzZTsKLSAJfQotCi0gIC8qIAotICAgKiAKLSAgICovCi0gLyoqCi0gKiBAcGFyYW0gY2xhc3NRTmFtZSBGdWxseSBxdWFsaWZpZWQgY2xhc3NuYW1lIChwYWNrYWdlTmFtZSArIHR5cGVOYW1lKQotICogQHBhcmFtIHByb2plY3QKLSAqIEByZXR1cm4KLSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICovCi1wdWJsaWMgc3RhdGljIEphdmFDbGFzcyBnZXRKYXZhQ2xhc3MoU3RyaW5nIGNsYXNzUU5hbWUgLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotIAl7Ci0JIAlFTUZOYXR1cmUgak1PRiA9IEplbVByb2plY3RVdGlsaXRpZXMuZ2V0SkVNX0VNRl9OYXR1cmUocHJvamVjdCwgdHJ1ZSk7Ci0JIAlyZXR1cm4gKEphdmFDbGFzcylKYXZhUmVmRmFjdG9yeS5lSU5TVEFOQ0UucmVmbGVjdFR5cGUoY2xhc3NRTmFtZSxqTU9GLmdldFJlc291cmNlU2V0KCkpOwotIAl9Ci0gCi0gLyoqCi0gKiBAcGFyYW0gcGFja2FnZU5hbWUKLSAqIEBwYXJhbSB0eXBlTmFtZQotICogQHBhcmFtIHByb2plY3QKLSAqIEByZXR1cm4KLSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICovCi1wdWJsaWMgc3RhdGljIEphdmFDbGFzcyBnZXRKYXZhQ2xhc3MoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgdHlwZU5hbWUgLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkgCUVNRk5hdHVyZSBqTU9GID0gSmVtUHJvamVjdFV0aWxpdGllcy5nZXRKRU1fRU1GX05hdHVyZShwcm9qZWN0LCB0cnVlKTsKLQkgCXJldHVybiAoSmF2YUNsYXNzKUphdmFSZWZGYWN0b3J5LmVJTlNUQU5DRS5yZWZsZWN0VHlwZShwYWNrYWdlTmFtZSwgdHlwZU5hbWUsIGpNT0YuZ2V0UmVzb3VyY2VTZXQoKSk7Ci0JfQotCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmFsaWRTRUlGaWxlKEphdmFDbGFzcyBiZWFuQ2xhc3MsIEphdmFDbGFzcyBzZWlDbGFzcykKLSAJewotIAkJaWYgKCFzZWlDbGFzcy5pc0ludGVyZmFjZSgpKQotIAkJCXJldHVybiBmYWxzZTsKLQotCQlWZWN0b3IgYmVhbk1ldGhvZHNMaXN0ID0gbmV3IFZlY3RvcigpOwotIAkJTGlzdCBiZWFuTWV0aG9kcyA9IGJlYW5DbGFzcy5nZXRNZXRob2RzKCk7Ci0JCUl0ZXJhdG9yIGJlYW5NZXRob2RzSXRlcmF0b3IgPSBiZWFuTWV0aG9kcy5pdGVyYXRvcigpOwotCSAgIAl3aGlsZSAoYmVhbk1ldGhvZHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgCXsKLSAgICAgIAkJTWV0aG9kIHRoaXNNZXRob2QgPSAoTWV0aG9kKWJlYW5NZXRob2RzSXRlcmF0b3IubmV4dCgpOwotCQkJYmVhbk1ldGhvZHNMaXN0LmFkZCh0aGlzTWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSk7Ci0JICAgCX0KLQotCQlMaXN0IHNlaU1ldGhvZHMgPSBzZWlDbGFzcy5nZXRNZXRob2RzKCk7Ci0gCQlpZiAoYmVhbk1ldGhvZHMgPT0gbnVsbCApIHsKLSAJCQlpZiAoIHNlaU1ldGhvZHMgPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gCQkJZWxzZQlyZXR1cm4gZmFsc2U7Ci0gCQl9Ci0JCWlmIChzZWlNZXRob2RzID09IG51bGwpIHJldHVybiBmYWxzZTsKLQotCQlJdGVyYXRvciBzZWlNZXRob2RzSXRlcmF0b3IgPSBzZWlNZXRob2RzLml0ZXJhdG9yKCk7Ci0JICAgCXdoaWxlIChzZWlNZXRob2RzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIAl7Ci0gICAgICAJCU1ldGhvZCB0aGlzTWV0aG9kID0gKE1ldGhvZClzZWlNZXRob2RzSXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKCAhYmVhbk1ldGhvZHNMaXN0LmNvbnRhaW5zKHRoaXNNZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkgICAJfQotCQlyZXR1cm4gdHJ1ZTsKLSAJCQotIAl9Ci0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9SZXNvdXJjZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9SZXNvdXJjZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNmE0ODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vUmVzb3VyY2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDIxICAgMTM2NzYxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUwMyAgIDEyNjgxOSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDgwMTIyICAgMjE1ODY2IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDMwMyAgIDIxODY5NiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBBUElzIHVzaW5nIEVKQkFydGlmYWN0RWRpdCBub3QgYWJsZSB0byBkZWFsIHdpdGggc29tZSBFSkIgMy4wIGJlYW5zIHByb3Blcmx5Ci0gKiAyMDA4MDYyNiAgIDIzNjY0NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvbnZlbnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXBwbGljYXRpb25jbGllbnQuY29tcG9uZW50Y29yZS51dGlsLkFwcENsaWVudEFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb21wb25lbnRjb3JlLnV0aWwuRUFSQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLlNlc3Npb25CZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwuU3RydWN0dXJlRWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwuV29ya2JlbmNoQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JVVJMUHJvdmlkZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB1c2VmdWwgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIEVjbGlwc2UgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUmVzb3VyY2VVdGlscyB7Ci0KLQkvLyBLZWVwcyB0aGUgSVdvcmtzcGFjZVJvb3QgaGFuZ2luZyBhcm91bmQuIFNlZSBnZXRXb3Jrc3BhY2VSb290KCkuCi0JcHJpdmF0ZSBzdGF0aWMgSVdvcmtzcGFjZVJvb3Qgcm9vdF8gPSBudWxsOwotCi0JLy8gS2VlcHMgdGhlIElXb3Jrc3BhY2UgaGFuZ2luZyBhcm91bmQuIFNlZSBnZXRXb3Jrc3BhY2UoKS4KLQotCXByaXZhdGUgc3RhdGljIElXb3Jrc3BhY2Ugd29ya3NwYWNlXyA9IG51bGw7Ci0KLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBubyBKYXZhIG9yIFdlYiBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9OT05FID0gMDsKLQotCS8qKgotCSAqIEFzIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UHJvamVjdFR5cGUgZ2V0UHJvamVjdFR5cGUoKX0sIGluZGljYXRlcyB0aGF0Ci0JICogdGhlIGdpdmVuIHByb2plY3QgaGFzIGEgSmF2YSBwcm9qZWN0IG5hdHVyZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJ5dGUgUFJPSkVDVF9UWVBFX0pBVkEgPSAxOwotCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgYSBXZWIgcHJvamVjdCBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9XRUIgPSAyOwotCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgYW4gRUpCIHByb2plY3QgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfRUpCID0gNDsKLQkKLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBhbiBBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBuYXR1cmUuCi0JICovCQotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfQVBQQ0xJRU5UID0gODsKLQotCS8qKgotCSAqIFRoZSBTT0FQIHJwY3JvdXRlciBzZXJ2bGV0IGV4dGVuc2lvbiB0byBiZSBhZGRlZCB0byB3ZWIgcHJvamVjdCBVUkwKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWTEVUX0VYVCA9ICIvc2VydmxldC9ycGNyb3V0ZXIiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQ0xJRU5UX1dFQl9QUk9KRUNUX0VYVCA9ICJDbGllbnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FSkJfUFJPSkVDVF9FWFQgPSAiRUpCQ2xpZW50IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FSkJfUFJPSkVDVF9OQU1FID0gIldlYlNlcnZpY2VFSkJQcm9qZWN0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FSkJfQ09NUE9ORU5UX05BTUUgPSAiV2ViU2VydmljZUVKQiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfV0VCX1BST0pFQ1RfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfV0VCX0NPTVBPTkVOVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9ST1VURVJfUFJPSkVDVF9FWFQgPSAiUm91dGVyIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NFUlZJQ0VfRUFSX1BST0pFQ1RfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdEVBUiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0VSVklDRV9FQVJfQ09NUE9ORU5UX05BTUUgPSAiV2ViU2VydmljZVByb2plY3RFQVIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FQVJfUFJPSkVDVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0Q2xpZW50RUFSIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DTElFTlRfRUFSX0NPTVBPTkVOVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0Q2xpZW50RUFSIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FQVJfRVhUID0gIkVBUiI7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJV29ya3NwYWNlUm9vdCBvYmplY3QuCi0JICogQHJldHVybiBUaGUgSVdvcmtzcGFjZVJvb3Qgb2JqZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZVJvb3QgZ2V0V29ya3NwYWNlUm9vdCgpIHsKLQkJaWYgKHJvb3RfID09IG51bGwpIHsKLQkJCXJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJfQotCQlyZXR1cm4gcm9vdF87Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSVdvcmtzcGFjZSBvYmplY3QuCi0JICogQHJldHVybiBUaGUgSVdvcmtzcGFjZSBvYmplY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJaWYgKHdvcmtzcGFjZV8gPT0gbnVsbCkgewotCQkJaWYgKHJvb3RfID09IG51bGwpIHsKLQkJCQlyb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQl9Ci0JCQl3b3Jrc3BhY2VfID0gcm9vdF8uZ2V0V29ya3NwYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHdvcmtzcGFjZV87Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX1vZiB0aGUKLQkgKiBnaXZlbiBhYnNvbHV0ZSBwYXRobmFtZSBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGhuYW1lCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UoU3RyaW5nIGFic29sdXRlUGF0aG5hbWUpIHsKLQkJaWYgKGFic29sdXRlUGF0aG5hbWUgPT0gbnVsbCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGZpbmRSZXNvdXJjZShuZXcgUGF0aChhYnNvbHV0ZVBhdGhuYW1lKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX1vZiB0aGUKLQkgKiBnaXZlbiBhYnNvbHV0ZSBwYXRoIG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIDxjb2RlPklQYXRoPC9jb2RlPiBvZiB0aGUgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCWlmIChhYnNvbHV0ZVBhdGggPT0gbnVsbCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIoYWJzb2x1dGVQYXRoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfW9mIHRoZQotCSAqIGdpdmVuIGZpbGUgc3lzdGVtIHJlbGF0aXZlIHBhdGhuYW1lIGFuZCBwcm9qZWN0IG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0JICoKLQkgKiBAcGFyYW0gZmlsZVBhdGggRmlsZSBzeXN0ZW0gcmVsYXRpdmUgcGF0aG5hbWUKLQkgKiBAcGFyYW0gcHJvamVjdCBQcm9qZWN0Ci0JICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2VBdExvY2F0aW9uKFN0cmluZyBmaWxlUGF0aCwgSVByb2plY3QgcHJvamVjdCkgewotCQkKLQkJcmV0dXJuIGZpbmRSZXNvdXJjZShmaW5kUGF0aEF0TG9jYXRpb24oIG5ldyBQYXRoKGZpbGVQYXRoKSwgcHJvamVjdCkpOwotCX0KLQkKLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byBjb252ZXJ0IGEgcGF0aCB0aGF0IGlzIHJlbGF0aXZlIHRvIGEgZmlsZSBzeXN0ZW0KLQkgKiB0byBhIHBhdGggdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlLiBJbnN0ZWFkIG9mIGNvbXBhcmluZyB0aGUKLQkgKiBmaWxlUGF0aCB3aXRoIHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIHRoZSB3b3Jrc3BhY2UgKGkuZS4KLQkgKiBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpKSwgdGhlIGZpbGVQYXRoIGlzIGNvbXBhcmVkIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSBwcm9qZWN0Ci0JICogc2luY2UgdGhlIHByb2plY3QgY291bGQgYmUgaW4gYSBsb2NhdGlvbiBvdGhlciB0aGFuIHRoZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUKLQkgKiB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIGZpbGVQYXRoCUZpbGUgcGF0aCByZWxhdGl2ZSB0byBhIGZpbGUgc3lzdGVtCi0JICogQHBhcmFtIHByb2plY3QJVGhlIHByb2plY3QgdGhlIGZpbGUgaXMgaW4KLQkgKiBAcmV0dXJuIAkJCVBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZmluZFBhdGhBdExvY2F0aW9uKElQYXRoIGZpbGVQYXRoLCBJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQYXRoIHJlc3VsdCA9IG51bGw7Ci0KLQkJSVBhdGggcHJvamVjdExvY2F0aW9uID0gcHJvamVjdC5nZXRMb2NhdGlvbigpOwotCi0JCWlmIChwcm9qZWN0TG9jYXRpb24ubWF0Y2hpbmdGaXJzdFNlZ21lbnRzKGZpbGVQYXRoKSA9PSBwcm9qZWN0TG9jYXRpb24KLQkJCQkuc2VnbWVudENvdW50KCkpIHsKLQkJCWZpbGVQYXRoID0gZmlsZVBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhwcm9qZWN0TG9jYXRpb24KLQkJCQkJLnNlZ21lbnRDb3VudCgpIC0gMSk7Ci0JCQlyZXN1bHQgPSBmaWxlUGF0aC5zZXREZXZpY2UobnVsbCk7Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIHN0cmluZyBhcyBhIG5hbWUgZm9yIGEgcmVzb3VyY2Ugb2YgdGhlIGdpdmVuIHR5cGUocykuCi0JICogVGhpcyBtZXRob2Qgb2JleXMgdGhlIGNvbnRyYWN0IG9mCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2UjdmFsaWRhdGVOYW1lIElXb3Jrc3BhY2UudmFsaWRhdGVOYW1lKCl9LgotCSAqIAotCSAqIEBwYXJhbSBzZWdtZW50Ci0JICogICAgICAgICAgICBUaGUgcGF0aCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gdHlwZU1hc2sKLQkgKiAgICAgICAgICAgIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+IHR5cGUgb3IgdHlwZXMuCi0JICogQHJldHVybiBUaGUgc3RhdHVzIHdpdGggYSB2YWx1ZSBpZiA8Y29kZT5JU3RhdHVzLk9LPC9jb2RlPiBpZiB0aGUgcGF0aAotCSAqICAgICAgICAgaXMgdmFsaWQsIG9yIHdpdGggYXBwcm9wcmlhdGUgc2V2ZXJpdHkgYW5kIG1lc3NhZ2UgaW5mb3JtYXRpb24gaWYKLQkgKiAgICAgICAgIHRoZSBwYXRoIGlzIG5vdCB2YWxpZC4KLQkgKiAgICAgICAgIAotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkICAgICAgICAgCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIHZhbGlkYXRlTmFtZShTdHJpbmcgc2VnbWVudCwgaW50IHR5cGVNYXNrKSB7Ci0JCXJldHVybiBnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZU5hbWUoc2VnbWVudCwgdHlwZU1hc2spOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBwYXRoIG9mIGEgcmVzb3VyY2Ugb2YgdGhlIGdpdmVuCi0JICogdHlwZShzKS4gVGhpcyBtZXRob2Qgb2JleXMgdGhlIGNvbnRyYWN0IG9mCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2UjdmFsaWRhdGVQYXRoIElXb3Jrc3BhY2UudmFsaWRhdGVQYXRoKCl9LgotCSAqIAotCSAqIEBwYXJhbSBwYXRoCi0JICogICAgICAgICAgICBUaGUgcGF0aCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gdHlwZU1hc2sKLQkgKiAgICAgICAgICAgIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+IHR5cGUgb3IgdHlwZXMuCi0JICogQHJldHVybiBUaGUgc3RhdHVzIHdpdGggYSB2YWx1ZSBpZiA8Y29kZT5JU3RhdHVzLk9LPC9jb2RlPiBpZiB0aGUgcGF0aAotCSAqICAgICAgICAgaXMgdmFsaWQsIG9yIHdpdGggYXBwcm9wcmlhdGUgc2V2ZXJpdHkgYW5kIG1lc3NhZ2UgaW5mb3JtYXRpb24gaWYKLQkgKiAgICAgICAgIHRoZSBwYXRoIGlzIG5vdCB2YWxpZC4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZCAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTdGF0dXMgdmFsaWRhdGVQYXRoKFN0cmluZyBwYXRoLCBpbnQgdHlwZU1hc2spIHsKLQkJcmV0dXJuIGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlUGF0aChwYXRoLCB0eXBlTWFzayk7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIHR5cGUgbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZU5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBKYXZhIHR5cGUgbmFtZS4KLQkgKiBAcmV0dXJuIFRoZSBzdGF0dXMgd2l0aCBhIHZhbHVlIG9mIDxjb2RlPklTdGF0dXMuT0s8L2NvZGU+IGlmIHRoZSBuYW1lCi0JICogICAgICAgICBpcyB2YWxpZCwgb3Igd2l0aCBhcHByb3ByaWF0ZSBzZXZlcml0eSBhbmQgbWVzc2FnZSBpbmZvcm1hdGlvbiBpZgotCSAqICAgICAgICAgbmFtZSBpcyBub3QgdmFsaWQuIFRoZSBwcmltaXRpdmUgdHlwZXMgKGJvb2xlYW4sIGNoYXIsIGJ5dGUsCi0JICogICAgICAgICBzaG9ydCwgaW50LCBsb25nLCBmbG9hdCwgZG91YmxlKSBhcmUgdmFsaWQuIEFycmF5cyBvZiB2YWxpZCB0eXBlcwotCSAqICAgICAgICAgYXJlIHRoZW1zZWx2ZXMgdmFsaWQuCi0JICogQGRlcHJlY2F0ZWQgdXNlIEphdmFDb252ZW50aW9ucyBpbiB0aGUgamR0IGNvcmUgCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIHZhbGlkYXRlSmF2YVR5cGVOYW1lKFN0cmluZyB0eXBlTmFtZSkgewotCQkvLwotCQkvLyBTdHJpcCBvZmYgdGhlIHRyYWlsaW5nIGFycmF5IGJpdHMsIGlmIGFueS4KLQkJLy8KLQkJaW50IGEgPSB0eXBlTmFtZS5pbmRleE9mKCdbJyk7Ci0JCWlmIChhID4gMCkgewotCQkJdHlwZU5hbWUgPSB0eXBlTmFtZS5zdWJzdHJpbmcoMCwgYSk7Ci0JCX0KLQkJLy8KLQkJLy8gQWxsb3cgcHJpbWl0aXZlcy4KLQkJLy8KLQkJaWYgKGlzUHJpbWl0aXZlSmF2YVR5cGUodHlwZU5hbWUpKSB7Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBXZWJTZXJ2aWNlUGx1Z2luLklELCAwLCAiIiwgbnVsbCk7Ci0JCX0KLQkJLy8KLQkJLy8gRGVmZXIgdG8gSmF2YUNvbnZlbnRpb25zLgotCQkvLwotCQlyZXR1cm4gSmF2YUNvbnZlbnRpb25zLnZhbGlkYXRlSmF2YVR5cGVOYW1lKHR5cGVOYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnR5cGVOYW1lPC9jb2RlPiBpcyBhIEphdmEgcHJpbWl0aXZlCi0JICogKGJvb2xlYW4sIGNoYXIsIGJ5dGUsIHNob3J0LCBpbnQsIGxvbmcsIGZsb2F0LCBkb3VibGUpLgotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHlwZSBuYW1lIGlzIGEgSmF2YSBwcmltaXRpdmUuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltaXRpdmVKYXZhVHlwZShTdHJpbmcgdHlwZU5hbWUpIHsKLQkJcmV0dXJuICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImNoYXIiKQotCQkJCXx8IHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygic2hvcnQiKQotCQkJCXx8IHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJsb25nIikKLQkJCQl8fCB0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaGFuZGxlIG9mIHRoZSBJUHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnaXZlbgotCSAqIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4uIE5laXRoZXIgdGhlIGdpdmVuIHBhdGggbm9yIHRoZSBwcm9qZWN0IG5lZWQKLQkgKiBleGlzdCBpbiB0aGUgd29ya3NwYWNlLiBUaGUgcGF0aCBtdXN0IGJlIGFic29sdXRlLCBhbmQgbXVzdCBjb25zaXN0IG9mIGF0Ci0JICogbGVhc3Qgb25lIHNlZ21lbnQuCi0JICogCi0JICogQHJldHVybiBBbiBJUHJvamVjdCBoYW5kbGUgZm9yIHRoZSBwcm9qZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdpdmVuCi0JICogICAgICAgICA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwYXRoIGRvZXMgbm90Ci0JICogICAgICAgICBzcGVjaWZ5IGEgcHJvamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGdldFByb2plY3RPZihJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJaWYgKGFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpIHsKLQkJCVN0cmluZyBwcm9qZWN0TmFtZSA9IGFic29sdXRlUGF0aC5zZWdtZW50KDApOwotCQkJaWYgKHByb2plY3ROYW1lICE9IG51bGwpIHsKLQkJCQlyZXR1cm4gZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRDb21wb25lbnRPZihJUGF0aCBhYnNvbHV0ZVBhdGgpewotCQlpZiAoYWJzb2x1dGVQYXRoLmlzQWJzb2x1dGUoKSkgewotCQkJCVN0cmluZyBwcm9qZWN0TmFtZSA9IGFic29sdXRlUGF0aC5zZWdtZW50KDApOwotCQkJCUlQcm9qZWN0IHByb2plY3QgPSBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQkJaWYgKHByb2plY3ROYW1lICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRDb21wb25lbnRPZihJUmVzb3VyY2UgcmVzKQotCXsKLQkJSVZpcnR1YWxSZXNvdXJjZVtdIHZyZXNvdXJjZXMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZVJlc291cmNlcyhyZXMpOwotCQlJVmlydHVhbENvbXBvbmVudCB2Y29tcCA9IG51bGw7Ci0JCWlmICh2cmVzb3VyY2VzICE9IG51bGwgJiYgdnJlc291cmNlcy5sZW5ndGg+MCkKLQkJewotCQkJSVZpcnR1YWxSZXNvdXJjZSB2cmVzID0gdnJlc291cmNlc1swXTsKLQkJCXZjb21wID0gdnJlcy5nZXRDb21wb25lbnQoKTsKLQkJfQotCQlyZXR1cm4gdmNvbXA7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYSBKYXZhIFByb2plY3QuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhIEphdmEgUHJvamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRyeQotCQl7Ci0JCSAgcmV0dXJuIHByb2plY3QuaGFzTmF0dXJlKEphdmFDb3JlLk5BVFVSRV9JRCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JCXsKLQkJCS8vUmV0dXJuIGZhbHNlIGlmIENvcmVFeGNlcHRpb24gb2NjdXJzIHdoaWxlIGNoZWNraW5nIG5hdHVyZS4KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYSBKYXZhIFByb2plY3QuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhIEphdmEgUHJvamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcnVlSmF2YVByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQlyZXR1cm4gKCFpc1dlYlByb2plY3QocHJvamVjdCkgJiYgIWlzQXBwQ2xpZW50UHJvamVjdChwcm9qZWN0KSAmJiAhaXNFQVJQcm9qZWN0KHByb2plY3QpCi0JCQkJJiYgIWlzRUpCUHJvamVjdChwcm9qZWN0KSAmJiBpc0phdmFQcm9qZWN0KHByb2plY3QpKTsKLQkJLyoKLQkJICogdHJ5IHsgU3RyaW5nW10gbmF0dXJlcyA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKS5nZXROYXR1cmVJZHMoKTsKLQkJICogcmV0dXJuIChuYXR1cmVzLmxlbmd0aCA9PSAxICYmCi0JCSAqIG5hdHVyZXNbMF0uZXF1YWxzKEphdmFDb3JlLk5BVFVSRV9JRCkpOyB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsgfQotCQkgKiByZXR1cm4gZmFsc2U7Ci0JCSAqLwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYSBXZWIgUHJvamVjdC4KLQkgKiBOb3RlOiBGb3IgY29tcG9uZW50czsgdXNlIEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudCgpCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBQcm9qZWN0LgotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJYm9vbGVhbiBpc1dlYiA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCSAgLy9pc1dlYiA9IFdlYkFydGlmYWN0RWRpdC5pc1ZhbGlkV2ViTW9kdWxlKHdiY3NbMF0pOwotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpewotCQkJLy8gaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGlzV2ViOwotCX0KLQotCS8qKgotCSAqIE5vdGU6IGZvciBjb21wb25lbnRzOyB1c2UgSjJFRVV0aWxzLmlzRUFSQ29tcG9uZW50KCkKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUFSUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KXsKLQkJYm9vbGVhbiBpc0VBUiA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCUVBUkFydGlmYWN0RWRpdCBlYXJFZGl0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkgIC8vZWFyRWRpdCA9IEVBUkFydGlmYWN0RWRpdC5nZXRFQVJBcnRpZmFjdEVkaXRGb3JSZWFkKHdiY3NbMF0pOwotCQkJICBpZiAoZWFyRWRpdCE9bnVsbCl7Ci0JCQkJaXNFQVIgPSB0cnVlOwotCQkJICB9Ci0JCQl9Ci0JCQlmaW5hbGx5ewotCQkJCWlmIChlYXJFZGl0IT1udWxsKQotCQkJCQllYXJFZGl0LmRpc3Bvc2UoKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gaXNFQVI7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYW4gRUpCIDEuMSBvciBFSkIgMi4wCi0JICogUHJvamVjdC4KLQkgKiBOb3RlOiBmb3IgY29tcG9uZW50cywgdXNlIEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHByb2plY3QgaXMgYW4gRUpCIDEuMSBvciBhbiBFSkIgMi4wIFByb2plY3QuCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotICAgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkJQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJYm9vbGVhbiBpc0VKQiA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCUVKQkFydGlmYWN0RWRpdCBlamJFZGl0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkgIC8vZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKHdiY3NbMF0pOwotCQkJICBpZiAoZWpiRWRpdCE9bnVsbCl7Ci0JCQkJaXNFSkIgPSB0cnVlOwotCQkJICB9Ci0JCQl9Ci0JCQlmaW5hbGx5ewotCQkJCWlmIChlamJFZGl0IT1udWxsKQotCQkJCQllamJFZGl0LmRpc3Bvc2UoKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gaXNFSkI7CQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYW4gQXBwbGljYXRpb24gQ2xpZW50Ci0JICogUHJvamVjdC4KLQkgKiBOb3RlOiBmb3IgY29tcG9uZW50cywgdXNlIEoyRUVVdGlscy5pc0FwcENsaWVudENvbXBvbmVudCgpCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhbiBBcHBsaWNhdGlvbiBDbGllbnQgUHJvamVjdAotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBcHBDbGllbnRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJYm9vbGVhbiBpc0FwcENsaWVudCA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCUFwcENsaWVudEFydGlmYWN0RWRpdCBhcHBDbGllbnRFZGl0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJLy9hcHBDbGllbnRFZGl0ID0gQXBwQ2xpZW50QXJ0aWZhY3RFZGl0LmdldEFwcENsaWVudEFydGlmYWN0RWRpdEZvclJlYWQod2Jjc1swXSk7Ci0JCQkgIGlmIChhcHBDbGllbnRFZGl0IT1udWxsKXsKLQkJCQkgIGlzQXBwQ2xpZW50ID0gdHJ1ZTsKLQkJCSAgfQotCQkJfQotCQkJZmluYWxseXsKLQkJCQlpZiAoYXBwQ2xpZW50RWRpdCE9bnVsbCkKLQkJCQkJYXBwQ2xpZW50RWRpdC5kaXNwb3NlKCk7Ci0JCQl9Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7fQotCQlmaW5hbGx5ewotCQkJaWYgKG1jIT1udWxsKQotCQkJCW1jLmRpc3Bvc2UoKTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzQXBwQ2xpZW50OwkKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhIGJpdG1hc2suCi0JICogUmVsZXZhbnQgYml0bWFzayB2YWx1ZXMgYXJlOgotCSAqIDxvbD4KLQkgKiA8bGk+e0BsaW5rICNQUk9KRUNUX1RZUEVfSkFWQSBQUk9KRUNUX1RZUEVfSkFWQX0KLQkgKiA8bGk+e0BsaW5rICNQUk9KRUNUX1RZUEVfV0VCIFBST0pFQ1RfVFlQRV9XRUJ9Ci0JICogPGxpPntAbGluayAjUFJPSkVDVF9UWVBFX0VKQiBQUk9KRUNUX1RZUEVfRUpCfQotCSAqIDxsaT57QGxpbmsgI1BST0pFQ1RfVFlQRV9OT05FIFBST0pFQ1RfVFlQRV9OT05FfQotCSAqIDwvb2w+Ci0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIHR5cGUgYml0bWFzayBvZiB0aGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCB1c2UgZ2V0Q29tcG9uZW50VHlwZQotCSAqLyAKLQlwdWJsaWMgc3RhdGljIGJ5dGUgZ2V0UHJvamVjdFR5cGUoSVByb2plY3QgcHJvamVjdCkgewotCQlieXRlIHByb2plY3RUeXBlID0gUFJPSkVDVF9UWVBFX05PTkU7Ci0JCWlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpIHsKLQkJCXByb2plY3RUeXBlIHw9IFBST0pFQ1RfVFlQRV9KQVZBOwotCQl9Ci0JCWlmIChSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChwcm9qZWN0KSkgewotCQkJcHJvamVjdFR5cGUgfD0gUFJPSkVDVF9UWVBFX1dFQjsKLQkJfQotCQlpZiAoUmVzb3VyY2VVdGlscy5pc0VKQlByb2plY3QocHJvamVjdCkpIHsKLQkJCXByb2plY3RUeXBlIHw9IFBST0pFQ1RfVFlQRV9FSkI7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RUeXBlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbXBvbmVudCB0eXBlIGlkIGFzIGRlZmluZWQgaW4gSU1vZHVsZUNvbnN0YW50cwotCSAqIGkuZS4gSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSA9ICJqc3Qud2ViIgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbXBvbmVudFR5cGUoSVByb2plY3QgcHJvamVjdCl7Ci0JCXJldHVybiBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFR5cGUocHJvamVjdCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbXBvbmVudCB0eXBlCi0JICogQHBhcmFtIGNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb21wb25lbnRUeXBlKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCl7Ci0JCXJldHVybiBnZXRDb21wb25lbnRUeXBlKGNvbXBvbmVudC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIFdlYk1vZHVsZSBEZXBsb3lhYmxlIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIDxjb2RlPklEZXBsb3lhYmxlPC9jb2RlPiwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBXZWJNb2R1bGUgRGVwbG95YWJsZSBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gb3IgbnVsbCBpZiB0aGUKLQkgKiAgICAgICAgIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JcmV0dXJuIFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotfQotCQotLy8gV29ya2Fyb3VuZCBmb3IgMTEzNjIxIAotLy9wdWJsaWMgc3RhdGljIElNb2R1bGUgZ2V0TW9kdWxlKElQcm9qZWN0IHByb2plY3QpIHsKLS8vCUlNb2R1bGVbXSBtb2R1bGVzID0gU2VydmVyVXRpbC5nZXRNb2R1bGVzKHByb2plY3QpOwotLy8JaWYgKG1vZHVsZXMhPW51bGwgJiYgbW9kdWxlcy5sZW5ndGghPTApIHsKLS8vCQlyZXR1cm4gbW9kdWxlc1swXTsKLS8vCX0KLS8vCXJldHVybiBudWxsOwotLy99Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBidWlsZCBvdXRwdXQgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogPGNvZGU+SVBhdGg8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZS4KLQkgKiBpLmUuIFdQXC5kZXBsb3lhYmxlc1x3ZWJNb2R1bGVcV0VCLUlORlxjbGFzc2VzCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIGJ1aWxkIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gb3IgbnVsbAotCSAqICAgICAgICAgaWYgdGhlIHByb2plY3QgaGFzIG5vIEphdmEgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YU91dHB1dExvY2F0aW9uKElQcm9qZWN0IHByb2plY3QpIHsKLQkJSVBhdGggb3V0cHV0TG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlvdXRwdXRMb2NhdGlvbiA9IGphdmFQcm9qZWN0LmdldE91dHB1dExvY2F0aW9uKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQlsb2cubG9nKElMb2cuSU5GTywgNTAzMiwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldEphdmFPdXRwdXRMb2NhdGlvbiIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLG91dHB1dExvY2F0aW9uPSIgKyBvdXRwdXRMb2NhdGlvbik7Ci0KLQkJcmV0dXJuIG91dHB1dExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBidWlsZCBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogPGNvZGU+SVBhdGg8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGVpdGhlciBoYXMgbm8gSmF2YSBuYXR1cmUKLQkgKiBvciBpZiB0aGUgcHJvamVjdCdzIGJ1aWxkIGNsYXNzcGF0aCBjb250YWlucyBubyBmb2xkZXJzIGxvY2FsIHRvIHRoZQotCSAqIHByb2plY3QuIElmIHRoZSBwcm9qZWN0IGhhcyBtb3JlIHRoYW4gb25lIG9mIGl0cyBvd24gZm9sZGVycyBvbiB0aGUgYnVpbGQKLQkgKiBjbGFzc3BhdGgsIHRoZW4gb25lIG9mIHRoZW0gaXMgY2hvc2VuIGFyYml0cmFyaWx5IGFzIHRoZSBidWlsZCBzb3VyY2UKLQkgKiBsb2NhdGlvbi4gVG8gd29yayB3aXRoIGFsbCBlbnRyaWVzIG9uIHRoZSBidWlsZCBjbGFzc3BhdGgsIHVzZQotCSAqIHtAbGluayAjZ2V0SmF2YVBhY2thZ2VGcmFnbWVudFJvb3RzIGdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cygpfW9yCi0JICoge0BsaW5rICNnZXRKYXZhQ2xhc3NwYXRoIGdldEphdmFDbGFzc3BhdGgoKX0uCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gQSBidWlsZCBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IG9yIG51bGwgaWYKLQkgKiAgICAgICAgIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZSBvciBpZiB0aGUgcHJvamVjdCdzIGJ1aWxkCi0JICogICAgICAgICBjbGFzc3BhdGggY29udGFpbnMgbm8gZm9sZGVycyBsb2NhbCB0byB0aGUgcHJvamVjdC4KLQkgKi8KLQotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKElQcm9qZWN0IHByb2plY3QpIHsKLQkJSVBhdGggc291cmNlTG9jYXRpb24gPSBudWxsOwotCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIGZyYWdtZW50Um9vdHMgPSBnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMocHJvamVjdCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRSb290cy5sZW5ndGggJiYgc291cmNlTG9jYXRpb24gPT0gbnVsbDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCUlSZXNvdXJjZSBmcmFnbWVudFJvb3QgPSBmcmFnbWVudFJvb3RzW2ldCi0JCQkJCQkuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsCi0JCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFByb2plY3QoKS5lcXVhbHMocHJvamVjdCkpCi0JCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkpIHsKLQkJCQkJc291cmNlTG9jYXRpb24gPSBmcmFnbWVudFJvb3QuZ2V0RnVsbFBhdGgoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0KLQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQlsb2cubG9nKElMb2cuSU5GTywgNTAzMCwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldEphdmFTb3VyY2VMb2NhdGlvbiIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLHNvdXJjZUxvY2F0aW9uPSIgKyBzb3VyY2VMb2NhdGlvbik7Ci0JCQotCQlyZXR1cm4gc291cmNlTG9jYXRpb247Ci0JfQotCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgIkphdmFTb3VyY2UiIGZvbGRlcgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotICAgIC8qCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhU291cmNlTG9jYXRpb24oSVByb2plY3QgcHJvamVjdCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlyZXR1cm4gZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKGNvbXBvbmVudCk7CQkJCi0JfQotCSovCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSmF2YVNvdXJjZSBsb2NhdGlvbiBmb2xkZXIKLQkgKiBAcGFyYW0gY29tcAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFTb3VyY2VMb2NhdGlvbihJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkJaWYgKGNvbXAhPW51bGwpewotCQkgICBJVmlydHVhbEZvbGRlciBmb2xkZXIgPSBjb21wLmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoIi9XRUItSU5GL2NsYXNzZXMiKSk7Ci0JCSAgIHJldHVybiBmb2xkZXIuZ2V0V29ya3NwYWNlUmVsYXRpdmVQYXRoKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmFTb3VyY2UgbG9jYXRpb25zIGluIGVhY2ggcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGhbXSBnZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKElQcm9qZWN0IHByb2plY3QpIHsKLQkJVmVjdG9yIHBhdGhWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCUlQYWNrYWdlRnJhZ21lbnRSb290W10gZnJhZ21lbnRSb290cyA9IGdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyhwcm9qZWN0KTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50Um9vdHMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IGZyYWdtZW50Um9vdHNbaV0uZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsICYmIChmcmFnbWVudFJvb3QuZ2V0UHJvamVjdCgpLmVxdWFscyhwcm9qZWN0KSkKLQkJCQkJCSYmIChmcmFnbWVudFJvb3QuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GSUxFKSkgewotCQkJCQlwYXRoVmVjdG9yLmFkZChmcmFnbWVudFJvb3QuZ2V0RnVsbFBhdGgoKSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKElQYXRoW10pIHBhdGhWZWN0b3IudG9BcnJheShuZXcgUGF0aFtwYXRoVmVjdG9yLnNpemUoKV0pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVBhdGhbXSBnZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cykgewotCi0JCWlmIChjb21wb25lbnRzIT1udWxsKXsKLQkJCUxpc3QgamF2YVNvdXJjZVBhdGhzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJZm9yIChpbnQgaT0wO2k8Y29tcG9uZW50cy5sZW5ndGg7aSsrKXsKLQkJCQlJUGF0aCBwYXRoID0gZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKGNvbXBvbmVudHNbaV0pOwotCQkJCWphdmFTb3VyY2VQYXRocy5hZGQocGF0aCk7Ci0JCQl9Ci0JCQlyZXR1cm4gKElQYXRoW10pamF2YVNvdXJjZVBhdGhzLnRvQXJyYXkobmV3IElQYXRoWzBdKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIGJ1aWxkIHNvdXJjZSBwYWNrYWdlIGZyYWdtZW50IHJvb3Qgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+Ci0JICogYXMgYW4gPGNvZGU+SVBhY2thZ2VGcmFnbWVudFJvb3Q8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGVpdGhlcgotCSAqIGhhcyBubyBKYXZhIG5hdHVyZSBvciBpZiB0aGUgcHJvamVjdCdzIGJ1aWxkIGNsYXNzcGF0aCBjb250YWlucyBubwotCSAqIGZvbGRlcnMgbG9jYWwgdG8gdGhlIHByb2plY3QuIElmIHRoZSBwcm9qZWN0IGhhcyBtb3JlIHRoYW4gb25lIG9mIGl0cyBvd24KLQkgKiBmb2xkZXJzIG9uIHRoZSBidWlsZCBjbGFzc3BhdGgsIHRoZW4gb25lIG9mIHRoZW0gaXMgY2hvc2VuIGFyYml0cmFyaWx5IGFzCi0JICogdGhlIGJ1aWxkIHNvdXJjZSBsb2NhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBBIGJ1aWxkIHNvdXJjZSBwYWNrYWdlIGZyYWdtZW50IHJvb3Qgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+Ci0JICogICAgICAgICBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZSBvciBpZiB0aGUgcHJvamVjdCdzCi0JICogICAgICAgICBidWlsZCBjbGFzc3BhdGggY29udGFpbnMgbm8gZm9sZGVycyBsb2NhbCB0byB0aGUgcHJvamVjdC4KLQkgKiAgICAgICAgIAotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGFja2FnZUZyYWdtZW50Um9vdCBnZXRKYXZhU291cmNlUGFja2FnZUZyYWdtZW50Um9vdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQYWNrYWdlRnJhZ21lbnRSb290IHBhY2thZ2VGcmFnbWVudFJvb3QgPSBudWxsOwotCQlJUGF0aCBqYXZhU291cmNlTG9jYXRpb24gPSBnZXRKYXZhU291cmNlTG9jYXRpb24ocHJvamVjdCk7Ci0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCXBhY2thZ2VGcmFnbWVudFJvb3QgPSBqYXZhUHJvamVjdC5maW5kUGFja2FnZUZyYWdtZW50Um9vdChqYXZhU291cmNlTG9jYXRpb24pOwotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBwYWNrYWdlRnJhZ21lbnRSb290OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2UgZnJhZ21lbnQgcm9vdHMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogYXJyYXkgb2YgPGNvZGU+SVBhY2thZ2VGcmFnbWVudFJvb3Q8L2NvZGU+IG9iamVjdHMuIElmIHRoZSBwcm9qZWN0IGhhcwotCSAqIG5vIEphdmEgbmF0dXJlIHRoZW4gdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgb2YgbGVuZ3RoIHplcm8uCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIHBhY2thZ2UgZnJhZ21lbnQgcm9vdHMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMoSVByb2plY3QgcHJvamVjdCkgewotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIHBhY2thZ2VGcmFnbWVudFJvb3RzID0gamF2YVByb2plY3QKLQkJCQkJCS5nZXRQYWNrYWdlRnJhZ21lbnRSb290cygpOwotCQkJCXJldHVybiBwYWNrYWdlRnJhZ21lbnRSb290czsKLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbmV3IElQYWNrYWdlRnJhZ21lbnRSb290WzBdOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGJ1aWxkIGNsYXNzcGF0aCBlbnRyaWVzIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIGFycmF5IG9mIDxjb2RlPklDbGFzc3BhdGhFbnRyeTwvY29kZT4gb2JqZWN0cy4gSWYgdGhlIHByb2plY3QgaGFzIG5vCi0JICogSmF2YSBuYXR1cmUgdGhlbiB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBvZiBsZW5ndGggemVyby4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgY2xhc3NwYXRoIGVudHJpZXMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+LgotCSAqIAotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0JcHVibGljIHN0YXRpYyBJQ2xhc3NwYXRoRW50cnlbXSBnZXRKYXZhQ2xhc3NwYXRoKElQcm9qZWN0IHByb2plY3QpIHsKLQkJdHJ5IHsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJSUNsYXNzcGF0aEVudHJ5W10gY2xhc3NwYXRoRW50cmllcyA9IGphdmFQcm9qZWN0LmdldFJhd0NsYXNzcGF0aCgpOwotCQkJCXJldHVybiBjbGFzc3BhdGhFbnRyaWVzOwotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBuZXcgSUNsYXNzcGF0aEVudHJ5WzBdOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZvbGRlciBnZXRXZWJDb21wb25lbnRTZXJ2ZXJSb290KElQcm9qZWN0IHByb2plY3QpewotCQkKLSAgICAgIElGb2xkZXIgd2ViTW9kdWxlU2VydmVyUm9vdCA9IG51bGw7Ci0gICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjLmV4aXN0cygpKQotICAgICAgICB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gSjJFRVV0aWxzLmdldE91dHB1dENvbnRhaW5lclJvb3QodmMpOwotCi0JICByZXR1cm4gd2ViTW9kdWxlU2VydmVyUm9vdDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXZWJDb21wb25lbnRTZXJ2ZXJSb290UGF0aChJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0gICAgICBJQ29udGFpbmVyIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBudWxsOwotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsICYmIHZjLmV4aXN0cygpKXsKLSAgICAgICAgSUNvbnRhaW5lcltdIGNvbnRhaW5lcnMgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXJzKHByb2plY3QuZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lcnMubGVuZ3RoID4gMCkKLSAgICAgICAgICB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gY29udGFpbmVyc1swXTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKHdlYk1vZHVsZVNlcnZlclJvb3QgIT0gbnVsbCkgCi0gICAgCXJldHVybiB3ZWJNb2R1bGVTZXJ2ZXJSb290LmdldEZ1bGxQYXRoKCk7Ci0gICAgICByZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3Qgb2YgdGhlCi0JICogcHJvamVjdCBpbiBhIHNlcnZlciBpbnN0YW5jZSBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlIG9yCi0JICogaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIKLQkgKiAgICAgICAgIG5hdHVyZSBvciBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogQGRlcHJlY2F0ZWQgdXNlIGdldFdlYkNvbXBvbmVudFVSTCguLikgd2hpY2ggYmVsb25ncyBpbiBTZXJ2ZXJVdGlscwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlByb2plY3RVUkwoSVByb2plY3QgcHJvamVjdCwKLQkJCVN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIElTZXJ2ZXIgc2VydmVyKSB7Ci0KLQkJU3RyaW5nIHdlYlByb2plY3RVUkwgPSBudWxsOwotCQlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLQkJaWYgKG1vZHVsZSAhPSBudWxsKSB7Ci0JCQlJU2VydmVyIHNlcnZlckluc3RhbmNlID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSwKLQkJCQkJc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJaWYgKHNlcnZlckluc3RhbmNlICE9IG51bGwpIHsKLS8vCQkJCVVSTCB1cmwgPSAoKElVUkxQcm92aWRlcikgc2VydmVySW5zdGFuY2UuZ2V0RGVsZWdhdGUoKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotCQkJCVVSTCB1cmwgPSAoKElVUkxQcm92aWRlcilzZXJ2ZXJJbnN0YW5jZS5nZXRBZGFwdGVyKElVUkxQcm92aWRlci5jbGFzcykpLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsKLQkJCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLQkJCQkJd2ViUHJvamVjdFVSTCA9IChzLmVuZHNXaXRoKCIvIikgPyBzLnN1YnN0cmluZygwLCBzCi0JCQkJCQkJLmxlbmd0aCgpIC0gMSkgOiBzKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLQkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzYsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRXZWJQcm9qZWN0VVJMIiwKLQkJCQkicHJvamVjdD0iICsgcHJvamVjdCArICIsd2ViUHJvamVjdFVSTD0iICsgd2ViUHJvamVjdFVSTCk7Ci0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZvcmdlZCBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QKLQkgKiBvZiB0aGUgcHJvamVjdCBpbiBhIHNlcnZlciBpbnN0YW5jZSBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIKLQkgKiBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViCi0JICogICAgICAgICBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIEBkZXByZWNhdGVkICBub3QgdXNlZAotCSAqLwotLy8JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Rm9yZ2VkV2ViUHJvamVjdFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcil7Ci0vLyAgCQotLy8gIAlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0vLyAgCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotLy8gIAlpZiAobW9kdWxlICE9IG51bGwpCi0vLyAgCXsKLS8vICAJCS8vSVNlcnZlciBzZXJ2ZXJJbnN0YW5jZSA9IFNlcnZlclV0aWxzLmdldFNlcnZlckZvck1vZHVsZShtb2R1bGUsCi0vLwkJICAvLyBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlciwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0vLyAgCQlpZiAoc2VydmVyICE9IG51bGwpCi0vLyAgCQl7Ci0vLyAgCQkJU3RyaW5nIGhvc3RuYW1lID0gc2VydmVyLmdldEhvc3QoKTsKLS8vCi0vLyAgCQkJLy8gZ2V0IFNlcnZlclBvcnQKLS8vICAJCQlpbnQgcG9ydE51bWJlciA9IDA7Ci0vLwotLy8gIAkgICAgICAgICAgU2VydmVyUG9ydFtdIHBvcnRzID0gc2VydmVyLmdldFNlcnZlclBvcnRzKG51bGwpOwotLy8gIAkgICAgICAgICAgU2VydmVyUG9ydCBwb3J0ID0gbnVsbDsKLS8vICAJICAgICAgICAgIGZvciAoaW50IGl0ID0gMDsgaXQ8cG9ydHMubGVuZ3RoOyBpdCsrKQotLy8gIAkgICAgICAgICAgewotLy8gIAkgICAgICAgICAgICBTZXJ2ZXJQb3J0IHAgPSBwb3J0c1tpdF07Ci0vLyAgCSAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHAuZ2V0UHJvdG9jb2woKTsKLS8vICAJICAgICAgICAgICAgaWYgKHByb3RvY29sICE9IG51bGwgJiYgcHJvdG9jb2wudHJpbSgpLnRvTG93ZXJDYXNlKCkuZXF1YWxzKCJodHRwIikpCi0vLyAgCSAgICAgICAgICAgIHsKLS8vICAJICAgICAgICAgICAgICBwb3J0ID0gcDsKLS8vICAJICAgICAgICAgICAgICBwb3J0TnVtYmVyID0gcC5nZXRQb3J0KCk7Ci0vLyAgCSAgICAgICAgICAgICAgYnJlYWs7Ci0vLyAgCSAgICAgICAgICAgIH0KLS8vICAJICAgICAgICAgIH0KLS8vICAJICAgICAgICAgIAotLy8gIAkgICAgICAgIAotLy8gIAkgICAgICAgIAotLy8gIAkgICAgICAgIFVSTCB1cmwgPSBudWxsOwotLy8gIAkgICAgICAgIHRyeSB7Ci0vLyAgCSAgICAgICAgCXVybCA9IG5ldyBVUkwoImh0dHAiLCBob3N0bmFtZSwgcG9ydE51bWJlciwgIiIpOwotLy8gIAkgICAgICAgIH0KLS8vICAJICAgICAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0vLyAgCSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLyAgCSAgICAgICAgfQotLy8KLS8vICAJICAgICAgICAKLS8vICAJCQkvL1VSTCB1cmwgPSAoKElVUkxQcm92aWRlcikgc2VydmVySW5zdGFuY2UuZ2V0RGVsZWdhdGUoKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotLy8gIAkJCQotLy8gIAkJCWlmICh1cmwgIT0gbnVsbCkKLS8vICAJCQl7Ci0vLyAgCQkJCVN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0vLyAgCQkJCXdlYlByb2plY3RVUkwgPSBzICsgIi8iK3Byb2plY3QuZ2V0TmFtZSgpOwotLy8gIAkJCQkvL3dlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCxzLmxlbmd0aCgpLTEpIDogcyk7Ci0vLyAgCQkJfQotLy8gIAkJfQotLy8gIAl9Ci0vLyAJSUxvZyBsb2cgPSBuZXcgRWNsaXBzZUxvZygpOwotLy8gICAgbG9nLmxvZyhJTG9nLklORk8sIDUwMzYsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRXZWJQcm9qZWN0VVJMIiwgInByb2plY3Q9Iitwcm9qZWN0KyIsd2ViUHJvamVjdFVSTD0iK3dlYlByb2plY3RVUkwpOwotLy8gIAlyZXR1cm4gd2ViUHJvamVjdFVSTDsgIAkKLS8vICB9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIHByb2plY3QgaW4gYSBzZXJ2ZXIgaW5zdGFuY2Ugb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZSBvcgotCSAqIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViCi0JICogICAgICAgICBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIEBkZXByZWNhdGVkIGJlbG9uZ3MgaW4gU2VydmVyVXRpbHMKLQkgKgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlByb2plY3RVUkwoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXIgc2VydmVySW5zdGFuY2UgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJGb3JNb2R1bGUobW9kdWxlKTsKLQkJCWlmIChzZXJ2ZXJJbnN0YW5jZSAhPSBudWxsKSB7Ci0JCQkJVVJMIHVybCA9ICgoSVVSTFByb3ZpZGVyKXNlcnZlckluc3RhbmNlLmdldEFkYXB0ZXIoSVVSTFByb3ZpZGVyLmNsYXNzKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotCQkJCWlmICh1cmwgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgcyA9IHVybC50b1N0cmluZygpOwotCQkJCQl3ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAsIHMKLQkJCQkJCQkubGVuZ3RoKCkgLSAxKSA6IHMpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCWxvZy5sb2coSUxvZy5JTkZPLCA1MDM3LCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0V2ViUHJvamVjdFVSTCIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLHdlYlByb2plY3RVUkw9IiArIHdlYlByb2plY3RVUkwpOwotCi0JCXJldHVybiB3ZWJQcm9qZWN0VVJMOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIAotCSAqIEBkZXByZWNhdGVkIHNob3VsZCBiZSBpbiBTZXJ2ZXJVdGlscwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEVuY29kZWRXZWJQcm9qZWN0VVJMKElQcm9qZWN0IHByb2plY3QpIHsKLQkJU3RyaW5nIHVybCA9IGdldFdlYlByb2plY3RVUkwocHJvamVjdCk7Ci0JCWlmICh1cmwgIT0gbnVsbCkgewotCQkJaW50IGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmdCdWZmZXIgZW5jb2RlZFVSTCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQllbmNvZGVkVVJMLmFwcGVuZCh1cmwuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkpOwotCQkJCXRyeSB7Ci0JCQkJCVN0cmluZyBjdHh0Um9vdCA9IFVSTEVuY29kZXIuZW5jb2RlKHVybC5zdWJzdHJpbmcoaW5kZXggKyAxLCB1cmwubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLQkJCQkJaW50IHBsdXNJbmRleCA9IGN0eHRSb290LmluZGV4T2YoJysnKTsKLQkJCQkJd2hpbGUgKHBsdXNJbmRleCAhPSAtMSkgewotCQkJCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCQkJc2IuYXBwZW5kKGN0eHRSb290LnN1YnN0cmluZygwLCBwbHVzSW5kZXgpKTsKLQkJCQkJCXNiLmFwcGVuZCgiJTIwIik7Ci0JCQkJCQlzYi5hcHBlbmQoY3R4dFJvb3Quc3Vic3RyaW5nKHBsdXNJbmRleCArIDEsIGN0eHRSb290Ci0JCQkJCQkJLmxlbmd0aCgpKSk7Ci0JCQkJCQljdHh0Um9vdCA9IHNiLnRvU3RyaW5nKCk7Ci0JCQkJCQlwbHVzSW5kZXggPSBjdHh0Um9vdC5pbmRleE9mKCcrJyk7Ci0JCQkJCX0KLQkJCQkJZW5jb2RlZFVSTC5hcHBlbmQoY3R4dFJvb3QpOwotCQkJCX1jYXRjaCAoSU9FeGNlcHRpb24gaW8pewotCQkJCQkvL2hhbmRsZXIgZXhjZXB0aW9uCi0JCQkJfQkJCQkKLQkJCQl1cmwgPSBlbmNvZGVkVVJMLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQkvKioKLQkgKiBHaXZlbiB0aGUgPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBvZiBhIEphdmEgcmVzb3VyY2UsIHJldHVybnMgdGhlCi0JICogcGFja2FnZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBvciBudWxsIGlmIHRoZSByZXNvdXJjZSBpcyBub3QgcHJvcGVybHkKLQkgKiBsb2NhdGVkIGluIGEgcHJvamVjdCBvciBmb2xkZXIgb24gdGhlIGJ1aWxkIGNsYXNzcGF0aCBvciB0aGF0IGlzIHRoZQotCSAqIGJ1aWxkIG91dHB1dCBwYXRoLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBKYXZhIHJlc291cmNlLgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgSmF2YSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJdHJ5IHsKLQkJCUlQYXRoIGphdmFGb2xkZXJQYXRoID0gYWJzb2x1dGVQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKTsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0T2YoYWJzb2x1dGVQYXRoKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnbWVudCA9IGphdmFQcm9qZWN0Ci0JCQkJCQkuZmluZFBhY2thZ2VGcmFnbWVudChqYXZhRm9sZGVyUGF0aCk7Ci0JCQkJaWYgKGZyYWdtZW50ICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIGZyYWdtZW50LmdldEVsZW1lbnROYW1lKCk7Ci0JCQkJfQotCQkJCUlQYXRoIG91dHB1dFBhdGggPSBnZXRKYXZhT3V0cHV0TG9jYXRpb24ocHJvamVjdCk7Ci0JCQkJaWYgKG91dHB1dFBhdGguaXNQcmVmaXhPZihqYXZhRm9sZGVyUGF0aCkpIHsKLQkJCQkJSVBhdGggamF2YVBhY2thZ2VQYXRoID0gamF2YUZvbGRlclBhdGgKLQkJCQkJCQkucmVtb3ZlRmlyc3RTZWdtZW50cyhvdXRwdXRQYXRoLnNlZ21lbnRDb3VudCgpKTsKLQkJCQkJcmV0dXJuIGphdmFQYWNrYWdlUGF0aC5pc0VtcHR5KCkgPyBudWxsIDogamF2YVBhY2thZ2VQYXRoCi0JCQkJCQkJLnRvU3RyaW5nKCkucmVwbGFjZShJUGF0aC5TRVBBUkFUT1IsICcuJyk7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEdpdmVuIHRoZSA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IG9mIGEgSmF2YSByZXNvdXJjZSwgcmV0dXJucyB0aGUKLQkgKiBwYWNrYWdlIG5hbWUgb2YgdGhlIHJlc291cmNlIGFzIGEgcmVsYXRpdmUgcGF0aG5hbWUgb3IgbnVsbCBpZiB0aGUKLQkgKiByZXNvdXJjZSBpcyBub3QgcHJvcGVybHkgbG9jYXRlZCBpbiBhIHByb2plY3Qgb3IgZm9sZGVyIG9uIHRoZSBidWlsZAotCSAqIGNsYXNzcGF0aC4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgSmF2YSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIEphdmEgcmVzb3VyY2UgYXMgYSByZWxhdGl2ZSBwYXRoLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVJlc291cmNlUGFja2FnZVBhdGgoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9IFJlc291cmNlVXRpbHMKLQkJCQkuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUoYWJzb2x1dGVQYXRoKTsKLQkJcmV0dXJuIChwYWNrYWdlTmFtZSA9PSBudWxsID8gbnVsbCA6IG5ldyBQYXRoKHBhY2thZ2VOYW1lLnJlcGxhY2UoJy4nLAotCQkJCUlQYXRoLlNFUEFSQVRPUikpKTsKLQl9Ci0KLQkvKioKLQkgKiBHaXZlbiB0aGUgPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBvZiBhIEphdmEgcmVzb3VyY2UsIHJldHVybnMgdGhlCi0JICogYWJzb2x1dGUgcGF0aCBvZiB0aGUgcHJvamVjdCBvciBmb2xkZXIgdGhhdCBpcyBvbiB0aGUgYnVpbGQgY2xhc3NwYXRoIG9yCi0JICogaXMgdGhlIGJ1aWxkIG91dHB1dCBwYXRoIGFuZCB0aGF0IGNvbnRhaW5zIHRoZSBmdWxseSBxdWFsaWZpZWQgSmF2YQotCSAqIHJlc291cmNlLCBvciBudWxsIGlmIG5vIHN1Y2ggcHJvamVjdCBvciBmb2xkZXIgZXhpc3RzLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBKYXZhIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHByb2plY3Qgb3IgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGZ1bGx5Ci0JICogICAgICAgICBxdWFsaWZpZWQgSmF2YSByZXNvdXJjZS4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVJlc291cmNlUm9vdFBhdGgoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCXRyeSB7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdE9mKGFic29sdXRlUGF0aCk7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCUlQYWNrYWdlRnJhZ21lbnRSb290W10gcGZycyA9IGphdmFQcm9qZWN0Ci0JCQkJCQkuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHBmcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IHBmcnNbaV0uZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJCWlmIChmcmFnbWVudFJvb3QgIT0gbnVsbCkgewotCQkJCQkJSVBhdGggZnJhZ21lbnRQYXRoID0gZnJhZ21lbnRSb290LmdldEZ1bGxQYXRoKCk7Ci0JCQkJCQlpZiAoZnJhZ21lbnRQYXRoLmlzUHJlZml4T2YoYWJzb2x1dGVQYXRoKSkgewotCQkJCQkJCXJldHVybiBmcmFnbWVudFBhdGg7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJSVBhdGggb3V0cHV0UGF0aCA9IGdldEphdmFPdXRwdXRMb2NhdGlvbihwcm9qZWN0KTsKLQkJCQlpZiAob3V0cHV0UGF0aC5pc1ByZWZpeE9mKGFic29sdXRlUGF0aCkpIHsKLQkJCQkJcmV0dXJuIG91dHB1dFBhdGg7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgYW4gVVJMIChIVFRQIG9yIEZJTEUpIHRvIGFuIEVjbGlwc2UgcmVzb3VyY2UsIHJldHVybmluZyB0aGUKLQkgKiBVUkwgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgYW5kIGZhbHNlIG90aGVyd2lzZS4gQSB2YWx1ZSBvZiBudWxsIHdpbGwKLQkgKiBkZWZpbml0ZWx5IGJlIHJldHVybmVkIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQ6Ci0JICogPG9sPgotCSAqIDxsaT5UaGUgYWJzb2x1dGUgcGF0aCBiZWdpbnMgd2l0aCBhIFdlYiBQcm9qZWN0LgotCSAqIDxsaT5UaGUgbGVhZGluZyBwb3J0aW9uIG9mIHRoZSBhYnNvbHV0ZSBwYXRoIG1hdGNoZXMgdGhlIHBhdGggb2YgdGhlCi0JICogY29udGFpbmVyIHJldHVybmVkIGJ5IHsjbGluayAjZ2V0V2ViTW9kdWxlU2VydmVyUm9vdAotCSAqIGdldFdlYk1vZHVsZVNlcnZlclJvb3R9IGZvciB0aGUgcHJvamVjdC4KLQkgKiA8bGk+VGhlIHBhdGggZG9lcyBub3QgbGVhZCB0byB0aGUgV0VCLUlORiBmb2xkZXIgb3IgYW55IGRlc2NlbmRlbnQKLQkgKiB0aGVyZW9mLgotCSAqIDxsaT5UaGUgV2ViIFByb2plY3QgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGV4cGxpY2l0IG9yIGRlZmF1bHQgc2VydmVyCi0JICogaW5zdGFuY2UuCi0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgVVJMIG9mIHRoZSBmaWxlLCBvciBudWxsIGlmIG5vIFVSTCBjYW4gYmUgZGV0ZXJtaW5lZC4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotLy8JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMRnJvbVBhdGgoSVBhdGggYWJzb2x1dGVQYXRoLAotLy8JCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotLy8JCXJldHVybiBnZXRVUkxGcm9tUGF0aChhYnNvbHV0ZVBhdGgsIGdldFdlYlByb2plY3RVUkwoCi0vLwkJCQlnZXRQcm9qZWN0T2YoYWJzb2x1dGVQYXRoKSwgc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIpKTsKLS8vCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiBAcGFyYW0gd2ViUHJvamVjdFVSTAotCSAqIEByZXR1cm4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotLy8JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMRnJvbVBhdGgoSVBhdGggYWJzb2x1dGVQYXRoLCBTdHJpbmcgd2ViUHJvamVjdFVSTCkgewotLy8JCVN0cmluZ0J1ZmZlciB1cmwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0vLwkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3RPZihhYnNvbHV0ZVBhdGgpOwotLy8JCUlDb250YWluZXIgd2ViTW9kdWxlU2VydmVyUm9vdCA9IGdldFdlYk1vZHVsZVNlcnZlclJvb3QocHJvamVjdCk7Ci0vLwkJaWYgKHdlYk1vZHVsZVNlcnZlclJvb3QgIT0gbnVsbCkgewotLy8JCQlJUGF0aCB3ZWJNb2R1bGVTZXJ2ZXJSb290UGF0aCA9IHdlYk1vZHVsZVNlcnZlclJvb3QuZ2V0RnVsbFBhdGgoKTsKLS8vCQkJaWYgKHdlYk1vZHVsZVNlcnZlclJvb3RQYXRoLmlzUHJlZml4T2YoYWJzb2x1dGVQYXRoKSkgewotLy8JCQkJaW50IG51bVNlZ21lbnQgPSB3ZWJNb2R1bGVTZXJ2ZXJSb290UGF0aC5zZWdtZW50Q291bnQoKTsKLS8vCQkJCWludCBudW1TZWdtZW50RnJvbVBhdGggPSBhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCk7Ci0vLwkJCQlpZiAobnVtU2VnbWVudEZyb21QYXRoID4gbnVtU2VnbWVudCkgewotLy8JCQkJCVN0cmluZyBuZXh0U2VnbWVudCA9IGFic29sdXRlUGF0aC5zZWdtZW50KG51bVNlZ21lbnQpOwotLy8JCQkJCS8vIGNoZWNrIGlmIHRoZSBzZWdtZW50IGFmdGVyIHRoZSBXZWJNb2R1bGVTZXJ2ZXJSb290IGlzCi0vLwkJCQkJLy8gV0VCLUlORiAoaWdub3JpbmcgY2FzZSkKLS8vCQkJCQlpZiAobmV4dFNlZ21lbnQgIT0gbnVsbAkmJiAhbmV4dFNlZ21lbnQuZXF1YWxzSWdub3JlQ2FzZSgiV0VCLUlORiIpKSB7Ci0vLwkJCQkJCUlQYXRoIHJlbGF0aXZlUGF0aCA9IGFic29sdXRlUGF0aC5yZW1vdmVGaXJzdFNlZ21lbnRzKG51bVNlZ21lbnQpOwotLy8JCQkJCQlpZiAod2ViUHJvamVjdFVSTCAhPSBudWxsKQotLy8JCQkJCQkJdXJsLmFwcGVuZCh3ZWJQcm9qZWN0VVJMKS5hcHBlbmQoSVBhdGguU0VQQVJBVE9SKS5hcHBlbmQocmVsYXRpdmVQYXRoLnRvU3RyaW5nKCkpOwotLy8JCQkJCX0KLS8vCQkJCX0gZWxzZSBpZiAobnVtU2VnbWVudEZyb21QYXRoID09IG51bVNlZ21lbnQpCi0vLwkJCQkJdXJsLmFwcGVuZCh3ZWJQcm9qZWN0VVJMKTsKLS8vCQkJfQotLy8JCX0KLS8vCQlpZiAodXJsLmxlbmd0aCgpIDwgMSkgewotLy8JCQlJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2UgPSBnZXRXb3Jrc3BhY2VSb290KCk7Ci0vLwkJCXVybC5hcHBlbmQoZ2V0UmVzb3VyY2VVUkkod29ya3NwYWNlLmdldEZpbGUoYWJzb2x1dGVQYXRoKSkpOwotLy8JCX0KLS8vCQlJTG9nIGxvZyA9IG5ldyBFY2xpcHNlTG9nKCk7Ci0vLwkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzgsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRVUkxGcm9tUGF0aCIsCi0vLwkJCQkiYWJzb2x1dGVQYXRoPSIgKyBhYnNvbHV0ZVBhdGggKyAiLHVybD0iICsgdXJsKTsKLS8vCi0vLwkJcmV0dXJuIHVybC50b1N0cmluZygpOwotLy8JfQotCi0JLyoqCi0JICogQ29waWVzIGEgc2V0IG9mIGZpbGVzIGZyb20gYSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24gdG8gYSBuYXRpdmUKLQkgKiBkaXJlY3RvcnkuIFRoZSBmaWxlcyBhcmUgbmFtZWQgaW4gYW4gaW5kZXggZmlsZSBsb2NhdGVkIHJlbGF0aXZlIHRvIHRoZQotCSAqIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGx1Z2luCi0JICogICAgICAgICAgICBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPiBpbnN0YWxsCi0JICogICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gSWYgbnVsbCwgdGhlbiB0aGUKLQkgKiAgICAgICAgICAgIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCAoaWUuIG51bGwgaXMKLQkgKiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gIi4iKS4KLQkgKiBAcGFyYW0gaW5kZXhQYXRobmFtZQotCSAqICAgICAgICAgICAgQSBmaWxlIGNvbnRhaW5pbmcgYSB3aGl0ZXNwYWNlLWRlbGltaXR0ZWQgbGlzdCBvZiBwYXRobmFtZXMgb2YKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlcyB0byBjb3B5LiBUaGUgcGF0aG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUKLQkgKiAgICAgICAgICAgIDxjb2RlPnBsdWdpbiBzb3VyY2VQYXRoPC9jb2RlPi4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gdGFyZ2V0UGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hdGl2ZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIGZpbGVzCi0JICogICAgICAgICAgICB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lcyBvZiB0aGUgZmlsZXMgbmFtZWQgaW4KLQkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5pbmRleFBhdGhuYW1lPC9jb2RlPiBmaWxlIGFyZSBwcmVzZXJ2ZWQuIE11c3Qgbm90Ci0JICogICAgICAgICAgICBiZSBudWxsLgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiAgICAgICAgICAgIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaW5kaWNhdGluZyBhbiBJTyBlcnJvciBoYXMgb2NjdXJlZC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIHZvaWQgY29weUluZGV4ZWRGaWxlc1RvT1MoUGx1Z2luIHBsdWdpbiwgSVBhdGggc291cmNlUGF0aCwKLQkJCUlQYXRoIGluZGV4UGF0aG5hbWUsIElQYXRoIHRhcmdldFBhdGgsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBwbHVnaW4ub3BlblN0cmVhbShpbmRleFBhdGhuYW1lKTsKLQkJRW51bWVyYXRpb24gZmlsZW5hbWVzID0gU3RyaW5nVXRpbHMucGFyc2VGaWxlbmFtZXNGcm9tU3RyZWFtKGlucHV0KTsKLQkJY29weUVudW1lcmF0ZWRGaWxlc1RvT1MocGx1Z2luLCBzb3VyY2VQYXRoLCBmaWxlbmFtZXMsIHRhcmdldFBhdGgsCi0JCQkJcHJvZ3Jlc3NNb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBDb3BpZXMgYSBzZXQgb2YgZmlsZXMgZnJvbSBhIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbiB0byBhIG5hdGl2ZQotCSAqIGRpcmVjdG9yeS4gVGhlIGZpbGVzIGFyZSBuYW1lZCBpbiBhbiBlbnVtZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGx1Z2luCi0JICogICAgICAgICAgICBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPiBpbnN0YWxsCi0JICogICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gSWYgbnVsbCwgdGhlbiB0aGUKLQkgKiAgICAgICAgICAgIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCAoaWUuIG51bGwgaXMKLQkgKiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gIi4iKS4KLQkgKiBAcGFyYW0gcGF0aG5hbWVzCi0JICogICAgICAgICAgICBBbiBlbnVtZXJhdGlvbiBvZiBwYXRobmFtZXMgb2YgdGhlIGZpbGVzIHRvIGNvcHkuIFRoZQotCSAqICAgICAgICAgICAgcGF0aG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luIHNvdXJjZVBhdGg8L2NvZGU+LgotCSAqICAgICAgICAgICAgTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gdGFyZ2V0UGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hdGl2ZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIGZpbGVzCi0JICogICAgICAgICAgICB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lcyBvZiB0aGUgZmlsZXMgbmFtZWQgaW4KLQkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5wYXRobmFtZXM8L2NvZGU+IGVudW1lcmF0aW9uIGFyZSBwcmVzZXJ2ZWQuIE11c3QKLQkgKiAgICAgICAgICAgIG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiAgICAgICAgICAgIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaW5kaWNhdGluZyBhbiBJTyBlcnJvciBoYXMgb2NjdXJlZC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIHZvaWQgY29weUVudW1lcmF0ZWRGaWxlc1RvT1MoUGx1Z2luIHBsdWdpbiwgSVBhdGggc291cmNlUGF0aCwKLQkJCUVudW1lcmF0aW9uIHBhdGhuYW1lcywgSVBhdGggdGFyZ2V0UGF0aCwKLQkJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl3aGlsZSAocGF0aG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZmlsZW5hbWUgPSAoU3RyaW5nKSBwYXRobmFtZXMubmV4dEVsZW1lbnQoKTsKLQkJCWNvcHlGaWxlVG9PUyhwbHVnaW4sIHNvdXJjZVBhdGgsIG5ldyBQYXRoKGZpbGVuYW1lKSwgdGFyZ2V0UGF0aCwKLQkJCQkJcHJvZ3Jlc3NNb25pdG9yKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvcGllcyBhIGZpbGUgZnJvbSBhIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbiB0byBhIG5hdGl2ZQotCSAqIGRpcmVjdG9yeS4KLQkgKiAKLQkgKiBAcGFyYW0gcGx1Z2luCi0JICogICAgICAgICAgICBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPiBpbnN0YWxsCi0JICogICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gSWYgbnVsbCwgdGhlbiB0aGUKLQkgKiAgICAgICAgICAgIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCAoaWUuIG51bGwgaXMKLQkgKiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gIi4iKS4KLQkgKiBAcGFyYW0gcGF0aG5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBjb3B5LiBUaGUgcGF0aG5hbWUgaXMgcmVsYXRpdmUgdG8KLQkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5wbHVnaW4gc291cmNlUGF0aDwvY29kZT4uIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHRhcmdldFBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBuYXRpdmUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBmaWxlCi0JICogICAgICAgICAgICB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIGlzCi0JICogICAgICAgICAgICBwcmVzZXJ2ZWQuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqICAgICAgICAgICAgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpbmRpY2F0aW5nIGFuIElPIGVycm9yIGhhcyBvY2N1cmVkLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgdm9pZCBjb3B5RmlsZVRvT1MoUGx1Z2luIHBsdWdpbiwgSVBhdGggc291cmNlUGF0aCwKLQkJCUlQYXRoIHBhdGhuYW1lLCBJUGF0aCB0YXJnZXRQYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKHBhdGhuYW1lKTsKLQkJSVBhdGggc291cmNlID0gc291cmNlUGF0aCA9PSBudWxsID8gcGF0aG5hbWUgOiBzb3VyY2VQYXRoCi0JCQkJLmFwcGVuZChwYXRobmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0ID0gcGx1Z2luLm9wZW5TdHJlYW0oc291cmNlKTsKLQkJT3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRhcmdldC50b09TU3RyaW5nKCkpOwotCQljb3B5U3RyZWFtKGlucHV0LCBvdXRwdXQpOwotCQlpbnB1dC5jbG9zZSgpOwotCQlvdXRwdXQuY2xvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb3BpZXMgZGF0YSBmcm9tIG9uZSBzdHJlYW0gdG8gYW5vdGhlci4KLQkgKiAKLQkgKiBAcGFyYW0gaW5wdXQKLQkgKiAgICAgICAgICAgIFRoZSBpbnB1dCBzdHJlYW0uCi0JICogQHBhcmFtIG91dHB1dAotCSAqICAgICAgICAgICAgVGhlIG91dHB1dCBzdHJlYW0uCi0JICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgQW4gZXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBwcm9jZXNzaW5nIGVpdGhlciBvZgotCSAqICAgICAgICAgICAgIHRoZSBzdHJlYW1zLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgaW50IGNvcHlTdHJlYW0oSW5wdXRTdHJlYW0gaW5wdXQsIE91dHB1dFN0cmVhbSBvdXRwdXQpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpbnQgdCA9IDA7Ci0JCWJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKLQkJaW50IG4gPSBpbnB1dC5yZWFkKGJ1ZmZlcik7Ci0JCXdoaWxlIChuID49IDApIHsKLQkJCW91dHB1dC53cml0ZShidWZmZXIsIDAsIG4pOwotCQkJdCArPSBuOwotCQkJbiA9IGlucHV0LnJlYWQoYnVmZmVyKTsKLQkJfQotCQlyZXR1cm4gdDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmF0aXZlIGRpcmVjdG9yeSBwYXRoIGVxdWFsIHRvIHRoZSBwYXJlbnQgcG9ydGlvbiBvZiB0aGUgZ2l2ZW4KLQkgKiA8Y29kZT5wYXRobmFtZTwvY29kZT4uIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIHRoZW4gbm8gYWN0aW9uCi0JICogaXMgdGFrZW4uCi0JICogCi0JICogQHBhcmFtIHBhdGhuYW1lCi0JICogICAgICAgICAgICBUaGUgcGF0aG5hbWUgdG8gdGhlIGZpbGUgd2hvc2UgcGFyZW50IGRpcmVjdG9yeSBzaG91bGQgYmUKLQkgKiAgICAgICAgICAgIGNyZWF0ZWQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpZiBhbiBJTyBlcnJvciBvY2N1cnMuCi0JICovCi0Jc3RhdGljIHB1YmxpYyB2b2lkIGNyZWF0ZVBhcmVudERpcmVjdG9yeUZvcihTdHJpbmcgcGF0aG5hbWUpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRobmFtZSk7Ci0JCUZpbGUgcGFyZW50ID0gZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCWlmIChwYXJlbnQgIT0gbnVsbCkgewotCQkJcGFyZW50Lm1rZGlycygpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSVJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBzZWxlY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG9iamVjdAotCSAqICAgICAgICAgICAgVGhlIHNlbGVjdGlvbgotCSAqIEByZXR1cm4gSVJlc291cmNlIGlmIHRoZSBzZWxlY3Rpb24gcmVwcmVzZW50cyBhbiBJUmVzb3VyY2UuIFJldHVybnMgbnVsbAotCSAqICAgICAgICAgb3RoZXJ3aXNlLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXN0YXRpYyBwdWJsaWMgSVJlc291cmNlIGdldFJlc291cmNlRnJvbVNlbGVjdGlvbihPYmplY3Qgb2JqKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUmVzb3VyY2UgcmVzID0gbnVsbDsKLQkJaWYgKG9iaiAhPSBudWxsKSB7Ci0JCQlpZiAob2JqIGluc3RhbmNlb2YgSVJlc291cmNlKSB7Ci0JCQkJcmVzID0gKElSZXNvdXJjZSkgb2JqOwotCQkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJSmF2YUVsZW1lbnQpIHsKLQkJCQlJSmF2YUVsZW1lbnQgamF2YUVsZW1lbnQgPSAoSUphdmFFbGVtZW50KSBvYmo7Ci0JCQkJcmVzID0gamF2YUVsZW1lbnQuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEVudGVycHJpc2VCZWFuKSB7Ci0JCQkJRW50ZXJwcmlzZUJlYW4gZWpiQmVhbiA9IChFbnRlcnByaXNlQmVhbikgb2JqOwotCQkJCUlQcm9qZWN0IGVqYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWpiQmVhbik7Ci0JCQkJaWYgKGVqYlByb2plY3QgIT0gbnVsbCkKLQkJCQkJcmVzID0gZWpiUHJvamVjdDsKLQkJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU2Vzc2lvbkJlYW4pIHsKLQkJCQlTZXNzaW9uQmVhbiBKRUU1QmVhbiA9IChTZXNzaW9uQmVhbikgb2JqOwotCQkJCUlQcm9qZWN0IGVqYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoSkVFNUJlYW4pOwotCQkJCWlmIChlamJQcm9qZWN0ICE9IG51bGwpCi0JCQkJCXJlcyA9IGVqYlByb2plY3Q7Ci0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gTmF1Z2h0eSBiaXRzLi4uCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvLwotCS8vIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMuCi0JLy8gRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotCS8vCi0JLy8gIHByaXZhdGUgc3RhdGljIElDb250YWluZXIgbWFrZUZvbGRlclBhdGggKAotCS8vICAgICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCS8vICAgIElQYXRoIGFic29sdXRlUGF0aCwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8PSAxKQotCS8vICAgIHsKLQkvLyAgICAgIHJldHVybiBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChhYnNvbHV0ZVBhdGguc2VnbWVudCgwKSk7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICBJQ29udGFpbmVyIHBhcmVudCA9IG1ha2VGb2xkZXJQYXRoKHJlc291cmNlQ29udGV4dCwKLQkvLyBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgU3RyaW5nIGZvbGRlck5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLQkvLyAgICAgIHJldHVybiBtYWtlRm9sZGVyKHJlc291cmNlQ29udGV4dCwgcGFyZW50LGZvbGRlck5hbWUsIHByb2dyZXNzTW9uaXRvciAsCi0JLy8gc3RhdHVzTW9uaXRvcik7Ci0JLy8gICAgfQotCS8vICB9Ci0JLy8KLQkvLyBDcmVhdGVzIGEgZm9sZGVyIHVuZGVyIGEgY29udGFpbmVyLgotCS8vIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotCS8vCi0JLy8gcHJpdmF0ZSBzdGF0aWMgSUZvbGRlciBtYWtlRm9sZGVyICgKLQkvLyAgICAgICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJQ29udGFpbmVyIHBhcmVudCwKLQkvLyAgICBTdHJpbmcgZm9sZGVyTmFtZSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgSVJlc291cmNlIGNoaWxkID0gcGFyZW50LmZpbmRNZW1iZXIoZm9sZGVyTmFtZSk7Ci0JLy8gICAgaWYgKGNoaWxkID09IG51bGwpCi0JLy8gICAgewotCS8vICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyhuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQiLAotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZvbGRlck5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8gICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgIGlmICggcmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkvLwotCS8vICAgICAgfQotCS8vICAgICAgSUZvbGRlciBmb2xkZXIgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLQkvLyAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICByZXR1cm4gZm9sZGVyOwotCS8vICAgIH0KLQkvLyAgICBlbHNlIGlmIChjaGlsZC5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZPTERFUikKLQkvLyAgICB7Ci0JLy8gICAgICByZXR1cm4gKElGb2xkZXIpY2hpbGQ7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlUGx1Z2luLklELDAsV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVIiLG5ldwotCS8vIE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZm9sZGVyTmFtZSkudG9TdHJpbmcoKX0pLG51bGwpKTsKLQkvLyAgICB9Ci0JLy8gIH0KLQotCS8vCi0JLy8gQ3JlYXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0JLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0JLy8KLQkvLyBwcml2YXRlIHN0YXRpYyBJRmlsZSBtYWtlRmlsZSAoCi0JLy8gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJQ29udGFpbmVyIHBhcmVudCwKLQkvLyAgICBTdHJpbmcgZmlsZU5hbWUsCi0JLy8gICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sCi0JLy8gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0JLy8gICAgU3RhdHVzTW9uaXRvciBzdGF0dXNNb25pdG9yCi0JLy8gICkKLQkvLyAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgewotCS8vICAgIElSZXNvdXJjZSBjaGlsZCA9IHBhcmVudC5maW5kTWVtYmVyKGZpbGVOYW1lKTsKLQkvLyAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLQkvLyAgICB7Ci0JLy8gICAgICBpZiAoY2hpbGQuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCS8vICAgICAgewotCS8vICAgICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKCBuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAocmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCS8vICAgICAgICB9Ci0JLy8gICAgICAgIC8vV2UgaGF2ZSBwZXJtaXNzaW9uIHRvIG92ZXJ3cml0ZSBzbyBjaGVjayBpZiBmaWxlIGlzIHJlYWQtb25seQotCS8vICAgICAgICBpZiAoY2hpbGQuaXNSZWFkT25seSgpKQotCS8vICAgICAgICB7Ci0JLy8gICAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8KLQkvLyAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8KLQkvLyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotCS8vICAgICAgICAgIH0KLQkvLwotCS8vICAgICAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0JLy8gICAgICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpY2hpbGQ7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAoCi0JLy8gIXN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKSkpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCS8vICAgICAgICB9Ci0JLy8KLQkvLyAgICAgICAgLy9DaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBmaWxlLgotCS8vICAgICAgICAgICAgSUZpbGUgZmlsZSA9IHBhcmVudC5nZXRGaWxlKG5ldyBQYXRoKGZpbGVOYW1lKSk7Ci0JLy8gICAgICAgIGZpbGUuc2V0Q29udGVudHMoaW5wdXRTdHJlYW0sdHJ1ZSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICAgIHJldHVybiBmaWxlOwotCS8vCi0JLy8gICAgICB9Ci0JLy8gICAgICBlbHNlCi0JLy8gICAgICB7Ci0JLy8gICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldwotCS8vIFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCxXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEUiLG5ldwotCS8vIE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZmlsZU5hbWUpfSksbnVsbCkpOwotCS8vICAgICAgfQotCS8vICAgIH0KLQkvLyAgICBlbHNlCi0JLy8gICAgewotCS8vICAgICAgICAvL0NyZWF0ZSBhIG5ldyBmaWxlLgotCS8vICAgICAgICBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUobmV3IFBhdGgoZmlsZU5hbWUpKTsKLQkvLyAgICAgICAgZmlsZS5jcmVhdGUoaW5wdXRTdHJlYW0sdHJ1ZSxwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgICByZXR1cm4gZmlsZTsKLQkvLyAgICB9Ci0JLy8gIH0KLQotCS8qKgotCSAqIERlbGV0ZXMgYSBmaWxlIHVuZGVyIGEgY29udGFpbmVyLiBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSAtCi0JICogICAgICAgICAgICB0aGUgSUZpbGUgdG8gYmUgZGVsZXRlZAotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzCi0JICogICAgICAgICBzdWNjZXNzZnVsbHkgZGVsZXRlZC4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCS8vICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVsZXRlRmlsZSAoCi0JLy8gICAgICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSUZpbGUgZmlsZSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IgKQotCS8vICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JLy8gICAgewotCS8vICAgICAgICBpZiAoZmlsZS5leGlzdHMoKSkKLQkvLyAgICAgICAgewotCS8vICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpIHsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXQotCS8vIHtmaWxlLmdldFBhcmVudCgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlLmdldE5hbWUoKX0pLG51bGwpLAotCS8vIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpKTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JLy8KLQkvLyAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgICAgICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0JLy8gICAgICAgICAgICAgICAgaWYgKGZpbGUuaXNSZWFkT25seSgpKQotCS8vICAgICAgICAgICAgICAgIHsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSkgewotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEIiwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdCi0JLy8ge2ZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGUuZ2V0TmFtZSgpfSksbnVsbCksCi0JLy8gZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkpOwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8KLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzWzBdID0gZmlsZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAotCS8vICFzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyhnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZUVkaXQoZmlsZXMsbnVsbCkpKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JLy8gICAgICAgICAgICAgICAgfQotCS8vICAgICAgICAgICAgICAgIGZpbGUuZGVsZXRlKHRydWUscHJvZ3Jlc3NNb25pdG9yKTsKLQkvLyAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgIC8vQXQgdGhpcyBwb2ludCwgZWl0aGVyIHRoZSBmaWxlIGRpZCBub3QgZXhpc3Qgb3Igd2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKLQkvLyBpdC4gUmV0dXJuIHN1Y2Nlc3MuCi0JLy8gICAgICAgIHJldHVybiB0cnVlOwotCS8vICB9Ci0JLyoqCi0JICogRGVsZXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLQkgKiAKLQkgKiBAcGFyYW0gZm9sZGVyIC0KLQkgKiAgICAgICAgICAgIHRoZSBJRm9sZGVyIHRvIGJlIGRlbGV0ZWQKLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0JICogQHBhcmFtIHN0YXR1c01vbml0b3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzCi0JICogICAgICAgICBzdWNjZXNzZnVsbHkgZGVsZXRlZCBhbG9uZyB3aXRoIGl0cyBtZW1iZXJzLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JLy8gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGb2xkZXIgKAotCS8vICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSUZvbGRlciBmb2xkZXIsCi0JLy8gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0JLy8gICAgU3RhdHVzTW9uaXRvciBzdGF0dXNNb25pdG9yCi0JLy8gICkKLQkvLyAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgewotCS8vICAgIGlmICghZm9sZGVyLmV4aXN0cygpKSByZXR1cm4gdHJ1ZTsKLQkvLwotCS8vICAgIGJvb2xlYW4gZGVsZXRlZCA9IHRydWU7Ci0JLy8gICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gZm9sZGVyLm1lbWJlcnMoKTsKLQkvLyAgICBmb3IgKGludCBpPTA7IGk8cmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotCS8vICAgIHsKLQkvLyAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKLQkvLyAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotCS8vICAgICAgewotCS8vICAgICAgICBkZWxldGVkID0gZGVsZXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIChJRmlsZSlyZXNvdXJjZSwgcHJvZ3Jlc3NNb25pdG9yLAotCS8vIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgfQotCS8vICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikKLQkvLyAgICAgIHsKLQkvLyAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZvbGRlciggcmVzb3VyY2VDb250ZXh0LCAoSUZvbGRlcilyZXNvdXJjZSwKLQkvLyBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgfQotCS8vCi0JLy8gICAgICBpZiAoIWRlbGV0ZWQpIGJyZWFrOwotCS8vICAgIH0KLQkvLyAgICBpZiAoZGVsZXRlZCkgewotCS8vICAgICAgZm9sZGVyLmRlbGV0ZSh0cnVlLCB0cnVlLCBwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgcmV0dXJuIHRydWU7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICB9Ci0JLyoqCi0JICogRGVsZXRlcyBhIHNldCBvZiBmaWxlcyB0aGF0IGFyZSBuYW1lZCBpbiBhbiBpbmRleCBmaWxlIGxvY2F0ZWQgcmVsYXRpdmUKLQkgKiB0byB0aGUgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwbHVnaW4KLQkgKiAgICAgICAgICAgIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgaW5kZXhlZCBmaWxlIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGggLQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgcGF0aCBvZiB0aGUgaW5kZXhlZCBmaWxlIHBhc3NpbmcgYSBudWxsIGluIGhhcyB0aGUKLQkgKiAgICAgICAgICAgIHNhbWUgZWZmZWN0IGFzIHBhc3NpbmcgYSAiLiIgaW4KLQkgKiBAcGFyYW0gaW5kZXhGaWxlUGF0aCAtCi0JICogICAgICAgICAgICB0aGUgaW5kZXhlZCBmaWxlbmFtZSBNdXN0IG5vdCBiZSBudWxsCi0JICogQHBhcmFtIHRhcmdldFBhdGggLQotCSAqICAgICAgICAgICAgcGF0aCBjb250YWluaW5nIHRoZSBmaWxlcyBuYW1lZCBpbiB0aGUgaW5kZXhlZCBmaWxlIE11c3Qgbm90Ci0JICogICAgICAgICAgICBiZSBudWxsLCB0aGlzIHBhdGggbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIHNlcGFyYXRvcgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKi8KLQkvLyAgcHVibGljIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4RmlsZXNGcm9tT1MgKAotCS8vICAgIFBsdWdpbiBwbHVnaW4sCi0JLy8gICAgSVBhdGggaW5kZXhGaWxlUGF0aCwKLQkvLyAgICBJUGF0aCB0YXJnZXRQYXRoCi0JLy8gICkKLQkvLyAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyAgICBJbnB1dFN0cmVhbSBpbnB1dCA9IHBsdWdpbi5vcGVuU3RyZWFtKGluZGV4RmlsZVBhdGgpOwotCS8vICAgIEVudW1lcmF0aW9uIGZpbGVuYW1lcyA9IFN0cmluZ1V0aWxzLnBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbShpbnB1dCk7Ci0JLy8gICAgd2hpbGUgKGZpbGVuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCS8vICAgICAgRmlsZSB0YXJnZXRGaWxlID0KLQkvLyB0YXJnZXRQYXRoLmFwcGVuZCgoU3RyaW5nKWZpbGVuYW1lcy5uZXh0RWxlbWVudCgpKS50b0ZpbGUoKTsKLQkvLyAgICAgIGlmICh0YXJnZXRGaWxlLmV4aXN0cygpKQotCS8vICAgICAgICB0YXJnZXRGaWxlLmRlbGV0ZSgpOwotCS8vICAgIH0KLQkvLyAgfQotCS8qKgotCSAqIFJldHVybnMgYSBVUkkgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBFY2xpcHNlIHJlc291cmNlLCBvciBudWxsIGlmIG5vIHN1Y2gKLQkgKiByZWZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGZvciBleGFtcGxlLCBpZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QKLQkgKiBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtKS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkkgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gVVJJIHRvIHRoZSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVVSSShJUmVzb3VyY2UgcmVzb3VyY2UpIHsKLQkJU3RyaW5nIHVyaSA9IG51bGw7Ci0JCUlQYXRoIGxvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCXVyaSA9ICJmaWxlOiIgKyBsb2NhdGlvbi50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIFVSSSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIEVjbGlwc2UgcmVzb3VyY2UgdXNpbmcgdGhlCi0JICogInBsYXRmb3JtOiIgcHJvdG9jb2wsIG9yIG51bGwgaWYgbm8gc3VjaCByZWZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGZvcgotCSAqIGV4YW1wbGUsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtKS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkkgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gVVJJIHRvIHRoZSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbGF0Zm9ybVJlc291cmNlVVJJKElSZXNvdXJjZSByZXNvdXJjZSkgewotCQlTdHJpbmcgdXJpID0gbnVsbDsKLQkJSVBhdGggbG9jYXRpb24gPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJdXJpID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyBsb2NhdGlvbi50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZGVmYXVsdCBiaW5kaW5nIG5hbWVzcGFjZSBzdHJpbmcgZ2l2ZW4gYSBKYXZhIGJlYW4gbmFtZQotCSAqICh1c2luZyB0aGUgY29udmVudGlvbiB1c2VkIGJ5IENUQyBpbiBHTSkuIGUuZy4gSmF2YSBiZWFuIE15Q2xhc3MgcmVzdWx0Ci0JICogaW4gYmluZGluZyBuYW1lc3BhY2Ugb2YKLQkgKiAiaHR0cDovL3d3dy5teWNsYXNzLmNvbS9kZWZpbml0aW9ucy9NeUNsYXNzUmVtb3RlSW50ZXJmYWNlIgotCSAqIAotCSAqIEBwYXJhbSBiZWFuTmFtZQotCSAqICAgICAgICAgICAgVGhlIGphdmEgYmVhbi4KLQkgKiBAcmV0dXJuIFRoZSBiaW5kaW5nIG5hbWVzcGFjZSBhcyBhIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCaW5kaW5nTmFtZXNwYWNlKFN0cmluZyBiZWFuTmFtZSkgewotCQlyZXR1cm4gImh0dHA6Ly93d3cuIiArIGJlYW5OYW1lLnRvTG93ZXJDYXNlKCkgKyAiLmNvbS9kZWZpbml0aW9ucy8iCi0JCQkJKyBiZWFuTmFtZSArICJSZW1vdGVJbnRlcmZhY2UiOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGRlZmF1bHQgc2NoZW1hIG5hbWVzcGFjZSBzdHJpbmcgZ2l2ZW4gYSBKYXZhIGJlYW4gbmFtZSAodXNpbmcKLQkgKiB0aGUgY29udmVudGlvbiB1c2VkIGJ5IENUQyBpbiBHTSkuIGUuZy4gSmF2YSBiZWFuIE15Q2xhc3MgcmVzdWx0IGluCi0JICogc2NoZW1hIG5hbWVzcGFjZSBvZgotCSAqICJodHRwOi8vd3d3Lm15Y2xhc3MuY29tL3NjaGVtYXMvTXlDbGFzc1JlbW90ZUludGVyZmFjZSIKLQkgKiAKLQkgKiBAcGFyYW0gYmVhbk5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBqYXZhIGJlYW4uCi0JICogQHJldHVybiBUaGUgc2NoZW1hcyBuYW1lc3BhY2UgYXMgYSBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTmFtZXNwYWNlKFN0cmluZyBiZWFuTmFtZSkgewotCQlyZXR1cm4gImh0dHA6Ly93d3cuIiArIGJlYW5OYW1lLnRvTG93ZXJDYXNlKCkgKyAiLmNvbS9zY2hlbWFzLyIKLQkJCQkrIGJlYW5OYW1lICsgIlJlbW90ZUludGVyZmFjZSI7Ci0JfQotCi0JLy8gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpIHsKLQkvLyAgICAgICAgVmVjdG9yIG9wdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0JLy8gICAgb3B0aW9ucy5hZGQobmV3Ci0JLy8gU3RhdHVzT3B0aW9uKElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX0lELElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX0xBQkVMLCIiLCIiKSk7Ci0JLy8gICAgb3B0aW9ucy5hZGQobmV3Ci0JLy8gU3RhdHVzT3B0aW9uKElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCxJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICBvcHRpb25zLmFkZChuZXcKLQkvLyBTdGF0dXNPcHRpb24oSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICByZXR1cm4gb3B0aW9uczsKLQkvLyAgfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKLQkgKiBHZXRzIHRoZSBTT0FQIHJwY3JvdXRlciBzZXJ2bGV0IFVSTCBmb3IgdGhlIHNlcnZpY2UgcHJvamVjdAotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkCi0JICogICAgICAgICAgICBUaGUgc2VydmVyIGZhY3RvcnkgaWQKLQkgKiBAcGFyYW0gc2VydmVyCi0JICogICAgICAgICAgICBUaGUgc2VydmVyCi0JICogQHJldHVybiBUaGUgVVJMLCBwb3NzaWJseSBudWxsLgotCSAqLwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmxldFVSTChJUHJvamVjdCBwcm9qZWN0LAotCQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQkJcmV0dXJuIGdldFNlcnZsZXRVUkwoZ2V0V2ViUHJvamVjdFVSTChwcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcikpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZsZXRVUkwoU3RyaW5nIHdlYlByb2plY3RVUkwpIHsKLQkJaWYgKHdlYlByb2plY3RVUkwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQllbHNlCi0JCQlyZXR1cm4gd2ViUHJvamVjdFVSTCArIFNFUlZMRVRfRVhUOwotCX0KLQotCS8qKgotCSAqIEdldHMgdGhlIGNsaWVudCBXZWIgcHJvamVjdCBuYW1lCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogICAgICAgICAgICBUaGUgcHJvamVjdCBuYW1lIHRvIGJhc2Ugb24uCi0JICogQHBhcmFtIHR5cGVJZCB0aGUgd2Vic2VydmljZSB0eXBlIGlkLgotCSAqIEByZXR1cm4gVGhlIGNsaWVudCBXZWIgcHJvamVjdCBuYW1lLgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViUHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgdHlwZUlkKSAKLQl7Ci0JCVN0cmluZyAgIGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotCQlJUGF0aCAgICBwcm9qZWN0UGF0aDsKLQkJSVByb2plY3QgcHJvamVjdDsKLQkJYm9vbGVhbiAgZm91bmRXZWJQcm9qZWN0ICAgICA9IGZhbHNlOwotCQlpbnQgICAgICBpICAgICAgICAgICAgICAgICAgID0gMTsKLQkJCi0JCWlmKCBpc1NrZWxldG9uRUpCVHlwZSggdHlwZUlkICkgKQotCQl7Ci0JCSAgLy8gRm9yIHRoZSBza2VsZXRvbiBFSkIgc2NlbmFyaW8gd2UgbmVlZCB0byBjcmVhdGUgYSBzbGlnaHRseSBkaWZmZXJlbnQKLQkJICAvLyBiYXNlIG5hbWUuICBXaGVuIHRoZSBFSkIgcHJvamVjdCBpcyBjcmVhdGVkIGFub3RoZXIgcHJvamVjdAotCQkgIC8vIGlzIGNyZWF0ZWQgd2l0aCAiQ2xpZW50IiB0YWNrZWQgb250byB0aGUgZW5kLiAgV2Ugd2lsbAotCQkgIC8vIGFkZCAiV1MiIHRvIG91ciBjbGllbnQgc28gd2UgZG9uJ3QgY29sbGlkZSB3aXRoIHRoZSBvdGhlcgotCQkgIC8vIGNsaWVudCBwcm9qZWN0LgotCQkgIGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgIldTIiArIERFRkFVTFRfQ0xJRU5UX1dFQl9QUk9KRUNUX0VYVDsgICAgCi0JCX0KLQkJCi0JCVN0cmluZyAgY2xpZW50V2ViUHJvamVjdE5hbWUgPSBiYXNlQ2xpZW50V2ViUHJvamVjdE5hbWU7Ci0JCQotCQl3aGlsZSAoIWZvdW5kV2ViUHJvamVjdCkgCi0JCXsKLQkJICBwcm9qZWN0UGF0aCA9IG5ldyBQYXRoKGNsaWVudFdlYlByb2plY3ROYW1lKS5tYWtlQWJzb2x1dGUoKTsKLQkJICBwcm9qZWN0ID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocHJvamVjdFBhdGgpOwotCQkgIAotCQkgIGlmIChwcm9qZWN0LmV4aXN0cygpICYmICFSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChwcm9qZWN0KSkgCi0JCSAgewotCQkJY2xpZW50V2ViUHJvamVjdE5hbWUgPSBiYXNlQ2xpZW50V2ViUHJvamVjdE5hbWUgKyBpOwotCQkJaSsrOwotCQkgIH0KLQkJICBlbHNlIAotCQkgIHsKLQkJCWZvdW5kV2ViUHJvamVjdCA9IHRydWU7Ci0JCSAgfQotCQl9Ci0JCQotCQlyZXR1cm4gY2xpZW50V2ViUHJvamVjdE5hbWU7Ci0JfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0Q2xpZW50UHJvamVjdENvbXBvbmVudE5hbWUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgY29tcG9uZW50TmFtZSwgYm9vbGVhbiBpc0VKQikKLSAgewotICAgIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGNsaWVudENvbXBvbmVudE5hbWUgPSBudWxsOwotICAgIGlmIChpc0VKQikKLSAgICB7Ci0gICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfRUpCX1BST0pFQ1RfRVhUOwotICAgICAgY2xpZW50Q29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgKyBERUZBVUxUX0NMSUVOVF9FSkJfUFJPSkVDVF9FWFQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotLy8gICAgICBTdHJpbmcgYmFzZU5hbWUgPSBjbGllbnRQcm9qZWN0TmFtZTsKLSAgICAgIGNsaWVudENvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotLy8gICAgICBTdHJpbmcgYmFzZUNvbXBOYW1lID0gY2xpZW50Q29tcG9uZW50TmFtZTsKLSAgICB9Ci0gICAgCi0gICAgLy9UT0RPIHdlIG1heSB3YW50IHRvIHJlbW92ZSB0aGlzIGlmIHN0YXRlbWVudCBvbmNlIGRlZmVjdCAxMDMzNjYgaXMgcmVzb2x2ZWQuCi0gICAgLy9UT0RPOiAgRGVmZWN0IDEwNzk5NyAtIFJldmlzaXQgcHJqZWN0IGFuZCBtb2R1bGUgY3JlYXRpb24gbG9naWMKLS8vICAgIGlmKCAhRmxleGlibGVKYXZhUHJvamVjdFByZWZlcmVuY2VVdGlsLmdldE11bHRpcGxlTW9kdWxlc1BlclByb2plY3RQcm9wKCkgKQotLy8gICAgewotLy8gICAgICBjbGllbnRDb21wb25lbnROYW1lID0gY2xpZW50UHJvamVjdE5hbWU7CQotLy8gICAgfQotICAgIAotLy8gICAgYm9vbGVhbiAgZm91bmRXZWJQcm9qZWN0ICAgICA9IGZhbHNlOwotLy8gICAgaW50ICAgICAgaSAgICAgICAgICAgICAgICAgICA9IDE7Ci0vLyAgICAKLS8vICAgIHdoaWxlICghZm91bmRXZWJQcm9qZWN0KSAKLS8vICAgIHsKLS8vICAgICAgSVBhdGggcHJvamVjdFBhdGggPSBuZXcgUGF0aChjbGllbnRQcm9qZWN0TmFtZSkubWFrZUFic29sdXRlKCk7Ci0vLyAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihwcm9qZWN0UGF0aCk7Ci0vLyAgICAgIAotLy8gICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkgCi0vLyAgICAgIHsKLS8vICAgICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IGJhc2VOYW1lICsgaTsKLS8vICAgICAgICBjbGllbnRDb21wb25lbnROYW1lID0gYmFzZUNvbXBOYW1lICsgaTsKLS8vICAgICAgICBpKys7Ci0vLyAgICAgIH0KLS8vICAgICAgZWxzZSAKLS8vICAgICAgewotLy8gICAgICAgIGZvdW5kV2ViUHJvamVjdCA9IHRydWU7Ci0vLyAgICAgIH0KLS8vICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFN0cmluZ1tde2NsaWVudFByb2plY3ROYW1lLCBjbGllbnRDb21wb25lbnROYW1lfTsKLSAgfQotICAKLSAgICAvKioKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdHlwZUlECi0gICAgICogQHJldHVybgotICAgICAqIAotICAgICAqIEBkZXByZWNhdGVkCi0gICAgICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2tlbGV0b25FSkJUeXBlKCBTdHJpbmcgdHlwZUlEICkKLQl7Ci0JICByZXR1cm4gdHlwZUlELmVxdWFscyggIm9yZy5lY2xpcHNlLmpzdC53cy50eXBlLndzZGwuZWpiIiApOyAgICAKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVKQlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9FSkJfUFJPSkVDVF9OQU1FOwotCX0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRFSkJDb21wb25lbnROYW1lKCkgewotICAgIHJldHVybiBERUZBVUxUX0VKQl9DT01QT05FTlRfTkFNRTsKLSAgfSAgCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0V2ViUHJvamVjdE5hbWUoKSB7Ci0JCXJldHVybiBERUZBVUxUX1dFQl9QUk9KRUNUX05BTUU7Ci0JfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFdlYkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfV0VCX0NPTVBPTkVOVF9OQU1FOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEV4dGVuc2lvbigpIHsKLSAgICByZXR1cm4gREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotICB9Ci0gIAotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0TmFtZQotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSb3V0ZXJQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpIHsKLQkJcmV0dXJuIHByb2plY3ROYW1lICsgREVGQVVMVF9ST1VURVJfUFJPSkVDVF9FWFQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VFQVJQcm9qZWN0TmFtZSgpIHsKLQkJcmV0dXJuIERFRkFVTFRfU0VSVklDRV9FQVJfUFJPSkVDVF9OQU1FOwotCX0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRTZXJ2aWNlRUFSQ29tcG9uZW50TmFtZSgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9TRVJWSUNFX0VBUl9DT01QT05FTlRfTkFNRTsKLSAgfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEVBUlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9DTElFTlRfRUFSX1BST0pFQ1RfTkFNRTsKLQl9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEVBUkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfQ0xJRU5UX0VBUl9DT01QT05FTlRfTkFNRTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVBUkV4dGVuc2lvbigpIHsKLQkgICAgcmV0dXJuIERFRkFVTFRfRUFSX0VYVDsKLQkgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U0MTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlbGVjdGlvblRvUmVzb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uVG9SZXNvdXJjZSBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyI3RyYW5zZm9ybShqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotICAgIElSZXNvdXJjZSAgICAgICAgICAgIHJlc291cmNlICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbiAhPSBudWxsICkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgCi0gICAgICBpZiggb2JqZWN0ICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0ICkKLSAgICAgICAgewotICAgICAgICAgIElDb21waWxhdGlvblVuaXQgY29tcFVuaXQgPSAoSUNvbXBpbGF0aW9uVW5pdClvYmplY3Q7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2UgPSBjb21wVW5pdC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIEphdmFNb2RlbEV4Y2VwdGlvbiBleGMpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBFbnRlcnByaXNlQmVhbiApIAotICAgICAgICB7Ci0gICAgICAgICAgRW50ZXJwcmlzZUJlYW4gZWpiQmVhbiAgICA9IChFbnRlcnByaXNlQmVhbilvYmplY3Q7Ci0gICAgICAgICAgSVByb2plY3QgICAgICAgZWpiUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCggZWpiQmVhbiApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBlamJQcm9qZWN0ICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlID0gZWpiUHJvamVjdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb3VyY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TZXJ2ZXJVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTNhOGEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0ICAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKiAyMDA3MDExOSAgIDE1OTQ1OCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDkwNTE4IFsyNTIwNzddIHRhbmdnQGVtYy5jb20gLSBHYXJ5IFRhbmcsIEZhaWwgdG8gZGVwbG95IGFuIEVBUiBwcm9qZWN0IGlmIGl0IGNvbnRhaW5zIGEgbW9kdWxlCi0gKiAgICAgICAgICAgICAgICAgICBrY2hvbmdAY2EuaWJtLmNvbSAtIEtlaXRoIENob25nLCAodXBkYXRlZCBwYXRjaCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5sb2dnZXIucHJveHkuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnNlcnZlcnRhcmdldC5JU2VydmVyVGFyZ2V0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklVUkxQcm92aWRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU2VydmVyIHBsdWdpbiBmdW5jdGlvbnMKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFNlcnZlclV0aWxzIHsKLQotCXByaXZhdGUgSGFzaHRhYmxlIHNlcnZlcklkVG9MYWJlbF87Ci0KLQlwcml2YXRlIEhhc2h0YWJsZSBzZXJ2ZXJMYWJlbFRvSWRfOwotCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmVyVXRpbHMgaW5zdGFuY2VfOwotCi0JcHVibGljIHN0YXRpYyBTZXJ2ZXJVdGlscyBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZV8gPSBuZXcgU2VydmVyVXRpbHMoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2VfOwotCi0JfQotCi0JcHVibGljIFNlcnZlclV0aWxzKCkgewotCX0KLQotCS8vIEdldHMgdGhlIFNlcnZlciBsYWJlbHMgZ2l2ZW4gdGhlIHNlcnZlciBmYWN0b3J5IGlkCi0JcHVibGljIHZvaWQgZ2V0U2VydmVyTGFiZWxzQW5kSWRzKCkgewotCQlzZXJ2ZXJJZFRvTGFiZWxfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlzZXJ2ZXJMYWJlbFRvSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQlmb3IgKGludCBpZHggPSAwOyBpZHggPCBzZXJ2ZXJUeXBlcy5sZW5ndGg7IGlkeCsrKSB7Ci0KLQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSAoSVNlcnZlclR5cGUpIHNlcnZlclR5cGVzW2lkeF07Ci0KLQkJCVN0cmluZyBpZCA9IHNlcnZlclR5cGUuZ2V0SWQoKTsKLQkJCVN0cmluZyBzZXJ2ZXJMYWJlbCA9IHNlcnZlclR5cGUuZ2V0TmFtZSgpOwotCQkJaWYgKCEoaWQgPT0gbnVsbCkgJiYgIShzZXJ2ZXJMYWJlbCA9PSBudWxsKSkgewotCQkJCXNlcnZlcklkVG9MYWJlbF8ucHV0KGlkLCBzZXJ2ZXJMYWJlbCk7Ci0JCQkJc2VydmVyTGFiZWxUb0lkXy5wdXQoc2VydmVyTGFiZWwsIGlkKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTGFiZWxGb3JJZChTdHJpbmcgZmFjdG9yeUlkKSB7Ci0JCWlmIChzZXJ2ZXJJZFRvTGFiZWxfID09IG51bGwpCi0JCQl0aGlzLmdldFNlcnZlckxhYmVsc0FuZElkcygpOwotCQlyZXR1cm4gKFN0cmluZykgc2VydmVySWRUb0xhYmVsXy5nZXQoZmFjdG9yeUlkKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlcklkRm9yTGFiZWwoU3RyaW5nIGZhY3RvcnlMYWJlbCkgewotCQlpZiAoc2VydmVyTGFiZWxUb0lkXyA9PSBudWxsKQotCQkJdGhpcy5nZXRTZXJ2ZXJMYWJlbHNBbmRJZHMoKTsKLQkJcmV0dXJuIChTdHJpbmcpIHNlcnZlckxhYmVsVG9JZF8uZ2V0KGZhY3RvcnlMYWJlbCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbW9kaWZ5TW9kdWxlcyhJRW52aXJvbm1lbnQgZW52LCBJU2VydmVyIHNlcnZlciwKLQkJCUlNb2R1bGUgbW9kdWxlLCBib29sZWFuIGFkZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVNlcnZlcldvcmtpbmdDb3B5IHdjID0gbnVsbDsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotCQl0cnkgewotCi0JCQlpZiAobW9kdWxlID09IG51bGwgfHwgIW1vZHVsZS5nZXRQcm9qZWN0KCkuZXhpc3RzKCkpIHsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCQkvLyBjaGVjayBpZiBtb2R1bGUgaXMgYSB0cnVlIEphdmEgcHJvamVjdAotCQkJaWYgKG1vZHVsZSBpbnN0YW5jZW9mIElNb2R1bGUpIHsKLQkJCQlJTW9kdWxlIHBtID0gKElNb2R1bGUpIG1vZHVsZTsKLQkJCQlpZiAocG0gIT0gbnVsbCkgewotCQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gcG0uZ2V0UHJvamVjdCgpOwotCQkJCQlpZiAocHJvamVjdCA9PSBudWxsCi0JCQkJCQkJfHwgUmVzb3VyY2VVdGlscy5pc1RydWVKYXZhUHJvamVjdChwcm9qZWN0KSkgewotCQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJd2MgPSBzZXJ2ZXIuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJCWlmICh3YyAhPSBudWxsKSB7Ci0vLwkJCQlPYmplY3QgeCA9IHNlcnZlci5nZXRBZGFwdGVyKElSdW5uaW5nQWN0aW9uU2VydmVyLmNsYXNzKTsKLS8vCQkJCWlmICh4ICE9IG51bGwgJiYgeCBpbnN0YW5jZW9mIElSdW5uaW5nQWN0aW9uU2VydmVyKSB7Ci0vLwkJCQkJaW50IHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0vLwkJCQkJaWYgKHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRAotLy8JCQkJCQkJfHwgc3RhdGUgPT0gSVNlcnZlci5TVEFURV9VTktOT1dOKSB7Ci0vLwkJCQkJCVN0cmluZyBtb2RlID0gSUxhdW5jaE1hbmFnZXIuUlVOX01PREU7Ci0vLwkJCQkJCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KG1vZGUsIG1vbml0b3IpOwotLy8JCQkJCX0KLS8vCQkJCX0KLQotCQkJCUxpc3QgbGlzdCA9IEFycmF5cy5hc0xpc3Qoc2VydmVyLmdldE1vZHVsZXMoKSk7Ci0JCQkJaWYgKGFkZCkgewotCQkJCQlpZiAoIWxpc3QuY29udGFpbnMobW9kdWxlKSkgewotCQkJCQkJU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKHdjLCBuZXcgSU1vZHVsZVtdIHsgbW9kdWxlIH0sCi0JCQkJCQkJCW5ldyBJTW9kdWxlWzBdLCBtb25pdG9yKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7IC8vIHJlbW92ZXMgbW9kdWxlCi0JCQkJCWlmIChsaXN0LmNvbnRhaW5zKG1vZHVsZSkpIHsKLQkJCQkJCVNlcnZlclV0aWwubW9kaWZ5TW9kdWxlcyh3YywgbmV3IElNb2R1bGVbMF0sCi0JCQkJCQkJCW5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwgbW9uaXRvcik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vIGhhbmRsZSBjYXNlIG9mIE51bGwgV0M7IG5vbi1pc3N1ZSBmb3Igbm93Ci0JCQl9Ci0JCX0gCi0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjICkgCi0gICAgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZXhjICk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKHdjICE9IG51bGwpIHsKLQkJCQkvLyBBbHdheXMgc2F2ZUFsbCBhbmQgcmVsZWFzZSB0aGUgc2VydmVyV29ya2luZ0NvcHkKLQkJCQl0cnkgCi0gICAgICAgIHsKLQkJCQkJd2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9IAotICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICAgICAgewotCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBleGMgKTsKLQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUsIFN0cmluZyBzZXJ2ZXJUeXBlSWQsIAotCQkJCQkJCQlJU2VydmVyIHNlcnZlciwgYm9vbGVhbiBjcmVhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gc2VydmVyOwotCQllbHNlCi0JCQlyZXR1cm4gZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSwgc2VydmVyVHlwZUlkLCBjcmVhdGUsIG1vbml0b3IpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUsCi0JCQlTdHJpbmcgc2VydmVyVHlwZUlkLCBib29sZWFuIGNyZWF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCXRyeSB7Ci0KLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUobW9kdWxlLCBtb25pdG9yKTsKLQotCQkJaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCQlpZiAoc2VydmVyVHlwZUlkID09IG51bGwgfHwgc2VydmVyVHlwZUlkLmxlbmd0aCgpID09IDApCi0JCQkJCXJldHVybiBzZXJ2ZXJzWzBdOyAvLyBXU0FEIHY0IGJlaGF2aW9yCi0KLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzSWdub3JlQ2FzZSgKLQkJCQkJCQlzZXJ2ZXJUeXBlSWQpKQotCQkJCQkJcmV0dXJuIHNlcnZlcnNbaV07Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gY3JlYXRlU2VydmVyKG1vZHVsZSwgc2VydmVyVHlwZUlkLCBtb25pdG9yKTsKLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgZ2V0U2VydmVyRm9yTW9kdWxlKElNb2R1bGUgbW9kdWxlKSB7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKG1vZHVsZSwgbnVsbCk7Ci0JCQlyZXR1cm4gKChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSA/IHNlcnZlcnNbMF0gOiBudWxsKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb2R1bGUKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkCi0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoSUVudmlyb25tZW50IGVudiwgSU1vZHVsZSBtb2R1bGUsCi0JCQlTdHJpbmcgc2VydmVyVHlwZUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gbnVsbDsKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQl0cnkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLCBudWxsLCBtb25pdG9yKTsKLQkJCXRyeSB7Ci0JCQkJaWYgKHNlcnZlcldDICE9IG51bGwpIHsKLQkJCQkJc2VydmVyID0gc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSAKLSAgICAgIHsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGNlKTsKLQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCWlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCi0vLwkJCQlPYmplY3QgeCA9IHNlcnZlci5nZXRBZGFwdGVyKElSdW5uaW5nQWN0aW9uU2VydmVyLmNsYXNzKTsKLS8vCQkJCWlmICh4ICE9IG51bGwgJiYgeCBpbnN0YW5jZW9mIElSdW5uaW5nQWN0aW9uU2VydmVyKSB7Ci0vLwkJCQkJaW50IHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0vLwkJCQkJaWYgKHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRAotLy8JCQkJCQkJfHwgc3RhdGUgPT0gSVNlcnZlci5TVEFURV9VTktOT1dOKSB7Ci0vLwkJCQkJCVN0cmluZyBtb2RlID0gSUxhdW5jaE1hbmFnZXIuUlVOX01PREU7Ci0vLwkJCQkJCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KG1vZGUsIG1vbml0b3IpOwotLy8JCQkJCX0KLS8vCQkJCX0KLQotCQkJCWlmIChtb2R1bGUgIT0gbnVsbCAmJiBtb2R1bGUuZ2V0UHJvamVjdCgpLmV4aXN0cygpKSB7Ci0JCQkJCUlNb2R1bGVbXSBwYXJlbnRNb2R1bGVzID0gc2VydmVyLmdldFJvb3RNb2R1bGVzKG1vZHVsZSwKLQkJCQkJCQltb25pdG9yKTsKLQkJCQkJaWYgKHBhcmVudE1vZHVsZXMgIT0gbnVsbCAmJiBwYXJlbnRNb2R1bGVzLmxlbmd0aCAhPSAwKSB7Ci0JCQkJCQltb2R1bGUgPSAoSU1vZHVsZSkgcGFyZW50TW9kdWxlc1swXTsKLQkJCQkJfQotCQkJCQlzZXJ2ZXJXQy5tb2RpZnlNb2R1bGVzKG5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwKLQkJCQkJCQluZXcgSU1vZHVsZVswXSwgbW9uaXRvcik7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCXJldHVybiBzZXJ2ZXI7Ci0JCX0gCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSAKLSAgICB7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgY2UpOwotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIGNyZWF0ZVNlcnZlciBUaGlzIGNyZWF0ZXMgYSBzZXJ2ZXIgYnV0IGRvZXMgbm90IHJlcG9ydCBlcnJvcnMuIEBwYXJhbQotCSAqIG1vZHVsZSAKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIAotCSAqIEBwYXJhbSBtb25pdG9yIHByb2dyZXNzIG1vbml0b3IgCi0JICogQHJldHVybiBJU2VydmVyIHJldHVybnMgbnVsbCBpZiB1bnN1Y2Nlc3NmdWwKLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoSU1vZHVsZSBtb2R1bGUsIFN0cmluZyBzZXJ2ZXJUeXBlSWQsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gbnVsbDsKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQl0cnkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLCBudWxsLCBtb25pdG9yKTsKLQotCQkJdHJ5IHsKLQkJCQlpZiAoc2VydmVyV0MgIT0gbnVsbCkgewotCQkJCQlzZXJ2ZXIgPSBzZXJ2ZXJXQy5zYXZlQWxsKHRydWUsIG1vbml0b3IpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0KLS8vCQkJCU9iamVjdCB4ID0gc2VydmVyLmdldEFkYXB0ZXIoSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIuY2xhc3MpOwotLy8JCQkJaWYgKHggIT0gbnVsbCAmJiB4IGluc3RhbmNlb2YgSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIpIHsKLS8vCQkJCQlpbnQgc3RhdGUgPSBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKTsKLS8vCQkJCQlpZiAoc3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUEVECi0vLwkJCQkJCQl8fCBzdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1VOS05PV04pIHsKLS8vCQkJCQkJU3RyaW5nIG1vZGUgPSBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERTsKLS8vCQkJCQkJc2VydmVyLnN5bmNocm9ub3VzU3RhcnQobW9kZSwgbW9uaXRvcik7Ci0vLwkJCQkJfQotLy8JCQkJfQotCQkJCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJCQlJTW9kdWxlW10gcGFyZW50TW9kdWxlcyA9IHNlcnZlci5nZXRSb290TW9kdWxlcyhtb2R1bGUsCi0JCQkJCQkJbW9uaXRvcik7Ci0JCQkJCWlmIChwYXJlbnRNb2R1bGVzICE9IG51bGwgJiYgcGFyZW50TW9kdWxlcy5sZW5ndGggIT0gMCkgewotCQkJCQkJbW9kdWxlID0gKElNb2R1bGUpIHBhcmVudE1vZHVsZXNbMF07Ci0JCQkJCX0KLQkJCQkJc2VydmVyV0MubW9kaWZ5TW9kdWxlcyhuZXcgSU1vZHVsZVtdIHsgbW9kdWxlIH0sCi0JCQkJCQkJbmV3IElNb2R1bGVbMF0sIG1vbml0b3IpOwotCQkJCX0KLQotCQkJfQotCi0JCQlyZXR1cm4gc2VydmVyOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCXJldHVybiBudWxsOwotCQkJCS8vIGhhbmRsZXIgY29yZSBleGNlcHRpb24KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyVHlwZUlkc0J5TW9kdWxlKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gY29tcG9uZW50LmdldFByb2plY3QoKTsKLQkJU3RyaW5nW10gc2VydmVySWRzID0gbnVsbDsKLQotCQlpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0JCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKGdldE1vZHVsZShwcm9qZWN0KSwgbnVsbCk7Ci0JCQlpZiAoc2VydmVycyAhPSBudWxsKSB7Ci0JCQkJc2VydmVySWRzID0gbmV3IFN0cmluZ1tzZXJ2ZXJzLmxlbmd0aF07Ci0KLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2VydmVycy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQkJc2VydmVySWRzW2luZGV4XSA9IHNlcnZlcnNbaW5kZXhdLmdldElkKCk7Ci0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc2VydmVySWRzID09IG51bGwpIHsKLQkJCXNlcnZlcklkcyA9IG5ldyBTdHJpbmdbMF07Ci0JCX0KLQotCQlyZXR1cm4gc2VydmVySWRzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIEBkZXByZWNhdGVkIHNob3VsZCBiZSB1c2luZyBnZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUoIElWaXJ0dWFsQ29tcG9uZW50ICkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlclR5cGVJZHNCeU1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVZlY3RvciBzZXJ2ZXJJZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCWlmIChwcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoUmVzb3VyY2VVdGlscwotCQkJCQkuZ2V0TW9kdWxlKHByb2plY3QpLCBudWxsKTsKLQkJCWlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXNlcnZlcklkcy5hZGQoc2VydmVyc1tpXS5nZXRJZCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChTdHJpbmdbXSkgc2VydmVySWRzLnRvQXJyYXkobmV3IFN0cmluZ1tzZXJ2ZXJJZHMuc2l6ZSgpXSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JcmV0dXJuIFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotfQotCS8qKgotCSAqIEZpbmQgdGhlIHNwZWNpZmljIG1vZHVsZSB3aXRoIG1vZHVsZSBuYW1lIGluIGEgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0IC0gdGhlIHByb2plY3QKLQkgKiBAcGFyYW0gbW9kdWxlIC0gbmFtZSBvZiBkZXNpcmVkIG1vZHVsZQotCSAqIEByZXR1cm4gSU1vZHVsZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSU1vZHVsZSBnZXRNb2R1bGUoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIG1vZHVsZSkgewotCQkvLyBJZiBtb2R1bGUgaXMgbnVsbCwgdGhlbiBqdXN0IHJldHVybiB0aGUgZmlyc3Qgb25lCi0JCWlmIChtb2R1bGUgPT0gbnVsbCkKLQkJCXJldHVybiBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCQotCQlJTW9kdWxlW10gbW9kdWxlcyA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlcyhwcm9qZWN0KTsKLQkJaW50IGxlbmd0aCA9IG1vZHVsZXMubGVuZ3RoOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotCQl7Ci0JCQlJTW9kdWxlIGFNb2R1bGUgPSBtb2R1bGVzW2ldOwotCQkJaWYgKG1vZHVsZS5lcXVhbHMoYU1vZHVsZS5nZXROYW1lKCkpKQotCQkJCXJldHVybiBhTW9kdWxlOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLS8vIFdvcmthcm91bmQgZm9yIDExMzYyMQotLy9wdWJsaWMgc3RhdGljIElNb2R1bGUgZ2V0TW9kdWxlKElQcm9qZWN0IHByb2plY3QpIHsKLS8vCUlNb2R1bGVbXSBtb2R1bGVzID0gU2VydmVyVXRpbC5nZXRNb2R1bGVzKHByb2plY3QpOwotLy8JaWYgKG1vZHVsZXMhPW51bGwgJiYgbW9kdWxlcy5sZW5ndGghPTApIHsKLS8vCQlyZXR1cm4gbW9kdWxlc1swXTsKLS8vCX0KLS8vCXJldHVybiBudWxsOwotLy99Ci0gIAotCS8qKgotCSAqIFJldHVybnMgdGhlIFVSTCBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBvZiB0aGUKLQkgKiBjb21wb25lbnQgYmFzZWQgb24gYSBzZXJ2ZXIgZmFjdG9yeSBJRCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlCi0JICogb3IgdGhlIG1vZHVsZSByb290IGNhbm5vdCBiZSBkZXRlcm1pbmVkIChlLmcuIEZvciBzb21lIHR5cGVzIG9mIAotCSAqIHNlcnZlcnMsIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGdldCBtb2R1bGUgcm9vdCBVUkwgaWYgdGhlIHNlcnZlciBoYXMgbm90IGJlZW4gc3RhcnRlZCkuCi0JICogTm90ZSB0aGF0IHdlIGFyZSBub3QgcmVseWluZyBvbiB3aGljaCBzZXJ2ZXIgdGhlIG1vZHVsZSBpcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRvIGRldGVybWluZQotCSAqIHRoZSBjb3JyZWN0IG1vZHVsZSBzZXJ2ZXIgcm9vdCBiZWNhdXNlIHRoZSBwcm9qZWN0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZlciBidXQgd2UgbmVlZCB0aGUKLQkgKiBtb2R1bGUgcm9vdCBiYXNlZCBvbiBhbm90aGVyIHNlcnZlciBmYWN0b3J5IElELgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHNlcnZlciBmYWN0b3J5IElECi0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJDb21wb25lbnRVUkwoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7ICAgICAgICAgICAgICAgCi0JCQlpZiAoc2VydmVyVHlwZSE9bnVsbCkKLQkJCXsKLQkJCQl0cnkgewotCQkJCQkvL0Nob29zZSBhIFJ1bnRpbWUgd2hpY2ggaXMgbm90IGEgc3R1YgotCQkJCQlJUnVudGltZSBub25TdHViUnVudGltZSA9IG51bGw7Ci0JCQkJCUlSdW50aW1lW10gcnVudGltZXMgPSBTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKG51bGwsIG51bGwpOwotCQkJCQlTdHJpbmcgc2VydmVyUnVudGltZVR5cGVJZCA9IHNlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQlJUnVudGltZSBydW50aW1lID0gcnVudGltZXNbaV07Ci0JCQkJCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQkJCQlpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQlTdHJpbmcgdGhpc1J1bnRpbWVUeXBlSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQkJCQkJCWlmICh0aGlzUnVudGltZVR5cGVJZC5lcXVhbHMoc2VydmVyUnVudGltZVR5cGVJZCkgJiYgIXJ1bnRpbWUuaXNTdHViKCkpIHsKLQkJCQkJCQkJLy9Gb3VuZCBhbiBhcHByb3ByaWF0ZSBJUnVudGltZSB0aGF0IGlzIG5vdCBhIHN0dWIKLQkJCQkJCQkJbm9uU3R1YlJ1bnRpbWUgPSBydW50aW1lOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQlpZiAobm9uU3R1YlJ1bnRpbWUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIobnVsbCwgbnVsbCwgbm9uU3R1YlJ1bnRpbWUsIG51bGwpOwotCQkJCQkJSVVSTFByb3ZpZGVyIHVybFByb3ZpZGVyID0gKElVUkxQcm92aWRlcikgc2VydmVyV0MubG9hZEFkYXB0ZXIoSVVSTFByb3ZpZGVyLmNsYXNzLCBudWxsKTsKLQkJCQkJCWlmICh1cmxQcm92aWRlciE9bnVsbCkgewotCQkJCQkJCVVSTCB1cmwgPSB1cmxQcm92aWRlci5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7CQkJCQkJCQotCQkJCQkJCWlmICh1cmwgIT0gbnVsbCkgewotCQkJCQkJCQlTdHJpbmcgcyA9IHVybC50b1N0cmluZygpOwotCQkJCQkJCQl3ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCkgLSAxKSA6IHMpOwotCQkJCQkJCX0JCQkJCi0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCX0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQkJCUxvZ2dlci5nZXRMb2dnZXIoKS5sb2coY2UpOwotCQkJCX0KLQotCQkJfQotCQl9Ci0JCXJldHVybiB3ZWJQcm9qZWN0VVJMOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFVSTCBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBvZiB0aGUKLQkgKiBjb21wb25lbnQgYmFzZWQgb24gYSBzZXJ2ZXIgZmFjdG9yeSBJRCBhbmQgc2VydmVyLiAgUmV0dXJucyBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlCi0JICogb3IgdGhlIG1vZHVsZSByb290IGNhbm5vdCBiZSBkZXRlcm1pbmVkIChlLmcuIEZvciBzb21lIHR5cGVzIG9mIAotCSAqIHNlcnZlcnMsIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGdldCBtb2R1bGUgcm9vdCBVUkwgaWYgdGhlIHNlcnZlciBoYXMgbm90IGJlZW4gc3RhcnRlZCkuCi0JICogTm90ZSB0aGF0IHdlIGFyZSBub3QgcmVseWluZyBvbiB3aGljaCBzZXJ2ZXIgdGhlIG1vZHVsZSBpcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRvIGRldGVybWluZQotCSAqIHRoZSBjb3JyZWN0IG1vZHVsZSBzZXJ2ZXIgcm9vdCBiZWNhdXNlIHRoZSBwcm9qZWN0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZlciBidXQgd2UgbmVlZCB0aGUKLQkgKiBtb2R1bGUgcm9vdCBiYXNlZCBvbiBhbm90aGVyIHNlcnZlciAvIHNlcnZlciBmYWN0b3J5IElELgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHNlcnZlciBmYWN0b3J5IElECi0JICogQHBhcmFtIHNlcnZlciBTZXJ2ZXIgaWQKLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYkNvbXBvbmVudFVSTChJUHJvamVjdCBwcm9qZWN0LAotCQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQotCQlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCWlmIChzZXJ2ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIElVUkxQcm92aWRlciB1cmxQcm92aWRlciA9IChJVVJMUHJvdmlkZXIpIHNlcnZlci5sb2FkQWRhcHRlcihJVVJMUHJvdmlkZXIuY2xhc3MsIG51bGwpOwotICAgICAgICAgICAgICAgIGlmICh1cmxQcm92aWRlciE9bnVsbCkgewotICAgICAgICAgICAgICAgICAgICBVUkwgdXJsID0gdXJsUHJvdmlkZXIuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOyAgICAgICAgICAgICAgCi0JCQkJCWlmICh1cmwgIT0gbnVsbCkgewotCQkJCQkgIFN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0JCQkJCSAgd2ViUHJvamVjdFVSTCA9IChzLmVuZHNXaXRoKCIvIikgPyBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCgpIC0gMSkgOiBzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJd2ViUHJvamVjdFVSTCA9IGdldFdlYkNvbXBvbmVudFVSTChwcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJfQotCQl9Ci0JCXJldHVybiB3ZWJQcm9qZWN0VVJMOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJU3RyaW5nIHVybCA9IGdldFdlYkNvbXBvbmVudFVSTChwcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQpOwotCQlyZXR1cm4gZW5jb2RlVVJMKHVybCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQkJU3RyaW5nIHVybCA9IGdldFdlYkNvbXBvbmVudFVSTChwcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcik7Ci0JCXJldHVybiBlbmNvZGVVUkwodXJsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGVVUkwoU3RyaW5nIHVybCkgewotCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IHVybC5sYXN0SW5kZXhPZignLycpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nQnVmZmVyIGVuY29kZWRVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJZW5jb2RlZFVSTC5hcHBlbmQodXJsLnN1YnN0cmluZygwLCBpbmRleCArIDEpKTsKLQkJCQl0cnkgewotCQkJCQlTdHJpbmcgY3R4dFJvb3QgPSBVUkxFbmNvZGVyLmVuY29kZSh1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSwgdXJsLmxlbmd0aCgpKSwgIlVURi04Iik7Ci0JCQkJCWludCBwbHVzSW5kZXggPSBjdHh0Um9vdC5pbmRleE9mKCcrJyk7Ci0JCQkJCXdoaWxlIChwbHVzSW5kZXggIT0gLTEpIHsKLQkJCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQkJCXNiLmFwcGVuZChjdHh0Um9vdC5zdWJzdHJpbmcoMCwgcGx1c0luZGV4KSk7Ci0JCQkJCQlzYi5hcHBlbmQoIiUyMCIpOwotCQkJCQkJc2IuYXBwZW5kKGN0eHRSb290LnN1YnN0cmluZyhwbHVzSW5kZXggKyAxLCBjdHh0Um9vdAotCQkJCQkJCS5sZW5ndGgoKSkpOwotCQkJCQkJY3R4dFJvb3QgPSBzYi50b1N0cmluZygpOwotCQkJCQkJcGx1c0luZGV4ID0gY3R4dFJvb3QuaW5kZXhPZignKycpOwotCQkJCQl9Ci0JCQkJCWVuY29kZWRVUkwuYXBwZW5kKGN0eHRSb290KTsKLQkJCQl9Y2F0Y2ggKElPRXhjZXB0aW9uIGlvKXsKLQkJCQkJLy9oYW5kbGVyIGV4Y2VwdGlvbgotCQkJCX0JCQkJCi0JCQkJdXJsID0gZW5jb2RlZFVSTC50b1N0cmluZygpOwotCQkJfQotCQl9Ci0JCXJldHVybiB1cmw7Ci0JfQkKLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXREZWZhdWx0RXhpc3RpbmdTZXJ2ZXIoSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBjb21wb25lbnQuZ2V0UHJvamVjdCgpOwotCQlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLQkJSVNlcnZlciBwcmVmZXJyZWRTZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmdldERlZmF1bHRTZXJ2ZXIobW9kdWxlKTsKLQkJaWYgKHByZWZlcnJlZFNlcnZlciAhPSBudWxsKQotCQkJcmV0dXJuIHByZWZlcnJlZFNlcnZlcjsKLQkJCi0JCUlTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKG1vZHVsZSwKLQkJCQludWxsKTsKLQotCQlpZiAoY29uZmlndXJlZFNlcnZlcnMgIT0gbnVsbCAmJiBjb25maWd1cmVkU2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQlwcmVmZXJyZWRTZXJ2ZXIgPSBjb25maWd1cmVkU2VydmVyc1swXTsKLQkJfSBlbHNlIHsKLQkJCUlTZXJ2ZXJbXSBub25Db25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwKLQkJCQkJLmdldEF2YWlsYWJsZVNlcnZlcnNGb3JNb2R1bGUobW9kdWxlLCBmYWxzZSwgbnVsbCk7Ci0KLQkJCWlmIChub25Db25maWd1cmVkU2VydmVycyAhPSBudWxsCi0JCQkJCSYmIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCQlwcmVmZXJyZWRTZXJ2ZXIgPSBub25Db25maWd1cmVkU2VydmVyc1swXTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBwcmVmZXJyZWRTZXJ2ZXI7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogQGRlcHJlY2F0ZWQgc2hvdWxkIGJlIHVzaW5nIGdldERlZmF1bHRFeGlzdGluZ1NlcnZlciggSVZpcnR1YWxDb21wb25lbnQgKQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXREZWZhdWx0RXhpc3RpbmdTZXJ2ZXIoSVByb2plY3QgcHJvamVjdCkgewotICAgIAotICAgICAgSU1vZHVsZSBtb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZShwcm9qZWN0KTsKLSAgICAgIElTZXJ2ZXIgcHJlZmVycmVkU2VydmVyID0gbnVsbDsKLSAgICAgIHByZWZlcnJlZFNlcnZlciA9IFNlcnZlckNvcmUuZ2V0RGVmYXVsdFNlcnZlcihtb2R1bGUpOwotCQkKLS8vIFdvcmthcm91bmQgZm9yIDExMzYyMQotLy8JCUlNb2R1bGVbXSBtb2R1bGVzID0gU2VydmVyVXRpbC5nZXRNb2R1bGVzKHByb2plY3QpOwotLy8gICAgICBJU2VydmVyIHByZWZlcnJlZFNlcnZlciA9IG51bGw7Ci0vLyAgICAgIGlmIChtb2R1bGVzLmxlbmd0aCA+IDApewotLy8gICAgICAgIHByZWZlcnJlZFNlcnZlciA9IFNlcnZlckNvcmUuZ2V0RGVmYXVsdFNlcnZlcihtb2R1bGVzWzBdKTsKLS8vICAgICAgfQotICAKLQkJaWYgKHByZWZlcnJlZFNlcnZlciAhPSBudWxsKQotCQkJcmV0dXJuIHByZWZlcnJlZFNlcnZlcjsKLQotCQlJU2VydmVyW10gY29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZSgKLQkJCQlSZXNvdXJjZVV0aWxzLmdldE1vZHVsZShwcm9qZWN0KSwgbnVsbCk7Ci0JCWlmIChjb25maWd1cmVkU2VydmVycyAhPSBudWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiBjb25maWd1cmVkU2VydmVyc1swXTsKLQkJfQotCi0JCUlTZXJ2ZXJbXSBub25Db25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwKLQkJCQkuZ2V0QXZhaWxhYmxlU2VydmVyc0Zvck1vZHVsZShSZXNvdXJjZVV0aWxzLmdldE1vZHVsZShwcm9qZWN0KSwKLQkJCQkJCWZhbHNlLCBudWxsKTsKLQkJaWYgKG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzICE9IG51bGwgJiYgbm9uQ29uZmlndXJlZFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qCi0JICogQHBhcmFtIG1vZHVsZVR5cGUgLSBhZCBkZWZpbmVkIGluIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMgKGkuZS4gRUFSX1RZUEUsCi0JICogV0VCX1RZUEUsIGV0Yy4pIEBwYXJhbSBqMmVlVmVyc2lvbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludAotCSAqIHZhbHVlcyBpbiBKMkVFVmVyc2lvbkNvbnN0YW50cyBpLmUuICIxMiIgb3IgIjEzIiBvciAiMTQiIEByZXR1cm4gU3RyaW5nCi0JICogdGhlIGlkIG9mIHRoZSBzZXJ2ZXIgdGFyZ2V0IC0gdG8gYmUgdXNlZCBpbiBwcm9qZWN0IGNyZWF0aW9uIG9wZXJhdGlvbnMuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyVGFyZ2V0SWRGcm9tRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsCi0JCQlTdHJpbmcgbW9kdWxlVHlwZSwgU3RyaW5nIGoyZWVWZXJzaW9uKSB7Ci0JCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCWlmIChzZXJ2ZXJUeXBlID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlTdHJpbmcgc2VydmVyUnVudGltZVR5cGVJZCA9IHNlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotCi0JCVN0cmluZyBzdEoyRUVWZXJzaW9uID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyVGFyZ2V0SjJFRVZlcnNpb24oajJlZVZlcnNpb24pOwotICAgICAgICBMaXN0IHJ1bnRpbWVzID0gQXJyYXlzLmFzTGlzdChTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKG1vZHVsZVR5cGUsIHN0SjJFRVZlcnNpb24pKTsgICAgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMuc2l6ZSgpOyBpKyspIHsKLQkJCUlSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpIHJ1bnRpbWVzLmdldChpKTsKLQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JCQkJaWYgKHRoaXNSdW50aW1lVHlwZUlkLmVxdWFscyhzZXJ2ZXJSdW50aW1lVHlwZUlkKSAmJiAhcnVudGltZS5pc1N0dWIoKSkgewotCQkJCQlyZXR1cm4gcnVudGltZS5nZXRJZCgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qCi0JICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCB0aGUgc2VydmVyJ3MgZmFjdG9yeSBpZCBAcmV0dXJucyB0aGUgcnVudGltZSB0eXBlCi0JICogaWQgZ2l2ZW4gdGhlIHNlcnZlcidzIGZhY3RvcnkgaWQuIFJldHVybnMgYSBibGFuayBTdHJpbmcgaWYgdGhlIG5vCi0JICogU2VydmVyVHlwZSBleGlzdHMgZm9yIHRoZSBnaXZlbiBmYWN0b3J5IGlkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQlpZiAoc2VydmVyVHlwZSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgc2VydmVyUnVudGltZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0JCQlyZXR1cm4gc2VydmVyUnVudGltZUlkOwotCQl9IGVsc2UKLQkJCXJldHVybiAiIjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeUlkRnJvbVJ1bnRpbWVUYXJnZXRJZChTdHJpbmcgcnVudGltZVRhcmdldElkKXsKLQkJSVNlcnZlclR5cGVbXSBzZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLQkJZm9yIChpbnQgaT0wO2k8c2VydmVyVHlwZXMubGVuZ3RoO2krKykgewotCQkJSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXAgPSBzZXJ2ZXJUeXBlc1tpXS5nZXRSdW50aW1lVHlwZSgpOwotCQkJaWYgKHJ1bnRpbWVUeXAhPW51bGwpewotCQkJCWlmIChydW50aW1lVHlwLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVUYXJnZXRJZCkpCi0JCQkJCXJldHVybiBzZXJ2ZXJUeXBlc1tpXS5nZXRJZCgpOwotCQkJfQotCQl9Ci0JCXJldHVybiAiIjsKLQkJCi0JfQotCQotCi0JLyoKLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHRoZSBzZXJ2ZXIncyBmYWN0b3J5IGlkIEByZXR1cm5zIHRoZSBzZXJ2ZXIgdHlwZQotCSAqIGlkIGdpdmVuIHRoZSBzZXJ2ZXIncyBmYWN0b3J5IGlkLiBSZXR1cm5zIGEgYmxhbmsgU3RyaW5nIGlmIHRoZSBubwotCSAqIFNlcnZlclR5cGUgZXhpc3RzIGZvciB0aGUgZ2l2ZW4gZmFjdG9yeSBpZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJUeXBlSWRGcm9tRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLQkJaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkgewotCQkJU3RyaW5nIHNlcnZlclR5cGVJZCA9IHNlcnZlclR5cGUuZ2V0SWQoKTsKLQkJCXJldHVybiBzZXJ2ZXJUeXBlSWQ7Ci0JCX0gZWxzZQotCQkJcmV0dXJuICIiOwotCX0KLQotCS8qCi0JICogQHBhcmFtIGoyZWVWZXJzaW9uIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50IHZhbHVlcyBpbgotCSAqIEoyRUVWZXJzaW9uQ29uc3RhbnRzIGkuZS4gIjEyIiBvciAiMTMiIG9yICIxNCIKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUYXJnZXRWYWxpZEZvckVBUihTdHJpbmcgcnVudGltZVRhcmdldElkLAotCQkJU3RyaW5nIGoyZWVWZXJzaW9uKSB7Ci0JCWlmIChydW50aW1lVGFyZ2V0SWQgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgZWFyTW9kdWxlVHlwZSA9IElNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEU7Ci0JCVN0cmluZyBzdEoyRUVWZXJzaW9uID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyVGFyZ2V0SjJFRVZlcnNpb24oajJlZVZlcnNpb24pOwotICAgICAgICBMaXN0IHJ1bnRpbWVzID0gQXJyYXlzLmFzTGlzdChTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKGVhck1vZHVsZVR5cGUsIHN0SjJFRVZlcnNpb24pKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5zaXplKCk7IGkrKykgewotCQkJSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSkgcnVudGltZXMuZ2V0KGkpOwotCQkJSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHRoaXNJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JCQkJaWYgKHRoaXNJZC5lcXVhbHMocnVudGltZVRhcmdldElkKSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gajJlZVZlcnNpb24gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnQgdmFsdWVzIGluCi0JICogSjJFRVZlcnNpb25Db25zdGFudHMgaS5lLiAiMTIiIG9yICIxMyIgb3IgIjE0IiBAcGFyYW0gdGhlIHByb2plY3QgdHlwZQotCSAqIGZyb20gSVNlcnZlclRhcmdldENvbnN0YW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RhcmdldFZhbGlkRm9yUHJvamVjdFR5cGUoU3RyaW5nIHJ1bnRpbWVUYXJnZXRJZCwKLQkJCVN0cmluZyBqMmVlVmVyc2lvbiwgU3RyaW5nIHByb2plY3RUeXBlKSB7Ci0JCWlmIChydW50aW1lVGFyZ2V0SWQgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlpZiAocHJvamVjdFR5cGUgPT0gbnVsbCB8fCBwcm9qZWN0VHlwZS5sZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBzdEoyRUVWZXJzaW9uID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyVGFyZ2V0SjJFRVZlcnNpb24oajJlZVZlcnNpb24pOwotICAgICAgICBMaXN0IHJ1bnRpbWVzID0gQXJyYXlzLmFzTGlzdChTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKHByb2plY3RUeXBlLCBzdEoyRUVWZXJzaW9uKSk7ICAgIAotCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLnNpemUoKTsgaSsrKSB7Ci0JCQlJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKSBydW50aW1lcy5nZXQoaSk7Ci0JCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQlpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgdGhpc0lkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJCQlpZiAodGhpc0lkLmVxdWFscyhydW50aW1lVGFyZ2V0SWQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihTdHJpbmcgajJlZVZlcnNpb24pIHsKLQotCQlpZiAoajJlZVZlcnNpb24gPT0gbnVsbCB8fCBqMmVlVmVyc2lvbi5sZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaW50IGoyZWVWZXJzaW9uSW50ID0gSW50ZWdlci5wYXJzZUludChqMmVlVmVyc2lvbik7Ci0JCXN3aXRjaCAoajJlZVZlcnNpb25JbnQpIHsKLQkJY2FzZSAoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQpOgotCQkJcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuSjJFRV8xMjsKLQkJY2FzZSAoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpOgotCQkJcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuSjJFRV8xMzsKLQkJY2FzZSAoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOgotCQkJcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuSjJFRV8xNDsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCQotCS8vQ29udmVydHMgYSBtb2R1bGUgdHlwZSBmcm9tIEoyRUVVdGlscyB0byBhIG1vZHVsZSB0eXBlIGxpa2UKLQkvL3RoZSBvbmUgaW4gSVNlcnZlclRhcmdldENvbnN0YW50cy4KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJUYXJnZXRNb2R1bGVUeXBlKGludCBtb2R1bGVUeXBlKQotCXsKLQkJc3dpdGNoIChtb2R1bGVUeXBlKQotICAgIHsKLSAgICBjYXNlIEoyRUVVdGlscy5XRUIgOgotICAgICAgcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuV0VCX1RZUEU7Ci0gICAgY2FzZSBKMkVFVXRpbHMuRUpCIDoKLSAgICAgIHJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkVKQl9UWVBFOwotICAgIGNhc2UgSjJFRVV0aWxzLkFQUENMSUVOVCA6Ci0gICAgICByZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5BUFBfQ0xJRU5UX1RZUEU7Ci0gICAgY2FzZSBKMkVFVXRpbHMuRUFSIDoKLSAgICAgIHJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkVBUl9UWVBFOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIAotICAgIH0gICAgICAJCQkKLQl9Ci0gICAgCi0gIC8qCi0gICAqIFJldHVybnMgYSBub24tc3R1YiBydW50aW1lIGlmIG9uZSBpcyBhdmFpbGFibGUgZm9yIHRoZSB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUuCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgLSBzZXJ2ZXIgdHlwZSBpZAotICAgKiBAcmV0dXJucyBJUnVudGltZSBSZXR1cm5zIGEgbm9uLXN0dWIgcnVudGltZSBpZiBvbmUgaXMgYXZhaWxhYmxlIGZvciB0aGUgdGhlIGdpdmVuIHNlcnZlciB0eXBlLgotICAgKiBSZXR1cm5zIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJUnVudGltZSBnZXROb25TdHViUnVudGltZShTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgLy9GaW5kIGEgUnVudGltZSB3aGljaCBpcyBub3QgYSBzdHViCi0gICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLSAgICBJUnVudGltZSBub25TdHViUnVudGltZSA9IG51bGw7Ci0gICAgaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL2Jvb2xlYW4gZm91bmROb25TdHViUnVudGltZSA9IGZhbHNlOwotICAgICAgSVJ1bnRpbWVbXSBydW50aW1lcyA9IFNlcnZlclV0aWwuZ2V0UnVudGltZXMobnVsbCwgbnVsbCk7Ci0gICAgICBTdHJpbmcgc2VydmVyUnVudGltZVR5cGVJZCA9IHNlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSVJ1bnRpbWUgcnVudGltZSA9IHJ1bnRpbWVzW2ldOwotICAgICAgICBJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0gICAgCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotICAgIAl7Ci0gICAgCQlTdHJpbmcgdGhpc1J1bnRpbWVUeXBlSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCSAgICAgICAgaWYgKHRoaXNSdW50aW1lVHlwZUlkLmVxdWFscyhzZXJ2ZXJSdW50aW1lVHlwZUlkKSAmJiAhcnVudGltZS5pc1N0dWIoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgLy8gRm91bmQgYW4gYXBwcm9wcmlhdGUgSVJ1bnRpbWUgdGhhdCBpcyBub3QgYSBzdHViCi0JICAgICAgICAgIC8vZm91bmROb25TdHViUnVudGltZSA9IHRydWU7Ci0JICAgICAgICAgIG5vblN0dWJSdW50aW1lID0gcnVudGltZTsKLQkgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICB9Ci0gICAgCX0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5vblN0dWJSdW50aW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdGF0dXNPYmplY3RIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdGF0dXNPYmplY3RIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDk5YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RhdHVzT2JqZWN0SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLldyYXBwZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBTdGF0dXNPYmplY3RIYW5kbGVyCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0RFVEFJTFMgPSAxNjsKLQotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZ2VuZXJhdGVUcmVlU3RhdHVzIChJU3RhdHVzIHN0YXR1cykgCi0gIAl7Ci0gICAgLy8KLSAgICAvLyBUaGVyZSBjb3VsZCBiZSBsb3RzIG9mIFRocm93YWJsZXMsIENvcmVFeGNlcHRpb25zLAotICAgIC8vIFdyYXBwZWRFeGNlcHRpb25zIGFuZCBJU3RhdHVzIG9iamVjdHMgYmVuZWF0aCB0aGUKLSAgICAvLyBnaXZlbiBzdGF0dXMuIEZpbmQgdGhlbS4KLSAgICAvLwotICAgIExpbmtlZExpc3Qgc3RhdHVzTGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgYXBwZW5kU3RhdHVzKE1BWF9ERVRBSUxTLCBzdGF0dXNMaXN0LCBzdGF0dXMsIHN0YXR1cy5nZXRTZXZlcml0eSgpKTsKLSAgICBpZiAoc3RhdHVzTGlzdC5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIElTdGF0dXMgbmV3U3RhdHVzID0gKElTdGF0dXMpc3RhdHVzTGlzdC5yZW1vdmVGaXJzdCgpOwotICAgICAgaWYgKHN0YXR1c0xpc3Quc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1c1tdIHNlY29uZGFyeVN0YXR1c0FycmF5ID0gbmV3IElTdGF0dXNbc3RhdHVzTGlzdC5zaXplKCldOwotICAgICAgICBpbnQgbiA9IDA7Ci0gICAgICAgIEl0ZXJhdG9yIGkgPSBzdGF0dXNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIHNlY29uZGFyeVN0YXR1c0FycmF5W24rK10gPSAoSVN0YXR1cylpLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBuZXdTdGF0dXMgPSBuZXcgTXVsdGlTdGF0dXMoc3RhdHVzLmdldFBsdWdpbigpLHN0YXR1cy5nZXRDb2RlKCksc2Vjb25kYXJ5U3RhdHVzQXJyYXksc3RhdHVzLmdldE1lc3NhZ2UoKSxzdGF0dXMuZ2V0RXhjZXB0aW9uKCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ld1N0YXR1czsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICAJcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLwotICAvLyBBcHBlbmRzIHplcm8gb3IgbW9yZSBJU3RhdHVzIG9iamVjdHMgdG8gdGhlIGxpc3Qgb2YgSVN0YXR1cyBvYmplY3RzCi0gIC8vIGJhc2VkIHVwb24gYW4gSVN0YXR1cy4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGFwcGVuZFN0YXR1cyAoIGludCBtYXgsIExpc3Qgc3RhdHVzTGlzdCwgSVN0YXR1cyBzdGF0dXMsIGludCBzZXZlcml0eSApCi0gIHsKLSAgICBpZiAobWF4ID4gMCAmJiBzdGF0dXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIGFuIElTdGF0dXMgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gc3RhdHVzJyBtZXNzYWdlLgotICAgICAgLy8KLSAgICAgIGlmIChzdGF0dXMuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1heCA9IGFwcGVuZChzdGF0dXNMaXN0LG1heCxzZXZlcml0eSxzdGF0dXMuZ2V0UGx1Z2luKCksc3RhdHVzLmdldENvZGUoKSxzdGF0dXMuZ2V0TWVzc2FnZSgpLHN0YXR1cy5nZXRFeGNlcHRpb24oKSk7Ci0gICAgICB9Ci0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIHRoZSBJU3RhdHVzJyBUaHJvd2FibGUsIGlmIGFueS4KLSAgICAgIC8vCi0gICAgICBtYXggPSBhcHBlbmRUaHJvd2FibGUobWF4LHN0YXR1c0xpc3Qsc3RhdHVzLmdldEV4Y2VwdGlvbigpLHNldmVyaXR5KTsKLSAgICAgIC8vCi0gICAgICAvLyBJZiB0aGUgSVN0YXR1cyBpcyBhIG11bHRpIHN0YXR1cywgYXBwZW5kIHRoZSBjaGlsZHJlbi4KLSAgICAgIC8vCi0gICAgICBJU3RhdHVzW10gY2hpbGRyZW4gPSBzdGF0dXMuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxjaGlsZHJlbi5sZW5ndGggJiYgbWF4PjA7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbWF4ID0gYXBwZW5kU3RhdHVzKG1heCxzdGF0dXNMaXN0LGNoaWxkcmVuW2ldLHNldmVyaXR5KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1heDsKLSAgfQotCi0gIC8vCi0gIC8vIEFwcGVuZHMgemVybyBvciBtb3JlIElTdGF0dXMgb2JqZWN0cyB0byB0aGUgbGlzdCBvZiBJU3RhdHVzIG9iamVjdHMKLSAgLy8gYmFzZWQgdXBvbiBhIFRocm93YWJsZS4gV3JhcHBlZEV4Y2VwdGlvbnMgYW5kIENvcmVFeGNlcHRpb25zIGFyZQotICAvLyBnaXZlbiBzcGVjaWFsIHRyZWF0bWVudC4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGFwcGVuZFRocm93YWJsZSAoIGludCBtYXgsIExpc3Qgc3RhdHVzTGlzdCwgVGhyb3dhYmxlIHRocm93YWJsZSwgaW50IHNldmVyaXR5ICkKLSAgewotICAgIGlmIChtYXggPiAwICYmIHRocm93YWJsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgYW4gSVN0YXR1cyBvYmplY3QgZm9yIHRoZSBleGNlcHRpb24ncyBtZXNzYWdlLgotICAgICAgLy8KLSAgICAgIGlmICh0aHJvd2FibGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1heCA9IGFwcGVuZChzdGF0dXNMaXN0LG1heCxzZXZlcml0eSxXZWJTZXJ2aWNlUGx1Z2luLklELDAsdGhyb3dhYmxlLmdldExvY2FsaXplZE1lc3NhZ2UoKSx0aHJvd2FibGUpOwotICAgICAgfQotICAgICAgLy8KLSAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gaXMgYSBXcmFwcGVkRXhjZXB0aW9uLCBhcHBlbmQgdGhlIHdyYXBwZWQgRXhjZXB0aW9uLgotICAgICAgLy8KLSAgICAgIGlmICh0aHJvd2FibGUgaW5zdGFuY2VvZiBXcmFwcGVkRXhjZXB0aW9uKQotICAgICAgewotICAgICAgICBXcmFwcGVkRXhjZXB0aW9uIHdleGMgPSAoV3JhcHBlZEV4Y2VwdGlvbil0aHJvd2FibGU7Ci0gICAgICAgIG1heCA9IGFwcGVuZFRocm93YWJsZShtYXgsc3RhdHVzTGlzdCx3ZXhjLmV4Y2VwdGlvbigpLHNldmVyaXR5KTsKLSAgICAgIH0KLSAgICAgIC8vCi0gICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGlzIGEgQ29yZUV4Y2VwdGlvbiwgYXBwZW5kIHRoZSBlbmNsb3NlZCBJU3RhdHVzLgotICAgICAgLy8KLSAgICAgIGlmICh0aHJvd2FibGUgaW5zdGFuY2VvZiBDb3JlRXhjZXB0aW9uKQotICAgICAgewotICAgICAgICBDb3JlRXhjZXB0aW9uIGNleGMgPSAoQ29yZUV4Y2VwdGlvbil0aHJvd2FibGU7Ci0gICAgICAgIG1heCA9IGFwcGVuZFN0YXR1cyhtYXgsc3RhdHVzTGlzdCxjZXhjLmdldFN0YXR1cygpLHNldmVyaXR5KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1heDsKLSAgfQotCi0gIC8vCi0gIC8vIENyZWF0ZXMgYW5kIGFwcGVuZHMgYW4gSVN0YXR1cyB0byB0aGUgbGlzdCBvZiBJU3RhdHVzIG9iamVjdHMuCi0gIC8vCi0gIHByaXZhdGUgc3RhdGljIGludCBhcHBlbmQgKCBMaXN0IHN0YXR1c0xpc3QsIGludCBtYXgsIGludCBzZXZlcml0eSwgU3RyaW5nIGlkLCBpbnQgY29kZSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSB0aHJvd2FibGUgKQotICB7Ci0gICAgaWYgKG1heCA+IDApCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBuZXcgU3RhdHVzKHNldmVyaXR5LGlkLGNvZGUsbWVzc2FnZSx0aHJvd2FibGUpOwotICAgICAgc3RhdHVzTGlzdC5hZGQoc3RhdHVzKTsKLSAgICAgIG1heC0tOwotICAgIH0KLSAgICByZXR1cm4gbWF4OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyUGF0aFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyUGF0aFRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhN2UxZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlBhdGhUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotLyoqCi0gKiAKLSAqIFRyYW5zZm9ybXMgYSBpbnB1dCBTdHJpbmcgdG8gYSBQYXRoCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMlBhdGhUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQkKLQlwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsJCQkJIAotCQlQYXRoIHBhdGggPSBuZXcgUGF0aCh2YWx1ZS50b1N0cmluZygpKTsKLQkJcmV0dXJuIHBhdGg7CQkgCi0JfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MDY3ZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI4MDk0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDcwMzA1ICAgMTc1MTk0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbnQgdGFzayBJbml0aWFsU2VsZWN0aW9uIG9ubHkgYWxsb3dzIHdzZGwgd2l0aGluIHRoZSB3b3Jrc3BhY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotLyoqCi0gKiBUcmFuc2Zvcm1zIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyBhIHdvcmtzcGFjZSByZXNvdXJjZSBwYXRoIGludG8gYSBTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdAotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFN0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQotCXB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewotCQkKLQkJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihuZXcgUGF0aCh2YWx1ZS50b1N0cmluZygpKSk7Ci0JCWlmIChyZXNvdXJjZSAhPSBudWxsKQotCQl7Ci0JCQlJUHJvamVjdCByZXNQcm9qZWN0ID0gcmVzb3VyY2UuZ2V0UHJvamVjdCgpOwkJCQotCQkJLy8gY2hlY2sgaWYgcmVzb3VyY2UgaXMgcGFydCBvZiBhbiBFSkIKLQkJCWlmIChKMkVFVXRpbHMuaXNFSkJDb21wb25lbnQocmVzUHJvamVjdCkpCi0JCQl7Ci0JCQkJLy8gaWYgcmVzb3VyY2UgaXMgcGFydCBvZiBFSkIgbmVlZCB0byBnZXQgdGhlIEVudGVycHJpc2VCZWFuIGFzIHRoZSBzZWxlY3Rpb24KLQkJCQlJVmlydHVhbENvbXBvbmVudFtdIGVqYkNvbXBvbmVudHMgPSBKMkVFVXRpbHMuZ2V0RUpCQ29tcG9uZW50cyhyZXNQcm9qZWN0KTsKLQkJCQlFSkJBcnRpZmFjdEVkaXQgIGVqYkVkaXQgPSBudWxsOwkJCQotCQkJCXRyeXsJCQkJCi0JCQkJCWVqYkVkaXQgPSBFSkJBcnRpZmFjdEVkaXQuZ2V0RUpCQXJ0aWZhY3RFZGl0Rm9yUmVhZChlamJDb21wb25lbnRzWzBdKTsJCQkJCi0JCSAgICAgICAgICAgIEVKQlJlc291cmNlIGVqYlJlcyA9IGVqYkVkaXQuZ2V0RUpCSmFyWG1pUmVzb3VyY2UoKTsKLQkJICAgICAgICAgICAgRUpCSmFyIGVqYkphciA9IGVqYlJlcy5nZXRFSkJKYXIoKTsJICAgICAgICAgICAgCi0JCSAgICAgICAgICAgIElQYXRoIHBhdGggPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotCQkgICAgICAgICAgICBTdHJpbmcgcmVzb3VyY2VQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShwYXRoKTsKLQkJICAgICAgICAgICAgU3RyaW5nIGphdmFDbGFzc05hbWUgPSByZXNvdXJjZS5nZXROYW1lKCk7Ci0JCSAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBmaWxlIGV4dGVuc2lvbiBpZiBuZWNlc3NhcnkKLQkJICAgICAgICAgICAgaWYgKGphdmFDbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKT4tMSkKLQkJICAgICAgICAgICAgewkKLQkJICAgICAgICAgICAgICBqYXZhQ2xhc3NOYW1lID0gamF2YUNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgamF2YUNsYXNzTmFtZS5sYXN0SW5kZXhPZignLicpKTsJICAgICAgICAgICAgICAKLQkJICAgICAgICAgICAgfSAKLQkJICAgICAgICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IEphdmFNT0ZVdGlscy5nZXRKYXZhQ2xhc3MocmVzb3VyY2VQYXRoLCBqYXZhQ2xhc3NOYW1lLCByZXNQcm9qZWN0KTsKLQkJICAgICAgICAgICAgRW50ZXJwcmlzZUJlYW4gZWpiID0gZWpiSmFyLmdldEVudGVycHJpc2VCZWFuV2l0aFJlZmVyZW5jZShqYXZhQ2xhc3MpOwotCQkgICAgICAgICAgICBpZiAoZWpiICE9IG51bGwpCi0JCSAgICAgICAgICAgIHsKLQkJICAgICAgICAgICAgCXNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVqYi5nZXROYW1lKCkpOwkKLQkJICAgICAgICAgICAgfQotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJCQl7Ci0JCQkJCQotCQkJCX0KLQkJCQlmaW5hbGx5IHsKLQkJICAgICAgICAgICAgICBpZiAoZWpiRWRpdCE9bnVsbCkKLQkJICAgICAgICAgICAgICAgIGVqYkVkaXQuZGlzcG9zZSgpOwotCQkgICAgICAgIH0KLQkJCX0KLQkJCS8vIGlmIHNlbGVjdGlvbiBub3QgYWxyZWFkeSBzZXQgLSBjcmVhdGUgaXQgZnJvbSB0aGUgcmVzb3VyY2Ugb2JqZWN0Ci0JCQlpZiAoc2VsZWN0aW9uID09IG51bGwpCi0JCQl7Ci0JCQkgIHNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHJlc291cmNlKTsKLQkJCX0KLQkJfQotCQllbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyAmJiB2YWx1ZS50b1N0cmluZygpLmluZGV4T2YoIjoiKSAhPSAtMSkgewotCQkJLy8gcmVtb3RlIGZpbGUKLQkJCXNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHZhbHVlKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vIHN0cmluZyBkb2Vzbid0IHJldHVybiByZXNvdXJjZSAtIGVycm9yIGNvbmRpdGlvbgotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihXU1BsdWdpbk1lc3NhZ2VzLkVSUk9SX1NFTEVDVElPTl9UUkFOU0ZPUk0pOwotCQl9Ci0JCXJldHVybiBzZWxlY3Rpb247Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVGVzdEZhY2lsaXR5TGlzdFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVGVzdEZhY2lsaXR5TGlzdFRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NTk2MDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlRlc3RGYWNpbGl0eUxpc3RUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmcyVGVzdEZhY2lsaXR5TGlzdFRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCi0JcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKSB7Ci0JCVN0cmluZyB0ZXN0RmFjaWxpdHkgPSAoU3RyaW5nKXZhbHVlOwotCQkvL3ZhbHVlIHJlcHJlc2VudHMgbmFtZSBvZiBhIHRlc3QgZmFjaWxpdHkKLQkJLy9waWNrIHVwIGxpc3Qgb2YgdGVzdCBmYWNpbGl0aWVzCi0JCVN0cmluZ1tdIHRlc3RUeXBlcyA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCk7ICAgICAgICAJCi0JCQotCQlpbnQgaW5kZXggPSAwOwotCQkvL21hdGNoIHZhbHVlIHRvIG5hbWUgb2YgdGVzdCBmYWNpbGl0eSBhbmQgc2V0IGluZGV4IGFjY29yZGluZ2x5Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGVzdFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAodGVzdFR5cGVzW2ldLmVxdWFscyh0ZXN0RmFjaWxpdHkpKQotCQkJewkJCi0JCQkJYnJlYWs7Ci0JCQl9CQkJCi0JCQlpbmRleCsrOwotCQl9Ci0JCQotCQlTZWxlY3Rpb25MaXN0IHNlbGVjdGlvbkxpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdCh0ZXN0VHlwZXMsIGluZGV4KTsJCQotCQlyZXR1cm4gc2VsZWN0aW9uTGlzdDsKLQl9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODdmZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMwMyAgIDEyODgzMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkJlYW5Nb2RpZmllcjsKLQotcHVibGljIGNsYXNzIFN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIGltcGxlbWVudHMgQmVhbk1vZGlmaWVyIHsKLQotCXByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfUlRfSURfS0VZID0gIlNlcnZpY2UuUnVudGltZUlkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBSVU5USU1FX0lEID0gIlJ1bnRpbWVJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9TUlZfSURfS0VZID0gIlNlcnZpY2UuU2VydmVySWQiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFNFUlZFUl9JRCA9ICJTZXJ2ZXJJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgVFlQRV9JRCA9ICJUeXBlSWQiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFREX0VKQiA9ICJUT1AgRE9XTiBFSkIiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEJVX0VKQiA9ICJCT1RUT00gVVAgRUpCIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBURF9FSkJfVFlQRV9JRCA9ICIxL29yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuZWpiIjsKLQlwcml2YXRlIFN0cmluZyBCVV9FSkJfVFlQRV9JRCA9ICIwL29yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuZWpiIjsKLQlwcml2YXRlIFN0cmluZyBTRVJWSUNFX1BSRUZJWCA9ICJTZXJ2aWNlLiI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1BSRUZJWCA9ICJDbGllbnQuIjsgIC8vJE5PTi1OTFMtTiQKLQkKLQkvKioKLQkgKiBNb2RpZmllcyB0aGUgc3VwcGxpZWQgVHlwZVJ1bnRpbWVTZXJ2ZXIgYmVhbiB3aXRoIHByb3BlcnRpZXMgaW4gaG9sZGVyLgotCSAqIElmIHRoZSBiZWFuIGlzIG51bGwsIGNvbnN0cnVjdCBhIG5ldyBvbmUgYW5kIHNldCBpdHMgcHJvcGVydGllcy4KLQkgKiBAcGFyYW0gYmVhbiBUeXBlUnVudGltZVNlcnZlciBiZWFuIHRvIGJlIG1vZGlmaWVkCi0JICogQHBhcmFtIGhvbGRlciBNYXAgY29udGFpbmluZyB2YWx1ZXMgZm9yIFR5cGVSdW50aW1lU2VydmVyIHByb3BlcnRpZXMgCi0JICogQHJldHVybiBUeXBlUnVudGltZVNlcnZlciB3aXRoIHByb3BlcnRpZXMgc2V0Ci0JICovCi0JcHVibGljIHZvaWQgbW9kaWZ5KE9iamVjdCBiZWFuLCBPYmplY3QgaG9sZGVyKSB7Ci0JCQotCQlUeXBlUnVudGltZVNlcnZlciB0eXBlcyA9IG51bGw7Ci0JCWlmIChiZWFuID09IG51bGwgfHwgIShiZWFuIGluc3RhbmNlb2YgVHlwZVJ1bnRpbWVTZXJ2ZXIpKQotCQl7Ci0JCQl0eXBlcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwkJCQotCQl9Ci0JCWVsc2UKLQkJewotCQkJdHlwZXMgPSAoVHlwZVJ1bnRpbWVTZXJ2ZXIpYmVhbjsKLQkJfQotCQkKLQkJaWYgKGhvbGRlciBpbnN0YW5jZW9mIE1hcCkKLQkJewkKLQkJCU1hcCB0eXBlc01hcCA9IChNYXApaG9sZGVyOwotCQkJU3RyaW5nIHByZWZpeCA9ICIiOwotCQkJCi0JCQkKLQkJCWlmICh0eXBlc01hcC5jb250YWluc0tleShTRVJWSUNFX1JUX0lEX0tFWSl8fHR5cGVzTWFwLmNvbnRhaW5zS2V5KFNFUlZJQ0VfU1JWX0lEX0tFWSkpCi0JCQl7Ci0JCQkJcHJlZml4ID0gU0VSVklDRV9QUkVGSVg7Ci0JCQl9CQkJICAJCi0JCQllbHNlCi0JCQl7Ci0JCQkJcHJlZml4ID0gQ0xJRU5UX1BSRUZJWDsKLQkJCX0KLQkJCQotCQkJU3RyaW5nIHJ1bnRpbWVJRCA9IChTdHJpbmcpdHlwZXNNYXAuZ2V0KHByZWZpeCtSVU5USU1FX0lEKTsKLQkJCWlmIChydW50aW1lSUQgIT0gbnVsbCkKLQkJCQl0eXBlcy5zZXRSdW50aW1lSWQocnVudGltZUlEKTsJCQotCQkJCi0JCQlTdHJpbmcgc2VydmVySUQgPSAoU3RyaW5nKXR5cGVzTWFwLmdldChwcmVmaXgrU0VSVkVSX0lEKTsKLQkJCWlmIChzZXJ2ZXJJRCAgIT0gbnVsbCkJCQkJCi0JCQkJdHlwZXMuc2V0U2VydmVySWQoc2VydmVySUQpOwkKLQkJCQotCQkJLy9jaGVjayBpZiB3ZWIgc2VydmljZSB0eXBlIGlzIEVKQiAtIGlmIG5vdCwgZGVmYXVsdCBmb3IgSmF2YSBiZWFuIHR5cGVzCi0JCQlTdHJpbmcgdHlwZUlEID0gKFN0cmluZyl0eXBlc01hcC5nZXQocHJlZml4K1RZUEVfSUQpOwotCQkJaWYgKHR5cGVJRCAhPSBudWxsKQotCQkJewotCQkJCWlmICh0eXBlSUQudG9VcHBlckNhc2UoKS5lcXVhbHMoVERfRUpCKSkgIC8vb25seSBzZXR0aW5nIHR5cGVJRCBzcGVjaWZpY2FsbHkgZm9yIEVKQiBjYXNlCi0JCQkJewotCQkJCQl0eXBlcy5zZXRUeXBlSWQoVERfRUpCX1RZUEVfSUQpOwotCQkJCX0JCi0JCQkJZWxzZSBpZiAodHlwZUlELnRvVXBwZXJDYXNlKCkuZXF1YWxzKEJVX0VKQikpCi0JCQkJewotCQkJCQl0eXBlcy5zZXRUeXBlSWQoQlVfRUpCX1RZUEVfSUQpOwotCQkJCX0JCi0JCQl9CQkJCi0JCX0KLSAgfQkKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiNjZkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLQotLyoqCi0gKiBUcmFuc2Zyb21zIGEgamF2YS5sYW5nLlN0cmluZyB0byBhbiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2plY3QKLSAqLwotcHVibGljIGNsYXNzIFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyI3RyYW5zZm9ybShqYXZhLmxhbmcuT2JqZWN0KQotICAgKiBAcGFyYW0gT2JqZWN0IFRoaXMgbXVzdCBiZSBhIGphdmEubGFuZy5TdHJpbmcKLSAgICogQHJldHVybiBPYmplY3QgUmV0dXJucyBhbiBJUHJvamVjdAotICAgKi8KLQotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLQlTdHJpbmcgcHJvamVjdCAgICAgPSAoU3RyaW5nKXZhbHVlOwotCWludCAgICBzbGFzaEluZGV4ICA9IHByb2plY3QuaW5kZXhPZiggJy8nICk7Ci0JU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdDsKLQkKLQlpZiggc2xhc2hJbmRleCAhPSAtMSApCi0JewotCSAgcHJvamVjdE5hbWUgPSBwcm9qZWN0LnN1YnN0cmluZyggMCwgc2xhc2hJbmRleCApOwotCX0KLQkKLSAgICByZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNWVhYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb252ZW50aW9uczsKLQotLyoqCi0gICogVGhpcyBjbGFzcyBjb250YWlucyBzb21lIHVzZWZ1bCBzdHJpbmcgdXRpbGl0aWVzIHRoYXQgYXJlIG5vdCBwcm92aWRlZCBieQotICAqIGVpdGhlciBTdHJpbmcgb3IgU3RyaW5nQnVmZmVyLgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotKiovCi1wdWJsaWMgZmluYWwgY2xhc3MgU3RyaW5nVXRpbHMKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgbGluZSBzZXBhcmF0b3IuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV0xJTkUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0KLSAgcHJpdmF0ZSBTdHJpbmdVdGlscygpe307Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBzcGxpdHMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0IGludG8gbXVsdGlwbGUgbGluZXMKLSAgICAqIGJhc2VkIG9uIGEgbWF4aW11bSBsaW5lIGxlbmd0aC4gIFRoZSBtZXRob2Qgd2lsbCB0cnkgdG8gZml0IGFzCi0gICAgKiBtYW55IHdvcmRzIGFzIHBvc3NpYmxlIG9udG8gYSBsaW5lIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBtYXhpbXVtCi0gICAgKiBsaW5lIGxlbmd0aC4gIE5vdGU6IHRoZSBvbmx5IGNhc2Ugd2hlcmUgYSBsaW5lIG1pZ2h0IGV4Y2VlZCB0aGUKLSAgICAqIG1heGltdW0gaXMgaWYgYSBzaW5nbGUgd29yZCBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bS4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gc3BsaXR0ZXIoIFN0cmluZyB0ZXh0LCBpbnQgbWF4X2xlbmd0aCApCi0gIHsKLSAgICBWZWN0b3IgICAgICAgICAgcmV0dXJuX3RleHQgPSBuZXcgVmVjdG9yKDIwKTsKLSAgICBTdHJpbmdbXSAgICAgICAgcmV0dXJuX3N0cjsKLSAgICBpbnQgICAgICAgICAgICAgaW5kZXggPSAwOwotCi0gICAgd2hpbGUoIGluZGV4IDwgdGV4dC5sZW5ndGgoKSApCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHRleHQuc3Vic3RyaW5nKCBpbmRleCwgTWF0aC5taW4oIG1heF9sZW5ndGggKyBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Lmxlbmd0aCgpICkgKTsKLSAgICAgIGludCBzcGFjZV9pbmRleCA9IHN0ci5sYXN0SW5kZXhPZiggIiAiICk7Ci0KLSAgICAgIGlmKCBpbmRleCArIHN0ci5sZW5ndGgoKSA8IHRleHQubGVuZ3RoKCkgJiYKLSAgICAgICAgICB0ZXh0LmNoYXJBdCggaW5kZXggKyBzdHIubGVuZ3RoKCkgLSAxICkgIT0gJyAnICYmCi0gICAgICAgICAgdGV4dC5jaGFyQXQoIGluZGV4ICsgc3RyLmxlbmd0aCgpICkgIT0gJyAnICYmCi0gICAgICAgICAgc3BhY2VfaW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgICByZXR1cm5fdGV4dC5hZGRFbGVtZW50KCBzdHIuc3Vic3RyaW5nKCAwLCBzcGFjZV9pbmRleCApICk7Ci0gICAgICAgIGluZGV4ICs9IHNwYWNlX2luZGV4ICsgMTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuX3RleHQuYWRkRWxlbWVudCggc3RyLnRyaW0oKSApOwotICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuX3N0ciA9IG5ldyBTdHJpbmdbcmV0dXJuX3RleHQuc2l6ZSgpXTsKLQotICAgIGZvciggaW5kZXggPSAwOyBpbmRleCA8IHJldHVybl90ZXh0LnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgcmV0dXJuX3N0cltpbmRleF0gPSAoU3RyaW5nKShyZXR1cm5fdGV4dC5lbGVtZW50QXQoaW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuX3N0cjsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHN0cmluZyB3aXRoIGEgcmVwZWF0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCi0gICoqLwotICBzdGF0aWMgcHVibGljIFN0cmluZyByZXBlYXQoIGNoYXIgdGhlX2NoYXIsIGludCBjb3VudCApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlciggY291bnQgKTsKLQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKyApCi0gICAgewotICAgICAgYnVmLmFwcGVuZCggdGhlX2NoYXIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIGZsYXR0ZW5zIGFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBhIHN0cmluZy4KLSAgICAqIFRoZSBtZXRob2QgcmVzcGVjdHMgZW1iZWRkZWQgd2hpdGVzcGFjZSBhbmQgcXVvdGVzLgotICAgICogPHVsPgotICAgICogPGxpPkFueSBhcmd1bWVudCB3aXRoIGVtYmVkZGVkIHdoaXRlc3BhY2Ugd2lsbCBiZSBmbGF0dGVuZWQgb3V0Ci0gICAgKiB3aXRoIGVuY2xvc2luZyBxdW90ZXMuIEZvciBleGFtcGxlLCB0aGUgc2luZ2xlIGFyZ3VtZW50Ci0gICAgKiA8dT5IZWxsbyBXb3JsZDwvdT4KLSAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMKLSAgICAqIDx1PiJIZWxsbyBXb3JsZCI8L3U+LgotICAgICogPGxpPkFueSBhcmd1bWVudCB3aXRoIHF1b3RlcyB3aWxsIGJlIGZsYXR0ZW5lZCBvdXQgd2l0aCB0aGUKLSAgICAqIHF1b3RlcyBlc2NhcGVkLiBGb3IgZXhhbXBsZSwgdGhlIHNpbmdsZSBhcmd1bWVudAotICAgICogPHU+IkhhcHB5IGRheXMiPC91PgotICAgICogd2lsbCBiZSByZXR1cm5lZCBhcwotICAgICogPHU+XCJIYXBweSBkYXlzXCI8L3U+LgotICAgICogPC91bD4KLSAgICAqIEBwYXJhbSBhcmd1bWVudHMgVGhlIGFycmF5IG9mIHN0cmluZ3MgdG8gZmxhdHRlbi4KLSAgICAqIEByZXR1cm4gdGhlIGZsYXR0ZW5lZCBzdHJpbmcuCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgU3RyaW5nIGZsYXR0ZW5Bcmd1bWVudHMgKCBTdHJpbmdbXSBhcmd1bWVudHMgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCBhIHNlcGFyYXRvciAoZXhjZXB0IHRoZSBmaXJzdCB0aW1lKS4KLSAgICAgIC8vCi0gICAgICBpZiAoaSA+IDApIGJ1Zi5hcHBlbmQoJyAnKTsKLQotICAgICAgLy8KLSAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2UuCi0gICAgICAvLwotICAgICAgYm9vbGVhbiB3aGl0ZXNwYWNlID0gZmFsc2U7Ci0gICAgICBjaGFyW10gY2hhcnMgPSBhcmd1bWVudHNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGo9MDsgIXdoaXRlc3BhY2UgJiYgajxjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2hhcnNbal0pKQotICAgICAgICB7Ci0gICAgICAgICAgd2hpdGVzcGFjZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCB0aGUgYXJndW1lbnQsIHF1b3RlZCBhcyBuZWNlc3NhcnkuCi0gICAgICAvLwotICAgICAgaWYgKHdoaXRlc3BhY2UpIGJ1Zi5hcHBlbmQoJyInKTsKLSAgICAgIGZvciAoaW50IGo9MDsgajxjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzW2pdID09ICciJykgYnVmLmFwcGVuZCgnXFwnKTsKLSAgICAgICAgYnVmLmFwcGVuZChjaGFyc1tqXSk7Ci0gICAgICB9Ci0gICAgICBpZiAod2hpdGVzcGFjZSkgYnVmLmFwcGVuZCgnIicpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcGFyc2VzIHdoaXRlc3BhY2UtZGVsaW1pdHRlZCBmaWxlbmFtZXMgZnJvbQotICAgICogdGhlIGdpdmVuIDxjb2RlPmlucHV0PC9jb2RlPiBzdHJlYW0uIDxiPkxpbWl0YXRpb246PC9iPgotICAgICogUXVvdGVkIGZpbGVuYW1lcyBvciBmaWxlbmFtZXMgd2l0aCBlbWJlZGRlZCB3aGl0ZXNwYWNlCi0gICAgKiBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCi0gICAgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbS4KLSAgICAqIEByZXR1cm4gQW4gZW51bWVyYXRpb24gb2YgZmlsZW5hbWVzIGZyb20gdGhlIHN0cmVhbS4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBFbnVtZXJhdGlvbiBwYXJzZUZpbGVuYW1lc0Zyb21TdHJlYW0gKCBJbnB1dFN0cmVhbSBpbnB1dCApCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIGZpbGVuYW1lcyA9IG5ldyBWZWN0b3IoNjQsNjQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBudWxsOwotICAgIGJ5dGUgc3RhdGUgPSBTVEFURV9XUzsKLSAgICBpbnQgaWMgPSBpbnB1dC5yZWFkKCk7Ci0gICAgd2hpbGUgKGljID49IDApCi0gICAgewotICAgICAgY2hhciBjID0gKGNoYXIpaWM7Ci0gICAgICBzd2l0Y2ggKHN0YXRlKQotICAgICAgewotICAgICAgICBjYXNlIFNUQVRFX1dTOgotICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9OV1M7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNUQVRFX05XUzoKLSAgICAgICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGJ1ZmZlci50b1N0cmluZygpOwotICAgICAgICAgICAgZmlsZW5hbWVzLmFkZChmaWxlbmFtZSk7Ci0gICAgICAgICAgICBidWZmZXIgPSBudWxsOwotICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9XUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpYyA9IGlucHV0LnJlYWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVuYW1lcy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTVEFURV9XUyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgU1RBVEVfTldTID0gMTsKLQotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpcyB0aGUgdHlwZSBwYXNzZWQgaW4gaXMgYSBwcmltdGl2ZSBqYXZhIHR5cGUKLSAgKiBAcGFyYW0gY2xhc3MgbmFtZSBTdHJpbmcKLSAgKiBAcmV0dXJuIHRydWUgaXMgcHJpbWl0aXZlIHR5cGUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUHJpbWl0aXZlVHlwZShTdHJpbmcgdHlwZU5hbWUpIAotICB7Ci0KLSAgICBpZiAodHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYm9vbGVhbiIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJieXRlIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImRvdWJsZSIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJmbG9hdCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbnQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgibG9uZyIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzaG9ydCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJjaGFyIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAqIFRoZSBtZXRob2QgcmVwbGFjZSB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSBhbGxvd2VkIGluIFVSSXMKLSAgKiBhbmQgbm90IGFsbG93ZWQgaW4gSmF2YSBjbGFzcyBuYW1lcyB0byBhbiB1bmRlcnNjb3JlICgnXycpCi0gICogQHBhcmFtIFVSSSBTdHJpbmcKLSAgKiBAcmV0dXJuIHZhbGlkIEphdmEgY2xhc3MgbmFtZSBTdHJpbmcKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgVVJJMkNsYXNzTmFtZSggU3RyaW5nIHVyaSApIHsKLSAgICBTdHJpbmcgY2xhc3NOYW1lID0gdXJpOwotICAgIGZvciAoIGludCBpID0gMDsgaSA8IFVSSV9TWU1CT0xTLmxlbmd0aDsgaSsrICkgewotICAgIAljbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSAoIFVSSV9TWU1CT0xTW2ldLCBVTkRFUlNDT1JFICk7Ci0gICAgfQotICAgIHJldHVybiBjbGFzc05hbWU7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gVVJJX1NZTUJPTFMgPSB7Jy0nLCAnficsICcjJywgJy8nLCAnLid9OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFVOREVSU0NPUkUgPSAnXyc7Ci0KLQotICAvKioKLSAgICogVGhpcyByZXR1cm5zIGEgdmFsaWQgSmF2YSBpZGVudGlmaWVyIGJhc2VkIG9uIHRoZSBnaXZlbiBuYW1lLiAKLSAgICogKGZvbGxvd3MgSkFYLVJQQyAxLjAgUHVibGljIFJldmlldyBEcmFmdCAyIHJlY29tbWVuZGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGphdmFJZGVudGlmaWVyRm9yKFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGJvb2xlYW4gc2tpcHBlZCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBsb2NhbE5hbWUubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBjaGFyIGNoYXJhY3RlciA9IGxvY2FsTmFtZS5jaGFyQXQoaSk7Ci0gICAgICBpZiAoQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJQYXJ0KGNoYXJhY3RlcikgJiYgIWlzRGVsaW1pdGVyKGNoYXJhY3RlcikpCi0gICAgICB7Ci0gICAgICAgIGlmIChza2lwcGVkICYmIHJlc3VsdC5sZW5ndGgoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhcmFjdGVyID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXIpOwotICAgICAgICBza2lwcGVkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNraXBwZWQgPXRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFKYXZhQ29udmVudGlvbnMudmFsaWRhdGVJZGVudGlmaWVyKHJlc3VsdC50b1N0cmluZygpKS5pc09LKCkpCi0gICAgewotICAgICAgcmVzdWx0Lmluc2VydCgwLCAiXyIpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEZWxpbWl0ZXIoY2hhciBjaGFyYWN0ZXIpCi0gIHsKLSAgICByZXR1cm4gIlx1MDAyRFx1MDAyRVx1MDAzQVx1MDA1Rlx1MDBCN1x1MDM4N1x1MDZERFx1MDZERSIuaW5kZXhPZihjaGFyYWN0ZXIpICE9IC0xOwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFCZWFuUHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFCZWFuUHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNmZTI3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhQmVhblByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGEgc2ltcGxlIG9yIGluZGV4ZWQgcHJvcGVydHkKLSAqIGFzIGRlZmluZWQgYnkgdGhlIEphdmEgQmVhbiBzcGVjaWZpY2F0aW9uLiBFdmVyeQotICogSUphdmFCZWFuUHJvcGVydHkgaXMgY2hhcmFjdGVyaXplZCBieSBmb3VyIHRoaW5nczoKLSAqIDxvbD4KLSAqIDxsaT5UaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuPC9saT4KLSAqIDxsaT5XaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgaXMgaW5kZXhlZC48L2xpPgotICogPGxpPlRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgZ2V0dGVyLCBpZiBhbnkuPC9saT4KLSAqIDxsaT5UaGUgSkRUIElNZXRob2Qgb2YgdGhlIHNldHRlciwgaWYgYW55LjwvbGk+Ci0gKiA8L29sPgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElKYXZhQmVhblByb3BlcnR5Ci17Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCi0JICogQHJldHVybiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBpcyBpbmRleGVkLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgcHJvcGVydHkgaXMgaW5kZXhlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0luZGV4ZWQgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgZ2V0dGVyLgotCSAqIEZvciBpbmRleGVkIHByb3BlcnRpZXMsCi0JICogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBnZXR0ZXIgd2lsbCBiZSBhbiBhcnJheS4KLQkgKiBGb3Igc2ltcGxlIHByb3BlcnRpZXMsCi0JICogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBnZXR0ZXIgd2lsbCBub3QgYmUgYW4gYXJyYXkuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIGdldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgYSB3cml0ZS1vbmx5IHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEdldHRlciAoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgaW5kZXhlZCBnZXR0ZXIsCi0JICogb3IgbnVsbCBpZiB0aGlzIGlzIGVpdGhlciBub3QgYW4gaW5kZXhlZCBwcm9wZXJ0eSwKLQkgKiBvciBpcyBhbiBpbmRleGVkIHByb3BlcnR5IGJ1dCBoYXMgb25seSB0aGUgYXJyYXktCi0JICogYmFzZWQgZ2V0dGVyLgotCSAqIEByZXR1cm4gVGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBpbmRleGVkIGdldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgbm90IGFuIGluZGV4ZWQgcHJvcGVydHkgb3IKLQkgKiBpZiB0aGVyZSBpcyBubyBpbmRleGVkIGdldHRlci4KLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRJbmRleGVkR2V0dGVyICgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElNZXRob2Qgb2YgdGhlIHNldHRlci4KLQkgKiBGb3IgaW5kZXhlZCBwcm9wZXJ0aWVzLAotCSAqIHRoZSBwYXJhbWV0ZXIgdHlwZSBvZiB0aGUgc2V0dGVyIHdpbGwgYmUgYW4gYXJyYXkuCi0JICogRm9yIHNpbXBsZSBwcm9wZXJ0aWVzLAotCSAqIHRoZSBwYXJhbWV0ZXIgdHlwZSBvZiB0aGUgc2V0dGVyIHdpbGwgbm90IGJlIGFuIGFycmF5LgotCSAqIEByZXR1cm4gVGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBzZXR0ZXIsCi0JICogb3IgbnVsbCBpZiB0aGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldFNldHRlciAoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgaW5kZXhlZCBzZXR0ZXIsCi0JICogb3IgbnVsbCBpZiB0aGlzIGlzIGVpdGhlciBub3QgYW4gaW5kZXhlZCBwcm9wZXJ0eSwKLQkgKiBvciBpcyBhbiBpbmRleGVkIHByb3BlcnR5IGJ1dCBoYXMgb25seSB0aGUgYXJyYXktCi0JICogYmFzZWQgc2V0dGVyLgotCSAqIEByZXR1cm4gVGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBpbmRleGVkIHNldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgbm90IGFuIGluZGV4ZWQgcHJvcGVydHkgb3IKLQkgKiBpZiB0aGVyZSBpcyBubyBpbmRleGVkIHNldHRlci4KLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRJbmRleGVkU2V0dGVyICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgd2l0aGluIHdoaWNoIHRoZSBnZXR0ZXIgYW5kL29yIHNldHRlcgotCSAqIG9mIHRoaXMgcHJvcGVydHkgaXMgZGVjbGFyZWQsIG9yIG51bGwgaWYgbm9uZS4KLQkgKiBAcmV0dXJuIFRoZSB0eXBlIHdpdGhpbiB3aGljaCB0aGUgZ2V0dGVyIGFuZC9vciBzZXR0ZXIKLQkgKiBvZiB0aGlzIHByb3BlcnR5IGlzIGRlY2xhcmVkLgotCSAqLwotCXB1YmxpYyBJVHlwZSBnZXREZWNsYXJpbmdUeXBlICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxMmM5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogQSBKYXZhIFdlYiBzZXJ2aWNlIGNvbmZvcm1hbmNlIFJ1bGUgdGVzdHMgc29tZSBjb2xsZWN0aW9uCi0gKiBvZiBKYXZhIHJlc291cmNlcyB0aGF0IGltcGxlbWVudCwgb3IgYXJlIG1lYW50IHRvIGltcGxlbWVudCwKLSAqIGEgV2ViIHNlcnZpY2UgYWdhaW5zdCBhIHNpbmdsZSwgY29uY2lzZSByZXF1aXJlbWVudCBhcyBpcwotICogdHlwaWNhbGx5IGRlZmluZWQgYnkgYSBzcGVjaWZpY2F0aW9uIChlZy4gSkFYLVJQQywgSlNSIDEwOSkKLSAqIG9yIGEgcnVudGltZSAoZWcuIEFwYWNoZSBBeGlzKS4KLSAqIDxwPgotICogRXZlcnkgcnVsZSBtdXN0IGhhdmUgYSBuYW1lc3BhY2UgYW5kIGEgdW5pcXVlIElEIHVuZGVyIHRoYXQKLSAqIHRoYXQgbmFtZXNwYWNlLiBFdmVyeSBydWxlIG1heSBoYXZlIGEgc2hvcnQgbmFtZSBhbmQgYSBsb25nCi0gKiBkZXNjcmlwdGlvbiwgYm90aCBvZiB3aGljaCBhcmUgcmVjb21tZW5kZWQgYnV0IG9wdGlvbmFsLgotICogPHA+Ci0gKiBFdmVyeSBydWxlIGZvbGxvd3MgYSBsaWZlY3ljbGUgb2YgaW5pdGlhbGl6YXRpb24sIGFuYWx5c2lzCi0gKiBhbmQgY29tcGxldGlvbi4gQSBKYXZhIFdlYiBzZXJ2aWNlIHJ1bGUgZW5naW5lIHdpbGwgZHJpdmUKLSAqIHRoZSA8Y29kZT5pbml0KCk8L2NvZGU+IG1ldGhvZCB0byBpbml0aWFsaXplIHRoZSBydWxlLCB0aGVuCi0gKiBkcml2ZSB0aGUgdmFyaW91cyA8Y29kZT52aXNpdC4uLigpPC9jb2RlPiBtZXRob2RzIGFzIGl0Ci0gKiBuYXZpZ2F0ZXMgc29tZSBjb2xsZWN0aW9uIG9mIEpEVCByZXNvdXJjZXMsIHRoZW4gZHJpdmUgdGhlCi0gKiA8Y29kZT5nZXRSZXN1bHRzKCk8L2NvZGU+IG1ldGhvZCB0byBpbmRpY2F0ZSBhbmFseXNpcyBpcyBkb25lCi0gKiBhbmQgcmV0cmlldmUgYSBzdGF0dXMgb2JqZWN0IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcnVsZQotCSAqIHdpdGhpbiB0aGUgbmFtZXNwYWNlIHRvIHdoaWNoIHRoZSBydWxlIGJlbG9uZ3MuCi0JICogQHJldHVybiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJ1bGUuCi0JICogVmFsaWQgcnVsZSBpZGVudGlmaWVycyBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KLQkgKi8KLQlwdWJsaWMgaW50IGdldElkICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5hbWVzcGFjZSB0byB3aGljaCB0aGlzIHJ1bGUgYmVsb25ncy4KLQkgKiBAcmV0dXJuIFRoZSBuYW1lc3BhY2UgdG8gd2hpY2ggdGhpcyBydWxlIGJlbG9uZ3MuCi0JICogTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlICgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHJhbnNsYXRhYmxlIHNob3J0IG5hbWUgb2YgdGhpcyBydWxlLiAgCi0JICogQHJldHVybiBUaGUgdHJhbnNsYXRhYmxlIHNob3J0IG5hbWUgb2YgdGhpcyBydWxlLAotCSAqIG9yIG51bGwgaWYgdGhlIHJ1bGUgaGFzIG5vIG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHJhbnNsYXRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgcnVsZS4KLQkgKiBAcmV0dXJuIFRoZSB0cmFuc2xhdGFibGUgZGVzY3JpcHRpb24gb2YgdGhpcyBydWxlLAotCSAqIG9yIG51bGwgaWYgdGhlIHJ1bGUgaGFzIG5vIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHRvIGdpdmUgdGhpcyBydWxlIGEgY2hhbmNlCi0JICogdG8gaW5pdGlhbGl6ZSBpdHNlbGYgcHJpb3IgdG8gdmlzaXRpbmcgSkRUIG9iamVjdHMuCi0JICogQHBhcmFtIGVuZ2luZSBUaGUgZW5naW5lIGluaXRpYWxpemluZyB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHdoZW4gaXQgZGVjaWRlcyB0byB2aXNpdAotCSAqIGEgSmF2YSBjbGFzcyAoaWUuIHByaW1pdGl2ZSB0eXBlcyBhcmUgZXhjbHVkZWQpLgotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgY2xhc3MgdG8gdmlzaXQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSB0cmFpbCBvZiBvYmplY3RzIGJhY2sgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQKLQkgKiBhIEphdmEgY2xhc3MgZm91bmQgb24gdGhlIHRocm93cyBjbGF1c2Ugb2YgYSBtZXRob2QuCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBleGNlcHRpb24gY2xhc3MgdG8gdmlzaXQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSB0cmFpbCBvZiBvYmplY3RzIGJhY2sgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRFeGNlcHRpb24gKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0Ci0JICogYSBmaWVsZCBiZWxvbmdpbmcgdG8gYSBjbGFzcy4KLQkgKiBAcGFyYW0gamR0RmllbGQgVGhlIGZpZWxkIHRvIHZpc2l0LgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgdHJhaWwgb2Ygb2JqZWN0cyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RmllbGQgKCBJRmllbGQgamR0RmllbGQsIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHdoZW4gaXQgZGVjaWRlcyB0byB2aXNpdAotCSAqIGEgSmF2YSBCZWFuIHByb3BlcnR5IChpZS4gcmVwcmVzZW50ZWQgYnkgYSAiZ2V0IiBhbmQvb3IKLQkgKiAic2V0IiBtZXRob2QpIGJlbG9uaW5nIHRvIGEgY2xhc3MuCi0JICogQHBhcmFtIGJlYW5Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gdmlzaXQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSB0cmFpbCBvZiBvYmplY3RzIGJhY2sgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IGJlYW5Qcm9wZXJ0eSwgU3RhY2sgcGVhbnV0VHJhaWwgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0IGEgbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSBhZnRlciBhbGwgSkRUIG9iamVjdHMgaGF2ZQotCSAqIGJlZW4gdmlzaXRlZCBzbyB0aGF0IHRoZSBydWxlIGNhbiByZXR1cm4gYSBzdGF0dXMKLQkgKiBvYmplY3QgKHVzdWFsbHkgYSBtdWx0aS1zdGF0dXMpIHdpdGggYSBzdW1tYXJ5IG9mCi0JICogYW55IHZpb2xhdGlvbnMgYnkgSkRUIG9iamVjdHMgZGV0ZWN0ZWQgYnkgdGhpcyBydWxlLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdHMgb2YgdGhlIHJ1bGUncyBhbmFseXNpcy4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBnZXRSZXN1bHRzICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNlZjBiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGlzIGlzIGFuIGVuZ2luZSB0aGF0IHdhbGtzIGEgSkRUIG1vZGVsIGFuZCBydW5zIHJ1bGVzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUKLXsKLQkvKioKLQkgKiBBbmFseXplcyB0aGUgZ2l2ZW4gY2xhc3MgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGdpdmVuIAotCSAqIHByb2plY3QgZm9yIGNvbXBsaWFuY2UgdG8gYSBzZXQgb2YgSkFYLVJQQyBydWxlcy4KLQkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCBjb250ZXh0IG9mIHRoZSBhbmFseXNpcy4KLQkgKiBAcGFyYW0gcm9vdENsYXNzIFRoZSBJVHlwZSBvZiB0aGUgY2xhc3MgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gcnVsZXMgVGhlIHJ1bGVzIHRvIHVzZSBmb3IgdGhlIGFuYWx5c2lzLgotCSAqIEByZXR1cm4gQW4gSVN0YXR1cyBzdW1tYXJpemluZyB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCi0JICovCi0JcHVibGljIElTdGF0dXMgYW5hbHl6ZSAoIElQcm9qZWN0IHByb2plY3QsIElUeXBlIHJvb3RDbGFzcywgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUUmVzb2x2ZXIgaW4gdXNlIGJ5IHRoaXMgYW5hbHl6ZXIuCi0JICogVGhlIEpEVFJlc29sdmVyIGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlIG51bGwgb25seQotCSAqIGFmdGVyIHRoZSBhbmFseXplIG1ldGhvZCBoYXMgYmVlbiBpbnZva2VkIGFuZCBiZWZvcmUKLQkgKiB0aGUgZmlyc3QgcnVsZSBpcyB2aXNpdGVkLiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZAotCSAqIGZvciB1c2UgYnkgaW1wbGVtZW50YXRpb25zIG9mIElKYXZhV2ViU2VydmljZVJ1bGUuCi0JICogQHJldHVybiBUaGUgSkRUUmVzb2x2ZXIgaW4gdXNlIGJ5IHRoaXMgYW5hbHl6ZXIuCi0JICovCi0JcHVibGljIEpEVFJlc29sdmVyIGdldEpEVFJlc29sdmVyICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHByb2dyZXNzIG1vbml0b3IgaW4gdXNlIGJ5IHRoaXMgYW5hbHl6ZXIsCi0JICogb3IgbnVsbCBpZiBubyBwcm9ncmVzcyBtb25pdG9yIGlzIGluIHVzZS4KLQkgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IGltcGxlbWVudGF0aW9ucwotCSAqIG9mIElKYXZhV2ViU2VydmljZVJ1bGUuCi0JICogQHJldHVybiBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBpbiB1c2UgYnkgdGhpcyBhbmFseXplciwKLQkgKiBvciBudWxsIGZvciBub25lLgotCSAqLwotCXB1YmxpYyBJUHJvZ3Jlc3NNb25pdG9yIGdldFByb2dyZXNzTW9uaXRvciAoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTVlZmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICogMjAwNjA2MDcgICAxNDU2MDQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzLkpBWFJQQ1J1bGVTZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBhbmFseXppbmcKLSAqIGNvbXBsaWFuY2Ugb2YgSmF2YSBzZXJ2aWNlIGNsYXNzZXMgYW5kIHZhbHVlIHR5cGVzIHRvCi0gKiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gVHlwaWNhbCB1c2FnZSBvZiB0aGlzCi0gKiBjbGFzczoKLSAqIDxjb2RlPgotICogSVR5cGUgdHlwZSA9IEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5hc1R5cGUobXlKYXZhRmlsZVJlc291cmNlKTsKLSAqIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyA9IEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5nZXRSdWxlU2V0KCk7Ci0gKiBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuZ2V0UnVsZUVuZ2luZSgpLmFuYWx5emUodHlwZSxydWxlcyxteVByb2dyZXNzTW9uaXRvcik7Ci0gKiA8L2NvZGU+IAotICogQGF1dGhvciBjYnJlYWxleQotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDV2ViU2VydmljZUFuYWx5emVyCi17Ci0JcHJpdmF0ZSBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZVNldF87Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyBKQVgtUlBDIFdlYiBzZXJ2aWNlIGFuYWx5emVyLAotCSAqIGEgY29udmVuaWVuY2UgY2xhc3Mgd3JhcHBlZCBhcm91bmQgYQotCSAqIEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplci4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDV2ViU2VydmljZUFuYWx5emVyICgpCi0JewotCQlydWxlU2V0XyA9IEpBWFJQQ1J1bGVTZXRGYWN0b3J5Lm5ld1J1bGVTZXQoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzZXQgb2YgcnVsZXMgaW4gdXNlLCB0aGUgY29udGVudHMgb2YKLQkgKiB3aGljaCBjYW4gYmUgbWFuaXB1bGF0ZWQgYW5kIHdpbGwgYmUgcmVzcGVjdGVkIGJ5Ci0JICogdGhpcyBhbmFseXplci4gSW4gb3RoZXIgd29yZHMsIHRoaXMgbWV0aG9kIHJldHVybnMgYQotCSAqIHJlZmVyZW5jZSB0bywgbm90IGEgY29weSBvZiwgdGhlIHNldCBvZiBydWxlcyBpbiB1c2UuCi0JICogQHJldHVybiBUaGUgc2V0IG9mIHJ1bGVzIGluIHVzZSBieSB0aGUgYW5hbHl6ZXIuCi0JICovCi0JcHVibGljIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBnZXRSdWxlU2V0ICgpCi0JewotCQlyZXR1cm4gcnVsZVNldF87Ci0JfQotCQotCS8qKgotCSAqIEFuYWx5emVzIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuCi0JICogSkRUIHR5cGUgZm9yIGNvbXBsaWFuY2UgdG8gdGhlIEpBWC1SUEMgZm9yIGNvbXBsaWFuY2UgdG8KLQkgKiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLgotCSAqIFByb2dyZXNzIG1vbml0b3JpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGdpdmVuIG1vbml0b3IuIAotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IGNvbnRleHQgaW4gd2hpY2ggdGhlIGFuYWx5c2lzCi0JICogc2hvdWxkIHRha2UgcGxhY2UuCi0JICogQHBhcmFtIHJvb3RDbGFzcyBUaGUgSmF2YSBzZXJ2aWNlIGNsYXNzIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIG1vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgdG8gdXNlLAotCSAqIG9yIG51bGwgaWYgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgc3RhdHVzIG9iamVjdCB3aG9zZSBzZXZlcml0eSwgbWVzc2FnZSBhbmQKLQkgKiBjaGlsZCBzdGF0dXMgb2JqZWN0cywgaWYgYW55LCBkZXNjcmliZSBhbnkgSkFYLVJQQwotCSAqIHJ1bGVzIHRoYXQgbWF5IGJlIGNvbXByb21pc2VkIGJ5IHRoZSBzZXJ2aWNlIGNsYXNzLgotCSAqIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgSVR5cGUgcm9vdENsYXNzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgPSBuZXcgSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUobW9uaXRvcik7Ci0JCXJldHVybiBlbmdpbmUuYW5hbHl6ZShwcm9qZWN0LHJvb3RDbGFzcyxydWxlU2V0Xyk7Ci0JfQotCi0JLyoqCi0JICogQW5hbHl6ZXMgdGhlIEphdmEgc2VydmljZSBjbGFzcyByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4KLQkgKiBKRFQgdHlwZSBmb3IgY29tcGxpYW5jZSB0byB0aGUgSkFYLVJQQyBmb3IgY29tcGxpYW5jZSB0bwotCSAqIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uCi0JICogUHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gbW9uaXRvci4gCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgY29udGV4dCBpbiB3aGljaCB0aGUgYW5hbHlzaXMKLQkgKiBzaG91bGQgdGFrZSBwbGFjZS4KLQkgKiBAcGFyYW0gcm9vdENsYXNzIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUKLQkgKiBKYXZhIHNlcnZpY2UgY2xhc3MgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UsCi0JICogb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBzdGF0dXMgb2JqZWN0IHdob3NlIHNldmVyaXR5LCBtZXNzYWdlIGFuZAotCSAqIGNoaWxkIHN0YXR1cyBvYmplY3RzLCBpZiBhbnksIGRlc2NyaWJlIGFueSBKQVgtUlBDCi0JICogcnVsZXMgdGhhdCBtYXkgYmUgY29tcHJvbWlzZWQgYnkgdGhlIHNlcnZpY2UgY2xhc3MuCi0JICogTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgcm9vdENsYXNzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCUlUeXBlIHJvb3RUeXBlID0gYXNUeXBlKHJvb3RDbGFzcyxwcm9qZWN0KTsKLQkJCWlmIChyb290VHlwZSA9PSBudWxsKQotCQkJewotCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9DTEFTUyxyb290Q2xhc3MscHJvamVjdC5nZXROYW1lKCkpOwotCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpOwotCQkJfQotCQkJcmV0dXJuIGFuYWx5emUocHJvamVjdCxyb290VHlwZSxtb25pdG9yKTsKLQkJfQotCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIEFuIGV4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGZyb20gdGhlIGNhbGwgdG8gYXNUeXBlKC4uLiksCi0JCQkvLyBub3QgZnJvbSB0aGUgY2FsbCB0byBhbmFseXplKC4uLikuIEV4Y2VwdGlvbnMgd2l0aGluIHRoZQotCQkJLy8gYW5hbHl6ZSguLi4pIG1ldGhvZCBhcmUgY2FwdHVyZWQgaW4gdGhlIHJldHVybmVkIElTdGF0dXMuCi0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIGVycm9yIixlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFuYWx5emVzIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuCi0JICogIi5qYXZhIiBjb21waWxhdGlvbiB1bml0IG9yICIuY2xhc3MiIGZpbGUgZm9yIGNvbXBsaWFuY2UKLQkgKiB0byB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLgotCSAqIFByb2dyZXNzIG1vbml0b3JpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGdpdmVuIG1vbml0b3IuIAotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IGNvbnRleHQgaW4gd2hpY2ggdGhlIGFuYWx5c2lzCi0JICogc2hvdWxkIHRha2UgcGxhY2UuCi0JICogQHBhcmFtIHJvb3RDbGFzcyBUaGUgSmF2YSBzZXJ2aWNlIGNsYXNzIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIG1vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgdG8gdXNlLAotCSAqIG9yIG51bGwgaWYgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgc3RhdHVzIG9iamVjdCB3aG9zZSBzZXZlcml0eSwgbWVzc2FnZSBhbmQKLQkgKiBjaGlsZCBzdGF0dXMgb2JqZWN0cywgaWYgYW55LCBkZXNjcmliZSBhbnkgSkFYLVJQQwotCSAqIHJ1bGVzIHRoYXQgbWF5IGJlIGNvbXByb21pc2VkIGJ5IHRoZSBzZXJ2aWNlIGNsYXNzLgotCSAqIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgSUZpbGUgcm9vdENsYXNzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCUlUeXBlIHJvb3RUeXBlID0gYXNUeXBlKHJvb3RDbGFzcyk7Ci0JCQlpZiAocm9vdFR5cGUgPT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfQ0xBU1Mscm9vdENsYXNzLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCk7Ci0JCQl9Ci0JCQlyZXR1cm4gYW5hbHl6ZShwcm9qZWN0LHJvb3RUeXBlLG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gQW4gZXhjZXB0aW9uIG1heSBiZSB0aHJvd24gZnJvbSB0aGUgY2FsbCB0byBhc1R5cGUoLi4uKSwKLQkJCS8vIG5vdCBmcm9tIHRoZSBjYWxsIHRvIGFuYWx5emUoLi4uKS4gRXhjZXB0aW9ucyB3aXRoaW4gdGhlCi0JCQkvLyBhbmFseXplKC4uLikgbWV0aG9kIGFyZSBjYXB0dXJlZCBpbiB0aGUgcmV0dXJuZWQgSVN0YXR1cy4KLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiSW50ZXJuYWwgZXJyb3IiLGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSmF2YSB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBmaWxlLAotCSAqIG9yIG51bGwgaWYgbm8gc3VjaCB0eXBlIGNhbiBiZSBjbGVhcmx5IGRldGVybWluZWQuCi0JICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgd2hvc2UgdHlwZSB0byBpbmZlciwgdXN1YWxseSBhCi0JICogIi5qYXZhIiBvciAiLmNsYXNzIiBmaWxlLiBGb3IgIi5qYXZhIiBmaWxlcywgdGhpcwotCSAqIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgcHJpbWFyeSB0eXBlLgotCSAqIEByZXR1cm4gVGhlIGluZmVycmVkIEpEVCBKYXZhIHR5cGUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIGdpdmVuIGZpbGUgY291bGQgbm90Ci0JICogbWFwcGVkIHRvIGEgSkRUIElUeXBlLgotCSAqLwotCXByaXZhdGUgc3RhdGljIElUeXBlIGFzVHlwZSAoIFN0cmluZyBxbmFtZSwgSVByb2plY3QgcHJvamVjdCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSVR5cGUgdHlwZSA9IG51bGw7Ci0JCUlKYXZhRWxlbWVudCBqYXZhRWxlbWVudCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJaWYgKGphdmFFbGVtZW50IGluc3RhbmNlb2YgSUphdmFQcm9qZWN0KQotCQl7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSAoSUphdmFQcm9qZWN0KWphdmFFbGVtZW50OwotCQkJdHlwZSA9IGphdmFQcm9qZWN0LmZpbmRUeXBlKHFuYW1lKTsKLQkJfQotCQlyZXR1cm4gdHlwZTsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgSmF2YSB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBmaWxlLAotCSAqIG9yIG51bGwgaWYgbm8gc3VjaCB0eXBlIGNhbiBiZSBjbGVhcmx5IGRldGVybWluZWQuCi0JICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgd2hvc2UgdHlwZSB0byBpbmZlciwgdXN1YWxseSBhCi0JICogIi5qYXZhIiBvciAiLmNsYXNzIiBmaWxlLiBGb3IgIi5qYXZhIiBmaWxlcywgdGhpcwotCSAqIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgcHJpbWFyeSB0eXBlLgotCSAqIEByZXR1cm4gVGhlIGluZmVycmVkIEpEVCBKYXZhIHR5cGUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIGdpdmVuIGZpbGUgY291bGQgbm90Ci0JICogbWFwcGVkIHRvIGEgSkRUIElUeXBlLgotCSAqLwotCXByaXZhdGUgc3RhdGljIElUeXBlIGFzVHlwZSAoIElGaWxlIGZpbGUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlUeXBlIHR5cGUgPSBudWxsOwotCQlJSmF2YUVsZW1lbnQgamF2YUVsZW1lbnQgPSBKYXZhQ29yZS5jcmVhdGUoZmlsZSk7Ci0JCWlmIChqYXZhRWxlbWVudCBpbnN0YW5jZW9mIElDb21waWxhdGlvblVuaXQpCi0JCXsKLQkJCUlDb21waWxhdGlvblVuaXQgY29tcGlsYXRpb25Vbml0ID0gKElDb21waWxhdGlvblVuaXQpamF2YUVsZW1lbnQ7Ci0JCQl0eXBlID0gY29tcGlsYXRpb25Vbml0LmZpbmRQcmltYXJ5VHlwZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGphdmFFbGVtZW50IGluc3RhbmNlb2YgSUNsYXNzRmlsZSkKLQkJewotCQkJSUNsYXNzRmlsZSBjbGFzc0ZpbGUgPSAoSUNsYXNzRmlsZSlqYXZhRWxlbWVudDsKLQkJCXR5cGUgPSBjbGFzc0ZpbGUuZ2V0VHlwZSgpOwotCQl9Ci0JCXJldHVybiB0eXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1OTdmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pBWFJQQ1dlYlNlcnZpY2VSdWxlRW5naW5lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0OTQxMSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGlzIGVuZ2luZSBuYXZpZ2F0ZWQgSkRUIGNsYXNzZXMgYWNjb3JkaW5nIHRvIGEgSkFYLVJQQwotICogaW50ZXJwcmV0YXRpb24uIFRoZSByb290IGNsYXNzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYQotICogY2FuZGlkYXRlIEpBWC1SUEMgc2VydmljZSBjbGFzcywgYW5kIGFueSBub24tc3RhbmRhcmQKLSAqIG9yIG5vbi1wcmltaXRpdmUgdHlwZXMgdXNlZCBieSB0aGUgbWV0aG9kcyBvZiB0aGUgc2VydmljZQotICogY2xhc3MgYXJlIGNvbnNpZGVyZWQgdG8gYmUgY2FuZGlkYXRlcyBmb3IgSkFYLVJQQyB2YWx1ZQotICogdHlwZSBjbGFzc2VzLiAKLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1dlYlNlcnZpY2VSdWxlRW5naW5lIGltcGxlbWVudHMgSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgSkFYLVJQQyBhbmFseXNpcyBlbmdpbmUgd2l0aCB0aGUgZ2l2ZW4KLQkgKiBwcm9ncmVzcyBtb25pdG9yLgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZQotCSAqIGVuZ2luZSB0byB1c2UsIG9yIG51bGwgaWYgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUgKCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciApCi0JewotCQlwcm9ncmVzc01vbml0b3JfID0gcHJvZ3Jlc3NNb25pdG9yOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSNhbmFseXplKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0LCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZVNldCwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCi0JICovCi0JcHVibGljIElTdGF0dXMgYW5hbHl6ZSAoIElQcm9qZWN0IHByb2plY3QsIElUeXBlIHJvb3RDbGFzcywgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl7Ci0JCXZpc2l0ZWRfID0gbmV3IEhhc2hTZXQoKTsKLQkJcGVhbnV0VHJhaWxfID0gbmV3IFN0YWNrKCk7CQkKLQkJcmVzb2x2ZXJfID0gbmV3IEpEVFJlc29sdmVyKHByb2plY3QscHJvZ3Jlc3NNb25pdG9yXyk7Ci0JCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJcnVsZXMuaW5pdCh0aGlzKTsKLQkJdHJ5Ci0JCXsKLQkJCWFuYWx5emVTZXJ2aWNlQ2xhc3Mocm9vdENsYXNzLHJ1bGVzKTsKLQkJCVN0cmluZyBpbkNhc2VPZkZhaWx1cmVNZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfTk9UX0NPTVBMSUFOVCxyb290Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOwotCQkJc3RhdHVzID0gcnVsZXMuZ2V0UmVzdWx0cyhpbkNhc2VPZkZhaWx1cmVNZXNzYWdlKTsKLQkJfQotCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCJJbnRlcm5hbCBFcnJvciIsZSk7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVTZXJ2aWNlQ2xhc3MgKCBJVHlwZSB0eXBlLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCXJ1bGVzLnZpc2l0Q2xhc3ModHlwZSxwZWFudXRUcmFpbF8pOwotCQl2aXNpdGVkXy5hZGQodHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCXB1c2godHlwZSk7Ci0JCXRyeQotCQl7Ci0JCQlJVHlwZVtdIHN1cGVyQ2xhc3NlcyA9IHJlc29sdmVyXy5nZXRTdXBlckNsYXNzZXModHlwZSk7Ci0JCQlJTWV0aG9kW10gbWV0aG9kcyA9IHJlc29sdmVyXy5nZXRQdWJsaWNNZXRob2RzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCWZvciAoaW50IG09MDsgbTxtZXRob2RzLmxlbmd0aDsgbSsrKQotCQkJewotCQkJCWFuYWx5emVNZXRob2QobWV0aG9kc1ttXSxydWxlcyk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlwb3AoKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZU1ldGhvZCAoIElNZXRob2QgbWV0aG9kLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCXJ1bGVzLnZpc2l0TWV0aG9kKG1ldGhvZCxwZWFudXRUcmFpbF8pOwotCQlwdXNoKG1ldGhvZCk7Ci0JCXRyeQotCQl7Ci0JCQlJVHlwZSByZXR1cm5UeXBlID0gcmVzb2x2ZXJfLmdldFJldHVyblR5cGUobWV0aG9kKTsKLQkJCWFuYWx5emVEYXRhVHlwZShyZXR1cm5UeXBlLHJ1bGVzKTsKLQkJCUlUeXBlW10gcGFyYW1ldGVyVHlwZXMgPSByZXNvbHZlcl8uZ2V0UGFyYW1ldGVyVHlwZXMobWV0aG9kKTsKLQkJCWZvciAoaW50IHA9MDsgcDxwYXJhbWV0ZXJUeXBlcy5sZW5ndGg7IHArKykKLQkJCXsKLQkJCQlhbmFseXplRGF0YVR5cGUocGFyYW1ldGVyVHlwZXNbcF0scnVsZXMpOwotCQkJfQotCQkJSVR5cGVbXSBleGNlcHRpb25UeXBlcyA9IHJlc29sdmVyXy5nZXRFeGNlcHRpb25UeXBlcyhtZXRob2QpOwotCQkJZm9yIChpbnQgZT0wOyBlPGV4Y2VwdGlvblR5cGVzLmxlbmd0aDsgZSsrKQotCQkJewotCQkJCWFuYWx5emVFeGNlcHRpb25UeXBlKGV4Y2VwdGlvblR5cGVzW2VdLHJ1bGVzKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCXBvcCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhbmFseXplRGF0YVR5cGUgKCBJVHlwZSB0eXBlLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCWlmICh0eXBlICE9IG51bGwgJiYgIXJlc29sdmVyXy5pc1N0YW5kYXJkVHlwZSh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKSAmJiAhdmlzaXRlZF8uY29udGFpbnModHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSkpCi0JCXsKLQkJCXJ1bGVzLnZpc2l0Q2xhc3ModHlwZSxwZWFudXRUcmFpbF8pOwkJCQotCQkJdmlzaXRlZF8uYWRkKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOwotCQkJcHVzaCh0eXBlKTsKLQkJCXRyeQotCQkJewkKLQkJCQlJVHlwZVtdIHN1cGVyQ2xhc3NlcyA9IHJlc29sdmVyXy5nZXRTdXBlckNsYXNzZXModHlwZSk7Ci0JCQkJSUZpZWxkW10gZmllbGRzID0gcmVzb2x2ZXJfLmdldFB1YmxpY0ZpZWxkcyh0eXBlLHN1cGVyQ2xhc3Nlcyk7Ci0JCQkJZm9yIChpbnQgZj0wOyBmPGZpZWxkcy5sZW5ndGg7IGYrKykKLQkJCQl7Ci0JCQkJCWFuYWx5emVGaWVsZChmaWVsZHNbZl0scnVsZXMpOwotCQkJCX0KLQkJCQlJSmF2YUJlYW5Qcm9wZXJ0eVtdIHByb3BlcnRpZXMgPSByZXNvbHZlcl8uZ2V0UHVibGljUHJvcGVydGllcyh0eXBlLHN1cGVyQ2xhc3Nlcyk7Ci0JCQkJZm9yIChpbnQgcD0wOyBwPHByb3BlcnRpZXMubGVuZ3RoOyBwKyspCi0JCQkJewotCQkJCQlhbmFseXplUHJvcGVydHkocHJvcGVydGllc1twXSxydWxlcyk7Ci0JCQkJfQotCQkJfQotCQkJZmluYWxseQotCQkJewotCQkJCXBvcCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhbmFseXplRmllbGQgKCBJRmllbGQgZmllbGQsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKGZpZWxkICE9IG51bGwpCi0JCXsKLQkJCXJ1bGVzLnZpc2l0RmllbGQoZmllbGQscGVhbnV0VHJhaWxfKTsKLQkJCXB1c2goZmllbGQpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJLy9UT0RPOiBHZXQgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZpZWxkIHR5cGUKLQkJCQkvL2FuZCBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBJVHlwZQotCQkJCS8vZm9yIGl0IGFuZCBhbmFseXplIGl0LgotCQkJCUlUeXBlIHR5cGUgPSByZXNvbHZlcl8uZ2V0RmllbGRUeXBlKGZpZWxkKTsKLQkJCQlhbmFseXplRGF0YVR5cGUodHlwZSxydWxlcyk7Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJcG9wKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IHByb3BlcnR5LCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCWlmIChwcm9wZXJ0eSAhPSBudWxsKQotCQl7Ci0JCQlydWxlcy52aXNpdFByb3BlcnR5KHByb3BlcnR5LHBlYW51dFRyYWlsXyk7Ci0JCQlwdXNoKHByb3BlcnR5KTsKLQkJCXRyeQotCQkJewotCQkJCUlUeXBlIHR5cGUgPSByZXNvbHZlcl8uZ2V0UHJvcGVydHlUeXBlKHByb3BlcnR5KTsKLQkJCQlhbmFseXplRGF0YVR5cGUodHlwZSxydWxlcyk7Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJcG9wKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYW5hbHl6ZUV4Y2VwdGlvblR5cGUgKCBJVHlwZSB0eXBlLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCWlmICh0eXBlICE9IG51bGwgJiYgIXJlc29sdmVyXy5pc1N0YW5kYXJkVHlwZSh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKSAmJiAhdmlzaXRlZF8uY29udGFpbnModHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSkpCi0JCXsKLQkJCXJ1bGVzLnZpc2l0RXhjZXB0aW9uKHR5cGUscGVhbnV0VHJhaWxfKTsKLQkJCXZpc2l0ZWRfLmFkZCh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLQkJCXB1c2godHlwZSk7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLyBXZSB0cnVzdCBqYXZhLmxhbmcuRXhjZXB0aW9uL1Rocm93YWJsZSBhcyBzdXBlcmNsYXNzZXMKLQkJCQkvLyBmb3Igc2VydmljZSBzcGVjaWZpYyBleGNlcHRpb24gY2xhc3NlcywgdGhlcmVmb3JlIHdlIGRvCi0JCQkJLy8gbm90IHRyeSB0byBhbmFseXplIHRoZWlyIHByb3BlcnRpZXMgKHNvbWUgb2Ygd2hpY2ggd291bGQKLQkJCQkvLyBvdGhlcndpc2UgdmlvbGF0ZSBKQVgtUlBDJ3MgcnVsZXMgYW55d2F5cykuCi0JCQkJSVR5cGVbXSBzdXBlckNsYXNzZXMgPSByZXNvbHZlcl8uZ2V0U3VwZXJDbGFzc2VzKHR5cGUsImphdmEubGFuZy5FeGNlcHRpb24iKTsKLQkJCQlJSmF2YUJlYW5Qcm9wZXJ0eVtdIHByb3BlcnRpZXMgPSByZXNvbHZlcl8uZ2V0UHVibGljUHJvcGVydGllcyh0eXBlLHN1cGVyQ2xhc3Nlcyk7Ci0JCQkJZm9yIChpbnQgcD0wOyBwPHByb3BlcnRpZXMubGVuZ3RoOyBwKyspCi0JCQkJewotCQkJCQlhbmFseXplUHJvcGVydHkocHJvcGVydGllc1twXSxydWxlcyk7Ci0JCQkJfQotCQkJfQotCQkJZmluYWxseQotCQkJewotCQkJCXBvcCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUjZ2V0SkRUUmVzb2x2ZXIoKQotCSAqLwotCXB1YmxpYyBKRFRSZXNvbHZlciBnZXRKRFRSZXNvbHZlciAoKQotCXsKLQkJcmV0dXJuIHJlc29sdmVyXzsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUjZ2V0UHJvZ3Jlc3NNb25pdG9yKCkKLQkgKi8KLQlwdWJsaWMgSVByb2dyZXNzTW9uaXRvciBnZXRQcm9ncmVzc01vbml0b3IgKCkKLQl7Ci0JCXJldHVybiBwcm9ncmVzc01vbml0b3JfOwotCX0KLQkKLQkvKgotCSAqIFB1c2hlcyBhIHBlYW51dCBvbnRvIHRoZSBwZWFudXQgdHJhaWwuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHB1c2ggKCBPYmplY3QgcGVhbnV0ICkKLQl7Ci0JCXBlYW51dFRyYWlsXy5wdXNoKHBlYW51dCk7Ci0JfQotCQotCS8qCi0JICogUG9wcyBhIHBlYW51dCBvZmYgdGhlIHBlYW51dCB0cmFpbC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIHBvcCAoKQotCXsKLQkJcGVhbnV0VHJhaWxfLnBvcCgpOwotCX0KLQkKLQkvKgotCSAqIFRoZSBKRFRSZXNvbHZlciB1c2VkIGJ5IHRoaXMgYW5hbHl6ZXIuCi0JICovCi0JcHJpdmF0ZSBKRFRSZXNvbHZlciByZXNvbHZlcl87Ci0JCi0JLyoKLQkgKiBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB1c2VkIGJ5IHRoaXMgYW5hbHl6ZXIuIAotCSAqLwotCXByaXZhdGUgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3JfOwotCQotCS8qCi0JICogVGhpcyBzZXQga2VlcHMgdHJhY2sgb2YgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyBvZgotCSAqIGNsYXNzZXMgd2UgaGF2ZSB2aXNpdGVkIHNvIHRoYXQgd2UgZG9uJ3QgdmlzaXQgdGhlIHNhbWUKLQkgKiBzZXJ2aWNlIGNsYXNzLCB2YWx1ZSB0eXBlIG9yIGV4Y2VwdGlvbiBjbGFzcyBtb3JlIHRoYW4gb25jZS4KLQkgKi8KLQlwcml2YXRlIFNldCB2aXNpdGVkXzsKLQotCS8qCi0JICogVGhpcyBzdGFjayBrZWVwcyBhIHRyYWlsIG9mIEpEVCBvYmplY3RzIGJhY2sgdG8gdGhlCi0JICogc2VydmljZSBjbGFzcyB3ZSBiZWdhbiB3aXRoLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8KLQkgKiB2aXNpdG9ycyB0aGF0IG5lZWQgdG8gaW5zcGVjdCB0aGUgSkRUIGVsZW1lbnRzIHRoYXQKLQkgKiBlbmNsb3NlIHRoZSBjdXJyZW50bHkgdmlzaXRlZCBlbGVtZW50LgotCSAqLwotCXByaXZhdGUgU3RhY2sgcGVhbnV0VHJhaWxfOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KRFRSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KRFRSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGM1NzQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkRUUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ5NDExIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA3MDEwMiAgIDE5NjM3MSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuRmxhZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZUhpZXJhcmNoeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuU2lnbmF0dXJlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIEEgSkRUUmVzb2x2ZXIgcHJvdmlkZXMgc2V2ZXJhbCBjb252ZW5pZW5jZSBtZXRob2RzIGZvcgotICogbmF2aWdhdGluZyByZWZlcmVuY2VzIGJldHdlZW4gSmF2YSBjbGFzc2VzLCBtZXRob2RzLAotICogZmllbGRzIGFuZCBwcm9wZXJ0aWVzLiBBIEpEVFJlc29sdmVyIGlzIGNvbnN0cnVjdGVkCi0gKiBmb3IgYSBKYXZhIHByb2plY3Qgd2hvc2UgZWZmZWN0aXZlIGNsYXNzcGF0aCB3aWxsCi0gKiBnb3Zlcm4gdGhlIHNjb3BlIG9mIHNlYXJjaCBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSB0aGUKLSAqIEpEVFJlc29sdmVyIHdoZW5ldmVyIGl0IG5lZWRzIHRvIGNvbnZlcnQgYSBzaWduYXR1cmUKLSAqIGludG8gYSBKRFQgSVR5cGUgb2JqZWN0LgotICovCi1wdWJsaWMgY2xhc3MgSkRUUmVzb2x2ZXIKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IEpEVFJlc29sdmVyIGZvciB0aGUgZ2l2ZW4gcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCBwcm92aWRpbmcgdGhlIGNvbnRleHQKLQkgKiBAcGFyYW0gbW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhpcyByZXNvbHZlcgotCSAqIHRvIHVzZSwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIHdpdGhpbiB3aGljaCB0aGlzIHJlc29sdmVyIHdpbGwgc2VhcmNoIGZvciBjbGFzc2VzLgotCSAqLwotCXB1YmxpYyBKRFRSZXNvbHZlciAoIElQcm9qZWN0IHByb2plY3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlqYXZhUHJvamVjdF8gPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCW1vbml0b3JfID0gbW9uaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBKRFQgSVR5cGUgaXMgYW4gaW50ZXJmYWNlLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBKRFQgSVR5cGUgaXMgYW4gaW50ZXJmYWNlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgbW9kZWwgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSW50ZXJmYWNlICggSVR5cGUgamR0VHlwZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGpkdFR5cGUuaXNJbnRlcmZhY2UoKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBKRFQgSVR5cGUgaXMgYW4gYWJzdHJhY3QgY2xhc3MuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIG1vZGVsIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0ICggSVR5cGUgamR0VHlwZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIEZsYWdzLmlzQWJzdHJhY3QoamR0VHlwZS5nZXRGbGFncygpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIGluc3RhbmNlcyBvZiB0aGUgZ2l2ZW4gSkRUIElUeXBlCi0JICogY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgYSBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gVGhlIGNsYXNzCi0JICogbXVzdCBoYXZlIGFuIGV4cGxpY2l0IHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBoYXZlIG5vCi0JICogZXhwbGljaXQgY29uc3RydWN0b3JzIGF0IGFsbCB0byBtZWV0IHRoaXMgY3JpdGVyaWEuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgaW5zdGFuY2VzIG9mIHRoZSB0eXBlIGFyZQotCSAqIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdGFibGUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBtb2RlbCBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNDb25zdHJ1Y3RhYmxlICggSVR5cGUgamR0VHlwZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZFtdIG1ldGhvZHMgPSBqZHRUeXBlLmdldE1ldGhvZHMoKTsKLQkJaW50IG51bWJlck9mQ29uc3RydWN0b3JzID0gMDsKLQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCXsKLQkJCWlmIChtZXRob2RzW21dLmlzQ29uc3RydWN0b3IoKSkKLQkJCXsKLQkJCQludW1iZXJPZkNvbnN0cnVjdG9ycysrOwotCQkJCWlmIChtZXRob2RzW21dLmdldE51bWJlck9mUGFyYW1ldGVycygpID09IDAgJiYgRmxhZ3MuaXNQdWJsaWMobWV0aG9kc1ttXS5nZXRGbGFncygpKSkKLQkJCQl7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVtYmVyT2ZDb25zdHJ1Y3RvcnMgPT0gMDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQKLQkgKiB0eXBlIG5hbWUgaXMgYSB0eXBlIGZyb20gdGhlIHN0YW5kYXJkIEpESywgdGhhdCBpcywKLQkgKiBpZiB0aGUgZ2l2ZW4gdHlwZSBuYW1lIGJlbG9uZ3MgdW5kZXIgdGhlICJqYXZhIiBvcgotCSAqICJqYXZheCIgcGFja2FnZXMuCi0JICogQHBhcmFtIHR5cGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgdHlwZSBpcyBhIG5vbi1wcmltaXRpdmUsCi0JICogSmF2YSBzdGFuZGFyZCB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU3RhbmRhcmRUeXBlICggU3RyaW5nIHR5cGVOYW1lICkKLQl7Ci0JCXJldHVybiB0eXBlTmFtZS5zdGFydHNXaXRoKCJqYXZhLiIpIHx8IHR5cGVOYW1lLnN0YXJ0c1dpdGgoImphdmF4LiIpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIHR5cGUgbmFtZSBpcyBhCi0JICogSmF2YSBwcmltaXRpdmUgdHlwZS4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHR5cGUgdG8gY2hlY2suCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSB0eXBlIGlzIGEgSmF2YSBwcmltaXRpdmUgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1ByaW1pdGl2ZVR5cGUgKCBTdHJpbmcgdHlwZU5hbWUgKQotCXsKLQkJZm9yIChpbnQgaT0wOyBpPHByaW1pdGl2ZVR5cGVzXy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKHByaW1pdGl2ZVR5cGVzX1tpXS5lcXVhbHModHlwZU5hbWUpKQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQKLQkgKiB0eXBlIG5hbWUgaXMgYSBKYXZhIHdyYXBwZXIgdHlwZS4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHR5cGUgdG8gY2hlY2suCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSB0eXBlIGlzIGEgSmF2YSB3cmFwcGVyIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNXcmFwcGVyVHlwZSAoIFN0cmluZyB0eXBlTmFtZSApCi0JewotCQlmb3IgKGludCBpPTA7IGk8d3JhcHBlclR5cGVzXy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKHdyYXBwZXJUeXBlc19baV0uZXF1YWxzKHR5cGVOYW1lKSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZAotCSAqIHR5cGUgbmFtZSBpcyBhIEphdmEgcHJpbWl0aXZlIG9yIHN0YW5kYXJkIHR5cGUgc3VwcG9ydGVkCi0JICogYnkgdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHR5cGUgdG8gY2hlY2suCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSB0eXBlIGlzIGEgSmF2YSB3cmFwcGVyIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNKQVhSUENTdGFuZGFyZFR5cGUgKCBTdHJpbmcgdHlwZU5hbWUgKQotCXsKLQkJZm9yIChpbnQgaT0wOyBpPGpheHJwY1R5cGVzXy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKGpheHJwY1R5cGVzX1tpXS5lcXVhbHModHlwZU5hbWUpKQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCWlmIChpc1dyYXBwZXJUeXBlKHR5cGVOYW1lKSAmJiAhImphdmEubGFuZy5DaGFyYWN0ZXIiLmVxdWFscyh0eXBlTmFtZSkpCi0JCXsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChpc1ByaW1pdGl2ZVR5cGUodHlwZU5hbWUpICYmICEiY2hhciIuZXF1YWxzKHR5cGVOYW1lKSkKLQkJewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkJCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgSkRUIElUeXBlIG9iamVjdHMKLQkgKiBmb3IgdGhlIHB1YmxpYyBmaWVsZHMgYmVsb25naW5nIHRvIHRoZSBnaXZlbiB0eXBlCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gamR0U3VwZXJUeXBlcyBBbnkgc3VwZXJ0eXBlcyB0byBhbmFseXplLAotCSAqIG9yIG51bGwgdG8gYW5hbHl6ZSBvbmx5IHRoZSA8Y29kZT5qZHRUeXBlPC9jb2RlPi4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBwdWJsaWMgZmllbGQgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlcyB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSUZpZWxkW10gZ2V0UHVibGljRmllbGRzICggSVR5cGUgamR0VHlwZSwgSVR5cGVbXSBqZHRTdXBlckNsYXNzZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUxpc3QgZmllbGRzTGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCWhhcnZlc3RQdWJsaWNGaWVsZHMoamR0VHlwZSxmaWVsZHNMaXN0KTsKLQkJaWYgKGpkdFN1cGVyQ2xhc3NlcyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKGludCB0PTA7IHQ8amR0U3VwZXJDbGFzc2VzLmxlbmd0aDsgdCsrKQotCQkJewotCQkJCWhhcnZlc3RQdWJsaWNGaWVsZHMoamR0U3VwZXJDbGFzc2VzW3RdLGZpZWxkc0xpc3QpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoSUZpZWxkW10pZmllbGRzTGlzdC50b0FycmF5KG5ldyBJRmllbGRbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSU1ldGhvZCBvYmplY3RzCi0JICogZm9yIHRoZSBwdWJsaWMgbWV0aG9kcyBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIHR5cGUuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gamR0U3VwZXJUeXBlcyBBbnkgc3VwZXJ0eXBlcyB0byBhbmFseXplLAotCSAqIG9yIG51bGwgdG8gYW5hbHl6ZSBvbmx5IHRoZSA8Y29kZT5qZHRUeXBlPC9jb2RlPi4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBwdWJsaWMgbWV0aG9kcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGVzIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJTWV0aG9kW10gZ2V0UHVibGljTWV0aG9kcyAoIElUeXBlIGpkdFR5cGUsIElUeXBlW10gamR0U3VwZXJDbGFzc2VzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlMaXN0IG1ldGhvZHNMaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQkJaGFydmVzdFB1YmxpY01ldGhvZHMoamR0VHlwZSxtZXRob2RzTGlzdCk7Ci0JCWlmIChqZHRTdXBlckNsYXNzZXMgIT0gbnVsbCkKLQkJewotCQkJZm9yIChpbnQgdD0wOyB0PGpkdFN1cGVyQ2xhc3Nlcy5sZW5ndGg7IHQrKykKLQkJCXsKLQkJCQloYXJ2ZXN0UHVibGljTWV0aG9kcyhqZHRTdXBlckNsYXNzZXNbdF0sbWV0aG9kc0xpc3QpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoSU1ldGhvZFtdKW1ldGhvZHNMaXN0LnRvQXJyYXkobmV3IElNZXRob2RbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSVR5cGUgb2JqZWN0cwotCSAqIGZvciB0aGUgcHVibGljIHByb3BlcnRpZXMgKGdldHRlcnMgYW5kL29yIHNldHRlcnMpCi0JICogYmVsb25naW5nIHRvIHRoZSBnaXZlbiB0eXBlLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIGpkdFN1cGVyVHlwZXMgQW55IHN1cGVydHlwZXMgdG8gYW5hbHl6ZSwKLQkgKiBvciBudWxsIHRvIGFuYWx5emUgb25seSB0aGUgPGNvZGU+amR0VHlwZTwvY29kZT4uCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgcHVibGljIHByb3BlcnR5IHR5cGVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZXMgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElKYXZhQmVhblByb3BlcnR5W10gZ2V0UHVibGljUHJvcGVydGllcyAoIElUeXBlIGpkdFR5cGUsIElUeXBlW10gamR0U3VwZXJDbGFzc2VzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJTWV0aG9kW10gbWV0aG9kcyA9IGdldFB1YmxpY01ldGhvZHMoamR0VHlwZSxqZHRTdXBlckNsYXNzZXMpOwotCQlNYXAgcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWZvciAoaW50IG09MDsgbTxtZXRob2RzLmxlbmd0aDsgbSsrKQotCQl7Ci0JCQlTdHJpbmcgbmFtZSA9IGdldEdldHRlck5hbWUobWV0aG9kc1ttXSk7Ci0JCQlpZiAobmFtZSAhPSBudWxsKQotCQkJewotCQkJCUphdmFCZWFuUHJvcGVydHkgcHJvcGVydHkgPSAoSmF2YUJlYW5Qcm9wZXJ0eSlwcm9wZXJ0aWVzLmdldChuYW1lKTsKLQkJCQlpZiAocHJvcGVydHkgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCXByb3BlcnR5ID0gbmV3IEphdmFCZWFuUHJvcGVydHkoKTsKLQkJCQkJcHJvcGVydHkuc2V0TmFtZShuYW1lKTsKLQkJCQkJcHJvcGVydGllcy5wdXQobmFtZSxwcm9wZXJ0eSk7Ci0JCQkJfQotCQkJCXByb3BlcnR5LnNldEdldHRlcihtZXRob2RzW21dKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQluYW1lID0gZ2V0U2V0dGVyTmFtZShtZXRob2RzW21dKTsKLQkJCQlpZiAobmFtZSAhPSBudWxsKQotCQkJCXsKLQkJCQkJSmF2YUJlYW5Qcm9wZXJ0eSBwcm9wZXJ0eSA9IChKYXZhQmVhblByb3BlcnR5KXByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCQkJCQlpZiAocHJvcGVydHkgPT0gbnVsbCkKLQkJCQkJewotCQkJCQkJcHJvcGVydHkgPSBuZXcgSmF2YUJlYW5Qcm9wZXJ0eSgpOwotCQkJCQkJcHJvcGVydHkuc2V0TmFtZShuYW1lKTsKLQkJCQkJCXByb3BlcnRpZXMucHV0KG5hbWUscHJvcGVydHkpOwotCQkJCQl9Ci0JCQkJCXByb3BlcnR5LnNldFNldHRlcihtZXRob2RzW21dKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJSmF2YUJlYW5Qcm9wZXJ0eVtdKXByb3BlcnRpZXMudmFsdWVzKCkudG9BcnJheShuZXcgSmF2YUJlYW5Qcm9wZXJ0eVswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvYmplY3QgZm9yIHRoZSBnaXZlbiBmaWVsZC4KLQkgKiBAcGFyYW0gamR0RmllbGQgVGhlIGZpZWxkIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUaGUgZmllbGQgdHlwZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIGZpZWxkIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZSBnZXRGaWVsZFR5cGUgKCBJRmllbGQgamR0RmllbGQgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0RmllbGQuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nIHNpZ25hdHVyZSA9IGpkdEZpZWxkLmdldFR5cGVTaWduYXR1cmUoKTsKLQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0JCXJldHVybiBmaW5kVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgbmFtZSBmb3IgdGhlIGdpdmVuIGZpZWxkLgotCSAqIEBwYXJhbSBqZHRGaWVsZCBUaGUgZmllbGQgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBmaWVsZCB0eXBlIG5hbWUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBmaWVsZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEZpZWxkVHlwZU5hbWUgKCBJRmllbGQgamR0RmllbGQgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0RmllbGQuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nIHNpZ25hdHVyZSA9IGpkdEZpZWxkLmdldFR5cGVTaWduYXR1cmUoKTsKLQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0JCXJldHVybiByZXNvbHZlVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvYmplY3QgZm9yIHRoZSBnaXZlbiBiZWFuIHByb3BlcnR5LgotCSAqIEBwYXJhbSBqYXZhQmVhblByb3BlcnR5IFRoZSBiZWFuIHByb3BlcnR5IHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgdHlwZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIGJlYW4gcHJvcGVydHkgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlIGdldFByb3BlcnR5VHlwZSAoIElKYXZhQmVhblByb3BlcnR5IGphdmFCZWFuUHJvcGVydHkgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2QgbWV0aG9kID0gamF2YUJlYW5Qcm9wZXJ0eS5nZXRHZXR0ZXIoKTsKLQkJaWYgKG1ldGhvZCAhPSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gZ2V0UmV0dXJuVHlwZShtZXRob2QpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJbWV0aG9kID0gamF2YUJlYW5Qcm9wZXJ0eS5nZXRTZXR0ZXIoKTsKLQkJCWlmIChtZXRob2QgIT0gbnVsbCkKLQkJCXsKLQkJCQlJVHlwZVtdIHBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJUeXBlcyhtZXRob2QpOwotCQkJCWlmIChwYXJhbWV0ZXJzLmxlbmd0aCA+IDApCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyBJdCdzIHRoZSBsYXN0IHBhcmFtZXRlcidzIHR5cGUgd2Ugd2FudCwKLQkJCQkJLy8gZm9yIGluZGV4ZWQgb3Igbm9uLWluZGV4ZWQgc2V0dGVycy4KLQkJCQkJLy8KLQkJCQkJcmV0dXJuIHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGgtMV07Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgZm9yIHRoZSBnaXZlbiBiZWFuIHByb3BlcnR5LgotCSAqIEBwYXJhbSBqYXZhQmVhblByb3BlcnR5IFRoZSBiZWFuIHByb3BlcnR5IHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgdHlwZSBuYW1lLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gYmVhbiBwcm9wZXJ0eSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VHlwZU5hbWUgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBqYXZhQmVhblByb3BlcnR5ICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJTWV0aG9kIG1ldGhvZCA9IGphdmFCZWFuUHJvcGVydHkuZ2V0R2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgIT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIGdldFJldHVyblR5cGVOYW1lKG1ldGhvZCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQltZXRob2QgPSBqYXZhQmVhblByb3BlcnR5LmdldFNldHRlcigpOwotCQkJaWYgKG1ldGhvZCAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZ1tdIHBhcmFtZXRlclR5cGVOYW1lcyA9IGdldFBhcmFtZXRlclR5cGVOYW1lcyhtZXRob2QpOwotCQkJCWlmIChwYXJhbWV0ZXJUeXBlTmFtZXMubGVuZ3RoID4gMCkKLQkJCQl7Ci0JCQkJCXJldHVybiBwYXJhbWV0ZXJUeXBlTmFtZXNbMF07Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSVR5cGUgb2JqZWN0IGZvciB0aGUgcmV0dXJuIHR5cGUKLQkgKiBvZiB0aGUgZ2l2ZW4gbWV0aG9kLCBvciBudWxsIGlmIHRoZSBtZXRob2QgaXMgdm9pZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBtZXRob2QgcmV0dXJuIHR5cGUsIG9yIG51bGwgaWYgbm9uZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0UmV0dXJuVHlwZSAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmcgc2lnbmF0dXJlID0gamR0TWV0aG9kLmdldFJldHVyblR5cGUoKTsKLQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0JCXJldHVybiBmaW5kVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgbmFtZSBmb3IgdGhlIHJldHVybiB0eXBlCi0JICogb2YgdGhlIGdpdmVuIG1ldGhvZCwgb3IgbnVsbCBpZiB0aGUgbWV0aG9kIGlzIHZvaWQuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUaGUgbWV0aG9kIHJldHVybiB0eXBlIG5hbWUsIG9yIG51bGwgaWYgbm9uZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJldHVyblR5cGVOYW1lICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZyBzaWduYXR1cmUgPSBqZHRNZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIHJlc29sdmVUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgSkRUIElUeXBlIG9iamVjdHMKLQkgKiBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGdpdmVuIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBwYXJhbWV0ZXIgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlW10gZ2V0UGFyYW1ldGVyVHlwZXMgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nW10gc2lnbmF0dXJlcyA9IGpkdE1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQlJVHlwZVtdIHR5cGVzID0gbmV3IElUeXBlW3NpZ25hdHVyZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgcz0wOyBzPHNpZ25hdHVyZXMubGVuZ3RoOyBzKyspCi0JCXsKLQkJCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmVzW3NdKTsKLQkJCXR5cGVzW3NdID0gZmluZFR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCQl9Ci0JCXJldHVybiB0eXBlczsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgdHlwZSBuYW1lcwotCSAqIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHBhcmFtZXRlciB0eXBlIG5hbWVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJUeXBlTmFtZXMgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nW10gc2lnbmF0dXJlcyA9IGpkdE1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQlTdHJpbmdbXSB0eXBlTmFtZXMgPSBuZXcgU3RyaW5nW3NpZ25hdHVyZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgcz0wOyBzPHNpZ25hdHVyZXMubGVuZ3RoOyBzKyspCi0JCXsKLQkJCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmVzW3NdKTsKLQkJCXR5cGVOYW1lc1tzXSA9IHJlc29sdmVUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQkJfQotCQlyZXR1cm4gdHlwZU5hbWVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSVR5cGUgb2JqZWN0cwotCSAqIGZvciB0aGUgZXhjZXB0aW9ucyB0aHJvd24gYnkgdGhlIGdpdmVuIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBleGNlcHRpb24gdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlW10gZ2V0RXhjZXB0aW9uVHlwZXMgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nW10gc2lnbmF0dXJlcyA9IGpkdE1ldGhvZC5nZXRFeGNlcHRpb25UeXBlcygpOwotCQlJVHlwZVtdIHR5cGVzID0gbmV3IElUeXBlW3NpZ25hdHVyZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgcz0wOyBzPHNpZ25hdHVyZXMubGVuZ3RoOyBzKyspCi0JCXsKLQkJCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmVzW3NdKTsKLQkJCXR5cGVzW3NdID0gZmluZFR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCQl9Ci0JCXJldHVybiB0eXBlczsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgdHlwZSBuYW1lcwotCSAqIGZvciB0aGUgZXhjZXB0aW9ucyB0aHJvd24gYnkgdGhlIGdpdmVuIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBleGNlcHRpb24gdHlwZSBuYW1lcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0RXhjZXB0aW9uVHlwZU5hbWVzICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZ1tdIHNpZ25hdHVyZXMgPSBqZHRNZXRob2QuZ2V0RXhjZXB0aW9uVHlwZXMoKTsKLQkJU3RyaW5nW10gdHlwZU5hbWVzID0gbmV3IFN0cmluZ1tzaWduYXR1cmVzLmxlbmd0aF07Ci0JCWZvciAoaW50IHM9MDsgczxzaWduYXR1cmVzLmxlbmd0aDsgcysrKQotCQl7Ci0JCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlc1tzXSk7Ci0JCQl0eXBlTmFtZXNbc10gPSByZXNvbHZlVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JCX0KLQkJcmV0dXJuIHR5cGVOYW1lczsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgdHlwZXMgcmVwcmVzZW50aW5nCi0JICogdGhlIHN1cGVyY2xhc3NlcywgaWYgYW55LCBvZiB0aGUgZ2l2ZW4gSVR5cGUgaW4gYm90dG9tLXVwCi0JICogb3JkZXIgZXhjbHVkaW5nIGphdmEubGFuZy5PYmplY3QuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBzdXBlcmNsYXNzIHR5cGVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGVbXSBnZXRTdXBlckNsYXNzZXMgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZ2V0U3VwZXJDbGFzc2VzKGpkdFR5cGUsImphdmEubGFuZy5PYmplY3QiKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgdHlwZXMgcmVwcmVzZW50aW5nCi0JICogdGhlIHN1cGVyY2xhc3NlcywgaWYgYW55LCBvZiB0aGUgZ2l2ZW4gSVR5cGUuCi0JICogVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIGphdmEubGFuZy5PYmplY3QgaXMgaW5jbHVkZWQuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gc3RvcENsYXNzTmFtZSBUaGUgbmFtZSBvZiBhIHN0b3AgY2xhc3MgdXNlZCB0byBsaW1pdAotCSAqIHRoZSBzdXBlcmNsYXNzZXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gSWYgdGhlIHN0b3AgY2xhc3MKLQkgKiBpcyBudWxsIG9yIG5hbWVzIGEgY2xhc3Mgbm90IGZvdW5kIGluIHRoZSBoaWVyYXJjaHksIGFsbAotCSAqIHN1cGVyY2xhc3NlcyBhcmUgcmV0dXJuZWQuIE90aGVyd2lzZSwgb25seSBzdXBlcmNsYXNzZXMgdXAKLQkgKiB0byBidXQgZXhjbHVkaW5nIHRoZSBzdG9wIGNsYXNzIGFyZSByZXR1cm5lZC4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBzdXBlcmNsYXNzIHR5cGVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGVbXSBnZXRTdXBlckNsYXNzZXMgKCBJVHlwZSBqZHRUeXBlLCBTdHJpbmcgc3RvcENsYXNzTmFtZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSVR5cGVIaWVyYXJjaHkgaGllcmFyY2h5ID0gamR0VHlwZS5uZXdTdXBlcnR5cGVIaWVyYXJjaHkobW9uaXRvcl8pOwotCQlJVHlwZVtdIGFsbFN1cGVyQ2xhc3NlcyA9IGhpZXJhcmNoeS5nZXRBbGxTdXBlcmNsYXNzZXMoamR0VHlwZSk7Ci0JCUxpc3Qgc3VwZXJDbGFzc2VzID0gbmV3IExpbmtlZExpc3QoKTsKLQkJZm9yIChpbnQgaT0wOyBpPGFsbFN1cGVyQ2xhc3Nlcy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKGFsbFN1cGVyQ2xhc3Nlc1tpXS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKS5lcXVhbHMoc3RvcENsYXNzTmFtZSkpCi0JCQkJYnJlYWs7Ci0JCQlzdXBlckNsYXNzZXMuYWRkKGFsbFN1cGVyQ2xhc3Nlc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIChJVHlwZVtdKXN1cGVyQ2xhc3Nlcy50b0FycmF5KG5ldyBJVHlwZVswXSk7Ci0JfQotCQotCS8qKgotCSAqIEV4dHJhY3RzIHRoZSBxdWFsaWZpZWQgdHlwZSBuYW1lIGZyb20gYSBKRFQgc2lnbmF0dXJlLgotCSAqIEBwYXJhbSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSB0byBleGFtaW5lLgotCSAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCB0eXBlIG5hbWUgZnJvbSB0aGUgc2lnbmF0dXJlLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlICggU3RyaW5nIHNpZ25hdHVyZSApCi0JewotCi0JCVN0cmluZyBwYWNrYWdlTmFtZSA9IFNpZ25hdHVyZS5nZXRTaWduYXR1cmVRdWFsaWZpZXIoc2lnbmF0dXJlKTsKLQkJU3RyaW5nIGJhc2VOYW1lID0gU2lnbmF0dXJlLmdldFNpZ25hdHVyZVNpbXBsZU5hbWUoc2lnbmF0dXJlKTsKLQkJaWYgKGJhc2VOYW1lLmVuZHNXaXRoKCJbXSIpKXsKLQkJCWJhc2VOYW1lID0gYmFzZU5hbWUuc3Vic3RyaW5nKDAsIGJhc2VOYW1lLmluZGV4T2YoIlsiKSk7Ci0JCX0KLQkJCQotCQlTdHJpbmcgdHlwZU5hbWUgPSAocGFja2FnZU5hbWUudHJpbSgpLmVxdWFscygiIik/IiI6cGFja2FnZU5hbWUrIi4iKSArIGJhc2VOYW1lOwotCQlyZXR1cm4gdHlwZU5hbWU7Ci0JfQotCQotCS8qKgotCSAqIEF0dGVtcHRzIHRvIHJlc29sdmUgYW4gdW5yZXNvbHZlZCB0eXBlIG5hbWUgaW4gdGhlCi0JICogY29udGV4dCBvZiB0aGUgZ2l2ZW4gYW5jZXN0b3IgdHlwZSAoaWUuIHRoZSB0eXBlCi0JICogYWN0aW5nIGFzIHRoZSBjb250ZXh0IHdpdGhpbiB3aGljaCB0aGUgdHlwZSBuYW1lCi0JICogc2hvdWxkIGJlIHJlc29sdmVkKS4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlIHRvIGZpbmQuCi0JICogQHBhcmFtIGFuY2VzdG9yIFRoZSB0eXBlIHByb3ZpZGluZyB0aGUgY29udGV4dCB3aXRoaW4KLQkgKiB3aGljaCB0byBsb29rIHVwIHRoZSB0eXBlLgotCSAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lLCBvciB0aGUgb3JpZ2luYWwgdHlwZSBuYW1lCi0JICogaWYgaXQgY291bGQgbm90IGJlIHJlc29sdmVkLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgcmVzb2x2ZVR5cGUgKCBTdHJpbmcgdHlwZU5hbWUsIElUeXBlIGFuY2VzdG9yICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlpZiAoYW5jZXN0b3IgIT0gbnVsbCkKLQkJewotCQkJU3RyaW5nW11bXSBtYXRjaGVzID0gYW5jZXN0b3IucmVzb2x2ZVR5cGUodHlwZU5hbWUpOwotCQkJaWYgKG1hdGNoZXMgIT0gbnVsbCAmJiBtYXRjaGVzLmxlbmd0aCA+IDApCi0JCQl7Ci0JCQkJU3RyaW5nQnVmZmVyIHFuYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWludCBuID0gbWF0Y2hlc1swXS5sZW5ndGg7Ci0JCQkJZm9yIChpbnQgaj0wOyBqPG4tMTsgaisrKQotCQkJCXsKLQkJCQkJcW5hbWUuYXBwZW5kKG1hdGNoZXNbMF1bal0pLmFwcGVuZCgiLiIpOwotCQkJCX0KLQkJCQlpZiAobiA+PSAwKQotCQkJCXsKLQkJCQkJcW5hbWUuYXBwZW5kKG1hdGNoZXNbMF1bbi0xXSk7Ci0JCQkJfQotCQkJCXJldHVybiBxbmFtZS50b1N0cmluZygpOwotCQkJfQotCQl9Ci0JCXJldHVybiB0eXBlTmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBBdHRlbXB0cyB0byBmaW5kIGEgSkRUIElUeXBlIG9iamVjdCBmb3IgdGhlIGdpdmVuCi0JICogcmVzb2x2ZWQgb3IgdW5yZXNvbHZlZCB0eXBlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YKLQkgKiB0aGUgZ2l2ZW4gYW5jZXN0b3IgdHlwZSAoaWUuIHRoZSB0eXBlIGFjdGluZyBhcyB0aGUKLQkgKiBjb250ZXh0IHdpdGhpbiB3aGljaCB0aGUgdHlwZSBuYW1lIHNob3VsZCBiZSByZXNvbHZlZCkuCi0JICogQHBhcmFtIHR5cGVOYW1lIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZSB0byBmaW5kLgotCSAqIEBwYXJhbSBhbmNlc3RvciBUaGUgdHlwZSBwcm92aWRpbmcgdGhlIGNvbnRleHQgd2l0aGluCi0JICogd2hpY2ggdG8gbG9vayB1cCB0aGUgdHlwZS4KLQkgKiBAcmV0dXJuIFRoZSBJVHlwZSBvYmplY3Qgb2YgdGhlIGdpdmVuIHF1YWxpZmllZCBuYW1lLAotCSAqIG9yIG51bGwgaWYgbm8gdHlwZSBjb3VsZCBiZSBmb3VuZCBpbiB0aGUgd29ya3NwYWNlLgotCSAqLwotCXB1YmxpYyBJVHlwZSBmaW5kVHlwZSAoIFN0cmluZyB0eXBlTmFtZSwgSVR5cGUgYW5jZXN0b3IgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlUeXBlIHR5cGUgPSBqYXZhUHJvamVjdF8uZmluZFR5cGUodHlwZU5hbWUpOwotCQlpZiAodHlwZSA9PSBudWxsICYmIGFuY2VzdG9yICE9IG51bGwpCi0JCXsKLQkJCVN0cmluZ1tdW10gbWF0Y2hlcyA9IGFuY2VzdG9yLnJlc29sdmVUeXBlKHR5cGVOYW1lKTsKLQkJCWlmIChtYXRjaGVzICE9IG51bGwpCi0JCQl7Ci0JCQkJaW50IGk9MDsKLQkJCQl3aGlsZSAodHlwZSA9PSBudWxsICYmIGk8bWF0Y2hlcy5sZW5ndGgpCi0JCQkJewotCQkJCQlTdHJpbmdCdWZmZXIgcW5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJCWludCBuID0gbWF0Y2hlc1tpXS5sZW5ndGg7Ci0JCQkJCWZvciAoaW50IGo9MDsgajxuLTE7IGorKykKLQkJCQkJewotCQkJCQkJcW5hbWUuYXBwZW5kKG1hdGNoZXNbaV1bal0pLmFwcGVuZCgiLiIpOwotCQkJCQl9Ci0JCQkJCWlmIChuID49IDApCi0JCQkJCXsKLQkJCQkJCXFuYW1lLmFwcGVuZChtYXRjaGVzW2ldW24tMV0pOwotCQkJCQl9Ci0JCQkJCXR5cGUgPSBqYXZhUHJvamVjdF8uZmluZFR5cGUocW5hbWUudG9TdHJpbmcoKSk7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JLyoqCi0JICogRmluZHMgYWxsIHB1YmxpYywgbm9uLWNvbnN0cnVjdG9yIElNZXRob2RzIGJlbG9uZ2luZwotCSAqIHRvIHRoZSBnaXZlbiBJVHlwZSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBnaXZlbiBsaXN0LgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHdob3NlIG1ldGhvZHMgYXJlIHRvIGJlIGhhcnZlc3RlZC4KLQkgKiBAcGFyYW0gbGlzdCBUaGUgbGlzdCB0byB3aGljaCB0aGUgaGFydmVzdGVkIG1ldGhvZHMgd2lsbCBiZSBhZGRlZC4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIHZvaWQgaGFydmVzdFB1YmxpY01ldGhvZHMgKCBJVHlwZSBqZHRUeXBlLCBMaXN0IGxpc3QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2RbXSBtZXRob2RzID0gamR0VHlwZS5nZXRNZXRob2RzKCk7Ci0JCWZvciAoaW50IG09MDsgbTxtZXRob2RzLmxlbmd0aDsgbSsrKQotCQl7Ci0JCQlpZiAoIW1ldGhvZHNbbV0uaXNDb25zdHJ1Y3RvcigpICYmIEZsYWdzLmlzUHVibGljKG1ldGhvZHNbbV0uZ2V0RmxhZ3MoKSkpCi0JCQl7Ci0JCQkJbGlzdC5hZGQobWV0aG9kc1ttXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogRmluZHMgYWxsIHB1YmxpYyBJRmllbGRzIGJlbG9uZ2luZwotCSAqIHRvIHRoZSBnaXZlbiBJVHlwZSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBnaXZlbiBsaXN0LgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHdob3NlIGZpZWxkcyBhcmUgdG8gYmUgaGFydmVzdGVkLgotCSAqIEBwYXJhbSBsaXN0IFRoZSBsaXN0IHRvIHdoaWNoIHRoZSBoYXJ2ZXN0ZWQgZmllbGRzIHdpbGwgYmUgYWRkZWQuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyB2b2lkIGhhcnZlc3RQdWJsaWNGaWVsZHMgKCBJVHlwZSBqZHRUeXBlLCBMaXN0IGxpc3QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlGaWVsZFtdIGZpZWxkcyA9IGpkdFR5cGUuZ2V0RmllbGRzKCk7Ci0JCWZvciAoaW50IGY9MDsgZjxmaWVsZHMubGVuZ3RoOyBmKyspCi0JCXsKLQkJCWlmIChGbGFncy5pc1B1YmxpYyhmaWVsZHNbZl0uZ2V0RmxhZ3MoKSkpCi0JCQl7Ci0JCQkJbGlzdC5hZGQoZmllbGRzW2ZdKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBJZiB0aGUgZ2l2ZW4gbWV0aG9kIGlzIGEgZ2V0dGVyIGFjY29yZGluZyB0byB0aGUgQmVhbiBzcGVjCi0JICogKGVnLiAiTXlUeXBlIGdldE15UHJvcGVydHkgKCkiIG9yICJib29sZWFuIGlzTXlQcm9wZXJ0eSAoKSIpCi0JICogcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGJlYW4gcHJvcGVydHkgbmFtZSAoZWcuICJteVByb3BlcnR5IiksCi0JICogb3RoZXJ3aXNlLCByZXR1cm4gbnVsbC4KLQkgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gY2hlY2suCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgbmFtZSBvciBub25lIGlmIHRoZSBtZXRob2QgaXMgbm90IGEgZ2V0dGVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0R2V0dGVyTmFtZSAoIElNZXRob2QgbWV0aG9kICkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJaWYgKG1ldGhvZE5hbWUuc3RhcnRzV2l0aCgiZ2V0IikgJiYgbWV0aG9kTmFtZS5sZW5ndGgoKSA+IDMpCi0JCQl7Ci0JCQkJU3RyaW5nIHNpZ25hdHVyZSA9IG1ldGhvZC5nZXRTaWduYXR1cmUoKTsKLQkJCQlTdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSBTaWduYXR1cmUuZ2V0UmV0dXJuVHlwZShzaWduYXR1cmUpOwotCQkJCS8vCi0JCQkJLy8gR2V0dGVycyBtdXN0IG5vdCBiZSB2b2lkLgotCQkJCS8vCi0JCQkJaWYgKHJldHVyblR5cGVOYW1lICE9IG51bGwgJiYgcmV0dXJuVHlwZU5hbWUgIT0gU2lnbmF0dXJlLlNJR19WT0lEKQotCQkJCXsKLQkJCQkJU3RyaW5nW10gcGFyYW1ldGVyU2lnbmF0dXJlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQkJCQkvLwotCQkJCQkvLyBOb24taW5kZXhlZCBnZXR0ZXJzIG11c3QgaGF2ZSB6ZXJvIHBhcmFtZXRlcnMuCi0JCQkJCS8vCi0JCQkJCWlmIChwYXJhbWV0ZXJTaWduYXR1cmVzLmxlbmd0aCA9PSAwKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyw0KS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoNCk7Ci0JCQkJCX0KLQkJCQkJLy8KLQkJCQkJLy8gSW5kZXhlZCBnZXR0ZXJzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIgb2YgdHlwZSAiaW50Ii4KLQkJCQkJLy8KLQkJCQkJZWxzZSBpZiAocGFyYW1ldGVyU2lnbmF0dXJlcy5sZW5ndGggPT0gMSkKLQkJCQkJewotCQkJCQkJU3RyaW5nIGluZGV4VHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUocGFyYW1ldGVyU2lnbmF0dXJlc1swXSk7Ci0JCQkJCQlpZiAoaW5kZXhUeXBlTmFtZS5lcXVhbHMoImludCIpKQotCQkJCQkJewotCQkJCQkJCXJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygzLDQpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnN1YnN0cmluZyg0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG1ldGhvZE5hbWUuc3RhcnRzV2l0aCgiaXMiKSAmJiBtZXRob2ROYW1lLmxlbmd0aCgpID4gMikKLQkJCXsKLQkJCQlTdHJpbmcgc2lnbmF0dXJlID0gbWV0aG9kLmdldFNpZ25hdHVyZSgpOwotCQkJCVN0cmluZyByZXR1cm5UeXBlTmFtZSA9IFNpZ25hdHVyZS5nZXRSZXR1cm5UeXBlKHNpZ25hdHVyZSk7Ci0JCQkJLy8KLQkJCQkvLyAiaXMiIGdldHRlcnMgbXVzdCBiZSBib29sZWFuLgotCQkJCS8vCi0JCQkJaWYgKFNpZ25hdHVyZS5TSUdfQk9PTEVBTi5lcXVhbHMocmV0dXJuVHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJLy8KLQkJCQkJLy8gImlzIiBnZXR0ZXJzIG11c3QgaGF2ZSBubyBwYXJhbWV0ZXJzLgotCQkJCQkvLwotCQkJCQlpZiAobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDApCi0JCQkJCXsKLQkJCQkJCXJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygyLDMpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnN1YnN0cmluZygzKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBJZiB0aGUgZ2l2ZW4gbWV0aG9kIGlzIGEgc2V0dGVyIGFjY29yZGluZyB0byB0aGUgQmVhbiBzcGVjCi0JICogKGVnLiAidm9pZCBzZXRNeVByb3BlcnR5IChNeVR5cGUpIiByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBiZWFuIHByb3BlcnR5IG5hbWUgKGVnLiAibXlQcm9wZXJ0eSIpLCBvdGhlcndpc2UsIHJldHVybiBudWxsLgotCSAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSBuYW1lIG9yIG5vbmUgaWYgdGhlIG1ldGhvZCBpcyBub3QgYSBzZXR0ZXIuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZXR0ZXJOYW1lICggSU1ldGhvZCBtZXRob2QgKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kLmdldEVsZW1lbnROYW1lKCk7Ci0JCQlpZiAobWV0aG9kTmFtZS5zdGFydHNXaXRoKCJzZXQiKSAmJiBtZXRob2ROYW1lLmxlbmd0aCgpID4gMykKLQkJCXsKLQkJCQlTdHJpbmcgc2lnbmF0dXJlID0gbWV0aG9kLmdldFNpZ25hdHVyZSgpOwotCQkJCVN0cmluZyByZXR1cm5UeXBlTmFtZSA9IFNpZ25hdHVyZS5nZXRSZXR1cm5UeXBlKHNpZ25hdHVyZSk7Ci0JCQkJLy8KLQkJCQkvLyBTZXR0ZXJzIG11c3QgYmUgdm9pZC4KLQkJCQkvLwotCQkJCWlmIChTaWduYXR1cmUuU0lHX1ZPSUQuZXF1YWxzKHJldHVyblR5cGVOYW1lKSkKLQkJCQl7Ci0JCQkJCVN0cmluZ1tdIHBhcmFtZXRlclNpZ25hdHVyZXMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJCQkJLy8KLQkJCQkJLy8gTm9uLWluZGV4ZWQgc2V0dGVycyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLgotCQkJCQkvLwotCQkJCQlpZiAocGFyYW1ldGVyU2lnbmF0dXJlcy5sZW5ndGggPT0gMSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMsNCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDQpOwotCQkJCQl9Ci0JCQkJCS8vCi0JCQkJCS8vIEluZGV4ZWQgc2V0dGVycyBtdXN0IGhhdmUgZXhhY3RseSB0d28gcGFyYW1ldGVycywKLQkJCQkJLy8gdGhlIGZpcnN0IG9mIHdoaWNoIG11c3QgYmUgImludCIuCi0JCQkJCS8vCi0JCQkJCWVsc2UgaWYgKHBhcmFtZXRlclNpZ25hdHVyZXMubGVuZ3RoID09IDIpCi0JCQkJCXsKLQkJCQkJCWlmIChTaWduYXR1cmUuU0lHX0lOVC5lcXVhbHMocGFyYW1ldGVyU2lnbmF0dXJlc1swXSkpCi0JCQkJCQl7Ci0JCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMsNCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDQpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qCi0JICogVGhlIEphdmEgcHJvamVjdCB0aGF0IGdvdmVybnMgdGhlIHNlYXJjaCBzY29wZSBmb3IgdGhpcyByZXNvbHZlci4KLQkgKi8KLQlwcml2YXRlIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdF87Ci0JCi0JLyoKLQkgKiBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UsIGlmIGFueS4gCi0JICovCi0JcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3JfOwotCQotCS8qCi0JICogVGhlIHNldCBvZiBKYXZhIHdyYXBwZXIgdHlwZXMuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gd3JhcHBlclR5cGVzXyA9IHsKLQkJImphdmEubGFuZy5DaGFyYWN0ZXIiLAotCQkiamF2YS5sYW5nLkJvb2xlYW4iLAotCQkiamF2YS5sYW5nLkJ5dGUiLAotCQkiamF2YS5sYW5nLlNob3J0IiwKLQkJImphdmEubGFuZy5JbnRlZ2VyIiwKLQkJImphdmEubGFuZy5Mb25nIiwKLQkJImphdmEubGFuZy5GbG9hdCIsCi0JCSJqYXZhLmxhbmcuRG91YmxlIgotCX07Ci0KLQkvKgotCSAqIFRoZSBzZXQgb2YgSmF2YSBwcmltaXRpdmUgdHlwZXMuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gcHJpbWl0aXZlVHlwZXNfID0gewotCQkiY2hhciIsCi0JCSJib29sZWFuIiwKLQkJImJ5dGUiLAotCQkic2hvcnQiLAotCQkiaW50IiwKLQkJImxvbmciLAotCQkiZmxvYXQiLAotCQkiZG91YmxlIgotCX07Ci0KLQkvKgotCSAqIFRoZSBzZXQgb2YgSkFYLVJQQyBzdXBwb3J0ZWQgSmF2YSBzdGFuZGFyZCB0eXBlcywKLQkgKiBleGNsdWRpbmcgcHJpbWl0aXZlcyBhbmQgd3JhcHBlciB0eXBlcy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBqYXhycGNUeXBlc18gPSB7Ci0JCSJib29sZWFuIiwKLQkJImJ5dGUiLAotCQkic2hvcnQiLAotCQkiaW50IiwKLQkJImxvbmciLAotCQkiZmxvYXQiLAotCQkiZG91YmxlIiwKLQkJImphdmEubGFuZy5TdHJpbmciLAotCQkiamF2YS5sYW5nLkJvb2xlYW4iLAotCQkiamF2YS5sYW5nLkJ5dGUiLAotCQkiamF2YS5sYW5nLlNob3J0IiwKLQkJImphdmEubGFuZy5JbnRlZ2VyIiwKLQkJImphdmEubGFuZy5Mb25nIiwKLQkJImphdmEubGFuZy5GbG9hdCIsCi0JCSJqYXZhLmxhbmcuRG91YmxlIiwKLQkJImphdmEudXRpbC5EYXRlIiwKLQkJImphdmEudXRpbC5DYWxlbmRhciIsCi0JCSJqYXZhLm1hdGguQmlnSW50ZWdlciIsCi0JCSJqYXZhLm1hdGguQmlnRGVjaW1hbCIsCi0JCSJqYXZhLm5ldC5VUkkiLAotCQkiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIKLQl9OwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhQmVhblByb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFCZWFuUHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI5ZDU1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFCZWFuUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGlzIGlzIGEgZ2FyZGVuIHZhcmlldHkgaW1wbGVtZW50YXRpb24gb2YgSUphdmFCZWFuUHJvcGVydHksCi0gKiBjb25zdHJ1Y3RhYmxlIGJ5IGRlZmF1bHQgYW5kIGVxdWlwcGVkIHdpdGggZ2V0dGVycyBhbmQgc2V0dGVycwotICogZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIElKYXZhQmVhblByb3BlcnR5LgotICovCi1wdWJsaWMgY2xhc3MgSmF2YUJlYW5Qcm9wZXJ0eSBpbXBsZW1lbnRzIElKYXZhQmVhblByb3BlcnR5Ci17Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZV87Ci0JcHJpdmF0ZSBib29sZWFuIGluZGV4ZWRfOwotCXByaXZhdGUgSU1ldGhvZCBnZXR0ZXJfOwotCXByaXZhdGUgSU1ldGhvZCBzZXR0ZXJfOwotCXByaXZhdGUgSU1ldGhvZCBpbmRleGVkR2V0dGVyXzsKLQlwcml2YXRlIElNZXRob2QgaW5kZXhlZFNldHRlcl87Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldE5hbWUoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotCXsKLQkJcmV0dXJuIG5hbWVfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAibmFtZSIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gbmFtZSBUaGUgc3RyaW5nIHZhbHVlIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lICggU3RyaW5nIG5hbWUgKQotCXsKLQkJbmFtZV8gPSBuYW1lOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjaXNJbmRleGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0luZGV4ZWQgKCkKLQl7Ci0JCXJldHVybiBpbmRleGVkXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgImluZGV4ZWQiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIGluZGV4ZWQgVGhlIGJvb2xlYW4gdmFsdWUgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGV4ZWQgKCBib29sZWFuIGluZGV4ZWQgKQotCXsKLQkJaW5kZXhlZF8gPSBpbmRleGVkOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0R2V0dGVyKCkKLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRHZXR0ZXIgKCkKLQl7Ci0JCXJldHVybiBnZXR0ZXJfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAiZ2V0dGVyIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBnZXR0ZXIgVGhlIElNZXRob2QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEdldHRlciAoIElNZXRob2QgZ2V0dGVyICkKLQl7Ci0JCWdldHRlcl8gPSBnZXR0ZXI7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXRTZXR0ZXIoKQotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldFNldHRlciAoKQotCXsKLQkJcmV0dXJuIHNldHRlcl87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJzZXR0ZXIiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIHNldHRlciBUaGUgSU1ldGhvZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2V0dGVyICggSU1ldGhvZCBzZXR0ZXIgKQotCXsKLQkJc2V0dGVyXyA9IHNldHRlcjsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldEluZGV4ZWRHZXR0ZXIoKQotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEluZGV4ZWRHZXR0ZXIgKCkKLQl7Ci0JCXJldHVybiBpbmRleGVkR2V0dGVyXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgImluZGV4ZWRHZXR0ZXIiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIGluZGV4ZWRHZXR0ZXIgVGhlIElNZXRob2QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGV4ZWRHZXR0ZXIgKCBJTWV0aG9kIGluZGV4ZWRHZXR0ZXIgKQotCXsKLQkJaW5kZXhlZEdldHRlcl8gPSBpbmRleGVkR2V0dGVyOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0SW5kZXhlZFNldHRlcigpCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0SW5kZXhlZFNldHRlciAoKQotCXsKLQkJcmV0dXJuIGluZGV4ZWRTZXR0ZXJfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAiaW5kZXhlZFNldHRlciIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gaW5kZXhlZFNldHRlciBUaGUgSU1ldGhvZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZXhlZFNldHRlciAoIElNZXRob2QgaW5kZXhlZFNldHRlciApCi0JewotCQlpbmRleGVkU2V0dGVyXyA9IGluZGV4ZWRTZXR0ZXI7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldERlY2xhcmluZ1R5cGUoKQotCSAqLwotCXB1YmxpYyBJVHlwZSBnZXREZWNsYXJpbmdUeXBlICgpCi0JewotCQlJTWV0aG9kIG1ldGhvZCA9IGdldEdldHRlcigpOwotCQlpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZCA9IGdldFNldHRlcigpOwotCQlpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZCA9IGdldEluZGV4ZWRHZXR0ZXIoKTsKLQkJaWYgKG1ldGhvZCA9PSBudWxsKSBtZXRob2QgPSBnZXRJbmRleGVkU2V0dGVyKCk7Ci0JCXJldHVybiBtZXRob2QgIT0gbnVsbCA/IG1ldGhvZC5nZXREZWNsYXJpbmdUeXBlKCkgOiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFXZWJTZXJ2aWNlUnVsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWZmYTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBBIGJhc2ljIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSUphdmFXZWJTZXJ2aWNlUnVsZS4KLSAqLwotcHVibGljIGNsYXNzIEphdmFXZWJTZXJ2aWNlUnVsZSBpbXBsZW1lbnRzIElKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQlwcm90ZWN0ZWQgSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmVfOwotCXByb3RlY3RlZCBMaXN0IHN0YXR1c0xpc3RfOwotCXByb3RlY3RlZCBpbnQgaWRfOwotCXByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlXzsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWVfOwotCXByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb25fOwotCQotCXByb3RlY3RlZCBKYXZhV2ViU2VydmljZVJ1bGUgKCkKLQl7Ci0JCS8vIE5vdCBwdWJsaWNseSBjb25zdHJ1Y3RhYmxlLgotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXRJZCgpCi0JICovCi0JcHVibGljIGludCBnZXRJZCAoKQotCXsKLQkJcmV0dXJuIGlkXzsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjZ2V0TmFtZXNwYWNlKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSAoKQotCXsKLQkJcmV0dXJuIG5hbWVzcGFjZV87Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldE5hbWUoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotCXsKLQkJcmV0dXJuIG5hbWVfOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXREZXNjcmlwdGlvbigpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotCXsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uXzsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjaW5pdCgpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCWVuZ2luZV8gPSBlbmdpbmU7Ci0JCXN0YXR1c0xpc3RfID0gbmV3IExpbmtlZExpc3QoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRFeGNlcHRpb24ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRFeGNlcHRpb24gKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRGaWVsZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEZpZWxkICggSUZpZWxkIGpkdEZpZWxkLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdFByb3BlcnR5KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdFByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgYmVhblByb3BlcnR5LCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdE1ldGhvZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRNZXRob2QgKCBJTWV0aG9kIGpkdE1ldGhvZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjZ2V0UmVzdWx0cygpCi0JICovCi0JcHVibGljIElTdGF0dXMgZ2V0UmVzdWx0cyAoKQotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQlpZiAoc3RhdHVzTGlzdF8uc2l6ZSgpID09IDApCi0JCXsKLQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJTXVsdGlTdGF0dXMgbXVsdGlTdGF0dXMgPSBuZXcgTXVsdGlTdGF0dXMoIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiIixudWxsKTsKLQkJCUl0ZXJhdG9yIGkgPSBzdGF0dXNMaXN0Xy5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQkJewotCQkJCW11bHRpU3RhdHVzLmFkZCgoSVN0YXR1cylpLm5leHQoKSk7Ci0JCQl9Ci0JCQlzdGF0dXMgPSBtdWx0aVN0YXR1czsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlU2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFXZWJTZXJ2aWNlUnVsZVNldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDg3NzE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlU2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogVGhpcyBvYmplY3QgbWFuYWdlcyBhIHNldCBvZiBydWxlcy4KLSAqIFJ1bGVzIGluIHRoZSBzZXQgbWF5IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXZhV2ViU2VydmljZVJ1bGVTZXQKLXsKLQlwcml2YXRlIFNldCBlbmFibGVkUnVsZXNfID0gbmV3IEhhc2hTZXQoKTsKLQlwcml2YXRlIFNldCBkaXNhYmxlZFJ1bGVzXyA9IG5ldyBIYXNoU2V0KCk7Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldywgaW5pdGlhbGx5IGVtcHR5IHNldCBvZiBydWxlcy4KLQkgKi8KLQlwdWJsaWMgSmF2YVdlYlNlcnZpY2VSdWxlU2V0ICgpCi0JewotCQkvLyBOb3RoaW5nIHRvIGRvLgotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgc2V0IG9mIHJ1bGVzIGluaXRpYWxpemVkIHdpdGggdGhvc2UKLQkgKiBmcm9tIHRoZSBnaXZlbiBhcnJheSBvZiA8Y29kZT5ydWxlczwvY29kZT4uCi0JICogQHBhcmFtIHJ1bGVzIEFuIGFycmF5IG9mIHJ1bGVzIHRvIGFkZC4KLQkgKi8KLQlwdWJsaWMgSmF2YVdlYlNlcnZpY2VSdWxlU2V0ICggSUphdmFXZWJTZXJ2aWNlUnVsZVtdIHJ1bGVzICkKLQl7Ci0JCWFkZFJ1bGVzKHJ1bGVzKTsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyBhIDxjb2RlPnJ1bGU8L2NvZGU+IHRvIHRoZSBzZXQuCi0JICogUnVsZXMgYWRkZWQgdG8gdGhlIHNldCBhcmUgaW5pdGlhbGx5IGVuYWJsZWQuCi0JICogQHBhcmFtIHJ1bGUgVGhlIHJ1bGUgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFJ1bGUgKCBJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgKQotCXsKLQkJZW5hYmxlZFJ1bGVzXy5hZGQocnVsZSk7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgc2V2ZXJhbCA8Y29kZT5ydWxlczwvY29kZT4gdG8gdGhlIHNldC4KLQkgKiBSdWxlcyBhZGRlZCB0byB0aGUgc2V0IGFyZSBpbml0aWFsbHkgZW5hYmxlZC4KLQkgKiBAcGFyYW0gcnVsZXMgVGhlIGFycmF5IG9mIHJ1bGVzIHRvIGFkZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRSdWxlcyAoIElKYXZhV2ViU2VydmljZVJ1bGVbXSBydWxlcyApCi0JewotCQllbmFibGVkUnVsZXNfLmFkZEFsbChBcnJheXMuYXNMaXN0KHJ1bGVzKSk7Ci0JfQotCQotCS8qKgotCSAqIE1hcmtzIHRoZSBnaXZlbiA8Y29kZT5ydWxlPC9jb2RlPiBhcyBkaXNhYmxlZCBvciBlbmFibGVkLgotCSAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIHJ1bGUgaXMgbm90IGFscmVhZHkgaW4KLQkgKiB0aGUgc2V0LCBpbiBvdGhlciB3b3JkcywgdGhpcyBtZXRob2Qgd2lsbCBub3QgaGF2ZSB0aGUKLQkgKiBzaWRlIGVmZmVjdCBvZiBhZGRpbmcgYSBydWxlIHRvIHRoZSBzZXQuCi0JICogQHBhcmFtIHJ1bGUgVGhlIHJ1bGUgdG8gZGlzYWJsZSBvciBlbmFibGUuCi0JICogQHBhcmFtIGRpc2FibGVkIFRydWUgdG8gZGlzYWJsZSB0aGUgcnVsZSBvciBmYWxzZSB0byBlbmFibGUgaXQuCi0JICogQHJldHVybiBUcnVlIGlmIGEgY2hhbmdlIGluIHN0YXR1cyB3YXMgYWN0dWFsbHkgbWFkZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzZXRSdWxlRGlzYWJsZWQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUsIGJvb2xlYW4gZGlzYWJsZWQgKQotCXsKLQkJaWYgKGRpc2FibGVkKQotCQl7Ci0JCQlpZiAoZW5hYmxlZFJ1bGVzXy5yZW1vdmUocnVsZSkpCi0JCQl7Ci0JCQkJZGlzYWJsZWRSdWxlc18uYWRkKHJ1bGUpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGRpc2FibGVkUnVsZXNfLnJlbW92ZShydWxlKSkKLQkJCXsKLQkJCQllbmFibGVkUnVsZXNfLmFkZChydWxlKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJ1bGVzIGluIHRoZSBzZXQuCi0JICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHJ1bGVzIGluIHRoZSBzZXQuCi0JICovCi0JcHVibGljIGludCBzaXplICgpCi0JewotCQlyZXR1cm4gZW5hYmxlZFJ1bGVzXy5zaXplKCkgKyBkaXNhYmxlZFJ1bGVzXy5zaXplKCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbmFibGVkIHJ1bGVzIGluIHRoZSBzZXQuCi0JICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGVuYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgaW50IG51bWJlckVuYWJsZWQgKCkKLQl7Ci0JCXJldHVybiBlbmFibGVkUnVsZXNfLnNpemUoKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIHJ1bGVzIGluIHRoZSBzZXQuCi0JICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGRpc2FibGVkIHJ1bGVzIGluIHRoZSBzZXQuCi0JICovCi0JcHVibGljIGludCBudW1iZXJEaXNhYmxlZCAoKQotCXsKLQkJcmV0dXJuIGRpc2FibGVkUnVsZXNfLnNpemUoKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IGVuYWJsZWQgcnVsZXMgZnJvbSB0aGUgc2V0LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBlbmFibGVkIHJ1bGVzIGZyb20gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgSUphdmFXZWJTZXJ2aWNlUnVsZVtdIGdldEVuYWJsZWRSdWxlcyAoKQotCXsKLQkJcmV0dXJuIChJSmF2YVdlYlNlcnZpY2VSdWxlW10pZW5hYmxlZFJ1bGVzXy50b0FycmF5KG5ldyBJSmF2YVdlYlNlcnZpY2VSdWxlWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IGRpc2FibGVkIHJ1bGVzIGZyb20gdGhlIHNldC4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgZGlzYWJsZWQgcnVsZXMgZnJvbSB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBJSmF2YVdlYlNlcnZpY2VSdWxlW10gZ2V0RGlzYWJsZWRSdWxlcyAoKQotCXsKLQkJcmV0dXJuIChJSmF2YVdlYlNlcnZpY2VSdWxlW10pZGlzYWJsZWRSdWxlc18udG9BcnJheShuZXcgSUphdmFXZWJTZXJ2aWNlUnVsZVswXSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGFsbCBydWxlcyBpbiB0aGUgc2V0IGJ5IGNhbGxpbmcKLQkgKiB0aGVpciBpbml0KCkgbWV0aG9kcyB3aXRoIHRoZSBnaXZlbiBlbmdpbmUuCi0JICogQHBhcmFtIGVuZ2luZSBUaGUgZW5naW5lIGluaXRpYWxpemluZyAKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUuaW5pdChlbmdpbmUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRDbGFzcyIgbWV0aG9kIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0LiAKLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIEpEVCBJVHlwZSBiZWluZyB2aXNpdGVkLgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgc3RhY2sgb2Ygb2JqZWN0cyB1cCB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLnZpc2l0Q2xhc3MoamR0Q2xhc3MscGVhbnV0VHJhaWwpOwotCQl9CQkKLQl9Ci0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdEV4Y2VwdGlvbiIgbWV0aG9kIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0LiAKLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIEpEVCBJVHlwZSBiZWluZyB2aXNpdGVkLgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgc3RhY2sgb2Ygb2JqZWN0cyB1cCB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEV4Y2VwdGlvbiAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS52aXNpdEV4Y2VwdGlvbihqZHRDbGFzcyxwZWFudXRUcmFpbCk7Ci0JCX0KLQl9Ci0KLQotCS8qKgotCSAqIFZpc2l0cyB0aGUgInZpc2l0RmllbGQiIG1ldGhvZCBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldC4gCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBKRFQgSUZpZWxkIGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RmllbGQgKCBJRmllbGQgamR0RmllbGQsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLnZpc2l0RmllbGQoamR0RmllbGQscGVhbnV0VHJhaWwpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRQcm9wZXJ0eSIgbWV0aG9kIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0LiAKLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIElKYXZhQmVhblByb3BlcnR5IGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0UHJvcGVydHkgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBiZWFuUHJvcGVydHksIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLnZpc2l0UHJvcGVydHkoYmVhblByb3BlcnR5LHBlYW51dFRyYWlsKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZpc2l0cyB0aGUgInZpc2l0TWV0aG9kIiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSkRUIElNZXRob2QgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRNZXRob2QgKCBJTWV0aG9kIGpkdE1ldGhvZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRNZXRob2QoamR0TWV0aG9kLHBlYW51dFRyYWlsKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBDb2xsZWN0cyB0aGUgcmVzdWx0cyBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldCB0b2dldGhlci4KLQkgKiBJZiBvbmUgb3IgbW9yZSB3YXJuaW5ncyBvciBlcnJvcnMgYXJlIGZvdW5kLCByZXR1cm5zCi0JICogYSBzdGF0dXMgb2JqZWN0IHdob3NlIHRvcCBsZXZlbCBtZXNzYWdlIGlzIHRoZSByb290Ci0JICogbWVzc2FnZSBwYXNzZWQgdG8gdGhpcyBtZXNzYWdlLCBvdGhlcndpc2UsIHJldHVybnMgYQotCSAqIGJhc2ljICJPSyIgc3RhdHVzLgotCSAqIEBwYXJhbSByb290TWVzc2FnZSBUaGUgd2FybmluZy9lcnJvciBtZXNzYWdlIHRvIGFjdCBhcwotCSAqIHRoZSByb290IG1lc3NhZ2UgaWYgbmVjZXNzYXJ5IChpZS4gaWYgYXQgbGVhc3Qgb25lIHJ1bGUKLQkgKiBpbiB0aGUgc2V0IHJlcG9ydGVkIGF0IGxlYXN0IG9uZSB3YXJuaW5nL2Vycm9yKS4KLQkgKiBAcmV0dXJuIFRoZSBjb2xsZWN0aXZlIHN0YXR1cy4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBnZXRSZXN1bHRzICggU3RyaW5nIHJvb3RNZXNzYWdlICkKLQl7Ci0JCUxpc3QgbGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCUl0ZXJhdG9yIGUgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChlLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpZS5uZXh0KCk7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IHJ1bGUuZ2V0UmVzdWx0cygpOwotCQkJaWYgKCFzdGF0dXMuaXNPSygpKQotCQkJewotCQkJCWxpc3QuYWRkKHN0YXR1cyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGxpc3Quc2l6ZSgpID4gMCkKLQkJewotCQkJTXVsdGlTdGF0dXMgbXVsdGlTdGF0dXMgPSBuZXcgTXVsdGlTdGF0dXMoIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxyb290TWVzc2FnZSxudWxsKTsKLQkJCUl0ZXJhdG9yIGwgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAobC5oYXNOZXh0KCkpCi0JCQl7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSAoSVN0YXR1cylsLm5leHQoKTsKLQkJCQltdWx0aVN0YXR1cy5hZGRBbGwoc3RhdHVzKTsKLQkJCX0KLQkJCXJldHVybiBtdWx0aVN0YXR1czsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiIixudWxsKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ0MTA3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkpEVFJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIHJ1bGUgY2hlY2tzIGlmIGEgc2VydmljZSBjbGFzcwotICogaXMgcHVibGljIGRlZmF1bHQgY29uc3RydWN0YWJsZS4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGUwMDAxIGV4dGVuZHMgSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIEpBWFJQQ1J1bGUwMDAxICgpCi0JewotCQlpZF8gPSAxOwotCQluYW1lc3BhY2VfID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvb3JnLmVjbGlwc2UuanN0LndzL2pheHJwYy8xLjEiOwotCQluYW1lXyA9IG51bGw7Ci0JCWRlc2NyaXB0aW9uXyA9IG51bGw7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLyBBbiBlbXB0eSBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIHRoZSByb290Ci0JCS8vIGNsYXNzIG9yIEpBWC1SUEMgc2VydmljZSBjbGFzcy4KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAwKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlpZiAoIXJlc29sdmVyLmlzQ29uc3RydWN0YWJsZShqZHRDbGFzcykgfHwgcmVzb2x2ZXIuaXNJbnRlcmZhY2UoamR0Q2xhc3MpIHx8IHJlc29sdmVyLmlzQWJzdHJhY3QoamR0Q2xhc3MpKQotCQkJCXsKLQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDEsamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOwotCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCJJbnRlcm5hbCBlcnJvciIsZSkpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDQ5YzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSkRUUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgcnVsZSBjaGVja3MgaWYgYSB2YWx1ZSB0eXBlIGNsYXNzCi0gKiBpcyBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3RhYmxlLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZTAwMDIgZXh0ZW5kcyBKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDUnVsZTAwMDIgKCkKLQl7Ci0JCWlkXyA9IDI7Ci0JCW5hbWVzcGFjZV8gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9vcmcuZWNsaXBzZS5qc3Qud3MvamF4cnBjLzEuMSI7Ci0JCW5hbWVfID0gbnVsbDsKLQkJZGVzY3JpcHRpb25fID0gbnVsbDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MKLQkJLy8gcm9vdCBjbGFzcyBvciBKQVgtUlBDIHNlcnZpY2UgY2xhc3MsIHdoZXJlYXMgYSBub24tZW1wdHkKLQkJLy8gcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyBhIGNsYXNzIGZyb20gYSBtZXRob2QsIGZpZWxkCi0JCS8vIG9yIHByb3BlcnR5IHNpZ25hdHVyZS4gSW4gdGhlIGZvcm1lciBjYXNlLCByZW1lbWJlciB0aGUKLQkJLy8gcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHR5cGUganVzdCBpbiBjYXNlIHdlIG5lZWQgaXQgZm9yIHRoZQotCQkvLyBsYXR0ZXIgY2FzZS4KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAwKQotCQl7Ci0JCQlzZXJ2aWNlQ2xhc3NOYW1lXyA9IGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJSkRUUmVzb2x2ZXIgcmVzb2x2ZXIgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCk7Ci0JCQkJU3RyaW5nIHFuYW1lID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCQkJaWYgKCFyZXNvbHZlci5pc1N0YW5kYXJkVHlwZShxbmFtZSkpCi0JCQkJeyAKLQkJCQkJaWYgKCFyZXNvbHZlci5pc0NvbnN0cnVjdGFibGUoamR0Q2xhc3MpIHx8IHJlc29sdmVyLmlzSW50ZXJmYWNlKGpkdENsYXNzKSB8fCByZXNvbHZlci5pc0Fic3RyYWN0KGpkdENsYXNzKSkKLQkJCQkJewotCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDIscW5hbWUsc2VydmljZUNsYXNzTmFtZV8pOwotCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCJJbnRlcm5hbCBlcnJvciIsZSkpOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWVfOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzY1YmNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgcnVsZSB2ZXJpZmllcyB0aGF0IGEgc2VydmljZSBjbGFzcyBoYXMgbm8gb3ZlcmxvYWRlZCBtZXRob2RzLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZTAwMDMgZXh0ZW5kcyBKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDUnVsZTAwMDMgKCkKLQl7Ci0JCWlkXyA9IDM7Ci0JCW5hbWVzcGFjZV8gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9vcmcuZWNsaXBzZS5qc3Qud3MvamF4cnBjLzEuMSI7Ci0JCW5hbWVfID0gbnVsbDsKLQkJZGVzY3JpcHRpb25fID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSNpbml0KG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApCi0JewotCQlzdXBlci5pbml0KGVuZ2luZSk7Ci0JCW1ldGhvZE5hbWVzXyA9IG5ldyBIYXNoTWFwKCk7Ci0JCW92ZXJsb2FkZWRNZXRob2ROYW1lc18gPSBuZXcgSGFzaFNldCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QKLQkJLy8gY2xhc3MsIGFrYS4gSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLiBQdXQgYXNpZGUKLQkJLy8gdGhlIGNsYXNzIG5hbWUgaW4gY2FzZSB2aXNpdE1ldGhvZCgpIG5lZWRzIGl0LgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXNlcnZpY2VDbGFzc05hbWVfID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0TWV0aG9kKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBIHBlYW51dCB0cmFpbCBvZiBsZW5ndGggb25lIGltcGxpZXMgdGhpcyBpcyBhIG1ldGhvZAotCQkvLyBiZWxvbmdpbmcgdG8gdGhlIHJvb3QgY2xhc3MsIGFrYS4gSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDEpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCS8vCi0JCQkJLy8gSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCB0aGlzIG1ldGhvZCBhbHJlYWR5IGJ1dCBoYXZlbid0Ci0JCQkJLy8gcmVwb3J0ZWQgdGhlIG92ZXJsb2FkIGNvbmRpdGlvbiwgcmVwb3J0IGl0LgotCQkJCS8vCi0JCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSBqZHRNZXRob2QuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCQlTdHJpbmcgZmlyc3RQYXJhbWV0ZXJTaWduYXR1cmUgPSAoU3RyaW5nKW1ldGhvZE5hbWVzXy5nZXQobWV0aG9kTmFtZSk7Ci0JCQkJU3RyaW5nIHRoaXNQYXJhbWV0ZXJTaWduYXR1cmUgPSBmbGF0dGVuZWRTaWduYXR1cmVPZihqZHRNZXRob2QpOwotCQkJCWlmICh0aGlzUGFyYW1ldGVyU2lnbmF0dXJlICE9IG51bGwpCi0JCQkJewotCQkJCQlpZiAoZmlyc3RQYXJhbWV0ZXJTaWduYXR1cmUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJLy8KLQkJCQkJCS8vIElmIHdlIGhhdmUgZW5jb3VudGVyZWQgdGhpcyBtZXRob2QncyBuYW1lIGFscmVhZHksCi0JCQkJCQkvLyBidXQgaGF2ZSBub3QgeWV0IGRldGVybWluZWQgaWYgaXQgaXMgb3ZlcmxvYWRlZCwKLQkJCQkJCS8vIHRoZW4gY29tcGFyZSB0aGlzIG1ldGhvZCdzIHBhcmFtZXRlciBzaWduYXR1cmUgd2l0aAotCQkJCQkJLy8gdGhhdCBvZiB0aGUgImZpcnN0IHNpZ25hdHVyZSIgb2YgdGhlIG1ldGhvZCBuYW1lLgotCQkJCQkJLy8gVGhlIG1vbWVudCB3ZSBmaW5kIGEgc2Vjb25kIHNpZ25hdHVyZSBmb3IgYSBnaXZlbgotCQkJCQkJLy8gbWV0aG9kIG5hbWUsIHdlIGhhdmUgYW4gb3ZlcmxvYWQgY29uZGl0aW9uLgotCQkJCQkJLy8KLQkJCQkJCWlmICghb3ZlcmxvYWRlZE1ldGhvZE5hbWVzXy5jb250YWlucyhtZXRob2ROYW1lKSAmJiAhdGhpc1BhcmFtZXRlclNpZ25hdHVyZS5lcXVhbHMoZmlyc3RQYXJhbWV0ZXJTaWduYXR1cmUpKQotCQkJCQkJewotCQkJCQkJCW92ZXJsb2FkZWRNZXRob2ROYW1lc18uYWRkKG1ldGhvZE5hbWUpOwotCQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDAzLG1ldGhvZE5hbWUsc2VydmljZUNsYXNzTmFtZV8pOwotCQkJCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJLy8KLQkJCQkJCS8vIElmIHdlIGhhdmUgcmVjb3JkZWQgbm8gc2lnbmF0dXJlIGZvciB0aGUgZ2l2ZW4gbWV0aG9kCi0JCQkJCQkvLyBuYW1lIChpZS4gd2UgaGF2ZSBub3QgZW5jb3VudGVyZWQgdGhlIG1ldGhvZCBuYW1lIHlldCksCi0JCQkJCQkvLyB0aGVuIHJlY29yZCB0aGlzIG9uZS4gQW55ICJmaXJzdCBzaWduYXR1cmUiIHdpbGwgZG8uCi0JCQkJCQkvLwotCQkJCQkJbWV0aG9kTmFtZXNfLnB1dChtZXRob2ROYW1lLHRoaXNQYXJhbWV0ZXJTaWduYXR1cmUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vIERvIG5vdGhpbmcuCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBHcmFicyB0aGUgdHlwZXMgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGdpdmVuIG1ldGhvZAotCSAqIGFuZCBmbGF0dGVucyB0aGVuIGludG8gYSBzaW5nbGUgc3RyaW5nIHN1ZmZpY2llbnQgdG8KLQkgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIG92ZXJsb2FkZWQgdnMuIG92ZXJyaWRkZW4gbWV0aG9kcy4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBmbGF0dGVuZWRTaWduYXR1cmVPZiAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpLmdldFBhcmFtZXRlclR5cGVOYW1lcyhqZHRNZXRob2QpOwotCQlTdHJpbmdCdWZmZXIgZmxhdHRlbmVkU2lnbmF0dXJlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJZmxhdHRlbmVkU2lnbmF0dXJlLmFwcGVuZChzaWduYXR1cmVzW3NdKS5hcHBlbmQoIiwiKTsKLQkJfQotCQlyZXR1cm4gZmxhdHRlbmVkU2lnbmF0dXJlLnRvU3RyaW5nKCk7Ci0JfQotCQotCXByaXZhdGUgTWFwIG1ldGhvZE5hbWVzXzsKLQlwcml2YXRlIFNldCBvdmVybG9hZGVkTWV0aG9kTmFtZXNfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWVfOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZjZjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSkRUUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgcnVsZSB2ZXJpZmllcyB0aGF0IHRoZSBtZXRob2RzIG9mIGEgc2VydmljZSBjbGFzcwotICogdXNlcyBvbmx5IEpBWC1SUEMgc3VwcG9ydGVkIHR5cGVzLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZTAwMDUgZXh0ZW5kcyBKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDUnVsZTAwMDUgKCkKLQl7Ci0JCWlkXyA9IDU7Ci0JCW5hbWVzcGFjZV8gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9vcmcuZWNsaXBzZS5qc3Qud3MvamF4cnBjLzEuMSI7Ci0JCW5hbWVfID0gbnVsbDsKLQkJZGVzY3JpcHRpb25fID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSNpbml0KG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApCi0JewotCQlzdXBlci5pbml0KGVuZ2luZSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdAotCQkvLyBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuIFB1dCBhc2lkZQotCQkvLyB0aGUgY2xhc3MgbmFtZSBpbiBjYXNlIHZpc2l0TWV0aG9kKCkgbmVlZHMgaXQuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMCkKLQkJewotCQkJc2VydmljZUNsYXNzTmFtZV8gPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEEgcGVhbnV0IHRyYWlsIG9mIGxlbmd0aCBvbmUgaW1wbGllcyB0aGlzIGlzIGEgbWV0aG9kCi0JCS8vIGJlbG9uZ2luZyB0byB0aGUgcm9vdCBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMSkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSBqZHRNZXRob2QuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCQkvLwotCQkJCS8vIENoZWNrIHRoZSBtZXRob2QgcmV0dXJuIHR5cGUgZm9yIGNvbXBsaWFuY2UuCi0JCQkJLy8gQW55IEphdmEgcHJpbWl0aXZlIG9yIHN0YW5kYXJkICgiamF2YS4iIG9yICJqYXZheC4iKSB0eXBlCi0JCQkJLy8gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEpBWC1SUEMgd2lsbCBnZXQgZmxhZ2dlZC4KLQkJCQkvLyBBbnkgbm9uLXByaW1pdGl2ZSBvciBub24tc3RhbmRhcmQgdHlwZSBpcyBwcmVzdW1lZCB0byBiZSBhCi0JCQkJLy8gcG90ZW50aWFsIHZhbHVlIHR5cGUgYW5kIGlzIGJ5cGFzc2VkIHNpbmNlIHRoZSBydWxlIGVuZ2luZQotCQkJCS8vIHdpbGwgbmF2aWdhdGUgaW50byB0aGUgcG90ZW50aWFsIHZhbHVlIHR5cGUncyBjbGFzcy4KLQkJCQkvLwotCQkJCUpEVFJlc29sdmVyIHJlc29sdmVyID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpOwotCQkJCVN0cmluZyByZXR1cm5UeXBlTmFtZSA9IHJlc29sdmVyLmdldFJldHVyblR5cGVOYW1lKGpkdE1ldGhvZCk7Ci0JCQkJaWYgKChyZXNvbHZlci5pc1ByaW1pdGl2ZVR5cGUocmV0dXJuVHlwZU5hbWUpIHx8IHJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKHJldHVyblR5cGVOYW1lKSkgJiYgIXJlc29sdmVyLmlzSkFYUlBDU3RhbmRhcmRUeXBlKHJldHVyblR5cGVOYW1lKSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDA1LG5ldyBTdHJpbmdbXSB7bWV0aG9kTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyxyZXR1cm5UeXBlTmFtZX0pOwotCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQl9Ci0JCQkJLy8KLQkJCQkvLyBDaGVjayB0aGUgbWV0aG9kIHBhcmFtZXRlciB0eXBlcyBmb3IgY29tcGxpYW5jZS4KLQkJCQkvLyBTYW1lIGNvbW1lbnQgYXMgYWJvdmUsIG9ubHkgYXBwbGllZCB0byB0aGUgbWV0aG9kJ3MgcGFyYW1ldGVycy4KLQkJCQkvLwotCQkJCVN0cmluZ1tdIHBhcmFtZXRlclR5cGVOYW1lcyA9IHJlc29sdmVyLmdldFBhcmFtZXRlclR5cGVOYW1lcyhqZHRNZXRob2QpOwotCQkJCWZvciAoaW50IHA9MDsgcDxwYXJhbWV0ZXJUeXBlTmFtZXMubGVuZ3RoOyBwKyspCi0JCQkJewotCQkJCQlpZiAoKHJlc29sdmVyLmlzUHJpbWl0aXZlVHlwZShwYXJhbWV0ZXJUeXBlTmFtZXNbcF0pIHx8IHJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKHBhcmFtZXRlclR5cGVOYW1lc1twXSkpICYmICFyZXNvbHZlci5pc0pBWFJQQ1N0YW5kYXJkVHlwZShwYXJhbWV0ZXJUeXBlTmFtZXNbcF0pKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwNSxuZXcgU3RyaW5nW10ge21ldGhvZE5hbWUsc2VydmljZUNsYXNzTmFtZV8scGFyYW1ldGVyVHlwZU5hbWVzW3BdfSk7Ci0JCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQkvLyBEbyBub3RoaW5nLgotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWVfOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDdhZmQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSkRUUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgcnVsZSB2ZXJpZmllcyB0aGF0IHRoZSBmaWVsZHMgYW5kIHByb3BlcnRpZXMgb2YgYQotICogdmFsdWUgdHlwZSBjbGFzcyB1c2VzIG9ubHkgSkFYLVJQQyBzdXBwb3J0ZWQgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwNiBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwNiAoKQotCXsKLQkJaWRfID0gNjsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI2luaXQob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCXN1cGVyLmluaXQoZW5naW5lKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBbiBlbXB0eSBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIHRoZSByb290Ci0JCS8vIGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4gUHV0IGFzaWRlCi0JCS8vIHRoZSBjbGFzcyBuYW1lIGluIGNhc2UgdmlzaXRNZXRob2QoKSBuZWVkcyBpdC4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAwKQotCQl7Ci0JCQlzZXJ2aWNlQ2xhc3NOYW1lXyA9IGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdE1ldGhvZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRGaWVsZCAoIElGaWVsZCBqZHRGaWVsZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQSBwZWFudXQgdHJhaWwgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvbmUgaW1wbGllcyB0aGlzIGlzIGEKLQkJLy8gZmllbGQgYmVsb25naW5nIHRvIGEgY2xhc3Mgb3RoZXIgdGhhbiB0aGUgcm9vdCAoYWthLiBKQVgtUlBDCi0JCS8vIHNlcnZpY2UpIGNsYXNzLCBuYW1lbHkgYSBwcmVzdW1lZCB2YWx1ZSB0eXBlIGNsYXNzLgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID4gMSkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBBbnkgSmF2YSBwcmltaXRpdmUgb3Igc3RhbmRhcmQgKCJqYXZhLiIgb3IgImphdmF4LiIpIHR5cGUKLQkJCQkvLyB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgSkFYLVJQQyB3aWxsIGdldCBmbGFnZ2VkLgotCQkJCS8vIEFueSBub24tcHJpbWl0aXZlIG9yIG5vbi1zdGFuZGFyZCB0eXBlIGlzIHByZXN1bWVkIHRvIGJlIGEKLQkJCQkvLyBwb3RlbnRpYWwgdmFsdWUgdHlwZSBhbmQgaXMgYnlwYXNzZWQgc2luY2UgdGhlIHJ1bGUgZW5naW5lCi0JCQkJLy8gd2lsbCBuYXZpZ2F0ZSBpbnRvIHRoZSBwb3RlbnRpYWwgdmFsdWUgdHlwZSdzIGNsYXNzLgotCQkJCS8vCi0JCQkJSkRUUmVzb2x2ZXIgcmVzb2x2ZXIgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCk7Ci0JCQkJU3RyaW5nIGZpZWxkVHlwZU5hbWUgPSByZXNvbHZlci5nZXRGaWVsZFR5cGVOYW1lKGpkdEZpZWxkKTsKLQkJCQlpZiAoKHJlc29sdmVyLmlzUHJpbWl0aXZlVHlwZShmaWVsZFR5cGVOYW1lKSB8fCByZXNvbHZlci5pc1N0YW5kYXJkVHlwZShmaWVsZFR5cGVOYW1lKSkgJiYgIXJlc29sdmVyLmlzSkFYUlBDU3RhbmRhcmRUeXBlKGZpZWxkVHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJLy8KLQkJCQkJLy8gVGhlIGZpZWxkIHByZXR0eSBtdWNoIE1VU1QgYmUgZGVjbGFyZWQgaW4gYSB0eXBlIG9yCi0JCQkJCS8vIHdlIHdvdWxkIG5vdCBoYXZlIGdvdHRlbiBoZXJlLiBTdGlsbCwgYmVzdCB0byBiZSBzYWZlLgotCQkJCQkvLwotCQkJCQlJVHlwZSB2YWx1ZVR5cGUgPSBqZHRGaWVsZC5nZXREZWNsYXJpbmdUeXBlKCk7Ci0JCQkJCWlmICh2YWx1ZVR5cGUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJU3RyaW5nIHZhbHVlVHlwZUNsYXNzTmFtZSA9IHZhbHVlVHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJCQkJCVN0cmluZyBmaWVsZE5hbWUgPSBqZHRGaWVsZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDYsbmV3IFN0cmluZ1tdIHtmaWVsZE5hbWUsdmFsdWVUeXBlQ2xhc3NOYW1lLHNlcnZpY2VDbGFzc05hbWVfLGZpZWxkVHlwZU5hbWV9KTsKLQkJCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vIERvIG5vdGhpbmcuCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdFByb3BlcnR5KG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0UHJvcGVydHkgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBwcm9wZXJ0eSwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQSBwZWFudXQgdHJhaWwgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvbmUgaW1wbGllcyB0aGlzIGlzIGEKLQkJLy8gcHJvcGVydHkgYmVsb25naW5nIHRvIGEgY2xhc3Mgb3RoZXIgdGhhbiB0aGUgcm9vdCAoYWthLiBKQVgtUlBDCi0JCS8vIHNlcnZpY2UpIGNsYXNzLCBuYW1lbHkgYSBwcmVzdW1lZCB2YWx1ZSB0eXBlIGNsYXNzLgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID4gMSkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBBbnkgSmF2YSBwcmltaXRpdmUgb3Igc3RhbmRhcmQgKCJqYXZhLiIgb3IgImphdmF4LiIpIHR5cGUKLQkJCQkvLyB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgSkFYLVJQQyB3aWxsIGdldCBmbGFnZ2VkLgotCQkJCS8vIEFueSBub24tcHJpbWl0aXZlIG9yIG5vbi1zdGFuZGFyZCB0eXBlIGlzIHByZXN1bWVkIHRvIGJlIGEKLQkJCQkvLyBwb3RlbnRpYWwgdmFsdWUgdHlwZSBhbmQgaXMgYnlwYXNzZWQgc2luY2UgdGhlIHJ1bGUgZW5naW5lCi0JCQkJLy8gd2lsbCBuYXZpZ2F0ZSBpbnRvIHRoZSBwb3RlbnRpYWwgdmFsdWUgdHlwZSdzIGNsYXNzLgotCQkJCS8vCi0JCQkJSkRUUmVzb2x2ZXIgcmVzb2x2ZXIgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCk7Ci0JCQkJU3RyaW5nIHByb3BlcnR5VHlwZU5hbWUgPSByZXNvbHZlci5nZXRQcm9wZXJ0eVR5cGVOYW1lKHByb3BlcnR5KTsKLQkJCQlpZiAoKHJlc29sdmVyLmlzUHJpbWl0aXZlVHlwZShwcm9wZXJ0eVR5cGVOYW1lKSB8fCByZXNvbHZlci5pc1N0YW5kYXJkVHlwZShwcm9wZXJ0eVR5cGVOYW1lKSkgJiYgIXJlc29sdmVyLmlzSkFYUlBDU3RhbmRhcmRUeXBlKHByb3BlcnR5VHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJLy8KLQkJCQkJLy8gVGhlIGZpZWxkIHByZXR0eSBtdWNoIE1VU1QgYmUgZGVjbGFyZWQgaW4gYSB0eXBlIG9yCi0JCQkJCS8vIHdlIHdvdWxkIG5vdCBoYXZlIGdvdHRlbiBoZXJlLiBTdGlsbCwgYmVzdCB0byBiZSBzYWZlLgotCQkJCQkvLwotCQkJCQlJVHlwZSB2YWx1ZVR5cGUgPSBwcm9wZXJ0eS5nZXREZWNsYXJpbmdUeXBlKCk7Ci0JCQkJCWlmICh2YWx1ZVR5cGUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJU3RyaW5nIHZhbHVlVHlwZUNsYXNzTmFtZSA9IHZhbHVlVHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJCQkJCVN0cmluZyBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5nZXROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwNixuZXcgU3RyaW5nW10ge3Byb3BlcnR5TmFtZSx2YWx1ZVR5cGVDbGFzc05hbWUsc2VydmljZUNsYXNzTmFtZV8scHJvcGVydHlUeXBlTmFtZX0pOwotCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lXzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZVNldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZVNldEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYxYzdhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGVTZXRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZVNldDsKLQotLyoqCi0gKiBBIGZhY3RvcnkgdGhhdCBwcm9kdWNlcyBhIEphdmFXZWJTZXJ2aWNlUnVsZVNldAotICogZm9yIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZVNldEZhY3RvcnkKLXsKLQlwcml2YXRlIEpBWFJQQ1J1bGVTZXRGYWN0b3J5ICgpCi0JewotCQkvLyBOb3QgcHVibGljbHkgY29uc3RydWN0YWJsZS4KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIHNldCBvZiBydWxlcyBmb3IgYW5hbHl6aW5nIEphdmEgY2xhc3NlcwotCSAqIGZvciBjb21wbGlhbmNlIHRvIHRoZSBydWxlcyBvZiBKQVgtUlBDIDEuMS4gIAotCSAqIEByZXR1cm4gQSBzZXQgb2YgSkFYLVJQQyAxLjEgYW5hbHlzaXMgcnVsZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBKYXZhV2ViU2VydmljZVJ1bGVTZXQgbmV3UnVsZVNldCAoKQotCXsKLQkJSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHNldCA9IG5ldyBKYXZhV2ViU2VydmljZVJ1bGVTZXQoKTsKLQkJc2V0LmFkZFJ1bGUobmV3IEpBWFJQQ1J1bGUwMDAxKCkpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDIoKSk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwMygpKTsKLQkJc2V0LmFkZFJ1bGUobmV3IEpBWFJQQ1J1bGUwMDA1KCkpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDYoKSk7Ci0JCXJldHVybiBzZXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMmMwNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTQgICAxNTQ1NDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgaXMgdHJhY2tpbmcgZXh0ZW5zaW9ucyB1c2luZyBsYWJlbCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBJRAotICogMjAwODA0MTYgICAyMjczNTkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFRlc3QgZmFjaWxpdGllcyBkbyBub3QgcmVzcGVjdCBkZWZhdWx0IG9yZGVyIGluIHBsdWdpbiBjdXN0b21pemF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgU2NlbmFyaW9Db250ZXh0Ci17Ci0gIHB1YmxpYyBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KCkKLSAgewotICAgIHN1cGVyKFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7IAotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBkZWZhdWx0cy5nZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSAhPSAwKSBzYi5hcHBlbmQoIiwiKTsKLSAgICAgIHNiLmFwcGVuZChpZHNbaV0pOwotICAgIH0KLSAgICBTdHJpbmcgbm9uSmF2YVRlc3RTZXJ2aWNlID0gZGVmYXVsdHMuZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlRGVmYXVsdCgpOwotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTk9OX0pBVkFfVEVTVF9TRVJWSUNFLCBub25KYXZhVGVzdFNlcnZpY2UpOwotICAgIAotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUsIGRlZmF1bHRzLndlYnNlcnZpY2VDbGllbnRUeXBlRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9UWVBFLCBkZWZhdWx0cy53ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0dFTkVSQVRFX1BST1hZLCBkZWZhdWx0cy5nZW5lcmF0ZVByb3h5RGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSLCBkZWZhdWx0cy5sYXVuY2hXZWJzZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFLCBkZWZhdWx0cy5pbnN0YWxsV2Vic2VydmljZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9JTlNUQUxMX0NMSUVOVCwgZGVmYXVsdHMuaW5zdGFsbENsaWVudERlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFLCBkZWZhdWx0cy5zdGFydFdlYnNlcnZpY2VEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfVEVTVF9XRUJTRVJWSUNFLCBkZWZhdWx0cy50ZXN0V2Vic2VydmljZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UsIGRlZmF1bHRzLmdldE1vbml0b3JXZWJTZXJ2aWNlRGVmYXVsdCgpKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSwgZGVmYXVsdHMubGF1bmNoU2FtcGxlKCkgKTsKLSAgICAKLSAgICBzZXREZWZhdWx0SW50SWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9HRU5FUkFURV9XRUJTRVJWSUNFLCBkZWZhdWx0cy5zZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKSk7IC8vanZoCi0gICAgc2V0RGVmYXVsdEludElmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5ULCBkZWZhdWx0cy5jbGllbnRHZW5lcmF0aW9uRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXROb25KYXZhVGVzdFNlcnZpY2UoKQotICB7Ci0gICAgV2ViU2VydmljZVRlc3RSZWdpc3RyeSByZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBnZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIFZlY3RvciBuZXdUZXN0Q2FzZXMgPSBuZXcgVmVjdG9yKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSByZWdpc3RyeQotICAgICAgICAgIC5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQoaWRzW2ldKTsKLSAgICAgIGlmICh3c2UgIT0gbnVsbCAmJiB3c2UudGVzdFdTREwoKSkgCi0JCSAgbmV3VGVzdENhc2VzLmFkZEVsZW1lbnQod3NlLmdldExhYmVsKCkpOwotICAgIH0KLQlTdHJpbmdbXSB3c2RsVGVzdEFycmF5ID0gbmV3IFN0cmluZ1tuZXdUZXN0Q2FzZXMuc2l6ZSgpXTsKLQlFbnVtZXJhdGlvbiBlID0gbmV3VGVzdENhc2VzLmVsZW1lbnRzKCk7Ci0JaW50IGkgPSAwOwotCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCSAgd3NkbFRlc3RBcnJheVtpXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotCSAgaSsrOwotCX0KLQkKLQlyZXR1cm4gd3NkbFRlc3RBcnJheTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVRlc3RJZHMoU3RyaW5nW10gaWRzKQotICB7Ci0JU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotCXsKLQkgIGlmIChpICE9IDApIHNiLmFwcGVuZCgiLCIpOwotCSAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0JfQotCXNldFZhbHVlKFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9URVNUX1RZUEVTLCBzYi50b1N0cmluZygpKTsgIAotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZyB2YWx1ZSkKLSAgewotCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0JU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7Ci0JICAvLyAxNTQ1NDM6IHdlIGhhdmUgdG8gY29udGludWUgdG8gaW50ZXJwcmV0IHRoZSBvbGQgbGFiZWwgc3R5bGUgcHJlZmVyZW5jZXMKLQkgIHNbaV0gPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubGFiZWxUb0lkKHN0Lm5leHRUb2tlbigpKTsKLQl9Ci0JcmV0dXJuIHM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RJZHMoKQotICB7Ci0JcmV0dXJuIGdldFdlYlNlcnZpY2VUZXN0SWRzKGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RFU1RfVFlQRVMpKTsgCi0gIH0gIAotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRXZWJTZXJ2aWNlVGVzdElkcygpCi0gIHsKLQlyZXR1cm4gZ2V0V2ViU2VydmljZVRlc3RJZHMoZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUykpOyAKLSAgfQkKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0VHlwZXMoU3RyaW5nW10gaWRzKQotICB7Ci0JLy8gMTU0NTQzOiBkZXByZWNhdGVkLCBub29wCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpCi0gIHsKLQlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCVN0cmluZ1tdIGlkcyA9IGdldFdlYlNlcnZpY2VUZXN0SWRzKCk7ICAKLSAgICBWZWN0b3IgbGFiZWxzID0gbmV3IFZlY3RvcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgcmVnaXN0cnkKLSAgICAgICAgICAuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKGlkc1tpXSk7Ci0gICAgICBpZiAod3NlICE9IG51bGwpIAotCQkgIGxhYmVscy5hZGRFbGVtZW50KHdzZS5nZXRMYWJlbCgpKTsKLSAgICB9CSAgCSAgCi0gICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbbGFiZWxzLnNpemUoKV07Ci0gICAgbGFiZWxzLmNvcHlJbnRvKHMpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgcHVibGljIFNjZW5hcmlvQ29udGV4dCBjb3B5KCkKLSAgewotICAgIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RJZHMoZ2V0V2ViU2VydmljZVRlc3RJZHMoKSk7Ci0gICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKGdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKSk7Ci0gICAgY29udGV4dC5zZXROb25KYXZhVGVzdFNlcnZpY2UoZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCkpOwotICAgIAotICAgIGNvbnRleHQuc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkgKTsKLSAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBnZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0gICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpICk7Ci0gICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGdldFN0YXJ0V2ViU2VydmljZSgpICk7Ci0gICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCBnZXRHZW5lcmF0ZVByb3h5KCkgKTsKLSAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBnZXRUZXN0V2ViU2VydmljZSgpICk7Ci0gICAgY29udGV4dC5zZXRNb25pdG9yV2ViU2VydmljZShnZXRNb25pdG9yV2ViU2VydmljZSgpKTsKLSAgICBjb250ZXh0LnNldExhdW5jaFNhbXBsZUVuYWJsZWQoIGlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldEdlbmVyYXRlUHJveHkoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHlEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0dFTkVSQVRFX1BST1hZKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUik7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9JTlNUQUxMX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFRlc3RXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFdlYlNlcnZpY2VUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUiwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5ULCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0U3RhcnRXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1NUQVJUX1dFQlNFUlZJQ0UsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRUZXN0V2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSwgdmFsdWUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfTU9OSVRPUl9XRUJTRVJWSUNFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TW9uaXRvcldlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2lzTGF1bmNoU2FtcGxlRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSwgdmFsdWUpOwotICB9Ci0gIAotICAvL2p2aAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpCi0gIHsKLQkgIHJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBnZXREZWZhdWx0SW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlV2ViU2VydmljZShpbnQgdmFsdWUpCi0gIHsKLQkgIHNldFZhbHVlKFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBnZXREZWZhdWx0SW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZUNsaWVudCgpCi0gIHsKLQkgIHJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKQotICB7Ci0JICBzZXRWYWx1ZShQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCwgdmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyYjFlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgaW1wbGVtZW50cyBVRERJUHJlZmVyZW5jZUNvbnRleHQKLXsKLSAgcHVibGljIFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQoKQotICB7Ci0gICAgc3VwZXIoV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUiwgVURESVByZWZlcmVuY2VEZWZhdWx0cy5nZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpKTsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSLCBVRERJUHJlZmVyZW5jZURlZmF1bHRzLmdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcikKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9DT0xVTU5fREVMSU1JVEVSLCBkZWxpbWl0ZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcihTdHJpbmcgZGVsaW1pdGVyKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX1NUUklOR19ERUxJTUlURVIsIGRlbGltaXRlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTdkNjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBTY2VuYXJpb0NvbnRleHQgCi17Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RFU1RfVFlQRVMgPSAid2ViU2VydmljZVRlc3RUeXBlcyI7Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9OT05fSkFWQV9URVNUX1NFUlZJQ0U9ICJub25KYXZhVGVzdFNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSA9ICJ3ZWJTZXJ2aWNlVHlwZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU1RBUlRfV0VCU0VSVklDRSA9ICJzdGFydFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0lOU1RBTExfV0VCU0VSVklDRSA9ICJpbnN0YWxsV2ViU2VydmljZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQgPSAiaW5zdGFsbENsaWVudCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTEFVTkNIX1dFQlNFUlZJQ0VfRVhQTE9SRVIgPSAibGF1bmNoV2ViU2VydmljZUV4cGxvcmVyIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSA9ICJnZW5lcmF0ZVByb3h5IjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFID0gImNsaWVudFdlYlNlcnZpY2VUeXBlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UgPSAidGVzdFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSA9ICJtb25pdG9yV2ViU2VydmljZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSA9ICJsYXVuY2hTYW1wbGUiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0dFTkVSQVRFX1dFQlNFUlZJQ0UgPSAiZ2VuZXJhdGVXZWJTZXJ2aWNlIjsgLy9qdmgKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCA9ICJnZW5lcmF0ZUNsaWVudCI7IC8vanZoICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTX1RFU1Q9MDsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfU1RBUlQ9MTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfSU5TVEFMTD0yOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19ERVBMT1k9MzsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19BU1NFTUJMRT00OwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19ERVZFTE9QPTU7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfTk9ORT02OwotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIGlkcyk7Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpOwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIHRlc3RUeXBlcyk7Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCk7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgc2V0V2ViU2VydmljZVR5cGUoIFN0cmluZyB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEluc3RhbGxXZWJTZXJ2aWNlKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnREZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEluc3RhbGxDbGllbnQoIGJvb2xlYW4gdmFsdWUgKTsKLSAgICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0U3RhcnRXZWJTZXJ2aWNlKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0R2VuZXJhdGVQcm94eSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgIHNldENsaWVudFdlYlNlcnZpY2VUeXBlKCBTdHJpbmcgdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRUZXN0V2ViU2VydmljZSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpOwotICAKLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpOwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVdlYlNlcnZpY2UoaW50IHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnREZWZhdWx0KCk7Ci0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnQoKTsKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgY29weSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0RlZmF1bHRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNGUxNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotCi0KLQotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVmYXVsdHMKLXsgIAotICAKLQkKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCkKLSAgewotICAJLy93ZSB3aWxsIHNldCB0aGUgaG9tZSBncm93biBzYW1wbGUgYXMgdGhlIGZpcnN0IGNob2ljZQotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB0ZXN0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAkKLSAgCUxhYmVsc0FuZElkcyBsYWJlbHNhbmRpZHMgPSB0ZXN0UmVnaXN0cnkuZ2V0TGFiZWxzQW5kSURzKCk7Ci0gIAlTdHJpbmdbXSBpZHMgPSBsYWJlbHNhbmRpZHMuZ2V0SWRzXygpOwotICAJCi0gIAlTdHJpbmdbXSBuZXdJZHMgPSBuZXcgU3RyaW5nW2lkcy5sZW5ndGhdOwotICAJaW50IGluZGV4ID0gLTE7Ci0gIAlmb3IoaW50IGkgPSAwO2k8aWRzLmxlbmd0aDtpKyspewotICAJICBpZihpZHNbaV0uZXF1YWxzKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VTYW1wbGVUZXN0IikpICAJCi0gIAkgICAgaW5kZXggPSBpOyAgIAotICAJfQotICAJaWYoaW5kZXggIT0gLTEpewotICAJICBuZXdJZHNbMF0gPSBpZHNbaW5kZXhdOwotICAJICBpbnQgaiA9IDE7Ci0gIAkgIGZvcihpbnQgaSA9IDA7aTxpZHMubGVuZ3RoO2krKyl7Ci0gIAkgICAgaWYoaSAhPSBpbmRleCl7Ci0gIAkgIAkgIG5ld0lkc1tqXSA9IGlkc1tpXTsgCi0gIAkgICAgICBqKys7Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gIAllbHNlIHJldHVybiBpZHM7Ci0gIAkKLSAgCXJldHVybiBuZXdJZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gIldlYiBTZXJ2aWNlcyBFeHBsb3JlciI7CQotICB9IAotICAKLSAgcHVibGljIFN0cmluZyB3ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gIjAvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIjsKLSAgfQotICAKLSAgcHVibGljIGludCBzZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgY2xpZW50R2VuZXJhdGlvbkRlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gU2NlbmFyaW9Db250ZXh0LldTX05PTkU7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc3RhcnRXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaW5zdGFsbFdlYnNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpbnN0YWxsQ2xpZW50RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gbGF1bmNoV2Vic2VydmljZUV4cGxvcmVyRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdlbmVyYXRlUHJveHlEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyB3ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHRlc3RXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hTYW1wbGUoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9UcmFuc2llbnRTY2VuYXJpb0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9UcmFuc2llbnRTY2VuYXJpb0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVjZTk4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBpbXBsZW1lbnRzIFNjZW5hcmlvQ29udGV4dAotewotICBwcml2YXRlIFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0SWRzOwotICBwcml2YXRlIFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0VHlwZXM7Ci0gIHByaXZhdGUgU3RyaW5nW10gbm9uSmF2YVRlc3RTZXJ2aWNlOwotICBwcml2YXRlIFN0cmluZyAgIHdlYlNlcnZpY2VUeXBlXzsKLSAgcHJpdmF0ZSBib29sZWFuICBpbnN0YWxsV2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgaW5zdGFsbENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgc3RhcnRXZWJTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfOwotICBwcml2YXRlIGJvb2xlYW4gIGdlbmVyYXRlUHJveHlfOwotICBwcml2YXRlIFN0cmluZyAgIGNsaWVudFdlYlNlcnZpY2VUeXBlXzsKLSAgcHJpdmF0ZSBib29sZWFuICB0ZXN0V2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgbW9uaXRvcldlYlNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiAgbGF1bmNoU2FtcGxlXzsKLSAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVXZWJTZXJ2aWNlXzsgLy9qdmgKLSAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVDbGllbnRfOyAvL2p2aAotICAKLSAgcHJpdmF0ZSBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAKLSAgcHVibGljIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCAoKSB7fQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXROb25KYXZhVGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5vbkphdmFUZXN0U2VydmljZTsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXROb25KYXZhVGVzdFNlcnZpY2UoU3RyaW5nW10gbm9uSmF2YVRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5ub25KYXZhVGVzdFNlcnZpY2UgPSBub25KYXZhVGVzdFNlcnZpY2U7CQotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0SWRzKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlVGVzdElkcyA9IHdlYlNlcnZpY2VUZXN0SWRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RJZHMoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VUZXN0SWRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0VHlwZXMpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VUZXN0VHlwZXMgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZVRlc3RUeXBlczsJCi0gIH0KLSAKLSAgcHVibGljIFNjZW5hcmlvQ29udGV4dCBjb3B5KCkgewotICAJVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0KCk7Ci0gIAljb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0SWRzKGdldFdlYlNlcnZpY2VUZXN0SWRzKCkpOwotCWNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RUeXBlcyhnZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCkpOwotCWNvbnRleHQuc2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKGdldE5vbkphdmFUZXN0U2VydmljZSgpKTsKLQkKLQljb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBnZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0JY29udGV4dC5zZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSggZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKSApOwotCWNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggZ2V0R2VuZXJhdGVQcm94eSgpICk7Ci0JY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpICk7Ci0JY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggZ2V0SW5zdGFsbENsaWVudCgpICk7Ci0JY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGdldFN0YXJ0V2ViU2VydmljZSgpICk7Ci0JY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZ2V0VGVzdFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2UoZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0JY29udGV4dC5zZXRMYXVuY2hTYW1wbGVFbmFibGVkKCBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKSApOwotCWNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGdldEdlbmVyYXRlV2ViU2VydmljZSgpKTsgIC8vanZoCi0JcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiBjbGllbnRXZWJTZXJ2aWNlVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViU2VydmljZVR5cGVEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy53ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRHZW5lcmF0ZVByb3h5KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5RGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMuZ2VuZXJhdGVQcm94eURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5sYXVuY2hXZWJzZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5pbnN0YWxsV2Vic2VydmljZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKXsgcmV0dXJuIGRlZmF1bHRzLmluc3RhbGxDbGllbnREZWZhdWx0KCk7IH0KLSAgCi0gIAotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRTdGFydFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzdGFydFdlYlNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5zdGFydFdlYnNlcnZpY2VEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0VGVzdFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy50ZXN0V2Vic2VydmljZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy53ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpOyB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldENsaWVudFdlYlNlcnZpY2VUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRXZWJTZXJ2aWNlVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBjbGllbnRXZWJTZXJ2aWNlVHlwZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBnZW5lcmF0ZVByb3h5XyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBpbnN0YWxsV2ViU2VydmljZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgaW5zdGFsbENsaWVudF8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0V2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc3RhcnRXZWJTZXJ2aWNlXyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldFRlc3RXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0V2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdGVzdFdlYlNlcnZpY2VfID0gdmFsdWU7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRXZWJTZXJ2aWNlVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVR5cGUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgd2ViU2VydmljZVR5cGVfID0gdmFsdWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldE1vbml0b3JXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBtb25pdG9yV2ViU2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0cy5nZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TW9uaXRvcldlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBtb25pdG9yV2ViU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0cy5sYXVuY2hTYW1wbGUoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hTYW1wbGVfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIGxhdW5jaFNhbXBsZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGludCB2YWx1ZSkKLSAgewotCSAgZ2VuZXJhdGVXZWJTZXJ2aWNlXyA9IHZhbHVlOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBkZWZhdWx0cy5zZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKTsgIAotICB9ICAKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlKCkKLSAgewotCSAgcmV0dXJuIGdlbmVyYXRlV2ViU2VydmljZV87IAotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBkZWZhdWx0cy5jbGllbnRHZW5lcmF0aW9uRGVmYXVsdCgpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGdlbmVyYXRlQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKQotICB7Ci0JICBnZW5lcmF0ZUNsaWVudF8gPSB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjRhZGRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9VRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVURESVByZWZlcmVuY2VDb250ZXh0IAotewotICAvKgotICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgY29sdW1uIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkKLSAgICogQ2F0ZWdvcnkgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9DT0xVTU5fREVMSU1JVEVSID0gInVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyIjsKLSAgCi0gIC8qCi0gICAqIFRoaXMgY29uc3RhbnQgU3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBzdHJpbmcgZGVsaW1pdGVyIGZvciB1c2VyLWRlZmluZWQgVURESQotICAgKiBDYXRlZ29yeSBkYXRhLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX1NUUklOR19ERUxJTUlURVIgPSAidWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIiOwotICAKLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcik7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKTsKLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcik7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllYmE5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFVERElQcmVmZXJlbmNlRGVmYXVsdHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuICIjIjsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuICJcIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkMGY2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIExhYmVsc0FuZElkcwotewotICBwcml2YXRlIFN0cmluZ1tdIGxhYmVsc187Ci0gIHByaXZhdGUgU3RyaW5nW10gaWRzXzsKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlkc18uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0SWRzXygpCi0gIHsKLSAgICByZXR1cm4gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGlkc18gVGhlIGlkc18gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWRzXyhTdHJpbmdbXSBpZHNfKQotICB7Ci0gICAgdGhpcy5pZHNfID0gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBsYWJlbHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldExhYmVsc18oKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBsYWJlbHNfIFRoZSBsYWJlbHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhYmVsc18oU3RyaW5nW10gbGFiZWxzXykKLSAgewotICAgIHRoaXMubGFiZWxzXyA9IGxhYmVsc187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9UeXBlUnVudGltZVNlcnZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL1R5cGVSdW50aW1lU2VydmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YjQ0NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL1R5cGVSdW50aW1lU2VydmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIFR5cGVSdW50aW1lU2VydmVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHR5cGVJZF8gICAgID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHJ1bnRpbWVJZF8gID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlcklkXyAgID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOwotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcnVudGltZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBydW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcnVudGltZUlkXyBUaGUgcnVudGltZUlkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lSWQoU3RyaW5nIHJ1bnRpbWVJZF8pCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVJZF8gPSBydW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlcklkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlcklkXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlcklkXyBUaGUgc2VydmVySWRfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlcklkKFN0cmluZyBzZXJ2ZXJJZF8pCi0gIHsKLSAgICB0aGlzLnNlcnZlcklkXyA9IHNlcnZlcklkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVySW5zdGFuY2VJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZUlkXyBUaGUgc2VydmVySW5zdGFuY2VJZF8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZF8pCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWRfID0gc2VydmVySW5zdGFuY2VJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdHlwZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZUlkKCkKLSAgewotICAgIHJldHVybiB0eXBlSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gdHlwZUlkXyBUaGUgdHlwZUlkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlSWQoU3RyaW5nIHR5cGVJZF8pCi0gIHsKLSAgICB0aGlzLnR5cGVJZF8gPSB0eXBlSWRfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiAidHlwZSgiICsgdHlwZUlkXyArICIpIHJ1bnRpbWUoIiArIHJ1bnRpbWVJZF8gKyAiKSBmYWN0b3J5KCIgKyBzZXJ2ZXJJZF8gKyAiKSBzZXJ2SW5zdElkKCIgKyBzZXJ2ZXJJbnN0YW5jZUlkXyArICIpIjsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmplY3QpCi0gIHsKLQlpZiAob2JqZWN0ICE9IG51bGwgJiYgb2JqZWN0IGluc3RhbmNlb2YgVHlwZVJ1bnRpbWVTZXJ2ZXIpCi0JewotCQlUeXBlUnVudGltZVNlcnZlciB0cnMgPSAoVHlwZVJ1bnRpbWVTZXJ2ZXIpb2JqZWN0OwotCQlTdHJpbmcgdHJzVHlwZUlkID0gdHJzLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgdHJzUnVudGltZUlkID0gdHJzLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgdHJzU2VydmVySWQgPSB0cnMuZ2V0U2VydmVySWQoKTsKLQkJU3RyaW5nIHRyc1NlcnZlckluc3RhbmNlSWQgPSB0cnMuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQkKLQkJYm9vbGVhbiB0eXBlSWRzTWF0Y2ggPSAoKHR5cGVJZF8gPT0gbnVsbCkgJiYgKHRyc1R5cGVJZCA9PSBudWxsKSkgfHwgKCh0eXBlSWRfICE9IG51bGwpICYmICh0eXBlSWRfLmVxdWFscyh0cnNUeXBlSWQpKSk7Ci0JCWlmICghdHlwZUlkc01hdGNoKSByZXR1cm4gZmFsc2U7Ci0JCWJvb2xlYW4gcnVudGltZUlkc01hdGNoID0gKChydW50aW1lSWRfID09IG51bGwpICYmICh0cnNSdW50aW1lSWQgPT0gbnVsbCkpIHx8ICgocnVudGltZUlkXyAhPSBudWxsKSAmJiAocnVudGltZUlkXy5lcXVhbHModHJzUnVudGltZUlkKSkpOwotCQlpZiAoIXJ1bnRpbWVJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHNlcnZlcklkc01hdGNoID0gKChzZXJ2ZXJJZF8gPT0gbnVsbCkgJiYgKHRyc1NlcnZlcklkID09IG51bGwpKSB8fCAoKHNlcnZlcklkXyAhPSBudWxsKSAmJiAoc2VydmVySWRfLmVxdWFscyh0cnNTZXJ2ZXJJZCkpKTsKLQkJaWYgKCFzZXJ2ZXJJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHNlcnZlckluc3RhbmNlSWRzTWF0Y2ggPSAoKHNlcnZlckluc3RhbmNlSWRfID09IG51bGwpICYmICh0cnNTZXJ2ZXJJbnN0YW5jZUlkID09IG51bGwpKSB8fCAoKHNlcnZlckluc3RhbmNlSWRfICE9IG51bGwpICYmIChzZXJ2ZXJJbnN0YW5jZUlkXy5lcXVhbHModHJzU2VydmVySW5zdGFuY2VJZCkpKTsKLQkJaWYgKCFzZXJ2ZXJJbnN0YW5jZUlkc01hdGNoKSByZXR1cm4gZmFsc2U7Ci0JCQotCQlyZXR1cm4gdHJ1ZTsJCQotCX0KLQkKLQlyZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGlhbG9nL0lTdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGlhbG9nL0lTdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMTM0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RpYWxvZy9JU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGlhbG9nOwotCi0vKioKLSogQ29uc3RhbnRzIGZvciBzdGF0dXMgZGlhbG9ncwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVN0YXR1c0RpYWxvZ0NvbnN0YW50cyB7Ci0KLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVTX0lEID0gMjsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIHRvIGFsbCIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFU19UT19BTExfSUQgPSA0OwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJDYW5jZWwiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5DRUxfSUQgPSAxOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJPSyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0lEID0gMDsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiRGV0YWlscyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVEFJTFNfSUQgPSAxMzsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YzY5MTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSogQWxsIEV4dGVuc2lvbnMgd2l0aCBleGVjdHV0YWJsZSBleHRlbnNpb25zIHNob3VsZCBpbXBsZW1lbnQgdGhpcyAKLSogdG8gZml0IG91ciBmcmFtZXdvcmsKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeGVjdXRhYmxlCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAvKioKLSAgKlJldHVybnMgYSB3aXphcmQgZnJhZ21lbnQgZm9yIHRoaXMgZXhlbnRpb24gdHlwZSAKLSAgKgotICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0RmluaXNoQ29tbWFuZCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2YTlhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHBhcmFtIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLSAKLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDcyMGQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvbkltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0KLQlwcml2YXRlIElMb2cJbG9nXzsKLQkKLSAgLyoKLSAgKiBUaGUgQ29uZmlnRWxlbWVudCB0aGF0IGhvbGRzIGV4dGVuc2lvbiBpbmZvCi0gICovCi0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudF87Ci0KLSAgLyoKLSAgKiBUaGUgZXh0ZW5zaW9uIGV4ZWN1dGFibGUgCi0gICovCi0gIHByb3RlY3RlZCBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0gIAotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgICBsb2dfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpCi0gIHsKLSAgICBpZih3ZWJTZXJ2aWNlRXhlY3V0YWJsZV8gIT0gbnVsbCkgcmV0dXJuIHdlYlNlcnZpY2VFeGVjdXRhYmxlXzsKLQotICAgIHRyeXsKLSAgICAgIHJldHVybiBjb25maWdFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgIH1jYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKXsKLSAgICAgIGxvZ18ubG9nKElMb2cuRVJST1IsIDUwMjksIHRoaXMsICJnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbiIsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgfQkKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnRWxlbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gYmVpbmcgdXNlZAotICAqIEByZXR1cm4gU3RyaW5nIG5hbWUgb2YgdGhpcyBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibmFtZSIgKTsKLSAgfQotCi0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMxZDA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLQotLyoqCi0qIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBleHRlbnNpb25zIGZvciBhIGdpdmVuIGV4dGVuc2lvbi1wb2ludCAKLSogYWxzbyByZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0cyAKLSoKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeQotewotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCk7Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0IG9mIHRoZSBnaXZlbiBuYW1lCi0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0Ci0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKCBTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpOwotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YmVhMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5MYWJlbHNBbmRJZHM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBnZW5lcmljIHJlZ2lzdHJ5IHdoaWNoIHNldHMgdXAgZ2VuZXJhbCBjb2RlIGluIGhhbmRsaW5nICAgCi0qIElDb25maWdFbGVtZW50cyBmb3IgYW4gZXh0ZW5zaW9uCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIAotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIG5hbWVFeHRlbnNpb25UYWJsZV87Ci0gIHByb3RlY3RlZCBWZWN0b3IgaWRfOwotICBwcm90ZWN0ZWQgVmVjdG9yIGxhYmVsXzsKLSAgcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzYW5kaWRzXzsKLSAgICAKLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwoKQotICB7Ci0gICAgbmFtZUV4dGVuc2lvblRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBsYWJlbF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWRfID0gbmV3IFZlY3RvcigpOwotICAgIGxvYWRFeHRlbnNpb25zKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENoaWxkcmVuIHJlZ2lzdHJpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCBleHRlbnNpb24gdHlwZXMgCi0gICogQHJldHVybiBXZWJzZXJ2aWNlRXh0ZW5zaW9uIGhvbGRzIGEgY29uZmlnIGVsZW0KLSAgKiBmb3IgdGhhdCBleHRlbnNpb24gY2FwYWJsZSBvZiBjcmVhdGluZyBhbiBleGVjdXRhYmxlIGZpbGUKLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFdlYlNlcnZpY2VFeHRlbnNpb24gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCk7Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gbXVzdCBpbXBsZW1lbnQgaG93IHRoZXkgZ2V0IHRoZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHBhcnRpY3VsYXIgdG8gdGhhdAotICAqIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgYWJzdHJhY3QgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQotICAvKgotICAqIExvYWRzIFdlYlNlcnZpY2VFeHRlbnNpb25zIGZvciBXZWJTZXJ2aWNlQ2xpZW50VGVzdCBpbnRvIHRoaXMgcmVnaXN0cnkuCi0gICogVGhpcyBpcyBkb25lIGJ5IHF1ZXJ5aW5nIHRoZSBwbHVnaW4gcmVnaXN0cnkgZm9yIGFsbCBleHRlbnNpb25zCi0gICogdGhhdCBleHRlbmQgd2ViU2VydmljZUNsaWVudFRlc3QgIAotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBsb2FkRXh0ZW5zaW9ucyAoKQotICB7ICAgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICBTdHJpbmcgbGFiZWwgPSBlbGVtLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICAgICAgU3RyaW5nIGlkID0gICBlbGVtLmdldEF0dHJpYnV0ZSggImlkIiApOyAgICAgIAotICAgICAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgICBuYW1lRXh0ZW5zaW9uVGFibGVfLnB1dChsYWJlbCx3ZWJTZXJ2aWNlRXh0ZW5zaW9uKTsKLSAgICAgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgICAgaWRfLmFkZChpZCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pbmFtZUV4dGVuc2lvblRhYmxlXy5rZXlTZXQoKS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBuYW1lcyBhbmQgSWRzIAotICAgKi8KLSAgcHVibGljIExhYmVsc0FuZElkcyBnZXRMYWJlbHNBbmRJRHMoKQotICB7Ci0gIAlsYWJlbHNhbmRpZHNfID0gbmV3IExhYmVsc0FuZElkcygpOwotICAJbGFiZWxzYW5kaWRzXy5zZXRMYWJlbHNfKChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0SWRzXygoU3RyaW5nW10paWRfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlyZXR1cm4gbGFiZWxzYW5kaWRzXzsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqIEByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKW5hbWVFeHRlbnNpb25UYWJsZV8uZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpCi0gIHsKLSAgICByZXR1cm4gKFdlYlNlcnZpY2VFeHRlbnNpb25bXSluYW1lRXh0ZW5zaW9uVGFibGVfLnZhbHVlcygpLnRvQXJyYXkoIG5ldyBXZWJTZXJ2aWNlRXh0ZW5zaW9uWzBdICk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L0phdmFQcm94eVRlc3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L0phdmFQcm94eVRlc3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYjM2N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9KYXZhUHJveHlUZXN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSmF2YVByb3h5VGVzdENvbW1hbmQgZXh0ZW5kcyBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQKLXsKLQotIC8qKgotICAqIFRoaXMgaG9sZHMgYW4gaW5mbyBjbGFzcyB0aGF0IGNvbWVzIGZyb20gdXNlciBpbnB1dCBvciBzb21lIGNhbGNpbGF0aW9ucyB0aGF0IG5lZWRzIHRvIGJlCi0gICogdXNlZCBmb3IgdGhlIGZpbmlzaAotICAqLwotICAKLSAgcHVibGljIHZvaWQgc2V0SnNwRm9sZGVyKFN0cmluZyBqc3BGb2xkZXIpOwotICAKLSAgcHVibGljIHZvaWQgc2V0UnVuQ2xpZW50VGVzdChib29sZWFuIHJ1bkNsaWVudFRlc3QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgc2FtcGxlUHJvamVjdCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbik7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXRFbmRwb2ludE1ldGhvZChTdHJpbmcgc2V0RW5kcG9pbnRNZXRob2QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNZXRob2RzKEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzKTsKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XU0RMVGVzdEZpbmlzaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV1NETFRlc3RGaW5pc2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMTcyNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XU0RMVGVzdEZpbmlzaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotcHVibGljIGludGVyZmFjZSBXU0RMVGVzdEZpbmlzaENvbW1hbmQgZXh0ZW5kcyBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQKLXsKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpOwotICBwdWJsaWMgdm9pZCBzZXRXc2RsU2VydmljZVVSTChTdHJpbmcgd3NkbFVSSSk7Ci0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsKTsgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1N2VmNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxNiAgIDEwNDg3MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbkltcGw7Ci0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSogSW4gcGFydGljdWxhciBpdCBob2xkcyBhIGNsaWVudCB0ZXN0IGV4dGVuc2lvbiBlbGVtZW50IAotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiBleHRlbmRzIFdlYlNlcnZpY2VFeHRlbnNpb25JbXBsCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgTGlzdCBzdXBwb3J0ZWRSdW50aW1lc18gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZVRlc3RFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICBzdXBlcihjb25maWdFbGVtZW50KTsKLSAgICAgICAKLSAgICBTdHJpbmcgcnVudGltZXNMaXN0ID0gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSgic3VwcG9ydGVkQ2xpZW50UnVudGltZXMiKTsgIAotICAgCi0gICAgYWRkUnVudGltZXMocnVudGltZXNMaXN0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZHMgYSBsaXN0IG9mIHNwYWNlIGRlbGltaXRlZCBydW50aW1lIElEcy4KLSAgICogCi0gICAqIEBwYXJhbSBydW50aW1lc0xpc3QgVGhlIGxpc3Qgb2YgcnVudGltZSBJRHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSdW50aW1lcyhTdHJpbmcgcnVudGltZXNMaXN0KSB7Ci0JICAKLQkgIGlmIChydW50aW1lc0xpc3QgPT0gbnVsbCkKLQkJICByZXR1cm47Ci0JICAKLQkgIFN0cmluZ1tdIHJ1bnRpbWVzID0gcnVudGltZXNMaXN0LnNwbGl0KCJcXHMrIik7Ci0JICAgIAotCSAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5sZW5ndGg7IGkrKykgewkgICAgCQotCQkgIGlmIChydW50aW1lc1tpXS5sZW5ndGgoKSA+IDApCi0JCQkgIHN1cHBvcnRlZFJ1bnRpbWVzXy5hZGQocnVudGltZXNbaV0pOyAgIAotCSAgfQotICB9Ci0gIAotICAvKioKLSAgKiBXaWxsIHRoaXMgdGVzdENsaWVudCBnZW5lcmF0ZSBjb2RlCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29kZWdlbiBuZWVkZWQKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNDb2RlR2VuTmVlZGVkKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImNvZGVHZW5lcmF0ZWQiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0gIAotICAvKioKLSAgKiBVc2UgdGhlIGRlZmF1bHQgRm9sZGVyIFByb3ZpZGVkIGJ5IHVzCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgbm8gc3BlY2lhbCBmb2xkZXIgcmVxdWlyZXMKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gdXNlRGVmYXVsdENvZGVHZW5Gb2xkZXIoKQotICB7Ci0gICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAiZGVmYXVsdGNvZGVnZW5mb2xkZXIiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogVXNlIFNwZWNpYWwgRm9sZGVyIGZvciBnZW5lcmF0ZWQgY29kZQotICAqIEByZXR1cm4gU3RyaW5nIHNwZWNpYWwgZm9sZGVyIG5hbWUKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb2RlR2VuRm9sZGVyKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAiY29kZWdlbmZvbGRlciIgKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRGVmYXVsdEpBWFJQQygpCi0gIHsKLQkgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImlzZGVmYXVsdGpheHJwYyIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLSAgIAotICAvKioKLSAgKiBEbyB3ZSBuZWVkIHRvIGxhdW5jaCBzb21ldGhpbmcKLSAgKiBAcmV0dXJuIEJvb2xlYW4gaWYgdHJ1ZSBsYXVuY2ggY29kZWdlbgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImxhdW5jaFJlcXVpcmVkIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAqIERvIHdlIG5lZWQgdGhlIG1ldGhvZHMgZm9yIHRoZSBwcm94eQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHByb3h5IG1ldGhvZHMgbmVlZGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFyZU1ldGhvZHNOZWVkZWQoKQotICB7Ci0gICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibWV0aG9kc25lZWRlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBEb2VzIHRoaXMgdGVzdCBtYWNoaW5lIG5lZWQgYSBzZXJ2ZXIKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBhIHNlcnZlciBpcyByZXF1aXJlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZlck5lZWRlZCgpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJzZXJ2ZXJSZXF1aXJlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBVc2UgdGhlIERlZmF1bHQgU2VydmVyIGNob3NlbiBieSB0aGUgd2l6YXJkCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGRlZmF1bHQgc2VydmVyIGlzIHdhbnRlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiB1c2VEZWZhdWx0U2VydmVyKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImRlZmF1bHRzZXJ2ZXIiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogVXNlIHRoZSBEZWZhdWx0IFNlcnZlciBjaG9zZW4gYnkgdGhlIHdpemFyZAotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBkZWZhdWx0IHNlcnZlciBpcyB3YW50ZWQKLSAgKi8KLSAgcHVibGljIFN0cmluZyB1c2VTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJ1c2VzZXJ2ZXIiICk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB0ZXN0V1NETCgpCi0gIHsKLSAgCVN0cmluZyB3c2RsID0gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggInRlc3RXU0RMIiApOwotICAgIGlmKHdzZGwuZXF1YWxzKCJ5ZXMiKSB8fCB3c2RsLmVxdWFscygidHJ1ZSIpKQotCSAgcmV0dXJuIHRydWU7Ci0JIAotCXJldHVybiBmYWxzZTsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB0ZXN0SmF2YVByb3h5KCkKLSAgewotICAJU3RyaW5nIGphdmFQcm94eSA9IGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJ0ZXN0SmF2YVByb3h5IiApOwotICAgIGlmKGphdmFQcm94eSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gIAlpZihqYXZhUHJveHkuZXF1YWxzKCJ5ZXMiKSB8fCBqYXZhUHJveHkuZXF1YWxzKCJ0cnVlIikpCi0JICByZXR1cm4gdHJ1ZTsKLQkgCi0JcmV0dXJuIGZhbHNlOyAgCi0gIH0KLSAgCQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoaXMgV2ViU2VydmljZVRlc3RFeHRlbnNpb24KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCXJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAiaWQiICk7IAotICB9Ci0gICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIGF0dHJpYnV0ZSBvZiB0aGlzIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgbGFiZWwgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKLSAgICByZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICB9Ci0gIAotICAvKioKLSAgICogRG9lcyB0aGlzIGV4dGVuc2lvbiBhbGxvdyBleHRlbmRlcnMgdG8gcmVzdHJpY3QgdGhlIHJ1bnRpbWVzIHRoYXQgYXJlIHN1cHBvcnRlZD8KLSAgICogIAotICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgYWxsb3dSdW5pbWVzUmVzdHJpY3Rpb24gYXR0cmlidXRlLCBmYWxzZSBpZiBub3QgcHJlc2VudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGFsbG93Q2xpZW50UnVudGltZXNSZXN0cmljdGlvbigpIHsKLQkgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImFsbG93Q2xpZW50UnVudGltZXNSZXN0cmljdGlvbiIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0gIAotICAgICAgIAotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGlzIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHN1cHBvcnRzIHRoZSBnaXZlIGNsaWVudCBydW50aW1lIElELgotICAgKiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjbGllbnQgcnVudGltZSBJRCBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzUnVudGltZShTdHJpbmcgcnVudGltZUlkKSB7Ci0JICAKLQkgaWYgKCFhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb24oKSB8fCBzdXBwb3J0ZWRSdW50aW1lc18uaXNFbXB0eSgpKQotCQkgcmV0dXJuIHRydWU7Ci0JICAKLQkgcmV0dXJuIHN1cHBvcnRlZFJ1bnRpbWVzXy5jb250YWlucyhydW50aW1lSWQpOwotICB9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMWU5ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VUZXN0RmluaXNoQ29tbWFuZCAKLXsKLQotICAvKioKLSAgICogSWYgdGhlIGNvbW1hbmQgbmVlZHMgYSBzZXJ2ZXIgdGhpcyBpcyB0aGUgY2hvc2VuIAotICAgKiBjbGllbnQgc2VydmVySUQKLSAgICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJRAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIGlzIHRoZSBJU2VydmVyIGlmIHJlcXVpcmVkCi0gICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotICAKLSAgLyoqCi0gICAqIFRoaXMgaXMgdGhlIGVuZHBvaW50cyBpZiBtb25pdG9yIHNlcnZpY2UgaXMgZW5hYmxlZAotICAgKiBAcGFyYW0gZW5kcG9pbnRzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChMaXN0IGVuZHBvaW50cyk7Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNmZWNjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAvKgotICAgKiBUaGlzIGlzIGEgc2luZ2xldG9uIGJlY2FzdWUgaXQgd2FzIGRlY2lkZWQgdGhhdCB0aGUgbWVtb3J5IGZvb3QgcHJpbnQgCi0gICAqIGlzIG5vdCBhcyBleHBlbnNpdmUgYXMgdGhlIHRpbWUgdGFrZW4gcmV0cmlldmluZyB0aGUgZGF0YQotICAgKiAKLSAgICovCi0gIAotICAKLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3RyOwotICAKLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAJaWYod3N0ciA9PSBudWxsKSB3c3RyID0gbmV3IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkoKTsKLSAgICByZXR1cm4gd3N0cjsKLSAgfQotICAKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5KCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIHRvICJqb2luIiBhbiBleGlzdGluZyB2YWx1ZSBhbmQgYSBuZXcgdmFsdWUgdG9nZXRoZXIgYnkKLSAgICogYSBzcGFjZSBpbiBiZXR3ZWVuLiAgSGFuZGxlcyBzcGVjaWFsIGNhc2Ugd2hlbiBlaXRoZXIgdmFsdWUgaXMgbnVsbC4gCi0gICAqICAKLSAgICogQHBhcmFtIGV4aXN0aW5nVmFsdWUgVGhlIGV4aXN0aW5nIHZhbHVlCi0gICAqIEBwYXJhbSBuZXdWYWx1ZSBUaGUgbmV3IHZhbHVlCi0gICAqIEByZXR1cm4gSWYgZWl0ZXIgdGhlIGV4aXN0aW5nIG9yIG5ldyB2YWx1ZSBpcyBudWxsLCBzaW1wbHkgcmV0dXJucyB0aGUKLSAgICogbmV3IHZhbHVlIGFzIGlzICh3aGljaCBjb3VsZCBiZSBudWxsKS4gIE90aGVyd2lzZSByZXR1cm5zIHRoZSB2YWx1ZSBqb2luZWQKLSAgICogYnkgYSBzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdlbk5ld1ZhbHVlKFN0cmluZyBleGlzdGluZ1ZhbHVlLCBTdHJpbmcgbmV3VmFsdWUpIHsKLQkgIAotCSAgaWYgKGV4aXN0aW5nVmFsdWUgPT0gbnVsbCB8fCBuZXdWYWx1ZSA9PSBudWxsKQotCQkgIHJldHVybiBuZXdWYWx1ZTsKLQkgIAkgIAkgCi0JICByZXR1cm4gZXhpc3RpbmdWYWx1ZSArICIgIiArIG5ld1ZhbHVlOwotICB9Ci0gICAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwjbG9hZEV4dGVuc2lvbnMoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgbG9hZEV4dGVuc2lvbnMgKCkKLSAgewotCS8vIGtlZXAgdHJhY2sgb2YgdGhlIHN1cHBvcnQgcnVudGltZXMgZm9yIGVhY2ggdGVzdCBmYWNpbGl0eSBJRAotICAgIEhhc2h0YWJsZSBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcyA9IG5ldyBIYXNodGFibGUoKTsKLQkgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PGNvbmZpZy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGNvbmZpZ1tpZHhdOwotICAgICAgU3RyaW5nIGxhYmVsID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJsYWJlbCIgKTsKLSAgICAgIFN0cmluZyBpZCA9ICAgZWxlbS5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gbGFiZWwgaXMgZm91bmQsIGhlbmNlIHdlIGhhdmUgYSBtYXN0ZXIgZXh0ZW5zaW9uIGVsZW1lbnQKLSAgICAgIGlmIChsYWJlbCAhPSBudWxsKSB7Ci0gICAgCSAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgCSAgbmFtZUV4dGVuc2lvblRhYmxlXy5wdXQoaWQsd2ViU2VydmljZUV4dGVuc2lvbik7Ci0gICAgCSAgbGFiZWxfLmFkZChsYWJlbCk7Ci0gICAgCSAgaWRfLmFkZChpZCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIHNsYXZlIGV4dGVuc2lvbiBlbGVtZW50LCB3aGljaCBvbmx5IGhhcyB0aGUgaWQgYW5kIHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIGF0dHJpYnV0ZXMKLSAgICAgIGVsc2UgewotICAgIAkgIFN0cmluZyBleGlzdGluZ1ZhbHVlID0gKFN0cmluZykgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMuZ2V0KGlkKTsKLSAgICAJICBTdHJpbmcgbmV3VmFsdWUgPSBnZW5OZXdWYWx1ZShleGlzdGluZ1ZhbHVlLCBlbGVtLmdldEF0dHJpYnV0ZSgic3VwcG9ydGVkQ2xpZW50UnVudGltZXMiKSk7Ci0gICAgCSAgCi0gICAgCSAgaWYgKG5ld1ZhbHVlICE9IG51bGwpCi0gICAgCQkgIHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzLnB1dChpZCwgbmV3VmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBtZXJnZSBhbnkgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMgYXR0cmlidXRlcyBmcm9tIHRoZSBzbGF2ZSBlbGVtZW50cyBiYWNrIHRvIHRoZSBtYXN0ZXIgZWxlbWVudHMKLSAgICAKLSAgICBJdGVyYXRvciBpdGVyID0gbmFtZUV4dGVuc2lvblRhYmxlXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIAotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgIAlXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3ZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgaXRlci5uZXh0KCk7Ci0gICAgCi0gICAgCS8vIHNraXAgaWYgdGhlIGV4dGVuc2lvbiBkb2VzIG5vdCBhbGxvdyByZXN0cmljdGlvbiBvbiB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lcwotICAgIAlpZiAod2ViU2VydmljZVRlc3RFeHRlbnNpb24uYWxsb3dDbGllbnRSdW50aW1lc1Jlc3RyaWN0aW9uKCkpIHsKLSAgICAJCVN0cmluZyBpZCA9IHdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmdldElkKCk7Ci0gICAgCQl3ZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5hZGRSdW50aW1lcygoU3RyaW5nKSBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcy5nZXQoaWQpKTsKLSAgICAJfQotICAgIH0gICAgCi0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwjZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMoKSB7Ci0JcmV0dXJuIChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICB9IAotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxhYmVsLgotICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsLgotICAgKiBAcmV0dXJuIFRoZSBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYWJlbCwgb3IgaWYgdGhlIGxhYmVsIHBhcmFtZXRlciBpcyBub3QgYSBsYWJlbAotICAgKiAobXVzdCBiZSBhbHJlYWR5IGFuIElEKSwgaXQgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGxhYmVsVG9JZChTdHJpbmcgbGFiZWwpIHsKLSAgICBpbnQgbGFiZWxJbmRleCA9IGxhYmVsXy5pbmRleE9mKGxhYmVsKTsKLSAgICBpZiAobGFiZWxJbmRleCA9PSAtMSkKLSAgICAgIHJldHVybiBsYWJlbDsKLSAgICByZXR1cm4gKFN0cmluZykgaWRfLmVsZW1lbnRBdChsYWJlbEluZGV4KTsKLSAgfSAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgV2ViU2VydmljZUV4dGVuc2lvbiB3aXRoIHRoZSBnaXZlbiBJRC4KLSAgICogQHBhcmFtIGlkIFRoZSBJRC4KLSAgICogQHJldHVybiBUaGUgV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKSBuYW1lRXh0ZW5zaW9uVGFibGVfLmdldChpZCk7Ci0gIH0gCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCNnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKGxhYmVsVG9JZChuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgKiBDaGlsZHJlbiByZWdpc3RyaWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHR5cGVzIAotICAqIEByZXR1cm4gV2Vic2VydmljZUV4dGVuc2lvbiBob2xkcyBhIGNvbmZpZyBlbGVtCi0gICogZm9yIHRoYXQgZXh0ZW5zaW9uIGNhcGFibGUgb2YgY3JlYXRpbmcgYW4gZXhlY3V0YWJsZSBmaWxlCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKGNvbmZpZ0VsZW1lbnQpOwotICB9Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gbXVzdCBpbXBsZW1lbnQgaG93IHRoZXkgZ2V0IHRoZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHBhcnRpY3VsYXIgdG8gdGhhdAotICAqIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGVyIik7Ci0gICAgcmV0dXJuIGNvbmZpZzsgICAgCi0gIH0KLQotCi0gICAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9wbHVnaW4vV2ViU2VydmljZVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9wbHVnaW4vV2ViU2VydmljZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTIwZDEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dlYlNlcnZpY2VQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuVURESVByZWZlcmVuY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBwbHVnaW4uCi0qIDxwPgotKiBUaGlzIHBsdWdpbiBjb250YWlucyB0aGUgYnVsayBvZiB0aGUgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0qIE9ubHkgdGhlIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBwb3J0aW9uIG9mIHRoZSBydW50aW1lIGlzCi0qIGZvdW5kIGVsc2V3aGVyZSAtIGluIHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MudWkgcGx1Z2luLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cyI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlUGx1Z2luIGluc3RhbmNlXzsKLQotICBwcml2YXRlIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLSAgcHJpdmF0ZSBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0IHNjZW5hcmlvQ29udGV4dF87Ci0gIHByaXZhdGUgUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCB1ZGRpUHJlZmVyZW5jZUNvbnRleHQ7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZVBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7IAotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICogQHJldHVybiBUaGUgV2ViU2VydmljZVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UGx1Z2luUHJlZmVyZW5jZXMoKSAKLSAgewotICAJCSgoUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCkgZ2V0VURESVByZWZlcmVuY2VDb250ZXh0KCkpLmxvYWQoKTsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAJCWlmIChyZXNvdXJjZUNvbnRleHRfID09IG51bGwpIAotICAJCQlyZXNvdXJjZUNvbnRleHRfID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlyZXR1cm4gcmVzb3VyY2VDb250ZXh0XzsKLSAgfQotCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgZ2V0U2NlbmFyaW9Db250ZXh0KCkKLSAgewotICAJCWlmIChzY2VuYXJpb0NvbnRleHRfID09IG51bGwpCi0gIAkJewotICAJCSAgc2NlbmFyaW9Db250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KCk7Ci0gIAkJICBzY2VuYXJpb0NvbnRleHRfLmxvYWQoKTsKLSAgCQl9Ci0KLQkJcmV0dXJuIHNjZW5hcmlvQ29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBVRERJUHJlZmVyZW5jZUNvbnRleHQgZ2V0VURESVByZWZlcmVuY2VDb250ZXh0KCkKLSAgewotICAgIGlmICh1ZGRpUHJlZmVyZW5jZUNvbnRleHQgPT0gbnVsbCkKLSAgICAgIHVkZGlQcmVmZXJlbmNlQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0KCk7Ci0gICAgcmV0dXJuIHVkZGlQcmVmZXJlbmNlQ29udGV4dDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFDbGllbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFDbGllbnRJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTAwMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhQ2xpZW50SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYyMCAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLQotLyoqCi0gKiBUaGlzIHN1YmNsYXNzIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIGFkZHMgcHJvcGVydGllcwotICogcmVsZXZhbnQgdG8gZGVzY3JpcHRvcnMgb2YgSmF2YSBXZWIgc2VydmljZSBjbGllbnRzLgotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUphdmFDbGllbnRJbmZvIGV4dGVuZHMgV2ViU2VydmljZUNsaWVudEluZm8KLXsKLQlwcml2YXRlIElUeXBlIGpkdFR5cGVfOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvZiB0aGUgcHJpbWFyeSBKYXZhIHByb3h5IGNsYXNzCi0JICogb2YgYSBXZWIgc2VydmljZSBjbGllbnQsIG9yIG51bGwgaWYgbm8gc3VjaCBjbGFzcyBoYXMKLQkgKiBiZWVuIGxvY2F0ZWQuCi0JICogQHJldHVybiBUaGUgSkRUIElUeXBlIG9mIHRoZSBKYXZhIGNsaWVudCBwcm94eSBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0VHlwZSAoKQotCXsKLQkJcmV0dXJuIGpkdFR5cGVfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBKRFQgSVR5cGUgb2YgdGhlIHByaW1hcnkgSmF2YSBwcm94eSBjbGFzcwotCSAqIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50LgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSBKRFQgSVR5cGUgb2YgdGhlIEphdmEgY2xpZW50IHByb3h5IGNsYXNzLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFR5cGUgKCBJVHlwZSBqZHRUeXBlICkKLQl7Ci0JCWpkdFR5cGVfID0gamR0VHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDllYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYyMCAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLQotLyoqCi0gKiBUaGlzIHN1YmNsYXNzIG9mIFdlYlNlcnZpY2VJbmZvIGFkZHMgcHJvcGVydGllcwotICogcmVsZXZhbnQgdG8gZGVzY3JpcHRvcnMgb2YgSmF2YSBXZWIgc2VydmljZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlSmF2YUluZm8gZXh0ZW5kcyBXZWJTZXJ2aWNlSW5mbwotewotCXByaXZhdGUgSVR5cGUgamR0VHlwZV87Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9mIHRoZSBwcmltYXJ5IEphdmEgaW1wbGVtZW50YXRpb24KLQkgKiBjbGFzcyBvZiBhIFdlYiBzZXJ2aWNlLCBvciBudWxsIGlmIG5vIHN1Y2ggY2xhc3MgaGFzCi0JICogYmVlbiBsb2NhdGVkLgotCSAqIEByZXR1cm4gVGhlIEpEVCBJVHlwZSBvZiB0aGUgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0VHlwZSAoKQotCXsKLQkJcmV0dXJuIGpkdFR5cGVfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBKRFQgSVR5cGUgb2YgdGhlIHByaW1hcnkgSmF2YSBpbXBsZW1lbnRhdGlvbgotCSAqIGNsYXNzIG9mIGEgV2ViIHNlcnZpY2UuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIEpEVCBJVHlwZSBvZiB0aGUgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUeXBlICggSVR5cGUgamR0VHlwZSApCi0JewotCQlqZHRUeXBlXyA9IGpkdFR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjhiMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotcnVudGltZQotdGVtcC5mb2xkZXIKLWVudmNvcmUuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMyN2RlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkZTg0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM3OjIxIEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkN2EyMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6MzQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkM2NhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDQucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnVyaTt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjIwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4yMDAsMi4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YjgyYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gKi5qYXIsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzQ1OGY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvY29tcG9uZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQiPgotICAgPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+Ci0gICA8L2NvbXBvbmVudC1kZXBlbmRzPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzE3MDlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1FbnZpcm9ubWVudCBDb21tYW5kIEZyYW1ld29yayAoY29yZSkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDhkZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjcmVhdGUgQ29tbWFuZCBvYmplY3RzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kRmFjdG9yeSAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBjcmVhdGVkIENvbW1hbmQgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNyZWF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOTQ2ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotLyoqCi0gKiBDb21tYW5kTWFuYWdlcnMgaGVscCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBDb21tYW5kcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kTWFuYWdlcgotewotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgQ29tbWFuZE1hbmFnZXIgaXMgY2FwYWJsZSBvZiB1bmRvaW5nCi0gICAqIENvbW1hbmRzLiBTb21lIENvbW1hbmRNYW5hZ2VycyBhbmQgRW52aXJvbm1lbnRzIG1heSBiZSBvZgotICAgKiBhIHNvcnQgdGhhdCB3aWxsIG5ldmVyIHVuZG8oKSBDb21tYW5kcy4gQ29tbWFuZC5leGVjdXRlKCkKLSAgICogbWV0aG9kcyBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgdG8gb3B0aW1pemUKLSAgICogb3V0IGFueSBjYWNoaW5nIGxvZ2ljIHdoZW5ldmVyIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9FbmFibGVkICgpOwotCi0gIC8vIFRoZXJlJ3MgcHJvYmFibHkgbW9yZSwgbGlrZSBmYWN0b3J5IG1ldGhvZHMgZm9yIGNyZWF0aW5nCi0gIC8vIFVuZG8vUmVkbyBzdGFja3MgYW5kIHN0dWZmIGxpa2UgdGhhdC4KLSAgCi0gIHB1YmxpYyBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGdldE1hcHBpbmdSZWdpc3RyeSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzExZDhjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxOCAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgQ29tbW9uIE1lc3NhZ2VzCi0jCi1NU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUj1JV0FCMDAxNEUgVW5leHBlY3RlZCBleGNlcHRpb24gb2NjdXJyZWQuCi0KLVRJVExFX1dBUk5JTkc9V2FybmluZzoKLVRJVExFX0VSUk9SPUVycm9yOgotVElUTEVfSU5GTz1JbmZvOgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTgxYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudENvcmVNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuRW52aXJvbm1lbnRDb3JlIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUSVRMRV9XQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX0lORk87Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0lDb21tYW5kRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvSUNvbW1hbmRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MmEyOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvSUNvbW1hbmRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJldHVybiBhIHNlcXVlbmNlIG9mIENvbW1hbmRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJQ29tbWFuZEZhY3RvcnkgZXh0ZW5kcyBJdGVyYXRvciAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgQ29tbWFuZCBpbiB0aGUgc2VxdWVuY2UuCi0gICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0TmV4dENvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL1NpbXBsZUNvbW1hbmRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9TaW1wbGVDb21tYW5kRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWZkYzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL1NpbXBsZUNvbW1hbmRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFNpbXBsZUNvbW1hbmRGYWN0b3J5IGltcGxlbWVudHMgSUNvbW1hbmRGYWN0b3J5IAotewotICAgIHByaXZhdGUgVmVjdG9yIGNvbW1hbmRzXzsKLQlwcml2YXRlIGludCAgICBpbmRleF87Ci0JCi0JcHVibGljIFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBWZWN0b3IgY29tbWFuZHMgKQotCXsKLQkgIGNvbW1hbmRzXyA9IGNvbW1hbmRzOwotCSAgaW5kZXhfICAgID0gMDsKLQl9Ci0JCi0JcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGdldE5leHRDb21tYW5kKCkgCi0JewotCQlyZXR1cm4gKEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uKW5leHQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmUoKSAKLQl7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgCi0JewotCQlyZXR1cm4gaW5kZXhfIDwgY29tbWFuZHNfLnNpemUoKTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IG5leHQoKSAKLQl7Ci0JCXJldHVybiBjb21tYW5kc18uZWxlbWVudEF0KGluZGV4XysrKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Db25kaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Db25kaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxMmNmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vQ29uZGl0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBib29sZWFuIGNvbmRpdGlvbiB0aGF0IGNhbiBiZSBldmFsdWF0ZWQgZm9yIGFueSBvYmplY3QuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29uZGl0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IHBhc3NlcyB0aGlzIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vRXZhbHVhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9FdmFsdWF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWZhODA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9FdmFsdWF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotLyoqCi0gICogVGhpcyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgd2hlbiBhIGNvbmRpdGlvbmFsIG9iamVjdCBuZWVkcyB0byBiZSByZXR1cm5lZC4KLSoqLwotcHVibGljIGludGVyZmFjZSBFdmFsdWF0ZQotewotICAvKioKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhbiBvYmplY3QgYmFzZWQgb24gc29tZSBldmFsdWF0ZWQgY29uZGl0aW9uLgotICAqKi8KLSAgcHVibGljIE9iamVjdCBldmFsdWF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL01lc3NhZ2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL01lc3NhZ2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzJjZDQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9NZXNzYWdlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBjb252aWVuZW50IHdheSB0byBhY2Nlc3MgcmVzb3VyY2UgYnVuZGxlcyBhbmQKLSAqIHJldGlldmUgdHJhbnNsYXRlZCBzdHJpbmdzLgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlVXRpbHMKLXsKLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZV87Ci0gIAotICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgYnVuZGxlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBidW5kbGVJZCB0aGUgcmVzb3VyY2UgYnVuZGxlIElELgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBjbGFzcyBsb2FkZXIgZm9yIHRoaXMgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byByZXRyaWV2ZQotICAgKiAgICAgICAgICAgICAgIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVV0aWxzKCBTdHJpbmcgYnVuZGxlSWQsIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgdGhpcyggYnVuZGxlSWQsIG9iamVjdC5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gYnVuZGxlSWQgdGhlIHJlc291cmNlIGJ1bmRsZSBJRC4KLSAgICogQHBhcmFtIGxvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlCi0gICAqICAgICAgICAgICAgICAgdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVXRpbHMoIFN0cmluZyBidW5kbGVJZCwgQ2xhc3NMb2FkZXIgbG9hZGVyICkKLSAgewotICAgIHJlc291cmNlXyA9IChSZXNvdXJjZUJ1bmRsZSlidW5kbGVzXy5nZXQoIGJ1bmRsZUlkICk7Ci0gICAgCi0gICAgaWYoIHJlc291cmNlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICByZXNvdXJjZV8gPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIGJ1bmRsZUlkLCBMb2NhbGUuZ2V0RGVmYXVsdCgpLCBsb2FkZXIgKTsKLSAgICAgIGJ1bmRsZXNfLnB1dCggYnVuZGxlSWQsIHJlc291cmNlXyApOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgZm9yIHRoZSBzdHJpbmcgdG8gcmV0cmlldmUuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdHJhbnNsYXRlZCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLSAgewotICAgIFN0cmluZyB2YWx1ZSA9IGtleTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICB2YWx1ZSA9IHJlc291cmNlXy5nZXRTdHJpbmcoIGtleSApOyAKLSAgICB9Ci0gICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBrZXkgdGhlIGtleSBmb3IgdGhlIHN0cmluZyB0byByZXRyaWV2ZS4KLSAgICogQHBhcmFtIGFyZ3MgVGhlc2UgYXJndW1lbnRzIHdpbGwgYmUgc3Vic3RpdHV0ZWQgaW50byB0aGUgdHJhbnNsYXRlZCBzdHJpbmcuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdHJhbnNsYXRlZCBzdHJpbmcgd2l0aCBhbnkgc3Vic3RpdHV0aW9ucy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCBnZXRNZXNzYWdlKGtleSksYXJncyApOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1Byb2dyZXNzVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Qcm9ncmVzc1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMjhjYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1Byb2dyZXNzVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLXB1YmxpYyBjbGFzcyBQcm9ncmVzc1V0aWxzCi17Ci0gIHN0YXRpYyBwdWJsaWMgdm9pZCByZXBvcnQoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgU3RyaW5nIG1lc3NhZ2UgKQotICB7Ci0gICAgaWYoIG1vbml0b3IgIT0gbnVsbCApIAotICAgIHsKLSAgICAgICBtb25pdG9yLmJlZ2luVGFzayggbWVzc2FnZSwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOICk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTIyNGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUkk7Ci0KLS8qKgotICogQ2FycmllcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiB3aXRoaW4gYSByZXNvdXJjZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBSYW5nZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTktOT1dOID0gLTE7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlc291cmNlIHRoZSByYW5nZSBhcHBsaWVzIHRvLgotICAgKi8KLSAgcHVibGljIElVUkkgZ2V0VVJJICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgZmlyc3QgbGluZQotICAgKiBvZiB0aGUgcmFuZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFN0YXJ0aW5nTGluZU51bWJlciAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgotICAgKiBvZiB0aGUgcmFuZ2UgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U3RhcnRpbmdDaGFyTnVtYmVySW5MaW5lICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAqIG9mIHRoZSByYW5nZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRTdGFydGluZ0NoYXJOdW1iZXJJblVSSSAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGxhc3QgbGluZQotICAgKiBvZiB0aGUgcmFuZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVuZGluZ0xpbmVOdW1iZXIgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG9mZnNldCwgemVyby1pbmRleGVkLCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIKLSAgICogb2YgdGhlIHJhbmdlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVuZGluZ0NoYXJOdW1iZXJJbkxpbmUgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluZGV4LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBsYXN0IGNoYXJhY3RlcgotICAgKiBvZiB0aGUgcmFuZ2UgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW5kaW5nQ2hhck51bWJlckluVVJJICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlVmVjdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2VWZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0NjBiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2VWZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgVmVjdG9yIG1ha2VzIHRoZSBwcm90ZWN0ZWQgbWV0aG9kIHJlbW92ZVJhbmdlIHB1YmxpYy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBSYW5nZVZlY3RvciBleHRlbmRzIFZlY3RvcgotewotICAvKioKLSAgICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQwNDg3OTM0NzY2NTkyMzA3NzNMOwotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVJhbmdlKCBpbnQgc3RhcnQsIGludCBlbmQgKQotICB7Ci0gICAgc3VwZXIucmVtb3ZlUmFuZ2UoIHN0YXJ0LCBlbmQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1N0YXR1c1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vU3RhdHVzVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzYTU3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vU3RhdHVzVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLXB1YmxpYyBjbGFzcyBTdGF0dXNVdGlscwotewotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZXJyb3JTdGF0dXMoIFN0cmluZyBlcnJvck1lc3NhZ2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJpZCIsIDAsIGVycm9yTWVzc2FnZSwgbnVsbCApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZXJyb3JTdGF0dXMoIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBleGMuZ2V0TWVzc2FnZSgpOwotICAgIAotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAiaWQiLCAwLCBtZXNzYWdlID09IG51bGwgPyAiIiA6IG1lc3NhZ2UsIGV4YyApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZXJyb3JTdGF0dXMoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAiaWQiLCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyggU3RyaW5nIG1lc3NhZ2UsIElTdGF0dXNbXSBjaGlsZHJlbiwgVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICByZXR1cm4gbmV3IE11bHRpU3RhdHVzKCAiaWQiLCAwLCBjaGlsZHJlbiwgbWVzc2FnZSwgZXhjICk7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyggU3RyaW5nIG1lc3NhZ2UsIElTdGF0dXNbXSBjaGlsZHJlbiApCi0gIHsKLSAgICByZXR1cm4gbmV3IE11bHRpU3RhdHVzKCAiaWQiLCAwLCBjaGlsZHJlbiwgbWVzc2FnZSwgbnVsbCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyB3YXJuaW5nU3RhdHVzKCBTdHJpbmcgd2FybmluZ01lc3NhZ2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuV0FSTklORywgImlkIiwgMCwgd2FybmluZ01lc3NhZ2UsIG51bGwgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIHdhcm5pbmdTdGF0dXMoIFN0cmluZyB3YXJuaW5nTWVzc2FnZSwgVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5XQVJOSU5HLCAiaWQiLCAwLCB3YXJuaW5nTWVzc2FnZSwgZXhjICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBpbmZvU3RhdHVzKCBTdHJpbmcgaW5mb01lc3NhZ2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuSU5GTywgImlkIiwgMCwgaW5mb01lc3NhZ2UsIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3MjZhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IHRvIGdldCBhbmQgc2V0IHByZWZlcmVuY2UgaW5mb3JtYXRpb24uCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbnRleHQgCi17Ci0gLyoqCi0gICogTG9hZHMgdGhlIHByZWZlcmVuY2UgZGF0YSBpbnRvIHRoaXMgQ29udGV4dCBvYmplY3QuCi0gICoKLSAgKi8KLSBwdWJsaWMgdm9pZCBsb2FkKCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSk7IAotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgaW50IHZhbHVlKTsgCi0KLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBpbnQgdmFsdWUpOyAgIAotCi0gLyoqCi0gICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyBuYW1lKTsKLSAKLSAvKioKLSAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBib29sZWFuIGdldFZhbHVlQXNCb29sZWFuICggU3RyaW5nIG5hbWUpOwotIAotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgaW50IGdldFZhbHVlQXNJbnQgKCBTdHJpbmcgbmFtZSk7ICAJCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNWM3NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi1wdWJsaWMgaW50ZXJmYWNlIFJlc291cmNlQ29udGV4dCAKLXsKLSAvKioKLSAgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIG92ZXJ3cml0ZSBmaWxlcyBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotICAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLSAqKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX09WRVJXUklURSA9ICJmaWxlc092ZXJ3cml0ZSI7Ci0KLSAvKioKLSAgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIGNyZWF0ZSBmb2xkZXJzIGdlbmVyYWwgcHJlZmVyZW5jZSBmcm9tCi0gICAqIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotICoqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlMgPSAiY3JlYXRlRm9sZGVycyI7Ci0gCi0gLyoqCi0gICAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBjaGVja291dCBmaWxlcyBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotICAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLSAqKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0NIRUNLT1VUID0gImZpbGVzQ2hlY2tvdXQiOwotCi0gLyoqCi0gICogCi0gICogQHBhcmFtIGVuYWJsZSBzZXQgd2hldGhlciBvdmVyd3JpdGluZyBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAoIGJvb2xlYW4gZW5hYmxlKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciBvdmVyd3JpdGluZyBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCk7Ci0gCi0gLyoqCi0gICogCi0gICogQHBhcmFtIGVuYWJsZSBzZXQgd2hldGhlciBjcmVhdGlvbiBvZiBmb2xkZXJzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoIGJvb2xlYW4gZW5hYmxlKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciBjcmVhdGlvbiBvZiBmb2xkZXJzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpOyAKLSAKLSAvKioKLSAgKiAKLSAgKiBAcGFyYW0gZW5hYmxlIHNldHMgd2hldGhlciBhdXRvbWF0aWMgY2hlY2tvdXQgb2YgZmlsZXMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRDaGVja291dEZpbGVzRW5hYmxlZCggYm9vbGVhbiBlbmFibGUpOwotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGF1dG9tYXRpYyBjaGVja291dCBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgUmVzb3VyY2VDb250ZXh0LgotICAqLwotIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgY29weSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZURlZmF1bHRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxMzQ0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9PVkVSV1JJVEVfREVGQVVMVCA9IGZhbHNlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSU19ERUZBVUxUID0gdHJ1ZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfQ0hFQ0tPVVRfREVGQVVMVCA9IGZhbHNlOwotCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIG92ZXJ3cml0aW5nIGZpbGVzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRPdmVyd3JpdGVGaWxlc0RlZmF1bHQgKCkKLSB7Ci0gCXJldHVybiBQUkVGRVJFTkNFX09WRVJXUklURV9ERUZBVUxUOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBvZnIgY3JlYXRpbmcgZm9sZGVycy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0Q3JlYXRlRm9sZGVyc0RlZmF1bHQgKCkKLSB7IAotCXJldHVybiBQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTX0RFRkFVTFQ7Ci0gfQotCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIGNoZWNraW5nIG91dCBmaWxlcy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0Q2hlY2tvdXRGaWxlc0RlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9DSEVDS09VVF9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1RyYW5zaWVudFJlc291cmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjBiYTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBSZXNvdXJjZUNvbnRleHQgaW50ZXJmYWNlIHdoZXJlIHRoZSBzdGF0ZQotICogb2YgdGhlIGNvbnRleHQgZGF0YSBpcyB0cmFuc2llbnQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0IGltcGxlbWVudHMgUmVzb3VyY2VDb250ZXh0IAotewotICBwcml2YXRlIGJvb2xlYW4gb3ZlcldyaXRlRmlsZXM7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVGb2xkZXJzOwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQotICBwdWJsaWMgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCkgewotICAgIHNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChSZXNvdXJjZURlZmF1bHRzLmdldE92ZXJ3cml0ZUZpbGVzRGVmYXVsdCgpKTsKLSAgICBzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChSZXNvdXJjZURlZmF1bHRzLmdldENyZWF0ZUZvbGRlcnNEZWZhdWx0KCkpOwotICAgIHNldENoZWNrb3V0RmlsZXNFbmFibGVkKFJlc291cmNlRGVmYXVsdHMuZ2V0Q2hlY2tvdXRGaWxlc0RlZmF1bHQoKSk7Ci0gIH0KLQotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I3NldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgb3ZlcldyaXRlRmlsZXMgPSBlbmFibGU7Ci0gIH0KLSAgCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIG92ZXJXcml0ZUZpbGVzOwotICB9Ci0KLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBjcmVhdGVGb2xkZXJzID0gZW5hYmxlOwotICB9Ci0gIAotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I2lzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gY3JlYXRlRm9sZGVyczsKLSAgfQotCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENoZWNrb3V0RmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgY2hlY2tPdXRGaWxlcyA9IGVuYWJsZTsKLSAgfQotICAKLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIGNoZWNrT3V0RmlsZXM7Ci0gIH0KLSAgCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjY29weSgpCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGNvcHkoKSB7Ci0gICAgUmVzb3VyY2VDb250ZXh0IGNjID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgIGNjLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKTsKLSAgICBjYy5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkpOwotICAgIGNjLnNldENoZWNrb3V0RmlsZXNFbmFibGVkKGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0gICAgcmV0dXJuIGNjOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0JlYW5Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9CZWFuTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2ZmM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0JlYW5Nb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1wdWJsaWMgaW50ZXJmYWNlIEJlYW5Nb2RpZmllciB7Ci0KLQkvKioKLQkgKiBQZXJmb3JtcyBtb2RpZmljYXRpb24gb24gYmVhbiBwcm9wZXJ0aWVzIHVzaW5nIGRhdGEgcHJvdmlkZWQKLQkgKiBAcGFyYW0gYmVhbiAgVGhlIGJlYW4gdG8gYmUgbW9kaWZpZWQKLQkgKiBAcGFyYW0gcHJvcGVydHlIb2xkZXIgVGhlIGRhdGEgdG8gdXNlIHRvIG1ha2UgdGhlIG1vZGlmaWNhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIG1vZGlmeShPYmplY3QgYmVhbiwgT2JqZWN0IHByb3BlcnR5SG9sZGVyKTsKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQ2xhc3NFbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9DbGFzc0VudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZTVjNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9DbGFzc0VudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDbGFzc0VudHJ5Ci17Ci0gIC8vIEEgbGlzdCBvZiBnZXR0ZXIgbWV0aG9kcyBmb3IgYSBwYXJ0aWN1bGFyIGNsYXNzLgotICBwdWJsaWMgVmVjdG9yIGdldHRlckxpc3RfOwotICAKLSAgLy8gQSBsaXN0IG9mIHNldHRlciBtZXRob2RzIGZvciBhIHBhcnRpY3VsYXIgY2xhc3MuCi0gIHB1YmxpYyBWZWN0b3Igc2V0dGVyTGlzdF87Ci0gIAotICAvLyBBIGxpc3Qgb2YgaW5zdGFuY2Ugb2JqZWN0cyBmb3IgdGhpcyBjbGFzcy4gIE9ubHkgdGhlIGxhc3QgZW50cnkKLSAgLy8gc2hvdWxkIGJlIGxvb2tlZCBhdC4gCi0gIHByaXZhdGUgVmVjdG9yIG9iamVjdExpc3RfID0gbmV3IFZlY3RvcigpOwotICAKLSAgLy8gQSBsaXN0IG9mIEludGVyZ2VyIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYW4gb3JkZXJpbmcgb2Ygb2JqZWN0cy4KLSAgLy8gVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBvYmplY3RMaXN0IHZlY3RvciBhbmQgdGhlIG9yZGVyTGlzdCB2ZWN0b3IKLSAgLy8gc2hvdWxkIGJlIHRoZSBzYW1lLiAgRWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0TGlzdCB2ZWN0b3IgaXMKLSAgLy8gY29yZWxhdGVkIHdpdGggZWFjaCBlbnRyeSBpbiB0aGUgb3JkZXJMaXN0IHZlY3Rvci4KLSAgcHJpdmF0ZSBWZWN0b3Igb3JkZXJMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIGFkZE9iamVjdCggT2JqZWN0IG9iamVjdCwgaW50IG9yZGVyICkKLSAgewotICAgIG9iamVjdExpc3RfLmFkZChvYmplY3QpOwotICAgIG9yZGVyTGlzdF8uYWRkKCBuZXcgSW50ZWdlcihvcmRlcikgKTsKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBnZXRMYXN0T2JqZWN0KCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBvYmplY3RMaXN0Xy5zaXplKCkgPiAwICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvYmplY3RMaXN0Xy5sYXN0RWxlbWVudCgpOwotICAgIH0KLSAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0TGFzdE9yZGVyKCkKLSAgewotICAgIGludCByZXN1bHQgPSAtMTsKLSAgICAKLSAgICBpZiggb3JkZXJMaXN0Xy5zaXplKCkgPiAwICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEludGVnZXIpb3JkZXJMaXN0Xy5sYXN0RWxlbWVudCgpKS5pbnRWYWx1ZSgpOwotICAgIH0KLSAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZU9iamVjdCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBpbnQgcmVtb3ZhbEluZGV4ID0gb2JqZWN0TGlzdF8uaW5kZXhPZihvYmplY3QpOwotICAgIAotICAgIGlmKCByZW1vdmFsSW5kZXggIT0gLTEgKQotICAgIHsKLSAgICAgIG9iamVjdExpc3RfLnJlbW92ZShyZW1vdmFsSW5kZXgpOwotICAgICAgb3JkZXJMaXN0Xy5yZW1vdmUocmVtb3ZhbEluZGV4KTsKLSAgICB9ICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YUZsb3dNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFGbG93TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZmZTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YUZsb3dNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzEzICAgMTMwOTU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotCi1wdWJsaWMgY2xhc3MgRGF0YUZsb3dNYW5hZ2VyIAotewotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsIHJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICAgICBjbGFzc1RhYmxlXzsKLSAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgICAgICBvcmRlcl87Ci0gIHByaXZhdGUgSUVudmlyb25tZW50CQkJCSAgICBlbnZpcm9ubWVudF87Ci0gIAotICBwdWJsaWMgRGF0YUZsb3dNYW5hZ2VyKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCByZWdpc3RyeSwgSUVudmlyb25tZW50IGVudmlyb25tZW50ICkKLSAgewotICAgIHJlZ2lzdHJ5XyAgID0gcmVnaXN0cnk7Ci0gICAgY2xhc3NUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgb3JkZXJfICAgICAgPSAwOwotICAgIGVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotICB9Ci0gIAotICBwdWJsaWMgRGF0YU1hcHBpbmdSZWdpc3RyeSBnZXRNYXBwaW5nUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIHJlZ2lzdHJ5XzsgCi0gIH0KLSAgCi0gIC8vIFJlbW92ZSB0aGlzIGluc3RhbmNlIG9iamVjdCBmcm9tIHRoZSBtYXBwaW5nIHRhYmxlLgotICBwdWJsaWMgdm9pZCB1bnByb2Nlc3MoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgU3RyaW5nICAgICBvYmplY3RUeXBlID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgIENsYXNzRW50cnkgY2xhc3NFbnRyeSA9IChDbGFzc0VudHJ5KWNsYXNzVGFibGVfLmdldCggb2JqZWN0VHlwZSApOwotCi0gICAgaWYoIGNsYXNzRW50cnkgIT0gbnVsbCApCi0gICAgewotICAgICAgY2xhc3NFbnRyeS5yZW1vdmVPYmplY3Qob2JqZWN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIEFkZCB0aGlzIG9iamVjdCB0byBvdXIgbWFwcGluZyB0YWJsZSBhbmQgY2FsbCB0aGUgc2V0dGVycwotICAvLyB0aGF0IGhhdmUgY29ycmVzcG9uZGluZyBnZXR0ZXIgb2JqZWN0cy4KLSAgcHVibGljIHZvaWQgcHJvY2VzcyggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICAvLyBBZGQgdGhpcyBvYmplY3QgdG8gdGhlIGNsYXNzVGFibGVfIGlmIHJlcXVpcmVkLgotICAgIFN0cmluZyAgICAgb2JqZWN0VHlwZSA9IG9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICBDbGFzc0VudHJ5IGNsYXNzRW50cnkgPSAoQ2xhc3NFbnRyeSljbGFzc1RhYmxlXy5nZXQoIG9iamVjdFR5cGUgKTsKLQkKLSAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImRhdGEiLCA1MDA0LCB0aGlzLCAicHJvY2VzcyIsICJQcm9jZXNzaW5nOiAiICsgb2JqZWN0VHlwZSApOwotICAgIAotICAgIGlmKCBjbGFzc0VudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGNsYXNzRW50cnkgPSBuZXcgQ2xhc3NFbnRyeSgpOwotICAgICAgY2xhc3NUYWJsZV8ucHV0KCBvYmplY3RUeXBlLCBjbGFzc0VudHJ5ICk7Ci0gICAgfQotICAgICAgICAKLSAgICBjbGFzc0VudHJ5LmFkZE9iamVjdChvYmplY3QsIG9yZGVyXysrICk7Ci0gICAgCi0gICAgLy8gTm93IHByb2Nlc3MgdGhlIHNldHRlcnMgZm9yIHRoaXMgb2JqZWN0Ci0gICAgVmVjdG9yIHJ1bGVFbnRyaWVzICA9IHJlZ2lzdHJ5Xy5nZXRSdWxlRW50cmllcyggb2JqZWN0VHlwZSApOwotICAgIAotICAgIGlmKCBydWxlRW50cmllcyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBpZiggY2xhc3NFbnRyeS5zZXR0ZXJMaXN0XyA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgY2xhc3NFbnRyeS5zZXR0ZXJMaXN0XyA9IGdldFNldHRlckxpc3QoIG9iamVjdCApOyAgCi0gICAgICB9ICAgIAotICAgICAgCi0gICAgICAvLyBGb3IgZWFjaCBzZXR0ZXIgaW4gdGhpcyBvYmplY3QgdHJ5IHRvIGZpbmQgYSBydWxlLgotICAgICAgZm9yKCBpbnQgc2V0dGVySW5kZXggPSAwOyBzZXR0ZXJJbmRleCA8IGNsYXNzRW50cnkuc2V0dGVyTGlzdF8uc2l6ZSgpOyBzZXR0ZXJJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0TWV0aG9kIGN1cnJlbnRPYmplY3RNZXRob2QgPSBuZXcgT2JqZWN0TWV0aG9kKCk7Ci0gICAgICAgIE1ldGhvZCAgICAgICBzZXR0ZXJNZXRob2QgICAgICAgID0gKE1ldGhvZCljbGFzc0VudHJ5LnNldHRlckxpc3RfLmVsZW1lbnRBdCggc2V0dGVySW5kZXggKTsKLSAgICAgICAgUnVsZUVudHJ5ICAgIGN1cnJlbnRSdWxlRW50cnkgICAgPSBudWxsOwotCi0gICAgICAgIGN1cnJlbnRPYmplY3RNZXRob2Qub3JkZXIgPSAtMTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgcnVsZXMgdGhhdCBtYXRjaCB0aGlzIHNldHRlci4gIE5vdGU6IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHJ1bGUKLSAgICAgICAgLy8gdGhhdCBtYXRjaGVzIHRoaXMgc2V0dGVyLiAgSW4gdGhpcyBjYXNlIHdlIHVzZSB0aGUgbW9zdCByZWNlbnQsIHdoaWNoIGlzIAotICAgICAgICAvLyBkZWZpbmVkIGJ5IHRoZSBvcmRlciBmaWVsZC4KLSAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bGVFbnRyaWVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBSdWxlRW50cnkgcnVsZUVudHJ5ID0gKFJ1bGVFbnRyeSlydWxlRW50cmllcy5lbGVtZW50QXQoIGluZGV4ICk7ICAgICAgIAotICAgICAgICAgIAotICAgICAgICAgIGlmKCBzZXR0ZXJNZXRob2QuZ2V0TmFtZSgpLmVxdWFscyggInNldCIgKyBydWxlRW50cnkudGFyZ2V0UHJvcGVydHlfICkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc2V0dGVyIGZvciB0aGlzIHJ1bGUuICBOb3cgZmluZCB0aGUgZ2V0dGVyIG1ldGhvZC4KLSAgICAgICAgICAgIC8vIE5vdGU6IGdldEdldHRlck1ldGhvZCBhbHdheXMgcmV0dXJucyBhIHZhbHVlLCBidXQgaWYgdGhlcmUgaXMgbm8KLSAgICAgICAgICAgIC8vICAgICAgIGdldHRlcnMgYXZhaWxhYmxlIGl0IHdpbGwgc2V0IHRoZSBvcmRlciB0byAtMS4KLSAgICAgICAgICAgIE9iamVjdE1ldGhvZCBnZXR0ZXIgPSBnZXRHZXR0ZXJNZXRob2QoIHJ1bGVFbnRyeS5zb3VyY2VUeXBlXywgcnVsZUVudHJ5LnNvdXJjZVByb3BlcnR5XyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiggZ2V0dGVyLm9yZGVyID09IC0xICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAllbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTyAsICJkYXRhIiwgNTAwNSwgdGhpcywgInByb2Nlc3MiLCAiICA+Pk5vIGdldHRlciBmb3VuZCBmb3IgcHJvcGVydHk6ICIgKyBzZXR0ZXJNZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIGN1cnJlbnRPYmplY3RNZXRob2Qub3JkZXIgPCBnZXR0ZXIub3JkZXIgKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtb3JlIHJlY2VudCBnZXR0ZXIuCi0gICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RNZXRob2QgPSBnZXR0ZXI7Ci0gICAgICAgICAgICAgIGN1cnJlbnRSdWxlRW50cnkgPSBydWxlRW50cnk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICAKLSAgICAgICAgaWYoIGN1cnJlbnRPYmplY3RNZXRob2Qub3JkZXIgIT0gLTEgKQotICAgICAgICB7Ci0gICAgICAgICAgaW52b2tlTWV0aG9kKCBjdXJyZW50T2JqZWN0TWV0aG9kLm9iamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0TWV0aG9kLm1ldGhvZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyTWV0aG9kLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSdWxlRW50cnkudHJhbnNmb3JtZXJfICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIAllbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImRhdGEiLCA1MDA2LCB0aGlzLCAicHJvY2VzcyIsICIgID4+Tm8gcnVsZSBmb3VuZCBmb3Igc2V0dGVyOiAiICsgc2V0dGVyTWV0aG9kLmdldE5hbWUoKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgIAotICB9Ci0gIAotICAvKioKLSAgICogRmluZCBhbGwgdGhlIHNldHRlcnMgZm9yIHRoaXMgb2JqZWN0IGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdGhlbS4KLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3QKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0U2V0dGVyTGlzdCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBWZWN0b3IgcmVzdWx0ID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBNZXRob2QgIG1ldGhvZCAgICAgPSBtZXRob2RzW2luZGV4XTsKLSAgICAgIGJvb2xlYW4gaXNQdWJsaWMgICA9IE1vZGlmaWVyLmlzUHVibGljKCBtZXRob2QuZ2V0TW9kaWZpZXJzKCkgKTsKLSAgICAgIENsYXNzICAgcmV0dXJuVHlwZSA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0gICAgCi0gICAgICBpZiggaXNQdWJsaWMgJiYgCi0gICAgICAgICAgcmV0dXJuVHlwZSA9PSBWb2lkLlRZUEUgJiYgCi0gICAgICAgICAgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDEgJiYKLSAgICAgICAgICBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoICJzZXQiICkpCi0gICAgICB7Ci0gICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7Ci0gICAgICAgIHJlc3VsdC5hZGQoIG1ldGhvZCApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIE9iamVjdE1ldGhvZCBnZXRHZXR0ZXJNZXRob2QoIFN0cmluZyBzb3VyY2VUeXBlLCBTdHJpbmcgc291cmNlUHJvcGVydHkgKQotICB7Ci0gICAgQ2xhc3NFbnRyeSAgIGNsYXNzRW50cnkgPSAoQ2xhc3NFbnRyeSljbGFzc1RhYmxlXy5nZXQoIHNvdXJjZVR5cGUgKTsKLSAgICBPYmplY3RNZXRob2QgZ2V0dGVyRm91bmQgPSBuZXcgT2JqZWN0TWV0aG9kKCk7Ci0gICAgCi0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBnZXR0ZXIgeWV0LgotICAgIGdldHRlckZvdW5kLm9yZGVyID0gLTE7Ci0gICAgCi0gICAgaWYoIGNsYXNzRW50cnkgIT0gbnVsbCApCi0gICAgewotICAgICAgT2JqZWN0IGxhc3RPYmplY3QgPSBjbGFzc0VudHJ5LmdldExhc3RPYmplY3QoKTsKLSAgICAgIAotICAgICAgaWYoIGxhc3RPYmplY3QgIT0gbnVsbCApCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgaWYoIGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBCdWlsZCB0aGUgZ2V0dGVyIGxpc3QuCi0gICAgICAgICAgY2xhc3NFbnRyeS5nZXR0ZXJMaXN0XyA9IGdldEdldHRlckxpc3QoIGxhc3RPYmplY3QgKTsKLSAgICAgICAgfQotICAgICAgCi0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGFzc0VudHJ5LmdldHRlckxpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBNZXRob2QgZ2V0dGVyID0gKE1ldGhvZCljbGFzc0VudHJ5LmdldHRlckxpc3RfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgICAgCi0gICAgICAgICAgaWYoIGdldHRlci5nZXROYW1lKCkuZXF1YWxzKCAiZ2V0IiArIHNvdXJjZVByb3BlcnR5ICkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZ2V0dGVyRm91bmQub3JkZXIgID0gY2xhc3NFbnRyeS5nZXRMYXN0T3JkZXIoKTsKLSAgICAgICAgICAgIGdldHRlckZvdW5kLm1ldGhvZCA9IGdldHRlcjsKLSAgICAgICAgICAgIGdldHRlckZvdW5kLm9iamVjdCA9IGxhc3RPYmplY3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGdldHRlckZvdW5kOwotICB9Ci0gIAotICBwcml2YXRlIFZlY3RvciBnZXRHZXR0ZXJMaXN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgTWV0aG9kW10gbWV0aG9kcyA9IG9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIE1ldGhvZCAgbWV0aG9kICAgICA9IG1ldGhvZHNbaW5kZXhdOwotICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotICAgICAgQ2xhc3MgICByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLSAgICAKLSAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLSAgICAgICAgICByZXR1cm5UeXBlICE9IFZvaWQuVFlQRSAmJiAKLSAgICAgICAgICBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCAmJgotICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggImdldCIgKSkKLSAgICAgIHsKLSAgICAgICAgbWV0aG9kLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLSAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSB2b2lkIGludm9rZU1ldGhvZCggT2JqZWN0ICAgICAgc291cmNlT2JqZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kICAgICAgc291cmNlTWV0aG9kICwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAgICAgIGNsaWVudE9iamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCAgICAgIGNsaWVudE1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpCi0gIHsgIAkKLSAgCU9iamVjdCBkYXRhID0gbnVsbDsKLSAgCSAgCSAgCQotICAJdHJ5Ci0gIAl7Ci0gIAkgIGRhdGEgPSBzb3VyY2VNZXRob2QuaW52b2tlKCBzb3VyY2VPYmplY3QsIG5ldyBPYmplY3RbMF0gKTsKLSAgCX0KLSAgCWNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0gIAl7Ci0gIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIC8vIHBnbSBOZWVkIHRvIGV4dGVybmFsaXplIHRoaXMgc3RyaW5nLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByb3ZpZGVyIFwiIiArIHNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgdGhyZXcgYW4gZXhjZXB0aW9uLiIgKTsKLSAgCX0KLSAgCWNhdGNoKCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGV4YyApCi0gIAl7Ci0gIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIC8vIHBnbSBOZWVkIHRvIGV4dGVybmFsaXplIHRoaXMgc3RyaW5nLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByb3ZpZGVyIFwiIiArIHNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIHRocmV3IGFuIGV4Y2VwdGlvbi4iICk7Ci0gIAl9Ci0gIAkKLSAgCWVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiZGF0YSIsIDUwMDcsIHRoaXMsICJpbnZva2VNZXRob2QgIiwiICBTZXR0aW5nIHByb3A6ICIgKyBjbGllbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBkYXRhPSIgKyBkYXRhICsgIiBmcm9tOiAiICsgc291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICk7Ci0gIAkKLSAgCQotICAJaWYoIHRyYW5zZm9ybWVyICE9IG51bGwgKQotICAJewotICAJICBkYXRhID0gdHJhbnNmb3JtZXIudHJhbnNmb3JtKCBkYXRhICk7ICAJICAgIAotICAJfQotICAJCi0gIAl0cnkKLSAgCXsgIAkgIAotICAJICBjbGllbnRNZXRob2QuaW52b2tlKCBjbGllbnRPYmplY3QsIG5ldyBPYmplY3RbXXsgZGF0YSB9ICk7Ci0gIAl9Ci0gIAljYXRjaCggSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBleGMgKQotICAJewotICAJICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAvLyBwZ20gTmVlZCB0byBleHRlcm5hbGl6ZSB0aGlzIHN0cmluZy4KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJDbGllbnQgXCIiICsgY2xpZW50T2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiB0aHJldyBhbiBleGNlcHRpb24uIiApOwotICAJfQotICAJY2F0Y2goIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXhjICkKLSAgCXsKLSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgLy8gcGdtIE5lZWQgdG8gZXh0ZXJuYWxpemUgdGhpcyBzdHJpbmcuCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQ2xpZW50IFwiIiArIGNsaWVudE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgdGhyZXcgYW4gZXhjZXB0aW9uLiIgKTsKLSAgCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBPYmplY3RNZXRob2QKLSAgewotICAgIHB1YmxpYyBPYmplY3Qgb2JqZWN0OwotICAgIHB1YmxpYyBNZXRob2QgbWV0aG9kOwotICAgIHB1YmxpYyBpbnQgICAgb3JkZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMDM3MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotcHVibGljIGludGVyZmFjZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5Ci17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgZGF0YSBtYXBwaW5nIGZyb20gYSBzb3VyY2Ugb2JqZWN0IHRvIGEgdGFyZ2V0Ci0gICAqIG9iamVjdC4gIFdoZW4gdGhlIHNvdXJjZU9iamVjdCBpcyBlbmNvdW50ZXJlZCBieSB0aGUgZnJhbWV3b3JrIHRoZQotICAgKiBzb3VyY2VQcm9wZXJ0eSB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICAqIHRhcmdldFByb3BlcnR5IGluIHRoZSB0YXJnZXRPYmplY3QuICBJZiBhIHRyYW5zZm9ybWVyIG9iamVjdCBpcwotICAgKiBzcGVjaWZpZWQgdGhlIHNvdXJjZU9iamVjdCBpcyB0cmFuc2Zvcm1lZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvCi0gICAqIHRoZSB0YXJnZXQgb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHNvdXJjZVR5cGUgICAgICBUaGUgc291cmNlIG9iamVjdC4KLSAgICogQHBhcmFtIHNvdXJjZVByb3BlcnR5ICBUaGUgc291cmNlIHByb3BlcnR5LgotICAgKiBAcGFyYW0gdGFyZ2V0VHlwZSAgICAgIFRoZSB0YXJnZXQgb2JqZWN0LgotICAgKiBAcGFyYW0gdGFyZ2V0UHJvcGVydHkgIFRoZSB0YXJnZXQgcHJvcGVydHkuCi0gICAqIEBwYXJhbSB0cmFuc2Zvcm1lciAgICAgVGhlIHRyYW5zZm9ybWVyIG9iamVjdCB0aGF0IHRyYW5zZm9ybXMgdGhlCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKCBDbGFzcyAgICAgICBzb3VyY2VUeXBlLAotCQkJCQkJICBTdHJpbmcgICAgICBzb3VyY2VQcm9wZXJ0eSwKLQkJCQkJCSAgQ2xhc3MgICAgICAgdGFyZ2V0VHlwZSwKLQkJCQkJCSAgU3RyaW5nICAgICAgdGFyZ2V0UHJvcGVydHksCi0JCQkJCQkgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byB0aGUgYWJvdmUgd2l0aCB0YXJnZXRQcm9wZXJ0eSB0aGUgc2FtZQotICAgKiBhcyB0aGUgc291cmNlUHJvcGVydHkgYW5kIHdpdGggdGhlIHRyYW5zZm9ybWVyIHNldCB0byBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIHNvdXJjZVR5cGUgICAgIFRoZSBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcGFyYW0gc291cmNlUHJvcGVydHkgVGhlIHNvdXJjZSBwcm9wZXJ0eS4KLSAgICogQHBhcmFtIHRhcmdldFR5cGUgICAgIFRoZSB0YXJnZXQgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTWFwcGluZyggQ2xhc3MgICAgICAgc291cmNlVHlwZSwKLQkgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgc291cmNlUHJvcGVydHksCi0JICAgICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgIHRhcmdldFR5cGUgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhNWYyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLQotcHVibGljIGNsYXNzIERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsIGltcGxlbWVudHMgRGF0YU1hcHBpbmdSZWdpc3RyeQoteyAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIHJ1bGVzVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UnVsZUVudHJpZXMoIFN0cmluZyB0YXJnZXRUeXBlICkKLSAgewotICAgIHJldHVybiAoVmVjdG9yKXJ1bGVzVGFibGVfLmdldCggdGFyZ2V0VHlwZSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5I2FkZE1hcHBpbmcoamF2YS5sYW5nLkNsYXNzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2xhc3MsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKCBDbGFzcyBzb3VyY2VUeXBlLCBTdHJpbmcgc291cmNlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIHRhcmdldFR5cGUsIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKSAKLSAgewotICAgIFZlY3RvciAgICBydWxlRW50cmllcyA9IChWZWN0b3IpcnVsZXNUYWJsZV8uZ2V0KCB0YXJnZXRUeXBlLmdldE5hbWUoKSApOwotICAgIFJ1bGVFbnRyeSBydWxlRW50cnkgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHJ1bGVFbnRyaWVzID09IG51bGwgKQotICAgIHsKLSAgICAgIHJ1bGVFbnRyaWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgcnVsZXNUYWJsZV8ucHV0KCB0YXJnZXRUeXBlLmdldE5hbWUoKSwgcnVsZUVudHJpZXMgKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgcnVsZSBlbnRyeQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBydWxlRW50cmllcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFJ1bGVFbnRyeSBuZXdFbnRyeSA9IChSdWxlRW50cnkpcnVsZUVudHJpZXMuZWxlbWVudEF0KCBpbmRleCApOwotICAgIAotICAgICAgaWYoIHNvdXJjZVByb3BlcnR5LmVxdWFscyggbmV3RW50cnkuc291cmNlUHJvcGVydHlfICkgJiYKLSAgICAgICAgICBzb3VyY2VUeXBlLmVxdWFscyggbmV3RW50cnkuc291cmNlVHlwZV8gKSAmJgotICAgICAgICAgIHRhcmdldFByb3BlcnR5LmVxdWFscyggbmV3RW50cnkudGFyZ2V0UHJvcGVydHlfICkgKQotICAgICAgewotICAgICAgICAvLyBUaGUgZW50cnkgYWxyZWFkeSBleGlzdHMKLSAgICAgICAgcnVsZUVudHJ5ID0gbmV3RW50cnk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiggcnVsZUVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFRoZSBydWxlIGRpZG4ndCBleGlzdCBhbHJlYWR5IHNvIHdlIHdpbGwgY3JlYXRlIGEgbmV3IG9uZS4KLSAgICAgIHJ1bGVFbnRyeSA9IG5ldyBSdWxlRW50cnkoc291cmNlVHlwZS5nZXROYW1lKCksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgdHJhbnNmb3JtZXIgKTsKLSAgICAgIHJ1bGVFbnRyaWVzLmFkZCggcnVsZUVudHJ5ICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBKdXN0IHVwZGF0ZSB0aGUgdHJhbnNmb3JtZXIuCi0gICAgICBydWxlRW50cnkudHJhbnNmb3JtZXJfID0gdHJhbnNmb3JtZXI7ICAKLSAgICB9Ci0gIH0KLSAgICAKLSAgICAvL3J1bGVFbnRyaWVzXy4KLS8vICAgIFN0cmluZyAgICBzb3VyY2VDbGFzcyA9IHNvdXJjZVR5cGUuZ2V0TmFtZSgpOwotLy8gICAgU3RyaW5nICAgIHRhcmdldENsYXNzID0gdGFyZ2V0VHlwZS5nZXROYW1lKCk7Ci0vLyAgICBWZWN0b3IgICAgZW50cmllcyAgICAgPSAoVmVjdG9yKXJ1bGVFbnRyaWVzXy5nZXQoIHNvdXJjZUNsYXNzICk7IAotLy8gICAgUnVsZUVudHJ5IHJ1bGVFbnRyeSAgID0gbnVsbDsKLS8vICAgIAotLy8gICAgaWYoIGVudHJpZXMgIT0gbnVsbCApCi0vLyAgICB7Ci0vLyAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMuCi0vLyAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbnRyaWVzLnNpemUoKTsgaW5kZXgrKyApCi0vLyAgICAgIHsKLS8vICAgICAgICBSdWxlRW50cnkgZm91bmRFbnRyeSA9IChSdWxlRW50cnkpZW50cmllcy5lbGVtZW50QXQoIGluZGV4ICk7Ci0vLyAgICAgICAgCi0vLyAgICAgICAgaWYoIHNvdXJjZVByb3BlcnR5LmVxdWFscyggZm91bmRFbnRyeS5zb3VyY2VQcm9wZXJ0eV8gKSAmJgotLy8gICAgICAgICAgICB0YXJnZXRUeXBlLmVxdWFscyggZm91bmRFbnRyeS50YXJnZXRUeXBlXyApICYmCi0vLyAgICAgICAgICAgIHRhcmdldFByb3BlcnR5LmVxdWFscyggZm91bmRFbnRyeS50YXJnZXRQcm9wZXJ0eV8gKSApCi0vLyAgICAgICAgewotLy8gICAgICAgICAgcnVsZUVudHJ5ID0gZm91bmRFbnRyeTsKLS8vICAgICAgICAgIHJ1bGVFbnRyeS50cmFuc2Zvcm1lcl8gPSB0cmFuc2Zvcm1lcjsKLS8vICAgICAgICB9Ci0vLyAgICAgIH0KLS8vICAgICAgCi0vLyAgICAgIC8vIFRoZXJlIGlzIGFuIGV4aXN0aW5nIHZlY3RvciBmb3IgdGhpcyBzb3VyY2VDbGFzcywgYnV0IGl0IGRpZG4ndAotLy8gICAgICAvLyBjb250YWluIHRoaXMgbmV3IHJ1bGUgc28gd2Ugd2lsbCBhZGQgaXQgaW4uCi0vLyAgICAgIGlmKCBydWxlRW50cnkgPT0gbnVsbCApCi0vLyAgICAgIHsKLS8vICAgICAgICBydWxlRW50cnkgPSBuZXcgUnVsZUVudHJ5KCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0Q2xhc3MsIHRhcmdldFByb3BlcnR5LCB0cmFuc2Zvcm1lciApOwotLy8gICAgICAgIGVudHJpZXMuYWRkKCBydWxlRW50cnkgKTsKLS8vICAgICAgfQotLy8gICAgfQotLy8gICAgZWxzZQotLy8gICAgewotLy8gICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB2ZWN0b3IgZm9yIHRoaXMgc291cmNlQ2xhc3MuCi0vLyAgICAgIGVudHJpZXMgPSBuZXcgVmVjdG9yKCk7Ci0vLyAgICAgIHJ1bGVFbnRyeSA9IG5ldyBSdWxlRW50cnkoIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRDbGFzcywgdGFyZ2V0UHJvcGVydHksIHRyYW5zZm9ybWVyICk7Ci0vLyAgICAgIGVudHJpZXMuYWRkKCBydWxlRW50cnkgKTsKLS8vICAgICAgcnVsZUVudHJpZXNfLnB1dCggc291cmNlQ2xhc3MsIGVudHJpZXMgKTsgIAotLy8gICAgfSAgICAKLS8vICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5I2FkZE1hcHBpbmcoamF2YS5sYW5nLkNsYXNzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2xhc3MpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKENsYXNzIHNvdXJjZVR5cGUsIFN0cmluZyBzb3VyY2VQcm9wZXJ0eSwgQ2xhc3MgdGFyZ2V0VHlwZSkgCi0gIHsKLSAgICBhZGRNYXBwaW5nKCBzb3VyY2VUeXBlLCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0VHlwZSwgc291cmNlUHJvcGVydHksIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9SdWxlRW50cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvUnVsZUVudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTA5MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9SdWxlRW50cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi0KLXB1YmxpYyBjbGFzcyBSdWxlRW50cnkgCi17Ci0gIHB1YmxpYyBTdHJpbmcgICAgICBzb3VyY2VUeXBlXzsKLSAgcHVibGljIFN0cmluZyAgICAgIHNvdXJjZVByb3BlcnR5XzsKLSAgcHVibGljIFN0cmluZyAgICAgIHRhcmdldFByb3BlcnR5XzsKLSAgcHVibGljIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyXzsKLSAgCi0gCi0gIHB1YmxpYyBSdWxlRW50cnkoIFN0cmluZyBzb3VyY2VUeXBlLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSwgCi0gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyICkKLSAgewotICAgIHNvdXJjZVR5cGVfICAgICA9IHNvdXJjZVR5cGU7Ci0gICAgc291cmNlUHJvcGVydHlfID0gc291cmNlUHJvcGVydHk7Ci0gICAgdGFyZ2V0UHJvcGVydHlfID0gdGFyZ2V0UHJvcGVydHk7ICAgIAotICAgIHRyYW5zZm9ybWVyXyAgICA9IHRyYW5zZm9ybWVyOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1RyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1RyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ODBhNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byB0cmFuc2Zvcm0gYW4gb2JqZWN0IGZyb20gb25lIGNsYXNzIHRvIGFub3RoZXIuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRyYW5zZm9ybWVyCi17Ci0gIC8qCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHRyYW5zZm9ybWVkIG9iamVjdCBiYXNlZCBvbiB0aGUgaW5wdXQgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybSggT2JqZWN0IHZhbHVlICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9BYnN0cmFjdENvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkMDY3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9BYnN0cmFjdENvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgYXMgdGhlIGJhc2UgY2xhc3MgZm9yIG90aGVyIHN0YW5kYXJkIGZyYWdtZW50IGNsYXNzZXMuCi0gICogCi0qKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCBpbXBsZW1lbnRzIENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIENvbW1hbmRGYWN0b3J5IGNvbW1hbmRGYWN0b3J5XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICBpZF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDb3B5IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gZnJhZ21lbnQKLSAgICovCi0gIHByb3RlY3RlZCBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCggQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgY29tbWFuZEZhY3RvcnlfID0gZnJhZ21lbnQuY29tbWFuZEZhY3RvcnlfOwotICAgIGlkXyAgICAgICAgICAgICA9IGZyYWdtZW50LmlkXzsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IEFic3RyYWN0Q29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdXRhYmxlIGNvbW1hbmQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQoIENvbW1hbmRGYWN0b3J5IGNvbW1hbmRGYWN0b3J5LCBTdHJpbmcgaWQgKQotICB7Ci0gICAgY29tbWFuZEZhY3RvcnlfID0gY29tbWFuZEZhY3Rvcnk7ICAKLSAgICBpZF8gICAgICA9IGlkOwotICB9IAotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWRfOwotICB9Ci0gICAKLSAgcHVibGljIHZvaWQgc2V0SWQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpZF8gPSBpZDsgCi0gIH0KLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgZXhlY3V0YWJsZSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnkgZ2V0Q29tbWFuZEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIGNvbW1hbmRGYWN0b3J5XzsKLSAgfQotICAKLSAgLyoqCi0gICAqICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICAgIC8vIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3QgdG8gYWRkIGFueSBlbnRyaWVzIHRvIHRoZSByZWdpc3RyeS4KLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIElmIHRoZSBjb21tYW5kcyBmb3IgdGhpcyBmcmFnbWVudCBzaG91bGQgbm90IGJlIHJ1biB3aXRoaW4gYSB0cmFuc2FjdGlvbiB0aGVuCi0gICAqIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdHJ1ZS4gIElmIHRoZSBmcmFnbWVudCBkb2VzIG5vdCBjYXJlIGlmIGl0IGlzIHJ1biBpbiBhIHRyYW5zYWN0aW9uCi0gICAqIG9yIG5vdCBpdCBzaG91bGQgcmV0dXJuIGZhbHNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uKCkKLSAgewotICAgIHJldHVybiBkb05vdFJ1bkluVHJhbnNhY3Rpb25fOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgcnVuIGluIHRyYW5zYWN0aW9uIHByb3BlcnR5LgotICAgKiBAcGFyYW0gZG9Ob3RSdW5JblRyYW5zYWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb05vdFJ1bkluVHJhbnNhY3Rpb24oIGJvb2xlYW4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uICkKLSAgewotICAgIGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBkb05vdFJ1bkluVHJhbnNhY3Rpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgICogQWxsIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIGFic3RyYWN0IHB1YmxpYyBPYmplY3QgY2xvbmUoKTsgIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Jvb2xlYW5GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQm9vbGVhbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NmIzNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQm9vbGVhbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIHJldHVybnMgZWl0aGVyIHRoZSB0cnVlIGZyYWdtZW50IG9yIHRoZSBmYWxzZSBmcmFnbWVudAotICAqIGJhc2VkIG9uIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjb25kaXRpb24gb2JqZWN0LgotKiovCi1wdWJsaWMgY2xhc3MgQm9vbGVhbkZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnQgdHJ1ZUZyYWdtZW50XzsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnQgZmFsc2VGcmFnbWVudF87Ci0gIHByaXZhdGUgQ29uZGl0aW9uICAgICAgIGNvbmRpdGlvbl87Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIEJvb2xlYW5GcmFnbWVudCB3aXRoIGRlZmF1bHQgdmFsdWVzLgotICAgKgotICAgKi8KLSAgcHVibGljIEJvb2xlYW5GcmFnbWVudCgpCi0gIHsKLSAgICB0aGlzKCBudWxsLCBudWxsLCBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0sIAotICAgICAgICAgICAgICAgICAgICAgIG51bGwsICIiICk7ICAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gdHJ1ZUZyYWdtZW50ICBUaGUgZnJhZ21lbnQgY2hvc2VuIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICogQHBhcmFtIGZhbHNlRnJhZ21lbnQgVGhlIGZyYWdtZW50IGNob3NlbiBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLgotICAgKiBAcGFyYW0gY29uZGl0aW9uICAgICBUaGUgY29uZGl0aW9uLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW5GcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IHRydWVGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50IGZhbHNlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiAgICAgICBjb25kaXRpb24gKQotICB7Ci0gICAgdGhpcyggdHJ1ZUZyYWdtZW50LCBmYWxzZUZyYWdtZW50LCBjb25kaXRpb24sIG51bGwsICIiICk7Ci0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gIC8qKgotICAgICogQ3JlYXRlcyBhIG5ldyBCb29sZWFuRnJhZ21lbnQuCi0gICAgKgotICAgICogQHBhcmFtIHRydWVGcmFnbWVudCByZXR1cm5lZCBpZiBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICAqIEBwYXJhbSBmYWxzZUZyYWdtZW50IHJldHVybmVkIGlmIGNvbmRpdGlvbiBpcyBmYWxzZS4KLSAgICAqIEBwYXJhbSBjb25kaXRpb24gdGhlIGNvbmRpdGlvbiBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSBjb25kaXRpb24uCi0gICAgKiBAcGFyYW0gY29tbWFuZCB0aGUgZXhlY3RhYmxlIGNvbW1hbmQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgQm9vbGVhbkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgIHRydWVGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudCBmYWxzZUZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uICAgICAgIGNvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGYWN0b3J5ICBjb21tYW5kRmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICBpZCApCi0gIHsKLSAgICBzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0KLSAgICB0cnVlRnJhZ21lbnRfICAgICAgID0gdHJ1ZUZyYWdtZW50OwotICAgIGZhbHNlRnJhZ21lbnRfICAgICAgPSBmYWxzZUZyYWdtZW50OwotICAgIGNvbmRpdGlvbl8gICAgICAgICAgPSBjb25kaXRpb247IAotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgY29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmcmFnCi0gICAqLwotICBwcm90ZWN0ZWQgQm9vbGVhbkZyYWdtZW50KCBCb29sZWFuRnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgICB0aGlzKCBudWxsLAotICAgIAkgIG51bGwsCi0gICAgCSAgZnJhZy5jb25kaXRpb25fLAotICAgIAkgIGZyYWcuZ2V0Q29tbWFuZEZhY3RvcnkoKSwKLSAgICAJICBmcmFnLmdldElkKCkgKTsKLQotICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNsb25lIGluIHRoZSB0cnVlIGFuZCBmYWxzZQotICAgIC8vIGZyYWdtZW50cy4KLSAgICB0cnVlRnJhZ21lbnRfICA9IChDb21tYW5kRnJhZ21lbnQpdHJ1ZUZyYWdtZW50Xy5jbG9uZSgpOwotICAgIGZhbHNlRnJhZ21lbnRfID0gKENvbW1hbmRGcmFnbWVudClmYWxzZUZyYWdtZW50Xy5jbG9uZSgpOwotICB9Ci0gIAotICAvKioKLSAgICAqIE1ha2VzIGEgY29weSBvZiB0aGUgQ29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7ICAgIAotICAgIHJldHVybiBjb25kaXRpb25fLmV2YWx1YXRlKCkgPyB0cnVlRnJhZ21lbnRfIDogZmFsc2VGcmFnbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjb25kaXRpb24uCi0gICAqIEBwYXJhbSBjb25kaXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbmRpdGlvbiggQ29uZGl0aW9uIGNvbmRpdGlvbiApCi0gIHsKLSAgICBjb25kaXRpb25fID0gY29uZGl0aW9uOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHRydWUgZnJhZ21lbnQuCi0gICAqIEBwYXJhbSBmcmFnbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHJ1ZUZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgdHJ1ZUZyYWdtZW50XyA9IGZyYWdtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgZmFsc2UgZnJhZ21lbnQuCi0gICAqIEBwYXJhbSBmcmFnbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFsc2VGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIGZhbHNlRnJhZ21lbnRfID0gZnJhZ21lbnQ7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9DaG9pY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ2hvaWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjNzcyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9DaG9pY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkV2YWx1YXRlOwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgcmV0dXJucyBhIGZyYWdtZW50IGZyb20gYSBsaXN0IG9mIGZyYWdtZW50cyBiYXNlZAotICAqIG9uIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgRXZhbHVhdGUgb2JqZWN0LgotKiovCi1wdWJsaWMgY2xhc3MgQ2hvaWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCAKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICBmcmFnbWVudFRhYmxlXzsKLSAgcHJpdmF0ZSBFdmFsdWF0ZSAgICAgICBldmFsdWF0ZV87Ci0KLSAgLyoqCi0gICAgKiBDcmVhdGUgYSBjbG9uZSB3aXRoIG5ldyBhIG5ldyBoYXNodGFibGUuCi0gICoqLwotICBwcm90ZWN0ZWQgQ2hvaWNlRnJhZ21lbnQoIENob2ljZUZyYWdtZW50IGZyYWcgKQotICB7Ci0gICAgc3VwZXIoIGZyYWcuZ2V0Q29tbWFuZEZhY3RvcnkoKSwgZnJhZy5nZXRJZCgpICk7Ci0gICAgCi0gICAgZXZhbHVhdGVfICAgICAgPSBmcmFnLmV2YWx1YXRlXzsKLSAgICBmcmFnbWVudFRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgIAotICAgIEVudW1lcmF0aW9uIGtleXMgPSBmcmFnLmZyYWdtZW50VGFibGVfLmtleXMoKTsKLQotICAgIC8vIENsb25lIHRoZSBmcmFnbWVudHMgaW4gdGhlIHRhYmxlLgotICAgIHdoaWxlKCBrZXlzLmhhc01vcmVFbGVtZW50cygpICkKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0ga2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgZnJhZ21lbnRUYWJsZV8ucHV0KCBrZXksICgoQ29tbWFuZEZyYWdtZW50KWZyYWcuZnJhZ21lbnRUYWJsZV8uZ2V0KGtleSkpLmNsb25lKCkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBDaG9pY2VGcmFnbWVudCggT2JqZWN0W10gICAgICAgICAga2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnRbXSBmcmFnbWVudHMgKQotICB7Ci0gIAl0aGlzKCBrZXlzLCBmcmFnbWVudHMsIG51bGwsIG51bGwsICIiICk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgQ2hvaWNlRnJhZ21lbnQoIE9iamVjdFtdICAgICAgICAgIGtleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50W10gZnJhZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEV2YWx1YXRlICAgICAgICAgIGV2YWx1YXRlICkKLSAgewotICAJdGhpcygga2V5cywgZnJhZ21lbnRzLCBldmFsdWF0ZSwgbnVsbCwgIiIgKTsKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEV2YWx1YXRlKCBFdmFsdWF0ZSBldmFsdWF0ZSApCi0gIHsKLSAgICBldmFsdWF0ZV8gPSBldmFsdWF0ZTsgIAotICB9Ci0gIAotICAvKioKLSAgICAqIENvbnN0cnVjdHMgYSBjaG9pY2UgZnJhZ21lbnQuICBUaGUga2V5IGF0IGluZGV4IFggaXMgbWFwcGVkIHRvIAotICAgICogdG8gdGhlIGZyYWdtZW50IGF0IGluZGV4IFguCi0gICAgKgotICAgICogQHBhcmFtIGtleXMgdGhlc2Uga2V5cyBtdXN0IGJlIHVuaXF1ZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBlcXVhbHMgbWV0aG9kLgotICAgICogVGhleSBhcmUgdXNlZCB0byBpZGVudGlmeSB3aGljaCBmcmFnbWVudCB0byByZXR1cm4uCi0gICAgKiBAcGFyYW0gZnJhZ21lbnRzIHRoZXNlIGFyZSB0aGUgZnJhZ21lbnRzIHRvIGJlIHJldHVybmVkLiAgTnVsbCBpcyBub3QgYWxsb3dlZAotICAgICogYXMgYW4gZW50cnkgaW4gdGhlIGFycmF5LgotICAgICogQHBhcmFtIGV2YWx1YXRlIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhpcyBldmFsdWF0ZSBvYmplY3QgaXMgdXNlZAotICAgICogYXMgdGhlIGtleSB0byBsb2NhdGUgYSBmcmFnbWVudC4KLSAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgcGFzc2VkIHRvIGV2YWx1YXRlLgotICAqKi8KLSAgcHVibGljIENob2ljZUZyYWdtZW50KCBPYmplY3RbXSAgICAgICAgICBrZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudFtdIGZyYWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZSAgICAgICAgICBldmFsdWF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRmFjdG9yeSAgICBjb21tYW5kRmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICBpZCApCi0gIHsKLSAgICBzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0KLSAgICBldmFsdWF0ZV8gICAgICA9IGV2YWx1YXRlOwotICAgIGZyYWdtZW50VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgaWYoIGtleXMgPT0gbnVsbCB8fCBmcmFnbWVudHMgPT0gbnVsbCB8fCBrZXlzLmxlbmd0aCAhPSBmcmFnbWVudHMubGVuZ3RoICkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQmFkIGtleXMgb3IgZnJhZ21lbnRzLiIgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSB0aGUgZnJhZ21lbnQgdGFibGUuCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBmcmFnbWVudFRhYmxlXy5wdXQoIGtleXNbaW5kZXhdLCBmcmFnbWVudHNbaW5kZXhdICk7Ci0gICAgICB9ICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgICogTWFrZXMgYSBjb3B5IG9mIHRoZSBDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENob2ljZUZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7ICAgIAotICAgIE9iamVjdCBrZXkgICAgICAgICAgICAgID0gZXZhbHVhdGVfLmV2YWx1YXRlKCk7Ci0gICAgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gKENvbW1hbmRGcmFnbWVudClmcmFnbWVudFRhYmxlXy5nZXQoa2V5KTsKLQotICAgIGlmKCBmcmFnbWVudCA9PSBudWxsICkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiS2V5IG5vdCBmb3VuZCBpbiB0YWJsZS4gS2V5PSIgKyBrZXkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGYWN0b3J5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGYWN0b3J5RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwNzVhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRmFjdG9yeUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQgaW1wbGVtZW50cyBDb21tYW5kRnJhZ21lbnQgCi17Ci0gIHByaXZhdGUgVmVjdG9yIGNvbW1hbmRzXzsKLSAgCi0gIC8qKgotICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBhbmQgcmV0dXJuCi0gICAqIGFuIENvbW1hbmRGYWN0b3J5LgotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpOwotICAKLSAgLyoqCi0gICAqIEFsbCB3aXphcmQgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgcHVibGljIGFic3RyYWN0IE9iamVjdCBjbG9uZSgpOwotICAKLSAgcHJvdGVjdGVkIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQoIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgICBjb21tYW5kc18gPSBmcmFnLmNvbW1hbmRzXzsgIAotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnlGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICAvKiogCi0gICAgKiBHZXRzIGV4ZWN1dGFibGUgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGYWN0b3J5IGdldENvbW1hbmRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsKLQlDb21tYW5kRnJhZ21lbnQgcmVzdWx0ID0gbnVsbDsKLQkKLSAgICBjb21tYW5kc18gPSBjcmVhdGVDb21tYW5kcygpOwkKLQotCWlmKCBjb21tYW5kc18uc2l6ZSgpID4gMCApCi0JewotCSAgcmVzdWx0ID0gKENoaWxkRnJhZ21lbnQpY29tbWFuZHNfLmVsZW1lbnRBdCgwKTsKLQl9Ci0JCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0JQ29tbWFuZEZyYWdtZW50IHJlc3VsdCA9IG51bGw7Ci0JCQotCWlmKCBjb21tYW5kc18gIT0gbnVsbCAmJiBmcmFnbWVudCBpbnN0YW5jZW9mIENoaWxkRnJhZ21lbnQgKSAKLQl7Ci0JICBDaGlsZEZyYWdtZW50IGNoaWxkID0gKENoaWxkRnJhZ21lbnQpZnJhZ21lbnQ7Ci0JICAKLQkgIGludCBpbmRleCA9IGNoaWxkLmluZGV4XzsKLQkKLSAgICAgIGlmKCBpbmRleCAhPSAtMSApCi0JICB7Ci0JICAgIGluZGV4Kys7Ci0JICAKLQkgICAgaWYoIGluZGV4IDwgY29tbWFuZHNfLnNpemUoKSApCi0JCXsKLQkJICByZXN1bHQgPSAoQ29tbWFuZEZyYWdtZW50KWNvbW1hbmRzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0JCX0KLQkgIH0KLQl9Ci0JCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSApCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBJZiB0aGUgY29tbWFuZHMgZm9yIHRoaXMgZnJhZ21lbnQgc2hvdWxkIG5vdCBiZSBydW4gd2l0aGluIGEgdHJhbnNhY3Rpb24gdGhlbgotICAgKiB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRydWUuICBJZiB0aGUgZnJhZ21lbnQgZG9lcyBub3QgY2FyZSBpZiBpdCBpcyBydW4gaW4gYSB0cmFuc2FjdGlvbgotICAgKiBvciBub3QgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvTm90UnVuSW5UcmFuc2FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBWZWN0b3IgY3JlYXRlQ29tbWFuZHMoKQotICB7Ci0JVmVjdG9yICAgICAgICAgIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ICA9IGdldElDb21tYW5kRmFjdG9yeSgpOwotCWludCAgICAgICAgICAgICBpbmRleCAgICA9IDA7Ci0JCSAgCi0Jd2hpbGUoIGZhY3RvcnkgIT0gbnVsbCAmJiBmYWN0b3J5Lmhhc05leHQoKSApCi0JewotCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY29tbWFuZCA9IGZhY3RvcnkuZ2V0TmV4dENvbW1hbmQoKTsKLQkJCQotCSAgY29tbWFuZHMuYWRkKCBuZXcgQ2hpbGRGcmFnbWVudCggY29tbWFuZCwgaW5kZXgrKyApICk7Ci0JfQotCQotCXJldHVybiBjb21tYW5kczsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBDaGlsZEZyYWdtZW50IGV4dGVuZHMgU2ltcGxlRnJhZ21lbnQKLSAgewotCSAgaW50IGluZGV4XzsKLQkKLQkgIHB1YmxpYyBDaGlsZEZyYWdtZW50KCBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjb21tYW5kLCBpbnQgaW5kZXggKQotCSAgewotCSAgICBzdXBlciggY29tbWFuZCwgY29tbWFuZC5nZXRJRCgpICk7Ci0JICAgIGluZGV4XyA9IGluZGV4OwotCSAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjc2MmE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi0KLS8qKgotICAqIFRoaXMgaW50ZXJmYWNlIGRlc2NyaWJlcyBhIGxpc3Qgb2YgaW50ZXJydXB0YWJsZSBjb21tYW5kcy4gIFRoZQotICAqIG9yZGVyIG9mIHRoaXMgbGlzdCBvZiBjb21tYW5kcyBpcyBkZWZpbmVkIGJ5IHRoZSBnZXRGaXJzdFN1YkZyYWdtZW50IGFuZAotICAqIGdldE5leHRTdWJGcmFnbWVudCBtZXRob2RzLgotKiovCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRGcmFnbWVudCBleHRlbmRzIENsb25lYWJsZQoteyAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgZXhlY3V0YWJsZSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnkgZ2V0Q29tbWFuZEZhY3RvcnkoKTsKLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApOwotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSApOwotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBJZiB0aGUgY29tbWFuZHMgZm9yIHRoaXMgZnJhZ21lbnQgc2hvdWxkIG5vdCBiZSBydW4gd2l0aGluIGEgdHJhbnNhY3Rpb24gdGhlbgotICAgKiB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRydWUuICBJZiB0aGUgZnJhZ21lbnQgZG9lcyBub3QgY2FyZSBpZiBpdCBpcyBydW4gaW4gYSB0cmFuc2FjdGlvbgotICAgKiBvciBub3QgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvTm90UnVuSW5UcmFuc2FjdGlvbigpOwotICAKLSAgLyoqCi0gICAgKiBBbGwgd2l6YXJkIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKTsgIAotfSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRFbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTExNjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMyAgIDEyOTIzMiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDMxMyAgIDEzMDk1OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDMyMyAgIDE3NTgwMCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDczMCAgIDE5NzE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBQYXNzIHByb2dyZXNzIG1vbml0b3IgdG8gdW5kbyBjb21tYW5kcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkVudmlyb25tZW50Q29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotCi0vKioKLSAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgcHJvdmlkZXMgYSBjb252aWVuZW50IHdheSB0byB0cmF2ZXJzZSBDb21tYW5kRnJhZ21lbnRzCi0gKiBhbmQgcG9zc2libGl0eSBleGVjdXRlIGl0cyBhc3NvY2lhdGUgQ29tbWFuZC4KLSAqLwotcHVibGljIGNsYXNzIENvbW1hbmRGcmFnbWVudEVuZ2luZSBpbXBsZW1lbnRzIENvbW1hbmRNYW5hZ2VyCi17Ci0gIHByaXZhdGUgU3RhY2sgICAgICAgICAgICBjb21tYW5kU3RhY2tfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgdW5kb0ZyYWdtZW50TGlzdGVuZXJfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgbmV4dEZyYWdtZW50TGlzdGVuZXJfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgYWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcl87Ci0gIHByaXZhdGUgRnJhZ21lbnRMaXN0ZW5lciBwZWVrRnJhZ21lbnRMaXN0ZW5lcl87Ci0gIHByaXZhdGUgRGF0YUZsb3dNYW5hZ2VyICBkYXRhTWFuYWdlcl87Ci0gIHByaXZhdGUgSUVudmlyb25tZW50ICAgICBlbnZpcm9ubWVudF87Ci0gIHByaXZhdGUgSVN0YXR1cyAgICAgICAgICBsYXN0U3RhdHVzXzsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgQ29tbWFuZEZyYWdtZW50RW5naW5lLgotICAgKiAKLSAgICogQHBhcmFtIHN0YXJ0RnJhZ21lbnQgdGhlIHJvb3QgZnJhZ21lbnQgd2hlcmUgdHJhdmVyc2FsIHdpbGwgYmVnaW4uCi0gICAqIEBwYXJhbSBkYXRhTWFuYWdlciB0aGUgZGF0YSBtYW5hZ2VyIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkYXRhIG1hcHBpbmdzLgotICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgdGhlIGVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEVuZ2luZSggQ29tbWFuZEZyYWdtZW50IHN0YXJ0RnJhZ21lbnQsIERhdGFGbG93TWFuYWdlciBkYXRhTWFuYWdlciwgSUVudmlyb25tZW50IGVudmlyb25tZW50ICkKLSAgewotICAJU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgCXJvb3QuYWRkKCBzdGFydEZyYWdtZW50ICk7Ci0gIAkgIAkKLSAgCWNvbW1hbmRTdGFja18gPSBuZXcgU3RhY2soKTsKLSAgCQotICAJYWRkVG9TdGFjayggcm9vdCwgLTEgKTsKLSAgCWFkZFRvU3RhY2soIHN0YXJ0RnJhZ21lbnQsIDAgKTsKLSAgCQotICAJZGF0YU1hbmFnZXJfID0gZGF0YU1hbmFnZXI7Ci0gIAllbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nICAgICAgbmV3bGluZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgICAgCi0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAKLSAgICBidWZmZXIuYXBwZW5kKG5ld2xpbmUpOwotICAgIGJ1ZmZlci5hcHBlbmQoIkNvbW1hbmQgc3RhY2sgc3RhcnQ6Iik7Ci0gICAgYnVmZmVyLmFwcGVuZChuZXdsaW5lKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tbWFuZFN0YWNrXy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRMaXN0RW50cnkgZW50cnkgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBlbnRyeS5kdW1wKGJ1ZmZlciwgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICBidWZmZXIuYXBwZW5kKCJDb21tYW5kIHN0YXJ0IGVuZDoiKTsKLSAgICBidWZmZXIuYXBwZW5kKG5ld2xpbmUpOwotICAgIAotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgRGF0YSBtYXBwaW5nIHJlZ2lzdHJ5LgotICAgKi8KLSAgcHVibGljIERhdGFNYXBwaW5nUmVnaXN0cnkgZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkKLSAgewotCXJldHVybiBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiB0aGUgU3RhdHVzIGZyb20gdGhlIGxhc3QgQ29tbWFuZCBleGVjdXRlZC4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldExhc3RTdGF0dXMoKQotICB7Ci0gICAgcmV0dXJuIGxhc3RTdGF0dXNfOwotICB9Ci0gIAotICAvKioKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kb0VuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuZXh0IGZyYWdtZW50IGxpc3RlbmVyIGZvciB0aGlzIGVuZ2luZS4gIFRoaXMgbGlzdGVuZXIgd2lsbCBiZQotICAgKiBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgdGhhdCBpcyB0cmF2ZXJzZWQgaW4gbW92ZUZvcndhcmRUb05leHRTdG9wIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgZnJhZ21lbnQgbGlzdGVuZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROZXh0RnJhZ21lbnRMaXN0ZW5lciggRnJhZ21lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBuZXh0RnJhZ21lbnRMaXN0ZW5lcl8gPSBsaXN0ZW5lcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lciggRnJhZ21lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBhZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyXyA9IGxpc3RlbmVyOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgbmV4dCBmcmFnbWVudCBsaXN0ZW5lciBmb3IgdGhpcyBlbmdpbmUuICBUaGlzIGxpc3RlbmVyIHdpbGwgYmUKLSAgICogY2FsbGVkIGZvciBlYWNoIGZyYWdtZW50IHRoYXQgaXMgdHJhdmVyc2VkIGluIHBlZWtGb3J3YXJkVG9OZXh0U3RvcCBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGZyYWdtZW50IGxpc3RlbmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGVla0ZyYWdtZW50TGlzdGVuZXIoIEZyYWdtZW50TGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcGVla0ZyYWdtZW50TGlzdGVuZXJfID0gbGlzdGVuZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBwZWVrIGZyYWdtZW50IGxpc3RlbmVyIGZvciB0aGlzIGVuZ2luZS4gIFRoaXMgbGlzdGVuZXIgd2lsbCBiZQotICAgKiBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgdGhhdCBpcyB0cmF2ZXJzZWQgaW4gdW5kb1RvTGFzdFN0b3Agb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBmcmFnbWVudCBsaXN0ZW5lci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVuZG9GcmFnbWVudExpc3RlbmVyKCBGcmFnbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHVuZG9GcmFnbWVudExpc3RlbmVyXyA9IGxpc3RlbmVyOwotICB9Ci0gIAotICAvKioKLSAgICogVHJhdmVyc2UgdGhlIENvbW1hbmRGcmFnbWVudHMgc3RhcnRpbmcgd2l0aCB0aGUgQ29tbWFuZEZyYWdtZW50IG9uIHRoZQotICAgKiB0b3Agb2YgdGhlIGNvbW1hbmQgZnJhZ21lbnQgc3RhY2suICBUaGUgb3BlcmF0aW9uIGRvZXMgTk9UIGNoYW5nZSB0aGUKLSAgICogY29tbWFuZCBmcmFnbWVudCBzdGFjayBhbmQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGgKLSAgICogYSBDb21tYW5kRnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwZWVrRm9yd2FyZFRvTmV4dFN0b3AoKQotICB7Ci0gIAlDb21tYW5kTGlzdEVudHJ5IHRvcEVudHJ5ICAgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7ICAJCi0gIAlpbnQgICAgICAgICAgICAgIHBhcmVudEluZGV4ICAgPSB0b3BFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAlDb21tYW5kRnJhZ21lbnQgIGNoaWxkRnJhZ21lbnQgPSB0b3BFbnRyeS5mcmFnbWVudF87IAotICAJYm9vbGVhbiAgICAgICAgICBjb250aW51ZUxvb3AgID0gbmF2aWdhdGVDaGlsZEZyYWdtZW50cyggY2hpbGRGcmFnbWVudCwgZmFsc2UgKTsKLSAgCSAgCQotICAJd2hpbGUoIHBhcmVudEluZGV4ICE9IC0xICYmIGNvbnRpbnVlTG9vcCApCi0gIAl7ICAJCi0gIAkgIENvbW1hbmRMaXN0RW50cnkgcGFyZW50RW50cnkgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmVsZW1lbnRBdCggcGFyZW50SW5kZXggKTsKLSAgCSAgQ29tbWFuZEZyYWdtZW50ICBwYXJlbnRGcmFnbWVudCA9IHBhcmVudEVudHJ5LmZyYWdtZW50XzsKLSAgCSAgQ29tbWFuZEZyYWdtZW50ICBuZXh0RnJhZ21lbnQgICA9IHBhcmVudEZyYWdtZW50LmdldE5leHRTdWJGcmFnbWVudCggY2hpbGRGcmFnbWVudCApOwotICAJICAKLSAgCSAgaWYoIG5leHRGcmFnbWVudCA9PSBudWxsICkKLSAgCSAgewotICAJICAJLy8gVGhlcmUgYXJlIG5vIG1vcmUgc2libGluZyBmcmFnbWVudHMgdG8gbmF2aWdhdGUgc28gd2Ugd2lsbCBwb3AgdXAgdG8gdGhlIHBhcmVudAotICAJICAJLy8gYW4gY29udGludWUgbmF2aWdhdGlvbiB0aGVyZS4KLSAgCSAgCXBhcmVudEluZGV4ICAgPSBwYXJlbnRFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAkgIAljaGlsZEZyYWdtZW50ID0gcGFyZW50RnJhZ21lbnQ7IAotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgeyAgCSAgCQotICAJICAJaWYoIG5hdmlnYXRlQ2hpbGRGcmFnbWVudHMoIG5leHRGcmFnbWVudCwgdHJ1ZSApICkgCi0gIAkgIAl7Ci0gIAkgIAkgIC8vIFdlIGFyZSBjb250aW51aW5nIHRvIG5hdmlnYXRlLiAgVGhpcyB0aW1lIHdlIHdhbnQgdG8gdHJhdmVyc2UgdGhlIHNpYmxpbmcKLSAgCSAgCSAgLy8gb2YgbmV4dEZyYWdtZW50LiAKLSAgCSAgCSAgY2hpbGRGcmFnbWVudCA9IG5leHRGcmFnbWVudDsKLSAgCSAgCX0KLSAgCSAgCWVsc2UKLSAgCSAgCXsKLSAgCSAgCSAgLy8gV2UgYXJlIHN0b3BwaW5nIG91ciBuYXZpZ2F0aW9uLgotICAJICAJICBjb250aW51ZUxvb3AgPSBmYWxzZTsKLSAgCSAgCX0KLSAgCSAgfQotICAJfQotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIFRyYXZlcnNlIHRoZSBDb21tYW5kRnJhZ21lbnRzIHN0YXJ0aW5nIHdpdGggdGhlIENvbW1hbmRGcmFnbWVudCBvbiB0aGUKLSAgICogdG9wIG9mIHRoZSBjb21tYW5kIGZyYWdtZW50IHN0YWNrLiAgVGhpcyBvcGVyYXRpb24gZG9lcyBjaGFuZ2UgdGhlCi0gICAqIGNvbW1hbmQgZnJhZ21lbnQgc3RhY2sgYW5kIGRvZXMgZXhlY3V0ZSBhbnkgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGgKLSAgICogYSBDb21tYW5kRnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBtb3ZlRm9yd2FyZFRvTmV4dFN0b3AoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgCUNvbW1hbmRMaXN0RW50cnkgdG9wRW50cnkgICAgICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOyAgCQotICAJaW50ICAgICAgICAgICAgICBwYXJlbnRJbmRleCAgICAgPSB0b3BFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAlDb21tYW5kRnJhZ21lbnQgIGN1cnJlbnRGcmFnbWVudCA9IHRvcEVudHJ5LmZyYWdtZW50XzsgIAotICAJYm9vbGVhbiAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB2aXNpdFRvcCggbW9uaXRvciApOwotICAJQ29tbWFuZEZyYWdtZW50ICBjaGlsZEZyYWdtZW50ICAgID0gY3VycmVudEZyYWdtZW50LmdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLSAgCSAgICAKLSAgCS8vIElmIHRoZSBjdXJyZW50IGZyYWdtZW50IGhhcyBjaGlsZCBmcmFnbWVudHMgd2UgbmVlZCB0byB0cmF2ZXJzZSB0aGVzZSBjaGlsZHJlbi4KLSAgCXdoaWxlKCBjaGlsZEZyYWdtZW50ICE9IG51bGwgJiYgY29udGludWVFeGVjdXRlICkKLSAgCXsKLSAgCSAgcGFyZW50SW5kZXggPSBjb21tYW5kU3RhY2tfLnNpemUoKSAtIDE7Ci0gIAkgIGFkZFRvU3RhY2soIGNoaWxkRnJhZ21lbnQsIHBhcmVudEluZGV4ICk7Ci0gIAkgIGNvbnRpbnVlRXhlY3V0ZSA9IHZpc2l0VG9wKCBtb25pdG9yICk7Ci0gIAkgIGN1cnJlbnRGcmFnbWVudCA9IGNoaWxkRnJhZ21lbnQ7Ci0gIAkgIGNoaWxkRnJhZ21lbnQgICA9IGN1cnJlbnRGcmFnbWVudC5nZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0gIAl9Ci0gIAkKLSAgCS8vIFRoZSBwcmV2aW91cyB3aGlsZSBsb29wIGhhcyBndWFyYW50ZWVkIHRoYXQgY3VycmVudEZyYWdtZW50IGhhcyBubwotICAJLy8gY2hpbGQgZnJhZ21lbnRzLiBUaGlzIHdoaWxlIGxvb3AgYXNzdW1lcyB0aGlzIHRvIGJlIHRoZSBjYXNlLgotICAJd2hpbGUoIHBhcmVudEluZGV4ICE9IC0xICYmIGNvbnRpbnVlRXhlY3V0ZSApCi0gIAl7ICAJICAgCQotICAJICBDb21tYW5kTGlzdEVudHJ5IHBhcmVudEVudHJ5ICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5lbGVtZW50QXQoIHBhcmVudEluZGV4ICk7Ci0gIAkgIENvbW1hbmRGcmFnbWVudCAgcGFyZW50RnJhZ21lbnQgPSBwYXJlbnRFbnRyeS5mcmFnbWVudF87Ci0gIAkgIENvbW1hbmRGcmFnbWVudCAgbmV4dEZyYWdtZW50ICAgPSBudWxsOwotICAJICAKLSAgCSAgaWYoIGN1cnJlbnRGcmFnbWVudCA9PSBudWxsICkKLSAgCSAgewotICAJICAgIG5leHRGcmFnbWVudCA9IHBhcmVudEZyYWdtZW50LmdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLSAgCSAgfQotICAJICBlbHNlCi0gIAkgIHsJCi0gIAkgICAgbmV4dEZyYWdtZW50ID0gcGFyZW50RnJhZ21lbnQuZ2V0TmV4dFN1YkZyYWdtZW50KCBjdXJyZW50RnJhZ21lbnQgKTsKLSAgCSAgfQotICAJICAKLSAgCSAgaWYoIG5leHRGcmFnbWVudCA9PSBudWxsICkKLSAgCSAgewotICAJICAJLy8gVGhlcmUgYXJlIG5vIG1vcmUgc2libGluZyBmcmFnbWVudHMgdG8gbmF2aWdhdGUgc28gd2Ugd2lsbCBwb3AgdXAgdG8gdGhlIHBhcmVudAotICAJICAJLy8gYW5kIGNvbnRpbnVlIG5hdmlnYXRpb24gdGhlcmUuCi0gIAkgIAlwYXJlbnRJbmRleCAgICAgPSBwYXJlbnRFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAkgIAljdXJyZW50RnJhZ21lbnQgPSBwYXJlbnRGcmFnbWVudDsgCi0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7ICAJCi0gIAkgIAkvLyBXZSBoYXZlIGEgbmV3IGZyYWdtZW50IHRoYXQgd2UgbmVlZCB0byBhZGQgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2suCi0gIAkgIAlhZGRUb1N0YWNrKCBuZXh0RnJhZ21lbnQsIHBhcmVudEluZGV4ICk7ICAJICAJCi0gIAkgICAgcGFyZW50SW5kZXggICAgID0gY29tbWFuZFN0YWNrXy5zaXplKCkgLSAxOyAgCQotICAJICAgIGNvbnRpbnVlRXhlY3V0ZSA9IHZpc2l0VG9wKCBtb25pdG9yICk7Ci0gIAkgICAgY3VycmVudEZyYWdtZW50ID0gbnVsbDsgIAkgIAkKLSAgCSAgfQotICAJfQotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSB0aGVyZSBpcyBub3QgbG9uZ2VyIGFueSBlbGVtZW50cyBvbiB0aGUgc3RhY2suICBOb3RlOgotICAgKiAgICAgICAgICAgICAgICAgdGhhdCBsYXN0IHR3byBlbnRyaWVzIGFyZSBhbHdheXMgbGVmdCBvbiB0aGUgc3RhY2suCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiB1bmRvVG9MYXN0U3RvcCggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgeyAgICAKLSAgCUNvbW1hbmRMaXN0RW50cnkgdG9wRW50cnkgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7CQotICAJCi0JICBpZiggdG9wRW50cnkuZnJhZ21lbnRTdG9wcGVkXyAmJiAhdG9wRW50cnkuYmVmb3JlRXhlY3V0ZV8gKQotICAgIHsKLSAgICAgIC8vIE5vcm1hbGx5IHRoZSBjb21tYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGhhcyBub3QgYmVlbiBleGVjdXRlZC4gIElmCi0gICAgICAvLyBpdCBoYXMgYmVlbiBleGVjdXRlLCBpdCBtZWFucyB0aGF0IHdlIHRyaWVkIHRvIGV4ZWN1dGUgYW5kIGl0IGZhaWxlZC4KLSAgICAgIC8vIFRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBjb21tYW5kIHN0YWNrIGZhaWxlZC4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkCi0gICAgICAvLyBvbmx5IHVuZG8gdGhpcyBjb21tYW5kLgotICAgICAgcGVyZm9ybVVuZG8oIHRvcEVudHJ5LCBtb25pdG9yICk7Ci0gICAgICByZXR1cm4gdG9wRW50cnkucGFyZW50SW5kZXhfID09IDA7Ci0gICAgfQotICAgIAotICAJcGVyZm9ybVVuZG8oIHRvcEVudHJ5LCBtb25pdG9yICk7Ci0gIAkJCi0gICAgd2hpbGUoIHRvcEVudHJ5LnBhcmVudEluZGV4XyAhPSAwICkKLSAgCXsKLSAgICAgIGNvbW1hbmRTdGFja18ucG9wKCk7Ci0gIAkgIHRvcEVudHJ5ID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOwkgIAotICAgICAgCi0gIAkgIHBlcmZvcm1VbmRvKCB0b3BFbnRyeSwgbW9uaXRvciApOwotICAJICAKLSAgCSAgaWYoIHRvcEVudHJ5LmZyYWdtZW50U3RvcHBlZF8gKQotICAJICB7Ci0gIAkgICAgYnJlYWs7Ci0gIAkgIH0KLSAgCX0KLSAgCQotICAJcmV0dXJuIHRvcEVudHJ5LnBhcmVudEluZGV4XyA9PSAwOwotICB9Ci0gICAKLSAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1VbmRvKCBDb21tYW5kTGlzdEVudHJ5IGVudHJ5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gICAgaWYoIGVudHJ5LnBhcmVudEluZGV4XyA9PSAwICkgcmV0dXJuOwotICAgIAotCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY21kID0gZW50cnkuY29tbWFuZF87Ci0gIAkgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCBjbWQgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBjbWQuY2FuVW5kbygpICYmICFlbnRyeS5iZWZvcmVFeGVjdXRlXyApCi0JICAgICAgewotCSAgICAgICAgY21kLnVuZG8oIG1vbml0b3IsIG51bGwgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGF0YU1hbmFnZXJfLnVucHJvY2VzcyggY21kICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotCSAgZW50cnkuYmVmb3JlRXhlY3V0ZV8gPSB0cnVlOyAgCi0JICB1bmRvRnJhZ21lbnRMaXN0ZW5lcl8ubm90aWZ5KCBlbnRyeS5mcmFnbWVudF8gKTsgIAkKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIG5hdmlnYXRlQ2hpbGRGcmFnbWVudHMoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCwgYm9vbGVhbiB2aXNpdEN1cnJlbnQgKQotICB7Ci0gIAlib29sZWFuICAgICAgICAgY29udGludWVOYXZpZ2F0ZSA9IHRydWU7Ci0gIAlDb21tYW5kRnJhZ21lbnQgY2hpbGRGcmFnICAgICAgICA9IG51bGw7IAotICAJICAKLSAgCWlmKCB2aXNpdEN1cnJlbnQgKQotICAJewotICAJICBjb250aW51ZU5hdmlnYXRlID0gcGVla0ZyYWdtZW50TGlzdGVuZXJfLm5vdGlmeSggZnJhZ21lbnQgKTsKLSAgICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBmcmFnbWVudCApOwotICAJfQotICAJCi0gIAljaGlsZEZyYWcgPSBmcmFnbWVudC5nZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0gICAJCi0gIAl3aGlsZSggY2hpbGRGcmFnICE9IG51bGwgJiYgY29udGludWVOYXZpZ2F0ZSApCi0gIAl7Ci0gIAkgIGNvbnRpbnVlTmF2aWdhdGUgPSBuYXZpZ2F0ZUNoaWxkRnJhZ21lbnRzKCBjaGlsZEZyYWcsIHRydWUgKTsKLSAgCSAgY2hpbGRGcmFnICAgICAgICA9IGZyYWdtZW50LmdldE5leHRTdWJGcmFnbWVudCggY2hpbGRGcmFnICk7Ci0gIAl9Ci0gIAkKLSAgCXJldHVybiBjb250aW51ZU5hdmlnYXRlOwotICB9Ci0gICAgCi0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFRvcCggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgeyAgCi0gIAlDb21tYW5kTGlzdEVudHJ5IGVudHJ5ICAgICAgICAgICA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18ubGFzdEVsZW1lbnQoKTsKLSAgCWJvb2xlYW4gICAgICAgICBjb250aW51ZU5hdmlnYXRlID0gbmV4dEZyYWdtZW50TGlzdGVuZXJfLm5vdGlmeSggZW50cnkuZnJhZ21lbnRfICk7Ci0gIAkgIAotICAJaWYoIGNvbnRpbnVlTmF2aWdhdGUgKQotICAJewotICAJICAvLyBDYWxsIHRoZSBzZXR0ZXJzIGZvciB0aGlzIGZyYWdtZW50LgotICAgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGVudHJ5LmZyYWdtZW50XyApOwotICAgICAgCi0gICAgICAvLyBBZGQgYW55IHJ1bGVzIHRvIHRoZSBtYXBwaW5nIHJlZ2lzdHJ5IGJlZm9yZSB3ZSBleGVjdXRlIHRoZSBjb21tYW5kLgotICAgICAgZW50cnkuZnJhZ21lbnRfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkgKTsKLSAgIAotICAJICBsYXN0U3RhdHVzXyA9IHJ1bkNvbW1hbmQoIGVudHJ5LCBtb25pdG9yICk7Ci0gIAkgIAotICAgICAgaWYoIGFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXJfICE9IG51bGwgKQotICAgICAgewotICAgICAgICBjb250aW51ZU5hdmlnYXRlID0gYWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcl8ubm90aWZ5KCBlbnRyeS5mcmFnbWVudF8gKTsgIAotICAgICAgICAKLSAgICAgICAgaWYoICFjb250aW51ZU5hdmlnYXRlICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoZSBhZnRlciBleGVjdXRpb24gbGlzdGVuZXIgaGFzIGluZGljYXRlZCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcC4KLSAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgdXBncmFkZSB0aGUgc2V2ZXJpdHkgb2YgdGhlIGxhc3Qgc3RhdHVzIHRvIEVSUk9SLgotICAgICAgICAgIGxhc3RTdGF0dXNfID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdHVzXy5nZXRQbHVnaW4oKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdHVzXy5nZXRDb2RlKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXR1c18uZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXR1c18uZ2V0RXhjZXB0aW9uKCkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gIAkgIGlmKCBjb250aW51ZU5hdmlnYXRlICYmIGxhc3RTdGF0dXNfLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApIGNvbnRpbnVlTmF2aWdhdGUgPSBmYWxzZTsKLSAgCX0KLSAgCQotICAgCWlmKCAhY29udGludWVOYXZpZ2F0ZSApIGVudHJ5LmZyYWdtZW50U3RvcHBlZF8gPSB0cnVlOwotICAgCQotICAJcmV0dXJuIGNvbnRpbnVlTmF2aWdhdGU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRUb1N0YWNrKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsIGludCBwYXJlbnRJbmRleCApCi0gIHsKLSAgICBDb21tYW5kTGlzdEVudHJ5IGVudHJ5ID0gbmV3IENvbW1hbmRMaXN0RW50cnkoIGZyYWdtZW50LCBwYXJlbnRJbmRleCApOwotICAgIGNvbW1hbmRTdGFja18ucHVzaCggZW50cnkgKTsKLSAgfQotICAKLSAgLy8gU3ViY2xhc3NlcyBjYW4gZG8gaW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoZSBleGVjdXRpb24gb2YgYSBjb21tYW5kIGhlcmUKLSAgcHJvdGVjdGVkIElTdGF0dXMgaW5pdEJlZm9yZUV4ZWN1dGUoIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiApCi0gIHsgIAotCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBydW5Db21tYW5kKCBDb21tYW5kTGlzdEVudHJ5IGVudHJ5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0JQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSAgPSBlbnRyeS5mcmFnbWVudF8uZ2V0Q29tbWFuZEZhY3RvcnkoKTsKLSAgCUlTdGF0dXMgICAgICBzdGF0dXMgICA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAkKLSAgCWlmKCBmYWN0b3J5ICE9IG51bGwgKQotICAJewotICAJICBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjbWQgID0gZmFjdG9yeS5jcmVhdGUoKTsKLSAgICAgIAotICAJICBlbnRyeS5jb21tYW5kXyA9IGNtZDsKLSAgCSAgICAKLSAgCSAgaWYoIGNtZCAhPSBudWxsICkKLSAgCSAgewotICAJICAgIHRyeQotICAJICAgIHsKLSAgCSAgICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBjbWQgKTsgIAkgICAgCQotICAJICAgIAkKLSAgICAgICAgICBzdGF0dXMgPSBpbml0QmVmb3JlRXhlY3V0ZSggY21kICk7Ci0gICAgICAgICAgCi0gIAkgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDAxLCB0aGlzLCAicnVuQ29tbWFuZCIsICJFeGVjdXRpbmc6ICIgKyBjbWQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAJICAJICAgIAotIAkgICAgICAgIGNtZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnRfICk7Ci0gICAgICAgICAgc3RhdHVzID0gY21kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLSAgICAgICAgICAKLQkJICAgICAgZW50cnkuYmVmb3JlRXhlY3V0ZV8gPSBmYWxzZTsKLSAgCSAgICB9Ci0gIAkgICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAJICAgIHsKLSAgCSAgICAgIElTdGF0dXMgICAgICB1bmV4cGVjdGVkRXJyb3IgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZXhjICk7Ci0gICAgICAgICAgTXVsdGlTdGF0dXMgIHBhcmVudFN0YXR1cyAgICA9IG5ldyBNdWx0aVN0YXR1cyggImlkIiwgMCwgbmV3IElTdGF0dXNbXXt1bmV4cGVjdGVkRXJyb3J9LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUiwgbnVsbCApOwotICAJICAgICAgZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggcGFyZW50U3RhdHVzICk7Ci0gIAkgICAgICBzdGF0dXMgPSB1bmV4cGVjdGVkRXJyb3I7Ci0gIAkgICAgfQotICAJICAgIGZpbmFsbHkKLSAgCSAgICB7Ci0gIAkgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJPayI7Ci0gIAkgICAgICAKLSAgCSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotICAJICAgICAgewotICAJICAgICAgICBtZXNzYWdlID0gIkVycm9yOiAiICsgc3RhdHVzLmdldE1lc3NhZ2UoKTsgCi0gIAkgICAgICB9Ci0gIAkgICAgICAKLQkgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDAxLCB0aGlzLCAicnVuQ29tbWFuZCIsICJFeGVjdXRpb24gc3RhdHVzOiAiICsgbWVzc2FnZSApOwotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJCi0gIAlyZXR1cm4gc3RhdHVzOwotICB9Ci0gICAgCi0gIHByaXZhdGUgY2xhc3MgQ29tbWFuZExpc3RFbnRyeQotICB7Ci0gIAlwdWJsaWMgQ29tbWFuZExpc3RFbnRyeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LCBpbnQgcGFyZW50SW5kZXggKQotICAJewotICAJICBmcmFnbWVudF8gICAgICAgID0gZnJhZ21lbnQ7Ci0gIAkgIHBhcmVudEluZGV4XyAgICAgPSBwYXJlbnRJbmRleDsKLSAgCSAgZnJhZ21lbnRTdG9wcGVkXyA9IGZhbHNlOwotCSAgYmVmb3JlRXhlY3V0ZV8gICA9IHRydWU7Ci0gIAl9Ci0gIAkgIAkKLSAgCXB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjb21tYW5kXzsKLSAgCXB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnRfOwotICAJcHVibGljIGludCAgICAgICAgICAgICBwYXJlbnRJbmRleF87Ci0gIAlwdWJsaWMgYm9vbGVhbiAgICAgICAgIGZyYWdtZW50U3RvcHBlZF87Ci0gIAlwdWJsaWMgYm9vbGVhbiAgICAgICAgIGJlZm9yZUV4ZWN1dGVfOwotICAgIAotICAgIHB1YmxpYyB2b2lkIGR1bXAoIFN0cmluZ0J1ZmZlciBidWZmZXIsIGludCBpbmRleCApCi0gICAgewotICAgICAgU3RyaW5nIG5ld2xpbmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7ICAgIAotICAgICAgU3RyaW5nIGxpbmUgICAgPSAiICAiICsgaW5kZXggKyAiLSBmcmFnOiAiICsgZnJhZ21lbnRfLmdldElkKCkgKyAiIHBhckluZGV4OiAiICsgcGFyZW50SW5kZXhfICsgIiBzdG9wOiAiICsgZnJhZ21lbnRTdG9wcGVkXyArICIgYmVmb3JlRXhlY3V0ZTogIiArIGJlZm9yZUV4ZWN1dGVfIDsKLSAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSk7IAotICAgICAgYnVmZmVyLmFwcGVuZChuZXdsaW5lKTsKLSAgICB9Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyM2M5NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBDb21tYW5kRnJhZ21lbnRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgY3JlYXRlZCBDb21tYW5kRnJhZ21lbnQgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTlmYjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkgCi17Ci0gIC8qKgotICAgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGdldCB0aGUgQ29tbWFuZEZyYWdtZW50RmFjdG9yeQotICAgKiBmb3IgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbi4KLSAgICogCi0gICAqIEByZXR1cm4gQ3JlYXRlcyBhIENvbW1hbmRGcmFnbWVudEZhY3RvcnkuCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKTsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRXh0ZW5zaW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0V4dGVuc2lvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTczZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRXh0ZW5zaW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUucmVnaXN0cnkuQ29tbWFuZFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpb25GcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50IAotewotICBwcml2YXRlIFN0cmluZ1tdICAgICAgICBpZHNfOzsKLSAgcHJpdmF0ZSBDb21tYW5kUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnlfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICBmcmFnbWVudHNfOwotICAKLSAgLyoqCi0gICAqICBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgKgotICAgKi8KLSAgcHVibGljIEV4dGVuc2lvbkZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKCBudWxsLCAiIiApOyAgCi0gICAgZnJhZ21lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotICAgIAotICAvKioKLSAgICogQ29weSBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIEZyYWdtZW50IHRoZSBmcmFnbWVudCB0byBjb3B5Ci0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaW9uRnJhZ21lbnQoIEV4dGVuc2lvbkZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHN1cGVyKCBmcmFnbWVudCApOwotICAgIAotICAgIGlkc18gICAgICAgICAgICAgICA9IGZyYWdtZW50Lmlkc187Ci0gICAgZXh0ZW5zaW9uUmVnaXN0cnlfID0gZnJhZ21lbnQuZXh0ZW5zaW9uUmVnaXN0cnlfOwotICAgIGZyYWdtZW50c18gICAgICAgICA9IGZyYWdtZW50LmZyYWdtZW50c187Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkcyBTZXRzIHRoZSBJRHMgZm9yIHRoaXMgZXh0ZW5zaW9uIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uSWRzKCBTdHJpbmdbXSBpZHMgKQotICB7Ci0gICAgaWRzXyA9IGlkczsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gcmVnaXN0cnkgU2V0cyB0aGUgcmVnaXN0cnkgZm9yIHRoaXMgZXh0ZW5zaW9uIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uUmVnaXN0cnkoIENvbW1hbmRSZWdpc3RyeSByZWdpc3RyeSApCi0gIHsKLSAgICBleHRlbnNpb25SZWdpc3RyeV8gPSByZWdpc3RyeTsgCi0gIH0KLSAgICAgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKSAKLSAgewotICAgIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IGZhY3RvcnkgID0gZXh0ZW5zaW9uUmVnaXN0cnlfLmdldEZhY3RvcnlGYWN0b3J5KCBpZHNfICk7Ci0gICAgCi0gICAgaWYoIGZhY3RvcnkgPT0gbnVsbCApIHJldHVybiBudWxsOwotICAgIAotICAgIENvbW1hbmRGcmFnbWVudCAgICAgICAgICAgICAgIGZyYWdtZW50ID0gKENvbW1hbmRGcmFnbWVudClmcmFnbWVudHNfLmdldCggZmFjdG9yeSApOwotICAgIAotICAgIGlmKCBmcmFnbWVudCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmcmFnbWVudCA9IGZhY3RvcnkuY3JlYXRlKCkuY3JlYXRlKCk7Ci0gICAgICBmcmFnbWVudHNfLnB1dCggZmFjdG9yeSwgZnJhZ21lbnQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICBmcmFnbWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I2dldE5leHRTdWJGcmFnbWVudChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudChDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQpIAotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjY2xvbmUoKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBFeHRlbnNpb25GcmFnbWVudCggdGhpcyApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9GcmFnbWVudExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9GcmFnbWVudExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZGU3ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRnJhZ21lbnRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHNob3VsZCBiZSBpbXBsZW1lbnQgZm9yIGNvZGUgdGhhdCBuZWVkcyB0byBsaXN0ZW4gdG8gZnJhZ21lbnRzCi0gKiB0aGF0IGFyZSBiZWluZyB0cmF2ZXJzZSBieSB0aGUgQ29tbWFuZEZyYWdtZW50RW5naW5lLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBGcmFnbWVudExpc3RlbmVyIAotewotICAvKgotICAgKiBOb3RpZmllcyB0aGlzIGxpc3RlbmVyIHRoYXQgYSBjb21tYW5kRnJhZ21lbnQgaXMgYmVpbmcgdmlzaXRlZCBkdXJpbmcKLSAgICogYSB0cmF2ZXJzYWwuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBjb21tYW5kRnJhZ21lbnQgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BDb25kaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BDb25kaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzYjFhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wQ29uZGl0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLS8qKgotICAqIFRoaXMgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHdoZW4gYSBjb25kaXRpb25hbCBvYmplY3QgbmVlZHMgdG8gYmUgcmV0dXJuZWQuCi0qKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9vcENvbmRpdGlvbgotewotICAvKioKLSAgICAqIEV2YWx1YXRlcyBhIGxvb3AgY29uZGl0aW9uLgotICAgICoKLSAgICAqIEBwYXJhbSBsb29wIHRoZSBsb29wIGZyYWdtZW50IHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLgotICAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBjaGlsZCBmcmFnbWVudCBvZiB0aGUgbG9vcCAKLSAgICAqICAgICAgICB1bmRlciBldmFsdWF0aW9uLiAgTm90ZTogZnJhZ21lbnQgY2FuIGJlIG51bGwuCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIHNvbWUgZXZhbHVhdGVkIGNvbmRpdGlvbi4KLSAgKiovCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCBMb29wRnJhZ21lbnQgbG9vcCwgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzk3MWEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5SYW5nZVZlY3RvcjsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIHJldHVybnMgYSBkeW5hbWljYWxseSBkZXRlcm1pbmVkIG51bWJlciBvZgotICAqIGZyYWdtZW50cy4gIFRoaXMgbG9vcCB3aWxsIHJldHVybiB0aGUgZnJhZ21lbnQgcGFyYW1ldGVyCi0gICogYXMgbG9uZyBhcyB0aGUgc3RvcENvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UuICBPdGhlcndpc2UsCi0gICogbnVsbCBpcyByZXR1cm5lZC4KLSoqLwotcHVibGljIGNsYXNzIExvb3BGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgTG9vcENvbmRpdGlvbiAgIHN0b3BDb25kaXRpb25fOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudF87Ci0gIHByaXZhdGUgUmFuZ2VWZWN0b3IgICAgIGZyYWdtZW50SGlzdG9yeV87Ci0KLSAgLyoqCi0gICAgKiBDb3B5IGNvbnRydWN0b3IgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwcm90ZWN0ZWQgTG9vcEZyYWdtZW50KCBMb29wRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgdGhpcyggZnJhZ21lbnQuZnJhZ21lbnRfLAotICAgIAkgIGZyYWdtZW50LnN0b3BDb25kaXRpb25fLAotICAgIAkgIGZyYWdtZW50LmdldENvbW1hbmRGYWN0b3J5KCksCi0gICAgCSAgZnJhZ21lbnQuZ2V0SWQoKSApOwotICB9Ci0gIAotICBwdWJsaWMgTG9vcEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBMb29wQ29uZGl0aW9uICAgc3RvcENvbmRpdGlvbiApCi0gIHsKLSAgICB0aGlzKCBmcmFnbWVudCwgc3RvcENvbmRpdGlvbiwgbnVsbCwgIiIgKTsKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgCi0gIAotICAvKioKLSAgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBsb29wLgotICAgICogQHBhcmFtIHN0b3BDb25kaXRpb24gd2hlbiBmYWxzZSB0aGUgZnJhZ21lbnQgd2lsbCBiZSByZXR1cm5lZCwgCi0gICAgKiBvdGhlcndpc2UgbnVsbCBpcyByZXR1cm5lZC4KLSAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSBjb25kaXRpb24uCi0gICAgKiBAcGFyYW0gY29tbWFuZCB0aGUgZXhlY3V0YWJsZSBjb21tYW5kIGZvciB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIExvb3BGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICBMb29wQ29uZGl0aW9uICAgc3RvcENvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZhY3RvcnkgIGNvbW1hbmRGYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgaWQgICApCi0gIHsKLSAgICBzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0KLSAgICBmcmFnbWVudF8gICAgICAgID0gZnJhZ21lbnQ7Ci0gICAgc3RvcENvbmRpdGlvbl8gICA9IHN0b3BDb25kaXRpb247Ci0gICAgZnJhZ21lbnRIaXN0b3J5XyA9IG5ldyBSYW5nZVZlY3RvcigpOwotICB9Ci0gIAotICAvKioKLSAgICAqIE1ha2VzIGEgY29weSBvZiB0aGUgQ29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBMb29wRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0gIC8qKgotICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZyYWdtZW50Ci0gICAgKgotICAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0byBzZWFyY2guCi0gICAgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIGludCBpbmRleE9mKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgcmV0dXJuIGZyYWdtZW50SGlzdG9yeV8uaW5kZXhPZiggZnJhZ21lbnQgKTsKLSAgfQotCi0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsgICAgCi0gICAgcmV0dXJuIGdldE5leHRTdWJGcmFnbWVudCggbnVsbCApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnICkKLSAgewotICAgIENvbW1hbmRGcmFnbWVudCBuZXh0RnJhZyAgPSBudWxsOwotICAgIAotICAgIGlmKCBzdG9wQ29uZGl0aW9uXy5ldmFsdWF0ZSggdGhpcywgZnJhZyApICkKLSAgICB7Ci0gICAgICAvLyBUaGUgc3RvcCBjb25kaXRpb24gaGFzIGJlZW4gbWV0LgotICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9Ci0gICAgZWxzZQotICAgIHsgICAgICAKLSAgICAgIGludCBmcmFnSW5kZXggPSBpbmRleE9mKCBmcmFnICk7Ci0KLSAgICAgIC8vIE5vdGU6IHdoZW4gZnJhZ21lbnQgPT0gbnVsbCB0aGUgZnJhZ0luZGV4Ci0gICAgICAvLyAgICAgICBzaG91bGQgYmUgLTEuICBUaGVyZWZvcmUsIGlmIHRoZXJlCi0gICAgICAvLyAgICAgICBpcyBhbHJlYWR5IGEgZmlyc3QgZnJhZ21lbnQgaW4KLSAgICAgIC8vICAgICAgIGZyYWdtZW50SGlzdG9yeSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICBpZiggZnJhZ0luZGV4ICsgMSA8IGZyYWdtZW50SGlzdG9yeV8uc2l6ZSgpICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIGNvcHkgb2YgdGhlIGZyYWdtZW50IGFscmVhZHkuCi0gICAgICAgIG5leHRGcmFnID0gKENvbW1hbmRGcmFnbWVudCkoZnJhZ21lbnRIaXN0b3J5Xy5lbGVtZW50QXQoIGZyYWdJbmRleCArIDEgKSk7IAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBuZXh0RnJhZyA9IChDb21tYW5kRnJhZ21lbnQpKGZyYWdtZW50Xy5jbG9uZSgpKTsKLSAgICAgICAgZnJhZ21lbnRIaXN0b3J5Xy5hZGQoIG5leHRGcmFnICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5leHRGcmFnOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TZXF1ZW5jZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TZXF1ZW5jZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMGNlNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2VxdWVuY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNlcXVlbmNlIG9mIENvbW1hbmRGcmFnbWVudHMuCi0qKi8KLXB1YmxpYyBjbGFzcyBTZXF1ZW5jZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBMaXN0IGZyYWdtZW50TGlzdF87Ci0KLSAgcHJvdGVjdGVkIFNlcXVlbmNlRnJhZ21lbnQoIFNlcXVlbmNlRnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgCXN1cGVyKCBmcmFnLmdldENvbW1hbmRGYWN0b3J5KCksIGZyYWcuZ2V0SWQoKSApOwotICAJCi0gICAgZnJhZ21lbnRMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZnJhZy5mcmFnbWVudExpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgT2JqZWN0IG5ld0ZyYWcgPSAoKENvbW1hbmRGcmFnbWVudClmcmFnLmZyYWdtZW50TGlzdF8uZ2V0KGluZGV4KSkuY2xvbmUoKTsKLSAgICAgIGZyYWdtZW50TGlzdF8uYWRkKCBuZXdGcmFnICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU2VxdWVuY2VGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50W10gZnJhZ21lbnRzLCAKLQkJCQkJCSAgIENvbW1hbmRGYWN0b3J5ICAgIGNvbW1hbmRGYWN0b3J5LCAKLQkJCQkJICAgICAgIFN0cmluZyAgICAgICAgICAgIGlkICApCi0gIHsKLSAgCXN1cGVyKCBjb21tYW5kRmFjdG9yeSwgaWQgKTsKLSAgCQotICAgIGlmKCBmcmFnbWVudHMgIT0gbnVsbCApCi0gICAgewotICAgICAgZnJhZ21lbnRMaXN0XyA9IEFycmF5cy5hc0xpc3QoIGZyYWdtZW50cyApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZnJhZ21lbnRMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXF1ZW5jZUZyYWdtZW50KCkKLSAgewotICAJc3VwZXIoIG51bGwsICIiICk7Ci0gIAkKLSAgCWZyYWdtZW50TGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIEFwcGVuZHMgYSBmcmFnbWVudCB0byB0aGUgc2VxdWVuY2UuIAotICAqKi8KLSAgcHVibGljIHZvaWQgYWRkKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgZnJhZ21lbnRMaXN0Xy5hZGQoIGZyYWdtZW50ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogTWFrZXMgYSBjb3B5IG9mIHRoZSBDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNlcXVlbmNlRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7Ci0gICAgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gbnVsbDsKLQotICAgIGlmKCBmcmFnbWVudExpc3RfID09IG51bGwgfHwgZnJhZ21lbnRMaXN0Xy5zaXplKCkgPT0gMCApCi0gICAgewotICAgICAgZnJhZ21lbnQgPSBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgeyAgICAgIAotICAgICAgZnJhZ21lbnQgPSAoQ29tbWFuZEZyYWdtZW50KSggZnJhZ21lbnRMaXN0Xy5nZXQoMCkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJhZ21lbnQ7ICAgIAotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBpbnQgaW5kZXggPSBmcmFnbWVudExpc3RfLmluZGV4T2YoIGZyYWdtZW50ICk7Ci0KLSAgICBpZiggaW5kZXggPT0gLTEgKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJGcmFnbWVudCBub3QgZm91bmQgaW4gc2VxdWVuY2UuIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpbmRleCsrOwotCi0gICAgICBpZiggaW5kZXggPj0gZnJhZ21lbnRMaXN0Xy5zaXplKCkgKQotICAgICAgewotICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGZvbGxvd2luZyB0aGlzIGZyYWdtZW50IHNvIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gUmV0dXJuIHRoZSBuZXh0IGZyYWdtZW50LgotICAgICAgICByZXR1cm4gKENvbW1hbmRGcmFnbWVudCkoZnJhZ21lbnRMaXN0Xy5nZXQoIGluZGV4ICkpOwotICAgICAgfQotICAgIH0KLSAgfQkKLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2ltcGxlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NpbXBsZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlM2ViYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2ltcGxlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBlbXB0eSBvZiBXaXphcmRGcmFnbWVudC4KLSoqLwotcHVibGljIGNsYXNzIFNpbXBsZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHVibGljIFNpbXBsZUZyYWdtZW50KCkKLSAgewotICAgIHRoaXMoIChDb21tYW5kRmFjdG9yeSludWxsLCAiIiApOwotICB9Ci0gIAotICBwdWJsaWMgU2ltcGxlRnJhZ21lbnQoIFN0cmluZyBpZCApCi0gIHsKLSAgICB0aGlzKCAoQ29tbWFuZEZhY3RvcnkpbnVsbCwgaWQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgU2ltcGxlRnJhZ21lbnQoIGZpbmFsIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIGlkICkKLSAgewotICAgIHN1cGVyKCBuZXcgQ29tbWFuZEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH0sIGlkICk7ICAKLSAgfQotICAKLSAgcHVibGljIFNpbXBsZUZyYWdtZW50KCBDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSwgU3RyaW5nIGlkICkKLSAgewotICAJc3VwZXIoIGNvbW1hbmRGYWN0b3J5LCBpZCApOwotICB9Ci0gIAotICAvKioKLSAgICAqIENvcHkgY29uc3RydWN0b3IgZm9yIGZyYWdtZW50LgotICAqKi8KLSAgcHJvdGVjdGVkIFNpbXBsZUZyYWdtZW50KCBTaW1wbGVGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBzdXBlciggZnJhZ21lbnQuZ2V0Q29tbWFuZEZhY3RvcnkoKSwgZnJhZ21lbnQuZ2V0SWQoKSApOwotICB9Ci0gICAgCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpeyByZXR1cm4gbnVsbDsgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqIFNpbmNlIHRoaXMgaXMgYSBzaW1wbGUgZnJhZ21lbnQsIHRoZXJlIGlzIG5vIG5leHQgZnJhZ21lbnQKLSAgICAqIHNvIHdlIHdpbGwgYWx3YXlzIHJldHVybiBudWxsLiAKLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovICAKLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApeyByZXR1cm4gbnVsbDsgfQotfSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9yZWdpc3RyeS9Db21tYW5kUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3JlZ2lzdHJ5L0NvbW1hbmRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTZlZjg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3JlZ2lzdHJ5L0NvbW1hbmRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3Rvcnk7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgdG8gY3JlYXRlIGEgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkKLSAqIGZyb20gYW4gYXJyYXkgb2YgaWRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kUmVnaXN0cnkgCi17ICAKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSBmcm9tIGFuIGFycmF5IG9mIGlkcy4KLSAgICogCi0gICAqIEBwYXJhbSBpZHMgdGhlIGlkcy4KLSAgICogQHJldHVybiB0aGUgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3Rvcnkgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IGdldEZhY3RvcnlGYWN0b3J5KCBTdHJpbmdbXSBpZHMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9Cb29sZWFuU2VsZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQm9vbGVhblNlbGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjgwNWEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9Cb29sZWFuU2VsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogVGhpcyBjbGFzcyBjb21iaW5lcyBhIHN0cmluZyB3aXRoIGEgYm9vbGVhbiB2YWx1ZS4gIFRoaXMgaXMKLSAqIHVzZWZ1bCBmb3Igc3RvcmluZyB0aGUgc3RhdGUgZGF0YSBmb3IgYSBib29sZWFuIHNlbGVjdGlvbiBsaXN0LgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIEJvb2xlYW5TZWxlY3Rpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgIHZhbHVlXzsKLSAgcHJpdmF0ZSBib29sZWFuIHNlbGVjdGVkXzsKLSAgCi0gIHB1YmxpYyBCb29sZWFuU2VsZWN0aW9uKCBTdHJpbmcgdmFsdWUsIGJvb2xlYW4gc2VsZWN0ZWQgKQotICB7Ci0gICAgdmFsdWVfICAgID0gdmFsdWU7Ci0gICAgc2VsZWN0ZWRfID0gc2VsZWN0ZWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBHZXQgdGhlIHN0cmluZyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKQotICB7Ci0gICAgcmV0dXJuIHZhbHVlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIEdldCB0aGUgYm9vbGVhbiB2YWx1ZSBmb3IgdGhpcyBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NlbGVjdGVkKCkKLSAgewotICAgIHJldHVybiBzZWxlY3RlZF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9DaG9pY2VzVG9TdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9DaG9pY2VzVG9TdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzM2M2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQ2hvaWNlc1RvU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotLyoqCi0gKiBUaGlzIHRyYW5zZm9ybWVyIGNsYXNzIHNlbGVjdHMgYSBzdHJpbmcgYXQgYSBwYXJ0aWN1bGFyIGxldmVsCi0gKiBpbiBhIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgQ2hvaWNlc1RvU3RyaW5nIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHJpdmF0ZSBpbnQgbGV2ZWxfOwotICAKLSAgcHVibGljIENob2ljZXNUb1N0cmluZyggaW50IGxldmVsICkKLSAgewotICAgIGxldmVsXyA9IGxldmVsOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lciN0cmFuc2Zvcm0oamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyA9IChTZWxlY3Rpb25MaXN0Q2hvaWNlcyl2YWx1ZTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGV2ZWxfOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBjaG9pY2VzID0gY2hvaWNlcy5nZXRDaG9pY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNob2ljZXMuZ2V0TGlzdCgpLmdldFNlbGVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgdHJhbnNmb3JtKCBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjaG9pY2VzICkKLSAgewotICAgIHJldHVybiAoU2VsZWN0aW9uTGlzdCl0cmFuc2Zvcm0oIChPYmplY3QpY2hvaWNlcyApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vRHluYW1pY0xpc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9EeW5hbWljTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmVjNzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9EeW5hbWljTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogVGhpcyBpcyBhIER5bmFtaWMgdmVyc2lvbiBvZiB0aGUgU2VsZWN0aW9uTGlzdENob2ljZXMgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBEeW5hbWljTGlzdCAKLXsKLSAgcHJpdmF0ZSBWZWN0b3Igc3RyaW5nTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGR5bmFtaWNMaXN0VmVjdG9yTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvKioKLSAgICogQWRkcyBhbiBlbnRyeSBpbnRvIHRoZSBkeW5hbWljIGxpc3QuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWVzIHRoZSBzdHJpbmcgdmFsdWVzIHRoYXQgbGVhZCB0byB0aGUgdGFyZ2V0LgotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoIFN0cmluZ1tdIHZhbHVlcywgT2JqZWN0IHRhcmdldCApCi0gIHsKLSAgICBEeW5hbWljTGlzdCBjdXJyZW50TGlzdCA9IHRoaXM7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSAgICAgID0gdmFsdWVzW2luZGV4XTsKLSAgICAgIGludCAgICBsZW5ndGggICAgID0gY3VycmVudExpc3Quc3RyaW5nTGlzdF8uc2l6ZSgpOwotICAgICAgaW50ICAgIGZvdW5kSW5kZXggPSAtMTsKLSAgICAgIAotICAgICAgLy8gRmluZCB0aGUgc3RyaW5nIGluIHRoZSBjdXJyZW50IGxpc3QuCi0gICAgICBmb3IoIGludCBzZWFyY2hJbmRleCA9IDA7IHNlYXJjaEluZGV4IDwgbGVuZ3RoOyBzZWFyY2hJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IChTdHJpbmcpY3VycmVudExpc3Quc3RyaW5nTGlzdF8uZWxlbWVudEF0KCBzZWFyY2hJbmRleCApOyAKLSAgICAgICAgCi0gICAgICAgIGlmKCBzdHJpbmcuZXF1YWxzKCB2YWx1ZSApICkgCi0gICAgICAgIHsKLSAgICAgICAgICBmb3VuZEluZGV4ID0gc2VhcmNoSW5kZXg7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIGZvdW5kSW5kZXggPT0gLTEgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgbmV3IHN0cmluZyBzbyBhZGQgaXQgdG8gdGhlIGxpc3QuCi0gICAgICAgIGN1cnJlbnRMaXN0LnN0cmluZ0xpc3RfLmFkZCggdmFsdWUgKTsKLSAgICAgICAgY3VycmVudExpc3QuZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5hZGQoIG5ldyBEeW5hbWljTGlzdCgpICk7Ci0gICAgICAgIGZvdW5kSW5kZXggPSBsZW5ndGg7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGN1cnJlbnRMaXN0ID0gKER5bmFtaWNMaXN0KWN1cnJlbnRMaXN0LmR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uZWxlbWVudEF0KCBmb3VuZEluZGV4ICk7ICAgICAgIAotICAgIH0KLSAgICAKLSAgICBjdXJyZW50TGlzdC5keW5hbWljTGlzdFZlY3Rvckxpc3RfLmFkZCggdGFyZ2V0ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgU2VsZWN0aW9uTGlzdENob2ljZXMgb2JqZWN0IGZyb20gdGhpcyBEeW5hbWljTGlzdAotICAgKiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMgdG9MaXN0Q2hvaWNlcygpCi0gIHsKLSAgICBTZWxlY3Rpb25MaXN0IGxpc3QgICA9IG5ldyBTZWxlY3Rpb25MaXN0KCAoU3RyaW5nW10pc3RyaW5nTGlzdF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApLCAwKTsKLSAgICBpbnQgICAgICAgICAgIGxlbmd0aCA9IGR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uc2l6ZSgpOwotICAgIFZlY3RvciAgICAgICAgdmVjdG9yID0gbmV3IFZlY3RvcigpOyAKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgCi0gICAgICBpZiggb2JqIGluc3RhbmNlb2YgRHluYW1pY0xpc3QgKQotICAgICAgewotICAgICAgICB2ZWN0b3IuYWRkKCAoKER5bmFtaWNMaXN0KW9iaikudG9MaXN0Q2hvaWNlcygpICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHZlY3Rvci5hZGQoIG9iaiApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBsaXN0LCB2ZWN0b3IgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwODU3NzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBzdG9yZXMgYSBsaXN0IHN0cmluZ3MgYWxvbmcgd2l0aCBhIHNlbGVjdGlvbkluZGV4IHdoaWNoCi0gKiBzdG9yZXMgdGhlIGN1cnJlbnQgc3RyaW5nIHRoYXQgc2VsZWN0ZWQuICBUaGVyZSBpcyBhbHNvIGEgc2VsZWN0aW9uCi0gKiB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgb25lIG9mIHRoZSBzdHJpbmdzIGluIHRoZSB0aGUgc3RyaW5nIGxpc3QKLSAqIHRoZW4gc2VsZWN0aW9uSW5kZXggd2lsbCBjb250YWluIHRoZSBpbmRleCBvZiB0aGlzIHN0cmluZy4gIElmIGl0Ci0gKiBpcyBub3QgaW4gdGhlIGxpc3QgdGhlbiB0aGUgc2VsZWN0aW9uVmFsdWUgc3RyaW5nIHdpbGwgY29udGFpbiB0aGlzCi0gKiB2YWx1ZSBhbmQgc2VsZWN0aW9uSW5kZXggd2lsbCBiZSBzZXQgdG8gLTEuICBUaGlzIGNsYXNzIGNhbiBiZQotICogdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgZGF0YSBmb3IgYSBDb21ibyBib3guCi0gKi8KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25MaXN0Ci17Ci0gIHByaXZhdGUgaW50ICAgICAgc2VsZWN0aW9uSW5kZXhfOwotICBwcml2YXRlIFN0cmluZ1tdIGxpc3RfOwotICBwcml2YXRlIFN0cmluZyAgIHNlbGVjdGlvblZhbHVlXzsKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0KCBTdHJpbmdbXSBsaXN0LCBpbnQgc2VsZWN0aW9uSW5kZXggKQotICB7Ci0gICAgbGlzdF8gICAgICAgICAgID0gbGlzdDsKLSAgICBzZWxlY3Rpb25JbmRleF8gPSBzZWxlY3Rpb25JbmRleDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHNlbGVjdGlvbiB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVmFsdWUoIFN0cmluZyB2YWx1ZSApCi0gIHsKLSAgICBzZWxlY3Rpb25WYWx1ZV8gPSB2YWx1ZTsgIAotICAgIHNlbGVjdGlvbkluZGV4XyA9IC0xOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Xy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGlmKCB2YWx1ZS5lcXVhbHMoIGxpc3RfW2luZGV4XSApICkKLSAgICAgIHsKLSAgICAgICAgc2VsZWN0aW9uSW5kZXhfID0gaW5kZXg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSAKLSAgCi0gIC8qCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc3RyaW5nIGxpc3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbGlzdF87Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNldHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzdHJpbmcgaW4gdGhlIGxpc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbmRleCggaW50IGluZGV4ICkKLSAgewotICAgIHNlbGVjdGlvbkluZGV4XyA9IGluZGV4OwotICAgIHNlbGVjdGlvblZhbHVlXyA9IG51bGw7Ci0gIH0KLSAKLSAgLyoKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdHJpbmcuICBUaGUgdmFsdWUKLSAgICogd2lsbCBiZSAtMSBpZiB0aGUgc2VsZWN0aW9uIHZhbHVlIGlzIG5vdCBpbiB0aGUgc3RyaW5nIGxpc3QuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEluZGV4KCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25JbmRleF87ICAKLSAgfQotICAKLSAgLyoKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBzZWxlY3Rpb24gZm9yIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgaWYoIHNlbGVjdGlvblZhbHVlXyAhPSBudWxsICkgcmV0dXJuIHNlbGVjdGlvblZhbHVlXzsKLSAgICAKLSAgICBpZiggc2VsZWN0aW9uSW5kZXhfID09IC0xIHx8IHNlbGVjdGlvbkluZGV4XyA+IGxpc3RfLmxlbmd0aC0xICkKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbGlzdF9bIHNlbGVjdGlvbkluZGV4XyBdOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3RDaG9pY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdENob2ljZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MyMTBiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdENob2ljZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoKLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBoaWVyYXJjaHkgb2YgU2VsZWN0aW9uTGlzdAotICogb2JqZWN0cy4KLSAqLwotcHVibGljIGNsYXNzIFNlbGVjdGlvbkxpc3RDaG9pY2VzCi17Ci0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCBzZWxlY3Rpb25MaXN0XzsKLSAgcHJpdmF0ZSBWZWN0b3IgICAgICAgIGNob2ljZXNfOwotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgbmV3VmFsdWVTZWxlY3Rpb25MaXN0XzsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGxpc3QgICAgIFRoZSBzZWxlY3Rpb24gbGlzdC4KLSAgICogQHBhcmFtIGNob2ljZXMgIFRoaXMgaXMgYSB2ZWN0b3Igb2YgU2VsZWN0aW9uTGlzdENob2llcyBhbmQgY2FuIGJlCi0gICAqICAgICAgICAgICAgICAgICBudWxsIGlmIHRoZXJlIGFyZSBubyBjaG9pY2VzLiAgVGhpcyBpbmRleCBvZiBsaXN0Ci0gICAqICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGluZGV4IGludG8gY2hvaWNlcy4gIElmIGluZGV4IGlzIC0xIHRoZW4KLSAgICogICAgICAgICAgICAgICAgIHRoZSBuZXdWYWx1ZVNlbGVjdGlvbkxpc3QgaXMgdXNlZC4KLSAgICovCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyggU2VsZWN0aW9uTGlzdCBsaXN0LCBWZWN0b3IgY2hvaWNlcyApCi0gIHsKLSAgICBzZWxlY3Rpb25MaXN0XyA9IGxpc3Q7Ci0gICAgY2hvaWNlc18gICAgICAgPSBjaG9pY2VzOwotICAgIAotICAgIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8gPSBuZXcgU2VsZWN0aW9uTGlzdCggbmV3IFN0cmluZ1swXSwgLTEgKTsKLSAgfQotICAKLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBTZWxlY3Rpb25MaXN0IGxpc3QsIFZlY3RvciBjaG9pY2VzLCBTZWxlY3Rpb25MaXN0IG5ld0xpc3QgKQotICB7Ci0gICAgdGhpcyggbGlzdCwgY2hvaWNlcyApOwotICAgIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8gPSBuZXdMaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IFNlbGVjdGlvbiBsaXN0LgotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgZ2V0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uTGlzdF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjaG9pY2VzIGZvciB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0Q2hvaWNlcygpCi0gIHsKLSAgICByZXR1cm4gY2hvaWNlc187Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGxldmVsIHRoZSBsZXZlbCBpbiB0aGUgaGllcmFyY2h5IHdoZXJlIHdlIHdhbnQgdG8gZ2V0IHRoZSBjaG9pY2VzLgotICAgKiBAcmV0dXJuIHJldHVybnMgYSB2ZWN0b3Igb2YgU2VsZWN0aW9uTGlzdENob2ljZXMuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldENob2ljZXNBdExldmVsKCBpbnQgbGV2ZWwgKQotICB7Ci0gICAgU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyA9IHRoaXM7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxldmVsOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBjaG9pY2VzID0gY2hvaWNlcy5nZXRDaG9pY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNob2ljZXMuZ2V0Q2hvaWNlcygpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBTZWxlY3Rpb25MaXN0Q2hvaWNlCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0Q2hvaWNlKCkKLSAgewotICAgIGludCAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkluZGV4ID0gc2VsZWN0aW9uTGlzdF8uZ2V0SW5kZXgoKTsKLSAgICBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXN1bHQgICAgICAgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbkluZGV4ID09IC0xICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8sIG51bGwgKTsKLSAgICB9Ci0gICAgZWxzZSBpZiggY2hvaWNlc18gIT0gbnVsbCAmJiBjaG9pY2VzXy5zaXplKCkgIT0gMCApIAotICAgIHsKLSAgICAgIHJlc3VsdCA9IChTZWxlY3Rpb25MaXN0Q2hvaWNlcyljaG9pY2VzXy5lbGVtZW50QXQoIHNlbGVjdGlvbkluZGV4ICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgY2hvaWNlIHdlIHdhbnQuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgU2VsZWN0aW9uTGlzdENob2ljZSBhdCB0aGUgaW5kZXggc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldENob2ljZShpbnQgaW5kZXgpCi0gIHsKLSAgICBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXN1bHQgPSBudWxsOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZ2V0TGlzdCgpLmdldExpc3QoKS5sZW5ndGgpCi0gICAgewotICAgICAgcmVzdWx0ID0gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBuZXdWYWx1ZVNlbGVjdGlvbkxpc3RfLCBudWxsICk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoU2VsZWN0aW9uTGlzdENob2ljZXMpY2hvaWNlc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgIH0KLSAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3VyaS9OYXRpdmVGaWxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvdXJpL05hdGl2ZUZpbGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTU1MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvdXJpL05hdGl2ZUZpbGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnVyaTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlVSSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTmF0aXZlRmlsZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBkZXNjcmlwdGlvbjsKLQotICBwcm90ZWN0ZWQgSVVSSVtdIHVyaXNUb1JlYWQ7Ci0KLSAgcHJvdGVjdGVkIElVUklbXSB1cmlzVG9Xcml0ZTsKLQotICBwcm90ZWN0ZWQgTmF0aXZlRmlsZUNvbW1hbmQgKCkKLSAgewotICAgIHRoaXMobnVsbCxudWxsKTsKLSAgfQotCi0gIHByb3RlY3RlZCBOYXRpdmVGaWxlQ29tbWFuZCAoIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24gKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJc1RvUmVhZCAoIElVUklbXSB1cmlzVG9SZWFkICkKLSAgewotICAgIHRoaXMudXJpc1RvUmVhZCA9IHVyaXNUb1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgSVVSSVtdIGdldFVSSXNUb1JlYWQgKCkKLSAgewotICAgIHJldHVybiB1cmlzVG9SZWFkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJc1RvV3JpdGUgKCBJVVJJW10gdXJpc1RvV3JpdGUgKQotICB7Ci0gICAgdGhpcy51cmlzVG9Xcml0ZSA9IHVyaXNUb1dyaXRlOwotICB9Ci0KLSAgcHVibGljIElVUklbXSBnZXRVUklzVG9Xcml0ZSAoKQotICB7Ci0gICAgcmV0dXJuIHVyaXNUb1dyaXRlOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgRmlsZVtdIGZpbGVzVG9SZWFkID0gZ2V0RmlsZXModXJpc1RvUmVhZCk7Ci0gICAgRmlsZVtdIGZpbGVzVG9Xcml0ZSA9IGdldEZpbGVzKHVyaXNUb1dyaXRlKTsKLSAgICBwcmVQcm9jZXNzKGZpbGVzVG9SZWFkLGZpbGVzVG9Xcml0ZSk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBleGVjdXRlKGZpbGVzVG9SZWFkLGZpbGVzVG9Xcml0ZSk7Ci0gICAgcG9zdFByb2Nlc3MoZmlsZXNUb1JlYWQsZmlsZXNUb1dyaXRlKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IElTdGF0dXMgZXhlY3V0ZSAoIEZpbGVbXSBmaWxlc1RvUmVhZCwgRmlsZVtdIGZpbGVzVG9Xcml0ZSApOwotCi0gIHByaXZhdGUgdm9pZCBwcmVQcm9jZXNzICggRmlsZVtdIGZpbGVzVG9SZWFkLCBGaWxlW10gZmlsZXNUb1dyaXRlICkKLSAgewotICAgIC8vIFRCRC4KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwb3N0UHJvY2VzcyAoIEZpbGVbXSBmaWxlc1RvUmVhZCwgRmlsZVtdIGZpbGVzVG9Xcml0ZSApCi0gIHsKLSAgICAvLyBUQkQuCi0gIH0KLQotICBwcml2YXRlIEZpbGVbXSBnZXRGaWxlcyAoIElVUklbXSB1cmlzICkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgaWYgKHVyaXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8dXJpcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHVyaXNbaV0uaXNBdmFpbGFibGVBc0ZpbGUoKSkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGxpc3QuYWRkKHVyaXNbaV0uYXNGaWxlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVVJJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKEZpbGVbXSlsaXN0LnRvQXJyYXkobmV3IEZpbGVbMF0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjhjN2E3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi1ydW50aW1lCi10ZW1wLmZvbGRlcgotZW52dWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwYjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg3YWVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNzoyOCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYWU4NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjMwIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzMTA5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMi5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wbHVnaW4uRW52VUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2U7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMjAzLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjMwNSwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4yMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZDdlNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgKi5qYXIsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBzY2hlbWEvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC9vYmoxNi9hbnRfYnVpbGRmaWxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmMzQ2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC93aXpiYW4vbmV3YW50ZmlsZXNfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvd2l6YmFuL25ld2FudGZpbGVzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjNjNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC93aXpiYW4vbmV3YW50ZmlsZXNfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YjcwNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIDIwMDgwMjIxIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1FbnZpcm9ubWVudCBDb21tYW5kIEZyYW1ld29yayAoR1VJKQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVdJREdFVF9SRUdJU1RSWV9OQU1FPVdpZGdldCBjb250cmlidXRvciByZWdpc3RyeQotCi1QTFVHSU5fWFBfQU5UX1dJWkFSRF9OQU1FPUFudCBGaWxlcwotUExVR0lOX1hQX0FOVF9XSVpBUkRfREVTQz1DcmVhdGUgQW50IHNjcmlwdCBhbmQgcHJvcGVydGllcyBmaWxlcyBpbiB0aGUgd29ya3NwYWNlLgotCi1MQUJFTF9BTlRfRVhURU5USU9OPUFudCBFeHRlbnRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NzIzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9YUF9BTlRfV0laQVJEX05BTUUiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZy5BbnRGaWxlSW1wb3J0V2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5BbnRGaWxlSW1wb3J0V2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fWFBfQU5UX1dJWkFSRF9ERVNDCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ3aWRnZXRSZWdpc3RyeSIgbmFtZT0iJVdJREdFVF9SRUdJU1RSWV9OQU1FIiBzY2hlbWE9InNjaGVtYS93aWRnZXRSZWdpc3RyeS5leHNkIi8+Ci0KLQk8IS0tIEFudCBGaWxlIEV4dGVuc2lvbnMgYmVnaW5uaW5nICAtLT4KLQkKLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbnRmaWxlcyIgbmFtZT0iJUxBQkVMX0FOVF9FWFRFTlRJT04iLz4KLQkKLQkKLQkKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc2NoZW1hL3dpZGdldFJlZ2lzdHJ5LmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zY2hlbWEvd2lkZ2V0UmVnaXN0cnkuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk2Y2M3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zY2hlbWEvd2lkZ2V0UmVnaXN0cnkuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIgaWQ9IndpZGdldFJlZ2lzdHJ5IiBuYW1lPSJXaWRnZXQgUmVnaXN0cnkiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndpZGdldEZhY3RvcnkiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3aWRnZXRGYWN0b3J5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5zZXJ0QmVmb3JlQ29tbWFuZElkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzk1YzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNTA5ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAyMjEgICAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSMgMjAwODAzMjYgICAyMjM4Mjkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwODA0MDIgICAyMjIwOTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFVwZGF0ZSBwcm9wZXJ0aWVzIGZpbGUuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLUJVVFRPTl9TSE9XX0FMTF9ESUFMT0dTPSZTaG93IEFsbAotQlVUVE9OX0hJREVfQUxMX0RJQUxPR1M9JkhpZGUgQWxsCi1DSEVDS0JPWF9ET19OT1RfU0hPV19ESUFMT0dfQUdBSU49RG8gbm90IHNob3cgbWUgdGhpcyBkaWFsb2cgYm94IGFnYWluLgotCi1UT09MVElQX1BQQURfUEFHRT1Db250cm9sIHRvIHNob3cvaGlkZSB0aGUgZGlhbG9ncyB0aGF0IGFwcGVhciB3aGVuIGEgcG9wLXVwIGFjdGlvbiBpcyBleGVjdXRlZC4KLVRPT0xUSVBfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOPVRvIGFsbG93IHRoaXMgZGlhbG9nIHRvIHNob3cgYWdhaW4sIGVuYWJsZSBmcm9tIHByZWZlcmVuY2UgLSBkaWFsb2dzLgotVE9PTFRJUF9QUEFEX0JVVFRPTl9TSE9XX0FMTD1TaG93IGFsbCBkaWFsb2dzLgotVE9PTFRJUF9QUEFEX0JVVFRPTl9ISURFX0FMTD1IaWRlIGFsbCBkaWFsb2dzIGFuZCBleGVjdXRlIHBvcC11cCBhY3Rpb25zLgotVE9PTFRJUF9QUEFEX0NPTUJPX1JVTlRJTUU9VGhlIHJ1bnRpbWUgeW91IHJlcXVpcmUgYW50IHRlbXBsYXRlcyBmb3IuCi1UT09MVElQX1BQQURfQ09NQk9fU0NFTkFSSU89VGhlIHNjZW5hcmlvIHlvdSByZXF1aXJlIGFudCB0ZW1wbGF0ZXMgZm9yLgotCi1XSVpBUkRfVElUTEVfQU5UPUNyZWF0ZSBBbnQgRmlsZXMKLVdJWkFSRF9QQUdFX1RJVExFX0FOVD1DcmVhdGUgV2ViIFNlcnZpY2UgQW50IGZpbGVzCi1XSVpBUkRfUEFHRV9ERVNDX0FOVD1TZWxlY3Qgd29ya3NwYWNlIGZvbGRlciBmb3IgQW50IHNjcmlwdCBhbmQgcHJvcGVydGllcyBmaWxlcwotTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUz1Db3B5aW5nIHdlYiBzZXJ2aWNlcyBBbnQgZmlsZXMKLU1TR19FUlJfQ09QWUlOR19BTlRfRklMRVM9RXJyb3IgZW5jb3VudGVyZWQgY29weWluZyBBbnQgZmlsZXMKLU1TR19FUlJfQU5UX0ZJTEVTX05PVF9GT1VORD1BbnQgZmlsZSBub3QgZm91bmQgYXQgezB9Ci1NU0dfV0FSTklOR19GSUxFX0VYSVNUUz1UaGUgZmlsZSB7MH0gZXhpc3RzLiAgRG8geW91IHdhbnQgdG8gb3ZlcndyaXRlPwotRElBTE9HX1RJVExFX09WRVJXUklURT1Db25maXJtIE92ZXJ3cml0ZQotCi1NU0dfRVJST1JfV0laQVJEX0lEX05PVF9GT1VORD1JV0FCMDAxM0UgQ291bGQgbm90IGZpbmQgd2l6YXJkIGlkOiB7MH0KLU1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VUPU9wZXJhdGlvbiB0aW1lZCBvdXQuCi0KLUxBQkVMX1JVTlRJTUVTX0xJU1Q9V2ViIHNlcnZpY2UgcnVudGltZToKLUxBQkVMX1NFUlZFUlNfTElTVD1XZWIgc2VydmljZSB0eXBlOgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODQ5YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqIDIwMDgwNDAyICAgMjIyMDk0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgcHJvcGVydGllcyBmaWxlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudFVJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVudmlyb25tZW50VUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1NIT1dfQUxMX0RJQUxPR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0hJREVfQUxMX0RJQUxPR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9CVVRUT05fU0hPV19BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFEX0JVVFRPTl9ISURFX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQ09NQk9fUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQ09NQk9fU0NFTkFSSU87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dJWkFSRF9JRF9OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1RJVExFX0FOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXSVpBUkRfUEFHRV9USVRMRV9BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1BBR0VfREVTQ19BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJSX0NPUFlJTkdfQU5UX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJfQU5UX0ZJTEVTX05PVF9GT1VORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTklOR19GSUxFX0VYSVNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfT1ZFUldSSVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JVTlRJTUVTX0xJU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVkVSU19MSVNUOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9MYWJlbHNBbmRJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL0xhYmVsc0FuZElkcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGZiODlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL0xhYmVsc0FuZElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgTGFiZWxzQW5kSWRzCi17Ci0gIHByaXZhdGUgVmVjdG9yIGxhYmVsc18gPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGlkc18gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAKLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsKXsKLQkgIGlkc18uYWRkKGlkKTsKLQkgIGxhYmVsc18uYWRkKGxhYmVsKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZChpbnQgaW5kZXgpewotCSAgcmV0dXJuIChTdHJpbmcpaWRzXy5nZXQoaW5kZXgpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpZHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldElkcygpCi0gIHsKLQkgIFN0cmluZ1tdIHN0cmluZ0FycmF5ID0gbmV3IFN0cmluZ1tpZHNfLnNpemUoKV07IAotCSAgaWRzXy5jb3B5SW50byhzdHJpbmdBcnJheSk7Ci0JICByZXR1cm4gc3RyaW5nQXJyYXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMYWJlbHMoKQotICB7Ci0JICBTdHJpbmdbXSBzdHJpbmdBcnJheSA9IG5ldyBTdHJpbmdbaWRzXy5zaXplKCldOyAKLQkgIGxhYmVsc18uY29weUludG8oc3RyaW5nQXJyYXkpOwotCSAgcmV0dXJuIHN0cmluZ0FycmF5OwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9jb21tb24vVGltZWRPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL1RpbWVkT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMTJkY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9jb21tb24vVGltZWRPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDQgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA4MjIgICAxNTQ3NTAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLklVbmRvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuSVVuZG9hYmxlT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFRpbWVkT3BlcmF0aW9uIGltcGxlbWVudHMgSVVuZG9hYmxlT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgQWJzdHJhY3RPcGVyYXRpb24gb3BlcmF0aW9uOwotICBwcml2YXRlIGludCAgICAgICAgICAgICAgIHRpbWVvdXQ7Ci0gIHByaXZhdGUgSVByb2dyZXNzTW9uaXRvciAgdGVtcE1vbml0b3I7Ci0gIHByaXZhdGUgSUFkYXB0YWJsZSAgICAgICAgdGVtcEluZm87Ci0gIHByaXZhdGUgSVN0YXR1cyAgICAgICAgICAgcmV0dXJuU3RhdHVzOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIG9wZXJhdGlvbkNvbXBsZXRlOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHRpbWVPdXRNZXNzYWdlOwotICAKLSAgcHVibGljIFRpbWVkT3BlcmF0aW9uKCBBYnN0cmFjdE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCB0aW1lb3V0LCBTdHJpbmcgdGltZU91dE1lc3NhZ2UgKQotICB7Ci0gICAgdGhpcy5vcGVyYXRpb24gICAgICA9IG9wZXJhdGlvbjsKLSAgICB0aGlzLnRpbWVvdXQgICAgICAgID0gdGltZW91dDsKLSAgICB0aGlzLnRpbWVPdXRNZXNzYWdlID0gdGltZU91dE1lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSAKLSAgewotICAgIFRocmVhZCAgZXhlY3V0ZVRocmVhZCA9IG5ldyBUaHJlYWQoIG5ldyBPcGVyYXRpb25SdW5uYWJsZSgpICk7Ci0gICAgCi0gICAgcmV0dXJuU3RhdHVzICAgICAgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIHRlbXBNb25pdG9yICAgICAgID0gbW9uaXRvcjsKLSAgICB0ZW1wSW5mbyAgICAgICAgICA9IGluZm87Ci0gICAgb3BlcmF0aW9uQ29tcGxldGUgPSBmYWxzZTsKLSAgICBleGVjdXRlVGhyZWFkLnN0YXJ0KCk7Ci0gICAgCi0gICAgc3luY2hyb25pemVkKCBvcGVyYXRpb24gKQotICAgIHsKLSAgICAgIHdoaWxlKCAhb3BlcmF0aW9uQ29tcGxldGUgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIG9wZXJhdGlvbi53YWl0KHRpbWVvdXQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgICAgID0gZXhjLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCJpZCIsIDAsIG1lc3NhZ2UgPT0gbnVsbCA/ICIiIDogbWVzc2FnZSwgZXhjICk7Ci0gICAgICAgICAgZXhlY3V0ZVRocmVhZC5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCAhb3BlcmF0aW9uQ29tcGxldGUgKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2UgdGltZWQgb3V0LCBzaW5jZSB0aGUgZXhlY3V0aW9uIHRocmVhZCBoYXNuJ3Qgc2V0IG9wZXJhdGlvbkNvbXBsZXRlIAotICAgICAgICAgIC8vIHRvIHRydWUuCi0gICAgICAgICAgU3RhdHVzICBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsImlkIiwgMCwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VULCBudWxsKTsKLSAgICAgICAgICBTaGVsbCAgIHNoZWxsICAgICAgID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotICAgICAgICAgIGJvb2xlYW4gd2FpdE1vcmUgICAgPSBNZXNzYWdlRGlhbG9nLm9wZW5Db25maXJtKHNoZWxsLCBFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX0VSUk9SX09QRVJBVElPTl9USU1FRF9PVVQsIHRpbWVPdXRNZXNzYWdlICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoICF3YWl0TW9yZSApCi0gICAgICAgICAgewotICAgICAgICAgICAgZXhlY3V0ZVRocmVhZC5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIFRoZXJlZm9yZSByZXR1cm4gdGhlIHN0YXR1cyBzZXQgaW4gdGhlIGZvcmtlZAotICAgIC8vIHRocmVhZC4KLSAgICByZXR1cm4gcmV0dXJuU3RhdHVzOwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBPcGVyYXRpb25SdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXR1cm5TdGF0dXMgPSBvcGVyYXRpb24uZXhlY3V0ZSh0ZW1wTW9uaXRvciwgdGVtcEluZm8pOwotICAgICAgfQotICAgICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAgICAgewotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGV4Yy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm5TdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCJpZCIsIDAsIG1lc3NhZ2UgPT0gbnVsbCA/ICIiIDogbWVzc2FnZSwgZXhjICk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCggb3BlcmF0aW9uICkKLSAgICAgICAgewotICAgICAgICAgIG9wZXJhdGlvbkNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICBvcGVyYXRpb24ubm90aWZ5KCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgcmVkbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5yZWRvKG1vbml0b3IsIGluZm8pOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgdW5kbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi51bmRvKG1vbml0b3IsIGluZm8pOwotICB9Ci0gIHB1YmxpYyBJVW5kb0NvbnRleHRbXSBnZXRDb250ZXh0cygpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmdldENvbnRleHRzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBoYXNDb250ZXh0KElVbmRvQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5oYXNDb250ZXh0KGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQ29udGV4dChJVW5kb0NvbnRleHQgY29udGV4dCkKLSAgewotICAgIG9wZXJhdGlvbi5hZGRDb250ZXh0KGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmNhbkV4ZWN1dGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNhblJlZG8oKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5jYW5SZWRvKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjYW5VbmRvKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uY2FuVW5kbygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLSAgICBvcGVyYXRpb24uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmdldExhYmVsKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVDb250ZXh0KElVbmRvQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgb3BlcmF0aW9uLnJlbW92ZUNvbnRleHQoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMYWJlbChTdHJpbmcgbmFtZSkKLSAgewotICAgIG9wZXJhdGlvbi5zZXRMYWJlbChuYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzNGVhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBbnRFeHRlbnNpb24gewotCQotCXByaXZhdGUgU3RyaW5nIGxhYmVsXzsKLQlwcml2YXRlIFN0cmluZyBydW50aW1lXzsKLQlwcml2YXRlIFN0cmluZyBzY2VuYXJpb187Ci0JcHJpdmF0ZSBTdHJpbmcgaWRfOwotCXByaXZhdGUgU3RyaW5nIHJ1bnRpbWVJRF87Ci0JcHJpdmF0ZSBTdHJpbmcgcGx1Z2luXzsKLQlwcml2YXRlIFN0cmluZyBwYXRoXzsKLQlwcml2YXRlIFN0cmluZyB3c2dlbnBhdGhfOwotCXByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnRfOwotCQotCXB1YmxpYyBBbnRFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQllbGVtZW50XyA9IGVsZW1lbnQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotCXsKLQkgICAgaWYgKGxhYmVsXz09bnVsbCkKLQkgICAgewotCSAgICAJbGFiZWxfID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBsYWJlbF87Ci0JfSAgIAotCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKQotCXsKLQkgICAgaWYgKHJ1bnRpbWVfPT1udWxsKQotCSAgICB7Ci0JICAgIAlydW50aW1lXyA9IGVsZW1lbnRfLmdldEF0dHJpYnV0ZSgicnVudGltZWxhYmVsIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHJ1bnRpbWVfOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNjZW5hcmlvTGFiZWwoKQotCXsKLQkgICAgaWYgKHNjZW5hcmlvXz09bnVsbCkKLQkgICAgewotCSAgICAJc2NlbmFyaW9fID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJzY2VuYXJpb2xhYmVsIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHNjZW5hcmlvXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRJRCgpCi0JewotCSAgICBpZiAoaWRfPT1udWxsKQotCSAgICB7Ci0JICAgIAlpZF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGlkXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lSUQoKQotCXsKLQkgICAgaWYgKHJ1bnRpbWVJRF89PW51bGwpCi0JICAgIHsKLQkgICAgCXJ1bnRpbWVJRF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVpZCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBydW50aW1lSURfOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFBsdWdpbigpCi0JewotCSAgICBpZiAocGx1Z2luXz09bnVsbCkKLQkgICAgewotCSAgICAJcGx1Z2luXyA9IGVsZW1lbnRfLmdldEF0dHJpYnV0ZSgicGx1Z2lubG9jYXRpb24iKTsKLQkgICAgfQotCSAgICByZXR1cm4gcGx1Z2luXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQYXRoKCkKLQl7Ci0JICAgIGlmIChwYXRoXz09bnVsbCkKLQkgICAgewotCSAgICAJcGF0aF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoInBhdGgiKTsKLQkgICAgfQotCSAgICByZXR1cm4gcGF0aF87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXU0dlblBhdGgoKQotCXsKLQkgICAgaWYgKHdzZ2VucGF0aF89PW51bGwpCi0JICAgIHsKLQkgICAgCXdzZ2VucGF0aF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoIndzZ2VucGF0aCIpOwotCSAgICB9Ci0JICAgIHJldHVybiB3c2dlbnBhdGhfOwotCX0KLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uQ3JlYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEV4dGVuc2lvbkNyZWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzRmMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uQ3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uLkxhYmVsc0FuZElkczsKLQotcHVibGljIGNsYXNzIEFudEV4dGVuc2lvbkNyZWF0aW9uIHsKLQotCXByaXZhdGUgSGFzaHRhYmxlIGFudEV4dGVudGlvbnNfOwotCXByaXZhdGUgc3RhdGljIEFudEV4dGVuc2lvbkNyZWF0aW9uIGFudEV4dGVuc2lvbkNfOwotCXByaXZhdGUgSGFzaHRhYmxlIHJ1bnRpbWVTdHJ1Y3RzXyA9IG51bGw7Ci0JCi0JCi0JcHVibGljIHN0YXRpYyBBbnRFeHRlbnNpb25DcmVhdGlvbiBnZXRJbnN0YW5jZSgpewotCQlpZihhbnRFeHRlbnNpb25DXyA9PSBudWxsKXsKLQkJCWFudEV4dGVuc2lvbkNfID0gbmV3IEFudEV4dGVuc2lvbkNyZWF0aW9uKCk7Ci0JCX0KLQkJcmV0dXJuIGFudEV4dGVuc2lvbkNfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVFeHRlbnNpb25zKCkKLQl7Ci0JCWFudEV4dGVudGlvbnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJLy9Mb2FkICBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5hbnRmaWxlcwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbnRFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIiwgImFudGZpbGVzIik7Ci0gICAgCi0JCWZvcihpbnQgaWR4PTA7IGlkeDxhbnRFeHRzLmxlbmd0aDsgaWR4KyspIAotCQl7Ci0JCQlJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGFudEV4dHNbaWR4XTsKLQkJCWlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoImFudGZpbGVzIikpCi0JCQl7Ci0JCQkJQW50RXh0ZW5zaW9uIGFlID0gbmV3IEFudEV4dGVuc2lvbihlbGVtKTsKLQkJCQlhbnRFeHRlbnRpb25zXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIGFlKTsKLQkJCX0gICAgICAgIAotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZVJ1bnRpbWVzKCl7Ci0JCUVudW1lcmF0aW9uIGFudEV4dHNFbnVtID0gYW50RXh0ZW50aW9uc18uZWxlbWVudHMoKTsKLQkJcnVudGltZVN0cnVjdHNfID0gbmV3IEhhc2h0YWJsZSgpOwotCQkKLQkJd2hpbGUoYW50RXh0c0VudW0uaGFzTW9yZUVsZW1lbnRzKCkpewotCQkJQW50RXh0ZW5zaW9uIGFudEV4dCA9IChBbnRFeHRlbnNpb24pYW50RXh0c0VudW0ubmV4dEVsZW1lbnQoKTsKLQkJCVJ1bnRpbWVTdHJ1Y3QgcnMgPSAoUnVudGltZVN0cnVjdClydW50aW1lU3RydWN0c18uZ2V0KGFudEV4dC5nZXRSdW50aW1lSUQoKSk7Ci0JCQlpZihycyA9PSBudWxsKXsKLQkJCQlycyA9IG5ldyBSdW50aW1lU3RydWN0KGFudEV4dC5nZXRSdW50aW1lSUQoKSk7IAotCQkJCXJzLnNldFJ1bnRpbWVMYWJlbChhbnRFeHQuZ2V0UnVudGltZUxhYmVsKCkpOwotCQkJCXJzLnNldFNjZW5hcmlvKGFudEV4dC5nZXRJRCgpLCBhbnRFeHQuZ2V0U2NlbmFyaW9MYWJlbCgpKTsKLQkJCQlydW50aW1lU3RydWN0c18ucHV0KHJzLmdldFJ1bnRpbWVJRCgpLCBycyk7Ci0JCQl9Ci0JCQllbHNlewotCQkJCXJzLnNldFNjZW5hcmlvKGFudEV4dC5nZXRJRCgpLCBhbnRFeHQuZ2V0U2NlbmFyaW9MYWJlbCgpKTsKLQkJCX0KLQkJfQotCX0KLQkJCi0JcHVibGljIExhYmVsc0FuZElkcyBnZXRSdW50aW1lTGFiZWxzQW5kSWRzKCl7Ci0JCWlmKGFudEV4dGVudGlvbnNfID09IG51bGwpIGNyZWF0ZUV4dGVuc2lvbnMoKTsKLQkJaWYocnVudGltZVN0cnVjdHNfID09IG51bGwpY3JlYXRlUnVudGltZXMoKTsKLQkJTGFiZWxzQW5kSWRzIHJ1bnRpbWUgPSBuZXcgTGFiZWxzQW5kSWRzKCk7IAotCQlFbnVtZXJhdGlvbiBydW50aW1lU3RydWN0cyA9IHJ1bnRpbWVTdHJ1Y3RzXy5lbGVtZW50cygpOwotCQl3aGlsZShydW50aW1lU3RydWN0cy5oYXNNb3JlRWxlbWVudHMoKSl7Ci0JCQlSdW50aW1lU3RydWN0IHJzID0gKFJ1bnRpbWVTdHJ1Y3QpcnVudGltZVN0cnVjdHMubmV4dEVsZW1lbnQoKTsJCi0JCQlydW50aW1lLmFkZChycy5nZXRSdW50aW1lSUQoKSxycy5nZXRSdW50aW1lTGFiZWwoKSk7Ci0JCX0KLQkJcmV0dXJuIHJ1bnRpbWU7Ci0JfQotCQotCXB1YmxpYyBMYWJlbHNBbmRJZHMgZ2V0U2NlbmFyaW9MYWJlbHNCeVJ1bnRpbWUoU3RyaW5nIHJ1bnRpbWVJZCl7Ci0JCWlmKGFudEV4dGVudGlvbnNfID09IG51bGwpIGNyZWF0ZUV4dGVuc2lvbnMoKTsKLQkJaWYocnVudGltZVN0cnVjdHNfID09IG51bGwpIGNyZWF0ZVJ1bnRpbWVzKCk7Ci0JCVJ1bnRpbWVTdHJ1Y3QgcnMgPSAoUnVudGltZVN0cnVjdClydW50aW1lU3RydWN0c18uZ2V0KHJ1bnRpbWVJZCk7CQotCQlyZXR1cm4gcnMuZ2V0U2NlbmFyaW9MYWJlbHMoKTsKLQl9Ci0JCi0JCQotCXB1YmxpYyBBbnRFeHRlbnNpb24gZ2V0QW5yRXh0QnlTY2VuYXJpbyhTdHJpbmcgc2VsZWN0aW9uKXsKLQkJaWYoYW50RXh0ZW50aW9uc18gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JCXJldHVybiAoQW50RXh0ZW5zaW9uKWFudEV4dGVudGlvbnNfLmdldChzZWxlY3Rpb24pOwkKLQl9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmN2Y2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNSAgIDEyODcxMSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA4MDIyMSAgIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotICogMjAwODA1MTIgICAyMjIwOTQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEVycm9yIGhhbmRsaW5nIHdoZW4gQW50IHRlbXBsYXRlIGNhbm5vdCBiZSBmb3VuZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVzc2FnZUJveDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucGx1Z2luLkVudlVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5OdWxsU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgQW50RmlsZUltcG9ydFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgewotCi0JLy9wcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBmQ29uZmlnRWxlbWVudDsKLQlwcml2YXRlIEFudEZpbGVJbXBvcnRXaXphcmRQYWdlIG1haW5QYWdlOwotCS8qKgotICAgICAqIFRoZSB3b3JrYmVuY2guCi0gICAgICovCi0gICAgcHJpdmF0ZSBJV29ya2JlbmNoIHdvcmtiZW5jaDsKLSAgICBwcml2YXRlIEFudEV4dGVuc2lvbkNyZWF0aW9uIGFudEV4dENfOwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgICAqLwotICAgIHByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAgCi0JcHVibGljIEFudEZpbGVJbXBvcnRXaXphcmQoKQotCXsKLQkJc3VwZXIoKTsJCSAKLQkJc2V0V2luZG93VGl0bGUoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLldJWkFSRF9USVRMRV9BTlQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXaW5kb3dUaXRsZShTdHJpbmcgbmV3VGl0bGUpIHsKLQkJc3VwZXIuc2V0V2luZG93VGl0bGUobmV3VGl0bGUpOwotCX0KLQkKLQkgcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7Ci0JICAgICAgICBzdXBlci5hZGRQYWdlcygpOwkgICAgICAgIAotCSAgICAgICAgbWFpblBhZ2UgPSBuZXcgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLldJWkFSRF9QQUdFX1RJVExFX0FOVCwgZ2V0U2VsZWN0aW9uKCkpOwotICAgICAgICAgICAgYWRkUGFnZShtYWluUGFnZSk7Ci0JICAgIH0KLQkKLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgewkKLQkJYW50RXh0Q18gPSBBbnRFeHRlbnNpb25DcmVhdGlvbi5nZXRJbnN0YW5jZSgpOwotCQlJUGF0aCBkZXN0aW5hdGlvbiA9IG1haW5QYWdlLmdldFBhdGgoKTsKLQkJaWYgKGRlc3RpbmF0aW9uID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQkJCQotCQllbHNlCi0JCXsKLQkJCUFudEV4dGVuc2lvbiBhbnRFeHQgPSBhbnRFeHRDXy5nZXRBbnJFeHRCeVNjZW5hcmlvKG1haW5QYWdlLmdldFNjZW5hcmlvKCkpOwotCQkJQnVuZGxlIHdzQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGFudEV4dC5nZXRQbHVnaW4oKSk7Ci0JCQlJUGF0aCBwcm9wZXJ0eVBhdGggPSBuZXcgUGF0aChhbnRFeHQuZ2V0UGF0aCgpKTsKLQkJCVVSTCBwcm9wZXJ0eVVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoIHdzQnVuZGxlLCBwcm9wZXJ0eVBhdGgsIG51bGwpOwotCQkJCi0JCQlpZiAocHJvcGVydHlVUkwgPT0gbnVsbCkgewotCQkJCW1haW5QYWdlLmRpc3BsYXlFcnJvckRpYWxvZygKLQkJCQkJCU5MUy5iaW5kKEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfRVJSX0FOVF9GSUxFU19OT1RfRk9VTkQsIGFudEV4dC5nZXRQYXRoKCkpKTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQkKLQkJCVVSTENvbm5lY3Rpb24gY29ubjsKLQkJCUlucHV0U3RyZWFtIGlzUHJvcGVydHkgPSBudWxsOwotCQkJdHJ5ewotCQkJCWNvbm4gPSBwcm9wZXJ0eVVSTC5vcGVuQ29ubmVjdGlvbigpOwotCQkJCWlzUHJvcGVydHkgPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0JCSAgICB9Ci0JCSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKXt9Ci0JCSAgICAKLQkJICAgIFBsdWdpbiBzb3VyY2VQbHVnaW4gPSBFbnZQbHVnaW4uZ2V0SW5zdGFuY2UoKTsgIAotCQkJU3RyaW5nIHRhcmdldEZpbGUgPSBhbnRFeHQuZ2V0UGF0aCgpOwotCQkgICAgY3JlYXRlSUZpbGUoc291cmNlUGx1Z2luLCBpc1Byb3BlcnR5LCBkZXN0aW5hdGlvbiwgdGFyZ2V0RmlsZSwgKElQcm9ncmVzc01vbml0b3IpbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCSAgICAKLQkJICAgIElQYXRoIHdzZ2VuUGF0aCA9IG5ldyBQYXRoKGFudEV4dC5nZXRXU0dlblBhdGgoKSk7Ci0JCQlVUkwgZmlsZVVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoIHdzQnVuZGxlLCB3c2dlblBhdGgsIG51bGwpOwotCQkJCi0JCQlpZiAoZmlsZVVSTCA9PSBudWxsKSB7Ci0JCQkJbWFpblBhZ2UuZGlzcGxheUVycm9yRGlhbG9nKAotCQkJCQkJTkxTLmJpbmQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJfQU5UX0ZJTEVTX05PVF9GT1VORCwgYW50RXh0LmdldFdTR2VuUGF0aCgpKSk7CQkJCQotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCQotCQkJVVJMQ29ubmVjdGlvbiBjb25uV1NHZW47Ci0JCQlJbnB1dFN0cmVhbSBpc1dTR2VuID0gbnVsbDsKLQkJCXRyeXsKLQkJCQljb25uV1NHZW4gPSBmaWxlVVJMLm9wZW5Db25uZWN0aW9uKCk7Ci0JCQkJaXNXU0dlbiA9IGNvbm5XU0dlbi5nZXRJbnB1dFN0cmVhbSgpOwotCQkgICAgfQotCQkgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSl7fQotCQkgICAgCi0JCSAgICBTdHJpbmcgdGFyZ2V0RmlsZVdTR2VuID0gYW50RXh0LmdldFdTR2VuUGF0aCgpOwotCQkgICAgY3JlYXRlSUZpbGUoc291cmNlUGx1Z2luLCBpc1dTR2VuLCBkZXN0aW5hdGlvbiwgdGFyZ2V0RmlsZVdTR2VuLCAoSVByb2dyZXNzTW9uaXRvciluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQotCQkgICAgCi0JCSAgIAotCQl9Ci0JICAgIHJldHVybiB0cnVlOwkJCi0gIH0JCi0JCi0JCi0JCi0JcHJpdmF0ZSBJU3RhdHVzIGNyZWF0ZUlGaWxlKFBsdWdpbiBwbHVnaW4sIElucHV0U3RyZWFtIHNvdXJjZSwgSVBhdGggdGFyZ2V0UGF0aCwgU3RyaW5nIHRhcmdldEZpbGUsIC8qSUVudmlyb25tZW50IGVudiwqLyBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkgICAgCi0JICBpZiAocGx1Z2luICE9IG51bGwpCi0JICB7Ci0JICAgIElQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKG5ldyBQYXRoKHRhcmdldEZpbGUpKTsKLQkgICAgCi0JICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUyk7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCSAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgZmlsZSBleGlzdHMgYmVmb3JlIGNvcHkKLQkgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gRmlsZVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHRhcmdldCk7CSAgICAgCi0JICAgICAgIAotCSAgICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLQkJCXsKLQkJCQlNZXNzYWdlQm94IG92ZXJ3cml0ZUJveCA9IG5ldyBNZXNzYWdlQm94KGdldFNoZWxsKCksIFNXVC5JQ09OX1FVRVNUSU9OfFNXVC5ZRVN8U1dULk5PKTsKLQkJCQlvdmVyd3JpdGVCb3guc2V0TWVzc2FnZShFbnZpcm9ubWVudFVJTWVzc2FnZXMuYmluZChFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX1dBUk5JTkdfRklMRV9FWElTVFMsIHRhcmdldC50b1N0cmluZygpKSk7CQkJCQotCQkJCW92ZXJ3cml0ZUJveC5zZXRUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5ESUFMT0dfVElUTEVfT1ZFUldSSVRFKTsKLQkJCQlpbnQgcmVzdWx0ID0gb3ZlcndyaXRlQm94Lm9wZW4oKTsKLQkJCQlpZiAocmVzdWx0ICE9IFNXVC5OTykKLQkJCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yLCAoSVN0YXR1c0hhbmRsZXIpbmV3IE51bGxTdGF0dXNIYW5kbGVyKCkpOwotCQkJCWVsc2UgCi0JCQkJCXJldHVybiBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKLQkJCX0gICAgICAgCi0JCQllbHNlIAotCQkJewotCQkJCUZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoY29udGV4dCwgdGFyZ2V0LCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yLCAoSVN0YXR1c0hhbmRsZXIpbmV3IE51bGxTdGF0dXNIYW5kbGVyKCkpOwotCQkJfQotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewkgICAgCQotCSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX0VSUl9DT1BZSU5HX0FOVF9GSUxFUywgZSk7Ci0JICAgIH0KLQkgIH0JICAKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gd2hpY2ggd2FzIHBhc3NlZCB0byA8Y29kZT5pbml0PC9jb2RlPi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHNlbGVjdGlvbgotICAgICAqLwotICAgIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBzZWxlY3Rpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgd29ya2JlbmNoIHdoaWNoIHdhcyBwYXNzZWQgdG8gPGNvZGU+aW5pdDwvY29kZT4uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSB3b3JrYmVuY2gKLSAgICAgKi8KLSAgICBwdWJsaWMgSVdvcmtiZW5jaCBnZXRXb3JrYmVuY2goKSB7Ci0gICAgICAgIHJldHVybiB3b3JrYmVuY2g7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIDxjb2RlPkJhc2ljTmV3UmVzb3VyY2VXaXphcmQ8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgCi0gICAgICogPGNvZGU+SVdvcmtiZW5jaFdpemFyZDwvY29kZT4gbWV0aG9kIHJlY29yZHMgdGhlIGdpdmVuIHdvcmtiZW5jaCBhbmQKLSAgICAgKiBzZWxlY3Rpb24sIGFuZCBpbml0aWFsaXplcyB0aGUgZGVmYXVsdCBiYW5uZXIgaW1hZ2UgZm9yIHRoZSBwYWdlcwotICAgICAqIGJ5IGNhbGxpbmcgPGNvZGU+aW5pdGlhbGl6ZURlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPi4KLSAgICAgKiBTdWJjbGFzc2VzIG1heSBleHRlbmQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbikgewotICAgICAgICB0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKLSAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uOwotCi0gICAgICAgIGluaXRpYWxpemVEZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVzIHRoZSBkZWZhdWx0IHBhZ2UgaW1hZ2UgZGVzY3JpcHRvciB0byBhbiBhcHByb3ByaWF0ZSBiYW5uZXIuCi0gICAgICogQnkgY2FsbGluZyA8Y29kZT5zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcjwvY29kZT4uCi0gICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdXNlcyBhIGdlbmVyaWMgbmV3IHdpemFyZCBpbWFnZS4KLSAgICAgKiA8cD4KLSAgICAgKiBTdWJjbGFzc2VzIG1heSByZWltcGxlbWVudC4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKCkgewotICAgIAlJbWFnZURlc2NyaXB0b3IgZGVzYyA9IEVudlVJUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvZnVsbC93aXpiYW4vbmV3YW50ZmlsZXNfd2l6LnBuZyIpOy8vJE5PTi1OTFMtMSQKLSAgICAgICAgc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoZGVzYyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VsZWN0cyBhbmQgcmV2ZWFscyB0aGUgbmV3bHkgYWRkZWQgcmVzb3VyY2UgaW4gYWxsIHBhcnRzCi0gICAgICogb2YgdGhlIGFjdGl2ZSB3b3JrYmVuY2ggd2luZG93J3MgYWN0aXZlIHBhZ2UuCi0gICAgICoKLSAgICAgKiBAc2VlIElTZXRTZWxlY3Rpb25UYXJnZXQKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZWxlY3RBbmRSZXZlYWwoSVJlc291cmNlIG5ld1Jlc291cmNlKSB7Ci0gICAgICAgIHNlbGVjdEFuZFJldmVhbChuZXdSZXNvdXJjZSwgZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEF0dGVtcHRzIHRvIHNlbGVjdCBhbmQgcmV2ZWFsIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaW4gYWxsCi0gICAgICogcGFydHMgd2l0aGluIHRoZSBzdXBwbGllZCB3b3JrYmVuY2ggd2luZG93J3MgYWN0aXZlIHBhZ2UuCi0gICAgICogPHA+Ci0gICAgICogQ2hlY2tzIGFsbCBwYXJ0cyBpbiB0aGUgYWN0aXZlIHBhZ2UgdG8gc2VlIGlmIHRoZXkgaW1wbGVtZW50IDxjb2RlPklTZXRTZWxlY3Rpb25UYXJnZXQ8L2NvZGU+LAotICAgICAqIGVpdGhlciBkaXJlY3RseSBvciBhcyBhbiBhZGFwdGVyLiBJZiBzbywgdGVsbHMgdGhlIHBhcnQgdG8gc2VsZWN0IGFuZCByZXZlYWwgdGhlCi0gICAgICogc3BlY2lmaWVkIHJlc291cmNlLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZXNvdXJjZSB0aGUgcmVzb3VyY2UgdG8gYmUgc2VsZWN0ZWQgYW5kIHJldmVhbGVkCi0gICAgICogQHBhcmFtIHdpbmRvdyB0aGUgd29ya2JlbmNoIHdpbmRvdyB0byBzZWxlY3QgYW5kIHJldmVhbCB0aGUgcmVzb3VyY2UKLSAgICAgKiAKLSAgICAgKiBAc2VlIElTZXRTZWxlY3Rpb25UYXJnZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2VsZWN0QW5kUmV2ZWFsKElSZXNvdXJjZSByZXNvdXJjZSwKLSAgICAgICAgICAgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7Ci0gICAgICAgIC8vIHZhbGlkYXRlIHRoZSBpbnB1dAotICAgICAgICBpZiAod2luZG93ID09IG51bGwgfHwgcmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gZ2V0IGFsbCB0aGUgdmlldyBhbmQgZWRpdG9yIHBhcnRzCi0gICAgICAgIExpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHJlZnNbXSA9IHBhZ2UuZ2V0Vmlld1JlZmVyZW5jZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBJV29ya2JlbmNoUGFydCBwYXJ0ID0gcmVmc1tpXS5nZXRQYXJ0KGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcGFydHMuYWRkKHBhcnQpOwotICAgICAgICB9Ci0gICAgICAgIHJlZnMgPSBwYWdlLmdldEVkaXRvclJlZmVyZW5jZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAocmVmc1tpXS5nZXRQYXJ0KGZhbHNlKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChyZWZzW2ldLmdldFBhcnQoZmFsc2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ocmVzb3VyY2UpOwotICAgICAgICBJdGVyYXRvciBpdHIgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkgewotICAgICAgICAgICAgSVdvcmtiZW5jaFBhcnQgcGFydCA9IChJV29ya2JlbmNoUGFydCkgaXRyLm5leHQoKTsKLQotICAgICAgICAgICAgLy8gZ2V0IHRoZSBwYXJ0J3MgSVNldFNlbGVjdGlvblRhcmdldCBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgSVNldFNlbGVjdGlvblRhcmdldCB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KQotICAgICAgICAgICAgICAgIHRhcmdldCA9IChJU2V0U2VsZWN0aW9uVGFyZ2V0KSBwYXJ0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRhcmdldCA9IChJU2V0U2VsZWN0aW9uVGFyZ2V0KSBwYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWRhcHRlcihJU2V0U2VsZWN0aW9uVGFyZ2V0LmNsYXNzKTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFuZCByZXZlYWwgcmVzb3VyY2UKLSAgICAgICAgICAgICAgICBmaW5hbCBJU2V0U2VsZWN0aW9uVGFyZ2V0IGZpbmFsVGFyZ2V0ID0gdGFyZ2V0OwotICAgICAgICAgICAgICAgIHdpbmRvdy5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRhcmdldC5zZWxlY3RSZXZlYWwoc2VsZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMDFjZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgICAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqIDIwMDgwNTEyICAgMjIyMDk0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFcnJvciBoYW5kbGluZyB3aGVuIEFudCB0ZW1wbGF0ZSBjYW5ub3QgYmUgZm91bmQKLSAqIDIwMDgwNjE4ICAgMjM3NjcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBMYWJlbCBvbiBBbnQgZmlsZXMgd2l6YXJkIGlzIHRydW5jYXRlZAotICogMjAwODA3MTYgICAyMzgwNTkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5ldyBhbnQgZmlsZXMgd2l6YXJkIG5vdCB3b3JraW5nCi0gKiAyMDA4MTAyMyAgIDI1MTkxMSBlcmljZHBAY2EuaWJtLmNvbSAgIC0gRXJpYyBELiBQZXRlcnMsIE5QRSBpbiAubG9nIHdoZW4gY2hvb3NpbmcgYW50IGZpbGVzIHRvIGltcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkUmVzb3VyY2VJbXBvcnRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmNvbW1vbi5MYWJlbHNBbmRJZHM7Ci0KLXB1YmxpYyBjbGFzcyBBbnRGaWxlSW1wb3J0V2l6YXJkUGFnZSBleHRlbmRzIFdpemFyZFJlc291cmNlSW1wb3J0UGFnZXsKLQkgIAotCXByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkiOwotCQotCS8qIENPTlRFWFRfSUQgU1JQRjAwMDEgZm9yIHNlcnZlciBwcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIgcnVudGltZSBwcmVmZXJlbmNlIHBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYgPSBwbHVnaW5JZF8gKyAiLlNSUEYwMDAxIjsKLQlwcml2YXRlIENvbWJvIHNjZW5hcmlvXzsKLQotCS8qIENPTlRFWFRfSUQgU1JQRjAwMDIgZm9yIHJ1bnRpbWUgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiA9IHBsdWdpbklkXyArICIuU1JQRjAwMDIiOwotCXByaXZhdGUgQ29tYm8gcnVudGltZV87CQotCQotCXByaXZhdGUgQW50RXh0ZW5zaW9uQ3JlYXRpb24gYW50RXh0Q187Ci0JcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzQW5kSWRzU2NlbmFyaW9fOwotCXByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsc0FuZElkc1J1bnRpbWVfOwotLy8JcHJpdmF0ZSBpbnQgcnVudGltZUlkeF87Ci0JCi0JcHVibGljIEFudEZpbGVJbXBvcnRXaXphcmRQYWdlKFN0cmluZyBwYWdlTmFtZSwKLQkgICAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkgICAgICAgIHN1cGVyKCJXU0FudEZpbGVzUGFnZTEiLCBzZWxlY3Rpb24pOy8vJE5PTi1OTFMtMSQKLQkgICAgICAgIHNldFRpdGxlKHBhZ2VOYW1lKTsJICAgICAgICAKLQkgICAgICAgIHNldERlc2NyaXB0aW9uKEVudmlyb25tZW50VUlNZXNzYWdlcy5XSVpBUkRfUEFHRV9ERVNDX0FOVCk7CSAgICAgICAgCi0JICAgIH0KLQkKLQkJCi0JcHVibGljIENvbWJvIGNyZWF0ZUNvbWJvKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0JICB7ICAgIAotCSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gbGFiZWxOYW1lIDogdG9vbHRpcDsKLQkgICAgCi0JICAgIGlmKCBsYWJlbE5hbWUgIT0gbnVsbCApCi0JICAgIHsKLQkgICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuTk9ORSk7Ci0JICAgICAgbGFiZWwuc2V0VGV4dCggbGFiZWxOYW1lICk7Ci0JICAgICAgbGFiZWwuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLQkgICAgfQotCSAgICAKLQkgICAgQ29tYm8gY29tYm8gPSBuZXcgQ29tYm8oIHBhcmVudCwgc3R5bGUgKTsKLQkgICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLQkgICAgIAotCSAgICBjb21iby5zZXRMYXlvdXREYXRhKCBncmlkZGF0YSApOwotCSAgICBjb21iby5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCApOwotCSAgICAKLQkgICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGNvbWJvLCBwbHVnaW5JZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0JICAgIAotCSAgICByZXR1cm4gY29tYm87ICAgICAgCi0JICB9Ci0JCi0JcHJvdGVjdGVkIElUcmVlQ29udGVudFByb3ZpZGVyIGdldEZpbGVQcm92aWRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBJUGF0aCBnZXRQYXRoKCkKLQl7Ci0JCXJldHVybiBnZXRDb250YWluZXJGdWxsUGF0aCgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVTb3VyY2VHcm91cChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYWdlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdsLm51bUNvbHVtbnMgPSAyOwotCQlwYWdlLnNldExheW91dChnbCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotCQlwYWdlLnNldExheW91dERhdGEoZ2QpOwotCSAgCi0JCXJ1bnRpbWVfID0gY3JlYXRlQ29tYm8ocGFnZSxFbnZpcm9ubWVudFVJTWVzc2FnZXMuTEFCRUxfUlVOVElNRVNfTElTVCwKLQkJCSAgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRF9DT01CT19SVU5USU1FLAotCQkJCQkJCQkJIElORk9QT1BfU1JQRl9SVU5USU1FX1BSRUYsCi0JCQkJCQkJCQkgU1dULlNJTkdMRXxTV1QuQk9SREVSfFNXVC5SRUFEX09OTFkpOwotCQotCQlydW50aW1lXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7fQotCQkJCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJaGFuZGxlUnVudGltZVNlbGVjdGVkKCk7CQkJCQkKLQkJCX0KLQkJfSk7Ci0JCi0JCXNjZW5hcmlvXyA9IGNyZWF0ZUNvbWJvKHBhZ2UsRW52aXJvbm1lbnRVSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwKLQkJCQkgIEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQ09NQk9fU0NFTkFSSU8sCi0JCQkJCQkJCQkJSU5GT1BPUF9TUlBGX1NFUlZFUl9QUkVGLAotCQkJCQkJCQkJCVNXVC5TSU5HTEV8U1dULkJPUkRFUnxTV1QuUkVBRF9PTkxZKTsKLQkJCi0JCWluaWF0aWFsaXplKCk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlU291cmNlR3JvdXAoKSB7Ci0JCXJldHVybiBydW50aW1lXy5nZXRJdGVtQ291bnQoKSA+IDA7Ci0JfQotCi0JcHJvdGVjdGVkIElUcmVlQ29udGVudFByb3ZpZGVyIGdldEZvbGRlclByb3ZpZGVyKCkgewotCQkgcmV0dXJuIG51bGw7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZU9wdGlvbnNHcm91cChDb21wb3NpdGUgcGFyZW50KSB7Ci0gICAgICAgIC8vZW1wdHkgLSBkb24ndCB3YW50IGFuIG9wdGlvbnMgZ3JvdXAgCi0gICAgfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKHNjZW5hcmlvXyA9PSBldmVudC53aWRnZXQpCi0JCQloYW5kbGVTY2VuYXJpb1NlbGVjdGVkKCk7Ci0JCWVsc2UgaWYgKHJ1bnRpbWVfID09IGV2ZW50LndpZGdldCkKLQkJCWhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpOwotCQllbHNlCi0JCQlzdXBlci5oYW5kbGVFdmVudChldmVudCk7Ci0JCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlUnVudGltZVNlbGVjdGVkKCl7Ci0JCWxhYmVsc0FuZElkc1NjZW5hcmlvXyA9IGFudEV4dENfLmdldFNjZW5hcmlvTGFiZWxzQnlSdW50aW1lKGxhYmVsc0FuZElkc1J1bnRpbWVfLmdldElkKHJ1bnRpbWVfLmdldFNlbGVjdGlvbkluZGV4KCkpKTsKLQkJc2V0U2NlbmFyaW9MYWJlbHMobGFiZWxzQW5kSWRzU2NlbmFyaW9fLmdldExhYmVscygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlU2NlbmFyaW9TZWxlY3RlZCgpewotCQkKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGluaWF0aWFsaXplKCl7Ci0JCWFudEV4dENfID0gQW50RXh0ZW5zaW9uQ3JlYXRpb24uZ2V0SW5zdGFuY2UoKTsKLQkJbGFiZWxzQW5kSWRzUnVudGltZV8gPSBhbnRFeHRDXy5nZXRSdW50aW1lTGFiZWxzQW5kSWRzKCk7Ci0JCWlmIChsYWJlbHNBbmRJZHNSdW50aW1lXy5nZXRMYWJlbHMoKS5sZW5ndGggPiAwKQotCQkJc2V0UnVudGltZUxhYmVscyhsYWJlbHNBbmRJZHNSdW50aW1lXy5nZXRMYWJlbHMoKSk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0U2NlbmFyaW8oKXsKLQkJcmV0dXJuIGxhYmVsc0FuZElkc1NjZW5hcmlvXy5nZXRJZChzY2VuYXJpb18uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRTZWxlY3Rpb24oQ29tYm8gY29tYm8sIFN0cmluZyBzKQotCXsKLQkJU3RyaW5nW10gaXRlbXMgPSBjb21iby5nZXRJdGVtcygpOwotCQlmb3IgKGludCBpPTA7IGk8aXRlbXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChpdGVtc1tpXS5lcXVhbHMocykpCi0JCQl7Ci0JCQkJY29tYm8uc2VsZWN0KGkpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0UnVudGltZUxhYmVscyhTdHJpbmdbXSBydW50aW1lTGFiZWxzKQotCXsKLQkJcnVudGltZV8uc2V0SXRlbXMocnVudGltZUxhYmVscyk7Ci0JICAgIC8vdW50aWwgdGhlIHByZWZlcmVuY2VzIGFyZSBzZXQgdXAKLQkJc2V0U2VsZWN0aW9uKHJ1bnRpbWVfLHJ1bnRpbWVMYWJlbHNbMF0pOwotLy8JCXJ1bnRpbWVJZHhfID0gMDsKLQkJbGFiZWxzQW5kSWRzU2NlbmFyaW9fID0gYW50RXh0Q18uZ2V0U2NlbmFyaW9MYWJlbHNCeVJ1bnRpbWUobGFiZWxzQW5kSWRzUnVudGltZV8uZ2V0SWQoMCkpOwotCQlzZXRTY2VuYXJpb0xhYmVscyhsYWJlbHNBbmRJZHNTY2VuYXJpb18uZ2V0TGFiZWxzKCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0U2NlbmFyaW9MYWJlbHMoU3RyaW5nW10gc2NlbmFyaW9MYWJlbHMpCi0JewotCQlzY2VuYXJpb18uc2V0SXRlbXMoc2NlbmFyaW9MYWJlbHMpOwotCSAgICAvL3VudGlsIHRoZSBwcmVmZXJlbmNlcyBhcmUgc2V0IHVwCi0JCXNldFNlbGVjdGlvbihzY2VuYXJpb18sc2NlbmFyaW9MYWJlbHNbMF0pOwotCQkKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmREYXRhVHJhbnNmZXJQYWdlI2Rpc3BsYXlFcnJvckRpYWxvZyhqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIGRpc3BsYXlFcnJvckRpYWxvZyhTdHJpbmcgbWVzc2FnZSkgewotCQlzdXBlci5kaXNwbGF5RXJyb3JEaWFsb2cobWVzc2FnZSk7Ci0JfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvRXJyb3JEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0Vycm9yRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZDFjMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvRXJyb3JEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JEaWFsb2cgZXh0ZW5kcyBNZXNzYWdlRGlhbG9nCi17Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gZXJyb3IgZGlhbG9nLiBOb3RlIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgbm8gdmlzdWFsCi0gICAqIHJlcHJlc2VudGF0aW9uIChubyB3aWRnZXRzKSB1bnRpbCBpdCBpcyB0b2xkIHRvIG9wZW4uCi0gICAqIDxwPgotICAgKiBOb3JtYWxseSBvbmUgc2hvdWxkIHVzZSA8Y29kZT5vcGVuRXJyb3I8L2NvZGU+IHRvIGNyZWF0ZSBhbmQgb3BlbiBvbmUgb2YKLSAgICogdGhlc2UuIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZnVsIG9ubHkgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQKLSAgICogY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwKLSAgICogYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UgY2hpbGRyZW4uCi0gICAqIDwvcD4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBzaGVsbCB1bmRlciB3aGljaCB0byBjcmVhdGUgdGhpcyBkaWFsb2cKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKi8KLSAgcHVibGljIEVycm9yRGlhbG9nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCwgZGlhbG9nVGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBUaGlzIHNob3VsZCBhbHNvIGJlIG92ZXJ3cml0dGVuIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgT0sgYW5kIERldGFpbHMgYnV0dG9ucwotICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgIHBhcmVudCwKLSAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5PS19JRCwKLSAgICAgIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsCi0gICAgICB0cnVlKTsKLSAgICBpZiAoc3RhdHVzLmlzTXVsdGlTdGF0dXMoKSB8fCBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkgIT0gbnVsbCApCi0gICAgewotICAgICAgZGV0YWlsc0J1dHRvbiA9Ci0gICAgICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQsCi0gICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5TSE9XX0RFVEFJTFNfTEFCRUwsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgbWV0aG9kcyB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZQotICAgKiBzdWJjbGFzc2VzLiBUaGUgaW1hZ2UgbmFtZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBEaWFsb2cgY2xhc3MKLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZSBnZXREaWFsb2dJbWFnZSgpCi0gIHsKLSAgICAvLyBjcmVhdGUgaW1hZ2UKLSAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fRVJST1IpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0luZm9EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0luZm9EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEwN2RiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9JbmZvRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi0vKioKLSAqIEEgZGlhbG9nIHRvIGRpc3BsYXkgb25lIG9yIG1vcmUgZXJyb3JzIHRvIHRoZSB1c2VyLCBhcyBjb250YWluZWQgaW4gYW4KLSAqIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0LiBJZiBhbiBlcnJvciBjb250YWlucyBhZGRpdGlvbmFsIGRldGFpbGVkCi0gKiBpbmZvcm1hdGlvbiB0aGVuIGEgRGV0YWlscyBidXR0b24gaXMgYXV0b21hdGljYWxseSBzdXBwbGllZCwgd2hpY2ggc2hvd3Mgb3IKLSAqIGhpZGVzIGFuIGVycm9yIGRldGFpbHMgdmlld2VyIHdoZW4gcHJlc3NlZCBieSB0aGUgdXNlci4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIEluZm9EaWFsb2cgZXh0ZW5kcyBNZXNzYWdlRGlhbG9nCi17Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVycm9yIGRpYWxvZy4gTm90ZSB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG5vIHZpc3VhbAotICAgKiByZXByZXNlbnRhdGlvbiAobm8gd2lkZ2V0cykgdW50aWwgaXQgaXMgdG9sZCB0byBvcGVuLgotICAgKiA8cD4KLSAgICogTm9ybWFsbHkgb25lIHNob3VsZCB1c2UgPGNvZGU+b3BlbkVycm9yPC9jb2RlPiB0byBjcmVhdGUgYW5kIG9wZW4gb25lIG9mCi0gICAqIHRoZXNlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBlcnJvciBvYmplY3QgYmVpbmcgZGlzcGxheWVkCi0gICAqIGNvbnRhaW5zIGNoaWxkIGl0ZW1zIDxpdD5hbmQ8L2l0PiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgbWFzayB3aGljaCB3aWxsCi0gICAqIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlIGNoaWxkcmVuLgotICAgKiA8L3A+Ci0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50U2hlbGwKLSAgICogICAgICAgICAgICB0aGUgc2hlbGwgdW5kZXIgd2hpY2ggdG8gY3JlYXRlIHRoaXMgZGlhbG9nCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICovCi0gIHB1YmxpYyBJbmZvRGlhbG9nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCwgZGlhbG9nVGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBUaGlzIHNob3VsZCBhbHNvIGJlIG92ZXJ3cml0dGVuIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgT0sgYW5kIERldGFpbHMgYnV0dG9ucwotICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgIHBhcmVudCwKLSAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5PS19JRCwKLSAgICAgIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsCi0gICAgICB0cnVlKTsKLSAgICBpZiAoc3RhdHVzLmlzTXVsdGlTdGF0dXMoKSApCi0gICAgewotICAgICAgZGV0YWlsc0J1dHRvbiA9Ci0gICAgICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQsCi0gICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5TSE9XX0RFVEFJTFNfTEFCRUwsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgbWV0aG9kcyB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZQotICAgKiBzdWJjbGFzc2VzLiBUaGUgaW1hZ2UgbmFtZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBEaWFsb2cgY2xhc3MKLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZSBnZXREaWFsb2dJbWFnZSgpCi0gIHsKLSAgICAvLyBjcmVhdGUgaW1hZ2UKLSAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fSU5GT1JNQVRJT04pOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL01lc3NhZ2VEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL01lc3NhZ2VEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRhZjcyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9NZXNzYWdlRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA0ICAgMTI4OTg0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB0byBkaXNwbGF5IG9uZSBvciBtb3JlIGVycm9ycyB0byB0aGUgdXNlciwgYXMgY29udGFpbmVkIGluIGFuCi0gKiA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdC4gSWYgYW4gZXJyb3IgY29udGFpbnMgYWRkaXRpb25hbCBkZXRhaWxlZAotICogaW5mb3JtYXRpb24gdGhlbiBhIERldGFpbHMgYnV0dG9uIGlzIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQsIHdoaWNoIHNob3dzIG9yCi0gKiBoaWRlcyBhbiBlcnJvciBkZXRhaWxzIHZpZXdlciB3aGVuIHByZXNzZWQgYnkgdGhlIHVzZXIuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRGlhbG9nIGV4dGVuZHMgRGlhbG9nCi17Ci0gIHByb3RlY3RlZCBDb21wb3NpdGUgcGFyZW50OwotCi0gIC8qKgotICAgKiBSZXNlcnZlIHJvb20gZm9yIHRoaXMgbWFueSBsaXN0IGl0ZW1zLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTElTVF9JVEVNX0NPVU5UID0gNzsKLQotICAvKioKLSAgICogVGhlIERldGFpbHMgYnV0dG9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEJ1dHRvbiBkZXRhaWxzQnV0dG9uOwotCi0gIC8qKgotICAgKiBUaGUgdGl0bGUgb2YgdGhlIGRpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGl0bGU7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG1lc3NhZ2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBTV1QgbGlzdCBjb250cm9sIHRoYXQgZGlzcGxheXMgdGhlIGVycm9yIGRldGFpbHMuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBsaXN0OwotICBwcm90ZWN0ZWQgVGV4dCBkZXRhaWxzOwotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZXJyb3IgZGV0YWlscyB2aWV3ZXIgaXMgY3VycmVudGx5IGNyZWF0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBsaXN0Q3JlYXRlZCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBkZXRhaWxzQ3JlYXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBGaWx0ZXIgbWFzayBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggc3RhdHVzIGl0ZW1zIHRvIGRpc3BsYXkuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGRpc3BsYXlNYXNrID0gMHhGRkZGOwotCi0gIC8qKgotICAgKiBUaGUgbWFpbiBzdGF0dXMgb2JqZWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIElTdGF0dXMgc3RhdHVzOwotICAKLSAgcHJpdmF0ZSBQb2ludCBzYXZlZFNpemUgPSBudWxsOwotCi0gIC8qKgotICAgKiBMaXN0IG9mIHRoZSBtYWluIGVycm9yIG9iamVjdCdzIGRldGFpbGVkIGVycm9ycyAoZWxlbWVudCB0eXBlOiA8Y29kZT5TdGF0dXM8L2NvZGU+KS4KLSAgICovCi0gIHByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCBzdGF0dXNMaXN0OwotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlcnJvciBkaWFsb2cuIE5vdGUgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBubyB2aXN1YWwKLSAgICogcmVwcmVzZW50YXRpb24gKG5vIHdpZGdldHMpIHVudGlsIGl0IGlzIHRvbGQgdG8gb3Blbi4KLSAgICogPHA+Ci0gICAqIE5vcm1hbGx5IG9uZSBzaG91bGQgdXNlIDxjb2RlPm9wZW5FcnJvcjwvY29kZT4gdG8gY3JlYXRlIGFuZCBvcGVuIG9uZSBvZgotICAgKiB0aGVzZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWwgb25seSBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nIGRpc3BsYXllZAotICAgKiBjb250YWlucyBjaGlsZCBpdGVtcyA8aXQ+YW5kPC9pdD4geW91IG5lZWQgdG8gc3BlY2lmeSBhIG1hc2sgd2hpY2ggd2lsbAotICAgKiBiZSB1c2VkIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZSBjaGlsZHJlbi4KLSAgICogPC9wPgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHNoZWxsIHVuZGVyIHdoaWNoIHRvIGNyZWF0ZSB0aGlzIGRpYWxvZwotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHBhcmFtIGRpc3BsYXlNYXNrCi0gICAqICAgICAgICAgICAgdGhlIG1hc2sgdG8gdXNlIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiBjaGlsZCBpdGVtcywgYXMgcGVyCi0gICAqICAgICAgICAgICAgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqLwotICBwdWJsaWMgTWVzc2FnZURpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwpOwotICAgICAgdGhpcy50aXRsZSA9IGRpYWxvZ1RpdGxlID09IG51bGwgPyBKRmFjZVJlc291cmNlcy5nZXRTdHJpbmcoIlByb2JsZW1fT2NjdXJyZWQiKSA6IC8vJE5PTi1OTFMtMSQKLSAgZGlhbG9nVGl0bGU7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSA9PSBudWxsID8gc3RhdHVzLmdldE1lc3NhZ2UoKSA6IEpGYWNlUmVzb3VyY2VzLmZvcm1hdCgiUmVhc29uIiwgbmV3IE9iamVjdFtdIHsgbWVzc2FnZSwgc3RhdHVzLmdldE1lc3NhZ2UoKX0pOyAvLyROT04tTkxTLTEkCi0gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7Ci0gICAgc3RhdHVzTGlzdCA9IEFycmF5cy5hc0xpc3Qoc3RhdHVzLmdldENoaWxkcmVuKCkpOwotICAgIHRoaXMuZGlzcGxheU1hc2sgPSBkaXNwbGF5TWFzazsKLSAgICBzZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOwotICB9Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykgTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4gSGFuZGxlcyB0aGUgcHJlc3Npbmcgb2YgdGhlIE9rIG9yCi0gICAqIERldGFpbHMgYnV0dG9uIGluIHRoaXMgZGlhbG9nLiBJZiB0aGUgT2sgYnV0dG9uIHdhcyBwcmVzc2VkIHRoZW4gY2xvc2UKLSAgICogdGhpcyBkaWFsb2cuIElmIHRoZSBEZXRhaWxzIGJ1dHRvbiB3YXMgcHJlc3NlZCB0aGVuIHRvZ2dsZSB0aGUgZGlzcGxheWluZwotICAgKiBvZiB0aGUgZXJyb3IgZGV0YWlscyBhcmVhLiBOb3RlIHRoYXQgdGhlIERldGFpbHMgYnV0dG9uIHdpbGwgb25seSBiZQotICAgKiB2aXNpYmxlIGlmIHRoZSBlcnJvciBiZWluZyBkaXNwbGF5ZWQgc3BlY2lmaWVzIGNoaWxkIGRldGFpbHMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBpZCkKLSAgewotICAgIGlmIChpZCA9PSBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCkKLSAgICB7IC8vIHdhcyB0aGUgZGV0YWlscyBidXR0b24gcHJlc3NlZD8KLSAgICAgIHRvZ2dsZURldGFpbHNBcmVhKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzdXBlci5idXR0b25QcmVzc2VkKGlkKTsKLSAgICB9Ci0gIH0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBNZXRob2QgZGVjbGFyZWQgaW4gV2luZG93LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dCh0aXRsZSk7Ci0gIH0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBUaGlzIHNob3VsZCBhbHNvIGJlIG92ZXJ3cml0dGVuIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgT0sgYW5kIERldGFpbHMgYnV0dG9ucwotICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgIHBhcmVudCwKLSAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5PS19JRCwKLSAgICAgIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsCi0gICAgICB0cnVlKTsKLSAgICBpZiAoc3RhdHVzLmlzTXVsdGlTdGF0dXMoKSB8fCBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkgIT0gbnVsbCApCi0gICAgewotICAgICAgZGV0YWlsc0J1dHRvbiA9Ci0gICAgICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQsCi0gICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5TSE9XX0RFVEFJTFNfTEFCRUwsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBwYXJlbnQuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSk7Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0lORk9STUFUSU9OKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4gQ3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgY29udGVudHMKLSAgICogb2YgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIGRpYWxvZyAoYWJvdmUgdGhlIGJ1dHRvbiBiYXIpLgotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0KLSAgICAvLyBjcmVhdGUgY29tcG9zaXRlCi0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBDb21wb3NpdGUgaW1hZ2VBbmRMYWJlbCA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgaW1hZ2VBbmRMYWJlbC5zZXRMYXlvdXQoZ2wpOwotICAgIGltYWdlQW5kTGFiZWwuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApKTsKLSAgICAKLSAgICAvLyBjcmVhdGUgaW1hZ2UKLSAgICBJbWFnZSBpbWFnZSA9IGdldERpYWxvZ0ltYWdlKCk7Ci0gICAgaWYgKGltYWdlICE9IG51bGwpCi0gICAgewotICAgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoaW1hZ2VBbmRMYWJlbCwgMCk7Ci0gICAgICBpbWFnZS5zZXRCYWNrZ3JvdW5kKGxhYmVsLmdldEJhY2tncm91bmQoKSk7Ci0gICAgICBsYWJlbC5zZXRJbWFnZShpbWFnZSk7Ci0gICAgICBsYWJlbC5zZXRMYXlvdXREYXRhKAotICAgICAgICBuZXcgR3JpZERhdGEoCi0gICAgICAgICAgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9DRU5URVIKLSAgICAgICAgICAgIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0gICAgfQotCi0gICAgLy8gY3JlYXRlIG1lc3NhZ2UKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFRleHQgdGV4dCA9IG5ldyBUZXh0KGltYWdlQW5kTGFiZWwsIFNXVC5SRUFEX09OTFl8U1dULldSQVApOwotICAgICAgdGV4dC5zZXRUZXh0KG1lc3NhZ2UpOwotICAgICAgR3JpZERhdGEgZGF0YSA9Ci0gICAgICAgIG5ldyBHcmlkRGF0YSgKLSAgICAgICAgICBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwKLSAgICAgICAgICAgIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTAotICAgICAgICAgICAgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwKLSAgICAgICAgICAgIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQ0VOVEVSKTsKLSAgICAgIGRhdGEud2lkdGhIaW50ID0KLSAgICAgICAgY29udmVydEhvcml6b250YWxETFVzVG9QaXhlbHMoCi0gICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5NSU5JTVVNX01FU1NBR0VfQVJFQV9XSURUSCk7Ci0gICAgIAotICAgICAgdGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgICAgdGV4dC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotICAgIH0KLQotICAgIHJldHVybiBjb21wb3NpdGU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBjcmVhdGVEcm9wRG93bkxpc3QoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSB0aGUgbGlzdAotICAgIGxpc3QgPSBuZXcgTGlzdChwYXJlbnQsIFNXVC5CT1JERVIgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotCi0gICAgLy8gZmlsbCB0aGUgbGlzdAotICAgIHBvcHVsYXRlTGlzdChsaXN0KTsKLQotICAgIEdyaWREYXRhIGRhdGEgPQotICAgICAgbmV3IEdyaWREYXRhKAotICAgICAgICBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwKLSAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTAotICAgICAgICAgIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTAotICAgICAgICAgIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCk7Ci0gICAgZGF0YS5oZWlnaHRIaW50ID0gbGlzdC5nZXRJdGVtSGVpZ2h0KCkgKiBMSVNUX0lURU1fQ09VTlQ7Ci0gICAgbGlzdC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGxpc3RDcmVhdGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotICBwcm90ZWN0ZWQgVGV4dCBjcmVhdGVEcm9wRG93bkRldGFpbHMoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGRldGFpbHMgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5CT1JERVIgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuUkVBRF9PTkxZIHwgU1dULldSQVAgKTsKLSAgICAvL2RldGFpbHMuc2V0RWRpdGFibGUoZmFsc2UpOwotICAgIENvbG9yIGNvbG9yID0gcGFyZW50LmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKCBTV1QuQ09MT1JfV0hJVEUgKTsKLSAgICBkZXRhaWxzLnNldEJhY2tncm91bmQoY29sb3IpOwotICAgIHBvcHVsYXRlRGV0YWlscyhkZXRhaWxzLCBzdGF0dXMsIDApOwotICAgIEdyaWREYXRhIGRhdGEgPQotICAgICAgbmV3IEdyaWREYXRhKAotICAgICAgICBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwKLSAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTAotICAgICAgICAgIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTAotICAgICAgICAgIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCk7Ci0gICAgCi0gICAgZGV0YWlscy5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGRldGFpbHMuc2V0U2VsZWN0aW9uKDApOwotICAgIGRldGFpbHNDcmVhdGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gZGV0YWlsczsKLSAgfQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIE1ldGhvZCBkZWNsYXJlZCBvbiBXaW5kb3cuCi0gICAqLwotICAvKioKLSAgICogRXh0ZW5kcyA8Y29kZT5XaW5kb3cub3BlbigpPC9jb2RlPi4gT3BlbnMgYW4gZXJyb3IgZGlhbG9nIHRvIGRpc3BsYXkKLSAgICogdGhlIGVycm9yLiBJZiB5b3Ugc3BlY2lmaWVkIGEgbWFzayB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UKLSAgICogY2hpbGRyZW4sIHRoZSBlcnJvciBkaWFsb2cgd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUKLSAgICogY2hpbGQgc3RhdHVzIG1hdGNoaW5nIHRoZSBtYXNrLgotICAgKi8KLSAgcHVibGljIGludCBvcGVuKCkKLSAgewotICAgIGlmIChzaG91bGREaXNwbGF5KHN0YXR1cywgZGlzcGxheU1hc2spKQotICAgIHsKLSAgICAgIHJldHVybiBzdXBlci5vcGVuKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotICB9Ci0gIC8qKgotICAgKiBUaGlzIGVzc2VudGlhbGx5IGRvZXMgdGhlIHdvcmsgb2YgYSBmYWN0b3J5IE9wZW5zIGFuIGVycm9yIGRpYWxvZyB0bwotICAgKiBkaXNwbGF5IHRoZSBnaXZlbiBlcnJvci4gVXNlIHRoaXMgbWV0aG9kIGlmIHRoZSBlcnJvciBvYmplY3QgYmVpbmcKLSAgICogZGlzcGxheWVkIGRvZXMgbm90IGNvbnRhaW4gY2hpbGQgaXRlbXMsIG9yIGlmIHlvdSB3aXNoIHRvIGRpc3BsYXkgYWxsIHN1Y2gKLSAgICogaXRlbXMgd2l0aG91dCBmaWx0ZXJpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50Ci0gICAqICAgICAgICAgICAgdGhlIHBhcmVudCBzaGVsbCBvZiB0aGUgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcmV0dXJuIHRoZSBjb2RlIG9mIHRoZSBidXR0b24gdGhhdCB3YXMgcHJlc3NlZCB0aGF0IHJlc3VsdGVkIGluIHRoaXMKLSAgICogICAgICAgICBkaWFsb2cgY2xvc2luZy4gVGhpcyB3aWxsIGJlIDxjb2RlPkRpYWxvZy5PSzwvY29kZT4gaWYgdGhlIE9LCi0gICAqICAgICAgICAgYnV0dG9uIHdhcyBwcmVzc2VkLCBvciA8Y29kZT5EaWFsb2cuQ0FOQ0VMPC9jb2RlPiBpZiB0aGlzCi0gICAqICAgICAgICAgZGlhbG9nJ3MgY2xvc2Ugd2luZG93IGRlY29yYXRpb24gb3IgdGhlIEVTQyBrZXkgd2FzIHVzZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBvcGVuTWVzc2FnZSgKLSAgICBTaGVsbCBwYXJlbnQsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzKQotICB7Ci0KLSAgICBzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKQotICAgIHsKLSAgICAgIGNhc2UgSVN0YXR1cy5JTkZPIDoKLSAgICAgICAgcmV0dXJuIG9wZW5JbmZvKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBkaWFsb2dUaXRsZSwKLSAgICAgICAgICBtZXNzYWdlLAotICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICBJU3RhdHVzLk9LIHwgSVN0YXR1cy5JTkZPIHwgSVN0YXR1cy5XQVJOSU5HIHwgSVN0YXR1cy5FUlJPUik7Ci0gICAgICBjYXNlIElTdGF0dXMuV0FSTklORyA6Ci0gICAgICAgIHJldHVybiBvcGVuV2FybmluZygKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgZGlhbG9nVGl0bGUsCi0gICAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgICBzdGF0dXMsCi0gICAgICAgICAgSVN0YXR1cy5PSyB8IElTdGF0dXMuSU5GTyB8IElTdGF0dXMuV0FSTklORyB8IElTdGF0dXMuRVJST1IpOwotICAgICAgZGVmYXVsdCA6Ci0gICAgICAgIHJldHVybiBvcGVuRXJyb3IoCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIGRpYWxvZ1RpdGxlLAotICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgc3RhdHVzLAotICAgICAgICAgIElTdGF0dXMuT0sgfCBJU3RhdHVzLklORk8gfCBJU3RhdHVzLldBUk5JTkcgfCBJU3RhdHVzLkVSUk9SKTsKLSAgICB9Ci0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5NZXNzYWdlKAotICAgIFNoZWxsIHBhcmVudCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgQ2hvaWNlW10gb3B0aW9ucykKLSAgewotCi0gICAgcmV0dXJuIG9wZW5PcHRpb25zKAotICAgICAgcGFyZW50LAotICAgICAgZGlhbG9nVGl0bGUsCi0gICAgICBtZXNzYWdlLAotICAgICAgc3RhdHVzLAotICAgICAgSVN0YXR1cy5PSyB8IElTdGF0dXMuSU5GTyB8IElTdGF0dXMuV0FSTklORyB8IElTdGF0dXMuRVJST1IsCi0gICAgICBvcHRpb25zKTsKLSAgfQotCi0gIC8qKgotICAgKiBPcGVucyBhbiBlcnJvciBkaWFsb2cgdG8gZGlzcGxheSB0aGUgZ2l2ZW4gZXJyb3IuIFVzZSB0aGlzIG1ldGhvZCBpZiB0aGUKLSAgICogZXJyb3Igb2JqZWN0IGJlaW5nIGRpc3BsYXllZCBjb250YWlucyBjaGlsZCBpdGVtcyA8aXQ+YW5kPC9pdD4geW91IHdpc2gKLSAgICogdG8gc3BlY2lmeSBhIG1hc2sgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZQotICAgKiBjaGlsZHJlbi4gVGhlIGVycm9yIGRpYWxvZyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZQotICAgKiBjaGlsZCBzdGF0dXMgbWF0Y2hpbmcgdGhlIG1hc2suCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50U2hlbGwKLSAgICogICAgICAgICAgICB0aGUgcGFyZW50IHNoZWxsIG9mIHRoZSBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKiBAcmV0dXJuIHRoZSBjb2RlIG9mIHRoZSBidXR0b24gdGhhdCB3YXMgcHJlc3NlZCB0aGF0IHJlc3VsdGVkIGluIHRoaXMKLSAgICogICAgICAgICBkaWFsb2cgY2xvc2luZy4gVGhpcyB3aWxsIGJlIDxjb2RlPkRpYWxvZy5PSzwvY29kZT4gaWYgdGhlIE9LCi0gICAqICAgICAgICAgYnV0dG9uIHdhcyBwcmVzc2VkLCBvciA8Y29kZT5EaWFsb2cuQ0FOQ0VMPC9jb2RlPiBpZiB0aGlzCi0gICAqICAgICAgICAgZGlhbG9nJ3MgY2xvc2Ugd2luZG93IGRlY29yYXRpb24gb3IgdGhlIEVTQyBrZXkgd2FzIHVzZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBvcGVuRXJyb3IoCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIHRpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIEVycm9yRGlhbG9nIGRpYWxvZyA9Ci0gICAgICBuZXcgRXJyb3JEaWFsb2cocGFyZW50U2hlbGwsIHRpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgICByZXR1cm4gZGlhbG9nLm9wZW4oKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5JbmZvKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyB0aXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBJbmZvRGlhbG9nIGRpYWxvZyA9Ci0gICAgICBuZXcgSW5mb0RpYWxvZyhwYXJlbnRTaGVsbCwgdGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICAgIHJldHVybiBkaWFsb2cub3BlbigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBpbnQgb3Blbldhcm5pbmcoCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIHRpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIFdhcm5pbmdEaWFsb2cgZGlhbG9nID0KLSAgICAgIG5ldyBXYXJuaW5nRGlhbG9nKHBhcmVudFNoZWxsLCB0aXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gICAgcmV0dXJuIGRpYWxvZy5vcGVuKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBvcGVuT3B0aW9ucygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgdGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrLAotICAgIENob2ljZVtdIG9wdGlvbnMpCi0gIHsKLSAgICBPcHRpb25zRGlhbG9nIGRpYWxvZyA9Ci0gICAgICBuZXcgT3B0aW9uc0RpYWxvZygKLSAgICAgICAgcGFyZW50U2hlbGwsCi0gICAgICAgIHRpdGxlLAotICAgICAgICBtZXNzYWdlLAotICAgICAgICBzdGF0dXMsCi0gICAgICAgIGRpc3BsYXlNYXNrLAotICAgICAgICBvcHRpb25zKTsKLSAgICBkaWFsb2cub3BlbigpOwotICAgIHJldHVybiBkaWFsb2cuZ2V0UmV0dXJuQ29kZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBvcHVsYXRlcyB0aGUgbGlzdCB1c2luZyB0aGlzIGVycm9yIGRpYWxvZydzIHN0YXR1cyBvYmplY3QuIFRoaXMgd2Fsa3MgdGhlCi0gICAqIGNoaWxkIHN0YXRpIG9mIHRoZSBzdGF0dXMgb2JqZWN0IGFuZCBkaXNwbGF5cyB0aGVtIGluIGEgbGlzdC4gVGhlIGZvcm1hdAotICAgKiBmb3IgZWFjaCBlbnRyeSBpcyBzdGF0dXNfcGF0aCA6IHN0YXR1c19tZXNzYWdlIElmIHRoZSBzdGF0dXMncyBwYXRoIHdhcwotICAgKiBudWxsIHRoZW4gaXQgKGFuZCB0aGUgY29sb24pIGFyZSBvbWl0dGVkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlTGlzdChMaXN0IGxpc3QpCi0gIHsKLSAgICBJdGVyYXRvciBlbnVtZXJhdGlvbiA9IHN0YXR1c0xpc3QuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW51bWVyYXRpb24uaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIElTdGF0dXMgY2hpbGRTdGF0dXMgPSAoSVN0YXR1cykgZW51bWVyYXRpb24ubmV4dCgpOwotICAgICAgcG9wdWxhdGVMaXN0KGxpc3QsIGNoaWxkU3RhdHVzLCAwKTsKLSAgICB9Ci0gIH0KLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlTGlzdChMaXN0IGxpc3QsIElTdGF0dXMgc3RhdHVzLCBpbnQgbmVzdGluZykKLSAgewotICAgIGlmICghc3RhdHVzLm1hdGNoZXMoZGlzcGxheU1hc2spKQotICAgIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVzdGluZzsgaSsrKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCgiICAiKTsKLSAgICB9Ci0gICAgc2IuYXBwZW5kKHN0YXR1cy5nZXRNZXNzYWdlKCkpOwotICAgIGxpc3QuYWRkKHNiLnRvU3RyaW5nKCkpOwotICAgIElTdGF0dXNbXSBjaGlsZHJlbiA9IHN0YXR1cy5nZXRDaGlsZHJlbigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcG9wdWxhdGVMaXN0KGxpc3QsIGNoaWxkcmVuW2ldLCBuZXN0aW5nICsgMSk7Ci0gICAgfQotICB9Ci0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZURldGFpbHMoVGV4dCB0ZXh0LCBJU3RhdHVzIHN0YXR1cywgaW50IG5lc3RpbmcpCi0gIHsKLSAgICBpZiAoIXN0YXR1cy5tYXRjaGVzKGRpc3BsYXlNYXNrKSkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBTdHJpbmcgICAgdGFiQ2hhcnMgICAgPSBTdHJpbmdVdGlscy5yZXBlYXQoICcgJywgbmVzdGluZyAqIDIgKTsKLSAgICBTdHJpbmcgICAgbWVzc2FnZUxpbmUgPSB0YWJDaGFycyArIHN0YXR1cy5nZXRNZXNzYWdlKCkgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0gICAgVGhyb3dhYmxlIGV4Y2VwdCAgICAgID0gc3RhdHVzLmdldEV4Y2VwdGlvbigpOwotICAgIAotICAgIHRleHQuYXBwZW5kKCBtZXNzYWdlTGluZSApOwotICAgIAotICAgIGlmKCBleGNlcHQgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RyaW5nW10gdHJhY2UgPSBTdHJpbmdVdGlscy5nZXRTdGFja1RyYWNlKCBleGNlcHQgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHRyYWNlLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIHRleHQuYXBwZW5kKCB0YWJDaGFycyArICIgICAgIiArIHRyYWNlW2luZGV4XSArIFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBJU3RhdHVzW10gY2hpbGRyZW4gPSBzdGF0dXMuZ2V0Q2hpbGRyZW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBvcHVsYXRlRGV0YWlscyh0ZXh0LCBjaGlsZHJlbltpXSwgbmVzdGluZyArIDEpOwotICAgIH0KLSAgfQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBzdGF0dXMgb2JqZWN0IHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgYSBzdGF0dXMgb2JqZWN0Ci0gICAqIEBwYXJhbSBtYXNrCi0gICAqICAgICAgICAgICAgYSBtYXNrIGFzIHBlciA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc3RhdHVzIHNob3VsZCBiZSBkaXNwbGF5ZWQsIGFuZAotICAgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBzaG91bGREaXNwbGF5KElTdGF0dXMgc3RhdHVzLCBpbnQgbWFzaykKLSAgewotICAgIElTdGF0dXNbXSBjaGlsZHJlbiA9IHN0YXR1cy5nZXRDaGlsZHJlbigpOwotICAgIGlmIChjaGlsZHJlbiA9PSBudWxsIHx8IGNoaWxkcmVuLmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBzdGF0dXMubWF0Y2hlcyhtYXNrKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoY2hpbGRyZW5baV0ubWF0Y2hlcyhtYXNrKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAvKioKLSAgICogVG9nZ2xlcyB0aGUgdW5mb2xkaW5nIG9mIHRoZSBkZXRhaWxzIGFyZWEuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSB1c2VyCi0gICAqIHByZXNzaW5nIHRoZSBkZXRhaWxzIGJ1dHRvbi4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0b2dnbGVEZXRhaWxzQXJlYSgpCi0gIHsKLSAgICBQb2ludCB3aW5kb3dTaXplID0gZ2V0U2hlbGwoKS5nZXRTaXplKCk7Ci0gICAgaW50ICAgbmV3SGVpZ2h0ICA9IC0xOwotICAgIAotICAgIGlmIChkZXRhaWxzQ3JlYXRlZCkKLSAgICB7Ci0gICAgICBkZXRhaWxzLmRpc3Bvc2UoKTsKLSAgICAgIGRldGFpbHNDcmVhdGVkID0gZmFsc2U7Ci0gICAgICBkZXRhaWxzQnV0dG9uLnNldFRleHQoSURpYWxvZ0NvbnN0YW50cy5TSE9XX0RFVEFJTFNfTEFCRUwpOwotICAgICAgCi0gICAgICAvLyBXaXRob3V0IHRoZSBmb2xsb3dpbmcgY29tcHV0ZVNpemUgY2FsbCB0aGUgc2V0U2l6ZSBjYWxsIGJlbG93IHRocm93cyBhbiBhcnJheSBvdXQgb2YgYm91bmRzIGV4Y2VwdGlvbi4KLSAgICAgIC8vIFZlcnkgd2VpcmQuCi0gICAgICBnZXRDb250ZW50cygpLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgICAKLSAgICAgIG5ld0hlaWdodCA9IHNhdmVkU2l6ZS55OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYoIHNhdmVkU2l6ZSA9PSBudWxsICkgc2F2ZWRTaXplID0gd2luZG93U2l6ZTsKLSAgICAgICAgCi0gICAgICBkZXRhaWxzID0gY3JlYXRlRHJvcERvd25EZXRhaWxzKChDb21wb3NpdGUpIGdldENvbnRlbnRzKCkpOwotICAgICAgZGV0YWlsc0J1dHRvbi5zZXRUZXh0KElEaWFsb2dDb25zdGFudHMuSElERV9ERVRBSUxTX0xBQkVMKTsKLSAgICAgIG5ld0hlaWdodCA9IGdldENvbnRlbnRzKCkuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKS55OwotICAgICAgbmV3SGVpZ2h0ID0gbmV3SGVpZ2h0IDwgMjUwID8gMjUwIDogbmV3SGVpZ2h0OwotICAgIH0KLQotICAgIG5ld0hlaWdodCA9IG5ld0hlaWdodCA+IDQwMCA/IDQwMCA6IG5ld0hlaWdodDsKLSAgICAKLSAgICBnZXRTaGVsbCgpLnNldFNpemUoIG5ldyBQb2ludCh3aW5kb3dTaXplLngsIG5ld0hlaWdodCkgKTsKLSAgICBwYXJlbnQubGF5b3V0KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL09wdGlvbnNEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL09wdGlvbnNEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYxMTc5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9PcHRpb25zRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB0byBkaXNwbGF5IG9uZSBvciBtb3JlIGVycm9ycyB0byB0aGUgdXNlciwgYXMgY29udGFpbmVkIGluIGFuCi0gKiA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdC4gSWYgYW4gZXJyb3IgY29udGFpbnMgYWRkaXRpb25hbCBkZXRhaWxlZAotICogaW5mb3JtYXRpb24gdGhlbiBhIERldGFpbHMgYnV0dG9uIGlzIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQsIHdoaWNoIHNob3dzIG9yCi0gKiBoaWRlcyBhbiBlcnJvciBkZXRhaWxzIHZpZXdlciB3aGVuIHByZXNzZWQgYnkgdGhlIHVzZXIuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBPcHRpb25zRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZwotewotICBwcml2YXRlIENob2ljZVtdIGNob2ljZXM7Ci0gIHByaXZhdGUgaW50IHJldHVybkNvZGVfOwotCi0gIHB1YmxpYyBPcHRpb25zRGlhbG9nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2ssCi0gICAgQ2hvaWNlW10gY2hvaWNlcykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsLCBkaWFsb2dUaXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gICAgdGhpcy5jaG9pY2VzID0gY2hvaWNlczsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIGEgYnV0dG9uIGZvciBlYWNoIG9wdGlvbnMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgY3JlYXRlQnV0dG9uKHBhcmVudCwgY2hvaWNlc1tpXS5nZXRTaG9ydGN1dCgpLCBjaG9pY2VzW2ldLmdldExhYmVsKCksIHRydWUpOwotICAgIH0KLSAgICBpZiAoc3RhdHVzLmlzTXVsdGlTdGF0dXMoKSApCi0gICAgewotICAgICAgZGV0YWlsc0J1dHRvbiA9Ci0gICAgICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQsCi0gICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5TSE9XX0RFVEFJTFNfTEFCRUwsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoaW50IGlkKQotICB7Ci0gICAgaWYgKGlkID09IFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lEKQotICAgICAgLy8gd2FzIHRoZSBEZXRhaWxzIGJ1dHRvbiBwcmVzc2VkPwotICAgICAgc3VwZXIuYnV0dG9uUHJlc3NlZChpZCk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldFJldHVybkNvZGUoaWQpOwotICAgICAgY2xvc2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBzZXRSZXR1cm5Db2RlKGludCBpZCkKLSAgewotICAgIHJldHVybkNvZGVfID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFJldHVybkNvZGUoKQotICB7Ci0gICAgcmV0dXJuIHJldHVybkNvZGVfOwotICB9Ci0gIC8qCi0gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgbWV0aG9kcyB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZQotICAgKiBzdWJjbGFzc2VzLiBUaGUgaW1hZ2UgbmFtZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBEaWFsb2cgY2xhc3MKLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZSBnZXREaWFsb2dJbWFnZSgpCi0gIHsKLSAgICAvLyBjcmVhdGUgaW1hZ2UKLSAgICBzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKQotICAgIHsKLSAgICAgIGNhc2UgSVN0YXR1cy5JTkZPIDoKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0lORk9STUFUSU9OKTsKLSAgICAgIGNhc2UgSVN0YXR1cy5XQVJOSU5HIDoKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX1dBUk5JTkcpOwotICAgICAgZGVmYXVsdCA6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9FUlJPUik7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1J1bnRpbWVTdHJ1Y3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1J1bnRpbWVTdHJ1Y3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MDI0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9SdW50aW1lU3RydWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb24uTGFiZWxzQW5kSWRzOwotCi1wdWJsaWMgY2xhc3MgUnVudGltZVN0cnVjdCB7Ci0KLQlwcml2YXRlIFN0cmluZyBydW50aW1lSURfOwotCXByaXZhdGUgU3RyaW5nIHJ1bnRpbWVMYWJlbF87Ci0JcHJpdmF0ZSBMYWJlbHNBbmRJZHMgc2NlbmFyaW9zXzsKLQkKLQlwdWJsaWMgUnVudGltZVN0cnVjdChTdHJpbmcgcnVudGltZUlEKXsKLQkJcnVudGltZUlEXyA9IHJ1bnRpbWVJRDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJRCgpewotCQlyZXR1cm4gcnVudGltZUlEXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSdW50aW1lTGFiZWwoU3RyaW5nIGxhYmVsKXsKLQkJcnVudGltZUxhYmVsXyA9IGxhYmVsOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVMYWJlbCgpewotCQlyZXR1cm4gcnVudGltZUxhYmVsXzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2NlbmFyaW8oU3RyaW5nIGlkLCBTdHJpbmcgbGFiZWwpewotCQlpZihzY2VuYXJpb3NfID09IG51bGwpIHNjZW5hcmlvc18gPSBuZXcgTGFiZWxzQW5kSWRzKCk7IAotCQlpZihpZCA9PSBudWxsIHx8IGxhYmVsID09IG51bGwpIHJldHVybjsKLQkJc2NlbmFyaW9zXy5hZGQoaWQsbGFiZWwpOwotCX0KLQkKLQlwdWJsaWMgTGFiZWxzQW5kSWRzIGdldFNjZW5hcmlvTGFiZWxzKCl7Ci0JCXJldHVybiBzY2VuYXJpb3NfOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1N0YXR1c0RpYWxvZ0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNTY3ODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLS8qKgotKiBDb25zdGFudHMgZm9yIHN0YXR1cyBkaWFsb2dzCi0qLwotcHVibGljIGludGVyZmFjZSBTdGF0dXNEaWFsb2dDb25zdGFudHMgewotCi0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIlllcyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFU19JRCA9IDI7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIlllcyB0byBhbGwiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZRVNfVE9fQUxMX0lEID0gNDsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiQ2FuY2VsIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FOQ0VMX0lEID0gMTsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiT0siIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19JRCA9IDA7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIkRldGFpbHMiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVRBSUxTX0lEID0gMTM7Ci0KLSAgLyoKLSAgKiBCdXR0b24gbGFiZWwgZm9yIHRoZSAiWWVzIiBidXR0b24KLSAgKi8KLSAvLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBZRVNfTEFCRUwgPSBFbnZpcm9ubWVudFBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lc3NhZ2UoIiVTVEFUVVNfRElBTE9HX1lFU19MQUJFTCIpOwotICAvKgotICAqIEJ1dHRvbiBsYWJlbCBmb3IgdGhlICJZZXMgdG8gYWxsIiBidXR0b24KLSAgKi8KLSAvLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBZRVNfVE9fQUxMX0xBQkVMID0gRW52aXJvbm1lbnRQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXNzYWdlKCIlU1RBVFVTX0RJQUxPR19ZRVNfVE9fQUxMX0xBQkVMIik7Ci0gIC8qCi0gICogQnV0dG9uIGxhYmVsIGZvciB0aGUgIkNhbmNlbCIgYnV0dG9uCi0gICovCi0gLy8gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FOQ0VMX0xBQkVMID0gRW52aXJvbm1lbnRQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXNzYWdlKCIlU1RBVFVTX0RJQUxPR19DQU5DRUxfTEFCRUwiKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1dhcm5pbmdEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1dhcm5pbmdEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1Njk1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9XYXJuaW5nRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB0byBkaXNwbGF5IG9uZSBvciBtb3JlIGVycm9ycyB0byB0aGUgdXNlciwgYXMgY29udGFpbmVkIGluIGFuCi0gKiA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdC4gSWYgYW4gZXJyb3IgY29udGFpbnMgYWRkaXRpb25hbCBkZXRhaWxlZAotICogaW5mb3JtYXRpb24gdGhlbiBhIERldGFpbHMgYnV0dG9uIGlzIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQsIHdoaWNoIHNob3dzIG9yCi0gKiBoaWRlcyBhbiBlcnJvciBkZXRhaWxzIHZpZXdlciB3aGVuIHByZXNzZWQgYnkgdGhlIHVzZXIuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBXYXJuaW5nRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZwotewotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlcnJvciBkaWFsb2cuIE5vdGUgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBubyB2aXN1YWwKLSAgICogcmVwcmVzZW50YXRpb24gKG5vIHdpZGdldHMpIHVudGlsIGl0IGlzIHRvbGQgdG8gb3Blbi4KLSAgICogPHA+Ci0gICAqIE5vcm1hbGx5IG9uZSBzaG91bGQgdXNlIDxjb2RlPm9wZW5FcnJvcjwvY29kZT4gdG8gY3JlYXRlIGFuZCBvcGVuIG9uZSBvZgotICAgKiB0aGVzZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWwgb25seSBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nIGRpc3BsYXllZAotICAgKiBjb250YWlucyBjaGlsZCBpdGVtcyA8aXQ+YW5kPC9pdD4geW91IG5lZWQgdG8gc3BlY2lmeSBhIG1hc2sgd2hpY2ggd2lsbAotICAgKiBiZSB1c2VkIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZSBjaGlsZHJlbi4KLSAgICogPC9wPgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHNoZWxsIHVuZGVyIHdoaWNoIHRvIGNyZWF0ZSB0aGlzIGRpYWxvZwotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHBhcmFtIGRpc3BsYXlNYXNrCi0gICAqICAgICAgICAgICAgdGhlIG1hc2sgdG8gdXNlIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiBjaGlsZCBpdGVtcywgYXMgcGVyCi0gICAqICAgICAgICAgICAgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqLwotICBwdWJsaWMgV2FybmluZ0RpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwsIGRpYWxvZ1RpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LLCBDYW5jZWwgYW5kIERldGFpbHMgYnV0dG9ucwotICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgIHBhcmVudCwKLSAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5PS19JRCwKLSAgICAgIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsCi0gICAgICB0cnVlKTsKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lELAotICAgICAgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsCi0gICAgICBmYWxzZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkpCi0gICAgewotICAgICAgZGV0YWlsc0J1dHRvbiA9Ci0gICAgICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQsCi0gICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5TSE9XX0RFVEFJTFNfTEFCRUwsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgbWV0aG9kcyB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZQotICAgKiBzdWJjbGFzc2VzLiBUaGUgaW1hZ2UgbmFtZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBEaWFsb2cgY2xhc3MKLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZSBnZXREaWFsb2dJbWFnZSgpCi0gIHsKLSAgICAvLyBjcmVhdGUgaW1hZ2UKLSAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fV0FSTklORyk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0VjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvRWNsaXBzZVN0YXR1c0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljNzY0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvRWNsaXBzZVN0YXR1c0hhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDIgICAxNjIyODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZlciBwdWJsaXNoIGNhbmNlbCBidXR0b24gdW5hdmFpbGFibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5FbnZpcm9ubWVudENvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZy5TdGF0dXNEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBFY2xpcHNlIFVJIHZlcnNpb24gb2YgdGhlIElTdGF0dXNIYW5kbGVyCi0gKi8KLXB1YmxpYyBjbGFzcyBFY2xpcHNlU3RhdHVzSGFuZGxlciBleHRlbmRzIEJhc2VTdGF0dXNIYW5kbGVyCi17Ci0gIHByaXZhdGUgU2hlbGwgICBzaGVsbCAgICAgICA9IG51bGw7Ci0gICAgCi0gIHB1YmxpYyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpCi0gIHsgIAotICB9Ci0gIAotICBwdWJsaWMgRWNsaXBzZVN0YXR1c0hhbmRsZXIoIFNoZWxsIHRoZVNoZWxsICkKLSAgewotICAgIHNoZWxsID0gdGhlU2hlbGw7ICAKLSAgfQotICAgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbnYuY29tbW9uLklTdGF0dXNIYW5kbGVyI3JlcG9ydChvcmcuZWNsaXBzZS5lbnYuY29tbW9uLlN0YXR1cywgb3JnLmVjbGlwc2UuZW52LmNvbW1vbi5DaG9pY2VbXSkKLSAgICovCi0gIHB1YmxpYyBDaG9pY2UgcmVwb3J0KCBmaW5hbCBJU3RhdHVzIHN0YXR1cywgZmluYWwgQ2hvaWNlW10gY2hvaWNlcykgCi0gIHsKLSAgICBmaW5hbCBpbnRbXSByZXN1bHQgPSBuZXcgaW50WzFdOwotICAgIAotICAgIGNoZWNrU3RhdHVzKCBzdGF0dXMgKTsKLSAgICAKLSAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0WzBdID0KLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5NZXNzYWdlKCBnZXRTaGVsbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLlRJVExFX1dBUk5JTkcsIC8vVE9ETzogU2hvdWxkIGJlIGluZmVycmVkIGZyb20gc3RhdHVzJyBzZXZlcml0eS4KLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKCBydW5uYWJsZSApOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykKLSAgICAgewotICAgICAgaWYgKGNob2ljZXNbaV0uZ2V0U2hvcnRjdXQoKSA9PSByZXN1bHRbMF0gKQotICAgICAgICByZXR1cm4gY2hvaWNlc1tpXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbnYuY29tbW9uLklTdGF0dXNIYW5kbGVyI3JlcG9ydChvcmcuZWNsaXBzZS5lbnYuY29tbW9uLlN0YXR1cykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlcG9ydChJU3RhdHVzIHN0YXR1cykgdGhyb3dzIFN0YXR1c0V4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiB1c2VyT2sgPSBmYWxzZTsKLSAgICAKLSAgICBjaGVja1N0YXR1cyggc3RhdHVzICk7Ci0gICAgCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICAvLyBhbiBlcnJvciBoYXMgYmVlbiByZXBvcnRlZCBhbmQgd2UgbmVlZCB0byBzdG9wIGV4ZWN1dGluZyB0aGUgY29tbWluZwotICAgICAgLy8gY29tbWFuZHMKLSAgICAgIGNhc2UgU3RhdHVzLkVSUk9SIDoKLSAgICAgIHsKLSAgICAgICAgdXNlck9rID0gcmVwb3J0RXJyb3JTdGF0dXMoc3RhdHVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFN0YXR1cy5XQVJOSU5HIDoKLSAgICAgIHsKLSAgICAgICAgdXNlck9rID0gcmVwb3J0V2FybmluZyhzdGF0dXMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gICAgIAotICAgICAgY2FzZSBTdGF0dXMuSU5GTyA6Ci0gICAgICB7Ci0gICAgICAgIHVzZXJPayA9IHRydWU7Ci0gICAgICAgIHJlcG9ydEluZm8oc3RhdHVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCAhdXNlck9rICkgdGhyb3cgbmV3IFN0YXR1c0V4Y2VwdGlvbiggc3RhdHVzICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiByZXBvcnRXYXJuaW5nKCBmaW5hbCBJU3RhdHVzIHN0YXR1cyApCi0gIHsKLSAgICBmaW5hbCBpbnQgdXNlclJlc3BvbnNlW10gPSBuZXcgaW50WzFdOwotICAgIAotICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICB1c2VyUmVzcG9uc2VbMF0gPQotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3Blbk1lc3NhZ2UoIGdldFNoZWxsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuVElUTEVfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgICAKLSAgICByZXR1cm4gKHVzZXJSZXNwb25zZVswXSA9PSBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlcG9ydEVycm9yU3RhdHVzKGZpbmFsIElTdGF0dXMgc3RhdHVzKQotICB7Ci0JLy8gbm8gbmVlZCB0byByZXBvcnQgYW4gZW1wdHkgbWVzc2FnZSB3aXRoIG5vIGV4Y2VwdGlvbgotCWlmICgiIi5lcXVhbHMoc3RhdHVzLmdldE1lc3NhZ2UoKSkgJiYgc3RhdHVzLmdldEV4Y2VwdGlvbigpID09IG51bGwpCi0JCXJldHVybiBmYWxzZTsKLQkgIAotICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5NZXNzYWdlKCBnZXRTaGVsbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5USVRMRV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKCBydW5uYWJsZSApOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSVN0YXR1c0hhbmRsZXIjcmVwb3J0RXJyb3Iob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1cykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKElTdGF0dXMgc3RhdHVzKQotICB7Ci0gICAgY2hlY2tTdGF0dXMoIHN0YXR1cyApOwotICAgIHJlcG9ydEVycm9yU3RhdHVzKCBzdGF0dXMgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklTdGF0dXNIYW5kbGVyI3JlcG9ydEluZm8ob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1cykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlcG9ydEluZm8oZmluYWwgSVN0YXR1cyBzdGF0dXMpCi0gIHsKLSAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuTWVzc2FnZSggZ2V0U2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuVElUTEVfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKCBydW5uYWJsZSApOwotICB9Ci0gIAotICBwcml2YXRlIFNoZWxsIGdldFNoZWxsKCkKLSAgewotICAgIGlmKCBzaGVsbCAhPSBudWxsICkgcmV0dXJuIHNoZWxsOwotICAgIAotICAgIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotICAgIAotICAgIHJldHVybiBkaXNwbGF5ID09IG51bGwgPyBudWxsIDogZGlzcGxheS5nZXRBY3RpdmVTaGVsbCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvRW52aXJvbm1lbnRVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0Vudmlyb25tZW50VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWExZGUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvRW52aXJvbm1lbnRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgRW52aXJvbm1lbnRVdGlscwoteyAgICAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGVudiBUaGlzIHNob3VsZCBiZSBhbiBFY2xpcHNlRW52aXJvbm1lbnQuCi0gICAqIEByZXR1cm4gUmV0dXJucyBhIFJlc291cmNlQ29udGV4dC4KLSAgICovIAotICBwdWJsaWMgc3RhdGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoIElFbnZpcm9ubWVudCBlbnYgKQotICB7Ci0gICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgPSBudWxsOwotICAgIAotICAgIGlmKCBlbnYgaW5zdGFuY2VvZiBFY2xpcHNlRW52aXJvbm1lbnQgKQotICAgIHsKLSAgICAgIGNvbnRleHQgPSAoKEVjbGlwc2VFbnZpcm9ubWVudCllbnYpLmdldFJlc291cmNlQ29udGV4dCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL1NXVEVudmlyb25tZW50TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL1NXVEVudmlyb25tZW50TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTEzMmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9TV1RFbnZpcm9ubWVudE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VFY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotCi1wdWJsaWMgY2xhc3MgU1dURW52aXJvbm1lbnRNYW5hZ2VyCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGFuIElFbnZpcm9ubWVudCBmb3IgdGhlIEVjbGlwc2UgU1dUIEdVSS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQmFzZUVjbGlwc2VFbnZpcm9ubWVudCBnZXROZXdTV1RFbnZpcm9ubWVudCgpCi0gIHsKLSAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIEVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICAgaGFuZGxlciAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLSAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgIGVudmlyb25tZW50ICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgY29udGV4dCwgaGFuZGxlciApOwotICAgIAotICAgIHJldHVybiBlbnZpcm9ubWVudDsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3BsdWdpbi9FbnZVSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wbHVnaW4vRW52VUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNWQ2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3BsdWdpbi9FbnZVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgRW52VUlQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEVudlVJUGx1Z2luIGluc3RhbmNlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBFbnZVSVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJaW5zdGFuY2UgPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVudlVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCSBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IgKCBTdHJpbmcgbmFtZSApCi0JICB7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgVVJMIGluc3RhbGxVUkwgPSBpbnN0YW5jZS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotCSAgICAgIFVSTCBpbWFnZVVSTCA9IG5ldyBVUkwoaW5zdGFsbFVSTCxuYW1lKTsKLQkgICAgICByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotCSAgICB9Ci0JICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkgICAgewotCSAgICAgIHJldHVybiBudWxsOwotCSAgICB9Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVlNGE3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjYgICAxNTE4NjYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFBvcHVwIERpYWxvZyBTZWxlY3Rpb24gcHJlZmVyZW5jZXMgZGVmYXVsdHMgaW5jb3JyZWN0bHkgdG8gaGlkZSBhbGwKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeGVjdXRhYmxlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlcy5BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBwb3B1cCBhY3Rpb25zIHByZWZlcmVuY2UgcGFnZSBmb3IgYSAKLSAqIHBhcnRpY3VsYXIgY2F0ZWdvcnkuICBGb3IgZXhhbXBsZToKLSAqCi0gKiA8cHJlPgotICogICZsdDtleHRlbnNpb24KLSAqICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIiZndDsKLSAqICAgICAmbHQ7cGFnZQotICogICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX0RJQUxPR1MiCi0gKiAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5wcmVmZXJlbmNlcy5uYW1lIgotICogICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IiZndDsKLSAqICAgICAmbHQ7L3BhZ2UmZ3Q7Ci0gKiAqIDwvcHJlPgotICogVGhpcyBlbnRyeSBzcGVjaWZpZXMgdGhhdCBhbGwgcG9wdXAgYWN0aW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gKiBvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoaXMKLSAqIHByZWZlcmVuY2UgcGFnZS4KLSAqLwotcHVibGljIGNsYXNzIEFjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBMaXN0ZW5lciwgSUV4ZWN1dGFibGVFeHRlbnNpb24KLXsKLSAgLypDT05URVhUX0lEIFBQQUQwMDAxIGZvciB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFEX1BBR0UgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLlBQQUQwMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gc2hvd0FsbDsKLSAgLypDT05URVhUX0lEIFBQQUQwMDAyIGZvciB0aGUgIHNob3cgYWxsIGNoZWNrIGJveCBvbiB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFEX0JVVFRPTl9TSE9XX0FMTCA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuUFBBRDAwMDIiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBoaWRlQWxsOwotICAvKkNPTlRFWFRfSUQgUFBBRDAwMDMgZm9yIHRoZSAgaGlkZSBhbGwgY2hlY2sgYm94IG9uIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQURfQlVUVE9OX0hJREVfQUxMID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5QUEFEMDAwMyI7Ci0KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2hlY2tCb3hlc187Ci0gIHByaXZhdGUgU3RyaW5nICAgIGNhdGVnb3J5SWRfOwotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25EYXRhKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgIGRhdGEgKQotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBjYXRlZ29yeUlkXyAgID0gY29uZmlnLmdldEF0dHJpYnV0ZSggImlkIiApOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgcHJlZmVyZW5jZSBwYWdlIGNvbnRyb2xzIG9uIGRlbWFuZC4KLSAgICogICBAcGFyYW0gcGFyZW50ICB0aGUgcGFyZW50IGZvciB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpCi0gIHsKLSAgIAotICAgIGNoZWNrQm94ZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGFkZE9wdGlvbmFsRGlhbG9nc0NoZWNrQm94ZXMgKHN1cGVycGFyZW50KTsKLQluZXcgTGFiZWwoc3VwZXJwYXJlbnQsIFNXVC5IT1JJWk9OVEFMKTsKLQkKLSAgICBDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRF9QQUdFKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QUEFEX1BBR0UgKTsKLQkKLSAgICBzaG93QWxsID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBzaG93QWxsLnNldFRleHQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLkJVVFRPTl9TSE9XX0FMTF9ESUFMT0dTKTsKLSAgICBzaG93QWxsLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIHNob3dBbGwuc2V0VG9vbFRpcFRleHQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRF9CVVRUT05fU0hPV19BTEwpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoc2hvd0FsbCwgSU5GT1BPUF9QUEFEX0JVVFRPTl9TSE9XX0FMTCApOwotICAgCi0gICAgaGlkZUFsbCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgaGlkZUFsbC5zZXRUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5CVVRUT05fSElERV9BTExfRElBTE9HUyk7Ci0gICAgaGlkZUFsbC5hZGRMaXN0ZW5lciAoIFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIGhpZGVBbGwuc2V0VG9vbFRpcFRleHQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRF9CVVRUT05fSElERV9BTEwpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoaGlkZUFsbCwgSU5GT1BPUF9QUEFEX0JVVFRPTl9ISURFX0FMTCApOwotCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7Ci0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotCi0gcHVibGljIHZvaWQgaGFuZGxlRXZlbnQgKEV2ZW50IGV2ZW50KSAKLSB7Ci0gICAgaWYgKHNob3dBbGwgPT0gZXZlbnQud2lkZ2V0KQotCQloYW5kbGVTaG93QWxsRXZlbnQoKTsKLSAgICAKLSAgICBlbHNlIGlmICggaGlkZUFsbCA9PSBldmVudC53aWRnZXQpCi0gICAgCWhhbmRsZUhpZGVBbGxFdmVudCgpOwotIH0KLQotIHByaXZhdGUgdm9pZCBoYW5kbGVTaG93QWxsRXZlbnQgKCkKLSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmVsZW1lbnRzKCk7Ci0gCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotICAgIAl7Ci0gICAgCQlCdXR0b24gZGlhbG9nID0gKEJ1dHRvbikgZS5uZXh0RWxlbWVudCgpOwotICAgIAkJZGlhbG9nLnNldFNlbGVjdGlvbiggZmFsc2UgKTsKLSAgICAJfSAgICAgICAgICAgICAgICAgICAgICAKLSB9Ci0KLSBwcml2YXRlIHZvaWQgaGFuZGxlSGlkZUFsbEV2ZW50ICgpCi0gewotIAlFbnVtZXJhdGlvbiBlID0gY2hlY2tCb3hlc18uZWxlbWVudHMoKTsKLSAJZm9yIChpbnQgaT0wOyBlLmhhc01vcmVFbGVtZW50cygpOyBpKyspCi0gICAgCXsKLSAgICAJCUJ1dHRvbiBkaWFsb2cgPSAoQnV0dG9uKSBlLm5leHRFbGVtZW50KCk7Ci0gICAgCQlkaWFsb2cuc2V0U2VsZWN0aW9uKCB0cnVlICk7Ci0gICAgCX0KLSB9Ci0gCi0gcHJpdmF0ZSB2b2lkIGFkZE9wdGlvbmFsRGlhbG9nc0NoZWNrQm94ZXMgKCBDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdIGRpYWxvZ3MgPSBjb250ZXh0LmdldERpYWxvZ3MoKTsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIAotICAgIHsKLSAgICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyAgID0gZGlhbG9nc1tpXTsKLSAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gZGlhbG9nLmdldENhdGVnb3J5KCk7Ci0gICAgICAKLSAgICAgIGlmKCBkaWFsb2cuZ2V0U2hvd0NoZWNrYm94KCkgJiYgIGNhdGVnb3J5ICE9IG51bGwgJiYgY2F0ZWdvcnkuZXF1YWxzKCBjYXRlZ29yeUlkXykgKQotICAgICAgewotICAgIAlCdXR0b24gY2hlY2tCb3ggPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIGRpYWxvZy5nZXROYW1lKCkpOwotICAgIAljaGVja0JveC5zZXRUb29sVGlwVGV4dCggZGlhbG9nLmdldFRvb2x0aXAoKSApOwotICAgIAlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNoZWNrQm94LCBkaWFsb2cuZ2V0SW5mb3BvcCgpICk7Ci0gICAgCWNoZWNrQm94ZXNfLnB1dChkaWFsb2cuZ2V0SWQoKSwgY2hlY2tCb3gpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBCdXR0b24gY3JlYXRlQ2hlY2tCb3goIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0ZXh0ICkKLSAgewotICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKCBwYXJlbnQsIFNXVC5DSEVDSyApOwotICAgIGJ1dHRvbi5zZXRUZXh0KCB0ZXh0ICk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLSAgfQotCi0gIC8qKgotICAgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLSAgewotICAgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotICAgIGluaXRpYWxpemVEZWZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0gIHsKLSAgICBzdG9yZVZhbHVlcygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHBlcmZvcm1PaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgeyB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgdXNpbmcgZGVmYXVsdCB2YWx1ZXMKLSAgICogaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7ICAKLSAgICBFbnVtZXJhdGlvbiBlID0gY2hlY2tCb3hlc18ua2V5cygpOwotICAgIGZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsgICAgICAgICAgICAJCi0gICAgICBCdXR0b24gZGlhbG9nID0gKEJ1dHRvbikgY2hlY2tCb3hlc18uZ2V0KGlkKTsKLSAgICAgIGRpYWxvZy5zZXRTZWxlY3Rpb24oY29udGV4dC5nZXREZWZhdWx0Qm9vbGVhbihpZCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2VzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gY2hlY2tCb3hlc18ua2V5cygpOwotICAgIGZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsKLSAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKSBjaGVja0JveGVzXy5nZXQoaWQpOwotICAgICAgYnV0dG9uLnNldFNlbGVjdGlvbihjb250ZXh0LmlzQWN0aW9uRGlhbG9nRW5hYmxlZChpZCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCi0gICAgRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICBjb250ZXh0LnNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoaWQsICgoQnV0dG9uKWNoZWNrQm94ZXNfLmdldChpZCkpLmdldFNlbGVjdGlvbigpKTsKLSAgICB9Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9yZWdpc3RyeS9XaWRnZXRSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9yZWdpc3RyeS9XaWRnZXRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWI1YjMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcmVnaXN0cnkvV2lkZ2V0UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBXaWRnZXRSZWdpc3RyeSAKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgV2lkZ2V0UmVnaXN0cnkgcmVnaXN0cnlfOwotICAKLSAgcHJpdmF0ZSBIYXNodGFibGUgZW50cmllc187Ci0gIAotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5KCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFdpZGdldFJlZ2lzdHJ5IGluc3RhbmNlKCkKLSAgewotCWlmIChyZWdpc3RyeV8gPT0gbnVsbCkKLQl7Ci0JCXJlZ2lzdHJ5XyA9IG5ldyBXaWRnZXRSZWdpc3RyeSgpOwotCQlyZWdpc3RyeV8ubG9hZCgpOwotCX0KLQotCXJldHVybiByZWdpc3RyeV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkKLSAgewotICAgIHJlZ2lzdHJ5XyA9IG51bGw7ICAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaWQgdGhlIG1ldGhvZElkIHRoYXQgbWF5IGhhdmUgV2lkZ2V0Q29udHJpYnV0b3IgYXNzb2NpYXRlZCB3aXRoIGl0LgotICAgKiBAcmV0dXJuIHJldHVybnMgYSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgaWYgb25lIHdhcyBkZWZpbmVkIGluIHRoZSByZWdpc3RyeS4KLSAgICogT3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldEZhY3RvcnkoIFN0cmluZyBpZCApCi0gIHsKLQlJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JRW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ICAgPSAoRW50cnkpZW50cmllc18uZ2V0KCBpZCApOwotCQotCWlmKCBlbnRyeSAhPSBudWxsICkKLQl7Ci0JICB0cnkKLQkgIHsKLQkJaWYoIGVudHJ5LmZhY3RvcnlfID09IG51bGwgKQotCQl7Ci0JCSAgZW50cnkuZmFjdG9yeV8gPSAoSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KWVudHJ5LmVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsKLQkJfQotCQkKLQkJZmFjdG9yeSA9IGVudHJ5LmZhY3RvcnlfOwotCSAgfQotCSAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLQkgIHsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotCSAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotCSAgewotCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9Ci0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZCgpCi0gIHsKLQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKCJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiKTsKLQkKLQllbnRyaWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLQkKLQlmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudHMubGVuZ3RoOyBpbmRleCsrICkKLQl7Ci0JICAvLyBJZiB0aGlzIGlzIG5vdCBhbiBlbGVtZW50IHRoYXQga25vdyBhYm91dCB3ZSB3aWxsIHNraXAgaXQuCi0JICBpZiggIWVsZW1lbnRzW2luZGV4XS5nZXROYW1lKCkuZXF1YWxzKCJ3aWRnZXRGYWN0b3J5IikgKSBjb250aW51ZTsKLQkgIAotCSAgRW50cnkgICAgICAgICAgICAgICAgIGVudHJ5ICAgID0gbmV3IEVudHJ5KCk7Ci0JICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCAgPSBlbGVtZW50c1tpbmRleF07Ci0JICBTdHJpbmcgICAgICAgICAgICAgICAgaWQgICAgICAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggImlkIiApOwotCSAgU3RyaW5nICAgICAgICAgICAgICAgIG1ldGhvZElkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoICJpbnNlcnRCZWZvcmVDb21tYW5kSWQiICk7Ci0JICAKLQkgIGVudHJ5LmVsZW1lbnRfID0gZWxlbWVudDsKLQkgIGVudHJ5LmlkXyAgICAgID0gaWQ7Ci0JICAKLQkgIGVudHJpZXNfLnB1dCggbWV0aG9kSWQsIGVudHJ5ICk7Ci0JfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIEVudHJ5Ci0gIHsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgaWRfOwotCUlDb25maWd1cmF0aW9uRWxlbWVudCAgICAgICAgICBlbGVtZW50XzsKLQlJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0Fic3RyYWN0U2VsZWN0aW9uRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTRlY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0Fic3RyYWN0U2VsZWN0aW9uRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBTaW1wbGVEaWFsb2cgewotCQotCXB1YmxpYyBBYnN0cmFjdFNlbGVjdGlvbkRpYWxvZyggU2hlbGwgc2hlbGwsIFBhZ2VJbmZvIHBhZ2VJbmZvKQotCXsKLQkJc3VwZXIoc2hlbGwsIHBhZ2VJbmZvKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjYWxsU2V0dGVycygpIHsKLQkJLy8gZXh0ZW5kZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheWFibGVTZWxlY3Rpb25TdHJpbmcoKQotCXsKLQkJcmV0dXJuICIiOwotCX0KLQkKLQlwdWJsaWMgYWJzdHJhY3QgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DYW5GaW5pc2hSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NhbkZpbmlzaFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NjY0MDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NhbkZpbmlzaFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotCi0vKioKLSAqIFRoaXMgaXMgYW4gaW50ZXJmYWNlIGZvciBhbiBhYnN0cmFjdCBjYW4gZmluaXNoIHJlZ2lzdHJ5LgotICogVGhpcyByZWdpc3RyeSBpcyB1c3VhbGx5IGFzc29jaWF0ZSB3aXRoIGFuIEVjbGlwc2Ugd2l6YXJkLiAgVGhpcwotICogcmVnaXN0cnkgYWxsb3cgY29uZGl0aW9uIG9iamVjdCB0byBiZSBhZGRlZCB0byBpdCBpbiBvcmRlciB0bwotICogZGV0ZXJtaW5lIGlmIHRoZSB3aXphcmQgY2FuIGZpbmlzaCBvciBub3QuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENhbkZpbmlzaFJlZ2lzdHJ5Ci17Ci0gIC8qKgotICAgKiBBZGQgYSBjb25kaXRpb24gb2JqZWN0IHRvIHRoZSByZWdpc3RyeS4KLSAgICogQHBhcmFtIGNvbmRpdGlvbiB0aGUgY29uZGl0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZGl0aW9uKCBDb25kaXRpb24gY29uZGl0aW9uICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWNmYzMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5OwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZFdpZGdldEJpbmRpbmcgZXh0ZW5kcyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeQotewotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBleHRlbnNpb25zIHRvIHJlZ2lzdGVyIHRoZWlyIHdpZGdldHMgd2l0aAotICAgKiBDb21tYW5kRnJhZ21lbnRzCi0gICAqIAotICAgKiBAcGFyYW0gd2lkZ2V0UmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5ICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBleHRlbmlvbnMgdG8gcmVnaXN0ZXIgdGhlIGRhdGEgbWFwcGluZ3MKLSAgICogdGhhdCB0aGVpciB3aWRnZXRzIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBkYXRhUmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZXh0ZW5zaW9ucyB0byByZWdpc3RlciBjb25kaXRpb24gb2JqZWN0cwotICAgKiB0aGF0IGNvbnRyb2wgaWYgdGhlIHdpemFyZCBjYW4gZmluaXNoIG9yIG5vdC4KLSAgICogCi0gICAqIEBwYXJhbSBjYW5GaW5pc2hSZWdpc3RyeQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goIENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5ICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmdMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmdMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMTk4MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQ29tbWFuZFdpZGdldEJpbmRpbmdMaXN0IGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgICAgICAgICAgICAgICAgIGJpbmRpbmdzXzsKLSAgcHJpdmF0ZSBWZWN0b3IgICAgICAgICAgICAgICAgIGZyYWdtZW50c187Ci0gIHByaXZhdGUgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBmYWN0b3J5XzsKLSAgCi0gIC8qKgotICAgKiBUaGlzIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNvbWJpbmVzIGEgbGlzdCBvZiBDb21tYW5kV2lkZ2V0QmluZGluZ3MuCi0gICAqIFRoZXJlIHNob3VsZCBiZSB0aGUgc2FtZSBudW1iZXIgb2YgZW50cmllcyBpbiBib3RoIHRoZSBiaW5kaW5ncwotICAgKiBwYXJhbWV0ZXIgYW5kIHRoZSBmcmFnbWVudHMgcGFyYW1ldGVyLiAgRW50cmllcyBpbiBlaXRoZXIgb2YgdGhlCi0gICAqIGJpbmRpbmdzIGZvciBmcmFnbWVudHMgdmVjdG9ycyBhcmUgYWxsb3dlZCB0byBiZSBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdzICAgdGhlIGJpbmRpbmdzIHRvIGNvbWJpbmUuCi0gICAqIEBwYXJhbSBmcmFnbWVudHMgIFRoZXNlIGZyYWdtZW50cyB3aWxsIGJlIGludGVyc3BlcnNlZCB3aXRoIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYmluZGluZy4gIFRoZSBmaXJzdAotICAgKiAgICAgICAgICAgICAgICAgICBmcmFnbWVudCB3aWxsIGJlIHB1dCBiZWZvcmUgdGhlIGZyYWdtZW50IGZyb20gdGhlCi0gICAqICAgICAgICAgICAgICAgICAgIGZpcnN0IGJpbmRpbmcuICBGb2xsb3dpbmcgdGhpcyB3aWxsIGJlIHRoZSBzZWNvbmQKLSAgICogICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgZnJvbSB0aGUgZnJhZ21lbnRzIHZlY3RvciBhbmQgdGhlbiB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgc2Vjb25kIGZyYWdtZW50IGZyb20gdGhlIGJpbmRpbmdzIHZlY3RvciwgZXRjLgotICAgKi8KLSAgcHVibGljIENvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdCggVmVjdG9yIGJpbmRpbmdzLCBWZWN0b3IgZnJhZ21lbnRzICkKLSAgewotICAgIGJpbmRpbmdzXyAgPSBiaW5kaW5nczsgCi0gICAgZnJhZ21lbnRzXyA9IGZyYWdtZW50czsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIAotICB7Ci0gICAgaW50IGxlbmd0aCA9IGJpbmRpbmdzXy5zaXplKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyliaW5kaW5nc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgCi0gICAgICBpZiggYmluZGluZyAhPSBudWxsICkgYmluZGluZy5yZWdpc3RlckNhbkZpbmlzaCggY2FuRmluaXNoUmVnaXN0cnkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLSAgICBpbnQgbGVuZ3RoID0gYmluZGluZ3NfLnNpemUoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKWJpbmRpbmdzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICBpZiggYmluZGluZyAhPSBudWxsICkgYmluZGluZy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5ICk7Ci0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpIAotICB7Ci0gICAgaW50IGxlbmd0aCA9IGJpbmRpbmdzXy5zaXplKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyliaW5kaW5nc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgaWYoIGJpbmRpbmcgIT0gbnVsbCApIGJpbmRpbmcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyggd2lkZ2V0UmVnaXN0cnkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgCi0gIHsKLSAgICBpZiggZmFjdG9yeV8gPT0gbnVsbCApCi0gICAgewotICAgICAgZmFjdG9yeV8gPSBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgU2VxdWVuY2VGcmFnbWVudCBmcmFnbWVudExpc3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgICAgICAgaW50ICAgICAgICAgICAgICBsZW5ndGggICAgICAgPSBiaW5kaW5nc18uc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gKENvbW1hbmRGcmFnbWVudClmcmFnbWVudHNfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIGlmKCBmcmFnbWVudCAhPSBudWxsICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYWdtZW50TGlzdC5hZGQoIGZyYWdtZW50ICk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpYmluZGluZ3NfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIGlmKCBiaW5kaW5nICE9IG51bGwgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRMaXN0LmFkZCggYmluZGluZy5jcmVhdGUoKS5jcmVhdGUoKSApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3Q7Ci0gICAgICAgICAgfQotICAgICAgICB9OyAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhY3RvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ3VycmVudFBhZ2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ3VycmVudFBhZ2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzODU1ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0N1cnJlbnRQYWdlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogVGhpcyBDb21tYW5kIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgY3VycmVudCBwYWdlLgotICogVXNlIG9mIHRoaXMgY2xhc3MgaXMgbm90IHJlY29tbWVuZGVkLgotICoKLSAqLwotcHVibGljIGNsYXNzIEN1cnJlbnRQYWdlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOwotICAKLSAgcHVibGljIEN1cnJlbnRQYWdlQ29tbWFuZCggV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIgKQotICB7Ci0gICAgcGFnZU1hbmFnZXJfID0gcGFnZU1hbmFnZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXRDdXJyZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gcGFnZU1hbmFnZXJfLmdldEN1cnJlbnRQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RhdGFPYmplY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGF0YU9iamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MGFkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGF0YU9iamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIFRoaXMgQ29tbWFuZCBjYW4gYmUgdXNlIHRvIGdldCB0aGUgcmVzdWx0aW5nIGRhdGEgb2JqZWN0IGZvcgotICogdGhpcyB3aXphcmQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRGF0YU9iamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIE9iamVjdCBkYXRhT2JqZWN0XzsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldERhdGFPYmplY3QoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgZGF0YU9iamVjdF8gPSBvYmplY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0RGF0YU9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gZGF0YU9iamVjdF87Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RpYWxvZ0RhdGFFdmVudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EaWFsb2dEYXRhRXZlbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZmQxOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RpYWxvZ0RhdGFFdmVudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotCi0vKioKLSAqIER5bmFtaWMgd2l6YXJkIGltcGxlbWVudGF0aW9ucyB0aGF0IHdhbnQgdG8gY3JlYXRlIGRpZmZlcmVudAotICoga2luZHMgb2Ygd2l6YXJkIHBhZ2VzIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgotICogVGhlIFdpemFyZFBhZ2VGYWN0b3J5IHJldHVybnMgYSBjbGFzcyBvZiB0aGlzIHR5cGUuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIERpYWxvZ0RhdGFFdmVudHMKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFdpZGdldERhdGFFdmVudHMgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIGFkZENvbnRyb2xzCi0gICAqIG1ldGhvZCBvZiBhIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgZ2V0RGF0YUV2ZW50cygpOwotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGF0IHRoaXMgd2l6YXJkIHBhZ2UgaXMgY29tcGxldGUuIAotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0R5bmFtaWNXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EeW5hbWljV2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMDI0ZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0R5bmFtaWNXaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjMgICAxMjkyMzIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA4MjIgICAxNTQ3NTAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MjkgICAxODc3ODAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA2MTMgICAyMzY1MjMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE92ZXJ3cml0ZSBzZXR0aW5nIG9uIFdlYiBzZXJ2aWNlIHdpemFyZCBpcyBjb3VwbGVkIHdpdGggcHJlZmVyZW5jZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeGVjdXRhYmxlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucmVnaXN0cnkuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBhZGQgZHluYW1pYyB3aXphcmRzIGludG8gRWNsaXBzZS4gIFdoZW4gYWRkaW5nCi0gKiBhIGR5bmFtaWMgd2l6YXJkIGludG8gZWNsaXBzZSB0d28gZW50cmllcyBuZWVkIHRvIGJlIG1hZGUgaW4gdGhlIHBsdWdpbi54bWwKLSAqIGZpbGUuICBUaGlzIGZpcnN0IGVudHJ5IHRlbGxzIEVjbGlwc2UgdGhhdCBhIG5ldyB3aXphcmQgc2hvdWxkIGJlIGFkZGVkCi0gKiBhbmQgaXQgcmVmZXJlbmNlcyB0aGlzIGNsYXNzLiAgVGhlIHNlY29uZCBlbnRyeSBzcGVjaWZpZXMgZGV0YWlsZWQgaW5mb3JtYXRpb24KLSAqIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHdpemFyZCB0byBiZSBhZGRlZC4gIFRoZXNlIHR3byBwbHVnaW4ueG1sIGVudHJpZXMKLSAqIGFyZSBsaW5rZWQgdG9nZXRoZXIgdmlhIHRoZWlyIGlkIGF0dHJpYnV0ZXMuICBGb3IgZXhhbXBsZSBoZXJlIGlzIGFuCi0gKiBlbnRyeSB0aGF0IHJlZ2lzdGVycyBhIG5ldyB3aXphcmQgd2l0aCBlY2xpcHNlLiAgTm90ZSB0aGUgY2xhc3MgYXR0cmlidXRlCi0gKiByZWZlcmVuY2VzIHRoaXMgY2xhc3MuCi0gKiA8cHJlPgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiJmd0OwotICogICAgICZsdDt3aXphcmQKLSAqICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQiCi0gKiAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdG9vbDE2L25ld2NsaWVudF93ZWJzZXJ2X3dpei5naWYiCi0gKiAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0gKiAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiAgICAgICAgJmx0O2Rlc2NyaXB0aW9uJmd0OwotICogICAgICAgICAgICVQTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX0NMSUVOVAotICogICAgICAgICZsdDsvZGVzY3JpcHRpb24mZ3Q7Ci0gKiAgICAgICAgJmx0O3NlbGVjdGlvbgotICogICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiJmd0OwotICogICAgICAgICZsdDsvc2VsZWN0aW9uJmd0OwotICogICAgICZsdDsvd2l6YXJkJmd0OwotICogICAmbHQ7L2V4dGVuc2lvbiZndDsKLSAqCi0gKiA8L3ByZT4KLSAqIEhlcmUgaXMgdGhlIGR5bmFtaWNXaXphcmQgZW50cnkgZm9yIHRoaXMgcGFydGljdWxhciB3aXphcmQuICBUaGlzIGlkIGF0dHJpYnV0ZXMKLSAqIGxpbmsgdGhlc2UgdHdvIGVudHJpZXMgdG9nZXRoZXIuICBUaGUgY2xhc3MgYXR0cmlidXRlIG11c3Qgc3BlY2lmeSBhIGNsYXNzIHRoYXQKLSAqIGltcGxlbWVudHMgdGhlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nIGludGVyZmFjZS4gIFRoaXMKLSAqIGludGVyZmFjZSBzcGVjaWZpZXMgd2hhdCB0aGUgVUkgc2hvdWxkIGxvb2sgbGlrZSBhbmQgdGhlIGNvbW1hbmRzIHRoZSBzaG91bGQKLSAqIGJlIGV4ZWN1dGVkIGluIHRoZSB3aXphcmQuCi0gKiAKLSAqIDxwcmU+Ci0gKiAgICZsdDtleHRlbnNpb24KLSAqICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiJmd0OwotICogICAgICZsdDtkeW5hbWljV2l6YXJkCi0gKiAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LmdpZiIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5DbGllbnRXaWRnZXRCaW5kaW5nIgotICogICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAmbHQ7L2R5bmFtaWNXaXphcmQmZ3Q7Ci0gKiAgICZsdDsvZXh0ZW5zaW9uJmd0OwotICogPC9wcmU+Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRHluYW1pY1dpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQsIElFeGVjdXRhYmxlRXh0ZW5zaW9uCi17Ci0gIHByaXZhdGUgICBTdHJpbmcgICAgICAgICAgICAgICAgICBpY29uQmFubmVyTmFtZV87Ci0gIHByaXZhdGUgICBCdW5kbGUgICAgICAgICAgICAgICAgICBidW5kbGVfOwotICBwcml2YXRlICAgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnlfOyAKLSAgcHJpdmF0ZSAgIFN0cmluZyAgICAgICAgICAgICAgICAgIHdpemFyZFRpdGxlXzsKLSAgcHJpdmF0ZSAgIERhdGFPYmplY3RDb21tYW5kICAgICAgIGRhdGFPYmplY3RDb21tYW5kXyA9IG51bGw7Ci0gIHByaXZhdGUgICBXaXphcmRQYWdlTWFuYWdlciAgICAgICBwYWdlTWFuYWdlcl87Ci0gIAotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgd2l6YXJkRWxlbWVudF87Ci0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICBvcmlnaW5hbEVsZW1lbnRfOwotICBwcm90ZWN0ZWQgQ29tbWFuZFdpZGdldEJpbmRpbmcgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfOwotICAKLSAgcHVibGljIER5bmFtaWNXaXphcmQoKQotICB7Ci0Jc2V0TmVlZHNQcm9ncmVzc01vbml0b3IodHJ1ZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgRHluYW1pYyB3aXphcmQgaXMgY3JlYXRlZCBieSBlY2xpcHNlLgotICAgKiBXZSBuZWVkIHRvIGZpbmQgYSBkeW5hbWljV2l6YXJkIGV4dGVuc2lvbiBwb2ludCB0aGF0IG1hdGNoZXMgdGhlIGlkCi0gICAqIGZvciB0aGlzIHdpemFyZC4gIE9uY2UgdGhlIGV4dGVuc2lvbiBwb2ludCBpcyBmb3VuZCBpdCB3aWxsIGNvbnRhaW4KLSAgICogYSByZWZlcmVuY2UgdG8gYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcyB3aGljaCBkZWZpbmVzIHRoZSB3aWRnZXRzIAotICAgKiBhbmQgY29tbWFuZHMgZm9yIHRoaXMgd2l6YXJkLgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4ZWN1dGFibGVFeHRlbnNpb24jc2V0SW5pdGlhbGl6YXRpb25EYXRhKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsaXphdGlvbkRhdGEoIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWcsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgICAgICAgZGF0YSApCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB3aXphcmRJZCAgID0gY29uZmlnLmdldEF0dHJpYnV0ZSggImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgc2V0SW5pdGlhbERhdGEoIHdpemFyZElkICk7Ci0gICAgb3JpZ2luYWxFbGVtZW50XyA9IGNvbmZpZzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgRHluYW1pYyBXaXphcmQgaXMgYmVpbmcKLSAgICogbGF1bmNoZWQgdGhyb3VnaCBzb21lIG90aGVyIG1lY2hhbmlzZSBvdGhlciB0aGFuIHRoZSBFY2xpcHNlIE5ldyBXaXphcmQKLSAgICogbWVjaGFuaXNtLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgICAgICAgIHRoZSBjb21tYW5kIHdpZGdldCBiaW5kaW5nIGZvciB0aGlzIHdpemFyZC4KLSAgICogQHBhcmFtIGRlc2NyaXB0b3IgICAgIHRoZSBwbHVnaW4gZGVzY3JpcHRvciB3aGVyZSB0aGUgaWNvbiBiYW5uZXIgaXMKLSAgICogICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQuCi0gICAqIEBwYXJhbSBpY29uQmFubmVyUGF0aCB0aGUgaWNvbiBiYW5uZXIgcGF0aCBmb3IgdGhpcyB3aXphcmQuICBUaGUgcGF0aAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBzcGVjaWZpZWQgYnkgdGhlIAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciBwYXJhbWV0ZXIuCi0gICAqIEBwYXJhbSB3aXphcmRUaXRsZSAgICB0aGUgd2l6YXJkIHRpdGxlCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZCBVc2UgZWl0aGVyIHNldEluaXRpYWxEYXRhKHdpemFyZElkKSBvcgotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxEYXRhKHdpemFyZElkLCBidW5kbGUsIGljb25CYW5uZXJQYXRoLCB3aXphcmRUaXRsZSApCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsRGF0YSggQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bmRsZSAgICAgICAgICAgICAgIGJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgIGljb25CYW5uZXJQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgd2l6YXJkVGl0bGUgKQotICB7Ci0gICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gYmluZGluZzsKLSAgICBidW5kbGVfICAgICAgICAgICAgICAgPSBidW5kbGU7Ci0gICAgaWNvbkJhbm5lck5hbWVfICAgICAgID0gaWNvbkJhbm5lclBhdGg7Ci0gICAgd2l6YXJkVGl0bGVfICAgICAgICAgID0gd2l6YXJkVGl0bGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBpbml0aWFsIGRhdGEgYmFzZWQgb24gdGhlIGR5bmFtaWMgd2l6YXJkIGlkLgotICAgKiAKLSAgICogQHBhcmFtIHdpemFyZElkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsRGF0YSggU3RyaW5nIHdpemFyZElkICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIHNldEluaXRpYWxEYXRhKHdpemFyZElkLCBudWxsLCBudWxsLCBudWxsICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBpbml0aWFsIGRhdGEgYmFzZWQgb24gdGhlIGR5bmFtaWMgd2l6YXJkIGlkLgotICAgKiAKLSAgICogQHBhcmFtIHdpemFyZElkIHRoZSBJRCBvZiB0aGUgd2l6YXJkLgotICAgKiBAcGFyYW0gYnVuZGxlIHRoZSBidW5kbGUgdXNlZCB0byBmaW5kIGFuIGljb24gYmFubmVyLiAgQ2FuIGJlIG51bGwgaWYKLSAgICogbm8gaWNvbiBiYW5uZXIgaXMgc3BlY2lmaWVkLgotICAgKiBAcGFyYW0gaWNvbkJhbm5lclBhdGggdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1bmRsZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSB3aXphcmRUaXRsZSB0aGUgdGl0bGUgb2YgdGhlIHdpemFyZC4KLSAgICogCi0gICAqIE5vdGU6IG5vcm1hbGx5IHRoZSB3aXphcmQgYXNzb2NpYXRlZCB3aXRoIGEgd2l6YXJkSWQgd2lsbCBoYXZlIGFuCi0gICAqIGljb24gYmFubmVyIGFuZCBhIHRpdGxlLiAgVGhlIHBhcmFtZXRlcnMgb24gdGhpcyBtZXRob2QgYWxsb3cgdGhlIGNhbGxlcgotICAgKiB0byBvdmVycmlkZSB0aGVzZSB2YWx1ZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsRGF0YSggU3RyaW5nIHdpemFyZElkLCBCdW5kbGUgYnVuZGxlLCBTdHJpbmcgaWNvbkJhbm5lclBhdGgsIFN0cmluZyB3aXphcmRUaXRsZSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgICAgcmVnaXN0cnkgICAgICA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50ICAgICAgIHBvaW50ICAgICAgICAgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludCgib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiKTsgLy8kTk9OLU5MUy0xJAotICAgIElFeHRlbnNpb25bXSAgICAgICAgICBleHRlbnNpb25zICAgID0gcG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBleHRlbnNpb25zLmxlbmd0aDsgaW5kZXgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBleHRlbnNpb25zW2luZGV4XS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIAotICAgICAgaWYoIGVsZW1lbnRzLmxlbmd0aCA9PSAxICYmIGVsZW1lbnRzWzBdLmdldE5hbWUoKS5lcXVhbHMoICJkeW5hbWljV2l6YXJkIikgKSAgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBTdHJpbmcgaWQgPSBlbGVtZW50c1swXS5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAKLSAgICAgICAgaWYoIGlkICE9IG51bGwgJiYgaWQuZXF1YWxzKCB3aXphcmRJZCApICkKLSAgICAgICAgewotICAgICAgICAgIHdpemFyZEVsZW1lbnRfID0gZWxlbWVudHNbMF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgICAgCi0gICAgYnVuZGxlXyAgICAgICAgID0gYnVuZGxlOwotICAgIGljb25CYW5uZXJOYW1lXyA9IGljb25CYW5uZXJQYXRoOwotICAgIHdpemFyZFRpdGxlXyAgICA9IHdpemFyZFRpdGxlOwotICAgIAotICAgIGlmKCB3aXphcmRFbGVtZW50XyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyggU3RhdHVzLkVSUk9SLCAiaWQiLCAwLCBOTFMuYmluZChFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX0VSUk9SX1dJWkFSRF9JRF9OT1RfRk9VTkQsIG5ldyBTdHJpbmdbXXsgd2l6YXJkSWR9KSAsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oIHN0YXR1cyApOwotICAgIH0KLSAgfQotICAgIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBlY2xpcHNlIGZyYW1ld29yayB0byBpbml0aWFsaXplIHRoZQotICAgKiB3aXphcmQuIAotICAgKiAKLSAgICogTm90ZTogaWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHByb2dyYW1hdGljYWxseShpZS4gbm90IGJ5IHRoZSBlY2xpcHNlCi0gICAqIGZyYW1ld29yay4pIG9uZSBvZiB0aGUgc2V0SW5pdGFsRGF0YSBtZXRob2RzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhpcwotICAgKiBtZXRob2QgaXMgaW52b2tlZC4KLSAgICogCi0gICAqIEBwYXJhbSB3b3JrYmVuY2ggdGhlIGVjbGlwc2Ugd29ya2JlbmNoCi0gICAqIEBwYXJhbSBzZWxlY3Rpb24gdGhlIGluaXRpYWwgc2VsZWN0aW9uIHRoYXQgdGhlIHVzZXIgaGFzIG1hZGUgd2l0aGluCi0gICAqICAgICAgICAgICAgICAgICAgZWNsaXBzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQgKCBJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgeyAgICAKLSAgICBSZXNvdXJjZUNvbnRleHQgICAgICAgICAgIGNvbnRleHQgICAgICAgID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLmNvcHkoKTsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgIGhhbmRsZXIgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICBlbnZpcm9ubWVudCAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIGNvbnRleHQsIGhhbmRsZXIgKTsKLSAgICAKLSAgICBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsKLSAgICBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgICB3aWRnZXRSZWdpc3RyeV8gPSBuZXcgU2ltcGxlV2lkZ2V0UmVnaXN0cnkoKTsgIAotICAgIERhdGFGbG93TWFuYWdlciAgICAgICAgIGRhdGFNYW5hZ2VyICAgICA9IG5ldyBEYXRhRmxvd01hbmFnZXIoIGRhdGFSZWdpc3RyeV8sIGVudmlyb25tZW50ICk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIHdpemFyZEVsZW1lbnRfICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggY29tbWFuZFdpZGdldEJpbmRpbmdfID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKXdpemFyZEVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggYnVuZGxlXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGJ1bmRsZV8gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIHdpemFyZEVsZW1lbnRfLmdldE5hbWVzcGFjZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBpY29uQmFubmVyTmFtZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBpY29uQmFubmVyTmFtZV8gPSB3aXphcmRFbGVtZW50Xy5nZXRBdHRyaWJ1dGUoICJpY29uYmFubmVyIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCB3aXphcmRUaXRsZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB3aXphcmRUaXRsZV8gPSB3aXphcmRFbGVtZW50Xy5nZXRBdHRyaWJ1dGUoICJ0aXRsZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLQlkYXRhT2JqZWN0Q29tbWFuZF8gPSBuZXcgRGF0YU9iamVjdENvbW1hbmQoKTsKLSAgICBjYW5GaW5pc2hSZWdpc3RyeV8gPSBuZXcgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkoKTsgCi0gICAgcGFnZU1hbmFnZXJfICAgICAgID0gbmV3IFdpemFyZFBhZ2VNYW5hZ2VyKCB3aWRnZXRSZWdpc3RyeV8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2l6YXJkUGFnZUZhY3RvcnkoKSwgCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hbmFnZXIsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCApOyAgCi0gICAgCi0gICAgcGFnZU1hbmFnZXJfLnNldFJvb3RGcmFnbWVudCggZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIHBhZ2VNYW5hZ2VyXyApICk7Ci0gICAgCi0gICAgY29tbWFuZFdpZGdldEJpbmRpbmdfLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIHdpZGdldFJlZ2lzdHJ5XyApOwotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5XyApOwotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckNhbkZpbmlzaCggY2FuRmluaXNoUmVnaXN0cnlfICk7Ci0gICAgICAgIAotICAgIC8vIElmIGEgcGFnZSBpcyBub3QgY29tcGxldGUgZW5zdXJlIHRoYXQgY2FuRmluaXNoIGlzIGZhbHNlLgotICAgIENvbmRpdGlvbiBjYW5GaW5pc2ggPSBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV2l6YXJkUGFnZSBjdXJyZW50UGFnZSA9IHBhZ2VNYW5hZ2VyXy5nZXRDdXJyZW50UGFnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBhZ2UgIT0gbnVsbCA/IGN1cnJlbnRQYWdlLmlzUGFnZUNvbXBsZXRlKCkgOiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsgCi0gICAgCi0gICAgY2FuRmluaXNoUmVnaXN0cnlfLmFkZCggY2FuRmluaXNoICk7Ci0gICAgCi0gICAgLy8gU2V0IHRoYXQgd2UgbmVlZCBhIHByb2dyZXNzIG1vbml0b3IuCi0gICAgc2V0TmVlZHNQcm9ncmVzc01vbml0b3IoIHRydWUgKTsKLSAgICAKLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbmV4dC9iYWNrIGJ1dHRvbnMgYXJlIGVuYWJsZWQuCi0Jc2V0Rm9yY2VQcmV2aW91c0FuZE5leHRCdXR0b25zKCB0cnVlICk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBpY29uIGJhbm5lciBpZiBzcGVjaWZpZWQuCi0gICAgaWYoIGljb25CYW5uZXJOYW1lXyAhPSBudWxsICYmIGljb25CYW5uZXJOYW1lXy5sZW5ndGgoKSA+IDAgKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgaW5zdGFsbFVSTCAgICAgICAgPSBidW5kbGVfLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVVJMIGltYWdlVVJMICAgICAgICAgID0gbmV3IFVSTChpbnN0YWxsVVJMLCBpY29uQmFubmVyTmFtZV8gKTsKLSAgICAgICAgSW1hZ2VEZXNjcmlwdG9yIGltYWdlID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotICAgICAgICAKLSAgICAgICAgaWYoIGltYWdlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoIGltYWdlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIHdpemFyZFRpdGxlXyAhPSBudWxsICYmIHdpemFyZFRpdGxlXy5sZW5ndGgoKSA+IDAgKQotICAgIHsKLSAgICAgIHNldFdpbmRvd1RpdGxlKCB3aXphcmRUaXRsZV8gKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMuCi0gIHByb3RlY3RlZCBXaXphcmRQYWdlRmFjdG9yeSBnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZVBhZ2VGYWN0b3J5KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGFnZXMgYXJlIGNvbXBsZXRlLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbGwgcGFnZXMgYXJlIGNvbXBsZXRlLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBjYW5GaW5pc2ggKCkKLSAgewotICAJaW50ICAgICBsZW5ndGggPSBjYW5GaW5pc2hSZWdpc3RyeV8uc2l6ZSgpOwotICAJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAJCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29uZGl0aW9uIGNvbmRpdGlvbiA9IChDb25kaXRpb24pY2FuRmluaXNoUmVnaXN0cnlfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAKLSAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi5ldmFsdWF0ZSgpOwotICAgICAgCi0gICAgICBpZiggIXJlc3VsdCApIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBwYWdlIGZvciB0aGlzIHdpemFyZC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBwYWdlIGZvciB0aGlzIHdpemFyZC4KLSAgKiovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXRTdGFydGluZ1BhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXRTdGFydGluZ1BhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgICogUmV0dXJucyB0aGUgbmV4dCBwYWdlIGFmdGVyIHBhZ2UgYW5kCi0gICAgKiBydW5zIHRoZSBhcHByb3ByaWF0ZSB0YXNrcy4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIgcGFnZS4KLSAgKiovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSggSVdpemFyZFBhZ2UgcGFnZSApCi0gIHsgICAKLSAgICByZXR1cm4gcGFnZU1hbmFnZXJfLmdldE5leHRQYWdlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoICgpCi0gIHsgCi0gICAgYm9vbGVhbiByZXN1bHQgPSBwYWdlTWFuYWdlcl8ucGVyZm9ybUZpbmlzaCgpOwotICAgIAotICAgIGlmKCByZXN1bHQgKSBjbGVhbnVwKCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBVbmRvIGZyYWdtZW50cwotICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2FuY2VsICgpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gcGFnZU1hbmFnZXJfLnBlcmZvcm1DYW5jZWwoKTsKLSAgCQotICAJaWYoIHJlc3VsdCApIGNsZWFudXAoKTsKLSAgCQotICAJcmV0dXJuIHJlc3VsdDsKLSAgfSAgCi0gICAgICAKLSAgcHVibGljIE9iamVjdCBnZXREYXRhT2JqZWN0KCkKLSAgewotICAgIHJldHVybiBkYXRhT2JqZWN0Q29tbWFuZF8uZ2V0RGF0YU9iamVjdCgpOyAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBDb21tYW5kRnJhZ21lbnQgZ2V0Um9vdEZyYWdtZW50KCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyICkKLSAgewotICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgCi0gICAgcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlbGVjdGlvbkNvbW1hbmQoIHNlbGVjdGlvbiApLCAiIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICByb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ3VycmVudFBhZ2VDb21tYW5kKCBwYWdlTWFuYWdlciApLCAiIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICByb290LmFkZCggY29tbWFuZFdpZGdldEJpbmRpbmdfLmNyZWF0ZSgpLmNyZWF0ZSgpICk7Ci0Jcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggZGF0YU9iamVjdENvbW1hbmRfLCAiIiApKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJldHVybiByb290OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdpemFyZEVsZW1lbnRfOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgZnJlZXMgdXAgdGhlIG1lbW9yeSBoZWxkIGJ5IHRoaXMgb2JqZWN0LgotICAgKgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNsZWFudXAoKQotICB7Ci0JICBpY29uQmFubmVyTmFtZV8gICAgICAgPSBudWxsOwotCSAgYnVuZGxlXyAgICAgICAgICAgICAgID0gbnVsbDsKLQkgIGNhbkZpbmlzaFJlZ2lzdHJ5XyAgICA9IG51bGw7IAotCSAgcGFnZU1hbmFnZXJfICAgICAgICAgID0gbnVsbDsKLQkgIHdpemFyZFRpdGxlXyAgICAgICAgICA9IG51bGw7Ci0JICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSBudWxsOwotCSAgV2lkZ2V0UmVnaXN0cnkuaW5pdGlhbGl6ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWJhZjMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBXaWRnZXRDb250cmlidXRvciBmb3IgdGhpcyBOYW1lZCB3aWRnZXQuCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGRlc2NyaXB0aW9uIHRoYXQgbWlnaHQgYmUgZGlzcGxheWVkIG9uCi0gICAqIGEgd2l6YXJkIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGl0bGUgdGhhdCBtYXkgYmUgZGlzcGxheWVkIG9uIAotICAgKiBhIHdpemFyZCBwYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNGZmMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0lOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IG5hbWVkIHdpZGdldC4KLSAgICovCi0gIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHdpZGdldENvbnRyaWJ1dG9yCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBuYW1lZCB3aWRnZXQgYWZ0ZXIgdGhlIG9uZSBzcGVjaWZpZWQuCi0gICAqLwotICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBleHRlbmlvbnMgdG8gcmVnaXN0ZXIgdGhlIGRhdGEgbWFwcGluZ3MKLSAgICogdGhhdCB0aGVpciB3aWRnZXRzIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBkYXRhUmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSApOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ODQzNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGFnZUluZm8gCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgIHBhZ2VOYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlXzsKLSAgcHJpdmF0ZSBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeV87Ci0gIAotICBwdWJsaWMgUGFnZUluZm8oIFN0cmluZyAgICAgICAgICAgICAgICAgICBwYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlLAotICAgICAgICAgICAgICAgICAgIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB3aWRnZXRGYWN0b3J5ICkKLSAgewotICAgIHBhZ2VOYW1lXyAgICAgICA9IHBhZ2VOYW1lOwotICAgIHBhZ2VUaXRsZV8gICAgICA9IHBhZ2VUaXRsZTsKLSAgICB3aWRnZXRGYWN0b3J5XyAgPSB3aWRnZXRGYWN0b3J5OwotICB9ICAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBhZ2VOYW1lKCkKLSAgewotICAgIHJldHVybiBwYWdlTmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFnZVRpdGxlKCkKLSAgewotICAgIHJldHVybiBwYWdlVGl0bGVfOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIHdpZGdldEZhY3RvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvUGFnZVdpemFyZERhdGFFdmVudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlV2l6YXJkRGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWI2NWYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlV2l6YXJkRGF0YUV2ZW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotCi0vKioKLSAqIER5bmFtaWMgd2l6YXJkIGltcGxlbWVudGF0aW9ucyB0aGF0IHdhbnQgdG8gY3JlYXRlIGRpZmZlcmVudAotICoga2luZHMgb2Ygd2l6YXJkIHBhZ2VzIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgotICogVGhlIFdpemFyZFBhZ2VGYWN0b3J5IHJldHVybnMgYSBjbGFzcyBvZiB0aGlzIHR5cGUuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGV4dGVuZHMgSVdpemFyZFBhZ2UKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFdpZGdldERhdGFFdmVudHMgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIGFkZENvbnRyb2xzCi0gICAqIG1ldGhvZCBvZiBhIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgZ2V0RGF0YUV2ZW50cygpOwotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGF0IHRoaXMgd2l6YXJkIHBhZ2UgaXMgY29tcGxldGUuIAotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2VsZWN0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjEzYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TZWxlY3Rpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogVGhpcyBTZWxlY3Rpb25Db21tYW5kIGlzIGV4ZWN1dGUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZQotICogZHluYW1pYyB3aXphcmQuICBDb21tYW5kcyBleGVjdXRlZCBpbiB0aGUgd2l6YXJkIHRoYXQgbmVlZAotICogdGhlIGluaXRpYWwgc2VsZWN0aW9uIGNhbiBnZXQgaXQgdGhyb3VnaCBhIGRhdGEgbWFwcGluZyBmcm9tIAotICogdGhpcyBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHRoYXQgbmVlZHMgaXQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25Db21tYW5kKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgIAotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDYW5GaW5pc2hSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTk5ZGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDYW5GaW5pc2hSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkgZXh0ZW5kcyBWZWN0b3IgaW1wbGVtZW50cyBDYW5GaW5pc2hSZWdpc3RyeQotewotCi0gIC8qKgotICAgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzI4NTgzNzg3MDc0MTMwNUw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVudi53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5I2FkZENvbmRpdGlvbihvcmcuZWNsaXBzZS5lbnYuY29tbWFuZC5mcmFnbWVudC5Db25kaXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25kaXRpb24oQ29uZGl0aW9uIGNvbmRpdGlvbikKLSAgewotICAgIGFkZCggY29uZGl0aW9uICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWFhN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5GcmFnbWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGV4ZWN1dGlvbiBvZiBDb21tYW5kcyBpbiBhIGZsb3cgb2YgQ29tbWFuZEZyYWdtZW50cy4KLSAqIFRoZSBidWxrIG9mIHRoaXMgd29yayBpcyBkb25lIGJ5IHRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUuICBUaGUgbWFpbiBqb2Igb2YKLSAqIHRoaXMgY2xhc3MgaXMgcnVuIHRoZSBmcmFnbWVudHMgaW4gYSBwYXJ0aWN1bGFyIHRyYW5zYWN0aW9uYWwgZW52aXJvbm1lbnQuCi0gKiBBIGZyYWdtZW50IGhhcyBhIG1ldGhvZCBjYWxsZWQgZG9Ob3RSdW5JblRyYW5zYWN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0gKiBpZiBpdHMgY29tbWFuZHMgc2hvdWxkIGJlIHJ1biBpbiBhIHRyYW5zYWN0aW9uIG9yIG5vdC4gIElmIHRoaXMgbWV0aG9kIHJldHVybnMKLSAqIHRydWUoaWUuIG5vdCBpbiBhIHRyYW5zYWN0aW9uKSB0aGUgQ29tbWFuZHMgYXJlIHdyYXBwZWQgaW4gYSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MuCi0gKiBJZiBmYWxzZSggaWUuIGluIGEgdHJhbnNhY3Rpb24gKSB0aGUgQ29tbWFuZHMgYXJlIHdyYXBwZWQgaW4gYSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24uIAotICoKLSAqLwotcHVibGljIGNsYXNzIFNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyCi17Ci0gIHByb3RlY3RlZCBDb21tYW5kRnJhZ21lbnRFbmdpbmUgZW5naW5lXzsKLSAgcHJvdGVjdGVkIERhdGFGbG93TWFuYWdlciAgICAgICBkYXRhTWFuYWdlcl87Ci0gIHByb3RlY3RlZCAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICBlbnZpcm9ubWVudF87Ci0gIAotICBwcml2YXRlICAgYm9vbGVhbiAgICAgICAgICAgICAgIGZvdW5kU3RvcF87Ci0gIHByaXZhdGUgICBib29sZWFuICAgICAgICAgICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlciggRWNsaXBzZUVudmlyb25tZW50IGVudmlyb25tZW50LCBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIgKQotICB7Ci0gICAgZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gICAgZGF0YU1hbmFnZXJfID0gZGF0YU1hbmFnZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSByb290IGZyYWdtZW50LiAgVGhlIGV4ZWN1dGlvbiBlbmdpbmUgd2lsbCBzdGFydCBleGVjdXRpbmcgY29tbWFuZHMKLSAgICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHJvb3QgZnJhZ21lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcm9vdCB0aGUgcm9vdCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJvb3RGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IHJvb3QgKQotICB7Ci0gIAllbmdpbmVfID0gbmV3IENvbW1hbmRGcmFnbWVudEVuZ2luZSggcm9vdCwgZGF0YU1hbmFnZXJfLCBlbnZpcm9ubWVudF8gKTsKLQkKLQkgIGVudmlyb25tZW50Xy5zZXRDb21tYW5kTWFuYWdlciggZW5naW5lXyApOwotICAJCi0gICAgZW5naW5lXy5zZXRQZWVrRnJhZ21lbnRMaXN0ZW5lciggCi0gICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcGVla0ZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICB9ICk7ICAKLSAgICAgICAgICAgICAgICAgIAotICAgIGVuZ2luZV8uc2V0TmV4dEZyYWdtZW50TGlzdGVuZXIoIAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgfQotICAgICAgfSApOyAgCi0gICAgCi0gICAgZW5naW5lXy5zZXRBZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyKCAKLSAgICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWZ0ZXJFeGVjdXRlTmV4dEZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICAgIH0KLSAgICAgICAgfSApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICBlbmdpbmVfLnNldFVuZG9GcmFnbWVudExpc3RlbmVyKAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdW5kb0ZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICB9ICk7ICAgICAgICAgICAgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBhZnRlckV4ZWN1dGVOZXh0RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBib29sZWFuICAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB0cnVlOwotICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgICA9IChCYXNlU3RhdHVzSGFuZGxlcillbnZpcm9ubWVudF8uZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgIElTdGF0dXMgICAgICAgICAgIGNvbW1hbmRTdGF0dXMgICA9IGVuZ2luZV8uZ2V0TGFzdFN0YXR1cygpOwotICAgIElTdGF0dXMgICAgICAgICAgIGhhbmRsZXJTdGF0dXMgICA9IHN0YXR1c0hhbmRsZXIuZ2V0U3RhdHVzKCk7Ci0gICAgCi0gICAgaWYoIGNvbW1hbmRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICYmCi0gICAgICAgIGhhbmRsZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLkVSUk9SICkKLSAgICB7Ci0gICAgICAvLyBUaGUgY29tbWFuZCByZXR1cm5lZCBhbiBlcnJvciBzdGF0dXMgZm9yIHRoZSBlbmdpbmUgdG8gc3RvcCwKLSAgICAgIC8vIGJ1dCB0aGUgc3RhdHVzIGhhbmRsZXIgZGlkIG5vdCBoYXZlIHJlcG9ydCBhbmQgZXJyb3IuCi0gICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgcmVwb3J0IHRoaXMgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBjb21tYW5kCi0gICAgICAvLyBpZiB0aGVyZSBpcyBhIG1lc3NhZ2UgdG8gZGlzcGxheS4gIAotICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGNvbW1hbmRTdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgCi0gICAgICBpZiggZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID4gMCApCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0RXJyb3IoIGNvbW1hbmRTdGF0dXMgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgewotICAgICAgLy8gVGhlIGxhc3QgY29tbWFuZCBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBidXQgdGhlIHN0YXR1cyBoYW5kbGVyCi0gICAgICAvLyBkaWQgcmVwb3J0IGFuZCBlcnJvci4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHN0b3AuCi0gICAgICBjb250aW51ZUV4ZWN1dGUgPSBmYWxzZTsgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRpbnVlRXhlY3V0ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBwZWVraW5nIGZvcndhcmQKLSAgICogaW4gdGhlIGZyYWdtZW50cy4gIFdoZW4gcGVla2luZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGluIHRoZQotICAgKiBlbmdpbmUgaXMgbm90IGNoYW5nZXMuCi0gICAqIAotICAgKiAKLSAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IGl0IGlzIHBlZWtpbmcgYXQuCi0gICAqIEByZXR1cm4gSW5kaWNhdGVzIHdoZXRoZXIgcGVla2luZyBzaG91bGQgc3RvcCBvciBub3QuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBwZWVrRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBjYWxscyB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIG1vdmluZyBmb3J3YXJkCi0gICAqIGluIHRoZSBmcmFnbWVudHMuICAgV2hlbiBtb3ZpbmcgZm9yd2FyZCB0aGUgY29tbWFuZCBzdGFjayBzdGF0ZSBpcyBzYXZlZAotICAgKiBhdCBlYWNoIGZyYWdtZW50IGlzIHRyYXZlcnNlZC4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0gICAqIEByZXR1cm4gaW5kaWNhdGVzIGlmIHRoZSBmb3J3YXJkIHRyYXZlcnNhbCBzaG91bGQgY29udGludWUuICAKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgeyAgICAgCi0gICAgaWYoIGZyYWdtZW50LmRvTm90UnVuSW5UcmFuc2FjdGlvbigpICE9IGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gKQotICAgIHsKLSAgICAgIC8vIFRoZSBmcmFnbWVudCBpcyByZXF1ZXN0aW5nIGEgZGlmZmVyZW50IHRyYW5zYWN0aW9uIGVudmlyb25tZW50IHRoYW4KLSAgICAgIC8vIHRoZSBvbmUgdGhhdCB3ZSBhcmUgaW4gc28gd2UgbXVzdCBzdG9wIGFuZCBjaGFuZ2UgZW52aXJvbm1lbnRzLgotICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyA9IGZyYWdtZW50LmRvTm90UnVuSW5UcmFuc2FjdGlvbigpOwotICAgICAgZm91bmRTdG9wXyAgICAgICAgICAgICA9IGZhbHNlOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZm91bmRTdG9wXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB3aGVuIHRoZSBjb21tYW5kIGVuZ2luZSBpcyB1bndpbmRpbmcKLSAgICogaXRzIHN0YWNrIGR1cmluZyBhbiB1bmRvIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCAgdGhlIGZyYWdtZW50IGJlaW5nIHVuZG9uZS4KLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHVuZG8gcHJvY2VzcyBzaG91bGQgY29udGludWUuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRvRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgIAkgIAkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAgIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgdW5kb2VzIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgZXhlY3V0ZWQgaW4gdGhlIHJ1bkZvcndhcmRUb05leHRTdG9wCi0gICAqIG1ldGhvZC4KLSAgICogQHBhcmFtIGNvbnRleHQgdGhlIHJ1bm5hYmxlIGNvbnRleHQuCi0gICAqIEByZXR1cm4gcmV0dXJucyBpZiBhbGwgY29tbWFuZHMgaGF2ZSBiZWVuIHVuZG9uZSBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5VbmRvVG9OZXh0U3RvcCggSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ICkKLSAgewotICAgIGZpbmFsIGJvb2xlYW4gcmVzdWx0W10gPSBuZXcgYm9vbGVhbltde3RydWV9OwotICAgIAotICAgIElSdW5uYWJsZVdpdGhQcm9ncmVzcyB1bmRvT3BlcmF0aW9uIAotICAgICAgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0WzBdID0gZW5naW5lXy51bmRvVG9MYXN0U3RvcChtb25pdG9yKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgIHRyeQotICAgIHsgICAgICAKLSAgICAgIGlmKCBjb250ZXh0ID09IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29udGFpbmVyIHlldCBzbyBqdXN0IHJ1biB0aGUgb3BlcmF0aW9uLgotICAgICAgICB1bmRvT3BlcmF0aW9uLnJ1biggbnVsbCApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgY29udGFpbmVyIHdoZXJlIHRoaXMgb3BlcmF0aW9uIGNhbiBydW4gYW5kIGhhdmUKLSAgICAgICAgLy8gaXRzIHByb2dyZXNzIGRpc3BsYXllZC4KLSAgICAgICAgY29udGV4dC5ydW4oIGZhbHNlLCBmYWxzZSwgdW5kb09wZXJhdGlvbiApOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgLy8gRm9yIG5vdyB3ZSB3aWxsIGlnbm9yZSBhbGwgZXhjZXB0aW9ucy4KLSAgICB9IAotICAgIAotICAgIHJldHVybiByZXN1bHRbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGV4ZWN1dGVzIHRoZSBDb21tYW5kRnJhZ21lbnQgY29tbWFuZHMgaW4gdGhlIGNvbnRleHQgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0YXR1cyBvZiBleGVjdXRpbmcgdGhlIGNvbW1hbmRzLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgcnVuRm9yd2FyZFRvTmV4dFN0b3AoIElSdW5uYWJsZUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbnVsbDsKLSAgICAKLSAgCWRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBmYWxzZTsKLSAgCQotICAJZG8KLSAgCXsKLSAgCSAgLy8gV2Ugd2lsbCBzdG9wIHVubGVzcyB3ZSBhcmUgY2hhbmdpbmcgdHJhbnNhY3Rpb24gbW9kZXMuCi0gICAgICBmb3VuZFN0b3BfID0gdHJ1ZTsKLSAgICAgIAotICAJICBpZiggZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyApCi0gIAkgIHsKLSAgCSAgICBvcGVyYXRpb24gPSBnZXROb1RyYW5zYWN0aW9uT3BlcmF0aW9uKCk7Ci0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7Ci0gIAkgICAgb3BlcmF0aW9uID0gZ2V0VHJhbnNhY3Rpb25PcGVyYXRpb24oKTsKLSAgCSAgfQotICAJICAKLSAgIAkgIHRyeQotICAJICB7ICAJICAgCi0gIAkgICAgaWYoIGNvbnRleHQgPT0gbnVsbCApCi0gIAkgICAgewotICAJICAgCSAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvbnRhaW5lciB5ZXQgc28ganVzdCBydW4gdGhlIG9wZXJhdGlvbi4KLSAgCSAgIAkgIG9wZXJhdGlvbi5ydW4oIG51bGwgKTsKLSAgCSAgICB9Ci0gIAkgICAgZWxzZQotICAJICAgIHsKLSAgCSAgIAkgIC8vIFdlIGhhdmUgYSBjb250YWluZXIgd2hlcmUgdGhpcyBvcGVyYXRpb24gY2FuIHJ1biBhbmQgaGF2ZQotICAJICAgCSAgLy8gaXRzIHByb2dyZXNzIGRpc3BsYXllZC4KLSAgCSAgICAgIGNvbnRleHQucnVuKCBmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbiApOwotICAJICAgIH0KLSAgCSAgfQotICAJICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkKLSAgCSAgewotICAJICAgIC8vVE9ETyBzaG91bGQgbG9nIHRoZXNlIGV4Y2VwdGlvbnMuCi0gIAkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAJICB9Ci0gIAkgIGNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0gIAkgIHsKLSAgCSAgICAvL1RPRE8gc2hvdWxkIGxvZyB0aGVzZSBleGNlcHRpb25zLgotICAJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgCSAgfQotICAJfSAgCi0gIAl3aGlsZSggIWZvdW5kU3RvcF8gKTsgCi0gIAkKLSAgCXJldHVybiBlbmdpbmVfLmdldExhc3RTdGF0dXMoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgZ2V0VHJhbnNhY3Rpb25PcGVyYXRpb24oKQotICB7Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMiwgdGhpcywgImdldFRyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIlN0YXJ0IG9mIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIAotICAgICAgICBCYXNlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gKEJhc2VTdGF0dXNIYW5kbGVyKWVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0dXNIYW5kbGVyLnJlc2V0U3RhdHVzKCk7Ci0gICAgICAgIGVuZ2luZV8ubW92ZUZvcndhcmRUb05leHRTdG9wKCBtb25pdG9yICk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMywgdGhpcywgImdldFRyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIkVuZCBvZiB0cmFuc2FjdGlvbiIpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbigpCi0gIHsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgICAgewotICAgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDg1LCB0aGlzLCAiZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbiIsICJTdGFydCBvZiBOT04gdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgCi0gICAgICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSAoQmFzZVN0YXR1c0hhbmRsZXIpZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXR1c0hhbmRsZXIucmVzZXRTdGF0dXMoKTsKLSAgICAgICAgZW5naW5lXy5tb3ZlRm9yd2FyZFRvTmV4dFN0b3AoIG1vbml0b3IgKTsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTA4NiwgdGhpcywgImdldE5vVHJhbnNhY3Rpb25PcGVyYXRpb24iLCAiRW5kIG9mIE5PTiB0cmFuc2FjdGlvbiIpOwotICAgICAgfQotICAgIH07IAotICAgIAotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2ZjhmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM2MzM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDE4ICAgMTM2NzU5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYxMTA2ICAgMTQyNTAwIGRhdmlkLnNjaG5laWRlckB1bmlzeXMuY29tIC0gRGF2aWQgU2NobmVpZGVyCi0gKiAyMDA2MDgyOSAgIDE4MDgzMyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCAgTmV3IFdlYiBTZXJ2aWNlIHdpemFyZCBzZXJ2aWNlIHNldHRpbmdzIGRpYWxvZyBoYXMgdW5sYWJlbGxlZCBlbmFibGVkIHRleHQgZmllbGRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2ltcGxlRGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgRGlhbG9nRGF0YUV2ZW50cwotewotICBwcml2YXRlICAgV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0XzsKLSAgcHJpdmF0ZSAgIFdpZGdldERhdGFFdmVudHMgIGRhdGFFdmVudHNfOwotICBwcml2YXRlICAgTGlzdGVuZXIgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOyAgCi0gIHByaXZhdGUgVGV4dCBtZXNzYWdlVGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiBva187Ci0gIAkKLSAgcHVibGljIFNpbXBsZURpYWxvZyggU2hlbGwgc2hlbGwsIFBhZ2VJbmZvIHBhZ2VJbmZvKQotICB7Ci0Jc3VwZXIoc2hlbGwpOwotCXdpZGdldF8gID0gcGFnZUluZm8uZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZSgpOwotICAJc3RhdHVzTGlzdGVuZXJfID0gbmV3IFN0YXR1c0xpc3RlbmVyKCk7Ci0gIH0gCSAKLSAgCi0gIENvbXBvc2l0ZSBwYXJlbnRfOwotICBwdWJsaWMgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKCBDb21wb3NpdGUgcGFyZW50ICkKLSAgewkKLQkgIHBhcmVudF8gPSBwYXJlbnQ7Ci0JQ29tcG9zaXRlIGNvbnRyb2wgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JZGF0YUV2ZW50c18gPSB3aWRnZXRfLmFkZENvbnRyb2xzKCBjb250cm9sLCBzdGF0dXNMaXN0ZW5lcl8gKTsKLQkKLQkvL1RleHQgYXJlYSB0byBkaXNwbGF5IHZhbGlkYXRpb24gbWVzc2FnZXMKLQltZXNzYWdlVGV4dF8gPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5XUkFQIHwgU1dULk1VTFRJIHwgU1dULlJFQURfT05MWSk7Ci0JbWVzc2FnZVRleHRfLnNldEJhY2tncm91bmQocGFyZW50LmdldEJhY2tncm91bmQoKSk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBncmlkZGF0YS5ob3Jpem9udGFsSW5kZW50ID0gMTA7Ci0gICAgbWVzc2FnZVRleHRfLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7ICAgIAotICAgIHBhcmVudF8uc2V0Rm9jdXMoKTsKLSAgICAKLSAgICAvL0NhbGwgZXh0ZW5kZXJzIG92ZXJyaWRlIG9mIHRoZSBjYWxsU2V0dGVycyBtZXRob2QgdG8gaW50aWFsaXplIGFueSBkYXRhIGluIHdpZGdldAotICAgIGNhbGxTZXR0ZXJzKCk7ICAgCi0gICAgRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotICAgIHJldHVybiBjb250cm9sOwotICB9ICAKLSAgCi0gIC8vT3ZlcnJpZGUgb2YgRGlhbG9nLmNyZWF0ZUNvbnRlbnRzIHNvIHdlIGNhbiBhZmZlY3QgYnV0dG9uIGVuYWJsZW1lbnQgCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQlDb250cm9sIGMgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotCS8vZW5hYmxlIGNvbnRyb2xzIGZvciBpbml0aWFsIGVudHJ5IHRvIGRpYWxvZwotCXZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JcmV0dXJuIGM7Ci0gIH0KLQotICAvLyBFbmFibGUgb3IgZGlzYWJsZSBvayBidXR0b24gYmFzZWQgb24gc3RhdGUKLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZU9rKGJvb2xlYW4gc3RhdGUpCi0gIHsKLQkgIEJ1dHRvbiBva0J1dHRvbiA9IGdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLQkgIGlmIChva0J1dHRvbiAhPSBudWxsKQotCSAgICBva0J1dHRvbi5zZXRFbmFibGVkKHN0YXRlKTsKLSAgfQotICAKLSAgLy9JbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gY2FsbCBhbGwgc2V0dGVycyBvbiB0aGUgZGlhbG9nIHdpZGdldCBhZnRlciB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQKLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY2FsbFNldHRlcnMoKTsKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGdldERhdGFFdmVudHMoKQotICB7Ci0gICAgcmV0dXJuIGRhdGFFdmVudHNfOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgV2lkZ2V0Q29udHJpYnV0b3IgZ2V0V2lkZ2V0KCkKLSAgewotCSAgcmV0dXJuIHdpZGdldF87Ci0gIH0KLSAgCi0gIC8vIHNldHMgbWVzc2FnZSBpbiBtZXNzYWdlIGFyZWEgYWJvdmUgT0sgYW5kIENhbmNlbCBidXR0b25zCi0gIHByaXZhdGUgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7ICAKLQkgIGlmIChtZXNzYWdlID09IG51bGwpCi0JCSAgbWVzc2FnZVRleHRfLnNldFRleHQoIiIpOwkgICAgICAKLQkgIGVsc2UJCSAgCi0JICAgICAgbWVzc2FnZVRleHRfLnNldFRleHQobWVzc2FnZSk7Ci0gICAgICAvLyBmb3JjZSBhIHJlc2l6ZSBvZiB0aGUgcGFyZW50IGNvbXBvc2l0ZSBhbmQgd3JhcCBvZiB0aGUgdGV4dCBmaWVsZCBpZiBuZWNlc3NhcnkKLQkgIHBhcmVudF8ubGF5b3V0KCk7ICAKLSAgfQotICAJICAKLSAgCi0gIAotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyAgPSB3aWRnZXRfLmdldFN0YXR1cygpOyAgICAKLSAgICAgICAgCi0gICAgaWYoIHN0YXR1cyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IHN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0gICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsKLSAgICAgIAotICAgICAgLy8gZm9yIGVycm9yIGNvbmRpdGlvbiwgZGlzYWJsZSBvayBhbmQgcHJpbnQgbWVzc2FnZQotICAgICAgaWYoIHNldmVyaXR5ID09IElTdGF0dXMuRVJST1IgKQotICAgICAgeyAKLSAgICAgICAgaWYoIG1lc3NhZ2UubGVuZ3RoKCkgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRNZXNzYWdlKCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIG9rXyA9IGZhbHNlOwotICAgICAgfQotICAgICAgLy8gZGlzcGxheSB3YXJuaW5nIGFuZCBpbmZvIG1lc3NhZ2VzIGJ1dCBzdGlsbCBlbmFibGUgT0sKLSAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID09IElTdGF0dXMuV0FSTklORyB8IHNldmVyaXR5ID09IElTdGF0dXMuSU5GTykKLSAgICAgIHsKLSAgICAgICAgc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgb2tfID0gdHJ1ZTsgICAgICAgIAotICAgICAgfSAgICAgCi0gICAgICAvLyBubyBtZXNzYWdlIHRvIGRpc3BsYXkKLSAgICAgIGVsc2UgIAotICAgICAgewotICAgICAgICBzZXRNZXNzYWdlKCBudWxsKTsKLSAgICAgICAgb2tfID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gbnVsbCBzdGF0dXMgY2FzZQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRNZXNzYWdlKG51bGwpOwotICAgICAgb2tfID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgZW5hYmxlT2sob2tfKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgU3RhdHVzTGlzdGVuZXIgaW1wbGVtZW50cyBMaXN0ZW5lcgotICB7Ci0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoIEV2ZW50IGV2dCApIAotCXsKLSAgICAgIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JfQotICB9Ci19ICAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBhZ2VGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUGFnZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5NGU3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUGFnZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlUGFnZUZhY3RvcnkgaW1wbGVtZW50cyBXaXphcmRQYWdlRmFjdG9yeQoteyAgIAotICBwdWJsaWMgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVXaXphcmRQYWdlKCBwYWdlSW5mbywgbWFuYWdlciApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwUGFnZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzMzFkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBQYWdlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVQb3B1cFBhZ2VGYWN0b3J5IGltcGxlbWVudHMgV2l6YXJkUGFnZUZhY3RvcnkKLXsgICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICAKLSAgcHVibGljIFNpbXBsZVBvcHVwUGFnZUZhY3RvcnkoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpZF8gPSBpZDsgIAotICB9Ci0gIAotICBwdWJsaWMgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVQb3B1cFdpemFyZFBhZ2UoIHBhZ2VJbmZvLCBtYW5hZ2VyLCBpZF8gKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwV2l6YXJkUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwV2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzUwOWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQb3B1cFdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDczMSAgIDEyMDM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRmllbGRzIG5vdCB2aXNpYmxlIGluIExhcmdlIGZvbnQgc2V0dGluZ3MKLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVBvcHVwV2l6YXJkUGFnZSBleHRlbmRzIFNpbXBsZVdpemFyZFBhZ2UKLXsgIAotICBwcml2YXRlIFN0cmluZyBpZF87Ci0gIAotICBwdWJsaWMgU2ltcGxlUG9wdXBXaXphcmRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIsIFN0cmluZyBpZCApCi0gIHsKLSAgCXN1cGVyKCBwYWdlSW5mbywgcGFnZU1hbmFnZXIgKTsKLSAgCQotICAJaWRfID0gaWQ7Ci0gIH0gCSAgCi0gIAkKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woIENvbXBvc2l0ZSBwYXJlbnQgKSAKLSAgeyAgCQotCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBzdXBlci5pbnRlcm5hbENyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQkgIAotICAJZmluYWwgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgICA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAJCi0gIAkvLyBJZiB0aGUgY3VycmVudCBwYWdlIGlzIG51bGwgdGhlbiB0aGlzIG11c3QgYmUgdGhlIGZpcnN0IHBhZ2UuCi0gIAlpZiggcGFnZU1hbmFnZXJfLmdldEN1cnJlbnRQYWdlKCkgPT0gbnVsbCAmJiBjb250ZXh0LnNob3dDaGVja2JveChpZF8pICkKLSAgCXsKLSAgICAgIGZpbmFsICBCdXR0b24gYnV0dG9uICA9IG5ldyBCdXR0b24oIGNvbXBvc2l0ZSwgU1dULkNIRUNLICk7Ci0gICAgICBTdHJpbmcgbGFiZWwgICA9IEVudmlyb25tZW50VUlNZXNzYWdlcy5DSEVDS0JPWF9ET19OT1RfU0hPV19ESUFMT0dfQUdBSU47Ci0gICAgICAKLSAgICAgIC8qQ09OVEVYVF9JRCBUV1AwMDAxIGZvciB0aGUgc2hvdy9oaWRlIGNoZWNrIGJveCovCi0gICAgICBTdHJpbmcgaW5mb3BvcCA9CSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuVFdQMDAwMSI7Ci0gICAgICBTdHJpbmcgdG9vbHRpcCA9IEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLSAgICAgIAotICAgICAgYnV0dG9uLnNldFRleHQoIGxhYmVsICk7Ci0gICAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAgIGJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRPYmplY3RBY3Rpb25EaWFsb2dFbmFibGVkKCBpZF8sIGJ1dHRvbi5nZXRTZWxlY3Rpb24oKSApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgIGJ1dHRvbi5zZXRTZWxlY3Rpb24oIGZhbHNlICk7Ci0gICAgICAKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGJ1dHRvbiwgaW5mb3BvcCApOyAgCQotICAJfQotICAJCi0gIAlyZXR1cm4gY29tcG9zaXRlOwotICB9ICAKLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUyYzJmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvciAKLXsKLSAgICBwcml2YXRlIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBuYW1lXzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgdGl0bGVfOwotCQotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgCi0JewotCQlkZXNjcmlwdGlvbl8gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRGYWN0b3J5KFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5KSAKLQl7Ci0JCWZhY3RvcnlfID0gZmFjdG9yeTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSAKLQl7Ci0JCW5hbWVfID0gbmFtZTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIAotCXsKLQkJdGl0bGVfID0gdGl0bGU7Ci0JfQotCQotCi0JcHVibGljIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSAKLQl7Ci0JCXJldHVybiBmYWN0b3J5XzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSAKLQl7Ci0JCXJldHVybiBuYW1lXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgCi0JewotCQlyZXR1cm4gZGVzY3JpcHRpb25fOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSAKLQl7Ci0JCXJldHVybiB0aXRsZV87Ci0JfQotCi0JLyoqCi0JICogU3Vic2NsYXNzZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0JewotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldERhdGFDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldERhdGFDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjgwNmExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGNsYXNzIHRoYXQgY29uY3JldGUgCi0gKiBXaWRnZXREYXRhQ29udHJpYnV0b3JzIGNhbiBzdWJjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNhZGRDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyKQotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNnZXRTdGF0dXMoKQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50cyNleHRlcm5hbGl6ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBleHRlcm5hbGl6ZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHMjaW50ZXJuYWxpemUoKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXRSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNmZhZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVdpZGdldFJlZ2lzdHJ5IGltcGxlbWVudHMgV2lkZ2V0UmVnaXN0cnkKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmcgZnJhZ21lbnRJZCwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhZ2VUaXRsZSwKLSAgICAgICAgICAgICAgICAgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApCi0gIHsKLSAgCVBhZ2VJbmZvIGVudHJ5ID0gbmV3IFBhZ2VJbmZvKCBwYWdlTmFtZSwgcGFnZVRpdGxlLCB3aWRnZXRGYWN0b3J5ICk7Ci0gIAl0YWJsZV8ucHV0KCBmcmFnbWVudElkLCBlbnRyeSApOwotICB9ICAgICAgICAgICAgICAgICAgIAotICAKLSAgcHVibGljIFBhZ2VJbmZvIGdldFBhZ2VJbmZvKCBTdHJpbmcgZnJhZ21lbnRJZCApCi0gIHsKLSAgICByZXR1cm4gKFBhZ2VJbmZvKXRhYmxlXy5nZXQoIGZyYWdtZW50SWQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaXphcmRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjU5NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzMxICAgMTIwMzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBGaWVsZHMgbm90IHZpc2libGUgaW4gTGFyZ2UgZm9udCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2l6YXJkUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBQYWdlV2l6YXJkRGF0YUV2ZW50cwotewotICBwcml2YXRlICAgV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0XzsKLSAgcHJpdmF0ZSAgIFdpZGdldERhdGFFdmVudHMgIGRhdGFFdmVudHNfOwotICBwcml2YXRlICAgTGlzdGVuZXIgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOwotICAJCi0gIHB1YmxpYyBTaW1wbGVXaXphcmRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIgKQotICB7Ci0gIAlzdXBlciggIiIgKTsKLSAgCQotICAJc2V0VGl0bGUoIHBhZ2VJbmZvLmdldFBhZ2VOYW1lKCkgKTsKLSAgCXNldERlc2NyaXB0aW9uKCBwYWdlSW5mby5nZXRQYWdlVGl0bGUoKSk7Ci0gIAkgIAotICAJd2lkZ2V0XyAgICAgICAgID0gcGFnZUluZm8uZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZSgpOwotICAJc3RhdHVzTGlzdGVuZXJfID0gbmV3IFN0YXR1c0xpc3RlbmVyKCk7Ci0gIAlwYWdlTWFuYWdlcl8gICAgPSBwYWdlTWFuYWdlcjsKLSAgfSAJICAKLSAgCQotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKCBDb21wb3NpdGUgcGFyZW50ICkgCi0gIHsJICAKLQlTY3JvbGxlZENvbXBvc2l0ZSBjb250cm9sID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKCBwYXJlbnQsIFNXVC5WX1NDUk9MTCApOwkKLQlDb21wb3NpdGUgaW5uZXIgPSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woY29udHJvbCk7Ci0JCi0JY29udHJvbC5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOwotICAJY29udHJvbC5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKLQljb250cm9sLnNldENvbnRlbnQoaW5uZXIpOyAgCQotICAgIGNvbnRyb2wuc2V0TWluU2l6ZShpbm5lci5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsJCi0JCi0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KGNvbnRyb2wpOwotICAgIHNldENvbnRyb2woIGNvbnRyb2wgKTsKLSAgfQotCQotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGludGVybmFsQ3JlYXRlQ29udHJvbCggQ29tcG9zaXRlIHBhcmVudCApIHsKLQotCUNvbXBvc2l0ZSBjb250cm9sID0gbmV3IENvbXBvc2l0ZSggcGFyZW50LCBTV1QuTk9ORSApOwotCWNvbnRyb2wuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCgpICk7Ci0gIAljb250cm9sLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9CT1RIICkpOwotCQotCWRhdGFFdmVudHNfID0gd2lkZ2V0Xy5hZGRDb250cm9scyggY29udHJvbCwgc3RhdHVzTGlzdGVuZXJfICk7CQotCQotCXJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBnZXREYXRhRXZlbnRzKCkKLSAgewotICAgIHJldHVybiBkYXRhRXZlbnRzXzsKLSAgfQotICAJICAKLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgID0gd2lkZ2V0Xy5nZXRTdGF0dXMoKTsKLSAgICAKLSAgICBpZiggc3RhdHVzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIGlmKCBtZXNzYWdlLmxlbmd0aCgpID09IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCBudWxsICk7Ci0gICAgICAgICAgc2V0TWVzc2FnZSggZ2V0RGVzY3JpcHRpb24oKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHNldEVycm9yTWVzc2FnZSggbWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggZmFsc2UgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORyApCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKHN0YXR1cy5nZXRNZXNzYWdlKCksIElTdGF0dXMuV0FSTklORyApOwotICAgICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuSU5GTyApCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKCBzdGF0dXMuZ2V0TWVzc2FnZSgpLCBJU3RhdHVzLklORk8gKTsKLSAgICAgICAgc2V0UGFnZUNvbXBsZXRlKCB0cnVlICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKCBnZXREZXNjcmlwdGlvbigpICk7Ci0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggdHJ1ZSApOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RXJyb3JNZXNzYWdlKCBudWxsICk7Ci0gICAgICBzZXRNZXNzYWdlKCBnZXREZXNjcmlwdGlvbigpICk7Ci0gICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIGNhbkZsaXBUb05leHRQYWdlKCkgCi0gIHsKLQlyZXR1cm4gaXNQYWdlQ29tcGxldGUoKSAmJiBwYWdlTWFuYWdlcl8uaGFzTmV4dFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSgpIAotICB7Ci0JcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXROZXh0UGFnZSgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmFsdWUpIAotICB7Ci0gIAlwYWdlTWFuYWdlcl8uaGFuZGxlUGFnZVZpc2libGUoIHRoaXMsIHZhbHVlICk7Ci0gIAkKLSAgICBzdXBlci5zZXRWaXNpYmxlKHZhbHVlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBTdGF0dXNMaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyCi0gIHsKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudCggRXZlbnQgZXZ0ICkgCi0JewotICAgICAgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLQl9Ci0gIH0KLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyZjdjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0KLXB1YmxpYyBjbGFzcyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciAKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICB3aWRnZXRDb250cmlidXRvcl87Ci0gIHByaXZhdGUgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZ187Ci0gIAotICBwdWJsaWMgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIoIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgKQotICB7Ci0gICAgd2lkZ2V0Q29udHJpYnV0b3JfID0gbmV3IEhhc2h0YWJsZSgpOyAKLQliaW5kaW5nXyAgICAgICAgICAgPSBiaW5kaW5nOwotCQotCWJpbmRpbmcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyggbmV3IE15V2lkZ2V0UmVnaXN0cnkoKSApOwotICB9Ci0gIAotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0V2lkZ2V0KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgcmV0dXJuIChJTmFtZWRXaWRnZXRDb250cmlidXRvcil3aWRnZXRDb250cmlidXRvcl8uZ2V0KCBpZCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICAgIGJpbmRpbmdfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCByZWdpc3RyeSApOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgTXlXaWRnZXRSZWdpc3RyeSBpbXBsZW1lbnRzIFdpZGdldFJlZ2lzdHJ5Ci0gIHsKLQlwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIGZyYWdtZW50SWQsIFN0cmluZyBwYWdlTmFtZSwgU3RyaW5nIHBhZ2VUaXRsZSwgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnkpIAotCXsKLQkgIFNpbXBsZVdpZGdldENvbnRyaWJ1dG9yIHdpZGdldCA9IG5ldyBTaW1wbGVXaWRnZXRDb250cmlidXRvcigpOwotCSAgd2lkZ2V0LnNldFRpdGxlKCBwYWdlTmFtZSApOwotCSAgd2lkZ2V0LnNldERlc2NyaXB0aW9uKCBwYWdlVGl0bGUgKTsKLQkgIHdpZGdldC5zZXRGYWN0b3J5KCBuZXcgTXlXaWRnZXRDb250cmlidXRvckZhY3RvcnkoIHdpZGdldEZhY3RvcnkgKSApOwotCSAgCi0JICB3aWRnZXRDb250cmlidXRvcl8ucHV0KCBmcmFnbWVudElkLCB3aWRnZXQgKTsKLQl9CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgTXlXaWRnZXRDb250cmlidXRvckZhY3RvcnkgaW1wbGVtZW50cyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkKLSAgewotCXByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnlfOwotCXByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgIHdpZGdldF87Ci0JCi0JcHVibGljIE15V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSApCi0JewotCSAgZmFjdG9yeV8gPSBmYWN0b3J5OwkKLQl9Ci0JCi0JcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIAotCXsKLSAgICAgIGlmKCB3aWRnZXRfID09IG51bGwgKQotCSAgewotCSAgICB3aWRnZXRfID0gZmFjdG9yeV8uY3JlYXRlKCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiB3aWRnZXRfOwotCX0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4YWZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IGZvciBkZXZlbG9wZXJzIHRvIGNyZWF0ZSB2YWxpZGF0YWJsZSB3aWRnZXRzCi0gKiB0aGF0IGNhbiBiZSB1c2VkIGluIG1hbnkgZGlmZmVyZW50IEVjbGlwc2UgVUkgY29udGV4dHMuIChpZS4gaW4gYSBXaW5kb3dzLCBEaWFnbG9ncywKLSAqIHdpemFyZCBwYWdlcywgZXRjKQotICoKLSAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgdGhpcyBpbnRlcmZhY2UgaGFzIG92ZXIganVzdCBhIHJlZ3VsYXIgRWNsaXBzZSBDb21wb3NpdGUKLSAqIGlzIHRoYXQgaXQgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHZhbGlkYXRpbmcgdGhlIFdpZGdldC4gIFdoZW4gdmFsaWRhdGluZwotICogdGhlcmUgYXJlIHR3byBhc3BlY3RzIHRvIGtlZXAgaW4gbWluZC4gIFRoZSBmaXJzdCBhc3BlY3QgZGVhbHMgd2l0aCBXSEVOIHZhbGlkYXRpb24KLSAqIG9jY3VycyBhbmQgdGhlIHNlY29uZCBhc3BlY3QgZGVhbHMgd2l0aCBXSEFUIHRvIGRvIGZvciBhIHZhbGlkYXRpb24gZXZlbnQuCi0gKiAKLSAqIFRoZSBmaXJzdCBhc3BlY3Qgb2YgdHJpZ2dlcmluZyB2YWxpZGF0aW9uIGV2ZW50cyBpcyBoYW5kbGVkIGJ5IHRoZSBzdGF0dXNMaXN0ZW5lcgotICogcGFyYW1ldGVyIG9mIHRoZSBhZGRDb250cm9scyBtZXRob2QuICBJZiBhIHBhcnRpY3VsYXIgY29udHJvbCB0aGF0IGlzIGNvbnRyaWJ1dGVkIGNhbgotICogYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIHRoZW4gdGhlIHN0YXR1c0xpc3RlbmVyIG9iamVjdAotICogc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0ZW5lciBsaXN0IG9mIHRoYXQgY29udHJvbC4gIEZvciBleGFtcGxlLCBpZiB0aGUgdGV4dCBpbgotICogYSBUZXh0IHdpZGdldCBjYW4gYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIHRoZW4geW91IHdvdWxkCi0gKiBhZGQgdGhlIHN0YXR1c0xpc3RlbmVyIHRvIHRoZSBUZXh0IHdpZGdldHMgTW9kaWZ5IGxpc3RlbmVyIGxpc3Q6Ci0gKiAKLSAqIAotICogICBUZXh0IHNvbWVUZXh0ID0gbmV3IFRleHQoIHBhcmVudCwgU1dULk5PTkUgKTsKLSAqICAgc29tZVRleHQuYWRkTGlzdGVuZXIoIFNXVC5Nb2RpZnksIHN0YXR1c0xpc3RlbmVyICk7Ci0gKiAKLSAqIE5vdGU6IGlmIHlvdSB3YW50IHRvIGZvcmNlIHZhbGlkYXRpb24gb2YgdGhpcyB3aWRnZXQgeW91IGNhbiBjYWxsCi0gKiAgICAgICB0aGUgc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQobnVsbCkgbWV0aG9kIGRpcmVjdGx5LiAgVGhpcwotICogICAgICAgaXMgbm90IHRoZSBwcmVmZXJlZCBtYXkgdG8gdHJpZ2dlciB2YWxpZGF0aW9uLCBob3dldmVyLgotICogICAgICAgCi0gKiBUaGUgc2Vjb25kIGFzcGVjdCBvZiB2YWxpYXRpb24gaXMgd2hhdCB0byBkbyB3aGVuIHRoZSB2YWxpZGF0aW9uIGV2ZW50IG9jY3Vycy4KLSAqIFRoaXMgaXMgaGFuZGxlZCBieSBnZXRTdGF0dXMgbWV0aG9kLiAgQW55IGNvZGUgdGhhdCBlbnN1cmVzIHRoYXQgdGhpcyB3aWRnZXQgaXMKLSAqIHZhbGlkIHNob3VsZCBiZSBwdXQgaW4gdGhlIGdldFN0YXR1cyBpbXBsZW1lbnRhdGlvbi4gCi0gKiAKLSAqIAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQgdGhlIFVJIGNvbnRyaWJ1dGlvbnMgZm9yIHRoaXMgd2lkZ2V0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudCBUaGUgY29tcG9zaXRlIHBhcmVudCB0aGF0IHN1YiB3aWRnZXRzIHNob3VsZCB1c2UuCi0gICAqIEBwYXJhbSBzdGF0dXNMaXN0ZW5lciBUaGlzIGxpc3RlbmVyIHNob3VsZCBiZSBhZGRlZCB0byBhbnkgd2lkZ2V0IHRoYXQgY2FuCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFdpZGdldERhdGFFdmVudHMgb2JqZWN0LiAgVGhpcyBvYmplY3QgaXMgdXNlZCBieSB0aGUKLSAgICogICAgICAgICBmcmFtZXdvcmsgdG8gaW50ZXJuYWxpemUgYW5kIGV4dGVybmFsaXplIGRhdGEgZm9yIHRoaXMgd2lkZ2V0LgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0aW9uIGNvZGUgZm9yIHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzdGF0dXMgb2JqZWN0IGluZGljYXRpbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgd2lkZ2V0LgotICAgKiAgICAgICAgIElmIHRoZSBzdGF0dXMgc2V2ZXJpdHkgaXMgRVJST1IgdGhlbiB0aGlzIHdpZGdldCBpcyBjb25zaWRlcmVkIHRvCi0gICAqICAgICAgICAgYmUgaW52YWxpZC4gIEZvciBhbnkgb3RoZXIgc3RhdHVzIHNldmVyaXR5IG9yIGlmIHRoZSBzdGF0dXMgcmV0dXJuZWQKLSAgICogICAgICAgICBpcyBudWxsIHRoaXMgd2lkZ2V0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3ZWZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZSBhIHdheSBmb3IgY3JlYXRpbmcgV2lkZ2V0Q29udHJpYnV0b3JzCi0gKgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MWFjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgV2lkZ2V0Q29udHJpYnV0b3IgaW50ZXJmYWNlIGFuZAotICogdGhlIFdpZGdldERhdGFFdmVudHMgaW50ZXJmYWNlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXREYXRhQ29udHJpYnV0b3IgZXh0ZW5kcyBXaWRnZXRDb250cmlidXRvciwgV2lkZ2V0RGF0YUV2ZW50cyAKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhRXZlbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDFkOWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhRXZlbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgZm9yIGludGVybmFsaXppbmcgYW5kIGV4dGVybmFsaXppbmcgc3RhdGUKLSAqIGRhdGEgaW4gYSBXaWRnZXRDb250cmlidXRvci4gIFRoZSBpbnRlcm5hbGl6ZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQKLSAqIGJlZm9yZSB0aGUgd2lkZ2V0IGlzIGRpc3BsYXllZCBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIGRlZmF1bHQgZGF0YQotICogZm9yIHRoYXQgd2lkZ2V0LiAgVGhlIGV4dGVybmFsaXplIG1ldGhvZCBwcm92aWRlcyBhIHdheSBvZiBnZXR0aW5nIGRhdGEKLSAqIGZyb20gdGhlIHdpZGdldCBhZnRlciBpdCBpcyBkaXNwbGF5ZWQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdpZGdldERhdGFFdmVudHMgCi17Ci0gIC8qKgotICAgKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHNldCB3aWRnZXQgc3RhdGUgZGF0YSBoZXJlLgotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKTsKLSAgCi0gIC8qKgotICAgKiBJbXBsZW1lbmF0aW9ucyBzaG91bGQgZ2V0IHdpZGdldCBzdGF0ZSBkYXRhIGhlcmUuCi0gICAqCi0gICAqLwotICBwdWJsaWMgdm9pZCBleHRlcm5hbGl6ZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTFiMThmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgaG93IFdpZGdldENvbnRyaWJ1dG9ycyBhcmUgbWFkZSBrbm93biB0byB0aGUKLSAqIGR5bmFtaWMgd2l6YXJkIGZyYW1ld29yay4gIFRoaXMgd2lkZ2V0IHdpbGwgYmUgZGlzcGxheWVkIGFzIGEgd2l6YXJkIHBhZ2UKLSAqIHdpdGggdGhlIG5hbWUgYW5kIHRpdGxlIHNwZWNpZmllZCBpbiB0aGUgYWRkIG1ldGhvZC4gIFRoZSBmcmFnbWVudElkIGlzIAotICogdXNlZCB0byBhc3NvY2lhdGUgdGhpcyB3aWRnZXQgd2l0aCBhIHBhcnRpY3VsYXIgQ29tbWFuZEZyYWdtZW50LiAgV2hlbgotICogYSBDb21tYW5kRnJhZ21lbnQgd2l0aCB0aGlzIGZyYWdtZW50SWQgaXMgdHJhdmVyc2VkIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBXaWRnZXRDb250cmlidXRvciB3aWxsIGJlIGRpc3BsYXllZC4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0UmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIEFkZHMgYSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgdG8gdGhlIGZyYW1ld29yay4gIFRoaXMgZmFjdG9yeQotICAgKiBpcyB1c2VkIHRvIGdldCB0aGUgV2lkZ2V0Q29udHJpYnV0b3IuICBUaGlzIFdpZGdldENvbnRyaWJ1dG9yCi0gICAqIHdpbGwgYmUgdXNlZCB0byByZW5kZXIgdGhlIHdpemFyZCBwYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGZyYWdtZW50SWQgdGhlIENvbW1hbmRGcmFnbWVudCBpZCB0aGF0IHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IgaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgKiBAcGFyYW0gcGFnZU5hbWUgdGhlIG5hbWUgb2YgdGhpcyB3aXphcmQgcGFnZS4KLSAgICogQHBhcmFtIHBhZ2VUaXRsZSB0aGUgdGl0bGUgb2YgdGhpcyB3aXphcmQgcGFnZS4KLSAgICogQHBhcmFtIHdpZGdldEZhY3RvcnkgdGhlIGZhY3Rvcnkgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmcgZnJhZ21lbnRJZCwKLQkJCQkgICBTdHJpbmcgcGFnZU5hbWUsCi0JCQkJICAgU3RyaW5nIHBhZ2VUaXRsZSwKLQkJCQkgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YjY2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotLyoqCi0gKiAKLSAqCi0gKgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaXphcmRQYWdlRmFjdG9yeSAKLXsKLSAgcHVibGljIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIFBhZ2VJbmZvIHBhZ2VJbmZvLCBXaXphcmRQYWdlTWFuYWdlciBtYW5hZ2VyICk7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4ZWQ3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjMgICAxMjkyMzIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTkgICAxNzU3MjEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMjggICAxNzMzNDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGVlayBuZXh0IHBhZ2UgcHJvYmxlbQotICogMjAwNzA3MzAgICAxOTcxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGFzcyBwcm9ncmVzcyBtb25pdG9yIHRvIHVuZG8gY29tbWFuZHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeS5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotCi1wdWJsaWMgY2xhc3MgV2l6YXJkUGFnZU1hbmFnZXIgZXh0ZW5kcyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcgotewotICBwcml2YXRlICAgV2l6YXJkUGFnZUZhY3RvcnkgICAgICBwYWdlRmFjdG9yeV87Ci0gIHByaXZhdGUgICBIYXNodGFibGUgICAgICAgICAgICAgIHBhZ2VUYWJsZV87Ci0gIHByaXZhdGUgICBJV2l6YXJkICAgICAgICAgICAgICAgIHdpemFyZF87Ci0gIHByb3RlY3RlZCBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgIHJlZ2lzdHJ5XzsKLSAgCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBhbmQgc2V0IGJ5IG91ciBtZXRob2RzIHdoaWNoIGlzCi0gIC8vIHdoeSB0aGV5IGFyZSBub3QgaW5pdGlhbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGN1cnJlbnRQYWdlXzsKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBuZXh0UGFnZV87Ci0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgbmV4dFBlZWtQYWdlXzsKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBmaXJzdFBhZ2VfOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCAgICAgIGxhc3RVbmRvRnJhZ21lbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIGZpcnN0RnJhZ21lbnRfOwotICAKLSAgcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeV87Ci0gIHByaXZhdGUgU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YWNrXzsKLSAgcHJpdmF0ZSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhY2tTdGFja187Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFRhYmxlXzsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgICAgICAgICAgICAgd2lkZ2V0UmVnaXN0cnlfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRGYWN0b3J5VGFibGVfOwotICAgIAotICBwdWJsaWMgV2l6YXJkUGFnZU1hbmFnZXIoIFNpbXBsZVdpZGdldFJlZ2lzdHJ5ICByZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXphcmRQYWdlRmFjdG9yeSAgICAgcGFnZUZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZCAgICAgICAgICAgICAgIHdpemFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhRmxvd01hbmFnZXIgICAgICAgZGF0YU1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZUVudmlyb25tZW50ICAgIGVudmlyb25tZW50ICkKLSAgeyAKLSAgICBzdXBlciggZW52aXJvbm1lbnQsIGRhdGFNYW5hZ2VyICk7ICAKLSAgICAKLSAgCXBhZ2VGYWN0b3J5XyAgICAgICAgPSBwYWdlRmFjdG9yeTsKLSAgCXBhZ2VUYWJsZV8gICAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7ICAKLSAgCXJlZ2lzdHJ5XyAgICAgICAgICAgPSByZWdpc3RyeTsKLSAgCXdpemFyZF8gICAgICAgICAgICAgPSB3aXphcmQ7Ci0JICB3aWRnZXRUYWJsZV8gICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgd2lkZ2V0RmFjdG9yeVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLQkgIHdpZGdldFJlZ2lzdHJ5XyAgICAgPSBXaWRnZXRSZWdpc3RyeS5pbnN0YW5jZSgpOwotCSAgd2lkZ2V0U3RhY2tTdGFja18gICA9IG5ldyBTdGFjaygpOwotICB9Ci0gIAotICBwdWJsaWMgIElXaXphcmRQYWdlIGdldFN0YXJ0aW5nUGFnZSgpCi0gIHsKLSAgICBpZiggZmlyc3RQYWdlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmaXJzdFBhZ2VfID0gKFBhZ2VXaXphcmREYXRhRXZlbnRzKWdldE5leHRQYWdlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdFBhZ2VfOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBydW5Gb3J3YXJkVG9OZXh0U3RvcCgpCi0gIHsgICAgCi0gIAlmaXJzdEZyYWdtZW50XyAgPSB0cnVlOwotICAJbmV4dFBhZ2VfICAgICAgID0gbnVsbDsKLSAgIAkKLSAgCXJldHVybiBzdXBlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggZ2V0Q29udGFpbmVyKCkgKTsKLSAgfQotICAgIAotICBwcml2YXRlIElXaXphcmRDb250YWluZXIgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIElXaXphcmRDb250YWluZXIgY29udGFpbmVyID0gd2l6YXJkXy5nZXRDb250YWluZXIoKTsKLSAgICAKLSAgICBpZiggY29udGFpbmVyID09IG51bGwgfHwgY29udGFpbmVyLmdldEN1cnJlbnRQYWdlKCkgPT0gbnVsbCApCi0gICAgewotICAgICAgY29udGFpbmVyID0gbnVsbDsKLSAgICB9ICAgCi0gICAgCi0gICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldEN1cnJlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjdXJyZW50UGFnZV87Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gaGFzTmV4dFBhZ2UoKQotICB7CQotCSAKLSAgICBuZXh0UGVla1BhZ2VfID0gbnVsbDsKLSAgICAKLQl0cnkKLQl7Ci0gIAluZXh0UGVla1BhZ2VfID0gZ2V0TmV4dFBhZ2VJbkdyb3VwKCB3aWRnZXRGYWN0b3J5Xywgd2lkZ2V0U3RhY2tfLCBmYWxzZSApOwotCQkKLQkgIGlmKCBuZXh0UGVla1BhZ2VfID09IG51bGwgKQotCSAgewotCSAgICAvLyBJZiBhIHBhZ2UgaXMgZm91bmQgbmV4dFBhZ2VfIHdpbGwgYmUgc2V0IHRvIGl0cyB2YWx1ZSBpbiB0aGUgbWV0aG9kIGJlbG93LgotICAJICAgIGVuZ2luZV8ucGVla0ZvcndhcmRUb05leHRTdG9wKCk7Ci0JICB9Ci0JfQotCWNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQl7Ci0JICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotICAJCi0gICAgcmV0dXJuIG5leHRQZWVrUGFnZV8gIT0gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldE5leHRQYWdlKCkKLSAgeyAgCQotCXRyeQotCXsgICAgCi0gIAkvLyBOZWVkIHRvIGV4dGVybmFsaXplIHRoZSBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlIHNvIHRoYXQKLSAgCS8vIHdoZW4gd2UgbW92ZSBmb3J3YXJkIGJlbG93IHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KLSAgCWlmKCBjdXJyZW50UGFnZV8gIT0gbnVsbCApIGN1cnJlbnRQYWdlXy5nZXREYXRhRXZlbnRzKCkuZXh0ZXJuYWxpemUoKTsKLSAgCQotICAgIGlmKCBlbnZpcm9ubWVudF8uZ2V0TG9nKCkuaXNFbmFibGVkKCkgKQotICAgIHsKLSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfZHRfY21kX2VuZ2luZSIsIDUwMTAsIHRoaXMsICJDbWQgc3RhY2sgZHVtcDoiLCBlbmdpbmVfICk7Ci0gICAgfQotICAgIAotCSAgbmV4dFBhZ2VfID0gZ2V0TmV4dFBhZ2VJbkdyb3VwKCB3aWRnZXRGYWN0b3J5Xywgd2lkZ2V0U3RhY2tfLCB0cnVlICk7Ci0JCi0JICBpZiggbmV4dFBhZ2VfID09IG51bGwgKQotCSAgewotCSAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0JICAgIHdpZGdldFN0YWNrXyAgID0gbnVsbDsKLQkJCi0gIAkgIElTdGF0dXMgc3RhdHVzID0gcnVuRm9yd2FyZFRvTmV4dFN0b3AoKTsKLSAgCQotICAJICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gIAkgIHsKLSAgCSAgICAvLyBBbiBlcnJvciBoYXMgb2NjdXJlZCBzbyB3ZSBuZWVkIHVuZG8gdG8gdGhlIHByZXZpb3VzIHN0b3AgcG9pbnQuCi0gIAkgICAgdW5kb1RvTGFzdFBhZ2UoKTsKLSAgCSAgfQotCSAgfQotCQotICAJaWYoIG5leHRQYWdlXyAhPSBudWxsICkgbmV4dFBhZ2VfLnNldFdpemFyZCggd2l6YXJkXyApOwotICAJICAJCi0gIAlyZXR1cm4gbmV4dFBhZ2VfOwotCX0KLQljYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JewotCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwkKLQl9Ci0JCi0JcmV0dXJuIG51bGw7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgaGFuZGxlUGFnZVZpc2libGUoIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UsIGJvb2xlYW4gaXNQYWdlVmlzaWJsZSApCi0gIHsKLSAgICBpZiggIWlzUGFnZVZpc2libGUgJiYgcGFnZSA9PSBmaXJzdFBhZ2VfICYmIHBhZ2UgPT0gY3VycmVudFBhZ2VfICkKLSAgICB7Ci0gICAgICAvLyBXZSBhcmUgbW92aW5nIGJhY2sgb25lIHBhZ2UgZnJvbSB0aGUgZmlyc3QgcGFnZS4gIFRoaXMgY2FuJ3QgaGFwcGVuIHdpdGggcG9wdXAgd2l6YXJkcwotICAgICAgLy8gc2luY2UgdGhlIHByZXZpb3VzIGJ1dHRvbiB3b3VsZCBiZSBncmV5ZWQgb3V0LiAgQnV0IHdoZW4gdGhlIG5ldyB3aXphcmQgbGF1bmNoZXMgdGhpcyB3aXphcmQKLSAgICAgIC8vIHRoZSBwcmV2aW91cyBidXR0b24gaXMgbm90IGdyZXllZCBvdXQgYW5kIGJyaW5ncyB0aGUgdXNlciBiYWNrIHRvIHRoZSBsaXN0IHdpemFyZHMgdG8gc2VsZWN0LgotICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBtdXN0IHVud2luZCB0aGUgY29tbWFuZCBlbmdpbmUgYW5kIGdldCByZWFkeSBmb3IgdGhlIHVzZXIgdG8gaW52b2tlIHRoaXMgd2l6YXJkIAotICAgICAgLy8gYWdhaW4uICBXZSBhcmUgYXNzdW1pbmcgaGVyZSB0aGF0IHRoZSBmaXJzdCBwYWdlIGlzIG5ldmVyIHBhcnQgb2YgYSB3aWRnZXQgZ3JvdXAhCi0gIAkgIHVuZG9Ub0xhc3RQYWdlKCk7CSAgCi0gICAgICBjdXJyZW50UGFnZV8gPSBudWxsOwotICAgICAgZmlyc3RQYWdlXyAgID0gbnVsbDsKLSAgICB9Ci0gIAlpZiggY3VycmVudFBhZ2VfICE9IG51bGwgJiYgcGFnZSA9PSBjdXJyZW50UGFnZV8uZ2V0UHJldmlvdXNQYWdlKCkgJiYgaXNQYWdlVmlzaWJsZSApCi0gIAl7Ci0gIAkgIC8vIFdlIGFyZSBtb3ZpbmcgYmFjayBvbmUgcGFnZS4KLSAgCSAgLy8gTm90ZTogd2UgZG9uJ3QgaW50ZXJuYWxpemUgdGhlIHByZXZpb3VzIHBhZ2UgYW5kIHdlIGRvIG5vdCBleHRlcm5hbGl6ZSB0aGUgY3VycmVudCBwYWdlLgotICAJICAvLyAgICAgICB3ZSBhcmUgYmFzaWNhbGx5IGp1c3QgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlIHdpdGhvdXQgcmV0cmlldmluZyBpdHMgc3RhdGUgYW5kCi0gIAkgIC8vICAgICAgIG1vdmluZyB0byB0aGUgcHJldmlvdXMgcGFnZSB3aGljaCBhbHJlYWR5IGhhcyBpdHMgc3RhdGUgc2V0LgotCQotCSAgICBpZiggd2lkZ2V0RmFjdG9yeV8gIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIGlmKCB3aWRnZXRTdGFja18uc2l6ZSgpID4gMCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldFN0YWNrXy5wb3AoKTsKLQkJICAgIH0KLQkJCi0JCSAgICBpZiggd2lkZ2V0U3RhY2tfLnNpemUoKSA9PSAwICkKLQkJICAgIHsKLQkJICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBudWxsOwotCQkgICAgICB3aWRnZXRTdGFja18gPSBudWxsOwotCQkgICAgICB3aWRnZXRTdGFja1N0YWNrXy5wb3AoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgCi0JICAgIGlmKCB3aWRnZXRGYWN0b3J5XyA9PSBudWxsICkKLQkgICAgewotICAJICAgIHVuZG9Ub0xhc3RQYWdlKCk7Ci0JICAgIH0KLQkgIAotICAgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmluZyBiYWNrd2FyZHMgd2UgbmVlZCB0byByZW1vdmUgdGhlCi0gICAgICAvLyBjdXJyZW50IHBhZ2Ugb2JqZWN0IGZyb20gdGhlIG1hcHBpbmcgdGFibGUuCi0gICAgICBkYXRhTWFuYWdlcl8udW5wcm9jZXNzKCBjdXJyZW50UGFnZV8uZ2V0RGF0YUV2ZW50cygpICk7Ci0gICAgICAKLSAgCSAgY3VycmVudFBhZ2VfID0gcGFnZTsKLSAgCX0JCi0gIAllbHNlIGlmKCBpc1BhZ2VWaXNpYmxlICkKLSAgCXsKLQkgICAgdHJ5Ci0JICAgIHsKLSAgCSAgICAvLyBXZSBhcmUgbW92aW5nIGZvcndhcmQgb25lIHBhZ2UuCi0gIAkgICAgV2lkZ2V0RGF0YUV2ZW50cyBkYXRhRXZlbnRzID0gcGFnZS5nZXREYXRhRXZlbnRzKCk7Ci0gIAkgIAotICAJICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBkYXRhRXZlbnRzICk7ICAvLyBQdXNoIG1vZGVsIGRhdGEgaW50byB0aGUgbmV3IHBhZ2UuCi0gIAkgICAgZGF0YUV2ZW50cy5pbnRlcm5hbGl6ZSgpOwotICAJICAKLSAgCSAgICBwYWdlLnZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7ICAJICAKLQkgICAgfQotCSAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JICAgIHsKLQkJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICBmaW5hbGx5Ci0JICAgIHsKLQkgIAkgIGlmKCBjdXJyZW50UGFnZV8gIT0gbnVsbCApIHBhZ2Uuc2V0UHJldmlvdXNQYWdlKCBjdXJyZW50UGFnZV8gKTsKLQkgICAgCSAgCi0JICAJICBjdXJyZW50UGFnZV8gPSBwYWdlOyAgCi0JICAgIH0KLSAgCX0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpCi0gIHsgCQotICAJLy8gV2UgbmVlZCB0byBzaW11bGF0ZSB0aGUgbmV4dCBidXR0b24gYmVpbmcgcHJlc3NlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBwYWdlcy4KLSAgCS8vIElmIGFuIGVycm9yIG9jY3VycyB3ZSB3aWxsIHJldHVybiBmYWxzZSBhbmQgcmVzZXQgdGhlIGNvbW1hbmQgc3RhY2sgYmFjayBvdXIgb3JpZ2luYWwgc3RhdGUuCi0gIAlib29sZWFuICAgICAgICAgICAgICBkb25lT2sgICAgICAgICA9IHRydWU7Ci0gIAlQYWdlV2l6YXJkRGF0YUV2ZW50cyBzdGFydFBhZ2UgICAgICA9IGN1cnJlbnRQYWdlXzsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBzdGFja1N0YWNrU2l6ZSA9IHdpZGdldFN0YWNrU3RhY2tfLnNpemUoKTsKLSAgICAKLSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgY3VycmVudEZhY3RvcnkgPSB3aWRnZXRGYWN0b3J5XzsKLSAgCQotICAJLy8gRXh0ZXJuYWxpemUgdGhlIGN1cnJlbnQgcGFnZS4KLSAgCWN1cnJlbnRQYWdlXy5nZXREYXRhRXZlbnRzKCkuZXh0ZXJuYWxpemUoKTsKLSAgCQotICAJLy8gTG9vcCB0aHJvdWdoIHN1YnNlcXVlbnQgcGFnZXMuCi0gIAlkbwotICAJeyAgCSAgCi0gIAkgIElTdGF0dXMgc3RhdHVzID0gcnVuRm9yd2FyZFRvTmV4dFN0b3AoKTsJICAKLSAgCSAgCi0gIAkgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgCSAgewotICAJICAJLy8gQW4gZXJyb3Igb2NjdXJlZCBpbiBvbmUgb2YgdGhlIGNvbW1hbmRzLgotICAJICAJZG9uZU9rID0gZmFsc2U7Ci0gIAkgIH0KLSAgCX0KLSAgCXdoaWxlKCBuZXh0UGFnZV8gIT0gbnVsbCAmJiBkb25lT2spOwotICAJCi0gIAlpZiggIWRvbmVPayApCi0gIAl7Ci0gIAkgIC8vIEFuIGVycm9yIG9jY3VyZWQsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBjb21tYW5kIHN0YWNrIHRvIGl0J3MKLSAgCSAgLy8gb3JnaW5hbCBzdGF0ZS4KLSAgCSAgUGFnZVdpemFyZERhdGFFdmVudHMgcGFnZSA9IG51bGw7Ci0gIAkgIGJvb2xlYW4gICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTsKLSAgCSAgCi0gIAkgIGRvCi0gIAkgIHsKLSAgCSAgICBkb25lID0gcnVuVW5kb1RvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0gIAkgICAgcGFnZSA9IGdldFBhZ2UoIGxhc3RVbmRvRnJhZ21lbnRfICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcGFnZSA9PSBudWxsICYmIAotICAgICAgICAgICAgY3VycmVudEZhY3RvcnkgIT0gbnVsbCAmJiAKLSAgICAgICAgICAgIGxhc3RVbmRvRnJhZ21lbnRfICE9IG51bGwgJiYKLSAgICAgICAgICAgIGdldFdpZGdldEZhY3RvcnkoIGxhc3RVbmRvRnJhZ21lbnRfLmdldElkKCkgKSA9PSBjdXJyZW50RmFjdG9yeSApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY3VycmVudCB3aWRnZXQgZmFjdG9yeSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxhc3QgZnJhZ21lbnQgdGhhdCB3YXMgdW5kb25lLgotICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgYXJlIGJhY2sgdG8gd2hlcmUgd2Ugc3RhcnRlZC4KLSAgICAgICAgICBkb25lID0gdHJ1ZTsgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gUmVzdG9yZSB0aGUgd2lkZ2V0U3RhY2tTdGFjayBiYWNrIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYmVmb3JlCi0gICAgICAgICAgLy8gcnVubmluZyBmb3J3YXJkLgotICAgICAgICAgIHdpZGdldFN0YWNrU3RhY2tfLnNldFNpemUoIHN0YWNrU3RhY2tTaXplICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgU3RhY2tFbnRyeSBlbnRyeSA9IChTdGFja0VudHJ5KXdpZGdldFN0YWNrU3RhY2tfLnBlZWsoKTsKLSAgICAgICAgICAKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IGVudHJ5LmZhY3RvcnlfOwotICAgICAgICAgIHdpZGdldFN0YWNrXyAgID0gZW50cnkuc3RhY2tfOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIHBhZ2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0gICAgICAgICAgd2lkZ2V0U3RhY2tfID0gbnVsbDsKLSAgICAgICAgfQotICAJICB9Ci0gIAkgIHdoaWxlKCBwYWdlICE9IHN0YXJ0UGFnZSAmJiAhZG9uZSApOyAJICAKLSAgCX0KLSAgCQotICAJcmV0dXJuIGRvbmVPazsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUNhbmNlbCgpCi0gIHsKLSAgICBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lciA9IGdldENvbnRhaW5lcigpOwotICAgIAotICAJd2hpbGUoICFydW5VbmRvVG9OZXh0U3RvcCggY29udGFpbmVyICkgKXt9Ci0gIAkKLSAgCXJldHVybiB0cnVlOwotICB9Ci0gICAgCi0gIHByb3RlY3RlZCBib29sZWFuIHBlZWtGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgeyAgICAgCQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlzIGluIG91ciBwYWdlIHRhYmxlLgotICAgIG5leHRQZWVrUGFnZV8gPSBnZXRQYWdlKCBmcmFnbWVudCApOwotICAgICAgICAgIAkKLQkgIGlmKCBuZXh0UGVla1BhZ2VfID09IG51bGwgKQotCSAgewotCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSA9IGdldFdpZGdldEZhY3RvcnkoIGZyYWdtZW50LmdldElkKCkgKTsKLQkgIAotCSAgICBpZiggZmFjdG9yeSAhPSBudWxsICkKLQkgICAgewotCQkgICAgbmV4dFBlZWtQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggZmFjdG9yeSwgbnVsbCwgZmFsc2UgKTsgIAotCSAgICB9Ci0JICB9Ci0JCi0gICAgcmV0dXJuIG5leHRQZWVrUGFnZV8gPT0gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gbmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgLy8gSWYgdGhlIHN1cGVyIGNsYXNzIG5leHRGcmFnbWVudCB3YW50IHVzIHRvIHN0b3AgdGhlbiB3ZSB3aWxsIHN0b3AgcmlnaHQgYXdheS4KLSAgICBpZiggIXN1cGVyLm5leHRGcmFnbWVudCggZnJhZ21lbnQgKSApIHJldHVybiBmYWxzZTsKLSAgICAKLSAgCS8vIFRoZSBmaXJzdCBmcmFnbWVudCBpcyBlaXRoZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3aXphcmQKLSAgCS8vIG9yIGl0IGlzIG9uIGEgd2l6YXJkIHBhZ2UuICBJbiBlaXRoZXIgY2FzZSB3ZSBkbyBub3Qgd2FudCAKLSAgCS8vIHRvIHN0b3AgaWYgYSBwYWdlIGlzIGZvdW5kLgotICAJaWYoIGZpcnN0RnJhZ21lbnRfICkKLSAgCXsKLSAgCSAgZmlyc3RGcmFnbWVudF8gPSBmYWxzZTsKLSAgCX0KLSAgCWVsc2UKLSAgCXsKLQkgICAgd2lkZ2V0RmFjdG9yeV8gPSBnZXRXaWRnZXRGYWN0b3J5KCBmcmFnbWVudC5nZXRJZCgpICk7Ci0JICAKLQkgICAgaWYoIHdpZGdldEZhY3RvcnlfICE9IG51bGwgKQotCSAgICB7Ci0JCSAgICB3aWRnZXRTdGFja18gPSBuZXcgU3RhY2soKTsKLSAgICAgICAgCi0gICAgICAgIG5leHRQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggd2lkZ2V0RmFjdG9yeV8sIHdpZGdldFN0YWNrXywgdHJ1ZSApOwotCQkKLSAgICAgICAgaWYoIG5leHRQYWdlXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGZvdW5kIGEgd2lkZ2V0IGNvbnRyaWJ1dG9yIGZvciB0aGlzIGZyYWdtZW50LCBidXQgbm8gcGFnZSB3YXMgZGVsaXZlcmVkIGZvciBpdC4KLSAgICAgICAgICAvLyBXZSB3aWxsIHRoZXJlZm9yZSwgbm90IHB1dCBpdCBvbiBvdXIgc3RhY2sgb2Ygd2lkZ2V0IHN0YWNrcy4KLSAgICAgICAgICB3aWRnZXRTdGFja18gPSBudWxsOwotICAgICAgICAgIHdpZGdldEZhY3RvcnlfID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLQkJICAgICAgU3RhY2tFbnRyeSBlbnRyeSA9IG5ldyBTdGFja0VudHJ5KCk7Ci0JCQotCQkgICAgICBlbnRyeS5mYWN0b3J5XyA9IHdpZGdldEZhY3RvcnlfOwotCQkgICAgICBlbnRyeS5zdGFja18gICA9IHdpZGdldFN0YWNrXzsKLQkJICAgICAgd2lkZ2V0U3RhY2tTdGFja18ucHVzaCggZW50cnkgKTsKLSAgICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotICAJICAgIG5leHRQYWdlXyA9IGdldFBhZ2UoIGZyYWdtZW50ICk7Ci0JICAgIH0KLSAgCX0gIAkgIAkKLSAgCQotICAgIHJldHVybiBuZXh0UGFnZV8gPT0gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kb0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gIAlsYXN0VW5kb0ZyYWdtZW50XyA9IGZyYWdtZW50OwotICAJCi0gIAlyZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0TmV4dFBhZ2VJbkdyb3VwKCBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSwgU3RhY2sgd2lkZ2V0U3RhY2ssIGJvb2xlYW4gcHVzaE5ld1dpZGdldCApCi0gIHsKLQkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSBudWxsOwotCQotCSAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICB7CSAgCi0JICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIG5ld1dpZGdldCA9IG51bGw7Ci0JCSAgCi0JICAgIGlmKCB3aWRnZXRTdGFjayA9PSBudWxsIHx8IHdpZGdldFN0YWNrLnNpemUoKSA9PSAwICkKLQkgICAgewotCQkgICAgbmV3V2lkZ2V0ID0gZmFjdG9yeS5nZXRGaXJzdE5hbWVkV2lkZ2V0KCk7ICAgCi0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBjdXJyZW50V2lkZ2V0ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yKXdpZGdldFN0YWNrLnBlZWsoKTsKLQkJICAgIG5ld1dpZGdldCA9IGZhY3RvcnkuZ2V0TmV4dE5hbWVkV2lkZ2V0KCBjdXJyZW50V2lkZ2V0ICk7IAotCSAgICB9Ci0JCSAgCi0JICAgIGlmKCBuZXdXaWRnZXQgIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIHBhZ2UgPSBnZXRQYWdlKCBuZXdXaWRnZXQgKTsKLQkJCi0JCSAgICBpZiggcHVzaE5ld1dpZGdldCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldFN0YWNrLnB1c2goIG5ld1dpZGdldCApOwotCQkgICAgfQotCSAgICB9Ci0JICB9Ci0JCQotCSAgcmV0dXJuIHBhZ2U7ICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHVuZG9Ub0xhc3RQYWdlKCkKLSAgewotICAgIGJvb2xlYW4gc3RhY2tFbXB0eSAgPSBmYWxzZTsKLQkgIGJvb2xlYW4gZG9uZVVuZG9pbmcgPSBmYWxzZTsKLSAgICAKLQkgIHdoaWxlKCAhZG9uZVVuZG9pbmcgKQotCSAgewotCSAgICBzdGFja0VtcHR5ID0gcnVuVW5kb1RvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0JICAKLQkgICAgSVdpemFyZFBhZ2UgcGFnZSA9IG51bGw7Ci0JICAKLQkgICAgaWYoIGxhc3RVbmRvRnJhZ21lbnRfICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgcGFnZSA9IGdldFBhZ2UoIGxhc3RVbmRvRnJhZ21lbnRfICk7Ci0JCQotCSAgICAgIGlmKCBwYWdlID09IG51bGwgKQotCSAgICAgIHsKLQkJICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGEgZ3JvdXAgcGFnZSBmcmFnbWVudCB3YXMgZm91bmQuCi0JCSAgICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5ID0gZ2V0V2lkZ2V0RmFjdG9yeSggbGFzdFVuZG9GcmFnbWVudF8uZ2V0SWQoKSApOwotCQkgIAotCQkgICAgICBpZiggZmFjdG9yeSAhPSBudWxsICYmICF3aWRnZXRTdGFja1N0YWNrXy5lbXB0eSgpICkKLQkJICAgICAgewotCQkgICAgICAgIFN0YWNrRW50cnkgZW50cnkgPSAoU3RhY2tFbnRyeSl3aWRnZXRTdGFja1N0YWNrXy5wZWVrKCk7Ci0JCQkKLSAgICAgICAgICAgIGlmKCBlbnRyeS5mYWN0b3J5XyA9PSBmYWN0b3J5ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgZm91bmQgdGhlIGZhY3RvcnkgZm9yIHRoZSBlbnRyeSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLQkJICAgICAgICAgIHdpZGdldEZhY3RvcnlfID0gZW50cnkuZmFjdG9yeV87Ci0JCSAgICAgICAgICB3aWRnZXRTdGFja18gICA9IGVudHJ5LnN0YWNrXzsJCi0JCQkKLQkJICAgICAgICAgIGlmKCB3aWRnZXRTdGFja18gIT0gbnVsbCAmJiAhd2lkZ2V0U3RhY2tfLmVtcHR5KCkgKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBjdXJyZW50V2lkZ2V0ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yKXdpZGdldFN0YWNrXy5wZWVrKCk7Ci0JCQkKLQkJICAgICAgICAgICAgcGFnZSA9IGdldFBhZ2UoIGN1cnJlbnRXaWRnZXQgKTsKLQkJICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQkJICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgCi0JICAgIGRvbmVVbmRvaW5nID0gcGFnZSAhPSBudWxsIHx8IHN0YWNrRW1wdHk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlzIGluIG91ciBwYWdlIHRhYmxlLgotICAJUGFnZVdpemFyZERhdGFFdmVudHMgcGFnZSA9IChQYWdlV2l6YXJkRGF0YUV2ZW50cylwYWdlVGFibGVfLmdldCggZnJhZ21lbnQgKTsgCi0gIAlTdHJpbmcgICAgICBpZCAgID0gZnJhZ21lbnQuZ2V0SWQoKTsgICAgICAJCi0gICAgICAgICAgCQotICAgIGlmKCBwYWdlID09IG51bGwgJiYgaWQgIT0gbnVsbCApCi0gICAgewotICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgZnJhZ21lbnQgaWQgaXMgaW4gdGhlIHJlZ2lzdHJ5LgotICAgICAgUGFnZUluZm8gcGFnZUluZm8gPSByZWdpc3RyeV8uZ2V0UGFnZUluZm8oIGlkICk7ICAgICAgICAgIAkgIAotICAgICAgICAgICAgICAKLSAgICAgIGlmKCBwYWdlSW5mbyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgcGFnZSA9IHBhZ2VGYWN0b3J5Xy5nZXRQYWdlKCBwYWdlSW5mbywgdGhpcyApOwotICAgICAgICBwYWdlVGFibGVfLnB1dCggZnJhZ21lbnQsIHBhZ2UgKTsgICAgICAgICAgICAJCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhZ2U7Ci0gIH0gICAgCi0gIAotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldCApCi0gIHsKLQkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSAoUGFnZVdpemFyZERhdGFFdmVudHMpd2lkZ2V0VGFibGVfLmdldCggd2lkZ2V0ICk7Ci0KLQkgIGlmKCBwYWdlID09IG51bGwgKQotCSAgewotCSAgICBQYWdlSW5mbyBwYWdlSW5mbyA9IG5ldyBQYWdlSW5mbyh3aWRnZXQuZ2V0VGl0bGUoKSwgd2lkZ2V0LmdldERlc2NyaXB0aW9uKCksIHdpZGdldC5nZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSApOwotCSAgCi0JICAgIHBhZ2UgPSBwYWdlRmFjdG9yeV8uZ2V0UGFnZSggcGFnZUluZm8sIHRoaXMgKTsKLQkgICAgd2lkZ2V0VGFibGVfLnB1dCggd2lkZ2V0LCBwYWdlICk7Ci0JICB9Ci0JCi0JICByZXR1cm4gcGFnZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0RmFjdG9yeSggU3RyaW5nIGlkICkKLSAgewotCSAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgPSAoSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KXdpZGdldEZhY3RvcnlUYWJsZV8uZ2V0KCBpZCApOwotCQotCSAgaWYoIGZhY3RvcnkgPT0gbnVsbCApCi0JICB7Ci0JICAgIC8vIFRoZSBmYWN0b3J5IGlzIG5vdCBpbiBvdXIgdGFibGUgc28gd2Ugd2lsbCB0cnkgdGhlIHJlZ2lzdHJ5LgotCSAgICBmYWN0b3J5ID0gd2lkZ2V0UmVnaXN0cnlfLmdldEZhY3RvcnkoIGlkICk7Ci0JICAKLQkgICAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICAgIHsKLQkgICAgICB3aWRnZXRGYWN0b3J5VGFibGVfLnB1dCggaWQsIGZhY3RvcnkgKTsKLQkgICAgICBmYWN0b3J5LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkgKTsKLQkJICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBmYWN0b3J5ICk7Ci0JICAgIH0KLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGZhY3RvcnkgKTsKLQkgIH0KLQkKLQkgIHJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFN0YWNrRW50cnkKLSAgewotICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQkgIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9wb3B1cC9EeW5hbWljUG9wdXBXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9wb3B1cC9EeW5hbWljUG9wdXBXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExNzQ4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvcG9wdXAvRHluYW1pY1BvcHVwV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNDE3ICAgMTM2NTk2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzMxICAgMTIwMzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBGaWVsZHMgbm90IHZpc2libGUgaW4gTGFyZ2UgZm9udCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVQb3B1cFBhZ2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpemFyZFBhZ2VGYWN0b3J5OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHBvcHVwIGR5bmFtaWMgd2l6YXJkcy4gIFRoZSBwb3B1cE1lbnVzIGV4dGVuc2lvbiBpcyB1c2VkCi0gKiB0aGUgY29udHJpYnV0ZSBhIHBvcHVwIHRvIEVjbGlwc2UuICBUaGUgY2xhc3MgaW4gdGhlIGFjdGlvbiBlbGVtZW50IHNob3VsZCByZWZlcmVuY2UKLSAqIHRoaXMgRHluYW1pY1BvcHVwV2l6YXJkIGNsYXNzLiAgVGhpcyBpZCBhdHRyaWJ1dGUgaW4gdGhlIGFjdGlvbiBlbGVtZW50IHNob3VsZCBjb250YWluCi0gKiBhbiBpZCB0aGF0IHJlZmVyZW5jZXMgYSBkeW5hbWljV2l6YXJkIGV4dGVuc2lvbiBwb2ludC4gIFRoaXMgaXMgaG93IHRoZSBEeW5hbWljUG9wdXBXaXphcmQKLSAqIGNsYXNzIGtub3dzIHdoaWNoIHdpemFyZCB0byBkaXNwbGF5LgotICogICAKLSAqIE5vdGU6IHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIG9iamVjdENvbnRyaWJ1dGlvbiBlbGVtZW50IHJlZmVycyB0byBhbgotICogICAgICAgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZXh0ZW5zaW9uIHBvaW50LiAgVGhlIGlkcyBpbiBvYmplY3RDb250cmlidXRpb24KLSAqICAgICAgIGVsZW1lbnQgYW5kIHRoZSBhY3Rpb24gZWxlbWVudCBuZWVkIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGV5IGFyZSBpbiB0aGUKLSAqICAgICAgIGV4YW1wbGUgYmVsb3cuCi0gKgotICo8cHJlPgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIiZndDsKLSAqJmx0OyEtLSBJRmlsZSAqLndzZGwgcG9wdXAgbWVudSAtLSZndDsKLSAqICAgICAmbHQ7b2JqZWN0Q29udHJpYnV0aW9uCi0gKiAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICogICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqJmx0OyEtLSBXU0RMIFRvIEphdmEgQmVhbiBQcm94eSAtLSZndDsKLSAqICAgICAgICAmbHQ7YWN0aW9uCi0gKiAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAqICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICogICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAqICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAgICAmbHQ7L2FjdGlvbiZndDsKLSAqICAgICAmbHQ7L29iamVjdENvbnRyaWJ1dGlvbiZndDsKLSAqICAmbHQ7L2V4dGVuc2lvbiZndDsKLSAqCi0gKiAgICZsdDtleHRlbnNpb24KLSAqICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiJmd0OwotICogICAgICZsdDtkeW5hbWljV2l6YXJkCi0gKiAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LmdpZiIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5DbGllbnRXaWRnZXRCaW5kaW5nIgotICogICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAmbHQ7L2R5bmFtaWNXaXphcmQmZ3Q7Ci0gKiAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKjwvcHJlPgotICoKLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNQb3B1cFdpemFyZCBleHRlbmRzIER5bmFtaWNXaXphcmQgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgRHluYW1pY1BvcHVwV2l6YXJkKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkI2dldFdpemFyZFBhZ2VGYWN0b3J5KCkKLSAgICovCi0gIHByb3RlY3RlZCBXaXphcmRQYWdlRmFjdG9yeSBnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZVBvcHVwUGFnZUZhY3RvcnkoIGdldElkKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KW9yaWdpbmFsRWxlbWVudF8uZ2V0UGFyZW50KCkpLmdldEF0dHJpYnV0ZSggImlkIiApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIElBY3Rpb25EZWxlZ2F0ZSNydW4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgID0gZ2V0SWQoKTsKLSAgICAKLQlpZiggY29udGV4dC5zaG93RGlhbG9nKGlkKSApCi0JewotCSAgLy8gTGF1bmNoIHRoZSB3aXphcmQuCi0JICBpbml0KCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLCBnZXRTZWxlY3Rpb24oKSApOyAgCi0JICAgIAotCSAgV2l6YXJkRGlhbG9nIGRpYWxvZz0gbmV3IFdpemFyZERpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHRoaXMpOwotCSAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIAotICAgIGlmKCBnZXRTdGFydGluZ1BhZ2UoKSAhPSBudWxsICkKLSAgICB7Ci0JICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotCX0KLQllbHNlCi0JewotCSAgZmluYWwgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIG1vbml0b3IgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0JICAKLQkgIHRyeQotCSAgewotCSAgICBtb25pdG9yLnJ1biggZmFsc2UsIGZhbHNlLCBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgICAgIHJ1bkhlYWRMZXNzKCBnZXRTZWxlY3Rpb24oKSwgbW9uaXRvciApOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotCSAgfQotCSAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApCi0JICB7IAotCSAgfQotCSAgY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjICkKLQkgIHsKLQkgIH0KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSdW5zIG9ubHkgdGhlIENvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHluYW1pYyB3aXphcmQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBmcm9tIHRoZSB1c2VyLgotICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dCB0aGF0IHRoaXMgZXhlY3V0aW9uIHNob3VsZCB0YWtlIHBsYWNlIGluLiAgVGhpcwotICAgKiAgICAgICAgICAgICAgICBpcyB1c3VhbGx5IGEgcHJvZ3Jlc3MgY29udGV4dCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBnZXQgZmVlZGJhY2sKLSAgICogICAgICAgICAgICAgICAgb24gaG93IGV4ZWN1dGlvbiBpcyBwcm9ncmVzc2luZy4gIFRoZSBjb250ZXh0IG1heSBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuSGVhZExlc3MoIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwgSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ICkKLSAgewotCVBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQlFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLQlFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnZpcm9ubWVudCAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQkgICAgCi0JRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgICAgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7CSAgICAKLQlEYXRhRmxvd01hbmFnZXIgICAgICAgICAgICBkYXRhTWFuYWdlciAgICAgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBkYXRhUmVnaXN0cnlfLCBlbnZpcm9ubWVudCApOwotCVNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyIG1hbmFnZXIgICAgICAgICA9IG5ldyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcihlbnZpcm9ubWVudCwgZGF0YU1hbmFnZXIgKTsKLQkKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpd2l6YXJkRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0JICAKLQljb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeV8gKTsKLQkKLQlDb21tYW5kRnJhZ21lbnQgcm9vdEZyYWdtZW50ID0gZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIG51bGwgKTsKLQkKLQltYW5hZ2VyLnNldFJvb3RGcmFnbWVudCggcm9vdEZyYWdtZW50ICk7Ci0JbWFuYWdlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggY29udGV4dCApOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICB7Ci0gICAgICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOwotICB9Ci0gIAotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiByZXN1bHQgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotICAgIAotCWlmKCBzZWxlY3Rpb25fICE9IG51bGwpIAotCXsJCi0JICBpZiggc2VsZWN0aW9uXyBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkgCi0JICB7Ci0JICAgIHJlc3VsdCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb25fOwotCSAgfQotCX0KLQllbHNlIAotCXsKLQkgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkgIAotCSAgaWYoIHdpbmRvdyAhPSBudWxsICkgCi0JICB7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvblNlcnZpY2UoKS5nZXRTZWxlY3Rpb24oKTsKLQkJCi0JCWlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApIAotCQl7Ci0JCSAgcmVzdWx0ID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbjsKLQkJfQotCSAgfQotCX0KLQkKLQlyZXR1cm4gcmVzdWx0OwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTY2NTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImFudC1zcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTkxODNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotcnVudGltZQotdGVtcC5mb2xkZXIKLWVudi5qYXIKLUBkb3QKLXNyYy56aXAKLWVudnNyYy56aXAKLWphdmFDb21waWxlci5lbnYuamFyLmFyZ3MKLWphdmFDb21waWxlci5hbnQtbGliX2FudHRhc2tzLmphci5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgwZWU0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmFudC5BbnRMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX0xPQ0FUSU9OIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jOi9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sfSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuTUFJTl9UWVBFIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LmludGVybmFsLnVpLmFudHN1cHBvcnQuSW50ZXJuYWxBbnRSdW5uZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcudWkuQVRUUl9MQVVOQ0hfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL2libS1zZGstamF2YTUtMjAwNjA5MTIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX1RSSUdHRVJTX0NPTkZJR1VSRUQiIHZhbHVlPSJ0cnVlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuYW50LnVpLkRFRkFVTFRfVk1fSU5TVEFMTCIgdmFsdWU9InRydWUiLz4KLTxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfVFlQRVMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iMSIvPgotPC9saXN0QXR0cmlidXRlPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfUEFUSFMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwiLz4KLTwvbGlzdEF0dHJpYnV0ZT4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5hcHBlbmRFbnZpcm9ubWVudFZhcmlhYmxlcyIgdmFsdWU9InRydWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJwcm9jZXNzX2ZhY3RvcnlfaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkucmVtb3RlQW50UHJvY2Vzc0ZhY3RvcnkiLz4KLTwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMjgxZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sQnVpbGRlcjwvbmFtZT4KLQkJCTx0cmlnZ2Vycz5mdWxsLGluY3JlbWVudGFsLDwvdHJpZ2dlcnM+Ci0JCQk8YXJndW1lbnRzPgotCQkJCTxkaWN0aW9uYXJ5PgotCQkJCQk8a2V5PkxhdW5jaENvbmZpZ0hhbmRsZTwva2V5PgotCQkJCQk8dmFsdWU+Jmx0O3Byb2plY3QmZ3Q7Ly5leHRlcm5hbFRvb2xCdWlsZGVycy9idWlsZC1hbnR0YXNrcy5sYXVuY2g8L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTJmMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMDcgMjM6MTQ6NTcgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDdkN2Y3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNGcmkgSnVsIDExIDEwOjMyOjM3IEVEVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZjA5YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBKYW4gMzEgMDA6MTY6NTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZmFhMDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjM4IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiY2E1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52OyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDA4LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwMywyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4yMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwMCwyLjAuMCkiLAotIG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS43LjAsMi4wLjApIjtyZXNvbHV0aW9uOj1vcHRpb25hbCwKLSBvcmcuZWNsaXBzZS5hbnQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMS4zMDAsNC4wLjApIjtyZXNvbHV0aW9uOj1vcHRpb25hbAotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LWxpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LWxpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRiYzM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYW50dGFza3MuamFyCi1hbnR0YXNrc3NyYy56aXAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1zcmMvd3MvYW50L3Rhc2svV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQtc3JjL3dzL2FudC90YXNrL1dlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmI0MjE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1zcmMvd3MvYW50L3Rhc2svV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjIgICAxNzY5NDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIHdzLmFudC50YXNrOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQuQW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzayBleHRlbmRzIFRhc2sgCi17CQotCQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQkJewkJCQotCQkJLy9nZXQgcHJvcGVydGllcyBzZXQgaW4gdGhlIEFudCBmaWxlCi0JCQlQcm9qZWN0IHByb2ogPSBnZXRQcm9qZWN0KCk7Ci0gICAgICAKLSAgICAgIGlmKCBwcm9qICE9IG51bGwgKQotICAgICAgewotICAgICAgICAvL2NhbGwgdGhlIEFudENvbnRyb2xsZXIgdG8ga2ljayBvZmYgZ2VuZXJhdGlvbgotICAgIAkJQW50Q29udHJvbGxlciBjb250cm9sbGVyICAgPSBuZXcgQW50Q29udHJvbGxlcihwcm9qLmdldFByb3BlcnRpZXMoKSk7Ci0gICAgICAgIFN0cmluZyAgICAgICAgZXJyb3JNZXNzYWdlID0gY29udHJvbGxlci5nZXRFcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBlcnJvck1lc3NhZ2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIGVycm9yTWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAJCQotCQl9CQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc2NsaWVudC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWU2NTllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS1TY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gInNlcnZpY2UiIHNjZW5hcmlvLiAgU2VlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMuCi1TY2VuYXJpb1R5cGU9Y2xpZW50Ci0KLSEtLUluaXRpYWxTZWxlY3Rpb24gUkVRVUlSRUQuICBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBpbnB1dCBXU0RMIG9yIEphdmEuCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC93c2RsL215U2VydmljZS53c2RsCi0KLSEtLVV0aWxpdHkgcHJvcGVydHkgdmFsdWVzIC0gdXNlIHRoZXNlIHRvIGxpc3QgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0hLS0gQ2xpZW50LlJ1bnRpbWVJZCwgQ2xpZW50LlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIAotIS0tQ2xpZW50LlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1DbGllbnQuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKLSEtLUNsaWVudC5TZXJ2ZXJJZCAtIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1DbGllbnQuU2VydmVySWQ9b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNjAKLQotIS0tQ2xpZW50UHJvamVjdE5hbWUgLSBuYW1lIG9mIENsaWVudCBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBjbGllbnQgcHJvamVjdCBhIAotIS0tIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSEtLUNsaWVudFByb2plY3ROYW1lPWNsaWVudFByb2plY3ROYW1lCi0KLSEtLUNsaWVudEVhclByb2plY3ROYW1lLSBuYW1lIG9mIENsaWVudCBFQVIgcHJvamVjdCAtIHNldCBvbmx5IGlmIGFwcGxpY2FibGUgZm9yIHNlbGVjdGVkIHNlcnZlciB0eXBlCi0hLS1DbGllbnRFYXJQcm9qZWN0TmFtZT1jbGllbnRFQVJQcm9qZWN0TmFtZQotCi0hLS1DbGllbnRDb21wb25lbnRUeXBlIC0gdHlwZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIEF4aXMgdGVtcGxhdGVzOiB0ZW1wbGF0ZS5qc3Qud2ViIGFuZCB0ZW1wbGF0ZS5qc3QudXRpbGl0eQotIS0tQ2xpZW50Q29tcG9uZW50VHlwZT10ZW1wbGF0ZS5qc3Qud2ViCi0KLSEtLSBDdXN0b21pemVDbGllbnRNYXBwaW5ncyAtIHNldCB0byB0cnVlIHRvIHN1cHBseSBwYWNrYWdlLW5hbWVzcGFjZSBtYXBwaW5ncyB0eXBlOiBib29sZWFuCi0hLS1DdXN0b21pemVDbGllbnRNYXBwaW5ncz1mYWxzZSAgCi0gICAgCi0hLS0gTWFwcGluZ3MgCi0hLS0gV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MKLSEtLSBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSBjbGFzc2VzLgotIS0tIE5lZWQgbm90IGJlIHNldCBpZiBDdXN0b21pemVDbGllbnRNYXBwaW5ncyBpcyBmYWxzZSAgCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgbmFtZXNwYWNlPXBhY2thZ2UuCi0hLS1NYXBwaW5ncz0vdGVzdFByb2ovbWFwcGluZ3MvbWFwcGluZ3MudHh0Ci0KLSEtLU92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIG92ZXJ3cml0ZSBmaWxlcyB0aGF0IGFscmVhZHkgZXhpc3QuIHR5cGU6Ym9vbGVhbiAKLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLSBPdmVyd3JpdGVGaWxlc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZCAtIHNldCB0byB0cnVlIGNyZWF0ZSBmb2xkZXJzIG5lY2Vzc2FyeSBkdXJpbmcgZmlsZSBnZW5lcmF0aW9uIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENoZWNrb3V0RmlsZXNFbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzc2VydmljZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNzZXJ2aWNlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMTYyMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNzZXJ2aWNlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS0gU2NlbmFyaW9UeXBlIFJFUVVJUkVELiBEaWZmZXJlbnRpYXRlcyBmcm9tICJjbGllbnQiIHNjZW5hcmlvLiAgU2VlIGF4aXNjbGllbnQucHJvcGVydGllcy4KLVNjZW5hcmlvVHlwZT1zZXJ2aWNlCi0KLSEtLSBJbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC42MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPUphdmEgQmVhbgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBFQVIgcHJvamVjdC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgRUFSIHByb2plY3QgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlcnZpY2UgcHJvamVjdC4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LmJhdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2FudC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ODVlOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLWVjaG8gb2ZmCi1yZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotcmVtICBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi1yZW0gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLXJlbSAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi1yZW0gIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci1yZW0gIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi1yZW0gCi1yZW0gIENvbnRyaWJ1dG9yczoKLXJlbSAgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotcmVtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXNldGxvY2FsCi0KLVJFTSAqKioqKioqKioqKiBMb2NhbCBlbnZhcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLVJFTSBUaGUgSlJFIGphdmEuZXhlIHRvIGJlIHVzZWQgYnkgQW50LiAgTm90ZTogZm9yIFdUUCAyLjAgdGhlIEpESyBuZWVkcyB0byBiZSAxLjUgb3IgaGlnaGVyLgotc2V0IEpBVkFFWEU9IkM6XGpkazEuNS4wXGpyZVxiaW5camF2YS5leGUiCi0KLVJFTSBUaGUgRWNsaXBzZSBpbnN0YWxsIGRpcmVjdG9yeS4gIFNvbWUgRWNsaXBzZSBiYXNlZCBwcm9kdWN0cyBtYXkgcmVmZXIgdG8gdGhpcyBkaXJlY3RvcnkKLVJFTSBhcyB0aGUgbm9uIHNoYXJlZCBkaXJlY3RvcnkuICBEbyBub3QgcHV0IHF1b3RlcyBhcm91bmQgdGhpcyB2YWx1ZS4KLXNldCBJTlNUQUxMX0RJUkVDVE9SWT1kOlxwcm9kdWN0ZGlyZWN0b3J5XGVjbGlwc2UKLQotUkVNIFRoZSBzaGFyZWQgRWNsaXBzZSBmZWF0dXJlcyBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHNwbGl0IHRoZWlyIAotUkVNIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW50byBzaGFyZWQgYW5kIG5vbiBzaGFyZWQgZm9sZGVycy4gIFRoZSB2YXJpYWJsZSBiZWxvdyBzaG91bGQgYmUKLVJFTSBzZXQgdG8gdGhlIHNoYXJlZCBkaXJlY3RvcnkuICBOb3RlOiBhIGRlZmF1bHQgV1RQIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzcGxpdCBpdCdzCi1SRU0gZGlyZWN0b3J5IHN0cnVjdHVyZSBzbyB0aGUgSU5TVEFMTF9ESVJFQ1RPUlkgYW5kIHRoZSBTSEFSRURfRElSRUNUT1JZIHNob3VsZCBiZSB0aGUgc2FtZS4KLVJFTSBEbyBub3QgcHV0IHF1b3RlcyBhcm91bmQgdGhpcyB2YWx1ZS4KLXNldCBTSEFSRURfRElSRUNUT1JZPSVJTlNUQUxMX0RJUkVDVE9SWSUKLQotUkVNIFRoZSBFY2xpcHNlIEVxdWlub3ggTGF1bmNoZXIgamFyLiAgVXN1YWxseSB0aGlzIHBsdWdpbiBqYXIgZmlsZSBpcyBsb2NhdGVkIGluIHRoZQotUkVNIHNoYXJlZCBwbHVnaW4gZGlyZWN0b3J5KGllLiBwbHVnaW5zXG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIqLmphciApCi1zZXQgTEFVTkNIRVJfSkFSPSIlU0hBUkVEX0RJUkVDVE9SWSVccGx1Z2luc1xvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXzEuMC4wLnYyMDA3MDYwNi5qYXIiCi0KLVJFTSBUaGUgbG9jYXRpb24gb2YgeW91ciB3b3Jrc3BhY2Ugd2l0aG91dCB0aGUgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IuCi1SRU0gRG8gbm90IHB1dCBxdW90ZXMgYXJvdW5kIHRoaXMgdmFsdWUuCi1zZXQgV09SS1NQQUNFPUM6XHdvcmtzcGFjZQotCi1SRU0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1pZiBub3QgZXhpc3QgJUpBVkFFWEUlIGVjaG8gRVJST1I6IGluY29ycmVjdCBqYXZhLmV4ZT0lSkFWQUVYRSUsIGVkaXQgdGhpcyBmaWxlIGFuZCBjb3JyZWN0IHRoZSBKQVZBRVhFIGVudmFyCi1pZiBub3QgZXhpc3QgJUpBVkFFWEUlIGdvdG8gZG9uZQotCi1pZiBub3QgZXhpc3QgJUxBVU5DSEVSX0pBUiUgZWNobyBFUlJPUjogaW5jb3JyZWN0IGxhdW5jaGVyIGphcj0lTEFVTkNIRVJfSkFSJSwgZWRpdCB0aGlzIGZpbGUgYW5kIGNvcnJlY3QgdGhlIExBVU5DSEVSX0pBUiBlbnZhcgotaWYgbm90IGV4aXN0ICVMQVVOQ0hFUl9KQVIlIGdvdG8gZG9uZQotCi06cnVuCi1AZWNobyBvbgotJUpBVkFFWEUlIC1qYXIgJUxBVU5DSEVSX0pBUiUgLWluc3RhbGwgIiVJTlNUQUxMX0RJUkVDVE9SWSUiIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgLWRhdGEgIiVXT1JLU1BBQ0UlIiAtZmlsZSB3c2dlbi54bWwgJSogPndzZ2VuLnR4dCAyPiYxCi0KLTpkb25lCi1wYXVzZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LnNoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWVmNDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2FudC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyEvYmluL3NoCi1zZXQgK3YKLQotI1NjcmlwdCB0byBydW4gV2ViU2VydmljZSBBbnQgdGFza3MgaW4gaGVhZGxlc3MgRWNsaXBzZSBtb2RlCi0KLWVjaG8gIlNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIgotCi0jIFRoZSBKUkUgamF2YS5leGUgdG8gYmUgdXNlZCBieSBBbnQuICBOb3RlOiBmb3IgV1RQIDIuMCB0aGUgSkRLIG5lZWRzIHRvIGJlIDEuNSBvciBoaWdoZXIuCi1KQVZBRVhFPS9ob21lL3Rlc3Rlci9qZGsxLjUuMC9qcmUvYmluL2phdmEKLSAgICAgICAKLSAgICAgICAKLSMgVGhlIEVjbGlwc2UgaW5zdGFsbCBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHJlZmVyIHRvIHRoaXMgZGlyZWN0b3J5Ci0jIGFzIHRoZSBub24gc2hhcmVkIGRpcmVjdG9yeS4KLUlOU1RBTExfRElSRUNUT1JZPS9wcm9kdWN0ZGlyZWN0b3J5L2VjbGlwc2UKLQotIyBUaGUgc2hhcmVkIEVjbGlwc2UgZmVhdHVyZXMgZGlyZWN0b3J5LiAgU29tZSBFY2xpcHNlIGJhc2VkIHByb2R1Y3RzIG1heSBzcGxpdCB0aGVpciAKLSMgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIHNoYXJlZCBhbmQgbm9uIHNoYXJlZCBmb2xkZXJzLiAgVGhlIHZhcmlhYmxlIGJlbG93IHNob3VsZCBiZQotIyBzZXQgdG8gdGhlIHNoYXJlZCBkaXJlY3RvcnkuICBOb3RlOiBhIGRlZmF1bHQgV1RQIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzcGxpdCBpdCdzCi0jIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc28gdGhlIElOU1RBTExfRElSRUNUT1JZIGFuZCB0aGUgU0hBUkVEX0RJUkVDVE9SWSBzaG91bGQgYmUgdGhlIHNhbWUuCi1TSEFSRURfRElSRUNUT1JZPSRJTlNUQUxMX0RJUkVDVE9SWQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSMgVGhlIEVjbGlwc2UgRXF1aW5veCBMYXVuY2hlciBqYXIuICBVc3VhbGx5IHRoaXMgcGx1Z2luIGphciBmaWxlIGlzIGxvY2F0ZWQgaW4gdGhlCi0jIHNoYXJlZCBwbHVnaW4gZGlyZWN0b3J5KGllLiBwbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIqLmphciApCi1MQVVOQ0hFUl9KQVI9JFNIQVJFRF9ESVJFQ1RPUlkvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXzEuMC4wLnYyMDA3MDYwNi5qYXIKLQotCi0jIFRoZSBsb2NhdGlvbiBvZiB5b3VyIHdvcmtzcGFjZQotV09SS1NQQUNFPS9ob21lL3Rlc3Rlci93b3Jrc3BhY2UKLQotcnVuKCkgewotICBzZXQgLXYKLSAgJEpBVkFFWEUgLWphciAkTEFVTkNIRVJfSkFSIC1pbnN0YWxsICRJTlNUQUxMX0RJUkVDVE9SWSAtYXBwbGljYXRpb24gb3JnLmVjbGlwc2UuYW50LmNvcmUuYW50UnVubmVyIC1kYXRhICRXT1JLU1BBQ0UgLWZpbGUgd3NnZW4ueG1sICRscyA+IHdzZ2VuLnR4dCAyPiYxCi19Ci0KLWlmIFsgISAtZSAkSkFWQUVYRSBdOyB0aGVuIAotICBlY2hvICJFUlJPUjogaW5jb3JyZWN0IGphdmEuZXhlPSRKQVZBRVhFLCBlZGl0IHRoZSBzY3JpcHQgYW5kIGNvcnJlY3QgdGhlIEpBVkFFWEUgZW52aXJvbm1lbnQgdmFyaWFibGUiOwotICBleGl0IDE7Ci1maQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1pZiBbICEgLWUgJExBVU5DSEVSX0pBUiBdOyB0aGVuCi1lY2hvICJFUlJPUjogaW5jb3JyZWN0IGxhdW5jaGVyPSRMQVVOQ0hFUl9KQVIsIGVkaXQgdGhlIHNjcmlwdCBhbmQgY29ycmVjdCB0aGUgTEFVTkNIRVJfSkFSIGVudmlyb25tZW50IHZhcmlhYmxlIjsKLWV4aXQgMTsKLWZpICAKLQotcnVuCi1leGl0IDAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2dlbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NnZW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDdhNmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2dlbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLiI+Ci0KLTxlY2hvIG1lc3NhZ2U9InB1bGxpbmcgaW4gcHJvcGVydHkgZmlsZXMiLz4KLTxwcm9wZXJ0eSBmaWxlPSJheGlzc2VydmljZS5wcm9wZXJ0aWVzIi8+Ci0JCi08ZWNobyBtZXNzYWdlPSJjYWxsaW5nIHRoZSB3ZWIgc2VydmljZXMgZ2VuZXJhdGlvbiBhbnQgdGFzazogd3NnZW4iLz4KLSA8dGFyZ2V0IG5hbWU9Im1haW4iID4KLSAgCSA8d3NnZW4vPgotICA8L3RhcmdldD4KLSAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMWVkODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IG5hbWU9IkJ1aWxkIEFudCBFbnZpcm9ubWVudCBzdXBwb3J0IEpBUiIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4iPgotCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVzY3JpcHRpb249IkNsZWFucywgYnVpbGRzIGFuZCByZWZyZXNoZXMiIGRlcGVuZHM9ImNsZWFuLCBhbnQtbGliL2FudHRhc2tzLmphciIvPgotCi0JPHRhcmdldCBuYW1lPSJpbml0IiBkZXBlbmRzPSJwcm9wZXJ0aWVzIj4KLQkJPHByb3BlcnR5IG5hbWU9InZlcnNpb24uc3VmZml4IiB2YWx1ZT0iXzMuMS4wIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJuZXcudmVyc2lvbi5zdWZmaXgiIHZhbHVlPSJfMy4yLjAiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImJvb3RjbGFzc3BhdGgiIHZhbHVlPSIiLz4KLQkJPHByb3BlcnR5IG5hbWU9InRlbXAuZm9sZGVyIiB2YWx1ZT0iJHtiYXNlZGlyfS90ZW1wLmZvbGRlciIvPgotCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQucmVzdWx0LmZvbGRlciIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLQkJPHByb3BlcnR5IG5hbWU9IndpbjMyLmphciIgdmFsdWU9IiR7ZWNsaXBzZS5ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODYke3ZlcnNpb24uc3VmZml4fS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9Imd0ay5qYXIiIHZhbHVlPSIke2VjbGlwc2UuaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zd3QuZ3RrLmxpbnV4Lng4NiR7dmVyc2lvbi5zdWZmaXh9LmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0ibW90aWYuamFyIiB2YWx1ZT0iJHtlY2xpcHNlLmhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3d0Lm1vdGlmJHt2ZXJzaW9uLnN1ZmZpeH0uamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJvc3guamFyIiB2YWx1ZT0iJHtlY2xpcHNlLmhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3d0LmNhcmJvbi5tYWNvc3gucHBjJHt2ZXJzaW9uLnN1ZmZpeH0uamFyIi8+Ci0JCTxhdmFpbGFibGUgZmlsZT0iJHt3aW4zMi5qYXJ9IiBwcm9wZXJ0eT0ic3d0LmphciIgdmFsdWU9IiR7d2luMzIuamFyfSIvPgotCQk8YXZhaWxhYmxlIGZpbGU9IiR7Z3RrLmphcn0iIHByb3BlcnR5PSJzd3QuamFyIiB2YWx1ZT0iJHtndGsuamFyfSIvPgotCQk8YXZhaWxhYmxlIGZpbGU9IiR7bW90aWYuamFyfSIgcHJvcGVydHk9InN3dC5qYXIiIHZhbHVlPSIke21vdGlmLmphcn0iLz4KLQkJPGF2YWlsYWJsZSBmaWxlPSIke29zeC5qYXJ9IiBwcm9wZXJ0eT0ic3d0LmphciIgdmFsdWU9IiR7b3N4Lmphcn0iLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9InByb3BlcnRpZXMiIGlmPSJlY2xpcHNlLnJ1bm5pbmciPgotCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQuY29tcGlsZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuY29yZS5KRFRDb21waWxlckFkYXB0ZXIiLz4KLQk8L3RhcmdldD4KLQkJCi0JCTx0YXJnZXQgbmFtZT0iYW50LWxpYi9hbnR0YXNrcy5qYXIiIGRlc2NyaXB0aW9uPSAiQ3JlYXRlcyB0aGUgYW50cnVubmVyLmphciIgZGVwZW5kcz0iaW5pdCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGVzdGRpciIgdmFsdWU9IiR7dGVtcC5mb2xkZXJ9L2FudC1saWIvYW50dGFza3MuamFyIi8+Ci0JCQk8ZGVsZXRlIGRpcj0iJHtkZXN0ZGlyfSIvPgotCQkJPG1rZGlyIGRpcj0iJHtkZXN0ZGlyfSIvPgotCQkJPGphdmFjIGRlc3RkaXI9IiR7ZGVzdGRpcn0iIGZhaWxvbmVycm9yPSJ0cnVlIiB2ZXJib3NlPSJmYWxzZSIgZGVidWc9Im9uIiBpbmNsdWRlSmF2YVJ1bnRpbWU9ICJ5ZXMiCi0JCQkgCWJvb3RjbGFzc3BhdGg9IiR7Ym9vdGNsYXNzcGF0aH0iCi0JCQkgCWNsYXNzcGF0aD0iJHtiYXNlZGlyfS9iaW4iPgotCQkJCTxzcmMgcGF0aD0iYW50LXNyYy8iLz4KLQkJCTwvamF2YWM+Ci0JCQk8Y29weSB0b2Rpcj0iJHtkZXN0ZGlyfSI+Ci0JCQkJPGZpbGVzZXQgZGlyPSJhbnQtc3JjLyIgZXhjbHVkZXM9IioqLyouamF2YSIvPgotCQkJPC9jb3B5PgotCQkJPG1rZGlyIGRpcj0iJHtidWlsZC5yZXN1bHQuZm9sZGVyfS9hbnQtbGliIi8+Ci0JCQk8amFyIGRlc3RmaWxlPSIke2J1aWxkLnJlc3VsdC5mb2xkZXJ9L2FudC1saWIvYW50dGFza3MuamFyIiBiYXNlZGlyPSIke2Rlc3RkaXJ9Ii8+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt0ZW1wLmZvbGRlcn0iLz4KLQkJPC90YXJnZXQ+Ci0KLQkJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkRlbGV0ZXMgcHJldmlvdXMgYnVpbGQgcmVtbmFudHMiIGRlcGVuZHM9ImluaXQiPgotCQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkLnJlc3VsdC5mb2xkZXJ9L2FudC1saWIvYW50dGFza3MuamFyIi8+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt0ZW1wLmZvbGRlcn0iLz4KLQkJPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJyZWZyZXNoIj4KLQk8ZWNsaXBzZS5Mb2NhbFJlZnJlc2ggcmVzb3VyY2U9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgZGVwdGg9ImluZmluaXRlIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNTNmYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgYW50LyxcCi0gICAgICAgICAgICAgICBhbnQtbGliL2FudHRhc2tzLmphcixcCi0gICAgICAgICAgICAgICAuCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuLFwKLSAgICAgICAgICAgICAgICAgICAgIGFudC1saWIvYW50dGFza3MuamFyCi1zb3VyY2UuYW50LWxpYi9hbnR0YXNrcy5qYXIgPSBhbnQtc3JjLwotb3V0cHV0LmFudC1saWIvYW50dGFza3MuamFyID0gYmluLwotcm9vdC5wZXJtaXNzaW9ucy43NzcgPSBhbnQvCi1vdXRwdXQuLiA9IGJpbi8KLXNvdXJjZS4uID0gc3JjLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3ZDNjY2JkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1FbnZpcm9ubWVudCBDb21tYW5kIEZyYW1ld29yayAoaGVhZGxlc3MpCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotUExVR0lOX1hQX0RZTkFNSUNfV0laQVJEPUR5bmFtaWMgV2l6YXJkCi1QTFVHSU5fWFBfUE9QVVBfRElBTE9HUz1PcHRpb25hbCBQb3AtdXAgQWN0aW9uIERpYWxvZ3MgVHlwZXMKLQotWFBfYW50RGF0YU1hcHBpbmc9QW50IEVudmlyb25tZW50IHByb3BlcnR5IG1hcHBpbmdzCi1YUF9hbnRTY2VuYXJpbz1BbnQgRW52aXJvbm1lbnQgc2NlbmFyaW9zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MjIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGNoYW5nZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0iZHluYW1pY1dpemFyZCIKLSAgICAgIG5hbWU9IiVQTFVHSU5fWFBfRFlOQU1JQ19XSVpBUkQiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGNoYW5nZS4gLS0+ICAgCi0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0iYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUiCi0gICAgICBuYW1lPSIlUExVR0lOX1hQX1BPUFVQX0RJQUxPR1MiLz4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iYW50RGF0YU1hcHBpbmciIG5hbWU9IiVYUF9hbnREYXRhTWFwcGluZyIgc2NoZW1hPSJzY2hlbWEvYW50ZGF0YW1hcHBpbmcuZXhzZCIvPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iYW50U2NlbmFyaW8iIG5hbWU9IiVYUF9hbnRTY2VuYXJpbyIgc2NoZW1hPSJzY2hlbWEvYW50U2NlbmFyaW8uZXhzZCIvPgotICAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ3c2dlbiIKLSAgICAgICAgIG5hbWU9IndzZ2VuIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmFudC5jb3JlLmFudFRhc2tzIj4KLSAgICAgIDxhbnRUYXNrCi0gICAgICAgICAgICBjbGFzcz0id3MuYW50LnRhc2suV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrIgotICAgICAgICAgICAgZWNsaXBzZVJ1bnRpbWU9InRydWUiCi0gICAgICAgICAgICBoZWFkbGVzcz0idHJ1ZSIKLSAgICAgICAgICAgIGxpYnJhcnk9ImFudC1saWIvYW50dGFza3MuamFyIgotICAgICAgICAgICAgbmFtZT0id3NnZW4iLz4KLSAgIDwvZXh0ZW5zaW9uPiAKLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuYW50LmNvcmUuZXh0cmFDbGFzc3BhdGhFbnRyaWVzIj4KLSAgICAgICAgPGV4dHJhQ2xhc3NwYXRoRW50cnkgbGlicmFyeT0iYW50LWxpYi9hbnR0YXNrcy5qYXIiLz4KLSAgICAgPC9leHRlbnNpb24+ICAgICAKLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zY2hlbWEvYW50U2NlbmFyaW8uZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRTY2VuYXJpby5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWFmZjUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRTY2VuYXJpby5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiBpZD0iYW50U2NlbmFyaW8iIG5hbWU9IkFudCBFbnZpcm9ubWVudCBTY2VuYXJpb3MiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImFudFNjZW5hcmlvIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iYW50U2NlbmFyaW8iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzY2VuYXJpb1R5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRkYXRhbWFwcGluZy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudGRhdGFtYXBwaW5nLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTczOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudGRhdGFtYXBwaW5nLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ij4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiIGlkPSJhbnREYXRhTWFwcGluZyIgbmFtZT0iQW50IEVudmlyb25tZW50IFByb3BlcnR5IE1hcHBpbmdzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtYXAiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJtYXAiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJrZXkiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib3BlcmF0aW9uIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InByb3BlcnR5IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlZCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iZmFsc2UiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Y2EwYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9FbnZpcm9ubWVudC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNDE4ICAgMTc3MDA1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcKLSMgMjAwODAzMjYgICAxNDkwNjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA4MDMyNSAgIDIyMzkxMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBBZGRpbmcgUElJL01SSSB0byBwYXJ0aWFsbHkgYWRkcmVzcyAxNzE3MDUKLSMgMjAwODAzMjggICAyMjQ1NjMgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgVGV4dCBpbmNvcnJlY3QgZ2VuZXJhdGluZyB3ZWIgc2VydmljZXMgJiBjbGllbnRzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgZm9yIFJlc291Y2VVdGlscwotIwotTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFPUlXQUIwMDAzRSBQYXRoIHswfSBpcyBub3QgYWJzb2x1dGUgZm9yIGNyZWF0aW5nIGEgZmlsZS4KLU1TR19FUlJPUl9QQVRIX0VNUFRZPUlXQUIwMDA0RSBQYXRoIHswfSBpcyBlbXB0eSB3aGlsZSBjcmVhdGluZyBhIGZpbGUuCi1NU0dfRVJST1JfUEFUSF9OT1RfRk9MREVSPUlXQUIwMDA1RSBQYXRoIHswfSBpcyBub3QgYSBmb2xkZXIgZm9yIGNyZWF0aW5nIGEgZmlsZS4KLU1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQ9SVdBQjAwMDdFIEZvbGRlciBjcmVhdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgcGFyZW50IGZvbGRlciB7MH0uIERvIHlvdSB3YW50IHRvIGNyZWF0ZSBmb2xkZXIgezF9PwotTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVI9SVdBQjAwMDhFIFJlc291cmNlIHswfSBpcyBub3QgYSBmb2xkZXIuCi1NU0dfV0FSTl9GSUxFX09WRVJXUklURV9ESVNBQkxFRD1JV0FCMDAwOVcgQ2Fubm90IG92ZXJ3cml0ZSBmaWxlIHsxfSBpbiBmb2xkZXIgezB9LgotTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQ9SVdBQjAwMTBFIENhbm5vdCBjaGVja291dCBmaWxlIHsxfSBpbiBmb2xkZXIgezB9LgotTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GSUxFPUlXQUIwMDExRSBUaGUgZm9sbG93aW5nIHBhdGggaXMgbm90IGEgcmVzb3VyY2U6IHswfS4KLU1TR19FUlJPUl9GT0xERVJfSEFTX0NISUxEUkVOPUlXQUIwMDEyRSBDYW5ub3QgY3JlYXRlIGZvbGRlcjogezB9IHRoYXQgYWxyZWFkeSBoYXMgY2hpbGRyZW4uCi1NU0dfRVJST1JfSU89SVdBQjAwMDZFIEFuIGlucHV0L291dHB1dCBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSByZXNvdXJjZSAiezB9Ii4KLU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRD1JV0FCMDE2NEUgQ2Fubm90IG92ZXJ3cml0ZSB0aGUgZmlsZSAiezF9IiByZWxhdGl2ZSB0byB0aGUgcGF0aCAiezB9IiBiZWNhdXNlIGF1dG9tYXRpYyBmaWxlIG92ZXJ3cml0aW5nIGhhcyBub3QgYmVlbiBlbmFibGVkLiBEbyB5b3Ugd2FudCB0byBlbmFibGUgaXQgZm9yIHRoaXMgZmlsZT8KLU1TR19FUlJPUl9VTkVYUEVDVEVEX0VSUk9SPUlXQUIwMDE0RSBVbmV4cGVjdGVkIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLU1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk09RXhjZXB0aW9uIHRyYW5zZm9ybWluZyBBbnQgcHJvcGVydHkga2V5IHswfSB1c2luZyB0cmFuc2Zvcm1hdGlvbiB7MX0uCi1NU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSPUV4Y2VwdGlvbiBpbnZva2luZyBzZXR0ZXIgbWV0aG9kIHswfSBmb3IgQW50IHByb3BlcnR5LgotTVNHX0VSUk9SX0FOVF9DTURfRlJBR01FTlQ9RXhjZXB0aW9uIHJldHJpZXZpbmcgQW50IGNvbW1hbmQgZnJhZ21lbnQgZnJvbSByZWdpc3RyeS4KLU1TR19FUlJPUl9BTlRfU0NFTkFSSU9fVFlQRT1DYW5ub3QgZGV0ZXJtaW5lIHNjZW5hcmlvIHR5cGUuICBQbGVhc2UgZW5zdXJlIFNjZW5hcmlvVHlwZSBBbnQgcHJvcGVydHkgaXMgc2V0LgotTVNHX0VSUk9SX0FOVF9SRVFVSVJFRF9QUk9QRVJUWT1SZXF1aXJlZCBwcm9wZXJ0eSB7MH0gd2FzIG5vdCBzZXQgaW4gdGhlIEFudCBwcm9wZXJ0eSBmaWxlLgotTVNHX0VSUk9SX0FOVF9QUk9QRVJUWV9XSVRIX0lOVkFMSURfVkFMVUU9UHJvcGVydHkgezB9IHdhcyBzZXQgd2l0aCBhbiBpbnZhbGlkIHZhbHVlOiB7MX0uCi1NU0dfSU5GT19BTlRfX1BST1BFUlRZX0RFRkFVTFQ9UHJvcGVydHkgezB9IHdhcyBub3Qgc2V0IGluIHRoZSBBbnQgcHJvcGVydHkgZmlsZS4gIEEgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCi0KLUxBQkVMX1lFUz1ZZXMKLUxBQkVMX1lFU19UT19BTEw9WWVzIHRvIEFsbAotTEFCRUxfQ0FOQ0VMPUNhbmNlbAotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9FbnZpcm9ubWVudE1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU3MWRiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuRW52aXJvbm1lbnQiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgRW52aXJvbm1lbnRNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QQVRIX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QQVRIX05PVF9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9GSUxFX09WRVJXUklURV9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZPTERFUl9IQVNfQ0hJTERSRU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX0RBVEFfVFJBTlNGT1JNOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9DTURfRlJBR01FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9TQ0VOQVJJT19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfUkVRVUlSRURfUFJPUEVSVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9QUk9QRVJUWV9XSVRIX0lOVkFMSURfVkFMVUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX19QUk9QRVJUWV9ERUZBVUxUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1lFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9ZRVNfVE9fQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NBTkNFTDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEVudmlyb25tZW50TWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudENvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudENvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkMjRhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTUxNjE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqIDIwMDcwNTIyICAgMTc2OTQzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5FbnZpcm9ubWVudE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuRnJhZ21lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiAKLSAqIENlbnRyYWwgcG9pbnQgb2YgY29udHJvbCBmb3Igd2ViIHNlcnZpY2UgQW50IHRhc2tzLgotICogQ29uc3RydWN0cyBBbnQgZW52aXJvbm1lbnQsIHJvb3QgZnJhZ21lbnQgYW5kIGNvbW1hbmQgbWFuYWdlci4gIFN0YXJ0cyBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmQgc3RhY2suCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgQW50Q29udHJvbGxlciAKLXsJCi0gICBwcml2YXRlIEFudE9wZXJhdGlvbk1hbmFnZXIgb3BlcmF0aW9uTWFuYWdlcl87Ci0gICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlXyA9IG51bGw7Ci0gICBwcml2YXRlIEFudEVudmlyb25tZW50ICAgICAgZW52aXJvbm1lbnRfOwotCQotICAgcHVibGljIEFudENvbnRyb2xsZXIoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gICB7Ci0JICAgLy8gY29uc3RydWN0IHRoZSBlbnZpcm9ubWVudCAtIHBhc3NpbmcgaW4gdGhlIHByb3BlcnR5IHRhYmxlCSAgIAotCSAgIC8vIC0tbWFpbnRhaW5zIGxpbmsgdG8gcHJvcGVydHkgdGFibGUgcGx1cyBhbnkgb3RoZXIgZW52aXJvbm1lbnQgcHJvcGVydGllcwotCSAgIC8vIC0tY29kZSB0byBhY2Nlc3MgZXh0ZW5zaW9uIHBvaW50IG1hcHBpbmdzIGZvciBvcGVyYXRpb25zIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBwcm9wZXJ0eSB0YWJsZQotCSAgIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gKFRyYW5zaWVudFJlc291cmNlQ29udGV4dClQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCkuY29weSgpOwotCSAgIEFudFN0YXR1c0hhbmRsZXIgICAgICAgICAgaGFuZGxlciAgICAgICAgID0gbmV3IEFudFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgCi0JICAgZW52aXJvbm1lbnRfID0gbmV3IEFudEVudmlyb25tZW50KHRoaXMsIHJlc291cmNlQ29udGV4dCwgaGFuZGxlciwgcHJvcGVydGllcyk7Ci0gICAgICAgCi0JICAgLy8gY29uc3RydWN0IGRhdGEgbWFuYWdlciBmb3IgbWFpbnRhaW5pbmcgc3RhdGUgYWNyb3NzIG9wZXJhdGlvbnMKLQkgICBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKSwgZW52aXJvbm1lbnRfICk7Ci0gICAgICAgCi0JICAgLy8gIHNldCB1cCBvcGVyYXRpb24gZnJhZ21lbnRzIC0gY29uZGl0aW9uYWwgb24gb3B0aW9ucyBieSB1c2VyLi4uIHNlcnZpY2Ugb3IgY2xpZW50Ci0JICAgLy8gIGFsc28gbmVlZCB0byBpbml0aWFsaXplIHRoZSAic2VsZWN0aW9uIiBvciBpbnB1dCBmaWxlIChXU0RMLCBKYXZhKSBoZXJlCi0JICAgCi0JICAgQ29tbWFuZEZyYWdtZW50IHJvb3RGcmFnbWVudCA9ICBlbnZpcm9ubWVudF8uZ2V0Um9vdENvbW1hbmRGcmFnbWVudCgpOwotCSAgIAotCSAgIGlmIChyb290RnJhZ21lbnQgIT0gbnVsbCkKLQkgICB7CQkgICAKLQkgICAgICAgLy9jb25zdHJ1Y3QgdGhlIGVuZ2luZSAtIG1hbmFnZXMgZXhlY3V0aW9uIG9mIG9wZXJhdGlvbnMKLQkJICAgY3JlYXRlT3BlcmF0aW9uTWFuYWdlciggcm9vdEZyYWdtZW50LCBkYXRhTWFuYWdlciwgZW52aXJvbm1lbnRfICk7Ci0JCSAgIAotCQkgICBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCAgICBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsKLQkJICAgcm9vdEZyYWdtZW50LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFSZWdpc3RyeV8pOwkJICAgCi0JICAgfQotCSAgIGVsc2UgIC8vcHJvYmxlbSBnZXR0aW5nIHRoZSByb290IGZyYWdtZW50IC0gc2NlbmFyaW8gdHlwZSBpcyBsaWtlbHkgbWlzc2luZwotCSAgIHsKLSAgICAgICBlcnJvck1lc3NhZ2VfID0gRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX1NDRU5BUklPX1RZUEU7Ci0JCSAgIGhhbmRsZXIucmVwb3J0RXJyb3IobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgOTk5OSwgZXJyb3JNZXNzYWdlXywgbnVsbCkpOwotCQkgICByZXR1cm47Ci0JICAgfQotCSAgICAgIAotCSAgIC8vcmVhZHkgdG8gc3RhcnQgcnVubmluZyBvcGVyYXRpb25zCi0JICAgSVByb2dyZXNzTW9uaXRvciBudWxsTW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JICAgCi0gCSAgIG9wZXJhdGlvbk1hbmFnZXJfLm1vdmVGb3J3YXJkVG9OZXh0U3RvcCggbnVsbE1vbml0b3IgKTsKLQotICAgICBJU3RhdHVzIGxhc3RTdGF0dXMgPSBvcGVyYXRpb25NYW5hZ2VyXy5nZXRMYXN0U3RhdHVzKCk7Ci0gICAgIAotIAkgICBpZiAoICFsYXN0U3RhdHVzLmlzT0soKSApIAotICAgICB7Ci0gICAgICAgZXJyb3JNZXNzYWdlXyA9IGxhc3RTdGF0dXMuZ2V0TWVzc2FnZSgpOwotIAkJICAgb3BlcmF0aW9uTWFuYWdlcl8udW5kb1RvTGFzdFN0b3AoIG51bGxNb25pdG9yICk7Ci0gICAgIH0KLSAgIH0KLSAgIAotICAgcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKQotICAgewotICAgICByZXR1cm4gZXJyb3JNZXNzYWdlXzsgIAotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgY3JlYXRlT3BlcmF0aW9uTWFuYWdlcihDb21tYW5kRnJhZ21lbnQgZnJhZywgRGF0YUZsb3dNYW5hZ2VyIG1nciwgQW50RW52aXJvbm1lbnQgZW52KQotICAgewkJICAgCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfID0gbmV3IEFudE9wZXJhdGlvbk1hbmFnZXIoZnJhZywgbWdyLCBlbnYpOwkJCQotCQotCQkgICBvcGVyYXRpb25NYW5hZ2VyXy5zZXRQZWVrRnJhZ21lbnRMaXN0ZW5lciggCi0JCQkJICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotCQkJCSAgICAgIHsKLQkJCQkgICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHJldHVybiBwZWVrRnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0JCQkJICAgICAgICB9Ci0JCQkJICAgICAgfSApOyAgCi0JCQkJICAgICAgICAgICAgICAgICAgCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldE5leHRGcmFnbWVudExpc3RlbmVyKCAKLQkJCQkgICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0JCQkJICAgICAgewotCQkJCSAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgcmV0dXJuIG5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLQkJCQkgICAgICAgIH0KLQkJCQkgICAgICB9ICk7ICAKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldFVuZG9GcmFnbWVudExpc3RlbmVyKAotCQkJCSAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLQkJCQkgICAgICB7Ci0JCQkJICAgICAgICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHJldHVybiB1bmRvRnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0JCQkJICAgICAgICB9Ci0JCQkJICAgICAgfSApOwotICAgICAgIAotICAgICAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldEFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXIoCi0gICAgICAgICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBhZnRlckV4ZWN1dGVOZXh0RnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gKTsKLSAgIH0KLQkKLQlwcm90ZWN0ZWQgQ29tbWFuZE1hbmFnZXIgZ2V0T3BlcmF0aW9uTWFuYWdlcigpCi0JewotCQlyZXR1cm4gb3BlcmF0aW9uTWFuYWdlcl87Ci0JfQotCQotCS8qKgotCSAgICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBjYWxscyB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIHBlZWtpbmcgZm9yd2FyZAotCSAgICogaW4gdGhlIGZyYWdtZW50cy4gIFdoZW4gcGVla2luZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGluIHRoZQotCSAgICogZW5naW5lIGlzIG5vdCBjaGFuZ2VzLgotCSAgICogCi0JICAgKiAKLQkgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpdCBpcyBwZWVraW5nIGF0LgotCSAgICogQHJldHVybiBJbmRpY2F0ZXMgd2hldGhlciBwZWVraW5nIHNob3VsZCBzdG9wIG9yIG5vdC4KLQkgICAqLwotCSAgcHJvdGVjdGVkIGJvb2xlYW4gcGVla0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCSAgeyAgICAgCi0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBtb3ZpbmcgZm9yd2FyZAotCSAgICogaW4gdGhlIGZyYWdtZW50cy4gICBXaGVuIG1vdmluZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGlzIHNhdmVkCi0JICAgKiBhdCBlYWNoIGZyYWdtZW50IGlzIHRyYXZlcnNlZC4KLQkgICAqIAotCSAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IGlzIGJlaW5nIHRyYXZlcnNlZC4KLQkgICAqIEByZXR1cm4gaW5kaWNhdGVzIGlmIHRoZSBmb3J3YXJkIHRyYXZlcnNhbCBzaG91bGQgY29udGludWUuICAKLQkgICAqLwotCSAgcHJvdGVjdGVkIGJvb2xlYW4gbmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCSAgeyAgICAgCi0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB3aGVuIHRoZSBjb21tYW5kIGVuZ2luZSBpcyB1bndpbmRpbmcKLQkgICAqIGl0cyBzdGFjayBkdXJpbmcgYW4gdW5kbyBvcGVyYXRpb24uCi0JICAgKiAKLQkgICAqIEBwYXJhbSBmcmFnbWVudCAgdGhlIGZyYWdtZW50IGJlaW5nIHVuZG9uZS4KLQkgICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSB1bmRvIHByb2Nlc3Mgc2hvdWxkIGNvbnRpbnVlLgotCSAgICovCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRvRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JICB7ICAJICAJCi0JICAgIHJldHVybiB0cnVlOwotCSAgfQotICAgIAotICAgIHByb3RlY3RlZCBib29sZWFuIGFmdGVyRXhlY3V0ZU5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICB7Ci0gICAgICBib29sZWFuICAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB0cnVlOwotICAgICAgQmFzZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciAgID0gKEJhc2VTdGF0dXNIYW5kbGVyKWVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICBJU3RhdHVzICAgICAgICAgICBjb21tYW5kU3RhdHVzICAgPSBvcGVyYXRpb25NYW5hZ2VyXy5nZXRMYXN0U3RhdHVzKCk7Ci0gICAgICBJU3RhdHVzICAgICAgICAgICBoYW5kbGVyU3RhdHVzICAgPSBzdGF0dXNIYW5kbGVyLmdldFN0YXR1cygpOwotICAgICAgCi0gICAgICBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5FUlJPUiApCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBjb21tYW5kIHJldHVybmVkIGFuIGVycm9yIHN0YXR1cyBmb3IgdGhlIGVuZ2luZSB0byBzdG9wLAotICAgICAgICAvLyBidXQgdGhlIHN0YXR1cyBoYW5kbGVyIGRpZCBub3QgaGF2ZSByZXBvcnQgYW5kIGVycm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgcmVwb3J0IHRoaXMgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBjb21tYW5kCi0gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgbWVzc2FnZSB0byBkaXNwbGF5LiAgCi0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBjb21tYW5kU3RhdHVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBlcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPiAwICkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0RXJyb3IoIGNvbW1hbmRTdGF0dXMgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICAgICAgIGhhbmRsZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGxhc3QgY29tbWFuZCBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBidXQgdGhlIHN0YXR1cyBoYW5kbGVyCi0gICAgICAgIC8vIGRpZCByZXBvcnQgYW5kIGVycm9yLiAgVGhlcmVmb3JlLCB3ZSBzaG91bGQgc3RvcC4KLSAgICAgICAgZXJyb3JNZXNzYWdlXyA9IGhhbmRsZXJTdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSBmYWxzZTsgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGNvbnRpbnVlRXhlY3V0ZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRFbnZpcm9ubWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50RW52aXJvbm1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxMjVlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyMyAgIDEzMzcxNCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcyNiAgIDE1MTYxNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5FbnZpcm9ubWVudE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQ2xhc3NFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuSUVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIAotICogQWNjZXNzIHRvIHN0YXR1cyBoYW5kbGVyLCBsb2csIHJlc291cmNlIGNvbnRleHQgYW5kIGNvbW1hbmQgbWFuYWdlci4gIAotICogSW5pdGlhbGl6ZXMgZGF0YSBmb3IgY29tbWFuZHMgZnJvbSBBbnQgcHJvcGVydHkgZmlsZXMgYmFzZWQgb24gYW50RGF0YU1hcHBpbmcgZXh0ZW5zaW9ucy4gCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgQW50RW52aXJvbm1lbnQgZXh0ZW5kcyBFY2xpcHNlRW52aXJvbm1lbnR7Ci0JCi0JcHJpdmF0ZSBIYXNodGFibGUgYW50UHJvcGVydGllc187Ci0JcHJpdmF0ZSBIYXNodGFibGUgb3BlcmF0aW9uRGF0YVJlY29yZF8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JcHJpdmF0ZSBib29sZWFuIG1hcHBpbmdDb21wbGV0ZV87Ci0JcHJpdmF0ZSBDbGFzc0VudHJ5IGNsYXNzRW50cnk7CQotCQkKLQkvLyBleHRlbnNpb25Qb2ludCBuYW1lcyBhbmQgbmFtZXNwYWNlCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIE1BUFBFUl9FWFRfUFQgPSAiYW50RGF0YU1hcHBpbmciOyAgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBTQ0VOQVJJT19FWFRfUFQgPSAiYW50U2NlbmFyaW8iOyAgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBFWFRfUFRfTkFNRVNQQUNFID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiI7IC8vLy8kTk9OLU5MUy0xJAotCQotCS8vIGFudERhdGFNYXBwaW5nIGV4dGVuc2lvbiBwb2ludCBhdHRyaWJ1dGVzCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUFBFUl9PUEVSQVRJT05fQVRUUklCVVRFPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfS0VZX0FUVFJJQlVURT0gImtleSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX1BST1BFUlRZX0FUVFJJQlVURT0gInByb3BlcnR5IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfVFJBTlNGT1JNX0FUVFJJQlVURT0gInRyYW5zZm9ybSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX1JFUVVJUkVEX0FUVFJJQlVURT0gInJlcXVpcmVkIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkvLyBhbnRTY2VuYXJpbyBleHRlbnNpb24gcG9pbnQgYXR0cmlidXRlcwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19UWVBFX0FUVFJJQlVURSA9ICJzY2VuYXJpb1R5cGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPX0NMQVNTX0FUVFJJQlVURSA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIEFudCBwcm9wZXJ0eSBJRHMKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQk9TRV9QUk9QRVJUWSA9ICJWZXJib3NlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPVkVSV1JJVEVfUFJPUEVSVFkgPSAiT3ZlcndyaXRlRmlsZXNFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDUkVBVEVGT0xERVJfUFJPUEVSVFkgPSAiQ3JlYXRlRm9sZGVyc0VuYWJsZWQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLT1VUX1BST1BFUlRZID0gIkNoZWNrb3V0RmlsZXNFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19UWVBFX1BST1BFUlRZID0gIlNjZW5hcmlvVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgICBwcml2YXRlIEFudENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0JCi0JcHVibGljIEFudEVudmlyb25tZW50KEFudENvbnRyb2xsZXIgY29udHJvbGxlciwgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHQsIElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyLCBIYXNodGFibGUgcHJvcGVydGllcykKLQl7Ci0JICAgc3VwZXIoY29udHJvbGxlci5nZXRPcGVyYXRpb25NYW5hZ2VyKCksIGNvbnRleHQsIGhhbmRsZXIpOwotCSAgIGFudFByb3BlcnRpZXNfID0gcHJvcGVydGllczsJCi0JICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwkKLQkgICBzZXRDb250ZXh0KCBjb250ZXh0ICk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRDb250ZXh0KFRyYW5zaWVudFJlc291cmNlQ29udGV4dCBjb250ZXh0KSAKLQl7Ci0JICBCb29sZWFuIG92ZXJ3cml0ZVNldCAgICA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggT1ZFUldSSVRFX1BST1BFUlRZICk7Ci0JICBCb29sZWFuIGNyZWF0ZWZvbGRlclNldCA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggQ1JFQVRFRk9MREVSX1BST1BFUlRZICk7Ci0JICBCb29sZWFuIGNoZWNrb3V0U2V0ICAgICA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggQ0hFQ0tPVVRfUFJPUEVSVFkgKTsKLQkgIAotCSAgaWYoIG92ZXJ3cml0ZVNldCAhPSBudWxsICkgY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoIG92ZXJ3cml0ZVNldC5ib29sZWFuVmFsdWUoKSApOwotCSAgaWYoIGNyZWF0ZWZvbGRlclNldCAhPSBudWxsICkgY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCggY3JlYXRlZm9sZGVyU2V0LmJvb2xlYW5WYWx1ZSgpICk7Ci0JICBpZiggY2hlY2tvdXRTZXQgIT0gbnVsbCApIGNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoIGNoZWNrb3V0U2V0LmJvb2xlYW5WYWx1ZSgpICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdmVyYm9zZSgpCi0JewotCSAgQm9vbGVhbiByZXN1bHQgPSBnZXRCb29sZWFuUHJvcGVydHkoIFZFUkJPU0VfUFJPUEVSVFkgKTsKLQkgIAotCSAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gZmFsc2UgOiByZXN1bHQuYm9vbGVhblZhbHVlKCk7Ci0JfQotCQotCXB1YmxpYyBCb29sZWFuIGdldEJvb2xlYW5Qcm9wZXJ0eSggU3RyaW5nIHByb3BlcnR5ICkKLQl7Ci0JICBTdHJpbmcgIHZhbHVlICA9IGdldFByb3BlcnR5KCBwcm9wZXJ0eSApOwkKLQkgIEJvb2xlYW4gcmVzdWx0ID0gbnVsbDsKLQkJICAKLQkgIGlmKCB2YWx1ZSAhPSBudWxsICkKLQkgIHsKLQkJdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwotCQlyZXN1bHQgPSBuZXcgQm9vbGVhbiggdmFsdWUuZXF1YWxzKCAidHJ1ZSIpICk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiByZXN1bHQ7Ci0JfQotCQotCS8vIHJldHVybnMgU3RyaW5nIHNpbmNlIHRoZSBwcm9wZXJ0eSB0YWJsZSBidWlsdCBieSBBbnQgaXMgcHJvcGVydHkgdmFsdWUgcGFpcnMgd2hlcmUgdGhlIHZhbHVlIGlzIGEgU3RyaW5nCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIGtleSkKLQl7Ci0JCU9iamVjdCBwcm9wZXJ0eSA9IGFudFByb3BlcnRpZXNfLmdldChrZXkpOwotCQlpZiAocHJvcGVydHkgIT0gbnVsbCAmJiAoIXByb3BlcnR5LnRvU3RyaW5nKCkuZXF1YWxzKCIiKSkpCi0JCQlyZXR1cm4gcHJvcGVydHkudG9TdHJpbmcoKS50cmltKCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvLyBjYWxsIGZyb20gZW5naW5lIHByaW9yIHRvIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW9uIAotCXB1YmxpYyBJU3RhdHVzIGluaXRPcGVyYXRpb25EYXRhKEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wKQotCXsKLQkJLy9jaGVjayB0byBzZWUgaWYgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIHByaW1lZCBmb3IgdGhpcyBvcGVyYXRpb24gCi0JCVN0cmluZyBxdWFsaWZpZWRDbGFzc05hbWUgPSBvcC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJaWYgKG9wZXJhdGlvbkRhdGFSZWNvcmRfLmdldChxdWFsaWZpZWRDbGFzc05hbWUpID09IG51bGwpCi0JCXsKLQkJCWNsYXNzRW50cnkgPSBuZXcgQ2xhc3NFbnRyeSgpOwotCQkJCi0JCQl0cnkgewotCQkJCS8vZXh0ZW5zaW9uIGxvb2t1cCBmb3IgdGhlIGJlYW4gLSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eSBmb3IgaXQKLQkJCQlFbnVtZXJhdGlvbiBvcGVyYXRpb25EYXRhID0gZ2V0TWFwcGluZ0V4dGVuc2lvbnMob3ApOwkJCQkJCi0JCQkJY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xz0gZ2V0U2V0dGVyTGlzdChvcCk7CQkKLQkJCQl3aGlsZSAob3BlcmF0aW9uRGF0YS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCQl7CQkJCQotCQkJCQlQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZyA9IChQcm9wZXJ0eURhdGFIb2xkZXIpb3BlcmF0aW9uRGF0YS5uZXh0RWxlbWVudCgpOwotCQkJCQkJCi0JCQkJCSAgICBtYXBwaW5nQ29tcGxldGVfID0gZmFsc2U7Ci0JCQkJCQlTdHJpbmcgcHJvcGVydHkgPSBtYXBwaW5nLnByb3BlcnR5XzsKLQkJCQkJCVN0cmluZyBzZXR0ZXJNZXRob2ROYW1lID0gY3JlYXRlU2V0dGVyTmFtZShwcm9wZXJ0eSk7CQkKLQkJCQkJCQkJCQkJCQotCQkJCQkJaW50IHN0ZXAgPSAxOwotCQkJCQkJd2hpbGUgKCFtYXBwaW5nQ29tcGxldGVfKQotCQkJCQkJewkJCQkJCQkKLQkJCQkJCSAgIHN3aXRjaCAoc3RlcCkgewotCQkJCQkJCWNhc2UgMToKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IHRyYW5zZm9ybUFuZFNldChtYXBwaW5nLCBzZXR0ZXJNZXRob2ROYW1lKTsJCQkJCQkJCQotCQkJCQkJCQlicmVhazsJCQkJCQkJCQotCQkJCQkJCWNhc2UgMjoKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IGNhbGxTZXR0ZXIobWFwcGluZy5vcGVyYXRpb25fLCBtYXBwaW5nLnZhbHVlXywgc2V0dGVyTWV0aG9kTmFtZSk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkKLQkJCQkJCQljYXNlIDM6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSBjYWxsUHJpbWl0aXZlU2V0dGVyKG1hcHBpbmcpOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQkKLQkJCQkJCQljYXNlIDQ6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSBjYWxsU2V0dGVyQ29uc3RydWN0b3IobWFwcGluZyk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkKLQkJCQkJCQlkZWZhdWx0OgotCQkJCQkJCQltYXBwaW5nQ29tcGxldGVfID0gdHJ1ZTsKLQkJCQkJCQkJYnJlYWs7CQkJCQkJCQkKLQkJCQkJCQl9Ci0JCQkJCQkgICBzdGVwKys7Ci0JCQkJCQl9CQkJCQkKLQkJCQkgIH0JCQkJCi0gICAgICAgICAgICAgICAgLy9hZGQgb3BlcmF0aW9uIHRvIHRoZSByZWNvcmQgLSBubyBuZWVkIHRvIGluaXRpYWxpemUgYWdhaW4uLi4KLSAgICAgICAgICAgICAgICBvcGVyYXRpb25EYXRhUmVjb3JkXy5wdXQocXVhbGlmaWVkQ2xhc3NOYW1lLCAiIik7Ci0JCQl9CQkJCi0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBzZXR0ZXIgbmFtZSBiYXNlZCBvbiB0aGUgcHJvcGVydHkgcGFzc2VkIGluLiAgSWYgdGhlIAotCSAqIHByb3BlcnR5IGhhcyBhbnkgbGVhZGluZyBxdWFsaWZpZXJzIHRoZXkgYXJlIHN0cmlwcGVkIG9mZi4KLQkgKiBUaGUgcHJvcGVydHkgaXMgY2FwaXRhbGl6ZWQgYW5kIHNldCBpcyBwcmVwZW5kZWQuCi0JICogQHBhcmFtIHByb3BlcnR5ICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCByZXF1aXJlcyBhIHNldHRlci4KLQkgKiBAcmV0dXJuCi0JICovCQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVNldHRlck5hbWUoU3RyaW5nIHByb3BlcnR5KQotCXsJCQotCQl3aGlsZSAocHJvcGVydHkuaW5kZXhPZigiLiIpPj0wKQotCQl7Ci0JCQlwcm9wZXJ0eT1wcm9wZXJ0eS5zdWJzdHJpbmcocHJvcGVydHkuaW5kZXhPZigiLiIpKzEpOwotCQl9CQkgCi0JCSBTdHJpbmcgZmlyc3RDaGFyID0gcHJvcGVydHkuc3Vic3RyaW5nKDAsMSk7Ci0JCSBmaXJzdENoYXIgPSBmaXJzdENoYXIudG9VcHBlckNhc2UoKTsKLQkJIHByb3BlcnR5ID0gZmlyc3RDaGFyICsgcHJvcGVydHkuc3Vic3RyaW5nKDEpOyAgCi0JCSBTdHJpbmcgc2V0dGVyTmFtZSA9ICJzZXQiICsgcHJvcGVydHk7CQkgCi0JCSByZXR1cm4gc2V0dGVyTmFtZTsJCSAKLQl9CQotCQotCSAgIC8qKgotCSAgICAqIFJldHJpZXZlcyBleHRlbnNpb25zIGZvciB0aGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IGFudERhdGFNYXBwaW5nCi0JICAgICogZXh0ZW5zaW9uIHBvaW50LiAgRXh0cmFjdHMgdGhvc2UgdGhhdCB3aXRoIGNsYXNzIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhdCBtYXRjaCBvcGVyYXRpb25OYW1lLgotCSAgICAqIEFsbCBtYXBwaW5ncyBhcmUgY29udmVydGVkIHRvIFByb3BlcnR5RGF0YUhvbGRlciBvYmplY3RzLgotCSAgICAqIEFueSBtOjEgQW50IGtleSB0byBwcm9wZXJ0eSBtYXBwaW5ncyBhcmUgY29sbGVjdGVkIGludG8gYSBrZXktdmFsdWUgbWFwIHdpdGhpbgotCSAgICAqIGEgc2luZ2xlIFByb3BlcnR5RGF0YUhvbGRlci4gIAotCSAgICAqIEBwYXJhbSBvcGVyYXRpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBpcyBiZWluZyBpbml0aWFsaXplZC4KLQkgICAgKiBAcmV0dXJuIEEgY29sbGVjdGlvbiBvZiBQcm9wZXJ0eURhdGFIb2xkZXIgb2JqZWN0cy4gUmV0dXJucyBudWxsIGlmIHRoZXJlIGFyZSBubyBleHRlbnNpb25zIG1hdGNoaW5nIHRoZSBvcGVyYXRpb25OYW1lLgotCSAgICAqLwotCSAgIHByaXZhdGUgRW51bWVyYXRpb24gZ2V0TWFwcGluZ0V4dGVuc2lvbnMoQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgIHsJICAgCQkgICAKLQkJICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCSAgIC8vZ28gdG8gZXh0IHJlZ2lzdHJ5IGFuZCBnZXQgYWxsIGFudE1hcHBpbmcgZXh0ZW5zaW9ucwotCQkgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJICAgSUV4dGVuc2lvblBvaW50IGV4dFB0ID0gcmVnLmdldEV4dGVuc2lvblBvaW50KEVYVF9QVF9OQU1FU1BBQ0UsIE1BUFBFUl9FWFRfUFQpOwotCQkgICBIYXNodGFibGUgZGF0YVRhYmxlID0gbmV3IEhhc2h0YWJsZSgyNSk7Ci0JCSAgIAotCQkgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IGV4dFB0LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotCQkgICAKLQkJICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJCi0JCQkgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNlID0gZWxlbWVudHNbaV07Ci0JCQkgT2JqZWN0IG9iaiA9IGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfT1BFUkFUSU9OX0FUVFJJQlVURSk7Ci0JCQkgLy8gbG9vayBmb3IgbWFwcGluZ3MgZm9yIHRoaXMgb3BlcmF0aW9uCi0JCQkgaWYgKG9iai5lcXVhbHMob3BlcmF0aW9uTmFtZSkpCi0JCQkgewkJCQkgCi0JCQkJIFN0cmluZyBrZXkgPSBjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX0tFWV9BVFRSSUJVVEUpOwotCQkJCSBTdHJpbmcgdmFsdWUgPSBnZXRQcm9wZXJ0eShrZXkpOwotCQkJCSAKLQkJCQkgLy9jaGVjayB0byBzZWUgaWYgdGhlIHByb3BlcnR5IGZvciB0aGlzIGV4dGVuc2lvbiBpcyBhbHJlYWR5IGluIHRoZSBkYXRhIHRhYmxlCi0JCQkJIC8vIGlmIHNvLCB0aGVyZSBpcyBhIG06MSBtYXBwaW5nCi0JCQkJIGlmICh2YWx1ZSAhPSBudWxsKSAgLy9vbmx5IGRvIGEgbWFwcGluZyBpZiB0aGVyZSBpcyBhbiBBbnQgcHJvcGVydHkgdmFsdWUgcGFzc2VkIGluLi4uCi0JCQkJIHsKLQkJCQkKLQkJCQkJIFN0cmluZyBwcm9wZXJ0eSA9IGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfUFJPUEVSVFlfQVRUUklCVVRFKTsKLQkJCQkJIE9iamVjdCB0cmFuc2Zvcm0gPSBudWxsOwotCQkJCQkgdHJ5Ci0JCQkJCSB7Ci0JCQkJCQkgLy9jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgaXMgYW4gdHJhbnNmb3JtIGF0dHJpYnV0ZSBwcm92aWRlZAotCQkJCQkJIC8vICBpZiBzbywgZ2V0IHRoZSBjbGFzcyB0byBkbyB0aGUgdHJhbnNmb3JtYXRpb24KLQkJCQkJCSBpZiAoY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9UUkFOU0ZPUk1fQVRUUklCVVRFKSE9IG51bGwpCi0JCQkJCQkJIHRyYW5zZm9ybSA9IGNlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oTUFQUEVSX1RSQU5TRk9STV9BVFRSSUJVVEUpOwkgCi0JCQkJCSB9Ci0JCQkJCSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJICAgU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDkyLCBjZXguZ2V0TWVzc2FnZSgpLCBjZXgpOwotCQkJCQkgICBnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCQkgICBnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTIsIHRoaXMsICJnZXRNYXBwaW5nRXh0ZW5zaW9ucyIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk0sIGtleSwgdHJhbnNmb3JtKSk7Ci0JCQkJCSAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCQkJIH0KLQkJCQkJIAotCQkJCQkgaWYgKHRyYW5zZm9ybSAhPSBudWxsICYmIHRyYW5zZm9ybSBpbnN0YW5jZW9mIEJlYW5Nb2RpZmllci8qZGF0YVRhYmxlLmNvbnRhaW5zS2V5KHByb3BlcnR5KSovKQotCQkJCQkgewotCQkJCQkJIC8vZ2V0IHRoZSBQcm9wZXJ0eURhdGFIb2xkZXIgZnJvbSB0aGUgdGFibGUKLQkJCQkJCSBQcm9wZXJ0eURhdGFIb2xkZXIgaG9sZGVyID0gKFByb3BlcnR5RGF0YUhvbGRlcilkYXRhVGFibGUuZ2V0KHByb3BlcnR5KTsKLQkJCQkJCSBpZiAoaG9sZGVyID09IG51bGwpCi0JCQkJCQkgewotCQkJCQkJCSBob2xkZXIgPSBuZXcgUHJvcGVydHlEYXRhSG9sZGVyKCk7Ci0JCQkJCQkJIGhvbGRlci5rZXlfID0gIiI7Ci0JCQkJCQkJIGhvbGRlci52YWx1ZV8gPSAiIjsJCi0JCQkJCQkJIGhvbGRlci50cmFuc2Zvcm1fID0gdHJhbnNmb3JtOwotCQkJCQkJCSBob2xkZXIub3BlcmF0aW9uXyA9IG9wZXJhdGlvbjsKLQkJCQkJCQkgaG9sZGVyLnByb3BlcnR5XyA9IHByb3BlcnR5OwotCQkJCQkJCSBob2xkZXIubWFwXyA9IG5ldyBIYXNoTWFwKCk7Ci0JCQkJCQkJIGhvbGRlci5tYXBfLnB1dChrZXksIHZhbHVlKTsKLQkJCQkJCQkgZGF0YVRhYmxlLnB1dChwcm9wZXJ0eSwgaG9sZGVyKTsKLQkJCQkJCSB9CQkJCQkJIAotCQkJCQkJIGVsc2UKLQkJCQkJCSB7CQkJCQkJCi0JCQkJCQkJaG9sZGVyLm1hcF8ucHV0KGtleSwgdmFsdWUpOwotCQkJCQkJIH0JCQkJCQotCQkJCQkgfQotCQkJCQkgZWxzZSAgLy9wbGFpbiBwcm9wZXJ0eSBtYXBwaW5nIG5vdCBhIGJlYW4KLQkJCQkJIHsKLQkJCQkJCSBQcm9wZXJ0eURhdGFIb2xkZXIgaG9sZGVyID0gbmV3IFByb3BlcnR5RGF0YUhvbGRlcigpOwotCQkJCQkJIGhvbGRlci5vcGVyYXRpb25fID0gb3BlcmF0aW9uOwotCQkJCQkJIGhvbGRlci5rZXlfID0ga2V5OwotCQkJCQkJIGhvbGRlci5wcm9wZXJ0eV8gPSBwcm9wZXJ0eTsKLQkJCQkJCSBob2xkZXIudHJhbnNmb3JtXyA9IHRyYW5zZm9ybTsKLQkJCQkJCSBob2xkZXIudmFsdWVfID0gdmFsdWU7Ci0JCQkJCQkgZGF0YVRhYmxlLnB1dChwcm9wZXJ0eSwgaG9sZGVyKTsKLQkJCQkJIH0JCQkgCi0JCQkJIH0KLQkJCQkgZWxzZSBpZihjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX1JFUVVJUkVEX0FUVFJJQlVURSkhPW51bGwgJiYgY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9SRVFVSVJFRF9BVFRSSUJVVEUpLmVxdWFscygidHJ1ZSIpKQotCQkJCSB7CQkJCQotCQkJCQkgU3RyaW5nIG1zZyA9IEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfUkVRVUlSRURfUFJPUEVSVFksIGtleS50b1N0cmluZygpKTsKLQkJCQkJIFN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIAotCQkJCQkJCQlFbnZQbHVnaW4uSUQsCi0JCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJCW1zZywgCi0JCQkJCQkJCW51bGwpOwotCQkJCQkgZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1c09iaik7Ci0JICAgICAgICAgICAgICAgICBnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDk5OTksIHRoaXMsICJnZXRNYXBwaW5nRXh0ZW5zaW9ucyIsIG1zZyk7CQkJCQkgCi0JCQkJIH0KLQkJCQkgZWxzZSBpZiAodmVyYm9zZSgpKQotCQkJCSB7Ci0JCQkJCSBTdHJpbmcgbXNnID0gRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0lORk9fQU5UX19QUk9QRVJUWV9ERUZBVUxULCBrZXkudG9TdHJpbmcoKSk7Ci0JCQkJCSBTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJCQlFbnZQbHVnaW4uSUQsCi0JCQkJCQkJCUlTdGF0dXMuSU5GTywKLQkJCQkJCQkJbXNnLCAKLQkJCQkJCQkJbnVsbCk7Ci0JCQkJCSBnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhzdGF0dXNPYmopOwotCQkJCQkgZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgIndzX2FudCIsIDk5OTksIHRoaXMsICJnZXRNYXBwaW5nRXh0ZW5zaW9ucyIsIG1zZyk7CQkJCQkgCi0JCQkJIH0KLQkJICAgICAgfSAgICAJIAotCQkgIH0KLQkJICAgcmV0dXJuIGRhdGFUYWJsZS5lbGVtZW50cygpOwotCQl9ICAgICAKLQkgICAKLQkgICBwcml2YXRlIGJvb2xlYW4gdHJhbnNmb3JtQW5kU2V0KFByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nLCBTdHJpbmcgc2V0dGVyTWV0aG9kTmFtZSkKLQkgICB7Ci0JCQlPYmplY3QgdHJhbnNmb3JtID0gbWFwcGluZy50cmFuc2Zvcm1fOwotCQkJaWYgKHRyYW5zZm9ybSAhPSBudWxsKQotCQkJewotCQkJCS8vIGdldCB0cmFuc2Zvcm0gY2xhc3MgJiBjcmVhdGUgc2V0dGVyIHBhcmFtZXRlcnMJCQotCQkJCXRyeQotCQkJCXsKLQkJCQkJLy9PYmplY3QgY2xhc3NPYmplY3QgPSBDbGFzcy5mb3JOYW1lKHRyYW5zZm9ybSkubmV3SW5zdGFuY2UoKTsKLQkJCQkJT2JqZWN0IHBhcmFtID0gbmV3IE9iamVjdCgpOwotCQkJCQlpZiAodHJhbnNmb3JtIGluc3RhbmNlb2YgVHJhbnNmb3JtZXIpCi0JCQkJCXsKLQkJCQkJCVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gKFRyYW5zZm9ybWVyKXRyYW5zZm9ybTsJCQkJCQkKLQkJCQkJCS8vIHRyYW5zZm9ybSB0aGUgcHJvcGVydHkgdmFsdWUKLQkJCQkJCXBhcmFtID0gdHJhbnNmb3JtZXIudHJhbnNmb3JtKG1hcHBpbmcudmFsdWVfKTsJCQkJCQkKLQkJCQkJfQotCQkJCQllbHNlIGlmIChtYXBwaW5nLm1hcF8gIT0gbnVsbCAmJiB0cmFuc2Zvcm0gaW5zdGFuY2VvZiBCZWFuTW9kaWZpZXIpCi0JCQkJCXsKLQkJCQkJCSAgQmVhbk1vZGlmaWVyIG1vZGlmaWVyID0gKEJlYW5Nb2RpZmllcil0cmFuc2Zvcm07CQkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIGdldHRlciA9IGdldEdldHRlck1ldGhvZChtYXBwaW5nKTsKLQkJCQkJCSAgcGFyYW0gPSBnZXR0ZXIuaW52b2tlKG1hcHBpbmcub3BlcmF0aW9uXywgbmV3IE9iamVjdFtde30pOwkJCQkJCSAgCi0JCQkJCQkgIG1vZGlmaWVyLm1vZGlmeShwYXJhbSwgbWFwcGluZy5tYXBfKTsKLQkJCQkJfQkJCQkJCQkJCQkJCQotCQkJCQlyZXR1cm4gY2FsbFNldHRlcihtYXBwaW5nLm9wZXJhdGlvbl8sIHBhcmFtLCBzZXR0ZXJNZXRob2ROYW1lKTsKLQkJCQkJCi0JCQkJfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQkJCXsKLQkJCQkJZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5MywgZXhjLmdldE1lc3NhZ2UoKSwgZXhjKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5MywgdGhpcywgInRyYW5zZm9ybUFuZFNldCIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk0sIG1hcHBpbmcua2V5XywgbWFwcGluZy50cmFuc2Zvcm1fKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZXhjLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQkJCQkKLQkJCX0KLQkJCXJldHVybiBmYWxzZTsKLQkgICB9CSAgIAotCSAgIAotCSAgIHByaXZhdGUgVmVjdG9yIGdldFNldHRlckxpc3QoT2JqZWN0IG9wKQotCSAgIHsKLQkJICAgVmVjdG9yIHJlc3VsdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IG9wLmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwkJICAgICAKLQkJICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotCQkgICAgIHsKLQkJICAgICAgIE1ldGhvZCAgbWV0aG9kICAgICA9IG1ldGhvZHNbaW5kZXhdOwotCQkgICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotCQkgICAgICAgQ2xhc3MgICByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLQkJICAgICAKLQkJICAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLQkJICAgICAgICAgICByZXR1cm5UeXBlID09IFZvaWQuVFlQRSAmJiAKLQkJICAgICAgICAgICBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMSAmJgotCQkgICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggInNldCIgKSkKLQkJICAgICAgIHsKLQkJICAgICAgICAgbWV0aG9kLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLQkJICAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0JCSAgICAgICB9Ci0JCSAgICAgfQotCQkJICAgICAKLQkgICAgIHJldHVybiByZXN1bHQ7Ci0JICAgfQotCSAgIAotCSAgIHByaXZhdGUgTWV0aG9kIGdldEdldHRlck1ldGhvZChQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZykKLQkgICB7Ci0JICAgICAgIE1ldGhvZCBnZXR0ZXJGb3VuZCA9IG51bGw7ICAgICAKLQotCSAgICAgICBpZiAoY2xhc3NFbnRyeS5nZXR0ZXJMaXN0XyA9PSBudWxsKQotCSAgICAgICB7Ci0JICAgIAkgICBjbGFzc0VudHJ5LmdldHRlckxpc3RfID0gZ2V0R2V0dGVyTGlzdChtYXBwaW5nLm9wZXJhdGlvbl8pOyAgCi0JICAgICAgIH0KLQkgICAgICAgCi0JICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGFzc0VudHJ5LmdldHRlckxpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0JICAgICAgIHsKLQkgICAgICAgICBNZXRob2QgZ2V0dGVyID0gKE1ldGhvZCljbGFzc0VudHJ5LmdldHRlckxpc3RfLmVsZW1lbnRBdCggaW5kZXggKTsKLQkgICAgICAgICAKLQkgICAgICAgICBpZiggZ2V0dGVyLmdldE5hbWUoKS5lcXVhbHMoICJnZXQiICsgbWFwcGluZy5wcm9wZXJ0eV8gKSkKLQkgICAgICAgICB7Ci0JICAgICAgICAgICAgZ2V0dGVyRm91bmQgPSBnZXR0ZXI7Ci0JICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICAgfSAgICAgICAKLQkgICAgICAgfQotCSAgICAgICByZXR1cm4gZ2V0dGVyRm91bmQ7Ci0JICAgfQotCSAgIAotCSAgIHByaXZhdGUgVmVjdG9yIGdldEdldHRlckxpc3QoIE9iamVjdCBvYmplY3QgKQotCSAgIHsKLQkgICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7CSAgICAgCi0JICAgICBNZXRob2RbXSBtZXRob2RzID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwotCSAgICAgCi0JICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotCSAgICAgewotCSAgICAgICBNZXRob2QgIG1ldGhvZCAgICAgPSBtZXRob2RzW2luZGV4XTsKLQkgICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotCSAgICAgICBDbGFzcyAgIHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotCSAgICAgCi0JICAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLQkgICAgICAgICAgIHJldHVyblR5cGUgIT0gVm9pZC5UWVBFICYmIAotCSAgICAgICAgICAgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDAgJiYKLQkgICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggImdldCIgKSkKLQkgICAgICAgewotCSAgICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7Ci0JICAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0JICAgICAgIH0KLQkgICAgIH0KLQkgICAgIAotCSAgICAgcmV0dXJuIHJlc3VsdDsKLQkgICB9ICAgCi0gICAgICAgCi0JICAgcHJpdmF0ZSBib29sZWFuIGNhbGxTZXR0ZXIoQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3AsIE9iamVjdCBwYXJhbSwgU3RyaW5nIHNldHRlck1ldGhvZE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICAgewotCQkgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSAKLQkJICAgewotCQkJCU1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJaWYgKG1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKHNldHRlck1ldGhvZE5hbWUpKQotCQkJCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkgICAgICAgaWYgKHBhcmFtVHlwZXMubGVuZ3RoID09IDEgJiYgcGFyYW0gIT0gbnVsbCkKLQkJCSAgICAgICB7CQkJICAKLQkJCSAgICAgICAgCSB0cnl7CQkJICAgICAgCQkJCi0JCQkgICAgIAkJCSBtZXRob2QuaW52b2tlKG9wLCBuZXcgT2JqZWN0W117cGFyYW19KTsKLQkJCSAgICAgCQkJIHJldHVybiB0cnVlOwotCQkJICAgICAJCSB9Ci0JCQkgICAgIAkJIGNhdGNoKEV4Y2VwdGlvbiBjZXgpewotCQkJICAgICAJCQlTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTQsIGNleC5nZXRNZXNzYWdlKCksIGNleCk7Ci0JCQkgICAgIAkJCWdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkgICAgIAkJCWdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5NCwgdGhpcywgImNhbGxTZXR0ZXIiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSLCBzZXR0ZXJNZXRob2ROYW1lKSk7Ci0JCQkgICAgIAkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCSAgICAgCQkgfQotCQkJICAgICAgIH0gIAotCQkJCX0KLQkJCX0KLQkJICAgIHJldHVybiBmYWxzZTsKLQkgICB9Ci0JICAgCi0JCi0JICAgLy8gbG9vayBmb3Igc2V0dGVyIHdpdGggcHJpbWl0aXZlIHR5cGUgcGFyYW1ldGVyIC0gaWYgZmluZCBvbmUsIGNvbnZlcnQgU3RyaW5nIHByb3BlcnR5VmFsdWUgYW5kIGNhbGwgaXQKLQkgICBwcml2YXRlIGJvb2xlYW4gY2FsbFByaW1pdGl2ZVNldHRlcihQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZykgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgICB7CQkJCi0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCQkJTWV0aG9kIGVsZW1lbnQgPSAoTWV0aG9kKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJQ2xhc3NbXSBwYXJtVHlwZXMgPSBlbGVtZW50LmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJaWYgKHBhcm1UeXBlcy5sZW5ndGg9PTEgJiYgcGFybVR5cGVzWzBdLmlzUHJpbWl0aXZlKCkpCi0JCQkJewkJCQkJCQkJCQkKLQkJCQkJQ2xhc3MgcGFybVR5cGUgPSBwYXJtVHlwZXNbMF0uZ2V0Q2xhc3MoKTsKLQkJCQkJT2JqZWN0IHNldHRlclBhcm0gPSBudWxsOwotCQkJCQlpZiAocGFybVR5cGUuZXF1YWxzKEludGVnZXIuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gSW50ZWdlci52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoQm9vbGVhbi5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBCb29sZWFuLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhDaGFyYWN0ZXIuY2xhc3MpICYmIG1hcHBpbmcudmFsdWVfLmxlbmd0aCgpID09IDEpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBuZXcgQ2hhcmFjdGVyKG1hcHBpbmcudmFsdWVfLmNoYXJBdCgwKSk7ICAKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoQnl0ZS5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBCeXRlLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhTaG9ydC5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBTaG9ydC52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoTG9uZy5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBMb25nLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhGbG9hdC5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBGbG9hdC52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoRG91YmxlLmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IERvdWJsZS52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQkJCQkJCQkJCQkKLQkJCQkgICAgaWYgKHNldHRlclBhcm0gIT0gbnVsbCkKLQkJCQkgICAgewkKLQkJCQkgICAgCXRyeQotCQkJCSAgICAJewotCQkJCSAgICAJCWVsZW1lbnQuaW52b2tlKG1hcHBpbmcub3BlcmF0aW9uXywgbmV3IE9iamVjdFtde3NldHRlclBhcm19KTsKLQkJCQkJICAgIAlyZXR1cm4gdHJ1ZTsJCi0JCQkJICAgIAl9Ci0JCQkJICAgIAljYXRjaChFeGNlcHRpb24gZSl7Ci0JCQkJICAgIAkJU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDk1LCBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCQkJICAgIAkJZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQkgICAgCQlnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTUsIHRoaXMsICJjYWxsUHJpbWl0aXZlU2V0dGVyIiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUiwgZWxlbWVudC5nZXROYW1lKCkpKTsKLQkJCQkgICAgCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihlcnJvclN0YXR1cyk7Ci0JCQkJICAgIAl9Ci0JCQkJICAgIH0JCQkKLQkJCQl9Ci0JCSAgICB9ICAgCi0JCQlyZXR1cm4gZmFsc2U7Ci0JICAgfQotCQkKLQkJLy9jaGVjayBmb3Igc2V0dGVyIHdpdGggcGFyYW1ldGVyIHR5cGUgdGhhdCB0YWtlcyBhIFN0cmluZyB0byBjb25zdHJ1Y3QKLQkJLy8gY29uc3RydWN0IHRoZSBwYXJhbWV0ZXIgdXNpbmcgU3RyaW5nICYgY2FsbCB0aGUgc2V0dGVyICAKLQkgICBwcml2YXRlIGJvb2xlYW4gY2FsbFNldHRlckNvbnN0cnVjdG9yKFByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgIHsJCi0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCQkJTWV0aG9kIGVsZW1lbnQgPSAoTWV0aG9kKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJQ2xhc3NbXSBwYXJtVHlwZXMgPSBlbGVtZW50LmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJQ2xhc3NbXSBzdHJpbmdQYXJtID0gbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfTsKLQkJCQlpZiAocGFybVR5cGVzLmxlbmd0aD09MSkKLQkJCQl7Ci0JCQkJCXRyeQotCQkJCQl7CQkJCi0JCQkJCQlDb25zdHJ1Y3RvciBjdG9yID0gcGFybVR5cGVzLmdldENsYXNzKCkuZ2V0Q29uc3RydWN0b3Ioc3RyaW5nUGFybSk7Ci0JCQkJCQlPYmplY3QgcGFyYW1ldGVyID0gY3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117bWFwcGluZy52YWx1ZV99KTsKLQkJCQkJCWVsZW1lbnQuaW52b2tlKG1hcHBpbmcub3BlcmF0aW9uXywgbmV3IE9iamVjdFtde3BhcmFtZXRlcn0pOwkJCQkJCQotCQkJCQl9Ci0JCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQkJCQl7Ci0JCQkJCQlTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTYsIGV4Yy5nZXRNZXNzYWdlKCksIGV4Yyk7Ci0JCQkJCQlnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCQkJZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDk2LCB0aGlzLCAiY2FsbFNldHRlckNvbnN0cnVjdG9yIiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUiwgZWxlbWVudC5nZXROYW1lKCkpKTsKLQkJCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCQkJfQotCQkJCX0KLQkgICAgICAgIH0JCQkKLQkJICAgcmV0dXJuIGZhbHNlOwotCSAgIH0KLQotCSAgIC8qKgotCSAgICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGVscHMgbWFuYWdlIGV4ZWN1dGlvbi91bmRvaW5nIG9mIENvbW1hbmRzLgotCSAgICAqLwotCSAgIHB1YmxpYyBDb21tYW5kTWFuYWdlciBnZXRDb21tYW5kTWFuYWdlciAoKXsKLQkJICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldE9wZXJhdGlvbk1hbmFnZXIoKTsKLQkgICB9IAotCSAgIAotCSAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Um9vdENvbW1hbmRGcmFnbWVudCgpIAotICAgICAgIHsKLSAgICAJICAgCi0gICAgCSAgIC8vbG9vayB1cCB0aGUgY29tbWFuZEZyYWdtZW50IGluIHRoZSBzY2VuYXJpb1JlZ2lzdHJ5IGV4dGVuc2lvbiBwb2ludCB3aXRoIGFuIElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNjZW5hcmlvIHByb3BlcnR5IGluIHRoZSBwcm9wZXJ0eXRhYmxlCi0gICAgCSAgIFN0cmluZyBzY2VuYXJpb1Byb3BlcnR5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShTQ0VOQVJJT19UWVBFX1BST1BFUlRZKTsKLSAgICAJICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCSAgIElFeHRlbnNpb25Qb2ludCBleHRQdCA9IHJlZy5nZXRFeHRlbnNpb25Qb2ludChFWFRfUFRfTkFNRVNQQUNFLCBTQ0VOQVJJT19FWFRfUFQpOwotCQkgICAKLQkJICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBleHRQdC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLQkJICAgCi0JCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQkJCQotCQkJIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50ID0gZWxlbWVudHNbaV07CQkJIAotCQkJIGlmIChjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZShTQ0VOQVJJT19UWVBFX0FUVFJJQlVURSkuZXF1YWxzKHNjZW5hcmlvUHJvcGVydHkpKQotCQkJIHsJCQkJIAotCQkJCSB0cnkKLQkJCQkgewkJCQkJIAotCQkJCQlPYmplY3Qgb2JqID0gY29uZmlnRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFNDRU5BUklPX0NMQVNTX0FUVFJJQlVURSk7Ci0JCQotCQkJCQlpZiAob2JqIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50KQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudClvYmo7Ci0JCQkJCX0KLQkJCQkgfQotCQkJCSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLQkJCQkgewotCQkJCQkgU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDk3LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCQkJCQkgZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQkJIGdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5NywgdGhpcywgImdldFJvb3RDb21tYW5kRnJhZ21lbnQiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfQ01EX0ZSQUdNRU5UKTsJCQkJCSAKLQkJCQkgfQkJCQkgCi0JCQkgIH0gICAgCSAgIAotICAgICAgICAgICB9Ci0JCSAgIHJldHVybiBudWxsOwotICAgICAgIH0KLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50T3BlcmF0aW9uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50T3BlcmF0aW9uTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDRkMDk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudE9wZXJhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIE1hbmFnZXMgdGhlIGV4ZWN1dGlvbiBvZiBjb21tYW5kcyBpbiB0aGUgcm9vdCBmcmFnbWVudCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8JCi0KLXB1YmxpYyBjbGFzcyBBbnRPcGVyYXRpb25NYW5hZ2VyIGV4dGVuZHMgQ29tbWFuZEZyYWdtZW50RW5naW5lCi17CQotCSAgcHJpdmF0ZSBBbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudF87Ci0JICAKLQkgIHByb3RlY3RlZCBJU3RhdHVzIGluaXRCZWZvcmVFeGVjdXRlKCBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcGVyYXRpb24gKQotICAgIHsgICAgICAKLSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfYW50IiwgNTA5OCwgdGhpcywgImluaXRCZWZvcmVFeGVjdXRlIiwgIkluaXRpYWxpemluZyBkYXRhIGZvcjogIiArIG9wZXJhdGlvbi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICBJU3RhdHVzIGluaXRTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgCSAgaW5pdFN0YXR1cyA9IGVudmlyb25tZW50Xy5pbml0T3BlcmF0aW9uRGF0YSggb3BlcmF0aW9uICk7ICAKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAJIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOyAgCi0gICAgICB9ICAgICAgICAKLSAgICAgIHJldHVybiBpbml0U3RhdHVzOwotICAgIH0KLQotICAgIC8qKgotCSAgICogQ3JlYXRlcyBhIENvbW1hbmRGcmFnbWVudEVuZ2luZS4KLQkgICAqIAotCSAgICogQHBhcmFtIHN0YXJ0RnJhZ21lbnQgdGhlIHJvb3QgZnJhZ21lbnQgd2hlcmUgdHJhdmVyc2FsIHdpbGwgYmVnaW4uCi0JICAgKiBAcGFyYW0gZGF0YU1hbmFnZXIgdGhlIGRhdGEgbWFuYWdlciBjb250YWluaW5nIGFsbCBvZiB0aGUgZGF0YSBtYXBwaW5ncy4KLQkgICAqIEBwYXJhbSBlbnZpcm9ubWVudCB0aGUgZW52aXJvbm1lbnQuCi0JICAgKi8KLQkgIHB1YmxpYyBBbnRPcGVyYXRpb25NYW5hZ2VyKCBDb21tYW5kRnJhZ21lbnQgc3RhcnRGcmFnbWVudCwgRGF0YUZsb3dNYW5hZ2VyIGRhdGFNYW5hZ2VyLCBBbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCApCi0JICB7Ci0gICAgICBzdXBlciggc3RhcnRGcmFnbWVudCwgZGF0YU1hbmFnZXIsIGVudmlyb25tZW50ICk7Ci0gICAgICAKLQkgIAllbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLQkgIH0gCi19Ci0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZWE1YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50U3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTIyICAgMTc2OTQzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBBbnRTdGF0dXNIYW5kbGVyIGV4dGVuZHMgQmFzZVN0YXR1c0hhbmRsZXIKLXsKLQotCXB1YmxpYyBDaG9pY2UgcmVwb3J0KElTdGF0dXMgc3RhdHVzLCBDaG9pY2VbXSBjaG9pY2VzKSB7Ci0JCS8vIFRPRE8gCi0JICBjaGVja1N0YXR1cyhzdGF0dXMpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnQoSVN0YXR1cyBzdGF0dXMpIHRocm93cyBTdGF0dXNFeGNlcHRpb24gewotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLQkJCXJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCWVsc2UKLQkJCXJlcG9ydEluZm8oc3RhdHVzKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKElTdGF0dXMgc3RhdHVzKSB7Ci0JICBjaGVja1N0YXR1cyhzdGF0dXMpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oc3RhdHVzLmdldE1lc3NhZ2UoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0SW5mbyhJU3RhdHVzIHN0YXR1cykgewkKLQkgIGNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzdGF0dXMuZ2V0TWVzc2FnZSgpKTsJCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvUHJvcGVydHlEYXRhSG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9Qcm9wZXJ0eURhdGFIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA5YWI2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9Qcm9wZXJ0eURhdGFIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotLyoqCi0gKiBTaW1wbGUgY2xhc3MgdG8gaG9sZCBkYXRhIG1hcHBpbmcgaW5mb3JtYXRpb24gb25jZSByZXRyaWV2ZWQgZnJvbSBBbnQgcHJvcGVydHkgZmlsZS4KLSAqIE1hcCBpcyB1c2VkIGZvciBtYW55IHRvIG9uZSBtYXBwaW5ncyBpbnZvbHZpbmcgbWFwcGluZyBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIHRvIGEgYmVhbi4KLSAqIEluIHRoaXMgY2FzZSwgdGhlIGtleV8gYW5kIHZhbHVlXyBzaG91bGQgYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBhbmQgYWxsIGtleSB2YWx1ZSBwYWlycwotICogZm9yIHByb3BlcnRpZXMgcHV0IGludG8gdGhlIG1hcCBpbnN0ZWFkLiAgVGhlIHRyYW5zZm9ybWF0aW9uIGZvciB0aGlzIGNhc2Ugd291bGQgYmUgYSBtb2RpZmllcgotICogd2hpY2ggd2lsbCBzZXQgdGhlIHByb3BlcnRpZXMgb250byB0aGUgYmVhbi4KLSAqLwotIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgUHJvcGVydHlEYXRhSG9sZGVyIHsKLQkgICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uXzsKLQkgICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybV87Ci0JICAgcHVibGljIFN0cmluZyBrZXlfOwotCSAgIHB1YmxpYyBTdHJpbmcgcHJvcGVydHlfOwotCSAgIHB1YmxpYyBTdHJpbmcgdmFsdWVfOwkJCi0JICAgcHVibGljIE1hcCBtYXBfOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9TdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9TdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4M2U1NGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFN0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0KLQlwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsKLQkJCVN0cmluZyBzdHIgPSAoU3RyaW5nKXZhbHVlOwotCQkJc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7Ci0JCQlpZiAoc3RyLmVxdWFscygidHJ1ZSIpKQotCQkJewotCQkJCXJldHVybiBuZXcgQm9vbGVhbih0cnVlKTsKLQkJCX0KLQkJCWVsc2UgcmV0dXJuIG5ldyBCb29sZWFuKGZhbHNlKTsJCQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0NvbW1hbmRMaW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0NvbW1hbmRMaW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMDliZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9Db21tYW5kTGluZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmU7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5TdHJpbmdVdGlsczsKLQotCi0vKioKLSAgKiA8cD5UaGlzIGlzIGEgZ2VuZXJpYyBjb21tYW5kIGxpbmUgcGFyc2luZyBjbGFzcy4gIFRoZSBwcm9ncmFtbWVyIG5lZWQgb25seSBzcGVjaWZ5Ci0gICogdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGVpciBjb21tYW5kIGxpbmUoaWUuIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZmxhZ3MsIGV0YykKLSAgKiBhbmQgdGhpcyBjbGFzcyB3aWxsIHBlcmZvcm0gdGhlIHJlc3Qgb2YgdGhlIHBhcnNpbmcgd29yay4gIEFzIGFuIGFkZGVkIGJvbnVzIHRoaXMKLSAgKiBjbGFzcyB3aWxsIGFsc28gY3JlYXRlIGZvcm1hdGVkIGhlbHAgdGV4dCB0aGF0IGRpc3BsYXlzIHRoZSBzeW50YXggb2YgdGhpcwotICAqIGNvbW1hbmQgbGluZS4KLSAgKgotICAqIDxwPlRoZSBtYWluIHBhcmFtZXRlciB0byB0aGUgQ29tbWFuZExpbmUgY29uc3RydWN0b3IgaXMgYSB0d28gZGltZW5zaW9uYWwgU3RyaW5nCi0gICogYXJyYXkuICBUaGVyZSBhcmUgNSBjb2x1bW5zIGluIHRoaXMgYXJyYXkgYW5kIGFzIG1hbnkgcm93cyBhcyBuZWVkZWQgZm9yIGVhY2gKLSAgKiBmbGFnIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVyLiAgVGhlIGZpdmUgY29sdW1ucyBhcmU6Ci0gICoKLSAgKiA8b2w+Ci0gICogPGxpPlRoZSBuYW1lIG9mIHRoZSBmbGFnKGVnLiAiaGVscCIgb3IgImEiLCBldGMpCi0gICogICAgIE5vdGU6IG5vIGRhc2ggc2hvdWxkIGJlIGluIHRoZSBuYW1lIGhlcmUuICBUaGUgdXNlciB3b3VsZCBzcGVjaWZ5ICItaGVscCIgb24gdGhlCi0gICogICAgICAgICAgIGNvbW1hbmQgbGluZSB0aG91Z2guCi0gICogPGxpPlRoZSBuYW1lIG9mIHRoZSBmbGFnIHBhcmFtZXRlcihpZiBhbnkpCi0gICogPGxpPkEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGZsYWcgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25jZSBvbiB0aGUKLSAgKiAgICAgY29tbWFuZCBsaW5lLgotICAqIDxsaT5BIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBmbGFnIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICogPGxpPkEgaGVscCB0ZXh0IHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhpcyBwYXJ0aWN1bGFyIGZsYWcgb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXIuCi0gICogPC9vbD4KLSAgKgotICAqIDxwPkVhY2ggcm93IGluIHRoZSBzdHJpbmcgYXJyYXkgaXMgYXNzb2NpYXRlIHdpdGggZWl0aGVyIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIKLSAgKiBvciB3aXRoIGEgZmxhZy4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIGNvbW1hbmQgbGluZToKLSAgKiA8dWw+Ci0gICogPGxpPk15X3Byb2cgcmVxdWlyZWRfcGFybTEgLWFiIHBhcm1fZm9yX2FiIHJlcXVpcmVkX3Bhcm0yIC1oZWxwIG9wdGlvbmFsX3Bhcm1zCi0gICogPC91bD4KLSAgKgotICAqIDxwPkluIHRoaXMgZXhhbXBsZSBNeV9wcm9nIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtLiAgcmVxdWlyZWRfcGFybTEgYW5kCi0gICogcmVxdWlyZWRfcGFybTIgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIE5vdGljZSB0aGF0IHRoZXkgZG8gbm90Ci0gICogaGF2ZSB0byBiZSBhZGphY2VudCB0byBlYWNoIG90aGVyIG9uIHRoZSBjb21tYW5kIGxpbmUuIG9wdGlvbmFsX3Bhcm1zIG1heSBvcHRpb25hbGx5Ci0gICogc3BlY2lmaWVkLiAgb3B0aW9uYWxfcGFybXMgY2FuIGJlIDAgb3IgbW9yZSBwYXJhbWV0ZXJzLiAgVGhleSBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gICogYWRqYWNlbnQgdG8gdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGRvIG5lZWQgdG8gZm9sbG93IHRoZSByZXF1aXJlZAotICAqIHBhcmFtZXRlcnMuIFR3byBmbGFncyBhcmUgc3BlY2lmaWVkICItYWIiIGFuZCAiLWhlbHAiLiAgVGhlICItYWIiIGZsYWcgaGFzIGEKLSAgKiBwYXJhbWV0ZXIgInBhcm1fZm9yX2FiIiBhc3NvY2lhdGVkIHdpdGggaXQuICBOb3RlOiBhIGZsYWcgY2FuIG5vdCBoYXZlIGFuIG9wdGlvbmFsCi0gICogcGFyYW1ldGVyLiAoaWUuIGEgZmxhZyBlaXRoZXIgbmV2ZXIgaGF2ZSBhIHBhcmFtZXRlciBvciBpdCBhbHdheXMgaGFzIGEgcGFyYW1ldGVyKQotICAqIEluIHRoaXMgZXhhbXBsZSwgdGhlIGZpcnN0IHR3byByb3dzIGluIHRoZSBzdHJpbmcgYXJyYXkgd291bGQgZGVzY3JpYmUgcmVxdWlyZWRfcGFybTEKLSAgKiBhbmQgcmVxdWlyZWRfcGFybTIuICBUaGUgdGhpcmQgZW50cnkgd291bGQgZGVzY3JpYmUgb3B0aW9uYWxfcGFybXMuICBUaGUgZm91cnRoIGFuZAotICAqIGZpZnRoIHJvd3Mgd291bGQgZGVzY3JpYmUgIi1hYiIgYW5kICItaGVscCIuICBGb3IgdGhpcyBjb21tYW5kIGxpbmUgdGhlIHN0cmluZyBhcnJheQotICAqIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgotICAqCi0gICogPHVsPgotICAqIDxsaT57IHsgQ29tbWFuZExpbmUuUE9TSVRJT05BTCwgInBhcm0xIiwgQ29tbWFuZExpbmUuTk9fRFVQUywKLSAgKiAgICAgICBDb21tYW5kTGluZS5SRVFVSVJFRCwgInBhcm0xIGhlbHAgdGV4dCIgfSwKLSAgKiA8bGk+eyBDb21tYW5kTGluZS5QT1NJVElPTkFMLCAicGFybTIiLCBDb21tYW5kTGluZS5OT19EVVBTLAotICAqICAgICAgIENvbW1hbmRMaW5lLlJFUVVJUkVELCAicGFybTIgaGVscCB0ZXh0IiB9LAotICAqIDxsaT57IENvbW1hbmRMaW5lLlBPU0lUSU9OQUwsICJvcHRpb25hbF9wYXJtcyIsIENvbW1hbmRMaW5lLkRVUFNfT0ssCi0gICogICAgICAgQ29tbWFuZExpbmUuUkVRVUlSRUQsICJvcHRpb25hbCBoZWxwIHRleHQiIH0sCi0gICogPGxpPnsgImFiIiwgInBhcm1fZm9yX2FiIiwgQ29tbWFuZExpbmUuTk9fRFVQUywKLSAgKiAgICAgICBDb21tYW5kTGluZS5PUFRJT05BTCwgImFiIGhlbHAgdGV4dCIgfSwKLSAgKiA8bGk+eyAiaGVscCIsIENvbW1hbmRMaW5lLk5PX1BBUk0sIENvbW1hbmRMaW5lLk5PX0RVUFMsCi0gICogICAgICAgQ29tbWFuZExpbmUuT1BUSU9OQUwsICJkaXNwbGF5cyB0aGlzIGhlbHAgdGV4dCIgfSB9Ci0gICogPC91bD4KLSAgKgotICAqIDxwPlN0cmluZyBhcnJheSBydWxlczoKLSAgKgotICAqIDxvbD4KLSAgKiA8bGk+UG9zaXRpb25hbCByb3dzIG11c3QgYWx3YXlzIGNvbWUgZmlyc3QgaW4gdGhlIGFycmF5LiAgVGhlc2Ugcm93cyBtdXN0Ci0gICogICAgIGhhdmUgYSBuYW1lIHNwZWNpZmllZCBpbiBjb2x1bW4gMiwgZXhjZXB0IGZvciBvbmUgY2FzZS4gIElmIHlvdSB3YW50IHRvIGluZGljYXRlIHRoYXQKLSAgKiAgICAgdGhlcmUgYXJlIG5vIG9wdGlvbmFsIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB5b3Ugd291bGQgcHV0IENvbW1hbmRMaW5lLk5PX1BBUk0KLSAgKiAgICAgaW4gY29sdW1uIDIgb2YgdGhlIHBvc2l0aW9uYWwgcm93LiAgWW91IHdvdWxkIGFsc28gbmVlZCB0byBwdXQgQ29tbWFuZExpbmUuT1BUSU9OQUwKLSAgKiAgICAgaW4gY29sdW1uIDQgc2luY2UgdGhpcyByb3cgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMob3IgdGhlIG5vbi1leGlzdGVuY2Ugb2YKLSAgKiAgICAgb3B0aW9uYWwgcGFyYW1ldGVycyBhcyB0aGUgY2FzZSBtYXkgYmUpCi0gICogPGxpPk9uY2UgYSBwb3NpdGlvbmFsIHJvdyBzcGVjaWZpZXMgdGhhdCBpdCBpcyBvcHRpb25hbCwgbm8gZnVydGhlciBwb3NpdGlvbmFsIHJvd3MKLSAgKiAgICAgbWF5IGJlIHNwZWNpZmllZC4KLSAgKiA8bGk+QXQgbGVhc3Qgb25lIHBvc2l0aW9uYWwgcm93IG11c3QgYmUgc3BlY2lmaWVkLCBldmVuIGlmIGl0IGlzIHRvIGp1c3QgdG8gc3BlY2lmeSB0aGF0Ci0gICogICAgIHRoZXJlIGFyZSBubyBvcHRpb25hbCBwYXJhbWV0ZXJzLgotICAqIDxsaT5GbGFnIG5hbWVzIG11c3QgYmUgaW4gbG93ZXIgY2FzZS4gIE5vdGU6IHRoZSB1c2VyIGNhbiBzcGVjaWZ5IHVwcGVyIG9yIGxvd2VyIGNhc2UKLSAgKiAgICAgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgKiA8bGk+SWYgYSBmbGFnIGhhcyBhIHBhcmFtZXRlciB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHNob3VsZCBiZSBwdXQgaW50byBjb2x1bW4gMi4KLSAgKiAgICAgb3RoZXJ3aXNlIENvbW1hbmRMaW5lLk5PX1BBUk0gc2hvdWxkIGJlIHB1dCBpbiBjb2x1bW4gMi4KLSAgKiA8bGk+SWYgYSBmbGFnIGlzIGFsbG93ZWQgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhlbgotICAqICAgICBDb21tYW5kTGluZS5EVVBTX09LIHNob3VsZCBiZSBwdXQgaW50byBjb2x1bW4gMywgb3RoZXJ3aXNlIENvbW1hbmRMaW5lLk5PX0RVUFMKLSAgKiAgICAgc2hvdWxkIGJlIHB1dCBpbnRvIGNvbHVtbiAzLgotICAqIDxsaT5JZiBhIGZsYWcgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuIENvbW1hbmRMaW5lLlJFUVVJUkVEIHNob3VsZAotICAqICAgICBiZSBzcGVjaWZpZWQgaW4gY29sdW1uIDQsIG90aGVyd2lzZSBDb21tYW5kTGluZS5PUFRJT05BTCBzaG91bGQgYmUgc3BlY2lmaWVkLgotICAqIDxsaT5BIGhlbHAgZmxhZyBtdXN0IGJlIHNwZWNpZmllZC4KLSAgKiA8bGk+VGhlIHN0cmluZ3Mgc3BlY2lmaWVkIGluIHRoZSBmbGFncyBjb2x1bW4sIHRoZSBwYXJhbWV0ZXIgbmFtZSBjb2x1bW4sIGFuZCB0aGUKLSAgKiAgICAgaGVscCBjb2x1bW4gYXJlIGFsd2F5cyB0cmFuc2xhdGVkIHVzaW5nIHRoZSByZXNvdXJjZSBidW5kbGUgc3BlY2lmaWVkLiAgT2YKLSAgKiAgICAgY291cnNlIHRoZSBzcGVjaWFsIHN0cmluZyB2YWx1ZXMgc3VjaCBhcyBQT1NJVElPTkFMIGFuZCBOT19QQVJNIGFyZSBub3QKLSAgKiAgICAgdHJhbnNsYXRlZC4KLSAgKiA8L29sPgotICAqCi0gICogPHA+IEZsYWcgbWF0Y2hpbmcgcnVsZXM6Ci0gICogPG9sPgotICAqIDxsaT5UaGUgcGFyc2VyIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCBhIHVzZXIgc3BlY2lmaWVkIGZsYWcgd2l0aCB0aGUgbWluaW11bSBudW1iZXIKLSAgKiAgICAgb2YgcHJvZ3JhbW1lciBzcGVjaWZpZWQgZmxhZyBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBwcm9ncmFtbWVyIGhhcwotICAqICAgICBzcGVjaWZpZWQgdGhhdCB0aGUgZmxhZyBpcyAiaGVscCIgdGhlIHVzZXIgY291bGQgc3BlY2lmeSAiLWgiLCAiLWhlIiwgIi1oZWwiLCBvcgotICAqICAgICAiLWhlbHAiLiAgSWYgdGhlIHByb2dyYW1tZXIgaGFzIGFsc28gc3BlY2lmaWVkIGEgZmxhZyBjYWxsZWQgImhlbGxvIiwgdGhlCi0gICogICAgIHVzZXIgd291bGQgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIHNwZWNpZmluZyBlaXRoZXIgIi1oIiwgIi1oZSIgb3IgIi1oZWwiLCBzaW5jZQotICAqICAgICBpdCBpcyBhbWJpZ3VvdXMgd2hpY2ggZmxhZyBpcyBiZWluZyByZWZlcmVkIHRvLiAgQm90aCAiLWhlbGwiIGFuZCAiLWhlbGxvIgotICAqICAgICB3b3VsZCBiZSBvayBmb3IgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgaGVsbG8gZmxhZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAqIDxsaT5JZiBhIGZsYWcgaGFzIGEgcGFyYW1ldGVyLCB0aGUgcGFyYW1ldGVyIG1heSBiZSBpbW1lZGlhdGVseSBhZGphY2VudCB0byB0aGUgZmxhZy4KLSAgKiAgICAgRm9yIGV4YW1wbGUgaWYgImFiY2QiIGlzIHNwZWNpZmllZCBhcyBhIGZsYWcgd2l0aCBhIHBhcmFtZXRlciwgdGhlIHVzZXIgY291bGQKLSAgKiAgICAgc3BlY2lmeSB0aGUgZm9sbG93aW5nIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBvdGhlciBhbWJpZ3VvdXMgZmxhZ3MuICItYWJjZHBhcm0iLAotICAqICAgICAiLWFiY3Bhcm0iLCAiLWFicGFybSIsIG9yICItYXBhcm0iIHdoZXJlIHBhcm0gaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlIGZsYWcuCi0gICogICAgIChPZiBjb3Vyc2UgdGhlIHVzZXIgY2FuIGFsd2F5cyBwdXQgYSB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBmbGFnIGFuZCB0aGUKLSAgKiAgICAgcGFyYW1ldGVyLikKLSAgKiA8bGk+SWYgYSBmbGFnIGRvZXMgbm90IGhhdmUgYSBwYXJhbWV0ZXIgYW5kIGEgcGFyYW1ldGVyIGlzIGFkamFjZW50IHRvIGl0IHRoZW4gdGhpcwotICAqICAgICBwYXJhbWV0ZXIgaXMgaW50ZXJwcmV0ZWQgYXMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlci4gIEZvciBleGFtcGxlIGlmICJhYmNiIiBpcwotICAqICAgICBzcGVjaWZpZWQgYXMgYSBmbGFnIGFuZCB0aGUgdXNlciBzcGVjaWZpZXMgIi1hYmhlbGxvIiwgdGhlbiB0aGUgZmlyc3QgImFiIiB3aWxsIGJlCi0gICogICAgIGludGVycHJldGVkIGFzIHRoZSBmbGFnIGFuZCAiaGVsbG8iIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwb3NpdGlvbmFsCi0gICogICAgIHBhcmFtZXRlci4KLSAgKiA8L29sPgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotKiovCi0KLXB1YmxpYyBjbGFzcyBDb21tYW5kTGluZQotewotICAvLyBDb25zdGFudCBzdHJpbmdzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIHVzZSBpbiB0aGVpciBmbGFnc19pbmZvIGlucHV0IGFycmF5LgotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBvciBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyByZXF1aXJlZC4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVJUkVEICAgPSAicmVxdWlyZWQiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBvciBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBvcHRpb25hbC4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QVElPTkFMICAgPSAib3B0aW9uYWwiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBtYXkgYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgKiBOb3RlOiBUaGlzIHN0cmluZyBoYXMgbm8gbWVhbmluZyBmb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVQU19PSyAgICA9ICJkdXBzX29rIjsKLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCB0aGlzIGZsYWcgbWF5IG5vdCBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgICAqIE5vdGU6IFRoaXMgc3RyaW5nIGhhcyBubyBtZWFuaW5nIGZvciBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT19EVVBTICAgID0gIm5vX2R1cHMiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IGEgcm93IGlzIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgcm93LgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9TSVRJT05BTCA9ICIiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IGEgZmxhZyBoYXMgbm8gcGFyYW1ldGVyLiAgRm9yIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0aGlzCi0gICAgKiBzdHJpbmcgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIG5vIG9wdGlvbmFsIHBhcmFtZXRlcnMuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT19QQVJNICAgID0gIiI7Ci0gIAotICAvKioKLSAgICAqIEBwYXJhbSBmbGFnc19pbmZvIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQotICAgICogICAgICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lIHBhcnNlci4gIFNlZSB0aGUgY2xhc3MgZGVzY3JpcHRpb24gZm9yIGEKLSAgICAqICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gb2Ygd2hhdCB0aGlzIHN0cmluZyBhcnJheSBzaG91bGQgbG9vayBsaWtlLgotICAgICogQHBhcmFtIGhlbHBfZmxhZyAgVGhpcyBzdHJpbmcgaW5kaWNhdGVzIHdoaWNoIGZsYWcgaW4gdGhlIGZsYWdzX2luZm8KLSAgICAqICAgICAgICAgICAgICAgICAgIGFycmF5IGlzIHRoZSBoZWxwIGZsYWcuCi0gICAgKiBAcGFyYW0gdG9vbF9uYW1lICBUaGlzIHN0cmluZyBpbmRpY2F0ZXMgdGhlIG5hbWUgb2YgdGhlIHRvb2wgdGhhdCB0aGlzCi0gICAgKiAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpbmUgcGFyc2VyIGlzIGJlaW5nIHVzZWQgZm9yLiAgVGhpcyBzdHJpbmcKLSAgICAqICAgICAgICAgICAgICAgICAgIGlzIG9ubHkgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBoZWxwIHRleHQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZExpbmUoIFN0cmluZ1tdW10gICAgIGZsYWdzX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgIGhlbHBfZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgdG9vbF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZSBmbGFnTWVzc2FnZXMgKQotICAgICAgICAgICAgICAgICAgIAotICAgIHRocm93cyBJbnRlcm5hbEVycm9yRXhjCi0gIHsKLSAgICB0aGlzLmZsYWdzX2luZm8gICA9IGZsYWdzX2luZm87Ci0gICAgdGhpcy5oZWxwX2ZsYWcgICAgPSBoZWxwX2ZsYWc7Ci0gICAgdGhpcy50b29sX25hbWUgICAgPSB0b29sX25hbWU7Ci0gICAgdGhpcy5mbGFnTWVzc2FnZXMgPSBmbGFnTWVzc2FnZXM7Ci0gICAgCi0gICAgbWVzc2FnZXMgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmUuY29tbWFuZGxpbmUiICk7Ci0gICAgdmVyaWZ5X2ZsYWdzX2luZm8oKTsKLSAgfQotCi0gIC8qKgotICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBwYXJzZSBhIGNvbW1hbmQgbGluZS4KLSAgICAqIEBwYXJhbSBhcmdzIFRoaXMgaXMgdGhlIHN0cmluZyBhcnJheSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgKiBAdGhyb3dzIEZsYWdfZXJyb3IgSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY29tbWFuZCBsaW5lIGluY29ycmVjdGx5Ci0gICAgKiAgICAgICAgICAgICAgICAgICAgYSBGbGFnX2Vycm9yIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4gIFVzZSBnZXRNZXNzYWdlCi0gICAgKiAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGEgZGVzY3JpcHRpb24gb2YgdGhlIHVzZXIgZXJyb3IuCi0gICAgKgotICAgICogQHRocm93cyBIZWxwX3NwZWNpZmllZCBJZiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIGhlbHAgZmxhZyB0aGlzIGV4Y2VwdGlvbgotICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRocm93bi4gIFVzZSBnZXRNZXNzYWdlIHRvIGdldCBhIGZ1bGx5Ci0gICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCBzeW50YXggZGVzY3JpcHRpb24gb2YgdGhpcyBjb21tYW5kIGxpbmUuCi0gICoqLwotICBwdWJsaWMgdm9pZCBjaGVja19mbGFncyggU3RyaW5nW10gYXJncyApIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICBmbGFnc19zcGVjaWZpZWQgPSBuZXcgVmVjdG9yW2ZsYWdzX2luZm8ubGVuZ3RoXTsKLQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgYm9vbGVhbiBwcm9jZXNzZWRfdGhlX25leHRfYXJnID0gcHJvY2Vzc19hcmcoIGFyZ3MsIGluZGV4ICk7Ci0gICAgICBpZiggcHJvY2Vzc2VkX3RoZV9uZXh0X2FyZyA9PSB0cnVlICkgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICAvLyBJZiBoZWxwIHdhcyBzcGVjaWZpZWQgd2Ugd2lsbCBub3QgY2hlY2sgdGhlIHJlZ3VsYXIgcnVsZXMuCi0gICAgaWYoICFmbGFnX3NwZWNpZmllZCggaGVscF9mbGFnICkgKQotICAgIHsKLSAgICAgIC8vIENoZWNrIGZvciBmbGFncyBicmVha2luZyB0aGUgcnVsZXMgc3BlY2lmaWVkIGluIGZsYWdzX2luZm8uCi0gICAgICBjaGVja19ydWxlcygpOwotCi0gICAgICAvLyBDYWxsIHN1YmNsYXNzZWQgbWV0aG9kIHRvIHNlZSBpZiBtb3JlIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQuCi0gICAgICBtb3JlX3Byb2Nlc3NpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXQKLSAgICAqIHRoZSB2ZXJ5IGVuZCBvZiBjaGVja19mbGFncyBtZXRob2QuICBJdCBpcyBpbnRlbmRlZCB0aGF0IHN1YmNsYXNzZXMgd291bGQKLSAgICAqIHBlcmZvcm0gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgY2hlY2tpbmcgaGVyZS4KLSAgKiovCi0gIHByb3RlY3RlZCB2b2lkIG1vcmVfcHJvY2Vzc2luZygpIHRocm93cyBGbGFnX2Vycm9yLCBJbnRlcm5hbEVycm9yRXhjCi0gIHsKLSAgfQotCi0gIC8qKgotICAgICogT25jZSB0aGUgY29tbWFuZCBsaW5lIGhhcyBiZWVuIHBhcnNlZCBieSBjYWxsaW5nIGNoZWNrX2ZsYWdzIGEKLSAgICAqIGNhbGwgY2FuIGJlIG1hZGUgdG8gdGhpcyBtZXRob2QgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIGZsYWcuCi0gICAgKiBJZiB0aGUgZmxhZyB3YXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG51bGwgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAqIElmIHRoZSBmbGFnIHdhcyBzcGVjaWZpZWQsIGJ1dCBoYXMgbm8gcGFyYW1ldGVycyBhIHZhbGlkIHZlY3RvciB3aWxsIGJlCi0gICAgKiByZXR1cm5lZCBjb250YWluaW5nIGEgbnVsbC4KLSAgKiovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRfZmxhZ19wYXJtcyggU3RyaW5nIGZsYWcgKQotICB7Ci0gICAgaW50ICAgICByb3cgICAgICAgID0gMDsKLSAgICBib29sZWFuIGZsYWdfZm91bmQgPSBmYWxzZTsKLQotICAgIHdoaWxlKCBmbGFnX2ZvdW5kID09IGZhbHNlICYmIHJvdyA8IGZsYWdzX2luZm8ubGVuZ3RoICkKLSAgICB7Ci0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXS5lcXVhbHMoIGZsYWcgKSApCi0gICAgICB7Ci0gICAgICAgIGZsYWdfZm91bmQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByb3crKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiggZmxhZ19mb3VuZCA9PSB0cnVlICkgCi0gICAgewotICAgICAgVmVjdG9yIHBhcm1zID0gZmxhZ3Nfc3BlY2lmaWVkW3Jvd107Ci0gICAgICByZXR1cm4gcGFybXMgPT0gbnVsbCA/IG51bGwgOiAoU3RyaW5nW10pKHBhcm1zLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gZ2V0IGFsbCBvZiB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgotICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBib3RoIHRoZSByZXF1aXJlZCBwb3NpdGlvbmFscyBhbmQgdGhlCi0gICAgKiBvcHRpb25hbCBwb3NpdGlvbmFscyBpbiB0aGF0IG9yZGVyLiAgSWYgbm8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzCi0gICAgKiB3ZXJlIHNwZWNpZmllZCBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICoqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0X3Bvc2l0aW9uYWxzKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGZsYWcgd2FzIHNwZWNpZmllZCBieSB0aGUgdXNlcgotICAgICogb3RoZXJ3aXNlIGZhbHNlIGlzIHJldHVybmVkLgotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gZmxhZ19zcGVjaWZpZWQoIFN0cmluZyBmbGFnICkKLSAgewotICAgIHJldHVybiBnZXRfZmxhZ19wYXJtcyggZmxhZyApICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZnVsbHkgZm9ybWF0ZWQgaGVscCB0ZXh0IHN5bnRheCBmb3IgdGhpcwotICAgICogY29tbWFuZCBsaW5lLgotICAqKi8KLSAgcHVibGljIFN0cmluZyBnZXRfaGVscF90ZXh0KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBoZWxwX3RleHQgID0gbmV3IFN0cmluZ0J1ZmZlcig0MDApOwotICAgIGludCAgICAgICAgICBoZWxwX3dpZHRoID0gSEVMUF9MSU5FX0xFTiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gICAgICAgICAgICAgIC8vIGJsYW5rcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICAgICAgICAgICAgICAvLyBkYXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZmxhZ19zaXplIC0gIC8vIGZsYWcgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgICAgICAgICAgICAgLy8gYmxhbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9uYW1lX3NpemUgLSAgLy8gbmFtZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTsgICAgICAgICAgICAgICAvLyBibGFuawotCi0gICAgaGVscF90ZXh0LmFwcGVuZCggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0lORk9fU1lOVEFYICkgKwotICAgICAgICAgICAgICAgICAgICAgICI6ICIgKyB0b29sX25hbWUgKyAiICIgKTsKLQotICAgIC8vIERpc3BsYXkgdGhlIHJlcXVpcmVkIHBvc2l0aW9uYWxzIGlmIGFueS4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcmVxdWlyZWRfcG9zaXRpb25hbHM7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9baW5kZXhdW05BTUVfQ09MXSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgIiApOwotICAgIH0KLQotICAgIGhlbHBfdGV4dC5hcHBlbmQoICJbIiArIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9GTEFHUyApICsKLSAgICAgICAgICAgICAgICAgICAgICAiXSAiICk7Ci0KLSAgICBpZiggb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZCA9PSB0cnVlICkKLSAgICB7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW29wdGlvbmFsX2xpc3RfaW5kZXhdW05BTUVfQ09MXSApICk7Ci0gICAgfQotCi0gICAgaGVscF90ZXh0LmFwcGVuZCggIlxuICAiICsgbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0lORk9fV0hFUkUgKSArICJcbiIgKTsKLQotICAgIC8vIENyZWF0ZSBvbmUgbGluZSBvZiBkZXNjcmlwdGlvbiBmb3IgZWFjaCBwYXJhbWV0ZXIKLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIFN0cmluZyBjb2x1bW5JZCAgID0gZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXTsKLSAgICAgIFN0cmluZyBjb2x1bW5OYW1lID0gY29sdW1uSWQgPT0gTk9fUEFSTSA/ICIiIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggY29sdW1uSWQgKTsKLQotICAgICAgU3RyaW5nIGZsYWdJZCAgICAgPSBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdOwotICAgICAgU3RyaW5nIGZsYWdOYW1lICAgPSBmbGFnSWQgPT0gUE9TSVRJT05BTCA/IFBPU0lUSU9OQUwgOiBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKGZsYWdJZCk7Ci0KLSAgICAgIGludCBmbGFnX3BhZGRpbmcgPSBtYXhfZmxhZ19zaXplIC0gZmxhZ05hbWUubGVuZ3RoKCk7Ci0gICAgICBpbnQgbmFtZV9wYWRkaW5nID0gbWF4X25hbWVfc2l6ZSAtIGNvbHVtbk5hbWUubGVuZ3RoKCk7Ci0KLSAgICAgIC8vIFNraXAgdGhpcyByb3cgaWYgdGhpcyBpcyBhIG1hcmtlciBmb3Igbm8gb3B0aW9uYWwgcG9zaXRpb25hbHMuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICYmCi0gICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSA9PSBOT19QQVJNICkgY29udGludWU7Ci0KLSAgICAgIGlmKCBmbGFnTmFtZSA9PSBQT1NJVElPTkFMICkKLSAgICAgIHsKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggZ2V0QmxhbmtzKDMgKSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCAiICAtIiArIGZsYWdOYW1lICk7Ci0gICAgICB9Ci0KLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGdldEJsYW5rcyggZmxhZ19wYWRkaW5nICsgMSApICk7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBjb2x1bW5OYW1lICk7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBnZXRCbGFua3MoIG5hbWVfcGFkZGluZyArIDEgKSApOwotCi0gICAgICBTdHJpbmcgICBjb2x1bW5IZWxwID0gZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0hFTFBfQ09MXSApOwotICAgICAgU3RyaW5nW10gc3BsaXRfaGVscF90ZXh0Ci0gICAgICAgID0gU3RyaW5nVXRpbHMuc3BsaXR0ZXIoIGNvbHVtbkhlbHAsIGhlbHBfd2lkdGggKTsKLQotICAgICAgaWYoIHNwbGl0X2hlbHBfdGV4dC5sZW5ndGggPiAwICkKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggc3BsaXRfaGVscF90ZXh0WzBdICsgIlxuIiApOwotICAgICAgZWxzZQotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCAiXG4iICk7Ci0KLSAgICAgIGZvciggaW50IGluZGV4ID0gMTsgaW5kZXggPCBzcGxpdF9oZWxwX3RleHQubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggZ2V0QmxhbmtzKCBIRUxQX0xJTkVfTEVOIC0gaGVscF93aWR0aCApICk7Ci0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIHNwbGl0X2hlbHBfdGV4dFtpbmRleF0gKyAiXG4iICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoICJcbiIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIiIgKyBoZWxwX3RleHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAgUmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYmxhbmtzLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmxhbmtzKCBpbnQgY291bnQgKQotICB7Ci0gIAljaGFyW10gYmxhbmtzID0gbmV3IGNoYXJbY291bnRdOwotICAJQXJyYXlzLmZpbGwoIGJsYW5rcywgMCwgY291bnQsICcgJyApOwotICAJCi0gIAlyZXR1cm4gbmV3IFN0cmluZyggYmxhbmtzICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgZm9yIGFsbCBjb21tYW5kIGxpbmUgZXhjZXB0aW9uIGNsYXNzZXMuCi0gICoqLwotICBzdGF0aWMgcHVibGljIGNsYXNzIEVycm9yRXhjIGV4dGVuZHMgRXhjZXB0aW9uCi0gIHsKLSAgCS8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzU2NzMxNzI1OTc5MzcyMEw7Ci0KLQlwdWJsaWMgRXJyb3JFeGMoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmdbXSBhcmdzICkKLSAgCXsKLSAgCSAgc3VwZXIoIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCBtZXNzYWdlLCBhcmdzICkgKTsKLSAgCX0KLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBjbGFzcyB3aWxsIGJlIHRocm93biB3aGVuIGFuIGludGVybmFsIGVycm9yIGlzIGRldGVjdGVkLgotICAgICogVGhpcyB1c3VhbGx5IGhhcHBlbnMgaWYgdGhlIGZsYWcgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gd2FzCi0gICAgKiBzcGVjaWZpZWQgaW5jb3JyZWN0bHkuCi0gICoqLwotICBzdGF0aWMgcHVibGljIGNsYXNzIEludGVybmFsRXJyb3JFeGMgZXh0ZW5kcyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgeyAgCQotICAJLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU4NDEwNjIxMTM2NjE0NDUwTDsKLQotCXB1YmxpYyBJbnRlcm5hbEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nW10gYXJncyApCi0gIAl7Ci0gIAkgIHN1cGVyKCBNZXNzYWdlRm9ybWF0LmZvcm1hdCggbWVzc2FnZSwgYXJncyApICk7Ci0gIAl9Ci0gIAkKLSAgCXB1YmxpYyBJbnRlcm5hbEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSApCi0gIAl7Ci0gIAkgIHRoaXMoIG1lc3NhZ2UsIChTdHJpbmdbXSludWxsICk7Ci0gIAl9Ci0gIAkKLSAgCXB1YmxpYyBJbnRlcm5hbEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIGFyZyApCi0gIAl7Ci0gIAkgIHRoaXMoIG1lc3NhZ2UsIG5ldyBTdHJpbmdbXXsgYXJnIH0gKTsKLSAgCX0KLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBjbGFzcyB3aWxsIGJlIHRocm93biBpZiBhIHVzZXIgZXJyb3Igb2NjdXJzIHdoaWxlIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZS4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgY2xhc3MgRmxhZ19lcnJvciBleHRlbmRzIEVycm9yRXhjCi0gIHsKLSAgICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM4MzI2MjE3NzY4Nzc2NjM1MzdMOwotCi0JcHVibGljIEZsYWdfZXJyb3IoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmdbXSBhcmdzICkKLSAgICB7Ci0gICAgICBzdXBlciggbWVzc2FnZSwgYXJncyApOwotICAgIH0KLQotICAgIHB1YmxpYyBGbGFnX2Vycm9yKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIGFyZyApCi0gICAgewotICAgICAgc3VwZXIoIG1lc3NhZ2UsIG5ldyBTdHJpbmdbXXsgYXJnIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxhZ19lcnJvciggU3RyaW5nIG1lc3NhZ2UgKQotICAgIHsKLSAgICAgIHN1cGVyKCBtZXNzYWdlLCBudWxsICk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgKiBUcmllcyB0byBwcm9jZXNzIGEgc2luZ2xlIGZsYWcgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgICAqIEBwYXJhbSAgYXJncyAgICAgIEFsbCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuCi0gICAgKiBAcGFyYW0gIGFyZ19pbmRleCBUaGlzIGlzIHRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQuCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgd2UgYXJlIHByb2Nlc3NpbmcgaXMgYSBmbGFnIHRoYXQgaGFzIGEKLSAgICAqICAgICAgICAgcGFyYW1ldGVyIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiB0aGUgbmV4dCBhcmd1bWVudC4KLSAgKiovCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzX2FyZyggU3RyaW5nW10gYXJncywgaW50IGFyZ19pbmRleCApIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICBib29sZWFuIHByb2Nlc3NlZF9uZXh0X2FyZyA9IGZhbHNlOwotCi0gICAgaWYoIGFyZ3NbYXJnX2luZGV4XS5jaGFyQXQoMCkgPT0gJy0nICkKLSAgICB7Ci0gICAgICAvLyBUaGlzIGlzIHRoZSBzdGFydCBvZiBhIGZsYWcuCi0gICAgICBpbnQgZmxhZ19pbmRleCA9IDE7Ci0gICAgICBpbnQgaW5mb19pbmRleCA9IGdldF9pbmZvX2luZGV4KCBhcmdzW2FyZ19pbmRleF0sIGZsYWdfaW5kZXggKTsKLSAgICAgIGludCBtYXhfaW5kZXggID0gZ2V0X21heF9pbmRleCggYXJnc1thcmdfaW5kZXhdLCBmbGFnX2luZGV4LCBpbmZvX2luZGV4ICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW2luZm9faW5kZXhdW05BTUVfQ09MXSAhPSBOT19QQVJNICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBmbGFnIHRha2VzIGEgcGFyYW1ldGVyIHNvIGNoZWNrIGlmIGl0IGlzIHN0dWNrIHRvIHRoaXMKLSAgICAgICAgLy8gYXJnLgotICAgICAgICBpZiggbWF4X2luZGV4IDwgYXJnc1thcmdfaW5kZXhdLmxlbmd0aCgpICkKLSAgICAgICAgewotICAgICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdfaW5kZXhdLnN1YnN0cmluZyggbWF4X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnX2luZGV4XS5sZW5ndGgoKSApICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhpcyBmbGFnIGhhcyBhIHBhcmFtZXRlciBhbmQgaXQgd2Fzbid0IHN0dWNrIHRvIHRoZSBmbGFnLAotICAgICAgICAgIC8vIHNvIHdlIHdpbGwgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBuZXh0IGFyZy4KLSAgICAgICAgICBpZiggYXJnX2luZGV4KzEgPCBhcmdzLmxlbmd0aCAmJgotICAgICAgICAgICAgICBhcmdzW2FyZ19pbmRleCsxXS5jaGFyQXQoMCkgIT0gJy0nICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBmb3VuZCBhbiBwYXJhbWV0ZXIgaW4gdGhlIG5leHQgc3RyaW5nIHNvIHdlIHdpbGwgdXNlIHRoaXMKLSAgICAgICAgICAgIC8vIG9uZSBhcyBhIHBhcmFtZXRlciBmb3IgdGhpcyBmbGFnLiAgTm90ZTogaWYgd2FzIG5vIHBhcmFtZXRlcgotICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGZsYWcgYXQgYWxsLCB0aGUgZXJyb3Igd2lsbCBiZSBjYXVnaHQgaW4gdGhlCi0gICAgICAgICAgICAvLyBjaGVja19ydWxlcyBtZXRob2QuCi0gICAgICAgICAgICBhZGRfZmxhZ19wYXJtKCBpbmZvX2luZGV4LCBhcmdzW2FyZ19pbmRleCsxXSApOwotICAgICAgICAgICAgcHJvY2Vzc2VkX25leHRfYXJnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEVycm9yIG1pc3NpbmcgcGFyYW1hdGVyLiBUaGlzIGVycm9yIGlzIGNhdWdodCBieSBjaGVja19ydWxlcy4KLSAgICAgICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsIG51bGwgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGZsYWcgZG9lcyBub3QgaGF2ZSBhIHBhcmFtZXRlciBzbyB3ZSB3aWxsIGFkZCBhIG51bGwuCi0gICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsIG51bGwgKTsKLQotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBzdHVjayB0byB0aGlzIGZsYWcuCi0gICAgICAgIGlmKCBtYXhfaW5kZXggPCBhcmdzW2FyZ19pbmRleF0ubGVuZ3RoKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgYWRkX3Bvc2l0aW9uYWwoIGFyZ3NbYXJnX2luZGV4XS5zdWJzdHJpbmcoIG1heF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdfaW5kZXhdLmxlbmd0aCgpICkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhpcyBpcyBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyLgotICAgICAgYWRkX3Bvc2l0aW9uYWwoIGFyZ3NbYXJnX2luZGV4XSApOwotICAgIH0KLQotICAgIHJldHVybiBwcm9jZXNzZWRfbmV4dF9hcmc7Ci0gIH0KLQotICAvKioKLSAgICAqIEZpbmRzIHRoZSByb3cgZm9yIHRoZSBmbGFnIHRoYXQgdW5pcXVlbHkgbWF0Y2hlZCB0aGlzIGZsYWcgc3RyLgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmbGFnc19pbmZvIGluZGV4IG9mIHRoZSBtYXRjaGluZyBmbGFnLgotICAqKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0X2luZm9faW5kZXgoIFN0cmluZyBmbGFnX3N0ciwgaW50IHN0YXJ0X2luZGV4ICkKLSAgICB0aHJvd3MgRmxhZ19lcnJvcgotICB7Ci0gICAgLy9pbnQgaW5mb19zdGFydCAgPSAxOwotICAgIC8vaW50IGluZm9fZW5kICAgID0gZmxhZ3NfaW5mby5sZW5ndGg7Ci0gICAgaW50IGluZm9faW5kZXg7Ci0gICAgaW50IGZvdW5kX2NvdW50ID0gMDsKLSAgICBpbnQgaW5mb19jb2xfaW5kZXggPSAwOwotICAgIGludCBsYXN0X2luZm9faW5kZXggPSAwOwotCi0gICAgQml0U2V0IGZsYWdzX3JlamVjdGVkID0gbmV3IEJpdFNldCgpOwotCi0gICAgLy8gTG9vcCBvdmVyIGVhY2ggY2hhciBpbiBmbGFnX3N0ci4gIE5vdGU6IHdlIHdpbGwgcHJvYmFibHkgYmFpbCBlYXJseS4KLSAgICBmb3IoIGludCBmbGFnX2NvbF9pbmRleCA9IHN0YXJ0X2luZGV4OyBmbGFnX2NvbF9pbmRleCA8IGZsYWdfc3RyLmxlbmd0aCgpOyBmbGFnX2NvbF9pbmRleCsrICkKLSAgICB7Ci0gICAgICAvLyBMb29wIG92ZXIgZWFjaCBmbGFnIGluIGZsYWdfaW5mbwotICAgICAgZm9yKCBpbmZvX2luZGV4ID0gMDsgaW5mb19pbmRleCA8IGZsYWdzX2luZm8ubGVuZ3RoOyBpbmZvX2luZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgZmxhZ0lkICAgPSBmbGFnc19pbmZvW2luZm9faW5kZXhdW0ZMQUdfQ09MXTsKLSAgICAgICAgU3RyaW5nIGZsYWdOYW1lID0gZmxhZ0lkID09IFBPU0lUSU9OQUwgPyBQT1NJVElPTkFMIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ0lkICk7Ci0KLSAgICAgICAgaWYoIGZsYWdzX3JlamVjdGVkLmdldCggaW5mb19pbmRleCApID09IGZhbHNlICYmCi0gICAgICAgICAgICBpbmZvX2NvbF9pbmRleCA8IGZsYWdOYW1lLmxlbmd0aCgpICYmCi0gICAgICAgICAgICAgIENoYXJhY3Rlci50b0xvd2VyQ2FzZShmbGFnX3N0ci5jaGFyQXQoZmxhZ19jb2xfaW5kZXgpKSA9PQotICAgICAgICAgICAgICBmbGFnTmFtZS5jaGFyQXQoaW5mb19jb2xfaW5kZXgpICkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kX2NvdW50Kys7Ci0gICAgICAgICAgbGFzdF9pbmZvX2luZGV4ID0gaW5mb19pbmRleDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmbGFnc19yZWplY3RlZC5zZXQoIGluZm9faW5kZXggKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiggZm91bmRfY291bnQgPT0gMSApCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4KLSAgICAgICAgcmV0dXJuIGxhc3RfaW5mb19pbmRleDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGZvdW5kX2NvdW50ID09IDAgKQotICAgICAgewotICAgICAgICAvLyBGbGFnIG5vdCBmb3VuZCBhdCBhbGwuCi0gICAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRkxBR19OT1RfRk9VTkQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfc3RyLnN1YnN0cmluZyggc3RhcnRfaW5kZXggKSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNb3JlIHRoYW4gb25lIGZsYWcgd2FzIGZvdW5kIHdpdGggdGhpcyBjaGFyIHNvIHdlIHdpbGwgZ28gdG8gdGhlCi0gICAgICAgIC8vIG5leHQgY2hhciB0byB1bmlxdWVseSBtYXRjaCBpdC4KLSAgICAgICAgaW5mb19jb2xfaW5kZXgrKzsKLSAgICAgICAgLy9pbmZvX3N0YXJ0ID0gbGFzdF9pbmZvX2luZGV4IC0gZm91bmRfY291bnQgKyAxOwotICAgICAgICAvL2luZm9fZW5kICAgPSBsYXN0X2luZm9faW5kZXggKyAxOwotICAgICAgICBmb3VuZF9jb3VudCA9IDA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIG9ubHkgd2F5IHRvIGdldCB0byB0aGlzIGNvZGUgaXMgaWYgdGhlIGxvb3AgZXhpdGVkIHdpdGgKLSAgICAvLyB0aGUgZm91bmRfY291bnQgZ3JlYXRlciB0aGFuIDEuICBUaGVyZWZvcmUsIHRoZSBmbGFnIHNwZWNpZmllZCBpcwotICAgIC8vIGFtYmlndW91cy4KLSAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0FNQklHVU9VU19GTEFHICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfc3RyLnN1YnN0cmluZyggc3RhcnRfaW5kZXgpICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1hdGNoIGFzIG1hbnkgY2hhcmFjdGVycyBhcyBwb3NzaWJsZSBvZiB0aGUgdXNlcgotICAgICogc3BlY2lmaWVkIGZsYWcgd2l0aCB0aGUgbWF0Y2hlZCBmbGFnIHN0cmluZy4KLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgbWF0Y2hpbmcgZmxhZyBjaGFyYXJhY3Rlci4KLSAgKiovCi0gIHByaXZhdGUgaW50IGdldF9tYXhfaW5kZXgoIFN0cmluZyBmbGFnX3N0ciwgaW50IGZsYWdfc3RhcnQsIGludCBpbmZvX2luZGV4ICkKLSAgewotICAgIGludCBmbGFnX2NvbF9pbmRleCA9IGZsYWdfc3RhcnQ7Ci0gICAgaW50IGluZm9fY29sX2luZGV4ID0gMDsKLQotICAgIFN0cmluZyBpbmZvX3N0ciA9IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9baW5mb19pbmRleF1bRkxBR19DT0xdICk7Ci0KLSAgICB3aGlsZSggZmxhZ19jb2xfaW5kZXggPCBmbGFnX3N0ci5sZW5ndGgoKSAmJgotICAgICAgICAgICBpbmZvX2NvbF9pbmRleCA8IGluZm9fc3RyLmxlbmd0aCgpICkKLSAgICB7Ci0gICAgICBpZiggQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKCBmbGFnX3N0ci5jaGFyQXQoZmxhZ19jb2xfaW5kZXgpICkgIT0KLSAgICAgICAgICBpbmZvX3N0ci5jaGFyQXQoaW5mb19jb2xfaW5kZXgpICkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGZsYWdfY29sX2luZGV4Kys7Ci0gICAgICBpbmZvX2NvbF9pbmRleCsrOwotICAgIH0KLQotICAgIHJldHVybiBmbGFnX2NvbF9pbmRleDsKLSAgfQotCi0gIC8qKgotICAgICogQWRkcyBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIHRvIGZsYWdzX3NwZWNpZmllZC4KLSAgKiovCi0gIHByaXZhdGUgdm9pZCBhZGRfcG9zaXRpb25hbCggU3RyaW5nIHBvc2l0aW9uYWxfcGFybSApCi0gIHsKLSAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXSA9PSBudWxsICkKLSAgICAgIGZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10gPSBuZXcgVmVjdG9yKDMpOwotCi0gICAgZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXS5hZGQoIHBvc2l0aW9uYWxfcGFybSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBBZGRzIGEgZmxhZyBhbmQgaXRzIHBhcmFtZXRlciB0byBmbGFnc19zcGVjaWZpZWQuICBJZiBvbmx5IHRoZQotICAgICogZmxhZyB3YXMgc3BlY2lmaWVkLCB0aGVuIGEgbnVsbCBzaG91bGQgYmUgcGFzc2VkIHRvIGZsYWdfcGFybS4KLSAgKiovCi0gIHByaXZhdGUgdm9pZCBhZGRfZmxhZ19wYXJtKCBpbnQgZmxhZ19pbmRleCwgU3RyaW5nIGZsYWdfcGFybSApCi0gICAgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIGlmKCBmbGFnc19pbmZvW2ZsYWdfaW5kZXhdW0RVUF9DT0xdID09IE5PX0RVUFMgJiYKLSAgICAgICAgZmxhZ3Nfc3BlY2lmaWVkW2ZsYWdfaW5kZXhdICE9IG51bGwgKQotICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tmbGFnX2luZGV4XVtGTEFHX0NPTF0gKSApOwotCi0gICAgaWYoIGZsYWdzX3NwZWNpZmllZFtmbGFnX2luZGV4XSA9PSBudWxsICkKLSAgICAgIGZsYWdzX3NwZWNpZmllZFtmbGFnX2luZGV4XSA9IG5ldyBWZWN0b3IoMyk7Ci0KLSAgICBmbGFnc19zcGVjaWZpZWRbZmxhZ19pbmRleF0uYWRkKCBmbGFnX3Bhcm0gKTsKLSAgfQotCi0gIC8qKgotICAgICogQ2hlY2tzIHRoYXQgdGhlIHVzZXIgaGFzbid0IGJyb2tlbiBhbnkgY29tbWFuZCBsaW5lIHJ1bGVzLgotICAqKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrX3J1bGVzKCkgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIC8vIENoZWNrIHRoYXQgYWxsIG9mIHRoZSByZXF1aXJlZCBwb3NpdGlvbmFscyB3ZXJlIHNwZWNpZmllZC4KLSAgICBpbnQgcG9zaXRpb25hbF9jb3VudCA9IDA7Ci0KLSAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBwb3NpdGlvbmFsX2NvdW50ID0gZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXS5zaXplKCk7Ci0gICAgfQotCi0gICAgaWYoIHJlcXVpcmVkX3Bvc2l0aW9uYWxzID4gcG9zaXRpb25hbF9jb3VudCApCi0gICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX01JU1NJTkdfUE9TSVRJT05BTCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3JlcXVpcmVkX3Bvc2l0aW9uYWxzLTFdW05BTUVfQ09MXSApICk7Ci0KLSAgICBlbHNlIGlmKCByZXF1aXJlZF9wb3NpdGlvbmFscyA8IHBvc2l0aW9uYWxfY291bnQgJiYKLSAgICAgICAgICAgICBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkID09IGZhbHNlICkKLSAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfVE9PX01BTllfUE9TSVRJT05BTFMgKSApOwotCi0gICAgZm9yKCBpbnQgcm93ID0gMDsgcm93IDwgZmxhZ3NfaW5mby5sZW5ndGg7IHJvdysrICkKLSAgICB7Ci0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICkgY29udGludWU7Ci0KLSAgICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbcm93XSA9PSBudWxsICYmCi0gICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gPT0gUkVRVUlSRUQgKQotICAgICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX01JU1NJTkdfUkVRVUlSRURfRkxBRyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gKSApOwotCi0gICAgICBpbnQgcGFybV9jb3VudCA9IDA7Ci0KLSAgICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbcm93XSAhPSBudWxsICkgcGFybV9jb3VudCA9IGZsYWdzX3NwZWNpZmllZFtyb3ddLnNpemUoKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIHRvbyBtYW55IGZsYWcgcGFyYW1ldGVycy4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gPT0gTk9fRFVQUyAmJiBwYXJtX2NvdW50ID4gMSApCi0gICAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApICk7Ci0KLSAgICAgIC8vIENoZWNrIGZvciBtaXNzaW5nIGZsYWcgcGFyYW1ldGVyLgotICAgICAgaWYoIHBhcm1fY291bnQgPiAwICYmIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gIT0gTk9fUEFSTSApCi0gICAgICB7Ci0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBmbGFnc19zcGVjaWZpZWRbcm93XS5zaXplKCk7IGluZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIGZsYWdzX3NwZWNpZmllZFtyb3ddLmVsZW1lbnRBdChpbmRleCkgPT0gbnVsbCApCi0gICAgICAgICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX01JU1NJTkdfRkxBR19QQVJBTUVURVIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdICkgfSApOwotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHZlcmlmaWVzIHRoYXQgYSBwcm9wZXIgZmxhZ3NfaW5mbyBzdHJpbmcgYXJyYXkgd2FzIHBhc3NlZAotICAgICogdG8gdXMgYnkgdGhlIHByb2dyYW1tZXIuCi0gICoqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5X2ZsYWdzX2luZm8oKSB0aHJvd3MgSW50ZXJuYWxFcnJvckV4YwotICB7Ci0gICAgYm9vbGVhbiBkb25lX3Bvc2l0aW9uYWxzID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBoZWxwX3NwZWNpZmllZCAgID0gZmFsc2U7Ci0KLSAgICByZXF1aXJlZF9wb3NpdGlvbmFscyA9IDA7Ci0gICAgb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZCA9IGZhbHNlOwotICAgIG9wdGlvbmFsX2xpc3RfaW5kZXggPSAtMTsKLSAgICBtYXhfZmxhZ19zaXplID0gMDsKLSAgICBtYXhfbmFtZV9zaXplID0gMDsKLQotICAgIGlmKCBmbGFnc19pbmZvID09IG51bGwgfHwgZmxhZ3NfaW5mby5sZW5ndGggPT0gMCApCi0gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX05PX0ZMQUdTX0RBVEFfU1BFQ0lGSUVEICApICk7Ci0KLSAgICBpZiggZmxhZ3NfaW5mb1tQT1NJVElPTkFMX1JPV10gIT0gbnVsbCAmJgotICAgICAgICBmbGFnc19pbmZvW1BPU0lUSU9OQUxfUk9XXS5sZW5ndGggPiAwICYmCi0gICAgICAgIGZsYWdzX2luZm9bUE9TSVRJT05BTF9ST1ddW0ZMQUdfQ09MXSAhPSBQT1NJVElPTkFMICkKLSAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRklSU1RfRkxBR19OT1RfUE9TSVRJT05BTCApICk7Ci0KLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd10gPT0gbnVsbCApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTlVMTF9GTEFHX1JPVyApICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd10ubGVuZ3RoICE9IDUgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9ST1dfU0laRSApICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IG51bGwgfHwKLSAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdID09IG51bGwgfHwKLSAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bSEVMUF9DT0xdID09IG51bGwgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX05VTExfSU5fUk9XICkgKTsKLQotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0uZXF1YWxzKCBoZWxwX2ZsYWcgKSApIGhlbHBfc3BlY2lmaWVkID0gdHJ1ZTsKLQotICAgICAgU3RyaW5nIGZsYWdJZCAgID0gZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXTsKLSAgICAgIFN0cmluZyBuYW1lSWQgICA9IGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF07Ci0KLSAgICAgIFN0cmluZyBmbGFnX2NvbCA9IGZsYWdJZCA9PSBQT1NJVElPTkFMID8gUE9TSVRJT05BTCA6IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdJZCApOwotICAgICAgU3RyaW5nIG5hbWVfY29sID0gbmFtZUlkID09IE5PX1BBUk0gPyBOT19QQVJNIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggbmFtZUlkICk7Ci0KLSAgICAgIGlmKCBmbGFnX2NvbC5sZW5ndGgoKSA+IG1heF9mbGFnX3NpemUgKQotICAgICAgICBtYXhfZmxhZ19zaXplID0gZmxhZ19jb2wubGVuZ3RoKCk7Ci0KLSAgICAgIGlmKCBuYW1lX2NvbCAhPSBOT19QQVJNICYmIG5hbWVfY29sLmxlbmd0aCgpID4gbWF4X25hbWVfc2l6ZSApCi0gICAgICAgIG1heF9uYW1lX3NpemUgPSBuYW1lX2NvbC5sZW5ndGgoKTsKLQotICAgICAgLy8gRW5zdXJlIHRoYXQgZmxhZ3MgYXJlIGFsbCBpbiBsb3dlcmNhc2UuCi0gICAgICBpZiggIWZsYWdfY29sLmVxdWFscyggZmxhZ19jb2wudG9Mb3dlckNhc2UoKSApICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9GTEFHX05PVF9MT1dFUkNBU0UgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfY29sICk7Ci0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IG9ubHkgdGhlIHByZWRlZmluZWQgZHVwIHN0cmluZ3MgYXJlIHVzZWQuCi0gICAgICAvLyBOb3RlOiBpdCdzIG9rIHRvIHVzZSAhPSB3aGVuIGNvbXBhcmluZyBjb25zdGFudCBzdHJpbmdzIGxpdGVyYWxzLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSA9PSBudWxsIHx8Ci0gICAgICAgICAgKCBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gIT0gTk9fRFVQUyAmJgotICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW0RVUF9DT0xdICE9IERVUFNfT0sgKSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfSU5DT1JSRUNUX0RVUF9TVFJJTkcgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSApOwotCi0gICAgICAvLyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBwcmVkZWZpbmVkIHJlcXVpcmVkIHN0cmluZ3MgYXJlIHVzZWQuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gPT0gbnVsbCB8fAotICAgICAgICAgICggZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gIT0gUkVRVUlSRUQgJiYKLSAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdICE9IE9QVElPTkFMICkgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9SRVFVSVJFRF9TVFJJTkcgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdICk7Ci0KLSAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgcG9zaXRpb25hbHMuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdID09IFJFUVVJUkVEICkKLSAgICAgICAgewotICAgICAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdID09IE5PX1BBUk0gKQotICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9SRVFVSVJFRF9QT1NJVElPTkFMX05FRURTX05BTUUgKSApOwotCi0gICAgICAgICAgcmVxdWlyZWRfcG9zaXRpb25hbHMrKzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdICE9IE5PX1BBUk0gKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2UgdXNlIHRoZSBOQU1FX0NPTCBmaWVsZCBmb3IgYW4gb3B0aW9uYWwgcG9zaXRpb25hbCB0byBkZW5vdGUKLSAgICAgICAgICAvLyB3aGV0aGVyIGFkZGl0aW9uYWwgcG9zaXRpb25hbHMgYXJlIGFsbG93ZWQgb3Igbm90LgotICAgICAgICAgIG9wdGlvbmFsX3Bvc2l0aW9uYWxzX2FsbG93ZWQgPSB0cnVlOwotICAgICAgICAgIG9wdGlvbmFsX2xpc3RfaW5kZXggPSByb3c7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gRW5zdXJlIHRoYXQgcG9zaXRpb25hbHMgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluZm8uCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSAhPSBQT1NJVElPTkFMIHx8Ci0gICAgICAgICAgKCBkb25lX3Bvc2l0aW9uYWxzID09IGZhbHNlICYmCi0gICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgJiYKLSAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdID09IE9QVElPTkFMICkgKQotICAgICAgewotICAgICAgICBkb25lX3Bvc2l0aW9uYWxzID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGRvbmVfcG9zaXRpb25hbHMgPT0gdHJ1ZSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfUE9TSVRJT05BTF9OT1RfQVRfQkVHSU5OSU5HICkgKTsKLSAgICB9Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBhIGhlbHAgZmxhZyB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbmZvIGxpc3QuCi0gICAgaWYoIGhlbHBfc3BlY2lmaWVkID09IGZhbHNlICkKLSAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfSEVMUF9GTEFHX05PVF9TUEVDSUZJRUQgKSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGR1bXAgaW50ZXJuYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJzZWQKLSAgICAqIGNvbW1hbmQgbGluZS4KLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGIgPSBuZXcgU3RyaW5nQnVmZmVyKDEwMCk7Ci0KLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIGIuYXBwZW5kKCAiXG4iICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgKQotICAgICAgICBiLmFwcGVuZCggIlBvc2l0aW9uYWw6IiApOwotICAgICAgZWxzZQotICAgICAgICBiLmFwcGVuZCggZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApICsgIjoiICk7Ci0KLQotICAgICAgaWYoIGZsYWdzX3NwZWNpZmllZFtyb3ddID09IG51bGwgKQotICAgICAgICBiLmFwcGVuZCggIm5vIHBhcmFtZXRlcnMiICk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZvciggaW50IHBhcm1faW5kZXggPSAwOyBwYXJtX2luZGV4IDwgZmxhZ3Nfc3BlY2lmaWVkW3Jvd10uc2l6ZSgpOyBwYXJtX2luZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHBhcm0gPSAoU3RyaW5nKWZsYWdzX3NwZWNpZmllZFtyb3ddLmVsZW1lbnRBdChwYXJtX2luZGV4KTsKLSAgICAgICAgICBiLmFwcGVuZCggcGFybSArICI6IiApOwotICAgICAgICB9Ci0gICAgICBiLmFwcGVuZCggIlxuIiApOwotICAgIH0KLQotICAgIHJldHVybiAiIitiOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMQUdfQ09MICAgICA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOQU1FX0NPTCAgICAgPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFVQX0NPTCAgICAgID0gMjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFUVVJUkVEX0NPTCA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUxQX0NPTCAgICAgPSA0OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQT1NJVElPTkFMX1JPVyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUxQX0xJTkVfTEVOICA9IDc1OwotCi0gIHByaXZhdGUgU3RyaW5nW11bXSBmbGFnc19pbmZvOwotICBwcml2YXRlIFN0cmluZyAgICAgaGVscF9mbGFnOwotICBwcml2YXRlIFN0cmluZyAgICAgdG9vbF9uYW1lOwotICBwcml2YXRlIFZlY3RvcltdICAgZmxhZ3Nfc3BlY2lmaWVkOwotICBwcml2YXRlIGludCAgICAgICAgcmVxdWlyZWRfcG9zaXRpb25hbHM7Ci0gIHByaXZhdGUgYm9vbGVhbiAgICBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkOwotICBwcml2YXRlIGludCAgICAgICAgb3B0aW9uYWxfbGlzdF9pbmRleDsKLSAgcHJpdmF0ZSBpbnQgICAgICAgIG1heF9mbGFnX3NpemU7Ci0gIHByaXZhdGUgaW50ICAgICAgICBtYXhfbmFtZV9zaXplOwotCi0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlczsKLSAgcHJpdmF0ZSAgIFJlc291cmNlQnVuZGxlIGZsYWdNZXNzYWdlczsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvRmxhZ01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0ZsYWdNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODg0MTRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvRmxhZ01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1hbmRsaW5lOwotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc3RvcmUgY29uc3RhbnQgc3RyaW5nIGVycm9yIG1lc3NhZ2VzCi0gICogZ2VuZXJhdGVkIGJ5IENvbW1hbmRMaW5lLmphdmEKLSAgKgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotICAqIEBzZWUgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1hbmRsaW5lLkNvbW1hbmRMaW5lCi0qKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIEZsYWdNZXNzYWdlcwotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GTEFHX05PVF9GT1VORCA9ICJQQVJTRVJfRVJST1JfRkxBR19OT1RfRk9VTkQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9BTUJJR1VPVVNfRkxBRyA9ICJQQVJTRVJfRVJST1JfQU1CSUdVT1VTX0ZMQUciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9NSVNTSU5HX1BPU0lUSU9OQUwgPSAiUEFSU0VSX0VSUk9SX01JU1NJTkdfUE9TSVRJT05BTCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX1RPT19NQU5ZX1BPU0lUSU9OQUxTID0gIlBBUlNFUl9FUlJPUl9UT09fTUFOWV9QT1NJVElPTkFMUyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX01JU1NJTkdfUkVRVUlSRURfRkxBRyA9ICJQQVJTRVJfRVJST1JfTUlTU0lOR19SRVFVSVJFRF9GTEFHIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEID0gIlBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSID0gIlBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSIjsKLQotICAvLyBFcnJvciBpbnRlcm5hbCBlcnJvciBtZXNzYWdlcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX01FU1NBR0VfTUlTU0lOR19BUkcgPSAiUEFSU0VSX0VSUk9SX01FU1NBR0VfTUlTU0lOR19BUkciOwotCi0gIC8vIEludGVybmFsIGNvbW1hbmQgbGluZSBlcnJvciBtZXNzYWdlcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX05PX0ZMQUdTX0RBVEFfU1BFQ0lGSUVEID0gIlBBUlNFUl9FUlJPUl9OT19GTEFHU19EQVRBX1NQRUNJRklFRCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0ZJUlNUX0ZMQUdfTk9UX1BPU0lUSU9OQUwgPSAiUEFSU0VSX0VSUk9SX0ZJUlNUX0ZMQUdfTk9UX1BPU0lUSU9OQUwiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9OVUxMX0ZMQUdfUk9XID0gIlBBUlNFUl9FUlJPUl9OVUxMX0ZMQUdfUk9XIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JPV19TSVpFID0gIlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUk9XX1NJWkUiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9OVUxMX0lOX1JPVyA9ICJQQVJTRVJfRVJST1JfTlVMTF9JTl9ST1ciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfRFVQX1NUUklORyA9ICJQQVJTRVJfRVJST1JfSU5DT1JSRUNUX0RVUF9TVFJJTkciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUkVRVUlSRURfU1RSSU5HID0gIlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUkVRVUlSRURfU1RSSU5HIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfUE9TSVRJT05BTF9OT1RfQVRfQkVHSU5OSU5HID0gIlBBUlNFUl9FUlJPUl9QT1NJVElPTkFMX05PVF9BVF9CRUdJTk5JTkciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9IRUxQX0ZMQUdfTk9UX1NQRUNJRklFRCA9ICJQQVJTRVJfRVJST1JfSEVMUF9GTEFHX05PVF9TUEVDSUZJRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GTEFHU19OT1RfT1JERVJFRCA9ICJQQVJTRVJfRVJST1JfRkxBR1NfTk9UX09SREVSRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GTEFHX05PVF9MT1dFUkNBU0UgPSAiUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0xPV0VSQ0FTRSI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX1JFUVVJUkVEX1BPU0lUSU9OQUxfTkVFRFNfTkFNRSA9ICJQQVJTRVJfRVJST1JfUkVRVUlSRURfUE9TSVRJT05BTF9ORUVEU19OQU1FIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfSU5GT19TWU5UQVggPSAiUEFSU0VSX1NZTlRBWCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0ZMQUdTID0gIlBBUlNFUl9GTEFHUyI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfSU5GT19XSEVSRSA9ICJQQVJTRVJfV0hFUkUiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9jb21tYW5kbGluZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9jb21tYW5kbGluZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODUyOTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvY29tbWFuZGxpbmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVBBUlNFUl9FUlJPUl9GTEFHX05PVF9GT1VORD1JV0FCMDEyM0UgRmxhZyAtezB9IGlzIG5vdCB2YWxpZC4KLVBBUlNFUl9FUlJPUl9BTUJJR1VPVVNfRkxBRz1JV0FCMDI4NEUgRmxhZyAtezB9IGlzIGFtYmlndW91cy4KLVBBUlNFUl9FUlJPUl9NSVNTSU5HX1BPU0lUSU9OQUw9SVdBQjAyODVFIE1pc3NpbmcgezB9IHBhcmFtZXRlci4KLVBBUlNFUl9FUlJPUl9UT09fTUFOWV9QT1NJVElPTkFMUz1JV0FCMDI4NkUgVG9vIG1hbnkgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHNwZWNpZmllZC4KLVBBUlNFUl9FUlJPUl9NSVNTSU5HX1JFUVVJUkVEX0ZMQUc9SVdBQjAyODhFIEZsYWcgLXswfSBpcyBtaXNzaW5nLgotUEFSU0VSX0VSUk9SX0RVUExJQ0FURV9GTEFHU19OT1RfQUxMT1dFRD1JV0FCMDI5M0UgRmxhZyAtezB9IGhhcyBiZWVuIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KLVBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSPUlXQUIwMjk0RSBGbGFnIC17MH0gaXMgbWlzc2luZyBwYXJhbWV0ZXIgezF9LgotUEFSU0VSX0VSUk9SX01FU1NBR0VfTUlTU0lOR19BUkc9SVdBQjAzMTlFIEVycm9yIG1lc3NhZ2UgezB9IGlzIG1pc3NpbmcgYW4gYXJndW1lbnQuCi1QQVJTRVJfRVJST1JfTk9fRkxBR1NfREFUQV9TUEVDSUZJRUQ9SVdBQjAzNDVFIFNwZWNpZnkgZmxhZyBpbmZvcm1hdGlvbi4KLVBBUlNFUl9FUlJPUl9GSVJTVF9GTEFHX05PVF9QT1NJVElPTkFMPUlXQUIwMzQ2RSBUaGUgZmlyc3QgZmxhZyBtdXN0IGJlIHBvc2l0aW9uYWwuCi1QQVJTRVJfRVJST1JfTlVMTF9GTEFHX1JPVz1JV0FCMDM0N0UgTnVsbCBmbGFnIHJvdy4KLVBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUk9XX1NJWkU9SVdBQjAzNDhFIEZsYWcgcm93IG11c3QgaGF2ZSA1IHN0cmluZ3MuCi1QQVJTRVJfRVJST1JfTlVMTF9JTl9ST1c9SVdBQjAzNDlFIEZsYWcgaW5mb3JtYXRpb24gY29udGFpbnMgYSBudWxsIHN0cmluZy4KLVBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfRFVQX1NUUklORz1JV0FCMDM1MEUgRHVwbGljYXRlIHN0cmluZyB7MH0gaXMgbm90IHZhbGlkLgotUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9SRVFVSVJFRF9TVFJJTkc9SVdBQjAzNTFFIFJlcXVpcmVkIHN0cmluZyB7MH0gaXMgbm90IHZhbGlkLgotUEFSU0VSX0VSUk9SX1BPU0lUSU9OQUxfTk9UX0FUX0JFR0lOTklORz1JV0FCMDM1MkUgUG9zaXRpb25hbCBmbGFnIGlzIG5vdCBhdCB0aGUgYmVnaW5uaW5nLgotUEFSU0VSX0VSUk9SX0hFTFBfRkxBR19OT1RfU1BFQ0lGSUVEPUlXQUIwMzUzRSBIZWxwIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpbiBpbmZvcm1hdGlvbiBhcnJheS4KLVBBUlNFUl9FUlJPUl9GTEFHU19OT1RfT1JERVJFRD1JV0FCMDM1NEUgRmxhZ3MgYXJlIG5vdCBpbiBsZXhpY2FsIG9yZGVyLgotUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0xPV0VSQ0FTRT1JV0FCMDM1NUUgRmxhZyB7MH0gaXMgbm90IGxvd2VyY2FzZS4KLVBBUlNFUl9FUlJPUl9SRVFVSVJFRF9QT1NJVElPTkFMX05FRURTX05BTUU9SVdBQjAzNTZFIFJlcXVpcmVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBtdXN0IGhhdmUgYSBuYW1lIHNwZWNpZmllZC4KLVBBUlNFUl9TWU5UQVg9U3ludGF4Ci1QQVJTRVJfRkxBR1M9RmxhZ3MKLVBBUlNFUl9XSEVSRT1XaGVyZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vQ2xhc3NQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9DbGFzc1BhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ4YTRhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9DbGFzc1BhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi0vKioKLSAqIAotICogVGhlIGNsYXNzIHByb3ZpZGVzIGFuZCBlYXN5IHdheSB0byBidWlsZCBjbGFzc3BhdGhzLgotICoKLSAqLwotcHVibGljIGNsYXNzIENsYXNzUGF0aCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG5ld1BhdGggYXBwZW5kcyB0aGlzIG5ldyBwYXRoIHRvIHRoZSBlbmQgb2YgdGhlIGNsYXNzcGF0aC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFwcGVuZFBhdGgoIFN0cmluZyBuZXdQYXRoICkKLSAgewotICAJLy8gTm8gdmFsdWUgdG8gcHV0IG9uIHBhdGgsIHNvIGp1c3QgcmV0dXJuCi0gIAlpZiggbmV3UGF0aC5lcXVhbHMoICIiICkgKSByZXR1cm47Ci0gIAkKLSAgCS8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhdGggaW4gdGhlIHN0cmluZyB0aGVuIHdlIGRvbid0IG5lZWQgYSBwYXRoCi0gIAkvLyBzZXBhcmF0b3IuCi0gIAlpZiggcGF0aC5sZW5ndGgoKSA9PSAwICkKLSAgCXsKLSAgCSAgcGF0aC5hcHBlbmQoIG5ld1BhdGggKTsKLSAgCX0KLSAgCWVsc2UKLSAgCXsKLSAgCSAgcGF0aC5hcHBlbmQoIEZpbGUucGF0aFNlcGFyYXRvckNoYXIgKyBuZXdQYXRoICk7Ci0gIAl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFsbCBqYXIgYW5kIHppcCBmaWxlcyBpbiBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5IHRvCi0gICAqIHRoZSBjbGFzc3BhdGguCi0gICAqIAotICAgKiBAcGFyYW0gZGlyZWN0b3J5IHNwZWNpZmllcyBhIGRpcmVjdG9yeSBjb250YWlucyBqYXIgYW5kIHppcCBmaWxlcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFwcGVuZERpciggU3RyaW5nIGRpcmVjdG9yeSApCi0gIHsKLSAgCUZpbGUgZGlyID0gbmV3IEZpbGUoIGRpcmVjdG9yeSApOwotICAJCi0gIAlpZiggIWRpci5pc0RpcmVjdG9yeSgpICkgcmV0dXJuOwotICAJCi0gIAlGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7Ci0gIAkKLSAgCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBmaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAJewotICAJICBGaWxlICAgZmlsZSA9IGZpbGVzW2luZGV4XTsKLSAgCSAgU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKLSAgCSAgCi0gIAkgIGlmKCBmaWxlLmlzRmlsZSgpICYmCi0gIAkgICAgICAoIG5hbWUuZW5kc1dpdGgoICIuamFyIiApIHx8Ci0gIAkgICAgICAgIG5hbWUuZW5kc1dpdGgoICIuemlwIiApICkgKQotICAJICB7Ci0gIAkgIAlhcHBlbmRQYXRoKCBmaWxlLmdldEFic29sdXRlUGF0aCgpICk7Ci0gIAkgIH0KLSAgCSAgICAgICAgCi0gIAl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG5ld1BhdGggYXBwZW5kcyBhIG5ldyBjbGFzc3BhdGggdG8gdGhlIGVuZCBvZiB0aGlzIGNsYXNzcGF0aC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFwcGVuZFBhdGgoIENsYXNzUGF0aCBuZXdQYXRoICkKLSAgewotICAJYXBwZW5kUGF0aCggbmV3UGF0aC5wYXRoLnRvU3RyaW5nKCkgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZnVsbCBzdHJpbmcgY2xhc3NwYXRoIHdpdGggc2VwYXJhdG9ycy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gIAlyZXR1cm4gcGF0aC50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmM0YTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi0KLQotLyoqCi0qIFRoaXMgY2xhc3MgZGVmaW5lcyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgd3JpdGVzIHRvIGFuCi0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0uCi0qLwotcHVibGljIGNsYXNzIEZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbSBleHRlbmRzIE91dHB1dFN0cmVhbQotewotCi0gIElQYXRoICAgICAgICAgICAgICAgICBmRmlsZVBhdGg7Ci0gIFJlc291cmNlQ29udGV4dCAgICAgICBmUmVzb3VyY2VDb250ZXh0OyAKLSAgSVByb2dyZXNzTW9uaXRvciAgICAgICBmTW9uaXRvcjsgICAKLSAgSVN0YXR1c0hhbmRsZXIgICAgICAgICBmU3RhdHVzSGFuZGxlcjsKLSAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci0gIGJvb2xlYW4gICAgICAgICAgICAgICBmT3BlbjsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGFuIG91dHB1dCBzdHJlYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0byB0aGUKLSAgKiBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPi4gVGhlIHdvcmtzcGFjZSBpcyBuZWl0aGVyIGV4YW1pbmVkIG5vcgotICAqIGFsdGVyZWQgZHVyaW5nIGNvbnN0cnVjdGlvbi4gQWxsIHJlc291cmNlIGNyZWF0aW9uIGlzIGRlZmVycmVkCi0gICogdW50aWwgbGF0ZXIgaW4gdGhlIHN0cmVhbSdzIGxpZmVjeWNsZSwgc3VjaCBhcyBkdXJpbmcgd3JpdGluZwotICAqIG9yIGNsb3N1cmUuCi0gICogPGI+Tm90ZTo8L2I+IFRoZSBwcmVmZXJyZWQgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhIHN0cmVhbSB0aGF0Ci0gICogd3JpdGVzIHRvIGFuIElGaWxlIGlzIHRvIGNhbGwgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZAotICAqIHtAbGluayBGaWxlUmVzb3VyY2VVdGlscyNuZXdGaWxlT3V0cHV0U3RyZWFtIEZpbGVSZXNvdXJjZVV0aWxzLm5ld0ZpbGVPdXRwdXRTdHJlYW0oKX0KLSAgKiBhbmQgd29yayB3aXRoIHRoZSByZXN1bHRpbmcgPGNvZGU+T3V0cHV0U3RyZWFtPC9jb2RlPi4KLSAgKiBEaXJlY3QgY29uc3RydWN0aW9uIG9mIGEgRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtIGlzIG5vdCByZWNvbW1lbmRlZC4KLSAgKiBAcGFyYW0gZmlsZSBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAqIGhhbmRsZSBvZiB0aGUgZmlsZSByZXNvdXJjZSB0byBjcmVhdGUuIFRoZSBwcm9qZWN0IGltcGxpZWQgYnkgdGhlCi0gICogcGF0aG5hbWUgb2YgdGhlIGZpbGUgbXVzdCBhbHJlYWR5IGV4aXN0LAotICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAqLwotICBwdWJsaWMgRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtICggCi0gIAkJCVJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsIAotICAJCQlJUGF0aCAgICAgICAgICAgZmlsZVBhdGgsIAotICAJCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsCi0gIAkJCUlTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlcgotICAJCQkpCi0gIHsKLSAgICBmRmlsZVBhdGggPSBmaWxlUGF0aDsKLSAgICBmUmVzb3VyY2VDb250ZXh0ID0gcmVzb3VyY2VDb250ZXh0OwotICAgIGZNb25pdG9yID0gbW9uaXRvcjsKLSAgICBmU3RhdHVzSGFuZGxlciA9IHN0YXR1c0hhbmRsZXI7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICBmT3BlbiA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgKiBDbG9zZXMgdGhlIHN0cmVhbS4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjbG9zaW5nIHRoZSBzdHJlYW0uCi0gICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZQotICAqIGFuZCBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiB3aWxsCi0gICogYmUgdGhyb3duIGVpdGhlciBub3cgb3IgZHVyaW5nIGFuIGVhcmxpZXIge0BsaW5rICN3cml0ZSB3cml0ZX0uCi0gICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlICgpCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFmT3BlbikgcmV0dXJuOwotICAgIGZPcGVuID0gZmFsc2U7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS5jbG9zZSgpOwotICAgIGJ5dGVbXSBidWZmZXIgPSBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLnRvQnl0ZUFycmF5KCk7Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gdGVtcElucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1ZmZlcik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShmUmVzb3VyY2VDb250ZXh0LCBmRmlsZVBhdGgsIHRlbXBJbnB1dFN0cmVhbSwgZk1vbml0b3IsIGZTdGF0dXNIYW5kbGVyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIEZsdXNoZXMgdGhlIHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBpbXBseSB0aGUgRmlsZSByZXNvdXJjZQotICAqIHdpbGwgYmUgY3JlYXRlZCBvciBiZWNvbWUgdmlzaWJsZSB3aXRoaW4gdGhlIHdvcmtiZW5jaC4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vycy4gRm9yIGV4YW1wbGUsIGlmIHRoaXMKLSAgKiBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlIGFuZCBhIGZpbGUgb2YgdGhlCi0gICogc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIG1heSBiZSB0aHJvd24gYXQKLSAgKiB0aGlzIHBvaW50LgotICAqLwotICBwdWJsaWMgdm9pZCBmbHVzaCAoKQotICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgfQotCi0gIC8qKgotICAqIFdyaXRlcyBhbGwgYnl0ZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgdG8gdGhlIHN0cmVhbS4KLSAgKiBAcGFyYW0gYiBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuCi0gICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMuIEZvciBleGFtcGxlLCBpZiB0aGlzCi0gICogc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZSBhbmQgYSBmaWxlIG9mIHRoZQotICAqIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGF0Ci0gICogdGhpcyBwb2ludC4KLSAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUgKCBieXRlW10gYiApCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS53cml0ZShiKTsKLSAgfQotCi0gIC8qKgotICAqIFdyaXRlcyBieXRlcyBmcm9tIHRoZSBnaXZlbiBhcnJheSBiZWdpbm5pbmcgYXQgc29tZSBvZmZzZXQKLSAgKiBhbmQgY29udGludWluZyBmb3Igc29tZSBudW1iZXIgb2YgYnl0ZXMgKGxlbikgdG8gdGhlIHN0cmVhbS4KLSAgKiBAcGFyYW0gYiBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuCi0gICogQHBhcmFtIG9mZiBUaGUgb2Zmc2V0IGludG8gdGhlIGFycmF5IHRvIGJlZ2luIHdyaXRpbmcuCi0gICogQHBhcmFtIGxlbiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLgotICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzLiBGb3IgZXhhbXBsZSwgaWYgdGhpcwotICAqIHN0cmVhbSB3YXMgY29uc3RydWN0ZWQgd2l0aCBvdmVyd3JpdGVGaWxlID0gZmFsc2UgYW5kIGEgZmlsZSBvZiB0aGUKLSAgKiBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZW4gYW4gSU9FeGNlcHRpb24gbWF5IGJlIHRocm93biBhdAotICAqIHRoaXMgcG9pbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlICggYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4gKQotICB7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS53cml0ZShiLG9mZixsZW4pOwotICB9Ci0KLSAgLyoqCi0gICogV3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIHN0cmVhbS4KLSAgKiBAcGFyYW0gYiBUaGUgYnl0ZSB0byB3cml0ZS4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vycy4gRm9yIGV4YW1wbGUsIGlmIHRoaXMKLSAgKiBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlIGFuZCBhIGZpbGUgb2YgdGhlCi0gICogc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIG1heSBiZSB0aHJvd24gYXQKLSAgKiB0aGlzIHBvaW50LgotICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZSAoIGludCBiICkKLSAgewotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0ud3JpdGUoYik7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4M2I4NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMTIgICAxMjExOTkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKiAyMDA3MDgxMyAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDYxMyAgIDIzNjUyMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgT3ZlcndyaXRlIHNldHRpbmcgb24gV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGNvdXBsZWQgd2l0aCBwcmVmZXJlbmNlCi0gKiAyMDA4MDYyNSAgIDIzNzEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRXJyb3IgbW92aW5nIHJlc291cmNlOiBudWxsCi0gKiAyMDA4MDcxMSAgIDI0MDQwOCBya2tsYWlAY2EuaWJtLmNvbSAtIFJheW1vbmQgTGFpLCBzdXBwb3J0IGNhc2UtaW5zZW5zaXRpdmUgcGxhdGZvcm0gbWFrZUZpbGUgd2hlbiBhIGZpbGUgd2l0aCB2YXJpYW50IGNhc2UgZXhpc3RzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbjsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LkVudmlyb25tZW50TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotCi0KLS8qKgotKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggRWNsaXBzZSByZXNvdXJjZXMuCi0qLwotcHVibGljIGZpbmFsIGNsYXNzIEZpbGVSZXNvdXJjZVV0aWxzCi17Ci0gIC8vCi0gIC8vIEtlZXBzIHRoZSBJV29ya3NwYWNlIGhhbmdpbmcgYXJvdW5kLiBTZWUgZ2V0V29ya3NwYWNlKCkuCi0gIC8vCi0gIHByaXZhdGUgc3RhdGljIElXb3Jrc3BhY2Ugd29ya3NwYWNlXyA9IG51bGw7Ci0gIC8vCi0gIC8vIEtlZXBzIHRoZSBJV29ya3NwYWNlUm9vdCBoYW5naW5nIGFyb3VuZC4gU2VlIGdldFdvcmtzcGFjZVJvb3QoKS4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgSVdvcmtzcGFjZVJvb3Qgcm9vdF8gPSBudWxsOwotICAKLS8vICBwcml2YXRlIHN0YXRpYyBNZXNzYWdlVXRpbHMgbXNnXyA9IG5ldyBNZXNzYWdlVXRpbHMoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLmVudmlyb25tZW50IiwgbmV3IEZpbGVSZXNvdXJjZVV0aWxzKCkgKTsKLQotCi0gLyoqCi0gICogUmV0dXJucyB0aGUgSVdvcmtzcGFjZVJvb3Qgb2JqZWN0LgotICAqIEByZXR1cm4gVGhlIElXb3Jrc3BhY2VSb290IG9iamVjdC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJV29ya3NwYWNlUm9vdCBnZXRXb3Jrc3BhY2VSb290ICgpCi0gIHsKLSAgICBpZiAocm9vdF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICByb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgfQotICAgIHJldHVybiByb290XzsKLSAgfQotCi0gIC8qKgotCSAqIFJldHVybnMgdGhlIElXb3Jrc3BhY2Ugb2JqZWN0LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIElXb3Jrc3BhY2Ugb2JqZWN0LgotCSAqLwotICBwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlICgpCi0gIHsKLSAgICBpZiAod29ya3NwYWNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyb290XyA9PSBudWxsKQotICAgICAgewotICAgICAgICByb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHdvcmtzcGFjZV8gPSByb290Xy5nZXRXb3Jrc3BhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdvcmtzcGFjZV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGFuIGFycmF5IG9mIHRocmVlIGNvbW1vbiBjaG9pY2VzLiAoaWUuIFllcywgeWVzIGFsbCwgYW5kIGNhbmNlbCApCi0gICAqLwotICBwdWJsaWMgc3RhdGljIENob2ljZVtdIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpIAotICB7Ci0gICAgVmVjdG9yIGNob2ljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgY2hvaWNlcy5hZGQobmV3IENob2ljZSggJ1knLCBFbnZpcm9ubWVudE1lc3NhZ2VzLkxBQkVMX1lFUykpOwotICAgIGNob2ljZXMuYWRkKG5ldyBDaG9pY2UoICdBJywgRW52aXJvbm1lbnRNZXNzYWdlcy5MQUJFTF9ZRVNfVE9fQUxMKSk7Ci0gICAgY2hvaWNlcy5hZGQobmV3IENob2ljZSggJ0MnLCBFbnZpcm9ubWVudE1lc3NhZ2VzLkxBQkVMX0NBTkNFTCkpOwotICAgIAotICAgIHJldHVybiAoQ2hvaWNlW10pY2hvaWNlcy50b0FycmF5KG5ldyBDaG9pY2VbY2hvaWNlcy5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfQotICAqIG9mIHRoZSBnaXZlbiBhYnNvbHV0ZSBwYXRobmFtZSBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGhuYW1lIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByZXNvdXJjZS4KLSAgKiBAcmV0dXJuIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+LgotICAqLwotICBwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UgKCBTdHJpbmcgYWJzb2x1dGVQYXRobmFtZSApCi0gIHsKLSAgICBpZiAoYWJzb2x1dGVQYXRobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmluZFJlc291cmNlKG5ldyBQYXRoKGFic29sdXRlUGF0aG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX0KLSAgKiBvZiB0aGUgZ2l2ZW4gYWJzb2x1dGUgcGF0aCBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggVGhlIGFic29sdXRlIDxjb2RlPklQYXRoPC9jb2RlPiBvZiB0aGUgcmVzb3VyY2UuCi0gICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgZmluZFJlc291cmNlICggSVBhdGggYWJzb2x1dGVQYXRoICkKLSAgewotICAgIGlmIChhYnNvbHV0ZVBhdGggPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEZpbGVSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGFic29sdXRlUGF0aCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb3BpZXMgYSBmaWxlIGZyb20gYSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24KLSAgICogdG8gYW4gRWNsaXBzZSBmb2xkZXIuCi0gICAqIEBwYXJhbSBwbHVnaW4gVGhlIHBsdWdpbiBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LgotICAgKiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gc291cmNlUGF0aCBUaGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbjwvY29kZT4KLSAgICogaW5zdGFsbCBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4KLSAgICogSWYgbnVsbCwgdGhlbiB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24gaXMgdGhlIHNvdXJjZSBwYXRoCi0gICAqIChpZS4gbnVsbCBpcyBlcXVpdmFsZW50IHRvICIuIikuCi0gICAqIEBwYXJhbSBwYXRobmFtZSBUaGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gY29weS4KLSAgICogVGhlIHBhdGhuYW1lIGlzIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW4gc291cmNlUGF0aDwvY29kZT4uCi0gICAqIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSB0YXJnZXRQYXRoIFRoZSBhYnNvbHV0ZSBFY2xpcHNlIHBhdGggb2YgdGhlIGZvbGRlciB0bwotICAgKiB3aGljaCB0aGUgZmlsZSB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lIG9mIHRoZQotICAgKiBmaWxlIGlzIHByZXNlcnZlZC4KLSAgICogTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIGNyZWF0ZUZvbGRlcnMgVGhlIGludGVybWVkaWF0ZSBmb2xkZXIgY3JlYXRpb24gcG9saWN5LCBvbmUgb2YKLSAgICoge0BsaW5rICNDUkVBVEUgQ1JFQVRFfSBvciB7QGxpbmsgI0RPTlRfQ1JFQVRFIERPTlRfQ1JFQVRFfS4KLSAgICogPHVsPgotICAgKiA8bGk+PGNvZGU+Q1JFQVRFPC9jb2RlPiAtCi0gICAqIElmIGFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAgKiBkbyBub3QgZXhpc3QsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLgotICAgKiA8bGk+PGNvZGU+RE9OVF9DUkVBVEU8L2NvZGU+IC0KLSAgICogSWYgYW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICAqIGRvIG5vdCBleGlzdCwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4uCi0gICAqIDwvdWw+Ci0gICAqIEBwYXJhbSBvdmVyd3JpdGVGaWxlIFRoZSBwb2xpY3kgZm9yIGV4aXN0aW5nIGZpbGVzLCBvbmUgb2YKLSAgICoge0BsaW5rICNPVkVSV1JJVEUgT1ZFUldSSVRFfSBvciB7QGxpbmsgI0RPTlRfT1ZFUldSSVRFIERPTlRfT1ZFUldSSVRFfS4KLSAgICogPHVsPgotICAgKiA8bGk+PGNvZGU+T1ZFUldSSVRFPC9jb2RlPiAtCi0gICAqIElmIGEgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBmaWxlLAotICAgKiBpdCB3aWxsIGJlIHJlcGxhY2VkLgotICAgKiBJZiB0aGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgYW5kIGl0IGlzIG5vdCBhIGZpbGUsCi0gICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICAqIGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gd2lsbCBiZSB0aHJvd24uCi0gICAqIDxsaT48Y29kZT5ET05UX09WRVJXUklURTwvY29kZT4gLQotICAgKiBJZiBhbnkgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cywKLSAgICogdGhlbiBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhbmQKLSAgICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgICogPC91bD4KLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uIEFuIGV4Y2VwdGlvbiBjb250YWluaW5nIGFuCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgICogbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZS4KLSAgICovCi0gICBzdGF0aWMgcHVibGljIHZvaWQgY29weUZpbGUoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsdWdpbiBwbHVnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQYXRoIHNvdXJjZVBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQYXRoIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUGF0aCB0YXJnZXRQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0YXR1c0hhbmRsZXIgc3RhdHVzTW9uaXRvciApCi0gICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICB7Ci0gICAgIHRyeQotICAgICB7Ci0gICAgICAgSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQocGF0aG5hbWUpOwotICAgICAgIElQYXRoIHNvdXJjZSA9IHNvdXJjZVBhdGggPT0gbnVsbCA/IHBhdGhuYW1lIDogc291cmNlUGF0aC5hcHBlbmQocGF0aG5hbWUpOwotICAgICAgIElucHV0U3RyZWFtIGlucHV0ID0gcGx1Z2luLm9wZW5TdHJlYW0oc291cmNlKTsKLSAgICAgICBjcmVhdGVGaWxlKHJlc291cmNlQ29udGV4dCwgdGFyZ2V0LCBpbnB1dCwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgICAgfQotICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgewotICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9JTyxlKSk7Ci0gICAgIH0KLSAgIH0KLSAgIAotICAvKioKLSAgICogRGVsZXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0gICAqIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotICAgKiBAcGFyYW0gZmlsZSAtIHRoZSBJRmlsZSB0byBiZSBkZWxldGVkCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLSAgICogQHBhcmFtIHN0YXR1c01vbml0b3IKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlmIGl0IGV4aXN0cyBhbmQgaXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuIEZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGaWxlKCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGaWxlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RhdHVzSGFuZGxlciBzdGF0dXNNb25pdG9yKQotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoZmlsZS5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyAKLSAgICAgICAgICA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IGZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIENob2ljZSBjaG9pY2UgPSBzdGF0dXNNb25pdG9yLnJlcG9ydCggc3RhdHVzLCBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSApOwotICAgICAgICAKLSAgICAgICAgaWYoIGNob2ljZS5nZXRTaG9ydGN1dCgpID09ICdDJyApIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBjaG9pY2UuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKSB7Ci0gICAgICAgIAlyZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgICAJUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvL1dlIGhhdmUgcGVybWlzc2lvbiB0byBvdmVyd3JpdGUgc28gY2hlY2sgaWYgZmlsZSBpcyByZWFkLW9ubHkKLSAgICAgIGlmIChmaWxlLmlzUmVhZE9ubHkoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSVN0YXR1cyBzdGF0dXMgCi0gICAgICAgICAgICA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBmaWxlLmdldFBhcmVudCgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBDaG9pY2UgY2hvaWNlID0gc3RhdHVzTW9uaXRvci5yZXBvcnQoIHN0YXR1cywgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggY2hvaWNlLmdldFNob3J0Y3V0KCkgPT0gJ0MnICkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBjaG9pY2UuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKSB7Ci0gICAgICAgIAkgIHJlc291cmNlQ29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgCSAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLSAgICAgICAgZmlsZXNbMF0gPSBmaWxlOwotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcywgbnVsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNNb25pdG9yLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgZmlsZS5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0gICAgfQotICAgIC8vQXQgdGhpcyBwb2ludCwgZWl0aGVyIHRoZSBmaWxlIGRpZCBub3QgZXhpc3Qgb3Igd2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKLSAgICAvLyBpdC4gUmV0dXJuIHN1Y2Nlc3MuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogRGVsZXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLSAgICogQHBhcmFtIGZvbGRlciAtIHRoZSBJRm9sZGVyIHRvIGJlIGRlbGV0ZWQKLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotICAgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzIHN1Y2Nlc3NmdWxseSBkZWxldGVkIGFsb25nIHdpdGggaXRzIG1lbWJlcnMuIEZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVsZXRlRm9sZGVyKCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUZvbGRlciBmb2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTdGF0dXNIYW5kbGVyIHN0YXR1c01vbml0b3IgKQotICAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgewotICAgICBpZiAoIWZvbGRlci5leGlzdHMoKSkgcmV0dXJuIHRydWU7Ci0KLSAgICAgYm9vbGVhbiAgICAgZGVsZXRlZCAgID0gdHJ1ZTsKLSAgICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gZm9sZGVyLm1lbWJlcnMoKTsKLSAgICAgCi0gICAgIGZvciAoaW50IGk9MDsgaTxyZXNvdXJjZXMubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07Ci0gICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICAgewotICAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZpbGUocmVzb3VyY2VDb250ZXh0LCAoSUZpbGUpcmVzb3VyY2UsIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0gICAgICAgfQotICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIpCi0gICAgICAgewotICAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZvbGRlciggcmVzb3VyY2VDb250ZXh0LCAoSUZvbGRlcilyZXNvdXJjZSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgICAgICB9Ci0KLSAgICAgICBpZiggIWRlbGV0ZWQgKSBicmVhazsKLSAgICAgfQotICAgICAKLSAgICAgaWYoIGRlbGV0ZWQgKQotICAgICB7Ci0gICAgICAgZm9sZGVyLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLSAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotCi0gIC8qKgotICAqIENyZWF0ZXMgYSBmaWxlIG9mIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICogYW5kIHJldHVybnMgaXRzIGhhbmRsZSBhcyBhbiA8Y29kZT5JRmlsZTwvY29kZT4uCi0gICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQsIGEKLSAgKiA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nIGFuCi0gICogPGNvZGU+SVN0YXR1czwvY29kZT4gb2JqZWN0IGlzIHRocm93bi4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KLSAgKiBUaGUgcHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgKiBAcmV0dXJuIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICogaGFuZGxlIG9mIHRoZSBmaWxlLgotICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAqIHdpdGggYSBzZXZlcml0eSBvZiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPiBhbmQgYQotICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSUZpbGUgY3JlYXRlRmlsZSAoCi0gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLSAgICBJUGF0aCAgICAgICAgICAgYWJzb2x1dGVQYXRoLAotICAgIElucHV0U3RyZWFtICAgICBpbnB1dFN0cmVhbSwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIgKQotCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gIHsgICAgCi0gICAgaWYgKCFhYnNvbHV0ZVBhdGguaXNBYnNvbHV0ZSgpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9OT1RfQUJTT0xVVEUsbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICB9Ci0gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDEpCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfRU1QVFksbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICB9Ci0gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDIpCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0ZPTERFUixuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgIH0KLSAgICBJQ29udGFpbmVyIHBhcmVudCAgID0gbWFrZUZvbGRlclBhdGgocmVzb3VyY2VDb250ZXh0LCBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICAgIFN0cmluZyAgICAgZmlsZU5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUZpbGUocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsIGZpbGVOYW1lLCBpbnB1dFN0cmVhbSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSAgfQotCi0gIC8qKgotICAqIENyZWF0ZXMgdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+Ci0gICogYSBmaWxlIG9mIHRoZSBnaXZlbiA8Y29kZT5yZWxhdGl2ZVBhdGg8L2NvZGU+Ci0gICogYW5kIHJldHVybnMgaXRzIGhhbmRsZSBhcyBhbiA8Y29kZT5JRmlsZTwvY29kZT4uCi0gICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQsIGEKLSAgKiA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nIGFuCi0gICogPGNvZGU+SVN0YXR1czwvY29kZT4gb2JqZWN0IGlzIHRocm93bi4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KLSAgKiBUaGUgcHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICogQHBhcmFtIGNyZWF0ZUZvbGRlcnMgVGhlIGludGVybWVkaWF0ZSBmb2xkZXIgY3JlYXRpb24gcG9saWN5LCBvbmUgb2YKLSAgKiB7QGxpbmsgI0NSRUFURSBDUkVBVEV9IG9yIHtAbGluayAjRE9OVF9DUkVBVEUgRE9OVF9DUkVBVEV9LgotICAqIDx1bD4KLSAgKiA8bGk+PGNvZGU+Q1JFQVRFPC9jb2RlPiAtCi0gICogSWYgYW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICogZG8gbm90IGV4aXN0LCB0aGV5IHdpbGwgYmUgY3JlYXRlZC4KLSAgKiA8bGk+PGNvZGU+RE9OVF9DUkVBVEU8L2NvZGU+IC0KLSAgKiBJZiBhbnkgaW50ZXJtZWRpYXRlIGZvbGRlcnMgaW4gdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgKiBkbyBub3QgZXhpc3QsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+LgotICAqIDwvdWw+Ci0gICogQHBhcmFtIG92ZXJ3cml0ZUZpbGUgVGhlIHBvbGljeSBmb3IgZXhpc3RpbmcgZmlsZXMsIG9uZSBvZgotICAqIHtAbGluayAjT1ZFUldSSVRFIE9WRVJXUklURX0gb3Ige0BsaW5rICNET05UX09WRVJXUklURSBET05UX09WRVJXUklURX0uCi0gICogPHVsPgotICAqIDxsaT48Y29kZT5PVkVSV1JJVEU8L2NvZGU+IC0KLSAgKiBJZiBhIHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGdpdmVuCi0gICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBmaWxlLAotICAqIGl0IHdpbGwgYmUgcmVwbGFjZWQuCi0gICogSWYgdGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIGFuZCBpdCBpcyBub3QgYSBmaWxlLAotICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgKiA8bGk+PGNvZGU+RE9OVF9PVkVSV1JJVEU8L2NvZGU+IC0KLSAgKiBJZiBhbnkgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgKiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IGFscmVhZHkgZXhpc3RzLAotICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgKiA8L3VsPgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICogQHJldHVybiBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAqIGhhbmRsZSBvZiB0aGUgZmlsZS4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIElGaWxlIGNyZWF0ZUZpbGUgKAotICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgSVByb2plY3QgICAgICAgIHByb2plY3QsCi0gICAgSVBhdGggICAgICAgICAgIHJlbGF0aXZlUGF0aCwKLSAgICBJbnB1dFN0cmVhbSAgICAgaW5wdXRTdHJlYW0sCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNNb25pdG9yICkKLSAKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKLSAgewotICAgIElQYXRoIGFic29sdXRlUGF0aCA9IHByb2plY3QuZ2V0RnVsbFBhdGgoKS5hcHBlbmQocmVsYXRpdmVQYXRoKTsKLSAgICByZXR1cm4gY3JlYXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIGFic29sdXRlUGF0aCwgaW5wdXRTdHJlYW0sIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0gIH0KLQotICAvKioKLSAgKiBDcmVhdGVzIGFuIG91dHB1dCBzdHJlYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0byB0aGUKLSAgKiBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPi4gQWN0dWFsIGNoYW5nZXMgdG8gdGhlIHdvcmtzcGFjZQotICAqIG1heSBvY2N1ciBkdXJpbmcgY3JlYXRpb24gb2YgdGhlIHN0cmVhbSwgd2hpbGUgd3JpdGluZyB0bwotICAqIHRoZSBzdHJlYW0sIG9yIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCi0gICogQSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nCi0gICogYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2lsbCBiZSB0aHJvd24KLSAgKiBhdCBzb21lIHBvaW50IGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHN0cmVhbQotICAqIGlmIHRoZSBmaWxlIHJlc291cmNlIGNhbm5vdCBiZSBjcmVhdGVkLgotICAqIEBwYXJhbSBmaWxlIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICogaGFuZGxlIG9mIHRoZSBmaWxlIHJlc291cmNlIHRvIGNyZWF0ZS4gVGhlIHByb2plY3QgaW1wbGllZCBieSB0aGUKLSAgKiBwYXRobmFtZSBvZiB0aGUgZmlsZSBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICogdGhhdCBpcywgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIHByb2plY3RzLgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICogQHJldHVybiBBbiA8Y29kZT5PdXRwdXRTdHJlYW08L2NvZGU+IHRpZWQgdG8gdGhlIGZpbGUgcmVzb3VyY2UuCi0gICogQWN0dWFsIGNoZWNrcyBvZiBvciBjaGFuZ2VzIHRvIHRoZSB3b3Jrc3BhY2UgbWF5IG9jY3VyIGFzIGVhcmx5IGR1cmluZwotICAqIHN0cmVhbSBjcmVhdGlvbiwgY2xvc3VyZSwgb3IgYW55IHRpbWUgaW4gYmV0d2Vlbi4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAqIFJlYXNvbnMgaW5jbHVkZToKLSAgKiA8b2w+Ci0gICogPGxpPlRoZSBwcm9qZWN0IG9mIHRoZSBnaXZlbiBmaWxlJ3MgcGF0aCBkb2VzIG5vdCBleGlzdC4KLSAgKiA8bGk+QSBub24tZmlsZSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWxlCi0gICogYWxyZWFkeSBleGlzdHMuCi0gICogPGxpPkEgZmlsZSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWxlCi0gICogYWxyZWFkeSBleGlzdHMsIGFuZCA8Y29kZT5vdmVyd3JpdGVGaWxlPC9jb2RlPiBpcyBmYWxzZS4KLSAgKiA8bGk+T25lIG9yIG1vcmUgaW50ZXJtZWRpYXRlIGZvbGRlcnMgdG8gdGhlIGdpdmVuIGZpbGUKLSAgKiBkbyBub3QgZXhpc3QsIGFuZCA8Y29kZT5jcmVhdGVGb2xkZXJzPC9jb2RlPiBpcyBmYWxzZS4KLSAgKiA8L29sPgotICAqLwotCi0gIHB1YmxpYyBzdGF0aWMgT3V0cHV0U3RyZWFtIG5ld0ZpbGVPdXRwdXRTdHJlYW0gKAotICAgICAgIFJlc291cmNlQ29udGV4dCAgY29udGV4dCwKLSAgICAgICBJUGF0aCAgICAgICAgICAgIGZpbGUsCi0gICAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gCi0gIHsKLSAgICByZXR1cm4gbmV3IEZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbShjb250ZXh0LCBmaWxlLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICB9Ci0KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIE5hdWdodHkgYml0cy4uLgotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLwotICAvLyBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzLgotICAvLyBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gIC8vCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzLgotICAgKiBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gICAqIEBwYXJhbSByZXNvdXJjZUNvbnRleHQgdGhlIHJlc291cmNlIGNvbnRleHQgZm9yIG1ha2luZyBmb2xkZXJzLgotICAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIHRoZSBwYXRoIG9mIGZvbGRlcnMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgdGhlIHByb2dyZXNzIG1vbml0b3IgdG8gYmUgdXNlZC4KLSAgICogQHBhcmFtIHN0YXR1c0hhbmRsZXIgdGhlIHN0YXR1cyBoYW5kbGVyLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElDb250YWluZXIgb2YgdGhlIGNyZWF0ZWQgZm9sZGVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIG1ha2VGb2xkZXJQYXRoICgKLSAgICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgICBJUGF0aCAgICAgICAgICAgIGFic29sdXRlUGF0aCwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyICkKLSAgCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPD0gMSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QoYWJzb2x1dGVQYXRoLnNlZ21lbnQoMCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgSUNvbnRhaW5lciBwYXJlbnQgPSBtYWtlRm9sZGVyUGF0aChyZXNvdXJjZUNvbnRleHQsIGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSksIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlciApOwotICAgICAgU3RyaW5nIGZvbGRlck5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICAgIAotICAgICAgY2hlY2tQYXJlbnQoIHBhcmVudCwgYWJzb2x1dGVQYXRoICk7Ci0gICAgICByZXR1cm4gbWFrZUZvbGRlcihyZXNvdXJjZUNvbnRleHQsIHBhcmVudCxmb2xkZXJOYW1lLCBwcm9ncmVzc01vbml0b3IgLCBzdGF0dXNIYW5kbGVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUGFyZW50KCBJQ29udGFpbmVyIHBhcmVudCwgSVBhdGggYWJzb2x1dGVQYXRoICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGlmKCBwYXJlbnQgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gVGhlIHBhcmVudCBpcyBudWxsLCBzbyB0aGVyZSBtdXN0IGhhdmUgYmVlbiBwcm9ibGVtcyBjcmVhdGluZyBpdC4gIFdlIHdpbGwgdGhyb3cKLSAgICAgIC8vIGEgQ29yZUV4Y2VwdGlvbiB3YXJuaW5nIGZvciB0aGlzIHByb2JsZW0uCi0gICAgICBJUGF0aCAgcGFyZW50UGF0aCA9IGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0gICAgICBTdHJpbmcgZm9sZGVyUGF0aCA9IGFic29sdXRlUGF0aC5sYXN0U2VnbWVudCgpOwotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRk9MREVSX0NSRUFUSU9OX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgcGFyZW50UGF0aC50b1N0cmluZygpLCBmb2xkZXJQYXRofSApICkgKTsKLSAgICB9ICAKLSAgfQotICAKLSAgLy8KLSAgLy8gQ3JlYXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLSAgLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0gIC8vCi0gcHJpdmF0ZSBzdGF0aWMgSUZvbGRlciBtYWtlRm9sZGVyICgKLSAgICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgICBJQ29udGFpbmVyICAgICAgIHBhcmVudCwKLSAgICBTdHJpbmcgICAgICAgICAgIGZvbGRlck5hbWUsCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gIAotICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVJlc291cmNlIGNoaWxkICA9IHBhcmVudC5maW5kTWVtYmVyKGZvbGRlck5hbWUpOwotICAgIENob2ljZSAgICByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBjaGlsZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkpICAKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdHVzSGFuZGxlci5yZXBvcnQoCi0gICAgICAgICAgICAgICAgU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygKLSAgICAgICAgICAgICAgICAJCU5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRCwKLSAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IHBhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIGZvbGRlck5hbWV9ICkgKSwgCi0gICAgICAgICAgICAgICAgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCByZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQycgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0EnICkKLSAgICAgICAgewotICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCkuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSUZvbGRlciBmb2xkZXIgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLSAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSx0cnVlLG51bGwpOwotICAgICAgcmV0dXJuIGZvbGRlcjsKLSAgICB9Ci0gICAgZWxzZSBpZiggY2hpbGQuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GT0xERVIgKQotICAgIHsKLSAgICAgIHJldHVybiAoSUZvbGRlciljaGlsZDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotICAgICAgICBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAKLSAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlVXRpbHMiLAotICAgICAgICAgICAgICAgICAgICAwLCAKLSAgICAgICAgICAgICAgICAgICAgTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUiwKLQkJCQkJICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IHBhcmVudC5nZXRGdWxsUGF0aCgpLmFwcGVuZChmb2xkZXJOYW1lKS50b1N0cmluZygpIH0pLAotCQkJbnVsbCApICk7Ci0gICAgfQotICB9Ci0KLSAgLy8KLSAgLy8gQ3JlYXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0gIC8vIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotICAvLwotIHByaXZhdGUgc3RhdGljIElGaWxlIG1ha2VGaWxlICgKLSAgICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgICBJQ29udGFpbmVyICAgICAgIHBhcmVudCwKLSAgICBTdHJpbmcgICAgICAgICAgIGZpbGVOYW1lLAotICAgIElucHV0U3RyZWFtICAgICAgaW5wdXRTdHJlYW0sCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotCSBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUoIG5ldyBQYXRoKGZpbGVOYW1lKSApOwotCi0JIC8vIGNyZWF0ZSB0aGUgZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0Ci0JIGlmICghZmlsZS5leGlzdHMoKSkgewotCQkgdHJ5IHsKLQkJCSBmaWxlLmNyZWF0ZSggaW5wdXRTdHJlYW0sIHRydWUsIG51bGwpOyAgICAKLQkJCSByZXR1cm4gZmlsZTsKLQkJIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY29yZUV4Y2VwdGlvbikgewotCQkJIC8vIHRoaXMgZXJyb3Igb25seSBoYXBwZW5zIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbTsgc28gaWdub3JlIHRoZSBjYXNlcy4KLQkJCSBpZiAoY29yZUV4Y2VwdGlvbi5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgPT0gSVJlc291cmNlU3RhdHVzLkNBU0VfVkFSSUFOVF9FWElTVFMpIHsKLQkJCQkgYm9vbGVhbiBmb3VuZElnbm9yaW5nQ2FzZSA9IGZhbHNlOwotCi0JCQkJIGZvciAoSVJlc291cmNlIHJlc291cmNlIDogcGFyZW50Lm1lbWJlcnMoKSkgewotCQkJCQkgaWYgKHJlc291cmNlLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKGZpbGVOYW1lKSkgewotCQkJCQkJIC8vIGZvdW5kIHRoZSBmaWxlCi0JCQkJCQkgZm91bmRJZ25vcmluZ0Nhc2UgPSB0cnVlOwotCQkJCQkJIGZpbGVOYW1lID0gcmVzb3VyY2UuZ2V0TmFtZSgpOwotCQkJCQkJIGZpbGUgPSBwYXJlbnQuZ2V0RmlsZSggbmV3IFBhdGgoZmlsZU5hbWUpKTsKLQkJCQkJCSBicmVhazsKLQkJCQkJIH0KLQkJCQkgfQotCi0JCQkJIC8vIGNhbid0IGZpbmQgdGhlIGZpbGUgY2F1c2luZyB0aGUgQ0FTRV9WQVJJQU5UX0VYSVNUUyBleGNlcHRpb247IHRocm93IHRoZSBleGNlcHRpb24KLQkJCQkgaWYgKCFmb3VuZElnbm9yaW5nQ2FzZSkKLQkJCQkJIHRocm93IGNvcmVFeGNlcHRpb247Ci0JCQkgfSBlbHNlIHsKLQkJCQkgLy8gdGhyb3cgb3RoZXIgZXhjZXB0aW9ucwotCQkJCSB0aHJvdyBjb3JlRXhjZXB0aW9uOwotCQkJIH0KLQkJIH0KLQkgfQotCi0JIAotICAgIENob2ljZSAgICByZXN1bHQgPSBudWxsOwotICAgIAotCi0gICAgaWYoIGZpbGUuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFICkKLSAgICB7Ci0gICAgICBpZiggIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpICkgICAKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdHVzSGFuZGxlci5yZXBvcnQoIAotICAgICAgICAgICAgICBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGVOYW1lfSkgKSwJCQkJCSAgCQkgICAgCi0gICAgICAgICAgICAgIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcmVzdWx0ID09IG51bGwgfHwgcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0MnICkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdBJyApCi0gICAgICAgIHsKLSAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgICAgIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKS5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0JCi0gICAgICAgIAotICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0gICAgICBpZiggZmlsZS5nZXRSZXNvdXJjZUF0dHJpYnV0ZXMoKSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgIAkvLyByZXNvdXJjZSBpcyBsaWtlbHkgb3V0LW9mLXN5bmMgd2l0aCBmaWxlc3lzdGVtCi0gICAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oIAotICAgICAgCSAgICAgICAgICBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLAotICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VVdGlscyIsCi0gICAgICAJICAgICAgICAgICAgICAgICAgICAgIDAsIAotICAgICAgCSAgICAgICAgICAgICAgICAgICAgICBmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwKLSAgICAgIAkJCQkJCSAgbnVsbCApICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBmaWxlLmdldFJlc291cmNlQXR0cmlidXRlcygpLmlzUmVhZE9ubHkoKSApCi0gICAgICB7Ci0gICAgICAgIGlmKCAhcmVzb3VyY2VDb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSApIAotICAgICAgICB7ICAgICAgICAgICAgCi0gICAgICAgICAgcmVzdWx0ID0gc3RhdHVzSGFuZGxlci5yZXBvcnQoIAotICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgcGFyZW50LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlTmFtZX0gKSApLCAKLSAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggcmVzdWx0ID09IG51bGwgfHwgcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0MnICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkJICB9Ci0gICAgICAgICAgZWxzZSBpZiggcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0EnICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCkuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLSAgICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpZmlsZTsKLSAgICAgICAgICAKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZUVkaXQoZmlsZXMsbnVsbCk7Ci0gICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0KCBzdGF0dXMgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggU3RhdHVzRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZmlsZS5zZXRDb250ZW50cyggaW5wdXRTdHJlYW0sIHRydWUsIHRydWUsIG51bGwgKTsKLSAgICAgICAgCi0gICAgICByZXR1cm4gZmlsZTsKLSAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oIAotICAgICAgICBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLAotICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VVdGlscyIsCi0gICAgICAgICAgICAgICAgICAgIDAsIAotICAgICAgICAgICAgICAgICAgICBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRklMRSwKLQkJICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLmFwcGVuZChmaWxlTmFtZSl9KSwKLQkJICAgICAgICAgICAgICAgICAgICAgICBudWxsICkgKTsKLSAgICB9Ci0gIH0KLQotIAotIC8qKgotICAgKiBDcmVhdGVzIGEgZmlsZSBvZiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAgKiBhbmQgcmV0dXJucyBpdHMgaGFuZGxlIGFzIGFuIDxjb2RlPklGaWxlPC9jb2RlPi4KLSAgICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQsIGEKLSAgICogPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gY29udGFpbmluZyBhbgotICAgKiA8Y29kZT5JU3RhdHVzPC9jb2RlPiBvYmplY3QgaXMgdGhyb3duLgotICAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KLSAgICogVGhlIHByb2plY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgICogQHJldHVybiBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAgKiBoYW5kbGUgb2YgdGhlIGZpbGUuCi0gICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgICogd2l0aCBhIHNldmVyaXR5IG9mIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+IGFuZCBhCi0gICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBJRmlsZSBjcmVhdGVGaWxlQXRMb2NhdGlvbiAoCi0gICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgIElQYXRoICAgICAgICAgICBhYnNvbHV0ZVBhdGgsCi0gICAgIElucHV0U3RyZWFtICAgICBpbnB1dFN0cmVhbSwKLSAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlciApCi0KLSAgICAgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gICB7ICAgIAotICAgICBpZiAoIWFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpCi0gICAgIHsKLSAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsICJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgIH0KLSAgICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDEpCi0gICAgIHsKLSAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9FTVBUWSxuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgICB9Ci0gICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPCAyKQotICAgICB7Ci0gICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0ZPTERFUixuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgICB9Ci0gICAgIElDb250YWluZXIgcGFyZW50ICAgPSBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24ocmVzb3VyY2VDb250ZXh0LCBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICAgICBTdHJpbmcgICAgIGZpbGVOYW1lID0gYWJzb2x1dGVQYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgIAotICAgICBjaGVja1BhcmVudCggcGFyZW50LCBhYnNvbHV0ZVBhdGggKTsKLSAgICAgCi0gICAgIHJldHVybiBtYWtlRmlsZShyZXNvdXJjZUNvbnRleHQsIHBhcmVudCwgZmlsZU5hbWUsIGlucHV0U3RyZWFtLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICAgfQotCi0vKioKLSAgKiBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzIHVzaW5nIGFic29sdXRlIGZpbGVuYW1lcy4KLSAgKiBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gICogQHBhcmFtIHJlc291cmNlQ29udGV4dCB0aGUgcmVzb3VyY2UgY29udGV4dCBmb3IgbWFraW5nIGZvbGRlcnMuCi0gICogQHBhcmFtIHJlc291cmNlIHRoZSByZXNvdXJjZSB0aGF0IHdpbGwgYmUgY3JlYXRlZC4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIHRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIGJlIHVzZWQuCi0gICogQHBhcmFtIHN0YXR1c0hhbmRsZXIgdGhlIHN0YXR1cyBoYW5kbGVyLgotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSUNvbnRhaW5lciBvZiB0aGUgY3JlYXRlZCBmb2xkZXIuCi0gICovCi0gcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbiAoCi0gICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgIElDb250YWluZXIgICAgICAgcmVzb3VyY2UsCi0gICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlciApCi0gCi0gICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgewotCSBpZiAocmVzb3VyY2UuZXhpc3RzKCkpCi0JIHsKLQkJIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIpCi0JCSB7Ci0JCQkgcmV0dXJuIChJQ29udGFpbmVyKSByZXNvdXJjZTsKLQkJIH0KLQkJIGVsc2UKLQkJIHsKLQkJCSB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbigKLQkJCQkJIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsIAotCQkJCQkJCSAiUmVzb3VyY2VVdGlscyIsCi0JCQkJCQkJIDAsIAotCQkJCQkJCSBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRk9MREVSLAotCQkJCQkJCQkJIG5ldyBPYmplY3RbXXsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpIH0pLAotCQkJCQkJCQkJIG51bGwgKSApOwotCQkgfQotCSB9Ci0JIGVsc2UKLQkgewotCQkgSUNvbnRhaW5lciBwYXJlbnQgPSBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24ocmVzb3VyY2VDb250ZXh0LCByZXNvdXJjZS5nZXRQYXJlbnQoKSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyICk7Ci0JCSBTdHJpbmcgZm9sZGVyTmFtZSA9IHJlc291cmNlLmdldE5hbWUoKTsKLQkJIAotCQkgcmV0dXJuIG1ha2VGb2xkZXIocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsIGZvbGRlck5hbWUsIHByb2dyZXNzTW9uaXRvciAsIHN0YXR1c0hhbmRsZXIgKTsKLQkgfQotIH0KLSAKLSAvKioKLSAgKiBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzLgotICAqIERvIG5vdCBjYWxsIHdpdGggYW4gYWJzb2x1dGVQYXRoIG9mIGxlc3MgdGhhbiBvbmUgc2VnbWVudC4KLSAgKiBAcGFyYW0gcmVzb3VyY2VDb250ZXh0IHRoZSByZXNvdXJjZSBjb250ZXh0IGZvciBtYWtpbmcgZm9sZGVycy4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIHRoZSBwYXRoIG9mIGZvbGRlcnMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciB0aGUgcHJvZ3Jlc3MgbW9uaXRvciB0byBiZSB1c2VkLgotICAqIEBwYXJhbSBzdGF0dXNIYW5kbGVyIHRoZSBzdGF0dXMgaGFuZGxlci4KLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElDb250YWluZXIgb2YgdGhlIGNyZWF0ZWQgZm9sZGVyLgotICAqLwotIHB1YmxpYyBzdGF0aWMgSUNvbnRhaW5lciBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24gKAotICAgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQsCi0gICBJUGF0aCAgICAgICAgICAgIGFic29sdXRlUGF0aCwKLSAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gCi0gICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotIHsKLSAJcmV0dXJuIG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbihyZXNvdXJjZUNvbnRleHQsCi0gCQlnZXRXb3Jrc3BhY2VSb290KCkuZ2V0Q29udGFpbmVyRm9yTG9jYXRpb24oYWJzb2x1dGVQYXRoKSwKLSAJCXByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gfQotIAotIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vU3RyaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0ZWE5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0gICogVGhpcyBjbGFzcyBjb250YWlucyBzb21lIHVzZWZ1bCBzdHJpbmcgdXRpbGl0aWVzIHRoYXQgYXJlIG5vdCBwcm92aWRlZCBieQotICAqIGVpdGhlciBTdHJpbmcgb3IgU3RyaW5nQnVmZmVyLgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotKiovCi1wdWJsaWMgZmluYWwgY2xhc3MgU3RyaW5nVXRpbHMKLXsKLSAgLyoqCi0gICogVGhlIHBsYXRmb3JtLXNwZWNpZmljIGxpbmUgc2VwYXJhdG9yLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORVdMSU5FID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gIHByaXZhdGUgU3RyaW5nVXRpbHMoKXt9OwotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2Qgc3BsaXRzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCBpbnRvIG11bHRpcGxlIGxpbmVzCi0gICAgKiBiYXNlZCBvbiBhIG1heGltdW0gbGluZSBsZW5ndGguICBUaGUgbWV0aG9kIHdpbGwgdHJ5IHRvIGZpdCBhcwotICAgICogbWFueSB3b3JkcyBhcyBwb3NzaWJsZSBvbnRvIGEgbGluZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgbWF4aW11bQotICAgICogbGluZSBsZW5ndGguICBOb3RlOiB0aGUgb25seSBjYXNlIHdoZXJlIGEgbGluZSBtaWdodCBleGNlZWQgdGhlCi0gICAgKiBtYXhpbXVtIGlzIGlmIGEgc2luZ2xlIHdvcmQgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0uCi0gICAgKiBAcGFyYW0gdGV4dCBhIHNpbmdsZSBsaW5lIGEgdGV4dCB0aGF0IGlzIHRvIGJlIHNwbGl0LgotICAgICogQHBhcmFtIG1heF9sZW5ndGggdGhlIG1heGltdW0gbGVuZ3RoIG9mIGVhY2ggc3BsaXQgbGluZS4KLSAgICAqIEByZXR1cm4gYSBzdHJpbmcgYXJyYXkgb2YgdGhlIHNwbGl0IGxpbmVzLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBzcGxpdHRlciggU3RyaW5nIHRleHQsIGludCBtYXhfbGVuZ3RoICkKLSAgewotICAgIFZlY3RvciAgICAgICAgICByZXR1cm5fdGV4dCA9IG5ldyBWZWN0b3IoMjApOwotICAgIFN0cmluZ1tdICAgICAgICByZXR1cm5fc3RyOwotICAgIGludCAgICAgICAgICAgICBpbmRleCA9IDA7Ci0KLSAgICB3aGlsZSggaW5kZXggPCB0ZXh0Lmxlbmd0aCgpICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gdGV4dC5zdWJzdHJpbmcoIGluZGV4LCBNYXRoLm1pbiggbWF4X2xlbmd0aCArIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQubGVuZ3RoKCkgKSApOwotICAgICAgaW50IHNwYWNlX2luZGV4ID0gc3RyLmxhc3RJbmRleE9mKCAiICIgKTsKLQotICAgICAgaWYoIGluZGV4ICsgc3RyLmxlbmd0aCgpIDwgdGV4dC5sZW5ndGgoKSAmJgotICAgICAgICAgIHRleHQuY2hhckF0KCBpbmRleCArIHN0ci5sZW5ndGgoKSAtIDEgKSAhPSAnICcgJiYKLSAgICAgICAgICB0ZXh0LmNoYXJBdCggaW5kZXggKyBzdHIubGVuZ3RoKCkgKSAhPSAnICcgJiYKLSAgICAgICAgICBzcGFjZV9pbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHJldHVybl90ZXh0LmFkZEVsZW1lbnQoIHN0ci5zdWJzdHJpbmcoIDAsIHNwYWNlX2luZGV4ICkgKTsKLSAgICAgICAgaW5kZXggKz0gc3BhY2VfaW5kZXggKyAxOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm5fdGV4dC5hZGRFbGVtZW50KCBzdHIudHJpbSgpICk7Ci0gICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGgoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm5fc3RyID0gbmV3IFN0cmluZ1tyZXR1cm5fdGV4dC5zaXplKCldOwotCi0gICAgZm9yKCBpbmRleCA9IDA7IGluZGV4IDwgcmV0dXJuX3RleHQuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICByZXR1cm5fc3RyW2luZGV4XSA9IChTdHJpbmcpKHJldHVybl90ZXh0LmVsZW1lbnRBdChpbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5fc3RyOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHdpdGggYSByZXBlYXRlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KLSAgICAqIEBwYXJhbSB0aGVfY2hhciB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlcGVhdGVkLgotICAgICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZSB0aGlzIGNoYXJhY3RlciBzaG91bGQgYmUgcmVwZWF0ZWQuCi0gICAgKiBAcmV0dXJuIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIHJlcGVhdGVkIGNoYXJhY3RlcnMuCi0gICoqLwotICBzdGF0aWMgcHVibGljIFN0cmluZyByZXBlYXQoIGNoYXIgdGhlX2NoYXIsIGludCBjb3VudCApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlciggY291bnQgKTsKLQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKyApCi0gICAgewotICAgICAgYnVmLmFwcGVuZCggdGhlX2NoYXIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIGZsYXR0ZW5zIGFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBhIHN0cmluZy4KLSAgICAqIFRoZSBtZXRob2QgcmVzcGVjdHMgZW1iZWRkZWQgd2hpdGVzcGFjZSBhbmQgcXVvdGVzLgotICAgICogPHVsPgotICAgICogPGxpPkFueSBhcmd1bWVudCB3aXRoIGVtYmVkZGVkIHdoaXRlc3BhY2Ugd2lsbCBiZSBmbGF0dGVuZWQgb3V0Ci0gICAgKiB3aXRoIGVuY2xvc2luZyBxdW90ZXMuIEZvciBleGFtcGxlLCB0aGUgc2luZ2xlIGFyZ3VtZW50Ci0gICAgKiA8dT5IZWxsbyBXb3JsZDwvdT4KLSAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMKLSAgICAqIDx1PiJIZWxsbyBXb3JsZCI8L3U+LgotICAgICogPGxpPkFueSBhcmd1bWVudCB3aXRoIHF1b3RlcyB3aWxsIGJlIGZsYXR0ZW5lZCBvdXQgd2l0aCB0aGUKLSAgICAqIHF1b3RlcyBlc2NhcGVkLiBGb3IgZXhhbXBsZSwgdGhlIHNpbmdsZSBhcmd1bWVudAotICAgICogPHU+IkhhcHB5IGRheXMiPC91PgotICAgICogd2lsbCBiZSByZXR1cm5lZCBhcwotICAgICogPHU+XCJIYXBweSBkYXlzXCI8L3U+LgotICAgICogPC91bD4KLSAgICAqIEBwYXJhbSBhcmd1bWVudHMgVGhlIGFycmF5IG9mIHN0cmluZ3MgdG8gZmxhdHRlbi4KLSAgICAqIEByZXR1cm4gdGhlIGZsYXR0ZW5lZCBzdHJpbmcuCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgU3RyaW5nIGZsYXR0ZW5Bcmd1bWVudHMgKCBTdHJpbmdbXSBhcmd1bWVudHMgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCBhIHNlcGFyYXRvciAoZXhjZXB0IHRoZSBmaXJzdCB0aW1lKS4KLSAgICAgIC8vCi0gICAgICBpZiAoaSA+IDApIGJ1Zi5hcHBlbmQoJyAnKTsKLQotICAgICAgLy8KLSAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2UuCi0gICAgICAvLwotICAgICAgYm9vbGVhbiB3aGl0ZXNwYWNlID0gZmFsc2U7Ci0gICAgICBjaGFyW10gY2hhcnMgPSBhcmd1bWVudHNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGo9MDsgIXdoaXRlc3BhY2UgJiYgajxjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2hhcnNbal0pKQotICAgICAgICB7Ci0gICAgICAgICAgd2hpdGVzcGFjZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCB0aGUgYXJndW1lbnQsIHF1b3RlZCBhcyBuZWNlc3NhcnkuCi0gICAgICAvLwotICAgICAgaWYgKHdoaXRlc3BhY2UpIGJ1Zi5hcHBlbmQoJyInKTsKLSAgICAgIGZvciAoaW50IGo9MDsgajxjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzW2pdID09ICciJykgYnVmLmFwcGVuZCgnXFwnKTsKLSAgICAgICAgYnVmLmFwcGVuZChjaGFyc1tqXSk7Ci0gICAgICB9Ci0gICAgICBpZiAod2hpdGVzcGFjZSkgYnVmLmFwcGVuZCgnIicpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcGFyc2VzIHdoaXRlc3BhY2UtZGVsaW1pdHRlZCBmaWxlbmFtZXMgZnJvbQotICAgICogdGhlIGdpdmVuIDxjb2RlPmlucHV0PC9jb2RlPiBzdHJlYW0uIDxiPkxpbWl0YXRpb246PC9iPgotICAgICogUXVvdGVkIGZpbGVuYW1lcyBvciBmaWxlbmFtZXMgd2l0aCBlbWJlZGRlZCB3aGl0ZXNwYWNlCi0gICAgKiBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCi0gICAgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbS4KLSAgICAqIEByZXR1cm4gQW4gZW51bWVyYXRpb24gb2YgZmlsZW5hbWVzIGZyb20gdGhlIHN0cmVhbS4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBFbnVtZXJhdGlvbiBwYXJzZUZpbGVuYW1lc0Zyb21TdHJlYW0gKCBJbnB1dFN0cmVhbSBpbnB1dCApCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIGZpbGVuYW1lcyA9IG5ldyBWZWN0b3IoNjQsNjQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBudWxsOwotICAgIGJ5dGUgc3RhdGUgPSBTVEFURV9XUzsKLSAgICBpbnQgaWMgPSBpbnB1dC5yZWFkKCk7Ci0gICAgd2hpbGUgKGljID49IDApCi0gICAgewotICAgICAgY2hhciBjID0gKGNoYXIpaWM7Ci0gICAgICBzd2l0Y2ggKHN0YXRlKQotICAgICAgewotICAgICAgICBjYXNlIFNUQVRFX1dTOgotICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9OV1M7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNUQVRFX05XUzoKLSAgICAgICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGJ1ZmZlci50b1N0cmluZygpOwotICAgICAgICAgICAgZmlsZW5hbWVzLmFkZChmaWxlbmFtZSk7Ci0gICAgICAgICAgICBidWZmZXIgPSBudWxsOwotICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9XUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpYyA9IGlucHV0LnJlYWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVuYW1lcy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTVEFURV9XUyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgU1RBVEVfTldTID0gMTsKLQotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpcyB0aGUgdHlwZSBwYXNzZWQgaW4gaXMgYSBwcmltdGl2ZSBqYXZhIHR5cGUKLSAgKiBAcGFyYW0gY2xhc3MgbmFtZSBTdHJpbmcKLSAgKiBAcmV0dXJuIHRydWUgaXMgcHJpbWl0aXZlIHR5cGUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUHJpbWl0aXZlVHlwZShTdHJpbmcgdHlwZU5hbWUpIAotICB7Ci0KLSAgICBpZiAodHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYm9vbGVhbiIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJieXRlIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImRvdWJsZSIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJmbG9hdCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbnQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgibG9uZyIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzaG9ydCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJjaGFyIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAqIFRoZSBtZXRob2QgcmVwbGFjZSB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSBhbGxvd2VkIGluIFVSSXMKLSAgKiBhbmQgbm90IGFsbG93ZWQgaW4gSmF2YSBjbGFzcyBuYW1lcyB0byBhbiB1bmRlcnNjb3JlICgnXycpCi0gICogQHBhcmFtIFVSSSBTdHJpbmcKLSAgKiBAcmV0dXJuIHZhbGlkIEphdmEgY2xhc3MgbmFtZSBTdHJpbmcKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgVVJJMkNsYXNzTmFtZSggU3RyaW5nIHVyaSApIHsKLSAgICBTdHJpbmcgY2xhc3NOYW1lID0gdXJpOwotICAgIGZvciAoIGludCBpID0gMDsgaSA8IFVSSV9TWU1CT0xTLmxlbmd0aDsgaSsrICkgewotICAgIAljbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSAoIFVSSV9TWU1CT0xTW2ldLCBVTkRFUlNDT1JFICk7Ci0gICAgfQotICAgIHJldHVybiBjbGFzc05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhbmQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBleGNlcHRpb24gdHJhY2ViYWNrIGluZm9ybWF0aW9uIG9mCi0gICAqIGEgVGhyb3dhYmxlLiAgVGhpcyBpcyB0aGUgc2FtZSB0cmFjZWJhY2sgZGF0YSB0aGF0IGlzIGRpc3BsYXllZCBieSBleGMucHJpbnRTdGFja1RyYWNlKCkuCi0gICAqIEBwYXJhbSBleGMgdGhlIGV4Y2VwdGlvbgotICAgKiBAcmV0dXJuIGEgc3RyaW5nIGFycmF5IG9mIHRoZSB0cmFjZWJhY2sgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFN0YWNrVHJhY2UoIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgVmVjdG9yICAgICAgIGxpbmVzICAgICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdXcml0ZXIgc3RyaW5nV3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyICBwcmludFdyaXRlciAgPSBuZXcgUHJpbnRXcml0ZXIoIHN0cmluZ1dyaXRlciApOwotICAgIAotICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoIHByaW50V3JpdGVyICk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgcHJpbnRXcml0ZXIuY2xvc2UoKTsKLSAgICAgIHN0cmluZ1dyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIG5lc3RlZEV4YyApCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgfQotICAgIAotICAgIFN0cmluZ1JlYWRlciBzdHJpbmdSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKCBzdHJpbmdXcml0ZXIudG9TdHJpbmcoKSApOwotICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciAgICAgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIHN0cmluZ1JlYWRlciApOwotICAgIFN0cmluZyAgICAgICAgIGxpbmUgICAgICAgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAKLSAgICAgIHdoaWxlKCBsaW5lICE9IG51bGwgKQotICAgICAgewotICAgICAgICBsaW5lcy5hZGQoIGxpbmUudHJpbSgpICk7Ci0gICAgICAgIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBuZXN0ZWRFeGMgKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKWxpbmVzLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIFVSSV9TWU1CT0xTID0geyctJywgJ34nLCAnIycsICcvJywgJy4nfTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vV2FpdEZvckF1dG9CdWlsZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1dhaXRGb3JBdXRvQnVpbGRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZDVlNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vV2FpdEZvckF1dG9CdWlsZENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQGRlcHJlY2F0ZWQgV2Ugc2hvdWxkIG5vdCBkZXBlbmQgb24gdGhlIGF1dG8gYnVpbGQgdG8gYnVpbGQgcHJvamVjdHMsIHNpbmNlIGF1dG8gYnVpbGQgbWlnaHQgYmUgb2ZmLgotICogVHJ5IHVzaW5nIEJ1aWxkQmVhbkNvbW1hbmQgb3IgQnVpbGRQcm9qZWN0Q29tbWFuZCB0byBidWlsZCB0aGUgcHJvamVjdCBpbnN0ZWFkLiBBbHNvLCB0aGUgam9pbigpIGNhbGwgCi0gKiBjYW4gbGVhZCB0byBkZWFkbG9jayBpbiBzb21lIHNpdHVhdGlvbnMuCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZEJlYW5Db21tYW5kCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kCi0qLyAKLXB1YmxpYyBjbGFzcyBXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9udGl0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotCXRyeSAKLQl7Ci0JICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCX0gCi0JY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApIAotCXsKLQkgIC8vIFVJU3luY2hyb25pemVyLnN5bmNFeGVjIHNlZW1zIHRvIGludGVycnVwdCB0aGUgVUkgdHJlYWQgd2hlbiB0aGUgYXV0b2J1aWxkZXIgaXMgZG9uZS4gIE5vdCBzdXJlLCB3aHkuCi0JICAvLyBJJ20gYXNzdW1pbmcgaGVyZSB0aGF0IHRoZSBhdXRvYnVpbGRlciBoYXMgYWN0dWFsbHkgY29tcGxldGVkIGl0cyBzdHVmZi4JCi0JfQotCQkKLQlyZXR1cm4gc3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkYTlkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUyMiAgIDE4NDAwNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgcHJlZmVyZW5jZXNfOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSByZWdpc3RyeV87Ci0KLSAgcHJpdmF0ZSBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5KCkKLSAgewotICAgIHByZWZlcmVuY2VzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBsb2FkRGlhbG9nc1ByZWZlcmVuY2VzKCk7ICAKLSAgfQotICAKLSAgc3RhdGljIHB1YmxpYyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCByZWdpc3RyeV8gPT0gbnVsbCApCi0gICAgewotICAgICAgcmVnaXN0cnlfID0gbmV3IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlZ2lzdHJ5XzsKLSAgfQotICAKLSAgLy8KLSAgcHJpdmF0ZSB2b2lkIGxvYWREaWFsb2dzUHJlZmVyZW5jZXMgKCkKLSAgewotICAJSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvciggIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PGNvbmZpZy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICBlbGVtICAgPSBjb25maWdbaWR4XTsgICAgIAotICAgICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gbmV3IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlKCk7Ci0gICAgICAKLSAgICAgIGRpYWxvZy5zZXRJZCggZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgKTsKLSAgICAgIGRpYWxvZy5zZXROYW1lKCBlbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpICk7Ci0gICAgICBkaWFsb2cuc2V0SW5mb3BvcCggZWxlbS5nZXRBdHRyaWJ1dGUoImluZm9wb3AiKSApOwotICAgICAgZGlhbG9nLnNldFRvb2x0aXAoIGVsZW0uZ2V0QXR0cmlidXRlKCJ0b29sdGlwIikgKTsKLSAgICAgIGRpYWxvZy5zZXRDYXRlZ29yeSggZWxlbS5nZXRBdHRyaWJ1dGUoImNhdGVnb3J5IikgKTsKLSAgICAgIAotICAgICAgU3RyaW5nIHNob3dDaGVja2JveCA9IGVsZW0uZ2V0QXR0cmlidXRlKCAic2hvd2NoZWNrYm94IiApOwotICAgICAgU3RyaW5nIGFsd2F5c0hpZGUgICA9IGVsZW0uZ2V0QXR0cmlidXRlKCAiYWx3YXlzaGlkZSIgKTsKLSAgICAgIAotICAgICAgZGlhbG9nLnNldFNob3dDaGVja2JveCggc2hvd0NoZWNrYm94ID09IG51bGwgPyB0cnVlIDogc2hvd0NoZWNrYm94LmVxdWFscyggInRydWUiICkgKTsKLSAgICAgIGRpYWxvZy5zZXRBbHdheXNIaWRlKCBhbHdheXNIaWRlID09IG51bGwgPyBmYWxzZSA6IGFsd2F5c0hpZGUuZXF1YWxzKCAidHJ1ZSIgKSApOwotICAgICAgCi0gICAgICBzZXRPYmplY3RJZHMoIGVsZW0uZ2V0QXR0cmlidXRlKCAib2JqZWN0aWRzIiApLCBkaWFsb2cgKTsKLSAgICAgIAotICAgICAgcHJlZmVyZW5jZXNfLmFkZChkaWFsb2cpOyAgICAgICAgCi0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldE9iamVjdElkcyggU3RyaW5nIGlkTGlzdCwgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nICkKLSAgewotICAgIGlmKCBpZExpc3QgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RyaW5nW10gaWRzID0gaWRMaXN0LnNwbGl0KCAiICIgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGlkcy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBkaWFsb2cuYWRkT2JqZWN0SWQoIGlkc1tpbmRleF0gKTsgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgYWxsIHJlZ2lzdGVyZWQgPGNvZGU+V2ViU2VydmljZVR5cGU8L2NvZGU+IG9iamVjdHMuCi0gICogQHJldHVybiBBbGwgcmVnaXN0ZXJlZCA8Y29kZT5XZWJTZXJ2aWNlVHlwZTwvY29kZT4gb2JqZWN0cy4KLSAgKi8KLSAgcHVibGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZXMgKCkKLSAgewotICAgIHJldHVybiAoQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSlwcmVmZXJlbmNlc18udG9BcnJheSggbmV3IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlWzBdKTsKLSAgfQotICAKLSAgcHVibGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2UoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBwcmVmZXJlbmNlc18uc2l6ZSgpOwotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgcHJlZmVyZW5jZSA9IChBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSlwcmVmZXJlbmNlc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgCi0gICAgICBpZiggcHJlZmVyZW5jZS5nZXRPYmplY3RJZHMoKS5jb250YWlucyggaWQgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHByZWZlcmVuY2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMmE2MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUyMiAgIDE4NDAwNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0gIHByaXZhdGUgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSByZWdpc3RyeTsKLSAgCi0gIHByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBpbnN0YW5jZV8gPSBudWxsOwotCi0gIHByaXZhdGUgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0KCkKLSAgewotICAgIHN1cGVyKEVudlBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotICAKLSAgc3RhdGljIHB1YmxpYyBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIGluc3RhbmNlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0KCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICByZWdpc3RyeSA9IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdIGRpYWxvZ3MgPSByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlcygpOwotICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgc2V0RGVmYXVsdChkaWFsb2dzW2ldLmdldElkKCksIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBnZXREaWFsb2dzKCkKLSAgewotICAgIHJldHVybiByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWN0aW9uRGlhbG9nRW5hYmxlZChTdHJpbmcgaWQsIGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZShpZCwgdmFsdWUpOwotICB9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSB0aGUgcG9wdXAgd2l6YXJkIHdpdGggdGhlIElkCi0gIC8vIG9mIHRoZSBPYmplY3RDb250cmlidXRpb24gZGVmaW5pbmcgdGhlIHBvcHVwLgotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RBY3Rpb25EaWFsb2dFbmFibGVkKCBTdHJpbmcgaWQsIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgLy8gTmVlZCB0byBmaXJzdCBmaW5kIHRoZSBkaWFsb2cgb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcG9wdXAuCi0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZSggaWQgKTsKLSAgICAKLSAgICBpZiggZGlhbG9nICE9IG51bGwgKQotICAgIHsKLSAgICAgIHNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoIGRpYWxvZy5nZXRJZCgpLCB2YWx1ZSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNBY3Rpb25EaWFsb2dFbmFibGVkKFN0cmluZyBpZCkKLSAgewotICAgIGlmIChpZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oaWQpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBzaG93RGlhbG9nKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZSggaWQgKTsgICAgCi0gICAKLSAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGUgcG9wdXAgd2l6YXJkIHNob3VsZCBiZSBkaXNwbGF5ZWQKLSAgICAvLyBvciBub3Qgd2l0aCB0aGlzIGxvZ2ljLiAgSWYgdGhlIGRpYWxvZyB2YXJpYWJsZSBpcyBudWxsIHRoZW4KLSAgICAvLyB0aGVyZSB3YXMgbm8gcG9wdXAgZXh0ZW5zaW9uIHBvaW50IHBvaW50IGRlZmluZWQgZm9yIHRoaXMgd2l6YXJkLiAgSW4KLSAgICAvLyB0aGlzIGNhc2Ugd2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGUgcG9wdXAgc2hvdWxkIGFsd2F5cyBiZSBkaXNwbGF5ZWQuCi0gICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGV4dGVuc2lvbiBzYXlzIHRoYXQgdGhlIHNob3cgY2hlY2sgYm94IGNvbnRyb2wKLSAgICAvLyBzaG91bGQgYmUgZGlzcGxheWVkIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2l6YXJkIHNob3VsZCBub3QgYWx3YXlzCi0gICAgLy8gYmUgaGlkZGVuLCBhcyB3ZWxsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aGUgY2hlY2sKLSAgICAvLyBib3ggdmlhIHRoZSBpc0FjdGlvbkRpYWxvZ0VuYWJsZWQgY2FsbC4gIElmIHRoZSBzaG93IGNoZWNrIGJveCBzdGF0ZQotICAgIC8vIGRlZmluZWQgaW4gdGhlIGV4dGVuc2lvbiBpcyBmYWxzZSwgYnV0IGFsd2F5cyBoaWRlIGlzIGFsc28gZmFsc2UgdGhlbgotICAgIC8vIHdlIHdpbGwgZGlzcGxheSB0aGUgcG9wIHdpemFyZC4KLSAgICByZXR1cm4gZGlhbG9nID09IG51bGwgfHwKLSAgICAgICAgICAgKCAoIGRpYWxvZy5nZXRTaG93Q2hlY2tib3goKSAmJiAKLSAgICAgICAgICAgICAgICFkaWFsb2cuZ2V0QWx3YXlzSGlkZSgpICYmIAotICAgICAgICAgICAgICAgIWlzQWN0aW9uRGlhbG9nRW5hYmxlZCggZGlhbG9nLmdldElkKCkpICkgfHwKLSAgICAgICAgICAgICAoICFkaWFsb2cuZ2V0U2hvd0NoZWNrYm94KCkgJiYgCi0gICAgICAgICAgICAgICAhZGlhbG9nLmdldEFsd2F5c0hpZGUoKSApICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHNob3dDaGVja2JveCggU3RyaW5nIGlkICkKLSAgewotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyA9IHJlZ2lzdHJ5LmdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2UoIGlkICk7ICAgIAotICAgIAotICAgIHJldHVybiBkaWFsb2cgPT0gbnVsbCA/IGZhbHNlIDogZGlhbG9nLmdldFNob3dDaGVja2JveCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudENvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWE1YmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuQ29udGV4dDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYXMgdGhlIGJhc2UgY2xhc3MgZm9yIHR5cGVzIHRoYXQgd2hhdCB0byBwZXJzaXN0IHByZWZlcmVuY2UKLSAqIGRhdGEgaW4gdGhlIHBsdWdpbiBwcmVmZXJlbmNlcyBhcmVhLgotICoKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzIENvbnRleHQKLXsKLSBwcm90ZWN0ZWQgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXNfOwotIHByb3RlY3RlZCBQbHVnaW4gcGx1Z2luXzsKLQotIHB1YmxpYyBQZXJzaXN0ZW50Q29udGV4dCAoIFBsdWdpbiBwbHVnaW4pCi0gCXsKLSAJCXBsdWdpbl8gPSBwbHVnaW47Ci0gCSAgCXByZWZlcmVuY2VzXyA9IHBsdWdpbi5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotIAl9Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0RGVmYXVsdChuYW1lLCB2YWx1ZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldERlZmF1bHQobmFtZSx2YWx1ZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBpbnQgdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldERlZmF1bHQobmFtZSx2YWx1ZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0VmFsdWUobmFtZSx2YWx1ZSk7Ci0gCXBsdWdpbl8uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7Ci0gCXBsdWdpbl8uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIGludCB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0VmFsdWUobmFtZSwgdmFsdWUpOwotIAlwbHVnaW5fLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFZhbHVlQXNTdHJpbmcgKCBTdHJpbmcgbmFtZSkgewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldFN0cmluZyhuYW1lKTsKLSAJfQotIAotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZhbHVlQXNCb29sZWFuICggU3RyaW5nIG5hbWUpIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXRCb29sZWFuKG5hbWUpOwotIAl9Ci0gIAotICAvKioKLSAgICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICAqLwotIHB1YmxpYyBpbnQgZ2V0VmFsdWVBc0ludCggU3RyaW5nIG5hbWUpIHsKLSAJCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0SW50KG5hbWUpOwotIAl9Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRTdHJpbmcoU3RyaW5nIG5hbWUpCi0gewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldERlZmF1bHRTdHJpbmcobmFtZSk7Ci0gfQotIAotIC8qKgotICAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBib29sZWFuIGdldERlZmF1bHRCb29sZWFuKFN0cmluZyBuYW1lKQotIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0Qm9vbGVhbihuYW1lKTsKLSB9Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgaW50IGdldERlZmF1bHRJbnQoU3RyaW5nIG5hbWUpCi0gewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldERlZmF1bHRJbnQobmFtZSk7Ci0gfQotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UgaWYgYSBkZWZhdWx0IHZhbHVlIGhhcwotICAqIG5vdCBhbHJlYWR5IGJlZW4gc2V0LgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0U3RyaW5nSWZOb0RlZmF1bHQoIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSApCi0gewotICAgLy8gSWYgdGhlIGtleSBhbHJlYWR5IGhhcyBhIGRlZmF1bHQgdmFsdWUgd2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSBpdC4KLSAgIGlmKCBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdFN0cmluZygga2V5ICkuZXF1YWxzKCIiKSApIAotICAgewotICAgICBwcmVmZXJlbmNlc18uc2V0RGVmYXVsdCgga2V5LCB2YWx1ZSApOwotICAgfQotIH0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZSBpZiBhIGRlZmF1bHQgdmFsdWUgaGFzCi0gICogbm90IGFscmVhZHkgYmVlbiBzZXQuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoIFN0cmluZyBrZXksIGJvb2xlYW4gdmFsdWUgKQotIHsKLSAgIC8vIElmIHRoZSBrZXkgYWxyZWFkeSBoYXMgYSBkZWZhdWx0IHZhbHVlIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgaXQuCi0gICBpZiggcHJlZmVyZW5jZXNfLmdldERlZmF1bHRTdHJpbmcoIGtleSApLmVxdWFscygiIikgKSAKLSAgIHsKLSAgICAgcHJlZmVyZW5jZXNfLnNldERlZmF1bHQoIGtleSwgdmFsdWUgKTsKLSAgIH0KLSB9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZSBpZiBhIGRlZmF1bHQgdmFsdWUgaGFzCi0gICogbm90IGFscmVhZHkgYmVlbiBzZXQuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHRJbnRJZk5vRGVmYXVsdCggU3RyaW5nIGtleSwgaW50IHZhbHVlICkKLSB7Ci0gICAvLyBJZiB0aGUga2V5IGFscmVhZHkgaGFzIGEgZGVmYXVsdCB2YWx1ZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIGl0LgotICAgaWYoIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0U3RyaW5nKCBrZXkgKS5lcXVhbHMoIiIpICkgCi0gICB7Ci0gICAgIHByZWZlcmVuY2VzXy5zZXREZWZhdWx0KCBrZXksIHZhbHVlICk7Ci0gICB9Ci0gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZmI0YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgUmVzb3VyY2VDb250ZXh0Ci17Ci0gIHByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dF8gPSBudWxsOwotICAKLSAgcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBjb250ZXh0XyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBjb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgICBjb250ZXh0Xy5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAgIHN1cGVyKEVudlBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX09WRVJXUklURSwgUmVzb3VyY2VEZWZhdWx0cwotICAgICAgICAuZ2V0T3ZlcndyaXRlRmlsZXNEZWZhdWx0KCkpOwotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSUywgUmVzb3VyY2VEZWZhdWx0cwotICAgICAgICAuZ2V0Q3JlYXRlRm9sZGVyc0RlZmF1bHQoKSk7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX0NIRUNLT1VULCBSZXNvdXJjZURlZmF1bHRzLmdldENoZWNrb3V0RmlsZXNEZWZhdWx0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9PVkVSV1JJVEUsIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9PVkVSV1JJVEUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTLCBlbmFibGUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSUyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDaGVja291dEZpbGVzRW5hYmxlZChib29sZWFuIGVuYWJsZSkKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfQ0hFQ0tPVVQsIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0NIRUNLT1VUKTsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgY29weSgpCi0gIHsKLSAgICBSZXNvdXJjZUNvbnRleHQgY2MgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgY2Muc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotICAgIGNjLnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKGlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSk7Ci0gICAgY2Muc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKTsKLSAgICByZXR1cm4gY2M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9BY2N1bXVsYXRlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0FjY3VtdWxhdGVTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDMwZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0FjY3VtdWxhdGVTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTEwICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBleHRlbmRzIEJhc2VTdGF0dXNIYW5kbGVyewotCi0JQXJyYXlMaXN0IHN0YXR1c0xpc3RfID0gbnVsbDsKLQlBcnJheUxpc3QgZXJyb3JMaXN0XyA9IG51bGw7Ci0JQXJyYXlMaXN0IHdhcm5pbmdMaXN0XyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoKXsKLQkJcmVzZXRTdGF0dXMoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHJlbG9hZGluZyBzdGF0dXMgdmFsdWVzIGFuZCB1c2luZyB0aGUgdXRpbGl0eSBtZXRob2RzCi0JICovCi0JcHVibGljIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKElTdGF0dXNbXSBzdGF0dXMpewotCQlyZXNldFN0YXR1cygpOwotCQlmb3IgKGludCBpPTA7aTxzdGF0dXMubGVuZ3RoO2krKykKLQkJCXN0YXR1c0xpc3RfLmFkZChzdGF0dXNbaV0pOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSB7Ci0JICAgIElTdGF0dXMgd29yc3RTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgICAKLQkgICAgLy8gRmluZCB0aGUgd29yc3QgZXJyb3Igc3RhdHVzIGNvZGUKLQkgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXR1c0xpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0JICAgIHsKLQkgICAgICBJU3RhdHVzIHN0YXR1cyA9IChJU3RhdHVzKXN0YXR1c0xpc3RfLmdldCggaW5kZXggKTsKLQkgICAgICAKLQkgICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPiB3b3JzdFN0YXR1cy5nZXRTZXZlcml0eSgpICkKLQkgICAgICB7Ci0JICAgICAgICB3b3JzdFN0YXR1cyA9IHN0YXR1czsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIHJldHVybiB3b3JzdFN0YXR1czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldFN0YXR1cygpIHsKLQkgICAgc3RhdHVzTGlzdF8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIGVycm9yTGlzdF8gPSBudWxsOwotCSAgICB3YXJuaW5nTGlzdF8gPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydChJU3RhdHVzIHN0YXR1cykgdGhyb3dzIFN0YXR1c0V4Y2VwdGlvbiB7Ci0JCXN0YXR1c0xpc3RfLmFkZChzdGF0dXMpOwotCX0KLQotCXB1YmxpYyBDaG9pY2UgcmVwb3J0KElTdGF0dXMgc3RhdHVzLCBDaG9pY2VbXSBjaG9pY2VzKSB7Ci0JICAJQ2hvaWNlIHJlc3VsdCA9IG51bGw7Ci0JICAJCi0JICAJLy8gQWx3YXlzIHRha2UgdGhlIGZpcnN0IGNob2ljZSBpZiBhdmFpbGFibGUuCi0JICAgIGlmKCBjaG9pY2VzICE9IG51bGwgJiYgY2hvaWNlcy5sZW5ndGggPiAwICkKLQkgICAgewotCSAgICAJcmVzdWx0ID0gY2hvaWNlc1swXTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdHVzTGlzdF8uYWRkKCBzdGF0dXMgKTsKLQkgICAgCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoSVN0YXR1cyBzdGF0dXMpIHsKLQkJc3RhdHVzTGlzdF8uYWRkKHN0YXR1cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0SW5mbyhJU3RhdHVzIHN0YXR1cykgewotCQlzdGF0dXNMaXN0Xy5hZGQoc3RhdHVzKTsKLQl9Ci0JCi0JLyoqCi0JICogRm9yIHVzZSBieSBhc3NlcnRpb24gbWV0aG9kcwotCSAqIEByZXR1cm4gSVN0YXR1c1tdCi0JICovCi0JcHVibGljIElTdGF0dXNbXSBnZXRBbGxSZXBvcnRzKCl7Ci0JCWlmIChzdGF0dXNMaXN0Xz09bnVsbCB8fCBzdGF0dXNMaXN0Xy5pc0VtcHR5KCkpewotCQkJcmV0dXJuIG5ldyBJU3RhdHVzW117U3RhdHVzLk9LX1NUQVRVU307Ci0JCX0KLQkJcmV0dXJuIChJU3RhdHVzW10pc3RhdHVzTGlzdF8udG9BcnJheShuZXcgSVN0YXR1c1swXSk7Ci0JfQotCQotCS8qKgotCSAqIEdldCBlcnJvciBzdGF0dXNlcyBvbmx5Ci0JICogQHJldHVybiBJU3RhdHVzW10KLQkgKi8KLQlwdWJsaWMgSVN0YXR1c1tdIGdldEVycm9yUmVwb3J0cygpewotCQlpZiAoZXJyb3JMaXN0Xz09bnVsbCkKLQkJCXNvcnRSZXBvcnRzKCk7Ci0JICAgIHJldHVybiAoSVN0YXR1c1tdKWVycm9yTGlzdF8udG9BcnJheShuZXcgSVN0YXR1c1swXSk7Ci0JfQotCQotCS8qKgotCSAqIEdldCB3YXJuaW5nIHN0YXR1c2VzIG9ubHkKLQkgKiBAcmV0dXJuIElTdGF0dXNbXQotCSAqLwotCXB1YmxpYyBJU3RhdHVzW10gZ2V0V2FybmluZ1JlcG9ydHMoKXsKLQkJaWYgKHdhcm5pbmdMaXN0Xz09bnVsbCkKLQkJCXNvcnRSZXBvcnRzKCk7Ci0JCXJldHVybiAoSVN0YXR1c1tdKXdhcm5pbmdMaXN0Xy50b0FycmF5KG5ldyBJU3RhdHVzWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogU29ydCBhbGwgc3RhdHVzIHJlcG9ydHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgc29ydFJlcG9ydHMoKXsKLQkgICAgZXJyb3JMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgd2FybmluZ0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICAKLQkgICAgLy8gU29ydCBhY2NvcmRpbmcgdG8gZXJyb3Igc3RhdHVzIGNvZGUKLQkgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXR1c0xpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0JICAgIHsKLQkgICAgICBJU3RhdHVzIHN0YXR1cyA9IChJU3RhdHVzKXN0YXR1c0xpc3RfLmdldChpbmRleCk7Ci0JICAgICAgCi0JICAgICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpPT0gSVN0YXR1cy5FUlJPUil7Ci0JICAgICAgICBlcnJvckxpc3RfLmFkZChzdGF0dXMpOwotCSAgICAgIH0KLQkgICAgICBlbHNlIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09SVN0YXR1cy5XQVJOSU5HKXsKLQkgICAgICAgIHdhcm5pbmdMaXN0Xy5hZGQoc3RhdHVzKTsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlRWNsaXBzZUVudmlyb25tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZUVjbGlwc2VFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzBhNDMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlRWNsaXBzZUVudmlyb25tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGFkZHMgcmVzb3VyY2VzIHRvIHRoZSBiYXNlIElFbnZpcm9ubWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBCYXNlRWNsaXBzZUVudmlyb25tZW50IGV4dGVuZHMgSUVudmlyb25tZW50IAotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFJlc291cmNlQ29udGV4dCBvYmplY3QgZm9yIHRoaXMgZW52aXJvbm1lbnQuCi0gICAqLwkKLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NTljNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEJhc2VTdGF0dXNIYW5kbGVyIGltcGxlbWVudHMgSUVjbGlwc2VTdGF0dXNIYW5kbGVyCi17Ci0gIHByaXZhdGUgSVN0YXR1cyB3b3JzdFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotCXJldHVybiB3b3JzdFN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0U3RhdHVzKCkgCi0gIHsKLSAgICB3b3JzdFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CQkKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlcG9ydChJU3RhdHVzIHN0YXR1cykgdGhyb3dzIFN0YXR1c0V4Y2VwdGlvbiAKLSAgewotICAgIGNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0gIH0KLQotICBwdWJsaWMgQ2hvaWNlIHJlcG9ydChJU3RhdHVzIHN0YXR1cywgQ2hvaWNlW10gY2hvaWNlcykgCi0gIHsKLQljaGVja1N0YXR1cyhzdGF0dXMpOwotCXJldHVybiBjaG9pY2VzID09IG51bGwgfHwgY2hvaWNlcy5sZW5ndGggPT0gMD8gbnVsbCA6IGNob2ljZXNbMF07Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihJU3RhdHVzIHN0YXR1cykgCi0gIHsKLQljaGVja1N0YXR1cyhzdGF0dXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVwb3J0SW5mbyhJU3RhdHVzIHN0YXR1cykgCi0gIHsKLQljaGVja1N0YXR1cyhzdGF0dXMpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjaGVja1N0YXR1cyggSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID4gd29yc3RTdGF0dXMuZ2V0U2V2ZXJpdHkoKSApCi0gICAgewotICAgICAgd29yc3RTdGF0dXMgPSBzdGF0dXM7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRWNsaXBzZUVudmlyb25tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRWNsaXBzZUVudmlyb25tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjU1YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0VjbGlwc2VFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlNpbXBsZVVSSUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSVNjaGVtZTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJRW52aXJvbm1lbnQgY2xhc3MgZm9yIHRoZSBFY2xpcHNlIElFbnZpcm9ubWVudC4KLSAqIFRoaXMgSUVudmlyb25tZW50IGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgInBsYXRmb3JtIiBwcm90b2NvbCBhbmQgdGhlICJmaWxlIgotICogcHJvdG9jb2wuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRWNsaXBzZUVudmlyb25tZW50IGltcGxlbWVudHMgQmFzZUVjbGlwc2VFbnZpcm9ubWVudAotewotICBwcml2YXRlIENvbW1hbmRNYW5hZ2VyICAgY29tbWFuZE1hbmFnZXJfICA9IG51bGw7Ci0gIHByaXZhdGUgU2ltcGxlVVJJRmFjdG9yeSB1cmlGYWN0b3J5XyAgICAgID0gbnVsbDsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dF8gPSBudWxsOwotICBwcml2YXRlIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXJfICAgPSBudWxsOwotICBwcml2YXRlIElMb2cgICAgICAgICAgICAgIGxvZ2dlcl8gICAgICAgICAgPSBudWxsOwotICAKLSAgcHVibGljIEVjbGlwc2VFbnZpcm9ubWVudCggQ29tbWFuZE1hbmFnZXIgIGNvbW1hbmRNYW5hZ2VyLCAKLSAJCSAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCQkJCQkJICAgICAgICAgICAgICAgICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIgKQotICB7Ci0gICAgSVVSSVNjaGVtZSBlY2xpcHNlU2NoZW1lID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VTY2hlbWUoKTsKLSAgICBJVVJJU2NoZW1lIGZpbGVTY2hlbWUgICAgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmlsZVNjaGVtZSgpOwotICAgIAotICAgIGNvbW1hbmRNYW5hZ2VyXyAgPSBjb21tYW5kTWFuYWdlcjsKLSAgICByZXNvdXJjZUNvbnRleHRfID0gcmVzb3VyY2VDb250ZXh0OwotICAgIHVyaUZhY3RvcnlfICAgICAgPSBuZXcgU2ltcGxlVVJJRmFjdG9yeSgpOwotICAgIHN0YXR1c0hhbmRsZXJfICAgPSBzdGF0dXNIYW5kbGVyOwotICAgIAotICAgIHVyaUZhY3RvcnlfLnJlZ2lzdGVyU2NoZW1lKCAicGxhdGZvcm0iLCBlY2xpcHNlU2NoZW1lICk7Ci0gICAgdXJpRmFjdG9yeV8ucmVnaXN0ZXJTY2hlbWUoICJmaWxlIiwgZmlsZVNjaGVtZSApOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSUVudmlyb25tZW50I2dldENvbW1hbmRNYW5hZ2VyKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kTWFuYWdlciBnZXRDb21tYW5kTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gY29tbWFuZE1hbmFnZXJfOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRMb2coKQotICAgKi8KLSAgcHVibGljIElMb2cgZ2V0TG9nKCkKLSAgewotCSAgaWYoIGxvZ2dlcl8gPT0gbnVsbCApCi0gICAgeyAgCi0gICAgICBsb2dnZXJfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsgCi0gICAgfTsKLQkKLSAgICByZXR1cm4gbG9nZ2VyXzsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGxvZ2dlciB0aGUgbmV3IGxvZ2dlciBmb3IgdGhpcyBlbnZpcm9ubWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZyggSUxvZyBsb2dnZXIgKQotICB7Ci0JbG9nZ2VyXyA9IGxvZ2dlcjsgIAotICB9Ci0gICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRTdGF0dXNIYW5kbGVyKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzSGFuZGxlciBnZXRTdGF0dXNIYW5kbGVyKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNIYW5kbGVyXzsKLSAgfQotCi0gIC8qKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRVUklGYWN0b3J5KCkKLSAgICovCi0gIHB1YmxpYyBJVVJJRmFjdG9yeSBnZXRVUklGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiB1cmlGYWN0b3J5XzsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIHJldHVybnMgYSBSZXNvdXJjZUNvbnRleHQgZm9yIHRoaXMgSUVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbW1hbmRNYW5hZ2VyKCBDb21tYW5kTWFuYWdlciBtYW5hZ2VyICkKLSAgewotCWNvbW1hbmRNYW5hZ2VyXyA9IG1hbmFnZXI7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Vudmlyb25tZW50TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Vudmlyb25tZW50TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTQyMTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FbnZpcm9ubWVudE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgRW52aXJvbm1lbnRNYW5hZ2VyCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGFuIElFbnZpcm9ubWVudCBmb3IgdGhlIEVjbGlwc2Ugbm9uLUdVSS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQmFzZUVjbGlwc2VFbnZpcm9ubWVudCBnZXROZXdFbnZpcm9ubWVudCgpCi0gIHsKLSAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIElFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgaGFuZGxlciAgICAgICAgPSBuZXcgQmFzZVN0YXR1c0hhbmRsZXIoKTsKLSAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgIGVudmlyb25tZW50ICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgY29udGV4dCwgaGFuZGxlciApOwotICAgIAotICAgIHJldHVybiBlbnZpcm9ubWVudDsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvSUVjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvSUVjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODA5ODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0lFY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGV4dGVuZHMgSVN0YXR1c0hhbmRsZXIKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHdvcnN0IHN0YXR1cyB0aGF0IGhhcyBiZWVuIHJlcG9ydGVkLgotICAgKi8JCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpOwotICAKLSAgLyoqCi0gICAqIFJlc2V0cyB0aGUgd29yc3Qgc3RhdHVzIHJlcG9ydGVkIHRvIGJlIE9LLgotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXRTdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcGx1Z2luL0VudlBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wbHVnaW4vRW52UGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTEwNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wbHVnaW4vRW52UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgRW52UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBFbnZQbHVnaW4gaW5zdGFuY2U7Ci0KLQkvKioKLQkgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLQkgICovCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiOwkKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEVudlBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJaW5zdGFuY2UgPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVudlBsdWdpbiBnZXRJbnN0YW5jZSgpIHsKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMWMxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGVmaW5lIHByZWZlcmVuY2UgaWRzLiBJdCBjb3JyZXNwb25kcyB0byBpbmZvcm1hdGlvbgotICogc3BlY2lmaWVkIGJ5IGEgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZXh0ZW5zaW9uIHBvaW50LgotICogRWFjaCBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBlbnRyeSB3aWxsIHJlc3VsdCBpbiBhbiBlbnRyeSBpbiB0aGUKLSAqIGFjdGlvbiBkaWFsb2dzIHByZWZlcmVuY2UgcGFnZSBpZiB0aGUgc2hvd2NoZWNrYm94IGZpZWxkIGlzIHRydWUuCi0gKiAgIAotICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICogCi0gKiA8cHJlPgotICAqICAgJmx0O2V4dGVuc2lvbgotICogICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSImZ3Q7Ci0gKiAgICAgJmx0O2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gKiAgICAgICAgICAgc2hvd2NoZWNrYm94PSJ0cnVlIgotICogICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX0dFTkVSQVRFX0pBVkFfUFJPWFlfRElBTE9HIgotICogICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICogICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETDJQUk9YWSIKLSAqICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuUFBBRDAwMDQiCi0gKiAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuZmlsZSIKLSAqICAgICAgICAgICBhbHdheXNoaWRlPSJmYWxzZSIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAmbHQ7L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlJmd0OwotICogPC9wcmU+Ci0gKgotICogVGhpcyBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBleHRlbnNpb24gcG9pbnQgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIE9iamVjdENvbnRyaWJ1dGlvbgotICogZXh0ZW5zaW9uIHBvaW50LiAgRm9yIGV4YW1wbGU6IAotICogCi0gKiAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAqICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gKiAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuZmlsZSI+Ci0gKiA8IS0tIFdTREwgVG8gSmF2YSBCZWFuIFByb3h5IC0tPgotICogICAgICAgIDxhY3Rpb24KLSAqICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICogICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gKiAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICogICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICogICAgICAgIDwvYWN0aW9uPgotICogICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICoKLSAqIFRoZSBPYmplY3RDb250cmlidXRpb24gZW50cnkgaXMgbGlua2VkIHdpdGggdGhlIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGVudHJ5Ci0gKiB2aWEgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgT2JqZWN0Q29udGlyYnV0aW9uIGFuZCB0aGUgaWQgYXR0cmlidXRlIG9mIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlLgotICogTm90ZTogdGhlIGlkIGluIHRoZSBhY3Rpb24gZW50cnkgaXMgYWx3YXlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHluYW1pYyB3aXphcmQgdGhhdAotICogc2hvdWxkIGJlIHBvcHVwZWQgdXAuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSB0aGUgT2JqZWN0aW9uQ29udHJpYnV0aW9uIGlkIGFuZCB0aGUKLSAqIGFjdGlvbiBpZHMgYXJlIHRoZSBzYW1lLCBidXQgdGhpcyBuZWVkIG5vdCBiZSB0aGUgY2FzZS4gIAotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgIGlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgIG5hbWVfOwotICBwcml2YXRlIFN0cmluZyAgaW5mb3BvcF87Ci0gIHByaXZhdGUgU3RyaW5nICB0b29sdGlwXzsKLSAgcHJpdmF0ZSBib29sZWFuIHNob3dDaGVja2JveF87Ci0gIHByaXZhdGUgYm9vbGVhbiBhbHdheXNIaWRlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgIGNhdGVnb3J5XzsKLSAgcHJpdmF0ZSBIYXNoU2V0IG9iamVjdElkc18gPSBuZXcgSGFzaFNldCgpOwotCi0gIHB1YmxpYyBIYXNoU2V0IGdldE9iamVjdElkcygpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0SWRzXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkT2JqZWN0SWQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBvYmplY3RJZHNfLmFkZCggaWQgKTsgIAotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaWQgZm9yIHRoaXMgcG9wdXAgYWN0aW9uLiAgVGhpcyBpZCBsaW5rIHRoZSBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlCi0gICAqIHdpdGggYW4gT2JqZWN0Q29udHJpYnV0aW9uLgotICAgKiBAcGFyYW0gaWQgdGhlIGlkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgaWRfID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgaWQgZm9yIHRoaXMgcG9wdXAgYWN0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBpZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkXzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuYW1lIGZvciB0aGlzIHBvcHVwIGFjdGlvbi4gIFRoaXMgbmFtZSBpcyBkaXNwbGF5ZWQgb24gdGhlCi0gICAqIGRpYWxvZyBwcmVmZXJlbmNlcyBwYWdlIGFuZCBtdXN0IGJlIHRyYW5zbGF0ZWQuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBwb3B1cCBjaGVjayBib3guCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgbmFtZV8gPSBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBOb3RlOiB0aGlzIHZhbHVlIG1heSBiZSBudWxsIGlmIHRoZSBnZXRTaG93Q2hlY2tCb3ggbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqIEByZXR1cm4gdGhlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVfOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGluZm8gcG9wIHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogQHBhcmFtIGluZm9wb3AKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluZm9wb3AoU3RyaW5nIGluZm9wb3ApCi0gIHsKLSAgICBpbmZvcG9wXyA9IGluZm9wb3A7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgaW5mbyBwb3AgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBOb3RlOiB0aGlzIHZhbHVlIG1heSBiZSBudWxsIGlmIHRoZSBnZXRTaG93Q2hlY2tCb3ggbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbmZvcG9wIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcG9wKCkKLSAgewotICAgIHJldHVybiBpbmZvcG9wXzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB0b29sdGlwIHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogQHBhcmFtIHRvb2x0aXAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRvb2x0aXAoU3RyaW5nIHRvb2x0aXApCi0gIHsKLSAgICB0b29sdGlwXyA9IHRvb2x0aXA7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgdG9vbHRpcCB2YWx1ZSBmb3IgdGhpcyBwb3B1cCBjaGVjayBib3guCi0gICAqIE5vdGU6IHRoaXMgdmFsdWUgbWF5IGJlIG51bGwgaWYgdGhlIGdldFNob3dDaGVja0JveCBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHRvb2x0aXAgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRvb2x0aXAoKQotICB7Ci0gICAgcmV0dXJuIHRvb2x0aXBfOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgc2hvdyBjaGVjayBib3ggdmFsdWUgZm9yIHRoaXMgcG9wdXAuICBJZiB0aGUgdmFsdWUgaXMgdHJ1ZSB0aGVuCi0gICAqIHRoaXMgcG9wdXAgd2lsbCBhcHBlYXIgb24gYW4gYWN0aW9uIGRpYWxvZ3MgcHJlZmVyZW5jZSBwYWdlLiAgQWxzbyBpZiB0aGlzCi0gICAqIHZhbHVlIGlzIHRydWUgYW5kIHRoZSBhbHdheXMgaGlkZSB2YWx1ZSBpcyBmYWxzZSB0aGVuIGEgY2hlY2sgYm94IHdpbGwgYmUgZGlzcGxheWVkCi0gICAqIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgcG9wdXAgd2hpY2ggYXNrcyB0aGUgdXNlciBpZiB0aGV5IHdhbnQgdGhlIHBvcHVwCi0gICAqIHRvIGJlIGRpc3BsYXllZCB0aGUgbmV4dCB0aW1lIGFyZSB0byBqdXN0IGV4ZWN1dGUgdGhlIHBvcHVwIGFjdGlvbi4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBzaG93IGNoZWNrIGJveCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dDaGVja2JveCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICBzaG93Q2hlY2tib3hfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXRzIHRoZSBzaG93IGNoZWNrIGJveCB2YWx1ZS4KLSAgICogQHJldHVybiB0aGUgc2hvdyBjaGVjayBib3ggdmFsdWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93Q2hlY2tib3goKQotICB7Ci0gICAgcmV0dXJuIHNob3dDaGVja2JveF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBhbHdheXMgaGlkZSB2YWx1ZS4gIFRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoYXQgdGhlIHBvcHVwIHNob3VsZCBhbHdheXMKLSAgICogYmUgZXhlY3V0ZWQgd2l0aG91dCBicmluZ2luZyB1cCB0aGUgcG9wdXAgd2l6YXJkLgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIGFsd2F5cyBoaWRlIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWx3YXlzSGlkZSggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICBhbHdheXNIaWRlXyA9IHZhbHVlOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYWx3YXlzIGhpZGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRBbHdheXNIaWRlKCkKLSAgewotICAgIHJldHVybiBhbHdheXNIaWRlXzsgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjYXRlZ29yeSBpZCBmb3IgcG9wdXAgYWN0aW9uLiAgQWxsIHBvcHVwIGFjdGlvbnMgd2l0aCB0aGUgc2FtZQotICAgKiBjYXRlZ29yeSBpZCB3aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gdGhlIHNhbWUgcG9wdXAgYWN0aW9uIHByZWZlcmVuY2UgcGFnZS4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBjYXRlZ29yeS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENhdGVnb3J5KCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgY2F0ZWdvcnlfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiB0aGUgY2F0ZWdvcnkgaWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENhdGVnb3J5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yeV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTkzY2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IndzZXhwbG9yZXItcHJvcGVydGllcyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYWFlM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluCi1idWlsZAotd2ViYXBwcwotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotKi53YXIKLWV4cGxvcmVyc3JjLnppcAotamF2YUNvbXBpbGVyLiouYXJncwotKi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjE5OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTY4ZjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1NhdCBEZWMgMjIgMTk6NTY6MzQgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTE2MTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLSNXZWQgSnVuIDA2IDE0OjMyOjM3IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW5zdGFuY2Uvb3JnLmVjbGlwc2UuY29yZS5uZXQvb3JnLmVjbGlwc2UuY29yZS5uZXQuaGFzTWlncmF0ZWQ9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMDBmNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI0ZyaSBKdW4gMDMgMDA6MzI6MDIgRURUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMWU5M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjA0IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxZDE1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTA3LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmZhdm9yaXRlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXA7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5oZWxwLmFwcHNlcnZlcjtidW5kbGUtdmVyc2lvbj0iWzMuMS4xMDAsMy4yLjApIiwKLSBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjUuMCwxLjYuMCkiLAotIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcudWRkaTRqO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjQsMi4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLmpldHR5O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lcXVpbm94LmpzcC5qYXNwZXIucmVnaXN0cnk7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDMuMC4wKSIsCi0gamF2YXgueG1sLnJwYztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iMi40LjAiLAotIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSIyLjQuMCIsCi0gb3JnLm9zZ2kuc2VydmljZS5odHRwO3ZlcnNpb249IjEuMi4wIiwKLSBjb20uaWJtLmljdS51dGlsOyB2ZXJzaW9uPSIzLjgiLAotIGNvbS5pYm0uaWN1LnRleHQ7IHZlcnNpb249IjMuOCIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmEyYmIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuLiA9IHNyYy8sd3NleHBsb3Jlci1wcm9wZXJ0aWVzLwotamFycy5jb21waWxlLm9yZGVyID0gLgotICAgICAgICAgICAgICAgICAgICAgCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwcm9wZXJ0aWVzLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgd3NleHBsb3Jlci8KLQotCi1jdXN0b21CdWlsZENhbGxiYWNrcz1idWlsZEpTUHMueG1sCi0KLQotc3JjLmluY2x1ZGVzID0gc2NoZW1hLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkSlNQcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNGJhMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBBbnQgYnVpbGQgc2NyaXB0IGZvciBKU1BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTxwcm9qZWN0IG5hbWU9IkpTUCBCdWlsZCI+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFdvcmtzcGFjZSAoZGV2KSBidWlsZDsgY2FsbGVkIGFzIGFuIEFudCBidWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KLQotCQk8IS0tIENvbnN0cnVjdCB0aGUgZnVsbCBjbGFzc3BhdGggLS0+Ci0JCTxwYXRoIGlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIiA+Ci0JCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHt0YXJnZXQuZm9sZGVyfSIvPgotCQkJPGRpcnNldCBkaXI9IiR7d29ya3NwYWNlX2xvY30iPgotCQkJCTxwYXR0ZXJuc2V0PgotCQkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYmluIi8+Ci0JCQkJCQotCQkJCTwvcGF0dGVybnNldD4KLQkJCTwvZGlyc2V0PgotCQkJPGZpbGVzZXQgZGlyPSIke3RhcmdldF9ob21lfS9wbHVnaW5zIj4KLQkJCQk8cGF0dGVybnNldD4KLQkJCQkJPGluY2x1ZGUgbmFtZT0iamF2YXguc2VydmxldCouamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9ImphdmF4LnNlcnZsZXQuanNwKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5hbnQqL2xpYi9hbnQuamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5hcGFjaGUuY29tbW9ucy5lbCouamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5qYXNwZXIqLmphciIvPgotCQkJCQkKLQkJCQk8L3BhdHRlcm5zZXQ+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvcGF0aD4KLQotCQk8IS0tIENvbXBpbGUgdGhlIEpTUHMgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZSI+Ci0JCQk8cmVmZXJlbmNlIHJlZmlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIi8+Ci0JCTwvYW50Y2FsbD4KLQkJCi0JPC90YXJnZXQ+Ci0KLQk8cHJvcGVydHkgbmFtZT0id3NleHBsb3JlckRpciIgdmFsdWU9IiR7YmFzZWRpcn0vd3NleHBsb3JlciIvPgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gQ29tcGlsZSB0aGUgSlNQcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSI+Ci0JCQotCQk8IS0tIEludm9rZSBKYXNwZXIgY29tcGlsZXIgLS0+Ci0JCTxqYXZhCi0JCQljbGFzc25hbWU9Im9yZy5hcGFjaGUuamFzcGVyLkpzcEMiCi0JCQljbGFzc3BhdGhyZWY9ImV4cGxvcmVyLmphci5jbGFzc3BhdGgiCi0JCQlmb3JrPSJ0cnVlIgotCQkJZmFpbG9uZXJyb3I9InRydWUiPgotCQkJPGFyZyB2YWx1ZT0iLWNvbXBpbGUiLz4KLQkJCTxhcmcgdmFsdWU9Ii1kIi8+Ci0JCQk8YXJnIHZhbHVlPSIke3dzZXhwbG9yZXJEaXJ9IiAvPgotCQkJPGFyZyB2YWx1ZT0iLXAiLz4KLQkJCTxhcmcgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5qc3AiLz4KLQkJCTxhcmcgdmFsdWU9Ii13ZWJhcHAiLz4KLQkJCTxhcmcgdmFsdWU9IiR7d3NleHBsb3JlckRpcn0iLz4KLQkJCTxhcmcgdmFsdWU9Ii1kaWUiLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7dGFyZ2V0LmZvbGRlcn0iLz4KLQkJCQk8ZGlyc2V0IGRpcj0iJHtiYXNlZGlyfSI+Ci0JCQkJCQk8aW5jbHVkZSBuYW1lPSIqL0Bkb3QiIC8+Ci0JCQkJPC9kaXJzZXQ+Ci0JCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9Ij4KLQkJCQkJCTxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPiAKLQkJCQk8L2ZpbGVzZXQ+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCQkKLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGJ1aWxkLmphcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciB0byBjb250YWluIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5idWlsZC5qYXJzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBidWlsZC5qYXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5idWlsZC5qYXJzIj4KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGJ1aWxkLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciB0byBjb250YWluIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5idWlsZC5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBidWlsZC5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5idWlsZC5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+ICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gdGFyZ2V0LCBlZyBAZG90ICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBzb3VyY2UuZm9sZGVybiA6IG4gPSAxIC4uLiBOLCB0aGUgc291cmNlIGZvbGRlcnMgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyICA6IHdoZXJlIHRoZSByZXN1bHRzIG9mIHRoZSBjb21waWxhdGlvbiBnbyAgICAgICAgICAgIC0tPgotCTwhLS0gICA8bmFtZT4uY2xhc3NwYXRoIDogbmFtZSA9IG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldC4gQSAgICAgICAgIC0tPgotCTwhLS0gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBjbGFzc3BhdGggc3RydWN0dXJlLiAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmV4cGxvcmVyLmphciI+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGR1cmluZyB0aGUgY29tcGlsYXRpb24gdGFyZ2V0IDxuYW1lPiwgYWZ0ZXIgdGhlIGNvbXBpbGUgICAtLT4KLQk8IS0tIGJ1dCBiZWZvcmUgamFyaW5nLiAgU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24tLT4KLQk8IS0tIHRhcmdldCwgZWcgQGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgc291cmNlLmZvbGRlcm4gOiBuID0gMSAuLi4gTiwgdGhlIHNvdXJjZSBmb2xkZXJzICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgdGFyZ2V0LmZvbGRlciAgOiB3aGVyZSB0aGUgcmVzdWx0cyBvZiB0aGUgY29tcGlsYXRpb24gZ28gICAgICAgICAgICAtLT4KLQk8IS0tICAgPG5hbWU+LmNsYXNzcGF0aCA6IG5hbWUgPSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQuIEEgICAgICAgICAtLT4KLQk8IS0tICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgY2xhc3NwYXRoIHN0cnVjdHVyZS4gICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY29tcGlsZS5leHBsb3Jlci5qYXIiPgotCQkKLQkJPCEtLSBDb21waWxlIHRoZSBKU1BzIC0tPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUiPgotCQkJPHJlZmVyZW5jZSByZWZpZD0iZXhwbG9yZXIuamFyLmNsYXNzcGF0aCIvPgotCQk8L2FudGNhbGw+Ci0JCQotCQk8IS0tIEpzcEMgYWx3YXlzIGdlbmVyYXRlcyAuamF2YSBmaWxlczsgZGVsZXRlIHRoZW0gLS0+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7dGFyZ2V0LmZvbGRlcn0iIGluY2x1ZGVzPSIqKi8qLmphdmEiLz4KLQkJPC9kZWxldGU+Ci0KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+ICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIFN1YnN0aXR1dGUgIm5hbWUiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldCwgZWcgQGRvdCAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgamFyLmxvY2F0aW9uIC0gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxhdGlvbiByZXN1bHRzICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgPG5hbWU+LmNsYXNzcGF0aCA6IG5hbWUgPSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQuIEEgICAgICAgICAtLT4KLQk8IS0tICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgY2xhc3NwYXRoIHN0cnVjdHVyZS4gICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuZXhwbG9yZXIuamFyIj4KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGJ1aWxkLnJlc3VsdC5mb2xkZXIgLSBmb2xkZXIgY29udGFpbmluZyB0aGUgYnVpbGQgcmVzdWx0cyAgICAgICAgICAgLS0+Ci0JPCEtLSAgIHRhcmdldC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuZ2F0aGVyLmJpbi5wYXJ0cyI+Ci0JPC90YXJnZXQ+Ci0JCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIuYmluLnBhcnRzICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIuYmluLnBhcnRzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgZ2F0aGVyLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmdhdGhlci5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIuc291cmNlcyI+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5sb2dzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgZGVzdGluYXRpb24udGVtcC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5nYXRoZXIubG9ncyI+ICAgICAgICAKLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIubG9ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIubG9ncyI+ICAgICAgIAotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgdGhlIHRhcmdldCBjbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuY2xlYW4iPiAgICAgICAgICAgICAgCi0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSB0YXJnZXQgY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgcGx1Z2luLmRlc3RpbmF0aW9uIC0gZmluYWwgZGVzdGluYXRpb24gb2YgdGhlIGJ1aWxkICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIHJlc3VsdHMgb2YgdGhlIGNvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgdGVtcC5mb2xkZXIgLSB0ZW1wb3JhcnkgZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY2xlYW4iPiAgICAgICAgICAgICAKLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0icHJlLndzZXhwbG9yZXItcHJvcGVydGllcy5qYXIiPiAgICAgICAgICAgICAgCi0JCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0icG9zdC53c2V4cGxvcmVyLXByb3BlcnRpZXMuamFyIj4gICAgICAgICAgICAgIAotCQkJPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmNvbXBpbGUud3NleHBsb3Jlci1wcm9wZXJ0aWVzLmphciI+ICAgICAgICAgICAgICAKLQkJCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9ldG9vbDE2L2xhdW5jaF93c19leHBsb3Jlci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9ldG9vbDE2L2xhdW5jaF93c19leHBsb3Jlci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYTBiYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvaWNvbnMvZXRvb2wxNi9sYXVuY2hfd3NfZXhwbG9yZXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5ODZkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotIyAyMDA3MDgyMCAgIDE5MTU4NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVhQX1dTRV9UUkFOU1BPUlRfUFJPVklERVI9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRyYW5zcG9ydCBQcm92aWRlcgotU09BUF9UUkFOU1BPUlRfUFJPVklERVI9RGVmYXVsdCBTT0FQIFRyYW5zcG9ydCBQcm92aWRlcgotCi0jCi0jIE1lc3NhZ2VzIGZvciB0aGUgY2xpZW50IHR5cGUgZXh0ZW5zaW9uCi0jCi1XRUJTRVJWSUNFQ0xJRU5UVFlQRV9OQU1FX1dTRVhQTE9SRVI9U3R1Ymxlc3MgKFdlYiBTZXJ2aWNlcyBFeHBsb3JlcikKLVRBU0tfTEFCRUxfRVhQTE9SRV9XU0RMX1VTSU5HX1dTRT1FeHBsb3JlciBXU0RMIHVzaW5nIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLQotIwotIyBNZXNzYWdlcyBmb3IgdGhlIFdTRXhwbG9yZXIgdHlwZSBleHRlbnNpb24KLSMKLU1TR19FUlJPUl9MQVVOQ0hfV1NFWFBMT1JFUj1JV0FCMDM2NkUgVW5hYmxlIHRvIGxhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIuCi1NU0dfRVJST1JfTE9BRF9MQVVOQ0hfT1BUSU9OUz1JV0FCMDM2N0UgVW5hYmxlIHRvIGxvYWQgbGF1bmNoIG9wdGlvbnMuCi1NU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTg9QnJva2VuIFZNIGRvZXMgbm90IHN1cHBvcnQgVVRGLTguCi0KLSMKLSMgTWVzc2FnZXMgZm9yIHBvcHVwIGFjdGlvbiAoVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcikKLSMKLVBPUFVQX1RFU1RfV1NETD1UZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgU09BUCB0cmFuc3BvcnQgbWVzc2FnZXMKLSMKLU1TR19FUlJPUl9VTlNVUFBPUlRFRF9CSU5ESU5HPXswfSBiaW5kaW5nIGlzIHVuc3VwcG9ydGVkLgotTVNHX0VSUk9SX1VOU1VQUE9SVEVEX1RSQU5TUE9SVD17MH0gdHJhbnNwb3J0IGlzIHVuc3VwcG9ydGVkLgotCi0jCi0jIFdlYlNlcnZpY2VQdWJsaXNoUGFnZQotIwotVE9PTFRJUF9MQVVOQ0hfV1NfRVhQTE9SRVI9TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLU1FTlVfUlVOPSZSdW4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkM2NlMDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NlVHJhbnNwb3J0UHJvdmlkZXIiIG5hbWU9IiVYUF9XU0VfVFJBTlNQT1JUX1BST1ZJREVSIiBzY2hlbWE9InNjaGVtYS93c2VUcmFuc3BvcnRQcm92aWRlci5leHNkIi8+Ci0KLSAgICAKLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIEV4dGVuc2lvbiBwb2ludDogRWNsaXBzZSBQb3B1cCBBY3Rpb24gKG9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMpIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkuYWN0aW9uLldTRExGaWxlTWVudS5maWxlLndzZGwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2lsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS5hY3Rpb24uV1NETEZpbGVNZW51LmZpbGUud3NpbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NJTCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0lMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkuYWN0aW9uLldTRExGaWxlTWVudS53c2RscmVzIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfVEVTVF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS5hY3Rpb24uV1NETEZpbGVNZW51LnNlcnZpY2UiCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIud3NlVHJhbnNwb3J0UHJvdmlkZXIiPgotICAgICAgPHNvYXBUcmFuc3BvcnRQcm92aWRlcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydC5TT0FQVHJhbnNwb3J0UHJvdmlkZXIiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLnNvYXBUcmFuc3BvcnRQcm92aWRlciIKLSAgICAgICAgICAgIG5hbWU9IiVTT0FQX1RSQU5TUE9SVF9QUk9WSURFUiIKLSAgICAgICAgICAgIG5hbWVzcGFjZVVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLSAgICAgICAgICAgIHRyYW5zcG9ydFVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkuaHR0cGNvbnRleHRzIj4KLSAgICAgIDxodHRwY29udGV4dAotICAgICAgICAgICAgaWQ9IndzZSI+Ci0gICAgICAgICA8cmVzb3VyY2UtbWFwcGluZwotICAgICAgICAgICAgICAgcGF0aD0iL3dzZXhwbG9yZXIiPgotICAgICAgICAgPC9yZXNvdXJjZS1tYXBwaW5nPgotICAgICAgPC9odHRwY29udGV4dD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeS5yZXNvdXJjZXMiPgotICAgICAgPHJlc291cmNlCi0gICAgICAgICAgICBhbGlhcz0iLyIKLSAgICAgICAgICAgIGJhc2UtbmFtZT0iLyIKLSAgICAgICAgICAgIGh0dHBjb250ZXh0SWQ9IndzZSI+Ci0gICAgICA8L3Jlc291cmNlPgotICAgICAgPHNlcnZpY2VTZWxlY3RvcgotICAgICAgICAgICAgZmlsdGVyPSIob3RoZXIuaW5mbz1vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIpIj4KLSAgICAgIDwvc2VydmljZVNlbGVjdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5LnNlcnZsZXRzIj4KLSAgICAgIDxzZXJ2bGV0Ci0gICAgICAgICAgICBhbGlhcz0iLyouanNwIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmVxdWlub3guanNwLmphc3Blci5yZWdpc3RyeS5KU1BGYWN0b3J5Oi8iCi0gICAgICAgICAgICBodHRwY29udGV4dElkPSJ3c2UiPgotICAgICAgPC9zZXJ2bGV0PgotICAgICAgPHNlcnZpY2VTZWxlY3RvcgotICAgICAgICAgICAgZmlsdGVyPSIob3RoZXIuaW5mbz1vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIpIj4KLSAgICAgIDwvc2VydmljZVNlbGVjdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgotICAgICAgPHBlcnNwZWN0aXZlRXh0ZW5zaW9uCi0gICAgICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlIj4KLSAgICAgICAgIDxhY3Rpb25TZXQKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIiPgotICAgICAgICAgPC9hY3Rpb25TZXQ+Ci0gICAgICA8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotICAgICAgCi0gICAgICA8cGVyc3BlY3RpdmVFeHRlbnNpb24KLSAgICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Qud2ViLnVpLndlYkRldlBlcnNwZWN0aXZlIj4KLSAgICAgICAgIDxhY3Rpb25TZXQKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIiPgotICAgICAgICAgPC9hY3Rpb25TZXQ+Ci0gICAgICA8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIAotICAgIDwhLS0gTWFpbiBNZW51IEFjdGlvbnMgLS0+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldHMiPgotCi0gICAgICA8YWN0aW9uU2V0Ci0gICAgICAgICAgICBsYWJlbD0iJUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSIgotICAgICAgICAgICAgdmlzaWJsZT0iZmFsc2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyIj4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJU1FTlVfUlVOIgotICAgICAgICAgICAgICAgcGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVpLnJ1biI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yIG5hbWU9ImV4cGxvcmVyIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVDT01NQU5EX0xBVU5DSF9XU19FWFBMT1JFUiIKLSAgICAgICAgICAgICAgIGljb249Imljb25zL2V0b29sMTYvbGF1bmNoX3dzX2V4cGxvcmVyLmdpZiIKLSAgICAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX0xBVU5DSF9XU19FWFBMT1JFUiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuYWN0aW9uLkxhdW5jaFdTRUFjdGlvbiIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS51aS5ydW4vZXhwbG9yZXIiCi0gICAgICAgICAgICAgICB0b29sYmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5hY3Rpb24uTGF1bmNoV1NFQWN0aW9uIj4KLSAgICAgICAgPC9hY3Rpb24+Ci0gICAgIDwvYWN0aW9uU2V0PgotCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wcm9wZXJ0aWVzL2Zhdm9yaXRlc19kZWZhdWx0LndzaWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wcm9wZXJ0aWVzL2Zhdm9yaXRlc19kZWZhdWx0LndzaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZThiMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxpbnNwZWN0aW9uIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vIgotICB4bWxuczp3c2lsd3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3dzZGwvIgotICB4bWxuczp3c2lsdWRkaT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3VkZGkvIgotICB4bWxuczp1ZGRpPSJ1cm46dWRkaS1vcmc6YXBpIj4KLSAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+djVfMF8xXzA8L2Fic3RyYWN0PgotCi0gICAKLQotIAotCi0gIDxsaW5rIHJlZmVyZW5jZWROYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iIGxvY2F0aW9uPSJodHRwOi8vd3d3LnhtZXRob2RzLmNvbS9pbnNwZWN0aW9uLndzaWwiLz4KLTwvaW5zcGVjdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NjaGVtYS93c2VUcmFuc3BvcnRQcm92aWRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmVlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiIGlkPSJ3c2VUcmFuc3BvcnRQcm92aWRlciIgbmFtZT0iV2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRyYW5zcG9ydCBQcm92aWRlciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgZGVzY3JpcHRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzb2FwVHJhbnNwb3J0UHJvdmlkZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGlzIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgbmFtZSB0aGlzIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InNvYXBUcmFuc3BvcnRQcm92aWRlciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZW50cnkgYWxsb3dzIGFuIGV4dGVuZGVyIHRvIHBsdWcgaW4gYSBuZXcgZmFjdG9yeSBmb3IgY3JlYXRpbmcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCBpbnN0YW5jZXMuICBUaGUgSVNPQVBUcmFucG9ydCBpcyB1c2VkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZm9yIGludm9raW5nIHdlYiBzZXJ2aWNlcyBvcGVyYXRpb25zIHRoYXQgdXNlcyB0aGUgU09BUCBtZXNzYWdlIHByb3RvY29sLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXIgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpZCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgc29hcFRyYW5zcG9ydFByb3ZpZGVyIGVsZW1lbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGlzIHNvYXBUcmFuc3BvcnRQcm92aWRlciBlbGVtZW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlVVJJIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBzb2FwOmJpbmRpbmcgZWxlbWVudCB0aGF0IHRoaXMgdHJhbnNwb3J0IHByb3ZpZGVyIGNsYWltcyBzdXBwb3J0IGZvci4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBzdXBwb3J0cyB0aGUgU09BUCAxLjEgYmluZGluZywgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdvdWxkIGJlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8uICBJZiB1bnNwZWNpZmllZCwgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yIGFsbCBTT0FQIGJpbmRpbmdzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zcG9ydFVSSSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgdHJhbnNwb3J0IHByb3RvY29sIFVSSSBvZiB0aGUgc29hcDpiaW5kaW5nIGVsZW1lbnQgdGhhdCB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBjbGFpbXMgc3VwcG9ydCBmb3IuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgc3VwcG9ydHMgU09BUCBvdmVyIEhUVFAsIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSB3b3VsZCBiZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAuICBJZiB1bnNwZWNpZmllZCwgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yIGFsbCB0cmFuc3BvcnQgcHJvdG9jb2xzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NlcnZsZXRhcGkvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0LmFwaV8xLjAuMC52MjAwNjAyMDYuamFyIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYWQ1NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0pldHR5UnVubmFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzc0MmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuaGVscC5pbnRlcm5hbC5hcHBzZXJ2ZXIuQXBwc2VydmVyUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBKZXR0eVJ1bm5hYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIEpldHR5UnVubmFibGUgamV0dHlSdW5uYWJsZV87Ci0KLQlwcml2YXRlIEpldHR5UnVubmFibGUoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBKZXR0eVJ1bm5hYmxlIGdldEpldHR5UnVubmFibGUoKSB7Ci0JCWlmIChqZXR0eVJ1bm5hYmxlXyA9PSBudWxsKSB7Ci0JCQlqZXR0eVJ1bm5hYmxlXyA9IG5ldyBKZXR0eVJ1bm5hYmxlKCk7Ci0JCQlqZXR0eVJ1bm5hYmxlXy5pbml0KCk7Ci0JCX0KLQkJcmV0dXJuIGpldHR5UnVubmFibGVfOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzSmV0dHlTdGFydGVkKCkgewotCQl0cnkgewotCQkJcmV0dXJuIEFwcHNlcnZlclBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QXBwU2VydmVyKCkuaXNSdW5uaW5nKCk7Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgaW50IGdldEpldHR5UG9ydCgpIHsKLQkJcmV0dXJuIFdlYmFwcE1hbmFnZXIuZ2V0UG9ydCgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SmV0dHlIb3N0KCkgewotCQlyZXR1cm4gV2ViYXBwTWFuYWdlci5nZXRIb3N0KCk7Ci0JfQotCi0JCi0JcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JCXRyeSB7Ci0JCQlXZWJhcHBNYW5hZ2VyLnN0YXJ0KCJ3c2UiKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaE9wdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY2ZWRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIHNpbXBsZSBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgYSBzaW5nbGUgV2ViIFNlcnZpY2VzCi0gKiBFeHBsb3JlciBsYXVuY2ggb3B0aW9uIHByb3BlcnR5IGFuZCBpdHMgdmFsdWUuIEFsbG93ZWQKLSAqIGxhdW5jaCBvcHRpb24gcHJvcGVydGllcyBhcmUgZGVmaW5lZCBieQotICogPGNvZGU+e0BsaW5rIExhdW5jaE9wdGlvbnN9PC9jb2RlPi4KLSAqLwotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbiB7Ci0JcHJpdmF0ZSBTdHJpbmcga2V5XzsKLQotCXByaXZhdGUgU3RyaW5nIG9wdGlvbl87Ci0KLQkvKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgbGF1bmNoIG9wdGlvbiB3aXRoIHRoZSBnaXZlbgotCSAqIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlLiAKLQkgKi8KLQlwdWJsaWMgTGF1bmNoT3B0aW9uKFN0cmluZyBrZXksIFN0cmluZyBvcHRpb24pIHsKLQkJa2V5XyA9IGtleTsKLQkJb3B0aW9uXyA9IG9wdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoaXMgbGF1bmNoIG9wdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSBuYW1lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewotCQlyZXR1cm4ga2V5XzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGlzIGxhdW5jaCBvcHRpb24uCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgdmFsdWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRPcHRpb24oKSB7Ci0JCXJldHVybiBvcHRpb25fOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNWI5NjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODA1MDYgICAyMDI5NDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQWxsb3cgV1NFIHRvIGJlIGxhdW5jaGVkIGZyb20gYSBXU0lMIGZpbGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKiAKLSAqIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgcHJvcGVydHkgbmFtZXMgdW5kZXJzdG9vZCBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0gKiBhbmQgdXNlZCB0byBjb25maWd1cmUgaXQncyBpbml0aWFsIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW91ciBhdCB0aGUgdGltZSBpdCBpcwotICogbGF1bmNoZWQuCi0gKiBAc2VlIExhdW5jaE9wdGlvbgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoT3B0aW9ucyB7Ci0JLy8gR2VuZXJhbCBwdXJwb3NlIHByZWxvYWQgY29uc3RhbnRzCi0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVEVfTE9DQVRJT04gPSAic3RhdGVMb2NhdGlvbiI7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04gPSAiZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uIjsKLQkKLQkvLyBXU0RMIFBhZ2UgcHJlbG9hZCBjb25zdGFudHMKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVVJMID0gIndzZGwiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTSUxfVVJMID0gIndzaWx1cmwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX1NFUlZJQ0VfRU5EUE9JTlQgPSAid2ViU2VydmljZUVuZHBvaW50IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfUU5BTUVfU1RSSU5HID0gInNlcnZpY2VRTmFtZVN0cmluZyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX05BTUVfU1RSSU5HID0gImJpbmRpbmdOYW1lU3RyaW5nIjsKLQotCS8vIFVEREkgUGFnZSBwcmVsb2FkIGNvbnN0YW50cwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5RVUlSWV9VUkwgPSAiaW5xdWlyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIX1VSTCA9ICJwdWJsaXNoIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfTkFNRSA9ICJzZXJ2aWNlTmFtZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0tFWSA9ICJzZXJ2aWNlS2V5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JJRVNfRElSRUNUT1JZID0gImNhdGVnb3JpZXNEaXJlY3RvcnkiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hXaXphcmRSdW5uYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hXaXphcmRSdW5uYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhiNjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkUnVubmFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkOwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoV2l6YXJkUnVubmFibGUgZXh0ZW5kcyBUaHJlYWQgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0KLQlwcml2YXRlIFN0cmluZyB3c2RsVVJMOwotCi0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaDsKLQotCXB1YmxpYyBMYXVuY2hXaXphcmRSdW5uYWJsZShTdHJpbmcgaWQsIFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy53c2RsVVJMID0gKHdzZGxVUkwgIT0gbnVsbCkgPyB3c2RsVVJMIDogIiI7Ci0JCWZpbmlzaCA9IGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoKCkgewotCQlyZXR1cm4gZmluaXNoOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJdHJ5IHsKLQkJCUR5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLQkJCXdpemFyZC5zZXRJbml0aWFsRGF0YShpZCk7Ci0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih3c2RsVVJMKTsKLQkJCXdpemFyZC5pbml0KG51bGwsIHNlbCk7Ci0JCQlXaXphcmREaWFsb2cgd2QgPSBuZXcgV2l6YXJkRGlhbG9nKG5ldyBTaGVsbChEaXNwbGF5LmdldERlZmF1bHQoKSwKLQkJCQkJU1dULkFQUExJQ0FUSU9OX01PREFMKSwgd2l6YXJkKTsKLQkJCXdkLm9wZW4oKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfSBmaW5hbGx5IHsKLQkJCWZpbmlzaCA9IHRydWU7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFRhc2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDIxNTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotcHVibGljIGNsYXNzIExhdW5jaFdpemFyZFRhc2sgewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIExhdW5jaFdpemFyZFRhc2sgdGFza187Ci0KLQkvLyB0aGUgc2hlbGwgZm9yIHRoZSB3aXphcmQgdG8gYmUgbGF1bmNoZWQKLQlwcml2YXRlIFNoZWxsIHNoZWxsXzsKLQotCS8vIHRoZSBMYXVuY2hXaXphcmRSdW5uYWJsZSB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nCi0JcHJpdmF0ZSBMYXVuY2hXaXphcmRSdW5uYWJsZSBydW5uYWJsZV87Ci0KLQlwcml2YXRlIExhdW5jaFdpemFyZFRhc2soU2hlbGwgc2hlbGwpIHsKLQkJc2hlbGxfID0gc2hlbGw7Ci0JCXJ1bm5hYmxlXyA9IG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMYXVuY2hXaXphcmRUYXNrIGdldEluc3RhbmNlKCkgewotCQlpZiAodGFza18gPT0gbnVsbCkKLQkJCXRhc2tfID0gbmV3IExhdW5jaFdpemFyZFRhc2soUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKQotCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0JCXJldHVybiB0YXNrXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhc3luY0V4ZWMoUnVubmFibGUgcnVubmFibGUpIHRocm93cyBTV1RFeGNlcHRpb24gewotCQlzaGVsbF8uZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2hlY2tBbmRBc3luY0V4ZWMoTGF1bmNoV2l6YXJkUnVubmFibGUgcnVubmFibGUpIHsKLQkJdHJ5IHsKLQkJCWlmICghZ2V0SXNFeGVjdXRpbmcoKSkgewotCQkJCWFzeW5jRXhlYyhydW5uYWJsZSk7Ci0JCQkJcnVubmFibGVfID0gcnVubmFibGU7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRJc0V4ZWN1dGluZygpIHsKLQkJaWYgKHJ1bm5hYmxlXyAhPSBudWxsKSB7Ci0JCQlib29sZWFuIGlzRmluaXNoID0gcnVubmFibGVfLmlzRmluaXNoKCk7Ci0JCQlpZiAoaXNGaW5pc2gpCi0JCQkJcnVubmFibGVfID0gbnVsbDsKLQkJCXJldHVybiAhaXNGaW5pc2g7Ci0JCX0gZWxzZQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZjVmNjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzIxICAgMTUxNDA5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3Qgb3BlbiBpbiBleHRlcm5hbCBicm93c2VyIG9uIFJICi0gKiAyMDA2MDgwMiAgIDE1MDQyOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYxMjE5ICAgMTY4NjIwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3Qgb3BlbiBpbiBleHRlcm5hbCBicm93c2VyIG9uIExpbnV4Ci0gKiAyMDA3MDIyMCAgIDE2ODYyMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBMaW51eCAoY29udC4pCi0gKiAyMDA4MDQzMCAgIDIyOTY5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IHJlYWN0IHRvIGludGVybmFsL2V4dGVybmFsIFdlYiBicm93c2VyIHByZWZlcmVuY2UgY2hhbmdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklQcmVmZXJlbmNlc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYnJvd3Nlci5JV2ViQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXb3JrYmVuY2hCcm93c2VyU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgV1NFeHBsb3JlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgV1NFeHBsb3JlciBpbnN0YW5jZTsKLQotCXByaXZhdGUgc3RhdGljIGludCBsYXVuY2hPcHRpb25zS2V5XyA9IDA7Ci0KLQlwcml2YXRlIElXZWJCcm93c2VyIGludGVybmFsQnJvd3Nlcl8gPSBudWxsOwotCQotCXB1YmxpYyBXU0V4cGxvcmVyKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgV1NFeHBsb3JlciBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRXhwbG9yZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb250ZXh0TmFtZSgpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBhcmVudFBsdWdpbklEKCkgewotCQlyZXR1cm4gRXhwbG9yZXJQbHVnaW4uSUQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXZWJBcHBMb2NhdGlvbigpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdlbGNvbWVVUkwoKSB7Ci0JCXJldHVybiAid3NleHBsb3Jlci5qc3AiOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoT3B0aW9uUmVnaXN0cnlVUkwoKSB7Ci0JCXJldHVybiAibGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEJhc2VVUkwoKSB7Ci0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJICAKLQkJCi0JCXNiLmFwcGVuZCgiaHR0cDovLyIpOyAKLQkJc2IuYXBwZW5kKEpldHR5UnVubmFibGUuZ2V0SmV0dHlSdW5uYWJsZSgpLmdldEpldHR5SG9zdCgpKTsgCi0JCXNiLmFwcGVuZCgiOiIpOwotCQlzYi5hcHBlbmQoSmV0dHlSdW5uYWJsZS5nZXRKZXR0eVJ1bm5hYmxlKCkuZ2V0SmV0dHlQb3J0KCkpOwotCQlzYi5hcHBlbmQoIi8iKTsKLQkJc2IuYXBwZW5kKCJ3c2UiKTsKLQkJc2IuYXBwZW5kKCIvIik7Ci0JCXNiLmFwcGVuZChnZXRDb250ZXh0TmFtZSgpKTsKLQkJc2IuYXBwZW5kKCIvIik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWV0YWRhdGFEaXJlY3RvcnkoKSB7Ci0JCS8vIDx3b3Jrc3BhY2U+Ly5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvIChub3RlCi0JCS8vIHRoZSB0cmFpbGluZyBzZXBhcmF0b3IpLgotCQlyZXR1cm4gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbGF1bmNoKElXb3JrYmVuY2ggd2IsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCwKLQkJTGF1bmNoT3B0aW9uW10gb3B0aW9ucywgYm9vbGVhbiBmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJLy8gbGF1bmNoT3B0aW9uS2V5Ci0JCWludCBsYXVuY2hPcHRpb25LZXkgPSBnZXRMYXVuY2hPcHRpb25zS2V5KCk7Ci0JCS8vIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBVUkwKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzYi5hcHBlbmQoZ2V0QmFzZVVSTCgpKTsKLQkJc2IuYXBwZW5kKGdldFdlbGNvbWVVUkwoKSk7Ci0JCXNiLmFwcGVuZCgiPyIpOwotCQlpZiAob3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgewotCQkJU3RyaW5nIGVuY29kZWRJRCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWVuY29kZWRJRCA9IFVSTEVuY29kZXIuZW5jb2RlKEV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQlFeHBsb3JlclBsdWdpbi5JRCwKLQkJCQkJCTAsCi0JCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIpLAotCQkJCQkJZSk7Ci0JCQl9Ci0JCQlzYi5hcHBlbmQoZW5jb2RlZElEKTsKLQkJCXNiLmFwcGVuZCgiPSIpOwotCQkJc2IuYXBwZW5kKGxhdW5jaE9wdGlvbktleSk7Ci0JCX0KLQkJLy8gbGF1bmNoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCQl0cnkgewotCQkJSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0ID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRCcm93c2VyU3VwcG9ydCgpOwotCQkJSVdlYkJyb3dzZXIgYnJvd3NlciA9IG51bGw7Ci0JCQkKLQkJCUlQcmVmZXJlbmNlc1NlcnZpY2UgcHMgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKTsKLQkJCWludCBicm93c2VyQ2hvaWNlID0gcHMuZ2V0SW50KCJvcmcuZWNsaXBzZS51aS5icm93c2VyIiwgImJyb3dzZXItY2hvaWNlIiwgMCwgbnVsbCk7Ci0JCQkKLQkJCS8vIGZvcmNlIGV4dGVybmFsIG9yIGJyb3dzZXIgY2hvaWNlIGlzIGV4dGVybmFsCi0JCQlpZiAoZm9yY2VMYXVuY2hPdXRzaWRlSURFIHx8IGJyb3dzZXJDaG9pY2UgPT0gMSkgewotCQkJCQotCQkJCS8vIGV4dGVybmFsIGJyb3dzZXIgc3VwcG9ydCB1c2VzIHN3dCBQcm9ncmFtLmZpbmRQcm9ncmFtKCkgdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlIGJyb3dzZXIgZm9yIEhUTUwgZmlsZXMKLQkJCQkvLyBjZXJ0YWluIHZlcnNpb25zIG9mIHN3dCBQcm9ncmFtIGNsYXNzIG5lZWQgdG8gYmUgcnVuIGZyb20gdGhlIFVJIHRocmVhZCwgb3RoZXJ3aXNlIGZpbmRQcm9ncmFtKCkgZG9lcyBub3QKLQkJCQkvLyB3b3JrIHByb3Blcmx5ICh0aGlzIGFwcGxpZXMgdG8gTGludXggb25seSkuICBUaGUgY29kZSBiZWxvdyBpcyB0byB3b3JrYXJvdW5kIHRoaXMgcHJvYmxlbS4KLQkJCQkKLQkJCQkvLyBEaXNwbGF5LmdldEN1cnJlbnQoKSB3aWxsIGJlIG51bGwgaWYgdGhpcyBpcyBub3QgdGhlIFVJIHRocmVhZAotCQkJCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSA9PSBudWxsKSB7Ci0JCQkJCQotCQkJCQkvLyBjcmVhdGUgYSBydW5uYWJsZSB0byBvcGVuIHRoZSBicm93c2VyLCBydW4gaXQgaW4gdGhlIFVJIHRocmVhZAotCQkJCQlPcGVuQnJvd3NlclJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IE9wZW5Ccm93c2VyUnVubmFibGUoYnJvd3NlclN1cHBvcnQsIG5ldyBVUkwoc2IudG9TdHJpbmcoKSkpOwotCQkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyhydW5uYWJsZSk7Ci0JCQkJCQotCQkJCQlpZiAocnVubmFibGUuZ2V0RXhjZXB0aW9uKCkgIT0gbnVsbCkKLQkJCQkJCXRocm93IHJ1bm5hYmxlLmdldEV4Y2VwdGlvbigpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJYnJvd3NlciA9IGJyb3dzZXJTdXBwb3J0LmdldEV4dGVybmFsQnJvd3NlcigpOwotCQkJCQlicm93c2VyLm9wZW5VUkwobmV3IFVSTChzYi50b1N0cmluZygpKSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gYnJvd3NlcklkCi0JCQkJU3RyaW5nQnVmZmVyIGJyb3dzZXJJZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQlicm93c2VySWQuYXBwZW5kKEV4cGxvcmVyUGx1Z2luLklEKTsKLQkJCQlicm93c2VySWQuYXBwZW5kKGdldENvbnRleHROYW1lKCkpOwotCQkJCQotCQkJCWlmIChpbnRlcm5hbEJyb3dzZXJfPT1udWxsKQotCQkJCQlpbnRlcm5hbEJyb3dzZXJfID0gYnJvd3NlclN1cHBvcnQuY3JlYXRlQnJvd3Nlcihicm93c2VySWQudG9TdHJpbmcoKSk7Ci0JCQkJYnJvd3NlciA9IGludGVybmFsQnJvd3Nlcl87Ci0JCQkJYnJvd3Nlci5vcGVuVVJMKG5ldyBVUkwoc2IudG9TdHJpbmcoKSkpOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgRXhwbG9yZXJQbHVnaW4uSUQsIDAsCi0JCQkJCUV4cGxvcmVyUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfTEFVTkNIX1dTRVhQTE9SRVIiKSwKLQkJCQkJZSk7Ci0JCX0KLQkJLy8gcmVnaXN0ZXIgbGF1bmNoIG9wdGlvbnMKLQkJaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHsKLQkJCXRyeSB7Ci0JCQkJU3RyaW5nQnVmZmVyIGxhdW5jaE9wdGlvbnNSZWdVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJbGF1bmNoT3B0aW9uc1JlZ1VSTC5hcHBlbmQoZ2V0QmFzZVVSTCgpKTsKLQkJCQlsYXVuY2hPcHRpb25zUmVnVVJMLmFwcGVuZChnZXRMYXVuY2hPcHRpb25SZWdpc3RyeVVSTCgpKTsKLQkJCQlVUkwgdXJsID0gbmV3IFVSTChsYXVuY2hPcHRpb25zUmVnVVJMLnRvU3RyaW5nKCkpOwotCQkJCVVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJCWNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0JCQkJUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpOwotCQkJCVN0cmluZ0J1ZmZlciBwYXJhbXMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJU3RyaW5nIGVuY29kZWRJRCA9IG51bGw7Ci0JCQkJdHJ5IHsKLQkJCQkJZW5jb2RlZElEID0gVVJMRW5jb2Rlci5lbmNvZGUoRXhwbG9yZXJQbHVnaW4uSUQsCi0JCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQkJfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCXJldHVybiBuZXcgU3RhdHVzKAotCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJRXhwbG9yZXJQbHVnaW4uSUQsCi0JCQkJCQkJMCwKLQkJCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkJLmdldE1lc3NhZ2UoIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiKSwKLQkJCQkJCQllKTsKLQkJCQl9Ci0JCQkJcGFyYW1zLmFwcGVuZChlbmNvZGVkSUQpOwotCQkJCXBhcmFtcy5hcHBlbmQoIj0iKTsKLQkJCQlwYXJhbXMuYXBwZW5kKGxhdW5jaE9wdGlvbktleSk7Ci0JCQkJcGFyYW1zLmFwcGVuZCgiJiIpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCQlpZiAob3B0aW9uc1tpXSAhPSBudWxsKSB7Ci0JCQkJCQlwYXJhbXMuYXBwZW5kKG9wdGlvbnNbaV0uZ2V0S2V5KCkpOwotCQkJCQkJcGFyYW1zLmFwcGVuZCgiPSIpOwotCQkJCQkJU3RyaW5nIG9wdGlvbiA9IG51bGw7Ci0JCQkJCQl0cnkgewotCQkJCQkJCW9wdGlvbiA9IFVSTEVuY29kZXIuZW5jb2RlKG9wdGlvbnNbaV0uZ2V0T3B0aW9uKCksCi0JCQkJCQkJCQlFeHBsb3JlclBsdWdpbi5DSEFSU0VUKTsKLQkJCQkJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJCQkJCXJldHVybiBuZXcgU3RhdHVzKAotCQkJCQkJCQkJSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQkJCUV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJCQkJMCwKLQkJCQkJCQkJCUV4cGxvcmVyUGx1Z2luCi0JCQkJCQkJCQkJCS5nZXRNZXNzYWdlKCIlTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04IiksCi0JCQkJCQkJCQllKTsKLQkJCQkJCX0KLQkJCQkJCXBhcmFtcy5hcHBlbmQob3B0aW9uKTsKLQkJCQkJCXBhcmFtcy5hcHBlbmQoIiYiKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlvdXQucHJpbnQocGFyYW1zLnRvU3RyaW5nKCkpOwotCQkJCW91dC5jbG9zZSgpOwotCQkJCW91dCA9IG51bGw7Ci0JCQkJSW5wdXRTdHJlYW0gaXMgPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7Ci0JCQkJaXMuY2xvc2UoKTsKLQkJCQlpcyA9IG51bGw7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywgRXhwbG9yZXJQbHVnaW4uSUQsIDAsCi0JCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9MT0FEX0xBVU5DSF9PUFRJT05TIiksCi0JCQkJCQllKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBFeHBsb3JlclBsdWdpbi5JRCwgMCwgIiIsIG51bGwpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGludCBnZXRMYXVuY2hPcHRpb25zS2V5KCkgewotCQlyZXR1cm4gbGF1bmNoT3B0aW9uc0tleV8rKzsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBsYXVuY2goSVdvcmtiZW5jaCB3YiwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nW10gaW5xdWlyeVVSTCwgU3RyaW5nW10gcHVibGlzaFVSTCwKLQkJCWJvb2xlYW4gZm9yY2VMYXVuY2hPdXRzaWRlSURFKSB7Ci0JCWludCBpbnF1aXJ5VVJMT3B0aW9uTGVuZ3RoID0gKGlucXVpcnlVUkwgIT0gbnVsbCkgPyBpbnF1aXJ5VVJMLmxlbmd0aAotCQkJCTogMDsKLQkJaW50IHB1Ymxpc2hVUkxPcHRpb25MZW5ndGggPSAocHVibGlzaFVSTCAhPSBudWxsKSA/IHB1Ymxpc2hVUkwubGVuZ3RoCi0JCQkJOiAwOwotCQlMYXVuY2hPcHRpb25bXSBvcHRpb25zID0gbmV3IExhdW5jaE9wdGlvbltpbnF1aXJ5VVJMT3B0aW9uTGVuZ3RoCi0JCQkJKyBwdWJsaXNoVVJMT3B0aW9uTGVuZ3RoXTsKLQkJaW50IGluZGV4ID0gMDsKLQkJaWYgKGlucXVpcnlVUkwgIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnF1aXJ5VVJMLmxlbmd0aDsgaSsrKSB7Ci0JCQkJb3B0aW9uc1tpbmRleF0gPSBuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuSU5RVUlSWV9VUkwsCi0JCQkJCQlpbnF1aXJ5VVJMW2ldKTsKLQkJCQlpbmRleCsrOwotCQkJfQotCQl9Ci0JCWlmIChwdWJsaXNoVVJMICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHVibGlzaFVSTC5sZW5ndGg7IGkrKykgewotCQkJCW9wdGlvbnNbaW5kZXhdID0gbmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlBVQkxJU0hfVVJMLAotCQkJCQkJcHVibGlzaFVSTFtpXSk7Ci0JCQkJaW5kZXgrKzsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbGF1bmNoKHdiLCBzZWwsIG9wdGlvbnMsIGZvcmNlTGF1bmNoT3V0c2lkZUlERSk7Ci0JfQotfQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3Igb3BlbmluZyBhIGJyb3dzZXIgYW5kIHN0b3JpbmcgdGhlCi0gKiBFeGNlcHRpb24gdGhyb3duIGlmIGl0IHdhcyB1bnN1Y2Nlc3NmdWwuIAotICovCi1jbGFzcyBPcGVuQnJvd3NlclJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotCQotCXByaXZhdGUgSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0OwotCXByaXZhdGUgVVJMIHVybDsKLQlwcml2YXRlIEV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOwotCQotCXB1YmxpYyBPcGVuQnJvd3NlclJ1bm5hYmxlKElXb3JrYmVuY2hCcm93c2VyU3VwcG9ydCBicm93c2VyU3VwcG9ydCwgVVJMIHVybCkgewotCQl0aGlzLmJyb3dzZXJTdXBwb3J0ID0gYnJvd3NlclN1cHBvcnQ7Ci0JCXRoaXMudXJsID0gdXJsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCXRyeSB7Ci0JCQlicm93c2VyU3VwcG9ydC5nZXRFeHRlcm5hbEJyb3dzZXIoKS5vcGVuVVJMKHVybCk7CQkJCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlleGNlcHRpb24gPSBlOwotCQl9Ci0JfQotCQotCXB1YmxpYyBFeGNlcHRpb24gZ2V0RXhjZXB0aW9uKCkgewotCQlyZXR1cm4gZXhjZXB0aW9uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3ZGU1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NFeHBsb3JlckNvbnRleHQgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmM3NjVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKiAKLSAqIFRoaXMgPGNvZGU+Q29tbWFuZDwvY29kZT4sIHdoZW4gZXhlY3V0ZWQsIGxhdW5jaGVzIHRoZQotICogV2ViIFNlcnZpY2VzIEV4cGxvcmVyLgotICovCi1wdWJsaWMgY2xhc3MgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwcml2YXRlIGJvb2xlYW4gZm9yY2VMYXVuY2hPdXRzaWRlSURFOwotCi0JcHJpdmF0ZSBMYXVuY2hPcHRpb25bXSBsYXVuY2hPcHRpb25zOwotCi0JcHVibGljIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgd3JpdGVDYXRlZ29yeUluZm8oU3RyaW5nIGlucXVpcnlVUkwsIFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQlQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotCQkJcC5zZXRQcm9wZXJ0eShMYXVuY2hPcHRpb25zLkNBVEVHT1JJRVNfRElSRUNUT1JZLAotCQkJCQljYXRlZ29yaWVzRGlyZWN0b3J5KTsKLQkJCVN0cmluZ0J1ZmZlciBwcm9wZXJ0aWVzRmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQlwcm9wZXJ0aWVzRmlsZU5hbWUuYXBwZW5kKFdTRXhwbG9yZXIuZ2V0SW5zdGFuY2UoKQotCQkJCQkuZ2V0TWV0YWRhdGFEaXJlY3RvcnkoKSk7Ci0JCQlGaWxlIG1ldGFkYXRhRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKHByb3BlcnRpZXNGaWxlTmFtZS50b1N0cmluZygpKTsKLQkJCWlmICghbWV0YWRhdGFEaXJlY3RvcnlGaWxlLmV4aXN0cygpKSB7Ci0JCQkJbWV0YWRhdGFEaXJlY3RvcnlGaWxlLm1rZGlycygpOwotCQkJfQotCQkJcHJvcGVydGllc0ZpbGVOYW1lLmFwcGVuZChVUkxFbmNvZGVyLmVuY29kZShpbnF1aXJ5VVJMLCJVVEYtOCIpKS5hcHBlbmQoCi0JCQkJCSIucHJvcGVydGllcyIpOwotCQkJRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ocHJvcGVydGllc0ZpbGVOYW1lCi0JCQkJCS50b1N0cmluZygpKTsKLQkJCXAuc3RvcmUoZm91dCwgbnVsbCk7Ci0JCQlmb3V0LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJfQotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoKSB7Ci0JCXJldHVybiBXU0V4cGxvcmVyLmdldEluc3RhbmNlKCkubGF1bmNoKG51bGwsIG51bGwsIGxhdW5jaE9wdGlvbnMsCi0JCQkJZm9yY2VMYXVuY2hPdXRzaWRlSURFKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZSgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmb3JjZUxhdW5jaE91dHNpZGVJREUKLQkgKiAgICAgICAgICAgIFRoZSBmb3JjZUxhdW5jaE91dHNpZGVJREUgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvcmNlTGF1bmNoT3V0c2lkZUlERShib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERSkgewotCQl0aGlzLmZvcmNlTGF1bmNoT3V0c2lkZUlERSA9IGZvcmNlTGF1bmNoT3V0c2lkZUlERTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbGF1bmNoT3B0aW9ucwotCSAqICAgICAgICAgICAgVGhlIGxhdW5jaE9wdGlvbnMgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhdW5jaE9wdGlvbnMoTGF1bmNoT3B0aW9uW10gbGF1bmNoT3B0aW9ucykgewotCQl0aGlzLmxhdW5jaE9wdGlvbnMgPSBsYXVuY2hPcHRpb25zOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dlYmFwcE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV2ViYXBwTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDUwNzUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV2ViYXBwTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGljdGlvbmFyeTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHkuSmV0dHlDb25maWd1cmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkludmFsaWRTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlNlcnZpY2VSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBXZWJhcHBNYW5hZ2VyIHsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBob3N0OwotCXByaXZhdGUgc3RhdGljIGludCBwb3J0ID0gLTE7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFVVE9fU0VMRUNUX0pFVFRZX1BPUlQgPSAwOwotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydChTdHJpbmcgd2ViYXBwTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCURpY3Rpb25hcnkgZCA9IG5ldyBIYXNodGFibGUoKTsKLQkJCi0JCQotCQlkLnB1dCgiaHR0cC5wb3J0IiwgbmV3IEludGVnZXIoZ2V0UG9ydFBhcmFtZXRlcigpKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBzZXQgdGhlIGJhc2UgVVJMCi0JCWQucHV0KCJjb250ZXh0LnBhdGgiLCAiL3dzZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZC5wdXQoIm90aGVyLmluZm8iLCAib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJLy8gc3VwcHJlc3MgSmV0dHkgSU5GTy9ERUJVRyBtZXNzYWdlcyB0byBzdGRlcnIKLQkJTG9nZ2VyLmdldExvZ2dlcigib3JnLm1vcnRiYXkiKS5zZXRMZXZlbChMZXZlbC5XQVJOSU5HKTsgLy8kTk9OLU5MUy0xJAkKLQotCQlKZXR0eUNvbmZpZ3VyYXRvci5zdGFydFNlcnZlcih3ZWJhcHBOYW1lLCBkKTsKLQkJY2hlY2tCdW5kbGUoKTsKLQkJCi0JfQotCQotCS8qCi0JICogRW5zdXJlcyB0aGF0IHRoZSBidW5kbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHRoZSBoaWdoZXN0IGF2YWlsYWJsZQotCSAqIHZlcnNpb24gaXMgc3RhcnRlZCBhbmQgcmVhZHMgdGhlIHBvcnQgbnVtYmVyCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0J1bmRsZSgpIHRocm93cyBJbnZhbGlkU3ludGF4RXhjZXB0aW9uLCBCdW5kbGVFeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkiKTsgLy8kTk9OLU5MUy0xJGlmIChidW5kbGUgIT0gbnVsbCkgewotCQlpZiAoYnVuZGxlLmdldFN0YXRlKCkgPT0gQnVuZGxlLlJFU09MVkVEKSB7Ci0JCQlidW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7Ci0JCX0KLQkJaWYgKHBvcnQgPT0gLTEpIHsKLQkJCS8vIEpldHR5IHNlbGVjdGVkIGEgcG9ydCBudW1iZXIgZm9yIHVzCi0JCQlTZXJ2aWNlUmVmZXJlbmNlW10gcmVmZXJlbmNlID0gYnVuZGxlLmdldEJ1bmRsZUNvbnRleHQoKS5nZXRTZXJ2aWNlUmVmZXJlbmNlcygib3JnLm9zZ2kuc2VydmljZS5odHRwLkh0dHBTZXJ2aWNlIiwgIihvdGhlci5pbmZvPW9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlPYmplY3QgYXNzaWduZWRQb3J0ID0gcmVmZXJlbmNlWzBdLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsgLy8kTk9OLU5MUy0xJAotCQkJcG9ydCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylhc3NpZ25lZFBvcnQpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHN0b3AoU3RyaW5nIHdlYmFwcE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUpldHR5Q29uZmlndXJhdG9yLnN0b3BTZXJ2ZXIod2ViYXBwTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL0hlbHBCYXNlUGx1Z2luLmxvZ0Vycm9yKCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHN0b3BwaW5nIHRoZSBoZWxwIHNlcnZlciIsIGUpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGludCBnZXRQb3J0KCkgewotCQlyZXR1cm4gcG9ydDsKLQl9Ci0KLQkvKgotCSAqIEdldCB0aGUgcG9ydCBudW1iZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gSmV0dHkKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UG9ydFBhcmFtZXRlcigpIHsKLQkJaWYgKHBvcnQgPT0gLTEpIHsgCi0JCQlyZXR1cm4gQVVUT19TRUxFQ1RfSkVUVFlfUE9SVDsKLQkJfQotCQlyZXR1cm4gcG9ydDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIb3N0KCkgewotCQlpZiAoaG9zdCA9PSBudWxsKSB7Ci0JCQlTdHJpbmcgaG9zdENvbW1hbmRMaW5lT3ZlcnJpZGUgPSBFeHBsb3JlclBsdWdpbi5nZXRCdW5kbGVDb250ZXh0KCkuZ2V0UHJvcGVydHkoInNlcnZlcl9ob3N0Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChob3N0Q29tbWFuZExpbmVPdmVycmlkZSAhPSBudWxsICYmIGhvc3RDb21tYW5kTGluZU92ZXJyaWRlLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKLQkJCQlob3N0ID0gaG9zdENvbW1hbmRMaW5lT3ZlcnJpZGU7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlob3N0ID0gIjEyNy4wLjAuMSI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCQlyZXR1cm4gaG9zdDsKLQl9Ci0JCi0JcHJpdmF0ZSBXZWJhcHBNYW5hZ2VyKCkgewotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9hY3Rpb24vTGF1bmNoV1NFQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMzI0ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9hY3Rpb24vTGF1bmNoV1NFQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA4MjAgICAxOTE1ODUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgTGF1bmNoV1NFQWN0aW9uIGltcGxlbWVudHMgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlCi17Ci0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIEVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICAgICAgICAgIGhhbmRsZXIgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0ICAgICAgICAgY29udGV4dCAgICAgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCBjb250ZXh0LCBoYW5kbGVyICk7IAotICAgIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgICAgICAgIGNtZCAgICAgICAgID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICAKLSAgICBTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCUxhdW5jaE9wdGlvbltdIGxhdW5jaE9wdGlvbnMgPSBuZXcgTGF1bmNoT3B0aW9uW10gewotCQluZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04sc3RhdGVMb2NhdGlvbiksCi0JCW5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pCi0JfTsKLSAgICBjbWQuc2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKLSAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JICBjbWQuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2Rpc3Bvc2UoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsgIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93KQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeyAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeyAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDljODE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdDsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQgZXh0ZW5kcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdCB7Ci0JcHJpdmF0ZSBzdGF0aWMgV1NJTERvY3VtZW50IHdzaWxEb2NfOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFWT1JJVEVTX0RFRkFVTFQgPSAicHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsIjsKLQkKLQlwcml2YXRlIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzXyA9IG51bGw7Ci0KLQlwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdCgpIHsKLQkJc3VwZXIoKTsKLQkJd3NpbERvY18gPSBudWxsOwotCX0KLQotCXB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0KFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzKSB7Ci0JCXN1cGVyKCk7Ci0JCXdzaWxEb2NfID0gbnVsbDsKLQkJZGVmYXVsdEZhdm9yaXRlc18gPSBkZWZhdWx0RmF2b3JpdGVzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVhZExvY2F0aW9uKCkgewotCQlTdHJpbmdCdWZmZXIgcmVhZExvY2F0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpZiAoZGVmYXVsdEZhdm9yaXRlc18gPT0gbnVsbCkKLQkJewotCQkJcmVhZExvY2F0aW9uLmFwcGVuZChFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpbkluc3RhbGxMb2NhdGlvbigpKTsKLQkJCXJlYWRMb2NhdGlvbi5hcHBlbmQoRkFWT1JJVEVTX0RFRkFVTFQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmVhZExvY2F0aW9uLmFwcGVuZChkZWZhdWx0RmF2b3JpdGVzXyk7Ci0JCX0KLQkJcmV0dXJuIHJlYWRMb2NhdGlvbi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVMb2NhdGlvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoKSB7Ci0JCWlmICh3c2lsRG9jXyA9PSBudWxsKSB7Ci0JCQl3c2lsRG9jXyA9IGxvYWRXU0lMRG9jdW1lbnQoZ2V0UmVhZExvY2F0aW9uKCksIHRydWUpOwotCQkJZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJpZXMoKTsKLQkJCS8qIFRPRE86IFB1YmxpYyByZWdpc3RyeSBzdHJpbmdzIHNob3VsZG4ndCBiZSBpbiBwcm9wZXJ0aWVzIC0gQWluJ3QgZXh0ZW5zaWJsZS4KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykgewotCQkJCXJlZ2lzdHJpZXNbaV0uc2V0TmFtZShXU1BsdWdpbi5nZXRSZXNvdXJjZVN0cmluZyhyZWdpc3RyaWVzW2ldLmdldE5hbWUoKSkpOwotCQkJfQotCQkJKi8KLQkJfQotCQlyZXR1cm4gd3NpbERvY187Ci0JfQotCi0JcHVibGljIFdTSUxEb2N1bWVudCBnZXRGYXZvcml0ZXNEZWZhdWx0KCkgewotCQlyZXR1cm4gZ2V0V1NJTERvY3VtZW50KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2F2ZSgpIHRocm93cyBXU0lMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3NmExZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3Q7Ci0KLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRSBleHRlbmRzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0Ci17Ci0gIHByaXZhdGUgc3RhdGljIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFWT1JJVEVTX1dTRVhQTE9SRVIgPSAiZmF2b3JpdGVzLndzaWwiOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzXyA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXRlTG9jYXRpb25fID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB3c2lsRG9jXyA9IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UoU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXMsIFN0cmluZyBzdGF0ZUxvY2F0aW9uKSB7Ci0Jc3VwZXIoKTsKLQl3c2lsRG9jXyA9IG51bGw7Ci0JZGVmYXVsdEZhdm9yaXRlc18gPSBkZWZhdWx0RmF2b3JpdGVzOwotCXN0YXRlTG9jYXRpb25fID0gc3RhdGVMb2NhdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciByZWFkTG9jYXRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgcmVhZExvY2F0aW9uLmFwcGVuZChzdGF0ZUxvY2F0aW9uXyA9PSBudWxsID8gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCkgOiBzdGF0ZUxvY2F0aW9uXyk7Ci0gICAgcmVhZExvY2F0aW9uLmFwcGVuZChGQVZPUklURVNfV1NFWFBMT1JFUik7Ci0gICAgcmV0dXJuIHJlYWRMb2NhdGlvbi50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRSZWFkTG9jYXRpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KCkKLSAgewotICAgIGlmICh3c2lsRG9jXyA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzaWxEb2NfID0gbG9hZFdTSUxEb2N1bWVudChnZXRSZWFkTG9jYXRpb24oKSwgZmFsc2UpOwotICAgICAgaWYgKHdzaWxEb2NfID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3RvcmVGYXZvcml0ZXNEZWZhdWx0KCk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc2F2ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB3c2lsRG9jXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVGYXZvcml0ZXNEZWZhdWx0KCkKLSAgewotICAgIHdzaWxEb2NfID0gKG5ldyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0KGRlZmF1bHRGYXZvcml0ZXNfKSkuZ2V0V1NJTERvY3VtZW50KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIwN2ZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLQotLy8gQWJzdHJhY3QgYWN0aW9uIGNsYXNzIHVzZWQgZm9yIGJvdGggTGluayBhbmQgRm9ybSBhY3Rpb25zLgotcHVibGljIGFic3RyYWN0IGNsYXNzIEFjdGlvbgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlXzsKLSAgcHJvdGVjdGVkIFZlY3RvciByZW1vdmVkUHJvcGVydGllc187Ci0KLSAgcHVibGljIEFjdGlvbigpCi0gIHsKLSAgICB0aGlzKG51bGwpOwotICB9Ci0KLSAgcHVibGljIEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcmVtb3ZlZFByb3BlcnRpZXNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIENvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICAvKioKLSAgKiBSZWFkIHByb3BlcnRpZXMgZnJvbSBhbiBIdHRwU2VydmxldFJlcXVlc3QgYW5kIGFkZCB0aGVtIHRvIHRoZSBwcm9wZXJ0eSB0YWJsZS4KLSAgKiBAcGFyYW0gSHR0cFNlcnZsZXRSZXF1ZXN0IFRoZSBIdHRwU2VydmxldFJlcXVlc3QgY29udGFpbmluZyB0aGUgZW1iZWRkZWQgcGFyYW1ldGVycy4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gV2hldGhlciBvciBub3QgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KTsKLQotICAvKioKLSAgKiBHZXQgdGhlIHByb3BlcnR5IHRhYmxlLgotICAqIEByZXR1cm4gSGFzaHRhYmxlIEEgaGFzaHRhYmxlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgYWN0aW9uLgotICAqLwotICBwdWJsaWMgZmluYWwgSGFzaHRhYmxlIGdldFByb3BlcnR5VGFibGUoKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnR5VGFibGVfOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBwcm9wZXJ0eSB0YWJsZS4KLSAgICogQHJldHVybiB2b2lkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlKQotICB7Ci0gICBwcm9wZXJ0eVRhYmxlXyA9IHByb3BlcnR5VGFibGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgcHJvcGVydHkgdGFibGUuCi0gICAqIEBwYXJhbSB2b2lkCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRQcm9wZXJ0eShPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoa2V5LCB2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIHRoZSBwcm9wZXJ0eSB0YWJsZS4gVHJhY2sgdGhlIGRlbGV0aW9ucy4KLSAgKiBAcGFyYW0gT2JqZWN0IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQuCi0gICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZVByb3BlcnR5KE9iamVjdCBrZXkpCi0gIHsKLSAgICBwcm9wZXJ0eVRhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICByZW1vdmVkUHJvcGVydGllc18uYWRkRWxlbWVudChrZXkpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0UHJvcGVydHlBc1N0cmluZ0FycmF5KE9iamVjdCBrZXkpCi0gIHsKLSAgICBPYmplY3Qgb2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KGtleSk7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZ1tdKQotICAgICAgcmV0dXJuIChTdHJpbmdbXSlvYmplY3Q7Ci0gICAgZWxzZSBpZiAob2JqZWN0ICE9IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHtvYmplY3QudG9TdHJpbmcoKX07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBleGVjdXRlKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlKHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gZXhlY3V0ZShib29sZWFuIHVzZUFjdGlvbkVuZ2luZSkKLSAgewotICAgIGlmICh1c2VBY3Rpb25FbmdpbmUpCi0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0QWN0aW9uRW5naW5lKCkuZXhlY3V0ZUFjdGlvbih0aGlzKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcnVuKCk7Ci0gIH0KLQotICAvLyBBYnN0cmFjdCBtZXRob2QgZm9yIHJ1bm5pbmcgdGhpcyBhY3Rpb24uCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHJ1bigpOwotICAKLSAgLyoqCi0gICogUmV0dXJuIHRoZSB0cmFuc2Zvcm1lcnMgdXNlZCB0byBub3JtYWxpemUgdGhlIGlucHV0L291dHB1dCBwYXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbgotICAqIEByZXR1cm4gSVRyYW5zZm9ybWVyW10KLSAgKi8KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKFBlcnNwZWN0aXZlIHBlcnNwZWN0aXZlLE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUsU3RyaW5nIGV4Y2VwdGlvbk5hbWUsVGhyb3dhYmxlIHQpCi0gIHsKLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShwZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZXhjZXB0aW9uTmFtZSk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ODMyZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAiYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbkpTUC5qc3AiOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzZmRjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgICAxNTYzOTggamVmZmxpdUBjYS5pYm0uY29tIC0gSmVmZnJleSBMaXUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2xlYXJOb2RlQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwdWJsaWMgQ2xlYXJOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpZiAoIWlzU3RhbGVOb2RlKG5vZGVJZCkpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAvL2VsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgTGlzdCBlbGVtZW50czJyZW1vdmUgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBjb2xsZWN0RWxlbWVudHMyUmVtb3ZlKGVsZW1lbnQsIGVsZW1lbnRzMnJlbW92ZSk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZWxlbWVudHMycmVtb3ZlLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IGUgPSAoVHJlZUVsZW1lbnQpaXQubmV4dCgpOwotICAgICAgICBlLmdldE1vZGVsKCkucmVtb3ZlRWxlbWVudChlKTsKLSAgICAgIH0KLSAgICAgIGlmIChlbGVtZW50LmdldE1vZGVsKCkuZ2V0Um9vdEVsZW1lbnQoKSAhPSBlbGVtZW50KQotICAgICAgICBub2RlTWFuYWdlcl8ucmVtb3ZlRnJvbU5vZGVUYWJsZShub2RlSWQpOwotICAgICAgLy8gRG8gbm90IGFkZCB0aGlzIHRvIHRoZSBoaXN0b3J5LgotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9ERV9DTEVBUkVEIixub2RlLmdldE5vZGVOYW1lKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29sbGVjdEVsZW1lbnRzMlJlbW92ZShUcmVlRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzMnJlbW92ZSkKLSAgewotICAgIGlmICghZWxlbWVudHMycmVtb3ZlLmNvbnRhaW5zKGVsZW1lbnQpKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldE1vZGVsKCkuZ2V0Um9vdEVsZW1lbnQoKSAhPSBlbGVtZW50KQotICAgICAgICBlbGVtZW50czJyZW1vdmUuYWRkKGVsZW1lbnQpOwotICAgICAgRW51bWVyYXRpb24gcmVscyA9IGVsZW1lbnQuZ2V0UmVscygpOwotICAgICAgd2hpbGUgKHJlbHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFJlbCByZWwgPSAoUmVsKXJlbHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgU3RyaW5nIHJlbE5hbWUgPSByZWwuZ2V0TmFtZSgpOwotICAgICAgICBpZiAoIU1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUi5lcXVhbHMocmVsTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBFbnVtZXJhdGlvbiBjaGlsZHJlbiA9IGVsZW1lbnQuZ2V0RWxlbWVudHMocmVsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgd2hpbGUgKGNoaWxkcmVuLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbGxlY3RFbGVtZW50czJSZW1vdmUoKFRyZWVFbGVtZW50KWNoaWxkcmVuLm5leHRFbGVtZW50KCksIGVsZW1lbnRzMnJlbW92ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8vIERlbGV0aW5nIGEgbm9kZSBmcm9tIHRoZSB0cmVlIHJlc3VsdHMgaW4gY2hhbmdlcyB0byB0aGUgdHJlZXZpZXcgYW5kIHN0YXR1cyBjb250ZW50cy4KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTk4ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLQotLy8gQWJzdHJhY3QgYWN0aW9uIGNsYXNzIHVzZWQgZm9yIGJvdGggTGluayBhbmQgRm9ybSBhY3Rpb25zLgotcHVibGljIGFic3RyYWN0IGNsYXNzIENsZWFyVmlld0VsZW1lbnRBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIGxpc3RNYW5hZ2VyUmVsXzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHB1YmxpYyBDbGVhclZpZXdFbGVtZW50QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcixTdHJpbmcgbGlzdE1hbmFnZXJSZWwpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gID0gbm9kZU1hbmFnZXI7Ci0gICAgbGlzdE1hbmFnZXJSZWxfID0gbGlzdE1hbmFnZXJSZWw7Ci0gIH0KLQotICAvLyAuLi5qc3A/dmlld0lkPS4uLgotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgdmlld0lkU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgLy8gUGVyZm9ybSBkYXRhIHZhbGlkYXRpb24uCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW50ZWdlci5wYXJzZUludCh2aWV3SWRTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELHZpZXdJZFN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IHZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKXNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGlmICh2aWV3VG9vbC5nZXRUb29sTWFuYWdlcih2aWV3SWQpID09IG51bGwpCi0gICAgewotICAgICAgLy8gU3RhbGUgdmlldy4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gKExpc3RNYW5hZ2VyKWVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChsaXN0TWFuYWdlclJlbF8pOwotICAgIGxpc3RNYW5hZ2VyLnJlbW92ZUVsZW1lbnRXaXRoVmlld0lkKHZpZXdJZCk7Ci0gICAgdmlld1Rvb2wuY2xlYXJWaWV3VG9vbE1hbmFnZXIodmlld0lkKTsKLSAgICBzZWxlY3RlZE5vZGUuc2V0Vmlld0lkKEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0gICAgLy8gRG8gbm90IGFkZCB0aGlzIHRvIHRoZSBoaXN0b3J5LgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk0ZDMwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRm9ybUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcigpOwotICAgICAgcGFyc2VyLnBhcnNlUmVxdWVzdChyZXF1ZXN0LEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKTsKLSAgICAgIGdldFNlbGVjdGVkRm9ybVRvb2woKS5jbGVhckVycm9ycygpOwotICAgICAgYm9vbGVhbiByZXN1bHQgPSBwcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgICAgcmVtb3ZlZFByb3BlcnRpZXNfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgcHJvcGVydHlUYWJsZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHByb2Nlc3NQYXJzZWRSZXN1bHRzKG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcihwcm9wZXJ0eVRhYmxlKSk7Ci0gICAgfQotICAgIGNhdGNoIChNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiBtZmRlKQotICAgIHsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHByb3BlcnR5VGFibGUua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0gaXQubmV4dCgpOwotICAgICAgSGFzaHRhYmxlIHRoaXNQcm9wZXJ0eVRhYmxlID0gZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgaWYgKCF0aGlzUHJvcGVydHlUYWJsZS5jb250YWluc0tleShrZXkpKQotICAgICAgICBhZGRQcm9wZXJ0eShrZXksIHByb3BlcnR5VGFibGUuZ2V0KGtleSkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFRvSGlzdG9yeShpbnQgcGVyc3BlY3RpdmVJZCxTdHJpbmcgdXJsKQotICB7Ci0gICAgY29udHJvbGxlcl8uYWRkVG9IaXN0b3J5KHBlcnNwZWN0aXZlSWQsdXJsKTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUlucHV0RXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUlucHV0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMmNjYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1JbnB1dEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLS8vIEEgY2xhc3MgZm9yIHJlcG9ydGluZyBmb3JtIGlucHV0IGV4Y2VwdGlvbnMuCi1wdWJsaWMgY2xhc3MgRm9ybUlucHV0RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1Nzg0NjYwMTY4NTkzODc0Mkw7Ci0KLXB1YmxpYyBGb3JtSW5wdXRFeGNlcHRpb24oU3RyaW5nIG1zZykKLSAgewotICAgIHN1cGVyKG1zZyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ3MjQ1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICAvLyBvcyBpcyB0aGUgT3V0cHV0U3RyZWFtIG9mIHRoZSBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbQotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpOwotCi0gIC8vIHRoZSBkZWZhdWx0IG5hbWUgZm9yIHRoZSBmaWxlCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gd3JpdGVXU0RMRGVmaW5pdGlvbihPdXRwdXRTdHJlYW0gb3MsIERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgICAgV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotICAgICAgd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgb3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gd3JpdGVXU0lMRG9jdW1lbnQoT3V0cHV0U3RyZWFtIG9zLCBXU0lMRG9jdW1lbnQgd3NpbERvYykKLSAgewotICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3MpOwotICAgICAgd3NpbERvYy53cml0ZShvc3cpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKG9zdyAhPSBudWxsKQotICAgICAgICAgIG9zdy5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIFN0cmluZyBqc3BQYWdlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKGpzcFBhZ2UpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc/Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmcgdG9vbElEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgU3RyaW5nIHZpZXdJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIFN0cmluZyB2aWV3VG9vbElEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlEKTsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodG9vbElEKTsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodmlld0lEKTsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodmlld1Rvb2xJRCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbm9kZUlEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCB0b29sSUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsIHZpZXdUb29sSUQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMGMzZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzIxICAgMTQ5MDcwIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MsIHVwZGF0ZSB0byByZXNwZWN0IHByZWZlcmVuY2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWwuQWRkV1NETFRvV1NJTENvbW1hbmQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEZvcm1BY3Rpb24gewotICBwcml2YXRlIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290XzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBpUHJvamVjdF87Ci0gIHByaXZhdGUgSVJlc291cmNlIHRhcmdldEZpbGVSZXNvdXJjZV87Ci0KLSAgICBwdWJsaWMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgICAgICBpV29ya3NwYWNlUm9vdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICAgICAgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgICAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgICAgIFN0cmluZyB3b3JrYmVuY2hQcm9qZWN0TmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAod29ya2JlbmNoUHJvamVjdE5hbWUgPT0gbnVsbCB8fCB3b3JrYmVuY2hQcm9qZWN0TmFtZS5sZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dPUktCRU5DSF9QUk9KRUNUIikpOwotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlQcm9qZWN0XyA9IGlXb3Jrc3BhY2VSb290Xy5nZXRQcm9qZWN0KHdvcmtiZW5jaFByb2plY3ROYW1lKTsKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSwgd29ya2JlbmNoUHJvamVjdE5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBpbXBvcnRGaWxlID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUpOwotICAgICAgICBpZiAoaW1wb3J0RmlsZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFLCBBY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUpOwotICAgICAgICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgICAgICAgaWYgKGltcG9ydGVkRmlsZU5hbWUgPT0gbnVsbCB8fCBpbXBvcnRlZEZpbGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9GSUxFX05BTUUiKSk7Ci0gICAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSwgaW1wb3J0ZWRGaWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGltcG9ydFRvV1NJTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMKTsKLSAgICAgICAgaWYgKGltcG9ydFRvV1NJTCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMLCBBY3Rpb25JbnB1dHMuSU1QT1JUX1RPX1dTSUwpOwotICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9XU0RMX1VSTCwgcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSU1QT1JURURfV1NETF9VUkwpKTsKLSAgICAgICAgICAgIFN0cmluZyB3c2lsRmlsZU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XU0lMX0ZJTEVfTkFNRSk7Ci0gICAgICAgICAgICBpZiAod3NpbEZpbGVOYW1lID09IG51bGwgfHwgd3NpbEZpbGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0lMX0ZJTEVfTkFNRSIpKTsKLSAgICAgICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuV1NJTF9GSUxFX05BTUUsIHdzaWxGaWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGltcG9ydEZpbGUgPT0gbnVsbCAmJiBpbXBvcnRUb1dTSUwgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fSU1QT1JUX09QVElPTl9TRUxFQ1RFRCIpKTsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICAgIH0KLQotICAgIHByaXZhdGUgT3V0cHV0U3RyZWFtIGdldE91dHB1dFN0cmVhbShTdHJpbmcgZGVmYXVsdEZpbGVOYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSArIGRlZmF1bHRGaWxlTmFtZSk7Ci0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7Ci0gICAgICAgIHJldHVybiBmb3M7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGltcG9ydFRlbXBGaWxlVG9XZWJQcm9qZWN0KFN0cmluZyBkZWZhdWx0RmlsZU5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgICB7Ci0gICAgICBpZiAodGFyZ2V0RmlsZVJlc291cmNlXyAhPSBudWxsICYmIHRhcmdldEZpbGVSZXNvdXJjZV8uZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotICAgICAgICB0YXJnZXRGaWxlUmVzb3VyY2VfLmRlbGV0ZSh0cnVlLG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0gICAgICBTdHJpbmcgaW1wb3J0ZWRGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKStkZWZhdWx0RmlsZU5hbWUpOwotICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBiaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQotICAgICAgSUZpbGUgaUZpbGUgPSBpUHJvamVjdF8uZ2V0RmlsZSgiLyIraW1wb3J0ZWRGaWxlTmFtZSk7Ci0gICAgICBpRmlsZS5jcmVhdGUoYmlzLHRydWUsbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLSAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUKLSAgICAgIGZpbGUuZGVsZXRlKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBmaWxlRXhpc3RzKCkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgaWYgKGltcG9ydGVkRmlsZU5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGFyZ2V0RmlsZVJlc291cmNlXyA9IGlQcm9qZWN0Xy5maW5kTWVtYmVyKGltcG9ydGVkRmlsZU5hbWUpOwotICAgICAgICByZXR1cm4gKHRhcmdldEZpbGVSZXNvdXJjZV8gIT0gbnVsbCAmJiB0YXJnZXRGaWxlUmVzb3VyY2VfLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1RhcmdldEZpbGVSZXNvdXJjZVJlYWRPbmx5KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdGFyZ2V0RmlsZVJlc291cmNlXy5nZXRSZXNvdXJjZUF0dHJpYnV0ZXMoKS5pc1JlYWRPbmx5KCk7Ci0gICAgfQotCi0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNDaGVja291dEZpbGVzRW5hYmxlZCgpCi0gICAgewotICAgIAlyZXR1cm4gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VQbHVnaW5GaWxlTWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkKQotICAgIHsKLSAgICAgIFN0cmluZyBpbXBvcnRlZEZpbGVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSk7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0TWVzc2FnZShtZXNzYWdlSWQsbmV3IFN0cmluZ1tde2lQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksaW1wb3J0ZWRGaWxlTmFtZX0pOwotICAgIH0KLQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkKLSAgICB7Ci0gICAgCXJldHVybiBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCkuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUVkaXQoKQotICAgIHsKLSAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0gICAgICBmaWxlc1swXSA9IChJRmlsZSl0YXJnZXRGaWxlUmVzb3VyY2VfOwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVFZGl0KGZpbGVzLG51bGwpOwotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uoc3RhdHVzLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gc3RhdHVzLmlzT0soKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIE1lc3NhZ2VRdWV1ZSBtc2dRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgICBpZiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRfRklMRSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0RmlsZU5hbWUgPSBhY3Rpb24uZ2V0RGVmYXVsdEZpbGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb24ud3JpdGUoZ2V0T3V0cHV0U3RyZWFtKGRlZmF1bHRGaWxlTmFtZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dSSVRJTkdfVEVNUF9GSUxFX1RPX0ZTIikpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGltcG9ydFRlbXBGaWxlVG9XZWJQcm9qZWN0KGRlZmF1bHRGaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX0lNUE9SVF9UT19XT1JLQkVOQ0hfU1VDQ0VTU0ZVTCIsIGltcG9ydGVkRmlsZU5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZm5mZSkgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoZm5mZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUpOwotICAgICAgICAgICAgU3RyaW5nIGltcG9ydGVkV1NJTEZpbGVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLldTSUxfRklMRV9OQU1FKTsKLSAgICAgICAgICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX1dTRExfVVJMKTsKLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB3c2lsUGxhdGZvcm1VUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCJwbGF0Zm9ybTovcmVzb3VyY2UvIik7Ci0gICAgICAgICAgICB3c2lsUGxhdGZvcm1VUkwuYXBwZW5kKHByb2plY3ROYW1lKTsKLSAgICAgICAgICAgIHdzaWxQbGF0Zm9ybVVSTC5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgIHdzaWxQbGF0Zm9ybVVSTC5hcHBlbmQoaW1wb3J0ZWRXU0lMRmlsZU5hbWUpOwotICAgICAgICAgICAgQWRkV1NETFRvV1NJTENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRXU0RMVG9XU0lMQ29tbWFuZCgpOwotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbNV07Ci0gICAgICAgICAgICBhcmdzWzBdID0gQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTSUw7Ci0gICAgICAgICAgICBhcmdzWzFdID0gd3NpbFBsYXRmb3JtVVJMLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBhcmdzWzJdID0gQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTREw7Ci0gICAgICAgICAgICBhcmdzWzNdID0gd3NkbFVSTDsKLSAgICAgICAgICAgIGFyZ3NbNF0gPSBBZGRXU0RMVG9XU0lMQ29tbWFuZC5BUkdfUkVTT0xWRV9XU0RMOwotICAgICAgICAgICAgY29tbWFuZC5zZXRBcmd1bWVudHMoYXJncyk7Ci0gICAgICAgICAgICBJRW52aXJvbm1lbnQgZW52ID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudChudWxsLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICAgICAgICAgY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX0lNUE9SVF9TRVJWSUNFX1JFRl9UT19XU0lMX1NVQ0NFU1NGVUwiLCBpbXBvcnRlZFdTSUxGaWxlTmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1M2EzNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hXaXphcmRSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoV2l6YXJkVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB3aXphcmRJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQsIHdpemFyZElEKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGxhdW5jaFdpemFyZChTdHJpbmcgd3NkbFVSTCkKLSAgewotICAgIExhdW5jaFdpemFyZFRhc2sgdGFzayA9IExhdW5jaFdpemFyZFRhc2suZ2V0SW5zdGFuY2UoKTsKLSAgICBpZiAodGFzay5nZXRJc0V4ZWN1dGluZygpKQotICAgIHsKLSAgICAgIGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dJWkFSRF9BTFJFQURZX1JVTk5JTkciKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGludCB3aXphcmRJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCkpOwotICAgIExhdW5jaFdpemFyZFJ1bm5hYmxlIHJ1bm5hYmxlOwotICAgIGlmICh3aXphcmRJRCA9PSBBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfQ0xJRU5UX1dJWkFSRCkKLSAgICAgIHJ1bm5hYmxlID0gbmV3IExhdW5jaFdpemFyZFJ1bm5hYmxlKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiLCB3c2RsVVJMKTsKLSAgICBlbHNlIGlmICh3aXphcmRJRCA9PSBBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEKQotICAgICAgcnVubmFibGUgPSBuZXcgTGF1bmNoV2l6YXJkUnVubmFibGUoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIiwgd3NkbFVSTCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhc2suY2hlY2tBbmRBc3luY0V4ZWMocnVubmFibGUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xpbmtBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZjY0NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xpbmtBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotLy8gQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBhY3Rpb24gb2YgY2xpY2tpbmcgYSBsaW5rLiBUaGVzZSBhY3Rpb25zCi0vLyBtYXkgY2hhbmdlIHRoZSBoaXN0b3J5IGxpc3QuCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGlua0FjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1N0YWxlQnJlYWRDcnVtYl87Ci0KLSAgcHVibGljIExpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgaXNBZGRlZFRvSGlzdG9yeV8gPSBmYWxzZTsKLSAgICBpc1N0YWxlQnJlYWRDcnVtYl8gPSBmYWxzZTsKLSAgfQotCi0gIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhpcyBoaXN0b3J5IGxpc3QuCi0gIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgcnVuKCkgbWV0aG9kLgotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBpc0FkZGVkVG9IaXN0b3J5XzsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCk7Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIGlzSGlzdG9yeVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgIGlmIChpc0hpc3RvcnlTdHJpbmcgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuSVNISVNUT1JZLGlzSGlzdG9yeVN0cmluZyk7Ci0gICAgcmV0dXJuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgYWN0aW9uJ3MgVVJMIHRvIHRoZSBjb250cm9sbGVyJ3MgaGlzdG9yeSBsaXN0LgotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRUb0hpc3RvcnkoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIGlmICghaXNIaXN0b3J5QWN0aW9uKCkpCi0gICAgICBpc0FkZGVkVG9IaXN0b3J5XyA9IGNvbnRyb2xsZXJfLmFkZFRvSGlzdG9yeShwZXJzcGVjdGl2ZUlkLHVybCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0hpc3RvcnlBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdGFsZUJyZWFkQ3J1bWIoKQotICB7Ci0gICAgaWYgKGlzSGlzdG9yeUFjdGlvbigpKQotICAgIHsKLSAgICAgIGlzU3RhbGVCcmVhZENydW1iXyA9IHRydWU7Ci0gICAgICBjb250cm9sbGVyXy5wcm9jZXNzU3RhbGVCcmVhZENydW1iKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdGFsZUJyZWFkQ3J1bWIoKQotICB7Ci0gICAgcmV0dXJuIGlzU3RhbGVCcmVhZENydW1iXzsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyB3aGVuIGEgc3RhbGUgYnJlYWRjcnVtYiBpcyBlbmNvdW50ZXJlZCB3aGlsZSB0cmF2ZXJzaW5nIGhpc3RvcnkgY2hhaW4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV4dEhpc3RvcnlBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24uZ2V0QWN0aW9uTGluayhjb250cm9sbGVyXy5nZXRIaXN0b3J5RGlyZWN0aW9uKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL05vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I0NGE2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNOb2RlU2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc1N0YXR1c1VwZGF0ZV87Ci0KLSAgcHVibGljIE5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gZmFsc2U7Ci0gICAgcmVxdWlyZXNOb2RlU2VsZWN0aW9uXyA9IGZhbHNlOwotICAgIHJlcXVpcmVzVmlld1NlbGVjdGlvbl8gPSBmYWxzZTsKLSAgICByZXF1aXJlc1N0YXR1c1VwZGF0ZV8gPSBmYWxzZTsKLSAgfQotCi0gIC8vIC4uLmpzcD9ub2RlSWQ9Li4uPCZpc0hpc3Rvcnk9MT4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIG5vZGVJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkIQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxub2RlSWRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaXNTdGFsZU5vZGUoaW50IG5vZGVJZCkKLSAgewotICAgIHJldHVybiAobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSA9PSBudWxsKTsKLSAgfQotCi0gIC8qKgotICAqIE1ha2UgYSBub2RlIHZpc2libGUuIEEgbm9kZSBpcyB2aXNpYmxlIHdoZW4gYWxsIG9mIGl0cyBhbmNlc3RvcnMgYXJlIGV4cGFuZGVkLgotICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIHRvIGJlIG1hZGUgdmlzaWJsZS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gSW5kaWNhdG9yIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdHJlZSBzdHJ1Y3R1cmUgd2FzIGNoYW5nZWQgKGkuZS4gZXhwYW5kZWQgdG8gc2hvdyB0aGUgbm9kZSBpbiBxdWVzdGlvbikuCi0gICovCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIG1ha2VOb2RlVmlzaWJsZShOb2RlIG5vZGUpCi0gIHsKLSAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF8gPSBub2RlLmdldE5vZGVNYW5hZ2VyKCkubWFrZU5vZGVWaXNpYmxlKG5vZGUpOwotICAgIHJldHVybiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIH0KLQotICAvKioKLSAgICogTWFrZSBhIG5vZGUgdmlzaWJsZS4gQSBub2RlIGlzIHZpc2libGUgd2hlbiBhbGwgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXhwYW5kZWQuCi0gICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIHRvIGJlIG1hZGUgdmlzaWJsZS4KLSAgICogQHJldHVybiBib29sZWFuIEluZGljYXRvciBmb3Igd2hldGhlciBvciBub3QgdGhlIHRyZWUgc3RydWN0dXJlIHdhcyBjaGFuZ2VkIChpLmUuIGV4cGFuZGVkIHRvIHNob3cgdGhlIG5vZGUgaW4gcXVlc3Rpb24pLgotICAgKi8KLSAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRyZWVSZWZyZXNoTmVlZGVkKCkKLSAgIHsKLSAgICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gdHJ1ZTsKLSAgICAgCi0gICB9Ci0gIAotICAvKioKLSAgKiBTZWxlY3QgYSBub2RlIHdpdGggaWQgbm9kZUlkLgotICAqIEBwYXJhbSBpbnQgVGhlIGlkIG9mIHRoZSBub2RlIHRvIGJlIHNlbGVjdGVkLgotICAqLwotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRTZWxlY3RlZE5vZGVJZChpbnQgbm9kZUlkKQotICB7Ci0gICAgaWYgKG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpICE9IG5vZGVJZCkKLSAgICB7Ci0gICAgICByZXF1aXJlc05vZGVTZWxlY3Rpb25fID0gdHJ1ZTsKLSAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFNlbGVjdGVkVmlld0lkKGludCB2aWV3SWQpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpICE9IHZpZXdJZCkKLSAgICB7Ci0gICAgICByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fID0gdHJ1ZTsKLSAgICAgIHNlbGVjdGVkTm9kZS5zZXRWaWV3SWQodmlld0lkKTsKLSAgICB9Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHRyZWV2aWV3IHJlcXVpcmVzIHJlbG9hZGluZyBhcyBhIHJlc3VsdCBvZiB0aGlzIGFjdGlvbi4KLSAgLy8gUmVsb2FkaW5nIGlzIHJlcXVpcmVkIHdoZW4gYnJhbmNoZXMgYXJlIGFkZGVkL3JlbW92ZWQuCi0gIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBuZXcgbm9kZSBoYXMgYmVlbiBzZWxlY3RlZCBhcyBhIHJlc3VsdCBvZiB0aGUgYWN0aW9uLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc05vZGVTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTm9kZVNlbGVjdGlvbl87Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgaWYgYSBuZXcgdmlldyBlbGVtZW50IGlzIHNlbGVjdGVkLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgaWYgYW55IHN0YXR1cyBtZXNzYWdlcyBhcm9zZSBmcm9tIHRoaXMgYWN0aW9uLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1N0YXR1c1VwZGF0ZSgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZXNTdGF0dXNVcGRhdGVfOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL09wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMjIxMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL09wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24oKQotICB7Ci0gIH0KLQotICAvLyBjYWxlbmRhcl9icm93c2VyLmpzcD9zZXNzaW9uSWQ9Li4uJmNhbGVuZGFyVHlwZT0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLGludCBjYWxlbmRhclR5cGUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImNhbGVuZGFyX2Jyb3dzZXIuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2FsZW5kYXJUeXBlKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yRGF0ZShTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEUpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yRGF0ZVRpbWUoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JHWWVhck1vbnRoKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JHRGF5KFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR0RBWSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JHTW9udGhEYXkoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuV1NETEJyb3dzZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuV1NETEJyb3dzZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0Y2Q4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbldTRExCcm93c2VyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NETEJyb3dzZXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5XU0RMQnJvd3NlckFjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgd3NkbFR5cGUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGxfYnJvd3Nlci5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLldTRExfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKHdzZGxUeXBlKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2UoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yU2VydmljZUludGVyZmFjZShTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Qcm94eUxvYWRQYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUHJveHlMb2FkUGFnZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU5MzA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Qcm94eUxvYWRQYWdlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBQcm94eUxvYWRQYWdlQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIC8vIEdldCB0aGUgYWN0aW9uIGdpdmVuIGEgcmVsYXRpdmUgdGFyZ2V0UGFnZSBVUkwuIGUuZy4gImZvcm1zL0xvbmdMb2FkaW5nRm9ybS5qc3AiCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHRhcmdldFBhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhudWxsLHRhcmdldFBhZ2UpOwotICB9Ci0gIAotICAvLyBHZXQgdGhlIGFjdGlvbiBnaXZlbiBhIHNlc3Npb25JZCBhbmQgYSByZWxhdGl2ZSB0YXJnZXRQYWdlIFVSTC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyB0YXJnZXRQYWdlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmb3Jtcy9Qcm94eUxvYWRQYWdlLmpzcD8iKTsKLSAgICBpZiAoc2Vzc2lvbklkICE9IG51bGwpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKS5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVEFSR0VUX1BBR0UpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQYWdlKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUmVzaXplRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUmVzaXplRnJhbWVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzA1MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Jlc2l6ZUZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc2l6ZUZyYW1lc0FjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBmcmFtZU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBpZiAoZnJhbWVOYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUsZnJhbWVOYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHByb2Nlc3NPdGhlcnMocGFyc2VyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLSAgCi0gIHB1YmxpYyBSZXNpemVGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgICAgIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgICBib29sZWFuIHJlc3VsdCA9IHByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDlkMjJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQnJlYWRDcnVtYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFJldHJpZXZlSGlzdG9yeUFjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHJpdmF0ZSBCcmVhZENydW1iIGJyZWFkQ3J1bWJfOwotCi0gIHB1YmxpYyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgYnJlYWRDcnVtYl8gPSBudWxsOwotICB9Ci0KLSAgLy8gYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uanNwP2p1bXA9MSAgLSBmb3J3YXJkICAoQWN0aW9uSW5wdXRzLkpVTVBfRk9SV0FSRCkKLSAgLy8gYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uanNwP2p1bXA9LTEgLSBiYWNrd2FyZCAoQWN0aW9uSW5wdXRzLkpVTVBfQkFDSykKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQganVtcCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5KVU1QKS5hcHBlbmQoJz0nKS5hcHBlbmQoanVtcCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBqdW1wU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkpVTVApOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQoanVtcFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5KVU1QLGp1bXBTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBqdW1wID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSlVNUCkpOwotICAgIHN3aXRjaCAoanVtcCkKLSAgICB7Ci0gICAgICBjYXNlIEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQ6Ci0gICAgICAgIGJyZWFkQ3J1bWJfID0gY29udHJvbGxlcl8uZm9yd2FyZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLkpVTVBfQkFDSzoKLSAgICAgICAgYnJlYWRDcnVtYl8gPSBjb250cm9sbGVyXy5iYWNrKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgQnJlYWRDcnVtYiBnZXRCcmVhZENydW1iKCkKLSAgewotICAgIHJldHVybiBicmVhZENydW1iXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMzhlODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNlbGVjdE5vZGVBY3Rpb24gZXh0ZW5kcyBOb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlIHNlbGVjdGVkTm9kZV87Ci0KLSAgcHVibGljIFNlbGVjdE5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixub2RlTWFuYWdlcik7Ci0gICAgc2VsZWN0ZWROb2RlXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwZXJmb3JtQmFzZUFjdGlvbihpbnQgbm9kZUlkKQotICB7Ci0gICAgc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICBzZWxlY3RlZE5vZGVfID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybUV4dGVuZGVkQWN0aW9uKCkKLSAgewotCSAvL3RoZSBleHRlbmRlZCBjbGFzc2VzIGNhbiBpbnRlcmplY3QgaGVyZSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGlzIHZpc2libGUuCi0gICAgICBtYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSk7Ci0gICAgICBwZXJmb3JtQmFzZUFjdGlvbihub2RlSWQpOwotICAgICAgcGVyZm9ybUV4dGVuZGVkQWN0aW9uKCk7Ci0gICAgICBhZGRUb0hpc3RvcnkoZ2V0UGVyc3BlY3RpdmVJZCgpLGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldFN0YWxlQnJlYWRDcnVtYigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFNlbGVjdGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWROb2RlXzsKLSAgfQotICAKLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKX07Ci0gIH0KLQotICAvLyBTZWxlY3RpbmcgYSBub2RlIGNoYW5nZXMgdGhlIHRyZWV2aWV3IGNvbnRlbnQgYW5kIHRoZSBwcm9wZXJ0aWVzIGNvbnRhaW5lci4KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNmZmZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLkN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZWxlY3ROb2RlVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJvdGVjdGVkIFRvb2wgc2VsZWN0ZWRUb29sXzsKLQotICBwdWJsaWMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixub2RlTWFuYWdlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgc2VsZWN0ZWRUb29sXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgfQotCi0gIC8vIC4uLmpzcD9ub2RlSWQ9Li4uJnRvb2xJZD0uLi48JnZpZXdJZD0uLi4mdmlld1Rvb2xJZD0uLi4+PCZpc0hpc3Rvcnk9MT4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5wcm9jZXNzTGlua1BhcmFtZXRlcnMocmVxdWVzdCk7Ci0gICAgU3RyaW5nIHRvb2xJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIFN0cmluZyB2aWV3SWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBTdHJpbmcgdmlld1Rvb2xJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLQotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodG9vbElkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCx0b29sSWRTdHJpbmcpOwotCi0gICAgLy8gT3B0aW9uYWwgcHJvcGVydGllcwotICAgIHRyeQotICAgIHsKLSAgICAgIGludCB2aWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJZFN0cmluZyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCx2aWV3SWRTdHJpbmcpOwotICAgICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICB7Ci0gICAgICAgIEludGVnZXIucGFyc2VJbnQodmlld1Rvb2xJZFN0cmluZyk7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCx2aWV3VG9vbElkU3RyaW5nKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGlzIHZpc2libGUuCi0gICAgICBtYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSk7Ci0gICAgICBzZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOwotICAgICAgc2VsZWN0ZWROb2RlXyA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGludCB0b29sSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5UT09MSUQpKTsKLSAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgdG9vbE1hbmFnZXIuc2V0U2VsZWN0ZWRUb29sSWQodG9vbElkKTsKLSAgICAgIHNlbGVjdGVkVG9vbF8gPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIFN0cmluZyB2aWV3SWRTdHJpbmcgPSAoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgICAgaWYgKHZpZXdJZFN0cmluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnQgdmlld0lkID0gSW50ZWdlci5wYXJzZUludCh2aWV3SWRTdHJpbmcpOwotICAgICAgICBzZXRTZWxlY3RlZFZpZXdJZCh2aWV3SWQpOwotICAgICAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB2aWV3VG9vbElkU3RyaW5nID0gKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXVE9PTElEKSk7Ci0gICAgICAgICAgVmlld1Rvb2wgdmlld1Rvb2wgPSAoVmlld1Rvb2wpc2VsZWN0ZWRUb29sXzsKLSAgICAgICAgICBpZiAodmlld1Rvb2xJZFN0cmluZyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB2aWV3VG9vbElkID0gSW50ZWdlci5wYXJzZUludCh2aWV3VG9vbElkU3RyaW5nKTsKLSAgICAgICAgICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAodmlld1Rvb2xNYW5hZ2VyID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaXNIaXN0b3J5QWN0aW9uKCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2aWV3VG9vbE1hbmFnZXIgPSB2aWV3VG9vbC5jcmVhdGVUb29sTWFuYWdlcih2aWV3SWQpOwotICAgICAgICAgICAgICAgIHZpZXdUb29sSWQgPSB2aWV3VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzZXRTdGFsZUJyZWFkQ3J1bWIoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZpZXdUb29sTWFuYWdlci5zZXRTZWxlY3RlZFRvb2xJZCh2aWV3VG9vbElkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgc2V0U2VsZWN0ZWRWaWV3SWQoQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSAgICAgIGFkZFRvSGlzdG9yeShnZXRQZXJzcGVjdGl2ZUlkKCksZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc2V0U3RhbGVCcmVhZENydW1iKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2wgZ2V0U2VsZWN0ZWRWaWV3VG9vbCgpCi0gIHsKLSAgICBpZiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpICE9IG51bGwpCi0gICAgICByZXR1cm4gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sIGdldFNlbGVjdGVkVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRUb29sXzsKLSAgfQotCi0gIC8vIFNlbGVjdGluZyBhIG5vZGUgdG9vbCB1cGRhdGVzIHRoZSBwcm9wZXJ0aWVzIGNvbnRlbnQuIEFsc28sIGluIHRoZSBldmVudAotICAvLyBvZiBhIGhpc3Rvcnkgc3dpdGNoLCBub2RlcyBtYXkgbmVlZCB0byBiZSBzZWxlY3RlZCByZXN1bHRpbmcgaW4gY2hhbmdlcyB0bwotICAvLyBib3RoIHRoZSB0cmVldmlldyBjb250ZW50IGFuZCB0aGUgcHJvcGVydGllcyBjb250YWluZXIuIFRoZXNlIHJlcXVpcmVtZW50cyBhcmUKLSAgLy8gY292ZXJlZCB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzLgotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTc0ZmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBTaG93UGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBTaG93UGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTA8JmlzSGlzdG9yeT0xPiAtIFVEREkgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJKQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTE8JmlzSGlzdG9yeT0xPiAtIFdTSUwgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMKQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTI8JmlzSGlzdG9yeT0xPiAtIFdTREwgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMKQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTM8JmlzSGlzdG9yeT0xPiAtIEZhdm9yaXRlcyAoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUykKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbmV3UGVyc3BlY3RpdmUsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJhY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQobmV3UGVyc3BlY3RpdmUpOwotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQocGVyc3BlY3RpdmVTdHJpbmcpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSxwZXJzcGVjdGl2ZVN0cmluZyk7Ci0gICAgICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgICAgIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgICByZXN1bHQgPSBwcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgICAgcmVtb3ZlZFByb3BlcnRpZXNfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEgLSBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IHBlcnNwZWN0aXZlID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpKTsKLSAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUocGVyc3BlY3RpdmUpOwotICAgIGFkZFRvSGlzdG9yeShwZXJzcGVjdGl2ZSxnZXRBY3Rpb25MaW5rKHBlcnNwZWN0aXZlLHRydWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDViNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTm9kZUlkVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVG9nZ2xlTm9kZUFjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGUgdG9nZ2xlZE5vZGVfOwotICBwdWJsaWMgVG9nZ2xlTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLG5vZGVNYW5hZ2VyKTsKLSAgICB0b2dnbGVkTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gVG9nZ2xlIHRoZSBjdXJyZW50IG5vZGUgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGlmZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkCi0gIC8vIGlzIGEgcmVsYXRlZCBkZXNjZW5kYW50IG9mIGEgY29sbGFwc2VkIG5vZGUuCi0gIC8qKgotICAqIFRvZ2dsZSB0aGUgY3VycmVudCBub2RlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpZmYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAotICAqIG5vZGUgaXMgYSByZWxhdGVkIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBhbmQgdGhlIGN1cnJlbnQgbm9kZSBpcwotICAqIG5vdyBjb2xsYXBzZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBhY3Rpb24uCi0gICoKLSAgKiBAcGFyYW0gaW50IFRoZSBub2RlIElEIG9mIHRoZSBub2RlIGZvciB3aGljaCB0aGlzIGFjdGlvbiBhcHBsaWVzIHRvLgotICAqIEByZXR1cm4gYm9vbGVhbiBJbmRpY2F0b3Igb2Ygd2hldGhlciBvciBub3QgYSBzZWxlY3Rpb24gY2hhbmdlIHdhcyBuZWNlc3NhcnkuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBlcmZvcm1CYXNlQWN0aW9uKGludCBub2RlSWQpCi0gIHsKLSAgICB0b2dnbGVkTm9kZV8gPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIG5vZGVNYW5hZ2VyXy5zZXRGb2N1c2VkTm9kZUlkKG5vZGVJZCk7Ci0gICAgdG9nZ2xlZE5vZGVfLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKCF0b2dnbGVkTm9kZV8uaXNPcGVuKCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIXNlbGVjdGVkTm9kZS5pc1Zpc2libGUoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIGlmIChwZXJmb3JtQmFzZUFjdGlvbihub2RlSWQpKQotICAgICAgewotICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHRvZ2dsZSBsaW5rIGluIHRoZSBoaXN0b3J5LgotICAgICAgICBhZGRUb0hpc3RvcnkoZ2V0UGVyc3BlY3RpdmVJZCgpLGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkpOwotICAgICAgfQotICAgICAgLy8gRG8gbm90IHNhdmUgdGhlIHRvZ2dsZSBpbiBoaXN0b3J5LgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldFN0YWxlQnJlYWRDcnVtYigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFRvZ2dsZWROb2RlKCkKLSAgewotICAgIHJldHVybiB0b2dnbGVkTm9kZV87Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIHJldHVybiBuZXcgSVRyYW5zZm9ybWVyW10ge25ldyBOb2RlSWRUcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5NGY1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUVkaXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImFjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcCI7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1dTRExGaWxlTmFtZUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1dTRExGaWxlTmFtZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjI0ZjI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9XU0RMRmlsZU5hbWVIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbGVOYW1lSGVscGVyCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkZWZhdWx0XyA9ICJ0ZW1wLndzZGwiOwotICAKLSAgLyoqCi0gICogR2l2ZW4gYSB3c2RsIHBhdGggKGZpbGUsIFVSTCBldGMuKSwgZ3Vlc3MgYXQgdGhlIGZpbGUgbmFtZSBieSBsb29raW5nIGZvciB0aGUgLndzZGwgZXh0ZW5zaW9uIGF0IHRoZSBlbmQgb2YgdGhlCi0gICogcGF0aCBhbmQgdGhlIGZpbGUgdGhhdCBpdCBiZWxvbmdzIHRvLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcmV0dXJuIHRoZSBkZWZhdWx0IGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBwYXRoIChmaWxlLCBVUkwgZXRjLikgb2YgdGhpcyBXU0RMIGZpbGUuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIFdTREwgZmlsZSBuYW1lIGRldGVybWluZWQgYnkgdGhpcyByb3V0aW5lLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRXU0RMRmlsZU5hbWUoU3RyaW5nIHdzZGxQYXRobmFtZSkKLSAgewotICAgIGlmICh3c2RsUGF0aG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAod3NkbFBhdGhuYW1lLmVuZHNXaXRoKCIud3NkbCIpKQotICAgICAgewotICAgICAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IE1hdGgubWF4KHdzZGxQYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpLHdzZGxQYXRobmFtZS5sYXN0SW5kZXhPZigiXFwiKSk7Ci0gICAgICAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgICAgICByZXR1cm4gd3NkbFBhdGhuYW1lLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsd3NkbFBhdGhuYW1lLmxlbmd0aCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTM2OWIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImFjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIjsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9BY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL0FjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTYwY2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL0FjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQWN0aW9uSW5wdXRzCi17Ci0gIC8vIFVSTCBwYXJtIGZvciBhbGwgYWN0aW9ucyB3aGljaCBhcmUgaW4gdGhlIGhpc3RvcnkgbGlzdC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNISVNUT1JZID0gImlzSGlzdG9yeSI7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdHJlZSBub2RlIGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFSUQgPSAibm9kZUlkIjsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50IGZvciB0b29sIGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MSUQgPSAidG9vbElkIjsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50IGZvciB2aWV3IGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWSUVXSUQgPSAidmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVklFV0lEX0RFRkFVTFQgPSAtMTsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50IGZvciB2aWV3IHRvb2wgaWRlbnRpZmljYXRpb24uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZJRVdUT09MSUQgPSAidmlld1Rvb2xJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZJRVdUT09MSURfREVGQVVMVCA9IC0xOwotCi0gIC8vIFV0aWxpdHkgY29uc3RhbnRzIGZvciB0cmFuc3BvcnQgY2xhc3NlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU1BPUlRfQ0xBU1NfTkFNRSA9ICJvcmcudWRkaTRqLlRyYW5zcG9ydENsYXNzTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQVNQT1JUX0NMQVNTID0gIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiOwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFYSVNfVFJBTlNQT1JUX0NMQVNTID0gIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiOwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfVFJBTlNQT1JUX0NMQVNTID0gIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZVNPQVBUcmFuc3BvcnQiOwotCi0gIC8vIFRvZ2dsZU5vZGVBY3Rpb24gYW5kIGl0cyBkZXJpdmF0aXZlcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFTiA9ICJvcGVuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFTl9OT0RFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xPU0VfTk9ERSA9IDA7Ci0KLSAgLy8gU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBFUlNQRUNUSVZFID0gInBlcnNwZWN0aXZlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSU1BFQ1RJVkVfVURESSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUlNQRUNUSVZFX1dTSUwgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJTUEVDVElWRV9XU0RMID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSU1BFQ1RJVkVfRkFWT1JJVEVTID0gMzsKLQotICAvLyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlVNUCA9ICJqdW1wIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSlVNUF9GT1JXQVJEID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSlVNUF9CQUNLID0gLTE7Ci0KLSAgLy8gTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXRUJfU0VSVklDRV9XSVpBUkQgPSAid2ViU2VydmljZVdpemFyZCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQgPSAwOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUJfU0VSVklDRV9TS0VMRVRPTl9XSVpBUkQgPSAxOwotCi0gIC8vIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdPUktCRU5DSF9QUk9KRUNUX05BTUUgPSAid29ya2JlbmNoUHJvamVjdE5hbWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRfRklMRSA9ICJpbXBvcnRXU0RMIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JURURfRklMRV9OQU1FID0gImltcG9ydGVkRmlsZU5hbWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRfVE9fV1NJTCA9ICJpbXBvcnRUb1dTSUwiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX0ZJTEVfTkFNRSA9ICJXU0lMRmlsZU5hbWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRFRF9XU0RMX1VSTCA9ICJpbXBvcnRlZFdzZGxVcmwiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRfQUNUSU9OID0gImltcG9ydEFjdGlvbiI7Ci0KLSAgLy8gUHJveHlMb2FkQWN0aW9uCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBUkdFVF9QQUdFID0gInRhcmdldFBhZ2UiOwotCi0gIC8vIFNlc3Npb24gSUQgZm9yIHBvcCB1cHMgd2hvc2UgYnJvd3NlcnMgY2hvb3NlIHRvIGlnbm9yZSB0aGUgc2Vzc2lvbi4KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0VTU0lPTklEID0gInNJZCI7Ci0KLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1QgPSAicHJvamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZID0gImNhdGVnb3J5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9UWVBFID0gIndzZGxUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9UWVBFX1NFUlZJQ0UgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMID0gIndlYlByb2plY3RXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfRkFWT1JJVEVfV1NETF9VUkwgPSAiZmF2b3JpdGVXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV1NETF9VUkwgPSAid3NkbFVSTCI7Ci0KLSAgLy8gQ2FsZW5kYXIgQnJvd3NlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxFTkRBUl9UWVBFID0gImNhbGVuZGFyVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTEVOREFSX1RZUEVfREFURSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTEVOREFSX1RZUEVfREFURVRJTUUgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEggPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0dEQVkgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0dNT05USERBWSA9IDQ7Ci0KLSAgLy8gUmVzaXplRnJhbWVBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVfTkFNRSA9ICJmcmFtZU5hbWUiOwotCi0gIC8vIE90aGVyIEFjdGlvbnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1VSUkVOVF9UT09MX01BTkFHRVIgPSAiY3VycmVudFRvb2xNYW5hZ2VyIjsKLSAgCi0gIC8vIEFjdGlvbiBFbmdpbmUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0VOR0lORV9TQ0VOQVJJTyA9ICJhY3Rpb25FbmdpbmVTY2VuYXJpbyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9FTkdJTkVfTU9ERSA9ICJhY3Rpb25FbmdpbmVNb2RlIjsKLQotICAvLyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiA9ICJtdWx0aXBhcnRGb3JtRGF0YVBhcnNlciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9GcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9GcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlODUzODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGcmFtZU5hbWVzCi17Ci0gIC8vIHdzZXhwbG9yZXIuanNwCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdJTkRPV19OQU1FX1dTRVhQTE9SRVJfSlNQID0gIndzZXhwbG9yZXIuanNwIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEVSU1BFQ1RJVkVfV09SS0FSRUEgPSAicGVyc3BlY3RpdmVfd29ya2FyZWEiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQRVJTUEVDVElWRV9UT09MQkFSID0gInBlcnNwZWN0aXZlX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQRVJTUEVDVElWRV9DT05URU5UID0gInBlcnNwZWN0aXZlX2NvbnRlbnQiOwotICAKLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfVE9PTEJBUiA9ICJ3c2RsX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlQgPSAid3NkbF9jb250ZW50IjsKLSAgCi0gIC8vIENhbGVuZGFyIEJyb3dzZXIKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FMRU5EQVJfVE9PTEJBUiA9ICJjYWxlbmRhcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FMRU5EQVJfQ09OVEVOVCA9ICJjYWxlbmRhcl9jb250ZW50IjsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvTW9kZWxDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL01vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhODdkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgTW9kZWxDb25zdGFudHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0lEID0gInJlbGF0aW9uc2hpcElkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IgPSAiIyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9PV05FUiA9ICJvd25lciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9DSElMRFJFTiA9ICJjaGlsZHJlbiI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Ub29sVHlwZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL1Rvb2xUeXBlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjkyY2I0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL1Rvb2xUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFRvb2xUeXBlcwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRk9STSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBBQ1RJT04gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgVklFVyA9IDI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlOGMyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgTGlzdEVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLSAgcHJpdmF0ZSBPYmplY3Qgb2JqZWN0XzsKLSAgLy8gRm9yIHNlYXJjaCBwYXJhbWV0ZXJzOiBpbmZvIG9uIHRoZSBOb2RlIGFuZCBWaWV3VG9vbCBob2xkaW5nIHRoaXMgZWxlbWVudC4KLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0Tm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0VG9vbElkXzsKLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0Vmlld0lkXzsKLQotICBwdWJsaWMgTGlzdEVsZW1lbnQoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIG9iamVjdF8gPSBvYmplY3Q7Ci0gICAgdmlld0lkXyA9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVDsKLSAgICB0YXJnZXROb2RlSWRfID0gLTE7Ci0gICAgdGFyZ2V0VG9vbElkXyA9IC0xOwotICAgIHRhcmdldFZpZXdJZF8gPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldE9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgdmlld0lkXyA9IHZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkKQotICB7Ci0gICAgdGFyZ2V0Tm9kZUlkXyA9IG5vZGVJZDsKLSAgICB0YXJnZXRUb29sSWRfID0gdG9vbElkOwotICAgIHRhcmdldFZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRhcmdldE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0Tm9kZUlkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGFyZ2V0VG9vbElkKCkKLSAgewotICAgIHJldHVybiB0YXJnZXRUb29sSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUYXJnZXRWaWV3SWQoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldFZpZXdJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXRPYmplY3QoKS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhhNzhhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgTGlzdE1hbmFnZXIKLXsKLSAgcHJpdmF0ZSBpbnQgbmV4dFZpZXdJZF87Ci0gIHByaXZhdGUgVmVjdG9yIGl0ZW1zTGlzdF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGl0ZW1zVGFibGVfOwotCi0gIHB1YmxpYyBMaXN0TWFuYWdlcigpCi0gIHsKLSAgICBuZXh0Vmlld0lkXyA9IDA7Ci0gICAgaXRlbXNMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpdGVtc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCB1cGRhdGVNYW5hZ2VyKExpc3RFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpdGVtc1RhYmxlXy5wdXQoU3RyaW5nLnZhbHVlT2YobmV4dFZpZXdJZF8pLGVsZW1lbnQpOwotICAgIGVsZW1lbnQuc2V0Vmlld0lkKG5leHRWaWV3SWRfKTsKLSAgICBuZXh0Vmlld0lkXysrOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkKExpc3RFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpdGVtc0xpc3RfLmFkZEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgdXBkYXRlTWFuYWdlcihlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZFdpdGhDdXJyZW50Vmlld0lkKExpc3RFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpdGVtc0xpc3RfLmFkZEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaXRlbXNUYWJsZV8ucHV0KFN0cmluZy52YWx1ZU9mKGVsZW1lbnQuZ2V0Vmlld0lkKCkpLGVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpc3RFbGVtZW50IGVsZW1lbnRBdChpbnQgaW5kZXgpCi0gIHsKLSAgICByZXR1cm4gKExpc3RFbGVtZW50KWl0ZW1zTGlzdF8uZWxlbWVudEF0KGluZGV4KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMaXN0RWxlbWVudCBnZXRFbGVtZW50V2l0aFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgcmV0dXJuIChMaXN0RWxlbWVudClpdGVtc1RhYmxlXy5nZXQoU3RyaW5nLnZhbHVlT2Yodmlld0lkKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVFbGVtZW50V2l0aFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgaXRlbXNUYWJsZV8ucmVtb3ZlKFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1zTGlzdF8uc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IGVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSA9PSB2aWV3SWQpCi0gICAgICB7Ci0gICAgICAgIGl0ZW1zTGlzdF8ucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVFbGVtZW50QXQoaW50IGluZGV4KQotICB7Ci0gICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZWxlbWVudEF0KGluZGV4KTsKLSAgICBpdGVtc0xpc3RfLnJlbW92ZUVsZW1lbnRBdChpbmRleCk7Ci0gICAgaXRlbXNUYWJsZV8ucmVtb3ZlKFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFZpZXdJZCgpKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbnNlcnRFbGVtZW50QXQoTGlzdEVsZW1lbnQgZWxlbWVudCxpbnQgaW5kZXgpCi0gIHsKLSAgICBpdGVtc0xpc3RfLmluc2VydEVsZW1lbnRBdChlbGVtZW50LGluZGV4KTsKLSAgICB1cGRhdGVNYW5hZ2VyKGVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEVudW1lcmF0aW9uIGdldExpc3RFbGVtZW50cygpCi0gIHsKLSAgICByZXR1cm4gaXRlbXNMaXN0Xy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgaXRlbXNMaXN0Xy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIGl0ZW1zVGFibGVfLmNsZWFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTGlzdE1hbmFnZXIgY29weShMaXN0TWFuYWdlciBuZXdMaXN0TWFuYWdlcikKLSAgewotICAgIG5ld0xpc3RNYW5hZ2VyLmNsZWFyKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8aXRlbXNMaXN0Xy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWVsZW1lbnRBdChpKTsKLSAgICAgIExpc3RFbGVtZW50IG5ld0xpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGxpc3RFbGVtZW50LmdldE9iamVjdCgpKTsKLSAgICAgIG5ld0xpc3RFbGVtZW50LnNldFZpZXdJZChsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSk7Ci0gICAgICBuZXdMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8obGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCksbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCksbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkpOwotICAgICAgbmV3TGlzdE1hbmFnZXIuYWRkV2l0aEN1cnJlbnRWaWV3SWQobmV3TGlzdEVsZW1lbnQpOwotICAgIH0KLSAgICBuZXdMaXN0TWFuYWdlci5zZXROZXh0Vmlld0lkKG5leHRWaWV3SWRfKTsKLSAgICByZXR1cm4gbmV3TGlzdE1hbmFnZXI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXROZXh0Vmlld0lkKGludCBuZXh0Vmlld0lkKQotICB7Ci0gICAgbmV4dFZpZXdJZF8gPSBuZXh0Vmlld0lkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXROZXh0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiBuZXh0Vmlld0lkXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvVHJlZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL1RyZWVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDA5ODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvVHJlZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVHJlZUVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5XzsKLQotICBwdWJsaWMgVHJlZUVsZW1lbnQoU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBrZXlfID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEtleShTdHJpbmcga2V5KQotICB7Ci0gICAga2V5XyA9IGtleTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkKLSAgewotICAgIHJldHVybiBrZXlfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoa2V5XyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBrZXlfLmVxdWFscyhlbGVtZW50LmdldEtleSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvQWN0aW9uRGF0YVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvQWN0aW9uRGF0YVBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FmMmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkRhdGFQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmNvbnN0YW50cy5BY3Rpb25EYXRhQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5BY3Rpb25EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlRyYW5zYWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIEFjdGlvbkRhdGFQYXJzZXIKLXsKLSAgcHJpdmF0ZSBEb2N1bWVudCBkb2M7Ci0KLSAgcHVibGljIFNjZW5hcmlvRGVzY3JpcHRvciBwYXJzZVNjZW5hcmlvKEVsZW1lbnQgZSkKLSAgewotICAgIFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBuZXcgU2NlbmFyaW9EZXNjcmlwdG9yKCk7Ci0gICAgTm9kZUxpc3QgdHJhbnNhY3Rpb25zID0gZS5nZXRFbGVtZW50c0J5VGFnTmFtZShBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVFJBTlNBQ1RJT04pOwotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSBuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW3RyYW5zYWN0aW9ucy5nZXRMZW5ndGgoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXSA9IHBhcnNlVHJhbnNhY3Rpb24oKEVsZW1lbnQpIHRyYW5zYWN0aW9ucy5pdGVtKGkpKTsKLSAgICBzY2VuYXJpb0Rlc2NyaXB0b3Iuc2V0VHJhbnNhY3Rpb25EZXNjcmlwdG9ycyh0cmFuc2FjdGlvbkRlc2NyaXB0b3JzKTsKLSAgICByZXR1cm4gc2NlbmFyaW9EZXNjcmlwdG9yOwotICB9Ci0KLSAgcHVibGljIFRyYW5zYWN0aW9uRGVzY3JpcHRvciBwYXJzZVRyYW5zYWN0aW9uKEVsZW1lbnQgZSkKLSAgewotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IgPSBuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yKCk7Ci0gICAgTm9kZUxpc3QgYWN0aW9ucyA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX0FDVElPTik7Ci0gICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gbmV3IEFjdGlvbkRlc2NyaXB0b3JbYWN0aW9ucy5nZXRMZW5ndGgoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3JzW2ldID0gcGFyc2VBY3Rpb24oKEVsZW1lbnQpIGFjdGlvbnMuaXRlbShpKSk7Ci0gICAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yLnNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JzKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb25EZXNjcmlwdG9yOwotICB9Ci0KLSAgcHVibGljIEFjdGlvbkRlc2NyaXB0b3IgcGFyc2VBY3Rpb24oRWxlbWVudCBlKQotICB7Ci0gICAgQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yID0gbmV3IEFjdGlvbkRlc2NyaXB0b3IoKTsKLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldElkKGUuZ2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9JRCkpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0QXR0ZW1wdHMoSW50ZWdlci5wYXJzZUludChlLmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfQVRURU1QVFMpKSk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9yLnNldEF0dGVtcHRzKDEpOwotICAgIH0KLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldFN0YXR1c0lkKGUuZ2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9TVEFUVVNfSUQpKTsKLSAgICBIYXNodGFibGUgcHJvcGVydGllc1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIE5vZGVMaXN0IHByb3BlcnRpZXMgPSBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9QUk9QRVJUWSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBwcm9wZXJ0eSA9IChFbGVtZW50KSBwcm9wZXJ0aWVzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5LmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgICBOb2RlTGlzdCB2YWx1ZUxpc3QgPSBwcm9wZXJ0eS5nZXRFbGVtZW50c0J5VGFnTmFtZShBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVkFMVUUpOwotICAgICAgaWYgKHZhbHVlTGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IG5ldyBTdHJpbmdbdmFsdWVMaXN0LmdldExlbmd0aCgpXTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2YWx1ZXMubGVuZ3RoOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IHZhbHVlID0gKEVsZW1lbnQpIHZhbHVlTGlzdC5pdGVtKGopOwotICAgICAgICAgIE5vZGUgdGV4dE5vZGUgPSB2YWx1ZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAgICAgdmFsdWVzW2pdID0gKHRleHROb2RlICE9IG51bGwpID8gdGV4dE5vZGUuZ2V0Tm9kZVZhbHVlKCkudHJpbSgpIDogIiI7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydGllc1RhYmxlLnB1dChuYW1lLCB2YWx1ZXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBOb2RlIHRleHROb2RlID0gKChFbGVtZW50KSB2YWx1ZUxpc3QuaXRlbSgwKSkuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICBwcm9wZXJ0aWVzVGFibGUucHV0KG5hbWUsICh0ZXh0Tm9kZSAhPSBudWxsKSA/IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpLnRyaW0oKSA6ICIiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXNUYWJsZSk7Ci0gICAgTm9kZUxpc3Qgc3RhdHVzTGlzdCA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1NUQVRVUyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0dXNMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBzdGF0dXMgPSAoRWxlbWVudClzdGF0dXNMaXN0Lml0ZW0oaSk7Ci0gICAgICBDREFUQVNlY3Rpb24gY0RhdGEgPSAoQ0RBVEFTZWN0aW9uKXN0YXR1cy5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9yLmFkZFN0YXR1cyhjRGF0YS5nZXREYXRhKCkpOwotICAgIH0KLSAgICByZXR1cm4gYWN0aW9uRGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IHRvRWxlbWVudChTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBzY2VuYXJpb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9TQ0VOQVJJTyk7Ci0gICAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gc2NlbmFyaW9EZXNjcmlwdG9yLmdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCB0cmFuc2FjdGlvbkVsZW1lbnQgPSB0b0VsZW1lbnQodHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXSk7Ci0gICAgICAgIGlmICh0cmFuc2FjdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICBzY2VuYXJpb0VsZW1lbnQuYXBwZW5kQ2hpbGQodHJhbnNhY3Rpb25FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzY2VuYXJpb0VsZW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChET01FeGNlcHRpb24gZG9tZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCB0b0VsZW1lbnQoVHJhbnNhY3Rpb25EZXNjcmlwdG9yIHRyYW5zYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgdHJhbnNhY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVFJBTlNBQ1RJT04pOwotICAgICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gdHJhbnNhY3Rpb25EZXNjcmlwdG9yLmdldEFjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBFbGVtZW50IGFjdGlvbkVsZW1lbnQgPSB0b0VsZW1lbnQoYWN0aW9uRGVzY3JpcHRvcnNbaV0pOwotICAgICAgICBpZiAoYWN0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHRyYW5zYWN0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChhY3Rpb25FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cmFuc2FjdGlvbkVsZW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChET01FeGNlcHRpb24gZG9tZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCB0b0VsZW1lbnQoQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBhY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfQUNUSU9OKTsKLSAgICAgIGFjdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9JRCwgYWN0aW9uRGVzY3JpcHRvci5nZXRJZCgpKTsKLSAgICAgIGFjdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9BVFRFTVBUUywgU3RyaW5nLnZhbHVlT2YoYWN0aW9uRGVzY3JpcHRvci5nZXRBdHRlbXB0cygpKSk7Ci0gICAgICBTdHJpbmcgc3RhdHVzSWQgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFN0YXR1c0lkKCk7Ci0gICAgICBpZiAoc3RhdHVzSWQgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoQWN0aW9uRGF0YUNvbnN0YW50cy5BVFRSX1NUQVRVU19JRCwgc3RhdHVzSWQpOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFByb3BlcnRpZXMoKTsKLSAgICAgIGlmIChwcm9wZXJ0aWVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3Qga2V5ID0gaXQubmV4dCgpOwotICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KGtleSk7Ci0gICAgICAgICAgT2JqZWN0W10gdmFsdWVzOwotICAgICAgICAgIGlmICh2YWx1ZS5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHZhbHVlcyA9IChPYmplY3RbXSl2YWx1ZTsKLSAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpc3QpCi0gICAgICAgICAgICB2YWx1ZXMgPSAoKExpc3QpdmFsdWUpLnRvQXJyYXkoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZXMgPSBuZXcgT2JqZWN0W10ge3ZhbHVlfTsKLSAgICAgICAgICBib29sZWFuIGlzQWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICBFbGVtZW50IHByb3BlcnR5RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1BST1BFUlRZKTsKLSAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9OQU1FLCBrZXkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCB2YWx1ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9WQUxVRSk7Ci0gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZXNbaV0udG9TdHJpbmcoKSkpOwotICAgICAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVFbGVtZW50KTsKLSAgICAgICAgICAgICAgaXNBZGRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpc0FkZGVkKQotICAgICAgICAgICAgYWN0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChwcm9wZXJ0eUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBMaXN0IHN0YXR1cyA9IGFjdGlvbkRlc2NyaXB0b3IuZ2V0U3RhdHVzKCk7Ci0gICAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzdGF0dXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEVsZW1lbnQgc3RhdHVzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1NUQVRVUyk7Ci0gICAgICAgICAgQ0RBVEFTZWN0aW9uIGNEYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKGl0Lm5leHQoKS50b1N0cmluZygpKTsKLSAgICAgICAgICBzdGF0dXNFbGVtZW50LmFwcGVuZENoaWxkKGNEYXRhKTsKLSAgICAgICAgICBhY3Rpb25FbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1c0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gYWN0aW9uRWxlbWVudDsKLSAgICB9Ci0gICAgY2F0Y2ggKERPTUV4Y2VwdGlvbiBkb21lKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgZG9jID0gYnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgICAgfQotICAgICAgcmV0dXJuIGRvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKEZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZmNlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25FbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDJlMmRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmNvbnN0YW50cy5BY3Rpb25EYXRhQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5BY3Rpb25EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlRyYW5zYWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIEFjdGlvbkVuZ2luZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9ESVNBQkxFRCA9IDB4MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfU1RPUCA9IDB4MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfUkVDT1JEID0gMHgyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9QTEFZID0gMHgzOwotCi0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyOwotICBwcml2YXRlIGJ5dGUgbW9kZTsKLSAgcHJpdmF0ZSBWZWN0b3IgYWN0aW9uRGVzY3JpcHRvcnM7Ci0KLSAgcHVibGljIEFjdGlvbkVuZ2luZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIG1vZGUgPSBNT0RFX0RJU0FCTEVEOwotICAgIGFjdGlvbkRlc2NyaXB0b3JzID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhlY3V0ZVNjZW5hcmlvKFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IpCi0gIHsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gc2NlbmFyaW9EZXNjcmlwdG9yLmdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgICBleGVjdXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25EZXNjcmlwdG9yIHRyYW5zYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvcnMgPSB0cmFuc2FjdGlvbkRlc2NyaXB0b3IuZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChyZXN1bHQpCi0gICAgICB7Ci0gICAgICAgIGlmICghZXhlY3V0ZUFjdGlvbihhY3Rpb25EZXNjcmlwdG9yc1tpXSkpCi0gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGFjdGlvbkRlc2NyaXB0b3JzW2ldLnNldFN0YXR1c0lkKEFjdGlvbkRhdGFDb25zdGFudHMuVkFMVUVfU1RBVFVTX0lEX1VOQVRURU1QVEVEKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVBY3Rpb24oQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yKQotICB7Ci0gICAgaW50IGF0dGVtcHRzID0gYWN0aW9uRGVzY3JpcHRvci5nZXRBdHRlbXB0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgQ2xhc3MgY2xhc3NBY3Rpb24gPSBDbGFzcy5mb3JOYW1lKGFjdGlvbkRlc2NyaXB0b3IuZ2V0SWQoKSk7Ci0gICAgICAgIGlmIChBY3Rpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjbGFzc0FjdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICBBY3Rpb24gYWN0aW9uID0gKEFjdGlvbikgbmV3SW5zdGFuY2UoY2xhc3NBY3Rpb24pOwotICAgICAgICAgIGlmIChhY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IGFjdGlvbkRlc2NyaXB0b3IuZ2V0UHJvcGVydGllcygpOwotICAgICAgICAgICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gYWN0aW9uLmdldFRyYW5zZm9ybWVycygpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0cmFuc2Zvcm1lcnMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0cmFuc2Zvcm1lcnNbal0uZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgICAgICAgICBhY3Rpb24uc2V0UHJvcGVydHlUYWJsZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgLy8gVE9ETyBhY3Rpb25EZXNjcmlwdG9yLmFkZFN0YXR1cyhhY3Rpb24uZ2V0U3RhdHVzKCkpOwotICAgICAgICAgICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYWN0aW9uRGVzY3JpcHRvci5zZXRTdGF0dXNJZChBY3Rpb25EYXRhQ29uc3RhbnRzLlZBTFVFX1NUQVRVU19JRF9QQVNTRUQpOwotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oYWN0aW9uRGVzY3JpcHRvci5nZXRJZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY25mZSkKLSAgICAgIHsKLSAgICAgICAgY25mZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICBjbmZlLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIoc3cpKTsKLSAgICAgICAgYWN0aW9uRGVzY3JpcHRvci5hZGRTdGF0dXMoc3cuZ2V0QnVmZmVyKCkudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgdC5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHN3KSk7Ci0gICAgICAgIGFjdGlvbkRlc2NyaXB0b3IuYWRkU3RhdHVzKHN3LmdldEJ1ZmZlcigpLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0KLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldFN0YXR1c0lkKEFjdGlvbkRhdGFDb25zdGFudHMuVkFMVUVfU1RBVFVTX0lEX0ZBSUxFRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBTY2VuYXJpb0Rlc2NyaXB0b3IgbmV3U2NlbmFyaW9EZXNjcmlwdG9yKCkKLSAgewotICAgIHJldHVybiBuZXcgU2NlbmFyaW9EZXNjcmlwdG9yKCk7Ci0gIH0KLQotICBwcml2YXRlIFRyYW5zYWN0aW9uRGVzY3JpcHRvciBuZXdUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKTsKLSAgfQotCi0gIHByaXZhdGUgQWN0aW9uRGVzY3JpcHRvciBuZXdBY3Rpb25EZXNjcmlwdG9yKEFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBBY3Rpb25EZXNjcmlwdG9yIGFjdGlvbkRlc2NyaXB0b3IgPSBuZXcgQWN0aW9uRGVzY3JpcHRvcigpOwotICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0SWQoYWN0aW9uLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKSk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gYWN0aW9uLmdldFRyYW5zZm9ybWVycygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNmb3JtZXJzLmxlbmd0aDsgaSsrKQotICAgICAgcHJvcGVydGllcyA9IHRyYW5zZm9ybWVyc1tpXS5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOwotICAgIHJldHVybiBhY3Rpb25EZXNjcmlwdG9yOwotICB9Ci0KLSAgcHJpdmF0ZSBPYmplY3QgbmV3SW5zdGFuY2UoQ2xhc3MgYykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIGluc3RhbnRpYXRlcyB0aGUgYWN0aW9uIHVzaW5nIHRoZSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGluIGEKLSAgICAgIC8vIGNvbnRyb2xsZXIgb2JqZWN0Ci0gICAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGMuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzW117Q29udHJvbGxlci5jbGFzc30pOwotICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXXtjb250cm9sbGVyfSk7Ci0gICAgfQotICAgIGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gbnNtZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGllKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICB9Ci0gICAgT2JqZWN0IGluc3RhbmNlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBpbnN0YW50aWF0ZXMgdGhlIGFjdGlvbiB1c2luZyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBjLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1swXSk7Ci0gICAgICBpbnN0YW5jZSA9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbMF0pOwotICAgICAgTWV0aG9kIG1ldGhvZCA9IGMuZ2V0TWV0aG9kKCJzZXRDb250cm9sbGVyIiwgbmV3IENsYXNzW117Q29udHJvbGxlci5jbGFzc30pOwotICAgICAgbWV0aG9kLmludm9rZShpbnN0YW5jZSwgbmV3IE9iamVjdFtde2NvbnRyb2xsZXJ9KTsKLSAgICB9Ci0gICAgY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBuc21lKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gaWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgcHVibGljIGJ5dGUgZ2V0TW9kZSgpCi0gIHsKLSAgICByZXR1cm4gbW9kZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kZShieXRlIG1vZGUpCi0gIHsKLSAgICB0aGlzLm1vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IE1PREVfUkVDT1JEKQotICAgIHsKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3JzID0gbmV3IFZlY3RvcigpOwotICAgICAgU2hvd1BlcnNwZWN0aXZlQWN0aW9uIHNob3dQZXJzcGVjdGl2ZUFjdGlvbiA9IG5ldyBTaG93UGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBzaG93UGVyc3BlY3RpdmVBY3Rpb24uYWRkUHJvcGVydHkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFLCBTdHJpbmcudmFsdWVPZihjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBlcnNwZWN0aXZlSWQoKSkpOwotICAgICAgYWN0aW9uRGVzY3JpcHRvcnMuYWRkKG5ld0FjdGlvbkRlc2NyaXB0b3Ioc2hvd1BlcnNwZWN0aXZlQWN0aW9uKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlQWN0aW9uKEFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBpZiAobW9kZSA9PSBNT0RFX1JFQ09SRCkKLSAgICB7Ci0gICAgICBBY3Rpb25EZXNjcmlwdG9yIGFjdGlvbkRlc2NyaXB0b3IgPSBuZXdBY3Rpb25EZXNjcmlwdG9yKGFjdGlvbik7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9ycy5hZGQoYWN0aW9uRGVzY3JpcHRvcik7Ci0gICAgfQotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTY2VuYXJpb0Rlc2NyaXB0b3IgZ2V0U2NlbmFyaW8oKQotICB7Ci0gICAgU2NlbmFyaW9EZXNjcmlwdG9yIHNjZW5hcmlvRGVzY3JpcHRvciA9IG5ld1NjZW5hcmlvRGVzY3JpcHRvcigpOwotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IgPSBuZXdUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKTsKLSAgICBBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvckFycmF5ID0gKEFjdGlvbkRlc2NyaXB0b3JbXSlhY3Rpb25EZXNjcmlwdG9ycy50b0FycmF5KG5ldyBBY3Rpb25EZXNjcmlwdG9yWzBdKTsKLSAgICB0cmFuc2FjdGlvbkRlc2NyaXB0b3Iuc2V0QWN0aW9uRGVzY3JpcHRvcnMoYWN0aW9uRGVzY3JpcHRvckFycmF5KTsKLSAgICBzY2VuYXJpb0Rlc2NyaXB0b3Iuc2V0VHJhbnNhY3Rpb25EZXNjcmlwdG9ycyhuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10ge3RyYW5zYWN0aW9uRGVzY3JpcHRvcn0pOwotICAgIHJldHVybiBzY2VuYXJpb0Rlc2NyaXB0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2NvbnN0YW50cy9BY3Rpb25EYXRhQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9jb25zdGFudHMvQWN0aW9uRGF0YUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjcxNmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2NvbnN0YW50cy9BY3Rpb25EYXRhQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EYXRhQ29uc3RhbnRzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSUQgPSAiaWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQVRURU1QVFMgPSAiYXR0ZW1wdHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NUQVRVU19JRCA9ICJzdGF0dXNJZCI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX1NDRU5BUklPID0gInNjZW5hcmlvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9UUkFOU0FDVElPTiA9ICJ0cmFuc2FjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfQUNUSU9OID0gImFjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfUFJPUEVSVFkgPSAicHJvcGVydHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX1ZBTFVFID0gInZhbHVlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9TVEFUVVMgPSAic3RhdHVzIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1NUQVRVU19JRF9VTkFUVEVNUFRFRCA9ICJ1bmF0dGVtcHRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1NUQVRVU19JRF9QQVNTRUQgPSAicGFzc2VkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfU1RBVFVTX0lEX0ZBSUxFRCA9ICJmYWlsZWQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9BY3Rpb25EZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL0FjdGlvbkRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhNjAwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL0FjdGlvbkRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIGlkOwotICBwcml2YXRlIEhhc2h0YWJsZSBwcm9wZXJ0aWVzOwotICBwcml2YXRlIGludCBhdHRlbXB0czsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzSWQ7Ci0gIHByaXZhdGUgTGlzdCBzdGF0dXNMaXN0OwotICAKLSAgcHVibGljIEFjdGlvbkRlc2NyaXB0b3IoKQotICB7Ci0gICAgYXR0ZW1wdHMgPSAxOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0UHJvcGVydGllcygpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydGllcyhIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0QXR0ZW1wdHMoKQotICB7Ci0gIAlyZXR1cm4gYXR0ZW1wdHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEF0dGVtcHRzKGludCBhdHRlbXB0cykKLSAgewotICAJdGhpcy5hdHRlbXB0cyA9IGF0dGVtcHRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0lkKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNJZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzSWQoU3RyaW5nIHN0YXR1c0lkKQotICB7Ci0gICAgdGhpcy5zdGF0dXNJZCA9IHN0YXR1c0lkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRTdGF0dXMoT2JqZWN0IHN0YXR1cykKLSAgewotICAgIGlmIChzdGF0dXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoc3RhdHVzTGlzdCA9PSBudWxsKQotICAgICAgICBzdGF0dXNMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgc3RhdHVzTGlzdC5hZGQoc3RhdHVzKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZVN0YXR1cyhPYmplY3Qgc3RhdHVzKQotICB7Ci0gICAgaWYgKHN0YXR1cyAhPSBudWxsICYmIHN0YXR1c0xpc3QgIT0gbnVsbCkKLSAgICAgIHJldHVybiBzdGF0dXNMaXN0LnJlbW92ZShzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNMaXN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1NjZW5hcmlvRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9TY2VuYXJpb0Rlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlOTJhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1NjZW5hcmlvRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YTsKLQotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVzY3JpcHRvcgotewotICBwcml2YXRlIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM7Ci0KLSAgcHVibGljIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIGdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKQotICB7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycykKLSAgewotICAgIHRoaXMudHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvVHJhbnNhY3Rpb25EZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1RyYW5zYWN0aW9uRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTE3YTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvVHJhbnNhY3Rpb25EZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhOwotCi1wdWJsaWMgY2xhc3MgVHJhbnNhY3Rpb25EZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzOwotCi0gIHB1YmxpYyBBY3Rpb25EZXNjcmlwdG9yW10gZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EZXNjcmlwdG9ycyhBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvcnMpCi0gIHsKLSAgICB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzID0gYWN0aW9uRGVzY3JpcHRvcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0N1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0N1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2NmU2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcga2V5OwotCi0gIHB1YmxpYyBDdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMoY29udHJvbGxlciwgQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gIH0KLQotICBwdWJsaWMgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBrZXkpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHRoaXMua2V5ID0ga2V5OwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotICAKLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE5vZGUgY3Vyck5vZGUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKGN1cnJOb2RlICE9IG51bGwpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChrZXksIFN0cmluZy52YWx1ZU9mKGN1cnJOb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0lUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvSVRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTZkMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvSVRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKTsKLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NYXNzTm9kZUlkVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL01hc3NOb2RlSWRUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjc0ZTgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL01hc3NOb2RlSWRUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBNYXNzTm9kZUlkVHJhbnNmb3JtZXIgZXh0ZW5kcyBOb2RlSWRUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgU3RyaW5nIG1hc3NOb2RlSWRLZXk7Ci0KLSAgcHVibGljIE1hc3NOb2RlSWRUcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBtYXNzTm9kZUlkS2V5KQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgdGhpcy5tYXNzTm9kZUlkS2V5ID0gbWFzc05vZGVJZEtleTsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1hc3NOb2RlSWRLZXkpKQotICAgICAgcmV0dXJuIHN1cGVyLm5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgICBPYmplY3Qgb3JpZ05vZGVJZCA9IHByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZ1tdIG1hc3NOb2RlSWRzID0gZ2V0VmFsdWVBc1N0cmluZ0FycmF5KHByb3BlcnRpZXMsIG1hc3NOb2RlSWRLZXkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFzc05vZGVJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbWFzc05vZGVJZHNbaV0pOwotICAgICAgcHJvcGVydGllcyA9IHN1cGVyLm5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgICAgIFN0cmluZ1tdIHJlbHMgPSBnZXRWYWx1ZUFzU3RyaW5nQXJyYXkocHJvcGVydGllcywgTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICAgIGlmIChyZWxzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICAgICAgc2IuYXBwZW5kKE1vZGVsQ29uc3RhbnRzLlJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SKTsKLSAgICAgICAgc2IuYXBwZW5kKG1hc3NOb2RlSWRzW2ldKTsKLSAgICAgICAgcHJvcGVydGllcy5wdXQoc2IudG9TdHJpbmcoKSwgcmVscyk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgIHByb3BlcnRpZXMucmVtb3ZlKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgfQotICAgIGlmIChvcmlnTm9kZUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBvcmlnTm9kZUlkKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBpZiAoIXByb3BlcnRpZXMuY29udGFpbnNLZXkobWFzc05vZGVJZEtleSkpCi0gICAgICByZXR1cm4gc3VwZXIuZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgVmVjdG9yIG1hc3NOb2RlSWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgT2JqZWN0IG9yaWdOb2RlSWQgPSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBwcm9wZXJ0aWVzLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmdbXSBtYXNzTm9kZUlkcyA9IGdldFZhbHVlQXNTdHJpbmdBcnJheShwcm9wZXJ0aWVzLCBtYXNzTm9kZUlkS2V5KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hc3NOb2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICAgIHNiLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICBzYi5hcHBlbmQobWFzc05vZGVJZHNbaV0pOwotICAgICAgT2JqZWN0IHJlbHMgPSBwcm9wZXJ0aWVzLmdldChzYi50b1N0cmluZygpKTsKLSAgICAgIGlmIChyZWxzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMucHV0KE1vZGVsQ29uc3RhbnRzLlJFTF9JRCwgcmVscyk7Ci0gICAgICAgIHByb3BlcnRpZXMgPSBzdXBlci5kZU5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgT2JqZWN0IG5vZGVJZCA9IHByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBpZiAobm9kZUlkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXNzTm9kZUlkVmVjdG9yLmFkZChub2RlSWQpOwotICAgICAgICAgIHByb3BlcnRpZXMucmVtb3ZlKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnRpZXMucmVtb3ZlKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChvcmlnTm9kZUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBvcmlnTm9kZUlkKTsKLSAgICBpbnQgc2l6ZSA9IG1hc3NOb2RlSWRWZWN0b3Iuc2l6ZSgpOwotICAgIGlmIChzaXplID09IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChtYXNzTm9kZUlkS2V5LCBtYXNzTm9kZUlkVmVjdG9yLmdldCgwKSk7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChtYXNzTm9kZUlkS2V5LCBtYXNzTm9kZUlkVmVjdG9yLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIGVsc2UKLSAgICAgIHByb3BlcnRpZXMucmVtb3ZlKG1hc3NOb2RlSWRLZXkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRWYWx1ZUFzU3RyaW5nQXJyYXkoSGFzaHRhYmxlIHByb3BlcnRpZXMsIFN0cmluZyBrZXkpCi0gIHsKLSAgICBPYmplY3QgdmFsdWVzID0gcHJvcGVydGllcy5nZXQoa2V5KTsKLSAgICBpZiAodmFsdWVzID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICBlbHNlIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmdbXSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pdmFsdWVzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10ge3ZhbHVlcy50b1N0cmluZygpfTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzJjMTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL011bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKXByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUik7Ci0gICAgU3RyaW5nW10ga2V5czsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBrZXlzID0gcGFyc2VyLmdldFBhcmFtZXRlck5hbWVzKCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBrZXlzID0gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBuZXdLZXkgPSBuZXcgU3RyaW5nQnVmZmVyKEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUik7Ci0gICAgICBuZXdLZXkuYXBwZW5kKGtleXNbaV0pOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMucHV0KG5ld0tleS50b1N0cmluZygpLCBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGtleXNbaV0pKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gcHJvcGVydGllcy5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICB7Ci0gICAgICAgIGlmICgoKFN0cmluZylrZXkpLnN0YXJ0c1dpdGgoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyByZWFsS2V5ID0gKChTdHJpbmcpa2V5KS5zdWJzdHJpbmcoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSLmxlbmd0aCgpKTsKLSAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuY29udGFpbnNLZXkocmVhbEtleSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gcHJvcGVydGllcy5yZW1vdmUoa2V5KTsKLSAgICAgICAgICAgIHByb3BlcnRpZXMucHV0KHJlYWxLZXksIHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL05vZGVJZFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlSWRUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTU0MTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL05vZGVJZFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTm9kZUlkVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICBwdWJsaWMgTm9kZUlkVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgVmVjdG9yIHJlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIE5vZGUgcm9vdE5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpOwotICAgICAgaW50IGRlcHRoID0gMDsKLSAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgIGRlcHRoID0gbm9kZS5nZXROb2RlRGVwdGgoKTsKLSAgICAgIHdoaWxlIChyZWxzLnNpemUoKSA8IGRlcHRoICYmIG5vZGUgIT0gbnVsbCAmJiBub2RlICE9IHJvb3ROb2RlKQotICAgICAgewotICAgICAgICBOb2RlIHBhcmVudE5vZGUgPSBub2RlLmdldFBhcmVudCgpOwotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIFJlbCByZWwgPSBnZXRSZWwocGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpLCBlbGVtZW50KTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHJlbFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcihyZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgcmVsVmFsdWUuYXBwZW5kKE1vZGVsQ29uc3RhbnRzLlJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SKTsKLSAgICAgICAgcmVsVmFsdWUuYXBwZW5kKGVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgcmVscy5pbnNlcnRFbGVtZW50QXQocmVsVmFsdWUudG9TdHJpbmcoKSwgMCk7Ci0gICAgICAgIG5vZGUgPSBwYXJlbnROb2RlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgfQotICAgIGludCBudW1SZWxhdGlvbnNoaXBzID0gcmVscy5zaXplKCk7Ci0gICAgaWYgKG51bVJlbGF0aW9uc2hpcHMgPT0gMSkKLSAgICAgIHByb3BlcnRpZXMucHV0KE1vZGVsQ29uc3RhbnRzLlJFTF9JRCwgcmVscy5nZXQoMCkudG9TdHJpbmcoKSk7Ci0gICAgZWxzZSBpZiAobnVtUmVsYXRpb25zaGlwcyA+IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIChTdHJpbmdbXSlyZWxzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBSZWwgZ2V0UmVsKEVsZW1lbnQgc291cmNlRWxlbWVudCwgRWxlbWVudCB0YXJnZXRFbGVtZW50KQotICB7Ci0gICAgRW51bWVyYXRpb24gcmVscyA9IHNvdXJjZUVsZW1lbnQuZ2V0UmVscygpOwotICAgIHdoaWxlIChyZWxzLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFJlbCByZWwgPSAoUmVsKXJlbHMubmV4dEVsZW1lbnQoKTsKLSAgICAgIEVudW1lcmF0aW9uIHRhcmdldEVsZW1lbnRzID0gcmVsLmdldFRhcmdldEVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAodGFyZ2V0RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRFbGVtZW50cy5uZXh0RWxlbWVudCgpID09IHRhcmdldEVsZW1lbnQpCi0gICAgICAgICAgcmV0dXJuIHJlbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgIFN0cmluZ1tdIHJlbGF0aW9uc2hpcHMgPSBudWxsOwotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZ1tdKQotICAgICAgcmVsYXRpb25zaGlwcyA9IChTdHJpbmdbXSl2YWx1ZTsKLSAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgcmVsYXRpb25zaGlwcyA9IG5ldyBTdHJpbmdbXSB7dmFsdWUudG9TdHJpbmcoKX07Ci0gICAgaWYgKHJlbGF0aW9uc2hpcHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0aW9uc2hpcHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHJlbGF0aW9uc2hpcHNbaV0uaW5kZXhPZihNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgICByZXR1cm4gZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgU3RyaW5nIHJlbCA9IChpbmRleCAhPSAtMSkgPyByZWxhdGlvbnNoaXBzW2ldLnN1YnN0cmluZygwLCBpbmRleCkgOiByZWxhdGlvbnNoaXBzW2ldOwotICAgICAgICBTdHJpbmcgbG9jYWxuYW1lID0gKGluZGV4ICE9IC0xKSA/IHJlbGF0aW9uc2hpcHNbaV0uc3Vic3RyaW5nKGluZGV4ICsgMSwgcmVsYXRpb25zaGlwc1tpXS5sZW5ndGgoKSkgOiBudWxsOwotICAgICAgICBpZiAobG9jYWxuYW1lID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gICAgICAgIG5vZGUgPSBnZXROb2RlKG5vZGUsIHJlbCwgbG9jYWxuYW1lKTsKLSAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShwcm9wZXJ0aWVzKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnRpZXMucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShwcm9wZXJ0aWVzKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBIYXNodGFibGUgZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIHJldHVybiAobmV3IEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcikpLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBOb2RlIGdldE5vZGUoTm9kZSBwYXJlbnQsIFN0cmluZyByZWwsIFN0cmluZyBsb2NhbG5hbWUpCi0gIHsKLSAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBwYXJlbnQuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcGFyZW50RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChsb2NhbG5hbWUuZXF1YWxzKGVsZW1lbnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRDaGlsZE5vZGUoKFRyZWVFbGVtZW50KWVsZW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmNTdlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICBwdWJsaWMgTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgTm9kZSBuZXh0Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUoSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICAgTm9kZSBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgaWYgKGN1cnJOb2RlID09IG51bGwpCi0gICAgICAgIGN1cnJOb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICAgIFZlY3RvciBuZXh0UmVscyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFZlY3RvciBjdXJyUmVscyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHdoaWxlIChuZXh0Tm9kZSAhPSBudWxsICYmIGN1cnJOb2RlICE9IG51bGwgJiYgKCFpc1Jvb3RFbGVtZW50KG5leHROb2RlLmdldFRyZWVFbGVtZW50KCkpIHx8ICFpc1Jvb3RFbGVtZW50KGN1cnJOb2RlLmdldFRyZWVFbGVtZW50KCkpKSAmJiBuZXh0Tm9kZSAhPSBjdXJyTm9kZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5leHROb2RlLmdldE5vZGVEZXB0aCgpID49IGN1cnJOb2RlLmdldE5vZGVEZXB0aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gbmV4dE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IG5leHROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgUmVsIHJlbCA9IGdldFJlbChwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCksIG5leHRFbGVtZW50KTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVsVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKHJlbC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgICAgcmVsVmFsdWUuYXBwZW5kKG5leHRFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgbmV4dFJlbHMuaW5zZXJ0RWxlbWVudEF0KHJlbFZhbHVlLnRvU3RyaW5nKCksIDApOwotICAgICAgICAgIG5leHROb2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHBhcmVudE5vZGUgPSBjdXJyTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgUmVsIHJlbCA9IGdldFJlbChjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpLCBwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVsVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKHJlbC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgICAgcmVsVmFsdWUuYXBwZW5kKHBhcmVudEVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBjdXJyUmVscy5hZGQocmVsVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgY3Vyck5vZGUgPSBwYXJlbnROb2RlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjdXJyUmVscy5hZGRBbGwobmV4dFJlbHMpOwotICAgICAgaW50IG51bVJlbGF0aW9uc2hpcHMgPSBjdXJyUmVscy5zaXplKCk7Ci0gICAgICBpZiAobnVtUmVsYXRpb25zaGlwcyA9PSAxKQotICAgICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIGN1cnJSZWxzLmdldCgwKS50b1N0cmluZygpKTsKLSAgICAgIGVsc2UgaWYgKG51bVJlbGF0aW9uc2hpcHMgPiAxKQotICAgICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIChTdHJpbmdbXSkgY3VyclJlbHMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNSb290RWxlbWVudChFbGVtZW50IGUpCi0gIHsKLSAgICByZXR1cm4gZS5nZXRNb2RlbCgpLmdldFJvb3RFbGVtZW50KCkgPT0gZTsKLSAgfQotCi0gIHByaXZhdGUgUmVsIGdldFJlbChFbGVtZW50IHNvdXJjZUVsZW1lbnQsIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCkKLSAgewotICAgIEVudW1lcmF0aW9uIHJlbHMgPSBzb3VyY2VFbGVtZW50LmdldFJlbHMoKTsKLSAgICB3aGlsZSAocmVscy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBSZWwgcmVsID0gKFJlbCkgcmVscy5uZXh0RWxlbWVudCgpOwotICAgICAgRW51bWVyYXRpb24gdGFyZ2V0RWxlbWVudHMgPSByZWwuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgICAgIHdoaWxlICh0YXJnZXRFbGVtZW50cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRhcmdldEVsZW1lbnRzLm5leHRFbGVtZW50KCkgPT0gdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICByZXR1cm4gcmVsOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBOb2RlIGN1cnJOb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKGN1cnJOb2RlID09IG51bGwpCi0gICAgICBjdXJyTm9kZSA9IHJvb3ROb2RlOwotICAgIE9iamVjdCB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgU3RyaW5nW10gcmVsYXRpb25zaGlwcyA9IG51bGw7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nW10pCi0gICAgICByZWxhdGlvbnNoaXBzID0gKFN0cmluZ1tdKSB2YWx1ZTsKLSAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgcmVsYXRpb25zaGlwcyA9IG5ldyBTdHJpbmdbXXt2YWx1ZS50b1N0cmluZygpfTsKLSAgICBpZiAocmVsYXRpb25zaGlwcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY3VyckVsZW1lbnQgPSBjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGlvbnNoaXBzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpbnQgaW5kZXggPSByZWxhdGlvbnNoaXBzW2ldLmluZGV4T2YoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICBTdHJpbmcgcmVsID0gKGluZGV4ICE9IC0xKSA/IHJlbGF0aW9uc2hpcHNbaV0uc3Vic3RyaW5nKDAsIGluZGV4KSA6IHJlbGF0aW9uc2hpcHNbaV07Ci0gICAgICAgIFN0cmluZyBsb2NhbG5hbWUgPSAoaW5kZXggIT0gLTEpID8gcmVsYXRpb25zaGlwc1tpXS5zdWJzdHJpbmcoaW5kZXggKyAxLCByZWxhdGlvbnNoaXBzW2ldLmxlbmd0aCgpKSA6IG51bGw7Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBjdXJyRWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgICAgICBFbGVtZW50IHRhcmdldEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAobG9jYWxuYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IGZpcnN0RWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IChFbGVtZW50KSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgICAgIGZpcnN0RWxlbWVudCA9IG5leHRFbGVtZW50OwotICAgICAgICAgICAgaWYgKGxvY2FsbmFtZS5lcXVhbHMobmV4dEVsZW1lbnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IG5leHRFbGVtZW50OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBmaXJzdEVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gKEVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY3VyckVsZW1lbnQgPSAoRWxlbWVudCkgdGFyZ2V0RWxlbWVudDsKLSAgICAgICAgICBOb2RlIHBhcmVudE5vZGUgPSBjdXJyTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsICYmIHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSA9PSBjdXJyRWxlbWVudCkKLSAgICAgICAgICAgIGN1cnJOb2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyTm9kZSA9IGN1cnJOb2RlLmdldENoaWxkTm9kZSgoVHJlZUVsZW1lbnQpIGN1cnJFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihjdXJyTm9kZS5nZXROb2RlSWQoKSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL1ZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjYxZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL1ZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbGlzdE1hbmFnZXJLZXk7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdmlld0tleTsKLQotICBwdWJsaWMgVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlciwgU3RyaW5nIGxpc3RNYW5hZ2VyS2V5LCBTdHJpbmcgdmlld0tleSkKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgdGhpcy5saXN0TWFuYWdlcktleSA9IGxpc3RNYW5hZ2VyS2V5OwotICAgIHRoaXMudmlld0tleSA9IHZpZXdLZXk7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIFZlY3RvciBub3JtYWxpemVkVmlld0lkcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIGN1cnJOb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgY3VyckVsZW1lbnQgPSBjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBsaXN0TWFuYWdlck9iaiA9IGN1cnJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QobGlzdE1hbmFnZXJLZXkpOwotICAgIGlmIChsaXN0TWFuYWdlck9iaiBpbnN0YW5jZW9mIExpc3RNYW5hZ2VyKQotICAgIHsKLSAgICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gKExpc3RNYW5hZ2VyKSBsaXN0TWFuYWdlck9iajsKLSAgICAgIFN0cmluZ1tdIHZpZXdJZHMgPSBnZXRWaWV3VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3SWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdEVsZW1lbnQgPSBsaXN0TWFuYWdlci5nZXRFbGVtZW50V2l0aFZpZXdJZChJbnRlZ2VyLnBhcnNlSW50KHZpZXdJZHNbaV0pKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGlmIChsaXN0RWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiBvYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBvYmplY3Q7Ci0gICAgICAgICAgICBub3JtYWxpemVkVmlld0lkcy5hZGQoZWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBwcm9wZXJ0aWVzLnB1dCh2aWV3S2V5LCBub3JtYWxpemVkVmlld0lkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBWZWN0b3Igdmlld0lkcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBOb2RlIGN1cnJOb2RlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFRyZWVFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIE9iamVjdCBsaXN0TWFuYWdlck9iaiA9IGN1cnJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QobGlzdE1hbmFnZXJLZXkpOwotICAgICAgaWYgKGxpc3RNYW5hZ2VyT2JqIGluc3RhbmNlb2YgTGlzdE1hbmFnZXIpCi0gICAgICB7Ci0gICAgICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gKExpc3RNYW5hZ2VyKSBsaXN0TWFuYWdlck9iajsKLSAgICAgICAgU3RyaW5nW10gbm9ybWFsaXplZFZpZXdJZHMgPSBnZXRWaWV3VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vcm1hbGl6ZWRWaWV3SWRzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgRW51bWVyYXRpb24gZSA9IGxpc3RNYW5hZ2VyLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIG5vcm1hbGl6ZWRWaWV3SWRzW2ldLmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHZpZXdJZHMuYWRkKFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFZpZXdJZCgpKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpbnQgc2l6ZSA9IHZpZXdJZHMuc2l6ZSgpOwotICAgIGlmIChzaXplID09IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dCh2aWV3S2V5LCB2aWV3SWRzLmdldCgwKSk7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dCh2aWV3S2V5LCB2aWV3SWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRWaWV3VmFsdWVzKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgT2JqZWN0IHZpZXdWYWx1ZU9iaiA9IHByb3BlcnRpZXMuZ2V0KHZpZXdLZXkpOwotICAgIFN0cmluZ1tdIHZpZXdWYWx1ZXM7Ci0gICAgaWYgKHZpZXdWYWx1ZU9iaiA9PSBudWxsKQotICAgICAgdmlld1ZhbHVlcyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgZWxzZSBpZiAodmlld1ZhbHVlT2JqLmdldENsYXNzKCkuaXNBcnJheSgpKQotICAgICAgdmlld1ZhbHVlcyA9IChTdHJpbmdbXSkgdmlld1ZhbHVlT2JqOwotICAgIGVsc2UKLSAgICAgIHZpZXdWYWx1ZXMgPSBuZXcgU3RyaW5nW117KFN0cmluZykgdmlld1ZhbHVlT2JqfTsKLSAgICByZXR1cm4gdmlld1ZhbHVlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhMjdlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSBidXNFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IGJ1c0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAvLyBjcmVhdGUgdGhlIHJlZ2lzdHJ5IGluIHRoZSBVRERJIHBlcnNwZWN0aXZlCi0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIG51bGwsIGlucXVpcnlBUEksIG51bGwsIHRydWUpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBidXNpbmVzc05hbWUpOwotICAgIGlmICghYWN0aW9uLnJ1bigpKQotICAgIHsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YTYxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IHJlZ0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hBUEkgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gcmVnRWxlbWVudC5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeUFQSSwgcHVibGlzaEFQSSwgcmVnaXN0cnlOYW1lLCByZWdpc3RyYXRpb25VUkwsIGZhbHNlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCByZWdpc3RyeU5hbWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZmY4MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VJbnRlcmZhY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzZXJJbnRFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyBzZXJJbnROYW1lID0gc2VySW50RWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBzZXJJbnRFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgc2VySW50S2V5ID0gc2VySW50RWxlbWVudC5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCk7Ci0gICAgLy8gY3JlYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBudWxsLCBpbnF1aXJ5QVBJLCBudWxsLCB0cnVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksIHNlckludEtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBzZXJJbnROYW1lKTsKLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIHNlckludE5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbih0cnVlKTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBzZXJJbnROYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTIzOWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgc2VyRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBzZXJFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHNlckVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gc2VyRWxlbWVudC5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgLy8gY3JlYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBudWxsLCBpbnF1aXJ5QVBJLCBudWxsLCB0cnVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSwgc2VydmljZUtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBzZXJ2aWNlTmFtZSk7Ci0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKHRydWUpOwotICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4NmI2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5PcGVuUmVnaXN0cnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24gewotICAgIHB1YmxpYyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMLCBib29sZWFuIHVzZUV4aXN0aW5nKQotICAgIHsKLSAgICAgIHJldHVybiBjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJ5TmFtZSwgcmVnaXN0cmF0aW9uVVJMLCBudWxsLCBudWxsLCBudWxsLCB1c2VFeGlzdGluZyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHB1Ymxpc2hBUEksIFN0cmluZyByZWdpc3RyeU5hbWUsIFN0cmluZyByZWdpc3RyYXRpb25VUkwsIFN0cmluZyBkZWZhdWx0TG9naW4sIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQsIFRheG9ub215W10gdGF4b25vbWllcywgYm9vbGVhbiB1c2VFeGlzdGluZykgewotICAgICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBnZXRSZWdpc3RyeU5vZGVzQnlJbnF1aXJ5VVJMKGlucXVpcnlBUEkpOwotICAgICAgICBpZiAocmVnaXN0cnlOb2RlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHVzZUV4aXN0aW5nKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgcmVnaXN0cnlOb2RlID0gKE5vZGUpcmVnaXN0cnlOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ2lzdHJ5Tm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQocmVnaXN0cnlOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gb3BlbiB0aGUgcmVnaXN0cnkgaWYgaXQgaXMgbm90IGFscmVhZHkgb3BlbmVkIGluIHRoZSBVRERJIHBlcnNwZWN0aXZlCi0gICAgICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBvcGVuUmVnQWN0aW9uID0gbmV3IE9wZW5SZWdpc3RyeUFjdGlvbihjb250cm9sbGVyXyk7Ci0KLSAgICAgICAgLy8gcG9wdWxhdGUgdGhlIHByb3BlcnR5IHRhYmxlCi0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlblJlZ0FjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocmVnaXN0cnlOYW1lKSkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSxyZWdpc3RyeU5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsaW5xdWlyeUFQSSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hBUEkpKQotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCxwdWJsaXNoQVBJKTsKLQotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHJlZ2lzdHJhdGlvblVSTCkpCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJBVElPTl9VUkwscmVnaXN0cmF0aW9uVVJMKTsKLQotICAgICAgICBpZiAoZGVmYXVsdExvZ2luICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1VTRVJOQU1FLCBkZWZhdWx0TG9naW4pOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlVERElfUEFTU1dPUkQsIGRlZmF1bHRQYXNzd29yZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gSWYgdXNlci1kZWZpbmVkIGNhdGVnb3J5IG1ldGFkYXRhIGV4aXN0cywgc2VhcmNoIGFuZCBtYWtlIHRoZSBhc3NvY2lhdGlvbnMuCi0gICAgICAgIFN0cmluZ0J1ZmZlciBkaXJlY3RvcnlCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoZGlyZWN0b3J5QnVmZmVyLGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkscmVnaXN0cnlOYW1lKTsKLSAgICAgICAgRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICBGaWxlW10gY2F0ZWdvcnlGaWxlcyA9IG51bGw7Ci0gICAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5LmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3JpZXNEaXJlY3RvcnkubGlzdEZpbGVzKCk7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5RmlsZXMubGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgICAgIGlmICghb3BlblJlZ0FjdGlvbi5ydW4oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0YXhvbm9taWVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNodGFibGUgdGF4b25vbXlUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7IGk8dGF4b25vbWllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUYXhvbm9teSB0YXhvbm9teSA9IHRheG9ub21pZXNbaV07Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRheG9ub215LmdldE5hbWUoKTsKLSAgICAgICAgICAgIFN0cmluZyB0bW9kZWxLZXkgPSB0YXhvbm9teS5nZXRUbW9kZWxLZXkoKTsKLSAgICAgICAgICAgIENhdGVnb3J5TW9kZWwgY2F0TW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotICAgICAgICAgICAgY2F0TW9kZWwuc2V0RGlzcGxheU5hbWUobmFtZSk7Ci0gICAgICAgICAgICBjYXRNb2RlbC5zZXRDYXRlZ29yeUtleShuYW1lKTsKLSAgICAgICAgICAgIGNhdE1vZGVsLnNldFRNb2RlbEtleSh0bW9kZWxLZXkpOwotICAgICAgICAgICAgY2F0TW9kZWwubG9hZEZyb21UYXhvbm9teSh0YXhvbm9teSk7Ci0gICAgICAgICAgICB0YXhvbm9teVRhYmxlLnB1dCh0bW9kZWxLZXksIGNhdE1vZGVsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAgICAgcmVnRWxlbWVudC5zZXRVc2VyRGVmaW5lZENhdGVnb3JpZXModGF4b25vbXlUYWJsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjYXRlZ29yeUZpbGVzICE9IG51bGwgJiYgY2F0ZWdvcnlGaWxlcy5sZW5ndGggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAgICAgcmVnRWxlbWVudC5zZXRDaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyh0cnVlKTsKLSAgICAgICAgICByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgICAgICAgIGxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEocmVnaXN0cnlOYW1lLHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKFN0cmluZyByZWdpc3RyeU5hbWUsRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBkaXJlY3RvcnlCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyxkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEoRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzLFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5KQotICAgIHsKLSAgICAgIEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgIEZpbGVbXSBjYXRlZ29yeUZpbGVzID0gbnVsbDsKLSAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLmxpc3RGaWxlcygpOyAKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd2hpbGUgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCl1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIFN0cmluZyBjYXRlZ29yeUtleSA9IGNhdGVnb3J5TW9kZWwuZ2V0Q2F0ZWdvcnlLZXkoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3J5RmlsZXMubGVuZ3RoO2krKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lID0gY2F0ZWdvcnlGaWxlc1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIGludCBsYXN0RG90UG9zID0gY2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWUubGFzdEluZGV4T2YoIi4iKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGRlY29kZWRDYXRlZ29yeVByb3BlcnRpZXNGaWxlTmFtZUJhc2UgPSBVUkxVdGlscy5kZWNvZGUoY2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWUuc3Vic3RyaW5nKDAsbGFzdERvdFBvcykpOwotICAgICAgICAgICAgICBpZiAobGFzdERvdFBvcyA+IDAgJiYgY2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWUuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikgJiYgY2F0ZWdvcnlLZXkuZXF1YWxzKGRlY29kZWRDYXRlZ29yeVByb3BlcnRpZXNGaWxlTmFtZUJhc2UpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoY2F0ZWdvcnlGaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnlNb2RlbC5sb2FkRnJvbURlbGltaXRlckZpbGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBWZWN0b3IgZ2V0UmVnaXN0cnlOb2Rlc0J5SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IG51bGw7Ci0gICAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpKG5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKSk7Ci0gICAgICBWZWN0b3IgY2hpbGROb2RlcyA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpY2hpbGROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgU3RyaW5nIGN1cnJJbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICAgICAgaWYgKGN1cnJJbnF1aXJ5VVJMICE9IG51bGwgJiYgY3VycklucXVpcnlVUkwuZXF1YWxzKGlucXVpcnlVUkwpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWdpc3RyeU5vZGVzID09IG51bGwpCi0gICAgICAgICAgICAgIHJlZ2lzdHJ5Tm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICByZWdpc3RyeU5vZGVzLmFkZEVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgICAgcmV0dXJuIHJlZ2lzdHJ5Tm9kZXM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gbmV3QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgPSBudWxsOwotCi0gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSB7Ci0gICAgICAgICAgICBmYXZvcml0ZXNGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc0VsZW1lbnQpIHsKLSAgICAgICAgICAgIGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgPSAoKEZhdm9yaXRlc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRQYXJlbnRGb2xkZXJFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJldHVybiBhbiBpbnN0YW5jZSBvZiBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YKLSAgICAgICAgLy8gZmF2b3JpdGVzIGZvbGRlciBlbGVtZW50IGJlaW5nIHNlbGVjdGVkLgotICAgICAgICBpZiAoZmF2b3JpdGVzRm9sZGVyRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFkZFNlcnZpY2VJbnRlcmZhY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODA5NTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci0KLXB1YmxpYyBjbGFzcyBBZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBwdWJsaXNoQVBJID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIGRlZmF1bHRMb2dpbiA9IHJlZ0VsZW1lbnQuZ2V0RGVmYXVsdExvZ2luKCk7Ci0gICAgU3RyaW5nIGRlZmF1bHRQYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0RGVmYXVsdFBhc3N3b3JkKCk7Ci0gICAgVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnRWxlbWVudC5nZXRUYXhvbm9taWVzKCk7Ci0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJ5TmFtZSwgbnVsbCwgZGVmYXVsdExvZ2luLCBkZWZhdWx0UGFzc3dvcmQsIHRheG9ub21pZXMsIGZhbHNlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCByZWdpc3RyeU5hbWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjU4YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NJTEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5PcGVuV1NJTEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIjsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCB3c2lsRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyB3c2lsVVJMID0gd3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpOwotICAgIE9wZW5XU0lMQWN0aW9uIG9wZW5XU0lMQWN0aW9uID0gbmV3IE9wZW5XU0lMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0lMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMLCB3c2lsVVJMKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFLCBTdHJpbmcudmFsdWVPZihXc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUykpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTSUxBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgIGVsc2UKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkUiLCB3c2lsVVJMKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTUyOGQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IHdzZGxFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSB3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCk7Ci0gICAgT3BlbldTRExBY3Rpb24gb3BlbldTRExBY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlbldTRExBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBvcGVuV1NETEFjdGlvbi5ydW4oKTsKLSAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgZWxzZQotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRSIsIHdzZGxVcmwpKTsKLSAgICByZXR1cm4gYWN0aW9uUmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZjMWUzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5XU0RMRmlsZU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gewotCi0gICAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZl87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgd3NkbEZpbGVOYW1lXzsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpCi0gICAgewotICAgICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9ydGllc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpIHsKLSAgICAgICAgaWYgKGRlZl8gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHdyaXRlV1NETERlZmluaXRpb24ob3MsIGRlZl8pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmlsZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiB3c2RsRmlsZU5hbWVfOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICAgICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotCi0gICAgICAgIC8vIHJldHVybiBmYWxzZSBpZiBub2RlSUQgPT0gMCwgdGhhdCBpcyB0aGUgbWFpbiBub2RlCi0gICAgICAgIGlmIChub2RlSUQgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgICAgIFN0cmluZyB3c2RsVVJMID0gKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRXc2RsVXJsKCk7Ci0gICAgICAgIHdzZGxGaWxlTmFtZV8gPSBXU0RMRmlsZU5hbWVIZWxwZXIuZ2V0V1NETEZpbGVOYW1lKHdzZGxVUkwpOwotICAgICAgICB0cnkgewotICAgICAgICAgIGRlZl8gPSAobmV3IFVkZGk0akhlbHBlcigpKS5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2Y1MWU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gewotICAgIHB1YmxpYyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbClmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKSB7Ci0gICAgICAgIEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLQotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkpKTsKLQotICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2ZmE3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gewotCi0gICAgcHVibGljIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBuZXdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gKEZvcm1Ub29sKWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBsYXVuY2hXaXphcmQoKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRXc2RsVXJsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNTMyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHVibGljIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgbWFpbk5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IG1haW5FbGVtZW50ID0gKEZhdm9yaXRlc01haW5FbGVtZW50KW1haW5Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBtYWluRWxlbWVudC5yZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgewotICAgICAgVmVjdG9yIGZvbGRlck5vZGVzID0gbWFpbk5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb2xkZXJOb2Rlcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBmb2xkZXJOb2RlID0gKE5vZGUpZm9sZGVyTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IGZvbGRlck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KXRyZWVFbGVtZW50OwotICAgICAgICAgIGZvbGRlckVsZW1lbnQucmVtb3ZlQWxsRmF2b3JpdGVzKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkpOwotICAgICAgICAgIGZvbGRlckVsZW1lbnQuaW5pdChtYWluRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fRkFWT1JJVEVTX1JFU1RPUkVEX1RPX0RFRkFVTFQiKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX09QRU5fRkFWT1JJVEVTX0JBQ0tVUCIpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTk5MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ub2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCwgYm9vbGVhbiBvcGVuKSB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSWQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGlmIChvcGVuKQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU5fTk9ERSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHRvZ2dsZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gdG9nZ2xlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRvb2xJZCwgdmlld0lkLCB2aWV3VG9vbElkLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRydWUpOwotICAgIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MGRlZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTWFzc05vZGVJZFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE11bHRpcGxlTGlua0FjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHVibGljIE11bHRpcGxlTGlua0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBpc011bHRpcGxlTGlua0FjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiwgaXNNdWx0aXBsZUxpbmtBY3Rpb24pOwotICAgICAgcmV0dXJuIHByb2Nlc3NNdWx0aXBsZUxpbmtBY3Rpb25QYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gICAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICBTdHJpbmcgdG9vbElEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICBTdHJpbmcgdmlld0lEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICBTdHJpbmcgdmlld1Rvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgIGlmIChub2RlSURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRFN0cmluZyk7Ci0gICAgICBpZiAodG9vbElEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCB0b29sSURTdHJpbmcpOwotICAgICAgaWYgKHZpZXdJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3VG9vbElEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCwgdmlld1Rvb2xJRFN0cmluZyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTXVsdGlwbGVMaW5rQWN0aW9uUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZ1tdIG1hc3NBY3Rpb25Ob2RlSURzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCwgbWFzc0FjdGlvbk5vZGVJRHMpOwotICAgIGlmIChtYXNzQWN0aW9uTm9kZUlEcy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IE1hc3NOb2RlSWRUcmFuc2Zvcm1lcihjb250cm9sbGVyXywgRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQpfTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXy5jb250YWluc0tleShGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldE1hc3NBY3Rpb25Ob2RlSWRzKCkKLSAgewotICAgIE9iamVjdCBvYmplY3QgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQpOwotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIGVsc2UgaWYgKG9iamVjdC5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pb2JqZWN0OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyhTdHJpbmcpb2JqZWN0fTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkpID8gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpIDogZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmdbXSBtYXNzQWN0aW9uTm9kZUlEcyA9IGdldE1hc3NBY3Rpb25Ob2RlSWRzKCk7Ci0gICAgaWYgKG1hc3NBY3Rpb25Ob2RlSURzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXNzQWN0aW9uTm9kZUlEcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG1hc3NBY3Rpb25Ob2RlSURzW2ldKTsKLSAgICAgICAgaWYgKGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkpCi0gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhMzE4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVGYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIFJlbW92ZUZhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFN0cmluZyBub2RlSURTdHJpbmcgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkgPSBjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0OwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNFbGVtZW50KQotICAgICAgYWN0aW9uUmVzdWx0ID0gKChGYXZvcml0ZXNFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldFBhcmVudEZvbGRlckVsZW1lbnQoKS5yZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKG5vZGVJRCwgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpCi0gICAgICBhY3Rpb25SZXN1bHQgPSAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNNYWluRWxlbWVudCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBlOwotICAgICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgbWFpbkVsZW1lbnQgPSAoRmF2b3JpdGVzTWFpbkVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfRk9MREVSX05PREUpOwotICAgICAgYWN0aW9uUmVzdWx0ID0gYWN0aW9uUmVzdWx0ICYmICgoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkgZS5uZXh0RWxlbWVudCgpKS5yZW1vdmVBbGxGYXZvcml0ZXMocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotICAgICAgZSA9IG1haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgYWN0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9ERV9DTEVBUkVEIiwgc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uUmVzdWx0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gImZhdk5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJmYXZQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJmYXZTdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRiZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24gZXh0ZW5kcyBSZXNpemVGcmFtZXNBY3Rpb24KLXsKLSAgcHVibGljIFJlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBuZXcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKGZyYW1lTmFtZS5lcXVhbHMoRmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhmYXZQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMTAwJSwwJSIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKEZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhmYXZQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMTAwJSwwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKEZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhmYXZQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMCUsMTAwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI5NzQ3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChrZWVwSGlzdG9yeSkgewotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgICB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNjcyN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICAgICAgaWYgKHZpZXdJRCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgICBpZiAoZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKSB7Ci0gICAgICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBnZXRTZWxlY3RlZFRvb2woKS5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250ZW50VmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ2NDU5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbgotewotICAgIHB1YmxpYyBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwZXJmb3JtRXh0ZW5kZWRBY3Rpb24oKQotICAgIHsKLSAgICAJVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkoKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkucmVmcmVzaCgpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChrZWVwSGlzdG9yeSkgewotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkOTA4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgCi0gICAgLy8gU2F2ZSB0aGUgZnJhbWVzZXQgc2l6ZXMgaWZmIG5vIGZyYW1lIGlzIG1heGltaXplZC4KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpICYmICFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7ICAgIAotICAgIHJldHVybiBmb3JtTGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzQWN0aW9uSW5wdXRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNGQzN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0FjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNBY3Rpb25JbnB1dHMKLXsKLSAgICAvLyBtYXNzIGFjdGlvbnMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSVBMRV9MSU5LX0FDVElPTiA9ICJtdWx0aXBsZUxpbmtBY3Rpb24iOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE1BU1NfQUNUSU9OX05PREVfSUQgPSAibWFzc0FjdGlvbk5vZGVJRCI7Ci0KLSAgICAvLyByZXNpemUgZmF2b3JpdGVzIGZyYW1lcyBhY3Rpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQgPSAiZnJhbWVzZXRDb2xzUGVyc3BlY3RpdmVDb250ZW50IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSID0gImZyYW1lc2V0Um93c0FjdGlvbnNDb250YWluZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0ZyYW1lTmFtZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNmMyNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0ZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzRnJhbWVOYW1lcwotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQVZJR0FUT1JfQ09OVEFJTkVSID0gImZhdl9uYXZpZ2F0b3JfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX1RPT0xCQVIgPSAiZmF2X25hdmlnYXRvcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRFTlQgPSAiZmF2X25hdmlnYXRvcl9jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQUNUSU9OU19DT05UQUlORVIgPSAiZmF2X2FjdGlvbnNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05UQUlORVIgPSAiZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19UT09MQkFSID0gImZhdl9wcm9wZXJ0aWVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0NPTlRFTlQgPSAiZmF2X3Byb3BlcnRpZXNfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVRVU19DT05UQUlORVIgPSAiZmF2X3N0YXR1c19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfVE9PTEJBUiA9ICJmYXZfc3RhdHVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfQ09OVEVOVCA9ICJmYXZfc3RhdHVzX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc01vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmMGMyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMgewotICAgIC8vIFJlbGF0aW9ucwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0lMX0ZPTERFUl9OT0RFID0gInJlbFdTSUxGb2xkZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFID0gInJlbFdTRExTZXJ2aWNlRm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSA9ICJyZWxVRERJU2VydmljZUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFID0gInJlbFVERElCdXNpbmVzc0ZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFID0gInJlbFVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUgPSAicmVsVURESVJlZ2lzdHJ5Rm9sZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSA9ICJyZWxVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTSUxfTk9ERSA9ICJyZWxXU0lMTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTRExfU0VSVklDRV9OT0RFID0gInJlbFdTRExTZXJ2aWNlTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfU0VSVklDRV9OT0RFID0gInJlbFVERElTZXJ2aWNlTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfQlVTSU5FU1NfTk9ERSA9ICJyZWxVRERJQnVzaW5lc3NOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFID0gInJlbFVERElTZXJ2aWNlSW50ZXJmYWNlTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfUkVHSVNUUllfTk9ERSA9ICJyZWxVRERJUmVnaXN0cnlOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFID0gInJlbFVzZXJEZWZVRERJUmVnaXN0cnlOb2RlIjsKLQotICAgIC8vIFByb3BlcnRpZXMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1BMVUdJTl9NRVRBREFUQV9ESVJFQ1RPUlkgPSAicGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfV1NJTF9VUkwgPSAid3NpbFVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9XU0RMX1VSTCA9ICJ3c2RsVVJMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9OQU1FID0gIlVERElTZXJ2aWNlTmFtZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEkgPSAiVURESVNlcnZpY2VJbnF1aXJ5QVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9LRVkgPSAiVURESVNlcnZpY2VLZXkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9CVVNJTkVTU19OQU1FID0gIlVERElCdXNpbmVzc05hbWUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSA9ICJVRERJQnVzaW5lc3NJbnF1aXJ5QVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfQlVTSU5FU1NfS0VZID0gIlVERElCdXNpbmVzc0tleSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUgPSAiVURESVNlcnZpY2VJbnRlcmZhY2VOYW1lIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEkgPSAiVURESVNlcnZpY2VJbnRlcmZhY2VJbnF1aXJ5QVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZID0gIlVERElTZXJ2aWNlSW50ZXJmYWNlS2V5IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfUkVHSVNUUllfTkFNRSA9ICJVRERJUmVnaXN0cnlOYW1lIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfUkVHSVNUUllfSU5RVUlSWV9BUEkgPSAiVURESVJlZ2lzdHJ5SW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX1BVQkxJU0hfQVBJID0gIlVERElSZWdpc3RyeVB1Ymxpc2hBUEkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9SRUdJU1RSWV9SRUdJU1RSQVRJT05fVVJMID0gIlVERElSZWdpc3RyeVJlZ2lzdHJhdGlvblVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX0NBVEVHT1JJRVNfRU5VTSA9ICJVRERJUmVnaXN0cnlDYXRlZ29yaWVzRW51bSI7Ci0KLSAgICAvLyBMaXN0IE1hbmFnZXJzIGZvciBGYXZvcml0ZXMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUyA9ICJ3c2RsU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTID0gInVkZGlTZXJ2aWNlcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1VERElfQlVTSU5FU1MgPSAidWRkaUJ1c2luZXNzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfV1NJTF9MSU5LUyA9ICJ3c2lsTGlua3MiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1JFR0lTVFJZID0gInVkZGlSZWdpc3RyeSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1VERElfU0VSVklDRV9JTlRFUkZBQ0UgPSAidWRkaVNlcnZpY2VJbnRlcmZhY2UiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNjc3ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNFbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQgewotCi0gIHB1YmxpYyBGYXZvcml0ZXNFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotCi0gIHB1YmxpYyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGdldFBhcmVudEZvbGRlckVsZW1lbnQoKSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0ZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YjljMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0ZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50Ci17Ci0gICAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgICAKLSAgICBwdWJsaWMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIEZhdm9yaXRlc01haW5FbGVtZW50IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCkgewotICAgICAgICByZXR1cm4gKEZhdm9yaXRlc01haW5FbGVtZW50KW5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNNYWluRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc01haW5FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OWVlY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc01haW5FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByaXZhdGUgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFIGZhdlJlZ2lzdHJ5XzsKLQotICBwdWJsaWMgRmF2b3JpdGVzTWFpbkVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIGZhdlJlZ2lzdHJ5XyA9IG5ldyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UoCi0JCQljb250cm9sbGVyLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpLAotCQkJY29udHJvbGxlci5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpCi0JKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlc3RvcmVGYXZvcml0ZXNEZWZhdWx0KCkKLSAgewotICAgIGZhdlJlZ2lzdHJ5Xy5yZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpOwotICAgIHJldHVybiBzYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzYXZlRmF2b3JpdGVzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGZhdlJlZ2lzdHJ5Xy5zYXZlKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NBVkVfRkFWT1JJVEVTX1dTSUwiLCBmYXZSZWdpc3RyeV8uZ2V0V3JpdGVMb2NhdGlvbigpKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIExpbmsgYWRkVURESVJlZ2lzdHJ5KFN0cmluZyByZWdpc3RyeU5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgcHVibGlzaEFQSSwgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESVJlZ2lzdHJ5KHJlZ2lzdHJ5TmFtZSwgaW5xdWlyeUFQSSwgcHVibGlzaEFQSSwgcmVnaXN0cmF0aW9uVVJMKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElCdXNpbmVzcyhTdHJpbmcgYnVzaW5lc3NOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIGJ1c2luZXNzS2V5KQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5hZGRVRERJQnVzaW5lc3MoYnVzaW5lc3NOYW1lLCBpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBhZGRVRERJU2VydmljZShTdHJpbmcgc2VydmljZU5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VydmljZUtleSkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESVNlcnZpY2Uoc2VydmljZU5hbWUsIGlucXVpcnlBUEksIHNlcnZpY2VLZXkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkVURESVNlcnZpY2VJbnRlcmZhY2UoU3RyaW5nIHNlckludE5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VySW50S2V5KQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5hZGRVRERJU2VydmljZUludGVyZmFjZShzZXJJbnROYW1lLCBpbnF1aXJ5QVBJLCBzZXJJbnRLZXkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkV1NETFNlcnZpY2UoU3RyaW5nIHVybCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkV1NETFNlcnZpY2UodXJsKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFdTSUxMaW5rKFN0cmluZyB1cmwpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFdTSUxMaW5rKHVybCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkgewotICAgIGZhdlJlZ2lzdHJ5Xy5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlTGluayhMaW5rIGxpbmspIHsKLSAgICBmYXZSZWdpc3RyeV8ucmVtb3ZlTGluayhsaW5rKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rW10gbG9hZFVERElSZWdpc3RyaWVzKCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8ubG9hZFVERElSZWdpc3RyaWVzKCk7Ci0gIH0KLSAgICAKLSAgcHVibGljIExpbmtbXSBsb2FkVURESUJ1c2luZXNzZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkVURESUJ1c2luZXNzZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFVERElTZXJ2aWNlcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRVRERJU2VydmljZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFVERElTZXJ2aWNlSW50ZXJmYWNlcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFdTRExTZXJ2aWNlcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRXU0RMU2VydmljZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rW10gbG9hZFdTSUxzKCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8ubG9hZFdTSUxzKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50IGdldEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KShnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQxN2ZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzVURESUJ1c2luZXNzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESUJ1c2luZXNzIHVkZGlCdXNpbmVzc187Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgdWRkaUJ1c2luZXNzXyA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3MoKTsKLSAgICB1ZGRpQnVzaW5lc3NfLnNldExpbmsobGluayk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkgewotICAgIHJldHVybiB1ZGRpQnVzaW5lc3NfLmdldExpbmsoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaUJ1c2luZXNzXy5nZXROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgcmV0dXJuIHVkZGlCdXNpbmVzc18uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRCdXNpbmVzc0tleSgpIHsKLSAgICByZXR1cm4gdWRkaUJ1c2luZXNzXy5nZXRCdXNpbmVzc0tleSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0YWI0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpIHsKLSAgICBMaW5rW10gbGlua3MgPSBmYXZNYWluRWxlbWVudC5sb2FkVURESUJ1c2luZXNzZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBMaW5rIGxpbmsgPSBsaW5rc1tpXTsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KChsaW5rLmdldEFic3RyYWN0cygpKVswXS5nZXRUZXh0KCksIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZVRERJQnVzaW5lc3NFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVkpOwotICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgYnVzaW5lc3NLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBMaW5rIGxpbmsgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJQnVzaW5lc3MoYnVzaW5lc3NOYW1lLCBpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSk7Ci0gICAgYm9vbGVhbiBzYXZlZCA9IGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICBpZiAoc2F2ZWQpIHsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KGJ1c2luZXNzTmFtZSwgZ2V0TW9kZWwoKSwgbGluayk7Ci0gICAgICBjb25uZWN0KGZhdlVERElCdXNpbmVzc0VsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZKTsKLSAgICBpZiAoaW5xdWlyeUFQSSA9PSBudWxsIHx8IGJ1c2luZXNzS2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCkKLSAgICAgIHJldHVybiAocmVtb3ZlRmF2b3JpdGUoKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBMaW5rIGxpbmsgPSBlbGVtZW50LmdldExpbmsoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluaykpIHsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIExpbmsgbGluayA9IGZhdlVERElCdXNpbmVzc0VsZW1lbnQuZ2V0TGluaygpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlTGluayhsaW5rKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBidXNpbmVzc0tleSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKGlucXVpcnlBUEkuZXF1YWxzKGJ1c0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpKSAmJgotICAgICAgICAgIGJ1c2luZXNzS2V5LmVxdWFscyhidXNFbGVtZW50LmdldEJ1c2luZXNzS2V5KCkpKQotICAgICAgICByZXR1cm4gYnVzRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNmNjZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLklGYXZvcml0ZXNVRERJUmVnaXN0cnk7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJUmVnaXN0cnkgdWRkaVJlZ187Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgdWRkaVJlZ18gPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5KCk7Ci0gICAgdWRkaVJlZ18uc2V0TGluayhsaW5rKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGdldExpbmsoKSB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfLmdldExpbmsoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaVJlZ18uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRJbnF1aXJ5VVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKSB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfLmdldFB1Ymxpc2hVUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotICAKLSAgcHVibGljIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZ2V0SUZhdm9yaXRlc1VERElSZWdpc3RyeUludGVyZmFjZSgpCi0gIHsKLSAgICByZXR1cm4gdWRkaVJlZ187Ci0gIH0KLX0KLSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4ZmNjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgTGlua1tdIGxpbmtzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElSZWdpc3RyaWVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewotICAgICAgTGluayBsaW5rID0gbGlua3NbaV07Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdzaXRyeUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCgobGluay5nZXRBYnN0cmFjdHMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVJlZ3NpdHJ5RWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBwdWJsaXNoQVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX1BVQkxJU0hfQVBJKTsKLSAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX1JFR0lTVFJBVElPTl9VUkwpOwotICAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IChFbnVtZXJhdGlvbil0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0NBVEVHT1JJRVNfRU5VTSk7Ci0gICAgLy8gU2F2ZSB0aGUgY2F0ZWdvcnkgZGF0YSBmaXJzdCBhbmQgdW5kbyBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfUExVR0lOX01FVEFEQVRBX0RJUkVDVE9SWSk7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoZGlyZWN0b3J5QnVmZmVyLHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICBGaWxlIGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUubWtkaXJzKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcnlGaWxlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKXVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5uZXh0RWxlbWVudCgpOyAgICAgICAgCi0gICAgICAgIGNhdGVnb3J5RmlsZU5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgICBTdHJpbmcgZW5jb2RlZENhdGVnb3J5S2V5ID0gVVJMVXRpbHMuZW5jb2RlKGNhdGVnb3J5TW9kZWwuZ2V0Q2F0ZWdvcnlLZXkoKSk7Ci0gICAgICAgIGNhdGVnb3J5RmlsZU5hbWUuYXBwZW5kKGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLmdldEFic29sdXRlUGF0aCgpKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKS5hcHBlbmQoZW5jb2RlZENhdGVnb3J5S2V5KS5hcHBlbmQoIi50eHQiKTsKLSAgICAgICAgYnl0ZSByYyA9IGNhdGVnb3J5TW9kZWwuc2F2ZURhdGEoY2F0ZWdvcnlGaWxlTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKHJjICE9IENhdGVnb3J5TW9kZWwuT1BFUkFUSU9OX1NVQ0NFU1NGVUwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBEZWxldGUgdGhlIGNhdGVnb3J5IGZpbGUgaWYgaXQgZXhpc3RzLgotICAgICAgICAgIEZpbGUgY2F0ZWdvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcnlGaWxlTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlGaWxlLmV4aXN0cygpKQotICAgICAgICAgICAgY2F0ZWdvcnlGaWxlLmRlbGV0ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjbGVhbnVwQ2F0ZWdvcnlEaXJlY3RvcmllcyhjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSk7Ci0gICAgfQotICAgIGlmIChyZWdpc3RyeU5hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgcHVibGlzaEFQSSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZSA9IGdldEZhdm9yaXRlKHJlZ2lzdHJ5TmFtZSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBMaW5rIGxpbmsgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJUmVnaXN0cnkocmVnaXN0cnlOYW1lLCBpbnF1aXJ5QVBJLCBwdWJsaXNoQVBJLCByZWdpc3RyYXRpb25VUkwpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdzaXRyeUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudChyZWdpc3RyeU5hbWUsIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZVRERJUmVnc2l0cnlFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgICByZXR1cm4gc2F2ZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShTdHJpbmdCdWZmZXIgY2F0ZWdvcmllc0RpcmVjdG9yeSxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnksU3RyaW5nIHJlZ2lzdHJ5TmFtZSkKLSAgewotICAgIC8vIDxtZXRhZGF0YT4vdWRkaS88cmVnaXN0cnlJZD4vY2F0ZWdvcmllcwotCVN0cmluZyBlbmNvZGVkUmVnaXN0cnlOYW1lID0gVVJMVXRpbHMuZW5jb2RlKHJlZ2lzdHJ5TmFtZSk7Ci0gICAgY2F0ZWdvcmllc0RpcmVjdG9yeS5hcHBlbmQocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpLmFwcGVuZCgidWRkaSIpLmFwcGVuZChGaWxlLnNlcGFyYXRvckNoYXIpLmFwcGVuZChlbmNvZGVkUmVnaXN0cnlOYW1lKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKS5hcHBlbmQoImNhdGVnb3JpZXMiKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjbGVhclJlZ2lzdHJ5TWV0YWRhdGEoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LFN0cmluZyByZWdpc3RyeU5hbWUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yaWVzRGlyZWN0b3J5LHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LHJlZ2lzdHJ5TmFtZSk7Ci0gICAgRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKGNhdGVnb3JpZXNEaXJlY3RvcnkudG9TdHJpbmcoKSk7Ci0gICAgRmlsZVtdIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKTsKLSAgICBpZiAoY2F0ZWdvcnlGaWxlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3J5RmlsZXMubGVuZ3RoO2krKykKLSAgICAgICAgY2F0ZWdvcnlGaWxlc1tpXS5kZWxldGUoKTsKLSAgICB9Ci0gICAgY2xlYW51cENhdGVnb3J5RGlyZWN0b3JpZXMoY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUpOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgY2xlYW51cENhdGVnb3J5RGlyZWN0b3JpZXMoRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSkKLSAgewotICAgIC8vIERlbGV0ZSB0aGUgY2F0ZWdvcmllcyBzdWJkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCi0gICAgU3RyaW5nW10gZmlsZUxpc3Q7Ci0gICAgZmlsZUxpc3QgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgaWYgKGZpbGVMaXN0ID09IG51bGwgfHwgZmlsZUxpc3QubGVuZ3RoID09IDApCi0gICAgICBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5kZWxldGUoKTsKLSAgICAvLyBEZWxldGUgdGhlIDxyZWdpc3RyeUlkPiBzdWJkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCi0gICAgRmlsZSByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZSA9IGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgICBmaWxlTGlzdCA9IHJlZ2lzdHJ5SWREaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICBpZiAoZmlsZUxpc3QgPT0gbnVsbCB8fCBmaWxlTGlzdC5sZW5ndGggPT0gMCkKLSAgICAgIHJlZ2lzdHJ5SWREaXJlY3RvcnlGaWxlLmRlbGV0ZSgpOwotICAgIC8vIERlbGV0ZSB0aGUgdWRkaSBzdWJkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCi0gICAgRmlsZSB1ZGRpRGlyZWN0b3J5RmlsZSA9IHJlZ2lzdHJ5SWREaXJlY3RvcnlGaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgICBmaWxlTGlzdCA9IHVkZGlEaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICBpZiAoZmlsZUxpc3QgPT0gbnVsbCB8fCBmaWxlTGlzdC5sZW5ndGggPT0gMCkKLSAgICAgIHVkZGlEaXJlY3RvcnlGaWxlLmRlbGV0ZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9OQU1FKTsKLSAgICBpZiAocmVnaXN0cnlOYW1lID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChnZXRGYXZvcml0ZShyZWdpc3RyeU5hbWUpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpCi0gICAgewotICAgICAgY2xlYXJSZWdpc3RyeU1ldGFkYXRhKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LHNlbGVjdGVkRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgYm9vbGVhbiByYyA9IHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudCk7Ci0gICAgICByYyA9IHJjICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICAgIHJldHVybiByYzsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZWxlbWVudCkgewotICAgIExpbmsgbGluayA9ICgoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllbGVtZW50KS5nZXRMaW5rKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdpc3RyeUVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBjbGVhclJlZ2lzdHJ5TWV0YWRhdGEocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnksZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgTGluayBsaW5rID0gZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgICBmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspOwotICAgIH0KLSAgICBkaXNjb25uZWN0UmVsKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBnZXRGYXZvcml0ZShTdHJpbmcgcmVnaXN0cnlOYW1lKSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAocmVnaXN0cnlOYW1lLmVxdWFscyhyZWdFbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgIHJldHVybiByZWdFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBiMzRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNVRERJU2VydmljZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVNlcnZpY2UgdWRkaVNlcnZpY2VfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgdWRkaVNlcnZpY2VfID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlKCk7Ci0gICAgdWRkaVNlcnZpY2VfLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0U2VydmljZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlS2V5KCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0U2VydmljZUtleSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjRmOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50Ci17Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBmYXZNYWluRWxlbWVudC5sb2FkVURESVNlcnZpY2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gc2VydmljZXNbaV07Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZmF2VURESVNlcnZpY2VFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCgoc2VydmljZS5nZXRTZXJ2aWNlTmFtZXMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVkpOwotICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsIHx8IGlucXVpcnlBUEkgPT0gbnVsbCB8fCBzZXJ2aWNlS2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBzZXJ2aWNlS2V5KTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgICAgcmVtb3ZlRmF2b3JpdGUoZSk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhdk1haW5FbGVtZW50LmFkZFVERElTZXJ2aWNlKHNlcnZpY2VOYW1lLCBpbnF1aXJ5QVBJLCBzZXJ2aWNlS2V5KTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQoc2VydmljZU5hbWUsIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgY29ubmVjdChmYXZVRERJU2VydmljZUVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVkpOwotICAgIGlmIChpbnF1aXJ5QVBJID09IG51bGwgfHwgc2VydmljZUtleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgc2VydmljZUtleSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KQotICAgICAgcmV0dXJuIChyZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkgJiYgZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCllbGVtZW50KS5nZXRTZXJ2aWNlKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZmF2VURESVNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZVRERJU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJ2aWNlS2V5KSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgc2VyRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKGlucXVpcnlBUEkuZXF1YWxzKHNlckVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpKSAmJgotICAgICAgICAgIHNlcnZpY2VLZXkuZXF1YWxzKHNlckVsZW1lbnQuZ2V0U2VydmljZUtleSgpKSkKLSAgICAgICAgcmV0dXJuIHNlckVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOWIyYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSB1ZGRpU2VySW50XzsKLQotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlTZXJJbnRfID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0gICAgdWRkaVNlckludF8uc2V0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKSB7Ci0gICAgcmV0dXJuIHVkZGlTZXJJbnRfLmdldFNlcnZpY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaVNlckludF8uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpU2VySW50Xy5nZXRJbnF1aXJ5VVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSB7Ci0gICAgcmV0dXJuIHVkZGlTZXJJbnRfLmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWI0OWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElTZXJ2aWNlSW50ZXJmYWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VzW2ldOwotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGZhdlVERElTZXJJbnRFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoc2VydmljZS5nZXRTZXJ2aWNlTmFtZXMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlckludEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHNlckludE5hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJJbnRLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICBpZiAoc2VySW50TmFtZSA9PSBudWxsIHx8IGlucXVpcnlBUEkgPT0gbnVsbCB8fCBzZXJJbnRLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZSA9IGdldEZhdm9yaXRlKGlucXVpcnlBUEksIHNlckludEtleSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJU2VydmljZUludGVyZmFjZShzZXJJbnROYW1lLCBpbnF1aXJ5QVBJLCBzZXJJbnRLZXkpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZmF2VURESVNlckludEVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KHNlckludE5hbWUsIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgY29ubmVjdChmYXZVRERJU2VySW50RWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJJbnRLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICBpZiAoaW5xdWlyeUFQSSA9PSBudWxsIHx8IHNlckludEtleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgc2VySW50S2V5KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZWxlbWVudCkgewotICAgIFNlcnZpY2Ugc2VydmljZSA9ICgoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWVsZW1lbnQpLmdldFNlcnZpY2UoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSkpIHsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBmYXZVRERJU2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmF2VURESVNlckludEVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBnZXRGYXZvcml0ZShTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlckludEtleSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbnF1aXJ5QVBJLmVxdWFscyhzZXJJbnRFbGVtZW50LmdldElucXVpcnlVUkwoKSkgJiYKLSAgICAgICAgICAgc2VySW50S2V5LmVxdWFscyhzZXJJbnRFbGVtZW50LmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSkpCi0gICAgICAgIHJldHVybiBzZXJJbnRFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhNGRlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuVURESVJlZ2lzdHJ5U2VydmljZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudAotewotICBwcml2YXRlIExpc3QgbmFtZXM7Ci0gIHByaXZhdGUgTGlzdCBkZXNjczsKLSAgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdExvZ2luOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQ7Ci0gIHByaXZhdGUgU3RyaW5nIGlucXVpcnlVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHB1Ymxpc2hVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlY3VyZUlucXVpcnlVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlY3VyZVB1Ymxpc2hVUkw7Ci0gIHByaXZhdGUgVGF4b25vbXlbXSB0YXhvbm9taWVzOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdExvZ2luKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0TG9naW47Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0TG9naW4oU3RyaW5nIGRlZmF1bHRMb2dpbikKLSAgewotICAgIHRoaXMuZGVmYXVsdExvZ2luID0gZGVmYXVsdExvZ2luOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0UGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRQYXNzd29yZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHRQYXNzd29yZChTdHJpbmcgZGVmYXVsdFBhc3N3b3JkKQotICB7Ci0gICAgdGhpcy5kZWZhdWx0UGFzc3dvcmQgPSBkZWZhdWx0UGFzc3dvcmQ7Ci0gIH0KLQotICBwdWJsaWMgVGF4b25vbXlbXSBnZXRUYXhvbm9taWVzKCkKLSAgewotICAgIHJldHVybiB0YXhvbm9taWVzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9teVtdIHRheG9ub21pZXMpCi0gIHsKLSAgICB0aGlzLnRheG9ub21pZXMgPSB0YXhvbm9taWVzOwotICB9Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldERlc2NzKCkKLSAgewotICAgIHJldHVybiBkZXNjczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlc2NzKExpc3QgZGVzY3MpCi0gIHsKLSAgICB0aGlzLmRlc2NzID0gZGVzY3M7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIGlucXVpcnlVUkw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5pbnF1aXJ5VVJMID0gaW5xdWlyeVVSTDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzKCkKLSAgewotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzKExpc3QgbmFtZXMpCi0gIHsKLSAgICB0aGlzLm5hbWVzID0gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKQotICB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKQotICB7Ci0gICAgdGhpcy5wdWJsaXNoVVJMID0gcHVibGlzaFVSTDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlSW5xdWlyeVVSTCgpCi0gIHsKLSAgICByZXR1cm4gc2VjdXJlSW5xdWlyeVVSTDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlY3VyZUlucXVpcnlVUkwoU3RyaW5nIHNlY3VyZUlucXVpcnlVUkwpCi0gIHsKLSAgICB0aGlzLnNlY3VyZUlucXVpcnlVUkwgPSBzZWN1cmVJbnF1aXJ5VVJMOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWN1cmVQdWJsaXNoVVJMKCkKLSAgewotICAgIHJldHVybiBzZWN1cmVQdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VjdXJlUHVibGlzaFVSTChTdHJpbmcgc2VjdXJlUHVibGlzaFVSTCkKLSAgewotICAgIHRoaXMuc2VjdXJlUHVibGlzaFVSTCA9IHNlY3VyZVB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIHZlcnNpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaE1ldGEoKXsKLQkgICAgCi0JICAgIFJlZ2lzdHJ5U2VydmljZSByZWdTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JICAgIElSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIAotCSAgICAJCi0JICAgICAgcmVnTWFuYWdlci5yZWZyZXNoTWFuYWdlcigpOwotCSAgICAgIFN0cmluZ1tdIHJlZ1VSSXMgPSByZWdNYW5hZ2VyLmdldFJlZ2lzdHJ5VVJJcygpOwotCSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVnVVJJcy5sZW5ndGg7IGkrKykKLQkgICAgICB7Ci0JICAgICAgICBSZWdpc3RyeSByZWcgPSByZWdNYW5hZ2VyLmxvYWRSZWdpc3RyeShyZWdVUklzW2ldKTsKLQkgICAgICAgIGlmIChyZWcgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIFVERElSZWdpc3RyeSB1ZGRpUmVnID0gKFVERElSZWdpc3RyeSlyZWc7Ci0JICAgICAgICAgIExpc3QgbmFtZXMgPSB1ZGRpUmVnLmdldE5hbWUoKTsKLQkgICAgICAgICAgCi0JICAgICAgICAgIGlmKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkuZXF1YWxzKGdldElucXVpcnlVUkwoKSkpewotCSAgICAgICAgICAKLQkgICAgICAgIAkgIHNldE5hbWVzKG5hbWVzKTsKLQkgICAgICAgIAkgIHNldERlc2NzKHVkZGlSZWcuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JICAgICAgICAJICBzZXRWZXJzaW9uKHVkZGlSZWcuZ2V0VmVyc2lvbigpKTsKLQkgICAgICAgIAkgIHNldERlZmF1bHRMb2dpbih1ZGRpUmVnLmdldERlZmF1bHRMb2dpbigpKTsKLQkgICAgICAgIAkgIHNldERlZmF1bHRQYXNzd29yZCh1ZGRpUmVnLmdldERlZmF1bHRQYXNzd29yZCgpKTsKLQkgICAgICAgIAkgIHNldElucXVpcnlVUkwodWRkaVJlZy5nZXREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAJICBzZXRQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0UHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAJICBzZXRTZWN1cmVJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpKTsKLQkgICAgICAgIAkgIHNldFNlY3VyZVB1Ymxpc2hVUkwodWRkaVJlZy5nZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAJICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKS5nZXRUYXhvbm9teVVSSXModWRkaVJlZykpOwotCSAgICAgICAgCSAgc2V0VGF4b25vbWllcyh0YXhvbm9taWVzKTsKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgICAgewotCSAgICAgIC8vIFRPRE86IEJldHRlciBlcnJvciByZXBvcnRpbmcKLQkgICAgICBjZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MWFkMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkwNiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5VRERJUmVnaXN0cnlTZXJ2aWNlOwotCi0vKioKLSAqIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIGEgV1NJTCBkb2N1bWVudAotICovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50Ci17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpCi0gIHsKLSAgICByZWZyZXNoKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCl7Ci0JICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSk7Ci0JICAgIFJlZ2lzdHJ5U2VydmljZSByZWdTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JICAgIElSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHJlZ01hbmFnZXIucmVmcmVzaE1hbmFnZXIoKTsKLQkgICAgICBTdHJpbmdbXSByZWdVUklzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZ1VSSXMubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgUmVnaXN0cnkgcmVnID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkocmVnVVJJc1tpXSk7Ci0JICAgICAgICBpZiAocmVnIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5KQotCSAgICAgICAgewotCSAgICAgICAgICBVRERJUmVnaXN0cnkgdWRkaVJlZyA9IChVRERJUmVnaXN0cnkpcmVnOwotCSAgICAgICAgICBMaXN0IG5hbWVzID0gdWRkaVJlZy5nZXROYW1lKCk7Ci0JICAgICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IG5hbWVzICE9IG51bGwgJiYgIW5hbWVzLmlzRW1wdHkoKSA/ICgoTmFtZSluYW1lcy5nZXQoMCkpLmdldFZhbHVlKCkgOiAiIjsKLQkgICAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQgZmF2VXNlckRlZlVERElSZWdFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KGRpc3BsYXlOYW1lLCBnZXRNb2RlbCgpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldE5hbWVzKG5hbWVzKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldERlc2NzKHVkZGlSZWcuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRWZXJzaW9uKHVkZGlSZWcuZ2V0VmVyc2lvbigpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldERlZmF1bHRMb2dpbih1ZGRpUmVnLmdldERlZmF1bHRMb2dpbigpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldERlZmF1bHRQYXNzd29yZCh1ZGRpUmVnLmdldERlZmF1bHRQYXNzd29yZCgpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldElucXVpcnlVUkwodWRkaVJlZy5nZXREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0UHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRTZWN1cmVJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldFNlY3VyZVB1Ymxpc2hVUkwodWRkaVJlZy5nZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ01hbmFnZXIubG9hZFRheG9ub21pZXMoVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpLmdldFRheG9ub215VVJJcyh1ZGRpUmVnKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRUYXhvbm9taWVzKHRheG9ub21pZXMpOwotCSAgICAgICAgICBjb25uZWN0KGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQkgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICAgIHsKLQkgICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0JICAgICAgY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0gIAotICB9Ci0gIAotICAKLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELCBTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpCi0gIHsKLSAgICAvLyBkbyBub3RoaW5nCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpCi0gIHsKLSAgICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MmJiNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1dTREw7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNFbGVtZW50IHsKLQotICBwcml2YXRlIEZhdm9yaXRlc1dTREwgd3NkbF87Ci0KLSAgcHVibGljIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB3c2RsXyA9IG5ldyBGYXZvcml0ZXNXU0RMKCk7Ci0gICAgd3NkbF8uc2V0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKSB7Ci0gICAgcmV0dXJuIHdzZGxfLmdldFNlcnZpY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICByZXR1cm4gd3NkbF8uZ2V0V3NkbFVybCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0V3NkbFVybCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODNmNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotCi0gIHB1YmxpYyBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gZmF2TWFpbkVsZW1lbnQubG9hZFdTRExTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VzW2ldOwotICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQoKHNlcnZpY2UuZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCksIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgY29ubmVjdChmYXZXU0RMU2VydmljZUVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGUgPSBnZXRGYXZvcml0ZSh3c2RsVVJMKTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgICAgcmVtb3ZlRmF2b3JpdGUoZSk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhdk1haW5FbGVtZW50LmFkZFdTRExTZXJ2aWNlKHdzZGxVUkwpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2V1NETFNlcnZpY2VFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCh3c2RsVVJMLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NETFNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCk7Ci0gICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKHdzZGxVUkwpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHJldHVybiAocmVtb3ZlRmF2b3JpdGUoKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCllbGVtZW50KS5nZXRTZXJ2aWNlKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2V1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZXU0RMU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIHdzZGxVcmwpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHdzZGxVcmwuZXF1YWxzKHdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSkpCi0gICAgICAgIHJldHVybiB3c2RsRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTSUxFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MGI2MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTSUxFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzV1NJTDsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUxFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0lMIHdzaWxfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNXU0lMRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIExpbmsgbGluaykgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB3c2lsXyA9IG5ldyBGYXZvcml0ZXNXU0lMKCk7Ci0gICAgd3NpbF8uc2V0TGluayhsaW5rKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGdldExpbmsoKSB7Ci0gICAgcmV0dXJuIHdzaWxfLmdldExpbmsoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVybCgpIHsKLSAgICByZXR1cm4gd3NpbF8uZ2V0V3NpbFVybCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0V3NpbFVybCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWE0OTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IHsKLQotICBwdWJsaWMgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgTGlua1tdIGxpbmtzID0gZmF2TWFpbkVsZW1lbnQubG9hZFdTSUxzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewotICAgICAgTGluayBsaW5rID0gbGlua3NbaV07Ci0gICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0lMRWxlbWVudChsaW5rLmdldExvY2F0aW9uKCksIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZXU0lMRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NJTF9VUkwpOwotICAgIGlmICh3c2lsVVJMID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZSA9IGdldEZhdm9yaXRlKHdzaWxVUkwpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgTGluayBsaW5rID0gZmF2TWFpbkVsZW1lbnQuYWRkV1NJTExpbmsod3NpbFVSTCk7Ci0gICAgYm9vbGVhbiBzYXZlZCA9IGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICBpZiAoc2F2ZWQpIHsKLSAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGZhdldTSUxFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTSUxFbGVtZW50KHdzaWxVUkwsIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZXU0lMRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTSUxfVVJMKTsKLSAgICBpZiAod3NpbFVSTCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUod3NpbFVSTCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NJTEVsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNXU0lMRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1dTSUxFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBMaW5rIGxpbmsgPSBlbGVtZW50LmdldExpbmsoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluaykpIHsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGZhdldTSUxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIExpbmsgbGluayA9IGZhdldTSUxFbGVtZW50LmdldExpbmsoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluayk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSk7Ci0gICAgcmV0dXJuIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKSB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0lMRWxlbWVudCBnZXRGYXZvcml0ZShTdHJpbmcgd3NpbFVybCkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHdzaWxVcmwuZXF1YWxzKHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKSkpCi0gICAgICAgIHJldHVybiB3c2lsRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTE3OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotCi0gICAgcHVibGljIEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0ODEyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0KLSAgICBwdWJsaWMgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTAwZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0KLSAgcHVibGljIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MTEwYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYWM4ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTliMzU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTWFpbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU2MDEwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNNYWluTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNNYWluRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTWFpbk5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzTWFpbk5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgMSwgImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFVEREkgUmVnaXN0cnkgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VERElfUkVHSVNUUklFU19GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlKGZhdlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdlVERElSZWdpc3RyeUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVRERJUmVnaXN0cnlGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFVzZXIgZGVmaW5lZCBVRERJIFJlZ2lzdHJ5IEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50IGZhdlVzZXJEZWZVRERJRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSSUVTX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZVc2VyRGVmVURESUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSBmYXZVc2VyRGVmVURESUZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUoZmF2VXNlckRlZlVERElGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVc2VyRGVmVURESUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVc2VyRGVmVURESUZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVc2VyRGVmVURESUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIEJ1c2luZXNzIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQgZmF2VURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX0JVU0lORVNTRVNfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdlVERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlIGZhdlVERElCdXNpbmVzc0ZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZShmYXZVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJQnVzaW5lc3NGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2VURESUJ1c2luZXNzRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIFNlcnZpY2UgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50IGZhdlVERElTZXJ2aWNlRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VURESVNlcnZpY2VGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUgZmF2VURESVNlcnZpY2VGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyTm9kZShmYXZVRERJU2VydmljZUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdlVERElTZXJ2aWNlRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2UgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50IGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VERElfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUgZmF2VURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZShmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFdTSUwgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQgZmF2V1NJTEZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1dTSUxfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdldTSUxGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUgZmF2V1NJTEZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUoZmF2V1NJTEZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdldTSUxGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2V1NJTEZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZXU0lMRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFdTREwgU2VydmljZSBGb2xkZXIgTm9kZQotICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQgZmF2V1NETFNlcnZpY2VGb2xkZXJFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZXU0RMU2VydmljZUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZSBmYXZXU0RMU2VydmljZUZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlKGZhdldTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgYWRkQ2hpbGQoZmF2V1NETFNlcnZpY2VGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2V1NETFNlcnZpY2VGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2V1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LmluaXQoKEZhdm9yaXRlc01haW5FbGVtZW50KXRyZWVFbGVtZW50KTsKLQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtc2cpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIHJldHVybiBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKG1zZyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNWQwYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvbGRlck5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSBleHRlbmRzIEZvbGRlck5vZGUgewotCi0gICAgcHVibGljIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLCBmYWxzZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiODdkNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUgewotCi0gICAgcHVibGljIEZhdm9yaXRlc05hdmlnYXRvck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoLCBTdHJpbmcgaW1hZ2VQYXRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKSB7Ci0gICAgICAgIHJldHVybiBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sIGZhbHNlKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1BlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNQZXJzcGVjdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTQ5OGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1BlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGV4dGVuZHMgUGVyc3BlY3RpdmUKLXsKLSAgICBwcml2YXRlIEJhc2ljTW9kZWwgbW9kZWxfOwotICAgIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICAgIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzUGVyc3BlY3RpdmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoImZhdm9yaXRlcyIsY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICAgIHsKLSAgICAgICAgbW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoIkZhdm9yaXRlc01vZGVsIik7Ci0gICAgICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdm9yaXRlc01haW5FbGVtZW50ID0gbmV3IEZhdm9yaXRlc01haW5FbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19NQUlOX05PREUiKSwgbW9kZWxfLCBjb250cm9sbGVyXyk7Ci0gICAgICAgIG1vZGVsXy5zZXRSb290RWxlbWVudChmYXZvcml0ZXNNYWluRWxlbWVudCk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IG5ldyBOb2RlTWFuYWdlcihjb250cm9sbGVyXyk7Ci0gICAgICAgIEZhdm9yaXRlc01haW5Ob2RlIGZhdk1haW5Ob2RlID0gbmV3IEZhdm9yaXRlc01haW5Ob2RlKGZhdm9yaXRlc01haW5FbGVtZW50LCBub2RlTWFuYWdlcl8pOwotICAgICAgICBub2RlTWFuYWdlcl8uc2V0Um9vdE5vZGUoZmF2TWFpbk5vZGUpOwotICAgICAgICAKLSAgICAgICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgICAgIGlmICghRGlyVXRpbHMuaXNSVEwoKSkKLSAgICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIjMwJSwqIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiKiwzMCUiOwotICAgICAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgICAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsgICAgICAgIAotICAgIH0KLQotICAgIHB1YmxpYyBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpIHsKLSAgICAgICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYW5lc0ZpbGUoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2TmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJmYXZQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2U3RhdHVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJmYXZQcm9wZXJ0aWVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgICB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgICB7Ci0gICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2YzZjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzU2V0RGVmYXVsdFZpZXdUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlYzRmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2V0RGVmYXVsdFZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1NldERlZmF1bHRWaWV3VG9vbCBleHRlbmRzIFNldERlZmF1bHRWaWV3VG9vbCB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1NldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQsIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCBmYWxzZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NjE1MzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjJmY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUgZmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1MiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2M4YTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfQlVTSU5FU1NfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmNmNkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2MGExMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgcmVnRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbWFnZVBhdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGNhdGVnb3JpZXNEaXJlY3Rvcnksbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ0VsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBjYXRlZ29yeURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yaWVzRGlyZWN0b3J5LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBjYXRlZ29yeUZpbGVzID0gY2F0ZWdvcnlEaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5RmlsZXMgIT0gbnVsbCAmJiBjYXRlZ29yeUZpbGVzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUgZmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlKHJlZ0VsZW1lbnQsIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEsIGltYWdlUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9SRUdJU1RSWSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZjI4MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9SRUdJU1RSWV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZjRlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMxNGQyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUgZmF2b3JpdGVzVURESVNlcnZpY2VOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzVURESVNlcnZpY2VOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IExpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOTJlN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnREZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZjY2NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZSBmYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODZjY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX2ludGVyZmFjZV9ub2RlLmdpZiIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhYjc3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAiZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2Vfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5NTcyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmZjMGVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFKSkKLSAgICAgICAgewotICAgICAgICAgIFRyZWVFbGVtZW50IHJlZ0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZyBpbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X25vZGUuZ2lmIjsKLSAgICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSBmYXZVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSA9IG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZShyZWdFbGVtZW50LCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxLCBpbWFnZVBhdGgpOwotICAgICAgICAgIGFkZENoaWxkKGZhdlVzZXJEZWZVRERJUmVnaXN0cnlOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlkiKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkgewotICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXywgZmFsc2UpOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjE3NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCwgU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUyIpKTsKLSAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDBlNTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NETERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZjQ4ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlIGZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVXU0RMU2VydmljZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0UiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMU2VydmljZU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM0MTZhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMU2VydmljZU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAiZmF2b3JpdGVzL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzV1NETERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0RMX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAyYjgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NJTERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTSUxEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGY0NjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMRm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNXU0lMRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNXU0lMTm9kZSBmYXZvcml0ZXNXU0lMTm9kZSA9IG5ldyBGYXZvcml0ZXNXU0lMTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzV1NJTE5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVXU0lMVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1dTSUwiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZjJkMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUxOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1dTSUxOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvd3NpbF9ub2RlLmdpZiIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1dTSUxfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWE4ZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGNkMTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYWYyNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjQ5YzBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZVZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWI4Yzk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlWaWV3LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjIwODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NJTFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTSUxUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ODMyNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NJTFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlV1NJTFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVdTSUxUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9SZW1vdmVGYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9SZW1vdmVGYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NjcyZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvUmVtb3ZlRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5SZW1vdmVGYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotCi0gICAgcHVibGljIFJlbW92ZUZhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWN0aW9uVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BY3Rpb25Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzM2VkZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BY3Rpb25Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFjdGlvblRvb2wgZXh0ZW5kcyBUb29sCi17Ci0gIHB1YmxpYyBBY3Rpb25Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlTGluayxoaWdobGlnaHRlZEltYWdlTGluayxhbHQsVG9vbFR5cGVzLkFDVElPTik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYzZDQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwdWJsaWMgQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwiaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9CcmVhZENydW1iLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0JyZWFkQ3J1bWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5N2MyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0JyZWFkQ3J1bWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotLy8gQSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBhIGJyb3dlciBicmVhZGNydW1iLiBFYWNoIGJyZWFkY3J1bWIgZW5jYXBzdWxhdGVzCi0vLyBhIG5hdmlnYXRlZCBVUkwuCi1wdWJsaWMgY2xhc3MgQnJlYWRDcnVtYgotewotICBwcml2YXRlIGludCBwZXJzcGVjdGl2ZUlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJsXzsKLQotICBwdWJsaWMgQnJlYWRDcnVtYihpbnQgcGVyc3BlY3RpdmVJZCxTdHJpbmcgdXJsKQotICB7Ci0gICAgcGVyc3BlY3RpdmVJZF8gPSBwZXJzcGVjdGl2ZUlkOwotICAgIHVybF8gPSB1cmw7Ci0gIH0KLQotICAvKioKLSAgKiBHZXQgdGhlIFVSTCBhc3NvY2lhdGVkIHdpdGggdGhpcyBicmVhZGNydW1iLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBVUkwuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJMKCkKLSAgewotICAgIHJldHVybiB1cmxfOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBJRCBvZiB0aGUgcGVyc3BlY3RpdmUgd2hlcmUgdGhpcyBicmVhZGNydW1iIGJlbG9uZ3MuCi0gICogQHJldHVybiBpbnQgVGhlIHBlcnNwZWN0aXZlSUQgYXMgZGVmaW5lZCBpbiBBY3Rpb25JbnB1dHMuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVJZF87Ci0gIH0KLQotICAvKioKLSAgKiBUZXN0IGVxdWFsaXR5IGJldHdlZW4gdGhpcyBicmVhZGNydW1iIGFuZCBhbm90aGVyLiBCb3RoIHRoZSBVUkxzIGFuZCBwZXJzcGVjdGl2ZQotICAqIElEcyBtdXN0IGJlIGVxdWFsIGZvciB0d28gYnJlYWRjcnVtYnMgdG8gYmUgZXF1YWwuCi0gICogQHBhcmFtIEJyZWFkQ3J1bWIgQSBicmVhZGNydW1iLgotICAqIEByZXR1cm4gYm9vbGVhbiBUaGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSB0ZXN0LgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoQnJlYWRDcnVtYiBiKQotICB7Ci0gICAgcmV0dXJuICgodXJsXy5lcXVhbHMoYi5nZXRVUkwoKSkpICYmIChwZXJzcGVjdGl2ZUlkXyA9PSBiLmdldFBlcnNwZWN0aXZlSWQoKSkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0NvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk3ODdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5BY3Rpb25FbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBNZXNzYWdlUHJvdmlkZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgc2Vzc2lvbklkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RhdGVMb2NhdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoXzsKLSAgcHJpdmF0ZSBpbnQgaGlzdG9yeURpcmVjdGlvbl87Ci0gIHByaXZhdGUgSGlzdG9yeSBoaXN0b3J5XzsKLSAgcHJpdmF0ZSBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmtfOwotICBwcml2YXRlIEFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmU7Ci0gIAotICAvLyBXU0RMIEJyb3dzZXIKLSAgcHJpdmF0ZSBpbnQgd3NkbFR5cGVfOwotCi0gIHB1YmxpYyBDb250cm9sbGVyKCkKLSAgewotICAgIHN1cGVyKCJleHBsb3JlciIpOwotICAgIGNvbnRleHRQYXRoXyA9IG51bGw7Ci0Jc3RhdGVMb2NhdGlvbl8gPSBudWxsOwotICAgIGhpc3RvcnlfID0gbmV3IEhpc3RvcnkoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmVfID0gbmV3IFVERElQZXJzcGVjdGl2ZSh0aGlzKTsKLSAgICB3c2lsUGVyc3BlY3RpdmVfID0gbmV3IFdTSUxQZXJzcGVjdGl2ZSh0aGlzKTsKLSAgICB3c2RsUGVyc3BlY3RpdmVfID0gbmV3IFdTRExQZXJzcGVjdGl2ZSh0aGlzKTsKLSAgICBmYXZvcml0ZXNQZXJzcGVjdGl2ZV8gPSBuZXcgRmF2b3JpdGVzUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHBlcnNwZWN0aXZlIHRvIFVEREkuCi0gICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHVkZGlQZXJzcGVjdGl2ZV87Ci0gICAgaGlzdG9yeURpcmVjdGlvbl8gPSBBY3Rpb25JbnB1dHMuSlVNUF9CQUNLOwotICAgIHdzZGxUeXBlXyA9IEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0U7Ci0gICAgaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFua18gPSB0cnVlOwotICAgIGFjdGlvbkVuZ2luZSA9IG5ldyBBY3Rpb25FbmdpbmUodGhpcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0YXRlTG9jYXRpb24oU3RyaW5nIHN0YXRlTG9jYXRpb24pCi0gIHsKLQlzdGF0ZUxvY2F0aW9uXyA9IHN0YXRlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikKLSAgewotCSAgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uXyA9IGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbjsKLSAgfQotICAKLSAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgQ29udHJvbGxlciBiZWFuIGlzIGluc3RhbnRpYXRlZC4KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNldENvbnRleHRQYXRoKFN0cmluZyBjb250ZXh0UGF0aCkKLSAgewotICAgIGlmIChjb250ZXh0UGF0aF8gPT0gbnVsbCkKLSAgICAgIGNvbnRleHRQYXRoXyA9IGNvbnRleHRQYXRoOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhdGhXaXRoQ29udGV4dChTdHJpbmcgcmVsYXRpdmVQYXRoKQotICB7Ci0gICAgaWYgKHJlbGF0aXZlUGF0aCA9PSBudWxsKQotICAgICAgcmV0dXJuIHJlbGF0aXZlUGF0aDsKLSAgICBTdHJpbmdCdWZmZXIgcGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIocmVsYXRpdmVQYXRoKTsKLSAgICBpZiAoY29udGV4dFBhdGhfICE9IG51bGwpCi0gICAgICBwYXRoLmluc2VydCgwLCcvJykuaW5zZXJ0KDAsY29udGV4dFBhdGhfKTsKLSAgICByZXR1cm4gcGF0aC50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTZXNzaW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlc3Npb25JZF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q29udGV4dFBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRQYXRoXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpIHsKLQlyZXR1cm4gc3RhdGVMb2NhdGlvbl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uICgpIHsKLQlyZXR1cm4gZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdChTdHJpbmcgc2Vzc2lvbklkLFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uLFN0cmluZyBjb250ZXh0UGF0aCkKLSAgewotICAgIHNlc3Npb25JZF8gPSBzZXNzaW9uSWQ7Ci0gICAgc2V0Q29udGV4dFBhdGgoY29udGV4dFBhdGgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZV8uaW5pdFBlcnNwZWN0aXZlKGFwcGxpY2F0aW9uKTsKLSAgICB3c2lsUGVyc3BlY3RpdmVfLmluaXRQZXJzcGVjdGl2ZShhcHBsaWNhdGlvbik7Ci0gICAgd3NkbFBlcnNwZWN0aXZlXy5pbml0UGVyc3BlY3RpdmUoYXBwbGljYXRpb24pOwotICAgIGZhdm9yaXRlc1BlcnNwZWN0aXZlXy5pbml0UGVyc3BlY3RpdmUoYXBwbGljYXRpb24pOwotICB9Ci0KLSAgLy8gU2V0dGVyIGZvciB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q3VycmVudFBlcnNwZWN0aXZlKGludCBwZXJzcGVjdGl2ZSkKLSAgewotICAgIHN3aXRjaCAocGVyc3BlY3RpdmUpCi0gICAgewotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESToKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHVkZGlQZXJzcGVjdGl2ZV87Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDoKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHdzaWxQZXJzcGVjdGl2ZV87Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDoKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHdzZGxQZXJzcGVjdGl2ZV87Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOgotICAgICAgICBjdXJyZW50UGVyc3BlY3RpdmVfID0gZmF2b3JpdGVzUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBHZXR0ZXIgZm9yIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlLgotICBwdWJsaWMgZmluYWwgUGVyc3BlY3RpdmUgZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkKLSAgewotICAgIHJldHVybiBjdXJyZW50UGVyc3BlY3RpdmVfOwotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgVURESSBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFVERElQZXJzcGVjdGl2ZSBnZXRVRERJUGVyc3BlY3RpdmUoKQotICB7Ci0gICAgcmV0dXJuIHVkZGlQZXJzcGVjdGl2ZV87Ci0gIH0KLQotICAvLyBHZXR0ZXIgZm9yIHRoZSBXU0lMIHBlcnNwZWN0aXZlLgotICBwdWJsaWMgZmluYWwgV1NJTFBlcnNwZWN0aXZlIGdldFdTSUxQZXJzcGVjdGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gd3NpbFBlcnNwZWN0aXZlXzsKLSAgfQotICAKLSAgLy8gR2V0dGVyIGZvciB0aGUgV1NETCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFdTRExQZXJzcGVjdGl2ZSBnZXRXU0RMUGVyc3BlY3RpdmUoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxQZXJzcGVjdGl2ZV87Ci0gIH0KLQotICAvLyBHZXR0ZXIgZm9yIHRoZSBGYXZvcml0ZXMgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBnZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpIHsKLSAgICByZXR1cm4gZmF2b3JpdGVzUGVyc3BlY3RpdmVfOwotICB9Ci0gIAotICAvLyBHZXR0ZXIgZm9yIHRoZSBhY3Rpb24gZW5naW5lCi0gIHB1YmxpYyBmaW5hbCBBY3Rpb25FbmdpbmUgZ2V0QWN0aW9uRW5naW5lKCkgewotICAgIHJldHVybiBhY3Rpb25FbmdpbmU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRUb0hpc3RvcnkoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIGlmICh1cmwgIT0gbnVsbCkKLSAgICAgIHJldHVybiBoaXN0b3J5Xy5hZGRCcmVhZENydW1iKG5ldyBCcmVhZENydW1iKHBlcnNwZWN0aXZlSWQsdXJsKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gV3JhcHBlciBmb3IgbW92aW5nIGZvcndhcmQgaW4gdGhlIGhpc3RvcnkgbGlzdCBhbmQgb2J0YWluaW5nIHRoZSBicmVhZGNydW1iLgotICBwdWJsaWMgZmluYWwgQnJlYWRDcnVtYiBmb3J3YXJkKCkKLSAgewotICAgIGhpc3RvcnlEaXJlY3Rpb25fID0gQWN0aW9uSW5wdXRzLkpVTVBfRk9SV0FSRDsKLSAgICByZXR1cm4gaGlzdG9yeV8uZm9yd2FyZCgpOwotICB9Ci0KLSAgLy8gV3JhcHBlciBmb3IgbW92aW5nIGJhY2sgaW4gdGhlIGhpc3RvcnkgbGlzdCBhbmQgb2J0YWluaW5nIHRoZSBicmVhZGNydW1iLgotICBwdWJsaWMgZmluYWwgQnJlYWRDcnVtYiBiYWNrKCkKLSAgewotICAgIGhpc3RvcnlEaXJlY3Rpb25fID0gQWN0aW9uSW5wdXRzLkpVTVBfQkFDSzsKLSAgICByZXR1cm4gaGlzdG9yeV8uYmFjaygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRIaXN0b3J5RGlyZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBoaXN0b3J5RGlyZWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByb2Nlc3NTdGFsZUJyZWFkQ3J1bWIoKQotICB7Ci0gICAgaGlzdG9yeV8ucmVtb3ZlQ3VycmVudEJyZWFkQ3J1bWIoKTsKLSAgfQotICAKLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFdTRExUeXBlKGludCB3c2RsVHlwZSkKLSAgewotICAgIHdzZGxUeXBlXyA9IHdzZGxUeXBlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRXU0RMVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rKCkKLSAgewotICAgIHJldHVybiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlUGVyc3BlY3RpdmVDb250ZW50QmxhbmsoYm9vbGVhbiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rKQotICB7Ci0gICAgaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFua18gPSBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBkdW1wSGlzdG9yeSgpCi0gIHsKLSAgICBoaXN0b3J5Xy5kdW1wKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTM5MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRm9sZGVyTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIEZvbGRlck5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsImltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZiIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAiaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyZjQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvcm1Ub29sIGV4dGVuZHMgVG9vbCBpbXBsZW1lbnRzIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwcm90ZWN0ZWQgRm9ybVRvb2xQcm9wZXJ0aWVzIGZvcm1Ub29sUHJvcGVydGllc187Ci0KLSAgcHVibGljIEZvcm1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlTGluayxoaWdobGlnaHRlZEltYWdlTGluayxhbHQsVG9vbFR5cGVzLkZPUk0pOwotICAgIGZvcm1Ub29sUHJvcGVydGllc18gPSBuZXcgRm9ybVRvb2xQcm9wZXJ0aWVzKCk7Ci0gICAgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldFByb3BlcnR5KE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gZm9ybVRvb2xQcm9wZXJ0aWVzXy5nZXRQcm9wZXJ0eShrZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHkoT2JqZWN0IGtleSxPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLnNldFByb3BlcnR5KGtleSx2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5yZW1vdmVQcm9wZXJ0eShrZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCB1cGRhdGVQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBuZXdQcm9wZXJ0eVRhYmxlKQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy51cGRhdGVQcm9wZXJ0eVRhYmxlKG5ld1Byb3BlcnR5VGFibGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgbmV3UHJvcGVydHlUYWJsZSkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uc2V0UHJvcGVydHlUYWJsZShuZXdQcm9wZXJ0eVRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGZsYWdFcnJvcihPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmZsYWdFcnJvcihpbnB1dEtleSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmZsYWdSb3dFcnJvcihpbnB1dEtleSxyb3dOdW1iZXIpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uZmxhZ1Jvd0Vycm9yKGlucHV0S2V5LHJvd0lkKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyRXJyb3JzKCkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uY2xlYXJFcnJvcnMoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzSW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICByZXR1cm4gZm9ybVRvb2xQcm9wZXJ0aWVzXy5pc0lucHV0VmFsaWQoaW5wdXRLZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uaXNSb3dJbnB1dFZhbGlkKGlucHV0S2V5LFN0cmluZy52YWx1ZU9mKHJvd051bWJlcikpOwotICB9Ci0gIAotICAvLyBUaGUgcm93IG51bWJlciBtYXkgYWxzbyBiZSByZXByZXNlbnRlZCBieSBhIHVuaXF1ZSBvYmplY3QgKGUuZy4gVVVJRCkKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxPYmplY3Qgcm93SWQpCi0gIHsKLSAgICByZXR1cm4gZm9ybVRvb2xQcm9wZXJ0aWVzXy5pc1Jvd0lucHV0VmFsaWQoaW5wdXRLZXkscm93SWQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sUHJvcGVydGllcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBjZjc5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sUHJvcGVydGllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgY2xhc3MgRm9ybVRvb2xQcm9wZXJ0aWVzIGltcGxlbWVudHMgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHByb3BlcnR5VGFibGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBlcnJhbnRWYWx1ZXNfOwotCi0gIHB1YmxpYyBGb3JtVG9vbFByb3BlcnRpZXMoKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZXJyYW50VmFsdWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBPYmplY3QgZ2V0UHJvcGVydHkoT2JqZWN0IGtleSkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXy5nZXQoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5KE9iamVjdCBrZXksT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleSx2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhclByb3BlcnR5VGFibGUoKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8uY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHVwZGF0ZVByb3BlcnR5VGFibGUoSGFzaHRhYmxlIG5ld1Byb3BlcnR5VGFibGUpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gbmV3UHJvcGVydHlUYWJsZS5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleSxuZXdQcm9wZXJ0eVRhYmxlLmdldChrZXkpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBuZXdQcm9wZXJ0eVRhYmxlKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdXBkYXRlUHJvcGVydHlUYWJsZShuZXdQcm9wZXJ0eVRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGZsYWdFcnJvcihPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICBpZiAoaXNJbnB1dFZhbGlkKGlucHV0S2V5KSkKLSAgICAgIGVycmFudFZhbHVlc18ucHV0KGlucHV0S2V5LEJvb2xlYW4uVFJVRSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpCi0gIHsKLSAgICBmbGFnUm93RXJyb3IoaW5wdXRLZXksU3RyaW5nLnZhbHVlT2Yocm93TnVtYmVyKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGZsYWdSb3dFcnJvcihPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKQotICB7Ci0gICAgT2JqZWN0IGVycm9yT2JqZWN0ID0gZXJyYW50VmFsdWVzXy5nZXQoaW5wdXRLZXkpOwotICAgIEhhc2h0YWJsZSByb3dIYXNoOwotICAgIGlmIChlcnJvck9iamVjdCBpbnN0YW5jZW9mIEhhc2h0YWJsZSkKLSAgICAgIHJvd0hhc2ggPSAoSGFzaHRhYmxlKWVycm9yT2JqZWN0OwotICAgIGVsc2UKLSAgICAgIHJvd0hhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcm93SGFzaC5wdXQocm93SWQsQm9vbGVhbi5UUlVFKTsKLSAgICBlcnJhbnRWYWx1ZXNfLnB1dChpbnB1dEtleSxyb3dIYXNoKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJFcnJvcnMoKQotICB7Ci0gICAgZXJyYW50VmFsdWVzXy5jbGVhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSkKLSAgewotICAgIHJldHVybiAoZXJyYW50VmFsdWVzXy5nZXQoaW5wdXRLZXkpID09IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgcmV0dXJuIGlzUm93SW5wdXRWYWxpZChpbnB1dEtleSxTdHJpbmcudmFsdWVPZihyb3dOdW1iZXIpKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxPYmplY3Qgcm93SWQpCi0gIHsKLSAgICBIYXNodGFibGUgcm93SGFzaCA9IChIYXNodGFibGUpZXJyYW50VmFsdWVzXy5nZXQoaW5wdXRLZXkpOwotICAgIGlmIChyb3dIYXNoID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gKHJvd0hhc2guZ2V0KHJvd0lkKSA9PSBudWxsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMDc0NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIC8vIEdldHRlciBhbmQgU2V0dGVyIGZvciBhIHByb3BlcnR5LgotICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGdldFByb3BlcnR5KE9iamVjdCBrZXkpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcm9wZXJ0eShPYmplY3Qga2V5LE9iamVjdCB2YWx1ZSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZVByb3BlcnR5KE9iamVjdCBrZXkpOwotCi0gIC8vIFByb3BlcnR5IHRhYmxlIG9wZXJhdG9ycy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVwZGF0ZVByb3BlcnR5VGFibGUoSGFzaHRhYmxlIHByb3BlcnR5VGFibGUpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlKTsKLQotICAvLyBFcnJvciBoYW5kbGluZy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgZmxhZ0Vycm9yKE9iamVjdCBpbnB1dEtleSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsYWdSb3dFcnJvcihPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcik7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsYWdSb3dFcnJvcihPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY2xlYXJFcnJvcnMoKTsKLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcik7Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSGlzdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9IaXN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MDJkNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9IaXN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vLyBBIGNsYXNzIHJlcHJlc2VudGluZyBhIFZlY3RvciBvZiBicmVhZGNydW1icy4gQSBwb3NpdGlvbiBpbmRleCBpcyB1c2VkCi0vLyB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBkYXRhIHN0cnVjdHVyZS4KLXB1YmxpYyBjbGFzcyBIaXN0b3J5Ci17Ci0gIHByaXZhdGUgVmVjdG9yIGl0ZW1zXzsKLSAgcHJpdmF0ZSBpbnQgcG9zaXRpb25fOwotCi0gIHB1YmxpYyBIaXN0b3J5KCkKLSAgewotICAgIGl0ZW1zXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBwb3NpdGlvbl8gPSAtMTsKLSAgfQotCi0gIC8vIEFkZCBhIG5ldyBicmVhZGNydW1iIHRvIHRoZSBoaXN0b3J5IGxpc3QuIFdoZW4gYWRkaW5nIGEgbmV3IGJyZWFkY3J1bWIKLSAgLy8gd2l0aGluIHRoZSBjdXJyZW50IGxpc3QsIGFsbCBicmVhZGNydW1icyBhZnRlciB0aGUgbmV3bHkgYWRkZWQgb25lIGFyZQotICAvLyByZW1vdmVkLgotICBwdWJsaWMgYm9vbGVhbiBhZGRCcmVhZENydW1iKEJyZWFkQ3J1bWIgYikKLSAgewotICAgIGludCBudW1iZXJPZkl0ZW1zID0gaXRlbXNfLnNpemUoKTsKLSAgICBpZiAobnVtYmVyT2ZJdGVtcyA9PSAwKQotICAgIHsKLSAgICAgIHBvc2l0aW9uXysrOwotICAgICAgaXRlbXNfLmFkZEVsZW1lbnQoYik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEJyZWFkQ3J1bWIgY3VycmVudEJyZWFkQ3J1bWIgPSAoQnJlYWRDcnVtYilpdGVtc18uZWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgICBpZiAoIWN1cnJlbnRCcmVhZENydW1iLmVxdWFscyhiKSkKLSAgICAgIHsKLSAgICAgICAgcG9zaXRpb25fKys7Ci0gICAgICAgIGl0ZW1zXy5pbnNlcnRFbGVtZW50QXQoYixwb3NpdGlvbl8pOwotICAgICAgICBmb3IgKGludCBpPWl0ZW1zXy5zaXplKCktMTtpPnBvc2l0aW9uXztpLS0pCi0gICAgICAgICAgaXRlbXNfLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE1vdmUgZm9yd2FyZCB3aXRoaW4gdGhlIGhpc3RvcnkgbGlzdCBhbmQgb2J0YWluIHRoZSBicmVhZGNydW1iLgotICBwdWJsaWMgQnJlYWRDcnVtYiBmb3J3YXJkKCkKLSAgewotICAgIGlmIChwb3NpdGlvbl8gPCBpdGVtc18uc2l6ZSgpLTEpCi0gICAgewotICAgICAgcG9zaXRpb25fKys7Ci0gICAgICBCcmVhZENydW1iIGIgPSAoQnJlYWRDcnVtYilpdGVtc18uZWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgICByZXR1cm4gYjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyBNb3ZlIGJhY2sgd2l0aGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbiB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIEJyZWFkQ3J1bWIgYmFjaygpCi0gIHsKLSAgICBpZiAocG9zaXRpb25fID4gMCkKLSAgICB7Ci0gICAgICBwb3NpdGlvbl8tLTsKLSAgICAgIEJyZWFkQ3J1bWIgYiA9IChCcmVhZENydW1iKWl0ZW1zXy5lbGVtZW50QXQocG9zaXRpb25fKTsKLSAgICAgIHJldHVybiBiOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUN1cnJlbnRCcmVhZENydW1iKCkKLSAgewotICAgIGl0ZW1zXy5yZW1vdmVFbGVtZW50QXQocG9zaXRpb25fKTsKLSAgICBpZiAocG9zaXRpb25fID4gaXRlbXNfLnNpemUoKS0xKQotICAgICAgcG9zaXRpb25fLS07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGR1bXAoKQotICB7Ci0gICAgZm9yIChpbnQgaT0wO2k8aXRlbXNfLnNpemUoKTtpKyspCi0gICAgewotICAgICAgaXRlbXNfLmVsZW1lbnRBdChpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTFiYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvaW1wb3J0X2ZzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGMzZWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIEltcG9ydFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoT3B0aW9uc01hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoT3B0aW9uc01hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2N2JlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaE9wdGlvbnNNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNTA2ICAgMjAyOTQ1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEFsbG93IFdTRSB0byBiZSBsYXVuY2hlZCBmcm9tIGEgV1NJTCBmaWxlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hPcHRpb25zTWFuYWdlcgotewotICBwcml2YXRlIHN0YXRpYyBMYXVuY2hPcHRpb25zTWFuYWdlciBpbnN0YW5jZV87Ci0KLSAgcHJpdmF0ZSBIYXNodGFibGUgb3B0aW9uc1RhYmxlXzsKLQotICBwcml2YXRlIExhdW5jaE9wdGlvbnNNYW5hZ2VyKCkKLSAgewotICAgIG9wdGlvbnNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExhdW5jaE9wdGlvbnNNYW5hZ2VyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBMYXVuY2hPcHRpb25zTWFuYWdlcigpOwotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbWFuYWdlKFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSwgU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICBtYW5hZ2VTZXNzaW9uKGtleSwgKFN0cmluZyl2YWx1ZSwgYXBwbGljYXRpb24pOwotICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgSGFzaHRhYmxlKQotICAgICAgbWFuYWdlT3B0aW9ucyhrZXksIChIYXNodGFibGUpdmFsdWUsIGFwcGxpY2F0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBtYW5hZ2VTZXNzaW9uKFN0cmluZyBrZXksIFN0cmluZyBzZXNzaW9uSWQsIFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgT2JqZWN0IG9iaiA9IG9wdGlvbnNUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gICAgaWYgKG9iaiAhPSBudWxsICYmIChvYmogaW5zdGFuY2VvZiBIYXNodGFibGUpKQotICAgICAgbG9hZE9wdGlvbnMoc2Vzc2lvbklkLCAoSGFzaHRhYmxlKW9iaiwgYXBwbGljYXRpb24pOwotICAgIGVsc2UKLSAgICAgIG9wdGlvbnNUYWJsZV8ucHV0KGtleSwgc2Vzc2lvbklkKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBtYW5hZ2VPcHRpb25zKFN0cmluZyBrZXksIEhhc2h0YWJsZSBvcHRpb25zLCBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIE9iamVjdCBvYmogPSBvcHRpb25zVGFibGVfLnJlbW92ZShrZXkpOwotICAgIGlmIChvYmogIT0gbnVsbCAmJiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKSkKLSAgICAgIGxvYWRPcHRpb25zKChTdHJpbmcpb2JqLCBvcHRpb25zLCBhcHBsaWNhdGlvbik7Ci0gICAgZWxzZQotICAgICAgb3B0aW9uc1RhYmxlXy5wdXQoa2V5LCBvcHRpb25zKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2FkT3B0aW9ucyhTdHJpbmcgc2Vzc2lvbklkLCBIYXNodGFibGUgb3B0aW9ucywgU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBIdHRwU2Vzc2lvbiBodHRwU2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgICBpZiAoaHR0cFNlc3Npb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlcilodHRwU2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLQkgIFN0cmluZ1tdIHN0YXRlTG9jYXRpb25zID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04pOwotCSAgU3RyaW5nW10gZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9ucyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLkRFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OKTsKLSAgICAgIFN0cmluZ1tdIGlucXVpcnlVUkxzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuSU5RVUlSWV9VUkwpOwotICAgICAgU3RyaW5nW10gcHVibGlzaFVSTHMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmdbXSBzZXJ2aWNlTmFtZXMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5TRVJWSUNFX05BTUUpOwotICAgICAgU3RyaW5nW10gc2VydmljZUtleXMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5TRVJWSUNFX0tFWSk7Ci0gICAgICBTdHJpbmdbXSB3c2RsVVJMcyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLldTRExfVVJMKTsKLSAgICAgIFN0cmluZ1tdIHdzaWxVUkxzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuV1NJTF9VUkwpOwotICAgICAgU3RyaW5nW10gZW5kcG9pbnRzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQpOwotICAgICAgU3RyaW5nW10gc2VydmljZVFOYW1lU3RyaW5ncyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfUU5BTUVfU1RSSU5HKTsKLSAgICAgIFN0cmluZ1tdIGJpbmRpbmdOYW1lU3RyaW5ncyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLkJJTkRJTkdfTkFNRV9TVFJJTkcpOwotCSAgU3RyaW5nIHN0YXRlTG9jYXRpb24gPSAoc3RhdGVMb2NhdGlvbnMgPT0gbnVsbCB8fCBzdGF0ZUxvY2F0aW9ucy5sZW5ndGggPT0gMCkgPyBudWxsIDogc3RhdGVMb2NhdGlvbnNbMF07Ci0JICBjb250cm9sbGVyLnNldFN0YXRlTG9jYXRpb24oc3RhdGVMb2NhdGlvbik7Ci0JICBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gKGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbnMgPT0gbnVsbCB8fCBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zLmxlbmd0aCA9PSAwKSA/IG51bGwgOiBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zWzBdOwotCSAgY29udHJvbGxlci5zZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsKLSAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnByZWxvYWRVRERJUmVnaXN0cmllcyhpbnF1aXJ5VVJMcywgcHVibGlzaFVSTHMpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnByZWxvYWRTZXJ2aWNlcyhpbnF1aXJ5VVJMcyxzZXJ2aWNlTmFtZXMsc2VydmljZUtleXMpOwotICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlbG9hZFdTREwod3NkbFVSTHMpOwotICAgICAgd3NkbFBlcnNwZWN0aXZlLnByZWxvYWRFbmRwb2ludHMod3NkbFVSTHMsIGVuZHBvaW50cyk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlc2VsZWN0U2VydmljZU9yQmluZGluZyh3c2RsVVJMcyxzZXJ2aWNlUU5hbWVTdHJpbmdzLGJpbmRpbmdOYW1lU3RyaW5ncyk7Ci0gICAgICAKLSAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgd3NpbFBlcnNwZWN0aXZlLnByZWxvYWRXU0lMKCB3c2lsVVJMcyApOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWIzZDNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9sYXVuY2hfd3N3aXphcmRfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZUJ1bmRsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlQnVuZGxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTVkNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlQnVuZGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8qKgotKiBBbiBtZXNzYWdlIGJ1bmRsZSBpcyBhIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMgZHJhd24gZnJvbSBzb21lCi0qIHNldCBvZiBwcm9wZXJ0aWVzLgotKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlQnVuZGxlCi17Ci0gIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgZlJlc291cmNlQnVuZGxlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgTWVzc2FnZUJ1bmRsZSBmcm9tIHRoZSBnaXZlbiBSZXNvdXJjZUJ1bmRsZS4KLSAgKi8KLSAgcHVibGljIE1lc3NhZ2VCdW5kbGUgKCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZSApCi0gIHsKLSAgICBmUmVzb3VyY2VCdW5kbGUgPSByZXNvdXJjZUJ1bmRsZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmllZCBieSBtZXNzYWdlSWQuCi0gICogQHBhcmFtIG1lc3NhZ2VJZCBUaGUgbWVzc2FnZSBJRC4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbWVzc2FnZSB0ZXh0LgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcgbWVzc2FnZUlkICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBmUmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKG1lc3NhZ2VJZCk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbWVzc2FnZUlkOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmllZCBieSBtZXNzYWdlSWQuCi0gICogQHBhcmFtIG1lc3NhZ2VJZCBUaGUgbWVzc2FnZSBJRC4KLSAgKiBAcGFyYW0gc3ViIEEgc3Vic3RpdHV0aW9uIHZhbHVlIGZvciAiJTEiIGluIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBtZXNzYWdlIHRleHQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBtZXNzYWdlSWQsIFN0cmluZyBzdWIgKQotICB7Ci0gICAgU3RyaW5nW10gcyA9IHtzdWJ9OwotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJZCxzKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmllZCBieSBtZXNzYWdlSWQuCi0gICogQHBhcmFtIG1lc3NhZ2VJZCBUaGUgbWVzc2FnZSBJRC4KLSAgKiBAcGFyYW0gc3ViIFN1YnN0aXR1dGlvbiB2YWx1ZXMgZm9yICIlMS4uJW4iIChzdWJbMF0uLnN1YltuLTFdKSBpbgotICAqIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBtZXNzYWdlIHRleHQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBtZXNzYWdlSWQsIFN0cmluZ1tdIHN1YiApCi0gIHsKLSAgICBTdHJpbmcgbSA9IGdldE1lc3NhZ2UobWVzc2FnZUlkKTsKLSAgICBpbnQgbGVuID0gbS5sZW5ndGgoKTsKLSAgICBpbnQgbWF4ID0gc3ViLmxlbmd0aDsKLSAgICBTdHJpbmdCdWZmZXIgYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpbnQgcG9zID0gMDsKLSAgICB3aGlsZSAocG9zID49IDApCi0gICAgewotICAgICAgaW50IHBjdCA9IG0uaW5kZXhPZignJScscG9zKTsKLSAgICAgIGlmIChwY3QgPj0gMCkKLSAgICAgIHsKLSAgICAgICAgYi5hcHBlbmQobS5zdWJzdHJpbmcocG9zLHBjdCkpOwotICAgICAgICBwb3MgPSBwY3QgKyAxOwotICAgICAgICBpZiAocG9zIDwgbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhciBkID0gbS5jaGFyQXQocG9zKTsKLSAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzRGlnaXQoZCkgJiYgZCAhPSAnMCcpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW50IHYgPSBJbnRlZ2VyLnBhcnNlSW50KG5ldyBDaGFyYWN0ZXIoZCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAodiA8PSBtYXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGIuYXBwZW5kKHN1Ylt2LTFdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYi5hcHBlbmQoJz8nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvcysrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgYi5hcHBlbmQoJyUnKTsKLSAgICAgICAgICAgIGIuYXBwZW5kKGQpOwotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGIuYXBwZW5kKCclJyk7Ci0gICAgICAgICAgcG9zID0gLTE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYi5hcHBlbmQobS5zdWJzdHJpbmcocG9zKSk7Ci0gICAgICAgIHBvcyA9IC0xOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiBmUmVzb3VyY2VCdW5kbGU7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNTJlNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vLyBBIENsYXNzIHdoaWNoIHByb3ZpZGVzIFN0cmluZyBtZXNzYWdlcy4KLXB1YmxpYyBjbGFzcyBNZXNzYWdlUHJvdmlkZXIKLXsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VCdW5kbGUgbWVzc2FnZUJ1bmRsZV87Ci0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2VQcm92aWRlck5hbWVfOwotCi0gIHB1YmxpYyBNZXNzYWdlUHJvdmlkZXIoU3RyaW5nIG1lc3NhZ2VCdW5kbGVGaWxlTmFtZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIExvYWQgdGhlIG1lc3NhZ2UgYnVuZGxlIGZyb20gdGhlIFdFQi1JTkZcY2xhc3NlcyBzdWJkaXJlY3RvcnkuCi0gICAgICBtZXNzYWdlUHJvdmlkZXJOYW1lXyA9IG1lc3NhZ2VCdW5kbGVGaWxlTmFtZTsKLSAgICAgIG1lc3NhZ2VCdW5kbGVfID0gbmV3IE1lc3NhZ2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKG1lc3NhZ2VCdW5kbGVGaWxlTmFtZSkpOwotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlTeXN0ZW0uZXJyLnByaW50bG4oIkNvdWxkIG5vdCBsb2FkICIrbWVzc2FnZUJ1bmRsZUZpbGVOYW1lKTsKLSAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJZCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlQnVuZGxlXy5nZXRNZXNzYWdlKG1lc3NhZ2VJZCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJZCxTdHJpbmcgc3ViKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VCdW5kbGVfLmdldE1lc3NhZ2UobWVzc2FnZUlkLHN1Yik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJZCxTdHJpbmdbXSBzdWIpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUJ1bmRsZV8uZ2V0TWVzc2FnZShtZXNzYWdlSWQsc3ViKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlUHJvdmlkZXJOYW1lKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlUHJvdmlkZXJOYW1lXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUXVldWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZVF1ZXVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczODA4ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUXVldWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VRdWV1ZQotewotICBwcm90ZWN0ZWQgVmVjdG9yIG1lc3NhZ2VMaXN0XzsKLQotICBwdWJsaWMgTWVzc2FnZVF1ZXVlKCkKLSAgewotICAgIG1lc3NhZ2VMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdF8uYWRkRWxlbWVudChtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZXNGcm9tTGlzdCgpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgbWVzc2FnZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBpZiAobWVzc2FnZUxpc3RfLnNpemUoKT09MCkKLSAgICAgIHJldHVybiAiIjsKLQotICAgIEVudW1lcmF0aW9uIGUgPSBtZXNzYWdlTGlzdF8uZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgdGhpc01lc3NhZ2UgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIG1lc3NhZ2VzLmFwcGVuZCh0aGlzTWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlcy5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB9Ci0gICAgbWVzc2FnZUxpc3RfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2VzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYTUzYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzI0ICAgMTg2NDU2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE5vZGUKLXsKLSAgcHJvdGVjdGVkIFRyZWVFbGVtZW50IGVsZW1lbnRfOwotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwcm90ZWN0ZWQgaW50IG5vZGVJZF87Ci0gIHByb3RlY3RlZCBpbnQgbm9kZURlcHRoXzsKLSAgcHJvdGVjdGVkIFN0cmluZyBpbWFnZVBhdGhfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc09wZW5fOwotICBwcm90ZWN0ZWQgVmVjdG9yIGNoaWxkTm9kZXNfOwotICBwcm90ZWN0ZWQgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXJfOwotICBwcm90ZWN0ZWQgTm9kZSBwYXJlbnRfOwotICBwcml2YXRlIFN0cmluZyBhbmNob3JOYW1lXzsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLQotICBwdWJsaWMgTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIGVsZW1lbnRfID0gZWxlbWVudDsKLSAgICBub2RlTWFuYWdlcl8gPSBub2RlTWFuYWdlcjsKLSAgICBub2RlSWRfID0gbm9kZU1hbmFnZXIuYWRkVG9Ob2RlVGFibGUodGhpcyk7Ci0gICAgbm9kZURlcHRoXyA9IG5vZGVEZXB0aDsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIGlmIChpbWFnZVBhdGggPT0gbnVsbCkKLSAgICAgIGltYWdlUGF0aF8gPSBjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1NQQUNFKTsKLSAgICBlbHNlCi0gICAgICBpbWFnZVBhdGhfID0gaW1hZ2VQYXRoOwotICAgIGlzT3Blbl8gPSB0cnVlOwotICAgIGNoaWxkTm9kZXNfID0gbmV3IFZlY3RvcigpOwotICAgIHRvb2xNYW5hZ2VyXyA9IG5ldyBUb29sTWFuYWdlcih0aGlzKTsKLSAgICBpbml0VG9vbHMoKTsKLSAgICBhbmNob3JOYW1lXyA9IChuZXcgU3RyaW5nQnVmZmVyKCJhY3Rpb24iKSkuYXBwZW5kKG5vZGVJZF8pLnRvU3RyaW5nKCk7Ci0gICAgcGFyZW50XyA9IG51bGw7Ci0gICAgdmlld0lkXyA9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIFRyZWVFbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCi0gICogQHJldHVybiBUcmVlRWxlbWVudCBUaGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgotICAqLwotICBwdWJsaWMgVHJlZUVsZW1lbnQgZ2V0VHJlZUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnRfOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbm9kZS4KLSAgKiBAcmV0dXJuIFN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5vZGVOYW1lKCkKLSAgewotICAgIHJldHVybiBlbGVtZW50Xy5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBOb2RlTWFuYWdlciBtYW5hZ2luZyB0aGlzIG5vZGUuCi0gICogQHJldHVybiBOb2RlTWFuYWdlcgotICAqLwotICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGlkIG9mIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gbm9kZUlkXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGRlcHRoIGluIHRoZSB0cmVlIG9mIHRoaXMgbm9kZSByZWxhdGl2ZSB0byB0aGUgcm9vdCBub2RlCi0gICogQHJldHVybiBpbnQKLSAgKi8KLSAgcHVibGljIGludCBnZXROb2RlRGVwdGgoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVEZXB0aF87Ci0gIH0KLQotICAvKioKLSAgKiBTZXQgdGhlIHBhdGggb2YgdGhlIGltYWdlIHJlcHJlc2VudGluZyB0aGlzIGNsYXNzIG9mIE5vZGUuCi0gICogQHBhcmFtIFN0cmluZyBUaGUgcGF0aC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW1hZ2VQYXRoKFN0cmluZyBwYXRoKQotICB7Ci0gICAgaW1hZ2VQYXRoXyA9IHBhdGg7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSBhcmUgdmlzaWJsZS4gUmV0dXJucyBmYWxzZQotICAqIGlmIHRoZXkgYXJlIG5vdC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPcGVuKCkKLSAgewotICAgIHJldHVybiBpc09wZW5fOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkKLSAgewotICAgIE5vZGUgcGFyZW50Tm9kZSA9IHBhcmVudF87Ci0gICAgd2hpbGUgKHBhcmVudE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIXBhcmVudE5vZGUuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldFBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBub2RlJ3MgY2hpbGRyZW4gdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KLSAgKiBVcGRhdGVzIHRoZSBOb2RlTWFuYWdlcidzIHJlY29yZCBvZiB0aGUgbWF4aW11bSBkZXB0aCB2aXNpYmxlIGluIHRoZSB0cmVlLgotICAqIEBwYXJhbSBib29sZWFuCi0gICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGJvb2xlYW4gb3BlbikKLSAgewotICAgIGlzT3Blbl8gPSBvcGVuOwotICAgIG5vZGVNYW5hZ2VyXy51cGRhdGVNYXhEZXB0aFZpc2libGUoKTsKLSAgfQotCi0gIC8qKgotICAqIEdldHMgdGhlIG1heGltdW0gZGVwdGggZGlzcGxheWVkIGluIHRoaXMgbm9kZSdzIGJyYW5jaCBvZiB0aGUgdHJlZQotICAqIFVzZWQgYnkgTm9kZU1hbmFnZXIgZm9yIGh0bWwgZGlzcGxheSBwdXJwb3Nlcy4KLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE1heERlcHRoVmlzaWJsZSgpCi0gIHsKLSAgICBpZiAoIWlzT3Blbl8pCi0gICAgICByZXR1cm4gbm9kZURlcHRoXzsKLSAgICBlbHNlCi0gICAgewotICAgICAgaW50IGN1cnJlbnREZXB0aCA9IG5vZGVEZXB0aF87Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gY2hpbGROb2Rlc18uZWxlbWVudHMoKTsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBOb2RlIHRoaXNOb2RlID0gKE5vZGUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICBpbnQgZGVwdGggPSB0aGlzTm9kZS5nZXRNYXhEZXB0aFZpc2libGUoKTsKLSAgICAgICAgaWYgKGRlcHRoPmN1cnJlbnREZXB0aCkKLSAgICAgICAgICBjdXJyZW50RGVwdGg9ZGVwdGg7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY3VycmVudERlcHRoOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBhcmVudChOb2RlIG5vZGUpCi0gIHsKLSAgICBwYXJlbnRfID0gbm9kZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFBhcmVudCgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgdmlld0lkXyA9IHZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRWaWV3VG9vbElkKCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IGdldFZpZXdUb29sTWFuYWdlcigpOwotICAgIGlmICh2aWV3VG9vbE1hbmFnZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiB2aWV3VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVDsKLSAgfQotCi0gIC8qKgotICAqIEFkZHMgdGhlIHNwZWNpZmllZCBub2RlIGFzIGEgY2hpbGQgb2YgdGhpcyBub2RlLgotICAqIEBwYXJhbSBOb2RlIFRoZSBjaGlsZCBiZWluZyBhZGRlZC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gQWx3YXlzIHRydWUuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZENoaWxkKE5vZGUgY2hpbGROb2RlKQotICB7Ci0gICAgY2hpbGROb2RlLnNldFBhcmVudCh0aGlzKTsKLSAgICBjaGlsZE5vZGVzXy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgbm9kZU1hbmFnZXJfLnVwZGF0ZU1heERlcHRoVmlzaWJsZSgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlLiBJZiB0aGlzIG5vZGUgaGFzIG5vIGNoaWxkcmVuLCBhbgotICAqIGVtcHR5IHZlY3RvciBpcyByZXR1cm5lZC4KLSAgKiBAcmV0dXJuIFZlY3RvcgotICAqLwotICBwdWJsaWMgVmVjdG9yIGdldENoaWxkTm9kZXMoKQotICB7Ci0gICAgcmV0dXJuIGNoaWxkTm9kZXNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0Q2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gY2hpbGROb2Rlc18uZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBOb2RlIHByZXNlbnROb2RlID0gKE5vZGUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHByZXNlbnROb2RlLmdldFRyZWVFbGVtZW50KCkgPT0gZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIHByZXNlbnROb2RlOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUNoaWxkTm9kZXMoYm9vbGVhbiBpc0VudHJ5KQotICB7Ci0gICAgaW50IG51bWJlck9mQ2hpbGROb2RlcyA9IGNoaWxkTm9kZXNfLnNpemUoKTsKLSAgICBmb3IgKGludCBpPW51bWJlck9mQ2hpbGROb2Rlcy0xO2k+PTA7aS0tKQotICAgIHsKLSAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlc18uZWxlbWVudEF0KGkpOwotICAgICAgY2hpbGROb2RlLnJlbW92ZUNoaWxkTm9kZXMoZmFsc2UpOwotICAgICAgbm9kZU1hbmFnZXJfLnJlbW92ZUZyb21Ob2RlVGFibGUoY2hpbGROb2RlLmdldE5vZGVJZCgpKTsKLSAgICB9Ci0gICAgaWYgKG51bWJlck9mQ2hpbGROb2RlcyA+IDApCi0gICAgewotICAgICAgY2hpbGROb2Rlc18ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIGlmIChpc0VudHJ5KQotICAgICAgICBub2RlTWFuYWdlcl8udXBkYXRlTWF4RGVwdGhWaXNpYmxlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVtb3ZlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IGdldENoaWxkTm9kZShlbGVtZW50KTsKLSAgICBpZiAoY2hpbGROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGNoaWxkTm9kZUlkID0gY2hpbGROb2RlLmdldE5vZGVJZCgpOwotICAgICAgaWYgKG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpID09IGNoaWxkTm9kZUlkKQotICAgICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkXyk7Ci0gICAgICBjaGlsZE5vZGVzXy5yZW1vdmVFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICBub2RlTWFuYWdlcl8ucmVtb3ZlRnJvbU5vZGVUYWJsZShjaGlsZE5vZGVJZCk7Ci0gICAgICBub2RlTWFuYWdlcl8udXBkYXRlTWF4RGVwdGhWaXNpYmxlKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBuYW1lIG9mIHRoZSBIVE1MIGFuY2hvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBuYW1lIG9mIHRoZSBhbmNob3IuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QW5jaG9yTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gYW5jaG9yTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgVG9vbE1hbmFnZXIgZ2V0VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xNYW5hZ2VyXzsKLSAgfQotCi0gIHB1YmxpYyBUb29sTWFuYWdlciBnZXRWaWV3VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgaWYgKHZpZXdJZF8gIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgIHsKLSAgICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKXRvb2xNYW5hZ2VyXy5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIHJldHVybiB2aWV3VG9vbC5nZXRUb29sTWFuYWdlcih2aWV3SWRfKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUb29sTWFuYWdlciBnZXRDdXJyZW50VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBnZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICBpZiAodG9vbE1hbmFnZXIgPT0gbnVsbCkKLSAgICAgIHRvb2xNYW5hZ2VyID0gdG9vbE1hbmFnZXJfOwotICAgIHJldHVybiB0b29sTWFuYWdlcjsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRUb29scygpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25UYXJnZXQoKQotICB7Ci0gICAgcmV0dXJuIEZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUE7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRUb2dnbGUoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmdCdWZmZXIgdHJlZVZpZXcsYm9vbGVhbiBpc0xhc3RDaGlsZCkKLSAgewotICAgIGlmIChub2RlRGVwdGhfICE9IDEpCi0gICAgewotICAgICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPTE2IGhlaWdodD0xNiBub3dyYXA+Iik7Ci0gICAgICBTdHJpbmcgdG9nZ2xlSW1hZ2VUYWc7Ci0gICAgICBpZiAoY2hpbGROb2Rlc18uc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgLy8gPGEgaHJlZj0iLi4uIiB0YXJnZXQ9Ii4uLiI+dG9nZ2xlSW1hZ2VUYWc8L2E+Ci0gICAgICAgIFN0cmluZyBocmVmID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKSk7Ci0gICAgICAgIGlmIChpc09wZW5fKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHRvZ2dsZUFsdCA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0NMT1NFIik7Ci0gICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTUlOVVNfTEFTVCksdG9nZ2xlQWx0LCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9NSU5VU19OT1RMQVNUKSx0b2dnbGVBbHQsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB0b2dnbGVBbHQgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9PUEVOIik7Ci0gICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfUExVU19MQVNUKSx0b2dnbGVBbHQsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1BMVVNfTk9UTEFTVCksdG9nZ2xlQWx0LCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbGlua1RhZyA9IEhUTUxVdGlscy5nZXRIVE1MTGlua1RhZyhyZXNwb25zZSxocmVmLGdldFRvZ2dsZU5vZGVBY3Rpb25UYXJnZXQoKSxTdHJpbmcudmFsdWVPZihub2RlSWRfKSx0b2dnbGVJbWFnZVRhZyxudWxsKTsKLSAgICAgICAgdHJlZVZpZXcuYXBwZW5kKGxpbmtUYWcpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyA8aW1nLi4uPgotICAgICAgICBpZiAoaXNMYXN0Q2hpbGQpCi0gICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTElORV9MQVNUKSwiIiwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9MSU5FX05PVExBU1QpLCIiLCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgdHJlZVZpZXcuYXBwZW5kKHRvZ2dsZUltYWdlVGFnKTsKLSAgICAgIH0KLSAgICAgIHRyZWVWaWV3LmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCk7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBGcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiBpbWFnZVBhdGhfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDbG9zZWRJbWFnZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGltYWdlUGF0aF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRIVE1MTGFiZWwoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmdCdWZmZXIgdHJlZVZpZXcsYm9vbGVhbiBpc0xhc3RDaGlsZCkKLSAgewotICAgIC8vIDxhIGhyZWY9Ii4uLiIgdGFyZ2V0PSIuLi4iIG9uQ2xpY2s9InNlbGVjdE5vZGUoJy4uLicpIj48aW1nLi4uPjwvYT4KLSAgICBIYXNodGFibGUgYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgYWRkaXRpb25hbEF0dHJpYnV0ZXMucHV0KCJuYW1lIixhbmNob3JOYW1lXyk7Ci0gICAgU3RyaW5nIGltYWdlUGF0aCA9IChub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlSWQoKSA9PSBub2RlSWRfKT9nZXRPcGVuSW1hZ2VQYXRoKCk6Z2V0Q2xvc2VkSW1hZ2VQYXRoKCk7Ci0KLSAgICBTdHJpbmcgaW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KGltYWdlUGF0aCksZ2V0Tm9kZU5hbWUoKSwiMTYiLCIxNiIsYWRkaXRpb25hbEF0dHJpYnV0ZXMpOwotICAgIFN0cmluZyBiYXNlSHJlZiA9IGdldExpbmtBY3Rpb25IcmVmKCk7Ci0gICAgU3RyaW5nIGhyZWYgPSAoKGJhc2VIcmVmID09IG51bGwpP2Jhc2VIcmVmOm5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KGJhc2VIcmVmKSk7Ci0gICAgU3RyaW5nIHRhcmdldCA9IGdldExpbmtBY3Rpb25UYXJnZXQoKTsKLSAgICBhZGRpdGlvbmFsQXR0cmlidXRlcy5jbGVhcigpOwotCi0gICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPTE2IGhlaWdodD0xNiBub3dyYXA+Iik7Ci0gICAgaWYgKGhyZWYgIT0gbnVsbCkKLSAgICAgIHRyZWVWaWV3LmFwcGVuZChIVE1MVXRpbHMuZ2V0SFRNTExpbmtUYWcocmVzcG9uc2UsaHJlZix0YXJnZXQsbnVsbCxpbWFnZVRhZyxhZGRpdGlvbmFsQXR0cmlidXRlcykpOwotICAgIGVsc2UKLSAgICAgIHRyZWVWaWV3LmFwcGVuZChpbWFnZVRhZyk7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCI8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiB3aWR0aD0zIGhlaWdodD0xMCBub3dyYXA+IikuYXBwZW5kKEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9TUEFDRSksIiIsIjMiLCIxMCIsbnVsbCkpLmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLQotICAgIC8vIDxhIG5hbWU9Ii4uLiIgaHJlZj0iLi4uIiB0YXJnZXQ9Ii4uLiI+bGFiZWw8L2E+Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIG5vd3JhcD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICAgICIpOwotICAgIGlmIChocmVmICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHRleHRBbmNob3JDbGFzczsKLSAgICAgIGlmIChub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlSWQoKSA9PSBub2RlSWRfKQotICAgICAgICB0ZXh0QW5jaG9yQ2xhc3M9InNlbGVjdGVkVGV4dEFuY2hvciI7Ci0gICAgICBlbHNlCi0gICAgICAgIHRleHRBbmNob3JDbGFzcz0idW5zZWxlY3RlZFRleHRBbmNob3IiOwotICAgICAgYWRkaXRpb25hbEF0dHJpYnV0ZXMucHV0KCJjbGFzcyIsdGV4dEFuY2hvckNsYXNzKTsKLSAgICAgIHRyZWVWaWV3LmFwcGVuZChIVE1MVXRpbHMuZ2V0SFRNTExpbmtUYWcocmVzcG9uc2UsaHJlZix0YXJnZXQsYW5jaG9yTmFtZV8sZ2V0Tm9kZU5hbWUoKSxhZGRpdGlvbmFsQXR0cmlidXRlcykpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICB0cmVlVmlldy5hcHBlbmQoIjxzdHJvbmc+IikuYXBwZW5kKGdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPC9zdHJvbmc+Iik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUikuYXBwZW5kKCIgICAgPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbmRlck5vZGUoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmdCdWZmZXIgdHJlZVZpZXcsU3RyaW5nIHByZWZpeENvbHVtbnMsYm9vbGVhbiBpc0xhc3RDaGlsZCkKLSAgewotICAgIFN0cmluZyBzcGFjZV8xNngxNiA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9TUEFDRSksIiIsIjE2IiwiMTYiLG51bGwpOwotICAgIFN0cmluZyBsaW5lXzE2eDE2ID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX0xJTkUpLCIiLCIxNiIsIjE2IixudWxsKTsKLQotICAgIC8vIFVzZSBib3JkZXI9MSB0byBoZWxwIHdpdGggZGVidWdnaW5nLgotICAgIHRyZWVWaWV3LmFwcGVuZCgiPHRhYmxlIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MCBib3JkZXI9MD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgPHRyPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiB3aWR0aD0xNiBoZWlnaHQ9MTYgbm93cmFwPiIpLmFwcGVuZChzcGFjZV8xNngxNikuYXBwZW5kKCI8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIFN0cmluZ0J1ZmZlciBuZXdQcmVmaXhDb2x1bW5zID0gbmV3IFN0cmluZ0J1ZmZlcihwcmVmaXhDb2x1bW5zKTsKLSAgICBpZiAobm9kZURlcHRoXyA+PSAyKQotICAgIHsKLSAgICAgIGlmIChwcmVmaXhDb2x1bW5zLmxlbmd0aCgpID4gMCkKLSAgICAgICAgdHJlZVZpZXcuYXBwZW5kKHByZWZpeENvbHVtbnMpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgICAgLy8gZ2VuZXJhdGUgYSBuZXcgcHJlZml4IGNvbHVtbnMuCi0gICAgICBuZXdQcmVmaXhDb2x1bW5zLmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiB3aWR0aD0xNiBoZWlnaHQ9MTYgbm93cmFwPiIpOwotICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICBuZXdQcmVmaXhDb2x1bW5zLmFwcGVuZChzcGFjZV8xNngxNik7Ci0gICAgICBlbHNlCi0gICAgICAgIG5ld1ByZWZpeENvbHVtbnMuYXBwZW5kKGxpbmVfMTZ4MTYpOwotICAgICAgbmV3UHJlZml4Q29sdW1ucy5hcHBlbmQoIjwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgfQotICAgIGFkZFRvZ2dsZShyZXNwb25zZSx0cmVlVmlldyxpc0xhc3RDaGlsZCk7Ci0gICAgYWRkSFRNTExhYmVsKHJlc3BvbnNlLHRyZWVWaWV3LGlzTGFzdENoaWxkKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgPC90cj4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIjwvdGFibGU+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgaW50IG51bWJlck9mQ2hpbGROb2RlcyA9IGNoaWxkTm9kZXNfLnNpemUoKTsKLSAgICBpZiAobnVtYmVyT2ZDaGlsZE5vZGVzID4gMCkKLSAgICB7Ci0gICAgICBpZiAoaXNPcGVuXykKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8bnVtYmVyT2ZDaGlsZE5vZGVzLTE7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSAoTm9kZSljaGlsZE5vZGVzXy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgY2hpbGROb2RlLnJlbmRlck5vZGUocmVzcG9uc2UsdHJlZVZpZXcsbmV3UHJlZml4Q29sdW1ucy50b1N0cmluZygpLGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBOb2RlIGxhc3RDaGlsZE5vZGUgPSAoTm9kZSljaGlsZE5vZGVzXy5lbGVtZW50QXQobnVtYmVyT2ZDaGlsZE5vZGVzLTEpOwotICAgICAgICBsYXN0Q2hpbGROb2RlLnJlbmRlck5vZGUocmVzcG9uc2UsdHJlZVZpZXcsbmV3UHJlZml4Q29sdW1ucy50b1N0cmluZygpLHRydWUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIEZvciBzb3J0aW5nIHB1cnBvc2VzLiAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldE5vZGVOYW1lKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTm9kZU1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTm9kZU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkNDhjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGVNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLQotcHVibGljIGNsYXNzIE5vZGVNYW5hZ2VyCi17Ci0gIC8vIHBhdGhzIHRvIGljb24gaW1hZ2VzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfUExVU19OT1RMQVNUID0gImltYWdlcy9wbHVzX25vdGxhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9QTFVTX0xBU1QgPSAiaW1hZ2VzL3BsdXNfbGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX01JTlVTX05PVExBU1QgPSAiaW1hZ2VzL21pbnVzX25vdGxhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9NSU5VU19MQVNUID0gImltYWdlcy9taW51c19sYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfTElORSA9ICJpbWFnZXMvbGluZS5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX0xJTkVfTk9UTEFTVCA9ICJpbWFnZXMvbGluZV9ub3RsYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfTElORV9MQVNUID0gImltYWdlcy9saW5lX2xhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9TUEFDRSA9ICJpbWFnZXMvc3BhY2UuZ2lmIjsKLQotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByaXZhdGUgTm9kZSByb290Tm9kZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIG5vZGVUYWJsZV87Ci0gIHByaXZhdGUgaW50IGZvY3VzZWROb2RlSWRfOwotICBwcml2YXRlIGludCBzZWxlY3RlZE5vZGVJZF87Ci0gIHByaXZhdGUgaW50IHByZXZpb3VzU2VsZWN0ZWROb2RlSWRfOwotICBwcml2YXRlIGludCBtYXhEZXB0aFZpc2libGVfOwotICBwcml2YXRlIGludCBuZXh0SWRfOwotCi0gIHB1YmxpYyBOb2RlTWFuYWdlcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgcm9vdE5vZGVfID0gbnVsbDsKLSAgICBub2RlVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZvY3VzZWROb2RlSWRfID0gLTE7Ci0gICAgc2VsZWN0ZWROb2RlSWRfID0gLTE7Ci0gICAgcHJldmlvdXNTZWxlY3RlZE5vZGVJZF8gPSAtMTsKLSAgICBtYXhEZXB0aFZpc2libGVfID0gMTsKLSAgICBuZXh0SWRfID0gMDsKLSAgfQotCi0gIC8qKgotICAqIEhvb2sgZm9yIHRoZSBjb250cm9sbGVyLgotICAqIEByZXR1cm4gQ29udHJvbGxlciBUaGUgcGVyc3BlY3RpdmUgY29udHJvbGxlci4KLSAgKi8KLSAgcHVibGljIENvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUuCi0gICogQHBhcmFtIHJvb3ROb2RlIFRoZSBub2RlIGJlaW5nIGRlc2lnbmF0ZWQgYXMgdGhlIHJvb3Qgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdE5vZGUoTm9kZSByb290Tm9kZSkKLSAgewotICAgIHJvb3ROb2RlXyA9IHJvb3ROb2RlOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlIG1hbmFnZWQgYnkgdGhpcyBOb2RlTWFuYWdlci4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIHJvb3Qgbm9kZS4KLSAgKi8KLSAgcHVibGljIE5vZGUgZ2V0Um9vdE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIHJvb3ROb2RlXzsKLSAgfQotCi0gIC8qKgotICAqIEBwYXJhbSBJbnRlZ2VyIFRoZSBpZCBvZiB0aGUgbm9kZSBiZWluZyBhZGRlZC4KLSAgKiBAcGFyYW0gTm9kZSBUaGUgbm9kZSBiZWluZyBhZGRlZC4KLSAgKiBAcmV0dXJuIFRoZSBub2RlSWQgYXNzaWduZWQgdG8gdGhpcyBub2RlLgotICAqLwotICBwdWJsaWMgaW50IGFkZFRvTm9kZVRhYmxlKE5vZGUgbm9kZSkKLSAgewotICAgIGludCBhc3NpZ25lZE5vZGVJZCA9IG5leHRJZF87Ci0gICAgbm9kZVRhYmxlXy5wdXQoU3RyaW5nLnZhbHVlT2YoYXNzaWduZWROb2RlSWQpLG5vZGUpOwotICAgIG5leHRJZF8rKzsKLSAgICByZXR1cm4gYXNzaWduZWROb2RlSWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGcm9tTm9kZVRhYmxlKGludCBub2RlSWQpCi0gIHsKLSAgICBWZWN0b3Igbm9kZXNUb1JlbW92ZSA9IG5ldyBWZWN0b3IoKTsKLSAgICBOb2RlIG5vZGUgPSBnZXROb2RlKG5vZGVJZCk7Ci0gICAgZ2F0aGVyTm9kZXNUb1JlbW92ZShub2Rlc1RvUmVtb3ZlLCBub2RlKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbm9kZXNUb1JlbW92ZS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7Ci0gICAgICBub2RlVGFibGVfLnJlbW92ZShTdHJpbmcudmFsdWVPZigoKE5vZGUpaXQubmV4dCgpKS5nZXROb2RlSWQoKSkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnYXRoZXJOb2Rlc1RvUmVtb3ZlKFZlY3RvciBub2Rlc1RvUmVtb3ZlLCBOb2RlIG5vZGUpIHsKLSAgICBpZiAobm9kZSAhPSBudWxsKSB7Ci0gICAgICBub2Rlc1RvUmVtb3ZlLmFkZChub2RlKTsKLSAgICAgIFZlY3RvciBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY2hpbGROb2Rlcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7Ci0gICAgICAgIGdhdGhlck5vZGVzVG9SZW1vdmUobm9kZXNUb1JlbW92ZSwgKE5vZGUpaXQubmV4dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgZGVlcGVzdCB2aXNpYmxlIG5vZGUgaW4gdGhlIHRyZWUuCi0gICogQHJldHVybiBpbnQKLSAgKi8KLSAgcHVibGljIGludCBnZXRNYXhEZXB0aFZpc2libGUoKQotICB7Ci0gICAgcmV0dXJuIG1heERlcHRoVmlzaWJsZV87Ci0gIH0KLQotICAvKioKLSAgKiBVcGRhdGVzIHRoZSBkZXB0aCBvZiB0aGUgZGVlcGVzdCB2aXNpYmxlIG5vZGUgaW4gdGhlIHRyZWUuIE5vZGVzCi0gICogbXVzdCBjYWxsIHRoaXMgd2hlbiB0aGUgdmlzaWJpbGl0eSBvZiB0aGVpciBjaGlsZHJlbiBjaGFuZ2VzLgotICAqIChlLmcuIGV4cGFuZC9jb2xsYXBzZSBvZiBhIHBhcmVudCBub2RlKS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdXBkYXRlTWF4RGVwdGhWaXNpYmxlKCkKLSAgewotICAgIGlmIChyb290Tm9kZV8gIT0gbnVsbCkKLSAgICAgIG1heERlcHRoVmlzaWJsZV8gPSByb290Tm9kZV8uZ2V0TWF4RGVwdGhWaXNpYmxlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBpZCBmb3IgYSBuZXdseSBjcmVhdGVkIG5vZGUuCi0gICogQHJldHVybiBpbnQKLSAgKi8KLSAgcHVibGljIGludCBnZXROZXh0Tm9kZUlkKCkKLSAgewotICAgIHJldHVybiBuZXh0SWRfOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGN1cnJlbnRseSBmb2N1c2VkIG5vZGUgaW4gdGhlIHRyZWUuIEEgbm9kZQotICAqIGJlY29tZXMgZm9jdXNlZCB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cyBvY2N1cjoKLSAgKiAxKSBUaGUgbm9kZSdzIGljb24gb3IgaW1hZ2UgYXJlIHNlbGVjdGVkIGJ5IGEgdXNlci4KLSAgKiAyKSBUaGUgbm9kZSdzIGV4cGFuZC9jb2xsYXBzZSBpY29uIGlzIGNsaWNrZWQuCi0gICogMykgUHJvZ3JhbW1hdGljYWxseSBzZXQgYnkgdGhlIHByb2dyYW1tZXIuCi0gICogVGhlIHRyZWV2aWV3IHdpbGwgYWx3YXlzIHNjcm9sbCB0byB0aGUgY3VycmVudCBmb2N1c2VkIG5vZGUgd2hlbiBsb2FkZWQuCi0gICogQHJldHVybiBpbnQgVGhlIGlkLgotICAqLwotICBwdWJsaWMgaW50IGdldEZvY3VzZWROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIGZvY3VzZWROb2RlSWRfOwotICB9Ci0KLSAgLyoqCi0gICogQWxsb3dzIG1vZGlmaWNhdGlvbiBvZiB0aGUgZm9jdXNlZCBub2RlLgotICAqIEBwYXJhbSBpbnQgVGhlIGlkIG9mIHRoZSBub2RlIHRoYXQgaXMgaW4gZm9jdXMuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldEZvY3VzZWROb2RlSWQoaW50IG5vZGVJZCkKLSAgewotICAgIGZvY3VzZWROb2RlSWRfID0gbm9kZUlkOwotICB9Ci0KLSAgcHVibGljIE5vZGUgZ2V0Rm9jdXNlZE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIGdldE5vZGUoZm9jdXNlZE5vZGVJZF8pOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIGluIHRoZSB0cmVlLgotICAqIEByZXR1cm4gaW50IFRoZSBpZC4KLSAgKi8KLSAgcHVibGljIGludCBnZXRTZWxlY3RlZE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWROb2RlSWRfOwotICB9Ci0KLSAgcHVibGljIE5vZGUgZ2V0U2VsZWN0ZWROb2RlKCkKLSAgewotICAgIHJldHVybiBnZXROb2RlKHNlbGVjdGVkTm9kZUlkXyk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXRyaWV2ZSBhIHJlZmVyZW5jZSB0byBhIE5vZGUgaW4gdGhpcyBtYW5hZ2VyJ3Mgbm9kZSB0YWJsZS4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIG5vZGUuCi0gICovCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoaW50IG5vZGVJZCkKLSAgewotICAgIHJldHVybiAoTm9kZSlub2RlVGFibGVfLmdldChTdHJpbmcudmFsdWVPZihub2RlSWQpKTsKLSAgfQotCi0gIC8qKgotICAqIEFsbG93cyBtb2RpZmljYXRpb24gb2YgdGhlIHNlbGVjdGVkIE5vZGUuIE5vdGUgdGhhdCBzZXR0aW5nIGEgbm9kZSB0byBiZWNvbWUKLSAgKiBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IG1ha2VzIGl0IHRoZSBmb2N1c2VkIG5vZGUuIEhvd2V2ZXIsIHRoaXMgaXMgb25seSBhIG9uZQotICAqIHdheSByZWxhdGlvbnNoaXAuCi0gICogQHBhcmFtIGludCBUaGUgaWQgb2YgdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBzZWxlY3RlZC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWROb2RlSWQoaW50IG5vZGVJZCkKLSAgewotICAgIHByZXZpb3VzU2VsZWN0ZWROb2RlSWRfID0gc2VsZWN0ZWROb2RlSWRfOwotICAgIHNlbGVjdGVkTm9kZUlkXyA9IG5vZGVJZDsKLSAgICBzZXRGb2N1c2VkTm9kZUlkKHNlbGVjdGVkTm9kZUlkXyk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFByZXZpb3VzU2VsZWN0ZWROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0ZWROb2RlSWRfOwotICB9Ci0KLSAgcHVibGljIE5vZGUgZ2V0UHJldmlvdXNTZWxlY3RlZE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIChOb2RlKW5vZGVUYWJsZV8uZ2V0KFN0cmluZy52YWx1ZU9mKHByZXZpb3VzU2VsZWN0ZWROb2RlSWRfKSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZW5kZXIgdGhlIEhUTUwgdHJlZSB2aWV3IGZvciB0aGlzIG5vZGUuCi0gICogQHBhcmFtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgRm9yIGVuY29kaW5nIFVSTHMuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEhUTUwgcmVwcmVzZW50aW5nIHRoZSB0cmVlIHZpZXcuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgcmVuZGVyVHJlZVZpZXcoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciB0cmVlVmlldyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICByb290Tm9kZV8ucmVuZGVyTm9kZShyZXNwb25zZSx0cmVlVmlldywiIixmYWxzZSk7Ci0gICAgcmV0dXJuIHRyZWVWaWV3LnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIE1ha2UgdGhlIHByb3ZpZGVkIG5vZGUgaXMgdmlzaWJsZSBieSBlbnN1cmluZyB0aGF0IGl0cyBhbmNlc3RvcnMgYXJlIHZpc2libGUuCi0gICogQHBhcmFtIE5vZGUgVGhlIG5vZGUgdG8gYmUgbWFkZSB2aXNpYmxlLgotICAqIEByZXR1cm4gYm9vbGVhbiBJbmRpY2F0b3IgZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0cmVldmlldyBuZWVkcyByZWZyZXNoaW5nIChpLmUuIGFuIGFuY2VzdG9yIHdhcyBub3QgdmlzaWJsZSkuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIG1ha2VOb2RlVmlzaWJsZShOb2RlIG5vZGUpCi0gIHsKLSAgICBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoID0gZmFsc2U7Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS5nZXRQYXJlbnQoKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIW5vZGUuaXNPcGVuKCkpCi0gICAgICB7Ci0gICAgICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbih0cnVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoOwotICB9Ci0gIAotICAvKioKLSAgKiBNYWtlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSB2aXNpYmxlIGJ5IGVuc3VyaW5nIHRoYXQgaXRzIGFuY2VzdG9ycyBhcmUgdmlzaWJsZS4KLSAgKi8KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gbWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKQotICB7Ci0gICAgcmV0dXJuIG1ha2VOb2RlVmlzaWJsZShnZXRTZWxlY3RlZE5vZGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU1ZjE0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1BlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFBlcnNwZWN0aXZlIGV4dGVuZHMgTWVzc2FnZVByb3ZpZGVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcm90ZWN0ZWQgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZV87Ci0KLSAgcHVibGljIFBlcnNwZWN0aXZlKFN0cmluZyBtZXNzYWdlQnVuZGxlRmlsZU5hbWUsQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIobWVzc2FnZUJ1bmRsZUZpbGVOYW1lKTsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgbWVzc2FnZVF1ZXVlXyA9IG5ldyBNZXNzYWdlUXVldWUoKTsKLSAgfQotCi0gIHB1YmxpYyBNZXNzYWdlUXVldWUgZ2V0TWVzc2FnZVF1ZXVlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlUXVldWVfOwotICB9Ci0KLSAgcHVibGljIENvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFBhbmVzRmlsZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldEZyYW1lc2V0c0ZpbGUoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN3aXRjaFBlcnNwZWN0aXZlRm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpOwotCi0gIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBwZXJzcGVjdGl2ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFudGlhdGVkLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pOwotICAKLSAgLy8gTm9kZSBtYW5hZ2VyIGZvciB0aGUgbmF2aWdhdG9yL3RyZWUgY29udGVudCBwYWdlCi0gIHB1YmxpYyBhYnN0cmFjdCBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZWN0aW9uSGVhZGVySW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZWN0aW9uSGVhZGVySW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2U1ZTRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2VjdGlvbkhlYWRlckluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFNlY3Rpb25IZWFkZXJJbmZvCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNvbnRhaW5lcklkXzsKLSAgcHJpdmF0ZSBib29sZWFuIGR5bmFtaWNfOwotICBwcml2YXRlIE9iamVjdCBvdGhlclByb3BlcnRpZXNfOwotCi0gIHB1YmxpYyBTZWN0aW9uSGVhZGVySW5mbygpCi0gIHsKLSAgICBjbGVhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgY29udGFpbmVySWRfID0gIiI7Ci0gICAgZHluYW1pY18gPSB0cnVlOwotICAgIG90aGVyUHJvcGVydGllc18gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q29udGFpbmVySWQoU3RyaW5nIGNvbnRhaW5lcklkKQotICB7Ci0gICAgY29udGFpbmVySWRfID0gY29udGFpbmVySWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvbnRhaW5lcklkKCkKLSAgewotICAgIHJldHVybiBjb250YWluZXJJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBlbmFibGVEeW5hbWljKGJvb2xlYW4gaXNFbmFibGVkKQotICB7Ci0gICAgZHluYW1pY18gPSBpc0VuYWJsZWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0R5bmFtaWMoKQotICB7Ci0gICAgcmV0dXJuIGR5bmFtaWNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0T3RoZXJQcm9wZXJ0aWVzKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBvdGhlclByb3BlcnRpZXNfID0gb2JqZWN0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE9iamVjdCBnZXRPdGhlclByb3BlcnRpZXMoKQotICB7Ci0gICAgcmV0dXJuIG90aGVyUHJvcGVydGllc187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2V0RGVmYXVsdFZpZXdUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NldERlZmF1bHRWaWV3VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzkxYjk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZXREZWZhdWx0Vmlld1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sCi17Ci0gIHB1YmxpYyBTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih2aWV3VG9vbE1hbmFnZXIsImltYWdlcy90b3BfZW5hYmxlZC5naWYiLCJpbWFnZXMvdG9wX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiZmI5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci0KLS8vIEEgY2xhc3MgZm9yIHJlcHJlc2VudGluZyB0b29sYmFyIHRvb2xzLgotcHVibGljIGFic3RyYWN0IGNsYXNzIFRvb2wKLXsKLSAgcHJvdGVjdGVkIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5hYmxlZEltYWdlTGlua187Ci0gIHByaXZhdGUgU3RyaW5nIGhpZ2hsaWdodGVkSW1hZ2VMaW5rXzsKLSAgcHJpdmF0ZSBTdHJpbmcgYWx0XzsKLSAgcHJvdGVjdGVkIGludCB0b29sSWRfOwotICBwcm90ZWN0ZWQgYnl0ZSB0b29sVHlwZV87Ci0KLSAgcHVibGljIFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGVuYWJsZWRJbWFnZUxpbmssU3RyaW5nIGhpZ2hsaWdodGVkSW1hZ2VMaW5rLFN0cmluZyBhbHQsYnl0ZSB0b29sVHlwZSkKLSAgewotICAgIHRvb2xNYW5hZ2VyXyA9IHRvb2xNYW5hZ2VyOwotICAgIGVuYWJsZWRJbWFnZUxpbmtfID0gZW5hYmxlZEltYWdlTGluazsKLSAgICBoaWdobGlnaHRlZEltYWdlTGlua18gPSBoaWdobGlnaHRlZEltYWdlTGluazsKLSAgICBhbHRfID0gYWx0OwotICAgIHRvb2xJZF8gPSB0b29sTWFuYWdlcl8uYWRkVG9vbCh0aGlzKTsKLSAgICB0b29sVHlwZV8gPSB0b29sVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KTsKLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25UYXJnZXQoKQotICB7Ci0gICAgcmV0dXJuIEZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUE7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2VuZXJhdGVPbk1vdXNlVmFsdWUoU3RyaW5nQnVmZmVyIHZhbHVlLEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsU3RyaW5nIGZ1bGxJbWFnZUxpbmspCi0gIHsKLSAgICB2YWx1ZS5hcHBlbmQoInNyYz0nIikuYXBwZW5kKHJlc3BvbnNlLmVuY29kZVVSTChmdWxsSW1hZ2VMaW5rKSkuYXBwZW5kKCdcJycpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyByZW5kZXJUb29sKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgSGFzaHRhYmxlIGpzSW1hZ2VQcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFN0cmluZ0J1ZmZlciBwcm9wZXJ0eVZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZyBmdWxsRW5hYmxlZEltYWdlTGluayA9IGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGVuYWJsZWRJbWFnZUxpbmtfKTsKLSAgICBnZW5lcmF0ZU9uTW91c2VWYWx1ZShwcm9wZXJ0eVZhbHVlLHJlc3BvbnNlLGZ1bGxFbmFibGVkSW1hZ2VMaW5rKTsKLSAgICBpbnQgcHJvcGVydHlWYWx1ZUxlbmd0aCA9IHByb3BlcnR5VmFsdWUubGVuZ3RoKCk7Ci0gICAganNJbWFnZVByb3BlcnRpZXMucHV0KCJjbGFzcyIsIm5vcm1hbCIpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgib25Nb3VzZU91dCIscHJvcGVydHlWYWx1ZS5hcHBlbmQoIjttb3VzZW91dCh0aGlzKSIpLnRvU3RyaW5nKCkpOwotICAgIHByb3BlcnR5VmFsdWUuZGVsZXRlKHByb3BlcnR5VmFsdWVMZW5ndGgscHJvcGVydHlWYWx1ZS5sZW5ndGgoKSk7Ci0gICAganNJbWFnZVByb3BlcnRpZXMucHV0KCJvbk1vdXNlVXAiLHByb3BlcnR5VmFsdWUuYXBwZW5kKCI7bW91c2V1cCh0aGlzKSIpLnRvU3RyaW5nKCkpOwotICAgIHByb3BlcnR5VmFsdWUuc2V0TGVuZ3RoKDApOwotICAgIGdlbmVyYXRlT25Nb3VzZVZhbHVlKHByb3BlcnR5VmFsdWUscmVzcG9uc2UsY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaGlnaGxpZ2h0ZWRJbWFnZUxpbmtfKSk7Ci0gICAgcHJvcGVydHlWYWx1ZUxlbmd0aCA9IHByb3BlcnR5VmFsdWUubGVuZ3RoKCk7Ci0gICAganNJbWFnZVByb3BlcnRpZXMucHV0KCJvbk1vdXNlT3ZlciIscHJvcGVydHlWYWx1ZS5hcHBlbmQoIjttb3VzZW92ZXIodGhpcykiKS50b1N0cmluZygpKTsKLSAgICBwcm9wZXJ0eVZhbHVlLmRlbGV0ZShwcm9wZXJ0eVZhbHVlTGVuZ3RoLHByb3BlcnR5VmFsdWUubGVuZ3RoKCkpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgib25Nb3VzZURPd24iLHByb3BlcnR5VmFsdWUuYXBwZW5kKCI7bW91c2Vkb3duKHRoaXMpIikudG9TdHJpbmcoKSk7Ci0KLSAgICBTdHJpbmcgaW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLGZ1bGxFbmFibGVkSW1hZ2VMaW5rLGFsdF8sIjE2IiwiMTYiLGpzSW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICByZXR1cm4gSFRNTFV0aWxzLmdldEhUTUxMaW5rVGFnKHJlc3BvbnNlLGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGZhbHNlKSksZ2V0U2VsZWN0VG9vbEFjdGlvblRhcmdldCgpLG51bGwsaW1hZ2VUYWcsbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbE1hbmFnZXIgZ2V0VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xNYW5hZ2VyXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VG9vbElkKCkKLSAgewotICAgIHJldHVybiB0b29sSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJ5dGUgZ2V0VG9vbFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRFbmFibGVkSW1hZ2VMaW5rKCkKLSAgewotICAgIHJldHVybiBlbmFibGVkSW1hZ2VMaW5rXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRIaWdobGlnaHRlZEltYWdlTGluaygpCi0gIHsKLSAgICByZXR1cm4gaGlnaGxpZ2h0ZWRJbWFnZUxpbmtfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFsdFRleHQoKQotICB7Ci0gICAgcmV0dXJuIGFsdF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFsdFRleHQoU3RyaW5nIGFsdCkKLSAgewotICAJYWx0XyA9IGFsdDsKLSAgfSAgCi0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRGb3JtTGluaygpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldEFjdGlvbkxpbmsoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhOTFhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2xNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIFRvb2xNYW5hZ2VyCi17Ci0gIHByaXZhdGUgVmVjdG9yIHRvb2xzXzsKLSAgcHJpdmF0ZSBpbnQgc2VsZWN0ZWRUb29sSWRfOwotICBwcml2YXRlIE5vZGUgbm9kZV87Ci0KLSAgcHVibGljIFRvb2xNYW5hZ2VyKE5vZGUgbm9kZSkKLSAgewotICAgIHRvb2xzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBzZWxlY3RlZFRvb2xJZF8gPSAwOwotICAgIG5vZGVfID0gbm9kZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2VsZWN0ZWRUb29sSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkVG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgc2V0U2VsZWN0ZWRUb29sSWQoaW50IHRvb2xJZCkKLSAgewotICAgIGlmICh0b29sSWQgPj0gMCAmJiB0b29sSWQgPCB0b29sc18uc2l6ZSgpKQotICAgICAgc2VsZWN0ZWRUb29sSWRfID0gdG9vbElkOwotICAgIHJldHVybiBzZWxlY3RlZFRvb2xJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGFkZFRvb2woVG9vbCB0b29sKQotICB7Ci0gICAgdG9vbHNfLmFkZEVsZW1lbnQodG9vbCk7Ci0gICAgcmV0dXJuIHRvb2xzXy5zaXplKCktMTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sIGdldFRvb2woaW50IHRvb2xJZCkKLSAgewotICAgIGlmICh0b29sSWQgPj0wICYmIHRvb2xJZCA8IGdldE51bWJlck9mVG9vbHMoKSkKLSAgICAgIHJldHVybiAoVG9vbCl0b29sc18uZWxlbWVudEF0KHRvb2xJZCk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBMaXN0IGdldFRvb2xzKCkKLSAgewotICAgIHJldHVybiB0b29sc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbCBnZXRTZWxlY3RlZFRvb2woKQotICB7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbElkXyA+PTAgJiYgc2VsZWN0ZWRUb29sSWRfIDwgZ2V0TnVtYmVyT2ZUb29scygpKQotICAgICAgcmV0dXJuIChUb29sKXRvb2xzXy5lbGVtZW50QXQoc2VsZWN0ZWRUb29sSWRfKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TnVtYmVyT2ZUb29scygpCi0gIHsKLSAgICByZXR1cm4gdG9vbHNfLnNpemUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1RyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2I5OGQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyJ3MgdHJhbnNwb3J0IHByb3ZpZGVyCi0gKiBleHRlbnNpb25zIGFuZCBpbnN0YW50aWF0aW5nIHRoZW0gd2hlbiBuZWVkZWQuIAotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRl9UUkFOU1BPUlRfUFJPVklERVJTID0gIlRSQU5TUE9SVF9QUk9WSURFUlMiOwkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX05BTUUgICAgICAgICAgID0gIndzZVRyYW5zcG9ydFByb3ZpZGVyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9UUkFOU1BPUlRfUFJPVklERVIgID0gInNvYXBUcmFuc3BvcnRQcm92aWRlciI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUkkgICAgICAgICAgICA9ICJuYW1lc3BhY2VVUkkiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU1BPUlRfVVJJICAgICAgICAgICAgPSAidHJhbnNwb3J0VVJJIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5IGluc3RhbmNlID0gbnVsbDsKLQkKLQlwcml2YXRlIExpc3QgcHJlZmVycmVkSURzICAgICAgICA9IG51bGw7IAotCXByaXZhdGUgTWFwIHNvYXBQcm92aWRlckVsZW1lbnRzID0gbnVsbDsKLQlwcml2YXRlIE1hcCBzb2FwUHJvdmlkZXJDYWNoZSAgICA9IG51bGw7Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuCi0JICogIAotCSAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLQkJCWluc3RhbmNlID0gbmV3IFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkoKTsKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQkKLQkvKgotCSAqIENvbnN0cnVjdG9yLgotCSAqLwotCXByaXZhdGUgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSgpIHsJCQotCQkKLQkJLy8gZ2V0IHRoZSBwcmVmZXJlbmNlIHZhbHVlCi0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlTdHJpbmcgdHJhbnNwb3J0UHJvdmlkZXJzID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBSRUZfVFJBTlNQT1JUX1BST1ZJREVSUykucmVwbGFjZUFsbCgiXFxzIiwgIiIpOwotCQkKLQkJLy8gc3BsaXQgaXQgaW50byBhIGxpc3Qgb2YgcHJlZmVycmVkIHRyYW5zcG9ydCBwcm92aWRlciBJRHMKLQkJaWYgKHRyYW5zcG9ydFByb3ZpZGVycy5sZW5ndGgoKSA9PSAwKQotCQkJcHJlZmVycmVkSURzID0gbmV3IEFycmF5TGlzdCgpOwotCQllbHNlCQkJCi0JCQlwcmVmZXJyZWRJRHMgPSBBcnJheXMuYXNMaXN0KHRyYW5zcG9ydFByb3ZpZGVycy5zcGxpdCgiLCIpKTsKLQkJCi0JCS8vIG5vdyBmaW5kIGFsbCBleHRlbmRlcnMKLQkJSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlncyA9IAotCSAgICAJcmVnaXN0cnkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKEV4cGxvcmVyUGx1Z2luLklELCBFWFRFTlNJT05fTkFNRSk7IAotCi0JICAgIC8vIGN1cnJlbnRseSB3ZSBvbmx5IGhhdmUgb25lIHR5cGUgb2YgcHJvdmlkZXJzOiBTT0FQIHRyYW5zcG9ydCBwcm92aWRlcnMKLQkgICAgc29hcFByb3ZpZGVyRWxlbWVudHMgPSBuZXcgSGFzaHRhYmxlKCk7CSAgICAKLQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWdzLmxlbmd0aDsgaSsrKSB7CSAgICAJCSAgICAJCi0gICAgCQlpZiAoU09BUF9UUkFOU1BPUlRfUFJPVklERVIuZXF1YWxzKGNvbmZpZ3NbaV0uZ2V0TmFtZSgpKSkgewkgICAgCQkJCi0gICAgCQkJU3RyaW5nIGlkID0gY29uZmlnc1tpXS5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgCQkJc29hcFByb3ZpZGVyRWxlbWVudHMucHV0KGlkLCBjb25maWdzW2ldKTsgICAgCQkJICAgIAkJCQkKLSAgICAJCX0JICAgIAkJICAgIAkKLQkgICAgfQotCSAgICAKLQkgICAgc29hcFByb3ZpZGVyQ2FjaGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JfQkJCi0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIFVSSXMgbWF0Y2guCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIHVyaU1hdGNoKFN0cmluZyByZXF1aXJlZCwgU3RyaW5nIHN1cHBvcnRlZCkgewotCQkKLQkJLy8gbm90IHNwZWNpZmllZCBtZWFuIHN1cHBvcnQgZXZlcnl0aGluZwotCQlpZiAoc3VwcG9ydGVkID09IG51bGwpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJCQkKLQkJaWYgKCFyZXF1aXJlZC5lbmRzV2l0aCgiLyIpKSAgcmVxdWlyZWQgKz0gIi8iOwotCQlpZiAoIXN1cHBvcnRlZC5lbmRzV2l0aCgiLyIpKSBzdXBwb3J0ZWQgKz0gIi8iOwotCQkKLQkJcmV0dXJuIHJlcXVpcmVkLmVxdWFscyhzdXBwb3J0ZWQpOwotCX0KLQkKLQkvKgotCSAqIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIGZvciB0aGUgZ2l2ZW4ga2V5LCBidXQgb25seSBpZiBpdCBzdXBwb3J0cyB0aGUgYmluZGluZyBuYW1lc3BhY2UgYW5kIHRyYW5zcG9ydAotCSAqLwotCXByaXZhdGUgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBjcmVhdGVFeHRlbnNpb24oT2JqZWN0IGtleSwgU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIHRyYW5zcG9ydFVSSSkgewotCQkKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSAoSUNvbmZpZ3VyYXRpb25FbGVtZW50KSBzb2FwUHJvdmlkZXJFbGVtZW50cy5nZXQoa2V5KTsJCQkJCQkKLQkJaWYgKGVsZW1lbnQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJYm9vbGVhbiBzdXBwb3J0c05hbWVzcGFjZSA9IHVyaU1hdGNoKG5hbWVzcGFjZVVSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoTkFNRVNQQUNFX1VSSSkpOwotCQlib29sZWFuIHN1cHBvcnRzVHJhbnNwb3J0ID0gdXJpTWF0Y2godHJhbnNwb3J0VVJJLCBlbGVtZW50LmdldEF0dHJpYnV0ZShUUkFOU1BPUlRfVVJJKSk7CQkJCi0JCQotCQlpZiAoc3VwcG9ydHNOYW1lc3BhY2UgJiYgc3VwcG9ydHNUcmFuc3BvcnQpIHsJCQkKLQkJCQotCQkJU3RyaW5nIHByb3ZpZGVyQ2xhc3NJRCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwotCQkJT2JqZWN0IG9iaiA9IG51bGw7Ci0JCQkKLQkJCXRyeSB7Ci0JCQkJLy8gY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoZSB0cmFuc3BvcnQgcHJvdmlkZXIgY2FjaGVkLAotCQkJCS8vIGlmIG5vdCwgdGhlbiBjcmVhdGUgb25lCi0JCQkJc3luY2hyb25pemVkIChzb2FwUHJvdmlkZXJDYWNoZSkgewotCQkJCQlvYmogPSBzb2FwUHJvdmlkZXJDYWNoZS5nZXQocHJvdmlkZXJDbGFzc0lEKTsgCQkJCQkKLQkJCQkJaWYgKG9iaiA9PSBudWxsKSB7CQkJCQkKLQkJCQkJCW9iaiA9IGVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLQkJCQkJCXNvYXBQcm92aWRlckNhY2hlLnB1dChwcm92aWRlckNsYXNzSUQsIG9iaik7Ci0JCQkJCX0JCQkJCQotCQkJCX0KLQkJCQlyZXR1cm4gKElTT0FQVHJhbnNwb3J0UHJvdmlkZXIpIG9iajsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHt9CQkJCQkKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIEdldCBhbiBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHRoYXQgc3VwcG9ydHMgdGhlIGJpbmRpbmcgbmFtZXNwYWNlIGFuZCB0cmFuc3BvcnQuICBUaGlzIG1ldGhvZCB3aWxsCi0JICogZmlyc3QgbG9vayBmb3IgcHJlZmVycmVkIElEcyBkZWZpbmVkIHVzaW5nIHRoZSBUUkFOU1BPUlRfUFJPVklERVJTIHByZWZlcmVuY2Uga2V5LiAgSWYgYSBzdWl0YWJsZQotCSAqIHByb3ZpZGVyIGlzIG5vdCBmb3VuZCwgaXQgd2lsbCB0aGVuIGxvb2sgYXQgYWxsIG90aGVyIGV4dGVuZGVycyBpbiBub24tZGV0ZXJtaW5pc3RpYyBvcmRlci4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIFRoZSBiaW5kaW5nIG5hbWVzcGFjZSBVUkkKLQkgKiBAcGFyYW0gdHJhbnNwb3J0VVJJIFRoZSBiaW5kaW5nIHRyYW5zcG9ydCBVUkkKLQkgKiAKLQkgKiBAcmV0dXJuIFJldHVybnMgYSBzdWl0YWJsZSBJU09BUFRyYW5wb3J0UHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBiaW5kaW5nIGluZm9ybWF0aW9uLCBvciBudWxsCi0JICogaWYgdGhlcmUncyBubyBtYXRjaC4KLQkgKi8KLQlwdWJsaWMgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBnZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIHRyYW5zcG9ydFVSSSkgewotCQotCQlJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHByb3ZpZGVyID0gbnVsbDsKLQkJCi0JCUl0ZXJhdG9yIGl0ZXIgPSBwcmVmZXJyZWRJRHMuaXRlcmF0b3IoKTsKLQkJCi0JCS8vIGNoZWNrIHByZWZlcnJlZCBJRHMgZmlyc3QKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlwcm92aWRlciA9IGNyZWF0ZUV4dGVuc2lvbihpdGVyLm5leHQoKSwgbmFtZXNwYWNlVVJJLCB0cmFuc3BvcnRVUkkpOwotCQkJaWYgKHByb3ZpZGVyICE9IG51bGwpCi0JCQkJcmV0dXJuIHByb3ZpZGVyOwotCQl9Ci0JCQotCQlpdGVyID0gc29hcFByb3ZpZGVyRWxlbWVudHMua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCi0JCS8vIGNoZWNrIHJlc3Qgb2YgdGhlIHByb3ZpZGVycwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBrZXkgPSBpdGVyLm5leHQoKTsKLQkJCi0JCQkvLyBhbHJlYWR5IGNoZWNrZWQgdGhlIHByZWZlcnJlZCBJRHMKLQkJCWlmIChwcmVmZXJyZWRJRHMuY29udGFpbnMoa2V5KSkKLQkJCQljb250aW51ZTsKLQkJCQotCQkJcHJvdmlkZXIgPSBjcmVhdGVFeHRlbnNpb24oa2V5LCBuYW1lc3BhY2VVUkksIHRyYW5zcG9ydFVSSSk7Ci0JCQlpZiAocHJvdmlkZXIgIT0gbnVsbCkKLQkJCQlyZXR1cm4gcHJvdmlkZXI7CQkJCi0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVmlld1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVmlld1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI1OTYwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1ZpZXdUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmlld1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwcml2YXRlIEhhc2h0YWJsZSB2aWV3VG9vbE1hbmFnZXJzXzsKLQotICBwdWJsaWMgVmlld1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGVuYWJsZWRJbWFnZUxpbmssU3RyaW5nIGhpZ2hsaWdodGVkSW1hZ2VMaW5rLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixlbmFibGVkSW1hZ2VMaW5rLGhpZ2hsaWdodGVkSW1hZ2VMaW5rLGFsdCk7Ci0gICAgdG9vbFR5cGVfID0gVG9vbFR5cGVzLlZJRVc7Ci0gICAgdmlld1Rvb2xNYW5hZ2Vyc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLGludCBpbmRleCk7Ci0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGFkZFRvb2xzKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlcixpbnQgaW5kZXgpOwotCi0gIHB1YmxpYyBmaW5hbCBUb29sTWFuYWdlciBjcmVhdGVUb29sTWFuYWdlcihpbnQgdmlld0lkKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyID0gbmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkpOwotICAgIGFkZFRvb2xzKHZpZXdUb29sTWFuYWdlcix2aWV3SWQpOwotICAgIGFkZFNldERlZmF1bHRWaWV3VG9vbCh2aWV3VG9vbE1hbmFnZXIsdmlld0lkKTsKLSAgICB2aWV3VG9vbE1hbmFnZXJzXy5wdXQoU3RyaW5nLnZhbHVlT2Yodmlld0lkKSx2aWV3VG9vbE1hbmFnZXIpOwotICAgIHJldHVybiB2aWV3VG9vbE1hbmFnZXI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbE1hbmFnZXIgZ2V0VG9vbE1hbmFnZXIoaW50IHZpZXdJZCkKLSAgewotICAgIHJldHVybiAoVG9vbE1hbmFnZXIpKHZpZXdUb29sTWFuYWdlcnNfLmdldChTdHJpbmcudmFsdWVPZih2aWV3SWQpKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhclZpZXdUb29sTWFuYWdlcihpbnQgdmlld0lkKQotICB7Ci0gICAgdmlld1Rvb2xNYW5hZ2Vyc18ucmVtb3ZlKFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJWaWV3VG9vbE1hbmFnZXJzKCkKLSAgewotICAgIHZpZXdUb29sTWFuYWdlcnNfLmNsZWFyKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4N2U1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBUaGUgY2xpZW50IEphdmFzY3JpcHQgZW5mb3JjZXMgdGhlIHJ1bGUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSB3YXMgc2VsZWN0ZWQgYmVmb3JlIHRoZSBmb3JtIGNhbiBiZSBzdWJtaXR0ZWQuCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyxzZWxlY3RlZE5vZGVJZHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIGZvciAoaW50IGk9MDtpPHNlbGVjdGVkTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsc2VsZWN0ZWROb2RlSWRzW2ldKTsKLSAgICAgIGlmIChhY3Rpb24uZmF2b3JpdGVFeGlzdHMoKSkgewotICAgICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGUgbm9kZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KHNlbGVjdGVkTm9kZUlkc1tpXSkpOwotICAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBub2RlLmdldE5vZGVOYW1lKCk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVfQUxSRUFEWV9FWElTVFMiLG5vZGVOYW1lKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk2Yjc2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYXNzZXJ0aW9uLlB1Ymxpc2hlckFzc2VydGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbgotewotICBwdWJsaWMgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0KLSAgICAvLyBpZHMgZnJvbSB1ZGRpT2JqZWN0c190YWJsZS5qc3AKLSAgICBTdHJpbmdbXSBzZWxlY3RlZEJ1c0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgIGlmIChzZWxlY3RlZEJ1c0lkcyA9PSBudWxsIHx8IHNlbGVjdGVkQnVzSWRzLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAvLyBTeW5jaHJvbml6ZSBjbGllbnQgdmlldyBhbmQgc2VydmVyIG1vZGVsICh1ZGRpT2JqZWN0X3RhYmxlLmpzcCkKLSAgICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgc2VsZWN0ZWRCdXNJZHMpOwotICAgICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgICBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpOwotICAgIH0KLQotICAgIFN0cmluZ1tdIGFzc2VydGlvblR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEUpOwotICAgIGlmIChhc3NlcnRpb25UeXBlcyAhPSBudWxsICYmIGFzc2VydGlvblR5cGVzLmxlbmd0aCA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFLCBhc3NlcnRpb25UeXBlcyk7Ci0gICAgZWxzZQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLQotICAgIFN0cmluZ1tdIGRpcmVjdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfRElSRUNUSU9OKTsKLSAgICBpZiAoZGlyZWN0aW9ucyAhPSBudWxsICYmIGRpcmVjdGlvbnMubGVuZ3RoID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTiwgZGlyZWN0aW9ucyk7Ci0gICAgZWxzZQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklEICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICB0cnkgewotICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJRCwgcGFzc3dvcmQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh0ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UobWUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIFVERElQcm94eSBwcm94eSA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRQcm94eSgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0Q3JlZCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0KLSAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgb3duZWQgYnVzaW5lc3MKLSAgICAvLyBpZiBub3QsIHRoZSBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQKLSAgICBpZiAoIWlzQnVzaW5lc3NPd25lZChidXNFbGVtZW50KSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVF9PV05FRF9CVVNJTkVTUyIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBTdHJpbmdbXSBhc3NlcnRpb25UeXBlcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFKTsKLSAgICAgIFN0cmluZ1tdIGRpcmVjdGlvbnMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfRElSRUNUSU9OKTsKLSAgICAgIFN0cmluZyB0aGlzQnVzaW5lc3NLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLQotICAgICAgLy8gZ2V0IGFsbCBzZWxlY3RlZCBidXNpbmVzc2VzCi0gICAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgICAgVmVjdG9yIHNlbGVjdGVkQnVzaW5lc3NlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gc2VsZWN0ZWRCdXNpbmVzc2VzLmVsZW1lbnRzKCk7Ci0gICAgICBpZiAoIWUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAvLyBjcmVhdGUgYSB2ZWN0b3Igb2YgcHVibGlzaGVyIGFzc2VydGlvbnMgYmFzZWQgb24gYWxsIHRoZSBzZWxlY3RlZCBidXNpbmVzc2VzCi0gICAgICBWZWN0b3IgcHViQXNzZXJ0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgaW50IGkgPSAwOwotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoYXNzZXJ0aW9uVHlwZXNbaV0sIGFzc2VydGlvblR5cGVzW2ldLCBUTW9kZWwuUkVMQVRJT05TSElQU19UTU9ERUxfS0VZKTsKLSAgICAgICAgaWYgKEludGVnZXIucGFyc2VJbnQoZGlyZWN0aW9uc1tpXSkgPT0gVURESUFjdGlvbklucHV0cy5ESVJFQ1RJT05fVE8pCi0gICAgICAgICAgcHViQXNzZXJ0aW9uVmVjdG9yLmFkZChuZXcgUHVibGlzaGVyQXNzZXJ0aW9uKHNwLmdldEJ1c2luZXNzS2V5KCksIHRoaXNCdXNpbmVzc0tleSwga2V5ZWRSZWYpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHB1YkFzc2VydGlvblZlY3Rvci5hZGQobmV3IFB1Ymxpc2hlckFzc2VydGlvbih0aGlzQnVzaW5lc3NLZXksIHNwLmdldEJ1c2luZXNzS2V5KCksIGtleWVkUmVmKSk7Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLQotICAgICAgLy8gcHJveHkuYWRkX3B1Ymxpc2hlckFzc2VydGlvbnMoLi4uKQotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gcHJveHkuYWRkX3B1Ymxpc2hlckFzc2VydGlvbnMocmVnaXN0cnlFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHB1YkFzc2VydGlvblZlY3Rvcik7Ci0KLSAgICAgIC8vIHJlZnJlc2ggcHVibGlzaGVyIGFzc2VydGlvbnMgaWZmIHByb3h5IHJlcG9ydHMgc3VjY2VzcwotICAgICAgaWYgKHJlcG9ydC5zdWNjZXNzKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRCdXNpbmVzc2VzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIHNob3dQQUFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gc2hvd1BBQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgT2JqZWN0IGlkcyA9IHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgICAgIGlmIChpZHMgIT0gbnVsbCkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgaWRzKTsKLSAgICAgICAgc2hvd1BBQWN0aW9uLnJ1bigpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gcmVwb3J0LnN1Y2Nlc3MoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHVkZGllLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FjMzNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLkJ1c2luZXNzTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZUludGVyZmFjZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQWRkVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwdWJsaWMgQWRkVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9DaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVnaXN0cnlFeGlzdHMoU3RyaW5nIHJlZ2lzdHJ5TmFtZSxOb2RlIHJlZ2lzdHJ5Tm9kZSkKLSAgewotICAgIHJlZ2lzdHJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX05BTUUscmVnaXN0cnlOYW1lKTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYnVzaW5lc3NFeGlzdHMoU3RyaW5nIGJ1c2luZXNzTmFtZSxOb2RlIGJ1c2luZXNzTm9kZSkKLSAgewotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNpbmVzc05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUsYnVzaW5lc3NOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzZXJ2aWNlRXhpc3RzKFN0cmluZyBzZXJ2aWNlTmFtZSxOb2RlIHNlcnZpY2VOb2RlKQotICB7Ci0gICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpLmdldFNlcnZpY2VLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSxzZXJ2aWNlTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVksc2VydmljZUtleSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2VydmljZUludGVyZmFjZUV4aXN0cyhTdHJpbmcgc2lOYW1lLE5vZGUgc2lOb2RlKQotICB7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNpTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB0TW9kZWxLZXkgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLHNpTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSx0TW9kZWxLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRSZWdpc3RyeVRvRmF2b3JpdGVzKFN0cmluZyByZWdpc3RyeU5hbWUsTm9kZSByZWdpc3RyeU5vZGUpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfUFVCTElTSF9BUEkscHVibGlzaFVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX05BTUUscmVnaXN0cnlOYW1lKTsKLSAgICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXNFbnVtID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICBpZiAodXNlckRlZmluZWRDYXRlZ29yaWVzRW51bSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfQ0FURUdPUklFU19FTlVNLHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0VudW0pOwotICAgICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfUExVR0lOX01FVEFEQVRBX0RJUkVDVE9SWSxjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkZFRvRmF2b3JpdGVzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZEJ1c2luZXNzVG9GYXZvcml0ZXMoU3RyaW5nIGJ1c2luZXNzTmFtZSxOb2RlIGJ1c2luZXNzTm9kZSkKLSAgewotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNpbmVzc05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUsYnVzaW5lc3NOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgcmV0dXJuIGFkZFRvRmF2b3JpdGVzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkU2VydmljZVRvRmF2b3JpdGVzKFN0cmluZyBzZXJ2aWNlTmFtZSxOb2RlIHNlcnZpY2VOb2RlKQotICB7Ci0gICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpLmdldFNlcnZpY2VLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSxzZXJ2aWNlTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVksc2VydmljZUtleSk7Ci0gICAgcmV0dXJuIGFkZFRvRmF2b3JpdGVzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRTZXJ2aWNlSW50ZXJmYWNlVG9GYXZvcml0ZXMoU3RyaW5nIHNpTmFtZSxOb2RlIHNpTm9kZSkKLSAgewotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdE1vZGVsS2V5ID0gc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxzaU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdE1vZGVsS2V5KTsKLSAgICByZXR1cm4gYWRkVG9GYXZvcml0ZXModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgU3RyaW5nIG5vZGVOYW1lID0gbm9kZS5nZXROb2RlTmFtZSgpOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgcmV0dXJuIHJlZ2lzdHJ5RXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgICByZXR1cm4gYnVzaW5lc3NFeGlzdHMobm9kZU5hbWUsbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICAgcmV0dXJuIHNlcnZpY2VFeGlzdHMobm9kZU5hbWUsbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgcmV0dXJuIHNlcnZpY2VJbnRlcmZhY2VFeGlzdHMobm9kZU5hbWUsbm9kZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBib29sZWFuIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpCi0gICAgewotICAgICAgYWRkVG9GYXZvcml0ZXNSZXN1bHQgPSBhZGRSZWdpc3RyeVRvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgVGhyb3dhYmxlIGVycm9yRXhjZXB0aW9uID0gY2F0ZWdvcnlNb2RlbC5nZXRFcnJvckV4Y2VwdGlvbigpOwotICAgICAgICAgIGlmIChlcnJvckV4Y2VwdGlvbiAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7Y2F0ZWdvcnlNb2RlbC5nZXREaXNwbGF5TmFtZSgpLGVycm9yRXhjZXB0aW9uLmdldE1lc3NhZ2UoKX07Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NBVklOR19DQVRFR09SWV9EQVRBIixhcmdzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgICBhZGRUb0Zhdm9yaXRlc1Jlc3VsdCA9IGFkZEJ1c2luZXNzVG9GYXZvcml0ZXMobm9kZU5hbWUsbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICAgYWRkVG9GYXZvcml0ZXNSZXN1bHQgPSBhZGRTZXJ2aWNlVG9GYXZvcml0ZXMobm9kZU5hbWUsbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgYWRkVG9GYXZvcml0ZXNSZXN1bHQgPSBhZGRTZXJ2aWNlSW50ZXJmYWNlVG9GYXZvcml0ZXMobm9kZU5hbWUsbm9kZSk7Ci0gICAgaWYgKGFkZFRvRmF2b3JpdGVzUmVzdWx0KQotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0ZBVk9SSVRFX0FEREVEIixub2RlTmFtZSkpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVfTk9UX0FEREVEIixub2RlTmFtZSkpOwotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlc1Jlc3VsdDsgICAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gYWRkVG9GYXZvcml0ZXMoSGFzaHRhYmxlIHRhYmxlLCBTdHJpbmcgcmVsKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICBpZiAoIWUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgIHJldHVybiBmYXZGb2xkZXJFbGVtZW50LmFkZEZhdm9yaXRlKHRhYmxlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSwgU3RyaW5nIHJlbCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2Um9vdEVsZW1lbnQgPSBmYXZOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZhdlJvb3RFbGVtZW50LmdldEVsZW1lbnRzKHJlbCk7Ci0gICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZmF2Rm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5mYXZvcml0ZUV4aXN0cyh0YWJsZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzZDZmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLQotcHVibGljIGNsYXNzIEJ1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHByaXZhdGUgUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXzsKLSAgcHVibGljIEJ1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbl8gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXyA9IHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fLmdldFByb3BlcnR5VGFibGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIE5vZGUgYnVzaW5lc3NOb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c2luZXNzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzaW5lc3NOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgQnVzaW5lc3NFbnRpdHkgYnVzaW5lc3NFbnRpdHkgPSBidXNpbmVzc0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICBMaXN0RWxlbWVudCBidXNMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChidXNpbmVzc0VudGl0eSk7Ci0gICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VydmljZUJ1c2luZXNzQ29weS5hZGRFbGVtZW50KGJ1c0xpc3RFbGVtZW50KTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gcmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbl8ucHJvY2Vzc090aGVycyhwYXJzZXIsZm9ybVRvb2xQSSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlXy5jb250YWluc0tleShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUikpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIsYnVzaW5lc3NFbnRpdHkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFjNzA4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci0KLXB1YmxpYyBjbGFzcyBCdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHJpdmF0ZSBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl87Ci0KLSAgcHVibGljIEJ1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uXyA9IG5ldyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXyA9IHJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uXy5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBOb2RlIGJ1c2luZXNzTm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNpbmVzc0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c2luZXNzTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEJ1c2luZXNzRW50aXR5IGJ1c2luZXNzRW50aXR5ID0gYnVzaW5lc3NFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgTGlzdEVsZW1lbnQgYnVzTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoYnVzaW5lc3NFbnRpdHkpOwotICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkuYWRkRWxlbWVudChidXNMaXN0RWxlbWVudCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7IAotICAgIGJvb2xlYW4gcmVzdWx0ID0gcmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25fLnByb2Nlc3NPdGhlcnMocGFyc2VyLGZvcm1Ub29sUEkpOwotICAgIGlmICghcHJvcGVydHlUYWJsZV8uY29udGFpbnNLZXkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKSkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIsYnVzaW5lc3NFbnRpdHkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uXy5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTk0NThhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLkJ1c2luZXNzTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLQotcHVibGljIGNsYXNzIEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwcml2YXRlIEJ1c2luZXNzTm9kZSBidXNOb2RlXzsKLSAgcHVibGljIEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgYnVzTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlQnVzaW5lc3MoKQotICB7Ci0gICAgaW50IGJ1c05vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGJ1c05vZGVfID0gKEJ1c2luZXNzTm9kZSlub2RlTWFuYWdlcl8uZ2V0Tm9kZShidXNOb2RlSWQpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLQotICAgIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX0JVU0lORVNTX1NFUlZJQ0VTIixidXNOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIsc3ApOyAgICAKLSAgICAKLSAgICBMaXN0RWxlbWVudCBidXNpbmVzc0xpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHNwKTsKLSAgICBidXNpbmVzc0xpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhidXNOb2RlXy5nZXROb2RlSWQoKSxidXNOb2RlXy5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksYnVzTm9kZV8uZ2V0Vmlld0lkKCkpOwotICAgIFZlY3RvciBidXNpbmVzc0xpc3RWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYnVzaW5lc3NMaXN0VmVjdG9yLmFkZEVsZW1lbnQoYnVzaW5lc3NMaXN0RWxlbWVudCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTLGJ1c2luZXNzTGlzdFZlY3Rvcik7Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiZWI4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24gZXh0ZW5kcyBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24KLXsKLSAgcHVibGljIENsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpZiAoIWlzU3RhbGVOb2RlKG5vZGVJZCkpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RSZWwoZWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKE1vZGVsQ29uc3RhbnRzLlJFTF9DSElMRFJFTikpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZjYzZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQ2xlYXJOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgQ2xlYXJOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsU3RyaW5nLnZhbHVlT2YoY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlSWQoKSkpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAibmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gInByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gInN0YXR1c0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJlNTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZUlkcyAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyxzZWxlY3RlZE5vZGVJZHMpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlbGVjdGVkTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc0MDM5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlZ2lzdGVyZWRJbmZvOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotCi0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnaXN0cnlOb2RlXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMb2dnZWRJbl87Ci0KLSAgcHVibGljIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0KLSAgICByZWdpc3RyeU5vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gIT0gbnVsbCkKLSAgICAgIGlzTG9nZ2VkSW5fID0gKChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpKS5pc0xvZ2dlZEluKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZEJ1c0lkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgICBWZWN0b3IgYnVzaW5lc3NWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgIExpc3RNYW5hZ2VyIGJ1c2luZXNzQ29weSA9IChMaXN0TWFuYWdlcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFkpOwotICAgIGlmIChzZWxlY3RlZEJ1c0lkcyA9PSBudWxsIHx8IHNlbGVjdGVkQnVzSWRzLmxlbmd0aCA8PSAwKSB7Ci0gICAgICBidXNpbmVzc1ZlY3Rvci5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgYnVzaW5lc3NDb3B5LmNsZWFyKCk7Ci0gICAgfQotICAgIEVudW1lcmF0aW9uIGUgPSBidXNpbmVzc0NvcHkuZ2V0TGlzdEVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIGJvb2xlYW4gaXNJZEZvdW5kID0gZmFsc2U7Ci0gICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpbnQgbGlzdEVsZW1lbnRWaWV3SWQgPSBsZS5nZXRWaWV3SWQoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGxpc3RFbGVtZW50Vmlld0lkID09IEludGVnZXIucGFyc2VJbnQoc2VsZWN0ZWRCdXNJZHNbaV0pKSB7Ci0gICAgICAgICAgaXNJZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFpc0lkRm91bmQpCi0gICAgICAgIGJ1c2luZXNzVmVjdG9yLnJlbW92ZShsZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNCdXNpbmVzc093bmVkKEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50KSB7Ci0gICAgYm9vbGVhbiBpc0J1c2luZXNzT3duZWQgPSBmYWxzZTsKLSAgICBTdHJpbmcgaXNCdXNpbmVzc093bmVkU3RyaW5nID0gYnVzRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5JU19CVVNJTkVTU19PV05FRCk7Ci0gICAgaWYgKGlzQnVzaW5lc3NPd25lZFN0cmluZyAhPSBudWxsKSB7Ci0gICAgICBpc0J1c2luZXNzT3duZWQgPSBCb29sZWFuLnZhbHVlT2YoaXNCdXNpbmVzc093bmVkU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaXNMb2dnZWRJbl8pIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgICAgUmVnaXN0ZXJlZEluZm8gcmkgPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8ocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpKTsKLSAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcmkuZ2V0QnVzaW5lc3NJbmZvcygpLmdldEJ1c2luZXNzSW5mb1ZlY3RvcigpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmVWZWN0b3IuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgeyAKLSAgICAgICAgICBCdXNpbmVzc0luZm8gYmkgPSAoQnVzaW5lc3NJbmZvKWl0Lm5leHQoKTsKLSAgICAgICAgICBpZiAoYmkuZ2V0QnVzaW5lc3NLZXkoKS5lcXVhbHMoYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCkpKQotICAgICAgICAgIHsgIAotICAgICAgICAgICAgaXNCdXNpbmVzc093bmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBidXNFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLklTX0JVU0lORVNTX09XTkVELCBTdHJpbmcudmFsdWVPZihpc0J1c2luZXNzT3duZWQpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICB9Ci0gICAgcmV0dXJuIGlzQnVzaW5lc3NPd25lZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4NGI0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkNvbXBsZXRpb25TdGF0dXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBDb21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gZXh0ZW5kcyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uCi17Ci0gIHB1YmxpYyBDb21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotCi0gICAgLy8gaWRzIGZyb20gdWRkaU9iamVjdHNfdGFibGUKLSAgICBTdHJpbmdbXSBzZWxlY3RlZEJ1c0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgIGlmIChzZWxlY3RlZEJ1c0lkcyAhPSBudWxsICYmIHNlbGVjdGVkQnVzSWRzLmxlbmd0aCA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIHNlbGVjdGVkQnVzSWRzKTsKLSAgICAvLyBTeW5jaHJvbml6ZSBjbGllbnQgdmlldyBhbmQgc2VydmVyIG1vZGVsICh1ZGRpT2JqZWN0X3RhYmxlLmpzcCkKLSAgICBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBsb2cgaW4KLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySUQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklEKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gaWRzIGZyb20gcHVibGlzaGVyIGFzc2VydGlvbiB0YWJsZQotICAgIFN0cmluZ1tdIHB1YkFzc2VydGlvbnNWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCk7Ci0gICAgaWYgKHB1YkFzc2VydGlvbnNWaWV3SWRzID09IG51bGwgfHwgcHViQXNzZXJ0aW9uc1ZpZXdJZHMubGVuZ3RoID09IDApCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIGVsc2UKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCwgcHViQXNzZXJ0aW9uc1ZpZXdJZHMpOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIGxvZyBpbiBmaXJzdAotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCwgdXNlcklELCBwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHRlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpZS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShtZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9ICAgICAgCi0gICAgfQotCi0gICAgVURESVByb3h5IHByb3h5ID0gcmVnaXN0cnlFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRDcmVkKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICBMaXN0TWFuYWdlciBwdWJBc3NlcnRpb25zID0gYnVzRWxlbWVudC5nZXRQdWJsaXNoZXJBc3NlcnRpb25zKCk7Ci0KLSAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgb3duZWQgYnVzaW5lc3MKLSAgICAvLyBpZiBub3QsIHRoZSBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQKLSAgICBpZiAoIWlzQnVzaW5lc3NPd25lZChidXNFbGVtZW50KSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVF9PV05FRF9CVVNJTkVTUyIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBTdHJpbmdbXSBwdWJBc3NlcnRpb25WaWV3SWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCk7Ci0gICAgICBWZWN0b3IgcHViQXNzZXJ0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHB1YkFzc2VydGlvblZpZXdJZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQocHViQXNzZXJ0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gcHViQXNzZXJ0aW9ucy5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKCEocHViQXNzZXJ0aW9uRWxlbWVudC5nZXRTdGF0dXMoKS5lcXVhbHMoQ29tcGxldGlvblN0YXR1cy5DT01QTEVURSkpKQotICAgICAgICAgIHB1YkFzc2VydGlvblZlY3Rvci5hZGQocHViQXNzZXJ0aW9uRWxlbWVudC5nZXRQdWJsaXNoZXJBc3NlcnRpb24oKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwdWJBc3NlcnRpb25WZWN0b3Iuc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19JTkNPTVBMRVRFX0FTU0VSVElPTl9TRUxFQ1RFRCIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSBwcm94eS5hZGRfcHVibGlzaGVyQXNzZXJ0aW9ucyhyZWdpc3RyeUVsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgcHViQXNzZXJ0aW9uVmVjdG9yKTsKLSAgICAgIC8vcmVwb3J0IHN0YXR1cwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGopKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLQotICAgICAgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gc2hvd1BBQWN0aW9uID0gbmV3IFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gc2hvd1BBQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgIE9iamVjdCBpZHMgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgICAgaWYgKGlkcyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgaWRzKTsKLSAgICAgIHNob3dQQUFjdGlvbi5ydW4oKTsKLQotICAgICAgcmV0dXJuIHJlcG9ydC5zdWNjZXNzKCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGopKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0ZpbmRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0ZpbmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzN2Y4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9GaW5kQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeVBhcmVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5RdWVyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZpbmRBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdWJRdWVyeUdldF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIHByb3RlY3RlZCBib29sZWFuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzUmVmcmVzaEFjdGlvbl87Ci0KLSAgcHVibGljIEZpbmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcXVlcnlFbGVtZW50XyA9IG51bGw7Ci0gICAgc3ViUXVlcnlLZXlfID0gbnVsbDsKLSAgICBpc1N1YlF1ZXJ5R2V0XyA9IGZhbHNlOwotICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gICAgaXNSZWZyZXNoQWN0aW9uXyA9IGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2V0dXAgZm9yIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSLCBwYXJzZXIpOwotCi0gICAgbmV3U3ViUXVlcnlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQpOwotICAgIFN0cmluZyBpc1N1YlF1ZXJ5R2V0U3RyaW5nID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgbmV3U3ViUXVlcnlJdGVtXyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSk7Ci0gICAgc3ViUXVlcnlLZXlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLmNsZWFyRXJyb3JzKCk7Ci0KLSAgICBpZiAobmV3U3ViUXVlcnlfICE9IG51bGwgJiYgbmV3U3ViUXVlcnlfLmxlbmd0aCgpID4gMCkKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gICAgICAKLSAgICBpZiAoaXNTdWJRdWVyeUdldFN0cmluZyAhPSBudWxsKQotICAgICAgaXNTdWJRdWVyeUdldF8gPSBCb29sZWFuLnZhbHVlT2YoaXNTdWJRdWVyeUdldFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0KLSAgICBpZiAocXVlcnlOYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHF1ZXJ5TmFtZSk7Ci0KLSAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhxdWVyeU5hbWUpICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUVVFUllfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXByb2Nlc3NPdGhlcnMocGFyc2VyLGZvcm1Ub29sUEkpICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgCi0gICAgZm9yIChpbnQgaT0wO2k8cmVtb3ZlZFByb3BlcnRpZXNfLnNpemUoKTtpKyspCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KHJlbW92ZWRQcm9wZXJ0aWVzXy5lbGVtZW50QXQoaSkpOwotICAgIGZvcm1Ub29sUEkudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0gICAgICAKLSAgICAvLyBQcm9jZXNzIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLiBJZiB2YWxpZCwgdGhlc2Ugc2hvdWxkIGJlIHNldCBpbiB0aGUgZm9ybVRvb2wgKG5vdCB0aGUgZm9ybVRvb2xQSSkuCi0gICAgU3RyaW5nIG93bmVkQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uID0gKG93bmVkQ2hlY2tlZCAhPSBudWxsKSAmJiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKSAmJiAhb3ZlcnJpZGVBdXRoZW50aWNhdGlvblZhbGlkYXRpb24oKTsKLQotICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIH0gICAgICAKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmIHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgIH0KLQotICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgdmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJZCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgIH0KLQotICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIH0gICAgICAgIAotICAgICAgCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gb3ZlcnJpZGVBdXRoZW50aWNhdGlvblZhbGlkYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5SW5pdGlhdGVkKCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlHZXQoKQotICB7Ci0gICAgcmV0dXJuIGlzU3ViUXVlcnlHZXRfOwotICB9ICAgIAotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnlJdGVtKCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeUl0ZW1fOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRSZWZyZXNoQWN0aW9uKGJvb2xlYW4gaXNSZWZyZXNoQWN0aW9uKQotICB7Ci0gICAgaXNSZWZyZXNoQWN0aW9uXyA9IGlzUmVmcmVzaEFjdGlvbjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSZWZyZXNoQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBpc1JlZnJlc2hBY3Rpb25fOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkUXVlcnlOb2RlKCkKLSAgewotICAgIC8vIElmIHRoZSBxdWVyeUVsZW1lbnQgYWxyZWFkeSBleGlzdHMsIHJlbW92ZSBpdCBmaXJzdC4KLSAgICBTdHJpbmcgcXVlcnlOYW1lID0gcXVlcnlFbGVtZW50Xy5nZXROYW1lKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUXVlcnlQYXJlbnRFbGVtZW50IHF1ZXJ5UGFyZW50RWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHF1ZXJ5UGFyZW50RWxlbWVudC5nZXRRdWVyaWVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgUXVlcnlFbGVtZW50IHFlID0gKFF1ZXJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAocWUuZ2V0TmFtZSgpLmVxdWFscyhxdWVyeU5hbWUpKQotICAgICAgewotICAgICAgICBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgPSAoU3ViUXVlcnlUcmFuc2ZlclRhcmdldClxZS5nZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQpOwotICAgICAgICBpZiAoc3ViUXVlcnlUcmFuc2ZlclRhcmdldCAhPSBudWxsICYmIChxZS5nZXRRdWVyeVR5cGUoKSA9PSBxdWVyeUVsZW1lbnRfLmdldFF1ZXJ5VHlwZSgpKSkKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfLnNldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCxzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KTsKLSAgICAgICAgcWUuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFpc1JlZnJlc2hBY3Rpb25fKQotICAgIHsKLSAgICAgIC8vIFdlIGNhbiBtYWtlIHNhZmUgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIG5vZGUgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCi0gICAgICBpZiAoc3ViUXVlcnlLZXlfICE9IG51bGwgJiYgc3ViUXVlcnlLZXlfLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHBhcmVudFF1ZXJ5S2V5OwotICAgICAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IHN1YlF1ZXJ5S2V5Xy5sYXN0SW5kZXhPZignOicpOwotICAgICAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA9PSAtMSkKLSAgICAgICAgICBwYXJlbnRRdWVyeUtleSA9ICIiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyZW50UXVlcnlLZXkgPSBzdWJRdWVyeUtleV8uc3Vic3RyaW5nKDAsbGFzdFNlcGFyYXRvclBvcyk7Ci0gICAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBwYXJlbnRGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlnZXRTZWxlY3RlZEZvcm1Ub29sKCkpLmdldEZvcm1Ub29sUHJvcGVydGllcyhwYXJlbnRRdWVyeUtleSk7Ci0gICAgICAgIE9iamVjdCBxdWVyeUl0ZW0gPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSk7Ci0gICAgICAgIE9iamVjdCBxdWVyeVN0eWxlQnVzID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMpOwotICAgICAgICBPYmplY3QgcXVlcnlTdHlsZVNlciA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyk7Ci0gICAgICAgIE9iamVjdCBxdWVyeVN0eWxlU2VySW50ID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwYXJlbnRRdWVyeURhdGEgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIGlmIChxdWVyeUl0ZW0gIT0gbnVsbCkKLSAgICAgICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSwgcXVlcnlJdGVtKTsKLSAgICAgICAgaWYgKHF1ZXJ5U3R5bGVCdXMgIT0gbnVsbCkKLSAgICAgICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUywgcXVlcnlTdHlsZUJ1cyk7Ci0gICAgICAgIGlmIChxdWVyeVN0eWxlU2VyICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLCBxdWVyeVN0eWxlU2VyKTsKLSAgICAgICAgaWYgKHF1ZXJ5U3R5bGVTZXJJbnQgIT0gbnVsbCkKLSAgICAgICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLCBxdWVyeVN0eWxlU2VySW50KTsKLSAgICAgICAgcXVlcnlFbGVtZW50Xy5zZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQsbmV3IFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCksc3ViUXVlcnlLZXlfLHBhcmVudFF1ZXJ5RGF0YSkpOwotICAgICAgfQotICAgIH0KLSAgICBxdWVyeVBhcmVudEVsZW1lbnQuY29ubmVjdChxdWVyeUVsZW1lbnRfLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUyxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSAoUXVlcnlOb2RlKShyZWdOb2RlXy5nZXRDaGlsZE5vZGUocXVlcnlQYXJlbnRFbGVtZW50KS5nZXRDaGlsZE5vZGUocXVlcnlFbGVtZW50XykpOwotICAgIGludCBuZXdTZWxlY3RlZE5vZGVJZDsKLSAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IDEgcmVzdWx0LCBzZWxlY3QgdGhlIHJlc3VsdC4gT3RoZXJ3aXNlLCBzZWxlY3QgdGhlIHF1ZXJ5IG5vZGUgdG8gcHJlc2VudCBhIHN1bW1hcnkuCi0gICAgaWYgKHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID09IDEgJiYgKHN1YlF1ZXJ5S2V5XyA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Xy5sZW5ndGgoKSA9PSAwKSkKLSAgICAgIG5ld1NlbGVjdGVkTm9kZUlkID0gKChOb2RlKShxdWVyeU5vZGUuZ2V0Q2hpbGROb2RlcygpLmVsZW1lbnRBdCgwKSkpLmdldE5vZGVJZCgpOwotICAgIGVsc2UKLSAgICAgIG5ld1NlbGVjdGVkTm9kZUlkID0gcXVlcnlOb2RlLmdldE5vZGVJZCgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdTZWxlY3RlZE5vZGVJZCk7Ci0gICAgcXVlcnlOb2RlLnNldEZpbmRUb29sUHJvcGVydGllcyh0aGlzKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkN2UwYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGNsYnVzaEB1cy5pYm0uY29tIC0gQ2hyaXN0b3BoZXIgQnVzaCAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZhLnJtaS5BbHJlYWR5Qm91bmRFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2VzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWdpc3RlcmVkSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBMb2dpbkFkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbiB7Ci0gICBwdWJsaWMgTG9naW5BZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSwgU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfCi0gICAgICAgICAgICAucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUywgU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQsIFN0cmluZwotICAgICAgICAgICAgLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMsIFN0cmluZwotICAgICAgICAgICAgLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUykpOwotICAgfQotCi0gICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpCi0gICAgICAgICB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgICAgU3RyaW5nIG93bmVkQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCk7Ci0KLSAgICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgICBpZiAob3duZWRDaGVja2VkICE9IG51bGwpCi0gICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCwgb3duZWRDaGVja2VkKTsKLSAgICAgIGVsc2UKLSAgICAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpOwotCi0gICAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgYm9vbGVhbiBhdHRlbXB0aW5nRG91YmxlTG9naW4oKXsKLQkgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLQkgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLQkgICBOb2RlIHJvb3ROb2RlID0gcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKS5nZXRSb290Tm9kZSgpOwotICAgICAgIFZlY3RvciBhbGxOb2RlcyA9IHJvb3ROb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAKLSAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgYWxsTm9kZXMuc2l6ZSgpOyBrKyspewotICAgICAgCSBOb2RlIG4gPSAoTm9kZSlhbGxOb2Rlcy5nZXQoayk7Ci0gICAgICAJIGlmIChuIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKXsKLSAgICAgIAkJIFJlZ2lzdHJ5RWxlbWVudCBteUVsZW1lbnQgPSAoKFJlZ2lzdHJ5RWxlbWVudCluLmdldFRyZWVFbGVtZW50KCkpOwotICAgICAgCQkgaWYgKG4uZ2V0Tm9kZUlkKCkgIT0gcmVnTm9kZV8uZ2V0Tm9kZUlkKCkgJiYgcHVibGlzaFVSTC5lcXVhbHMobXlFbGVtZW50LmdldFB1Ymxpc2hVUkwoKSkpCi0gICAgICAJCQkgaWYodXNlcklkLmVxdWFscyhteUVsZW1lbnQuZ2V0VXNlcklkKCkpKQotICAgICAgCQkJCSByZXR1cm4gdHJ1ZTsKLSAgICAgIAkgfQotICAgICAgIH0KLSAgICAgICByZXR1cm4gZmFsc2U7Ci0gICB9Ci0gICAKLSAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpIHsKLSAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrIFRyeWluZyB0byBsb2dpbiArKysrKyIpOwotICAgICAgdHJ5IHsKLSAgICAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsKLSAgICAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICAgICBpbnQgbWF4UmVzdWx0cyA9IDMwMDsKLSAgICAgICAgIAotICAgICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEKLSAgICAgICAgIC8vIHF1ZXJ5IG5vZGUuCi0gICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpIHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAKLSAgICAgICAgICAgICAgICAgCi0gICAgICAgICBpZihhdHRlbXB0aW5nRG91YmxlTG9naW4oKSkKLSAgICAgICAgCSB0aHJvdyBuZXcgQWxyZWFkeUJvdW5kRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19OT19NVUxUSVBMRV9MT0dJTiIpKTsgCi0gICAgICAgICAKLSAgICAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySWQsIHBhc3N3b3JkKTsKLQotICAgICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotCi0gICAgICAgICBCdXNpbmVzc0luZm9zIGJ1c0luZm9zID0gbnVsbDsKLSAgICAgICAgIFRNb2RlbEluZm9zIHRtSW5mb3MgPSBudWxsOwotCi0gICAgICAgICBSZWdpc3RlcmVkSW5mbyByaSA9IHByb3h5LmdldF9yZWdpc3RlcmVkSW5mbyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCkpOwotICAgICAgICAgYnVzSW5mb3MgPSByaS5nZXRCdXNpbmVzc0luZm9zKCk7Ci0gICAgICAgICB0bUluZm9zID0gcmkuZ2V0VE1vZGVsSW5mb3MoKTsKLQotICAgICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID0gTWF0aC5taW4obWF4UmVzdWx0cywgYnVzSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgIFZlY3RvciBidXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzOyBpKyspIHsKLSAgICAgICAgICAgIEJ1c2luZXNzSW5mbyBidXNJbmZvID0gKEJ1c2luZXNzSW5mbykgYnVzSW5mb3MuZ2V0KGkpOwotICAgICAgICAgICAgYnVzaW5lc3NLZXlzLmFkZEVsZW1lbnQoYnVzSW5mby5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgICAgIH0KLQotICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID4gMCkgewotICAgICAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkgewotICAgICAgICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgICAgICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gbnVsbDsKLSAgICAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZXMgYnMgPSBudWxsOwotICAgICAgICAgICAgICAgaW50IHNpemUgPSBiZVZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSkgYmVWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYmUsIHJlZ0VsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgYnMgPSBiZS5nZXRCdXNpbmVzc1NlcnZpY2VzKCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAoYnMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIHZTZXJ2aWNlcyA9IGJzLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcnZpY2VzID0gdlNlcnZpY2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXM7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYnMuZ2V0KGopLCByZWdFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZQotICAgICAgICAgICAgICAgICAgICAgICAgLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQiLCBTdHJpbmcudmFsdWVPZihzaXplKSkpOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgfQotCi0gICAgICAgICBpbnQgZmluYWxOdW1iZXJPZlRNb2RlbHMgPSBNYXRoLm1pbihtYXhSZXN1bHRzLCB0bUluZm9zLnNpemUoKSk7Ci0gICAgICAgICBWZWN0b3IgdE1vZGVsS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmluYWxOdW1iZXJPZlRNb2RlbHM7IGkrKykgewotICAgICAgICAgICAgVE1vZGVsSW5mbyB0bUluZm8gPSAoVE1vZGVsSW5mbykgdG1JbmZvcy5nZXQoaSk7Ci0gICAgICAgICAgICB0TW9kZWxLZXlzLmFkZEVsZW1lbnQodG1JbmZvLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgIH0KLQotICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZUTW9kZWxzID4gMCkgewotICAgICAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkgewotICAgICAgICAgICAgICAgVmVjdG9yIGZpbmFsVE1vZGVsVmVjdG9yID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh0TW9kZWxLZXlzKS5nZXRUTW9kZWxWZWN0b3IoKTsKLQotICAgICAgICAgICAgICAgaW50IHNpemUgPSBmaW5hbFRNb2RlbFZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICAgIFRNb2RlbCB0bSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgdG0gPSAoVE1vZGVsKSBmaW5hbFRNb2RlbFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZSh0bSwgcmVnRWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIiwgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVPZihzaXplKSkpOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgfQotCi0gICAgICAgICBpbnQgaWQgPSAxOwotICAgICAgICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSBnZXRSZWdpc3RyeU5vZGUoKTsKLQotICAgICAgICAgLy8gd2UgYXJlIGxvZ2dlZCBpbiBzbyBjaGFuZ2UgdGhlIGxvZ2luVG9vbCB0byBhY3QgYXMgYSBsb2dvdXRUb29sOwotICAgICAgICAgcmVnTm9kZS5nZXRMb2dpblRvb2woKS5zZXRBbHRUZXh0KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTE9HT1VUIikpOwotICAgICAgICAgcmVnTm9kZS5nZXRMb2dpblRvb2woKS5zZXRUb0xvZ291dExpbmsoKTsKLSAgICAgICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgICAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgICAgc1swXSA9IHJlZ2lzdHJ5TmFtZTsKLSAgICAgICAgIHNbMV0gPSB1c2VySWQ7Ci0gICAgICAgICByZWdFbGVtZW50LnNldE5hbWUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0xPR0dFRF9JTl9OT0RFIiwgcykpOwotCi0gICAgICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPiAwKSB7Ci0gICAgICAgICAgICBOb2RlIHBiZU5vZGUgPSByZWdOb2RlLmdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgICAgICAgICAgaWQgPSBwYmVOb2RlLmdldE5vZGVJZCgpOwotICAgICAgICAgfSBlbHNlIGlmIChmaW5hbE51bWJlck9mVE1vZGVscyA+IDApIHsKLSAgICAgICAgICAgIE5vZGUgcHNpTm9kZSA9IHJlZ05vZGUuZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCkpOwotICAgICAgICAgICAgaWQgPSBwc2lOb2RlLmdldE5vZGVJZCgpOwotICAgICAgICAgfSAKLSAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiTm9kZSBpZCA9ICIgKyBpZCk7Ci0gICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5zZXRTZWxlY3RlZE5vZGVJZChpZCk7Ci0gICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotCi0gICAgICAgICBpZiAoKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzIDwgMSkgJiYgKGZpbmFsTnVtYmVyT2ZUTW9kZWxzIDwgMSkpCi0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9fQlVTSU5FU1NFU19PUl9TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiKSk7Ci0KLSAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfSBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfSBjYXRjaCAoQWxyZWFkeUJvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAJIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAkgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkFscmVhZHlCb3VuZEV4Y2VwdGlvbiIpOwotICAgIAkgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NmRmMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExvZ291dEFkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgTG9nb3V0QWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcmVnTm9kZV8uZ2V0TG9naW5Ub29sKCkuc2V0VG9SZWdpc3RyeUxpbmsoKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKHJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKSB7Ci0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ291dCgpOwotICAgICAgICByZWdFbGVtZW50LnJlbW92ZSgpOwotICAgICAgICByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpLnNldFNlbGVjdGVkTm9kZUlkKDApOyAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2E4NmYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgMjAwNzA0MTkgICAxODI4NjQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2VzOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdWJRdWVyeUdldF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIHByb3RlY3RlZCBib29sZWFuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLQotICBwdWJsaWMgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IG51bGw7Ci0gICAgaXNTdWJRdWVyeUdldF8gPSBmYWxzZTsKLSAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIG5ld1N1YlF1ZXJ5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEKTsKLSAgICBTdHJpbmcgaXNTdWJRdWVyeUdldFN0cmluZyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgIG5ld1N1YlF1ZXJ5SXRlbV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0pOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZ1tdIHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSk7Ci0gICAgU3RyaW5nW10gc2VydmljZU5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0UpOwotICAgIFN0cmluZyBvcGVyYXRpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OKTsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OLG9wZXJhdGlvbik7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04pOwotCi0gICAgaWYgKHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXMgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUscmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlcyk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFKTsKLQotICAgIGlmIChzZXJ2aWNlTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTKTsKLSAgICAgIGlmIChzZXJ2aWNlcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEhhc2h0YWJsZSByZXN1bHRIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZU5vZGVJZHMubGVuZ3RoO2krKykKLSAgICAgICAgcmVzdWx0SGFzaC5wdXQoc2VydmljZU5vZGVJZHNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VzLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgaWYgKHJlc3VsdEhhc2guZ2V0KFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VzLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgICBpLS07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTLHNlcnZpY2VzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyk7Ci0KLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgIHsKLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotCi0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySWQpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgICAgfQotCi0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpPTA7aTxyZW1vdmVkUHJvcGVydGllc18uc2l6ZSgpO2krKykKLSAgICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkocmVtb3ZlZFByb3BlcnRpZXNfLmVsZW1lbnRBdChpKSk7Ci0gICAgZm9ybVRvb2xQSS51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uU3RyaW5nID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04pOwotICAgIGludCBvcGVyYXRpb24gPSBJbnRlZ2VyLnBhcnNlSW50KG9wZXJhdGlvblN0cmluZyk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIFZlY3RvciByZWZlcmVuY2VkU2VydmljZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTKTsKLSAgICBib29sZWFuIG9wZXJhdGlvblJlc3VsdCA9IHRydWU7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGN1cnJlbnRTUCA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LmdldF9idXNpbmVzc0RldGFpbChjdXJyZW50U1AuZ2V0QnVzaW5lc3NLZXkoKSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICAKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgICAgCi0gICAgICBIYXNodGFibGUgc2VydmljZXNIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgVmVjdG9yIGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBzd2l0Y2ggKG9wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9BREQ6Ci0gICAgICAgICAgVmVjdG9yIHNlcnZpY2VzID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyk7ICAgICAgICAgIAotICAgICAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VzLnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgTGlzdEVsZW1lbnQgc2VydmljZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2Upc2VydmljZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgc2VydmljZXNIYXNoLnB1dChicy5nZXRTZXJ2aWNlS2V5KCksYnMpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGxpc3Qgb2YgQnVzaW5lc3NTZXJ2aWNlcyBmb3Igcm9sbGJhY2sgb3BlcmF0aW9ucy4KLSAgICAgICAgICBiYWNrdXBBbmRVcGRhdGVCdXNpbmVzc1NlcnZpY2VzKGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc3Asc2VydmljZXNIYXNoLHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBiZVZlY3Rvci5hZGQoc3ApOwotICAgICAgICAgICAgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuc2F2ZV9idXNpbmVzcyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJlVmVjdG9yKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VzLnNpemUoKTtpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIExpc3RFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlzZXJ2aWNlRWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJzTmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1JFRkVSRU5DRUQiLGJzTmFtZSkpOwotICAgICAgICAgICAgICBzZXJ2aWNlcy5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvbGwgYmFjayBhbmQgcmVzdG9yZSB0aGUgb2xkIGxpc3Qgb2Ygc2VydmljZXMuCi0gICAgICAgICAgICByb2xsYmFja0J1c2luZXNzU2VydmljZXMoc3AsYmFja3VwQnVzU2VydmljZVZlY3RvcixzZXJ2aWNlcyx1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNU0dfRVJST1JfU0VSVklDRV9OT1RfUkVGRVJFTkNFRCIpOwotICAgICAgICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICAgICAgICAgIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhzcCxiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNlcnZpY2VzLHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1TR19FUlJPUl9TRVJWSUNFX05PVF9SRUZFUkVOQ0VEIik7Ci0gICAgICAgICAgICBpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgICAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMsc2VydmljZXMpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX1JFTU9WRToKLSAgICAgICAgICBTdHJpbmdbXSByZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUpOwotICAgICAgICAgIFZlY3RvciBzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIGZvciAoaW50IGk9MDtpPHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXMubGVuZ3RoO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIGlzQ2hlY2tlZCA9IEJvb2xlYW4udmFsdWVPZihyZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChpc0NoZWNrZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIExpc3RFbGVtZW50IHJlZmVyZW5jZWRTZXJ2aWNlTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpcmVmZXJlbmNlZFNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlyZWZlcmVuY2VkU2VydmljZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgICBzZXJ2aWNlc0hhc2gucHV0KGJzLmdldFNlcnZpY2VLZXkoKSxicyk7Ci0gICAgICAgICAgICAgIHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IuYWRkRWxlbWVudChicyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGxpc3Qgb2YgYnVzaW5lc3Mgc2VydmljZXMgZm9yIHJvbGxiYWNrIG9wZXJhdGlvbnMuCi0gICAgICAgICAgYmFja3VwQW5kVXBkYXRlQnVzaW5lc3NTZXJ2aWNlcyhiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNwLHNlcnZpY2VzSGFzaCxmYWxzZSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgYmVWZWN0b3IuYWRkKHNwKTsKLSAgICAgICAgICAgIHNwID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2Upc2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgIFN0cmluZyBic05hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9SRUZFUkVOQ0VfUkVNT1ZFRCIsYnNOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgICAgICAgICAgcm9sbGJhY2tCdXNpbmVzc1NlcnZpY2VzKHNwLGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3Rvcix1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNU0dfRVJST1JfUkVGRVJFTkNFX05PVF9SRU1PVkVEIik7Ci0gICAgICAgICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgICAgICAgICAgcm9sbGJhY2tCdXNpbmVzc1NlcnZpY2VzKHNwLGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3Rvcix1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNU0dfRVJST1JfUkVGRVJFTkNFX05PVF9SRU1PVkVEIik7Ci0gICAgICAgICAgICBpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgICAgICAgICAgCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSByZWZlcmVuY2VkIHNlcnZpY2VzIGFyZSByZWZyZXNoZWQgd2hlbiB0aGUgZm9ybSByZWxvYWRzLgotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMpOwotICAgICAgYnVzRWxlbWVudC5zZXRCdXNpbmVzc0VudGl0eShzcCk7Ci0gICAgICByZXR1cm4gb3BlcmF0aW9uUmVzdWx0OwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIAlvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gb3BlcmF0aW9uUmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUluaXRpYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUdldCgpCi0gIHsKLSAgICByZXR1cm4gaXNTdWJRdWVyeUdldF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5KCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlJdGVtXzsKLSAgfQotICAKLSAgLy8gQmFja3VwIHRoZSBidXNpbmVzcyBzZXJ2aWNlcyBhbmQgcmVtb3ZlIHRob3NlIGluIHNlcnZpY2VIYXNoIGZyb20gdGhlIGN1cnJlbnQgbGlzdC4gUmV0dXJuIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYnVzaW5lc3Mgc2VydmljZXMKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGJhY2t1cEFuZFVwZGF0ZUJ1c2luZXNzU2VydmljZXMoVmVjdG9yIGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3IsQnVzaW5lc3NFbnRpdHkgYmUsSGFzaHRhYmxlIHNlcnZpY2VzSGFzaCxib29sZWFuIGlzQWRkKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBsaXN0IG9mIGJ1c2luZXNzIHNlcnZpY2VzIGZvciByb2xsYmFjayBvcGVyYXRpb25zLgotICAgIEJ1c2luZXNzU2VydmljZXMgY3VycmVudEJ1c1NlcnZpY2VzID0gYmUuZ2V0QnVzaW5lc3NTZXJ2aWNlcygpOwotICAgIGlmIChjdXJyZW50QnVzU2VydmljZXMgPT0gbnVsbCkKLSAgICAgIGN1cnJlbnRCdXNTZXJ2aWNlcyA9IG5ldyBCdXNpbmVzc1NlcnZpY2VzKCk7Ci0gICAgVmVjdG9yIGN1cnJlbnRCdXNTZXJ2aWNlVmVjdG9yID0gY3VycmVudEJ1c1NlcnZpY2VzLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPGN1cnJlbnRCdXNTZXJ2aWNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgewotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGN1cnJlbnRCdXNTZXJ2aWNlID0gKEJ1c2luZXNzU2VydmljZSljdXJyZW50QnVzU2VydmljZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICBiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLmFkZEVsZW1lbnQoY3VycmVudEJ1c1NlcnZpY2UpOwotICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYnVzaW5lc3Mgc2VydmljZSBpcyBhIG1lbWJlciBvZiB0aGUgbGlzdCB0byBiZSByZW1vdmVkL2FkZGVkLCByZW1vdmUgaXQgbm93LgotICAgICAgaWYgKHNlcnZpY2VzSGFzaC5nZXQoY3VycmVudEJ1c1NlcnZpY2UuZ2V0U2VydmljZUtleSgpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjdXJyZW50QnVzU2VydmljZVZlY3Rvci5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgIGktLTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQWRkKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBzZXJ2aWNlc0hhc2guZWxlbWVudHMoKTsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICBjdXJyZW50QnVzU2VydmljZVZlY3Rvci5hZGRFbGVtZW50KChCdXNpbmVzc1NlcnZpY2UpZS5uZXh0RWxlbWVudCgpKTsKLSAgICB9Ci0gICAgYmUuc2V0QnVzaW5lc3NTZXJ2aWNlcyhjdXJyZW50QnVzU2VydmljZXMpOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgcm9sbGJhY2tCdXNpbmVzc1NlcnZpY2VzKEJ1c2luZXNzRW50aXR5IGJlLFZlY3RvciBiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLFZlY3RvciBvcGVyYXRlZFNlcnZpY2VzLFBlcnNwZWN0aXZlIHBlcnNwZWN0aXZlLE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUsU3RyaW5nIGVycm9yTWVzc2FnZUtleSkKLSAgewotICAgIC8vIFJvbGwgYmFjayBhbmQgcmVzdG9yZSB0aGUgb2xkIGxpc3Qgb2Ygc2VydmljZXMuCi0gICAgYmUuZ2V0QnVzaW5lc3NTZXJ2aWNlcygpLnNldEJ1c2luZXNzU2VydmljZVZlY3RvcihiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yKTsKLSAgICBmb3IgKGludCBpPTA7aTxvcGVyYXRlZFNlcnZpY2VzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgc2VydmljZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW9wZXJhdGVkU2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlzZXJ2aWNlTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBTdHJpbmcgYnNOYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoZXJyb3JNZXNzYWdlS2V5LGJzTmFtZSkpOwotICAgIH0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL09wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL09wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjZjg0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uKCkKLSAgewotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdm9pZCBhZGRTZXNzaW9uQW5kVE1vZGVsS2V5KFN0cmluZ0J1ZmZlciByZXN1bHQsU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkpCi0gIHsKLSAgICByZXN1bHQuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChjYXRlZ29yeVRNb2RlbEtleSk7Ci0gIH0KLSAgCi0gIC8vIHVkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3A/c2Vzc2lvbklkPS4uLiZjYXRlZ29yeVRNb2RlbEtleT0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcD8iKTsKLSAgICBhZGRTZXNzaW9uQW5kVE1vZGVsS2V5KGFjdGlvbkxpbmssc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRDYXRlZ29yeUNvbnRlbnRQYWdlKFN0cmluZyBzZXNzaW9uSWQsU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2NhdGVnb3J5X2NvbnRlbnQuanNwPyIpOwotICAgIGFkZFNlc3Npb25BbmRUTW9kZWxLZXkoYWN0aW9uTGluayxzZXNzaW9uSWQsY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFdpbGRDYXJkQWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLCIlIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mjg4YzdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MTIgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5VRERJTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgT3BlblJlZ2lzdHJ5QWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuUmVnaXN0cnlBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgLy8gU2VsZWN0IFVEREkgTWFpbi4KLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKTsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlVERElfVVNFUk5BTUUpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5VRERJX1BBU1NXT1JEKTsKLSAgICBTdHJpbmcgY2hlY2tVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKTsKLSAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBpZiAocmVnaXN0cnlOYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FLHJlZ2lzdHJ5TmFtZSk7Ci0KLSAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhyZWdpc3RyeU5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9SRUdJU1RSWV9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChpbnF1aXJ5VVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCxpbnF1aXJ5VVJMKTsKLSAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5VVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX0lOUVVJUllfVVJMIikpOwotICAgIH0KLQotICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCwgcHVibGlzaFVSTCk7Ci0gICAgCi0gICAgaWYgKHVzZXJuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1VTRVJOQU1FLCB1c2VybmFtZSk7Ci0KLSAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlVERElfUEFTU1dPUkQsIHBhc3N3b3JkKTsKLQotICAgIGlmIChjaGVja1VzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTLGNoZWNrVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyk7Ci0gICAgICAKLSAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlksY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSk7Ci0KLSAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnYXRoZXJXU1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyhVRERJUHJveHkgcHJveHksSGFzaHRhYmxlIGNhdGVnb3J5TW9kZWxzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGNhdGVnb3J5QmFnLmFkZChuZXcgS2V5ZWRSZWZlcmVuY2UoIiIsImNhdGVnb3JpemF0aW9uIixUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkpOwotICAgICAgVE1vZGVsTGlzdCB0TW9kZWxMaXN0ID0gcHJveHkuZmluZF90TW9kZWwoIiUiLGNhdGVnb3J5QmFnLG51bGwsbnVsbCwxMDApOwotICAgICAgVE1vZGVsSW5mb3MgdE1vZGVsSW5mb3MgPSB0TW9kZWxMaXN0LmdldFRNb2RlbEluZm9zKCk7Ci0gICAgICBWZWN0b3IgdE1vZGVsS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVsSW5mb3Muc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgVE1vZGVsSW5mbyB0TW9kZWxJbmZvID0gdE1vZGVsSW5mb3MuZ2V0KGkpOwotICAgICAgICB0TW9kZWxLZXlWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpKTsKLSAgICAgIH0KLSAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleVZlY3Rvcik7Ci0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVsVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKXRNb2RlbFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGJvb2xlYW4gY2hlY2tlZCA9IGZhbHNlOwotICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSBudWxsOwotICAgICAgICBTdHJpbmcgY2F0ZWdvcnlLZXkgPSBudWxsOwotICAgICAgICBjYXRlZ29yeUJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotICAgICAgICBmb3IgKGludCBqPTA7ajxjYXRlZ29yeUJhZy5zaXplKCk7aisrKQotICAgICAgICB7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBjYXRlZ29yeUJhZy5nZXQoaik7Ci0gICAgICAgICAgU3RyaW5nIGtyVE1vZGVsS2V5ID0ga3IuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgICAgaWYgKGtyVE1vZGVsS2V5LmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLkdFTkVSQUxfS0VZV09SRFNfVE1PREVMX0tFWSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGtyS2V5TmFtZSA9IGtyLmdldEtleU5hbWUoKTsKLSAgICAgICAgICAgIGlmIChrcktleU5hbWUuZXF1YWxzKCJ1cm46eC1pYm06dWRkaTpjdXN0b21UYXhvbm9teTprZXkiKSkKLSAgICAgICAgICAgICAgY2F0ZWdvcnlLZXkgPSBrci5nZXRLZXlWYWx1ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoa3JLZXlOYW1lLmVxdWFscygidXJuOngtaWJtOnVkZGk6Y3VzdG9tVGF4b25vbXk6ZGlzcGxheU5hbWUiKSkKLSAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBrci5nZXRLZXlWYWx1ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChrclRNb2RlbEtleS5lcXVhbHNJZ25vcmVDYXNlKFRNb2RlbC5UWVBFU19UTU9ERUxfS0VZKSkKLSAgICAgICAgICAgIGNoZWNrZWQgPSBrci5nZXRLZXlWYWx1ZSgpLmVxdWFscygiY2hlY2tlZCIpOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGlmIChjYXRlZ29yeUtleSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09IG51bGwpCi0gICAgICAgICAgICBkaXNwbGF5TmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsID0gbmV3IENhdGVnb3J5TW9kZWwoKTsKLSAgICAgICAgICBjYXRlZ29yeU1vZGVsLnNldENhdGVnb3J5S2V5KGNhdGVnb3J5S2V5KTsKLSAgICAgICAgICBjYXRlZ29yeU1vZGVsLmVuYWJsZUNoZWNrZWQoY2hlY2tlZCk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXREaXNwbGF5TmFtZShkaXNwbGF5TmFtZSk7Ci0gICAgICAgICAgU3RyaW5nIHRNb2RlbEtleSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICAgICBjYXRlZ29yeU1vZGVsLnNldFRNb2RlbEtleSh0TW9kZWxLZXkpOwotICAgICAgICAgIGNhdGVnb3J5TW9kZWxzLnB1dCh0TW9kZWxLZXksY2F0ZWdvcnlNb2RlbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSk7Ci0gICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyByZWdpc3RyYXRpb25VUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJBVElPTl9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5VRERJX1VTRVJOQU1FKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuVURESV9QQVNTV09SRCk7Ci0gICAgICBib29sZWFuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUykgIT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlkpOwotCi0gICAgICBTdHJpbmcgcmVjb2duaXplZFB1Ymxpc2hVUkwgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0S25vd25SZWdpc3RyeVB1Ymxpc2hVUkwoaW5xdWlyeVVSTCk7Ci0gICAgICBTdHJpbmcgcmVjb2duaXplZFJlZ2lzdHJhdGlvblVSTCA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRLbm93blJlZ2lzdHJ5UmVnaXN0cmF0aW9uVVJMKGlucXVpcnlVUkwpOwotICAgICAgCi0gICAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgICBwdWJsaXNoVVJMID0gcmVjb2duaXplZFB1Ymxpc2hVUkw7Ci0gICAgICBpZiAocmVnaXN0cmF0aW9uVVJMID09IG51bGwpCi0gICAgICAgIHJlZ2lzdHJhdGlvblVSTCA9IHJlY29nbml6ZWRSZWdpc3RyYXRpb25VUkw7Ci0gICAgICAgIAotICAgICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpKGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRSb290Tm9kZSgpKTsKLSAgICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSAoVURESU1haW5FbGVtZW50KXVkZGlNYWluTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5wdXQoQWN0aW9uSW5wdXRzLlRSQU5TUE9SVF9DTEFTU19OQU1FLCBBY3Rpb25JbnB1dHMuVFJBU1BPUlRfQ0xBU1MpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gbmV3IFVERElQcm94eShwcm9wcyk7Ci0gICAgICBwcm94eS5zZXRJbnF1aXJ5VVJMKG5ldyBVUkwoaW5xdWlyeVVSTCkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IG5ldyBSZWdpc3RyeUVsZW1lbnQocHJveHksaW5xdWlyeVVSTCxyZWdpc3RyeU5hbWUsdWRkaU1haW5FbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgLy8gU2V0IHJlZ2lzdHJ5IGVsZW1lbnQncyBwdWJsaXNoIFVSTCBhbmQgcmVnaXN0cmF0aW9uIFVSTCBwcm92aWRlZCBieSBleHRlcm5hbCBjYWxsZXJzIChlLmcuIGZhdm9yaXRlcykuCi0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgICByZWdpc3RyeUVsZW1lbnQuc2V0Q2FjaGVkUHVibGlzaFVSTChwdWJsaXNoVVJMKTsKLSAgICAgIGlmIChyZWdpc3RyYXRpb25VUkwgIT0gbnVsbCkKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnNldFJlZ2lzdHJhdGlvblVSTChyZWdpc3RyYXRpb25VUkwpOwotICAgICAgaWYgKHVzZXJuYW1lICE9IG51bGwpCi0gICAgICAJcmVnaXN0cnlFbGVtZW50LnNldFVzZXJJZCh1c2VybmFtZSk7Ci0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIAlyZWdpc3RyeUVsZW1lbnQuc2V0Q3JlZChwYXNzd29yZCk7Ci0gICAgICByZWdpc3RyeUVsZW1lbnQuc2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMoY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkKTsKLSAgICAgIGlmIChjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQpCi0gICAgICB7Ci0gICAgICAgIEhhc2h0YWJsZSBjYXRlZ29yeU1vZGVscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgZ2F0aGVyV1NVc2VyRGVmaW5lZENhdGVnb3JpZXMocHJveHksY2F0ZWdvcnlNb2RlbHMpOwotICAgICAgICBpZiAoY2F0ZWdvcnlNb2RlbHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICByZWdpc3RyeUVsZW1lbnQuc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKGNhdGVnb3J5TW9kZWxzKTsKLSAgICAgIH0KLSAgICAgIHJlZ2lzdHJ5RWxlbWVudC5zZXRDYXRlZ29yaWVzRGlyZWN0b3J5KGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgICAgdWRkaU1haW5FbGVtZW50LmNvbm5lY3QocmVnaXN0cnlFbGVtZW50LFVERElNb2RlbENvbnN0YW50cy5SRUxfUkVHSVNUUklFUyxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpTWFpbk5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIGludCBuZXdSZWdpc3RyeU5vZGVJZCA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGUocmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICAgIC8vIFNlbGVjdCB0aGUgbmV3IHJlZ2lzdHJ5IG5vZGUgYW5kIGFkZCB0aGUgc2VsZWN0IGFjdGlvbiB0byB0aGUgaGlzdG9yeS4KLSAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5ld1JlZ2lzdHJ5Tm9kZUlkKTsKLSAgICAgIE5vZGUgcmVnaXN0cnlOb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHJlZ2lzdHJ5Tm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSx0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKS5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVHSVNUUllfT1BFTkVEIixuZXcgU3RyaW5nW117cmVnaXN0cnlOYW1lLGlucXVpcnlVUkx9KSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCk7Ci0gICAgfQotICAgIC8qCi0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgKi8KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1B1Ymxpc2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1B1Ymxpc2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyOWI2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9QdWJsaXNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZWRJdGVtc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQdWJsaXNoQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgc3ViUXVlcnlLZXlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1fOwotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ05vZGVfOwotCi0gIHB1YmxpYyBQdWJsaXNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IG51bGw7Ci0gICAgaXNTdWJRdWVyeUdldF8gPSBmYWxzZTsKLSAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2V0dXAgZm9yIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSLCBwYXJzZXIpOwotIAotICAgIG5ld1N1YlF1ZXJ5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEKTsKLSAgICBTdHJpbmcgaXNTdWJRdWVyeUdldFN0cmluZyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgIG5ld1N1YlF1ZXJ5SXRlbV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0pOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLmNsZWFyRXJyb3JzKCk7Ci0KLSAgICBpZiAobmV3U3ViUXVlcnlfICE9IG51bGwgJiYgbmV3U3ViUXVlcnlfLmxlbmd0aCgpID4gMCkKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0KLSAgICBpZiAoaXNTdWJRdWVyeUdldFN0cmluZyAhPSBudWxsKQotICAgICAgaXNTdWJRdWVyeUdldF8gPSBCb29sZWFuLnZhbHVlT2YoaXNTdWJRdWVyeUdldFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0KLSAgICBpZiAoIXByb2Nlc3NPdGhlcnMocGFyc2VyLGZvcm1Ub29sUEkpICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotCi0gICAgZm9yIChpbnQgaT0wO2k8cmVtb3ZlZFByb3BlcnRpZXNfLnNpemUoKTtpKyspCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KHJlbW92ZWRQcm9wZXJ0aWVzXy5lbGVtZW50QXQoaSkpOwotICAgIGZvcm1Ub29sUEkudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0KLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBib29sZWFuIHZhbGlkYXRlQXV0aGVudGljYXRpb24gPSAhcmVnRWxlbWVudC5pc0xvZ2dlZEluKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlcklkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIH0KLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmIHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySWQpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICB9Ci0KLSAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRQdWJsaXNoZWRJdGVtTm9kZShCdXNpbmVzc0VudGl0eSBiZSxSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIEJ1c2luZXNzRWxlbWVudCBiZUVsZW1lbnQgPSBuZXcgQnVzaW5lc3NFbGVtZW50KGJlLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50ID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBwdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudC5nZXRJdGVtcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIEJ1c2luZXNzRWxlbWVudCBlbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBlbGVtZW50QkUgPSBlbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBpZiAoZWxlbWVudEJFLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGJlLmdldEJ1c2luZXNzS2V5KCkpKQotICAgICAgewotICAgICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbm5lY3RFbGVtZW50cyhwdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCxiZUVsZW1lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkUHVibGlzaGVkSXRlbU5vZGUoQnVzaW5lc3NTZXJ2aWNlIGJzLFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU2VydmljZUVsZW1lbnQgc0VsZW1lbnQgPSBuZXcgU2VydmljZUVsZW1lbnQoYnMscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkU2VydmljZXNFbGVtZW50ID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcHVibGlzaGVkU2VydmljZXNFbGVtZW50LmdldEl0ZW1zKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU2VydmljZUVsZW1lbnQgZWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgZWxlbWVudEJTID0gZWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgIGlmIChlbGVtZW50QlMuZ2V0U2VydmljZUtleSgpLmVxdWFscyhicy5nZXRTZXJ2aWNlS2V5KCkpKQotICAgICAgewotICAgICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbm5lY3RFbGVtZW50cyhwdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQsc0VsZW1lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkUHVibGlzaGVkSXRlbU5vZGUoVE1vZGVsIHRNb2RlbCxSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCh0TW9kZWwscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50ID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50LmdldEl0ZW1zKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgZWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBUTW9kZWwgZWxlbWVudFRNb2RlbCA9IGVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0gICAgICBpZiAodE1vZGVsLmdldFRNb2RlbEtleSgpLmVxdWFscyhlbGVtZW50VE1vZGVsLmdldFRNb2RlbEtleSgpKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBjb25uZWN0RWxlbWVudHMocHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50LHNpRWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY29ubmVjdEVsZW1lbnRzKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQsVHJlZUVsZW1lbnQgaXRlbUVsZW1lbnQpCi0gIHsKLSAgICBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuY29ubmVjdChpdGVtRWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUyxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGludCBuZXdOb2RlSWQgPSByZWdOb2RlXy5nZXRDaGlsZE5vZGUocHVibGlzaGVkSXRlbXNFbGVtZW50KS5nZXRDaGlsZE5vZGUoaXRlbUVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdOb2RlSWQpOwotICAgIE5vZGUgbmV3Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gbmV3Tm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5SW5pdGlhdGVkKCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0KCkKLSAgewotICAgIHJldHVybiBpc1N1YlF1ZXJ5R2V0XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnlJdGVtKCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeUl0ZW1fOwotICB9Ci0gIAotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCArIDFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoIC0gMV0gPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcihjb250cm9sbGVyXyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxYWRhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLkJ1c2luZXNzTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5QdWJsaXNoZWRJdGVtc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUXVlcnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlF1ZXJ5UGFyZW50Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZUludGVyZmFjZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESU5vZGVBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwcml2YXRlIFZlY3RvciBzdGFsZU5vZGVzXzsKLSAgcHVibGljIFJlZnJlc2hVRERJTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxTdHJpbmcudmFsdWVPZihjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGVJZCgpKSk7Ci0gICAgc3RhbGVOb2Rlc18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZlcmlmeU5vZGVEYXRhKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgcmV0dXJuIHJlZnJlc2hCdXNpbmVzc0VsZW1lbnQoKEJ1c2luZXNzTm9kZSlub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgICByZXR1cm4gcmVmcmVzaFNlcnZpY2VFbGVtZW50KChTZXJ2aWNlTm9kZSlub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgICByZXR1cm4gcmVmcmVzaFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KChTZXJ2aWNlSW50ZXJmYWNlTm9kZSlub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgIHsKLSAgICAgIC8vIE5vdGhpbmcgdG8gdmVyaWZ5Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIFJlZ2lzdHJ5Tm9kZQotICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpCi0gICAgICAgIHJlZnJlc2hSZWdpc3RyeUVsZW1lbnQoKFJlZ2lzdHJ5Tm9kZSlub2RlKTsKLSAgICAgICAgCi0gICAgICAvLyBGb2xkZXJOb2RlcwotICAgICAgVmVjdG9yIGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIFZlY3RvciByZWZyZXNoQWN0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNoaWxkTm9kZXMuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSAoTm9kZSljaGlsZE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgUmVmcmVzaFVERElOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESU5vZGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBhY3Rpb24uc2V0U3RhbGVOb2RlcyhzdGFsZU5vZGVzXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgU3RyaW5nIGNoaWxkTm9kZUlkU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoY2hpbGROb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxjaGlsZE5vZGVJZFN0cmluZyk7Ci0gICAgICAgIGlmICghYWN0aW9uLnZlcmlmeU5vZGVEYXRhKCkpCi0gICAgICAgICAgc3RhbGVOb2Rlc18uYWRkRWxlbWVudChjaGlsZE5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmVmcmVzaEFjdGlvbnMuYWRkRWxlbWVudChhY3Rpb24pOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxyZWZyZXNoQWN0aW9ucyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCByZWZyZXNoUmVnaXN0cnlFbGVtZW50KFJlZ2lzdHJ5Tm9kZSByZWdOb2RlKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBIYXNodGFibGUgdXNlckRlZmluZWRDYXRlZ29yaWVzID0gbnVsbDsKLSAgICBpZiAocmVnRWxlbWVudC5nZXRDaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpKQotICAgIHsKLSAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBvcGVuUmVnQWN0aW9uID0gbmV3IE9wZW5SZWdpc3RyeUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBvcGVuUmVnQWN0aW9uLmdhdGhlcldTVXNlckRlZmluZWRDYXRlZ29yaWVzKHJlZ0VsZW1lbnQuZ2V0UHJveHkoKSx1c2VyRGVmaW5lZENhdGVnb3JpZXMpOwotICAgICAgaWYgKCF1c2VyRGVmaW5lZENhdGVnb3JpZXMua2V5cygpLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSBudWxsOwotICAgICAgICByZWdOb2RlLnNldEltYWdlUGF0aChSZWdpc3RyeU5vZGUuSU1BR0VfUEFUSF9TVEFOREFSRCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gcmVnRWxlbWVudC5nZXRDYXRlZ29yaWVzRGlyZWN0b3J5KCk7Ci0gICAgICAgIEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gYWRkQWN0aW9uID0gbmV3IEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeSAhPSBudWxsKQotICAgICAgICAgIGFkZEFjdGlvbi5saW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5lbGVtZW50cygpLGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYWRkQWN0aW9uLmxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEocmVnRWxlbWVudC5nZXROYW1lKCksdXNlckRlZmluZWRDYXRlZ29yaWVzLmVsZW1lbnRzKCkpOwotICAgICAgICByZWdOb2RlLnNldEltYWdlUGF0aChSZWdpc3RyeU5vZGUuSU1BR0VfUEFUSF9XSVRIX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmVnRWxlbWVudC5zZXRVc2VyRGVmaW5lZENhdGVnb3JpZXModXNlckRlZmluZWRDYXRlZ29yaWVzKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiByZWZyZXNoQnVzaW5lc3NFbGVtZW50KEJ1c2luZXNzTm9kZSBidXNOb2RlKQotICB7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdXVpZEtleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLHV1aWRLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFLGJ1c05vZGUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBib29sZWFuIHZlcmlmeVJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAodmVyaWZ5UmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxuZXcgQnVzaW5lc3NFbGVtZW50KChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpLGJ1c0VsZW1lbnQuZ2V0TW9kZWwoKSkpOwotICAgIHJldHVybiB2ZXJpZnlSZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gcmVmcmVzaFNlcnZpY2VFbGVtZW50KFNlcnZpY2VOb2RlIHNlcnZpY2VOb2RlKQotICB7Ci0gICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpLmdldFNlcnZpY2VLZXkoKTsKLSAgICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSx1dWlkS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSxzZXJ2aWNlTm9kZSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIGJvb2xlYW4gdmVyaWZ5UmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmICh2ZXJpZnlSZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULG5ldyBTZXJ2aWNlRWxlbWVudCgoQnVzaW5lc3NTZXJ2aWNlKXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCksc2VydmljZUVsZW1lbnQuZ2V0TW9kZWwoKSkpOwotICAgIHJldHVybiB2ZXJpZnlSZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gcmVmcmVzaFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KFNlcnZpY2VJbnRlcmZhY2VOb2RlIHNpTm9kZSkKLSAgewotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKS5nZXRUTW9kZWxLZXkoKTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdXVpZEtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUsc2lOb2RlKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgYm9vbGVhbiB2ZXJpZnlSZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHZlcmlmeVJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsbmV3IFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KChUTW9kZWwpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSxzaUVsZW1lbnQuZ2V0TW9kZWwoKSkpOwotICAgIHJldHVybiB2ZXJpZnlSZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjb25uZWN0RWxlbWVudHMoTm9kZSBwYXJlbnROb2RlLFRyZWVFbGVtZW50IG5ld0VsZW1lbnQpCi0gIHsKLSAgICBUcmVlRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyByZWwgPSBudWxsOwotICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNOb2RlKQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVM7Ci0gICAgZWxzZSBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUllfUkVTVUxUUzsKLSAgICBlbHNlIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgUXVlcnlQYXJlbnROb2RlKQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTOwotICAgIHBhcmVudEVsZW1lbnQuY29ubmVjdChuZXdFbGVtZW50LHJlbCxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIE5vZGUgbmV3Tm9kZSA9IHBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlKG5ld0VsZW1lbnQpOwotICAgIGludCBuZXdOb2RlSWQgPSBuZXdOb2RlLmdldE5vZGVJZCgpOwotICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChuZXdOb2RlSWQpOwotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gbmV3Tm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpZiAoIWlzU3RhbGVOb2RlKG5vZGVJZCkpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIE9iamVjdCBsYXRlc3RPYmplY3QgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLSAgICAgIGlmIChsYXRlc3RPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGxhdGVzdE9iamVjdCBpbnN0YW5jZW9mIFZlY3RvcikKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciByZWZyZXNoQWN0aW9ucyA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8cmVmcmVzaEFjdGlvbnMuc2l6ZSgpO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBSZWZyZXNoVURESU5vZGVBY3Rpb24gcmVmcmVzaEFjdGlvbiA9IChSZWZyZXNoVURESU5vZGVBY3Rpb24pcmVmcmVzaEFjdGlvbnMuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgcmVmcmVzaEFjdGlvbi5ydW4oKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7ICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCBvbGRFbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIG9sZEVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICAgIGNvbm5lY3RFbGVtZW50cyhub2RlLmdldFBhcmVudCgpLChUcmVlRWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gUXVlcnlOb2RlcwotICAgICAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSlub2RlOwotICAgICAgICBGaW5kQWN0aW9uIGZpbmRBY3Rpb24gPSBxdWVyeU5vZGUuZ2V0RmluZEFjdGlvbigpOwotICAgICAgICBmaW5kQWN0aW9uLnNldFJlZnJlc2hBY3Rpb24odHJ1ZSk7Ci0gICAgICAgIGlmICghZmluZEFjdGlvbi5ydW4oKSkKLSAgICAgICAgICBxdWVyeU5vZGUucmVtb3ZlQ2hpbGROb2Rlcyh0cnVlKTsKLSAgICAgICAgZmluZEFjdGlvbi5zZXRSZWZyZXNoQWN0aW9uKGZhbHNlKTsKLSAgICAgIH0KLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19OT0RFX1JFRlJFU0hFRCIsbm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgVmVjdG9yIGdldFN0YWxlTm9kZXMoKQotICB7Ci0gICAgcmV0dXJuIHN0YWxlTm9kZXNfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdGFsZU5vZGVzKFZlY3RvciBzdGFsZU5vZGVzKQotICB7Ci0gICAgc3RhbGVOb2Rlc18gPSBzdGFsZU5vZGVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlM2NhZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESU5vZGVzQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByaXZhdGUgVmVjdG9yIHN0YWxlTm9kZXNfOwotCi0gIHB1YmxpYyBSZWZyZXNoVURESU5vZGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHN0YWxlTm9kZXNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgLy8gVGhlIGNsaWVudCBKYXZhc2NyaXB0IGVuZm9yY2VzIHRoZSBydWxlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSB0aGUgZm9ybSBjYW4gYmUgc3VibWl0dGVkLgotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsc2VsZWN0ZWROb2RlSWRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpbnQgY29sbGVjdG9yTm9kZUlkID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Tm9kZUlkKCk7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIFJlZnJlc2hVRERJTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElOb2RlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2VsZWN0ZWROb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgaWYgKGFjdGlvbi52ZXJpZnlOb2RlRGF0YSgpKQotICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICAgIHN0YWxlTm9kZXNfLmFkZEVsZW1lbnQobmF2aWdhdG9yTWFuYWdlci5nZXROb2RlKG5vZGVJZCkpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PREVfREFUQV9WQUxJREFUSU9OX0ZBSUxFRCIsbmF2aWdhdG9yTWFuYWdlci5nZXROb2RlKG5vZGVJZCkuZ2V0Tm9kZU5hbWUoKSkpOwotICAgICAgfQotICAgIH0KLSAgICBuYXZpZ2F0b3JNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKGNvbGxlY3Rvck5vZGVJZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVmVjdG9yIGdldFN0YWxlTm9kZXMoKQotICB7Ci0gICAgcmV0dXJuIHN0YWxlTm9kZXNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MzE3MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1dWlkS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIAotICAgIGlmICh1dWlkS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSx1dWlkS2V5KTsKLSAgICAgIAotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXVpZEtleSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VVSURfS0VZIikpOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIAotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZSBvciBldmVuIFVERElNYWluTm9kZS4KLSAgICAgIGlmIChyZWdOb2RlXyA9PSBudWxsKQotICAgICAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgoTm9kZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUpKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgQnVzaW5lc3NFbnRpdHlbXSBiZUxpc3QgPSBuZXcgQnVzaW5lc3NFbnRpdHlbMV07Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwodXVpZEtleSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIGlmIChiZVZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBiZVZlY3Rvci50b0FycmF5KGJlTGlzdCk7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChiZUxpc3QscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJlTGlzdC5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxiZUxpc3RbMF0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0JVU0lORVNTRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFhNTc1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkxzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLlRNb2RlbEJhZzsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsgICAgCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotICAgIFN0cmluZ1tdIGxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIHNpTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UpOwotICAgIFN0cmluZ1tdIGRpc2NvdmVyeVVSTFZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwpOwotICAgIFN0cmluZ1tdIGZpbmRRdWFsaWZpZXJWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUik7Ci0gICAgU3RyaW5nIG1heFNlYXJjaFNldCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gICAgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmIChvd25lZENoZWNrZWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVELG93bmVkQ2hlY2tlZCk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCk7Ci0KLSAgICBpZiAobGFuZ3VhZ2VzICE9IG51bGwgJiYgbmFtZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIE5hbWUgdWRkaTRqTmFtZTsKLSAgICAgICAgaWYgKGxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLGxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqTmFtZSk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxuYW1lVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0KLSAgICBpZiAoaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMsaWRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLQotICAgIGlmIChzaU5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBbHRob3VnaCB3ZSBhbHJlYWR5IGhhdmUgdGhlICJzdWJtaXR0ZWQiIGRhdGEsIGRlbGV0aW9ucyBvY2N1ciBvbiB0aGUgY2xpZW50IHNpZGUgYW5kIHRodXMgdGhlIG5lZWQgdG8gdHJhY2sgdGhpcyB1c2luZyBoaWRkZW4gZm9ybSBlbGVtZW50cy4KLSAgICAgIFZlY3RvciBidXNTZXJ2aWNlSW50ZXJmYWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICBpZiAoYnVzU2VydmljZUludGVyZmFjZXMgPT0gbnVsbCkKLSAgICAgICAgYnVzU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3IgYnVzU2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVN0cmluZ1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEhhc2h0YWJsZSByZXN1bHRIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2lOb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgICAgIHJlc3VsdEhhc2gucHV0KHNpTm9kZUlkc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgZm9yIChpbnQgaT0wO2k8YnVzU2VydmljZUludGVyZmFjZXNDb3B5LnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weS5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChyZXN1bHRIYXNoLmdldChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICB0TW9kZWxLZXlTdHJpbmdWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gbmV3IFRNb2RlbEJhZyh0TW9kZWxLZXlTdHJpbmdWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTLGJ1c1NlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1RNT0RFTEJBRyx0TW9kZWxCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcpOwotICAgIH0KLQotICAgIGlmIChkaXNjb3ZlcnlVUkxWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSBuZXcgRGlzY292ZXJ5VVJMcygpOwotICAgICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTFZhbHVlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gbmV3IERpc2NvdmVyeVVSTChkaXNjb3ZlcnlVUkxWYWx1ZXNbaV0sIiIpOwotICAgICAgICBkaXNjb3ZlcnlVUkxWZWN0b3IuYWRkRWxlbWVudChkaXNjb3ZlcnlVUkwpOwotICAgICAgfQotICAgICAgZGlzY292ZXJ5VVJMcy5zZXREaXNjb3ZlcnlVUkxWZWN0b3IoZGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsZGlzY292ZXJ5VVJMcyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0KLSAgICBpZiAoZmluZFF1YWxpZmllclZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gbmV3IEZpbmRRdWFsaWZpZXJzKCk7Ci0gICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gbmV3IEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllclZhbHVlc1tpXSk7Ci0gICAgICAgIGZpbmRRdWFsaWZpZXJWZWN0b3IuYWRkRWxlbWVudChmaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICAgIGZpbmRRdWFsaWZpZXJzLnNldEZpbmRRdWFsaWZpZXJWZWN0b3IoZmluZFF1YWxpZmllclZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19GSU5EUVVBTElGSUVSUyxmaW5kUXVhbGlmaWVycyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMpOwotCi0gICAgaWYgKG1heFNlYXJjaFNldCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhTZWFyY2hTZXQpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9TRUFSQ0hfU0VUIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWF4UmVzdWx0cyAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4UmVzdWx0cykpCi0gICAgewotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUyk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1JFU1VMVFMiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIERpc2NvdmVyeVVSTHMgZHVwRGlzY292ZXJ5VVJMcyhEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMsIFN0cmluZyB1c2VUeXBlLCBTdHJpbmcgZHVwVXNlVHlwZSkgewotICAgIGlmIChkaXNjb3ZlcnlVUkxzID09IG51bGwpCi0gICAgICByZXR1cm4gZGlzY292ZXJ5VVJMczsKLSAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gZGlzY292ZXJ5VVJMcy5nZXREaXNjb3ZlcnlVUkxWZWN0b3IoKTsKLSAgICBpZiAoZGlzY292ZXJ5VVJMVmVjdG9yID09IG51bGwpCi0gICAgICByZXR1cm4gZGlzY292ZXJ5VVJMczsKLSAgICBWZWN0b3IgbmV3RGlzY292ZXJ5VVJMVmVjdG9yID0gbmV3IFZlY3RvcihkaXNjb3ZlcnlVUkxWZWN0b3IpOwotICAgIEVudW1lcmF0aW9uIGUgPSBkaXNjb3ZlcnlVUkxWZWN0b3IuZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IChEaXNjb3ZlcnlVUkwpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKGRpc2NvdmVyeVVSTC5nZXRVc2VUeXBlKCkuZXF1YWxzKHVzZVR5cGUpKSB7Ci0gICAgICAgIG5ld0Rpc2NvdmVyeVVSTFZlY3Rvci5hZGQobmV3IERpc2NvdmVyeVVSTChkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpLCBkdXBVc2VUeXBlKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIERpc2NvdmVyeVVSTHMgbmV3RGlzY292ZXJ5VVJMcyA9IG5ldyBEaXNjb3ZlcnlVUkxzKCk7Ci0gICAgbmV3RGlzY292ZXJ5VVJMcy5zZXREaXNjb3ZlcnlVUkxWZWN0b3IobmV3RGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICByZXR1cm4gbmV3RGlzY292ZXJ5VVJMczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19GSU5EUVVBTElGSUVSUyk7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gKERpc2NvdmVyeVVSTHMpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkZW50aWZpZXJCYWcgPSAoSWRlbnRpZmllckJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIFRNb2RlbEJhZyB0TW9kZWxCYWcgPSAoVE1vZGVsQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1RNT0RFTEJBRyk7Ci0gICAgICBib29sZWFuIG93bmVkID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVEKSAhPSBudWxsKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBpbnQgbWF4U2VhcmNoU2V0ID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgICBpbnQgbWF4UmVzdWx0cyA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUykpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAob3duZWQgJiYgIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0KLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgQnVzaW5lc3NJbmZvcyBidXNJbmZvcyA9IG51bGw7Ci0gICAgICBpZiAob3duZWQpCi0gICAgICAgIGJ1c0luZm9zID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSkuZ2V0QnVzaW5lc3NJbmZvcygpOwotICAgICAgZWxzZQotICAgICAgICBidXNJbmZvcyA9IHByb3h5LmZpbmRfYnVzaW5lc3MobmFtZVZlY3RvciwgZHVwRGlzY292ZXJ5VVJMcyhkaXNjb3ZlcnlVUkxzLCIiLFVERElBY3Rpb25JbnB1dHMuRElTQ09WRVJZX1VSTF9UWVBFKSwgaWRlbnRpZmllckJhZywgY2F0ZWdvcnlCYWcsIHRNb2RlbEJhZywgZmluZFF1YWxpZmllcnMsIG1heFNlYXJjaFNldCkuZ2V0QnVzaW5lc3NJbmZvcygpOwotICAgICAgCi0gICAgICBpbnQgZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPSBNYXRoLm1pbihtYXhSZXN1bHRzLCBidXNJbmZvcy5zaXplKCkpOwotICAgICAgVmVjdG9yIGJ1c2luZXNzS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQnVzaW5lc3NJbmZvIGJ1c0luZm8gPSAoQnVzaW5lc3NJbmZvKWJ1c0luZm9zLmdldChpKTsKLSAgICAgICAgYnVzaW5lc3NLZXlzLmFkZEVsZW1lbnQoYnVzSW5mby5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChidXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICAgICAgQnVzaW5lc3NFbnRpdHlbXSBiZUxpc3QgPSBuZXcgQnVzaW5lc3NFbnRpdHlbYmVWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgICAgICBiZVZlY3Rvci50b0FycmF5KGJlTGlzdCk7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYmVMaXN0LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihiZUxpc3QubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQlVTSU5FU1NFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzMDRjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUsbmFtZSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRoaXMgc2hvdWxkbid0IG9jY3VyLgotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSk7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuZXcgTmFtZShuYW1lKSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgCi0gICAgICBCdXNpbmVzc0luZm9zIGJ1c0luZm9zID0gcHJveHkuZmluZF9idXNpbmVzcyhuYW1lVmVjdG9yLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKS5nZXRCdXNpbmVzc0luZm9zKCk7Ci0gICAgICBpbnQgZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPSBNYXRoLm1pbihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTLCBidXNJbmZvcy5zaXplKCkpOwotICAgICAgVmVjdG9yIGJ1c2luZXNzS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQnVzaW5lc3NJbmZvIGJ1c0luZm8gPSBidXNJbmZvcy5nZXQoaSk7Ci0gICAgICAgIGJ1c2luZXNzS2V5cy5hZGRFbGVtZW50KGJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoYnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgICAgIEJ1c2luZXNzRW50aXR5W10gYmVMaXN0ID0gbmV3IEJ1c2luZXNzRW50aXR5W2JlVmVjdG9yLnNpemUoKV07Ci0gICAgICAgICAgYmVWZWN0b3IudG9BcnJheShiZUxpc3QpOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJlTGlzdCxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYmVMaXN0Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0JVU0lORVNTRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNWJkNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1dWlkS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZKTsKLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmICh1dWlkS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSx1dWlkS2V5KTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXVpZEtleSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VVSURfS0VZIikpOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZSBvciBldmVuIFVERElNYWluTm9kZS4KLSAgICAgIGlmIChyZWdOb2RlXyA9PSBudWxsKQotICAgICAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgoTm9kZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUpKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodXVpZEtleSk7Ci0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgaWYgKHRNb2RlbFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCl0TW9kZWxWZWN0b3IuZWxlbWVudEF0KDApOwotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsW10gdE1vZGVsQXJyYXkgPSBuZXcgVE1vZGVsWzFdOwotICAgICAgICAgIHRNb2RlbEFycmF5WzBdID0gdE1vZGVsOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KHRNb2RlbEFycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKHRNb2RlbEFycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHRNb2RlbCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcxZmQ4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VEZXRhaWxzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlZ2lzdGVyZWRJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1c2VTZXJ2aWNlQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSk7Ci0gICAgU3RyaW5nW10gc2VydmljZU5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0UpOwotICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZ1tdIGlkVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFKTsKLSAgICBTdHJpbmdbXSBpZEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGlkS2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gZmluZFF1YWxpZmllclZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSKTsKLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUKTsKLSAgICBTdHJpbmcgbWF4UmVzdWx0cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgaWYgKHVzZVNlcnZpY2VDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSx1c2VTZXJ2aWNlQ2hlY2tlZCk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSk7Ci0gICAgCi0gICAgaWYgKHNlcnZpY2VOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZSAic3VibWl0dGVkIiBkYXRhLCBkZWxldGlvbnMgb2NjdXIgb24gdGhlIGNsaWVudCBzaWRlIGFuZCB0aHVzIHRoZSBuZWVkIHRvIHRyYWNrIHRoaXMgdXNpbmcgaGlkZGVuIGZvcm0gZWxlbWVudHMuCi0gICAgICBWZWN0b3Igc2lTZXJ2aWNlID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSk7Ci0gICAgICBpZiAoc2lTZXJ2aWNlID09IG51bGwpCi0gICAgICAgIHNpU2VydmljZSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2lTZXJ2aWNlLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3Igc2lTZXJ2aWNlQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSk7Ci0gICAgICAvLyBUaGUgYnJvd3NlciB3aWxsIGVuZm9yY2UgdGhlIHJ1bGUgb2YgaGF2aW5nIG9ubHkgb25lIHNlcnZpY2UgaW4gdGhpcyBsaXN0LgotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2lTZXJ2aWNlQ29weS5lbGVtZW50QXQoMCk7Ci0gICAgICBzaVNlcnZpY2UuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSxzaVNlcnZpY2UpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSxicyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9CVVNJTkVTU19TRVJWSUNFKTsKLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmIHVzZVNlcnZpY2VDaGVja2VkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9TRVJWSUNFIikpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAob3duZWRDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9PV05FRCxvd25lZENoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfT1dORUQpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMsaWRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLQotICAgIGlmIChmaW5kUXVhbGlmaWVyVmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSBuZXcgRmluZFF1YWxpZmllcnMoKTsKLSAgICAgIFZlY3RvciBmaW5kUXVhbGlmaWVyVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZhbHVlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBGaW5kUXVhbGlmaWVyIGZpbmRRdWFsaWZpZXIgPSBuZXcgRmluZFF1YWxpZmllcihmaW5kUXVhbGlmaWVyVmFsdWVzW2ldKTsKLSAgICAgICAgZmluZFF1YWxpZmllclZlY3Rvci5hZGRFbGVtZW50KGZpbmRRdWFsaWZpZXIpOwotICAgICAgfQotICAgICAgZmluZFF1YWxpZmllcnMuc2V0RmluZFF1YWxpZmllclZlY3RvcihmaW5kUXVhbGlmaWVyVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTLGZpbmRRdWFsaWZpZXJzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9GSU5EUVVBTElGSUVSUyk7Ci0KLSAgICBpZiAobWF4U2VhcmNoU2V0ICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgfQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFNlYXJjaFNldCkpCi0gICAgewotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1NFQVJDSF9TRVQiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtYXhSZXN1bHRzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUyxtYXhSZXN1bHRzKTsKLSAgICB9Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4UmVzdWx0cykpCi0gICAgewotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUyk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1JFU1VMVFMiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIG92ZXJyaWRlQXV0aGVudGljYXRpb25WYWxpZGF0aW9uKCkKLSAgewotICAgIHJldHVybiAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIGJvb2xlYW4gdXNlU2VydmljZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSkgIT0gbnVsbCk7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UpOwotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMpOwotICAgICAgSWRlbnRpZmllckJhZyBpZGVudGlmaWVyQmFnID0gKElkZW50aWZpZXJCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICAgICBib29sZWFuIG93bmVkID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEKSAhPSBudWxsKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBpbnQgbWF4U2VhcmNoU2V0ID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgICBpbnQgbWF4UmVzdWx0cyA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUykpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBWZWN0b3IgdE1vZGVsS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgCi0gICAgICBpZiAob3duZWQpCi0gICAgICB7Ci0gICAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgICB0TW9kZWxLZXlWZWN0b3IgPSBmaW5kQWxsT3duZWRUTW9kZWxzKHByb3h5LCByZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIG1heFJlc3VsdHMpOwotICAgICAgfQotICAgICAgaWYgKHVzZVNlcnZpY2UpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdUZW1wbGF0ZXMgYmluZGluZ1RlbXBsYXRlcyA9IGJzLmdldEJpbmRpbmdUZW1wbGF0ZXMoKTsKLSAgICAgICAgYm9vbGVhbiBlbmRTZWFyY2ggPSBmYWxzZTsKLSAgICAgICAgaWYgKGJpbmRpbmdUZW1wbGF0ZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGk9MDtpPGJpbmRpbmdUZW1wbGF0ZXMuc2l6ZSgpO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nVGVtcGxhdGUgYnQgPSBiaW5kaW5nVGVtcGxhdGVzLmdldChpKTsKLSAgICAgICAgICAgIFRNb2RlbEluc3RhbmNlRGV0YWlscyB0TW9kZWxJbnN0YW5jZURldGFpbHMgPSBidC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGo9MDtqPHRNb2RlbEluc3RhbmNlRGV0YWlscy5zaXplKCk7aisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBUTW9kZWxJbnN0YW5jZUluZm8gdE1vZGVsSW5zdGFuY2VJbmZvID0gdE1vZGVsSW5zdGFuY2VEZXRhaWxzLmdldChqKTsKLSAgICAgICAgICAgICAgaWYgKHRNb2RlbEtleVZlY3Rvci5zaXplKCkgPCBtYXhSZXN1bHRzKQotICAgICAgICAgICAgICAgIHRNb2RlbEtleVZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbEluc3RhbmNlSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVuZFNlYXJjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlbmRTZWFyY2gpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgCi0gICAgICAgIFRNb2RlbExpc3QgdE1vZGVsTGlzdCA9IHByb3h5LmZpbmRfdE1vZGVsKG5hbWUsY2F0ZWdvcnlCYWcsaWRlbnRpZmllckJhZyxmaW5kUXVhbGlmaWVycyxtYXhTZWFyY2hTZXQpOwotICAgICAgICBUTW9kZWxJbmZvcyB0TW9kZWxJbmZvcyA9IHRNb2RlbExpc3QuZ2V0VE1vZGVsSW5mb3MoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVsSW5mb3Muc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbEluZm8gdE1vZGVsSW5mbyA9IHRNb2RlbEluZm9zLmdldChpKTsKLSAgICAgICAgICBpZiAodE1vZGVsS2V5VmVjdG9yLnNpemUoKSA8IG1heFJlc3VsdHMpCi0gICAgICAgICAgICB0TW9kZWxLZXlWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBpbnQgZmluYWxOdW1iZXJPZlRNb2RlbEtleXMgPSB0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpOwotICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZUTW9kZWxLZXlzID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBmaW5hbFRNb2RlbFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKLSAgICAgICAgICBpbnQgd2luZG93U2l6ZSA9IGZpbmFsTnVtYmVyT2ZUTW9kZWxLZXlzOwotICAgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCB0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdWJMaXN0VG9JbmRleCA9IE1hdGgubWluKGN1cnJlbnRJbmRleCt3aW5kb3dTaXplLHRNb2RlbEtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKG5ldyBWZWN0b3IodE1vZGVsS2V5VmVjdG9yLnN1Ykxpc3QoY3VycmVudEluZGV4LHN1Ykxpc3RUb0luZGV4KSkpOwotICAgICAgICAgICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgICAgICAgICBmaW5hbFRNb2RlbFZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbFZlY3Rvci5lbGVtZW50QXQoaSkpOwotICAgICAgICAgICAgICBpZiAodE1vZGVsRGV0YWlsLmdldFRydW5jYXRlZEJvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICB3aW5kb3dTaXplID0gdE1vZGVsVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICAgICAgY3VycmVudEluZGV4ICs9IHdpbmRvd1NpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEaXNwb3NpdGlvblJlcG9ydCBkciA9IGUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLSAgICAgICAgICAgICAgaWYgKCgoUmVzdWx0KSBkci5nZXRSZXN1bHRWZWN0b3IoKS5nZXQoMCkpLmdldEVyckluZm8oKS5nZXRFcnJDb2RlKCkgPT0gRGlzcG9zaXRpb25SZXBvcnQuRV9pbnZhbGlkS2V5UGFzc2VkKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVyckluZm9UZXh0ID0gKChSZXN1bHQpIGRyLmdldFJlc3VsdFZlY3RvcigpLmdldCgwKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPWN1cnJlbnRJbmRleDtpPHN1Ykxpc3RUb0luZGV4O2krKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgdE1vZGVsS2V5ID0gKFN0cmluZyl0TW9kZWxLZXlWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgaWYgKGVyckluZm9UZXh0LmluZGV4T2YodE1vZGVsS2V5KSAhPSAtMSB8fCBlcnJJbmZvVGV4dC5pbmRleE9mKHRNb2RlbEtleS50b1VwcGVyQ2FzZSgpKSAhPSAtMSB8fCBlcnJJbmZvVGV4dC5pbmRleE9mKHRNb2RlbEtleS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdE1vZGVsS2V5VmVjdG9yLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpbnQgZmluYWxOdW1iZXJPZlRNb2RlbHMgPSBmaW5hbFRNb2RlbFZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZUTW9kZWxzID4gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUTW9kZWxbXSB0TW9kZWxBcnJheSA9IG5ldyBUTW9kZWxbZmluYWxOdW1iZXJPZlRNb2RlbHNdOwotICAgICAgICAgICAgZmluYWxUTW9kZWxWZWN0b3IudG9BcnJheSh0TW9kZWxBcnJheSk7Ci0gICAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KHRNb2RlbEFycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZih0TW9kZWxBcnJheS5sZW5ndGgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8vIENvcGllZCBkaXJlY3RseSBmcm9tIFVERElXU0RMUHJveHkncyBmaW5kQWxsU2VydmljZUludGVyZmFjZXMoKSBtZXRob2Qgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLiBUaGUgaGFyZGNvZGVkIHN0cmluZ3Mgc2hvdWxkIE5PVCBiZSB0cmFuc2xhdGVkLgotICBwcml2YXRlIGZpbmFsIFZlY3RvciBmaW5kQWxsT3duZWRUTW9kZWxzKFVERElQcm94eSBwcm94eSwgU3RyaW5nIGF1dGhJbmZvU3RyaW5nLCBpbnQgbWF4UmVzdWx0cykgdGhyb3dzIFVERElFeGNlcHRpb24sIFRyYW5zcG9ydEV4Y2VwdGlvbgotICB7Ci0gICAgUmVnaXN0ZXJlZEluZm8gcmVnaXN0ZXJlZEluZm8gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSBjb21wbGV0ZSBsaXN0IG9mIG93bmVkIChyZWdpc3RlcmVkKSBpbmZvLgotICAgIC8vIChBIFJlZ2lzdGVyZWRJbmZvIGNvbnNpc3RzIG9mIEJ1c2luZXNzSW5mb3MgYW5kIFRNb2RlbEluZm9zLgotICAgIC8vIEJ1c2luZXNzSW5mb3MgYWxzbyBjb250YWluIFNlcnZpY2VJbmZvcy4pCi0gICAgcmVnaXN0ZXJlZEluZm8gPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8oYXV0aEluZm9TdHJpbmcpOwotCi0gICAgLy9DcmVhdGUgYSBWZWN0b3IgdG8gYWRkIHRoZSBUTW9kZWxLZXlzIGZyb20gdGhlIHJlZ2lzdGVyZWRJbmZvLgotICAgIFZlY3RvciB0TW9kZWxLZXlMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy9HZXQgdGhlIFRNb2RlbEluZm9zIGZyb20gdGhlIHJlZ2lzdGVyZWRJbmZvLgotICAgIFRNb2RlbEluZm9zIHRNb2RlbEluZm9zID0gcmVnaXN0ZXJlZEluZm8uZ2V0VE1vZGVsSW5mb3MoKTsKLQotICAgIC8vR2V0IGFsbCB0aGUgVE1vZGVsS2V5cyBmcm9tIHdpdGhpbiB0aGUgVE1vZGVsSW5mb3MKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRNb2RlbEluZm9zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFRNb2RlbEluZm8gdE1vZGVsSW5mbyA9IHRNb2RlbEluZm9zLmdldChpKTsKLSAgICAgIGlmICh0TW9kZWxLZXlMaXN0LnNpemUoKSA8IG1heFJlc3VsdHMpCi0gICAgICAgIHRNb2RlbEtleUxpc3QuYWRkRWxlbWVudCh0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnJlYWs7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gdE1vZGVsS2V5TGlzdDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJmZWQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbExpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ci4KLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVE1vZGVsTGlzdCB0TW9kZWxMaXN0ID0gcHJveHkuZmluZF90TW9kZWwobmFtZSxudWxsLG51bGwsbnVsbCxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIFRNb2RlbEluZm9zIHRNb2RlbEluZm9zID0gdE1vZGVsTGlzdC5nZXRUTW9kZWxJbmZvcygpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVsSW5mb3Muc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgVE1vZGVsSW5mbyB0TW9kZWxJbmZvID0gdE1vZGVsSW5mb3MuZ2V0KGkpOwotICAgICAgICBpZiAodE1vZGVsS2V5VmVjdG9yLnNpemUoKSA8IFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMpCi0gICAgICAgICAgdE1vZGVsS2V5VmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKHRNb2RlbEtleVZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodE1vZGVsS2V5VmVjdG9yKTsKLSAgICAgICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgICAgIFRNb2RlbFtdIHRNb2RlbEFycmF5ID0gbmV3IFRNb2RlbFt0TW9kZWxWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgICAgICB0TW9kZWxWZWN0b3IudG9BcnJheSh0TW9kZWxBcnJheSk7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQodE1vZGVsQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YodE1vZGVsQXJyYXkubGVuZ3RoKSkpOyAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWE1ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1dWlkS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksdXVpZEtleSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHV1aWRLZXkpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VVSURfS0VZIikpOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOwotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlIG9yIGV2ZW4gVURESU1haW5Ob2RlLgotICAgICAgaWYgKHJlZ05vZGVfID09IG51bGwpCi0gICAgICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKChOb2RlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2VbXSBic0FycmF5ID0gbmV3IEJ1c2luZXNzU2VydmljZVsxXTsKLSAgICAgIFNlcnZpY2VEZXRhaWwgc2VydmljZURldGFpbCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKHV1aWRLZXkpOwotICAgICAgVmVjdG9yIGJzVmVjdG9yID0gc2VydmljZURldGFpbC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgIGlmIChic1ZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBic1ZlY3Rvci50b0FycmF5KGJzQXJyYXkpOwotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYnNBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJzQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsYnNBcnJheVswXSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjZkMmM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVnaXN0ZXJlZEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLlRNb2RlbEJhZzsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLSAgICBTdHJpbmdbXSBidXNOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyk7Ci0gICAgU3RyaW5nW10gbGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBzaU5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFKTsKLSAgICBTdHJpbmdbXSBmaW5kUXVhbGlmaWVyVmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIpOwotICAgIFN0cmluZyBtYXhTZWFyY2hTZXQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQpOwotICAgIFN0cmluZyBtYXhSZXN1bHRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBpZiAob3duZWRDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVELG93bmVkQ2hlY2tlZCk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVEKTsKLQotICAgIGlmIChidXNOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZSAic3VibWl0dGVkIiBkYXRhLCBkZWxldGlvbnMgb2NjdXIgb24gdGhlIGNsaWVudCBzaWRlIGFuZCB0aHVzIHRoZSBuZWVkIHRvIHRyYWNrIHRoaXMgdXNpbmcgaGlkZGVuIGZvcm0gZWxlbWVudHMuCi0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICBpZiAoc2VydmljZUJ1c2luZXNzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2VydmljZUJ1c2luZXNzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSk7Ci0gICAgICAvLyBUaGUgYnJvd3NlciB3aWxsIGVuZm9yY2UgdGhlIHJ1bGUgb2YgaGF2aW5nIG9ubHkgb25lIGJ1c2luZXNzIGluIHRoaXMgbGlzdC4KLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VCdXNpbmVzc0NvcHkuZWxlbWVudEF0KDApOwotICAgICAgc2VydmljZUJ1c2luZXNzLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTLHNlcnZpY2VCdXNpbmVzcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIsc3ApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICB9Ci0KLSAgICBpZiAobGFuZ3VhZ2VzICE9IG51bGwgJiYgbmFtZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIE5hbWUgdWRkaTRqTmFtZTsKLSAgICAgICAgaWYgKGxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLGxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqTmFtZSk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLQotICAgIGlmIChzaU5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBbHRob3VnaCB3ZSBhbHJlYWR5IGhhdmUgdGhlICJzdWJtaXR0ZWQiIGRhdGEsIGRlbGV0aW9ucyBvY2N1ciBvbiB0aGUgY2xpZW50IHNpZGUgYW5kIHRodXMgdGhlIG5lZWQgdG8gdHJhY2sgdGhpcyB1c2luZyBoaWRkZW4gZm9ybSBlbGVtZW50cy4KLSAgICAgIFZlY3RvciBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICBpZiAoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVN0cmluZ1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEhhc2h0YWJsZSByZXN1bHRIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2lOb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgICAgIHJlc3VsdEhhc2gucHV0KHNpTm9kZUlkc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weS5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LmVsZW1lbnRBdChpKTsKLSAgICAgICAgaWYgKHJlc3VsdEhhc2guZ2V0KFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICB0TW9kZWxLZXlTdHJpbmdWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gbmV3IFRNb2RlbEJhZyh0TW9kZWxLZXlTdHJpbmdWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMQkFHLHRNb2RlbEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUxCQUcpOwotICAgIH0KLQotICAgIGlmIChmaW5kUXVhbGlmaWVyVmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSBuZXcgRmluZFF1YWxpZmllcnMoKTsKLSAgICAgIFZlY3RvciBmaW5kUXVhbGlmaWVyVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZhbHVlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBGaW5kUXVhbGlmaWVyIGZpbmRRdWFsaWZpZXIgPSBuZXcgRmluZFF1YWxpZmllcihmaW5kUXVhbGlmaWVyVmFsdWVzW2ldKTsKLSAgICAgICAgZmluZFF1YWxpZmllclZlY3Rvci5hZGRFbGVtZW50KGZpbmRRdWFsaWZpZXIpOwotICAgICAgfQotICAgICAgZmluZFF1YWxpZmllcnMuc2V0RmluZFF1YWxpZmllclZlY3RvcihmaW5kUXVhbGlmaWVyVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfRklORFFVQUxJRklFUlMsZmluZFF1YWxpZmllcnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfRklORFFVQUxJRklFUlMpOwotCi0gICAgaWYgKG1heFNlYXJjaFNldCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgfQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFNlYXJjaFNldCkpCi0gICAgewotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfU0VBUkNIX1NFVCIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1heFJlc3VsdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyxtYXhSZXN1bHRzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgfQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFJlc3VsdHMpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUyk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1JFU1VMVFMiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9GSU5EUVVBTElGSUVSUyk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgICAgIFRNb2RlbEJhZyB0TW9kZWxCYWcgPSAoVE1vZGVsQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMQkFHKTsKLSAgICAgIGJvb2xlYW4gb3duZWQgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCkgIT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgaW50IG1heFNlYXJjaFNldCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgICBpbnQgbWF4UmVzdWx0cyA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTKSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChvd25lZCAmJiAhcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgICAgCi0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBTdHJpbmcgYnVzaW5lc3NLZXk7Ci0gICAgICBpZiAoc3AgIT0gbnVsbCkKLSAgICAgICAgYnVzaW5lc3NLZXkgPSBzcC5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgZWxzZQotICAgICAgICBidXNpbmVzc0tleSA9ICIiOwotCi0gICAgICBpbnQgZmluYWxOdW1iZXJPZlNlcnZpY2VLZXlzOwotICAgICAgVmVjdG9yIHNlcnZpY2VLZXlWZWN0b3I7Ci0gICAgICBpZiAob3duZWQpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2VLZXlWZWN0b3IgPSBmaW5kQWxsT3duZWRTZXJ2aWNlcyhwcm94eSxyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksYnVzaW5lc3NLZXksbWF4UmVzdWx0cyk7Ci0gICAgICAgIGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5cyA9IHNlcnZpY2VLZXlWZWN0b3Iuc2l6ZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTZXJ2aWNlTGlzdCBzZXJ2aWNlTGlzdCA9IHByb3h5LmZpbmRfc2VydmljZShidXNpbmVzc0tleSxuYW1lVmVjdG9yLGNhdGVnb3J5QmFnLHRNb2RlbEJhZyxmaW5kUXVhbGlmaWVycyxtYXhTZWFyY2hTZXQpOwotICAgICAgICBTZXJ2aWNlSW5mb3Mgc0luZm9zID0gc2VydmljZUxpc3QuZ2V0U2VydmljZUluZm9zKCk7Ci0gICAgICAgIGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5cyA9IE1hdGgubWluKG1heFJlc3VsdHMsc0luZm9zLnNpemUoKSk7Ci0gICAgICAgIHNlcnZpY2VLZXlWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5cztpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlSW5mbyBzSW5mbyA9IHNJbmZvcy5nZXQoaSk7Ci0gICAgICAgICAgc2VydmljZUtleVZlY3Rvci5hZGRFbGVtZW50KHNJbmZvLmdldFNlcnZpY2VLZXkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5cyA+IDApCi0gICAgICB7ICAgICAgCi0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgZmluYWxCdXNTZXJ2aWNlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIGludCBjdXJyZW50SW5kZXggPSAwOwotICAgICAgICAgIGludCB3aW5kb3dTaXplID0gZmluYWxOdW1iZXJPZlNlcnZpY2VLZXlzOwotICAgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBzZXJ2aWNlS2V5VmVjdG9yLnNpemUoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3ViTGlzdFRvSW5kZXggPSBNYXRoLm1pbihjdXJyZW50SW5kZXgrd2luZG93U2l6ZSxzZXJ2aWNlS2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VydmljZURldGFpbCBzZXJ2aWNlRGV0YWlsID0gcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwobmV3IFZlY3RvcihzZXJ2aWNlS2V5VmVjdG9yLnN1Ykxpc3QoY3VycmVudEluZGV4LHN1Ykxpc3RUb0luZGV4KSkpOwotICAgICAgICAgICAgICBWZWN0b3IgYnVzU2VydmljZVZlY3RvciA9IHNlcnZpY2VEZXRhaWwuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPGJ1c1NlcnZpY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgICAgICAgICBmaW5hbEJ1c1NlcnZpY2VWZWN0b3IuYWRkRWxlbWVudChidXNTZXJ2aWNlVmVjdG9yLmVsZW1lbnRBdChpKSk7Ci0gICAgICAgICAgICAgIGlmIChzZXJ2aWNlRGV0YWlsLmdldFRydW5jYXRlZEJvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICB3aW5kb3dTaXplID0gYnVzU2VydmljZVZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRJbmRleCArPSB3aW5kb3dTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGlzcG9zaXRpb25SZXBvcnQgZHIgPSBlLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0gICAgICAgICAgICAgIGlmICgoKFJlc3VsdCkgZHIuZ2V0UmVzdWx0VmVjdG9yKCkuZ2V0KDApKS5nZXRFcnJJbmZvKCkuZ2V0RXJyQ29kZSgpID09IERpc3Bvc2l0aW9uUmVwb3J0LkVfaW52YWxpZEtleVBhc3NlZCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBlcnJJbmZvVGV4dCA9ICgoUmVzdWx0KSBkci5nZXRSZXN1bHRWZWN0b3IoKS5nZXQoMCkpLmdldEVyckluZm8oKS5nZXRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT1jdXJyZW50SW5kZXg7aTxzdWJMaXN0VG9JbmRleDtpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoU3RyaW5nKXNlcnZpY2VLZXlWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgaWYgKGVyckluZm9UZXh0LmluZGV4T2Yoc2VydmljZUtleSkgIT0gLTEgfHwgZXJySW5mb1RleHQuaW5kZXhPZihzZXJ2aWNlS2V5LnRvVXBwZXJDYXNlKCkpICE9IC0xIHx8IGVyckluZm9UZXh0LmluZGV4T2Yoc2VydmljZUtleS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2VydmljZUtleVZlY3Rvci5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzID0gZmluYWxCdXNTZXJ2aWNlVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXMgPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZVtdIGJzQXJyYXkgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlW2ZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzXTsKLSAgICAgICAgICAgIGZpbmFsQnVzU2VydmljZVZlY3Rvci50b0FycmF5KGJzQXJyYXkpOwotICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChic0FycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJzQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFU19GT1VORCIpKTsKLSAgICB9ICAgCi0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfSAKLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8vIENvcGllZCBkaXJlY3RseSBmcm9tIFVERElXU0RMUHJveHkncyBmaW5kQWxsT3duZWRTZXJ2aWNlcygpIG1ldGhvZCB3aXRoIG1pbm9yIG1vZGlmaWNhdGlvbnMuIFRoZSBoYXJkY29kZWQgc3RyaW5ncyBzaG91bGQgTk9UIGJlIHRyYW5zbGF0ZWQuCi0gIHByaXZhdGUgZmluYWwgVmVjdG9yIGZpbmRBbGxPd25lZFNlcnZpY2VzKFVERElQcm94eSBwcm94eSxTdHJpbmcgYXV0aEluZm9TdHJpbmcsU3RyaW5nIGJ1c2luZXNzS2V5LGludCBtYXhSZXN1bHRzKSB0aHJvd3MgVURESUV4Y2VwdGlvbiwgVHJhbnNwb3J0RXhjZXB0aW9uCi0gIHsKLSAgICBSZWdpc3RlcmVkSW5mbyByZWdpc3RlcmVkSW5mbyA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygb3duZWQgKHJlZ2lzdGVyZWQpIGluZm8uCi0gICAgLy8gKEEgUmVnaXN0ZXJlZEluZm8gY29uc2lzdHMgb2YgQnVzaW5lc3NJbmZvcyBhbmQgVE1vZGVsSW5mb3MuCi0gICAgLy8gQnVzaW5lc3NJbmZvcyBhbHNvIGNvbnRhaW4gU2VydmljZUluZm9zLikKLSAgICByZWdpc3RlcmVkSW5mbyA9IHByb3h5LmdldF9yZWdpc3RlcmVkSW5mbyhhdXRoSW5mb1N0cmluZyk7Ci0KLSAgICAvL0NyZWF0ZSBhIHZlY3RvciB0byBhZGQgdGhlIHNlcnZpY2VLZXlzIGZyb20gdGhlIHJlZ2lzdGVyZWRJbmZvIHRvLgotICAgIFZlY3RvciBzZXJ2aWNlS2V5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vR2V0IHRoZSBidXNpbmVzc0luZm9zIGZyb20gdGhlIHJlZ2lzdGVyZWRJbmZvLgotICAgIEJ1c2luZXNzSW5mb3MgYnVzaW5lc3NJbmZvcyA9IHJlZ2lzdGVyZWRJbmZvLmdldEJ1c2luZXNzSW5mb3MoKTsKLQotICAgIC8vR2V0IGFsbCB0aGUgc2VydmljZUtleXMgZnJvbSB0aGUgc2VydmljZUluZm9zIHdpdGhpbiB0aGUgYnVzaW5lc3NJbmZvcywKLSAgICAvL2FuZCBhZGQgdGhlbSB0byB0aGUgc2VydmljZUtleUxpc3QuCi0gICAgYm9vbGVhbiBlbmRTZWFyY2ggPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1c2luZXNzSW5mb3Muc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgQnVzaW5lc3NJbmZvIGJ1c2luZXNzSW5mbyA9IGJ1c2luZXNzSW5mb3MuZ2V0KGkpOwotICAgICAgU3RyaW5nIGN1cnJlbnRCdXNpbmVzc0tleSA9IGJ1c2luZXNzSW5mby5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgaWYgKGJ1c2luZXNzS2V5Lmxlbmd0aCgpID4gMCAmJiBjdXJyZW50QnVzaW5lc3NLZXkuZXF1YWxzKGJ1c2luZXNzS2V5KSkKLSAgICAgICAgZW5kU2VhcmNoID0gdHJ1ZTsKLSAgICAgIFNlcnZpY2VJbmZvcyBzZXJ2aWNlSW5mb3MgPSBidXNpbmVzc0luZm8uZ2V0U2VydmljZUluZm9zKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZpY2VJbmZvcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUluZm8gc2VydmljZUluZm8gPSBzZXJ2aWNlSW5mb3MuZ2V0KGopOwotICAgICAgICBpZiAoc2VydmljZUluZm8uZ2V0QnVzaW5lc3NLZXkoKS5lcXVhbHMoY3VycmVudEJ1c2luZXNzS2V5KSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChzZXJ2aWNlS2V5TGlzdC5zaXplKCkgPCBtYXhSZXN1bHRzKQotICAgICAgICAgICAgc2VydmljZUtleUxpc3QuYWRkKHNlcnZpY2VJbmZvLmdldFNlcnZpY2VLZXkoKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVuZFNlYXJjaCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChlbmRTZWFyY2gpCi0gICAgICAgIGJyZWFrOwotICAgIH0gICAgCi0gICAgcmV0dXJuIHNlcnZpY2VLZXlMaXN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODU3NTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUxpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsbmFtZSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRoaXMgc2hvdWxkbid0IG9jY3VyLgotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5ldyBOYW1lKG5hbWUpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBTZXJ2aWNlTGlzdCBzZXJ2aWNlTGlzdCA9IHByb3h5LmZpbmRfc2VydmljZSgiIixuYW1lVmVjdG9yLG51bGwsbnVsbCxudWxsLFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpOwotICAgICAgCi0gICAgICBTZXJ2aWNlSW5mb3Mgc0luZm9zID0gc2VydmljZUxpc3QuZ2V0U2VydmljZUluZm9zKCk7Ci0gICAgICBpbnQgZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXMgPSBNYXRoLm1pbihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTLHNJbmZvcy5zaXplKCkpOwotICAgICAgVmVjdG9yIHNlcnZpY2VLZXlWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcztpKyspCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VJbmZvIHNJbmZvID0gc0luZm9zLmdldChpKTsKLSAgICAgICAgc2VydmljZUtleVZlY3Rvci5hZGRFbGVtZW50KHNJbmZvLmdldFNlcnZpY2VLZXkoKSk7Ci0gICAgICB9Ci0gICAgICAgIAotICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2VEZXRhaWwgc2VydmljZURldGFpbCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKHNlcnZpY2VLZXlWZWN0b3IpOwotICAgICAgICAgIFZlY3RvciBidXNpbmVzc1NlcnZpY2VWZWN0b3IgPSBzZXJ2aWNlRGV0YWlsLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIEJ1c2luZXNzU2VydmljZVtdIGJzQXJyYXkgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlW2ZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzXTsKLSAgICAgICAgICBidXNpbmVzc1NlcnZpY2VWZWN0b3IudG9BcnJheShic0FycmF5KTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChic0FycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYnNBcnJheS5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNDBjY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gbmFtZUxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbkxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGRpc2NvdmVyeVVSTFZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChuYW1lTGFuZ3VhZ2VzICE9IG51bGwgJiYgbmFtZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIC8vIFVEREkncyBzYXZlIEFQSSAoQXBwZW5kaXggQyBvZiB0aGUgVURESSBWMiBQcm9ncmFtbWVycyBBUEkgU3BlY2lmaWNhdGlvbikgcmVxdWlyZXMgdGhlIGZvbGxvd2luZzoKLSAgICAgIC8vIDEpIE9ubHkgdGhlIGZpcnN0IHJvdyBjYW4gaGF2ZSBhIGJsYW5rIGxhbmd1YWdlLgotICAgICAgLy8gMikgT25seSAxIG5hbWUgcGVyIGxhbmd1YWdlLgotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIE5hbWUgdWRkaTRqTmFtZTsKLSAgICAgICAgaWYgKG5hbWVMYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxuYW1lTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChuYW1lTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KG5hbWVMYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKG5hbWVzW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KHVkZGk0ak5hbWUpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OQU1FUyIpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotCi0gICAgaWYgKGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLGlkQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICAgICAKLSAgICBpZiAoZGlzY292ZXJ5VVJMVmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gbmV3IERpc2NvdmVyeVVSTHMoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWVVSTCIpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmFsdWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGRpc2NvdmVyeVVSTFZhbHVlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBkaXNjb3ZlcnlVUkxzLmFkZChuZXcgRGlzY292ZXJ5VVJMKGRpc2NvdmVyeVVSTFZhbHVlc1tpXSwiIikpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxkaXNjb3ZlcnlVUkxzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsgICAgICAKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRlbnRpZmllckJhZyA9IChJZGVudGlmaWVyQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gKERpc2NvdmVyeVVSTHMpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBuZXcgQnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgIGJlLnNldEJ1c2luZXNzS2V5KCIiKTsKLSAgICAgIGJlLnNldE5hbWVWZWN0b3IobmFtZVZlY3Rvcik7Ci0gICAgICBiZS5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICBiZS5zZXRJZGVudGlmaWVyQmFnKGlkZW50aWZpZXJCYWcpOwotICAgICAgYmUuc2V0Q2F0ZWdvcnlCYWcoY2F0ZWdvcnlCYWcpOwotICAgICAgYmUuc2V0RGlzY292ZXJ5VVJMcyhkaXNjb3ZlcnlVUkxzKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJlVmVjdG9yLmFkZChiZSk7Ci0KLSAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShiZSxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19QVUJMSVNIRUQiLGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMTk5YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTik7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSxuYW1lKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04sZGVzY3JpcHRpb24pOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0KLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gbmV3IEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBiZS5zZXRCdXNpbmVzc0tleSgiIik7Ci0gICAgICBiZS5zZXREZWZhdWx0TmFtZShuZXcgTmFtZShuYW1lKSk7Ci0gICAgICBiZS5zZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYmVWZWN0b3IuYWRkKGJlKTsKLQotICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuc2F2ZV9idXNpbmVzcyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJlVmVjdG9yKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJlLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTX1BVQkxJU0hFRCIsYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDI0MWY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGJ1c05vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTKTsKLSAgICBTdHJpbmdbXSBzZXJJbnRJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBTdHJpbmdbXSBuYW1lTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOyAgICAKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbkxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmIChidXNOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgaWYgKHNlcnZpY2VCdXNpbmVzcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgICAgLy8gVGhlIGJyb3dzZXIgd2lsbCBlbmZvcmNlIHRoZSBydWxlIG9mIGhhdmluZyBvbmx5IG9uZSBidXNpbmVzcyBpbiB0aGlzIGxpc3QuCi0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3NDb3B5LmVsZW1lbnRBdCgwKTsKLSAgICAgIHNlcnZpY2VCdXNpbmVzcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLHNwKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLHNwLmdldEJ1c2luZXNzS2V5KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfQlVTSU5FU1MiKSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIGlmIChzZXJJbnRJZHMgIT0gbnVsbCAmJiBzZXJJbnRJZHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBWZWN0b3Igc2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICBpZiAoc2VydmljZUludGVyZmFjZXMgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3Igc2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICAgICBWZWN0b3IgdG1vZGVscyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpaXQubmV4dCgpOwotICAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VySW50SWRzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldE5vZGVJZCA9PSBJbnRlZ2VyLnBhcnNlSW50KHNlckludElkc1tpXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzLmFkZChsaXN0RWxlbWVudCk7Ci0gICAgICAgICAgICAgIHRtb2RlbHMuYWRkKGxpc3RFbGVtZW50LmdldE9iamVjdCgpKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLCBzZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTCwgdG1vZGVscyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUwpOwotICAgIH0KLSAgICAKLSAgICBpZiAod3NkbFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMLHdzZGxVUkwpOwotICAgIH0KLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcod3NkbFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgfQotCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAobmFtZUxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChuYW1lTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQobmFtZUxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAobmFtZXNbaV0udHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpOYW1lKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTkFNRVMiKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaV0udHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTCk7Ci0gICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCi0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnM7Ci0gICAgICBpZiAodE1vZGVsVmVjdG9yICE9IG51bGwgJiYgdE1vZGVsVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgIGJzID0gdWRkaTRqSGVscGVyLm5ld0J1c2luZXNzU2VydmljZSh3c2RsVVJMLCBkZWYsIChUTW9kZWxbXSl0TW9kZWxWZWN0b3IudG9BcnJheShuZXcgVE1vZGVsWzBdKSk7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uIHJlZ1B1Ymxpc2hTSUFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIGludCBjdXJyZW50Tm9kZUlkID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgVE1vZGVsW10gdE1vZGVscyA9IG51bGw7Ci0gICAgICAgIGlmICh1ZGRpNGpIZWxwZXIuaXNNb25vbGl0aGljV1NETChkZWYpKQotICAgICAgICB7Ci0gICAgICAgICAgdE1vZGVscyA9IG5ldyBUTW9kZWxbMV07Ci0gICAgICAgICAgdE1vZGVsc1swXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwod3NkbFVSTCwgZGVmKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdbXSBpbXBvcnRzID0gdWRkaTRqSGVscGVyLmdldEltcG9ydHMoZGVmLCB3c2RsVVJMKTsKLSAgICAgICAgICB0TW9kZWxzID0gbmV3IFRNb2RlbFtpbXBvcnRzLmxlbmd0aF07Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0TW9kZWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgdE1vZGVsc1tpXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwoaW1wb3J0c1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgSGFzaHRhYmxlIHRNb2RlbHNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgaWYgKHRNb2RlbHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbHMubGVuZ3RoO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gcmVnUHVibGlzaFNJQWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZSh1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWxzW2ldKSwgdE1vZGVsc1tpXSk7Ci0gICAgICAgICAgICBpZiAoaW5wdXRzVmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlZ1B1Ymxpc2hTSUFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgICAgT2JqZWN0IHNhdmVkVE1vZGVsID0gcmVnUHVibGlzaFNJQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMKTsKLSAgICAgICAgICAgICAgaWYgKHNhdmVkVE1vZGVsICE9IG51bGwpCi0gICAgICAgICAgICAgICAgdE1vZGVsc1RhYmxlLnB1dCgoKFRNb2RlbClzYXZlZFRNb2RlbCkuZ2V0TmFtZVN0cmluZygpLCBzYXZlZFRNb2RlbCk7Ci0gICAgICAgICAgICAgIC8vIFJlc2VsZWN0IHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAgICAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKGN1cnJlbnROb2RlSWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicyA9IHVkZGk0akhlbHBlci5uZXdCdXNpbmVzc1NlcnZpY2Uod3NkbFVSTCwgZGVmLCB0TW9kZWxzVGFibGUpOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoYmUgIT0gbnVsbCkKLSAgICAgICAgYnMuc2V0QnVzaW5lc3NLZXkoYmUuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICBlbHNlIGlmIChidXNpbmVzc0tleSAhPSBudWxsKQotICAgICAgICBicy5zZXRCdXNpbmVzc0tleShidXNpbmVzc0tleSk7Ci0gICAgICBicy5zZXROYW1lVmVjdG9yKG5hbWVWZWN0b3IpOwotICAgICAgYnMuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgYnMuc2V0Q2F0ZWdvcnlCYWcoY2F0ZWdvcnlCYWcpOwotICAgICAgVmVjdG9yIGJzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYnNWZWN0b3IuYWRkKGJzKTsKLSAgICAgIHJlZ0VsZW1lbnQuaGFuZGxlUHJlSW52b2NhdGlvbihicyk7Ci0gICAgICBicyA9IChCdXNpbmVzc1NlcnZpY2UpcHJveHkuc2F2ZV9zZXJ2aWNlKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYnNWZWN0b3IpLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpLmdldCgwKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJzLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfUFVCTElTSEVEIixicy5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJXU0RMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpewotICAgIAkJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCX0KLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsgICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMWY1YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbkxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMLHdzZGxVUkwpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh3c2RsVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLQotICAgIGlmIChpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyxpZEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgICAgSWRlbnRpZmllckJhZyBpZGVudGlmaWVyQmFnID0gKElkZW50aWZpZXJCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgVE1vZGVsIHRNb2RlbCA9IChuZXcgVWRkaTRqSGVscGVyKCkpLm5ld1RNb2RlbCh3c2RsVVJMKTsKLSAgICAgIHRNb2RlbC5zZXROYW1lKG5hbWUpOwotICAgICAgdE1vZGVsLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIHRNb2RlbC5zZXRJZGVudGlmaWVyQmFnKGlkZW50aWZpZXJCYWcpOwotICAgICAgCi0gICAgICAvLyBUaGUgY2F0ZWdvcnkgYmFnIG1heSBjb250YWluIHdzZGxTcGVjLgotICAgICAgQ2F0ZWdvcnlCYWcgZGVmYXVsdENhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgICBWZWN0b3IgZGVmYXVsdEtleWVkUmVmZXJlbmNlVmVjdG9yID0gbnVsbDsKLSAgICAgIGlmIChkZWZhdWx0Q2F0ZWdvcnlCYWcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNhdGVnb3J5QmFnID09IG51bGwpCi0gICAgICAgICAgY2F0ZWdvcnlCYWcgPSBkZWZhdWx0Q2F0ZWdvcnlCYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHRLZXllZFJlZmVyZW5jZVZlY3RvciA9IGRlZmF1bHRDYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICAgICAgIGZvciAoaW50IGk9MDtpPGRlZmF1bHRLZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWRlZmF1bHRLZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICBpZiAoY2F0ZWdvcnlCYWcgIT0gbnVsbCkKLSAgICAgICAgICAgICAgY2F0ZWdvcnlCYWcuYWRkKGtyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRNb2RlbC5zZXRDYXRlZ29yeUJhZyhjYXRlZ29yeUJhZyk7Ci0KLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB0TW9kZWxWZWN0b3IuYWRkKHRNb2RlbCk7Ci0gICAgICB0TW9kZWwgPSAoVE1vZGVsKXByb3h5LnNhdmVfdE1vZGVsKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgdE1vZGVsVmVjdG9yKS5nZXRUTW9kZWxWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMLCB0TW9kZWwpOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUodE1vZGVsLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1BVQkxJU0hFRCIsdE1vZGVsLmdldE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiV1NETEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKXsKLSAgICAJCVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAl9Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTdmZmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB3c2RsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OKTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcod3NkbFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLGRlc2NyaXB0aW9uKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKFN0cmluZyB3c2RsVVJMLCBUTW9kZWwgdE1vZGVsKQotICB7Ci0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgU3RyaW5nIG5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICBpZiAod3NkbFVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMLHdzZGxVUkwpOwotICAgIGVsc2UKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkgCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lKTsKLSAgICBlbHNlCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIAotICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLGRlc2NyaXB0aW9uKTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04sIiIpOwotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTik7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotCi0gICAgICBUTW9kZWwgdE1vZGVsID0gKG5ldyBVZGRpNGpIZWxwZXIoKSkubmV3VE1vZGVsKHdzZGxVUkwpOwotICAgICAgdE1vZGVsLnNldE5hbWUobmFtZSk7Ci0gICAgICB0TW9kZWwuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGRlc2NyaXB0aW9uKTsKLQotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHRNb2RlbFZlY3Rvci5hZGQodE1vZGVsKTsKLSAgICAgIHRNb2RlbCA9IChUTW9kZWwpcHJveHkuc2F2ZV90TW9kZWwocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCB0TW9kZWxWZWN0b3IpLmdldFRNb2RlbFZlY3RvcigpLmdldCgwKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwsIHRNb2RlbCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZSh0TW9kZWwscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfUFVCTElTSEVEIix0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiV1NETEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsgICAKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWM2NjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsgICAgCi0gICAgU3RyaW5nIGJ1c05vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04pOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAoYnVzTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICBpZiAoc2VydmljZUJ1c2luZXNzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2VydmljZUJ1c2luZXNzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgICAgLy8gVGhlIGJyb3dzZXIgd2lsbCBlbmZvcmNlIHRoZSBydWxlIG9mIGhhdmluZyBvbmx5IG9uZSBidXNpbmVzcyBpbiB0aGlzIGxpc3QuCi0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3NDb3B5LmVsZW1lbnRBdCgwKTsKLSAgICAgIHNlcnZpY2VCdXNpbmVzcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIsYmUpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYmUuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9CVVNJTkVTUyIpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAod3NkbFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHdzZGxVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSxuYW1lKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OLGRlc2NyaXB0aW9uKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTik7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgCi0gICAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgICAgRGVmaW5pdGlvbiBkZWYgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbiByZWdQdWJsaXNoU0lBY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgaW50IGN1cnJlbnROb2RlSWQgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXROb2RlSWQoKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKTsKLQotICAgICAgSGFzaHRhYmxlIHRNb2RlbHNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIFRNb2RlbFtdIHRNb2RlbHMgPSBudWxsOwotICAgICAgaWYgKHVkZGk0akhlbHBlci5pc01vbm9saXRoaWNXU0RMKGRlZikpCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbHMgPSBuZXcgVE1vZGVsWzFdOwotICAgICAgICB0TW9kZWxzWzBdID0gdWRkaTRqSGVscGVyLm5ld1RNb2RlbCh3c2RsVVJMLCBkZWYpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmdbXSBpbXBvcnRzID0gdWRkaTRqSGVscGVyLmdldEltcG9ydHMoZGVmLCB3c2RsVVJMKTsKLSAgICAgICAgdE1vZGVscyA9IG5ldyBUTW9kZWxbaW1wb3J0cy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRNb2RlbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgdE1vZGVsc1tpXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwoaW1wb3J0c1tpXSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0TW9kZWxzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbHMubGVuZ3RoO2krKykKLSAgICAgICAgewotICAgICAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSByZWdQdWJsaXNoU0lBY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHVkZGk0akhlbHBlci5nZXRXU0RMKHRNb2RlbHNbaV0pLCB0TW9kZWxzW2ldKTsKLSAgICAgICAgICBpZiAoaW5wdXRzVmFsaWQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVnUHVibGlzaFNJQWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgT2JqZWN0IHNhdmVkVE1vZGVsID0gcmVnUHVibGlzaFNJQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMKTsKLSAgICAgICAgICAgIGlmIChzYXZlZFRNb2RlbCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0TW9kZWxzVGFibGUucHV0KCgoVE1vZGVsKXNhdmVkVE1vZGVsKS5nZXROYW1lU3RyaW5nKCksIHNhdmVkVE1vZGVsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFJlc2VsZWN0IHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAgICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChjdXJyZW50Tm9kZUlkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gdWRkaTRqSGVscGVyLm5ld0J1c2luZXNzU2VydmljZSh3c2RsVVJMLCBkZWYsIHRNb2RlbHNUYWJsZSk7Ci0gICAgICBpZiAoYmUgIT0gbnVsbCkKLSAgICAgICAgYnMuc2V0QnVzaW5lc3NLZXkoYmUuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICBlbHNlIGlmIChidXNpbmVzc0tleSAhPSBudWxsKQotICAgICAgICBicy5zZXRCdXNpbmVzc0tleShidXNpbmVzc0tleSk7Ci0gICAgICBicy5zZXREZWZhdWx0TmFtZShuZXcgTmFtZShuYW1lKSk7Ci0gICAgICBicy5zZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgVmVjdG9yIGJzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYnNWZWN0b3IuYWRkKGJzKTsKLSAgICAgIHJlZ0VsZW1lbnQuaGFuZGxlUHJlSW52b2NhdGlvbihicyk7Ci0gICAgICBicyA9IChCdXNpbmVzc1NlcnZpY2UpcHJveHkuc2F2ZV9zZXJ2aWNlKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYnNWZWN0b3IpLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpLmdldCgwKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJzLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfUFVCTElTSEVEIixicy5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJXU0RMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZlYzQ5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5hc3NlcnRpb24uUHVibGlzaGVyQXNzZXJ0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQ29tcGxldGlvblN0YXR1czsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gZXh0ZW5kcyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uCi17Ci0gIHB1YmxpYyBSZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLQotICAgIC8vIGlkcyBmcm9tIHVkZGlPYmplY3RzX3RhYmxlCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgIT0gbnVsbCAmJiBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBzZWxlY3RlZEJ1c0lkcyk7Ci0gICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklEIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklEKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gaWRzIGZyb20gcHVibGlzaGVyIGFzc2VydGlvbiB0YWJsZQotICAgIFN0cmluZ1tdIHB1YkFzc2VydGlvbnNWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCk7Ci0gICAgaWYgKHB1YkFzc2VydGlvbnNWaWV3SWRzID09IG51bGwgfHwgcHViQXNzZXJ0aW9uc1ZpZXdJZHMubGVuZ3RoID09IDApCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIGVsc2UKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCwgcHViQXNzZXJ0aW9uc1ZpZXdJZHMpOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgaWYgKCEoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICB0cnkgewotICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJRCwgcGFzc3dvcmQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh0ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UobWUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIFVERElQcm94eSBwcm94eSA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRQcm94eSgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0Q3JlZCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgTGlzdE1hbmFnZXIgcHViQXNzZXJ0aW9ucyA9IGJ1c0VsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotCi0gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIG93bmVkIGJ1c2luZXNzCi0gICAgLy8gaWYgbm90LCB0aGUgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkCi0gICAgaWYgKCFpc0J1c2luZXNzT3duZWQoYnVzRWxlbWVudCkpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RfT1dORURfQlVTSU5FU1MiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgU3RyaW5nW10gcHViQXNzZXJ0aW9uVmlld0lkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgICAgVmVjdG9yIHB1YkFzc2VydGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJvb2xlYW4gcmVmcmVzaFJlcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHViQXNzZXJ0aW9uVmlld0lkcy5sZW5ndGg7IGkrKykgewotICAgICAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludChwdWJBc3NlcnRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBwdWJBc3NlcnRpb25zLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IChQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb24gcHViQXNzZXJ0aW9uID0gcHViQXNzZXJ0aW9uRWxlbWVudC5nZXRQdWJsaXNoZXJBc3NlcnRpb24oKTsKLSAgICAgICAgcHViQXNzZXJ0aW9uVmVjdG9yLmFkZChwdWJBc3NlcnRpb24pOwotICAgICAgICBpZiAocHViQXNzZXJ0aW9uRWxlbWVudC5nZXRTdGF0dXMoKS5lcXVhbHMoQ29tcGxldGlvblN0YXR1cy5DT01QTEVURSkpCi0gICAgICAgICAgcmVmcmVzaFJlcXVpcmVkID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gcHJveHkuZGVsZXRlX3B1Ymxpc2hlckFzc2VydGlvbnMocmVnaXN0cnlFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHB1YkFzc2VydGlvblZlY3Rvcik7Ci0gICAgICAvL3JlcG9ydCBzdGF0dXMKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChpKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlZnJlc2ggaXMgcmVxdWlyZWQsIHJlZnJlc2ggdGhlIHdob2xlIHB1Ymxpc2hlciBhc3NlcnRpb24gdGFibGUKLSAgICAgIGlmIChyZWZyZXNoUmVxdWlyZWQpIHsKLSAgICAgICAgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gc2hvd1BBQWN0aW9uID0gbmV3IFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBzaG93UEFBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBPYmplY3QgaWRzID0gcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICAgICAgaWYgKGlkcyAhPSBudWxsKQotICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBpZHMpOwotICAgICAgICBzaG93UEFBY3Rpb24ucnVuKCk7Ci0gICAgICB9Ci0gICAgICAvLyByZWZyZXNoIGlzIG5vdCByZXF1aXJlZCwgZGVsZXRlIHRoZSBzZWxlY3RlZCBwdWJsaXNoZXIgYXNzZXJ0aW9uIGVsZW1lbnRzCi0gICAgICBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBwdWJBc3NlcnRpb25WaWV3SWRzLmxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgcHViQXNzZXJ0aW9ucy5yZW1vdmVFbGVtZW50V2l0aFZpZXdJZChJbnRlZ2VyLnBhcnNlSW50KHB1YkFzc2VydGlvblZpZXdJZHNba10pKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gcmVwb3J0LnN1Y2Nlc3MoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHVkZGllLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk4NGUyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICAKLSAgcHVibGljIFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgfQotICAKLSAgLy8gdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3A/c3ViUXVlcnlLZXk9Li4uJnN1YlF1ZXJ5TGlzdEtleT0uLi4mc3ViUXVlcnlMaXN0SXRlbUlkPS4uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzdWJRdWVyeUtleSxTdHJpbmcgc3ViUXVlcnlMaXN0S2V5LGludCBzdWJRdWVyeUxpc3RJdGVtSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlLZXkpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUxpc3RLZXkpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUxpc3RJdGVtSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlMaXN0S2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEl0ZW1JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpOwotICAgIAotICAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLHN1YlF1ZXJ5S2V5KTsKLSAgICAgIAotICAgIGlmIChzdWJRdWVyeUxpc3RLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZLHN1YlF1ZXJ5TGlzdEtleSk7Ci0gICAgICAKLSAgICBpZiAoc3ViUXVlcnlMaXN0SXRlbUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCxzdWJRdWVyeUxpc3RJdGVtSWQpOwotICAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKTsKLSAgICBpbnQgc3ViUXVlcnlMaXN0SXRlbUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgY3VycmVudE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50Tm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpKTsKLSAgICBWZWN0b3IgbGlzdCA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eSgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKSk7Ci0gICAgbGlzdC5yZW1vdmVFbGVtZW50QXQoc3ViUXVlcnlMaXN0SXRlbUlkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWRlMzhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVVRERJRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVVRERJRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIG5ldyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoZnJhbWVOYW1lLmVxdWFscyhVRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh1ZGRpUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMTAwJSwwJSIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKFVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh1ZGRpUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3ModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjEwMCUsMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKFVERElGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh1ZGRpUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3ModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExNjVmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotICBwdWJsaWMgU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRDYXRlZ29yeU1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmpzcD9zZXNzaW9uSWQ9Li4uJm5vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgLy8gRG8gbm90IGFkZCB0aGlzIGFjdGlvbiB0byB0aGUgaGlzdG9yeS4KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBwZXJmb3JtQmFzZUFjdGlvbihub2RlSWQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gImNhdGVnb3J5QnJvd3NlcldpbmRvd0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlNDc3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIFNlbGVjdEZpbmRUb29sQWN0aW9uIGV4dGVuZHMgU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIHRvb2xMaW5rQ2hhbmdlZF87Ci0KLSAgcHVibGljIFNlbGVjdEZpbmRUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IG51bGw7Ci0gICAgdG9vbExpbmtDaGFuZ2VkXyA9IGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5wcm9jZXNzTGlua1BhcmFtZXRlcnMocmVxdWVzdCk7Ci0gICAgc3ViUXVlcnlLZXlfID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyAvdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uLmpzcD9ub2RlSWQ9Li4uJnRvb2xJZD0uLi48JnZpZXdJZD0uLi4mdmlld1Rvb2xJZD0uLi4+JnN1YlF1ZXJ5S2V5PS4uLjwmaXNIaXN0b3J5PTE+Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQsU3RyaW5nIHN1YlF1ZXJ5S2V5LGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodG9vbElkKTsKLSAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld0lkKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld1Rvb2xJZCk7Ci0gICAgfQotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlLZXkpOwotCi0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpZiAoIXN1cGVyLnJ1bigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGVfLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBTdHJpbmcgY3VycmVudFN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5XyAhPSBudWxsICYmICFzdWJRdWVyeUtleV8uZXF1YWxzKGN1cnJlbnRTdWJRdWVyeUtleSkpCi0gICAgewotICAgICAgdG9vbExpbmtDaGFuZ2VkXyA9IHRydWU7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSxzdWJRdWVyeUtleV8pOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzVmlld1NlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdG9vbExpbmtDaGFuZ2VkXzsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbF8uZ2V0VG9vbElkKCk7Ci0gICAgaW50IHZpZXdJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHN1YlF1ZXJ5S2V5Xyx0cnVlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2JlZTM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGVfLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCk7Ci0gICAgc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgIHJldHVybiBzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODZlMTU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlVG9vbEFjdGlvbgotewotICBwdWJsaWMgU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICB9Ci0KLSAgLy8gL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uJnZpZXdUb29sSWQ9Li4uPjwmaXNIaXN0b3J5PTE+Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh0b29sSWQpOwotICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgIHsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh2aWV3SWQpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh2aWV3VG9vbElkKTsKLSAgICB9Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbF8uZ2V0VG9vbElkKCk7Ci0gICAgaW50IHZpZXdJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2JiNWJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24gZXh0ZW5kcyBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNWaWV3U2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIG5ld1VVSURRdWVyeUNyZWF0ZWRfOwotICBwcml2YXRlIFN0cmluZyBpdGVtTmFtZV87Ci0gIHB1YmxpYyBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gZmFsc2U7Ci0gICAgcmVxdWlyZXNWaWV3U2VsZWN0aW9uXyA9IGZhbHNlOwotICAgIG5ld1VVSURRdWVyeUNyZWF0ZWRfID0gZmFsc2U7Ci0gICAgaXRlbU5hbWVfID0gbnVsbDsKLSAgfQotCi0gIC8vIC91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmpzcD9ub2RlSWQ9Li4uJnRvb2xJZD0uLi48JnZpZXdJZD0uLi4+JnN1YlF1ZXJ5S2V5PS4uLiZzdWJRdWVyeUxpc3RLZXk9Li4uJnN1YlF1ZXJ5TGlzdEl0ZW1JZD0uLi4mcXVlcnlJdGVtPS4uLjwmaXNIaXN0b3J5PTE+Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsU3RyaW5nIHN1YlF1ZXJ5S2V5LFN0cmluZyBzdWJRdWVyeUxpc3RLZXksaW50IHN1YlF1ZXJ5TGlzdEl0ZW1JZCxpbnQgcXVlcnlJdGVtLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHRvb2xJZCk7Ci0gICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld0lkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5S2V5KTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlMaXN0S2V5KTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlMaXN0SXRlbUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pLmFwcGVuZCgnPScpLmFwcGVuZChxdWVyeUl0ZW0pOwotCi0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gc3VwZXIucHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlMaXN0S2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEl0ZW1JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpOwotICAgIFN0cmluZyBxdWVyeUl0ZW1TdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pOwotCi0gICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksc3ViUXVlcnlLZXkpOwotCi0gICAgaWYgKHN1YlF1ZXJ5TGlzdEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVksc3ViUXVlcnlMaXN0S2V5KTsKLQotICAgIGlmIChzdWJRdWVyeUxpc3RJdGVtSWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlELHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0KLSAgICBpZiAocXVlcnlJdGVtU3RyaW5nICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLHF1ZXJ5SXRlbVN0cmluZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBmaW5kQnlVVUlEKCkKLSAgewotICAgIE5vZGUgY3VycmVudE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcygoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkpOwotICAgIFZlY3RvciBsaXN0ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpKTsKLSAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClsaXN0LmVsZW1lbnRBdChJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpKSk7Ci0gICAgaW50IHF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSk7Ci0gICAgRmluZEFjdGlvbiBmaW5kQWN0aW9uID0gbnVsbDsKLSAgICBTdHJpbmcgdXVpZEtleSA9IG51bGw7Ci0gICAgU3RyaW5nIHV1aWRLZXlWYWx1ZSA9IG51bGw7Ci0gICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICAgewotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgZmluZEFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgdXVpZEtleSA9IFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVk7Ci0gICAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICB1dWlkS2V5VmFsdWUgPSBzcC5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgICBpdGVtTmFtZV8gPSBzcC5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICBmaW5kQWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIHV1aWRLZXkgPSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVk7Ci0gICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHV1aWRLZXlWYWx1ZSA9IGJzLmdldFNlcnZpY2VLZXkoKTsKLSAgICAgICAgaXRlbU5hbWVfID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBmaW5kQWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIHV1aWRLZXkgPSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZOwotICAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgdXVpZEtleVZhbHVlID0gdE1vZGVsLmdldFRNb2RlbEtleSgpOwotICAgICAgICBpdGVtTmFtZV8gPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgIH0KLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGZpbmRBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1dWlkS2V5VmFsdWUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KHV1aWRLZXksdXVpZEtleVZhbHVlKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZpbmRBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICB7Ci0gICAgICBOb2RlIGl0ZW1Ob2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgaW50IG5vZGVJZCA9IGl0ZW1Ob2RlLmdldE5vZGVJZCgpOwotICAgICAgaW50IHRvb2xJZCA9IGl0ZW1Ob2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICAgIGludCB2aWV3SWQgPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gICAgICBpbnQgdmlld1Rvb2xJZCA9IEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQ7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxTdHJpbmcudmFsdWVPZihub2RlSWQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELFN0cmluZy52YWx1ZU9mKHRvb2xJZCkpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsU3RyaW5nLnZhbHVlT2Yodmlld0lkKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsU3RyaW5nLnZhbHVlT2Yodmlld1Rvb2xJZCkpOwotICAgICAgc3VwZXIucnVuKCk7Ci0gICAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF8gPSB0cnVlOwotICAgICAgcmVxdWlyZXNWaWV3U2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICBuZXdVVUlEUXVlcnlDcmVhdGVkXyA9IHRydWU7Ci0gICAgICBsaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8obm9kZUlkLHRvb2xJZCx2aWV3SWQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGUgaXRlbSBpcyBubyBsb25nZXIgaW4gdGhlIHJlZ2lzdHJ5LgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SXRlbU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGl0ZW1OYW1lXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIEdpdmVuIHRoZSBub2RlSWQsIHRvb2xJZCBhbmQgdmlld0lkLCBjaGVjayBpZiB0aGUgbm9kZSBvciB2aWV3IGlzIHN0YWxlLgotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdG9vbElkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVE9PTElEKSk7Ci0gICAgaW50IHZpZXdJZCA9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICB2aWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgaW50IHZpZXdUb29sSWQgPSAwOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICAvLyBFbnVzcmUgdGhlIG5vZGUgaXMgdmlzaWJsZS4KLSAgICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IG1ha2VOb2RlVmlzaWJsZShub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpKTsKLQotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgewotICAgICAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbCkobm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFRvb2wodG9vbElkKSk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGVsZW1lbnRUb29sTWFuYWdlciA9IHZpZXdUb29sLmdldFRvb2xNYW5hZ2VyKHZpZXdJZCk7Ci0gICAgICAgIGlmIChlbGVtZW50VG9vbE1hbmFnZXIgIT0gbnVsbCkKLSAgICAgICAgICB2aWV3VG9vbElkID0gZWxlbWVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFN0YWxlIHZpZXcKLSAgICAgICAgICByZXR1cm4gZmluZEJ5VVVJRCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsU3RyaW5nLnZhbHVlT2Yodmlld1Rvb2xJZCkpOwotICAgICAgcmV0dXJuIHN1cGVyLnJ1bigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gU3RhbGUgbm9kZQotICAgICAgcmV0dXJuIGZpbmRCeVVVSUQoKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoKCkKLSAgewotICAgIHJldHVybiBzdXBlci5yZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpfHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzVmlld1NlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIucmVxdWlyZXNWaWV3U2VsZWN0aW9uKCl8cmVxdWlyZXNWaWV3U2VsZWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzU3RhdHVzVXBkYXRlKCkKLSAgewotICAgIHJldHVybiBuZXdVVUlEUXVlcnlDcmVhdGVkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gInN0YXR1c0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk5NTMwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLk5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUdldEJ1c2luZXNzQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwcml2YXRlIFNlcnZpY2VOb2RlIHNlcnZpY2VOb2RlXzsKLSAgcHVibGljIFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgICBzZXJ2aWNlTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVNlcnZpY2UoKQotICB7Ci0gICAgaW50IHNlcnZpY2VOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBzZXJ2aWNlTm9kZV8gPSAoU2VydmljZU5vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoc2VydmljZU5vZGVJZCk7Ci0gICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpLmdldFNlcnZpY2VLZXkoKSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0KLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfU0VSVklDRV9CVVNJTkVTUyIsc2VydmljZU5vZGVfLmdldE5vZGVOYW1lKCkpKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLGJzLmdldEJ1c2luZXNzS2V5KCkpOwotCi0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM2ZWYxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwcml2YXRlIFNlcnZpY2VOb2RlIHNlcnZpY2VOb2RlXzsKLSAgcHVibGljIFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzZXJ2aWNlTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVNlcnZpY2UoKQotICB7Ci0gICAgaW50IHNlcnZpY2VOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBzZXJ2aWNlTm9kZV8gPSAoU2VydmljZU5vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoc2VydmljZU5vZGVJZCk7Ci0gICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpLmdldFNlcnZpY2VLZXkoKSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTIixzZXJ2aWNlTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UsQm9vbGVhbi5UUlVFKTsKLSAgICBMaXN0RWxlbWVudCBzZXJ2aWNlTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoYnMpOwotICAgIHNlcnZpY2VMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oc2VydmljZU5vZGVfLmdldE5vZGVJZCgpLHNlcnZpY2VOb2RlXy5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksc2VydmljZU5vZGVfLmdldFZpZXdJZCgpKTsKLSAgICBWZWN0b3Igc2VydmljZUxpc3RWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VydmljZUxpc3RWZWN0b3IuYWRkRWxlbWVudChzZXJ2aWNlTGlzdEVsZW1lbnQpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSxzZXJ2aWNlTGlzdFZlY3Rvcik7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9CVVNJTkVTU19TRVJWSUNFLGJzKTsKLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzYjcyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlSW50ZXJmYWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5UTW9kZWxCYWc7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbiBleHRlbmRzIFVERElOb2RlQWN0aW9uCi17Ci0gIHByaXZhdGUgU2VydmljZUludGVyZmFjZU5vZGUgc2lOb2RlXzsKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHNpTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY0dldEJ1c2luZXNzZXNBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVNlcnZpY2VJbnRlcmZhY2UoKQotICB7Ci0gICAgaW50IHNpTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgc2lOb2RlXyA9IChTZXJ2aWNlSW50ZXJmYWNlTm9kZSlub2RlTWFuYWdlcl8uZ2V0Tm9kZShzaU5vZGVJZCk7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNpTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHNpRWxlbWVudC5nZXRUTW9kZWwoKS5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLQotICAgIFJlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9TSV9CVVNJTkVTU0VTIixzaU5vZGVfLmdldE5vZGVOYW1lKCkpKTsKLSAgICAKLSAgICBMaXN0RWxlbWVudCBzaUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHRNb2RlbCk7Ci0gICAgc2lMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oc2lOb2RlXy5nZXROb2RlSWQoKSxzaU5vZGVfLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSxzaU5vZGVfLmdldFZpZXdJZCgpKTsKLSAgICBWZWN0b3Igc2lMaXN0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIHNpTGlzdFZlY3Rvci5hZGRFbGVtZW50KHNpTGlzdEVsZW1lbnQpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTLHNpTGlzdFZlY3Rvcik7Ci0gICAgCi0gICAgVmVjdG9yIHRNb2RlbEtleVN0cmluZ1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICB0TW9kZWxLZXlTdHJpbmdWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpOwotICAgIFRNb2RlbEJhZyB0TW9kZWxCYWcgPSBuZXcgVE1vZGVsQmFnKHRNb2RlbEtleVN0cmluZ1ZlY3Rvcik7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcsdE1vZGVsQmFnKTsKLSAgICAKLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTNhNDc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlSW50ZXJmYWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5UTW9kZWxCYWc7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwcml2YXRlIFNlcnZpY2VJbnRlcmZhY2VOb2RlIHNpTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc2lOb2RlXyA9IG51bGw7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjR2V0U2VydmljZXNBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlSW50ZXJmYWNlKCkKLSAgewotICAgIGludCBzaU5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHNpTm9kZV8gPSAoU2VydmljZUludGVyZmFjZU5vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoc2lOb2RlSWQpOwotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSxzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0KLSAgICBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9TSV9TRVJWSUNFUyIsc2lOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgCi0gICAgTGlzdEVsZW1lbnQgc2lMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh0TW9kZWwpOwotICAgIHNpTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKHNpTm9kZV8uZ2V0Tm9kZUlkKCksc2lOb2RlXy5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksc2lOb2RlXy5nZXRWaWV3SWQoKSk7Ci0gICAgVmVjdG9yIHNpTGlzdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBzaUxpc3RWZWN0b3IuYWRkRWxlbWVudChzaUxpc3RFbGVtZW50KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLHNpTGlzdFZlY3Rvcik7Ci0gICAgCi0gICAgVmVjdG9yIHRNb2RlbEtleVN0cmluZ1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICB0TW9kZWxLZXlTdHJpbmdWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpOwotICAgIFRNb2RlbEJhZyB0TW9kZWxCYWcgPSBuZXcgVE1vZGVsQmFnKHRNb2RlbEtleVN0cmluZ1ZlY3Rvcik7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyx0TW9kZWxCYWcpOwotICAgIAotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWI4NjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkFzc2VydGlvblN0YXR1c0l0ZW07Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Bc3NlcnRpb25TdGF0dXNSZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Db21wbGV0aW9uU3RhdHVzOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWxhdGVkQnVzaW5lc3NJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVsYXRlZEJ1c2luZXNzZXNMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2hhcmVkUmVsYXRpb25zaGlwczsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbgotewotCi0gIHByb3RlY3RlZCBTdHJpbmcgc3ViUXVlcnlLZXlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1fOwotCi0gIHB1YmxpYyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLQotICAgIHN1YlF1ZXJ5S2V5XyA9IG51bGw7Ci0gICAgaXNTdWJRdWVyeUdldF8gPSBmYWxzZTsKLSAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gaWRzIGZyb20gdWRkaU9iamVjdHNfdGFibGUKLSAgICBTdHJpbmdbXSBzZWxlY3RlZEJ1c0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgIGlmIChzZWxlY3RlZEJ1c0lkcyAhPSBudWxsICYmIHNlbGVjdGVkQnVzSWRzLmxlbmd0aCA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIHNlbGVjdGVkQnVzSWRzKTsKLQotICAgIG5ld1N1YlF1ZXJ5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEKTsKLSAgICBTdHJpbmcgaXNTdWJRdWVyeUdldFN0cmluZyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgIG5ld1N1YlF1ZXJ5SXRlbV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0pOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLmNsZWFyRXJyb3JzKCk7Ci0KLSAgICBpZiAobmV3U3ViUXVlcnlfICE9IG51bGwgJiYgbmV3U3ViUXVlcnlfLmxlbmd0aCgpID4gMCkKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0KLSAgICBpZiAoaXNTdWJRdWVyeUdldFN0cmluZyAhPSBudWxsKQotICAgICAgaXNTdWJRdWVyeUdldF8gPSBCb29sZWFuLnZhbHVlT2YoaXNTdWJRdWVyeUdldFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIC8vIE5PVEU6IFRoaXMgYWN0aW9uIGRvZXMgTk9UIHJlcXVpcmUgdGhlIHVzZXIgdG8gYmUgbG9nZ2VkIGluLgotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklEICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgfQotCi0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlJbml0aWF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlHZXQoKQotICB7Ci0gICAgcmV0dXJuIGlzU3ViUXVlcnlHZXRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeUl0ZW0oKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLQotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgaWYgKCEoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICB0cnkgewotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpICYmCi0gICAgICAgICAgICBWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklEKSAmJgotICAgICAgICAgICAgcGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCwgdXNlcklELCBwYXNzd29yZCk7Ci0gICAgICAgICAgaXNMb2dnZWRJbl8gPSByZWdpc3RyeUVsZW1lbnQuaXNMb2dnZWRJbigpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHRlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpZS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShtZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9ICAgICAgCi0gICAgfQotCi0gICAgLy8gc2hvdyBhbGwgYXNzZXJ0aW9uIGlmZiBpcyBsb2dnZWQgaW4gYW5kIGJ1c2luZXNzIGlzIG93bmVkCi0gICAgLy8gZWxzZSBzaG93IG9ubHkgY29tcGxldGVkIG9uZXMKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgIGlmIChpc0xvZ2dlZEluXyAmJiBpc0J1c2luZXNzT3duZWQoYnVzRWxlbWVudCkpCi0gICAgICByZXR1cm4gc2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JPd25lZEJ1cyhidXNFbGVtZW50KTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gc2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JOb25Pd25lZEJ1cyhidXNFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzaG93UHVibGlzaGVyQXNzZXJ0aW9uc0Zvck93bmVkQnVzKEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50KSB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICAvLyB0cnkgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgcHVibGlzaGVyIGFzc2VydGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCByZWdpc3RyeSdzIGF1dGhUb2tlbgotICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgIFZlY3RvciBxdWVyeUlucHV0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldENyZWQoKTsKLQotICAgIC8vIHNob3cgYWxsIHB1Ymxpc2hlciBhc3NlcnRpb25zCi0gICAgVURESVByb3h5IHByb3h5ID0gKChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpKS5nZXRQcm94eSgpOwotICAgIEFzc2VydGlvblN0YXR1c1JlcG9ydCBhc3NlcnRpb25SZXBvcnQ7Ci0gICAgdHJ5IHsKLSAgICAgIGFzc2VydGlvblJlcG9ydCA9IHByb3h5LmdldF9hc3NlcnRpb25TdGF0dXNSZXBvcnQocmVnaXN0cnlFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIChDb21wbGV0aW9uU3RhdHVzKW51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChpKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciBhc3NlcnRpb25WZWN0b3IgPSBhc3NlcnRpb25SZXBvcnQuZ2V0QXNzZXJ0aW9uU3RhdHVzSXRlbVZlY3RvcigpOwotICAgIFZlY3RvciBvdGhlckJ1c2luZXNzS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgcHViQXNzZXJ0aW9uRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFzc2VydGlvblZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgQXNzZXJ0aW9uU3RhdHVzSXRlbSBhc3NlcnRpb25JdGVtID0gKEFzc2VydGlvblN0YXR1c0l0ZW0pYXNzZXJ0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgIC8vIGRldGVybWluZSB0aGUgZnJvbS90byBidXNpbmVzcyBrZXlzCi0gICAgICBTdHJpbmcgZnJvbUtleSA9IGFzc2VydGlvbkl0ZW0uZ2V0RnJvbUtleSgpLmdldFRleHQoKTsKLSAgICAgIFN0cmluZyB0b0tleSA9IGFzc2VydGlvbkl0ZW0uZ2V0VG9LZXkoKS5nZXRUZXh0KCk7Ci0gICAgICBTdHJpbmcgb3duaW5nQnVzaW5lc3NLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgIC8vIGlnbm9yZSB0aGlzIGFzc2VydGlvbiBpZiBuZWl0aGVyIHRoZSBmcm9tIGtleSBub3IgdGhlIHRvIGtleSBlcXVhbHMgdG8gdGhpcyBidXNpbmVzcydzIGtleQotICAgICAgaWYgKCFvd25pbmdCdXNpbmVzc0tleS5lcXVhbHMoZnJvbUtleSkgJiYgIW93bmluZ0J1c2luZXNzS2V5LmVxdWFscyh0b0tleSkpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgU3RyaW5nIG90aGVyQnVzaW5lc3NLZXkgPSAoKG93bmluZ0J1c2luZXNzS2V5LmVxdWFscyhmcm9tS2V5KSkgPyB0b0tleSA6IGZyb21LZXkpOwotICAgICAgLy8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSAib3RoZXIgYnVzaW5lc3MiCi0gICAgICBvdGhlckJ1c2luZXNzS2V5cy5hZGQob3RoZXJCdXNpbmVzc0tleSk7Ci0KLSAgICAgIC8vIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgdGhlIHB1Ymxpc2hlciBhc3NlcnRpb24KLSAgICAgIFN0cmluZyBzdGF0dXMgPSBhc3NlcnRpb25JdGVtLmdldENvbXBsZXRpb25TdGF0dXMoKS5nZXRUZXh0KCk7Ci0gICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZiA9IGFzc2VydGlvbkl0ZW0uZ2V0S2V5ZWRSZWZlcmVuY2UoKTsKLSAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IG5ldyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duaW5nQnVzaW5lc3NLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXllZFJlZik7Ci0gICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5hZGQocHViQXNzZXJ0aW9uRWxlbWVudCk7Ci0gICAgfQotICAgIGlmIChvdGhlckJ1c2luZXNzS2V5cy5zaXplKCkgPiAwKSB7Ci0gICAgICBWZWN0b3IgYnVzRW50aXRpZXM7Ci0gICAgICB0cnkgewotICAgICAgICBidXNFbnRpdGllcyA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChvdGhlckJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgYnVzRW50aXRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGlmIChvdGhlckJ1c2luZXNzS2V5cy5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvdGhlckJ1c2luZXNzS2V5cy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgYnVzRW50aXRpZXMuYWRkKHByb3h5LmdldF9idXNpbmVzc0RldGFpbCgoU3RyaW5nKW90aGVyQnVzaW5lc3NLZXlzLmdldChqKSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMucmVtb3ZlKGopOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMucmVtb3ZlKDApOwotICAgICAgfQotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBidXNFbnRpdGllcy5zaXplKCk7IGorKykgewotICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlidXNFbnRpdGllcy5nZXQoaik7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IChQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KXB1YkFzc2VydGlvbkVsZW1lbnRzLmdldChqKTsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSBuZXcgTGlzdEVsZW1lbnQoYmUpOwotICAgICAgICBxdWVyeUlucHV0VmVjdG9yLmFkZChsZSk7Ci0gICAgICAgIGludCBzdWJRdWVyeUl0ZW1JZCA9IHF1ZXJ5SW5wdXRWZWN0b3IuaW5kZXhPZihsZSk7Ci0gICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnQuc2V0U2VydmljZVByb3ZpZGVyKGxlKTsKLSAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudC5zZXRTdWJRdWVyeUl0ZW1JZChzdWJRdWVyeUl0ZW1JZCk7Ci0gICAgICAgIGxpc3RNYW5hZ2VyLmFkZChuZXcgTGlzdEVsZW1lbnQocHViQXNzZXJ0aW9uRWxlbWVudCkpOwotICAgICAgfQotICAgIH0KLSAgICBidXNFbGVtZW50LnNldFB1Ymxpc2hlckFzc2VydGlvbnMobGlzdE1hbmFnZXIpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9FWElTVElOR19QVUJMSVNIRVJfQVNTRVJUSU9OUywgcXVlcnlJbnB1dFZlY3Rvcik7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1BVQkxJU0hFUl9BU1NFUlRJT05TX1JFRlJFU0hFRCIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzaG93UHVibGlzaGVyQXNzZXJ0aW9uc0Zvck5vbk93bmVkQnVzKEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50KSB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICAvLyB0cnkgdG8gZ2V0IGEgbGlzdCBvZiBwdWJsaXNoZXIgYXNzZXJ0aW9ucyBiYXNlZCBvbiB0aGUgYnVzaW5lc3Mga2V5Ci0gICAgTGlzdE1hbmFnZXIgbGlzdE1hbmFnZXIgPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9FWElTVElOR19QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICAgVmVjdG9yIHF1ZXJ5SW5wdXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVURESVByb3h5IHByb3h5ID0gKChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpKS5nZXRQcm94eSgpOwotICAgIFJlbGF0ZWRCdXNpbmVzc2VzTGlzdCByZWxhdGVkQnVzTGlzdDsKLSAgICB0cnkgewotICAgICAgcmVsYXRlZEJ1c0xpc3QgPSBwcm94eS5maW5kX3JlbGF0ZWRCdXNpbmVzc2VzKGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEtleWVkUmVmZXJlbmNlKW51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRmluZFF1YWxpZmllcnMpbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVmVjdG9yIHJlbGF0ZWRCdXNWZWN0b3IgPSByZWxhdGVkQnVzTGlzdC5nZXRSZWxhdGVkQnVzaW5lc3NJbmZvcygpLmdldFJlbGF0ZWRCdXNpbmVzc0luZm9WZWN0b3IoKTsKLSAgICBWZWN0b3Igb3RoZXJCdXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yIHB1YkFzc2VydGlvbkVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgID0gMDsgaSA8IHJlbGF0ZWRCdXNWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgIFJlbGF0ZWRCdXNpbmVzc0luZm8gcmVsYXRlZEJ1c0luZm8gPSAoUmVsYXRlZEJ1c2luZXNzSW5mbylyZWxhdGVkQnVzVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgIC8vIGRldGVybWluZSB0aGUgZnJvbS90byBidXNpbmVzcyBrZXlzCi0gICAgICBTdHJpbmcgZnJvbUtleTsKLSAgICAgIFN0cmluZyB0b0tleTsKLSAgICAgIFN0cmluZyBvd25pbmdCdXNpbmVzc0tleTsKLSAgICAgIGlmIChyZWxhdGVkQnVzSW5mby5nZXREZWZhdWx0U2hhcmVkUmVsYXRpb25zaGlwcygpLmdldERpcmVjdGlvbigpLmVxdWFscyhTaGFyZWRSZWxhdGlvbnNoaXBzLkRJUkVDVElPTl9GUk9NS0VZKSkgewotICAgICAgICBmcm9tS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAgIHRvS2V5ID0gcmVsYXRlZEJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgb3duaW5nQnVzaW5lc3NLZXkgPSBmcm9tS2V5OwotICAgICAgICBvdGhlckJ1c2luZXNzS2V5cy5hZGQodG9LZXkpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGZyb21LZXkgPSByZWxhdGVkQnVzSW5mby5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgICB0b0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgICBvd25pbmdCdXNpbmVzc0tleSA9IHRvS2V5OwotICAgICAgICBvdGhlckJ1c2luZXNzS2V5cy5hZGQoZnJvbUtleSk7Ci0gICAgICB9Ci0KLSAgICAgIFZlY3RvciBrZXllZFJlZlZlY3RvciA9IHJlbGF0ZWRCdXNJbmZvLmdldERlZmF1bHRTaGFyZWRSZWxhdGlvbnNoaXBzKCkuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnRbXSBwdWJBc3NlcnRpb25FbGVtZW50QXJyYXkgPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudFtrZXllZFJlZlZlY3Rvci5zaXplKCldOwotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBrZXllZFJlZlZlY3Rvci5zaXplKCk7IGsrKykgewotICAgICAgICAvLyByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uCi0gICAgICAgIFN0cmluZyBzdGF0dXMgPSBDb21wbGV0aW9uU3RhdHVzLkNPTVBMRVRFOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZiA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZlZlY3Rvci5lbGVtZW50QXQoayk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IG5ldyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duaW5nQnVzaW5lc3NLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWVkUmVmKTsKLSAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5W2tdID0gcHViQXNzZXJ0aW9uRWxlbWVudDsKLSAgICAgIH0KLSAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLmFkZChwdWJBc3NlcnRpb25FbGVtZW50QXJyYXkpOwotICAgIH0KLSAgICBpZiAob3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpID4gMCkgewotICAgICAgVmVjdG9yIGJ1c0VudGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAgYnVzRW50aXRpZXMgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwob3RoZXJCdXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgIGJ1c0VudGl0aWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAob3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpID4gMSkgewotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGJ1c0VudGl0aWVzLmFkZChwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoKFN0cmluZylvdGhlckJ1c2luZXNzS2V5cy5nZXQoaikpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLnJlbW92ZShqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLnJlbW92ZSgwKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGogID0gMDsgaiA8IGJ1c0VudGl0aWVzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWJ1c0VudGl0aWVzLmdldChqKTsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSBuZXcgTGlzdEVsZW1lbnQoYmUpOwotICAgICAgICBxdWVyeUlucHV0VmVjdG9yLmFkZChsZSk7Ci0gICAgICAgIGludCBzdWJRdWVyeUl0ZW1JZCA9IHF1ZXJ5SW5wdXRWZWN0b3IuaW5kZXhPZihsZSk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnRbXSBwdWJBc3NlcnRpb25FbGVtZW50QXJyYXkgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudFtdKXB1YkFzc2VydGlvbkVsZW1lbnRzLmdldChqKTsKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBwdWJBc3NlcnRpb25FbGVtZW50QXJyYXkubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50QXJyYXlba10uc2V0U2VydmljZVByb3ZpZGVyKGxlKTsKLSAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50QXJyYXlba10uc2V0U3ViUXVlcnlJdGVtSWQoc3ViUXVlcnlJdGVtSWQpOwotICAgICAgICAgIGxpc3RNYW5hZ2VyLmFkZChuZXcgTGlzdEVsZW1lbnQocHViQXNzZXJ0aW9uRWxlbWVudEFycmF5W2tdKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnVzRWxlbWVudC5zZXRQdWJsaXNoZXJBc3NlcnRpb25zKGxpc3RNYW5hZ2VyKTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMsIHF1ZXJ5SW5wdXRWZWN0b3IpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19QVUJMSVNIRVJfQVNTRVJUSU9OU19SRUZSRVNIRUQiKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwMTliNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24gZXh0ZW5kcyBTaG93UGVyc3BlY3RpdmVBY3Rpb24KLXsKLSAgcHVibGljIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgCi0gICAgLy8gU2F2ZSB0aGUgZnJhbWVzZXQgc2l6ZXMgaWZmIG5vIGZyYW1lIGlzIG1heGltaXplZC4KLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpICYmICFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIAotICAgIGlmICghYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgCi0gICAgcmV0dXJuIHN1cGVyLnJ1bigpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgZm9ybUxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgZm9ybUxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSkuYXBwZW5kKCc9JykuYXBwZW5kKHRhcmdldFBlcnNwZWN0aXZlSWQpOwotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgZm9ybUxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzZDM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ub2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbiBleHRlbmRzIFRvZ2dsZU5vZGVBY3Rpb24KLXsKLSAgcHVibGljIFRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0Q2F0ZWdvcnlNYW5hZ2VyKCkpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uanNwP3NJZD0uLi4mbm9kZUlkPS4uLiZvcGVuPS4uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQsaW50IG5vZGVJZCxib29sZWFuIG9wZW4pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOKS5hcHBlbmQoJz0nKS5hcHBlbmQob3Blbj9BY3Rpb25JbnB1dHMuT1BFTl9OT0RFOkFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBwZXJmb3JtQmFzZUFjdGlvbihub2RlSWQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJjYXRlZ29yeUJyb3dzZXJXaW5kb3dDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5nZXRDYXRlZ29yeUNvbnRlbnRQYWdlKGNvbnRyb2xsZXJfLmdldFNlc3Npb25JZCgpLHVkZGlQZXJzcGVjdGl2ZS5nZXRDYXRlZ29yeVRNb2RlbEtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiBPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmsoY29udHJvbGxlcl8uZ2V0U2Vzc2lvbklkKCksdWRkaVBlcnNwZWN0aXZlLmdldENhdGVnb3J5VE1vZGVsS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjZkNTY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ub2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBUb2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4mb3Blbj0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGJvb2xlYW4gb3BlbikKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOKS5hcHBlbmQoJz0nKS5hcHBlbmQob3Blbj9BY3Rpb25JbnB1dHMuT1BFTl9OT0RFOkFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgdG8gc2VsZWN0IHRoZSB0b2dnbGVkIG5vZGUgd2hlbiwgYXQgdGhlIHRpbWUgb2YKLSAgLy8gdGhlIGNvbGxhcHNlIGV2ZW50LCBhIGRlc2NlbmRhbnQgbm9kZSB3YXMgc2VsZWN0ZWQuCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGludCBub2RlSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsdHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAibmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gInByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNjI5MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJpdmF0ZSBOb2RlIHRhcmdldE5vZGVfOwotICBwdWJsaWMgVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgdGFyZ2V0Tm9kZV8gPSBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgLy8gVGhlIGNsaWVudCBKYXZhc2NyaXB0IGVuZm9yY2VzIHRoZSBydWxlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSB0aGUgZm9ybSBjYW4gYmUgc3VibWl0dGVkLgotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsc2VsZWN0ZWROb2RlSWRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JSZXR1cm4oKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU0hPV19SRVNVTFRTX1RBUkdFVCkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBlbmFibGVTaG93UmVzdWx0c1RhcmdldCgpCi0gIHsKLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIHRhcmdldCBsaW5rIG9uIHRoZSBxdWVyeSByZXN1bHRzIHBhZ2UuIEluc2VydCBhIHplcm8gZWxlbWVudAotICAgIC8vIGFycmF5IHNvIHRoYXQgbm8gcmVzdWx0cyBhcmUgdHJhbnNmZXJyZWQgYnV0IHRoZSBqdW1wIGJhY2sgdG8gdGhlIGNvcnJlY3QgcXVlcnkgYW5kIGl0cyBpbmZvIG9jY3Vycy4KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLG5ldyBTdHJpbmdbMF0pOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFRyYW5zZmVyIHRoZSByZXN1bHRzIGluIHRoaXMgUXVlcnkgbm9kZSBpbnRvIHRoZSBwcm9wZXJ0eSBleHBlY3RlZCBieSB0aGUgb3JpZ2luYXRpbmcgbm9kZS4KLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIE5vZGUgY3VycmVudE5vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3ViUXVlcnlUcmFuc2ZlclRhcmdldCB0YXJnZXQgPSAoU3ViUXVlcnlUcmFuc2ZlclRhcmdldCkoY3VycmVudEVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUKSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gdGFyZ2V0LmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICAgU3RyaW5nIHRhcmdldFF1ZXJ5S2V5OwotCi0gICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBzdWJRdWVyeUtleS5sYXN0SW5kZXhPZignOicpOwotICAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID09IC0xKQotICAgICAgdGFyZ2V0UXVlcnlLZXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YXJnZXRRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZygwLGxhc3RTZXBhcmF0b3JQb3MpOwotCi0gICAgU3RyaW5nIHRhcmdldFByb3BlcnR5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKGxhc3RTZXBhcmF0b3JQb3MrMSxzdWJRdWVyeUtleS5sZW5ndGgoKSk7Ci0gICAgRm9ybVRvb2wgdGFyZ2V0Rm9ybVRvb2wgPSB0YXJnZXQuZ2V0VGFyZ2V0Rm9ybVRvb2woKTsKLSAgICAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKXRhcmdldEZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSB0YXJnZXRRdWVyeUZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKXRhcmdldEZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXModGFyZ2V0UXVlcnlLZXkpOwotICAgIFZlY3RvciB0YXJnZXRMaXN0ID0gKFZlY3Rvcil0YXJnZXRRdWVyeUZvcm1Ub29sUEkuZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpOwotICAgIGlmICh0YXJnZXRMaXN0ID09IG51bGwpCi0gICAgICB0YXJnZXRMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjdXJyZW50Tm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgIGZvciAoaW50IGk9MDtpPHNlbGVjdGVkTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGludCBzZWxlY3RlZE5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoc2VsZWN0ZWROb2RlSWRzW2ldKTsKLSAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJZCk7Ci0gICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgT2JqZWN0IG9iamVjdDsKLSAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkKLSAgICAgICAgb2JqZWN0ID0gKChCdXNpbmVzc0VsZW1lbnQpdHJlZUVsZW1lbnQpLmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBlbHNlIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgICAgICBvYmplY3QgPSAoKFNlcnZpY2VFbGVtZW50KXRyZWVFbGVtZW50KS5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gU2VydmljZSBpbnRlcmZhY2UKLSAgICAgICAgb2JqZWN0ID0gKChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCl0cmVlRWxlbWVudCkuZ2V0VE1vZGVsKCk7Ci0gICAgICB9Ci0gICAgICBMaXN0RWxlbWVudCB0YXJnZXRMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChvYmplY3QpOwotICAgICAgdGFyZ2V0TGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKHNlbGVjdGVkTm9kZUlkLHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpKTsKLSAgICAgIGlmICh0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUykgfHwgdGFyZ2V0UHJvcGVydHkuZXF1YWxzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUykgfHwgdGFyZ2V0UHJvcGVydHkuZXF1YWxzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSkpCi0gICAgICB7Ci0gICAgICAgIC8vIENsZWFyIHRoZSBtYW5hZ2VyIHNvIGEgcmVwbGFjZW1lbnQgb2NjdXJzLgotICAgICAgICB0YXJnZXRMaXN0LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICB0YXJnZXRMaXN0LmFkZEVsZW1lbnQodGFyZ2V0TGlzdEVsZW1lbnQpOwotICAgIH0KLSAgICB0YXJnZXRRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHksdGFyZ2V0TGlzdCk7Ci0gICAgSGFzaHRhYmxlIHNhdmVkUGFyZW50UXVlcnlQcm9wZXJ0aWVzID0gdGFyZ2V0LmdldFBhcmVudFF1ZXJ5RGF0YSgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBzYXZlZFBhcmVudFF1ZXJ5UHJvcGVydGllcy5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgdGFyZ2V0UXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KGtleSxzYXZlZFBhcmVudFF1ZXJ5UHJvcGVydGllcy5nZXQoa2V5KSk7Ci0gICAgfQotCi0gICAgLy8gU2VsZWN0IHRoZSBub2RlIGFuZCB0aGUgZGF0YXN0cnVjdHVyZSB3aGljaCBpcyB0aGUgdGFyZ2V0IG9mIHRoZSBzdWJxdWVyeS4KLSAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gdGFyZ2V0LmdldE5vZGVJZCgpOwotICAgIGludCB0YXJnZXRUb29sSWQgPSB0YXJnZXQuZ2V0VG9vbElkKCk7Ci0gICAgaW50IHRhcmdldFZpZXdJZCA9IHRhcmdldC5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdGFyZ2V0Vmlld1Rvb2xJZCA9IHRhcmdldC5nZXRWaWV3VG9vbElkKCk7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQodGFyZ2V0Tm9kZUlkKTsKLSAgICB0YXJnZXROb2RlXyA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHRhcmdldE5vZGVfLmdldFRvb2xNYW5hZ2VyKCkuc2V0U2VsZWN0ZWRUb29sSWQodGFyZ2V0VG9vbElkKTsKLSAgICB0YXJnZXROb2RlXy5zZXRWaWV3SWQodGFyZ2V0Vmlld0lkKTsKLSAgICBpZiAodGFyZ2V0Vmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgIHRhcmdldE5vZGVfLmdldFZpZXdUb29sTWFuYWdlcigpLnNldFNlbGVjdGVkVG9vbElkKHRhcmdldFZpZXdUb29sSWQpOwotICAgIHRhcmdldEZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLHRhcmdldFF1ZXJ5S2V5KTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCx0YXJnZXRWaWV3VG9vbElkLHRhcmdldFF1ZXJ5S2V5LHRydWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFRhcmdldE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldE5vZGVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYjUwODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbigpCi0gIHsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcD9zZXNzaW9uSWQ9Li4uJmNhdGVnb3J5VE1vZGVsS2V5PS4uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQsU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCkuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk5ZTgxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIG5vZGVJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkIQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxub2RlSWRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpOwotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICB7Ci0gICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCllbGVtZW50OwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgICAgU3RyaW5nIHdzZGxVUkwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETChicywgc2VydmljZUVsZW1lbnQuZ2V0UmVnaXN0cnlFbGVtZW50KCkuZ2V0UHJveHkoKSk7Ci0gICAgICBpZiAod3NkbFVSTCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgICAgIEZpbGUgdGVtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ0ZW1wIiwiLndzZGwiKTsKLSAgICAgICAgICBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICAgIGFjdGlvbi53cml0ZVdTRExEZWZpbml0aW9uKG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRlbXBGaWxlKSxkZWYpOwotICAgICAgICAgIHdzZGxVUkwgPSB0ZW1wRmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxVUkwgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxVUkwgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFVSTCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICAgCi0gICAgICBpZiAod3NkbFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPcGVuV1NETEFjdGlvbiBvcGVuV1NETEFjdGlvbiA9IG5ldyBPcGVuV1NETEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlbldTRExBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgICAgIGlmIChhY3Rpb25SZXN1bHQpIHsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fV1NETF9BRERFRF9UT19XU0RMX1BFUlNQRUNUSVZFIix3c2RsVVJMKSk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0RMX05PVF9BRERFRF9UT19XU0RMX1BFUlNQRUNUSVZFIikpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUV4Y2VwdGlvbkhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElFeGNlcHRpb25IYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZmE4NDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUV4Y2VwdGlvbkhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci0KLXB1YmxpYyBjbGFzcyBVRERJRXhjZXB0aW9uSGFuZGxlciB7Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVxdWlyZXNSZXNldChVRERJRXhjZXB0aW9uIGUpewotCQkKLSAgICAJRGlzcG9zaXRpb25SZXBvcnQgZHAgPSBlLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0gICAgCVZlY3RvciBydiA9IGRwLmdldFJlc3VsdFZlY3RvcigpOwotICAgIAlmb3IoaW50IGkgPSAwO2kgPCBydi5zaXplKCk7aSsrKXsKLSAgICAJCVJlc3VsdCByZXN1bHQgPSAoUmVzdWx0KXJ2LmdldChpKTsKLSAgICAJCWlmKHJlc3VsdC5nZXRFcnJubygpLmVxdWFscygiMTAxNDAiKSkKLSAgICAJCQkgcmV0dXJuIHRydWU7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmZkZDY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuV1NETEZpbGVOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uCi17Ci0gIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwcml2YXRlIERlZmluaXRpb24gZGVmXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFdTRExGaWxlTmFtZV87Ci0KLSAgcHVibGljIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIGRlZl8gPSBudWxsOwotICAgIGRlZmF1bHRXU0RMRmlsZU5hbWVfID0gInRlbXAud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKQotICB7Ci0gICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsInVkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykKLSAgewotICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLGRlZl8pOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREZWZhdWx0RmlsZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRXU0RMRmlsZU5hbWVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgIFN0cmluZyB3c2RsVXJsID0gbnVsbDsKLSAgICBpZiAobm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgICAgewotICAgICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCllbGVtZW50OwotICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgICAgd3NkbFVybCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKGJzLCBzZXJ2aWNlRWxlbWVudC5nZXRSZWdpc3RyeUVsZW1lbnQoKS5nZXRQcm94eSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9ICgoU2VydmljZUludGVyZmFjZUVsZW1lbnQpZWxlbWVudCkuZ2V0VE1vZGVsKCk7Ci0gICAgICAgIHdzZGxVcmwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWwpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAod3NkbFVybCAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWZfID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpOwotICAgICAgICBpZiAoZGVmXyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHdzZGxQYXRobmFtZTsKLSAgICAgICAgICBpbnQgaW5kZXggPSB3c2RsVXJsLmluZGV4T2YoJy8nKTsKLSAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgICAgICB3c2RsUGF0aG5hbWUgPSB3c2RsVXJsLnN1YnN0cmluZyhpbmRleCsxLCB3c2RsVXJsLmxlbmd0aCgpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB3c2RsUGF0aG5hbWUgPSB3c2RsVXJsOwotICAgICAgICAgIGRlZmF1bHRXU0RMRmlsZU5hbWVfID0gV1NETEZpbGVOYW1lSGVscGVyLmdldFdTRExGaWxlTmFtZSh3c2RsUGF0aG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUkVUUklFVklOR19XU0RMX0RPQyIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmODIzZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uCi17Ci0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKSB7Ci0gICAgICAgIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0KLSAgICAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0KLSAgICAgICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkpOwotCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0gICAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOTUyODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uCi17Ci0gIHB1YmxpYyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICBTdHJpbmcgd3NkbFVybCA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICB7Ci0gICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCllbGVtZW50OwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICB3c2RsVXJsID0gdWRkaTRqSGVscGVyLmdldFdTREwoYnMsIHNlcnZpY2VFbGVtZW50LmdldFJlZ2lzdHJ5RWxlbWVudCgpLmdldFByb3h5KCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZUVsZW1lbnQpCi0gICAgewotICAgICAgVE1vZGVsIHRNb2RlbCA9ICgoU2VydmljZUludGVyZmFjZUVsZW1lbnQpZWxlbWVudCkuZ2V0VE1vZGVsKCk7Ci0gICAgICB3c2RsVXJsID0gdWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsKTsKLSAgICB9Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAod3NkbFVybCAhPSBudWxsKQotICAgICAgewotICAgICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVXJsKTsKLSAgICAgICAgRmlsZSB0ZW1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInRlbXAiLCIud3NkbCIpOwotICAgICAgICBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBhY3Rpb24ud3JpdGVXU0RMRGVmaW5pdGlvbihuZXcgRmlsZU91dHB1dFN0cmVhbSh0ZW1wRmlsZSksZGVmKTsKLSAgICAgICAgd3NkbFVybCA9IHRlbXBGaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGxhdW5jaFdpemFyZCh3c2RsVXJsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9SRVRSSUVWSU5HX1dTRExfRE9DIikpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTU4OTJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVURESU5vZGVBY3Rpb24gZXh0ZW5kcyBOb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0gIHB1YmxpYyBVRERJTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkKLSAgewotICAgIE5vZGUgc2VsZWN0ZWROYXZpZ2F0b3JOb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHJldHVybiBzZWxlY3RlZE5hdmlnYXRvck5vZGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlOb2RlIGdldFJlZ2lzdHJ5Tm9kZSgpCi0gIHsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSlub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKTsKLSAgICByZXR1cm4gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESVByb3BlcnRpZXNGb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ODAxZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESVByb3BlcnRpZXNGb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJTWFpbk5vZGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyXzsKLSAgcHVibGljIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBuYXZpZ2F0b3JNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkKLSAgewotICAgIHJldHVybiBuYXZpZ2F0b3JNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIHJldHVybiAoRm9ybVRvb2wpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKCkKLSAgewotICAgIHJldHVybiBnZXRSZWdpc3RyeU5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5Tm9kZSBnZXRSZWdpc3RyeU5vZGUoTm9kZSByZWdpc3RyeUNoaWxkTm9kZSkKLSAgewotICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXJfLmdldFJvb3ROb2RlKCk7Ci0gICAgcmV0dXJuIHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUocmVnaXN0cnlDaGlsZE5vZGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGMzN2QzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBVbnB1Ymxpc2hBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdpc3RyeU5vZGVfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0xvZ2dlZEluXzsKLQotICBwdWJsaWMgVW5wdWJsaXNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ2lzdHJ5Tm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBsb2cgaW4KLSAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwsIHB1Ymxpc2hVUkwpOwotICAgICAgICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJZCAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgICAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySWQpKQotICAgICAgewotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgICAgfQotCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCwgcGFzc3dvcmQpOwotICAgICAgCi0gICAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLQotICAgICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotCi0JUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICghcmVnaXN0cnlFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIGxvZyBpbiBmaXJzdAotICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgICAgCi0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgfQotCi0gICAgICBTdHJpbmcgc2VsZWN0ZWRFbGVtZW50S2V5ID0gc2VsZWN0ZWRFbGVtZW50LmdldEtleSgpOwotICAgICAgU3RyaW5nIHVucHVibGlzaFR5cGVNZXNzYWdlS2V5ID0gbnVsbDsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgU3RyaW5nIGF1dGhJbmZvID0gcmVnaXN0cnlFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCk7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCBkciA9IG51bGw7Ci0gICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KQotICAgICAgewotICAgICAgICB1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSA9ICJNU0dfSU5GT19CVVNJTkVTU19VTlBVQkxJU0hFRCI7Ci0gICAgICAgIGRyID0gcHJveHkuZGVsZXRlX2J1c2luZXNzKGF1dGhJbmZvLHNlbGVjdGVkRWxlbWVudEtleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgdW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXkgPSAiTVNHX0lORk9fU0VSVklDRV9VTlBVQkxJU0hFRCI7Ci0gICAgICAgIGRyID0gcHJveHkuZGVsZXRlX3NlcnZpY2UoYXV0aEluZm8sc2VsZWN0ZWRFbGVtZW50S2V5KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgewotICAgICAgICB1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSA9ICJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9VTlBVQkxJU0hFRCI7Ci0gICAgICAgIGRyID0gcHJveHkuZGVsZXRlX3RNb2RlbChhdXRoSW5mbyxzZWxlY3RlZEVsZW1lbnRLZXkpOwotICAgICAgfQotICAgICAgaWYgKCFkci5zdWNjZXNzKCkpCi0gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZHIudG9TdHJpbmcoKSk7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGVkRWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHVucHVibGlzaFR5cGVNZXNzYWdlS2V5LHNlbGVjdGVkRWxlbWVudC5nZXROYW1lKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgIAkJcmVnaXN0cnlFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgCXJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLCBtZXNzYWdlUXVldWUsICJFeGNlcHRpb24iLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZTQ2NmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5QdWJsaXNoZWRJdGVtc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFVwZGF0ZUFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ05vZGVfOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNBdXRoZW50aWNhdGlvbl87Ci0gIHB1YmxpYyBVcGRhdGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLGJvb2xlYW4gcmVxdWlyZXNBdXRoZW50aWNhdGlvbikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gICAgcmVxdWlyZXNBdXRoZW50aWNhdGlvbl8gPSByZXF1aXJlc0F1dGhlbnRpY2F0aW9uOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotICAKLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIFNldHVwIGZvciBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiwgcGFyc2VyKTsKLQotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gZm9ybVRvb2w7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBwcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKTsKLSAgICBmb3IgKGludCBpPTA7aTxyZW1vdmVkUHJvcGVydGllc18uc2l6ZSgpO2krKykKLSAgICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkocmVtb3ZlZFByb3BlcnRpZXNfLmVsZW1lbnRBdChpKSk7Ci0gICAgZm9ybVRvb2xQSS51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICAKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgCi0gICAgYm9vbGVhbiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uID0gIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpICYgcmVxdWlyZXNBdXRoZW50aWNhdGlvbl87Ci0gICAgCi0gICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHVzZXJJZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySWQpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHJlZnJlc2hGcm9tUmVnaXN0cnkoKTsKLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlZnJlc2hOb2RlKEJ1c2luZXNzRW50aXR5IGJlKQotICB7Ci0gICAgTm9kZSBub2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgTm9kZSBwYXJlbnROb2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBuZXdCdXNpbmVzc0VsZW1lbnQgPSBuZXcgQnVzaW5lc3NFbGVtZW50KGJlLHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCkuZ2V0TW9kZWwoKSk7Ci0gICAgY29ubmVjdEVsZW1lbnRzKHBhcmVudE5vZGUsbmV3QnVzaW5lc3NFbGVtZW50KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVmcmVzaE5vZGUoQnVzaW5lc3NTZXJ2aWNlIGJzKQotICB7Ci0gICAgTm9kZSBub2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgTm9kZSBwYXJlbnROb2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgIFNlcnZpY2VFbGVtZW50IG5ld1NlcnZpY2VFbGVtZW50ID0gbmV3IFNlcnZpY2VFbGVtZW50KGJzLHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCkuZ2V0TW9kZWwoKSk7Ci0gICAgY29ubmVjdEVsZW1lbnRzKHBhcmVudE5vZGUsbmV3U2VydmljZUVsZW1lbnQpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCByZWZyZXNoTm9kZShUTW9kZWwgdE1vZGVsKQotICB7Ci0gICAgTm9kZSBub2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgTm9kZSBwYXJlbnROb2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IG5ld1NlcnZpY2VJbnRlcmZhY2VFbGVtZW50ID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KHRNb2RlbCxyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpLmdldE1vZGVsKCkpOwotICAgIGNvbm5lY3RFbGVtZW50cyhwYXJlbnROb2RlLG5ld1NlcnZpY2VJbnRlcmZhY2VFbGVtZW50KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvbm5lY3RFbGVtZW50cyhOb2RlIHBhcmVudE5vZGUsVHJlZUVsZW1lbnQgbmV3RWxlbWVudCkKLSAgewotICAgIFRyZWVFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHJlbCA9IG51bGw7Ci0gICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBQdWJsaXNoZWRJdGVtc05vZGUpCi0gICAgICByZWwgPSBVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUzsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gUXVlcnlOb2RlCi0gICAgICByZWwgPSBVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFM7Ci0gICAgfQotICAgIHBhcmVudEVsZW1lbnQuY29ubmVjdChuZXdFbGVtZW50LHJlbCxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIE5vZGUgbmV3Tm9kZSA9IHBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlKG5ld0VsZW1lbnQpOwotICAgIGludCBuZXdOb2RlSWQgPSBuZXdOb2RlLmdldE5vZGVJZCgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcGFyZW50Tm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5ld05vZGVJZCk7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBuZXdOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpKTsKLSAgfQotICAgIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IoVmVjdG9yIHYpCi0gIHsKLSAgICBmb3IgKGludCBpPTA7aTx2LnNpemUoKTtpKyspCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpdi5lbGVtZW50QXQoaSk7Ci0gICAgICBsaXN0RWxlbWVudC5zZXRWaWV3SWQoaSk7Ci0gICAgICAvLyB0YXJnZXRWaWV3SWQgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQgbGlzdCBlbGVtZW50IHJlbWFpbnMgaW4gZWRpdCBzdGF0ZS4KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I1MWQwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVCdXNpbmVzc0FjdGlvbiBleHRlbmRzIFVwZGF0ZUFjdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gaXNVcGRhdGVfOwotICBwdWJsaWMgVXBkYXRlQnVzaW5lc3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcix0cnVlKTsKLSAgICBpc1VwZGF0ZV8gPSB0cnVlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgU3RyaW5nW10gZGlzY292ZXJ5VVJMTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuRElTQ09WRVJZVVJMX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWVVSTF9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRpc2NvdmVyeVVSTHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMKTsKLSAgICBTdHJpbmdbXSBuYW1lTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gbmFtZVZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTkFNRV9WSUVXSUQpOwotICAgIFN0cmluZ1tdIG5hbWVMYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25WaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gaWRNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5JREVOVElGSUVSX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBpZFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGlkVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFKTsKLSAgICBTdHJpbmdbXSBpZEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGlkS2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBjYXRNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gY2F0Vmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICAKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAKLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksdXVpZEtleSk7Ci0gICAgCi0gICAgCi0gICAgaWYgKGRpc2NvdmVyeVVSTE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgZGlzY292ZXJ5VVJMVmlld0lkcyAhPSBudWxsICYmIGRpc2NvdmVyeVVSTHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkRGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgICAgIFZlY3RvciBuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWVVSTCIpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IG5ldyBEaXNjb3ZlcnlVUkwoZGlzY292ZXJ5VVJMc1tpXSwiIik7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGRpc2NvdmVyeVVSTHNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBkaXNjb3ZlcnlVUkxWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRpc2NvdmVyeVVSTFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoZGlzY292ZXJ5VVJMTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGRpc2NvdmVyeVVSTFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0Rpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KGRpc2NvdmVyeVVSTCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGREaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoZGlzY292ZXJ5VVJMVmlld0lkKSk7ICAgICAKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLG5ld0Rpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yKTsgICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICAgCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAobmFtZU1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgbmFtZVZpZXdJZHMgIT0gbnVsbCAmJiBuYW1lTGFuZ3VhZ2VzICE9IG51bGwgJiYgbmFtZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkTmFtZUxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgVmVjdG9yIG5ld05hbWVMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIC8vIFVEREkncyBzYXZlIEFQSSAoQXBwZW5kaXggQyBvZiB0aGUgVURESSBWMiBQcm9ncmFtbWVycyBBUEkgU3BlY2lmaWNhdGlvbikgcmVxdWlyZXMgdGhlIGZvbGxvd2luZzoKLSAgICAgIC8vIDEpIE9ubHkgdGhlIGZpcnN0IHJvdyBjYW4gaGF2ZSBhIGJsYW5rIGxhbmd1YWdlLgotICAgICAgLy8gMikgT25seSAxIG5hbWUgcGVyIGxhbmd1YWdlLgotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIE5hbWUgdWRkaTRqTmFtZTsKLSAgICAgICAgaWYgKG5hbWVMYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxuYW1lTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChuYW1lTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWVzW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50IG5hbWVWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWVWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKG5hbWVNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAKLSAgICAgICAgaWYgKG5hbWVWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqTmFtZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkTmFtZUxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChuYW1lVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTkFNRVMiKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgZGVzY3JpcHRpb25WaWV3SWRzICE9IG51bGwgJiYgZGVzY3JpcHRpb25MYW5ndWFnZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhkZXNjcmlwdGlvbnNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50IGRlc2NyaXB0aW9uVmlld0lkID0gSW50ZWdlci5wYXJzZUludChkZXNjcmlwdGlvblZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGRlc2NyaXB0aW9uVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLSAgICAgIAotICAgIGlmIChpZE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgaWRWaWV3SWRzICE9IG51bGwgJiYgaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGRJZExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgVmVjdG9yIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGludCBpZFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoaWRWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGlkTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaWRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdJZExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KGtyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdJZExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkSWRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaWRWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdJZExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgICAgIAotICAgIGlmIChjYXRNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGNhdFZpZXdJZHMgIT0gbnVsbCAmJiBjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZENhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICAgICBWZWN0b3IgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBpbnQgY2F0Vmlld0lkID0gSW50ZWdlci5wYXJzZUludChjYXRWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGNhdE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGNhdFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KGtyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZENhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChjYXRWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsgICAgICAgICAgICAKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKHV1aWRLZXkpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZTsKLSAgICAgIGlmIChiZVZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSliZVZlY3Rvci5nZXQoMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJlID0gbnVsbDsKLSAgICAgIGlmIChiZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULGJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBpc1VwZGF0ZV8gPSBmYWxzZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICAgICBWZWN0b3IgbmFtZUxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBpZExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICBWZWN0b3IgY2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgCi0gICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgaWYgKGRpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IChEaXNjb3ZlcnlVUkwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgZGlzY292ZXJ5VVJMVmVjdG9yLmFkZEVsZW1lbnQoZGlzY292ZXJ5VVJMKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgICAKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZUxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQobmFtZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG51bGw7Ci0gICAgICBpZiAoZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudChkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG51bGw7Ci0gICAgICBpZiAoaWRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGlkTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWlkTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbnVsbDsKLSAgICAgIGlmIChjYXRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0TGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZGlzY292ZXJ5VVJMVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgIGJlLnNldERpc2NvdmVyeVVSTHMobmV3IERpc2NvdmVyeVVSTHMoZGlzY292ZXJ5VVJMVmVjdG9yKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJlLnNldERpc2NvdmVyeVVSTHMobnVsbCk7Ci0gICAgICBiZS5zZXROYW1lVmVjdG9yKG5hbWVWZWN0b3IpOwotICAgICAgYmUuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgYmUuc2V0SWRlbnRpZmllckJhZyhpZEJhZyk7Ci0gICAgICBiZS5zZXRDYXRlZ29yeUJhZyhjYXRCYWcpOwotICAgICAgCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJlVmVjdG9yLmFkZChiZSk7Ci0gICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgcmVmcmVzaE5vZGUoYmUpOwotICAgICAgaWYgKGlzVXBkYXRlXykgICAgICAKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTX1VQREFURUQiLGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTX1BVQkxJU0hFRCIsYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKXsKLSAgICAJCVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAl9CQotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAloYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZmMTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlUmVnaXN0cnlBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHVibGljIFVwZGF0ZVJlZ2lzdHJ5QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsZmFsc2UpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmFtZU1vZGlmaWVkU3RhdGUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgU3RyaW5nW10gdXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSk7Ci0gICAgU3RyaW5nW10gdXNlckRlZmluZWRDYXRlZ29yeURhdGEgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfRklMRU5BTUUpOwotICAgIAotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIAotICAgIGlmIChuYW1lTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YobmFtZU1vZGlmaWVkU3RhdGUpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgU3RyaW5nIG5ld05hbWU7Ci0gICAgICBpZiAoaXNNb2RpZmllZCkKLSAgICAgICAgbmV3TmFtZSA9IG5hbWU7Ci0gICAgICBlbHNlCi0gICAgICAgIG5ld05hbWUgPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUsbmV3TmFtZSk7Ci0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgCi0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzICE9IG51bGwgJiYgdXNlckRlZmluZWRDYXRlZ29yeURhdGEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIENhdGVnb3J5TW9kZWwgdXNlckRlZmluZWRDYXRlZ29yeSA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yeSh1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5c1tpXSk7Ci0vLyAgICAgIFRPRE86IE1vdmUgVURESVByZWZlcmVuY2VDb250ZXh0IGRvd24gdG8gb3JnLmVjbGlwc2Uud3N0LndzIAotLy8gICAgICBVRERJUHJlZmVyZW5jZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRVRERJUHJlZmVyZW5jZUNvbnRleHQoKTsgICAgICAgIAotLy8gICAgICB1c2VyRGVmaW5lZENhdGVnb3J5LnNldENvbHVtbkRlbGltaXRlcihjb250ZXh0LmdldFVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyKCkpOwotLy8gICAgICB1c2VyRGVmaW5lZENhdGVnb3J5LnNldFN0cmluZ0RlbGltaXRlcihjb250ZXh0LmdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkpOwotICAgICAgICB1c2VyRGVmaW5lZENhdGVnb3J5LnNldENvbHVtbkRlbGltaXRlcigiIyIpOwotICAgICAgICB1c2VyRGVmaW5lZENhdGVnb3J5LnNldFN0cmluZ0RlbGltaXRlcigiXCIiKTsKLSAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gdXNlckRlZmluZWRDYXRlZ29yeS5nZXREaXNwbGF5TmFtZSgpOwotICAgICAgICBpZiAodXNlckRlZmluZWRDYXRlZ29yeURhdGFbaV0gPT0gbnVsbCB8fCB1c2VyRGVmaW5lZENhdGVnb3J5RGF0YVtpXS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFIixkaXNwbGF5TmFtZSkpOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsdXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGJ5dGUgcmMgPSB1c2VyRGVmaW5lZENhdGVnb3J5LmxvYWREYXRhKG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhW2ldKSkpOwotICAgICAgICAgIHN3aXRjaCAocmMpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBDYXRlZ29yeU1vZGVsLk9QRVJBVElPTl9TVUNDRVNTRlVMOgotICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfTE9BREVEIixkaXNwbGF5TmFtZSkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcnlNb2RlbC5FUlJPUl9GSUxFOgotICAgICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICBQYXJzZUV4Y2VwdGlvbiBwZSA9IChQYXJzZUV4Y2VwdGlvbil1c2VyRGVmaW5lZENhdGVnb3J5LmdldEVycm9yRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MxID0ge1N0cmluZy52YWx1ZU9mKHBlLmdldEVycm9yT2Zmc2V0KCkpLGRpc3BsYXlOYW1lLHBlLmdldE1lc3NhZ2UoKSx1c2VyRGVmaW5lZENhdGVnb3J5LmdldENhdGVnb3J5S2V5KCl9OwotICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRV9GT1JNQVQiLGFyZ3MxKSk7Ci0gICAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsdXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXNbaV0pOwotICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBDYXRlZ29yeU1vZGVsLkVSUk9SX0NBVEVHT1JZX0tFWToKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MyID0ge2Rpc3BsYXlOYW1lLHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0RXJyb3JFeGNlcHRpb24oKS5nZXRNZXNzYWdlKCksdXNlckRlZmluZWRDYXRlZ29yeS5nZXRDYXRlZ29yeUtleSgpfTsKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVfS0VZIixhcmdzMikpOwotICAgICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzW2ldKTsgICAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHJlZ0VsZW1lbnQuc2V0TmFtZShuYW1lKTsKLSAgICByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpLnNldE5hbWUobmFtZSk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFR0lTVFJZX1VQREFURUQiLG5hbWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFiZmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnUHVibGlzaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlU2VydmljZUFjdGlvbiBleHRlbmRzIFVwZGF0ZUFjdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gaXNVcGRhdGVfOwotICBwdWJsaWMgVXBkYXRlU2VydmljZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLHRydWUpOwotICAgIGlzVXBkYXRlXyA9IHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEJ1c2luZXNzS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICBTdHJpbmcgdXVpZFNlcnZpY2VLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSk7Ci0gICAgU3RyaW5nIHdzZGxVUkxNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLldTRExfVVJMX01PRElGSUVEKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICBTdHJpbmdbXSBuYW1lTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gbmFtZVZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTkFNRV9WSUVXSUQpOwotICAgIFN0cmluZ1tdIG5hbWVMYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25WaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gY2F0TW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGNhdFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmICh1dWlkQnVzaW5lc3NLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLHV1aWRCdXNpbmVzc0tleSk7Ci0KLSAgICBpZiAodXVpZFNlcnZpY2VLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksdXVpZFNlcnZpY2VLZXkpOwotCi0gICAgaWYgKHdzZGxVUkxNb2RpZmllZFN0YXRlICE9IG51bGwgJiYgd3NkbFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2Yod3NkbFVSTE1vZGlmaWVkU3RhdGUpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgaWYgKGlzTW9kaWZpZWQpCi0gICAgICAgIHdzZGxVUkxMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh3c2RsVVJMKTsKLSAgICAgIGVsc2UKLSAgICAgICAgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwod3NkbFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLQotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIG5hbWVWaWV3SWRzICE9IG51bGwgJiYgbmFtZUxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZE5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgVmVjdG9yIG5ld05hbWVMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIC8vIFVEREkncyBzYXZlIEFQSSAoQXBwZW5kaXggQyBvZiB0aGUgVURESSBWMiBQcm9ncmFtbWVycyBBUEkgU3BlY2lmaWNhdGlvbikgcmVxdWlyZXMgdGhlIGZvbGxvd2luZzoKLSAgICAgIC8vIDEpIE9ubHkgdGhlIGZpcnN0IHJvdyBjYW4gaGF2ZSBhIGJsYW5rIGxhbmd1YWdlLgotICAgICAgLy8gMikgT25seSAxIG5hbWUgcGVyIGxhbmd1YWdlLgotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIE5hbWUgdWRkaTRqTmFtZTsKLSAgICAgICAgaWYgKG5hbWVMYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxuYW1lTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChuYW1lTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQobmFtZUxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBuYW1lVmlld0lkID0gSW50ZWdlci5wYXJzZUludChuYW1lVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihuYW1lTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgICAgIGlmIChuYW1lVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0ak5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZE5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQobmFtZVZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05BTUVTIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgZGVzY3JpcHRpb25WaWV3SWRzICE9IG51bGwgJiYgZGVzY3JpcHRpb25MYW5ndWFnZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhkZXNjcmlwdGlvbnNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGRlc2NyaXB0aW9uVmlld0lkID0gSW50ZWdlci5wYXJzZUludChkZXNjcmlwdGlvblZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGRlc2NyaXB0aW9uVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0KLSAgICBpZiAoY2F0TW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBjYXRWaWV3SWRzICE9IG51bGwgJiYgY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGRDYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICAgICBWZWN0b3IgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBpbnQgY2F0Vmlld0lkID0gSW50ZWdlci5wYXJzZUludChjYXRWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGNhdE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGNhdFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KGtyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZENhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChjYXRWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMsbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEJ1c2luZXNzRnJvbVJlZ2lzdHJ5KCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRCdXNpbmVzc0tleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwodXVpZEJ1c2luZXNzS2V5KS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgYmU7Ci0gICAgICBpZiAoYmVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpYmVWZWN0b3IuZ2V0KDApOwotICAgICAgZWxzZQotICAgICAgICBiZSA9IG51bGw7Ci0gICAgICBpZiAoYmUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX0JVU0lORVNTLGJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hGcm9tUmVnaXN0cnkoKQotICB7Ci0gICAgY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRTZXJ2aWNlS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgU2VydmljZURldGFpbCBzZXJ2aWNlRGV0YWlsID0gcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwodXVpZFNlcnZpY2VLZXkpOwotICAgICAgVmVjdG9yIGJ1c2luZXNzU2VydmljZVZlY3RvciA9IHNlcnZpY2VEZXRhaWwuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICBpZiAoYnVzaW5lc3NTZXJ2aWNlVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsYnVzaW5lc3NTZXJ2aWNlVmVjdG9yLmVsZW1lbnRBdCgwKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgaXNVcGRhdGVfID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgUmVnUHVibGlzaFRvb2wgc2V0dXBSZWdQdWJsaXNoVG9vbCgpCi0gIHsKLSAgICAvLyBQcmVwYXJlIGZvciByZS1wdWJsaXNoaW5nIGEgbm93LXN0YWxlIHNlcnZpY2Ugd2hvc2UgYnVzaW5lc3MgaGFzIGFsc28gYmVlbiBlbGltaW5hdGVkLgotICAgIFJlZ1B1Ymxpc2hUb29sIHJlZ1B1Ymxpc2hUb29sID0gcmVnTm9kZV8uZ2V0UmVnUHVibGlzaFRvb2woKTsKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOwotICAgIAotICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCxwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKSk7Ci0gICAgCi0gICAgVmVjdG9yIG5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgVmVjdG9yIGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgICBWZWN0b3IgY2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICAgCi0gICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8bmFtZUxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbmFtZUxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5hbWUpOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBudWxsOwotICAgIGlmIChkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgewotICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudChkZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlZ1B1Ymxpc2hUb29sLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgIAotICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG51bGw7Ci0gICAgaWYgKGNhdExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVnUHVibGlzaFRvb2wucmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgIAotICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxuYW1lVmVjdG9yKTsKLSAgICBpZiAoZGVzY3JpcHRpb25WZWN0b3IgIT0gbnVsbCkKLSAgICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIGlmIChjYXRCYWcgIT0gbnVsbCkKLSAgICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgcmV0dXJuIHJlZ1B1Ymxpc2hUb29sOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOyAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfQlVTSU5FU1MpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIFN0cmluZyB1dWlkU2VydmljZUtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSk7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICBWZWN0b3IgbmFtZUxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgY2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZUxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQobmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG51bGw7Ci0gICAgICBpZiAoZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudChkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbnVsbDsKLSAgICAgIGlmIChjYXRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0TGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgCXJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgLy8gTm90ZTogVGhlIEpTUCB3aWxsIHByZXZlbnQgdGhpcyByb3V0aW5lIGZyb20gZXhlY3V0aW5nIGlmIGJlIGlzIG51bGwuCi0gICAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgICAgRGVmaW5pdGlvbiBkZWYgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAKLSAgICAgIC8vIFB1Ymxpc2gvdXBkYXRlIHRoZSBzZXJ2aWNlIGludGVyZmFjZXMgZmlyc3QuCi0gICAgICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbiByZWdQdWJsaXNoU0lBY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgaW50IGN1cnJlbnROb2RlSWQgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXROb2RlSWQoKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKTsKLQotICAgICAgSGFzaHRhYmxlIHRNb2RlbHNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIFRNb2RlbFtdIHRNb2RlbHMgPSBudWxsOwotICAgICAgaWYgKHVkZGk0akhlbHBlci5pc01vbm9saXRoaWNXU0RMKGRlZikpCi0gICAgICB7Ci0gICAgICAJdE1vZGVscyA9IG5ldyBUTW9kZWxbMV07Ci0gICAgICAJdE1vZGVsc1swXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwod3NkbFVSTCwgZGVmKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgIAlTdHJpbmdbXSBpbXBvcnRzID0gdWRkaTRqSGVscGVyLmdldEltcG9ydHMoZGVmLCB3c2RsVVJMKTsKLSAgICAgIAl0TW9kZWxzID0gbmV3IFRNb2RlbFtpbXBvcnRzLmxlbmd0aF07Ci0gICAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCB0TW9kZWxzLmxlbmd0aDsgaSsrKQotICAgICAgCSAgdE1vZGVsc1tpXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwoaW1wb3J0c1tpXSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmICh0TW9kZWxzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAJZm9yIChpbnQgaT0wO2k8dE1vZGVscy5sZW5ndGg7aSsrKQotICAgICAgCXsKLSAgICAgIAkgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSByZWdQdWJsaXNoU0lBY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHVkZGk0akhlbHBlci5nZXRXU0RMKHRNb2RlbHNbaV0pLCB0TW9kZWxzW2ldKTsKLSAgICAgIAkgIGlmIChpbnB1dHNWYWxpZCkKLSAgICAgIAkgIHsKLSAgICAgIAkgICAgcmVnUHVibGlzaFNJQWN0aW9uLnJ1bigpOwotICAgICAgCSAgICBPYmplY3Qgc2F2ZWRUTW9kZWwgPSByZWdQdWJsaXNoU0lBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwpOwotICAgICAgCSAgICBpZiAoc2F2ZWRUTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgIAkgICAgICB0TW9kZWxzVGFibGUucHV0KCgoVE1vZGVsKXNhdmVkVE1vZGVsKS5nZXROYW1lU3RyaW5nKCksIHNhdmVkVE1vZGVsKTsKLSAgICAgIAkgICAgfQotICAgICAgICAgICAgLy8gUmVzZWxlY3QgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgIAkgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQoY3VycmVudE5vZGVJZCk7Ci0gICAgICAgICAgfQotICAgICAgCX0KLSAgICAgIH0KLSAgICAgIAotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJ1c1NlcnZpY2UgPSB1ZGRpNGpIZWxwZXIubmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVUkwsIGRlZiwgdE1vZGVsc1RhYmxlKTsKLSAgICAgIGlmIChpc1VwZGF0ZV8pCi0gICAgICAgIGJ1c1NlcnZpY2Uuc2V0U2VydmljZUtleSh1dWlkU2VydmljZUtleSk7Ci0gICAgICBidXNTZXJ2aWNlLnNldEJ1c2luZXNzS2V5KGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgYnVzU2VydmljZS5zZXROYW1lVmVjdG9yKG5hbWVWZWN0b3IpOwotICAgICAgYnVzU2VydmljZS5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICBidXNTZXJ2aWNlLnNldENhdGVnb3J5QmFnKGNhdEJhZyk7Ci0gICAgICByZWdFbGVtZW50LmhhbmRsZVByZUludm9jYXRpb24oYnVzU2VydmljZSk7ICAgICAgCi0gICAgICBWZWN0b3IgYnNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBic1ZlY3Rvci5hZGQoYnVzU2VydmljZSk7Ci0gICAgICBidXNTZXJ2aWNlID0gKEJ1c2luZXNzU2VydmljZSlwcm94eS5zYXZlX3NlcnZpY2UocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBic1ZlY3RvcikuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCkuZ2V0KDApOwotICAgICAgcmVmcmVzaE5vZGUoYnVzU2VydmljZSk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKQotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9VUERBVEVEIixidXNTZXJ2aWNlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfUFVCTElTSEVEIixidXNTZXJ2aWNlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiV1NETEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODQ1NmIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbiBleHRlbmRzIFVwZGF0ZUFjdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gaXNVcGRhdGVfOwotICBwdWJsaWMgVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLHRydWUpOwotICAgIGlzVXBkYXRlXyA9IHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1dWlkS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICBTdHJpbmcgd3NkbFVSTE1vZGlmaWVkU3RhdGUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuV1NETF9VUkxfTU9ESUZJRUQpOwotICAgIFN0cmluZyB3c2RsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZU1vZGlmaWVkU3RhdGUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25WaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gaWRNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5JREVOVElGSUVSX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBpZFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGlkVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFKTsKLSAgICBTdHJpbmdbXSBpZEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGlkS2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBjYXRNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gY2F0Vmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICAKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAKLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdXVpZEtleSk7Ci0gICAgCi0gICAgaWYgKHdzZGxVUkxNb2RpZmllZFN0YXRlICE9IG51bGwgJiYgd3NkbFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOyAgICAgIAotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKHdzZGxVUkxNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIGlmIChpc01vZGlmaWVkKQotICAgICAgICB3c2RsVVJMTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQod3NkbFVSTCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMLHdzZGxVUkxMaXN0RWxlbWVudCk7Ci0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTCh3c2RsVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgCi0gICAgaWYgKG5hbWVNb2RpZmllZFN0YXRlICE9IG51bGwgJiYgbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IG5hbWVMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YobmFtZU1vZGlmaWVkU3RhdGUpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgaWYgKGlzTW9kaWZpZWQpCi0gICAgICAgIG5hbWVMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChuYW1lKTsKLSAgICAgIGVsc2UKLSAgICAgICAgbmFtZSA9IChTdHJpbmcpbmFtZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lTGlzdEVsZW1lbnQpOwotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uVmlld0lkcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcoZGVzY3JpcHRpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBkZXNjcmlwdGlvblZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoZGVzY3JpcHRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgCi0gICAgICAgIGlmIChkZXNjcmlwdGlvblZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChkZXNjcmlwdGlvblZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOyAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICAKLSAgICBpZiAoaWRNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGlkVmlld0lkcyAhPSBudWxsICYmIGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkSWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIFZlY3RvciBuZXdJZExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpbnQgaWRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGlkVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihpZE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlkVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3SWRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3SWRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZElkTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGlkVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3SWRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyxuZXdJZExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICAgICAKLSAgICBpZiAoY2F0TW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBjYXRWaWV3SWRzICE9IG51bGwgJiYgY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGRDYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgICAgVmVjdG9yIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGNhdFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoY2F0Vmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihjYXRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChjYXRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRDYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoY2F0Vmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyxuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7ICAgICAgICAgICAgCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpCi0gIHsKLSAgICBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXVpZEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh1dWlkS2V5KTsKLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICBpZiAodE1vZGVsVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsdE1vZGVsVmVjdG9yLmVsZW1lbnRBdCgwKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgaXNVcGRhdGVfID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXVpZEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpOyAgICAgIAotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgICBMaXN0RWxlbWVudCBuYW1lTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBpZExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICAgICBWZWN0b3IgY2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgICAgCi0gICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgCi0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpbmFtZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgCi0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBudWxsOwotICAgICAgaWYgKGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBudWxsOwotICAgICAgaWYgKGlkTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxpZExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpZExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG51bGw7Ci0gICAgICBpZiAoY2F0TGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgVE1vZGVsIHRNb2RlbCA9IChuZXcgVWRkaTRqSGVscGVyKCkpLm5ld1RNb2RlbCh3c2RsVVJMKTsKLSAgICAgIGlmIChpc1VwZGF0ZV8pCi0gICAgICAgIHRNb2RlbC5zZXRUTW9kZWxLZXkodXVpZEtleSk7Ci0gICAgICB0TW9kZWwuc2V0TmFtZShuYW1lKTsgICAgICAKLSAgICAgIHRNb2RlbC5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICB0TW9kZWwuc2V0SWRlbnRpZmllckJhZyhpZEJhZyk7Ci0gICAgICB0TW9kZWwuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICAgIAotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgdE1vZGVsVmVjdG9yLmFkZCh0TW9kZWwpOwotICAgICAgdE1vZGVsID0gKFRNb2RlbClwcm94eS5zYXZlX3RNb2RlbChyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHRNb2RlbFZlY3RvcikuZ2V0VE1vZGVsVmVjdG9yKCkuZ2V0KDApOwotICAgICAgcmVmcmVzaE5vZGUodE1vZGVsKTsKLSAgICAgIGlmIChpc1VwZGF0ZV8pICAgICAgCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9VUERBVEVEIix0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9QVUJMSVNIRUQiLHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiV1NETEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKXsKLSAgICAJCVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAl9Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJQWN0aW9uSW5wdXRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElBY3Rpb25JbnB1dHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ3YjJiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElBY3Rpb25JbnB1dHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgVURESUFjdGlvbklucHV0cwotewotICAvLyBPcGVuUmVnaXN0cnlBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVHSVNUUllfTkFNRSA9ICJyZWdpc3RyeU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlFVSVJZX1VSTCA9ICJpbnF1aXJ5VVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSF9VUkwgPSAicHVibGlzaFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFR0lTVFJBVElPTl9VUkwgPSAicmVnaXN0cmF0aW9uVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMgPSAiY2hlY2tVc2VyRGVmaW5lZENhdGVnb3JpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVRERJX1VTRVJOQU1FID0gInVkZGlVc2VybmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVERElfUEFTU1dPUkQgPSAidWRkaVBhc3N3b3JkIjsKLQotICAvLyBGaXhlZCBhbmQgdXNlci1kZWZpbmVkIGNhdGVnb3JpZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUklFU19ESVJFQ1RPUlkgPSAiY2F0ZWdvcmllc0RpcmVjdG9yeSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX1RNT0RFTF9LRVkgPSAiY2F0ZWdvcnlUTW9kZWxLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9GSUxFTkFNRSA9ICJjYXRlZ29yeUZpbGVOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMgPSAidXNlckRlZmluZWRDYXRlZ29yaWVzIjsKLQotICAvLyBEaXNjb3ZlcnkgVVJMIHVzZSB0eXBlCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWV9VUkxfVFlQRSA9ICJidXNpbmVzc0VudGl0eSI7Ci0KLSAgLy8gUmVzdWx0cyAoTk9ERUlEKQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UgPSAibm9kZUlkX1NlcnZpY2VJbnRlcmZhY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFSURfU0VSVklDRSA9ICJub2RlSWRfU2VydmljZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVJRF9CVVNJTkVTUyA9ICJub2RlSWRfQnVzaW5lc3MiOwotCi0gIC8vIFJlZ0ZpbmQuLkFjdGlvbnMvUmVnUHVibGlzaC4uQWN0aW9ucwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSA9ICJvdmVycmlkZUFkZFF1ZXJ5Tm9kZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX05BTUUgPSAicXVlcnlOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSVRFTSA9ICJxdWVyeUl0ZW0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9JVEVNX1FVRVJJRVMgPSAtMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfSVRFTV9CVVNJTkVTU0VTID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfSVRFTV9TRVJWSUNFUyA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfU1RZTEVfU0lNUExFID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfU1RZTEVfQURWQU5DRUQgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9TVFlMRV9VVUlEID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQgPSAiYWR2YW5jZWRPd25lZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMID0gImFkdmFuY2VkUHVibGlzaFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCA9ICJhZHZhbmNlZFVzZXJJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEID0gImFkdmFuY2VkUGFzc3dvcmQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFID0gImFkdmFuY2VkTmFtZUxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSA9ICJhZHZhbmNlZE5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUgPSAiYWR2YW5jZWRJZGVudGlmaWVyVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUgPSAiYWR2YW5jZWRJZGVudGlmaWVyS2V5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFID0gImFkdmFuY2VkSWRlbnRpZmllcktleVZhbHVlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSA9ICJhZHZhbmNlZENhdGVnb3J5VHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FID0gImFkdmFuY2VkQ2F0ZWdvcnlLZXlOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFID0gImFkdmFuY2VkQ2F0ZWdvcnlLZXlWYWx1ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RJU0NPVkVSWVVSTCA9ICJhZHZhbmNlZERpc2NvdmVyeVVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIgPSAiYWR2YW5jZWRGaW5kUXVhbGlmaWVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9OQU1FID0gImFkdmFuY2VkU29ydEJ5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfREFURSA9ICJhZHZhbmNlZFNvcnRCeURhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCA9ICJhZHZhbmNlZE1heFNlYXJjaFNldCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX01BWF9TRUFSQ0hfU0VUID0gMTAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyA9ICJhZHZhbmNlZE1heFJlc3VsdHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9NQVhfUkVTVUxUUyA9IDEwOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1NUWUxFX0JVU0lORVNTRVMgPSAicXVlcnlTdHlsZUJ1c2luZXNzZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSA9ICJzaW1wbGVCdXNpbmVzc05hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCA9ICJhZHZhbmNlZEJ1c2luZXNzT3duZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyA9ICJhZHZhbmNlZEJ1c2luZXNzTmFtZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyA9ICJhZHZhbmNlZEJ1c2luZXNzSWRlbnRpZmllcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTID0gImFkdmFuY2VkQnVzaW5lc3NDYXRlZ29yaWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyA9ICJhZHZhbmNlZEJ1c2luZXNzRGlzY292ZXJ5VVJMcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyA9ICJhZHZhbmNlZEJ1c2luZXNzU2VydmljZUludGVyZmFjZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSA9ICJhZHZhbmNlZEJ1c2luZXNzU2VydmljZUludGVyZmFjZXNDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHID0gImFkdmFuY2VkQnVzaW5lc3NUTW9kZWxCYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19GSU5EUVVBTElGSUVSUyA9ICJhZHZhbmNlZEJ1c2luZXNzRmluZFF1YWxpZmllcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCA9ICJhZHZhbmNlZEJ1c2luZXNzTWF4U2VhcmNoU2V0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMgPSAiYWR2YW5jZWRCdXNpbmVzc01heFJlc3VsdHMiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1NUWUxFX1NFUlZJQ0VTID0gInF1ZXJ5U3R5bGVTZXJ2aWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUgPSAic2ltcGxlU2VydmljZU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVEID0gImFkdmFuY2VkU2VydmljZU93bmVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyA9ICJhZHZhbmNlZFNlcnZpY2VCdXNpbmVzcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSA9ICJhZHZhbmNlZFNlcnZpY2VCdXNpbmVzc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIgPSAiYWR2YW5jZWRTZXJ2aWNlU2VydmljZVByb3ZpZGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyA9ICJhZHZhbmNlZFNlcnZpY2VOYW1lcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyA9ICJhZHZhbmNlZFNlcnZpY2VDYXRlZ29yaWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMgPSAiYWR2YW5jZWRTZXJ2aWNlU2VydmljZUludGVyZmFjZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZID0gImFkdmFuY2VkU2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMID0gImFkdmFuY2VkU2VydmljZVRNb2RlbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMQkFHID0gImFkdmFuY2VkU2VydmljZVRNb2RlbEJhZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfRklORFFVQUxJRklFUlMgPSAiYWR2YW5jZWRTZXJ2aWNlRmluZFF1YWxpZmllcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VUID0gImFkdmFuY2VkU2VydmljZU1heFNlYXJjaFNldCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMgPSAiYWR2YW5jZWRTZXJ2aWNlTWF4UmVzdWx0cyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTID0gInF1ZXJ5U3R5bGVTZXJ2aWNlSW50ZXJmYWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FID0gInNpbXBsZVNlcnZpY2VJbnRlcmZhY2VOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UgPSAiYWR2YW5jZWRVc2VTZXJ2aWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VTZXJ2aWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZVNlcnZpY2VDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VCdXNpbmVzc1NlcnZpY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9PV05FRCA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VPd25lZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZUlkZW50aWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VDYXRlZ29yaWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlRmluZFF1YWxpZmllcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VNYXhTZWFyY2hTZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUyA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VNYXhSZXN1bHRzIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUgPSAiYWR2YW5jZWRSZWdpc3RyeU5hbWUiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1VVSURfS0VZID0gInV1aWRLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSA9ICJ1dWlkQnVzaW5lc3NLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZID0gInV1aWRTZXJ2aWNlS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkgPSAidXVpZFNlcnZpY2VJbnRlcmZhY2VLZXkiOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCA9ICJzYXZlZFRNb2RlbCI7Ci0KLSAgLy8gU3ViIFF1ZXJpZXM6Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJJRVNfUFJPUEVSVElFUyA9ICJzdWJRdWVyaWVzUHJvcGVydGllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX0tFWSA9ICJzdWJRdWVyeUtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV19TVUJRVUVSWV9JTklUSUFURUQgPSAibmV3U3ViUXVlcnlJbml0aWF0ZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORVdfU1VCUVVFUllfUVVFUllfSVRFTSA9ICJuZXdTdWJRdWVyeVF1ZXJ5SXRlbSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX05PREVJRFMgPSAic2VsZWN0ZWROb2RlSWRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUllfTElTVF9LRVkgPSAic3ViUXVlcnlMaXN0S2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUllfTElTVF9JVEVNSUQgPSAic3ViUXVlcnlMaXN0SXRlbUlkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0hPV19SRVNVTFRTX1RBUkdFVCA9ICJzaG93UmVzdWx0c1RhcmdldCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX0dFVCA9ICJzdWJRdWVyeUdldCI7Ci0KLSAgLy8gUmVnUHVibGlzaC4uQWN0aW9ucyAoc29tZSBjb25zdGFudHMgZnJvbSB0aGUgUmVnRmluZC4uLkFjdGlvbnMgd2lsbCBiZSByZXVzZWQuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTiA9ICJzaW1wbGVCdXNpbmVzc0Rlc2NyaXB0aW9uIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSA9ICJhZHZhbmNlZERlc2NyaXB0aW9uTGFuZ3VhZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiA9ICJhZHZhbmNlZERlc2NyaXB0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TID0gImFkdmFuY2VkQnVzaW5lc3NEZXNjcmlwdGlvbnMiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1dTRExfVVJMID0gIndzZGxVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwgPSAic2ltcGxlU2VydmljZUludGVyZmFjZVdTRExVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04gPSAic2ltcGxlU2VydmljZUludGVyZmFjZURlc2NyaXB0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VEZXNjcmlwdGlvbnMiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTID0gInNpbXBsZVNlcnZpY2VCdXNpbmVzcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFkgPSAic2ltcGxlU2VydmljZUJ1c2luZXNzQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIgPSAic2ltcGxlU2VydmljZVNlcnZpY2VQcm92aWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMID0gInNpbXBsZVNlcnZpY2VXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04gPSAic2ltcGxlU2VydmljZURlc2NyaXB0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCA9ICJhZHZhbmNlZFNlcnZpY2VXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMgPSAiYWR2YW5jZWRTZXJ2aWNlRGVzY3JpcHRpb25zIjsKLQotICAvLyBXU0RMIEJyb3dzZXIKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVCA9ICJwcm9qZWN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9UWVBFID0gIndzZGxUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9UWVBFX1NFUlZJQ0UgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMID0gIndlYlByb2plY3RXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfRkFWT1JJVEVfV1NETF9VUkwgPSAiZmF2b3JpdGVXU0RMVVJMIjsKLQotICAvLyBEZXRhaWxzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBVEVTVF9PQkpFQ1QgPSAibGF0ZXN0T2JqZWN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTQ09WRVJZVVJMX01PRElGSUVEID0gImRpc2NvdmVyeVVSTE1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTQ09WRVJZVVJMX1ZJRVdJRCA9ICJkaXNjb3ZlcnlVUkxWaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX01PRElGSUVEID0gIm5hbWVNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfVklFV0lEID0gImJ1c2luZXNzVmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JJUFRJT05fTU9ESUZJRUQgPSAiZGVzY3JpcHRpb25Nb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX1ZJRVdJRCA9ICJkZXNjcmlwdGlvblZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USUZJRVJfTU9ESUZJRUQgPSAiaWRlbnRpZmllck1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9WSUVXSUQgPSAiaWRlbnRpZmllclZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX01PRElGSUVEID0gImNhdGVnb3J5TW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9WSUVXSUQgPSAiY2F0ZWdvcnlWaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1VSTF9NT0RJRklFRCA9ICJ3c2RsVVJMTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIX0FDVElPTiA9ICJwdWJsaXNoQWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFURVNUX0JVU0lORVNTID0gImxhdGVzdEJ1c2luZXNzIjsKLQotICAvLyBSZWZyZXNoIGFjdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZSRVNIX05PREUgPSAicmVmcmVzaE5vZGUiOwotCi0gIC8vIE1hbmFnZSBQdWJsaXNoZXJBc3NlcnRpb25zCi0gIC8vICJUbyIgbWVhbnMgZnJvbSBhbm90aGVyIGJ1c2luZXNzIHRvIG15IG93bmluZyBidXNpbmVzcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVJFQ1RJT05fVE8gPSAwOwotICAvLyAiRnJvbSIgbWVhbnMgZnJvbSBteSBvd25pbmcgYnVzaW5lc3MgdG8gYW5vdGhlciBidXNpbmVzcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVJFQ1RJT05fRlJPTSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCA9ICJwdWJsaXNoZXJBc3NlcnRpb25zVmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEID0gInB1Ymxpc2hlckFzc2VydGlvbnNTZWxlY3RlZEJ1c0lEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfRElSRUNUSU9OID0gInB1Ymxpc2hlckFzc2VydGlvbnNEaXJlY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMgPSAicXVlcnlJbnB1dEFkZFB1Ymxpc2hlckFzc2VydGlvbnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlNfQ09QWSA9ICJxdWVyeUlucHV0QWRkUHVibGlzaGVyQXNzZXJ0aW9uc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9FWElTVElOR19QVUJMSVNIRVJfQVNTRVJUSU9OUyA9ICJxdWVyeUlucHV0RXhpc3RpbmdQdWJsaXNoZXJBc3NlcnRpb25zIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSA9ICJwdWJsaXNoZXJBc3NlcnRpb25zVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfUEFSRU5UX0NISUxEID0gInBhcmVudC1jaGlsZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfUEVFUl9UT19QRUVSID0gInBlZXItcGVlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfSURFTlRJVFkgPSAiaWRlbnRpdHkiOwotCi0gIC8vIE1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMgPSAicmVmZXJlbmNlZFNlcnZpY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0VSVklDRVMgPSAic2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04gPSAibWFuYWdlZFJlZmVyZW5jZWRTZXJ2aWNlc09wZXJhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9BREQgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fUkVNT1ZFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSA9ICJyZWZlcmVuY2VkU2VydmljZVNlbGVjdFN0YXRlIjsKLSAgCi0gIC8vIFJlc2l6ZVVERElGcmFtZUFjdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQgPSAiZnJhbWVzZXRDb2xzUGVyc3BlY3RpdmVDb250ZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiA9ICJmcmFtZXNldFJvd3NBY3Rpb25zQ29udGFpbmVyIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUZyYW1lTmFtZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUZyYW1lTmFtZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNkMGI0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElGcmFtZU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBVRERJRnJhbWVOYW1lcwotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQVZJR0FUT1JfQ09OVEFJTkVSID0gInVkZGlfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9UT09MQkFSID0gInVkZGlfbmF2aWdhdG9yX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQVZJR0FUT1JfQ09OVEVOVCA9ICJ1ZGRpX25hdmlnYXRvcl9jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQUNUSU9OU19DT05UQUlORVIgPSAidWRkaV9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQ09OVEFJTkVSID0gInVkZGlfcHJvcGVydGllc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1RPT0xCQVIgPSAidWRkaV9wcm9wZXJ0aWVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0NPTlRFTlQgPSAidWRkaV9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfQ09OVEFJTkVSID0gInVkZGlfc3RhdHVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVRVU19UT09MQkFSID0gInVkZGlfc3RhdHVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfQ09OVEVOVCA9ICJ1ZGRpX3N0YXR1c19jb250ZW50IjsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBDQVRFR09SSUVTX1dPUktBUkVBID0gImNhdGVnb3JpZXNfd29ya2FyZWEiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBDQVRFR09SSUVTX1RPT0xCQVIgPSAiY2F0ZWdvcmllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FURUdPUklFU19DT05URU5UID0gImNhdGVnb3JpZXNfY29udGVudCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElNb2RlbENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJTW9kZWxDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUzYzlhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElNb2RlbENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgVURESU1vZGVsQ29uc3RhbnRzCi17Ci0gIC8vIFJlZ2lzdHJpZXMgdW5kZXIgVURESU1haW4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9SRUdJU1RSSUVTID0gInJlZ2lzdHJpZXMiOwotCi0gIC8vIEV4ZWN1dGVkIFF1ZXJpZXMgZm9sZGVyIHVuZGVyIGEgcmVnaXN0cnkuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9RVUVSSUVTX1BBUkVOVCA9ICJxdWVyaWVzUGFyZW50IjsKLQotICAvLyBQdWJsaXNoZWQgQnVzaW5lc3NlcyBmb2xkZXIgdW5kZXIgYSByZWdpc3RyeS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1BVQkxJU0hFRF9CVVNJTkVTU0VTX1BBUkVOVCA9ICJwdWJsaXNoZWRCdXNpbmVzc2VzUGFyZW50IjsKLQotICAvLyBQdWJsaXNoZWQgU2VydmljZXMgZm9sZGVyIHVuZGVyIGEgcmVnaXN0cnkuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QVUJMSVNIRURfU0VSVklDRVNfUEFSRU5UID0gInB1Ymxpc2hlZFNlcnZpY2VzUGFyZW50IjsKLQotICAvLyBQdWJsaXNoZWQgU2VydmljZSBpbnRlcmZhY2VzIGZvbGRlciB1bmRlciBhIHJlZ2lzdHJ5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQgPSAicHVibGlzaGVkU2VydmljZUludGVyZmFjZXNQYXJlbnQiOwotCi0gIC8vIFF1ZXJpZXMgdW5kZXIgdGhlIFF1ZXJpZXMgZm9sZGVyLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUVVFUklFUyA9ICJxdWVyaWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVElBTF9SRVNVTFRTID0gImluaXRpYWxSZXN1bHRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfVFlQRSA9ICJxdWVyeVR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQgPSAic3ViUXVlcnlUcmFuc2ZlclRhcmdldCI7Ci0KLSAgLy8gT2JqZWN0cyB1bmRlciBhIFF1ZXJ5IG5vZGUuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9RVUVSWV9SRVNVTFRTID0gInF1ZXJ5UmVzdWx0cyI7Ci0KLSAgLy8gQ2F0ZWdvcmllcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfU1VCQ0FURUdPUklFUyA9ICJzdWJDYXRlZ29yaWVzIjsKLQotICAvLyBQdWJsaXNoZWQgaXRlbXMgaW5zaWRlIHRoZSBQdWJsaXNoZWQgaXRlbXMgZm9sZGVyLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUFVCTElTSEVEX0lURU1TID0gInB1Ymxpc2hlZEl0ZW1zIjsKLQotICAvLyBCdXNpbmVzc2VzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElTX0JVU0lORVNTX09XTkVEID0gImlzQnVzaW5lc3NPd25lZCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0Fic3RyYWN0VURESUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQWJzdHJhY3RVRERJRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2I1ZDAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQWJzdHJhY3RVRERJRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VURESUVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICBwdWJsaWMgQWJzdHJhY3RVRERJRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHJlZUVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UGFyZW50RWxlbWVudCh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUcmVlRWxlbWVudCBnZXRQYXJlbnRFbGVtZW50KFRyZWVFbGVtZW50IGNoaWxkKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGNoaWxkLmdldEVsZW1lbnRzKE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgaWYgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gKFRyZWVFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeUVsZW1lbnQgZ2V0UmVnaXN0cnlFbGVtZW50KCkKLSAgewotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVnaXN0cnlFbGVtZW50KQotICAgICAgcmV0dXJuIChSZWdpc3RyeUVsZW1lbnQpdGhpczsKLSAgICBlbHNlCi0gICAgewotICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gdGhpczsKLSAgICAgIFRyZWVFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBnZXRQYXJlbnRFbGVtZW50KGNoaWxkRWxlbWVudCk7Ci0gICAgICB3aGlsZSAocGFyZW50RWxlbWVudCAhPSBudWxsICYmIHBhcmVudEVsZW1lbnQgIT0gY2hpbGRFbGVtZW50KQotICAgICAgewotICAgICAgICBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFJlZ2lzdHJ5RWxlbWVudCkKLSAgICAgICAgICByZXR1cm4gKFJlZ2lzdHJ5RWxlbWVudClwYXJlbnRFbGVtZW50OwotICAgICAgICBjaGlsZEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50OwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gZ2V0UGFyZW50RWxlbWVudChjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0J1c2luZXNzRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9CdXNpbmVzc0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFlNjEzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0J1c2luZXNzRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotCi1wdWJsaWMgY2xhc3MgQnVzaW5lc3NFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIEJ1c2luZXNzRW50aXR5IGJlXzsKLSAgcHJpdmF0ZSBMaXN0TWFuYWdlciBwdWJsaXNoZXJBc3NlcnRpb25zXzsKLSAgCi0gIHB1YmxpYyBCdXNpbmVzc0VsZW1lbnQoQnVzaW5lc3NFbnRpdHkgYmUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpLG1vZGVsKTsKLSAgICBiZV8gPSBiZTsKLSAgICBzZXRLZXkoYmVfLmdldEJ1c2luZXNzS2V5KCkpOwotICAgIHB1Ymxpc2hlckFzc2VydGlvbnNfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBCdXNpbmVzc0VudGl0eSBnZXRCdXNpbmVzc0VudGl0eSgpCi0gIHsKLSAgICByZXR1cm4gYmVfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRCdXNpbmVzc0VudGl0eShCdXNpbmVzc0VudGl0eSBiZSkKLSAgewotICAgIGJlXyA9IGJlOwotICAgIHNldEtleShiZV8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdE1hbmFnZXIgZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gcHVibGlzaGVyQXNzZXJ0aW9uc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoZXJBc3NlcnRpb25zKExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyKQotICB7Ci0gICAgcHVibGlzaGVyQXNzZXJ0aW9uc18gPSBsaXN0TWFuYWdlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9DYXRlZ29yeUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwN2YzYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9DYXRlZ29yeUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIENhdGVnb3J5RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBLZXllZFJlZmVyZW5jZSBjYXRlZ29yeV87Ci0KLSAgcHVibGljIENhdGVnb3J5RWxlbWVudChTdHJpbmcgbmFtZSxLZXllZFJlZmVyZW5jZSBjYXRlZ29yeSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIGNhdGVnb3J5XyA9IGNhdGVnb3J5OwotICAgIHNhdmVDYXRlZ29yeVByb3BlcnRpZXMoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzYXZlQ2F0ZWdvcnlQcm9wZXJ0aWVzKCkKLSAgewotICAgIGlmIChjYXRlZ29yeV8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5TmFtZSA9IGNhdGVnb3J5Xy5nZXRLZXlOYW1lKCk7Ci0gICAgICBpZiAoa2V5TmFtZSAhPSBudWxsKQotICAgICAgICBzZXROYW1lKGtleU5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBLZXllZFJlZmVyZW5jZSBnZXRDYXRlZ29yeSgpCi0gIHsKLSAgICByZXR1cm4gY2F0ZWdvcnlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROYW1lRm9yVHJlZSgpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgbmFtZUZvclRyZWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJbIik7Ci0gICAgbmFtZUZvclRyZWUuYXBwZW5kKGNhdGVnb3J5Xy5nZXRLZXlWYWx1ZSgpKS5hcHBlbmQoIl0gIikuYXBwZW5kKGNhdGVnb3J5Xy5nZXRLZXlOYW1lKCkpOwotICAgIHJldHVybiBuYW1lRm9yVHJlZS50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgdXBkYXRlQ2F0ZWdvcnkoU3RyaW5nIGtleU5hbWUsU3RyaW5nIGtleVZhbHVlLFN0cmluZyB0TW9kZWxLZXkpCi0gIHsKLSAgICBjYXRlZ29yeV8uc2V0S2V5TmFtZShrZXlOYW1lKTsKLSAgICBjYXRlZ29yeV8uc2V0S2V5VmFsdWUoa2V5VmFsdWUpOwotICAgIGNhdGVnb3J5Xy5zZXRUTW9kZWxLZXkodE1vZGVsS2V5KTsKLSAgICBzYXZlQ2F0ZWdvcnlQcm9wZXJ0aWVzKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlNb2RlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9DYXRlZ29yeU1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOTY2NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9DYXRlZ29yeU1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgQ2F0ZWdvcnlNb2RlbCBleHRlbmRzIEJhc2ljTW9kZWwKLXsKLSAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHREYXRhRmlsZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGNhdGVnb3J5RWxlbWVudHNfOwotICBwcml2YXRlIFN0cmluZyBjb2x1bW5EZWxpbWl0ZXJfOwotICBwcml2YXRlIFN0cmluZyBzdHJpbmdEZWxpbWl0ZXJfOwotICBwcml2YXRlIFN0cmluZyBjYXRlZ29yeUtleV87Ci0gIHByaXZhdGUgYm9vbGVhbiBjaGVja2VkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZGlzcGxheU5hbWVfOwotICBwcml2YXRlIFN0cmluZyB0TW9kZWxLZXlfOwotICBwcml2YXRlIFRocm93YWJsZSBlcnJvckV4Y2VwdGlvbl87Ci0gIAotICAvLyBSZXR1cm4gY29kZXMgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyBjYXRlZ29yeSBkYXRhLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgT1BFUkFUSU9OX1NVQ0NFU1NGVUwgPSAweDAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfRklMRSA9IDB4MDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBFUlJPUl9TRUNVUklUWSA9IDB4MDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBFUlJPUl9FTkNPRElORyA9IDB4MDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBFUlJPUl9JTyA9IDB4MDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBFUlJPUl9DQVRFR09SWV9LRVkgPSAweDA1OwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVmYXVsdENvbHVtbkRlbGltaXRlcl8gPSAiIyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGRlZmF1bHRTdHJpbmdEZWxpbWl0ZXJfID0gIlwiIjsKLSAgCi0gIHB1YmxpYyBDYXRlZ29yeU1vZGVsKCkKLSAgewotICAgIHN1cGVyKCJjYXRlZ29yaWVzIik7Ci0gICAgYXBwbGljYXRpb25fID0gbnVsbDsKLQlkZWZhdWx0RGF0YUZpbGVfID0gbnVsbDsKLSAgICBjb2x1bW5EZWxpbWl0ZXJfID0gZGVmYXVsdENvbHVtbkRlbGltaXRlcl87Ci0gICAgc3RyaW5nRGVsaW1pdGVyXyA9IGRlZmF1bHRTdHJpbmdEZWxpbWl0ZXJfOwotICAgIGNhdGVnb3J5RWxlbWVudHNfID0gbnVsbDsKLSAgICBjYXRlZ29yeUtleV8gPSBudWxsOwotICAgIGNoZWNrZWRfID0gdHJ1ZTsKLSAgICBkaXNwbGF5TmFtZV8gPSBudWxsOwotICAgIHRNb2RlbEtleV8gPSBudWxsOwotICAgIGVycm9yRXhjZXB0aW9uXyA9IG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDYXRlZ29yeU1vZGVscyBsb2FkIHRoZWlyIGRhdGEgZnJvbSB0aGUgZmlsZSBuYW1lZCB2aWEgdGhlCi0gICAqIHtAbGluayAjc2V0RGVmYXVsdERhdGFGaWxlKFN0cmluZyl9IG1ldGhvZC4gVGhlIGRhdGEgZmlsZQotICAgKiBuYW1lIGlzIGludGVycHJldHRlZCBhcyBlaXRoZXIgYSBwaHlzaWNhbCBwYXRobmFtZSBvciBhCi0gICAqIGNvbnRleHQtcm9vdCByZWxhdGl2ZSBwYXRobmFtZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKLSAgICogc2VydmxldCBjb250ZXh0IG9yICJhcHBsaWNhdGlvbiIgaXMgbnVsbCAoZGVmYXVsdCkgb3Igbm90LgotICAgKiBAcGFyYW0gYXBwbGljYXRpb24gVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQsIG51bGwgYnkgZGVmYXVsdC4KLSAgICogVmFsdWUgY2FuIGJlIHRoZSBTZXJ2bGV0Q29udGV4dCBvZiB0aGUgV1NFeHBsb3JlciBvciBudWxsLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2VydmxldENvbnRleHQoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLQlhcHBsaWNhdGlvbl8gPSBhcHBsaWNhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGVmYXVsdERhdGFGaWxlKFN0cmluZyBkZWZhdWx0RGF0YUZpbGUpCi0gIHsKLSAgICBkZWZhdWx0RGF0YUZpbGVfID0gZGVmYXVsdERhdGFGaWxlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2F0ZWdvcnlLZXkoU3RyaW5nIGNhdGVnb3J5S2V5KQotICB7Ci0gICAgY2F0ZWdvcnlLZXlfID0gY2F0ZWdvcnlLZXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5S2V5XzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q29sdW1uRGVsaW1pdGVyKFN0cmluZyBjb2x1bW5EZWxpbWl0ZXIpCi0gIHsKLSAgICBjb2x1bW5EZWxpbWl0ZXJfID0gY29sdW1uRGVsaW1pdGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvbHVtbkRlbGltaXRlcigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGVsaW1pdGVyXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RyaW5nRGVsaW1pdGVyKFN0cmluZyBzdHJpbmdEZWxpbWl0ZXIpCi0gIHsKLSAgICBzdHJpbmdEZWxpbWl0ZXJfID0gc3RyaW5nRGVsaW1pdGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0cmluZ0RlbGltaXRlcigpCi0gIHsKLSAgICByZXR1cm4gc3RyaW5nRGVsaW1pdGVyXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlQ2hlY2tlZChib29sZWFuIGlzQ2hlY2tlZCkKLSAgewotICAgIGNoZWNrZWRfID0gaXNDaGVja2VkOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0NoZWNrZWQoKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrZWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXREaXNwbGF5TmFtZShTdHJpbmcgZGlzcGxheU5hbWUpCi0gIHsKLSAgICBkaXNwbGF5TmFtZV8gPSBkaXNwbGF5TmFtZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREaXNwbGF5TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZGlzcGxheU5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRUTW9kZWxLZXkoU3RyaW5nIHRNb2RlbEtleSkKLSAgewotICAgIHRNb2RlbEtleV8gPSB0TW9kZWxLZXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VE1vZGVsS2V5KCkKLSAgewotICAgIHJldHVybiB0TW9kZWxLZXlfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0RhdGFMb2FkZWQoKQotICB7Ci0gICAgcmV0dXJuIChjYXRlZ29yeUVsZW1lbnRzXyAhPSBudWxsKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFRocm93YWJsZSBnZXRFcnJvckV4Y2VwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JFeGNlcHRpb25fOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNFbmNsb3NlZEluUXVvdGVzKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gc3RyaW5nLnN0YXJ0c1dpdGgoIlwiIikgJiYgc3RyaW5nLmVuZHNXaXRoKCJcIiIpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgbG9hZEZyb21UYXhvbm9teShUYXhvbm9teSB0YXhvbm9teSkKLSAgewotICAgIFN0cmluZyBuYW1lID0gdGF4b25vbXkuZ2V0TmFtZSgpOwotICAgIENhdGVnb3J5RWxlbWVudCByb290ID0gbmV3IENhdGVnb3J5RWxlbWVudChuYW1lLG51bGwsdGhpcyk7Ci0gICAgc2V0Um9vdEVsZW1lbnQocm9vdCk7Ci0gICAgY2F0ZWdvcnlFbGVtZW50c18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHRheG9ub215LmdldENhdGVnb3J5KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBhZGRDYXRlZ29yeShyb290LCAoQ2F0ZWdvcnkpaXQubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkQ2F0ZWdvcnkoQ2F0ZWdvcnlFbGVtZW50IHBhcmVudCwgQ2F0ZWdvcnkgY2F0ZWdvcnkpCi0gIHsKLSAgICBTdHJpbmcga2V5TmFtZSA9IGNhdGVnb3J5LmdldE5hbWUoKTsKLSAgICBTdHJpbmcga2V5VmFsdWUgPSBjYXRlZ29yeS5nZXRDb2RlKCk7Ci0gICAgQ2F0ZWdvcnlFbGVtZW50IGNoaWxkID0gbmV3IENhdGVnb3J5RWxlbWVudChrZXlOYW1lLG5ldyBLZXllZFJlZmVyZW5jZShrZXlOYW1lLGtleVZhbHVlLHRNb2RlbEtleV8pLHRoaXMpOwotICAgIHBhcmVudC5jb25uZWN0KGNoaWxkLFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGNhdGVnb3J5RWxlbWVudHNfLnB1dChrZXlWYWx1ZSwgY2hpbGQpOyAgIAotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBjYXRlZ29yeS5nZXRDYXRlZ29yeSgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgYWRkQ2F0ZWdvcnkoY2hpbGQsIChDYXRlZ29yeSlpdC5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBieXRlIGxvYWRGcm9tRGVmYXVsdERhdGFGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChkZWZhdWx0RGF0YUZpbGVfID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oKTsKLQkgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKLQkgIGlmIChhcHBsaWNhdGlvbl8gPT0gbnVsbCkKLQkJYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0oZGVmYXVsdERhdGFGaWxlXyksSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpKTsKLQkgIGVsc2UKLQkgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGFwcGxpY2F0aW9uXy5nZXRSZXNvdXJjZUFzU3RyZWFtKGRlZmF1bHREYXRhRmlsZV8pLEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKSk7Ci0gICAgICByZXR1cm4gbG9hZERhdGEoYnIpOwotICAgIH0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9GSUxFOwotICAgIH0KLSAgICBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX1NFQ1VSSVRZOwotICAgIH0KLSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfRU5DT0RJTkc7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYnl0ZSBsb2FkRnJvbURlbGltaXRlckZpbGUoKQotICB7Ci0gICAgLy8gR2V0IHRoZSBhc3NvY2lhdGVkIC5wcm9wZXJ0aWVzIGZpbGUgYW5kIHNldCB0aGUgZGVsaW1pdGVycy4gVGhlIGRlZmF1bHREYXRhRmlsZV8gaXMgc2V0IHRvIHRoZSBkZWxpbWl0ZXIgZmlsZSBpbiB0aGlzIGNhc2UuCi0gICAgLy8gVGhlIHByb3BlcnRpZXMgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGtleXM6Ci0gICAgLy8gd3NhZC5kYXRhRmlsZSAtIGxvY2F0aW9uIG9mIHRoZSBjYXRlZ29yeSBkYXRhIGZpbGUuCi0gICAgLy8gd3NhZC5jaGVja2VkIC0gd2hldGhlciBvciBub3QgdGhlIGNhdGVnb3J5IGlzIGNoZWNrZWQuCi0gICAgLy8gd3NhZC5uYW1lIC0gdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY2F0ZWdvcnkuCi0gICAgLy8gY29sdW1uLmRlbGltaXRlciAtIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyIHVzZWQgZm9yIHNlcGFyYXRpbmcgY29sdW1ucy4KLSAgICAvLyBzdHJpbmcuZGVsaW1pdGVyIC0gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdXNlZCB0byBlbmNhcHN1bGF0ZSBkYXRhIHN1Y2ggdGhhdCBjb2x1bW4gZGVsaW1pdGVyIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMgZGF0YS4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgSW5wdXRTdHJlYW0gZmluID0gbnVsbDsKLQkgIGlmIChhcHBsaWNhdGlvbl8gPT0gbnVsbCkKLQkgICAgZmluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZWZhdWx0RGF0YUZpbGVfKTsKLQkgIGVsc2UKLQkJZmluID0gYXBwbGljYXRpb25fLmdldFJlc291cmNlQXNTdHJlYW0oZGVmYXVsdERhdGFGaWxlXyk7Ci0gICAgICBwLmxvYWQoZmluKTsKLSAgICAgIGZpbi5jbG9zZSgpOwotICAgICAgY29sdW1uRGVsaW1pdGVyXyA9IHAuZ2V0UHJvcGVydHkoImNvbHVtbi5kZWxpbWl0ZXIiKTsKLSAgICAgIHN0cmluZ0RlbGltaXRlcl8gPSBwLmdldFByb3BlcnR5KCJzdHJpbmcuZGVsaW1pdGVyIik7Ci0gICAgICBkZWZhdWx0RGF0YUZpbGVfID0gcC5nZXRQcm9wZXJ0eSgid3NhZC5kYXRhRmlsZSIpOwotICAgICAgcmV0dXJuIGxvYWRGcm9tRGVmYXVsdERhdGFGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX0ZJTEU7Ci0gICAgfQotICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfU0VDVVJJVFk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfSU87Ci0gICAgfSAgICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBieXRlIGxvYWREYXRhKEJ1ZmZlcmVkUmVhZGVyIGJyKQotICB7Ci0gICAgZXJyb3JFeGNlcHRpb25fID0gbnVsbDsKLSAgICBDYXRlZ29yeUVsZW1lbnQgcm9vdEVsZW1lbnQgPSBudWxsOwotICAgIGNhdGVnb3J5RWxlbWVudHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGJ5dGUgcmV0dXJuQ29kZSA9IE9QRVJBVElPTl9TVUNDRVNTRlVMOwotICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY2hhciBjb2x1bW5EZWxpbWl0ZXJDaGFyID0gY29sdW1uRGVsaW1pdGVyXy5jaGFyQXQoMCk7Ci0gICAgICBjaGFyIHN0cmluZ0RlbGltaXRlckNoYXIgPSBzdHJpbmdEZWxpbWl0ZXJfLmNoYXJBdCgwKTsKLSAgICAgIFZlY3RvciB2YWx1ZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB3aGlsZSgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgLy8gSWdub3JlIGJsYW5rIGxpbmVzLgotICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgaW50IGxlbmd0aCA9IGxpbmUubGVuZ3RoKCk7Ci0gICAgICAgIGJvb2xlYW4gaW5TdHJpbmdEZWxpbWl0ZXJzID0gZmFsc2U7Ci0gICAgICAgIHZhbHVlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgICBTdHJpbmdCdWZmZXIgY3VycmVudFRva2VuID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyIGN1cnJlbnRDaGFyID0gbGluZS5jaGFyQXQoaW5kZXgpOwotICAgICAgICAgIGlmIChpblN0cmluZ0RlbGltaXRlcnMpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gSW4gcXVvdGUgc28gaWdub3JpbmcgZGVsaW1pdGVycwotICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyID09IHN0cmluZ0RlbGltaXRlckNoYXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAtIDEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjdXJyZW50Q2hhciBjb3VsZCBiZSBhIGNsb3Npbmcgc3RyaW5nIGRlbGltaXRlciBvciBlc2NhcGUKLSAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGxvb2sgYWhlYWQgdG8gYmUgc3VyZS4uLgotICAgICAgICAgICAgICAgIGNoYXIgZm9sbG93aW5nQ2hhciA9IGxpbmUuY2hhckF0KGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvbGxvd2luZ0NoYXIgPT0gc3RyaW5nRGVsaW1pdGVyQ2hhcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbiBlc2NhcGVkIHF1b3RlCi0gICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4uYXBwZW5kKHN0cmluZ0RlbGltaXRlckNoYXIpOwotICAgICAgICAgICAgICAgICAgLy8ganVtcCBmb3J3YXJkIHR3byBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBhIGNsb3Npbmcgc3RyaW5nIGRlbGltaXRlci4uLmp1bXAgZm9yd2FyZCB0byB0aGUgbmV4dCBkZWxpbWl0ZXIKLSAgICAgICAgICAgICAgICAgIGluU3RyaW5nRGVsaW1pdGVycyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgLy9sb29rIGZvciB0aGUgbmV4dCBjb2x1bW4gZGVsaW1pdGVyIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgaW50IG5leHREZWxpbWl0ZXIgPSBsaW5lLmluZGV4T2YoY29sdW1uRGVsaW1pdGVyQ2hhciwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgaWYgKG5leHREZWxpbWl0ZXIgPT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdlcmUgbm8gbW9yZSBkZWxpbWl0ZXJzIHNvIGJyZWFrIG91dCBvZiB0aGUgbG9vcAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFkZEVsZW1lbnQoY3VycmVudFRva2VuLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlc1t0b2tlbkNvdW50KytdID0gY3VycmVudFRva2VuLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGluU3RyaW5nRGVsaW1pdGVycyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG5leHREZWxpbWl0ZXIgKyAxOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBhbmQgaXQncyBhIGNsb3Npbmcgc3RyaW5nIGRlbGltaXRlci4KLSAgICAgICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgICAgIGluU3RyaW5nRGVsaW1pdGVycyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5hcHBlbmQoY3VycmVudENoYXIpOwotICAgICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhciA9PSBjb2x1bW5EZWxpbWl0ZXJDaGFyKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBhIGRlbGltaXRlciBvdXRzaWRlIG9mIHF1b3RlcwotICAgICAgICAgICAgdmFsdWVzLmFkZEVsZW1lbnQoY3VycmVudFRva2VuLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgLy92YWx1ZXNbdG9rZW5Db3VudCsrXSA9IGN1cnJlbnRUb2tlbi50b1N0cmluZygpOwotICAgICAgICAgICAgY3VycmVudFRva2VuLnNldExlbmd0aCgwKTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFyID09IHN0cmluZ0RlbGltaXRlckNoYXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQSBxdW90ZSBhcHBlYXJpbmcgb3V0c2lkZSBvZiBxdW90ZXMgbXVzdCBiZSBhIG9wZW5pbmcgcXVvdGUKLSAgICAgICAgICAgIGluU3RyaW5nRGVsaW1pdGVycyA9IHRydWU7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBub3JtYWwgY2hhciBvdXRzaWRlIG9mIHF1b3RlcwotICAgICAgICAgICAgY3VycmVudFRva2VuLmFwcGVuZChjdXJyZW50Q2hhcik7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBFeHBlY3QgdG9rZW4gY291bnQgdG8gYmUgdmFsdWVzLmxlbmd0aCAtIDEgYXQgdGhpcyBwb2ludCBpZiBldmVyeXRoaW5nIGlzIG9rCi0gICAgICAgIGlmIChpblN0cmluZ0RlbGltaXRlcnMpCi0gICAgICAgIHsKLSAgICAgICAgICBici5jbG9zZSgpOwotICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbihsaW5lLGxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBBZGQgdGhlIGZpbmFsIHRva2VuLgotICAgICAgICB2YWx1ZXMuYWRkRWxlbWVudChjdXJyZW50VG9rZW4udG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgLy8gMyBjb2x1bW5zIGZvcm1hdC4gRnJvbSBsZWZ0IHRvIHJpZ2h0LCB0aGVzZSBhcmU6Ci0gICAgICAgIC8vIDEpIGNhdGVnb3J5J3Mga2V5IHZhbHVlCi0gICAgICAgIC8vIDIpIGNhdGVnb3J5J3Mga2V5IG5hbWUKLSAgICAgICAgLy8gMykgY2F0ZWdvcnkncyBwYXJlbnQga2V5IHZhbHVlCi0gICAgICAgIC8vIENvbnZlcnQgdG8gNCBjb2x1bW5zIGZvcm1hdC4KLSAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMykKLSAgICAgICAgewotICAgICAgICAgIGlmIChjYXRlZ29yeUtleV8gIT0gbnVsbCkKLSAgICAgICAgICAgIHZhbHVlcy5pbnNlcnRFbGVtZW50QXQoY2F0ZWdvcnlLZXlfLCAwKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZXMuaW5zZXJ0RWxlbWVudEF0KHRNb2RlbEtleV8sIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNCBjb2x1bW5zIGZvcm1hdC4gRnJvbSBsZWZ0IHRvIHJpZ2h0LCB0aGVzZSBhcmU6Ci0gICAgICAgIC8vIDEpIHR5cGUgb2YgY2F0ZWdvcnkgKGNhdGVnb3J5S2V5KQotICAgICAgICAvLyAyKSBjYXRlZ29yeSdzIGtleSB2YWx1ZQotICAgICAgICAvLyAzKSBjYXRlZ29yeSdzIGtleSBuYW1lCi0gICAgICAgIC8vIDQpIGNhdGVnb3J5J3MgcGFyZW50IGtleSB2YWx1ZQotICAgICAgICBpZiAodmFsdWVzLnNpemUoKSA9PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGNhdGVnb3J5S2V5ID0gKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDApOwotICAgICAgICAgIGlmIChjYXRlZ29yeUtleV8gPT0gbnVsbCkKLSAgICAgICAgICAgIGNhdGVnb3J5S2V5XyA9IGNhdGVnb3J5S2V5OwotICAgICAgICAgIGVsc2UgaWYgKCFjYXRlZ29yeUtleV8uZXF1YWxzKGNhdGVnb3J5S2V5KSkKLSAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oY2F0ZWdvcnlLZXkpOwotICAgICAgICAgIFN0cmluZyBrZXlWYWx1ZSA9IChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgxKTsKLSAgICAgICAgICBTdHJpbmcga2V5TmFtZSA9IChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgyKTsKLSAgICAgICAgICBTdHJpbmcgcGFyZW50S2V5VmFsdWUgPSAoU3RyaW5nKXZhbHVlcy5lbGVtZW50QXQoMyk7Ci0gICAgICAgICAgaWYgKHJvb3RFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcm9vdEVsZW1lbnQgPSBuZXcgQ2F0ZWdvcnlFbGVtZW50KGRpc3BsYXlOYW1lXyxudWxsLHRoaXMpOwotICAgICAgICAgICAgc2V0Um9vdEVsZW1lbnQocm9vdEVsZW1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXNFbmNsb3NlZEluUXVvdGVzKGtleU5hbWUpKQotICAgICAgICAgICAga2V5TmFtZSA9IGtleU5hbWUuc3Vic3RyaW5nKDEsa2V5TmFtZS5sZW5ndGgoKS0xKTsKLSAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgQ2F0ZWdvcnlFbGVtZW50IGFscmVhZHkgZXhpc3RzLiBJZiBpdCBkb2VzLCByZWZyZXNoIHRoZSBDYXRlZ29yeS4KLSAgICAgICAgICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudCljYXRlZ29yeUVsZW1lbnRzXy5nZXQoa2V5VmFsdWUpOwotICAgICAgICAgIGlmIChjYXRlZ29yeUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIGNhdGVnb3J5RWxlbWVudC51cGRhdGVDYXRlZ29yeShrZXlOYW1lLGtleVZhbHVlLHRNb2RlbEtleV8pOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhdGVnb3J5RWxlbWVudCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQoa2V5TmFtZSxuZXcgS2V5ZWRSZWZlcmVuY2Uoa2V5TmFtZSxrZXlWYWx1ZSx0TW9kZWxLZXlfKSx0aGlzKTsKLSAgICAgICAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQ7Ci0gICAgICAgICAgaWYgKHBhcmVudEtleVZhbHVlLmVxdWFscyhrZXlWYWx1ZSkpCi0gICAgICAgICAgICBwYXJlbnRFbGVtZW50ID0gcm9vdEVsZW1lbnQ7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IChFbGVtZW50KWNhdGVnb3J5RWxlbWVudHNfLmdldChwYXJlbnRLZXlWYWx1ZSk7Ci0gICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJlbnRFbGVtZW50ID0gbmV3IENhdGVnb3J5RWxlbWVudCgidGVtcCIsbmV3IEtleWVkUmVmZXJlbmNlKCIiLHBhcmVudEtleVZhbHVlLHRNb2RlbEtleV8pLHRoaXMpOwotICAgICAgICAgICAgY2F0ZWdvcnlFbGVtZW50c18ucHV0KHBhcmVudEtleVZhbHVlLHBhcmVudEVsZW1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmNvbm5lY3QoY2F0ZWdvcnlFbGVtZW50LFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICAgIGNhdGVnb3J5RWxlbWVudHNfLnB1dChrZXlWYWx1ZSxjYXRlZ29yeUVsZW1lbnQpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBici5jbG9zZSgpOwotICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbihsaW5lLGxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBici5jbG9zZSgpOwotICAgICAgcmV0dXJuIHJldHVybkNvZGU7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm5Db2RlID0gRVJST1JfSU87Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm5Db2RlID0gRVJST1JfRklMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm5Db2RlID0gRVJST1JfQ0FURUdPUllfS0VZOwotICAgIH0KLSAgICBjYXRlZ29yeUVsZW1lbnRzXyA9IG51bGw7Ci0gICAgcmV0dXJuIHJldHVybkNvZGU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzYXZlRGF0YShQcmludFdyaXRlciBwdyxDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50LENhdGVnb3J5RWxlbWVudCBwYXJlbnRFbGVtZW50LGJvb2xlYW4gaXNGaXJzdCkKLSAgewotICAgIC8vIEZpbGUgZm9ybWF0OgotICAgIC8vIDxjYXRlZ29yeUtleT4jPGtleVZhbHVlPiM8a2V5TmFtZT4jPHBhcmVudEtleVZhbHVlPgotICAgIEtleWVkUmVmZXJlbmNlIGtyID0gY2F0ZWdvcnlFbGVtZW50LmdldENhdGVnb3J5KCk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBub3QgdGhlIHJvb3QgZWxlbWVudC4KLSAgICBpZiAoa3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5TmFtZSA9IGtyLmdldEtleU5hbWUoKTsKLSAgICAgIFN0cmluZyBrZXlWYWx1ZSA9IGtyLmdldEtleVZhbHVlKCk7Ci0gICAgICBTdHJpbmcgcGFyZW50S2V5VmFsdWU7Ci0gICAgICBpZiAocGFyZW50RWxlbWVudCA9PSBudWxsKQotICAgICAgICBwYXJlbnRLZXlWYWx1ZSA9IGtleVZhbHVlOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBwYXJlbnRLciA9IHBhcmVudEVsZW1lbnQuZ2V0Q2F0ZWdvcnkoKTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCBpcyB0aGUgcm9vdCBlbGVtZW50LgotICAgICAgICBpZiAocGFyZW50S3IgPT0gbnVsbCkKLSAgICAgICAgICBwYXJlbnRLZXlWYWx1ZSA9IGtleVZhbHVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyZW50S2V5VmFsdWUgPSBwYXJlbnRLci5nZXRLZXlWYWx1ZSgpOwotICAgICAgfQotICAgICAgaWYgKCFpc0ZpcnN0KQotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgIHB3LnByaW50KG1hbmdsZShjYXRlZ29yeUtleV8pKTsKLSAgICAgIHB3LnByaW50KGNvbHVtbkRlbGltaXRlcl8pOwotICAgICAgcHcucHJpbnQobWFuZ2xlKGtleVZhbHVlKSk7Ci0gICAgICBwdy5wcmludChjb2x1bW5EZWxpbWl0ZXJfKTsKLSAgICAgIHB3LnByaW50KG1hbmdsZShrZXlOYW1lKSk7Ci0gICAgICBwdy5wcmludChjb2x1bW5EZWxpbWl0ZXJfKTsKLSAgICAgIHB3LnByaW50KG1hbmdsZShwYXJlbnRLZXlWYWx1ZSkpOwotICAgIH0KLSAgICBFbnVtZXJhdGlvbiBlID0gY2F0ZWdvcnlFbGVtZW50LmdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgc2F2ZURhdGEocHcsKENhdGVnb3J5RWxlbWVudCllLm5leHRFbGVtZW50KCksY2F0ZWdvcnlFbGVtZW50LGlzRmlyc3QpOwotICAgIH0KLSAgfQotICAKLSAgLy8gTWFuZ2xlIGFuIGlucHV0IHN0cmluZyBpZiBpdCBjb250YWlucyBkZWZhdWx0IGNvbHVtbiBkZWxpbWl0ZXIgY2hhcmFjdGVycyBieSBzdXJyb3VuZGluZyBpdCB3aXRoIHRoZSBzdHJpbmcgZGVsaW1pdGVycy4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWFuZ2xlKFN0cmluZyBpbnB1dCkKLSAgewotICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0LmluZGV4T2YoY29sdW1uRGVsaW1pdGVyXykgIT0gLTEpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKGlucHV0KTsKLSAgICAgIHMuaW5zZXJ0KDAsc3RyaW5nRGVsaW1pdGVyXykuYXBwZW5kKHN0cmluZ0RlbGltaXRlcl8pOwotICAgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0OwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYnl0ZSBzYXZlRGF0YShTdHJpbmcgZmlsZU5hbWUpCi0gIHsKLSAgICAvLyBUaGUgZmlsZU5hbWUgc2hvdWxkIGFscmVhZHkgYmUgVVJMRW5jb2RlZC4KLSAgICBieXRlIHJldHVybkNvZGUgPSBPUEVSQVRJT05fU1VDQ0VTU0ZVTDsKLSAgICBlcnJvckV4Y2VwdGlvbl8gPSBudWxsOwotICAgIGlmIChpc0RhdGFMb2FkZWQoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlTmFtZSksSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpLHRydWUpOwotICAgICAgICBDYXRlZ29yeUVsZW1lbnQgcm9vdEVsZW1lbnQgPSAoQ2F0ZWdvcnlFbGVtZW50KWdldFJvb3RFbGVtZW50KCk7Ci0gICAgICAgIHNhdmVEYXRhKHB3LHJvb3RFbGVtZW50LG51bGwsdHJ1ZSk7Ci0gICAgICAgIHB3LmZsdXNoKCk7Ci0gICAgICAgIHB3LmNsb3NlKCk7Ci0gICAgICAgIC8vIFNhdmUgdGhlIHByb3BlcnRpZXMgZmlsZS4KLSAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgcC5zZXRQcm9wZXJ0eSgid3NhZC5kYXRhRmlsZSIsZmlsZU5hbWUpOwotICAgICAgICBwLnNldFByb3BlcnR5KCJ3c2FkLmNoZWNrZWQiLFN0cmluZy52YWx1ZU9mKGNoZWNrZWRfKSk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoIndzYWQubmFtZSIsZGlzcGxheU5hbWVfKTsKLSAgICAgICAgcC5zZXRQcm9wZXJ0eSgiY29sdW1uLmRlbGltaXRlciIsY29sdW1uRGVsaW1pdGVyXyk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoInN0cmluZy5kZWxpbWl0ZXIiLHN0cmluZ0RlbGltaXRlcl8pOwotICAgICAgICBTdHJpbmdCdWZmZXIgcHJvcGVydGllc0ZpbGVOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcihmaWxlTmFtZS5zdWJzdHJpbmcoMCxmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpKSk7Ci0gICAgICAgIHByb3BlcnRpZXNGaWxlTmFtZS5hcHBlbmQoIi5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHByb3BlcnRpZXNGaWxlTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgcC5zdG9yZShmb3V0LG51bGwpOwotICAgICAgICBmb3V0LmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9GSUxFOwotICAgICAgfQotICAgICAgY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9TRUNVUklUWTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9FTkNPRElORzsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfSU87Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXR1cm5Db2RlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBkaXNwbGF5TmFtZV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUHVibGlzaGVkSXRlbXNFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlZEl0ZW1zRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjc1ZWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUHVibGlzaGVkSXRlbXNFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgUHVibGlzaGVkSXRlbXNFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwdWJsaWMgUHVibGlzaGVkSXRlbXNFbGVtZW50KGludCB0eXBlLFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhNb2RlbENvbnN0YW50cy5SRUxfQ0hJTERSRU4sVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMpOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLlFVRVJZX1RZUEUsU3RyaW5nLnZhbHVlT2YodHlwZSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KGdldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLlFVRVJZX1RZUEUpKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRJdGVtcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjMyYzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5hc3NlcnRpb24uUHVibGlzaGVyQXNzZXJ0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgewotCi0gIC8vIG93bmluZ0J1c2luZXNzS2V5XyBpcyB0aGUga2V5IG9mIHRoZSBidXNpbmVzcyBlbGVtZW50IHRoYXQgb3ducyB0aGlzCi0gIC8vIHB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQKLSAgcHJpdmF0ZSBTdHJpbmcgZnJvbUtleV87Ci0gIHByaXZhdGUgU3RyaW5nIHRvS2V5XzsKLSAgcHJpdmF0ZSBTdHJpbmcgb3duaW5nQnVzaW5lc3NLZXlfOwotCi0gIC8vIHRoZSBvdGhlciBidXNpbmVzcyB0aGF0IHRoZSBjb250YWluaW5nIGJ1c2luZXNzIGlzIGFzc2VydGVkIGZyb20gb3IgdG8KLSAgcHJpdmF0ZSBMaXN0RWxlbWVudCBzcF87Ci0gIHByaXZhdGUgaW50IHN1YlF1ZXJ5SXRlbUlkXzsKLQotICAvLyBzdGF0dXMgb2YgdGhpcyBwdWJsaXNoZXJBc3NlcnRpb24KLSAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzXzsKLSAgcHJpdmF0ZSBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZV87Ci0KLSAgcHVibGljIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQoU3RyaW5nIGZyb21LZXksIFN0cmluZyB0b0tleSwgU3RyaW5nIG93bmluZ0J1c2luZXNzS2V5LCBMaXN0RWxlbWVudCBzcCwgaW50IHN1YlF1ZXJ5SXRlbUlkLCBTdHJpbmcgc3RhdHVzLCBLZXllZFJlZmVyZW5jZSBrZXllZFJlZikgewotICAgIGZyb21LZXlfID0gZnJvbUtleTsKLSAgICB0b0tleV8gPSB0b0tleTsKLSAgICBvd25pbmdCdXNpbmVzc0tleV8gPSBvd25pbmdCdXNpbmVzc0tleTsKLSAgICBzcF8gPSBzcDsKLSAgICBzdWJRdWVyeUl0ZW1JZF8gPSBzdWJRdWVyeUl0ZW1JZDsKLSAgICBzdGF0dXNfID0gc3RhdHVzOwotICAgIGtleWVkUmVmZXJlbmNlXyA9IGtleWVkUmVmOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RnJvbUtleShTdHJpbmcgZnJvbUtleSkgewotICAgIGZyb21LZXlfID0gZnJvbUtleTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RnJvbUtleSgpIHsKLSAgICByZXR1cm4gZnJvbUtleV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRUb0tleShTdHJpbmcgdG9LZXkpIHsKLSAgICB0b0tleV8gPSB0b0tleTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9LZXkoKSB7Ci0gICAgcmV0dXJuIHRvS2V5XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE93bmluZ0J1c2luZXNzS2V5KFN0cmluZyBrZXkpIHsKLSAgICBvd25pbmdCdXNpbmVzc0tleV8gPSBrZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE93bmluZ0J1c2luZXNzS2V5KCkgewotICAgIHJldHVybiBvd25pbmdCdXNpbmVzc0tleV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvdmlkZXIoTGlzdEVsZW1lbnQgc3ApIHsKLSAgICBzcF8gPSBzcDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0RWxlbWVudCBnZXRTZXJ2aWNlUHJvdmlkZXIoKSB7Ci0gICAgcmV0dXJuIHNwXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN1YlF1ZXJ5SXRlbUlkKGludCBpZCkgewotICAgIHN1YlF1ZXJ5SXRlbUlkXyA9IGlkOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRTdWJRdWVyeUl0ZW1JZCgpIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJdGVtSWRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzKFN0cmluZyBzdGF0dXMpIHsKLSAgICBzdGF0dXNfID0gc3RhdHVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXMoKSB7Ci0gICAgcmV0dXJuIHN0YXR1c187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRLZXllZFJlZihLZXllZFJlZmVyZW5jZSBrZXllZFJlZikgewotICAgIGtleWVkUmVmZXJlbmNlXyA9IGtleWVkUmVmOwotICB9Ci0KLSAgcHVibGljIEtleWVkUmVmZXJlbmNlIGdldEtleWVkUmVmKCkgewotICAgIHJldHVybiBrZXllZFJlZmVyZW5jZV87Ci0gIH0KLQotICBwdWJsaWMgUHVibGlzaGVyQXNzZXJ0aW9uIGdldFB1Ymxpc2hlckFzc2VydGlvbigpIHsKLSAgICBpZiAoZnJvbUtleV8gPT0gbnVsbCB8fAotICAgICAgICB0b0tleV8gPT0gbnVsbCB8fAotICAgICAgICBrZXllZFJlZmVyZW5jZV8gPT0gbnVsbCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgUHVibGlzaGVyQXNzZXJ0aW9uIHB1YkFzc2VydGlvbiA9IG5ldyBQdWJsaXNoZXJBc3NlcnRpb24oZnJvbUtleV8sIHRvS2V5Xywga2V5ZWRSZWZlcmVuY2VfKTsKLSAgICByZXR1cm4gcHViQXNzZXJ0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUXVlcnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDZkZTkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUXVlcnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUXVlcnlFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIGZpbmFsIHZvaWQgaW5pdFF1ZXJ5UHJvcGVydGllcyhpbnQgaXRlbVR5cGUsT2JqZWN0W10gcmVzdWx0cykKLSAgewotICAgIFZlY3RvciByZXN1bHRzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPHJlc3VsdHMubGVuZ3RoO2krKykKLSAgICAgIHJlc3VsdHNWZWN0b3IuYWRkRWxlbWVudChyZXN1bHRzW2ldKTsKLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKE1vZGVsQ29uc3RhbnRzLlJFTF9DSElMRFJFTixVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpOwotICAgIHNldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLklOSVRJQUxfUkVTVUxUUyxyZXN1bHRzVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFLFN0cmluZy52YWx1ZU9mKGl0ZW1UeXBlKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBRdWVyeUVsZW1lbnQoQnVzaW5lc3NFbnRpdHlbXSBzcExpc3QsU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBpbml0UXVlcnlQcm9wZXJ0aWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLHNwTGlzdCk7Ci0gIH0KLQotICBwdWJsaWMgUXVlcnlFbGVtZW50KEJ1c2luZXNzU2VydmljZVtdIGJzTGlzdCxTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIGluaXRRdWVyeVByb3BlcnRpZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLGJzTGlzdCk7Ci0gIH0KLQotICBwdWJsaWMgUXVlcnlFbGVtZW50KFRNb2RlbFtdIHRNb2RlbExpc3QsU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBpbml0UXVlcnlQcm9wZXJ0aWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsdE1vZGVsTGlzdCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFF1ZXJ5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChnZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFKSk7Ci0gIH0KLQotICBwdWJsaWMgUXVlcnlQYXJlbnRFbGVtZW50IGdldFF1ZXJ5UGFyZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKFF1ZXJ5UGFyZW50RWxlbWVudClnZXRQYXJlbnRFbGVtZW50KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUXVlcnlQYXJlbnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5UGFyZW50RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjZmMzdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUXVlcnlQYXJlbnRFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgUXVlcnlQYXJlbnRFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwdWJsaWMgUXVlcnlQYXJlbnRFbGVtZW50KFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhNb2RlbENvbnN0YW50cy5SRUxfQ0hJTERSRU4sVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRRdWVyaWVzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1JlZ2lzdHJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9SZWdpc3RyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwOWYyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1JlZ2lzdHJ5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcwNDE5ICAgMTgyODY0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlVERElSZWdpc3RyeVNlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5BdXRoVG9rZW47Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIGZpbmFsIGxvbmcgQVVUSF9JTkZPX1RJTUVPVVQgPSAzMDAwMDAwOwotICBwcml2YXRlIFVERElQcm94eSBwcm94eV87Ci0gIHByaXZhdGUgbG9uZyBhdXRoVG9rZW5UaW1lc3RhbXBfOwotICBwcml2YXRlIEF1dGhUb2tlbiBhdXRoVG9rZW5fOwotICBwcml2YXRlIFN0cmluZyBpZF87Ci0gIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaW5xdWlyeVVSTF87Ci0gIHByaXZhdGUgU3RyaW5nIHB1Ymxpc2hVUkxfOwotICBwcml2YXRlIFN0cmluZyBjYWNoZWRQdWJsaXNoVVJMXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdXNlckRlZmluZWRDYXRlZ29yaWVzXzsKLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeV87Ci0KLSAgcHVibGljIFJlZ2lzdHJ5RWxlbWVudChVRERJUHJveHkgcHJveHksIFN0cmluZyBpbnF1aXJ5VVJMLCBTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgcHJveHlfID0gcHJveHk7Ci0gICAgaW5xdWlyeVVSTF8gPSBpbnF1aXJ5VVJMOwotICAgIHB1Ymxpc2hVUkxfID0gbnVsbDsKLSAgICBhdXRoVG9rZW5UaW1lc3RhbXBfID0gLTE7Ci0gICAgYXV0aFRva2VuXyA9IG51bGw7Ci0gICAgaWRfID0gbnVsbDsKLSAgICBwYXNzd29yZF8gPSBudWxsOwotICAgIGNhY2hlZFB1Ymxpc2hVUkxfID0gbnVsbDsKLSAgICByZWdpc3RyYXRpb25VUkxfID0gbnVsbDsKLSAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXNfID0gbnVsbDsKLSAgICBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gPSBmYWxzZTsKLSAgICBjYXRlZ29yaWVzRGlyZWN0b3J5XyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVURESVByb3h5IGdldFByb3h5KCkKLSAgewotICAgIHJldHVybiBwcm94eV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0cygpCi0gIHsKLQkgIAotCSAgYXV0aFRva2VuVGltZXN0YW1wXyA9IC0xOwotCSAgYXV0aFRva2VuXyA9IG51bGw7Ci0JICBjYWNoZWRQdWJsaXNoVVJMXyA9IG51bGw7IAotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIGlucXVpcnlVUkxfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFF1ZXJ5UGFyZW50RWxlbWVudCBnZXRRdWVyeVBhcmVudEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChRdWVyeVBhcmVudEVsZW1lbnQpIChnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVNfUEFSRU5UKS5uZXh0RWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgZ2V0UHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpIChnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9CVVNJTkVTU0VTX1BBUkVOVCkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUHVibGlzaGVkSXRlbXNFbGVtZW50IGdldFB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkgKGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUHVibGlzaGVkSXRlbXNFbGVtZW50IGdldFB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkgKGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQpLm5leHRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcGVyZm9ybUxvZ2luKFN0cmluZyBwdWJsaXNoVVJMLCBTdHJpbmcgdXNlcklkLCBTdHJpbmcgcGFzc3dvcmQpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24sIFVERElFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICB7Ci0gICAgcHVibGlzaFVSTF8gPSBwdWJsaXNoVVJMOwotICAgIHByb3h5Xy5zZXRQdWJsaXNoVVJMKE5ldFV0aWxzLmNyZWF0ZVVSTChwdWJsaXNoVVJMKSk7Ci0gICAgYXV0aFRva2VuXyA9IHByb3h5Xy5nZXRfYXV0aFRva2VuKHVzZXJJZCwgcGFzc3dvcmQpOwotICAgIGF1dGhUb2tlblRpbWVzdGFtcF8gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICBpZF8gPSB1c2VySWQ7Ci0gICAgcGFzc3dvcmRfID0gcGFzc3dvcmQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwZXJmb3JtTG9nb3V0KCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiwgVURESUV4Y2VwdGlvbgotICB7Ci0gICAgcHJveHlfLmRpc2NhcmRfYXV0aFRva2VuKGF1dGhUb2tlbl8uZ2V0QXV0aEluZm9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEF1dGhJbmZvU3RyaW5nKCkKLSAgewotICAgIGlmICghaXNMb2dnZWRJbigpKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgaWYgKChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGF1dGhUb2tlblRpbWVzdGFtcF8pID4gQVVUSF9JTkZPX1RJTUVPVVQpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGF1dGhUb2tlbl8gPSBwcm94eV8uZ2V0X2F1dGhUb2tlbihpZF8sIHBhc3N3b3JkXyk7Ci0gICAgICAgIGF1dGhUb2tlblRpbWVzdGFtcF8gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGF1dGhUb2tlbl8uZ2V0QXV0aEluZm9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzTG9nZ2VkSW4oKQotICB7Ci0gICAgcmV0dXJuIGF1dGhUb2tlbl8gIT0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENhY2hlZFB1Ymxpc2hVUkwoU3RyaW5nIHB1Ymxpc2hVUkwpCi0gIHsKLSAgICBjYWNoZWRQdWJsaXNoVVJMXyA9IHB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKQotICB7Ci0gICAgaWYgKGlzTG9nZ2VkSW4oKSAmJiBwdWJsaXNoVVJMXyAhPSBudWxsKQotICAgICAgcmV0dXJuIHB1Ymxpc2hVUkxfOwotICAgIHJldHVybiBjYWNoZWRQdWJsaXNoVVJMXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJlZ2lzdHJhdGlvblVSTChTdHJpbmcgcmVnaXN0cmF0aW9uVVJMKQotICB7Ci0gICAgcmVnaXN0cmF0aW9uVVJMXyA9IHJlZ2lzdHJhdGlvblVSTDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkKLSAgewotICAgIHJldHVybiByZWdpc3RyYXRpb25VUkxfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRVc2VySWQoKQotICB7Ci0gICAgcmV0dXJuIGlkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFVzZXJJZChTdHJpbmcgdXNlcklkKQotICB7Ci0gICAgaWRfID0gdXNlcklkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDcmVkKCkKLSAgewotICAgIHJldHVybiBwYXNzd29yZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDcmVkKFN0cmluZyBjcmVkKQotICB7Ci0gICAgcGFzc3dvcmRfID0gY3JlZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcyhIYXNodGFibGUgdXNlckRlZmluZWRDYXRlZ29yaWVzKQotICB7Ci0gICAgdXNlckRlZmluZWRDYXRlZ29yaWVzXyA9IHVzZXJEZWZpbmVkQ2F0ZWdvcmllczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKQotICB7Ci0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gIT0gbnVsbCkKLSAgICAgIHJldHVybiB1c2VyRGVmaW5lZENhdGVnb3JpZXNfLmVsZW1lbnRzKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgQ2F0ZWdvcnlNb2RlbCBnZXRVc2VyRGVmaW5lZENhdGVnb3J5KFN0cmluZyB0TW9kZWxLZXkpCi0gIHsKLSAgICByZXR1cm4gKENhdGVnb3J5TW9kZWwpIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc18uZ2V0KHRNb2RlbEtleSk7Ci0gIH0KLQotICAvLyBTcGVjaWFsIGhhbmRsZXIgdG8gYmUgaW52b2tlZCBiZWZvcmUgc2VuZGluZyBhIG1lc3NhZ2UgdG8gdGhlIHJlZ2lzdHJ5LgotICBwdWJsaWMgZmluYWwgdm9pZCBoYW5kbGVQcmVJbnZvY2F0aW9uKEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlKQotICB7Ci0gICAgLy8gRm9yIFhNZXRob2RzLCBidXNpbmVzcyBzZXJ2aWNlcyBtdXN0IGNvbnRhaW4gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybToKLSAgICAvLyBJTVBMRU1FTlRBVElPTjogaWJtd3MKLSAgICBpZiAoZ2V0SW5xdWlyeVVSTCgpLmVxdWFscygiaHR0cDovL3VkZGkueG1ldGhvZHMubmV0L2lucXVpcmUiKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBidXNTZXJ2aWNlLmdldERlc2NyaXB0aW9uVmVjdG9yKCk7Ci0gICAgICBpZiAoZGVzY3JpcHRpb25WZWN0b3IgPT0gbnVsbCkKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBib29sZWFuIGNvbnRhaW5zSW1wbGVtZW50YXRpb25EZXNjcmlwdGlvbiA9IGZhbHNlOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uLmdldFRleHQoKS5zdGFydHNXaXRoKCJJTVBMRU1FTlRBVElPTjogIikpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250YWluc0ltcGxlbWVudGF0aW9uRGVzY3JpcHRpb24gPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIWNvbnRhaW5zSW1wbGVtZW50YXRpb25EZXNjcmlwdGlvbikKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudChuZXcgRGVzY3JpcHRpb24oIklNUExFTUVOVEFUSU9OOiBpYm13cyIpKTsKLSAgICAgICAgYnVzU2VydmljZS5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMoYm9vbGVhbiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgewotICAgIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzXyA9IGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gZ2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMoKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENhdGVnb3JpZXNEaXJlY3RvcnkoU3RyaW5nIGRpcmVjdG9yeSkKLSAgewotICAgIGNhdGVnb3JpZXNEaXJlY3RvcnlfID0gZGlyZWN0b3J5OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDYXRlZ29yaWVzRGlyZWN0b3J5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yaWVzRGlyZWN0b3J5XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hNZXRhKCl7Ci0JICAgIAotCSAgUmVnaXN0cnlTZXJ2aWNlIHJlZ1NlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkgIElSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCSAgCi0JICAKLQkgIHRyeQotCSAgewotICAgIAkgIHJlZ01hbmFnZXIucmVmcmVzaE1hbmFnZXIoKTsKLQkJICBTdHJpbmdbXSByZWdVUklzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkJICBmb3IgKGludCBpID0gMDsgaSA8IHJlZ1VSSXMubGVuZ3RoOyBpKyspCi0JCSAgewotCQkJICBSZWdpc3RyeSByZWcgPSByZWdNYW5hZ2VyLmxvYWRSZWdpc3RyeShyZWdVUklzW2ldKTsKLQkJCSAgaWYgKHJlZyBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSkKLQkJCSAgewotCQkJCSAgVURESVJlZ2lzdHJ5IHVkZGlSZWcgPSAoVURESVJlZ2lzdHJ5KXJlZzsKLQkJCQkgIGlmKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkuZXF1YWxzKGdldElucXVpcnlVUkwoKSkpewotCQkJCQkgIAotCQkJCQkgIAotCQkJCQkgCi0JCQkJCSAgVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnTWFuYWdlci5sb2FkVGF4b25vbWllcyhVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCkuZ2V0VGF4b25vbXlVUklzKHVkZGlSZWcpKTsKLQkJCQkJICBpZiAodGF4b25vbWllcyAhPSBudWxsKQotCQkJCSAgICAgICAgewotCQkJCSAgICAgICAgICBIYXNodGFibGUgdGF4b25vbXlUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJCQkgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHRheG9ub21pZXMubGVuZ3RoOyBqKyspCi0JCQkJICAgICAgICAgIHsKLQkJCQkgICAgICAgICAgICBUYXhvbm9teSB0YXhvbm9teSA9IHRheG9ub21pZXNbal07Ci0JCQkJICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0YXhvbm9teS5nZXROYW1lKCk7Ci0JCQkJICAgICAgICAgICAgU3RyaW5nIHRtb2RlbEtleSA9IHRheG9ub215LmdldFRtb2RlbEtleSgpOwotCQkJCSAgICAgICAgICAgIENhdGVnb3J5TW9kZWwgY2F0TW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotCQkJCSAgICAgICAgICAgIGNhdE1vZGVsLnNldERpc3BsYXlOYW1lKG5hbWUpOwotCQkJCSAgICAgICAgICAgIGNhdE1vZGVsLnNldENhdGVnb3J5S2V5KG5hbWUpOwotCQkJCSAgICAgICAgICAgIGNhdE1vZGVsLnNldFRNb2RlbEtleSh0bW9kZWxLZXkpOwotCQkJCSAgICAgICAgICAgIGNhdE1vZGVsLmxvYWRGcm9tVGF4b25vbXkodGF4b25vbXkpOwotCQkJCSAgICAgICAgICAgIHRheG9ub215VGFibGUucHV0KHRtb2RlbEtleSwgY2F0TW9kZWwpOwotCQkJCSAgICAgICAgICB9Ci0JCQkJICAgICAgICAgIAotCQkJCSAgICAgICAgICBzZXRVc2VyRGVmaW5lZENhdGVnb3JpZXModGF4b25vbXlUYWJsZSk7Ci0JCQkJICAgICAgICB9ICAgCi0JCQkJICB9Ci0JCSAgCi0JCQkgIH0KLQkgIAotCQkgIH0KLQkgIH1jYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgIHsKLQkJICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0JCSAgY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9ICAKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjM3Y2JjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlRWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBCdXNpbmVzc1NlcnZpY2UgYnNfOwotICAKLSAgcHVibGljIFNlcnZpY2VFbGVtZW50KEJ1c2luZXNzU2VydmljZSBicyxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCksbW9kZWwpOwotICAgIHNldEtleShicy5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIGJzXyA9IGJzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgQnVzaW5lc3NTZXJ2aWNlIGdldEJ1c2luZXNzU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gYnNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MmQ4ODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgVE1vZGVsIHRNb2RlbF87Ci0gICAgCi0gIHB1YmxpYyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChUTW9kZWwgdE1vZGVsLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIodE1vZGVsLmdldE5hbWVTdHJpbmcoKSxtb2RlbCk7Ci0gICAgdE1vZGVsXyA9IHRNb2RlbDsKLSAgICBzZXRLZXkodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUTW9kZWwgZ2V0VE1vZGVsKCkKLSAgewotICAgIHJldHVybiB0TW9kZWxfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1VERElNYWluRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9VRERJTWFpbkVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM3MTIwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1VERElNYWluRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVRERJTWFpbkVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICBwcml2YXRlIEhhc2h0YWJsZSByZWdpc3RyeU5hbWVzXzsKLQotICBwdWJsaWMgVURESU1haW5FbGVtZW50KFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgcmVnaXN0cnlOYW1lc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBjb250YWluc1JlZ2lzdHJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAocmVnaXN0cnlOYW1lc18uZ2V0KG5hbWUpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkUmVnaXN0cnlOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmVnaXN0cnlOYW1lc18ucHV0KG5hbWUsQm9vbGVhbi5UUlVFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZVJlZ2lzdHJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJlZ2lzdHJ5TmFtZXNfLnJlbW92ZShuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyUmVnaXN0cnlOYW1lcygpCi0gIHsKLSAgICByZWdpc3RyeU5hbWVzXy5jbGVhcigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQWRkVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQWRkVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NTNhNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0FkZFRvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZFRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c1B1Ymxpc2hTZXJ2aWNlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c1B1Ymxpc2hTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTc5MTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNQdWJsaXNoU2VydmljZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCdXNQdWJsaXNoU2VydmljZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCBpbXBsZW1lbnRzIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotCi0gIHB1YmxpYyBCdXNQdWJsaXNoU2VydmljZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIHJlZ0ZpbmRUb29sXyA9IG5ldyBSZWdGaW5kVG9vbChuZXcgVG9vbE1hbmFnZXIodG9vbE1hbmFnZXIuZ2V0Tm9kZSgpKSwgIiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgU3RyaW5nIHNpbXBsZVN0eWxlU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OLCIiKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMLCIiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgLy8gRW1wdHkvTm9uLWV4aXN0ZW50IHN1YnF1ZXJ5a2V5IGltcGxpZXMgcHVibGlzaCBmb3JtLiBBbGwgZWxzZSBpbXBsaWVzIHF1ZXJ5IGZvcm0uCi0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksc3ViUXVlcnlLZXksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLSAgICAgIAotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUZvcm0uanNwIjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1MaW5rKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDFmNjNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLQotcHVibGljIGNsYXNzIEJ1c2luZXNzRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbAotewotICBwdWJsaWMgQnVzaW5lc3NEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9CdXNpbmVzc0RldGFpbHNGb3JtLmpzcCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjbGVhclByb3BlcnR5VGFibGUoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLGJlLmdldEJ1c2luZXNzS2V5KCkpOwotCi0gICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKGJlLmdldE5hbWVWZWN0b3IoKSxuYW1lVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLG5hbWVWZWN0b3IpOwotCi0gICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihiZS5nZXREZXNjcmlwdGlvblZlY3RvcigpLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gYmUuZ2V0SWRlbnRpZmllckJhZygpOwotICAgIGlmIChpZEJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBpZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGNvcHlJbmRleFZlY3RvcihpZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLGlkVmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMsaWRWZWN0b3IpOwotICAgIH0KLQotICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IGJlLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGNhdEJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBjYXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoY2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksY2F0VmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxjYXRWZWN0b3IpOwotICAgIH0KLQotICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IGJlLmdldERpc2NvdmVyeVVSTHMoKTsKLSAgICBpZiAoZGlzY292ZXJ5VVJMcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoZGlzY292ZXJ5VVJMcy5nZXREaXNjb3ZlcnlVUkxWZWN0b3IoKSxkaXNjb3ZlcnlVUkxWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGRpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NmJhZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJ1c2luZXNzTm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JOb2RlCi17Ci0gIHByaXZhdGUgRGV0YWlsc1Rvb2wgZGV0YWlsc1Rvb2xfOwotICBwcml2YXRlIEJ1c1B1Ymxpc2hTZXJ2aWNlVG9vbCBwdWJsaXNoU2VydmljZVRvb2xfOwotICBwcml2YXRlIE1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sIG1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sXzsKLSAgcHJpdmF0ZSBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sIG1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2xfOwotICBwcml2YXRlIFVucHVibGlzaFRvb2wgdW5wdWJsaXNoVG9vbF87Ci0KLSAgcHVibGljIEJ1c2luZXNzTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBkZXRhaWxzVG9vbF8gPSBuZXcgQnVzaW5lc3NEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9CVVNJTkVTU19ERVRBSUxTIikpOwotICAgIG5ldyBHZXRTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VTIiksQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8pKTsgICAgCi0gICAgcHVibGlzaFNlcnZpY2VUb29sXyA9IG5ldyBCdXNQdWJsaXNoU2VydmljZVRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUFVCTElTSF9TRVJWSUNFIikpOwotICAgIG1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2xfID0gbmV3IE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVMiKSk7Ci0gICAgbWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2xfID0gbmV3IE1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpKTsKLSAgICBuZXcgQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fRkFWT1JJVEVTIikpOwotICAgIHVucHVibGlzaFRvb2xfID0gbmV3IFVucHVibGlzaFRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfVU5QVUJMSVNIX0JVU0lORVNTIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgZGV0YWlsc1Rvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBwdWJsaXNoU2VydmljZVRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgbWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICB1bnB1Ymxpc2hUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9DYXRlZ29yeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9DYXRlZ29yeU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3ZmVjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQ2F0ZWdvcnlOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2F0ZWdvcnlOb2RlIGV4dGVuZHMgTm9kZQotewotICBwdWJsaWMgQ2F0ZWdvcnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ1ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYiKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjcmVhdGVDaGlsZHJlbigpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBjaGlsZHJlbiA9IGVsZW1lbnRfLmdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyk7Ci0gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKGNoaWxkcmVuLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudCljaGlsZHJlbi5uZXh0RWxlbWVudCgpOwotICAgICAgICBDYXRlZ29yeU5vZGUgY2F0ZWdvcnlOb2RlID0gbmV3IENhdGVnb3J5Tm9kZShjYXRlZ29yeUVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGFkZENoaWxkKGNhdGVnb3J5Tm9kZSk7Ci0gICAgICAgIGNhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Tm9kZU5hbWUoKQotICB7Ci0gICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgcmV0dXJuIGNhdGVnb3J5RWxlbWVudC5nZXROYW1lRm9yVHJlZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0U2Vzc2lvbklkKCksbm9kZUlkXyxpc09wZW5fKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFNlc3Npb25JZCgpLG5vZGVJZF8pOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBVRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1dPUktBUkVBOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBVRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1dPUktBUkVBOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWQ2YzViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGZvcm1MaW5rXzsKLQotICBwdWJsaWMgRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCxTdHJpbmcgZm9ybUxpbmspCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgZm9ybUxpbmtfID0gZm9ybUxpbms7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBmb3JtTGlua187Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBjb3B5SW5kZXhWZWN0b3IoVmVjdG9yIHNvdXJjZSxWZWN0b3IgZGVzdGluYXRpb24pCi0gIHsKLSAgICBkZXN0aW5hdGlvbi5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIGZvciAoaW50IGk9MDtpPHNvdXJjZS5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHNvdXJjZS5lbGVtZW50QXQoaSkpOwotICAgICAgbGlzdEVsZW1lbnQuc2V0Vmlld0lkKGkpOwotICAgICAgLy8gVGhlIG5leHQgaXRlbSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGVsZW1lbnQgaXMgdG8gYmUgaW4gbm9uLWVkaXQgc3RhdGUuCi0gICAgICBsaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsaSk7Ci0gICAgICBkZXN0aW5hdGlvbi5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRCdXNpbmVzc2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldEJ1c2luZXNzZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwODkxMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldEJ1c2luZXNzZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgR2V0QnVzaW5lc3Nlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbkxpbmtfOwotICBwdWJsaWMgR2V0QnVzaW5lc3Nlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGVuYWJsZWRJbWFnZVBhdGgsU3RyaW5nIGhpZ2hsaWdodGVkSW1hZ2VQYXRoLFN0cmluZyBhbHQsU3RyaW5nIGFjdGlvbkxpbmspCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixlbmFibGVkSW1hZ2VQYXRoLGhpZ2hsaWdodGVkSW1hZ2VQYXRoLGFsdCk7Ci0gICAgYWN0aW9uTGlua18gPSBhY3Rpb25MaW5rOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBhY3Rpb25MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VJbnRlcmZhY2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VJbnRlcmZhY2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzFmNDhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBHZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbkxpbmtfOwotICBwdWJsaWMgR2V0U2VydmljZUludGVyZmFjZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQsU3RyaW5nIGFjdGlvbkxpbmspCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGFjdGlvbkxpbmtfID0gYWN0aW9uTGluazsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1Njg2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgR2V0U2VydmljZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwcml2YXRlIFN0cmluZyBhY3Rpb25MaW5rXzsKLSAgcHVibGljIEdldFNlcnZpY2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0LFN0cmluZyBhY3Rpb25MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgYWN0aW9uTGlua18gPSBhY3Rpb25MaW5rOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBhY3Rpb25MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0l0ZW1zU3VtbWFyeVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9JdGVtc1N1bW1hcnlUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDdiOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0l0ZW1zU3VtbWFyeVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBJdGVtc1N1bW1hcnlUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmtfOwotCi0gIHB1YmxpYyBJdGVtc1N1bW1hcnlUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2UsU3RyaW5nIGhpZ2hsaWdodGVkSW1hZ2UsU3RyaW5nIGFsdCxpbnQgcXVlcnlJdGVtKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlLGhpZ2hsaWdodGVkSW1hZ2UsYWx0KTsKLSAgICBTdHJpbmdCdWZmZXIgZm9ybUxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2Zvcm1zL0l0ZW1zU3VtbWFyeUZvcm0uanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pLmFwcGVuZCgnPScpLmFwcGVuZChxdWVyeUl0ZW0pOwotCVN0cmluZyBlbmNvZGVkRm9ybUxpbmsgPSBVUkxVdGlscy5lbmNvZGUoZm9ybUxpbmsudG9TdHJpbmcoKSk7Ci0gICAgZm9ybUxpbmtfID0gUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGVuY29kZWRGb3JtTGluayk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBmb3JtTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Mb2dpblRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Mb2dpblRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2YjI1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTG9naW5Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTG9naW5Ub29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIFN0cmluZyBmb3JtTGluayA9ICJ1ZGRpL2Zvcm1zL0xvZ2luVWRkaUZvcm0uanNwIjsKLSAgCi0gIHB1YmxpYyBMb2dpblRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNvbnRyb2xsZXJfID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb0xvZ291dExpbmsoKSAKLSAgewotICAJZm9ybUxpbmsgPSAidWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRvUmVnaXN0cnlMaW5rKCkgCi0gIHsKLSAgCWZvcm1MaW5rID0gIiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRGYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMoKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIGZhdm9yaXRlc05vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZvcml0ZXNNYWluRWxlbWVudCA9IGZhdm9yaXRlc05vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZvcml0ZVJlZ2lzdHJpZXNFbGVtZW50ID0gKFRyZWVFbGVtZW50KShmYXZvcml0ZXNNYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSkubmV4dEVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlUmVnaXN0cmllc0VsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NTdkMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgVG9vbE1hbmFnZXIgaW52aXNpYmxlVG9vbE1hbmFnZXJfOwotICBwcml2YXRlIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sXzsKLQotICBwdWJsaWMgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgInVkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2VuYWJsZWQuZ2lmIiwgInVkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgaW52aXNpYmxlVG9vbE1hbmFnZXJfID0gbmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKGludmlzaWJsZVRvb2xNYW5hZ2VyXywiIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIC8vIEVtcHR5L05vbi1leGlzdGVudCBzdWJxdWVyeWtleSBpbXBsaWVzIHB1Ymxpc2ggZm9ybS4gQWxsIGVsc2UgaW1wbGllcyBxdWVyeSBmb3JtLgotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIHJlZ0ZpbmRUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLQotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiBQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0uanNwIik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtTGluaygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3ODlmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0RmluZFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCBpbXBsZW1lbnRzIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIFRvb2xNYW5hZ2VyIGludmlzaWJsZVRvb2xNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBSZWdGaW5kVG9vbCByZWdGaW5kVG9vbF87Ci0KLSAgcHVibGljIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgInVkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfZW5hYmxlZC5naWYiLCAidWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIGludmlzaWJsZVRvb2xNYW5hZ2VyXyA9IG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlci5nZXROb2RlKCkpOwotICAgIHJlZ0ZpbmRUb29sXyA9IG5ldyBSZWdGaW5kVG9vbChpbnZpc2libGVUb29sTWFuYWdlcl8sIiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgU3RyaW5nIHNpbXBsZVN0eWxlU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgLy8gRW1wdHkvTm9uLWV4aXN0ZW50IHN1YnF1ZXJ5a2V5IGltcGxpZXMgcHVibGlzaCBmb3JtLiBBbGwgZWxzZSBpbXBsaWVzIHF1ZXJ5IGZvcm0uCi0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksc3ViUXVlcnlLZXksZm9ySGlzdG9yeSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0gICAgCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0gICAgICAKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgcmVnRmluZFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0ID0gZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IG51bGw7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5T2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IGdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gICAgICBPYmplY3Qgc3ViUXVlcnlHZXRPYmplY3QgPSBzdWJRdWVyeVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgICAgaWYgKHN1YlF1ZXJ5R2V0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gaXNTdWJRdWVyeUdldCA9ICgoQm9vbGVhbilzdWJRdWVyeUdldE9iamVjdCkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpc1N1YlF1ZXJ5R2V0KQotICAgICAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCI7Ci0gICAgICB9Ci0gICAgICBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgfQotCi0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0Zvcm0uanNwIjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1MaW5rKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL011bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMGM4ODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL011bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHVibGljIGFic3RyYWN0IEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IGtleSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvT3BlblJlZ2lzdHJ5VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL09wZW5SZWdpc3RyeVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEwMWNiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvT3BlblJlZ2lzdHJ5VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI0ICAgMTIyNzUyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA4MDUxMyAgIDIzMTM1MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5SZWdpc3RyeVRvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIAotICBwdWJsaWMgT3BlblJlZ2lzdHJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjb250cm9sbGVyXyA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgCi0gICAgaWYodWRkaVBlcnNwZWN0aXZlLmdldERlZmF1bHRVRERJUmVnaXN0cnkoKSAhPSBudWxsKXsKLSAgICAJc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXREZWZhdWx0VURESVJlZ2lzdHJ5KCkuZ2V0TmFtZSgpKTsKLSAgICAJc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCx1ZGRpUGVyc3BlY3RpdmUuZ2V0RGVmYXVsdFVERElSZWdpc3RyeSgpLmdldElucXVpcnlVUkwoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0RmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZvcml0ZXNOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVzTWFpbkVsZW1lbnQgPSBmYXZvcml0ZXNOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudCA9IChUcmVlRWxlbWVudCkoZmF2b3JpdGVzTWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICAgIHJldHVybiBmYXZvcml0ZVJlZ2lzdHJpZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUHVibGlzaGVkSXRlbXNOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUHVibGlzaGVkSXRlbXNOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTA0ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1B1Ymxpc2hlZEl0ZW1zTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVkSXRlbXNFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUHVibGlzaGVkSXRlbXNOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvckZvbGRlck5vZGUKLXsKLSAgcHVibGljIFB1Ymxpc2hlZEl0ZW1zTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCk7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgewotICAgICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBjcmVhdGVDaGlsZE5vZGUodHJlZUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgICB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICBlbHNlIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IG51bGw7Ci0gICAgc3dpdGNoIChwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIGNoaWxkTm9kZSA9IG5ldyBCdXNpbmVzc05vZGUoZWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICBjaGlsZE5vZGUgPSBuZXcgU2VydmljZUludGVyZmFjZU5vZGUoZWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICB9Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgICAgYWRkQ2hpbGQoY2hpbGROb2RlKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWVsZW1lbnRfOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGludCBwdWJsaXNoZWRJdGVtc1R5cGUgPSBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9CVVNJTkVTU0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRVMiKSxwdWJsaXNoZWRJdGVtc1R5cGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRV9JTlRFUkZBQ0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBpbnQgcHVibGlzaGVkSXRlbXNUeXBlID0gcHVibGlzaGVkSXRlbXNFbGVtZW50LmdldFR5cGUoKTsKLSAgICBzd2l0Y2ggKHB1Ymxpc2hlZEl0ZW1zVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgIHJldHVybiAidWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5nZXRPcGVuSW1hZ2VQYXRoKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWVsZW1lbnRfOwotICAgIGludCBwdWJsaXNoZWRJdGVtc1R5cGUgPSBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIHJldHVybiAidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmdldENsb3NlZEltYWdlUGF0aCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmI4Y2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkZpbmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUXVlcnlOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBGb3JtVG9vbCByZWdGaW5kVG9vbF87Ci0gIHByaXZhdGUgRmluZEFjdGlvbiBmaW5kQWN0aW9uXzsKLSAgcHVibGljIFF1ZXJ5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvcXVlcnkuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUllfUkVTVUxUUykpCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgY3JlYXRlQ2hpbGRyZW4oKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgZmluZEFjdGlvbl8gPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkcmVuKCkKLSAgewotICAgIFZlY3RvciBpbml0aWFsUmVzdWx0cyA9IChWZWN0b3IpZWxlbWVudF8uZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuSU5JVElBTF9SRVNVTFRTKTsKLSAgICBmb3IgKGludCBpPTA7aTxpbml0aWFsUmVzdWx0cy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBpbml0aWFsUmVzdWx0cy5lbGVtZW50QXQoaSk7Ci0gICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJ1c2luZXNzRW50aXR5KQotICAgICAgICBjaGlsZEVsZW1lbnQgPSBuZXcgQnVzaW5lc3NFbGVtZW50KChCdXNpbmVzc0VudGl0eSlvYmplY3QsZWxlbWVudF8uZ2V0TW9kZWwoKSk7Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCdXNpbmVzc1NlcnZpY2UpCi0gICAgICAgIGNoaWxkRWxlbWVudCA9IG5ldyBTZXJ2aWNlRWxlbWVudCgoQnVzaW5lc3NTZXJ2aWNlKW9iamVjdCxlbGVtZW50Xy5nZXRNb2RlbCgpKTsKLSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFRNb2RlbCkKLSAgICAgICAgY2hpbGRFbGVtZW50ID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KChUTW9kZWwpb2JqZWN0LGVsZW1lbnRfLmdldE1vZGVsKCkpOwotICAgICAgaWYgKGNoaWxkRWxlbWVudCAhPSBudWxsKQotICAgICAgICBlbGVtZW50Xy5jb25uZWN0KGNoaWxkRWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgICBjaGlsZE5vZGUgPSBuZXcgQnVzaW5lc3NOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgICAgYWRkQ2hpbGQoY2hpbGROb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBSZXN1bHRzVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUkVTVUxUUyIpKTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRklORCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEZpbmRUb29sUHJvcGVydGllcyhGaW5kQWN0aW9uIGZpbmRBY3Rpb24pCi0gIHsKLSAgICBmaW5kQWN0aW9uXyA9IGZpbmRBY3Rpb247Ci0gICAgcmVnRmluZFRvb2xfLnVwZGF0ZVByb3BlcnR5VGFibGUoZmluZEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgKChSZWdGaW5kVG9vbClyZWdGaW5kVG9vbF8pLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBWZWN0b3IgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgVURESU5hdmlnYXRvck5vZGUgbmF2aWdhdG9yTm9kZSA9IChVRERJTmF2aWdhdG9yTm9kZSljaGlsZE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIG5hdmlnYXRvck5vZGUuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGaW5kQWN0aW9uIGdldEZpbmRBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGZpbmRBY3Rpb25fOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlQYXJlbnROb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlQYXJlbnROb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZjQyZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5UGFyZW50Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFF1ZXJ5UGFyZW50Tm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBRdWVyeVBhcmVudE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpKQotICAgICAgICB7Ci0gICAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShxdWVyeUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKSkKLSAgICAgICAgICBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpKQotICAgICAgICAgIHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKHF1ZXJ5RWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShxdWVyeUVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShRdWVyeUVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSBuZXcgUXVlcnlOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgLy8gQWRkIHJlZ2lzdHJ5IGF1dGhlbnRpY2F0aW9uIHByb3BlcnRpZXMuCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShnZXRQYXJlbnQoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBxdWVyeU5vZGUuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIGFkZENoaWxkKHF1ZXJ5Tm9kZSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfUVVFUklFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9RVUVSSUVTKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfQlVTSU5FU1NFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9TRVJWSUNFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyk7Ci0gICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9TRVJWSUNFX0lOVEVSRkFDRVMiKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAidWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAidWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZnJlc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVmcmVzaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4YTFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVmcmVzaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVmcmVzaFVERElOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHVibGljIFJlZnJlc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiLCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIFJlZnJlc2hVRERJTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnRmluZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdGaW5kVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQ1MTY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdGaW5kVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHVibGljIFJlZ0ZpbmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGluaXREZWZhdWx0UHJvcGVydGllcyh0aGlzKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMsbmV3IEhhc2h0YWJsZSgpKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfUVVFUllfTkFNRSIpKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0KLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSwiIik7Ci0KLSAgICAvLyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotCi0gICAgLy8gUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgLy8gVGhlIGF1dGhlbnRpY2F0aW9uIGlucHV0cyBtdXN0IGJlIGFkZGVkIGxhdGVyIGFzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgd2UgY2FuIGdldCBhIHZhbGlkIGhhbmRsZQotICAgIC8vIHRvIHRoZSBSZWdpc3RyeUVsZW1lbnQgaW4gdGhlIGNhc2Ugb2YgYSBxdWVyeSBub2RlLgotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLQotICAgIC8vIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSwiIik7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBIYXNodGFibGUgc3ViUXVlcmllc1Byb3BlcnRpZXMgPSAoSGFzaHRhYmxlKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gKEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlzdWJRdWVyaWVzUHJvcGVydGllcy5nZXQoc3ViUXVlcnlLZXkpOwotICAgIGlmIChzdWJRdWVyeVByb3BlcnRpZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzdWJRdWVyeVByb3BlcnRpZXMgPSBuZXcgRm9ybVRvb2xQcm9wZXJ0aWVzKCk7Ci0gICAgICBpbml0RGVmYXVsdFByb3BlcnRpZXMoc3ViUXVlcnlQcm9wZXJ0aWVzKTsKLSAgICAgIHN1YlF1ZXJpZXNQcm9wZXJ0aWVzLnB1dChzdWJRdWVyeUtleSxzdWJRdWVyeVByb3BlcnRpZXMpOwotICAgIH0KLSAgICByZXR1cm4gc3ViUXVlcnlQcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5T2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IGdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gICAgICBPYmplY3Qgc3ViUXVlcnlHZXRPYmplY3QgPSBzdWJRdWVyeVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgICAgaWYgKHN1YlF1ZXJ5R2V0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gaXNTdWJRdWVyeUdldCA9ICgoQm9vbGVhbilzdWJRdWVyeUdldE9iamVjdCkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpc1N1YlF1ZXJ5R2V0KQotICAgICAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCI7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAidWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnUHVibGlzaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdQdWJsaXNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWIyZTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdQdWJsaXNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0RmluZFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBUb29sTWFuYWdlciBpbnZpc2libGVUb29sTWFuYWdlcl87Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotICBwdWJsaWMgUmVnUHVibGlzaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgaW52aXNpYmxlVG9vbE1hbmFnZXJfID0gbmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKGludmlzaWJsZVRvb2xNYW5hZ2VyXywiIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTiwiIik7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04sIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLCIiKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgLy8gRW1wdHkvTm9uLWV4aXN0ZW50IHN1YnF1ZXJ5a2V5IGltcGxpZXMgcHVibGlzaCBmb3JtLiBBbGwgZWxzZSBpbXBsaWVzIHF1ZXJ5IGZvcm0uCi0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksc3ViUXVlcnlLZXksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLSAgICAgIAotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AiOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkOTc1OGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbAotewotICBwdWJsaWMgUmVnaXN0cnlEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9SZWdEZXRhaWxzRm9ybS5qc3AiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FLHJlZ0VsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjg3ODQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZWRJdGVtc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlQYXJlbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeU5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgcmVnRGV0YWlsc1Rvb2xfOwotICBwcml2YXRlIFJlZ1B1Ymxpc2hUb29sIHJlZ1B1Ymxpc2hUb29sXzsKLSAgcHJpdmF0ZSBMb2dpblRvb2wgbG9naW5Ub29sXzsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX1BBVEhfU1RBTkRBUkQgPSAidWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1BR0VfUEFUSF9XSVRIX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gInVkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZiI7Ci0gIAotICBwdWJsaWMgUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50ID0gKFF1ZXJ5UGFyZW50RWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHF1ZXJ5UGFyZW50RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNQdWJsaXNoZWRJdGVtc1JlbChyZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCA9IChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaW5Cb3VuZFJlbE5hbWUgPSBldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpOwotICAgICAgICBTdHJpbmcgb3V0Qm91bmRSZWxOYW1lID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChpbkJvdW5kUmVsTmFtZS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkgfHwgaXNQdWJsaXNoZWRJdGVtc1JlbChpbkJvdW5kUmVsTmFtZSkpCi0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKG91dEJvdW5kUmVsTmFtZS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkgfHwgaXNQdWJsaXNoZWRJdGVtc1JlbChvdXRCb3VuZFJlbE5hbWUpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBRdWVyeVBhcmVudEVsZW1lbnQodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9RVUVSSUVTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBlbGVtZW50LmNvbm5lY3QobmV3IFB1Ymxpc2hlZEl0ZW1zRWxlbWVudChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1BVQkxJU0hFRF9CVVNJTkVTU0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0JVU0lORVNTRVNfUEFSRU5ULE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBQdWJsaXNoZWRJdGVtc0VsZW1lbnQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGVsZW1lbnQuY29ubmVjdChuZXcgUHVibGlzaGVkSXRlbXNFbGVtZW50KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9QVUJMSVNIRURfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNQdWJsaXNoZWRJdGVtc1JlbChTdHJpbmcgcmVsKQotICB7Ci0gICAgcmV0dXJuIHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQpIHx8IHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfU0VSVklDRVNfUEFSRU5UKSB8fCByZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50KQotICB7Ci0gICAgUXVlcnlQYXJlbnROb2RlIHF1ZXJ5UGFyZW50Tm9kZSA9IG5ldyBRdWVyeVBhcmVudE5vZGUocXVlcnlQYXJlbnRFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGFkZENoaWxkKHF1ZXJ5UGFyZW50Tm9kZSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc05vZGUgcHVibGlzaGVkSXRlbXNOb2RlID0gbmV3IFB1Ymxpc2hlZEl0ZW1zTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgYWRkQ2hpbGQocHVibGlzaGVkSXRlbXNOb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJlZ0RldGFpbHNUb29sXyA9IG5ldyBSZWdpc3RyeURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXyAsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUdJU1RSWV9ERVRBSUxTIikpOwotICAgIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sID0gbmV3IFJlZ0ZpbmRUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZJTkQiKSk7Ci0gICAgcmVnUHVibGlzaFRvb2xfID0gbmV3IFJlZ1B1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0giKSk7Ci0gICAgbG9naW5Ub29sXyA9IG5ldyBMb2dpblRvb2wodG9vbE1hbmFnZXJfLCB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xPR0lOIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICByZWdGaW5kVG9vbC5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50Xyk7Ci0gICAgcmVnUHVibGlzaFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcygoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZ2V0UmVnRGV0YWlsc1Rvb2woKQotICB7Ci0gICAgcmV0dXJuIHJlZ0RldGFpbHNUb29sXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdQdWJsaXNoVG9vbCBnZXRSZWdQdWJsaXNoVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gcmVnUHVibGlzaFRvb2xfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExvZ2luVG9vbCBnZXRMb2dpblRvb2woKQotICB7Ci0gICAgcmV0dXJuIGxvZ2luVG9vbF87Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgYWRkRGlzY292ZXJlZE5vZGVzKFZlY3RvciBhbGxOb2RlcyxOb2RlIHF1ZXJ5UGFyZW50Tm9kZSxpbnQgcXVlcnlUeXBlKQotICB7Ci0gICAgVmVjdG9yIHF1ZXJ5Tm9kZXMgPSBxdWVyeVBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPHF1ZXJ5Tm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSlxdWVyeU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KXF1ZXJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKHF1ZXJ5VHlwZSA9PSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUykKLSAgICAgICAgYWxsTm9kZXMuYWRkRWxlbWVudChxdWVyeU5vZGUpOwotICAgICAgZWxzZSBpZiAocXVlcnlFbGVtZW50LmdldFF1ZXJ5VHlwZSgpID09IHF1ZXJ5VHlwZSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIGRpc2NvdmVyZWROb2RlcyA9IHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPGRpc2NvdmVyZWROb2Rlcy5zaXplKCk7aisrKQotICAgICAgICAgIGFsbE5vZGVzLmFkZEVsZW1lbnQoZGlzY292ZXJlZE5vZGVzLmVsZW1lbnRBdChqKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZE5vZGVzKFZlY3RvciBhbGxOb2RlcyxOb2RlIHB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgewotICAgIFZlY3RvciBpdGVtTm9kZXMgPSBwdWJsaXNoZWRJdGVtc05vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1Ob2Rlcy5zaXplKCk7aSsrKQotICAgICAgYWxsTm9kZXMuYWRkRWxlbWVudChpdGVtTm9kZXMuZWxlbWVudEF0KGkpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldEFsbEJ1c2luZXNzTm9kZXMoVmVjdG9yIGFsbEJ1c2luZXNzTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhhbGxCdXNpbmVzc05vZGVzLHF1ZXJ5UGFyZW50Tm9kZSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsQnVzaW5lc3NOb2RlcyxwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRBbGxTZXJ2aWNlTm9kZXMoVmVjdG9yIGFsbFNlcnZpY2VzTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkRGlzY292ZXJlZE5vZGVzKGFsbFNlcnZpY2VzTm9kZXMscXVlcnlQYXJlbnROb2RlLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsU2VydmljZXNOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0QWxsU2VydmljZUludGVyZmFjZU5vZGVzKFZlY3RvciBhbGxTZXJ2aWNlSW50ZXJmYWNlTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkRGlzY292ZXJlZE5vZGVzKGFsbFNlcnZpY2VJbnRlcmZhY2VOb2RlcyxxdWVyeVBhcmVudE5vZGUsVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsU2VydmljZUludGVyZmFjZU5vZGVzLHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRQdWJsaXNoZWRCdXNpbmVzc05vZGVzKFZlY3RvciBwdWJsaXNoZWRCdXNpbmVzc05vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkQnVzaW5lc3Nlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICBhZGRQdWJsaXNoZWROb2RlcyhwdWJsaXNoZWRCdXNpbmVzc05vZGVzLHB1Ymxpc2hlZEJ1c2luZXNzZXNOb2RlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldFB1Ymxpc2hlZFNlcnZpY2VOb2RlcyhWZWN0b3IgcHVibGlzaGVkU2VydmljZU5vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKHB1Ymxpc2hlZFNlcnZpY2VOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzKFZlY3RvciBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMocHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzLHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXREaXNjb3ZlcmVkTm9kZXMoVmVjdG9yIGRpc2NvdmVyZWROb2RlcyxpbnQgcXVlcnlJdGVtKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcXVlcnlQYXJlbnROb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhkaXNjb3ZlcmVkTm9kZXMscXVlcnlQYXJlbnROb2RlLHF1ZXJ5SXRlbSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaGFzUXVlcnlSZXN1bHRzKE5vZGUgcXVlcnlQYXJlbnROb2RlLGludCBxdWVyeVR5cGUpCi0gIHsKLSAgICBWZWN0b3IgcXVlcmllcyA9IHF1ZXJ5UGFyZW50Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8cXVlcmllcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSAoUXVlcnlOb2RlKXF1ZXJpZXMuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpcXVlcnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChxdWVyeUVsZW1lbnQuZ2V0UXVlcnlUeXBlKCkgPT0gcXVlcnlUeXBlKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNCdXNpbmVzcygpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBoYXNRdWVyeVJlc3VsdHMoZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1NlcnZpY2UoKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRTZXJ2aWNlc05vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA+IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gaGFzUXVlcnlSZXN1bHRzKGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgaWYgKHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBoYXNRdWVyeVJlc3VsdHMoZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVzdWx0c1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZXN1bHRzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjU3ZjZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZXN1bHRzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlc3VsdHNUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmtfOwotCi0gIHB1YmxpYyBSZXN1bHRzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGZvcm1MaW5rXyA9IFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jvb3RDYXRlZ29yeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Sb290Q2F0ZWdvcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMWMwY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jvb3RDYXRlZ29yeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJvb3RDYXRlZ29yeU5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBSb290Q2F0ZWdvcnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLDEsImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjcmVhdGVDaGlsZHJlbigpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBjaGlsZHJlbiA9IGVsZW1lbnRfLmdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyk7Ci0gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKGNoaWxkcmVuLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudCljaGlsZHJlbi5uZXh0RWxlbWVudCgpOwotICAgICAgICBDYXRlZ29yeU5vZGUgY2F0ZWdvcnlOb2RlID0gbmV3IENhdGVnb3J5Tm9kZShjYXRlZ29yeUVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGFkZENoaWxkKGNhdGVnb3J5Tm9kZSk7Ci0gICAgICAgIGNhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJvb3Qgbm9kZTogbm8gbmVlZCBmb3IgdG9nZ2xlIGFjdGlvbi4KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLy8gVGV4dCBvbmx5IG5vZGUuCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2YmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sCi17Ci0gIHB1YmxpYyBTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjbGVhclByb3BlcnR5VGFibGUoKTsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksYnVzU2VydmljZS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYnVzU2VydmljZS5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihidXNTZXJ2aWNlLmdldE5hbWVWZWN0b3IoKSxuYW1lVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKGJ1c1NlcnZpY2UuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKSxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBidXNTZXJ2aWNlLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGNhdEJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBjYXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoY2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksY2F0VmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjOTg0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZURldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wKLXsKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Zvcm0uanNwIikpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpOwotICAgIG5hbWVMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsMCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWVMaXN0RWxlbWVudCk7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKHRNb2RlbC5nZXREZXNjcmlwdGlvblZlY3RvcigpLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gdE1vZGVsLmdldElkZW50aWZpZXJCYWcoKTsKLSAgICBpZiAoaWRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgaWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoaWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxpZFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGlkVmVjdG9yKTsKLSAgICB9Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICBpZiAoY2F0QmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGNhdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGNvcHlJbmRleFZlY3RvcihjYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxjYXRWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTM4ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZU5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIERldGFpbHNUb29sIGRldGFpbHNUb29sXzsKLSAgcHJpdmF0ZSBVbnB1Ymxpc2hUb29sIHVucHVibGlzaFRvb2xfOwotICBwdWJsaWMgU2VydmljZUludGVyZmFjZU5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIikpOwotICAgIG5ldyBHZXRTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VTIiksU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBHZXRCdXNpbmVzc2VzVG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9CVVNJTkVTU0VTIiksU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgbmV3IFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICBuZXcgQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fRkFWT1JJVEVTIikpOwotICAgIHVucHVibGlzaFRvb2xfID0gbmV3IFVucHVibGlzaFRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VOUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRSIpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgZGV0YWlsc1Rvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICB1bnB1Ymxpc2hUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpCi0gIHsKLSAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGV0YWlsc1Rvb2xfLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMTGlzdEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHJldHVybiAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gInRlbXAud3NkbCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZWFjNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBEZXRhaWxzVG9vbCBkZXRhaWxzVG9vbF87Ci0gIHByaXZhdGUgVW5wdWJsaXNoVG9vbCB1bnB1Ymxpc2hUb29sXzsKLSAgcHVibGljIFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IFNlcnZpY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgbmV3IEdldEJ1c2luZXNzZXNUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX0JVU0lORVNTIiksU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBHZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VfSU5URVJGQUNFUyIpLFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8pKTsKLSAgICBuZXcgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICBuZXcgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgIG5ldyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB1bnB1Ymxpc2hUb29sXyA9IG5ldyBVbnB1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfVU5QVUJMSVNIX1NFUlZJQ0UiKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIGRldGFpbHNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgdW5wdWJsaXNoVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMVVJMRnJvbURldGFpbHNUb29sKCkKLSAgewotICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXRhaWxzVG9vbF8uZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICBpZiAod3NkbFVSTExpc3RFbGVtZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICJ0ZW1wLndzZGwiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlLZXlQcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5S2V5UHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhN2RkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlLZXlQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBTdWJRdWVyeUtleVByb3BlcnR5Ci17Ci0gIHByaXZhdGUgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLQotICBwdWJsaWMgU3ViUXVlcnlLZXlQcm9wZXJ0eSgpCi0gIHsKLSAgICBzdWJRdWVyeUtleV8gPSAiIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN1YlF1ZXJ5S2V5KFN0cmluZyBzdWJRdWVyeUtleSkKLSAgewotICAgIHN1YlF1ZXJ5S2V5XyA9IHN1YlF1ZXJ5S2V5OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlUcmFuc2ZlclRhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5ZTYxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlUcmFuc2ZlclRhcmdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLQotcHVibGljIGNsYXNzIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQKLXsKLSAgcHJpdmF0ZSBpbnQgbm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgdG9vbElkXzsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLSAgcHJpdmF0ZSBpbnQgdmlld1Rvb2xJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIEhhc2h0YWJsZSBwYXJlbnRRdWVyeURhdGFfOwotCi0gIHB1YmxpYyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KE5vZGUgbm9kZSxTdHJpbmcgc3ViUXVlcnlLZXksSGFzaHRhYmxlIHBhcmVudFF1ZXJ5RGF0YSkKLSAgewotICAgIG5vZGVJZF8gPSBub2RlLmdldE5vZGVJZCgpOwotICAgIHRvb2xJZF8gPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICB2aWV3SWRfID0gbm9kZS5nZXRWaWV3SWQoKTsKLSAgICB2aWV3VG9vbElkXyA9IG5vZGUuZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHN1YlF1ZXJ5S2V5OwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBwYXJlbnRRdWVyeURhdGFfID0gcGFyZW50UXVlcnlEYXRhOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRWaWV3VG9vbElkKCkKLSAgewotICAgIHJldHVybiB2aWV3VG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbCBnZXRUYXJnZXRGb3JtVG9vbCgpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWRfKTsKLSAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBUb29sIHRvb2wgPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbCh0b29sSWRfKTsKLQotICAgIGlmICh2aWV3SWRfICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbCl0b29sOwotICAgICAgVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyID0gdmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkXyk7Ci0gICAgICBpZiAodmlld1Rvb2xNYW5hZ2VyICE9IG51bGwpCi0gICAgICAgIHRvb2wgPSB2aWV3VG9vbE1hbmFnZXIuZ2V0VG9vbCh2aWV3VG9vbElkXyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRvb2wgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gKEZvcm1Ub29sKXRvb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBIYXNodGFibGUgZ2V0UGFyZW50UXVlcnlEYXRhKCkKLSAgewotICAgIHJldHVybiBwYXJlbnRRdWVyeURhdGFfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllMmI2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0gIHB1YmxpYyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDg1YTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wKLXsKLSAgcHVibGljIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjMzYyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sCi17Ci0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q3ZTM2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sCi17Ci0gIHB1YmxpYyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElNYWluTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzkwMDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLQotLy8gUm9vdCBub2RlIGZvciB0aGUgVURESSBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgVURESU1haW5Ob2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFVERElNYWluTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlciwxLCJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSAoVURESU1haW5FbGVtZW50KWVsZW1lbnRfOwotICAgICAgICAgIHVkZGlNYWluRWxlbWVudC5hZGRSZWdpc3RyeU5hbWUocmVnaXN0cnlFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHJlZ2lzdHJ5RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUkVHSVNUUklFUykpCi0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gKFVERElNYWluRWxlbWVudCllbGVtZW50XzsKLSAgICAgICAgICB1ZGRpTWFpbkVsZW1lbnQucmVtb3ZlUmVnaXN0cnlOYW1lKGNoaWxkRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudDsKLSAgICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgIFN0cmluZyBpbWFnZVBhdGg7Ci0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIGltYWdlUGF0aCA9IFJlZ2lzdHJ5Tm9kZS5JTUFHRV9QQVRIX1dJVEhfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVM7Ci0gICAgZWxzZQotICAgICAgaW1hZ2VQYXRoID0gUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfU1RBTkRBUkQ7Ci0gICAgCi0gICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSBuZXcgUmVnaXN0cnlOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSxpbWFnZVBhdGgpOwotICAgIGFkZENoaWxkKHJlZ05vZGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IE9wZW5SZWdpc3RyeVRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9SRUdJU1RSWSIpKTsKLSAgfQotICAKLSAgLy8gR2l2ZW4gYSBub2RlIHVuZGVyIGEgcGFydGljdWxhciByZWdpc3RyeSBub2RlLCBvYnRhaW4gdGhlIHJlZ2lzdHJ5IG5vZGUuCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKE5vZGUgY3VycmVudE5vZGUpCi0gIHsKLSAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IG51bGw7Ci0gICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgIHsKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKWN1cnJlbnROb2RlOwotICAgIH0KLSAgICBlbHNlIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICB7Ci0gICAgICAvLyBRdWVyeSAtPiBRdWVyeSBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKShjdXJyZW50Tm9kZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUXVlcnlQYXJlbnROb2RlIHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNOb2RlKQotICAgIHsKLSAgICAgIC8vIFF1ZXJ5IGZvbGRlciAtPiBSZWdpc3RyeQotICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpKGN1cnJlbnROb2RlLmdldFBhcmVudCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUgfHwgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgIHsKLSAgICAgIC8vIGl0ZW1Ob2RlIC0+IFB1Ymxpc2hlZCBJdGVtcyBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIC8vIE9SOgotICAgICAgLy8gaXRlbU5vZGUgLT4gUXVlcnlOb2RlIC0+IFF1ZXJ5IGZvbGRlciAtPiBSZWdpc3RyeQotICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpKHBhcmVudE5vZGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkpOwotICAgICAgZWxzZQotICAgICAgICByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSlwYXJlbnROb2RlLmdldFBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVnTm9kZTsgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzhjZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvbGRlck5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTmF2aWdhdG9yRm9sZGVyTm9kZSBleHRlbmRzIEZvbGRlck5vZGUKLXsKLSAgcHVibGljIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU5hdmlnYXRvck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGUwNzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIFVERElOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjYmRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESVBlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI0ICAgMTIyNzUyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmZhdm9yaXRlcy5GYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5PcGVuUmVnaXN0cnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kU2VydmljZVVVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuSUZhdm9yaXRlc1VERElSZWdpc3RyeTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVRERJUGVyc3BlY3RpdmUgZXh0ZW5kcyBQZXJzcGVjdGl2ZQotewotICBwcml2YXRlIEhhc2h0YWJsZSBrbm93blJlZ2lzdHJpZXNfOwotICBwcml2YXRlIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZGVmYXVsdFVERElSZWdpc3RyeV87Ci0gIHByaXZhdGUgTW9kZWwgbmF2aWdhdG9yTW9kZWxfOwotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXJfOwotICBwcml2YXRlIGludCB3c2RsVHlwZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGNhdGVnb3J5TWFuYWdlcnNfOwotICBTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXlfOwotICAKLSAgLy8gV2luZG93IHNpemVzCi0gIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgcHVibGljIFVERElQZXJzcGVjdGl2ZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcigidWRkaSIsY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlcyA9IGNvbnRyb2xsZXJfLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQgZmF2UmVnVHlwZURlZmF1bHQgPSBuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChkZWZhdWx0RmF2b3JpdGVzKTsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gZmF2UmVnaXN0cmllc0RlZmF1bHQgPSBmYXZSZWdUeXBlRGVmYXVsdC5nZXRGYXZvcml0ZXNVRERJUmVnaXN0cmllcygpOwotICAgIGtub3duUmVnaXN0cmllc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZmF2UmVnaXN0cmllc0RlZmF1bHQubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBrbm93blJlZ2lzdHJpZXNfLnB1dChmYXZSZWdpc3RyaWVzRGVmYXVsdFtpXS5nZXRJbnF1aXJ5VVJMKCksZmF2UmVnaXN0cmllc0RlZmF1bHRbaV0pOwotICAgIH0KLSAgICBpZiAoZmF2UmVnaXN0cmllc0RlZmF1bHQubGVuZ3RoID4gMCkKLSAgICAgIGRlZmF1bHRVRERJUmVnaXN0cnlfID0gZmF2UmVnaXN0cmllc0RlZmF1bHRbMF07Ci0gICAgCi0gICAgbmF2aWdhdG9yTW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoInVkZGlNb2RlbCIpOwotICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSBuZXcgVURESU1haW5FbGVtZW50KGdldE1lc3NhZ2UoIk5PREVfTkFNRV9VRERJX01BSU4iKSxuYXZpZ2F0b3JNb2RlbF8pOwotICAgIG5hdmlnYXRvck1vZGVsXy5zZXRSb290RWxlbWVudCh1ZGRpTWFpbkVsZW1lbnQpOwotICAgIG5hdmlnYXRvck1hbmFnZXJfID0gbmV3IE5vZGVNYW5hZ2VyKGNvbnRyb2xsZXJfKTsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gbmV3IFVERElNYWluTm9kZSh1ZGRpTWFpbkVsZW1lbnQsbmF2aWdhdG9yTWFuYWdlcl8pOwotICAgIG5hdmlnYXRvck1hbmFnZXJfLnNldFJvb3ROb2RlKHVkZGlNYWluTm9kZSk7Ci0KLSAgICB3c2RsVHlwZV8gPSBVRERJQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRTsKLSAgICBjYXRlZ29yeU1hbmFnZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGNhdGVnb3J5IG1vZGVscy4KLSAgICBpZiAoYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKCJjb21tb25DYXRlZ29yeU1vZGVscyIpID09IG51bGwpCi0gICAgewotICAgICAgc3luY2hyb25pemVkIChhcHBsaWNhdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZSgiY29tbW9uQ2F0ZWdvcnlNb2RlbHMiKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaHRhYmxlIGNvbW1vbkNhdGVnb3J5TW9kZWxzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkgIAotICAgICAgICAgIENhdGVnb3J5TW9kZWwgbmFpY3NNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXRTZXJ2bGV0Q29udGV4dChhcHBsaWNhdGlvbik7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoIi91ZGRpL2RhdGEvbmFpY3MtZGF0YS50eHQiKTsKLSAgICAgICAgICBuYWljc01vZGVsLnNldERpc3BsYXlOYW1lKGdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0NBVEVHT1JZX05BSUNTIikpOwotICAgICAgICAgIG5haWNzTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5OQUlDU19UTU9ERUxfS0VZKTsKLSAgICAgICAgICBjb21tb25DYXRlZ29yeU1vZGVscy5wdXQoVE1vZGVsLk5BSUNTX1RNT0RFTF9LRVksbmFpY3NNb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCB1bnNwc2NNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCSAgdW5zcHNjTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIHVuc3BzY01vZGVsLnNldERlZmF1bHREYXRhRmlsZSgiL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQiKTsKLSAgICAgICAgICB1bnNwc2NNb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9VTlNQU0NfNzMiKSk7Ci0gICAgICAgICAgdW5zcHNjTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5VTlNQU0NfNzNfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5VTlNQU0NfNzNfVE1PREVMX0tFWSx1bnNwc2NNb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBnZW9Nb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCSAgZ2VvTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIGdlb01vZGVsLnNldERlZmF1bHREYXRhRmlsZSgiL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQiKTsKLSAgICAgICAgICBnZW9Nb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9HRU8iKSk7Ci0gICAgICAgICAgZ2VvTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5JU09fQ0hfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5JU09fQ0hfVE1PREVMX0tFWSxnZW9Nb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgYXBwbGljYXRpb24uc2V0QXR0cmlidXRlKCJjb21tb25DYXRlZ29yeU1vZGVscyIsY29tbW9uQ2F0ZWdvcnlNb2RlbHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGVnb3J5VE1vZGVsS2V5XyA9IG51bGw7Ci0gICAgCi0gICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgZWxzZQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgSGFzaHRhYmxlIGdldEtub3duUmVnaXN0cmllcygpCi0gIHsKLSAgICAvLyBXZSBtdXN0IGFsd2F5cyBxdWVyeSB0aGUgZmF2b3JpdGVzIHRvIHNlZSBpZiBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgd2VyZSBhZGRlZCBvdmVyIHRpbWUuIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIGNhY2hlZC4KLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IChGYXZvcml0ZXNNYWluRWxlbWVudCkoY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZSZWdGb2xkZXJFbGVtZW50ID0gZmF2TWFpbkVsZW1lbnQuZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSZWdGb2xkZXJFbGVtZW50LmdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZmF2UmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gZmF2UmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICBpZiAoa25vd25SZWdpc3RyaWVzXy5nZXQoaW5xdWlyeVVSTCkgPT0gbnVsbCkKLSAgICAgICAga25vd25SZWdpc3RyaWVzXy5wdXQoaW5xdWlyeVVSTCxmYXZSZWdFbGVtZW50LmdldElGYXZvcml0ZXNVRERJUmVnaXN0cnlJbnRlcmZhY2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBrbm93blJlZ2lzdHJpZXNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRLbm93blJlZ2lzdHJ5UHVibGlzaFVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIElGYXZvcml0ZXNVRERJUmVnaXN0cnkga25vd25SZWdpc3RyeSA9IChJRmF2b3JpdGVzVURESVJlZ2lzdHJ5KWdldEtub3duUmVnaXN0cmllcygpLmdldChpbnF1aXJ5VVJMKTsKLSAgICBpZiAoa25vd25SZWdpc3RyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0ga25vd25SZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgICByZXR1cm4gcHVibGlzaFVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEtub3duUmVnaXN0cnlSZWdpc3RyYXRpb25VUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlnZXRLbm93blJlZ2lzdHJpZXMoKS5nZXQoaW5xdWlyeVVSTCk7Ci0gICAgaWYgKGtub3duUmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0ga25vd25SZWdpc3RyeS5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvblVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0KLSAgcHVibGljIGZpbmFsIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZ2V0RGVmYXVsdFVERElSZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdFVERElSZWdpc3RyeV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRVRERJUmVnaXN0cmllcyhTdHJpbmdbXSBpbnF1aXJ5VVJMcywgU3RyaW5nW10gcHVibGlzaFVSTHMpCi0gIHsKLSAgICBpZiAoaW5xdWlyeVVSTHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBIYXNodGFibGUga25vd25SZWdpc3RyaWVzID0gZ2V0S25vd25SZWdpc3RyaWVzKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnF1aXJ5VVJMcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLQkJU3RyaW5nIGlucXVpcnlVUkwgPSBVUkxVdGlscy5kZWNvZGUoaW5xdWlyeVVSTHNbaV0pOwotICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IG51bGw7Ci0gICAgICAgIFN0cmluZyByZWdOYW1lID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IG51bGw7Ci0gICAgICAgIC8vIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHJlZ2lzdHJ5IGlmIGlucXVpcnlVUkwgZG9lcyBub3QgZXhpc3QKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeVVSTCkpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIHBvcHVsYXRlIGFuZCBydW4gYW4gT3BlblJlZ2lzdHJ5QWN0aW9uCi0gICAgICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlblJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlrbm93blJlZ2lzdHJpZXMuZ2V0KGlucXVpcnlVUkwpOwotICAgICAgICBib29sZWFuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzID0gZmFsc2U7Ci0gICAgICAgIEZpbGUgZGlyZWN0b3J5RmlsZSA9IG51bGw7Ci0gICAgICAgIGlmIChrbm93blJlZ2lzdHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaXNoVVJMID0ga25vd25SZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICAgICAgcmVnTmFtZSA9IGtub3duUmVnaXN0cnkuZ2V0TmFtZSgpOwotICAgICAgICAgIHJlZ2lzdHJhdGlvblVSTCA9IGtub3duUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgICAgICAgZGlyZWN0b3J5QnVmZmVyLnNldExlbmd0aCgwKTsKLSAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ05hbWUpOwotICAgICAgICAgIGRpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGRpcmVjdG9yeUZpbGUuZXhpc3RzKCkgJiYgZGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKS5sZW5ndGggPiAwKQotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWdOYW1lID09IG51bGwpCi0gICAgICAgICAgcmVnTmFtZSA9IGlucXVpcnlVUkw7Ci0gICAgICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwgJiYgcHVibGlzaFVSTHMgIT0gbnVsbCAmJiBpIDwgcHVibGlzaFVSTHMubGVuZ3RoICYmIHB1Ymxpc2hVUkxzW2ldICE9IG51bGwpIHsKLSAgICAgICAgICBwdWJsaXNoVVJMID0gVVJMVXRpbHMuZGVjb2RlKHB1Ymxpc2hVUkxzW2ldKTsKLSAgICAgICAgfSAgCi0gICAgICAgIC8vIHBvcHVsYXRlIHRoZSBhY3Rpb24KLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCwgaW5xdWlyeVVSTCk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSwgcmVnTmFtZSk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCwgcHVibGlzaFVSTCk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJBVElPTl9VUkwsIHJlZ2lzdHJhdGlvblVSTCk7Ci0gICAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHByaXZhdGUgcmVnaXN0cnkgY2F0ZWdvcnkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGlzIHJlZ2lzdHJ5LgotICAgICAgICBkaXJlY3RvcnlCdWZmZXIuc2V0TGVuZ3RoKDApOwotICAgICAgICBTdHJpbmcgZW5jb2RlZElucXVpcnlVUkwgPSBVUkxVdGlscy5lbmNvZGUoaW5xdWlyeVVSTCk7Ci0gICAgICAgIGRpcmVjdG9yeUJ1ZmZlci5hcHBlbmQoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSkuYXBwZW5kKGVuY29kZWRJbnF1aXJ5VVJMKS5hcHBlbmQoIi5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIGRpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChkaXJlY3RvcnlGaWxlLmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRpcmVjdG9yeUZpbGUpOwotICAgICAgICAgICAgcC5sb2FkKGZpbik7Ci0gICAgICAgICAgICBmaW4uY2xvc2UoKTsKLSAgICAgICAgICAgIGRpcmVjdG9yeUZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YURpcmVjdG9yeSA9IHAuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSk7Ci0gICAgICAgICAgICBpZiAoZGF0YURpcmVjdG9yeSAhPSBudWxsKQotICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZLGRhdGFEaXJlY3RvcnkpOwotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnJlbW92ZShVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgICAKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShuYXZpZ2F0b3JNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICAgICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgewotICAgICAgICAgIEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uMiA9IG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IHJlZ0VsZW1lbnQuZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpOwotICAgICAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5ICE9IG51bGwpCi0gICAgICAgICAgICBhY3Rpb24yLmxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEodXNlckRlZmluZWRDYXRlZ29yaWVzLGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbjIubGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YShyZWdFbGVtZW50LmdldE5hbWUoKSx1c2VyRGVmaW5lZENhdGVnb3JpZXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoaW5xdWlyeVVSTHMubGVuZ3RoID4gMCkKLSAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIFByZWNvbmRpdGlvbnM6IAotICAvLyBzZXJ2aWNlTmFtZXMgYW5kIHNlcnZpY2VLZXlzIGhhdmUgbGVuZ3RoID49IDEuCi0gIC8vIHJlZ05vZGUgIT0gbnVsbAotICBwcml2YXRlIGZpbmFsIHZvaWQgcHJlbG9hZFNlcnZpY2VzRm9yUmVnaXN0cnkoUmVnaXN0cnlOb2RlIHJlZ05vZGUsU3RyaW5nW10gc2VydmljZU5hbWVzLFN0cmluZ1tdIHNlcnZpY2VLZXlzKQotICB7Ci0gICAgaW50IHJlZ05vZGVJZCA9IHJlZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUtleXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBuYXZpZ2F0b3JNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChyZWdOb2RlSWQpOwotICAgICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHNlcnZpY2VOYW1lc1tpXSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksc2VydmljZUtleXNbaV0pOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgbmF2aWdhdG9yTWFuYWdlcl8ubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRTZXJ2aWNlcyhTdHJpbmdbXSBpbnF1aXJ5VVJMcyxTdHJpbmdbXSBzZXJ2aWNlTmFtZXMsU3RyaW5nW10gc2VydmljZUtleXMpCi0gIHsKLSAgICAvLyBUaGUgYWxnb3JpdGhtIHdpbGwgc2VhcmNoIGZvciBlYWNoIHNlcnZpY2Uga2V5IGluIGVhY2ggaW5xdWlyeSBVUkwuCi0gICAgaWYgKHNlcnZpY2VLZXlzICE9IG51bGwgJiYgc2VydmljZU5hbWVzICE9IG51bGwgJiYgc2VydmljZU5hbWVzLmxlbmd0aCA9PSBzZXJ2aWNlS2V5cy5sZW5ndGgpCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUtleXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucXVpcnlVUkxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFbGltaW5hdGUgZHVwbGljYXRlIGlucXVpcnkgVVJMcy4KLSAgICAgICAgICBIYXNodGFibGUgaW5xdWlyeVVSTHNIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgIGZvciAoaW50IGo9MDtqPGlucXVpcnlVUkxzLmxlbmd0aDtqKyspCi0gICAgICAgICAgICBpbnF1aXJ5VVJMc0hhc2gucHV0KGlucXVpcnlVUkxzW2pdLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgYXZhaWxhYmxlIHJlZ2lzdHJpZXMgYW5kIHVzZSB0aGVtIGlmIHBvc3NpYmxlLgotICAgICAgICAgIE5vZGUgdWRkaU1haW5Ob2RlID0gbmF2aWdhdG9yTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKTsKLSAgICAgICAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaz0wO2s8cmVnaXN0cnlOb2Rlcy5zaXplKCk7aysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSlyZWdpc3RyeU5vZGVzLmVsZW1lbnRBdChrKTsKLSAgICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgZXhpc3RpbmdSZWdpc3RyeUlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICAgICAgICAgIGlmIChpbnF1aXJ5VVJMc0hhc2guZ2V0KGV4aXN0aW5nUmVnaXN0cnlJbnF1aXJ5VVJMKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmVsb2FkU2VydmljZXNGb3JSZWdpc3RyeShyZWdOb2RlLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICAgICAgICAgIGlucXVpcnlVUkxzSGFzaC5yZW1vdmUoZXhpc3RpbmdSZWdpc3RyeUlucXVpcnlVUkwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBFbnVtZXJhdGlvbiBpbnF1aXJ5VVJMc0VudW0gPSBpbnF1aXJ5VVJMc0hhc2gua2V5cygpOwotICAgICAgICAgIHdoaWxlIChpbnF1aXJ5VVJMc0VudW0uaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSAoU3RyaW5nKWlucXVpcnlVUkxzRW51bS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgcHJlbG9hZFVERElSZWdpc3RyaWVzKG5ldyBTdHJpbmdbXSB7aW5xdWlyeVVSTH0sbnVsbCk7Ci0gICAgICAgICAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpbmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgICAgICBwcmVsb2FkU2VydmljZXNGb3JSZWdpc3RyeShyZWdOb2RlLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2F0ZWdvcnlUTW9kZWxLZXkoU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgY2F0ZWdvcnlUTW9kZWxLZXlfID0gY2F0ZWdvcnlUTW9kZWxLZXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlUTW9kZWxLZXkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5VE1vZGVsS2V5XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRDYXRlZ29yeUJyb3dzZXIoQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgVHJlZUVsZW1lbnQgY2F0ZWdvcnlSb290RWxlbWVudCA9IChUcmVlRWxlbWVudCljYXRlZ29yeU1vZGVsLmdldFJvb3RFbGVtZW50KCk7Ci0gICAgUm9vdENhdGVnb3J5Tm9kZSByb290Q2F0ZWdvcnlOb2RlID0gbmV3IFJvb3RDYXRlZ29yeU5vZGUoY2F0ZWdvcnlSb290RWxlbWVudCxub2RlTWFuYWdlcik7Ci0gICAgbm9kZU1hbmFnZXIuc2V0Um9vdE5vZGUocm9vdENhdGVnb3J5Tm9kZSk7Ci0gICAgcm9vdENhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Q2F0ZWdvcnlNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiAoTm9kZU1hbmFnZXIpY2F0ZWdvcnlNYW5hZ2Vyc18uZ2V0KGNhdGVnb3J5VE1vZGVsS2V5Xyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBOb2RlTWFuYWdlciBnZXRDYXRlZ29yeU1hbmFnZXIoQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsKQotICB7Ci0gICAgU3RyaW5nIHRNb2RlbEtleSA9IGNhdGVnb3J5TW9kZWwuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgTm9kZU1hbmFnZXIgY2F0ZWdvcnlNYW5hZ2VyID0gKE5vZGVNYW5hZ2VyKWNhdGVnb3J5TWFuYWdlcnNfLmdldCh0TW9kZWxLZXkpOwotICAgIGlmIChjYXRlZ29yeU1hbmFnZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjYXRlZ29yeU1hbmFnZXIgPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgICAgaW5pdENhdGVnb3J5QnJvd3NlcihjYXRlZ29yeU1vZGVsLGNhdGVnb3J5TWFuYWdlcik7Ci0gICAgICBjYXRlZ29yeU1hbmFnZXJzXy5wdXQodE1vZGVsS2V5LGNhdGVnb3J5TWFuYWdlcik7ICAgICAgCi0gICAgfQotICAgIHJldHVybiBjYXRlZ29yeU1hbmFnZXI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0TmF2aWdhdG9yTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gbmF2aWdhdG9yTWFuYWdlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0V1NETFR5cGUoaW50IHdzZGxUeXBlKQotICB7Ci0gICAgd3NkbFR5cGVfID0gd3NkbFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFdTRExUeXBlKCkKLSAgewotICAgIHJldHVybiB3c2RsVHlwZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhbmVzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZVBlcnNwZWN0aXZlQWN0aW9uTGluaygpCi0gIHsKLSAgICAvL3JldHVybiBTYXZlVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoKTsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gIHsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgewotICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIHJldHVybiBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VbnB1Ymxpc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVW5wdWJsaXNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzIyNzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VbnB1Ymxpc2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVW5wdWJsaXNoVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBVbnB1Ymxpc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgZW5hYmxlSW1hZ2UsIFN0cmluZyBoaWdobGlnaHRJbWFnZSwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBlbmFibGVJbWFnZSwgaGlnaGxpZ2h0SW1hZ2UsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VbnB1Ymxpc2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS91dGlsL1VkZGk0akhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3V0aWwvVWRkaTRqSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhN2IyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3V0aWwvVWRkaTRqSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYxMDA0ICAgMTQ4MDUyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk92ZXJ2aWV3RG9jOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkFjY2Vzc1BvaW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkluc3RhbmNlRGV0YWlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VEZXRhaWxzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVZGRpNGpIZWxwZXIKLXsKLSAgcHVibGljIGZpbmFsIEtleWVkUmVmZXJlbmNlIGdldFdTRExLZXllZFJlZmVyZW5jZSgpCi0gIHsKLSAgICBLZXllZFJlZmVyZW5jZSBrZXlSZWYgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoInR5cGVzIiwgIndzZGxTcGVjIik7Ci0gICAga2V5UmVmLnNldFRNb2RlbEtleSgiVVVJRDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiKTsKLSAgICByZXR1cm4ga2V5UmVmOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRNb2RlbCBuZXdUTW9kZWwoU3RyaW5nIHdzZGxVcmwpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3VE1vZGVsKHdzZGxVcmwsIGdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUTW9kZWwgbmV3VE1vZGVsKFN0cmluZyB3c2RsVXJsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFRNb2RlbCB0TW9kZWwgPSBuZXcgVE1vZGVsKCk7Ci0gICAgdE1vZGVsLnNldFRNb2RlbEtleSgiIik7Ci0gICAgdE1vZGVsLnNldE5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICB0TW9kZWwuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCIiKTsKLSAgICBPdmVydmlld0RvYyBvdmVydmlld0RvYyA9IG5ldyBPdmVydmlld0RvYygpOwotICAgIG92ZXJ2aWV3RG9jLnNldE92ZXJ2aWV3VVJMKHdzZGxVcmwpOwotICAgIHRNb2RlbC5zZXRPdmVydmlld0RvYyhvdmVydmlld0RvYyk7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgVmVjdG9yIGtleVJlZlZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBrZXlSZWZWZWN0b3IuYWRkKGdldFdTRExLZXllZFJlZmVyZW5jZSgpKTsKLSAgICBjYXRCYWcuc2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3Ioa2V5UmVmVmVjdG9yKTsKLSAgICB0TW9kZWwuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICByZXR1cm4gdE1vZGVsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVcmwsIGdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpLCB0TW9kZWxzVGFibGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIERlZmluaXRpb24gZGVmLCBIYXNodGFibGUgdE1vZGVsc1RhYmxlKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gbmV3IEJ1c2luZXNzU2VydmljZSgpOwotICAgIGJzLnNldFNlcnZpY2VLZXkoIiIpOwotICAgIEJpbmRpbmdUZW1wbGF0ZXMgYmluZGluZ1RlbXBsYXRlcyA9IG5ldyBCaW5kaW5nVGVtcGxhdGVzKCk7Ci0gICAgVmVjdG9yIGJpbmRpbmdUZW1wbGF0ZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSAoU2VydmljZVtdKWRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFNlcnZpY2VbMF0pOwotICAgIGlmIChzZXJ2aWNlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFBvcnRbXSBwb3J0cyA9IChQb3J0W10pc2VydmljZXNbMF0uZ2V0UG9ydHMoKS52YWx1ZXMoKS50b0FycmF5KG5ldyBQb3J0WzBdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluc3RhbmNlRGV0YWlscyB0TW9kZWxEZXRhaWxzID0gbmV3IFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgICBWZWN0b3IgdE1vZGVsSW5mb1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpdE1vZGVsc1RhYmxlLmdldChwb3J0c1tpXS5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgdE1vZGVsSW5mb1ZlY3Rvci5hZGQoY3JlYXRlVE1vZGVsSW5zdGFuY2VJbmZvKHdzZGxVcmwsIHBvcnRzW2ldLCB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpKTsKLSAgICAgICAgdE1vZGVsRGV0YWlscy5zZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IodE1vZGVsSW5mb1ZlY3Rvcik7Ci0gICAgICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPSBuZXcgQmluZGluZ1RlbXBsYXRlKCk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoY3JlYXRlRGVzY3JpcHRpb24ocG9ydHNbaV0pKTsKLSAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEFjY2Vzc1BvaW50KGNyZWF0ZUFjY2Vzc1BvaW50KHBvcnRzW2ldKSk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRUTW9kZWxJbnN0YW5jZURldGFpbHModE1vZGVsRGV0YWlscyk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRCaW5kaW5nS2V5KCIiKTsKLSAgICAgICAgYmluZGluZ1RlbXBsYXRlVmVjdG9yLmFkZChiaW5kaW5nVGVtcGxhdGUpOwotICAgICAgfQotICAgIH0KLSAgICBiaW5kaW5nVGVtcGxhdGVzLnNldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcihiaW5kaW5nVGVtcGxhdGVWZWN0b3IpOwotICAgIGJzLnNldEJpbmRpbmdUZW1wbGF0ZXMoYmluZGluZ1RlbXBsYXRlcyk7Ci0gICAgcmV0dXJuIGJzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgQnVzaW5lc3NTZXJ2aWNlIG5ld0J1c2luZXNzU2VydmljZShTdHJpbmcgd3NkbFVybCwgRGVmaW5pdGlvbiBkZWYsIFRNb2RlbFtdIHRNb2RlbHMpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgYnMuc2V0U2VydmljZUtleSgiIik7Ci0gICAgQmluZGluZ1RlbXBsYXRlcyBiaW5kaW5nVGVtcGxhdGVzID0gbmV3IEJpbmRpbmdUZW1wbGF0ZXMoKTsKLSAgICBWZWN0b3IgYmluZGluZ1RlbXBsYXRlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IChTZXJ2aWNlW10pZGVmLmdldFNlcnZpY2VzKCkudmFsdWVzKCkudG9BcnJheShuZXcgU2VydmljZVswXSk7Ci0gICAgaWYgKHNlcnZpY2VzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgUG9ydFtdIHBvcnRzID0gKFBvcnRbXSlzZXJ2aWNlc1swXS5nZXRQb3J0cygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFBvcnRbMF0pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0TW9kZWxzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5zdGFuY2VEZXRhaWxzIHRNb2RlbERldGFpbHMgPSBuZXcgVE1vZGVsSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgdE1vZGVsSW5mb1ZlY3Rvci5hZGQoY3JlYXRlVE1vZGVsSW5zdGFuY2VJbmZvKHdzZGxVcmwsIHBvcnRzW2ldLCB0TW9kZWxzW2pdLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICAgICAgdE1vZGVsRGV0YWlscy5zZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IodE1vZGVsSW5mb1ZlY3Rvcik7Ci0gICAgICAgICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG5ldyBCaW5kaW5nVGVtcGxhdGUoKTsKLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGNyZWF0ZURlc2NyaXB0aW9uKHBvcnRzW2ldKSk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEFjY2Vzc1BvaW50KGNyZWF0ZUFjY2Vzc1BvaW50KHBvcnRzW2ldKSk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldFRNb2RlbEluc3RhbmNlRGV0YWlscyh0TW9kZWxEZXRhaWxzKTsKLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0QmluZGluZ0tleSgiIik7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlVmVjdG9yLmFkZChiaW5kaW5nVGVtcGxhdGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJpbmRpbmdUZW1wbGF0ZXMuc2V0QmluZGluZ1RlbXBsYXRlVmVjdG9yKGJpbmRpbmdUZW1wbGF0ZVZlY3Rvcik7Ci0gICAgYnMuc2V0QmluZGluZ1RlbXBsYXRlcyhiaW5kaW5nVGVtcGxhdGVzKTsKLSAgICByZXR1cm4gYnM7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRXU0RMRGVmaW5pdGlvbihTdHJpbmcgd3NkbFVybCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgICAgU3RyaW5nIHByb3h5U2V0ID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5U2V0Iik7Ci0gICAgICBpZiAocHJveHlTZXQgIT0gbnVsbCAmJiBwcm94eVNldC5lcXVhbHMoInRydWUiKSkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZShTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpKTsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlQYXNzd29yZCIpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVcmwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVEZXNjcmlwdGlvbihQb3J0IHBvcnQpCi0gIHsKLSAgICBTdHJpbmcgZGVzYyA9IG51bGw7Ci0gICAgRWxlbWVudCBlID0gcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6Ci0gICAgICAgICAgY2FzZSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgICAgIHNiLmFwcGVuZCgoKENoYXJhY3RlckRhdGEpbm9kZSkuZ2V0RGF0YSgpKTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBkZXNjID0gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2M7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgVE1vZGVsSW5zdGFuY2VJbmZvIGNyZWF0ZVRNb2RlbEluc3RhbmNlSW5mbyhTdHJpbmcgd3NkbFVybCwgUG9ydCBwb3J0LCBTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgSW5zdGFuY2VEZXRhaWxzIGRldGFpbHMgPSBuZXcgSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgT3ZlcnZpZXdEb2Mgb3ZlcnZpZXdEb2MgPSBuZXcgT3ZlcnZpZXdEb2MoKTsKLSAgICBUTW9kZWxJbnN0YW5jZUluZm8gdE1vZGVsSW5mbyA9IG5ldyBUTW9kZWxJbnN0YW5jZUluZm8oKTsKLSAgICBTdHJpbmdCdWZmZXIgb3ZlcnZpZXdVUkxTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKHdzZGxVcmwpOwotICAgIFN0cmluZyBwb3J0TmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotICAgIGlmIChwb3J0TmFtZSAhPSBudWxsKQotICAgIHsgIAotICAgICAgb3ZlcnZpZXdVUkxTdHJpbmcuYXBwZW5kKCIjIik7Ci0gICAgICBvdmVydmlld1VSTFN0cmluZy5hcHBlbmQocG9ydE5hbWUpOwotICAgIH0KLSAgICBvdmVydmlld0RvYy5zZXRPdmVydmlld1VSTChuZXcgT3ZlcnZpZXdVUkwob3ZlcnZpZXdVUkxTdHJpbmcudG9TdHJpbmcoKSkpOwotICAgIGRldGFpbHMuc2V0T3ZlcnZpZXdEb2Mob3ZlcnZpZXdEb2MpOwotICAgIHRNb2RlbEluZm8uc2V0SW5zdGFuY2VEZXRhaWxzKGRldGFpbHMpOwotICAgIGlmICh0TW9kZWxLZXkgIT0gbnVsbCkKLSAgICAgIHRNb2RlbEluZm8uc2V0VE1vZGVsS2V5KHRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIHRNb2RlbEluZm87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgQWNjZXNzUG9pbnQgY3JlYXRlQWNjZXNzUG9pbnQoUG9ydCBwb3J0KQotICB7Ci0gICAgQWNjZXNzUG9pbnQgYWNjZXNzUG9pbnQgPSBudWxsOwotICAgIExpc3QgbGlzdCA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKQotICAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWxpc3QuZ2V0KGopOwotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICB7ICAKLSAgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gKChTT0FQQWRkcmVzcylleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICBhY2Nlc3NQb2ludCA9IG5ldyBBY2Nlc3NQb2ludChsb2NhdGlvblVSSSwgZ2V0VVJMVHlwZShsb2NhdGlvblVSSSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLSAgICAgICB7Ci0gICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICgoSFRUUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgYWNjZXNzUG9pbnQgPSBuZXcgQWNjZXNzUG9pbnQobG9jYXRpb25VUkksIGdldFVSTFR5cGUobG9jYXRpb25VUkkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhY2Nlc3NQb2ludDsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVVJMX1RZUEVfT1RIRVIgPSAib3RoZXIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVUkxfVFlQRVMgPSAiaHR0cCBodHRwcyBtYWlsIGZ0cCBmYXggcGhvbmUgb3RoZXIiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2V0VVJMVHlwZShTdHJpbmcgdXJsKQotICB7Ci0gICAgaW50IGkgPSB1cmwuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyB0eXBlOwotICAgIGlmIChpID09IC0xKQotICAgICAgdHlwZSA9IFVSTF9UWVBFX09USEVSOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0eXBlID0gdXJsLnN1YnN0cmluZygwLCBpKTsKLSAgICAgIGlmICh0eXBlLmVxdWFscygiIikgfHwgVVJMX1RZUEVTLmluZGV4T2YodHlwZSkgPT0gLTEpCi0gICAgICAgIHR5cGUgPSBVUkxfVFlQRV9PVEhFUjsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTW9ub2xpdGhpY1dTREwoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICByZXR1cm4gaGFzTWVzc2FnZShkZWYpICYmIGhhc1BvcnRUeXBlKGRlZikgJiYgaGFzQmluZGluZyhkZWYpICYmIGhhc1NlcnZpY2UoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW1wbGVtZW50KERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc0ltcG9ydChkZWYpICYmIGhhc1NlcnZpY2UoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW50ZXJmYWNlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc01lc3NhZ2UoZGVmKSAmJiBoYXNQb3J0VHlwZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW50ZXJmYWNlV2l0aEJpbmRpbmdzT25seShEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiAhaGFzU2VydmljZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNNZXNzYWdlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZm9yKEl0ZXJhdG9yIGl0ID0gZGVmLmdldE1lc3NhZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChNZXNzYWdlKWl0Lm5leHQoKSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzUG9ydFR5cGUoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBmb3IoSXRlcmF0b3IgaXQgPSBkZWYuZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChQb3J0VHlwZSlpdC5uZXh0KCkpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0JpbmRpbmcoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBmb3IoSXRlcmF0b3IgaXQgPSBkZWYuZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgaWYgKCEoKEJpbmRpbmcpaXQubmV4dCgpKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNTZXJ2aWNlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuICFkZWYuZ2V0U2VydmljZXMoKS5pc0VtcHR5KCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaGFzSW1wb3J0KERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuICFkZWYuZ2V0SW1wb3J0cygpLmlzRW1wdHkoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEltcG9ydHMoRGVmaW5pdGlvbiBkZWYsIFN0cmluZyB3c2RsVXJsKQotICB7Ci0gIAotCSAgCi0JTWFwIGltcG9ydHNNYXAgPSBkZWYuZ2V0SW1wb3J0cygpOwotICAgIENvbGxlY3Rpb24gdmFsdWVzID0gaW1wb3J0c01hcC52YWx1ZXMoKTsKLSAgICBJdGVyYXRvciBpdCA9IHZhbHVlcy5pdGVyYXRvcigpOwotICAgIAotICAgIFZlY3RvciBpbXBvcnRzVmVjID0gbmV3IFZlY3RvcigpOyAgCi0gICAgZm9yKGludCBpID0wO2l0Lmhhc05leHQoKTtpKyspewotICAgIAlBcnJheUxpc3QgYUxpc3QgPSAoQXJyYXlMaXN0KWl0Lm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaXRJbXBvcnRzID0gYUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUoaXRJbXBvcnRzLmhhc05leHQoKSl7Ci0gICAgICAgIAlpbXBvcnRzVmVjLmFkZChpdEltcG9ydHMubmV4dCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0c1tdID0gbmV3IEltcG9ydFtpbXBvcnRzVmVjLnNpemUoKV0gOwotICAgIEl0ZXJhdG9yIGl0VmVjID0gaW1wb3J0c1ZlYy5pdGVyYXRvcigpOwotICAgIGZvcihpbnQgaiA9IDA7aXRWZWMuaGFzTmV4dCgpO2orKyl7Ci0gICAgCWltcG9ydHNbal0gPSAoSW1wb3J0KWl0VmVjLm5leHQoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgCi0gICAgU3RyaW5nW10gaW1wb3J0U3RyaW5ncyA9IG5ldyBTdHJpbmdbaW1wb3J0cy5sZW5ndGhdOwotICAgIFN0cmluZyBzOwotICAgIGlmICh3c2RsVXJsICE9IG51bGwgJiYgd3NkbFVybC5pbmRleE9mKCcvJykgIT0gLTEpCi0gICAgICBzID0gd3NkbFVybC5zdWJzdHJpbmcoMCwgd3NkbFVybC5sYXN0SW5kZXhPZignLycpKzEpOwotICAgIGVsc2UKLSAgICAgIHMgPSAiIjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydFN0cmluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gaW1wb3J0c1tpXS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgaWYgKGxvY2F0aW9uVVJJLmluZGV4T2YoJzonKSAhPSAtMSkKLSAgICAgICAgc2IuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2IuYXBwZW5kKHMpLmFwcGVuZChsb2NhdGlvblVSSSk7Ci0gICAgICBpbXBvcnRTdHJpbmdzW2ldID0gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGltcG9ydFN0cmluZ3M7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTREwoQnVzaW5lc3NTZXJ2aWNlIGJzLCBVRERJUHJveHkgcHJveHkpCi0gIHsKLSAgICBWZWN0b3IgYmluZGluZ1RlbXBsYXRlVmVjdG9yID0gYnMuZ2V0QmluZGluZ1RlbXBsYXRlcygpLmdldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcigpOwotICAgIGlmIChiaW5kaW5nVGVtcGxhdGVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBCaW5kaW5nVGVtcGxhdGUgYnQgPSAoQmluZGluZ1RlbXBsYXRlKWJpbmRpbmdUZW1wbGF0ZVZlY3Rvci5nZXQoMCk7Ci0gICAgICBUTW9kZWxJbnN0YW5jZURldGFpbHMgdE1vZGVsRGV0YWlscyA9IGJ0LmdldFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgaWYgKHRNb2RlbERldGFpbHMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSB0TW9kZWxEZXRhaWxzLmdldFRNb2RlbEluc3RhbmNlSW5mb1ZlY3RvcigpOwotICAgICAgICBpZiAodE1vZGVsSW5mb1ZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluZm8gPSAoVE1vZGVsSW5zdGFuY2VJbmZvKXRNb2RlbEluZm9WZWN0b3IuZ2V0KDApOwotICAgICAgICAgIEluc3RhbmNlRGV0YWlscyBkZXRhaWxzID0gdE1vZGVsSW5mby5nZXRJbnN0YW5jZURldGFpbHMoKTsKLSAgICAgICAgICBpZiAoZGV0YWlscyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gZGV0YWlscy5nZXRPdmVydmlld0RvYygpOwotICAgICAgICAgICAgaWYgKG92ZXJ2aWV3RG9jICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBwYXJzZShvdmVydmlld0RvYy5nZXRPdmVydmlld1VSTFN0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocHJveHkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgCVN0cmluZyB0TW9kZWxLZXkgPSB0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpOwotICAgICAgICAgIAlpZiAodE1vZGVsS2V5ICE9IG51bGwpCi0gICAgICAgICAgCXsKLSAgICAgICAgICAJICB0cnkKLQkJCSAgewotICAgICAgICAgIAkgICAgVE1vZGVsRGV0YWlsIHQgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleSk7Ci0gICAgICAgICAgCSAgICBpZiAodCAhPSBudWxsKQotICAgICAgICAgIAkgICAgewotICAgICAgICAgICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHQuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAodE1vZGVsVmVjdG9yICE9IG51bGwgJiYgdE1vZGVsVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXU0RMKChUTW9kZWwpdE1vZGVsVmVjdG9yLmdldCgwKSk7Ci0gICAgICAgICAgCSAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAJICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkKLQkJCSAgewotICAgICAgICAgIAkgIH0KLSAgICAgICAgICAJICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKQotCQkJICB7Ci0gICAgICAgICAgCSAgfQotICAgICAgICAgIAl9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTREwoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCk7Ci0gICAgaWYgKG92ZXJ2aWV3RG9jICE9IG51bGwpCi0gICAgICByZXR1cm4gcGFyc2Uob3ZlcnZpZXdEb2MuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIHBhcnNlKFN0cmluZyBzKQotICB7Ci0gICAgaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBzLmluZGV4T2YoJyMnKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9Ccm93c2VyRGV0ZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQnJvd3NlckRldGVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzIwNTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9Ccm93c2VyRGV0ZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdXNlZCB0byBkZXRlY3QgdGhlIHR5cGUgb2YgYnJvd3NlciB1c2VkLiAKLSAqLwotcHVibGljIGNsYXNzIEJyb3dzZXJEZXRlY3QgewotCQotCS8qKgotCSAqIERldGVybWluZSBpZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIgaXMgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVxdWVzdCBUaGUgSFRUUCByZXF1ZXN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xpZW50IGlzIGEgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIHdlYiBicm93c2VyLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewotCQlTdHJpbmcgdXNlckFnZW50ID0gcmVxdWVzdC5nZXRIZWFkZXIoIlVzZXItQWdlbnQiKTsKLQkJCi0JCWlmICh1c2VyQWdlbnQgIT0gbnVsbCAmJiB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIikgIT0gLTEpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQ2hhckFycmF5V3JhcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0NoYXJBcnJheVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmMDg1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQ2hhckFycmF5V3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkNoYXJBcnJheVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlcjsKLQotcHVibGljIGNsYXNzIENoYXJBcnJheVdyYXBwZXIgZXh0ZW5kcyBIdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlcgotewotCXByaXZhdGUgQ2hhckFycmF5V3JpdGVyIGNoYXJBcnJheVdyaXRlcl87Ci0JCi0JcHVibGljIENoYXJBcnJheVdyYXBwZXIoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQl7Ci0JCXN1cGVyKHJlc3BvbnNlKTsKLQkgIGNoYXJBcnJheVdyaXRlcl8gPSBuZXcgQ2hhckFycmF5V3JpdGVyKCk7Ci0JfQotCQotCXB1YmxpYyBQcmludFdyaXRlciBnZXRXcml0ZXIoKQotCXsKLQkJcmV0dXJuIG5ldyBQcmludFdyaXRlcihjaGFyQXJyYXlXcml0ZXJfKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlyZXR1cm4gY2hhckFycmF5V3JpdGVyXy50b1N0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9EaXJVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0RpclV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYThiYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0RpclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLQotcHVibGljIGZpbmFsIGNsYXNzIERpclV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JUTCgpCi0gIHsKLSAgICByZXR1cm4gInJ0bCIuZXF1YWxzKGdldERpcigpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERpcigpCi0gIHsKLSAgICBTdHJpbmcgcnRsID0gInJ0bCI7Ci0gICAgU3RyaW5nIGx0ciA9ICJsdHIiOwotCi0gICAgLy8gZnJvbSBzeXN0ZW0gcHJvcGVydHkKLSAgICBTdHJpbmcgb3JpZW50YXRpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImVjbGlwc2Uub3JpZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGlmIChydGwuZXF1YWxzKG9yaWVudGF0aW9uKSkgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIHJ0bDsKLSAgICBlbHNlIGlmIChsdHIuZXF1YWxzKG9yaWVudGF0aW9uKSkgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIGx0cjsKLQotICAgIC8vIGZyb20gY29tbWFuZCBsaW5lCi0gICAgU3RyaW5nW10gYXJncyA9IFBsYXRmb3JtLmdldENvbW1hbmRMaW5lQXJncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIi1kaXIiLmVxdWFsc0lnbm9yZUNhc2UoYXJnc1tpXSkpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgaWYgKChpICsgMSkgPCBhcmdzLmxlbmd0aCAmJiAicnRsIi5lcXVhbHNJZ25vcmVDYXNlKGFyZ3NbaSArIDFdKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHJ0bDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbHRyOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIHByb3BlcnR5IGlzIHNldC4gSWYgbm90IGRvIG5vdAotICAgIC8vIHJlbHkgb24gdGhlIHZtLgotICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zZ2kubmwudXNlciIpID09IG51bGwpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBsdHI7Ci0KLSAgICAvLyBndWVzcyBmcm9tIGRlZmF1bHQgbG9jYWxlCi0gICAgU3RyaW5nIGxvY2FsZSA9IFBsYXRmb3JtLmdldE5MKCk7Ci0gICAgaWYgKGxvY2FsZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgaWYgKGxvY2FsZS5zdGFydHNXaXRoKCJhciIpIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJmYSIpIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0gICAgICAgIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJoZSIpIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJpdyIpIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0gICAgICAgIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJ1ciIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIHJ0bDsKLSAgICB9Ci0gICAgcmV0dXJuIGx0cjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0hUTUxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0hUTUxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2Y2Zjc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9IVE1MVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqIDIwMDgwMzI0ICAgMTg2NDU2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSFRNTFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjhfRU5DT0RJTkcgPSAiVVRGLTgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX0JSRUFLID0gIjxicj4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX1NFUEFSQVRPUiA9IFN5c3RlbS5nZXRQcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBIVE1MIHRhZyBmb3IgYW4gaW1hZ2UuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEhUTUwgdGFnIGZvciB0aGlzIGltYWdlLgotICAqIEBwYXJhbSBIdHRwU2VydmxldFJlc3BvbnNlIFRvIGVuY29kZSB0aGUgc3JjIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIHNyYyBhdHRyaWJ1dGUgZGVmaW5pbmcgdGhlIHBhdGggdG8gdGhlIGltYWdlIGZpbGUuIFRoaXMgbXVzdCBpbmNsdWRlIHRoZSBjb250ZXh0IHBhdGguCi0gICogQHBhcmFtIFN0cmluZyBPcHRpb25hbCBhbHQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgaW1hZ2UuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgYXR0cmlidXRlLgotICAqIEBwYXJhbSBTdHJpbmcgT3B0aW9uYWwgd2lkdGggb2YgdGhlIHJlbmRlcmVkIGltYWdlLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE9wdGlvbmFsIGhlaWdodCBvZiB0aGUgcmVuZGVyZWQgaW1hZy4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIEhhc2h0YWJsZSBPcHRpb25hbCBrZXktdmFsdWUgcGFpcnMgb2YgYWRkaXRpb25hbCBzdHJpbmdzIHRvIGJlIGFkZGVkIGFzLWlzIHRvIHRoZSB0YWcuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgaW1hZ2UgdGFnLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRIVE1MSW1hZ2VUYWcoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmcgc3JjLFN0cmluZyBhbHQsU3RyaW5nIHdpZHRoLFN0cmluZyBoZWlnaHQsSGFzaHRhYmxlIGFkZGl0aW9uYWxBdHRyaWJ1dGVzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHRhZyA9IG5ldyBTdHJpbmdCdWZmZXIoIjxpbWcgc3JjPVwiIik7Ci0gICAgdGFnLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoc3JjKSkuYXBwZW5kKCdcIicpOwotICAgIGlmIChhbHQgPT0gbnVsbCkKLSAgICAJYWx0ID0gIiI7Ci0gICAgdGFnLmFwcGVuZCgiIGFsdD1cIiIpLmFwcGVuZChhbHQpLmFwcGVuZCgnXCInKTsKLSAgICB0YWcuYXBwZW5kKCIgdGl0bGU9XCIiKS5hcHBlbmQoYWx0KS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKHdpZHRoICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgd2lkdGg9IikuYXBwZW5kKHdpZHRoKTsKLSAgICBpZiAoaGVpZ2h0ICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgaGVpZ2h0PSIpLmFwcGVuZChoZWlnaHQpOwotICAgIHRhZy5hcHBlbmQoIiBib3JkZXI9MCIpOwotICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBhZGRpdGlvbmFsQXR0cmlidXRlcy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICB0YWcuYXBwZW5kKCcgJykuYXBwZW5kKGtleSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoKFN0cmluZylhZGRpdGlvbmFsQXR0cmlidXRlcy5nZXQoa2V5KSkuYXBwZW5kKCdcIicpOwotICAgICAgfQotICAgIH0KLSAgICB0YWcuYXBwZW5kKCc+Jyk7Ci0gICAgcmV0dXJuIHRhZy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBIVE1MIHRhZyBmb3IgdGhpcyBsaW5rLiBUaGUgY29tcGxldGUgdGFnIGNvbnNpc3RzIG9mIHRoZSBvcGVuIHRhZyA8YT4gZm9sbG93ZWQgYnkgYSBzdWJlbGVtZW50IGFuZCwgZmluYWxseSwgYnkgYW4gZW5kIHRhZyA8L2E+LgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHRhZyBvZiB0aGUgbGluay4KLSAgKiBAcGFyYW0gSHR0cFNlcnZsZXRSZXNwb25zZSBUbyBlbmNvZGUgdGhlIGhyZWYgYXR0cmlidXRlLgotICAqIEBwYXJhbSBTdHJpbmcgVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rLiBUaGlzIG11c3QgaW5jbHVkZSB0aGUgY29udGV4dCBwYXRoLgotICAqIEBwYXJhbSBTdHJpbmcgdGFyZ2V0IE9wdGlvbmFsIHRhcmdldCBhdHRyaWJ1dGUgZm9yIHRoZSBsaW5rLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBsaW5rLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBsYWJlbCB3aGljaCBhY3RzIGFzIHRoZSBzdWJlbGVtZW50LiBpLmUuIDxhPmxhYmVsPC9hPi4KLSAgKiBAcGFyYW0gSGFzaHRhYmxlIE9wdGlvbmFsIGtleS12YWx1ZSBwYWlycyBvZiBhZGRpdGlvbmFsIHN0cmluZyBhdHRyaWJ1dGVzIHRvIGJlIGFkZGVkIGFzLWlzIHRvIHRoZSBvcGVuIHRhZy4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRIVE1MTGlua1RhZyhIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZyBocmVmLFN0cmluZyB0YXJnZXQsU3RyaW5nIG5hbWUsU3RyaW5nIGxhYmVsLEhhc2h0YWJsZSBhZGRpdGlvbmFsQXR0cmlidXRlcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciB0YWcgPSBuZXcgU3RyaW5nQnVmZmVyKCI8YSBocmVmPVwiIik7Ci0gICAgdGFnLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoaHJlZikpLmFwcGVuZCgnXCInKTsKLSAgICBpZiAodGFyZ2V0ICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgdGFyZ2V0PVwiIikuYXBwZW5kKHRhcmdldCkuYXBwZW5kKCdcIicpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgbmFtZT1cIiIpLmFwcGVuZChuYW1lKS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKGFkZGl0aW9uYWxBdHRyaWJ1dGVzICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGFkZGl0aW9uYWxBdHRyaWJ1dGVzLmtleXMoKTsKLSAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHRhZy5hcHBlbmQoJyAnKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZCgoU3RyaW5nKWFkZGl0aW9uYWxBdHRyaWJ1dGVzLmdldChrZXkpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHRhZy5hcHBlbmQoJz4nKTsKLSAgICB0YWcuYXBwZW5kKGxhYmVsKTsKLSAgICB0YWcuYXBwZW5kKCI8L2E+Iik7Ci0gICAgcmV0dXJuIHRhZy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBIVE1MIHRhZyBmb3IgYSByZWQgYXN0ZXJpc3QuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEhUTUwgdGFnIGZvciB0aGUgcmVkIGFzdGVyaXNrLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyByZWRBc3RlcmlzaygpCi0gIHsKLSAgICByZXR1cm4gIjxmb250IGNvbG9yPVwiI2ZmMDAwMFwiPio8L2ZvbnQ+IjsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSmF2YXNjcmlwdCBtYW5nbGVkIHZlcnNpb24gb2YgYSBnaXZlbiBpbnB1dCBTdHJpbmcuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEphdmFzY3JpcHQgbWFuZ2xlZCBTdHJpbmcuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpTTWFuZ2xlKFN0cmluZyBpbnB1dCkKLSAgewotICAgIGlmIChpbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuICIiOwotCi0gICAgU3RyaW5nQnVmZmVyIG1hbmdsZWRPdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8aW5wdXQubGVuZ3RoKCk7aSsrKQotICAgIHsKLSAgICAgIGNoYXIgYyA9IGlucHV0LmNoYXJBdChpKTsKLSAgICAgIHN3aXRjaCAoYykKLSAgICAgIHsKLSAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgIG1hbmdsZWRPdXRwdXQuYXBwZW5kKCJcXG4iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgIG1hbmdsZWRPdXRwdXQuYXBwZW5kKCJcXHIiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICBjYXNlICdcIic6Ci0gICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZCgnXFwnKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZChjKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hbmdsZWRPdXRwdXQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRVNTX1RIQU4gPSAiPCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRVNTX1RIQU5fSFRNTF9FTlRJVFkgPSAiJmx0OyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVBVEVSX1RIQU4gPSAiPiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVBVEVSX1RIQU5fSFRNTF9FTlRJVFkgPSAiJmd0OyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEFDRSA9ICIgIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQUNFX0hUTUxfRU5USVRZID0gIiZuYnNwOyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTVBFUlNBTkQgPSAiJiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTVBFUlNBTkRfSFRNTF9FTlRJVFkgPSAiJmFtcDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVPVEFUSU9OID0gIlwiIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFFVT1RBVElPTl9IVE1MX0VOVElUWSA9ICImcXVvdDsiOwotCi0gIC8qKgotICAqIFJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggSFRNTCBlbnRpdGllcyByZXByZXNlbnRpbmcgdGhlc2UgY2hhcmFjdGVycy4KLSAgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIGFsc28gY29udmVydCBub3JtYWwgc3BhY2VzIGludG8gbm9uLWJyZWFraW5nIHNwYWNlcywgd2hpY2ggbWF5IGJlIGdvb2QgZm9yCi0gICogcHJlc2VudGF0aW9uIGJ1dCBub3QgZm9yIGVkaXRpbmcuCi0gICogCi0gICogQHJldHVybiBTdHJpbmcgVGhlIGNvbnZlcnRlZCBTdHJpbmcuIE5vdGU6IE9yZGVyIGlzIGltcG9ydGFudCBzbyB0aGF0IGNvcnJlY3RlZCBlbnRpdHkgcmVmZXJlbmNlcyBhcmUgbm90IHJlLW1hbmdsZWQuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhTdHJpbmcgcykgewotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEFNUEVSU0FORCwgQU1QRVJTQU5EX0hUTUxfRU5USVRZKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBMRVNTX1RIQU4sIExFU1NfVEhBTl9IVE1MX0VOVElUWSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgR1JFQVRFUl9USEFOLCBHUkVBVEVSX1RIQU5fSFRNTF9FTlRJVFkpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFNQQUNFLCBTUEFDRV9IVE1MX0VOVElUWSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgUVVPVEFUSU9OLCBRVU9UQVRJT05fSFRNTF9FTlRJVFkpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggSFRNTCBlbnRpdGllcyByZXByZXNlbnRpbmcgdGhlc2UgY2hhcmFjdGVycwotICAgKiBAcmV0dXJuIFN0cmluZyBUaGUgY29udmVydGVkIFN0cmluZy4gTm90ZTogT3JkZXIgaXMgaW1wb3J0YW50IHNvIHRoYXQgY29ycmVjdGVkIGVudGl0eSByZWZlcmVuY2VzIGFyZSBub3QgcmUtbWFuZ2xlZC4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoU3RyaW5nIHMpIHsKLSAgICAgcyA9IHN0cmluZ1JlcGxhY2UocywgQU1QRVJTQU5ELCBBTVBFUlNBTkRfSFRNTF9FTlRJVFkpOwotICAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBMRVNTX1RIQU4sIExFU1NfVEhBTl9IVE1MX0VOVElUWSk7Ci0gICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEdSRUFURVJfVEhBTiwgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZKTsKLSAgICAgcyA9IHN0cmluZ1JlcGxhY2UocywgUVVPVEFUSU9OLCBRVU9UQVRJT05fSFRNTF9FTlRJVFkpOwotICAgICByZXR1cm4gczsKLSAgIH0KLQotICAvKioKLSAgKiBSZXBsYWNlIEhUTUwgY2hhcmFjdGVyIGVudGl0aWVzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBjaGFyYWN0ZXJzLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBjb252ZXJ0ZWQgU3RyaW5nLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBodG1sRW50aXRpZXNUb0NoYXJhY3RlcnMoU3RyaW5nIHMpIHsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBMRVNTX1RIQU5fSFRNTF9FTlRJVFksIExFU1NfVEhBTik7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZLCBHUkVBVEVSX1RIQU4pOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFNQQUNFX0hUTUxfRU5USVRZLCBTUEFDRSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgQU1QRVJTQU5EX0hUTUxfRU5USVRZLCBBTVBFUlNBTkQpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFFVT1RBVElPTl9IVE1MX0VOVElUWSwgUVVPVEFUSU9OKTsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzdHJpbmdSZXBsYWNlKFN0cmluZyBzLCBTdHJpbmcgb2xkU3RyaW5nLCBTdHJpbmcgbmV3U3RyaW5nKSB7Ci0gICAgU3RyaW5nIHNDb3B5ID0gczsKLSAgICBpbnQgZnJvbUluZGV4ID0gMDsKLSAgICBpbnQgb2xkU3RyaW5nSW5kZXggPSBzQ29weS5pbmRleE9mKG9sZFN0cmluZywgZnJvbUluZGV4KTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgd2hpbGUgKG9sZFN0cmluZ0luZGV4ICE9IC0xKSB7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoc0NvcHkuc3Vic3RyaW5nKDAsIG9sZFN0cmluZ0luZGV4KSk7Ci0gICAgICBzYi5hcHBlbmQobmV3U3RyaW5nKTsKLSAgICAgIHNiLmFwcGVuZChzQ29weS5zdWJzdHJpbmcob2xkU3RyaW5nSW5kZXggKyBvbGRTdHJpbmcubGVuZ3RoKCksIHNDb3B5Lmxlbmd0aCgpKSk7Ci0gICAgICBzQ29weSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICBmcm9tSW5kZXggPSBvbGRTdHJpbmdJbmRleCArIG5ld1N0cmluZy5sZW5ndGgoKTsKLSAgICAgIG9sZFN0cmluZ0luZGV4ID0gc0NvcHkuaW5kZXhPZihvbGRTdHJpbmcsIGZyb21JbmRleCk7Ci0gICAgfQotICAgIHJldHVybiBzQ29weTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViNTk1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUKLXsKLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3ODQ1NDcyMjI3MTEwOTYxTDsKLQotcHVibGljIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgc3VwZXIobWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOGVkZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcgotewotICBwcml2YXRlIEhhc2h0YWJsZSBwYXJhbVRhYmxlXzsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfVFlQRSAgICAgICAgPSAiQ29udGVudC1UeXBlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NVUxUSVBBUlQgICAgICAgICAgID0gIm11bHRpcGFydCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQk9VTkRBUlkgICAgICAgICAgICA9ICJib3VuZGFyeT0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRElTUE9TSVRJT04gPSAiQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9OQU1FICAgICAgICAgICAgICAgID0gIm5hbWU9XCIiOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0lOSVRJQUwgICAgICAgICA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0JPVU5EQVJZICAgICAgICA9IDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX1BBUkFNRVRFUiAgICAgICA9IDI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0JMQU5LICAgICAgICAgICA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0RBVEEgICAgICAgICAgICA9IDQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHBhcnNlclN0YXRlc1tdID0geyJpbml0aWFsIiwiYm91bmRhcnkiLCJwYXJhbWV0ZXIgbmFtZSIsImJsYW5rIGxpbmUiLCJkYXRhIn07Ci0KLSAgcHVibGljIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoSGFzaHRhYmxlIHBhcmFtZXRlcnMpCi0gIHsKLSAgICBwYXJhbVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBpdC5uZXh0KCk7Ci0gICAgICBPYmplY3QgdmFsdWUgPSBwYXJhbWV0ZXJzLmdldChrZXkpOwotICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGlzdCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gKExpc3QpdmFsdWU7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQyID0gbGlzdC5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgICAgICBzYXZlRGF0YShrZXkudG9TdHJpbmcoKSwgaXQyLm5leHQoKS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHZhbHVlLmdldENsYXNzKCkuaXNBcnJheSgpKQotICAgICAgewotICAgICAgICBPYmplY3RbXSBhcnJheSA9IChPYmplY3RbXSl2YWx1ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBzYXZlRGF0YShrZXkudG9TdHJpbmcoKSwgYXJyYXlbaV0udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNhdmVEYXRhKGtleS50b1N0cmluZygpLCB2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIGVuY29kZWQgcG9zdCByZXF1ZXN0IHdpdGggYSBnaXZlbiBlbmNvZGluZy4KLSAgICogSWYgdGhlIGVuY29kaW5nIGlzIG51bGwsIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcuIHV0Zi04IGlzIG5vdCBhCi0gICAqIGJhZCBjaG9pY2UgZm9yIHRoZSBlbmNvZGluZy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHBhcnNlUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ29udGVudC1UeXBlIGhlYWRlciBzaG91bGQgaGF2ZSB0aGUgZm9ybToKLSAgICAvLyBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0uLi4KLSAgICAvLwotICAgIC8vIFJGQzIwNDYgNS4xLjEgcGFnZSAxOSwgcGFyYWdyYXBoIDI6Ci0gICAgLy8gVGhlIENvbnRlbnQtVHlwZSBmaWVsZCBmb3IgbXVsdGlwYXJ0IGVudGl0aWVzIHJlcXVpcmVzIG9uZSBwYXJhbWV0ZXIsICJib3VuZGFyeSIgKG5vIHF1b3RlcykKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSByZXF1ZXN0LmdldEhlYWRlcihIRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICBpZiAoY29udGVudFR5cGUgPT0gbnVsbCB8fCAhY29udGVudFR5cGUuc3RhcnRzV2l0aChIRUFERVJfTVVMVElQQVJUKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKEhFQURFUl9CT1VOREFSWSkgPT0gLTEpCi0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24oIkNvbnRlbnQtVHlwZSBpcyBub3QgbXVsdGlwYXJ0L2Zvcm0tZGF0YSIpOwotCi0gICAgLy8gUkZDMjA0NiA1LjEuMSBwYWdlIDE5LCBwYXJhZ3JhcGggNDoKLSAgICAvLyBUaGUgYm91bmRhcnkgdmFsdWUgbWF5IGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuIFN0cmlwIHRoZXNlIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0gICAgU3RyaW5nIGJvdW5kYXJ5ID0gY29udGVudFR5cGUuc3Vic3RyaW5nKGNvbnRlbnRUeXBlLmluZGV4T2YoSEVBREVSX0JPVU5EQVJZKStIRUFERVJfQk9VTkRBUlkubGVuZ3RoKCksY29udGVudFR5cGUubGVuZ3RoKCkpOwotICAgIGlmIChib3VuZGFyeS5jaGFyQXQoMCkgPT0gJ1wiJyAmJiBib3VuZGFyeS5jaGFyQXQoYm91bmRhcnkubGVuZ3RoKCktMSkgPT0gJ1wiJykKLSAgICAgIGJvdW5kYXJ5ID0gYm91bmRhcnkuc3Vic3RyaW5nKDEsYm91bmRhcnkubGVuZ3RoKCktMSk7Ci0KLSAgICAvLyBSRkMyMDQ2IDUuMS4xIHBhZ2UgMTksIHBhcmFncmFwaCAyOgotICAgIC8vIFRoZSBib3VuZGFyeSBkZWxpbWl0ZXIgbGluZSBpcyB0aGVuIGRlZmluZWQgYXMgYSBsaW5lIGNvbnNpc3RpbmcgZW50aXJlbHkKLSAgICAvLyBvZiB0d28gaHlwaGVuIGNoYXJhY3RlcnMuCi0gICAgU3RyaW5nIGRlbGltaXRlciA9ICItLSIrYm91bmRhcnk7Ci0KLSAgICBpZiAocGFyYW1UYWJsZV8gPT0gbnVsbCkKLSAgICAgIHBhcmFtVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGVsc2UKLSAgICAgIHBhcmFtVGFibGVfLmNsZWFyKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpLGVuY29kaW5nKSk7Ci0gICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgcGFyYW1ldGVyTmFtZSA9IG51bGw7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1ldGVyVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBieXRlIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9JTklUSUFMOwotICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gTGluZXMgYXBwZWFyIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UuCi0gICAgICAgIC8vIDEpIGJvdW5kYXJ5IGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhcmFtZXRlciBhbmQgZW5kIG9mIGEgZGF0YSBzZWdtZW50LgotICAgICAgICAvLyAyKSBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9Ii4uLiIgLSB0aGUgbmFtZSBvZiBhIG5ldyBwYXJhbWV0ZXIuCi0gICAgICAgIC8vIDMpIGEgYmxhbmsgbGluZQotICAgICAgICAvLyA0KSBkYXRhCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciwgdGhlIHNlcXVlbmNlIGlzIHJlcGVhdGVkLgotICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGRlbGltaXRlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBieXRlW10gZXhwZWN0ZWRQYXJzZXJTdGF0ZXMgPSB7UEFSU0VSX1NUQVRFX0lOSVRJQUwsUEFSU0VSX1NUQVRFX0RBVEF9OwotICAgICAgICAgIGlmIChpc1ZhbGlkUGFyc2VyU3RhdGUoY3VycmVudFBhcnNlclN0YXRlLGV4cGVjdGVkUGFyc2VyU3RhdGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTYXZlIGFueSBjdXJyZW50IGRhdGEgYW5kIHByZXBhcmUgZm9yIGEgbmV3IHBhcmFtZXRlciBuYW1lLgotICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc2F2ZURhdGEocGFyYW1ldGVyTmFtZSxwYXJhbWV0ZXJWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IG51bGw7Ci0gICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9CT1VOREFSWTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKGdldFBhcnNlckV4Y2VwdGlvbk1lc3NhZ2UoY3VycmVudFBhcnNlclN0YXRlLGV4cGVjdGVkUGFyc2VyU3RhdGVzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGJ5dGVbXSBleHBlY3RlZFBhcnNlclN0YXRlcyA9IHtQQVJTRVJfU1RBVEVfQk9VTkRBUll9OwotICAgICAgICAgIGlmIChpc1ZhbGlkUGFyc2VyU3RhdGUoY3VycmVudFBhcnNlclN0YXRlLGV4cGVjdGVkUGFyc2VyU3RhdGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBPYnRhaW4gdGhlIHBhcmFtZXRlciBuYW1lIHdpdGhvdXQgdGhlIHN1cnJvdW5kaW5nIGRvdWJsZSBxdW90ZXMuIEFjY291bnRzIGZvciBSRkMgMTg2NyB0b28uCi0gICAgICAgICAgICBpbnQgcGFyYW1ldGVyTmFtZVN0YXJ0aW5nUG9zaXRpb24gPSBsaW5lLmluZGV4T2YoSEVBREVSX05BTUUpK0hFQURFUl9OQU1FLmxlbmd0aCgpOwotICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IGxpbmUuc3Vic3RyaW5nKHBhcmFtZXRlck5hbWVTdGFydGluZ1Bvc2l0aW9uLCtwYXJhbWV0ZXJOYW1lU3RhcnRpbmdQb3NpdGlvbitsaW5lLnN1YnN0cmluZyhwYXJhbWV0ZXJOYW1lU3RhcnRpbmdQb3NpdGlvbikuaW5kZXhPZignXCInKSk7Ci0gICAgICAgICAgICBjdXJyZW50UGFyc2VyU3RhdGUgPSBQQVJTRVJfU1RBVEVfUEFSQU1FVEVSOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjdXJyZW50UGFyc2VyU3RhdGUgPT0gUEFSU0VSX1NUQVRFX1BBUkFNRVRFUikKLSAgICAgICAgewotICAgICAgICAgIC8vIEEgYmxhbmsgbGluZSBzaG91bGQgZm9sbG93IHRoZSBQQVJBTUVURVIuIERpc2NhcmQgdGhlIGxpbmUgYW5kIG1vdmUgb24uCi0gICAgICAgICAgY3VycmVudFBhcnNlclN0YXRlID0gUEFSU0VSX1NUQVRFX0JMQU5LOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIEV4cGVjdCB0aGUgbGluZSB0byBjb250YWluIGRhdGEuCi0gICAgICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS5hcHBlbmQobGluZSk7Ci0gICAgICAgICAgY3VycmVudFBhcnNlclN0YXRlID0gUEFSU0VSX1NUQVRFX0RBVEE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIC8vZHVtcFBhcmFtVGFibGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHJlcXVlc3QgcGFyYW1ldGVyIGFzIGEgU3RyaW5nLCBvciBudWxsIGlmIHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3QuCi0gICAqIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG11bHRpcGxlIHZhbHVlcywgb25seSB0aGUgZmlyc3QgdmFsdWUgaXMgcmV0dXJuZWQuIFVzZSBnZXRQYXJhbWV0ZXJWYWx1ZXMoKQotICAgKiBmb3IgcGFyYW1ldGVycyB3aXRoIG11bHRpcGxlIHZhbHVlcy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGFyYW1ldGVyKFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhcmFtVGFibGVfID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24oIlBhcnNlciBjb250YWlucyBubyBwYXJzZWQgZGF0YSIpOwotICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKXBhcmFtVGFibGVfLmdldChwYXJhbWV0ZXIpOwotICAgIHJldHVybiAoKHZhbHVlcyAhPSBudWxsKT8oKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDApKTpudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyYW1UYWJsZV8gPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbigiUGFyc2VyIGNvbnRhaW5zIG5vIHBhcnNlZCBkYXRhIik7Ci0gICAgVmVjdG9yIHZhbHVlc1ZlY3RvciA9IChWZWN0b3IpcGFyYW1UYWJsZV8uZ2V0KHBhcmFtZXRlcik7Ci0gICAgaWYgKHZhbHVlc1ZlY3RvciA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nW10gdmFsdWVzQXJyYXkgPSBuZXcgU3RyaW5nW3ZhbHVlc1ZlY3Rvci5zaXplKCldOwotICAgIGZvciAoaW50IGk9MDtpPHZhbHVlc0FycmF5Lmxlbmd0aDtpKyspCi0gICAgICB2YWx1ZXNBcnJheVtpXSA9IChTdHJpbmcpdmFsdWVzVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICByZXR1cm4gdmFsdWVzQXJyYXk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0UGFyYW1ldGVyTmFtZXMoKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChwYXJhbVRhYmxlXyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKCJQYXJzZXIgY29udGFpbnMgbm8gcGFyc2VkIGRhdGEiKTsKLQotICAgIGludCBzaXplID0gcGFyYW1UYWJsZV8uc2l6ZSgpOwotICAgIGlmIChzaXplID09IDApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgRW51bWVyYXRpb24ga2V5cyA9IHBhcmFtVGFibGVfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzaXplO2krKykKLSAgICAgIG5hbWVzW2ldID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNhdmVEYXRhKFN0cmluZyBwYXJhbWV0ZXJOYW1lLFN0cmluZyBwYXJhbWV0ZXJWYWx1ZSkKLSAgewotICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKXBhcmFtVGFibGVfLmdldChwYXJhbWV0ZXJOYW1lKTsKLSAgICBpZiAodmFsdWVzID09IG51bGwpCi0gICAgICB2YWx1ZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdmFsdWVzLmFkZEVsZW1lbnQocGFyYW1ldGVyVmFsdWUpOwotICAgIHBhcmFtVGFibGVfLnB1dChwYXJhbWV0ZXJOYW1lLHZhbHVlcyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNWYWxpZFBhcnNlclN0YXRlKGJ5dGUgY3VycmVudFN0YXRlLGJ5dGVbXSBleHBlY3RlZFN0YXRlcykKLSAgewotICAgIGJvb2xlYW4gdmFsaWRpdHkgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpPTA7aTxleHBlY3RlZFN0YXRlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gZXhwZWN0ZWRTdGF0ZXNbaV0pCi0gICAgICB7Ci0gICAgICAgIHZhbGlkaXR5ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGl0eTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGdldFBhcnNlckV4Y2VwdGlvbk1lc3NhZ2UoYnl0ZSBjdXJyZW50U3RhdGUsYnl0ZVtdIGV4cGVjdGVkU3RhdGVzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1zZyA9IG5ldyBTdHJpbmdCdWZmZXIoIlBhcnNlciBzdGF0ZSBpbmNvbnNpc3RlbmN5ISIpOwotICAgIG1zZy5hcHBlbmQoJ1xuJyk7Ci0gICAgbXNnLmFwcGVuZCgiQ3VycmVudCBzdGF0ZSAgICA6ICIpLmFwcGVuZChwYXJzZXJTdGF0ZXNbY3VycmVudFN0YXRlXSkuYXBwZW5kKCdcbicpOwotICAgIG1zZy5hcHBlbmQoIkV4cGVjdGVkIHN0YXRlKHMpOiAiKTsKLSAgICBmb3IgKGludCBpPTA7aTxleHBlY3RlZFN0YXRlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIG1zZy5hcHBlbmQocGFyc2VyU3RhdGVzW2V4cGVjdGVkU3RhdGVzW2ldXSk7Ci0gICAgICBpZiAoaSAhPSBleHBlY3RlZFN0YXRlcy5sZW5ndGgtMSkKLSAgICAgICAgbXNnLmFwcGVuZCgiLCAiKTsKLSAgICB9Ci0gICAgbXNnLmFwcGVuZCgnXG4nKTsKLSAgICByZXR1cm4gbXNnLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9RdWlja1NvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9RdWlja1NvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAxOGVlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvUXVpY2tTb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTcgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBRdWlja1NvcnQKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHNvcnQoT2JqZWN0W10gYSxpbnQgbG8saW50IGhpKQotICB7Ci0gICAgT2JqZWN0IHRtcDsKLSAgICBpbnQgaSA9IGxvOwotICAgIGludCBqID0gaGk7Ci0gICAgT2JqZWN0IHggPSBhWyhsbytoaSkvMl07Ci0gICAgQ29sbGF0b3IgY29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOwotCi0gICAgZG8KLSAgICB7Ci0gICAgICB3aGlsZSAoY29sbGF0b3IuY29tcGFyZShhW2ldLnRvU3RyaW5nKCkseC50b1N0cmluZygpKSA8IDApIGkrKzsKLSAgICAgIHdoaWxlIChjb2xsYXRvci5jb21wYXJlKGFbal0udG9TdHJpbmcoKSx4LnRvU3RyaW5nKCkpID4gMCkgai0tOwotICAgICAgaWYgKGkgPD0gaikKLSAgICAgIHsKLSAgICAgICAgdG1wID0gYVtpXTsKLSAgICAgICAgYVtpXSA9IGFbal07Ci0gICAgICAgIGFbal0gPSB0bXA7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgai0tOwotICAgICAgfQotICAgIH0gd2hpbGUgKGkgPD0gaik7Ci0KLSAgICBpZiAobG8gPCBqKQotICAgICAgc29ydChhLGxvLGopOwotICAgIGlmIChpIDwgaGkpCi0gICAgICBzb3J0KGEsaSxoaSk7Ci0gIH0KLQotICAvKgotICAqIFRoaXMgbWV0aG9kIHdpbGwgdXNlIHRoZSBzYW1lIGFsZ29yaXRobSBhcyBhYm92ZQotICAqIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGFueSBudWxscyB3aWxsIGJlIGF0dGFjaGVkCi0gICogYXQgdGhlIGVuZAotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgc29ydChWZWN0b3IgdikKLSAgewotICAgIC8vIGRvIG5vdCBzb3J0IGlmIHZlY3RvciBjb250YWlucyBsZXNzIHRoYW4gMiBlbGVtZW50cwotICAgIGlmICh2LnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsKLSAgCi0gICAgLy8gcHVsbHMgb3V0IHRoZSBudWxscwotICAgIFZlY3RvciBudWxscyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgIE9iamVjdCBvYmogPSB2LmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmoudG9TdHJpbmcoKSA9PSBudWxsKSB7Ci0gICAgICAgIG51bGxzLmFkZChvYmopOwotICAgICAgICB2LnJlbW92ZShpKTsKLSAgICAgICAgaS0tOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIHNvcnQgdGhlIG5vdCBudWxsIG9iamVjdHMKLSAgICBPYmplY3RbXSBvYmpzID0gdi50b0FycmF5KCk7Ci0gICAgLy8gZG8gbm90IHNvcnQgaWYgYXJyYXkgY29udGFpbnMgbGVzcyB0aGFuIDIgb2JqZWN0cwotICAgIGlmIChvYmpzLmxlbmd0aCA+PSAyKQotICAgICAgICBzb3J0KG9ianMsIDAsIG9ianMubGVuZ3RoLTEpOwotCi0gICAgLy8gcmUtY29uc3RydWN0IHRoZSB2ZWN0b3IgZnJvbSB0aGUgc29ydGVkIG9iamVjdHMsIHRoZW4gdGhlIG51bGxzCi0gICAgdi5jbGVhcigpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgb2Jqcy5sZW5ndGg7IGorKykgewotICAgICAgICB2LmFkZChvYmpzW2pdKTsKLSAgICB9Ci0gICAgdi5hZGRBbGwobnVsbHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVHJpbUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1RyaW1GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4NGY5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVHJpbUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyQ2hhaW47Ci1pbXBvcnQgamF2YXguc2VydmxldC5GaWx0ZXJDb25maWc7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLXB1YmxpYyBjbGFzcyBUcmltRmlsdGVyIGltcGxlbWVudHMgRmlsdGVyCi17Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuRmlsdGVyI2luaXQoamF2YXguc2VydmxldC5GaWx0ZXJDb25maWcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBhcmcwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YXguc2VydmxldC5GaWx0ZXIjZG9GaWx0ZXIoamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2UsIGphdmF4LnNlcnZsZXQuRmlsdGVyQ2hhaW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXNwLCBGaWx0ZXJDaGFpbiBmYykgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgQ2hhckFycmF5V3JhcHBlciByZXNwb25zZVdyYXBwZXIgPSBuZXcgQ2hhckFycmF5V3JhcHBlcigoSHR0cFNlcnZsZXRSZXNwb25zZSlyZXNwKTsKLSAgICAvLyBIYWNrIGZvciBUb21jYXQgcGVyZm9ybWFuY2UgcHJvYmxlbSB3aXRoIGZpbHRlcnMuCi0gICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIocmVzcC5nZXRPdXRwdXRTdHJlYW0oKSxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgZmMuZG9GaWx0ZXIocmVxLHJlc3BvbnNlV3JhcHBlcik7Ci0gICAgU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gcmVzcG9uc2VXcmFwcGVyLnRvU3RyaW5nKCk7Ci0gICAgb3N3LndyaXRlKHJlc3BvbnNlU3RyaW5nLnRyaW0oKSk7Ci0gICAgb3N3LmNsb3NlKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YXguc2VydmxldC5GaWx0ZXIjZGVzdHJveSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBkZXN0cm95KCkKLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNWM2NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgxMTE5ICAgMjU1Mzc0IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmFnaW5nIFVSTHMKLSAqIGFzIHVzZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBXZWIgYXBwbGljYXRpb24uCi0gKiBAYXV0aG9yIGNicmVhbGV5QGNhLmlibS5jb20KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFVSTFV0aWxzCi17Ci0JLyoqCi0JICogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHNob3VsZCBub3QgYmUgY29uc3RydWN0ZWQuCi0JICovCi0JcHJpdmF0ZSBVUkxVdGlscyAoKQotCXsKLQl9Ci0KLQkvKioKLQkgKiBVVEYtOAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjggPSAiVVRGLTgiOwotCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgI2VuY29kZShTdHJpbmcsU3RyaW5nKX0KLQkgKiB3aXRoIHNlY29uZCBwYXJhbWV0ZXIgc2V0IHRvIHRoZSAiVVRGLTgiIGVuY29kaW5nLgotCSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gZW5jb2RlLgotCSAqIEByZXR1cm4gVGhlIGVuY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZShTdHJpbmcgcykKLQl7Ci0JCXJldHVybiBlbmNvZGUocyxVVEY4KTsKLQl9Ci0JCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgVVJMRW5jb2RlciNlbmNvZGUoU3RyaW5nLFN0cmluZyl9LAotCSAqIG9ubHkgdGhyb3dzIGFuIHVuY2hlY2tlZCB7QGxpbmsgUnVudGltZUV4Y2VwdGlvbn0gd3JhcHBlZAotCSAqIGFyb3VuZCBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0gaW5zdGVhZCBvZgotCSAqIGFuIHtAbGluayBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9ufS4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGVuY29kZS4KLQkgKiBAcGFyYW0gZW5jIFRoZSBlbmNvZGluZyB0byB1c2UuCi0JICogQHJldHVybiBUaGUgZW5jb2RlZCBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlKFN0cmluZyBzLCBTdHJpbmcgZW5jKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCXJldHVybiBVUkxFbmNvZGVyLmVuY29kZShzLGVuYyk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gVE9ETzogTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIsZSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgI2RlY29kZShTdHJpbmcsU3RyaW5nKX0KLQkgKiB3aXRoIHNlY29uZCBwYXJhbWV0ZXIgc2V0IHRvIHRoZSAiVVRGLTgiIGVuY29kaW5nLgotCSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gZGVjb2RlLgotCSAqIEByZXR1cm4gVGhlIGRlY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlY29kZShTdHJpbmcgcykKLQl7Ci0JCXJldHVybiBkZWNvZGUocyxVVEY4KTsKLQl9Ci0JCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgVVJMRW5jb2RlciNkZWNvZGUoU3RyaW5nLFN0cmluZyl9LAotCSAqIG9ubHkgdGhyb3dzIGFuIHVuY2hlY2tlZCB7QGxpbmsgUnVudGltZUV4Y2VwdGlvbn0gd3JhcHBlZAotCSAqIGFyb3VuZCBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0gaW5zdGVhZCBvZgotCSAqIGFuIHtAbGluayBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9ufS4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGRlY29kZS4KLQkgKiBAcGFyYW0gZW5jIFRoZSBlbmNvZGluZyB0byB1c2UuCi0JICogQHJldHVybiBUaGUgZGVjb2RlZCBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZGVjb2RlKFN0cmluZyBzLCBTdHJpbmcgZW5jKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCXJldHVybiBVUkxEZWNvZGVyLmRlY29kZShzLGVuYyk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gVE9ETzogTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIsZSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogRW5jb2RlcyBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIHVybFN0cmluZyBUaGUgVVJMIHN0cmluZyB0byBlbmNvZGUgCi0JICogQHJldHVybiBUaGUgVVJMIGFzIGFuIGVuY29kZWQgc3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlVVJMU3RyaW5nKFN0cmluZyB1cmxTdHJpbmcpIHsKLQkJdHJ5IHsgCi0JCQlVUkkgdXJpID0gbmV3IFVSSSh1cmxTdHJpbmcpOwotCQkJcmV0dXJuIHVyaS50b0FTQ0lJU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL2RvIG5vdGhpbmcsIHdlIHdpbGwganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZwotCQl9Ci0JCXJldHVybiB1cmxTdHJpbmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjM4ZWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYxMiAgIDE0MjI5MCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTdHJpbmcoU3RyaW5nIGlucHV0KQotICB7Ci0gICAgcmV0dXJuICgoaW5wdXQgIT0gbnVsbCkgJiYgKGlucHV0LnRyaW0oKS5sZW5ndGgoKSA+IDApKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVVSTChTdHJpbmcgaW5wdXQpCi0gIHsKLQkgIHJldHVybiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5tYXRjaGVzKCJbYS16QS1aXFwrXFwtXFwuXSsrOi4qIikpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVJbnRlZ2VyKFN0cmluZyBpbnB1dCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQoaW5wdXQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvWE1MVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmQ1NjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFhNTFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjhfRU5DT0RJTkcgPSAiVVRGLTgiOyAKLQkKLSAgLyoqCi0gICAqIFNlcmlhbGl6ZSBhbiBYTUwgRWxlbWVudCBpbnRvIGEgU3RyaW5nLgotICAgKiBAcGFyYW0gZSBFbGVtZW50IHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIEBwYXJhbSBvbWl0WE1MRGVjbGFyYXRpb24gYm9vbGVhbiByZXByZXNlbnRpbmcgd2hldGhlciBvciBub3QgdG8gb21pdCB0aGUgWE1MIGRlY2xhcmF0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgWE1MIGRvY3VtZW50IGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VyaWFsaXplKEVsZW1lbnQgZSxib29sZWFuIG9taXRYTUxEZWNsYXJhdGlvbikKLSAgewotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwotCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk9NSVRfWE1MX0RFQ0xBUkFUSU9OLCAoKG9taXRYTUxEZWNsYXJhdGlvbikgPyAieWVzIiA6ICJubyIpKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIFVURjhfRU5DT0RJTkcpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldwlTdHJlYW1SZXN1bHQoYmFvcykpOwotCQliYW9zLmNsb3NlKCk7Ci0JCXJldHVybiBuZXcgU3RyaW5nKGJhb3MudG9CeXRlQXJyYXkoKSwgVVRGOF9FTkNPRElORyk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBTZXJpYWxpemUgYW4gWE1MIEVsZW1lbnQgaW50byBhIFN0cmluZy4KLSAgICogQHBhcmFtIGRmIERvY3VtZW50RnJhZ21lbnQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogQHBhcmFtIG9taXRYTUxEZWNsYXJhdGlvbiBib29sZWFuIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0byBvbWl0IHRoZSBYTUwgZGVjbGFyYXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBYTUwgZG9jdW1lbnQgZnJhZ21lbnQuCi0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcmlhbGl6ZShEb2N1bWVudEZyYWdtZW50IGRmLGJvb2xlYW4gb21pdFhNTERlY2xhcmF0aW9uKQotICB7Ci0gICAgaWYgKGRmICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRmKTsKLQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5PTUlUX1hNTF9ERUNMQVJBVElPTiwgKChvbWl0WE1MRGVjbGFyYXRpb24pID8gInllcyIgOiAibm8iKSk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBVVEY4X0VOQ09ESU5HKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcJU3RyZWFtUmVzdWx0KGJhb3MpKTsKLQkJYmFvcy5jbG9zZSgpOwotCQlyZXR1cm4gbmV3IFN0cmluZyhiYW9zLnRvQnl0ZUFycmF5KCksIFVURjhfRU5DT0RJTkcpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBYTUwgRG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2NCdWlsZGVyIERvY3VtZW50QnVpbGRlci4gU2V0dGluZyB0aGlzIHRvIG51bGwgd2lsbCBjcmVhdGUgYSBuZXcgRG9jdW1lbnRCdWlsZGVyLgotICAgKiBAcmV0dXJuIERvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIERvY3VtZW50IGNyZWF0ZU5ld0RvY3VtZW50KERvY3VtZW50QnVpbGRlciBkb2NCdWlsZGVyKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGRvY0J1aWxkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKGZhbHNlKTsKLSAgICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgICBkb2NCdWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICB9Ci0gICAgRG9jdW1lbnQgZG9jID0gZG9jQnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQgaW50byBhbiBFbGVtZW50Ci0gICAqIEBwYXJhbSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudC4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgc3RyaW5nVG9FbGVtZW50KFN0cmluZyBzKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHN0cmluZ1RvRWxlbWVudChzLCBmYWxzZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQgaW50byBhbiBFbGVtZW50Ci0gICAqIEBwYXJhbSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudC4KLSAgICogQHBhcmFtIGJvb2xlYW4gc2V0IHdoZXRoZXIgdGhlIHJldHVybiBFbGVtZW50IHNob3VsZCBiZSBuYW1lc3BhY2UgYXdhcmUuCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IHN0cmluZ1RvRWxlbWVudChTdHJpbmcgcywgYm9vbGVhbiBuYW1lc3BhY2VBd2FyZSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBieXRlQXJyYXlUb0VsZW1lbnQocy5nZXRCeXRlcyhVVEY4X0VOQ09ESU5HKSwgbmFtZXNwYWNlQXdhcmUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnQgdGhlIGJ5dGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudCBpbnRvIGFuIEVsZW1lbnQKLSAgICogQHBhcmFtIGJ5dGVbXSByZXByZXNlbnRhdGlvbiBvZiBhbiBFbGVtZW50LgotICAgKiBAcGFyYW0gYm9vbGVhbiBzZXQgd2hldGhlciB0aGUgcmV0dXJuIEVsZW1lbnQgc2hvdWxkIGJlIG5hbWVzcGFjZSBhd2FyZS4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgYnl0ZUFycmF5VG9FbGVtZW50KGJ5dGVbXSBiLCBib29sZWFuIG5hbWVzcGFjZUF3YXJlKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2NCdWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZShuYW1lc3BhY2VBd2FyZSk7Ci0gICAgZG9jQnVpbGRlckZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICBEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLnBhcnNlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKSk7Ci0gICAgcmV0dXJuIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4MTRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5DbGVhck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExOb2RlOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJXU0RMQWN0aW9uIGV4dGVuZHMgQ2xlYXJOb2RlQWN0aW9uIHsKLQotICBwdWJsaWMgQ2xlYXJXU0RMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQpIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5IHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpOwotICAgIH0KLSAgICBib29sZWFuIHBhcmFtVmFsaWQgPSBmYWxzZTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE1haW5Ob2RlKQotICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFdTRExOb2RlKQotICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZWxzZSB7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIFdTRExNYWluTm9kZSkpIHsKLSAgICAgICAgbm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpIHsKLSAgICAgICAgICBub2RlSUQgPSBub2RlLmdldE5vZGVJZCgpOwotICAgICAgICAgIHBhcmFtVmFsaWQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlSUQpKTsKLSAgICByZXR1cm4gcGFyYW1WYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBpZiAoc3VwZXIucnVuKCkpIHsKLSAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXROb2RlSWQoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgcmV0dXJuICJ3c2RsU3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWEwNzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNETWFwRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlSW5zdGFuY2VBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIENyZWF0ZUluc3RhbmNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIGJvb2xlYW4gcmVzdWx0c1ZhbGlkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgU3RyaW5nIGZyYWdtZW50SUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICBpZiAoZnJhZ21lbnRJRCAhPSBudWxsICYmIGZyYWdtZW50SUQubGVuZ3RoKCkgPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lELCBmcmFnbWVudElEKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBTdHJpbmcgbmFtZUFuY2hvcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCk7Ci0gICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnROYW1lQW5jaG9ySUQobmFtZUFuY2hvcklEKTsKLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgZnJhZ21lbnRJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICBpZiAoZnJhZ21lbnRJRCAhPSBudWxsICYmIGZyYWdtZW50SUQubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnbWVudElEKTsKLSAgICAgIGlmICgoZnJhZyBpbnN0YW5jZW9mIElYU0RNYXBGcmFnbWVudCkgJiYgKChJWFNETWFwRnJhZ21lbnQpZnJhZykuY3JlYXRlSW5zdGFuY2UoKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NzlmMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFN0cmluZ0J1ZmZlciBlbmRQb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIoZ2V0RW5kUG9pbnQoKSk7Ci0gICAgZW5kUG9pbnQuYXBwZW5kKCc/Jyk7Ci0gICAgYWRkUGFyYW1ldGVycyhlbmRQb2ludCk7Ci0gICAgU3RyaW5nIGVuZFBvaW50U3RyaW5nID0gZW5kUG9pbnQudG9TdHJpbmcoKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IE5ldFV0aWxzLmdldFVSTENvbm5lY3Rpb24oZW5kUG9pbnRTdHJpbmcpOwotICAgICAgaWYgKGNvbm4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVjb3JkSHR0cFJlc3BvbnNlKGNvbm4sbWVzc2FnZVF1ZXVlKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldE9wZXJhdGlvbk5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsZW5kUG9pbnRTdHJpbmcpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJJT0V4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwT3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDE4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLkhUVFBVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfQ0hBUlNFVEVRID0gImNoYXJzZXQ9IjsKLSAgCi0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIFN0cmluZyBlbmRQb2ludCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RW5kUG9pbnQoZW5kUG9pbnQpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KShzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuT1BFUkFUSU9OX0VMRU1FTlQsb3BlckVsZW1lbnQpOwotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVuZFBvaW50KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBlbmRQb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5PUEVSQVRJT05fRUxFTUVOVCk7Ci0gICAgaWYgKGVuZFBvaW50LmNoYXJBdChlbmRQb2ludC5sZW5ndGgoKS0xKSAhPSAnLycpCi0gICAgICBlbmRQb2ludC5hcHBlbmQoJy8nKTsKLSAgICBlbmRQb2ludC5hcHBlbmQob3BlckVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gZW5kUG9pbnQudG9TdHJpbmcoKTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZFBhcmFtZXRlcnMoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLk9QRVJBVElPTl9FTEVNRU5UKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGJ1ZmZlci5hcHBlbmQoSFRUUFV0aWwuZ2VuVVJMRW5jb2RlZFBhcmFtZXRlcnMoZnJhZykpOwotICAgICAgaWYgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnJicpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVjb3JkSHR0cFJlc3BvbnNlKFVSTENvbm5lY3Rpb24gY29ubixNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbiA9IG51bGw7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBjb25uLmdldENvbnRlbnRUeXBlKCk7Ci0gICAgICBpZiAoY29udGVudFR5cGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IGNoYXJzZXRFcVBvcyA9IGNvbnRlbnRUeXBlLmluZGV4T2YoQ09OVEVOVF9UWVBFX0NIQVJTRVRFUSk7Ci0gICAgICAgIGlmIChjaGFyc2V0RXFQb3MgIT0gLTEpCi0gICAgICAgICAgaW4gPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpLGNvbnRlbnRUeXBlLnN1YnN0cmluZyhjaGFyc2V0RXFQb3MrQ09OVEVOVF9UWVBFX0NIQVJTRVRFUS5sZW5ndGgoKSkpOwotICAgICAgfQotICAgICAgaWYgKGluID09IG51bGwpCi0gICAgICAgIGluID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbm4uZ2V0SW5wdXRTdHJlYW0oKSk7Ci0gICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihpbik7Ci0gICAgICBTdHJpbmcgczsKLSAgICAgIHdoaWxlICgocyA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHMpOwotICAgICAgYnIuY2xvc2UoKTsKLSAgICAgIGJyID0gbnVsbDsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGJyICE9IG51bGwpCi0gICAgICAgIGJyLmNsb3NlKCk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzExM2Y3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24gZXh0ZW5kcyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24KLXsKLQotICBwdWJsaWMgSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIFN0cmluZyBlbmRQb2ludFN0cmluZyA9IGdldEVuZFBvaW50KCk7Ci0gICAgVVJMQ29ubmVjdGlvbiBjb25uID0gTmV0VXRpbHMuZ2V0VVJMQ29ubmVjdGlvbihlbmRQb2ludFN0cmluZyk7Ci0gICAgaWYgKGNvbm4gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGFkZFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gICAgICBjb25uLnNldERvT3V0cHV0KHRydWUpOwotICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0gICAgICAgIG91dC5wcmludChwYXJhbWV0ZXJzKTsKLSAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgIG91dCA9IG51bGw7Ci0gICAgICAgIHJlY29yZEh0dHBSZXNwb25zZShjb25uLG1lc3NhZ2VRdWV1ZSk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRPcGVyYXRpb25Ob2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIklPRXhjZXB0aW9uIixlKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKG91dCAhPSBudWxsKQotICAgICAgICAgIG91dC5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIkV4Y2VwdGlvbiIsbmV3IElPRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5BQkxFX1RPX0NPTk5FQ1QiLGVuZFBvaW50U3RyaW5nKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFkM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDcwNTEwICAgMTg2Mzc1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDb21waWxlIGVycm9ycyBpbiB3c3Qud3MuZXhwbG9yZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuRW5kcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExCaW5kaW5nRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU09BUE1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIGVuZFBvaW50ID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRFbmRQb2ludChlbmRQb2ludCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBJU09BUE1lc3NhZ2UgdG8gdXNlIGZvciB0aGUgY3VycmVudCBTT0FQIG9wZXJhdGlvbiBpbnZvY2F0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIG9wZXJFbGVtZW50IFRoZSBvcGVyYXRpb24gZWxlbWVudCBmcm9tIHRoZSBXU0RMIG1vZGVsLgotICAgKiAKLSAgICogQHJldHVybiBBbiBJU09BUE1lc3NhZ2UsIG9yIG51bGwgaWYgYSBtZXNzYWdlIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4KLSAgICovCi0gIHByb3RlY3RlZCBJU09BUE1lc3NhZ2UgZ2V0U09BUFJlcXVlc3RNZXNzYWdlKFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50KSB7Ci0JICBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHByb3ZpZGVyID0gb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCk7Ci0JICBpZiAocHJvdmlkZXIgPT0gbnVsbCkKLQkJICByZXR1cm4gbnVsbDsJICAKLQkgIHJldHVybiBwcm92aWRlci5uZXdUcmFuc3BvcnQoKS5uZXdNZXNzYWdlKG9wZXJFbGVtZW50LmdldE1lc3NhZ2VDb250ZXh0KCkpOwotICB9Ci0gIAotICAvKioKLSAgICogUG9wdWxhdGUgdGhlIGdpdmVuIElTT0FQTWVzc2FnZSdzIGhlYWRlciB1c2luZyB0aGUgaW5wdXRzIGZyb20gV1NFCi0gICAqIAotICAgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgSGFzaHRhYmxlIGNvbnRhaW5pbmcgYSBtYXAgb2YgdGhlIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzLgotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgV1NETE9wZXJhdGlvbkVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgV1NETCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0SGVhZGVyQ29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotICAgIFNPQVBNZXNzYWdlVXRpbHMuc2V0SGVhZGVyQ29udGVudEZyb21Nb2RlbChzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQb3B1bGF0ZSB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlJ3MgYm9keSB1c2luZyB0aGUgaW5wdXRzIGZyb20gV1NFCi0gICAqIAotICAgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgSGFzaHRhYmxlIGNvbnRhaW5pbmcgYSBtYXAgb2YgdGhlIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzLgotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgV1NETE9wZXJhdGlvbkVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgV1NETCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlIAotICAgKi8gIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRCb2R5Q29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIAotICAgIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQlTT0FQTWVzc2FnZVV0aWxzLnNldEJvZHlDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotICB9ICAgICAgICAKLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHNvYXBBZGRyZXNzTG9jYXRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KW9wZXJFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExBY3Rpb25JbnB1dHMuU09BUF9SRVNQT05TRV9DQUNIRUQsIG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2VuZXJhdGUgdGhlIFNPQVAgZW52ZWxvcGUgYW5kIGl0cyBjaGlsZHJlbi4gV2UgbmVlZCB0byBjcmVhdGUgYSBET00gZWxlbWVudCB2ZXJzaW9uIHRvIGRpc3BsYXkgYW5kIHRoZSBvYmplY3QgdmVyc2lvbiB0byBleGVjdXRlLgotICAgICAgLy8gPFNPQVAtRU5WOkVudmVsb3BlCi0gICAgICAvLyAgICB4bWxuczpTT0FQLUVOVj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAvLyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgLy8gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAvLyAuLi4KLQotCSAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gZ2V0U09BUFJlcXVlc3RNZXNzYWdlKG9wZXJFbGVtZW50KTsKLQkgIGlmIChzb2FwTWVzc2FnZSA9PSBudWxsKQotCQkgIHRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TVUlUQUJMRV9UUkFOU1BPUlQiKSk7Ci0JICAKLQkgIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoc29hcE1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7CSAgCi0JICBzZXRIZWFkZXJDb250ZW50KG5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotCSAgc2V0Qm9keUNvbnRlbnQobmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgCi0JICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShuYW1lc3BhY2VUYWJsZSk7Ci0KLQkgIC8vIHN0b3JlIHRoZSByZXF1ZXN0Ci0JICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVCwgc29hcE1lc3NhZ2UpOyAgCi0JICAKLQkgIC8vIEV4ZWN1dGUgdGhlIFNPQVAgb3BlcmF0aW9uLgotICAgICAgaWYgKHNvYXBBZGRyZXNzTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsgICAgCQotICAgIAlzb2FwTWVzc2FnZS5zZXRQcm9wZXJ0eShJU09BUE1lc3NhZ2UuUFJPUF9TT0FQX0FDVElPTiwgb3BlckVsZW1lbnQuZ2V0U29hcEFjdGlvbigpKTsKLSAgICAJU3RyaW5nW10gYXV0aFBhcmFtcyA9IHJldHJpZXZlQXV0aFBhcmFtcyhiaW5kaW5nRWxlbWVudCwgc29hcEFkZHJlc3NMb2NhdGlvbik7Ci0gICAgCQotICAgIAkvLyBpbnZva2UhCi0gICAgCUlTT0FQTWVzc2FnZSBzb2FwUmVzcG9uc2UgPSBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKQotICAgIAkJLnNlbmQoc29hcEFkZHJlc3NMb2NhdGlvbiwgYXV0aFBhcmFtc1swXSwgYXV0aFBhcmFtc1sxXSwgc29hcE1lc3NhZ2UpOwotICAgIAkKLSAgICAJLy8gc3RvcmUgdGhlIHJlc3BvbnNlCi0gICAgCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSwgc29hcFJlc3BvbnNlKTsKLSAgICAJCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRPcGVyYXRpb25Ob2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsc29hcEFkZHJlc3NMb2NhdGlvbikpOwotICAgIH0KLSAgICBjYXRjaCAoSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvd0hUVFBUcmFuc3BvcnRFeGNlcHRpb24oYmluZGluZ0VsZW1lbnQsIHNvYXBBZGRyZXNzTG9jYXRpb24sIGUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIFRocm93YWJsZSB0ID0gZTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgVHJhbnNwb3J0RXhjZXB0aW9uICYmIGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgIAl0ID0gZS5nZXRDYXVzZSgpOwotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsIG1lc3NhZ2VRdWV1ZSwgdC5nZXRDbGFzcygpLmdldE5hbWUoKSwgdCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHRocm93SFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsIFN0cmluZyBlbmRwb2ludFN0cmluZywgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBodHRwVHJhbnNwb3J0RXhjZXB0aW9uKSB0aHJvd3MgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGh0dHBUcmFuc3BvcnRFeGNlcHRpb24uZ2V0U3RhdHVzQ29kZSgpID09IEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKQotICAgIHsKLSAgICAgIEVuZHBvaW50IGVuZHBvaW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHBvaW50LnNldFJlcXVpcmVIVFRQQmFzaWNBdXRoKHRydWUpOwotICAgICAgICBlbmRwb2ludC5zZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUobnVsbCk7Ci0gICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgaHR0cFRyYW5zcG9ydEV4Y2VwdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmdbXSByZXRyaWV2ZUF1dGhQYXJhbXMoV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LCBTdHJpbmcgZW5kcG9pbnRTdHJpbmcpCi0gIHsKLQlTdHJpbmdbXSBhdXRoUGFyYW1zID0gbmV3IFN0cmluZ1tdIHsgbnVsbCwgbnVsbCB9OwotICAgIEVuZHBvaW50IGVuZHBvaW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgIGlmIChlbmRwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbmRwb2ludC5pc1JlcXVpcmVIVFRQQmFzaWNBdXRoKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBlbmRwb2ludC5nZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGVuZHBvaW50LmdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpOwotICAgICAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lID09IG51bGwgfHwgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSk7Ci0gICAgICAgICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQpOwotICAgICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotICAgICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGF1dGhQYXJhbXNbMF0gPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gICAgICAgICAgYXV0aFBhcmFtc1sxXSA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXV0aFBhcmFtczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiYjZkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNmb3JtZXIuRnJhZ21lbnRUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uCi17Ci0gIHB1YmxpYyBJbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlQ29udGVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gdmFsaWRhdGUgaGVhZGVycwotICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7ICAgICAgCi0JICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOyAgICAgICAgCi0gICAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBzb2FwSGVhZGVyLmdldEVNZXNzYWdlKCk7Ci0gICAgICAgICAgUGFydCBwYXJ0ID0gc29hcEhlYWRlci5nZXRFUGFydCgpOyAgICAgICAgCQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVkFMSURBVElOR19QQVJBTUVURVIiLCBtZXNzYWdlLmdldFFOYW1lKCkgKyAiICIgKyBwYXJ0LmdldE5hbWUoKSkpOwotICAgICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIHZhbGlkYXRlIGJvZHkKLSAgICAgIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgICAgICBJRnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9WQUxJREFUSU5HX1BBUkFNRVRFUiIsIHBhcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgcmVzdWx0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBGcmFnbWVudFRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjcwYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBJbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBuZXdGaWxlU2VsZWN0ZWRfOwotICBwcml2YXRlIGJvb2xlYW4gc2F2ZUFzU2VsZWN0ZWRfOwotICBwcml2YXRlIGJvb2xlYW4gaXNIZWFkZXJfOwotICAKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5ld0ZpbGVTZWxlY3RlZF8gPSBmYWxzZTsKLSAgICBzYXZlQXNTZWxlY3RlZF8gPSBmYWxzZTsKLSAgICBpc0hlYWRlcl8gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgbmV3RmlsZVNlbGVjdGVkXyA9IGZhbHNlOwotICAgIHNhdmVBc1NlbGVjdGVkXyA9IGZhbHNlOwotICAgIGlzSGVhZGVyXyA9IGZhbHNlOwotICAgIC8qICB0cnkgYW5kIGNhdGNoIGlzIG5lZWRlZCBpZiB3ZSBhcmUgZG9pbmcgZnJhZ21lbnRpemF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAqLwotICAgICAgU3RyaW5nIHN1Ym1pc3Npb25BY3Rpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04pOwotICAgICAgU3RyaW5nIHNvdXJjZUNvbnRlbnRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgICAgaWYgKHNvdXJjZUNvbnRlbnRzICE9IG51bGwpCi0gICAgCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLHNvdXJjZUNvbnRlbnRzKTsgIAotICAgICAgc291cmNlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICAgIGlmIChzb3VyY2VDb250ZW50cyAhPSBudWxsKQotICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULHNvdXJjZUNvbnRlbnRzKTsKLSAgICAgIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUi5lcXVhbHMoc3VibWlzc2lvbkFjdGlvbikpCi0gICAgICB7Ci0gICAgCW5ld0ZpbGVTZWxlY3RlZF8gPSB0cnVlOwotICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLlNFTEVDVEVEX0ZJTEVfSEVBREVSKTsKLSAgICAgICAgaWYgKGZpbGVDb250ZW50cyAhPSBudWxsKQotICAgICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLGZpbGVDb250ZW50cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgbmV3RmlsZVNlbGVjdGVkXyA9IHRydWU7Ci0gICAgICAgIFN0cmluZyBmaWxlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRSk7Ci0gICAgICAgIGlmIChmaWxlQ29udGVudHMgIT0gbnVsbCkKLSAgICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULGZpbGVDb250ZW50cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVNfSEVBREVSLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAJc2F2ZUFzU2VsZWN0ZWRfID0gdHJ1ZTsKLSAgICAJaXNIZWFkZXJfID0gdHJ1ZTsKLSAgICAJcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMuZXF1YWxzKHN1Ym1pc3Npb25BY3Rpb24pKQotICAgICAgewotICAgICAgICAvLyBTYXZlIEFzLi4uIGFjdGlvbgotICAgICAgICBzYXZlQXNTZWxlY3RlZF8gPSB0cnVlOyAgICAgIAotICAgIAlyZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7Ci0gICAgICBpZiAobnNEZWNsYXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UsbnNEZWNsYXJhdGlvbnMpOyAgICAJCi0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8qCi0gICAgfSAgICAgICAKLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlNBWEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJJT0V4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgICAqLwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbiNnZXRTT0FQUmVxdWVzdE1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50KQotICAgKi8KLSAgcHJvdGVjdGVkIElTT0FQTWVzc2FnZSBnZXRTT0FQUmVxdWVzdE1lc3NhZ2UoV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHsJICAKLQkgIHJldHVybiAoSVNPQVBNZXNzYWdlKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVF9UTVApOwotICB9IAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uI3NldEhlYWRlckNvbnRlbnQoamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldEhlYWRlckNvbnRlbnQoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCwgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlKSB7CQotICAgCVN0cmluZyBoZWFkZXJDb250ZW50ID0gb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgIG9wZXJFbGVtZW50LmdldFNPQVBUcmFuc3BvcnRQcm92aWRlcigpLm5ld1RyYW5zcG9ydCgpLm5ld0Rlc2VyaWFsaXplcigpCi0gICAgCS5kZXNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQsIGhlYWRlckNvbnRlbnQsIHNvYXBNZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24jc2V0Qm9keUNvbnRlbnQoamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLSAgICovIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRCb2R5Q29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgYm9keUNvbnRlbnQgPSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UKTsgICAgCi0gICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAJLmRlc2VyaWFsaXplKElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQsIGJvZHlDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgICAKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdhc05ld0ZpbGVTZWxlY3RlZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3RmlsZVNlbGVjdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gd2FzU2F2ZUFzU2VsZWN0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVBc1NlbGVjdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREZWZhdWx0U2F2ZUFzRmlsZU5hbWUoKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIHJldHVybiAobmV3IFN0cmluZ0J1ZmZlcihvcGVyRWxlbWVudC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkpKS5hcHBlbmQoIi50eHQiKS50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVNvdXJjZUNvbnRlbnQoT3V0cHV0U3RyZWFtIG9zKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG9zKTsKLSAgICBpZiAoaXNIZWFkZXJfKQotICAgICAgcHcucHJpbnRsbihvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX0hFQURFUikpOwotICAgIGVsc2UKLSAgIAkgIHB3LnByaW50bG4ob3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCkpOwotICAgIHB3LmNsb3NlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQyMmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24gewotCi0gIHB1YmxpYyBPcGVuV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgd3NkbFVybCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLCB3c2RsVXJsKTsKLSAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBTdHJpbmcgd3NkbFVybCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCByb290RWxlbWVudCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICAvLyBjcmVhdGUgYSBXU0RMRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIFdTREwKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudCh3c2RsVXJsLCByb290RWxlbWVudC5nZXRNb2RlbCgpLCB3c2RsVXJsKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBvcGVuIFdTREwKLSAgICAgIFZlY3RvciBlcnJvck1lc3NhZ2VzID0gd3NkbEVsZW1lbnQubG9hZFdTREwoKTsKLSAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfWFNEX1ZBTElEQVRJT04iKSk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGVycm9yTWVzc2FnZXMuc2l6ZSgpO2krKykKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoU3RyaW5nKWVycm9yTWVzc2FnZXMuZWxlbWVudEF0KGkpKTsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX09QRU5fV1NETCIsd3NkbFVybCkpOyAgICAgICAgICAKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiV1NETEV4Y2VwdGlvbiIsZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJvb3RFbGVtZW50LmNvbm5lY3Qod3NkbEVsZW1lbnQsV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotCi0gICAgLy8gYnVpbGQgdGhlIGRhdGFtb2RlbCBmb3IgdGhpcyBXU0RMRWxlbWVudAotICAgIHdzZGxFbGVtZW50LmJ1aWxkTW9kZWwoKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHNlcnZpY2Ugbm9kZSwgc2VsZWN0IHRoZSBXU0RMIG5vZGUuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBzZXJ2aWNlIG5vZGUuCi0gICAgLy8gSWYgdGhlcmUgaXMganVzdCB0aGUgb25lIHNlcnZpY2UgYW5kIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBiaW5kaW5nIG5vZGUuCi0gICAgLy8gc2VsZWN0IHRoZSBuZXcgV1NETCBub2RlCi0gICAgTm9kZSB3c2RsTm9kZSA9IHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2RsRWxlbWVudCk7Ci0gICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbmV3U2VsZWN0ZWROb2RlSWQgPSB3c2RsTm9kZS5nZXROb2RlSWQoKTsKLSAgICBpZiAoc2VydmljZU5vZGVzLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChiaW5kaW5nTm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IGJpbmRpbmdOb2RlLmdldE5vZGVJZCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IHNlcnZpY2VOb2RlLmdldE5vZGVJZCgpOwotICAgIH0KLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdTZWxlY3RlZE5vZGVJZCk7Ci0gICAgbm9kZU1hbmFnZXIubWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyLmdldE5vZGUobmV3U2VsZWN0ZWROb2RlSWQpKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobmV3U2VsZWN0ZWROb2RlSWQsIDAsIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgdHJ1ZSkpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19PUEVOX1dTRExfU1VDQ0VTU0ZVTCIsIHdzZGxVcmwpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZGQ4NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgbm9kZUlkLFN0cmluZyBmcmFnSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVmcmVzaFdTRExBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyOGQ4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTRExBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uIHsKLQotICBwdWJsaWMgUmVmcmVzaFdTRExBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvV1NETFJlZnJlc2hBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5IHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIFdTRExNYWluTm9kZSkpIHsKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBub2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgd3NkbE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpd3NkbE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb25Db3B5ID0gd3NkbEVsZW1lbnQuZ2V0RGVmaW5pdGlvbigpOwotICAgIFZlY3RvciBzY2hlbWFMaXN0Q29weSA9IHdzZGxFbGVtZW50LmdldFNjaGVtYUxpc3QoKTsKLSAgICB3c2RsRWxlbWVudC5zZXREZWZpbml0aW9uKG51bGwpOwotICAgIHdzZGxFbGVtZW50LnNldFNjaGVtYUxpc3QobmV3IFZlY3RvcigpKTsKLSAgICBpbnQgc2VsZWN0ZWROb2RlSUQgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKS5nZXROb2RlSWQoKTsKLQotICAgIHRyeSB7Ci0gICAgICAvLyBvcGVuIFdTREwKLSAgICAgIFZlY3RvciBlcnJvck1lc3NhZ2VzID0gd3NkbEVsZW1lbnQubG9hZFdTREwoKTsKLSAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnNpemUoKSA+IDApIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9YU0RfVkFMSURBVElPTiIpKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZXJyb3JNZXNzYWdlcy5zaXplKCk7aSsrKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKChTdHJpbmcpZXJyb3JNZXNzYWdlcy5lbGVtZW50QXQoaSkpOwotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfT1BFTl9XU0RMIix3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKTsgICAgICAgICAgCi0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0RGVmaW5pdGlvbihkZWZpbml0aW9uQ29weSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXRTY2hlbWFMaXN0KHNjaGVtYUxpc3RDb3B5KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBidWlsZCB0aGUgZGF0YW1vZGVsIGZvciB0aGlzIFdTRExFbGVtZW50Ci0gICAgd3NkbEVsZW1lbnQuYnVpbGRNb2RlbCgpOwotCi0gICAgLy8gU2VsZWN0IGEgbmV3IG5vZGUgaWYgdGhlIHByZXZpb3VzIHNlbGVjdGVkIG5vZGUgbm8gbG9uZ2VyIGV4aXN0cwotICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHNlcnZpY2Ugbm9kZSwgc2VsZWN0IHRoZSBXU0RMIG5vZGUuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBzZXJ2aWNlIG5vZGUuCi0gICAgLy8gSWYgdGhlcmUgaXMganVzdCB0aGUgb25lIHNlcnZpY2UgYW5kIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBiaW5kaW5nIG5vZGUuCi0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJRCk7Ci0gICAgaWYgKG5vZGUgPT0gbnVsbCkgewotICAgICAgc2VsZWN0ZWROb2RlSUQgPSB3c2RsTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAoc2VydmljZU5vZGVzLnNpemUoKSA9PSAxKQotICAgICAgewotICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICAgIHNlbGVjdGVkTm9kZUlEID0gYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlbGVjdGVkTm9kZUlEID0gc2VydmljZU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICB9Ci0gICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChzZWxlY3RlZE5vZGVJRCk7Ci0gICAgICBub2RlTWFuYWdlci5tYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJRCkpOwotICAgIH0KLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVGUkVTSF9XU0RMX1NVQ0NFU1NGVUwiLCB3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMTU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIG5ldyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIpKQotICAgIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIxMDAlLDAlIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2RsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzVmMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotCi0gICAgcHVibGljIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgCi0gICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1NjA4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlVG9vbEFjdGlvbgotewotCi0gICAgcHVibGljIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGlmICh2aWV3SUQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtlZXBIaXN0b3J5KSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTViYzNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICAKLSAgICAvLyBTYXZlIHRoZSBmcmFtZXNldCBzaXplcyBpZmYgbm8gZnJhbWUgaXMgbWF4aW1pemVkLgotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOyAgICAKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQzM2U5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU09BUE1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBTeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIAotICAgIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIFN0cmluZyB2aWV3SUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lELCB2aWV3SUQpOwotICAgIGlmICh2aWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKSkKLSAgICB7Ci0gICAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSk7Ci0gICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX05BTUVTUEFDRSwgbnVsbCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKHBhcnNlciwgb3BlckVsZW1lbnQpICYJCS8vIG5lZWQgdG8gcHJvY2VzcyBib3RoIGhlYWRlciBhbmQgYm9keSAKLSAgICAgICAgICAgICBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzKHBhcnNlciwgb3BlckVsZW1lbnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnRWaWV3SUQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0pOwotICAgICAgU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7ICAgIAotICAgICAgaWYgKG5zRGVjbGFyYXRpb25zICE9IG51bGwpCi0gICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFLG5zRGVjbGFyYXRpb25zKTsKLSAgICAgIAotICAgICAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gKElTT0FQTWVzc2FnZSkgb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QKTsKLSAgICAgIGJvb2xlYW4gcmMgPSBwcm9jZXNzU291cmNlVmlld1BhcnNlZFJlc3VsdHNIZWFkZXIocGFyc2VyLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpICYJLy8gbmVlZCB0byBwcm9jZXNzIGJvdGggaGVhZGVyIGFuZCBib2R5Ci0JCSAJCSAgIHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0cyhwYXJzZXIsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7IAotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QLCBudWxsKTsKLSAgICAgIAotICAgICAgcmV0dXJuIHJjOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7IAotCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLCBudWxsKTsJCi0JYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotCSAgICAKLQlJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoaXQuaGFzTmV4dCgpKQotCXsKLQkgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7ICAgICAgICAKLQkgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0JICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLQl9Ci0JaWYgKHJlc3VsdHNWYWxpZCkKLQkgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLG51bGwpOwotICAgIHJldHVybiByZXN1bHRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCwgbnVsbCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotCQotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7ICAgIAotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAocmVzdWx0c1ZhbGlkKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCxudWxsKTsKLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NvdXJjZVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkgCi0gIAl0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCSAgCi0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX0hFQURFUik7Ci0gICAgaWYgKHNvdXJjZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLCBzb3VyY2VDb250ZW50KTsgICAgCi0gICAgICAgICAgIAotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotICAgIGlmICghaXQuaGFzTmV4dCgpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkhFQURFUl9DT05URU5ULCBzb3VyY2VDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAKLSAgICAJCi0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBzb2FwTWVzc2FnZS5nZXRIZWFkZXJDb250ZW50KCk7Ci0gICAgICBNYXAgbmFtZXNwYWNlVGFibGUgPSBzb2FwTWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpOwotICAgICAgCi0gICAgICBib29sZWFuIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSB0cnVlOwotICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkgJiYgc3RhcnQgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGgpCi0gICAgICB7Ci0gICAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKWl0Lm5leHQoKTsKLSAgICAgICAgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCBmcmFnID0gKFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpIG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICAKLSAgICAgICAgaW50IHBvcyA9IFNPQVBNZXNzYWdlVXRpbHMuZmluZEZpcnN0TWF0Y2hpbmdFbGVtZW50KAotICAgICAgICAJCXNvYXBIZWFkZXIuZ2V0RVBhcnQoKSwKLQkJCQlpbnN0YW5jZURvY3VtZW50cywKLQkJCQluYW1lc3BhY2VUYWJsZSwKLQkJCQlmcmFnLmdldE5hbWUoKSwKLQkJCQlzdGFydCk7Ci0JCQkKLQkJaWYgKHBvcyA9PSAtMSkKLQkJCWNvbnRpbnVlOwotCQkJCi0JCUVsZW1lbnQgZWxlbWVudCA9IGluc3RhbmNlRG9jdW1lbnRzW3Bvc107Ci0JCXN0YXJ0ID0gcG9zICsgMTsJCQkKLSAgICAgICAgCi0gICAgICAgIGlmICghZnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudChlbGVtZW50LCBuYW1lc3BhY2VUYWJsZSkpCi0gICAgICAgICAgc291cmNlRWxlbWVudHNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzVmFsaWQ7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0gIAl0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCSAgCi0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlQ29udGVudCAhPSBudWxsKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCwgc291cmNlQ29udGVudCk7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsgICAgCi0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVCwgc291cmNlQ29udGVudCwgc29hcE1lc3NhZ2UpOyAgICAgIAkKLSAgICAJCi0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBzb2FwTWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotICAgICAgCi0gICAgICBib29sZWFuIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSB0cnVlOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICBpZiAoIWZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgICBzb3VyY2VFbGVtZW50c1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc291cmNlRWxlbWVudHNWYWxpZDsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ4Y2Q5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLiZvcGVuPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOKS5hcHBlbmQoJz0nKS5hcHBlbmQob3Blbj9BY3Rpb25JbnB1dHMuT1BFTl9OT0RFOkFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgdG8gc2VsZWN0IHRoZSB0b2dnbGVkIG5vZGUgd2hlbiwgYXQgdGhlIHRpbWUgb2YKLSAgLy8gdGhlIGNvbGxhcHNlIGV2ZW50LCBhIGRlc2NlbmRhbnQgbm9kZSB3YXMgc2VsZWN0ZWQuCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGludCBub2RlSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0cnVlKTsKLSAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2RsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlNjY1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEJpbmRpbmdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExCaW5kaW5nTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbiBleHRlbmRzIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gbm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaWYgKG5vZGVJZHMgPT0gbnVsbCkKLSAgICAgIG5vZGVJZHMgPSBuZXcgU3RyaW5nWzBdOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSWRzKTsKLSAgICBTdHJpbmdbXSBlbmRwb2ludHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UKTsKLSAgICBpZiAoZW5kcG9pbnRzID09IG51bGwpCi0gICAgICBlbmRwb2ludHMgPSBuZXcgU3RyaW5nWzBdOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCwgZW5kcG9pbnRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmdbXSBub2RlSWRzID0gZ2V0UHJvcGVydHlBc1N0cmluZ0FycmF5KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZ1tdIGVuZHBvaW50cyA9IGdldFByb3BlcnR5QXNTdHJpbmdBcnJheShXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBOb2RlIGJpbmRpbmdOb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZHNbaV0pKTsKLSAgICAgICAgaWYgKGJpbmRpbmdOb2RlIGluc3RhbmNlb2YgV1NETEJpbmRpbmdOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudCliaW5kaW5nTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZ1tdIGVuZHBvaW50c0NvcHkgPSBlbmRwb2ludHM7Ci0gICAgICAgICAgYmluZGluZ0VsZW1lbnQuc2V0RW5kUG9pbnRzKGVuZHBvaW50c0NvcHkpOwotICAgICAgICAgIGlmIChlbmRwb2ludHNDb3B5Lmxlbmd0aCA8PSAwKQotICAgICAgICAgICAgZW5kcG9pbnRzQ29weSA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgICAgICAgIGlmIChlbmRwb2ludHNDb3B5Lmxlbmd0aCA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gYmluZGluZ05vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG9wZXJhdGlvbk5vZGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5vZGUgb3BlcmF0aW9uTm9kZSA9IChOb2RlKWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgTGlzdCB0b29scyA9IG9wZXJhdGlvbk5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbHMoKTsKLSAgICAgICAgICAgICAgZm9yIChJdGVyYXRvciB0b29sc0l0ZXJhdG9yID0gdG9vbHMuaXRlcmF0b3IoKTsgdG9vbHNJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvb2wgaW5zdGFuY2VvZiBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkKLSAgICAgICAgICAgICAgICAgICgoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpdG9vbCkuc2V0RW5kUG9pbnQoZW5kcG9pbnRzQ29weVswXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19VUERBVEVfV1NETF9CSU5ESU5HX1NVQ0NFU1NGVUwiKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmNiYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbiB7Ci0gIHB1YmxpYyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgdHJ5IHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSUQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCkgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1dTRExDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkgewotICAgIFN0cmluZyB3c2RsVXJsID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKTsKLSAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5mYXZvcml0ZUV4aXN0cyh0YWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKTsKLSAgICBpZiAoZmF2Rm9sZGVyRWxlbWVudC5hZGRGYXZvcml0ZSh0YWJsZSkpIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCB3c2RsVXJsKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIHdzZGxOb2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFdTRExFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXU0RMRWxlbWVudCl3c2RsTm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCkpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudC5nZXRXc2RsVXJsKCk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKSB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgcmV0dXJuIChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmN2NlMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLQotICBwdWJsaWMgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgZGVmaW5pdGlvbl8gPSBudWxsOwotICAgIGRlZmF1bHRXU0RMRmlsZU5hbWVfID0gInRlbXAud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKSB7Ci0gICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsIndzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykgewotICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZpbml0aW9uXyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpIHsKLSAgICByZXR1cm4gZGVmYXVsdFdTRExGaWxlTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKSB7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBkZWZpbml0aW9uXyA9IHdzZGxFbGVtZW50LmdldERlZmluaXRpb24oKTsKLSAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9IFdTRExGaWxlTmFtZUhlbHBlci5nZXRXU0RMRmlsZU5hbWUod3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSAgICByZXR1cm4gKGRlZmluaXRpb25fICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTJjNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIHsKLSAgcHVibGljIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NWVlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLQotICBwdWJsaWMgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gbGF1bmNoV2l6YXJkKGVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4MDgxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlcl87Ci0gIHB1YmxpYyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbmF2aWdhdG9yTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10ga2V5cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGtleXNbaV0pOwotICAgICAgaWYgKHZhbHVlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAxKQotICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXlzW2ldLCB2YWx1ZXNbMF0pOwotICAgICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMSkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoa2V5c1tpXSwgdmFsdWVzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5hdmlnYXRvck1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9CaW5kaW5nVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlkZGEzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1R5cGVzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOU1VQUE9SVEVEID0gLTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQX0dFVCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBfUE9TVCA9IDI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1ZFUkJfR0VUID0gIkdFVCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSQl9QT1NUID0gIlBPU1QiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDJjMjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvRnJhZ21lbnRDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGcmFnbWVudENvbnN0YW50cwotewotICAvLyBYU0QgbWluT2NjdXJzIGFuZCBtYXhPY2N1cnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NSU5fT0NDVVJTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfT0NDVVJTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5CT1VOREVEID0gLTE7Ci0KLSAgLy8gV1NETCBzdHlsZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9ET0NVTUVOVCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1JQQyA9IDE7Ci0KLSAgLy8gV1NETCBFbmNvZGluZyBzdHlsZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5DT0RJTkdfTElURVJBTCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVOQ09ESU5HX1NPQVAgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNPRElOR19VUkwgPSAyOyAvLyBIVFRQIEdldC9Qb3N0Ci0KLSAgLy8gSURzIHVzZWQgYnkgdGhlIGZyYWdtZW50IG1vZGVsCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NFUEVSQVRPUiA9ICI6OiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOUFVUX0lEID0gIjo6aW5wdXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfSUQgPSAiOjpvdXRwdXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9JRCA9ICI6OnRhYmxlSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9JRCA9ICI6OmZyYWdtZW50SUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FOQ0hPUl9JRCA9ICI6Om5hbWVBbmNob3JJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfSUQgPSAiOjpmcmFnbWVudFZpZXdJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9BVE9NSUNfRU5VTV9JRCA9ICI6OnhzZEF0b21pY0VudW1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9BTExfR1JPVVBfSUQgPSAiOjp4c2RBbGxHcm91cElEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9UT0tFTiA9ICJeIjsKLQotICAvLyBGcmFnbWVudCB2aWV3IElEcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSA9ICI6OmZyYWdtZW50Vmlld1N3aXRjaEZvcm1Ub1NvdXJjZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNID0gIjo6ZnJhZ21lbnRWaWV3U3dpdGNoU291cmNlVG9Gb3JtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX0NPTlRFTlRfSEVBREVSID0gIjo6c291cmNlQ29udGVudEhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9DT05URU5UID0gIjo6c291cmNlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9DT05URU5UX05BTUVTUEFDRSA9ICI6OnNvdXJjZUNvbnRlbnROUyI7Ci0KLSAgLy8gQWN0aW9uIGlucHV0IGNvbnN0YW50cwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FOQ0hPUiA9ICJuYW1lQW5jaG9yIjsKLQotICAvLyBOYW1lc3BhY2VzIGNvbnRhbnRzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9TT0FQX0VOViA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9XU0RMID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRU5DX0FSUkFZX1RZUEUgPSAiYXJyYXlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNJX1RZUEUgPSAidHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX1BSRUZJWCA9ICJxIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9BUlJBWV9UWVBFID0gImFycmF5VHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfQVJSQVkgPSAiQXJyYXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPTiA9ICI6IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9IRUFERVIgPSAiSGVhZGVyIjsgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRTkFNRV9MT0NBTF9OQU1FX0JPRFkgPSAiQm9keSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfRkFVTFQgPSAiRmF1bHQiOwotCi0gIC8vIExpc3QKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9TRVBFUkFUT1IgPSAiICI7Ci0KLSAgLy8gU09BUC1FTkM6QXJyYXkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVGVF9TUVVBUkVfQlJBQ0tFVCA9ICJbIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAiXSI7Ci0KLSAgLy8gWFNERGVmYXVsdEZyYWdtZW50Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfRUxFTUVOVF9TVEFSVF9UQUcgPSAiPHJvb3Q+IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9FTEVNRU5UX0VORF9UQUcgPSAiPC9yb290PiI7Ci0KLSAgLy8gTmFtZXNwYWNlIFVSSXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX0VOViA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX0VOQyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8xOTk5X1NDSEVNQV9YU0kgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEtaW5zdGFuY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMTk5OV9TQ0hFTUFfWFNEID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDBfU0NIRU1BX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8yMDAwX1NDSEVNQV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMjAwMV9TQ0hFTUFfWFNJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDFfU0NIRU1BX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9DVVJSRU5UX1NDSEVNQV9YU0kgPSBOU19VUklfMjAwMV9TQ0hFTUFfWFNJOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNEID0gTlNfVVJJXzIwMDFfU0NIRU1BX1hTRDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTF9TT0FQID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxfU09BUF9ERVBMT1lNRU5UID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcC9kZXBsb3ltZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX0xJVEVSQUxfWE1MID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcC9saXRlcmFseG1sIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNSV9FTkMgPSAiaHR0cDovL3d3dy5pYm0uY29tL25hbWVzcGFjZXMveG1pIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExBY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzU0YjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExBY3Rpb25JbnB1dHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIgPSAiZnJhbWVzZXRSb3dzQWN0aW9uc0NvbnRhaW5lciI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VTU0lPTl9JRCA9ICJzZXNzaW9uSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9JRCA9ICJmcmFnbWVudElEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VOVkVMT1BFX1RZUEUgPSAic29hcEVudmVsb3BlVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9SRVNQT05TRV9DQUNIRUQgPSAic29hcFJlc3BvbnNlQ2FjaGVkIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNSVNTSU9OX0FDVElPTiA9ICJzdWJtaXNzaW9uQWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fRk9STSA9ICJzdWJtaXNzaW9uQWN0aW9uRm9ybSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUiA9ICJzdWJtaXNzaW9uQWN0aW9uQnJvd3NlRmlsZUhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFID0gInN1Ym1pc3Npb25BY3Rpb25Ccm93c2VGaWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BU19IRUFERVIgPSAic3VibWlzc2lvbkFjdGlvblNhdmVBc0hlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMgPSAic3VibWlzc2lvbkFjdGlvblNhdmVBcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX0ZJTEVfSEVBREVSID0gInNlbGVjdGVkRmlsZUhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX0ZJTEUgPSAic2VsZWN0ZWRGaWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OX0VMRU1FTlQgPSAib3BlcmF0aW9uRWxlbWVudCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1BPSU5UID0gIjo6ZW5kUG9pbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUgPSAiaHR0cEJhc2ljQXV0aFVzZXJuYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEID0gImh0dHBCYXNpY0F1dGhQYXNzd29yZCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTYwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETEZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSID0gIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfTkFWSUdBVE9SX1RPT0xCQVIgPSAid3NkbF9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfTkFWSUdBVE9SX0NPTlRFTlQgPSAid3NkbF9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfQUNUSU9OU19DT05UQUlORVIgPSAid3NkbF9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19DT05UQUlORVIgPSAid3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19UT09MQkFSID0gIndzZGxfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9QUk9QRVJUSUVTX0NPTlRFTlQgPSAid3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1NUQVRVU19DT05UQUlORVIgPSAid3NkbF9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9TVEFUVVNfVE9PTEJBUiA9ICJ3c2RsX3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9TVEFUVVNfQ09OVEVOVCA9ICJ3c2RsX3N0YXR1c19jb250ZW50IjsKLQotICAvLyBYU0QgSW5mbyBEaWFsb2cKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0lORk9fVE9PTEJBUiA9ICJ4c2RfaW5mb190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0lORk9fQ09OVEVOVCA9ICJ4c2RfaW5mb19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExNb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI5ZmJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsQ29uc3RhbnRzCi17Ci0gICAgLy8gUmVsYXRpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETCA9ICJyZWxXU0RMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9TRVJWSUNFID0gInJlbFdTRExTZXJ2aWNlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9CSU5ESU5HID0gInJlbFdTRExCaW5kaW5nIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9PUEVSQVRJT04gPSAicmVsV1NETE9wZXJhdGlvbiI7Ci0KLSAgICAvLyBEb2N1bWVudGF0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9ET0NVTUVOVEFUSU9OID0gInByb3BEb2N1bWVudGF0aW9uIjsKLQotICAgIC8vIFNvdXJjZSBDb250ZW50Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIgPSAicHJvcFNvdXJjZUNvbnRlbnRIZWFkZXIiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09VUkNFX0NPTlRFTlQgPSAicHJvcFNvdXJjZUNvbnRlbnQiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFID0gInByb3BTb3VyY2VDb250ZW50TlMiOwotICAgIAotICAgIC8vIFRyYW5zcG9ydAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVFVRVNUX1RNUCA9ICJwcm9wU09BUFJlcXVlc3RUbXAiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVFVRVNUID0gInByb3BTT0FQUmVxdWVzdCI7ICAgIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVNQT05TRSA9ICJwcm9wU09BUFJlc3BvbnNlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVkN2QxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL0VuZHBvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW5kcG9pbnQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5kcG9pbnQ7Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlSFRUUEJhc2ljQXV0aDsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIAotICBwdWJsaWMgRW5kcG9pbnQoKQotICB7Ci0gICAgZW5kcG9pbnQgPSBudWxsOwotICAgIHJlcXVpcmVIVFRQQmFzaWNBdXRoID0gZmFsc2U7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lID0gbnVsbDsKLSAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpCi0gIHsKLSAgICByZXR1cm4gZW5kcG9pbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkKLSAgewotICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNSZXF1aXJlSFRUUEJhc2ljQXV0aCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZUhUVFBCYXNpY0F1dGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVIVFRQQmFzaWNBdXRoKGJvb2xlYW4gcmVxdWlyZUhUVFBCYXNpY0F1dGgpCi0gIHsKLSAgICB0aGlzLnJlcXVpcmVIVFRQQmFzaWNBdXRoID0gcmVxdWlyZUhUVFBCYXNpY0F1dGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExCaW5kaW5nRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTk3ODg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuQmluZGluZ1R5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ0VsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotICBwcml2YXRlIGludCBiaW5kaW5nVHlwZV87Ci0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nXzsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnRfOwotICBwcml2YXRlIFZlY3RvciBlbmRQb2ludHNfOwotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50XyA9IG51bGw7Ci0gICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLlVOU1VQUE9SVEVEOwotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ18uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7aS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIEhUVFBCaW5kaW5nKQotICAgICAgewotICAgICAgICBIVFRQQmluZGluZyBiaW5kaW5nID0gKEhUVFBCaW5kaW5nKWU7Ci0gICAgICAgIFN0cmluZyB2ZXJiID0gYmluZGluZy5nZXRWZXJiKCk7Ci0gICAgICAgIGlmIChCaW5kaW5nVHlwZXMuSFRUUF9WRVJCX0dFVC5lcXVhbHModmVyYikpCi0gICAgICAgICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLkhUVFBfR0VUOwotICAgICAgICBlbHNlIGlmIChCaW5kaW5nVHlwZXMuSFRUUF9WRVJCX1BPU1QuZXF1YWxzKHZlcmIpKQotICAgICAgICAgIGJpbmRpbmdUeXBlXyA9IEJpbmRpbmdUeXBlcy5IVFRQX1BPU1Q7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgIGJpbmRpbmdUeXBlXyA9IEJpbmRpbmdUeXBlcy5TT0FQOwotICAgICAgaWYgKGJpbmRpbmdUeXBlXyAhPSBCaW5kaW5nVHlwZXMuVU5TVVBQT1JURUQpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF8gPSBlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMQmluZGluZ0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICBlbmRQb2ludHNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICBiaW5kaW5nXyA9IGJpbmRpbmc7Ci0gICAgc2V0RG9jdW1lbnRhdGlvbihiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIHNldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmcgZ2V0QmluZGluZygpIHsKLSAgICByZXR1cm4gYmluZGluZ187Ci0gIH0KLSAgCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBnZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0QmluZGluZ1R5cGUoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdUeXBlXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXNldEVuZFBvaW50cygpCi0gIHsKLSAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgZml4ZWRFbmRwb2ludFN0cmluZyA9IHNlcnZpY2VFbGVtZW50LmdldEFkZHJlc3NMb2NhdGlvbihiaW5kaW5nXyk7Ci0gICAgRW5kcG9pbnQgZml4ZWRFbmRwb2ludCA9IGdldEVuZHBvaW50KGZpeGVkRW5kcG9pbnRTdHJpbmcpOwotICAgIGlmIChmaXhlZEVuZHBvaW50ID09IG51bGwpCi0gICAgewotICAgICAgZml4ZWRFbmRwb2ludCA9IG5ldyBFbmRwb2ludCgpOwotICAgICAgZml4ZWRFbmRwb2ludC5zZXRFbmRwb2ludChmaXhlZEVuZHBvaW50U3RyaW5nKTsKLSAgICB9Ci0gICAgZW5kUG9pbnRzXy5jbGVhcigpOwotICAgIGVuZFBvaW50c18uYWRkKGZpeGVkRW5kcG9pbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEVuZFBvaW50cygpCi0gIHsKLSAgICBTdHJpbmdbXSBlbmRQb2ludHMgPSBuZXcgU3RyaW5nW2VuZFBvaW50c18uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGVuZFBvaW50c1tpXSA9ICgoRW5kcG9pbnQpZW5kUG9pbnRzXy5nZXQoaSkpLmdldEVuZHBvaW50KCk7Ci0gICAgcmV0dXJuIGVuZFBvaW50czsKLSAgfQotICAKLSAgcHVibGljIEVuZHBvaW50IGdldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZW5kUG9pbnRzXy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBFbmRwb2ludCBlbmRwb2ludCA9IChFbmRwb2ludClpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChlbmRwb2ludFN0cmluZy5lcXVhbHMoZW5kcG9pbnQuZ2V0RW5kcG9pbnQoKSkpCi0gICAgICAgICAgcmV0dXJuIGVuZHBvaW50OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuZFBvaW50cyhTdHJpbmdbXSBlbmRwb2ludHMpCi0gIHsKLSAgICBWZWN0b3IgZW5kcG9pbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRwb2ludHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRW5kcG9pbnQgZW5kcG9pbnQgPSBnZXRFbmRwb2ludChlbmRwb2ludHNbaV0pOwotICAgICAgaWYgKGVuZHBvaW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHBvaW50ID0gbmV3IEVuZHBvaW50KCk7Ci0gICAgICAgIGVuZHBvaW50LnNldEVuZHBvaW50KGVuZHBvaW50c1tpXSk7Ci0gICAgICB9Ci0gICAgICBlbmRwb2ludFZlY3Rvci5hZGQoZW5kcG9pbnQpOwotICAgIH0KLSAgICByZXNldEVuZFBvaW50cygpOwotICAgIGVuZFBvaW50c18uYWRkQWxsKGVuZHBvaW50VmVjdG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEVuZFBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBFbmRwb2ludCBlbmRwb2ludCA9IG5ldyBFbmRwb2ludCgpOwotICAgICAgZW5kcG9pbnQuc2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgICAgZW5kUG9pbnRzXy5hZGQoZW5kcG9pbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUVuZFBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBmaXhlZEVuZHBvaW50U3RyaW5nID0gc2VydmljZUVsZW1lbnQuZ2V0QWRkcmVzc0xvY2F0aW9uKGJpbmRpbmdfKTsKLSAgICAgIGlmIChmaXhlZEVuZHBvaW50U3RyaW5nID09IG51bGwgfHwgIWZpeGVkRW5kcG9pbnRTdHJpbmcuZXF1YWxzKGVuZHBvaW50U3RyaW5nKSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHNfLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGVuZHBvaW50U3RyaW5nLmVxdWFscygoKEVuZHBvaW50KWVuZFBvaW50c18uZ2V0KGkpKS5nZXRFbmRwb2ludCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbmRQb2ludHNfLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgcmVzZXRFbmRQb2ludHMoKTsKLSAgICBpZiAoYmluZGluZ18gIT0gbnVsbCkgewotICAgICAgUG9ydFR5cGUgcHQgPSBiaW5kaW5nXy5nZXRQb3J0VHlwZSgpOwotICAgICAgaWYgKHB0ICE9IG51bGwpIHsKLSAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcHQuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICBIYXNoTWFwIG9wZXJhdGlvbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilpdC5uZXh0KCk7Ci0gICAgICAgICAgb3BlcmF0aW9uc01hcC5wdXQoY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZShvcGVyYXRpb24pLCBvcGVyYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50W10gd3NkbE9wZXJhdGlvbkVsZW1lbnRzID0gbmV3IFdTRExPcGVyYXRpb25FbGVtZW50W2dldE51bWJlck9mRWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTildOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbE9wZXJhdGlvbkVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgd3NkbE9wZXJhdGlvbkVsZW1lbnRzW2ldID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxPcGVyYXRpb25FbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZSh3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0uZ2V0T3BlcmF0aW9uKCkpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnNNYXAuZ2V0KG9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgb3BlcmF0aW9uc01hcC5yZW1vdmUob3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0uc2V0T3BlcmF0aW9uKHRoaXMsIG9wZXJhdGlvbik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbE9wZXJhdGlvbkVsZW1lbnRzW2pdLCBXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9uc01hcC52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgICBPcGVyYXRpb24gb3BlciA9IChPcGVyYXRpb24paXQubmV4dCgpOwotICAgICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50IHdzZGxPcGVyYXRpb25FbGVtZW50ID0gbmV3IFdTRExPcGVyYXRpb25FbGVtZW50KG9wZXIuZ2V0TmFtZSgpLCB0aGlzLCBvcGVyKTsKLSAgICAgICAgICBjb25uZWN0KHdzZGxPcGVyYXRpb25FbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04sTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU9wZXJhdGlvblVuaXF1ZU5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIFN0cmluZ0J1ZmZlciBuYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIG5hbWUuYXBwZW5kKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIElucHV0IGlucHV0TXNnID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgaWYgKGlucHV0TXNnICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgcW5hbWUgPSBpbnB1dE1zZy5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIG5hbWUuYXBwZW5kKCI6Iik7Ci0gICAgICBuYW1lLmFwcGVuZChxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIE91dHB1dCBvdXRwdXRNc2cgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgaWYgKG91dHB1dE1zZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIHFuYW1lID0gb3V0cHV0TXNnLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpOwotICAgICAgbmFtZS5hcHBlbmQocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgbmFtZS5hcHBlbmQoIjoiKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWUudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNThjYTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETENvbW1vbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgV1NETENvbW1vbkVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotCi0gIHB1YmxpYyBXU0RMQ29tbW9uRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHJlZUVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudCgpIHsKLSAgICAgIHJldHVybiAoVHJlZUVsZW1lbnQpZ2V0RWxlbWVudHMoTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKS5uZXh0RWxlbWVudCgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXREb2N1bWVudGF0aW9uKE5vZGUgZG9jdW1lbnRhdGlvbkVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9ICIiOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChkb2N1bWVudGF0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKTsKLSAgICAgICAgRG9jdW1lbnRGcmFnbWVudCBkZiA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGRvY3VtZW50YXRpb25Ob2RlcyA9IGRvY3VtZW50YXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZG9jdW1lbnRhdGlvbk5vZGVzLmdldExlbmd0aCgpO2krKykKLSAgICAgICAgICBkZi5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShkb2N1bWVudGF0aW9uTm9kZXMuaXRlbShpKSx0cnVlKSk7Ci0gICAgICAgIGRvY3VtZW50YXRpb24gPSBYTUxVdGlscy5zZXJpYWxpemUoZGYsdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04sZG9jdW1lbnRhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzNTYxMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzE3ICAgMTQ2NzA3IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMjQgICAxNjc0ODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODAxMTUgICAyMTQ5NTUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODExMTkgICAyNTUzNzQgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBXU0UgZG9lcyBub3QgaGFuZGxlIHV0Zi04IGNoYXJhY3RlcnMgaW4gVVJMcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uSFRUUFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWNTZXZlcml0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotcHVibGljIGNsYXNzIFdTRExFbGVtZW50IGV4dGVuZHMgV1NETENvbW1vbkVsZW1lbnQKLXsKLQotICBwcml2YXRlIFN0cmluZyB3c2RsVXJsXzsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb25fOwotICBwcml2YXRlIFZlY3RvciBzY2hlbWFMaXN0XzsKLSAgcHJpdmF0ZSBWZWN0b3Igc2NoZW1hVVJJXzsKLQotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgdzNTY2hlbWFRTmFtZUxpc3RfOwotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgY29uc3RhbnRTY2hlbWFMaXN0XzsKLSAgCi0gIC8vQSBSZXNvdXJjZVNldCBmb3IgYWxsIHNjaGVtYXMgaW4gdGhpcyBXU0RMCi0gIHByaXZhdGUgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0KLSAgc3RhdGljCi0gIHsKLSAgICAvLyB3MyBzY2hlbWEgVVJJIGxpc3Q6Ci0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hCi0gICAgdzNTY2hlbWFRTmFtZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIHczU2NoZW1hUU5hbWVMaXN0Xy5hZGRFbGVtZW50KG5ldyBRTmFtZShGcmFnbWVudENvbnN0YW50cy5OU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNELCJzY2hlbWEiKSk7Ci0gICAgdzNTY2hlbWFRTmFtZUxpc3RfLmFkZEVsZW1lbnQobmV3IFFOYW1lKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV8yMDAwX1NDSEVNQV9YU0QsInNjaGVtYSIpKTsKLSAgICB3M1NjaGVtYVFOYW1lTGlzdF8uYWRkRWxlbWVudChuZXcgUU5hbWUoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzE5OTlfU0NIRU1BX1hTRCwic2NoZW1hIikpOwotCi0gICAgLy8gQ29uc3RhbnQgc2NoZW1hIFVSSSBsaXN0OgotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvCi0gICAgLy8gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLSAgICBjb25zdGFudFNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNEKSk7Ci0gICAgY29uc3RhbnRTY2hlbWFMaXN0Xy5hZGRFbGVtZW50KFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV8yMDAwX1NDSEVNQV9YU0QpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzE5OTlfU0NIRU1BX1hTRCkpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfU09BUF9FTkMpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuVVJJX1dTREwpKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFN0cmluZyB3c2RsVXJsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHNldFdzZGxVcmwod3NkbFVybCk7Ci0gICAgZGVmaW5pdGlvbl8gPSBudWxsOwotICAgIHNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotCXNjaGVtYVVSSV8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVXJsKFN0cmluZyB3c2RsVXJsKSB7Ci0JICBIVFRQVXRpbGl0eSBodHRwID0gbmV3IEhUVFBVdGlsaXR5KCk7Ci0JICB3c2RsVXJsXyA9IGh0dHAuaGFuZGxlUmVkaXJlY3QoVVJMVXRpbHMuZW5jb2RlVVJMU3RyaW5nKHdzZGxVcmwpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICByZXR1cm4gd3NkbFVybF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFMaXN0KFZlY3RvciBzY2hlbWFMaXN0KQotICB7Ci0gICAgc2NoZW1hTGlzdF8gPSBzY2hlbWFMaXN0OwotICB9Ci0KLSAgcHVibGljIFZlY3RvciBnZXRTY2hlbWFMaXN0KCkKLSAgewotICAgIHJldHVybiBzY2hlbWFMaXN0XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBEZWZpbml0aW9uIGxvYWRXU0RMKFN0cmluZyB3c2RsVVJMKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIHdzZGxlKQotICAgIHsKLSAgICAgIHRocm93IHdzZGxlOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiAsIHQuZ2V0TWVzc2FnZSgpLCB0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGxvYWRXU0RMKCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotCSAgCi0JLy8JUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVudGlvbnMuCi0JcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0JcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTixuZXcgWFNEUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsgICAgCQkKLQkvL1JlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCi0JcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0KFhTRFBhY2thZ2UuZU5TX1VSSSxYU0RQYWNrYWdlLmVJTlNUQU5DRSk7CQotCSAgCi0JICAKLSAgICBWZWN0b3IgZXJyb3JNZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBkZWZpbml0aW9uXyA9IGxvYWRXU0RMKHdzZGxVcmxfKTsKLSAgICAKLSAgICAKLSAgICBpZiAoZGVmaW5pdGlvbl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXREb2N1bWVudGF0aW9uKGRlZmluaXRpb25fLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgICAgZ2F0aGVyU2NoZW1hcyhkZWZpbml0aW9uXywgd3NkbFVybF8pOwotICAgICAgLy8gVmFsaWRhdGUgdGhlIHNjaGVtYXMuCi0gICAgICBmb3IgKGludCBpPTA7aTxzY2hlbWFMaXN0Xy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSlzY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIHhzZFNjaGVtYS52YWxpZGF0ZSgpOwotICAgICAgICBFTGlzdCBlcnJvcnMgPSB4c2RTY2hlbWEuZ2V0QWxsRGlhZ25vc3RpY3MoKTsKLSAgICAgICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChMaXN0SXRlcmF0b3IgbGkgPSBlcnJvcnMubGlzdEl0ZXJhdG9yKCk7bGkuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU0REaWFnbm9zdGljIHhkID0gKFhTRERpYWdub3N0aWMpbGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIG1zZyA9IHhkLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIC8vIGRvIG5vdCByZXBvcnQgbG93IHNldmVyaXR5IGRpYWdub3N0aWNzIG9yIGVycm9uZW91cyBhcnJheSByZWZlcmVuY2UgZXJyb3JzLgotICAgICAgICAgICAgaWYgKHhkLmdldFNldmVyaXR5KCkuZ2V0VmFsdWUoKSA9PSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTC5nZXRWYWx1ZSgpIHx8IChtc2cgIT0gbnVsbCAmJiBtc2cubGVuZ3RoKCkgPiAwICYmIG1zZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIiNhcnJheSIpICE9IC0xKSkKLSAgICAgICAgICAgICAgbGkucmVtb3ZlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCAmJiBtc2cubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMuYWRkRWxlbWVudCh4ZC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBmb3IgKGludCBpPTA7aTxjb25zdGFudFNjaGVtYUxpc3RfLnNpemUoKTtpKyspCi0gICAgICAgIHNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoY29uc3RhbnRTY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSkpOwotICAgICAgCi0JfQotICAgIHJldHVybiBlcnJvck1lc3NhZ2VzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNjaGVtYXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgZGVmaW5pdGlvblVSTCkKLSAgewotICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgZXh0VHlwZXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRUeXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTxleHRUeXBlcy5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IG51bGw7Ci0gICAgICAgICAgT2JqZWN0IG9iaiA9IGV4dFR5cGVzLmdldChpKTsKLSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBzY2hlbWFFbGVtZW50ID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudClvYmo7Ci0gICAgICAgICAgICBpZiAoaXNXM1NjaGVtYUVsZW1lbnRUeXBlKHNjaGVtYUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuY3JlYXRlU2NoZW1hKHNjaGVtYUVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLQkJCSAgaWYoIWNoZWNrU2NoZW1hVVJJKGRlZmluaXRpb25VUkwpKXsKLQkJCQkgIHNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoeHNkU2NoZW1hKTsKLQkJCQkgIGdhdGhlclNjaGVtYURpcmVjdGl2ZSh4c2RTY2hlbWEsIGRlZmluaXRpb25VUkwpOwotICAgICAgICAgICAgICB9Ci0JCQkgIC8vV2UgbmVlZCB0byBhZGQgdGhlIHNjaGVtYSB0byBhIFJlc291cmNlIGluIGEgUmVzb3VyY2Ugc2V0IGZvciBwcm9wZXIgdmFsaWRhdGlvbgotICAgICAgICAJICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIHVyaSA9IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkuY3JlYXRlVVJJKGRlZmluaXRpb25VUkwpOyAgICAJCQotICAgICAgICAJICBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKHVyaSk7Ci0gICAgICAgIAkgIC8vQWRkIHRoZSBTY2hlbWEgdG8gdGhlIHJlc291cmNlCi0gICAgICAgIAkgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHhzZFNjaGVtYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAJCi0gICAgICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBzY2hlbWFFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClvYmo7Ci0gICAgICAgICAgICB4c2RTY2hlbWEgPSBzY2hlbWFFbGVtZW50LmdldFNjaGVtYSgpOwotICAgICAgICAgICAgaWYoIXNjaGVtYUxpc3RfLmNvbnRhaW5zKHhzZFNjaGVtYSkpewotCQkJCXNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoeHNkU2NoZW1hKTsKLQkJCQlnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBkZWZpbml0aW9uVVJMKTsKLQkJCX0KLQkJICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgTWFwIGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEltcG9ydHMoKTsKLSAgICBpZiAoaW1wb3J0cyAhPSBudWxsKQotICAgICAgZ2F0aGVySW1wb3J0ZWRTY2hlbWFzKGRlZmluaXRpb24saW1wb3J0cyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyB4c2RTY2hlbWFVUkwpCi0gIHsKLSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgewotICAgICAgRUxpc3QgeHNkU2NoZW1hQ29udGVudHMgPSB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB4c2RTY2hlbWFDb250ZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgY29udGVudCA9IGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RTY2hlbWFEaXJlY3RpdmUgeHNkU2NoZW1hRGlyZWN0aXZlID0gKFhTRFNjaGVtYURpcmVjdGl2ZSljb250ZW50OwotICAgICAgICAgIFN0cmluZ0J1ZmZlciB4c2RTY2hlbWFEaXJlY3RpdmVVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgU3RyaW5nIHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uID0geHNkU2NoZW1hRGlyZWN0aXZlLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgaWYgKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uICE9IG51bGwgJiYgeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24uaW5kZXhPZignOicpID09IC0xICYmIHhzZFNjaGVtYVVSTCAhPSBudWxsICYmIHhzZFNjaGVtYVVSTC5pbmRleE9mKCc6JykgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gcmVsYXRpdmUgVVJMCi0gICAgICAgICAgICBpbnQgaW5kZXggPSB4c2RTY2hlbWFVUkwubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFVUkwuc3Vic3RyaW5nKDAsIGluZGV4KzEpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFVUkwpOwotICAgICAgICAgICAgICB4c2RTY2hlbWFEaXJlY3RpdmVVUkwuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5hcHBlbmQoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pOwotCi0gICAgICAgICAgLy9lbmNvZGUgdGhlIFVSTCBzbyB0aGF0IFNjaGVtYXMgd2l0aCBub24tQVNDSUkgZmlsZW5hbWVzIGNhbiBiZSByZXNvbHZlZAotICAgICAgICAgIFN0cmluZyB4c2RTY2hlbWFEaXJlY3RpdmVVUkxTdHJpbmcgPSBVUkxVdGlscy5lbmNvZGVVUkxTdHJpbmcoeHNkU2NoZW1hRGlyZWN0aXZlVVJMLnRvU3RyaW5nKCkpOyAgICAgIAotICAgICAgICAgIC8vIHJlc29sdmUgc2NoZW1hIGRpcmVjdGl2ZQotICAgICAgICAgIFhTRFNjaGVtYSByZXNvbHZlZFNjaGVtYSA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgIGlmIChyZXNvbHZlZFNjaGVtYSA9PSBudWxsICYmIHhzZFNjaGVtYURpcmVjdGl2ZVVSTFN0cmluZy5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICByZXNvbHZlZFNjaGVtYSA9IGdldFNjaGVtYSh4c2RTY2hlbWFEaXJlY3RpdmVVUkxTdHJpbmcpOwotICAgICAgICAgIGlmIChyZXNvbHZlZFNjaGVtYSAhPSBudWxsKQotICAgICAgICAgIHsKLQkJCWlmKCFjaGVja1NjaGVtYVVSSSh4c2RTY2hlbWFEaXJlY3RpdmVVUkxTdHJpbmcpKXsKLQkJCQlzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHJlc29sdmVkU2NoZW1hKTsKLQkJCQlnYXRoZXJTY2hlbWFEaXJlY3RpdmUocmVzb2x2ZWRTY2hlbWEsIHhzZFNjaGVtYURpcmVjdGl2ZVVSTFN0cmluZyk7Ci0gICAgICAJCX0KLSAgICAgIAkgIH0KLSAgICAgICAgfQotCSAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja1NjaGVtYVVSSShTdHJpbmcgc2NoZW1hVVJJKXsKLQkgIAlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JICAJIAkKLQkJCi0JCXNjaGVtYVVSSSA9IG5vcm1hbGl6ZShzY2hlbWFVUkkpOyAKLQkJaWYoc2NoZW1hVVJJLmVxdWFscyhub3JtYWxpemUod3NkbFVybF8pKSlyZXR1cm4gZmFsc2U7Ci0JCUVudW1lcmF0aW9uIGUgPSBzY2hlbWFVUklfLmVsZW1lbnRzKCk7Ci0JCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCQkJU3RyaW5nIHVyaSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwkKLQkJCWlmKHNjaGVtYVVSSS5lcXVhbHModXJpKSl7IAotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCX0JCi0JCX0KLQkJCi0JICAgIGlmICghZm91bmQpewotCSAgICAJc2NoZW1hVVJJXy5hZGRFbGVtZW50KHNjaGVtYVVSSSk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGZvdW5kOwotCSAgCi0JICB9Ci0JICAKLSAgcHJpdmF0ZSBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyB1cmkgKQotICB7Ci0JICB0cnkgewotCQkgIFN0cmluZyBlbmNvZGVkVVJJID0gVVJJRW5jb2Rlci5lbmNvZGUodXJpLCJVVEYtOCIpOwotCQkgIFVSSSBub3JtYWxpemVkVVJJID0gbmV3IFVSSShlbmNvZGVkVVJJKTsKLQkJICBub3JtYWxpemVkVVJJID0gbm9ybWFsaXplZFVSSS5ub3JtYWxpemUoKTsKLQkJICByZXR1cm4gbm9ybWFsaXplZFVSSS50b1N0cmluZygpOwotCSAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsKLQkJICByZXR1cm4gdXJpOwotCSAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCSAgcmV0dXJuIHVyaTsKLQkgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzVzNTY2hlbWFFbGVtZW50VHlwZShRTmFtZSBxbmFtZSkKLSAgewotICAgIGZvciAoaW50IGk9MDtpPHczU2NoZW1hUU5hbWVMaXN0Xy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFFOYW1lIHczU2NoZW1hUU5hbWUgPSAoUU5hbWUpdzNTY2hlbWFRTmFtZUxpc3RfLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3M1NjaGVtYVFOYW1lLmVxdWFscyhxbmFtZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVySW1wb3J0ZWRTY2hlbWFzKERlZmluaXRpb24gZGVmaW5pdGlvbixNYXAgaW1wb3J0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBpbXBvcnRzLmtleVNldCgpLml0ZXJhdG9yKCk7aXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBMaXN0IGltcG9ydExpc3QgPSAoTGlzdClpbXBvcnRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aW1wb3J0TGlzdC5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBJbXBvcnQgaW1wID0gKEltcG9ydClpbXBvcnRMaXN0LmdldChpKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGxvY1VSSSA9IG5ldyBTdHJpbmdCdWZmZXIoaW1wLmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChsb2NVUkkudG9TdHJpbmcoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgYmFzZSA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgbG9jVVJJLmluc2VydCgwLGJhc2Uuc3Vic3RyaW5nKDAsYmFzZS5sYXN0SW5kZXhPZignLycpKzEpKTsKLSAgICAgICAgfQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIERlZmluaXRpb24gaW1wb3J0RGVmID0gbG9hZFdTREwobG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGdhdGhlclNjaGVtYXMoaW1wb3J0RGVmLCBsb2NVUkkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heSBiZSBhbiBYU0QgZmlsZS4KLSAgICAgICAgICBnYXRoZXJTY2hlbWEobG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNjaGVtYShTdHJpbmcgbG9jVVJJKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGdldFNjaGVtYShsb2NVUkkpOwotICAgIGlmICh4c2RTY2hlbWEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHhzZFNjaGVtYSk7Ci0gICAgICBnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBsb2NVUkkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgWFNEU2NoZW1hIGdldFNjaGVtYShTdHJpbmcgbG9jVVJJKQotICB7Ci0gICAgbG9jVVJJID0gVVJMVXRpbHMuZW5jb2RlVVJMU3RyaW5nKGxvY1VSSSk7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKGxvY1VSSSk7Ci0gICAgaWYgKHhzZFNjaGVtYSA9PSBudWxsKQotICAgIHsKLSAgICAgIFhTRFBhcnNlciBwID0gbmV3IFhTRFBhcnNlcigpOwotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBOZXRVdGlscy5nZXRVUkxJbnB1dFN0cmVhbShsb2NVUkkpOwotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHAucGFyc2UoaXMpOwotICAgICAgICB4c2RTY2hlbWEgPSBwLmdldFNjaGVtYSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geHNkU2NoZW1hOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBkZWZpbml0aW9uXyA9IGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpIHsKLSAgICAgIE1hcCBzZXJ2aWNlcyA9IG5ldyBIYXNoTWFwKGRlZmluaXRpb25fLmdldFNlcnZpY2VzKCkpOwotICAgICAgV1NETFNlcnZpY2VFbGVtZW50W10gd3NkbFNlcnZpY2VFbGVtZW50cyA9IG5ldyBXU0RMU2VydmljZUVsZW1lbnRbZ2V0TnVtYmVyT2ZFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSldOwotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbFNlcnZpY2VFbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICB3c2RsU2VydmljZUVsZW1lbnRzW2ldID0gKFdTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxTZXJ2aWNlRWxlbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgUU5hbWUgcW5hbWUgPSB3c2RsU2VydmljZUVsZW1lbnRzW2pdLmdldFNlcnZpY2UoKS5nZXRRTmFtZSgpOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlzZXJ2aWNlcy5nZXQocW5hbWUpOwotICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgc2VydmljZXMucmVtb3ZlKHFuYW1lKTsKLSAgICAgICAgICB3c2RsU2VydmljZUVsZW1lbnRzW2pdLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50c1tqXS5idWlsZE1vZGVsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbFNlcnZpY2VFbGVtZW50c1tqXSwgV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpOwotICAgICAgfQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0gICAgICAgIFdTRExTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSBuZXcgV1NETFNlcnZpY2VFbGVtZW50KHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICAgIGNvbm5lY3Qod3NkbFNlcnZpY2VFbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIHdzZGxTZXJ2aWNlRWxlbWVudC5idWlsZE1vZGVsKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NjUxOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA3MTAyNCAgIDIwNjU1NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDkwNSAgIDI0NjI2NSBtYWh1dGNoQGNhLmlibS5jb20gIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA4MDkxMSAgIDI0NzA5NiBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuQmluZGluZ1R5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIFdTRExDb21tb25FbGVtZW50Ci17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9UWVBFX1NPQVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVFlQRV9IVFRQX0dFVCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9UWVBFX0hUVFBfUE9TVCA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgb3BlcmF0aW9uVHlwZV87Ci0gIHByaXZhdGUgT3BlcmF0aW9uIG9wZXJhdGlvbl87Ci0gIHByaXZhdGUgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl87Ci0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZnJhZ0NvbnRyb2xsZXJfOwotICBwcml2YXRlIGJvb2xlYW4gaXNEb2N1bWVudFN0eWxlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXNlTGl0ZXJhbF87Ci0gIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb25fOwotICBwcml2YXRlIFN0cmluZyBlbmNvZGluZ1N0eWxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VfOwotCi0gIHByaXZhdGUgTWFwIGhlYWRlckNhY2hlOwotICAKLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0gIHByaXZhdGUgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBzb2FwVHJhbnNwb3J0UHJvdmlkZXIgPSBudWxsOyAgCi0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVyU29hcEluZm9ybWF0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxTT0FQQmluZGluZyBzb2FwQmluZGluZykKLSAgewotICAgIC8vIEluaXRpYWxpemUgZGVmYXVsdHMuCi0gICAgaXNEb2N1bWVudFN0eWxlXyA9IHRydWU7Ci0gICAgc29hcEFjdGlvbl8gPSAiIjsKLSAgICBpc1VzZUxpdGVyYWxfID0gdHJ1ZTsKLSAgICBlbmNvZGluZ1N0eWxlXyA9IG51bGw7Ci0gICAgZW5jb2RpbmdOYW1lc3BhY2VfID0gbnVsbDsKLQotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgICAgaXNEb2N1bWVudFN0eWxlXyA9ICJkb2N1bWVudCIuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ0VsZW1lbnQpOwotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IG51bGw7Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpO2kuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBzb2FwT3BlcmF0aW9uID0gKFNPQVBPcGVyYXRpb24pZTsKLSAgICAgICAgc29hcEFjdGlvbl8gPSBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKTsKLSAgICAgICAgaWYoc29hcEFjdGlvbl8gPT0gbnVsbCkgc29hcEFjdGlvbl8gPSAiIjsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzdHlsZSA9IHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICAgICAgaWYgKHN0eWxlICE9IG51bGwpCi0gICAgICAgICAgaXNEb2N1bWVudFN0eWxlXyA9IHN0eWxlLmVxdWFscygiZG9jdW1lbnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpO2kuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHsKLSAgICAgICAgc29hcEJvZHkgPSAoU09BUEJvZHkpZTsKLSAgICAgICAgaXNVc2VMaXRlcmFsXyA9ICJsaXRlcmFsIi5lcXVhbHMoc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgICAgICBpZiAoIWlzVXNlTGl0ZXJhbF8pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFbmNvZGVkLgotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHNvYXBCb2R5LmdldEVuY29kaW5nU3R5bGVzKCkuaXRlcmF0b3IoKTtqLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgZW5jb2RpbmdTdHlsZV8gPSAoU3RyaW5nKWoubmV4dCgpOwotICAgICAgICAgICAgZW5jb2RpbmdOYW1lc3BhY2VfID0gc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFdTRExPcGVyYXRpb25FbGVtZW50KFN0cmluZyBuYW1lLFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgc3VwZXIobmFtZSwgYmluZGluZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgLy8gU2V0IHRoZSBkZWZhdWx0IG9wZXJhdGlvbiB0eXBlIHRvIGJlIFNPQVAuCi0gICAgc2V0T3BlcmF0aW9uKGJpbmRpbmdFbGVtZW50LG9wZXJhdGlvbik7Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQpIHsKLQkgIFdTRExTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpIGJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KSBzZXJ2aWNlRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICByZXR1cm4gd3NkbEVsZW1lbnQuZ2V0RGVmaW5pdGlvbigpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0TWVzc2FnZUNvbnRleHQoV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50KSB7Ci0JICBtZXNzYWdlQ29udGV4dCA9IG5ldyBNZXNzYWdlQ29udGV4dCgpOwotCSAgbWVzc2FnZUNvbnRleHQuc2V0RGVmaW5pdGlvbihnZXREZWZpbml0aW9uKGJpbmRpbmdFbGVtZW50KSk7Ci0JICBtZXNzYWdlQ29udGV4dC5zZXRCaW5kaW5nT3BlcmF0aW9uKGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ0VsZW1lbnQpKTsKLQkgIG1lc3NhZ2VDb250ZXh0LnNldEJpbmRpbmdQcm90b2NvbChiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0JICBtZXNzYWdlQ29udGV4dC5zZXREb2N1bWVudFN0eWxlKGlzRG9jdW1lbnRTdHlsZV8pOwotICB9Ci0gIAotICBwdWJsaWMgTWVzc2FnZUNvbnRleHQgZ2V0TWVzc2FnZUNvbnRleHQoKSB7Ci0JICByZXR1cm4gbWVzc2FnZUNvbnRleHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoU09BUEJpbmRpbmcgc29hcEJpbmRpbmcpIHsKLQkgIAkgIAotCSAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHNvYXBCaW5kaW5nLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JICBTdHJpbmcgdHJhbnNwb3J0VVJJID0gc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCk7Ci0JICAJICAKLQkgIHNvYXBUcmFuc3BvcnRQcm92aWRlciA9IFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKQotCSAgCS5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIobmFtZXNwYWNlVVJJLCB0cmFuc3BvcnRVUkkpOwotICB9Ci0gIAotICBwdWJsaWMgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBnZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKSB7Ci0JICByZXR1cm4gc29hcFRyYW5zcG9ydFByb3ZpZGVyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRPcGVyYXRpb24oV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLSAgICBvcGVyYXRpb25fID0gb3BlcmF0aW9uOwotICAgIHNldERvY3VtZW50YXRpb24ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGZyYWdDb250cm9sbGVyXyA9IG51bGw7Ci0gICAgd3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXyA9IG51bGw7Ci0gICAgb3BlcmF0aW9uVHlwZV8gPSBiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nVHlwZSgpOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZV8pCi0gICAgewotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuU09BUDoKLSAgICAgICAgZ2F0aGVyU29hcEluZm9ybWF0aW9uKGJpbmRpbmdFbGVtZW50LChTT0FQQmluZGluZyliaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBzZXRNZXNzYWdlQ29udGV4dChiaW5kaW5nRWxlbWVudCk7Ci0gICAgICAgIHNldFNPQVBUcmFuc3BvcnRQcm92aWRlcigoU09BUEJpbmRpbmcpIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGhlYWRlckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuSFRUUF9HRVQ6Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5IVFRQX1BPU1Q6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgT3BlcmF0aW9uIGdldE9wZXJhdGlvbigpIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdPcGVyYXRpb24oKFdTRExCaW5kaW5nRWxlbWVudClnZXRQYXJlbnRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50KQotICB7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZygpOwotICAgIFN0cmluZyBvcGVyYXRpb25JbnB1dE5hbWUgPSBudWxsOwotICAgIFN0cmluZyBvcGVyYXRpb25PdXRwdXROYW1lID0gbnVsbDsKLSAgICBJbnB1dCBvcGVyYXRpb25JbnB1dCA9IG9wZXJhdGlvbl8uZ2V0SW5wdXQoKTsKLSAgICBPdXRwdXQgb3BlcmF0aW9uT3V0cHV0ID0gb3BlcmF0aW9uXy5nZXRPdXRwdXQoKTsKLSAgICBpZiAob3BlcmF0aW9uSW5wdXQgIT0gbnVsbCkKLSAgICAgIG9wZXJhdGlvbklucHV0TmFtZSA9IG9wZXJhdGlvbklucHV0LmdldE5hbWUoKTsKLSAgICBpZiAob3BlcmF0aW9uT3V0cHV0ICE9IG51bGwpCi0gICAgICBvcGVyYXRpb25PdXRwdXROYW1lID0gb3BlcmF0aW9uT3V0cHV0LmdldE5hbWUoKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uXy5nZXROYW1lKCksb3BlcmF0aW9uSW5wdXROYW1lLG9wZXJhdGlvbk91dHB1dE5hbWUpOwotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICBiaW5kaW5nT3BlcmF0aW9uID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbl8uZ2V0TmFtZSgpLG51bGwsbnVsbCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbGlzdCBvZiBpbnB1dCBoZWFkZXJzLgotICAgKiAKLSAgICogQHJldHVybiBBIExpc3QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNPQVBIZWFkZXJzKCkgewotCSAgcmV0dXJuIGdldFNPQVBIZWFkZXJzKHRydWUpOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIFJldHVybiBhIGxpc3Qgb2YgaGVhZGVycy4KLSAgICogCi0gICAqIEBwYXJhbSBpc0lucHV0IElmIHRydWUsIHJldHVybnMgdGhlIGlucHV0IGhlYWRlcnMuICBJZiBmYWxzZSwgcmV0dXJucyB0aGUgb3V0cHV0IGhlYWRlcnMuCi0gICAqIEByZXR1cm4gQSBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTT0FQSGVhZGVycyhib29sZWFuIGlzSW5wdXQpIHsKLQkgIExpc3QgaGVhZGVycyA9IG5ldyBWZWN0b3IoKTsKLQkKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKTsKLQkgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gaXNJbnB1dCA/Ci0JCQliaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpIDogCi0JCQliaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsJICAJICAKLQkgIAotCSAgZm9yIChJdGVyYXRvciBpdCA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7Ci0JICAgICAgCi0JCSAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotCSAgICAgIAotCSAgICAgIGlmIChlIGluc3RhbmNlb2YgU09BUEhlYWRlciAmJiAhaGVhZGVycy5jb250YWlucyhlKSkJICAgIAkgCi0gICAgCQkgIGhlYWRlcnMuYWRkKGUpOwotCSAgfSAgIAotCSAgCi0JICByZXR1cm4gaGVhZGVyczsKLSAgfSAgCi0gIAotICBwdWJsaWMgTGlzdCBnZXRPcmRlcmVkQm9keVBhcnRzKCkKLSAgewotICAgIExpc3QgcGFydHMgPSBuZXcgVmVjdG9yKG9wZXJhdGlvbl8uZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG9wZXJhdGlvbl8uZ2V0UGFyYW1ldGVyT3JkZXJpbmcoKSkpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdC5uZXh0KCk7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IChTT0FQQm9keSllOwotICAgICAgICBMaXN0IGJvZHlQYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0gICAgICAgIGlmIChib2R5UGFydHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpcGFydHMuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKCFib2R5UGFydHMuY29udGFpbnMocGFydCkgJiYgIWJvZHlQYXJ0cy5jb250YWlucyhwYXJ0LmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcnRzLnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHBhcnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpIHsKLSAgICBpZiAoZnJhZ0NvbnRyb2xsZXJfID09IG51bGwpIHsKLSAgICAgIGZyYWdDb250cm9sbGVyXyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpOwotICAgICAgZnJhZ0NvbnRyb2xsZXJfLnNldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcih3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdDb250cm9sbGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNETmFtZWRDb21wb25lbnQgZ2V0U2NoZW1hKFBhcnQgcGFydCwgU3RyaW5nIGlkKSB7Ci0gICAgaWYgKHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8gPT0gbnVsbCkgewotICAgICAgd3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXyA9IG5ldyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKTsKLSAgICAgIFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgV1NETFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudCliaW5kaW5nRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClzZXJ2aWNlRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICB3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfLmFkZFNjaGVtYXMod3NkbEVsZW1lbnQuZ2V0U2NoZW1hTGlzdCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8uZ2V0WFNEVHlwZShwYXJ0LCBpZCk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEhlYWRlckZyYWdtZW50KFNPQVBIZWFkZXIgc29hcEhlYWRlcikgewotCXJldHVybiBnZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyLCB0cnVlKTsKLSAgfQotICAKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRIZWFkZXJGcmFnbWVudChTT0FQSGVhZGVyIHNvYXBIZWFkZXIsIGJvb2xlYW4gaXNJbnB1dCkgewotCVN0cmluZ0J1ZmZlciBpZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQlQYXJ0IHBhcnQgPSBzb2FwSGVhZGVyLmdldEVQYXJ0KCk7Ci0JaWYgKGlzSW5wdXQpCi0JICBpZC5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuSU5QVVRfSUQpLmFwcGVuZChzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlBBUlRfVE9LRU4pOwotCWVsc2UKLQkgIGlkLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5PVVRQVVRfSUQpLmFwcGVuZChzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlBBUlRfVE9LRU4pOwotCQotCXJldHVybiBnZXRGcmFnbWVudChwYXJ0LCBpZCwgdHJ1ZSwgaXNJbnB1dCk7IC8vIG9ubHkgd3JhcCBpbnB1dCBoZWFkZXIgZnJhZ21lbnRzCi0gIH0KLSAgCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoUGFydCBwYXJ0KSB7Ci0gICAgcmV0dXJuIGdldEZyYWdtZW50KHBhcnQsIHRydWUpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChQYXJ0IHBhcnQsIGJvb2xlYW4gaXNJbnB1dCkgewotICAgIFN0cmluZ0J1ZmZlciBpZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpZiAoaXNJbnB1dCkKLSAgICAgIGlkLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5JTlBVVF9JRCk7Ci0gICAgZWxzZQotICAgICAgaWQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLk9VVFBVVF9JRCk7Ci0KLQlyZXR1cm4gZ2V0RnJhZ21lbnQocGFydCwgaWQsIGZhbHNlLCBmYWxzZSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFBhcnQgcGFydCwgU3RyaW5nQnVmZmVyIGlkLCBib29sZWFuIGlzSGVhZGVyLCBib29sZWFuIHVzZVNPQVBIZWFkZXJXcmFwcGVyKSB7Ci0gICAgU3RyaW5nIHBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0gICAgaWQuYXBwZW5kKHBhcnROYW1lKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBjb25maWcuc2V0SXNXU0RMUGFydCh0cnVlKTsKLSAgICBjb25maWcuc2V0V1NETFBhcnROYW1lKHBhcnROYW1lKTsKLSAgICBjb25maWcuc2V0WFNEQ29tcG9uZW50KGdldFNjaGVtYShwYXJ0LCBpZC50b1N0cmluZygpKSk7Ci0gICAgaWYgKGlzRG9jdW1lbnRTdHlsZSgpIHx8IGlzSGVhZGVyKQotICAgICAgY29uZmlnLnNldFN0eWxlKEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX0RPQ1VNRU5UKTsKLSAgICBlbHNlCi0gICAgICBjb25maWcuc2V0U3R5bGUoRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfUlBDKTsKLSAgICBpZiAob3BlcmF0aW9uVHlwZV8gPT0gQmluZGluZ1R5cGVzLlNPQVApCi0gICAgewotICAgICAgaWYgKCFpc1VzZUxpdGVyYWxfKQotICAgICAgICBjb25maWcuc2V0UGFydEVuY29kaW5nKEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1NPQVApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBjb25maWcuc2V0UGFydEVuY29kaW5nKEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1VSTCk7Ci0KLSAgICAvL2J1ZyAyNDYyNjU6IGZvciB1c2FiaWxpdHksIGlmIHRoZSB0eXBlIGlzIGEgc29hcCBlbmNvZGVkIHN0cmluZyB0aGVuIHdlIGRvIG5vdCB3YW50IHRvIGRpc3BsYXkgb3Igc2VuZCB0aGUgb3B0aW9uYWwgImlkIiBvciAiaHJlZiIgYXR0cmlidXRlcwotICAgIFFOYW1lIHR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKSB7Ci0gICAgCVN0cmluZyBsb2NhbFBhcnQgPSB0eXBlTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAJU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHR5cGVOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgCWlmICgic3RyaW5nIi5lcXVhbHMobG9jYWxQYXJ0KSAmJiAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iLmVxdWFscyhuYW1lc3BhY2VVUkkpICkgewotICAgIAkJaWYgKGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgIAkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB4c2QgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAJCQl4c2QuZ2V0QXR0cmlidXRlVXNlcygpLmNsZWFyKCk7Ci0gICAgCQkJeHNkLmdldEF0dHJpYnV0ZUNvbnRlbnRzKCkuY2xlYXIoKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgCi0gICAgSVhTREZyYWdtZW50IGZyYWdtZW50ID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLnRvU3RyaW5nKCksIHBhcnQuZ2V0TmFtZSgpKTsKLSAgICAgCi0gICAgLy8gbGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYSBjb3JyZXNwb25kaW5nIHdyYXBwZXIgZm9yIHRoaXMgZnJhZ21lbnQKLSAgICBpZiAodXNlU09BUEhlYWRlcldyYXBwZXIgJiYgIShmcmFnbWVudCBpbnN0YW5jZW9mIFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpKSB7Ci0gICAgCVNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQgd3JhcHBlciA9IChTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KSBoZWFkZXJDYWNoZS5nZXQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgCQotICAgIAkvLyBubyB3cmFwcGVyLCBsZXQncyB3cmFwIGl0Ci0gICAgCWlmICh3cmFwcGVyID09IG51bGwpIHsKLSAgICAJCXdyYXBwZXIgPSBuZXcgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudChmcmFnbWVudCk7ICAgIAkJCi0gICAgCQloZWFkZXJDYWNoZS5wdXQoZnJhZ21lbnQuZ2V0SUQoKSwgd3JhcHBlcik7Ci0gICAgCQkKLSAgICAJCS8vIGFsc28gcHV0IHRoaXMgd3JhcHBlciBmcmFnbWVudCBpbiB0aGUgbWFzdGVyIGNhY2hlCi0gICAgCQlnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmFkZFRvQ2FjaGUod3JhcHBlci5nZXRJRCgpLCB3cmFwcGVyKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHdyYXBwZXI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmcmFnbWVudDsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnRCeUlEKFN0cmluZyBpZCkgewotICAgIHJldHVybiBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldENhY2hlZEZyYWdtZW50KGlkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUFsbEZyYWdtZW50KCkgewotICAgIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZW1wdHlDYWNoZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudFN0eWxlKCkKLSAgewotICAgIHJldHVybiBpc0RvY3VtZW50U3R5bGVfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTb2FwQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBzb2FwQWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVXNlTGl0ZXJhbCgpCi0gIHsKLSAgICByZXR1cm4gaXNVc2VMaXRlcmFsXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmdTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gZW5jb2RpbmdTdHlsZV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nTmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBlbmNvZGluZ05hbWVzcGFjZV87Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE9wZXJhdGlvblR5cGUoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblR5cGVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5YWQ4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotCi0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlXzsKLQotICBwdWJsaWMgV1NETFNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgc2VydmljZV8gPSBzZXJ2aWNlOwotICAgIHNldERvY3VtZW50YXRpb24oc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKSB7Ci0gICAgcmV0dXJuIHNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3NMb2NhdGlvbihCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlXy5nZXRQb3J0cygpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7aS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWkubmV4dCgpOwotICAgICAgaWYgKHBvcnQuZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZXF1YWxzKGJpbmRpbmcuZ2V0UU5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBqID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7ai5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClqLm5leHQoKTsKLSAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWVsZW1lbnQ7Ci0gICAgICAgICAgICByZXR1cm4gc29hcEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKWVsZW1lbnQ7Ci0gICAgICAgICAgICByZXR1cm4gaHR0cEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBidWlsZE1vZGVsKCkgewotICAgIGlmIChzZXJ2aWNlXyAhPSBudWxsKSB7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlXy5nZXRQb3J0cygpOwotICAgICAgTWFwIGJpbmRpbmdzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXQubmV4dCgpOwotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKTsKLSAgICAgICAgaWYgKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSA9PSBudWxsKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYmluZGluZ3MucHV0KGJpbmRpbmcuZ2V0UU5hbWUoKSwgYmluZGluZyk7Ci0gICAgICB9Ci0gICAgICBXU0RMQmluZGluZ0VsZW1lbnRbXSB3c2RsQmluZGluZ0VsZW1lbnRzID0gbmV3IFdTRExCaW5kaW5nRWxlbWVudFtnZXROdW1iZXJPZkVsZW1lbnRzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKV07Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsQmluZGluZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHdzZGxCaW5kaW5nRWxlbWVudHNbaV0gPSAoV1NETEJpbmRpbmdFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NkbEJpbmRpbmdFbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICBRTmFtZSBxbmFtZSA9IHdzZGxCaW5kaW5nRWxlbWVudHNbal0uZ2V0QmluZGluZygpLmdldFFOYW1lKCk7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWJpbmRpbmdzLmdldChxbmFtZSk7Ci0gICAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpIHsKLSAgICAgICAgICBiaW5kaW5ncy5yZW1vdmUocW5hbWUpOwotICAgICAgICAgIHdzZGxCaW5kaW5nRWxlbWVudHNbal0uc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgICB3c2RsQmluZGluZ0VsZW1lbnRzW2pdLmJ1aWxkTW9kZWwoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgZGlzY29ubmVjdCh3c2RsQmluZGluZ0VsZW1lbnRzW2pdLCBXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORyk7Ci0gICAgICB9Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmluZGluZ3MudmFsdWVzKCkuaXRlcmF0b3IoKTtpdC5oYXNOZXh0KCk7KSB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWl0Lm5leHQoKTsKLSAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IHdzZGxCaW5kaW5nRWxlbWVudCA9IG5ldyBXU0RMQmluZGluZ0VsZW1lbnQoYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCBnZXRNb2RlbCgpLCBiaW5kaW5nKTsKLSAgICAgICAgY29ubmVjdCh3c2RsQmluZGluZ0VsZW1lbnQsV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgd3NkbEJpbmRpbmdFbGVtZW50LmJ1aWxkTW9kZWwoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlMjgwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldElEKFN0cmluZyBpZCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpOwotICAgIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpOwotICBwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KTsKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KTsKLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKTsKLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNBcnJheUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNBcnJheUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZmE2ZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQRW5jQXJyYXlGcmFnbWVudCBleHRlbmRzIElYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjUwY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudCBleHRlbmRzIElYU0REZWxlZ2F0aW9uRnJhZ21lbnQKLXsKLSAgcHVibGljIHZvaWQgc2V0VVJJUmVmZXJlbmNlcyhIYXNodGFibGUgdXJpUmVmZXJlbmNlcyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZjIzY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YSwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIsIDIwMDMxMjMxYSAxCi0qIFZlcnNpb24gMS4xIDAzLzAyLzI4IDE1OjI2OjA1Ci0qLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEQXR0cmlidXRlRnJhZ21lbnQgZXh0ZW5kcyBJWFNERGVsZWdhdGlvbkZyYWdtZW50IHsKLSAgCi0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQ29tcGxleEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRENvbXBsZXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFmZmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQ29tcGxleEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRENvbXBsZXhGcmFnbWVudCBleHRlbmRzIElYU0RNYXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlQ29tcGxleEluc3RhbmNlKCk7Ci0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzU1MzU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRERlbGVnYXRpb25GcmFnbWVudCBleHRlbmRzIElYU0RGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldFhTRERlbGVnYXRpb25GcmFnbWVudChJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnQpOwotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERWxlbWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Y2FlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNERWxlbWVudEZyYWdtZW50IGV4dGVuZHMgSVhTRERlbGVnYXRpb25GcmFnbWVudCB7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE5JTCA9ICJuaWxWYWx1ZSI7ICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTklMX1ZBTFVFID0gIm5pbCI7IAotICAKLSAgcHVibGljIGludCBnZXRNaW5PY2N1cnMoKTsKLSAgcHVibGljIGludCBnZXRNYXhPY2N1cnMoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNOaWxsYWJsZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldE5pbElEKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzTmlsKCk7Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhNTU1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotcHVibGljIGludGVyZmFjZSBJWFNERnJhZ21lbnQgZXh0ZW5kcyBJRnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpOwotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKTsKLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gIHB1YmxpYyBFbGVtZW50IHNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCxTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyBib29sZWFuIHNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyAoTm9kZSBhdHRyaWJ1dGUpOwotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYyk7Ci0KLSAgcHVibGljIFN0cmluZyBnZW5JRCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEFsbEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQWxsRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhZWU1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQWxsRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNER3JvdXBBbGxGcmFnbWVudCBleHRlbmRzIElYU0RHcm91cEZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBnZXRHcm91cEFsbEluc3RhbmNlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDEwOTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RHcm91cENob2ljZUZyYWdtZW50IGV4dGVuZHMgSVhTREdyb3VwRnJhZ21lbnQgewotICBwdWJsaWMgWFNEUGFydGljbGVbXSBnZXRDaG9pY2VzKCk7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZShpbnQgY2hvaWNlSW5kZXgpOwotICBwdWJsaWMgaW50IGdldENob2ljZUluZGV4KFN0cmluZyBncm91cElEKTsKLSAgcHVibGljIHZvaWQgc2V0Q2hvaWNlSW5kZXgoU3RyaW5nIGdyb3VwSUQsIGludCBjaG9pY2VJbmRleCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDQ0ODM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREdyb3VwRnJhZ21lbnQgZXh0ZW5kcyBJWFNETWFwRnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0RNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCk7Ci0gIHB1YmxpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoKTsKLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0R3JvdXBJRHMoKTsKLSAgcHVibGljIFN0cmluZ1tdIGdldEdyb3VwTWVtYmVySURzKFN0cmluZyBncm91cElEKTsKLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKFN0cmluZyBncm91cElEKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cFNlcUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNThmYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cFNlcUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREdyb3VwU2VxRnJhZ21lbnQgZXh0ZW5kcyBJWFNER3JvdXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RNYXBGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RNYXBGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTFlNDAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNETWFwRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNETWFwRnJhZ21lbnQgZXh0ZW5kcyBJWFNERnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKTsKLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCk7Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRGcmFnbWVudHNPcmRlcigpOwotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFN0cmluZyBpZCk7Ci0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRGcmFnbWVudHMoU3RyaW5nW10gaWRzKTsKLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEFsbEZyYWdtZW50cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjU4ZDVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZXh0ZW5kcyBJWFNERnJhZ21lbnQgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjM4MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEU2ltcGxlTGlzdEZyYWdtZW50IGV4dGVuZHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVMaXN0SW5zdGFuY2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGNhZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZXh0ZW5kcyBJWFNETWFwRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBnZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVVbmlvbkluc3RhbmNlKGludCBtZW1iZXJUeXBlSW5kZXgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZTEwZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyLmphdmEsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yLCAyMDAzMTIzMWEgMgotKiBWZXJzaW9uIDEuMiAwMy8wNi8wNSAxNDoxNzo0NAotKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHB1YmxpYyBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgIAlYU0RBdHRyaWJ1dGVVc2UgYXR0cmlidXRlID0gKFhTREF0dHJpYnV0ZVVzZSljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZSAhPSBudWxsICYmIGF0dHJpYnV0ZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLSAgIAkgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHJlc29sdmVkQXR0cmlidXRlID0gcmVzb2x2ZVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKGF0dHJpYnV0ZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpKTsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSBnZXRYU0RUeXBlRGVmaW5pdGlvbihyZXNvbHZlZEF0dHJpYnV0ZSk7Ci0gICAgICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZyA9IG5ldyBYU0RBdHRyaWJ1dGVGcmFnbWVudChpZCwgcmVzb2x2ZWRBdHRyaWJ1dGUuZ2V0TmFtZSgpLCBjb25maWcpOwotICAgICAgYXR0cmlidXRlRnJhZy5zZXRYU0RUeXBlRGVmaW5pdGlvbih0eXBlRGVmKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGF0dHJpYnV0ZVR5cGVDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIGF0dHJpYnV0ZVR5cGVDb25maWcuc2V0WFNEQ29tcG9uZW50KHR5cGVEZWYpOwotICAgICAgYXR0cmlidXRlVHlwZUNvbmZpZy5zZXRTdHlsZShjb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgICBhdHRyaWJ1dGVUeXBlQ29uZmlnLnNldFBhcnRFbmNvZGluZyhjb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgICAgYXR0cmlidXRlVHlwZUNvbmZpZy5zZXRXU0RMUGFydE5hbWUoY29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICAgIElYU0RGcmFnbWVudCB4c2RGcmFnbWVudCA9IGdldENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudChhdHRyaWJ1dGVUeXBlQ29uZmlnLCBhdHRyaWJ1dGVGcmFnLmdlbklEKCksIHJlc29sdmVkQXR0cmlidXRlLmdldE5hbWUoKSk7Ci0gICAgICBhdHRyaWJ1dGVGcmFnLnNldFhTRERlbGVnYXRpb25GcmFnbWVudCh4c2RGcmFnbWVudCk7Ci0gICAgICByZXR1cm4gYXR0cmlidXRlRnJhZzsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gcmVzb2x2ZVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSkgewotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKGF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiByZXNvbHZlZEF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCk7Ci0gICAgICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZShyZXNvbHZlZEF0dHJpYnV0ZSkpCi0gICAgICB7Ci0gICAgICAgIFhTRENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLnJlc29sdmVYU0ROYW1lZENvbXBvbmVudChyZXNvbHZlZEF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChyZXNvbHZlZENvbXBvbmVudCAhPSBudWxsICYmIChyZXNvbHZlZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKSkKLSAgICAgICAgICByZXNvbHZlZEF0dHJpYnV0ZSA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbilyZXNvbHZlZENvbXBvbmVudDsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXNvbHZlZEF0dHJpYnV0ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGF0dHJpYnV0ZTsKLSAgfQotCi0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlKSB7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoYXR0cmlidXRlLmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHJldHVybiBhdHRyaWJ1dGUuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gYXR0cmlidXRlLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODlhMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4Rml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4UmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbnRlbnRUeXBlQ2F0ZWdvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaW50IGNhdGVnb3J5ID0gY29tcGxleFR5cGUuZ2V0Q29udGVudFR5cGVDYXRlZ29yeSgpLmdldFZhbHVlKCk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlICE9IG51bGwgJiYgY29tcGxleFR5cGUuaXNNaXhlZCgpKQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCAhPSBudWxsKQotICAgICAgcmV0dXJuIGdldFhTRENvbXBsZXhGcmFnbWVudChjYXRlZ29yeSxjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNERW1wdHlGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRENvbXBsZXhGcmFnbWVudChpbnQgY2F0ZWdvcnksWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgaW50IG1pbk9jY3VycyA9IGNvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICBpbnQgbWF4T2NjdXJzID0gY29uZmlnLmdldE1heE9jY3VycygpOwotICAgIGlmIChtaW5PY2N1cnMgPT0gbWF4T2NjdXJzKQotICAgICAgaWYoY2F0ZWdvcnkgPT0gWFNEQ29udGVudFR5cGVDYXRlZ29yeS5TSU1QTEUpewotICAgICAgCXJldHVybiBuZXcgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UJCi0gICAgICAJcmV0dXJuIG5ldyBYU0RDb21wbGV4Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICBlbHNlIAotICAgIAlpZihjYXRlZ29yeSA9PSBYU0RDb250ZW50VHlwZUNhdGVnb3J5LlNJTVBMRSkKLSAgICAJICByZXR1cm4gbmV3IFhTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgIAllbHNlCi0gICAgICAgICAgcmV0dXJuIG5ldyBYU0RDb21wbGV4UmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0ZDZhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MDQgICAxODEwNjUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBkb2VzIG5vdCBoYW5kbGUgdHlwZXMgcmVmZXJlbmNlZCBhY3Jvc3MgaW5saW5lIHNjaGVtYXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREVsZW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZWRFbGVtZW50ID0gcmVzb2x2ZVhTREVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSByZXNvbHZlWFNEVHlwZURlZmluaXRpb24oZ2V0WFNEVHlwZURlZmluaXRpb24ocmVzb2x2ZWRFbGVtZW50KSk7Ci0gICAgICBpZiAodHlwZURlZiAhPSBudWxsKSB7Ci0gICAgICAgIGludCBtaW5PY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgICAgIGludCBtYXhPY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01BWF9PQ0NVUlM7Ci0gICAgICAgIFhTRENvbmNyZXRlQ29tcG9uZW50IGNvbmNyZXRlQ29tcG9uZW50ID0gZWxlbWVudC5nZXRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKGNvbmNyZXRlQ29tcG9uZW50ICE9IG51bGwgJiYgY29uY3JldGVDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotICAgICAgICAgIFhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKWNvbmNyZXRlQ29tcG9uZW50OwotICAgICAgICAgIGlmIChwYXJ0aWNsZS5pc1NldE1pbk9jY3VycygpKQotICAgICAgICAgICAgbWluT2NjdXJzID0gcGFydGljbGUuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICAgICAgaWYgKHBhcnRpY2xlLmlzU2V0TWF4T2NjdXJzKCkpCi0gICAgICAgICAgICBtYXhPY2N1cnMgPSBwYXJ0aWNsZS5nZXRNYXhPY2N1cnMoKTsKLSAgICAgICAgfQotICAgICAgICBjb25maWcuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgICAgIGNvbmZpZy5zZXRNYXhPY2N1cnMobWF4T2NjdXJzKTsKLSAgICAgICAgSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZyA9IG5ldyBYU0RFbGVtZW50RnJhZ21lbnQoaWQsIHJlc29sdmVkRWxlbWVudC5nZXROYW1lKCksIGNvbmZpZyk7Ci0gICAgICAgIGVsZW1lbnRGcmFnLnNldFhTRFR5cGVEZWZpbml0aW9uKHR5cGVEZWYpOwotICAgICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBlbGVtZW50VHlwZUNvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRYU0RDb21wb25lbnQodHlwZURlZik7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldE1pbk9jY3VycyhtaW5PY2N1cnMpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRNYXhPY2N1cnMobWF4T2NjdXJzKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0U3R5bGUoY29uZmlnLmdldFN0eWxlKCkpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRQYXJ0RW5jb2RpbmcoY29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0V1NETFBhcnROYW1lKGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgICAgIElYU0RGcmFnbWVudCB4c2RGcmFnbWVudCA9IGdldENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudChlbGVtZW50VHlwZUNvbmZpZywgZWxlbWVudEZyYWcuZ2VuSUQoKSwgcmVzb2x2ZWRFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgIGVsZW1lbnRGcmFnLnNldFhTRERlbGVnYXRpb25GcmFnbWVudCh4c2RGcmFnbWVudCk7Ci0gICAgICAgIHJldHVybiBlbGVtZW50RnJhZzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc29sdmVYU0RFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpIHsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmIChlbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZWRFbGVtZW50ID0gZWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUocmVzb2x2ZWRFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkucmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KHJlc29sdmVkRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXNvbHZlZENvbXBvbmVudCAhPSBudWxsICYmIChyZXNvbHZlZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikpCi0gICAgICAgICAgcmVzb2x2ZWRFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbilyZXNvbHZlZENvbXBvbmVudDsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXNvbHZlZEVsZW1lbnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0gIAotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIHJlc29sdmVYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKSB7Ci0JICAKLQkgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKHR5cGVEZWYpKSB7Ci0JCSAgWFNEQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkucmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KHR5cGVEZWYpOwotCQkgIGlmIChyZXNvbHZlZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotCQkJICByZXR1cm4gKFhTRFR5cGVEZWZpbml0aW9uKSByZXNvbHZlZENvbXBvbmVudDsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHR5cGVEZWY7Ci0gIH0KLQotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50KSB7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoZWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gZWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgZWxzZSBpZiAoZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDJkOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIgeHNkU2ltcGxlTWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgeHNkQ29tcGxleE1hcHBlcl87Ci0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlciB4c2RFbGVtZW50TWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyIHhzZEF0dHJpYnV0ZU1hcHBlcl87Ci0gIHByaXZhdGUgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyIHhzZFBhcnRpY2xlTWFwcGVyXzsKLQotICBwdWJsaWMgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgICB4c2RTaW1wbGVNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RDb21wbGV4TWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkRWxlbWVudE1hcHBlcl8gPSBudWxsOwotICAgIHhzZEF0dHJpYnV0ZU1hcHBlcl8gPSBudWxsOwotICAgIHhzZFBhcnRpY2xlTWFwcGVyXz0gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEU2ltcGxlTWFwcGVyKCkgewotICAgIGlmICh4c2RTaW1wbGVNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RTaW1wbGVNYXBwZXJfID0gbmV3IFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RTaW1wbGVNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEQ29tcGxleE1hcHBlcigpIHsKLSAgICBpZiAoeHNkQ29tcGxleE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZENvbXBsZXhNYXBwZXJfID0gbmV3IFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkQ29tcGxleE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNERWxlbWVudE1hcHBlcigpIHsKLSAgICBpZiAoeHNkRWxlbWVudE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZEVsZW1lbnRNYXBwZXJfID0gbmV3IFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZEVsZW1lbnRNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyIGdldFhTREF0dHJpYnV0ZU1hcHBlcigpIHsKLSAgICBpZiAoeHNkQXR0cmlidXRlTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkQXR0cmlidXRlTWFwcGVyXyA9IG5ldyBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RBdHRyaWJ1dGVNYXBwZXJfOwotICB9Ci0gIAotICBwcml2YXRlIFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RQYXJ0aWNsZU1hcHBlcigpIHsKLSAgICBpZiAoeHNkUGFydGljbGVNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RQYXJ0aWNsZU1hcHBlcl8gPSBuZXcgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RQYXJ0aWNsZU1hcHBlcl87Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGNvbmZpZyA9IHJlc29sdmVYU0RDb21wb25lbnQoY29uZmlnKTsKLSAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKGNvbXBvbmVudCkpCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHJldHVybiBnZXRYU0RFbGVtZW50TWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pCi0gICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgcmV0dXJuIGdldFhTRENvbXBsZXhNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHJldHVybiBnZXRYU0RQYXJ0aWNsZU1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlQ29udGVudCkKLSAgICAgIHJldHVybiBnZXRYU0RQYXJ0aWNsZU1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZVVzZSkKLSAgICAgIHJldHVybiBnZXRYU0RBdHRyaWJ1dGVNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsJCi0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM2Nzk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cEFsbEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwU2VxRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb3NpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFdpbGRjYXJkOwotCi0KLXB1YmxpYyBjbGFzcyBYU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50OwotICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHhzZFBhcnRpY2xlQ29udGVudCA9ICgoWFNEUGFydGljbGUpY29tcG9uZW50KS5nZXRDb250ZW50KCk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGVDb250ZW50KQotICAgICAgeHNkUGFydGljbGVDb250ZW50ID0gKFhTRFBhcnRpY2xlQ29udGVudCljb21wb25lbnQ7Ci0gICAgZWxzZQotICAgICAgeHNkUGFydGljbGVDb250ZW50ID0gbnVsbDsKLSAgICBpZiAoeHNkUGFydGljbGVDb250ZW50ICE9IG51bGwpIHsKLSAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikKLSAgICAgICAgcmV0dXJuIGdldFhTRE1vZGVsR3JvdXBEZWZGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCAoWFNETW9kZWxHcm91cERlZmluaXRpb24peHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApCi0gICAgICAgIHJldHVybiBnZXRYU0RNb2RlbEdyb3VwRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgKFhTRE1vZGVsR3JvdXApeHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRFdpbGRjYXJkKQotICAgICAgICByZXR1cm4gZ2V0WFNEV2lsZGNhcmRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCAoWFNEV2lsZGNhcmQpeHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRE1vZGVsR3JvdXBEZWZGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uIHhzZE1vZGVsR3JvdXBEZWYpIHsKLSAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiByZXNvbHZlZFhTRE1vZGVsR3JvdXBEZWYgPSB4c2RNb2RlbEdyb3VwRGVmOwotICAgIGlmICh4c2RNb2RlbEdyb3VwRGVmLmlzTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICAgIHJlc29sdmVkWFNETW9kZWxHcm91cERlZiA9IHhzZE1vZGVsR3JvdXBEZWYuZ2V0UmVzb2x2ZWRNb2RlbEdyb3VwRGVmaW5pdGlvbigpOwotICAgIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IHJlc29sdmVkWFNETW9kZWxHcm91cERlZi5nZXRNb2RlbEdyb3VwKCk7Ci0gICAgaWYgKHhzZE1vZGVsR3JvdXAgPT0gbnVsbCkKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRE1vZGVsR3JvdXBGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRE1vZGVsR3JvdXBGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIGludCBtaW5PY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgaW50IG1heE9jY3VycyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICBYU0RDb25jcmV0ZUNvbXBvbmVudCBjb25jcmV0ZUNvbXBvbmVudCA9IHhzZE1vZGVsR3JvdXAuZ2V0Q29udGFpbmVyKCk7Ci0gICAgaWYgKGNvbmNyZXRlQ29tcG9uZW50ICE9IG51bGwgJiYgY29uY3JldGVDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotICAgICAgWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpY29uY3JldGVDb21wb25lbnQ7Ci0gICAgICBpZiAocGFydGljbGUuaXNTZXRNaW5PY2N1cnMoKSkKLSAgICAgICAgbWluT2NjdXJzID0gcGFydGljbGUuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICBpZiAocGFydGljbGUuaXNTZXRNYXhPY2N1cnMoKSkKLSAgICAgICAgbWF4T2NjdXJzID0gcGFydGljbGUuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgfQotICAgIGNvbmZpZy5zZXRNaW5PY2N1cnMobWluT2NjdXJzKTsKLSAgICBjb25maWcuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgCi0gICAgc3dpdGNoICh4c2RNb2RlbEdyb3VwLmdldENvbXBvc2l0b3IoKS5nZXRWYWx1ZSgpKSB7Ci0gICAgICBjYXNlIFhTRENvbXBvc2l0b3IuU0VRVUVOQ0U6IAotICAgICAgICBpZiAobWluT2NjdXJzID09IG1heE9jY3VycykKLSAgICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwU2VxRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICBjYXNlIFhTRENvbXBvc2l0b3IuQ0hPSUNFOgotICAgICAgICBpZiAobWluT2NjdXJzID09IG1heE9jY3VycykKLSAgICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICBjYXNlIFhTRENvbXBvc2l0b3IuQUxMOgotICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwQWxsRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNEV2lsZGNhcmRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFdpbGRjYXJkIHhzZFBhcnRpY2xlQ29udGVudCkgewotICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTFkMTk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBFbmNBcnJheUZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHByaXZhdGUgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciB4c2RMaXRlcmFsTWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgeHNkQ29tcGxleE1hcHBlcl87Ci0KLSAgcHVibGljIFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gICAgeHNkTGl0ZXJhbE1hcHBlcl8gPSBudWxsOwotICAgIHhzZENvbXBsZXhNYXBwZXJfID0gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBnZXRYU0RMaXRlcmFsTWFwcGVyKCkgewotICAgIGlmICh4c2RMaXRlcmFsTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkTGl0ZXJhbE1hcHBlcl8gPSBuZXcgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkTGl0ZXJhbE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RDb21wbGV4TWFwcGVyKCkgewotICAgIGlmICh4c2RDb21wbGV4TWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkQ29tcGxleE1hcHBlcl8gPSBuZXcgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgICByZXR1cm4geHNkQ29tcGxleE1hcHBlcl87Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGlmIChjb25maWcuZ2V0SXNXU0RMUGFydCgpKSB7Ci0gICAgICBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50IHdyYXBwZXJGcmFnbWVudCA9IG5ldyBTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQoaWQsIG5hbWUsIG51bGwpOwotICAgICAgU3RyaW5nIGRlbGVnYXRpb25GcmFnSWQgPSB3cmFwcGVyRnJhZ21lbnQuZ2VuSUQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBnZXRGcmFnbWVudERlbGVnYXRlKGNvbmZpZywgZGVsZWdhdGlvbkZyYWdJZCwgbmFtZSk7Ci0gICAgICB3cmFwcGVyRnJhZ21lbnQuc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KGRlbGVnYXRpb25GcmFnbWVudCk7Ci0gICAgICBnZXRDb250cm9sbGVyKCkuYWRkVG9DYWNoZShkZWxlZ2F0aW9uRnJhZ0lkLCBkZWxlZ2F0aW9uRnJhZ21lbnQpOwotICAgICAgcmV0dXJuIHdyYXBwZXJGcmFnbWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldEZyYWdtZW50RGVsZWdhdGUoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50RGVsZWdhdGUoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgY29uZmlnID0gcmVzb2x2ZVhTRENvbXBvbmVudChjb25maWcpOwotICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUoY29tcG9uZW50KSkKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICAgIGlmIChYU0RUeXBlRGVmaW5pdGlvblV0aWwuaXNTb2FwRW5jQXJyYXkoY29tcGxleFR5cGUpKQotICAgICAgICByZXR1cm4gZ2V0U09BUEVuY0FycmF5RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgY29tcGxleFR5cGUpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZ2V0WFNEQ29tcGxleE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNETGl0ZXJhbE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0U09BUEVuY0FycmF5RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUpIHsKLSAgICBFTGlzdCB4c2RBdHRyQ29udGVudHMgPSBjb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVDb250ZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQXR0ckNvbnRlbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZU5hbWVzcGFjZVVSSSA9IG51bGw7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZUxvY2FsTmFtZSA9IG51bGw7Ci0gICAgICBpbnQgc29hcEVuY0FycmF5RGltZW5zaW9uID0gMDsKLSAgICAgIFhTREF0dHJpYnV0ZUdyb3VwQ29udGVudCB4c2RBdHRyQ29udGVudCA9IChYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQpeHNkQXR0ckNvbnRlbnRzLmdldChpKTsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IHhzZEF0dHJDb250ZW50LmdldEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBhcnJheVR5cGVBdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhGcmFnbWVudENvbnN0YW50cy5VUklfV1NETCwgRnJhZ21lbnRDb25zdGFudHMuUU5BTUVfTE9DQUxfTkFNRV9BUlJBWV9UWVBFKTsKLSAgICAgIGlmIChhcnJheVR5cGVBdHRyICE9IG51bGwgJiYgYXJyYXlUeXBlQXR0ci5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgaW50IGNvbG9uID0gYXJyYXlUeXBlQXR0ci5pbmRleE9mKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgICAgU3RyaW5nIG5zUHJlZml4ID0gKGNvbG9uID4gMCkgPyBhcnJheVR5cGVBdHRyLnN1YnN0cmluZygwLCBjb2xvbikgOiBudWxsOwotICAgICAgICBzb2FwRW5jQXJyYXlUeXBlTmFtZXNwYWNlVVJJID0gKFN0cmluZyl4c2RBdHRyQ29udGVudC5nZXRTY2hlbWEoKS5nZXRRTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwKCkuZ2V0KG5zUHJlZml4KTsKLSAgICAgICAgaW50IGRpbWVuc2lvbkluZGV4ID0gYXJyYXlUeXBlQXR0ci5pbmRleE9mKEZyYWdtZW50Q29uc3RhbnRzLkxFRlRfU1FVQVJFX0JSQUNLRVQpOwotICAgICAgICBzb2FwRW5jQXJyYXlUeXBlTG9jYWxOYW1lID0gYXJyYXlUeXBlQXR0ci5zdWJzdHJpbmcoY29sb24gKyAxLCBkaW1lbnNpb25JbmRleCk7Ci0gICAgICAgIFN0cmluZyBkaW1lbnNpb25TdHJpbmcgPSBhcnJheVR5cGVBdHRyLnN1YnN0cmluZyhkaW1lbnNpb25JbmRleCwgYXJyYXlUeXBlQXR0ci5sZW5ndGgoKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGltZW5zaW9uU3RyaW5nLmxlbmd0aCgpIC0gMTsgaisrKSB7Ci0gICAgICAgICAgaWYgKGRpbWVuc2lvblN0cmluZy5jaGFyQXQoaikgPT0gRnJhZ21lbnRDb25zdGFudHMuTEVGVF9TUVVBUkVfQlJBQ0tFVC5jaGFyQXQoMCkgJiYgZGltZW5zaW9uU3RyaW5nLmNoYXJBdChqICsgMSkgPT0gRnJhZ21lbnRDb25zdGFudHMuUklHSFRfU1FVQVJFX0JSQUNLRVQuY2hhckF0KDApKSB7Ci0gICAgICAgICAgICBzb2FwRW5jQXJyYXlEaW1lbnNpb24rKzsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzb2FwRW5jQXJyYXlEaW1lbnNpb24gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoc29hcEVuY0FycmF5VHlwZU5hbWVzcGFjZVVSSSAhPSBudWxsICYmIHNvYXBFbmNBcnJheVR5cGVMb2NhbE5hbWUgIT0gbnVsbCAmJiBzb2FwRW5jQXJyYXlEaW1lbnNpb24gPT0gMSkgewotICAgICAgICBYU0RDb21wb25lbnQgc29hcEVuY0FycmF5VHlwZSA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLmdldFhTRFR5cGVGcm9tU2NoZW1hKHNvYXBFbmNBcnJheVR5cGVOYW1lc3BhY2VVUkksIHNvYXBFbmNBcnJheVR5cGVMb2NhbE5hbWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHNvYXBFbmNBcnJheVR5cGUgIT0gbnVsbCAmJiBzb2FwRW5jQXJyYXlUeXBlIGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pIHsKLSAgICAgICAgICBYU0RNb2RlbEdyb3VwIHNlcXVlbmNlID0gbnVsbDsKLSAgICAgICAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgICAgICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCAhPSBudWxsICYmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkpIHsKLSAgICAgICAgICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQgPSAoKFhTRFBhcnRpY2xlKWNvbXBsZXhUeXBlQ29udGVudCkuZ2V0Q29udGVudCgpOwotICAgICAgICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApCi0gICAgICAgICAgICAgIHNlcXVlbmNlID0gKFhTRE1vZGVsR3JvdXApeHNkUGFydGljbGVDb250ZW50OwotICAgICAgICAgIH0KLSAgICAgICAgICBJU09BUEVuY0FycmF5RnJhZ21lbnQgZnJhZzsKLSAgICAgICAgICBpZiAoY29uZmlnLmdldE1pbk9jY3VycygpID09IGNvbmZpZy5nZXRNYXhPY2N1cnMoKSkKLSAgICAgICAgICAgIGZyYWcgPSBuZXcgU09BUEVuY0FycmF5Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCBzZXF1ZW5jZSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhZyA9IG5ldyBTT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgc2VxdWVuY2UpOwotICAgICAgICAgIGZyYWcuc2V0WFNEVHlwZURlZmluaXRpb24oKFhTRFR5cGVEZWZpbml0aW9uKXNvYXBFbmNBcnJheVR5cGUpOwotICAgICAgICAgIHJldHVybiBmcmFnOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBnZXRYU0RDb21wbGV4TWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTdmMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RWYXJpZXR5OwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoc2ltcGxlVHlwZSAhPSBudWxsICYmIHNpbXBsZVR5cGUuZ2V0VmFyaWV0eSgpICE9IG51bGwpIHsKLSAgICAgIHN3aXRjaCAoc2ltcGxlVHlwZS5nZXRWYXJpZXR5KCkuZ2V0VmFsdWUoKSkgewotICAgICAgICBjYXNlIFhTRFZhcmlldHkuQVRPTUlDOgotICAgICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVBdG9taWNGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICAgICAgY2FzZSBYU0RWYXJpZXR5LkxJU1Q6Ci0gICAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZUxpc3RGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICAgICAgY2FzZSBYU0RWYXJpZXR5LlVOSU9OOgotICAgICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVVbmlvbkZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RTaW1wbGVBdG9taWNGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBib29sZWFuIGlzRml4ZWQgPSAoKGNvbmZpZy5nZXRNaW5PY2N1cnMoKSA9PSBjb25maWcuZ2V0TWF4T2NjdXJzKCkpICYmIGNvbmZpZy5nZXRNYXhPY2N1cnMoKSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpOwotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZFNpbXBsZVR5cGVEZWYgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZEJhc2VTaW1wbGVUeXBlRGVmID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKVhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oeHNkU2ltcGxlVHlwZURlZik7Ci0gICAgU3RyaW5nIGJhc2VTaW1wbGVUeXBlRGVmTlMgPSBudWxsOwotICAgIFN0cmluZyBiYXNlU2ltcGxlVHlwZURlZk5hbWUgPSBudWxsOwotICAgIGlmICh4c2RCYXNlU2ltcGxlVHlwZURlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VTaW1wbGVUeXBlRGVmTlMgPSB4c2RCYXNlU2ltcGxlVHlwZURlZi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGJhc2VTaW1wbGVUeXBlRGVmTmFtZSA9IHhzZEJhc2VTaW1wbGVUeXBlRGVmLmdldE5hbWUoKTsKLSAgICB9Ci0gICAgYm9vbGVhbiBpc0VudW0gPSBpc1NpbXBsZVR5cGVFbnVtZXJhdGlvbih4c2RTaW1wbGVUeXBlRGVmKTsKLSAgICBpZiAoRnJhZ21lbnRDb25zdGFudHMuVVJJX1hTRC5lcXVhbHMoYmFzZVNpbXBsZVR5cGVEZWZOUykpCi0gICAgewotICAgICAgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImRhdGUiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZURhdGVUaW1lRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURSx4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImRhdGVUaW1lIikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FLHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZ1llYXJNb250aCIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlRGF0ZVRpbWVGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRILHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZ01vbnRoRGF5IikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dNT05USERBWSx4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImdEYXkiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZUdEYXlGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsgICAgICAgIAotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiYm9vbGVhbiIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlQm9vbGVhbkZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgIH0KLQotICAgIGlmIChpc0VudW0pCi0gICAgewotICAgICAgaWYgKGlzRml4ZWQpCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZFNpbXBsZVR5cGVEZWYuZ2V0RW51bWVyYXRpb25GYWNldHMoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkU2ltcGxlVHlwZURlZi5nZXRFbnVtZXJhdGlvbkZhY2V0cygpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChpc0ZpeGVkKQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgaW50IGNhbGVuZGFyVHlwZSxYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB4c2REYXRlVGltZVR5cGUsYm9vbGVhbiBpc0VudW0sYm9vbGVhbiBpc0ZpeGVkKQotICB7Ci0gICAgaWYgKGlzRW51bSkKLSAgICB7Ci0gICAgICBpZiAoaXNGaXhlZCkKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkRGF0ZVRpbWVUeXBlLmdldEVudW1lcmF0aW9uRmFjZXRzKCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZERhdGVUaW1lVHlwZS5nZXRFbnVtZXJhdGlvbkZhY2V0cygpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChpc0ZpeGVkKQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgY2FsZW5kYXJUeXBlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgY2FsZW5kYXJUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZ2V0WFNEU2ltcGxlR0RheUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkRGF0ZVRpbWVUeXBlLGJvb2xlYW4gaXNFbnVtLGJvb2xlYW4gaXNGaXhlZCkKLSAgewotICAgIGlmIChpc0VudW0pCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBPcHRpb25WZWN0b3Igb3B0aW9uVmVjdG9yID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIFN0cmluZ0J1ZmZlciB2YWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpPTE7aTw9MzE7aSsrKQotICAgIHsKLSAgICAgIHZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgIHZhbHVlLmFwcGVuZCgiLS0tIik7Ci0gICAgICBpZiAoaTwxMCkKLSAgICAgICAgdmFsdWUuYXBwZW5kKDApOwotICAgICAgdmFsdWUuYXBwZW5kKGkpOwotICAgICAgb3B0aW9uVmVjdG9yLmFkZE9wdGlvbihTdHJpbmcudmFsdWVPZihpKSx2YWx1ZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBvcHRpb25WZWN0b3IpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgb3B0aW9uVmVjdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZ2V0WFNEU2ltcGxlQm9vbGVhbkZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkQm9vbGVhblR5cGUsYm9vbGVhbiBpc0VudW0sYm9vbGVhbiBpc0ZpeGVkKQotICB7Ci0gICAgaWYgKGlzRW51bSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBuZXcgT3B0aW9uVmVjdG9yKCk7Ci0gICAgb3B0aW9uVmVjdG9yLmFkZE9wdGlvbigidHJ1ZSIsInRydWUiKTsKLSAgICBvcHRpb25WZWN0b3IuYWRkT3B0aW9uKCJmYWxzZSIsImZhbHNlIik7Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBvcHRpb25WZWN0b3IpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgb3B0aW9uVmVjdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRFNpbXBsZUxpc3RGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICAKLSAgICBib29sZWFuIGlzRml4ZWQgPSAoKGNvbmZpZy5nZXRNaW5PY2N1cnMoKSA9PSBjb25maWcuZ2V0TWF4T2NjdXJzKCkpICYmIGNvbmZpZy5nZXRNYXhPY2N1cnMoKSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpOwotICAgIGlmIChpc0ZpeGVkKQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RTaW1wbGVVbmlvbkZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIAotICAgIGJvb2xlYW4gaXNGaXhlZCA9ICgoY29uZmlnLmdldE1pbk9jY3VycygpID09IGNvbmZpZy5nZXRNYXhPY2N1cnMoKSkgJiYgY29uZmlnLmdldE1heE9jY3VycygpICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCk7Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzU2ltcGxlVHlwZUVudW1lcmF0aW9uKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUpIHsKLSAgICBFTGlzdCBlID0gc2ltcGxlVHlwZS5nZXRFbnVtZXJhdGlvbkZhY2V0cygpOwotICAgIHJldHVybiAoZSAhPSBudWxsICYmIGUuc2l6ZSgpID4gMCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMzI1MGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHsKLSAgcHJpdmF0ZSBYU0RDb21wb25lbnQgY29tcG9uZW50XzsKLSAgcHJpdmF0ZSBpbnQgbWluT2NjdXJzXzsKLSAgcHJpdmF0ZSBpbnQgbWF4T2NjdXJzXzsKLSAgcHJpdmF0ZSBpbnQgc3R5bGVfOwotICBwcml2YXRlIGludCBwYXJ0RW5jb2RpbmdfOwotICBwcml2YXRlIGJvb2xlYW4gaXNXU0RMUGFydF87Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxQYXJ0TmFtZV87Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkgewotICAgIGNvbXBvbmVudF8gPSBudWxsOwotICAgIG1pbk9jY3Vyc18gPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgbWF4T2NjdXJzXyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICBzdHlsZV8gPSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9ET0NVTUVOVDsKLSAgICBwYXJ0RW5jb2RpbmdfID0gRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTDsKLSAgICBpc1dTRExQYXJ0XyA9IGZhbHNlOwotICAgIHdzZGxQYXJ0TmFtZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEQ29tcG9uZW50KFhTRENvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICBjb21wb25lbnRfID0gY29tcG9uZW50OwotICB9Ci0KLSAgcHVibGljIFhTRENvbXBvbmVudCBnZXRYU0RDb21wb25lbnQoKSB7Ci0gICAgcmV0dXJuIGNvbXBvbmVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNaW5PY2N1cnMoaW50IG1pbk9jY3VycykgewotICAgIG1pbk9jY3Vyc18gPSBtaW5PY2N1cnM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1pbk9jY3VycygpIHsKLSAgICByZXR1cm4gbWluT2NjdXJzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1heE9jY3VycyhpbnQgbWF4T2NjdXJzKSB7Ci0gICAgbWF4T2NjdXJzXyA9IG1heE9jY3VyczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TWF4T2NjdXJzKCkgewotICAgIHJldHVybiBtYXhPY2N1cnNfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTdHlsZShpbnQgc3R5bGUpIHsKLSAgICBzdHlsZV8gPSBzdHlsZTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRTdHlsZSgpIHsKLSAgICByZXR1cm4gc3R5bGVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFydEVuY29kaW5nKGludCBwYXJ0RW5jb2RpbmcpIHsKLSAgICBwYXJ0RW5jb2RpbmdfID0gcGFydEVuY29kaW5nOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRQYXJ0RW5jb2RpbmcoKSB7Ci0gICAgcmV0dXJuIHBhcnRFbmNvZGluZ187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJc1dTRExQYXJ0KGJvb2xlYW4gaXNXU0RMUGFydCkgewotICAgIGlzV1NETFBhcnRfID0gaXNXU0RMUGFydDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldElzV1NETFBhcnQoKSB7Ci0gICAgcmV0dXJuIGlzV1NETFBhcnRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXU0RMUGFydE5hbWUoU3RyaW5nIHdzZGxQYXJ0TmFtZSkgewotICAgIHdzZGxQYXJ0TmFtZV8gPSB3c2RsUGFydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFBhcnROYW1lKCkgewotICAgIHJldHVybiB3c2RsUGFydE5hbWVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGM1N2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLQotcHVibGljIGNsYXNzIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIHsKLSAgcHJpdmF0ZSBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIHhzZExpdGVyYWxNYXBwZXJfOwotICBwcml2YXRlIFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgeHNkU29hcE1hcHBlcl87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHhzZFRvRnJhZ21lbnRDYWNoZV87Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkgewotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSBudWxsOwotICAgIHhzZExpdGVyYWxNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RTb2FwTWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkVG9GcmFnbWVudENhY2hlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcihXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgd3NkbFRvWFNETWFwcGVyXyA9IHdzZGxUb1hTRE1hcHBlcjsKLSAgfQotCi0gIHB1YmxpYyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkgewotICAgIHJldHVybiB3c2RsVG9YU0RNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGdldFhTRExpdGVyYWxNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZExpdGVyYWxNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RMaXRlcmFsTWFwcGVyXyA9IG5ldyBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyKHRoaXMsIHdzZGxUb1hTRE1hcHBlcl8pOwotICAgIHJldHVybiB4c2RMaXRlcmFsTWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBnZXRYU0RTT0FQTWFwcGVyKCkgewotICAgIGlmICh4c2RTb2FwTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkU29hcE1hcHBlcl8gPSBuZXcgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcih0aGlzLCB3c2RsVG9YU0RNYXBwZXJfKTsKLSAgICByZXR1cm4geHNkU29hcE1hcHBlcl87Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0Q2FjaGVkRnJhZ21lbnQoaWQpOwotICAgIGlmIChmcmFnICE9IG51bGwpCi0gICAgICByZXR1cm4gZnJhZzsKLSAgICBmcmFnID0gZ2V0TmV3RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgaWYgKGZyYWcgIT0gbnVsbCkKLSAgICAgIGFkZFRvQ2FjaGUoaWQsIGZyYWcpOwotICAgIHJldHVybiBmcmFnOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRDYWNoZWRGcmFnbWVudChTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKElYU0RGcmFnbWVudCl4c2RUb0ZyYWdtZW50Q2FjaGVfLmdldChpZCk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldE5ld0ZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIHN3aXRjaCAoY29uZmlnLmdldFBhcnRFbmNvZGluZygpKQotICAgIHsKLSAgICAgIGNhc2UgRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfU09BUDoKLSAgICAgICAgcmV0dXJuIGdldFhTRFNPQVBNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsaWQsbmFtZSk7ICAgICAgCi0gICAgICBjYXNlIEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUw6Ci0gICAgICBjYXNlIEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1VSTDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnZXRYU0RMaXRlcmFsTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLGlkLG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFRvQ2FjaGUoU3RyaW5nIGlkLCBJWFNERnJhZ21lbnQgZnJhZykgewotICAgIHhzZFRvRnJhZ21lbnRDYWNoZV8ucHV0KGlkLCBmcmFnKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZyb21DYWNoZShTdHJpbmcgaWQpIHsKLSAgICB4c2RUb0ZyYWdtZW50Q2FjaGVfLnJlbW92ZShpZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlbXB0eUNhY2hlKCkgewotICAgIHhzZFRvRnJhZ21lbnRDYWNoZV8uY2xlYXIoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNjRmNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVmYXVsdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERW1wdHlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyXzsKLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSB3c2RsVG9YU0RNYXBwZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb250cm9sbGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSB3c2RsVG9YU0RNYXBwZXI7Ci0gIH0KLQotICBwdWJsaWMgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpIHsKLSAgICByZXR1cm4gd3NkbFRvWFNETWFwcGVyXzsKLSAgfQotCi0gIHByb3RlY3RlZCBJWFNERnJhZ21lbnQgZ2V0WFNERGVmYXVsdEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIHJldHVybiBuZXcgWFNERGVmYXVsdEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElYU0RGcmFnbWVudCBnZXRYU0RFbXB0eUZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIHJldHVybiBuZXcgWFNERW1wdHlGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKTsKLQotICBwcm90ZWN0ZWQgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gcmVzb2x2ZVhTRENvbXBvbmVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKGNvbXBvbmVudCkgJiYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KSkKLSAgICB7Ci0gICAgICBYU0RDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5yZXNvbHZlWFNETmFtZWRDb21wb25lbnQoKFhTRE5hbWVkQ29tcG9uZW50KWNvbXBvbmVudCk7Ci0gICAgICBpZiAocmVzb2x2ZWRDb21wb25lbnQgIT0gbnVsbCkKLSAgICAgICAgY29uZmlnLnNldFhTRENvbXBvbmVudChyZXNvbHZlZENvbXBvbmVudCk7Ci0gICAgfQotICAgIHJldHVybiBjb25maWc7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NvbXBvbmVudFJlc29sdmFibGUoWFNEQ29tcG9uZW50IGNvbXBvbmVudCkKLSAgewotICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gY29tcG9uZW50LmdldFNjaGVtYSgpOwotICAgIGlmIChzY2hlbWEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL0ZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDVlMzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklGcmFnbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZyYWdtZW50IGltcGxlbWVudHMgSUZyYWdtZW50IHsKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICBwcml2YXRlIFN0cmluZyBuYW1lXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGFyYW1zXzsKLQotICBwdWJsaWMgRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGlkXyA9IGlkOwotICAgIG5hbWVfID0gbmFtZTsKLSAgICBwYXJhbXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SUQoU3RyaW5nIGlkKSB7Ci0gICAgaWRfID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElEKCkgewotICAgIHJldHVybiBpZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgbmFtZV8gPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiBuYW1lXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtcyk7Ci0gICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpIHsKLSAgICBpZiAocGFyYW1zID09IG51bGwpCi0gICAgICBwYXJhbXNfLnJlbW92ZShwYXJhbUtleSk7Ci0gICAgZWxzZQotICAgICAgcGFyYW1zXy5wdXQocGFyYW1LZXksIHBhcmFtcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBWZWN0b3IgcGFyYW1zKSB7Ci0gICAgaWYgKHBhcmFtcyA9PSBudWxsKQotICAgICAgcGFyYW1zXy5yZW1vdmUocGFyYW1LZXkpOwotICAgIGVsc2UgewotICAgICAgU3RyaW5nW10gcGFyYW1zQXJyYXkgPSBuZXcgU3RyaW5nW3BhcmFtcy5zaXplKCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXNBcnJheS5sZW5ndGg7IGkrKykgewotICAgICAgICBwYXJhbXNBcnJheVtpXSA9IHBhcmFtcy5nZXQoaSkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIHNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zQXJyYXkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSlwYXJhbXNfLmdldChwYXJhbUtleSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiBwYXJhbUluZGV4IDwgcGFyYW1zLmxlbmd0aCkKLSAgICAgIHJldHVybiBwYXJhbXNbcGFyYW1JbmRleF07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpIHsKLSAgICBFbnVtZXJhdGlvbiBwYXJhbUtleXMgPSBwYXJhbXNfLmtleXMoKTsKLSAgICB3aGlsZSAocGFyYW1LZXlzICE9IG51bGwgJiYgcGFyYW1LZXlzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBpZiAoIXZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKChTdHJpbmcpcGFyYW1LZXlzLm5leHRFbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgICBmb3IgKGludCBpID0gMDsgcGFyYW1zICE9IG51bGwgJiYgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCF2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYxZmU4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFNPQVBFbmNBcnJheUZpeEZyYWdtZW50IGV4dGVuZHMgU09BUEVuY0FycmF5RnJhZ21lbnQgewotICBwdWJsaWMgU09BUEVuY0FycmF5Rml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMDNkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklTT0FQRW5jQXJyYXlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTT0FQRW5jQXJyYXlGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwU2VxRnJhZ21lbnQgaW1wbGVtZW50cyBJU09BUEVuY0FycmF5RnJhZ21lbnQKLXsKLSAgcHVibGljIFNPQVBFbmNBcnJheUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElYU0RGcmFnbWVudCBzb2FwRW5jQXJyYXlUeXBlRnJhZyA9IChnZXRHcm91cE1lbWJlckZyYWdtZW50cyhjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpKSlbMF07Ci0gICAgICBWZWN0b3IgaW5zdGFuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFzb2FwRW5jQXJyYXlUeXBlRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMsIHNvYXBFbmNBcnJheVR5cGVGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBnZXRHcm91cElEcygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50ID0gbmV3IEVsZW1lbnRbZ3JvdXBJRHMubGVuZ3RoXTsKLSAgICBTdHJpbmdCdWZmZXIgYXR0ck5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nQnVmZmVyIGF0dHJWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLS8vICAgIFN0cmluZ0J1ZmZlciBhdHRyQXJyYXlUeXBlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLS8vICAgIFN0cmluZ0J1ZmZlciBhdHRyQXJyYXlUeXBlVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGludCBudW1JbnN0YW5jZXMgPSAwOwotICAgICAgaW5zdGFuY2VEb2N1bWVudFtpXSA9IGRvYy5jcmVhdGVFbGVtZW50KGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKSk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZ21lbnQgPSAoZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pKVswXTsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlRG9jdW1lbnRzID0gZnJhZ21lbnQuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmcmFnbWVudEluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZURvY3VtZW50c1tqXSAhPSBudWxsKQotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRbaV0uYXBwZW5kQ2hpbGQoZnJhZ21lbnRJbnN0YW5jZURvY3VtZW50c1tqXSk7Ci0gICAgICAgIG51bUluc3RhbmNlcysrOwotICAgICAgfQotICAgICAgU3RyaW5nIHNvYXBVUkkgPSBGcmFnbWVudENvbnN0YW50cy5VUklfU09BUDsKLSAgICAgIFN0cmluZyBzb2FwUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShzb2FwVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZVVSSSA9IGdldFhTRFR5cGVEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZVByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoc29hcEVuY0FycmF5VHlwZVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgLy8gU2V0IHRoZSBhcnJheVR5cGUgYXR0cmlidXRlCi0gICAgICBhdHRyTmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICBhdHRyTmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICBhdHRyTmFtZS5hcHBlbmQoc29hcFByZWZpeCk7Ci0gICAgICBhdHRyTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgYXR0ck5hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlNPQVBfRU5DX0FSUkFZX1RZUEUpOwotICAgICAgYXR0clZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoc29hcEVuY0FycmF5VHlwZVByZWZpeCk7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXROYW1lKCkpOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5MRUZUX1NRVUFSRV9CUkFDS0VUKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQobnVtSW5zdGFuY2VzKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUklHSFRfU1FVQVJFX0JSQUNLRVQpOwotICAgICAgaW5zdGFuY2VEb2N1bWVudFtpXS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUudG9TdHJpbmcoKSwgYXR0clZhbHVlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBpZiAoZ2VuWFNJVHlwZSkKLSAgICB7Ci0vLwkgIFRPRE86IFVzZWQgdG8gY2FsbCB0aGUgcGx1Z2luJ3MgaWdub3JlU2NoZW1hRm9yU09BUEFycmF5cygpbWV0aG9kLgotCSAgYm9vbGVhbiBpZ25vcmVTY2hlbWFGb3JTT0FQQXJyYXlzID0gdHJ1ZTsKLSAgICAgIGlmIChpZ25vcmVTY2hlbWFGb3JTT0FQQXJyYXlzKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnQubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgeHNpVVJJID0gRnJhZ21lbnRDb25zdGFudHMuVVJJX1hTSTsKLSAgICAgICAgICBTdHJpbmcgeHNpUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgICBTdHJpbmcgeHNpVHlwZVVSSSA9IEZyYWdtZW50Q29uc3RhbnRzLlVSSV9TT0FQOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lUeXBlVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgICAgYXR0ck5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgICAgIGF0dHJOYW1lLmFwcGVuZCh4c2lQcmVmaXgpLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTikuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlhTSV9UWVBFKTsKLSAgICAgICAgICBhdHRyVmFsdWUuc2V0TGVuZ3RoKDApOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoeHNpVHlwZVByZWZpeCkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX0xPQ0FMX05BTUVfQVJSQVkpOwotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLnRvU3RyaW5nKCksIGF0dHJWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50LCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoZ2V0WFNEVHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBncm91cElEID0gZ2VuSUQoKTsKLSAgICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySUQgPSB7Z2VuSUQoKX07Ci0gICAgICBpbnQgbWluT2NjdXJzID0gMDsKLSAgICAgIGludCBtYXhPY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQ7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBudWxsOwotICAgICAgaWYgKGdldFhTRE1vZGVsR3JvdXAoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBYU0RQYXJ0aWNsZSBncm91cE93bmVyID0gKFhTRFBhcnRpY2xlKWdldFhTRE1vZGVsR3JvdXAoKS5nZXRDb250YWluZXIoKTsKLSAgICAgICAgaW50IGdyb3VwTWluID0gZ3JvdXBPd25lci5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgaW50IGdyb3VwTWF4ID0gZ3JvdXBPd25lci5nZXRNYXhPY2N1cnMoKTsKLSAgICAgICAgaW50IGVsZW1lbnRNaW4gPSAwOwotICAgICAgICBpbnQgZWxlbWVudE1heCA9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRDsKLSAgICAgICAgRUxpc3QgeHNkUGFydGljbGVzID0gZ2V0WFNETW9kZWxHcm91cCgpLmdldFBhcnRpY2xlcygpOwotICAgICAgICBpZiAoeHNkUGFydGljbGVzLnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSl4c2RQYXJ0aWNsZXMuZ2V0KDApKS5nZXRDb250ZW50KCk7Ci0gICAgICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbGVtZW50RGVjbCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkUGFydGljbGVDb250ZW50OwotICAgICAgICAgICAgWFNEUGFydGljbGUgZWxlbWVudE93bmVyID0gKFhTRFBhcnRpY2xlKWVsZW1lbnREZWNsLmdldENvbnRhaW5lcigpOwotICAgICAgICAgICAgZWxlbWVudE1pbiA9IGVsZW1lbnRPd25lci5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgICAgIGVsZW1lbnRNYXggPSBlbGVtZW50T3duZXIuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChncm91cE1pbiA+PSAwICYmIGVsZW1lbnRNaW4gPj0gMCkKLSAgICAgICAgICBtaW5PY2N1cnMgPSBncm91cE1pbiAqIGVsZW1lbnRNaW47Ci0gICAgICAgIGlmIChncm91cE1heCA+PSAwICYmIGdyb3VwTWF4ICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCAmJiBlbGVtZW50TWF4ID49IDAgJiYgZWxlbWVudE1heCAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpCi0gICAgICAgICAgbWF4T2NjdXJzID0gZ3JvdXBNYXggKiBlbGVtZW50TWF4OwotICAgICAgfQotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQoZ2V0WFNEVHlwZURlZmluaXRpb24oKSk7Ci0gICAgICB4c2RDb25maWcuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgICB4c2RDb25maWcuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgU3RyaW5nIG5hbWUgPSAoZWxlbWVudERlY2wgIT0gbnVsbCkgPyBlbGVtZW50RGVjbC5nZXROYW1lKCkgOiBnZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldE5hbWUoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIGdyb3VwTWVtYmVySURbMF0sIG5hbWUpOwotICAgICAgYWRkRnJhZ21lbnQoZ3JvdXBNZW1iZXJJRFswXSwgZnJhZyk7Ci0gICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElELCBncm91cE1lbWJlcklEKTsKLSAgICAgIHJldHVybiBncm91cElEOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlU09BUEVuY0FycmF5SW5zdGFuY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNPQVBFbmNBcnJheUluc3RhbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1NjdlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudCBleHRlbmRzIFNPQVBFbmNBcnJheUZyYWdtZW50IHsKLSAgcHVibGljIFNPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDkzZTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudCBleHRlbmRzIFhTRERlbGVnYXRpb25GcmFnbWVudCBpbXBsZW1lbnRzIElTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gImlkIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhSRUYgPSAiaHJlZiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1VORCA9ICIjIjsKLQotICBwcml2YXRlIEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VUYWJsZV87Ci0KLSAgcHVibGljIFNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgbnVsbCk7Ci0gICAgdXJpUmVmZXJlbmNlVGFibGVfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKQotICB7Ci0gICAgZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0WFNEVHlwZURlZmluaXRpb24odHlwZURlZik7Ci0gIH0KLQotICBwdWJsaWMgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gcmVzb2x2ZVVSSVJlZmVyZW5jZXModXJpUmVmZXJlbmNlVGFibGVfLCBpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0gICAgcmV0dXJuIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50cyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzKQotICB7Ci0gICAgdXJpUmVmZXJlbmNlVGFibGVfID0gdXJpUmVmZXJlbmNlczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgSGFzaHRhYmxlIHBhcnNlVVJJUmVmZXJlbmNlcyhFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gb3ZlcndyaXRlcykKLSAgewotICAgIEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHBhcnNlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCBlbGVtZW50LCBvdmVyd3JpdGVzKTsKLSAgICByZXR1cm4gdXJpUmVmZXJlbmNlczsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFyc2VVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzLCBFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gb3ZlcndyaXRlcykKLSAgewotICAgIGJvb2xlYW4gcmVzb2x2ZWQgPSB0cnVlOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgVVJJUmVmZXJlbmNlIHJlZiA9IG51bGw7Ci0gICAgICBTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShJRCk7Ci0gICAgICByZXNvbHZlZCA9ICFlbGVtZW50Lmhhc0F0dHJpYnV0ZShIUkVGKTsKLSAgICAgIGlmIChpZCAhPSBudWxsICYmIGlkLmxlbmd0aCgpID4gMCAmJiAob3ZlcndyaXRlcyB8fCAhdXJpUmVmZXJlbmNlcy5jb250YWlucyhpZCkpKQotICAgICAgewotICAgICAgICByZWYgPSBuZXcgVVJJUmVmZXJlbmNlKGVsZW1lbnQsIHRydWUpOwotICAgICAgICB1cmlSZWZlcmVuY2VzLnB1dChpZCwgcmVmKTsKLSAgICAgIH0KLSAgICAgIE5vZGVMaXN0IG5sID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICByZXNvbHZlZCA9IHBhcnNlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCAoRWxlbWVudClub2RlLCBvdmVyd3JpdGVzKSAmJiByZXNvbHZlZDsKLSAgICAgIH0KLSAgICAgIGlmIChyZWYgIT0gbnVsbCkKLSAgICAgICAgcmVmLnNldFJlc29sdmVkKHJlc29sdmVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc29sdmVkOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IHJlc29sdmVVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAodXJpUmVmZXJlbmNlcyAhPSBudWxsICYmICF1cmlSZWZlcmVuY2VzLmlzRW1wdHkoKSkKLSAgICAgIHJldHVybiByZXNvbHZlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSwgZWxlbWVudCwgbmV3IFZlY3RvcigpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIEVsZW1lbnQgcmVzb2x2ZVVSSVJlZmVyZW5jZXMoSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMsIERvY3VtZW50IGRvYywgRWxlbWVudCBlbGVtZW50LCBWZWN0b3IgdXNlZElkcykKLSAgewotICAgIFN0cmluZyBocmVmID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFJFRik7Ci0gICAgRWxlbWVudCByZXNvbHZlZEVsZW1lbnQgPSBlbGVtZW50OwotICAgIGJvb2xlYW4gcmVzb2x2ZWQgPSBmYWxzZTsKLSAgICBpZiAoaHJlZiAhPSBudWxsICYmIGhyZWYubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFVSSVJlZmVyZW5jZSByZWYgPSBudWxsOwotICAgICAgaWYgKGhyZWYuaW5kZXhPZihQT1VORCkgIT0gLTEpCi0gICAgICAgIGhyZWYgPSBocmVmLnN1YnN0cmluZygxLCBocmVmLmxlbmd0aCgpKTsKLSAgICAgIGlmICghdXNlZElkcy5jb250YWlucyhocmVmKSkKLSAgICAgIHsKLSAgICAgICAgcmVmID0gKFVSSVJlZmVyZW5jZSl1cmlSZWZlcmVuY2VzLmdldChocmVmKTsKLSAgICAgICAgaWYgKHJlZiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdXNlZElkcy5hZGQoaHJlZik7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtZW50UmVmID0gcmVmLmdldFJlZkVsZW1lbnQoKTsKLSAgICAgICAgICByZXNvbHZlZCA9IHJlZi5nZXRSZXNvbHZlZCgpOwotICAgICAgICAgIHJlc29sdmVkRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KGVsZW1lbnQuZ2V0VGFnTmFtZSgpKTsKLSAgICAgICAgICBOb2RlTGlzdCBubCA9IGVsZW1lbnRSZWYuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgcmVzb2x2ZWRFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5pbXBvcnROb2RlKG5vZGUsIHRydWUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFyZXNvbHZlZCkKLSAgICB7Ci0gICAgICBOb2RlTGlzdCBubCA9IHJlc29sdmVkRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIEVsZW1lbnQgY2hpbGQgPSByZXNvbHZlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCByZXNvbHZlZEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpLCAoRWxlbWVudClub2RlLCB1c2VkSWRzKTsKLQkJICBpZiAoY2hpbGQgIT0gbm9kZSkKLSAgICAgICAgICAgIHJlc29sdmVkRWxlbWVudC5yZXBsYWNlQ2hpbGQoY2hpbGQsIG5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChocmVmICE9IG51bGwpCi0gICAgICB1c2VkSWRzLnJlbW92ZShocmVmKTsKLSAgICByZXR1cm4gcmVzb2x2ZWRFbGVtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVVJJUmVmZXJlbmNlCi0gIHsKLSAgICBwcml2YXRlIEVsZW1lbnQgcmVmXzsKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVzb2x2ZWRfOwotCi0gICAgcHVibGljIFVSSVJlZmVyZW5jZShFbGVtZW50IHJlZiwgYm9vbGVhbiByZXNvbHZlZCkKLSAgICB7Ci0gICAgICByZWZfID0gcmVmOwotICAgICAgcmVzb2x2ZWRfID0gcmVzb2x2ZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIEVsZW1lbnQgZ2V0UmVmRWxlbWVudCgpCi0gICAgewotICAgICAgcmV0dXJuIHJlZl87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVmRWxlbWVudChFbGVtZW50IHJlZikKLSAgICB7Ci0gICAgICByZWZfID0gcmVmOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFJlc29sdmVkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVzb2x2ZWRfOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlc29sdmVkKGJvb2xlYW4gcmVzb2x2ZWQpCi0gICAgewotICAgICAgcmVzb2x2ZWRfID0gcmVzb2x2ZWQ7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMGVhNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDgxMTE0ICAgMjU0NjcyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQSBTT0FQIGhlYWRlciBmcmFnbWVudCwgd2hpY2ggaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnJhZ21lbnQgdGhhdCByZXByZXNlbnRzIHRoZSBTT0FQIGhlYWRlciBjb250ZW50LiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IGV4dGVuZHMgWFNERGVsZWdhdGlvbkZyYWdtZW50IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVTVF9VTkRFUlNUQU5EID0gIm11c3RVbmRlcnN0YW5kIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUT1IgICAgICAgICAgID0gImFjdG9yIjsKLQkKLQlwcml2YXRlIGJvb2xlYW4gbXVzdFVuZGVyc3RhbmQgPSBmYWxzZTsJIAotCXByaXZhdGUgU3RyaW5nICBhY3RvciAgICAgICAgICA9ICIiOwotCXByaXZhdGUgYm9vbGVhbiB2YWxpZEFjdG9yICAgICA9IHRydWU7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIGZyYWdtZW50IFRoZSBmcmFnbWVudCB0aGF0IHRoaXMgU09BUCBoZWFkZXIgZnJhZ21lbnQgd3JhcHMgYXJvdW5kLgotCSAqLwotCXB1YmxpYyBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KElYU0RGcmFnbWVudCBmcmFnbWVudCkgewotCQlzdXBlcihmcmFnbWVudC5nZW5JRCgpLCBmcmFnbWVudC5nZXROYW1lKCksIG51bGwpOwkgICAgCi0JCXNldFhTRERlbGVnYXRpb25GcmFnbWVudChmcmFnbWVudCk7Ci0JfQotCQotCS8qCi0JICogUmV0cmlldmVzIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYSBzdHJpbmcgYXJyYXkuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Rmlyc3RFbGVtZW50KFN0cmluZ1tdIHN0cmluZ0FycmF5KSB7Ci0JCWlmIChzdHJpbmdBcnJheSA9PSBudWxsIHx8IHN0cmluZ0FycmF5Lmxlbmd0aCA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBzdHJpbmdBcnJheVswXTsJCSAKLQl9Ci0JCi0JLyoKLQkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhIHZlY3Rvci4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRGaXJzdEVsZW1lbnQoVmVjdG9yIHZlY3RvcikgewotCQlpZiAodmVjdG9yID09IG51bGwgfHwgdmVjdG9yLmlzRW1wdHkoKSkKLQkJCXJldHVybiBudWxsOwotCQkgCi0JCU9iamVjdCBvYmogPSB2ZWN0b3IuZmlyc3RFbGVtZW50KCk7Ci0JCWlmICghKG9iaiBpbnN0YW5jZW9mIFN0cmluZykpCi0JCQlyZXR1cm4gbnVsbDsKLQkJIAotCQlyZXR1cm4gKFN0cmluZykgb2JqOwotCX0KLQkKLQkvKgotCSAqIFNldHMgdGhlIG11c3RVbmRlcnN0YW5kIHZhbHVlLiBBbnkgbm9uLWVtcHR5IHN0cmluZyAoZXhjZXB0ICIwIikKLQkgKiB0cmFuc2xhdGVzIHRvIGEgbXVzdFVuZGVyc3RhbmQgdmFsdWUgb2YgdHJ1ZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0TXVzdFVuZGVyc3RhbmQoU3RyaW5nIHBhcmFtKSB7Ci0JCW11c3RVbmRlcnN0YW5kID0gKHBhcmFtICE9IG51bGwgJiYgIXBhcmFtLmVxdWFscygiMCIpKTsKLQl9Ci0JCi0JLyoKLQkgKiBTZXRzIHRoZSBhY3RvciB2YWx1ZS4gIEFsc28gc2V0cyB0aGUgZmxhZyBmb3IgdmFsaWRBY3Rvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0QWN0b3IoU3RyaW5nIHBhcmFtKSB7Ci0JCWlmIChwYXJhbSA9PSBudWxsIHx8IHBhcmFtLmxlbmd0aCgpID09IDApCi0JCQlhY3RvciA9ICIiOwotCQllbHNlIHsKLQkJCWFjdG9yID0gcGFyYW07Ci0JCQl0cnkgewotCQkJCW5ldyBVUkkoYWN0b3IpOwotCQkJfQotCQkJY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0JCQkJdmFsaWRBY3RvciA9IGZhbHNlOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQkJIAotCQkgCi0JCXZhbGlkQWN0b3IgPSB0cnVlOwotCX0JIAotCQotICAgIC8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3Byb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIpCi0JICovCi0JcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0JCi0JCXNldE11c3RVbmRlcnN0YW5kKHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpKSk7Ci0JICAgIHNldEFjdG9yKHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0QWN0b3JJRCgpKSk7Ci0KLQkJLy8gbXVzdFVuZGVyc3RhbmQgaXMgZWl0aGVyIHNldCBvciB1bnNldCwgbm8gZnVydGhlciB2YWxpZGF0aW9uIG5lY2Vzc2FyeQotCQkvLyBvbmx5IG5lZWQgdG8gdmFsaWRhdGUgYWN0b3IgVVJJCi0JCXJldHVybiBzdXBlci5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikgJiYgdmFsaWRhdGVBY3RvcigpOwkJCSAJCSAKLQl9Ci0JCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3NldFBhcmFtZXRlclZhbHVlcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXNldE11c3RVbmRlcnN0YW5kKGdldEZpcnN0RWxlbWVudChwYXJhbXMpKTsKLQkJZWxzZSBpZiAoZ2V0QWN0b3JJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlzZXRBY3RvcihnZXRGaXJzdEVsZW1lbnQocGFyYW1zKSk7Ci0JCWVsc2UKLQkJCXN1cGVyLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsJCSAKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjc2V0UGFyYW1ldGVyVmFsdWVzKGphdmEubGFuZy5TdHJpbmcsIGphdmEudXRpbC5WZWN0b3IpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcykgewotCQlpZiAoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlzZXRNdXN0VW5kZXJzdGFuZChnZXRGaXJzdEVsZW1lbnQocGFyYW1zKSk7Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJc2V0QWN0b3IoZ2V0Rmlyc3RFbGVtZW50KHBhcmFtcykpOwotCQllbHNlCi0JCQlzdXBlci5zZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtcyk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dldFBhcmFtZXRlclZhbHVlcyhqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiBuZXcgU3RyaW5nW10geyBtdXN0VW5kZXJzdGFuZCA/ICIxIiA6ICIwIiB9OwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiBuZXcgU3RyaW5nW10geyBhY3RvciB9OwotCQllbHNlCi0JCQlyZXR1cm4gc3VwZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsJCSAKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjZ2V0UGFyYW1ldGVyVmFsdWUoamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KVtwYXJhbUluZGV4XTsKLQl9CSAKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCN2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpICYmIHZhbGlkYXRlQWN0b3IoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLQkJaWYgKGdldE11c3RVbmRlcnN0YW5kSUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIHZhbGlkYXRlQWN0b3IoKTsKLQkJZWxzZQotCQkJcmV0dXJuIHN1cGVyLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiB0cnVlOwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiB2YWxpZGF0ZUFjdG9yKCk7Ci0JCWVsc2UKLQkJCXJldHVybiBzdXBlci52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWVzIGZvciB0aGlzIFNPQVAgaGVhZGVyIGdpdmVuIGFuIGluc3RhbmNlIGRvY3VtZW50IGFuZCBhIG5hbWVzcGFjZSB0YWJsZS4KLQkgKiAKLQkgKiBAcGFyYW0gaW5zdGFuY2VEb2N1bWVudCBUaGUgaW5zdGFuY2UgZG9jdW1lbnQuCi0JICogQHBhcmFtIG5hbWVzcGFjZVRhYmxlIFRoZSBuYW1lc3BhY2UgdGFibGUuCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGFsbCB2YWx1ZXMgZXh0cmFjdGVkIGZyb20gdGhlIGluc3RhbmNlIGRvY3VtZW50IGFyZSB2YWxpZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudChFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsIE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCi0JCWJvb2xlYW4gdmFsaWQgPSBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobmV3IEVsZW1lbnRbXSB7IGluc3RhbmNlRG9jdW1lbnQgfSk7CQkKLQkJIAotCQlTdHJpbmcgcHJlZml4ID0gbmFtZXNwYWNlVGFibGUuZ2V0KEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9TT0FQX0VOVikgKyBGcmFnbWVudENvbnN0YW50cy5DT0xPTjsKLQkJIAotCQlTdHJpbmcgbXVzdFVuZGVyc3RhbmRWYWx1ZSA9IGluc3RhbmNlRG9jdW1lbnQuZ2V0QXR0cmlidXRlKHByZWZpeCArIE1VU1RfVU5ERVJTVEFORCk7Ci0JCWlmICgiIi5lcXVhbHMobXVzdFVuZGVyc3RhbmRWYWx1ZSkpCi0JCQltdXN0VW5kZXJzdGFuZCA9IGZhbHNlOwotCQllbHNlIGlmICgiMCIuZXF1YWxzKG11c3RVbmRlcnN0YW5kVmFsdWUpIHx8ICIxIi5lcXVhbHMobXVzdFVuZGVyc3RhbmRWYWx1ZSkpCi0JCQlzZXRNdXN0VW5kZXJzdGFuZChtdXN0VW5kZXJzdGFuZFZhbHVlKTsKLQkJZWxzZQotCQkJdmFsaWQgPSBmYWxzZTsKLQkJIAotCQlzZXRBY3RvcihpbnN0YW5jZURvY3VtZW50LmdldEF0dHJpYnV0ZShwcmVmaXggKyBBQ1RPUikpOwotCQkgCi0JCXJldHVybiB2YWxpZCAmJiB2YWxpZGF0ZUFjdG9yKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuLCBqYXZhLnV0aWwuSGFzaHRhYmxlLCBvcmcudzNjLmRvbS5Eb2N1bWVudCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKSB7Ci0JCUVsZW1lbnRbXSBlbGVtZW50cyA9IHN1cGVyLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLQkJIAotCQlpZiAoZWxlbWVudHMubGVuZ3RoID09IDApCi0JCQlyZXR1cm4gZWxlbWVudHM7Ci0JCSAKLQkJU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5WLCBuYW1lc3BhY2VUYWJsZSkgKyBGcmFnbWVudENvbnN0YW50cy5DT0xPTjsKLQkJIAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CQkJIAkJCSAJCQkJIAotCi0JCQlpZiAobXVzdFVuZGVyc3RhbmQpewotCQkJCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZU5TKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9TT0FQX0VOViwgcHJlZml4ICsgTVVTVF9VTkRFUlNUQU5ELCAiMSIpOwotCQkJfQotCQkJaWYgKGFjdG9yLmxlbmd0aCgpID4gMCl7Ci0JCQkJZWxlbWVudHNbaV0uc2V0QXR0cmlidXRlTlMoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5WLHByZWZpeCArIEFDVE9SLCBhY3Rvcik7Ci0JCQl9Ci0JCX0KLQkJIAotCQlyZXR1cm4gZWxlbWVudHM7Ci0JfQotCSAKLQkvKioKLQkgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgZm9yIHRoZSBtdXN0VW5kZXJzdGFuZCB2YWx1ZQotCSAqIEByZXR1cm4gVGhlIG11c3RVbmRlcnN0YW5kIHZhbHVlLCB0cnVlIGlmIG11c3RVbmRlcnN0YW5kPSIxIiwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzTXVzdFVuZGVyc3RhbmQoKSB7Ci0JCXJldHVybiBtdXN0VW5kZXJzdGFuZDsKLQl9Ci0JIAotCS8qKgotCSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZ2V0dGluZyB0aGUgYWN0b3IgdmFsdWUKLQkgKiBAcmV0dXJuIFRoZSBhY3RvciB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QWN0b3IoKSB7Ci0JCXJldHVybiBhY3RvcjsKLQl9Ci0JCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0b3IgdmFsdWUgaXMgYSB2YWxpZCBVUkkuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBhY3RvciB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWN0b3IoKSB7CQkgCi0JCXJldHVybiB2YWxpZEFjdG9yOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgbXVzdFVuZGVyc3RhbmQgaW5wdXQgZWxlbWVudAotCSAqIEByZXR1cm4gVGhlIElEIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBpbnB1dCBlbGVtZW50Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRNdXN0VW5kZXJzdGFuZElEKCkgewotCQlyZXR1cm4gZ2V0SUQoKSArIEZyYWdtZW50Q29uc3RhbnRzLklEX1NFUEVSQVRPUiArIE1VU1RfVU5ERVJTVEFORDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSUQgb2YgdGhlIGFjdG9yIGlucHV0IGVsZW1lbnQKLQkgKiBAcmV0dXJuIFRoZSBJRCBvZiB0aGUgYWN0b3IgaW5wdXQgZWxlbWVudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QWN0b3JJRCgpIHsKLQkJcmV0dXJuIGdldElEKCkgKyBGcmFnbWVudENvbnN0YW50cy5JRF9TRVBFUkFUT1IgKyBBQ1RPUjsKLQl9Ci0JIAotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dldFdyaXRlRnJhZ21lbnQoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLQkJcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQSGVhZGVyV3JhcHBlcldGcmFnbWVudEpTUC5qc3AiOwotCX0JCSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTUzOWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogCi0gKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTSAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cwotICogUmVzZXJ2ZWQuIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yCi0gKiBkaXNjbG9zdXJlIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotICogCi0gKiA8L2NvcHlyaWdodD4KLSAqIAotICogRmlsZQotICogcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9JbXBsL1hTREVsZW1lbnRGcmFnbWVudC5qYXZhLAotICogd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIsIDIwMDMxMjMxYSA1IFZlcnNpb24gMS41IDAzLzA5LzI0Ci0gKiAxNDozMDozOAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERm9ybTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RBdHRyaWJ1dGVGcmFnbWVudCBleHRlbmRzIFhTRERlbGVnYXRpb25GcmFnbWVudCBpbXBsZW1lbnRzIElYU0RBdHRyaWJ1dGVGcmFnbWVudAotewotICAgCi0gIAotICBwdWJsaWMgWFNEQXR0cmlidXRlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgYXR0cmlidXRlVHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgCQotICAgIGlmICghYXR0cmlidXRlVHlwZUZyYWdtZW50LnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotICB7Ci0gICAgSVhTREZyYWdtZW50IGF0dHJpYnV0ZVR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGlmICghYXR0cmlidXRlVHlwZUZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkKLSAgewotICAgIGlmICghZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlci5zZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihjb25maWcpOwotICAgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFN0cmluZyB3c2RsUGFydE5hbWUgPSBjb25maWcuZ2V0V1NETFBhcnROYW1lKCk7Ci0gICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAKLSAgICAKLSAgICAKLSAgICBpZiAoY29uZmlnLmdldElzV1NETFBhcnQoKSAmJiBjb25maWcuZ2V0U3R5bGUoKSA9PSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9SUEMgJiYgd3NkbFBhcnROYW1lICE9IG51bGwgJiYgd3NkbFBhcnROYW1lLmxlbmd0aCgpID4gMCAmJiBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoID09IDEgJiYgd3NkbFBhcnROYW1lLmVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0VGFnTmFtZSgpKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgY2hpbGRFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSl7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50cy5hZGQobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IChFbGVtZW50W10pY2hpbGRFbGVtZW50cy50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLSAgICB9Ci0gICAgSVhTREZyYWdtZW50IGF0dHJpYnV0ZVR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlVHlwZUZyYWdtZW50LnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBhdHRyaWJ1dGVUeXBlRnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkKLSAgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMKQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZVVzZSB4c2RBdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHhzZEF0dHJpYnV0ZSA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbil4c2RBdHRyaWJ1dGVVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsKLSAgICAgIGlmICh4c2RBdHRyaWJ1dGUuaXNHbG9iYWwoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICh4c2RBdHRyaWJ1dGUuaXNTZXRGb3JtKCkpCi0gICAgICAgICAgcmV0dXJuICh4c2RBdHRyaWJ1dGUuZ2V0Rm9ybSgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuICh4c2RBdHRyaWJ1dGUuZ2V0U2NoZW1hKCkuZ2V0QXR0cmlidXRlRm9ybURlZmF1bHQoKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFhTREF0dHJpYnV0ZVVzZSB4c2RBdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiB4c2RBdHRyaWJ1dGUgPSB4c2RBdHRyaWJ1dGVVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsKLSAgICAKLSAgICBTdHJpbmdCdWZmZXIgdGFnTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpZiAoaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc1VSSSA9IG51bGw7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZEF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgbnNVUkkgPSB4c2RBdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgZWxzZQotICAgICAgICBuc1VSSSA9IHhzZEF0dHJpYnV0ZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuc1VSSSAhPSBudWxsICYmIG5zVVJJLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkobnNVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgdGFnTmFtZS5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgdGFnTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgfQotICAgIH0KLSAgICBTdHJpbmcgeHNkQXR0cmlidXRlTmFtZSA9IHhzZEF0dHJpYnV0ZS5nZXROYW1lKCk7Ci0gICAgaWYgKHhzZEF0dHJpYnV0ZU5hbWUgPT0gbnVsbCB8fCB4c2RBdHRyaWJ1dGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgewotICAgICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAgIGlmICh4c2RBdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAJeHNkQXR0cmlidXRlTmFtZSA9IHhzZEF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgICAgZWxzZQotICAgICAgCXhzZEF0dHJpYnV0ZU5hbWUgPSBnZXROYW1lKCk7Ci0gICAgfQotICAgIHRhZ05hbWUuYXBwZW5kKHhzZEF0dHJpYnV0ZU5hbWUpOwotICAgIHJldHVybiB0YWdOYW1lLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAKLQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0ZUZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0ZUZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjZjVkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4Rml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4Rml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleEZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZmFjYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA1MTYgICAxODU1OTYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtaXNpbnRlcnByZXRzIHJlc3BvbnNlIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRENvbXBsZXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4RmluYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RDb21wbGV4RnJhZ21lbnQgZXh0ZW5kcyBYU0RNYXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RDb21wbGV4RnJhZ21lbnQKLXsKLSAgcHVibGljIFhTRENvbXBsZXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgc2V0UGFyYW1zRm9yWFNEVHlwZURlZihpbnN0YW5jZURvY3VtZW50c0NvcHkpOwotICAgIGVsc2UKLSAgICAgIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKGluc3RhbmNlRG9jdW1lbnRzQ29weSk7IAotICAgIHJldHVybiBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpewotICAJYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gIAkKLSAgCVN0cmluZ1tdIGZyYWdtZW50c09yZGVyID0gZ2V0RnJhZ21lbnRzT3JkZXIoKTsKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKyl7Ci0gIAkgIAotICAJICBpZiAoaSA+PSBmcmFnbWVudHNPcmRlci5sZW5ndGgpIGJyZWFrOwotICAJICBTdHJpbmcgZnJhZ21lbnRJRCA9IGZyYWdtZW50c09yZGVyW2ldOwotCi0gIAkgIGZvciAoaW50IGsgPSAwOyBrIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaysrKXsKLSAgCQlpZihhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWdtZW50SUQpKXsKLSAgCQkgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0QXR0cmlidXRlcygpOwotICAJICAJICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgCSAgICAgIHBhcmFtc1ZhbGlkID0gYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhub2RlTWFwLmdldE5hbWVkSXRlbShuYW1lKSk7Ci0gIAkJfQotICAgICAgfQotICAJfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgIGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0gPSBpbnN0YW5jZURvY3VtZW50c1tpXTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoY2hpbGRJbnN0YW5jZURvY3VtZW50cywgY2hpbGRGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgVmVjdG9yIGluc3RhbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLCBkb2MpOwotICAgIGVsc2UKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsIGRvYyk7Ci0gICAgICBpZihnZW5YU0lUeXBlKSBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGFkZEF0dHJpYnV0ZXMoaW5zdGFuY2VEb2N1bWVudHMpOwotCXJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGFkZEF0dHJpYnV0ZXMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKXsKLSAgCQotCVN0cmluZ1tdIGZyYWdtZW50c09yZGVyID0gZ2V0RnJhZ21lbnRzT3JkZXIoKTsKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7aTwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoO2krKyl7Ci0KLSAgCSAgaWYgKGkgPj0gZnJhZ21lbnRzT3JkZXIubGVuZ3RoKSBicmVhazsKLSAgIAkgIFN0cmluZyBmcmFnbWVudElEID0gZnJhZ21lbnRzT3JkZXJbaV07Ci0gIAkJCi0gICAgICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGsrKyl7Ci0gICAgCWlmKGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZ21lbnRJRCkpewotICAgIAkgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgIAkgIGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50c1tpXSxuYW1lKTsKLSAgICAJfQotICAgICAgfQotICAgCX0KLSAgIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZXMubGVuZ3RoID4gMCkKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1swXSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCB0YWdOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2NoaWxkRnJhZ3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlcyA9IGNoaWxkRnJhZ3NbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkSW5zdGFuY2VzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoY2hpbGRJbnN0YW5jZXNbal0gIT0gbnVsbCkKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKGNoaWxkSW5zdGFuY2VzW2pdKTsKLSAgICAgIH0KLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoWFNEUGFydGljbGUgeHNkUGFydGljbGUpCi0gIHsKLSAgICBpZiAoeHNkUGFydGljbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50ID0geHNkUGFydGljbGUuZ2V0Q29udGVudCgpOwotICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cERlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiB4c2RNb2RlbEdyb3VwRGVmID0gKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKXhzZFBhcnRpY2xlQ29udGVudDsKLSAgICAgICAgICBpZiAoeHNkTW9kZWxHcm91cERlZi5pc01vZGVsR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlKCkpCi0gICAgICAgICAgICB4c2RNb2RlbEdyb3VwRGVmID0geHNkTW9kZWxHcm91cERlZi5nZXRSZXNvbHZlZE1vZGVsR3JvdXBEZWZpbml0aW9uKCk7Ci0gICAgICAgICAgcmV0dXJuIHhzZE1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApCi0gICAgICAgICAgcmV0dXJuIChYU0RNb2RlbEdyb3VwKXhzZFBhcnRpY2xlQ29udGVudDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW5oZXJpdGVkUGFydGljbGVzKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChjb21wbGV4VHlwZS5nZXREZXJpdmF0aW9uTWV0aG9kKCkuZ2V0VmFsdWUoKSA9PSBYU0RDb21wbGV4RmluYWwuRVhURU5TSU9OKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIGV4dFR5cGUgPSBjb21wbGV4VHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgaWYgKGV4dFR5cGUgIT0gbnVsbCAmJiAhKGV4dFR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZXh0VHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgU3RyaW5nIGxvY2FsbmFtZSA9IGV4dFR5cGUuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbG9jYWxuYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0ROYW1lZENvbXBvbmVudCB4c2ROYW1lZENvbXAgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLmdldFhTRFR5cGVGcm9tU2NoZW1hKG5hbWVzcGFjZSwgbG9jYWxuYW1lLCBmYWxzZSk7Ci0gICAgICAgICAgaWYgKHhzZE5hbWVkQ29tcCBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBleHRUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbil4c2ROYW1lZENvbXA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZXh0VHlwZSAhPSBudWxsICYmIGV4dFR5cGUgIT0gY29tcGxleFR5cGUgJiYgZXh0VHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGV4dFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudCgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWV4dFR5cGUpOwotICAgICAgICBpZiAoZXh0VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgICAgewotICAgICAgICAgIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IGdldFhTRE1vZGVsR3JvdXAoKFhTRFBhcnRpY2xlKWV4dFR5cGVDb250ZW50KTsKLSAgICAgICAgICBpZiAoeHNkTW9kZWxHcm91cCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHYuYWRkQWxsKGdldEluaGVyaXRlZFBhcnRpY2xlcygoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWV4dFR5cGUpKTsKLSAgICAgICAgICAgIHYuYWRkQWxsKHhzZE1vZGVsR3JvdXAuZ2V0UGFydGljbGVzKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnYXRoZXJJbmhlcml0ZWRQYXJ0aWNsZXMoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlKQotICB7Ci0gICAgaWYgKGNvbXBsZXhUeXBlLmdldERlcml2YXRpb25NZXRob2QoKS5nZXRWYWx1ZSgpID09IFhTRENvbXBsZXhGaW5hbC5FWFRFTlNJT04pCi0gICAgewotICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKQotICAgICAgewotICAgICAgICBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXAgPSBnZXRYU0RNb2RlbEdyb3VwKChYU0RQYXJ0aWNsZSljb21wbGV4VHlwZUNvbnRlbnQpOwotICAgICAgICBpZiAoeHNkTW9kZWxHcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdCBpbmhlcml0ZWRQYXJ0aWNsZXMgPSBnZXRJbmhlcml0ZWRQYXJ0aWNsZXMoY29tcGxleFR5cGUpOwotICAgICAgICAgIExpc3QgcGFydGljbGVzID0geHNkTW9kZWxHcm91cC5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgICAgICBwYXJ0aWNsZXMuYWRkQWxsKDAsIGluaGVyaXRlZFBhcnRpY2xlcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAKLSAgCi0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKQotICB7Ci0gIAlyZXR1cm4gc3VwZXIuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7CQkKLSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUF0dHJpYnV0ZUZyYWdtZW50cyhTdHJpbmcgY29tcGxleENoaWxkSUQpCi0gIHsKLSAgCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgCUVMaXN0IGF0Q29udGVudExpc3QgPSBjb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVDb250ZW50cygpOwotICAJSXRlcmF0b3IgaXRlcmF0b3IgPSBhdENvbnRlbnRMaXN0Lml0ZXJhdG9yKCk7Ci0gIAl3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAJICBPYmplY3Qgb2JqZWN0ID0gKE9iamVjdClpdGVyYXRvci5uZXh0KCk7Ci0gIAkgIGlmKG9iamVjdCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbil7Ci0gIAkJWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIHhzZEFHRCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pb2JqZWN0OwotICAJCVhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiByZXNvbHZlZCA9IHhzZEFHRC5nZXRSZXNvbHZlZEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbigpOwotICAJCUVMaXN0IGFMaXN0ID0gcmVzb2x2ZWQuZ2V0Q29udGVudHMoKTsKLSAgCQlJdGVyYXRvciBpdGVyYXRvcjIgPSBhTGlzdC5pdGVyYXRvcigpOwotICAJCXdoaWxlKGl0ZXJhdG9yMi5oYXNOZXh0KCkpewotICAJCQljcmVhdGVBdHRyaWJ1dGVIZWxwZXIoKFhTREF0dHJpYnV0ZVVzZSlpdGVyYXRvcjIubmV4dCgpLGNvbXBsZXhDaGlsZElEKTsKLSAgCQl9Ci0gIAkgIH0KLSAgCSAgZWxzZXsKLSAgCSAgICBYU0RBdHRyaWJ1dGVVc2UgYXR0VXNlID0gIChYU0RBdHRyaWJ1dGVVc2Upb2JqZWN0OwotICAJICAgIGNyZWF0ZUF0dHJpYnV0ZUhlbHBlcihhdHRVc2UsY29tcGxleENoaWxkSUQpOwotICAJICB9Ci0gIAkgIAotICAJfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgY3JlYXRlQXR0cmlidXRlSGVscGVyKFhTREF0dHJpYnV0ZVVzZSBhdHRVc2UsU3RyaW5nIGNvbXBsZXhDaGlsZElEKXsKLQkgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KGF0dFVzZSk7Ci0gICAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICAgIGFkZEF0dHJpYnV0ZUZyYWdtZW50KGNvbXBsZXhDaGlsZElEICsgbmV3SUQsIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLGNvbXBsZXhDaGlsZElEICsgbmV3SUQsIGNvbXBsZXhDaGlsZElEICsgbmV3SUQpKTsKLSAgCSAgCi0gIH0KLSAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpCi0gIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgZ2F0aGVySW5oZXJpdGVkUGFydGljbGVzKGNvbXBsZXhUeXBlKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChjb21wbGV4VHlwZUNvbnRlbnQpOwotICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICBTdHJpbmcgbmV3SUQgPSBnZW5JRCgpOwotICAgIGFkZEZyYWdtZW50KG5ld0lELCBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgbmV3SUQsIGdldE5hbWUoKSkpOwotICAgIGNyZWF0ZUF0dHJpYnV0ZUZyYWdtZW50cyhuZXdJRCk7Ci0gICAgcmV0dXJuIG5ld0lEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGxleEluc3RhbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4UmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjliZDhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNWEzMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9JbXBsL1hTRENvbXBsZXhGaXhGcmFnbWVudC5qYXZhLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAxCi0qIFZlcnNpb24gMS4xIDAzLzAyLzI4IDE1OjI1OjE1Ci0qLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIAotICAKLSAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIHJldHVybiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsSVhTREZyYWdtZW50IGZyYWcpewotICAJYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gIAkKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBpKyspewotICAJICBpZihhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWcuZ2V0SUQoKSkpeyAgCi0gIAkgIAkgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gaW5zdGFuY2VEb2N1bWVudC5nZXRBdHRyaWJ1dGVzKCk7CQotICAJICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gIAkgICAgICBwYXJhbXNWYWxpZCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVQYXJhbXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobm9kZU1hcC5nZXROYW1lZEl0ZW0obmFtZSkpOwkKLSAgICAgIH0KLSAgCX0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgICBjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdID0gaW5zdGFuY2VEb2N1bWVudHNbaV07Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMsIGNoaWxkRnJhZy5nZXROYW1lKCkpKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZURvY3VtZW50c1swXSxjaGlsZEZyYWcpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgVmVjdG9yIGluc3RhbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShqKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIGluc3RhbmNlc1ZlY3Rvci5hZGQobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGluc3RhbmNlc1ZlY3Rvci5jb3B5SW50byhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZURvY3VtZW50c1tpXSxjaGlsZEZyYWcpOwotICAgIAotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSxEb2N1bWVudCBkb2MpIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsZG9jKTsKLSAgICBlbHNlCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLGRvYyk7Ci0gICAgICBpZihnZW5YU0lUeXBlKSBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSk7Ci0gIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgYWRkQXR0cmlidXRlcyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsIElYU0RGcmFnbWVudCBmcmFnbWVudCwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlICl7Ci0gIAkKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaysrKXsKLSAgICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZ21lbnQuZ2V0SUQoKSkpewotICAgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnQsbmFtZSk7CQotICAgICAgfQotICAgIH0KLSAgIAkKLSAgIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgfQotICAKLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZnJhZ21lbnRzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSxkb2MpOwotICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aCA+IDApewotICAgICAgCWZyYWdtZW50SW5zdGFuY2VzWzBdID0gYWRkQXR0cmlidXRlcyhmcmFnbWVudEluc3RhbmNlc1swXSxmcmFnbWVudHNbaV0sbmFtZXNwYWNlVGFibGUpOwotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCB0YWdOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSxEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbY2hpbGRGcmFncy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gY2hpbGRGcmFnc1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsZG9jKTsKLSAgICAgICAgCi0gICAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkSW5zdGFuY2VzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKGNoaWxkSW5zdGFuY2VzW2pdICE9IG51bGwpewotICAgICAgICAgIAlhZGRBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VzW2pdLGNoaWxkRnJhZ3NbaV0sbmFtZXNwYWNlVGFibGUpOyAKLSAgICAgICAgICAJaW5zdGFuY2VEb2N1bWVudC5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShjaGlsZEluc3RhbmNlc1tqXSwgdHJ1ZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWJiODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L0ltcGwvWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQuamF2YSwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNToyNToxOAotKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50IHsKLSAgcHVibGljIFhTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgcmV0dXJuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCxJWFNERnJhZ21lbnQgZnJhZyl7Ci0gIAlib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgCQotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIAlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGkrKyl7Ci0gIAkgIGlmKGF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZy5nZXRJRCgpKSl7ICAKLSAgCSAgCSAgTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBpbnN0YW5jZURvY3VtZW50LmdldEF0dHJpYnV0ZXMoKTsJCi0gIAkgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgCSAgICAgIHBhcmFtc1ZhbGlkID0gYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhub2RlTWFwLmdldE5hbWVkSXRlbShuYW1lKSk7CQotICAgICAgfQotICAJfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgIGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0gPSBpbnN0YW5jZURvY3VtZW50c1tpXTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoY2hpbGRJbnN0YW5jZURvY3VtZW50cywgY2hpbGRGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdLGNoaWxkRnJhZyk7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBWZWN0b3IgaW5zdGFuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgCi0gICAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzW2ldLGNoaWxkRnJhZyk7Ci0gICAgCi0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLERvY3VtZW50IGRvYykgewotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSwgZG9jKTsKLSAgICBlbHNlCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLCBkb2MpOwotICAgICAgaWYoZ2VuWFNJVHlwZSkgYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpOwotICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LCBJWFNERnJhZ21lbnQgZnJhZ21lbnQsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSApewotICAJCi0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGsrKyl7Ci0gICAgICBpZihhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWdtZW50LmdldElEKCkpKXsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICAgIGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50LG5hbWUpOwkKLSAgICAgIH0KLSAgICB9Ci0gICAJCi0gICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLERvY3VtZW50IGRvYykKLSAgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsZG9jKTsKLSAgICAgIGlmIChmcmFnbWVudEluc3RhbmNlcy5sZW5ndGggPiAwKXsKLSAgICAgIAlmcmFnbWVudEluc3RhbmNlc1swXSA9IGFkZEF0dHJpYnV0ZXMoZnJhZ21lbnRJbnN0YW5jZXNbMF0sZnJhZ21lbnRzW2ldLG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1swXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudHNDb3B5LmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgdGFnTmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsRG9jdW1lbnQgZG9jKSB7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2NoaWxkRnJhZ3MubGVuZ3RoXTsKLSAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gY2hpbGRGcmFnc1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICAgIAotICAgICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZEluc3RhbmNlcy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChjaGlsZEluc3RhbmNlc1tqXSAhPSBudWxsKXsKLSAgICAgICAgICAJYWRkQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlc1tqXSxjaGlsZEZyYWdzW2ldLG5hbWVzcGFjZVRhYmxlKTsgCi0gICAgICAgICAgCWluc3RhbmNlRG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmltcG9ydE5vZGUoY2hpbGRJbnN0YW5jZXNbal0sIHRydWUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIAotICAKLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWZhdWx0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlZmF1bHRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTliZDBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlZmF1bHRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0REZWZhdWx0RnJhZ21lbnQgZXh0ZW5kcyBYU0RGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0REZWZhdWx0RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmdbXSBwYXJhbSA9IG5ldyBTdHJpbmdbMV07Ci0gICAgcGFyYW1bMF0gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldElEKCkpOwotICAgIHNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbSk7Ci0gICAgcmV0dXJuIGlzRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbVswXSkpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgYWRkUm9vdEVsZW1lbnQoU3RyaW5nIGVsZW1lbnQpIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlJPT1RfRUxFTUVOVF9TVEFSVF9UQUcpOwotICAgIHNiLmFwcGVuZChlbGVtZW50KTsKLSAgICBzYi5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUk9PVF9FTEVNRU5UX0VORF9UQUcpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudChTdHJpbmcgZWxlbWVudFN0cmluZykgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gKFhNTFV0aWxzLnN0cmluZ1RvRWxlbWVudChlbGVtZW50U3RyaW5nKSAhPSBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUoZ2V0SUQoKSwgMCk7Ci0gICAgcmV0dXJuIChwYXJhbSA9PSBudWxsIHx8IGlzRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbSkpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKGdldElEKCksIDApOwotICAgIHJldHVybiAocGFyYW0gPT0gbnVsbCB8fCBpc0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW0pKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShnZXRJRCgpLCAwKTsKLSAgICByZXR1cm4gKHBhcmFtID09IG51bGwgfHwgaXNFbGVtZW50KGFkZFJvb3RFbGVtZW50KHBhcmFtKSkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBib29sZWFuIHBhcmFtVmFsaWQgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFN0cmluZyBpbnN0YW5jZVN0cmluZyA9IFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1tpXSwgdHJ1ZSk7Ci0gICAgICBpZiAoaW5zdGFuY2VTdHJpbmcgIT0gbnVsbCAmJiBpbnN0YW5jZVN0cmluZy5sZW5ndGgoKSA+IDApCi0gICAgICAgIHNiLmFwcGVuZChpbnN0YW5jZVN0cmluZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHBhcmFtVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgU3RyaW5nW10gcGFyYW0gPSB7c2IudG9TdHJpbmcoKX07Ci0gICAgc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtKTsKLSAgICByZXR1cm4gcGFyYW1WYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShnZXRJRCgpLCAwKTsKLSAgICBpZiAocGFyYW0gPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgRWxlbWVudFswXTsKLSAgICBFbGVtZW50IHJvb3Q7Ci0gICAgdHJ5IHsKLSAgICAgIHJvb3QgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShYTUxVdGlscy5zdHJpbmdUb0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW0pKSwgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIH0KLSAgICBOb2RlTGlzdCBubCA9IHJvb3QuZ2V0Q2hpbGROb2RlcygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgewotICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudFZlY3Rvci5hZGQobm9kZSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRWZWN0b3Iuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRWZWN0b3IuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2MzJhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERGVsZWdhdGlvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgWFNERGVsZWdhdGlvbkZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgaW1wbGVtZW50cyBJWFNERGVsZWdhdGlvbkZyYWdtZW50Ci17Ci0gIHByaXZhdGUgSVhTREZyYWdtZW50IHhzZEZyYWdtZW50XzsKLQotICBwdWJsaWMgWFNERGVsZWdhdGlvbkZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIHhzZEZyYWdtZW50XyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgc3VwZXIuc2V0TmFtZShuYW1lKTsKLSAgICBpZiAoeHNkRnJhZ21lbnRfICE9IG51bGwpCi0gICAgICB4c2RGcmFnbWVudF8uc2V0TmFtZShuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8ucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKQotICB7Ci0gICAgeHNkRnJhZ21lbnRfLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpCi0gIHsKLSAgICB4c2RGcmFnbWVudF8uc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLmdldFBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8udmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8udmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50cyk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25SRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRERlbGVnYXRpb25GcmFnbWVudChJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnQpCi0gIHsKLSAgICB4c2RGcmFnbWVudF8gPSB4c2RGcmFnbWVudDsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVsZW1lbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERWxlbWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkN2E1NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERWxlbWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTE5ICAgMTIzNTM5IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIE34bGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RFbGVtZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZvcm07Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNERWxlbWVudEZyYWdtZW50IGV4dGVuZHMgWFNERGVsZWdhdGlvbkZyYWdtZW50IGltcGxlbWVudHMgSVhTREVsZW1lbnRGcmFnbWVudAotewotICBwcml2YXRlIGludCBtaW5PY2N1cnNfOwotICBwcml2YXRlIGludCBtYXhPY2N1cnNfOwotICBwcml2YXRlIGJvb2xlYW4gaXNOaWxfOwotIAotICAKLSAgcHVibGljIFhTREVsZW1lbnRGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBpZiAoY29uZmlnICE9IG51bGwpCi0gICAgewotICAgICAgbWluT2NjdXJzXyA9IGNvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICAgIG1heE9jY3Vyc18gPSBjb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtaW5PY2N1cnNfID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NSU5fT0NDVVJTOwotICAgICAgbWF4T2NjdXJzXyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgZWxlbWVudFR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIHNldElzTmlsKHBhcnNlcik7Ci0gICAgaWYoaXNOaWxfKXJldHVybiB0cnVlOwotICAgIAkKLSAgICBpZiAoIWVsZW1lbnRUeXBlRnJhZ21lbnQucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhlbGVtZW50VHlwZUZyYWdtZW50LmdldElEKCkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhd2l0aGluUmFuZ2UocGFyYW1zLmxlbmd0aCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRJc05pbChNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5pbCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0TmlsSUQoKSk7Ci0gICAgaWYobmlsICE9IG51bGwpIGlzTmlsXyA9IHRydWU7Ci0gICAgZWxzZSBpc05pbF8gPSBmYWxzZTsKLSAgICByZXR1cm4gaXNOaWxfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgZWxlbWVudFR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhlbGVtZW50VHlwZUZyYWdtZW50LmdldElEKCkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhd2l0aGluUmFuZ2UocGFyYW1zLmxlbmd0aCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFlbGVtZW50VHlwZUZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhd2l0aGluUmFuZ2UocGFyYW1zLmxlbmd0aCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpCi0gIHsKLSAgICBpZiAoIXdpdGhpblJhbmdlKHBhcmFtSW5kZXggKyAxKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0gICAgaWYgKHBhcmFtICE9IG51bGwgJiYgcGFyYW0ubGVuZ3RoKCkgPD0gMCAmJiAheHNkRWxlbWVudC5pc05pbGxhYmxlKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyLnNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0gICAgbWluT2NjdXJzXyA9IGNvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICBtYXhPY2N1cnNfID0gY29uZmlnLmdldE1heE9jY3VycygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFN0cmluZyB3c2RsUGFydE5hbWUgPSBjb25maWcuZ2V0V1NETFBhcnROYW1lKCk7Ci0gICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0Q2hpbGROb2RlcygpOwotICAgIAotICAgIGlmKGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5oYXNBdHRyaWJ1dGUoWFNJX05JTF9BVFRSSUJVVEUpKXsKLSAgICAgIFN0cmluZyBuaWwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0QXR0cmlidXRlKFhTSV9OSUxfQVRUUklCVVRFKTsKLSAgICAgIGlmKG5pbC5lcXVhbHMoVFJVRSkpIGlzTmlsXyA9IHRydWU7IAotICAgIH0gIAotICAgIAotICAgIAotICAgIGlmIChjb25maWcuZ2V0SXNXU0RMUGFydCgpICYmIGNvbmZpZy5nZXRTdHlsZSgpID09IEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX1JQQyAmJiB3c2RsUGFydE5hbWUgIT0gbnVsbCAmJiB3c2RsUGFydE5hbWUubGVuZ3RoKCkgPiAwICYmIGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGggPT0gMSAmJiB3c2RsUGFydE5hbWUuZXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5nZXRUYWdOYW1lKCkpKQotICAgIHsKLSAgICAgIFZlY3RvciBjaGlsZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgIGNoaWxkRWxlbWVudHMuYWRkKG5vZGUpOwotICAgICAgfQotICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gKEVsZW1lbnRbXSljaGlsZEVsZW1lbnRzLnRvQXJyYXkobmV3IEVsZW1lbnRbMF0pOwotICAgIH0KLSAgICBJWFNERnJhZ21lbnQgZWxlbWVudFR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGVGcmFnbWVudC5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgZWxlbWVudFR5cGVGcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTSV9OSUxfQVRUUklCVVRFID0gInhzaTpuaWwiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBUUlVFID0gInRydWUiOwotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gIAkKLSAgCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICBpZihpc05pbF8peyAKLSAgICAgIGZvcihpbnQgaj0wO2ogPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7aisrKXsgIAotICAgICAgCWluc3RhbmNlRG9jdW1lbnRzW2pdLnNldEF0dHJpYnV0ZShYU0lfTklMX0FUVFJJQlVURSxUUlVFKTsKLSAgICAgIAlOb2RlTGlzdCBub2RlTGlzdCA9IGluc3RhbmNlRG9jdW1lbnRzW2pdLmdldENoaWxkTm9kZXMoKTsgCi0gICAgICAgIGludCBsZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgICAgZm9yKGludCBpID0wO2kgPCBsZW5ndGg7aSsrKXsKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tqXS5yZW1vdmVDaGlsZChub2RlTGlzdC5pdGVtKDApKTsKLSAgICAgICAgfQotICAgICAgfSAgCi0gICAgfQotICAgIGluc3RhbmNlRG9jdW1lbnRzID0gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSkpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgU3RyaW5nIHdzZGxQYXJ0TmFtZSA9IGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKTsKLSAgICBpZiAoY29uZmlnLmdldElzV1NETFBhcnQoKSAmJiBjb25maWcuZ2V0U3R5bGUoKSA9PSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9SUEMgJiYgd3NkbFBhcnROYW1lICE9IG51bGwgJiYgd3NkbFBhcnROYW1lLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbMF0gPSBkb2MuY3JlYXRlRWxlbWVudCh3c2RsUGFydE5hbWUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0gIT0gbnVsbCkKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50c1swXS5hcHBlbmRDaGlsZChpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0pOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkKLSAgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMKQotICAgIHsKLSAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgZWxlbWVudCwgc2luY2UgYW4gZWxlbWVudCB3aXRoIGEgcmVmIGNhbiBuZXZlciBiZSBnbG9iYWwKLSAgICAgIGlmICh4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgeHNkRWxlbWVudCA9IHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgIAotICAgICAgaWYgKHhzZEVsZW1lbnQuaXNHbG9iYWwoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICh4c2RFbGVtZW50LmlzU2V0Rm9ybSgpKQotICAgICAgICAgIHJldHVybiAoeHNkRWxlbWVudC5nZXRGb3JtKCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gKHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0RWxlbWVudEZvcm1EZWZhdWx0KCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUoSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKQotICB7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIFN0cmluZ0J1ZmZlciB0YWdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkpCi0gICAgewotICAgICAgU3RyaW5nIG5zVVJJID0gbnVsbDsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAgIG5zVVJJID0geHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgZWxzZQotICAgICAgICBuc1VSSSA9IHhzZEVsZW1lbnQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobnNVUkkgIT0gbnVsbCAmJiBuc1VSSS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKG5zVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgIHRhZ05hbWUuYXBwZW5kKHByZWZpeCk7Ci0gICAgICAgIHRhZ05hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgU3RyaW5nIHhzZEVsZW1lbnROYW1lID0geHNkRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgaWYgKHhzZEVsZW1lbnROYW1lID09IG51bGwgfHwgeHNkRWxlbWVudE5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICB7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgICB4c2RFbGVtZW50TmFtZSA9IHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHhzZEVsZW1lbnROYW1lID0gZ2V0TmFtZSgpOwotICAgIH0KLSAgICB0YWdOYW1lLmFwcGVuZCh4c2RFbGVtZW50TmFtZSk7Ci0gICAgcmV0dXJuIHRhZ05hbWUudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3aXRoaW5SYW5nZShpbnQgc2l6ZSkKLSAgewotICAgIGlmIChzaXplIDwgbWluT2NjdXJzXykKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWF4T2NjdXJzXyAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgJiYgc2l6ZSA+IG1heE9jY3Vyc18pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNaW5PY2N1cnMoaW50IG1pbk9jY3VycykKLSAgewotICAgIG1pbk9jY3Vyc18gPSBtaW5PY2N1cnM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1pbk9jY3VycygpCi0gIHsKLSAgICByZXR1cm4gbWluT2NjdXJzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1heE9jY3VycyhpbnQgbWF4T2NjdXJzKQotICB7Ci0gICAgbWF4T2NjdXJzXyA9IG1heE9jY3VyczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TWF4T2NjdXJzKCkKLSAgewotICAgIHJldHVybiBtYXhPY2N1cnNfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc05pbGxhYmxlKCkKLSAgewotICAJaWYoZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCJuaWxsYWJsZSIpLmVxdWFscygidHJ1ZSIpKQotICAJICByZXR1cm4gdHJ1ZTsKLSAgCXJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNOaWwoKQotICB7Ci0gIAlyZXR1cm4gaXNOaWxfOwotICB9Ci0gIAotICAKLSAgcHVibGljIFN0cmluZyBnZXROaWxJRCgpCi0gIHsKLSAgCXJldHVybiBnZXRJRCgpICsgSVhTREVsZW1lbnRGcmFnbWVudC5OSUw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbXB0eUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbXB0eUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjI1OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERW1wdHlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNERW1wdHlGcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IHsKLSAgcHJpdmF0ZSBpbnQgb2NjdXJhbmNlXzsKLQotICBwdWJsaWMgWFNERW1wdHlGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBvY2N1cmFuY2VfID0gMDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZyBvY2N1cmFuY2UgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldElEKCkpOwotICAgIHRyeSB7Ci0gICAgICBvY2N1cmFuY2VfID0gSW50ZWdlci5wYXJzZUludChvY2N1cmFuY2UpOwotICAgICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgb2NjdXJhbmNlXyA9IC0xOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcykgewotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICBpZiAob2NjdXJhbmNlXyA8IDApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBlbHNlIHsKLSAgICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbb2NjdXJhbmNlX107Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICBwYXJhbXNbaV0gPSAiIjsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXJhbXM7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgaWYgKHBhcmFtSW5kZXggPj0gMCAmJiBwYXJhbUluZGV4IDwgb2NjdXJhbmNlXykKLSAgICAgIHJldHVybiAiIjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgaW50IG1pbiA9IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICBpbnQgbWF4ID0geHNkQ29uZmlnLmdldE1heE9jY3VycygpOwotICAgIHJldHVybiAob2NjdXJhbmNlXyA+PSAwICYmIG9jY3VyYW5jZV8gPj0gbWluICYmIChtYXggPT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEIHx8IG9jY3VyYW5jZV8gPD0gbWF4KSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICByZXR1cm4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykgewotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIGVsc2UgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpICE9IDApIHsKLSAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlRFWFRfTk9ERSB8fCAhaXNXaGl0ZXNwYWNlKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIG9jY3VyYW5jZV8gPSBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOwotICAgIHJldHVybiBwYXJhbXNWYWxpZCAmJiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzV2hpdGVzcGFjZShTdHJpbmcgcykgewotICAgIGNoYXJbXSBjaGFycyA9IHMudG9DaGFyQXJyYXkoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2hhcnNbaV0pIHx8ICFDaGFyYWN0ZXIuaXNTcGFjZUNoYXIoY2hhcnNbaV0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMThhOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNERnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RGcmFnbWVudAotewotICBwcml2YXRlIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZ187Ci0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZl87Ci0gIHByaXZhdGUgaW50IHNlZWRfOwotCi0gIHB1YmxpYyBYU0RGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSk7Ci0gICAgY29uZmlnXyA9IGNvbmZpZzsKLSAgICBpZiAoY29uZmlnXyAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICAgIHR5cGVEZWZfID0gKFhTRFR5cGVEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICAgIGVsc2UKLSAgICAgICAgdHlwZURlZl8gPSBudWxsOwotICAgIH0KLSAgICBzZWVkXyA9IDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBjb25maWdfID0gY29uZmlnOwotICAgIGlmIChjb25maWdfICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgc2V0WFNEVHlwZURlZmluaXRpb24oKFhTRFR5cGVEZWZpbml0aW9uKWNvbXBvbmVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkKLSAgewotICAgIHJldHVybiBjb25maWdfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZURlZikKLSAgewotICAgIHR5cGVEZWZfID0gdHlwZURlZjsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZURlZl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aF07Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBhcmFtc1tpXSA9ICIiOwotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKTsKLSAgICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuVEVYVF9OT0RFKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNbaV0gPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBzZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSwgcGFyYW1zKTsKLSAgICByZXR1cm4gcGFyYW1zVmFsaWQgJiYgdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50W10gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzLCBTdHJpbmcgdGFnTmFtZSkKLSAgewotICAgIGlmIChpbnN0YW5jZURvY3VtZW50cyA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIFZlY3RvciBpbnN0YW5jZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgU3RyaW5nIGluc3RhbmNlVGFnTmFtZSA9IHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKTsKLSAgICAgIGlmIChpbnN0YW5jZVRhZ05hbWUuZXF1YWxzKHRhZ05hbWUpKQotICAgICAgICBpbnN0YW5jZXNDb3B5LmFkZChpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZXMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNDb3B5LnNpemUoKV07Ci0gICAgaW5zdGFuY2VzQ29weS5jb3B5SW50byhpbnN0YW5jZXMpOwotICAgIHJldHVybiBpbnN0YW5jZXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHRyaW1QcmVmaXgoU3RyaW5nIHMpCi0gIHsKLSAgICBTdHJpbmcgc0NvcHkgPSBuZXcgU3RyaW5nKHMpOwotICAgIGludCBjb2xvbkluZGV4ID0gc0NvcHkuaW5kZXhPZihGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgaWYgKGNvbG9uSW5kZXggIT0gLTEgJiYgY29sb25JbmRleCArIDEgPCBzQ29weS5sZW5ndGgoKSAmJiAhKChTdHJpbmcudmFsdWVPZihzQ29weS5jaGFyQXQoY29sb25JbmRleCArIDEpKSkuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKSkpCi0gICAgICBzQ29weSA9IHNDb3B5LnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgc0NvcHkubGVuZ3RoKCkpOwotICAgIHJldHVybiBzQ29weTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGb3JOaWwoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsRG9jdW1lbnQgZG9jKXsKLSAgCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgICAgfQotICAgIHJldHVybiAoZ2VuWFNJVHlwZSA/IGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKSA6IGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSxEb2N1bWVudCBkb2MpIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgaWYgKHBhcmFtcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W3BhcmFtcy5sZW5ndGhdOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICBOb2RlIHRleHROb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHBhcmFtc1tpXSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIChnZW5YU0lUeXBlID8gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpIDogaW5zdGFuY2VEb2N1bWVudHMpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgc2V0QXR0cmlidXRlc09uSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LFN0cmluZyBhdHROYW1lKXsKLSAgCVN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBpZiAocGFyYW1zID09IG51bGwpCi0gICAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgICBpZiAoaXNBdHRyaWJ1dGVJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpKXsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnQuc2V0QXR0cmlidXRlTlMoY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKSxhdHROYW1lLHBhcmFtc1swXSk7Ci0gICAgICAKLSAgICB9Ci0gICAgZWxzZSBpbnN0YW5jZURvY3VtZW50LnNldEF0dHJpYnV0ZShhdHROYW1lLHBhcmFtc1swXSk7Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhOb2RlIGF0dHJpYnV0ZSl7Ci0gIAlTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nWzFdOwotICAJcGFyYW1zWzBdID0gYXR0cmlidXRlLmdldE5vZGVWYWx1ZSgpOyAKLSAgCXNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbXMpOwotICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdlbklEKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBuZXdJRCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBuZXdJRC5hcHBlbmQoZ2V0SUQoKSk7Ci0gICAgbmV3SUQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLklEX1NFUEVSQVRPUik7Ci0gICAgbmV3SUQuYXBwZW5kKHNlZWRfKyspOwotICAgIHJldHVybiBuZXdJRC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKTsKLSAgICByZXR1cm4gKCFjb25maWdfLmdldElzV1NETFBhcnQoKSAmJiBjb25maWdfLmdldFBhcnRFbmNvZGluZygpID09IEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUwgJiYgeHNkU2NoZW1hLmdldEVsZW1lbnRGb3JtRGVmYXVsdCgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNBdHRyaWJ1dGVJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpIHsKLSAgCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSBjb25maWdfLmdldFhTRENvbXBvbmVudCgpLmdldFNjaGVtYSgpOwotICAgIAotICAgIHJldHVybiAoIWNvbmZpZ18uZ2V0SXNXU0RMUGFydCgpICYmCi0gICAgICAgICAgICAgICAgY29uZmlnXy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMICYmCi0gICAgICAgICAgICAgICAgeHNkU2NoZW1hLmdldEF0dHJpYnV0ZUZvcm1EZWZhdWx0KCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0KLSAgfQotCi0gCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkgewotICAgIFN0cmluZ0J1ZmZlciB0YWdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkpCi0gICAgewotICAgICAgU3RyaW5nIG5zVVJJID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKG5zVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICB0YWdOYW1lLmFwcGVuZChwcmVmaXgpOwotICAgICAgdGFnTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgIH0KLSAgICB0YWdOYW1lLmFwcGVuZChnZXROYW1lKCkpOwotICAgIHJldHVybiB0YWdOYW1lLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIGFkZFhTSVR5cGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBYU0RDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCAmJiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNETmFtZWRDb21wb25lbnQpKQotICAgIHsKLSAgICAgIFN0cmluZyB4c2RDb21wb25lbnROYW1lID0gKChYU0ROYW1lZENvbXBvbmVudCl4c2RDb21wb25lbnQpLmdldE5hbWUoKTsKLSAgICAgIGlmICh4c2RDb21wb25lbnROYW1lICE9IG51bGwgJiYgeHNkQ29tcG9uZW50TmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIFN0cmluZyB4c2lVUkkgPSBGcmFnbWVudENvbnN0YW50cy5VUklfWFNJOwotICAgICAgICAgIFN0cmluZyB4c2lQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHhzaVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlVVJJID0geHNkQ29tcG9uZW50LmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lUeXBlVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgICAgOwotICAgICAgICAgIFN0cmluZ0J1ZmZlciBhdHRyTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBhdHRyTmFtZS5hcHBlbmQoeHNpUHJlZml4KTsKLSAgICAgICAgICBhdHRyTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgICAgIGF0dHJOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5YU0lfVFlQRSk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGF0dHJWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKHhzaVR5cGVQcmVmaXgpOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoeHNkQ29tcG9uZW50TmFtZSk7Ci0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLnRvU3RyaW5nKCksIGF0dHJWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICBpZiAoIXN1cGVyLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIGludCBsZW5ndGggPSAocGFyYW1zICE9IG51bGwpID8gcGFyYW1zLmxlbmd0aCA6IDA7Ci0gICAgaW50IG1pbiA9IGNvbmZpZ18uZ2V0TWluT2NjdXJzKCk7Ci0gICAgaW50IG1heCA9IGNvbmZpZ18uZ2V0TWF4T2NjdXJzKCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPj0gbWluICYmIChtYXggPT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEIHx8IGxlbmd0aCA8PSBtYXgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShTdHJpbmcgbnNVUkksIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkKLSAgewotICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKW5hbWVzcGFjZVRhYmxlLmdldChuc1VSSSk7Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlIChwcmVmaXggPT0gbnVsbCB8fCBwcmVmaXgubGVuZ3RoKCkgPD0gMCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcHJlZml4Q29weSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHByZWZpeENvcHkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX1BSRUZJWCk7Ci0gICAgICBwcmVmaXhDb3B5LmFwcGVuZChTdHJpbmcudmFsdWVPZihpKSk7Ci0gICAgICBpKys7Ci0gICAgICBpZiAoIW5hbWVzcGFjZVRhYmxlLmNvbnRhaW5zKHByZWZpeENvcHkudG9TdHJpbmcoKSkpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZVRhYmxlLnB1dChuc1VSSSwgcHJlZml4Q29weS50b1N0cmluZygpKTsKLSAgICAgICAgcHJlZml4ID0gcHJlZml4Q29weS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgc2V0RWxlbWVudFRhZ05hbWUoRWxlbWVudCBlLCBTdHJpbmcgdGFnTmFtZSkKLSAgewotICAgIGlmICghZS5nZXRUYWdOYW1lKCkuZXF1YWxzKHRhZ05hbWUpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2MgPSBlLmdldE93bmVyRG9jdW1lbnQoKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgRWxlbWVudCBlQ29weSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGNoaWxkID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgIAkgIGVDb3B5LmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZSh0cnVlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGopOwotICAgICAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgKGF0dHIgaW5zdGFuY2VvZiBBdHRyKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKWF0dHI7Ci0gICAgICAgICAgICBlQ29weS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLmdldE5hbWUoKSwgYXR0cmlidXRlLmdldFZhbHVlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZUNvcHk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIHNldEVsZW1lbnRzVGFnTmFtZShFbGVtZW50W10gZSwgU3RyaW5nIHRhZ05hbWUpCi0gIHsKLSAgICBFbGVtZW50W10gZUNvcHkgPSBuZXcgRWxlbWVudFtlLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlQ29weS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBlQ29weVtpXSA9IHNldEVsZW1lbnRUYWdOYW1lKGVbaV0sIHRhZ05hbWUpOwotICAgIH0KLSAgICByZXR1cm4gZUNvcHk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpbnRlcm5hbEVxdWFscyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBpZiAoIWNvbmZpZ18uZ2V0SXNXU0RMUGFydCgpKQotICAgIHsKLSAgICAgIGludCBsZW5ndGggPSAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCkgPyBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggOiAwOwotICAgICAgaW50IGxlbmd0aENvcHkgPSAoaW5zdGFuY2VEb2N1bWVudHNDb3B5ICE9IG51bGwpID8gaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aCA6IDA7Ci0gICAgICByZXR1cm4gKGxlbmd0aCA9PSBsZW5ndGhDb3B5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQWxsRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQWxsRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZkZDg5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEFsbEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBBbGxGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBBbGxGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNER3JvdXBBbGxGcmFnbWVudCB7Ci0gIHByaXZhdGUgU3RyaW5nIGdyb3VwSURfOwotCi0gIHB1YmxpYyBYU0RHcm91cEFsbEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gICAgZ3JvdXBJRF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIGdyb3VwSUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldElEKCkpOwotICAgIGlmIChncm91cElEXyAhPSBudWxsICYmIGdyb3VwSUQgIT0gbnVsbCAmJiBncm91cElEXy5lcXVhbHMoZ3JvdXBJRCkpIHsKLSAgICAgIHNldEdyb3VwTWVtYmVySURzT3JkZXJpbmcocGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhncm91cElEXykpOwotICAgICAgYm9vbGVhbiB2YWx1ZXNWYWxpZCA9IHRydWU7Ci0gICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURfKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldICE9IG51bGwgJiYgIWdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgICB2YWx1ZXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIHZhbHVlc1ZhbGlkOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGdyb3VwSURfID0gbnVsbDsKLSAgICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCAmJiBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICBncm91cElEXyA9IGNyZWF0ZUluc3RhbmNlKCk7Ci0gICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRF8pOwotICAgICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHNPcmRlciA9IG5ldyBTdHJpbmdbZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGhdOwotICAgICAgaW50IG9yZGVySW5kZXggPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBib29sZWFuIHBhcmFtc0Fzc2lnbmVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChncm91cE1lbWJlckZyYWdzW2pdICE9IG51bGwgJiYgZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXROYW1lKCkuZXF1YWxzKHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlID0ge2luc3RhbmNlRG9jdW1lbnRzW2ldfTsKLSAgICAgICAgICAgIGlmICghZ3JvdXBNZW1iZXJGcmFnc1tqXS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRJbnN0YW5jZSkpCi0gICAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBncm91cE1lbWJlcklEc09yZGVyW29yZGVySW5kZXhdID0gZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXRJRCgpOwotICAgICAgICAgICAgb3JkZXJJbmRleCsrOwotICAgICAgICAgICAgcGFyYW1zQXNzaWduZWQgPSB0cnVlOwotICAgICAgICAgICAgZ3JvdXBNZW1iZXJGcmFnc1tqXSA9IG51bGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwYXJhbXNBc3NpZ25lZCkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBncm91cE1lbWJlckZyYWdzLmxlbmd0aDsgaysrKSB7Ci0gICAgICAgIGlmIChncm91cE1lbWJlckZyYWdzW2tdICE9IG51bGwpIHsKLSAgICAgICAgICBncm91cE1lbWJlcklEc09yZGVyW29yZGVySW5kZXhdID0gZ3JvdXBNZW1iZXJGcmFnc1trXS5nZXRJRCgpOwotICAgICAgICAgIG9yZGVySW5kZXgrKzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2V0R3JvdXBNZW1iZXJJRHNPcmRlcmluZyhncm91cE1lbWJlcklEc09yZGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRHcm91cEFsbEluc3RhbmNlKCkgewotICAgIGlmIChncm91cElEXyA9PSBudWxsKQotICAgICAgZ3JvdXBJRF8gPSBjcmVhdGVHcm91cEluc3RhbmNlKCk7Ci0gICAgcmV0dXJuIGdyb3VwSURfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gZ2V0R3JvdXBBbGxJbnN0YW5jZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0R3JvdXBNZW1iZXJJRHNPcmRlcmluZyhTdHJpbmdbXSBncm91cE1lbWJlcklEcykgewotICAgIGlmIChncm91cE1lbWJlcklEcyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1tdIGV4aXN0aW5nR3JvdXBNZW1iZXJJRHMgPSBnZXRHcm91cE1lbWJlcklEcyhncm91cElEXyk7Ci0gICAgaWYgKGV4aXN0aW5nR3JvdXBNZW1iZXJJRHMubGVuZ3RoICE9IGdyb3VwTWVtYmVySURzLmxlbmd0aCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBWZWN0b3IgZXhpc3RpbmdHcm91cE1lbWJlcklEc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4aXN0aW5nR3JvdXBNZW1iZXJJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGV4aXN0aW5nR3JvdXBNZW1iZXJJRHNWZWN0b3IuYWRkKGV4aXN0aW5nR3JvdXBNZW1iZXJJRHNbaV0pOwotICAgIH0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVySURzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBpZiAoIWV4aXN0aW5nR3JvdXBNZW1iZXJJRHNWZWN0b3IucmVtb3ZlKGdyb3VwTWVtYmVySURzW2pdKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2V0RnJhZ21lbnRzT3JkZXIoZ3JvdXBNZW1iZXJJRHMpKSB7Ci0gICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElEXywgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1vdmVVcEdyb3VwTWVtYmVySUQoU3RyaW5nIGdyb3VwTWVtYmVySUQpIHsKLSAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSURfKTsKLSAgICBpZiAoZ3JvdXBNZW1iZXJJRC5lcXVhbHMoZ3JvdXBNZW1iZXJJRHNbMF0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgZ3JvdXBNZW1iZXJJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1tpXSkpIHsKLSAgICAgICAgZ3JvdXBNZW1iZXJJRHNbaV0gPSBncm91cE1lbWJlcklEc1tpIC0gMV07Ci0gICAgICAgIGdyb3VwTWVtYmVySURzW2kgLSAxXSA9IGdyb3VwTWVtYmVySUQ7Ci0gICAgICAgIGlmIChzZXRGcmFnbWVudHNPcmRlcihncm91cE1lbWJlcklEcykpIHsKLSAgICAgICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElEXywgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1vdmVEb3duR3JvdXBNZW1iZXJJRChTdHJpbmcgZ3JvdXBNZW1iZXJJRCkgewotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8pOwotICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1tncm91cE1lbWJlcklEcy5sZW5ndGggLSAxXSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlcklEcy5sZW5ndGggLSAxOyBpKyspIHsKLSAgICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1tpXSkpIHsKLSAgICAgICAgZ3JvdXBNZW1iZXJJRHNbaV0gPSBncm91cE1lbWJlcklEc1tpICsgMV07Ci0gICAgICAgIGdyb3VwTWVtYmVySURzW2kgKyAxXSA9IGdyb3VwTWVtYmVySUQ7Ci0gICAgICAgIGlmIChzZXRGcmFnbWVudHNPcmRlcihncm91cE1lbWJlcklEcykpIHsKLSAgICAgICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElEXywgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQWxsV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyNGUzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2FkZjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBDaG9pY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cEZyYWdtZW50IGltcGxlbWVudHMgSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgewotICBwcml2YXRlIFhTRFBhcnRpY2xlW10gY2hvaWNlc187Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGNob2ljZUluZGV4ZXNfOwotCi0gIHB1YmxpYyBYU0RHcm91cENob2ljZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gICAgY2hvaWNlc18gPSBudWxsOwotICAgIGNob2ljZUluZGV4ZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpOwotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gZ2V0R3JvdXBJRHMoKTsKLSAgICBjaG9pY2VJbmRleGVzXy5jbGVhcigpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFN0cmluZyBzZWxlY3RlZENob2ljZUZyYWdJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ3JvdXBJRHNbaV0pOwotICAgICAgaW50IGNob2ljZUluZGV4ID0gMDsKLSAgICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICBpZiAoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKS5lcXVhbHMoc2VsZWN0ZWRDaG9pY2VGcmFnSUQpKSB7Ci0gICAgICAgICAgY2hvaWNlSW5kZXggPSBqOwotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gKHBhcmFtc1ZhbGlkICYmIGNob2ljZUZyYWdzW2pdLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRDaG9pY2VJbmRleChncm91cElEc1tpXSwgY2hvaWNlSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICBjaG9pY2VJbmRleGVzXy5jbGVhcigpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIGlmIChpbnN0YW5jZURvY3VtZW50cyAhPSBudWxsKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBncm91cElEID0gY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZSgwKTsKLSAgICAgICAgSVhTREZyYWdtZW50W10gY2hvaWNlRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChjaG9pY2VGcmFnc1tqXS5nZXROYW1lKCkuZXF1YWxzKHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKSkpIHsKLSAgICAgICAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZXMgPSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKGluc3RhbmNlRG9jdW1lbnRzLCBpLCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCksIHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSk7Ci0gICAgICAgICAgICBpZiAoIWNob2ljZUZyYWdzW2pdLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlcykpCi0gICAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRDaG9pY2VJbmRleChncm91cElELCBqKTsKLSAgICAgICAgICAgIGlmIChjaGlsZEluc3RhbmNlcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICBpID0gaSArIGNoaWxkSW5zdGFuY2VzLmxlbmd0aCAtIDE7IC8vIG1pbnVzIDEgYmVjYXVzZSB0aGVyZSdzIGFuIGkrKyBpbiB0aGUgb3V0ZXIgZm9yIGxvb3AKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cywgaW50IHN0YXJ0LCBpbnQgbWluU2l6ZSwgaW50IG1heFNpemUpIHsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGluc3RhbmNlRG9jdW1lbnRzW3N0YXJ0XS5nZXRUYWdOYW1lKCk7Ci0gICAgaW50IHNpemUgPSAxOwotICAgIGZvciAoaW50IGkgPSBzdGFydCArIDE7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgICAgIHNpemUrKzsKLSAgICAgIGVsc2UKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChtYXhTaXplICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCAmJiBzaXplID4gbWF4U2l6ZSkgewotICAgICAgc2l6ZSA9IHNpemUgLSBtaW5TaXplOwotICAgICAgaWYgKHNpemUgPiBtYXhTaXplKQotICAgICAgICBzaXplID0gbWF4U2l6ZTsKLSAgICB9Ci0gICAgRWxlbWVudFtdIHN1YnNldCA9IG5ldyBFbGVtZW50W3NpemVdOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3Vic2V0Lmxlbmd0aDsgaisrKSB7Ci0gICAgICBzdWJzZXRbal0gPSBpbnN0YW5jZURvY3VtZW50c1tzdGFydCArIGpdOwotICAgIH0KLSAgICByZXR1cm4gc3Vic2V0OwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykgewotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBnZXRHcm91cElEcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotICAgICAgaW50IGNob2ljZUluZGV4ID0gZ2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRHNbaV0pOwotICAgICAgRWxlbWVudFtdIGNob2ljZUZyYWdJbnN0YW5jZXMgPSBjaG9pY2VGcmFnc1tjaG9pY2VJbmRleF0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFnSW5zdGFuY2VzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoY2hvaWNlRnJhZ0luc3RhbmNlc1tqXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5jb3B5SW50byhpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHVibGljIFhTRFBhcnRpY2xlW10gZ2V0Q2hvaWNlcygpIHsKLSAgICBpZiAoY2hvaWNlc18gPT0gbnVsbCkgewotICAgICAgRUxpc3QgcGFydGljbGVzID0gZ2V0WFNETW9kZWxHcm91cCgpLmdldFBhcnRpY2xlcygpOwotICAgICAgY2hvaWNlc18gPSBuZXcgWFNEUGFydGljbGVbcGFydGljbGVzLnNpemUoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNob2ljZXNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGNob2ljZXNfW2ldID0gKFhTRFBhcnRpY2xlKXBhcnRpY2xlcy5nZXQoaSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaG9pY2VzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZShpbnQgY2hvaWNlSW5kZXgpIHsKLSAgICBnZXRDaG9pY2VzKCk7Ci0gICAgaWYgKGNob2ljZUluZGV4IDwgMCB8fCBjaG9pY2VJbmRleCA+IGNob2ljZXNfLmxlbmd0aCAtIDEpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBTdHJpbmcgZ3JvdXBJRCA9IGNyZWF0ZUdyb3VwSW5zdGFuY2UoKTsKLSAgICBzZXRDaG9pY2VJbmRleChncm91cElELCBjaG9pY2VJbmRleCk7Ci0gICAgcmV0dXJuIGdyb3VwSUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkgewotICAgIHJldHVybiBjcmVhdGVHcm91cENob2ljZUluc3RhbmNlKDApOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRDaG9pY2VJbmRleChTdHJpbmcgZ3JvdXBJRCkgewotICAgIEludGVnZXIgaW5kZXggPSAoSW50ZWdlciljaG9pY2VJbmRleGVzXy5nZXQoZ3JvdXBJRCk7Ci0gICAgaWYgKGluZGV4ICE9IG51bGwpCi0gICAgICByZXR1cm4gaW5kZXguaW50VmFsdWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENob2ljZUluZGV4KFN0cmluZyBncm91cElELCBpbnQgY2hvaWNlSW5kZXgpIHsKLSAgICBjaG9pY2VJbmRleGVzXy5wdXQoZ3JvdXBJRCwgbmV3IEludGVnZXIoY2hvaWNlSW5kZXgpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gZ2V0R3JvdXBJRHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGludCBzZWxlY3Rpb25JbmRleCA9IGdldENob2ljZUluZGV4KGdyb3VwSURzW2ldKTsKLSAgICAgIGlmICghZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pW3NlbGVjdGlvbkluZGV4XS52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDBlMTRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNDEzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RXaWxkY2FyZDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNER3JvdXBGcmFnbWVudCBleHRlbmRzIFhTRE1hcEZyYWdtZW50IGltcGxlbWVudHMgSVhTREdyb3VwRnJhZ21lbnQgewotICBwcml2YXRlIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cF87Ci0gIHByaXZhdGUgVmVjdG9yIGdyb3VwSURzT3JkZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSBncm91cElEc187Ci0gIAotICBwdWJsaWMgWFNER3JvdXBGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICAgIHhzZE1vZGVsR3JvdXBfID0geHNkTW9kZWxHcm91cDsKLSAgICBncm91cElEc09yZGVyXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBncm91cElEc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBib29sZWFuIHZhbHVlc1ZhbGlkID0gdHJ1ZTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIFZlY3RvciBmcmFncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgZ3JvdXBJRHNPcmRlckNvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSGFzaHRhYmxlIGdyb3VwSURzQ29weSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgcGFyYW1zICE9IG51bGwgJiYgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKHBhcmFtc1tpXSAhPSBudWxsKSB7Ci0gICAgICAgIGdyb3VwSURzT3JkZXJDb3B5LmFkZChwYXJhbXNbaV0pOwotICAgICAgICBncm91cElEc0NvcHkucHV0KHBhcmFtc1tpXSwgZ2V0R3JvdXBNZW1iZXJJRHMocGFyYW1zW2ldKSk7Ci0gICAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMocGFyYW1zW2ldKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChncm91cE1lbWJlckZyYWdtZW50c1tqXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmcmFncy5hZGQoZ3JvdXBNZW1iZXJGcmFnbWVudHNbal0pOwotICAgICAgICAgICAgaWYgKCFncm91cE1lbWJlckZyYWdtZW50c1tqXS5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgICAgICAgIHZhbHVlc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdyb3VwSURzT3JkZXJfID0gZ3JvdXBJRHNPcmRlckNvcHk7Ci0gICAgZ3JvdXBJRHNfID0gZ3JvdXBJRHNDb3B5OwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGFkZEZyYWdtZW50cyhmcmFncyk7Ci0gICAgcmV0dXJuIHZhbHVlc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgU3RyaW5nIHByZXZHcm91cElEID0gbnVsbDsKLSAgICBTdHJpbmcgY3Vyckdyb3VwSUQgPSBudWxsOwotICAgIGludCBncm91cE1lbWJlckluZGV4ID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgKSB7Ci0gICAgICBpZiAoY3Vyckdyb3VwSUQgPT0gbnVsbCkgewotICAgICAgICBTdHJpbmcgbmV3R3JvdXBJRCA9IGNyZWF0ZUluc3RhbmNlKCk7Ci0gICAgICAgIHByZXZHcm91cElEID0gY3Vyckdyb3VwSUQ7Ci0gICAgICAgIGN1cnJHcm91cElEID0gbmV3R3JvdXBJRDsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnRbXSBpbnN0YW5jZVBhcnRpdGlvbiA9IG51bGw7Ci0gICAgICBpbnQgaiA9IGdyb3VwTWVtYmVySW5kZXg7Ci0gICAgICBib29sZWFuIHBhcmFtc0Fzc2lnbmVkID0gZmFsc2U7Ci0gICAgICBpbnQgd2lsZGNhcmRGcmFnSW5kZXggPSAtMTsKLSAgICAgIGRvIHsKLSAgICAgICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGN1cnJHcm91cElEKTsKLSAgICAgICAgWFNEQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IGdyb3VwTWVtYmVyRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgICAgaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFdpbGRjYXJkKSB7Ci0gICAgICAgICAgaWYgKHdpbGRjYXJkRnJhZ0luZGV4IDwgMCkKLSAgICAgICAgICAgIHdpbGRjYXJkRnJhZ0luZGV4ID0gajsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChncm91cE1lbWJlckZyYWdzW2pdLmdldE5hbWUoKS5lcXVhbHModHJpbVByZWZpeChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkpKSkgewotICAgICAgICAgIGluc3RhbmNlUGFydGl0aW9uID0gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihpbnN0YW5jZURvY3VtZW50cywgaSwgZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldE1heE9jY3VycygpKTsKLSAgICAgICAgICBpZiAoIWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlUGFydGl0aW9uKSkKLSAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgcGFyYW1zQXNzaWduZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoZ3JvdXBNZW1iZXJGcmFnc1tqXSBpbnN0YW5jZW9mIFhTREdyb3VwRnJhZ21lbnQpIHsKLSAgICAgICAgCWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGogPT0gZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGggLSAxKSB7Ci0gICAgICAgICAgaiA9IDA7Ci0gICAgICAgICAgU3RyaW5nIG5ld0dyb3VwSUQ7Ci0gICAgICAgICAgaWYgKCFwYXJhbXNBc3NpZ25lZCkKLSAgICAgICAgICAgIG5ld0dyb3VwSUQgPSBjcmVhdGVJbnN0YW5jZSgpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld0dyb3VwSUQgPSBudWxsOwotICAgICAgICAgIHByZXZHcm91cElEID0gY3Vyckdyb3VwSUQ7Ci0gICAgICAgICAgY3Vyckdyb3VwSUQgPSBuZXdHcm91cElEOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBqKys7Ci0gICAgICB9IHdoaWxlICghcGFyYW1zQXNzaWduZWQgJiYgaiAhPSBncm91cE1lbWJlckluZGV4KTsKLSAgICAgIGdyb3VwTWVtYmVySW5kZXggPSBqOwotICAgICAgaWYgKCFwYXJhbXNBc3NpZ25lZCkgewotICAgICAgICBpbnN0YW5jZVBhcnRpdGlvbiA9IGdldEluc3RhbmNlRG9jdW1lbnRQYXJ0aXRpb24oaW5zdGFuY2VEb2N1bWVudHMsIGksIEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCk7Ci0gICAgICAgIGlmICh3aWxkY2FyZEZyYWdJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgaWYgKHdpbGRjYXJkRnJhZ0luZGV4ID49IGdyb3VwTWVtYmVySW5kZXgpIHsKLSAgICAgICAgICAgIHJlbW92ZUdyb3VwSUQoY3Vyckdyb3VwSUQpOwotICAgICAgICAgICAgY3Vyckdyb3VwSUQgPSBwcmV2R3JvdXBJRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3JvdXBNZW1iZXJJbmRleCA9IHdpbGRjYXJkRnJhZ0luZGV4OwotICAgICAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhjdXJyR3JvdXBJRCk7Ci0gICAgICAgICAgaWYgKCFncm91cE1lbWJlckZyYWdzW3dpbGRjYXJkRnJhZ0luZGV4XS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VQYXJ0aXRpb24pKQotICAgICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBwYXJhbXNBc3NpZ25lZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY3Vyckdyb3VwSUQgIT0gbnVsbCAmJiAocHJldkdyb3VwSUQgPT0gbnVsbCB8fCAhY3Vyckdyb3VwSUQuZXF1YWxzKHByZXZHcm91cElEKSkpIHsKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIHJlbW92ZUdyb3VwSUQoY3Vyckdyb3VwSUQpOwotICAgICAgICAgIGN1cnJHcm91cElEID0gcHJldkdyb3VwSUQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGkgPSBpICsgaW5zdGFuY2VQYXJ0aXRpb24ubGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cywgaW50IHN0YXJ0LCBpbnQgbWF4U2l6ZSkgewotICAgIFN0cmluZyB0YWdOYW1lID0gaW5zdGFuY2VEb2N1bWVudHNbc3RhcnRdLmdldFRhZ05hbWUoKTsKLSAgICBpbnQgc2l6ZSA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0ICsgMTsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAobWF4U2l6ZSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgJiYgc2l6ZSA+PSBtYXhTaXplKQotICAgICAgICBicmVhazsKLSAgICAgIGVsc2UgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgICAgIHNpemUrKzsKLSAgICAgIGVsc2UKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBzdWJzZXQgPSBuZXcgRWxlbWVudFtzaXplXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1YnNldC5sZW5ndGg7IGorKykgewotICAgICAgc3Vic2V0W2pdID0gaW5zdGFuY2VEb2N1bWVudHNbc3RhcnQgKyBqXTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1YnNldDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmcmFnbWVudEluc3RhbmNlcy5sZW5ndGg7IGorKykgewotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGsrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNba10gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGspOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHhzZE1vZGVsR3JvdXBfID0geHNkTW9kZWxHcm91cDsKLSAgfQotCi0gIHB1YmxpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoKSB7Ci0gICAgcmV0dXJuIHhzZE1vZGVsR3JvdXBfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEdyb3VwSURzKCkgewotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gbmV3IFN0cmluZ1tncm91cElEc09yZGVyXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGdyb3VwSURzW2ldID0gKFN0cmluZylncm91cElEc09yZGVyXy5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBncm91cElEczsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUdyb3VwSURzKCkgewotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGdyb3VwSURzT3JkZXJfLmNsZWFyKCk7Ci0gICAgZ3JvdXBJRHNfLmNsZWFyKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVHcm91cElEKFN0cmluZyBncm91cElEKSB7Ci0gICAgU3RyaW5nW10gbWVtYmVyRnJhZ0lEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSUQpOwotICAgIHJlbW92ZUZyYWdtZW50cyhtZW1iZXJGcmFnSURzKTsKLSAgICBncm91cElEc09yZGVyXy5yZW1vdmUoZ3JvdXBJRCk7Ci0gICAgZ3JvdXBJRHNfLnJlbW92ZShncm91cElEKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHNldEdyb3VwTWVtYmVySURzKFN0cmluZyBncm91cElELCBTdHJpbmdbXSBncm91cE1lbWJlcklEcykgewotICAgIGlmIChncm91cElEICE9IG51bGwpIHsKLSAgICAgIGlmICghZ3JvdXBJRHNPcmRlcl8uY29udGFpbnMoZ3JvdXBJRCkpCi0gICAgICAgIGdyb3VwSURzT3JkZXJfLmFkZChncm91cElEKTsKLSAgICAgIGlmIChncm91cE1lbWJlcklEcyAhPSBudWxsKQotICAgICAgICBncm91cElEc18ucHV0KGdyb3VwSUQsIGdyb3VwTWVtYmVySURzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ3JvdXBJRHNfLnB1dChncm91cElELCBuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBzZXRHcm91cE1lbWJlckZyYWdtZW50cyhTdHJpbmcgZ3JvdXBJRCwgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMpIHsKLSAgICBhZGRGcmFnbWVudHMoZ3JvdXBNZW1iZXJGcmFnbWVudHMpOwotICAgIFN0cmluZ1tdIGlkcyA9IG5ldyBTdHJpbmdbZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewotICAgICAgaWRzW2ldID0gZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2V0SUQoKTsKLSAgICB9Ci0gICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCwgaWRzKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRHcm91cE1lbWJlcklEcyhTdHJpbmcgZ3JvdXBJRCkgewotICAgIGlmIChncm91cElEICE9IG51bGwpIHsKLSAgICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gKFN0cmluZ1tdKWdyb3VwSURzXy5nZXQoZ3JvdXBJRCk7Ci0gICAgICBpZiAoZ3JvdXBNZW1iZXJJRHMgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGdyb3VwTWVtYmVySURzOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhTdHJpbmcgZ3JvdXBJRCkgewotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCk7Ci0gICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBuZXcgSVhTREZyYWdtZW50W2dyb3VwTWVtYmVySURzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0gPSBnZXRGcmFnbWVudChncm91cE1lbWJlcklEc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBncm91cE1lbWJlckZyYWdtZW50czsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlR3JvdXBJbnN0YW5jZSgpIHsKLSAgICBTdHJpbmcgZ3JvdXBJRCA9IGdlbklEKCk7Ci0gICAgRUxpc3QgcGFydGljbGVzID0gZ2V0WFNETW9kZWxHcm91cCgpLmdldFBhcnRpY2xlcygpOwotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gbmV3IFN0cmluZ1twYXJ0aWNsZXMuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpY2xlcy5zaXplKCk7IGkrKykgewotICAgICAgWFNEUGFydGljbGUgeHNkUGFydGljbGUgPSAoWFNEUGFydGljbGUpcGFydGljbGVzLmdldChpKTsKLSAgICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQgPSB4c2RQYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRENvbXBvbmVudCkKLSAgICAgICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudCgoWFNEQ29tcG9uZW50KXhzZFBhcnRpY2xlQ29udGVudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQobnVsbCk7Ci0gICAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgZ3JvdXBNZW1iZXJJRHNbaV0gPSBnZW5JRCgpOwotICAgICAgYWRkRnJhZ21lbnQoZ3JvdXBNZW1iZXJJRHNbaV0sIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLCBncm91cE1lbWJlcklEc1tpXSwgZ3JvdXBNZW1iZXJJRHNbaV0pKTsKLSAgICB9Ci0gICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCwgZ3JvdXBNZW1iZXJJRHMpOwotICAgIHJldHVybiBncm91cElEOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMDc5ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwU2VxRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwU2VxRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5YjY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RHcm91cFNlcUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNER3JvdXBTZXFGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNER3JvdXBTZXFGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RHcm91cFNlcUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUdyb3VwSW5zdGFuY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyZDk3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBYU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwU2VxUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RNYXBGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNETWFwRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMzYTA4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RNYXBGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNETWFwRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RNYXBGcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IGltcGxlbWVudHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBWZWN0b3IgZnJhZ21lbnRzT3JkZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSBmcmFnbWVudHNfOwotICBwcml2YXRlIEhhc2h0YWJsZSBhdHRyaWJ1dGVGcmFnbWVudHNfOwotCi0gIHB1YmxpYyBYU0RNYXBGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgZnJhZ21lbnRzT3JkZXJfID0gbmV3IFZlY3RvcigpOwotICAgIGZyYWdtZW50c18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIGJvb2xlYW4gdmFsdWVzVmFsaWQgPSB0cnVlOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgVmVjdG9yIGZyYWdzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciBhdHRmcmFncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXJhbXNbaV0gIT0gbnVsbCkgewotICAgICAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1zW2ldKTsKLSAgICAgICAgICBpZiAoZnJhZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmcmFncy5hZGQoZnJhZyk7Ci0gICAgICAgICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICAgICAgICB2YWx1ZXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50IGFmcmFnID0gZ2V0QXR0cmlidXRlRnJhZ21lbnQocGFyYW1zW2ldKTsKLSAgICAgICAgICAJaWYgKGFmcmFnICE9IG51bGwpIHsKLSAgICAgICAgICAJICBhdHRmcmFncy5hZGQoYWZyYWcpOwotICAgICAgICAgICAgICBpZiAoIWFmcmFnLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgICAgICAgICAgdmFsdWVzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gIAotICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICAJCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgYWRkQXR0cmlidXRlRnJhZ21lbnRzKGF0dGZyYWdzKTsKLSAgICBhZGRGcmFnbWVudHMoZnJhZ3MpOwotICAgIHJldHVybiB2YWx1ZXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1LZXkpOwotICAgIGlmIChmcmFnICE9IG51bGwpCi0gICAgICBmcmFnLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgcmV0dXJuIChmcmFnICE9IG51bGwpID8gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIWZyYWdtZW50c1tpXS52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgcmV0dXJuIChmcmFnICE9IG51bGwpID8gZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSkgOiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgcmV0dXJuIChmcmFnICE9IG51bGwpID8gZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KSA6IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXzsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50KFN0cmluZyBpZCwgSVhTREZyYWdtZW50IGZyYWcpIHsKLSAgICBhZGRGcmFnbWVudChpZCwgZnJhZywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoU3RyaW5nW10gaWQsIElYU0RGcmFnbWVudFtdIGZyYWdzKSB7Ci0gICAgYWRkRnJhZ21lbnRzKGlkLCBmcmFncywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudChJWFNERnJhZ21lbnQgZnJhZykgewotICAgIGFkZEZyYWdtZW50KGZyYWcsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKElYU0RGcmFnbWVudFtdIGZyYWdzKSB7Ci0gICAgYWRkRnJhZ21lbnRzKGZyYWdzLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhWZWN0b3IgZnJhZ3MpIHsKLSAgICBhZGRGcmFnbWVudHMoZnJhZ3MsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnQoU3RyaW5nIGlkLCBJWFNERnJhZ21lbnQgZnJhZywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBmcmFnbWVudHNPcmRlcl8uYWRkKGlkKTsKLSAgICBmcmFnbWVudHNfLnB1dChpZCwgZnJhZyk7Ci0gICAgY29udHJvbGxlcl8uYWRkVG9DYWNoZShpZCwgZnJhZyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZUZyYWdtZW50KFN0cmluZyBpZCwgSVhTREZyYWdtZW50IGZyYWcpIHsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudHNfLnB1dChpZCwgZnJhZyk7Ci0gICAgY29udHJvbGxlcl8uYWRkVG9DYWNoZShpZCwgZnJhZyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKSB7Ci0gICAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gZnJhZ21lbnRzID0gbmV3IFhTREF0dHJpYnV0ZUZyYWdtZW50W2F0dHJpYnV0ZUZyYWdtZW50c18uc2l6ZSgpXTsKLSAgICBJdGVyYXRvciBpdCA9IGF0dHJpYnV0ZUZyYWdtZW50c18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUoaXQuaGFzTmV4dCgpKXsKLSAgICAgIGZyYWdtZW50c1tpXSA9IChJWFNEQXR0cmlidXRlRnJhZ21lbnQpaXQubmV4dCgpOwotICAgICAgaSsrOyAKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50czsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKFN0cmluZ1tdIGlkLCBJWFNERnJhZ21lbnRbXSBmcmFncywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkLmxlbmd0aCAmJiBpIDwgZnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFkZEZyYWdtZW50KGlkW2ldLCBmcmFnc1tpXSwgYWRkVG9Db250cm9sbGVyKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudChJWFNERnJhZ21lbnQgZnJhZywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBhZGRGcmFnbWVudChmcmFnLmdldElEKCksIGZyYWcsIGFkZFRvQ29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoSVhTREZyYWdtZW50W10gZnJhZ3MsIGJvb2xlYW4gYWRkVG9Db250cm9sbGVyKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFncy5sZW5ndGg7IGkrKykgewotICAgICAgYWRkRnJhZ21lbnQoZnJhZ3NbaV0uZ2V0SUQoKSwgZnJhZ3NbaV0sIGFkZFRvQ29udHJvbGxlcik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKFZlY3RvciBmcmFncywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBJdGVyYXRvciBpdCA9IGZyYWdzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgT2JqZWN0IG9iaiA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJWFNERnJhZ21lbnQpIHsKLSAgICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KW9iajsKLSAgICAgICAgYWRkRnJhZ21lbnQoZnJhZy5nZXRJRCgpLCBmcmFnLCBhZGRUb0NvbnRyb2xsZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZUZyYWdtZW50cyhWZWN0b3IgZnJhZ3MpIHsKLSAgICBJdGVyYXRvciBpdCA9IGZyYWdzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgT2JqZWN0IG9iaiA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJWFNEQXR0cmlidXRlRnJhZ21lbnQpIHsKLSAgICAgICAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGZyYWcgPSAoSVhTREF0dHJpYnV0ZUZyYWdtZW50KW9iajsKLSAgICAgICAgYWRkQXR0cmlidXRlRnJhZ21lbnQoZnJhZy5nZXRJRCgpLCBmcmFnKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRGcmFnbWVudHNPcmRlcigpIHsKLSAgICBTdHJpbmdbXSBmcmFnbWVudHNPcmRlciA9IG5ldyBTdHJpbmdbZnJhZ21lbnRzT3JkZXJfLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHNPcmRlci5sZW5ndGg7IGkrKykgewotICAgICAgZnJhZ21lbnRzT3JkZXJbaV0gPSAoU3RyaW5nKWZyYWdtZW50c09yZGVyXy5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBmcmFnbWVudHNPcmRlcjsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHNldEZyYWdtZW50c09yZGVyKFN0cmluZ1tdIGZyYWdtZW50c09yZGVyKSB7Ci0gICAgaWYgKGZyYWdtZW50c09yZGVyLmxlbmd0aCAhPSBmcmFnbWVudHNPcmRlcl8uc2l6ZSgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3RvciBmcmFnbWVudHNPcmRlckNvcHkgPSBuZXcgVmVjdG9yKGZyYWdtZW50c09yZGVyXyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHNPcmRlci5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFmcmFnbWVudHNPcmRlckNvcHkucmVtb3ZlKGZyYWdtZW50c09yZGVyW2ldKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmcmFnbWVudHNPcmRlcl8uY2xlYXIoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGZyYWdtZW50c09yZGVyLmxlbmd0aDsgaisrKSB7Ci0gICAgICBmcmFnbWVudHNPcmRlcl8uYWRkKGZyYWdtZW50c09yZGVyW2pdKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGdldEF0dHJpYnV0ZUZyYWdtZW50KFN0cmluZyBpZCkgewotICAgIHJldHVybiAoSVhTREF0dHJpYnV0ZUZyYWdtZW50KWF0dHJpYnV0ZUZyYWdtZW50c18uZ2V0KGlkKTsKLSAgfQotICAKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKElYU0RGcmFnbWVudClmcmFnbWVudHNfLmdldChpZCk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0RnJhZ21lbnRzKFN0cmluZ1tdIGlkcykgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdzID0gbmV3IElYU0RGcmFnbWVudFtpZHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBmcmFnc1tpXSA9IGdldEZyYWdtZW50KGlkc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBmcmFnczsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRBbGxGcmFnbWVudHMoKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gbmV3IElYU0RGcmFnbWVudFtmcmFnbWVudHNPcmRlcl8uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50c09yZGVyXy5zaXplKCk7IGkrKykgewotICAgICAgZnJhZ21lbnRzW2ldID0gZ2V0RnJhZ21lbnQoKFN0cmluZylmcmFnbWVudHNPcmRlcl8uZ2V0KGkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50czsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50KFN0cmluZyBpZCkgewotICAgIHJlbW92ZUZyYWdtZW50KGlkLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50cyhTdHJpbmdbXSBpZHMpIHsKLSAgICByZW1vdmVGcmFnbWVudHMoaWRzLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUFsbEZyYWdtZW50cygpIHsKLSAgICByZW1vdmVBbGxGcmFnbWVudHModHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVGcmFnbWVudChTdHJpbmcgaWQsIGJvb2xlYW4gcmVtb3ZlRnJvbUNvbnRyb2xsZXIpIHsKLSAgICBmcmFnbWVudHNPcmRlcl8ucmVtb3ZlKGlkKTsKLSAgICBmcmFnbWVudHNfLnJlbW92ZShpZCk7Ci0gICAgaWYgKHJlbW92ZUZyb21Db250cm9sbGVyKQotICAgICAgY29udHJvbGxlcl8ucmVtb3ZlRnJvbUNhY2hlKGlkKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50cyhTdHJpbmdbXSBpZHMsIGJvb2xlYW4gcmVtb3ZlRnJvbUNvbnRyb2xsZXIpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewotICAgICAgcmVtb3ZlRnJhZ21lbnQoaWRzW2ldLCByZW1vdmVGcm9tQ29udHJvbGxlcik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlQWxsRnJhZ21lbnRzKGJvb2xlYW4gcmVtb3ZlRnJvbUNvbnRyb2xsZXIpIHsKLSAgICBpZiAocmVtb3ZlRnJvbUNvbnRyb2xsZXIpCi0gICAgewotICAgICAgRW51bWVyYXRpb24gaWRzID0gZnJhZ21lbnRzXy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoaWRzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKWlkcy5uZXh0RWxlbWVudCgpOwotICAgICAgICBjb250cm9sbGVyXy5yZW1vdmVGcm9tQ2FjaGUoaWQpOwotICAgICAgfQotICAgIH0KLSAgICBmcmFnbWVudHNPcmRlcl8uY2xlYXIoKTsKLSAgICBmcmFnbWVudHNfLmNsZWFyKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpIHsKLSAgICAgIEVudW1lcmF0aW9uIGlkcyA9IGF0dHJpYnV0ZUZyYWdtZW50c18ua2V5cygpOwotICAgICAgd2hpbGUgKGlkcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZylpZHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgY29udHJvbGxlcl8ucmVtb3ZlRnJvbUNhY2hlKGlkKTsKLSAgICAgIH0KLSAgICAKLSAgICAgIGF0dHJpYnV0ZUZyYWdtZW50c18uY2xlYXIoKTsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NzljNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudCB7Ci0gIHByaXZhdGUgaW50IGNhbGVuZGFyVHlwZV87Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgaW50IGNhbGVuZGFyVHlwZSkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIGNhbGVuZGFyVHlwZV8gPSBjYWxlbmRhclR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICBTdHJpbmdCdWZmZXIgZnJhZ21lbnRMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhXRnJhZ21lbnRKU1AuanNwPyIpOwotICAgIGZyYWdtZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZChjYWxlbmRhclR5cGVfKTsKLSAgICByZXR1cm4gZnJhZ21lbnRMaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3Y2UyMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudCB7Ci0gIHByaXZhdGUgaW50IGNhbGVuZGFyVHlwZV87Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBpbnQgY2FsZW5kYXJUeXBlKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgY2FsZW5kYXJUeXBlXyA9IGNhbGVuZGFyVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICBTdHJpbmdCdWZmZXIgZnJhZ21lbnRMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZVdGcmFnbWVudEpTUC5qc3A/Iik7Ci0gICAgZnJhZ21lbnRMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhbGVuZGFyVHlwZV8pOwotICAgIHJldHVybiBmcmFnbWVudExpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhM2U5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIEVMaXN0IGVsaXN0KSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgZWxpc3QpOwotICB9Ci0gIAotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgT3B0aW9uVmVjdG9yIHYpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCB2KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1GaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlOWU4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbnVtZXJhdGlvbkZhY2V0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwcml2YXRlIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3JfOwotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgRUxpc3QgZWxpc3QpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBvcHRpb25WZWN0b3JfID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPGVsaXN0LnNpemUoKTtpKyspCi0gICAgewotICAgICAgU3RyaW5nIGVudW1WYWx1ZSA9ICgoWFNERW51bWVyYXRpb25GYWNldCllbGlzdC5nZXQoaSkpLmdldExleGljYWxWYWx1ZSgpOwotICAgICAgb3B0aW9uVmVjdG9yXy5hZGRPcHRpb24oZW51bVZhbHVlLGVudW1WYWx1ZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgT3B0aW9uVmVjdG9yIHYpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBvcHRpb25WZWN0b3JfID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPHYuc2l6ZSgpO2krKykKLSAgICAgIG9wdGlvblZlY3Rvcl8uYWRkT3B0aW9uKHYuZ2V0RGlzcGxheVZhbHVlKGkpLHYuZ2V0VmFsdWUoaSkpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgT3B0aW9uVmVjdG9yIGdldE9wdGlvblZlY3RvcigpCi0gIHsKLSAgICByZXR1cm4gb3B0aW9uVmVjdG9yXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZTU4ZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBFTGlzdCBlbGlzdCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGVsaXN0KTsKLSAgfQotICAKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgT3B0aW9uVmVjdG9yIHYpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCB2KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI4NTY4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYTQxMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0gICAgaWYgKHBhcmFtICE9IG51bGwgJiYgISgoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKSkuaXNWYWxpZExpdGVyYWwocGFyYW0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NzU4MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEzMzY2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVMaXN0RnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjNjY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTcgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUxpc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETGVuZ3RoRmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1heExlbmd0aEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNaW5MZW5ndGhGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEU2ltcGxlTGlzdEZyYWdtZW50IGV4dGVuZHMgWFNETWFwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEU2ltcGxlTGlzdEZyYWdtZW50Ci17Ci0gIHB1YmxpYyBYU0RTaW1wbGVMaXN0RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIuc2V0TmFtZShuYW1lKTsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBmcmFnbWVudHNbaV0uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aF07Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBhcmFtc1tpXSA9ICIiOwotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKTsKLSAgICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuVEVYVF9OT0RFKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNbaV0gPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlTGlzdEluc3RhbmNlKCkpOwotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihwYXJhbXNbaV0udHJpbSgpKTsKLSAgICAgIFN0cmluZ1tdIGNoaWxkUGFyYW1zID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRQYXJhbXMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGNoaWxkUGFyYW1zW2pdID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgICBjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzKGNoaWxkRnJhZy5nZXRJRCgpLCBjaGlsZFBhcmFtcyk7Ci0gICAgICBwYXJhbXNWYWxpZCA9IHBhcmFtc1ZhbGlkICYmIGNoaWxkRnJhZy52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbZnJhZ21lbnRzLmxlbmd0aF07Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICBTdHJpbmdCdWZmZXIgbGlzdFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1zID0gZnJhZ21lbnRzW2ldLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnbWVudHNbaV0uZ2V0SUQoKSk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgcGFyYW1zICE9IG51bGwgJiYgaiA8IHBhcmFtcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGogIT0gMCkKLSAgICAgICAgICBsaXN0VmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkxJU1RfU0VQRVJBVE9SKTsKLSAgICAgICAgbGlzdFZhbHVlLmFwcGVuZChwYXJhbXNbal0pOwotICAgICAgfQotICAgICAgTm9kZSB0ZXh0Tm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShsaXN0VmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIChnZW5YU0lUeXBlID8gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpIDogaW5zdGFuY2VEb2N1bWVudHMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVMaXN0SW5zdGFuY2UoKQotICB7Ci0gICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgaW50IG1pbiA9IDA7Ci0gICAgaW50IG1heCA9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRDsKLSAgICBYU0RMZW5ndGhGYWNldCB4c2RMZW5ndGhGYWNldCA9IHNpbXBsZVR5cGUuZ2V0TGVuZ3RoRmFjZXQoKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmICh4c2RMZW5ndGhGYWNldCAhPSBudWxsKQotICAgIHsKLSAgICAgIG1pbiA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBtYXggPSB4c2RMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgWFNETWluTGVuZ3RoRmFjZXQgeHNkTWluTGVuZ3RoRmFjZXQgPSBzaW1wbGVUeXBlLmdldE1pbkxlbmd0aEZhY2V0KCk7Ci0gICAgICBYU0RNYXhMZW5ndGhGYWNldCB4c2RNYXhMZW5ndGhGYWNldCA9IHNpbXBsZVR5cGUuZ2V0TWF4TGVuZ3RoRmFjZXQoKTsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkTWluTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgICAgbWluID0geHNkTWluTGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIGlmICh4c2RNYXhMZW5ndGhGYWNldCAhPSBudWxsKQotICAgICAgICBtYXggPSB4c2RNYXhMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIH0KLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KHNpbXBsZVR5cGUuZ2V0SXRlbVR5cGVEZWZpbml0aW9uKCkpOwotICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICB4c2RDb25maWcuc2V0TWluT2NjdXJzKG1pbik7Ci0gICAgeHNkQ29uZmlnLnNldE1heE9jY3VycyhtYXgpOwotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIG5ld0lELCBnZXROYW1lKCkpOwotICAgIGZyYWcuc2V0SUQobmV3SUQpOwotICAgIGZyYWcuc2V0TmFtZShnZXROYW1lKCkpOwotICAgIGFkZEZyYWdtZW50KG5ld0lELCBmcmFnKTsKLSAgICByZXR1cm4gbmV3SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVMaXN0SW5zdGFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxODU4NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUxpc3RGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzJjOTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlVW5pb25GcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmZjODE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RTaW1wbGVVbmlvbkZyYWdtZW50IGV4dGVuZHMgWFNETWFwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEU2ltcGxlVW5pb25GcmFnbWVudCB7Ci0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBtZW1iZXJUeXBlc187Ci0KLSAgcHVibGljIFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gICAgbWVtYmVyVHlwZXNfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICBzdXBlci5zZXROYW1lKG5hbWUpOwotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBmcmFnbWVudHNbaV0uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGludCBudW1UeXBlcyA9IGdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpLmxlbmd0aDsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgVmVjdG9yIG1lbWJlckZyYWdtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNvbXBhdGlibGVGcmFnID0gbnVsbDsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtVHlwZXM7IGorKykgewotICAgICAgICBJWFNERnJhZ21lbnQgbWVtYmVyRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZVVuaW9uSW5zdGFuY2UoaikpOwotICAgICAgICBFbGVtZW50W10gbWVtYmVySW5zdGFuY2VEb2N1bWVudCA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgICBtZW1iZXJJbnN0YW5jZURvY3VtZW50WzBdID0gc2V0RWxlbWVudFRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldLCBtZW1iZXJGcmFnLmdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChtZW1iZXJGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhtZW1iZXJJbnN0YW5jZURvY3VtZW50KSkgewotICAgICAgICAgIGlmIChtZW1iZXJGcmFnLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGVGcmFnID0gbWVtYmVyRnJhZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChjb21wYXRpYmxlRnJhZyA9PSBudWxsKQotICAgICAgICAgICAgY29tcGF0aWJsZUZyYWcgPSBtZW1iZXJGcmFnOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoY29tcGF0aWJsZUZyYWcgIT0gbnVsbCkKLSAgICAgICAgbWVtYmVyRnJhZ21lbnRzLmFkZChjb21wYXRpYmxlRnJhZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGFkZEZyYWdtZW50cyhtZW1iZXJGcmFnbWVudHMpOwotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZXMgPSBmcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aCA+IDApCi0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoZnJhZ21lbnRJbnN0YW5jZXNbMF0pOwotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRzQ29weS5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKSk7Ci0gIH0KLQotICBwdWJsaWMgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBnZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKSB7Ci0gICAgaWYgKG1lbWJlclR5cGVzXyA9PSBudWxsKSB7Ci0gICAgICBFTGlzdCBtZW1iZXJUeXBlcyA9ICgoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKSkuZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCk7Ci0gICAgICBtZW1iZXJUeXBlc18gPSBuZXcgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bbWVtYmVyVHlwZXMuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVyVHlwZXNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIG1lbWJlclR5cGVzX1tpXSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiltZW1iZXJUeXBlcy5nZXQoaSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtZW1iZXJUeXBlc187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZVVuaW9uSW5zdGFuY2UoaW50IG1lbWJlclR5cGVJbmRleCkgewotICAgIGdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICAgIGlmIChtZW1iZXJUeXBlSW5kZXggPCAwIHx8IG1lbWJlclR5cGVJbmRleCA+IG1lbWJlclR5cGVzXy5sZW5ndGggLSAxKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KG1lbWJlclR5cGVzX1ttZW1iZXJUeXBlSW5kZXhdKTsKLSAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgbmV3SUQsIGdldE5hbWUoKSk7Ci0gICAgZnJhZy5zZXRJRChuZXdJRCk7Ci0gICAgZnJhZy5zZXROYW1lKGdldE5hbWUoKSk7Ci0gICAgYWRkRnJhZ21lbnQobmV3SUQsIGZyYWcpOwotICAgIHJldHVybiBuZXdJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZVVuaW9uSW5zdGFuY2UoMCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4NGI2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVVbmlvbkZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvSFRUUFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL0hUVFBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjVjOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvSFRUUFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RTaW1wbGVMaXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEhUVFBVdGlsCi17Ci0gIHByaXZhdGUgSFRUUFV0aWwoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZW5VUkxFbmNvZGVkUGFyYW1ldGVycyhJWFNERnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBpZiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBJWFNEU2ltcGxlTGlzdEZyYWdtZW50KQotICAgICAgcmV0dXJuIGdlblVSTEVuY29kZWRQYXJhbXNGcm9tTGlzdEZyYWdtZW50KChJWFNEU2ltcGxlTGlzdEZyYWdtZW50KWZyYWdtZW50KTsKLSAgICBlbHNlIGlmIChmcmFnbWVudCBpbnN0YW5jZW9mIElYU0RTaW1wbGVBdG9taWNGcmFnbWVudCkKLSAgICAgIHJldHVybiBnZW5VUkxFbmNvZGVkUGFyYW1zRnJvbUF0b21pY0ZyYWdtZW50KChJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQpZnJhZ21lbnQpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZW5VUkxFbmNvZGVkWE1MUGFyYW1ldGVycyhmcmFnbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2VuVVJMRW5jb2RlZFBhcmFtc0Zyb21BdG9taWNGcmFnbWVudChJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdXJsRW5jb2RlZFBhcmFtID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGZyYWdtZW50LmdldFBhcmFtZXRlclZhbHVlcyhmcmFnbWVudC5nZXRJRCgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShmcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIj0iKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKHBhcmFtc1tpXSkpOwotICAgICAgaWYgKGkgPCBwYXJhbXMubGVuZ3RoIC0gMSkKLSAgICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiJiIpOwotICAgIH0KLSAgICByZXR1cm4gdXJsRW5jb2RlZFBhcmFtLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2VuVVJMRW5jb2RlZFBhcmFtc0Zyb21MaXN0RnJhZ21lbnQoSVhTRFNpbXBsZUxpc3RGcmFnbWVudCBmcmFnbWVudCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciB1cmxFbmNvZGVkUGFyYW0gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWdtZW50LmdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShmcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIj0iKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtcyA9IGNoaWxkRnJhZ3NbaV0uZ2V0UGFyYW1ldGVyVmFsdWVzKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSk7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1CdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhcmFtcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1CdWZmZXIuYXBwZW5kKHBhcmFtc1tqXSk7Ci0gICAgICAgIGlmIChqIDwgcGFyYW1zLmxlbmd0aCAtIDEpCi0gICAgICAgICAgcGFyYW1CdWZmZXIuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkxJU1RfU0VQRVJBVE9SKTsKLSAgICAgIH0KLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKHBhcmFtQnVmZmVyLnRvU3RyaW5nKCkpKTsKLSAgICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGggLSAxKQotICAgICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCImIik7Ci0gICAgfQotICAgIHJldHVybiB1cmxFbmNvZGVkUGFyYW0udG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZW5VUkxFbmNvZGVkWE1MUGFyYW1ldGVycyhJWFNERnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdXJsRW5jb2RlZFBhcmFtID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WLCBDb25zdGFudHMuTlNfUFJFRklYX1NPQVBfRU5WKTsKLSAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0ksIENvbnN0YW50cy5OU19QUkVGSVhfU0NIRU1BX1hTSSk7Ci0gICAgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNELCBDb25zdGFudHMuTlNfUFJFRklYX1NDSEVNQV9YU0QpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzBdOwotICAgIHRyeQotICAgIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZ21lbnQuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKHRydWUsIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLSAgICB7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUoZnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCI9Iik7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShYTUxVdGlscy5zZXJpYWxpemUoaW5zdGFuY2VEb2N1bWVudHNbaV0sIHRydWUpKSk7Ci0gICAgICBpZiAoaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aCAtIDEpCi0gICAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIiYiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybEVuY29kZWRQYXJhbS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9PcHRpb25WZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL09wdGlvblZlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2FlNWIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL09wdGlvblZlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgT3B0aW9uVmVjdG9yCi17Ci0gIHByaXZhdGUgVmVjdG9yIG9wdGlvbnNfOwotICAKLSAgcHVibGljIE9wdGlvblZlY3RvcigpCi0gIHsKLSAgICBvcHRpb25zXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkT3B0aW9uKFN0cmluZyBkaXNwbGF5VmFsdWUsU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgb3B0aW9uc18uYWRkRWxlbWVudChuZXcgT3B0aW9uKGRpc3BsYXlWYWx1ZSx2YWx1ZSkpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlWYWx1ZShpbnQgcG9zaXRpb24pCi0gIHsKLSAgICBPcHRpb24gb3B0aW9uID0gKE9wdGlvbilvcHRpb25zXy5lbGVtZW50QXQocG9zaXRpb24pOwotICAgIHJldHVybiBvcHRpb24uZ2V0RGlzcGxheVZhbHVlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoaW50IHBvc2l0aW9uKQotICB7Ci0gICAgT3B0aW9uIG9wdGlvbiA9IChPcHRpb24pb3B0aW9uc18uZWxlbWVudEF0KHBvc2l0aW9uKTsKLSAgICByZXR1cm4gb3B0aW9uLmdldFZhbHVlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgc2l6ZSgpCi0gIHsKLSAgICByZXR1cm4gb3B0aW9uc18uc2l6ZSgpOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIGNsYXNzIE9wdGlvbgotICB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGlzcGxheVZhbHVlXzsKLSAgICBwcml2YXRlIFN0cmluZyB2YWx1ZV87Ci0gICAgcHVibGljIE9wdGlvbihTdHJpbmcgZGlzcGxheVZhbHVlLFN0cmluZyB2YWx1ZSkKLSAgICB7Ci0gICAgICBkaXNwbGF5VmFsdWVfID0gZGlzcGxheVZhbHVlOwotICAgICAgdmFsdWVfID0gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGlzcGxheVZhbHVlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZGlzcGxheVZhbHVlXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRWYWx1ZSgpCi0gICAgewotICAgICAgcmV0dXJuIHZhbHVlXzsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL1hTRFR5cGVEZWZpbml0aW9uVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvWFNEVHlwZURlZmluaXRpb25VdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTllMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvWFNEVHlwZURlZmluaXRpb25VdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFR5cGVEZWZpbml0aW9uVXRpbCB7Ci0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb25VdGlsKCkgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBucyA9IHR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgcmV0dXJuIChucyAhPSBudWxsICYmIG5zLmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5VUklfWFNEKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1Jvb3RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIFhTRFR5cGVEZWZpbml0aW9uIGJhc2VUeXBlID0gdHlwZS5nZXRCYXNlVHlwZSgpOwotICAgIGlmIChiYXNlVHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nIHR5cGVOUyA9IHR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgU3RyaW5nIGJhc2VUeXBlTlMgPSBiYXNlVHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICBTdHJpbmcgYmFzZVR5cGVOYW1lID0gYmFzZVR5cGUuZ2V0TmFtZSgpOwotICAgIGJvb2xlYW4gc2FtZU5TOwotICAgIGJvb2xlYW4gc2FtZU5hbWU7Ci0gICAgaWYgKHR5cGVOUyA9PSBudWxsICYmIGJhc2VUeXBlTlMgPT0gbnVsbCkKLSAgICAgIHNhbWVOUyA9IHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZU5TICE9IG51bGwgJiYgYmFzZVR5cGVOUyAhPSBudWxsICYmIHR5cGVOUy5lcXVhbHMoYmFzZVR5cGVOUykpCi0gICAgICBzYW1lTlMgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHNhbWVOUyA9IGZhbHNlOwotICAgIGlmICh0eXBlTmFtZSA9PSBudWxsICYmIGJhc2VUeXBlTmFtZSA9PSBudWxsKQotICAgICAgc2FtZU5hbWUgPSB0cnVlOwotICAgIGVsc2UgaWYgKHR5cGVOYW1lICE9IG51bGwgJiYgYmFzZVR5cGVOYW1lICE9IG51bGwgJiYgdHlwZU5hbWUuZXF1YWxzKGJhc2VUeXBlTmFtZSkpCi0gICAgICBzYW1lTmFtZSA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc2FtZU5hbWUgPSBmYWxzZTsKLSAgICByZXR1cm4gKHNhbWVOUyAmJiBzYW1lTmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgWFNEVHlwZURlZmluaXRpb24gcmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gY3VyclR5cGUgPSB0eXBlOwotICAgIHdoaWxlICghaXNYU0RCdWlsdEluVHlwZURlZmluaXRpb24oY3VyclR5cGUpKSB7Ci0gICAgICBpZiAoaXNSb290VHlwZURlZmluaXRpb24oY3VyclR5cGUpKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIGN1cnJUeXBlID0gY3VyclR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGN1cnJUeXBlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU29hcEVuY0FycmF5KFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBjdXJyVHlwZSA9IHR5cGU7Ci0gICAgaWYgKGN1cnJUeXBlICE9IG51bGwpCi0gICAgd2hpbGUoY3VyclR5cGUgIT0gbnVsbCkgewotICAgICAgU3RyaW5nIG5zID0gY3VyclR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGN1cnJUeXBlLmdldE5hbWUoKTsKLSAgICAgIGlmIChGcmFnbWVudENvbnN0YW50cy5VUklfU09BUC5lcXVhbHMobnMpICYmIEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX0xPQ0FMX05BTUVfQVJSQVkuZXF1YWxzKG5hbWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UgaWYgKGlzUm9vdFR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZWxzZQotICAgICAgICBjdXJyVHlwZSA9IGN1cnJUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjb21wbGV4IHR5cGUgY29udGVudCBnaXZlbiBhIGNvbXBsZXggdHlwZS4KLSAgICogSWYgY29tcGxleFR5cGUgaXMgYSB1c2VyIGRlZmluZWQgdHlwZToKLSAgICogICBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgdXNlciBkZWZpbmVkIGNvbXBsZXggY29udGVudCBvZiB0aGlzIHR5cGUgb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGV4dGVuZGVkCi0gICAqICAgb3IgZGVyaXZlZCB0eXBlIGlmZiB0aGUgZXh0ZW5kZWQgb3IgZGVyaXZlZCB0eXBlIGlzIG5vdCBhIGJ1aWx0LWluIFhTRCB0eXBlIChmb3IgZXhhbXBsZSwgeHNkOmFueVR5cGUpLgotICAgKiBJZiBjb21wbGV4VHlwZSBpcyBhIGJ1aWx0LWluIFhTRCB0eXBlOgotICAgKiAgIEl0IHdpbGwgcmV0dXJuIHRoZSBjb21wbGV4IGNvbnRlbnQgb2YgdGhpcyBidWlsdC1pbiBYU0QgY29tcGxleCB0eXBlLiAgSXQgd2lsbCBub3QgcmV0dXJuIHRoZQotICAgKiAgIGNvbXBsZXggY29udGVudCBvZiBpdHMgZXh0ZW5kZWQgb3IgZGVyaXZlZCB0eXBlLgotICAgKiBAcGFyYW0gY29tcGxleFR5cGUgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXggdHlwZS4KLSAgICogQHJldHVybiBYU0RDb21wbGV4VHlwZUNvbnRlbnQgWFNEQ29tcGxleFR5cGVDb250ZW50IHRoZSByZXNvbHZlZCBjb21wbGV4IHR5cGUgY29udGVudC4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgWFNEQ29tcGxleFR5cGVDb250ZW50IGdldFhTRENvbXBsZXhUeXBlQ29udGVudChYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUpCi0gIHsKLSAgICBpZiAoIWlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKGNvbXBsZXhUeXBlKSkKLSAgICB7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gY29tcGxleFR5cGU7Ci0gICAgICB3aGlsZSAoIWlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHR5cGUpICYmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9ICgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXR5cGUpLmdldENvbnRlbnQoKTsKLSAgICAgICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBjb21wbGV4VHlwZUNvbnRlbnQ7Ci0gICAgICAgIGlmIChpc1Jvb3RUeXBlRGVmaW5pdGlvbih0eXBlKSkKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdHlwZSA9IHR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGYzOGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgcHVibGljIFN0cmluZyBmb3JtTGlua187Ci0KLSAgcHVibGljIERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0LCBTdHJpbmcgZm9ybUxpbmspIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgZm9ybUxpbmtfID0gZm9ybUxpbms7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICByZXR1cm4gZm9ybUxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvSW52b2tlV1NETE9wZXJhdGlvblRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9JbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjk0Njk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9JbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICBwcml2YXRlIFN0cmluZyBmcmFnbWVudFZpZXdJRF87Ci0gIHByaXZhdGUgU3RyaW5nIGZyYWdtZW50TmFtZUFuY2hvcklEXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5kUG9pbnRfOwotCi0gIHB1YmxpYyBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2VuYWJsZWQuZ2lmIiwgIndzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIGZyYWdtZW50Vmlld0lEXyA9IEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNOwotICAgIGZyYWdtZW50TmFtZUFuY2hvcklEXyA9IG51bGw7Ci0gICAgZW5kUG9pbnRfID0gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3JtTGluay5hcHBlbmQoIndzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwIik7Ci0gICAgU3RyaW5nIG5hbWVBbmNob3JJRCA9IGdldEZyYWdtZW50TmFtZUFuY2hvcklEKCk7Ci0gICAgaWYgKG5hbWVBbmNob3JJRCAhPSBudWxsICYmIG5hbWVBbmNob3JJRC5sZW5ndGgoKSA+IDApIHsKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgiIyIpOwotICAgICAgZm9ybUxpbmsuYXBwZW5kKG5hbWVBbmNob3JJRCk7Ci0gICAgICBzZXRGcmFnbWVudE5hbWVBbmNob3JJRChudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZvcm1MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCBvcGVyYXRpb25UeXBlLFN0cmluZyBmcmFnbWVudFZpZXdJRCkKLSAgewotICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExPcGVyYXRpb25FbGVtZW50Lk9QRVJBVElPTl9UWVBFX1NPQVA6Ci0gICAgICAgIGlmIChmcmFnbWVudFZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpKQotICAgICAgICAgIHJldHVybiAid3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gIndzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIjsKLSAgICAgIGNhc2UgV1NETE9wZXJhdGlvbkVsZW1lbnQuT1BFUkFUSU9OX1RZUEVfSFRUUF9HRVQ6Ci0gICAgICAgIHJldHVybiAid3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AiOwotICAgICAgY2FzZSBXU0RMT3BlcmF0aW9uRWxlbWVudC5PUEVSQVRJT05fVFlQRV9IVFRQX1BPU1Q6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIndzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCI7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGcmFnbWVudFZpZXdJRCgpIHsKLSAgICByZXR1cm4gZnJhZ21lbnRWaWV3SURfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RnJhZ21lbnRWaWV3SUQoU3RyaW5nIGZyYWdtZW50Vmlld0lEKSB7Ci0gICAgZnJhZ21lbnRWaWV3SURfID0gZnJhZ21lbnRWaWV3SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZyYWdtZW50TmFtZUFuY2hvcklEKCkgewotICAgIHJldHVybiBmcmFnbWVudE5hbWVBbmNob3JJRF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGcmFnbWVudE5hbWVBbmNob3JJRChTdHJpbmcgZnJhZ21lbnROYW1lQW5jaG9ySUQpIHsKLSAgICBmcmFnbWVudE5hbWVBbmNob3JJRF8gPSBmcmFnbWVudE5hbWVBbmNob3JJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kUG9pbnQoKQotICB7Ci0gICAgcmV0dXJuIGVuZFBvaW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuZFBvaW50KFN0cmluZyBlbmRQb2ludCkKLSAgewotICAgIGVuZFBvaW50XyA9IGVuZFBvaW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvT3BlbldTRExUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvT3BlbldTRExUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OGMxZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL09wZW5XU0RMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIE9wZW5XU0RMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9lbmFibGVkLmdpZiIsICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC9mb3Jtcy9PcGVuV1NETEZvcm0uanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9TT0FQTWVzc2FnZVF1ZXVlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvU09BUE1lc3NhZ2VRdWV1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGYwYWZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9TT0FQTWVzc2FnZVF1ZXVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLQotcHVibGljIGNsYXNzIFNPQVBNZXNzYWdlUXVldWUgZXh0ZW5kcyBNZXNzYWdlUXVldWUKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgY2FjaGVkTWVzc2FnZUxpc3RfOwotCi0gIHB1YmxpYyBTT0FQTWVzc2FnZVF1ZXVlKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgY2FjaGVkTWVzc2FnZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgY2FjaGVkTWVzc2FnZUxpc3RfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgbWVzc2FnZUxpc3RfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzRnJvbUxpc3QoKQotICB7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0Xy5zaXplKCkgPT0gMCkKLSAgICAgIGNvcHlNZXNzYWdlcyhjYWNoZWRNZXNzYWdlTGlzdF8sbWVzc2FnZUxpc3RfKTsKLSAgICBlbHNlCi0gICAgICBjb3B5TWVzc2FnZXMobWVzc2FnZUxpc3RfLGNhY2hlZE1lc3NhZ2VMaXN0Xyk7Ci0gICAgcmV0dXJuIHN1cGVyLmdldE1lc3NhZ2VzRnJvbUxpc3QoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjb3B5TWVzc2FnZXMoVmVjdG9yIHNvdXJjZUxpc3QsVmVjdG9yIGRlc3RMaXN0KQotICB7Ci0gICAgZm9yIChpbnQgaT0wO2k8c291cmNlTGlzdC5zaXplKCk7aSsrKQotICAgICAgZGVzdExpc3QuYWRkRWxlbWVudChzb3VyY2VMaXN0LmVsZW1lbnRBdChpKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQWRkVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEFkZFRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTliMDAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQWRkVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExBZGRUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgcHVibGljIFdTRExBZGRUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTA0Nzk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdTRExCaW5kaW5nRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbCB7Ci0KLSAgcHVibGljIFdTRExCaW5kaW5nRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0LCAid3NkbC9mb3Jtcy9XU0RMQmluZGluZ0RldGFpbHNGb3JtLmpzcCIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZmMwOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotCi0vLyBXU0RMIGJpbmRpbmcgbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExCaW5kaW5nTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMQmluZGluZ05vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsIndzZGwvaW1hZ2VzL3dzZGxfYmluZGluZ19ub2RlLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKSkgewotICAgICAgICAgIFdTRExPcGVyYXRpb25Ob2RlIHdzZGxPcGVyYXRpb25Ob2RlID0gbmV3IFdTRExPcGVyYXRpb25Ob2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgIGFkZENoaWxkKHdzZGxPcGVyYXRpb25Ob2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTikpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04pKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICAgIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBXU0RMQmluZGluZ0RldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0JJTkRJTkdfREVUQUlMUyIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETERldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYTgxMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbCB7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STV9WSUVXX0lEID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX1ZJRVdfSUQgPSAxOwotCi0gIHByaXZhdGUgaW50IHZpZXdJZF87Ci0KLSAgcHVibGljIFdTRExEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQsICJ3c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybS5qc3AiKTsKLSAgICB2aWV3SWRfID0gRk9STV9WSUVXX0lEOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRWaWV3SWQoKSB7Ci0gICAgcmV0dXJuIHZpZXdJZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWaWV3SWQoaW50IHZpZXdJZCkgewotICAgIGlmICh2aWV3SWQgPT0gRk9STV9WSUVXX0lEIHx8IHZpZXdJZCA9PSBTT1VSQ0VfVklFV19JRCkKLSAgICAgIHZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0b2dnbGVWaWV3SWQoKSB7Ci0gICAgaWYgKHZpZXdJZF8gPT0gRk9STV9WSUVXX0lEKQotICAgICAgdmlld0lkXyA9IFNPVVJDRV9WSUVXX0lEOwotICAgIGVsc2UKLSAgICAgIHZpZXdJZF8gPSBGT1JNX1ZJRVdfSUQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzN2Q5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCB7Ci0gIHB1YmxpYyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzg1MjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9Xb3JrYmVuY2hUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIHsKLSAgcHVibGljIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgcmV0dXJuICJ3c2RsL2Zvcm1zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzZTNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCB7Ci0gIHB1YmxpYyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICByZXR1cm4gIndzZGwvZm9ybXMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTWFpbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTWFpbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NzNmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE1haW5Ob2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLS8vIFJvb3Qgbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExNYWluTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMTWFpbk5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsMSwiaW1hZ2VzL3Jvb3RfbWFpbi5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMKSkgewotICAgICAgICAgIFdTRExOb2RlIHdzZGxOb2RlID0gbmV3IFdTRExOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgIGFkZENoaWxkKHdzZGxOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBPcGVuV1NETFRvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NETCIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5hdmlnYXRvck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjc1ODBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIFdTRExOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgfQotCi0gIC8vIHdzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gIH0KLQotICAvLyB3c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGZhbHNlKTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTI3NGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLS8vIFdTREwgbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExOb2RlIGV4dGVuZHMgV1NETE5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFdTRExOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJpbWFnZXMvd3NkbC5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpKSB7Ci0gICAgICAgICAgV1NETFNlcnZpY2VOb2RlIHdzZGxTZXJ2aWNlTm9kZSA9IG5ldyBXU0RMU2VydmljZU5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgYWRkQ2hpbGQod3NkbFNlcnZpY2VOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSkpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IFdTRExEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9ERVRBSUxTIikpOwotICAgIG5ldyBXU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICBuZXcgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgbmV3IFdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgbmV3IFdTRExBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1RPX0ZBVk9SSVRFUyIpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExPcGVyYXRpb25Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE9wZXJhdGlvbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M4ZTNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE9wZXJhdGlvbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLS8vIFdTREwgb3BlcmF0aW9uIG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMT3BlcmF0aW9uTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMT3BlcmF0aW9uTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwid3NkbC9pbWFnZXMvd3NkbF9vcGVyYXRpb25fbm9kZS5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgSW52b2tlV1NETE9wZXJhdGlvblRvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0lOVk9LRV9XU0RMX09QRVJBVElPTiIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFBlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFBlcnNwZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWJkODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExQZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRWNvcmVQYWNrYWdlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5CaW5kaW5nVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExCaW5kaW5nRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMUGVyc3BlY3RpdmUgZXh0ZW5kcyBQZXJzcGVjdGl2ZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQ09OVEVOVF9ERUZBVUxUID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk0gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFID0gMjsKLQotICBwcml2YXRlIEJhc2ljTW9kZWwgbW9kZWxfOwotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICBwcml2YXRlIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgcHJpdmF0ZSBpbnQgc3RhdHVzQ29udGVudFR5cGVfOwotCi0gIHByaXZhdGUgU09BUE1lc3NhZ2VRdWV1ZSBzb2FwUmVxdWVzdFF1ZXVlXzsKLSAgcHJpdmF0ZSBTT0FQTWVzc2FnZVF1ZXVlIHNvYXBSZXNwb25zZVF1ZXVlXzsKLSAgcHJpdmF0ZSBOb2RlIG9wZXJhdGlvbk5vZGVfOwotCi0gIHN0YXRpYwotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgWFNEIHN1YnN5c3RlbS4KLSAgICAobmV3IFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5SW1wbCgpKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoInhzZCIsbmV3IFhTRFJlc291cmNlRmFjdG9yeUltcGwoKSk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAvLyBJbml0LmluaXQoKTsKLSAgICBFY29yZVBhY2thZ2VJbXBsLmluaXQoKTsKLSAgICBYU0RQYWNrYWdlSW1wbC5pbml0KCk7Ci0gIH0KLQotICBwdWJsaWMgV1NETFBlcnNwZWN0aXZlKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKCJ3c2RsIixjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXRQZXJzcGVjdGl2ZShTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIG1vZGVsXyA9IG5ldyBCYXNpY01vZGVsKCJ3c2RsTW9kZWwiKTsKLSAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChnZXRNZXNzYWdlKCJOT0RFX05BTUVfV1NETF9NQUlOIiksIG1vZGVsXyk7Ci0gICAgbW9kZWxfLnNldFJvb3RFbGVtZW50KHRyZWVFbGVtZW50KTsKLSAgICBub2RlTWFuYWdlcl8gPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgIFdTRExNYWluTm9kZSB3c2RsTWFpbk5vZGUgPSBuZXcgV1NETE1haW5Ob2RlKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlcl8pOwotICAgIG5vZGVNYW5hZ2VyXy5zZXRSb290Tm9kZSh3c2RsTWFpbk5vZGUpOwotCi0gICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgZWxzZQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotCi0gICAgLy8gTWVzc2FnZSBzdGF0dXMgcGFuZQotICAgIHN0YXR1c0NvbnRlbnRUeXBlXyA9IFNUQVRVU19DT05URU5UX0RFRkFVTFQ7Ci0gICAgc29hcFJlcXVlc3RRdWV1ZV8gPSBuZXcgU09BUE1lc3NhZ2VRdWV1ZSgpOwotICAgIHNvYXBSZXNwb25zZVF1ZXVlXyA9IG5ldyBTT0FQTWVzc2FnZVF1ZXVlKCk7Ci0gICAgb3BlcmF0aW9uTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcHJlbG9hZFdTREwoU3RyaW5nW10gd3NkbFVSTHMpIHsKLSAgICBpZiAod3NkbFVSTHMgIT0gbnVsbCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsVVJMcy5sZW5ndGg7IGkrKykgewotICAgICAgICBPcGVuV1NETEFjdGlvbiBvcGVuV1NETEFjdGlvbiA9IG5ldyBPcGVuV1NETEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlbldTRExBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBTdHJpbmcgZGVjb2RlZFdTRExVUkwgPSBVUkxVdGlscy5kZWNvZGUod3NkbFVSTHNbaV0pOwotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIGRlY29kZWRXU0RMVVJMKTsKLSAgICAgICAgb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgICB9Ci0gICAgICBpZiAod3NkbFVSTHMubGVuZ3RoID4gMCkKLSAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRFbmRwb2ludHMoU3RyaW5nW10gd3NkbFVSTHMsIFN0cmluZ1tdIGVuZHBvaW50cykKLSAgewotICAgIGlmICh3c2RsVVJMcyAhPSBudWxsICYmIHdzZGxVUkxzLmxlbmd0aCA+IDAgJiYgZW5kcG9pbnRzICE9IG51bGwgJiYgZW5kcG9pbnRzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgU3RyaW5nIHdzZGxVUkwgPSB3c2RsVVJMc1swXTsKLSAgICAgIFZlY3RvciB3c2RsTm9kZXMgPSBub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIHdzZGxOb2Rlc0l0ZXJhdG9yID0gd3NkbE5vZGVzLml0ZXJhdG9yKCk7IHdzZGxOb2Rlc0l0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgd3NkbE5vZGUgPSAoTm9kZSl3c2RsTm9kZXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmICh3c2RsTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyh3c2RsVVJMKSkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBzZXJ2aWNlTm9kZXNJdGVyYXRvciA9IHNlcnZpY2VOb2Rlcy5pdGVyYXRvcigpOyBzZXJ2aWNlTm9kZXNJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICBWZWN0b3IgYmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgU3RyaW5nW10gbm9kZUlkcyA9IG5ldyBTdHJpbmdbYmluZGluZ05vZGVzLnNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgIG5vZGVJZHNbaV0gPSBTdHJpbmcudmFsdWVPZigoKE5vZGUpYmluZGluZ05vZGVzLmdldChpKSkuZ2V0Tm9kZUlkKCkpOwotICAgICAgICAgICAgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbm9kZUlkcyk7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCwgZW5kcG9pbnRzKTsKLSAgICAgICAgICAgIGFjdGlvbi5zZXRQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGUpOwotICAgICAgICAgICAgYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZXNlbGVjdFNlcnZpY2VPckJpbmRpbmcoU3RyaW5nW10gd3NkbFVSTHMsU3RyaW5nW10gc2VydmljZVFOYW1lU3RyaW5ncyxTdHJpbmdbXSBiaW5kaW5nTmFtZVN0cmluZ3MpCi0gIHsKLSAgICBpZiAod3NkbFVSTHMgIT0gbnVsbCAmJiB3c2RsVVJMcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gd3NkbFVSTHNbMF07Ci0gICAgICBpZiAoc2VydmljZVFOYW1lU3RyaW5ncyAhPSBudWxsICYmIHNlcnZpY2VRTmFtZVN0cmluZ3MubGVuZ3RoID4gMCkKLSAgICAgICAgcHJlc2VsZWN0U2VydmljZSh3c2RsVVJMLHNlcnZpY2VRTmFtZVN0cmluZ3NbMF0pOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoYmluZGluZ05hbWVTdHJpbmdzICE9IG51bGwgJiYgYmluZGluZ05hbWVTdHJpbmdzLmxlbmd0aCA+IDApCi0gICAgICAgICAgcHJlc2VsZWN0QmluZGluZyh3c2RsVVJMLGJpbmRpbmdOYW1lU3RyaW5nc1swXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgcHJlc2VsZWN0U2VydmljZShTdHJpbmcgd3NkbFVSTCxTdHJpbmcgc2VydmljZVFOYW1lU3RyaW5nKQotICB7Ci0gICAgVmVjdG9yIHdzZGxOb2RlcyA9IG5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTx3c2RsTm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBOb2RlIHdzZGxOb2RlID0gKE5vZGUpd3NkbE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3c2RsTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyh3c2RsVVJMKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8c2VydmljZU5vZGVzLnNpemUoKTtqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChqKTsKLSAgICAgICAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gc2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgICAgIGlmIChzZXJ2aWNlLmdldFFOYW1lKCkudG9TdHJpbmcoKS5lcXVhbHMoc2VydmljZVFOYW1lU3RyaW5nKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQoc2VydmljZU5vZGUuZ2V0Tm9kZUlkKCkpOwotICAgICAgICAgICAgbm9kZU1hbmFnZXJfLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0gICAgICAgICAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHByZXNlbGVjdEJpbmRpbmcoU3RyaW5nIHdzZGxVUkwsU3RyaW5nIGJpbmRpbmdOYW1lU3RyaW5nKQotICB7Ci0gICAgVmVjdG9yIHdzZGxOb2RlcyA9IG5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTx3c2RsTm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBOb2RlIHdzZGxOb2RlID0gKE5vZGUpd3NkbE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3c2RsTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyh3c2RsVVJMKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8c2VydmljZU5vZGVzLnNpemUoKTtqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChqKTsKLSAgICAgICAgICBWZWN0b3IgYmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIGZvciAoaW50IGs9MDtrPGJpbmRpbmdOb2Rlcy5zaXplKCk7aysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KGspOwotICAgICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudCliaW5kaW5nTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLnRvU3RyaW5nKCkuZXF1YWxzKGJpbmRpbmdOYW1lU3RyaW5nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKGJpbmRpbmdOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgICAgICAgICAgbm9kZU1hbmFnZXJfLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0gICAgICAgICAgICAgIGNvbnRyb2xsZXJfLnNldEN1cnJlbnRQZXJzcGVjdGl2ZShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCk7Ci0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotCi0gIHB1YmxpYyBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gbm9kZU1hbmFnZXJfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhbmVzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb2Nlc3NGcmFtZXNldHNGb3JtKCkKLSAgewotICAgIHJldHVybiAid3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsTmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAid3NkbFByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAid3NkbFN0YXR1c0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICB7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICB7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICB7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRTdGF0dXNDb250ZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzQ29udGVudFR5cGVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhdHVzQ29udGVudFR5cGUoaW50IHN0YXR1c0NvbnRlbnRUeXBlKQotICB7Ci0gICAgc3RhdHVzQ29udGVudFR5cGVfID0gc3RhdHVzQ29udGVudFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU09BUE1lc3NhZ2VRdWV1ZSBnZXRTT0FQUmVxdWVzdFF1ZXVlKCkKLSAgewotICAgIHJldHVybiBzb2FwUmVxdWVzdFF1ZXVlXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTT0FQTWVzc2FnZVF1ZXVlIGdldFNPQVBSZXNwb25zZVF1ZXVlKCkKLSAgewotICAgIHJldHVybiBzb2FwUmVzcG9uc2VRdWV1ZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRPcGVyYXRpb25Ob2RlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25Ob2RlXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldE9wZXJhdGlvbk5vZGUoTm9kZSBvcGVyYXRpb25Ob2RlKQotICB7Ci0gICAgb3BlcmF0aW9uTm9kZV8gPSBvcGVyYXRpb25Ob2RlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTT0FQRW52ZWxvcGVYTUxMaW5rKGludCBzb2FwRW52ZWxvcGVUeXBlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcD8iKTsKLSAgICBsaW5rLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKHNvYXBFbnZlbG9wZVR5cGUpOwotICAgIHJldHVybiBsaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEJpbmRpbmdUeXBlU3RyaW5nKGludCBiaW5kaW5nVHlwZSkKLSAgewotICAgIHN3aXRjaCAoYmluZGluZ1R5cGUpCi0gICAgewotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuU09BUDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX1NPQVAiKTsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLkhUVFBfR0VUOgotICAgICAgICByZXR1cm4gZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfSFRUUF9HRVQiKTsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLkhUVFBfUE9TVDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX0hUVFBfUE9TVCIpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX1VOU1VQUE9SVEVEIik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxZmVmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VydmljZURldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wgewotCi0gIHB1YmxpYyBXU0RMU2VydmljZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCwgIndzZGwvZm9ybXMvV1NETFNlcnZpY2VEZXRhaWxzRm9ybS5qc3AiKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYyMzAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotLy8gV1NETCBzZXJ2aWNlIG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMU2VydmljZU5vZGUgZXh0ZW5kcyBXU0RMTmF2aWdhdG9yTm9kZQotewotICBwdWJsaWMgV1NETFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ3c2RsL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpKSB7Ci0gICAgICAgICAgV1NETEJpbmRpbmdOb2RlIHdzZGxCaW5kaW5nTm9kZSA9IG5ldyBXU0RMQmluZGluZ05vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgYWRkQ2hpbGQod3NkbEJpbmRpbmdOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORykpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IFdTRExTZXJ2aWNlRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfU0VSVklDRV9ERVRBSUxTIikpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc2Zvcm1lci9GcmFnbWVudFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNmb3JtZXIvRnJhZ21lbnRUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2RlNjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc2Zvcm1lci9GcmFnbWVudFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIEZyYWdtZW50VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICBwdWJsaWMgRnJhZ21lbnRUcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKCI8cm9vdD4iKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCljb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgRWxlbWVudFtdIGVsZW1lbnRzID0gbmV3IEVsZW1lbnRbMF07Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyghb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCksIG5ldyBIYXNodGFibGUoKSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgICAgewotICAgICAgfQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgc2IuYXBwZW5kKFhNTFV0aWxzLnNlcmlhbGl6ZShlbGVtZW50c1tpXSwgdHJ1ZSkpOwotICAgIH0KLSAgICBzYi5hcHBlbmQoIjwvcm9vdD4iKTsKLSAgICBwcm9wZXJ0aWVzLnB1dChGcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVCwgc2IudG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgU3RyaW5nIHNvdXJjZSA9IChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgcm9vdCA9IFhNTFV0aWxzLnN0cmluZ1RvRWxlbWVudChzb3VyY2UpOwotICAgICAgICBpZiAocm9vdCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IHJvb3QuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIFZlY3RvciBjaGlsZHJlblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIGNoaWxkID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICAgICAgY2hpbGRyZW5WZWN0b3IuYWRkKGNoaWxkKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgRWxlbWVudFtdIGNoaWxkcmVuID0gKEVsZW1lbnRbXSljaGlsZHJlblZlY3Rvci50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLSAgICAgICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkgY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgICAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgICAgICAgIGZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkcmVuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvQ2h1bmtlZElucHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0NodW5rZWRJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWEyOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvQ2h1bmtlZElucHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS5pby5GaWx0ZXJJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLXB1YmxpYyBjbGFzcyBDaHVua2VkSW5wdXRTdHJlYW0gZXh0ZW5kcyBGaWx0ZXJJbnB1dFN0cmVhbQotewotICBwcm90ZWN0ZWQgbG9uZyBjaHVua1NpemUgPSAwbDsKLSAgcHJvdGVjdGVkIHZvbGF0aWxlIGJvb2xlYW4gY2xvc2VkID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBtYXhDaGFyTG9uZyA9IChMb25nLnRvSGV4U3RyaW5nKExvbmcuTUFYX1ZBTFVFKSkudG9TdHJpbmcoKS5sZW5ndGgoKTsKLQotICBwcml2YXRlIENodW5rZWRJbnB1dFN0cmVhbSgpCi0gIHsKLSAgICBzdXBlcihudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBDaHVua2VkSW5wdXRTdHJlYW0oSW5wdXRTdHJlYW0gaXMpCi0gIHsKLSAgICBzdXBlcihpcyk7Ci0gIH0KLQotICBwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGJ5dGVbXSBkID0gbmV3IGJ5dGVbMV07Ci0gICAgaW50IHJjID0gcmVhZChkLCAwLCAxKTsKLSAgICByZXR1cm4gcmMgPiAwID8gKGRbMF0gJiAweEZGKSA6IHJjOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKGJ5dGVbXSBiKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkKGIsIDAsIGIubGVuZ3RoKTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IHJlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGNsb3NlZCkKLSAgICAgIHJldHVybiAtMTsKLQotICAgIGludCB0b3RhbHJlYWQgPSAwOwotICAgIGludCBieXRlc3JlYWQgPSAwOwotICAgIHRyeQotICAgIHsKLSAgICAgIGRvCi0gICAgICB7Ci0gICAgICAgIGlmIChjaHVua1NpemUgPCAxTCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgwbCA9PSBnZXRDaHVua2VkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRvdGFscmVhZCA9PSAwKQotICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybiB0b3RhbHJlYWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJ5dGVzcmVhZCA9IGluLnJlYWQoYiwgb2ZmICsgdG90YWxyZWFkLCBNYXRoLm1pbihsZW4gLSB0b3RhbHJlYWQsIChpbnQpIE1hdGgubWluKGNodW5rU2l6ZSwgSW50ZWdlci5NQVhfVkFMVUUpKSk7Ci0gICAgICAgIGlmIChieXRlc3JlYWQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgdG90YWxyZWFkICs9IGJ5dGVzcmVhZDsKLSAgICAgICAgICBjaHVua1NpemUgLT0gYnl0ZXNyZWFkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB3aGlsZSAobGVuIC0gdG90YWxyZWFkID4gMCAmJiBieXRlc3JlYWQgPiAtMSk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgICByZXR1cm4gdG90YWxyZWFkOwotICB9Ci0KLSAgcHVibGljIGxvbmcgc2tpcChmaW5hbCBsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGNsb3NlZCkKLSAgICAgIHJldHVybiAwOwotICAgIGxvbmcgc2tpcHBlZCA9IDBsOwotICAgIGJ5dGVbXSBiID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgaW50IGJyZWFkID0gLTE7Ci0gICAgZG8KLSAgICB7Ci0gICAgICBicmVhZCA9IHJlYWQoYiwgMCwgYi5sZW5ndGgpOwotICAgICAgaWYgKGJyZWFkID4gMCkKLSAgICAgICAgc2tpcHBlZCArPSBicmVhZDsKLSAgICB9Ci0gICAgd2hpbGUgKGJyZWFkICE9IC0xICYmIHNraXBwZWQgPCBuKTsKLSAgICByZXR1cm4gc2tpcHBlZDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoY2xvc2VkKQotICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IHJjID0gKGludCkgTWF0aC5taW4oY2h1bmtTaXplLCBJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0gICAgcmV0dXJuIE1hdGgubWluKHJjLCBpbi5hdmFpbGFibGUoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgbG9uZyBnZXRDaHVua2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvL1N0cmluZ0J1ZmZlciBidWY9IG5ldyBTdHJpbmdCdWZmZXIoMTAyNCk7Ci0gICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW21heENoYXJMb25nICsgMl07Ci0gICAgaW50IGJ1ZnN6ID0gMDsKLSAgICBjaHVua1NpemUgPSAtMUw7Ci0gICAgaW50IGMgPSAtMTsKLSAgICBkbwotICAgIHsKLSAgICAgIGMgPSBpbi5yZWFkKCk7Ci0gICAgICBpZiAoYyA+IC0xKQotICAgICAgewotICAgICAgICBpZiAoYyAhPSAnXHInICYmIGMgIT0gJ1xuJyAmJiBjICE9ICcgJyAmJiBjICE9ICdcdCcpCi0gICAgICAgIHsKLSAgICAgICAgICBidWZbYnVmc3orK10gPSAoKGJ5dGUpIGMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChjID4gLTEgJiYgKGMgIT0gJ1xuJyB8fCBidWZzeiA9PSAwKSAmJiBidWZzeiA8IGJ1Zi5sZW5ndGgpOwotICAgIGlmIChjIDwgMCkKLSAgICB7Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgIH0KLSAgICBTdHJpbmcgc2J1ZiA9IG5ldyBTdHJpbmcoYnVmLCAwLCBidWZzeik7Ci0gICAgaWYgKGJ1ZnN6ID4gbWF4Q2hhckxvbmcpCi0gICAgewotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQ2h1bmtlZCBpbnB1dCBzdHJlYW0gZmFpbGVkIHRvIHJlY2VpdmUgdmFsaWQgY2h1bmsgc2l6ZToiICsgc2J1Zik7Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIGNodW5rU2l6ZSA9IExvbmcucGFyc2VMb25nKHNidWYsIDE2KTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZSkKLSAgICB7Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCInIiArIHNidWYgKyAiJyAiICsgbmUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgaWYgKGNodW5rU2l6ZSA8IDFMKQotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICBpZiAoY2h1bmtTaXplICE9IDBMICYmIGMgPCAwKQotICAgIHsKLSAgICAgIC8vSWYgY2h1bmsgc2l6ZSBpcyB6ZXJvIHRyeSBhbmQgYmUgdG9sZXJhbnQgdGhhdCB0aGVyZSBtYXliZSBubyBjciBvciBsZgotICAgICAgLy8gYXQgdGhlIGVuZC4KLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSFRUUCBDaHVua2VkIHN0cmVhbSBjbG9zZWQgaW4gbWlkZGxlIG9mIGNodW5rLiIpOwotICAgIH0KLSAgICBpZiAoY2h1bmtTaXplIDwgMEwpCi0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkhUVFAgQ2h1bmsgc2l6ZSByZWNlaXZlZCAiICsgY2h1bmtTaXplICsgIiBpcyBsZXNzIHRoYW4gemVyby4iKTsKLSAgICByZXR1cm4gY2h1bmtTaXplOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHN5bmNocm9uaXplZCAodGhpcykKLSAgICB7Ci0gICAgICBpZiAoY2xvc2VkKQotICAgICAgICByZXR1cm47Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgIH0KLSAgICBieXRlW10gYiA9IG5ldyBieXRlWzEwMjRdOwotICAgIGludCBicmVhZCA9IC0xOwotICAgIGRvCi0gICAgewotICAgICAgYnJlYWQgPSByZWFkKGIsIDAsIGIubGVuZ3RoKTsKLSAgICB9Ci0gICAgd2hpbGUgKGJyZWFkICE9IC0xKTsKLSAgfQotCi0gIC8qCi0gICAqIHB1YmxpYyB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkKLSAgICogewotICAgKiB9Ci0gICAqLwotCi0gIHB1YmxpYyB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkRvbid0IHN1cHBvcnQgbWFya2VkIHN0cmVhbXMiKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBSZXNwb25zZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQUmVzcG9uc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmZTBjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBSZXNwb25zZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotcHVibGljIGNsYXNzIEhUVFBSZXNwb25zZQotewotICBwcml2YXRlIGJvb2xlYW4gc3RhdHVzU2V0OwotICBwcml2YXRlIGludCBzdGF0dXNDb2RlOwotICBwcml2YXRlIFN0cmluZyBzdGF0dXNNZXNzYWdlOwotICBwcml2YXRlIEhhc2h0YWJsZSBoZWFkZXJzOwotICBwcml2YXRlIGJ5dGVbXSBwYXlsb2FkOwotCi0gIHB1YmxpYyBIVFRQUmVzcG9uc2UoKQotICB7Ci0gICAgcmVzZXQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIHN0YXR1c1NldCA9IGZhbHNlOwotICAgIHN0YXR1c0NvZGUgPSAtMTsKLSAgICBzdGF0dXNNZXNzYWdlID0gbnVsbDsKLSAgICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgICAgaGVhZGVycy5jbGVhcigpOwotICAgIGVsc2UKLSAgICAgIGhlYWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcGF5bG9hZCA9IG5ldyBieXRlWzBdOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTdGF0dXNTZXQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c1NldDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0U3RhdHVzQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzQ29kZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1c0NvZGUoaW50IHN0YXR1c0NvZGUpCi0gIHsKLSAgICBzdGF0dXNTZXQgPSB0cnVlOwotICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c01lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c01lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNNZXNzYWdlKFN0cmluZyBzdGF0dXNNZXNzYWdlKQotICB7Ci0gICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEhlYWRlcihTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBoZWFkZXJzLnB1dChrZXksIHZhbHVlKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SGVhZGVyKFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZykgaGVhZGVycy5nZXQoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBNYXAgZ2V0SGVhZGVycygpCi0gIHsKLSAgICByZXR1cm4gaGVhZGVyczsKLSAgfQotCi0gIHB1YmxpYyBieXRlW10gZ2V0UGF5bG9hZCgpCi0gIHsKLSAgICByZXR1cm4gcGF5bG9hZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBheWxvYWQoYnl0ZVtdIHBheWxvYWQpCi0gIHsKLSAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDgzYTRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgICAxMjU3NzcgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqIDIwMDYwMjIyICAgMTE4MDE5IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqIDIwMDYwMjIyICAgMTI4NTY0IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA2MDgyMyAgICA5OTAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIHN1cHBvcnQgZm9yIGJhc2ljLWF1dGhlbnRpY2F0aW5nIGZpcmV3YWxscwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDgwNzI4ICAgMjQyMDkxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZXMgZXhwbG9yZXIgaW5zZXJ0cyBzcHVyaW91cyBDUkxGIGluIGEgbG9uZyBhdXRoZW50aWNhdGlvbiBoZWFkZXIKLSAqIDIwMDgwOTA4ICAgMTIxMTIwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgQ2xhc3Mgc3VuLm1pc2MuQkFTRTY0RW5jb2RlciBpcyBtaXNzaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXRUaW1lb3V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU29ja2V0RmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5iaW5hcnkuQmFzZTY0OwotCi1wdWJsaWMgY2xhc3MgSFRUUFRyYW5zcG9ydAotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQU19QUk9YWV9IT1NUID0gImh0dHBzLnByb3h5SG9zdCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBTX1BST1hZX1BPUlQgPSAiaHR0cHMucHJveHlQb3J0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUFNfTk9OX1BST1hZX0hPU1RTID0gImh0dHBzLm5vblByb3h5SG9zdHMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX0hPU1QgPSAiaHR0cC5wcm94eUhvc3QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX1BPUlQgPSAiaHR0cC5wcm94eVBvcnQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX1VTRVJfTkFNRSA9ICJodHRwLnByb3h5VXNlck5hbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX1BBU1NXT1JEID0gImh0dHAucHJveHlQYXNzd29yZCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBfTk9OX1BST1hZX0hPU1RTID0gImh0dHAubm9uUHJveHlIb3N0cyI7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX01FVEhPRCA9ICJQT1NUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9DT05ORUNUID0gIkNPTk5FQ1QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX1ZFUlNJT05fMV8wID0gIkhUVFAvMS4wIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9WRVJTSU9OID0gIkhUVFAvMS4xIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfU09BUF9BQ1RJT04gPSAiU09BUEFjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0FVVEggPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1dXV19BVVRIID0gIldXVy1BdXRoZW50aWNhdGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9QUk9YWV9BVVRIID0gIlByb3h5LWF1dGhvcml6YXRpb24iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT09LSUUgPSAiQ29va2llIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09PS0lFMiA9ICJDb29raWUyIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfSE9TVCA9ICJIb3N0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RIID0gIkNvbnRlbnQtTGVuZ3RoIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQUNDRVBUID0gIkFjY2VwdCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1VTRVJfQUdFTlQgPSAiVXNlci1BZ2VudCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NBQ0hFX0NPTlRST0wgPSAiQ2FjaGUtQ29udHJvbCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9UUkFOU0ZFUl9FTkNPREVJTkcgPSAiVHJhbnNmZXItRW5jb2RpbmciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT05ORUNUSU9OID0gIkNvbm5lY3Rpb24iOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgSFRUUF9DT0RFX0NPTlRJTlVFID0gMTAwOwotICBwcml2YXRlIGZpbmFsIGludCBIVFRQX0NPREVfT0sgPSAyMDA7Ci0gIHByaXZhdGUgZmluYWwgaW50IEhUVFBfQ09ERV9FWENFUFRJT04gPSAzMDA7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSUJNX1dFQl9TRVJWSUNFU19FWFBMT1JFUiA9ICJJQk0gV2ViIFNlcnZpY2VzIEV4cGxvcmVyIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVYVF9YTUwgPSAidGV4dC94bWwiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfVkFMVUUgPSAidGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBQ0NFUFRfVkFMVUUgPSAiYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyoiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQyA9ICJCYXNpYyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIE5PX0NBQ0hFID0gIm5vLWNhY2hlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0hVTktFRCA9ICJjaHVua2VkIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xPU0UgPSAiY2xvc2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQUyA9ICJodHRwcyI7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBRVU9URSA9ICdcIic7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBDT0xPTiA9ICc6JzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFNQQUNFID0gJyAnOwotICBwcml2YXRlIGZpbmFsIGNoYXIgVEFCID0gJ1x0JzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFIgPSAnXHInOwotICBwcml2YXRlIGZpbmFsIGNoYXIgTiA9ICdcbic7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBST09UID0gJy8nOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBORVdfTElORSA9ICJcclxuIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBpbnQgREVGQVVMVF9IVFRQX1BPUlQgPSA4MDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgREVGQVVMVF9IVFRQU19QT1JUID0gNDQzOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPQVBfRU5DT0RJTkcgPSAiVVRGLTgiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HID0gImlzby04ODU5LTEiOwotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9DQVNFX1NFTlNJVElWRV9GT1JfSE9TVF9OQU1FID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBtYWludGFpblNlc3Npb24gPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY29va2llOwotICBwcml2YXRlIFN0cmluZyBjb29raWUyOwotICBwcml2YXRlIEhUVFBSZXNwb25zZSBodHRwUmVzcG9uc2U7Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUpCi0gIHsKLSAgICB0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQpCi0gIHsKLSAgICB0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldE1ldGhvZChVUkwgdXJsKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX01FVEhPRCk7Ci0gICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICBTdHJpbmcgcHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICBTdHJpbmcgaHR0cFByb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX0hPU1QpOwotICAgIFN0cmluZyBodHRwc1Byb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQU19QUk9YWV9IT1NUKTsKLSAgICBpZiAocHJvdG9jb2wuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cCIpICYmIGh0dHBQcm94eUhvc3QgIT0gbnVsbCAmJiBodHRwUHJveHlIb3N0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQodXJsLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChwcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwcyIpICYmIGh0dHBzUHJveHlIb3N0ICE9IG51bGwgJiYgaHR0cHNQcm94eUhvc3QubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgZmlsZSA9IHVybC5nZXRGaWxlKCk7Ci0gICAgICBpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUubGVuZ3RoKCkgPiAwKQotICAgICAgICBzYi5hcHBlbmQoZmlsZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNiLmFwcGVuZChST09UKTsKLSAgICB9Ci0gICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICBzYi5hcHBlbmQoSFRUUF9WRVJTSU9OKTsKLSAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SG9zdChVUkwgdXJsKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX0hFQURFUl9IT1NUKTsKLSAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgc2IuYXBwZW5kKHVybC5nZXRIb3N0KCkpOwotICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgaW50IHBvcnQgPSB1cmwuZ2V0UG9ydCgpOwotICAgIGlmIChwb3J0ID4gMCkKLSAgICAgIHNiLmFwcGVuZChTdHJpbmcudmFsdWVPZihwb3J0KSk7Ci0gICAgZWxzZSBpZiAodXJsLmdldFByb3RvY29sKCkuZXF1YWxzSWdub3JlQ2FzZShIVFRQUykpCi0gICAgICBzYi5hcHBlbmQoREVGQVVMVF9IVFRQU19QT1JUKTsKLSAgICBlbHNlCi0gICAgICBzYi5hcHBlbmQoREVGQVVMVF9IVFRQX1BPUlQpOwotICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbnRlbnRUeXBlKCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRSwgQ09OVEVOVF9UWVBFX1ZBTFVFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudExlbmd0aChieXRlW10gcGF5bG9hZEFzQnl0ZXMpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCwgU3RyaW5nLnZhbHVlT2YocGF5bG9hZEFzQnl0ZXMubGVuZ3RoKSk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRTT0FQQWN0aW9uKFN0cmluZyBzb2FwQWN0aW9uKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX0hFQURFUl9TT0FQX0FDVElPTik7Ci0gICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgIHNiLmFwcGVuZChRVU9URSk7Ci0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICAgIHNiLmFwcGVuZChzb2FwQWN0aW9uKTsKLSAgICBzYi5hcHBlbmQoUVVPVEUpOwotICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvb2tpZSgpCi0gIHsKLSAgICBpZiAobWFpbnRhaW5TZXNzaW9uKQotICAgICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ09PS0lFLCBjb29raWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvb2tpZTIoKQotICB7Ci0gICAgaWYgKG1haW50YWluU2Vzc2lvbikKLSAgICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPT0tJRTIsIGNvb2tpZTIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIHN0cmlwTmV3TGluZShTdHJpbmcgaW5wdXQpIHsKLQkgIHJldHVybiBpbnB1dC5yZXBsYWNlQWxsKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSwgIiIpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXV1dBdXRoZW50aWNhdGlvbigpCi0gIHsKLSAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lICE9IG51bGwgJiYgaHR0cEJhc2ljQXV0aFBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotICAgICAgQmFzZTY0IGVuY29kZXIgPSBuZXcgQmFzZTY0KCk7Ci0gICAgICBTdHJpbmcgZW5jb2RlZFVzZXJOYW1lUGFzc3dvcmQgPSBuZXcgU3RyaW5nKGVuY29kZXIuZW5jb2RlKHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSkpOwotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKEhUVFBfSEVBREVSX0FVVEgpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQoQkFTSUMpOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZChzdHJpcE5ld0xpbmUoZW5jb2RlZFVzZXJOYW1lUGFzc3dvcmQpKTsKLSAgICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UHJveHlBdXRoZW50aWNhdGlvbigpCi0gIHsKLSAgICBTdHJpbmcgcHJveHlVc2VyTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX1VTRVJfTkFNRSk7Ci0gICAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9QQVNTV09SRCk7Ci0gICAgaWYgKHByb3h5VXNlck5hbWUgIT0gbnVsbCAmJiBwcm94eVBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihwcm94eVVzZXJOYW1lKTsKLSAgICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgICBzYi5hcHBlbmQocHJveHlQYXNzd29yZCk7Ci0gICAgICBCYXNlNjQgZW5jb2RlciA9IG5ldyBCYXNlNjQoKTsKLSAgICAgIFN0cmluZyBlbmNvZGVkVXNlck5hbWVQYXNzd29yZCA9IG5ldyBTdHJpbmcoZW5jb2Rlci5lbmNvZGUoc2IudG9TdHJpbmcoKS5nZXRCeXRlcygpKSk7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoSFRUUF9IRUFERVJfUFJPWFlfQVVUSCk7Ci0gICAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZChCQVNJQyk7Ci0gICAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgICAgc2IuYXBwZW5kKHN0cmlwTmV3TGluZShlbmNvZGVkVXNlck5hbWVQYXNzd29yZCkpOwotICAgICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRBY2NlcHQoKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQUNDRVBULCBBQ0NFUFRfVkFMVUUpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRVc2VyQWdlbnQoKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfVVNFUl9BR0VOVCwgSUJNX1dFQl9TRVJWSUNFU19FWFBMT1JFUik7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENhY2hlQ29udHJvbCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DQUNIRV9DT05UUk9MLCBOT19DQUNIRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFByYWdtYSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9QUkFHTUEsIE5PX0NBQ0hFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29ubmVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT05ORUNUSU9OLCBDTE9TRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEhUVFBIZWFkZXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihrZXkpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQodmFsdWUpOwotICAgICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2VuZChVUkwgdXJsLCBTdHJpbmcgc29hcEFjdGlvbiwgU3RyaW5nIHBheWxvYWQpIHRocm93cyBVbmtub3duSG9zdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIGJ5dGVbXSBwYXlsb2FkQXNVVEY4ID0gcGF5bG9hZC5nZXRCeXRlcyhERUZBVUxUX1NPQVBfRU5DT0RJTkcpOwotICAgICAgIAotICAgIFN0cmluZ0J1ZmZlciBodHRwSGVhZGVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldE1ldGhvZCh1cmwpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRIb3N0KHVybCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbnRlbnRUeXBlKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbnRlbnRMZW5ndGgocGF5bG9hZEFzVVRGOCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldEFjY2VwdCgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRVc2VyQWdlbnQoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q2FjaGVDb250cm9sKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFByYWdtYSgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRTT0FQQWN0aW9uKHNvYXBBY3Rpb24pKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRXV1dBdXRoZW50aWNhdGlvbigpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRQcm94eUF1dGhlbnRpY2F0aW9uKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvb2tpZSgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb29raWUyKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbm5lY3Rpb24oKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoTkVXX0xJTkUpOyAvLyBuZXcgbGluZSBiZXR3ZWVuIHRoZSBIVFRQIGhlYWRlciBhbmQgdGhlIHBheWxvYWQKLSAgICBTb2NrZXQgc29ja2V0ID0gYnVpbGRTb2NrZXQodXJsKTsKLSAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2tldC5nZXRJbnB1dFN0cmVhbSgpOwotICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICBvcy53cml0ZShodHRwSGVhZGVyLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORykpOwotICAgIG9zLndyaXRlKHBheWxvYWRBc1VURjgpOwotICAgIG9zLmZsdXNoKCk7Ci0gICAgaHR0cFJlc3BvbnNlID0gbmV3IEhUVFBSZXNwb25zZSgpOwotICAgIHJlYWRIVFRQUmVzcG9uc2VIZWFkZXIoaXMsIGh0dHBSZXNwb25zZSk7Ci0gICAgaW50IGNvZGUgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpOwotICAgIGlmIChjb2RlID09IEhUVFBfQ09ERV9DT05USU5VRSkKLSAgICB7Ci0gICAgICBodHRwUmVzcG9uc2UucmVzZXQoKTsKLSAgICAgIHJlYWRIVFRQUmVzcG9uc2VIZWFkZXIoaXMsIGh0dHBSZXNwb25zZSk7Ci0gICAgfQotICAgIHJlYWRIVFRQUmVzcG9uc2VQYXlsb2FkKGlzLCBodHRwUmVzcG9uc2UpOwotICAgIG9zLmNsb3NlKCk7Ci0gICAgaXMuY2xvc2UoKTsKLSAgICBzb2NrZXQuY2xvc2UoKTsKLSAgICBjb2RlID0gaHR0cFJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKTsKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSBodHRwUmVzcG9uc2UuZ2V0SGVhZGVyKEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRS50b0xvd2VyQ2FzZSgpKTsKLSAgICBpZiAoY29kZSA+PSBIVFRQX0NPREVfRVhDRVBUSU9OICYmIChjb250ZW50VHlwZSA9PSBudWxsIHx8IGNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihURVhUX1hNTC50b0xvd2VyQ2FzZSgpKSA9PSAtMSkpCi0gICAgICB0aHJvdyBuZXcgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihjb2RlLCBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzTWVzc2FnZSgpLCBodHRwUmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWFkSFRUUFJlc3BvbnNlSGVhZGVyKElucHV0U3RyZWFtIGlzLCBIVFRQUmVzcG9uc2UgcmVzcCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBieXRlIGIgPSAwOwotICAgIGludCBsZW4gPSAwOwotICAgIGludCBjb2xvbkluZGV4ID0gLTE7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgYm9vbGVhbiByZWFkVG9vTXVjaCA9IGZhbHNlOwotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zOwotICAgIGZvciAoYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oNDA5Nik7OykKLSAgICB7Ci0gICAgICBpZiAoIXJlYWRUb29NdWNoKQotICAgICAgICBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgaWYgKGIgPT0gLTEpCi0gICAgICAgIGJyZWFrOwotICAgICAgcmVhZFRvb011Y2ggPSBmYWxzZTsKLSAgICAgIGlmICgoYiAhPSBSKSAmJiAoYiAhPSBOKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKChiID09IENPTE9OKSAmJiAoY29sb25JbmRleCA9PSAtMSkpCi0gICAgICAgICAgY29sb25JbmRleCA9IGxlbjsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGJhb3Mud3JpdGUoYik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChiID09IFIpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSAvLyBiID09IE4KLSAgICAgIHsKLSAgICAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgICByZWFkVG9vTXVjaCA9IHRydWU7Ci0gICAgICAgIC8vIEEgc3BhY2Ugb3IgdGFiIGF0IHRoZSBiZWdpbmluZyBvZiBhIGxpbmUgbWVhbnMgdGhlIGhlYWRlciBjb250aW51ZXMuCi0gICAgICAgIGlmICgoYiA9PSBTUEFDRSkgfHwgKGIgPT0gVEFCKSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYmFvcy5jbG9zZSgpOwotICAgICAgICBieXRlW10gYkFycmF5ID0gYmFvcy50b0J5dGVBcnJheSgpOwotICAgICAgICBiYW9zLnJlc2V0KCk7Ci0gICAgICAgIGlmIChjb2xvbkluZGV4ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAga2V5ID0gbmV3IFN0cmluZyhiQXJyYXksIDAsIGNvbG9uSW5kZXgsIERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpOwotICAgICAgICAgIHZhbHVlID0gbmV3IFN0cmluZyhiQXJyYXksIGNvbG9uSW5kZXggKyAxLCBsZW4gLSAxIC0gY29sb25JbmRleCwgREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORyk7Ci0gICAgICAgICAgY29sb25JbmRleCA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGtleSA9IG5ldyBTdHJpbmcoYkFycmF5LCAwLCBsZW4sIERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpOwotICAgICAgICAgIHZhbHVlID0gRU1QVFlfU1RSSU5HOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcmVzcC5pc1N0YXR1c1NldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVhZGVyIHN0YXR1cyBjb2RlCi0gICAgICAgICAgaW50IHN0YXJ0ID0ga2V5LmluZGV4T2YoU1BBQ0UpICsgMTsKLSAgICAgICAgICBTdHJpbmcgcyA9IGtleS5zdWJzdHJpbmcoc3RhcnQpLnRyaW0oKTsKLSAgICAgICAgICBpbnQgZW5kID0gcy5pbmRleE9mKFNQQUNFKTsKLSAgICAgICAgICBpZiAoZW5kICE9IC0xKQotICAgICAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDAsIGVuZCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcC5zZXRTdGF0dXNDb2RlKEludGVnZXIucGFyc2VJbnQocykpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNwLnNldFN0YXR1c0NvZGUoLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXNwLnNldFN0YXR1c01lc3NhZ2Uoa2V5LnN1YnN0cmluZyhzdGFydCArIGVuZCArIDEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmVzcC5hZGRIZWFkZXIoa2V5LnRvTG93ZXJDYXNlKCkudHJpbSgpLCB2YWx1ZS50cmltKCkpOwotICAgICAgICBsZW4gPSAwOwotICAgICAgfQotICAgIH0KLSAgICBiYW9zLmNsb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVhZEhUVFBSZXNwb25zZVBheWxvYWQoSW5wdXRTdHJlYW0gaXMsIEhUVFBSZXNwb25zZSByZXNwKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJ5dGUgYiA9IChieXRlKWlzLnJlYWQoKTsKLSAgICAgIHdoaWxlIChiICE9IC0xKQotICAgICAgewotICAgICAgICBiYW9zLndyaXRlKGIpOwotICAgICAgICBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoU29ja2V0VGltZW91dEV4Y2VwdGlvbiBzdGUpCi0gICAgewotICAgIH0KLSAgICBiYW9zLmNsb3NlKCk7Ci0gICAgcmVzcC5zZXRQYXlsb2FkKGJhb3MudG9CeXRlQXJyYXkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmVjZWl2ZXMgdGhlIGJ5dGVzIGZyb20gdGhlIGxhc3Qgd2ViIHNlcnZpY2UgaW52b2NhdGlvbi4gIFRoaXMgaXMgdXNlZCBieSBXU0UncyBkZWZhdWx0Ci0gICAqIFNPQVAgdHJhbnNwb3J0LgotICAgKiAKLSAgICogQHJldHVybiBBIGJ5dGUgYXJyYXkuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICovCi0gIGJ5dGVbXSByZWNlaXZlQnl0ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChodHRwUmVzcG9uc2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIGJ5dGVbXSBwYXlsb2FkID0gaHR0cFJlc3BvbnNlLmdldFBheWxvYWQoKTsKLSAgICAgICAgaWYgKENIVU5LRUQuZXF1YWxzSWdub3JlQ2FzZShodHRwUmVzcG9uc2UuZ2V0SGVhZGVyKEhUVFBfSEVBREVSX1RSQU5TRkVSX0VOQ09ERUlORy50b0xvd2VyQ2FzZSgpKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHBheWxvYWQpOwotICAgICAgICAgIENodW5rZWRJbnB1dFN0cmVhbSBjaXMgPSBuZXcgQ2h1bmtlZElucHV0U3RyZWFtKGJhaXMpOwotICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICAgIGJ5dGUgYjsKLSAgICAgICAgICB3aGlsZSAoKGIgPSAoYnl0ZSljaXMucmVhZCgpKSAhPSAtMSkKLSAgICAgICAgICAgIGJhb3Mud3JpdGUoYik7Ci0gICAgICAgICAgYmFvcy5jbG9zZSgpOwotICAgICAgICAgIGNpcy5jbG9zZSgpOwotICAgICAgICAgIGJhaXMuY2xvc2UoKTsKLSAgICAgICAgICByZXR1cm4gYmFvcy50b0J5dGVBcnJheSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwYXlsb2FkOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBhZnRlciBXU0Ugc3d0aWNoZXMgdG8gdXNpbmcgYSBwbHVnZ2FibGUgdHJhbnNwb3J0IHZpYSBlbmhhbmNlbWVudCAxNzY0OTMuCi0gICAqIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBtZXRob2QgaXMgcmVmYWN0b3JlZCB0byB0aGUgcmVjZWl2ZUJ5dGVzKCkgbWV0aG9kLiAKLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgQnVmZmVyZWRSZWFkZXIgcmVjZWl2ZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBieXRlW10gcGF5bG9hZCA9IHJlY2VpdmVCeXRlcygpOwotICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCkgewotICAgIAlFbGVtZW50IHNvYXBFbnZlbG9wZSA9IFhNTFV0aWxzLmJ5dGVBcnJheVRvRWxlbWVudChwYXlsb2FkLCBmYWxzZSk7Ci0gICAgICAgIC8vIHJlbW92ZSBYTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uCi0gICAgICAgIGlmIChzb2FwRW52ZWxvcGUgIT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oWE1MVXRpbHMuc2VyaWFsaXplKHNvYXBFbnZlbG9wZSwgdHJ1ZSkuZ2V0Qnl0ZXMoREVGQVVMVF9TT0FQX0VOQ09ESU5HKSksIERFRkFVTFRfU09BUF9FTkNPRElORykpOyAKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGdldEhlYWRlcnMoKQotICB7Ci0gICAgSGFzaHRhYmxlIGhlYWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKGh0dHBSZXNwb25zZSAhPSBudWxsKQotICAgICAgaGVhZGVycy5wdXRBbGwoaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKSk7Ci0gICAgcmV0dXJuIGhlYWRlcnM7Ci0gIH0KLQotICAvKioKLSAgICogQnVpbGRzIHRoZSBmaXJzdCBsaW5lIG9mIGEgY29ubmVjdGlvbiByZXF1ZXN0IHRvIHRoZSBwcm94eSBzZXJ2ZXIKLSAgICogCi0gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0aGF0IHdlIHdhbnQgdG8gdWx0aW1hdGVseSBjb25uZWN0IHRvLgotICAgKiBAcmV0dXJuIEEgc3RyaW5nIG9mIHRoZSBmb3JtICJDT05ORUNUICZsdDtob3N0bmFtZSZndDs6Jmx0O3BvcnQmZ3Q7IEhUVFAvMS4wIi4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIGdldENvbm5lY3RNZXRob2QoVVJMIHVybCkgewotCQotCSAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX0NPTk5FQ1QpOwotCSAgc2IuYXBwZW5kKFNQQUNFKTsJICAKLQkgIHNiLmFwcGVuZCh1cmwuZ2V0SG9zdCgpKTsKLQkgIHNiLmFwcGVuZChDT0xPTik7Ci0JICBzYi5hcHBlbmQodXJsLmdldFBvcnQoKSk7Ci0JICBzYi5hcHBlbmQoU1BBQ0UpOwotCSAgc2IuYXBwZW5kKEhUVFBfVkVSU0lPTl8xXzApOwotCSAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLQkgIHJldHVybiBzYjsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdCBhIHNvY2tldCB0byB0aGUgcHJveHkgc2VydmVyIHdoaWNoIGJlIHVzZWQgdG8gdHVubmVsIHRocm91Z2guCi0gICAqIAotICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCB3ZSB3YW50IHRvIHVsdGltYXRlbHkgY29ubmVjdCB0by4KLSAgICogQHBhcmFtIHByb3h5SG9zdCBUaGUgcHJveHkgaG9zdC4KLSAgICogQHBhcmFtIHByb3h5UG9ydCBUaGUgcHJveHkgcG9ydC4KLSAgICogQHJldHVybiBBIGNvbm5lY3RlZCBzb2NrZXQgdG8gdGhlIHByb3h5IHNlcnZlci4gCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0gICAqLwotICBwcml2YXRlIFNvY2tldCBidWlsZFR1bm5lbFNvY2tldChVUkwgdXJsLCBTdHJpbmcgcHJveHlIb3N0LCBpbnQgcHJveHlQb3J0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JICBTdHJpbmdCdWZmZXIgaHR0cEhlYWRlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbm5lY3RNZXRob2QodXJsKSk7Ci0JICBodHRwSGVhZGVyLmFwcGVuZChnZXRQcm94eUF1dGhlbnRpY2F0aW9uKCkpOyAgICAgICAKLQkgIGh0dHBIZWFkZXIuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAKLQkgIFNvY2tldCB0dW5uZWwgPSBuZXcgU29ja2V0KHByb3h5SG9zdCwgcHJveHlQb3J0KTsKLSAgICAKLQkgIElucHV0U3RyZWFtICBpcyA9IHR1bm5lbC5nZXRJbnB1dFN0cmVhbSgpOwotCSAgT3V0cHV0U3RyZWFtIG9zID0gdHVubmVsLmdldE91dHB1dFN0cmVhbSgpOwotICAgIAotCSAgb3Mud3JpdGUoaHR0cEhlYWRlci50b1N0cmluZygpLmdldEJ5dGVzKERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpKTsgICAgICAgIAotCSAgb3MuZmx1c2goKTsKLSAgICAKLQkgIEhUVFBSZXNwb25zZSBodHRwUmVzcG9uc2UgPSBuZXcgSFRUUFJlc3BvbnNlKCk7Ci0JICByZWFkSFRUUFJlc3BvbnNlSGVhZGVyKGlzLCBodHRwUmVzcG9uc2UpOwotICAgIAotCSAgaW50IGNvZGUgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpOwotCi0JICAvLyBlbnN1cmUgd2UgYXJlIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdGhlIHByb3h5Ci0JICBpZiAoY29kZSAhPSBIVFRQX0NPREVfT0spCi0JCSAgdGhyb3cgbmV3IEhUVFBUcmFuc3BvcnRFeGNlcHRpb24oY29kZSwgaHR0cFJlc3BvbnNlLmdldFN0YXR1c01lc3NhZ2UoKSwgaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKSk7Ci0JICAKLQkgIHJldHVybiB0dW5uZWw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU29ja2V0IGJ1aWxkU29ja2V0KFVSTCB1cmwpIHRocm93cyBVbmtub3duSG9zdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFNvY2tldCBzID0gbnVsbDsKLSAgICBTdHJpbmcgaG9zdCA9IHVybC5nZXRIb3N0KCk7Ci0gICAgaW50IHBvcnQgPSB1cmwuZ2V0UG9ydCgpOwotICAgIFN0cmluZyBwcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9IT1NUKTsKLSAgICBpbnQgcHJveHlQb3J0ID0gSW50ZWdlci5nZXRJbnRlZ2VyKFNZU19QUk9QX0hUVFBfUFJPWFlfUE9SVCwgREVGQVVMVF9IVFRQX1BPUlQpLmludFZhbHVlKCk7Ci0gICAgCi0gICAgU3RyaW5nIG5vblByb3h5SG9zdHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9OT05fUFJPWFlfSE9TVFMpOwotCi0gICAgLy8gIFN0cmluZyBwcm94eVVzZXJOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfVVNFUl9OQU1FKTsKLSAgICAvLyAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9QQVNTV09SRCk7Ci0gICAgaWYgKHVybC5nZXRQcm90b2NvbCgpLmVxdWFsc0lnbm9yZUNhc2UoSFRUUFMpKQotICAgIHsKLSAgICAgIHByb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQU19QUk9YWV9IT1NUKTsKLSAgICAgIHByb3h5UG9ydCA9IEludGVnZXIuZ2V0SW50ZWdlcihTWVNfUFJPUF9IVFRQU19QUk9YWV9QT1JULCBERUZBVUxUX0hUVFBTX1BPUlQpLmludFZhbHVlKCk7Ci0gICAgICBub25Qcm94eUhvc3RzID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBTX05PTl9QUk9YWV9IT1NUUyk7Ci0KLSAgICAgIGlmIChwcm94eUhvc3QgIT0gbnVsbCAmJiBwcm94eUhvc3QubGVuZ3RoKCkgPiAwICYmICFpc0hvc3RJbk5vblByb3h5SG9zdHMoaG9zdCwgbm9uUHJveHlIb3N0cywgREVGQVVMVF9DQVNFX1NFTlNJVElWRV9GT1JfSE9TVF9OQU1FKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU1NMIHdpdGggcHJveHkgc2VydmVyCi0gICAgICAgIFNvY2tldCB0dW5uZWwgPSBidWlsZFR1bm5lbFNvY2tldCh1cmwsIHByb3h5SG9zdCwgcHJveHlQb3J0KTsgICAgICAgCi0gICAgICAgIHMgPSAoKFNTTFNvY2tldEZhY3RvcnkpIFNTTFNvY2tldEZhY3RvcnkuZ2V0RGVmYXVsdCgpKS5jcmVhdGVTb2NrZXQodHVubmVsLCBob3N0LCBwb3J0LCB0cnVlKTsgICAgCSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHMgPSBTU0xTb2NrZXRGYWN0b3J5LmdldERlZmF1bHQoKS5jcmVhdGVTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUFNfUE9SVCkpOwotICAgICAgLy8gUmVtb3ZpbmcgZGVwZW5kZW5jeSBvbiBzb2FwLmphcgotICAgICAgLy8gIHMgPSBTU0xVdGlscy5idWlsZFNTTFNvY2tldChob3N0LCAocG9ydCA+IDAgPyBwb3J0IDogREVGQVVMVF9IVFRQU19QT1JUKSwgcHJveHlIb3N0LCBwcm94eVBvcnQpOwotICAgICAgLy8gVE9ETzoKLSAgICAgIC8vIEJ1aWxkIGFuIFNTTCBzb2NrZXQgdGhhdCBzdXBwb3J0cyBwcm94eVVzZXIgYW5kIHByb3h5UGFzc3dvcmQsCi0gICAgICAvLyBhcyBkZW1vbnN0cmF0ZWQgaW4gdGhlIGZvbGxvd2luZyAob3JpZ2luYWwpIGxpbmUgb2YgY29kZToKLSAgICAgIC8vICBzID0gU1NMVXRpbHMuYnVpbGRTU0xTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUFNfUE9SVCksIHByb3h5SG9zdCwgcHJveHlQb3J0LCBwcm94eVVzZXJOYW1lLCBwcm94eVBhc3N3b3JkKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocHJveHlIb3N0ICE9IG51bGwgJiYgcHJveHlIb3N0Lmxlbmd0aCgpID4gMCAmJiAhaXNIb3N0SW5Ob25Qcm94eUhvc3RzKGhvc3QsIG5vblByb3h5SG9zdHMsIERFRkFVTFRfQ0FTRV9TRU5TSVRJVkVfRk9SX0hPU1RfTkFNRSkpCi0gICAgICBzID0gbmV3IFNvY2tldChwcm94eUhvc3QsIHByb3h5UG9ydCk7Ci0gICAgZWxzZQotICAgICAgcyA9IG5ldyBTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUF9QT1JUKSk7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBpc0hvc3RJbk5vblByb3h5SG9zdHMoU3RyaW5nIGhvc3QsIFN0cmluZyBub25Qcm94eUhvc3RzLCBib29sZWFuIGNhc2VTZW5zaXRpdmUpCi0gIHsKLSAgCWlmIChjYXNlU2Vuc2l0aXZlKSByZXR1cm4gaG9zdC5tYXRjaGVzKGNyZWF0ZVBhdHRlcm5Gcm9tU3RyaW5nKG5vblByb3h5SG9zdHMpKTsKLSAgCWVsc2UgcmV0dXJuIGhvc3QudG9Mb3dlckNhc2UoKS5tYXRjaGVzKGNyZWF0ZVBhdHRlcm5Gcm9tU3RyaW5nKG5vblByb3h5SG9zdHMudG9Mb3dlckNhc2UoKSkpOyAgCi0gIH0KLSAgCi0gIC8qCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGEgCi0gICAqIG5vcm1hbCBqYXZhIFN0cmluZyB1c2VkIGluIHRoZSBwcm94eSBtZWNoYW5pc20uIAotICAgKiBGb3IgZXhhbXBsZSwgdGhlIGh0dHAubm9uUHJveHlIb3N0cyBjb250YWlucyBmb2xsb3dpbmcgU3RyaW5nOiAKLSAgICogIjE5Mi4xNjguMi4qfGxvY2FsaG9zdHwqLmlibS5jb20iIC4gSXQgd291bGQgYmUgCi0gICAqIHRyYW5zZm9ybWVkIGludG86ICIxOTJcLjE2OFwuMlwuXHcqfGxvY2FsaG9zdHxcdypcLmlibVwuY29tIgotICAgKiBUaHVzLCBmb2xsb3dpbmcgaG9zdCBzdHJpbmcgd291bGQgbWF0Y2ggYWJvdmUgcGF0dGVybjoKLSAgICogMTkyLjE2OC4yLjUgMTkyLjE2OC4yLiAxOTIuMTY4LjIuNjY2IDE5Mi4xNjguMi53Ci0gICAqIGxvY2FsaG9zdAotICAgKiB0b3JvbGFiLmlibS5jb20gLmlibS5jb20gMTIzLmlibS5jb20KLSAgICogCi0gICAqIFR3byB0cmFuc2Zvcm1hdGlvbnMgYXJlIGRvbmU6Ci0gICAqIDEuIHJlcGxhY2UgYWxsICIuIiBpbnRvICJcLiIgQXMgaW4gcmVndWxhciBleHByZXNzaW9uLCAnLicgcmVwcmVzZW50cyAKLSAgICogICAgYW55IGNoYXJhdGVyLiAgIlwuJyByZXByZXNlbnRzIHRoZSByZWFsIGNoYXJhY3RlciAnLicKLSAgICogMi4gSW4gb3JkZXIgdG8gZ2V0IHRoZSByZWFsIG1lYW5pbmcgb2YgIioiIHVzZWQgaW4gcHJvcGVydHkgCi0gICAqICAgIGh0dHAubm9uUHJveHlIb3N0cywgIlx3KiIgaXMgdXNlZCB0byByZXBsYWNlICIqIgotICAgKiAgICAiXHciIHJlcHJlc2VudCBhIHdvcmQgY2hhcmFjdGVyOiBbYS16QS1aXzAtOV0KLSAgICogICAgCi0gICAqIFJlc3RyaWN0aW9uOgotICAgKiBUaGUgdmFsaWRpdHkgb2YgYWRkcmVzcyBpcyBub3QgY2hlY2tlZC4gCi0gICAqICgxOTIuMTY4LjIuNTU1IGFuZCAxOTIuMTY4LjIuY29tIGFyZSBPSykKLSAgICogCi0gICAqIFRPRE8gY2hlY2sgd2hldGhlciAqIG9jY3VycyBpbiBhZGRyZXNzIG9yIGhvc3RuYW1lLgotICAgKiBpZiBpdCBvY2N1dXMgaW4gYWRkcmVzcyByZXByZXNlbnRhdGlvbiwgcmVwbGFjZSAiKiIgd2l0aCAiXGQqIgotICAgKiBhbmQgY2hlY2s6IHZhbHVlIDwgMjU2ID8KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVBhdHRlcm5Gcm9tU3RyaW5nKFN0cmluZyBzdHIpIAotICB7Ci0gICAgLyogVGhpcyBpcyB0aGUgc2FtZSBhcyBmb2xsb3dpbmcgbW9yZSB1bmRlcnN0YW5kYWJsZSB3YXk6Ci0JICogcmV0dXJuIHN0ci5yZXBsYWNlKCIuIiwgIlxcLiIpLnJlcGxhY2UoIioiLCAiXFx3KiIpOwotCSAqIEJ1dCwgcmVwbGFjZShDaGFyU2VxdWVuY2UgdGFyZ2V0LCBDaGFyU2VxdWVuY2UgcmVwbGFjZW1lbnQpIGNhbiBvbmx5IGJlIAotCSAqIHN1cHBvcnRlZCBhZnRlciBqMnNlIDEuNSwgb24gdGhlIG90aGVyIGhhbmQsIAotCSAqIHJlcGxhY2VBbGwoU3RyaW5nIHJlZ2V4LCBTdHJpbmcgcmVwbGFjZW1lbnQpIGNhbiBiZSBzdXBwb3J0ZWQgYmVmb3JlIAotCSAqIGoyc2UgMS41LgotCSAqLwotICAgIHJldHVybiBzdHIgPT0gbnVsbCA/IG51bGwgOiBzdHIucmVwbGFjZUFsbCgiXFwuIiwgIlxcLiIpLnJlcGxhY2VBbGwoIlxcKiIsICJcXHcqIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY3NjNlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBNZXNzYWdlUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA4MTAyMCAgIDI1MTI2OSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFdTRSBTZW5kcyBXcm9uZyBOYW1lc3BhY2UgZm9yIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBTT0FQIGJvZHkKLSAqIDIwMDkxMTA0ICAgMjk0MjYwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgV1NFIHNvdXJjZSB2aWV3IG1pc3Npbmcgc29tZSBuYW1lc3BhY2UgcHJlZml4ZXMgaW4gU09BUCByZXNwb25zZSBtZXNzYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU29hcEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklEZXNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0Lk1lc3NhZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgV1NFIGRlZmF1bHQgU09BUCB0cmFuc3BvcnQncyBJU2VyaWFsaXplciBhbmQgSURlc2VyaWFsaXplci4KLSAqLwotcHVibGljIGNsYXNzIFNPQVBNZXNzYWdlUHJvY2Vzc29yIGltcGxlbWVudHMgSVNlcmlhbGl6ZXIsIElEZXNlcmlhbGl6ZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVRFUkFMID0gImxpdGVyYWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPQVBfRU5DT0RJTkcgPSAiVVRGLTgiOwkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0uZ2V0UHJvcGVydGllcygpLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCQotCS8qCi0JICogQ29uc3RydWN0b3IuCi0JICovCi0JU09BUE1lc3NhZ2VQcm9jZXNzb3IoKSB7fQotCQotCS8qCi0JICogSm9pbiB0aGUgZW5jb2RpbmdTdHlsZXMgaW50byBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBqb2luRW5jb2RpbmdTdHlsZXMoTGlzdCBsaXN0KSB7Ci0JCQotCQlpZiAobGlzdC5pc0VtcHR5KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCUl0ZXJhdG9yIGl0ZXIgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkKLQkJCXNiLmFwcGVuZCgiICIpLmFwcGVuZChpdGVyLm5leHQoKSk7Ci0JCQotCQlyZXR1cm4gc2Iuc3Vic3RyaW5nKDEpLnRvU3RyaW5nKCk7Ci0JfQotCQotCS8qCi0JICogUmV0cmlldmVzIHRoZSBlbmNvZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBiaW5kaW5nIGZvciB0aGUgc2VsZWN0ZWQgb3BlcmF0aW9uLgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGZvciBSUEMgc3R5bGUgYmluZGluZ3MuICBUd28gcGllY2VzIG9mIGluZm9ybWF0aW9uIGFyZSByZXR1cm5lZDogIAotCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVuY29kaW5nIG5hbWVzcGFjZSBpbiBlbGVtZW50IFswXSAKLQkgKiBJZiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlbiB0aGUgZW5jb2Rpbmcgc3R5bGUocykgaXMgcmV0dXJuZWQgaW4gZWxlbWVudCBbMV0uICBJZiB0aGUgdXNlIGlzIGxpdGVyYWwsIAotCSAqIHRoZW4gZWxlbWVudFsxXSBpcyByZXR1cm5lZCBudWxsLgotCSAqLwotCXByaXZhdGUgU3RyaW5nW10gZ2V0RW5jb2RpbmdJbmZvKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKLQkJCi0JCVN0cmluZ1tdIGluZm8gPSBuZXcgU3RyaW5nW10geyBudWxsLCBudWxsIH07Ci0JCQotCQlJdGVyYXRvciBpdGVyID0gY29udGV4dC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0QmluZGluZ0lucHV0KCkKLQkJCS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkJCQotCQkvLyBsb29rIGZvciB0aGUgc29hcGJpbmQ6Ym9keSBleHRlbnNpbGliaXR5IGVsZW1lbnQKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVyLm5leHQoKTsJCQkKLQkJCWlmICghKGUgaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0JCQkJY29udGludWU7Ci0JCQkKLQkJCVNPQVBCb2R5IHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBlOwotCQkJCi0JCQlpbmZvWzBdID0gc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQkvLyB1c2U9ImVuY29kZWQiCi0JCQlpZiAoIUxJVEVSQUwuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKSkgewotCQkJCWluZm9bMV0gPSBqb2luRW5jb2RpbmdTdHlsZXMoc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKSk7Ci0JCQl9Ci0JCQkJCQotCQkJYnJlYWs7Ci0JCX0KLQkJCi0JCS8vIG5hbWVzcGFjZSBub3Qgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQsIHVzZSB0aGUgZGVmaW5pdGlvbidzCi0JCWlmIChpbmZvWzBdID09IG51bGwpCi0JCQlpbmZvWzBdID0gY29udGV4dC5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQotCQlyZXR1cm4gaW5mbzsKLQl9Ci0JCi0JLyoKLSAgICAgKiBXUy1JOiBJbiBhIHJwYy1saXRlcmFsIFNPQVAgYmluZGluZywgdGhlIHNlcmlhbGl6ZWQgY2hpbGQgZWxlbWVudCBvZiB0aGUgCi0gICAgICogc29hcDpCb2R5IGVsZW1lbnQgY29uc2lzdHMgb2YgYSB3cmFwcGVyIGVsZW1lbnQsIHdob3NlIG5hbWVzcGFjZSBpcyB0aGUgdmFsdWUgCi0gICAgICogb2YgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgb2YgdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudCBhbmQgd2hvc2UgbG9jYWwgbmFtZSBpcyAKLSAgICAgKiBlaXRoZXIgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiBvciB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHN1ZmZpeGVkIAotICAgICAqIHdpdGggIlJlc3BvbnNlIi4gVGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQsIGFzIG9wcG9zZWQgdG8gYmVpbmcgCi0gICAgICogb3B0aW9uYWwsIHRvIGVuc3VyZSB0aGF0IHRoZSBjaGlsZHJlbiBvZiB0aGUgc29hcDpCb2R5IGVsZW1lbnQgYXJlIG5hbWVzcGFjZS0KLSAgICAgKiBxdWFsaWZpZWQuCi0gICAgICovCi0JcHJpdmF0ZSBFbGVtZW50IGNyZWF0ZVJQQ1dyYXBwZXIoRG9jdW1lbnQgZG9jdW1lbnQsIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkgewotCQkKLQkJU3RyaW5nIGVuY29kaW5nTmFtZXNwYWNlVVJJID0gZ2V0RW5jb2RpbmdJbmZvKGNvbnRleHQpWzBdOwotCQkKLQkJcmV0dXJuIFNvYXBIZWxwZXIuY3JlYXRlUlBDV3JhcHBlckVsZW1lbnQoCi0JCQkJZG9jdW1lbnQsIAotCQkJCW5hbWVzcGFjZVRhYmxlLCAKLQkJCQllbmNvZGluZ05hbWVzcGFjZVVSSSwgCi0JCQkJY29udGV4dC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpLAotCQkJCW51bGwpOwotCX0KLQkKLQkvKgotCSAqIEluaXRpYWxpemVzIHRoZSBjb250ZW50cyBvZiBuZXcgSVNPQVBNZXNzYWdlLgotCSAqLwotCXZvaWQgaW5pdE1lc3NhZ2UoSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKTsKLQkJCQotCQkJSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJU29hcEhlbHBlci5hZGREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcyhuYW1lc3BhY2VUYWJsZSk7Ci0JCQkKLQkJCW1lc3NhZ2Uuc2V0RW52ZWxvcGUoU29hcEhlbHBlci5jcmVhdGVTb2FwRW52ZWxvcGVFbGVtZW50KGRvY3VtZW50LCBuYW1lc3BhY2VUYWJsZSkpOwotCQkJbWVzc2FnZS5zZXRIZWFkZXIoU29hcEhlbHBlci5jcmVhdGVTb2FwSGVhZGVyRWxlbWVudChkb2N1bWVudCkpOwotCQkJCi0JCQlFbGVtZW50IGJvZHkgPSBTb2FwSGVscGVyLmNyZWF0ZVNvYXBCb2R5RWxlbWVudChkb2N1bWVudCk7Ci0JCQlpZiAoIW1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKS5pc0RvY3VtZW50U3R5bGUoKSkgewotCQkJCUVsZW1lbnQgcnBjV3JhcHBlciA9IGNyZWF0ZVJQQ1dyYXBwZXIoZG9jdW1lbnQsIG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSwgbmFtZXNwYWNlVGFibGUpOwotCQkJCWJvZHkuYXBwZW5kQ2hpbGQocnBjV3JhcHBlcik7Ci0JCQl9CQkJCi0JCQltZXNzYWdlLnNldEJvZHkoYm9keSk7CQkJCi0JCQkKLQkJCW1lc3NhZ2Uuc2V0TmFtZXNwYWNlVGFibGUobmFtZXNwYWNlVGFibGUpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZSk7Ci0JCX0JCQotCX0KLQkKLQkvKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbG9jYWwgbmFtZSBmcm9tIHRoZSBzb2FwIGVudmVsb3BlIG5hbWVzcGFjZQotCSAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIG9uIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCB3ZSBoYXZlIHRvIGdpdmUKLQkgKiBpdCBhIG5hbWVzcGFjZSB0YWJsZSB0byBsb29rIHVwIHByZWZpeGVzLgotCSAqLwotCXByaXZhdGUgRWxlbWVudCBnZXRTT0FQRWxlbWVudChFbGVtZW50IHJvb3QsIFN0cmluZyBsb2NhbE5hbWUsIE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCQlTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgbmFtZXNwYWNlVGFibGUuZ2V0KENvbnN0YW50cy5VUklfU09BUDExX0VOVik7Ci0JCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJTm9kZUxpc3QgbGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUocHJlZml4ICsgIjoiICsgbG9jYWxOYW1lKTsKLQkJaWYgKGxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJcmV0dXJuIChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0JfQotCQotCS8qCi0JICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBsb2NhbCBuYW1lIGZyb20gdGhlIHNvYXAgZW52ZWxvcGUgbmFtZXNwYWNlLgotCSAqIFRoaXMgdmVyc2lvbiBhc3N1bWUgdGhlIGVsZW1lbnRzIGFyZSBuYW1lc3BhY2UgYXdhcmUuCi0JICovCi0JcHJpdmF0ZSBFbGVtZW50IGdldFNPQVBFbGVtZW50TlMoRWxlbWVudCByb290LCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0JCU5vZGVMaXN0IGxpc3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WLCBsb2NhbE5hbWUpOwotCQlpZiAobGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuIG51bGw7CQkKLQkKLQkJcmV0dXJuIChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0JfQotCQotCS8qCi0JICogQ29udmVydCBhIE5vZGVMaXN0IHRvIGEgdmVjdG9yIG9mIGVsZW1lbnRzLCBub2RlcyB3aGljaCBhcmUgbm90IGVsZW1lbnRzIGFyZSBza2lwcGVkLgotCSAqLwotCXByaXZhdGUgVmVjdG9yIHRvRWxlbWVudFZlY3RvcihOb2RlTGlzdCBub2RlcykgewotCQkKLQkJVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKLQkJCWlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLQkJICAgIAl2ZWN0b3IuYWRkKG5vZGUpOwkJICAgIAotCQl9Ci0JCQotCQlyZXR1cm4gdmVjdG9yOwkKLQl9Ci0JCi0JLyoKLQkgKiBDb252ZXJ0IGEgTm9kZUxpc3QgdG8gYW4gYXJyYXkgb2YgZWxlbWVudHMsIG5vZGVzIHdoaWNoIGFyZSBub3QgZWxlbWVudHMgYXJlIHNraXBwZWQuCi0JICovCi0JcHJpdmF0ZSBFbGVtZW50W10gdG9FbGVtZW50QXJyYXkoTm9kZUxpc3Qgbm9kZXMpIHsKLQkJVmVjdG9yIHZlY3RvciA9IHRvRWxlbWVudFZlY3Rvcihub2Rlcyk7Ci0JCUVsZW1lbnRbXSBlbGVtZW50cyA9IG5ldyBFbGVtZW50W3ZlY3Rvci5zaXplKCldOwotCQl2ZWN0b3IuY29weUludG8oZWxlbWVudHMpOwotCQlyZXR1cm4gZWxlbWVudHM7Ci0JfQotCQotCS8vIFNlcmlhbGl6ZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8JCi0JCi0JLyoKLQkgKiBhZGRzIHRoZSBlbmNvZGluZyBzdHlsZSBhdHRyaWJ1dGUgdG8gdGhlIGVhY2ggZWxlbWVudCBpbiB0aGUgZ2l2ZW4gYXJyYXkuCi0JICogbm9vcCBpZiBlbmNvZGluZ1N0eWxlIGlzIG51bGwKLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkRW5jb2RpbmdTdHlsZShFbGVtZW50W10gZWxlbWVudHMsIFN0cmluZyBlbmNvZGluZ1N0eWxlKSB7Ci0JCQkJCi0JCS8vIGVuY29kaW5nU3R5bGUgaXMgbm9uLW51bGwgb25seSBpZiB1c2U9ImVuY29kZWQiCi0JCWlmIChlbGVtZW50cyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGUgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCWZvciAoaW50IGk9MDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JICAgICAgICBpZiAoZWxlbWVudHNbaV0gPT0gbnVsbCkKLQkgICAgICAgIAljb250aW51ZTsKLQkgICAgCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZSgKLQkgICAgCQkJQ29uc3RhbnRzLk5TX1BSRUZJWF9TT0FQX0VOViArICI6IiArIENvbnN0YW50cy5BVFRSX0VOQ09ESU5HX1NUWUxFLCBlbmNvZGluZ1N0eWxlKTsJCQkKLQkJfQotCX0KLQkKLQkvKgotCSAqIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBlbGVtZW50cwotCSAqLwotCXByaXZhdGUgU3RyaW5nIHNlcmlhbGl6ZUVsZW1lbnRzKEVsZW1lbnRbXSBlbGVtZW50cykgewotCQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJCQkKLQkJCVN0cmluZyBzZXJpYWxpemVkRnJhZ21lbnQgPSBYTUxVdGlscy5zZXJpYWxpemUoZWxlbWVudHNbaV0sIHRydWUpOwotCQkJaWYgKHNlcmlhbGl6ZWRGcmFnbWVudCA9PSBudWxsKSB7Ci0JCQkJLy8gT24gU29tZSBKUkUncyAoU3VuIGphdmEgNSkgZWxlbWVudHMgd2l0aCBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgeHNpCi0JCQkJLy8gcHJlZml4IGRvIG5vdCBzZXJpYWxpemUgcHJvcGVybHkgYmVjYXVzZSB0aGUgbmFtZXNwYWNlIGNhbiBub3QKLQkJCQkvLyBiZSBmb3VuZCBzbyB0aGUgc3RyaW5nIHJldHVybmVkIGNvbWVzIGJhY2sgYXMgbnVsbC4gVG8gd29ya2Fyb3VuZAotCQkJCS8vIHRoaXMgcHJvYmxlbSB0cnkgYWRkaW5nIGluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gYXR0cmlidXRlCi0JCQkJLy8gYW5kIHJldHJ5IHRoZSBzZXJpYWxpemF0aW9uIChidWcgMTQ0ODI0KQkJCSAKLQkJCQllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzaSIsIENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNJKTsKLQkJCQlzZXJpYWxpemVkRnJhZ21lbnQgPSBYTUxVdGlscy5zZXJpYWxpemUoZWxlbWVudHNbaV0sIHRydWUpOwotCQkJfQotCQkJCi0JCQlidWZmZXIuYXBwZW5kKHNlcmlhbGl6ZWRGcmFnbWVudCk7Ci0JCQlidWZmZXIuYXBwZW5kKExJTkVfU0VQQVJBVE9SKTsKLQkJfQotCQkKLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCS8qCi0JICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gbWVzc2FnZSBpcyBhIHJlcXVlc3QgbWVzc2FnZSB1c2luZyBSUEMgc3R5bGUKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNSUENSZXF1ZXN0KElTT0FQTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCXJldHVybiAKLQkJCSFtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuaXNEb2N1bWVudFN0eWxlKCkgJiYJCQkJCQkJLy8gcnBjIHN0eWxlCi0JCQkhQm9vbGVhbi5UUlVFLmVxdWFscyhtZXNzYWdlLmdldFByb3BlcnR5KFNPQVBUcmFuc3BvcnQuUFJPUF9SRUFEX09OTFkpKTsJLy8gbm90IHJlYWQtb25seQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTZXJpYWxpemVyI3NlcmlhbGl6ZShpbnQsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc2VyaWFsaXplKGludCBwYXJ0LCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0KLQkJc3dpdGNoIChwYXJ0KSB7Ci0JCQljYXNlIElTT0FQTWVzc2FnZS5FTlZFTE9QRToKLQkJCQlFbGVtZW50IGVudmVsb3BlID0gbWVzc2FnZS5nZXRFbnZlbG9wZSh0cnVlKTsKLQkJCQkKLQkJCQlpZiAoaXNSUENSZXF1ZXN0KG1lc3NhZ2UpKSB7CQkJCQkKLQkJCQkJRWxlbWVudCBib2R5ID0gZ2V0U09BUEVsZW1lbnROUyhlbnZlbG9wZSwgQ29uc3RhbnRzLkVMRU1fQk9EWSk7Ci0JCQkJCWlmIChib2R5ID09IG51bGwpCi0JCQkJCQlib2R5ID0gZ2V0U09BUEVsZW1lbnQoZW52ZWxvcGUsIENvbnN0YW50cy5FTEVNX0JPRFksIG1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7Ci0JCQkJCQotCQkJCQlpZiAoYm9keSAhPSBudWxsKSB7Ci0JCQkJCQlFbGVtZW50W10gYm9keUNvbnRlbnQgPSB0b0VsZW1lbnRBcnJheShib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRDaGlsZE5vZGVzKCkpOwotCQkJCQkJYWRkRW5jb2RpbmdTdHlsZShib2R5Q29udGVudCwgZ2V0RW5jb2RpbmdJbmZvKG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSlbMV0pOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCVN0cmluZyB4bWwgPSBYTUxVdGlscy5zZXJpYWxpemUoZW52ZWxvcGUsIHRydWUpOwotCQkJCWlmICh4bWwgPT0gbnVsbCkKLQkJCQkJeG1sID0gbmV3IFN0cmluZygoYnl0ZVtdKSBtZXNzYWdlLmdldFByb3BlcnR5KFNPQVBUcmFuc3BvcnQuUFJPUF9SQVdfQllURVMpKTsKLQkJCQkKLQkJCQlyZXR1cm4geG1sOwotCQkJCQotCQkJY2FzZSBJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQ6Ci0JCQkJcmV0dXJuIHNlcmlhbGl6ZUVsZW1lbnRzKG1lc3NhZ2UuZ2V0SGVhZGVyQ29udGVudCgpKTsKLQkJCQkKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVDoJCQkJCi0JCQkJRWxlbWVudFtdIGJvZHlDb250ZW50ID0gbWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotCQkJCQotCQkJCWlmIChpc1JQQ1JlcXVlc3QobWVzc2FnZSkpCi0JCQkJCWFkZEVuY29kaW5nU3R5bGUoYm9keUNvbnRlbnQsIGdldEVuY29kaW5nSW5mbyhtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkpWzFdKTsKLQkJCQkKLQkJCQlyZXR1cm4gc2VyaWFsaXplRWxlbWVudHMoYm9keUNvbnRlbnQpOwotCQl9Ci0JCQotCQlyZXR1cm4gIiI7Ci0JfQotCQotCS8vIERlc2VyaWFsaXplIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8JCQotCQkKLQkvKgotCSAqIFJldHJpZXZlIHRoZSBzb2FwIGhlYWRlciBmcm9tIHRoZSBlbnZlbG9wZSBhbmQgcG9wdWxhdGUgdGhlIGdpdmVuIG1lc3NhZ2UKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0hlYWRlcihFbGVtZW50IGVudmVsb3BlLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgewotCQkKLQkJRWxlbWVudCBoZWFkZXIgPSBnZXRTT0FQRWxlbWVudE5TKGVudmVsb3BlLCBDb25zdGFudHMuRUxFTV9IRUFERVIpOwotCQlpZiAoaGVhZGVyID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQltZXNzYWdlLnNldEhlYWRlcihoZWFkZXIpOwotCQltZXNzYWdlLnNldEhlYWRlckNvbnRlbnQodG9FbGVtZW50QXJyYXkoaGVhZGVyLmdldENoaWxkTm9kZXMoKSkpOwotCX0KLQkKLQkvKgotCSAqIEhBQ0sgLSBUaGUgcm9vdCBlbGVtZW50IHRhZyBuYW1lIG9mIHRoZSBpbnN0YW5jZSBkb2N1bWVudAotCSAqIGlzIGFtYmlndW91cy4gIEl0IGxhbmRzIG9uIGEgdmVyeSBncmV5IGFyZWEgYmV0d2VlbiB0aGUgU09BUAotCSAqIHNwZWMgYW5kIHRoZSBXU0RMIHNwZWMuICBUaGUgdHdvIHNwZWNzIGRvIG5vdCBleHBsaWNpdGx5IGRlZmluZQotCSAqIHRoYXQgdGhlIHJvb3QgZWxlbWVudCB0YWcgbmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZQotCSAqIFdTREwgcGFydC4gIFRoZSBoYWNrIGlzIHRvIHRyZWF0IGVsZW1lbnRzIHdpdGggZGlmZmVyZW50IHRhZyBuYW1lcwotCSAqIGFzIGluc3RhbmNlcyBvZiB0aGUgV1NETCBwYXJ0LgotCSAqLwotCXByaXZhdGUgRWxlbWVudFtdIGZpeFNPQVBSZXNwb25zZShOb2RlTGlzdCBpbnN0YW5jZUxpc3QsIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKLQkJCi0JCVZlY3RvciBpbnN0YW5jZVZlY3RvciA9IHRvRWxlbWVudFZlY3RvcihpbnN0YW5jZUxpc3QpOwkJCi0JCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlVmVjdG9yLnNpemUoKV07Ci0JCQotCQlPcGVyYXRpb24gb3BlciA9IGNvbnRleHQuZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwkJCi0JCU1hcCBwYXJ0c01hcCA9IG9wZXIuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCk7Ci0JCQotCQlpZiAocGFydHNNYXAuc2l6ZSgpID09IDEpIHsKLQkJCUl0ZXJhdG9yIGl0ID0gcGFydHNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0JCQkKLQkJCVN0cmluZyBmcmFnTmFtZTsKLQkJCWlmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLQkJCQlmcmFnTmFtZSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCWVsc2UKLQkJCQlmcmFnTmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkgICAgCi0JCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0JCSAgICAJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGluc3RhbmNlVmVjdG9yLmdldChpKTsKLQkJICAgIAkKLQkJICAgIAlpZiAoIWVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGZyYWdOYW1lKSkgewotCQkgICAgCQlEb2N1bWVudCBkb2MgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJICAgIAkJTm9kZUxpc3QgY2hpbGRyZW4gPSBlbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQkJICAgIAkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJICAgIAkJZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KGZyYWdOYW1lKTsKLQkJICAgIAkJCi0JCSAgICAJCWZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGorKykgewotCQkgICAgCQkJaWYgKGNoaWxkcmVuLml0ZW0oaikgIT0gbnVsbCkgewotCQkgICAgCQkJCWVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW4uaXRlbShqKSk7Ci0JCQkJICAgICAgICAgICAgLy8gV2hlbiB5b3UgYXBwZW5kIGEgbm9kZSBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIsCi0JCQkJICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGVsZW1lbnQgd2lsbCBsb3NlIGl0cyByZWZlcmVuY2UgdG8gdGhpcyBub2RlLAotCQkJCSAgICAgICAgICAgIC8vIHRoZXJlZm9yZSwgdGhlIHNpemUgb2YgdGhlIG5vZGUgbGlzdCB3aWxsIGRlY3JlYXNlIGJ5IDEuCi0JCQkJICAgICAgICAgICAgai0tOwotCQkgICAgCQkJfQotCQkgICAgCQl9Ci0JCSAgICAJCQotCQkgICAgCQlmb3IgKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGorKykgewotCQkgICAgCQkJT2JqZWN0IGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaik7Ci0JCSAgICAJCQlpZiAoYXR0ciAhPSBudWxsICYmIChhdHRyIGluc3RhbmNlb2YgQXR0cikpIHsKLQkJICAgIAkJCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKWF0dHI7Ci0JCSAgICAJCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLmdldE5hbWUoKSwgYXR0cmlidXRlLmdldFZhbHVlKCkpOwotCQkgICAgCQkJfQotCQkgICAgCQl9Ci0JCSAgICAJfQotCQkgICAgCWluc3RhbmNlRG9jdW1lbnRzW2ldID0gZWxlbWVudDsKLQkJICAgIH0KLQkJfQotCQllbHNlCi0JCQlpbnN0YW5jZVZlY3Rvci5jb3B5SW50byhpbnN0YW5jZURvY3VtZW50cyk7Ci0JCQotCQlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0JfQotCQotCS8qCi0JICogUmV0cmlldmUgdGhlIHNvYXAgaGVhZGVyIGZyb20gdGhlIGVudmVsb3BlIGFuZCBwb3B1bGF0ZSB0aGUgZ2l2ZW4gbWVzc2FnZQotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzQm9keShFbGVtZW50IGVudmVsb3BlLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgewotCQkKLQkJRWxlbWVudCBib2R5ID0gZ2V0U09BUEVsZW1lbnROUyhlbnZlbG9wZSwgQ29uc3RhbnRzLkVMRU1fQk9EWSk7Ci0JCWlmIChib2R5ID09IG51bGwpCi0JCQlyZXR1cm47CQkJCQotCQkKLQkJbWVzc2FnZS5zZXRCb2R5KGJvZHkpOwotCQkKLQkJLy8gY2hlY2sgZm9yIHNvYXAgZmF1bHQKLQkJRWxlbWVudCBmYXVsdCA9IGdldFNPQVBFbGVtZW50TlMoYm9keSwgQ29uc3RhbnRzLkVMRU1fRkFVTFQpOwotCSAgICBpZiAoZmF1bHQgIT0gbnVsbCkgewotCSAgICAJbWVzc2FnZS5zZXRGYXVsdChmYXVsdCk7Ci0JICAgIAlyZXR1cm47Ci0JICAgIH0KLQkgICAgICAgIAkgICAgICAgIAotCSAgICBOb2RlTGlzdCBpbnN0YW5jZUxpc3Q7Ci0JICAgIAotCSAgICBpZiAobWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLmlzRG9jdW1lbnRTdHlsZSgpKQotCSAgICAJaW5zdGFuY2VMaXN0ID0gYm9keS5nZXRDaGlsZE5vZGVzKCk7Ci0JICAgIGVsc2UgewotCSAgICAgICAgTm9kZUxpc3QgcnBjV3JhcHBlciA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsIAotCSAgICAgICAgCQltZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQotCSAgICAgICAgLyoKLQkgICAgICAgICogSEFDSyAtIFNvbWUgb2YgdGhlIHdlYiBzZXJ2aWNlcyBvdXQgb24gdGhlIGludGVybmV0IGRvIG5vdAotCSAgICAgICAgKiBzZXQgdGhlaXIgUlBDIHdyYXBwZXIgcHJvcGVybHkuICBJdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBvdXRwdXQKLQkgICAgICAgICogbWVzc2FnZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBvcGVyYXRpb24uICBUaGUgaGFjayBpcyB0bwotCSAgICAgICAgKiBhc3N1bWUgdGhlIGZpcnN0IGVsZW1lbnQgaW5zaWRlIHRoZSBib2R5IGVsZW1lbnQgaXMgdGhlCi0JICAgICAgICAqIFJQQyB3cmFwcGVyLgotCSAgICAgICAgKi8KLQkgICAgICAgIGlmIChycGNXcmFwcGVyLmdldExlbmd0aCgpIDw9IDApCi0JICAgICAgICAJcnBjV3JhcHBlciA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsICIqIik7Ci0KLQkgICAgICAgIGlmIChycGNXcmFwcGVyLmdldExlbmd0aCgpID4gMCkKLQkgICAgICAgIAlpbnN0YW5jZUxpc3QgPSBycGNXcmFwcGVyLml0ZW0oMCkuZ2V0Q2hpbGROb2RlcygpOwotCSAgICAgICAgZWxzZQotCSAgICAgICAgCXJldHVybjsKLQkgICAgfQotCSAgICAKLQkgICAgbWVzc2FnZS5zZXRCb2R5Q29udGVudChmaXhTT0FQUmVzcG9uc2UoaW5zdGFuY2VMaXN0LCBtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkpKTsKLQl9Ci0JCi0JLyoKLQkgKiBEZXNlcmlhbGl6ZSB0aGUgYnl0ZSBhcnJheSBpbnRvIHRoZSBnaXZlbiBzb2FwIG1lc3NhZ2UuICBUaGUgcGFydCBwYXJhbWV0ZXJzIHRlbGxzCi0JICogdGhlIG1ldGhvZCB3aGV0aGVyIHRoZSBpbnB1dCBpcyB0aGUgd2hvbGUgZW52ZWxvcCBvciBqdXN0IHRoZSBjb250ZW50cyBvZiB0aGUKLQkgKiBoZWFkZXIgb3IgYm9keS4gCi0JICovCi0Jdm9pZCBkZXNlcmlhbGl6ZShpbnQgcGFydCwgYnl0ZVtdIHhtbCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cwkJCi0JCVBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sCi0JCVNBWEV4Y2VwdGlvbiwKLQkJSU9FeGNlcHRpb24gewotCQkKLQkJRWxlbWVudCByb290ID0gWE1MVXRpbHMuYnl0ZUFycmF5VG9FbGVtZW50KHhtbCwgdHJ1ZSk7CQkKLQkJCi0JCXN3aXRjaCAocGFydCkgewotCQkJY2FzZSBJU09BUE1lc3NhZ2UuRU5WRUxPUEU6CQkJCSAKLQkJCQltZXNzYWdlLnNldEVudmVsb3BlKHJvb3QpOwotCQkJCXByb2Nlc3NIZWFkZXIocm9vdCwgbWVzc2FnZSk7Ci0JCQkJcHJvY2Vzc0JvZHkocm9vdCwgbWVzc2FnZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElTT0FQTWVzc2FnZS5IRUFERVJfQ09OVEVOVDoKLQkJCQltZXNzYWdlLnNldEhlYWRlckNvbnRlbnQodG9FbGVtZW50QXJyYXkocm9vdC5nZXRDaGlsZE5vZGVzKCkpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVDoKLQkJCQltZXNzYWdlLnNldEJvZHlDb250ZW50KHRvRWxlbWVudEFycmF5KHJvb3QuZ2V0Q2hpbGROb2RlcygpKSk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBUYWNrIG9uIGEgcm9vdCBlbGVtZW50IHRoZSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyBhIHNlcmllcyBvZiBlbGVtZW50cy4KLQkgKiBUaGlzIGlzIG5lZWRlZCB0byBkZXNlcmlhbGl6ZSB0aGUgc3RyaW5nLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGFkZFJvb3RFbGVtZW50KFN0cmluZyB4bWwsIE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JICAgIHNiLmFwcGVuZCgiPHJvb3QiKTsKLQkgICAgCi0JICAgIEl0ZXJhdG9yIGl0ZXIgPSBuYW1lc3BhY2VUYWJsZS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkgICAgCU9iamVjdCB1cmkgPSBpdGVyLm5leHQoKTsKLQkgICAgCU9iamVjdCBwcmVmaXggPSBuYW1lc3BhY2VUYWJsZS5nZXQodXJpKTsKLQkgICAgCXNiLmFwcGVuZCgiICIpLmFwcGVuZCgieG1sbnM6IikuYXBwZW5kKHByZWZpeCkuYXBwZW5kKCI9XCIiKS5hcHBlbmQodXJpKS5hcHBlbmQoIlwiIik7Ci0JICAgIH0JICAgIAotCSAgICAKLQkgICAgc2IuYXBwZW5kKCI+IikuYXBwZW5kKHhtbCkuYXBwZW5kKCI8L3Jvb3Q+Iik7Ci0JICAgIHJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklEZXNlcmlhbGl6ZXIjZGVzZXJpYWxpemUoaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkZXNlcmlhbGl6ZShpbnQgcGFydCwgU3RyaW5nIHhtbCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJaWYgKHBhcnQgIT0gSVNPQVBNZXNzYWdlLkVOVkVMT1BFKQotCQkJeG1sID0gYWRkUm9vdEVsZW1lbnQoeG1sLCBtZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCkpOwotCQkKLQkJdHJ5IHsKLQkJCWRlc2VyaWFsaXplKHBhcnQsIHhtbC5nZXRCeXRlcyhERUZBVUxUX1NPQVBfRU5DT0RJTkcpLCBtZXNzYWdlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTQ5MmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLQotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklEZXNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5TT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLQotLyoqCi0gKiBXU0UncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElTT0FQVHJhbnNwb3J0Ci0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQVHJhbnNwb3J0IGltcGxlbWVudHMgSVNPQVBUcmFuc3BvcnQgewotCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1JFQURfT05MWSA9ICJwcm9wX3JlYWRfb25seSI7Ci0Jc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1JBV19CWVRFUyA9ICJwcm9wX3Jhd19ieXRlcyI7Ci0JCi0JLyoKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKi8KLQlTT0FQVHJhbnNwb3J0KCkge30KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQjbmV3U2VyaWFsaXplcigpCi0JICovCi0JcHVibGljIElTZXJpYWxpemVyIG5ld1NlcmlhbGl6ZXIoKSB7CQkKLQkJcmV0dXJuIG5ldyBTT0FQTWVzc2FnZVByb2Nlc3NvcigpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0I25ld0Rlc2VyaWFsaXplcigpCi0JICovCi0JcHVibGljIElEZXNlcmlhbGl6ZXIgbmV3RGVzZXJpYWxpemVyKCkgewotCQlyZXR1cm4gbmV3IFNPQVBNZXNzYWdlUHJvY2Vzc29yKCk7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgYmluZGluZyBpcyBzdXBwb3J0ZWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgY2hlY2tCaW5kaW5nKEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmcpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJU3RyaW5nIGJpbmRpbmdVUkkgPSBiaW5kaW5nLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQotCQkvLyBsb29raW5nIGZvciBTT0FQIDEuMSBiaW5kaW5nCi0JCWlmICghKGJpbmRpbmcgaW5zdGFuY2VvZiBTT0FQQmluZGluZykgfHwKLQkJCSFDb25zdGFudHMuVVJJX1dTREwxMV9TT0FQLmVxdWFscyhiaW5kaW5nVVJJKSkKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oRXhwbG9yZXJQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9VTlNVUFBPUlRFRF9CSU5ESU5HIiwgbmV3IFN0cmluZ1tdIHsgYmluZGluZ1VSSSB9KSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQjbmV3TWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0Lk1lc3NhZ2VDb250ZXh0KQotCSAqLwotCXB1YmxpYyBJU09BUE1lc3NhZ2UgbmV3TWVzc2FnZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCWNoZWNrQmluZGluZyhjb250ZXh0LmdldEJpbmRpbmdQcm90b2NvbCgpKTsKLQkJCi0JCVNPQVBNZXNzYWdlUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBTT0FQTWVzc2FnZVByb2Nlc3NvcigpOwotCQlJU09BUE1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBTT0FQTWVzc2FnZShjb250ZXh0LCBwcm9jZXNzb3IpOwotCQlwcm9jZXNzb3IuaW5pdE1lc3NhZ2UobWVzc2FnZSk7CQkJCi0JCXJldHVybiBtZXNzYWdlOwkJCQkKLQl9Ci0JCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgbWVzc2FnZSB1c2VzIGEgYmluZGluZyBhbmQgdHJhbnNwb3J0IHRoYXQgd2Ugc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgY2hlY2tNZXNzYWdlKElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCUV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmcgPSBtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuZ2V0QmluZGluZ1Byb3RvY29sKCk7IAotCQljaGVja0JpbmRpbmcoYmluZGluZyk7Ci0JCQotCQlTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IChTT0FQQmluZGluZykgYmluZGluZzsgCi0JCQkKLQkJaWYgKCFDb25zdGFudHMuVVJJX1NPQVAxMV9IVFRQLmVxdWFscyhzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSkpCi0JCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKEV4cGxvcmVyUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfVU5TVVBQT1JURURfVFJBTlNQT1JUIiwgbmV3IFN0cmluZ1tdIHsgc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkgfSkpOwotCX0KLQkJCi0JLyoKLQkgKiBDcmVhdGUgYW4gSFRUUFRyYW5zcG9ydCBmb3IgaW50ZXJuYWwgdXNlLgotCSAqLwotCXByaXZhdGUgSFRUUFRyYW5zcG9ydCBjcmVhdGVJbnRlcm5hbFRyYW5zcG9ydChTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewotCi0JCUhUVFBUcmFuc3BvcnQgaW50ZXJuYWxUcmFuc3BvcnQgPSBuZXcgSFRUUFRyYW5zcG9ydCgpOwotCQkgICAgCi0JCWlmICh1c2VybmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpIHsKLQkJCWludGVybmFsVHJhbnNwb3J0LnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZSh1c2VybmFtZSk7Ci0JCQlpbnRlcm5hbFRyYW5zcG9ydC5zZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQocGFzc3dvcmQpOwotCQl9Ci0JCQotCQlyZXR1cm4gaW50ZXJuYWxUcmFuc3BvcnQ7Ci0JfQkKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0I3NlbmQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UpCi0JICovCi0JcHVibGljIElTT0FQTWVzc2FnZSBzZW5kKFN0cmluZyB1cmwsIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCQotCQljaGVja01lc3NhZ2UobWVzc2FnZSk7CQkJCi0JCQkJCQkJCQotCQl0cnkgewotCQkJSFRUUFRyYW5zcG9ydCBpbnRlcm5hbFRyYW5zcG9ydCA9IGNyZWF0ZUludGVybmFsVHJhbnNwb3J0KHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0JCQlpbnRlcm5hbFRyYW5zcG9ydC5zZW5kKE5ldFV0aWxzLmNyZWF0ZVVSTCh1cmwpLCAoU3RyaW5nKSBtZXNzYWdlLmdldFByb3BlcnR5KElTT0FQTWVzc2FnZS5QUk9QX1NPQVBfQUNUSU9OKSwgbWVzc2FnZS50b1hNTCgpKTsKLQkJCQotCQkJU09BUE1lc3NhZ2VQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFNPQVBNZXNzYWdlUHJvY2Vzc29yKCk7Ci0JCQlJU09BUE1lc3NhZ2UgcmVwbHkgPSBuZXcgU09BUE1lc3NhZ2UobWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLCBwcm9jZXNzb3IpOwotCQkJcmVwbHkuc2V0UHJvcGVydHkoUFJPUF9SRUFEX09OTFksIEJvb2xlYW4uVFJVRSk7Ci0JCQkKLQkJCWJ5dGVbXSByYXdCeXRlcyA9IGludGVybmFsVHJhbnNwb3J0LnJlY2VpdmVCeXRlcygpOwotCQkJCi0JCQl0cnkgeyAKLQkJCQlwcm9jZXNzb3IuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkVOVkVMT1BFLCByYXdCeXRlcywgcmVwbHkpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gaWYgZXJyb3Igb2NjdXJzIGR1cmluZyBkZXNlcmlhbGl6YXRpb24sIHdlIHdhbnQgdG8gc2F2ZSBhIGNvcHkgb2YgdGhlIGFjdHVhbCByYXcgYnl0ZXMKLQkJCQlyZXBseS5zZXRQcm9wZXJ0eShQUk9QX1JBV19CWVRFUywgcmF3Qnl0ZXMpOwotCQkJfQotCQkJCQkKLQkJCXJldHVybiByZXBseTsKLQkJfQotCQljYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IGU7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIAl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKGUpOwotCSAgICB9CQkJCi0JfQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODczYzUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXI7Ci0KLS8qKgotICogV1NFJ3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgSVNPQVBUcmFuc3BvcnRQcm92aWRlci4KLSAqLwotcHVibGljIGNsYXNzIFNPQVBUcmFuc3BvcnRQcm92aWRlciBpbXBsZW1lbnRzIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgewkKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXIjbmV3VHJhbnNwb3J0KCkKLQkgKi8KLQlwdWJsaWMgSVNPQVBUcmFuc3BvcnQgbmV3VHJhbnNwb3J0KCkgewotCQlyZXR1cm4gbmV3IFNPQVBUcmFuc3BvcnQoKTsJCQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NPQVBNZXNzYWdlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NPQVBNZXNzYWdlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI0ZWQ3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9TT0FQTWVzc2FnZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA3MDUxMCAgIDE4NjM3NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ29tcGlsZSBlcnJvcnMgaW4gd3N0LndzLmV4cGxvcmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBoYXMgc29tZSBjb21tb24gcm91dGluZXMgdXNlZCBieSB0aGUgV2ViIFNlcnZpY2VzIGV4cGxvcmVyIHRvIHdvcmsgd2l0aCBJU09BUE1lc3NhZ2VzLgotICovCi1wdWJsaWMgY2xhc3MgU09BUE1lc3NhZ2VVdGlscyB7Ci0JCi0JLyoqCi0JICogRGVjb2RlcyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIHRoYXQgaGF2ZSBiZWVuIGVuY29kZWQgYnkgV1NFIGludG8gdGhlIG9wZXJhdGlvbiBlbGVtZW50IG9mIHRoZSBXU0RMIG1vZGVsLgotCSAqIFRoZSBkZWNvZGVkIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UgdGFibGUuCi0JICogIAotCSAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBUaGUgbmFtZXNwYWNlIHRhYmxlIHRvIHBvcHVsYXRlLgotCSAqIEBwYXJhbSBvcGVyRWxlbWVudCBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgd2l0aCB0aGUgZW5jb2RlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBuZXcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcmUgZm91bmQgYW5kIGFkZGVkIHRvIHRoZSBuYW1lc3BhY2UgdGFibGUsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVjb2RlTmFtZXNwYWNlVGFibGUoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCkgewotCQkJCi0JCWJvb2xlYW4gdXBkYXRlZCA9IGZhbHNlOwotCi0JCVN0cmluZ1tdIG5zRGVjbGFyYXRpb25zID0gKFN0cmluZ1tdKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7Ci0JCWlmIChuc0RlY2xhcmF0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCS8vIGVhY2ggbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGlzIGRlY29kZWQgaW50byAyIHBhcnRzOiB0aGUgcHJlZml4IAotCQkvLyBpbiBlbGVtZW50IFswXSBhbmQgdGhlIG5hbWVzcGFjZSB1cmkgaW4gZWxlbWVudCBbMV0uCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbnNEZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZ1tdIHByZWZpeF9ucyA9IFNvYXBIZWxwZXIuZGVjb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24obnNEZWNsYXJhdGlvbnNbaV0pOwotCQkJCi0JCQkvLyBjaGVjayBpZiB0aGUgbmFtZXNwYWNlIHVyaSBpcyBhbHJlYWR5IGEga2V5IGluIHRoZSBuYW1lc3BhY2UgdGFibGUKLQkJCS8vIGlmIGl0IGlzLCBkb24ndCBhZGQgaXQKLQkJCWlmICghc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuY29udGFpbnNLZXkocHJlZml4X25zWzFdKSkgewotCQkJICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChwcmVmaXhfbnNbMV0sIHByZWZpeF9uc1swXSk7Ci0JCQkgICAgdXBkYXRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiB1cGRhdGVkOwotCX0KLQotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBoZWFkZXIgY29udGVudCBvZiB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlIHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSBXU0UncyBmcmFnbWVudCBtb2RlbAotCSAqIAotCSAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBBIG5hbWVzcGFjZSB0YWJsZSB0byB1c2UgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLgotCSAqIEBwYXJhbSBvcGVyRWxlbWVudCBBY2Nlc3MgV1NFJ3MgZnJhZ21lbnRzIHZpYSB0aGlzIG9wZXJhdGlvbiBlbGVtZW50LiAKLQkgKiBAcGFyYW0gc29hcE1lc3NhZ2UgVGhlIElTT0FQTWVzc2FnZSB0byBwb3B1bGF0ZS4KLQkgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0SGVhZGVyQ29udGVudEZyb21Nb2RlbChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0JCXRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkgICAgCi0JCVZlY3RvciBoZWFkZXJFbnRyaWVzID0gbmV3IFZlY3RvcigpOwotCSAgICAKLQkgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7Ci0JICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgICAgCVNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7Ci0JICAgIAlib29sZWFuIGlzVXNlTGl0ZXJhbCA9ICJsaXRlcmFsIi5lcXVhbHMoc29hcEhlYWRlci5nZXRVc2UoKSk7ICAgICAgICAgICAKLQkgICAgCUlYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudCkgb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0JICAgIAlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcygKLQkgICAgCQkJIWlzVXNlTGl0ZXJhbCwgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIHNvYXBNZXNzYWdlLmdldEVudmVsb3BlKGZhbHNlKS5nZXRPd25lckRvY3VtZW50KCkpOwotCSAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotCSAgICAJCWlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotCSAgICAJCQljb250aW51ZTsKLQkgICAgCQloZWFkZXJFbnRyaWVzLmFkZEVsZW1lbnQoaW5zdGFuY2VEb2N1bWVudHNbaV0pOwotCSAgICAJfQotCSAgICB9Ci0KLQkgICAgRWxlbWVudFtdIGhlYWRlckNvbnRlbnQgPSBuZXcgRWxlbWVudFtoZWFkZXJFbnRyaWVzLnNpemUoKV07Ci0JICAgIGhlYWRlckVudHJpZXMuY29weUludG8oaGVhZGVyQ29udGVudCk7Ci0JICAgIAotCSAgICBzb2FwTWVzc2FnZS5zZXRIZWFkZXJDb250ZW50KGhlYWRlckNvbnRlbnQpOwotCX0KLQotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBib2R5IGNvbnRlbnQgb2YgdGhlIGdpdmVuIElTT0FQTWVzc2FnZSB1c2luZyB0aGUgdmFsdWVzIGZyb20gV1NFJ3MgZnJhZ21lbnQgbW9kZWwKLQkgKiAKLQkgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgQSBuYW1lc3BhY2UgdGFibGUgdG8gdXNlIGR1cmluZyB0aGlzIG9wZXJhdGlvbi4KLQkgKiBAcGFyYW0gb3BlckVsZW1lbnQgQWNjZXNzIFdTRSdzIGZyYWdtZW50cyB2aWEgdGhpcyBvcGVyYXRpb24gZWxlbWVudC4gCi0JICogQHBhcmFtIHNvYXBNZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gcG9wdWxhdGUuCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldEJvZHlDb250ZW50RnJvbU1vZGVsKEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkKLQkJdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotCQkKLQkgICAgVmVjdG9yIGJvZHlFbnRyaWVzID0gbmV3IFZlY3RvcigpOwotCSAgICBib29sZWFuIGlzVXNlTGl0ZXJhbCA9IG9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpOwotCi0JICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0JICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgICAgCVBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLQkgICAgCUlYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudCkgb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0JICAgIAlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcygKLQkgICAgCQkJICFpc1VzZUxpdGVyYWwsIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZShmYWxzZSkuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLQkgICAgCQlpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLQkgICAgCQkJY29udGludWU7Ci0JICAgIAkJYm9keUVudHJpZXMuYWRkRWxlbWVudChpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0JICAgIAl9Ci0JICAgIH0KLQotCSAgICBFbGVtZW50W10gYm9keUNvbnRlbnQgPSBuZXcgRWxlbWVudFtib2R5RW50cmllcy5zaXplKCldOwotCSAgICBib2R5RW50cmllcy5jb3B5SW50byhib2R5Q29udGVudCk7Ci0JICAgIAotCSAgICBzb2FwTWVzc2FnZS5zZXRCb2R5Q29udGVudChib2R5Q29udGVudCk7Ci0JfQotCQotCS8qCi0JICogSWYgdGhlIGF0dHJpYnV0ZSBpcyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwgdGhlIG5hbWVzcGFjZSBwcmVmaXggaXMgcmV0dXJuZWQuCi0JICogT3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE5TUHJlZml4KEF0dHIgYXR0cmlidXRlKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cmlidXRlLmdldE5hbWUoKTsKLQkJaWYgKG5hbWUuc3RhcnRzV2l0aCgieG1sbnM6IikpCi0JCQlyZXR1cm4gbmFtZS5zdWJzdHJpbmcoNik7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKgotCSAqIGxvb2t1cCB0aGUgcHJlZml4IG9mIHRoZSBuYW1lc3BhY2VVUkksIGFzc3VtaW5nIHRoYXQgaXQgaXMgZGVjbGFyZWQgb24gdGhlIGVsZW1lbnQgaXRzZWxmCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGxvb2t1cFByZWZpeChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2VVUkkpIHsKLQkJCi0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgcHJlZml4ID0gZ2V0TlNQcmVmaXgoYXR0cmlidXRlKTsKLQkJCWlmIChwcmVmaXggIT0gbnVsbCAmJiBhdHRyaWJ1dGUuZ2V0VmFsdWUoKS5lcXVhbHMobmFtZXNwYWNlVVJJKSkKLQkJCQlyZXR1cm4gcHJlZml4OwotCQl9CQkKLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhbiBhcnJheSBvZiBlbGVtZW50cywgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgbWF0Y2hlcwotCSAqIHRoZSBnaXZlbiBQYXJ0LiAgQSBtYXRjaCBpcyBkZXRlcm1pbmVkIGJ5IGNvbXBhcmluZyB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBQYXJ0IGFuZCBFbGVtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gcGFydCBUaGUgUGFydCAKLQkgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGFycmF5IG9mIEVsZW1lbnRzCi0JICogQHBhcmFtIG5hbWVzcGFjZVRhYmxlIEEgbmFtZXNwYWNlIHRhYmxlIGZvciBsb29raW5nIHVwIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkgKiBAcGFyYW0gZnJhZ05hbWUgTmFtZSBvZiB0aGUgUGFydCdzIGZyYWdtZW50IChlc3NlbnRpYWxseSB0aGUgUGFydCdzIGxvY2FsIG5hbWUpLgotCSAqIEBwYXJhbSBzdGFydCBUaGUgaW5kZXggdG8gYmVnaW4gdGhlIHNlYXJjaC4KLQkgKiBAcmV0dXJuIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBpbnQgZmluZEZpcnN0TWF0Y2hpbmdFbGVtZW50KFBhcnQgcGFydCwgRWxlbWVudFtdIGVsZW1lbnRzLCBNYXAgbmFtZXNwYWNlVGFibGUsIFN0cmluZyBmcmFnTmFtZSwgaW50IHN0YXJ0KSB7Ci0JCQotCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0gbnVsbDsKLQkJU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0JCQotCQkvLyB0cnkgdG8gZ2V0IHRoZSBwcmVmaXgKLQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSB7Ci0JCQluYW1lc3BhY2VVUkkgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQlwcmVmaXggPSAoU3RyaW5nKSBuYW1lc3BhY2VUYWJsZS5nZXQobmFtZXNwYWNlVVJJKTsJCQkJCQotCQl9Ci0JCQotCQlmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewkJCQotCQkJRWxlbWVudCBlbGVtZW50ID0gZWxlbWVudHNbaV07Ci0JCQlTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0VGFnTmFtZSgpOwotCQkJCi0JCQkvLyB0cnkgdG8gZ2V0IHByZWZpeCBhZ2FpbiwgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBjYW4gYmUgZGlyZWN0bHkgb24gdGhlIGVsZW1lbnQKLQkJCWlmIChwcmVmaXggPT0gbnVsbCAmJiBuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKLQkJCQlwcmVmaXggPSBsb29rdXBQcmVmaXgoZWxlbWVudCwgbmFtZXNwYWNlVVJJKTsKLQkJCQotCQkJaWYgKHByZWZpeCA9PSBudWxsICYmIG5hbWUuZXF1YWxzKGZyYWdOYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQkJCWVsc2UgaWYgKHByZWZpeCAhPSBudWxsICYmIG5hbWUuZXF1YWxzKHByZWZpeCArICI6IiArIGZyYWdOYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQkJfQotCQkJCQotCQlyZXR1cm4gLTE7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU29hcEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU29hcEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGQ4NjcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NvYXBIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA5MDExOSAgIDI2MTM5NyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTb2FwSGVscGVyCi17Ci0gIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPSBudWxsOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXMoKQotICB7Ci0gICAgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5wdXQoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WLENvbnN0YW50cy5OU19QUkVGSVhfU09BUF9FTlYpOwotICAgIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5wdXQoQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0ksQ29uc3RhbnRzLk5TX1BSRUZJWF9TQ0hFTUFfWFNJKTsKLSAgICBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18ucHV0KENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNELENvbnN0YW50cy5OU19QUkVGSVhfU0NIRU1BX1hTRCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBhZGREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcyhIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlcykKLSAgewotICAgIGlmIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPT0gbnVsbCkKLSAgICAgIGluaXREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcygpOwotICAgIEVudW1lcmF0aW9uIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUklzID0gZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLmtleXMoKTsKLSAgICB3aGlsZSAoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkkgPSAoU3RyaW5nKWRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUklzLm5leHRFbGVtZW50KCk7Ci0gICAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VzLnB1dChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJLChTdHJpbmcpZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLmdldChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNEZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2VVUkksU3RyaW5nIG5hbWVzcGFjZVByZWZpeCkKLSAgewotICAgIGlmIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPT0gbnVsbCkKLSAgICAgIGluaXREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcygpOwotICAgIGlmIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18uZ2V0KG5hbWVzcGFjZVVSSSkgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEVudmVsb3BlRWxlbWVudChEb2N1bWVudCBkb2MsSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKQotICB7Ci0JRWxlbWVudCBzb2FwRW52ZWxvcGVFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuVVJJX1NPQVAxMV9FTlYsIENvbnN0YW50cy5OU19QUkVGSVhfU09BUF9FTlYgKyAiOkVudmVsb3BlIik7Ci0gICAgRW51bWVyYXRpb24gZSA9IHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmtleXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc29hcEVudmVsb3BlTmFtZXNwYWNlVVJJID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgc29hcEVudmVsb3BlTmFtZXNwYWNlQXR0ciA9IG5ldyBTdHJpbmdCdWZmZXIoInhtbG5zOiIpOwotICAgICAgc29hcEVudmVsb3BlTmFtZXNwYWNlQXR0ci5hcHBlbmQoKFN0cmluZylzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5nZXQoc29hcEVudmVsb3BlTmFtZXNwYWNlVVJJKSk7Ci0gICAgICBzb2FwRW52ZWxvcGVFbGVtZW50LnNldEF0dHJpYnV0ZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VBdHRyLnRvU3RyaW5nKCksc29hcEVudmVsb3BlTmFtZXNwYWNlVVJJKTsgICAgICAKLSAgICB9ICAgIAotICAgIHJldHVybiBzb2FwRW52ZWxvcGVFbGVtZW50OwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEhlYWRlckVsZW1lbnQoRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgcmV0dXJuIGRvYy5jcmVhdGVFbGVtZW50KCJzb2FwZW52OkhlYWRlciIpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEJvZHlFbGVtZW50KERvY3VtZW50IGRvYykKLSAgewotICAgIHJldHVybiBkb2MuY3JlYXRlRWxlbWVudCgic29hcGVudjpCb2R5Iik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRWxlbWVudCBjcmVhdGVSUENXcmFwcGVyRWxlbWVudChEb2N1bWVudCBkb2MsSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLFN0cmluZyBlbmNvZGluZ05hbWVzcGFjZVVSSSxTdHJpbmcgb3BlcmF0aW9uTmFtZSwgU3RyaW5nIGVuY29kaW5nU3R5bGUpCi0gIHsKLSAgICBpbnQgbnNJZCA9IDA7Ci0gICAgU3RyaW5nQnVmZmVyIHdyYXBwZXJFbGVtZW50TmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VQcmVmaXggPSAoU3RyaW5nKXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmdldChlbmNvZGluZ05hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKGVuY29kaW5nTmFtZXNwYWNlUHJlZml4ICE9IG51bGwpCi0gICAgICB3cmFwcGVyRWxlbWVudE5hbWUuYXBwZW5kKGVuY29kaW5nTmFtZXNwYWNlUHJlZml4KTsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gTG9vcCB1bnRpbCB3ZSBnZW5lcmF0ZSBhIHVuaXF1ZSBwcmVmaXguCi0gICAgICBkbwotICAgICAgewotICAgICAgICB3cmFwcGVyRWxlbWVudE5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgICB3cmFwcGVyRWxlbWVudE5hbWUuYXBwZW5kKCJucyIpLmFwcGVuZChuc0lkKTsKLSAgICAgICAgaWYgKCFzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5jb250YWluc1ZhbHVlKHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgbnNJZCsrOwotICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgICAKLSAgICAgIC8vIG5lZWQgdG8gZW5zdXJlIHdoYXRldmVyIHByZWZpeCB3ZSBjaG9vc2UgaXMgYWRkZWQgdG8gdGhlIG5hbWVzcGFjZSB0YWJsZQotICAgICAgLy8gc28gdGhhdCBpdCB3aWxsIG5vdCBiZSByZXVzZWQgbGF0ZWQgb24KLSAgICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChlbmNvZGluZ05hbWVzcGFjZVVSSSwgd3JhcHBlckVsZW1lbnROYW1lLnRvU3RyaW5nKCkpOwotICAgIH0gICAgCi0gICAgU3RyaW5nIHdyYXBwZXJFbGVtZW50TmFtZVByZWZpeCA9IHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpOwotICAgIHdyYXBwZXJFbGVtZW50TmFtZS5hcHBlbmQoJzonKS5hcHBlbmQob3BlcmF0aW9uTmFtZSk7Ci0gICAgRWxlbWVudCB3cmFwcGVyRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpKTsKLSAgICBTdHJpbmdCdWZmZXIgbmFtZXNwYWNlQXR0ck5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4bWxuczoiKTsKLSAgICBuYW1lc3BhY2VBdHRyTmFtZS5hcHBlbmQod3JhcHBlckVsZW1lbnROYW1lUHJlZml4KTsKLSAgICB3cmFwcGVyRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZXNwYWNlQXR0ck5hbWUudG9TdHJpbmcoKSxlbmNvZGluZ05hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKGVuY29kaW5nU3R5bGUgIT0gbnVsbCkKLSAgICAgIHdyYXBwZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgic29hcGVudjplbmNvZGluZ1N0eWxlIixlbmNvZGluZ1N0eWxlKTsKLSAgICByZXR1cm4gd3JhcHBlckVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBlbmNvZGVOYW1lc3BhY2VEZWNsYXJhdGlvbihTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChwcmVmaXgpOwotICAgIHNiLmFwcGVuZCgiICIpOwotICAgIHNiLmFwcGVuZCh1cmkpOwotICAgIFN0cmluZyByZXN1bHQgPSBVUkxVdGlscy5lbmNvZGUoc2IudG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gZGVjb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24oU3RyaW5nIHMpCi0gIHsKLSAgICBTdHJpbmcgc0NvcHkgPSBVUkxVdGlscy5kZWNvZGUocyk7Ci0gICAgaW50IGluZGV4ID0gc0NvcHkuaW5kZXhPZigiICIpOwotICAgIFN0cmluZ1tdIG5zRGVjbCA9IG5ldyBTdHJpbmdbMl07Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIG5zRGVjbFswXSA9IHNDb3B5LnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICBuc0RlY2xbMV0gPSBzQ29weS5zdWJzdHJpbmcoaW5kZXgrMSwgc0NvcHkubGVuZ3RoKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbnNEZWNsWzBdID0gbnVsbDsKLSAgICAgIG5zRGVjbFsxXSA9IHNDb3B5OwotICAgIH0KLSAgICByZXR1cm4gbnNEZWNsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwveHNkL1dTRExQYXJ0c1RvWFNEVHlwZU1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3hzZC9XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5ZGM0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwveHNkL1dTRExQYXJ0c1RvWFNEVHlwZU1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyCi17Ci0gIHByaXZhdGUgZmluYWwgY2hhciBQT1VORCA9ICcjJzsKLSAgcHJpdmF0ZSBWZWN0b3IgeHNkU2NoZW1hTGlzdF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHBhcnRUb1hTRENhY2hlXzsKLQotICBwdWJsaWMgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkgewotICAgIHhzZFNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIHBhcnRUb1hTRENhY2hlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYXMoVmVjdG9yIHNjaGVtYUxpc3QpIHsKLSAgICBmb3IgKGludCBpPTA7aTxzY2hlbWFMaXN0LnNpemUoKTtpKyspIHsKLSAgICAgIE9iamVjdCBzY2hlbWEgPSBzY2hlbWFMaXN0LmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgeHNkU2NoZW1hTGlzdF8uYWRkRWxlbWVudChzY2hlbWEpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBYU0ROYW1lZENvbXBvbmVudCBnZXRYU0RUeXBlKFBhcnQgcGFydCwgU3RyaW5nIGlkKSB7Ci0gICAgWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50ID0gZ2V0WFNEVHlwZUZyb21DYWNoZShpZCk7Ci0gICAgaWYgKGNvbXBvbmVudCAhPSBudWxsKQotICAgICAgcmV0dXJuIGNvbXBvbmVudDsKLSAgICBjb21wb25lbnQgPSBnZXRYU0RUeXBlRnJvbVNjaGVtYShwYXJ0KTsKLSAgICBpZiAoY29tcG9uZW50ICE9IG51bGwpCi0gICAgICBhZGRUb0NhY2hlKGlkLCBjb21wb25lbnQpOwotICAgIHJldHVybiBjb21wb25lbnQ7Ci0gIH0KLQotICBwdWJsaWMgWFNETmFtZWRDb21wb25lbnQgZ2V0WFNEVHlwZUZyb21DYWNoZShTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKFhTRE5hbWVkQ29tcG9uZW50KXBhcnRUb1hTRENhY2hlXy5nZXQoaWQpOwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IGdldFhTRFR5cGVGcm9tU2NoZW1hKFBhcnQgcGFydCkgewotICAgIGJvb2xlYW4gaXNFbGVtZW50RGVjbGFyYXRpb24gPSAocGFydC5nZXRUeXBlTmFtZSgpID09IG51bGwpOwotICAgIFFOYW1lIHFOYW1lID0gaXNFbGVtZW50RGVjbGFyYXRpb24gPyBwYXJ0LmdldEVsZW1lbnROYW1lKCkgOiBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgcmV0dXJuIGdldFhTRFR5cGVGcm9tU2NoZW1hKHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxTmFtZS5nZXRMb2NhbFBhcnQoKSwgaXNFbGVtZW50RGVjbGFyYXRpb24pOwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IGdldFhTRFR5cGVGcm9tU2NoZW1hKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIGJvb2xlYW4gaXNFbGVtZW50RGVjbGFyYXRpb24pIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHhzZFNjaGVtYUxpc3RfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSl4c2RTY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSk7Ci0gICAgICBWZWN0b3IgY29tcG9uZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGlmIChpc0VsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgICAgY29tcG9uZW50cy5hZGRBbGwoeHNkU2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGNvbXBvbmVudHMuYWRkQWxsKHhzZFNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKSk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY29tcG9uZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgewotICAgICAgICBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQgID0gKFhTRE5hbWVkQ29tcG9uZW50KWl0Lm5leHQoKTsKLSAgICAgICAgU3RyaW5nIGNvbXBOU1VSSSA9IGNvbXBvbmVudC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgU3RyaW5nIGNvbXBMb2NhbG5hbWUgPSBjb21wb25lbnQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAoY29tcE5TVVJJICE9IG51bGwgJiYgY29tcExvY2FsbmFtZSAhPSBudWxsICYmIGNvbXBOU1VSSS5lcXVhbHMobmFtZXNwYWNlVVJJKSAmJiBjb21wTG9jYWxuYW1lLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IHJlc29sdmVYU0ROYW1lZENvbXBvbmVudChYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50ICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHVyaSA9IGNvbXBvbmVudC5nZXRVUkkoKTsKLSAgICAgIFN0cmluZyBxbmFtZSA9IGNvbXBvbmVudC5nZXRRTmFtZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RTY2hlbWFMaXN0Xy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpeHNkU2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdGFyZ2V0TlMgPSB4c2RTY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgaWYgKHRhcmdldE5TICE9IG51bGwgJiYgdGFyZ2V0TlMuZXF1YWxzKHRyaW1RTmFtZSh1cmksIHFuYW1lKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNETmFtZWRDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBudWxsOwotICAgICAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgICAgICAgICByZXNvbHZlZENvbXBvbmVudCA9IHhzZFNjaGVtYS5yZXNvbHZlVHlwZURlZmluaXRpb24ocW5hbWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICAgICAgICByZXNvbHZlZENvbXBvbmVudCA9IHhzZFNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKHFuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgICAgICAgICAgICByZXNvbHZlZENvbXBvbmVudCA9IHhzZFNjaGVtYS5yZXNvbHZlTW9kZWxHcm91cERlZmluaXRpb24ocW5hbWUpOwotICAgICAgICAgICAgaWYgKGlzQ29tcG9uZW50UmVzb2x2YWJsZShyZXNvbHZlZENvbXBvbmVudCkpCi0gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZENvbXBvbmVudDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyB0cmltUU5hbWUoU3RyaW5nIHVyaSwgU3RyaW5nIHFuYW1lKQotICB7Ci0gICAgaW50IGluZGV4ID0gdXJpLmluZGV4T2YocW5hbWUpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSB1cmkuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgIGlmIChucy5jaGFyQXQoaW5kZXgtMSkgPT0gUE9VTkQpCi0gICAgICAgIHJldHVybiBucy5zdWJzdHJpbmcoMCwgaW5kZXgtMSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuczsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHVyaTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRUb0NhY2hlKFN0cmluZyBpZCwgWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50KSB7Ci0gICAgcGFydFRvWFNEQ2FjaGVfLnB1dChpZCxjb21wb25lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDb21wb25lbnRSZXNvbHZhYmxlKFhTRENvbXBvbmVudCBjb21wb25lbnQpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGNvbXBvbmVudC5nZXRTY2hlbWEoKTsKLSAgICBpZiAoc2NoZW1hID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNmQ2ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbgotewotICBwdWJsaWMgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFVERElMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIG9iajsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCkKLSAgICAgIGJ1c2luZXNzTmFtZSA9IGJ1c2luZXNzS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUsIGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX0JVU0lORVNTKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFVERElMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIG9iajsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCkKLSAgICAgIGJ1c2luZXNzTmFtZSA9IGJ1c2luZXNzS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUsIGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24oKSAmJiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZGRUb0Zhdm9yaXRlcyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NTUxMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfQlVTSU5FU1MpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESUxpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBsZS5nZXRPYmplY3QoKTsKLSAgICAgIGlucXVpcnlVUkwgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICAgIGJ1c2luZXNzS2V5ID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgICAgYnVzaW5lc3NOYW1lID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgaWYgKGJ1c2luZXNzTmFtZSA9PSBudWxsKQotICAgICAgICBidXNpbmVzc05hbWUgPSBidXNpbmVzc0tleTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIHJldHVybiBmYWxzZSBpZiB1bmFibGUgdG8gZmluZCBvciBjcmVhdGUgYSByZWdpc3RyeSBub2RlL2VsZW1lbnQgaW4gdGhlCi0gICAgLy8gVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5VVJMLCBudWxsLCBpbnF1aXJ5VVJMKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIHByZXBhcmUgdGhlIGFjdGlvbgotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIC8vIHBvcHVsYXRlIHByb3BlcnR5IHRhYmxlCi0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsIGJ1c2luZXNzTmFtZSk7Ci0gICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0JVU0lORVNTX05PVF9GT1VORCIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZlNWYyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIEFkZFRvRmF2b3JpdGVzQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgd3NpbFVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBvYmo7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUtleSgpOwotICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsKQotICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0tFWSwgc2VydmljZUtleSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX1NFUlZJQ0UpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBvYmogPSBzZWxlY3RlZEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHdzaWxVZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgb2JqOwotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICBpZiAoc2VydmljZU5hbWUgPT0gbnVsbCkKLSAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZUtleTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsIHNlcnZpY2VOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEksIGlucXVpcnlBUEkpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbigpICYmIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUyIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZGRUb0Zhdm9yaXRlcyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjg2ZGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IG51bGw7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBudWxsOwotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IG51bGw7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB3c2lsVWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIGxlLmdldE9iamVjdCgpOwotICAgICAgaW5xdWlyeVVSTCA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgICBzZXJ2aWNlS2V5ID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUtleSgpOwotICAgICAgc2VydmljZU5hbWUgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VLZXk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyByZXR1cm4gZmFsc2UgaWYgdW5hYmxlIHRvIGZpbmQgb3IgY3JlYXRlIGEgcmVnaXN0cnkgbm9kZS9lbGVtZW50IGluIHRoZQotICAgIC8vIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeVVSTCwgbnVsbCwgaW5xdWlyeVVSTCkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIHByZXBhcmUgdGhlIGFjdGlvbgotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAvLyBwb3B1bGF0ZSBwcm9wZXJ0eSB0YWJsZQotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TRVJWSUNFX05PVF9GT1VORCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDhiMjk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJQnVzaW5lc3NUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RXU0RMU2VydmljZXNUb29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24gewotICAgIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0KLSAgICBwdWJsaWMgQWRkVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvV3NpbENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQWRkVG9GYXZvcml0ZXNBY3Rpb24gbmV3QWN0aW9uKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICAgIHJldHVybiBuZXcgQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElCdXNpbmVzc1Rvb2wpCi0gICAgICAgIHJldHVybiBuZXcgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gYWRkVG9GYXZvcml0ZXMoSGFzaHRhYmxlIHRhYmxlLCBTdHJpbmcgcmVsKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgRW51bWVyYXRpb24gZSA9IGZhdlJvb3RFbGVtZW50LmdldEVsZW1lbnRzKHJlbCk7Ci0gICAgICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHJldHVybiBmYXZGb2xkZXJFbGVtZW50LmFkZEZhdm9yaXRlKHRhYmxlKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUsIFN0cmluZyByZWwpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBmYXZOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICAgICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZmF2Rm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgcmV0dXJuIGZhdkZvbGRlckVsZW1lbnQuZmF2b3JpdGVFeGlzdHModGFibGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwMTcxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLk9wZW5SZWdpc3RyeUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJQnVzaW5lc3NUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBY3Rpb24gbmV3QWN0aW9uKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICByZXR1cm4gbmV3IEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgIHJldHVybiBuZXcgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IE51bGxBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cnlOYW1lKQotICB7Ci0gICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBnZXRSZWdpc3RyeU5vZGVzQnlJbnF1aXJ5VVJMKGlucXVpcnlBUEkpOwotICAgIGlmIChyZWdpc3RyeU5vZGVzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx3YXlzIGF0dGVtcHQgdG8gdXNlIGFuIGV4aXN0aW5nIHJlZ2lzdHJ5LgotICAgICAgTm9kZSByZWdpc3RyeU5vZGUgPSAoTm9kZSkgcmVnaXN0cnlOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ2lzdHJ5Tm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQocmVnaXN0cnlOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBvcGVuIHRoZSByZWdpc3RyeSBpZiBpdCBpcyBub3QgYWxyZWFkeSBvcGVuZWQgaW4gdGhlIFVEREkgcGVyc3BlY3RpdmUKLSAgICBPcGVuUmVnaXN0cnlBY3Rpb24gb3BlblJlZ0FjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIC8vIHBvcHVsYXRlIHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlblJlZ0FjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhyZWdpc3RyeU5hbWUpKQotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FLCByZWdpc3RyeU5hbWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCwgaW5xdWlyeUFQSSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgaWYgKCFvcGVuUmVnQWN0aW9uLnJ1bigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIFZlY3RvciBnZXRSZWdpc3RyeU5vZGVzQnlJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBudWxsOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpIChuYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCkpOwotICAgIFZlY3RvciBjaGlsZE5vZGVzID0gdWRkaU1haW5Ob2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgTm9kZSBjaGlsZE5vZGUgPSAoTm9kZSkgY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgewotICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpIGNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBpZiAocmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCkuZXF1YWxzKGlucXVpcnlVUkwpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHJlZ2lzdHJ5Tm9kZXMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlZ2lzdHJ5Tm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgcmVnaXN0cnlOb2Rlcy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlZ2lzdHJ5Tm9kZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkMWM4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgQWRkVG9GYXZvcml0ZXNBY3Rpb24KLXsKLSAgcHVibGljIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IGdldFdzZGxVcmwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwsIHdzZGxVUkwpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuV1NETF9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2RsVVJMID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVSTCk7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkgJiYgZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTIiwgd3NkbFVSTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWRkVG9GYXZvcml0ZXModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCB3c2RsVVJMKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIHdzZGxVUkwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRXc2RsVXJsKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIHdzaWxXc2RsU2VydmljZUVsZW1lbnQgPSAoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCkgb2JqOwotICAgIHJldHVybiB3c2lsV3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOTE0MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIEFkZFRvRmF2b3JpdGVzQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IGdldFdzaWxVcmwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NJTF9VUkwsIHdzaWxVUkwpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2lsVVJMID0gZ2V0V3NpbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkgJiYgZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUyIsIHdzaWxVUkwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGFkZFRvRmF2b3JpdGVzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTIiwgd3NpbFVSTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdzaWxVcmwoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50LmdldFdzaWxVcmwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhZmEzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQ2xlYXJOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJXU0lMQWN0aW9uIGV4dGVuZHMgQ2xlYXJOb2RlQWN0aW9uIHsKLQotICAgIHB1YmxpYyBDbGVhcldTSUxBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGVJZCgpKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlEKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsU3RhdHVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNjMGRjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NETFNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbgotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmXzsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbEZpbGVOYW1lXzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0KLSAgcHVibGljIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLCBpbnQgdG9vbElkLCBpbnQgdmlld0lkLCBpbnQgdmlld1Rvb2xJZCkKLSAgewotICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRvb2xJZCwgdmlld0lkLCB2aWV3VG9vbElkLCAid3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpCi0gIHsKLSAgICBpZiAoZGVmXyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZfKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gd3NkbEZpbGVOYW1lXzsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBnZXRXU0RMRnJvbVVSTCgpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0TWFuYWdlciB3c2lsU2VydmljZXMgPSB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICBMaXN0RWxlbWVudCBsZSA9IHdzaWxTZXJ2aWNlcy5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgc2VydmljZSA9IChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgIFN0cmluZyB3c2RsVVJMID0gc2VydmljZS5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgIHdzZGxGaWxlTmFtZV8gPSBXU0RMRmlsZU5hbWVIZWxwZXIuZ2V0V1NETEZpbGVOYW1lKHdzZGxVUkwpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZl8gPSAobmV3IFVkZGk0akhlbHBlcigpKS5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZ2V0V1NETEZyb21VRERJUmVnaXN0cnkoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbFNlcnZpY2VzID0gd3NpbEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgTGlzdEVsZW1lbnQgbGUgPSB3c2lsU2VydmljZXMuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHNlcnZpY2UgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgd3NkbEZpbGVOYW1lXyA9IHNlcnZpY2UuZ2V0TmFtZSgpICsgIi53c2RsIjsKLSAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IG51bGw7Ci0gICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHNlcnZpY2UuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgICBpZiAoaW5xdWlyeVVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm94eSA9IG5ldyBVRERJUHJveHkoKTsKLSAgICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChpbnF1aXJ5VVJMKTsKLSAgICAgIH0KLSAgICAgIGRlZl8gPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24odWRkaTRqSGVscGVyLmdldFdTREwoc2VydmljZS5nZXRTZXJ2aWNlRGVmaW5pdGlvbigpLCBwcm94eSkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gdGhlIHdzZGwgcmVwcmVzZW50aW5nIHRoaXMgc2VydmljZSBpcyB1bnJlYWNoYWJsZSB0aHJvdWdoIHRoZSBVRERJCi0gICAgICAvLyByZWdpc3RyeS4gV2Ugd2lsbCB0cnkgdXNpbmcgdGhlIGRpc2NvdmVyeSBVUkwgaW5zdGVhZC4KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWZfID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHNlcnZpY2UuZ2V0VURESVNlcnZpY2VEaXNjb3ZlcnlVUkwoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlMikKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIC8vIGlmIHRoZSBkaXNjb3ZlcnlVUkwgYWxzbyBmYWlscywgcmV0dXJuIGFuIGVycm9yCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gICAgICByZXR1cm4gZ2V0V1NETEZyb21VUkwoKTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgIHJldHVybiBnZXRXU0RMRnJvbVVERElSZWdpc3RyeSgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTc1YmNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLSAgICBwcml2YXRlIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLSAgICBwcml2YXRlIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50XzsKLSAgICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLQotICAgIHB1YmxpYyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpCi0gICAgewotICAgICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsIndzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykgewotICAgICAgICBpZiAod3NpbERvY18gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHdyaXRlV1NJTERvY3VtZW50KG9zLCB3c2lsRG9jXyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpIHsKLSAgICAgICAgU3RyaW5nIHdzaWxGaWxlTmFtZSA9IHdzaWxFbGVtZW50Xy5nZXRXc2lsVXJsKCk7Ci0gICAgICAgIHJldHVybiB3c2lsRmlsZU5hbWUuc3Vic3RyaW5nKHdzaWxGaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSwgd3NpbEZpbGVOYW1lLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLQotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHdzaWxFbGVtZW50XyA9IChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgICAgICB3c2lsRG9jXyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRXU0lMRG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL011bHRpcGxlTGlua0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NGM0OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNdWx0aXBsZUxpbmtBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBNdWx0aXBsZUxpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgaXNNdWx0aXBsZUxpbmtBY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiwgaXNNdWx0aXBsZUxpbmtBY3Rpb24pOwotICAgICAgcmV0dXJuIHByb2Nlc3NNdWx0aXBsZUxpbmtBY3Rpb25QYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgU3RyaW5nIHRvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgU3RyaW5nIHZpZXdJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgU3RyaW5nIHZpZXdUb29sSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICBpZiAobm9kZUlEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSURTdHJpbmcpOwotICAgICAgaWYgKHRvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgdG9vbElEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3SURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRFN0cmluZyk7Ci0gICAgICBpZiAodmlld1Rvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsIHZpZXdUb29sSURTdHJpbmcpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc011bHRpcGxlTGlua0FjdGlvblBhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nW10gdmlld0lEcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SURzKTsKLSAgICBpZiAodmlld0lEcy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnR5VGFibGVfLmNvbnRhaW5zS2V5KFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Vmlld0lkcygpCi0gIHsKLSAgICBPYmplY3Qgb2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIGVsc2UgaWYgKG9iamVjdC5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pb2JqZWN0OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyhTdHJpbmcpb2JqZWN0fTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkpID8gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpIDogZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmdbXSB2aWV3SWRzID0gZ2V0Vmlld0lkcygpOwotICAgIGlmICh2aWV3SWRzICE9IG51bGwgJiYgdmlld0lkcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0lkcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJZHNbaV0pOwotICAgICAgICBpZiAoZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKSkKLSAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lkcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9OdWxsQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9OdWxsQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Y2Y1NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTnVsbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTnVsbEFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgTnVsbEFjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA1YmQxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MTExOSAgIDI1NTM3NCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFdTRSBkb2VzIG5vdCBoYW5kbGUgdXRmLTggY2hhcmFjdGVycyBpbiBVUkxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0lMQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotCi0gIHB1YmxpYyBPcGVuV1NJTEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCk7Ci0gICAgU3RyaW5nIGluc3BlY3Rpb25UeXBlID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgaWYgKGluc3BlY3Rpb25UeXBlICE9IG51bGwgJiYgaW5zcGVjdGlvblR5cGUubGVuZ3RoKCkgPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUsIGluc3BlY3Rpb25UeXBlKTsKLSAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKTsKLSAgICB3c2lsVVJMID0gVVJMVXRpbHMuZW5jb2RlVVJMU3RyaW5nKHdzaWxVUkwpOyAgICAKLSAgICBpbnQgaW5zcGVjdGlvblR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgcm9vdCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBnZXRPcGVuZWRXU0lMKHJvb3QsIHdzaWxVUkwpOwotICAgIGlmICh3c2lsRWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCh3c2lsVVJMKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTk9ORSk7Ci0gICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBwYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzaWxVUkwpOwotICAgICAgICBpbnQgdHlwZSA9IHdzRW50aXR5LmdldFR5cGUoKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gV2ViU2VydmljZUVudGl0eS5UWVBFX0hUTUwpCi0gICAgICAgICAgcmV0dXJuIG9wZW5IVE1MKHdzRW50aXR5LmdldENoaWxkcmVuKCksIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCkKLSAgICAgICAgICByZXR1cm4gb3BlbldTSUwod3NpbFVSTCwgcGFyc2VyLmdldFdTSUxEb2N1bWVudCh3c2lsVVJMKSwgaW5zcGVjdGlvblR5cGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9VUkwiLCB3c2lsVVJMKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJlc2VsZWN0V1NJTE5vZGUobm9kZU1hbmFnZXIsIHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2lsRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEIiwgd3NpbFVSTCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG9wZW5IVE1MKExpc3Qgd3NpbHMsIGludCBpbnNwZWN0aW9uVHlwZSkKLSAgewotICAgIGludCBub2RlSWQgPSAtMTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgcm9vdCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHdzaWxzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgV2ViU2VydmljZUVudGl0eSB3c2lsRW50aXR5ID0gKFdlYlNlcnZpY2VFbnRpdHkpaXQubmV4dCgpOwotICAgICAgU3RyaW5nIHdzaWxVUkwgPSB3c2lsRW50aXR5LmdldFVSSSgpOwotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBnZXRPcGVuZWRXU0lMKHJvb3QsIHdzaWxVUkwpOwotICAgICAgaWYgKHdzaWxFbGVtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICB3c2lsRG9jLnJlYWQod3NpbFVSTCk7Ci0gICAgICAgICAgd3NpbEVsZW1lbnQgPSBuZXcgV3NpbEVsZW1lbnQod3NpbFVSTCwgcm9vdC5nZXRNb2RlbCgpLCB3c2lsRG9jLCB3c2lsVVJMKTsKLSAgICAgICAgICByb290LmNvbm5lY3Qod3NpbEVsZW1lbnQsIFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgICBub2RlSWQgPSByb290Tm9kZS5nZXRDaGlsZE5vZGUod3NpbEVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX09QRU5fV1NJTF9TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEIiwgd3NpbFVSTCkpOwotICAgICAgICBub2RlSWQgPSByb290Tm9kZS5nZXRDaGlsZE5vZGUod3NpbEVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobm9kZUlkICE9IC0xKQotICAgIHsKLSAgICAgIHByZXNlbGVjdFdTSUxOb2RlKG5vZGVNYW5hZ2VyLCBub2RlSWQsIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gb3BlbldTSUwoU3RyaW5nIHdzaWxVUkwsIFdTSUxEb2N1bWVudCB3c2lsRG9jLCBpbnQgaW5zcGVjdGlvblR5cGUpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgcm9vdCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBuZXcgV3NpbEVsZW1lbnQod3NpbFVSTCwgcm9vdC5nZXRNb2RlbCgpLCB3c2lsRG9jLCB3c2lsVVJMKTsKLSAgICByb290LmNvbm5lY3Qod3NpbEVsZW1lbnQsIFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBpbnQgbm9kZUlkID0gcm9vdE5vZGUuZ2V0Q2hpbGROb2RlKHdzaWxFbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19PUEVOX1dTSUxfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICBwcmVzZWxlY3RXU0lMTm9kZShub2RlTWFuYWdlciwgbm9kZUlkLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJlc2VsZWN0V1NJTE5vZGUoTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlSWQsIGludCBpbnNwZWN0aW9uVHlwZSkKLSAgewotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJZCk7Ci0gICAgc2VsZWN0ZWROb2RlLnNldFZpZXdJZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgIHRvb2xNYW5hZ2VyLnNldFNlbGVjdGVkVG9vbElkKGluc3BlY3Rpb25UeXBlKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUwsIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCBpbnNwZWN0aW9uVHlwZSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCB0cnVlKSk7ICAgICAgICAKLSAgfQotCi0gIHByaXZhdGUgV3NpbEVsZW1lbnQgZ2V0T3BlbmVkV1NJTChUcmVlRWxlbWVudCByb290LCBTdHJpbmcgd3NpbFVSTCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSByb290LmdldEVsZW1lbnRzKFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKS5lcXVhbHMod3NpbFVSTCkpCi0gICAgICAgIHJldHVybiB3c2lsRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGI2ZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzaWxMaW5rRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0lMTGlua0FjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgT3BlbldTSUxMaW5rQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLldTSUxfTElOSyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBpZiAoIShzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTSUxMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgV3NpbFdzaWxMaW5rRWxlbWVudCBsaW5rID0gKFdzaWxXc2lsTGlua0VsZW1lbnQpIGxlLmdldE9iamVjdCgpOwotICAgIFN0cmluZyB3c2lsVVJMID0gbGluay5nZXRXU0lMTGlua0xvY2F0aW9uKCk7Ci0gICAgLy8gcG9wdWxhdGUgYW5kIHJ1biB0aGUgT3BlbldTSUxBY3Rpb24KLSAgICBPcGVuV1NJTEFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTSUxBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdGFibGUucHV0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwsIHdzaWxVUkwpOwotICAgIHRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFLCBTdHJpbmcudmFsdWVPZihXc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUykpOwotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I2MGVhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESUJ1c2luZXNzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5Xc2lsTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlZnJlc2hBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLQotICBwdWJsaWMgUmVmcmVzaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEFjdGlvbiBuZXdBY3Rpb24oSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIFN0cmluZyBub2RlSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmcgdmlld0lEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUobm9kZUlEKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlID09IG51bGwgfHwgIShzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBXc2lsTm9kZSkpCi0gICAgICByZXR1cm4gbmV3IE51bGxBY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIFJlZnJlc2hBY3Rpb24gYWN0aW9uOwotICAgICAgaWYgKHZpZXdJRFN0cmluZyA9PSBudWxsKQotICAgICAgICBhY3Rpb24gPSBuZXcgUmVmcmVzaFdTSUxBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgICAgYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJU2VydmljZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgICBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBOdWxsQWN0aW9uKCk7Ci0gICAgICBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlSUQpKTsKLSAgICAgIHJldHVybiBhY3Rpb247Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4ZTNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24gZXh0ZW5kcyBSZWZyZXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfQlVTSU5FU1MpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgICAgTGlzdE1hbmFnZXIgbG0gPSB3c2lsRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKTsKLSAgICAgIFZlY3RvciB1ZGRpQnVzaW5lc3NFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHZpZXdJRHMgPSBnZXRWaWV3SWRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdJRHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJRHNbaV0pOwotICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBsbS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50cy5hZGQodWRkaUJ1c2luZXNzRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICB3c2lsRWxlbWVudC5yZWZyZXNoU2VydmljZVByb3ZpZGVyc0Zyb21SZWdpc3RyeSh1ZGRpQnVzaW5lc3NFbGVtZW50cyk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gdWRkaUJ1c2luZXNzRWxlbWVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBTdHJpbmcgbmFtZSA9IHVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICBuYW1lID0gdWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgICAgIGlmICh1ZGRpQnVzaW5lc3NFbGVtZW50LmdldFNlcnZpY2VQcm92aWRlcigpICE9IG51bGwpCi0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTCIsIG5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQiLCBuYW1lKSk7Ci0gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESVNlcnZpY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYzNzdhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESVNlcnZpY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESVNlcnZpY2VBY3Rpb24gZXh0ZW5kcyBSZWZyZXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWZyZXNoVURESVNlcnZpY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICAgIExpc3RNYW5hZ2VyIGxtID0gd3NpbEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgICBWZWN0b3IgdWRkaVNlcnZpY2VFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHZpZXdJRHMgPSBnZXRWaWV3SWRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdJRHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJRHNbaV0pOwotICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBsbS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnRzLmFkZCh1ZGRpU2VydmljZUVsZW1lbnQpOwotICAgICAgfQotICAgICAgd3NpbEVsZW1lbnQucmVmcmVzaFNlcnZpY2VEZWZpbml0aW9uc0Zyb21SZWdpc3RyeSh1ZGRpU2VydmljZUVsZW1lbnRzKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB1ZGRpU2VydmljZUVsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB1ZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICBuYW1lID0gdWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlS2V5KCk7Ci0gICAgICAgIGlmICh1ZGRpU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUZSRVNIX1NVQ0NFU1NGVUwiLCBuYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQiLCBuYW1lKSk7Ci0gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFdTSUxBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hXU0lMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTFiZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFdTSUxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTSUxBY3Rpb24gZXh0ZW5kcyBSZWZyZXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWZyZXNoV1NJTEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgU3RyaW5nIHdzaWxVUkwgPSAoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldFdzaWxVcmwoKTsKLSAgICAgIGlmICgoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLnJlZnJlc2goKSkKLSAgICAgIHsKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NJTF9OT1RfRk9VTkQiLCB3c2lsVVJMKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTBkYmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVXU0lMRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVXU0lMRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIG5ldyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoZnJhbWVOYW1lLmVxdWFscyhXc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIxMDAlLDAlIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2lsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ODU4ODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTSUxOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotICAgIHB1YmxpYyBTZWxlY3RXU0lMTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChrZWVwSGlzdG9yeSkgewotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgICB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3ODI2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RXU0lMVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVUb29sQWN0aW9uCi17Ci0gIHB1YmxpYyBTZWxlY3RXU0lMVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBpZiAodmlld0lEICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgfQotICAgIGlmIChrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgYm9vbGVhbiBrZWVwSGlzdG9yeSA9IGZhbHNlOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBnZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpbnQgdG9vbFR5cGUgPSBnZXRTZWxlY3RlZFRvb2woKS5nZXRUb29sVHlwZSgpOwotICAgIGlmICh0b29sVHlwZSA9PSBUb29sVHlwZXMuRk9STSkKLSAgICAgIGtlZXBIaXN0b3J5ID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh0b29sVHlwZSA9PSBUb29sVHlwZXMuVklFVykKLSAgICB7Ci0gICAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgICAgaWYgKHZpZXdJRCA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgIGtlZXBIaXN0b3J5ID0gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCgoVmlld1Rvb2wpIHNlbGVjdGVkVG9vbCkuZ2V0VG9vbE1hbmFnZXIodmlld0lEKS5nZXRUb29sKHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICBrZWVwSGlzdG9yeSA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAid3NpbE5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsUHJvcGVydGllc0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjMwOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAKLSAgICBpZiAoIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpICYmICFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGZvcm1MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5ZGUzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24KLXsKLSAgcHVibGljIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKQotICB7Ci0gICAgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YWQ0ODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLldTRExfU0VSVklDRSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgd3NpbFdzZGxTZXJ2aWNlRWxlbWVudCA9IChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KSB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gd3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgIE9wZW5XU0RMQWN0aW9uIG9wZW5XU0RMQWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIHdzZGxVcmwpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgZWxzZQotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFIiwgd3NkbFVybCkpOwotICAgIHJldHVybiBhY3Rpb25SZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFlYWY5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gewotICAgIHB1YmxpYyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKSB7Ci0gICAgICAgIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotCi0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLQotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpKSk7Ci0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkpKTsKLQotICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWExYTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFdTRExTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLSAgICBwdWJsaWMgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBuZXdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLQotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyB1cmwgPSBudWxsOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpIHsKLSAgICAgICAgICAgIGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgICAgICB1cmwgPSAoKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCkpLmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpIHsKLSAgICAgICAgICAgIGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFVERElTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgICAgICB1cmwgPSAoKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCkpLmdldFdzZGxVcmwoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBsYXVuY2hXaXphcmQodXJsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0ZDkyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgV3NpbFRvZ2dsZU5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uIHsKLSAgICBwdWJsaWMgV3NpbFRvZ2dsZU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsIGJvb2xlYW4gb3BlbikgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSWQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGlmIChvcGVuKQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU5fTk9ERSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHRvZ2dsZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gdG9nZ2xlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0b29sSWQsIHZpZXdJZCwgdmlld1Rvb2xJZCwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RXU0lMTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCwgdHJ1ZSk7Ci0gICAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEFjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNTk5MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsQWN0aW9uSW5wdXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsQWN0aW9uSW5wdXRzCi17Ci0gICAgLy8gb3BlbiBXU0lMIGZvcm0KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1VSTCA9ICJ3c2lsVVJMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX0lOU1BFQ1RJT05fVFlQRSA9ICJ3c2lsSW5zcGVjdGlvblR5cGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTSUxfREVUQUlMUyA9IDA7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NETF9TRVJWSUNFUyA9IDE7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVURESV9TRVJWSUNFUyA9IDI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVURESV9CVVNJTkVTU0VTID0gMzsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU0lMX0xJTktTID0gNDsKLQotICAgIC8vIG1hc3MgYWN0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTVVMVElQTEVfTElOS19BQ1RJT04gPSAibXVsdGlwbGVMaW5rQWN0aW9uIjsKLQotICAgIC8vIHJlc2l6ZSBXU0lMIGZyYW1lcyBhY3Rpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQgPSAiZnJhbWVzZXRDb2xzUGVyc3BlY3RpdmVDb250ZW50IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSID0gImZyYW1lc2V0Um93c0FjdGlvbnNDb250YWluZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsRnJhbWVOYW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzM1YTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdzaWxGcmFtZU5hbWVzCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiA9ICJ3c2lsX25hdmlnYXRvcl9jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX05BVklHQVRPUl9UT09MQkFSID0gIndzaWxfbmF2aWdhdG9yX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX05BVklHQVRPUl9DT05URU5UID0gIndzaWxfbmF2aWdhdG9yX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX0FDVElPTlNfQ09OVEFJTkVSID0gIndzaWxfYWN0aW9uc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1BST1BFUlRJRVNfQ09OVEFJTkVSID0gIndzaWxfcHJvcGVydGllc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1BST1BFUlRJRVNfVE9PTEJBUiA9ICJ3c2lsX3Byb3BlcnRpZXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfUFJPUEVSVElFU19DT05URU5UID0gIndzaWxfcHJvcGVydGllc19jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9TVEFUVVNfQ09OVEFJTkVSID0gIndzaWxfc3RhdHVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfU1RBVFVTX1RPT0xCQVIgPSAid3NpbF9zdGF0dXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfU1RBVFVTX0NPTlRFTlQgPSAid3NpbF9zdGF0dXNfY29udGVudCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxNb2RlbENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsTW9kZWxDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhOGZhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxNb2RlbENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV3NpbE1vZGVsQ29uc3RhbnRzCi17Ci0gICAgLy8gUmVsYXRpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NJTCA9ICJyZWxXU0lMIjsKLQotICAgIC8vIExpc3QgTWFuYWdlcnMgZm9yIFdzaWxFbGVtZW50Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMgPSAid3NkbFNlcnZpY2VzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUyA9ICJ1ZGRpU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX0xJTktTID0gInVkZGlMaW5rcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTSUxfTElOS1MgPSAid3NpbExpbmtzIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbENvbW1vbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbENvbW1vbkVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlMDFhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxDb21tb25FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotcHVibGljIGNsYXNzIFdzaWxDb21tb25FbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGJhc2VXc2lsVVJMOwotICBwcml2YXRlIFN0cmluZyByZWxhdGl2ZVVSSUJhc2U7Ci0KLSAgcHVibGljIFdzaWxDb21tb25FbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRCYXNlV3NpbFVSTCgpCi0gIHsKLSAgICByZXR1cm4gYmFzZVdzaWxVUkw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJhc2VXc2lsVVJMKFN0cmluZyBiYXNlV3NpbFVSTCkKLSAgewotICAgIHRoaXMuYmFzZVdzaWxVUkwgPSBiYXNlV3NpbFVSTDsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEZXRF9TTEFTSCA9ICcvJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEJXRF9TTEFTSCA9ICdcXCc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBQUk9UT0NPTF9JTkRJQ0FUT1IgPSAnOic7Ci0gIAotICBwdWJsaWMgU3RyaW5nIG1ha2VBYnNvbHV0ZShTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYgKGJhc2VXc2lsVVJMICE9IG51bGwgJiYgdXJpICE9IG51bGwgJiYgdXJpLmluZGV4T2YoUFJPVE9DT0xfSU5ESUNBVE9SKSA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAocmVsYXRpdmVVUklCYXNlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlbGF0aXZlVVJJQmFzZSA9IGJhc2VXc2lsVVJMLnJlcGxhY2UoQldEX1NMQVNILCBGV0RfU0xBU0gpOwotICAgICAgICBpbnQgaW5kZXggPSByZWxhdGl2ZVVSSUJhc2UubGFzdEluZGV4T2YoRldEX1NMQVNIKTsKLSAgICAgICAgcmVsYXRpdmVVUklCYXNlID0gYmFzZVdzaWxVUkwuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSk7Ci0gICAgICB9Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHJlbGF0aXZlVVJJQmFzZSk7Ci0gICAgICBzYi5hcHBlbmQodXJpKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gdXJpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDc2MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuSW5zcGVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotLyoqCi0gKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyBhIFdTSUwgZG9jdW1lbnQKLSAqLwotcHVibGljIGNsYXNzIFdzaWxFbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBXU0lMRG9jdW1lbnQgd3NpbERvY187Ci0gIHByaXZhdGUgU3RyaW5nIHRoaXNXc2lsVXJsXzsKLSAgLyoqICoqKioqKioqKioqKioqKioqKiBOYW1lc3BhY2UgKioqKioqKioqKiAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1dTREwgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfVjEgPSAidXJuOnVkZGktb3JnOmFwaSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9WMiA9ICJ1cm46dWRkaS1vcmc6YXBpX3YyIjsKLSAgLy9wcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfQklORElORyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vdWRkaS8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1dTSUxfSU5TUEVDVElPTiA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vIjsKLSAgLyoqICoqKioqKioqKioqKioqKioqKiBSZWxzICoqKioqKioqKioqKioqKiogKi8KLSAgLy8gUmVsYXRpb24gZm9yIGEgV1NJTCBkb3VjbWVudCBhbmQgaXRzIGxpbmsgbm9kZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1dTSUxfTElOSyA9ICJ3c2lsIGxpbmsgbm9kZXMiOwotCi0gIHB1YmxpYyBXc2lsRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFdTSUxEb2N1bWVudCB3c2lsRG9jdW1lbnQsIFN0cmluZyB3c2lsVVJMKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHdzaWxEb2NfID0gd3NpbERvY3VtZW50OwotICAgIHRoaXNXc2lsVXJsXyA9IHdzaWxVUkw7Ci0gICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzXyA9IG51bGw7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzXyA9IG51bGw7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IG51bGw7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaUxpbmtzXyA9IG51bGw7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIHdzZGxTZXJ2aWNlc18pOwotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCB1ZGRpU2VydmljZXNfKTsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgd3NpbExpbmtzXyk7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MsIHVkZGlMaW5rc18pOwotICB9Ci0KLSAgLyoKLSAgICogUmVmcmVzaCB0aGUgV1NJTCBkb2N1bWVudAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcmVmcmVzaCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0lMRG9jdW1lbnQgbmV3V1NJTERvYyA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgbmV3V1NJTERvYy5yZWFkKGdldFdzaWxVcmwoKSk7Ci0gICAgICB3c2lsRG9jXyA9IG5ld1dTSUxEb2M7Ci0gICAgICBMaXN0TWFuYWdlciB3c2RsU2VydmljZXNfID0gbnVsbDsKLSAgICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlc18gPSBudWxsOwotICAgICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IG51bGw7Ci0gICAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3NfID0gbnVsbDsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCB3c2RsU2VydmljZXNfKTsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCB1ZGRpU2VydmljZXNfKTsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCB3c2lsTGlua3NfKTsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCB1ZGRpTGlua3NfKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIFdTSUwncyBVUkwKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVybCgpCi0gIHsKLSAgICByZXR1cm4gdGhpc1dzaWxVcmxfOwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgV1NJTCBkb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzaWxEb2NfOwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyBhbGwgYWJzdHJhY3QgbGFuZ3VhZ2VzCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFdTSUxBYnN0cmFjdExhbmdzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRMYW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgYWxsIGFic3RyYWN0cwotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRXU0lMQWJzdHJhY3RzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRUZXh0KCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxXU0RMU2VydmljZXMoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMpOwotICAgIGlmICh3c2RsU2VydmljZXNfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgd3NkbFNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbFNlcnZpY2VzXzsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxVRERJU2VydmljZXMoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMpOwotICAgIGlmICh1ZGRpU2VydmljZXNfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgdWRkaVNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMpOwotICAgIH0KLSAgICByZXR1cm4gdWRkaVNlcnZpY2VzXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0QWxsV1NETFNlcnZpY2VzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlc18gPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VMaXN0ID0gaW5zcGVjdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZUxpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gc2tpcCBhbnkgc2VydmljZSB3aXRob3V0IGEgd3NkbCBuYW1lc3BhY2UKLSAgICAgIC8vIGFuZCBpbnZhbGlkIGRlc2NyaXB0aW9ucwotICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VMaXN0W2ldLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgaWYgKGRlc2NMaXN0Lmxlbmd0aCA8IDEpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlc2NMaXN0WzBdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9XU0RMKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSBuZXcgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIHNlcnZpY2VMaXN0W2ldKTsKLSAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh3c2RsU2VydmljZUVsZW1lbnQudmFsaWRhdGVXU0RMU2VydmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50LnNldE5hbWUod3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCkpOwotICAgICAgICAgIHdzZGxTZXJ2aWNlc18uYWRkKG5ldyBMaXN0RWxlbWVudCh3c2RsU2VydmljZUVsZW1lbnQpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUywgd3NkbFNlcnZpY2VzXyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdEFsbFVERElTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB1ZGRpU2VydmljZXNfID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlTGlzdCA9IGluc3BlY3Rpb24uZ2V0U2VydmljZXMoKTsKLSAgICBWZWN0b3IgdWRkaVNlcnZpY2VFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHNraXAgYW55IHNlcnZpY2Ugd2l0aG91dCBhIHdzZGwgbmFtZXNwYWNlCi0gICAgICAvLyBhbmQgaW52YWxpZCBkZXNjcmlwdGlvbnMKLSAgICAgIERlc2NyaXB0aW9uW10gZGVzY0xpc3QgPSBzZXJ2aWNlTGlzdFtpXS5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgIGlmIChkZXNjTGlzdC5sZW5ndGggPCAxKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZXNjTGlzdFswXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAoKG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjEpIHx8IG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjIpKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSBuZXcgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIHNlcnZpY2VMaXN0W2ldKTsKLSAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh1ZGRpU2VydmljZUVsZW1lbnQudmFsaWRhdGVVRERJU2VydmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldE5hbWUodWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50cy5hZGQodWRkaVNlcnZpY2VFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZWZyZXNoU2VydmljZURlZmluaXRpb25zRnJvbVJlZ2lzdHJ5KHVkZGlTZXJ2aWNlRWxlbWVudHMpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB1ZGRpU2VydmljZUVsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgdWRkaVNlcnZpY2VzXy5hZGQobmV3IExpc3RFbGVtZW50KGl0Lm5leHQoKSkpOwotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgdWRkaVNlcnZpY2VzXyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoU2VydmljZURlZmluaXRpb25zRnJvbVJlZ2lzdHJ5KFZlY3RvciB1ZGRpU2VydmljZUVsZW1lbnRzKQotICB7Ci0gICAgSGFzaE1hcCBpbnF1aXJ5QVBJVG9TZXJ2aWNlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1ZGRpU2VydmljZUVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIHVkZGlTZXJ2aWNlRWxlbWVudHMuZ2V0KGkpOwotICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSB1ZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9TZXJ2aWNlcy5nZXQoaW5xdWlyeUFQSSk7Ci0gICAgICAgIGlmIChzZXJ2aWNlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW5xdWlyeUFQSVRvU2VydmljZXMucHV0KGlucXVpcnlBUEksIHNlcnZpY2VzKTsKLSAgICAgICAgfQotICAgICAgICBzZXJ2aWNlcy5hZGQodWRkaVNlcnZpY2VFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldFNlcnZpY2VEZWZpbml0aW9uKG51bGwpOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gaW5xdWlyeUFQSVRvU2VydmljZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpIGlucXVpcnlBUElUb1NlcnZpY2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgIFVERElQcm94eSBwcm94eTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgcHJvcHMucHV0KEFjdGlvbklucHV0cy5UUkFOU1BPUlRfQ0xBU1NfTkFNRSwgQWN0aW9uSW5wdXRzLlRSQVNQT1JUX0NMQVNTKTsKLSAgICAgICAgcHJveHkgPSBuZXcgVURESVByb3h5KHByb3BzKTsKLSAgICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChuZXcgVVJMKGlucXVpcnlBUEkpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2aWNlcy5zaXplKCk7IGorKykKLSAgICAgICAgewotICAgICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIHNlcnZpY2VzLmdldChqKTsKLSAgICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0U2VydmljZURlZmluaXRpb24obnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBWZWN0b3Igc2VydmljZUtleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZpY2VzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBzZXJ2aWNlS2V5cy5hZGQoKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBzZXJ2aWNlcy5nZXQoaikpLmdldFVERElTZXJ2aWNlS2V5KCkpOwotICAgICAgfQotICAgICAgVmVjdG9yIGJ1c2luZXNzU2VydmljZXM7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcyA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKHNlcnZpY2VLZXlzKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICAgIGJ1c2luZXNzU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlS2V5cy5zaXplKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzZXJ2aWNlS2V5cy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcy5hZGQoKEJ1c2luZXNzU2VydmljZSkgcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwoKFN0cmluZykgc2VydmljZUtleXMuZ2V0KGspKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJ1c2luZXNzU2VydmljZXMuYWRkKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcy5hZGQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IHNlcnZpY2VzLnNpemUoKTsgaysrKQotICAgICAgewotICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKSBidXNpbmVzc1NlcnZpY2VzLmdldChrKTsKLSAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgc2VydmljZXMuZ2V0KGspOwotICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0U2VydmljZURlZmluaXRpb24oYnMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxXU0lMTGlua3MoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MpOwotICAgIGlmICh3c2lsTGlua3NfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFdTSUxMaW5rcygpOwotICAgICAgd3NpbExpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MpOwotICAgIH0KLSAgICByZXR1cm4gd3NpbExpbmtzXzsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxVRERJTGlua3MoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaUxpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MpOwotICAgIGlmICh1ZGRpTGlua3NfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFVERElMaW5rcygpOwotICAgICAgdWRkaUxpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MpOwotICAgIH0KLSAgICByZXR1cm4gdWRkaUxpbmtzXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0QWxsVURESUxpbmtzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHVkZGlMaW5rc18gPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgTGlua1tdIGxpbmtMaXN0ID0gaW5zcGVjdGlvbi5nZXRMaW5rcygpOwotICAgIFZlY3RvciB1ZGRpQnVzaW5lc3NFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHByb2Nlc3MgYW55IGxpbmtzIHdpdGggVURESSBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBsaW5rTGlzdFtpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAoKG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjEpIHx8IG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjIpKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IG5ldyBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIGxpbmtMaXN0W2ldKTsKLSAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXRCYXNlV3NpbFVSTChnZXRXc2lsVXJsKCkpOwotICAgICAgICBpZiAodWRkaUJ1c2luZXNzRWxlbWVudC52YWxpZGF0ZVVERElMaW5rKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50LnNldE5hbWUodWRkaUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnRzLmFkZCh1ZGRpQnVzaW5lc3NFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZWZyZXNoU2VydmljZVByb3ZpZGVyc0Zyb21SZWdpc3RyeSh1ZGRpQnVzaW5lc3NFbGVtZW50cyk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHVkZGlCdXNpbmVzc0VsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgdWRkaUxpbmtzXy5hZGQobmV3IExpc3RFbGVtZW50KGl0Lm5leHQoKSkpOwotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgdWRkaUxpbmtzXyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoU2VydmljZVByb3ZpZGVyc0Zyb21SZWdpc3RyeShWZWN0b3IgdWRkaUJ1c2luZXNzRWxlbWVudHMpCi0gIHsKLSAgICBIYXNoTWFwIGlucXVpcnlBUElUb0J1c2luZXNzZXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdWRkaUJ1c2luZXNzRWxlbWVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgdWRkaUJ1c2luZXNzRWxlbWVudHMuZ2V0KGkpOwotICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSB1ZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rSW5xdWlyeUFQSSgpOwotICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIGJ1c2luZXNzZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgICAgaWYgKGJ1c2luZXNzZXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGJ1c2luZXNzZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW5xdWlyeUFQSVRvQnVzaW5lc3Nlcy5wdXQoaW5xdWlyeUFQSSwgYnVzaW5lc3Nlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnVzaW5lc3Nlcy5hZGQodWRkaUJ1c2luZXNzRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0U2VydmljZVByb3ZpZGVyKG51bGwpOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gaW5xdWlyeUFQSVRvQnVzaW5lc3Nlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZykgaXQubmV4dCgpOwotICAgICAgVmVjdG9yIGJ1c2luZXNzZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgIFVERElQcm94eSBwcm94eTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgcHJvcHMucHV0KEFjdGlvbklucHV0cy5UUkFOU1BPUlRfQ0xBU1NfTkFNRSwgQWN0aW9uSW5wdXRzLlRSQVNQT1JUX0NMQVNTKTsKLSAgICAgICAgcHJveHkgPSBuZXcgVURESVByb3h5KHByb3BzKTsKLSAgICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChuZXcgVVJMKGlucXVpcnlBUEkpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBidXNpbmVzc2VzLnNpemUoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgYnVzaW5lc3Nlcy5nZXQoaik7Ci0gICAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXRTZXJ2aWNlUHJvdmlkZXIobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBidXNpbmVzc2VzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBidXNpbmVzc0tleXMuYWRkKCgoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGJ1c2luZXNzZXMuZ2V0KGopKS5nZXRVRERJTGlua0J1c2luZXNzS2V5KCkpOwotICAgICAgfQotICAgICAgVmVjdG9yIGJ1c2luZXNzRW50aXRpZXM7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NFbnRpdGllcyA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChidXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQotICAgICAgewotICAgICAgICBidXNpbmVzc0VudGl0aWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoYnVzaW5lc3NLZXlzLnNpemUoKSA+IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGJ1c2luZXNzS2V5cy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYnVzaW5lc3NFbnRpdGllcy5hZGQoKEJ1c2luZXNzRW50aXR5KSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoKFN0cmluZykgYnVzaW5lc3NLZXlzLmdldChrKSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJ1c2luZXNzRW50aXRpZXMuYWRkKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYnVzaW5lc3NFbnRpdGllcy5hZGQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IGJ1c2luZXNzZXMuc2l6ZSgpOyBrKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KSBidXNpbmVzc0VudGl0aWVzLmdldChrKTsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgYnVzaW5lc3Nlcy5nZXQoayk7Ci0gICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0U2VydmljZVByb3ZpZGVyKGJlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdEFsbFdTSUxMaW5rcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB3c2lsTGlua3NfID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpOwotICAgIExpbmtbXSBsaW5rTGlzdCA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHByb2Nlc3MgYW55IGxpbmtzIHdpdGggVURESSBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBsaW5rTGlzdFtpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFdzaWxMaW5rRWxlbWVudCB3c2lsTGlua0VsZW1lbnQgPSBuZXcgV3NpbFdzaWxMaW5rRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIGxpbmtMaXN0W2ldKTsKLSAgICAgICAgd3NpbExpbmtFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh3c2lsTGlua0VsZW1lbnQudmFsaWRhdGVXU0lMTGluaygpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NpbExpbmtFbGVtZW50LnNldE5hbWUod3NpbExpbmtFbGVtZW50LmdldFdTSUxMaW5rTG9jYXRpb24oKSk7Ci0gICAgICAgICAgd3NpbExpbmtzXy5hZGQobmV3IExpc3RFbGVtZW50KHdzaWxMaW5rRWxlbWVudCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCB3c2lsTGlua3NfKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsTGlua0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbExpbmtFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YjU5NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsTGlua0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBMaW5rCi0qLwotcHVibGljIGNsYXNzIFdzaWxMaW5rRWxlbWVudCBleHRlbmRzIFdzaWxDb21tb25FbGVtZW50Ci17Ci0gIHByb3RlY3RlZCBMaW5rIGxpbmtfOwotCi0gIHB1YmxpYyBXc2lsTGlua0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgbGlua18gPSBsaW5rOwotICB9Ci0KLSAgcHVibGljIFZlY3RvciBnZXRMaW5rQWJzdHJhY3RMYW5ncygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRMYW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TGlua0Fic3RyYWN0cygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRUZXh0KCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OTM1ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgU2VydmljZQotKi8KLXB1YmxpYyBjbGFzcyBXc2lsU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXc2lsQ29tbW9uRWxlbWVudAotewotICAgIHByb3RlY3RlZCBTZXJ2aWNlIHNlcnZpY2VfOwotCi0gICAgcHVibGljIFdzaWxTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgICAgIHNlcnZpY2VfID0gc2VydmljZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFNlcnZpY2VOYW1lTGFuZ3MoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTZXJ2aWNlTmFtZVtdIHNlcnZpY2VOYW1lcyA9IHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VOYW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoc2VydmljZU5hbWVzW2ldLmdldExhbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRTZXJ2aWNlTmFtZXMoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTZXJ2aWNlTmFtZVtdIHNlcnZpY2VOYW1lcyA9IHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VOYW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoc2VydmljZU5hbWVzW2ldLmdldFRleHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRTZXJ2aWNlQWJzdHJhY3RMYW5ncygpIHsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gc2VydmljZV8uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0TGFuZygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFNlcnZpY2VBYnN0cmFjdHMoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHNlcnZpY2VfLmdldEFic3RyYWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldFRleHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2U1MDAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24uRXh0ZW5zaW9uRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuQnVzaW5lc3NEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBVRERJIHNlcnZpY2UgaW4gYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IGV4dGVuZHMgV3NpbExpbmtFbGVtZW50Ci17Ci0gICAgcHJpdmF0ZSBCdXNpbmVzc0VudGl0eSBidXNFbnRpdHlfOwotCi0gICAgcHVibGljIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBsaW5rKTsKLSAgICAgICAgYnVzRW50aXR5XyA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb3ZpZGVyKEJ1c2luZXNzRW50aXR5IGJlKSB7Ci0gICAgICBidXNFbnRpdHlfID0gYmU7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1c2luZXNzRW50aXR5IGdldFNlcnZpY2VQcm92aWRlcigpIHsKLSAgICAgICAgcmV0dXJuIGJ1c0VudGl0eV87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gKGJ1c0VudGl0eV8gID09IG51bGwpID8gbnVsbCA6IGJ1c0VudGl0eV8uZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gKGJ1c0VudGl0eV8gPT0gbnVsbCkgPyBudWxsIDogYnVzRW50aXR5Xy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElMaW5rSW5xdWlyeUFQSSgpIHsKLSAgICAgICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChiZCA9PSBudWxsKSA/IG51bGwgOiBiZC5nZXRMb2NhdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpIHsKLSAgICAgICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChiZCA9PSBudWxsKSA/IG51bGwgOiBiZC5nZXRCdXNpbmVzc0tleSgpLmdldFRleHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElMaW5rRGlzY292ZXJ5VVJMKCkgewotICAgICAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpOwotICAgICAgICBpZiAoYmQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSBiZC5nZXREaXNjb3ZlcnlVUkwoKTsKLSAgICAgICAgICAgIHJldHVybiAoZGlzY292ZXJ5VVJMID09IG51bGwpID8gbnVsbCA6IGRpc2NvdmVyeVVSTC5nZXRUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVVERElMaW5rKCkgewotICAgICAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGJkICE9IG51bGwpOwotICAgIH0KLQotICAgIHByaXZhdGUgQnVzaW5lc3NEZXNjcmlwdGlvbiBnZXRWYWxpZFVERElCdXNpbmVzc0Rlc2NyaXB0aW9uKCkgewotICAgICAgICBFeHRlbnNpb25FbGVtZW50IGV4dEVsZW1lbnQgPSBsaW5rXy5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgIC8vIFRoZSBleHRlbnNpb24gZWxlbWVudCBvZiBhIFVEREkgbGluawotICAgICAgICAvLyBtdXN0IGJlIGEgQnVzaW5lc3NEZXNjcmlwdGlvbiBlbGVtZW50Ci0gICAgICAgIGlmICghKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0Rlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAvLyBBIHZhbGlkIEJ1c2luZXNzRGVzY3JpcHRpb24gbXVzdCBoYXZlIGFuIGlucXVpcnkgQVBJCi0gICAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uKCk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIC8vIEEgdmFsaWQgQnVzaW5lc3NEZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBidXNpbmVzcyBrZXkKLSAgICAgICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWV4dEVsZW1lbnQpLmdldEJ1c2luZXNzS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgICBpZiAoYnVzaW5lc3NLZXkgPT0gbnVsbCB8fCBidXNpbmVzc0tleS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiAoQnVzaW5lc3NEZXNjcmlwdGlvbilleHRFbGVtZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaVNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxOGRjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgVURESSBzZXJ2aWNlIGluIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IGV4dGVuZHMgV3NpbFNlcnZpY2VFbGVtZW50Ci17Ci0gICAgcHJpdmF0ZSBCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZV87Ci0KLSAgICBwdWJsaWMgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCwgc2VydmljZSk7Ci0gICAgICAgIGJ1c1NlcnZpY2VfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRGVmaW5pdGlvbihCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSkgewotICAgICAgICBidXNTZXJ2aWNlXyA9IGJ1c1NlcnZpY2U7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1c2luZXNzU2VydmljZSBnZXRTZXJ2aWNlRGVmaW5pdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGJ1c1NlcnZpY2VfOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIChidXNTZXJ2aWNlXyA9PSBudWxsKSA/IG51bGwgOiBidXNTZXJ2aWNlXy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiAoYnVzU2VydmljZV8gPT0gbnVsbCkgPyBudWxsIDogYnVzU2VydmljZV8uZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJU2VydmljZUlucXVpcnlBUEkoKSB7Ci0gICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKHNkID09IG51bGwpID8gbnVsbCA6IHNkLmdldExvY2F0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJU2VydmljZUtleSgpIHsKLSAgICAgICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoc2QgPT0gbnVsbCkgPyBudWxsIDogc2QuZ2V0U2VydmljZUtleSgpLmdldFRleHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElTZXJ2aWNlRGlzY292ZXJ5VVJMKCkgewotICAgICAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBnZXRWYWxpZFVERElTZXJ2aWNlRGVzY3JpcHRpb24oKTsKLSAgICAgICAgaWYgKHNkID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gc2QuZ2V0RGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgICAgICByZXR1cm4gKGRpc2NvdmVyeVVSTCA9PSBudWxsKSA/IG51bGwgOiBkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTZXJ2aWNlRGVzY3JpcHRpb24gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCkgewotICAgICAgICBEZXNjcmlwdGlvbltdIGRlc2NMaXN0ID0gc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZXh0RWxlbWVudCA9IGRlc2NMaXN0W2ldLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8vIFRoZSBleHRlbnNpb24gZWxlbWVudCBvZiBhIFVEREkgc2VydmljZSBkZXNjcmlwdGlvbgotICAgICAgICAgICAgLy8gbXVzdCBiZSBhIFNlcnZpY2VEZXNjcmlwdGlvbiBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoIShleHRFbGVtZW50IGluc3RhbmNlb2YgU2VydmljZURlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIEEgdmFsaWQgU2VydmljZURlc2NyaXB0aW9uIG11c3QgaGF2ZSBhbiBpbnF1aXJ5IEFQSQotICAgICAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoKChTZXJ2aWNlRGVzY3JpcHRpb24pZXh0RWxlbWVudCkuZ2V0TG9jYXRpb24oKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBBIHZhbGlkIFNlcnZpY2VEZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBzZXJ2aWNlIGtleQotICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoKFNlcnZpY2VEZXNjcmlwdGlvbilleHRFbGVtZW50KS5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgICAgICAgaWYgKHNlcnZpY2VLZXkgPT0gbnVsbCB8fCBzZXJ2aWNlS2V5Lmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXR1cm4gKFNlcnZpY2VEZXNjcmlwdGlvbilleHRFbGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlVURESVNlcnZpY2UoKSB7Ci0gICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKHNkICE9IG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICAgICAgcmV0dXJuIChuZXcgVWRkaTRqSGVscGVyKCkpLmdldFdTREwoZ2V0U2VydmljZURlZmluaXRpb24oKSwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2RsU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2JhZDMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24uRXh0ZW5zaW9uRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuSW1wbGVtZW50ZWRCaW5kaW5nOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5SZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLlJlZmVyZW5jZWRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0RMIHNlcnZpY2UgaW4gYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXc2lsU2VydmljZUVsZW1lbnQKLXsKLSAgICBwdWJsaWMgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCwgc2VydmljZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRXU0RMU2VydmljZVVSTCgpIHsKLSAgICAgICAgRGVzY3JpcHRpb24gZGVzYyA9IGdldFZhbGlkV1NETERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoZGVzYyA9PSBudWxsKSA/IG51bGwgOiBtYWtlQWJzb2x1dGUoZGVzYy5nZXRMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFdTRExCaW5kaW5nKCkgewotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBFeHRlbnNpb25FbGVtZW50IGV4dEVsZW1lbnQgPSBkZXNjTGlzdFtpXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZXh0RWxlbWVudCAhPSBudWxsICYmIGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2VkU2VydmljZSByZWZTZXJ2aWNlID0gKChSZWZlcmVuY2UpZXh0RWxlbWVudCkuZ2V0UmVmZXJlbmNlZFNlcnZpY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmU2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYuYWRkKHJlZlNlcnZpY2UuZ2V0UmVmZXJlbmNlZFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBJbXBsZW1lbnRlZEJpbmRpbmdbXSBpbXBsQmluZGluZ0xpc3QgPSAoKFJlZmVyZW5jZSlleHRFbGVtZW50KS5nZXRJbXBsZW1lbnRlZEJpbmRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpbXBsQmluZGluZ0xpc3QubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdi5hZGQoaW1wbEJpbmRpbmdMaXN0W2pdLmdldEJpbmRpbmdOYW1lKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBEZXNjcmlwdGlvbiBnZXRWYWxpZFdTRExEZXNjcmlwdGlvbigpIHsKLSAgICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBza2lwIHRoaXMgZGVzY3JpcHRpb24gaWYgdGhlIGxvY2F0aW9pbiBhdHRyaWJ1dGUgaXMgYSBtYWxmb3JtZWQgVVJMCi0gICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkZXNjTGlzdFtpXS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09IG51bGwgfHwgbG9jYXRpb24ubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIHNraXAgdGhpcyBkZXNjcmlwdGlvbiBpZiB0aGUgZXh0ZW5zaW9uIGVsZW1lbnQgaW5kaWNhdGVzCi0gICAgICAgICAgICAvLyB0aGF0IHRoZSBkZXNjcmlwdGlvbidzIGxvY2F0aW9uIGNvbnRhaW5zIG9ubHkgdGhlIHdzZGwgYmluZGluZwotICAgICAgICAgICAgRXh0ZW5zaW9uRWxlbWVudCBleHRFbGVtZW50ID0gZGVzY0xpc3RbaV0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGV4dEVsZW1lbnQgIT0gbnVsbCAmJiBleHRFbGVtZW50IGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgQm9vbGVhbiBlbmRwb2ludFByZXNlbnQgPSAoKFJlZmVyZW5jZSlleHRFbGVtZW50KS5nZXRFbmRwb2ludFByZXNlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5kcG9pbnRQcmVzZW50ICE9IG51bGwgJiYgZW5kcG9pbnRQcmVzZW50LmJvb2xlYW5WYWx1ZSgpID09IGZhbHNlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGEgdmFsaWQgZGVzY3JpcHRpb24gaXMgZm91bmQKLSAgICAgICAgICAgIHJldHVybiBkZXNjTGlzdFtpXTsKLSAgICAgICAgfQotICAgICAgICAvLyBubyB2YWxpZCBkZXNjcmlwdGlvbiBpcyBmb3VuZCBmb3IgdGhpcyBzZXJ2aWNlCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlV1NETFNlcnZpY2UoKSB7Ci0gICAgICAgIERlc2NyaXB0aW9uIGRlc2MgPSBnZXRWYWxpZFdTRExEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGRlc2MgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIGdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NpbExpbmtFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2lsTGlua0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0YTU3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2lsTGlua0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBsaW5rIGluIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBXc2lsV3NpbExpbmtFbGVtZW50IGV4dGVuZHMgV3NpbExpbmtFbGVtZW50Ci17Ci0gIHB1YmxpYyBXc2lsV3NpbExpbmtFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIGxpbmspOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0lMTGlua0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBtYWtlQWJzb2x1dGUobGlua18uZ2V0TG9jYXRpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVdTSUxMaW5rKCkKLSAgewotICAgIHJldHVybiAobGlua18uZ2V0TG9jYXRpb24oKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldFdTSUxMaW5rTG9jYXRpb24oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiNTMyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGYyZDU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OWUzZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk4YmViMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQwYTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODBhZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkV1NJTFRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQ2xlYXJXU0lMVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0NsZWFyV1NJTFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM1ODBmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQ2xlYXJXU0lMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIENsZWFyV1NJTFRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQ2xlYXJXU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIsICJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBDbGVhcldTSUxBY3Rpb24uZ2V0QWN0aW9uTGluayh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVJZCgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmYzODY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWNhMmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlSWQoKSwgdG9vbElkXywgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESUJ1c2luZXNzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJQnVzaW5lc3NUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZWU1NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJQnVzaW5lc3NUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFVERElCdXNpbmVzc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RVRERJQnVzaW5lc3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKHZpZXdUb29sTWFuYWdlciwgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0JBQ0tfVE9fVE9QIikpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFRvb2xzKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBVZGRpQnVzaW5lc3NEZXRhaWxzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX1VERElfTElOS19ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9BRERfQlVTSU5FU1NfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICAgICAgbmV3IEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfQUREX1VERElfQlVTSU5FU1NfVE9fRkFWT1JJVEVTIikpOwotICAgICAgICBuZXcgUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIX1VERElfQlVTSU5FU1MiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuIFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygid3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcCIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESVNlcnZpY2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJU2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYjA2OTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJU2VydmljZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFVERElTZXJ2aWNlc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RVRERJU2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQkFDS19UT19UT1AiKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBVZGRpU2VydmljZURldGFpbHNUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICAgICAgbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgICAgIG5ldyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfU0VSVklDRV9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgICAgICBuZXcgQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1NFUlZJQ0VfVE9fRkFWT1JJVEVTIikpOwotICAgICAgICBuZXcgUmVmcmVzaFVERElTZXJ2aWNlVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUkVGUkVTSF9VRERJX1NFUlZJQ0UiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuIFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygid3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcCIpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0RMU2VydmljZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTRExTZXJ2aWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZiOWVkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTRExTZXJ2aWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFdTRExTZXJ2aWNlc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RXU0RMU2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQkFDS19UT19UT1AiKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBXc2RsU2VydmljZURldGFpbHNUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICAgICAgbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgICAgIG5ldyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFIikpOwotICAgICAgICBuZXcgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1NFUlZJQ0VfVE9fRkFWT1JJVEVTIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0lMTGlua3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTSUxMaW5rc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1YjgyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTSUxMaW5rc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFdTSUxMaW5rc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RXU0lMTGlua3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbFNldERlZmF1bHRWaWV3VG9vbCh2aWV3VG9vbE1hbmFnZXIsICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9CQUNLX1RPX1RPUCIpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbExpbmtEZXRhaWxzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfTElOS19ERVRBSUxTIikpOwotICAgICAgICBuZXcgT3BlbldTSUxMaW5rVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NJTF9MSU5LIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMTGlua1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTExpbmtUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNTFjZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMTGlua1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NJTExpbmtUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIE9wZW5XU0lMTGlua1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBPcGVuV1NJTExpbmtBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTFhNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NJTFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIE9wZW5XU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL09wZW5XU0lMRm9ybS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJQnVzaW5lc3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmNzNiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgUmVmcmVzaFVERElCdXNpbmVzc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gUmVmcmVzaEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESVNlcnZpY2VUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGM4MmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESVNlcnZpY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJU2VydmljZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgUmVmcmVzaFVERElTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBSZWZyZXNoQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hXU0lMVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hXU0lMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2U4YTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoV1NJTFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTSUxUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIFJlZnJlc2hXU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICByZXR1cm4gUmVmcmVzaEFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ2MTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBVZGRpQnVzaW5lc3NEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9VZGRpQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpU2VydmljZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NDAwMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVWRkaVNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgVWRkaVNlcnZpY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1VkZGlTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzdkMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbCBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoVG9vbAotewotICBwdWJsaWMgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzMjFhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTFBlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNTA2ICAgMjAyOTQ1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEFsbG93IFdTRSB0byBiZSBsYXVuY2hlZCBmcm9tIGEgV1NJTCBmaWxlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgV1NJTFBlcnNwZWN0aXZlIGV4dGVuZHMgUGVyc3BlY3RpdmUKLXsKLSAgICBwcml2YXRlIEJhc2ljTW9kZWwgbW9kZWxfOwotICAgIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICAgIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgICBwdWJsaWMgV1NJTFBlcnNwZWN0aXZlKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCJ3c2lsIixjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gICAgewotICAgICAgICBtb2RlbF8gPSBuZXcgQmFzaWNNb2RlbCgiV3NpbE1vZGVsIik7Ci0gICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KGdldE1lc3NhZ2UoIldTSUxfTUFJTl9OT0RFIiksIG1vZGVsXyk7Ci0gICAgICAgIG1vZGVsXy5zZXRSb290RWxlbWVudCh0cmVlRWxlbWVudCk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IG5ldyBOb2RlTWFuYWdlcihjb250cm9sbGVyXyk7Ci0gICAgICAgIFdzaWxNYWluTm9kZSB3c2lsTWFpbk5vZGUgPSBuZXcgV3NpbE1haW5Ob2RlKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlcl8pOwotICAgICAgICBub2RlTWFuYWdlcl8uc2V0Um9vdE5vZGUod3NpbE1haW5Ob2RlKTsKLQotICAgICAgICAvLyBTdGFydGluZyBmcmFtZXNldCBzaXplcy4KLSAgICAgICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiMzAlLCoiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gIjc1JSwqIjsKLSAgICAgICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRXU0lMKCBTdHJpbmdbXSB3c2lsVVJMICkKLSAgICB7Ci0gICAgICBpZiggd3NpbFVSTCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHdzaWxVUkwubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIE9wZW5XU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuV1NJTEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgICB0YWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCwgd3NpbFVSTFtpbmRleF0gKTsKLSAgICAgICAgICB0YWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSwgU3RyaW5nLnZhbHVlT2YoV3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMpKTsKLSAgICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCB3c2lsVVJMLmxlbmd0aCA+MCApCi0gICAgICAgIHsKLSAgICAgICAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUwpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKSB7Ci0gICAgICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFuZXNGaWxlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKQotICAgIHsKLSAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxTdGF0dXNDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgICB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgICB7Ci0gICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2RsU2VydmljZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NkbFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzU5MjJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2RsU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzZGxTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFdzZGxTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2RsU2VydmljZURldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhMGZkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0KLSAgcHVibGljIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbERldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNGQ0MDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFdzaWxEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxZWRhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIHsKLSAgICBwdWJsaWMgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzVkNzVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgewotICAgIHB1YmxpYyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGlua0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExpbmtEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDc4MTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGlua0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxMaW5rRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFdzaWxMaW5rRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2lsTGlua0RldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE1haW5Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE1haW5Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1N2Q1YzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxNYWluTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV3NpbE1haW5Ob2RlIGV4dGVuZHMgV3NpbE5hdmlnYXRvck5vZGUgewotCi0gICAgcHVibGljIFdzaWxNYWluTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCAxLCAiaW1hZ2VzL3Jvb3RfbWFpbi5naWYiKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXc2lsTm9kZSB3c2lsTm9kZSA9IG5ldyBXc2lsTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQod3NpbE5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgT3BlbldTSUxUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1dTSUwiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOYXZpZ2F0b3JOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5hdmlnYXRvck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjMzRkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5hdmlnYXRvck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLldzaWxUb2dnbGVOb2RlQWN0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV3NpbE5hdmlnYXRvck5vZGUgZXh0ZW5kcyBOb2RlIHsKLQotICAgIHB1YmxpYyBXc2lsTmF2aWdhdG9yTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgsIFN0cmluZyBpbWFnZVBhdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsIGltYWdlUGF0aCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFdzaWxUb2dnbGVOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTE5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLCBmYWxzZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjY0NTllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdzaWxOb2RlIGV4dGVuZHMgV3NpbE5hdmlnYXRvck5vZGUgewotCi0gICAgcHVibGljIFdzaWxOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgIndzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgV3NpbERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBMaXN0V1NETFNlcnZpY2VzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9XU0RMX1NFUlZJQ0VTIikpOwotICAgICAgICBuZXcgTGlzdFVERElTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9TRVJWSUNFUyIpKTsKLSAgICAgICAgbmV3IExpc3RVRERJQnVzaW5lc3NUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1VERElfTElOS1MiKSk7Ci0gICAgICAgIG5ldyBMaXN0V1NJTExpbmtzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9XU0lMX0xJTktTIikpOwotICAgICAgICBuZXcgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQVRMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSCIpKTsKLSAgICAgICAgbmV3IEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NJTF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgICAgIG5ldyBBZGRXU0lMVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfV1NJTF9UT19GQVZPUklURVMiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxTZXREZWZhdWx0Vmlld1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YzExMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNldERlZmF1bHRWaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wgZXh0ZW5kcyBTZXREZWZhdWx0Vmlld1Rvb2wgewotICAgIHB1YmxpYyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQsIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgZmFsc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC90cmFuc2Zvcm1lci9XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvdHJhbnNmb3JtZXIvV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVmYTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC90cmFuc2Zvcm1lci9XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESUJ1c2luZXNzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NETFNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NJTExpbmtzVG9vbDsKLQotcHVibGljIGNsYXNzIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIgZXh0ZW5kcyBWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE5PTkUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgV1NETF9TRVJWSUNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFVERElfU0VSVklDRSA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBVRERJX0JVU0lORVNTID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFdTSUxfTElOSyA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBGUk9NX1RPT0xJRCA9IDU7Ci0gIHByaXZhdGUgYnl0ZSB0eXBlOwotCi0gIHB1YmxpYyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMoY29udHJvbGxlciwgIiIsIEFjdGlvbklucHV0cy5WSUVXSUQsIEZST01fVE9PTElEKTsKLSAgfQotCi0gIHB1YmxpYyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlciwgU3RyaW5nIGxpc3RNYW5hZ2VyS2V5LCBTdHJpbmcgdmlld0tleSwgYnl0ZSB0eXBlKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgbGlzdE1hbmFnZXJLZXksIHZpZXdLZXkpOwotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIGlmICh0eXBlID09IEZST01fVE9PTElEKQotICAgIHsKLSAgICAgIE5vZGUgY3Vyck5vZGUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBpZiAoY3Vyck5vZGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpbnQgdG9vbElkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuVE9PTElEKSk7Ci0gICAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBjdXJyTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICAgIFRvb2wgdG9vbCA9IHRvb2xNYW5hZ2VyLmdldFRvb2wodG9vbElkKTsKLSAgICAgICAgICBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVM7Ci0gICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVM7Ci0gICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1M7Ci0gICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RXU0lMTGlua3NUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1M7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3VwZXIubm9ybWFsaXplKHByb3BlcnRpZXMpOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE5vZGUgY3Vyck5vZGUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKGN1cnJOb2RlICE9IG51bGwpCi0gICAgewotICAgICAgVHJlZUVsZW1lbnQgY3VyckVsZW1lbnQgPSBjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKGN1cnJFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBjdXJyRWxlbWVudDsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBXU0RMX1NFUlZJQ0UgOgotICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFVERElfU0VSVklDRSA6Ci0gICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVURESV9CVVNJTkVTUyA6Ci0gICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgV1NJTF9MSU5LIDoKLSAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTSUxMaW5rcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGUk9NX1RPT0xJRCA6Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW50IHRvb2xJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLlRPT0xJRCkpOwotICAgICAgICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IGN1cnJOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgIFRvb2wgdG9vbCA9IHRvb2xNYW5hZ2VyLmdldFRvb2wodG9vbElkKTsKLSAgICAgICAgICAgICAgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFVERElMaW5rcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0V1NJTExpbmtzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTSUxMaW5rcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsdWdpbi9FeHBsb3JlclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbHVnaW4vRXhwbG9yZXJQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjM2U2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsdWdpbi9FeHBsb3JlclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoV2l6YXJkVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHBsb3JlclBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLSAgLyoqCi0gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFSU0VUID0gIlVURi04IjsKLSAgCi0gIC8qKgotICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBFeHBsb3JlclBsdWdpbiBpbnN0YW5jZV87Ci0gIHByaXZhdGUgQnVuZGxlQ29udGV4dCBjb250ZXh0OwotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uIFRoZSAicGx1Z2luIiBlbGVtZW50Ci0gICAqIGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZSBjbGFzcyA9Ci0gICAqICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luIi4KLSAgICogCi0gICAqIEBwYXJhbSBkZXNjcmlwdG9yCi0gICAqICAgICAgICAgICAgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgRXhwbG9yZXJQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICAqIChFeHBsb3JlclBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIpOwotICAgKiAKLSAgICogQHJldHVybiBUaGUgRXhwbG9yZXJQbHVnaW4gc2luZ2xldG9uLgotICAgKi8KLSAgc3RhdGljIHB1YmxpYyBFeHBsb3JlclBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIGZpcnN0IGxvYWRlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgYnVuZGxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChidW5kbGUpOwotICAgIC8vIGluaXQgdGhlIHNoZWxsIG9mIExhdW5jaFdpemFyZFRhc2sKLSAgICB0aGlzLmNvbnRleHQgPSBidW5kbGU7Ci0gICAgTGF1bmNoV2l6YXJkVGFzay5nZXRJbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIHVubG9hZGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGJ1bmRsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RvcChidW5kbGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tIHRoZQotICAgKiBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlLgotICAgKiAKLSAgICogQHBhcmFtIGtleQotICAgKiAgICAgICAgICAgIFRoZSBtZXNzYWdlIGtleSBzdHJpbmcgcHJlZml4ZWQgYnkgYSAiJSIgc3ltYm9sLiBUaGF0IGlzLCB0aGUKLSAgICogICAgICAgICAgICBzdHJpbmcgcGFzc2VkIGluIG11c3QgYmUgb2YgdGhlIGZvcm0gIiVLRVkiIHdoZXJlIHRoZQotICAgKiAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgYSBsaW5lIG9mIHRoZSBmb3JtOiAiS0VZID0KLSAgICogICAgICAgICAgICB2YWx1ZSIuCi0gICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5KQotICB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtLmdldFJlc291cmNlU3RyaW5nKGluc3RhbmNlXy5nZXRCdW5kbGUoKSwga2V5KTsgCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlCi0gICAqIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUuIFN1YnN0aXR1dGlvbiBzZXF1ZW5jZXMKLSAgICogaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nIGFyZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3Vic3RpdHV0aW9uCi0gICAqIG9iamVjdHMgKHdoaWNoIGFyZSBtb3N0IGZyZXF1ZW50bHkgc3RyaW5ncykuIFNlZSBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdAotICAgKiBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHN1YnN0aXR1dGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkKLSAgICogICAgICAgICAgICBUaGUgbWVzc2FnZSBrZXkgc3RyaW5nIHByZWZpeGVkIGJ5IGEgIiUiIHN5bWJvbC4gVGhhdCBpcywgdGhlCi0gICAqICAgICAgICAgICAgc3RyaW5nIHBhc3NlZCBpbiBtdXN0IGJlIG9mIHRoZSBmb3JtICIlS0VZIiB3aGVyZSB0aGUKLSAgICogICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRhaW5zIGEgbGluZSBvZiB0aGUgZm9ybTogIktFWSA9Ci0gICAqICAgICAgICAgICAgdmFsdWUiLgotICAgKiBAcGFyYW0gYXJncwotICAgKiAgICAgICAgICAgIFRoZSBzdWJzdGl0dXRpb24gdmFsdWVzIGZvciB0aGUgbWVzc2FnZSBhcyByZXF1aXJlZCBieSB0aGUKLSAgICogICAgICAgICAgICBtZXNzYWdlIGluIHBsdWdpbi5wcm9wZXJ0aWVzIGFuZCBieSB0aGUgcnVsZXMgb2YgY2xhc3MKLSAgICogICAgICAgICAgICBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC4KLSAgICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0TWVzc2FnZShrZXkpLCBhcmdzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZSBhcyByZWxhdGl2ZSB0byB0aGUKLSAgICogcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgaW5zdGFsbFVSTCA9IGluc3RhbmNlXy5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotICAgICAgVVJMIGltYWdlVVJMID0gbmV3IFVSTChpbnN0YWxsVVJMLCBuYW1lKTsKLSAgICAgIHJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VlIElQbHVnaW5IZWxwZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNc2dMb2dnZXJDb25maWcoSGFzaHRhYmxlIG1zZ0xvZ2dlckNvbmZpZykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBJUGx1Z2luSGVscGVyLgotICAgKi8KLSAgcHVibGljIEhhc2h0YWJsZSBnZXRNc2dMb2dnZXJDb25maWcoUGx1Z2luIHBsdWdpbikKLSAgewotICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIElQbHVnaW5IZWxwZXIuCi0gICAqLwotICBwdWJsaWMgSGFzaHRhYmxlIGdldE1zZ0xvZ2dlckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TXNnTG9nZ2VyQ29uZmlnKHRoaXMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBQbGF0Zm9ybS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKHRoaXMpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCkudG9PU1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKQotICB7Ci0JLy8gVE9ETzogZ2V0UGx1Z2luSW5zdGFsbExvY2F0aW9uIGNhbiByZXR1cm4gbnVsbCBhbmQgY2F1c2UgdHJvdWJsZSBmb3IgdGhlIFdTRSdzIGZhdm91cml0ZXMgbWVjaGFuaXNtLiA4OTEwMSBzaG91bGQgY29ycmVjdCB0aGlzLgotCXJldHVybiBnZXRQbHVnaW5JbnN0YWxsTG9jYXRpb24oKStGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0LkZBVk9SSVRFU19ERUZBVUxUOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBsdWdpbkluc3RhbGxMb2NhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gUGxhdGZvcm0ucmVzb2x2ZShpbnN0YW5jZV8uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIEJ1bmRsZUNvbnRleHQgZ2V0QnVuZGxlQ29udGV4dCgpIHsKLQkJcmV0dXJuIGdldEluc3RhbmNlKCkuY29udGV4dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcG9wdXAvUG9wdXBUZXN0V1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk3M2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcG9wdXAvUG9wdXBUZXN0V1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwNiAgIDEwNTA2OSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwODAzICAgMTUyNzkwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMTIzICAgMjE2MzcyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA5MDEyMiAgIDI1NzYxOCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIEFkZCBNZWNoYW5pc20gZm9yIEFkb3B0ZXJzIHRvIG1hcCBTZXJ2aWNlcyB0byBXU0RMIFVSTHMKLSAqIDIwMDkwMzEwICAgMjQyNDQwIHllbmx1QGNhLmlibS5jb20gLSBZZW4gTHUsIFBsdWdnYWJsZSBJRmlsZSB0byBVUkkgQ29udmVydGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb252ZXJ0ZXIuSUlGaWxlMlVyaUNvbnZlcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3IuR2V0TW9uaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV1NETFVSTFN0cmluZ1dyYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIFBvcHVwVGVzdFdTREwgZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0JCi0gIHB1YmxpYyBQb3B1cFRlc3RXU0RMKCkKLSAgewotICAgIHN1cGVyKEV4cGxvcmVyUGx1Z2luLmdldE1lc3NhZ2UoIiVQT1BVUF9URVNUX1dTREwiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0JU3RyaW5nIHN0YXRlTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQlTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLSAgCVdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCk7Ci0gICAgY29tbWFuZC5zZXRGb3JjZUxhdW5jaE91dHNpZGVJREUoZmFsc2UpOwotICAgIFZlY3RvciBsYXVuY2hPcHRpb25zID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgCSAgRmlsZSB3c2RsRmlsZSA9ICgoSVJlc291cmNlKW9iamVjdCkuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKTsgICAgICAgIAkJCi0gICAgCSAgdHJ5Ci0gICAgCSAgeyAgICAgICAgICAgIAkgICAgICAgICAgCQkKLSAgICAJCXdzZGxVUkwgPSB3c2RsRmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgCSAgfQotICAgIAkgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgCSAgewotICAgIAkJd3NkbFVSTCA9IHdzZGxGaWxlLnRvU3RyaW5nKCk7Ci0gICAgCSAgfQotICAgIAkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAJCXdzZGxVUkwgPSBnZXRDb252ZXJ0ZWRVUklGcm9tSUZpbGUoKElGaWxlKW9iamVjdCx3c2RsVVJMKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmhhc0FkYXB0ZXIob2JqZWN0LCBXU0RMVVJMU3RyaW5nV3JhcHBlci5jbGFzcy5nZXROYW1lKCkpKSB7Ci0gICAgICAgIAlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIob2JqZWN0LCBXU0RMVVJMU3RyaW5nV3JhcHBlci5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAJV1NETFVSTFN0cmluZ1dyYXBwZXIgd3JhcHBlciA9IChXU0RMVVJMU3RyaW5nV3JhcHBlcilhZGFwdGVkT2JqZWN0OwotICAgICAgICAJd3NkbFVSTCA9d3JhcHBlci5nZXRXU0RMVVJMU3RyaW5nKCk7ICAJCQotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICAgIHsKLSAgICAgICAgCVNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKW9iamVjdDsgICAgICAgICAgCi0gICAgICAgIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBzZXJ2aWNlSW1wbC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7ICAgICAgICAKLSAgICAgICAgCXdzZGxVUkwgPSBnZXRDb252ZXJ0ZWRVUklGcm9tVVJJKGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgICAgewotICAgICAgICAJV1NETFJlc291cmNlSW1wbCBXU0RMUkltcGwgPSAoV1NETFJlc291cmNlSW1wbClvYmplY3Q7Ci0gICAgICAgIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMUkltcGwuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAJd3NkbFVSTCA9IGdldENvbnZlcnRlZFVSSUZyb21VUkkoZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgCXdzZGxVUkwgPSAoU3RyaW5nKSBvYmplY3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIAkvLyBPYmplY3QgaXMgbm90IGFueSB0eXBlcyB3ZSByZWNvZ25pemVkLCB3c2RsVVJMIGlzIHN0aWxsIG51bGwuCi0gICAgICAgICAgCS8vIFRyeSBsb29raW5nIHVwIGFuIGFkYXB0ZXIgZm9yIHRoZSBvYmplY3QuCi0gICAgICAgIAkvLyBJZiBmb3VuZCwgdXBkYXRlIHdzZGxVUkwgY29udGFpbnMgdGhlIGFkYXB0ZWQgV1NETCBzdHJpbmcuICAKLSAgICAgICAgCS8vIElmIG5vdCBmb3VuZCwgd3NkbFVSTCB3b3VsZCBzdGlsbCBiZSBudWxsLgotICAgICAgICAJd3NkbFVSTCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgICAgIGFkZExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucywgd3NkbFVSTCwgc3RhdGVMb2NhdGlvbiwgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICBjb21tYW5kLnNldExhdW5jaE9wdGlvbnMoKExhdW5jaE9wdGlvbltdKWxhdW5jaE9wdGlvbnMudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFuZCBhZGQgdGhlIFdFQl9TRVJWSUNFX0VORFBPSU5ULCBXU0RMX1VSTCwgU1RBVEVfTE9DQVRJSU9OIGFuZCAKLSAgICogREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04gTGF1bmNoT3B0aW9ucyB0byB0aGUgbGF1bmNoT3B0aW9ucyB2ZWN0b3IKLSAgICogCi0gICAqIEBwYXJhbSBsYXVuY2hPcHRpb25zIC0gdmVjdG9yIG9mIGxhdW5jaE9wdGlvbnMgdG8gYWRkIHRvCi0gICAqIEBwYXJhbSB3c2RsVVJMCi0gICAqIEBwYXJhbSBzdGF0ZUxvY2F0aW9uCi0gICAqIEBwYXJhbSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZExhdW5jaE9wdGlvbnMoVmVjdG9yIGxhdW5jaE9wdGlvbnMsIFN0cmluZyB3c2RsVVJMLCBTdHJpbmcgc3RhdGVMb2NhdGlvbiwgU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikKLSAgewotCSAgR2V0TW9uaXRvckNvbW1hbmQgZ2V0TW9uaXRvckNtZCA9IG5ldyBHZXRNb25pdG9yQ29tbWFuZCgpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRNb25pdG9yU2VydmljZSh0cnVlKTsKLSAgICAgIGdldE1vbml0b3JDbWQuc2V0Q3JlYXRlKGZhbHNlKTsKLSAgICAgIGdldE1vbml0b3JDbWQuc2V0V2ViU2VydmljZXNQYXJzZXIobmV3IFdlYlNlcnZpY2VzUGFyc2VyKCkpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRXc2RsVVJJKHdzZGxVUkwpOwotICAgICAgZ2V0TW9uaXRvckNtZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgTGlzdCBlbmRwb2ludHMgPSBnZXRNb25pdG9yQ21kLmdldEVuZHBvaW50cygpOwotICAgICAgZm9yIChJdGVyYXRvciBlbmRwb2ludHNJdCA9IGVuZHBvaW50cy5pdGVyYXRvcigpOyBlbmRwb2ludHNJdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgIAkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XRUJfU0VSVklDRV9FTkRQT0lOVCwgKFN0cmluZyllbmRwb2ludHNJdC5uZXh0KCkpKTsKLSAgICAgIH0KLSAgICAgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCwgd3NkbFVSTCkpOwotCSAgbGF1bmNoT3B0aW9ucy5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pKTsKLQkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgcnVuKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotCSAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotCQkgIHRoaXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JICBlbHNlCi0JCSAgdGhpcy5zZWxlY3Rpb24gPSBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb252ZXJ0ZWRVUklGcm9tSUZpbGUoSUZpbGUgZmlsZSxTdHJpbmcgZGVmYXVsdFVSSSkKLSAgewotCVN0cmluZyBjb252ZXJ0ZWRMb2NhdGlvbiA9IG51bGw7Ci0JYm9vbGVhbiBhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gdHJ1ZTsKLQlpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUuZXhpc3RzKCkpCi0JewkKLQkgIElJRmlsZTJVcmlDb252ZXJ0ZXIgY29udmVydGVyID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJRmlsZTJVcmlDb252ZXJ0ZXIoKTsKLQkgIGlmIChjb252ZXJ0ZXIgIT0gbnVsbCkKLQkgIHsKLQkJY29udmVydGVkTG9jYXRpb24gPSBjb252ZXJ0ZXIuY29udmVydChmaWxlKTsKLQkJYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSA9IGNvbnZlcnRlci5hbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlKCk7Ci0JICB9Ci0JfQotCWlmIChjb252ZXJ0ZWRMb2NhdGlvbiA9PSBudWxsICYmIGFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUpCi0JICByZXR1cm4gZGVmYXVsdFVSSTsKLQlyZXR1cm4gY29udmVydGVkTG9jYXRpb247Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udmVydGVkVVJJRnJvbVVSSShTdHJpbmcgb3JpZ2luYWxVUkkpCi0gIHsKLQlJRmlsZSBmaWxlID0gbnVsbDsKLSAgICBpZiAob3JpZ2luYWxVUkkgIT0gbnVsbCkKLQl7Ci0JICBTdHJpbmcgcGxhdGZvcm1SZXNvdXJjZSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOwotCSAgaWYgKG9yaWdpbmFsVVJJLnN0YXJ0c1dpdGgocGxhdGZvcm1SZXNvdXJjZSkpCi0JICAgIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgob3JpZ2luYWxVUkkuc3Vic3RyaW5nKHBsYXRmb3JtUmVzb3VyY2UubGVuZ3RoKCkpKSk7Ci0JICBlbHNlIGlmIChvcmlnaW5hbFVSSS5zdGFydHNXaXRoKCJmaWxlOiIpKQotCSAgewotCQlTdHJpbmcgZmlsZVBhdGggPSBjb252ZXJ0VG9SZWxhdGl2ZShvcmlnaW5hbFVSSSk7Ci0JCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkgIH0KLQl9Ci0gICAgcmV0dXJuIGdldENvbnZlcnRlZFVSSUZyb21JRmlsZShmaWxlLG9yaWdpbmFsVVJJKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29udmVydFRvUmVsYXRpdmUoU3RyaW5nIHVyaSkKLSAgewotICAJLy9yZW1vdmUgZmlsZToKLQlTdHJpbmcgZmlsZSA9ICJmaWxlOi8iOwotCVN0cmluZyBmaWxlTCA9ICJmaWxlOiI7Ci0gIAlTdHJpbmcgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotICAgIHJvb3QgPSBmaWxlICsgcm9vdDsKLSAgCVN0cmluZyByb290TCA9IGZpbGVMICsgcm9vdDsKLSAgICBpZih1cmkuc3RhcnRzV2l0aChyb290KSB8fCB1cmkuc3RhcnRzV2l0aChyb290TCkpewotICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcocm9vdC5sZW5ndGgoKSk7ICAJCi0gICAgfQotICAgIHJldHVybiB1cmk7Ci0gIH0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcG9wdXAvUG9wdXBUZXN0V1NJTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wb3B1cC9Qb3B1cFRlc3RXU0lMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOGEzMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wb3B1cC9Qb3B1cFRlc3RXU0lMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODA1MDYgICAyMDI5NDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQWxsb3cgV1NFIHRvIGxhdW5jaCBvbiBXU0lMIGZpbGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uczsKLQotcHVibGljIGNsYXNzIFBvcHVwVGVzdFdTSUwgZXh0ZW5kcyBQb3B1cFRlc3RXU0RMCi17Ci0gIHByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCQotICBwdWJsaWMgUG9wdXBUZXN0V1NJTCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRMYXVuY2hPcHRpb25zKFZlY3RvciBsYXVuY2hPcHRpb25zLCBTdHJpbmcgd3NkbFVSTCwgU3RyaW5nIHN0YXRlTG9jYXRpb24sIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pCi0gIHsKLSAgICBsYXVuY2hPcHRpb25zLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuV1NJTF9VUkwsIHdzZGxVUkwpKTsKLQkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5TVEFURV9MT0NBVElPTixzdGF0ZUxvY2F0aW9uKSk7Ci0JICBsYXVuY2hPcHRpb25zLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04sZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnRFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQyNGMzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9IVFRQVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBBIHR5cGUgb2YgVHJhbnNwb3J0RXhjZXB0aW9uIHRoYXQgY2FuIGJlIHRocm93biB3aGVuIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wKLSAqIGlzIEhUVFAuICBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIEhUVFAgcmVzcG9uc2UgaXMgY2FwdHVyZWQgaW4gdGhpcwotICogZXhjZXB0aW9uIGFuZCBwYXNzZWQgdXAgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLSAqLwotcHVibGljIGNsYXNzIEhUVFBUcmFuc3BvcnRFeGNlcHRpb24gZXh0ZW5kcyBUcmFuc3BvcnRFeGNlcHRpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gODI3NzE4MDczMTc5ODg1ODg3N0w7Ci0JCi0JcHJpdmF0ZSBpbnQgc3RhdHVzQ29kZTsKLQlwcml2YXRlIE1hcCBoZWFkZXJzOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBzdGF0dXNDb2RlIFRoZSBIVFRQIHN0YXR1cyBjb2RlLgotCSAqIEBwYXJhbSBtZXNzYWdlIEEgbWVzc2FnZSBhYm91dCB0aGUgcHJvYmxlbSB0aGF0IG9jY3VycmVkLgotCSAqIEBwYXJhbSBoZWFkZXJzIEEgbWFwIG9mIHRoZSBIVFRQIGhlYWRlcnMuCi0JICovCi0JcHVibGljIEhUVFBUcmFuc3BvcnRFeGNlcHRpb24oaW50IHN0YXR1c0NvZGUsIFN0cmluZyBtZXNzYWdlLCBNYXAgaGVhZGVycykgewotCQlzdXBlcihtZXNzYWdlKTsKLQkJdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKLQkJdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSFRUUCBzdGF0dXMgY29kZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIGV4Y2VwdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBIVFRQIHN0YXR1cyBjb2RlLgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0U3RhdHVzQ29kZSgpIHsKLQkJcmV0dXJuIHN0YXR1c0NvZGU7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBIVFRQIGhlYWRlciBmb3IgdGhlIGdpdmVuIGtleQotCSAqIAotCSAqIEBwYXJhbSBrZXkgVGhlIGtleSB2YWx1ZS4KLQkgKiBAcmV0dXJuIFRoZSBIVFRQIGhlYWRlciB2YWx1ZSBmb3Iga2V5LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggaGVhZGVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SGVhZGVyKFN0cmluZyBrZXkpIHsKLQkgICAgT2JqZWN0IHZhbHVlID0gaGVhZGVycy5nZXQoa2V5KTsKLQkgICAgaWYgKHZhbHVlICE9IG51bGwpCi0JICAgIAlyZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLQkgICAgZWxzZQotCSAgICAJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSURlc2VyaWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSURlc2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDhhMjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lEZXNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogVGhlIElEZXNlcmlhbGl6ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRha2luZyBhbiBYTUwgc3RyaW5nIGFuZCBkZXNlcmlhbGl6aW5nIGl0Ci0gKiBpbnRvIHZhbHVlcyB0byBwb3B1bGF0ZSBhbiBJU09BUE1lc3NhZ2UuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2VyaWFsaXplciB7Ci0JCi0JLyoqCi0JICogRGVzZXJpYWxpemUgdGhlIFhNTCBzdHJpbmcgaW50byB0aGUgSVNPQVBNZXNzYWdlLiAgVGhlIHBhcnQgcGFyYW1ldGVyIHRlbGxzIHRoZSBtZXRob2QKLQkgKiB3aGljaCBwYXJ0IG9mIHRoZSBtZXNzYWdlICh0aGUgZW52ZWxvcGUgb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIgb3IgYm9keSkgdGhlIFhNTAotCSAqIHN0cmluZyByZXByZXNlbnRzLiAgTm90ZSB0aGF0ICJjb250ZW50cyIgcmVmZXJzIHRvIHRoZSBsaXN0IG9mIGVsZW1lbnRzIGluc2lkZSB0aGUgaGVhZGVyCi0JICogb3IgYm9keSwgYW5kIG5vdCB0aGUgaGVhZGVyIG9yIGJvZHkgZWxlbWVudCBpdHNlbGYuCi0JICogCi0JICogQHBhcmFtIHBhcnQgT25lIG9mIHtAbGluayBJU09BUE1lc3NhZ2UjRU5WRUxPUEV9LCB7QGxpbmsgSVNPQVBNZXNzYWdlI0hFQURFUl9DT05URU5UfSwgb3IKLQkgKiB7QGxpbmsgSVNPQVBNZXNzYWdlI0JPRFlfQ09OVEVOVH0uCi0JICogQHBhcmFtIHhtbCBUaGUgWE1MIHN0cmluZyB0byBkZXNlcmlhbGl6ZS4KLQkgKiBAcGFyYW0gbWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIGRlc2VyaWFsaXplIGludG8uCi0JICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZXNlcmlhbGl6ZShpbnQgcGFydCwgU3RyaW5nIHhtbCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb247CQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQTWVzc2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZDBhZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBNZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBJU09BUE1lc3NhZ2UgcmVwcmVzZW50cyBhIFNPQVAgbWVzc2FnZSBpbiBhIHdlYiBzZXJ2aWNlIGludm9jYXRpb24gbWFkZSBieSB0aGUKLSAqIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcidzIHRyYW5zcG9ydCBzdGFjay4KLSAqIDxici8+Ci0gKiA8YnIvPgotICogVGhlIHNldHRlcnMgb2YgSVNPQVBNZXNzYWdlIGFyZSBjYWxsZWQgYnkgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHBvcHVsYXRlIHRoZQotICogbWVzc2FnZSBiZWZvcmUgc2VuZGluZy4gIFdTRSBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCBhbGwgbWVzc2FnZSBlbGVtZW50cyBpdCBzZXRzCi0gKiB3aWxsIGhhdmUgdGhlIHNhbWUgb3duZXIgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBNZXNzYWdlIHsKLQotCS8qKgotCSAqIElTT0FQTWVzc2FnZSBkZWZpbmVzIHRoaXMgcHJvcGVydHkgZm9yIHN0b3JpbmcgdGhlIFNPQVAgYWN0aW9uIHZhbHVlIGluCi0JICogYSB3ZWIgc2VydmljZSBpbnZvY2F0aW9uLiAgVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHNldCBieSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLQkgKiBwcmlvciB0byBwYXNzaW5nIHRoZSBtZXNzYWdlIHRvIHtAbGluayBJU09BUFRyYW5zcG9ydCNzZW5kKFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIElTT0FQTWVzc2FnZSl9Ci0JICovCi0JU3RyaW5nIFBST1BfU09BUF9BQ1RJT04gPSAicHJvcF9zb2FwX2FjdGlvbiI7Ci0JCi0JLyoqCi0JICogVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgYSBtZXNzYWdlLiAgSXQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24KLQkgKiBpcyB3b3JraW5nIHdpdGggdGhlIGVudGlyZSBTT0FQIGVudmVsb3BlIGVsZW1lbnQuIAotCSAqLwotCWludCBFTlZFTE9QRSA9IDA7Ci0JCi0JLyoqCi0JICogVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgYSBtZXNzYWdlLiAgSXQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24KLQkgKiBpcyB3b3JraW5nIHdpdGggdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUgU09BUCBoZWFkZXIgZWxlbWVudC4KLQkgKi8KLQlpbnQgSEVBREVSX0NPTlRFTlQgPSAxOwotCQotCS8qKgotCSAqIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGEgbWVzc2FnZS4gIEl0IGluZGljYXRlcyB0aGUgb3BlcmF0aW9uCi0JICogaXMgd29ya2luZyB3aXRoIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlIFNPQVAgYm9keSBlbGVtZW50LgotCSAqLwotCWludCBCT0RZX0NPTlRFTlQgPSAyOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgTWVzc2FnZUNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVzc2FnZS4gIFRoZSBNZXNzYWdlQ29udGV4dCBpcyBjcmVhdGVkCi0JICogYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbmQgcGFzc2VkIHRvIHRoZSB0cmFuc3BvcnQgc3RhY2sgZHVyaW5nIG1lc3NhZ2UgY3JlYXRpb24uICAKLQkgKiBJbXBsZW1lbnRlcnMgb2YgSVNPQVBNZXNzYWdlIHNob3VsZCBzdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgTWVzc2FnZUNvbnRleHQuCi0JICogCi0JICogQHJldHVybiBUaGUgTWVzc2FnZUNvbnRleHQgZW5jYXN1bGF0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3ZWIgc2VydmljZSBvcGVyYXRpb24uIAotCSAqIEBzZWUgSVNPQVBUcmFuc3BvcnQjbmV3TWVzc2FnZShNZXNzYWdlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgTWVzc2FnZUNvbnRleHQgZ2V0TWVzc2FnZUNvbnRleHQoKTsKLQotCS8qKgotCSAqIFNldHMgYSBwcm9wZXJ0eSBpbiB0aGlzIElTT0FQTWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0ga2V5IFRoZSBrZXkgKG5hbWUpIG9mIHRoZSBwcm9wZXJ0eQotCSAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoaXMgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBrZXkgVGhlIGtleSAobmFtZSkgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlLgotCSAqIEByZXR1cm4gVGhlIHZhbHVlIGFzc29pY2F0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LCBvciBudWxsIGlmIHRoZXJlJ3Mgbm8gc3VjaCBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBrZXkpOwotCi0JLyoqCi0JICogVGhlIG5hbWVzcGFjZSB0YWJsZSBob2xkcyB0aGUgbmFtZXNwYWNlIGRlY2xhcmFpb25zIHRoYXQgYXJlIG9uIHRoZSBlbnZlbG9wZSBlbGVtZW50Ci0JICogb2YgdGhlIFNPQVAgbWVzc2FnZS4gIFRoZSB0YWJsZSdzIGtleXMgYXJlIHRoZSBuYW1lc3BhY2UgVVJJcyBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlCi0JICogYXNzb2NpYXRlZCBuYW1lc3BhY2UgcHJlZml4ZXMuCi0JICogPGJyLz4KLQkgKiA8YnIvPgotCSAqIFRoZSBlZmZlY3Qgb2YgY2FsbGluZyB0aGlzIG1ldGhvZCBpcyB0aGF0IHRoZSBkZWNsYXJhdGlvbnMgaW4gdGhlIG5hbWVzcGFjZSB0YWJsZQotCSAqIGFyZ3VtZW50IHNob3VsZCBhZGQgdG8gb3IgcmVwbGFjZSB0aGUgZGVjbGFyYXRpb25zIG9uIHRoZSBlbnZlbG9wZS4gIFRoaXMgQVBJIGRvZXMKLQkgKiBub3Qgc3BlY2lmeSB3aGF0IGhhcHBlbnMgdG8gZXhpc3RpbmcgZGVjbGFyYXRpb25zIG9uIHRoZSBlbnZlbG9wZSB3aGljaCBhcmUgbm90Ci0JICogaW4gdGhlIG5hbWVzcGFjZSB0YWJsZSBwYXNzZWQgaW4uCi0JICogCi0JICogQHBhcmFtIG5hbWVzcGFjZVRhYmxlIFRoZSBuYW1lc3BhY2UgdGFibGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VUYWJsZShNYXAgbmFtZXNwYWNlVGFibGUpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIHRhYmxlIG9mIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIHRoYXQgYXJlIG9uIHRoZSBlbnZlbG9wZSBlbGVtZW50IG9mIHRoZQotCSAqIFNPQVAgbWVzc2FnZS4gIFRoZSB0YWJsZSdzIGtleXMgYXJlIHRoZSBuYW1lc3BhY2UgVVJJcyBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlCi0JICogYXNzb2NpYXRlZCBuYW1lc3BhY2UgcHJlZml4ZXMuCi0JICogPGJyLz4KLQkgKiA8YnIvPgotCSAqIFRoZSBuYW1lc3BhY2UgdGFibGUgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgbWF5IGJlIG1vZGlmaWVkIGJ5IHRoZSBXZWIgU2VydmljZXMKLQkgKiBFeHBsb3JlciBhbmQgbGF0ZXIgdXBkYXRlZCBiYWNrIHRvIHRoZSBtZXNzYWdlIHZpYSB0aGUgc2V0TmFtZXNhcGNlVGFibGUoKSBtZXRob2QuCi0JICogCi0JICogQHJldHVybiBBIHRhYmxlIG9mIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzIG9uIHRoZSBTT0FQIGVudmVsb3BlLgotCSAqLwotCXB1YmxpYyBNYXAgZ2V0TmFtZXNwYWNlVGFibGUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIGVudmVsb3BlIGVsZW1lbnQgb2YgdGhpcyBtZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBlbnZlbG9wZSBUaGUgZW52ZWxvcGUgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFbnZlbG9wZShFbGVtZW50IGVudmVsb3BlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVsZW1lbnQgb2YgdGhpcyBtZXNzYWdlLiAgVGhlIGRlZXAgcGFyYW1ldGVyIGRpY3RhdGVzIHdoZXRoZXIKLQkgKiB0aGUgbWV0aG9kIHJldHVybnMgdGhlIHdob2xlIGVudmVsb3BlIHdpdGggYWxsIGl0cyBkZXNjZW5kYW50cyBvciBqdXN0IHRoZSBlbnZlbG9wZSAKLQkgKiBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gZGVlcCBJZiB0cnVlLCB0aGUgZW52ZWxvcGUgYW5kIGl0cyBkZXNjZW5kYW50cyBhcmUgcmV0dXJuZWQsIG90aGVyd2lzZSBvbmx5Ci0JICogdGhlIGVudmVsb3BlIGVsZW1lbnQgaXRzZWxmIGlzIHJldHVybmVkLgotCSAqIEByZXR1cm4gQW4gZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRFbnZlbG9wZShib29sZWFuIGRlZXApOwotCi0JLyoqCi0JICogU2V0cyB0aGUgaGVhZGVyIGVsZW1lbnQgb2YgdGhpcyBtZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBoZWFkZXIgVGhlIGhlYWRlciBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhlYWRlcihFbGVtZW50IGhlYWRlcik7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBoZWFkZXIgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuICBUaGUgZGVlcCBwYXJhbWV0ZXIgZGljdGF0ZXMgd2hldGhlcgotCSAqIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgd2hvbGUgaGVhZGVyIHdpdGggYWxsIGl0cyBkZXNjZW5kYW50cyBvciBqdXN0IHRoZSBoZWFkZXIgCi0JICogZWxlbWVudCBpdHNlbGYuCi0JICogCi0JICogQHBhcmFtIGRlZXAgSWYgdHJ1ZSwgdGhlIGhlYWRlciBhbmQgaXRzIGRlc2NlbmRhbnRzIGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIG9ubHkKLQkgKiB0aGUgaGVhZGVyIGVsZW1lbnQgaXRzZWxmIGlzIHJldHVybmVkLgotCSAqIEByZXR1cm4gQW4gZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRIZWFkZXIoYm9vbGVhbiBkZWVwKTsKLQotCS8qKgotCSAqIFNldHMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBnb2VzIGludG8gdGhlIG1lc3NhZ2UncyBoZWFkZXIuCi0JICogCi0JICogQHBhcmFtIGhlYWRlckNvbnRlbnQgQW4gYXJyYXkgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SGVhZGVyQ29udGVudChFbGVtZW50W10gaGVhZGVyQ29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSBpbnNpZGUgdGhlIG1lc3NhZ2UncyBoZWFkZXIuCi0JICogCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBlbGVtZW50cy4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdldEhlYWRlckNvbnRlbnQoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIGJvZHkgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuICBGb3IgYW4gUlBDIHN0eWxlIG1lc3NhZ2UsIHRoZSBmaXJzdCBjaGlsZAotCSAqIGVsZW1lbnQgb2YgdGhlIGJvZHkgc2hvdWxkIGJlIHRoZSBSUEMgd3JhcHBlciBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBib2R5IFRoZSBib2R5IGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Qm9keShFbGVtZW50IGJvZHkpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYm9keSBvZiB0aGlzIG1lc3NhZ2UuICBUaGUgZGVlcCBwYXJhbWV0ZXIgZGljdGF0ZXMgd2hldGhlcgotCSAqIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgd2hvbGUgYm9keSB3aXRoIGFsbCBpdHMgZGVzY2VuZGFudHMgZWxlbWVudHMgb3IganVzdCB0aGUKLQkgKiBib2R5LiAgRm9yIGFuIFJQQyBzdHlsZSBtZXNzYWdlLCB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgCi0JICogYm9keSBzaG91bGQgYmUgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIHRoZSBkZWVwCi0JICogcGFyYW1ldGVyLgotCSAqIAotCSAqIEBwYXJhbSBkZWVwIElmIHRydWUsIHRoZSBib2R5IGFuZCBpdHMgZGVzY2VuZGFudHMgYXJlIHJldHVybmVkLCBvdGhlcndpc2Ugb25seQotCSAqIHRoZSBib2R5IChhbmQgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQgaWYgdGhlIG1lc3NhZ2UgaXMgUlBDIHN0eWxlKSBpcyByZXR1cm5lZC4KLQkgKiBAcmV0dXJuIEFuIGVsZW1lbnQuCi0JICovCQotCXB1YmxpYyBFbGVtZW50IGdldEJvZHkoYm9vbGVhbiBkZWVwKTsKLQotCS8qKgotCSAqIFNldHMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBnb2VzIGludG8gdGhlIG1lc3NhZ2UncyBib2R5LiAgRm9yIGFuIFJQQyBzdHlsZQotCSAqIG1lc3NhZ2UsIHRoZSBib2R5IGNvbnRlbnRzIGFyZSB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBSUEMgd3JhcHBlciBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBib2R5Q29udGVudCBBbiBhcnJheSBvZiBlbGVtZW50cy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCb2R5Q29udGVudChFbGVtZW50W10gYm9keUNvbnRlbnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgaW5zaWRlIHRoZSBtZXNzYWdlJ3MgYm9keS4gIEZvciBhbiBSUEMgc3R5bGUKLQkgKiBtZXNzYWdlLCB0aGUgYm9keSBjb250ZW50cyBhcmUgdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudC4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2V0Qm9keUNvbnRlbnQoKTsKLQotCS8qKgotCSAqIFNldCB0aGUgZmF1bHQgZWxlbWVudCBmb3IgdGhpcyBtZXNzYWdlLCBpZiBhbnkuCi0JICogCi0JICogQHBhcmFtIGZhdWx0IEEgZmF1bHQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGYXVsdChFbGVtZW50IGZhdWx0KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhdWx0IGVsZW1lbnQsIGlmIGFueS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBmYXVsdCBlbGVtZW50IG9yIG51bGwgaWYgbm8gZmF1bHQgaGFzIG9jY3VycmVkLgotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEZhdWx0KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBYTUwgc2VyaWFsaXplZCBmb3JtIG9mIHRoaXMgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEByZXR1cm4gQW4gWE1MIHN0cmluZy4KLQkgKiBAc2VlIElTZXJpYWxpemVyCi0JICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gCi0JICovCi0JcHVibGljIFN0cmluZyB0b1hNTCgpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb247Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUFRyYW5zcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDJhM2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi0vKioKLSAqIFRoZSBJU09BUFRyYW5zcG9ydCBpcyB0aGUgY29yZSBwaWVjZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRyYW5zcG9ydCBzdGFjay4KLSAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBpbnZva2luZyB0aGUgd2ViIHNlcnZpY2UgYW5kIGl0IGFsc28gYWN0cyBhcyB0aGUgZmFjdG9yeSBmb3IKLSAqIGNyZWF0aW5nIElTZXJpYWxpZXIsIElEZXNlcmlhbGl6ZXIsIGFuZCBJU09BUE1lc3NhZ2UgaW5zdGFuY2VzIHdoaWNoIG1ha2UgdXAgdGhlCi0gKiByZXN0IG9mIHRoZSBXU0UgdHJhbnNwb3J0LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQVHJhbnNwb3J0IHsJCQotCi0JLyoqCi0JICogRmFjdG9yeSBtZXRob2QgZm9yIElTZXJpYWxpemVyLgotCSAqIAotCSAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgSVNlcmlhbGl6ZXIuCi0JICovCi0JcHVibGljIElTZXJpYWxpemVyIG5ld1NlcmlhbGl6ZXIoKTsKLQkKLQkvKioKLQkgKiBGYWN0b3J5IG1ldGhvZCBmb3IgSURlc2VyaWFsaXplci4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIElEZXNlcmlhbGl6ZXIuCi0JICovCi0JcHVibGljIElEZXNlcmlhbGl6ZXIgbmV3RGVzZXJpYWxpemVyKCk7Ci0JCi0JLyoqCi0JICogRmFjdG9yeSBtZXRob2QgZm9yIElTT0FQTWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dCBNZXNzYWdlQ29udGV4dCBlbmNhcHN1bGF0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3ZWIgc2VydmljZSBvcGVyYXRpb24uCi0JICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiBJU09BUE1lc3NhZ2UuCi0JICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgSVNPQVBNZXNzYWdlIG5ld01lc3NhZ2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbnZva2VzIHRoZSB3ZWIgc2VydmljZSBvcGVyYXRpb24gYnkgc2VuZGluZyB0aGUgU09BUCBtZXNzYWdlLCB0aGVuIHBhcnNpbmcgdGhlIHJlc3VsdHMKLQkgKiBpbnRvIGEgcmVzcG9uc2UgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSB1cmwgVGhlIGVuZHBvaW50IFVSTC4KLQkgKiBAcGFyYW0gdXNlcm5hbWUgVXNlcm5hbWUgdG8gdXNlIGZvciBiYXNpYyBhdXRoIHByb3RlY3RlZCBlbmRwb2ludHMuICBTZXQgdG8gbnVsbCBpZiBub3QgcmVxdWlyZWQuICAKLQkgKiBAcGFyYW0gcGFzc3dvcmQgUGFzc3dvcmQgdG8gdXNlIGZvciBiYXNpYyBhdXRoIHByb3RlY3RlZCBlbmRwb2ludHMuICBTZXQgdG8gbnVsbCBpZiBub3QgcmVxdWlyZWQuCi0JICogQHBhcmFtIG1lc3NhZ2UgVGhlIFNPQVAgcmVxdWVzdCBtZXNzYWdlLgotCSAqIEByZXR1cm4gQW4gSVNPQVBNZXNhZ2UgcmVwcmVzZW50aW5nIHRoZSByZXNwb25zZSBmcm9tIHRoZSB3ZWIgc2VydmljZSBpbnZvY2F0aW9uLgotCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCi0JICovCi0JcHVibGljIElTT0FQTWVzc2FnZSBzZW5kKFN0cmluZyB1cmwsIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRlM2RjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUFRyYW5zcG9ydFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi0vKioKLSAqIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgaXMgYSBmYWN0b3J5IGZvciBjcmVhdGluZyBJU09BUFRyYW5zcG9ydCBvYmplY3RzLgotICogQW55b25lIHdobyB3aXNoZXMgdG8gZXh0ZW5kIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIud3NlVHJhbnNwb3J0UHJvdmlkZXIKLSAqIGV4dGVuc2lvbi1wb2ludCBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgaW50ZXJmYWNlLiAKLSAqLwotcHVibGljIGludGVyZmFjZSBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHsKLQotCS8qKgotCSAqIE1ldGhvZCBmb3Igb2J0YWluaW5nIGEgbmV3IElTT0FQVHJhbnNwb3J0IGZyb20gdGhpcyBwcm92aWRlci4KLQkgKiBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgcmV0dXJuIG51bGwuCi0JICogCi0JICogQHJldHVybiBBIG5ldyBJU09BUFRyYW5zcG9ydCBvYmplY3QuCi0JICovCi0JcHVibGljIElTT0FQVHJhbnNwb3J0IG5ld1RyYW5zcG9ydCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNlcmlhbGl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjY5ZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogVGhlIElTZXJpYWxpemVyIGlzIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgYW4gSVNPQVBNZXNzYWdlIGFuZCBzZXJpYWxpemluZyBpdAotICogaW50byBhbiBYTUwgc3RyaW5nLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTZXJpYWxpemVyIHsKLQotCS8qKgotCSAqIFNlcmlhbGl6ZSB0aGUgSVNPQVBNZXNzYWdlIGludG8gYW4gWE1MIHN0cmluZy4gIFRoZSBwYXJ0IHBhcmFtZXRlciB0ZWxscyB0aGUgbWV0aG9kCi0JICogd2hpY2ggcGFydCBvZiB0aGUgbWVzc2FnZSAodGhlIGVudmVsb3BlIG9yIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVyIG9yIGJvZHkpIHRvCi0JICogc2VyaWFsaXplLiAgTm90ZSB0aGF0ICJjb250ZW50cyIgcmVmZXJzIHRvIHRoZSBsaXN0IG9mIGVsZW1lbnRzIGluc2lkZSB0aGUgaGVhZGVyCi0JICogb3IgYm9keSwgYW5kIG5vdCB0aGUgaGVhZGVyIG9yIGJvZHkgZWxlbWVudCBpdHNlbGYuCi0JICogCi0JICogQHBhcmFtIHBhcnQgT25lIG9mIHtAbGluayBJU09BUE1lc3NhZ2UjRU5WRUxPUEV9LCB7QGxpbmsgSVNPQVBNZXNzYWdlI0hFQURFUl9DT05URU5UfSwgb3IKLQkgKiB7QGxpbmsgSVNPQVBNZXNzYWdlI0JPRFlfQ09OVEVOVH0uCi0JICogQHBhcmFtIG1lc3NhZ2UgVGhlIElTT0FQTWVzc2FnZSB0byBzZXJpYWxpemUuCi0JICogQHJldHVybiBBbiBYTUwgc3RyaW5nLiAKLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBTdHJpbmcgc2VyaWFsaXplKGludCBwYXJ0LCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L01lc3NhZ2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9NZXNzYWdlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTMyN2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L01lc3NhZ2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0vKioKLSAqIEEgTWVzc2FnZUNvbnRleHQgb2JqZWN0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXNzYWdlIHRoYXQgaXMgdG8gYmUKLSAqIHNlbnQgb24gYSB3ZWIgc2VydmljZSBpbnZvY2F0aW9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgdG8gdGhlCi0gKiBJU09BUFRyYW5zcG9ydCBzbyB0aGF0IGl0IGNhbiBjb25zdHJ1Y3QgYW4gYXBwcm9wcmlhdGUgSVNPQVBNZXNzYWdlIHRvCi0gKiBoYW5kbGUgdGhlIGludm9jYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlQ29udGV4dCB7Ci0JCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0JcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nUHJvdG9jb2w7Ci0JcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247CQotCXByaXZhdGUgYm9vbGVhbiBkb2N1bWVudFN0eWxlOwkJCQotCQotCS8qKgotCSAqIFNldHMgYSByZWZlcmVuY2UgdG8gdGhlIFdTREwgZGVmaW5pdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIFdTREwgZGVmaW5pdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBXU0RMIGRlZmluaXRpb24uCi0JICovCi0JcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIGRlZmluaXRpb247Ci0JfQotCQotCS8qKgotCSAqIFNldHMgYSByZWZlcmVuY2UgdG8gdGhlIGJpbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGluIHRoZSBXU0RMIGRvY3VtZW50LgotCSAqIEZvciBhIHdlYiBzZXJ2aWNlIHRoYXQgdXNlcyB0aGUgU09BUCBwcm90b2NvbCwgdGhpcyB3aWxsIGJlIGFuIGluc3RhbmNlIG9mCi0JICogamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLQkgKiAKLQkgKiBAcGFyYW0gYmluZGluZ1Byb3RvY29sIFRoZSBiaW5kaW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCaW5kaW5nUHJvdG9jb2woRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmluZGluZ1Byb3RvY29sKSB7Ci0JCXRoaXMuYmluZGluZ1Byb3RvY29sID0gYmluZGluZ1Byb3RvY29sOwkJCi0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGJpbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBnZXRCaW5kaW5nUHJvdG9jb2woKSB7Ci0JCXJldHVybiBiaW5kaW5nUHJvdG9jb2w7Ci0JfQotCQotCS8qKgotCSAqIFNldHMgYSByZWZlcmVuY2UgdG8gdGhlIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQgaW4gdGhlIFdTREwgZG9jdW1lbnQuCi0JICogCi0JICogQHBhcmFtIGJpbmRpbmdPcGVyYXRpb24gVGhlIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pIHsKLQkJdGhpcy5iaW5kaW5nT3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oKSB7Ci0JCXJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotCX0JCQotCQkKLQkvKioKLQkgKiBTZXRzIHRoZSBmbGFnIG9uIHdoZXRoZXIgdGhlIG1lc3NhZ2UgY3JlYXRlZCBmcm9tIHRoaXMgTWVzc2FnZUNvbnRleHQKLQkgKiBpcyBkb2N1bWVudCBzdHlsZSBvciBub3QuCi0JICogCi0JICogQHBhcmFtIGRvY3VtZW50U3R5bGUgVHJ1ZSBmb3IgZG9jdW1lbnQgc3R5bGUsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudFN0eWxlKGJvb2xlYW4gZG9jdW1lbnRTdHlsZSkgewotCQl0aGlzLmRvY3VtZW50U3R5bGUgPSBkb2N1bWVudFN0eWxlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkb2N1bWVudCBzdHlsZSBwcm9wZXJ0eS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBkb2N1bWVudCBzdHlsZSBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50U3R5bGUoKSB7Ci0JCXJldHVybiBkb2N1bWVudFN0eWxlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1NPQVBNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9TT0FQTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWE0MWY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1NPQVBNZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIElTT0FQTWVzc2FnZSBpbnRlcmZhY2UgdGhhdCBleHRlbmRlcnMgb2YgdGhlIFdlYgotICogU2VydmljZXMgRXhwbG9yZXIgdHJhbnNwb3J0IGNhbiB1c2UgaWYgdGhleSBkbyBub3Qgd2lzaCB0byBpbXBsZW1lbnQgdGhlaXIgb3duIG1lc3NhZ2UuICAKLSAqIFRoaXMgY2xhc3MgaXMgIGltcGxlbWVudGVkIGFzIGEgY29sbGVjdGlvbiBvZiBsb29zZSBwaWVjZXMgb2YgdGhlIFNPQVAgbWVzc2FnZSwgYW5kIGVhY2ggCi0gKiBwaWVjZSBtdXN0IGJlIHNldCBpbmRpdmlkdWFsbHkgKGZvciBleGFtcGxlLCBzZXR0aW5nIHRoZSBlbnZlbG9wZSBlbGVtZW50IHdpbGwgbm90IAotICogYXV0b21hdGljYWxseSBwb3B1bGF0ZSB0aGUgaGVhZGVyIG9yIGJvZHkgZWxlbWVudHMpLgotICogPGJyLz4KLSAqIDxici8+Ci0gKiBUaGlzIGNsYXNzIGRvZXMgbm90IGtub3cgaG93IHRvIHNlcmlhbGl6ZSBpdHNlbGYuICBJdCBkZXBlbmRzIG9uIGFuIElTZXJpYWxpemVyIHByb3ZpZGVkIGJ5Ci0gKiB0aGUgdHJhbnNwb3J0IGV4dGVuZGVyLiAKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFNPQVBNZXNzYWdlIGltcGxlbWVudHMgSVNPQVBNZXNzYWdlIHsKLQkKLQlwcml2YXRlIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQ7Ci0JcHJpdmF0ZSBJU2VyaWFsaXplciBzZXJpYWxpemVyOwotCQkKLQlwcml2YXRlIE1hcCBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwkKLQkKLQlwcml2YXRlIEVsZW1lbnQgZW52ZWxvcGUgPSBudWxsOwotCQotCXByaXZhdGUgRWxlbWVudCBoZWFkZXIgPSBudWxsOwotCXByaXZhdGUgRWxlbWVudFtdIGhlYWRlckNvbnRlbnQgPSBudWxsOwotCQotCXByaXZhdGUgRWxlbWVudCBib2R5ID0gbnVsbDsKLQlwcml2YXRlIEVsZW1lbnRbXSBib2R5Q29udGVudCA9IG51bGw7CQotCQkKLQlwcml2YXRlIEVsZW1lbnQgZmF1bHQgPSBudWxsOwotCQkKLQlwcml2YXRlIFN0cmluZyB4bWwgPSBudWxsOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0IFRoZSBNZXNzYWdlQ29udGV4dC4KLQkgKiBAcGFyYW0gc2VyaWFsaXplciBBbiBJU2VyaWFsaXplciB0byB1c2UgdG8gc2VyaWFsaXplIHRoaXMgbWVzc2FnZS4KLQkgKi8KLQlwdWJsaWMgU09BUE1lc3NhZ2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCwgSVNlcmlhbGl6ZXIgc2VyaWFsaXplcikgewotCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotCQl0aGlzLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRNZXNzYWdlQ29udGV4dCgpCi0JICovCi0JcHVibGljIE1lc3NhZ2VDb250ZXh0IGdldE1lc3NhZ2VDb250ZXh0KCkgewotCQlyZXR1cm4gY29udGV4dDsKLQl9Ci0JCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldFByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvcGVydHkoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKSB7Ci0JCXByb3BlcnRpZXMucHV0KGtleSwgdmFsdWUpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRQcm9wZXJ0eShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIGtleSkgewotCQlyZXR1cm4gcHJvcGVydGllcy5nZXQoa2V5KTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0TmFtZXNwYWNlVGFibGUoamF2YS51dGlsLk1hcCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0TmFtZXNwYWNlVGFibGUoTWFwIG5hbWVzcGFjZVRhYmxlKSB7Ci0JCWlmIChuYW1lc3BhY2VUYWJsZSA9PSBudWxsIHx8IGVudmVsb3BlID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCi0JCUl0ZXJhdG9yIGl0ZXIgPSBuYW1lc3BhY2VUYWJsZS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0JCQotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCU1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpIGl0ZXIubmV4dCgpOwotCQkJU3RyaW5nIG5hbWUgPSAieG1sbnM6IiArIGVudHJ5LmdldFZhbHVlKCk7CQkJCi0JCQllbnZlbG9wZS5zZXRBdHRyaWJ1dGUobmFtZSwgZW50cnkuZ2V0S2V5KCkudG9TdHJpbmcoKSk7CQkJCi0JCX0KLQkJCi0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qCi0JICogSWYgdGhlIGF0dHJpYnV0ZSBpcyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwgdGhlIG5hbWVzcGFjZSBwcmVmaXggaXMgcmV0dXJuZWQuCi0JICogT3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0TlNQcmVmaXgoQXR0ciBhdHRyaWJ1dGUpIHsKLQkJU3RyaW5nIG5hbWUgPSBhdHRyaWJ1dGUuZ2V0TmFtZSgpOwotCQlpZiAobmFtZS5zdGFydHNXaXRoKCJ4bWxuczoiKSkKLQkJCXJldHVybiBuYW1lLnN1YnN0cmluZyg2KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldE5hbWVzcGFjZVRhYmxlKCkKLQkgKi8KLQlwdWJsaWMgTWFwIGdldE5hbWVzcGFjZVRhYmxlKCkgewotCQkKLQkJSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQkKLQkJaWYgKGVudmVsb3BlICE9IG51bGwpIHsKLQkJCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZW52ZWxvcGUuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIHByZWZpeCA9IGdldE5TUHJlZml4KGF0dHJpYnV0ZSk7Ci0JCQkJaWYgKHByZWZpeCAhPSBudWxsKQotCQkJCQluYW1lc3BhY2VUYWJsZS5wdXQoYXR0cmlidXRlLmdldFZhbHVlKCksIHByZWZpeCk7Ci0JCQl9CQkJCi0JCX0JCQotCQkKLQkJcmV0dXJuIG5hbWVzcGFjZVRhYmxlOwotCX0KLQkKLQkvKgotCSAqIEFwcGVuZHMgYSBjaGlsZCBub2RlIHRvIGEgcGFyZW50IG5vZGUsIHRha2VzIGNhcmUgb2YgaW1wb3J0aW5nCi0JICogdGhlIGNoaWxkIG5vZGUgaWYgbmVjY2Vzc2FyeS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYXBwZW5kTm9kZShOb2RlIHBhcmVudCwgTm9kZSBjaGlsZCkgewotCQlpZiAocGFyZW50ID09IG51bGwgfHwgY2hpbGQgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCURvY3VtZW50IG93bmVyID0gcGFyZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJCi0JCWlmICghb3duZXIuZXF1YWxzKGNoaWxkLmdldE93bmVyRG9jdW1lbnQoKSkpCi0JCQljaGlsZCA9IG93bmVyLmltcG9ydE5vZGUoY2hpbGQsIHRydWUpOwotCQkKLQkJcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLQl9Ci0JCi0JLyoKLQkgKiBBZGRzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBhcyBjaGlsZCBlbGVtZW50cy4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYXBwZW5kQ2hpbGRyZW4oRWxlbWVudCBwYXJlbnQsIEVsZW1lbnRbXSBjaGlsZHJlbikgewotCQlpZiAocGFyZW50ID09IG51bGwgfHwgY2hpbGRyZW4gPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbltpXSA9PSBudWxsKQotCQkJCWNvbnRpbnVlOwotCQkJYXBwZW5kTm9kZShwYXJlbnQsIGNoaWxkcmVuW2ldKTsKLQkJfQotCX0JCQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEVudmVsb3BlKG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEVudmVsb3BlKEVsZW1lbnQgZW52ZWxvcGUpIHsKLQkJaWYgKGVudmVsb3BlID09IG51bGwpCi0JCQl0aGlzLmVudmVsb3BlID0gZW52ZWxvcGU7Ci0JCWVsc2UKLQkJCXRoaXMuZW52ZWxvcGUgPSAoRWxlbWVudCkgZW52ZWxvcGUuY2xvbmVOb2RlKGZhbHNlKTsKLQkJCQkJCi0JCXhtbCA9IG51bGw7Ci0JfQotCQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRFbnZlbG9wZShib29sZWFuKQotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEVudmVsb3BlKGJvb2xlYW4gZGVlcCkgewotCQlpZiAoIWRlZXApCi0JCQlyZXR1cm4gZW52ZWxvcGU7Ci0JCQotCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCWlmIChlbnZlbG9wZSA9PSBudWxsKQotCQkJCXJldHVybiBudWxsOwotCQkJCi0JCQlFbGVtZW50IGNsb25lZEVudmVsb3BlID0gKEVsZW1lbnQpIGVudmVsb3BlLmNsb25lTm9kZShmYWxzZSk7Ci0JCQkKLQkJCWlmIChoZWFkZXJDb250ZW50ICE9IG51bGwgJiYgaGVhZGVyQ29udGVudC5sZW5ndGggPiAwKQotCQkJCWFwcGVuZE5vZGUoY2xvbmVkRW52ZWxvcGUsIGdldEhlYWRlcih0cnVlKSk7Ci0JCQkJCi0JCQlhcHBlbmROb2RlKGNsb25lZEVudmVsb3BlLCBnZXRCb2R5KHRydWUpKTsKLQkJCQotCQkJcmV0dXJuIGNsb25lZEVudmVsb3BlOwkKLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRIZWFkZXIob3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0SGVhZGVyKEVsZW1lbnQgaGVhZGVyKSB7Ci0JCWlmIChoZWFkZXIgPT0gbnVsbCkKLQkJCXRoaXMuaGVhZGVyID0gbnVsbDsJCQkKLQkJZWxzZQotCQkJdGhpcy5oZWFkZXIgPSAoRWxlbWVudCkgaGVhZGVyLmNsb25lTm9kZShmYWxzZSk7Ci0KLQkJeG1sID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0SGVhZGVyKGJvb2xlYW4pCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0SGVhZGVyKGJvb2xlYW4gZGVlcCkgewotCQlpZiAoIWRlZXApCi0JCQlyZXR1cm4gaGVhZGVyOwotCQkKLQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQlpZiAoaGVhZGVyID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQkKLQkJCUVsZW1lbnQgY2xvbmVkSGVhZGVyID0gKEVsZW1lbnQpIGhlYWRlci5jbG9uZU5vZGUoZmFsc2UpOwotCQkJYXBwZW5kQ2hpbGRyZW4oY2xvbmVkSGVhZGVyLCBoZWFkZXJDb250ZW50KTsJCQkJCi0JCQlyZXR1cm4gY2xvbmVkSGVhZGVyOwotCQl9CQkJCQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRIZWFkZXJDb250ZW50KG9yZy53M2MuZG9tLkVsZW1lbnRbXSkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0SGVhZGVyQ29udGVudChFbGVtZW50W10gaGVhZGVyQ29udGVudCkgewotCQl0aGlzLmhlYWRlckNvbnRlbnQgPSBoZWFkZXJDb250ZW50OwotCQl4bWwgPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRIZWFkZXJDb250ZW50KCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdldEhlYWRlckNvbnRlbnQoKSB7Ci0JCXJldHVybiBoZWFkZXJDb250ZW50OwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRCb2R5KG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEJvZHkoRWxlbWVudCBib2R5KSB7CQkKLQkJaWYgKGJvZHkgPT0gbnVsbCkKLQkJCXRoaXMuYm9keSA9IG51bGw7Ci0JCWVsc2UgewotCQkJdGhpcy5ib2R5ID0gKEVsZW1lbnQpIGJvZHkuY2xvbmVOb2RlKGZhbHNlKTsKLQkJCQotCQkJaWYgKCFjb250ZXh0LmlzRG9jdW1lbnRTdHlsZSgpICYmIGZhdWx0ID09IG51bGwpIHsKLQkJCQlOb2RlTGlzdCBjaGlsZEVsZW1lbnRzID0gYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotCQkJCWlmIChjaGlsZEVsZW1lbnRzLmdldExlbmd0aCgpID4gMCkKLQkJCQkJdGhpcy5ib2R5LmFwcGVuZENoaWxkKGNoaWxkRWxlbWVudHMuaXRlbSgwKS5jbG9uZU5vZGUoZmFsc2UpKTsKLQkJCX0KLQkJfQkJCi0JCXhtbCA9IG51bGw7Ci0JfQotCQkJCQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRCb2R5KGJvb2xlYW4pCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0Qm9keShib29sZWFuIGRlZXApIHsKLQkJaWYgKCFkZWVwKQotCQkJcmV0dXJuIGJvZHk7Ci0JCQotCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCWlmIChib2R5ID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQotCQkJLy8gY29weSB0aGUgcnBjIHdyYXBwZXIgZWxlbWVudCBhcyB3ZWxsLCBpZiBhbnkKLQkJCUVsZW1lbnQgY2xvbmVkQm9keSA9IChFbGVtZW50KSBib2R5LmNsb25lTm9kZSh0cnVlKTsJCQotCQkJCi0JCQlpZiAoZmF1bHQgIT0gbnVsbCkKLQkJCQlhcHBlbmROb2RlKGNsb25lZEJvZHksIGZhdWx0KTsKLQkJCWVsc2UgewotCQkJCUVsZW1lbnQgdGFyZ2V0ID0gY2xvbmVkQm9keTsKLQkJCQkKLQkJCQkvLyBjaGVjayBmb3IgcnBjIHdyYXBwZXIKLQkJCQlpZiAoY2xvbmVkQm9keS5nZXRGaXJzdENoaWxkKCkgIT0gbnVsbCkKLQkJCQkJdGFyZ2V0ID0gKEVsZW1lbnQpIGNsb25lZEJvZHkuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJCQotCQkJCWFwcGVuZENoaWxkcmVuKHRhcmdldCwgYm9keUNvbnRlbnQpOwotCQkJfQotCQkJCQotCQkJcmV0dXJuIGNsb25lZEJvZHk7CQkKLQkJfQotCX0KLQkJCQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRCb2R5Q29udGVudChvcmcudzNjLmRvbS5FbGVtZW50W10pCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEJvZHlDb250ZW50KEVsZW1lbnRbXSBib2R5Q29udGVudCkgewotCQl0aGlzLmJvZHlDb250ZW50ID0gYm9keUNvbnRlbnQ7Ci0JCWlmIChib2R5Q29udGVudCAhPSBudWxsKQotCQkJZmF1bHQgPSBudWxsOwotCQl4bWwgPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRCb2R5Q29udGVudCgpCi0JICovCi0JcHVibGljIEVsZW1lbnRbXSBnZXRCb2R5Q29udGVudCgpIHsKLQkJcmV0dXJuIGJvZHlDb250ZW50OwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRGYXVsdChvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRGYXVsdChFbGVtZW50IGZhdWx0KSB7Ci0JCXRoaXMuZmF1bHQgPSBmYXVsdDsKLQkJaWYgKGZhdWx0ICE9IG51bGwpIHsKLQkJCWlmIChib2R5ICE9IG51bGwgJiYgYm9keS5nZXRGaXJzdENoaWxkKCkgIT0gbnVsbCkKLQkJCQlib2R5LnJlbW92ZUNoaWxkKGJvZHkuZ2V0Rmlyc3RDaGlsZCgpKTsKLQkJCWJvZHlDb250ZW50ID0gbnVsbDsKLQkJfQotCQl4bWwgPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRGYXVsdCgpCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0RmF1bHQoKSB7Ci0JCXJldHVybiBmYXVsdDsKLQl9Ci0JCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3RvWE1MKCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIFN0cmluZyB0b1hNTCgpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQlpZiAoeG1sID09IG51bGwpCi0JCQl4bWwgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShFTlZFTE9QRSwgdGhpcyk7Ci0JCXJldHVybiB4bWw7CQkKLQl9CQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1RyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYWMyZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi0vKioKLSAqIEFuIGdlbmVyYWwgcHVycG9zZSBleGNlcHRpb24gdG8gaW5kaWNhdGUgYSBwcm9ibGVtIGhhcyBvY2N1cnJlZCB3aGVuCi0gKiBpbnZva2luZyBhIHdlYiBzZXJ2aWNlLgotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNwb3J0RXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMTUwMjI0NzIzMDcyNjAyMTQwM0w7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZSBBIG1lc3NhZ2UgYWJvdXQgdGhlIHByb2JsZW0gdGhhdCBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgVHJhbnNwb3J0RXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7Ci0JCXN1cGVyKG1lc3NhZ2UpOwotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciB0aGF0IGFjY2VwdHMgYSBtZXNzYWdlIGFuZCBhIGNhdXNlLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlIEEgbWVzc2FnZSBhYm91dCB0aGUgcHJvYmxlbSB0aGF0IG9jY3VycmVkLgotCSAqIEBwYXJhbSBjYXVzZSBUaGUgY2F1c2UgZm9yIHRoaXMgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBUcmFuc3BvcnRFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBjYXVzZSkgewotCQlzdXBlcihtZXNzYWdlLCBjYXVzZSk7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIHRoYXQgYWNjZXB0cyBhIGNhdXNlLgotCSAqIAotCSAqIEBwYXJhbSBjYXVzZSBUaGUgY2F1c2UgZm9yIHRoaXMgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBUcmFuc3BvcnRFeGNlcHRpb24oVGhyb3dhYmxlIGNhdXNlKSB7Ci0JCXN1cGVyKGNhdXNlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZXhwbG9yZXIucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9leHBsb3Jlci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDkyYzZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9leHBsb3Jlci5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotVElUTEVfV1NFWFBMT1JFUj1XZWIgU2VydmljZXMgRXhwbG9yZXIKLQotIyBUcmVlIE5vZGVzCi1BTFRfT1BFTj1PcGVuCi1BTFRfQ0xPU0U9Q2xvc2UKLQotIyBQZXJzcGVjdGl2ZSBUb29sYmFyCi1BTFRfQkFDSz1CYWNrCi1BTFRfRk9SV0FSRD1Gb3J3YXJkCi1BTFRfQUNUSU9OX0VOR0lORT1BY3Rpb24gUmVjb3JkZXIKLUFMVF9VRERJX1BFUlNQRUNUSVZFPVVEREkgUGFnZQotQUxUX1dTSUxfUEVSU1BFQ1RJVkU9V1NJTCBQYWdlCi1BTFRfV1NETF9QRVJTUEVDVElWRT1XU0RMIFBhZ2UKLUFMVF9GQVZPUklURVNfUEVSU1BFQ1RJVkU9RmF2b3JpdGVzCi0KLSMgVG9vbGJhcnMKLUFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkU9RG91YmxlIENsaWNrIHRvIE1heGltaXplCi1BTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkU9RG91YmxlIENsaWNrIHRvIFJlc3RvcmUKLQotIyBTZXREZWZhdWx0Vmlld1Rvb2wKLUFMVF9CQUNLX1RPX1RPUD1CYWNrIHRvIHRvcAotCi0jIENvbW1vbiBBY3Rpb25zCi1BTFRfUkVGUkVTSD1SZWZyZXNoCi1BTFRfQ0xFQVI9Q2xlYXIKLUFMVF9SRVNVTFRTPVJlc3VsdHMKLQotIyBDb21tb24gTGFiZWxzCi1BTFRfTkFWSUdBVE9SPU5hdmlnYXRvcgotQUxUX0FDVElPTlM9QWN0aW9ucwotQUxUX1NUQVRVUz1TdGF0dXMKLUFMVF9PVEhFUl9BQ1RJT05TPU90aGVyIEFjdGlvbnMKLUZPUk1fQlVUVE9OX0dPPSZuYnNwOyZuYnNwO0dvJm5ic3A7Jm5ic3A7Ci1GT1JNX0JVVFRPTl9SRVNFVD1SZXNldAotRk9STV9CVVRUT05fQ0FOQ0VMPUNhbmNlbAotRk9STV9MQUJFTF9BQ1RJT05TPUFjdGlvbnMKLUZPUk1fTEFCRUxfQUNUSU9OU19OT05FPU5vbmUKLQotIyBQbGFjZWhvbGRlciBmb3IgYmxhbmsgdGFibGUgZW50cmllcwotVEFCTEVfQkxBTktfUExBQ0VIT0xERVI9LS0KLQotIyBDb21tb24gRm9ybSBDb250cm9sIFRpdGxlcwotRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YPVNlbGVjdCBhbGwKLUZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWD1TZWxlY3Qgcm93Ci0KLSMgQ29tbW9uIE1lc3NhZ2VzCi1NU0dfRVJST1JfVU5FWFBFQ1RFRD1JV0FCMDEzNUUgQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWQuCi1NU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEPUlXQUIwMTI0RSBTZWxlY3QgYW4gYWN0aW9uLgotTVNHX0VSUk9SX05PX05PREVfU0VMRUNURUQ9SVdBQjAxMjVFIFNlbGVjdCBhIG5vZGUuCi1NU0dfU1VCTUlUX0lOX1BST0dSRVNTPVBsZWFzZSB3YWl0LiBUaGUgb3BlcmF0aW9uIGlzIHN0aWxsIGluIHByb2dyZXNzLgotTVNHX0xPQURfSU5fUFJPR1JFU1M9UGxlYXNlIHdhaXQgd2hpbGUgdGhlIGZvcm0gbG9hZHMuLi4KLQotI0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24KLUFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEPUxhdW5jaCBXZWIgU2VydmljZSBXaXphcmQKLUZPUk1fTEFCRUxfQ0hPT1NFX1dJWkFSRD1TZWxlY3QgYSB3aXphcmQgdG8gbGF1bmNoOgotRk9STV9SQURJT19XRUJfU0VSVklDRV9DTElFTlRfV0laQVJEPVdlYiBTZXJ2aWNlIENsaWVudAotRk9STV9SQURJT19XRUJfU0VSVklDRV9TS0VMRVRPTl9XSVpBUkQ9V2ViIFNlcnZpY2UgU2tlbGV0b24KLU1TR19FUlJPUl9XSVpBUkRfQUxSRUFEWV9SVU5OSU5HPUlXQUIwMTI2RSBBIFdlYiBzZXJ2aWNlIHdpemFyZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLiAgRmluaXNoIHdpdGggdGhlIGV4aXN0aW5nIHdpemFyZCBiZWZvcmUgbGF1bmNoaW5nIGEgbmV3IG9uZS4KLU1TR19FUlJPUl9XU0RMX1VSTF9JU19VTlJFQUNIQUJMRT1JV0FCMDEyN0UgVGhlIFdTREwgZG9jdW1lbnQgaXMgdW5yZWFjaGFibGUuCi0KLSMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uCi1BTFRfV1NJTF9JTVBPUlRfVE9fRlM9SW1wb3J0IFdTSUwgVG8gRmlsZSBTeXN0ZW0KLUFMVF9XU0RMX0lNUE9SVF9UT19GUz1JbXBvcnQgV1NETCBUbyBGaWxlIFN5c3RlbQotTVNHX0VSUk9SX1JFVFJJRVZJTkdfV1NETF9ET0M9SVdBQjAxMjhFIFVuYWJsZSB0byByZXRyaWV2ZSBXU0RMIGRvY3VtZW50LgotTVNHX0VSUk9SX1JFVFJJRVZJTkdfV1NJTF9ET0M9SVdBQjAxMjlFIFVuYWJsZSB0byByZXRyaWV2ZSBXU0lMIGRvY3VtZW50LgotTVNHX0lNUE9SVF9XU0RMX1NVQ0NFU1NGVUw9V1NETCBkb2N1bWVudCBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQuCi1NU0dfSU1QT1JUX1dTSUxfU1VDQ0VTU0ZVTD1XU0lMIGRvY3VtZW50IHN1Y2Nlc3NmdWxseSBpbXBvcnRlZC4KLQotIyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbgotQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSD1JbXBvcnQgV1NETCBUbyB3b3JrYmVuY2gKLUZPUk1fTEFCRUxfSU1QT1JUX1RPX1dPUktCRU5DSF9ERVNDPVNlbGVjdCBhIHdvcmtiZW5jaCBwcm9qZWN0IHRvIHNhdmUgdGhlIFdTREwgZmlsZSBpbnRvLiBZb3UgbWF5IGFsc28gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUuCi1XRUJfUFJPSkVDVF9OQU1FPVdlYiBwcm9qZWN0OgotV09SS0JFTkNIX1BST0pFQ1RfTkFNRT1Xb3JrYmVuY2ggcHJvamVjdDoKLUxBQkVMX0lNUE9SVF9XU0RMPUltcG9ydCBXU0RMIGRvY3VtZW50Ci1MQUJFTF9JTVBPUlRfVE9fV1NJTD1JbXBvcnQgYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQKLUlNUE9SVEVEX1dTRExfRklMRV9OQU1FPVdTREwgZmlsZSBuYW1lOgotV1NJTF9GSUxFX05BTUU9V1NJTCBmaWxlIG5hbWU6Ci1NU0dfRVJST1JfRklMRV9PVkVSV1JJVEVfRElTQUJMRUQ9Q2Fubm90IGNyZWF0ZSB0aGUgZmlsZSAiJTIiIHJlbGF0aXZlIHRvIHRoZSBwYXRoICIlMSIgYmVjYXVzZSBhdXRvbWF0aWMgZmlsZSBvdmVyd3JpdGluZyBoYXMgbm90IGJlZW4gZW5hYmxlZC4gRG8geW91IHdhbnQgdG8gZW5hYmxlIGl0IGZvciB0aGlzIGZpbGU/Ci1NU0dfRVJST1JfSU5WQUxJRF9XT1JLQkVOQ0hfUFJPSkVDVD1JV0FCMDEzMEUgU2VsZWN0IGEgd29ya2JlbmNoIHByb2plY3QuCi1NU0dfRVJST1JfSU5WQUxJRF9XU0RMX0ZJTEVfTkFNRT1JV0FCMDEzMUUgSW52YWxpZCBmaWxlIG5hbWUuCi1NU0dfRVJST1JfSU5WQUxJRF9XU0lMX0ZJTEVfTkFNRT1JV0FCMDQ3MEUgSW52YWxpZCBXU0lMIGZpbGUgbmFtZS4KLU1TR19FUlJPUl9OT19JTVBPUlRfT1BUSU9OX1NFTEVDVEVEPUlXQUIwNDcxRSBObyBpbXBvcnQgb3B0aW9uIGlzIHNlbGVjdGVkLiAgUGxlYXNlIGNob29zZSBhdCBsZWFzdCBvbmUgaW1wb3J0IG9wdGlvbi4KLU1TR19FUlJPUl9XUklUSU5HX1RFTVBfRklMRV9UT19GUz1JV0FCMDEzMkUgVW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlLgotTVNHX0lORk9fSU1QT1JUX1RPX1dPUktCRU5DSF9TVUNDRVNTRlVMPUlXQUIwMzE0SSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIHRvIHRoZSB3b3JrYmVuY2guCi1NU0dfSU5GT19JTVBPUlRfU0VSVklDRV9SRUZfVE9fV1NJTF9TVUNDRVNTRlVMPUlXQUIwNDcySSBTZXJ2aWNlIHJlZmVyZW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIHRvICUxLgotCi0jIENoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uCi1NU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRD1DYW5ub3QgY3JlYXRlIHRoZSBmaWxlICIlMiIgcmVsYXRpdmUgdG8gdGhlIHBhdGggIiUxIiBiZWNhdXNlIGF1dG9tYXRpYyBmaWxlIGNoZWNrIG91dCBoYXMgbm90IGJlZW4gZW5hYmxlZC4gRG8geW91IHdhbnQgdG8gZW5hYmxlIGl0IGZvciB0aGlzIGZpbGU/Ci0KLSMgQ2xlYXJOb2RlQWN0aW9uCi1NU0dfSU5GT19OT0RFX0NMRUFSRUQ9SVdBQjAxMzNJICUxIGNsZWFyZWQuCi0KLSMgVGFibGUgdHdpc3RlZXMKLUFMVF9UV0lTVF9PUEVORUQ9SGlkZQotQUxUX1RXSVNUX0NMT1NFRD1FeHBhbmQKLQotIyBXU0RMIEJyb3dzZXIKLUZPUk1fTElOS19CUk9XU0U9QnJvd3NlLi4uCi1USVRMRV9XU0RMX0JST1dTRVI9V1NETCBCcm93c2VyIC0gJTEKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0U9U2VsZWN0IGEgV1NETCBzb3VyY2U6Ci1GT1JNX0xBQkVMX1dTRExfQ0FURUdPUlk9Q2F0ZWdvcnkKLUZPUk1fTEFCRUxfV1NETF9BbGw9QWxsCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFX1dFQlBST0pFQ1RTPVdvcmtzcGFjZSBQcm9qZWN0cwotRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9GQVZPUklURVM9RmF2b3JpdGVzCi1GT1JNX0xBQkVMX1dFQl9QUk9KRUNUPVdvcmtzcGFjZSBQcm9qZWN0Ci1GT1JNX0xBQkVMX1dTRExfVVJMPVdTREwgVVJMCi1GT1JNX0JVVFRPTl9SRUZSRVNIPVJlZnJlc2gKLUFMVF9XU0RMX0JST1dTRVI9V1NETCBCcm93c2VyCi1XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0VTPVNlcnZpY2UgSW50ZXJmYWNlcwotV1NETF9UWVBFX1NFUlZJQ0VTPVNlcnZpY2VzCi0KLSMgQ2FsZW5kYXIgQnJvd3NlcgotVElUTEVfQ0FMRU5EQVJfQlJPV1NFUj1DYWxlbmRhciBCcm93c2VyCi0jIDIgY2hhcmFjdGVyIGFiYnJldmlhdGlvbnMgZm9yIGRheXMgb2YgdGhlIHdlZWsuCi1GT1JNX0xBQkVMX1NIX1NVTkRBWT1TdQotRk9STV9MQUJFTF9TSF9NT05EQVk9TW8KLUZPUk1fTEFCRUxfU0hfVFVFU0RBWT1UdQotRk9STV9MQUJFTF9TSF9XRURORVNEQVk9V2UKLUZPUk1fTEFCRUxfU0hfVEhVUlNEQVk9VGgKLUZPUk1fTEFCRUxfU0hfRlJJREFZPUZyCi1GT1JNX0xBQkVMX1NIX1NBVFVSREFZPVNhCi0jIE1vbnRocyBvZiB0aGUgeWVhcgotRk9STV9MQUJFTF9NT05USD1Nb250aDoKLUZPUk1fTEFCRUxfSkFOVUFSWT1KYW51YXJ5Ci1GT1JNX0xBQkVMX0ZFQlJVQVJZPUZlYnJ1YXJ5Ci1GT1JNX0xBQkVMX01BUkNIPU1hcmNoCi1GT1JNX0xBQkVMX0FQUklMPUFwcmlsCi1GT1JNX0xBQkVMX01BWT1NYXkKLUZPUk1fTEFCRUxfSlVORT1KdW5lCi1GT1JNX0xBQkVMX0pVTFk9SnVseQotRk9STV9MQUJFTF9BVUdVU1Q9QXVndXN0Ci1GT1JNX0xBQkVMX1NFUFRFTUJFUj1TZXB0ZW1iZXIKLUZPUk1fTEFCRUxfT0NUT0JFUj1PY3RvYmVyCi1GT1JNX0xBQkVMX05PVkVNQkVSPU5vdmVtYmVyCi1GT1JNX0xBQkVMX0RFQ0VNQkVSPURlY2VtYmVyCi1GT1JNX0xBQkVMX1lFQVI9WWVhcjoKLUZPUk1fTEFCRUxfVElNRT1UaW1lOgotRk9STV9MSU5LX1RPREFZPVRvZGF5Ci1GT1JNX0xJTktfUFJFVklPVVNfWUVBUj08PAotRk9STV9MSU5LX1BSRVZJT1VTX01PTlRIPTwKLUZPUk1fTElOS19ORVhUX01PTlRIPT4KLUZPUk1fTElOS19ORVhUX1lFQVI9Pj4KLUFMVF9QUkVWSU9VU19ZRUFSPVByZXZpb3VzIFllYXIKLUFMVF9QUkVWSU9VU19NT05USD1QcmV2aW91cyBNb250aAotQUxUX05FWFRfTU9OVEg9TmV4dCBNb250aAotQUxUX05FWFRfWUVBUj1OZXh0IFllYXIKLUFMVF9UT0RBWT1Ub2RheQotQUxUX0NBTEVOREFSX0JST1dTRVI9Q2FsZW5kYXIgQnJvd3NlcgotTVNHX0VSUk9SX0lOVkFMSURfVElNRV9GT1JNQVQ9SVdBQjAzNjhFIFRpbWUgd2FzIG5vdCBmb3JtYXR0ZWQgYXMgSEg6TU06U1NbLlNTU10uIERvIHlvdSB3aXNoIHRvIHVzZSB0aGUgY3VycmVudCB0aW1lIGluc3RlYWQ/Ci0KLSMgQWN0aW9uIGVuZ2luZQotVElUTEVfQUNUSU9OX1JFQ09SREVSPUFjdGlvbiBSZWNvcmRlcgotRk9STV9MQUJFTF9NT0RFPU1vZGU6Ci1GT1JNX0xBQkVMX01PREVfUExBWT1QbGF5Ci1GT1JNX0xBQkVMX01PREVfU1RPUD1TdG9wCi1GT1JNX0xBQkVMX01PREVfUkVDT1JEPVJlY29yZAotRk9STV9MQUJFTF9TQVZFPVNhdmUKLUZPUk1fTEFCRUxfUExBWV9GSUxFPVBsYXkgZmlsZToKLU1TR19FUlJPUl9JTlZBTElEX1BMQVlfRklMRT1JV0FCMDM2MkUgRW50ZXIgYSBwbGF5IGZpbGUuCi0KLSMgRnJhbWUgdGl0bGVzCi1GUkFNRV9USVRMRV9QRVJTUEVDVElWRV9XT1JLQVJFQT1XZWIgU2VydmljZXMgRXhwbG9yZXIgSW50ZXJuYWwgV29yayBBcmVhCi1GUkFNRV9USVRMRV9QRVJTUEVDVElWRV9UT09MQkFSPVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBUb29sYmFyCi1GUkFNRV9USVRMRV9QRVJTUEVDVElWRV9DT05URU5UPVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBQYWdlIENvbnRlbnQKLUZSQU1FX1RJVExFX1dTRExfVE9PTEJBUj1XU0RMIEJyb3dzZXIgVG9vbGJhcgotRlJBTUVfVElUTEVfV1NETF9DT05URU5UPVdTREwgQnJvd3NlciBDb250ZW50Ci0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfUEFHRV9MT0FERVI9UGFnZSBMb2FkZXIKLUZPUk1fVElUTEVfUEFHRV9DT05URU5UPUxvYWRlZCBQYWdlIENvbnRlbnQKLUZPUk1fVElUTEVfTEFVTkNIX1dFQlNFUlZJQ0VfV0laQVJEPUxhdW5jaCBXZWIgU2VydmljZSBXaXphcmQgRm9ybQotRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIPUltcG9ydCB0byBXb3JrYmVuY2ggRm9ybQotCi0jIFNlc3Npb25UaW1lZE91dCBtZXNzYWdlCi1NU0dfRVJST1JfU0VTU0lPTl9USU1FRF9PVVQ9VGhpcyBzZXNzaW9uIG9mIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIGhhcyB0aW1lZCBvdXQgYWZ0ZXIgMzAgbWludXRlcyBvZiBpbmFjdGl2aXR5IHRvIGZyZWUgdXAgbWVtb3J5IHJlc291cmNlcy4KLU1TR19FUlJPUl9SRVNUQVJUX1NFU1NJT049UmVsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIHRvIHRlc3QgeW91ciBXZWIgc2VydmljZS4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2Zhdm9yaXRlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2Zhdm9yaXRlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzk4OGY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9mYXZvcml0ZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXRpdGxlPUZhdm9yaXRlcwotCi0jIE5hdmlnYXRvcgotRkFWT1JJVEVTX01BSU5fTk9ERT1GYXZvcml0ZXMgTWFpbgotRkFWT1JJVEVTX1dTSUxfRk9MREVSX05PREU9RmF2b3JpdGUgV1NJTHMKLUZBVk9SSVRFU19XU0RMX1NFUlZJQ0VfRk9MREVSX05PREU9RmF2b3JpdGUgV1NETCBTZXJ2aWNlcwotRkFWT1JJVEVTX1VERElfU0VSVklDRV9GT0xERVJfTk9ERT1GYXZvcml0ZSBVRERJIFNlcnZpY2VzCi1GQVZPUklURVNfVURESV9CVVNJTkVTU0VTX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVEREkgQnVzaW5lc3NlcwotRkFWT1JJVEVTX1VERElfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2VzCi1GQVZPUklURVNfVURESV9SRUdJU1RSSUVTX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVEREkgUmVnaXN0cmllcwotRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUklFU19GT0xERVJfTk9ERT1GYXZvcml0ZSBVc2VyIERlZmluZWQgVURESSBSZWdpc3RyaWVzCi0KLSMgRm9ybQotRk9STV9MQUJFTF9GQVZPUklURV9XU0lMPUZhdm9yaXRlIFdTSUxzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1dTREw9RmF2b3JpdGUgV1NETHMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9SRUdJU1RSWT1GYXZvcml0ZSBVRERJIFJlZ2lzdHJpZXMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWT1GYXZvcml0ZSBVc2VyIERlZmluZWQgVURESSBSZWdpc3RyaWVzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfU0VSVklDRT1GYXZvcml0ZSBVRERJIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfQlVTSU5FU1M9RmF2b3JpdGUgVURESSBCdXNpbmVzcyBFbnRpdGllcwotRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFPUZhdm9yaXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2VzCi1GT1JNX0xBQkVMX1JFTU9WRT1SZW1vdmUKLUZPUk1fTEFCRUxfSU1QT1JUX1RPX1dTSUxfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTSUwgUGFnZQotRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRT1BZGQgVG8gVURESSBQYWdlCi1GT1JNX0xBQkVMX0lNUE9SVF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCBUbyBXU0RMIFBhZ2UKLUZPUk1fTEFCRUxfVVJMPVVSTAotRk9STV9MQUJFTF9JVEVNX05VTUJFUj1JdGVtICMKLUZPUk1fTEFCRUxfVURESV9WRVJTSU9OPVVEREkgVmVyc2lvbgotRk9STV9MQUJFTF9OQU1FPU5hbWUKLUZPUk1fTEFCRUxfREVTQz1EZXNjcmlwdGlvbgotRk9STV9MQUJFTF9ERUZBVUxUX0xPR0lOPURlZmF1bHQgTG9naW4KLUZPUk1fTEFCRUxfREVGQVVMVF9QQVNTV09SRD1EZWZhdWx0IFBhc3N3b3JkCi1GT1JNX0xBQkVMX0lOUVVJUllfVVJMPUlucXVpcnkgVVJMCi1GT1JNX0xBQkVMX1BVQkxJU0hfVVJMPVB1Ymxpc2ggVVJMCi1GT1JNX0xBQkVMX1NFQ1VSRV9JTlFVSVJZX1VSTD1TZWN1cmUgSW5xdWlyeSBVUkwKLUZPUk1fTEFCRUxfU0VDVVJFX1BVQkxJU0hfVVJMPVNlY3VyZSBQdWJsaXNoIFVSTAotRk9STV9MQUJFTF9UQVhPTk9NWT1UYXhvbm9teQotRk9STV9MQUJFTF9MQU5HVUFHRT1MYW5ndWFnZQotRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FPVJlZ2lzdHJ5IE5hbWUKLUZPUk1fTEFCRUxfQlVTSU5FU1NfTkFNRT1CdXNpbmVzcyBOYW1lCi1GT1JNX0xBQkVMX0JVU0lORVNTX0tFWT1CdXNpbmVzcyBLZXkKLUZPUk1fTEFCRUxfU0VSVklDRV9OQU1FPVNlcnZpY2UgTmFtZQotRk9STV9MQUJFTF9TRVJWSUNFX0tFWT1TZXJ2aWNlIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FPVNlcnZpY2UgSW50ZXJmYWNlIE5hbWUKLUZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VfS0VZPVNlcnZpY2UgSW50ZXJmYWNlIEtleQotRk9STV9MQUJFTF9SRUdJU1RSWV9VUkw9PGEgaHJlZj0iJTEiIHRhcmdldD0iX2JsYW5rIj5DbGljayBoZXJlPC9hPiB0byBvYnRhaW4gYSB1c2VyIElEIGFuZCBwYXNzd29yZCBmb3IgdGhpcyByZWdpc3RyeS4KLUZPUk1fTEFCRUxfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRVM9RGF0YSBmaWxlcyBmb3IgVXNlciBEZWZpbmVkIENhdGVnb3JpZXMKLU1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEPUlXQUIwMzE1RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0uCi0KLSMgTGlzdEZhdm9yaXRlV1NJTEFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfV1NJTD1MaXN0IEZhdm9yaXRlIFdTSUxzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfV1NJTF9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBXU0lMIGxpbmtzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBXU0lMIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBXU0lMIG5hdmlnYXRvci4gUHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb25zLgotCi0jIExpc3RGYXZvcml0ZVdTRExTZXJ2aWNlQWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0U9TGlzdCBGYXZvcml0ZSBXU0RMIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFdTREwgc2VydmljZXMgYW5kIHByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGVtLgotCi0jIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlQWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0U9TGlzdCBGYXZvcml0ZSBVRERJIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgc2VydmljZXMgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFVEREkgbmF2aWdhdG9yLiBQcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzQWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTPUxpc3QgRmF2b3JpdGUgVURESSBCdXNpbmVzc2VzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9CVVNJTkVTU19ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBVRERJIGJ1c2luZXNzZXMgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFVEREkgbmF2aWdhdG9yLiBQcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5QWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9VRERJX1JFR0lTVFJZPUxpc3QgRmF2b3JpdGUgVURESSBSZWdpc3RyaWVzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9SRUdJU1RSWV9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBVRERJIHJlZ2lzdHJpZXMgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFVEREkgbmF2aWdhdG9yLiBQcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeUFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWT1MaXN0IEZhdm9yaXRlIFVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJpZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgcmVnaXN0cmllcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuCi0KLSMgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0U9TGlzdCBGYXZvcml0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSBzZXJ2aWNlIGludGVyZmFjZXMgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFVEREkgbmF2aWdhdG9yLiBQcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlIHNlbGVjdGlvbnMuCi0KLSMgRmF2b3JpdGVzV1NJTERldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfV1NJTF9ERVRBSUxTPUZhdm9yaXRlIFdTSUwgRGV0YWlscwotCi0jIEZhdm9yaXRlc1dTRExEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1dTRExfREVUQUlMUz1GYXZvcml0ZSBXU0RMIERldGFpbHMKLQotIyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VERElfUkVHSVNUUllfREVUQUlMUz1GYXZvcml0ZSBVRERJIFJlZ2lzdHJ5IERldGFpbHMKLQotIyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFM9RmF2b3JpdGUgVXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cnkgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfVURESV9CVVNJTkVTU19ERVRBSUxTPUZhdm9yaXRlIFVEREkgQnVzaW5lc3MgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfREVUQUlMUz1GYXZvcml0ZSBVRERJIFNlcnZpY2UgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFM9RmF2b3JpdGUgVURESSBTZXJ2aWNlIEludGVyZmFjZSBEZXRhaWxzCi0KLSMgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uCi1BTFRfQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRT1BZGQgdG8gV1NJTCBQYWdlCi1NU0dfRVJST1JfV1NJTF9BTFJFQURZX09QRU5FRD1JV0FCMDMxNkUgJTEgaXMgYWxyZWFkeSBvcGVuZWQgaW4gV1NJTCBQYWdlLgotTVNHX0lORk9fQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzE3SSAlMSBpcyBhZGRlZCB0byBXU0lMIFBhZ2UuCi1NU0dfRVJST1JfQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRT1JV0FCMDMxOEUgV1NJTCAlMSBjb3VsZCBub3QgYmUgbG9hZGVkLgotCi0jIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi1BTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkU9QWRkIHRvIFVEREkgUGFnZQotTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFPUlXQUIwMzIwRSAlMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDMyMUkgJTEgaXMgYWRkZWQgdG8gVURESSBQYWdlLgotCi0jIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uCi1BTFRfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRT1BZGQgdG8gV1NETCBQYWdlCi1NU0dfSU5GT19BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUw9SVdBQjAzNjlJICUxIGlzIGFkZGVkIHRvIFdTREwgUGFnZS4KLU1TR19FUlJPUl9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFPUlXQUIwMzcwRSBXU0RMICUxIGNvdWxkIG5vdCBiZSBsb2FkZWQuCi0KLSMgUmVtb3ZlRmF2b3JpdGVBY3Rpb24KLUFMVF9SRU1PVkVfRkFWT1JJVEU9UmVtb3ZlIEZhdm9yaXRlCi1NU0dfQ09ORklSTV9SRU1PVkVfTk9ERT0lMSBpcyBubyBsb25nZXIgcmVzb2x2YWJsZS4gIERvIHlvdSB3aXNoIHRvIGNsZWFyIGl0PwotCi0jIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uCi1BTFRfUkVTVE9SRV9ERUZBVUxUX0ZBVk9SSVRFUz1SZXN0b3JlIERlZmF1bHQgRmF2b3JpdGVzCi1NU0dfQ09ORklSTV9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTPVRoaXMgb3BlcmF0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBjdXJyZW50IGZhdm9yaXRlcy4gIERvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPwotTVNHX0VSUk9SX09QRU5fRkFWT1JJVEVTX0JBQ0tVUD1JV0FCMDEzNEUgVW5hYmxlIHRvIGxvYWQgdGhlIGRlZmF1bHQgZmF2b3JpdGVzLgotTVNHX0lORk9fRkFWT1JJVEVTX1JFU1RPUkVEX1RPX0RFRkFVTFQ9SVdBQjAzMjJJIERlZmF1bHQgRmF2b3JpdGVzIGFyZSByZXN0b3JlZC4KLU1TR19FUlJPUl9TQVZFX0ZBVk9SSVRFU19XU0lMPUlXQUIwMTg2RSBVbmFibGUgdG8gc2F2ZSBmYXZvcml0ZXMgdG8gJTEuCi0KLSMgRnJhbWUgdGl0bGVzCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSPU5hdmlnYXRvciBDb250YWluZXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSPU5hdmlnYXRvciBUb29sYmFyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVD1OYXZpZ2F0b3IgQ29udGVudAotRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVI9QWN0aW9ucyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSPVByb3BlcnRpZXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQ9UHJvcGVydGllcyBDb250ZW50Ci1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVI9UHJvcGVydGllcyBUb29sYmFyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSPVN0YXR1cyBDb250YWluZXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UPVN0YXR1cyBDb250ZW50Ci1GUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUj1TdGF0dXMgVG9vbGJhcgotCi0jIEZvcm0gdGl0bGVzCi1GT1JNX1RJVExFX1VERElfQlVTSU5FU1NfREVUQUlMUz1VRERJIEJ1c2luZXNzIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VRERJX1JFR0lTVFJZX0RFVEFJTFM9VURESSBSZWdpc3RyeSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVRBSUxTPVVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJ5IERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VRERJX1NFUlZJQ0VfREVUQUlMUz1VRERJIFNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUz1VRERJIFNlcnZpY2UgSW50ZXJmYWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0RMX0RFVEFJTFM9V1NETCBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NJTF9ERVRBSUxTPVdTSUwgRGV0YWlscyBGb3JtCi0KLSMgVmlldyB0aXRsZXMKLVZJRVdfVElUTEVfVURESV9CVVNJTkVTU19MSVNUPVVEREkgQnVzaW5lc3NlcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfVURESV9SRUdJU1RSWV9MSVNUPVVEREkgUmVnaXN0cmllcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9MSVNUPVVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJpZXMgTGlzdCBWaWV3Ci1WSUVXX1RJVExFX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTElTVD1VRERJIFNlcnZpY2UgSW50ZXJmYWNlcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfVURESV9TRVJWSUNFX0xJU1Q9VURESSBTZXJ2aWNlcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfV1NETF9TRVJWSUNFX0xJU1Q9V1NETCBTZXJ2aWNlcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfV1NJTF9MSVNUPVdTSUwgTGlua3MgTGlzdCBWaWV3CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvdWRkaS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3VkZGkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkzYTYxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvdWRkaS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDk2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotdGl0bGU9VURESQotCi0jIE5vZGVzCi1OT0RFX05BTUVfVURESV9NQUlOPVVEREkgTWFpbgotTk9ERV9OQU1FX1FVRVJJRVNfRk9MREVSPUV4ZWN1dGVkIFF1ZXJpZXMKLU5PREVfTkFNRV9QVUJMSVNIRURfQlVTSU5FU1NFU19GT0xERVI9UHVibGlzaGVkIEJ1c2luZXNzZXMKLU5PREVfTkFNRV9QVUJMSVNIRURfU0VSVklDRVNfRk9MREVSPVB1Ymxpc2hlZCBTZXJ2aWNlcwotTk9ERV9OQU1FX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfRk9MREVSPVB1Ymxpc2hlZCBTZXJ2aWNlIEludGVyZmFjZXMKLQotIyBPcGVuUmVnaXN0cnlBY3Rpb24KLUFMVF9PUEVOX1JFR0lTVFJZPU9wZW4gUmVnaXN0cnkKLUZPUk1fTEFCRUxfT1BFTl9SRUdJU1RSWV9ERVNDPVNwZWNpZnkgdGhlIG5hbWUgYW5kIGlucXVpcnkgVVJMIG9mIHRoZSByZWdpc3RyeSB0byBiZSBvcGVuZWQuIFNlbGVjdGluZyBhIGZhdm9yaXRlIHJlZ2lzdHJ5IHdpbGwgYXV0b21hdGljYWxseSBmaWxsIGluIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBvcGVuIHRoZSByZWdpc3RyeS4KLUZPUk1fTEFCRUxfRkFWT1JJVEVfUkVHSVNUUlk9RmF2b3JpdGUgUmVnaXN0cnkKLUZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRT1SZWdpc3RyeSBOYW1lCi1GT1JNX0xBQkVMX0lOUVVJUllfVVJMPUlucXVpcnkgVVJMCi1NU0dfRVJST1JfSU5WQUxJRF9SRUdJU1RSWV9OQU1FPUlXQUIwMTM2RSBFbnRlciBhIHZhbGlkIHJlZ2lzdHJ5IG5hbWUuCi1NU0dfRVJST1JfSU5WQUxJRF9JTlFVSVJZX1VSTD1JV0FCMDEzOEUgRW50ZXIgYSB2YWxpZCBpbnF1aXJ5IFVSTC4KLU1TR19JTkZPX1JFR0lTVFJZX09QRU5FRD1JV0FCMDEzOUkgVGhlIHJlZ2lzdHJ5IG5hbWVkICUxIGxvY2F0ZWQgYXQgJTIgd2FzIG9wZW5lZCBzdWNjZXNzZnVsbHkuCi0KLSMgVXNlci1kZWZpbmVkIENhdGVnb3JpZXMKLUZPUk1fTEFCRUxfQUREX0NBVEVHT1JZX0RBVEE9PGEgaHJlZj0iJTEiPkNsaWNrIGhlcmU8L2E+IHRvIGxvYWQgdGhpcyBjYXRlZ29yeSdzIGRhdGEuCi1GT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfRklMRT1DYXRlZ29yeSBkYXRhIGZpbGUgbmFtZQotTVNHX0lORk9fTk9fVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVNfRk9VTkQ9SVdBQjAzNzFJIE5vIHVzZXIgZGVmaW5lZCBjYXRlZ29yaWVzIGRldGVjdGVkLgotTVNHX0lORk9fTk9fQ0FURUdPUllfREFUQT1JV0FCMDM3MkkgQ2F0ZWdvcnkgZGF0YSBmb3IgJTEgaXMgbm90IGF2YWlsYWJsZSBvciBpcyBpbnZhbGlkLgotTVNHX0lORk9fVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfTE9BREVEPUlXQUIwMzczSSBEYXRhIGZvciB1c2VyIGRlZmluZWQgY2F0ZWdvcnkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuCi1NU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFX0tFWT1JV0FCMDM3NEUgSW52YWxpZCBkYXRhIGZpbGUgZm9yIHVzZXIgZGVmaW5lZCBjYXRlZ29yeSAlMS4gQSBjYXRlZ29yeSBrZXkgJyUyJyB3YXMgZm91bmQgYnV0ICclMycgd2FzIGV4cGVjdGVkLgotTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRV9GT1JNQVQ9SVdBQjA0NzNFIFVua25vd24gZm9ybWF0IGluIGxpbmU6ICUxIG9mIHRoZSBkYXRhIGZpbGUgZm9yIHVzZXIgZGVmaW5lZCBjYXRlZ29yeSAlMi4gVGhlIGxpbmUgaXM6ICIlMyIKLU1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEU9SVdBQjAzNzVFIEludmFsaWQgZGF0YSBmaWxlIGZvciB1c2VyIGRlZmluZWQgY2F0ZWdvcnkgJTEuCi1NU0dfRVJST1JfU0FWSU5HX0NBVEVHT1JZX0RBVEE9SVdBQjA0NzRFIEFuIGVycm9yIG9jY3VyZWQgd2hpbGUgc2F2aW5nIGRhdGEgZm9yIGNhdGVnb3J5ICUxLiBFeGNlcHRpb24gdGV4dDogJTIKLQotIyBVRERJIENhdGVnb3J5IEJyb3dzZXIKLVRJVExFX0NBVEVHT1JZX0JST1dTRVI9Q2F0ZWdvcnkgQnJvd3NlcgotQUxUX0NBVEVHT1JJRVM9Q2F0ZWdvcmllcwotCi0jIERldGFpbHMKLUFMVF9SRUdJU1RSWV9ERVRBSUxTPVJlZ2lzdHJ5IERldGFpbHMKLUFMVF9CVVNJTkVTU19ERVRBSUxTPUJ1c2luZXNzIERldGFpbHMKLUFMVF9TRVJWSUNFX0RFVEFJTFM9U2VydmljZSBEZXRhaWxzCi1BTFRfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUz1TZXJ2aWNlIEludGVyZmFjZSBEZXRhaWxzCi1GT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEU9RGV0YWlscyBmb3IgPHN0cm9uZz4lMTwvc3Ryb25nPiBhcmUgc2hvd24gYmVsb3cuIFNvbWUgaXRlbXMgbWF5IGJlIGFkZGVkLCByZW1vdmVkLCBvciBjaGFuZ2VkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQgZm9yIGNoYW5nZXMuIE90aGVyIGFjdGlvbnMgYXJlIGxpc3RlZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgcGFnZS4KLQotIyBHZXQKLUFMVF9HRVQ9R2V0Ci0KLSMgQ29tbW9uIEZvcm0gQ29udHJvbCBUaXRsZQotRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRT1OYW1lIHZhbHVlCi1GT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRT1EZXNjcmlwdGlvbiB2YWx1ZQotRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FPUNhdGVnb3J5IGtleSBuYW1lCi1GT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX1ZBTFVFPUNhdGVnb3J5IGtleSB2YWx1ZQotRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX05BTUU9SWRlbnRpZmllciBrZXkgbmFtZQotRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFPUlkZW50aWZpZXIga2V5IHZhbHVlCi1GT1JNX0NPTlRST0xfVElUTEVfRElTQ09WRVJZX1VSTD1EaXNjb3ZlcnkgVVJMCi1GT1JNX0NPTlRST0xfVElUTEVfSU5QVVRfVEVYVF9WQUxVRT1VRERJIHJlZ2lzdHJ5IG5hbWUKLQotIyBGaW5kIGFjdGlvbnMKLUFMVF9GSU5EPUZpbmQKLUFMVF9TVUJRVUVSWT1GaW5kICUxIFN1YnF1ZXJ5Ci1GT1JNX0xBQkVMX1FVRVJZX05BTUU9TmFtZSBvZiB0aGlzIHF1ZXJ5Ci1ERUZBVUxUX1FVRVJZX05BTUU9cXVlcnkgcmVzdWx0cwotREVGQVVMVF9TVUJRVUVSWV9OQU1FPSUxIC0gJTIgc3VicXVlcnkKLUZPUk1fTEFCRUxfU0VBUkNIX0ZPUj1TZWFyY2ggZm9yCi1GT1JNX09QVElPTl9CVVNJTkVTU0VTPUJ1c2luZXNzZXMKLUZPUk1fT1BUSU9OX1NFUlZJQ0VTPVNlcnZpY2VzCi1GT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVM9U2VydmljZSBJbnRlcmZhY2VzCi1GT1JNX0xBQkVMX1NFQVJDSF9UWVBFPVR5cGUgb2Ygc2VhcmNoCi1GT1JNX1JBRElPX1NJTVBMRT1TaW1wbGUKLUZPUk1fUkFESU9fQURWQU5DRUQ9QWR2YW5jZWQKLUZPUk1fUkFESU9fVVVJRD1VVUlECi1GT1JNX0xBQkVMX0ZJTkRfQlVTSU5FU1NFU19TSU1QTEVfREVTQz1FbnRlciB0aGUgcGFydGlhbCBvciBjb21wbGV0ZSBuYW1lIG9mIGEgYnVzaW5lc3MgdG8gc2VhcmNoIGZvci4gVGhlICclJyBzeW1ib2wgY2FuIGJlIHVzZWQgYXMgYSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3Rlci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX0ZJTkRfQURWQU5DRURfREVTQz1FbnRlciB2YWx1ZXMgZm9yIG9uZSBvciBtb3JlIG9mIHRoZSBwYXJhbWV0ZXJzIGxpc3RlZCBiZWxvdy4gVGhlICclJyBzeW1ib2wgY2FuIGJlIHVzZWQgYXMgYSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3RlciBpbiB0aGUgTmFtZSBmaWVsZCBvZiB0aGUgTmFtZXMgdGFibGUuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX0ZJTkRfQlVTSU5FU1NfVVVJRF9ERVNDPUVudGVyIHRoZSBVVUlEIG9mIHRoZSBidXNpbmVzcyB0byBzZWFyY2ggZm9yLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfTkFNRVM9TmFtZXMKLUZPUk1fTElOS19BREQ9QWRkCi1GT1JNX0xJTktfR0VUPUdldAotRk9STV9MSU5LX0ZJTkQ9RmluZAotRk9STV9MSU5LX1JFTU9WRT1SZW1vdmUKLUZPUk1fTEFCRUxfT1dORUQ9T3duZWQKLUZPUk1fTEFCRUxfUFVCTElTSF9VUkw9UHVibGlzaCBVUkwKLUZPUk1fTEFCRUxfVVNFUklEPVVzZXIgSUQKLUZPUk1fTEFCRUxfUEFTU1dPUkQ9UGFzc3dvcmQKLUZPUk1fTEFCRUxfTEFOR1VBR0U9TGFuZ3VhZ2UKLUZPUk1fTEFCRUxfTkFNRT1OYW1lCi1GT1JNX0xBQkVMX0RFU0NSSVBUSU9OPURlc2NyaXB0aW9uCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FTj1FbmdsaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BQT1BZmFyCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BQj1BYmtoYXppYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FGPUFmcmlrYWFucwotRk9STV9PUFRJT05fTEFOR1VBR0VfQU09QW1oYXJpYwotRk9STV9PUFRJT05fTEFOR1VBR0VfQVI9QXJhYmljCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BUz1Bc3NhbWVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfQVk9QXltYXJhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BWj1BemVyYmFpamFuaQotRk9STV9PUFRJT05fTEFOR1VBR0VfQkE9QmFzaGtpcgotRk9STV9PUFRJT05fTEFOR1VBR0VfQkU9QnllbG9ydXNzaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CRz1CdWxnYXJpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JIPUJpaGFyaQotRk9STV9PUFRJT05fTEFOR1VBR0VfQkk9QmlzbGFtYQotRk9STV9PUFRJT05fTEFOR1VBR0VfQk49QmVuZ2FsaTsgQmFuZ2xhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CTz1UaWJldGFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CUj1CcmV0b24KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0NBPUNhdGFsYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0NPPUNvcnNpY2FuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9DWj1DemVjaAotRk9STV9PUFRJT05fTEFOR1VBR0VfQ1k9V2Vsc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0RBPURhbmlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfREU9R2VybWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9EWj1CaHV0YW5pCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FTD1HcmVlawotRk9STV9PUFRJT05fTEFOR1VBR0VfRU89RXNwZXJhbnRvCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FUz1TcGFuaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FVD1Fc3RvbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfRVU9QmFzcXVlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GQT1QZXJzaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GST1GaW5uaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GSj1GaWppCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GTz1GYWVyb2VzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfRlI9RnJlbmNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GWT1GcmlzaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HQT1JcmlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfR0Q9U2NvdHMgR2FlbGljCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HTD1HYWxpY2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfR049R3VhcmFuaQotRk9STV9PUFRJT05fTEFOR1VBR0VfR1U9R3VqYXJhdGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0hBPUhhdXNhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IST1IaW5kaQotRk9STV9PUFRJT05fTEFOR1VBR0VfSFI9Q3JvYXRpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0hVPUh1bmdhcmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSFk9QXJtZW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lBPUludGVybGluZ3VhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JRT1JbnRlcmxpbmd1ZQotRk9STV9PUFRJT05fTEFOR1VBR0VfSUs9SW51cGlhawotRk9STV9PUFRJT05fTEFOR1VBR0VfSU49SW5kb25lc2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSVM9SWNlbGFuZGljCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JVD1JdGFsaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JVz1IZWJyZXcKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0pBPUphcGFuZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9KST1ZaWRkaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9KVz1KYXZhbmVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfS0E9R2VvcmdpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tLPUthemFraAotRk9STV9PUFRJT05fTEFOR1VBR0VfS0w9R3JlZW5sYW5kaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tNPUNhbWJvZGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfS049S2FubmFkYQotRk9STV9PUFRJT05fTEFOR1VBR0VfS089S29yZWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LUz1LYXNobWlyaQotRk9STV9PUFRJT05fTEFOR1VBR0VfS1U9S3VyZGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfS1k9S2lyZ2hpegotRk9STV9PUFRJT05fTEFOR1VBR0VfTEE9TGF0aW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xOPUxpbmdhbGEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xPPUxhb3RoaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9MVD1MaXRodWFuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9MVj1MYXR2aWFuLCBMZXR0aXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NRz1NYWxhZ2FzeQotRk9STV9PUFRJT05fTEFOR1VBR0VfTUk9TWFvcmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01LPU1hY2Vkb25pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01MPU1hbGF5YWxhbQotRk9STV9PUFRJT05fTEFOR1VBR0VfTU49TW9uZ29saWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NTz1Nb2xkYXZpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01SPU1hcmF0aGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01TPU1hbGF5Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9NVD1NYWx0ZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NWT1CdXJtZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9OQT1OYXVydQotRk9STV9PUFRJT05fTEFOR1VBR0VfTkU9TmVwYWxpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9OTD1EdXRjaAotRk9STV9PUFRJT05fTEFOR1VBR0VfTk89Tm9yd2VnaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9PQz1PY2NpdGFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9PTT0oQWZhbikgT3JvbW8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX09SPU9yaXlhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9QQT1QdW5qYWJpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9QTD1Qb2xpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BTPVBhc2h0bywgUHVzaHRvCi1GT1JNX09QVElPTl9MQU5HVUFHRV9QVD1Qb3J0dWd1ZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9RVT1RdWVjaHVhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9STT1SaGFldG8tUm9tYW5jZQotRk9STV9PUFRJT05fTEFOR1VBR0VfUk49S2lydW5kaQotRk9STV9PUFRJT05fTEFOR1VBR0VfUk89Um9tYW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1JVPVJ1c3NpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1JXPUtpbnlhcndhbmRhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TQT1TYW5za3JpdAotRk9STV9PUFRJT05fTEFOR1VBR0VfU0Q9U2luZGhpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TRz1TYW5ncm8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NIPVNlcmJvLUNyb2F0aWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TST1TaW5naGFsZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TSz1TbG92YWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NMPVNsb3ZlbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfU009U2Ftb2FuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TTj1TaG9uYQotRk9STV9PUFRJT05fTEFOR1VBR0VfU089U29tYWxpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TUT1BbGJhbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfU1I9U2VyYmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfU1M9U2lzd2F0aQotRk9STV9PUFRJT05fTEFOR1VBR0VfU1Q9U2Vzb3RobwotRk9STV9PUFRJT05fTEFOR1VBR0VfU1U9U3VuZGFuZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TVj1Td2VkaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TVz1Td2FoaWxpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UQT1UYW1pbAotRk9STV9PUFRJT05fTEFOR1VBR0VfVEU9VGVndWx1Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9URz1UYWppawotRk9STV9PUFRJT05fTEFOR1VBR0VfVEg9VGhhaQotRk9STV9PUFRJT05fTEFOR1VBR0VfVEk9VGlncmlueWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RLPVR1cmttZW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RMPVRhZ2Fsb2cKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1ROPVNldHN3YW5hCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UTz1Ub25nYQotRk9STV9PUFRJT05fTEFOR1VBR0VfVFI9VHVya2lzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfVFM9VHNvbmdhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UVD1UYXRhcgotRk9STV9PUFRJT05fTEFOR1VBR0VfVFc9VHdpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9VSz1Va3JhaW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1VSPVVyZHUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1VaPVV6YmVrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9WST1WaWV0bmFtZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9WTz1Wb2xhcHVrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9XTz1Xb2xvZgotRk9STV9PUFRJT05fTEFOR1VBR0VfWEg9WGhvc2EKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1lPPVlvcnViYQotRk9STV9PUFRJT05fTEFOR1VBR0VfWkg9Q2hpbmVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfWlU9WnVsdQotRk9STV9MQUJFTF9FWEFDVF9OQU1FX01BVENIPUV4YWN0IG1hdGNoCi1GT1JNX0xBQkVMX0NBU0VfU0VOU0lUSVZFX01BVENIPUNhc2Ugc2Vuc2l0aXZlCi1GT1JNX0xBQkVMX1NPVU5ERVg9U291bmQgYWxpa2UKLUZPUk1fTEFCRUxfSURFTlRJRklFUlM9SWRlbnRpZmllcnMKLUZPUk1fTEFCRUxfSURFTlRJRklFUl9UWVBFPVR5cGUKLQotIyBEbyBub3QgdHJhbnNsYXRlIHRoZSB0d28gaXRlbXMgYmVsb3cuCi1GT1JNX09QVElPTl9JREVOVElGSUVSX0RVTlM9RC1VLU4tUwotRk9STV9PUFRJT05fSURFTlRJRklFUl9USE9NQVNfUkVHSVNUUlk9VGhvbWFzIFJlZ2lzdHJ5Ci0KLUZPUk1fTEFCRUxfS0VZX05BTUU9S2V5IG5hbWUKLUZPUk1fTEFCRUxfS0VZX1ZBTFVFPUtleSB2YWx1ZQotRk9STV9MQUJFTF9DQVRFR09SSUVTPUNhdGVnb3JpZXMKLUZPUk1fTEFCRUxfQ0FURUdPUllfVFlQRT1UeXBlCi1GT1JNX09QVElPTl9DQVRFR09SWV9OQUlDUz1OQUlDUwotRk9STV9PUFRJT05fQ0FURUdPUllfVU5TUFNDXzczPVVOU1BTQyA3LjMKLUZPUk1fT1BUSU9OX0NBVEVHT1JZX0dFTz1HRU8KLUZPUk1fTEFCRUxfQlVTSU5FU1NfQ0FURUdPUklFUz1Db21wYXJlIHdpdGg6Ci1GT1JNX09QVElPTl9CVVNJTkVTU0VTX09OTFk9QnVzaW5lc3NlcyBvbmx5Ci1GT1JNX09QVElPTl9TRVJWSUNFU19PTkxZPVNlcnZpY2VzIG9ubHkKLUZPUk1fT1BUSU9OX0JPVEg9QnVzaW5lc3NlcyBhbmQgU2VydmljZXMKLUZPUk1fTEFCRUxfRElTQ09WRVJZVVJMUz1EaXNjb3ZlcnkgVVJMcwotRk9STV9MQUJFTF9ESVNDT1ZFUllVUkw9RGlzY292ZXJ5IFVSTAotRk9STV9MQUJFTF9GSU5EUVVBTElGSUVSUz1GaW5kIFF1YWxpZmllcnMKLUZPUk1fTEFCRUxfQ09NQklORV9LRVlTPUNvbWJpbmUga2V5czoKLUZPUk1fT1BUSU9OX0FOREFMTEtFWVM9QW5kCi1GT1JNX09QVElPTl9PUkFMTEtFWVM9T3IKLUZPUk1fT1BUSU9OX09STElLRUtFWVM9T3IgTGlrZQotRk9STV9MQUJFTF9TT1JUX0JZX05BTUU9U29ydCBieSBuYW1lOgotRk9STV9SQURJT19TT1JUX0FTQz1Bc2NlbmRpbmcKLUZPUk1fUkFESU9fU09SVF9ERVNDPURlc2NlbmRpbmcKLUZPUk1fTEFCRUxfU09SVF9CWV9EQVRFPVNvcnQgYnkgZGF0ZToKLUZPUk1fTEFCRUxfTUFYX1NFQVJDSF9TRVQ9TWF4aW11bSBzaXplIG9mIHNlYXJjaCBzZXQ6Ci1GT1JNX0xBQkVMX01BWF9SRVNVTFRTPU1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHM6Ci1GT1JNX0xBQkVMX0ZJTkRfU0VSVklDRVNfU0lNUExFX0RFU0M9RW50ZXIgdGhlIHBhcnRpYWwgb3IgY29tcGxldGUgbmFtZSBvZiBhIHNlcnZpY2UgdG8gc2VhcmNoIGZvci4gVGhlICclJyBzeW1ib2wgY2FuIGJlIHVzZWQgYXMgYSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3Rlci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX0ZJTkRfU0VSVklDRV9VVUlEX0RFU0M9RW50ZXIgdGhlIFVVSUQgb2YgdGhlIHNlcnZpY2UgdG8gc2VhcmNoIGZvci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX0ZJTkRfU0VSVklDRV9JTlRFUkZBQ0VTX1NJTVBMRV9ERVNDPUVudGVyIHRoZSBwYXJ0aWFsIG9yIGNvbXBsZXRlIG5hbWUgb2YgYSBzZXJ2aWNlIGludGVyZmFjZSB0byBzZWFyY2ggZm9yLiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRV9VVUlEX0RFU0M9RW50ZXIgdGhlIFVVSUQgb2YgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHRvIHNlYXJjaCBmb3IuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVM9U2VydmljZSBJbnRlcmZhY2VzCi1GT1JNX0xBQkVMX1VVSURfS0VZPVVVSUQgS2V5OgotRk9STV9MQUJFTF9VU0VfU0VSVklDRT1Vc2Ugc2VydmljZQotRk9STV9MQUJFTF9TRVJWSUNFPVNlcnZpY2UKLUZPUk1fTEFCRUxfQlVTSU5FU1M9QnVzaW5lc3MKLUZPUk1fTEFCRUxfUFVCTElTSF9BU1NFUlRJT05TPVB1Ymxpc2hlciBBc3NlcnRpb25zCi1GT1JNX0xBQkVMX0RJUkVDVElPTj1EaXJlY3Rpb24KLUZPUk1fTEFCRUxfRlJPTV9LRVk9RnJvbSBLZXkKLUZPUk1fTEFCRUxfVE9fS0VZPVRvIEtleQotRk9STV9MQUJFTF9TVEFUVVM9U3RhdHVzCi1GT1JNX0xBQkVMX0FTU0VSVElPTl9UWVBFPUFzc2VydGlvbiBUeXBlCi1GT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9QQVJFTlRfQ0hJTEQ9UGFyZW50LUNoaWxkCi1GT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9QRUVSX1RPX1BFRVI9UGVlci1QZWVyCi1GT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9JREVOVElUWT1JZGVudGl0eQotRk9STV9MQUJFTF9BU1NFUlRJT05fRElSRVRJT05fREVTQz1EaXJlY3Rpb24gPHN0cm9uZz5Gcm9tPC9zdHJvbmc+IHdpbGwgY3JlYXRlIGEgcHVibGlzaGVyIGFzc2VydGlvbiBmcm9tIHRoaXMgYnVzaW5lc3MgdG8gdGhlIGJ1c2luZXNzZXMgYWJvdmUuICBEaXJlY3Rpb24gPHN0cm9uZz5Ubzwvc3Ryb25nPiB3aWxsIGNyZWF0ZSBhIHB1Ymxpc2hlciBhc3NlcnRpb24gZnJvbSB0aGUgYWJvdmUgYnVzaW5lc3NlcyB0byB0aGlzIGJ1c2luZXNzLgotRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9GUk9NPS0tLT4KLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9ESVJFQ1RJT05fVE89PC0tLQotRk9STV9MQUJFTF9USElTX0JVU0lORVNTPVRoaXMKLU1TR19FUlJPUl9JTlZBTElEX1FVRVJZX05BTUU9SVdBQjAxNDBFIEVudGVyIGEgdmFsaWQgbmFtZSBmb3IgdGhlIHF1ZXJ5LgotTVNHX0VSUk9SX0lOVkFMSURfTkFNRVM9SVdBQjAxNDFFIEVudGVyIGEgc2VyaWVzIG9mIHZhbGlkIG5hbWVzLgotTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkw9SVdBQjAxNDJFIEVudGVyIGEgdmFsaWQgcHVibGlzaCBVUkwuCi1NU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQ9SVdBQjAxNDNFIEVudGVyIGEgdmFsaWQgdXNlciBJRC4KLU1TR19FUlJPUl9JTlZBTElEX01BWF9TRUFSQ0hfU0VUPUlXQUIwMTQ1RSBFbnRlciBhIHZhbGlkIHNpemUgZm9yIHRoZSBtYXhpbXVtIHNlYXJjaCBzZXQuCi1NU0dfRVJST1JfSU5WQUxJRF9NQVhfUkVTVUxUUz1JV0FCMDE0NkUgRW50ZXIgYSB2YWxpZCBzaXplIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cy4KLU1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQ9SVdBQjAxNDdJIE51bWJlciBvZiBidXNpbmVzc2VzIGZvdW5kOiAlMQotTVNHX0VSUk9SX05PX0JVU0lORVNTRVNfRk9VTkQ9SVdBQjAxNDhFIE5vIGJ1c2luZXNzZXMgZm91bmQuCi1NU0dfSU5GT19TRVJWSUNFU19GT1VORD1JV0FCMDE0OUkgTnVtYmVyIG9mIHNlcnZpY2VzIGZvdW5kOiAlMQotTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EPUlXQUIwMTUwRSBObyBzZXJ2aWNlcyBmb3VuZC4KLU1TR19FUlJPUl9TSU5HTEVfSVRFTT1JV0FCMDE1MUUgU2VsZWN0IGp1c3Qgb25lIGl0ZW0uCi1NU0dfUVVFU1RJT05fSVRFTV9SRVBMQUNFTUVOVD1UaGUgc2VsZWN0aW9uIHdpbGwgcmVwbGFjZSBhbiBpdGVtIGFscmVhZHkgaW4gdGhlIHRhcmdldC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8KLU1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORD1JV0FCMDE1MkkgTnVtYmVyIG9mIHNlcnZpY2UgaW50ZXJmYWNlcyBmb3VuZDogJTEKLU1TR19FUlJPUl9OT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQ9SVdBQjAxNTNFIE5vIHNlcnZpY2UgaW50ZXJmYWNlcyBmb3VuZC4KLU1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEPUlXQUIwMTU0RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0uCi1NU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWT1JV0FCMDE1NUUgRW50ZXIgYSB2YWxpZCBVVUlEIGtleS4KLU1TR19FUlJPUl9RVUVSWV9OQU1FX0NPTkZMSUNUPUlXQUIwMTU2RSBUaGUgc3VicXVlcnkncyBxdWVyeSBuYW1lIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYXRvci4KLU1TR19FUlJPUl9OT19JVEVNU19UT19HRVQ9SVdBQjAxNTdFIE5vIGl0ZW1zIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBoYXZlIGJlZW4gcHVibGlzaGVkIG9yIGRpc2NvdmVyZWQgeWV0LgotTVNHX0lORk9fTk9fQlVTSU5FU1NFU19PUl9TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQ9SVdBQjAxNjJJIE5vIEJ1c2luZXNzZXMsIFNlcnZpY2VzIG9yIFNlcnZpY2UgSW50ZXJmYWNlcyBmb3VuZC4KLQotIyBSZXN1bHRzCi1BTFRfUVVFUllfUkVTVUxUUz1RdWVyeSBSZXN1bHRzCi1GT1JNX0xBQkVMX1NVQlFVRVJZPVRoZSByZXN1bHRzIG1heSBiZSB1c2VkIGFzIGlucHV0cyBvZiBhbm90aGVyIG9wZXJhdGlvbi4gQ2xpY2sgdGhlIDxzdHJvbmc+dGFyZ2V0PC9zdHJvbmc+IGxpbmsgYXQgdGhlIHRvcCB0byBzZWUgdGhlIG9wZXJhdGlvbi4gU2VsZWN0ZWQgcmVzdWx0cyBjYW4gYmUgdXNlZCBpbiB0aGUgb3BlcmF0aW9uIGJ5IGNsaWNraW5nIHRoZSA8c3Ryb25nPlRyYW5zZmVyPC9zdHJvbmc+IGJ1dHRvbi4KLUZPUk1fTEFCRUxfUVVFUlk9U2VsZWN0IGEgcmVzdWx0IHRvIHNlZSBtb3JlIGRldGFpbHMgb3Igc2VsZWN0IGEgc2V0IG9mIHJlc3VsdHMgYW5kIGNsaWNrIGEgYnV0dG9uIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLgotRk9STV9MSU5LX1RBUkdFVD10YXJnZXQKLUZPUk1fQlVUVE9OX1RSQU5TRkVSPVRyYW5zZmVyCi1GT1JNX0JVVFRPTl9SRUZSRVNIPVJlZnJlc2gKLUZPUk1fQlVUVE9OX0FERF9UT19GQVZPUklURVM9QWRkIHRvIGZhdm9yaXRlcwotRk9STV9CVVRUT05fVU5QVUJMSVNIPVVucHVibGlzaAotRk9STV9CVVRUT05fQ0xFQVI9Q2xlYXIKLQotIyBQdWJsaXNoIGFjdGlvbnMKLUFMVF9QVUJMSVNIPVB1Ymxpc2gKLUZPUk1fTEFCRUxfUFVCTElTSD1QdWJsaXNoOgotRk9STV9PUFRJT05fQlVTSU5FU1M9QnVzaW5lc3MKLUZPUk1fT1BUSU9OX1NFUlZJQ0U9U2VydmljZQotRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0U9U2VydmljZSBJbnRlcmZhY2UKLUZPUk1fTEFCRUxfUFVCTElTSF9CVVNJTkVTU19TSU1QTEVfREVTQz1FbnRlciBhIG5hbWUgYW5kIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYnVzaW5lc3MgdG8gYmUgcHVibGlzaGVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfQlVTSU5FU1NfQURWQU5DRURfREVTQz1Qcm92aWRlIGEgbmFtZSBmb3IgdGhlIGJ1c2luZXNzIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXIgcGFyYW1ldGVycyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX1NJTVBMRV9ERVNDPUdldCBvciBmaW5kIGEgYnVzaW5lc3MgYW5kIHRoZW4gcHJvdmlkZSB0aGUgV1NETCBVUkwsIG5hbWUgYW5kIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgc2VydmljZSB0byBiZSBwdWJsaXNoZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0FEVkFOQ0VEX0RFU0M9R2V0IG9yIGZpbmQgYSBidXNpbmVzcyBhbmQgdGhlbiBwcm92aWRlIHRoZSBXU0RMIFVSTCBhbmQgYSBuYW1lIGZvciB0aGUgc2VydmljZSB0byBiZSBwdWJsaXNoZWQuIE90aGVyIHBhcmFtZXRlcnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRV9TSU1QTEVfREVTQz1Qcm92aWRlIHRoZSBXU0RMIFVSTCwgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0VfQURWQU5DRURfREVTQz1Qcm92aWRlIHRoZSBXU0RMIFVSTCBhbmQgYSBuYW1lIGZvciB0aGUgc2VydmljZSB0byBiZSBwdWJsaXNoZWQuIE90aGVyIHBhcmFtZXRlcnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0VfU0lNUExFX0RFU0M9RW50ZXIgYSBXU0RMIFVSTCwgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBiZSBwdWJsaXNoZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRV9BRFZBTkNFRF9ERVNDPVByb3ZpZGUgdGhlIFdTREwgVVJMIGFuZCBuYW1lIGZvciB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gYmUgcHVibGlzaGVkLiBPdGhlciBwYXJhbWV0ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX0ZPUk09UHVibGljYXRpb24gZm9ybWF0Ci1GT1JNX0xBQkVMX0RFU0NSSVBUSU9OPURlc2NyaXB0aW9uCi1GT1JNX0xBQkVMX0RFU0NSSVBUSU9OUz1EZXNjcmlwdGlvbnMKLU1TR19JTkZPX0JVU0lORVNTX1BVQkxJU0hFRD1JV0FCMDE1OEkgQnVzaW5lc3MgJTEgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQuCi1NU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRD1JV0FCMDE1OUkgU2VydmljZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1BVQkxJU0hFRD1JV0FCMDE2MEkgU2VydmljZSBpbnRlcmZhY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQuCi1NU0dfRVJST1JfSU5WQUxJRF9OQU1FPUlXQUIwMTYxRSBFbnRlciBhIHZhbGlkIG5hbWUuCi1NU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFPUlXQUIwMjUwRSBTZWxlY3QgYSBub24tYmxhbmsgbGFuZ3VhZ2UgZm9yIHRoZSAlMSBpbiByb3cgJTIuIE9ubHkgdGhlIGZpcnN0IHJvdyBjYW4gaGF2ZSBhIGJsYW5rIGxhbmd1YWdlLgotTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0U9SVdBQjAyNTFFIENoYW5nZSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSAlMSBpbiByb3cgJTIuIFRoZSBjdXJyZW50IG9uZSBpcyBhbHJlYWR5IGluIHVzZS4KLU1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUPUlXQUIwMjUyRSBFbnRlciBhIHZhbGlkICUxIGluIHJvdyAlMgotTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkw9SVdBQjAyNTNFIEVudGVyIGEgdmFsaWQgV1NETCBVUkwuCi1NU0dfRVJST1JfTk9fTkFNRVM9SVdBQjAyNTRFIEFkZCBhdCBsZWFzdCBvbmUgbmFtZS4KLU1TR19FUlJPUl9JTlZBTElEX1NFUlZJQ0U9SVdBQjAyNTVFIFByb3ZpZGUgYSB2YWxpZCBzZXJ2aWNlLgotTVNHX0VSUk9SX0lOVkFMSURfQlVTSU5FU1M9SVdBQjAyNTZFIFByb3ZpZGUgYSB2YWxpZCBidXNpbmVzcy4KLQotIyBCdXNpbmVzcyBQdWJsaXNoIFNlcnZpY2UgYWN0aW9uCi1BTFRfUFVCTElTSF9TRVJWSUNFPVB1Ymxpc2ggU2VydmljZQotCi0jIExvZ2luIGFjdGlvbnMKLUFMVF9MT0dJTj1Mb2dpbgotQUxUX0xPR09VVD1Mb2dvdXQKLU1TR19JTkZPX05PX01VTFRJUExFX0xPR0lOPU11bHRpcGxlIGxvZ2lucyB3aXRoIHNhbWUgSUQgbm90IGFsbG93ZWQKLU1TR19JTkZPX0xPR0dFRF9JTl9OT0RFPSUxIC0gbG9nZ2VkIGluIGFzICUyCi0KLSMgV1NETCBCcm93c2VyCi1USVRMRV9XU0RMX0JST1dTRVI9V1NETCBCcm93c2VyIC0gJTEKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0U9U2VsZWN0IGEgV1NETCBzb3VyY2U6Ci1GT1JNX0xBQkVMX1dTRExfU09VUkNFX1dFQlBST0pFQ1RTPVdlYiBQcm9qZWN0cwotRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9GQVZPUklURVM9RmF2b3JpdGVzCi1GT1JNX0xBQkVMX1dFQl9QUk9KRUNUPVdlYiBQcm9qZWN0Ci1GT1JNX0xBQkVMX1dTRExfVVJMPVdTREwgVVJMCi1BTFRfV1NETF9CUk9XU0VSPVdTREwgQnJvd3NlcgotCi0jIERldGFpbHMKLUZPUk1fTElOS19FRElUPUVkaXQKLUZPUk1fTElOS19DQU5DRUw9Q2FuY2VsCi1GT1JNX0xBQkVMX0JVU0lORVNTX0tFWT1CdXNpbmVzcyBLZXkKLUZPUk1fTEFCRUxfU0VSVklDRV9LRVk9U2VydmljZSBLZXkKLUZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VfS0VZPVRNb2RlbCBLZXkKLUZPUk1fTEFCRUxfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVM9VXNlciBEZWZpbmVkIENhdGVnb3JpZXMKLUZPUk1fTEFCRUxfQ0hFQ0tFRD1DaGVja2VkCi1GT1JNX0xBQkVMX0ZJTEU9RmlsZQotTVNHX1FVRVNUSU9OX1BVQkxJU0hfSVRFTT1UaGUgaXRlbSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byBwdWJsaXNoIGl0PwotTVNHX1FVRVNUSU9OX1NFUlZJQ0VfUFVCTElTSF9CVVNJTkVTUz1UaGUgc2VydmljZSBhbmQgaXRzIGJ1c2luZXNzIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIFByb2NlZWQgdG8gcHVibGlzaD8KLU1TR19JTkZPX0JVU0lORVNTX1VQREFURUQ9SVdBQjAyNTdJIEJ1c2luZXNzICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLU1TR19JTkZPX1NFUlZJQ0VfVVBEQVRFRD1JV0FCMDI1OEkgU2VydmljZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCi1NU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9VUERBVEVEPUlXQUIwMjU5SSBTZXJ2aWNlIEludGVyZmFjZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCi1NU0dfSU5GT19SRUdJU1RSWV9VUERBVEVEPUlXQUIwMzIzSSBSZWdpc3RyeSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCi0KLSMgVW5wdWJsaXNoQWN0aW9uCi1BTFRfVU5QVUJMSVNIX0JVU0lORVNTPVVucHVibGlzaCBCdXNpbmVzcwotQUxUX1VOUFVCTElTSF9TRVJWSUNFPVVucHVibGlzaCBTZXJ2aWNlCi1BTFRfVU5QVUJMSVNIX1NFUlZJQ0VfSU5URVJGQUNFPVVucHVibGlzaCBTZXJ2aWNlIEludGVyZmFjZQotRk9STV9MQUJFTF9VTlBVQkxJU0hfREVTQz1QcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIHVucHVibGlzaCB0aGlzIG9iamVjdC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotTVNHX0lORk9fQlVTSU5FU1NfVU5QVUJMSVNIRUQ9SVdBQjAyNjBJIEJ1c2luZXNzICUxIHdhcyBzdWNjZXNzZnVsbHkgdW5wdWJsaXNoZWQuCi1NU0dfSU5GT19TRVJWSUNFX1VOUFVCTElTSEVEPUlXQUIwMjYxSSBTZXJ2aWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgdW5wdWJsaXNoZWQuCi1NU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9VTlBVQkxJU0hFRD1JV0FCMDI2MkkgU2VydmljZSBJbnRlcmZhY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1bnB1Ymxpc2hlZC4KLQotIyBBZGQgdG8gV1NETCBQZXJzcGVjdGl2ZQotQUxUX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCBUbyBXU0RMIFBhZ2UKLU1TR19JTkZPX1dTRExfQURERURfVE9fV1NETF9QRVJTUEVDVElWRT1JV0FCMDM3NkkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byBXU0RMIHBhZ2UuCi1NU0dfRVJST1JfV1NETF9OT1RfQURERURfVE9fV1NETF9QRVJTUEVDVElWRT1JV0FCMDM3N0UgJTEgY291bGQgbm90IGJlIGFkZGVkIHRvIFdTREwgcGFnZS4KLQotIyBBZGQgdG8gRmF2b3JpdGVzCi1BTFRfQUREX1RPX0ZBVk9SSVRFUz1BZGQgVG8gRmF2b3JpdGVzCi1NU0dfSU5GT19GQVZPUklURV9BRERFRD1JV0FCMDI2M0kgJTEgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byBmYXZvcml0ZXMuCi1NU0dfRVJST1JfRkFWT1JJVEVfTk9UX0FEREVEPUlXQUIwMjY0RSAlMSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gZmF2b3JpdGVzLgotTVNHX0VSUk9SX0ZBVk9SSVRFX0FMUkVBRFlfRVhJU1RTPUlXQUIwMzI0RSAlMSBhbHJlYWR5IGV4aXN0cyBpbiBmYXZvcnRpZXMuCi1NU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUz1GYXZvcml0ZSBhbHJlYWR5IGV4aXN0cy4gIERvIHlvdSB3aXNoIHRvIG92ZXJ3cml0ZT8KLQotIyBSZWZyZXNoCi1NU0dfSU5GT19OT0RFX1JFRlJFU0hFRD1JV0FCMDI2NUkgJTEgcmVmcmVzaGVkLgotTVNHX1FVRVNUSU9OX1JFTU9WRV9OT0RFPSUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIGNsZWFyIGl0PwotCi0jIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlcwotQUxUX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTPU1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzCi1GT1JNX0xBQkVMX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX0RFU0M9QWRkIGRpc2NvdmVyZWQgb3IgcHVibGlzaGVkIHNlcnZpY2VzIHRvIHRoZSBsaXN0IG9mIHJlZmVyZW5jZWQgc2VydmljZXMgYnkgY2xpY2tpbmcgdGhlIDxzdHJvbmc+QWRkIFNlcnZpY2VzPC9zdHJvbmc+IGJ1dHRvbi4gUmVtb3ZlIHNlbGVjdGVkIHJlZmVyZW5jZXMgYnkgY2xpY2tpbmcgdGhlIDxzdHJvbmc+UmVtb3ZlIFJlZmVyZW5jZXM8L3N0cm9uZz4gYnV0dG9uLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQgZm9yIGNoYW5nZXMuCi1GT1JNX0xBQkVMX1JFRkVSRU5DRURfU0VSVklDRVM9UmVmZXJlbmNlZCBTZXJ2aWNlcwotRk9STV9CVVRUT05fQUREX1NFUlZJQ0VTPUFkZCBTZXJ2aWNlcwotRk9STV9CVVRUT05fUkVNT1ZFX1JFRkVSRU5DRVM9UmVtb3ZlIFJlZmVyZW5jZXMKLU1TR19FUlJPUl9OT19SRUZFUkVOQ0VfU0VMRUNURUQ9SVdBQjAyNjZFIFNlbGVjdCBhdCBsZWFzdCBvbmUgcmVmZXJlbmNlZCBzZXJ2aWNlIGJlZm9yZSBwcm9jZWVkaW5nLgotTVNHX0VSUk9SX05PX1NFUlZJQ0VTPUlXQUIwMjY3RSBHZXQgb3IgZmluZCBhdCBsZWFzdCBvbmUgc2VydmljZSBiZWZvcmUgcHJvY2VlZGluZy4KLU1TR19FUlJPUl9TRVJWSUNFX05PVF9SRUZFUkVOQ0VEPUlXQUIwMjY4RSBTZXJ2aWNlICUxIGNvdWxkIG5vdCBiZSByZWZlcmVuY2VkLgotTVNHX0VSUk9SX1JFRkVSRU5DRV9OT1RfUkVNT1ZFRD1JV0FCMDI2OUUgU2VydmljZSByZWZlcmVuY2UgJTEgY291bGQgbm90IGJlIHJlbW92ZWQuCi1NU0dfSU5GT19TRVJWSUNFX1JFRkVSRU5DRUQ9SVdBQjAyNzBJIFNlcnZpY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSByZWZlcmVuY2VkLgotTVNHX0lORk9fU0VSVklDRV9SRUZFUkVOQ0VfUkVNT1ZFRD1JV0FCMDI3MUkgU2VydmljZSByZWZlcmVuY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLgotCi0jIE1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnMKLUFMVF9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlM9TWFuYWdlIFB1Ymxpc2hlciBBc3NlcnRpb25zCi1GT1JNX0xBQkVMX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OU19ERVNDPUFkZCBkaXNjb3ZlcmVkIG9yIHB1Ymxpc2hlZCBidXNpbmVzc2VzIHRvIHRoZSBsaXN0IG9mIHB1Ymxpc2hlciBhc3NlcnRpb25zIGJ5IGNsaWNraW5nIDxzdHJvbmc+QWRkIEFzc2VydGlvbnM8L3N0cm9uZz4uIFJlbW92ZSBzZWxlY3RlZCBhc3NlcnRpb25zIGJ5IGNsaWNraW5nIDxzdHJvbmc+UmVtb3ZlIEFzc2VydGlvbnM8L3N0cm9uZz4uIENvbXBsZXRlIHNlbGVjdGVkIGFzc2VydGlvbnMgYnkgY2xpY2tpbmcgPHN0cm9uZz5Db21wbGV0ZSBBc3NlcnRpb25zPC9zdHJvbmc+LiBDbGljayA8c3Ryb25nPlJlZnJlc2ggQXNzZXJ0aW9uczwvc3Ryb25nPiB0byByZWZyZXNoIHRoZSBsaXN0IG9mIGFzc2VydGlvbnMuCi1GT1JNX0xBQkVMX0lOQ09NUExFVEVfQVNTRVJUSU9OU19WSVNJQklMSVRZX0RFU0M9UGxlYXNlIG5vdGUgdGhhdCBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb25zIGFyZSB2aXNpYmxlIG9ubHkgdG8gdGhlIG93bmVyIG9mIHRoZSBidXNpbmVzcy4KLUZPUk1fTEFCRUxfQlVTSU5FU1NFUz1CdXNpbmVzc2VzCi1GT1JNX0JVVFRPTl9TSE9XX0FMTF9QVUJMSVNIRVJfQVNTRVJUSU9OUz1SZWZyZXNoIEFzc2VydGlvbnMKLUZPUk1fQlVUVE9OX0NPTVBMRVRFX1BVQkxJU0hFUl9BU1NFUlRJT05TPUNvbXBsZXRlIEFzc2VydGlvbnMKLUZPUk1fQlVUVE9OX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUz1BZGQgQXNzZXJ0aW9ucwotRk9STV9CVVRUT05fUkVNT1ZFX1BVQkxJU0hFUl9BU1NFUlRJT05TPVJlbW92ZSBBc3NlcnRpb25zCi1NU0dfSU5GT19QVUJMSVNIRVJfQVNTRVJUSU9OU19SRUZSRVNIRUQ9SVdBQjAzMjVJIFB1Ymxpc2hlciBBc3NlcnRpb25zIGFyZSByZWZyZXNoZWQuCi1NU0dfRVJST1JfTk9fSU5DT01QTEVURV9BU1NFUlRJT05fU0VMRUNURUQ9SVdBQjAzMjZFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaW5jb21wbGV0ZSBwdWJsaXNoZXIgYXNzZXJ0aW9uLgotTVNHX0VSUk9SX05PVF9PV05FRF9CVVNJTkVTUz1JV0FCMDMyN0UgVGhpcyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIGJ1c2luZXNzIG93bmVkIGJ5IGFub3RoZXIgcGFydHkuCi0KLSMgR2V0QnVzaW5lc3NlcwotQUxUX0dFVF9CVVNJTkVTUz1HZXQgQnVzaW5lc3MKLUFMVF9HRVRfQlVTSU5FU1NFUz1HZXQgQnVzaW5lc3NlcwotTk9ERV9OQU1FX1NFUlZJQ0VfQlVTSU5FU1M9QnVzaW5lc3MgZm9yIHNlcnZpY2UgJTEKLU5PREVfTkFNRV9TSV9CVVNJTkVTU0VTPUJ1c2luZXNzZXMgZm9yIHNlcnZpY2UgaW50ZXJmYWNlICUxCi1NU0dfUVVFU1RJT05fUkVNT1ZFX1NFUlZJQ0VfTk9ERT1UaGUgc2VydmljZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotCi0jIEdldFNlcnZpY2VJbnRlcmZhY2VzCi1BTFRfR0VUX1NFUlZJQ0VfSU5URVJGQUNFUz1HZXQgU2VydmljZSBJbnRlcmZhY2VzCi1OT0RFX05BTUVfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVM9U2VydmljZSBpbnRlcmZhY2VzIGZvciBzZXJ2aWNlICUxCi1NU0dfUVVFU1RJT05fR0VUX1NJX1JFTU9WRV9TRVJWSUNFX05PREU9VGhlIHNlcnZpY2UgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbm9kZT8KLQotIyBHZXRTZXJ2aWNlcwotQUxUX0dFVF9TRVJWSUNFUz1HZXQgU2VydmljZXMKLU5PREVfTkFNRV9TSV9TRVJWSUNFUz1TZXJ2aWNlcyBmb3Igc2VydmljZSBpbnRlcmZhY2UgJTEKLU5PREVfTkFNRV9CVVNJTkVTU19TRVJWSUNFUz1TZXJ2aWNlcyBmb3IgYnVzaW5lc3MgJTEKLU1TR19RVUVTVElPTl9SRU1PVkVfU0lfTk9ERT1UaGUgc2VydmljZSBpbnRlcmZhY2UgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbm9kZT8KLU1TR19RVUVTVElPTl9SRU1PVkVfQlVTSU5FU1NfTk9ERT1UaGUgYnVzaW5lc3MgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbm9kZT8KLQotIyBSZWZyZXNoVURESU5vZGVzQWN0aW9uCi1NU0dfRVJST1JfTk9ERV9EQVRBX1ZBTElEQVRJT05fRkFJTEVEPUlXQUIwMjcyRSAlMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotCi0jIFN1bW1hcmllcwotQUxUX1NVTU1BUllfUVVFUklFUz1TdW1tYXJ5IG9mIFF1ZXJpZXMKLUFMVF9TVU1NQVJZX0JVU0lORVNTRVM9U3VtbWFyeSBvZiBCdXNpbmVzc2VzCi1BTFRfU1VNTUFSWV9TRVJWSUNFUz1TdW1tYXJ5IG9mIFNlcnZpY2VzCi1BTFRfU1VNTUFSWV9TRVJWSUNFX0lOVEVSRkFDRVM9U3VtbWFyeSBvZiBTZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfUVVFUklFUz1RdWVyaWVzCi0KLSMgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uCi1NU0dfUVVFU1RJT05fSVRFTV9WQUxJREFUSU9OX0ZBSUxFRD0lMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgaXQ/Ci0KLSMgRnJhbWUgdGl0bGVzCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSPU5hdmlnYXRvciBDb250YWluZXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSPU5hdmlnYXRvciBUb29sYmFyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVD1OYXZpZ2F0b3IgQ29udGVudAotRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVI9QWN0aW9ucyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSPVByb3BlcnRpZXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVI9UHJvcGVydGllcyBUb29sYmFyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQ9UHJvcGVydGllcyBDb250ZW50Ci1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSPVN0YXR1cyBDb250YWluZXIKLUZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSPVN0YXR1cyBUb29sYmFyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVD1TdGF0dXMgQ29udGVudAotRlJBTUVfVElUTEVfVURESV9QRVJTUEVDVElWRV9DT05URU5UPVVEREkgUGFnZSBDb250ZW50Ci1GUkFNRV9USVRMRV9DQVRFR09SSUVTX1dPUktBUkVBPUNhdGVnb3JpZXMgV29yayBBcmVhCi1GUkFNRV9USVRMRV9DQVRFR09SSUVTX1RPT0xCQVI9Q2F0ZWdvcmllcyBUb29sYmFyCi1GUkFNRV9USVRMRV9DQVRFR09SSUVTX0NPTlRFTlQ9Q2F0ZWdvcmllcyBDb250ZW50Ci1GUkFNRV9USVRMRV9XU0RMX1RPT0xCQVI9V1NETCBCcm93c2VyIFRvb2xiYXIKLUZSQU1FX1RJVExFX1dTRExfQ09OVEVOVD1XU0RMIEJyb3dzZXIgQ29udGVudAotCi0jIEZvcm0gdGl0bGVzCi1GT1JNX1RJVExFX0JVU0lORVNTX0RFVEFJTFM9QnVzaW5lc3MgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRT1CdXNpbmVzcyBQdWJsaXNoIFNlcnZpY2UgRm9ybQotRk9STV9USVRMRV9HRVRfRk9STT1TZWxlY3QgZnJvbSBEaXNjb3ZlcmVkIGFuZCBQdWJsaXNoZWQgT2JqZWN0cyBGb3JtCi1GT1JNX1RJVExFX0lURU1TX1NVTU1BUlk9U3VtbWFyeSBvZiBJdGVtcyBGb3JtCi1GT1JNX1RJVExFX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUz1NYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMgRm9ybQotRk9STV9USVRMRV9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFUz1NYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcyBGb3JtCi1GT1JNX1RJVExFX09QRU5fUkVHSVNUUlk9T3BlbiBSZWdpc3RyeSBGb3JtCi1GT1JNX1RJVExFX1JFR0lTVFJZX0RFVEFJTFM9UmVnaXN0cnkgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1JFR0lTVFJZX1BVQkxJU0g9UmVnaXN0cnkgUHVibGlzaCBGb3JtCi1GT1JNX1RJVExFX1JFR0lTVFJZX0ZJTkQ9UmVnaXN0cnkgRmluZCBGb3JtCi1GT1JNX1RJVExFX1JFU1VMVFM9UmVzdWx0cyBGb3JtCi1GT1JNX1RJVExFX1NFUlZJQ0VfREVUQUlMUz1TZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTPVNlcnZpY2UgSW50ZXJmYWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VTlBVQkxJU0g9VW5wdWJsaXNoIEZvcm0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2RsLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvd3NkbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTIxMzliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2RsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0jIDIwMDcwNTA3ICAgMTg1NjAwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0Ugc3RhdHVzIHBhbmUncyAiaGVhZGVyIiB0d2lzdGllIHNob3VsZCBub3QgYXBwZWFyIGZvciByZXNwb25zZXMgd2l0aG91dCBoZWFkZXJzCi0jIDIwMDgwODI1ICAgMTU4MzY2IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi10aXRsZT1XU0RMCi0KLSMgTm9kZXMKLU5PREVfTkFNRV9XU0RMX01BSU49V1NETCBNYWluCi0KLSMgRnJhbWUgdGl0bGVzCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSPU5hdmlnYXRvciBDb250YWluZXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSPU5hdmlnYXRvciBUb29sYmFyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVD1OYXZpZ2F0b3IgQ29udGVudAotRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVI9QWN0aW9ucyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSPVByb3BlcnRpZXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVI9UHJvcGVydGllcyBUb29sYmFyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQ9UHJvcGVydGllcyBDb250ZW50Ci1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSPVN0YXR1cyBDb250YWluZXIKLUZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSPVN0YXR1cyBUb29sYmFyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVD1TdGF0dXMgQ29udGVudAotRlJBTUVfVElUTEVfV1NETF9QRVJTUEVDVElWRV9DT05URU5UPVdTREwgUGFnZSBDb250ZW50Ci1GUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fVE9PTEJBUj1YU0QgSW5mb3JtYXRpb24gRGlhbG9nIFRvb2xiYXIKLUZSQU1FX1RJVExFX1hTRF9JTkZPUk1BVElPTl9DT05URU5UPVhTRCBJbmZvcm1hdGlvbiBEaWFsb2cgQ29udGVudAotCi0jIE9wZW5XU0RMQWN0aW9uCi1BTFRfT1BFTl9XU0RMPU9wZW4gV1NETAotTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkw9SVdBQjAzNzhFIEVudGVyIGEgdmFsaWQgV1NETCBVUkwuCi1NU0dfRVJST1JfT1BFTl9XU0RMPUlXQUIwMzc5RSBVbmFibGUgdG8gb3BlbiAlMS4KLU1TR19FUlJPUl9YU0RfVkFMSURBVElPTj1JV0FCMDM4MEUgRXJyb3JzIHdlcmUgZW5jb3VudGVyZWQgd2hpbGUgdmFsaWRhdGluZyBYTUwgc2NoZW1hcy4KLU1TR19JTkZPX09QRU5fV1NETF9TVUNDRVNTRlVMPUlXQUIwMzgxSSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLQotIyBXU0RMIEVsZW1lbnQgZGV0YWlscwotQUxUX1dTRExfREVUQUlMUz1XU0RMIERldGFpbHMKLUZPUk1fTEFCRUxfV1NETF9ERVRBSUxTX0RFU0M9U2hvd24gYmVsb3cgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuIENsaWNrIG9uIGEgc2VydmljZSBvciBiaW5kaW5nIHRvIHNlZSBpdHMgZGV0YWlscy4KLQotIyBXU0RMIFNlcnZpY2UgRWxlbWVudCBkZXRhaWxzCi1BTFRfV1NETF9TRVJWSUNFX0RFVEFJTFM9V1NETCBTZXJ2aWNlIERldGFpbHMKLUZPUk1fTEFCRUxfU0VSVklDRV9ERVRBSUxTX0RFU0M9U2hvd24gYmVsb3cgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGlzICZsdDtzZXJ2aWNlJmd0OyBlbGVtZW50LiBDbGljayBvbiBhIGJpbmRpbmcgdG8gc2VlIGl0cyBvcGVyYXRpb25zLgotCi1BTFRfTklMPW5pbD8KLQotIyBXU0RMIEJpbmRpbmcgRWxlbWVudCBkZXRhaWxzCi1BTFRfV1NETF9CSU5ESU5HX0RFVEFJTFM9V1NETCBCaW5kaW5nIERldGFpbHMKLUZPUk1fTEFCRUxfQklORElOR19ERVRBSUxTX0RFU0M9U2hvd24gYmVsb3cgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGlzIDxzdHJvbmc+JTE8L3N0cm9uZz4gICZsdDtiaW5kaW5nJmd0OyBlbGVtZW50LiBDbGljayBvbiBhbiBvcGVyYXRpb24gdG8gZmlsbCBpbiBpdHMgcGFyYW1ldGVycyBhbmQgaW52b2tlIGl0IG9yIHNwZWNpZnkgYWRkaXRpb25hbCBlbmRwb2ludHMuCi0KLSMgSW52b2tlV1NETE9wZXJhdGlvbkFjdGlvbgotQUxUX0lOVk9LRV9XU0RMX09QRVJBVElPTj1JbnZva2UgYSBXU0RMIE9wZXJhdGlvbgotTVNHX0VSUk9SX1VOQUJMRV9UT19DT05ORUNUPUlXQUIwMzgyRSBVbmFibGUgdG8gY29ubmVjdCB0byAlMQotTVNHX0VSUk9SX1ZBTElEQVRJTkdfUEFSQU1FVEVSPUlXQUIwMzgzRSBFcnJvciB2YWxpZGF0aW5nICUxCi0KLSMgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1dTRExfVE9fRkFWT1JJVEVTPUFkZCBXU0RMIFRvIEZhdm9yaXRlcwotTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUz1JV0FCMDM4NEUgJTEgYWxyZWFkeSBleGlzdHMgaW4gZmF2b3JpdGVzLgotTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVM9SVdBQjAzODVFIFVuYWJsZSB0byBhZGQgJTEgdG8gZmF2b3JpdGVzLgotTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMPUlXQUIwMzg2SSAlMSBpcyBhZGRlZCB0byBmYXZvcml0ZXMuCi1NU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUz1GYXZvcml0ZSBhbHJlYWR5IGV4aXN0cy4gIERvIHlvdSB3aXNoIHRvIG92ZXJ3cml0ZT8KLQotIyBSZWZyZXNoV1NETEFjdGlvbgotTVNHX0lORk9fUkVGUkVTSF9XU0RMX1NVQ0NFU1NGVUw9SVdBQjAzODdJICUxIGlzIHJlZnJlc2hlZC4KLU1TR19RVUVTVElPTl9SRU1PVkVfV1NETF9OT0RFPSUxIGlzIG5vIGxvbmdlciByZXNvbHZhYmxlLiAgRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24KLU1TR19JTkZPX1VQREFURV9XU0RMX0JJTkRJTkdfU1VDQ0VTU0ZVTD1JV0FCMDM4OEkgRW5kcG9pbnRzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCi0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfT1BFTl9XU0RMPU9wZW4gV1NETCBGb3JtCi1GT1JNX1RJVExFX1dTRExfREVUQUlMUz1XU0RMIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUz1XU0RMIFNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTRExfQklORElOR19ERVRBSUxTPVdTREwgQmluZGluZyBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfSU5WT0tFX1dTRExfT1BFUkFUSU9OPVdTREwgT3BlcmF0aW9uIEZvcm0KLQotIyBGb3JtIExhYmVscwotRk9STV9MQUJFTF9PUEVOX1dTRExfREVTQz1FbnRlciB0aGUgVVJMIG9mIGEgV1NETCBkb2N1bWVudCBhbmQgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleHBsb3JlLgotRk9STV9MQUJFTF9TRVJWSUNFUz1TZXJ2aWNlcwotRk9STV9MQUJFTF9CSU5ESU5HUz1CaW5kaW5ncwotRk9STV9MQUJFTF9PUEVSQVRJT05TPU9wZXJhdGlvbnMKLUZPUk1fTEFCRUxfQklORElOR19UWVBFPVR5cGUKLUZPUk1fTEFCRUxfQklORElOR19UWVBFX1VOU1VQUE9SVEVEPVVuc3VwcG9ydGVkCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9TT0FQPVNPQVAKLUZPUk1fTEFCRUxfQklORElOR19UWVBFX0hUVFBfR0VUPUhUVFAgR0VUCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9IVFRQX1BPU1Q9SFRUUCBQT1NUCi1GT1JNX0xBQkVMX05BTUU9TmFtZQotRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OPURvY3VtZW50YXRpb24KLUZPUk1fTEFCRUxfRU5EUE9JTlQ9RW5kcG9pbnQKLUZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0M9RW50ZXIgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBXU0RMIG9wZXJhdGlvbiAiJTEiIGFuZCBjbGljayA8c3Ryb25nPkdvPC9TdHJvbmc+IHRvIGludm9rZS4KLUZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0NfTk9fSU5QVVQ9VGhlcmUgYXJlIG5vIGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBXU0RMIG9wZXJhdGlvbiAiJTEiLiBDbGljayA8c3Ryb25nPkdvPC9TdHJvbmc+IHRvIGludm9rZS4KLUZPUk1fTElOS19BREQ9QWRkCi1GT1JNX0xJTktfUkVNT1ZFPVJlbW92ZQotRk9STV9MQUJFTF9WQUxVRVM9VmFsdWVzCi1GT1JNX0xBQkVMX0VOQUJMRV9ESVNBQkxFX0dST1VQPUVuYWJsZS9EaXNhYmxlIGdyb3VwCi1GT1JNX0xBQkVMX1VOSU9OX1RZUEU9VW5pb24gdHlwZXMKLUZPUk1fTEFCRUxfTEFOR1VBR0U9TGFuZ3VhZ2UKLUZPUk1fTEFCRUxfWFNEX0FQUExJQ0FUSU9OX0lORk9STUFUSU9OPUFwcGxpY2F0aW9uIEluZm9ybWF0aW9uCi1GT1JNX0xBQkVMX1hTRF9ET0NVTUVOVEFUSU9OPURvY3VtZW50YXRpb24KLUZPUk1fTEFCRUxfU09BUF9SRVFVRVNUX0VOVkVMT1BFPVNPQVAgUmVxdWVzdCBFbnZlbG9wZToKLUZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9FTlZFTE9QRT1TT0FQIFJlc3BvbnNlIEVudmVsb3BlOgotRk9STV9MQUJFTF9HUk9VUF9BTExfT1JERVJJTkdfTU9WRV9VUD1Nb3ZlIGVsZW1lbnQgdXAKLUZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfRE9XTj1Nb3ZlIGVsZW1lbnQgZG93bgotRk9STV9MQUJFTF9CQVNFX1RZUEU9QmFzZSB0eXBlCi1GT1JNX0xBQkVMX1VOQk9VTkRFRD1VbmJvdW5kZWQKLUZPUk1fTEFCRUxfTEVOR1RIPUxlbmd0aAotRk9STV9MQUJFTF9MRU5HVEhfVkFMVUU9WyUxLi4lMl0KLUZPUk1fTEFCRUxfUEFUVEVSTj1QYXR0ZXJuCi1GT1JNX0xBQkVMX1dISVRFU1BBQ0U9V2hpdGVzcGFjZQotRk9STV9MQUJFTF9SQU5HRV9PRl9WQUxVRVM9UmFuZ2Ugb2YgdmFsdWVzCi1GT1JNX0xBQkVMX01JTl9FWENMVVNJVkU9KCUxLi4KLUZPUk1fTEFCRUxfTUlOX0lOQ0xVU0lWRT1bJTEuLgotRk9STV9MQUJFTF9NQVhfRVhDTFVTSVZFPSUxKQotRk9STV9MQUJFTF9NQVhfSU5DTFVTSVZFPSUxXQotRk9STV9MQUJFTF9UT1RBTF9ESUdJVFM9VG90YWwgZGlnaXRzCi1GT1JNX0xBQkVMX0ZSQUNUSU9OX0RJR0lUUz1GcmFjdGlvbiBkaWdpdHMKLUZPUk1fTEFCRUxfT0NDVVJBTkNFPU9jY3VyYW5jZSBvZgotRk9STV9MQUJFTF9VTklPTl9NRU1CRVJTPVVuaW9uIE1lbWJlcnMKLUZPUk1fTEFCRUxfTElTVF9JVEVNUz1MaXN0IGl0ZW1zCi1GT1JNX0xBQkVMX0VMRU1FTlRTPUVsZW1lbnRzCi1GT1JNX0xBQkVMX1NPQVBfRU5DX0FSUkFZUz1TT0FQIEFycmF5cwotRk9STV9MQUJFTF9DT05URU5UPUNvbnRlbnQKLUZPUk1fTEFCRUxfQVRPTUlDX05BTUVfVFlQRT0lMSAoJTIpOgotRk9STV9MQUJFTF9OVUxMPW51bGwKLUZPUk1fTEFCRUxfR1JPVVBfTlVNQkVSPUdyb3VwICUxCi1GT1JNX0xBQkVMX0NIT0lDRVM9Q2hvaWNlcwotRk9STV9MQUJFTF9OT1RISU5HX1RPX0RJU1BMQVlfSU5fRk9STV9WSUVXPVRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBmb3JtIHZpZXcuICBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBzb3VyY2UgdmlldyBmb3IgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UuCi1GT1JNX0xBQkVMX1NPQVBfUkVTUE9OU0VfRkFJTEVEX1ZBTElEQVRJT05fSU5fRk9STV9WSUVXPVRoZSBTT0FQIHJlc3BvbnNlIGZhaWxlZCBzY2hlbWEgdmFsaWRhdGlvbi4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIHNvdXJjZSB2aWV3IGZvciB0aGUgU09BUCByZXNwb25zZSBpbiBYTUwgZm9ybWF0LgotRk9STV9MQUJFTF9DQU5OT1RfRElTUExBWV9IRUFERVJfSU5fRk9STV9WSUVXPVRoZSBjb250ZW50IG9mIHRoZSBoZWFkZXIgY2Fubm90IGJlIGRpc3BsYXllZCBpbiB0aGUgZm9ybSB2aWV3LiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgc291cmNlIHZpZXcgdG8gZXhhbWluZSB0aGUgcmF3IGNvbnRlbnQuCi1GT1JNX0xBQkVMX0NBTk5PVF9ESVNQTEFZX0JPRFlfSU5fRk9STV9WSUVXPVRoZSBjb250ZW50IG9mIHRoZSBib2R5IGNhbm5vdCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZvcm0gdmlldy4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIHNvdXJjZSB2aWV3IHRvIGV4YW1pbmUgdGhlIHJhdyBjb250ZW50LgotRk9STV9MQUJFTF9CT0RZX0lTX0VNUFRZPVRoZSBib2R5IGlzIGVtcHR5LgotRk9STV9MQUJFTF9FTkRfUE9JTlRTPUVuZHBvaW50cwotRk9STV9MQUJFTF9IRUFERVI9SGVhZGVyCi1GT1JNX0xBQkVMX0JPRFk9Qm9keQotRk9STV9MQUJFTF9NVVNUVU5ERVJTVEFORD1tdXN0VW5kZXJzdGFuZAotRk9STV9MQUJFTF9BQ1RPUj1hY3RvcgotCi0jIFNvdXJjZS9Gb3JtIHZpZXdzCi1GT1JNX0xJTktfRk9STT1Gb3JtCi1BTFRfU1dJVENIX1RPX0ZPUk1fVklFVz1Td2l0Y2ggdG8gZm9ybSB2aWV3Ci1GT1JNX0xJTktfU09VUkNFPVNvdXJjZQotQUxUX1NXSVRDSF9UT19TT1VSQ0VfVklFVz1Td2l0Y2ggdG8gc291cmNlIHZpZXcKLUZPUk1fTEFCRUxfRlJBR01FTlRfU09BUF9WSUVXX0NPTlRFTlQ9U29hcCBCb2R5OgotQlVUVE9OX0xBQkVMX0xPQUQ9TG9hZAotQlVUVE9OX0xBQkVMX1NBVkVfQVM9U2F2ZSBBcy4uLgotTVNHX1FVRVNUSU9OX1NZTkNfVklFV1M9Rm9ybWF0IG9mIHRoZSBzb3VyY2UgY29udGVudCBtYXkgYmUgYWx0ZXJlZCBhcyBhIHJlc3VsdCBvZiBzd2l0Y2hpbmcgdG8gdGhlIGZvcm0gdmlldy4gIERvIHlvdSB3aXNoIHRvIHByb2Nlc3M/Ci1NU0dfUVVFU1RJT05fU1lOQ19WSUVXU19ERVNQSVRFX0lOVkFMSURfU09VUkNFX0NPTlRFTlQ9Q29udGVudCBvZiB0aGUgc291cmNlIHZpZXcgZmFpbGVkIHNjaGVtYSB2YWxpZGF0aW9uLiAgU3luY2hyb25pemUgYW55d2F5cz8gIChDb250ZW50IG9mIHRoZSBzb3VyY2UgdmlldyBtYXkgYmUgbW9kaWZpZWQpCi0KLSMgRm9ybSBjb250cm9sIHRpdGxlcwotRk9STV9DT05UUk9MX1RJVExFX0VOQUJMRV9ESVNBQkxFX0dST1VQPUVuYWJsZS9EaXNhYmxlIGdyb3VwCi1GT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0VMRU1FTlRfSU5fR1JPVVA9U2VsZWN0IGVsZW1lbnQgaW4gZ3JvdXAKLUZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfVU5JT05fVFlQRT1TZWxlY3QgdW5pb24gdHlwZQotRk9STV9DT05UUk9MX1RJVExFX1NPQVBfRklMRT1TT0FQIGRhdGEgZmlsZQotCi0jIFhTRCBJbmZvcm1hdGlvbiBEaWFsb2cKLVRJVExFX1hTRF9JTkZPUk1BVElPTl9ESUFMT0c9WFNEIEluZm9ybWF0aW9uIERpYWxvZwotCi0jIEVycm9yIG1lc3NhZ2VzCi1NU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRD1JV0FCMDM4OUUgU2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtLgotTVNHX0VSUk9SX01BWF9PQ0NVUlNfVklPTEFUSU9OPUlXQUIwMzkwRSBNYXhpbXVtIG9jY3VyYW5jZSBpcyByZWFjaGVkLgotTVNHX0VSUk9SX01JTl9PQ0NVUlNfVklPTEFUSU9OPUlXQUIwMzkxRSBNaW5pbXVtIG9jY3VyYW5jZSBpcyByZWFjaGVkLgotTVNHX0VSUk9SX0NBTk5PVF9NT1ZFX0ZJUlNUX0VMRU1FTlRfVVA9SVdBQjAzOTJFIFNlbGVjdGVkIGVsZW1lbnQgaXMgYWxyZWFkeSB0aGUgZmlyc3QgaW4gdGhlIGdyb3VwLgotTVNHX0VSUk9SX0NBTk5PVF9NT1ZFX0xBU1RfRUxFTUVOVF9ET1dOPUlXQUIwMzkzRSBTZWxlY3RlZCBlbGVtZW50IGlzIGFscmVhZHkgdGhlIGxhc3QgaW4gdGhlIGdyb3VwLgotCi0jIFNPQVAgdHJhbnNwb3J0IG1lc3NhZ2VzCi1NU0dfRVJST1JfTk9fU1VJVEFCTEVfVFJBTlNQT1JUPUZhaWxlZCB0byBpbnZva2Ugb3BlcmF0aW9uLCBhIHN1aXRhYmxlIHRyYW5zcG9ydCBleHRlbnNpb24gd2FzIG5vdCBmb3VuZC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2lsLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvd3NpbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzk4ZmQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2lsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi10aXRsZT1XU0lMCi0KLSMgTmF2aWdhdG9yCi1XU0lMX01BSU5fTk9ERT1XU0lMIE1haW4KLQotIyBGb3JtcwotRk9STV9MQUJFTF9VUkw9VVJMCi1GT1JNX0xBQkVMX0lURU1fTlVNQkVSPUl0ZW0gIwotRk9STV9MQUJFTF9VRERJX0JVU0lORVNTX05BTUU9VURESSBCdXNpbmVzcyBOYW1lCi1GT1JNX0xBQkVMX1VERElfU0VSVklDRV9OQU1FPVVEREkgU2VydmljZSBOYW1lCi1GT1JNX0xBQkVMX0xBTkdVQUdFPUxhbmd1YWdlCi1GT1JNX0xBQkVMX0FCU1RSQUNUPUFic3RyYWN0Ci1GT1JNX0xBQkVMX05BTUU9TmFtZQotRk9STV9MQUJFTF9XU0RMX0JJTkRJTkdTPVdTREwgQmluZGluZ3MKLUZPUk1fTEFCRUxfTkFNRVNQQUNFX1VSST1OYW1lc3BhY2UgVVJJCi1GT1JNX0xBQkVMX0xPQ0FMX05BTUU9TG9jYWwgTmFtZQotRk9STV9MQUJFTF9JTlFVSVJZX0FQST1JbnF1aXJ5IEFQSQotRk9STV9MQUJFTF9TRVJWSUNFX0tFWT1TZXJ2aWNlIEtleQotRk9STV9MQUJFTF9CVVNJTkVTU19LRVk9QnVzaW5lc3MgS2V5Ci1GT1JNX0xBQkVMX0RJU0NPVkVSWV9VUkw9RGlzY292ZXJ5IFVSTAotRk9STV9MQUJFTF9XU0lMPVdTSUwgRGV0YWlscwotRk9STV9MQUJFTF9XU0lMX0xJTktTPVdTSUwgTGlua3MKLUZPUk1fTEFCRUxfV1NETF9TRVJWSUNFPVdTREwgU2VydmljZXMKLUZPUk1fTEFCRUxfVURESV9TRVJWSUNFPVVEREkgU2VydmljZXMKLUZPUk1fTEFCRUxfVURESV9CVVNJTkVTUz1VRERJIEJ1c2luZXNzZXMKLUZPUk1fTEFCRUxfQUREX1RPX05BVklHQVRPUj1BZGQgVG8gTmF2aWdhdG9yCi1GT1JNX0xBQkVMX0FERF9UT19GQVZPUklURVM9QWRkIFRvIEZhdm9yaXRlcwotRk9STV9MQUJFTF9BRERfVE9fVURESV9QRVJTUEVDVElWRT1BZGQgVG8gVURESSBQYWdlCi1GT1JNX0xBQkVMX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCBUbyBXU0RMIFBhZ2UKLUZPUk1fTEFCRUxfUkVGUkVTSD1SZWZyZXNoCi1GT1JNX0xBQkVMX05BPU4vQQotRk9STV9MQUJFTF9VTkFWQUlMQUJMRV9VRERJX1NFUlZJQ0U9U2VydmljZSBVbmF2YWlsYWJsZToKLUZPUk1fTEFCRUxfVU5BVkFJTEFCTEVfVURESV9CVVNJTkVTUz1CdXNpbmVzcyBVbmF2YWlsYWJsZToKLUZPUk1fTEFCRUxfQ0hPT1NFX1dTSUxfSU5TUEVDVElPTl9UWVBFPUNob29zZSB0aGUgdHlwZSBvZiBvYmplY3RzIHRvIGluc3BlY3Q6Ci1NU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRD1JV0FCMDMyOEUgU2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtLgotCi0jIE9wZW5XU0lMQWN0aW9uCi1BTFRfT1BFTl9XU0lMPU9wZW4gV1NJTAotRk9STV9MQUJFTF9PUEVOX1dTSUxfREVTQz1FbnRlciB0aGUgVVJMIG9mIGEgV1NJTCBkb2N1bWVudCBvciBhIEhUTUwgZG9jdW1lbnQgYW5kIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gb3BlbiBpbnNwZWN0LgotV1NJTF9VUkw9VVJMIHRvIGRvY3VtZW50OgotTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9VUkw9SVdBQjAzOTRFICUxIGlzIG5vdCBhIHZhbGlkIFdTSUwgVVJMIG9yIEhUTUwgVVJMLgotTVNHX0VSUk9SX1dTSUxfQUxSRUFEWV9PUEVORUQ9SVdBQjAzMjlFICUxIGlzIGFscmVhZHkgb3BlbmVkIGluIHRoZSBuYXZpZ2F0b3IuCi1NU0dfSU5GT19PUEVOX1dTSUxfU1VDQ0VTU0ZVTD1JV0FCMDMzMEkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQuCi0KLSMgT3BlbldTSUxMaW5rQWN0aW9uCi1BTFRfT1BFTl9XU0lMX0xJTks9T3BlbiBXU0lMIExpbmsKLU1TR19FUlJPUl9XU0lMX0xJTktfQUxSRUFEWV9PUEVORUQ9SVdBQjAzMzFFICUxIGlzIGFscmVhZHkgb3BlbmVkIGluIHRoZSBuYXZpZ2F0b3IKLU1TR19JTkZPX09QRU5fV1NJTF9MSU5LX1NVQ0NFU1NGVUw9SVdBQjAzMzJJICUxIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkLgotCi0jIFdzaWxEZXRhaWxzQWN0aW9uCi1BTFRfV1NJTF9ERVRBSUxTPVdTSUwgRGV0YWlscwotCi0jIFdzaWxTZXJ2aWNlRGV0YWlsc0FjdGlvbgotQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTPVdTSUwgU2VydmljZSBEZXRhaWxzCi0KLSMgVWRkaUxpbmtEZXRhaWxzQWN0aW9uCi1BTFRfVURESV9MSU5LX0RFVEFJTFM9VURESSBCdXNpbmVzcyBEZXRhaWxzCi0KLSMgV3NpbExpbmtEZXRhaWxzQWN0aW9uCi1BTFRfV1NJTF9MSU5LX0RFVEFJTFM9V1NJTCBMaW5rIERldGFpbHMKLQotIyBMaXN0V1NETFNlcnZpY2VzQWN0aW9uCi1BTFRfTElTVF9XU0RMX1NFUlZJQ0VTPUxpc3QgQWxsIFdTREwgU2VydmljZXMKLUZPUk1fTEFCRUxfTElTVF9XU0RMX1NFUlZJQ0VTX0RFU0M9U2VsZWN0IGEgc2V0IG9mIFdTREwgc2VydmljZXMgYW5kIGNsaWNrIDxzdHJvbmc+QWRkIHRvIEZhdm9yaXRlczwvc3Ryb25nPiB0byBhZGQgdGhlc2UgdG8gdGhlIGxpc3Qgb2YgZmF2b3JpdGVzLgotCi0jIExpc3RVRERJU2VydmljZXNBY3Rpb24KLUFMVF9MSVNUX1VERElfU0VSVklDRVM9TGlzdCBBbGwgVURESSBTZXJ2aWNlcwotRk9STV9MQUJFTF9MSVNUX1VERElfU0VSVklDRVNfREVTQz1TZWxlY3QgYSBzZXQgb2YgVURESSBzZXJ2aWNlcyBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgdG8gRmF2b3JpdGVzPC9zdHJvbmc+IHRvIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmYXZvcml0ZXMuIENsaWNrIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBhZGQgdGhlIHNlbGVjdGlvbnMgdG8gdGhlIFVEREkgUGFnZS4gQ2xpY2sgPHN0cm9uZz5SZWZyZXNoPC9zdHJvbmc+IHRvIHJlZnJlc2ggdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdFVERElCdXNpbmVzc2VzQWN0aW9uCi1BTFRfTElTVF9VRERJX0xJTktTPUxpc3QgQWxsIFVEREkgQnVzaW5lc3NlcwotRk9STV9MQUJFTF9MSVNUX1VERElfQlVTSU5FU1NFU19ERVNDPVNlbGVjdCBhIHNldCBvZiBVRERJIGJ1c2luZXNzZXMgYW5kIGNsaWNrIDxzdHJvbmc+QWRkIHRvIEZhdm9yaXRlczwvc3Ryb25nPiB0byBhZGQgdGhlc2UgdG8gdGhlIGxpc3Qgb2YgZmF2b3JpdGVzLiBDbGljayA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gYWRkIHRoZXNlIHRvIHRoZSBVRERJIFBhZ2UuIENsaWNrIDxzdHJvbmc+UmVmcmVzaDwvc3Ryb25nPiB0byByZWZyZXNoIHRoZSBzZWxlY3Rpb25zLgotCi0jIExpc3RXU0lMTGlua3NBY3Rpb24KLUFMVF9MSVNUX1dTSUxfTElOS1M9TGlzdCBBbGwgV1NJTCBMaW5rcwotRk9STV9MQUJFTF9MSVNUX1dTSUxfTElOS1M9U2VsZWN0IGEgc2V0IG9mIFdTSUwgbGlua3MgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIE5hdmlnYXRvcjwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIG5hdmlnYXRvci4KLQotIyBDbGVhcldTSUxBY3Rpb24KLUFMVF9DTEVBUl9XU0lMPUNsZWFyIFdTSUwKLQotIyBSZWZyZXNoQWN0aW9uCi1BTFRfUkVGUkVTSF9XU0lMPVJlZnJlc2ggV1NJTAotQUxUX1JFRlJFU0hfVURESV9CVVNJTkVTUz1SZWZyZXNoIFVEREkgQnVzaW5lc3MKLUFMVF9SRUZSRVNIX1VERElfU0VSVklDRT1SZWZyZXNoIFVEREkgU2VydmljZQotTVNHX0VSUk9SX1dTSUxfTk9UX0ZPVU5EPUlXQUIwMzMzRSBXU0lMICUxIGNvdWxkIG5vdCBiZSBsb2FkZWQuCi1NU0dfRVJST1JfQlVTSU5FU1NfTk9UX0ZPVU5EPUlXQUIwMzM0RSBCdXNpbmVzcyAlMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX0ZPVU5EPUlXQUIwMzM1RSBTZXJ2aWNlICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfSU5GT19SRUZSRVNIX1NVQ0NFU1NGVUw9SVdBQjAzMzZJICUxIGlzIHJlZnJlc2hlZC4KLU1TR19DT05GSVJNX1JFTU9WRV9OT0RFPSUxIGlzIG5vIGxvbmdlciByZXNvbHZhYmxlLiAgRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfQlVTSU5FU1NfVE9fVURESV9QRVJTUEVDVElWRT1BZGQgQnVzaW5lc3MgVG8gVURESSBQYWdlCi1BTFRfQUREX1NFUlZJQ0VfVE9fVURESV9QRVJTUEVDVElWRT1BZGQgU2VydmljZSBUbyBVRERJIFBhZ2UKLU1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUw9SVdBQjAzMzdJICUxIGlzIGFkZGVkIHRvIFVEREkgUGFnZS4KLU1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRT1JV0FCMDMzOEUgVW5hYmxlIHRvIGFkZCAlMSB0byBVRERJIFBhZ2UuCi1NU0dfRVJST1JfQlVTSU5FU1NfTk9UX0ZPVU5EPUlXQUIwMzM5RSBCdXNpbmVzcyAlMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX0ZPVU5EPUlXQUIwMzQwRSBTZXJ2aWNlICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi0KLSMgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uCi1BTFRfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRT1BZGQgV1NETCBUbyBXU0RMIFBhZ2UKLU1TR19JTkZPX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDM5NUkgJTEgaXMgYWRkZWQgdG8gV1NETCBQYWdlLgotTVNHX0VSUk9SX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkU9SVdBQjAzOTZFICUxIGNvdWxkIG5vdCBiZSBsb2FkZWQuCi0KLSMgQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1dTSUxfVE9fRkFWT1JJVEVTPUFkZCBXU0lMIFRvIEZhdm9yaXRlcwotTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVM9SVdBQjAzNDFFIFVuYWJsZSB0byBhZGQgJTEgdG8gZmF2b3JpdGVzLgotTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUz1JV0FCMDM0MkUgJTEgYWxyZWFkeSBleGlzdHMgaW4gZmF2b3JpdGVzLgotTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMPUlXQUIwMzQzSSAlMSBpcyBhZGRlZCB0byBmYXZvcml0ZXMuCi1NU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUz1GYXZvcml0ZSBhbHJlYWR5IGV4aXN0cy4gIERvIHlvdSB3aXNoIHRvIG92ZXJ3cml0ZT8KLQotIyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1dTRExfU0VSVklDRV9UT19GQVZPUklURVM9QWRkIFdTREwgVG8gRmF2b3JpdGVzCi0KLSMgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9VRERJX0JVU0lORVNTX1RPX0ZBVk9SSVRFUz1BZGQgVURESSBCdXNpbmVzcyBUbyBGYXZvcml0ZXMKLQotIyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24KLUFMVF9BRERfU0VSVklDRV9UT19GQVZPUklURVM9QWRkIFVEREkgU2VydmljZSBUbyBGYXZvcml0ZXMKLQotIyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoCi1BVExfSU1QT1JUX1dTSUxfVE9fV09SS0JFTkNIPUltcG9ydCBXU0lMIFRvIFdvcmtiZW5jaAotRk9STV9MQUJFTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0hfREVTQz1TZWxlY3QgYSB3b3JrYmVuY2ggcHJvamVjdCB0byBzYXZlIHRoZSBXU0lMIGZpbGUgaW50by4gWW91IG1heSBhbHNvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgV1NJTCBmaWxlLgotCi0jIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbgotQUxUX1dTSUxfSU1QT1JUX1RPX0ZTPUltcG9ydCBXU0lMIFRvIEZpbGUgU3lzdGVtCi1BTFRfV1NETF9JTVBPUlRfVE9fRlM9SW1wb3J0IFdTREwgVG8gRmlsZSBTeXN0ZW0KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVI9TmF2aWdhdG9yIENvbnRhaW5lcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVI9TmF2aWdhdG9yIFRvb2xiYXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UPU5hdmlnYXRvciBDb250ZW50Ci1GUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUj1BY3Rpb25zIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVI9UHJvcGVydGllcyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVD1Qcm9wZXJ0aWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUj1Qcm9wZXJ0aWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVI9U3RhdHVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQ9U3RhdHVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSPVN0YXR1cyBUb29sYmFyCi0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfT1BFTl9XU0lMPU9wZW4gV1NJTCBGb3JtCi1GT1JNX1RJVExFX1VERElfQlVTSU5FU1NfREVUQUlMUz1VRERJIEJ1c2luZXNzIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VRERJX1NFUlZJQ0VfREVUQUlMUz1VRERJIFNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTRExfU0VSVklDRV9ERVRBSUxTPVdTREwgU2VydmljZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NJTF9ERVRBSUxTPVdTSUwgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTSUxfTElOS19ERVRBSUxTPVdTSUwgTGluayBEZXRhaWxzIEZvcm0KLQotIyBWaWV3IHRpdGxlcwotVklFV19USVRMRV9VRERJX0JVU0lORVNTRVM9VURESSBCdXNpbmVzc2VzIFZpZXcKLVZJRVdfVElUTEVfVURESV9TRVJWSUNFUz1VRERJIFNlcnZpY2VzIFZpZXcKLVZJRVdfVElUTEVfV1NETF9TRVJWSUNFUz1XU0RMIFNlcnZpY2VzIFZpZXcKLVZJRVdfVElUTEVfV1NJTF9MSU5LUz1XU0lMIExpbmtzIFZpZXcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvdmlld3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZnJhZ21lbnQvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZnJhZ21lbnQvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvdmlld3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvdmlld3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL3ZpZXdzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGI1ODI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXIKLXdzZXhwbG9yZXJzcmMuemlwCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MGIwNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25lbmdpbmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkVuZ2luZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5BY3Rpb25EYXRhUGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuU2NlbmFyaW9EZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuVHJhbnNhY3Rpb25EZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuQWN0aW9uRGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1TdHJpbmcgbW9kZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX01PREUpOwotU3RyaW5nIHNjZW5hcmlvID0gbnVsbDsKLXRyeQotewotICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgcGFyc2VyLnBhcnNlUmVxdWVzdChyZXF1ZXN0LCBIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gIHNjZW5hcmlvID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQUNUSU9OX0VOR0lORV9TQ0VOQVJJTyk7Ci19Ci1jYXRjaCAoVGhyb3dhYmxlIHQpCi17Ci19Ci1BY3Rpb25FbmdpbmUgYWN0aW9uRW5naW5lID0gY29udHJvbGxlci5nZXRBY3Rpb25FbmdpbmUoKTsKLWlmIChtb2RlICE9IG51bGwpCi17Ci0gIGFjdGlvbkVuZ2luZS5zZXRNb2RlKEFjdGlvbkVuZ2luZS5NT0RFX0RJU0FCTEVEKTsKLSAgdHJ5Ci0gIHsKLSAgICBhY3Rpb25FbmdpbmUuc2V0TW9kZShCeXRlLnBhcnNlQnl0ZShtb2RlKSk7Ci0gIH0KLSAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gIHsKLSAgfQotfQotaWYgKHNjZW5hcmlvICE9IG51bGwgJiYgc2NlbmFyaW8ubGVuZ3RoKCkgPiAwKQotewotICBTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yID0gbnVsbDsKLSAgdHJ5Ci0gIHsKLSAgICBBY3Rpb25EYXRhUGFyc2VyIHBhcnNlciA9IG5ldyBBY3Rpb25EYXRhUGFyc2VyKCk7Ci0gICAgc2NlbmFyaW9EZXNjcmlwdG9yID0gcGFyc2VyLnBhcnNlU2NlbmFyaW8oWE1MVXRpbHMuc3RyaW5nVG9FbGVtZW50KHNjZW5hcmlvKSk7Ci0gICAgYWN0aW9uRW5naW5lLmV4ZWN1dGVTY2VuYXJpbyhzY2VuYXJpb0Rlc2NyaXB0b3IpOwotICB9Ci0gIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgewotICB9Ci0gIGlmIChzY2VuYXJpb0Rlc2NyaXB0b3IgIT0gbnVsbCkKLSAgewotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSBzY2VuYXJpb0Rlc2NyaXB0b3IuZ2V0VHJhbnNhY3Rpb25EZXNjcmlwdG9ycygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvcnMgPSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzW2ldLmdldEFjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICAlPgotICAgICAgICA8IS0tCi0gICAgICAgIDwlPWFjdGlvbkRlc2NyaXB0b3JzW2pdLmdldElkKCklPgotICAgICAgICA8JT1hY3Rpb25EZXNjcmlwdG9yc1tqXS5nZXRTdGF0dXNJZCgpJT4KLSAgICAgICAgPCUKLSAgICAgICAgTGlzdCBzdGF0dXMgPSBhY3Rpb25EZXNjcmlwdG9yc1tqXS5nZXRTdGF0dXMoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHN0YXR1cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8JT1pdC5uZXh0KCkudG9TdHJpbmcoKSU+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgICAtLT4KLSAgICAgICAgPCUKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZV9jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25lbmdpbmVfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViY2E2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZV9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkVuZ2luZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5uZXQuKiIgJT4KLTwlCi1TdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci1IdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLUNvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotQWN0aW9uRW5naW5lIGFjdGlvbkVuZ2luZSA9IGNvbnRyb2xsZXIuZ2V0QWN0aW9uRW5naW5lKCk7Ci1TdHJpbmcgbW9kZVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX01PREUpOwotaWYgKG1vZGVTdHJpbmcgIT0gbnVsbCAmJiBtb2RlU3RyaW5nLmxlbmd0aCgpID4gMCkKLXsKLSAgdHJ5Ci0gIHsKLSAgICBieXRlIG1vZGUgPSBCeXRlLnBhcnNlQnl0ZShtb2RlU3RyaW5nKTsKLSAgICBhY3Rpb25FbmdpbmUuc2V0TW9kZShtb2RlKTsKLSAgfQotICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gIHsKLSAgfQotfQotU3RyaW5nIHBsYXlGaWxlSWQgPSAicGxheUZpbGVJZCI7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX0FDVElPTl9SRUNPUkRFUiIpJT48L3RpdGxlPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBzZXRNb2RlKG1vZGUpCi0gICAgewotICAgICAgPCUKLSAgICAgIFN0cmluZ0J1ZmZlciBmb3JtQWN0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcihyZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImFjdGlvbmVuZ2luZV9jb250YWluZXIuanNwPyIpKSk7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKCI9Iik7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZChzZXNzaW9uSWQpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoIiYiKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKEFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX01PREUpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoIj0iKTsKLSAgICAgICU+Ci0gICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgICAgZm9ybS5hY3Rpb24gPSAnPCU9Zm9ybUFjdGlvbi50b1N0cmluZygpJT4nICsgbW9kZTsKLSAgICAgIGZvcm0udGFyZ2V0ID0gIl9zZWxmIjsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGxheSgpCi0gICAgewotICAgICAgdmFyIHBsYXlGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjwlPXBsYXlGaWxlSWQlPiIpOwotICAgICAgaWYgKHBsYXlGaWxlLnZhbHVlICE9IG51bGwgJiYgcGxheUZpbGUudmFsdWUubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICAgICAgZm9ybS5hY3Rpb24gPSAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2V4cGxvcmVyLmpzcCIpKSU+JzsKLSAgICAgICAgZm9ybS50YXJnZXQgPSAiPCU9RnJhbWVOYW1lcy5XSU5ET1dfTkFNRV9XU0VYUExPUkVSX0pTUCU+IjsKLSAgICAgICAgZm9ybS5lbmN0eXBlID0gIm11bHRpcGFydC9mb3JtLWRhdGEiOwotICAgICAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQotICAgICAgICBmb3JtLmVuY29kaW5nID0gIm11bHRpcGFydC9mb3JtLWRhdGEiOwotICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICBzZXRNb2RlKCc8JT1BY3Rpb25FbmdpbmUuTU9ERV9QTEFZJT4nKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgYWxlcnQoJzwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUExBWV9GSUxFIiklPicpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNhdmUoKQotICAgIHsKLSAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgICBmb3JtLmFjdGlvbiA9ICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImFjdGlvbnMvU2F2ZUFjdGlvbkVuZ2luZVNjZW5hcmlvLmpzcCIpKSU+JzsKLSAgICAgIGZvcm0udGFyZ2V0ID0gIl9zZWxmIjsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgfQotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDxmb3JtIG1ldGhvZD0icG9zdCI+Ci0gICAgPCUKLSAgICBTdHJpbmcgbGFiZWxNb2RlUGxheSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1BMQVkiKTsKLSAgICBTdHJpbmcgbGFiZWxNb2RlU3RvcCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1NUT1AiKTsKLSAgICBTdHJpbmcgbGFiZWxNb2RlUmVjb3JkID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfUkVDT1JEIik7Ci0gICAgU3RyaW5nIGxhYmVsU2F2ZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TQVZFIik7Ci0gICAgYnl0ZSBtb2RlID0gYWN0aW9uRW5naW5lLmdldE1vZGUoKTsKLSAgICBTdHJpbmcgaW1nUGxheSA9IChtb2RlID09IEFjdGlvbkVuZ2luZS5NT0RFX1BMQVkpID8gImltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmIiA6ICJpbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZiI7Ci0gICAgU3RyaW5nIGltZ1N0b3AgPSAobW9kZSA9PSBBY3Rpb25FbmdpbmUuTU9ERV9TVE9QKSA/ICJpbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZiIgOiAiaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYiOwotICAgIFN0cmluZyBpbWdSZWNvcmQgPSAobW9kZSA9PSBBY3Rpb25FbmdpbmUuTU9ERV9SRUNPUkQpID8gImltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYiIDogImltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYiOwotICAgIFN0cmluZyBpbWdTYXZlID0gImltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmIjsKLSAgICAlPgotICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnBsYXkoKSI+Ci0gICAgICAgICAgICA8aW1nIGNsYXNzPSJub3JtYWwiIGJvcmRlcj0wIGFsdD0iPCU9bGFiZWxNb2RlUGxheSU+IiB0aXRsZT0iPCU9bGFiZWxNb2RlUGxheSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChpbWdQbGF5KSklPiI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9QTEFZIiklPgotICAgICAgICAgIDwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9kZSgnPCU9U3RyaW5nLnZhbHVlT2YoQWN0aW9uRW5naW5lLk1PREVfU1RPUCklPicpIj4KLSAgICAgICAgICAgIDxpbWcgY2xhc3M9Im5vcm1hbCIgYm9yZGVyPTAgYWx0PSI8JT1sYWJlbE1vZGVTdG9wJT4iIHRpdGxlPSI8JT1sYWJlbE1vZGVTdG9wJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGltZ1N0b3ApKSU+Ij4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1NUT1AiKSU+Ci0gICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXRNb2RlKCc8JT1TdHJpbmcudmFsdWVPZihBY3Rpb25FbmdpbmUuTU9ERV9SRUNPUkQpJT4nKSI+Ci0gICAgICAgICAgICA8aW1nIGNsYXNzPSJub3JtYWwiIGJvcmRlcj0wIGFsdD0iPCU9bGFiZWxNb2RlUmVjb3JkJT4iIHRpdGxlPSI8JT1sYWJlbE1vZGVSZWNvcmQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaW1nUmVjb3JkKSklPiI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9SRUNPUkQiKSU+Ci0gICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzYXZlKCkiPgotICAgICAgICAgICAgPGltZyBjbGFzcz0ibm9ybWFsIiBib3JkZXI9MCBhbHQ9IjwlPWxhYmVsU2F2ZSU+IiB0aXRsZT0iPCU9bGFiZWxTYXZlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGltZ1NhdmUpKSU+Ij4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TQVZFIiklPgotICAgICAgICAgIDwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BMQVlfRklMRSIpJT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9IjwlPXBsYXlGaWxlSWQlPiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfU0NFTkFSSU8lPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODRmYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IChJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbilzZXNzaW9uLmdldEF0dHJpYnV0ZShBY3Rpb25JbnB1dHMuSU1QT1JUX0FDVElPTik7Ci0gICBpZiAoYWN0aW9uLmlzVGFyZ2V0RmlsZVJlc291cmNlUmVhZE9ubHkoKSkKLSAgIHsKLSU+Ci0gIHZhciBwcm9jZWVkID0gdHJ1ZTsKLTwlICAgCi0gICAgIGlmICghYWN0aW9uLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSkKLSAgICAgewotJT4KLSAgcHJvY2VlZCA9IGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShhY3Rpb24uZ2V0V2ViU2VydmljZVBsdWdpbkZpbGVNZXNzYWdlKCJNU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCIpKSU+Iik7Ci08JSAgICAgCi0gICAgIH0KLSU+Ci0gIGlmIChwcm9jZWVkKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFZhbGlkYXRlRWRpdEFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlICAgICAKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFdyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uLmdldEFjdGlvbkxpbmsoKSkpJT4iOwotPCUKLSAgIH0KLSU+ICAgICAKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPiAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2NDg5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7ICAgIAotPCUKLSAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotICAgIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGVudFBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSAgIFN0cmluZyBwcm9wZXJ0aWVzQ29udGFpbmVyVmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICB7Ci0lPgotICAgIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlICAgCi0gICB9Ci0gICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4KLSAgICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgfQotJT4KLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzY2I1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2xlYXJWaWV3RWxlbWVudEFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08aGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgewotJT4KLSAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgfQotJT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhmYjdlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotICAgYm9vbGVhbiB3cml0dGVuID0gZmFsc2U7Ci0KLSAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIC8vIHdyaXRlIHRvIGZpbGUgc3lzdGVtCi0gICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLSAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwiYXR0YWNobWVudDtmaWxlbmFtZT0iK2FjdGlvbi5nZXREZWZhdWx0RmlsZU5hbWUoKSk7Ci0gICAgIGFjdGlvbi53cml0ZShyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0gICAgIHdyaXR0ZW4gPSB0cnVlOwotICAgfQotCi0gICBpZiAoIXdyaXR0ZW4pCi0gICB7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgICAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICAgICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAgICBpZiAoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKSAhPSBudWxsKQotICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICA8JT1hY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICB9Ci0lPiAgICAgIAotPC9ib2R5PgotPC9odG1sPgotPCUKLSAgIH0KLSU+ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTM1Y2RmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICAvL0xvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICBpZiAoIWlucHV0c1ZhbGlkKQotICAgewotICAgICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgIHsKLSU+Ci0gIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoQWN0aW9uSW5wdXRzLklNUE9SVF9BQ1RJT04sYWN0aW9uKTsgICAKLSAgICAgaWYgKGFjdGlvbi5maWxlRXhpc3RzKCkpCi0gICAgIHsKLSU+Ci0gIHZhciBwcm9jZWVkID0gdHJ1ZTsKLTwlICAgICAgICAKLSAgICAgICBpZiAoIWFjdGlvbi5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKQotICAgICAgIHsKLSU+Ci0gIHByb2NlZWQgPSBjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYWN0aW9uLmdldFdlYlNlcnZpY2VQbHVnaW5GaWxlTWVzc2FnZSgiTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEIikpJT4iKTsKLTwlCi0gICAgICAgfQotJT4KLSAgaWYgKHByb2NlZWQpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotPC9zY3JpcHQ+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZmIwZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgLy9Mb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKCFhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4gICAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0lPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiZDJiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24gYWN0aW9uID0gbmV3IFJldHJpZXZlSGlzdG9yeUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBCcmVhZENydW1iIGIgPSBhY3Rpb24uZ2V0QnJlYWRDcnVtYigpOwotICAgaWYgKGIgIT0gbnVsbCkKLSAgIHsKLSAgICAgaW50IGJyZWFkQ3J1bWJQZXJzcGVjdGl2ZUlkID0gYi5nZXRQZXJzcGVjdGl2ZUlkKCk7Ci0gICAgIGlmIChicmVhZENydW1iUGVyc3BlY3RpdmVJZCAhPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBlcnNwZWN0aXZlSWQoKSkKLSAgICAgewotICAgICAgIC8vIFN3aXRjaCB0aGUgcGVyc3BlY3RpdmUuCi0lPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhicmVhZENydW1iUGVyc3BlY3RpdmVJZCx0cnVlKSkpJT4iOwotPCUKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICAvLyBKdW1wIHRvIHRoZSBwYWdlIHJldHJpZXZlZCBmcm9tIGhpc3RvcnkuCi0lPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYi5nZXRVUkwoKSkpJT4iOwotPCUKLSAgICAgfQotICAgfQotJT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NhdmVBY3Rpb25FbmdpbmVTY2VuYXJpby5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2F2ZUFjdGlvbkVuZ2luZVNjZW5hcmlvLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAwYjlkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2F2ZUFjdGlvbkVuZ2luZVNjZW5hcmlvLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlNjZW5hcmlvRGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5BY3Rpb25EYXRhUGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby5QcmludFdyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCIlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotcmVzcG9uc2Uuc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwiYXR0YWNobWVudDtmaWxlbmFtZT1zY2VuYXJpby54bWwiKTsKLVNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBjb250cm9sbGVyLmdldEFjdGlvbkVuZ2luZSgpLmdldFNjZW5hcmlvKCk7Ci1BY3Rpb25EYXRhUGFyc2VyIHBhcnNlciA9IG5ldyBBY3Rpb25EYXRhUGFyc2VyKCk7Ci1FbGVtZW50IHNjZW5hcmlvID0gcGFyc2VyLnRvRWxlbWVudChzY2VuYXJpb0Rlc2NyaXB0b3IpOwotaWYgKHNjZW5hcmlvICE9IG51bGwpCi17Ci0gIHRyeQotICB7Ci0gICAgU3RyaW5nIHNjZW5hcmlvU3RyaW5nID0gWE1MVXRpbHMuc2VyaWFsaXplKHNjZW5hcmlvLCBmYWxzZSk7Ci0gICAgaWYgKHNjZW5hcmlvU3RyaW5nICE9IG51bGwpCi0gICAgewotICAgICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOwotICAgICAgcHcucHJpbnRsbihzY2VuYXJpb1N0cmluZyk7Ci0gICAgICBwdy5jbG9zZSgpOwotICAgIH0KLSAgfQotICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gIHsKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRkMTE3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBVVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKCFhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIGlmIChhY3Rpb24uaXNTdGFsZUJyZWFkQ3J1bWIoKSkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBSZXJ1biB0aGUgaGlzdG9yeSBhY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBpdGVtLgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0TmV4dEhpc3RvcnlBY3Rpb25MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgewotICAgICBTdHJpbmcgdHJlZUNvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgICBpZiAoYWN0aW9uLnJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoKCkpCi0gICAgIHsKLSAgICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIC8vIFVwZGF0ZSB0aGUgdHJlZXZpZXcuCi0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKSkpJT4iOyAgCi08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGFjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgIE5vZGUgcHJldmlvdXNTZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRQcmV2aW91c1NlbGVjdGVkTm9kZSgpOwotICAgICAgIGludCBzZWxlY3RlZE5vZGVJZCA9IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFVwZGF0ZSB0aGUgcGVyc3BlY3RpdmUuCi08JQotICAgICAgICAgaWYgKHByZXZpb3VzU2VsZWN0ZWROb2RlICE9IG51bGwgJiYgcHJldmlvdXNTZWxlY3RlZE5vZGUuaXNWaXNpYmxlKCkpCi0gICAgICAgICB7Ci0lPgotICA8JT10cmVlQ29udGVudFZhciU+LmFsdGVySW1hZ2UoJzwlPXByZXZpb3VzU2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHByZXZpb3VzU2VsZWN0ZWROb2RlLmdldENsb3NlZEltYWdlUGF0aCgpKSklPicpOwotPCUKLSAgICAgICAgIH0KLSAgICAgICAgIFN0cmluZyBzZWxlY3RlZE5vZGVBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uc2VsZWN0Tm9kZSgnPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkTm9kZS5nZXRPcGVuSW1hZ2VQYXRoKCkpKSU+Jyk7Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24uaGFzaCA9ICcjPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JzsKLTwlCi0gICAgICAgfQotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgICAgICB9Ci0lPgotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0lPgotPC9ib2R5PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWYxOWUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBVVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKCFhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIGlmIChhY3Rpb24uaXNTdGFsZUJyZWFkQ3J1bWIoKSkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBSZXJ1biB0aGUgaGlzdG9yeSBhY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBpdGVtLgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0TmV4dEhpc3RvcnlBY3Rpb25MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgewotICAgICBpZiAoYWN0aW9uLnJlcXVpcmVzU3RhdHVzVXBkYXRlKCkpCi0gICAgIHsKLSAgICAgICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFVwZGF0ZSB0aGUgc3RhdHVzIGNvbnRlbnQgd2l0aCBhbnkgbWVzc2FnZXMgYXJpc2luZyBmcm9tIHRoaXMgYWN0aW9uLgotICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4gIAotPCUgICAgCi0gICAgICAgfQotICAgICB9IAotICAgICAgICAKLSAgICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICAgIFN0cmluZyBwcm9wZXJ0aWVzQ29udGFpbmVyVmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICAgaWYgKGFjdGlvbi5yZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIC8vIFJlbG9hZCB0aGUgbmF2aWdhdG9yIHRyZWUgdmlldyB0byBzaG93IHRoZSBzdHJ1Y3R1cmFsIGNoYW5nZS4KLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgfQotPCUKLSAgICAgICB9Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgICAgICB9Ci0lPgotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UgaWYgKGFjdGlvbi5yZXF1aXJlc05vZGVTZWxlY3Rpb24oKSkKLSAgICAgewotICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gYWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgTm9kZSBwcmV2aW91c1NlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgaW50IHNlbGVjdGVkTm9kZUlkID0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICAvLyBVcGRhdGUgdGhlIG5hdmlnYXRvciB0cmVlIHRvIHNob3cgdGhlIHNlbGVjdGlvbi4KLTwlCi0gICAgICAgICBpZiAocHJldmlvdXNTZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgICAgICAgIHsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uYWx0ZXJJbWFnZSgnPCU9cHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkpKSU+Jyk7Ci08JQotICAgICAgICAgfQotICAgICAgICAgU3RyaW5nIHNlbGVjdGVkTm9kZUFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotJT4KLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5zZWxlY3ROb2RlKCc8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbi5oYXNoID0gJyM8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nOwotPCUKLSAgICAgICB9Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JQotICAgICAgIH0KLSU+Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZSBpZiAoYWN0aW9uLnJlcXVpcmVzVmlld1NlbGVjdGlvbigpKQotICAgICB7Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFVwZGF0ZSB0aGUgcHJvcGVydGllcyBjb250YWluZXIgdG8gc2hvdyB0aGUgdmlldy4KLSAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBTdHJpbmcgcHJvcGVydGllc0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKTsKLSAgICAgICBUb29sIHRvb2wgPSBhY3Rpb24uZ2V0U2VsZWN0ZWRWaWV3VG9vbCgpOwotICAgICAgIGlmICh0b29sID09IG51bGwpCi0gICAgICAgICB0b29sID0gYWN0aW9uLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgIGlmICh0b29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICB7Ci0gICAgICAgICBpZiAocHJvcGVydGllc0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gVXBkYXRlIHRoZSBwcm9wZXJ0aWVzIGNvbnRlbnQgd2l0aCB0aGUgdG9vbCdzIGZvcm0uCi0gIDwlPXByb3BlcnRpZXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgICAgfQotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotICAgICAgICAgaWYgKCFhY3Rpb24uaXNIaXN0b3J5QWN0aW9uKCkpCi0gICAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJ1biB0aGUgdG9vbCdzIGFjdGlvbiBvbmx5IGlmIGl0IGlzIG5vdCBmcm9tIHRoZSBoaXN0b3J5LgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0b29sLmdldEFjdGlvbkxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgICAgfQotICAgICAgICAgZWxzZQotICAgICAgICAgewotICAgICAgICAgICBpZiAocHJvcGVydGllc0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICA8JT1wcm9wZXJ0aWVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgIH0KLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWY4ZWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiICU+Ci0gIDxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCIvd3NleHBsb3Jlci9jc3MvdHJlZXZpZXcuY3NzIiklPiI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgiL3dzZXhwbG9yZXIvY3NzL3dpbmRvd3MuY3NzIiklPiI+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjZW50ZXI+Ci08JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TRVNTSU9OX1RJTUVEX09VVCIpJT4KLTxicj4KLTwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JFU1RBUlRfU0VTU0lPTiIpJT4KLTwvY2VudGVyPgotPGJyPgotPC9ib2R5PgotPC9odG1sPiAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2hvd1BlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3MWQ0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2hvd1BlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nQnVmZmVyIGZyYW1lc2V0c0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBmcmFtZXNldHNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0RnJhbWVzZXRzRmlsZSgpKTsKLSAgIAotICAgU3RyaW5nQnVmZmVyIGZyYW1lc2V0c0Zvcm0gPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBmcmFtZXNldHNGb3JtLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKSk7Ci0gICAKLSAgIGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkOwotICAgYm9vbGVhbiBpc0hpc3Rvcnk7Ci0gICB0cnkKLSAgIHsKLSAgICAgdGFyZ2V0UGVyc3BlY3RpdmVJZCA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKSk7Ci0gICAgIGlzSGlzdG9yeSA9ICgiMSIuZXF1YWxzKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpKSk7Ci0gICB9Ci0gICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICB7Ci0gICAgIHRhcmdldFBlcnNwZWN0aXZlSWQgPSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgICAgaXNIaXN0b3J5ID0gZmFsc2U7Ci0gICB9Ci0gICAKLSAgIGlmIChjb250cm9sbGVyLmlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmsoKSkKLSAgIHsKLSAgICAgY29udHJvbGxlci5lbmFibGVQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuayhmYWxzZSk7Ci0gICAgIGNvbnRyb2xsZXIuYWRkVG9IaXN0b3J5KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUlkKCksU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0UGVyc3BlY3RpdmVJZCx0cnVlKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1mcmFtZXNldHNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUFjdGlvbi5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFN3aXRjaFBlcnNwZWN0aXZlRm9ybUFjdGlvbkxpbmsodGFyZ2V0UGVyc3BlY3RpdmVJZCxpc0hpc3RvcnkpKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1mcmFtZXNldHNGb3JtLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi0gICB9Ci0lPiAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMxOWJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPiAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5pc1N0YWxlQnJlYWRDcnVtYigpKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcnVuIHRoZSBoaXN0b3J5IGFjdGlvbiB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGl0ZW0uCi0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXROZXh0SGlzdG9yeUFjdGlvbkxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBVcGRhdGUgdGhlIHBlcnNwZWN0aXZlLgotICAgIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGVudFBhZ2UoKSkpJT4iOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBpZiAoYWN0aW9uLnJlcXVpcmVzTm9kZVNlbGVjdGlvbigpKQotICAgICB7Ci0gICAgICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgY29udGFpbmVyLgotICAgIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLSAgfQotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGIwNGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IChJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbilzZXNzaW9uLmdldEF0dHJpYnV0ZShBY3Rpb25JbnB1dHMuSU1QT1JUX0FDVElPTik7Ci0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi52YWxpZGF0ZUVkaXQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKDwlPXJlc3VsdCU+KQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFdyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uLmdldEFjdGlvbkxpbmsoKSkpJT4iOwotICBlbHNlCi0gIHsKLTwlICAKLSAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPiAgICAKLSAgICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgfQotJT4KLSAgfQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+IApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjlhMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSAoSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoQWN0aW9uSW5wdXRzLklNUE9SVF9BQ1RJT04pOwotICAgYWN0aW9uLnJ1bigpOwotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+ICAKLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfYnJvd3Nlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2Jyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBjM2EyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfYnJvd3Nlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5uZXQuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT4KLSAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX0NBTEVOREFSX0JST1dTRVIiKSU+Ci0gIDwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIGxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJjYWxlbmRhcl90b29sYmFyLmpzcD8iKTsKLSAgIGxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotJT4gICAKLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuQ0FMRU5EQVJfVE9PTEJBUiU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQUxFTkRBUl9UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQobGluay50b1N0cmluZygpKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPCUKLSAgIGxpbmsuc2V0TGVuZ3RoKDApOwotICAgbGluay5hcHBlbmQoImNhbGVuZGFyX2NvbnRlbnQuanNwPyIpOwotICAgbGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICBsaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKSk7Ci0lPiAgICAgCi0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLkNBTEVOREFSX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FMRU5EQVJfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhlNDZlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIGludCBjYWxlbmRhclR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBTEVOREFSX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvY2FsZW5kYXIuY3NzIikpJT4iPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgZGF5cyA9IG5ldyBBcnJheSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9TVU5EQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfTU9OREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1RVRVNEQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfV0VETkVTREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1RIVVJTREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX0ZSSURBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9TQVRVUkRBWSIpKSU+Iik7Ci0gIHZhciBtb250aHMgPSBuZXcgQXJyYXkoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSkFOVUFSWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GRUJSVUFSWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVJDSCIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BUFJJTCIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSlVORSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9KVUxZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FVR1VTVCIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVBURU1CRVIiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT0NUT0JFUiIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OT1ZFTUJFUiIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERUNFTUJFUiIpKSU+Iik7Ci0gIHZhciBlbmdNb250aHMgPSBuZXcgQXJyYXkoIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIik7Ci0gIHZhciBjdXJyZW50RGF0ZTsKLSAgdmFyIGNhbGVuZGFyQm9keVNldCA9IGZhbHNlOwotICB2YXIgY2FsZW5kYXJCb2R5OwotICB2YXIgc2F2ZWRZZWFyVGV4dFZhbHVlID0gIiI7Ci0KLTwlCi0gICAvLyBSZWd1bGFyIGV4cHJlc3Npb25zCi0gICAvLyB0aW1lICAgICAgIC0gSEg6TU06U1NbLlNTU10KLSAgIC8vIHllYXIgICAgICAgLSBZKgotICAgLy8gZGF0ZSAgICAgICAtIFlZWVkrLU1NLURECi0gICAvLyBkYXRlVGltZSAgIC0gWVlZWSstTU0tRERUSEg6TU06U1NbLlNTU11aCi0gICAvLyBnWWVhck1vbnRoIC0gWVlZWSstTU0gCi0gICAvLyBnRGF5ICAgICAgIC0gLS0tREQKLSAgIC8vIGdNb250aERheSAgLSAtLU1NLURECi0lPgotICB2YXIgdGltZVJlZ0V4cCA9IC9eKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoXC5cZHszfSk/JC87Ci0gIHZhciB5ZWFyUmVnRXhwID0gL14oXGQqKSQvOwotICB2YXIgZGF0ZVJlZ0V4cCA9IC9eKFxkezQsfSktKFxkezJ9KS0oXGR7Mn0pJC87Ci0gIHZhciBkYXRlVGltZVJlZ0V4cCA9IC9eKFxkezQsfSktKFxkezJ9KS0oXGR7Mn0pVChcZHsyfSk6KFxkezJ9KTooXGR7Mn0pKFwuXGR7M30pP1okLzsKLSAgdmFyIGdZZWFyTW9udGhSZWdFeHAgPSAvXihcZHs0LH0pLShcZHsyfSkkLzsKLSAgdmFyIGdEYXlSZWdFeHAgPSAvXi17M30oXGR7Mn0pJC87Ci0gIHZhciBnTW9udGhEYXlSZWdFeHAgPSAvXi17Mn0oXGR7Mn0pLShcZHsyfSkkLzsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZVllYXJTdHJpbmcoeWVhclN0cmluZykKLSAgewotICAgIHJldHVybiB5ZWFyUmVnRXhwLnRlc3QoeWVhclN0cmluZyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRUaW1lUGFyYW1ldGVycyh0aW1lU3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIHRpbWVSZWdFeHAuZXhlYyh0aW1lU3RyaW5nKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERhdGVQYXJhbWV0ZXJzKGRhdGVTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZGF0ZVJlZ0V4cC5leGVjKGRhdGVTdHJpbmcpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0RGF0ZVRpbWVQYXJhbWV0ZXJzKGRhdGVUaW1lU3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIGRhdGVUaW1lUmVnRXhwLmV4ZWMoZGF0ZVRpbWVTdHJpbmcpOwotICB9Ci0gIAotICBmdW5jdGlvbiBnZXRHWWVhck1vbnRoUGFyYW1ldGVycyhnWWVhck1vbnRoU3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIGdZZWFyTW9udGhSZWdFeHAuZXhlYyhnWWVhck1vbnRoU3RyaW5nKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZ2V0R0RheVBhcmFtZXRlcnMoZ0RheVN0cmluZykKLSAgewotICAgIHJldHVybiBnRGF5UmVnRXhwLmV4ZWMoZ0RheVN0cmluZyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGdldEdNb250aERheVBhcmFtZXRlcnMoZ01vbnRoRGF5U3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIGdNb250aERheVJlZ0V4cC5leGVjKGdNb250aERheVN0cmluZyk7Ci0gIH0KLSAgCi08JQotICAgLy8gSEg6TU06U1NbLlNTU10KLSU+Ci0gIGZ1bmN0aW9uIHNlcmlhbGl6ZVRpbWUoaG91cnMsbWludXRlcyxzZWNvbmRzLG1pbGxpc2Vjb25kcykKLSAgewotICAgIHZhciB0aW1lU3RyaW5nID0gIiI7Ci0gICAgaWYgKGhvdXJzIDwgMTApCi0gICAgICB0aW1lU3RyaW5nICs9ICIwIjsKLSAgICB0aW1lU3RyaW5nICs9IGhvdXJzICsgIjoiOwotICAgIGlmIChtaW51dGVzIDwgMTApCi0gICAgICB0aW1lU3RyaW5nICs9ICIwIjsKLSAgICB0aW1lU3RyaW5nICs9IG1pbnV0ZXMgKyAiOiI7Ci0gICAgaWYgKHNlY29uZHMgPCAxMCkKLSAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgIHRpbWVTdHJpbmcgKz0gc2Vjb25kczsKLSAgICBpZiAobWlsbGlzZWNvbmRzID4gMCkKLSAgICB7Ci0gICAgICB0aW1lU3RyaW5nICs9ICIuIjsKLSAgICAgIGlmIChtaWxsaXNlY29uZHMgPCAxMDApCi0gICAgICB7Ci0gICAgICAgIGlmIChtaWxsaXNlY29uZHMgPCAxMCkKLSAgICAgICAgICB0aW1lU3RyaW5nICs9ICIwMCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0aW1lU3RyaW5nICs9ICIwIjsKLSAgICAgIH0KLSAgICAgIHRpbWVTdHJpbmcgKz0gbWlsbGlzZWNvbmRzOwotICAgIH0KLSAgICByZXR1cm4gdGltZVN0cmluZzsKLSAgfQotCi08JQotICAgLy8gWVlZWSstTU0KLSU+ICAgCi0gIGZ1bmN0aW9uIHNlcmlhbGl6ZUdZZWFyTW9udGgoZnVsbFllYXIsbW9udGgpCi0gIHsKLSAgICB2YXIgZ1llYXJNb250aFN0cmluZyA9ICIiOwotICAgIGlmIChmdWxsWWVhciA8IDEwMDApCi0gICAgewotICAgICAgaWYgKGZ1bGxZZWFyIDwgMTAwKQotICAgICAgewotICAgICAgICBpZiAoZnVsbFllYXIgPCAxMCkKLSAgICAgICAgICBnWWVhck1vbnRoU3RyaW5nICs9ICIwMDAiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZ1llYXJNb250aFN0cmluZyArPSAiMDAiOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBnWWVhck1vbnRoU3RyaW5nICs9ICIwIjsKLSAgICB9Ci0gICAgZ1llYXJNb250aFN0cmluZyArPSBmdWxsWWVhcisiLSI7Ci0gICAgaWYgKG1vbnRoIDwgMTApCi0gICAgICBnWWVhck1vbnRoU3RyaW5nICs9ICIwIjsKLSAgICBnWWVhck1vbnRoU3RyaW5nICs9IG1vbnRoOwotICAgIHJldHVybiBnWWVhck1vbnRoU3RyaW5nOyAgICAKLSAgfQotICAKLTwlCi0gICAvLyBZWVlZKy1NTS1ERAotJT4KLSAgZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShmdWxsWWVhcixtb250aCxkYXRlKQotICB7Ci0gICAgdmFyIGRhdGVTdHJpbmcgPSBzZXJpYWxpemVHWWVhck1vbnRoKGZ1bGxZZWFyLG1vbnRoKSArICItIjsKLSAgICBpZiAoZGF0ZSA8IDEwKQotICAgICAgZGF0ZVN0cmluZyArPSAiMCI7Ci0gICAgZGF0ZVN0cmluZyArPSBkYXRlOwotICAgIHJldHVybiBkYXRlU3RyaW5nOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXJpYWxpemVHRGF5KGRhdGUpCi0gIHsKLSAgICB2YXIgZ0RheVN0cmluZyA9ICItLS0iOwotICAgIGlmIChkYXRlIDwgMTApCi0gICAgICBnRGF5U3RyaW5nICs9ICIwIjsKLSAgICBnRGF5U3RyaW5nICs9IGRhdGU7Ci0gICAgcmV0dXJuIGdEYXlTdHJpbmc7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNlcmlhbGl6ZUdNb250aERheShtb250aCxkYXRlKQotICB7Ci0gICAgdmFyIGdNb250aERheVN0cmluZyA9ICItLSI7Ci0gICAgaWYgKG1vbnRoIDwgMTApCi0gICAgICBnTW9udGhEYXlTdHJpbmcgKz0gIjAiOwotICAgIGdNb250aERheVN0cmluZyArPSBtb250aCsiLSI7Ci0gICAgaWYgKGRhdGUgPCAxMCkKLSAgICAgIGdNb250aERheVN0cmluZyArPSAiMCI7Ci0gICAgZ01vbnRoRGF5U3RyaW5nICs9IGRhdGU7Ci0gICAgcmV0dXJuIGdNb250aERheVN0cmluZzsKLSAgfSAgICAKLQotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdHRGF5UGFyYW1ldGVycyhnRGF5UGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGdEYXlQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgICBkYXRlT2JqLnNldERhdGUoZ0RheVBhcmFtZXRlcnNbMV0pOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdHTW9udGhEYXlQYXJhbWV0ZXJzKGdNb250aERheVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmIChnTW9udGhEYXlQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgZGF0ZU9iai5zZXRNb250aChnTW9udGhEYXlQYXJhbWV0ZXJzWzFdLTEpOwotICAgICAgZGF0ZU9iai5zZXREYXRlKGdNb250aERheVBhcmFtZXRlcnNbMl0pOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nR1llYXJNb250aFBhcmFtZXRlcnMoZ1llYXJNb250aFBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmIChnWWVhck1vbnRoUGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIoZ1llYXJNb250aFBhcmFtZXRlcnNbMV0pOwotICAgICAgZGF0ZU9iai5zZXRNb250aChnWWVhck1vbnRoUGFyYW1ldGVyc1syXS0xKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0RhdGVQYXJhbWV0ZXJzKGRhdGVQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZGF0ZVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXREYXRlVXNpbmdHWWVhck1vbnRoUGFyYW1ldGVycyhkYXRlUGFyYW1ldGVycyxkYXRlT2JqKTsKLSAgICAgIGRhdGVPYmouc2V0RGF0ZShkYXRlUGFyYW1ldGVyc1szXSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nRGF0ZVRpbWVQYXJhbWV0ZXJzKGRhdGVUaW1lUGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGRhdGVUaW1lUGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIHNldERhdGVVc2luZ0RhdGVQYXJhbWV0ZXJzKGRhdGVUaW1lUGFyYW1ldGVycyxkYXRlT2JqKTsKLSAgICAgIGRhdGVPYmouc2V0VVRDSG91cnMoZGF0ZVRpbWVQYXJhbWV0ZXJzWzRdKTsKLSAgICAgIGRhdGVPYmouc2V0VVRDTWludXRlcyhkYXRlVGltZVBhcmFtZXRlcnNbNV0pOwotICAgICAgZGF0ZU9iai5zZXRVVENTZWNvbmRzKGRhdGVUaW1lUGFyYW1ldGVyc1s2XSk7Ci0gICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZVRpbWVQYXJhbWV0ZXJzWzddOwotICAgICAgaWYgKG1pbGxpc2Vjb25kcy5sZW5ndGggPiAwKQotPCUKLSAgIC8vIEVsaW1pbmF0ZSB0aGUgZGVjaW1hbCBwb2ludAotJT4KLSAgICAgICAgZGF0ZU9iai5zZXRVVENNaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzLnN1YnN0cigxKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGRhdGVPYmouc2V0VVRDTWlsbGlzZWNvbmRzKDApOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ1RpbWVQYXJhbWV0ZXJzKHRpbWVQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAodGltZVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkYXRlT2JqLnNldEhvdXJzKHRpbWVQYXJhbWV0ZXJzWzFdKTsKLSAgICAgIGRhdGVPYmouc2V0TWludXRlcyh0aW1lUGFyYW1ldGVyc1syXSk7Ci0gICAgICBkYXRlT2JqLnNldFNlY29uZHModGltZVBhcmFtZXRlcnNbM10pOwotICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRpbWVQYXJhbWV0ZXJzWzRdOwotICAgICAgaWYgKG1pbGxpc2Vjb25kcy5sZW5ndGggPiAwKQotPCUKLSAgIC8vIEVsaW1pbmF0ZSB0aGUgZGVjaW1hbCBwb2ludAotJT4KLSAgICAgICAgZGF0ZU9iai5zZXRNaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzLnN1YnN0cigxKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGRhdGVPYmouc2V0TWlsbGlzZWNvbmRzKDApOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGluaXQoKQotICB7Ci0gICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwotPCUKLSAgIHN3aXRjaCAoY2FsZW5kYXJUeXBlKQotICAgewotICAgICBjYXNlIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEU6Ci0lPgotICAgIHNldERhdGVVc2luZ0RhdGVQYXJhbWV0ZXJzKGdldERhdGVQYXJhbWV0ZXJzKHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUpLGQpOwotPCUKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRToKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nRGF0ZVRpbWVQYXJhbWV0ZXJzKGdldERhdGVUaW1lUGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlCi0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USDoKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nR1llYXJNb250aFBhcmFtZXRlcnMoZ2V0R1llYXJNb250aFBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JSAgICAgCi0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR0RBWToKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nR0RheVBhcmFtZXRlcnMoZ2V0R0RheVBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JSAgIAotICAgICBjYXNlIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dNT05USERBWToKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nR01vbnRoRGF5UGFyYW1ldGVycyhnZXRHTW9udGhEYXlQYXJhbWV0ZXJzKHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUpLGQpOwotPCUgICAgICAgCi0gICAgIGRlZmF1bHQ6Ci0gICAgICAgYnJlYWs7Ci0gICB9Ci0lPgotICAgIGdlbmVyYXRlQ2FsZW5kYXIoZCk7Ci0gICAgdmFyIG1vbnRoU2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpOwotICAgIGZvciAodmFyIGk9MDtpPG1vbnRocy5sZW5ndGg7aSsrKQotICAgICAgbW9udGhTZWxlY3Rvci5vcHRpb25zW2ldID0gbmV3IE9wdGlvbihtb250aHNbaV0saSk7Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGluaXRDYWxlbmRhckhlYWRlcih0YWJsZSkKLSAgewotICAgIGNhbGVuZGFyQm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRCT0RZIik7Ci0gICAgdmFyIGhlYWRlclJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgZm9yICh2YXIgaT0wO2k8ZGF5cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOwotICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRheXNbaV0pKTsKLSAgICAgIGhlYWRlci5jbGFzc05hbWU9ImhlYWRlcmNvbG9yIjsKLSAgICAgIGhlYWRlclJvdy5hcHBlbmRDaGlsZChoZWFkZXIpOwotICAgIH0KLSAgICBjYWxlbmRhckJvZHkuYXBwZW5kQ2hpbGQoaGVhZGVyUm93KTsKLSAgICB0YWJsZS5hcHBlbmRDaGlsZChjYWxlbmRhckJvZHkpOwotICAgIGNhbGVuZGFyQm9keVNldCA9IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBnZW5lcmF0ZUNhbGVuZGFyKGRhdGUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FsZW5kYXIiKTsKLSAgICB2YXIgZGF0ZURhdGUgPSBkYXRlLmdldERhdGUoKTsKLSAgICB2YXIgZGF0ZU1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwotICAgIHZhciBkYXRlRnVsbFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7Ci0gICAgdmFyIGRhdGVJdGVyYXRvciA9IG5ldyBEYXRlKCk7Ci0gICAgZGF0ZUl0ZXJhdG9yLnNldFRpbWUoRGF0ZS5wYXJzZShlbmdNb250aHNbZGF0ZU1vbnRoXSsiIDEsICIrZGF0ZUZ1bGxZZWFyKSk7Ci0gICAgdmFyIHN0YXJ0aW5nRGF0ZSA9IGRhdGVJdGVyYXRvci5nZXREYXRlKCk7IC8vIDEsMiwzLi4uCi0gICAgdmFyIHN0YXJ0aW5nRGF5ID0gZGF0ZUl0ZXJhdG9yLmdldERheSgpOyAvLyBTdW4sTW9uLFR1ZXMuLi4KLSAgICBjbGVhckNhbGVuZGFyKCk7Ci0gICAgZm9yICh2YXIgcm93cz0wO3Jvd3M8Njtyb3dzKyspCi0gICAgewotICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgICBmb3IgKHZhciBjb2x1bW5zPTA7Y29sdW1uczxkYXlzLmxlbmd0aDtjb2x1bW5zKyspCi0gICAgICB7Ci0gICAgICAgIHZhciBjb2x1bW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICB2YXIgZGF0ZUl0ZXJhdG9yRGF0ZSA9IGRhdGVJdGVyYXRvci5nZXREYXRlKCk7Ci0gICAgICAgIHZhciBkYXRlSXRlcmF0b3JNb250aCA9IGRhdGVJdGVyYXRvci5nZXRNb250aCgpOwotICAgICAgICB2YXIgZGF0ZUl0ZXJhdG9yRnVsbFllYXIgPSBkYXRlSXRlcmF0b3IuZ2V0RnVsbFllYXIoKTsKLSAgICAgICAgY29sdW1uLndpZHRoID0gMjQ7Ci0gICAgICAgIGNvbHVtbi5oZWlnaHQgPSAyNDsKLSAgICAgICAgY29sdW1uLmFsaWduID0gImNlbnRlciI7Ci0gICAgICAgIGNvbHVtbi52YWxpZ24gPSAiY2VudGVyIjsKLSAgICAgICAgY29sdW1uLmNsYXNzTmFtZSA9ICJjYWxlbmRhcnRhYmxlY2VsbHMiOwotICAgICAgICBpZiAoKGRhdGVJdGVyYXRvckRhdGUgPT0gc3RhcnRpbmdEYXRlICYmIGNvbHVtbnMgPCBzdGFydGluZ0RheSkgfHwgKGRhdGVJdGVyYXRvck1vbnRoICE9IGRhdGVNb250aCkpCi0gICAgICAgICAgY29sdW1uLmlubmVySFRNTCA9ICImbmJzcDsiOwotICAgICAgICBlbHNlIGlmIChkYXRlSXRlcmF0b3JNb250aCA9PSBkYXRlTW9udGgpCi0gICAgICAgIHsKLSAgICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICAgICAgICBzd2l0Y2ggKDwlPWNhbGVuZGFyVHlwZSU+KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURSU+OgotICAgICAgICAgICAgICBsaW5rLmhyZWYgPSAiamF2YXNjcmlwdDp0cmFuc2ZlckRhdGUoIitkYXRlSXRlcmF0b3JEYXRlKyIpIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyRGF0ZVRpbWUoIitkYXRlSXRlcmF0b3JEYXRlKyIpIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEglPjoKLSAgICAgICAgICAgICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6dHJhbnNmZXJHWWVhck1vbnRoKCkiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR0RBWSU+OgotICAgICAgICAgICAgICBsaW5rLmhyZWYgPSAiamF2YXNjcmlwdDp0cmFuc2ZlckdEYXkoIitkYXRlSXRlcmF0b3JEYXRlKyIpIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dNT05USERBWSU+OgotICAgICAgICAgICAgICBsaW5rLmhyZWYgPSAiamF2YXNjcmlwdDp0cmFuc2ZlckdNb250aERheSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRlSXRlcmF0b3JEYXRlKSk7Ci0gICAgICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGxpbmspOwotICAgICAgICAgIGlmIChkYXRlSXRlcmF0b3JEYXRlID09IGRhdGVEYXRlICYmIGRhdGVJdGVyYXRvckZ1bGxZZWFyID09IGRhdGVGdWxsWWVhcikKLSAgICAgICAgICAgIGNvbHVtbi5jbGFzc05hbWUgPSAidG9kYXl0YWJsZWNlbGwiOwotICAgICAgICAgIGRhdGVJdGVyYXRvckRhdGUrKzsKLSAgICAgICAgICBkYXRlSXRlcmF0b3Iuc2V0VGltZShEYXRlLnBhcnNlKGVuZ01vbnRoc1tkYXRlSXRlcmF0b3JNb250aF0rIiAiK2RhdGVJdGVyYXRvckRhdGUrIiwgIitkYXRlSXRlcmF0b3IuZ2V0RnVsbFllYXIoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJvdy5hcHBlbmRDaGlsZChjb2x1bW4pOwotICAgICAgfQotICAgICAgY2FsZW5kYXJCb2R5LmFwcGVuZENoaWxkKHJvdyk7Ci0gICAgfQotICAgIHZhciBtb250aFNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxtb250aFNlbGVjdG9yLm9wdGlvbnMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAobW9udGhTZWxlY3Rvci5vcHRpb25zW2ldLnZhbHVlID09IGRhdGVNb250aCkKLSAgICAgIHsKLSAgICAgICAgbW9udGhTZWxlY3Rvci5zZWxlY3RlZEluZGV4ID0gaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHZhciB5ZWFyVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpOwotICAgIHllYXJUZXh0LnZhbHVlID0gZGF0ZUZ1bGxZZWFyOwotICAgIHNhdmVkWWVhclRleHRWYWx1ZSA9IHllYXJUZXh0LnZhbHVlOwotPCUKLSAgIGlmIChjYWxlbmRhclR5cGUgPT0gQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUpCi0gICB7Ci0lPgotICAgIHZhciB0aW1lVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aW1lVGV4dCIpOwotICAgIHRpbWVUZXh0LnZhbHVlID0gc2VyaWFsaXplVGltZShkYXRlLmdldEhvdXJzKCksZGF0ZS5nZXRNaW51dGVzKCksZGF0ZS5nZXRTZWNvbmRzKCksZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7Ci08JQotICAgfQotJT4KLSAgICBjdXJyZW50RGF0ZSA9IGRhdGU7Ci0gIH0KLQotICBmdW5jdGlvbiBjbGVhckNhbGVuZGFyKCkKLSAgewotICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRhciIpOwotICAgIGlmICghY2FsZW5kYXJCb2R5U2V0KQotICAgICAgaW5pdENhbGVuZGFySGVhZGVyKHRhYmxlKTsKLSAgICBmb3IgKHZhciBpPTE7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdGFibGUuZGVsZXRlUm93KGkpOwotICAgICAgaS0tOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0ZUNhbGVuZGFyKG5ld01vbnRoLG5ld0Z1bGxZZWFyKQotICB7Ci0gICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwotICAgIGlmIChuZXdNb250aCA+IG1vbnRocy5sZW5ndGgpCi0gICAgewotICAgICAgbmV3RnVsbFllYXIrKzsKLSAgICAgIG5ld01vbnRoID0gMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmV3TW9udGggPCAwKQotICAgIHsKLSAgICAgIG5ld0Z1bGxZZWFyLS07Ci0gICAgICBuZXdNb250aCA9IG1vbnRocy5sZW5ndGgtMTsKLSAgICB9Ci0gICAgZC5zZXRNb250aChuZXdNb250aCk7Ci0gICAgZC5zZXRGdWxsWWVhcihuZXdGdWxsWWVhcik7Ci08JQotICAgaWYgKGNhbGVuZGFyVHlwZSA9PSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSkKLSAgIHsKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nVGltZVBhcmFtZXRlcnMoZ2V0VGltZVBhcmFtZXRlcnMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRpbWVUZXh0IikudmFsdWUpLGQpOwotPCUKLSAgIH0KLSU+Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGp1bXBUb1ByZXZpb3VzWWVhcigpCi0gIHsKLSAgICB1cGRhdGVDYWxlbmRhcihjdXJyZW50RGF0ZS5nZXRNb250aCgpLGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCktMSkKLSAgfQotCi0gIGZ1bmN0aW9uIGp1bXBUb1ByZXZpb3VzTW9udGgoKQotICB7Ci0gICAgdXBkYXRlQ2FsZW5kYXIoY3VycmVudERhdGUuZ2V0TW9udGgoKS0xLGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvTmV4dE1vbnRoKCkKLSAgewotICAgIHVwZGF0ZUNhbGVuZGFyKGN1cnJlbnREYXRlLmdldE1vbnRoKCkrMSxjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGp1bXBUb05leHRZZWFyKCkKLSAgewotICAgIHVwZGF0ZUNhbGVuZGFyKGN1cnJlbnREYXRlLmdldE1vbnRoKCksY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSsxKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGp1bXBUb1RvZGF5KCkKLSAgewotICAgIGdlbmVyYXRlQ2FsZW5kYXIobmV3IERhdGUoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXROZXdEYXRlKCkKLSAgewotICAgIHZhciBtb250aFNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKTsKLSAgICB2YXIgbmV3TW9udGggPSBtb250aFNlbGVjdG9yLm9wdGlvbnNbbW9udGhTZWxlY3Rvci5zZWxlY3RlZEluZGV4XS52YWx1ZTsKLSAgICB2YXIgbmV3RnVsbFllYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKS52YWx1ZTsKLTwlCi0gICAvLyBZWVlZKwotJT4KLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci0gICAgaWYgKHZhbGlkYXRlWWVhclN0cmluZyhuZXdGdWxsWWVhcikpCi0gICAgewotICAgICAgLy8gVGhlIHllYXIgc3RyaW5nIGNvbnRhaW5zIG9ubHkgZGlnaXRzIGFuZCBpcyBoZW5jZSBhIHZhbGlkIHllYXIuCi0gICAgICBkLnNldEZ1bGxZZWFyKG5ld0Z1bGxZZWFyKTsKLSAgICAgIGQuc2V0TW9udGgobmV3TW9udGgpOwotICAgIH0KLSAgICBnZW5lcmF0ZUNhbGVuZGFyKGQpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlWWVhclRleHRLZXlVcEV2ZW50KCkKLSAgewotICAgIHZhciBjdXJyZW50WWVhclRleHRWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotICAgIGlmIChjdXJyZW50WWVhclRleHRWYWx1ZSA9PSBzYXZlZFllYXJUZXh0VmFsdWUpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2V0TmV3RGF0ZSgpOwotICB9Ci0KLTwlCi0gICAvLyBZWVlZKy1NTS1ERAotJT4KLSAgZnVuY3Rpb24gdHJhbnNmZXJEYXRlKGRhdGUpCi0gIHsKLSAgICB2YXIgZnVsbFllYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKS52YWx1ZTsKLSAgICB2YXIgbW9udGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpLnNlbGVjdGVkSW5kZXgrMTsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplRGF0ZShmdWxsWWVhcixtb250aCxkYXRlKTsKLSAgICB0b3Aub3BlbmVyLmNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLQotPCUKLSAgIC8vIFlZWVkrLU1NLUREVEhIOk1NOlNTWy5TU1NdWgotJT4KLSAgZnVuY3Rpb24gdHJhbnNmZXJEYXRlVGltZShkYXRlKQotICB7Ci0gICAgdmFyIGZ1bGxZZWFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci0gICAgdmFyIG1vbnRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKS5zZWxlY3RlZEluZGV4KzE7Ci0gICAgdmFyIHNlcmlhbGl6ZWREYXRlID0gc2VyaWFsaXplRGF0ZShmdWxsWWVhcixtb250aCxkYXRlKTsKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci0gICAgc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZ2V0RGF0ZVBhcmFtZXRlcnMoc2VyaWFsaXplZERhdGUpLGQpOwotICAgIHZhciB0aW1lVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGltZVRleHQiKS52YWx1ZTsKLSAgICB2YXIgdGltZVBhcmFtZXRlcnMgPSBnZXRUaW1lUGFyYW1ldGVycyh0aW1lVmFsdWUpOwotICAgIGlmICh0aW1lUGFyYW1ldGVycyA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmICghY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVElNRV9GT1JNQVQiKSklPiIpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHNldERhdGVVc2luZ1RpbWVQYXJhbWV0ZXJzKHRpbWVQYXJhbWV0ZXJzLGQpOwotICAgIHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUgPSBzZXJpYWxpemVkRGF0ZSArICJUIiArIHNlcmlhbGl6ZVRpbWUoZC5nZXRVVENIb3VycygpLGQuZ2V0VVRDTWludXRlcygpLGQuZ2V0VVRDU2Vjb25kcygpLGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpICsgIloiOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfQotICAKLTwlCi0gICAvLyBZWVlZKy1NTQotJT4KLSAgZnVuY3Rpb24gdHJhbnNmZXJHWWVhck1vbnRoKCkKLSAgewotICAgIHZhciBmdWxsWWVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotICAgIHZhciBtb250aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIikuc2VsZWN0ZWRJbmRleCsxOwotICAgIHZhciBzZXJpYWxpemVkR1llYXJNb250aCA9IHNlcmlhbGl6ZUdZZWFyTW9udGgoZnVsbFllYXIsbW9udGgpOwotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLSAgICBzZXREYXRlVXNpbmdHWWVhck1vbnRoUGFyYW1ldGVycyhnZXRHWWVhck1vbnRoUGFyYW1ldGVycyhzZXJpYWxpemVkR1llYXJNb250aCksZCk7Ci0gICAgdG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSA9IHNlcmlhbGl6ZWRHWWVhck1vbnRoOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfSAgICAgCi0gIAotPCUKLSAgIC8vIC0tLURECi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckdEYXkoZGF0ZSkgICAgIAotICB7Ci0gICAgdG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSA9IHNlcmlhbGl6ZUdEYXkoZGF0ZSk7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci08JQotICAgLy8gLS1NTS1ERAotJT4gIAotICBmdW5jdGlvbiB0cmFuc2ZlckdNb250aERheShkYXRlKQotICB7Ci0gICAgdmFyIG1vbnRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKS5zZWxlY3RlZEluZGV4KzE7Ci0gICAgdG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSA9IHNlcmlhbGl6ZUdNb250aERheShtb250aCxkYXRlKTsKLSAgICB0b3Aub3BlbmVyLmNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibW9udGhTZWxlY3RvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PTlRIIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ5ZWFyVGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1lFQVIiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9Im1vbnRoU2VsZWN0b3IiIG9uQ2hhbmdlPSJzZXROZXdEYXRlKCkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ieWVhclRleHQiIHNpemU9NiBvbmtleXVwPSJoYW5kbGVZZWFyVGV4dEtleVVwRXZlbnQoKSIgY2xhc3M9InRhYmxldGV4dGVudGVyIj4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgPHRhYmxlIGlkPSJjYWxlbmRhciIgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0zIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci08JQotICAgaWYgKGNhbGVuZGFyVHlwZSA9PSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSkKLSAgIHsKLSU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgPHRhYmxlIGJvcmRlcj0wPgotICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idGltZVRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9USU1FIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiB3aWR0aD0iODAlIj4KLSAgICAgICAgICAgICAgPGlucHV0IGlkPSJ0aW1lVGV4dCIgdHlwZT0idGV4dCIgY2xhc3M9InRhYmxldGV4dGVudGVyIiBzaXplPTEyIG1heGxlbmd0aD0xMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLTwlCi0gICB9Ci0lPgotICAgICAgPHRyPgotICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgIDx0YWJsZSBib3JkZXI9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvUHJldmlvdXNZZWFyKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9QUkVWSU9VU19ZRUFSIiklPiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUFJFVklPVVNfWUVBUiIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb1ByZXZpb3VzTW9udGgoKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1BSRVZJT1VTX01PTlRIIiklPiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUFJFVklPVVNfTU9OVEgiKSU+PC9hPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpqdW1wVG9Ub2RheSgpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVE9EQVkiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19UT0RBWSIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb05leHRNb250aCgpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkVYVF9NT05USCIpJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX05FWFRfTU9OVEgiKSU+PC9hPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpqdW1wVG9OZXh0WWVhcigpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkVYVF9ZRUFSIiklPiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfTkVYVF9ZRUFSIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaW5pdCgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmOTExOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQUxFTkRBUl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvblVubG9hZD0idG9wLm9wZW5lci5jYWxlbmRhckJyb3dzZXJDbG9zZWQ9dHJ1ZSIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIj4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jYWxlbmRhci5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0FMRU5EQVJfQlJPV1NFUiIpJT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHRvcC5vcGVuZXIuY2FsZW5kYXJCcm93c2VyQ2xvc2VkID0gZmFsc2U7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvY2FsZW5kYXIuY3NzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvY2FsZW5kYXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODM4ODA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL2NhbGVuZGFyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotLmNhbGVuZGFydGFibGVjZWxscyB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgdGV4dC1hbGlnbjpjZW50ZXJ9Ci0udG9kYXl0YWJsZWNlbGwgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyB0ZXh0LWFsaWduOmNlbnRlcn0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3Rvb2xiYXIuY3NzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdG9vbGJhci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NWVhMTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdG9vbGJhci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jdG9vbGJhciB7IHdpZHRoOjEwMCU7IGhlaWdodDoyNXB4OyBiYWNrZ3JvdW5kOiNFQ0U5RDg7IGJvcmRlci1jb2xvcjp3aGl0ZTsgIGJvcmRlci1zdHlsZTpzb2xpZDsgIGJvcmRlci13aWR0aDoxIDEgMSAxcHg7IGJvcmRlci1ib3R0b20tY29sb3I6Izg0ODI4NDsgYm9yZGVyLXJpZ2h0LWNvbG9yOiM4NDgyODQ7IG1hcmdpbjowIDAgMCAwcHg7fQotI3Rvb2xiYXJib3JkZXIgeyBoZWlnaHQ6MjZweDsgd2lkdGg6MTAwJTsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGg6MSAwIDAgMXB4OyBib3JkZXItY29sb3I6Izg0ODI4NDsgfQotCi0vKiBpZnJhbWUgU3BhY2luZyBDb250b2wgKi8KLS50b29sYmFyYm9keW1hcmdpbiB7IG1hcmdpbjogNSA1IDAgNTsgYmFja2dyb3VuZDogI0VDRTlEODsgfQotCi0vKiBUb29sYmFyIFN0eWxlcyAqLwotLnRleHQge2ZvbnQtc2l6ZToxMnB4OyBmb250OiBpY29uO30KLWE6bGluayB7Y29sb3I6IGJsYWNrO30KLQotLyogSlMgUm9sbG92ZXIgU3R5bGUgKi8KLUlNRyB7IGJvcmRlci13aWR0aDoycHg7IGJvcmRlci1zdHlsZTpzb2xpZDt9Ci0ubm9ybWFsIHsgYm9yZGVyLWNvbG9yIDogI0VDRTlEODsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOjFweDsgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS1jb2xvciA6I0VDRTlEODsgYm9yZGVyLXJpZ2h0LWNvbG9yIDojRUNFOUQ4O30KLS5ob3ZlciB7IGJvcmRlci1jb2xvciA6IHdoaXRlOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yIDojOEM4RThDOyBib3JkZXItcmlnaHQtY29sb3IgOiM4QzhFOEM7IH0KLS5kb3duIHsgYm9yZGVyLWNvbG9yIDogIzhDOEU4QzsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOjFweDsgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZTsgYm9yZGVyLXJpZ2h0LWNvbG9yOndoaXRlO30KLQotLyogR2xvYmFsVG9vbGJhciAqLwotLmd0b29sYmFyYm9keW1hcmdpbiB7bWFyZ2luIDogMCAxIDMgMDsgYmFja2dyb3VuZDogI0VDRTlEOH0KLSNnbG9iYWx0b29sYmFye2hlaWdodDoxMDAlOyBiYWNrZ3JvdW5kOiAjRUNFOUQ4OyBib3JkZXItY29sb3IgOiB3aGl0ZTsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOjFweDsgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS1jb2xvciA6YmxhY2s7IGJvcmRlci1yaWdodC13aWR0aDogMXB4OyBib3JkZXItcmlnaHQtY29sb3IgOiM4NDgyODQ7fQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90cmVldmlldy5jc3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90cmVldmlldy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMWU2YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdHJlZXZpZXcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1hIHt0ZXh0LWRlY29yYXRpb246IG5vbmU7fQotYTpob3ZlciB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQotdGQge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IEJsYWNrO30KLS51bnNlbGVjdGVkVGV4dEFuY2hvciB7Y29sb3I6Ymx1ZTsgYmFja2dyb3VuZC1jb2xvcjpkb2N1bWVudC5iYWNrZ3JvdW5kQ29sb3J9Ci0uc2VsZWN0ZWRUZXh0QW5jaG9yIHtjb2xvcjp3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjpuYXZ5fQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3Mvd2luZG93cy5jc3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy93aW5kb3dzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkYjQwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy93aW5kb3dzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSNjb250ZW50Ym9yZGVyIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci1yaWdodDoxcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLXRvcDowcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzg0ODI4NDsgaGVpZ2h0OjEwMCU7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6d2hpdGU7IG92ZXJmbG93OmF1dG87IHBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjA7IHBhZGRpbmctdG9wOjEwOyBwYWRkaW5nLWJvdHRvbToxMH0KLSN0cmVlY29udGVudGJvcmRlciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci10b3A6MHB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICM4NDgyODQ7IGhlaWdodDoxMDAlOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOndoaXRlOyBvdmVyZmxvdzphdXRvOyBwYWRkaW5nLXRvcDo1cHh9Ci0KLS8qIGlmcmFtZSBTcGFjaW5nIENvbnRvbCAqLwotLmNvbnRlbnRib2R5bWFyZ2luIHsgbWFyZ2luOiAwIDUgMTIgNTsgYmFja2dyb3VuZDojRUNFOUQ4OyB9Ci0KLS8qIERvY3VtZW50IFN0eWxlcyAgKi8KLS5sYWJlbHMgeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IGNvbG9yOmJsYWNrOyBmb250LXdlaWdodDogbm9ybWFsO30KLQotLyogZmllbGRzZXQrbGVnZW5kIFN0eWxlcyAqLwotLmtleWxpbmVmaWVsZHNldCB7IGJvcmRlci1jb2xvcjojODA4MEZGOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItc3R5bGU6c29saWQ7IH0KLS5oZWFkZXJmaWVsZHNldCB7IC1tb3otYm9yZGVyLXJhZGl1czogN3B0OyBwYWRkaW5nOiAzcHg7IGJvcmRlcjoxcHggc29saWQgI0MwQzBDMDsgfQotCi0vKiB0YWJsZSBTdHlsZXMgKi8KLS50YWJsZWJvcmRlciB7Ym9yZGVyLWxlZnQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbTowcHggc29saWQgI0I4QjRBMzsgfQotLnRhYmxlY2VsbHMgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IHRleHQtYWxpZ246bGVmdH0KLS5jaGVja2JveGNlbGxzIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFOUQ4fQotdGguaGVhZGVyY29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojNDk3N0I0OyBjb2xvcjojRkZGRkZGOyB0ZXh0LWFsaWduOmNlbnRlcn0KLXRoLnNpbmdsZWhlYWRlcmNvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6IzQ5NzdCNDsgY29sb3I6I0ZGRkZGRjsgdGV4dC1hbGlnbjpsZWZ0fQotLmZpcnN0Y29sdW1uZXJyYW50cm93Y29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgcmVkOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCN0I0QTM7IGJvcmRlci10b3A6MXB4IHNvbGlkIHJlZDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgcmVkOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6I0U2RUFEODsgdGV4dC1hbGlnbjpsZWZ0fQotLm1pZGRsZWVycmFudHJvd2NvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCN0I0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXRvcDoxcHggc29saWQgcmVkOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCByZWQ7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojRTZFQUQ4OyB0ZXh0LWFsaWduOmxlZnR9Ci0ubGFzdGNvbHVtbmVycmFudHJvd2NvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCN0I0QTM7IGJvcmRlci1yaWdodDoxcHggc29saWQgcmVkOyBib3JkZXItdG9wOjFweCBzb2xpZCByZWQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHJlZDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFNkVBRDg7IHRleHQtYWxpZ246bGVmdH0KLS5yb3djb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojRTZFQUQ4OyB0ZXh0LWFsaWduOmxlZnR9Ci0KLS8qIEZvcm0gZWxlbWVudHMgYW5kIHN0YXR1cyBjb250ZW50cyAqLwotdGQgeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLXRoIHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci1pbnB1dCB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgfQotLnNlbGVjdGxpc3Qge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IEJsYWNrOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aCA6IDFweDsgIGJvcmRlci1jb2xvcjojQzdDNUIyO30KLXNlbGVjdCB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgfQotcHJlIHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci0uc210ZXh0ZW50ZXIge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IEJsYWNrOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLWNvbG9yOiAjQzdDNUIyOyB3aWR0aDoxMCU7IH0KLS50ZXh0ZW50ZXIge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IEJsYWNrOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLWNvbG9yOiAjQzdDNUIyOyB3aWR0aDo5MCU7IH0KLS50YWJsZXRleHRlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjEwMCU7IH0KLS50YWJsZWZpbGVicm93c2Uge3dpZHRoOjEwMCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOjFweDsgZm9udC1zaXplOiAxNHB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IGZvbnQ6IGljb247IH0KLWlucHV0LmJ1dHRvbiB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1zdHlsZTpvdXRzZXQ7IGhlaWdodDoyMnB4O30KLWlucHV0LnJhZGlvIHtmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7fQotaW1nLnR3aXN0IHtib3JkZXItd2lkdGg6MCAwIDAgMHB4OyBoZWlnaHQ6MTBweDsgd2lkdGg6MTFweDt9Ci0KLS8qIEZyYWdtZW50IFN0eWxlcyAqLwotLmZpeGZyYWd0YWJsZSB7d2lkdGg6OTUlOyBib3JkZXI6MHB4IG5vbmU7IH0KLS5pbm5lcmZpeGZyYWd0YWJsZSB7d2lkdGg6MTAwJTsgYm9yZGVyOjBweCBub25lOyB9Ci0ucmFuZ2VmcmFndGFibGUge3dpZHRoOjk1JTsgYm9yZGVyLWxlZnQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbTowcHggc29saWQgI0I4QjRBMzt9Ci0uaW5uZXJyYW5nZWZyYWd0YWJsZSB7d2lkdGg6MTAwJTsgYm9yZGVyLWxlZnQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbTowcHggc29saWQgI0I4QjRBMzt9Ci0udGV4dGFyZWFlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjEwMCU7IGhlaWdodDoxNTBweDsgfQotLmJpZ3RleHRhcmVhZW50ZXIge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IEJsYWNrOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLWNvbG9yOiAjQzdDNUIyOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MzAwcHg7IH0KLS5mcmFnYXJlYSB7IHBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyB9Ci0KLWlmcmFtZSB7Ym9yZGVyLXdpZHRoOiAycHg7IGJvcmRlci1zdHlsZTogaW5zZXQ7IH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMTBlM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMLGZhbHNlKSkpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKSA9PSBudWxsKSB7Ci0lPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAgfQotICAgIGVsc2UgewotJT4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0gIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWNlZWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBhY3Rpb24gPSBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5uZXdBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgaWYgKGFjdGlvblJlc3VsdCkgewotICAgIGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksZmFsc2UpKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci0gIGVsc2UgewotICAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pID09IG51bGwpIHsKLSU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0lPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIGZhdlByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgZmF2U3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgPC9zY3JpcHQ+Ci08JQotICAgIH0KLSAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjk4ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzQWN0aW9uSW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLUZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1ib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLWlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsZmFsc2UpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTikgPT0gbnVsbCkgewotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICBmYXZTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTk5NDIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTkzNWI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEwMzNiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOGQxNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi0gICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmExYjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuUmVtb3ZlRmF2b3JpdGVzQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBSZW1vdmVGYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IFJlbW92ZUZhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU5NzBmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5SZW1vdmVGYXZvcml0ZXNBY3Rpb24iJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBpZiAoY29uZmlybSgiPCU9Y29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19DT05GSVJNX1JFTU9WRV9OT0RFIiwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Tm9kZU5hbWUoKSklPiIpKSB7Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgICAgICU+Ci0gICAgICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCkpKSU+IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZhdlByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDNkMzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBDcmVhdGUgdGhlIGFjdGlvbi4KLSAgIFJlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBQb3B1bGF0ZSB0aGUgYWN0aW9uIHdpdGggdGhlIHJlcXVlc3QgcHJvcGVydGllcy4KLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKHJlc3VsdCkKLSAgIHsKLSAgICAgYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuc2V0QXR0cmlidXRlKCJjb2xzIiwiPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIpOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5zZXRBdHRyaWJ1dGUoInJvd3MiLCI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIpOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YjllNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgIGlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICAgIH0KLSAgICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNDb25maXJtSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNDb25maXJtSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlYjEyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgaWYgKGNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfQ09ORklSTV9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTIiklPiIpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTU2ZTA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWI3ZDIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWYxMTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vL21ha2Ugc3VyZSB0byByZWZyZXNoIG5vZGUgdmlldwotYWN0aW9uLnNldFRyZWVSZWZyZXNoTmVlZGVkKCk7Ci0KLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmEwY2RlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbgotU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzlhYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcCIpKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzBlMmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjhmYzAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90cmVldmlldy5jc3MiKSklPiI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdHJlZXZpZXcuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotPCUKLSAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIGludCBmb2N1c2VkTm9kZUlkID0gbm9kZU1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgIFN0cmluZyBmb2N1c2VkQW5jaG9yTmFtZSA9IFN0cmluZy52YWx1ZU9mKGZvY3VzZWROb2RlSWQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgIH0KLSU+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uTG9hZD0ic2VsZi5sb2NhdGlvbi5oYXNoPScjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPic7c2V0U2VsZWN0ZWRBbmNob3JOYW1lKCc8JT1zZWxlY3RlZEFuY2hvck5hbWUlPicpIiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotICAgIDwlPW5vZGVNYW5hZ2VyLnJlbmRlclRyZWVWaWV3KHJlc3BvbnNlKSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTEyMTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgiZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChGYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvbmF2aWdhdG9yLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKGZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICBlbHNlCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9OQVZJR0FUT1IiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0UmVzdG9yZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTIik7Ci0gICBTdHJpbmcgYWx0UmVtb3ZlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFTU9WRV9GQVZPUklURSIpOwotJT4gICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZXN0b3JlJT4iIHRpdGxlPSI8JT1hbHRSZXN0b3JlJT4iPjwvYT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVtb3ZlJT4iIHRpdGxlPSI8JT1hbHRSZW1vdmUlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OTFjOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QRVJTUEVDVElWRV9DT05URU5UIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0jRUNFOUQ4PgotICA8JQotICBpZiAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuaXNSVEwoKSkKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTYxMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Zjk1NmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgIT0gbnVsbCAmJiBzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKSB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTk9ERV9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZjRkYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAoZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05TIiklPjwvdGQ+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOyBpKyspIHsKLSAgICAgICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0gICAgICAgICAgICAlPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci0gICAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotJT4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1ZmM1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiNTVjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHByZT4KLTwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpKSU+Ci0gICAgICAgIDwvcHJlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA3NDhiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zdGF0dXMuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAoZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKGZhdlBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOyAgICAgICAKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIHRhcmdldD0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEVOVCU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YjQxODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAvLyBUaGUgc2VsZWN0ZWQgbm9kZSBtdXN0IGJlIGEgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoImZvcm1BY3Rpb25MaW5rIiwiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIik7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoIndzZGxVUkwiLHdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTMyM2RmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uTGluayIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uTGluay5hcHBlbmQoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTBiNmQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX0JVU0lORVNTX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9YnVzRWxlbWVudC5nZXROYW1lKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWJ1c0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19LRVkiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9YnVzRWxlbWVudC5nZXRCdXNpbmVzc0tleSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgICAgICAKLQotICAgIDwlCi0gICAgfQotICAgICU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVkOTM0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9SRUdJU1RSWV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX1JFR0lTVFJZX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gcmVnRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1yZWdpc3RyeU5hbWUlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgIHsKLSU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXB1Ymxpc2hVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgICAgfQotICAgCi0gICAgIFN0cmluZyByZWdpc3RyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cnlVUkwpKQotICAgICB7Ci0lPgotICAgICAgICAgICAgPGJyPgotICAgICAgICAgICAgPHRhYmxlPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfVVJMIixyZWdpc3RyeVVSTCklPgotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotPCUKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nQnVmZmVyIGNhdGVnb3J5RGlyZWN0b3J5ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5mb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yeURpcmVjdG9yeSxjb250cm9sbGVyLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkscmVnaXN0cnlOYW1lKTsKLSAgICAgIEZpbGUgY2F0ZWdvcnlEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcnlEaXJlY3RvcnkudG9TdHJpbmcoKSk7Ci0gICAgICBTdHJpbmdbXSBjYXRlZ29yeUZpbGVzID0gY2F0ZWdvcnlEaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICAgIGlmIChjYXRlZ29yeUZpbGVzICE9IG51bGwpCi0gICAgICB7Ci0lPgotPGJyPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVTIiklPgotICAgIDwvdGg+Ci0gIDwvdHI+Ci08JSAgICAgIAotICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yeUZpbGVzLmxlbmd0aDtpKyspCi0gICAgICAgIHsKLSU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPCU9Y2F0ZWdvcnlGaWxlc1tpXSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwlICAgICAgICAKLSAgICAgICAgfQotJT4KLTwvdGFibGU+Ci08JSAgICAgICAgCi0gICAgICB9ICAgICAgCi0lPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlICAgICAgCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU0M2M1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9TRVJWSUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IHNlckVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VyRWxlbWVudC5nZXROYW1lKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0tFWSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJFbGVtZW50LmdldFNlcnZpY2VLZXkoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZUludERldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Njg0MjNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzZXJJbnRFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJJbnRFbGVtZW50LmdldE5hbWUoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VySW50RWxlbWVudC5nZXRJbnF1aXJ5VVJMKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJJbnRFbGVtZW50LmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQwOGExYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgIHJlZ0VsZW1lbnQucmVmcmVzaE1ldGEoKTsgICAgICAKLSAgICAKLSAgICAgICAgU3RyaW5nIHZlcnNpb24gPSByZWdFbGVtZW50LmdldFZlcnNpb24oKTsKLSAgICAgICAgaWYgKHZlcnNpb24gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9WRVJTSU9OIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXZlcnNpb24lPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPCUKLSAgICAgICAgTGlzdCBuYW1lcyA9IHJlZ0VsZW1lbnQuZ2V0TmFtZXMoKTsKLSAgICAgICAgaWYgKG5hbWVzICE9IG51bGwgJiYgIW5hbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiB3aWR0aD0iMSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbmFtZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTmFtZSBuYW1lID0gKE5hbWUpaXQubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgbGFuZyA9IG5hbWUuZ2V0TGFuZygpOwotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1sYW5nICE9IG51bGwgPyBsYW5nIDogIi0tIiU+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPW5hbWUuZ2V0VmFsdWUoKSU+PC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBMaXN0IGRlc2NzID0gcmVnRWxlbWVudC5nZXREZXNjcygpOwotICAgICAgICBpZiAoZGVzY3MgIT0gbnVsbCAmJiAhZGVzY3MuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIHdpZHRoPSIxIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBkZXNjcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEZXNjcmlwdGlvbiBkZXNjID0gKERlc2NyaXB0aW9uKWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGxhbmcgPSBkZXNjLmdldExhbmcoKTsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9bGFuZyAhPSBudWxsID8gbGFuZyA6ICItLSIlPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1kZXNjLmdldFZhbHVlKCklPjwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPCUKLSAgICAgICAgU3RyaW5nIGRlZmF1bHRMb2dpbiA9IHJlZ0VsZW1lbnQuZ2V0RGVmYXVsdExvZ2luKCk7Ci0gICAgICAgIGlmIChkZWZhdWx0TG9naW4gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERUZBVUxUX0xPR0lOIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWRlZmF1bHRMb2dpbiU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBTdHJpbmcgZGVmYXVsdFBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXREZWZhdWx0UGFzc3dvcmQoKTsKLSAgICAgICAgaWYgKGRlZmF1bHRQYXNzd29yZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFRkFVTFRfUEFTU1dPUkQiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZGVmYXVsdFBhc3N3b3JkJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICAgIGlmIChpbnF1aXJ5VVJMICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9aW5xdWlyeVVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICA8JQotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICB7Ci0gICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXB1Ymxpc2hVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICA8JQotICAgICB9Ci0KLSAgICAgU3RyaW5nIHNlY3VyZUlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldFNlY3VyZUlucXVpcnlVUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChzZWN1cmVJbnF1aXJ5VVJMKSkKLSAgICAgewotICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUNVUkVfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VjdXJlSW5xdWlyeVVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgIDwlCi0gICAgIH0KLQotICAgICBTdHJpbmcgc2VjdXJlUHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0U2VjdXJlUHVibGlzaFVSTCgpOwotICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHNlY3VyZVB1Ymxpc2hVUkwpKQotICAgICB7Ci0gICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQ1VSRV9QVUJMSVNIX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZWN1cmVQdWJsaXNoVVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgPCUKLSAgICAgfQotICAgICAlPgotICAgICAKLSAgICAgPCUKLSAgICAgVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnRWxlbWVudC5nZXRUYXhvbm9taWVzKCk7Ci0gICAgIGlmICh0YXhvbm9taWVzICE9IG51bGwgJiYgdGF4b25vbWllcy5sZW5ndGggPiAwKQotICAgICB7Ci0gICAgICU+Ci0gICAgICAgPGJyPgotICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgIDx0cj4KLSAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9UQVhPTk9NWSIpJT4KLSAgICAgICAgICAgPC90aD4KLSAgICAgICAgIDwvdHI+Ci0gICAgICAgICA8JQotICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICB7Ci0gICAgICAgICAgIFRheG9ub215IHRheG9ub215ID0gdGF4b25vbWllc1tpXTsKLSAgICAgICAgICU+Ci0gICAgICAgICA8dHI+Ci0gICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9dGF4b25vbXkuZ2V0TmFtZSgpJT48L3RkPgotICAgICAgICAgPC90cj4KLSAgICAgICAgIDwlCi0gICAgICAgICB9Ci0gICAgICAgICAlPgotICAgICAgIDwvdGFibGU+Ci0gICAgICAgPCUKLSAgICAgfQotICAgICAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUgICAgICAKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0RMRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NETERldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0OTUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0RMRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1dTRExfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT13c2RsRWxlbWVudC5nZXRXc2RsVXJsKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NJTERldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTSUxEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZTFhZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NJTERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0lMX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1dTSUxfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NJTEVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgICAgICAKLQotICAgICAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOWE3MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGZvcm1BY3Rpb24udG9TdHJpbmcoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4KLSAgPGlucHV0IG5hbWU9IjwlPUFjdGlvbklucHV0cy5GUkFNRV9OQU1FJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZvcm1GcmFtZU5hbWUlPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NWQxOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTNkZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc0MTg0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyYjhjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTA5ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTRjZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDFlMzdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFiOTc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFhMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MWVjYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTFkYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTEzMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDY5ODZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTUzMTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGMwMjg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjhjOGVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9idXNpbmVzc19ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkNmE3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9idXNpbmVzc19ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X2NhdF9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X2NhdF9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlYzI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQzY2FlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX2ludGVyZmFjZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMjVjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX2ludGVyZmFjZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2Vfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzAyNTJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2Vfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiODQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvd3NpbF9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1OTE2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvd3NpbF9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNWZlOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGlzU29tZXRoaW5nU2VsZWN0ZWQodGFibGVDb250YWluZXJJZCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYWxlcnQoIjwlPWNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCh0YWJsZUNvbnRhaW5lcklkLCBmb3JtLCBsb2NhdGlvbikgewotICAgICAgICBpZiAoaXNTb21ldGhpbmdTZWxlY3RlZCh0YWJsZUNvbnRhaW5lcklkKSkKLSAgICAgICAgICAgIHNldExvY2F0aW9uQW5kU3VibWl0KGZvcm0sIGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRMb2NhdGlvbkFuZFN1Ym1pdChmb3JtLCBsb2NhdGlvbikgewotICAgICAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgICAgICB7Ci0gICAgICAgICAgZm9ybS5hY3Rpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICB9Ci0gICAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2E1ODhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgZmF2TmF2aWdhdG9yQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIGZhdk5hdmlnYXRvclRvb2xiYXIgPSBmYXZOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIGZhdk5hdmlnYXRvckNvbnRlbnQgPSBmYXZOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05URU5UJT4iXTsKLSAgdmFyIGZhdkFjdGlvbnNDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIGZhdlByb3BlcnRpZXNDb250YWluZXIgPSBmYXZBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZQcm9wZXJ0aWVzVG9vbGJhciA9IGZhdlByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfVE9PTEJBUiU+Il07Ci0gIHZhciBmYXZQcm9wZXJ0aWVzQ29udGVudCA9IGZhdlByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciBmYXZTdGF0dXNDb250YWluZXIgPSBmYXZBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIGZhdlN0YXR1c1Rvb2xiYXIgPSBmYXZTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19UT09MQkFSJT4iXTsKLSAgdmFyIGZhdlN0YXR1c0NvbnRlbnQgPSBmYXZTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc2YWQyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLQotICAgIGZ1bmN0aW9uIGZhdkhhbmRsZUNoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCwgY2hlY2tBbGxDaGVja2JveCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICAgICAgICAgICAgcm93Q2hlY2tib3gubmFtZSA9ICI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJ0YWJsZWNlbGxzIik7Ci0gICAgICAgICAgICAgICAgcm93Q2hlY2tib3gubmFtZSA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdmFsaWRhdGVDaGVja0JveElucHV0KGNoZWNrYm94LCBpc0NoZWNrZWQpIHsKLSAgICAgICAgaWYgKGlzQ2hlY2tlZCkgewotICAgICAgICAgICAgY2hlY2tib3gubmFtZSA9ICI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoZWNrYm94Lm5hbWUgPSAiIjsKLSAgICAgICAgfQotICAgICAgICBoYW5kbGVSb3dDaGVja2JveENsaWNrKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdHdpc3RJbml0KHRhYmxlQ29udGFpbmVySWQsdHdpc3RJbWFnZU5hbWUpIHsKLSAgICAgICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBpZiAodGFibGUucm93cy5sZW5ndGggPiBudW1iZXJPZkhlYWRlclJvd3MpIHsKLSAgICAgICAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAgICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCB0d2lzdEltYWdlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICAgICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCB0d2lzdEltYWdlTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmJlMDkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZnJhbWVzZXRTaXplc0Zvcm0pCi0gIHsKLSAgICB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCk7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+LnZhbHVlID0gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0LnJvd3M7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uc3VibWl0KCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1ZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2NhZGM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1ZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlID0gImRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfQlVTSU5FU1NfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9CVVNJTkVTUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1NfREVTQyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9CVVNJTkVTUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBmYXZVRERJQnVzaW5lc3NFbGVtZW50ID0gKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElCdXNpbmVzc0VsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiAgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJQnVzaW5lc3NFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTdlYzY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlID0gImRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfUkVHSVNUUllfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1JFR0lTVFJZIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9SRUdJU1RSWV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1JFR0lTVFJZIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9ICgoRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdpc3RyeUVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVJlZ2lzdHJ5RWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVJlZ2lzdHJ5RWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZVRERJUmVnaXN0cnlFbGVtZW50LmdldE5hbWUoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjM2VjMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlID0gImRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUgPSAieGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0UiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9ICgoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBmYXZVRERJU2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElTZXJJbnRFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJU2VySW50RWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZVRERJU2VySW50RWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMDU3NWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlID0gImRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUgPSAieGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfU0VSVklDRV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9TRVJWSUNFIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZmF2VURESVNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVNlcnZpY2VFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJU2VydmljZUVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5Vmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5Vmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDhkODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlID0gImRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VTRVJfREVGX1VERElfUkVHSVNUUllfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdpc3RyeUVsZW1lbnQgPSAoRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElSZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElSZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2Y2MxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVdTRExUYWJsZSA9ICJkaXZGYXZvcml0ZVdTRExUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVdTRExUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVXU0RMVGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9XU0RMX1NFUlZJQ0VfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1dTRExfU0VSVklDRSIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1dTRExfU0VSVklDRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVdTRExUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1dTREwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9ICgoRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBmYXZXU0RMU2VydmljZUVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZXU0RMU2VydmljZUVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdldTRExTZXJ2aWNlRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZXU0RMU2VydmljZUVsZW1lbnQuZ2V0V3NkbFVybCgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1dTRExfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NJTFZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NJTFZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTE3YmU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVXU0lMVGFibGUgPSAiZGl2RmF2b3JpdGVXU0lMVGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVXU0lMVGFibGUgPSAieGRpdkZhdm9yaXRlV1NJTFRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfV1NJTF9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfV1NJTCIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1dTSUxfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVdTSUxUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1dTSUwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICBGYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudCBmYXZXU0lMRm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gZmF2V1NJTEZvbGRlckVsZW1lbnQuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2V1NJTEVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2V1NJTEVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2V1NJTEVsZW1lbnQuZ2V0V3NpbFVybCgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fV1NJTF9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY1NGM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfSU1QT1JUX1RPX1dPUktCRU5DSCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgiZm9ybUFjdGlvbkxpbmsiKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fV09SS0JFTkNIX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXT1JLQkVOQ0hfUFJPSkVDVF9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciIgbm93cmFwPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgSVdvcmtzcGFjZVJvb3QgaVdvcmtzcGFjZVJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICAgICAgICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBpV29ya3NwYWNlUm9vdC5nZXRQcm9qZWN0cygpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ic2VsZWN0X3dvcmtiZW5jaF9wcm9qZWN0X25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvamVjdHNbaV0uaXNPcGVuKCkpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1wcm9qZWN0TmFtZSU+Ij48JT1wcm9qZWN0TmFtZSU+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW1wb3J0ZWRfZmlsZV9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIklNUE9SVEVEX1dTRExfRklMRV9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIHdpZHRoPSI2MCUiPgotPCUKLSAgIFN0cmluZyB3c2RsRmlsZU5hbWU9InRlbXAud3NkbCI7Ci0gICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpZm9ybVByb3BlcnRpZXMuZ2V0KCJ3c2RsVVJMIik7Ci0gICBpZiAod3NkbFVSTCAhPSBudWxsICYmIHdzZGxVUkwuZW5kc1dpdGgoIi53c2RsIikpCi0gICB7Ci0gICAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gTWF0aC5tYXgod3NkbFVSTC5sYXN0SW5kZXhPZigiLyIpLHdzZGxVUkwubGFzdEluZGV4T2YoIlxcIikpOwotICAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA+IDApCi0gICAgICAgd3NkbEZpbGVOYW1lID0gd3NkbFVSTC5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLHdzZGxVUkwubGVuZ3RoKCkpOwotICAgfQotJT4gICAKLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW1wb3J0ZWRfZmlsZV9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzZGxGaWxlTmFtZSklPiIgc2l6ZT01MCBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxYTY3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gdG9nZ2xlRGl2Q29udGFpbmVyKGRpdklkKQotICB7Ci0gICAgdmFyIGRpdkNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklkKTsKLSAgICBpZiAoZGl2Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQotICAgICAgZGl2Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICBkaXZDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoImZvcm1BY3Rpb25MaW5rIikpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLQotICA8JQotICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgU3RyaW5nIHRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIik7Ci0gICU+Ci0gIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1dPUktCRU5DSF9ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgIDxsYWJlbCBmb3I9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldPUktCRU5DSF9QUk9KRUNUX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIiBub3dyYXA+Ci0gICAgICAgIDwlCi0gICAgICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXByb2plY3ROYW1lJT4iPjwlPXByb2plY3ROYW1lJT4KLSAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2hlY2tlZCBpZD0iaW5wdXRfaW1wb3J0X3dzZGwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iIG9uQ2xpY2s9InRvZ2dsZURpdkNvbnRhaW5lcignZGl2X2ltcG9ydF93c2RsJykiPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRfd3NkbCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJMQUJFTF9JTVBPUlRfV1NETCIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJkaXZfaW1wb3J0X3dzZGwiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF93c2RsX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJJTVBPUlRFRF9XU0RMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotIFN0cmluZyB3c2RsRmlsZU5hbWU9InRlbXAud3NkbCI7Ci0gU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgid3NkbFVSTCIpOwotIGlmICh3c2RsVVJMICE9IG51bGwgJiYgd3NkbFVSTC5lbmRzV2l0aCgiLndzZGwiKSkKLSB7Ci0gICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IE1hdGgubWF4KHdzZGxVUkwubGFzdEluZGV4T2YoIi8iKSx3c2RsVVJMLmxhc3RJbmRleE9mKCJcXCIpKTsKLSAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgd3NkbEZpbGVOYW1lID0gd3NkbFVSTC5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLHdzZGxVUkwubGVuZ3RoKCkpOwotIH0KLSU+ICAgCi0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbXBvcnRlZF93c2RsX2ZpbGVfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2RsRmlsZU5hbWUpJT4iIHNpemU9NTAgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotCi0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9XU0RMX1VSTCU+IiB2YWx1ZT0iPCU9d3NkbFVSTCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfaW1wb3J0X3dzaWwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMJT4iIG9uQ2xpY2s9InRvZ2dsZURpdkNvbnRhaW5lcignZGl2X2ltcG9ydF93c2lsJykiPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRfd3NpbCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJMQUJFTF9JTVBPUlRfVE9fV1NJTCIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJkaXZfaW1wb3J0X3dzaWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF93c2lsX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0lMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotIFN0cmluZyB3c2lsRmlsZU5hbWUgPSAoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgid3NpbEZpbGVOYW1lIik7Ci0gaWYgKHdzaWxGaWxlTmFtZSA9PSBudWxsIHx8IHdzaWxGaWxlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgd3NpbEZpbGVOYW1lID0gd3NkbEZpbGVOYW1lLnN1YnN0cmluZygwLCB3c2RsRmlsZU5hbWUubGVuZ3RoKCktNCkgKyAid3NpbCI7Ci0lPiAgIAotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW1wb3J0ZWRfd3NpbF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XU0lMX0ZJTEVfTkFNRSU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsRmlsZU5hbWUpJT4iIHNpemU9NTAgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotCi08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZjA0ZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfTEFVTkNIX1dFQlNFUlZJQ0VfV0laQVJEIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbkxpbmsudG9TdHJpbmcoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotCi08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9sYXVuY2hfd3N3aXphcmRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DSE9PU0VfV0laQVJEIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3dzX2NsaWVudF93aXphcmQiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCU+IiBjaGVja2VkPXRydWUgdmFsdWU9IjwlPVN0cmluZy52YWx1ZU9mKEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9DTElFTlRfV0laQVJEKSU+Ij48bGFiZWwgZm9yPSJyYWRpb193c19jbGllbnRfd2l6YXJkIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fV0VCX1NFUlZJQ0VfQ0xJRU5UX1dJWkFSRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3dzX3NrZWxldG9uX3dpemFyZCIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfV0laQVJEJT4iIHZhbHVlPSI8JT1TdHJpbmcudmFsdWVPZihBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEKSU+Ij48bGFiZWwgZm9yPSJyYWRpb193c19za2VsZXRvbl93aXphcmQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19XRUJfU0VSVklDRV9TS0VMRVRPTl9XSVpBUkQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi0gIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9Qcm94eUxvYWRDb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkQ29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNjY5MzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9Qcm94eUxvYWRDb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyOwotICAgU3RyaW5nQnVmZmVyIHRhcmdldENvbnRlbnRMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcihyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVEFSR0VUX1BBR0UpKTsKLSAgIGlmIChzZXNzaW9uSWQgIT0gbnVsbCkKLSAgIHsKLSAgICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICAgIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgICAgaWYgKHRhcmdldENvbnRlbnRMaW5rLnRvU3RyaW5nKCkuaW5kZXhPZigiPyIpICE9IC0xKQotICAgICAgIHRhcmdldENvbnRlbnRMaW5rLmFwcGVuZCgnJicpOwotICAgICBlbHNlCi0gICAgICAgdGFyZ2V0Q29udGVudExpbmsuYXBwZW5kKCc/Jyk7Ci0gICAgIHRhcmdldENvbnRlbnRMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIH0KLSAgIGVsc2UKLSAgICAgY29udHJvbGxlciA9IChDb250cm9sbGVyKXNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICAKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9QQUdFX0xPQURFUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBsb2FkQ29udGVudCgpCi0gIHsKLSAgICB2YXIgZnJhbWVzZXQgPSBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb3h5UGFnZSIpOwotICAgIHZhciBjb250ZW50RnJhbWUgPSBmcmFtZXNldC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWUiKS5pdGVtKDEpOwotICAgIGNvbnRlbnRGcmFtZS5zcmMgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRhcmdldENvbnRlbnRMaW5rLnRvU3RyaW5nKCkpKSU+IjsgIAotICB9Ci0gIAotICBmdW5jdGlvbiBoYW5kbGVDb21wbGV0aW9uKCkKLSAgewotICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpLml0ZW0oMCk7Ci0gICAgdmFyIHRCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgZG9uZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGRvbmVDb2x1bW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIGRvbmVDb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlBhZ2UgbG9hZGVkLiIpKTsKLSAgICBkb25lUm93LmFwcGVuZENoaWxkKGRvbmVDb2x1bW4pOwotICAgIHRCb2R5LmFwcGVuZENoaWxkKGRvbmVSb3cpOyAgIAotICB9Ci08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBsb2FkQ29udGVudCgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZFBhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9Qcm94eUxvYWRQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYyNDYyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZFBhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5uZXQuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLSAgIFN0cmluZ0J1ZmZlciBsb2FkQ29udGVudExpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmb3Jtcy9Qcm94eUxvYWRDb250ZW50LmpzcD8iKTsKLSAgIGlmIChzZXNzaW9uSWQgIT0gbnVsbCkKLSAgIHsKLSAgICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICAgIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgICAgbG9hZENvbnRlbnRMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKS5hcHBlbmQoJyYnKTsKLSAgIH0KLSAgIGVsc2UKLSAgICAgY29udHJvbGxlciA9IChDb250cm9sbGVyKXNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBsb2FkQ29udGVudExpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UQVJHRVRfUEFHRSkuYXBwZW5kKCc9JykuYXBwZW5kKFVSTFV0aWxzLmVuY29kZShyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVEFSR0VUX1BBR0UpKSk7Ci0lPgotPGZyYW1lc2V0IGlkPSJwcm94eVBhZ2UiIHJvd3M9IjEwMCUsKiIgYm9yZGVyPTA+Ci0gIDxmcmFtZSBzcmM9IjwlPWNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxvYWRDb250ZW50TGluay50b1N0cmluZygpKSU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1BBR0VfTE9BREVSIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9QQUdFX0NPTlRFTlQiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbm9yZXNpemU+Ci08L2ZyYW1lc2V0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9jb3B5cmlnaHQuaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9jb3B5cmlnaHQuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2ZkY2VmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvY29weXJpZ2h0LmluYworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvZm9ybWhlYWRlci5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmU1YjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvZm9ybWhlYWRlci5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+IDxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiPiA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlNjE1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gKFRvb2xNYW5hZ2VyKWN1cnJlbnRUb29sTWFuYWdlckhhc2guZ2V0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUik7Ci0gICBpbnQgbnVtYmVyT2ZUb29scyA9IGN1cnJlbnRUb29sTWFuYWdlci5nZXROdW1iZXJPZlRvb2xzKCk7Ci0gICBpZiAobnVtYmVyT2ZUb29scyA+IDEpCi0gICB7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8c3Ryb25nPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX09USEVSX0FDVElPTlMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+IDxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiPiA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZT4KLTwlCi0gICAgIGZvciAoaW50IGk9MTtpPG51bWJlck9mVG9vbHM7aSsrKQotICAgICB7Ci0gICAgICAgVG9vbCB0ID0gY3VycmVudFRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0lPgotICA8dHI+Ci0gICAgPHRkPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0LmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9dC5nZXRTZWxlY3RUb29sQWN0aW9uVGFyZ2V0KCklPiI+PCU9dC5nZXRBbHRUZXh0KCklPjwvYT48L3RkPgotICA8L3RyPgotPCUKLSAgICAgfQotJT4KLTwvdGFibGU+Ci08JQotICAgfQotJT4gICAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZmU4YTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fR08iKSU+IiBjbGFzcz0iYnV0dG9uIj4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRVNFVCIpJT4iIG9uQ2xpY2s9InJlc2V0Rm9ybUlucHV0cygpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FjdGlvbnMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWN0aW9ucy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YWVkN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWN0aW9ucy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNlNTYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWFkNjY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmI0MTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmI0MTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2FsZW5kYXIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2FsZW5kYXIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTI4MTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NhbGVuZGFyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEwZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEwZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTJiYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTJiYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjE3YzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMDA0ZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMDA0OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWVlOWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODhmYjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Y2NmZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTdiOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGMzNjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2NGJjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNjIyMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNjIyMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2NWI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2NWI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX2Nsb3NlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlMDI3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMjJlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfb3Blbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmOGMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmOGMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2ZDNlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2ZDNlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODA4NWFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzgwODVhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2tleWxpbmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMva2V5bGluZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODA2OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMva2V5bGluZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMDk3ZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMDk3ZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MWU1YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX2xhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9sYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwZWY4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX2xhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9ub3RsYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbm90bGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTJjZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9ub3RsYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX2xhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZWJiNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19ub3RsYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX25vdGxhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDY0MzFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX25vdGxhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbmF2aWdhdG9yLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL25hdmlnYXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YzA1NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbmF2aWdhdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX2xhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDBjODlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX25vdGxhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19ub3RsYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3YmQxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX25vdGxhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOTA0MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOTA0MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yb290X21haW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcm9vdF9tYWluLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZGUwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yb290X21haW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3BhY2UuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3BhY2UuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODExOTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3NwYWNlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3N0YXR1cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zdGF0dXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGEwMDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3N0YXR1cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWJjOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MTY0NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0MzMxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdGNsb3NlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdG9wZW5lZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdG9wZW5lZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMmM1ZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RvcGVuZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmMwYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmMwYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI4NDRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOGVmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOGVmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiMzVhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiMzVhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvbGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9sYXVuY2hfb3B0aW9uc19yZWdpc3RyeS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzA3ODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9sYXVuY2hfb3B0aW9uc19yZWdpc3RyeS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNSAgIDEyODYwMiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckNvbnRleHQsCi0gIGphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgamF2YS51dGlsLkhhc2h0YWJsZSwKLSAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHMiICU+Ci0KLTwlCi0gIHJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7IAotICBTdHJpbmcga2V5ID0gbnVsbDsKLSAgSGFzaHRhYmxlIG9wdGlvbnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIEVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci0gIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKQotICB7Ci0gICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLSAgICBpZiAocGFyYW1WYWx1ZXMgIT0gbnVsbCAmJiBwYXJhbVZhbHVlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGlmIChrZXkgPT0gbnVsbCAmJiBVUkxVdGlscy5kZWNvZGUocGFyYW1OYW1lKS5lcXVhbHMoV1NFeHBsb3JlckNvbnRleHQuSUQpKQotICAgICAgICBrZXkgPSBwYXJhbVZhbHVlc1swXTsKLSAgICAgIGVsc2UKLSAgICAgICAgb3B0aW9ucy5wdXQocGFyYW1OYW1lLCBwYXJhbVZhbHVlcyk7Ci0gICAgfQotICB9Ci0gIGlmIChrZXkgIT0gbnVsbCkKLSAgewotICAgIExhdW5jaE9wdGlvbnNNYW5hZ2VyIG1hbmFnZXIgPSBMYXVuY2hPcHRpb25zTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgIG1hbmFnZXIubWFuYWdlKGtleSwgb3B0aW9ucywgYXBwbGljYXRpb24pOwotICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwNzQyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfQ09OVEVOVCIpJT48L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGVyc3BlY3RpdmVJZCgpLGZhbHNlKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNmOWE1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1TdHJpbmdCdWZmZXIgaHJlZkFjdGlvbkVuZ2luZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKHJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AiKSkpOwotaHJlZkFjdGlvbkVuZ2luZS5hcHBlbmQoIj8iKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotaHJlZkFjdGlvbkVuZ2luZS5hcHBlbmQoIj0iKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKHNlc3Npb24uZ2V0SWQoKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBvcGVuQWN0aW9uRW5naW5lQ29udGFpbmVyKCkKLSAgICB7Ci0gICAgICB2YXIgbGluayA9ICI8JT1ocmVmQWN0aW9uRW5naW5lLnRvU3RyaW5nKCklPiI7Ci0gICAgICB2YXIgYWN0aW9uRW5naW5lQ29udGFpbmVyID0gd2luZG93Lm9wZW4obGluaywiYWN0aW9uRW5naW5lQ29udGFpbmVyIiwiaGVpZ2h0PTEwMCx3aWR0aD0zNTAsc3RhdHVzPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzIik7Ci0gICAgICBpZiAoYWN0aW9uRW5naW5lQ29udGFpbmVyLmZvY3VzKQotICAgICAgICBhY3Rpb25FbmdpbmVDb250YWluZXIuZm9jdXMoKTsKLSAgICB9Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iZ3Rvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9Imdsb2JhbHRvb2xiYXIiPgotPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0yNT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX1dTRVhQTE9SRVIiKSU+PC90ZD4KLSAgICA8JQotICAgIFN0cmluZyBhbHRIaXN0b3J5QmFjayA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0JBQ0siKTsKLSAgICBTdHJpbmcgYWx0SGlzdG9yeUZvcndhcmQgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9GT1JXQVJEIik7Ci0gICAgU3RyaW5nIGFsdEFjdGlvbkVuZ2luZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0FDVElPTl9FTkdJTkUiKTsKLSAgICBTdHJpbmcgYWx0VURESSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1VERElfUEVSU1BFQ1RJVkUiKTsKLSAgICBTdHJpbmcgYWx0V1NJTCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfUEVSU1BFQ1RJVkUiKTsKLSAgICBTdHJpbmcgYWx0V1NETCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfUEVSU1BFQ1RJVkUiKTsKLSAgICBTdHJpbmcgYWx0RmF2b3JpdGVzID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1BFUlNQRUNUSVZFIik7Ci0gICAgJT4gICAKLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MTYgaGVpZ2h0PTI2PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZXRyaWV2ZUhpc3RvcnlBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuSlVNUF9CQUNLKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0SGlzdG9yeUJhY2slPiIgdGl0bGU9IjwlPWFsdEhpc3RvcnlCYWNrJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYmFja19lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJldHJpZXZlSGlzdG9yeUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRIaXN0b3J5Rm9yd2FyZCU+IiB0aXRsZT0iPCU9YWx0SGlzdG9yeUZvcndhcmQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2ZvcndhcmRfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgICA8JQotICAgIEFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmUgPSBjb250cm9sbGVyLmdldEFjdGlvbkVuZ2luZSgpOwotICAgIGlmIChhY3Rpb25FbmdpbmUgIT0gbnVsbCAmJiBhY3Rpb25FbmdpbmUuZ2V0TW9kZSgpICE9IEFjdGlvbkVuZ2luZS5NT0RFX0RJU0FCTEVEKQotICAgIHsKLSAgICAlPgotICAgICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuQWN0aW9uRW5naW5lQ29udGFpbmVyKCkiPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRBY3Rpb25FbmdpbmUlPiIgdGl0bGU9IjwlPWFsdEFjdGlvbkVuZ2luZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRVRERJJT4iIHRpdGxlPSI8JT1hbHRVRERJJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMLGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0V1NJTCU+IiB0aXRsZT0iPCU9YWx0V1NJTCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdFdTREwlPiIgdGl0bGU9IjwlPWFsdFdTREwlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4gICAgCi0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVMsZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRGYXZvcml0ZXMlPiIgdGl0bGU9IjwlPWFsdEZhdm9yaXRlcyU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvYnJvd3NlcmRldGVjdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4MTM1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvYnJvd3NlcmRldGVjdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gCi0vLyBDb250cmlidXRvcnM6Ci0vLyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0vLwotCi1mdW5jdGlvbiBpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKQotewotICByZXR1cm4gbmF2aWdhdG9yLmFwcE5hbWUgPT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9jYWxlbmRhcmJyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWI5Y2EyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9jYWxlbmRhcmJyb3dzZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHNlc3Npb24uZ2V0SWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGNhbGVuZGFyQnJvd3NlcjsKLSAgdmFyIGNhbGVuZGFyQnJvd3NlckNsb3NlZCA9IHRydWU7Ci0gIHZhciBjYWxlbmRhclRhcmdldFJvdyA9IC0xOwotICB2YXIgY2FsZW5kYXJUYXJnZXQ7Ci0KLSAgZnVuY3Rpb24gb3BlbkNhbGVuZGFyQnJvd3Nlcih0eXBlLGZvcm1Db250YWluZXJJZCxlbGVtZW50TmFtZSxpbmRleCkKLSAgewotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUNvbnRhaW5lcklkKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgdmFyIGVsZW1lbnRzID0gZm9ybS5lbGVtZW50c1tlbGVtZW50TmFtZV07Ci0gICAgaWYgKGluZGV4ID09IDAgJiYgZWxlbWVudHMubGVuZ3RoID09IHVuZGVmaW5lZCkKLTwlCi0gICAvLyBPbmx5IG9uZSBlbGVtZW50LgotJT4KLSAgICAgIGNhbGVuZGFyVGFyZ2V0ID0gZWxlbWVudHM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNhbGVuZGFyVGFyZ2V0Um93ID0gaW5kZXg7Ci0gICAgICBjYWxlbmRhclRhcmdldCA9IGVsZW1lbnRzLml0ZW0oaW5kZXgpOwotICAgIH0KLSAgICB2YXIgbGluazsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvckRhdGUoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUlPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yRGF0ZVRpbWUoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JHWWVhck1vbnRoKHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dEQVklPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yR0RheShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVklPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yR01vbnRoRGF5KHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhbGVuZGFyQnJvd3NlciA9IHdpbmRvdy5vcGVuKGxpbmssImNhbGVuZGFyQnJvd3NlciIsImhlaWdodD0zNTAsd2lkdGg9MjY0LHN0YXR1cz15ZXMsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyIpOwotICAgIGlmIChjYWxlbmRhckJyb3dzZXIuZm9jdXMpCi0gICAgICBjYWxlbmRhckJyb3dzZXIuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlQ2FsZW5kYXJCcm93c2VyKCkKLSAgewotICAgIGlmICghY2FsZW5kYXJCcm93c2VyQ2xvc2VkKQotICAgICAgY2FsZW5kYXJCcm93c2VyLmNsb3NlKCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjNiNGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgcmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotCi0gIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChmb3JtKQotICB7Ci0gICAgaWYgKHJlcXVlc3RTdWJtaXR0ZWQpCi0gICAgewotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19TVUJNSVRfSU5fUFJPR1JFU1MiKSklPiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXF1ZXN0U3VibWl0dGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlc2V0U3VibWlzc2lvbigpCi0gIHsKLSAgICByZXF1ZXN0U3VibWl0dGVkID0gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm11dGlscy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXV0aWxzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlYzgwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXV0aWxzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIDwlLy8gUmVxdWlyZXMgYnJvd3NlcmRldGVjdC5qcyU+Ci0gIGZ1bmN0aW9uIGNyZWF0ZUhpZGRlbkVsZW1lbnQoZWxlbWVudE5hbWUsdmFsdWUpCi0gIHsKLSAgICB2YXIgaGlkZGVuSW5wdXQ7Ci0gICAgaWYgKGVsZW1lbnROYW1lLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgICAgICBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxpbnB1dCBuYW1lPSciK2VsZW1lbnROYW1lKyInPiIpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGhpZGRlbklucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsZWxlbWVudE5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgaGlkZGVuSW5wdXQudHlwZSA9ICJoaWRkZW4iOwotICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7Ci0gICAgcmV0dXJuIGhpZGRlbklucHV0OwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzZXRGb3JtSW5wdXRzKCkKLSAgewotICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9wYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTY5YzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9wYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHBlcnNwZWN0aXZlV29ya0FyZWEgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iXTsKLSAgdmFyIHBlcnNwZWN0aXZlVG9vbGJhciA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfVE9PTEJBUiU+Il07Ci0gIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnQgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiJdOwotCi0gIGZ1bmN0aW9uIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZyYW1lc2V0IikuaXRlbSgwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKQotICB7Ci0gICAgdmFyIGRvdWJsZUNsaWNrQ29sdW1uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRvdWJsZWNsaWNrY29sdW1uIik7Ci0gICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uID09IG51bGwpCi0gICAgICByZXR1cm47Ci08JQotICAgU3RyaW5nIGpzQWx0UmVzdG9yZSA9IEhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpKTsKLSU+Ci0gICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uLnRpdGxlID09ICI8JT1qc0FsdFJlc3RvcmUlPiIpCi0gICAgICBkb3VibGVDbGlja0NvbHVtbi50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIikpJT4iOwotICAgIGVsc2UKLSAgICAgIGRvdWJsZUNsaWNrQ29sdW1uLnRpdGxlID0gIjwlPWpzQWx0UmVzdG9yZSU+IjsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUxNTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAKLS8vIENvbnRyaWJ1dG9yczoKLS8vICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLS8vCi0KLWZ1bmN0aW9uIHJlc3VtZVByb3h5TG9hZFBhZ2UoKQotewotICB2YXIgcHJveHlQYWdlID0gcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm94eVBhZ2UiKTsKLSAgcHJveHlQYWdlLnNldEF0dHJpYnV0ZSgicm93cyIsICIwLDEwMCUiKTsKLSAgcGFyZW50LmZyYW1lc1swXS5oYW5kbGVDb21wbGV0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhYzE5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RhYmxlcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdGFibGVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlhMjRlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdGFibGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIG51bWJlck9mSGVhZGVyUm93cyA9IDE7Ci0gIGZ1bmN0aW9uIGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0U2VsZWN0KHNlbGVjdCx2YWx1ZSkKLSAgewotICAgIGZvciAodmFyIGk9MDtpPHNlbGVjdC5vcHRpb25zLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKHNlbGVjdC5vcHRpb25zW2ldLnZhbHVlID09IHZhbHVlKQotICAgICAgewotICAgICAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGk7Ci0gICAgICAgIHJldHVybiBzZWxlY3Qub3B0aW9uc1tpXS50ZXh0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhpKTsKLSAgICAgICAgaS0tOwotICAgICAgfQotICAgIH0KLSAgICB2YXIgY2hlY2tBbGxDaGVja2JveFJvdyA9IHRhYmxlLnJvd3NbMF07Ci0gICAgdmFyIGNoZWNrQWxsQ2hlY2tib3ggPSBjaGVja0FsbENoZWNrYm94Um93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgaWYgKGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZCkKLSAgICAgIGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZCA9IGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlUm93Q2hlY2tib3hDbGljayhlKQotICB7Ci0gICAgdmFyIGNoZWNrYm94OwotICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICAgIGNoZWNrYm94ID0gZXZlbnQuc3JjRWxlbWVudDsKLSAgICBlbHNlCi0gICAgICBjaGVja2JveCA9IGUudGFyZ2V0OwotICAgIHZhciBjZWxsID0gY2hlY2tib3gucGFyZW50Tm9kZTsKLSAgICB2YXIgcm93ID0gY2VsbC5wYXJlbnROb2RlOwotICAgIGlmIChjaGVja2JveC5jaGVja2VkKQotICAgICAgaGlnaGxpZ2h0Um93KHJvdywicm93Y29sb3IiKTsKLSAgICBlbHNlCi0gICAgICBoaWdobGlnaHRSb3cocm93LCJ0YWJsZWNlbGxzIik7Ci0KLSAgICB2YXIgdGJvZHkgPSByb3cucGFyZW50Tm9kZTsKLSAgICB2YXIgdGFibGUgPSB0Ym9keS5wYXJlbnROb2RlOwotICAgIHZhciBjaGVja0FsbENoZWNrYm94ID0gdGFibGUucm93c1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgIGlmIChjaGVja0FsbENoZWNrYm94LmNoZWNrZWQpCi0gICAgICBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNyZWF0ZVJvd0NoZWNrYm94KCkKLSAgewotICAgIHZhciByb3dDaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgcm93Q2hlY2tib3guc2V0QXR0cmlidXRlKCJuYW1lIixyb3dDaGVja2JveE5hbWUpOwotICAgIHJvd0NoZWNrYm94LnR5cGUgPSAiY2hlY2tib3giOwotICAgIHJvd0NoZWNrYm94LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpKSU+IjsKLSAgICByb3dDaGVja2JveC5vbmNsaWNrID0gaGFuZGxlUm93Q2hlY2tib3hDbGljazsKLSAgICByZXR1cm4gcm93Q2hlY2tib3g7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVDaGVja0FsbENsaWNrKHRhYmxlQ29udGFpbmVySWQsY2hlY2tBbGxDaGVja2JveCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgIHJvd0NoZWNrYm94LmNoZWNrZWQgPSBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQ7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICBlbHNlCi0gICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJ0YWJsZWNlbGxzIik7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaGlnaGxpZ2h0Um93KHJvdyxjbGFzc05hbWUpCi0gIHsKLSAgICB2YXIgcm93Q29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICBmb3IgKHZhciBpPTE7aTxyb3dDb2x1bW5zLmxlbmd0aDtpKyspCi0gICAgICByb3dDb2x1bW5zLml0ZW0oaSkuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICB9Ci0KLSAgZnVuY3Rpb24gaGlnaGxpZ2h0RXJyYW50Um93KHJvdyxjbGFzc05hbWUpCi0gIHsKLSAgICB2YXIgcm93Q29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IHJvd0NvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIHN0YXJ0OwotICAgIGlmIChjb2x1bW4wQ29udHJvbC50eXBlID09ICJjaGVja2JveCIpCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wuY2hlY2tlZCA9IHRydWU7Ci0gICAgICByb3dDb2x1bW5zLml0ZW0oMSkuY2xhc3NOYW1lID0gImZpcnN0Y29sdW1uZXJyYW50cm93Y29sb3IiOwotICAgICAgc3RhcnQgPSAyOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMC5jbGFzc05hbWUgPSAiZmlyc3Rjb2x1bW5lcnJhbnRyb3djb2xvciI7Ci0gICAgICBzdGFydCA9IDE7Ci0gICAgfQotICAgIHJvd0NvbHVtbnMuaXRlbShyb3dDb2x1bW5zLmxlbmd0aC0xKS5jbGFzc05hbWUgPSAibGFzdGNvbHVtbmVycmFudHJvd2NvbG9yIjsKLSAgICBmb3IgKHZhciBpPXN0YXJ0O2k8cm93Q29sdW1ucy5sZW5ndGgtMTtpKyspCi0gICAgICByb3dDb2x1bW5zLml0ZW0oaSkuY2xhc3NOYW1lID0gIm1pZGRsZWVycmFudHJvd2NvbG9yIjsKLSAgfQotCi0gIGZ1bmN0aW9uIHR3aXN0KHRhYmxlQ29udGFpbmVySWQsdHdpc3RJbWFnZU5hbWUpCi0gIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdHdpc3RJbWFnZSA9IGRvY3VtZW50LmltYWdlc1t0d2lzdEltYWdlTmFtZV07Ci0gICAgaWYgKHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQotICAgIHsKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIHR3aXN0SW1hZ2Uuc3JjID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IjsKLSAgICAgIHR3aXN0SW1hZ2UuYWx0ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSklPiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgdHdpc3RJbWFnZS5zcmMgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iOwotICAgICAgdHdpc3RJbWFnZS5hbHQgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpKSU+IjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCkKLSAgewotICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklkKS5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICAgIHR3aXN0KHRhYmxlQ29udGFpbmVySWQsIngiK3RhYmxlQ29udGFpbmVySWQpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoaW5wdXRWYWx1ZSkKLSAgewotICAgIGlmIChpbnB1dFZhbHVlID09IG51bGwgfHwgaW5wdXRWYWx1ZS5sZW5ndGggPCAxKQotICAgICAgcmV0dXJuICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpKSU+IjsKLSAgICByZXR1cm4gaW5wdXRWYWx1ZTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdG9vbGJhci5qcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90b29sYmFyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWIxYjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90b29sYmFyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAKLS8vIENvbnRyaWJ1dG9yczoKLS8vICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLS8vCi0KLWZ1bmN0aW9uIG1vdXNlb3ZlcihpbWcpCi17Ci0gIGltZy5jbGFzc05hbWUgPSAiaG92ZXIiOwotfQotCi1mdW5jdGlvbiBtb3VzZW91dChpbWcpCi17Ci0gIGltZy5jbGFzc05hbWUgPSAibm9ybWFsIjsKLX0KLQotZnVuY3Rpb24gbW91c2Vkb3duKGltZykKLXsKLSAgaW1nLmNsYXNzTmFtZSA9ICJkb3duIjsKLX0KLQotZnVuY3Rpb24gbW91c2V1cChpbWcpCi17Ci0gIHJldHVybiBtb3VzZW91dChpbWcpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90cmVldmlldy5qcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90cmVldmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4NDNmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdHJlZXZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vIAotLy8gQ29udHJpYnV0b3JzOgotLy8gICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotLy8KLQotLy8gUmVxdWlyZXMgYnJvd3NlcmRldGVjdC5qcwotCi12YXIgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0KLWZ1bmN0aW9uIHNldFNlbGVjdGVkQW5jaG9yTmFtZShhbmNob3JOYW1lKQotewotICBzZWxlY3RlZEFuY2hvck5hbWUgPSBhbmNob3JOYW1lOwotfQotCi1mdW5jdGlvbiBzZWxlY3ROb2RlKGFuY2hvck5hbWUsb3BlbkltYWdlUGF0aCkKLXsKLSAgdmFyIGlzSUUgPSBpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKTsKLSAgaWYgKHNlbGVjdGVkQW5jaG9yTmFtZS5sZW5ndGggPiAwKQotICB7Ci0gICAgdmFyIHNlbGVjdGVkQW5jaG9yOwotICAgIGlmIChpc0lFKQotICAgICAgc2VsZWN0ZWRBbmNob3IgPSBkb2N1bWVudC5hbmNob3JzKHNlbGVjdGVkQW5jaG9yTmFtZSk7Ci0gICAgZWxzZQotICAgICAgc2VsZWN0ZWRBbmNob3IgPSBkb2N1bWVudC5hbmNob3JzW3NlbGVjdGVkQW5jaG9yTmFtZV07Ci0gICAgaWYgKHNlbGVjdGVkQW5jaG9yKQotICAgICAgc2VsZWN0ZWRBbmNob3IuY2xhc3NOYW1lID0gInVuc2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgfQotICBpZiAoYW5jaG9yTmFtZS5pbmRleE9mKCItMSIpID09IC0xKQotICB7Ci0gICAgaWYgKGlzSUUpCi0gICAgICBkb2N1bWVudC5hbmNob3JzKGFuY2hvck5hbWUpLmNsYXNzTmFtZSA9ICJzZWxlY3RlZFRleHRBbmNob3IiOwotICAgIGVsc2UKLSAgICAgIGRvY3VtZW50LmFuY2hvcnNbYW5jaG9yTmFtZV0uY2xhc3NOYW1lID0gInNlbGVjdGVkVGV4dEFuY2hvciI7Ci0gICAgc2V0U2VsZWN0ZWRBbmNob3JOYW1lKGFuY2hvck5hbWUpOwotICAgIGFsdGVySW1hZ2UoYW5jaG9yTmFtZSxvcGVuSW1hZ2VQYXRoKTsKLSAgfQotICBlbHNlCi0gICAgc2V0U2VsZWN0ZWRBbmNob3JOYW1lKCIiKTsKLX0KLQotZnVuY3Rpb24gYWx0ZXJJbWFnZShpbWFnZU5hbWUsaW1hZ2VQYXRoKQotewotICBkb2N1bWVudC5pbWFnZXNbaW1hZ2VOYW1lXS5zcmMgPSBpbWFnZVBhdGg7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3dzZGxicm93c2VyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0NWE3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHNlc3Npb24uZ2V0SWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHdzZGxXaW5kb3c7Ci0gIHZhciB3c2RsV2luZG93Q2xvc2VkID0gdHJ1ZTsKLSAgdmFyIHRhcmdldFdTRExVUkxFbGVtZW50OwotICBmdW5jdGlvbiBvcGVuV1NETEJyb3dzZXIoZm9ybUNvbnRhaW5lcklkLHR5cGUpCi0gIHsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1Db250YWluZXJJZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHRhcmdldFdTRExVUkxFbGVtZW50ID0gZm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPjsKLSAgICB2YXIgbGluazsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbldTRExCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JTZXJ2aWNlKHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UlPjoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5XU0RMQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yU2VydmljZUludGVyZmFjZShzZXNzaW9uSWQpKSklPiI7Ci0gICAgfQotICAgIHdzZGxXaW5kb3cgPSB3aW5kb3cub3BlbihsaW5rLCJ3c2RsV2luZG93IiwiaGVpZ2h0PTMwMCx3aWR0aD00NTAsc3RhdHVzPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzIik7Ci0gICAgaWYgKHdzZGxXaW5kb3cuZm9jdXMpCi0gICAgICB3c2RsV2luZG93LmZvY3VzKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBjbG9zZVdTRExCcm93c2VyKCkKLSAgewotICAgIGlmICghd3NkbFdpbmRvd0Nsb3NlZCkKLSAgICAgIHdzZGxXaW5kb3cuY2xvc2UoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdlMGYzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEFkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IEFkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOWE0ZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoaW5wdXRzVmFsaWQpCi0gICB7Ci0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICB9Ci0lPgotCi0gICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgIDwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZjdiNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24iJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IEFkZFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzZmMmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24KLSAgIEJ1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IEJ1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODdlZjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IEJ1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWU1ZDI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24gYWN0aW9uID0gbmV3IEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gYnVzaW5lc3NFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVCdXNpbmVzcygpOwotCi0gICBpZiAoIWJ1c2luZXNzRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9CVVNJTkVTU19OT0RFIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkMWU0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotPCUKLUVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci13aGlsZSAocGFyYW1OYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbVZhbHVlcy5sZW5ndGg7IGkrKykgewotJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1wYXJhbU5hbWUlPiIgdmFsdWU9IjwlPXBhcmFtVmFsdWVzW2ldJT4iPgotPCUKLSAgfQotfQotJT4KLTwvZm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KLQotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLUFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLWlmIChhY3Rpb24uZmF2b3JpdGVFeGlzdHMoKSkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9PVkVSV1JJVEVfRkFWT1JJVEVTIikpJT4iKSkKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZGVjNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uOwotICAgaWYgKHNlbGVjdGVkTm9kZSBpbnN0YW5jZW9mIEZvbGRlck5vZGUpCi0gICAgIGFjdGlvbiA9IG5ldyBDbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0gICBlbHNlCi0gICAgIGFjdGlvbiA9IG5ldyBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIFRoZSBhY3Rpb24gbWF5IGJlIGV4ZWN1dGVkIHByb2dyYW1tZWQgbGluay4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICAKLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3N2NhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBDbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBDbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzMTU3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBDb21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmIChpbnB1dHNWYWxpZCkKLSAgIHsKLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIH0KLSU+Ci0KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNiZmVlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBhY3Rpb24uZ2V0U3ViUXVlcnlLZXkoKTsKLSAgIFN0cmluZ0J1ZmZlciBuZXdTdWJRdWVyeUtleSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsICYmIHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpID4gMCkKLSAgICAgbmV3U3ViUXVlcnlLZXkuYXBwZW5kKGFjdGlvbi5nZXRTdWJRdWVyeUtleSgpKS5hcHBlbmQoJzonKTsKLSAgIG5ld1N1YlF1ZXJ5S2V5LmFwcGVuZChhY3Rpb24uZ2V0TmV3U3ViUXVlcnkoKSk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbClhY3Rpb24uZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHBhcmVudEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhuZXdTdWJRdWVyeUtleS50b1N0cmluZygpKTsKLSAgIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1TdHJpbmcgPSBhY3Rpb24uZ2V0TmV3U3ViUXVlcnlJdGVtKCk7Ci0gICBzdWJRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLG5ld1N1YlF1ZXJ5SXRlbVN0cmluZyk7Ci0gICBzdWJRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQsbmV3IEJvb2xlYW4oYWN0aW9uLmlzU3ViUXVlcnlHZXQoKSkpOwotICAgCi0gICAvLyBBbHdheXMgaW5pdGlhbGl6ZSB0aGUgcXVlcnkgbmFtZSBzbyB0aGUgc3VicXVlcnkgbWFrZXMgc2Vuc2UuCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyBwYXJlbnRRdWVyeU5hbWUgPSAoU3RyaW5nKXBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgIGlmIChwYXJlbnRRdWVyeU5hbWUgPT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlOYW1lID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfUVVFUllfTkFNRSIpOwotICAgaW50IG5ld1N1YlF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQobmV3U3ViUXVlcnlJdGVtU3RyaW5nKTsKLSAgIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gbnVsbDsKLSAgIHN3aXRjaCAobmV3U3ViUXVlcnlJdGVtKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmcgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgfQotICAgU3RyaW5nW10gbWVzc2FnZVBhcmFtZXRlcnMgPSB7cGFyZW50UXVlcnlOYW1lLG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmd9OwotICAgc3ViUXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiREVGQVVMVF9TVUJRVUVSWV9OQU1FIixtZXNzYWdlUGFyYW1ldGVycykpOwotICAgCi0gICBOb2RlIG5vZGUgPSBhY3Rpb24uZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICBpbnQgbm9kZUlkID0gbm9kZS5nZXROb2RlSWQoKTsKLSAgIGludCB0b29sSWQgPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgIGludCB2aWV3SWQgPSBub2RlLmdldFZpZXdJZCgpOwotICAgaW50IHZpZXdUb29sSWQgPSBub2RlLmdldFZpZXdUb29sSWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLG5ld1N1YlF1ZXJ5S2V5LnRvU3RyaW5nKCksZmFsc2UpKSklPiI7Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMzNiNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIExvZ2luQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IExvZ2luQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWNlN2E4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHk+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgTG9nb3V0QWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IExvZ291dEFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOyAvL2FjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMDQwNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgICAgewotICAgICAgIGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgICB9Ci0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY5ZTQ4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgewotICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzZWxlY3RlZCBub2RlIGlzIHZpc2libGUuCi0gICAgICAgY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgbmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgIHByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmM3NDNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotCi0gICBPcGVuUmVnaXN0cnlBY3Rpb24gYWN0aW9uID0gbmV3IE9wZW5SZWdpc3RyeUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwY2JjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZnJlc2hVRERJTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBUaGUgYWN0aW9uIG1heSBiZSBleGVjdXRlZCB2aWEgcHJvZ3JhbSBsaW5rLgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIGJvb2xlYW4gaXNOb2RlRGF0YVZhbGlkID0gYWN0aW9uLnZlcmlmeU5vZGVEYXRhKCk7Ci0KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgU3RyaW5nIG9uTG9hZEFjdGlvbjsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBwcm9jZXNzQ2xlYXJOb2Rlc0Zvcm0oKQotICB7Ci0gICAgdmFyIGNsZWFyTm9kZXNGb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgdmFyIHN1Ym1pdENsZWFyTm9kZXNGb3JtID0gZmFsc2U7Ci08JQotICAgICBWZWN0b3Igc3RhbGVOb2RlcyA9IGFjdGlvbi5nZXRTdGFsZU5vZGVzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHN0YWxlTm9kZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5vZGUgc3RhbGVOb2RlID0gKE5vZGUpc3RhbGVOb2Rlcy5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfTk9ERSIsc3RhbGVOb2RlLmdldE5vZGVOYW1lKCkpKSU+IikpCi0gICAgewotICAgICAgY2xlYXJOb2Rlc0Zvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+Iiw8JT1zdGFsZU5vZGUuZ2V0Tm9kZUlkKCklPikpOwotICAgICAgc3VibWl0Q2xlYXJOb2Rlc0Zvcm0gPSB0cnVlOwotICAgIH0KLTwlCi0gICAgIH0KLSU+Ci0gICAgaWYgKHN1Ym1pdENsZWFyTm9kZXNGb3JtKQotICAgICAgY2xlYXJOb2Rlc0Zvcm0uc3VibWl0KCk7Ci0gIH0KLTwvc2NyaXB0PiAgICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotPC9mb3JtPgotPCUKLSAgIGlmICghaXNOb2RlRGF0YVZhbGlkKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBTdHJpbmcgbm9kZU5hbWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldE5vZGUobm9kZUlkKS5nZXROb2RlTmFtZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX05PREUiLG5vZGVOYW1lKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PiAgICAKLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb2Nlc3NDbGVhck5vZGVzRm9ybSgpOwotPC9zY3JpcHQ+Ci08JUAgaW5jbHVkZSBmaWxlID0gIi91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZWYzNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWZyZXNoVURESU5vZGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESU5vZGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0gICAvLyBSdW4gdGhlIGFjdGlvbgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBwcm9jZXNzQ2xlYXJOb2Rlc0Zvcm0oKQotICB7Ci0gICAgdmFyIGNsZWFyTm9kZXNGb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci08JQotICAgICBWZWN0b3Igc3RhbGVOb2RlcyA9IGFjdGlvbi5nZXRTdGFsZU5vZGVzKCk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICBmb3IgKGludCBpPTA7aTxzdGFsZU5vZGVzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOb2RlIHN0YWxlTm9kZSA9IChOb2RlKXN0YWxlTm9kZXMuZWxlbWVudEF0KGkpOwotJT4KLSAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX05PREUiLHN0YWxlTm9kZS5nZXROb2RlTmFtZSgpKSklPiIpKQotICAgICAgY2xlYXJOb2Rlc0Zvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+Iiw8JT1zdGFsZU5vZGUuZ2V0Tm9kZUlkKCklPikpOwotPCUgICAgCi0gICAgIH0KLSU+Ci0gICAgY2xlYXJOb2Rlc0Zvcm0uc3VibWl0KCk7Ci0gIH0gICAgICAgICAKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci08L2Zvcm0+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvY2Vzc0NsZWFyTm9kZXNGb3JtKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJiYzk4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViNDNjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YmUxZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDcyNzQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZWRjOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmYxYmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzYzOGQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMDYyYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MWU3NWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzYTQwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDExOWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ3ZTA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmN2FhOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5NWY4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQzNjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmY2JjYzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKGlucHV0c1ZhbGlkKQotICAgewotICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgfQotJT4KLQotICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICA8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MjRhOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTgzNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBDcmVhdGUgdGhlIGFjdGlvbi4KLSAgIFJlc2l6ZVVERElGcmFtZXNBY3Rpb24gYWN0aW9uID0gbmV3IFJlc2l6ZVVERElGcmFtZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLSAgIC8vIFBvcHVsYXRlIHRoZSBhY3Rpb24gd2l0aCB0aGUgcmVxdWVzdCBwcm9wZXJ0aWVzLgotICAgYm9vbGVhbiByZXN1bHQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgCi0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5zZXRBdHRyaWJ1dGUoImNvbHMiLCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIpOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5zZXRBdHRyaWJ1dGUoInJvd3MiLCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2JiMTkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0KLSAgIENhdGVnb3J5Tm9kZSBzZWxlY3RlZE5vZGUgPSAoQ2F0ZWdvcnlOb2RlKWFjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICBOb2RlIHByZXZpb3VzU2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0UHJldmlvdXNTZWxlY3RlZE5vZGUoKTsKLSAgIGludCBzZWxlY3RlZE5vZGVJZCA9IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBTdHJpbmcgdHJlZUNvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgIGlmIChwcmV2aW91c1NlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgewotICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4KLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5hbHRlckltYWdlKCc8JT1wcmV2aW91c1NlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCklPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChwcmV2aW91c1NlbGVjdGVkTm9kZS5nZXRDbG9zZWRJbWFnZVBhdGgoKSkpJT4nKTsKLTwlCi0gICAgIH0KLSAgIH0KLSAgIFN0cmluZyBzZWxlY3RlZE5vZGVBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4gICAgIAotICA8JT10cmVlQ29udGVudFZhciU+LnNlbGVjdE5vZGUoJzwlPXNlbGVjdGVkTm9kZUFuY2hvck5hbWUlPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZE5vZGUuZ2V0T3BlbkltYWdlUGF0aCgpKSklPicpOwotICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uLmhhc2ggPSAnIzwlPXNlbGVjdGVkTm9kZUFuY2hvck5hbWUlPic7Ci08JSAgCi0gICB9Ci0gICAKLSAgIENhdGVnb3J5RWxlbWVudCBjYXRlZ29yeUVsZW1lbnQgPSAoQ2F0ZWdvcnlFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBjYXRlZ29yeUVsZW1lbnQuZ2V0Q2F0ZWdvcnkoKTsKLSU+Ci0gIGNhdGVnb3J5QnJvd3NlcldpbmRvdy5vcGVuZXIudGFyZ2V0Q2F0ZWdvcnlLZXlOYW1lRWxlbWVudC52YWx1ZSA9ICI8JT1rci5nZXRLZXlOYW1lKCklPiI7Ci0gIGNhdGVnb3J5QnJvd3NlcldpbmRvdy5vcGVuZXIudGFyZ2V0Q2F0ZWdvcnlLZXlWYWx1ZUVsZW1lbnQudmFsdWUgPSAiPCU9a3IuZ2V0S2V5VmFsdWUoKSU+IjsKLSAgY2F0ZWdvcnlCcm93c2VyV2luZG93Lm9wZW5lci5jbG9zZUNhdGVnb3J5QnJvd3NlcigpOwotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjNjZjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZWxlY3RGaW5kVG9vbEFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0RmluZFRvb2xBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2I3ZDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0YTQwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMTYzN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgIAotICAgaWYgKCFhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgIFN0cmluZyBzdWJRdWVyeUxpc3RLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpOwotICAgICBpbnQgc3ViUXVlcnlMaXN0SXRlbUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBVVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9JVEVNX1ZBTElEQVRJT05fRkFJTEVEIixhY3Rpb24uZ2V0SXRlbU5hbWUoKSkpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhzdWJRdWVyeUtleSxzdWJRdWVyeUxpc3RLZXksc3ViUXVlcnlMaXN0SXRlbUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+Ci08JQotICAgfQotICAgZWxzZQotICAgewotICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzllNzFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VydmljZUdldEJ1c2luZXNzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gc2VydmljZUV4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZVNlcnZpY2UoKTsKLQotICAgaWYgKCFzZXJ2aWNlRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9TRVJWSUNFX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiNWY5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbiBhY3Rpb24gPSBuZXcgU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIHNlcnZpY2VFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVTZXJ2aWNlKCk7Ci0KLSAgIGlmICghc2VydmljZUV4aXN0cykKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfU0VSVklDRV9OT0RFIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWIyODc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbiBhY3Rpb24gPSBuZXcgU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gc2lFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0KLSAgIGlmICghc2lFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1NJX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI5NjdiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbiBhY3Rpb24gPSBuZXcgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIHNpRXhpc3RzID0gYWN0aW9uLnZhbGlkYXRlU2VydmljZUludGVyZmFjZSgpOwotCi0gICBpZiAoIXNpRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9TSV9OT0RFIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDQwNWQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0gICAgIGlmIChpbnB1dHNWYWxpZCkKLSAgICAgewotICAgICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgICAgfQotJT4KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2UzNzRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbgotU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbiBhY3Rpb24gPSBuZXcgU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbihjb250cm9sbGVyKTsKLSAgIAotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIAotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFlMDRmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9jYnBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotCi0gICBTdHJpbmcgdHJlZUNvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGVudFBhZ2UoKSkpJT4iOwotICBlbHNlCi0gICAgY2F0ZWdvcnlCcm93c2VyV2luZG93LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSU+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGVlNzQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBUb2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOThjNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24gYWN0aW9uID0gbmV3IFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TSE9XX1JFU1VMVFNfVEFSR0VUKSAhPSBudWxsKQotICAgICBhY3Rpb24uZW5hYmxlU2hvd1Jlc3VsdHNUYXJnZXQoKTsKLSAgIGVsc2UKLSAgICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgTm9kZSB0YXJnZXROb2RlID0gYWN0aW9uLmdldFRhcmdldE5vZGUoKTsKLSAgIFN0cmluZyB0YXJnZXROb2RlQW5jaG9yTmFtZSA9IHRhcmdldE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBuYXZpZ2F0b3JDb250ZW50LnNlbGVjdE5vZGUoJzwlPXRhcmdldE5vZGVBbmNob3JOYW1lJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGFyZ2V0Tm9kZS5nZXRPcGVuSW1hZ2VQYXRoKCkpKSU+Jyk7Ci0gIG5hdmlnYXRvckNvbnRlbnQubG9jYXRpb24uaGFzaD0nIzwlPXRhcmdldE5vZGVBbmNob3JOYW1lJT4nOwotICBwcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZGVmMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUobmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKSk7Ci0gICBSZWdpc3RyeURldGFpbHNUb29sIHJlZ0RldGFpbHNUb29sID0gcmVnTm9kZS5nZXRSZWdEZXRhaWxzVG9vbCgpOwotICAgcmVnRGV0YWlsc1Rvb2wuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgcmVnTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5zZXRTZWxlY3RlZFRvb2xJZChyZWdEZXRhaWxzVG9vbC5nZXRUb29sSWQoKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsocmVnTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NWNiY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gcGFyYW1WYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLWlmIChwYXJhbVZhbGlkKSB7Ci0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxmYWxzZSkpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTAzZmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTgyMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzMxZjYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzllYjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVW5wdWJsaXNoQWN0aW9uIGFjdGlvbiA9IG5ldyBVbnB1Ymxpc2hBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjQwMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIGJvb2xlYW4gcmVmcmVzaFJlc3VsdCA9IGFjdGlvbi5yZWZyZXNoRnJvbVJlZ2lzdHJ5KCk7Ci0gICAgIAotICAgICBpZiAoIXJlZnJlc2hSZXN1bHQpCi0gICAgIHsKLSAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OLGFjdGlvbik7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1BVQkxJU0hfSVRFTSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVOZXdQdWJsaXNoQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgZWxzZQotICAgIHByb3BlcnRpZXNDb250ZW50LnJlcXVlc3RTdWJtaXR0ZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgICAgfQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwZWFiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVwZGF0ZUJ1c2luZXNzQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVCdXNpbmVzc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVOZXdQdWJsaXNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2FlYTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBVcGRhdGVBY3Rpb24gYWN0aW9uID0gKFVwZGF0ZUFjdGlvbilzZXNzaW9uLmdldEF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OKTsKLSAgIHNlc3Npb24ucmVtb3ZlQXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04pOwotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZhNzUzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVwZGF0ZVJlZ2lzdHJ5QWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVSZWdpc3RyeUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWQ5NGY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVcGRhdGVTZXJ2aWNlQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVTZXJ2aWNlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWlucHV0c1ZhbGlkKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotICAgICBib29sZWFuIHJlZnJlc2hTZXJ2aWNlUmVzdWx0ID0gYWN0aW9uLnJlZnJlc2hGcm9tUmVnaXN0cnkoKTsKLSAgICAgYm9vbGVhbiByZWZyZXNoQnVzaW5lc3NSZXN1bHQgPSBhY3Rpb24ucmVmcmVzaEJ1c2luZXNzRnJvbVJlZ2lzdHJ5KCk7Ci0gICAgIGlmICghcmVmcmVzaFNlcnZpY2VSZXN1bHQpCi0gICAgIHsKLSAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OLGFjdGlvbik7Ci0gICAgICAgaWYgKCFyZWZyZXNoQnVzaW5lc3NSZXN1bHQpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fU0VSVklDRV9QVUJMSVNIX0JVU0lORVNTIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VOZXdQdWJsaXNoQnVzaW5lc3NBY3Rpb25KU1AuanNwIikpJT4iOwotICBlbHNlCi0gICAgcHJvcGVydGllc0NvbnRlbnQucmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUFVCTElTSF9JVEVNIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwIikpJT4iOwotICBlbHNlCi0gICAgcHJvcGVydGllc0NvbnRlbnQucmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YThmMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZU5ld1B1Ymxpc2hCdXNpbmVzc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlTmV3UHVibGlzaEJ1c2luZXNzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlmNmVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlTmV3UHVibGlzaEJ1c2luZXNzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgVXBkYXRlU2VydmljZUFjdGlvbiBhY3Rpb24gPSAoVXBkYXRlU2VydmljZUFjdGlvbilzZXNzaW9uLmdldEF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OKTsKLSAgIHNlc3Npb24ucmVtb3ZlQXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04pOwotCi0gICBSZWdQdWJsaXNoVG9vbCByZWdQdWJsaXNoVG9vbCA9IGFjdGlvbi5zZXR1cFJlZ1B1Ymxpc2hUb29sKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHJlZ1B1Ymxpc2hUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGZhbHNlKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9uc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYmExOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9uc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRhaW5lci5qc3AiKSklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI5ZTUzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICB1ZGRpUGVyc3BlY3RpdmUuc2V0Q2F0ZWdvcnlUTW9kZWxLZXkoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgCi0gICBTdHJpbmdCdWZmZXIgdG9vbGJhckxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwPyIpOwotICAgdG9vbGJhckxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlRJVExFX0NBVEVHT1JZX0JST1dTRVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIwLDMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQSU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBVEVHT1JJRVNfV09SS0FSRUEiKSU+IiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19UT09MQkFSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FURUdPUklFU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodG9vbGJhckxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBVEVHT1JJRVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uZ2V0Q2F0ZWdvcnlDb250ZW50UGFnZShzZXNzaW9uSWQsY2F0ZWdvcnlUTW9kZWxLZXkpKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcwMDNkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLTxqc3A6dXNlQmVhbiBpZD0iY29tbW9uQ2F0ZWdvcnlNb2RlbHMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0iYXBwbGljYXRpb24iLz4KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBVEVHT1JJRVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90cmVldmlldy5jc3MiKSklPiI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdHJlZXZpZXcuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGEoKQotICB7Ci0gICAgdG9wLm9wZW5lci50b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iXS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxjYXRlZ29yeVRNb2RlbEtleSkpKSU+IjsKLSAgfSAgCi08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTwlICAgCi0gICAvLyBDaGVjayBpZiB0aGUgY2F0ZWdvcnkgaXMgYSBjb21tb24gY2F0ZWdvcnkuCi0gICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCljb21tb25DYXRlZ29yeU1vZGVscy5nZXQoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgaWYgKGNhdGVnb3J5TW9kZWwgPT0gbnVsbCkKLSAgIHsKLSAgICAgLy8gVGhlIGNhdGVnb3J5IGlzIHVzZXItZGVmaW5lZC4gICAgIAotICAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUobmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKSk7Ci0gICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7ICAgCi0gICAgIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbClyZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcnkoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgfQotICAgYnl0ZSByYyA9IENhdGVnb3J5TW9kZWwuT1BFUkFUSU9OX1NVQ0NFU1NGVUw7Ci0gICBpZiAoIWNhdGVnb3J5TW9kZWwuaXNEYXRhTG9hZGVkKCkpCi0gICB7Ci0gICAgIHN5bmNocm9uaXplZChjYXRlZ29yeU1vZGVsKQotICAgICB7Ci0gICAgICAgaWYgKCFjYXRlZ29yeU1vZGVsLmlzRGF0YUxvYWRlZCgpKQotICAgICAgICAgcmMgPSBjYXRlZ29yeU1vZGVsLmxvYWRGcm9tRGVmYXVsdERhdGFGaWxlKCk7Ci0gICAgIH0KLSAgIH0KLSAgIGlmIChyYyAhPSBDYXRlZ29yeU1vZGVsLk9QRVJBVElPTl9TVUNDRVNTRlVMKQotICAgewotJT4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9fQ0FURUdPUllfREFUQSIsY2F0ZWdvcnlNb2RlbC5nZXREaXNwbGF5TmFtZSgpKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX0NBVEVHT1JZX0RBVEEiLCJqYXZhc2NyaXB0OnRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGEoKSIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPCUgICAKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgTm9kZU1hbmFnZXIgY2F0ZWdvcnlNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldENhdGVnb3J5TWFuYWdlcihjYXRlZ29yeU1vZGVsKTsKLSAgICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgICBpbnQgZm9jdXNlZE5vZGVJZCA9IGNhdGVnb3J5TWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICAgIFN0cmluZyBmb2N1c2VkQW5jaG9yTmFtZSA9IFN0cmluZy52YWx1ZU9mKGZvY3VzZWROb2RlSWQpOwotICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGNhdGVnb3J5TWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgICB7Ci0gICAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgICBpZiAoZm9jdXNlZE5vZGVJZCA9PSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpCi0gICAgICAgICBmb2N1c2VkQW5jaG9yTmFtZSA9IHNlbGVjdGVkQW5jaG9yTmFtZTsKLSAgICAgfQotJT4KLTxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLTwlPWNhdGVnb3J5TWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2VsZi5sb2NhdGlvbi5oYXNoPSIjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPiIKLSAgc2V0U2VsZWN0ZWRBbmNob3JOYW1lKCI8JT1zZWxlY3RlZEFuY2hvck5hbWUlPiIpOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdkOGQ1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiIgb25VbmxvYWQ9InRvcC5vcGVuZXIuY2F0ZWdvcnlXaW5kb3dDbG9zZWQ9dHJ1ZSI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciI+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9DQVRFR09SSUVTIiklPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdG9wLm9wZW5lci5jYXRlZ29yeVdpbmRvd0Nsb3NlZD1mYWxzZTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NzhhYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvZ2VvLWRhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTM4MyArMCwwIEBACi1nZW8jLS0jV29ybGQjLS0KLWdlbyNBRSNVbml0ZWQgQXJhYiBFbWlyYXRlcyMtLQotZ2VvI0FGI0FmZ2hhbmlzdGFuIy0tCi1nZW8jQUcjQW50aWd1YSBBbmQgQmFyYnVkYSMtLQotZ2VvI0FJI0FuZ3VpbGxhIy0tCi1nZW8jQUwjQWxiYW5pYSMtLQotZ2VvI0FNI0FybWVuaWEjLS0KLWdlbyNBTiNOZXRoZXJsYW5kcyBBbnRpbGxlcyMtLQotZ2VvI0FPI0FuZ29sYSMtLQotZ2VvI0FRI0FudGFyY3RpY2EjLS0KLWdlbyNBUiNBcmdlbnRpbmEjLS0KLWdlbyNBUi1BI1NhbHRhI0FSCi1nZW8jQVItQiNCdWVub3MgQWlyZXMjQVIKLWdlbyNBUi1DI0Rpc3RyaXRvIEZlZGVyYWwjQVIKLWdlbyNBUi1EI1NhbiBMdWlzI0FSCi1nZW8jQVItRSNFbnRyZSBSaW9zI0FSCi1nZW8jQVItRiNMYSBSaW9qYSNBUgotZ2VvI0FSLUcjU2FudGlhZ28gRGVsIEVzdGVybyNBUgotZ2VvI0FSLUgjQ2hhY28jQVIKLWdlbyNBUi1KI1NhbiBKdWFuI0FSCi1nZW8jQVItSyNDYXRhbWFyY2EjQVIKLWdlbyNBUi1MI0xhIFBhbXBhI0FSCi1nZW8jQVItTSNNZW5kb3phI0FSCi1nZW8jQVItTiNNaXNpb25lcyNBUgotZ2VvI0FSLVAjRm9ybW9zYSNBUgotZ2VvI0FSLVEjTmV1cXVlbiNBUgotZ2VvI0FSLVIjUmlvIE5lZ3JvI0FSCi1nZW8jQVItUyNTYW50YSBGZSNBUgotZ2VvI0FSLVQjVHVjdW1hbiNBUgotZ2VvI0FSLVUjQ2h1YnV0I0FSCi1nZW8jQVItViNUaWVycmEgRGVsIEZ1ZWdvI0FSCi1nZW8jQVItVyNDb3JyaWVudGVzI0FSCi1nZW8jQVItWCNDb3Jkb2JhI0FSCi1nZW8jQVItWSNKdWp1eSNBUgotZ2VvI0FSLVojU2FudGEgQ3J1eiNBUgotZ2VvI0FTI0FtZXJpY2FuIFNhbW9hIy0tCi1nZW8jQVQjQXVzdHJpYSMtLQotZ2VvI0FVI0F1c3RyYWxpYSMtLQotZ2VvI0FVLUNUI0F1c3RyYWxpYW4gQ2FwaXRhbCBUZXJyaXRvcnkjQVUKLWdlbyNBVS1OUyNOZXcgU291dGggV2FsZXMjQVUKLWdlbyNBVS1OVCNOb3J0aGVybiBUZXJyaXRvcnkjQVUKLWdlbyNBVS1RTCNRdWVlbnNsYW5kI0FVCi1nZW8jQVUtU0EjU291dGggQXVzdHJhbGlhI0FVCi1nZW8jQVUtVFMjVGFzbWFuaWEjQVUKLWdlbyNBVS1WSSNWaWN0b3JpYSNBVQotZ2VvI0FVLVdBI1dlc3Rlcm4gQXVzdHJhbGlhI0FVCi1nZW8jQVcjQXJ1YmEjLS0KLWdlbyNBWiNBemVyYmFpamFuIy0tCi1nZW8jQkEjQm9zbmlhLUhlcmNlZ292aW5hIy0tCi1nZW8jQkIjQmFyYmFkb3MjLS0KLWdlbyNCRCNCYW5nbGFkZXNoIy0tCi1nZW8jQkUjQmVsZ2l1bSMtLQotZ2VvI0JGI0J1cmtpbmEgRmFzbyMtLQotZ2VvI0JHI0J1bGdhcmlhIy0tCi1nZW8jQkgjQmFocmFpbiMtLQotZ2VvI0JJI0J1cnVuZGkjLS0KLWdlbyNCSiNCZW5pbiMtLQotZ2VvI0JNI0Jlcm11ZGEjLS0KLWdlbyNCTiNCcnVuZWkgRGFydXNzYWxhbSMtLQotZ2VvI0JPI0JvbGl2aWEjLS0KLWdlbyNCUiNCcmF6aWwjLS0KLWdlbyNCUi1BQyNBY3JlI0JSCi1nZW8jQlItQUwjQWxhZ29hcyNCUgotZ2VvI0JSLUFNI0FtYXpvbmFzI0JSCi1nZW8jQlItQVAjQW1hcGEjQlIKLWdlbyNCUi1CQSNCYWhpYSNCUgotZ2VvI0JSLUNFI0NlYXJhI0JSCi1nZW8jQlItREYjRGlzdHJpdG8gRmVkZXJhbCNCUgotZ2VvI0JSLUVTI0VzcGlyaXRvIFNhbnRvI0JSCi1nZW8jQlItR08jR29pYXMjQlIKLWdlbyNCUi1NQSNNYXJhbmhhbyNCUgotZ2VvI0JSLU1HI01pbmFzIEdlcmFpcyNCUgotZ2VvI0JSLU1TI01hdG8gR3Jvc3NvIERvIFN1bCNCUgotZ2VvI0JSLU1UI01hdG8gR3Jvc3NvI0JSCi1nZW8jQlItUEEjUGFyYSNCUgotZ2VvI0JSLVBCI1BhcmFpYmEjQlIKLWdlbyNCUi1QRSNQZXJuYW1idWNvI0JSCi1nZW8jQlItUEkjUGlhdWkjQlIKLWdlbyNCUi1QUiNQYXJhbmEjQlIKLWdlbyNCUi1SSiNSaW8gRGUgSmFuZWlybyNCUgotZ2VvI0JSLVJOI1JpbyBHcmFuZGUgRG8gTm9ydGUjQlIKLWdlbyNCUi1STyNSb25kb25pYSNCUgotZ2VvI0JSLVJSI1JvcmFpbWEjQlIKLWdlbyNCUi1SUyNSaW8gR3JhbmRlIERvIFN1bCNCUgotZ2VvI0JSLVNDI1NhbnRhIENhdGFyaW5hI0JSCi1nZW8jQlItU0UjU2VyZ2lwZSNCUgotZ2VvI0JSLVNQI1NhbyBQYXVsbyNCUgotZ2VvI0JSLVRPI1RvY2FudGluYSNCUgotZ2VvI0JTI0JhaGFtYXMjLS0KLWdlbyNCVCNCaHV0YW4jLS0KLWdlbyNCVSNCdXJtYSAoU2VlIE1NIE15YW5tYXIpIy0tCi1nZW8jQlcjQm90c3dhbmEjLS0KLWdlbyNCWSNCZWxhcnVzIy0tCi1nZW8jQlktQlIjQnJlc3Rza2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1ITyNIb215ZWwnc2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlktSFIjSHJvZHplbnNrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JZLU1BI01haGlseW93c2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlktTUkjTWluc2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlktVkkjVml0c3llYnNrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JaI0JlbGl6ZSMtLQotZ2VvI0NBI0NhbmFkYSMtLQotZ2VvI0NBLUFCI0FsYmVydGEjQ0EKLWdlbyNDQS1CQyNCcml0aXNoIENvbHVtYmlhI0NBCi1nZW8jQ0EtTUIjTWFuaXRvYmEjQ0EKLWdlbyNDQS1OQiNOZXcgQnJ1bnN3aWNrI0NBCi1nZW8jQ0EtTkYjTmV3Zm91bmRsYW5kI0NBCi1nZW8jQ0EtTlMjTm92YSBTY290aWEjQ0EKLWdlbyNDQS1OVCNOb3J0aHdlc3QgVGVycml0b3JpZXMjQ0EKLWdlbyNDQS1OVSNOdW5hdnV0I0NBCi1nZW8jQ0EtT04jT250YXJpbyNDQQotZ2VvI0NBLVBFI1ByaW5jZSBFZHdhcmQgSXNsYW5kI0NBCi1nZW8jQ0EtUUMjUXVlYmVjI0NBCi1nZW8jQ0EtU0sjU2Fza2F0Y2hld2FuI0NBCi1nZW8jQ0EtWVQjWXVrb24gVGVycml0b3J5I0NBCi1nZW8jQ0MjQ29jb3MgKEtlZWxpbmcpIElzbGFuZHMjLS0KLWdlbyNDRCMiQ29uZ28sIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YiIy0tCi1nZW8jQ0YjQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIy0tCi1nZW8jQ0cjQ29uZ28jLS0KLWdlbyNDSCNTd2l0emVybGFuZCMtLQotZ2VvI0NILUFHI0FhcmdhdSNDSAotZ2VvI0NILUFJI0FwcGVuemVsbCBJbm5lci1SaG9kZW4jQ0gKLWdlbyNDSC1BUiNBcHBlbnplbGwgQXVzc2VyLVJob2RlbiNDSAotZ2VvI0NILUJFI0Jlcm4jQ0gKLWdlbyNDSC1CTCNCYXNlbC1MYW5kc2NoYWZ0I0NICi1nZW8jQ0gtQlMjQmFzZWwtU3RhZHQjQ0gKLWdlbyNDSC1GUiNGcmlib3VyZyNDSAotZ2VvI0NILUdFI0dlbsOodmUjQ0gKLWdlbyNDSC1HTCNHbGFydXMjQ0gKLWdlbyNDSC1HUiNHcmF1YsO8bmRlbiNDSAotZ2VvI0NILUpVI0p1cmEjQ0gKLWdlbyNDSC1MVSNMdXplcm4jQ0gKLWdlbyNDSC1ORSNOZXVjaGF0ZWwjQ0gKLWdlbyNDSC1OVyNOaWR3YWxkZW4jQ0gKLWdlbyNDSC1PVyNPYndhbGRlbiNDSAotZ2VvI0NILVNHI1N0IEdhbGxlbiNDSAotZ2VvI0NILVNII1NjaGFmZmhhdXNlbiNDSAotZ2VvI0NILVNPI1NvbG90aHVybiNDSAotZ2VvI0NILVNaI1NjaHd5eiNDSAotZ2VvI0NILVRHI1RodXJnYXUjQ0gKLWdlbyNDSC1USSNUaWNpbm8jQ0gKLWdlbyNDSC1VUiNVcmkjQ0gKLWdlbyNDSC1WRCNWYXVkI0NICi1nZW8jQ0gtVlMjVmFsYWlzI0NICi1nZW8jQ0gtWkcjWnVnI0NICi1nZW8jQ0gtWkgjWsO8cmljaCNDSAotZ2VvI0NJI0NvdGUgRCdJdm9pcmUjLS0KLWdlbyNDSyNDb29rIElzbGFuZHMjLS0KLWdlbyNDTCNDaGlsZSMtLQotZ2VvI0NNI0NhbWVyb29uIy0tCi1nZW8jQ04jQ2hpbmEjLS0KLWdlbyNDTi0xMSNCZWlqaW5nI0NOCi1nZW8jQ04tMTIjVGlhbmppbiNDTgotZ2VvI0NOLTEzI0hlYmVpI0NOCi1nZW8jQ04tMTQjU2hhbnhpI0NOCi1nZW8jQ04tMTUjTmVpIE1vbmdvbCNDTgotZ2VvI0NOLTIxI0xpYW9uaW5nI0NOCi1nZW8jQ04tMjIjSmlsaW4jQ04KLWdlbyNDTi0yMyNIZWlsb25namlhbmcjQ04KLWdlbyNDTi0zMSNTaGFuZ2hhaSNDTgotZ2VvI0NOLTMyI0ppYW5nc3UjQ04KLWdlbyNDTi0zMyNaaGVqaWFuZyNDTgotZ2VvI0NOLTM0I0FuaHVpI0NOCi1nZW8jQ04tMzUjRnVqaWFuI0NOCi1nZW8jQ04tMzYjSmlhbmd4aSNDTgotZ2VvI0NOLTM3I1NoYW5kb25nI0NOCi1nZW8jQ04tNDEjSGVuYW4jQ04KLWdlbyNDTi00MiNIdWJlaSNDTgotZ2VvI0NOLTQzI0h1bmFuI0NOCi1nZW8jQ04tNDQjR3Vhbmdkb25nI0NOCi1nZW8jQ04tNDUjR3Vhbmd4aSNDTgotZ2VvI0NOLTQ2I0hhaW5hbiNDTgotZ2VvI0NOLTUxI1NpY2h1YW4jQ04KLWdlbyNDTi01MiNHdWl6aG91I0NOCi1nZW8jQ04tNTMjWXVubmFuI0NOCi1nZW8jQ04tNTQjWGl6YW5nI0NOCi1nZW8jQ04tNjEjU2hhYW54aSNDTgotZ2VvI0NOLTYyI0dhbnN1I0NOCi1nZW8jQ04tNjMjUWluZ2hhaSNDTgotZ2VvI0NOLTY0I05pbmd4aWEjQ04KLWdlbyNDTi02NSNYaW5qaWFuZyNDTgotZ2VvI0NOLTcxI1RhaXdhbiNDTgotZ2VvI0NOLTkxI1hpYW5nZ2FuZyAoSG9uZyBLb25nKSNDTgotZ2VvI0NOLTkyI0FvbWVuIChNYWNhdSkjQ04KLWdlbyNDTyNDb2xvbWJpYSMtLQotZ2VvI0NSI0Nvc3RhIFJpY2EjLS0KLWdlbyNDUyNGb3JtZXIgQ3plY2hvc2xvdmFraWEjLS0KLWdlbyNDVSNDdWJhIy0tCi1nZW8jQ1YjQ2FwZSBWZXJkZSMtLQotZ2VvI0NYI0NocmlzdG1hcyBJc2xhbmRzIy0tCi1nZW8jQ1kjQ3lwcnVzIy0tCi1nZW8jQ1ojQ3plY2ggUmVwdWJsaWMjLS0KLWdlbyNERSMiR2VybWFueSwgRmVkZXJhbCBSZXB1YmxpYyBvZiIjLS0KLWdlbyNERS1CRSNCZXJsaW4jREUKLWdlbyNERS1CUiNCcmFuZGVuYnVyZyNERQotZ2VvI0RFLUJXI0JhZGVuLVfDvHJ0dGVtYmVyZyNERQotZ2VvI0RFLUJZI0JheWVybiNERQotZ2VvI0RFLUhCI0JyZW1lbiAoSGFuc2VzdGFkdCkjREUKLWdlbyNERS1IRSNIZXNzZW4jREUKLWdlbyNERS1ISCNIYW1idXJnIChIYW5zZXN0YWR0KSNERQotZ2VvI0RFLU1WI01lY2tsZW5idXJnLVZvcnBvbW1lcm4jREUKLWdlbyNERS1OSSNOaWVkZXJzYWNoc2VuI0RFCi1nZW8jREUtTlcjTm9yZHJoZWluLVdlc3RmYWxlbiNERQotZ2VvI0RFLVJQI1JoZWlubGFuZC1QZmFseiNERQotZ2VvI0RFLVNII1NjaGxlc3dpZy1Ib2xzdGVpbiNERQotZ2VvI0RFLVNMI1NhYXJsYW5kI0RFCi1nZW8jREUtU04jU2FjaHNlbiNERQotZ2VvI0RFLVNUI1NhY2hzZW4tQW5oYWx0I0RFCi1nZW8jREUtVEgjVGjDvHJpbmdlbiNERQotZ2VvI0RKI0RqaWJvdXRpIy0tCi1nZW8jREsjRGVubWFyayMtLQotZ2VvI0RNI0RvbWluaWNhIy0tCi1nZW8jRE8jRG9taW5pY2FuIFJlcHVibGljIy0tCi1nZW8jRE8tMDIjQXp1YSNETwotZ2VvI0RPLTAzI0JhaG9ydWNvI0RPCi1nZW8jRE8tMDQjQmFyYWhvbmEjRE8KLWdlbyNETy0wNSNEYWphYsOzbiNETwotZ2VvI0RPLTA2I0R1YXJ0ZSNETwotZ2VvI0RPLTA4I0VsIFNleWJvI0RPCi1nZW8jRE8tMDkjRXNwYWlsbGF0I0RPCi1nZW8jRE8tMzAjSGF0byBNYXlvciNETwotZ2VvI0RPLTEwI0luZGVwZW5kZW5jaWEjRE8KLWdlbyNETy0xMSNMYSBBbHRhZ3JhY2lhI0RPCi1nZW8jRE8tMDcjTGEgRXN0cmVsbGV0YSNETwotZ2VvI0RPLTEyI0xhIFJvbWFuYSNETwotZ2VvI0RPLTEzI0xhIFZlZ2EjRE8KLWdlbyNETy0xNCNNYXLDrWEgVHJpbmlkYWQgU8OhbmNoZXojRE8KLWdlbyNETy0yOCNNb25zZW5vciBOb3VlbCNETwotZ2VvI0RPLTE1I01vbnRlIENyaXN0aSNETwotZ2VvI0RPLTI5I01vbnRlIFBsYXRhI0RPCi1nZW8jRE8tMTYjUGVkZXJuYWxlcyNETwotZ2VvI0RPLTE3I1BlcmF2aWEjRE8KLWdlbyNETy0xOCNQdWVydG8gUGxhdGEjRE8KLWdlbyNETy0xOSNTb2xjZWRvI0RPCi1nZW8jRE8tMjAjU2FtYW7DoSNETwotZ2VvI0RPLTIxI1NhbiBDcmlzdMOzYmFsI0RPCi1nZW8jRE8tMjIjU2FuIEp1YW4jRE8KLWdlbyNETy0yMyNTYW4gUGVkcm8gZGUgTWFjb3LDrXMjRE8KLWdlbyNETy0yNCNTw6FuY2hleiBSYW3DrXJleiNETwotZ2VvI0RPLTI1I1NhbnRpYWdvI0RPCi1nZW8jRE8tMjYjU2FudGlhZ28gUm9kcsOtZ3VleiNETwotZ2VvI0RPLTI3I1ZhbHZlcmRlI0RPCi1nZW8jRFojQWxnZXJpYSMtLQotZ2VvI0VDI0VjdWFkb3IjLS0KLWdlbyNFRSNFc3RvbmlhIy0tCi1nZW8jRUcjRWd5cHQjLS0KLWdlbyNFSCNXZXN0ZXJuIFNhaGFyYSMtLQotZ2VvI0VSI0VyaXRyZWEjLS0KLWdlbyNFUi1BTiNBbnNlYmEjRVIKLWdlbyNFUi1EVSNEZWJ1YiNFUgotZ2VvI0VSLURLI0RlYnViYXdpIEtleWloIEJhaHJpIFtEZWJ1Yi1LZWloLUJhaHJpXSNFUgotZ2VvI0VSLUdCI0dhc2gtQmFya2EjRVIKLWdlbyNFUi1NQSNNYWFrZWwgW01hZWtlbF0jRVIKLWdlbyNFUi1TSyNTZW1lbmF3aSBLZXlpaCBCYWhyaSBbU2VtaWVuLUtlaWgtQmFocmldI0VSCi1nZW8jRVMjU3BhaW4jLS0KLWdlbyNFUy1BTiNBbmRhbHVjw61hI0VTCi1nZW8jRVMtQUwjQWxtZXLDrWEjRVMtQU4KLWdlbyNFUy1DQSNDw6FkaXojRVMtQU4KLWdlbyNFUy1DTyNDw7NyZG9iYSNFUy1BTgotZ2VvI0VTLUdSI0dyYW5hZGEjRVMtQU4KLWdlbyNFUy1II0h1ZWx2YSNFUy1BTgotZ2VvI0VTLUojSmHDqW4jRVMtQU4KLWdlbyNFUy1NQSNNw6FsYWdhI0VTLUFOCi1nZW8jRVMtU0UjU2V2aWxsYSNFUy1BTgotZ2VvI0VTLUFSI0FyYWfDs24jRVMKLWdlbyNFUy1IVSNIdWVzY2EjRVMtQVIKLWdlbyNFUy1URSNUZXJ1ZWwjRVMtQVIKLWdlbyNFUy1aI1phcmFnb3phI0VTLUFSCi1nZW8jRVMtTyMiQXN0dXJpYXMsIFByaW5jaXBhZG8gZGUiI0VTCi1nZW8jRVMtQ04jQ2FuYXJpYXMjRVMKLWdlbyNFUy1HQyNMYXMgUGFsbWFzI0VTLUNOCi1nZW8jRVMtVEYjU2FudGEgQ3J1eiBkZSBUZW5lcmlmZSNFUy1DTgotZ2VvI0VTLVMjQ2FudGFicmlhI0VTCi1nZW8jRVMtQ00jQ2FzdGlsbGEtTGEgTWFuY2hhI0VTCi1nZW8jRVMtQUIjQWxiYWNldGUjRVMtQ00KLWdlbyNFUy1DUiNDdWlkYWQgUmVhbCNFUy1DTQotZ2VvI0VTLUNVI0N1ZW5jYSNFUy1DTQotZ2VvI0VTLUdVI0d1YWRhbGFqYXJhI0VTLUNNCi1nZW8jRVMtVE8jVG9sZWRvI0VTLUNNCi1nZW8jRVMtQ0wjQ2FzdGlsbGEgeSBMZcOzbiNFUwotZ2VvI0VTLUFWI8OBdmlsYSNFUy1DTAotZ2VvI0VTLUJVI0J1cmdvcyNFUy1DTAotZ2VvI0VTLUxFI0xlw7NuI0VTLUNMCi1nZW8jRVMtUCNQYWxlbmNpYSNFUy1DTAotZ2VvI0VTLVNBI1NhbGFtYW5jYSNFUy1DTAotZ2VvI0VTLVNHI1NlZ292aWEjRVMtQ0wKLWdlbyNFUy1TTyNTb3JpYSNFUy1DTAotZ2VvI0VTLVZBI1ZhbGxhZG9saWQjRVMtQ0wKLWdlbyNFUy1aQSNaYW1vcmEjRVMtQ0wKLWdlbyNFUy1DVCNDYXRhbHVuYSNFUwotZ2VvI0VTLUIjQmFyY2Vsb25hI0VTLUNUCi1nZW8jRVMtR0UjR2lyb25hIFtHZXJvbmFdI0VTLUNUCi1nZW8jRVMtTCNMbGVpZGEgW0zDqXJ1ZGFdI0VTLUNUCi1nZW8jRVMtVCNUYXJyYWdvbmEjRVMtQ1QKLWdlbyNFUy1FWCNFeHRyZW1hZHVyYSNFUwotZ2VvI0VTLUJBI0JhZGFqb3ojRVMtRVgKLWdlbyNFUy1DQyNDw6FjZXJlcyNFUy1FWAotZ2VvI0VTLUdBI0dhbGljaWEjRVMKLWdlbyNFUy1DI0xhIENvcnVuYSNFUy1HQQotZ2VvI0VTLUxVI0x1Z28jRVMtR0EKLWdlbyNFUy1PUiNPcmVuc2UjRVMtR0EKLWdlbyNFUy1QTyNQb250ZXZlZHJhI0VTLUdBCi1nZW8jRVMtUE0jSXNsYXMgQmFsZWFyZXMjRVMKLWdlbyNFUy1MTyNMYSBSaW9qYSNFUwotZ2VvI0VTLU0jIk1hZHJpZCwgQ29tdW5pZGFkIGRlIiNFUwotZ2VvI0VTLU1VIyJNdXJjaWEsIFJlZ2nDs24gZGUiI0VTCi1nZW8jRVMtTkEjIk5hdmFycmEsIENvbXVuaWRhZCBGb3JhbCBkZSIjRVMKLWdlbyNFUy1QViNQYcOtcyBWYXNjaSNFUwotZ2VvI0VTLVZJI8OBbGF2YSNFUy1QVgotZ2VvI0VTLVNTI0d1aXDDunpjb2EjRVMtUFYKLWdlbyNFUy1CSSNWaXpjYXlhI0VTLVBWCi1nZW8jRVMtVkMjIlZhbGVuY2lhbmEsIENvbXVuaWRhZCIjRVMKLWdlbyNFUy1BI0FsaWNhbnRlI0VTLVZDCi1nZW8jRVMtQ1MjQ2FzdGVsbMOzbiNFUy1WQwotZ2VvI0VTLVYjVmFsZW5jaWEjRVMtVkMKLWdlbyNFUy1DRSNDZXV0YSNFUwotZ2VvI0VTLU1MI01lbGlsbGEjRVMKLWdlbyNFVCNFdGhpb3BpYSMtLQotZ2VvI0ZJI0ZpbmxhbmQjLS0KLWdlbyNGSS1BTCNBaHZlbmFubWFhbiBNYWFrdW50YSAoRmkpIMOFbGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktRVMjRXRlbMOkLVN1b21lbiBMw6TDpG5pIChGaSkgU8O2ZHJhIEZpbmxhbmRzIEzDpG4gKFN2KSNGSQotZ2VvI0ZJLUlTI0l0w6QtU3VvbWVuIEzDpMOkbmkgKEZpKSDDlnN0cmEgRmlubGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktTEwjTGFwaW4gTMOkw6RuaSAoRmkpIExhcGxhbmRzIEzDpG4gKFN2KSNGSQotZ2VvI0ZJLUxTI0zDpG5zaS1TdW9tZW4gTMOkw6RuaSAoRmkpIFbDpHN0cmEgRmlubGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktT0wjT3VsdW4gTMOkw6RuaSAoRmkpIFVsZcOlYm9yZ3MgTMOkbiAoU3YpI0ZJCi1nZW8jRkojRmlqaSMtLQotZ2VvI0ZLI0ZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKSMtLQotZ2VvI0ZNI0ZlZGVyYXRlZCBTdGF0ZXMgT2YgTWljcm9uZXNpYSMtLQotZ2VvI0ZPI0ZhZXJvZSBJc2xhbmRzIy0tCi1nZW8jRlIjRnJhbmNlIy0tCi1nZW8jRlItMDEjQWluI0ZSLVYKLWdlbyNGUi0wMiNBaXNuZSNGUi1TCi1nZW8jRlItMDMjQWxsaWVyI0ZSLUMKLWdlbyNGUi0wNCNBbHBlcy1EZS1IYXV0ZS1Qcm92ZW5jZSNGUi1VCi1nZW8jRlItMDUjSGF1dGVzLUFscGVzI0ZSLVUKLWdlbyNGUi0wNiNBbHBlcy1NYXJpdGltZXMjRlItVQotZ2VvI0ZSLTA3I0FyZMOoY2hlI0ZSLVYKLWdlbyNGUi0wOCNBcmRlbm5lcyNGUi1HCi1nZW8jRlItMDkjQXJpw6hnZSNGUi1OCi1nZW8jRlItMTAjQXViZSNGUi1HCi1nZW8jRlItMTEjQXVkZSNGUi1LCi1nZW8jRlItMTIjQXZleXJvbiNGUi1OCi1nZW8jRlItMTMjQm91Y2hlcy1EdS1SaMO0bmUjRlItVQotZ2VvI0ZSLTE0I0NhbHZhZG9zI0ZSLVAKLWdlbyNGUi0xNSNDYW50YWwjRlItQwotZ2VvI0ZSLTE2I0NoYXJlbnRlI0ZSLVQKLWdlbyNGUi0xNyNDaGFyZW50ZS1NYXJpdGltZSNGUi1UCi1nZW8jRlItMTgjQ2hlciNGUi1GCi1nZW8jRlItMTkjQ29ycsOoemUjRlItTAotZ2VvI0ZSLTIxI0PDtHRlLUQnT3IjRlItRAotZ2VvI0ZSLTIyI0PDtHRlcy1EJ0FybW9yI0ZSLUUKLWdlbyNGUi0yMyNDcmV1c2UjRlItTAotZ2VvI0ZSLTI0I0RvcmRvZ25lI0ZSLUIKLWdlbyNGUi0yNSNEb3VicyNGUi1JCi1nZW8jRlItMjYjRHLDtG1lI0ZSLVYKLWdlbyNGUi0yNyNFdXJlI0ZSLVEKLWdlbyNGUi0yOCNFdXJlLUV0LUxvaXIjRlItRgotZ2VvI0ZSLTI5I0ZpbmlzdMOocmUjRlItRQotZ2VvI0ZSLTJBI0NvcnNlLUR1LVN1ZCNGUi1ICi1nZW8jRlItMkIjSGF1dGUtQ29yc2UjRlItSAotZ2VvI0ZSLTMwI0dhcmQjRlItSwotZ2VvI0ZSLTMxI0hhdXRlLUdhcm9ubmUjRlItTgotZ2VvI0ZSLTMyI0dlcnMjRlItTgotZ2VvI0ZSLTMzI0dpcm9uZGUjRlItQgotZ2VvI0ZSLTM0I0jDqXJhdWx0I0ZSLUsKLWdlbyNGUi0zNSNJbGxlLUV0LVZpbGFpbmUjRlItRQotZ2VvI0ZSLTM2I0luZHJlI0ZSLUYKLWdlbyNGUi0zNyNJbmRyZS1FdC1Mb2lyZSNGUi1GCi1nZW8jRlItMzgjSXPDqHJlI0ZSLVYKLWdlbyNGUi0zOSNKdXJhI0ZSLUkKLWdlbyNGUi00MCNMYW5kZXMjRlItQgotZ2VvI0ZSLTQxI0xvaXItRXQtQ2hlciNGUi1GCi1nZW8jRlItNDIjTG9pcmUjRlItVgotZ2VvI0ZSLTQzI0hhdXRlLUxvaXJlI0ZSLUMKLWdlbyNGUi00NCNMb2lyZS1BdGxhbnRpcXVlI0ZSLVIKLWdlbyNGUi00NSNMb2lyZXQjRlItRgotZ2VvI0ZSLTQ2I0xvdCNGUi1OCi1nZW8jRlItNDcjTG90LUV0LUdhcm9ubmUjRlItQgotZ2VvI0ZSLTQ4I0xvesOocmUjRlItSwotZ2VvI0ZSLTQ5I01haW5lLUV0LUxvaXJlI0ZSLVIKLWdlbyNGUi01MCNNYW5jaGUjRlItUAotZ2VvI0ZSLTUxI01hcm5lI0ZSLUcKLWdlbyNGUi01MiNIYXV0ZS1NYXJuZSNGUi1HCi1nZW8jRlItNTMjTWF5ZW5uZSNGUi1SCi1nZW8jRlItNTQjTWV1cnRoZS1FdC1Nb3NlbGxlI0ZSLU0KLWdlbyNGUi01NSNNZXVzZSNGUi1NCi1nZW8jRlItNTYjTW9yYmloYW4jRlItRQotZ2VvI0ZSLTU3I01vc2VsbGUjRlItTQotZ2VvI0ZSLTU4I05pw6h2cmUjRlItRAotZ2VvI0ZSLTU5I05vcmQjRlItTwotZ2VvI0ZSLTYwI09pc2UjRlItUwotZ2VvI0ZSLTYxI09ybmUjRlItUAotZ2VvI0ZSLTYyI1Bhcy1EZS1DYWxhaXMjRlItTwotZ2VvI0ZSLTYzI1B1eS1EZS1Ew7RtZSNGUi1DCi1nZW8jRlItNjQjUHlyw6luw6llcy1BdGxhbnRpcXVlcyNGUi1CCi1nZW8jRlItNjUjSGF1dGVzLVB5csOpbsOpZXMjRlItTgotZ2VvI0ZSLTY2I1B5csOpbsOpZXMtT3JpZW50YWxlcyNGUi1LCi1nZW8jRlItNjcjQmFzLVJoaW4jRlItQQotZ2VvI0ZSLTY4I0hhdXQtUmhpbiNGUi1BCi1nZW8jRlItNjkjUmjDtG5lI0ZSLVYKLWdlbyNGUi03MCNIYXV0ZS1TYcO0bmUjRlItSQotZ2VvI0ZSLTcxI1Nhw7RuZS1FdC1Mb2lyZSNGUi1ECi1nZW8jRlItNzIjU2FydGhlI0ZSLVIKLWdlbyNGUi03MyNTYXZvaWUjRlItVgotZ2VvI0ZSLTc0I0hhdXRlLVNhdm9pZSNGUi1WCi1nZW8jRlItNzUjUGFyaXMjRlItSgotZ2VvI0ZSLTc2I1NlaW5lLU1hcml0aW1lI0ZSLVEKLWdlbyNGUi03NyNTZWluZS1FdC1NYXJuZSNGUi1KCi1nZW8jRlItNzgjWXZlbGluZXMjRlItSgotZ2VvI0ZSLTc5I0RldXgtU8OodnJlcyNGUi1CCi1nZW8jRlItODAjU29tbWUjRlItUwotZ2VvI0ZSLTgxI1Rhcm4jRlItTgotZ2VvI0ZSLTgyI1Rhcm4tRXQtR2Fyb25uZSNGUi1OCi1nZW8jRlItODMjVmFyI0ZSLVUKLWdlbyNGUi04NCNWYXVjbHVzZSNGUi1VCi1nZW8jRlItODUjVmVuZMOpZSNGUi1SCi1nZW8jRlItODYjVmllbm5lI0ZSLVQKLWdlbyNGUi04NyNIYXV0ZS1WaWVubmUjRlItTAotZ2VvI0ZSLTg4I1Zvc2dlcyNGUi1NCi1nZW8jRlItODkjWW9ubmUjRlItRAotZ2VvI0ZSLTkwI1RlcnJpdG9pcmUgRGUgQmVsZm9ydCNGUi1JCi1nZW8jRlItOTEjRXNzb25uZSNGUi1KCi1nZW8jRlItOTIjSGF1dHMtRGUtU2VpbmUjRlItSgotZ2VvI0ZSLTkzI1NlaW5lLVNhaW50LURlbmlzI0ZSLUoKLWdlbyNGUi05NCNWYWwtRGUtTWFybmUjRlItSgotZ2VvI0ZSLTk1I1ZhbC1EJ09pc2UjRlItSgotZ2VvI0ZSLUEjQWxzYWNlI0ZSCi1nZW8jRlItQiNBcXVpdGFpbmUjRlIKLWdlbyNGUi1DI0F1dmVyZ25lI0ZSCi1nZW8jRlItRCNCb3VyZ29nbmUjRlIKLWdlbyNGUi1FI0JyZXRhZ25lI0ZSCi1nZW8jRlItRiNDZW50cmUjRlIKLWdlbyNGUi1HI0NoYW1wYWduZS1BcmRlbm5lI0ZSCi1nZW8jRlItSCNDb3JzZSNGUgotZ2VvI0ZSLUkjRnJhbmNoZS1Db210w6kjRlIKLWdlbyNGUi1KI0lsZS1EZS1GcmFuY2UjRlIKLWdlbyNGUi1LI0xhbmd1ZWRvYy1Sb3Vzc2lsbG9uI0ZSCi1nZW8jRlItTCNMaW1vdXNpbiNGUgotZ2VvI0ZSLU0jTG9ycmFpbmUjRlIKLWdlbyNGUi1OI01pZGktUHlyw6luw6llcyNGUgotZ2VvI0ZSLU8jTm9yZC1QYXMtRGUtQ2FsYWlzI0ZSCi1nZW8jRlItUCNCYXNzZS1Ob3JtYW5kaWUjRlIKLWdlbyNGUi1RI0hhdXRlLU5vcm1hbmRpZSNGUgotZ2VvI0ZSLVIjUGF5cyBEZSBMYSBMb2lyZSNGUgotZ2VvI0ZSLVMjUGljYXJkaWUjRlIKLWdlbyNGUi1UI1BvaXRvdS1DaGFyZW50ZXMjRlIKLWdlbyNGUi1VI1Byb3ZlbmNlLUFscGVzLUPDtHRlIEQnQXp1ciNGUgotZ2VvI0ZSLVYjUmjDtG5lLUFscGVzI0ZSCi1nZW8jR0EjR2Fib24jLS0KLWdlbyNHQiNVbml0ZWQgS2luZ2RvbSMtLQotZ2VvI0dCLUFOVCNBbnRyaW0jR0ItTklSCi1nZW8jR0ItQVJEI0FyZHMjR0ItTklSCi1nZW8jR0ItQVJNI0FybWFnaCNHQi1OSVIKLWdlbyNHQi1BVk4jQXZvbiNHQi1FTkcKLWdlbyNHQi1CREYjQmVkZm9yZHNoaXJlI0dCLUVORwotZ2VvI0dCLUJGUyNCZWxmYXN0I0dCLU5JUgotZ2VvI0dCLUJLTSNCdWNraW5naGFtc2hpcmUjR0ItRU5HCi1nZW8jR0ItQkxBI0JhbGx5bWVuYSNHQi1OSVIKLWdlbyNHQi1CTFkjQmFsbHltb25leSNHQi1OSVIKLWdlbyNHQi1CTkIjQmFuYnJpZGdlI0dCLU5JUgotZ2VvI0dCLUJPUiNCb3JkZXJzIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1CUksjQmVya3NoaXJlI0dCLUVORwotZ2VvI0dCLUNBTSNDYW1icmlkZ2VzaGlyZSNHQi1FTkcKLWdlbyNHQi1DRU4jQ2VudHJhbCBSZWdpb24jR0ItU0NUCi1nZW8jR0ItQ0dWI0NyYWlnYXZvbiNHQi1OSVIKLWdlbyNHQi1DSEEjQ2hhbm5lbCBJc2xhbmRzI0dCCi1nZW8jR0ItQ0hTI0NoZXNoaXJlI0dCLUVORwotZ2VvI0dCLUNLRiNDYXJyaWNrZmVyZ3VzI0dCLU5JUgotZ2VvI0dCLUNLVCNDb29rc3Rvd24jR0ItTklSCi1nZW8jR0ItQ0xSI0NvbGVyYWluZSNHQi1OSVIKLWdlbyNHQi1DTFYjQ2xldmVsYW5kI0dCLUVORwotZ2VvI0dCLUNNQSNDdW1icmlhI0dCLUVORwotZ2VvI0dCLUNPTiNDb3Jud2FsbCNHQi1FTkcKLWdlbyNHQi1DU1IjQ2FzdGxlcmVhZ2gjR0ItTklSCi1nZW8jR0ItQ1dEI0Nsd3lkI0dCLVdMUwotZ2VvI0dCLURCWSNEZXJieXNoaXJlI0dCLUVORwotZ2VvI0dCLURGRCNEeWZlZCNHQi1XTFMKLWdlbyNHQi1ER04jRHVuZ2Fubm9uI0dCLU5JUgotZ2VvI0dCLURHWSNEdW1mcmllcyAmIEdhbGxvd2F5IFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1ET1IjRG9yc2V0I0dCLUVORwotZ2VvI0dCLURPVyNEb3duI0dCLU5JUgotZ2VvI0dCLURSWSNEZXJyeSNHQi1OSVIKLWdlbyNHQi1EVVIjRHVyaGFtI0dCLUVORwotZ2VvI0dCLURWViNEZXZvbiNHQi1FTkcKLWdlbyNHQi1FTkcjRW5nbGFuZCNHQgotZ2VvI0dCLUVTUyNFc3NleCNHQi1FTkcKLWdlbyNHQi1FU1gjRWFzdCBTdXNzZXgjR0ItRU5HCi1nZW8jR0ItRkVSI0Zlcm1hbmFnaCNHQi1OSVIKLWdlbyNHQi1GSUYjRmlmZSBSZWdpb24jR0ItU0NUCi1nZW8jR0ItR0xTI0dsb3VjZXN0ZXJzaGlyZSNHQi1FTkcKLWdlbyNHQi1HTVAjR3JhbXBpYW4gUmVnaW9uI0dCLVNDVAotZ2VvI0dCLUdOVCNHd2VudCNHQi1XTFMKLWdlbyNHQi1HU1kjR3Vlcm5zZXkjR0ItQ0hBCi1nZW8jR0ItR1RMI0dyZWF0ZXIgTG9uZG9uI0dCLUVORwotZ2VvI0dCLUdUTSNHcmVhdGVyIE1hbmNoZXN0ZXIjR0ItRU5HCi1nZW8jR0ItR1dOI0d3eW5lZGQjR0ItV0xTCi1nZW8jR0ItSEFNI0hhbXBzaGlyZSNHQi1FTkcKLWdlbyNHQi1ITEQjSGlnaGxhbmQgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLUhSVCNIZXJ0Zm9yZHNoaXJlI0dCLUVORwotZ2VvI0dCLUhVTSNIdW1iZXJzaWRlI0dCLUVORwotZ2VvI0dCLUhXUiNIZXJlZm9yZCBBbmQgV29yY2VzdGVyI0dCLUVORwotZ2VvI0dCLUlPTSNJc2xlIE9mIE1hbiNHQgotZ2VvI0dCLUlPUyNJc2xlcyBPZiBTY2lsbHkjR0ItRU5HCi1nZW8jR0ItSU9XI0lzbGUgT2YgV2lnaHQjR0ItRU5HCi1nZW8jR0ItSlNZI0plcnNleSNHQi1DSEEKLWdlbyNHQi1LRU4jS2VudCNHQi1FTkcKLWdlbyNHQi1MQU4jTGFuY2FzaGlyZSNHQi1FTkcKLWdlbyNHQi1MRUMjTGVpY2VzdGVyc2hpcmUjR0ItRU5HCi1nZW8jR0ItTElOI0xpbmNvbG5zaGlyZSNHQi1FTkcKLWdlbyNHQi1MTVYjTGltYXZhZHkjR0ItTklSCi1nZW8jR0ItTFJOI0xhcm5lI0dCLU5JUgotZ2VvI0dCLUxTQiNMaXNidXJuI0dCLU5JUgotZ2VvI0dCLUxUTiNMb3RoaWFuIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1NRlQjTWFnaGVyYWZlbHQjR0ItTklSCi1nZW8jR0ItTUdNI01pZCBHbGFtb3JnYW4jR0ItV0xTCi1nZW8jR0ItTVNZI01lcnNleXNpZGUjR0ItRU5HCi1nZW8jR0ItTVlMI01veWxlI0dCLU5JUgotZ2VvI0dCLU5CTCNOb3J0aHVtYmVybGFuZCNHQi1FTkcKLWdlbyNHQi1ORE4jTm9ydGggRG93biNHQi1OSVIKLWdlbyNHQi1ORksjTm9yZm9sayNHQi1FTkcKLWdlbyNHQi1OSVIjTm9ydGhlcm4gSXJlbGFuZCNHQgotZ2VvI0dCLU5UQSNOZXd0b25hYmJleSNHQi1OSVIKLWdlbyNHQi1OVEgjTm9ydGhhbXB0b25zaGlyZSNHQi1FTkcKLWdlbyNHQi1OVFQjTm90dGluZ2hhbXNoaXJlI0dCLUVORwotZ2VvI0dCLU5ZSyNOb3J0aCBZb3Jrc2hpcmUjR0ItRU5HCi1nZW8jR0ItTllNI05ld3J5IEFuZCBNb3VybmUjR0ItTklSCi1nZW8jR0ItT01II09tYWdoI0dCLU5JUgotZ2VvI0dCLU9SSyNPcmtuZXkjR0ItU0NUCi1nZW8jR0ItT1hGI094Zm9yZHNoaXJlI0dCLUVORwotZ2VvI0dCLVBPVyNQb3d5cyNHQi1XTFMKLWdlbyNHQi1TQ1QjU2NvdGxhbmQjR0IKLWdlbyNHQi1TRksjU3VmZm9sayNHQi1FTkcKLWdlbyNHQi1TR00jU291dGggR2xhbW9yZ2FuI0dCLVdMUwotZ2VvI0dCLVNIUiNTaHJvcHNoaXJlI0dCLUVORwotZ2VvI0dCLVNPTSNTb21lcnNldCNHQi1FTkcKLWdlbyNHQi1TUlkjU3VycmV5I0dCLUVORwotZ2VvI0dCLVNUQiNTdHJhYmFuZSNHQi1OSVIKLWdlbyNHQi1TVEQjU3RyYXRoY2x5ZGUgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLVNUUyNTdGFmZm9yZHNoaXJlI0dCLUVORwotZ2VvI0dCLVNZSyNTb3V0aCBZb3Jrc2hpcmUjR0ItRU5HCi1nZW8jR0ItVEFZI1RheXNpZGUgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLVRXUiNUeW5lIEFuZCBXZWFyI0dCLUVORwotZ2VvI0dCLVdBUiNXYXJ3aWNrc2hpcmUjR0ItRU5HCi1nZW8jR0ItV0dNI1dlc3QgR2xhbW9yZ2FuI0dCLVdMUwotZ2VvI0dCLVdJTCNXaWx0c2hpcmUjR0ItRU5HCi1nZW8jR0ItV0lTI1dlc3Rlcm4gSXNsZXMjR0ItU0NUCi1nZW8jR0ItV0xTI1dhbGVzI0dCCi1nZW8jR0ItV01EI1dlc3QgTWlkbGFuZHMjR0ItRU5HCi1nZW8jR0ItV1NYI1dlc3QgU3Vzc2V4I0dCLUVORwotZ2VvI0dCLVdZSyNXZXN0IFlvcmtzaGlyZSNHQi1FTkcKLWdlbyNHQi1aRVQjU2hldGxhbmQgKFpldGxhbmQpI0dCLVNDVAotZ2VvI0dEI0dyZW5hZGEjLS0KLWdlbyNHRSNHZW9yZ2lhIy0tCi1nZW8jR0YjRnJlbmNoIEd1aWFuYSMtLQotZ2VvI0dII0doYW5hIy0tCi1nZW8jR0kjR2licmFsdGFyIy0tCi1nZW8jR0wjR3JlZW5sYW5kIy0tCi1nZW8jR00jR2FtYmlhIy0tCi1nZW8jR04jR3VpbmVhIy0tCi1nZW8jR1AjR3VhZGVsb3VwZSMtLQotZ2VvI0dRI0VxdWF0b3JpYWwgR3VpbmVhIy0tCi1nZW8jR1IjR3JlZWNlIy0tCi1nZW8jR1MjR2VvcmdpYSAmIFNhbmR3aWNoIElzbGFuZHMjLS0KLWdlbyNHVCNHdWF0ZW1hbGEjLS0KLWdlbyNHVSNHdWFtIy0tCi1nZW8jR1cjR3VpbmVhLUJpc3NhdSMtLQotZ2VvI0dZI0d1eWFuYSMtLQotZ2VvI0hLI0hvbmcgS29uZyMtLQotZ2VvI0hOI0hvbmR1cmFzIy0tCi1nZW8jSFIjQ3JvYXRpYSMtLQotZ2VvI0hUI0hhaXRpIy0tCi1nZW8jSFUjSHVuZ2FyeSMtLQotZ2VvI0lEI0luZG9uZXNpYSMtLQotZ2VvI0lFI0lyZWxhbmQjLS0KLWdlbyNJTCNJc3JhZWwjLS0KLWdlbyNJTiNJbmRpYSMtLQotZ2VvI0lPI0luZGlhbiBPY2VhbiBUZXJyaXRvcnkjLS0KLWdlbyNJUSNJcmFxIy0tCi1nZW8jSVIjIklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiIy0tCi1nZW8jSVMjSWNlbGFuZCMtLQotZ2VvI0lUI0l0YWx5Iy0tCi1nZW8jSVQtMjEjUGllbW9udGUjSVQKLWdlbyNJVC1BTCNBbGVzc2FuZHJpYSNJVC0yMQotZ2VvI0lULUFUI0FzdGkjSVQtMjIKLWdlbyNJVC1CSSNCaWVsbGEjSVQtMjMKLWdlbyNJVC1BTyNBb3N0YSBBb3N0ZSAoZnIpI0lULTIzCi1nZW8jSVQtQ04jQ3VuZW8jSVQtMjQKLWdlbyNJVC1OTyNOb3ZhcmEjSVQtMjUKLWdlbyNJVC1CRyNCZXJnYW1vI0lULTI1Ci1nZW8jSVQtQlMjQnJlc2NpYSNJVC0yNQotZ2VvI0lULUNPI0NvbW8jSVQtMjUKLWdlbyNJVC1DUiNDcmVtb25hI0lULTI1Ci1nZW8jSVQtTEMjTGVjY28jSVQtMjUKLWdlbyNJVC1MTyNMb2RpI0lULTI1Ci1nZW8jSVQtTU4jTWFudG92YSNJVC0yNQotZ2VvI0lULU1JI01pbGFubyNJVC0yNQotZ2VvI0lULVBWI1BhdmlhI0lULTI1Ci1nZW8jSVQtU08jU29uZHJpbyNJVC0yNQotZ2VvI0lULVZBI1ZhcmVzZSNJVC0yNQotZ2VvI0lULVRPI1RvcmlubyNJVC0yNgotZ2VvI0lULVZCI1ZlcmJhbm8tQ3VzaW8tT3Nzb2xhI0lULTI3Ci1nZW8jSVQtVkMjVmVyY2VsbGkjSVQtMjgKLWdlbyNJVC0yMyNWYWxsZSBkJ0Fvc3RhI0lUCi1nZW8jSVQtMjUjTG9tYmFyZGlhI0lUCi1nZW8jSVQtMzIjVHJlbnRpbm8tQWx0byBBZGlnZSNJVAotZ2VvI0lULUJaI0JvbHphbm8gQm96ZW4gKGRlKSNJVC0zMgotZ2VvI0lULVROI1RyZW50byNJVC0zMgotZ2VvI0lULTM0I1ZlbmV0byNJVAotZ2VvI0lULUJMI0JlbGx1bm8jSVQtMzQKLWdlbyNJVC1QRCNQYWRvdmEjSVQtMzQKLWdlbyNJVC1STyNSb3ZpZ28jSVQtMzQKLWdlbyNJVC1UViNUcmV2aXNvI0lULTM0Ci1nZW8jSVQtVkUjVmVuZXppYSNJVC0zNAotZ2VvI0lULVZSI1Zlcm9uYSNJVC0zNAotZ2VvI0lULVZJI1ZpY2VuemEjSVQtMzQKLWdlbyNJVC0zNiNGcml1bGktVmVuZXppYSBHaXVsaWEjSVQKLWdlbyNJVC1HTyNHb3JpemlhI0lULTM2Ci1nZW8jSVQtUE4jUG9yZGVub25lI0lULTM2Ci1nZW8jSVQtVFMjVHJpZXN0ZSNJVC0zNgotZ2VvI0lULVVEI1VkaW5lI0lULTM2Ci1nZW8jSVQtNDIjTGlndXJpYSNJVAotZ2VvI0lULUdFI0dlbm92YSNJVC00MgotZ2VvI0lULUlNI0ltcGVyaWEjSVQtNDIKLWdlbyNJVC1TUCNMYSBTcGV6aWEjSVQtNDIKLWdlbyNJVC1TViNTYXZvbmEjSVQtNDIKLWdlbyNJVC00NSNFbWlsaWEtUm9tYWduYSNJVAotZ2VvI0lULUJPI0JvbG9nbmEjSVQtNDUKLWdlbyNJVC1GRSNGZXJyYXJhI0lULTQ1Ci1nZW8jSVQtRk8jRm9ybMOsI0lULTQ1Ci1nZW8jSVQtTU8jTW9kZW5hI0lULTQ1Ci1nZW8jSVQtUFIjUGFybWEjSVQtNDUKLWdlbyNJVC1QQyNQaWFjZW56YSNJVC00NQotZ2VvI0lULVJBI1JhdmVubmEjSVQtNDUKLWdlbyNJVC1SRSNSZWdnaW8gRW1pbGlhI0lULTQ1Ci1nZW8jSVQtUk4jUmltaW5pI0lULTQ1Ci1nZW8jSVQtNTIjVG9zY2FuYSNJVAotZ2VvI0lULUFSI0FyZXp6byNJVC01MgotZ2VvI0lULUZJI0ZpcmVuemUjSVQtNTIKLWdlbyNJVC1HUiNHcm9zc2V0byNJVC01MgotZ2VvI0lULUxJI0xpdm9ybm8jSVQtNTIKLWdlbyNJVC1MVSNMdWNjYSNJVC01MgotZ2VvI0lULU1TI01hc3NhLUNhcnJhcmEjSVQtNTIKLWdlbyNJVC1QSSNQaXNhI0lULTUyCi1nZW8jSVQtUFQjUGlzdG9pYSNJVC01MgotZ2VvI0lULVBPI1ByYXRvI0lULTUyCi1nZW8jSVQtU0kjU2llbmEjSVQtNTIKLWdlbyNJVC01NSNVbWJyaWEjSVQKLWdlbyNJVC1QRyNQZXJ1Z2lhI0lULTU1Ci1nZW8jSVQtVFIjVGVybmkjSVQtNTUKLWdlbyNJVC01NyNNYXJjaGUjSVQKLWdlbyNJVC1BTiNBbmNvbmEjSVQtNTcKLWdlbyNJVC1BUCNBc2NvbGkgUGljZW5vI0lULTU3Ci1nZW8jSVQtTUMjTWFjZXJhdGEjSVQtNTcKLWdlbyNJVC1QUyNQZXNhcm8gZSBVcmJpbm8jSVQtNTcKLWdlbyNJVC02MiNMYXppbyNJVAotZ2VvI0lULUZSI0Zyb3Npbm9uZSNJVC02MgotZ2VvI0lULUxUI0xhdGluYSNJVC02MgotZ2VvI0lULVJJI1JpZXRpI0lULTYyCi1nZW8jSVQtUk0jUm9tYSNJVC02MgotZ2VvI0lULVZUI1ZpdGVyYm8jSVQtNjIKLWdlbyNJVC02NSNBYnJ1enpvI0lUCi1nZW8jSVQtQ0gjQ2hpZXRpI0lULTY1Ci1nZW8jSVQtQVEjTCdBcXVpbGEjSVQtNjUKLWdlbyNJVC1QRSNQZXNjYXJhI0lULTY1Ci1nZW8jSVQtVEUjVGVyYW1vI0lULTY1Ci1nZW8jSVQtNjcjTW9saXNlI0lUCi1nZW8jSVQtQ0IjQ2FtcG9iYXNzbyNJVC02NwotZ2VvI0lULUlTI0lzZXJuaWEjSVQtNjcKLWdlbyNJVC03MiNDYW1wYW5pYSNJVAotZ2VvI0lULUJOI0JlbmV2ZW50byNJVC03MgotZ2VvI0lULUNFI0Nhc2VydGEjSVQtNzIKLWdlbyNJVC1OQSNOYXBvbGkjSVQtNzIKLWdlbyNJVC1TQSNTYWxlcm5vI0lULTcyCi1nZW8jSVQtQVYjQXZlbGxpbm8jSVQtNzIKLWdlbyNJVC03NSNQdWdsaWEjSVQKLWdlbyNJVC1CQSNCYXJpI0lULTc1Ci1nZW8jSVQtQlIjQnJpbmRpc2kjSVQtNzUKLWdlbyNJVC1GRyNGb2dnaWEjSVQtNzUKLWdlbyNJVC1MRSNMZWNjZSNJVC03NQotZ2VvI0lULVRBI1RhcmFudG8jSVQtNzUKLWdlbyNJVC03NyNCYXNpbGljYXRhI0lUCi1nZW8jSVQtTVQjTWF0ZXJhI0lULTc3Ci1nZW8jSVQtUFojUG90ZW56YSNJVC03NwotZ2VvI0lULTc4I0NhbGFicmlhI0lUCi1nZW8jSVQtQ1ojQ2F0YW56YXJvI0lULTc4Ci1nZW8jSVQtQ1MjQ29zZW56YSNJVC03OAotZ2VvI0lULUtSI0Nyb3RvbmUjSVQtNzgKLWdlbyNJVC1SQyNSZWdnaW8gQ2FsYWJyaWEjSVQtNzgKLWdlbyNJVC1WViNWaWJvIFZhbGVudGlhI0lULTc4Ci1nZW8jSVQtODIjU2ljaWxpYSNJVAotZ2VvI0lULUFHI0FncmlnZW50byNJVC04MgotZ2VvI0lULUNMI0NhbHRhbmlzc2V0dGEjSVQtODIKLWdlbyNJVC1DVCNDYXRhbmlhI0lULTgyCi1nZW8jSVQtRU4jRW5uYSNJVC04MgotZ2VvI0lULU1FI01lc3NpbmEjSVQtODIKLWdlbyNJVC1QQSNQYWxlcm1vI0lULTgyCi1nZW8jSVQtUkcjUmFndXNhI0lULTgyCi1nZW8jSVQtU1IjU2lyYWN1c2EjSVQtODIKLWdlbyNJVC1UUCNUcmFwYW5pI0lULTgyCi1nZW8jSVQtODgjU2FyZGVnbmEjSVQKLWdlbyNJVC1DQSNDYWdsaWFyaSNJVC04OAotZ2VvI0lULU5VI051b3JvI0lULTg4Ci1nZW8jSVQtT1IjT3Jpc3Rhbm8jSVQtODgKLWdlbyNJVC1TUyNTYXNzYXJpI0lULTg4Ci1nZW8jSk0jSmFtYWljYSMtLQotZ2VvI0pPI0pvcmRhbiMtLQotZ2VvI0pQI0phcGFuIy0tCi1nZW8jSlAtMDEjSG9ra2FpZG8jSlAKLWdlbyNKUC0wMiNBb21vcmkjSlAKLWdlbyNKUC0wMyNJd2F0ZSNKUAotZ2VvI0pQLTA0I01peWFnaSNKUAotZ2VvI0pQLTA1I0FraXRhI0pQCi1nZW8jSlAtMDYjWWFtYWdhdGEjSlAKLWdlbyNKUC0wNyNIdWt1c2ltYSAoRnVrdXNoaW1hKSNKUAotZ2VvI0pQLTA4I0liYXJha2kjSlAKLWdlbyNKUC0wOSNUb3RpZ2kgKFRvY2hpZ2kpI0pQCi1nZW8jSlAtMTAjR3VubWEjSlAKLWdlbyNKUC0xMSNTYWl0YW1hI0pQCi1nZW8jSlAtMTIjVGliYSAoQ2hpYmEpI0pQCi1nZW8jSlAtMTMjVG9reW8jSlAKLWdlbyNKUC0xNCNLYW5hZ2F3YSNKUAotZ2VvI0pQLTE1I05paWdhdGEjSlAKLWdlbyNKUC0xNiNUb3lhbWEjSlAKLWdlbyNKUC0xNyNJc2lrYXdhIChJc2hpa2F3YSkjSlAKLWdlbyNKUC0xOCNIdWt1aSAoRnVrdWkpI0pQCi1nZW8jSlAtMTkjWWFtYW5hc2kgKFlhbWFuYXNoaSkjSlAKLWdlbyNKUC0yMCNOYWdhbm8jSlAKLWdlbyNKUC0yMSNHaWh1IChHaWZ1KSNKUAotZ2VvI0pQLTIyI1NpenVva2EgKFNoaXp1b2thKSNKUAotZ2VvI0pQLTIzI0FpdGkgKEFpY2hpKSNKUAotZ2VvI0pQLTI0I01pZSNKUAotZ2VvI0pQLTI1I1NpZ2EgKFNoaWdhKSNKUAotZ2VvI0pQLTI2I0t5b3RvI0pQCi1nZW8jSlAtMjcjT3Nha2EjSlAKLWdlbyNKUC0yOCNIeW9nbyNKUAotZ2VvI0pQLTI5I05hcmEjSlAKLWdlbyNKUC0zMCNXYWtheWFtYSNKUAotZ2VvI0pQLTMxI1RvdHRvcmkjSlAKLWdlbyNKUC0zMiNTaW1hbmUgKFNoaW1hbmUpI0pQCi1nZW8jSlAtMzMjT2theWFtYSNKUAotZ2VvI0pQLTM0I0hpcm9zaW1hIChIaXJvc2hpbWEpI0pQCi1nZW8jSlAtMzUjWWFtYWd1dGkgKFlhbWFndWNoaSkjSlAKLWdlbyNKUC0zNiNUb2t1c2ltYSAoVG9rdXNoaW1hKSNKUAotZ2VvI0pQLTM3I0thZ2F3YSNKUAotZ2VvI0pQLTM4I0VoaW1lI0pQCi1nZW8jSlAtMzkjS290aSAoS29jaGkpI0pQCi1nZW8jSlAtNDAjSHVrdW9rYSAoRnVrdW9rYSkjSlAKLWdlbyNKUC00MSNTYWdhI0pQCi1nZW8jSlAtNDIjTmFnYXNha2kjSlAKLWdlbyNKUC00MyNLdW1hbW90byNKUAotZ2VvI0pQLTQ0I09pdGEjSlAKLWdlbyNKUC00NSNNaXlhemFraSNKUAotZ2VvI0pQLTQ2I0thZ29zaW1hIChLYWdvc2hpbWEpI0pQCi1nZW8jSlAtNDcjT2tpbmF3YSNKUAotZ2VvI0tFI0tlbnlhIy0tCi1nZW8jS0cjS3lyZ3l6c3RhbiMtLQotZ2VvI0tII0NhbWJvZGlhIy0tCi1nZW8jS0kjS2lyaWJhdGkjLS0KLWdlbyNLTSNDb21vcm9zIy0tCi1nZW8jS04jU3QgS2l0dHMtTmV2aXMjLS0KLWdlbyNLUCMiS29yZWEsIERlbSBQZW9wbGUncyBSZXB1YmxpYyIjLS0KLWdlbyNLUiMiS29yZWEsIFJlcHVibGljIG9mIiMtLQotZ2VvI0tSLTExI1Nlb3VsIFRldWdieWVvbHNpI0tSCi1nZW8jS1ItMjYjQnVzYW4gR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItMjcjRGFlZ3UgR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItMzAjRGFlamVvbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0yOSNHd2FuZ2p1IEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTI4I0luY2hlb24gR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItMzEjVWxzYW4gR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItNDMjQ2h1bmdjaGVvbmdidWdkbyNLUgotZ2VvI0tSLTQ0I0NodW5nY2hlb25nbmFtZG8jS1IKLWdlbyNLUi00MiNHYW5nJ3dlb25kbyNLUgotZ2VvI0tSLTQxI0d5ZW9uZ2dpZG8jS1IKLWdlbyNLUi00NyNHeWVvbmdzYW5nYnVnZG8jS1IKLWdlbyNLUi00OCNHeWVvbmdzYW5nbmFtZG8jS1IKLWdlbyNLUi00OSNKZWp1ZG8jS1IKLWdlbyNLUi00NSNKZW9ucmFidWdkbyNLUgotZ2VvI0tSLTQ2I0plb25yYW5hbWRvI0tSCi1nZW8jS1cjS3V3YWl0Iy0tCi1nZW8jS1kjQ2F5bWFuIElzbGFuZHMjLS0KLWdlbyNLWiNLYXpha2hzdGFuIy0tCi1nZW8jTEEjTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMjLS0KLWdlbyNMQiNMZWJhbm9uIy0tCi1nZW8jTEMjU2FpbnQgTHVjaWEjLS0KLWdlbyNMSSNMaWVjaHRlbnN0ZWluIy0tCi1nZW8jTEsjU3JpIExhbmthIy0tCi1nZW8jTFIjTGliZXJpYSMtLQotZ2VvI0xTI0xlc290aG8jLS0KLWdlbyNMVCNMaXRodWFuaWEjLS0KLWdlbyNMVSNMdXhlbWJvdXJnIy0tCi1nZW8jTFYjTGF0dmlhIy0tCi1nZW8jTFkjTHliaWFuIEFyYWIgSmFtYWhpcml5YSMtLQotZ2VvI01BI01vcm9jY28jLS0KLWdlbyNNQyNNb25hY28jLS0KLWdlbyNNRCNNb2xkb3ZhIy0tCi1nZW8jTUcjTWFkYWdhc2NhciMtLQotZ2VvI01II01hcnNoYWxsIElzbGFuZHMjLS0KLWdlbyNNSyNGb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgT2YgTWFjZWRvbmlhIy0tCi1nZW8jTUwjTWFsaSMtLQotZ2VvI01NI015YW5tYXIgKEZvcm1lciBCdXJtYSkjLS0KLWdlbyNNTiNNb25nb2xpYSMtLQotZ2VvI01PI01hY2F1Iy0tCi1nZW8jTVAjTm9ydGhlcm4gTWFyaWFuYXMjLS0KLWdlbyNNUSNNYXJ0aW5pcXVlIy0tCi1nZW8jTVIjTWF1cml0YW5pYSMtLQotZ2VvI01TI01vbnRzZXJyYXQjLS0KLWdlbyNNVCNNYWx0YSMtLQotZ2VvI01VI01hdXJpdGl1cyMtLQotZ2VvI01WI01hbGRpdmVzIy0tCi1nZW8jTVcjTWFsYXdpIy0tCi1nZW8jTVgjTWV4aWNvIy0tCi1nZW8jTVgtQUdVI0FndWFzY2FsaWVudGVzI01YCi1nZW8jTVgtQkNOI0JhamEgQ2FsaWZvcm5pYSNNWAotZ2VvI01YLUJDUyNCYWphIENhbGlmb3JuaWEgU3VyI01YCi1nZW8jTVgtQ0FNI0NhbXBlY2hlI01YCi1nZW8jTVgtQ0hII0NoaWh1YWh1YSNNWAotZ2VvI01YLUNIUCNDaGlhcGFzI01YCi1nZW8jTVgtQ09BI0NvYWh1aWxhI01YCi1nZW8jTVgtQ09MI0NvbGltYSNNWAotZ2VvI01YLURGI0Rpc3RyaXRvIEZlZGVyYWwjTVgKLWdlbyNNWC1EVVIjRHVyYW5nbyNNWAotZ2VvI01YLUdSTyNHdWVycmVybyNNWAotZ2VvI01YLUdVQSNHdWFuYWp1YXRvI01YCi1nZW8jTVgtSElEI0hpZGFsZ28jTVgKLWdlbyNNWC1KQUwjSmFsaXNjbyNNWAotZ2VvI01YLU1FWCNNZXhpY28jTVgKLWdlbyNNWC1NSUMjTWljaG9hY2FuI01YCi1nZW8jTVgtTU9SI01vcmVsb3MjTVgKLWdlbyNNWC1OQVkjTmF5YXJpdCNNWAotZ2VvI01YLU5MRSNOdWV2byBMZW9uI01YCi1nZW8jTVgtT0FYI09heGFjYSNNWAotZ2VvI01YLVBVRSNQdWVibGEjTVgKLWdlbyNNWC1RVUUjUXVlcmV0YXJvI01YCi1nZW8jTVgtUk9PI1F1aW50YW5hIFJvbyNNWAotZ2VvI01YLVNJTiNTaW5hbG9hI01YCi1nZW8jTVgtU0xQI1NhbiBMdWlzIFBvdG9zaSNNWAotZ2VvI01YLVNPTiNTb25vcmEjTVgKLWdlbyNNWC1UQUIjVGFiYXNjbyNNWAotZ2VvI01YLVRBTSNUYW1hdWxpcGFzI01YCi1nZW8jTVgtVExBI1RsYXhjYWxhI01YCi1nZW8jTVgtVkVSI1ZlcmFjcnV6I01YCi1nZW8jTVgtWVVDI1l1Y2F0YW4jTVgKLWdlbyNNWC1aQUMjWmFjYXRlY2FzI01YCi1nZW8jTVkjTWFsYXlzaWEjLS0KLWdlbyNNWiNNb3phbWJpcXVlIy0tCi1nZW8jTkEjTmFtaWJpYSMtLQotZ2VvI05DI05ldyBDYWxlZG9uaWEjLS0KLWdlbyNORSNOaWdlciMtLQotZ2VvI05GI05vcmZvbGsgSXNsYW5kIy0tCi1nZW8jTkcjTmlnZXJpYSMtLQotZ2VvI05HLUZDI0FidWphIENhcGl0YWwgVGVycml0b3J5I05HCi1nZW8jTkctQUIjQWJpYSNORwotZ2VvI05HLUFEI0FkYW1hd2EjTkcKLWdlbyNORy1BSyNBa3dhIElib20jTkcKLWdlbyNORy1BTiNBbmFtYnJhI05HCi1nZW8jTkctQkEjQmF1Y2hpI05HCi1nZW8jTkctQlkjQmF5ZWxzYSNORwotZ2VvI05HLUJFI0JlbnVlI05HCi1nZW8jTkctQk8jQm9ybm8jTkcKLWdlbyNORy1DUiNDcm9zcyBSaXZlciNORwotZ2VvI05HLURFI0RlbHRhI05HCi1nZW8jTkctRUIjRWJvbnlpI05HCi1nZW8jTkctRUQjRWRvI05HCi1nZW8jTkctRUsjRWtpdGkjTkcKLWdlbyNORy1FTiNFbnVndSNORwotZ2VvI05HLUdPI0dvbWJlI05HCi1nZW8jTkctSU0jSW1vI05HCi1nZW8jTkctSkkjSmlnYXdhI05HCi1nZW8jTkctS0QjS2FkdW5hI05HCi1nZW8jTkctS04jS2FubyNORwotZ2VvI05HLUtUI0thdHNpbmEjTkcKLWdlbyNORy1LRSNLZWJiaSNORwotZ2VvI05HLUtPI0tvZ2kjTkcKLWdlbyNORy1LVyNLd2FyYSNORwotZ2VvI05HLUxBI0xhZ29zI05HCi1nZW8jTkctTkEjTmFzc2FyYXdhI05HCi1nZW8jTkctTkkjTmlnZXIjTkcKLWdlbyNORy1PRyNPZ3VuI05HCi1nZW8jTkctT04jT25kbyNORwotZ2VvI05HLU9TI09zdW4jTkcKLWdlbyNORy1PWSNPeW8jTkcKLWdlbyNORy1QTCNQbGF0ZWF1I05HCi1nZW8jTkctUkkjUml2ZXJzI05HCi1nZW8jTkctU08jU29rb3RvI05HCi1nZW8jTkctVEEjVGFyYWJhI05HCi1nZW8jTkctWU8jWW9iZSNORwotZ2VvI05HLVpBI1phbWZhcmEjTkcKLWdlbyNOSSNOaWNhcmFndWEjLS0KLWdlbyNOTCNOZXRoZXJsYW5kcyMtLQotZ2VvI05PI05vcndheSMtLQotZ2VvI05PLTAxI8OYc3Rmb2xkI05PCi1nZW8jTk8tMDIjQWtlcnNodXMjTk8KLWdlbyNOTy0wMyNPc2xvI05PCi1nZW8jTk8tMDQjSGVkbWFyayNOTwotZ2VvI05PLTA1I09wcGxhbmQjTk8KLWdlbyNOTy0wNiNCdXNrZXJ1ZCNOTwotZ2VvI05PLTA3I1Zlc3Rmb2xkI05PCi1nZW8jTk8tMDgjVGVsZW1hcmsjTk8KLWdlbyNOTy0wOSNBdXN0LUFnZGVyI05PCi1nZW8jTk8tMTAjVmVzdC1BZ2RlciNOTwotZ2VvI05PLTExI1JvZ2FsYW5kI05PCi1nZW8jTk8tMTIjTm9yZGFsYW5kI05PCi1nZW8jTk8tMTQjU29nbiBPZyBGam9yZGFuZSNOTwotZ2VvI05PLTE1I03DuHJlIE9nIFJvbXNkYWwjTk8KLWdlbyNOTy0xNiNTw7hyLVRyw7huZGVsYWcjTk8KLWdlbyNOTy0xNyNOb3JkLVRyw7huZGVsYWcjTk8KLWdlbyNOTy0xOCNOb3JkbGFuZCNOTwotZ2VvI05PLTE5I1Ryb21zI05PCi1nZW8jTk8tMjAjRmlubm1hcmsjTk8KLWdlbyNOUCNOZXBhbCMtLQotZ2VvI05SI05hdXJ1Iy0tCi1nZW8jTlUjTml1ZSMtLQotZ2VvI05aI05ldyBaZWFsYW5kIy0tCi1nZW8jTlotQVVLI0F1Y2tsYW5kI05aLU4KLWdlbyNOWi1CT1AjQmF5IE9mIFBsZW50eSNOWi1OCi1nZW8jTlotQ0FOI0NhbnRlcmJ1cnkjTlotUwotZ2VvI05aLUdJUyNHaXNib3JuZSNOWi1OCi1nZW8jTlotSEtCI0hhd2tlcydTIEJheSNOWi1OCi1nZW8jTlotTUJII01hcmxib3JvdWdoI05aLVMKLWdlbyNOWi1NV1QjTWFuYXdhdHUtV2FuZ2FudWkjTlotTgotZ2VvI05aLU4jTm9ydGggSXNsYW5kI05aCi1nZW8jTlotTlNOI05lbHNvbiNOWi1TCi1nZW8jTlotTlRMI05vcnRobGFuZCNOWi1OCi1nZW8jTlotT1RBI090YWdvI05aLVMKLWdlbyNOWi1TI1NvdXRoIElzbGFuZCNOWgotZ2VvI05aLVNUTCNTb3V0aGxhbmQjTlotUwotZ2VvI05aLVRBUyNUYXNtYW4jTlotUwotZ2VvI05aLVRLSSNUYXJhbmFraSNOWi1OCi1nZW8jTlotV0dOI1dlbGxpbmd0b24jTlotTgotZ2VvI05aLVdLTyNXYWlrYXRvI05aLU4KLWdlbyNOWi1XVEMjV2VzdCBDb2FzdCNOWi1TCi1nZW8jT00jT21hbiMtLQotZ2VvI1BBI1BhbmFtYSMtLQotZ2VvI1BFI1BlcnUjLS0KLWdlbyNQRiNGcmVuY2ggUG9seW5lc2lhIy0tCi1nZW8jUEcjUGFwdWEgTmV3IEd1aW5lYSMtLQotZ2VvI1BII1BoaWxpcHBpbmVzIy0tCi1nZW8jUEsjUGFraXN0YW4jLS0KLWdlbyNQTCNQb2xhbmQjLS0KLWdlbyNQTC1EUyNEb2xub8WbbMSFc2tpZSNQTAotZ2VvI1BMLUtQI0t1amF3c2tvLXBvbW9yc2tpZSNQTAotZ2VvI1BMLUxVI0x1YmVsc2tpZSNQTAotZ2VvI1BMLUxCI0x1YnVza2llI1BMCi1nZW8jUEwtTEQjxYHDs2R6a2llI1BMCi1nZW8jUEwtTUEjTWHFgm9wb2xza2llI1BMCi1nZW8jUEwtTVojTWF6b3dpZWNraWUjUEwKLWdlbyNQTC1PUCNPcG9sc2tpZSNQTAotZ2VvI1BMLVBLI1BvZGthcnBhY2tpZSNQTAotZ2VvI1BMLVBEI1BvZGxhc2tpZSNQTAotZ2VvI1BMLVBNI1BvbW9yc2tpZSNQTAotZ2VvI1BMLVNMI8WabMSFc2tpZSNQTAotZ2VvI1BMLVNLI8Wad2nEmXRva3J6eXNraWUjUEwKLWdlbyNQTC1XTiNXYXJtacWEc2tvLW1henVyc2tpZSNQTAotZ2VvI1BMLVdQI1dpZWxrb3BvbHNraWUjUEwKLWdlbyNQTC1aUCNaYWNob2RuaW9wb21vcnNraWUjUEwKLWdlbyNQTSNTdCBQaWVycmUgQW5kIE1pcXVlbG9uIy0tCi1nZW8jUE4jUGl0Y2Fpcm4jLS0KLWdlbyNQUiNQdWVydG8gUmljbyMtLQotZ2VvI1BTIyJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIiMtLQotZ2VvI1BUI1BvcnR1Z2FsIy0tCi1nZW8jUFcjUGFsYXUjLS0KLWdlbyNQWSNQYXJhZ3VheSMtLQotZ2VvI1FBI1FhdGFyIy0tCi1nZW8jUkUjUmV1bmlvbiMtLQotZ2VvI1JPI1JvbWFuaWEjLS0KLWdlbyNSTy1CI0J1Y3VyZcWfdGkjUk8KLWdlbyNSTy1BQiNBbGJhI1JPCi1nZW8jUk8tQVIjQXJhZCNSTwotZ2VvI1JPLUFHI0FyZ2XFnyNSTwotZ2VvI1JPLUJDI0JhY8SDdSNSTwotZ2VvI1JPLUJII0JpaG9yI1JPCi1nZW8jUk8tQk4jQmlzdHJpxaNhLU7Eg3PEg3VkI1JPCi1nZW8jUk8tQlQjQm90b8WfYW5pI1JPCi1nZW8jUk8tQlYjQnJhxZ9vdiNSTwotZ2VvI1JPLUJSI0JyxINpbGEjUk8KLWdlbyNSTy1CWiNCdXrEg3UjUk8KLWdlbyNSTy1DUyNDYXJhxZ8tU2V2ZXJpbiNSTwotZ2VvI1JPLUNMI0PEg2zEg3JhxZ9pI1JPCi1nZW8jUk8tQ0ojQ2x1aiNSTwotZ2VvI1JPLUNUI0NvbnN0YW7Fo2EjUk8KLWdlbyNSTy1DViNDb3Zhc25hI1JPCi1nZW8jUk8tREIjRMOibWJvdmnFo2EjUk8KLWdlbyNSTy1ESiNEb2xqI1JPCi1nZW8jUk8tR0wjR2FsYcWjaSNSTwotZ2VvI1JPLUdSI0dpdXJnaXUjUk8KLWdlbyNSTy1HSiNHb3JqI1JPCi1nZW8jUk8tSFIjSGFyZ2hpdGEjUk8KLWdlbyNSTy1IRCNIdW5lZG9hcmEjUk8KLWdlbyNSTy1JTCNJYWxvbWnFo2EjUk8KLWdlbyNSTy1JUyNJYcWfaSNSTwotZ2VvI1JPLU1NI01hcmFtdXJlxZ8jUk8KLWdlbyNSTy1NSCNNZWhlZGluxaNpI1JPCi1nZW8jUk8tTVMjTXVyZcWfI1JPCi1nZW8jUk8tTlQjTmVhbcWjI1JPCi1nZW8jUk8tT1QjT2x0I1JPCi1nZW8jUk8tUEgjUHJhaG92YSNSTwotZ2VvI1JPLVNNI1NhdHUgTWFyZSNSTwotZ2VvI1JPLVNKI1PEg2xhaiNSTwotZ2VvI1JPLVNCI1NpYml1I1JPCi1nZW8jUk8tU1YjU3VjZWF2YSNSTwotZ2VvI1JPLVRSI1RlbGVvcm1hbiNSTwotZ2VvI1JPLVRNI1RpbWnFnyNSTwotZ2VvI1JPLVRMI1R1bGNlYSNSTwotZ2VvI1JPLVZTI1Zhc2x1aSNSTwotZ2VvI1JPLVZMI1bDomxjZWEjUk8KLWdlbyNSTy1WTiNWcmFuY2VhI1JPCi1nZW8jUlUjUnVzc2lhbiBGZWRlcmF0aW9uIy0tCi1nZW8jUlUtQUQjIkFkeWdlamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtQUwjIkFsdGFqLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUJBIyJCYcWha29ydG9zdGFuLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUJVIyJCdXJqYXRpamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtQ0UjxIxlxI1lbnNrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1DVSPEjHV2YcWhc2thamEgUmVzcHVibGlrYSNSVQotZ2VvI1JVLURBIyJEYWdlc3RhbiwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1JTiNJbmd1xaFza2FqYSBSZXNwdWJsaWthIFtSZXNwdWJsaWthIEluZ3XFoWV0aWphXSNSVQotZ2VvI1JVLUtCI0thYmFyZGluby1CYWxrYXJza2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtS0wjIkthbG15a2lqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1LQyNLYXJhxI1hamV2by3EjGVya2Vzc2thamEgUmVzcHVibGlrYSNSVQotZ2VvI1JVLUtSIyJLYXJlbGlqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1LSyMiSGFrYXNpamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtS08jIktvbWksIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtTUUjIk1hcmlqIMOIbCwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1NTyMiTW9yZG92aWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLVNBIyJTYWhhLCBSZXNwdWJsaWthIFtKYWt1dGlqYV0iI1JVCi1nZW8jUlUtU0UjIlNldmVybmFqYSBPc2V0aWphLCBSZXNwdWJsaWthIFtBbGFuaWphXSBbUmVzcHVibGlrYSBTZXZlcm5hamEgT3NldGlqYS1BbGFuaWphXSIjUlUKLWdlbyNSVS1UQSMiVGF0YXJzdGFuLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLVRZIyJUeXZhLCBSZXNwdWJsaWthIFtUdXZhXSIjUlUKLWdlbyNSVS1VRCNVZG11cnRza2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtQUxUI0FsdGFqc2tpaiBrcmFqI1JVCi1nZW8jUlUtS0hBI0hhYmFyb3Zza2lqIGtyYWojUlUKLWdlbyNSVS1LREEjS3Jhc25vZGFyc2tpaiBrcmFqI1JVCi1nZW8jUlUtS1lBI0tyYXNub2phcnNraWoga3JhaiNSVQotZ2VvI1JVLVBSSSNQcmltb3Jza2lqIGtyYWojUlUKLWdlbyNSVS1TVEEjU3RhdnJvcG9sJ3NraWoga3JhaiNSVQotZ2VvI1JVLUFNVSNBbXVyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUFSSyNBcmhhbmdlbCdza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQVNUI0FzdHJhaGFuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUJFTCNCZWxnb3JvZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1CUlkjQnJqYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQ0hFI8SMZWxqYWJpbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1DSEkjxIxpdGluc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUlSSyNJcmt1dHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1JVkEjSXZhbm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtHRCNLYWxpbmluZ3JhZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LTFUjS2FsdcW+c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtBTSNLYW3EjWF0c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtFTSNLZW1lcm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtJUiNLaXJvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LT1MjS29zdHJvbXNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LR04jS3VyZ2Fuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtSUyNLdXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTEVOI0xlbmluZ3JhZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1MSVAjTGlwZXRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTUFHI01hZ2FkYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTU9TI01vc2tvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NVVIjTXVybWFuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU5JWiNOacW+ZWdvcm9kc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU5HUiNOb3Znb3JvZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1OVlMjTm92b3NpYmlyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU9NUyNPbXNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1PUkUjT3JlbmJ1cmdza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtT1JMI09ybG92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVBOWiNQZW56ZW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUEVSI1Blcm1za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUFNLI1Bza292c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVJPUyNSb3N0b3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUllBI1JqYXphbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TQUsjU2FoYWxpbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TQU0jU2FtYXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtU0FSI1NhcmF0b3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtU01PI1Ntb2xlbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TVkUjU3ZlcmRsb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVEFNI1RhbWJvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1UT00jVG9tc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVRVTCNUdWwnc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVRWRSNUdmVyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVRZVSNUanVtZW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVUxZI1VsJ2phbm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVZMQSNWbGFkaW1pcnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1WR0cjVm9sZ29ncmFkc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVZMRyNWb2xvZ29kc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVZPUiNWb3JvbmXFvnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1ZQVIjSmFyb3NsYXZza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTU9XI01vc2t2YSNSVQotZ2VvI1JVLVNQRSNTYW5rdC1QZXRlcmJ1cmcjUlUKLWdlbyNSVS1ZRVYjRXZyZWpza2FqYSBhdnRvbm9tbmFqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQUdCI0FnaW5za2lqIEJ1cmphdHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUNIVSPEjHVrb3Rza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1FVkUjw4h2ZW5raWpza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1LSE0jSGFudHktTWFuc2lqc2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtS09QI0tvbWktUGVybWphdHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUtPUiNLb3JqYWtza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1ORU4jTmVuZXRza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1UQVkjVGFqbXlyc2tpaiAoRG9sZ2Fuby1OZW5ldHNraWopIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1VT0IjVXN0Jy1PcmR5bnNraWogQnVyamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtWUFOI0phbWFsby1OZW5ldHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JXI1J3YW5kYSMtLQotZ2VvI1NBI1NhdWRpIEFyYWJpYSMtLQotZ2VvI1NCI1NvbG9tb24gSXNsYW5kcyMtLQotZ2VvI1NDI1NleWNoZWxsZXMjLS0KLWdlbyNTRCNTdWRhbiMtLQotZ2VvI1NFI1N3ZWRlbiMtLQotZ2VvI1NFLUFCI1N0b2NraG9sbXMgTMOkbiNTRQotZ2VvI1NFLUFDI1bDpHN0ZXJib3R0ZW5zIEzDpG4jU0UKLWdlbyNTRS1CRCNOb3JyYm90dGVucyBMw6RuI1NFCi1nZW8jU0UtQyNVcHBzYWxhIEzDpG4jU0UKLWdlbyNTRS1EI1PDtmRlcm1hbmxhbmRzIEzDpG4jU0UKLWdlbyNTRS1FI8OWc3RlcmfDtnRsYW5kcyBMw6RuI1NFCi1nZW8jU0UtRiNKw7Zua8O2cGluZ3MgTMOkbiNTRQotZ2VvI1NFLUcjS3Jvbm9ib3JncyBMw6RuI1NFCi1nZW8jU0UtSCNLYWxtYXIgTMOkbiNTRQotZ2VvI1NFLUkjR290bGFuZHMgTMOkbiNTRQotZ2VvI1NFLUsjQmxla2luZ2UgTMOkbiNTRQotZ2VvI1NFLU0jU2vDpW5lIEzDpG4jU0UKLWdlbyNTRS1OI0hhbGxhbmRzIEzDpG4jU0UKLWdlbyNTRS1PI1bDpHN0cmEgR8O2dGFsYW5kcyBMw6RuI1NFCi1nZW8jU0UtUyNWw6RybWxhbmRzIEzDpG4jU0UKLWdlbyNTRS1UI8OWcmVicm8gTMOkbiNTRQotZ2VvI1NFLVUjVsOkc3RtYW5sYW5kcyBMw6RuI1NFCi1nZW8jU0UtVyNEYWxhcm5lcyBMw6RuI1NFCi1nZW8jU0UtWCNHw6R2bGVib3JncyBMw6RuI1NFCi1nZW8jU0UtWSNWw6RzdGVybm9ycmxhbmRzIEzDpG4jU0UKLWdlbyNTRS1aI0rDpG10bGFuZHMgTMOkbiNTRQotZ2VvI1NHI1NpbmdhcG9yZSMtLQotZ2VvI1NII1N0IEhlbGVuYSMtLQotZ2VvI1NJI1Nsb3ZlbmlhIy0tCi1nZW8jU0ojU3ZhbGJhcmQgQW5kIEphbiBNYXllbiMtLQotZ2VvI1NLI1Nsb3Zha2lhIy0tCi1nZW8jU0wjU2llcnJhIExlb25lIy0tCi1nZW8jU00jU2FuIE1hcmlubyMtLQotZ2VvI1NOI1NlbmVnYWwjLS0KLWdlbyNTTyNTb21hbGlhIy0tCi1nZW8jU1IjU3VyaW5hbWUjLS0KLWdlbyNTVCNTYW8gVG9tZSBBbmQgUHJpbmNpcGUjLS0KLWdlbyNTViNFbCBTYWx2YWRvciMtLQotZ2VvI1NZI1N5cmlhbiBBcmFiIFJlcHVibGljIy0tCi1nZW8jU1ojU3dhemlsYW5kIy0tCi1nZW8jVEMjVHVya3MgQW5kIENhaWNvcyBJc2xhbmRzIy0tCi1nZW8jVEQjQ2hhZCMtLQotZ2VvI1RGI0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyMtLQotZ2VvI1RHI1RvZ28jLS0KLWdlbyNUSCNUaGFpbGFuZCMtLQotZ2VvI1RKI1RhamlraXN0YW4jLS0KLWdlbyNUTSNUdXJrbWVuaXN0YW4jLS0KLWdlbyNUTiNUdW5pc2lhIy0tCi1nZW8jVE8jVG9uZ2EjLS0KLWdlbyNUUCNFYXN0IFRpbW9yIy0tCi1nZW8jVFIjVHVya2V5Iy0tCi1nZW8jVFItMDEjQWRhbmEjVFIKLWdlbyNUUi0wMiNBZMSxeWFtYW4jVFIKLWdlbyNUUi0wMyNBZnlvbiNUUgotZ2VvI1RSLTA0I0HEn3LEsSNUUgotZ2VvI1RSLTA1I0FtYXN5YSNUUgotZ2VvI1RSLTA2I0Fua2FyYSNUUgotZ2VvI1RSLTA3I0FudGFseWEjVFIKLWdlbyNUUi0wOCNBcnR2aW4jVFIKLWdlbyNUUi0wOSNBeWTEsW4jVFIKLWdlbyNUUi0xMCNCYWzEsWtlc2lyI1RSCi1nZW8jVFItMTEjQmlsZWNpayNUUgotZ2VvI1RSLTEyI0JpbmfDtmwjVFIKLWdlbyNUUi0xMyNCaXRsaXMjVFIKLWdlbyNUUi0xNCNCb2x1I1RSCi1nZW8jVFItMTUjQnVyZHVyI1RSCi1nZW8jVFItMTYjQnVyc2EjVFIKLWdlbyNUUi0xNyPDh2FuYWtrYWxlI1RSCi1nZW8jVFItMTgjw4dhbmvEsXLEsSNUUgotZ2VvI1RSLTE5I8OHb3J1bSNUUgotZ2VvI1RSLTIwI0Rlbml6bGkjVFIKLWdlbyNUUi0yMSNEaXlhcmJha8SxciNUUgotZ2VvI1RSLTIyI0VkaXJuZSNUUgotZ2VvI1RSLTIzI0VsYXrEsWcjVFIKLWdlbyNUUi0yNCNFcnppbmNhbiNUUgotZ2VvI1RSLTI1I0VyenVydW0jVFIKLWdlbyNUUi0yNiNFc2tpxZ9laGlyI1RSCi1nZW8jVFItMjcjR2F6aWFudGVwI1RSCi1nZW8jVFItMjgjR2lyZXN1biNUUgotZ2VvI1RSLTI5I0fDvG3DvMWfaGFuZSNUUgotZ2VvI1RSLTMwI0hha2vDonJpI1RSCi1nZW8jVFItMzEjSGF0YXkjVFIKLWdlbyNUUi0zMiNJc3BhcnRhI1RSCi1nZW8jVFItMzMjxLDDp2VsI1RSCi1nZW8jVFItMzQjxLBzdGFuYnVsI1RSCi1nZW8jVFItMzUjxLB6bWlyI1RSCi1nZW8jVFItMzYjS2FycyNUUgotZ2VvI1RSLTM3I0thc3RhbW9udSNUUgotZ2VvI1RSLTM4I0theXNlcmkjVFIKLWdlbyNUUi0zOSNLxLFya2xhcmVsaSNUUgotZ2VvI1RSLTQwI0vEsXLFn2VoaXIjVFIKLWdlbyNUUi00MSNLb2NhZWxpI1RSCi1nZW8jVFItNDIjS29ueWEjVFIKLWdlbyNUUi00MyNLw7x0YWh5YSNUUgotZ2VvI1RSLTQ0I01hbGF0eWEjVFIKLWdlbyNUUi00NSNNYW5pc2EjVFIKLWdlbyNUUi00NiNLYWhyYW1hbm1hcmHFnyNUUgotZ2VvI1RSLTQ3I01hcmRpbiNUUgotZ2VvI1RSLTQ4I011xJ9sYSNUUgotZ2VvI1RSLTQ5I011xZ8jVFIKLWdlbyNUUi01MCNOZXbFn2VoaXIjVFIKLWdlbyNUUi01MSNOacSfZGUjVFIKLWdlbyNUUi01MiNPcmR1I1RSCi1nZW8jVFItNTMjUml6ZSNUUgotZ2VvI1RSLTU0I1Nha2FyeWEjVFIKLWdlbyNUUi01NSNTYW1zdW4jVFIKLWdlbyNUUi01NiNTaWlydCNUUgotZ2VvI1RSLTU3I1Npbm9wI1RSCi1nZW8jVFItNTgjU2l2YXMjVFIKLWdlbyNUUi01OSNUZWtpcmRhxJ8jVFIKLWdlbyNUUi02MCNUb2thdCNUUgotZ2VvI1RSLTYxI1RyYWJ6b24jVFIKLWdlbyNUUi02MiNUdW5jZWxpI1RSCi1nZW8jVFItNjMjxZ5hbmzEsXVyZmEjVFIKLWdlbyNUUi02NCNVxZ9hayNUUgotZ2VvI1RSLTY1I1ZhbiNUUgotZ2VvI1RSLTY2I1lvemdhdCNUUgotZ2VvI1RSLTY3I1pvbmd1bGRhayNUUgotZ2VvI1RSLTY4I0Frc2FyYXkjVFIKLWdlbyNUUi02OSNCYXlidXJ0I1RSCi1nZW8jVFItNzAjS2FyYW1hbiNUUgotZ2VvI1RSLTcxI0vEsXLEsWtrYWxlI1RSCi1nZW8jVFItNzIjQmF0bWFuI1RSCi1nZW8jVFItNzMjxZ7EsXJuYWsjVFIKLWdlbyNUUi03NCNCYXJ0xLFuI1RSCi1nZW8jVFItNzUjQXJkYWhhbiNUUgotZ2VvI1RSLTc2I0nEn2TEsXIjVFIKLWdlbyNUUi03NyNZYWxvdmEjVFIKLWdlbyNUUi03OCNLYXJhYsO8ayNUUgotZ2VvI1RSLTc5I0tpbGlzI1RSCi1nZW8jVFItODAjT3NtYW5peWUjVFIKLWdlbyNUVCNUcmluaWRhZCBBbmQgVG9iYWdvIy0tCi1nZW8jVFYjVHV2YWx1Iy0tCi1nZW8jVFcjIlRhaXdhbiwgUHJvdmluY2UgT2YgQ2hpbmEiIy0tCi1nZW8jVFojIlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiIy0tCi1nZW8jVUEjVWtyYWluZSMtLQotZ2VvI1VHI1VnYW5kYSMtLQotZ2VvI1VNI1VTIE1pbm9yIE91dGx5aW5nIElzbGFuZHMjLS0KLWdlbyNVTS02NyNKb2huc3RvbiBBdG9sbCNVTQotZ2VvI1VNLTcxI01pZHdheSBJc2xhbmRzI1VNCi1nZW8jVU0tNzYjTmF2YXNzYSBJc2xhbmQjVU0KLWdlbyNVTS03OSNXYWtlIElzbGFuZCNVTQotZ2VvI1VNLTgxI0Jha2VyIElzbGFuZCNVTQotZ2VvI1VNLTg0I0hvd2xhbmQgSXNsYW5kI1VNCi1nZW8jVU0tODYjSmFydmlzIElzbGFuZCNVTQotZ2VvI1VNLTg5I0tpbmdtYW4gUmVlZiNVTQotZ2VvI1VNLTk1I1BhbG15cmEgQXRvbGwjVU0KLWdlbyNVUyNVbml0ZWQgU3RhdGVzIy0tCi1nZW8jVVMtQUsjQWxhc2thI1VTCi1nZW8jVVMtQUwjQWxhYmFtYSNVUwotZ2VvI1VTLUFSI0Fya2Fuc2FzI1VTCi1nZW8jVVMtQVMjQW1lcmljYW4gU2Ftb2EjVVMKLWdlbyNVUy1BWiNBcml6b25hI1VTCi1nZW8jVVMtQ0EjQ2FsaWZvcm5pYSNVUwotZ2VvI1VTLUNPI0NvbG9yYWRvI1VTCi1nZW8jVVMtQ1QjQ29ubmVjdGljdXQjVVMKLWdlbyNVUy1EQyNEaXN0cmljdCBPZiBDb2x1bWJpYSNVUwotZ2VvI1VTLURFI0RlbGF3YXJlI1VTCi1nZW8jVVMtRkwjRmxvcmlkYSNVUwotZ2VvI1VTLUdBI0dlb3JnaWEjVVMKLWdlbyNVUy1HVSNHdWFtI1VTCi1nZW8jVVMtSEkjSGF3YWlpI1VTCi1nZW8jVVMtSUEjSW93YSNVUwotZ2VvI1VTLUlEI0lkYWhvI1VTCi1nZW8jVVMtSUwjSWxsaW5vaXMjVVMKLWdlbyNVUy1JTiNJbmRpYW5hI1VTCi1nZW8jVVMtS1MjS2Fuc2FzI1VTCi1nZW8jVVMtS1kjS2VudHVja3kjVVMKLWdlbyNVUy1MQSNMb3Vpc2lhbmEjVVMKLWdlbyNVUy1NQSNNYXNzYWNodXNldHRzI1VTCi1nZW8jVVMtTUQjTWFyeWxhbmQjVVMKLWdlbyNVUy1NRSNNYWluZSNVUwotZ2VvI1VTLU1JI01pY2hpZ2FuI1VTCi1nZW8jVVMtTU4jTWlubmVzb3RhI1VTCi1nZW8jVVMtTU8jTWlzc291cmkjVVMKLWdlbyNVUy1NUCNOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMjVVMKLWdlbyNVUy1NUyNNaXNzaXNzaXBwaSNVUwotZ2VvI1VTLU1UI01vbnRhbmEjVVMKLWdlbyNVUy1OQyNOb3J0aCBDYXJvbGluYSNVUwotZ2VvI1VTLU5EI05vcnRoIERha290YSNVUwotZ2VvI1VTLU5FI05lYnJhc2thI1VTCi1nZW8jVVMtTkgjTmV3IEhhbXBzaGlyZSNVUwotZ2VvI1VTLU5KI05ldyBKZXJzZXkjVVMKLWdlbyNVUy1OTSNOZXcgTWV4aWNvI1VTCi1nZW8jVVMtTlYjTmV2YWRhI1VTCi1nZW8jVVMtTlkjTmV3IFlvcmsjVVMKLWdlbyNVUy1PSCNPaGlvI1VTCi1nZW8jVVMtT0sjT2tsYWhvbWEjVVMKLWdlbyNVUy1PUiNPcmVnb24jVVMKLWdlbyNVUy1QQSNQZW5uc3lsdmFuaWEjVVMKLWdlbyNVUy1QUiNQdWVydG8gUmljbyNVUwotZ2VvI1VTLVJJI1Job2RlIElzbGFuZCNVUwotZ2VvI1VTLVNDI1NvdXRoIENhcm9saW5hI1VTCi1nZW8jVVMtU0QjU291dGggRGFrb3RhI1VTCi1nZW8jVVMtVE4jVGVubmVzc2VlI1VTCi1nZW8jVVMtVFgjVGV4YXMjVVMKLWdlbyNVUy1VTSNVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHMjVVMKLWdlbyNVUy1VVCNVdGFoI1VTCi1nZW8jVVMtVkEjVmlyZ2luaWEjVVMKLWdlbyNVUy1WSSNWaXJnaW4gSXNsYW5kcyBPZiBUaGUgVS5TLiNVUwotZ2VvI1VTLVZUI1Zlcm1vbnQjVVMKLWdlbyNVUy1XQSNXYXNoaW5ndG9uI1VTCi1nZW8jVVMtV0kjV2lzY29uc2luI1VTCi1nZW8jVVMtV1YjV2VzdCBWaXJnaW5pYSNVUwotZ2VvI1VTLVdZI1d5b21pbmcjVVMKLWdlbyNVWSNVcnVndWF5Iy0tCi1nZW8jVVojVXpiZWtpc3RhbiMtLQotZ2VvI1ZBI1ZhdGljYW4gQ2l0eSBTdGF0ZSMtLQotZ2VvI1ZDI1N0IFZpbmNlbnQgQW5kIEdyZW5hZGluZXMjLS0KLWdlbyNWRSNWZW5lenVlbGEjLS0KLWdlbyNWRyMiVmlyZ2luIElzbGFuZHMsIEJyaXRpc2giIy0tCi1nZW8jVkkjVW5pdGVkIFN0YXRlcyBWaXJnaW4gSXNsYW5kcyMtLQotZ2VvI1ZOI1ZpZXQgTmFtIy0tCi1nZW8jVk4tMDEjTGFpIENoYXUjVk4KLWdlbyNWTi0wMiNMYW8gQ2FpI1ZOCi1nZW8jVk4tMDMjSGEgR2lhbmcjVk4KLWdlbyNWTi0wNCNDYW8gQmFuZyNWTgotZ2VvI1ZOLTA1I1NvbiBMYSNWTgotZ2VvI1ZOLTA2I1llbiBCYWkjVk4KLWdlbyNWTi0wNyNUdXllbiBRdWFuZyNWTgotZ2VvI1ZOLTA5I0xhbmcgU29uI1ZOCi1nZW8jVk4tMTMjUXVhbmcgTmluaCNWTgotZ2VvI1ZOLTE0I0hvYSBCaW5oI1ZOCi1nZW8jVk4tMTUjSGEgVGF5I1ZOCi1nZW8jVk4tMTgjTmluaCBCaW5oI1ZOCi1nZW8jVk4tMjAjVGhhaSBCaW5oI1ZOCi1nZW8jVk4tMjEjVGhhbmggSG9hI1ZOCi1nZW8jVk4tMjIjTmdoZSBBbiNWTgotZ2VvI1ZOLTIzI0hhIFRpbmgjVk4KLWdlbyNWTi0yNCNRdWFuZyBCaW5oI1ZOCi1nZW8jVk4tMjUjUXVhbmcgVHJpI1ZOCi1nZW8jVk4tMjYjVGh1YSBUaGllbi1IdWUjVk4KLWdlbyNWTi0yNyNRdWFuZyBOYW0jVk4KLWdlbyNWTi0yOCNLb24gVHVtI1ZOCi1nZW8jVk4tMjkjUXVhbmcgTmdhaSNWTgotZ2VvI1ZOLTMwI0dpYSBMYWkjVk4KLWdlbyNWTi0zMSNCaW5oIERpbmgjVk4KLWdlbyNWTi0zMiNQaHUgWWVuI1ZOCi1nZW8jVk4tMzMjRGFjIExhYyNWTgotZ2VvI1ZOLTM0I0toYW5oIEhvYSNWTgotZ2VvI1ZOLTM1I0xhbSBEb25nI1ZOCi1nZW8jVk4tMzYjTmluaCBUaHVhbiNWTgotZ2VvI1ZOLTM3I1RheSBOaW5oI1ZOCi1nZW8jVk4tMzkjRG9uZyBOYWkjVk4KLWdlbyNWTi00MCNCaW5oIFRodWFuI1ZOCi1nZW8jVk4tNDEjTG9uZyBBbiNWTgotZ2VvI1ZOLTQzI0JhIFJpYSAtIFZ1bmcgVGF1I1ZOCi1nZW8jVk4tNDQjQW4gR2lhbmcjVk4KLWdlbyNWTi00NSNEb25nIFRoYXAjVk4KLWdlbyNWTi00NiNUaWVuIEdpYW5nI1ZOCi1nZW8jVk4tNDcjS2llbiBHaWFuZyNWTgotZ2VvI1ZOLTQ4I0NhbiBUaG8jVk4KLWdlbyNWTi00OSNWaW5oIExvbmcjVk4KLWdlbyNWTi01MCNCZW4gVHJlI1ZOCi1nZW8jVk4tNTEjVHJhIFZpbmgjVk4KLWdlbyNWTi01MiNTb2MgVHJhbmcjVk4KLWdlbyNWTi01MyNCYWMgQ2FuI1ZOCi1nZW8jVk4tNTQjQmFjIEdpYW5nI1ZOCi1nZW8jVk4tNTUjQmFjIExpZXUjVk4KLWdlbyNWTi01NiNCYWMgTmluaCNWTgotZ2VvI1ZOLTU3I0JpbmggRHVvbmcjVk4KLWdlbyNWTi01OCNCaW5oIFBodW9jI1ZOCi1nZW8jVk4tNTkjQ2EgTWF1I1ZOCi1nZW8jVk4tNjAjIkRhIE5hbmcsIHRoYW5oIHBobyIjVk4KLWdlbyNWTi02MSNIYWkgRHVvbmcjVk4KLWdlbyNWTi02MiMiSGFpIFBob25nLCB0aGFuaCBwaG8iI1ZOCi1nZW8jVk4tNjMjSGEgTmFtI1ZOCi1nZW8jVk4tNjQjIkhhIE5vaSwgdGh1IGRvIiNWTgotZ2VvI1ZOLTY1IyJIbyBDaGkgTWluaCwgdGhhbmggcG8gW1NhaSBHb25dIiNWTgotZ2VvI1ZOLTY2I0h1bmcgWWVuI1ZOCi1nZW8jVk4tNjcjTmFtIERpbmgjVk4KLWdlbyNWTi02OCNQaHUgVGhvI1ZOCi1nZW8jVk4tNjkjVGhhaSBOZ3V5ZW4jVk4KLWdlbyNWTi03MCNWaW5oIFBodWMjVk4KLWdlbyNWVSNWYW51YXR1Iy0tCi1nZW8jV0YjV2FsbGlzIEFuZCBGdXR1bmEgSXNsYW5kcyMtLQotZ2VvI1dTI1NhbW9hIy0tCi1nZW8jWUUjWWVtZW4jLS0KLWdlbyNZVCNNYXlvdHRlIy0tCi1nZW8jWVUjWXVnb3NsYXZpYSAoRmVkIFJlcCBPZikjLS0KLWdlbyNZVS1DRyNDcm5hIEdvcmEjWVUKLWdlbyNZVS1TUiNTcmJpamEjWVUKLWdlbyNZVS1LTSNLb3Nvdm8tTWV0b2hpamEjWVUtU1IKLWdlbyNZVS1WTyNWb2p2b2RpbmEjWVUtU1IKLWdlbyNaQSNTb3V0aCBBZnJpY2EjLS0KLWdlbyNaTSNaYW1iaWEjLS0KLWdlbyNaVyNaaW1iYWJ3ZSMtLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvbmFpY3MtZGF0YS50eHQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9uYWljcy1kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ2ZjkwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9uYWljcy1kYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4MTQgKzAsMCBAQAotbmFpY3MjMTEjQWdyaWN1bHR1cmUsIEZvcmVzdHJ5LCBGaXNoaW5nIGFuZCBIdW50aW5nIzExCi1uYWljcyMxMTEjQ3JvcCBQcm9kdWN0aW9uIzExCi1uYWljcyMxMTExI09pbHNlZWQgYW5kIEdyYWluIEZhcm1pbmcjMTExCi1uYWljcyMxMTExMSNTb3liZWFuIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTIjT2lsc2VlZCAoZXhjZXB0IFNveWJlYW4pIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTMjRHJ5IFBlYSBhbmQgQmVhbiBGYXJtaW5nIzExMTEKLW5haWNzIzExMTE0I1doZWF0IEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTUjQ29ybiBGYXJtaW5nIzExMTEKLW5haWNzIzExMTE2I1JpY2UgRmFybWluZyMxMTExCi1uYWljcyMxMTExOSNPdGhlciBHcmFpbiBGYXJtaW5nIzExMTEKLW5haWNzIzExMTE5MSNPaWxzZWVkIGFuZCBHcmFpbiBDb21iaW5hdGlvbiBGYXJtaW5nIzExMTE5Ci1uYWljcyMxMTExOTkjQWxsIE90aGVyIEdyYWluIEZhcm1pbmcjMTExMTkKLW5haWNzIzExMTIjVmVnZXRhYmxlIGFuZCBNZWxvbiBGYXJtaW5nIzExMQotbmFpY3MjMTExMjEjVmVnZXRhYmxlIGFuZCBNZWxvbiBGYXJtaW5nIzExMTIKLW5haWNzIzExMTIxMSNQb3RhdG8gRmFybWluZyMxMTEyMQotbmFpY3MjMTExMjE5I090aGVyIFZlZ2V0YWJsZSAoZXhjZXB0IFBvdGF0bykgYW5kIE1lbG9uIEZhcm1pbmcjMTExMjEKLW5haWNzIzExMTMjRnJ1aXQgYW5kIFRyZWUgTnV0IEZhcm1pbmcjMTExCi1uYWljcyMxMTEzMSNPcmFuZ2UgR3JvdmVzIzExMTMKLW5haWNzIzExMTMyI0NpdHJ1cyAoZXhjZXB0IE9yYW5nZSkgR3JvdmVzIzExMTMKLW5haWNzIzExMTMzI05vbmNpdHJ1cyBGcnVpdCBhbmQgVHJlZSBOdXQgRmFybWluZyMxMTEzCi1uYWljcyMxMTEzMzEjQXBwbGUgT3JjaGFyZHMjMTExMzMKLW5haWNzIzExMTMzMiNHcmFwZSBWaW5leWFyZHMjMTExMzMKLW5haWNzIzExMTMzMyNTdHJhd2JlcnJ5IEZhcm1pbmcjMTExMzMKLW5haWNzIzExMTMzNCNCZXJyeSAoZXhjZXB0IFN0cmF3YmVycnkpIEZhcm1pbmcjMTExMzMKLW5haWNzIzExMTMzNSNUcmVlIE51dCBGYXJtaW5nIzExMTMzCi1uYWljcyMxMTEzMzYjRnJ1aXQgYW5kIFRyZWUgTnV0IENvbWJpbmF0aW9uIEZhcm1pbmcjMTExMzMKLW5haWNzIzExMTMzOSNPdGhlciBOb25jaXRydXMgRnJ1aXQgRmFybWluZyMxMTEzMwotbmFpY3MjMTExNCNHcmVlbmhvdXNlLCBOdXJzZXJ5LCBhbmQgRmxvcmljdWx0dXJlIFByb2R1Y3Rpb24jMTExCi1uYWljcyMxMTE0MSNGb29kIENyb3BzIEdyb3duIFVuZGVyIENvdmVyIzExMTQKLW5haWNzIzExMTQxMSNNdXNocm9vbSBQcm9kdWN0aW9uIzExMTQxCi1uYWljcyMxMTE0MTkjT3RoZXIgRm9vZCBDcm9wcyBHcm93biBVbmRlciBDb3ZlciMxMTE0MQotbmFpY3MjMTExNDIjTnVyc2VyeSBhbmQgRmxvcmljdWx0dXJlIFByb2R1Y3Rpb24jMTExNAotbmFpY3MjMTExNDIxI051cnNlcnkgYW5kIFRyZWUgUHJvZHVjdGlvbiMxMTE0MgotbmFpY3MjMTExNDIyI0Zsb3JpY3VsdHVyZSBQcm9kdWN0aW9uIzExMTQyCi1uYWljcyMxMTE5I090aGVyIENyb3AgRmFybWluZyMxMTEKLW5haWNzIzExMTkxI1RvYmFjY28gRmFybWluZyMxMTE5Ci1uYWljcyMxMTE5MiNDb3R0b24gRmFybWluZyMxMTE5Ci1uYWljcyMxMTE5MyNTdWdhcmNhbmUgRmFybWluZyMxMTE5Ci1uYWljcyMxMTE5NCNIYXkgRmFybWluZyMxMTE5Ci1uYWljcyMxMTE5OSNBbGwgT3RoZXIgQ3JvcCBGYXJtaW5nIzExMTkKLW5haWNzIzExMTk5MSNTdWdhciBCZWV0IEZhcm1pbmcjMTExOTkKLW5haWNzIzExMTk5MiNQZWFudXQgRmFybWluZyMxMTE5OQotbmFpY3MjMTExOTk4I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIENyb3AgRmFybWluZyMxMTE5OQotbmFpY3MjMTEyI0FuaW1hbCBQcm9kdWN0aW9uIzExCi1uYWljcyMxMTIxI0NhdHRsZSBSYW5jaGluZyBhbmQgRmFybWluZyMxMTIKLW5haWNzIzExMjExI0JlZWYgQ2F0dGxlIFJhbmNoaW5nIGFuZCBGYXJtaW5nLCBpbmNsdWRpbmcgRmVlZGxvdHMjMTEyMQotbmFpY3MjMTEyMTExI0JlZWYgQ2F0dGxlIFJhbmNoaW5nIGFuZCBGYXJtaW5nIzExMjExCi1uYWljcyMxMTIxMTIjQ2F0dGxlIEZlZWRsb3RzIzExMjExCi1uYWljcyMxMTIxMiNEYWlyeSBDYXR0bGUgYW5kIE1pbGsgUHJvZHVjdGlvbiMxMTIxCi1uYWljcyMxMTIxMyNEdWFsIFB1cnBvc2UgQ2F0dGxlIFJhbmNoaW5nIGFuZCBGYXJtaW5nIzExMjEKLW5haWNzIzExMjIjSG9nIGFuZCBQaWcgRmFybWluZyMxMTIKLW5haWNzIzExMjIxI0hvZyBhbmQgUGlnIEZhcm1pbmcjMTEyMgotbmFpY3MjMTEyMyNQb3VsdHJ5IGFuZCBFZ2cgUHJvZHVjdGlvbiMxMTIKLW5haWNzIzExMjMxI0NoaWNrZW4gRWdnIFByb2R1Y3Rpb24jMTEyMwotbmFpY3MjMTEyMzIjQnJvaWxlcnMgYW5kIE90aGVyIE1lYXQgVHlwZSBDaGlja2VuIFByb2R1Y3Rpb24jMTEyMwotbmFpY3MjMTEyMzMjVHVya2V5IFByb2R1Y3Rpb24jMTEyMwotbmFpY3MjMTEyMzQjUG91bHRyeSBIYXRjaGVyaWVzIzExMjMKLW5haWNzIzExMjM5I090aGVyIFBvdWx0cnkgUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTI0I1NoZWVwIGFuZCBHb2F0IEZhcm1pbmcjMTEyCi1uYWljcyMxMTI0MSNTaGVlcCBGYXJtaW5nIzExMjQKLW5haWNzIzExMjQyI0dvYXQgRmFybWluZyMxMTI0Ci1uYWljcyMxMTI1I0FuaW1hbCBBcXVhY3VsdHVyZSMxMTIKLW5haWNzIzExMjUxI0FuaW1hbCBBcXVhY3VsdHVyZSMxMTI1Ci1uYWljcyMxMTI1MTEjRmluZmlzaCBGYXJtaW5nIGFuZCBGaXNoIEhhdGNoZXJpZXMjMTEyNTEKLW5haWNzIzExMjUxMiNTaGVsbGZpc2ggRmFybWluZyMxMTI1MQotbmFpY3MjMTEyNTE5I090aGVyIEFuaW1hbCBBcXVhY3VsdHVyZSMxMTI1MQotbmFpY3MjMTEyOSNPdGhlciBBbmltYWwgUHJvZHVjdGlvbiMxMTIKLW5haWNzIzExMjkxI0FwaWN1bHR1cmUjMTEyOQotbmFpY3MjMTEyOTIjSG9yc2UgYW5kIE90aGVyIEVxdWluZSBQcm9kdWN0aW9uIzExMjkKLW5haWNzIzExMjkzI0Z1ci1CZWFyaW5nIEFuaW1hbCBhbmQgUmFiYml0IFByb2R1Y3Rpb24jMTEyOQotbmFpY3MjMTEyOTkjQWxsIE90aGVyIEFuaW1hbCBQcm9kdWN0aW9uIzExMjkKLW5haWNzIzExMyNGb3Jlc3RyeSBhbmQgTG9nZ2luZyMxMQotbmFpY3MjMTEzMSNUaW1iZXIgVHJhY3QgT3BlcmF0aW9ucyMxMTMKLW5haWNzIzExMzExI1RpbWJlciBUcmFjdCBPcGVyYXRpb25zIzExMzEKLW5haWNzIzExMzIjRm9yZXN0IE51cnNlcmllcyBhbmQgR2F0aGVyaW5nIG9mIEZvcmVzdCBQcm9kdWN0cyMxMTMKLW5haWNzIzExMzIxI0ZvcmVzdCBOdXJzZXJpZXMgYW5kIEdhdGhlcmluZyBvZiBGb3Jlc3QgUHJvZHVjdHMjMTEzMgotbmFpY3MjMTEzMyNMb2dnaW5nIzExMwotbmFpY3MjMTEzMzEjTG9nZ2luZyMxMTMzCi1uYWljcyMxMTQjRmlzaGluZywgSHVudGluZyBhbmQgVHJhcHBpbmcjMTEKLW5haWNzIzExNDEjRmlzaGluZyMxMTQKLW5haWNzIzExNDExI0Zpc2hpbmcjMTE0MQotbmFpY3MjMTE0MTExI0ZpbmZpc2ggRmlzaGluZyMxMTQxMQotbmFpY3MjMTE0MTEyI1NoZWxsZmlzaCBGaXNoaW5nIzExNDExCi1uYWljcyMxMTQxMTkjT3RoZXIgTWFyaW5lIEZpc2hpbmcjMTE0MTEKLW5haWNzIzExNDIjSHVudGluZyBhbmQgVHJhcHBpbmcjMTE0Ci1uYWljcyMxMTQyMSNIdW50aW5nIGFuZCBUcmFwcGluZyMxMTQyCi1uYWljcyMxMTUjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBBZ3JpY3VsdHVyZSBhbmQgRm9yZXN0cnkjMTEKLW5haWNzIzExNTEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBDcm9wIFByb2R1Y3Rpb24jMTE1Ci1uYWljcyMxMTUxMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIENyb3AgUHJvZHVjdGlvbiMxMTUxCi1uYWljcyMxMTUxMTEjQ290dG9uIEdpbm5pbmcjMTE1MTEKLW5haWNzIzExNTExMiNTb2lsIFByZXBhcmF0aW9uLCBQbGFudGluZywgYW5kIEN1bHRpdmF0aW5nIzExNTExCi1uYWljcyMxMTUxMTMjQ3JvcCBIYXJ2ZXN0aW5nLCBQcmltYXJpbHkgYnkgTWFjaGluZSMxMTUxMQotbmFpY3MjMTE1MTE0I1Bvc3RoYXJ2ZXN0IENyb3AgQWN0aXZpdGllcyAoZXhjZXB0IENvdHRvbiBHaW5uaW5nKSMxMTUxMQotbmFpY3MjMTE1MTE1I0Zhcm0gTGFib3IgQ29udHJhY3RvcnMgYW5kIENyZXcgTGVhZGVycyMxMTUxMQotbmFpY3MjMTE1MTE2I0Zhcm0gTWFuYWdlbWVudCBTZXJ2aWNlcyMxMTUxMQotbmFpY3MjMTE1MiNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFuaW1hbCBQcm9kdWN0aW9uIzExNQotbmFpY3MjMTE1MjEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBBbmltYWwgUHJvZHVjdGlvbiMxMTUyCi1uYWljcyMxMTUzI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgRm9yZXN0cnkjMTE1Ci1uYWljcyMxMTUzMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEZvcmVzdHJ5IzExNTMKLW5haWNzIzIxI01pbmluZyMyMQotbmFpY3MjMjExI09pbCBhbmQgR2FzIEV4dHJhY3Rpb24jMjEKLW5haWNzIzIxMTEjT2lsIGFuZCBHYXMgRXh0cmFjdGlvbiMyMTEKLW5haWNzIzIxMTExI09pbCBhbmQgR2FzIEV4dHJhY3Rpb24jMjExMQotbmFpY3MjMjExMTExI0NydWRlIFBldHJvbGV1bSBhbmQgTmF0dXJhbCBHYXMgRXh0cmFjdGlvbiMyMTExMQotbmFpY3MjMjExMTEyI05hdHVyYWwgR2FzIExpcXVpZCBFeHRyYWN0aW9uIzIxMTExCi1uYWljcyMyMTIjTWluaW5nIChleGNlcHQgT2lsIGFuZCBHYXMpIzIxCi1uYWljcyMyMTIxI0NvYWwgTWluaW5nIzIxMgotbmFpY3MjMjEyMTEjQ29hbCBNaW5pbmcjMjEyMQotbmFpY3MjMjEyMTExI0JpdHVtaW5vdXMgQ29hbCBhbmQgTGlnbml0ZSBTdXJmYWNlIE1pbmluZyMyMTIxMQotbmFpY3MjMjEyMTEyI0JpdHVtaW5vdXMgQ29hbCBVbmRlcmdyb3VuZCBNaW5pbmcjMjEyMTEKLW5haWNzIzIxMjExMyNBbnRocmFjaXRlIE1pbmluZyMyMTIxMQotbmFpY3MjMjEyMiNNZXRhbCBPcmUgTWluaW5nIzIxMgotbmFpY3MjMjEyMjEjSXJvbiBPcmUgTWluaW5nIzIxMjIKLW5haWNzIzIxMjIyI0dvbGQgT3JlIGFuZCBTaWx2ZXIgT3JlIE1pbmluZyMyMTIyCi1uYWljcyMyMTIyMjEjR29sZCBPcmUgTWluaW5nIzIxMjIyCi1uYWljcyMyMTIyMjIjU2lsdmVyIE9yZSBNaW5pbmcjMjEyMjIKLW5haWNzIzIxMjIzI0NvcHBlciwgTmlja2VsLCBMZWFkLCBhbmQgWmluYyBNaW5pbmcjMjEyMgotbmFpY3MjMjEyMjMxI0xlYWQgT3JlIGFuZCBaaW5jIE9yZSBNaW5pbmcjMjEyMjMKLW5haWNzIzIxMjIzNCNDb3BwZXIgT3JlIGFuZCBOaWNrZWwgT3JlIE1pbmluZyMyMTIyMwotbmFpY3MjMjEyMjkjT3RoZXIgTWV0YWwgT3JlIE1pbmluZyMyMTIyCi1uYWljcyMyMTIyOTEjVXJhbml1bS1SYWRpdW0tVmFuYWRpdW0gT3JlIE1pbmluZyMyMTIyOQotbmFpY3MjMjEyMjk5I0FsbCBPdGhlciBNZXRhbCBPcmUgTWluaW5nIzIxMjI5Ci1uYWljcyMyMTIzI05vbm1ldGFsbGljIE1pbmVyYWwgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyCi1uYWljcyMyMTIzMSNTdG9uZSBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzCi1uYWljcyMyMTIzMTEjRGltZW5zaW9uIFN0b25lIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMxCi1uYWljcyMyMTIzMTIjQ3J1c2hlZCBhbmQgQnJva2VuIExpbWVzdG9uZSBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzMQotbmFpY3MjMjEyMzEzI0NydXNoZWQgYW5kIEJyb2tlbiBHcmFuaXRlIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMxCi1uYWljcyMyMTIzMTkjT3RoZXIgQ3J1c2hlZCBhbmQgQnJva2VuIFN0b25lIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMxCi1uYWljcyMyMTIzMiNTYW5kLCBHcmF2ZWwsIENsYXksIGFuZCBDZXJhbWljIGFuZCBSZWZyYWN0b3J5IE1pbmVyYWxzIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMKLW5haWNzIzIxMjMyMSNDb25zdHJ1Y3Rpb24gU2FuZCBhbmQgR3JhdmVsIE1pbmluZyMyMTIzMgotbmFpY3MjMjEyMzIyI0luZHVzdHJpYWwgU2FuZCBNaW5pbmcjMjEyMzIKLW5haWNzIzIxMjMyNCNLYW9saW4gYW5kIEJhbGwgQ2xheSBNaW5pbmcjMjEyMzIKLW5haWNzIzIxMjMyNSNDbGF5IGFuZCBDZXJhbWljIGFuZCBSZWZyYWN0b3J5IE1pbmVyYWxzIE1pbmluZyMyMTIzMgotbmFpY3MjMjEyMzkjT3RoZXIgTm9ubWV0YWxsaWMgTWluZXJhbCBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzCi1uYWljcyMyMTIzOTEjUG90YXNoLCBTb2RhLCBhbmQgQm9yYXRlIE1pbmVyYWwgTWluaW5nIzIxMjM5Ci1uYWljcyMyMTIzOTIjUGhvc3BoYXRlIFJvY2sgTWluaW5nIzIxMjM5Ci1uYWljcyMyMTIzOTMjT3RoZXIgQ2hlbWljYWwgYW5kIEZlcnRpbGl6ZXIgTWluZXJhbCBNaW5pbmcjMjEyMzkKLW5haWNzIzIxMjM5OSNBbGwgT3RoZXIgTm9ubWV0YWxsaWMgTWluZXJhbCBNaW5pbmcjMjEyMzkKLW5haWNzIzIxMyNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIE1pbmluZyMyMQotbmFpY3MjMjEzMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIE1pbmluZyMyMTMKLW5haWNzIzIxMzExI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWluaW5nIzIxMzEKLW5haWNzIzIxMzExMSNEcmlsbGluZyBPaWwgYW5kIEdhcyBXZWxscyMyMTMxMQotbmFpY3MjMjEzMTEyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgT2lsIGFuZCBHYXMgT3BlcmF0aW9ucyMyMTMxMQotbmFpY3MjMjEzMTEzI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQ29hbCBNaW5pbmcjMjEzMTEKLW5haWNzIzIxMzExNCNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIE1ldGFsIE1pbmluZyMyMTMxMQotbmFpY3MjMjEzMTE1I1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTm9ubWV0YWxsaWMgTWluZXJhbHMgKGV4Y2VwdCBGdWVscykjMjEzMTEKLW5haWNzIzIyI1V0aWxpdGllcyMyMgotbmFpY3MjMjIxI1V0aWxpdGllcyMyMgotbmFpY3MjMjIxMSNFbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uLCBUcmFuc21pc3Npb24gYW5kIERpc3RyaWJ1dGlvbiMyMjEKLW5haWNzIzIyMTExI0VsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24jMjIxMQotbmFpY3MjMjIxMTExI0h5ZHJvZWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExMQotbmFpY3MjMjIxMTEyI0Zvc3NpbCBGdWVsIEVsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24jMjIxMTEKLW5haWNzIzIyMTExMyNOdWNsZWFyIEVsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24jMjIxMTEKLW5haWNzIzIyMTExOSNPdGhlciBFbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uIzIyMTExCi1uYWljcyMyMjExMiNFbGVjdHJpYyBQb3dlciBUcmFuc21pc3Npb24sIENvbnRyb2wsIGFuZCBEaXN0cmlidXRpb24jMjIxMQotbmFpY3MjMjIxMTIxI0VsZWN0cmljIEJ1bGsgUG93ZXIgVHJhbnNtaXNzaW9uIGFuZCBDb250cm9sIzIyMTEyCi1uYWljcyMyMjExMjIjRWxlY3RyaWMgUG93ZXIgRGlzdHJpYnV0aW9uIzIyMTEyCi1uYWljcyMyMjEyI05hdHVyYWwgR2FzIERpc3RyaWJ1dGlvbiMyMjEKLW5haWNzIzIyMTIxI05hdHVyYWwgR2FzIERpc3RyaWJ1dGlvbiMyMjEyCi1uYWljcyMyMjEzI1dhdGVyLCBTZXdhZ2UgYW5kIE90aGVyIFN5c3RlbXMjMjIxCi1uYWljcyMyMjEzMSNXYXRlciBTdXBwbHkgYW5kIElycmlnYXRpb24gU3lzdGVtcyMyMjEzCi1uYWljcyMyMjEzMiNTZXdhZ2UgVHJlYXRtZW50IEZhY2lsaXRpZXMjMjIxMwotbmFpY3MjMjIxMzMjU3RlYW0gYW5kIEFpci1Db25kaXRpb25pbmcgU3VwcGx5IzIyMTMKLW5haWNzIzIzI0NvbnN0cnVjdGlvbiMyMwotbmFpY3MjMjMzI0J1aWxkaW5nLCBEZXZlbG9waW5nLCBhbmQgR2VuZXJhbCBDb250cmFjdGluZyMyMwotbmFpY3MjMjMzMSNMYW5kIFN1YmRpdmlzaW9uIGFuZCBMYW5kIERldmVsb3BtZW50IzIzMwotbmFpY3MjMjMzMTEjTGFuZCBTdWJkaXZpc2lvbiBhbmQgTGFuZCBEZXZlbG9wbWVudCMyMzMxCi1uYWljcyMyMzMyI1Jlc2lkZW50aWFsIEJ1aWxkaW5nIENvbnN0cnVjdGlvbiMyMzMKLW5haWNzIzIzMzIxI1NpbmdsZSBGYW1pbHkgSG91c2luZyBDb25zdHJ1Y3Rpb24jMjMzMgotbmFpY3MjMjMzMjIjTXVsdGlmYW1pbHkgSG91c2luZyBDb25zdHJ1Y3Rpb24jMjMzMgotbmFpY3MjMjMzMyNOb25yZXNpZGVudGlhbCBCdWlsZGluZyBDb25zdHJ1Y3Rpb24jMjMzCi1uYWljcyMyMzMzMSNNYW51ZmFjdHVyaW5nIGFuZCBJbmR1c3RyaWFsIEJ1aWxkaW5nIENvbnN0cnVjdGlvbiMyMzMzCi1uYWljcyMyMzMzMiNDb21tZXJjaWFsIGFuZCBJbnN0aXR1dGlvbmFsIEJ1aWxkaW5nIENvbnN0cnVjdGlvbiMyMzMzCi1uYWljcyMyMzQjSGVhdnkgQ29uc3RydWN0aW9uIzIzCi1uYWljcyMyMzQxI0hpZ2h3YXksIFN0cmVldCwgQnJpZGdlLCBhbmQgVHVubmVsIENvbnN0cnVjdGlvbiMyMzQKLW5haWNzIzIzNDExI0hpZ2h3YXkgYW5kIFN0cmVldCBDb25zdHJ1Y3Rpb24jMjM0MQotbmFpY3MjMjM0MTIjQnJpZGdlIGFuZCBUdW5uZWwgQ29uc3RydWN0aW9uIzIzNDEKLW5haWNzIzIzNDkjT3RoZXIgSGVhdnkgQ29uc3RydWN0aW9uIzIzNAotbmFpY3MjMjM0OTEjV2F0ZXIsIFNld2VyLCBhbmQgUGlwZWxpbmUgQ29uc3RydWN0aW9uIzIzNDkKLW5haWNzIzIzNDkyI1Bvd2VyIGFuZCBDb21tdW5pY2F0aW9uIFRyYW5zbWlzc2lvbiBMaW5lIENvbnN0cnVjdGlvbiMyMzQ5Ci1uYWljcyMyMzQ5MyNJbmR1c3RyaWFsIE5vbmJ1aWxkaW5nIFN0cnVjdHVyZSBDb25zdHJ1Y3Rpb24jMjM0OQotbmFpY3MjMjM0OTkjQWxsIE90aGVyIEhlYXZ5IENvbnN0cnVjdGlvbiMyMzQ5Ci1uYWljcyMyMzUjU3BlY2lhbCBUcmFkZSBDb250cmFjdG9ycyMyMwotbmFpY3MjMjM1MSNQbHVtYmluZywgSGVhdGluZywgYW5kIEFpci1Db25kaXRpb25pbmcgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzUxMSNQbHVtYmluZywgSGVhdGluZywgYW5kIEFpci1Db25kaXRpb25pbmcgQ29udHJhY3RvcnMjMjM1MQotbmFpY3MjMjM1MiNQYWludGluZyBhbmQgV2FsbCBDb3ZlcmluZyBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTIxI1BhaW50aW5nIGFuZCBXYWxsIENvdmVyaW5nIENvbnRyYWN0b3JzIzIzNTIKLW5haWNzIzIzNTMjRWxlY3RyaWNhbCBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTMxI0VsZWN0cmljYWwgQ29udHJhY3RvcnMjMjM1MwotbmFpY3MjMjM1NCNNYXNvbnJ5LCBEcnl3YWxsLCBJbnN1bGF0aW9uLCBhbmQgVGlsZSBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTQxI01hc29ucnkgYW5kIFN0b25lIENvbnRyYWN0b3JzIzIzNTQKLW5haWNzIzIzNTQyI0RyeXdhbGwsIFBsYXN0ZXJpbmcsIEFjb3VzdGljYWwsIGFuZCBJbnN1bGF0aW9uIENvbnRyYWN0b3JzIzIzNTQKLW5haWNzIzIzNTQzI1RpbGUsIE1hcmJsZSwgVGVycmF6em8sIGFuZCBNb3NhaWMgQ29udHJhY3RvcnMjMjM1NAotbmFpY3MjMjM1NSNDYXJwZW50cnkgYW5kIEZsb29yIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1NTEjQ2FycGVudHJ5IENvbnRyYWN0b3JzIzIzNTUKLW5haWNzIzIzNTUyI0Zsb29yIExheWluZyBhbmQgT3RoZXIgRmxvb3IgQ29udHJhY3RvcnMjMjM1NQotbmFpY3MjMjM1NiNSb29maW5nLCBTaWRpbmcsIGFuZCBTaGVldCBNZXRhbCBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTYxI1Jvb2ZpbmcsIFNpZGluZywgYW5kIFNoZWV0IE1ldGFsIENvbnRyYWN0b3JzIzIzNTYKLW5haWNzIzIzNTcjQ29uY3JldGUgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU3MSNDb25jcmV0ZSBDb250cmFjdG9ycyMyMzU3Ci1uYWljcyMyMzU4I1dhdGVyIFdlbGwgRHJpbGxpbmcgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU4MSNXYXRlciBXZWxsIERyaWxsaW5nIENvbnRyYWN0b3JzIzIzNTgKLW5haWNzIzIzNTkjT3RoZXIgU3BlY2lhbCBUcmFkZSBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTkxI1N0cnVjdHVyYWwgU3RlZWwgRXJlY3Rpb24gQ29udHJhY3RvcnMjMjM1OQotbmFpY3MjMjM1OTIjR2xhc3MgYW5kIEdsYXppbmcgQ29udHJhY3RvcnMjMjM1OQotbmFpY3MjMjM1OTMjRXhjYXZhdGlvbiBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5NCNXcmVja2luZyBhbmQgRGVtb2xpdGlvbiBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5NSNCdWlsZGluZyBFcXVpcG1lbnQgYW5kIE90aGVyIE1hY2hpbmVyeSBJbnN0YWxsYXRpb24gQ29udHJhY3RvcnMjMjM1OQotbmFpY3MjMjM1OTkjQWxsIE90aGVyIFNwZWNpYWwgVHJhZGUgQ29udHJhY3RvcnMjMjM1OQotbmFpY3MjMzEjTWFudWZhY3R1cmluZyMzMQotbmFpY3MjMzExI0Zvb2QgTWFudWZhY3R1cmluZyMzMQotbmFpY3MjMzExMSNBbmltYWwgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExMTEjQW5pbWFsIEZvb2QgTWFudWZhY3R1cmluZyMzMTExCi1uYWljcyMzMTExMTEjRG9nIGFuZCBDYXQgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTExCi1uYWljcyMzMTExMTkjT3RoZXIgQW5pbWFsIEZvb2QgTWFudWZhY3R1cmluZyMzMTExMQotbmFpY3MjMzExMiNHcmFpbiBhbmQgT2lsc2VlZCBNaWxsaW5nIzMxMQotbmFpY3MjMzExMjEjRmxvdXIgTWlsbGluZyBhbmQgTWFsdCBNYW51ZmFjdHVyaW5nIzMxMTIKLW5haWNzIzMxMTIxMSNGbG91ciBNaWxsaW5nIzMxMTIxCi1uYWljcyMzMTEyMTIjUmljZSBNaWxsaW5nIzMxMTIxCi1uYWljcyMzMTEyMTMjTWFsdCBNYW51ZmFjdHVyaW5nIzMxMTIxCi1uYWljcyMzMTEyMiNTdGFyY2ggYW5kIFZlZ2V0YWJsZSBGYXRzIGFuZCBPaWxzIE1hbnVmYWN0dXJpbmcjMzExMgotbmFpY3MjMzExMjIxI1dldCBDb3JuIE1pbGxpbmcjMzExMjIKLW5haWNzIzMxMTIyMiNTb3liZWFuIFByb2Nlc3NpbmcjMzExMjIKLW5haWNzIzMxMTIyMyNPdGhlciBPaWxzZWVkIFByb2Nlc3NpbmcjMzExMjIKLW5haWNzIzMxMTIyNSNGYXRzIGFuZCBPaWxzIFJlZmluaW5nIGFuZCBCbGVuZGluZyMzMTEyMgotbmFpY3MjMzExMjMjQnJlYWtmYXN0IENlcmVhbCBNYW51ZmFjdHVyaW5nIzMxMTIKLW5haWNzIzMxMTMjU3VnYXIgYW5kIENvbmZlY3Rpb25lcnkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExMzEjU3VnYXIgTWFudWZhY3R1cmluZyMzMTEzCi1uYWljcyMzMTEzMTEjU3VnYXJjYW5lIE1pbGxzIzMxMTMxCi1uYWljcyMzMTEzMTIjQ2FuZSBTdWdhciBSZWZpbmluZyMzMTEzMQotbmFpY3MjMzExMzEzI0JlZXQgU3VnYXIgTWFudWZhY3R1cmluZyMzMTEzMQotbmFpY3MjMzExMzIjQ2hvY29sYXRlIGFuZCBDb25mZWN0aW9uZXJ5IE1hbnVmYWN0dXJpbmcgZnJvbSBDYWNhbyBCZWFucyMzMTEzCi1uYWljcyMzMTEzMyNDb25mZWN0aW9uZXJ5IE1hbnVmYWN0dXJpbmcgZnJvbSBQdXJjaGFzZWQgQ2hvY29sYXRlIzMxMTMKLW5haWNzIzMxMTM0I05vbmNob2NvbGF0ZSBDb25mZWN0aW9uZXJ5IE1hbnVmYWN0dXJpbmcjMzExMwotbmFpY3MjMzExNCNGcnVpdCBhbmQgVmVnZXRhYmxlIFByZXNlcnZpbmcgYW5kIFNwZWNpYWx0eSBGb29kIE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTE0MSNGcm96ZW4gRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTQKLW5haWNzIzMxMTQxMSNGcm96ZW4gRnJ1aXQsIEp1aWNlLCBhbmQgVmVnZXRhYmxlIE1hbnVmYWN0dXJpbmcjMzExNDEKLW5haWNzIzMxMTQxMiNGcm96ZW4gU3BlY2lhbHR5IEZvb2QgTWFudWZhY3R1cmluZyMzMTE0MQotbmFpY3MjMzExNDIjRnJ1aXQgYW5kIFZlZ2V0YWJsZSBDYW5uaW5nLCBQaWNrbGluZywgYW5kIERyeWluZyMzMTE0Ci1uYWljcyMzMTE0MjEjRnJ1aXQgYW5kIFZlZ2V0YWJsZSBDYW5uaW5nIzMxMTQyCi1uYWljcyMzMTE0MjIjU3BlY2lhbHR5IENhbm5pbmcjMzExNDIKLW5haWNzIzMxMTQyMyNEcmllZCBhbmQgRGVoeWRyYXRlZCBGb29kIE1hbnVmYWN0dXJpbmcjMzExNDIKLW5haWNzIzMxMTUjRGFpcnkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExNTEjRGFpcnkgUHJvZHVjdCAoZXhjZXB0IEZyb3plbikgTWFudWZhY3R1cmluZyMzMTE1Ci1uYWljcyMzMTE1MTEjRmx1aWQgTWlsayBNYW51ZmFjdHVyaW5nIzMxMTUxCi1uYWljcyMzMTE1MTIjQ3JlYW1lcnkgQnV0dGVyIE1hbnVmYWN0dXJpbmcjMzExNTEKLW5haWNzIzMxMTUxMyNDaGVlc2UgTWFudWZhY3R1cmluZyMzMTE1MQotbmFpY3MjMzExNTE0I0RyeSwgQ29uZGVuc2VkLCBhbmQgRXZhcG9yYXRlZCBEYWlyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExNTEKLW5haWNzIzMxMTUyI0ljZSBDcmVhbSBhbmQgRnJvemVuIERlc3NlcnQgTWFudWZhY3R1cmluZyMzMTE1Ci1uYWljcyMzMTE2I0FuaW1hbCBTbGF1Z2h0ZXJpbmcgYW5kIFByb2Nlc3NpbmcjMzExCi1uYWljcyMzMTE2MSNBbmltYWwgU2xhdWdodGVyaW5nIGFuZCBQcm9jZXNzaW5nIzMxMTYKLW5haWNzIzMxMTYxMSNBbmltYWwgKGV4Y2VwdCBQb3VsdHJ5KSBTbGF1Z2h0ZXJpbmcjMzExNjEKLW5haWNzIzMxMTYxMiNNZWF0IFByb2Nlc3NlZCBmcm9tIENhcmNhc3NlcyMzMTE2MQotbmFpY3MjMzExNjEzI1JlbmRlcmluZyBhbmQgTWVhdCBCeXByb2R1Y3QgUHJvY2Vzc2luZyMzMTE2MQotbmFpY3MjMzExNjE1I1BvdWx0cnkgUHJvY2Vzc2luZyMzMTE2MQotbmFpY3MjMzExNyNTZWFmb29kIFByb2R1Y3QgUHJlcGFyYXRpb24gYW5kIFBhY2thZ2luZyMzMTEKLW5haWNzIzMxMTcxI1NlYWZvb2QgUHJvZHVjdCBQcmVwYXJhdGlvbiBhbmQgUGFja2FnaW5nIzMxMTcKLW5haWNzIzMxMTcxMSNTZWFmb29kIENhbm5pbmcjMzExNzEKLW5haWNzIzMxMTcxMiNGcmVzaCBhbmQgRnJvemVuIFNlYWZvb2QgUHJvY2Vzc2luZyMzMTE3MQotbmFpY3MjMzExOCNCYWtlcmllcyBhbmQgVG9ydGlsbGEgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTgxI0JyZWFkIGFuZCBCYWtlcnkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxMTgKLW5haWNzIzMxMTgxMSNSZXRhaWwgQmFrZXJpZXMjMzExODEKLW5haWNzIzMxMTgxMiNDb21tZXJjaWFsIEJha2VyaWVzIzMxMTgxCi1uYWljcyMzMTE4MTMjRnJvemVuIENha2VzLCBQaWVzLCBhbmQgT3RoZXIgUGFzdHJpZXMgTWFudWZhY3R1cmluZyMzMTE4MQotbmFpY3MjMzExODIjQ29va2llLCBDcmFja2VyLCBhbmQgUGFzdGEgTWFudWZhY3R1cmluZyMzMTE4Ci1uYWljcyMzMTE4MjEjQ29va2llIGFuZCBDcmFja2VyIE1hbnVmYWN0dXJpbmcjMzExODIKLW5haWNzIzMxMTgyMiNGbG91ciBNaXhlcyBhbmQgRG91Z2ggTWFudWZhY3R1cmluZyBmcm9tIFB1cmNoYXNlZCBGbG91ciMzMTE4MgotbmFpY3MjMzExODIzI0RyeSBQYXN0YSBNYW51ZmFjdHVyaW5nIzMxMTgyCi1uYWljcyMzMTE4MyNUb3J0aWxsYSBNYW51ZmFjdHVyaW5nIzMxMTgKLW5haWNzIzMxMTkjT3RoZXIgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExOTEjU25hY2sgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTkKLW5haWNzIzMxMTkxMSNSb2FzdGVkIE51dHMgYW5kIFBlYW51dCBCdXR0ZXIgTWFudWZhY3R1cmluZyMzMTE5MQotbmFpY3MjMzExOTE5I090aGVyIFNuYWNrIEZvb2QgTWFudWZhY3R1cmluZyMzMTE5MQotbmFpY3MjMzExOTIjQ29mZmVlIGFuZCBUZWEgTWFudWZhY3R1cmluZyMzMTE5Ci1uYWljcyMzMTE5MyNGbGF2b3JpbmcgU3lydXAgYW5kIENvbmNlbnRyYXRlIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTQjU2Vhc29uaW5nIGFuZCBEcmVzc2luZyBNYW51ZmFjdHVyaW5nIzMxMTkKLW5haWNzIzMxMTk0MSNNYXlvbm5haXNlLCBEcmVzc2luZywgYW5kIE90aGVyIFByZXBhcmVkIFNhdWNlIE1hbnVmYWN0dXJpbmcjMzExOTQKLW5haWNzIzMxMTk0MiNTcGljZSBhbmQgRXh0cmFjdCBNYW51ZmFjdHVyaW5nIzMxMTk0Ci1uYWljcyMzMTE5OSNBbGwgT3RoZXIgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTkKLW5haWNzIzMxMTk5MSNQZXJpc2hhYmxlIFByZXBhcmVkIEZvb2QgTWFudWZhY3R1cmluZyMzMTE5OQotbmFpY3MjMzExOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEZvb2QgTWFudWZhY3R1cmluZyMzMTE5OQotbmFpY3MjMzEyI0JldmVyYWdlIGFuZCBUb2JhY2NvIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMQotbmFpY3MjMzEyMSNCZXZlcmFnZSBNYW51ZmFjdHVyaW5nIzMxMgotbmFpY3MjMzEyMTEjU29mdCBEcmluayBhbmQgSWNlIE1hbnVmYWN0dXJpbmcjMzEyMQotbmFpY3MjMzEyMTExI1NvZnQgRHJpbmsgTWFudWZhY3R1cmluZyMzMTIxMQotbmFpY3MjMzEyMTEyI0JvdHRsZWQgV2F0ZXIgTWFudWZhY3R1cmluZyMzMTIxMQotbmFpY3MjMzEyMTEzI0ljZSBNYW51ZmFjdHVyaW5nIzMxMjExCi1uYWljcyMzMTIxMiNCcmV3ZXJpZXMjMzEyMQotbmFpY3MjMzEyMTMjV2luZXJpZXMjMzEyMQotbmFpY3MjMzEyMTQjRGlzdGlsbGVyaWVzIzMxMjEKLW5haWNzIzMxMjIjVG9iYWNjbyBNYW51ZmFjdHVyaW5nIzMxMgotbmFpY3MjMzEyMjEjVG9iYWNjbyBTdGVtbWluZyBhbmQgUmVkcnlpbmcjMzEyMgotbmFpY3MjMzEyMjIjVG9iYWNjbyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzEyMgotbmFpY3MjMzEyMjIxI0NpZ2FyZXR0ZSBNYW51ZmFjdHVyaW5nIzMxMjIyCi1uYWljcyMzMTIyMjkjT3RoZXIgVG9iYWNjbyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzEyMjIKLW5haWNzIzMxMyNUZXh0aWxlIE1pbGxzIzMxCi1uYWljcyMzMTMxI0ZpYmVyLCBZYXJuLCBhbmQgVGhyZWFkIE1pbGxzIzMxMwotbmFpY3MjMzEzMTEjRmliZXIsIFlhcm4sIGFuZCBUaHJlYWQgTWlsbHMjMzEzMQotbmFpY3MjMzEzMTExI1lhcm4gU3Bpbm5pbmcgTWlsbHMjMzEzMTEKLW5haWNzIzMxMzExMiNZYXJuIFRleHR1cml6aW5nLCBUaHJvd2luZywgYW5kIFR3aXN0aW5nIE1pbGxzIzMxMzExCi1uYWljcyMzMTMxMTMjVGhyZWFkIE1pbGxzIzMxMzExCi1uYWljcyMzMTMyI0ZhYnJpYyBNaWxscyMzMTMKLW5haWNzIzMxMzIxI0Jyb2Fkd292ZW4gRmFicmljIE1pbGxzIzMxMzIKLW5haWNzIzMxMzIyI05hcnJvdyBGYWJyaWMgTWlsbHMgYW5kIFNjaGlmZmxpIE1hY2hpbmUgRW1icm9pZGVyeSMzMTMyCi1uYWljcyMzMTMyMjEjTmFycm93IEZhYnJpYyBNaWxscyMzMTMyMgotbmFpY3MjMzEzMjIyI1NjaGlmZmxpIE1hY2hpbmUgRW1icm9pZGVyeSMzMTMyMgotbmFpY3MjMzEzMjMjTm9ud292ZW4gRmFicmljIE1pbGxzIzMxMzIKLW5haWNzIzMxMzI0I0tuaXQgRmFicmljIE1pbGxzIzMxMzIKLW5haWNzIzMxMzI0MSNXZWZ0IEtuaXQgRmFicmljIE1pbGxzIzMxMzI0Ci1uYWljcyMzMTMyNDkjT3RoZXIgS25pdCBGYWJyaWMgYW5kIExhY2UgTWlsbHMjMzEzMjQKLW5haWNzIzMxMzMjVGV4dGlsZSBhbmQgRmFicmljIEZpbmlzaGluZyBhbmQgRmFicmljIENvYXRpbmcgTWlsbHMjMzEzCi1uYWljcyMzMTMzMSNUZXh0aWxlIGFuZCBGYWJyaWMgRmluaXNoaW5nIE1pbGxzIzMxMzMKLW5haWNzIzMxMzMxMSNCcm9hZHdvdmVuIEZhYnJpYyBGaW5pc2hpbmcgTWlsbHMjMzEzMzEKLW5haWNzIzMxMzMxMiNUZXh0aWxlIGFuZCBGYWJyaWMgRmluaXNoaW5nIChleGNlcHQgQnJvYWR3b3ZlbiBGYWJyaWMpIE1pbGxzIzMxMzMxCi1uYWljcyMzMTMzMiNGYWJyaWMgQ29hdGluZyBNaWxscyMzMTMzCi1uYWljcyMzMTQjVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxCi1uYWljcyMzMTQxI1RleHRpbGUgRnVybmlzaGluZ3MgTWlsbHMjMzE0Ci1uYWljcyMzMTQxMSNDYXJwZXQgYW5kIFJ1ZyBNaWxscyMzMTQxCi1uYWljcyMzMTQxMiNDdXJ0YWluIGFuZCBMaW5lbiBNaWxscyMzMTQxCi1uYWljcyMzMTQxMjEjQ3VydGFpbiBhbmQgRHJhcGVyeSBNaWxscyMzMTQxMgotbmFpY3MjMzE0MTI5I090aGVyIEhvdXNlaG9sZCBUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzE0MTIKLW5haWNzIzMxNDkjT3RoZXIgVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxNAotbmFpY3MjMzE0OTEjVGV4dGlsZSBCYWcgYW5kIENhbnZhcyBNaWxscyMzMTQ5Ci1uYWljcyMzMTQ5MTEjVGV4dGlsZSBCYWcgTWlsbHMjMzE0OTEKLW5haWNzIzMxNDkxMiNDYW52YXMgYW5kIFJlbGF0ZWQgUHJvZHVjdCBNaWxscyMzMTQ5MQotbmFpY3MjMzE0OTkjQWxsIE90aGVyIFRleHRpbGUgUHJvZHVjdCBNaWxscyMzMTQ5Ci1uYWljcyMzMTQ5OTEjUm9wZSwgQ29yZGFnZSwgYW5kIFR3aW5lIE1pbGxzIzMxNDk5Ci1uYWljcyMzMTQ5OTIjVGlyZSBDb3JkIGFuZCBUaXJlIEZhYnJpYyBNaWxscyMzMTQ5OQotbmFpY3MjMzE0OTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFRleHRpbGUgUHJvZHVjdCBNaWxscyMzMTQ5OQotbmFpY3MjMzE1I0FwcGFyZWwgTWFudWZhY3R1cmluZyMzMQotbmFpY3MjMzE1MSNBcHBhcmVsIEtuaXR0aW5nIE1pbGxzIzMxNQotbmFpY3MjMzE1MTEjSG9zaWVyeSBhbmQgU29jayBNaWxscyMzMTUxCi1uYWljcyMzMTUxMTEjU2hlZXIgSG9zaWVyeSBNaWxscyMzMTUxMQotbmFpY3MjMzE1MTE5I090aGVyIEhvc2llcnkgYW5kIFNvY2sgTWlsbHMjMzE1MTEKLW5haWNzIzMxNTE5I090aGVyIEFwcGFyZWwgS25pdHRpbmcgTWlsbHMjMzE1MQotbmFpY3MjMzE1MTkxI091dGVyd2VhciBLbml0dGluZyBNaWxscyMzMTUxOQotbmFpY3MjMzE1MTkyI1VuZGVyd2VhciBhbmQgTmlnaHR3ZWFyIEtuaXR0aW5nIE1pbGxzIzMxNTE5Ci1uYWljcyMzMTUyI0N1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUKLW5haWNzIzMxNTIxI0N1dCBhbmQgU2V3IEFwcGFyZWwgQ29udHJhY3RvcnMjMzE1MgotbmFpY3MjMzE1MjExI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBBcHBhcmVsIENvbnRyYWN0b3JzIzMxNTIxCi1uYWljcyMzMTUyMTIjV29tZW4ncywgR2lybHMnLCBhbmQgSW5mYW50cycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBDb250cmFjdG9ycyMzMTUyMQotbmFpY3MjMzE1MjIjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyCi1uYWljcyMzMTUyMjEjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IFVuZGVyd2VhciBhbmQgTmlnaHR3ZWFyIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyMiNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgU3VpdCwgQ29hdCwgYW5kIE92ZXJjb2F0IE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyMyNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgU2hpcnQgKGV4Y2VwdCBXb3JrIFNoaXJ0KSBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMjQjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IFRyb3VzZXIsIFNsYWNrLCBhbmQgSmVhbiBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMjUjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IFdvcmsgQ2xvdGhpbmcgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjI4I01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBPdGhlciBPdXRlcndlYXIgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjMjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyCi1uYWljcyMzMTUyMzEjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IExpbmdlcmllLCBMb3VuZ2V3ZWFyLCBhbmQgTmlnaHR3ZWFyIE1hbnVmYWN0dXJpbmcjMzE1MjMKLW5haWNzIzMxNTIzMiNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgQmxvdXNlIGFuZCBTaGlydCBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyMzMjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IERyZXNzIE1hbnVmYWN0dXJpbmcjMzE1MjMKLW5haWNzIzMxNTIzNCNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgU3VpdCwgQ29hdCwgVGFpbG9yZWQgSmFja2V0LCBhbmQgU2tpcnQgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjM5I1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBPdGhlciBPdXRlcndlYXIgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjkjT3RoZXIgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTIKLW5haWNzIzMxNTI5MSNJbmZhbnRzJyBDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MjkKLW5haWNzIzMxNTI5MiNGdXIgYW5kIExlYXRoZXIgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTI5Ci1uYWljcyMzMTUyOTkjQWxsIE90aGVyIEN1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyOQotbmFpY3MjMzE1OSNBcHBhcmVsIEFjY2Vzc29yaWVzIGFuZCBPdGhlciBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1Ci1uYWljcyMzMTU5OSNBcHBhcmVsIEFjY2Vzc29yaWVzIGFuZCBPdGhlciBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1OQotbmFpY3MjMzE1OTkxI0hhdCwgQ2FwLCBhbmQgTWlsbGluZXJ5IE1hbnVmYWN0dXJpbmcjMzE1OTkKLW5haWNzIzMxNTk5MiNHbG92ZSBhbmQgTWl0dGVuIE1hbnVmYWN0dXJpbmcjMzE1OTkKLW5haWNzIzMxNTk5MyNNZW4ncyBhbmQgQm95cycgTmVja3dlYXIgTWFudWZhY3R1cmluZyMzMTU5OQotbmFpY3MjMzE1OTk5I090aGVyIEFwcGFyZWwgQWNjZXNzb3JpZXMgYW5kIE90aGVyIEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTU5OQotbmFpY3MjMzE2I0xlYXRoZXIgYW5kIEFsbGllZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzEKLW5haWNzIzMxNjEjTGVhdGhlciBhbmQgSGlkZSBUYW5uaW5nIGFuZCBGaW5pc2hpbmcjMzE2Ci1uYWljcyMzMTYxMSNMZWF0aGVyIGFuZCBIaWRlIFRhbm5pbmcgYW5kIEZpbmlzaGluZyMzMTYxCi1uYWljcyMzMTYyI0Zvb3R3ZWFyIE1hbnVmYWN0dXJpbmcjMzE2Ci1uYWljcyMzMTYyMSNGb290d2VhciBNYW51ZmFjdHVyaW5nIzMxNjIKLW5haWNzIzMxNjIxMSNSdWJiZXIgYW5kIFBsYXN0aWNzIEZvb3R3ZWFyIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjIxMiNIb3VzZSBTbGlwcGVyIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjIxMyNNZW4ncyBGb290d2VhciAoZXhjZXB0IEF0aGxldGljKSBNYW51ZmFjdHVyaW5nIzMxNjIxCi1uYWljcyMzMTYyMTQjV29tZW4ncyBGb290d2VhciAoZXhjZXB0IEF0aGxldGljKSBNYW51ZmFjdHVyaW5nIzMxNjIxCi1uYWljcyMzMTYyMTkjT3RoZXIgRm9vdHdlYXIgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2OSNPdGhlciBMZWF0aGVyIGFuZCBBbGxpZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxNgotbmFpY3MjMzE2OTkjT3RoZXIgTGVhdGhlciBhbmQgQWxsaWVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTY5Ci1uYWljcyMzMTY5OTEjTHVnZ2FnZSBNYW51ZmFjdHVyaW5nIzMxNjk5Ci1uYWljcyMzMTY5OTIjV29tZW4ncyBIYW5kYmFnIGFuZCBQdXJzZSBNYW51ZmFjdHVyaW5nIzMxNjk5Ci1uYWljcyMzMTY5OTMjUGVyc29uYWwgTGVhdGhlciBHb29kIChleGNlcHQgV29tZW4ncyBIYW5kYmFnIGFuZCBQdXJzZSkgTWFudWZhY3R1cmluZyMzMTY5OQotbmFpY3MjMzE2OTk5I0FsbCBPdGhlciBMZWF0aGVyIEdvb2QgTWFudWZhY3R1cmluZyMzMTY5OQotbmFpY3MjMzIjTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzIxI1dvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjExI1Nhd21pbGxzIGFuZCBXb29kIFByZXNlcnZhdGlvbiMzMjEKLW5haWNzIzMyMTExI1Nhd21pbGxzIGFuZCBXb29kIFByZXNlcnZhdGlvbiMzMjExCi1uYWljcyMzMjExMTMjU2F3bWlsbHMjMzIxMTEKLW5haWNzIzMyMTExNCNXb29kIFByZXNlcnZhdGlvbiMzMjExMQotbmFpY3MjMzIxMiNWZW5lZXIsIFBseXdvb2QsIGFuZCBFbmdpbmVlcmVkIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMQotbmFpY3MjMzIxMjEjVmVuZWVyLCBQbHl3b29kLCBhbmQgRW5naW5lZXJlZCBXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjEyCi1uYWljcyMzMjEyMTEjSGFyZHdvb2QgVmVuZWVyIGFuZCBQbHl3b29kIE1hbnVmYWN0dXJpbmcjMzIxMjEKLW5haWNzIzMyMTIxMiNTb2Z0d29vZCBWZW5lZXIgYW5kIFBseXdvb2QgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxMjEzI0VuZ2luZWVyZWQgV29vZCBNZW1iZXIgKGV4Y2VwdCBUcnVzcykgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxMjE0I1RydXNzIE1hbnVmYWN0dXJpbmcjMzIxMjEKLW5haWNzIzMyMTIxOSNSZWNvbnN0aXR1dGVkIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjE5I090aGVyIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMQotbmFpY3MjMzIxOTEjTWlsbHdvcmsjMzIxOQotbmFpY3MjMzIxOTExI1dvb2QgV2luZG93IGFuZCBEb29yIE1hbnVmYWN0dXJpbmcjMzIxOTEKLW5haWNzIzMyMTkxMiNDdXQgU3RvY2ssIFJlc2F3aW5nIEx1bWJlciwgYW5kIFBsYW5pbmcjMzIxOTEKLW5haWNzIzMyMTkxOCNPdGhlciBNaWxsd29yayAoaW5jbHVkaW5nIEZsb29yaW5nKSMzMjE5MQotbmFpY3MjMzIxOTIjV29vZCBDb250YWluZXIgYW5kIFBhbGxldCBNYW51ZmFjdHVyaW5nIzMyMTkKLW5haWNzIzMyMTk5I0FsbCBPdGhlciBXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjE5Ci1uYWljcyMzMjE5OTEjTWFudWZhY3R1cmVkIEhvbWUgKE1vYmlsZSBIb21lKSBNYW51ZmFjdHVyaW5nIzMyMTk5Ci1uYWljcyMzMjE5OTIjUHJlZmFicmljYXRlZCBXb29kIEJ1aWxkaW5nIE1hbnVmYWN0dXJpbmcjMzIxOTkKLW5haWNzIzMyMTk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjE5OQotbmFpY3MjMzIyI1BhcGVyIE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyMjEjUHVscCwgUGFwZXIsIGFuZCBQYXBlcmJvYXJkIE1pbGxzIzMyMgotbmFpY3MjMzIyMTEjUHVscCBNaWxscyMzMjIxCi1uYWljcyMzMjIxMiNQYXBlciBNaWxscyMzMjIxCi1uYWljcyMzMjIxMjEjUGFwZXIgKGV4Y2VwdCBOZXdzcHJpbnQpIE1pbGxzIzMyMjEyCi1uYWljcyMzMjIxMjIjTmV3c3ByaW50IE1pbGxzIzMyMjEyCi1uYWljcyMzMjIxMyNQYXBlcmJvYXJkIE1pbGxzIzMyMjEKLW5haWNzIzMyMjIjQ29udmVydGVkIFBhcGVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIKLW5haWNzIzMyMjIxI1BhcGVyYm9hcmQgQ29udGFpbmVyIE1hbnVmYWN0dXJpbmcjMzIyMgotbmFpY3MjMzIyMjExI0NvcnJ1Z2F0ZWQgYW5kIFNvbGlkIEZpYmVyIEJveCBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMTIjRm9sZGluZyBQYXBlcmJvYXJkIEJveCBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMTMjU2V0dXAgUGFwZXJib2FyZCBCb3ggTWFudWZhY3R1cmluZyMzMjIyMQotbmFpY3MjMzIyMjE0I0ZpYmVyIENhbiwgVHViZSwgRHJ1bSwgYW5kIFNpbWlsYXIgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMjIyMQotbmFpY3MjMzIyMjE1I05vbmZvbGRpbmcgU2FuaXRhcnkgRm9vZCBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMjIyMQotbmFpY3MjMzIyMjIjUGFwZXIgQmFnIGFuZCBDb2F0ZWQgYW5kIFRyZWF0ZWQgUGFwZXIgTWFudWZhY3R1cmluZyMzMjIyCi1uYWljcyMzMjIyMjEjQ29hdGVkIGFuZCBMYW1pbmF0ZWQgUGFja2FnaW5nIFBhcGVyIGFuZCBQbGFzdGljcyBGaWxtIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIyMiNDb2F0ZWQgYW5kIExhbWluYXRlZCBQYXBlciBNYW51ZmFjdHVyaW5nIzMyMjIyCi1uYWljcyMzMjIyMjMjUGxhc3RpY3MsIEZvaWwsIGFuZCBDb2F0ZWQgUGFwZXIgQmFnIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIyNCNVbmNvYXRlZCBQYXBlciBhbmQgTXVsdGl3YWxsIEJhZyBNYW51ZmFjdHVyaW5nIzMyMjIyCi1uYWljcyMzMjIyMjUjTGFtaW5hdGVkIEFsdW1pbnVtIEZvaWwgTWFudWZhY3R1cmluZyBmb3IgRmxleGlibGUgUGFja2FnaW5nIFVzZXMjMzIyMjIKLW5haWNzIzMyMjIyNiNTdXJmYWNlLUNvYXRlZCBQYXBlcmJvYXJkIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIzI1N0YXRpb25lcnkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMjIKLW5haWNzIzMyMjIzMSNEaWUtQ3V0IFBhcGVyIGFuZCBQYXBlcmJvYXJkIE9mZmljZSBTdXBwbGllcyBNYW51ZmFjdHVyaW5nIzMyMjIzCi1uYWljcyMzMjIyMzIjRW52ZWxvcGUgTWFudWZhY3R1cmluZyMzMjIyMwotbmFpY3MjMzIyMjMzI1N0YXRpb25lcnksIFRhYmxldCwgYW5kIFJlbGF0ZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMjIzCi1uYWljcyMzMjIyOSNPdGhlciBDb252ZXJ0ZWQgUGFwZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMjIKLW5haWNzIzMyMjI5MSNTYW5pdGFyeSBQYXBlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMjkKLW5haWNzIzMyMjI5OSNBbGwgT3RoZXIgQ29udmVydGVkIFBhcGVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIyOQotbmFpY3MjMzIzI1ByaW50aW5nIGFuZCBSZWxhdGVkIFN1cHBvcnQgQWN0aXZpdGllcyMzMgotbmFpY3MjMzIzMSNQcmludGluZyBhbmQgUmVsYXRlZCBTdXBwb3J0IEFjdGl2aXRpZXMjMzIzCi1uYWljcyMzMjMxMSNQcmludGluZyMzMjMxCi1uYWljcyMzMjMxMTAjQ29tbWVyY2lhbCBMaXRob2dyYXBoaWMgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExMSNDb21tZXJjaWFsIEdyYXZ1cmUgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExMiNDb21tZXJjaWFsIEZsZXhvZ3JhcGhpYyBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTEzI0NvbW1lcmNpYWwgU2NyZWVuIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTQjUXVpY2sgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExNSNEaWdpdGFsIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTYjTWFuaWZvbGQgQnVzaW5lc3MgRm9ybXMgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExNyNCb29rcyBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE4I0JsYW5rYm9vaywgTG9vc2VsZWFmIEJpbmRlcnMsIGFuZCBEZXZpY2VzIE1hbnVmYWN0dXJpbmcjMzIzMTEKLW5haWNzIzMyMzExOSNPdGhlciBDb21tZXJjaWFsIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMiNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFByaW50aW5nIzMyMzEKLW5haWNzIzMyMzEyMSNUcmFkZWJpbmRpbmcgYW5kIFJlbGF0ZWQgV29yayMzMjMxMgotbmFpY3MjMzIzMTIyI1ByZXByZXNzIFNlcnZpY2VzIzMyMzEyCi1uYWljcyMzMjQjUGV0cm9sZXVtIGFuZCBDb2FsIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyNDEjUGV0cm9sZXVtIGFuZCBDb2FsIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzI0Ci1uYWljcyMzMjQxMSNQZXRyb2xldW0gUmVmaW5lcmllcyMzMjQxCi1uYWljcyMzMjQxMiNBc3BoYWx0IFBhdmluZywgUm9vZmluZywgYW5kIFNhdHVyYXRlZCBNYXRlcmlhbHMgTWFudWZhY3R1cmluZyMzMjQxCi1uYWljcyMzMjQxMjEjQXNwaGFsdCBQYXZpbmcgTWl4dHVyZSBhbmQgQmxvY2sgTWFudWZhY3R1cmluZyMzMjQxMgotbmFpY3MjMzI0MTIyI0FzcGhhbHQgU2hpbmdsZSBhbmQgQ29hdGluZyBNYXRlcmlhbHMgTWFudWZhY3R1cmluZyMzMjQxMgotbmFpY3MjMzI0MTkjT3RoZXIgUGV0cm9sZXVtIGFuZCBDb2FsIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzI0MQotbmFpY3MjMzI0MTkxI1BldHJvbGV1bSBMdWJyaWNhdGluZyBPaWwgYW5kIEdyZWFzZSBNYW51ZmFjdHVyaW5nIzMyNDE5Ci1uYWljcyMzMjQxOTkjQWxsIE90aGVyIFBldHJvbGV1bSBhbmQgQ29hbCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyNDE5Ci1uYWljcyMzMjUjQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzI1MSNCYXNpYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1MTEjUGV0cm9jaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTEKLW5haWNzIzMyNTEyI0luZHVzdHJpYWwgR2FzIE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTMjU3ludGhldGljIER5ZSBhbmQgUGlnbWVudCBNYW51ZmFjdHVyaW5nIzMyNTEKLW5haWNzIzMyNTEzMSNJbm9yZ2FuaWMgRHllIGFuZCBQaWdtZW50IE1hbnVmYWN0dXJpbmcjMzI1MTMKLW5haWNzIzMyNTEzMiNTeW50aGV0aWMgT3JnYW5pYyBEeWUgYW5kIFBpZ21lbnQgTWFudWZhY3R1cmluZyMzMjUxMwotbmFpY3MjMzI1MTgjT3RoZXIgQmFzaWMgSW5vcmdhbmljIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTgxI0Fsa2FsaWVzIGFuZCBDaGxvcmluZSBNYW51ZmFjdHVyaW5nIzMyNTE4Ci1uYWljcyMzMjUxODIjQ2FyYm9uIEJsYWNrIE1hbnVmYWN0dXJpbmcjMzI1MTgKLW5haWNzIzMyNTE4OCNBbGwgT3RoZXIgQmFzaWMgSW5vcmdhbmljIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MTgKLW5haWNzIzMyNTE5I090aGVyIEJhc2ljIE9yZ2FuaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxOTEjR3VtIGFuZCBXb29kIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MTkKLW5haWNzIzMyNTE5MiNDeWNsaWMgQ3J1ZGUgYW5kIEludGVybWVkaWF0ZSBNYW51ZmFjdHVyaW5nIzMyNTE5Ci1uYWljcyMzMjUxOTMjRXRoeWwgQWxjb2hvbCBNYW51ZmFjdHVyaW5nIzMyNTE5Ci1uYWljcyMzMjUxOTkjQWxsIE90aGVyIEJhc2ljIE9yZ2FuaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxOQotbmFpY3MjMzI1MiNSZXNpbiwgU3ludGhldGljIFJ1YmJlciwgYW5kIEFydGlmaWNpYWwgYW5kIFN5bnRoZXRpYyBGaWJlcnMgYW5kIEZpbGFtZW50cyBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1MjEjUmVzaW4gYW5kIFN5bnRoZXRpYyBSdWJiZXIgTWFudWZhY3R1cmluZyMzMjUyCi1uYWljcyMzMjUyMTEjUGxhc3RpY3MgTWF0ZXJpYWwgYW5kIFJlc2luIE1hbnVmYWN0dXJpbmcjMzI1MjEKLW5haWNzIzMyNTIxMiNTeW50aGV0aWMgUnViYmVyIE1hbnVmYWN0dXJpbmcjMzI1MjEKLW5haWNzIzMyNTIyI0FydGlmaWNpYWwgYW5kIFN5bnRoZXRpYyBGaWJlcnMgYW5kIEZpbGFtZW50cyBNYW51ZmFjdHVyaW5nIzMyNTIKLW5haWNzIzMyNTIyMSNDZWxsdWxvc2ljIE9yZ2FuaWMgRmliZXIgTWFudWZhY3R1cmluZyMzMjUyMgotbmFpY3MjMzI1MjIyI05vbmNlbGx1bG9zaWMgT3JnYW5pYyBGaWJlciBNYW51ZmFjdHVyaW5nIzMyNTIyCi1uYWljcyMzMjUzI1Blc3RpY2lkZSwgRmVydGlsaXplciwgYW5kIE90aGVyIEFncmljdWx0dXJhbCBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1MzEjRmVydGlsaXplciBNYW51ZmFjdHVyaW5nIzMyNTMKLW5haWNzIzMyNTMxMSNOaXRyb2dlbm91cyBGZXJ0aWxpemVyIE1hbnVmYWN0dXJpbmcjMzI1MzEKLW5haWNzIzMyNTMxMiNQaG9zcGhhdGljIEZlcnRpbGl6ZXIgTWFudWZhY3R1cmluZyMzMjUzMQotbmFpY3MjMzI1MzE0I0ZlcnRpbGl6ZXIgKE1peGluZyBPbmx5KSBNYW51ZmFjdHVyaW5nIzMyNTMxCi1uYWljcyMzMjUzMiNQZXN0aWNpZGUgYW5kIE90aGVyIEFncmljdWx0dXJhbCBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTMKLW5haWNzIzMyNTQjUGhhcm1hY2V1dGljYWwgYW5kIE1lZGljaW5lIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjU0MSNQaGFybWFjZXV0aWNhbCBhbmQgTWVkaWNpbmUgTWFudWZhY3R1cmluZyMzMjU0Ci1uYWljcyMzMjU0MTEjTWVkaWNpbmFsIGFuZCBCb3RhbmljYWwgTWFudWZhY3R1cmluZyMzMjU0MQotbmFpY3MjMzI1NDEyI1BoYXJtYWNldXRpY2FsIFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1NDEKLW5haWNzIzMyNTQxMyNJbi1WaXRybyBEaWFnbm9zdGljIFN1YnN0YW5jZSBNYW51ZmFjdHVyaW5nIzMyNTQxCi1uYWljcyMzMjU0MTQjQmlvbG9naWNhbCBQcm9kdWN0IChleGNlcHQgRGlhZ25vc3RpYykgTWFudWZhY3R1cmluZyMzMjU0MQotbmFpY3MjMzI1NSNQYWludCwgQ29hdGluZywgYW5kIEFkaGVzaXZlIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjU1MSNQYWludCBhbmQgQ29hdGluZyBNYW51ZmFjdHVyaW5nIzMyNTUKLW5haWNzIzMyNTUyI0FkaGVzaXZlIE1hbnVmYWN0dXJpbmcjMzI1NQotbmFpY3MjMzI1NiNTb2FwLCBDbGVhbmluZyBDb21wb3VuZCwgYW5kIFRvaWxldCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1NjEjU29hcCBhbmQgQ2xlYW5pbmcgQ29tcG91bmQgTWFudWZhY3R1cmluZyMzMjU2Ci1uYWljcyMzMjU2MTEjU29hcCBhbmQgT3RoZXIgRGV0ZXJnZW50IE1hbnVmYWN0dXJpbmcjMzI1NjEKLW5haWNzIzMyNTYxMiNQb2xpc2ggYW5kIE90aGVyIFNhbml0YXRpb24gR29vZCBNYW51ZmFjdHVyaW5nIzMyNTYxCi1uYWljcyMzMjU2MTMjU3VyZmFjZSBBY3RpdmUgQWdlbnQgTWFudWZhY3R1cmluZyMzMjU2MQotbmFpY3MjMzI1NjIjVG9pbGV0IFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1NgotbmFpY3MjMzI1OSNPdGhlciBDaGVtaWNhbCBQcm9kdWN0IGFuZCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1OTEjUHJpbnRpbmcgSW5rIE1hbnVmYWN0dXJpbmcjMzI1OQotbmFpY3MjMzI1OTIjRXhwbG9zaXZlcyBNYW51ZmFjdHVyaW5nIzMyNTkKLW5haWNzIzMyNTk5I0FsbCBPdGhlciBDaGVtaWNhbCBQcm9kdWN0IGFuZCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNTkKLW5haWNzIzMyNTk5MSNDdXN0b20gQ29tcG91bmRpbmcgb2YgUHVyY2hhc2VkIFJlc2lucyMzMjU5OQotbmFpY3MjMzI1OTkyI1Bob3RvZ3JhcGhpYyBGaWxtLCBQYXBlciwgUGxhdGUsIGFuZCBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTk5Ci1uYWljcyMzMjU5OTgjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgQ2hlbWljYWwgUHJvZHVjdCBhbmQgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjU5OQotbmFpY3MjMzI2I1BsYXN0aWNzIGFuZCBSdWJiZXIgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzI2MSNQbGFzdGljcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2Ci1uYWljcyMzMjYxMSNVbnN1cHBvcnRlZCBQbGFzdGljcyBGaWxtLCBTaGVldCwgYW5kIEJhZyBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjExMSNVbnN1cHBvcnRlZCBQbGFzdGljcyBCYWcgTWFudWZhY3R1cmluZyMzMjYxMQotbmFpY3MjMzI2MTEyI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIFBhY2thZ2luZyBGaWxtIGFuZCBTaGVldCBNYW51ZmFjdHVyaW5nIzMyNjExCi1uYWljcyMzMjYxMTMjVW5zdXBwb3J0ZWQgUGxhc3RpY3MgRmlsbSBhbmQgU2hlZXQgKGV4Y2VwdCBQYWNrYWdpbmcpIE1hbnVmYWN0dXJpbmcjMzI2MTEKLW5haWNzIzMyNjEyI1BsYXN0aWNzIFBpcGUsIFBpcGUgRml0dGluZywgYW5kIFVuc3VwcG9ydGVkIFByb2ZpbGUgU2hhcGUgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxMjEjVW5zdXBwb3J0ZWQgUGxhc3RpY3MgUHJvZmlsZSBTaGFwZSBNYW51ZmFjdHVyaW5nIzMyNjEyCi1uYWljcyMzMjYxMjIjUGxhc3RpY3MgUGlwZSBhbmQgUGlwZSBGaXR0aW5nIE1hbnVmYWN0dXJpbmcjMzI2MTIKLW5haWNzIzMyNjEzI0xhbWluYXRlZCBQbGFzdGljcyBQbGF0ZSwgU2hlZXQsIGFuZCBTaGFwZSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE0I1BvbHlzdHlyZW5lIEZvYW0gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE1I1VyZXRoYW5lIGFuZCBPdGhlciBGb2FtIFByb2R1Y3QgKGV4Y2VwdCBQb2x5c3R5cmVuZSkgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxNiNQbGFzdGljcyBCb3R0bGUgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxOSNPdGhlciBQbGFzdGljcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTkxI1BsYXN0aWNzIFBsdW1iaW5nIEZpeHR1cmUgTWFudWZhY3R1cmluZyMzMjYxOQotbmFpY3MjMzI2MTkyI1Jlc2lsaWVudCBGbG9vciBDb3ZlcmluZyBNYW51ZmFjdHVyaW5nIzMyNjE5Ci1uYWljcyMzMjYxOTkjQWxsIE90aGVyIFBsYXN0aWNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYxOQotbmFpY3MjMzI2MiNSdWJiZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNgotbmFpY3MjMzI2MjEjVGlyZSBNYW51ZmFjdHVyaW5nIzMyNjIKLW5haWNzIzMyNjIxMSNUaXJlIE1hbnVmYWN0dXJpbmcgKGV4Y2VwdCBSZXRyZWFkaW5nKSMzMjYyMQotbmFpY3MjMzI2MjEyI1RpcmUgUmV0cmVhZGluZyMzMjYyMQotbmFpY3MjMzI2MjIjUnViYmVyIGFuZCBQbGFzdGljcyBIb3NlcyBhbmQgQmVsdGluZyBNYW51ZmFjdHVyaW5nIzMyNjIKLW5haWNzIzMyNjI5I090aGVyIFJ1YmJlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2MgotbmFpY3MjMzI2MjkxI1J1YmJlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcgZm9yIE1lY2hhbmljYWwgVXNlIzMyNjI5Ci1uYWljcyMzMjYyOTkjQWxsIE90aGVyIFJ1YmJlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2MjkKLW5haWNzIzMyNyNOb25tZXRhbGxpYyBNaW5lcmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzI3MSNDbGF5IFByb2R1Y3QgYW5kIFJlZnJhY3RvcnkgTWFudWZhY3R1cmluZyMzMjcKLW5haWNzIzMyNzExI1BvdHRlcnksIENlcmFtaWNzLCBhbmQgUGx1bWJpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMyNzEKLW5haWNzIzMyNzExMSNWaXRyZW91cyBDaGluYSBQbHVtYmluZyBGaXh0dXJlIGFuZCBDaGluYSBhbmQgRWFydGhlbndhcmUgQmF0aHJvb20gQWNjZXNzb3JpZXMgTWFudWZhY3R1cmluZyMzMjcxMQotbmFpY3MjMzI3MTEyI1ZpdHJlb3VzIENoaW5hLCBGaW5lIEVhcnRoZW53YXJlLCBhbmQgT3RoZXIgUG90dGVyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3MTEKLW5haWNzIzMyNzExMyNQb3JjZWxhaW4gRWxlY3RyaWNhbCBTdXBwbHkgTWFudWZhY3R1cmluZyMzMjcxMQotbmFpY3MjMzI3MTIjQ2xheSBCdWlsZGluZyBNYXRlcmlhbCBhbmQgUmVmcmFjdG9yaWVzIE1hbnVmYWN0dXJpbmcjMzI3MQotbmFpY3MjMzI3MTIxI0JyaWNrIGFuZCBTdHJ1Y3R1cmFsIENsYXkgVGlsZSBNYW51ZmFjdHVyaW5nIzMyNzEyCi1uYWljcyMzMjcxMjIjQ2VyYW1pYyBXYWxsIGFuZCBGbG9vciBUaWxlIE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzEyMyNPdGhlciBTdHJ1Y3R1cmFsIENsYXkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzEyCi1uYWljcyMzMjcxMjQjQ2xheSBSZWZyYWN0b3J5IE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzEyNSNOb25jbGF5IFJlZnJhY3RvcnkgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MiNHbGFzcyBhbmQgR2xhc3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3MjEjR2xhc3MgYW5kIEdsYXNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcyCi1uYWljcyMzMjcyMTEjRmxhdCBHbGFzcyBNYW51ZmFjdHVyaW5nIzMyNzIxCi1uYWljcyMzMjcyMTIjT3RoZXIgUHJlc3NlZCBhbmQgQmxvd24gR2xhc3MgYW5kIEdsYXNzd2FyZSBNYW51ZmFjdHVyaW5nIzMyNzIxCi1uYWljcyMzMjcyMTMjR2xhc3MgQ29udGFpbmVyIE1hbnVmYWN0dXJpbmcjMzI3MjEKLW5haWNzIzMyNzIxNSNHbGFzcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcgTWFkZSBvZiBQdXJjaGFzZWQgR2xhc3MjMzI3MjEKLW5haWNzIzMyNzMjQ2VtZW50IGFuZCBDb25jcmV0ZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjczMSNDZW1lbnQgTWFudWZhY3R1cmluZyMzMjczCi1uYWljcyMzMjczMiNSZWFkeS1NaXggQ29uY3JldGUgTWFudWZhY3R1cmluZyMzMjczCi1uYWljcyMzMjczMyNDb25jcmV0ZSBQaXBlLCBCcmljaywgYW5kIEJsb2NrIE1hbnVmYWN0dXJpbmcjMzI3MwotbmFpY3MjMzI3MzMxI0NvbmNyZXRlIEJsb2NrIGFuZCBCcmljayBNYW51ZmFjdHVyaW5nIzMyNzMzCi1uYWljcyMzMjczMzIjQ29uY3JldGUgUGlwZSBNYW51ZmFjdHVyaW5nIzMyNzMzCi1uYWljcyMzMjczOSNPdGhlciBDb25jcmV0ZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3MwotbmFpY3MjMzI3NCNMaW1lIGFuZCBHeXBzdW0gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3NDEjTGltZSBNYW51ZmFjdHVyaW5nIzMyNzQKLW5haWNzIzMyNzQyI0d5cHN1bSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3NAotbmFpY3MjMzI3OSNPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcKLW5haWNzIzMyNzkxI0FicmFzaXZlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc5Ci1uYWljcyMzMjc5OSNBbGwgT3RoZXIgTm9ubWV0YWxsaWMgTWluZXJhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3OQotbmFpY3MjMzI3OTkxI0N1dCBTdG9uZSBhbmQgU3RvbmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzk5Ci1uYWljcyMzMjc5OTIjR3JvdW5kIG9yIFRyZWF0ZWQgTWluZXJhbCBhbmQgRWFydGggTWFudWZhY3R1cmluZyMzMjc5OQotbmFpY3MjMzI3OTkzI01pbmVyYWwgV29vbCBNYW51ZmFjdHVyaW5nIzMyNzk5Ci1uYWljcyMzMjc5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgTm9ubWV0YWxsaWMgTWluZXJhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3OTkKLW5haWNzIzMzI01hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzMSNQcmltYXJ5IE1ldGFsIE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzMTEjSXJvbiBhbmQgU3RlZWwgTWlsbHMgYW5kIEZlcnJvYWxsb3kgTWFudWZhY3R1cmluZyMzMzEKLW5haWNzIzMzMTExI0lyb24gYW5kIFN0ZWVsIE1pbGxzIGFuZCBGZXJyb2FsbG95IE1hbnVmYWN0dXJpbmcjMzMxMQotbmFpY3MjMzMxMTExI0lyb24gYW5kIFN0ZWVsIE1pbGxzIzMzMTExCi1uYWljcyMzMzExMTIjRWxlY3Ryb21ldGFsbHVyZ2ljYWwgRmVycm9hbGxveSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMxMTEKLW5haWNzIzMzMTIjU3RlZWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIGZyb20gUHVyY2hhc2VkIFN0ZWVsIzMzMQotbmFpY3MjMzMxMjEjSXJvbiBhbmQgU3RlZWwgUGlwZSBhbmQgVHViZSBNYW51ZmFjdHVyaW5nIGZyb20gUHVyY2hhc2VkIFN0ZWVsIzMzMTIKLW5haWNzIzMzMTIyI1JvbGxpbmcgYW5kIERyYXdpbmcgb2YgUHVyY2hhc2VkIFN0ZWVsIzMzMTIKLW5haWNzIzMzMTIyMSNSb2xsZWQgU3RlZWwgU2hhcGUgTWFudWZhY3R1cmluZyMzMzEyMgotbmFpY3MjMzMxMjIyI1N0ZWVsIFdpcmUgRHJhd2luZyMzMzEyMgotbmFpY3MjMzMxMyNBbHVtaW5hIGFuZCBBbHVtaW51bSBQcm9kdWN0aW9uIGFuZCBQcm9jZXNzaW5nIzMzMQotbmFpY3MjMzMxMzEjQWx1bWluYSBhbmQgQWx1bWludW0gUHJvZHVjdGlvbiBhbmQgUHJvY2Vzc2luZyMzMzEzCi1uYWljcyMzMzEzMTEjQWx1bWluYSBSZWZpbmluZyMzMzEzMQotbmFpY3MjMzMxMzEyI1ByaW1hcnkgQWx1bWludW0gUHJvZHVjdGlvbiMzMzEzMQotbmFpY3MjMzMxMzE0I1NlY29uZGFyeSBTbWVsdGluZyBhbmQgQWxsb3lpbmcgb2YgQWx1bWludW0jMzMxMzEKLW5haWNzIzMzMTMxNSNBbHVtaW51bSBTaGVldCwgUGxhdGUsIGFuZCBGb2lsIE1hbnVmYWN0dXJpbmcjMzMxMzEKLW5haWNzIzMzMTMxNiNBbHVtaW51bSBFeHRydWRlZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMxMzEKLW5haWNzIzMzMTMxOSNPdGhlciBBbHVtaW51bSBSb2xsaW5nIGFuZCBEcmF3aW5nIzMzMTMxCi1uYWljcyMzMzE0I05vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBBbHVtaW51bSkgUHJvZHVjdGlvbiBhbmQgUHJvY2Vzc2luZyMzMzEKLW5haWNzIzMzMTQxI05vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBBbHVtaW51bSkgU21lbHRpbmcgYW5kIFJlZmluaW5nIzMzMTQKLW5haWNzIzMzMTQxMSNQcmltYXJ5IFNtZWx0aW5nIGFuZCBSZWZpbmluZyBvZiBDb3BwZXIjMzMxNDEKLW5haWNzIzMzMTQxOSNQcmltYXJ5IFNtZWx0aW5nIGFuZCBSZWZpbmluZyBvZiBOb25mZXJyb3VzIE1ldGFsIChleGNlcHQgQ29wcGVyIGFuZCBBbHVtaW51bSkjMzMxNDEKLW5haWNzIzMzMTQyI0NvcHBlciBSb2xsaW5nLCBEcmF3aW5nLCBFeHRydWRpbmcsIGFuZCBBbGxveWluZyMzMzE0Ci1uYWljcyMzMzE0MjEjQ29wcGVyIFJvbGxpbmcsIERyYXdpbmcsIGFuZCBFeHRydWRpbmcjMzMxNDIKLW5haWNzIzMzMTQyMiNDb3BwZXIgV2lyZSAoZXhjZXB0IE1lY2hhbmljYWwpIERyYXdpbmcjMzMxNDIKLW5haWNzIzMzMTQyMyNTZWNvbmRhcnkgU21lbHRpbmcsIFJlZmluaW5nLCBhbmQgQWxsb3lpbmcgb2YgQ29wcGVyIzMzMTQyCi1uYWljcyMzMzE0OSNOb25mZXJyb3VzIE1ldGFsIChleGNlcHQgQ29wcGVyIGFuZCBBbHVtaW51bSkgUm9sbGluZywgRHJhd2luZywgRXh0cnVkaW5nLCBhbmQgQWxsb3lpbmcjMzMxNAotbmFpY3MjMzMxNDkxI05vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBDb3BwZXIgYW5kIEFsdW1pbnVtKSBSb2xsaW5nLCBEcmF3aW5nLCBhbmQgRXh0cnVkaW5nIzMzMTQ5Ci1uYWljcyMzMzE0OTIjU2Vjb25kYXJ5IFNtZWx0aW5nLCBSZWZpbmluZywgYW5kIEFsbG95aW5nIG9mIE5vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBDb3BwZXIgYW5kIEFsdW1pbnVtKSMzMzE0OQotbmFpY3MjMzMxNSNGb3VuZHJpZXMjMzMxCi1uYWljcyMzMzE1MSNGZXJyb3VzIE1ldGFsIEZvdW5kcmllcyMzMzE1Ci1uYWljcyMzMzE1MTEjSXJvbiBGb3VuZHJpZXMjMzMxNTEKLW5haWNzIzMzMTUxMiNTdGVlbCBJbnZlc3RtZW50IEZvdW5kcmllcyMzMzE1MQotbmFpY3MjMzMxNTEzI1N0ZWVsIEZvdW5kcmllcyAoZXhjZXB0IEludmVzdG1lbnQpIzMzMTUxCi1uYWljcyMzMzE1MiNOb25mZXJyb3VzIE1ldGFsIEZvdW5kcmllcyMzMzE1Ci1uYWljcyMzMzE1MjEjQWx1bWludW0gRGllLUNhc3RpbmcgRm91bmRyaWVzIzMzMTUyCi1uYWljcyMzMzE1MjIjTm9uZmVycm91cyAoZXhjZXB0IEFsdW1pbnVtKSBEaWUtQ2FzdGluZyBGb3VuZHJpZXMjMzMxNTIKLW5haWNzIzMzMTUyNCNBbHVtaW51bSBGb3VuZHJpZXMgKGV4Y2VwdCBEaWUtQ2FzdGluZykjMzMxNTIKLW5haWNzIzMzMTUyNSNDb3BwZXIgRm91bmRyaWVzIChleGNlcHQgRGllLUNhc3RpbmcpIzMzMTUyCi1uYWljcyMzMzE1MjgjT3RoZXIgTm9uZmVycm91cyBGb3VuZHJpZXMgKGV4Y2VwdCBEaWUtQ2FzdGluZykjMzMxNTIKLW5haWNzIzMzMiNGYWJyaWNhdGVkIE1ldGFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzMyMSNGb3JnaW5nIGFuZCBTdGFtcGluZyMzMzIKLW5haWNzIzMzMjExI0ZvcmdpbmcgYW5kIFN0YW1waW5nIzMzMjEKLW5haWNzIzMzMjExMSNJcm9uIGFuZCBTdGVlbCBGb3JnaW5nIzMzMjExCi1uYWljcyMzMzIxMTIjTm9uZmVycm91cyBGb3JnaW5nIzMzMjExCi1uYWljcyMzMzIxMTQjQ3VzdG9tIFJvbGwgRm9ybWluZyMzMzIxMQotbmFpY3MjMzMyMTE1I0Nyb3duIGFuZCBDbG9zdXJlIE1hbnVmYWN0dXJpbmcjMzMyMTEKLW5haWNzIzMzMjExNiNNZXRhbCBTdGFtcGluZyMzMzIxMQotbmFpY3MjMzMyMTE3I1Bvd2RlciBNZXRhbGx1cmd5IFBhcnQgTWFudWZhY3R1cmluZyMzMzIxMQotbmFpY3MjMzMyMiNDdXRsZXJ5IGFuZCBIYW5kdG9vbCBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyMjEjQ3V0bGVyeSBhbmQgSGFuZHRvb2wgTWFudWZhY3R1cmluZyMzMzIyCi1uYWljcyMzMzIyMTEjQ3V0bGVyeSBhbmQgRmxhdHdhcmUgKGV4Y2VwdCBQcmVjaW91cykgTWFudWZhY3R1cmluZyMzMzIyMQotbmFpY3MjMzMyMjEyI0hhbmQgYW5kIEVkZ2UgVG9vbCBNYW51ZmFjdHVyaW5nIzMzMjIxCi1uYWljcyMzMzIyMTMjU2F3IEJsYWRlIGFuZCBIYW5kc2F3IE1hbnVmYWN0dXJpbmcjMzMyMjEKLW5haWNzIzMzMjIxNCNLaXRjaGVuIFV0ZW5zaWwsIFBvdCwgYW5kIFBhbiBNYW51ZmFjdHVyaW5nIzMzMjIxCi1uYWljcyMzMzIzI0FyY2hpdGVjdHVyYWwgYW5kIFN0cnVjdHVyYWwgTWV0YWxzIE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzIzMSNQbGF0ZSBXb3JrIGFuZCBGYWJyaWNhdGVkIFN0cnVjdHVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjMKLW5haWNzIzMzMjMxMSNQcmVmYWJyaWNhdGVkIE1ldGFsIEJ1aWxkaW5nIGFuZCBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzIzMQotbmFpY3MjMzMyMzEyI0ZhYnJpY2F0ZWQgU3RydWN0dXJhbCBNZXRhbCBNYW51ZmFjdHVyaW5nIzMzMjMxCi1uYWljcyMzMzIzMTMjUGxhdGUgV29yayBNYW51ZmFjdHVyaW5nIzMzMjMxCi1uYWljcyMzMzIzMiNPcm5hbWVudGFsIGFuZCBBcmNoaXRlY3R1cmFsIE1ldGFsIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzMyMwotbmFpY3MjMzMyMzIxI01ldGFsIFdpbmRvdyBhbmQgRG9vciBNYW51ZmFjdHVyaW5nIzMzMjMyCi1uYWljcyMzMzIzMjIjU2hlZXQgTWV0YWwgV29yayBNYW51ZmFjdHVyaW5nIzMzMjMyCi1uYWljcyMzMzIzMjMjT3JuYW1lbnRhbCBhbmQgQXJjaGl0ZWN0dXJhbCBNZXRhbCBXb3JrIE1hbnVmYWN0dXJpbmcjMzMyMzIKLW5haWNzIzMzMjQjQm9pbGVyLCBUYW5rLCBhbmQgU2hpcHBpbmcgQ29udGFpbmVyIE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzI0MSNQb3dlciBCb2lsZXIgYW5kIEhlYXQgRXhjaGFuZ2VyIE1hbnVmYWN0dXJpbmcjMzMyNAotbmFpY3MjMzMyNDIjTWV0YWwgVGFuayAoSGVhdnkgR2F1Z2UpIE1hbnVmYWN0dXJpbmcjMzMyNAotbmFpY3MjMzMyNDMjTWV0YWwgQ2FuLCBCb3gsIGFuZCBPdGhlciBNZXRhbCBDb250YWluZXIgKExpZ2h0IEdhdWdlKSBNYW51ZmFjdHVyaW5nIzMzMjQKLW5haWNzIzMzMjQzMSNNZXRhbCBDYW4gTWFudWZhY3R1cmluZyMzMzI0MwotbmFpY3MjMzMyNDM5I090aGVyIE1ldGFsIENvbnRhaW5lciBNYW51ZmFjdHVyaW5nIzMzMjQzCi1uYWljcyMzMzI1I0hhcmR3YXJlIE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzI1MSNIYXJkd2FyZSBNYW51ZmFjdHVyaW5nIzMzMjUKLW5haWNzIzMzMjYjU3ByaW5nIGFuZCBXaXJlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjYxI1NwcmluZyBhbmQgV2lyZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyNgotbmFpY3MjMzMyNjExI1NwcmluZyAoSGVhdnkgR2F1Z2UpIE1hbnVmYWN0dXJpbmcjMzMyNjEKLW5haWNzIzMzMjYxMiNTcHJpbmcgKExpZ2h0IEdhdWdlKSBNYW51ZmFjdHVyaW5nIzMzMjYxCi1uYWljcyMzMzI2MTgjT3RoZXIgRmFicmljYXRlZCBXaXJlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI2MQotbmFpY3MjMzMyNyNNYWNoaW5lIFNob3BzOyBUdXJuZWQgUHJvZHVjdDsgYW5kIFNjcmV3LCBOdXQsIGFuZCBCb2x0IE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzI3MSNNYWNoaW5lIFNob3BzIzMzMjcKLW5haWNzIzMzMjcyI1R1cm5lZCBQcm9kdWN0IGFuZCBTY3JldywgTnV0LCBhbmQgQm9sdCBNYW51ZmFjdHVyaW5nIzMzMjcKLW5haWNzIzMzMjcyMSNQcmVjaXNpb24gVHVybmVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI3MgotbmFpY3MjMzMyNzIyI0JvbHQsIE51dCwgU2NyZXcsIFJpdmV0LCBhbmQgV2FzaGVyIE1hbnVmYWN0dXJpbmcjMzMyNzIKLW5haWNzIzMzMjgjQ29hdGluZywgRW5ncmF2aW5nLCBIZWF0IFRyZWF0aW5nLCBhbmQgQWxsaWVkIEFjdGl2aXRpZXMjMzMyCi1uYWljcyMzMzI4MSNDb2F0aW5nLCBFbmdyYXZpbmcsIEhlYXQgVHJlYXRpbmcsIGFuZCBBbGxpZWQgQWN0aXZpdGllcyMzMzI4Ci1uYWljcyMzMzI4MTEjTWV0YWwgSGVhdCBUcmVhdGluZyMzMzI4MQotbmFpY3MjMzMyODEyI01ldGFsIENvYXRpbmcsIEVuZ3JhdmluZyAoZXhjZXB0IEpld2VscnkgYW5kIFNpbHZlcndhcmUpLCBhbmQgQWxsaWVkIFNlcnZpY2VzIHRvIE1hbnVmYWN0dXJlcnMjMzMyODEKLW5haWNzIzMzMjgxMyNFbGVjdHJvcGxhdGluZywgUGxhdGluZywgUG9saXNoaW5nLCBBbm9kaXppbmcsIGFuZCBDb2xvcmluZyMzMzI4MQotbmFpY3MjMzMyOSNPdGhlciBGYWJyaWNhdGVkIE1ldGFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjkxI01ldGFsIFZhbHZlIE1hbnVmYWN0dXJpbmcjMzMyOQotbmFpY3MjMzMyOTExI0luZHVzdHJpYWwgVmFsdmUgTWFudWZhY3R1cmluZyMzMzI5MQotbmFpY3MjMzMyOTEyI0ZsdWlkIFBvd2VyIFZhbHZlIGFuZCBIb3NlIEZpdHRpbmcgTWFudWZhY3R1cmluZyMzMzI5MQotbmFpY3MjMzMyOTEzI1BsdW1iaW5nIEZpeHR1cmUgRml0dGluZyBhbmQgVHJpbSBNYW51ZmFjdHVyaW5nIzMzMjkxCi1uYWljcyMzMzI5MTkjT3RoZXIgTWV0YWwgVmFsdmUgYW5kIFBpcGUgRml0dGluZyBNYW51ZmFjdHVyaW5nIzMzMjkxCi1uYWljcyMzMzI5OSNBbGwgT3RoZXIgRmFicmljYXRlZCBNZXRhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyOQotbmFpY3MjMzMyOTkxI0JhbGwgYW5kIFJvbGxlciBCZWFyaW5nIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5MiNTbWFsbCBBcm1zIEFtbXVuaXRpb24gTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTkzI0FtbXVuaXRpb24gKGV4Y2VwdCBTbWFsbCBBcm1zKSBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTQjU21hbGwgQXJtcyBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTUjT3RoZXIgT3JkbmFuY2UgYW5kIEFjY2Vzc29yaWVzIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NiNGYWJyaWNhdGVkIFBpcGUgYW5kIFBpcGUgRml0dGluZyBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTcjSW5kdXN0cmlhbCBQYXR0ZXJuIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5OCNFbmFtZWxlZCBJcm9uIGFuZCBNZXRhbCBTYW5pdGFyeSBXYXJlIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBGYWJyaWNhdGVkIE1ldGFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMzI01hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzMxI0FncmljdWx0dXJlLCBDb25zdHJ1Y3Rpb24sIGFuZCBNaW5pbmcgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzMxMSNBZ3JpY3VsdHVyYWwgSW1wbGVtZW50IE1hbnVmYWN0dXJpbmcjMzMzMQotbmFpY3MjMzMzMTExI0Zhcm0gTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMxMQotbmFpY3MjMzMzMTEyI0xhd24gYW5kIEdhcmRlbiBUcmFjdG9yIGFuZCBIb21lIExhd24gYW5kIEdhcmRlbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMxMQotbmFpY3MjMzMzMTIjQ29uc3RydWN0aW9uIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzEKLW5haWNzIzMzMzEzI01pbmluZyBhbmQgT2lsIGFuZCBHYXMgRmllbGQgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMQotbmFpY3MjMzMzMTMxI01pbmluZyBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzEzCi1uYWljcyMzMzMxMzIjT2lsIGFuZCBHYXMgRmllbGQgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMxMwotbmFpY3MjMzMzMiNJbmR1c3RyaWFsIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzMjEjU2F3bWlsbCBhbmQgV29vZHdvcmtpbmcgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMgotbmFpY3MjMzMzMjIjUGxhc3RpY3MgYW5kIFJ1YmJlciBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyCi1uYWljcyMzMzMyOSNPdGhlciBJbmR1c3RyaWFsIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzIKLW5haWNzIzMzMzI5MSNQYXBlciBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMjkyI1RleHRpbGUgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5MyNQcmludGluZyBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTQjRm9vZCBQcm9kdWN0IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTUjU2VtaWNvbmR1Y3RvciBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMjk4I0FsbCBPdGhlciBJbmR1c3RyaWFsIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMzI0NvbW1lcmNpYWwgYW5kIFNlcnZpY2UgSW5kdXN0cnkgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzMzMSNDb21tZXJjaWFsIGFuZCBTZXJ2aWNlIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzMKLW5haWNzIzMzMzMxMSNBdXRvbWF0aWMgVmVuZGluZyBNYWNoaW5lIE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxMiNDb21tZXJjaWFsIExhdW5kcnksIERyeWNsZWFuaW5nLCBhbmQgUHJlc3NpbmcgTWFjaGluZSBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzMzMTMjT2ZmaWNlIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzMzMTQjT3B0aWNhbCBJbnN0cnVtZW50IGFuZCBMZW5zIE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxNSNQaG90b2dyYXBoaWMgYW5kIFBob3RvY29weWluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzE5I090aGVyIENvbW1lcmNpYWwgYW5kIFNlcnZpY2UgSW5kdXN0cnkgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzQjVmVudGlsYXRpb24sIEhlYXRpbmcsIEFpci1Db25kaXRpb25pbmcsIGFuZCBDb21tZXJjaWFsIFJlZnJpZ2VyYXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzM0MSNWZW50aWxhdGlvbiwgSGVhdGluZywgQWlyLUNvbmRpdGlvbmluZywgYW5kIENvbW1lcmNpYWwgUmVmcmlnZXJhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM0Ci1uYWljcyMzMzM0MTEjQWlyIFB1cmlmaWNhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM0MQotbmFpY3MjMzMzNDEyI0luZHVzdHJpYWwgYW5kIENvbW1lcmNpYWwgRmFuIGFuZCBCbG93ZXIgTWFudWZhY3R1cmluZyMzMzM0MQotbmFpY3MjMzMzNDE0I0hlYXRpbmcgRXF1aXBtZW50IChleGNlcHQgV2FybSBBaXIgRnVybmFjZXMpIE1hbnVmYWN0dXJpbmcjMzMzNDEKLW5haWNzIzMzMzQxNSNBaXItQ29uZGl0aW9uaW5nIGFuZCBXYXJtIEFpciBIZWF0aW5nIEVxdWlwbWVudCBhbmQgQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBSZWZyaWdlcmF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzQxCi1uYWljcyMzMzM1I01ldGFsd29ya2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzUxI01ldGFsd29ya2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM1Ci1uYWljcyMzMzM1MTEjSW5kdXN0cmlhbCBNb2xkIE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxMiNNYWNoaW5lIFRvb2wgKE1ldGFsIEN1dHRpbmcgVHlwZXMpIE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxMyNNYWNoaW5lIFRvb2wgKE1ldGFsIEZvcm1pbmcgVHlwZXMpIE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxNCNTcGVjaWFsIERpZSBhbmQgVG9vbCwgRGllIFNldCwgSmlnLCBhbmQgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTUjQ3V0dGluZyBUb29sIGFuZCBNYWNoaW5lIFRvb2wgQWNjZXNzb3J5IE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxNiNSb2xsaW5nIE1pbGwgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTE4I090aGVyIE1ldGFsd29ya2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNiNFbmdpbmUsIFR1cmJpbmUsIGFuZCBQb3dlciBUcmFuc21pc3Npb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzM2MSNFbmdpbmUsIFR1cmJpbmUsIGFuZCBQb3dlciBUcmFuc21pc3Npb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNgotbmFpY3MjMzMzNjExI1R1cmJpbmUgYW5kIFR1cmJpbmUgR2VuZXJhdG9yIFNldCBVbml0cyBNYW51ZmFjdHVyaW5nIzMzMzYxCi1uYWljcyMzMzM2MTIjU3BlZWQgQ2hhbmdlciwgSW5kdXN0cmlhbCBIaWdoLVNwZWVkIERyaXZlLCBhbmQgR2VhciBNYW51ZmFjdHVyaW5nIzMzMzYxCi1uYWljcyMzMzM2MTMjTWVjaGFuaWNhbCBQb3dlciBUcmFuc21pc3Npb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNjEKLW5haWNzIzMzMzYxOCNPdGhlciBFbmdpbmUgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNjEKLW5haWNzIzMzMzkjT3RoZXIgR2VuZXJhbCBQdXJwb3NlIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzOTEjUHVtcCBhbmQgQ29tcHJlc3NvciBNYW51ZmFjdHVyaW5nIzMzMzkKLW5haWNzIzMzMzkxMSNQdW1wIGFuZCBQdW1waW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzkxCi1uYWljcyMzMzM5MTIjQWlyIGFuZCBHYXMgQ29tcHJlc3NvciBNYW51ZmFjdHVyaW5nIzMzMzkxCi1uYWljcyMzMzM5MTMjTWVhc3VyaW5nIGFuZCBEaXNwZW5zaW5nIFB1bXAgTWFudWZhY3R1cmluZyMzMzM5MQotbmFpY3MjMzMzOTIjTWF0ZXJpYWwgSGFuZGxpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzOQotbmFpY3MjMzMzOTIxI0VsZXZhdG9yIGFuZCBNb3ZpbmcgU3RhaXJ3YXkgTWFudWZhY3R1cmluZyMzMzM5MgotbmFpY3MjMzMzOTIyI0NvbnZleW9yIGFuZCBDb252ZXlpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzOTIKLW5haWNzIzMzMzkyMyNPdmVyaGVhZCBUcmF2ZWxpbmcgQ3JhbmUsIEhvaXN0LCBhbmQgTW9ub3JhaWwgU3lzdGVtIE1hbnVmYWN0dXJpbmcjMzMzOTIKLW5haWNzIzMzMzkyNCNJbmR1c3RyaWFsIFRydWNrLCBUcmFjdG9yLCBUcmFpbGVyLCBhbmQgU3RhY2tlciBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM5MgotbmFpY3MjMzMzOTkjQWxsIE90aGVyIEdlbmVyYWwgUHVycG9zZSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM5Ci1uYWljcyMzMzM5OTEjUG93ZXItRHJpdmVuIEhhbmR0b29sIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5MiNXZWxkaW5nIGFuZCBTb2xkZXJpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5MyNQYWNrYWdpbmcgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5NCNJbmR1c3RyaWFsIFByb2Nlc3MgRnVybmFjZSBhbmQgT3ZlbiBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTUjRmx1aWQgUG93ZXIgQ3lsaW5kZXIgYW5kIEFjdHVhdG9yIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5NiNGbHVpZCBQb3dlciBQdW1wIGFuZCBNb3RvciBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTcjU2NhbGUgYW5kIEJhbGFuY2UgKGV4Y2VwdCBMYWJvcmF0b3J5KSBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgR2VuZXJhbCBQdXJwb3NlIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzQjQ29tcHV0ZXIgYW5kIEVsZWN0cm9uaWMgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzQxI0NvbXB1dGVyIGFuZCBQZXJpcGhlcmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0MTEjQ29tcHV0ZXIgYW5kIFBlcmlwaGVyYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MQotbmFpY3MjMzM0MTExI0VsZWN0cm9uaWMgQ29tcHV0ZXIgTWFudWZhY3R1cmluZyMzMzQxMQotbmFpY3MjMzM0MTEyI0NvbXB1dGVyIFN0b3JhZ2UgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM0MTEKLW5haWNzIzMzNDExMyNDb21wdXRlciBUZXJtaW5hbCBNYW51ZmFjdHVyaW5nIzMzNDExCi1uYWljcyMzMzQxMTkjT3RoZXIgQ29tcHV0ZXIgUGVyaXBoZXJhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQxMQotbmFpY3MjMzM0MiNDb21tdW5pY2F0aW9ucyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQKLW5haWNzIzMzNDIxI1RlbGVwaG9uZSBBcHBhcmF0dXMgTWFudWZhY3R1cmluZyMzMzQyCi1uYWljcyMzMzQyMiNSYWRpbyBhbmQgVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmcgYW5kIFdpcmVsZXNzIENvbW11bmljYXRpb25zIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNDIKLW5haWNzIzMzNDI5I090aGVyIENvbW11bmljYXRpb25zIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNDIKLW5haWNzIzMzNDMjQXVkaW8gYW5kIFZpZGVvIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0MzEjQXVkaW8gYW5kIFZpZGVvIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNDMKLW5haWNzIzMzNDQjU2VtaWNvbmR1Y3RvciBhbmQgT3RoZXIgRWxlY3Ryb25pYyBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzQKLW5haWNzIzMzNDQxI1NlbWljb25kdWN0b3IgYW5kIE90aGVyIEVsZWN0cm9uaWMgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM0NAotbmFpY3MjMzM0NDExI0VsZWN0cm9uIFR1YmUgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDEyI0JhcmUgUHJpbnRlZCBDaXJjdWl0IEJvYXJkIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxMyNTZW1pY29uZHVjdG9yIGFuZCBSZWxhdGVkIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTQjRWxlY3Ryb25pYyBDYXBhY2l0b3IgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDE1I0VsZWN0cm9uaWMgUmVzaXN0b3IgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDE2I0VsZWN0cm9uaWMgQ29pbCwgVHJhbnNmb3JtZXIsIGFuZCBPdGhlciBJbmR1Y3RvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTcjRWxlY3Ryb25pYyBDb25uZWN0b3IgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDE4I1ByaW50ZWQgQ2lyY3VpdCBBc3NlbWJseSAoRWxlY3Ryb25pYyBBc3NlbWJseSkgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDE5I090aGVyIEVsZWN0cm9uaWMgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDUjTmF2aWdhdGlvbmFsLCBNZWFzdXJpbmcsIEVsZWN0cm9tZWRpY2FsLCBhbmQgQ29udHJvbCBJbnN0cnVtZW50cyBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0NTEjTmF2aWdhdGlvbmFsLCBNZWFzdXJpbmcsIEVsZWN0cm9tZWRpY2FsLCBhbmQgQ29udHJvbCBJbnN0cnVtZW50cyBNYW51ZmFjdHVyaW5nIzMzNDUKLW5haWNzIzMzNDUxMCNFbGVjdHJvbWVkaWNhbCBhbmQgRWxlY3Ryb3RoZXJhcGV1dGljIEFwcGFyYXR1cyBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTEjU2VhcmNoLCBEZXRlY3Rpb24sIE5hdmlnYXRpb24sIEd1aWRhbmNlLCBBZXJvbmF1dGljYWwsIGFuZCBOYXV0aWNhbCBTeXN0ZW0gYW5kIEluc3RydW1lbnQgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTEyI0F1dG9tYXRpYyBFbnZpcm9ubWVudGFsIENvbnRyb2wgTWFudWZhY3R1cmluZyBmb3IgUmVzaWRlbnRpYWwsIENvbW1lcmNpYWwsIGFuZCBBcHBsaWFuY2UgVXNlIzMzNDUxCi1uYWljcyMzMzQ1MTMjSW5zdHJ1bWVudHMgYW5kIFJlbGF0ZWQgUHJvZHVjdHMgTWFudWZhY3R1cmluZyBmb3IgTWVhc3VyaW5nLCBEaXNwbGF5aW5nLCBhbmQgQ29udHJvbGxpbmcgSW5kdXN0cmlhbCBQcm9jZXNzIFZhcmlhYmxlcyMzMzQ1MQotbmFpY3MjMzM0NTE0I1RvdGFsaXppbmcgRmx1aWQgTWV0ZXIgYW5kIENvdW50aW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTUjSW5zdHJ1bWVudCBNYW51ZmFjdHVyaW5nIGZvciBNZWFzdXJpbmcgYW5kIFRlc3RpbmcgRWxlY3RyaWNpdHkgYW5kIEVsZWN0cmljYWwgU2lnbmFscyMzMzQ1MQotbmFpY3MjMzM0NTE2I0FuYWx5dGljYWwgTGFib3JhdG9yeSBJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxNyNJcnJhZGlhdGlvbiBBcHBhcmF0dXMgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTE4I1dhdGNoLCBDbG9jaywgYW5kIFBhcnQgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTE5I090aGVyIE1lYXN1cmluZyBhbmQgQ29udHJvbGxpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDYjTWFudWZhY3R1cmluZyBhbmQgUmVwcm9kdWNpbmcgTWFnbmV0aWMgYW5kIE9wdGljYWwgTWVkaWEjMzM0Ci1uYWljcyMzMzQ2MSNNYW51ZmFjdHVyaW5nIGFuZCBSZXByb2R1Y2luZyBNYWduZXRpYyBhbmQgT3B0aWNhbCBNZWRpYSMzMzQ2Ci1uYWljcyMzMzQ2MTEjU29mdHdhcmUgUmVwcm9kdWNpbmcjMzM0NjEKLW5haWNzIzMzNDYxMiNQcmVyZWNvcmRlZCBDb21wYWN0IERpc2MgKGV4Y2VwdCBTb2Z0d2FyZSksIFRhcGUsIGFuZCBSZWNvcmQgUmVwcm9kdWNpbmcjMzM0NjEKLW5haWNzIzMzNDYxMyNNYWduZXRpYyBhbmQgT3B0aWNhbCBSZWNvcmRpbmcgTWVkaWEgTWFudWZhY3R1cmluZyMzMzQ2MQotbmFpY3MjMzM1I0VsZWN0cmljYWwgRXF1aXBtZW50LCBBcHBsaWFuY2UsIGFuZCBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzM1MSNFbGVjdHJpYyBMaWdodGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUKLW5haWNzIzMzNTExI0VsZWN0cmljIExhbXAgQnVsYiBhbmQgUGFydCBNYW51ZmFjdHVyaW5nIzMzNTEKLW5haWNzIzMzNTEyI0xpZ2h0aW5nIEZpeHR1cmUgTWFudWZhY3R1cmluZyMzMzUxCi1uYWljcyMzMzUxMjEjUmVzaWRlbnRpYWwgRWxlY3RyaWMgTGlnaHRpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMzNTEyCi1uYWljcyMzMzUxMjIjQ29tbWVyY2lhbCwgSW5kdXN0cmlhbCwgYW5kIEluc3RpdHV0aW9uYWwgRWxlY3RyaWMgTGlnaHRpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMzNTEyCi1uYWljcyMzMzUxMjkjT3RoZXIgTGlnaHRpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM1MTIKLW5haWNzIzMzNTIjSG91c2Vob2xkIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1MjEjU21hbGwgRWxlY3RyaWNhbCBBcHBsaWFuY2UgTWFudWZhY3R1cmluZyMzMzUyCi1uYWljcyMzMzUyMTEjRWxlY3RyaWMgSG91c2V3YXJlcyBhbmQgSG91c2Vob2xkIEZhbiBNYW51ZmFjdHVyaW5nIzMzNTIxCi1uYWljcyMzMzUyMTIjSG91c2Vob2xkIFZhY3V1bSBDbGVhbmVyIE1hbnVmYWN0dXJpbmcjMzM1MjEKLW5haWNzIzMzNTIyI01ham9yIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNTIKLW5haWNzIzMzNTIyMSNIb3VzZWhvbGQgQ29va2luZyBBcHBsaWFuY2UgTWFudWZhY3R1cmluZyMzMzUyMgotbmFpY3MjMzM1MjIyI0hvdXNlaG9sZCBSZWZyaWdlcmF0b3IgYW5kIEhvbWUgRnJlZXplciBNYW51ZmFjdHVyaW5nIzMzNTIyCi1uYWljcyMzMzUyMjQjSG91c2Vob2xkIExhdW5kcnkgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM1MjIKLW5haWNzIzMzNTIyOCNPdGhlciBNYWpvciBIb3VzZWhvbGQgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1MjIKLW5haWNzIzMzNTMjRWxlY3RyaWNhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUKLW5haWNzIzMzNTMxI0VsZWN0cmljYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM1MwotbmFpY3MjMzM1MzExI1Bvd2VyLCBEaXN0cmlidXRpb24sIGFuZCBTcGVjaWFsdHkgVHJhbnNmb3JtZXIgTWFudWZhY3R1cmluZyMzMzUzMQotbmFpY3MjMzM1MzEyI01vdG9yIGFuZCBHZW5lcmF0b3IgTWFudWZhY3R1cmluZyMzMzUzMQotbmFpY3MjMzM1MzEzI1N3aXRjaGdlYXIgYW5kIFN3aXRjaGJvYXJkIEFwcGFyYXR1cyBNYW51ZmFjdHVyaW5nIzMzNTMxCi1uYWljcyMzMzUzMTQjUmVsYXkgYW5kIEluZHVzdHJpYWwgQ29udHJvbCBNYW51ZmFjdHVyaW5nIzMzNTMxCi1uYWljcyMzMzU5I090aGVyIEVsZWN0cmljYWwgRXF1aXBtZW50IGFuZCBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzUKLW5haWNzIzMzNTkxI0JhdHRlcnkgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5MTEjU3RvcmFnZSBCYXR0ZXJ5IE1hbnVmYWN0dXJpbmcjMzM1OTEKLW5haWNzIzMzNTkxMiNQcmltYXJ5IEJhdHRlcnkgTWFudWZhY3R1cmluZyMzMzU5MQotbmFpY3MjMzM1OTIjQ29tbXVuaWNhdGlvbiBhbmQgRW5lcmd5IFdpcmUgYW5kIENhYmxlIE1hbnVmYWN0dXJpbmcjMzM1OQotbmFpY3MjMzM1OTIxI0ZpYmVyIE9wdGljIENhYmxlIE1hbnVmYWN0dXJpbmcjMzM1OTIKLW5haWNzIzMzNTkyOSNPdGhlciBDb21tdW5pY2F0aW9uIGFuZCBFbmVyZ3kgV2lyZSBNYW51ZmFjdHVyaW5nIzMzNTkyCi1uYWljcyMzMzU5MyNXaXJpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM1OQotbmFpY3MjMzM1OTMxI0N1cnJlbnQtQ2FycnlpbmcgV2lyaW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNTkzCi1uYWljcyMzMzU5MzIjTm9uY3VycmVudC1DYXJyeWluZyBXaXJpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM1OTMKLW5haWNzIzMzNTk5I0FsbCBPdGhlciBFbGVjdHJpY2FsIEVxdWlwbWVudCBhbmQgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM1OQotbmFpY3MjMzM1OTkxI0NhcmJvbiBhbmQgR3JhcGhpdGUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzNTk5Ci1uYWljcyMzMzU5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgRWxlY3RyaWNhbCBFcXVpcG1lbnQgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNTk5Ci1uYWljcyMzMzYjVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzNjEjTW90b3IgVmVoaWNsZSBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2MTEjQXV0b21vYmlsZSBhbmQgTGlnaHQgRHV0eSBNb3RvciBWZWhpY2xlIE1hbnVmYWN0dXJpbmcjMzM2MQotbmFpY3MjMzM2MTExI0F1dG9tb2JpbGUgTWFudWZhY3R1cmluZyMzMzYxMQotbmFpY3MjMzM2MTEyI0xpZ2h0IFRydWNrIGFuZCBVdGlsaXR5IFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzYxMQotbmFpY3MjMzM2MTIjSGVhdnkgRHV0eSBUcnVjayBNYW51ZmFjdHVyaW5nIzMzNjEKLW5haWNzIzMzNjIjTW90b3IgVmVoaWNsZSBCb2R5IGFuZCBUcmFpbGVyIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzYyMSNNb3RvciBWZWhpY2xlIEJvZHkgYW5kIFRyYWlsZXIgTWFudWZhY3R1cmluZyMzMzYyCi1uYWljcyMzMzYyMTEjTW90b3IgVmVoaWNsZSBCb2R5IE1hbnVmYWN0dXJpbmcjMzM2MjEKLW5haWNzIzMzNjIxMiNUcnVjayBUcmFpbGVyIE1hbnVmYWN0dXJpbmcjMzM2MjEKLW5haWNzIzMzNjIxMyNNb3RvciBIb21lIE1hbnVmYWN0dXJpbmcjMzM2MjEKLW5haWNzIzMzNjIxNCNUcmF2ZWwgVHJhaWxlciBhbmQgQ2FtcGVyIE1hbnVmYWN0dXJpbmcjMzM2MjEKLW5haWNzIzMzNjMjTW90b3IgVmVoaWNsZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2MzEjTW90b3IgVmVoaWNsZSBHYXNvbGluZSBFbmdpbmUgYW5kIEVuZ2luZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjMxMSNDYXJidXJldG9yLCBQaXN0b24sIFBpc3RvbiBSaW5nLCBhbmQgVmFsdmUgTWFudWZhY3R1cmluZyMzMzYzMQotbmFpY3MjMzM2MzEyI0dhc29saW5lIEVuZ2luZSBhbmQgRW5naW5lIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MzEKLW5haWNzIzMzNjMyI01vdG9yIFZlaGljbGUgRWxlY3RyaWNhbCBhbmQgRWxlY3Ryb25pYyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzMjEjVmVoaWN1bGFyIExpZ2h0aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjMyCi1uYWljcyMzMzYzMjIjT3RoZXIgTW90b3IgVmVoaWNsZSBFbGVjdHJpY2FsIGFuZCBFbGVjdHJvbmljIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjMyCi1uYWljcyMzMzYzMyNNb3RvciBWZWhpY2xlIFN0ZWVyaW5nIGFuZCBTdXNwZW5zaW9uIENvbXBvbmVudHMgKGV4Y2VwdCBTcHJpbmcpIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzQjTW90b3IgVmVoaWNsZSBCcmFrZSBTeXN0ZW0gTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzNSNNb3RvciBWZWhpY2xlIFRyYW5zbWlzc2lvbiBhbmQgUG93ZXIgVHJhaW4gUGFydHMgTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzNiNNb3RvciBWZWhpY2xlIFNlYXRpbmcgYW5kIEludGVyaW9yIFRyaW0gTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzNyNNb3RvciBWZWhpY2xlIE1ldGFsIFN0YW1waW5nIzMzNjMKLW5haWNzIzMzNjM5I090aGVyIE1vdG9yIFZlaGljbGUgUGFydHMgTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzOTEjTW90b3IgVmVoaWNsZSBBaXItQ29uZGl0aW9uaW5nIE1hbnVmYWN0dXJpbmcjMzM2MzkKLW5haWNzIzMzNjM5OSNBbGwgT3RoZXIgTW90b3IgVmVoaWNsZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjM5Ci1uYWljcyMzMzY0I0Flcm9zcGFjZSBQcm9kdWN0IGFuZCBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2NDEjQWVyb3NwYWNlIFByb2R1Y3QgYW5kIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2NAotbmFpY3MjMzM2NDExI0FpcmNyYWZ0IE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxMiNBaXJjcmFmdCBFbmdpbmUgYW5kIEVuZ2luZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY0MTMjT3RoZXIgQWlyY3JhZnQgUGFydHMgYW5kIEF1eGlsaWFyeSBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDE0I0d1aWRlZCBNaXNzaWxlIGFuZCBTcGFjZSBWZWhpY2xlIE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxNSNHdWlkZWQgTWlzc2lsZSBhbmQgU3BhY2UgVmVoaWNsZSBQcm9wdWxzaW9uIFVuaXQgYW5kIFByb3B1bHNpb24gVW5pdCBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY0MTkjT3RoZXIgR3VpZGVkIE1pc3NpbGUgYW5kIFNwYWNlIFZlaGljbGUgUGFydHMgYW5kIEF1eGlsaWFyeSBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NSNSYWlscm9hZCBSb2xsaW5nIFN0b2NrIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzY1MSNSYWlscm9hZCBSb2xsaW5nIFN0b2NrIE1hbnVmYWN0dXJpbmcjMzM2NQotbmFpY3MjMzM2NiNTaGlwIGFuZCBCb2F0IEJ1aWxkaW5nIzMzNgotbmFpY3MjMzM2NjEjU2hpcCBhbmQgQm9hdCBCdWlsZGluZyMzMzY2Ci1uYWljcyMzMzY2MTEjU2hpcCBCdWlsZGluZyBhbmQgUmVwYWlyaW5nIzMzNjYxCi1uYWljcyMzMzY2MTIjQm9hdCBCdWlsZGluZyMzMzY2MQotbmFpY3MjMzM2OSNPdGhlciBUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjk5I090aGVyIFRyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjkKLW5haWNzIzMzNjk5MSNNb3RvcmN5Y2xlLCBCaWN5Y2xlLCBhbmQgUGFydHMgTWFudWZhY3R1cmluZyMzMzY5OQotbmFpY3MjMzM2OTkyI01pbGl0YXJ5IEFybW9yZWQgVmVoaWNsZSwgVGFuaywgYW5kIFRhbmsgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM2OTkKLW5haWNzIzMzNjk5OSNBbGwgT3RoZXIgVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2OTkKLW5haWNzIzMzNyNGdXJuaXR1cmUgYW5kIFJlbGF0ZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzcxI0hvdXNlaG9sZCBhbmQgSW5zdGl0dXRpb25hbCBGdXJuaXR1cmUgYW5kIEtpdGNoZW4gQ2FiaW5ldCBNYW51ZmFjdHVyaW5nIzMzNwotbmFpY3MjMzM3MTEjV29vZCBLaXRjaGVuIENhYmluZXQgYW5kIENvdW50ZXJ0b3AgTWFudWZhY3R1cmluZyMzMzcxCi1uYWljcyMzMzcxMiNIb3VzZWhvbGQgYW5kIEluc3RpdHV0aW9uYWwgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MQotbmFpY3MjMzM3MTIxI1VwaG9sc3RlcmVkIEhvdXNlaG9sZCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MTIyI05vbnVwaG9sc3RlcmVkIFdvb2QgSG91c2Vob2xkIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjQjTWV0YWwgSG91c2Vob2xkIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjUjSG91c2Vob2xkIEZ1cm5pdHVyZSAoZXhjZXB0IFdvb2QgYW5kIE1ldGFsKSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjcjSW5zdGl0dXRpb25hbCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MTI5I1dvb2QgVGVsZXZpc2lvbiwgUmFkaW8sIGFuZCBTZXdpbmcgTWFjaGluZSBDYWJpbmV0IE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzIjT2ZmaWNlIEZ1cm5pdHVyZSAoaW5jbHVkaW5nIEZpeHR1cmVzKSBNYW51ZmFjdHVyaW5nIzMzNwotbmFpY3MjMzM3MjEjT2ZmaWNlIEZ1cm5pdHVyZSAoaW5jbHVkaW5nIEZpeHR1cmVzKSBNYW51ZmFjdHVyaW5nIzMzNzIKLW5haWNzIzMzNzIxMSNXb29kIE9mZmljZSBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcyMQotbmFpY3MjMzM3MjEyI0N1c3RvbSBBcmNoaXRlY3R1cmFsIFdvb2R3b3JrIGFuZCBNaWxsd29yayBNYW51ZmFjdHVyaW5nIzMzNzIxCi1uYWljcyMzMzcyMTQjT2ZmaWNlIEZ1cm5pdHVyZSAoZXhjZXB0IFdvb2QpIE1hbnVmYWN0dXJpbmcjMzM3MjEKLW5haWNzIzMzNzIxNSNTaG93Y2FzZSwgUGFydGl0aW9uLCBTaGVsdmluZywgYW5kIExvY2tlciBNYW51ZmFjdHVyaW5nIzMzNzIxCi1uYWljcyMzMzc5I090aGVyIEZ1cm5pdHVyZSBSZWxhdGVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzcKLW5haWNzIzMzNzkxI01hdHRyZXNzIE1hbnVmYWN0dXJpbmcjMzM3OQotbmFpY3MjMzM3OTIjQmxpbmQgYW5kIFNoYWRlIE1hbnVmYWN0dXJpbmcjMzM3OQotbmFpY3MjMzM5I01pc2NlbGxhbmVvdXMgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzM5MSNNZWRpY2FsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgTWFudWZhY3R1cmluZyMzMzkKLW5haWNzIzMzOTExI01lZGljYWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBNYW51ZmFjdHVyaW5nIzMzOTEKLW5haWNzIzMzOTExMSNMYWJvcmF0b3J5IEFwcGFyYXR1cyBhbmQgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExMiNTdXJnaWNhbCBhbmQgTWVkaWNhbCBJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExMyNTdXJnaWNhbCBBcHBsaWFuY2UgYW5kIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExNCNEZW50YWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBNYW51ZmFjdHVyaW5nIzMzOTExCi1uYWljcyMzMzkxMTUjT3BodGhhbG1pYyBHb29kcyBNYW51ZmFjdHVyaW5nIzMzOTExCi1uYWljcyMzMzkxMTYjRGVudGFsIExhYm9yYXRvcmllcyMzMzkxMQotbmFpY3MjMzM5OSNPdGhlciBNaXNjZWxsYW5lb3VzIE1hbnVmYWN0dXJpbmcjMzM5Ci1uYWljcyMzMzk5MSNKZXdlbHJ5IGFuZCBTaWx2ZXJ3YXJlIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTExI0pld2VscnkgKGV4Y2VwdCBDb3N0dW1lKSBNYW51ZmFjdHVyaW5nIzMzOTkxCi1uYWljcyMzMzk5MTIjU2lsdmVyd2FyZSBhbmQgSG9sbG93d2FyZSBNYW51ZmFjdHVyaW5nIzMzOTkxCi1uYWljcyMzMzk5MTMjSmV3ZWxlcnMnIE1hdGVyaWFsIGFuZCBMYXBpZGFyeSBXb3JrIE1hbnVmYWN0dXJpbmcjMzM5OTEKLW5haWNzIzMzOTkxNCNDb3N0dW1lIEpld2VscnkgYW5kIE5vdmVsdHkgTWFudWZhY3R1cmluZyMzMzk5MQotbmFpY3MjMzM5OTIjU3BvcnRpbmcgYW5kIEF0aGxldGljIEdvb2RzIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTMjRG9sbCwgVG95LCBhbmQgR2FtZSBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTkzMSNEb2xsIGFuZCBTdHVmZmVkIFRveSBNYW51ZmFjdHVyaW5nIzMzOTkzCi1uYWljcyMzMzk5MzIjR2FtZSwgVG95LCBhbmQgQ2hpbGRyZW4ncyBWZWhpY2xlIE1hbnVmYWN0dXJpbmcjMzM5OTMKLW5haWNzIzMzOTk0I09mZmljZSBTdXBwbGllcyAoZXhjZXB0IFBhcGVyKSBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTk0MSNQZW4gYW5kIE1lY2hhbmljYWwgUGVuY2lsIE1hbnVmYWN0dXJpbmcjMzM5OTQKLW5haWNzIzMzOTk0MiNMZWFkIFBlbmNpbCBhbmQgQXJ0IEdvb2QgTWFudWZhY3R1cmluZyMzMzk5NAotbmFpY3MjMzM5OTQzI01hcmtpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM5OTQKLW5haWNzIzMzOTk0NCNDYXJib24gUGFwZXIgYW5kIElua2VkIFJpYmJvbiBNYW51ZmFjdHVyaW5nIzMzOTk0Ci1uYWljcyMzMzk5NSNTaWduIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5OTEjR2Fza2V0LCBQYWNraW5nLCBhbmQgU2VhbGluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjMzM5OTkyI011c2ljYWwgSW5zdHJ1bWVudCBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTMjRmFzdGVuZXIsIEJ1dHRvbiwgTmVlZGxlLCBhbmQgUGluIE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzMzOTk5NCNCcm9vbSwgQnJ1c2gsIGFuZCBNb3AgTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjMzM5OTk1I0J1cmlhbCBDYXNrZXQgTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjMzM5OTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzQyI1dob2xlc2FsZSBUcmFkZSM0MgotbmFpY3MjNDIxI1dob2xlc2FsZSBUcmFkZSwgRHVyYWJsZSBHb29kcyM0MgotbmFpY3MjNDIxMSNNb3RvciBWZWhpY2xlIGFuZCBNb3RvciBWZWhpY2xlIFBhcnRzIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTExI0F1dG9tb2JpbGUgYW5kIE90aGVyIE1vdG9yIFZlaGljbGUgV2hvbGVzYWxlcnMjNDIxMQotbmFpY3MjNDIxMTIjTW90b3IgVmVoaWNsZSBTdXBwbGllcyBhbmQgTmV3IFBhcnRzIFdob2xlc2FsZXJzIzQyMTEKLW5haWNzIzQyMTEzI1RpcmUgYW5kIFR1YmUgV2hvbGVzYWxlcnMjNDIxMQotbmFpY3MjNDIxMTQjTW90b3IgVmVoaWNsZSBQYXJ0cyAoVXNlZCkgV2hvbGVzYWxlcnMjNDIxMQotbmFpY3MjNDIxMiNGdXJuaXR1cmUgYW5kIEhvbWUgRnVybmlzaGluZyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTIxI0Z1cm5pdHVyZSBXaG9sZXNhbGVycyM0MjEyCi1uYWljcyM0MjEyMiNIb21lIEZ1cm5pc2hpbmcgV2hvbGVzYWxlcnMjNDIxMgotbmFpY3MjNDIxMyNMdW1iZXIgYW5kIE90aGVyIENvbnN0cnVjdGlvbiBNYXRlcmlhbHMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjEzMSNMdW1iZXIsIFBseXdvb2QsIE1pbGx3b3JrLCBhbmQgV29vZCBQYW5lbCBXaG9sZXNhbGVycyM0MjEzCi1uYWljcyM0MjEzMiNCcmljaywgU3RvbmUsIGFuZCBSZWxhdGVkIENvbnN0cnVjdGlvbiBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjEzCi1uYWljcyM0MjEzMyNSb29maW5nLCBTaWRpbmcsIGFuZCBJbnN1bGF0aW9uIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTM5I090aGVyIENvbnN0cnVjdGlvbiBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjEzCi1uYWljcyM0MjE0I1Byb2Zlc3Npb25hbCBhbmQgQ29tbWVyY2lhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxNDEjUGhvdG9ncmFwaGljIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDIjT2ZmaWNlIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0MyNDb21wdXRlciBhbmQgQ29tcHV0ZXIgUGVyaXBoZXJhbCBFcXVpcG1lbnQgYW5kIFNvZnR3YXJlIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQ0I090aGVyIENvbW1lcmNpYWwgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQ1I01lZGljYWwsIERlbnRhbCwgYW5kIEhvc3BpdGFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDYjT3BodGhhbG1pYyBHb29kcyBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0OSNPdGhlciBQcm9mZXNzaW9uYWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE1I01ldGFsIGFuZCBNaW5lcmFsIChleGNlcHQgUGV0cm9sZXVtKSBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTUxI01ldGFsIFNlcnZpY2UgQ2VudGVycyBhbmQgT2ZmaWNlcyM0MjE1Ci1uYWljcyM0MjE1MiNDb2FsIGFuZCBPdGhlciBNaW5lcmFsIGFuZCBPcmUgV2hvbGVzYWxlcnMjNDIxNQotbmFpY3MjNDIxNiNFbGVjdHJpY2FsIEdvb2RzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxNjEjRWxlY3RyaWNhbCBBcHBhcmF0dXMgYW5kIEVxdWlwbWVudCwgV2lyaW5nIFN1cHBsaWVzLCBhbmQgQ29uc3RydWN0aW9uIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTYKLW5haWNzIzQyMTYyI0VsZWN0cmljYWwgQXBwbGlhbmNlLCBUZWxldmlzaW9uLCBhbmQgUmFkaW8gU2V0IFdob2xlc2FsZXJzIzQyMTYKLW5haWNzIzQyMTY5I090aGVyIEVsZWN0cm9uaWMgUGFydHMgYW5kIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE2Ci1uYWljcyM0MjE3I0hhcmR3YXJlLCBhbmQgUGx1bWJpbmcgYW5kIEhlYXRpbmcgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTcxI0hhcmR3YXJlIFdob2xlc2FsZXJzIzQyMTcKLW5haWNzIzQyMTcyI1BsdW1iaW5nIGFuZCBIZWF0aW5nIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgKEh5ZHJvbmljcykgV2hvbGVzYWxlcnMjNDIxNwotbmFpY3MjNDIxNzMjV2FybSBBaXIgSGVhdGluZyBhbmQgQWlyLUNvbmRpdGlvbmluZyBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTcKLW5haWNzIzQyMTc0I1JlZnJpZ2VyYXRpb24gRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE3Ci1uYWljcyM0MjE4I01hY2hpbmVyeSwgRXF1aXBtZW50LCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE4MSNDb25zdHJ1Y3Rpb24gYW5kIE1pbmluZyAoZXhjZXB0IE9pbCBXZWxsKSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE4MiNGYXJtIGFuZCBHYXJkZW4gTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODMjSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE4NCNJbmR1c3RyaWFsIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTg1I1NlcnZpY2UgRXN0YWJsaXNobWVudCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTg2I1RyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgKGV4Y2VwdCBNb3RvciBWZWhpY2xlKSBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE5I01pc2NlbGxhbmVvdXMgRHVyYWJsZSBHb29kcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTkxI1Nwb3J0aW5nIGFuZCBSZWNyZWF0aW9uYWwgR29vZHMgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTkKLW5haWNzIzQyMTkyI1RveSBhbmQgSG9iYnkgR29vZHMgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTkKLW5haWNzIzQyMTkzI1JlY3ljbGFibGUgTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIxOTQjSmV3ZWxyeSwgV2F0Y2gsIFByZWNpb3VzIFN0b25lLCBhbmQgUHJlY2lvdXMgTWV0YWwgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIxOTkjT3RoZXIgTWlzY2VsbGFuZW91cyBEdXJhYmxlIEdvb2RzIFdob2xlc2FsZXJzIzQyMTkKLW5haWNzIzQyMiNXaG9sZXNhbGUgVHJhZGUsIE5vbmR1cmFibGUgR29vZHMjNDIKLW5haWNzIzQyMjEjUGFwZXIgYW5kIFBhcGVyIFByb2R1Y3QgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjIxMSNQcmludGluZyBhbmQgV3JpdGluZyBQYXBlciBXaG9sZXNhbGVycyM0MjIxCi1uYWljcyM0MjIxMiNTdGF0aW9uZXJ5IGFuZCBPZmZpY2UgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIyMQotbmFpY3MjNDIyMTMjSW5kdXN0cmlhbCBhbmQgUGVyc29uYWwgU2VydmljZSBQYXBlciBXaG9sZXNhbGVycyM0MjIxCi1uYWljcyM0MjIyI0RydWdzIGFuZCBEcnVnZ2lzdHMnIFN1bmRyaWVzIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyMjEjRHJ1Z3MgYW5kIERydWdnaXN0cycgU3VuZHJpZXMgV2hvbGVzYWxlcnMjNDIyMgotbmFpY3MjNDIyMyNBcHBhcmVsLCBQaWVjZSBHb29kcywgYW5kIE5vdGlvbnMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjIzMSNQaWVjZSBHb29kcywgTm90aW9ucywgYW5kIE90aGVyIERyeSBHb29kcyBXaG9sZXNhbGVycyM0MjIzCi1uYWljcyM0MjIzMiNNZW4ncyBhbmQgQm95cycgQ2xvdGhpbmcgYW5kIEZ1cm5pc2hpbmdzIFdob2xlc2FsZXJzIzQyMjMKLW5haWNzIzQyMjMzI1dvbWVuJ3MsIENoaWxkcmVuJ3MsIGFuZCBJbmZhbnRzJyBDbG90aGluZyBhbmQgQWNjZXNzb3JpZXMgV2hvbGVzYWxlcnMjNDIyMwotbmFpY3MjNDIyMzQjRm9vdHdlYXIgV2hvbGVzYWxlcnMjNDIyMwotbmFpY3MjNDIyNCNHcm9jZXJ5IGFuZCBSZWxhdGVkIFByb2R1Y3QgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI0MSNHZW5lcmFsIExpbmUgR3JvY2VyeSBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0MiNQYWNrYWdlZCBGcm96ZW4gRm9vZCBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0MyNEYWlyeSBQcm9kdWN0IChleGNlcHQgRHJpZWQgb3IgQ2FubmVkKSBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0NCNQb3VsdHJ5IGFuZCBQb3VsdHJ5IFByb2R1Y3QgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDUjQ29uZmVjdGlvbmVyeSBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0NiNGaXNoIGFuZCBTZWFmb29kIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ3I01lYXQgYW5kIE1lYXQgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0OCNGcmVzaCBGcnVpdCBhbmQgVmVnZXRhYmxlIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ5I090aGVyIEdyb2NlcnkgYW5kIFJlbGF0ZWQgUHJvZHVjdHMgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNSNGYXJtIFByb2R1Y3QgUmF3IE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyNTEjR3JhaW4gYW5kIEZpZWxkIEJlYW4gV2hvbGVzYWxlcnMjNDIyNQotbmFpY3MjNDIyNTIjTGl2ZXN0b2NrIFdob2xlc2FsZXJzIzQyMjUKLW5haWNzIzQyMjU5I090aGVyIEZhcm0gUHJvZHVjdCBSYXcgTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIyNQotbmFpY3MjNDIyNiNDaGVtaWNhbCBhbmQgQWxsaWVkIFByb2R1Y3RzIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyNjEjUGxhc3RpY3MgTWF0ZXJpYWxzIGFuZCBCYXNpYyBGb3JtcyBhbmQgU2hhcGVzIFdob2xlc2FsZXJzIzQyMjYKLW5haWNzIzQyMjY5I090aGVyIENoZW1pY2FsIGFuZCBBbGxpZWQgUHJvZHVjdHMgV2hvbGVzYWxlcnMjNDIyNgotbmFpY3MjNDIyNyNQZXRyb2xldW0gYW5kIFBldHJvbGV1bSBQcm9kdWN0cyBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjcxI1BldHJvbGV1bSBCdWxrIFN0YXRpb25zIGFuZCBUZXJtaW5hbHMjNDIyNwotbmFpY3MjNDIyNzIjUGV0cm9sZXVtIGFuZCBQZXRyb2xldW0gUHJvZHVjdHMgV2hvbGVzYWxlcnMgKGV4Y2VwdCBCdWxrIFN0YXRpb25zIGFuZCBUZXJtaW5hbHMpIzQyMjcKLW5haWNzIzQyMjgjQmVlciwgV2luZSwgYW5kIERpc3RpbGxlZCBBbGNvaG9saWMgQmV2ZXJhZ2UgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI4MSNCZWVyIGFuZCBBbGUgV2hvbGVzYWxlcnMjNDIyOAotbmFpY3MjNDIyODIjV2luZSBhbmQgRGlzdGlsbGVkIEFsY29ob2xpYyBCZXZlcmFnZSBXaG9sZXNhbGVycyM0MjI4Ci1uYWljcyM0MjI5I01pc2NlbGxhbmVvdXMgTm9uZHVyYWJsZSBHb29kcyBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjkxI0Zhcm0gU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDIyOTIjQm9vaywgUGVyaW9kaWNhbCwgYW5kIE5ld3NwYXBlciBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5MyNGbG93ZXIsIE51cnNlcnkgU3RvY2ssIGFuZCBGbG9yaXN0cycgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDIyOTQjVG9iYWNjbyBhbmQgVG9iYWNjbyBQcm9kdWN0IFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQyMjk1I1BhaW50LCBWYXJuaXNoLCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDIyOTkjT3RoZXIgTWlzY2VsbGFuZW91cyBOb25kdXJhYmxlIEdvb2RzIFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQ0I1JldGFpbCBUcmFkZSM0NAotbmFpY3MjNDQxI01vdG9yIFZlaGljbGUgYW5kIFBhcnRzIERlYWxlcnMjNDQKLW5haWNzIzQ0MTEjQXV0b21vYmlsZSBEZWFsZXJzIzQ0MQotbmFpY3MjNDQxMTEjTmV3IENhciBEZWFsZXJzIzQ0MTEKLW5haWNzIzQ0MTEyI1VzZWQgQ2FyIERlYWxlcnMjNDQxMQotbmFpY3MjNDQxMiNPdGhlciBNb3RvciBWZWhpY2xlIERlYWxlcnMjNDQxCi1uYWljcyM0NDEyMSNSZWNyZWF0aW9uYWwgVmVoaWNsZSBEZWFsZXJzIzQ0MTIKLW5haWNzIzQ0MTIyI01vdG9yY3ljbGUsIEJvYXQsIGFuZCBPdGhlciBNb3RvciBWZWhpY2xlIERlYWxlcnMjNDQxMgotbmFpY3MjNDQxMjIxI01vdG9yY3ljbGUgRGVhbGVycyM0NDEyMgotbmFpY3MjNDQxMjIyI0JvYXQgRGVhbGVycyM0NDEyMgotbmFpY3MjNDQxMjI5I0FsbCBPdGhlciBNb3RvciBWZWhpY2xlIERlYWxlcnMjNDQxMjIKLW5haWNzIzQ0MTMjQXV0b21vdGl2ZSBQYXJ0cywgQWNjZXNzb3JpZXMsIGFuZCBUaXJlIFN0b3JlcyM0NDEKLW5haWNzIzQ0MTMxI0F1dG9tb3RpdmUgUGFydHMgYW5kIEFjY2Vzc29yaWVzIFN0b3JlcyM0NDEzCi1uYWljcyM0NDEzMiNUaXJlIERlYWxlcnMjNDQxMwotbmFpY3MjNDQyI0Z1cm5pdHVyZSBhbmQgSG9tZSBGdXJuaXNoaW5ncyBTdG9yZXMjNDQKLW5haWNzIzQ0MjEjRnVybml0dXJlIFN0b3JlcyM0NDIKLW5haWNzIzQ0MjExI0Z1cm5pdHVyZSBTdG9yZXMjNDQyMQotbmFpY3MjNDQyMiNIb21lIEZ1cm5pc2hpbmdzIFN0b3JlcyM0NDIKLW5haWNzIzQ0MjIxI0Zsb29yIENvdmVyaW5nIFN0b3JlcyM0NDIyCi1uYWljcyM0NDIyOSNPdGhlciBIb21lIEZ1cm5pc2hpbmdzIFN0b3JlcyM0NDIyCi1uYWljcyM0NDIyOTEjV2luZG93IFRyZWF0bWVudCBTdG9yZXMjNDQyMjkKLW5haWNzIzQ0MjI5OSNBbGwgT3RoZXIgSG9tZSBGdXJuaXNoaW5ncyBTdG9yZXMjNDQyMjkKLW5haWNzIzQ0MyNFbGVjdHJvbmljcyBhbmQgQXBwbGlhbmNlIFN0b3JlcyM0NAotbmFpY3MjNDQzMSNFbGVjdHJvbmljcyBhbmQgQXBwbGlhbmNlIFN0b3JlcyM0NDMKLW5haWNzIzQ0MzExI0FwcGxpYW5jZSwgVGVsZXZpc2lvbiwgYW5kIE90aGVyIEVsZWN0cm9uaWNzIFN0b3JlcyM0NDMxCi1uYWljcyM0NDMxMTEjSG91c2Vob2xkIEFwcGxpYW5jZSBTdG9yZXMjNDQzMTEKLW5haWNzIzQ0MzExMiNSYWRpbywgVGVsZXZpc2lvbiwgYW5kIE90aGVyIEVsZWN0cm9uaWNzIFN0b3JlcyM0NDMxMQotbmFpY3MjNDQzMTIjQ29tcHV0ZXIgYW5kIFNvZnR3YXJlIFN0b3JlcyM0NDMxCi1uYWljcyM0NDMxMyNDYW1lcmEgYW5kIFBob3RvZ3JhcGhpYyBTdXBwbGllcyBTdG9yZXMjNDQzMQotbmFpY3MjNDQ0I0J1aWxkaW5nIE1hdGVyaWFsIGFuZCBHYXJkZW4gRXF1aXBtZW50IGFuZCBTdXBwbGllcyBEZWFsZXJzIzQ0Ci1uYWljcyM0NDQxI0J1aWxkaW5nIE1hdGVyaWFsIGFuZCBTdXBwbGllcyBEZWFsZXJzIzQ0NAotbmFpY3MjNDQ0MTEjSG9tZSBDZW50ZXJzIzQ0NDEKLW5haWNzIzQ0NDEyI1BhaW50IGFuZCBXYWxscGFwZXIgU3RvcmVzIzQ0NDEKLW5haWNzIzQ0NDEzI0hhcmR3YXJlIFN0b3JlcyM0NDQxCi1uYWljcyM0NDQxOSNPdGhlciBCdWlsZGluZyBNYXRlcmlhbCBEZWFsZXJzIzQ0NDEKLW5haWNzIzQ0NDIjTGF3biBhbmQgR2FyZGVuIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgU3RvcmVzIzQ0NAotbmFpY3MjNDQ0MjEjT3V0ZG9vciBQb3dlciBFcXVpcG1lbnQgU3RvcmVzIzQ0NDIKLW5haWNzIzQ0NDIyI051cnNlcnkgYW5kIEdhcmRlbiBDZW50ZXJzIzQ0NDIKLW5haWNzIzQ0NSNGb29kIGFuZCBCZXZlcmFnZSBTdG9yZXMjNDQKLW5haWNzIzQ0NTEjR3JvY2VyeSBTdG9yZXMjNDQ1Ci1uYWljcyM0NDUxMSNTdXBlcm1hcmtldHMgYW5kIE90aGVyIEdyb2NlcnkgKGV4Y2VwdCBDb252ZW5pZW5jZSkgU3RvcmVzIzQ0NTEKLW5haWNzIzQ0NTEyI0NvbnZlbmllbmNlIFN0b3JlcyM0NDUxCi1uYWljcyM0NDUyI1NwZWNpYWx0eSBGb29kIFN0b3JlcyM0NDUKLW5haWNzIzQ0NTIxI01lYXQgTWFya2V0cyM0NDUyCi1uYWljcyM0NDUyMiNGaXNoIGFuZCBTZWFmb29kIE1hcmtldHMjNDQ1MgotbmFpY3MjNDQ1MjMjRnJ1aXQgYW5kIFZlZ2V0YWJsZSBNYXJrZXRzIzQ0NTIKLW5haWNzIzQ0NTI5I090aGVyIFNwZWNpYWx0eSBGb29kIFN0b3JlcyM0NDUyCi1uYWljcyM0NDUyOTEjQmFrZWQgR29vZHMgU3RvcmVzIzQ0NTI5Ci1uYWljcyM0NDUyOTIjQ29uZmVjdGlvbmVyeSBhbmQgTnV0IFN0b3JlcyM0NDUyOQotbmFpY3MjNDQ1Mjk5I0FsbCBPdGhlciBTcGVjaWFsdHkgRm9vZCBTdG9yZXMjNDQ1MjkKLW5haWNzIzQ0NTMjQmVlciwgV2luZSwgYW5kIExpcXVvciBTdG9yZXMjNDQ1Ci1uYWljcyM0NDUzMSNCZWVyLCBXaW5lLCBhbmQgTGlxdW9yIFN0b3JlcyM0NDUzCi1uYWljcyM0NDYjSGVhbHRoIGFuZCBQZXJzb25hbCBDYXJlIFN0b3JlcyM0NAotbmFpY3MjNDQ2MSNIZWFsdGggYW5kIFBlcnNvbmFsIENhcmUgU3RvcmVzIzQ0NgotbmFpY3MjNDQ2MTEjUGhhcm1hY2llcyBhbmQgRHJ1ZyBTdG9yZXMjNDQ2MQotbmFpY3MjNDQ2MTIjQ29zbWV0aWNzLCBCZWF1dHkgU3VwcGxpZXMsIGFuZCBQZXJmdW1lIFN0b3JlcyM0NDYxCi1uYWljcyM0NDYxMyNPcHRpY2FsIEdvb2RzIFN0b3JlcyM0NDYxCi1uYWljcyM0NDYxOSNPdGhlciBIZWFsdGggYW5kIFBlcnNvbmFsIENhcmUgU3RvcmVzIzQ0NjEKLW5haWNzIzQ0NjE5MSNGb29kIChIZWFsdGgpIFN1cHBsZW1lbnQgU3RvcmVzIzQ0NjE5Ci1uYWljcyM0NDYxOTkjQWxsIE90aGVyIEhlYWx0aCBhbmQgUGVyc29uYWwgQ2FyZSBTdG9yZXMjNDQ2MTkKLW5haWNzIzQ0NyNHYXNvbGluZSBTdGF0aW9ucyM0NAotbmFpY3MjNDQ3MSNHYXNvbGluZSBTdGF0aW9ucyM0NDcKLW5haWNzIzQ0NzExI0dhc29saW5lIFN0YXRpb25zIHdpdGggQ29udmVuaWVuY2UgU3RvcmVzIzQ0NzEKLW5haWNzIzQ0NzE5I090aGVyIEdhc29saW5lIFN0YXRpb25zIzQ0NzEKLW5haWNzIzQ0OCNDbG90aGluZyBhbmQgQ2xvdGhpbmcgQWNjZXNzb3JpZXMgU3RvcmVzIzQ0Ci1uYWljcyM0NDgxI0Nsb3RoaW5nIFN0b3JlcyM0NDgKLW5haWNzIzQ0ODExI01lbidzIENsb3RoaW5nIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxMiNXb21lbidzIENsb3RoaW5nIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxMyNDaGlsZHJlbidzIGFuZCBJbmZhbnRzJyBDbG90aGluZyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MTQjRmFtaWx5IENsb3RoaW5nIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxNSNDbG90aGluZyBBY2Nlc3NvcmllcyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MTkjT3RoZXIgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODIjU2hvZSBTdG9yZXMjNDQ4Ci1uYWljcyM0NDgyMSNTaG9lIFN0b3JlcyM0NDgyCi1uYWljcyM0NDgzI0pld2VscnksIEx1Z2dhZ2UsIGFuZCBMZWF0aGVyIEdvb2RzIFN0b3JlcyM0NDgKLW5haWNzIzQ0ODMxI0pld2VscnkgU3RvcmVzIzQ0ODMKLW5haWNzIzQ0ODMyI0x1Z2dhZ2UgYW5kIExlYXRoZXIgR29vZHMgU3RvcmVzIzQ0ODMKLW5haWNzIzQ1I1JldGFpbCBUcmFkZSM0NQotbmFpY3MjNDUxI1Nwb3J0aW5nIEdvb2RzLCBIb2JieSwgQm9vaywgYW5kIE11c2ljIFN0b3JlcyM0NQotbmFpY3MjNDUxMSNTcG9ydGluZyBHb29kcywgSG9iYnksIGFuZCBNdXNpY2FsIEluc3RydW1lbnQgU3RvcmVzIzQ1MQotbmFpY3MjNDUxMTEjU3BvcnRpbmcgR29vZHMgU3RvcmVzIzQ1MTEKLW5haWNzIzQ1MTEyI0hvYmJ5LCBUb3ksIGFuZCBHYW1lIFN0b3JlcyM0NTExCi1uYWljcyM0NTExMyNTZXdpbmcsIE5lZWRsZXdvcmssIGFuZCBQaWVjZSBHb29kcyBTdG9yZXMjNDUxMQotbmFpY3MjNDUxMTQjTXVzaWNhbCBJbnN0cnVtZW50IGFuZCBTdXBwbGllcyBTdG9yZXMjNDUxMQotbmFpY3MjNDUxMiNCb29rLCBQZXJpb2RpY2FsLCBhbmQgTXVzaWMgU3RvcmVzIzQ1MQotbmFpY3MjNDUxMjEjQm9vayBTdG9yZXMgYW5kIE5ld3MgRGVhbGVycyM0NTEyCi1uYWljcyM0NTEyMTEjQm9vayBTdG9yZXMjNDUxMjEKLW5haWNzIzQ1MTIxMiNOZXdzIERlYWxlcnMgYW5kIE5ld3NzdGFuZHMjNDUxMjEKLW5haWNzIzQ1MTIyI1ByZXJlY29yZGVkIFRhcGUsIENvbXBhY3QgRGlzYywgYW5kIFJlY29yZCBTdG9yZXMjNDUxMgotbmFpY3MjNDUyI0dlbmVyYWwgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1Ci1uYWljcyM0NTIxI0RlcGFydG1lbnQgU3RvcmVzIzQ1MgotbmFpY3MjNDUyMTEjRGVwYXJ0bWVudCBTdG9yZXMjNDUyMQotbmFpY3MjNDUyOSNPdGhlciBHZW5lcmFsIE1lcmNoYW5kaXNlIFN0b3JlcyM0NTIKLW5haWNzIzQ1MjkxI1dhcmVob3VzZSBDbHVicyBhbmQgU3VwZXJzdG9yZXMjNDUyOQotbmFpY3MjNDUyOTkjQWxsIE90aGVyIEdlbmVyYWwgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1MjkKLW5haWNzIzQ1MyNNaXNjZWxsYW5lb3VzIFN0b3JlIFJldGFpbGVycyM0NQotbmFpY3MjNDUzMSNGbG9yaXN0cyM0NTMKLW5haWNzIzQ1MzExI0Zsb3Jpc3RzIzQ1MzEKLW5haWNzIzQ1MzIjT2ZmaWNlIFN1cHBsaWVzLCBTdGF0aW9uZXJ5LCBhbmQgR2lmdCBTdG9yZXMjNDUzCi1uYWljcyM0NTMyMSNPZmZpY2UgU3VwcGxpZXMgYW5kIFN0YXRpb25lcnkgU3RvcmVzIzQ1MzIKLW5haWNzIzQ1MzIyI0dpZnQsIE5vdmVsdHksIGFuZCBTb3V2ZW5pciBTdG9yZXMjNDUzMgotbmFpY3MjNDUzMyNVc2VkIE1lcmNoYW5kaXNlIFN0b3JlcyM0NTMKLW5haWNzIzQ1MzMxI1VzZWQgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1MzMKLW5haWNzIzQ1MzkjT3RoZXIgTWlzY2VsbGFuZW91cyBTdG9yZSBSZXRhaWxlcnMjNDUzCi1uYWljcyM0NTM5MSNQZXQgYW5kIFBldCBTdXBwbGllcyBTdG9yZXMjNDUzOQotbmFpY3MjNDUzOTIjQXJ0IERlYWxlcnMjNDUzOQotbmFpY3MjNDUzOTMjTWFudWZhY3R1cmVkIChNb2JpbGUpIEhvbWUgRGVhbGVycyM0NTM5Ci1uYWljcyM0NTM5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBTdG9yZSBSZXRhaWxlcnMjNDUzOQotbmFpY3MjNDUzOTkxI1RvYmFjY28gU3RvcmVzIzQ1Mzk5Ci1uYWljcyM0NTM5OTgjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgU3RvcmUgUmV0YWlsZXJzIChleGNlcHQgVG9iYWNjbyBTdG9yZXMpIzQ1Mzk5Ci1uYWljcyM0NTQjTm9uc3RvcmUgUmV0YWlsZXJzIzQ1Ci1uYWljcyM0NTQxI0VsZWN0cm9uaWMgU2hvcHBpbmcgYW5kIE1haWwtT3JkZXIgSG91c2VzIzQ1NAotbmFpY3MjNDU0MTEjRWxlY3Ryb25pYyBTaG9wcGluZyBhbmQgTWFpbC1PcmRlciBIb3VzZXMjNDU0MQotbmFpY3MjNDU0MiNWZW5kaW5nIE1hY2hpbmUgT3BlcmF0b3JzIzQ1NAotbmFpY3MjNDU0MjEjVmVuZGluZyBNYWNoaW5lIE9wZXJhdG9ycyM0NTQyCi1uYWljcyM0NTQzI0RpcmVjdCBTZWxsaW5nIEVzdGFibGlzaG1lbnRzIzQ1NAotbmFpY3MjNDU0MzEjRnVlbCBEZWFsZXJzIzQ1NDMKLW5haWNzIzQ1NDMxMSNIZWF0aW5nIE9pbCBEZWFsZXJzIzQ1NDMxCi1uYWljcyM0NTQzMTIjTGlxdWVmaWVkIFBldHJvbGV1bSBHYXMgKEJvdHRsZWQgR2FzKSBEZWFsZXJzIzQ1NDMxCi1uYWljcyM0NTQzMTkjT3RoZXIgRnVlbCBEZWFsZXJzIzQ1NDMxCi1uYWljcyM0NTQzOSNPdGhlciBEaXJlY3QgU2VsbGluZyBFc3RhYmxpc2htZW50cyM0NTQzCi1uYWljcyM0OCNUcmFuc3BvcnRhdGlvbiBhbmQgV2FyZWhvdXNpbmcjNDgKLW5haWNzIzQ4MSNBaXIgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4MTEjU2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEKLW5haWNzIzQ4MTExI1NjaGVkdWxlZCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMQotbmFpY3MjNDgxMTExI1NjaGVkdWxlZCBQYXNzZW5nZXIgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTExCi1uYWljcyM0ODExMTIjU2NoZWR1bGVkIEZyZWlnaHQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTExCi1uYWljcyM0ODEyI05vbnNjaGVkdWxlZCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxCi1uYWljcyM0ODEyMSNOb25zY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTIKLW5haWNzIzQ4MTIxMSNOb25zY2hlZHVsZWQgQ2hhcnRlcmVkIFBhc3NlbmdlciBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMjEKLW5haWNzIzQ4MTIxMiNOb25zY2hlZHVsZWQgQ2hhcnRlcmVkIEZyZWlnaHQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTIxCi1uYWljcyM0ODEyMTkjT3RoZXIgTm9uc2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEyMQotbmFpY3MjNDgyI1JhaWwgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4MjEjUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODIKLW5haWNzIzQ4MjExI1JhaWwgVHJhbnNwb3J0YXRpb24jNDgyMQotbmFpY3MjNDgyMTExI0xpbmUtSGF1bCBSYWlscm9hZHMjNDgyMTEKLW5haWNzIzQ4MjExMiNTaG9ydCBMaW5lIFJhaWxyb2FkcyM0ODIxMQotbmFpY3MjNDgzI1dhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODMxI0RlZXAgU2VhLCBDb2FzdGFsLCBhbmQgR3JlYXQgTGFrZXMgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgzCi1uYWljcyM0ODMxMSNEZWVwIFNlYSwgQ29hc3RhbCwgYW5kIEdyZWF0IExha2VzIFdhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4MzEKLW5haWNzIzQ4MzExMSNEZWVwIFNlYSBGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIzQ4MzExCi1uYWljcyM0ODMxMTIjRGVlcCBTZWEgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4MzExCi1uYWljcyM0ODMxMTMjQ29hc3RhbCBhbmQgR3JlYXQgTGFrZXMgRnJlaWdodCBUcmFuc3BvcnRhdGlvbiM0ODMxMQotbmFpY3MjNDgzMTE0I0NvYXN0YWwgYW5kIEdyZWF0IExha2VzIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODMxMQotbmFpY3MjNDgzMiNJbmxhbmQgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgzCi1uYWljcyM0ODMyMSNJbmxhbmQgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgzMgotbmFpY3MjNDgzMjExI0lubGFuZCBXYXRlciBGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIzQ4MzIxCi1uYWljcyM0ODMyMTIjSW5sYW5kIFdhdGVyIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODMyMQotbmFpY3MjNDg0I1RydWNrIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODQxI0dlbmVyYWwgRnJlaWdodCBUcnVja2luZyM0ODQKLW5haWNzIzQ4NDExI0dlbmVyYWwgRnJlaWdodCBUcnVja2luZywgTG9jYWwjNDg0MQotbmFpY3MjNDg0MTIjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nLCBMb25nLURpc3RhbmNlIzQ4NDEKLW5haWNzIzQ4NDEyMSNHZW5lcmFsIEZyZWlnaHQgVHJ1Y2tpbmcsIExvbmctRGlzdGFuY2UsIFRydWNrbG9hZCM0ODQxMgotbmFpY3MjNDg0MTIyI0dlbmVyYWwgRnJlaWdodCBUcnVja2luZywgTG9uZy1EaXN0YW5jZSwgTGVzcyBUaGFuIFRydWNrbG9hZCM0ODQxMgotbmFpY3MjNDg0MiNTcGVjaWFsaXplZCBGcmVpZ2h0IFRydWNraW5nIzQ4NAotbmFpY3MjNDg0MjEjVXNlZCBIb3VzZWhvbGQgYW5kIE9mZmljZSBHb29kcyBNb3ZpbmcjNDg0MgotbmFpY3MjNDg0MjIjU3BlY2lhbGl6ZWQgRnJlaWdodCAoZXhjZXB0IFVzZWQgR29vZHMpIFRydWNraW5nLCBMb2NhbCM0ODQyCi1uYWljcyM0ODQyMyNTcGVjaWFsaXplZCBGcmVpZ2h0IChleGNlcHQgVXNlZCBHb29kcykgVHJ1Y2tpbmcsIExvbmctRGlzdGFuY2UjNDg0MgotbmFpY3MjNDg1I1RyYW5zaXQgYW5kIEdyb3VuZCBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4NTEjVXJiYW4gVHJhbnNpdCBTeXN0ZW1zIzQ4NQotbmFpY3MjNDg1MTEjVXJiYW4gVHJhbnNpdCBTeXN0ZW1zIzQ4NTEKLW5haWNzIzQ4NTExMSNNaXhlZCBNb2RlIFRyYW5zaXQgU3lzdGVtcyM0ODUxMQotbmFpY3MjNDg1MTEyI0NvbW11dGVyIFJhaWwgU3lzdGVtcyM0ODUxMQotbmFpY3MjNDg1MTEzI0J1cyBhbmQgT3RoZXIgTW90b3IgVmVoaWNsZSBUcmFuc2l0IFN5c3RlbXMjNDg1MTEKLW5haWNzIzQ4NTExOSNPdGhlciBVcmJhbiBUcmFuc2l0IFN5c3RlbXMjNDg1MTEKLW5haWNzIzQ4NTIjSW50ZXJ1cmJhbiBhbmQgUnVyYWwgQnVzIFRyYW5zcG9ydGF0aW9uIzQ4NQotbmFpY3MjNDg1MjEjSW50ZXJ1cmJhbiBhbmQgUnVyYWwgQnVzIFRyYW5zcG9ydGF0aW9uIzQ4NTIKLW5haWNzIzQ4NTMjVGF4aSBhbmQgTGltb3VzaW5lIFNlcnZpY2UjNDg1Ci1uYWljcyM0ODUzMSNUYXhpIFNlcnZpY2UjNDg1MwotbmFpY3MjNDg1MzIjTGltb3VzaW5lIFNlcnZpY2UjNDg1MwotbmFpY3MjNDg1NCNTY2hvb2wgYW5kIEVtcGxveWVlIEJ1cyBUcmFuc3BvcnRhdGlvbiM0ODUKLW5haWNzIzQ4NTQxI1NjaG9vbCBhbmQgRW1wbG95ZWUgQnVzIFRyYW5zcG9ydGF0aW9uIzQ4NTQKLW5haWNzIzQ4NTUjQ2hhcnRlciBCdXMgSW5kdXN0cnkjNDg1Ci1uYWljcyM0ODU1MSNDaGFydGVyIEJ1cyBJbmR1c3RyeSM0ODU1Ci1uYWljcyM0ODU5I090aGVyIFRyYW5zaXQgYW5kIEdyb3VuZCBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDg1Ci1uYWljcyM0ODU5OSNPdGhlciBUcmFuc2l0IGFuZCBHcm91bmQgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4NTkKLW5haWNzIzQ4NTk5MSNTcGVjaWFsIE5lZWRzIFRyYW5zcG9ydGF0aW9uIzQ4NTk5Ci1uYWljcyM0ODU5OTkjQWxsIE90aGVyIFRyYW5zaXQgYW5kIEdyb3VuZCBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDg1OTkKLW5haWNzIzQ4NiNQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg2MSNQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiBvZiBDcnVkZSBPaWwjNDg2Ci1uYWljcyM0ODYxMSNQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiBvZiBDcnVkZSBPaWwjNDg2MQotbmFpY3MjNDg2MiNQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiBvZiBOYXR1cmFsIEdhcyM0ODYKLW5haWNzIzQ4NjIxI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIE5hdHVyYWwgR2FzIzQ4NjIKLW5haWNzIzQ4NjkjT3RoZXIgUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24jNDg2Ci1uYWljcyM0ODY5MSNQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiBvZiBSZWZpbmVkIFBldHJvbGV1bSBQcm9kdWN0cyM0ODY5Ci1uYWljcyM0ODY5OSNBbGwgT3RoZXIgUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24jNDg2OQotbmFpY3MjNDg3I1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4NzEjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgTGFuZCM0ODcKLW5haWNzIzQ4NzExI1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIExhbmQjNDg3MQotbmFpY3MjNDg3MiNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBXYXRlciM0ODcKLW5haWNzIzQ4NzIxI1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIFdhdGVyIzQ4NzIKLW5haWNzIzQ4NzkjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgT3RoZXIjNDg3Ci1uYWljcyM0ODc5OSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBPdGhlciM0ODc5Ci1uYWljcyM0ODgjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg4MSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFpciBUcmFuc3BvcnRhdGlvbiM0ODgKLW5haWNzIzQ4ODExI0FpcnBvcnQgT3BlcmF0aW9ucyM0ODgxCi1uYWljcyM0ODgxMTEjQWlyIFRyYWZmaWMgQ29udHJvbCM0ODgxMQotbmFpY3MjNDg4MTE5I090aGVyIEFpcnBvcnQgT3BlcmF0aW9ucyM0ODgxMQotbmFpY3MjNDg4MTkjT3RoZXIgU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBBaXIgVHJhbnNwb3J0YXRpb24jNDg4MQotbmFpY3MjNDg4MiNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFJhaWwgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODgyMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFJhaWwgVHJhbnNwb3J0YXRpb24jNDg4MgotbmFpY3MjNDg4MyNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFdhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4OAotbmFpY3MjNDg4MzEjUG9ydCBhbmQgSGFyYm9yIE9wZXJhdGlvbnMjNDg4MwotbmFpY3MjNDg4MzIjTWFyaW5lIENhcmdvIEhhbmRsaW5nIzQ4ODMKLW5haWNzIzQ4ODMzI05hdmlnYXRpb25hbCBTZXJ2aWNlcyB0byBTaGlwcGluZyM0ODgzCi1uYWljcyM0ODgzOSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFdhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4ODMKLW5haWNzIzQ4ODQjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBSb2FkIFRyYW5zcG9ydGF0aW9uIzQ4OAotbmFpY3MjNDg4NDEjTW90b3IgVmVoaWNsZSBUb3dpbmcjNDg4NAotbmFpY3MjNDg4NDkjT3RoZXIgU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBSb2FkIFRyYW5zcG9ydGF0aW9uIzQ4ODQKLW5haWNzIzQ4ODUjRnJlaWdodCBUcmFuc3BvcnRhdGlvbiBBcnJhbmdlbWVudCM0ODgKLW5haWNzIzQ4ODUxI0ZyZWlnaHQgVHJhbnNwb3J0YXRpb24gQXJyYW5nZW1lbnQjNDg4NQotbmFpY3MjNDg4OSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFRyYW5zcG9ydGF0aW9uIzQ4OAotbmFpY3MjNDg4OTkjT3RoZXIgU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBUcmFuc3BvcnRhdGlvbiM0ODg5Ci1uYWljcyM0ODg5OTEjUGFja2luZyBhbmQgQ3JhdGluZyM0ODg5OQotbmFpY3MjNDg4OTk5I0FsbCBPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFRyYW5zcG9ydGF0aW9uIzQ4ODk5Ci1uYWljcyM0OSNUcmFuc3BvcnRhdGlvbiBhbmQgV2FyZWhvdXNpbmcjNDkKLW5haWNzIzQ5MSNQb3N0YWwgU2VydmljZSM0OQotbmFpY3MjNDkxMSNQb3N0YWwgU2VydmljZSM0OTEKLW5haWNzIzQ5MTExI1Bvc3RhbCBTZXJ2aWNlIzQ5MTEKLW5haWNzIzQ5MiNDb3VyaWVycyBhbmQgTWVzc2VuZ2VycyM0OQotbmFpY3MjNDkyMSNDb3VyaWVycyM0OTIKLW5haWNzIzQ5MjExI0NvdXJpZXJzIzQ5MjEKLW5haWNzIzQ5MjIjTG9jYWwgTWVzc2VuZ2VycyBhbmQgTG9jYWwgRGVsaXZlcnkjNDkyCi1uYWljcyM0OTIyMSNMb2NhbCBNZXNzZW5nZXJzIGFuZCBMb2NhbCBEZWxpdmVyeSM0OTIyCi1uYWljcyM0OTMjV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkKLW5haWNzIzQ5MzEjV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkzCi1uYWljcyM0OTMxMSNHZW5lcmFsIFdhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5MzEKLW5haWNzIzQ5MzEyI1JlZnJpZ2VyYXRlZCBXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMxCi1uYWljcyM0OTMxMyNGYXJtIFByb2R1Y3QgV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkzMQotbmFpY3MjNDkzMTkjT3RoZXIgV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkzMQotbmFpY3MjNTEjSW5mb3JtYXRpb24jNTEKLW5haWNzIzUxMSNQdWJsaXNoaW5nIEluZHVzdHJpZXMjNTEKLW5haWNzIzUxMTEjTmV3c3BhcGVyLCBQZXJpb2RpY2FsLCBCb29rLCBhbmQgRGF0YWJhc2UgUHVibGlzaGVycyM1MTEKLW5haWNzIzUxMTExI05ld3NwYXBlciBQdWJsaXNoZXJzIzUxMTEKLW5haWNzIzUxMTEyI1BlcmlvZGljYWwgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExMyNCb29rIFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTQjRGF0YWJhc2UgYW5kIERpcmVjdG9yeSBQdWJsaXNoZXJzIzUxMTEKLW5haWNzIzUxMTE5I090aGVyIFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTkxI0dyZWV0aW5nIENhcmQgUHVibGlzaGVycyM1MTExOQotbmFpY3MjNTExMTk5I0FsbCBPdGhlciBQdWJsaXNoZXJzIzUxMTE5Ci1uYWljcyM1MTEyI1NvZnR3YXJlIFB1Ymxpc2hlcnMjNTExCi1uYWljcyM1MTEyMSNTb2Z0d2FyZSBQdWJsaXNoZXJzIzUxMTIKLW5haWNzIzUxMiNNb3Rpb24gUGljdHVyZSBhbmQgU291bmQgUmVjb3JkaW5nIEluZHVzdHJpZXMjNTEKLW5haWNzIzUxMjEjTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIEluZHVzdHJpZXMjNTEyCi1uYWljcyM1MTIxMSNNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gUHJvZHVjdGlvbiM1MTIxCi1uYWljcyM1MTIxMiNNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gRGlzdHJpYnV0aW9uIzUxMjEKLW5haWNzIzUxMjEzI01vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBFeGhpYml0aW9uIzUxMjEKLW5haWNzIzUxMjEzMSNNb3Rpb24gUGljdHVyZSBUaGVhdGVycyAoZXhjZXB0IERyaXZlLUlucykjNTEyMTMKLW5haWNzIzUxMjEzMiNEcml2ZS1JbiBNb3Rpb24gUGljdHVyZSBUaGVhdGVycyM1MTIxMwotbmFpY3MjNTEyMTkjUG9zdHByb2R1Y3Rpb24gU2VydmljZXMgYW5kIE90aGVyIE1vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBJbmR1c3RyaWVzIzUxMjEKLW5haWNzIzUxMjE5MSNUZWxlcHJvZHVjdGlvbiBhbmQgT3RoZXIgUG9zdHByb2R1Y3Rpb24gU2VydmljZXMjNTEyMTkKLW5haWNzIzUxMjE5OSNPdGhlciBNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gSW5kdXN0cmllcyM1MTIxOQotbmFpY3MjNTEyMiNTb3VuZCBSZWNvcmRpbmcgSW5kdXN0cmllcyM1MTIKLW5haWNzIzUxMjIxI1JlY29yZCBQcm9kdWN0aW9uIzUxMjIKLW5haWNzIzUxMjIyI0ludGVncmF0ZWQgUmVjb3JkIFByb2R1Y3Rpb24vRGlzdHJpYnV0aW9uIzUxMjIKLW5haWNzIzUxMjIzI011c2ljIFB1Ymxpc2hlcnMjNTEyMgotbmFpY3MjNTEyMjQjU291bmQgUmVjb3JkaW5nIFN0dWRpb3MjNTEyMgotbmFpY3MjNTEyMjkjT3RoZXIgU291bmQgUmVjb3JkaW5nIEluZHVzdHJpZXMjNTEyMgotbmFpY3MjNTEzI0Jyb2FkY2FzdGluZyBhbmQgVGVsZWNvbW11bmljYXRpb25zIzUxCi1uYWljcyM1MTMxI1JhZGlvIGFuZCBUZWxldmlzaW9uIEJyb2FkY2FzdGluZyM1MTMKLW5haWNzIzUxMzExI1JhZGlvIEJyb2FkY2FzdGluZyM1MTMxCi1uYWljcyM1MTMxMTEjUmFkaW8gTmV0d29ya3MjNTEzMTEKLW5haWNzIzUxMzExMiNSYWRpbyBTdGF0aW9ucyM1MTMxMQotbmFpY3MjNTEzMTIjVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmcjNTEzMQotbmFpY3MjNTEzMiNDYWJsZSBOZXR3b3JrcyBhbmQgUHJvZ3JhbSBEaXN0cmlidXRpb24jNTEzCi1uYWljcyM1MTMyMSNDYWJsZSBOZXR3b3JrcyM1MTMyCi1uYWljcyM1MTMyMiNDYWJsZSBhbmQgT3RoZXIgUHJvZ3JhbSBEaXN0cmlidXRpb24jNTEzMgotbmFpY3MjNTEzMyNUZWxlY29tbXVuaWNhdGlvbnMjNTEzCi1uYWljcyM1MTMzMSNXaXJlZCBUZWxlY29tbXVuaWNhdGlvbnMgQ2FycmllcnMjNTEzMwotbmFpY3MjNTEzMzIjV2lyZWxlc3MgVGVsZWNvbW11bmljYXRpb25zIENhcnJpZXJzIChleGNlcHQgU2F0ZWxsaXRlKSM1MTMzCi1uYWljcyM1MTMzMjEjUGFnaW5nIzUxMzMyCi1uYWljcyM1MTMzMjIjQ2VsbHVsYXIgYW5kIE90aGVyIFdpcmVsZXNzIFRlbGVjb21tdW5pY2F0aW9ucyM1MTMzMgotbmFpY3MjNTEzMzMjVGVsZWNvbW11bmljYXRpb25zIFJlc2VsbGVycyM1MTMzCi1uYWljcyM1MTMzNCNTYXRlbGxpdGUgVGVsZWNvbW11bmljYXRpb25zIzUxMzMKLW5haWNzIzUxMzM5I090aGVyIFRlbGVjb21tdW5pY2F0aW9ucyM1MTMzCi1uYWljcyM1MTQjSW5mb3JtYXRpb24gU2VydmljZXMgYW5kIERhdGEgUHJvY2Vzc2luZyBTZXJ2aWNlcyM1MQotbmFpY3MjNTE0MSNJbmZvcm1hdGlvbiBTZXJ2aWNlcyM1MTQKLW5haWNzIzUxNDExI05ld3MgU3luZGljYXRlcyM1MTQxCi1uYWljcyM1MTQxMiNMaWJyYXJpZXMgYW5kIEFyY2hpdmVzIzUxNDEKLW5haWNzIzUxNDE5I090aGVyIEluZm9ybWF0aW9uIFNlcnZpY2VzIzUxNDEKLW5haWNzIzUxNDE5MSNPbi1MaW5lIEluZm9ybWF0aW9uIFNlcnZpY2VzIzUxNDE5Ci1uYWljcyM1MTQxOTkjQWxsIE90aGVyIEluZm9ybWF0aW9uIFNlcnZpY2VzIzUxNDE5Ci1uYWljcyM1MTQyI0RhdGEgUHJvY2Vzc2luZyBTZXJ2aWNlcyM1MTQKLW5haWNzIzUxNDIxI0RhdGEgUHJvY2Vzc2luZyBTZXJ2aWNlcyM1MTQyCi1uYWljcyM1MiNGaW5hbmNlIGFuZCBJbnN1cmFuY2UjNTIKLW5haWNzIzUyMSNNb25ldGFyeSBBdXRob3JpdGllcyAtIENlbnRyYWwgQmFuayM1MgotbmFpY3MjNTIxMSNNb25ldGFyeSBBdXRob3JpdGllcyAtIENlbnRyYWwgQmFuayM1MjEKLW5haWNzIzUyMTExI01vbmV0YXJ5IEF1dGhvcml0aWVzIC0gQ2VudHJhbCBCYW5rIzUyMTEKLW5haWNzIzUyMiNDcmVkaXQgSW50ZXJtZWRpYXRpb24gYW5kIFJlbGF0ZWQgQWN0aXZpdGllcyM1MgotbmFpY3MjNTIyMSNEZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIKLW5haWNzIzUyMjExI0NvbW1lcmNpYWwgQmFua2luZyM1MjIxCi1uYWljcyM1MjIxMiNTYXZpbmdzIEluc3RpdHV0aW9ucyM1MjIxCi1uYWljcyM1MjIxMyNDcmVkaXQgVW5pb25zIzUyMjEKLW5haWNzIzUyMjE5I090aGVyIERlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMjEKLW5haWNzIzUyMjIjTm9uZGVwb3NpdG9yeSBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyCi1uYWljcyM1MjIyMSNDcmVkaXQgQ2FyZCBJc3N1aW5nIzUyMjIKLW5haWNzIzUyMjIyI1NhbGVzIEZpbmFuY2luZyM1MjIyCi1uYWljcyM1MjIyOSNPdGhlciBOb25kZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIyCi1uYWljcyM1MjIyOTEjQ29uc3VtZXIgTGVuZGluZyM1MjIyOQotbmFpY3MjNTIyMjkyI1JlYWwgRXN0YXRlIENyZWRpdCM1MjIyOQotbmFpY3MjNTIyMjkzI0ludGVybmF0aW9uYWwgVHJhZGUgRmluYW5jaW5nIzUyMjI5Ci1uYWljcyM1MjIyOTQjU2Vjb25kYXJ5IE1hcmtldCBGaW5hbmNpbmcjNTIyMjkKLW5haWNzIzUyMjI5OCNBbGwgT3RoZXIgTm9uZGVwb3NpdG9yeSBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyMjkKLW5haWNzIzUyMjMjQWN0aXZpdGllcyBSZWxhdGVkIHRvIENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIKLW5haWNzIzUyMjMxI01vcnRnYWdlIGFuZCBOb25tb3J0Z2FnZSBMb2FuIEJyb2tlcnMjNTIyMwotbmFpY3MjNTIyMzIjRmluYW5jaWFsIFRyYW5zYWN0aW9ucyBQcm9jZXNzaW5nLCBSZXNlcnZlLCBhbmQgQ2xlYXJpbmdob3VzZSBBY3Rpdml0aWVzIzUyMjMKLW5haWNzIzUyMjM5I090aGVyIEFjdGl2aXRpZXMgUmVsYXRlZCB0byBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyMwotbmFpY3MjNTIzI1NlY3VyaXRpZXMsIENvbW1vZGl0eSBDb250cmFjdHMsIGFuZCBPdGhlciBGaW5hbmNpYWwgSW52ZXN0bWVudHMgYW5kIFJlbGF0ZWQgQWN0aXZpdGllcyM1MgotbmFpY3MjNTIzMSNTZWN1cml0aWVzIGFuZCBDb21tb2RpdHkgQ29udHJhY3RzIEludGVybWVkaWF0aW9uIGFuZCBCcm9rZXJhZ2UjNTIzCi1uYWljcyM1MjMxMSNJbnZlc3RtZW50IEJhbmtpbmcgYW5kIFNlY3VyaXRpZXMgRGVhbGluZyM1MjMxCi1uYWljcyM1MjMxMiNTZWN1cml0aWVzIEJyb2tlcmFnZSM1MjMxCi1uYWljcyM1MjMxMyNDb21tb2RpdHkgQ29udHJhY3RzIERlYWxpbmcjNTIzMQotbmFpY3MjNTIzMTQjQ29tbW9kaXR5IENvbnRyYWN0cyBCcm9rZXJhZ2UjNTIzMQotbmFpY3MjNTIzMiNTZWN1cml0aWVzIGFuZCBDb21tb2RpdHkgRXhjaGFuZ2VzIzUyMwotbmFpY3MjNTIzMjEjU2VjdXJpdGllcyBhbmQgQ29tbW9kaXR5IEV4Y2hhbmdlcyM1MjMyCi1uYWljcyM1MjM5I090aGVyIEZpbmFuY2lhbCBJbnZlc3RtZW50IEFjdGl2aXRpZXMjNTIzCi1uYWljcyM1MjM5MSNNaXNjZWxsYW5lb3VzIEludGVybWVkaWF0aW9uIzUyMzkKLW5haWNzIzUyMzkyI1BvcnRmb2xpbyBNYW5hZ2VtZW50IzUyMzkKLW5haWNzIzUyMzkzI0ludmVzdG1lbnQgQWR2aWNlIzUyMzkKLW5haWNzIzUyMzk5I0FsbCBPdGhlciBGaW5hbmNpYWwgSW52ZXN0bWVudCBBY3Rpdml0aWVzIzUyMzkKLW5haWNzIzUyMzk5MSNUcnVzdCwgRmlkdWNpYXJ5LCBhbmQgQ3VzdG9keSBBY3Rpdml0aWVzIzUyMzk5Ci1uYWljcyM1MjM5OTkjTWlzY2VsbGFuZW91cyBGaW5hbmNpYWwgSW52ZXN0bWVudCBBY3Rpdml0aWVzIzUyMzk5Ci1uYWljcyM1MjQjSW5zdXJhbmNlIENhcnJpZXJzIGFuZCBSZWxhdGVkIEFjdGl2aXRpZXMjNTIKLW5haWNzIzUyNDEjSW5zdXJhbmNlIENhcnJpZXJzIzUyNAotbmFpY3MjNTI0MTEjRGlyZWN0IExpZmUsIEhlYWx0aCwgYW5kIE1lZGljYWwgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDEKLW5haWNzIzUyNDExMyNEaXJlY3QgTGlmZSBJbnN1cmFuY2UgQ2FycmllcnMjNTI0MTEKLW5haWNzIzUyNDExNCNEaXJlY3QgSGVhbHRoIGFuZCBNZWRpY2FsIEluc3VyYW5jZSBDYXJyaWVycyM1MjQxMQotbmFpY3MjNTI0MTIjRGlyZWN0IEluc3VyYW5jZSAoZXhjZXB0IExpZmUsIEhlYWx0aCwgYW5kIE1lZGljYWwpIENhcnJpZXJzIzUyNDEKLW5haWNzIzUyNDEyNiNEaXJlY3QgUHJvcGVydHkgYW5kIENhc3VhbHR5IEluc3VyYW5jZSBDYXJyaWVycyM1MjQxMgotbmFpY3MjNTI0MTI3I0RpcmVjdCBUaXRsZSBJbnN1cmFuY2UgQ2FycmllcnMjNTI0MTIKLW5haWNzIzUyNDEyOCNPdGhlciBEaXJlY3QgSW5zdXJhbmNlIChleGNlcHQgTGlmZSwgSGVhbHRoLCBhbmQgTWVkaWNhbCkgQ2FycmllcnMjNTI0MTIKLW5haWNzIzUyNDEzI1JlaW5zdXJhbmNlIENhcnJpZXJzIzUyNDEKLW5haWNzIzUyNDIjQWdlbmNpZXMsIEJyb2tlcmFnZXMsIGFuZCBPdGhlciBJbnN1cmFuY2UgUmVsYXRlZCBBY3Rpdml0aWVzIzUyNAotbmFpY3MjNTI0MjEjSW5zdXJhbmNlIEFnZW5jaWVzIGFuZCBCcm9rZXJhZ2VzIzUyNDIKLW5haWNzIzUyNDI5I090aGVyIEluc3VyYW5jZSBSZWxhdGVkIEFjdGl2aXRpZXMjNTI0MgotbmFpY3MjNTI0MjkxI0NsYWltcyBBZGp1c3RpbmcjNTI0MjkKLW5haWNzIzUyNDI5MiNUaGlyZCBQYXJ0eSBBZG1pbmlzdHJhdGlvbiBvZiBJbnN1cmFuY2UgYW5kIFBlbnNpb24gRnVuZHMjNTI0MjkKLW5haWNzIzUyNDI5OCNBbGwgT3RoZXIgSW5zdXJhbmNlIFJlbGF0ZWQgQWN0aXZpdGllcyM1MjQyOQotbmFpY3MjNTI1I0Z1bmRzLCBUcnVzdHMsIGFuZCBPdGhlciBGaW5hbmNpYWwgVmVoaWNsZXMjNTIKLW5haWNzIzUyNTEjSW5zdXJhbmNlIGFuZCBFbXBsb3llZSBCZW5lZml0IEZ1bmRzIzUyNQotbmFpY3MjNTI1MTEjUGVuc2lvbiBGdW5kcyM1MjUxCi1uYWljcyM1MjUxMiNIZWFsdGggYW5kIFdlbGZhcmUgRnVuZHMjNTI1MQotbmFpY3MjNTI1MTkjT3RoZXIgSW5zdXJhbmNlIEZ1bmRzIzUyNTEKLW5haWNzIzUyNTkjT3RoZXIgSW52ZXN0bWVudCBQb29scyBhbmQgRnVuZHMjNTI1Ci1uYWljcyM1MjU5MSNPcGVuLUVuZCBJbnZlc3RtZW50IEZ1bmRzIzUyNTkKLW5haWNzIzUyNTkyI1RydXN0cywgRXN0YXRlcywgYW5kIEFnZW5jeSBBY2NvdW50cyM1MjU5Ci1uYWljcyM1MjU5MyNSZWFsIEVzdGF0ZSBJbnZlc3RtZW50IFRydXN0cyM1MjU5Ci1uYWljcyM1MjU5OSNPdGhlciBGaW5hbmNpYWwgVmVoaWNsZXMjNTI1OQotbmFpY3MjNTMjUmVhbCBFc3RhdGUgYW5kIFJlbnRhbCBhbmQgTGVhc2luZyM1MwotbmFpY3MjNTMxI1JlYWwgRXN0YXRlIzUzCi1uYWljcyM1MzExI0xlc3NvcnMgb2YgUmVhbCBFc3RhdGUjNTMxCi1uYWljcyM1MzExMSNMZXNzb3JzIG9mIFJlc2lkZW50aWFsIEJ1aWxkaW5ncyBhbmQgRHdlbGxpbmdzIzUzMTEKLW5haWNzIzUzMTEyI0xlc3NvcnMgb2YgTm9ucmVzaWRlbnRpYWwgQnVpbGRpbmdzIChleGNlcHQgTWluaXdhcmVob3VzZXMpIzUzMTEKLW5haWNzIzUzMTEzI0xlc3NvcnMgb2YgTWluaXdhcmVob3VzZXMgYW5kIFNlbGYtU3RvcmFnZSBVbml0cyM1MzExCi1uYWljcyM1MzExOSNMZXNzb3JzIG9mIE90aGVyIFJlYWwgRXN0YXRlIFByb3BlcnR5IzUzMTEKLW5haWNzIzUzMTIjT2ZmaWNlcyBvZiBSZWFsIEVzdGF0ZSBBZ2VudHMgYW5kIEJyb2tlcnMjNTMxCi1uYWljcyM1MzEyMSNPZmZpY2VzIG9mIFJlYWwgRXN0YXRlIEFnZW50cyBhbmQgQnJva2VycyM1MzEyCi1uYWljcyM1MzEzI0FjdGl2aXRpZXMgUmVsYXRlZCB0byBSZWFsIEVzdGF0ZSM1MzEKLW5haWNzIzUzMTMxI1JlYWwgRXN0YXRlIFByb3BlcnR5IE1hbmFnZXJzIzUzMTMKLW5haWNzIzUzMTMxMSNSZXNpZGVudGlhbCBQcm9wZXJ0eSBNYW5hZ2VycyM1MzEzMQotbmFpY3MjNTMxMzEyI05vbnJlc2lkZW50aWFsIFByb3BlcnR5IE1hbmFnZXJzIzUzMTMxCi1uYWljcyM1MzEzMiNPZmZpY2VzIG9mIFJlYWwgRXN0YXRlIEFwcHJhaXNlcnMjNTMxMwotbmFpY3MjNTMxMzkjT3RoZXIgQWN0aXZpdGllcyBSZWxhdGVkIHRvIFJlYWwgRXN0YXRlIzUzMTMKLW5haWNzIzUzMiNSZW50YWwgYW5kIExlYXNpbmcgU2VydmljZXMjNTMKLW5haWNzIzUzMjEjQXV0b21vdGl2ZSBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMgotbmFpY3MjNTMyMTEjUGFzc2VuZ2VyIENhciBSZW50YWwgYW5kIExlYXNpbmcjNTMyMQotbmFpY3MjNTMyMTExI1Bhc3NlbmdlciBDYXIgUmVudGFsIzUzMjExCi1uYWljcyM1MzIxMTIjUGFzc2VuZ2VyIENhciBMZWFzaW5nIzUzMjExCi1uYWljcyM1MzIxMiNUcnVjaywgVXRpbGl0eSBUcmFpbGVyLCBhbmQgUlYgKFJlY3JlYXRpb25hbCBWZWhpY2xlKSBSZW50YWwgYW5kIExlYXNpbmcjNTMyMQotbmFpY3MjNTMyMiNDb25zdW1lciBHb29kcyBSZW50YWwjNTMyCi1uYWljcyM1MzIyMSNDb25zdW1lciBFbGVjdHJvbmljcyBhbmQgQXBwbGlhbmNlcyBSZW50YWwjNTMyMgotbmFpY3MjNTMyMjIjRm9ybWFsIFdlYXIgYW5kIENvc3R1bWUgUmVudGFsIzUzMjIKLW5haWNzIzUzMjIzI1ZpZGVvIFRhcGUgYW5kIERpc2MgUmVudGFsIzUzMjIKLW5haWNzIzUzMjI5I090aGVyIENvbnN1bWVyIEdvb2RzIFJlbnRhbCM1MzIyCi1uYWljcyM1MzIyOTEjSG9tZSBIZWFsdGggRXF1aXBtZW50IFJlbnRhbCM1MzIyOQotbmFpY3MjNTMyMjkyI1JlY3JlYXRpb25hbCBHb29kcyBSZW50YWwjNTMyMjkKLW5haWNzIzUzMjI5OSNBbGwgT3RoZXIgQ29uc3VtZXIgR29vZHMgUmVudGFsIzUzMjI5Ci1uYWljcyM1MzIzI0dlbmVyYWwgUmVudGFsIENlbnRlcnMjNTMyCi1uYWljcyM1MzIzMSNHZW5lcmFsIFJlbnRhbCBDZW50ZXJzIzUzMjMKLW5haWNzIzUzMjQjQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyCi1uYWljcyM1MzI0MSNDb25zdHJ1Y3Rpb24sIFRyYW5zcG9ydGF0aW9uLCBNaW5pbmcsIGFuZCBGb3Jlc3RyeSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNAotbmFpY3MjNTMyNDExI0NvbW1lcmNpYWwgQWlyLCBSYWlsLCBhbmQgV2F0ZXIgVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzI0MQotbmFpY3MjNTMyNDEyI0NvbnN0cnVjdGlvbiwgTWluaW5nLCBhbmQgRm9yZXN0cnkgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjQxCi1uYWljcyM1MzI0MiNPZmZpY2UgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjQKLW5haWNzIzUzMjQ5I090aGVyIENvbW1lcmNpYWwgYW5kIEluZHVzdHJpYWwgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjQKLW5haWNzIzUzMyNMZXNzb3JzIG9mIE5vbmZpbmFuY2lhbCBJbnRhbmdpYmxlIEFzc2V0cyAoZXhjZXB0IENvcHlyaWdodGVkIFdvcmtzKSM1MwotbmFpY3MjNTMzMSNMZXNzb3JzIG9mIE5vbmZpbmFuY2lhbCBJbnRhbmdpYmxlIEFzc2V0cyAoZXhjZXB0IENvcHlyaWdodGVkIFdvcmtzKSM1MzMKLW5haWNzIzUzMzExI0xlc3NvcnMgb2YgTm9uZmluYW5jaWFsIEludGFuZ2libGUgQXNzZXRzIChleGNlcHQgQ29weXJpZ2h0ZWQgV29ya3MpIzUzMzEKLW5haWNzIzU0I1Byb2Zlc3Npb25hbCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBTZXJ2aWNlcyM1NAotbmFpY3MjNTQxI1Byb2Zlc3Npb25hbCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBTZXJ2aWNlcyM1NAotbmFpY3MjNTQxMSNMZWdhbCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTExI09mZmljZXMgb2YgTGF3eWVycyM1NDExCi1uYWljcyM1NDExMiNPZmZpY2VzIG9mIE5vdGFyaWVzIzU0MTEKLW5haWNzIzU0MTE5I090aGVyIExlZ2FsIFNlcnZpY2VzIzU0MTEKLW5haWNzIzU0MTE5MSNUaXRsZSBBYnN0cmFjdCBhbmQgU2V0dGxlbWVudCBPZmZpY2VzIzU0MTE5Ci1uYWljcyM1NDExOTkjQWxsIE90aGVyIExlZ2FsIFNlcnZpY2VzIzU0MTE5Ci1uYWljcyM1NDEyI0FjY291bnRpbmcsIFRheCBQcmVwYXJhdGlvbiwgQm9va2tlZXBpbmcsIGFuZCBQYXlyb2xsIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxMjEjQWNjb3VudGluZywgVGF4IFByZXBhcmF0aW9uLCBCb29ra2VlcGluZywgYW5kIFBheXJvbGwgU2VydmljZXMjNTQxMgotbmFpY3MjNTQxMjExI09mZmljZXMgb2YgQ2VydGlmaWVkIFB1YmxpYyBBY2NvdW50YW50cyM1NDEyMQotbmFpY3MjNTQxMjEzI1RheCBQcmVwYXJhdGlvbiBTZXJ2aWNlcyM1NDEyMQotbmFpY3MjNTQxMjE0I1BheXJvbGwgU2VydmljZXMjNTQxMjEKLW5haWNzIzU0MTIxOSNPdGhlciBBY2NvdW50aW5nIFNlcnZpY2VzIzU0MTIxCi1uYWljcyM1NDEzI0FyY2hpdGVjdHVyYWwsIEVuZ2luZWVyaW5nLCBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTMxI0FyY2hpdGVjdHVyYWwgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzIjTGFuZHNjYXBlIEFyY2hpdGVjdHVyYWwgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzMjRW5naW5lZXJpbmcgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzQjRHJhZnRpbmcgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzUjQnVpbGRpbmcgSW5zcGVjdGlvbiBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNiNHZW9waHlzaWNhbCBTdXJ2ZXlpbmcgYW5kIE1hcHBpbmcgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzcjU3VydmV5aW5nIGFuZCBNYXBwaW5nIChleGNlcHQgR2VvcGh5c2ljYWwpIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTM4I1Rlc3RpbmcgTGFib3JhdG9yaWVzIzU0MTMKLW5haWNzIzU0MTQjU3BlY2lhbGl6ZWQgRGVzaWduIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxNDEjSW50ZXJpb3IgRGVzaWduIFNlcnZpY2VzIzU0MTQKLW5haWNzIzU0MTQyI0luZHVzdHJpYWwgRGVzaWduIFNlcnZpY2VzIzU0MTQKLW5haWNzIzU0MTQzI0dyYXBoaWMgRGVzaWduIFNlcnZpY2VzIzU0MTQKLW5haWNzIzU0MTQ5I090aGVyIFNwZWNpYWxpemVkIERlc2lnbiBTZXJ2aWNlcyM1NDE0Ci1uYWljcyM1NDE1I0NvbXB1dGVyIFN5c3RlbXMgRGVzaWduIGFuZCBSZWxhdGVkIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxNTEjQ29tcHV0ZXIgU3lzdGVtcyBEZXNpZ24gYW5kIFJlbGF0ZWQgU2VydmljZXMjNTQxNQotbmFpY3MjNTQxNTExI0N1c3RvbSBDb21wdXRlciBQcm9ncmFtbWluZyBTZXJ2aWNlcyM1NDE1MQotbmFpY3MjNTQxNTEyI0NvbXB1dGVyIFN5c3RlbXMgRGVzaWduIFNlcnZpY2VzIzU0MTUxCi1uYWljcyM1NDE1MTMjQ29tcHV0ZXIgRmFjaWxpdGllcyBNYW5hZ2VtZW50IFNlcnZpY2VzIzU0MTUxCi1uYWljcyM1NDE1MTkjT3RoZXIgQ29tcHV0ZXIgUmVsYXRlZCBTZXJ2aWNlcyM1NDE1MQotbmFpY3MjNTQxNiNNYW5hZ2VtZW50LCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIENvbnN1bHRpbmcgU2VydmljZXMjNTQxCi1uYWljcyM1NDE2MSNNYW5hZ2VtZW50IENvbnN1bHRpbmcgU2VydmljZXMjNTQxNgotbmFpY3MjNTQxNjExI0FkbWluaXN0cmF0aXZlIE1hbmFnZW1lbnQgYW5kIEdlbmVyYWwgTWFuYWdlbWVudCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYxCi1uYWljcyM1NDE2MTIjSHVtYW4gUmVzb3VyY2VzIGFuZCBFeGVjdXRpdmUgU2VhcmNoIENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYxMyNNYXJrZXRpbmcgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2MQotbmFpY3MjNTQxNjE0I1Byb2Nlc3MsIFBoeXNpY2FsIERpc3RyaWJ1dGlvbiwgYW5kIExvZ2lzdGljcyBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYxCi1uYWljcyM1NDE2MTgjT3RoZXIgTWFuYWdlbWVudCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYxCi1uYWljcyM1NDE2MiNFbnZpcm9ubWVudGFsIENvbnN1bHRpbmcgU2VydmljZXMjNTQxNgotbmFpY3MjNTQxNjkjT3RoZXIgU2NpZW50aWZpYyBhbmQgVGVjaG5pY2FsIENvbnN1bHRpbmcgU2VydmljZXMjNTQxNgotbmFpY3MjNTQxNyNTY2llbnRpZmljIFJlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTcxI1Jlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCBpbiB0aGUgUGh5c2ljYWwsIEVuZ2luZWVyaW5nLCBhbmQgTGlmZSBTY2llbmNlcyM1NDE3Ci1uYWljcyM1NDE3MiNSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQgaW4gdGhlIFNvY2lhbCBTY2llbmNlcyBhbmQgSHVtYW5pdGllcyM1NDE3Ci1uYWljcyM1NDE4I0FkdmVydGlzaW5nIGFuZCBSZWxhdGVkIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxODEjQWR2ZXJ0aXNpbmcgQWdlbmNpZXMjNTQxOAotbmFpY3MjNTQxODIjUHVibGljIFJlbGF0aW9ucyBBZ2VuY2llcyM1NDE4Ci1uYWljcyM1NDE4MyNNZWRpYSBCdXlpbmcgQWdlbmNpZXMjNTQxOAotbmFpY3MjNTQxODQjTWVkaWEgUmVwcmVzZW50YXRpdmVzIzU0MTgKLW5haWNzIzU0MTg1I0Rpc3BsYXkgQWR2ZXJ0aXNpbmcjNTQxOAotbmFpY3MjNTQxODYjRGlyZWN0IE1haWwgQWR2ZXJ0aXNpbmcjNTQxOAotbmFpY3MjNTQxODcjQWR2ZXJ0aXNpbmcgTWF0ZXJpYWwgRGlzdHJpYnV0aW9uIFNlcnZpY2VzIzU0MTgKLW5haWNzIzU0MTg5I090aGVyIFNlcnZpY2VzIFJlbGF0ZWQgdG8gQWR2ZXJ0aXNpbmcjNTQxOAotbmFpY3MjNTQxOSNPdGhlciBQcm9mZXNzaW9uYWwsIFNjaWVudGlmaWMsIGFuZCBUZWNobmljYWwgU2VydmljZXMjNTQxCi1uYWljcyM1NDE5MSNNYXJrZXRpbmcgUmVzZWFyY2ggYW5kIFB1YmxpYyBPcGluaW9uIFBvbGxpbmcjNTQxOQotbmFpY3MjNTQxOTIjUGhvdG9ncmFwaGljIFNlcnZpY2VzIzU0MTkKLW5haWNzIzU0MTkyMSNQaG90b2dyYXBoeSBTdHVkaW9zLCBQb3J0cmFpdCM1NDE5MgotbmFpY3MjNTQxOTIyI0NvbW1lcmNpYWwgUGhvdG9ncmFwaHkjNTQxOTIKLW5haWNzIzU0MTkzI1RyYW5zbGF0aW9uIGFuZCBJbnRlcnByZXRhdGlvbiBTZXJ2aWNlcyM1NDE5Ci1uYWljcyM1NDE5NCNWZXRlcmluYXJ5IFNlcnZpY2VzIzU0MTkKLW5haWNzIzU0MTk5I0FsbCBPdGhlciBQcm9mZXNzaW9uYWwsIFNjaWVudGlmaWMsIGFuZCBUZWNobmljYWwgU2VydmljZXMjNTQxOQotbmFpY3MjNTUjTWFuYWdlbWVudCBvZiBDb21wYW5pZXMgYW5kIEVudGVycHJpc2VzIzU1Ci1uYWljcyM1NTEjTWFuYWdlbWVudCBvZiBDb21wYW5pZXMgYW5kIEVudGVycHJpc2VzIzU1Ci1uYWljcyM1NTExI01hbmFnZW1lbnQgb2YgQ29tcGFuaWVzIGFuZCBFbnRlcnByaXNlcyM1NTEKLW5haWNzIzU1MTExI01hbmFnZW1lbnQgb2YgQ29tcGFuaWVzIGFuZCBFbnRlcnByaXNlcyM1NTExCi1uYWljcyM1NTExMTEjT2ZmaWNlcyBvZiBCYW5rIEhvbGRpbmcgQ29tcGFuaWVzIzU1MTExCi1uYWljcyM1NTExMTIjT2ZmaWNlcyBvZiBPdGhlciBIb2xkaW5nIENvbXBhbmllcyM1NTExMQotbmFpY3MjNTUxMTE0I0NvcnBvcmF0ZSwgU3Vic2lkaWFyeSwgYW5kIFJlZ2lvbmFsIE1hbmFnaW5nIE9mZmljZXMjNTUxMTEKLW5haWNzIzU2I0FkbWluaXN0cmF0aXZlIGFuZCBTdXBwb3J0IGFuZCBXYXN0ZSBNYW5hZ2VtZW50IGFuZCBSZW1lZGlhdGlvbiBTZXJ2aWNlcyM1NgotbmFpY3MjNTYxI0FkbWluaXN0cmF0aXZlIGFuZCBTdXBwb3J0IFNlcnZpY2VzIzU2Ci1uYWljcyM1NjExI09mZmljZSBBZG1pbmlzdHJhdGl2ZSBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTExI09mZmljZSBBZG1pbmlzdHJhdGl2ZSBTZXJ2aWNlcyM1NjExCi1uYWljcyM1NjEyI0ZhY2lsaXRpZXMgU3VwcG9ydCBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTIxI0ZhY2lsaXRpZXMgU3VwcG9ydCBTZXJ2aWNlcyM1NjEyCi1uYWljcyM1NjEzI0VtcGxveW1lbnQgU2VydmljZXMjNTYxCi1uYWljcyM1NjEzMSNFbXBsb3ltZW50IFBsYWNlbWVudCBBZ2VuY2llcyM1NjEzCi1uYWljcyM1NjEzMiNUZW1wb3JhcnkgSGVscCBTZXJ2aWNlcyM1NjEzCi1uYWljcyM1NjEzMyNFbXBsb3llZSBMZWFzaW5nIFNlcnZpY2VzIzU2MTMKLW5haWNzIzU2MTQjQnVzaW5lc3MgU3VwcG9ydCBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTQxI0RvY3VtZW50IFByZXBhcmF0aW9uIFNlcnZpY2VzIzU2MTQKLW5haWNzIzU2MTQyI1RlbGVwaG9uZSBDYWxsIENlbnRlcnMjNTYxNAotbmFpY3MjNTYxNDIxI1RlbGVwaG9uZSBBbnN3ZXJpbmcgU2VydmljZXMjNTYxNDIKLW5haWNzIzU2MTQyMiNUZWxlbWFya2V0aW5nIEJ1cmVhdXMjNTYxNDIKLW5haWNzIzU2MTQzI0J1c2luZXNzIFNlcnZpY2UgQ2VudGVycyM1NjE0Ci1uYWljcyM1NjE0MzEjUHJpdmF0ZSBNYWlsIENlbnRlcnMjNTYxNDMKLW5haWNzIzU2MTQzOSNPdGhlciBCdXNpbmVzcyBTZXJ2aWNlIENlbnRlcnMgKGluY2x1ZGluZyBDb3B5IFNob3BzKSM1NjE0MwotbmFpY3MjNTYxNDQjQ29sbGVjdGlvbiBBZ2VuY2llcyM1NjE0Ci1uYWljcyM1NjE0NSNDcmVkaXQgQnVyZWF1cyM1NjE0Ci1uYWljcyM1NjE0OSNPdGhlciBCdXNpbmVzcyBTdXBwb3J0IFNlcnZpY2VzIzU2MTQKLW5haWNzIzU2MTQ5MSNSZXBvc3Nlc3Npb24gU2VydmljZXMjNTYxNDkKLW5haWNzIzU2MTQ5MiNDb3VydCBSZXBvcnRpbmcgYW5kIFN0ZW5vdHlwZSBTZXJ2aWNlcyM1NjE0OQotbmFpY3MjNTYxNDk5I0FsbCBPdGhlciBCdXNpbmVzcyBTdXBwb3J0IFNlcnZpY2VzIzU2MTQ5Ci1uYWljcyM1NjE1I1RyYXZlbCBBcnJhbmdlbWVudCBhbmQgUmVzZXJ2YXRpb24gU2VydmljZXMjNTYxCi1uYWljcyM1NjE1MSNUcmF2ZWwgQWdlbmNpZXMjNTYxNQotbmFpY3MjNTYxNTIjVG91ciBPcGVyYXRvcnMjNTYxNQotbmFpY3MjNTYxNTkjT3RoZXIgVHJhdmVsIEFycmFuZ2VtZW50IGFuZCBSZXNlcnZhdGlvbiBTZXJ2aWNlcyM1NjE1Ci1uYWljcyM1NjE1OTEjQ29udmVudGlvbiBhbmQgVmlzaXRvcnMgQnVyZWF1cyM1NjE1OQotbmFpY3MjNTYxNTk5I0FsbCBPdGhlciBUcmF2ZWwgQXJyYW5nZW1lbnQgYW5kIFJlc2VydmF0aW9uIFNlcnZpY2VzIzU2MTU5Ci1uYWljcyM1NjE2I0ludmVzdGlnYXRpb24gYW5kIFNlY3VyaXR5IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxNjEjSW52ZXN0aWdhdGlvbiwgR3VhcmQsIGFuZCBBcm1vcmVkIENhciBTZXJ2aWNlcyM1NjE2Ci1uYWljcyM1NjE2MTEjSW52ZXN0aWdhdGlvbiBTZXJ2aWNlcyM1NjE2MQotbmFpY3MjNTYxNjEyI1NlY3VyaXR5IEd1YXJkcyBhbmQgUGF0cm9sIFNlcnZpY2VzIzU2MTYxCi1uYWljcyM1NjE2MTMjQXJtb3JlZCBDYXIgU2VydmljZXMjNTYxNjEKLW5haWNzIzU2MTYyI1NlY3VyaXR5IFN5c3RlbXMgU2VydmljZXMjNTYxNgotbmFpY3MjNTYxNjIxI1NlY3VyaXR5IFN5c3RlbXMgU2VydmljZXMgKGV4Y2VwdCBMb2Nrc21pdGhzKSM1NjE2MgotbmFpY3MjNTYxNjIyI0xvY2tzbWl0aHMjNTYxNjIKLW5haWNzIzU2MTcjU2VydmljZXMgdG8gQnVpbGRpbmdzIGFuZCBEd2VsbGluZ3MjNTYxCi1uYWljcyM1NjE3MSNFeHRlcm1pbmF0aW5nIGFuZCBQZXN0IENvbnRyb2wgU2VydmljZXMjNTYxNwotbmFpY3MjNTYxNzIjSmFuaXRvcmlhbCBTZXJ2aWNlcyM1NjE3Ci1uYWljcyM1NjE3MyNMYW5kc2NhcGluZyBTZXJ2aWNlcyM1NjE3Ci1uYWljcyM1NjE3NCNDYXJwZXQgYW5kIFVwaG9sc3RlcnkgQ2xlYW5pbmcgU2VydmljZXMjNTYxNwotbmFpY3MjNTYxNzkjT3RoZXIgU2VydmljZXMgdG8gQnVpbGRpbmdzIGFuZCBEd2VsbGluZ3MjNTYxNwotbmFpY3MjNTYxOSNPdGhlciBTdXBwb3J0IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxOTEjUGFja2FnaW5nIGFuZCBMYWJlbGluZyBTZXJ2aWNlcyM1NjE5Ci1uYWljcyM1NjE5MiNDb252ZW50aW9uIGFuZCBUcmFkZSBTaG93IE9yZ2FuaXplcnMjNTYxOQotbmFpY3MjNTYxOTkjQWxsIE90aGVyIFN1cHBvcnQgU2VydmljZXMjNTYxOQotbmFpY3MjNTYyI1dhc3RlIE1hbmFnZW1lbnQgYW5kIFJlbWVkaWF0aW9uIFNlcnZpY2VzIzU2Ci1uYWljcyM1NjIxI1dhc3RlIENvbGxlY3Rpb24jNTYyCi1uYWljcyM1NjIxMSNXYXN0ZSBDb2xsZWN0aW9uIzU2MjEKLW5haWNzIzU2MjExMSNTb2xpZCBXYXN0ZSBDb2xsZWN0aW9uIzU2MjExCi1uYWljcyM1NjIxMTIjSGF6YXJkb3VzIFdhc3RlIENvbGxlY3Rpb24jNTYyMTEKLW5haWNzIzU2MjExOSNPdGhlciBXYXN0ZSBDb2xsZWN0aW9uIzU2MjExCi1uYWljcyM1NjIyI1dhc3RlIFRyZWF0bWVudCBhbmQgRGlzcG9zYWwjNTYyCi1uYWljcyM1NjIyMSNXYXN0ZSBUcmVhdG1lbnQgYW5kIERpc3Bvc2FsIzU2MjIKLW5haWNzIzU2MjIxMSNIYXphcmRvdXMgV2FzdGUgVHJlYXRtZW50IGFuZCBEaXNwb3NhbCM1NjIyMQotbmFpY3MjNTYyMjEyI1NvbGlkIFdhc3RlIExhbmRmaWxsIzU2MjIxCi1uYWljcyM1NjIyMTMjU29saWQgV2FzdGUgQ29tYnVzdG9ycyBhbmQgSW5jaW5lcmF0b3JzIzU2MjIxCi1uYWljcyM1NjIyMTkjT3RoZXIgTm9uaGF6YXJkb3VzIFdhc3RlIFRyZWF0bWVudCBhbmQgRGlzcG9zYWwjNTYyMjEKLW5haWNzIzU2MjkjUmVtZWRpYXRpb24gYW5kIE90aGVyIFdhc3RlIE1hbmFnZW1lbnQgU2VydmljZXMjNTYyCi1uYWljcyM1NjI5MSNSZW1lZGlhdGlvbiBTZXJ2aWNlcyM1NjI5Ci1uYWljcyM1NjI5MiNNYXRlcmlhbHMgUmVjb3ZlcnkgRmFjaWxpdGllcyM1NjI5Ci1uYWljcyM1NjI5OSNBbGwgT3RoZXIgV2FzdGUgTWFuYWdlbWVudCBTZXJ2aWNlcyM1NjI5Ci1uYWljcyM1NjI5OTEjU2VwdGljIFRhbmsgYW5kIFJlbGF0ZWQgU2VydmljZXMjNTYyOTkKLW5haWNzIzU2Mjk5OCNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBXYXN0ZSBNYW5hZ2VtZW50IFNlcnZpY2VzIzU2Mjk5Ci1uYWljcyM2MSNFZHVjYXRpb25hbCBTZXJ2aWNlcyM2MQotbmFpY3MjNjExI0VkdWNhdGlvbmFsIFNlcnZpY2VzIzYxCi1uYWljcyM2MTExI0VsZW1lbnRhcnkgYW5kIFNlY29uZGFyeSBTY2hvb2xzIzYxMQotbmFpY3MjNjExMTEjRWxlbWVudGFyeSBhbmQgU2Vjb25kYXJ5IFNjaG9vbHMjNjExMQotbmFpY3MjNjExMiNKdW5pb3IgQ29sbGVnZXMjNjExCi1uYWljcyM2MTEyMSNKdW5pb3IgQ29sbGVnZXMjNjExMgotbmFpY3MjNjExMyNDb2xsZWdlcywgVW5pdmVyc2l0aWVzLCBhbmQgUHJvZmVzc2lvbmFsIFNjaG9vbHMjNjExCi1uYWljcyM2MTEzMSNDb2xsZWdlcywgVW5pdmVyc2l0aWVzLCBhbmQgUHJvZmVzc2lvbmFsIFNjaG9vbHMjNjExMwotbmFpY3MjNjExNCNCdXNpbmVzcyBTY2hvb2xzIGFuZCBDb21wdXRlciBhbmQgTWFuYWdlbWVudCBUcmFpbmluZyM2MTEKLW5haWNzIzYxMTQxI0J1c2luZXNzIGFuZCBTZWNyZXRhcmlhbCBTY2hvb2xzIzYxMTQKLW5haWNzIzYxMTQyI0NvbXB1dGVyIFRyYWluaW5nIzYxMTQKLW5haWNzIzYxMTQzI1Byb2Zlc3Npb25hbCBhbmQgTWFuYWdlbWVudCBEZXZlbG9wbWVudCBUcmFpbmluZyM2MTE0Ci1uYWljcyM2MTE1I1RlY2huaWNhbCBhbmQgVHJhZGUgU2Nob29scyM2MTEKLW5haWNzIzYxMTUxI1RlY2huaWNhbCBhbmQgVHJhZGUgU2Nob29scyM2MTE1Ci1uYWljcyM2MTE1MTEjQ29zbWV0b2xvZ3kgYW5kIEJhcmJlciBTY2hvb2xzIzYxMTUxCi1uYWljcyM2MTE1MTIjRmxpZ2h0IFRyYWluaW5nIzYxMTUxCi1uYWljcyM2MTE1MTMjQXBwcmVudGljZXNoaXAgVHJhaW5pbmcjNjExNTEKLW5haWNzIzYxMTUxOSNPdGhlciBUZWNobmljYWwgYW5kIFRyYWRlIFNjaG9vbHMjNjExNTEKLW5haWNzIzYxMTYjT3RoZXIgU2Nob29scyBhbmQgSW5zdHJ1Y3Rpb24jNjExCi1uYWljcyM2MTE2MSNGaW5lIEFydHMgU2Nob29scyM2MTE2Ci1uYWljcyM2MTE2MiNTcG9ydHMgYW5kIFJlY3JlYXRpb24gSW5zdHJ1Y3Rpb24jNjExNgotbmFpY3MjNjExNjMjTGFuZ3VhZ2UgU2Nob29scyM2MTE2Ci1uYWljcyM2MTE2OSNBbGwgT3RoZXIgU2Nob29scyBhbmQgSW5zdHJ1Y3Rpb24jNjExNgotbmFpY3MjNjExNjkxI0V4YW0gUHJlcGFyYXRpb24gYW5kIFR1dG9yaW5nIzYxMTY5Ci1uYWljcyM2MTE2OTIjQXV0b21vYmlsZSBEcml2aW5nIFNjaG9vbHMjNjExNjkKLW5haWNzIzYxMTY5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBTY2hvb2xzIGFuZCBJbnN0cnVjdGlvbiM2MTE2OQotbmFpY3MjNjExNyNFZHVjYXRpb25hbCBTdXBwb3J0IFNlcnZpY2VzIzYxMQotbmFpY3MjNjExNzEjRWR1Y2F0aW9uYWwgU3VwcG9ydCBTZXJ2aWNlcyM2MTE3Ci1uYWljcyM2MiNIZWFsdGggQ2FyZSBhbmQgU29jaWFsIEFzc2lzdGFuY2UjNjIKLW5haWNzIzYyMSNBbWJ1bGF0b3J5IEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyCi1uYWljcyM2MjExI09mZmljZXMgb2YgUGh5c2ljaWFucyM2MjEKLW5haWNzIzYyMTExI09mZmljZXMgb2YgUGh5c2ljaWFucyM2MjExCi1uYWljcyM2MjExMTEjT2ZmaWNlcyBvZiBQaHlzaWNpYW5zIChleGNlcHQgTWVudGFsIEhlYWx0aCBTcGVjaWFsaXN0cykjNjIxMTEKLW5haWNzIzYyMTExMiNPZmZpY2VzIG9mIFBoeXNpY2lhbnMsIE1lbnRhbCBIZWFsdGggU3BlY2lhbGlzdHMjNjIxMTEKLW5haWNzIzYyMTIjT2ZmaWNlcyBvZiBEZW50aXN0cyM2MjEKLW5haWNzIzYyMTIxI09mZmljZXMgb2YgRGVudGlzdHMjNjIxMgotbmFpY3MjNjIxMyNPZmZpY2VzIG9mIE90aGVyIEhlYWx0aCBQcmFjdGl0aW9uZXJzIzYyMQotbmFpY3MjNjIxMzEjT2ZmaWNlcyBvZiBDaGlyb3ByYWN0b3JzIzYyMTMKLW5haWNzIzYyMTMyI09mZmljZXMgb2YgT3B0b21ldHJpc3RzIzYyMTMKLW5haWNzIzYyMTMzI09mZmljZXMgb2YgTWVudGFsIEhlYWx0aCBQcmFjdGl0aW9uZXJzIChleGNlcHQgUGh5c2ljaWFucykjNjIxMwotbmFpY3MjNjIxMzQjT2ZmaWNlcyBvZiBQaHlzaWNhbCwgT2NjdXBhdGlvbmFsIGFuZCBTcGVlY2ggVGhlcmFwaXN0cywgYW5kIEF1ZGlvbG9naXN0cyM2MjEzCi1uYWljcyM2MjEzOSNPZmZpY2VzIG9mIEFsbCBPdGhlciBIZWFsdGggUHJhY3RpdGlvbmVycyM2MjEzCi1uYWljcyM2MjEzOTEjT2ZmaWNlcyBvZiBQb2RpYXRyaXN0cyM2MjEzOQotbmFpY3MjNjIxMzk5I09mZmljZXMgb2YgQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgSGVhbHRoIFByYWN0aXRpb25lcnMjNjIxMzkKLW5haWNzIzYyMTQjT3V0cGF0aWVudCBDYXJlIENlbnRlcnMjNjIxCi1uYWljcyM2MjE0MSNGYW1pbHkgUGxhbm5pbmcgQ2VudGVycyM2MjE0Ci1uYWljcyM2MjE0MiNPdXRwYXRpZW50IE1lbnRhbCBIZWFsdGggYW5kIFN1YnN0YW5jZSBBYnVzZSBDZW50ZXJzIzYyMTQKLW5haWNzIzYyMTQ5I090aGVyIE91dHBhdGllbnQgQ2FyZSBDZW50ZXJzIzYyMTQKLW5haWNzIzYyMTQ5MSNITU8gTWVkaWNhbCBDZW50ZXJzIzYyMTQ5Ci1uYWljcyM2MjE0OTIjS2lkbmV5IERpYWx5c2lzIENlbnRlcnMjNjIxNDkKLW5haWNzIzYyMTQ5MyNGcmVlc3RhbmRpbmcgQW1idWxhdG9yeSBTdXJnaWNhbCBhbmQgRW1lcmdlbmN5IENlbnRlcnMjNjIxNDkKLW5haWNzIzYyMTQ5OCNBbGwgT3RoZXIgT3V0cGF0aWVudCBDYXJlIENlbnRlcnMjNjIxNDkKLW5haWNzIzYyMTUjTWVkaWNhbCBhbmQgRGlhZ25vc3RpYyBMYWJvcmF0b3JpZXMjNjIxCi1uYWljcyM2MjE1MSNNZWRpY2FsIGFuZCBEaWFnbm9zdGljIExhYm9yYXRvcmllcyM2MjE1Ci1uYWljcyM2MjE1MTEjTWVkaWNhbCBMYWJvcmF0b3JpZXMjNjIxNTEKLW5haWNzIzYyMTUxMiNEaWFnbm9zdGljIEltYWdpbmcgQ2VudGVycyM2MjE1MQotbmFpY3MjNjIxNiNIb21lIEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyMQotbmFpY3MjNjIxNjEjSG9tZSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjE2Ci1uYWljcyM2MjE5I090aGVyIEFtYnVsYXRvcnkgSGVhbHRoIENhcmUgU2VydmljZXMjNjIxCi1uYWljcyM2MjE5MSNBbWJ1bGFuY2UgU2VydmljZXMjNjIxOQotbmFpY3MjNjIxOTkjQWxsIE90aGVyIEFtYnVsYXRvcnkgSGVhbHRoIENhcmUgU2VydmljZXMjNjIxOQotbmFpY3MjNjIxOTkxI0Jsb29kIGFuZCBPcmdhbiBCYW5rcyM2MjE5OQotbmFpY3MjNjIxOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEFtYnVsYXRvcnkgSGVhbHRoIENhcmUgU2VydmljZXMjNjIxOTkKLW5haWNzIzYyMiNIb3NwaXRhbHMjNjIKLW5haWNzIzYyMjEjR2VuZXJhbCBNZWRpY2FsIGFuZCBTdXJnaWNhbCBIb3NwaXRhbHMjNjIyCi1uYWljcyM2MjIxMSNHZW5lcmFsIE1lZGljYWwgYW5kIFN1cmdpY2FsIEhvc3BpdGFscyM2MjIxCi1uYWljcyM2MjIyI1BzeWNoaWF0cmljIGFuZCBTdWJzdGFuY2UgQWJ1c2UgSG9zcGl0YWxzIzYyMgotbmFpY3MjNjIyMjEjUHN5Y2hpYXRyaWMgYW5kIFN1YnN0YW5jZSBBYnVzZSBIb3NwaXRhbHMjNjIyMgotbmFpY3MjNjIyMyNTcGVjaWFsdHkgKGV4Y2VwdCBQc3ljaGlhdHJpYyBhbmQgU3Vic3RhbmNlIEFidXNlKSBIb3NwaXRhbHMjNjIyCi1uYWljcyM2MjIzMSNTcGVjaWFsdHkgKGV4Y2VwdCBQc3ljaGlhdHJpYyBhbmQgU3Vic3RhbmNlIEFidXNlKSBIb3NwaXRhbHMjNjIyMwotbmFpY3MjNjIzI051cnNpbmcgYW5kIFJlc2lkZW50aWFsIENhcmUgRmFjaWxpdGllcyM2MgotbmFpY3MjNjIzMSNOdXJzaW5nIENhcmUgRmFjaWxpdGllcyM2MjMKLW5haWNzIzYyMzExI051cnNpbmcgQ2FyZSBGYWNpbGl0aWVzIzYyMzEKLW5haWNzIzYyMzIjUmVzaWRlbnRpYWwgTWVudGFsIFJldGFyZGF0aW9uLCBNZW50YWwgSGVhbHRoIGFuZCBTdWJzdGFuY2UgQWJ1c2UgRmFjaWxpdGllcyM2MjMKLW5haWNzIzYyMzIxI1Jlc2lkZW50aWFsIE1lbnRhbCBSZXRhcmRhdGlvbiBGYWNpbGl0aWVzIzYyMzIKLW5haWNzIzYyMzIyI1Jlc2lkZW50aWFsIE1lbnRhbCBIZWFsdGggYW5kIFN1YnN0YW5jZSBBYnVzZSBGYWNpbGl0aWVzIzYyMzIKLW5haWNzIzYyMzMjQ29tbXVuaXR5IENhcmUgRmFjaWxpdGllcyBmb3IgdGhlIEVsZGVybHkjNjIzCi1uYWljcyM2MjMzMSNDb21tdW5pdHkgQ2FyZSBGYWNpbGl0aWVzIGZvciB0aGUgRWxkZXJseSM2MjMzCi1uYWljcyM2MjMzMTEjQ29udGludWluZyBDYXJlIFJldGlyZW1lbnQgQ29tbXVuaXRpZXMjNjIzMzEKLW5haWNzIzYyMzMxMiNIb21lcyBmb3IgdGhlIEVsZGVybHkjNjIzMzEKLW5haWNzIzYyMzkjT3RoZXIgUmVzaWRlbnRpYWwgQ2FyZSBGYWNpbGl0aWVzIzYyMwotbmFpY3MjNjIzOTkjT3RoZXIgUmVzaWRlbnRpYWwgQ2FyZSBGYWNpbGl0aWVzIzYyMzkKLW5haWNzIzYyNCNTb2NpYWwgQXNzaXN0YW5jZSM2MgotbmFpY3MjNjI0MSNJbmRpdmlkdWFsIGFuZCBGYW1pbHkgU2VydmljZXMjNjI0Ci1uYWljcyM2MjQxMSNDaGlsZCBhbmQgWW91dGggU2VydmljZXMjNjI0MQotbmFpY3MjNjI0MTIjU2VydmljZXMgZm9yIHRoZSBFbGRlcmx5IGFuZCBQZXJzb25zIHdpdGggRGlzYWJpbGl0aWVzIzYyNDEKLW5haWNzIzYyNDE5I090aGVyIEluZGl2aWR1YWwgYW5kIEZhbWlseSBTZXJ2aWNlcyM2MjQxCi1uYWljcyM2MjQyI0NvbW11bml0eSBGb29kIGFuZCBIb3VzaW5nLCBhbmQgRW1lcmdlbmN5IGFuZCBPdGhlciBSZWxpZWYgU2VydmljZXMjNjI0Ci1uYWljcyM2MjQyMSNDb21tdW5pdHkgRm9vZCBTZXJ2aWNlcyM2MjQyCi1uYWljcyM2MjQyMiNDb21tdW5pdHkgSG91c2luZyBTZXJ2aWNlcyM2MjQyCi1uYWljcyM2MjQyMjEjVGVtcG9yYXJ5IFNoZWx0ZXJzIzYyNDIyCi1uYWljcyM2MjQyMjkjT3RoZXIgQ29tbXVuaXR5IEhvdXNpbmcgU2VydmljZXMjNjI0MjIKLW5haWNzIzYyNDIzI0VtZXJnZW5jeSBhbmQgT3RoZXIgUmVsaWVmIFNlcnZpY2VzIzYyNDIKLW5haWNzIzYyNDMjVm9jYXRpb25hbCBSZWhhYmlsaXRhdGlvbiBTZXJ2aWNlcyM2MjQKLW5haWNzIzYyNDMxI1ZvY2F0aW9uYWwgUmVoYWJpbGl0YXRpb24gU2VydmljZXMjNjI0MwotbmFpY3MjNjI0NCNDaGlsZCBEYXkgQ2FyZSBTZXJ2aWNlcyM2MjQKLW5haWNzIzYyNDQxI0NoaWxkIERheSBDYXJlIFNlcnZpY2VzIzYyNDQKLW5haWNzIzcxI0FydHMsIEVudGVydGFpbm1lbnQsIGFuZCBSZWNyZWF0aW9uIzcxCi1uYWljcyM3MTEjUGVyZm9ybWluZyBBcnRzLCBTcGVjdGF0b3IgU3BvcnRzLCBhbmQgUmVsYXRlZCBJbmR1c3RyaWVzIzcxCi1uYWljcyM3MTExI1BlcmZvcm1pbmcgQXJ0cyBDb21wYW5pZXMjNzExCi1uYWljcyM3MTExMSNUaGVhdGVyIENvbXBhbmllcyBhbmQgRGlubmVyIFRoZWF0ZXJzIzcxMTEKLW5haWNzIzcxMTEyI0RhbmNlIENvbXBhbmllcyM3MTExCi1uYWljcyM3MTExMyNNdXNpY2FsIEdyb3VwcyBhbmQgQXJ0aXN0cyM3MTExCi1uYWljcyM3MTExOSNPdGhlciBQZXJmb3JtaW5nIEFydHMgQ29tcGFuaWVzIzcxMTEKLW5haWNzIzcxMTIjU3BlY3RhdG9yIFNwb3J0cyM3MTEKLW5haWNzIzcxMTIxI1NwZWN0YXRvciBTcG9ydHMjNzExMgotbmFpY3MjNzExMjExI1Nwb3J0cyBUZWFtcyBhbmQgQ2x1YnMjNzExMjEKLW5haWNzIzcxMTIxMiNSYWNldHJhY2tzIzcxMTIxCi1uYWljcyM3MTEyMTkjT3RoZXIgU3BlY3RhdG9yIFNwb3J0cyM3MTEyMQotbmFpY3MjNzExMyNQcm9tb3RlcnMgb2YgUGVyZm9ybWluZyBBcnRzLCBTcG9ydHMsIGFuZCBTaW1pbGFyIEV2ZW50cyM3MTEKLW5haWNzIzcxMTMxI1Byb21vdGVycyBvZiBQZXJmb3JtaW5nIEFydHMsIFNwb3J0cywgYW5kIFNpbWlsYXIgRXZlbnRzIHdpdGggRmFjaWxpdGllcyM3MTEzCi1uYWljcyM3MTEzMiNQcm9tb3RlcnMgb2YgUGVyZm9ybWluZyBBcnRzLCBTcG9ydHMsIGFuZCBTaW1pbGFyIEV2ZW50cyB3aXRob3V0IEZhY2lsaXRpZXMjNzExMwotbmFpY3MjNzExNCNBZ2VudHMgYW5kIE1hbmFnZXJzIGZvciBBcnRpc3RzLCBBdGhsZXRlcywgRW50ZXJ0YWluZXJzLCBhbmQgT3RoZXIgUHVibGljIEZpZ3VyZXMjNzExCi1uYWljcyM3MTE0MSNBZ2VudHMgYW5kIE1hbmFnZXJzIGZvciBBcnRpc3RzLCBBdGhsZXRlcywgRW50ZXJ0YWluZXJzLCBhbmQgT3RoZXIgUHVibGljIEZpZ3VyZXMjNzExNAotbmFpY3MjNzExNSNJbmRlcGVuZGVudCBBcnRpc3RzLCBXcml0ZXJzLCBhbmQgUGVyZm9ybWVycyM3MTEKLW5haWNzIzcxMTUxI0luZGVwZW5kZW50IEFydGlzdHMsIFdyaXRlcnMsIGFuZCBQZXJmb3JtZXJzIzcxMTUKLW5haWNzIzcxMiNNdXNldW1zLCBIaXN0b3JpY2FsIFNpdGVzLCBhbmQgU2ltaWxhciBJbnN0aXR1dGlvbnMjNzEKLW5haWNzIzcxMjEjTXVzZXVtcywgSGlzdG9yaWNhbCBTaXRlcywgYW5kIFNpbWlsYXIgSW5zdGl0dXRpb25zIzcxMgotbmFpY3MjNzEyMTEjTXVzZXVtcyM3MTIxCi1uYWljcyM3MTIxMiNIaXN0b3JpY2FsIFNpdGVzIzcxMjEKLW5haWNzIzcxMjEzI1pvb3MgYW5kIEJvdGFuaWNhbCBHYXJkZW5zIzcxMjEKLW5haWNzIzcxMjE5I05hdHVyZSBQYXJrcyBhbmQgT3RoZXIgU2ltaWxhciBJbnN0aXR1dGlvbnMjNzEyMQotbmFpY3MjNzEzI0FtdXNlbWVudCwgR2FtYmxpbmcsIGFuZCBSZWNyZWF0aW9uIEluZHVzdHJpZXMjNzEKLW5haWNzIzcxMzEjQW11c2VtZW50IFBhcmtzIGFuZCBBcmNhZGVzIzcxMwotbmFpY3MjNzEzMTEjQW11c2VtZW50IGFuZCBUaGVtZSBQYXJrcyM3MTMxCi1uYWljcyM3MTMxMiNBbXVzZW1lbnQgQXJjYWRlcyM3MTMxCi1uYWljcyM3MTMyI0dhbWJsaW5nIEluZHVzdHJpZXMjNzEzCi1uYWljcyM3MTMyMSNDYXNpbm9zIChleGNlcHQgQ2FzaW5vIEhvdGVscykjNzEzMgotbmFpY3MjNzEzMjkjT3RoZXIgR2FtYmxpbmcgSW5kdXN0cmllcyM3MTMyCi1uYWljcyM3MTM5I090aGVyIEFtdXNlbWVudCBhbmQgUmVjcmVhdGlvbiBJbmR1c3RyaWVzIzcxMwotbmFpY3MjNzEzOTEjR29sZiBDb3Vyc2VzIGFuZCBDb3VudHJ5IENsdWJzIzcxMzkKLW5haWNzIzcxMzkyI1NraWluZyBGYWNpbGl0aWVzIzcxMzkKLW5haWNzIzcxMzkzI01hcmluYXMjNzEzOQotbmFpY3MjNzEzOTQjRml0bmVzcyBhbmQgUmVjcmVhdGlvbmFsIFNwb3J0cyBDZW50ZXJzIzcxMzkKLW5haWNzIzcxMzk1I0Jvd2xpbmcgQ2VudGVycyM3MTM5Ci1uYWljcyM3MTM5OSNBbGwgT3RoZXIgQW11c2VtZW50IGFuZCBSZWNyZWF0aW9uIEluZHVzdHJpZXMjNzEzOQotbmFpY3MjNzIjQWNjb21tb2RhdGlvbiBhbmQgRm9vZCBTZXJ2aWNlcyM3MgotbmFpY3MjNzIxI0FjY29tbW9kYXRpb24jNzIKLW5haWNzIzcyMTEjVHJhdmVsZXIgQWNjb21tb2RhdGlvbiM3MjEKLW5haWNzIzcyMTExI0hvdGVscyAoZXhjZXB0IENhc2lubyBIb3RlbHMpIGFuZCBNb3RlbHMjNzIxMQotbmFpY3MjNzIxMTIjQ2FzaW5vIEhvdGVscyM3MjExCi1uYWljcyM3MjExOSNPdGhlciBUcmF2ZWxlciBBY2NvbW1vZGF0aW9uIzcyMTEKLW5haWNzIzcyMTE5MSNCZWQtYW5kLUJyZWFrZmFzdCBJbm5zIzcyMTE5Ci1uYWljcyM3MjExOTkjQWxsIE90aGVyIFRyYXZlbGVyIEFjY29tbW9kYXRpb24jNzIxMTkKLW5haWNzIzcyMTIjUlYgKFJlY3JlYXRpb25hbCBWZWhpY2xlKSBQYXJrcyBhbmQgUmVjcmVhdGlvbmFsIENhbXBzIzcyMQotbmFpY3MjNzIxMjEjUlYgKFJlY3JlYXRpb25hbCBWZWhpY2xlKSBQYXJrcyBhbmQgUmVjcmVhdGlvbmFsIENhbXBzIzcyMTIKLW5haWNzIzcyMTIxMSNSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFBhcmtzIGFuZCBDYW1wZ3JvdW5kcyM3MjEyMQotbmFpY3MjNzIxMjE0I1JlY3JlYXRpb25hbCBhbmQgVmFjYXRpb24gQ2FtcHMgKGV4Y2VwdCBDYW1wZ3JvdW5kcykjNzIxMjEKLW5haWNzIzcyMTMjUm9vbWluZyBhbmQgQm9hcmRpbmcgSG91c2VzIzcyMQotbmFpY3MjNzIxMzEjUm9vbWluZyBhbmQgQm9hcmRpbmcgSG91c2VzIzcyMTMKLW5haWNzIzcyMiNGb29kIFNlcnZpY2VzIGFuZCBEcmlua2luZyBQbGFjZXMjNzIKLW5haWNzIzcyMjEjRnVsbC1TZXJ2aWNlIFJlc3RhdXJhbnRzIzcyMgotbmFpY3MjNzIyMTEjRnVsbC1TZXJ2aWNlIFJlc3RhdXJhbnRzIzcyMjEKLW5haWNzIzcyMjIjTGltaXRlZC1TZXJ2aWNlIEVhdGluZyBQbGFjZXMjNzIyCi1uYWljcyM3MjIyMSNMaW1pdGVkLVNlcnZpY2UgRWF0aW5nIFBsYWNlcyM3MjIyCi1uYWljcyM3MjIyMTEjTGltaXRlZC1TZXJ2aWNlIFJlc3RhdXJhbnRzIzcyMjIxCi1uYWljcyM3MjIyMTIjQ2FmZXRlcmlhcyM3MjIyMQotbmFpY3MjNzIyMjEzI1NuYWNrIGFuZCBOb25hbGNvaG9saWMgQmV2ZXJhZ2UgQmFycyM3MjIyMQotbmFpY3MjNzIyMyNTcGVjaWFsIEZvb2QgU2VydmljZXMjNzIyCi1uYWljcyM3MjIzMSNGb29kIFNlcnZpY2UgQ29udHJhY3RvcnMjNzIyMwotbmFpY3MjNzIyMzIjQ2F0ZXJlcnMjNzIyMwotbmFpY3MjNzIyMzMjTW9iaWxlIEZvb2QgU2VydmljZXMjNzIyMwotbmFpY3MjNzIyNCNEcmlua2luZyBQbGFjZXMgKEFsY29ob2xpYyBCZXZlcmFnZXMpIzcyMgotbmFpY3MjNzIyNDEjRHJpbmtpbmcgUGxhY2VzIChBbGNvaG9saWMgQmV2ZXJhZ2VzKSM3MjI0Ci1uYWljcyM4MSNPdGhlciBTZXJ2aWNlcyAoZXhjZXB0IFB1YmxpYyBBZG1pbmlzdHJhdGlvbikjODEKLW5haWNzIzgxMSNSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxCi1uYWljcyM4MTExI0F1dG9tb3RpdmUgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEKLW5haWNzIzgxMTExI0F1dG9tb3RpdmUgTWVjaGFuaWNhbCBhbmQgRWxlY3RyaWNhbCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTEKLW5haWNzIzgxMTExMSNHZW5lcmFsIEF1dG9tb3RpdmUgUmVwYWlyIzgxMTExCi1uYWljcyM4MTExMTIjQXV0b21vdGl2ZSBFeGhhdXN0IFN5c3RlbSBSZXBhaXIjODExMTEKLW5haWNzIzgxMTExMyNBdXRvbW90aXZlIFRyYW5zbWlzc2lvbiBSZXBhaXIjODExMTEKLW5haWNzIzgxMTExOCNPdGhlciBBdXRvbW90aXZlIE1lY2hhbmljYWwgYW5kIEVsZWN0cmljYWwgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTExMQotbmFpY3MjODExMTIjQXV0b21vdGl2ZSBCb2R5LCBQYWludCwgSW50ZXJpb3IsIGFuZCBHbGFzcyBSZXBhaXIjODExMQotbmFpY3MjODExMTIxI0F1dG9tb3RpdmUgQm9keSwgUGFpbnQsIGFuZCBJbnRlcmlvciBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTEyCi1uYWljcyM4MTExMjIjQXV0b21vdGl2ZSBHbGFzcyBSZXBsYWNlbWVudCBTaG9wcyM4MTExMgotbmFpY3MjODExMTkjT3RoZXIgQXV0b21vdGl2ZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTEKLW5haWNzIzgxMTE5MSNBdXRvbW90aXZlIE9pbCBDaGFuZ2UgYW5kIEx1YnJpY2F0aW9uIFNob3BzIzgxMTE5Ci1uYWljcyM4MTExOTIjQ2FyIFdhc2hlcyM4MTExOQotbmFpY3MjODExMTk4I0FsbCBPdGhlciBBdXRvbW90aXZlIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMTkKLW5haWNzIzgxMTIjRWxlY3Ryb25pYyBhbmQgUHJlY2lzaW9uIEVxdWlwbWVudCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMQotbmFpY3MjODExMjEjRWxlY3Ryb25pYyBhbmQgUHJlY2lzaW9uIEVxdWlwbWVudCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTIKLW5haWNzIzgxMTIxMSNDb25zdW1lciBFbGVjdHJvbmljcyBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTIxCi1uYWljcyM4MTEyMTIjQ29tcHV0ZXIgYW5kIE9mZmljZSBNYWNoaW5lIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTIxMyNDb21tdW5pY2F0aW9uIEVxdWlwbWVudCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTIxCi1uYWljcyM4MTEyMTkjT3RoZXIgRWxlY3Ryb25pYyBhbmQgUHJlY2lzaW9uIEVxdWlwbWVudCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTIxCi1uYWljcyM4MTEzI0NvbW1lcmNpYWwgYW5kIEluZHVzdHJpYWwgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgKGV4Y2VwdCBBdXRvbW90aXZlIGFuZCBFbGVjdHJvbmljKSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMQotbmFpY3MjODExMzEjQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCAoZXhjZXB0IEF1dG9tb3RpdmUgYW5kIEVsZWN0cm9uaWMpIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMwotbmFpY3MjODExNCNQZXJzb25hbCBhbmQgSG91c2Vob2xkIEdvb2RzIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExCi1uYWljcyM4MTE0MSNIb21lIGFuZCBHYXJkZW4gRXF1aXBtZW50IGFuZCBBcHBsaWFuY2UgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTE0Ci1uYWljcyM4MTE0MTEjSG9tZSBhbmQgR2FyZGVuIEVxdWlwbWVudCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTQxCi1uYWljcyM4MTE0MTIjQXBwbGlhbmNlIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExNDEKLW5haWNzIzgxMTQyI1JldXBob2xzdGVyeSBhbmQgRnVybml0dXJlIFJlcGFpciM4MTE0Ci1uYWljcyM4MTE0MyNGb290d2VhciBhbmQgTGVhdGhlciBHb29kcyBSZXBhaXIjODExNAotbmFpY3MjODExNDkjT3RoZXIgUGVyc29uYWwgYW5kIEhvdXNlaG9sZCBHb29kcyBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTQKLW5haWNzIzgxMiNQZXJzb25hbCBhbmQgTGF1bmRyeSBTZXJ2aWNlcyM4MQotbmFpY3MjODEyMSNQZXJzb25hbCBDYXJlIFNlcnZpY2VzIzgxMgotbmFpY3MjODEyMTEjSGFpciwgTmFpbCwgYW5kIFNraW4gQ2FyZSBTZXJ2aWNlcyM4MTIxCi1uYWljcyM4MTIxMTEjQmFyYmVyIFNob3BzIzgxMjExCi1uYWljcyM4MTIxMTIjQmVhdXR5IFNhbG9ucyM4MTIxMQotbmFpY3MjODEyMTEzI05haWwgU2Fsb25zIzgxMjExCi1uYWljcyM4MTIxOSNPdGhlciBQZXJzb25hbCBDYXJlIFNlcnZpY2VzIzgxMjEKLW5haWNzIzgxMjE5MSNEaWV0IGFuZCBXZWlnaHQgUmVkdWNpbmcgQ2VudGVycyM4MTIxOQotbmFpY3MjODEyMTk5I090aGVyIFBlcnNvbmFsIENhcmUgU2VydmljZXMjODEyMTkKLW5haWNzIzgxMjIjRGVhdGggQ2FyZSBTZXJ2aWNlcyM4MTIKLW5haWNzIzgxMjIxI0Z1bmVyYWwgSG9tZXMgYW5kIEZ1bmVyYWwgU2VydmljZXMjODEyMgotbmFpY3MjODEyMjIjQ2VtZXRlcmllcyBhbmQgQ3JlbWF0b3JpZXMjODEyMgotbmFpY3MjODEyMyNEcnljbGVhbmluZyBhbmQgTGF1bmRyeSBTZXJ2aWNlcyM4MTIKLW5haWNzIzgxMjMxI0NvaW4tT3BlcmF0ZWQgTGF1bmRyaWVzIGFuZCBEcnljbGVhbmVycyM4MTIzCi1uYWljcyM4MTIzMiNEcnljbGVhbmluZyBhbmQgTGF1bmRyeSBTZXJ2aWNlcyAoZXhjZXB0IENvaW4tT3BlcmF0ZWQpIzgxMjMKLW5haWNzIzgxMjMzI0xpbmVuIGFuZCBVbmlmb3JtIFN1cHBseSM4MTIzCi1uYWljcyM4MTIzMzEjTGluZW4gU3VwcGx5IzgxMjMzCi1uYWljcyM4MTIzMzIjSW5kdXN0cmlhbCBMYXVuZGVyZXJzIzgxMjMzCi1uYWljcyM4MTI5I090aGVyIFBlcnNvbmFsIFNlcnZpY2VzIzgxMgotbmFpY3MjODEyOTEjUGV0IENhcmUgKGV4Y2VwdCBWZXRlcmluYXJ5KSBTZXJ2aWNlcyM4MTI5Ci1uYWljcyM4MTI5MiNQaG90b2ZpbmlzaGluZyM4MTI5Ci1uYWljcyM4MTI5MjEjUGhvdG9maW5pc2hpbmcgTGFib3JhdG9yaWVzIChleGNlcHQgT25lLUhvdXIpIzgxMjkyCi1uYWljcyM4MTI5MjIjT25lLUhvdXIgUGhvdG9maW5pc2hpbmcjODEyOTIKLW5haWNzIzgxMjkzI1BhcmtpbmcgTG90cyBhbmQgR2FyYWdlcyM4MTI5Ci1uYWljcyM4MTI5OSNBbGwgT3RoZXIgUGVyc29uYWwgU2VydmljZXMjODEyOQotbmFpY3MjODEzI1JlbGlnaW91cywgR3JhbnRtYWtpbmcsIENpdmljLCBQcm9mZXNzaW9uYWwsIGFuZCBTaW1pbGFyIE9yZ2FuaXphdGlvbnMjODEKLW5haWNzIzgxMzEjUmVsaWdpb3VzIE9yZ2FuaXphdGlvbnMjODEzCi1uYWljcyM4MTMxMSNSZWxpZ2lvdXMgT3JnYW5pemF0aW9ucyM4MTMxCi1uYWljcyM4MTMyI0dyYW50bWFraW5nIGFuZCBHaXZpbmcgU2VydmljZXMjODEzCi1uYWljcyM4MTMyMSNHcmFudG1ha2luZyBhbmQgR2l2aW5nIFNlcnZpY2VzIzgxMzIKLW5haWNzIzgxMzIxMSNHcmFudG1ha2luZyBGb3VuZGF0aW9ucyM4MTMyMQotbmFpY3MjODEzMjEyI1ZvbHVudGFyeSBIZWFsdGggT3JnYW5pemF0aW9ucyM4MTMyMQotbmFpY3MjODEzMjE5I090aGVyIEdyYW50bWFraW5nIGFuZCBHaXZpbmcgU2VydmljZXMjODEzMjEKLW5haWNzIzgxMzMjU29jaWFsIEFkdm9jYWN5IE9yZ2FuaXphdGlvbnMjODEzCi1uYWljcyM4MTMzMSNTb2NpYWwgQWR2b2NhY3kgT3JnYW5pemF0aW9ucyM4MTMzCi1uYWljcyM4MTMzMTEjSHVtYW4gUmlnaHRzIE9yZ2FuaXphdGlvbnMjODEzMzEKLW5haWNzIzgxMzMxMiNFbnZpcm9ubWVudCwgQ29uc2VydmF0aW9uIGFuZCBXaWxkbGlmZSBPcmdhbml6YXRpb25zIzgxMzMxCi1uYWljcyM4MTMzMTkjT3RoZXIgU29jaWFsIEFkdm9jYWN5IE9yZ2FuaXphdGlvbnMjODEzMzEKLW5haWNzIzgxMzQjQ2l2aWMgYW5kIFNvY2lhbCBPcmdhbml6YXRpb25zIzgxMwotbmFpY3MjODEzNDEjQ2l2aWMgYW5kIFNvY2lhbCBPcmdhbml6YXRpb25zIzgxMzQKLW5haWNzIzgxMzkjQnVzaW5lc3MsIFByb2Zlc3Npb25hbCwgTGFib3IsIFBvbGl0aWNhbCwgYW5kIFNpbWlsYXIgT3JnYW5pemF0aW9ucyM4MTMKLW5haWNzIzgxMzkxI0J1c2luZXNzIEFzc29jaWF0aW9ucyM4MTM5Ci1uYWljcyM4MTM5MiNQcm9mZXNzaW9uYWwgT3JnYW5pemF0aW9ucyM4MTM5Ci1uYWljcyM4MTM5MyNMYWJvciBVbmlvbnMgYW5kIFNpbWlsYXIgTGFib3IgT3JnYW5pemF0aW9ucyM4MTM5Ci1uYWljcyM4MTM5NCNQb2xpdGljYWwgT3JnYW5pemF0aW9ucyM4MTM5Ci1uYWljcyM4MTM5OSNPdGhlciBTaW1pbGFyIE9yZ2FuaXphdGlvbnMgKGV4Y2VwdCBCdXNpbmVzcywgUHJvZmVzc2lvbmFsLCBMYWJvciwgYW5kIFBvbGl0aWNhbCBPcmdhbml6YXRpb25zKSM4MTM5Ci1uYWljcyM4MTQjUHJpdmF0ZSBIb3VzZWhvbGRzIzgxCi1uYWljcyM4MTQxI1ByaXZhdGUgSG91c2Vob2xkcyM4MTQKLW5haWNzIzgxNDExI1ByaXZhdGUgSG91c2Vob2xkcyM4MTQxCi1uYWljcyM5MiNQdWJsaWMgQWRtaW5pc3RyYXRpb24jOTIKLW5haWNzIzkyMSNFeGVjdXRpdmUsIExlZ2lzbGF0aXZlLCBhbmQgT3RoZXIgR2VuZXJhbCBHb3Zlcm5tZW50IFN1cHBvcnQjOTIKLW5haWNzIzkyMTEjRXhlY3V0aXZlLCBMZWdpc2xhdGl2ZSwgYW5kIE90aGVyIEdlbmVyYWwgR292ZXJubWVudCBTdXBwb3J0IzkyMQotbmFpY3MjOTIxMTEjRXhlY3V0aXZlIE9mZmljZXMjOTIxMQotbmFpY3MjOTIxMTIjTGVnaXNsYXRpdmUgQm9kaWVzIzkyMTEKLW5haWNzIzkyMTEzI1B1YmxpYyBGaW5hbmNlIEFjdGl2aXRpZXMjOTIxMQotbmFpY3MjOTIxMTQjRXhlY3V0aXZlIGFuZCBMZWdpc2xhdGl2ZSBPZmZpY2VzLCBDb21iaW5lZCM5MjExCi1uYWljcyM5MjExNSNBbWVyaWNhbiBJbmRpYW4gYW5kIEFsYXNrYSBOYXRpdmUgVHJpYmFsIEdvdmVybm1lbnRzIzkyMTEKLW5haWNzIzkyMTE5I090aGVyIEdlbmVyYWwgR292ZXJubWVudCBTdXBwb3J0IzkyMTEKLW5haWNzIzkyMiNKdXN0aWNlLCBQdWJsaWMgT3JkZXIsIGFuZCBTYWZldHkgQWN0aXZpdGllcyM5MgotbmFpY3MjOTIyMSNKdXN0aWNlLCBQdWJsaWMgT3JkZXIsIGFuZCBTYWZldHkgQWN0aXZpdGllcyM5MjIKLW5haWNzIzkyMjExI0NvdXJ0cyM5MjIxCi1uYWljcyM5MjIxMiNQb2xpY2UgUHJvdGVjdGlvbiM5MjIxCi1uYWljcyM5MjIxMyNMZWdhbCBDb3Vuc2VsIGFuZCBQcm9zZWN1dGlvbiM5MjIxCi1uYWljcyM5MjIxNCNDb3JyZWN0aW9uYWwgSW5zdGl0dXRpb25zIzkyMjEKLW5haWNzIzkyMjE1I1Bhcm9sZSBPZmZpY2VzIGFuZCBQcm9iYXRpb24gT2ZmaWNlcyM5MjIxCi1uYWljcyM5MjIxNiNGaXJlIFByb3RlY3Rpb24jOTIyMQotbmFpY3MjOTIyMTkjT3RoZXIgSnVzdGljZSwgUHVibGljIE9yZGVyLCBhbmQgU2FmZXR5IEFjdGl2aXRpZXMjOTIyMQotbmFpY3MjOTIzI0FkbWluaXN0cmF0aW9uIG9mIEh1bWFuIFJlc291cmNlIFByb2dyYW1zIzkyCi1uYWljcyM5MjMxI0FkbWluaXN0cmF0aW9uIG9mIEh1bWFuIFJlc291cmNlIFByb2dyYW1zIzkyMwotbmFpY3MjOTIzMTEjQWRtaW5pc3RyYXRpb24gb2YgRWR1Y2F0aW9uIFByb2dyYW1zIzkyMzEKLW5haWNzIzkyMzEyI0FkbWluaXN0cmF0aW9uIG9mIFB1YmxpYyBIZWFsdGggUHJvZ3JhbXMjOTIzMQotbmFpY3MjOTIzMTMjQWRtaW5pc3RyYXRpb24gb2YgSHVtYW4gUmVzb3VyY2UgUHJvZ3JhbXMgKGV4Y2VwdCBFZHVjYXRpb24sIFB1YmxpYyBIZWFsdGgsIGFuZCBWZXRlcmFucycgQWZmYWlycyBQcm9ncmFtcykjOTIzMQotbmFpY3MjOTIzMTQjQWRtaW5pc3RyYXRpb24gb2YgVmV0ZXJhbnMnIEFmZmFpcnMjOTIzMQotbmFpY3MjOTI0I0FkbWluaXN0cmF0aW9uIG9mIEVudmlyb25tZW50YWwgUXVhbGl0eSBQcm9ncmFtcyM5MgotbmFpY3MjOTI0MSNBZG1pbmlzdHJhdGlvbiBvZiBFbnZpcm9ubWVudGFsIFF1YWxpdHkgUHJvZ3JhbXMjOTI0Ci1uYWljcyM5MjQxMSNBZG1pbmlzdHJhdGlvbiBvZiBBaXIgYW5kIFdhdGVyIFJlc291cmNlIGFuZCBTb2xpZCBXYXN0ZSBNYW5hZ2VtZW50IFByb2dyYW1zIzkyNDEKLW5haWNzIzkyNDEyI0FkbWluaXN0cmF0aW9uIG9mIENvbnNlcnZhdGlvbiBQcm9ncmFtcyM5MjQxCi1uYWljcyM5MjUjQWRtaW5pc3RyYXRpb24gb2YgSG91c2luZyBQcm9ncmFtcywgVXJiYW4gUGxhbm5pbmcsIGFuZCBDb21tdW5pdHkgRGV2ZWxvcG1lbnQjOTIKLW5haWNzIzkyNTEjQWRtaW5pc3RyYXRpb24gb2YgSG91c2luZyBQcm9ncmFtcywgVXJiYW4gUGxhbm5pbmcsIGFuZCBDb21tdW5pdHkgRGV2ZWxvcG1lbnQjOTI1Ci1uYWljcyM5MjUxMSNBZG1pbmlzdHJhdGlvbiBvZiBIb3VzaW5nIFByb2dyYW1zIzkyNTEKLW5haWNzIzkyNTEyI0FkbWluaXN0cmF0aW9uIG9mIFVyYmFuIFBsYW5uaW5nIGFuZCBDb21tdW5pdHkgYW5kIFJ1cmFsIERldmVsb3BtZW50IzkyNTEKLW5haWNzIzkyNiNBZG1pbmlzdHJhdGlvbiBvZiBFY29ub21pYyBQcm9ncmFtcyM5MgotbmFpY3MjOTI2MSNBZG1pbmlzdHJhdGlvbiBvZiBFY29ub21pYyBQcm9ncmFtcyM5MjYKLW5haWNzIzkyNjExI0FkbWluaXN0cmF0aW9uIG9mIEdlbmVyYWwgRWNvbm9taWMgUHJvZ3JhbXMjOTI2MQotbmFpY3MjOTI2MTIjUmVndWxhdGlvbiBhbmQgQWRtaW5pc3RyYXRpb24gb2YgVHJhbnNwb3J0YXRpb24gUHJvZ3JhbXMjOTI2MQotbmFpY3MjOTI2MTMjUmVndWxhdGlvbiBhbmQgQWRtaW5pc3RyYXRpb24gb2YgQ29tbXVuaWNhdGlvbnMsIEVsZWN0cmljLCBHYXMsIGFuZCBPdGhlciBVdGlsaXRpZXMjOTI2MQotbmFpY3MjOTI2MTQjUmVndWxhdGlvbiBvZiBBZ3JpY3VsdHVyYWwgTWFya2V0aW5nIGFuZCBDb21tb2RpdGllcyM5MjYxCi1uYWljcyM5MjYxNSNSZWd1bGF0aW9uLCBMaWNlbnNpbmcsIGFuZCBJbnNwZWN0aW9uIG9mIE1pc2NlbGxhbmVvdXMgQ29tbWVyY2lhbCBTZWN0b3JzIzkyNjEKLW5haWNzIzkyNyNTcGFjZSBSZXNlYXJjaCBhbmQgVGVjaG5vbG9neSM5MgotbmFpY3MjOTI3MSNTcGFjZSBSZXNlYXJjaCBhbmQgVGVjaG5vbG9neSM5MjcKLW5haWNzIzkyNzExI1NwYWNlIFJlc2VhcmNoIGFuZCBUZWNobm9sb2d5IzkyNzEKLW5haWNzIzkyOCNOYXRpb25hbCBTZWN1cml0eSBhbmQgSW50ZXJuYXRpb25hbCBBZmZhaXJzIzkyCi1uYWljcyM5MjgxI05hdGlvbmFsIFNlY3VyaXR5IGFuZCBJbnRlcm5hdGlvbmFsIEFmZmFpcnMjOTI4Ci1uYWljcyM5MjgxMSNOYXRpb25hbCBTZWN1cml0eSM5MjgxCi1uYWljcyM5MjgxMiNJbnRlcm5hdGlvbmFsIEFmZmFpcnMjOTI4MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvdW5zcHNjLWRhdGEudHh0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvdW5zcHNjLWRhdGEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzgzNTE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL3Vuc3BzYy1kYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE3MDU0ICswLDAgQEAKLXVuc3BzYzcjMTAuMDAuMDAuMDAuMDAjTGl2ZSBQbGFudCBhbmQgQW5pbWFsIE1hdGVyaWFsIGFuZCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMDAuMDAuMDAjTGl2ZSBhbmltYWxzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjAwLjAwI0xpdmVzdG9jayMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wMS4wMCNDYXRzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjAyLjAwI0RvZ3MjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDQuMDAjTWluayMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wNS4wMCNSYXRzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA2LjAwI0hvcnNlcyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wNy4wMCNTaGVlcCMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wOC4wMCNHb2F0cyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wOS4wMCNBc3NlcyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xMC4wMCNNaWNlIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjExLjAwI1N3aW5lIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjEyLjAwI1JhYmJpdHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTMuMDAjR3VpbmVhIHBpZ3MjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTQuMDAjUHJpbWF0ZXMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTUuMDAjQXJtYWRpbGxvcyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNi4wMCNDYXR0bGUjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTcuMDAjQ2FtZWxzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjAwLjAwI0JpcmRzIGFuZCBmb3dsIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjAxLjAwI0xpdmUgY2hpY2tlbnMjMTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDIuMDAjTGl2ZSBkdWNrcyMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wMy4wMCNMaXZlIHR1cmtleXMjMTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDQuMDAjTGl2ZSBnZWVzZSMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wNS4wMCNMaXZlIHBoZWFzYW50cyMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wMC4wMCNMaXZlIGZpc2gjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDEuMDAjTGl2ZSBzYWxtb24jMTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDIuMDAjTGl2ZSB0cm91dCMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wMy4wMCNMaXZlIHRhbGFwaWEjMTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDQuMDAjTGl2ZSBjYXJwIzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjA1LjAwI0xpdmUgZWVscyMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wMC4wMCNTaGVsbGZpc2ggYW5kIGFxdWF0aWMgaW52ZXJ0ZWJyYXRlcyMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wMS4wMCNMaXZlIHNocmltcCMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wMi4wMCNMaXZlIGNsYW1zIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAzLjAwI0xpdmUgbXVzc2VscyMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wNC4wMCNMaXZlIG95c3RlcnMjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDUuMDAjTGl2ZSBjcmFicyMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wNi4wMCNMaXZlIGFiYWxvbmUjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDcuMDAjTGl2ZSBvY3RvcGkjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDguMDAjTGl2ZSBzcXVpZCMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOS4wMC4wMCNJbnNlY3RzIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjAxLjAwI0J1dHRlcmZsaWVzIzEwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjAyLjAwI0JlZXRsZXMjMTAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDMuMDAjQmVlcyMxMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOS4wNC4wMCNTaWxrd29ybXMjMTAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMjAuMDAuMDAjV2lsZCBhbmltYWxzIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjIwLjAxLjAwI0VsZXBoYW50cyMxMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4yMC4wMi4wMCNMaXZlIGZveGVzIzEwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEwLjExLjAwLjAwLjAwI0RvbWVzdGljIHBldCBwcm9kdWN0cyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMS4wMC4wMCNQZXQgZm9vZCBib3dscyBvciBlcXVpcG1lbnQjMTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTIuMDAuMDAjTWVkaWNhdGVkIHBldCB0cmVhdG1lbnRzIzEwLjExLjAwLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjAwLjAwI0RvbWVzdGljIHBldCB0cmVhdG1lbnRzIGFuZCBhY2Nlc3NvcmllcyBhbmQgZXF1aXBtZW50IzEwLjExLjAwLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjAxLjAwI1BldCB0b3lzIzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjAyLjAwI1BldCBncm9vbWluZyBwcm9kdWN0cyMxMC4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wMy4wMCNQZXQgbGl0dGVyIG9yIGVxdWlwbWVudCBmb3IgcGV0IHdhc3RlIG1hbmFnZW1lbnQjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDQuMDAjUGV0IGZvb2QgYm93bHMgb3IgZXF1aXBtZW50IzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjA1LjAwI01lZGljYXRlZCBwZXQgdHJlYXRtZW50cyMxMC4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMC4xMi4wMC4wMC4wMCNBbmltYWwgZmVlZCMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wMC4wMCNMaXZlc3RvY2sgZmVlZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wMS4wMCNQdXJlIHdoZWF0IGJyYW4jMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDIuMDAjRmVlZCBvYXRzIzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjAzLjAwI0ZlZWQgY29ybiMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wNC4wMCNGZWVkIHNvcmdodW0jMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDUuMDAjSGF5IzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjA2LjAwI09pbCBjYWtlIzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjAwLjAwI0JpcmQgYW5kIGZvd2wgZm9vZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNi4wMS4wMCNMaXZlIGZvb2QgZm9yIGJpcmRzIzEwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjAyLjAwI0JpcmQgc2VlZCMxMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNi4wMy4wMCNCaXJkIHRyZWF0cyBvciBzbmFja3MjMTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDQuMDAjUG91bHRyeSBmb29kIzEwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE3LjAwLjAwI0Zpc2ggZm9vZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNy4wMS4wMCNGcmVzaCBvciBmcm96ZW4gYnJpbmUjMTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTcuMDIuMDAjRmlzaCBmb29kIHBlbGxldHMjMTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTcuMDMuMDAjRmlzaCBmb29kIGZsYWtlcyMxMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wMC4wMCNEb2cgYW5kIGNhdCBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjAxLjAwI0RyeSBmb29kIGZvciBkb2dzIzEwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjAyLjAwI01vaXN0IGZvb2QgZm9yIGRvZ3MjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDMuMDAjTWlsayBmb3IgZG9ncyBvciBjYXRzIzEwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjA0LjAwI0RyeSBmb29kIGZvciBjYXRzIzEwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjA1LjAwI01vaXN0IGZvb2QgZm9yIGNhdHMjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDYuMDAjVHJlYXRzIG9yIHNuYWNrcyBmb3IgY2F0cyBvciBkb2dzIzEwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE5LjAwLjAwI1JvZGVudCBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE5LjAxLjAwI1BlbGxldGl6ZWQgZm9vZCBmb3Igcm9kZW50cyMxMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMi4yMC4wMC4wMCNSZXB0aWxlIGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMjAuMDEuMDAjUGVsbGV0aXplZCBmb29kIGZvciByZXB0aWxlcyMxMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4yMC4wMi4wMCNNb2lzdCBmb29kIGZvciByZXB0aWxlcyMxMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4yMC4wMy4wMCNMaXZlIGZvb2QgZm9yIHJlcHRpbGVzIzEwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEzLjAwLjAwLjAwI0FuaW1hbCBjb250YWlubWVudCBhbmQgaGFiaXRhdHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDAuMDAjQW5pbWFsIHNoZWx0ZXJzIzEwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEzLjE1LjA2LjAwI0xpdmVzdG9jayBzdGFibGVzIzEwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE1LjA3LjAwI0RvbWVzdGljaXplZCBwZXQgaG91c2VzIzEwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE1LjA4LjAwI1BldCBiZWRzIzEwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjAwLjAwI0FuaW1hbCBjb250YWlubWVudCMxMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNi4wMS4wMCNDYWdlcyMxMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNi4wMi4wMCNLZW5uZWxzIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjAzLjAwI0FuaW1hbCBjYXJyeWluZyBjYXNlcyMxMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNi4wNC4wMCNEb2cgcnVucyMxMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNy4wMC4wMCNBbmltYWwgaGFiaXRhdHMjMTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTcuMDEuMDAjVGVycmFyaXVtcyMxMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNy4wMi4wMCNBcXVhcml1bXMjMTAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMDAuMDAuMDAjU2FkZGxlcnkgYW5kIGhhcm5lc3MgZ29vZHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTUuMDAuMDAjU2FkZGxlcnkjMTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTUuMDEuMDAjU2FkZGxlcyMxMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNS4wMi4wMCNXaGlwcyMxMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wMC4wMCNIYXJuZXNzIGdvb2RzIzEwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjAxLjAwI0JyaWRsZXMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDIuMDAjWW9rZXMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDMuMDAjSG9yc2UgYml0cyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wNC4wMCNSZWlucyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wNS4wMCNTdGlycnVwcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wNi4wMCNMZWFzaGVzIG9yIGxlYWRzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA3LjAwI0NvbGxhcnMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDguMDAjSGFybmVzc2VzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA5LjAwI1Jlc3RyYWludHMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMDAuMDAuMDAjU2VlZHMgYW5kIGJ1bGJzIGFuZCBzZWVkbGluZ3MgYW5kIGN1dHRpbmdzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjAwLjAwI1ZlZ2V0YWJsZSBzZWVkcyBhbmQgc2VlZGxpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjAxLjAwI0JlYW4gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjAyLjAwI0NhcnJvdCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDMuMDAjQ2VsZXJ5IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wNC4wMCNDaGlsaSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDUuMDAjQ291cmdldHRlIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wNi4wMCNDb3cgcGVhIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wNy4wMCNDdWN1bWJlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDguMDAjRWdncGxhbnQgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA5LjAwI0VuZGl2ZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTAuMDAjR2FybGljIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xMS4wMCNMZWVrIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xMi4wMCNMZXR0dWNlIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xMy4wMCNDb3JuIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xNC4wMCNNZWxvbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTUuMDAjT25pb24gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE2LjAwI1NveWEgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE3LjAwI1NwaW5hY2ggc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE4LjAwI1RvbWF0byBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTkuMDAjVHVybmlwIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yMC4wMCNDaGFyZCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMjEuMDAjU3dlZXQgcGVwcGVyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yMi4wMCNCZWV0IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yMy4wMCNDYXVsaWZsb3dlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMjQuMDAjUGFyc2VseSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDAuMDAjQ2VyZWFsIHNlZWRzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjAxLjAwI1doZWF0IHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjAyLjAwI0NvbHphIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjAzLjAwI0JhcmxleSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wNC4wMCNNaWxsZXQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDUuMDAjT2F0IHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA2LjAwI1Nlc2FtZSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wNy4wMCNMaW5zZWVkIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA4LjAwI0Nhc3RvciBvaWwgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDkuMDAjTWFpemUgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMTAuMDAjUnllIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjExLjAwI1NvcmdodW0gc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDAuMDAjR3Jhc3MgYW5kIGZvcmFnZSBzZWVkcyBhbmQgc2VlZGxpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjAxLjAwI1JpY2Ugc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjAyLjAwI0Nsb3ZlciBzZWVkcyBvciBzZWVkbGluZyMxMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNy4wMy4wMCNBbGZhbGZhIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNy4wNC4wMCNHcmFzcyBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDAuMDAjU3BpY2UgY3JvcCBzZWVkcyBhbmQgc2VlZGxpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjAxLjAwI1BlcHBlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDIuMDAjVmFuaWxsYSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDMuMDAjQ2lubmFtb24gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA0LjAwI0Nsb3ZlIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wNS4wMCNDb3JpYW5kZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA2LjAwI0dpbmdlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDcuMDAjU2FmZnJvbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDguMDAjVGh5bWUgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA5LjAwI0N1cnJ5IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4xMC4wMCNNdXN0YXJkIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4xMS4wMCNHaW5zZW5nIHJvb3RzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wMC4wMCNGbG93ZXIgc2VlZHMgYW5kIGJ1bGJzIGFuZCBzZWVkbGluZ3MgYW5kIGN1dHRpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAxLjAwI1R1bGlwIHNlZWRzIG9yIGJ1bGJzIG9yIHNlZWRsaW5ncyBvciBjdXR0aW5ncyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wMi4wMCNSb3NlIHNlZWRzIG9yIHNlZWRsaW5ncyBvciBjdXR0aW5ncyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wMy4wMCNEYWZmb2RpbCBzZWVkcyBvciBidWxicyBvciBzZWVkbGluZ3Mgb3IgY3V0dGluZ3MjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDQuMDAjU3VuZmxvd2VyIHNlZWRzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjA1LjAwI0h5YWNpbnRoIGJ1bGJzIG9yIHNob290cyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wNi4wMCNMaWx5IEJ1bGJzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjIwLjAwLjAwI1RyZWUgYW5kIHNocnViIHNlZWRzIGFuZCBjdXR0aW5ncyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMC4wMS4wMCNGcnVpdCB0cmVlIHNlZWRzIG9yIGN1dHRpbmdzIzEwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIwLjAyLjAwI0NvbmlmZXIgdHJlZSBzZWVkcyBvciBjdXR0aW5ncyMxMC4xNS4yMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMC4wMy4wMCNOdXQgdHJlZSBzZWVkcyBvciBjdXR0aW5ncyMxMC4xNS4yMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wMC4wMCNSZXNpZHVlcyBvdGhlciB0aGFuIGFuaW1hbCBmZWVkIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjAxLjAwI1Jlc2lkdWVzIGJhYm9vbCBzZWVkIGV4dHJhY3Rpb24jMTAuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjEuMDIuMDAjUmVzaWR1ZXMgb2YgcmFwZSBzZWVkcyMxMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wMy4wMCNSZXNpZHVlIG9mIGxpbnNlZWQjMTAuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjEuMDQuMDAjT2lsIGNha2Ugb2YgbmVlbSMxMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMi4wMC4wMCNGaWJyb3VzIGNyb3Agc2VlZHMgYW5kIHNlZWRsaW5ncyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMi4wMS4wMCNDb3R0b24gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjIyLjAwLjAwCi11bnNwc2M3IzEwLjE2LjAwLjAwLjAwI0Zsb3JpY3VsdHVyZSBhbmQgc2lsdmljdWx0dXJlIHByb2R1Y3RzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjAwLjAwI1RyZWVzIGFuZCBzaHJ1YnMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDEuMDAjT2xpdmUgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDIuMDAjQ29mZmVlIHNocnVicyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wMy4wMCNDb2NvYSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wNC4wMCNBcHBsZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wNS4wMCNQZWFjaCB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wNi4wMCNPcmFuZ2UgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDcuMDAjUmhvZGVuZHJvbiBzaHJ1YnMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDguMDAjVGVhIHNocnVicyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wOS4wMCNDb25pZmVyIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjEwLjAwI1NwcnVjZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4xMS4wMCNQaW5lIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjEyLjAwI0ZpciB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNi4wMC4wMCNGbG9yYWwgcGxhbnRzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjAxLjAwI1Jvc2UgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjAyLjAwI1BvaW5zZXR0aWFzIHBsYW50cyMxMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNi4wMy4wMCNPcmNoaWRzIHBsYW50cyMxMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNi4wNC4wMCNBemFsZWFzIHBsYW50cyMxMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNi4wNS4wMCNDYWN0dXMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjAwLjAwI0N1dCBmbG93ZXJzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjAxLjAwI0N1dCBnbGFkaW9sdXMjMTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDIuMDAjQ3V0IGxpbGllcyMxMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wMy4wMCNDdXQgY2FybmF0aW9ucyMxMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wNC4wMCNDdXQgdHVsaXBzIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjA1LjAwI0N1dCByb3NlcyMxMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOC4wMC4wMCNOb24gZmxvd2VyaW5nIHBsYW50cyMxMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOC4wMS4wMCNGZXJucyMxMC4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOC4wMi4wMCNJdmllcyMxMC4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOC4wMy4wMCNQaGlsb2RlbmRyb25zIzEwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjAwLjAwI0RyaWVkIGZsb3JhbCBwcm9kdWN0cyMxMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wMS4wMCNEcmllZCBwb2RzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjAyLjAwI0RyaWVkIGxlYWZ5IGdyZWVuZXJ5IzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjAzLjAwI0RyaWVkIGZlcm4gZ3JlZW5lcnkjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDQuMDAjRHJpZWQgZnVsbCBmbG93ZXJzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjA1LjAwI0RyaWVkIHR3aWdzIG9yIHN0aWNrcyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wNi4wMCNEcmllZCBncmFzcyBwbHVtZXMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDcuMDAjRHJpZWQgcHJlc3NlZCBmbG93ZXJzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjA4LjAwI0RyaWVkIGZsb3dlciBwZXRhbHMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMDAuMDAuMDAjRmVydGlsaXplcnMgYW5kIHBsYW50IG51dHJpZW50cyBhbmQgaGVyYmljaWRlcyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNS4wMC4wMCNPcmdhbmljIGZlcnRpbGl6ZXJzIGFuZCBwbGFudCBudXRyaWVudHMjMTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTUuMDEuMDAjTWFudXJlIG9yIGd1YW5vIzEwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE1LjAyLjAwI1BsYW50IGhvcm1vbmVzIzEwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE1LjAzLjAwI0Zpc2ggbWVhbCMxMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wMC4wMCNDaGVtaWNhbCBmZXJ0aWxpemVycyBhbmQgcGxhbnQgbnV0cmllbnRzIzEwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjAxLjAwI05pdHJvZ2Vub3VzIGZlcnRpbGl6ZXIjMTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDIuMDAjUG90YXNzaWMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wMy4wMCNQaG9zcGhhdGljIGZlcnRpbGl6ZXIjMTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDQuMDAjU3VscGh1cmljIGZlcnRpbGl6ZXIjMTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDUuMDAjTml0cm9nZW4gUGhvc3Bob3JvdXMgUG90YXNzaXVtIE1peHR1cmVzIChOUEspIzEwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE3LjAwLjAwI0hlcmJpY2lkZXMjMTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTcuMDEuMDAjV2VlZCBraWxsZXIjMTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTcuMDIuMDAjRnVuZ2ljaWRlcyMxMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMC4xOS4wMC4wMC4wMCNQZXN0IGNvbnRyb2wgcHJvZHVjdHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTUuMDAuMDAjSW5zZWN0aWNpZGVzIGFuZCBpbnNlY3QgY29udHJvbCB0cmFwcyMxMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMS4wMCNTcHJheSBpbnNlY3RpY2lkZXMjMTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTUuMDIuMDAjQmFpdCBpbnNlY3RpY2lkZXMjMTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTUuMDMuMDAjU2lsaWNpYyBhY2lkIzEwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE1LjA0LjAwI0ZseWluZyBpbnNlY3QgY29udHJvbCB0cmFwcyMxMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wMC4wMCNSb2RlbnRpY2lkZXMjMTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTYuMDEuMDAjRXh0cnVkZWQgYmFpdHMjMTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTYuMDIuMDAjTWVhbCBvciBwZWxsZXQgb3Igc2VlZCBiYWl0cyMxMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wMy4wMCNMaXF1aWQgYmFpdHMjMTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTYuMDQuMDAjVHJhY2tpbmcgcG93ZGVycyMxMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNy4wMC4wMCNBbmltYWwgY29udHJvbCB0cmFwcyMxMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNy4wMS4wMCNNb3VzZSBvciByYXQgdHJhcHMjMTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTcuMDIuMDAjV2lyZSBjYWdlIHRyYXBzIzEwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzExLjAwLjAwLjAwLjAwI01pbmVyYWwgYW5kIFRleHRpbGUgYW5kIEluZWRpYmxlIFBsYW50IGFuZCBBbmltYWwgTWF0ZXJpYWxzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEwLjAwLjAwLjAwI01pbmVyYWxzIGFuZCBvcmVzIGFuZCBtZXRhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDAuMDAjTWluZXJhbHMjMTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDEuMDAjTWljYSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wMi4wMCNFbWVyeSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wMy4wMCNRdWFydHojMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDQuMDAjUHlyaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjA1LjAwI1N1bHBodXIjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDYuMDAjQ2hhbGsjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDcuMDAjR3JhcGhpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDguMDAjRG9sb21pdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDkuMDAjTWFnbmVzaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjEwLjAwI0FzYmVzdG9zIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjExLjAwI0NhbGNpdW0jMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTIuMDAjQm9yYXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjEzLjAwI0NyeW9saXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjE0LjAwI0ZlbGRzcGFyIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjE1LjAwI0xldWNpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTYuMDAjTmVwaGVsaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjE3LjAwI1N0ZWF0aXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjE4LjAwI1RhbGMjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTkuMDAjRGlhbW9uZHMjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjAuMDAjR2FybmV0cyMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yMS4wMCNTaWxpY29uIGNhcmJpZGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjIuMDAjQWN0aXZhdGVkIGNhcmJvbiMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yMy4wMCNNdWxpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjQuMDAjRmxvdXJvc3BhciMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yNS4wMCNLZWlzZXJpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjYuMDAjQ2FybmFsbGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wMC4wMCNPcmVzIzExLjEwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjAxLjAwI0lyb24gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjAyLjAwI1RpdGFuaXVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wMy4wMCNVcmFuaXVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wNC4wMCNDb3BwZXIgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA1LjAwI0FsdW1pbnVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wNi4wMCNOaWNrZWwgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA3LjAwI1NpbHZlciBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDguMDAjTGVhZCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDkuMDAjWmluYyBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTAuMDAjVGluIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xMS4wMCNNYW5nYW5lc2Ugb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjEyLjAwI0Nocm9taXVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xMy4wMCNUdW5nc3RlbiBvciB3b2xmcmFtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xNC4wMCNNb2x5YmRlbnVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xNS4wMCNDb2JhbHQgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE2LjAwI0dvbGQgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE3LjAwI1RhbnRhbHVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xOC4wMCNQbGF0aW51bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTkuMDAjVmVybWljdWxpdGUgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjIwLjAwI1Rob3JpdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjIxLjAwI0t5YW5pdGUgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjIyLjAwI0FudGltb255IG9yZXMjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjMuMDAjWmlyY29uaXVtIG9yZXMjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDAuMDAjQmFzZSBtZXRhbHMjMTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDEuMDAjU2xhZyBvciBhc2gjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDIuMDAjTmF0dXJhbCBncmFwaGl0ZSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMy4wMCNUaXRhbml1bSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wNC4wMCNTdGVlbCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wNS4wMCNBbHVtaW51bSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wNi4wMCNOaWNrZWwjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDcuMDAjTWFnbmVzaXVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA4LjAwI0Jpc211dGgjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDkuMDAjQW50aW1vbnkjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTAuMDAjQ2FkbWl1bSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xMS4wMCNOb24gZmVycm91cyBhbGxveSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xMi4wMCNGZXJyb3VzIGFsbG95IzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjEzLjAwI0lyb24jMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTQuMDAjTGVhZCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xNS4wMCNDb3BwZXIjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTguMDAuMDAjUHJlY2lvdXMgbWV0YWxzIzExLjEwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEwLjE4LjAxLjAwI0dvbGQjMTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTguMDIuMDAjU2lsdmVyIzExLjEwLjE4LjAwLjAwCi11bnNwc2M3IzExLjEwLjE4LjAzLjAwI1BsYXRpbnVtIzExLjEwLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjAwLjAwLjAwI0VhcnRoIGFuZCBzdG9uZSMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNS4wMC4wMCNEaXJ0IGFuZCBzb2lsIzExLjExLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE1LjAxLjAwI1NvaWwjMTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTUuMDIuMDAjRmlsbCBkaXJ0IzExLjExLjE1LjAwLjAwCi11bnNwc2M3IzExLjExLjE1LjAzLjAwI1RvcHNvaWwjMTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDAuMDAjU3RvbmUjMTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDEuMDAjR3lwc3VtIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjAyLjAwI1RyYXZlcnRpbmUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDMuMDAjRWNhdXNzaW5lIG9yIGFsYWJhc3RlciMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wNC4wMCNHcmFuaXRlIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA1LjAwI01hcmJsZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wNi4wMCNTbGF0ZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wNy4wMCNTYW5kc3RvbmUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDguMDAjTGltZXN0b25lIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA5LjAwI0Jhc2FsdCMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4xMC4wMCNQdW1pY2Ugc3RvbmUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTcuMDAuMDAjU2FuZCMxMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNy4wMS4wMCNTaWxpY2Egc2FuZCMxMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wMC4wMCNDbGF5cyMxMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wMS4wMCNUZXJyYSBjb3R0YSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wMi4wMCNGaXJlY2xheSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wMy4wMCNLYW9saW4gb3Igb3RoZXIga2FvbGluaWMgY2xheXMjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDQuMDAjQmVudG9uaXRlIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA1LjAwI0FuZGFsdXNpdGUjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDYuMDAjTXVsbGl0ZSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wNy4wMCNDaGFtb3R0ZSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wOC4wMCNDb21tb24gY2xheSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wOS4wMCNCYWxsIGNsYXkjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMTAuMDAjRnVsbGVycyBlYXJ0aCMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4wMC4wMC4wMCNOb24gZWRpYmxlIHBsYW50IGFuZCBmb3Jlc3RyeSBwcm9kdWN0cyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNS4wMC4wMCNTYXAjMTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTUuMDIuMDAjUm9zaW4jMTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTUuMDMuMDAjTGFjIzExLjEyLjE1LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjAwLjAwI1dvb2QjMTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDMuMDAjTG9ncyMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wNC4wMCNTb2Z0IHRpbWJlciMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wNS4wMCNSYXR0YW4jMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDYuMDAjQ29yayMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wNy4wMCNXb29kIHB1bHAjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDguMDAjQmFtYm9vIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA5LjAwI1BseXdvb2QjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMTAuMDAjSGFyZHdvb2RzIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjAwLjAwI0ZvcmVzdHJ5IGJ5IHByb2R1Y3RzIzExLjEyLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjAxLjAwI1NhdyBkdXN0IzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjAyLjAwI1dvb2QgY2hpcHMjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDMuMDAjUGVhdCBtb3NzIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA0LjAwI1dvb2Qgc2hhdmluZ3MjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDUuMDAjQmFyayMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wNi4wMCNNdWxjaCMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wNy4wMCNXb29kIHdvb2wjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDguMDAjV29vZCBmbG91ciMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wOS4wMCNCYWxzYW1zIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjAwLjAwI1BsYW50IGZpYmVycyMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wMS4wMCNIZW1wIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjAyLjAwI0NvdHRvbiMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wMy4wMCNGbGF4IzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA0LjAwI0p1dGUjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDUuMDAjU2lzYWwjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDYuMDAjQ29jb251dCBmaWJyZXMgb3IgY29pciMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wNy4wMCNBYmFjYSBmaWJlcnMjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDguMDAjUmFtaWUjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDkuMDAjU3RyYXcjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMTAuMDAjQnJvb20gY29ybiBvciBpc3RsZSBvciBwaWFzc2F2YSMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOS4wMC4wMCNQZXJmdW1lcnkgcHJvZHVjdHMjMTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTkuMDEuMDAjTGljb3JpY2Ugcm9vdHMjMTEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMDAuMDAuMDAjTm9uIGVkaWJsZSBhbmltYWwgcHJvZHVjdHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDAuMDAjQW5pbWFsIGhpZGVzIGFuZCBza2lucyBhbmQgYW5pbWFsIHRleHRpbGUgbWF0ZXJpYWxzIzExLjEzLjAwLjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjAxLjAwI0ZlYXRoZXJzIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjAyLjAwI0Z1cnMjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDMuMDAjQW5pbWFsIGhhaXIjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDQuMDAjSGlkZXMjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDUuMDAjVW5wcm9jZXNzZWQgbW9oYWlyIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjA2LjAwI1VucHJvY2Vzc2VkIHdvb2wjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDcuMDAjU3VlZGUjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDguMDAjRnVsbCBncmFpbiBsZWF0aGVyIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAwLjAwI090aGVyIGFuaW1hbCBwcm9kdWN0cyMxMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wMS4wMCNJdm9yeSMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wMi4wMCNTZW1lbiMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wMy4wMCNFeGNyZXRpb25zIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA0LjAwI0Zpc2ggZWdncyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wNS4wMCNCb25lcyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wNi4wMCNBbmltYWwgaG9ybnMjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDcuMDAjRW1icnlvcyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wOC4wMCNTaGVsbCBhcnRpY2xlcyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4wMC4wMC4wMCNTY3JhcCBhbmQgd2FzdGUgbWF0ZXJpYWxzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjE0LjE1LjAwLjAwI01ldGFsIHdhc3RlIGFuZCBzY3JhcCMxMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNS4wMS4wMCNGZXJyb3VzIG1ldGFsIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE1LjAwLjAwCi11bnNwc2M3IzExLjE0LjE1LjAyLjAwI05vbiBmZXJyb3VzIG1ldGFsIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE1LjAwLjAwCi11bnNwc2M3IzExLjE0LjE1LjAzLjAwI0F1dG9tb3RpdmUgd3JlY2tpbmcgZm9yIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE1LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjAwLjAwI05vbiBtZXRhbGxpYyB3YXN0ZSBhbmQgc2NyYXAjMTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDEuMDAjVGV4dGlsZSB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wMi4wMCNQbGFzdGljIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjAzLjAwI09pbCB3YXN0ZXMjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDQuMDAjUGFwZXIgd2FzdGVzIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA1LjAwI0dsYXNzIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA2LjAwI1dvb2Qgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDcuMDAjUnViYmVyIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA4LjAwI0hhemFyZG91cyB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wOS4wMCNDb21wb3NpdGlvbiBsZWF0aGVyIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjEwLjAwI0xlYXRoZXIgd2FzdGUgYW5kIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE3LjAwLjAwI0Zvb2QgYW5kIHRvYmFjY28gd2FzdGUgYW5kIHNjcmFwIzExLjE0LjAwLjAwLjAwCi11bnNwc2M3IzExLjE0LjE3LjAxLjAwI0Zvb2Qgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTcuMDIuMDAjVG9iYWNjbyB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4wMC4wMC4wMCNGaWJlcnMgYW5kIHRocmVhZHMgYW5kIHlhcm5zIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjAwLjAwI0ZpYmVycyMxMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wMS4wMCNBY2V0YXRlIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wMi4wMCNOeWxvbiBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDMuMDAjUG9seWVzdGVyIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wNC4wMCNBY3J5bGljIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wNS4wMCNWaXNjb3NlIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wNi4wMCNSYXlvbiBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDcuMDAjQ290dG9uIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wOC4wMCNXb29sIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wOS4wMCNTaWxrIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xMC4wMCNWZWdldGFibGUgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjExLjAwI1BvbHlwcm9weWxlbmUgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjEyLjAwI0dsYXNzIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xMy4wMCNDZXJhbWljIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xNC4wMCNQb2x5bWVyIGFyYW1pZCBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTUuMDAjQXNiZXN0b3MgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjAwLjAwI1RocmVhZHMjMTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDEuMDAjQ290dG9uIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wMi4wMCNTaWxrIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wMy4wMCNQb2x5ZXN0ZXIgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA0LjAwI1BvbHlhbWlkZSB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDUuMDAjQmlzbWFsZW1pZGUgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA2LjAwI0ZpYmVyZ2xhc3MgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA3LjAwI0dyYXBoaXRlIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wOC4wMCNOeWxvbiB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDkuMDAjUmVzaW4gaW1wcmVnbmF0ZWQgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjEwLjAwI1J1YmJlciBvciBsYXRleCB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMTEuMDAjU3BhbmRleCB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDAuMDAjWWFybnMjMTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDEuMDAjV29vbCB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjAyLjAwI0NvdHRvbiB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjAzLjAwI1BvbHllc3RlciB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA0LjAwI0FjcnlsaWMgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wNS4wMCNTaWxrIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDYuMDAjUmFtaWUgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wNy4wMCNGbGF4IHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDguMDAjQW5pbWFsIGhhaXIgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wOS4wMCNTeW50aGV0aWMgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4xMC4wMCNKdXRlIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMTEuMDAjQ29pciB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjEyLjAwI1BhcGVyIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMTMuMDAjSGVtcCB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE2LjAwLjAwLjAwI0ZhYnJpY3MgYW5kIGxlYXRoZXIgbWF0ZXJpYWxzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE1LjAwLjAwI1NpbGsgZmFicmljcyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNS4wMS4wMCNQbGFpbiB3ZWF2ZSBzaWxrIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDIuMDAjSmFjcXVhcmQgd2VhdmUgc2lsayBmYWJyaWNzIzExLjE2LjE1LjAwLjAwCi11bnNwc2M3IzExLjE2LjE1LjAzLjAwI0tuaXQgc2lsayBmYWJyaWNzIzExLjE2LjE1LjAwLjAwCi11bnNwc2M3IzExLjE2LjE1LjA0LjAwI1NpbGsgdmVsdmV0cyBmYWJyaWNzIzExLjE2LjE1LjAwLjAwCi11bnNwc2M3IzExLjE2LjE2LjAwLjAwI1dvb2wgZmFicmljcyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNi4wMS4wMCNQbGFpbiB3ZWF2ZSB3b29sIGZhYnJpY3MjMTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTYuMDIuMDAjSmFjcXVhcmQgd2VhdmUgd29vbCBmYWJyaWNzIzExLjE2LjE2LjAwLjAwCi11bnNwc2M3IzExLjE2LjE2LjAzLjAwI0tuaXQgd29vbCBmYWJyaWNzIzExLjE2LjE2LjAwLjAwCi11bnNwc2M3IzExLjE2LjE3LjAwLjAwI0NvdHRvbiBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE3LjAxLjAwI1BsYWluIHdlYXZlIGNvdHRvbiBmYWJyaWNzIzExLjE2LjE3LjAwLjAwCi11bnNwc2M3IzExLjE2LjE3LjAyLjAwI1R3aWxsIHdlYXZlIGNvdHRvbiBmYWJyaWNzIzExLjE2LjE3LjAwLjAwCi11bnNwc2M3IzExLjE2LjE3LjAzLjAwI0NvdHRvbiBveGZvcmQgY2xvdGhzIzExLjE2LjE3LjAwLjAwCi11bnNwc2M3IzExLjE2LjE3LjA0LjAwI0tuaXQgY290dG9uIGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDUuMDAjQ290dG9uIHZlbHZldCBmYWJyaWNzIzExLjE2LjE3LjAwLjAwCi11bnNwc2M3IzExLjE2LjE4LjAwLjAwI1N5bnRoZXRpYyBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE4LjAxLjAwI1BsYWluIHdlYXZlIHN5bnRoZXRpYyBmYWJyaWNzIzExLjE2LjE4LjAwLjAwCi11bnNwc2M3IzExLjE2LjE4LjAyLjAwI0phY3F1YXJkIHdlYXZlIHN5bnRoZXRpYyBmYWJyaWNzIzExLjE2LjE4LjAwLjAwCi11bnNwc2M3IzExLjE2LjE4LjAzLjAwI0RvYmJ5IHdlYXZlIHN5bnRoZXRpYyBmYWJyaWNzIzExLjE2LjE4LjAwLjAwCi11bnNwc2M3IzExLjE2LjE4LjA0LjAwI0tuaXQgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDUuMDAjU3ludGhldGljIHZlbHZldCBmYWJyaWNzIzExLjE2LjE4LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjAwLjAwI0FydGlmaWNpYWwgZmFicmljcyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wMS4wMCNQbGFpbiB3ZWF2ZSBhcnRpZmljaWFsIGZhYnJpY3MjMTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDIuMDAjSmFjcXVhcmQgd2VhdmUgYXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjAzLjAwI0RvYmJ5IHdlYXZlIGFydGlmaWNpYWwgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wNC4wMCNLbml0IGFydGlmaWNpYWwgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wNS4wMCNBcnRpZmljYWwgdmVsdmV0IGZhYnJpY3MjMTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjAuMDAuMDAjRmFicmljcyBvZiB2ZWdldGFibGUgbWF0ZXJpYWwgb3RoZXIgdGhhbiBjb3R0b24jMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjAuMDEuMDAjUGxhaW4gd2VhdmUgbm9uIGNvdHRvbiB2ZWdldGFibGUgZmliZXIgZmFicmljcyMxMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMi4wMCNLbml0IG5vbiBjb3R0b24gdmVnZXRhYmxlIGZpYmVyIGZhYnJpY3MjMTEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjAuMDMuMDAjSGVzc2lhbiBvciBoZW1wIG9yIGp1dGUgY2xvdGgjMTEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDAuMDAjU3BlY2lhbHR5IGZhYnJpY3Mgb3IgY2xvdGgjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDEuMDAjQ2hlZXNlIGNsb3RoIG9yIGZhYnJpYyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMi4wMCNCaXNtYWxlbWlkZSBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDMuMDAjRmliZXJnbGFzcyBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDQuMDAjR3JhcGhpdGUgZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA1LjAwI0dsYXNzIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wNy4wMCNSZXNpbiBpbXByZWduYXRlZCBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDguMDAjV2lyZSBtZXNoIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wOS4wMCNMYWNlIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjEwLjAwI05ldHRpbmcjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTEuMDAjTWVzaCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xMi4wMCNDb2F0ZWQgZmFicmljcyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xMy4wMCNVcGhvbHN0ZXJ5IGZhYnJpY3MjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTQuMDAjSG9vayBhbmQgbG9vcCBmYWJyaWNzIG9yIHRhcGVzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjE1LjAwI0VsYXN0aWMgYnJhaWQjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTYuMDAjQnVybGFwIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjE3LjAwI1J1YmJlciBmYWJyaWNzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjE4LjAwI1BhcGVyIHlhcm4gZmFicmljIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjE5LjAwI1RyYWNpbmcgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMjAuMDAjQm9sdGluZyBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4yMS4wMCNPcm5hbWVudGFsIHRyaW1taW5ncyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMi4wMC4wMCNOb253b3ZlbiBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIyLjAxLjAwI1NwdW5ib25kZWQgbm9ud292ZW5zIzExLjE2LjIyLjAwLjAwCi11bnNwc2M3IzExLjE2LjIyLjAyLjAwI1NwdW5sYWNlZCBub253b3ZlbnMjMTEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDAuMDAjTGVhdGhlcnMjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDEuMDAjQ2hhbW9pcyBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjAyLjAwI0dvYXQgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wMy4wMCNTaGVlcCBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA0LjAwI1BhdGVudCBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA1LjAwI0NvdyBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA2LjAwI1BpZyBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA3LjAwI1N5bnRoZXRpYyBvciBpbWl0YXRpb24gbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wOC4wMCNCdWZmYWxvIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDkuMDAjUmVwdGlsZSBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzEyLjAwLjAwLjAwLjAwI0NoZW1pY2FscyBpbmNsdWRpbmcgQmlvIENoZW1pY2FscyBhbmQgR2FzIE1hdGVyaWFscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4wMC4wMC4wMCNPcmdhbmljIGNoZW1pY2FscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wMC4wMCNBbGNvaG9sIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjAxLjAwI1NhdHVyYXRlZCBtb25vaHlkcmljIGFsY29ob2wjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDIuMDAjSXNvcHJvcHlsIGFsY29ob2wjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDMuMDAjVW5zYXR1cmF0ZWQgbW9ub2h5ZHJpYyBhbGNvaG9sIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjA0LjAwI0N5Y2xpYyBhbGNvaG9sIG9yIHRoZWlyIGhhbG9nZW5hdGVkIG9yIHN1bHBob25hdGVkIG9yIG5pdHJhdGVkIGRlcml2YXRpdmVzIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjA1LjAwI1BoZW5vbCBhbGNvaG9sIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjA2LjAwI0hhbG9nZW5hdGVkIG9yIHN1bHBob25hdGVkIG9yIG5pdHJhdGVkIG9yIG5pdHJvc2F0ZWQgZGVyaXZhdGl2ZXMgb2YgcGhlbm9scyMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wNy4wMCNNZXRoeWxhdGVkIHNwaXJpdCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wMC4wMCNFdGhlcnMgYW5kIGFsY29ob2wgcGVyb3hpZGVzIGFuZCBldGhlciBwZXJveGlkZXMgYW5kIG90aGVyIG9yZ2FuaWMgY29tcG91bmRzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjAxLjAwI0FjeWNsaWMgZXRoZXJzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjAyLjAwI0N5Y2xvbmljIG9yIGN5Y2xlbmljIG9yIGN5Y2xvdGVycGVuaWMgZXRoZXJzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjAzLjAwI0V0aGVyIG9yIGFyb21hdGljIGV0aGVyIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA0LjAwI0V0aGVyIGFsY29ob2wjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDUuMDAjRXRoZXIgcGhlbm9scyBvciBldGhlciBhbGNvaG9sIHBoZW5vbHMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDYuMDAjQWxjb2hvbCBwZXJveGlkZXMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDcuMDAjT3hpcmFuZSBvciBldGh5bGVuZSBveGlkZSMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wOC4wMCNFcGljaGxvcm9oeWRyaW4gb3IgMSBjaGxvcm8gMiBvciAzIGVwb3h5cHJvcGFuZSMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wOS4wMCNFcG94aWRlcyBvciBlcG94eWFsY29ob2xzIG9yIGVwb3h5cGhlbm9scyBvciBlcG94eWV0aGVycyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xMC4wMCNBY2V0YWxzIG9yIGtlbWlhY2V0YWxzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjExLjAwI0FjeWNsaWMgYWxkZWh5ZGVzIHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjEyLjAwI0N5Y2xpYyBhbGRlaHlkZXMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTMuMDAjQWxjb2hvbCBhbGRlaHlkZSMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xNC4wMCNQYXJhZm9ybWFsZGVoeWRlIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE1LjAwI0FsZGVoeWRlcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xNi4wMCNBY3ljbGljIGtldG9uZXMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTcuMDAjQ3ljbG9uaWMgb3IgY3ljbGVuaWMgb3IgY3ljbG90ZXJwZW5pYyBrZXRvbmVzIHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE4LjAwI0tldG9uZXMgb3IgYXJvbWF0aWMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTkuMDAjS2V0b25lIGFsY29ob2wgb3Iga2V0b25lIGFsZGVoeWRlcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4yMC4wMCNLZXRvbmUgcGhlbm9scyBvciBrZXRvbmVzIHdpdGggb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjIxLjAwI1F1aW5vbmVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjIyLjAwI1Jlbm5ldCB0YWJsZXRzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjIzLjAwI0VuenltZXMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDAuMDAjTW9ub2NhcmJveHlsaWMgZmF0dHkgYWNpZHMgb3IgaW5kdXN0cmlhbCBhY2lkIG9pbHMgZnJvbSByZWZpbmluZyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wMS4wMCNPbGVpYyBhY2lkIzEyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjAyLjAwI0luZHVzdHJpYWwgZmF0dHkgYWxjb2hvbHMjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDMuMDAjU3RlYXJpYyBhY2lkIzEyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjA0LjAwI1RhbGwgb2lsIGZhdHR5IGFjaWRzIzEyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjA1LjAwI0FjaWQgb2lscyBmcm9tIHJlZmluaW5nIzEyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjAwLjAwI0NhcmJveHlsaWMgYWNpZHMgYW5kIHRoZWlyIGFuaHlkcmlkZXMgYW5kIGhhbGlkZXMgYW5kIHBlcm94aWRlcyBhbmQgcGVyb3h5YWNpZHMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDEuMDAjRm9ybWljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wMi4wMCNBY2V0aWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgIGFjZXRpYyBhbmh5ZHJpZGUjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDMuMDAjRXN0ZXJzIG9mIGFjZXRpYyBhY2lkIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA0LjAwI01vbm8gb3IgZGkgdHJpY2hsb3JhY2V0aWMgYWNpZCBvciB0aGVpciBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDUuMDAjUHJvcGlvbmljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wNi4wMCNCdXR5cmljIGFjaWRzIG9yIHZhbGVyaWMgYWNpZHMgb3IgdGhlaXIgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA3LjAwI1BhbG1pdGljIGFjaWRzIG9yIHN0ZWFyaWMgYWNpZHMgb3IgdGhlaXIgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA4LjAwI1NhdHVyYXRlZCBhY3J5bGljIG1vbm9jYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA5LjAwI1Vuc2F0dXJhdGVkIGFjeWNsaWMgbW9ub2NhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTAuMDAjQ3ljbG9uaWMgb3IgY3ljbGVuaWMgb3IgY3ljbG90ZXJwZW5pYyBtb25vY2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xMS4wMCNBcm9tYXRpYyBtb25vY2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xMi4wMCNBY3ljbGljIHBvbHljYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjEzLjAwI0N5Y2xvbmljIG9yIGN5Y2xlbmljIG9yIGN5Y2xvdGVycGVuaWMgcG9seWNhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTQuMDAjQXJvbWF0aWMgcG9seWNhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTUuMDAjTGFjdGljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNi4wMCNUYXJ0YXJpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTcuMDAjQXRyaWMgYWNpZCBvciB0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTguMDAjR2x1Y2FyaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE5LjAwI1BoZW55bGdseW9jb2xpYyBhY2lkIG9yIG1hbmRlbGljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4yMC4wMCNDYXJib3h5bGljIGFjaWRzIHdpdGggYWxjb2hvbCBmdW5jdGlvbiBidXQgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMjEuMDAjQ2FyYm94eWxpYyBhY2lkcyB3aXRoIHBoZW5vbCBmdW5jdGlvbiBidXQgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMjIuMDAjQ2FyYm94eWxpYyBhY2lkcyB3aXRoIGFsZGVoeWRlIG9yIGtldG9uZSBmdW5jdGlvbiMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOS4wMC4wMCNBbWluZSBhbmQgb3h5Z2VuIGZ1bmN0aW9uIGFtaW5vIGNvbXBvdW5kcyBhbmQgdXJlaW5lcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOS4wMS4wMCNHbHV0YW1pYyBhY2lkIG9yIGl0cyBzYWx0cyMxMi4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMC4wMCNPcmdhbm8gc3VsZnVyIGNvbXBvdW5kcyBhbmQgb3RoZXIgb3JnYW5vIGlub3JnYW5pYyBjb21wb3VuZHMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDEuMDAjT3JnYW5vIHN1bGZ1ciBjb21wb3VuZHMjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDIuMDAjT3RoZXIgb3JnYW5vIGlub3JnYW5pYyBjb21wb3VuZHMjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDMuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYW4gdW5mdXNlZCBmdXJhbiByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDQuMDAjTGFjdGluZXMjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDUuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYW4gdW5mdXNlZCBpbWlkYXpvbGUgcmluZyBpbiB0aGUgc3RydWN0dXJlIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA2LjAwI0NvbXBvdW5kcyBjb250YWluaW5nIGFuIHVuZnVzZWQgcHlyaWRpbmUgcmluZyBpbiB0aGUgc3RydWN0dXJlIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA3LjAwI0NvbXBvdW5kcyBjb250YWluaW5nIGEgcXVpbm9saW5lIG9yIGlzb3F1aW5vbGluZSByaW5nIHN5c3RlbSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wOC4wMCNMYWN0YW1zIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA5LjAwI0hldGVyb2N5Y2xpYyBjb21wb3VuZHMgd2l0aCBuaXRyb2dlbiBoZXRlcm8gYXRvbSBvbmx5IzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjEwLjAwI0NvbXBvdW5kcyBjb250YWluaW5nIGFuIHVuZnVzZWQgdGhpYXpvbGUgcmluZyBpbiB0aGUgc3RydWN0dXJlIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjAwLjAwI0h5ZHJvY2FyYm9ucyBhbmQgdGhlaXIgaGFsb2dlbmF0ZWQgYW5kIHN1bHBob25hdGVkIGFuZCBuaXRyb3NhdGVkIGRlcml2YXRpdmVzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjAxLjAwI1NhdHVyYXRlZCBhY3ljbGljIGh5ZHJvY2FyYm9ucyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wMi4wMCNVbnNhdHVyYXRlZCBhY3ljbGljIGh5ZHJvY2FyYm9ucyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wMy4wMCNDeWNsaWMgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjA0LjAwI0hhbG9nZW50YXRlZCBkZXJpdmF0aXZlcyBvZiBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDUuMDAjUmVmcmlnZXJhbnRzIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjA2LjAwI1N1bHBob25hdGVkIG9yIG5pdHJhdGVkIG9yIG5pdHJvc2F0ZWQgZGVyaXZhdGl2ZXMgb2YgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjA3LjAwI1BhcmFmZmluIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIyLjAwLjAwI1Bob3NwaG9yaWMgZXN0ZXJzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIG9mIG90aGVyIG9yZ2FuaWMgYWNpZHMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjIuMDEuMDAjUGhvc3Bob3JpYyBlc3RlcnMgb3IgdGhlaXIgc2FsdHMjMTIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMDAuMDAuMDAjSW5vcmdhbmljIGNoZW1pY2FscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wMC4wMCNDaGVtaWNhbCBlbGVtZW50cyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wMS4wMCNDaGxvcmluZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wMi4wMCNGbHVvcmluZSBvciBicm9taW5lIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAzLjAwI0NobG9yaW5lIGxpcXVpZCBnYXMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDQuMDAjU3VibGltZXMgb3IgcHJlY2lwaXRhdGVkIHN1bHBodXIgb3IgY29sbG9pZGFsIHN1bHBodXIjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDUuMDAjQm9yb24gb3IgdGVsbHVyaXVtIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA2LjAwI1NpbGljb24jMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDcuMDAjQWxrYWxpIG1ldGFscyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wOC4wMCNBbGthbGluZSBlYXJ0aCBtZXRhbHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDkuMDAjTWVyY3VyeSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xMC4wMCNIeWRyb2dlbiBjaGxvcmlkZSBvciBoeWRyb2NobG9yaWMgYWNpZCMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xMS4wMCNDaGxvcm9zdWxmdXJpYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjEyLjAwI1N1bHBodXJpYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjEzLjAwI1Bob3NwaG9ydXMgcGVudGFveGlkZSBvciBwaG9zcGhvcmljIGFjaWQgb3IgcG9seXBob3NwaG9yaWMgYWNpZHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTQuMDAjT3hpZGVzIG9mIGJvcm9uIG9yIGJvcmljIGFjaWRzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE1LjAwI0h5ZHJvZ2VuIGZsdW9yaWRlIG9yIGh5ZHJvZmx1b3JpYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE2LjAwI1NpbGljb24gZGlveGlkZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xNy4wMCNTdWxwaHVyIGRpb3hpZGUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTguMDAjSHlkcm9jeWFuaWMgYWNpZCMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xOS4wMCNIYWxpZGVzIG9yIGhhbGlkZSBveGlkZXMgb2Ygbm9uIG1ldGFscyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4yMC4wMCNTdWxwaGlkZXMgb2Ygbm9uIG1ldGFscyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4yMS4wMCNTb2RpdW0gb3IgcG90YXNzaXVtIGh5ZHJveGlkZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4yMi4wMCNIeWRyb3hpZGUgb3IgcGVyb3hpZGUgb2YgbWFnbmVzaXVtIG9yIG94aWRlcyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4yMy4wMCNBbHVtaW51bSBoeWRyb3hpZGUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMjQuMDAjSHlkcm94aWRlIG9yIGh5ZHJveHlsYW1pbmUgb3IgdGhlaXIgaW5vcmdhbmljIHNhbHRzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjAwLjAwI01ldGFsIG94aWRlcyBhbmQgaHlkcm94aWRlcyBhbmQgcGVyb3hpZGVzIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjAxLjAwI1ppbmMgb3hpZGUgb3IgemluYyBwZXJveGlkZSMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wMi4wMCNDaHJvbWl1bSBveGlkZXMgb3IgaHlkcm94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wMy4wMCNNYW5nYW5lc2Ugb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA0LjAwI0lyb24gb3hpZGVzIG9yIGh5ZHJveGlkZXMgb3IgZWFydGggY29sb3VycyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wNS4wMCNDb2JhbHQgb3hpZGVzIG9yIGh5ZHJveGlkZXMgb3IgY29tbWVyY2lhbCBjb2JhbHQgb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA2LjAwI1RpdGFuaXVtIG94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wNy4wMCNMZWFkIG94aWRlcyBvciByZWQgbGVhZCBvciBvcmFuZ2UgbGVhZCMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wOC4wMCNMaXRoaXVtIG94aWRlIG9yIGh5ZHJveGlkZSMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wOS4wMCNWYW5hZGl1bSBveGlkZXMgb3IgaHlkcm94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xMC4wMCNOaWNrZWwgb3hpZGVzIG9yIGh5ZHJveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMTEuMDAjQ29wcGVyIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjEyLjAwI0dlcm1hbml1bSBveGlkZXMgb3IgemlyY29uaXVtIGRpb3hpZGUjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMTMuMDAjTW9seWJkZW51bSBveGlkZXMgb3IgaHlkcm94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xNC4wMCNBbnRpbW9ueSBveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDAuMDAjU2FsdHMgb2Ygb3hvbWV0YWxsaWMgYW5kIHBlcm94b21ldGFsbGljIGFjaWRzIGFuZCBvdGhlciBpbm9yZ2FuaWMgYWNpZHMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDEuMDAjQWx1bWluYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMi4wMCNaaW5jIG9yIGxlYWQgY2hyb21hdGUjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDMuMDAjU29kaXVtIGRpY2hyb21hdGUjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDQuMDAjUG90YXNzaXVtIGRpY2hyb21hdGUjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDUuMDAjT3RoZXIgY2hyb21hdGUgb3IgZGljaHJvbWF0ZSBvciBwZXJveG9jaHJvbWF0ZXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDYuMDAjTWFuZ2FuaXRlcyBvciBtYW5nYW5hdGVzIG9yIHBlcm1hbmdhbmF0ZXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDcuMDAjTW9seWJkYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wOC4wMCNUdW5nc3RhdGVzIG9yIHdvbGZyYW1hdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA5LjAwI1NpbHZlciBjb21wb3VuZHMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMTAuMDAjR29sZCBjb21wb3VuZHMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMTEuMDAjT3RoZXIgY29tcG91bmRzIG9yIGFtYWxnYW1zIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjEyLjAwI0FtYWxnYW1zIG90aGVyIHRoYW4gYW1hbGdhbXMgb2YgcHJlY2lvdXMgbWV0YWxzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjAwLjAwI1NhbHRzIGFuZCBwZXJveHlzYWx0cyBvZiBpbm9yZ2FuaWMgYWNpZHMgYW5kIG1ldGFsIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjAxLjAwI0ZsdW9yaWRlcyBvciBmbHVvcm9zaWxpY2F0ZXMgb3IgZmx1b3JvYWx1bWluYXRlcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wMi4wMCNDaGxvcmlkZXMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDMuMDAjU29kaXVtIGNobG9yaWRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA0LjAwI1NhbCBhbW1vbmlhYyBibG9ja3MjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDUuMDAjUG90YXNzaXVtIGlvZGluYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA2LjAwI1N1bHBoaWRlcyBvciBwb2x5c3VsZmlkZXMgb3IgZGl0aGlvbml0ZXMgb3IgIHN1bGZveHlsYXRlcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wNy4wMCNTdWxwaGl0ZXMgb3IgdGhpb3N1bGZhdGVzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA4LjAwI0FsdW1pbnVtIHN1bHBoYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA5LjAwI0NvbGxvaWRhbCBwcmVjaW91cyBtZXRhbHMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTAuMDAjRmVycm91cyBzdWxwaGF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xMS4wMCNTaWx2ZXIgbml0cmF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xMi4wMCNTb2RpdW0gZGloeWRyb2dlcm5vcnRob3Bob3NwaGF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xMy4wMCNTb2RpdW0gcGhvc3BoYXRlIGRpYmFzaWMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTQuMDAjU29kaXVtIGJpY2FyYm9uYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjE1LjAwI1RyaSBzb2RpdW0gY2l0cmF0ZSBkaSBoeWRyYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjE2LjAwI1NvZGl1bSBjYXJib25hdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTcuMDAjTWV0YWxsaWMgc29kaXVtIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjE4LjAwI1NvZGl1bSBzaWxpY2F0ZSBsaXF1aWRzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjE5LjAwI1NvZGl1bSBzaWxpY2F0ZSBiaW5kZXJzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjIwLjAwLjAwI0h5ZHJvZ2VuIHBlcm94aWRlIGFuZCBoeWRyaWRlcyBhbmQgbml0cmlkZXMgYW5kIGFzaWRlcyBhbmQgc2lsaWNpZGVzIGFuZCBib3JpZGVzIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIwLjAxLjAwI0h5ZHJvZ2VuIHBlcm94aWRlIzEyLjExLjIwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIwLjAyLjAwI1Bob3NwaGlkZXMjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDMuMDAjQ2FyYmlkZXMjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDQuMDAjQ2FsY2l1bSBjYXJiaWRlIzEyLjExLjIwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIwLjA1LjAwI0Jyb21pZGVzIzEyLjExLjIwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjAwLjAwI0lzb3RvcGVzIGFuZCB0aGVpciBjb21wb3VuZHMgaW5vcmdhbmljIGFuZCBvcmdhbmljIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjAxLjAwI0RldXRlcml1bSMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wMi4wMCNEZXV0ZXJhdGVkIHNvbHZlbnRzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjAzLjAwI0hlYXZ5IHdhdGVyIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjA0LjAwI0FscGhhIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDUuMDAjQmV0YSBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjA2LjAwI0NvYmFsdCBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjA3LjAwI0dhbW1hIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDguMDAjTmV1dHJvbiBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjA5LjAwI1JhZGlvaXNvdG9wZSBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjEwLjAwI0NhbGlicmF0aW9uIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTEuMDAjSW4gdml2byBwcm9kdWN0cyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xMi4wMCNSYWRpb2NoZW1pY2FsIGlzb3RvcGVzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjEzLjAwI1JhZGlvZ3JhcGhpYyBzb3VyY2UjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTQuMDAjUmFkaW9pbW11bm9hc3NheSBpc290b3BlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xNS4wMCNUcml0aXVtIHRhcmdldHMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTYuMDAjRXhjaXRhdGlvbiBzb3VyY2Ugb3IgYW5udWxhciMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xNy4wMCNSYWRpb3BoYXJtYWNldXRpY2FsIGNvbXBvdW5kcyBmb3IgbGFiZWxsaW5nIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE4LjAwI0NoZW1pY2FscyBsYWJlbGxlZCBDMTQjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTkuMDAjRmlzc2lvbmFibGUgaXNvdG9wZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMjAuMDAjSW4gdml2byByYWRpb2FjdGl2ZSBpc290b3BlIHByb2R1Y3RzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIyLjAwLjAwI0N5YW5pZGVzIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIyLjAxLjAwI0N5YW5pZGVzIG9yIGN5YW5pZGUgb3hpZGVzIG9mIHNvZGl1bSMxMi4xMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMi4wMi4wMCNDb21wbGV4IGN5YW5pZGVzIG9yIHRoaW9jeWFuYXRlcyMxMi4xMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMi4wMy4wMCNDeWFuaWRlcyBvciBjeWFuaWRlIG94aWRlcyMxMi4xMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4xMi4wMC4wMC4wMCNHYXNlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wMC4wMCNJbmR1c3RyaWFsIGdhc2VzIzEyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjAxLjAwI05pdHJvdXMgb3hpZGUgZ2FzIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjAyLjAwI0hlbGl1bSBnYXMjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDQuMDAjQ2FyYm9uIG1vbm94aWRlIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA1LjAwI0h5ZHJvZ2VuIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wNi4wMCNDYXJib24gZGlveGlkZSMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wNy4wMCNOaXRyb2dlbiBnYXMjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDguMDAjTmVvbiBnYXMjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMTAuMDAjT3h5Z2VuIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjAwLjAwI1JhcmUgZ2FzZXMjMTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDEuMDAjWGVub24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjAyLjAwI1JhZG9uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wMy4wMCNLcnlwdG9uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wNC4wMCNBcmdvbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDkuMDAjWGVub24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjEwLjAwI1JhZG9uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4xMS4wMCNLcnlwdG9uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4xMi4wMCNBcmdvbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMDAuMDAuMDAjRXhwbG9zaXZlIG1hdGVyaWFscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wMC4wMCNFeHBsb3NpdmVzIzEyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjAxLjAwI0R5bmFtaXRlIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjAyLjAwI0V4cGxvc2l2ZSBjYXJ0cmlkZ2VzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjAzLjAwI1Byb3BlbGxhbnQgZXhwbG9zaXZlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wNC4wMCNFeHBsb3NpdmUgY2hhcmdlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wNS4wMCNQbGFzdGljIGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDYuMDAjQWx1bWluaXplZCBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA3LjAwI0FtbW9uaXVtIG5pdHJhdGUgZXhwbG9zaXZlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wOC4wMCNOaXRyb2dseWNlcmluIHBvd2RlciBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjAwLjAwI1B5cm90ZWNobmljcyMxMi4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wMS4wMCNGaXJld29ya3MjMTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDIuMDAjRm9nIHNpZ25hbHMjMTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDMuMDAjUmFpbiByb2NrZXRzIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjA0LjAwI0ZsYXJlcyMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wNS4wMCNQeXJvdGVjaG5pYyBtYXRlcmlhbHMgZm9yIHRoZWF0ZXIgb3IgdGVsZXZpc2lvbiMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wMC4wMCNJZ25pdGVycyMxMi4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wMS4wMCNCbGFzdGluZyBjYXBzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjAyLjAwI0RldG9uYXRvcnMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDMuMDAjRXhwbG9zaXZlcyBmdXNlcyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wNC4wMCNFeHBsb3NpdmUgaW5pdGlhdG9ycyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wNS4wMCNFeHBsb3NpdmUgcHJpbWVycyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wNi4wMCNNYXRjaGVzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA3LjAwI0xpZ2h0ZXJzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjAwLjAwI1Byb3BlbGxhbnRzIzEyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjAxLjAwI1Bvd2RlciBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wMi4wMCNTb2xpZCBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wMy4wMCNHdW4gcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDQuMDAjSGlnaCBlbmVyZ3kgcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDUuMDAjR2VsbGVkIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjA2LjAwI0h5YnJpZCBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4wMC4wMC4wMCNFbGVtZW50cyBhbmQgZ2FzZXMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDAuMDAjRWFydGggbWV0YWxzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjAxLjAwI0JlcnlsbGl1bSAoQmUpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjAyLjAwI01hZ25lc2l1bSAoTWcpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjAzLjAwI0NhbGNpdW0gKENhKSMxMi4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wNC4wMCNTdHJvbnRpdW0gKFNyKSMxMi4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wNS4wMCNCYXJpdW0gKEJhKSMxMi4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wNi4wMCNSYWRpdW0gKFJhKSMxMi4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wMC4wMCNSYXJlIGVhcnRoIG1ldGFscyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wMS4wMCNDZXJpdW0gKENlKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wMi4wMCNEeXNwcm9zaXVtIChEeSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDMuMDAjRXJiaXVtIChFcikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDQuMDAjRXVyb3BpdW0gKEV1KSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wNS4wMCNHYWRvbGluaXVtIChHZCkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDYuMDAjSG9sbWl1bSAoSG8pIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA3LjAwI0xhbnRoYW51bSAoTGEpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA4LjAwI0x1dGV0aXVtIChMdSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDkuMDAjTmVvZHltaXVtIChOZCkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTAuMDAjUHJhc2VvZHltaXVtIChQcikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTEuMDAjUHJvbWV0aGl1bSAoUHIpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjEyLjAwI1NhbWFyaXVtIChTbSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTMuMDAjU2NhbmRpdW0gKFNjKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xNC4wMCNUZXJiaXVtIChUYikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTUuMDAjVGh1bGl1bSAoVG0pIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjE2LjAwI1l0dGVyYml1bSAoWWIpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjE3LjAwI1l0dHJpdW0gKFkpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjAwLjAwI1RyYW5zaXRpb24gbWV0YWxzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjAxLjAwI0FjdGluaXVtIChBYykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDIuMDAjQWx1bWludW0gKEFsKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wMy4wMCNBbWVyaWNpdW0gKEFtKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wNC4wMCNBbnRpbW9ueSAoU2IpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA1LjAwI0JlcmtlbGl1bSAoQmspIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA2LjAwI0Jpc211dGggKEJpKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wNy4wMCNDYWRtaXVtIChDYSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDguMDAjQ2FsaWZvcm5pdW0gKENmKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wOS4wMCNDaHJvbWl1bSAoQ3IpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjEwLjAwI0NvYmFsdCAoQ28pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjExLjAwI0NvcHBlciAoQ3UpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjEyLjAwI0N1cml1bSAoQ20pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjEzLjAwI0VpbnN0ZWluaXVtIChFcykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTQuMDAjRmVybWl1bSAoRm0pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE1LjAwI0dhbGxpdW0gKEdhKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xNi4wMCNHZXJtYW5pdW0gKEdlKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xNy4wMCNHb2xkIChBdSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTguMDAjSGFmbml1bSAoSGYpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE5LjAwI0luZGl1bSAoSW4pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjIwLjAwI0lyaWRpdW0gKElyKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yMS4wMCNJcm9uIChGZSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjIuMDAjTGF3cmVuY2l1bSAoTHIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjIzLjAwI0xlYWQgKFBiKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yNC4wMCNNYW5nYW5lc2UgKE1uKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yNS4wMCNNZW5kZWxldml1bSAoTWQpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI2LjAwI01lcmN1cnkgKEhnKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yNy4wMCNNb2x5YmRlbnVtIChNbykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjguMDAjTmVwdHVuaXVtIChOcCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjkuMDAjTmlja2VsIChOaSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzAuMDAjTmlvYml1bSAoTmIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjMxLjAwI05vYmVsaXVtIChObykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzIuMDAjT3NtaXVtIChPcykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzMuMDAjUGFsbGFkaXVtIChQZCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzQuMDAjUGxhdGludW0gKFB0KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zNS4wMCNQbHV0b25pdW0gKFB1KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zNi4wMCNQcm90YWN0aW5pdW0gKFBhKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zNy4wMCNSaGVuaXVtIChSZSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzguMDAjUmhvZGl1bSAoUmgpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM5LjAwI1J1dGhlbml1bSAoUnUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQwLjAwI1NpbHZlciAoQWcpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQxLjAwI1RhbnRhbHVtIChUYSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDIuMDAjVGVjaG5ldGl1bSAoVGUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQzLjAwI1RoYWxsaXVtIChUbCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDQuMDAjVGhvcml1bSAoVGgpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQ1LjAwI1RpbiAoU24pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQ2LjAwI1RpdGFuaXVtIChUaSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDcuMDAjVHVuZ3N0ZW4gKFcpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQ4LjAwI1VyYW5pdW0gKFUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQ5LjAwI1ZhbmFkaXVtIChWKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41MC4wMCNaaW5jIChabikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTEuMDAjWmlyY29uaXVtIChacikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTIuMDAjQm9ocml1bSAoQmgpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjUzLjAwI0R1Ym5pdW0gKERiKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41NC4wMCNIYXNzaXVtIChIcykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTUuMDAjUnV0aGVyZm9yZGl1bSAoUmYpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU2LjAwI1NlYWJvcmdpdW0gKFNnKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41Ny4wMCNVbnVubmlsaXVtIChVdW0pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU4LjAwI1VudW51bml1bSAoVXV1KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41OS4wMCNVbnVuYml1bSAoVXViKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy42MC4wMCNQb2xvbml1bSAoKFBvKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wMC4wMCNBbGthbGkgbWV0YWxzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjAxLjAwI0Nlc2l1bSAoQ3MpIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjAyLjAwI0ZyYW5jaXVtIChGbSkjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDMuMDAjTGl0aGl1bSAoTGkpIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjA0LjAwI1BvdGFzc2l1bSAoSykjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDUuMDAjUnViaWRpdW0gKFJiKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wNi4wMCNTb2RpdW0gKE5hKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wMC4wMCNOb24gbWV0YWxzIGFuZCBwdXJlIGFuZCBlbGVtZW50YWwgZ2FzZXMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDEuMDAjQ2hsb3JpbmUgIChDbCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDIuMDAjSHlkcm9nZW4gKEgpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjAzLjAwI05pdHJvZ2VuICAoTikjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDQuMDAjT3h5Z2VuIChPKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wNS4wMCNGbHVvcmluZSAgKEYpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA2LjAwI0Fyc2VuaWMgKEFzKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wNy4wMCNCb3JvbiAoQmgpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA4LjAwI0NhcmJvbiAoQykjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDkuMDAjUGhvc3Bob3J1cyAoUCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTAuMDAjU2VsZW5pdW0gKFNlKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xMS4wMCNTaWxpY29uIChTaSkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTIuMDAjU3VsZnVyIChTKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xMy4wMCNUZWxsdXJpdW0gKFRlKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xNC4wMCNBc3RhdGluZSAoQXQpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjE1LjAwI0Jyb21pbmUgQnIjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTYuMDAjSW9kaW5lIChJKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wMC4wMCNOb2JsZSBnYXNlcyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wMS4wMCNYZW5vbiBnYXMgIChYZSkjMTIuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDIuMDAjUmFkb24gZ2FzIChSbikjMTIuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDMuMDAjS3J5cHRvbiBnYXMgKEtyKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wNC4wMCNBcmdvbiBnYXMgKEFyKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wNS4wMCNIZWxpdW0gZ2FzIChIZSkjMTIuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDYuMDAjTmVvbiBnYXMgKE5lKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wMC4wMCNJbmR1c3RyaWFsIHVzZSBnYXNlcyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wMS4wMCNIeWRyb2dlbiBjb21wb3VuZCBnYXNlcyMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wMi4wMCNDaGxvcmluYXRlZCBtaXhlZCBnYXNlcyMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wMy4wMCNBbW1vbmlhIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjA0LjAwI0NhcmJvbiBkaW94aWRlIGdhcyAoQ08yKSMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wNS4wMCNJbmR1c3RyaWFsIGFpciMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wNi4wMCNJbmVydCBnYXMgbWl4dHVyZXMjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMDAuMDAuMDAjQWNpZHMgYW5kIHRoZWlyIHNhbHRzIGFuZCBlc3RlcnMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDAuMDAjQ2FyYm94eWxpYyBhY2lkcyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wMS4wMCNBY2V0aWMgYWNpZCBvciBpdHMgc2FsdHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDIuMDAjQWN5Y2xpYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wMy4wMCNBbGRlaHlkaWMgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDQuMDAjQnV0eXJpYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wNS4wMCNDYXJib2N5bGljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA2LjAwI0h5ZHJveHkgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDcuMDAjS2V0byBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wOC4wMCNQcm9waW9uaWMgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDkuMDAjQWNyeWxpYyBhY2lkIGVzdGVycyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4xMC4wMCNFc3RlcnMgb2YgbWV0aGFjcnlsaWMgYWNpZCMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wMC4wMCNIZXRlcm9jeWNsaWMgYWNpZHMgYW5kIHRoZWlyIHNhbHRzIGFuZCBlc3RlcnMjMTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDEuMDAjSW5kb2xlYWNldGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjAyLjAwI0lzb25pY290aW5pYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wMy4wMCNJc29uaXBlY290aWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDQuMDAjTmljb3RpbmljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjA1LjAwI05pcGVjb3RpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wNi4wMCNPcm90aWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDcuMDAjUGljb2xpbmljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjA4LjAwI1BpcGVjb2xpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wMC4wMCNGYXR0eSBhY2lkcyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wMS4wMCNEZWNhbm9pYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wMi4wMCNVbnNhdHVyYXRlZCBmYXR0eSBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wMy4wMCNWb2xhdGlsZSBmYXR0eSBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wNC4wMCNIZXB0YW5vaWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDUuMDAjTGF1cmljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA2LjAwI015Y29saWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDcuMDAjTXlyaXN0aWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDguMDAjUGFsbWl0aWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDkuMDAjU3RlYXJpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wMC4wMCNOb24gY2FyYm94eWxpYyBhY2lkcyBhbmQgdGhlaXIgc2FsdHMjMTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDEuMDAjQ2FyYm9uaWMgYWNpZHMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDIuMDAjTml0cmljIGFjaWRzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjAzLjAwI1Bob3NwaG9yb3VzIGFjaWRzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA0LjAwI1N1bGZ1ciBhY2lkcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wNS4wMCNDaGxvcmlkZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDYuMDAjSHlkcm9jaGxvcmlkZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDcuMDAjTml0cmF0ZXMgb3Igbml0cml0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDguMDAjU2lsaWNhdGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA5LjAwI1Bob3NwaGF0ZXMgb3IgcGhvc3BoaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4xMC4wMCNCaWNhcmJvbmF0ZXMgb3IgY2FyYmlkZXMgb3IgY2FyYm9uYXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4xMS4wMCNGbHVvcmlkZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMTIuMDAjQnJvbWlkZXMgb3IgYnJvbWF0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMTMuMDAjSW9kaWRlcyBvciBpb2RhdGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE5LjAwLjAwI0lub3JnYW5pYyBzdWxmdXIgY29tcG91bmRzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE5LjAxLjAwI0h5ZHJvZ2VuIHN1bGZpZGUjMTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTkuMDIuMDAjU3VsZnVyaWMgQWNpZCMxMi4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOS4wMy4wMCNTb2RpdW0gc3VsZmF0ZSMxMi4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4wMC4wMC4wMCNBZGRpdGl2ZXMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDAuMDAjSW5kaWNhdG9ycyBhbmQgUmVhZ2VudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDEuMDAjQWZmaW5pdHkgbGFiZWxzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjAyLjAwI0Nyb3NzIGxpbmtpbmcgYWdlbnRzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjAzLjAwI1JlYWdlbnQga2l0cyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wNC4wMCNTdWxmaHlkcnlsIHJlYWdlbnRzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjA1LjAwI0ludGVyY2FsYXRpbmcgYWdlbnRzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjA2LjAwI0RpdmVydGluZyBhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDAuMDAjQ2F0YWx5c3RzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjE2LjAxLjAwI0FjaWQgY2F0YWx5c3RzIzEyLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE2LjAyLjAwI0NvbWJ1c3Rpb24gY2F0YWx5c3RzIzEyLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE2LjAzLjAwI0N1c3RvbSBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDQuMDAjQ3JhY2tpbmcgY2F0YWx5c3RzIzEyLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjAwLjAwI0J1ZmZlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDEuMDAjQW1waG9seXRlIG1peHR1cmVzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjAyLjAwI0JpY2FyYm9uYXRlIGJ1ZmZlcnMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDMuMDAjT3RoZXIgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wNC4wMCNBY2lkIGJ1ZmZlcnMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDUuMDAjQmFzaWMgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wNi4wMCNOZXV0cmFsIGJ1ZmZlcnMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDAuMDAjQ29sbG9pZHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDEuMDAjR2VscyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wMi4wMCNTdXNwZW5zaW9ucyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wMy4wMCNBZXJvc29scyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wNC4wMCNFbXVsc2lvbnMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDUuMDAjTmF0dXJhbCBnZWxsaW5nIGFnZW50cyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wNi4wMCNTeW50aGV0aWMgZ2VsbGluZyBhZ2VudHMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDcuMDAjR2VsIHN0YWJpbGl6ZXJzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA4LjAwI1N1c3BlbmRpbmcgYWdlbnRzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjAwLjAwI1N1cmZhY3RhbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjAxLjAwI0FudGkgZm9hbWluZyBhZ2VudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDIuMDAjRGV0ZXJnZW50IHN1cmZhY3RhbnRzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjAzLjAwI0ZvYW1pbmcgYWdlbnRzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjA0LjAwI0Rpc3BlcnNpbmcgYWdlbnRzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjA1LjAwI0ZsdXNoZXMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDYuMDAjV2V0dGluZyBhZ2VudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDcuMDAjV2F0ZXIgZmxvb2QgYWRkaXRpdmVzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjAwLjAwI1BsYXN0aWNpemVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wMS4wMCNQaHRoYWxhdGVzIzEyLjE2LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjAyLjAwI1BvbHltZXJpY3MjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDMuMDAjQWdyaWN1bHR1cmFsIG9pbHMjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDQuMDAjU3VsZm9uYW1pZGVzIzEyLjE2LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjA1LjAwI0dsdXRhcmF0ZXMjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjEuMDAuMDAjRmxhbWUgcmV0YXJkYW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMS4wMS4wMCNCcm9taW5hdGVkIzEyLjE2LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjAwLjAwI0FudGkgb3hpZGFudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDEuMDAjQXNjb3JiaWMgYWNpZCMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wMi4wMCNCZXRhIGNhcm90ZW5lIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjAzLjAwI0J1dHlsYXRlZCBoeWRyb3h5YW5pc29sZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wNC4wMCNCdXR5bGF0ZWQgaHlkcm94eXRvbHVlbmUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDUuMDAjQ2FsY2l1bSBjaXRyYXRlIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA2LjAwI0NhbnRoYXhhbnRoaW4jMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDcuMDAjTWVsYXRvbmluIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA4LjAwI05vcmRpaHlkcm9ndWFpYXJldGljIGFjaWQjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDkuMDAjUHJvcHlsIGdhbGxhdGUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMTAuMDAjU2lseW1hcmluIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjExLjAwI1N1bGZ1ciBkaW94aWRlIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIzLjAwLjAwI0N1cmluZyBhZ2VudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjMuMDEuMDAjV2F0ZXJib3JuZSBjdXJpbmcgYWdlbnRzIzEyLjE2LjIzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIzLjAyLjAwI0NlbWVudCBhY2NlbGVyYXRvcnMjMTIuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjMuMDMuMDAjQ2VtZW50IHJldGFyZGVycyMxMi4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNC4wMC4wMCNQb2x5bWVyIGJyZWFrZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI0LjAxLjAwI0FjaWRpYyBwb2x5bWVyIGJyZWFrZXJzIzEyLjE2LjI0LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI0LjAyLjAwI09yZ2FuaWMgcG9seW1lciBicmVha2VycyMxMi4xNi4yNC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNS4wMC4wMCNFbXVsc2lvbiBicmVha2VycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNS4wMS4wMCNXYXRlciBpbiBvaWwgZW11bHNpb24gYnJlYWtlcnMjMTIuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjUuMDIuMDAjT2lsIGluIHdhdGVyIGVtdWxzaW9uIGJyZWFrZXJzIzEyLjE2LjI1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI1LjAzLjAwI0Zsb3RhdGlvbiBhaWRzIzEyLjE2LjI1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI2LjAwLjAwI0NsYXkgc3RhYmlsaXplcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjYuMDEuMDAjSW5vcmdhbmljIGNsYXkgc3RhYmlsaXplcnMjMTIuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjYuMDIuMDAjT3JnYW5pYyBjbGF5IHN0YWJpbGl6ZXJzIzEyLjE2LjI2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI3LjAwLjAwI0ZsdWlkIGxvc3MgYWRkaXRpdmVzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI3LjAxLjAwI05hdHVyYWwgcG9seW1lciBmbHVpZCBsb3NzIGFkZGl0aXZlcyMxMi4xNi4yNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNy4wMi4wMCNNb2RpZmllZCBwb2x5bWVyIGZsdWlkIGxvc3MgYWRkaXRpdmVzIzEyLjE2LjI3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI4LjAwLjAwI0ZyaWN0aW9uIHJlZHVjZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI4LjAxLjAwI0FuaW9uaWMgZnJpY3Rpb24gcmVkdWNlcnMjMTIuMTYuMjguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjguMDIuMDAjQ2F0aW9uaWMgZnJpY3Rpb24gcmVkdWNlcnMjMTIuMTYuMjguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjkuMDAuMDAjUGFyYWZmaW4gYXNwaGFsdGVuZSBjb250cm9sIGFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOS4wMS4wMCNTb2x2ZW50IHR5cGUgcGFyYWZmaW4gYXNwaGFsdGVuZSBjb250cm9sIGFnZW50cyMxMi4xNi4yOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOS4wMi4wMCNDcnlzdGFsIG1vZGlmaWVkIHBhcmFmZmluIGFzcGhhbHRlbmUgY29udHJvbCBhZ2VudHMjMTIuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjkuMDMuMDAjRGlzcGVyc2FudCB0eXBlIHBhcmFmZmluIGFzcGhhbHRlbmUgY29udHJvbCBhZ2VudHMjMTIuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzAuMDAuMDAjTXVkIHJlbW92YWwgbWl4dHVyZXMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzAuMDEuMDAjTXVkIGNsZWFub3V0IGFnZW50cyMxMi4xNi4zMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMS4wMC4wMCNBbnRpIHNsdWRnZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMxLjAxLjAwI0FudGkgc2x1ZGdlIGFkZGl0aXZlcyMxMi4xNi4zMS4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMi4wMC4wMCNBbnRpIGdhcyBtaWdyYXRpb24gYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMyLjAxLjAwI0FudGkgZ2FzIG1pZ3JhdGlvbiBhZGRpdGl2ZXMjMTIuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzMuMDAuMDAjRXhwYW5kaW5nIGFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMy4wMS4wMCNDZW1lbnQgZXhwYW5kaW5nIGFnZW50cyMxMi4xNi4zMy4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNC4wMC4wMCNFeHRlbmRlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzQuMDEuMDAjQ2VtZW50IGV4dGVuZGVycyMxMi4xNi4zNC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNS4wMC4wMCNPaWwgd2VsbCBzZWFsYW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNS4wMS4wMCNDZW1lbnRpbmcgc2VhbGFudHMjMTIuMTYuMzUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzYuMDAuMDAjQ29ycm9zaW9uIGluaGliaXRvcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzYuMDEuMDAjT2lsIHByb2R1Y3Rpb24gY29ycm9zaW9uIGluaGliaXRvcnMjMTIuMTYuMzYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzYuMDIuMDAjR2FzIHByb2R1Y3Rpb24gY29ycm9zaW9uIGluaGliaXRvcnMjMTIuMTYuMzYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzcuMDAuMDAjR2FzIGh5ZHJhdGUgY29udHJvbGxlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzcuMDEuMDAjS2luZXRpYyBoeWRyYXRlIGNvbnRyb2xsZXJzIzEyLjE2LjM3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM4LjAwLjAwI1NjYXZlbmdlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzguMDEuMDAjSHlkcm9nZW4gc3VsZmlkZSBzY2F2ZW5nZXJzIzEyLjE2LjM4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM4LjAyLjAwI094eWdlbiBzY2F2ZW5nZXJzIzEyLjE2LjM4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM5LjAwLjAwI1NjYWxlIGNvbnRyb2xsZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM5LjAxLjAwI1NjYWxlIGluaGliaXRvciMxMi4xNi4zOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOS4wMi4wMCNTY2FsZSByZW1vdmVycyBhbmQgY29udmVydGVycyMxMi4xNi4zOS4wMC4wMAotdW5zcHNjNyMxMi4xNi40MC4wMC4wMCNCYWN0ZXJpY2lkZXMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDAuMDEuMDAjUmVnaXN0ZXJlZCBtaWNyb2Jpb2NpZGVzIzEyLjE2LjQwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQxLjAwLjAwI0luIHNpdHUjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDEuMDEuMDAjSW4gc2l0dSBhZGRpdGl2ZXMjMTIuMTYuNDEuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDEuMDIuMDAjQWNpZCBhZGRpdGl2ZXMjMTIuMTYuNDEuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDIuMDAuMDAjUmV0YXJkZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQyLjAxLjAwI0FjaWQgY29ycm9zaW9uIGluaGliaXRvcnMjMTIuMTYuNDIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDMuMDAuMDAjSXJvbiBjb250cm9sbGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40My4wMS4wMCNJcm9uIGNvbnRyb2wgYWRkaXRpdmVzIzEyLjE2LjQzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQ0LjAwLjAwI05vbiBlbXVsc2lmaWVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40NC4wMS4wMCNOb24gZW11bHNpZnlpbmcgYWRkaXRpdmVzIzEyLjE2LjQ0LjAwLjAwCi11bnNwc2M3IzEyLjE3LjAwLjAwLjAwI0NvbG9yYW50cyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wMC4wMCNEeWVzIzEyLjE3LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjAxLjAwI0ZsdW9yZXNjZW50IGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDIuMDAjUGh0aGFsZWluIGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDMuMDAjUm9zYW5pbGluZSBkeWVzIzEyLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjA0LjAwI0Zvb2Qgb3IgZHJ1ZyBvciBjb3NtZXRpYyBzYWZlIChGREMpIGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDUuMDAjTGFrZWQjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDYuMDAjTmF0dXJhbCBkeWVzIzEyLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjAwLjAwI1BpZ21lbnRzIzEyLjE3LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjAxLjAwI05hdHVyYWwgcGlnbWVudHMjMTIuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDIuMDAjSW5vcmdhbmljIG1ldGFsIG94aWRlcyMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wMy4wMCNDYXJib24gYmxhY2sjMTIuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDQuMDAjVGl0YW5pdW0gZGlveGlkZSMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wNS4wMCNPcmdhbmljIHBpZ21lbnRzIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE3LjAwLjAwI0NvbG9yIGNvbXBvdW5kcyBhbmQgZGlzcGVyc2lvbnMjMTIuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTcuMDEuMDAjUG9seW1lciBtYXN0ZXJiYXRjaGVzIzEyLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE3LjAyLjAwI1BpZ21lbnQgZGlzcGVyc2lvbnMjMTIuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTcuMDMuMDAjSW5rcyMxMi4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xOC4wMC4wMC4wMCNXYXhlcyBhbmQgb2lscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wMC4wMCNXYXhlcyMxMi4xOC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wMS4wMCNTeW50aGV0aWMgd2F4ZXMjMTIuMTguMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTUuMDIuMDAjTmF0dXJhbCB3YXhlcyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wMy4wMCNQYXJhZmZpbnMjMTIuMTguMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTUuMDQuMDAjUGV0cm9sYXR1bXMjMTIuMTguMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTYuMDAuMDAjT2lscyMxMi4xOC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNi4wMS4wMCNTeW50aGV0aWMgb2lscyMxMi4xOC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNi4wMi4wMCNOYXR1cmFsIG9pbHMjMTIuMTguMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMDAuMDAuMDAjU29sdmVudHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTUuMDAuMDAjSHlkcm9jYXJib25hdGVkIHNvbHZlbnRzIzEyLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE5LjE1LjAxLjAwI0Fyb21hdGljIHNvbHZlbnRzIzEyLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE5LjE1LjAyLjAwI0FsaXBoYXRpYyBzb2x2ZW50cyMxMi4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNi4wMC4wMCNPeHlnZW5hdGVkIHNvbHZlbnRzIzEyLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE5LjE2LjAxLjAwI0FsY29ob2wgc29sdmVudHMjMTIuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTYuMDIuMDAjQWN0aXZlIHNvbHZlbnRzIzEyLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEyLjIwLjAwLjAwLjAwI0NoZW1pY2FsIGludGVybWVkaWF0ZXMgYW5kIGZpeGF0aXZlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wMC4wMCNJbnRlcm1lZGlhdGVzIzEyLjIwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjAxLjAwI0V0aGVyIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDIuMDAjS2V0b25lIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDMuMDAjQWxkZWh5ZGUgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wNC4wMCNQZXJveGlkZSBpbnRlcm1lZGlhdGVzIzEyLjIwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjA1LjAwI0FjcnlsYXRlIG9yIG1ldGhhY3J5bGF0ZSBpbnRlcm1lZGlhdGVzIzEyLjIwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE2LjAwLjAwI0ZpeGF0aXZlcyMxMi4yMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNi4wMS4wMCNGb3JtYWxkZWh5ZGVzIzEyLjIwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE2LjAyLjAwI0dsdXRyYWxzIzEyLjIwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE2LjAzLjAwI1Rhbm5pbnMjMTIuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDAuMDAjQW1pbmVzIGFuZCBhbWlkZXMgYW5kIGltaW5lcyBhbmQgaW1pZGVzIzEyLjIwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjAxLjAwI1ByaW1hcnkjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDIuMDAjU2Vjb25kYXJ5IzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjAzLjAwI1RlcnRpYXJ5IzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjA0LjAwI1NwZWNpYWx0eSMxMi4yMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wNS4wMCNTdWxwaG9uYXRlZCMxMi4yMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMS4wMC4wMC4wMCNDYXJib24gYmFzZWQgY2hlbWljYWxzIGFuZCBjb21wb3VuZGVkIGNoZW1pY2FscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wMC4wMCNBbGNvaG9scyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wMS4wMCNBbWlubyBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wMi4wMCNCZW56eWwgYWxjb2hvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDMuMDAjQ2hsb3JvaHlkcmlucyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wNC4wMCNFdGhhbm9sIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA1LjAwI0ZhdHR5IGFsY29ob2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA2LjAwI0dseWNvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDcuMDAjSGV4YW5vbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDguMDAjTWV0aGFub2wjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDkuMDAjUG9seSB2aW55bCBvciBQViAgYWxjb2hvbCMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMC4wMCNQcm9wYW5vbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMTEuMDAjU3VnYXIgYWxjb2hvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMTIuMDAjQnV0eWwgYWxjb2hvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMTMuMDAjSXNvcHJvcHlsIGFsY29ob2wjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDAuMDAjSHlkcm9jYXJib25zIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE2LjAxLjAwI0FjeWNsaWMgb3IgY3ljbGljIG9yIHBvbHljeWNsaWMgaHlkcm9jYXJib25zIzEyLjIxLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE2LjAyLjAwI0hhbG9nZW5hdGVkIGh5ZHJvY2FyYm9ucyMxMi4yMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wMy4wMCNTdWxwaG9uYXRlZCBoeWRyb2NhcmJvbnMjMTIuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDQuMDAjTml0cm9zYXRlZCBoeWRyb2NhcmJvbnMjMTIuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTcuMDAuMDAjQWxkZWh5ZGVzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE3LjAxLjAwI0FjZXRhbGFsZGVoeWVzIzEyLjIxLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE3LjAyLjAwI0dseW94YWxzIzEyLjIxLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjAwLjAwI0V0aGVycyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wMS4wMCNBY2V0YWwgZXRoZXJzIzEyLjIxLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjAyLjAwI0V0aHlsIGV0aGVycyMxMi4yMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wMy4wMCNNZXRoeWwgZXRoZXJzIzEyLjIxLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjA0LjAwI1BoZW55bCBldGhlcnMjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDUuMDAjTWV0aHlsIHRldHJhIGJ1dHlsIGV0aGVyIzEyLjIxLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE5LjAwLjAwI0tldG9uZXMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTkuMDEuMDAjQWNldG9uZXMjMTIuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTkuMDIuMDAjQ2FtcGhvcnMjMTIuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTkuMDMuMDAjS2V0b25lIGJvZGllcyMxMi4yMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wNC4wMCNNYW5uaWNoIGJhc2VzIzEyLjIxLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIxLjIwLjAwLjAwI1BoZW5vbHMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjAuMDEuMDAjQnJvbXBoZW5vbCBibHVlIzEyLjIxLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIwLjAyLjAwI0NyZXNvbHMjMTIuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjEuMDAuMDAjQ2FyYm9oeWRyYXRlcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMS4wMS4wMCNTaW1wbGUgc3VnYXJzIG9yIGl0cyBkZXJpdmF0aXZlcyMxMi4yMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMS4wMi4wMCNHdW0gcmVzaW5zIzEyLjIxLjIxLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIxLjAzLjAwI1N0YXJjaGVzIzEyLjIxLjIxLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjAwLjAwI0NvbXBvdW5kcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wMS4wMCNDaGVtaWNhbCBhbGxveXMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDIuMDAjQ3lhbmlkZXMgb3IgY3lhbmF0ZXMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDMuMDAjQWx1bWludW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjA0LjAwI0Jhcml1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDUuMDAjQm9yb24gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjA2LjAwI0Jyb21pbmUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjA3LjAwI0NhbGNpdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjA4LjAwI0NhcmJvbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDkuMDAjQ2hsb3JpbmUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjEwLjAwI0ZsdW9yaW5lIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xMS4wMCNHb2xkIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xMi4wMCNJb2RpbmUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjEzLjAwI0lyb24gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjE0LjAwI01hZ25lc2l1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTUuMDAjTml0cm9nZW4gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjE2LjAwI05pdHJpbGUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjE3LjAwI094eWdlbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTguMDAjUGhvc3Bob3JvdXMgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjE5LjAwI1BvdGFzc2l1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjAuMDAjU2VsZW5pdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjIxLjAwI1NpbGljb24gb3Igc2lsaWNvbmUgb3Igc2lsaWNhbmUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjIyLjAwI1NvZGl1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjMuMDAjU3VsZnVyIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yNC4wMCNUaW4gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI1LjAwI1ppbmMgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI2LjAwI0hldGVyb2N5Y2xpYyBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjcuMDAjQ29iYWx0IGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yOC4wMCNBbnRpbW9ueSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjkuMDAjVGl0YW5pdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjAwLjAwI094aWRlcyBpbmNsdWRlcyBhbGwgb3hpZGVkIHN1YnN0YW5jZXMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDEuMDAjQWx1bWludW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjAyLjAwI0NhcmJvbiBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDMuMDAjSHlwb2NobG9yb3VzIGFjaWQjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDQuMDAjTWFnbmVzaXVtIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wNS4wMCNOaXRyb2dlbiBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDYuMDAjT3NtaXVtIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wNy4wMCNQZXJveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDguMDAjU2lsaWNvbiBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDkuMDAjU3VsZnVyIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xMC4wMCNUaG9yaXVtIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xMS4wMCNXYXRlciBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTIuMDAjWmluYyBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTMuMDAjSHlkcm94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xNC4wMCNNZXRhbCBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTUuMDAjTm9uIG1ldGFsIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xNi4wMCNFdGh5bGVuZSBveGlkZSMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wMC4wMCNJc290b3BlcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wMS4wMCNEZXV0ZXJhdGVkIHNvbHZlbnRzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjAyLjAwI0hlYXZ5IHdhdGVyIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjAzLjAwI0FscGhhIHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDQuMDAjQmV0YSBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjA1LjAwI0NvYmFsdCBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjA2LjAwI0dhbW1hIHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDcuMDAjUmFkaW9pc290b3BlIHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDguMDAjQ2FsaWJyYXRpb24gc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMi4wMC4wMC4wMCNCaW8gY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjAwLjAwI1Byb3RlaW5zIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjAxLjAwI0FsYnVtaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjAyLjAwI0JhY3RlcmlhbCBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wMy4wMCNCbG9vZCBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wNC4wMCNCb25lIG1vcnBob2dlbmV0aWMgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDUuMDAjQ2FycmllciBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wNi4wMCNDb250cmFjdGlsZSBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wNy4wMCNEaWV0YXJ5IHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA4LjAwI0Rlb3h5cmlib251Y2xlaWMgYWNpZCAoRE5BKSBiaW5kaW5nIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA5LjAwI0VnZyBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xMC4wMCNHbG9idWxpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTEuMDAjR2x5Y29wcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xMi4wMCNIZW1lcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTMuMDAjSW50ZXJmZXJvbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTQuMDAjTGVjdGlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNS4wMCNMaXBvcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTYuMDAjTWVtYnJhbmUgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTcuMDAjTWV0YWxsb3Byb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE4LjAwI05lcnZlIHRpc3N1ZSBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xOS4wMCNOZWN1bGVvcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjAuMDAjUGVwdG9uZXMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjEuMDAjUGxhbnQgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjIuMDAjUHJpb25zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjIzLjAwI0N5dG9wbGFzbWljIG9yIG51Y2xlYXIgcmVjZXB0b3JzIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjI0LjAwI1JlY29tYmluYW50IHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjI1LjAwI1NlcnBpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjYuMDAjVHJhbnNjcmlwdGlvbiBmYWN0b3JzIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjI3LjAwI1ZpcmFsIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjI4LjAwI1NjbGVyb3Byb3RlaW4jMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDAuMDAjQW50aWJvZGllcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wMS4wMCNWaXJhbCBhbnRpYm9kaWVzIzEyLjIyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjAyLjAwI0FudGl0b3hpbnMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDMuMDAjQmFjdGVyaWFsIGFudGlib2RpZXMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDQuMDAjQXV0b2FudGlib2RpZXMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDUuMDAjSW1tdW5lIHNlcmEjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDYuMDAjSW1tdW5vZ2xvYnVsaW5zIzEyLjIyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE3LjAwLjAwI051dHJpZW50cyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNy4wMS4wMCNWaXRhbWlucyMxMi4yMi4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wMC4wMCNFbnp5bWVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjAxLjAwI0h5ZHJvbGFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDIuMDAjSXNvZW56eW1lcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wMy4wMCNJc29tZXJhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA0LjAwI0xpZ2FzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDUuMDAjTHlhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA2LjAwI011bHRpZW56eW1lIGNvbXBsZXhlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wNy4wMCNPeGlkb3JlZHVjdGFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDguMDAjUGVybWVhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA5LjAwI1RyYW5zZmVyZWFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMTAuMDAjQ2F0YWxhc2UjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDAuMDAjVGlzc3VlcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMS4wMCNDb25uZWN0aXZlIHRpc3N1ZXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDIuMDAjRXBpdGhlbGl1bXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDMuMDAjRXhvY3JpbmUgZ2xhbmRzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjA0LjAwI0x5bXBob2lkIHRpc3N1ZXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDUuMDAjTWVtYnJhbmVzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjA2LjAwI011c2NsZXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDcuMDAjTmVydmUgdGlzc3VlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wMC4wMCNDdWx0dXJlcyBhbmQgZmx1aWRzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjAxLjAwI0FnYXIjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDIuMDAjQnJvdGgjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDMuMDAjU2VydW0gZnJlZSBjdWx0dXJlIG1lZGlhIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA0LjAwI0NvbmRpdGlvbmVkIGN1bHR1cmUgbWVkaWEjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDUuMDAjQmFjdGVyaWEgY3VsdHVyZXMjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDYuMDAjQmxvb2QjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDcuMDAjVXJlYSMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wOC4wMCNCaWxlIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA5LjAwI1BsYXNtYSMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4xMC4wMCNTZW1lbiBjdWx0dXJlcyMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMS4wMC4wMCNOdWNsZWljIGFjaWRzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIxLjAxLjAwI1JpYm9udWNsZWljIGFjaWQgKFJOQSkjMTIuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjEuMDIuMDAjRGVveHlyaWJvbnVjbGVpYyBhY2lkIChETkEpIzEyLjIyLjIxLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjAwLjAwI0FtaW5vIGFjaWRzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjAxLjAwI0JyYW5jaGVkIGNoYWluIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjAyLjAwI0N5Y2xpYyBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wMy4wMCNEaWFtaW5vIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA0LjAwI0RpY2FyYm94eWxpYyBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wNS4wMCNFc3NlbnRpYWwgYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDYuMDAjU3VsZnVyIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA3LjAwI0FtaW5vYnV0eXJpYyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wOC4wMCNBbWlub2NhcHJvaWMgYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDkuMDAjT3hhbWljIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjEwLjAwI1Bob3NwaG9hbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4xMS4wMCNRdWlzcXVhbGljIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjAwLjAwI0FtaW5lcyBhbmQgYW1pZGVzIGFuZCBpbWluZXMgYW5kIGltaWRlcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wMS4wMCNQcmltYXJ5IzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjAyLjAwI1NlY29uZGFyeSMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wMy4wMCNUZXJ0aWFyeSMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wNC4wMCNTcGVjaWFsdHkjMTIuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDUuMDAjU3VscGhvbmF0ZWQjMTIuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMDAuMDAuMDAjSW5vcmdhbmljIGNvbXBvdW5kcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMC4wMC4wMCNNaW5lcmFsIGFjaWRzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEwLjAxLjAwI0h5ZHJvZmxvcmljIGFjaWQjMTIuMjMuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTAuMDIuMDAjSHlkcm9mbHVvcm9zaWxpY2ljIGFjaWQjMTIuMjMuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTAuMDMuMDAjSHlkcm9mbG91cmljIGFjaWQjMTIuMjMuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTEuMDAuMDAjQmFzZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTEuMDEuMDAjU29kaXVtIGh5ZHJveGlkZSMxMi4yMy4xMS4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMS4wMi4wMCNQb3Rhc3NpdW0gaHlkcm94aWRlIzEyLjIzLjExLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEyLjAwLjAwI1NhbHRzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEyLjAxLjAwI0FtbW9uaXVtIG5pdHJhdGUjMTIuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDAuMDAjU3VscGhhdGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjAxLjAwI0ZlcnJpYyBzdWxwaGF0ZSMxMi4yMy4xMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wMi4wMCNDb3BwZXIgc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDMuMDAjQWx1bWluaXVtIHN1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjA0LjAwI1NvZGl1bSBzdWxwaGF0ZSMxMi4yMy4xMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wNS4wMCNTb2RpdW0gdGhpb3N1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjAwLjAwI0NobG9yaWRlcyBjaGxvcmF0ZXMgYW5kIHBlcmNobG9yYXRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wMS4wMCNTb2RpdW0gY2hsb3JpdGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDIuMDAjRmVycmljIENobG9yaWRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjAzLjAwI0FsdW1pbml1bSBjaGxvcmlkZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wNC4wMCNQb2x5IGFsdW1pbml1bSBjaGxvcmlkZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wNS4wMCNBbHVtaW5pdW0gY2hsb3JvaHlkcmF0ZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wNi4wMCNTb2RpdW0gaHlwb2NobG9yaXRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE1LjAwLjAwI0JvcmlkZXMgYW5kIGJvcmF0ZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTUuMDEuMDAjU29kaXVtIGJvcmF0ZSMxMi4yMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNi4wMC4wMCNIeWRyaWRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNi4wMS4wMCNBbHVtaW5pdW0gaHlkcml0ZSMxMi4yMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNi4wMi4wMCNNYWduZXNpdW0gaHlkcml0ZSMxMi4yMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wMC4wMCNTdWxwaGlkZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTcuMDEuMDAjSHlkcm9nZW4gc3VscGhpZGUjMTIuMjMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTcuMDIuMDAjUG9seSBzdWxwaGlkZSMxMi4yMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wMy4wMCNTb2RpdW0gc3VscGhpZGUjMTIuMjMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTcuMDQuMDAjSXJvbiBzdWxwaGlkZSMxMi4yMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xOC4wMC4wMCNJbm9yZ2FuaWMgb3hpZGlzaW5nIGFnZW50cyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xOC4wMS4wMCNQb3Rhc3NpdW0gcGVybWFuZ2FuYXRlIzEyLjIzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE4LjAyLjAwI1BvdGFzc2l1bSBkaWNocm9tYXRlIzEyLjIzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE4LjAzLjAwI01hbmdhbmVzZSBkaW94aWRlIzEyLjIzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjI0LjAwLjAwLjAwI0FsY29ob2xzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjAwLjAwI01vbm9oeWRyaWMgYWxjb2hvbHMjMTIuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDEuMDAjRXRoYW5vbCMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wMi4wMCNJc29wcm9wYW5vbCMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wMy4wMCNNZXRoYW5vbCMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wNC4wMCNQZW50YW5vbHMjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDUuMDAjT2N0YW5vbHMjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDYuMDAjSW5vc2l0b2xzIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjA3LjAwI0ZhdHR5IGFsY29ob2xzIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjA4LjAwI0FsbHlsIGFsY29ob2wjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTEuMDAuMDAjUG9seWh5ZHJpYyBhbGNvaG9scyMxMi4yNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMS4wMS4wMCNHbHljb2wjMTIuMjQuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTEuMDIuMDAjR2x5Y2Vyb2wjMTIuMjQuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTIuMDAuMDAjVGhpbyBhbGNvaG9scyMxMi4yNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMi4wMS4wMCNFdGhhbmUgdGhpb2wjMTIuMjQuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTIuMDIuMDAjTWV0aGFuZSB0aGlvbCMxMi4yNC4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNS4wMC4wMC4wMCNBbGthbmVzIEFsa2VuZXMgQWxreW5lcyBhbmQgQXJvbWF0aWNzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEwLjAwLjAwI0Fsa2FuZXMjMTIuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTAuMDEuMDAjUGVudGFuZSMxMi4yNS4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMC4wMi4wMCNIZXhhbmUjMTIuMjUuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTEuMDAuMDAjQ3ljbGljIGh5ZHJvY2FyYm9ucyMxMi4yNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMS4wMS4wMCNUb2x1ZW5lIzEyLjI1LjExLjAwLjAwCi11bnNwc2M3IzEyLjI1LjExLjAyLjAwI1h5bGVuZXMjMTIuMjUuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTEuMDMuMDAjQmVuemVuZSMxMi4yNS4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMi4wMC4wMCNBbGtlbmVzIzEyLjI1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEyLjAxLjAwI1Byb3BlbmUjMTIuMjUuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTIuMDIuMDAjQnV0ZW5lIzEyLjI1LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEyLjAzLjAwI1N0eXJlbmUjMTIuMjUuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTMuMDAuMDAjQWxreW5lcyMxMi4yNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMy4wMS4wMCNBY3l0ZWxlbmUjMTIuMjUuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMDAuMDAuMDAjQXJvbWF0aWMgZGVyaXZhdGl2ZXMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDAuMDAjQXJvbWF0aWMgc3VscGhvbmljIGFjaWRzIzEyLjI2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjAxLjAwI0JlbnplbmUgc3VscGhvbmljIGFjaWRzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjAyLjAwI0hhbG9nZW5hdGVkIHN1bHBob25pYyBhY2lkcyMxMi4yNi4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wMy4wMCNOaXRyb3N1bHBob25pYyBhY2lkcyMxMi4yNi4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wNC4wMCNBbWlubyBzdWxwaG9uaWMgYWNpZHMjMTIuMjYuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDUuMDAjU3VscGhvbnlsIGNobG9yaWRlcyMxMi4yNi4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMC4wMCNBcm9tYXRpYyBuaXRybyBjb21wb3VuZHMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTEuMDEuMDAjTml0cm8gYmVuemVuZXMjMTIuMjYuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTEuMDIuMDAjTml0cm8gdG9sdWVuZXMjMTIuMjYuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTEuMDMuMDAjQ2Fwcm9sYWN0YW0jMTIuMjYuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDAuMDAjQ3ljbGljIGFsY29ob2xzIzEyLjI2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEyLjAxLjAwI0hleGFub2xzIzEyLjI2LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEyLjAyLjAwI05hcHRob2xzIzEyLjI2LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEyLjAzLjAwI1h5bGVub2xzIzEyLjI2LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEyLjA0LjAwI0Jlbnp5bCBhbGNvaG9scyMxMi4yNi4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMy4wMC4wMCNQaHRoYWxhdGVzIzEyLjI2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEzLjAxLjAwI0RpIG9jdHlsIFBodGhhbGF0ZSMxMi4yNi4xMy4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMy4wMi4wMCNEaSBldGh5bCBwaHRoYWxhdGVzIzEyLjI2LjEzLjAwLjAwCi11bnNwc2M3IzEzLjAwLjAwLjAwLjAwI1Jlc2luIGFuZCBSb3NpbiBhbmQgUnViYmVyIGFuZCBGb2FtIGFuZCBGaWxtIGFuZCBFbGFzdG9tZXJpYyBNYXRlcmlhbHMjMTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMDAuMDAuMDAjUnViYmVyIGFuZCBlbGFzdG9tZXJzIzEzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjAwLjAwI05hdHVyYWwgcnViYmVyIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjAxLjAwI0xhdGV4IHJ1YmJlciMxMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wMi4wMCNDcmVwZSBydWJiZXIjMTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDMuMDAjU21va2VkIHNoZWV0IHJ1YmJlciMxMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wNC4wMCNOYXR1cmFsIGZvYW0gcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjA1LjAwI0Jsb2NrIG9yIGNydW1iIHJ1YmJlciMxMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wMC4wMCNQcm9jZXNzZWQgYW5kIHN5bnRoZXRpYyBydWJiZXIjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDEuMDAjVnVsY2FuaXplZCBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDIuMDAjQ2hsb3JpbmF0ZWQgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjAzLjAwI0h5ZHJvY2hsb3JpZGUgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjA0LjAwI0N5Y2xpemVkIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wNS4wMCNJc29tZXJpemVkIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wNi4wMCNUaGVybXBsYXN0aWMgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjA3LjAwI1J1YmJlciBjb21wb3VuZCMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wMC4wMCNFbGFzdG9tZXJzIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjAxLjAwI0Fjcnlsb25pdHJpbGUgYnV0YWRpZW5lIChOQlIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjAyLjAwI0hpZ2hseSBzYXR1cmF0ZWQgbml0cmlsZSAoSE5CUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDMuMDAjRmx1b3JvY2FyYm9uIChGS00pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA0LjAwI0V0aHlsZW5lIHByb3B5bGVuZSAoRVApIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA1LjAwI1N0eXJlbmUgYnV0YWRpZW5lIChTQlIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA2LjAwI0NobG9yb3ByZW5lIChDUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDcuMDAjSXNvYnV0eWxlbmUgaXNvcHJlbmUgKElJUi9YSUlSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wOC4wMCNTaWxpY29uZSAoVk1RIGFuZCBQTVEgYW5kIFBWTVEpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA5LjAwI0ZsdW9yb3NpbGljb25lIChGVk1RKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xMC4wMCNQb2x5YWNyeWxhdGUgKEFDTSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTEuMDAjRXRoeWxlbmUgYWNyeWxpYyAoQUVNKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xMi4wMCNDaGxvcm9zdWxmb25hdGVkIHBvbHlldGh5bGVuZSAoQ1NNKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xMy4wMCNDaGxvcm9wb2x5ZXRoeWxlbmUgKENNKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xNC4wMCNFcGljaGxvcm9oeWRyaW4gKEVDTykjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTUuMDAjTmF0dXJhbCBwb2x5aXNvcHJlbmUgKE5SKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xNi4wMCNTeW50aGV0aWMgcG9seWlzb3ByZW5lIChJUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTcuMDAjUG9seWVzdGVyIHVyZXRoYW5lIChBVSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTguMDAjUG9seWV0aGVyIHVyZXRoYW5lIChFVSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTkuMDAjUG9seWJ1dGFkaWVuZSAoQlIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjIwLjAwI1BvbHlldGhlciBibG9jayBhbWlkZSAoUEVCQSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMjEuMDAjU3R5cmVuZSBibG9jayBjb3Bsb3ltZXIgKFRFUykjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMjIuMDAjQ29wb2x5ZXN0ZXIjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMjMuMDAjVGhlcm1vcGxhc3RpYyMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yNC4wMCNQb2x5b2xlbmZpbmljIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjAwLjAwI1RoZXJtb3BsYXN0aWMgZWxhc3RvbWVycyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wMS4wMCNQb2x5ZXRoZXIgYmxvY2sgYW1pZGUgKFBFQkEpIzEzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjAyLjAwI1BvbHlvbGVuZmluaWMgKFRQTykjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDMuMDAjRXRoZXIgZXN0ZXIgYmxvY2sgY29wbG95bWVyIChURUVFKSMxMy4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wNC4wMCNUaGVybW9wbGFzdGljIGVsYXN0b21lciBwb2x5dXJldGhhbmUgKFRQVVIpIzEzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjA1LjAwI1N0eXJlbmUgYmxvY2sgY29wbG95bWVyIChURVMpIzEzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjAwLjAwI1RoZXJtb3NldCBwbGFzdGljcyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wMS4wMCNFcG94eSAoRVApIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjAyLjAwI1BoZW5vbGljIChQRikjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDMuMDAjVW5zYXR1cmF0ZSBwb2x5ZXN0ZXIgKFVQKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wNC4wMCNVcmVhIChVRikjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDUuMDAjTWVsYW1pbmUgKE1GKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wNi4wMCNUaGVybW9zZXQgcG9seXVyZXRoYW5lIChQVVIpIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjAwLjAwI1RoZXJtb3BsYXN0aWMgcGxhc3RpY3MjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDEuMDAjQWNyeWxvbml0cmlsZSBidXRhZGllbmUgc3R5cmVuZSAoQUJTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wMi4wMCNBY3J5bG9uaXRyaWxlIGJ1dGFkaWVuZSBzdHlyZW5lIChBQlMpIGFsbG95cyMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wMy4wMCNBY2V0YWwgcG9seW1lciMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wNC4wMCNBY3J5bGljIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA1LjAwI0Fjcnlsb25pdHJpbGUgc3R5cmVuZSBhY3J5bGljIChBU0EpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA2LjAwI0Fjcnlsb25pdHJpbGUgc3R5cmVuZSBhY3J5bGljIChBU0EpIGFsbG95cyMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wNy4wMCNDZWxsdWxvc2ljcyMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wOC4wMCNGbHVvcm9wb2x5bWVycyAoUFRGRSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDkuMDAjRXRoeWxlbmUgdmlueWwgYWNldGF0ZSAoRVZBKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xMC4wMCNMaXF1aWQgY3J5c3RhbCBwb2x5bWVyIChMQ1ApIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjExLjAwI1BvbHlhbWlkZSBueWxvbnMgKFBBKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xMi4wMCNQb2x5YnV0eWxlbmUgdGVyZXB0aGFsYXRlIChQQlQpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjEzLjAwI1BvbHljYXJib25hdGUgKFBDKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xNC4wMCNQb2x5ZXRoZXJldGhlcmtldG9uZSAoUEVFSykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTUuMDAjUG9seWV0aGVyaW1pZCAoUEVJKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xNi4wMCNQb2x5ZXRoZXJzdWxmb25lIChQRVMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE3LjAwI0hpZ2ggZGVuc2l0eSBwb2x5ZXRoeWxlbmUgKEhEUEUpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE4LjAwI0xvdyBkZW5zaXR5IHBvbHlldGh5bGVuZSAoTERQRSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTkuMDAjTWVkaXVtIGRlbnNpdHkgcG9seWV0aHlsZW5lIChNRFBFKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yMC4wMCNQb2x5ZXRoeWxlbmUgdGVyZXB0aGFsYXRlIChQRVQpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjIxLjAwI1BvbHlpbWlkZSAoUEkpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjIyLjAwI1BvbHlwcm9weWxlbmUgKFBQKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yMy4wMCNQb2x5cGh0aGFsYW1pZGUgKFBQQSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjQuMDAjUG9seXRoZW55bGVuZSBveGlkZSAoUFBPKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yNS4wMCNQb2x5cGhlbnlsZW5lIHN1bGZpZGUgKFBQUykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjYuMDAjUG9seXN0eXJlbmUgKFBTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yNy4wMCNIaWdoIGltcGFjdCBwb2x5c3R5cmVuZSAoSElQUykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjguMDAjUG9seXN1bGZvbmUgKFBTVSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjkuMDAjUmlnaWQgdGhlcm1vcGxhc3RpYyBwb2x5dXJldGhhbmUgKFJQVFUpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjMwLjAwI1BvbHl2aW55bCBjaGxvcmlkZSAoUFZDKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4zMS4wMCNTdHlyZW5lIGFjcnlsb25pdHJpbGUgKFNBTikjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDAuMDAjUmVzaW5zIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjAxLjAwI1BsYXN0aWMgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjAyLjAwI0luZGVuZSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDMuMDAjVXJlYSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDQuMDAjUGhlbm9saWMgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA1LjAwI1RoZXJtb3BsYXN0aWMgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA2LjAwI0Fsa3lkIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wNy4wMCNNZWxhbWluZSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDguMDAjUG9seWFjZXRhbCByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDkuMDAjUG9seWFtaWRlIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xMC4wMCNQb2x5Y2FyYm9uYXRlIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xMS4wMCNQb2x5ZXRoeWxlbmUgdGVyZXBodGhhbGF0ZSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTIuMDAjUG9seWV0aGVyIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xMy4wMCNBbGx5bCByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTQuMDAjUG9seXVyZXRoYW5lIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xNS4wMCNFcG94eSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTYuMDAjUGV0cm9sZXVtIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMi4wMC4wMCNQbGFzdGljIGZpbG1zIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIyLjAxLjAwI1BvbHl1cmV0aGFuZSBmaWxtcyMxMy4xMC4yMi4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMi4wMi4wMCNTaWxpY29uZSBjb2F0ZWQgZmlsbXMjMTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMDAuMDAuMDAjUmVzaW5zIGFuZCByb3NpbnMgYW5kIG90aGVyIHJlc2luIGRlcml2ZWQgbWF0ZXJpYWxzIzEzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAwLjAwI1Jlc2lucyMxMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wMS4wMCNFcG94eSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wMi4wMCNQaGVub2xpYyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wMy4wMCNVbnNhdHVyYXRlZCBwb2x5ZXN0ZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDQuMDAjQWNyeWxvbml0cmlsZSBidXRhZGllbmUgc3R5cmVuZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wNS4wMCNBY3J5bG9uaXRyaWxlIHN0eXJlbmUgYWNyeWxpYyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wNi4wMCNBY3J5bG9uaXRyaWxlIHN0eXJlbmUgYWNyeWxpYyBhbGxveXMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDcuMDAjRmx1b3JvcG9seW1lcnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDguMDAjRXRoeWxlbmUgdmlueWwgYWNldGF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wOS4wMCNMaXF1aWQgY3J5c3RhbCBwb2x5bWVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjEwLjAwI055bG9uIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjExLjAwI1BvbHlidXR5bGVuZSB0ZXJlcHRoYXRsYXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjEyLjAwI1BvbHljYXJib25hdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTMuMDAjUG9seWV0aGVyZXRoZXJrZXRvbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTQuMDAjUG9seWV0aGVyaW1pZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTUuMDAjUG9seWV0aGVyc3VsZm9uZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNi4wMCNQb2x5ZXRoeWxlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTcuMDAjUG9seWV0aHlsZW5lIHRlcnB0aGFsYXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE4LjAwI1BvbHlpbWlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xOS4wMCNQb2x5cHJvcHlsZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjIwLjAwI1BvbHlwaHRoYWxhbWlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yMS4wMCNQb2x5ZXRoeWxlbmUgb3hpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjIuMDAjUG9seXBoZW55bGVuZSBzdWxmaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjIzLjAwI1BvbHlzdHlyZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI0LjAwI1BvbHlzdWxmb25lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI1LjAwI1BvbHl2aW55bCBjaGxvcmlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yNi4wMCNTdHlyZW5lIGFjcnlsb25pdHJpbGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjcuMDAjVXJlYSBmb3JtYWxkZWh5ZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjguMDAjQWxreWQjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjkuMDAjTWVsYW1pbmUgZm9ybWFsZGVoeWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjMwLjAwI1BvbHlhY2V0YWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzEuMDAjUG9seWFtaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjMyLjAwI0FsbHlsIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjMzLjAwI0V0aHlsZW5lIGFjcnlsaWMgYWNpZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zNC4wMCNQb2x5dmlueWwgY2hsb3JpZGUgY29tcG91bmQjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzUuMDAjU29sdXRpb24gdmlueWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzYuMDAjUGhlbm94eSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zNy4wMCNDb21wb3VuZGVkIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zOC4wMCNQb2x5dmlubHkgcHlyb2xpZGluZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zOS4wMCNQb2x5ZXRoeWxlbmUgdGVyZXBodGhhbGF0ZSBvciBnbHljb2wgbW9kaWZpZWQjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDAuMDAjSHlkcm9jYXJib24gdGFja2lmaWVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQxLjAwI1BvbHljYXJib25hdGUgYmxlbmRzIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQyLjAwI1BvbHl2aW55bCBhbGNvaG9sIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQzLjAwI1BvbHl2aW55bCBidXR5cmFsIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ0LjAwI1BvbHllc3RlciBtb2xkaW5nIGNvbXBvdW5kcyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40NS4wMCNQb2x5dmlueWwgYWNldGF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40Ni4wMCNQb2x5dmlueWwgZXRoZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDcuMDAjUG9seXZpbnlsIGZvcm1hbCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40OC4wMCNTdHlyZW5lIGFjcnlsaWMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDkuMDAjRXRoeWxlbmUgcHJvcHlsZW5lIHBvbHltZXJzIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjUwLjAwI1BvbHlwcm9weWxlbmUgb3hpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTEuMDAjUG9seXByb3B5bGVuZSBldGhlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41Mi4wMCNQb2x5cHJvcHlsZW5lIHN1bGZvbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTMuMDAjUG9seW1ldGh5bGFjcnlsYXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU0LjAwI1N0eXJlbmUgbWFsZWljIGFuaHlkcmlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41NS4wMCNTeW5kaW90YXRpYyBwb2x5c3R5cmVuZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41Ni4wMCNDaGxvcmluYXRlZCBwb2x5dmlueWwgY2hsb3JpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTcuMDAjVGhlcm1vcGxhc3RpYyBwb2x5ZXN0ZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTguMDAjSW5kZW5lIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41OS4wMCNQbGFzdGljIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC42MC4wMCNQZXRyb2xldW0gcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjYxLjAwI1BvbHl1cmV0aGFuZSByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNjIuMDAjUG9seWV0aGVyIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMS4wMC4wMCNSb3NpbnMjMTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTEuMDEuMDAjV29vZCByb3NpbiMxMy4xMS4xMS4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMS4wMi4wMCNHdW0gcm9zaW4jMTMuMTEuMTEuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTEuMDMuMDAjVGFsbCBvaWwgcm9zaW4jMTMuMTEuMTEuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDAuMDAjRmlsbXMjMTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDEuMDAjUG9seWV0aHlsZW5lIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjAyLjAwI1BvbHl1cmV0aGFuZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wMy4wMCNBY2V0YXRlIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA0LjAwI0FjcnlsaWMgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDUuMDAjQ29leHRydWRlZCBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wNi4wMCNGbG91cm9wb2x5bWVyIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA3LjAwI01ldGFsaXplZCBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wOC4wMCNOeWxvbiBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wOS4wMCNQb2x5Y2FyYm9uYXRlIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjEwLjAwI1BvbHllc3RlciBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xMS4wMCNQb2x5cHJvcHlsZW5lIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjEyLjAwI0JpYXhpYWxseSBvcmllbnRhdGVkIHBvbHlwcm9weWxlbmUjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTMuMDAjUG9seW1pZGUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTQuMDAjUG9seXN0eXJlbmUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTUuMDAjRmxleGlibGUgcG9seXZpbnlsIGNobG9yaWRlIGZpbG0jMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTYuMDAjUmlnaWQgcG9seXZpbnlsIGNobG9yaWRlIGZpbG0jMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTcuMDAjRXRoeWxlbmUgdmlueWwgYWxjb2hvbCBmaWxtIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjE4LjAwI1BvbHl2aW55bGlkZW5lIGNobG9yaWRlIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjE5LjAwI1BvbHl2aW55bCBhbGNvaG9sIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjAwLjAwI0ZvYW1zIzEzLjExLjAwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjAxLjAwI1BvbHlvbGVmaW4gZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wMi4wMCNQb2x5ZXRoZXIgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wMy4wMCNTaWxpY29uZSBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA0LjAwI0V0aHlsZW5lIHByb3B5bGVuZSB0ZXJwb2x5bWVyIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDUuMDAjTmVvcHJlbmUgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wNi4wMCNQb2x5dmlueWwgY2hsb3JpZGUgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wNy4wMCNSdWJiZXIgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wOC4wMCNQb2x5c3R5cmVuZSBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzE0LjAwLjAwLjAwLjAwI1BhcGVyIE1hdGVyaWFscyBhbmQgUHJvZHVjdHMjMTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTAuMDAuMDAuMDAjUGFwZXIgbWF0ZXJpYWxzIzE0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEwLjE1LjAwLjAwI1JhdyBtYXRlcmlhbHMjMTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTAuMTUuMDEuMDAjUGFwZXIgcHVscCMxNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4wMC4wMC4wMCNQYXBlciBwcm9kdWN0cyMxNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wMC4wMCNQcmludGluZyBhbmQgd3JpdGluZyBwYXBlciMxNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wMS4wMCNPbmlvbiBza2luIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAyLjAwI1ZlbGx1bSBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wMy4wMCNQYXJjaG1lbnQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDQuMDAjVHJhY3RvciBmZWVkIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjA1LjAwI01pbWVvZ3JhcGggcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDYuMDAjQ29tcHV0ZXIgcHJpbnRvdXQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDcuMDAjUHJpbnRlciBvciBjb3BpZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDguMDAjRmFjc2ltaWxlIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjA5LjAwI1N0YXRpb25lcnkjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTAuMDAjUGxvdHRlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xMS4wMCNXcml0aW5nIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjEyLjAwI0dyYXBoIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjEzLjAwI0xlZGdlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xNC4wMCNQYXBlciBwYWRzIG9yIG5vdGVib29rcyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xNS4wMCNDYWxjdWxhdG9yIG9yIGNhc2ggcmVnaXN0ZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTYuMDAjTm90ZWJvb2sgZmlsbGVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE3LjAwI0J1c2luZXNzIGZvcm1zIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE4LjAwI0luZGV4IGNhcmRzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE5LjAwI0NhcmRzdG9jayBwYXBlcnMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjAuMDAjQmxvdHRlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yMS4wMCNMYXNlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yMi4wMCNJbmtqZXQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjMuMDAjVHJhY2luZyBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yNC4wMCNGb29sc2NhcCBzaGVldHMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjUuMDAjTXVsdGlwdXJwb3NlIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjI2LjAwI1RlbGVwaG9uZSBtZXNzYWdlIHBhZHMgb3IgYm9va3MjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjguMDAjTWFnbmV0IHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjI5LjAwI1RlbGV4IHJvbGxzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjMwLjAwI1NlbGYgYWRoZXNpdmUgbm90ZSBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wMC4wMCNOb3ZlbHR5IHBhcGVyIzE0LjExLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjAxLjAwI0dpZnQgd3JhcHBpbmcgcGFwZXIgb3IgYmFncyBvciBib3hlcyMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wNC4wMCNCdXNpbmVzcyBjYXJkcyMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wNS4wMCNHcmVldGluZyBvciBub3RlIG9yIHBvc3QgY2FyZHMjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDYuMDAjQXJ0IG9yIGNyYWZ0IHBhcGVyIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA3LjAwI1Bvc3RlciBib2FyZHMjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDguMDAjR2lmdCBjZXJ0aWZpY2F0ZSMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wOS4wMCNDb3ZlciBwYXBlciMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wMC4wMCNQZXJzb25hbCBwYXBlciBwcm9kdWN0cyMxNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wMS4wMCNGYWNpYWwgdGlzc3VlcyMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wMi4wMCNUb2lsZXQgc2VhdCBjb3ZlcnMjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDMuMDAjUGFwZXIgdG93ZWxzIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjA0LjAwI1RvaWxldCB0aXNzdWUjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDUuMDAjUGFwZXIgbmFwa2lucyBvciBzZXJ2aWV0dGVzIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjA2LjAwI1BhcGVyIHRhYmxlIGNsb3RoIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjAwLjAwI0J1c2luZXNzIHVzZSBwYXBlcnMjMTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDEuMDAjVGlja2V0cyBvciB0aWNrZXQgcm9sbHMjMTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDIuMDAjUmVjZWlwdHMgb3IgcmVjZWlwdCBib29rcyMxNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wMy4wMCNWb3VjaGVycyMxNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wNC4wMCNCaWxscyBvciBiaWxsIGJvb2tzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjA1LjAwI0NoZWNrcyBvciBjaGVjayBib29rcyMxNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4wMC4wMC4wMCNJbmR1c3RyaWFsIHVzZSBwYXBlcnMjMTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTUuMDAuMDAjUGFwZXJib2FyZCBhbmQgcGFja2FnaW5nIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wMS4wMCNCbGVhY2hlZCBwYXBlcmJvYXJkIzE0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjAyLjAwI1VuYmxlYWNoZWQgcGFwZXJib2FyZCMxNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wMy4wMCNDYXJkYm9hcmQjMTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTUuMDQuMDAjUGFja2FnaW5nIHBhcGVyIzE0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE2LjAwLjAwI1Rpc3N1ZSBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDEuMDAjVW5ibGVhY2hlZCBjcmVwZSBwYXBlcnMjMTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDIuMDAjU2VtaSBibGVhY2hlZCBjcmVwZSBwYXBlcnMjMTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDMuMDAjV2V0IHN0cmVuZ3RoIHRpc3N1ZSBwYXBlcnMjMTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDQuMDAjQWNpZCBmcmVlIHRpc3N1ZSBwYXBlcnMjMTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDUuMDAjS3JhZnQgdGlzc3VlIHBhcGVyIzE0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE3LjAwLjAwI0xhbWluYXRlZCBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTcuMDEuMDAjUGFwZXJzIGJvbmRlZCB3aXRoIGZpbG0jMTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTcuMDIuMDAjQ3lsaW5kZXIgcGFwZXJzIG9yIG11bHRpIGxheWVyIGhlYXZ5d2VpZ2h0IHBhcGVyIzE0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjAwLjAwI0NvYXRlZCBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDEuMDAjQ2xheSBjb2F0ZWQgcGFwZXJzIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjAyLjAwI1BvbHlldGh5bGVuZSBjb2F0ZWQgcGFwZXJzIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjAzLjAwI1BvbHllc3RlciBjb2F0ZWQgcGFwZXJzIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA0LjAwI1NpbGljb25lIGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDUuMDAjTGF0ZXggdHJlYXRlZCBjb2F0ZWQgcGFwZXIjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDYuMDAjV2F4ZWQgcGFwZXIjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDcuMDAjQnV0Y2hlciBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDguMDAjRnJlZXplciBwYXBlciMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wOS4wMCNNYXNraW5nIHBhcGVyIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjEwLjAwI0NhcmJvbiBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDAuMDAjTmV3c3ByaW50IGFuZCBvZmZzZXQgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjAxLjAwI1N0YW5kYXJkIG5ld3NwcmludCMxNC4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOS4wMi4wMCNDb2xvcmVkIG5ld3NwcmludCMxNC4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOS4wMy4wMCNIaWdoIGJyaWdodG5lc3MgbmV3c3ByaW50IzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjA0LjAwI09mZnNldCBwYXBlciMxNC4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMC4wMC4wMCNTcGVjaWFsdHkgY29hdGVkIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMC4wMS4wMCNCdXRjaGVyIHBhcGVycyMxNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMC4wMi4wMCNGcmVlemVyIHBhcGVyIzE0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjAwLjAwI1VuY29hdGVkIGJhc2UgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjAxLjAwI1N1cGVyIGNhbGVuZGFyZWQga3JhZnQgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDIuMDAjTWFjaGluZSBmaW5pc2hlZCBvciBnbGF6ZWQga3JhZnQgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDMuMDAjTm9uIHRyZWF0ZWQgdW5jb2F0ZWQgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDQuMDAjTm9uIHRyZWF0ZWQgY3JlcGUgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDUuMDAjTGF0ZXggdHJlYXRlZCBjcmVwZSBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wNi4wMCNMYXRleCB0cmVhdGVkIHVuY29hdGVkIHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE1LjAwLjAwLjAwLjAwI0Z1ZWxzIGFuZCBGdWVsIEFkZGl0aXZlcyBhbmQgTHVicmljYW50cyBhbmQgQW50aSBjb3Jyb3NpdmUgTWF0ZXJpYWxzIzE1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEwLjAwLjAwLjAwI0Z1ZWxzIzE1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjAwLjAwI1BldHJvbGV1bSBhbmQgZGlzdGlsbGF0ZXMjMTUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDEuMDAjRnVlbCBvaWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDIuMDAjS2Vyb3NlbmUjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDMuMDAjTmFwaHRoYSMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wNC4wMCNBdmlhdGlvbiBmdWVsIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA1LjAwI0RpZXNlbCBmdWVsIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA2LjAwI0dhc29saW5lIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA3LjAwI1BldHJvbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wOC4wMCNDcnVkZSBvaWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDkuMDAjTWFyaW5lIGZ1ZWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMTAuMDAjQ29uZGVuc2F0ZSMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wMC4wMCNDb2FsIGFuZCBsaWduaXRlIGFuZCBwZWF0IzE1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjAxLjAwI0NvYWwjMTUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDIuMDAjTGlnbml0ZSMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wMy4wMCNQZWF0IzE1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjA0LjAwI0Nva2UjMTUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDUuMDAjQ2hhcmNvYWwjMTUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMDAuMDAuMDAjR2FzZW91cyBmdWVscyBhbmQgYWRkaXRpdmVzIzE1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjAwLjAwI0dhc2VvdXMgZnVlbHMjMTUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDEuMDAjUHJvcGFuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wMi4wMCNNZXRoYW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjAzLjAwI1Byb3B5bGVuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wNC4wMCNFdGh5bGVuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wNS4wMCNCdXRhbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDYuMDAjQWNldHlsZW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA3LjAwI1dhdGVyIGdhcyBvciBwcm9kdWNlciBnYXMjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDguMDAjQ29hbCBnYXMjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDkuMDAjTGlxdWlmaWVkIHBldHJvbGV1bSBnYXMjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMTAuMDAjRnVlbCBhZGRpdGl2ZXMjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTYuMDAuMDAjRnVlbCBhZGRpdGl2ZXMjMTUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTYuMDEuMDAjRXRoYW5vbCMxNS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNi4wMi4wMCNNZXRoYW5vbCMxNS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMi4wMC4wMC4wMCNMdWJyaWNhbnRzIGFuZCBvaWxzIGFuZCBncmVhc2VzIGFuZCBhbnRpIGNvcnJvc2l2ZXMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDAuMDAjTHVicmljYXRpbmcgcHJlcGFyYXRpb25zIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjAxLjAwI0VuZ2luZSBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDIuMDAjQ3V0dGluZyBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDMuMDAjR2VhciBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDQuMDAjSHlkcmF1bGljIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wNS4wMCNUcmFuc2Zvcm1lciBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDcuMDAjTGl0aGl1bSBncmVhc2UjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDguMDAjVHJhbnNtaXNzaW9uIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wOS4wMCNCcmFrZSBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTAuMDAjQW50aWdhbGxpbmcjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTEuMDAjQXNzZW1ibHkgcGFzdGVzIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjEyLjAwI0FudGkgYWRoZXNpdmVzIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjEzLjAwI0dyYXBoaXRlIGx1YnJpY2FudHMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTQuMDAjU3ByYXkgbHVicmljYW50cyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xNS4wMCNBbnRpIHNlaXplIG9yIGFudGkgc3RhaW4gY29tcG91bmRzIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjE2LjAwI0xlYWsgc3RvcCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNi4wMC4wMCNXYXhlcyMxNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNi4wMS4wMCNQYXJhZmZpbiB3YXgjMTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTYuMDIuMDAjU2VhbGluZyB3YXgjMTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTYuMDMuMDAjT2xlZmluIHdheCMxNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNy4wMC4wMCNTcGVjaWFsdHkgbHVicmljYW50cyMxNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNy4wMS4wMCNQZXRyb2xhdHVtIzE1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjAwLjAwI0FudGkgY29ycm9zaXZlcyMxNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wMS4wMCNNb2lzdHVyZSByZXBlbGxlbnQjMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDIuMDAjQW50aSBjb3Jyb3Npb24gbHVicmljYW50IzE1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjAzLjAwI1J1c3QgcmVtb3ZlciMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wNC4wMCNSdXN0IHByb29maW5nIHByZXBhcmF0aW9uIzE1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjA1LjAwI0FudGkgd2VsZCBwYXN0ZXMjMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTkuMDAuMDAjR3JlYXNlcyMxNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wMS4wMCNTaWxpY29uZSBncmVhc2UjMTUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTkuMDIuMDAjR3JlYXNlIzE1LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE5LjAzLjAwI1RlZmxvbiBncmVhc2UjMTUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTkuMDQuMDAjV29vbCBncmVhc2UjMTUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMDAuMDAuMDAjRnVlbCBmb3IgbnVjbGVhciByZWFjdG9ycyMxNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wMC4wMCNOdWNsZWFyIGZ1ZWwjMTUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDIuMDAjRGVwbGV0ZWQgdXJhbml1bSMxNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wMy4wMCNFbnJpY2hlZCB1cmFuaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjA0LjAwI0lyaWRpdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDUuMDAjRW5yaWNoZWQgcGx1dG9uaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjA2LjAwI0RlcGxldGVkIHBsdXRvbml1bSMxNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNi4wMC4wMCNGaXNzaW9uIGZ1ZWwgYXNzZW1ibGllcyMxNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNi4wMS4wMCNOdWNsZWFyIGZ1ZWwgcm9kIzE1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzIwLjAwLjAwLjAwLjAwI01pbmluZyBNYWNoaW5lcnkgYW5kIEFjY2Vzc29yaWVzIzIwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjAwLjAwLjAwI01pbmluZyBhbmQgcXVhcnJ5aW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjE1LjAwLjAwI0N1dHRpbmcgZXF1aXBtZW50IzIwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjE1LjAxLjAwI0NvbnRpbnVvdXMgbWluaW5nIGVxdWlwbWVudCMyMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNS4wMi4wMCNMb25nd2FsbCBzaGVhcnMjMjAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDMuMDAjQ29hbCBjdXR0ZXJzIzIwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE1LjA0LjAwI1JvY2sgY3V0dGVycyMyMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNi4wMC4wMCNTY3JlZW5zIGFuZCBmZWVkaW5nIGVxdWlwbWVudCMyMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNi4wMS4wMCNTY3JlZW5zIzIwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE2LjAyLjAwI0ZlZWRlcnMjMjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDAuMDAjQ3J1c2hlcnMgYW5kIGJyZWFrZXJzIGFuZCBncmluZGVycyMyMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wMS4wMCNSb2NrIGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjAyLjAwI1JvbGwgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDMuMDAjQ29uZSBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wNC4wMCNHeXJhdG9yeSBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wNS4wMCNJbXBhY3QgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDYuMDAjSmF3IGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA3LjAwI0NydXNoaW5nIHBsYW50cyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wOC4wMCNSb2QgbWlsbHMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDkuMDAjQmFsbCBtaWxscyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4xMC4wMCNQdWx2ZXJpemluZyBtYWNoaW5lcnkjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMTEuMDAjUm9jayBicmVha2VycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4xMi4wMCNFYXJ0aCBncmluZGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4xMy4wMCNDeWNsb25lIG9yIHZvcnRleCBncmluZGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMS4wMC4wMC4wMCNXZWxsIGRyaWxsaW5nIGFuZCBvcGVyYXRpb24gZXF1aXBtZW50IzIwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjAwLjAwI0RyaWxsaW5nIGFuZCBleHBsb3JhdGlvbiBlcXVpcG1lbnQjMjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDEuMDAjR2FzIHdlbGwgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjAyLjAwI09pbCB3ZWxsIGRyaWxsaW5nIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wMy4wMCNTdWJzZWEgc3lzdGVtIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wNC4wMCNXYXRlciB3ZWxsIGRyaWxsaW5nIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wNS4wMCNVcmFuaXVtIGV4cGxvcmF0aW9uIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wNi4wMCNXZWxsaGVhZCBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDcuMDAjTXVkIG9yIHdvcmtvdmVyIGZsdWlkIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wOC4wMCNTZWlzbWljIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wMC4wMCNEcmlsbGluZyBhbmQgb3BlcmF0aW9uIG1hY2hpbmVyeSMyMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wMS4wMCNCb3Jpbmcgb3Igc2lua2luZyBtYWNoaW5lcnkjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDIuMDAjRG93bmhvbGUgYXNzZW1ibHkgbWFjaGluZXJ5IzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjAzLjAwI0hhbW1lciBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDQuMDAjQ3Jhd2xlciBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDUuMDAjUm9jayBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDYuMDAjUG5ldW1hdGljIHZpYnJhdG9ycyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNy4wMCNUdW5uZWxpbmcgbWFjaGluZXJ5IzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA4LjAwI1N0cmlraW5nIGhhbW1lcnMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDkuMDAjU2lua2VyIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xMC4wMCNTZXdlciBpbnNwZWN0aW9uIG1hY2hpbmVyeSMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xMS4wMCNSb3RhcnkgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjEyLjAwI0RyaWxsaW5nIHJpZ3MjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTMuMDAjTG9uZyBob2xlIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNC4wMCNJbmR1c3RyaWFsIGRyaWxsIGJpdHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTUuMDAjRHJpZnRlcnMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTYuMDAjRGVycmlja3MjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTcuMDAjRHJpbGxpbmcgY2FycmlhZ2VzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE4LjAwI0Rvd25ob2xlIGZpc2hpbmcgcG9sZXMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTkuMDAjV2VsbCBkcmlsbGluZyBiaXQgY29uZXMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTcuMDAuMDAjRHJpbGxpbmcgYW5kIG9wZXJhdGlvbiBhY2Nlc3NvcmllcyMyMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wMS4wMCNBdWRpbyB2aXN1YWwgaW5zdHJ1bWVudHMgZm9yIHdlbGwgaW5zcGVjdGlvbiMyMC4xMS4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wMi4wMCNQYWNrZXJzIG9yIHR1YmluZyBhbmNob3JzIzIwLjExLjE3LjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjAzLjAwI0RyaWxsaW5nIGNhc2luZ3MjMjAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTcuMDQuMDAjRHJpbGxpbmcgc2NyZWVucyMyMC4xMS4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4wMC4wMC4wMCNPaWwgYW5kIGdhcyBkcmlsbGluZyBhbmQgZXhwbG9yYXRpb24gZXF1aXBtZW50IzIwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjAwLjAwI0FjaWRpemluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDEuMDAjQWNpZGl6aW5nIGJsZW5kaW5nIHVuaXRzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjAyLjAwI0FjaWRpemluZyBkZW5zaXR5IHNlbnNvcnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDMuMDAjQWNpZGl6aW5nIHB1bXBpbmcgdW5pdHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDQuMDAjQWNpZGl6aW5nIHVuaXRzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA1LjAwI0FjaWRpemluZyBhaXIgcGlwaW5nIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA2LjAwI0FjaWRpemluZyBiYWxsIGluamVjdG9ycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wNy4wMCNCdWxrIGxpcXVpZCBhY2lkIGVxdWlwbWVudCMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wOC4wMCNBY2lkaXppbmcgZHJvcCBib3hlcyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wOS4wMCNBY2lkaXppbmcgZmxvdyBtZXRlcnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTAuMDAjQWNpZGl6aW5nIGp1bmN0aW9uIGJveGVzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjExLjAwI0FjaWRpemluZyBwcmVzc3VyZSBzZW5zb3JzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjEyLjAwI0FjaWRpemluZyBwcm9jZXNzIHBpcGluZyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xMy4wMCNBY2lkaXppbmcgc3RyYWlnaHQgam9pbnRzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjE0LjAwI0FjaWRpemluZyBzd2l2ZWxzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjE1LjAwI0FjaWRpemluZyB0cmVhdGluZyBpcm9ucyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xNi4wMCNBY2lkaXppbmcgdHJlZSBzYXZlcnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDAuMDAjQ2VtZW50aW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wMS4wMCNCbGVuZGluZyB1bml0cyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wMi4wMCNCcmlkZ2UgcGx1Z3MjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDMuMDAjQnVsayBsaXF1aWQgY2VtZW50IGVxdWlwbWVudCMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wNC4wMCNDZW1lbnQgYnVsayBtYXRlcmlhbCBlcXVpcG1lbnQjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDUuMDAjQ2VtZW50IGRlbnNpdHkgc2Vuc29ycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wNi4wMCNDZW1lbnQgZmxvYXRpbmcgYnVsayB1bml0cyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wNy4wMCNDZW1lbnQgZmxvYXRpbmcgZXF1aXBtZW50IHN0YWdlIHRvb2xzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA4LjAwI0NlbWVudCBmbG9hdGluZyBlcXVpcG1lbnQgd2lwZXIgcGx1Z3MjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDkuMDAjQ2VtZW50IHB1bXBpbmcgdW5pdHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTAuMDAjQ2VtZW50IHJldGFpbmVycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xMS4wMCNDZW50cmFsaXplcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTIuMDAjRXhwcmVzcyBsYXRjaCBjb3VwbGVycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xMy4wMCNGbG9hdCBjb2xsYXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE0LjAwI0Zsb2F0IHNob2VzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE1LjAwI09pbGZpZWxkIGNlbWVudGluZyB0b29scyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xNi4wMCNSZXRyaWV2YWJsZSBjZW1lbnRpbmcgcGFja2VycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xNy4wMCNTYWZldHkgc2xpbmdzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE4LjAwI1N1YnNlYSBjZW1lbnQgaGVhZHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTkuMDAjU3VyZmFjZSBjZW1lbnQgaGVhZHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDAuMDAjRnJhY3R1cmluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDEuMDAjQnVsayBsaXF1aWQgZnJhY3R1cmluZyBlcXVpcG1lbnQjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDIuMDAjRnJhY3R1cmluZyBidWxrIHByb3BwYW50IGVxdWlwbWVudCMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMy4wMCNGcmFjdHVyaW5nIGNvbnRyb2wgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDQuMDAjRnJhY3R1cmluZyBkZW5zaXR5IHNlbnNvcnMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDUuMDAjRnJhY3R1cmluZyBtYW5pZm9sZCB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNi4wMCNGcmFjdHVyaW5nIHByb3BwYW50IGNvbnZleWluZyBlcXVpcG1lbnQjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDcuMDAjRnJhY3R1cmluZyBwdW1waW5nIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA4LjAwI0ZyYWN0dXJpbmcgc2x1cnJ5IGJsZW5kaW5nIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA5LjAwI0dlbCBibGVuZGluZyB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4xMC4wMCNGcmFjdHVyaW5nIG1pc3NpbGVzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjExLjAwI1B1bXAgaW50ZWdyaXR5IG1vbml0b3JzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjEyLjAwI0ZyYWN0dXJpbmcgc2VydmljZSBwYWNrZXJzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjEzLjAwI1N0aW11bGF0aW9uIHB1bXBpbmcgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDAuMDAjU2FuZCBjb250cm9sIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wMS4wMCNCbGFua2luZyBwbHVncyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wMi4wMCNGbG9hdGVycyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wMy4wMCNGcmFjIHBhY2sgc3lzdGVtcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wNC4wMCNHcmF2ZWwgcGFjayBzeXN0ZW1zIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA1LjAwI0d1aWRlIHNob2VzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA2LjAwI0hvb2sgdXAgbmlwcGxlcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wNy4wMCNNYWtlIHVwIHN1YnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDguMDAjUHJvZHVjdGlvbiB0dWJpbmcgb3ZlcnNob3RzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA5LjAwI1NhbmQgY29udHJvbCBibGFua3MjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTAuMDAjU2FuZCBjb250cm9sIGJ1bGsgbGlxdWlkIGVxdWlwbWVudCMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xMS4wMCNTYW5kIGNvbnRyb2wgYnVsayBwcm9wcGFudCBlcXVpcG1lbnQjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTIuMDAjU2FuZCBjb250cm9sIGRlbnNpdHkgc2Vuc29ycyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xMy4wMCNTYW5kIGNvbnRyb2wgbWFuaWZvbGQgdW5pdHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTQuMDAjU2FuZCBjb250cm9sIHByb3BwYW50IGNvbnZleWluZyBlcXVpcG1lbnQjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTUuMDAjU2FuZCBjb250cm9sIHB1bXBpbmcgdW5pdHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTYuMDAjU2FuZCBjb250cm9sIHNjcmVlbnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTcuMDAjU2FuZCBjb250cm9sIHNsdXJyeSBibGVuZGluZyB1bml0cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xOC4wMCNTYW5kIGRldGVjdG9ycyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xOS4wMCNTZWFsIGFzc2VtYmx5IGxvY2F0b3JzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjIwLjAwI1NoZWFyIGpvaW50cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4yMS4wMCNTbGVldmUgc2hpZnRpbmcgdG9vbHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMjIuMDAjU2xpZGluZyBzbGVldmVzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjIzLjAwI1ZlbG9jaXR5IHN0cmluZ3MjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDAuMDAjQ29tcGxldGlvbiB0b29scyBhbmQgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjAxLjAwI0JhbGwgY2F0Y2hlciBzdWJzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjAyLjAwI0JsYXN0IGpvaW50cyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wMy4wMCNCbGFzdCBuaXBwbGVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA0LjAwI0NvbXBsZXRpb24gYnVsbCBwbHVncyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wNS4wMCNDaXJjdWxhdGlvbiBwcm9kdWN0aW9uIGRldmljZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDYuMDAjQ29tcGxldGlvbiB0ZXN0IGVxdWlwbWVudCMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wNy4wMCNDb250cm9sIGxpbmUgcHJvdGVjdG9ycyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wOC4wMCNEZWZsZWN0aW9uIHRvb2xzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA5LjAwI0NvbXBsZXRpb24gZXhwYW5zaW9uIGpvaW50cyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xMC4wMCNGbG93IGNvdXBsaW5ncyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xMS4wMCNHYXMgbGlmdCBlcXVpcG1lbnQjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTIuMDAjSGFuZ2VyIGxhbmRpbmcgdG9vbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTMuMDAjQ29tcGxldGlvbiBoeWRyYXVsaWMgcHVtcHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTQuMDAjSHlkcmF1bGljIHNldHRpbmcgdG9vbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTUuMDAjSW5qZWN0aW9uIHN5c3RlbXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTYuMDAjTGFuZGluZyBuaXBwbGVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjE3LjAwI0xpbmVyIGhhbmdlcnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTguMDAjUGFja2VyIHB1bGxpbmcgdG9vbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTkuMDAjUGFja2VyIHJ1bm5pbmcgdG9vbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjAuMDAjUHJvZHVjdGlvbiBwYWNrZXJzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjIxLjAwI1B1bXAgZG93biB0aHJvdWdoIGZsb3cgbGluZSBlcXVpcG1lbnQjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjIuMDAjQ29tcGxldGlvbiBzYWZldHkgam9pbnRzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjIzLjAwI0NvbXBsZXRpb24gc2VhbCBhc3NlbWJsaWVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI0LjAwI1NlYWwgYm9yZXMgb3IgcG9saXNoZWQgYm9yZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjUuMDAjU2lkZSBwb2NrZXQgbWFuZHJlbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjYuMDAjU2xpZGluZyBzbGVldmVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI3LjAwI1N1YnN1cmZhY2Ugc2FmZXR5IHZhbHZlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yOC4wMCNUcmF2ZWwgam9pbnRzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI5LjAwI1R1YmluZyBhbmNob3JzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjMwLjAwI1R3aW4gZmxvdyBhc3NlbWJsaWVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjAwLjAwI0NvbnZlbnRpb25hbCBkcmlsbGluZyB0b29scyMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wMS4wMCNCbG93b3V0IHByZXZlbnRlcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDIuMDAjQmxvd291dCBwcmV2ZW50ZXIgY29udHJvbHMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDMuMDAjQ2FzaW5nIHNjcmFwZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA0LjAwI0RyaWxsIGNvbGxhcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDUuMDAjQ29yaW5nIGVxdWlwbWVudCMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wNi4wMCNEcmlsbCBwaXBlIHRocmVhZCBwcm90ZWN0b3JzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA3LjAwI0RyaWxsIHBpcGUgdG9vbCBqb2ludHMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDguMDAjRHJpbGwgcGlwZSMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wOS4wMCNHYXVnZSByaW5ncyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xMC4wMCNIb2xlIG9wZW5lcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTEuMDAjSG9sZSByZWFtZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjEyLjAwI0Zpc2hpbmcgamFycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xMy4wMCNEb3duaG9sZSBzaG9jayBhYnNvcmJlcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTQuMDAjRG93bmhvbGUgc3RhYmlsaXplcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTUuMDAjRHJpbGxpbmcgc3VicyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xNi4wMCNUaHJ1c3RlcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDAuMDAjRHJpbGxpbmcgYml0cyMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wMS4wMCNGaXhlZCBjdXR0ZXIgZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wMi4wMCNOYXR1cmFsIGRpYW1vbmQgZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wMy4wMCNOb3p6bGUgZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wNC4wMCNQREMgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wNS4wMCNSb2xsZXIgY29uZSBidXR0b24gaW5zZXJ0IGRyaWxsIGJpdHMjMjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDYuMDAjUm9sbGVyIHN0ZWVsIHRvb3RoIGRyaWxsIGJpdHMjMjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDAuMDAjRmlzaGluZyB0b29scyMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wMS4wMCNCdW1wZXIgc3VicyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wMi4wMCNDYXNpbmcgcGF0Y2hlcyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wMy4wMCNKYXIgYm9vc3RlcnMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDQuMDAjSnVuayBzdWJzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjA1LjAwI01pbGxzIG9yIGJ1cm5pbmcgc2hvZXMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDYuMDAjT3ZlcnNob3RzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjA3LjAwI09pbGZpZWxkIGZpc2hpbmcgc3BlYXJzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjA4LjAwI1Vuc3BlY2lmaWVkIGZpc2hpbmcgdG9vbHMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDAuMDAjRGlyZWN0aW9uYWwgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjAxLjAwI0dlb3N0ZWVyaW5nIHRvb2xzIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjAyLjAwI011ZCBtb3RvcnMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDMuMDAjUm90YXJ5IHN0ZWVyYWJsZSB0b29scyMyMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wNC4wMCNEaXJlY3Rpb25hbCBkcmlsbGluZyBzdXJmYWNlIGNvbnRyb2wgc3lzdGVtcyMyMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wNS4wMCNTdHJhaWdodCBob2xlIGRpcmVjdGlvbmFsIGRyaWxsaW5nIHRvb2xzIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjAwLjAwI1dlbGwgbWVhc3VyZW1lbnQgYW5kIGxvZ2dpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjAxLjAwI0Fjb3VzdGljIHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjAyLjAwI0RyaWxsaW5nIG9yIG11ZCBjb250cm9sIGluc3RydW1lbnRzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjAzLjAwI0RyaWxsaW5nIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA0LjAwI0Zsb3cgbWVhc3VyZW1lbnQgZXF1aXBtZW50IzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA1LjAwI051Y2xlYXIgbWFnbmV0aWMgcmVzb25hbmNlIHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA2LjAwI051Y2xlYXIgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDcuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIGVxdWlwbWVudCMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wOC4wMCNSZXNpc3Rpdml0eSB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wOS4wMCNTdXJ2ZXlpbmcgc3lzdGVtcyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4xMC4wMCNUZWxlbWV0cnkgc3lzdGVtcyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4xMS4wMCNVbHRyYXNvbmljIHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjEyLjAwI1dlbGwgbG9nZ2luZyBib3R0b20gaG9sZSBwcmVzc3VyZSBlcXVpcG1lbnQjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTMuMDAjV2VsbCBsb2dnaW5nIGRvd25ob2xlIHRlc3QgZXF1aXBtZW50IzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjE0LjAwI1dlbGwgbG9nZ2luZyB1bml0cyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wMC4wMCNGaXh0dXJpbmcgYW5kIHRlc3QgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjAxLjAwI0RyaWZ0IGJhcnMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDIuMDAjRHJpZnQgc2xlZXZlcyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wMy4wMCNEcmlmdCByYWJiaXRzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjA0LjAwI1Rlc3QgZml4dHVyZXMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDUuMDAjVGVzdCBuaXBwbGVzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjA2LjAwI1Rlc3QgcGx1Z3MjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDAuMDAjUGVyZm9yYXRpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjAxLjAwI0NhcHN1bGUgZ3VucyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wMi4wMCNDYXNpbmcgZ3VucyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wMy4wMCNEZXBsb3ltZW50IGhlYWRzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA0LjAwI1BlcmZvcmF0aW5nIGV4cGxvc2l2ZXMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDUuMDAjRmlyaW5nIGhlYWRzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA2LjAwI0d1biBhZGFwdGVycyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wNy4wMCNIaWdoIHNob3QgZGVuc2l0eSBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA4LjAwI1BlcmZvcmF0aW5nIGJ1bGwgcGx1Z3MjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDkuMDAjUGx1ZyBzZXR0aW5nIHRvb2xzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjEwLjAwI1BlcmZvcmF0aW5nIHBvc2l0aW9uaW5nIGVxdWlwbWVudCMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xMS4wMCNTY2FsbG9wZWQgZ3VucyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xMi4wMCNUYW5kZW0gc3VicyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xMy4wMCNUaHJvdWdoIHR1YmluZyBwZXJmb3JhdGlvbiBndW4gYWNjZXNzb3JpZXMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTQuMDAjVGhyb3VnaCB0dWJpbmcgcGVyZm9yYXRpb24gZ3VucyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xNS4wMCNVbmRlciBiYWxhbmNlIHZlbnQgc3VicyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wMC4wMCNXZWxsIHRlc3RpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjAxLjAwI0ZsYXJlIGJvb21zIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjAyLjAwI0ZsYXJlIGJ1cm5lcnMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDMuMDAjQ2FzZWQgaG9sZSB0ZXN0IHRvb2xzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA0LjAwI0Nob2tlIG1hbmlmb2xkcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wNS4wMCNEaXZlcnRpbmcgbWFuaWZvbGRzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA2LjAwI0Zsb3doZWFkIGJhc2tldHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDcuMDAjRmxvd2hlYWQgc3dpdmVscyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wOC4wMCNGbG93aGVhZHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDkuMDAjRm9ybWF0aW9uIHNodXQgaW4gdG9vbHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTAuMDAjR2FzIGZsYXJlcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xMS4wMCNNdWQgZ2FzIGFuYWx5emVycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xMi4wMCNPaWwgc2FtcGxlcnMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTMuMDAjV2VsbCB0ZXN0aW5nIHNlcGFyYXRvcnMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTQuMDAjV2VsbCB0ZXN0aW5nIHN1cmZhY2UgcGlwaW5nIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjE1LjAwI1N1cmdlIHRhbmtzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjE2LjAwI1dlbGwgdGVzdGluZyBkb3duaG9sZSB0b29scyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wMC4wMCNTbGlja2xpbmUgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjAxLjAwI1NsaWNrbGluZSBhZGFwdGVyIGhlYWRzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjAyLjAwI1NsaWNrbGluZSBiYWNrb2ZmcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wMy4wMCNTbGlja2xpbmUgYmVsbCBndWlkZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDQuMDAjU2xpY2tsaW5lIGJsaW5kIGJveGVzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjA1LjAwI1NsaWNrbGluZSBib3R0b20gaG9sZSBwcmVzc3VyZSBlcXVpcG1lbnQjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDYuMDAjU2xpY2tsaW5lIGNhbGlwZXIgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDcuMDAjU2xpY2tsaW5lIGNlbWVudCBkdW1wIGJhaWxpbmcgZXF1aXBtZW50IzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjA4LjAwI1NsaWNrbGluZSBjaGVtaWNhbCBjdXR0ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjA5LjAwI1NsaWNrbGluZSBjbGFtcCBvbiB0b29sIHN0cmluZyBjZW50cmFsaXplcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTAuMDAjU2xpY2tsaW5lIGNsYW1wIG9uIHdpcmVsaW5lIGNlbnRyYWxpemVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xMS4wMCNTbGlja2xpbmUgY29sbGFyIGxvY2F0b3JzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjEyLjAwI1NsaWNrbGluZSBjb2xsZWN0b3JzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjEzLjAwI1NsaWNrbGluZSBjb2xsaWRpbmcgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTQuMDAjU2xpY2tsaW5lIGNyb3Nzb3ZlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTUuMDAjU2xpY2tsaW5lIGRlcHRoIG1lYXN1cmVtZW50IGVxdWlwbWVudCMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xNi4wMCNTbGlja2xpbmUgZGV3YXIgZmxhc2tzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE3LjAwI1NsaWNrbGluZSBkaXBtZXRlciB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xOC4wMCNTbGlja2xpbmUgZGlyZWN0aW9uYWwgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTkuMDAjU2xpY2tsaW5lIGdvIGRldmlsIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjIwLjAwI1NsaWNrbGluZSBob2xlIHB1bmNoZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjIxLjAwI1NsaWNrbGluZSBqZXQgY3V0dGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yMi4wMCNTbGlja2xpbmUganVuayBzaG90cyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yMy4wMCNTbGlja2xpbmUga2lja292ZXIgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjQuMDAjU2xpY2tsaW5lIGtudWNrbGUgam9pbnRzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI1LjAwI1NsaWNrbGluZSBsZWFkIGltcHJlc3Npb24gYmxvY2tzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI2LjAwI1NsaWNrbGluZSBsb2NhdG9yIG1hbmRyZWxzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI3LjAwI1NsaWNrbGluZSBsb2NrIG1hbmRyZWxzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI4LjAwI1NsaWNrbGluZSBsdWJyaWNhdG9ycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yOS4wMCNTbGlja2xpbmUgbWVjaGFuaWNhbCBiYWlsZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjMwLjAwI1NsaWNrbGluZSBtZWNoYW5pY2FsIHBsdWdiYWNrcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zMS4wMCNPdGhlciBTbGlja2xpbmUgVG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzIuMDAjU2xpY2tsaW5lIHBhcmFmZmluIHNjcmFwcGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zMy4wMCNTbGlja2xpbmUgcm9wZSBzb2NrZXRzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM0LjAwI1NsaWNrbGluZSBydW5uaW5nIG9yIHB1bGxpbmcgcHJvbmdzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM1LjAwI1NsaWNrbGluZSBzZXZlcmluZyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zNi4wMCNTbGlja2xpbmUgc2hlYXZlcyBvciBmbG9vciBibG9ja3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzcuMDAjU2xpY2tsaW5lIGJvdHRvbSBob2xlIHByZXNzdXJlIGVxdWlwbWVudCMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zOC4wMCNTbGlja2xpbmUgcHVsbGluZyB0b29sIGFjY2Vzc29yaWVzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM5LjAwI1NsaWNrbGluZSBwdWxsaW5nIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQwLjAwI1NsaWNrbGluZSBydW5uaW5nIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQxLjAwI1NsaWNrbGluZSB1bml0cyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40Mi4wMCNTbGlja2xpbmUgd2lyZSMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40My4wMCNTbGlja2xpbmUgc29uaWMgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDQuMDAjU2xpY2tsaW5lIHNwYWNlciBiYXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ1LjAwI1NsaWNrbGluZSBzd2FnZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDYuMDAjU2xpY2tsaW5lIHRlbnNpb24gZGV2aWNlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40Ny4wMCNTbGlja2xpbmUgdHViaW5nIHBsdWdzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ4LjAwI1NsaWNrbGluZSB1bHRyYXNvbmljIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ5LjAwI1dpcmVsaW5lIEdyYWJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjUwLjAwI1dpcmVsaW5lIEphcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNTEuMDAjV2lyZWxpbmUgU2NyYXBlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNTIuMDAjV2lyZWxpbmUgU3BlYXIjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNTMuMDAjV2lyZWxpbmUgU3RlbXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNTQuMDAjV2lyZWxpbmUgVmFsdmVzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjAwLjAwI1Byb2R1Y3Rpb24gc3lzdGVtcyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDEuMDAjQ2FibGUgdGh1bXBlcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDIuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBldmFwb3JhdG9ycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wMy4wMCNIaXBvdCB0ZXN0ZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA0LjAwI09pbGZpZWxkIGxhcHBpbmcgbWFjaGluZXMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDUuMDAjTW90b3IgZW5kIGxpZnRzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA2LjAwI09pbCBkaWVsZWN0cmljIHRlc3RlcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDcuMDAjT2lsIHZhY3V1bSBmaWxsaW5nIHVuaXRzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA4LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gc2hhZnQgc3RyYWlnaHRlbmVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wOS4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIHNwb29sZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjEwLjAwI1ZpYnJhdGlvbiBhbmFseXplcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDAuMDAjQ29pbGVkIHR1YmluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDEuMDAjQmxhc3RlciB0b29scyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wMi4wMCNDb2lsZWQgdHViaW5nIHRydWNrIGNyYW5lIHVuaXRzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjAzLjAwI0NvaWxlZCB0dWJpbmcgdW5pdHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDQuMDAjQ29pbGVkIHR1YmluZyBob3NlIHBhY2thZ2VzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA1LjAwI0NvaWxlZCB0dWJpbmcgaW5mbGF0YWJsZSBzeXN0ZW1zIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA2LjAwI0NvaWxlZCB0dWJpbmcgaW5qZWN0b3IgaGVhZHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDcuMDAjQ29pbGVkIHR1YmluZyBsaWZ0aW5nIGVxdWlwbWVudCMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wOC4wMCNPcGVyYXRvciBob3VzZXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDkuMDAjQ29pbGVkIHR1YmluZyBwb3dlciBwYWNrcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xMC4wMCNDb2lsZWQgdHViaW5nIHJlZWxzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjExLjAwI0NvaWxlZCB0dWJpbmcgc3Bvb2xpbmcgcmVlbHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTIuMDAjVHViaW5nIGd1aWRlcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xMy4wMCNXZWxsaGVhZCBob29rdXBzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjE0LjAwI1dlbGxoZWFkIHN1cHBvcnQgc3RydWN0dXJlcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xNS4wMCNPaWxmaWVsZCBjb2lsZWQgdHViaW5nIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjAwLjAwI1NlaXNtaWMgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjAxLjAwI1NlaXNtaWMgYW5hbG9nIHNlbnNvcnMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDIuMDAjU2Vpc21pYyBhcnJheXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDMuMDAjU2Vpc21pYyBzdHJlYW1lciBjYWJsZSBiaXJkcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNC4wMCNTZWlzbWljIGRyaWxsIHRhbmtlcnMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDUuMDAjU2Vpc21pYyBnZW9waG9uZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDYuMDAjU2Vpc21pYyBncmF2aXR5IHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDcuMDAjU2Vpc21pYyBndW4gd2luY2ggc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wOC4wMCNTZWlzbWljIGh5ZHJvcGhvbmVzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA5LjAwI1NlaXNtaWMgaW1wdWxzZSBzb3VyY2VzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjEwLjAwI1NlaXNtaWMgbWFyaW5lIHN0cmVhbWVyIGNhYmxlcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xMS4wMCNTZWlzbWljIG9jZWFuIGJvdHRvbSBjYWJsZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTIuMDAjU2Vpc21pYyBtYWduZXRpYyBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjEzLjAwI1NlaXNtaWMgcG9zaXRpb25pbmcgZXF1aXBtZW50IzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE0LjAwI1NlaXNtaWMgcmFtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xNS4wMCNTZWlzbWljIHJlY2VpdmVycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xNi4wMCNTZWlzbWljIHJlZnJhY3Rpb24gc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xNy4wMCNTZWlzbWljIHNvdXJjZSBjb250cm9sbGVycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xOC4wMCNTZWlzbWljIHNwb29saW5nIGRldmljZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTkuMDAjU2Vpc21pYyB0b3cgYmxvY2tzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjIwLjAwI1NlaXNtaWMgdG93IHBvaW50cyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4yMS4wMCNTZWlzbWljIHZpYnJhdG9ycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4yMi4wMCNTZWlzbWljIHJlY29yZGluZyBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjIzLjAwI1NlaXNtaWMgZGF0YSBwcm9jZXNzaW5nIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDAuMDAjT2lsIGNvdW50cnkgdHVidWxhciBnb29kcyMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wMS4wMCNPaWwgY291bnRyeSBjYXNpbmcjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDIuMDAjT2lsIGNvdW50cnkgY291cGxpbmdzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjAzLjAwI09pbCBjb3VudHJ5IHB1cCBqb2ludHMjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDQuMDAjT2lsIGNvdW50cnkgdHViaW5nIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA1LjAwI09pbCBjb3VudHJ5IHBpcGUgY29hdGluZ3MjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDYuMDAjQ29uZHVjdG9yIGNhc2luZyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wNy4wMCNDb25kdWN0b3IgY2FzaW5nIHJ1bm5pbmcgZXF1aXBtZW50IzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA4LjAwI0RyaWxsIHBpcGUgY3Jvc3NvdmVycyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wOS4wMCNPaWwgY291bnRyeSB0aHJlYWQgcHJvdGVjdG9ycyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wMC4wMCNEcmlsbGluZyBhbmQgd29ya292ZXIgcmlncyBhbmQgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjAxLjAwI011ZCBhZ2l0YXRvcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDIuMDAjTXVkIHRhbmtzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjAzLjAwI0FpciBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDQuMDAjQmFyZ2UgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wNS4wMCNCbG93IG91dCBwcmV2ZW50ZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA2LjAwI0ZsdWlkIGRpdmVydGVycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wNy4wMCNEcmF3d29ya3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDguMDAjRHJpbGwgZmxvb3IgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA5LjAwI0RyaWxsIHN3aXZlbHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTAuMDAjRHJpbGxpbmcgcmlnIHNoaXBzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjExLjAwI0RyaWxsIHJpZyBlbGV2YXRvcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTIuMDAjRHJpbGwgcmlnIGJhaWxzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjEzLjAwI0h5ZHJhdWxpYyB3b3Jrb3ZlciB1bml0cyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xNC4wMCNEcmlsbCByaWcgamFja2luZyBzeXN0ZW1zIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE1LjAwI0phY2t1cCBtYXJpbmUgZHJpbGxpbmcgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xNi4wMCNLZWxseSBidXNoaW5ncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xNy4wMCNLZWxseSB2YWx2ZXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTguMDAjS2VsbHkgd2lwZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE5LjAwI0tlbGx5cyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yMC4wMCNMYW5kIGRyaWxsaW5nIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjEuMDAjTXVkIGNsZWFuaW5nIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yMi4wMCNNdWQgbWFuaWZvbGRzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjIzLjAwI011ZCBtaXhlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjQuMDAjUGlwZSBoYW5kbGluZyBlcXVpcG1lbnQjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjUuMDAjUGxhdGZvcm0gZHJpbGxpbmcgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yNi4wMCNQb3dlciBzd2l2ZWwgb3IgdG9wIGRyaXZlcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yNy4wMCNSaWcgc2tpZHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjguMDAjRHJpbGwgcmlnIHJpc2VycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yOS4wMCNEcmlsbCByaWcgcm90YXJ5IHRhYmxlcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zMC4wMCNTZWxmIGVsZXZhdGluZyB3b3Jrb3ZlciBwbGF0Zm9ybXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzEuMDAjU2VtaSBzdWJtZXJzaWJsZSBkcmlsbGluZyByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjMyLjAwI0RyaWxsIGZsb29yIHNsaXBzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjMzLjAwI01ha2V1cCB0b25ncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zNC4wMCNJcm9uIHJvdWdobmVja3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzUuMDAjVHJhdmVsaW5nIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zNi4wMCNXb3Jrb3ZlciBib2F0cyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zNy4wMCNXb3Jrb3ZlciByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI5LjAwLjAwI1N1cmZhY2UgZGF0YSBsb2dnaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOS4wMS4wMCNTdXJmYWNlIGRhdGEgbG9nZ2luZyBjb25kdWl0cyMyMC4xMi4yOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOS4wMi4wMCNTdXJmYWNlIGRhdGEgbG9nZ2luZyBzZW5zb3JzIzIwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI5LjAzLjAwI1N1cmZhY2UgZGF0YSBsb2dnaW5nIHVuaXRzIzIwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjMwLjAwLjAwI011bHRpbGF0ZXJhbCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMzAuMDEuMDAjTXVsdGlsYXRlcmFsIGNhc2luZyMyMC4xMi4zMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4zMC4wMi4wMCNNdWx0aWxhdGVyYWwganVuY3Rpb25zIzIwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjMwLjAzLjAwI011bHRpbGF0ZXJhbCBwYWNrZXJzIzIwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjAwLjAwLjAwI09pbCBhbmQgZ2FzIGRyaWxsaW5nIGFuZCBvcGVyYXRpb24gbWF0ZXJpYWxzIzIwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjAwLjAwI0RyaWxsaW5nIG11ZCBhbmQgbWF0ZXJpYWxzIzIwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjAxLjAwI0ZpbHRyYXRpb24gY29udHJvbCBhZ2VudHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDIuMDAjRmx1aWQgc3BhY2VycyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wMy4wMCNMb3N0IGNpcmN1bGF0aW9uIGFnZW50cyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wNC4wMCNPaWwgYmFzZWQgbXVkcyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wNS4wMCNSYXRlIG9mIHBlbmV0cmF0aW9uIGVuaGFuY2VycyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wNi4wMCNTcG90dGluZyBmbHVpZHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDcuMDAjU3ludGhldGljIGJhc2VkIG11ZHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDguMDAjTXVkIHRoaW5uaW5nIGFnZW50cyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wOS4wMCNXYXRlciBiYXNlZCBtdWRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjEwLjAwI011ZCB3ZWlnaHRpbmcgYWdlbnRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjAwLjAwI1dlbGwgZnJhY3R1cmluZyBwcm9wcGFudHMjMjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDEuMDAjQ2VyYW1pYyBwcm9wcGFudHMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDIuMDAjRnJhY3R1cmluZyBzYW5kcyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wMy4wMCNSZXNpbiBjb2F0ZWQgY2VyYW1pYyBwcm9wcGFudHMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDQuMDAjUmVzaW4gY29hdGVkIGZyYWN0dXJpbmcgc2FuZHMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDUuMDAjUmVzaW4gY29hdGVkIHNpbnRlcmVkIGJhdXhpdGVzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjA2LjAwI1NpbnRlcmVkIGJhdXhpdGVzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEyLjAwLjAwI0NvbXBsZXRpb24gZmx1aWRzIzIwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEyLjAxLjAwI0RpdmFsZW50IGJyaW5lcyMyMC4xMy4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMi4wMi4wMCNNb25vdmFsZW50IGJyaW5lcyMyMC4xMy4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wMC4wMCNPaWwgd2VsbCBjZW1lbnQjMjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDEuMDAjT2lsIHdlbGwgYnVsayBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDIuMDAjT2lsIHdlbGwgY2xhc3MgYSB0eXBlIEkgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjAzLjAwI09pbCB3ZWxsIGNsYXNzIGIgdHlwZSBJSSBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDQuMDAjT2lsIHdlbGwgY2xhc3MgYyBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDUuMDAjT2lsIHdlbGwgY2xhc3MgZyBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDYuMDAjT2lsIHdlbGwgY2xhc3MgaCBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDcuMDAjT2lsIHdlbGwgbGlnaHR3ZWlnaHQgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjA4LjAwI09pbCB3ZWxsIHN0YW5kYXJkIGZpbmUgdHlwZSBJSUkgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjE0LjAwLjAwLjAwI09pbCBhbmQgZ2FzIG9wZXJhdGluZyBhbmQgcHJvZHVjdGlvbiBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDAuMDAjV2VsbGhlYWQgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjAxLjAwI1dlbGxoZWFkIGFjdHVhdG9ycyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wMi4wMCNXZWxsaGVhZCBiZWFtIHB1bXBzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjAzLjAwI1dlbGxoZWFkIGZsb3cgbGluZXMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDQuMDAjV2VsbGhlYWQgZ2F0ZSB2YWx2ZXMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDUuMDAjV2VsbGhlYWQgcHJvZHVjdGlvbiBjaG9rZXMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDYuMDAjV2VsbGhlYWQgc3ViIHN1cmZhY2UgZmxvdyBvciBjaHJpc3RtYXMgdHJlZXMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDcuMDAjV2VsbGhlYWQgc3VyZmFjZSBmbG93IG9yIGNocmlzdG1hcyB0cmVlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wOC4wMCNXZWxsaGVhZCBzdXJmYWNlIHNhZmV0eSB2YWx2ZXMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTEuMDAuMDAjQ2hlbWljYWwgaW5qZWN0aW9uIHN5c3RlbXMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTEuMDEuMDAjUGFyYWZmaW4gaW5qZWN0aW9uIHN5c3RlbXMjMjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTIuMDAuMDAjRGVzYW5kaW5nIGVxdWlwbWVudCMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMi4wMS4wMCNQcm9kdWN0aW9uIGRlc2FuZGluZyBlcXVpcG1lbnQjMjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTMuMDAuMDAjRG93bmhvbGUgamV0IHB1bXBzIGFuZCBhbmNob3JzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEzLjAxLjAwI0Rvd25ob2xlIGpldCBwdW1wcyMyMC4xNC4xMy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNC4wMC4wMCNEb3duaG9sZSBwcm9kdWN0aW9uIGFjY2Vzc29yaWVzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE0LjAxLjAwI1R1YmluZyBzdG9wcyMyMC4xNC4xNC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNS4wMC4wMCNEb3duaG9sZSBwdW1wcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNS4wMS4wMCNFbGVjdHJpYyBkb3duaG9sZSBwdW1wcyMyMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNi4wMC4wMCNFeHBvcnQgcHVtcHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTYuMDEuMDAjUG5ldW1hdGljIGV4cG9ydCBwdW1wcyMyMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wMC4wMCNPZmZzaG9yZSBwcm9kdWN0aW9uIGFuZCBzdG9yYWdlIHBsYXRmb3JtcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wMS4wMCNGaXhlZCBvZmZzaG9yZSBwcm9kdWN0aW9uIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wMi4wMCNGbG9hdGluZyBvZmZzaG9yZSBwcm9kdWN0aW9uIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wMy4wMCNGbG9hdGluZyBvZmZzaG9yZSBzdG9yYWdlIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wNC4wMCNGbG9hdGluZyBvZmZzaG9yZSB0ZW5zaW9uIGxlZyAgcHJvZHVjdGlvbiBwbGF0Zm9ybXMjMjAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTcuMDUuMDAjRmxvYXRpbmcgb2Zmc2hvcmUgdGVuc2lvbiBsZWcgc3RvcmFnZSBwbGF0Zm9ybXMjMjAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTguMDAuMDAjV2VsbCBwcm9kdWN0aW9uIGZsb3cgbWVhc3VyZW1lbnQgbWV0ZXJzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE4LjAxLjAwI1dlbGwgcHJvZHVjdGlvbiBnYXMgdHVyYmluZSBtZXRlcnMjMjAuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTkuMDAuMDAjR2FzIHRyZWF0aW5nIGVxdWlwbWVudCMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xOS4wMS4wMCNPaWwgd2VsbCBwcm9kdWN0aW9uIGdhcyB0cmVhdGluZyBlcXVpcG1lbnQjMjAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjAuMDAuMDAjR2x5Y29sIHJlZ2VuZXJhdG9ycyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMC4wMS4wMCNPaWwgd2VsbCBnbHljb2wgcmVnZW5lcmF0b3JzIzIwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIxLjAwLjAwI0hlYXRlciB0cmVhdGVycyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMS4wMS4wMCNPaWwgd2VsbCBoZWF0ZXIgdHJlYXRlcnMjMjAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjIuMDAuMDAjTGluZSBoZWF0ZXJzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIyLjAxLjAwI0VsZWN0cmljYWwgbGluZSBoZWF0ZXJzIzIwLjE0LjIyLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIzLjAwLjAwI1Byb2R1Y3Rpb24gaW5qZWN0aW9uIHNraWRzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIzLjAxLjAwI1BuZXVtYXRpYyBtZXRoYW5vbCBpbmplY3Rpb25zIHNraWRzIzIwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI0LjAwLjAwI09jZWFuIGZsb29yIGVxdWlwbWVudCMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNC4wMS4wMCNTdWJzZWEgcHJvZHVjdGlvbiB3ZWxsaGVhZCBlcXVpcG1lbnQjMjAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjUuMDAuMDAjUHJvZHVjZWQgd2F0ZXIgdHJlYXRpbmcgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI1LjAxLjAwI09pbCBmaWVsZCB3YXRlciBvaWwgY2VudHJpZnVnZXMjMjAuMTQuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjYuMDAuMDAjUHJvZHVjdGlvbiBjb250cm9sIHN5c3RlbSBpbnN0cnVtZW50YXRpb24jMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjYuMDEuMDAjV2lyZWxlc3MgcHJvZHVjdGlvbiBjb250cm9sIHN5c3RlbXMjMjAuMTQuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjcuMDAuMDAjUHVtcGluZyB1bml0cyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNy4wMS4wMCNTdWNrZXIgcm9kIHB1bXAgamFja3MjMjAuMTQuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjcuMDIuMDAjUm9kIHB1bXBzIzIwLjE0LjI3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI3LjAzLjAwI01lY2hhbmljYWwgcm9kIHB1bXBzIzIwLjE0LjI3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI4LjAwLjAwI1Byb2R1Y3Rpb24gc2VwYXJhdG9ycyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yOC4wMS4wMCNPaWwgd2F0ZXIgc2VwYXJhdG9ycyMyMC4xNC4yOC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yOS4wMC4wMCNTdG9yYWdlIHZlc3NlbHMgYW5kIHRhbmtzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI5LjAxLjAwI09pbCBzdG9yYWdlIHRhbmtzIzIwLjE0LjI5LjAwLjAwCi11bnNwc2M3IzIwLjE0LjMwLjAwLjAwI1N1Y2tlciByb2RzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjMwLjAxLjAwI0FsbG95IHN0ZWVsIHN1Y2tlciByb2RzIzIwLjE0LjMwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjMwLjAyLjAwI1Bvbnkgcm9kcyMyMC4xNC4zMC4wMC4wMAotdW5zcHNjNyMyMS4wMC4wMC4wMC4wMCNGYXJtaW5nIGFuZCBGaXNoaW5nIGFuZCBGb3Jlc3RyeSBhbmQgV2lsZGxpZmUgTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4wMC4wMC4wMCNBZ3JpY3VsdHVyYWwgYW5kIGZvcmVzdHJ5IGFuZCBsYW5kc2NhcGUgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDAuMDAjQWdyaWN1bHR1cmFsIG1hY2hpbmVyeSBmb3Igc29pbCBwcmVwYXJhdGlvbiMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wMS4wMCNQbG91Z2hzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjAyLjAwI0hhcnJvd3MjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDMuMDAjQ3VsdGl2YXRvcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDQuMDAjV2VlZGVycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wNS4wMCNIb2VpbmcgbWFjaGluZXMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDYuMDAjR3JhZGVycyBvciBsYW5kIGxldmVsZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA3LjAwI0FncmljdWx0dXJhbCByb2xsZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA4LjAwI1JvbGxlcnMgZm9yIGxhd24gb3Igc3BvcnRzIGdyb3VuZHMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDkuMDAjVHJlbmNoZXIgZHJhaW5hZ2UgbWFjaGluZSMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xMC4wMCNJcnJpZ2F0aW9uIHBpcGVzIG9yIHR1YmVzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjExLjAwI0lycmlnYXRpb24gdHJpY2tsZXMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTIuMDAjSXJyaWdhdGlvbiBvdmVyaGVhZHMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTMuMDAjRGlza3MjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTQuMDAjU3Vic29pbGVycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xNS4wMCNIZWRnZSBjbGlwcGVycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xNi4wMCNEaWJibGVycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBwbGFudGluZyBhbmQgc2VlZGluZyMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wMS4wMCNQbGFudGVycyMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wMi4wMCNUcmFuc3BsYW50ZXJzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAzLjAwI0dyYWluIGRyaWxscyMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wNC4wMCNTZWVkIGRyaWxscyMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wNS4wMCNTZWVkIHRyZWF0aW5nIGVxdWlwbWVudCMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wNi4wMCNIb2xlIGRpZ2dlcnMjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDAuMDAjQWdyaWN1bHR1cmFsIG1hY2hpbmVyeSBmb3IgaGFydmVzdGluZyMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wMS4wMCNNb3dlcnMjMjEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDIuMDAjSGF5bWFraW5nIG1hY2hpbmVyeSMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wMy4wMCNIYXJ2ZXN0ZXJzIzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjA0LjAwI0NvbWJpbmUgaGFydmVzdGVycyMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wNS4wMCNUaHJlc2hpbmcgbWFjaGluZXMjMjEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDAuMDAjRGlzcGVyc2luZyBhbmQgc3ByYXlpbmcgYXBwbGlhbmNlcyBmb3IgYWdyaWN1bHR1cmUjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDEuMDAjU3ByYXllcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDIuMDAjRHVzdGVycyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMy4wMCNXYXRlciBzcHJpbmtsZXJzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA0LjAwI0ZlcnRpbGl6ZXIgc3ByZWFkZXJzIG9yIGRpc3RyaWJ1dG9ycyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wNS4wMCNGb2cgb3IgbWlzdCBnZW5lcmF0b3JzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA2LjAwI0NvbXBvc3RlciMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wNy4wMCNQb2xsaW5hdGlvbiBlcXVpcG1lbnQgb3Igc3VwcGxpZXMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDguMDAjRnJvc3QgcHJvdGVjdGlvbiBlcXVpcG1lbnQjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDAuMDAjUG91bHRyeSBhbmQgbGl2ZXN0b2NrIGVxdWlwbWVudCMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wMS4wMCNNaWxraW5nIG1hY2hpbmVzIzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjAyLjAwI0FuaW1hbCBodXNiYW5kcnkgZXF1aXBtZW50IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjAzLjAwI0luY3ViYXRvcnMgb3IgYnJvb2RlcnMgZm9yIHBvdWx0cnkjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDQuMDAjRmVlZCBtaXhlcnMjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDUuMDAjTGl2ZXN0b2NrIGlkZW50aWZpY2F0aW9uIGVxdWlwbWVudCMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wNi4wMCNFZ2cgaW5zcGVjdGlvbiBvciBjb2xsZWN0aW5nIGVxdWlwbWVudCMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wNy4wMCNBbmltYWwgd2F0ZXJpbmcgbWFjaGluZXMjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDguMDAjTWlsayBjb29saW5nIHRhbmtzIzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA5LjAwI0FuaW1hbCBzaGVhcmluZyBvciBjbGlwcGluZyBlcXVpcG1lbnQjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDAuMDAjQWdyaWN1bHR1cmFsIG1hY2hpbmVyeSBmb3IgY2xlYW5pbmcgYW5kIHNvcnRpbmcgYW5kIGdyYWRpbmcjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDEuMDAjQ2xlYW5pbmcgbWFjaGluZXMgZm9yIHNlZWQgb3IgZ3JhaW4gb3IgZHJpZWQgbGVndW1pbm91cyB2ZWdldGFibGVzIzIxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjAyLjAwI1NvcnRpbmcgbWFjaGluZXMgZm9yIHNlZWQgb3IgZ3JhaW4gb3IgZHJpZWQgbGVndW1pbm91cyB2ZWdldGFibGVzIzIxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjAzLjAwI0dyYWRpbmcgbWFjaGluZXMgZm9yIHNlZWQgb3IgZ3JhaW4gb3IgZHJpZWQgbGVndW1pbm91cyB2ZWdldGFibGVzIzIxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjA0LjAwI1JpY2UgY2xlYW5pbmcgb3IgaHVsbGluZyBlcXVpcG1lbnQjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDUuMDAjR3JpbmRpbmcgbWlsbHMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDYuMDAjSGFtbWVyIG1pbGxzIzIxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIxLjAwLjAwI0FncmljdWx0dXJhbCBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIxLjAxLjAwI0FncmljdWx0dXJhbCBicmlxdWV0dGluZyBvciBwZWx0aW5nIG1hY2hpbmVzIzIxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjAwLjAwI0ZvcmVzdHJ5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjAxLjAwI0RlY29ydGljYXRvcnMjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDIuMDAjTHVtYmVyaW5nIGVxdWlwbWVudCMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wMy4wMCNSZWZvcmVzdGF0aW9uIGVxdWlwbWVudCMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wNC4wMCNGb3Jlc3RyeSBzYXdzIzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjA1LjAwI0ZvcmVzdHJ5IHNraWRkZXJzIzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjA2LjAwI0ZvcmVzdHJ5IGluY3JlbWVudCBib3JlcnMjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDcuMDAjRm9yZXN0cnkgaXBzb21ldGVyIzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIzLjAwLjAwI0dyZWVuaG91c2UgZXF1aXBtZW50IzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIzLjAxLjAwI0dyZWVuaG91c2UgaXJyaWdhdGlvbiBlcXVpcG1lbnQjMjEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDIuMDAjR3JlZW5ob3VzZSBwb3RzIzIxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIzLjAzLjAwI0dyZWVuaG91c2UgdmVudGlsYXRpb24gZXF1aXBtZW50IzIxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIzLjA0LjAwI0dyZWVuaG91c2UgaXNvbGF0aW9uIGVxdWlwbWVudCMyMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMyMS4xMC4yNC4wMC4wMCNJbnNlY3QgZXF1aXBtZW50IzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjAxLjAwI0JlZWtlZXBpbmcgZXF1aXBtZW50IzIxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjAyLjAwI1NpbGt3b3JtIGVxdWlwbWVudCMyMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yNC4wMy4wMCNCdXR0ZXJmbHkgYnJlZWRpbmcgZXF1aXBtZW50IzIxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjA0LjAwI0JlZXRsZSBicmVlZGluZyBlcXVpcG1lbnQjMjEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMDAuMDAuMDAjRmlzaGluZyBhbmQgYXF1YWN1bHR1cmUgZXF1aXBtZW50IzIxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjAwLjAwI0NvbW1lcmNpYWwgZmlzaGluZyBlcXVpcG1lbnQjMjEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDEuMDAjQ29tbWVyY2lhbCBmaXNoIGhvb2tzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjAyLjAwI0NvbW1lcmNpYWwgZmlzaGluZyByZWVscyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wMy4wMCNDb21tZXJjaWFsIGZpc2hpbmcgbGluZSB0YWNrbGUjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDQuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIG5ldHMjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDYuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIGZsb2F0cyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wNy4wMCNDb21tZXJjaWFsIHNpbmtlcnMgb3Igd2VpZ2h0cyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wOC4wMCNGaXNoaW5nIG5ldCBoYXVsZXJzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE2LjAwLjAwI0FxdWFjdWx0dXJlIGVxdWlwbWVudCMyMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNi4wMS4wMCNNYXJpbmUgaGF0Y2hlcnkgZXF1aXBtZW50IzIxLjExLjE2LjAwLjAwCi11bnNwc2M3IzIxLjExLjE2LjAyLjAwI1Bpc2NpY3VsdHVyZSBzdXBwbGllcyMyMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMi4wMC4wMC4wMC4wMCNCdWlsZGluZyBhbmQgQ29uc3RydWN0aW9uIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMDAuMDAuMDAjSGVhdnkgY29uc3RydWN0aW9uIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjAwLjAwI0VhcnRoIG1vdmluZyBtYWNoaW5lcnkjMjIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDEuMDAjRnJvbnQgZW5kIGxvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDIuMDAjR3JhZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wMy4wMCNMb2FkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA0LjAwI1BpbGUgZHJpdmVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wNS4wMCNSb2xsZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA2LjAwI0VhcnRobW92aW5nIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA3LjAwI1RhbXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDguMDAjVHJlbmNoaW5nIG1hY2hpbmVzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA5LjAwI0JhY2tob2VzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjEwLjAwI0J1bGxkb3plcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTEuMDAjQ29tcGFjdG9ycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xMy4wMCNEcmFnbGluZXMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTQuMDAjRHJlZGdlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTUuMDAjRXhjYXZhdG9ycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xNi4wMCNEaXRjaGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xNy4wMCNDaGVycnkgcGlja2VycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xOC4wMCNFbGV2YXRpbmcgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTkuMDAjVHdpbiBlbmdpbmUgb3BlbiBib3dsIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjIwLjAwI1R3aW4gZW5naW5lIGVsZXZhdGluZyBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yMS4wMCNQdWxsZWQgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjIuMDAjVHJhY2sgYnVsbGRvemVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yMy4wMCNXaGVlbCBidWxsZG96ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI0LjAwI01vYmlsZSBleGNhdmF0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI1LjAwI1doZWVsIGV4Y2F2YXRvcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjYuMDAjVHJhY2sgZXhjYXZhdG9ycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yNy4wMCNJbnRlZ3JhdGVkIHRvb2wgY2FycmllcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjguMDAjV2hlZWwgbG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yOS4wMCNTa2lkIHN0ZWVyIGxvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMzAuMDAjT3BlbiBib3dsIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjMxLjAwI1Nub3cgYmxvd2VycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4zMi4wMCNUcmFjayBsb2FkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjAwLjAwI1BhdmluZyBlcXVpcG1lbnQjMjIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDIuMDAjUmFtbWluZyBlcXVpcG1lbnQjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDMuMDAjUm9hZCB3aWRlbmVycyMyMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wNC4wMCNWaWJyYXRvcnkgcGxhdGVzIzIyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjA1LjAwI0FzcGhhbHQgZmluaXNoZXJzIzIyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjA2LjAwI0NoaXAgU3ByZWFkZXJzIzIyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE3LjAwLjAwI0hlYXZ5IGVxdWlwbWVudCBjb21wb25lbnRzIzIyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIyLjEwLjE3LjAxLjAwI0VhcnRobW92aW5nIHNob3ZlbHMjMjIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDIuMDAjRWFydGhtb3ZpbmcgYnVja2V0cyMyMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wMy4wMCNFYXJ0aG1vdmluZyBibGFkZXMjMjIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDQuMDAjU2NhcmlmaWVycyMyMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wMC4wMCNBZXJpYWwgbGlmdHMjMjIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTguMDEuMDAjTWFubGlmdCBvciBwZXJzb25uZWwgbGlmdCMyMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wMi4wMCNQbGF0Zm9ybSBsaWZ0IzIyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjAzLjAwI0FydGljdWxhdGluZyBib29tIGxpZnQjMjIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTguMDQuMDAjVGVsZXNjb3BpbmcgYm9vbSBsaWZ0IzIyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIzLjAwLjAwLjAwLjAwI0luZHVzdHJpYWwgTWFudWZhY3R1cmluZyBhbmQgUHJvY2Vzc2luZyBNYWNoaW5lcnkgYW5kIEFjY2Vzc29yaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEwLjAwLjAwLjAwI1JhdyBtYXRlcmlhbHMgcHJvY2Vzc2luZyBtYWNoaW5lcnkjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDAuMDAjTWFjaGluZXJ5IGZvciB3b3JraW5nIHdvb2QgYW5kIHN0b25lIGFuZCBjZXJhbWljIGFuZCB0aGUgbGlrZSMyMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMS4wMCNDb3BpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDIuMDAjRHJpbGxpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDMuMDAjQnJvYWNoaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA0LjAwI0JlbmRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDUuMDAjQm9yaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA2LjAwI0dyaW5kaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA3LjAwI01vbGRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDguMDAjQ3V0dGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wOS4wMCNTYW5kaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjEwLjAwI1BvbGlzaGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xMS4wMCNUdXJuaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjEyLjAwI1Nhd2luZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xMy4wMCNNaWxsaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjE0LjAwI1BsYW5pbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTUuMDAjRW5ncmF2aW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjE2LjAwI0dsYXNzIGJlYWQgcGVlbmVyIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjE3LjAwI0dyaXQgYmxhc3QgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTguMDAjU2hvdCBwZWVuIG1hY2hpbmUjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTkuMDAjUm9ib3QgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMjAuMDAjUmFtIGVsZWN0cm8gZGlzY2hhcmdlIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjIxLjAwI1dpcmUgY2F0aG9kZSBlbGVjdHJvZGUgZGlzY2hhcmdlIG1hY2hpbmUjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMjIuMDAjQ2hpcCBicmVha2VyIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjAwLjAwLjAwI1BldHJvbGV1bSBwcm9jZXNzaW5nIG1hY2hpbmVyeSMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wMC4wMCNQZXRyb2xldW0gZGlzdGlsbGluZyBhbmQgcHJvY2Vzc2luZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wMS4wMCNEaXN0aWxsYXRlIGh5ZHJvcHJvY2Vzc2luZyBlcXVpcG1lbnQjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDIuMDAjQ3J1ZGUgZGlzdGlsbGluZyBtYWNoaW5lcnkjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDMuMDAjQ2F0YWx5dGljIGNyYWNraW5nIGVxdWlwbWVudCMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wNC4wMCNIeWRyb2NyYWNraW5nIGVxdWlwbWVudCMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wNS4wMCNJc29tZXJpemF0aW9uIG1hY2hpbmVyeSMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wNi4wMCNDb2tpbmcgbWFjaGluZXJ5IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA3LjAwI0dhcyByZWNvdmVyeSBtYWNoaW5lcnkjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDAuMDAjSHlkcm90cmVhdGluZyBtYWNoaW5lcnkjMjMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDEuMDAjTmFwdGhhIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wMi4wMCNEaXN0aWxsYXRlIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wMy4wMCNDYXRhbHl0aWMgZmVlZCBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDQuMDAjTHViZSBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDUuMDAjR2Fzb2xpbmUgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjA2LjAwI1Jlc2lkIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4wMC4wMC4wMCNUZXh0aWxlIGFuZCBmYWJyaWMgbWFjaGluZXJ5IGFuZCBhY2Nlc3NvcmllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wMC4wMCNUZXh0aWxlIHByb2Nlc3NpbmcgbWFjaGluZXJ5IGFuZCBhY2Nlc3NvcmllcyMyMy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wMS4wMCNFbWJyb2lkZXJ5IG1ha2luZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wMi4wMCNGZWx0aW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAzLjAwI1dpbmRpbmcgb3IgcmVlbGluZyBvciBzcG9vbGluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wNC4wMCNUd2lzdGluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wNS4wMCNTdGl0Y2ggYm9uZGluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wNi4wMCNLbml0dGluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wNy4wMCNXZWF2aW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA4LjAwI0ZpbmlzaGluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wOS4wMCNTcGlubmluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4xMC4wMCNMYWNlIG1ha2luZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wMC4wMCNUZXh0aWxlIHdvcmtpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzIzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjAxLjAwI0J1dHRvbiBjb3ZlcmluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wMi4wMCNCdXR0b24gc2V3aW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjAzLjAwI0J1dHRvbmhvbGUgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDQuMDAjQ2xvdGggY3V0dGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNS4wMCNDdXNoaW9uIGZpbGxpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDYuMDAjRm9sZGluZyBvciByZXdpbmRpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDcuMDAjQmxlYWNoaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA4LjAwI0ZhYnJpYyBvciBjbG90aCBmb2xkaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA5LjAwI1JlZWxpbmcgb3IgdW5yZWVsaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjEwLjAwI0R5ZWluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xMS4wMCNDdXR0aW5nIG9yIHBpbmtpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTIuMDAjU2V3aW5nIG1hY2hpbmUgbmVlZGxlcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xMy4wMCNTaWxrIHByb2Nlc3NpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTQuMDAjU2V3aW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjE1LjAwI0ZhYnJpYyBjdXR0aW5nIHRhYmxlcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMy4wMC4wMC4wMCNMYXBpZGFyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wMC4wMCNHcmluZGluZyBhbmQgc2FuZGluZyBhbmQgcG9saXNoaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDEuMDAjQWJyYXNpdmUgY29tcG91bmRzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjAyLjAwI0ZlbHQgd2hlZWxzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjAzLjAwI0dyaW5kaW5nIHdoZWVscyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wNC4wMCNQb2xpc2hpbmcgY29tcG91bmRzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA1LjAwI1BvbGlzaGluZyBoZWFkcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wNi4wMCNQb2xpc2hpbmcgd2hlZWxzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA3LjAwI1NhbmRpbmcgY2xvdGhzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA4LjAwI1NhbmRpbmcgZHJ1bXMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDkuMDAjVHVtYmxlcnMgb3IgcG9saXNoZXJzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjEwLjAwI1R1bWJsaW5nIHN1cHBsaWVzIG9yIG1lZGlhIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjExLjAwI1dhdGVyIHN3aXZlbHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTIuMDAjV2F0ZXIgdHJheXMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTMuMDAjU2FuZGluZyBibG9ja3MjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTQuMDAjTW91bnRlZCBzdG9uZXMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTUuMDAjR3JpbmRpbmcgd2hlZWwgZHJlc3NlcnMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTYuMDAuMDAjRmFjZXRpbmcgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyMyMy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNi4wMS4wMCNGYWNldGluZyBhY2Nlc3NvcmllcyMyMy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNi4wMi4wMCNGYWNldGluZyBtYWNoaW5lcyMyMy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNi4wMy4wMCNGYWNldGluZyBsYXBzIzIzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjA0LjAwI0ZhY2V0aW5nIHNhd3MjMjMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTcuMDAuMDAjQ2FiYmluZyBlcXVpcG1lbnQjMjMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTcuMDEuMDAjQ2FiYmluZyBhY2Nlc3NvcmllcyMyMy4xMy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wMi4wMCNDYWJiaW5nIGJlbHRzIzIzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE3LjAzLjAwI0NhYmJpbmcgZGlzY3MjMjMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTcuMDQuMDAjQ2Fib2Nob24gbWFjaGluZXMjMjMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMDAuMDAuMDAjTGVhdGhlcndvcmtpbmcgcmVwYWlyaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjAwLjAwI0xlYXRoZXIgcHJlcGFyaW5nIG1hY2hpbmVyeSBhbmQgYWNjZXNzb3JpZXMjMjMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDEuMDAjTGVhdGhlciBmbGVzaGluZyBtYWNoaW5lcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wMi4wMCNMZWF0aGVyIHRhbm5pbmcgbWFjaGluZXMjMjMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDMuMDAjTGVhdGhlciBkeWVpbmcgbWFjaGluZXMjMjMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDQuMDAjTGVhdGhlciBkZWdyZWFzaW5nIG1hY2hpbmVzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjA1LjAwI0xlYXRoZXIgcHJlc3NlcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNy4wMC4wMCNMZWF0aGVyIHdvcmtpbmcgYW5kIHJlcGFpcmluZyBtYWNoaW5lcnkgYW5kIGFjY2Vzc29yaWVzIzIzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjAxLjAwI0xlYXRoZXIgY3V0dGluZyBtYWNoaW5lcyMyMy4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNy4wMi4wMCNMZWF0aGVyIHJpdmV0aW5nIG1hY2hpbmVzIzIzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjAzLjAwI0xlYXRoZXIgbmFpbGluZyBtYWNoaW5lcyMyMy4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNy4wNC4wMCNMZWF0aGVyd29ya2luZyB3b3Jrc2hvcCBlcXVpcG1lbnQjMjMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMDAuMDAuMDAjSW5kdXN0cmlhbCBwcm9jZXNzIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wMC4wMCNSdWJiZXIgYW5kIHBsYXN0aWMgcHJvY2Vzc2luZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDEuMDAjQmxvdyBtb2xkaW5nIG1hY2hpbmVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjAyLjAwI0NvYXRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDMuMDAjRXh0cnVkZXJzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA0LjAwI0luamVjdGlvbiBtb2xkaW5nIG1hY2hpbmVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA1LjAwI1J1YmJlciBvciBwbGFzdGljIG1peGVycyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wNi4wMCNSdWJiZXIgb3IgcGxhc3RpYyBwcmVzc2VzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA3LjAwI1RoZXJtbyBmb3JtaW5nIG1hY2hpbmVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA4LjAwI1ZhY3V1bSBtb2xkaW5nIG1hY2hpbmVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA5LjAwI1Z1bGNhbml6aW5nIG1hY2hpbmVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjEwLjAwI1BsYXN0aWMgY3V0dGluZyBtYWNoaW5lcnkjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTEuMDAjUGxhc3RpYyBncmluZGluZyBtYWNoaW5lcnkjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTIuMDAjUnViYmVyIG9yIHBsYXN0aWMgbWlsbHMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTMuMDAjUnViYmVyIG9yIHBsYXN0aWMgZXh0cnVzaW9uIGRpZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTQuMDAjUGxhc3RpYyBpbmplY3Rpb24gbW9sZHMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTUuMDAjVGhlcm1vZm9ybWluZyBtb2xkcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xNi4wMCNFamVjdG9yIHBpbnMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDAuMDAjQ2VtZW50IGFuZCBjZXJhbWljcyBhbmQgZ2xhc3MgaW5kdXN0cnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjAxLjAwI0Jsb3dlcnMgb3IgZHJ5ZXJzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjAyLjAwI0NydXNoZXJzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjAzLjAwI0Z1c2lvbiB3ZWxkaW5nIG9yIGdsYXNzIGRyYXdpbmcgbWFjaGluZXMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDQuMDAjR3JpbmRpbmcgb3IgcG9saXNoaW5nIG1hY2hpbmVzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA1LjAwI01peGluZyBvciBrbmVhZGluZyBtYWNoaW5lcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wNi4wMCNDZW1lbnQgb3IgY2VyYW1pYyBvciBnbGFzcyBvciBzaW1pbGFyIG1hdGVyaWFsIG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDcuMDAjUHJlc3NlcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wOC4wMCNTaWZ0ZXJzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjAwLjAwI09wdGljYWwgaW5kdXN0cnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjAxLjAwI0xlbnMgZ3JpbmRpbmcgbWFjaGluZXMjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDIuMDAjTGVucyBtZWFzdXJpbmcgZXF1aXBtZW50IzIzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjAzLjAwI0xlbnMgcG9saXNoaW5nIGVxdWlwbWVudCMyMy4xNS4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wNC4wMCNMZW5zIHRlc3RpbmcgZXF1aXBtZW50IzIzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjA1LjAwI09wdGljYWwgdmFjdXVtIGNvYXRpbmcgZXF1aXBtZW50IzIzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjAwLjAwI1BoYXJtYWNldXRpY2FsIGluZHVzdHJ5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wMS4wMCNBbXBvdWxlIGZpbGxpbmcgZXF1aXBtZW50IzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjAyLjAwI0JvdHRsZSBjYXBwZXJzIG9yIGNvdHRvbiBpbnNlcnRlcnMgb3Igc2FmZXR5IHNlYWwgYXBwbGljYXRvcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDMuMDAjQ2Fwc3VsYXRpbmcgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDQuMDAjUmVhY3RvcnMgb3IgZmVybWVudGVycyBvciBkaWdlc3RlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDUuMDAjRmlsbGluZyBvciBzZWFsaW5nIGF1Z2VyIGRvc2UgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDYuMDAjUGhhcm1hY2V1dGljYWwgZmlsdGVycyBvciB1bHRyYSBmaWx0ZXJzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA3LjAwI0ZyZWV6ZWRyeWVycyBvciBseW9waGlsemVycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wOC4wMCNQaGFybWFjZXV0aWNhbCBncmFudWxhdG9ycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wOS4wMCNQaGFtYWNldXRpY2FsIHNpZXZlIG9yIHNjcmVlbmluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xMC4wMCNTdGVyaWxlIG9yIGFzZXB0aWMgcHJvY2Vzc2luZyBvciBmaWxsaW5nIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjExLjAwI1RhYmxldCBvciBjYXBzdWxlIHRlc3RpbmcgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTIuMDAjVGFibGV0IGNvdW50ZXJzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjEzLjAwI1RhYmxldHRpbmcgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTQuMDAjVmFjY2luZSBwcm9kdWN0aW9uIGVxdWlwbWVudCMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xNS4wMCNWZXNzZWwgbWl4ZXJzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjAwLjAwI1BhcGVyIG1ha2luZyBhbmQgcGFwZXIgcHJvY2Vzc2luZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDEuMDAjQ3V0dGVycyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wMi4wMCNTbGl0dGVycyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wMy4wMCNXYXNoaW5nIG9yIGRld2F0ZXJpbmcgbWFjaGluZXMjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDQuMDAjV2luZGVycyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wNS4wMCNXb29kIHB1bHAgb3IgZGlzc29sdmVyIG1hY2hpbmVzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjA2LjAwI0NhbGVuZGVycyBmb3IgcGFwZXIgb3IgY2FyZGJvYXJkIG1ha2luZyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMC4wMC4wMCNXZWIgaGFuZGxpbmcgYW5kIGNvbnRyb2wgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIwLjAxLjAwI0Nvcm9uYSB0cmVhdGVycyMyMy4xNS4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMC4wMi4wMCNGbGFtZSB0cmVhdGVycyMyMy4xNS4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wMC4wMCNTZXBhcmF0aW9uIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIxLjAxLjAwI1ZpYnJhdG9yeSBzZXBhcmF0aW9uIGVxdWlwbWVudCBhbmQgcGFydHMgYW5kIHNjcmVlbnMjMjMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjEuMDIuMDAjU3RhdGlvbmFyeSBzZXBhcmF0aW9uIGVxdWlwbWVudCBhbmQgcGFydHMgYW5kIHNjcmVlbnMjMjMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjEuMDMuMDAjQWlyIGNsYXNzaWZpY2F0aW9uIGVxdWlwbWVudCBhbmQgcGFydHMgYW5kIHNjcmVlbnMjMjMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjEuMDQuMDAjQ2VudGlmdWdhbCBzZXBhcmF0aW9uIGVxdWlwbWVudCBvciBwYXJ0cyBvciBzY3JlZW5zIzIzLjE1LjIxLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIyLjAwLjAwI01hbnVmYWN0dXJpbmcgdGFibGVzIGFuZCBzdGFuZHMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjIuMDEuMDAjUm90YXJ5IHRhYmxlcyMyMy4xNS4yMi4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wMi4wMCNTdGFjayBzdGFuZHMjMjMuMTUuMjIuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjIuMDMuMDAjRW5naW5lIGFuZCBjb21wb25lbnQgdGVzdCBzdGFuZHMjMjMuMTUuMjIuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjIuMDQuMDAjTWFjaGluZSBndWFyZGluZyMyMy4xNS4yMi4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMy4wMC4wMCNSb3RhcnkgdGFibGVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI0LjAwLjAwI1N0YWNrIHN0YW5kcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yNS4wMC4wMCNFbmdpbmUgYW5kIGNvbXBvbmVudCB0ZXN0IHN0YW5kcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yNi4wMC4wMCNNYWNoaW5lIGd1YXJkaW5nIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI3LjAwLjAwI0FpciBjbGFzc2lmaWNhdGlvbiBlcXVpcG1lbnQgYW5kIHBhcnRzIGFuZCBzY3JlZW5zIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI4LjAwLjAwI0NlbnRpZnVnYWwgc2VwYXJhdGlvbiBlcXVpcG1lbnQgb3IgcGFydHMgb3Igc2NyZWVucyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yOS4wMC4wMCNQYWNrYWdpbmcgbWFjaGluZXJ5IzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI5LjAxLjAwI1dyYXBwaW5nIG1hY2hpbmVyeSMyMy4xNS4yOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yOS4wMi4wMCNGb3JtIG9yIGZpbGwgb3Igc2VhbCBtYWNoaW5lcnkjMjMuMTUuMjkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjkuMDMuMDAjUGFja2FnaW5nIHZhY3V1bSMyMy4xNS4yOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wMC4wMCNIb2xkaW5nIGFuZCBwb3NpdGlvbmluZyBhbmQgZ3VpZGluZyBzeXN0ZW1zIGFuZCBkZXZpY2VzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjAxLjAwI0NhbGlicmF0aW9uIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wMi4wMCNHdWlkZSBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDMuMDAjTWFzdGVyIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wNC4wMCNOZWVkbGUgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA1LjAwI1NoYWZ0IGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wNi4wMCNDaGVja2luZyBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDcuMDAjU2V0dGluZyBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDguMDAjQ2FtZXJhIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wOS4wMCNQaWNrdXAgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjEwLjAwI1JlbW92YWwgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjExLjAwI05venpsZSBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTIuMDAjU2xpZGluZyBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTMuMDAjQ2VudGVyaW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xNC4wMCNJbnNwZWN0aW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xNS4wMCNGZWVkZXIgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE2LjAwI0NsdXRjaCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTcuMDAjQWxpZ25tZW50IGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xOC4wMCNQb3NpdGlvbmluZyBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTkuMDAjTGlmdGVyIHBsYXRlIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjIwLjAwI1RhcGUgZ3VpZGUjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjEuMDAjVGFwZSBmZWVkIGphdyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yMi4wMCNQb3dlciBmZWVkZXIjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjMuMDAjRmVlZGVyIGhhcm5lc3MjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjQuMDAjRmVlZCBqYXcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjUuMDAjTWVjaGFuaWNhbCBncmlwcGVyIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjI2LjAwI0hvbGRlciBqYXcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjcuMDAjSmF3IGFzc2VtYmx5IzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjI4LjAwI1N0YXRpb25hcnkgamF3IzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjI5LjAwI0ppZyBibG9jayMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4zMC4wMCNMaW5lYXIgbW90aW9uIGd1aWRlcyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4zMS4wMCNNZWFzdXJpbmcgamlncyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4zMi4wMCNSaW5nIGppZ3MjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzEuMDAuMDAjSW5kdXN0cmlhbCBtYWNoaW5lcnkgY29tcG9uZW50cyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMS4wMS4wMCNQaXRjaCBzdG9wcGVyIzIzLjE1LjMxLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMxLjAyLjAwI1BhcGVyIHN0b3BwZXIjMjMuMTUuMzEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzEuMDMuMDAjU3RvcHBlciBwYWQjMjMuMTUuMzEuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMDAuMDAuMDAjRm91bmRyeSAgbWFjaGluZXMgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDAuMDAjRm91bmRyeSBtYWNoaW5lcyBhbmQgZXF1aXBtZW50IzIzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjAxLjAwI0ZvdW5kcnkgYmxvd2VycyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wMi4wMCNGb3VuZHJ5IGJ1cm5lcnMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDMuMDAjQ29yZSBkcnlpbmcgb3ZlbnMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDQuMDAjRm9yZ2luZyBwcmVzc2VzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjA1LjAwI0hvdCBtZXRhbCBtaXhlcnMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDYuMDAjRm91bmRyeSBjcnVjaWJsZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDcuMDAjRm91bmRyeSBjb252ZXJ0ZXJzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjA4LjAwI09wZW4gZGllIGZvcmdpbmcgcHJlc3MjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDkuMDAjRm9yZ2luZyBzdGFtcGluZyBtYWNoaW5lcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xMC4wMCNDYXN0aW5nIG1hY2hpbmVzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjExLjAwI0Zvcmdpbmcgcm9sbHMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTIuMDAjUmFkaWFsIGZvcmdpbmcgbWFjaGluZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTMuMDAjQ29sZCBmb3JtaW5nIHByZXNzZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTQuMDAjU2l6aW5nIG9yIGVtYm9zc2luZyBwcmVzc2VzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjE1LjAwI0VuZCBmb3JnaW5nIG1hY2hpbmVzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjAwLjAwI0ZvdW5kcnkgc3VwcGxpZXMjMjMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDEuMDAjRm91bmRyeSBiZWxsb3dzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjAyLjAwI0ZvdW5kcnkgY2xheXMjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDMuMDAjRm91bmRyeSBmbGFza3MjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDQuMDAjRm91bmRyeSBmbHV4ZXMjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDUuMDAjRm91bmRyeSBsYWRsZXMjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDYuMDAjRm91bmRyeSBtb2xkcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNy4wMCNGb3VuZHJ5IHNhbmQjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDguMDAjRm91bmRyeSBzaG92ZWxzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjAwLjAwLjAwI1dvcmtzaG9wIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wMC4wMCNTb2xkZXJpbmcgYW5kIGJyYXppbmcgYW5kIHdlbGRpbmcgbWFjaGluZXJ5IGFuZCBzdXBwbGllcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wMS4wMCNBbnRpIHNwYXR0ZXIgc3ByYXlzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAyLjAwI0dhcyB3ZWxkaW5nIG9yIGJyYXppbmcgcm9kcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wMy4wMCNGaWxsZXIgbWV0YWwjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDQuMDAjQmxvdyBwaXBlcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wNS4wMCNJcm9uIHBvd2RlciMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wNi4wMCNTb2xkZXJpbmcgZmx1aWQjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDcuMDAjU29sZGVyaW5nIGlyb25zIG9yIGd1bnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDguMDAjV2VsZGVycyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wOS4wMCNTb2xkZXIjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTAuMDAjV2VsZGluZyB3aXJlIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjExLjAwI1dlbGRpbmcgdG9vbHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTIuMDAjV2VsZGluZyByb2RzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjEzLjAwI1dlbGRpbmcgcmVjdGlmaWVycyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xNC4wMCNXZWxkaW5nIGdlbmVyYXRvcnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTUuMDAjV2VsZGluZyBlbGVjdHJvZGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE3LjAwI0Jsb3cgdG9yY2hlcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xOC4wMCNQbGFzbWEgd2VsZGluZyBtYWNoaW5lcnkjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTkuMDAjVHVuZ3N0ZW4gaW5lcnQgZ2FzIChUSUcpIHdlbGRpbmcgbWFjaGluZXJ5IzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjIwLjAwI1VsdHJhc291bmQgd2VsZGluZyBtYWNoaW5lcnkjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjEuMDAjTGFzZXIgd2VsZGluZyBtYWNoaW5lcnkjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjIuMDAjU29sZGVyaW5nIGZsdXhlcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yMy4wMCNUZW1wZXJhdHVyZSBpbmRpY2F0aW5nIHN0aWNrcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yNC4wMCNCcmF6ZSByaW5ncyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yNS4wMCNTb2xkZXJpbmcgdGlwcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yNi4wMCNEZXNvbGRlcmluZyB0aXBzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI3LjAwI0Rlc29sZGVyaW5nIGJyYWlkIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI4LjAwI1dlbGRpbmcgc2NyZWVucyBvciBjdXJ0YWlucyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yOS4wMCNXZWxkaW5nIG9yIHNvbGRlcmluZyBraXQjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMzAuMDAjU29sZGVyaW5nIG9yIGRlc29sZGVyaW5nIG9yIGNvbWJpbmVkIHN0YXRpb25zIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjMxLjAwI0Rlc29sZGVyaW5nIEd1biMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wMC4wMCNNYWNoaW5lIHRvb2xzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjAxLjAwI0JvcmluZyB0b29scyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wMi4wMCNCYXIgb3Igcm9kIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDMuMDAjUGlwZSBvciB0dWJlIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDQuMDAjV2lyZSBvciBjYWJsZSBjdXR0ZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA1LjAwI0RlYnVycmluZyBlcXVpcG1lbnQjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDYuMDAjTGF0aGVzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA3LjAwI0xhdGhlIHRvb2xzIG9yIGRpZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDguMDAjTGFzZXIgY3V0dGluZyB0b29scyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wOS4wMCNUd2lzdCBkcmlsbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTAuMDAjUmVhbWVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xMS4wMCNDb3VudGVyYm9yZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTIuMDAjTWlsbGluZyBjdXR0ZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjEzLjAwI0hvYnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTQuMDAjR2VhciBzaGFwZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE1LjAwI1NoYXZpbmcgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xNi4wMCNXYXRlciBqZXQgY3V0dGluZyBtYWNoaW5lcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xNy4wMCNCcm9hY2hpbmcgdG9vbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTguMDAjSW5kZXhhYmxlIGluc2VydHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTkuMDAjQm9yaW5nIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjIwLjAwI0Jyb2FjaGVzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjIxLjAwI0luc2VydGlvbiB0b29scyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4yMi4wMCNXb3Jrc2hvcCBwcmVzc2VzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjAwLjAwI01ldGFsIGJlbmRpbmcgYW5kIGZvcm1pbmcgbWFjaGluZXJ5IzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjAxLjAwI1RhbmdlbnQgYmVuZGVycyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wMi4wMCNXaW5nIGJlbmRlcnMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDMuMDAjVHViZSBiZW5kaW5nIG1hY2hpbmVyeSMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wNC4wMCNQaXBlIGJlbmRpbmcgbWFuZHJlbHMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDUuMDAjRGllIGJlbmRzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA2LjAwI1NlcXVlbnRpYWwgZm9ybWluZyBtYWNoaW5lcyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wNy4wMCNUdWJlIGVuZCBmaW5pc2hlcnMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDguMDAjTWFjaGluZSBtb3VudGluZyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wMC4wMCNNZXRhbCBmYWJyaWNhdGluZyBkaWVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjAxLjAwI1N0YW1waW5nIG9yIGZvcm1pbmcgZGllcyMyMy4xNy4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wMi4wMCNEaWUgY2FzdGluZyBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjAzLjAwI01ldGFsIGV4dHJ1c2lvbiBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjA0LjAwI0N1dHRpbmcgZGllcyBvciB0b29saW5nIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjA1LjAwI1JvdGFyeSBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjA2LjAwI1N0ZWVsIHJ1bGUgZGllcyMyMy4xNy4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wMC4wMCNTcGVjaWFsIHRvb2xpbmcgZml4dHVyZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDEuMDAjSG9sZGluZyBmaXh0dXJlcyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wMi4wMCNHYXVnZXMgYW5kIGluc3BlY3Rpb24gZml4dHVyZXMjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDMuMDAjRmFicmljYXRlZCB0b29saW5nIGZpeHR1cmVzIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjA0LjAwI0Nhc3RpbmcgdG9vbGluZyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wNS4wMCNGb3JnaW5nIHRvb2xpbmcjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDYuMDAjQXNzZW1ibHkgb3IgZGlzYXNzZW1ibHkgdG9vbGluZyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wMC4wMCNNZXRhbCB3b3JraW5nIG1hY2hpbmVyeSBhdHRhY2htZW50cyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wMS4wMCNCdXJycyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wMi4wMCNGb3JtIFJlbGllZiMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wMy4wMCNNYWNoaW5lIHRocmVhZGluZyB0YXBzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjA0LjAwI01hY2hpbmUgdGhyZWFkaW5nIGRpZXMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDUuMDAjTWFjaGluZSBlbmQgbWlsbHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDYuMDAjTWV0YWwgc3RhbXBzIG9yIHB1bmNoZXMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDcuMDAjTWV0YWwgY3V0dGluZyBiYW5kIHNhdyBibGFkZXMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDguMDAjTWV0YWwgY3V0dGluZyBjaXJjdWxhciBzYXcgYmxhZGVzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjA5LjAwI0NhcmJpZGUgaW5zZXJ0cyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4xMC4wMCNDZXJhbWljIGluc2VydHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMTEuMDAjU3RlZWwgaW5zZXJ0cyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4xMi4wMCNEaWFtb25kIGluc2VydHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMTMuMDAjVGhyZWFkaW5nIG1pbGxzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIxLjAwLjAwI0hvbGRpbmcgZml4dHVyZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjIuMDAuMDAjR2F1Z2VzIGFuZCBpbnNwZWN0aW9uIGZpeHR1cmVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIzLjAwLjAwI0ZhYnJpY2F0ZWQgdG9vbGluZyBmaXh0dXJlcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yNC4wMC4wMCNDYXN0aW5nIHRvb2xpbmcjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjUuMDAuMDAjRm9yZ2luZyB0b29saW5nIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjI2LjAwLjAwI0Fzc2VtYmx5IG9yIGRpc2Fzc2VtYmx5IHRvb2xpbmcjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMDAuMDAuMDAjSW5kdXN0cmlhbCBmb29kIGFuZCBiZXZlcmFnZSBlcXVpcG1lbnQjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDAuMDAjRm9vZCBwcmVwYXJhdGlvbiBtYWNoaW5lcnkjMjMuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDEuMDAjRmlsbGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDIuMDAjTWlsbGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDMuMDAjTWl4aW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wNC4wMCNTaWZ0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wNS4wMCNEZWh5ZHJhdGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDYuMDAjV2FzaGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDcuMDAjQ3J1c2hpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA4LjAwI0JsYW5jaGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDkuMDAjU29ydGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMTAuMDAjTWVhdCB0eWVycyMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wMC4wMCNGb29kIGN1dHRpbmcgbWFjaGluZXJ5IzIzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjAxLjAwI0RpY2luZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDIuMDAjU2xpY2luZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDMuMDAjQ2hvcHBpbmcgbWFjaGluZXJ5IzIzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjA0LjAwI0N1dHRpbmcgbWFjaGluZXJ5IzIzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjA1LjAwI0dyYXRpbmcgbWFjaGluZXJ5IzIzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjA2LjAwI1BlZWxpbmcgbWFjaGluZXJ5IzIzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE3LjAwLjAwI0Zvb2QgY29va2luZyBhbmQgc21va2luZyBtYWNoaW5lcnkjMjMuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDEuMDAjU21va2luZyBtYWNoaW5lcnkjMjMuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDIuMDAjUm9hc3RpbmcgbWFjaGluZXJ5IzIzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE3LjAzLjAwI0Nvb2tpbmcgbWFjaGluZXJ5IzIzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE3LjA0LjAwI1N0ZWFtaW5nIG1hY2hpbmVyeSMyMy4xOC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xOC4xOC4wMC4wMCNJbmR1c3RyaWFsIGJldmVyYWdlIHByb2Nlc3NpbmcgbWFjaGluZXJ5IzIzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAxLjAwI0NvZmZlZSBicmV3aW5nIGVxdWlwbWVudCBvciBzdXBwbGllcyMyMy4xOC4xOC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xOC4wMi4wMCNKdWljaW5nIG1hY2hpbmVyeSMyMy4xOC4xOC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xOC4wMy4wMCNJY2UgbWFraW5nIG1hY2hpbmVzIzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjA0LjAwI0ljZSBjcmVhbSBtYWNoaW5lcyMyMy4xOC4xOC4wMC4wMAotdW5zcHNjNyMyMy4xOS4wMC4wMC4wMCNNaXhlcnMgYW5kIHRoZWlyIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wMC4wMCNCYXRjaCBtaXhlcnMjMjMuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDEuMDAjQ2hhbmdlIGNhbiBtaXhlcnMjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDIuMDAjSGVsaWNhbCBibGFkZSBtaXhlciMyMy4xOS4xMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wMy4wMCNEb3VibGUgYXJtIGtuZWFkaW5nIG1peGVycyMyMy4xOS4xMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wNC4wMCNJbnRlbnNpdmUgbWl4ZXJzIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjA1LjAwI1JvbGwgbWl4ZXJzIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjExLjAwLjAwI0NvbnRpbnVvdXMgbWl4ZXJzIzIzLjE5LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjExLjAxLjAwI1NpbmdsZSBzY3JldyBtaXhlcnMjMjMuMTkuMTEuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTEuMDIuMDAjVHdpbiBzY3JldyBleHRydWRlciMyMy4xOS4xMS4wMC4wMAotdW5zcHNjNyMyMy4yMC4wMC4wMC4wMCNNYXNzIHRyYW5zZmVyIGVxdWlwbWVudCMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMC4wMC4wMCNHYXMgbGlxdWlkIGNvbnRhY3Rpbmcgc3lzdGVtcyMyMy4yMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMC4wMS4wMCNQbGF0ZSBjb2x1bW5zIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjAyLjAwI1BhY2tlZCBjb2x1bW5zIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjAzLjAwI0xpcXVpZCBkaXNwZXJzZWQgY29udGFjdG9yIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjA0LjAwI1dldHRlZCB3YWxsIGNvbHVtbiMyMy4yMC4xMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMC4wNS4wMCNCdWJibGUgY29sdW1ucyMyMy4yMC4xMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMS4wMC4wMCNBZHNvcnB0aW9uIGFuZCBpb24gZXhjaGFuZ2UjMjMuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTEuMDEuMDAjQWRzb3JiZXIgdmVzc2VsIzIzLjIwLjExLjAwLjAwCi11bnNwc2M3IzIzLjIwLjExLjAyLjAwI0FtYmllbnQgcHJlc3N1cmUgYWRzb3JiZXIgdmVzc2VsIzIzLjIwLjExLjAwLjAwCi11bnNwc2M3IzIzLjIxLjAwLjAwLjAwI0VsZWN0cm9uaWMgbWFudWZhY3R1cmluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMjEuMTAuMDAuMDAjRWxlY3Ryb25pYyBhc3NlbWJseSBtYWNoaW5lcnkgYW5kIHN1cHBvcnQgZXF1aXBtZW50IzIzLjIxLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIxLjEwLjAxLjAwI0NoaXAgcGxhY2VycyMyMy4yMS4xMC4wMC4wMAotdW5zcHNjNyMyMy4yMS4xMC4wMi4wMCNHbHVlIGRpc3BlbnNpbmcgbWFjaGluZXJ5IzIzLjIxLjEwLjAwLjAwCi11bnNwc2M3IzI0LjAwLjAwLjAwLjAwI01hdGVyaWFsIEhhbmRsaW5nIGFuZCBDb25kaXRpb25pbmcgYW5kIFN0b3JhZ2UgTWFjaGluZXJ5IGFuZCB0aGVpciBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMDAuMDAuMDAjTWF0ZXJpYWwgaGFuZGxpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDAuMDAjSW5kdXN0cmlhbCB0cnVja3MjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDEuMDAjQ2FydHMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDIuMDAjQnVsayB0cmFuc3BvcnRlcnMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDMuMDAjRG9sbGllcyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wNC4wMCNIYW5kIHRydWNrcyBvciBhY2Nlc3NvcmllcyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wNS4wMCNQYWxsZXQgdHJ1Y2tzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA2LjAwI1B1c2hjYXJ0cyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wNy4wMCNXaGVlbGJhcnJvd3MjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDguMDAjQ3JlZXBlcnMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDkuMDAjV2Fnb25zIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjEwLjAwI1RpbHQgdHJ1Y2tzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjExLjAwI1NoZWxmIHRyb2xsZXlzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjAwLjAwI0xpZnRpbmcgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wMS4wMCNFbGV2YXRvcnMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDIuMDAjSG9pc3RzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjAzLjAwI0ZvcmtsaWZ0cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wNC4wMCNMaWZ0cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wNS4wMCNMb2FkaW5nIGVxdWlwbWVudCMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wNi4wMCNTdGFja2VycyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wNy4wMCNDcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDguMDAjV2luY2hlcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wOS4wMCNUaWx0cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xMC4wMCNNYW5pcHVsYXRvcnMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTEuMDAjU2xpbmdzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjEyLjAwI0phY2tzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjEzLjAwI0Jsb2NrcyBvciBwdWxsZXlzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE0LjAwI0FpciBiYWdzIGZvciBsb2FkaW5nIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE1LjAwI0xvYWRpbmcgcmFtcHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTYuMDAjQmVsb3cgdGhlIGhvb2sgZGV2aWNlIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE3LjAwI1NjaXNzb3IgbGlmdCMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xOC4wMCNQaXBlIGxheWVyIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE5LjAwI0JyaWRnZSBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjAuMDAjVHJhY2sgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjIxLjAwI0FsbCB0ZXJyYWluIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yMi4wMCNSb3VnaCB0ZXJyYWluIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yMy4wMCNUb3dlciBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjQuMDAjSHlkcmF1bGljIHRydWNrIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yNS4wMCNDb252ZW50aW9uYWwgdHJ1Y2sgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI2LjAwI0VzY2FsYXRvciBvciB3YWxrd2F5cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yNy4wMCNHaXJkZXIgdHJvbGxleXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjguMDAjQWRqdXN0YWJsZSBmb3JrcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yOS4wMCNGb3JrbGlmdCBhY2Nlc3NvcmllcyBvciBzdXBwbGllcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4zMC4wMCNXb3Jrc2hvcCBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMzEuMDAjU3VjdGlvbiBjdXBzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjMyLjAwI1NpZGUgc2hpZnRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjAwLjAwI0NvbnZleW9ycyBhbmQgYWNjZXNzb3JpZXMjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDEuMDAjQ29udmV5b3Igcm9sbGVyIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjAyLjAwI0JhbGwgdHJhbnNmZXIgdGFibGVzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjAzLjAwI1JvY2sgYmlucyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wNC4wMCNDb252ZXlvciBmZWVkZXJzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA1LjAwI0NvbnZleW9yIHNjcmV3IzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA2LjAwI1Ryb2xsZXlzIG9yIGFjY2Vzc29yaWVzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA3LjAwI0NvbnZleW9yIHJhaWxzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA4LjAwI0V4dGVuZGFibGUgY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA5LjAwI1JvbGxlciBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTAuMDAjUGFja2FnZSBzdG9wcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xMS4wMCNUdXJudGFibGVzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjEyLjAwI0JlbHQgY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjEzLjAwI0J1Y2tldCBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTQuMDAjQWlyIGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xNS4wMCNDb252ZXlvciBiZWx0aW5nIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE2LjAwI0NvbnZleW9yIHB1bGxleXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTcuMDAjQ29udmV5b3IgaWRsZXJzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE4LjAwI0NvbnZleW9yIGJlbHQgbGFjaW5nIG9yIGZhc3RlbmVycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xOS4wMCNDb252ZXlvciBiZWx0IGJydXNoZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMjAuMDAjV2VhciBzdHJpcHMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMjEuMDAjVHJvbGxleSBsaWQjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMjIuMDAjQ2hhaW4gY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjAwLjAwI0RvY2sgZXF1aXBtZW50IzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjAxLjAwI0RvY2sgbGV2ZWxlcnMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDIuMDAjRG9jayBzZWFscyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wMy4wMCNEb2NrIHJhbXBzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA0LjAwI1N0cmlwIGRvb3JzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA1LjAwI0RvY2sgYnVtcGVycyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wNi4wMCNEb2NrIGxhZGRlcnMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDcuMDAjRG9jayBwbGF0ZXMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDguMDAjV2hlZWwgY2hvY2tzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA5LjAwI0RvY2sgcmFpbHMgYW5kIGFjY2Vzc29yaWVzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjAwLjAwI0RydW0gaGFuZGxpbmcgZXF1aXBtZW50IzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjAxLjAwI0RydW0gb3BlbmVycyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wMi4wMCNEcnVtIGdyYWJzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjAzLjAwI0RydW0gbGlmdGVycyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wNC4wMCNEcnVtIGNyYWRsZXMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDUuMDAjU3BpbGwgZGVjayMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wNi4wMCNEcnVtIHJlY3VwZXJhdG9ycyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wNy4wMCNTcGlsbCBjb250YWlubWVudCBzdXBwb3J0cyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wMC4wMCNTaGVsdmluZyBhbmQgc3RvcmFnZSMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wMS4wMCNSYWNrIHN5c3RlbXMgZm9yIHJhY2sgbW91bnQgZWxlY3Ryb25pYyBlcXVpcG1lbnQjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDIuMDAjQmluIGhhbmRsZXJzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjAzLjAwI1BhbGxldHMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDQuMDAjU3RvcmFnZSByYWNrcyBvciBzaGVsdmVzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA1LjAwI0F1dG9tYXRlZCBzdG9yYWdlIG9yIHJldHJpZXZhbCBzeXN0ZW1zIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA2LjAwI1dvcmsgYmVuY2hlcyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wNy4wMCNSZWVsIHN0b3JhZ2Ugc2hlbHZlcyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wOC4wMCNQb3J0YWJsZSByZWVsIGhvbGRlcnMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDAuMDAjV2FyZWhvdXNpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wMS4wMCNDYXJnbyBoYW5kbGluZyBlcXVpcG1lbnQjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDIuMDAjV2FyZWhvdXNlIGNhcm91c2VscyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wMy4wMCNXYXJlaG91c2UgY2FzZXJzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjA0LjAwI0RlcGFsbGV0aXplcnMjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDUuMDAjUGFsbGV0aXplcnMjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDYuMDAjSW5kdXN0cmlhbCBzaHJpbmsgd3JhcCBlcXVpcG1lbnQjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDcuMDAjQ2FydG9uaW5nIG1hY2hpbmVyeSMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wOC4wMCNQYWNrYWdpbmcgY29tcGFjdG9ycyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wMC4wMCNQYWNraW5nIHRvb2xzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjAxLjAwI1N0cmV0Y2ggZmlsbSBkaXNwZW5zZXJzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjAyLjAwI0JveCBzZWFsaW5nIHRhcGUgZGlzcGVuc2VycyMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wMy4wMCNCYWcgc2VhbGluZyB0b29scyBhbmQgZXF1aXBtZW50IzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjA0LjAwI1N0cmFwcGluZyBkaXNwZW5zZXIjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDUuMDAjU3RyYXBwaW5nIHRlbnNpb25lcnMgb3Igc2VhbGVycyMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wNi4wMCNDYXJ0b24gZm9ybWluZyBtYWNoaW5lcyMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wNy4wMCNUYXBpbmcgbWFjaGluZXMjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMDAuMDAuMDAjQ29udGFpbmVycyBhbmQgc3RvcmFnZSMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wMC4wMCNCYWdzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjAxLjAwI0NhbnZhcyBiYWdzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjAyLjAwI1BhcGVyIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDMuMDAjUGxhc3RpYyBiYWdzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA0LjAwI1BvdWNoZXMjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDUuMDAjRmxleGlibGUgaW50ZXJtZWRpYXRlIGJ1bGsgY29udGFpbmVycyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wNi4wMCNMYXVuZHJ5IG5ldHMgb3IgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wNy4wMCNUb29sIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDguMDAjVGVudCBiYWcjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTYuMDAuMDAjQ292ZXJzIGFuZCBjYXBzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjAwLjAwI1RhbmtzIGFuZCBjeWxpbmRlcnMgYW5kIHRoZWlyIGFjY2Vzc29yaWVzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjAxLjAwI1Jlc2Vydm9pcnMjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDIuMDAjQWlyIG9yIGdhcyB0YW5rcyBvciBjeWxpbmRlcnMjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDMuMDAjU3RvcmFnZSB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wNC4wMCNDYWxpYnJhdGluZyB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wNS4wMCNDaGVtaWNhbCB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wNi4wMCNEaXAgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDcuMDAjRXhwYW5zaW9uIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA4LjAwI0Z1ZWwgc3RvcmFnZSB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wOS4wMCNQcm9jZXNzaW5nIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjEwLjAwI1dhdGVyIHN0b3JhZ2UgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMTEuMDAjQ2FyYm95cyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4xMi4wMCNDb250YWlubWVudCBiYXNpbiMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4xMy4wMCNSaW5zZSB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wMC4wMCNCaW5zIGFuZCBiYXNrZXRzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjAxLjAwI0JpbnMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDIuMDAjQmFza2V0cyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wMy4wMCNOb24gbWV0YWxsaWMgYmlucyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wNC4wMCNNZXRhbGxpYyBiaW5zIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjA1LjAwI01ldGFsbGljIGJhc2tldHMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDYuMDAjTm9uIG1ldGFsbGljIGJhc2tldHMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDAuMDAjQ2Fza3MgYW5kIGJhcnJlbHMgYW5kIGRydW1zIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjAxLjAwI0Nhc2tzIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjAyLjAwI0JhcnJlbHMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDMuMDAjU3RhaW5sZXNzIHN0ZWVsIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA0LjAwI1N0ZWVsIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA1LjAwI1BvbHlldGh5bGVuZSBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wNi4wMCNDb21wb3NpdGUgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDcuMDAjRmliZXIgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDguMDAjTWV0YWxsaWMgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDkuMDAjTm9uIG1ldGFsbGljIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjEwLjAwI0ludGVybWVkaWF0ZSBidWxrIGNvbnRhaW5lcnMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMTEuMDAjU3RhYmlsaXplciMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4xMi4wMCNEcnVtIGxpZCMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wMC4wMCNDYW5zIGFuZCBwYWlscyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wMS4wMCNTdGVlbCBwYWlscyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wMi4wMCNHYXNvbGluZSBjYW5zIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAzLjAwI1BsYXN0aWMgcGFpbHMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDQuMDAjTWV0YWxsaWMgcGFpbHMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDUuMDAjTm9uIG1ldGFsbGljIHBhaWxzIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA2LjAwI01ldGFsbGljIGZsYW1tYWJsZSBsaXF1aWQgY2FucyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wNy4wMCNOb24gbWV0YWxsaWMgZmxhbW1hYmxlIGxpcXVpZCBjYW5zIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA4LjAwI1NwcmF5IGtpdCMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wOS4wMCNKZXJyeWNhbnMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDAuMDAjU3RvcmFnZSBjaGVzdHMgYW5kIGNhYmluZXRzIGFuZCB0cnVua3MjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDEuMDAjVG9vbCBjaGVzdHMgb3IgYm94ZXMgb3IgY2FiaW5ldHMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDIuMDAjSGF6YXJkb3VzIG1hdGVyaWFscyBjYWJpbmV0cyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMy4wMCNUb29sIGJlbHRzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA0LjAwI0JveCMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wNS4wMCNEcmF3ZXJzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA2LjAwI0JveCBvciBzaGVsZiBwYXJ0aXRpb25zIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA3LjAwI01haWwgYm94ZXMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDguMDAjQW50aXN0YXRpYyBib3hlcyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wOS4wMCNCb3ggbGlkcyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wMC4wMCNDb3JydWdhdGVkIGFuZCBvdGhlciBib3hlcyBmb3IgZGlzdHJpYnV0aW9uIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjAxLjAwI1Nsb3R0ZWQgY29ycnVnYXRlZCBjYXJ0b25zIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjAyLjAwI09uZSBwaWVjZSBkaWUgY3V0IHNoaXBwaW5nIGNhcnRvbnMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDMuMDAjRGllIGN1dCBjb3JydWdhdGVkIHNoaXBwaW5nIGNhcnRvbnMgd2l0aCBzZXBhcmF0ZSBsaWRzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjA0LjAwI01vbGRlZCBib3hlcyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wNS4wMCNSaWdpZCBib3hlcyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wNi4wMCNGbGV4aWJsZSBpbnRlcm1lZGlhdGUgYnVsayBjb250YWluZXJzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjA3LjAwI0ludGVybWVkaWF0ZSBidWxrIGNvbnRhaW5lcnMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjYuMDAuMDAjTGlxdWlkIGNvbnRhaW5lcnMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjYuMDEuMDAjSnVncyMyNC4xMS4yNi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNi4wMi4wMCNKYXJzIzI0LjExLjI2LjAwLjAwCi11bnNwc2M3IzI0LjEyLjAwLjAwLjAwI1BhY2thZ2luZyBtYXRlcmlhbHMjMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDAuMDAjUGFja2FnaW5nIGJveGVzIGFuZCBiYWdzIGFuZCBwb3VjaGVzIzI0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjAxLjAwI1BvbHkgYmFncyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wMi4wMCNQYWNrYWdpbmcgcG91Y2hlcyBvciBiYWdzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjAzLjAwI1BhY2thZ2luZyBib3hlcyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wNC4wMCNDYXJkZWQgcGFja2FnaW5nIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA1LjAwI1RhcnBhdWxpbnMjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDYuMDAjQ29uZHVjdGl2ZSBib3hlcyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wNy4wMCNSaWdpZCBzZXQgdXAgYm94ZXMjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDguMDAjRWdnIHRyYXlzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjAwLjAwI1BhY2thZ2luZyBjYW5zIzI0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjAxLjAwI0Flcm9zb2wgY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wMi4wMCNQYWludCBvciB2YXJuaXNoIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDMuMDAjQmV2ZXJhZ2UgY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wNC4wMCNGb29kIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDUuMDAjU3RlZWwgY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wNi4wMCNBbHVtaW51bSBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjAwLjAwI0JvdHRsZXMjMjQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDEuMDAjU3F1ZWV6ZSBib3R0bGVzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjAyLjAwI1BsYXN0aWMgYm90dGxlcyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wMy4wMCNHbGFzcyBib3R0bGVzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjA0LjAwI0NhcHMgb3IgdG9wcyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wNS4wMCNBcHBsaWNhdG9yIGJvdHRsZXMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDYuMDAjQXBwbGljYXRvcnMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMDAuMDAuMDAjSW5kdXN0cmlhbCByZWZyaWdlcmF0aW9uIzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjAwLjAwI0luZHVzdHJpYWwgcmVmcmlnZXJhdG9ycyMyNC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wMS4wMCNDb21iaW5lZCByZWZyaWdlcmF0b3IgZnJlZXplcnMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDIuMDAjTGlxdWlkIG5pdHJvZ2VuIHJlZnJpZ2VyYXRvcnMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDMuMDAjV2FsayBpbiByZWZyaWdlcmF0b3JzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjA0LjAwI1JlZnJpZ2VyYXRlZCBjb250YWluZXJzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjA1LjAwI1JlZnJpZ2VyYXRlZCB2ZXNzZWxzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjA2LjAwI1JlZnJpZ2VyYXRlZCB0YW5rcyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wMC4wMCNJbmR1c3RyaWFsIGZyZWV6ZXJzIzI0LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjAxLjAwI0NoZXN0IGZyZWV6ZXJzIzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjAyLjAwI1VwcmlnaHQgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDMuMDAjTG93IHRlbXBlcmF0dXJlIGZyZWV6ZXJzIzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjA0LjAwI0ZyZWV6ZSBkcnlpbmcgZXF1aXBtZW50IzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjA1LjAwI1dhbGsgaW4gZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDYuMDAjUGxhdGUgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDcuMDAjQmxhc3QgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTkuMDAuMDAjSWNlIG1ha2VycyMyNC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMy4xOS4wMS4wMCNJY2UgY3ViZSBtYWtlcnMjMjQuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTkuMDIuMDAjSWNlIGJsb2NrIG1ha2VycyMyNC4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNC4xNC4wMC4wMC4wMCNQYWNraW5nIHN1cHBsaWVzIzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjAwLjAwI1NlY3VyaW5nIGFuZCBwcm90ZWN0aW5nIHN1cHBsaWVzIzI0LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjAxLjAwI1N0cmV0Y2ggd3JhcCBmaWxtcyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wMi4wMCNTaHJpbmsgd3JhcCBmaWxtcyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wMy4wMCNQb2x5ZXRoeWxlbmUgZmlsbXMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDQuMDAjVGFtcGVyIHByb29mIG9yIHNlY3VyaXR5IHNlYWxzIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA1LjAwI1BvbHlldGh5bGVuZSBmaWxtcyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wNi4wMCNUYXJwYXVsaW5zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA3LjAwI0FudGkgc3RhdGljIHBhY2thZ2luZyBmaWxtcyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wOC4wMCNDYXJ0b24gY29ybmVyIHN1cHBvcnQjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDkuMDAjUnViYmVyIGNvcmQjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMTAuMDAjQ2FibGUgcHJvdGVjdG9ycyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4xMS4wMCNMb2FkIGJpbmRlcnMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDAuMDAjQ3VzaGlvbmluZyBzdXBwbGllcyMyNC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wMS4wMCNCdWJibGUgd3JhcCMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wMi4wMCNUaGVybW9mb3JtaW5nIG1hdGVyaWFscyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wMy4wMCNDdXNoaW9uaW5nIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjA0LjAwI1dhZGRpbmcgbWF0ZXJpYWxzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjA1LjAwI0FpciBmaWxsZWQgcGFja2luZyBtYXRlcmlhbHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDYuMDAjUGFja2luZyBwZWFudXRzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjA3LjAwI0NhcmRib2FyZCBpbnNlcnRzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjA4LjAwI1Byb3RlY3RpdmUgZW5kcyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wMC4wMCNQYWNrYWdpbmcgdHViZXMgYW5kIGNvcmVzIGFuZCBsYWJlbHMgYW5kIGFjY2Vzc29yaWVzIzI0LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjAxLjAwI1BhcGVyIHR1YmVzIG9yIGNvcmVzIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjAyLjAwI1R1YmUgb3IgY29yZSBlbmQgcGx1Z3MjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDMuMDAjUGFwZXIgcGllY2VzIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjA0LjAwI1ByaW50ZWQgaW5zZXJ0cyBvciBpbnN0cnVjdGlvbnMjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDUuMDAjQ29sbGFwc2libGUgdHViZXMjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDYuMDAjU3Bvb2wjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDcuMDAjUmVlbCMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNS4wMC4wMC4wMC4wMCNDb21tZXJjaWFsIGFuZCBNaWxpdGFyeSBhbmQgUHJpdmF0ZSBWZWhpY2xlcyBhbmQgdGhlaXIgQWNjZXNzb3JpZXMgYW5kIENvbXBvbmVudHMjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMDAuMDAuMDAjTW90b3IgdmVoaWNsZXMjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDAuMDAjUGFzc2VuZ2VyIG1vdG9yIHZlaGljbGVzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjAxLjAwI01pbmlidXNlcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wMi4wMCNCdXNzZXMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDMuMDAjQXV0b21vYmlsZXMgb3IgY2FycyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wNC4wMCNTdGF0aW9uIHdhZ29ucyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wNS4wMCNNaW5pdmFucyBvciB2YW5zIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjA2LjAwI0xpbW91c2luZXMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDcuMDAjTGlnaHQgdHJ1Y2tzIG9yIHNwb3J0IHV0aWxpdHkgdmVoaWNsZXMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDAuMDAjUHJvZHVjdCBhbmQgbWF0ZXJpYWwgdHJhbnNwb3J0IHZlaGljbGVzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjE2LjAxLjAwI0R1bXAgdHJ1Y2tzIzI1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE2LjAyLjAwI1RvdyB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDQuMDAjRGVsaXZlcnkgdHJ1Y2tzIzI1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE2LjA5LjAwI1NsdWRnZSBvciBzZXdhZ2UgaGFuZGxpbmcgdHJ1Y2tzIzI1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE3LjAwLjAwI1NhZmV0eSBhbmQgcmVzY3VlIHZlaGljbGVzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjE3LjAxLjAwI0ZpcmUgb3IgcmVzY3VlIHRydWNrcyMyNS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNy4wMi4wMCNQb2xpY2UgdmVoaWNsZXMjMjUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTcuMDMuMDAjQW1idWxhbmNlcyMyNS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOC4wMC4wMCNNb3Rvcml6ZWQgY3ljbGVzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjE4LjAxLjAwI01vdG9yY3ljbGVzIzI1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE4LjAyLjAwI1Njb290ZXJzIzI1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE4LjAzLjAwI01vcGVkcyMyNS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wMC4wMCNTcGVjaWFsaXplZCBhbmQgcmVjcmVhdGlvbmFsIHZlaGljbGVzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAxLjAwI0FncmljdWx0dXJhbCB0cmFjdG9ycyMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wMi4wMCNNb3RvciBob21lcyMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wMy4wMCNTbm93bW9iaWxlcyBvciBzbm93IHNjb290ZXIjMjUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDQuMDAjR29sZiBjYXJ0cyMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wNS4wMCNBbGwgdGVycmFpbiB2ZWhpY2xlcyB0cmFja2VkIG9yIHdoZWVsZWQjMjUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDYuMDAjR28gY2FydCMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMC4wMC4wMCNXYXIgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjAuMDEuMDAjVGFua3MjMjUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjAuMDIuMDAjQXJtb3JlZCBmaWdodGluZyB2ZWhpY2xlcyMyNS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMC4wMy4wMCNTZWxmIHByb3BlbGxlZCBhcnRpbGxlcnkjMjUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDAuMDAjVHJ1Y2sgdHJhY3RvcnMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDEuMDAjTG93IGNhYiBmb3J3YXJkIHRyYWN0b3JzIzI1LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjAyLjAwI0xvbmcgbm9zZSB0cmFjdG9ycyB3aXRoIHNsZWVwZXIjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDMuMDAjTG9uZyBub3NlIHRyYWN0b3JzIHdpdGhvdXQgc2xlZXBlciMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wNC4wMCNDYWIgb3ZlciBlbmdpbmUgdHJhY3RvcnMgd2l0aCBzbGVlcGVyIzI1LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjA1LjAwI0NhYiBvdmVyIGVuZ2luZSB0cmFjdG9ycyB3aXRob3V0IHNsZWVwZXIjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMDAuMDAuMDAjTWFyaW5lIHRyYW5zcG9ydCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wMC4wMCNDb21tZXJjaWFsIG1hcmluZSBjcmFmdCMyNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wMS4wMCNUcmF3bGVycyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wMi4wMCNGaXNoaW5nIGJvYXRzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAzLjAwI0NhcmdvIG9yIGNvbnRhaW5lciBzaGlwcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wNC4wMCNEcmVkZ2luZyBjcmFmdCMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wNS4wMCNUYW5rZXJzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA2LjAwI1R1ZyBib2F0cyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wNy4wMCNCYXJnZXMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDguMDAjUGFzc2VuZ2VyIG9yIGF1dG9tb2JpbGUgZmVycmllcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wOS4wMCNDcnVpc2Ugc2hpcHMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMTAuMDAjU2FsdmFnZSBzaGlwcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4xMS4wMCNPaWwgb3IgZ2FzIGNyZXcgYm9hdCMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4xMi4wMCNPaWwgb3IgZ2FzIHdvcmtib2F0IzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjEzLjAwI1NlaXNtaWMgdmVzc2VsIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE2LjAwLjAwI1NhZmV0eSBhbmQgcmVzY3VlIHdhdGVyIGNyYWZ0IzI1LjExLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE2LjAxLjAwI0xpZmVib2F0cyBvciBsaWZlcmFmdHMjMjUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDIuMDAjRmlyZSBmaWdodGluZyB3YXRlcmNyYWZ0IzI1LjExLjE2LjAwLjAwCi11bnNwc2M3IzI1LjExLjE2LjAzLjAwI1Jlc2N1ZSBzaGlwcyBvciBib2F0cyMyNS4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wMC4wMCNNaWxpdGFyeSB3YXRlcmNyYWZ0IzI1LjExLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjAxLjAwI1N1Ym1hcmluZXMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDIuMDAjQWlyY3JhZnQgY2FycmllcnMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDMuMDAjQW1tdW5pdGlvbiBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wNC4wMCNBbXBoaWJpb3VzIGFzc2F1bHQgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDUuMDAjQW1waGliaW91cyB0cmFuc3BvcnQgZG9ja3MjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDYuMDAjQW1waGliaW91cyBjb21tYW5kIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA3LjAwI0NvbW1hbmQgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDguMDAjQ3J1aXNlcnMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDkuMDAjRGVzdHJveWVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xMC4wMCNEb2NrIGxhbmRpbmcgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTEuMDAjRmFzdCBjb21iYXQgc3VwcG9ydCBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xMi4wMCNGcmlnYXRlcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xMy4wMCNGbGVldCBvaWxlcnMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTQuMDAjVXRpbGl0eSBsYW5kaW5nIHdhdGVyY3JhZnQjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTUuMDAjTWVjaGFuaXplZCBvciB1dGlsaXR5IHdhdGVyY3JhZnQjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTYuMDAjTWluZSBodW50aW5nIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjE3LjAwI01pbmUgY291bnRlcm1lYXN1cmVzIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjE4LjAwI0NvYXN0YWwgcGF0cm9sIHdhdGVyY3JhZnQjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTkuMDAjU3VibWFyaW5lIHRlbmRlcnMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMjAuMDAjVGFuayBsYW5kaW5nIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjIxLjAwI0FpciBjdXNoaW9uZWQgbGFuZGluZyB3YXRlcmNyYWZ0IzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjAwLjAwI1JlY3JlYXRpb25hbCB3YXRlcmNyYWZ0IzI1LjExLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjAxLjAwI1JlY3JlYXRpb25hbCBzYWlsYm9hdHMjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDIuMDAjUmVjcmVhdGlvbmFsIG1vdG9yYm9hdHMjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDMuMDAjUmVjcmVhdGlvbmFsIHJvd2JvYXRzIzI1LjExLjE4LjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjA0LjAwI0Nhbm9lcyBvciBrYXlha3MjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDUuMDAjUGVyc29uYWwgbW90b3JpemVkIHdhdGVyY3JhZnQjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDYuMDAjUmFmdHMjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTkuMDAuMDAjTWFyaW5lIGNyYWZ0IHN5c3RlbXMgYW5kIHN1YmFzc2VtYmxpZXMjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTkuMDEuMDAjTWFyaW5lIGNyYWZ0IGNvbW11bmljYXRpb25zIHN5c3RlbXMjMjUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTkuMDIuMDAjTWFyaW5lIHByb3BlbGxlcnMjMjUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTkuMDMuMDAjU2FpbHMjMjUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTkuMDQuMDAjUGFkZGxlcyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wNS4wMCNNYXJpbmUgYmFsbGFzdCBzeXN0ZW1zIzI1LjExLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEyLjAwLjAwLjAwI1JhaWx3YXkgYW5kIHRyYW13YXkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDAuMDAjTG9jb21vdGl2ZXMgYW5kIGVsZWN0cmljIHRyb2xsZXlzIzI1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEyLjE1LjAxLjAwI0RpZXNlbCBmcmVpZ2h0IGxvY29tb3RpdmVzIzI1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE1LjAyLjAwI0VsZWN0cmljIGZyZWlnaHQgbG9jb21vdGl2ZXMjMjUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDMuMDAjRGllc2VsIHBhc3NlbmdlciBsb2NvbW90aXZlcyMyNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wNC4wMCNFbGVjdHJpYyBwYXNzZW5nZXIgbG9jb21vdGl2ZXMjMjUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDAuMDAjUmFpbHdheSBhbmQgdHJhbXdheSBjYXJzIzI1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjAxLjAwI0ZyZWlnaHQgcmFpbCBjYXJzIzI1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjAyLjAwI1RhbmtlciByYWlsIGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDMuMDAjUGFzc2VuZ2VyIHJhaWwgY2FycyMyNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wNC4wMCNIb3BwZXIgcmFpbCBjYXJzIzI1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjA1LjAwI1N0cmVldGNhcnMgb3IgdHJhbXdheSBjYXJzIzI1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjAwLjAwI1JhaWxyb2FkIHN1cHBvcnQgZXF1aXBtZW50IGFuZCBzeXN0ZW1zIzI1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjAxLjAwI1JhaWwgc3dpdGNoaW5nIHN5c3RlbXMjMjUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDIuMDAjUmFpbHdheSBzbGVlcGVycyMyNS4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNy4wMy4wMCNSYWlsd2F5IHRyYWNrcyMyNS4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNy4wNC4wMCNSYWlsd2F5IGZyb2dzIG9yIGZpc2ggcGxhdGVzIzI1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjAwLjAwLjAwI0FpcmNyYWZ0IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjAwLjAwI1Bvd2VyZWQgZml4ZWQgd2luZyBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wMS4wMCNGaXhlZCB3aW5nIGFncmljdWx0dXJhbCBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wMi4wMCNDYXJnbyBwcm9wZWxsZXIgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDMuMDAjU2VhcGxhbmVzIzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjA0LjAwI0NvbW1lcmNpYWwgcGFzc2VuZ2VyIHByb3BlbGxlciBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wNS4wMCNDYXJnbyBqZXQgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDYuMDAjQ29tbWVyY2lhbCBwYXNzZW5nZXIgamV0IGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjA3LjAwI1ByaXZhdGUgb3IgYnVzaW5lc3MgcHJvcGVsbGVyIGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjA4LjAwI1ByaXZhdGUgb3IgYnVzaW5lc3MgamV0IGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE2LjAwLjAwI0NpdmlsaWFuIGFuZCBjb21tZXJjaWFsIHJvdGFyeSB3aW5nIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE2LjAxLjAwI1Bhc3NlbmdlciB0cmFuc3BvcnQgaGVsaWNvcHRlcnMjMjUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDIuMDAjQ2FyZ28gdHJhbnNwb3J0IGhlbGljb3B0ZXJzIzI1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE2LjAzLjAwI0FncmljdWx0dXJhbCBoZWxpY29wdGVycyMyNS4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNi4wNC4wMCNNZWRpY2FsIG9yIHJlc2N1ZSBoZWxpY29wdGVycyMyNS4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wMC4wMCNNaWxpdGFyeSBmaXhlZCB3aW5nIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAxLjAwI0JvbWJlciBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wMi4wMCNGaWdodGVyIGJvbWJlciBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wMy4wMCNGaWdodGVyIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA0LjAwI0F0dGFjayBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wNS4wMCNUYXJnZXQgb3IgcmVjb25uYWlzc2FuY2UgZHJvbmVzIzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA2LjAwI01pbGl0YXJ5IHNlYXBsYW5lcyMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wNy4wMCNSZWNvbm5haXNzYW5jZSBvciBzdXJ2ZWlsbGFuY2UgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDguMDAjQW50aSBzdWJtYXJpbmUgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDkuMDAjTWlsaXRhcnkgdHJhbnNwb3J0IGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE4LjAwLjAwI1NwZWNpYWx0eSBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOC4wMS4wMCNBaXJzaGlwcyMyNS4xMy4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wMC4wMCNNaWxpdGFyeSByb3Rhcnkgd2luZyBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wMi4wMCNNaWxpdGFyeSB0cmFuc3BvcnQgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDMuMDAjQXR0YWNrIGhlbGljb3B0ZXJzIzI1LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjA0LjAwI1JlY29ubmFpc3NhbmNlIGhlbGljb3B0ZXJzIzI1LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjA1LjAwI0FudGkgc3VibWFyaW5lIGhlbGljb3B0ZXJzIzI1LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjA2LjAwI1RpbHQgcm90b3Igd2luZyBhaXJjcmFmdCMyNS4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wMC4wMCNSZWNyZWF0aW9uYWwgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDEuMDAjSGFuZyBnbGlkZXJzIzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjAyLjAwI0hvdCBhaXIgYmFsbG9vbnMjMjUuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDMuMDAjR2xpZGVycyMyNS4xMy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wNC4wMCNQYXJhZ2xpZGVycyMyNS4xMy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wNS4wMCNVbHRyYSBsaWdodCBhaXJjcmFmdCMyNS4xMy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMS4wMC4wMCNBaXJjcmFmdCBtYW5hZ2VtZW50IHNlcnZpY2VzIzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIxLjAxLjAwI0FpcmNyYWZ0IHBpbG90cyMyNS4xMy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMS4wMi4wMCNBaXJjcmFmdCBtYWludGVuYW5jZSBvciBzZXJ2aWNlcyMyNS4xMy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNS4wMC4wMC4wMCNTcGFjZWNyYWZ0IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjE1LjE1LjAwLjAwI1NwYWNlc2hpcHMjMjUuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTUuMDEuMDAjTWFubmVkIHNwYWNlY3JhZnQjMjUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTUuMDIuMDAjU3BhY2VjcmFmdCBzdHJ1Y3R1cmVzIzI1LjE1LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjAwLjAwI1NhdGVsbGl0ZXMjMjUuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDEuMDAjQ29tbXVuaWNhdGlvbiBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjAyLjAwI1dlYXRoZXIgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wMy4wMCNNaWxpdGFyeSBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA0LjAwI1NjaWVudGlmaWMgb3IgcmVzZWFyY2ggc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wNS4wMCNOYXZpZ2F0aW9uIHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDYuMDAjR2Vvc3RhdGlvbmFyeSBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA3LjAwI0xvdyBlYXJ0aCBvcmJpdCBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA4LjAwI1N1biBzeW5jaHJvbm91cyBvcmJpdCBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA5LjAwI0dlb3N5bmNocm9ub3VzIHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMDAuMDAuMDAjTm9uIG1vdG9yaXplZCBjeWNsZXMjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDAuMDAjUGVkYWwgcG93ZXJlZCB2ZWhpY2xlcyMyNS4xNi4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wMS4wMCNUb3VyaW5nIGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjAyLjAwI1VuaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wMy4wMCNUcmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDQuMDAjVGFuZGVtIGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA1LjAwI01vdW50YWluIGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA2LjAwI1JhY2luZyBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wNy4wMCNCaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wOC4wMCNSZWN1bWJlbnQgYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDkuMDAjQ2hpbGRyZW5zIGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjAwLjAwLjAwI1RyYW5zcG9ydGF0aW9uIGNvbXBvbmVudHMgYW5kIHN5c3RlbXMjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDAuMDAjV2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDEuMDAjQWlyY3JhZnQgd2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDIuMDAjQXV0b21vdGl2ZSB3aW5kc2hpZWxkIHdpcGVycyMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMy4wMCNMb2NvbW90aXZlIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjA0LjAwI01hcmluZSB3aW5kc2hpZWxkIHdpcGVycyMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wNS4wMCNUcnVjayB3aW5kc2hpZWxkIHdpcGVycyMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wNi4wMCNXaW5kc2hpZWxkIHdpcGVyIHB1bXAjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTYuMDAuMDAjRGVmcm9zdGluZyBhbmQgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTYuMDEuMDAjQWlyY3JhZnQgb25ib2FyZCBkZWZyb3N0aW5nIG9yIGRlZm9nZ2luZyBzeXN0ZW1zIzI1LjE3LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE2LjAyLjAwI0F1dG9tb3RpdmUgZGVmcm9zdGluZyBvciBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4xNy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNi4wMy4wMCNUcmFpbiBkZWZyb3N0aW5nIG9yIGRlZm9nZ2luZyBzeXN0ZW1zIzI1LjE3LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjAwLjAwI0JyYWtpbmcgc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wMS4wMCNBaXJjcmFmdCBicmFraW5nIHN5c3RlbXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDIuMDAjQXV0b21vdGl2ZSBicmFraW5nIHN5c3RlbXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDMuMDAjVHJhaW4gYnJha2luZyBzeXN0ZW1zIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA0LjAwI0RyYWcgY2h1dGVzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA1LjAwI1JvdG9ycyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wNi4wMCNCcmFrZSBjYWxpcGVycyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wNy4wMCNEcnVtIGJyYWtlIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA4LjAwI0Rpc2MgYnJha2UjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDkuMDAjTGlxdWlkIGNvb2xlZCBicmFrZSMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xMC4wMCNNYXN0ZXIgY3lsaW5kYXJzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjExLjAwI1NsYXZlIGN5bGluZGVycyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xMi4wMCNEcnVtIGJyYWtlIHNob2VzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjEzLjAwI0Rpc2MgYnJha2UgcGFkcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xNC4wMCNCcmFrZSBkcnVtIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjE1LjAwI0Rpc2MgYnJha2Ugcm90b3JzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjE2LjAwI0JyYWtlIGxpbmVzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjAwLjAwI1doZWVscyBhbmQgd2hlZWwgdHJpbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDEuMDAjQXV0b21vYmlsZSByaW1zIG9yIHdoZWVscyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wMi4wMCNUcmFpbiB3aGVlbHMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDMuMDAjVHJ1Y2sgcmltcyBvciB3aGVlbHMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDQuMDAjQWlyY3JhZnQgd2hlZWxzIzI1LjE3LjE5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjA1LjAwI1RpcmUgdmFsdmVzIzI1LjE3LjE5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjAwLjAwI1N1c3BlbnNpb24gc3lzdGVtIGNvbXBvbmVudHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDEuMDAjQXV0b21vYmlsZSBzdXNwZW5zaW9uIHN5c3RlbXMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDIuMDAjVHJ1Y2sgc3VzcGVuc2lvbiBzeXN0ZW1zIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjAzLjAwI1RydWNrIHNob2NrIGFic29yYmVycyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wNC4wMCNBdXRvbW9iaWxlIHNob2NrIGFic29yYmVycyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wNS4wMCNUcmFpbiBzdXNwZW5zaW9uIHN5c3RlbXMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDYuMDAjU3RlZXJpbmcgc3lzdGVtcyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wNy4wMCNTdHJ1dHMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDguMDAjQmFsbCBqb2ludHMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDkuMDAjQXV0b21vdGl2ZSBidXNoaW5ncyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4xMC4wMCNTd2F5IGJhcnMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMTEuMDAjU2hvY2sgYWJzb3JiZXIjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDAuMDAjVmVoaWNsZSBzYWZldHkgc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wMS4wMCNBaXJiYWdzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjAyLjAwI0FpcmNyYWZ0IGxhcGJlbHRzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjAzLjAwI0FpcmNyYWZ0IGhhcm5lc3MgcmVzdHJhaW50cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wNC4wMCNTZWF0YmVsdHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDUuMDAjQ29sbGlzaW9uIGF2b2lkYW5jZSBzeXN0ZW1zIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjA2LjAwI0ltcGFjdCBzZW5zaW5nIHN5c3RlbXMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDcuMDAjQXV0b21vdGl2ZSBzZWF0YmVsdHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDguMDAjSGVhZCByZXN0cmFpbnRzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjAwLjAwI1ZlaGljbGUgZG9vcnMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDEuMDAjUmVtb3ZhYmxlIGF1dG9tb3RpdmUgZG9vcnMjMjUuMTcuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDIuMDAjQWlyY3JhZnQgZG9vcnMjMjUuMTcuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDMuMDAjQXV0b21vdGl2ZSBkb29ycyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wNC4wMCNSb2xsIHVwIHRydWNrIGRvb3JzIzI1LjE3LjIyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjA1LjAwI1RhaWxnYXRlcyBvciBsaWZ0Z2F0ZXMjMjUuMTcuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDAuMDAjVmVoaWNsZSB3aW5kb3dzIGFuZCB3aW5kc2hpZWxkcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wMS4wMCNBdXRvbW90aXZlIHdpbmRzaGllbGRzIzI1LjE3LjIzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIzLjAyLjAwI0FpcmNyYWZ0IHdpbmRvd3MjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDMuMDAjQXV0b21vdGl2ZSB3aW5kb3dzIzI1LjE3LjIzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIzLjA0LjAwI0FpcmNyYWZ0IHdpbmRzaGllbGRzIzI1LjE3LjIzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjAwLjAwI0Z1ZWwgdGFua3MgYW5kIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDEuMDAjQWlyY3JhZnQgaW50ZXJuYWwgZnVlbCB0YW5rcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wMi4wMCNBaXJjcmFmdCBmdWVsIGRyb3AgdGFua3MjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDMuMDAjQWlyY3JhZnQgcHJvcGVsbGVudCB0YW5rcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wNC4wMCNIeWJyaWQgZnVlbCBzdG9yYWdlIHN5c3RlbXMjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDUuMDAjRnVlbCBpbmplY3Rpb24gc3lzdGVtcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wNi4wMCNGdWVsIHRhbmtzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA3LjAwI0JyZWF0aGVyIGVsZW1lbnRzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA4LjAwI0Z1ZWwgb3Igb2lsIGNhcHMjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDAuMDAjVGlyZXMgYW5kIHRpcmUgdHViZXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDEuMDAjQWlyY3JhZnQgdGlyZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDIuMDAjQXV0b21vYmlsZSB0aXJlIHR1YmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjAzLjAwI0hlYXZ5IHRydWNrIHRpcmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA0LjAwI0F1dG9tb2JpbGUgb3IgbGlnaHQgdHJ1Y2sgdGlyZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDUuMDAjQmljeWNsZSB0dWJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wNi4wMCNCaWN5Y2xlIHRpcmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA3LjAwI1RpcmUgY29yZCMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wOC4wMCNUaXJlIHRyZWFkcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wMC4wMCNWZWhpY2xlIHRyaW0gYW5kIGV4dGVyaW9yIGNvdmVyaW5nIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjAxLjAwI0F1dG9tb3RpdmUgdHJpbSMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wMi4wMCNBdXRvbW90aXZlIGZlbmRlcnMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDMuMDAjVmVoaWNsZSBidW1wZXJzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA0LjAwI1ZlaGljbGUgbWlycm9ycyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wNS4wMCNWZWhpY2xlIGdyaWxsZXMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDYuMDAjVmVoaWNsZSBob29kcyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wNy4wMCNWZWhpY2xlIHNpZGUgcGFuZWxzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA4LjAwI0Zhc2NpYXMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjcuMDAuMDAjRW52aXJvbm1lbnRhbCBjb250cm9sIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjcuMDEuMDAjQWlyY3JhZnQgZW52aXJvbm1lbnRhbCBjb250cm9sIHN5c3RlbXMjMjUuMTcuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjcuMDIuMDAjU3BhY2UgZW52aXJvbm1lbnRhbCBjb250cm9sIHN5c3RlbXMjMjUuMTcuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjcuMDMuMDAjTWFyaW5lIGVudmlyb25tZW50YWwgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjI3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI3LjA0LjAwI1ZlaGljbGUgY2xpbWF0ZSBjb250cm9sIHN5c3RlbXMjMjUuMTcuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjguMDAuMDAjSHlkcmF1bGljIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjguMDEuMDAjQWlyY3JhZnQgaHlkcmF1bGljIHN5c3RlbXMjMjUuMTcuMjguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjguMDIuMDAjQXV0b21vdGl2ZSBoeWRyYXVsaWMgc3lzdGVtcyMyNS4xNy4yOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMy4wMCNNYXJpbmUgaHlkcmF1bGljIHN5c3RlbXMjMjUuMTcuMjguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDAuMDAjRXh0ZXJpb3IgdmVoaWNsZSBsaWdodGluZyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wMS4wMCNFeHRlcmlvciBhdXRvbW9iaWxlIGxpZ2h0aW5nIzI1LjE3LjI5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjAyLjAwI0V4dGVyaW9yIGFpcmNyYWZ0IGxpZ2h0aW5nIzI1LjE3LjI5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjAzLjAwI0V4dGVyaW9yIHJhaWxjYXIgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDQuMDAjRXh0ZXJpb3Igc2hpcCBvciBib2F0IGxpZ2h0aW5nIzI1LjE3LjI5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjA1LjAwI0hlYWRsYW1wIHdpcGVyIG9yIHdhc2hlciBzeXN0ZW1zIzI1LjE3LjI5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjA2LjAwI1JlZmxlY3RvcnMjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDAuMDAjSW50ZXJpb3IgdmVoaWNsZSBsaWdodGluZyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wMS4wMCNJbnRlcmlvciBhdXRvbW9iaWxlIGxpZ2h0aW5nIzI1LjE3LjMwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjAyLjAwI0ludGVyaW9yIGFpcmNyYWZ0IGxpZ2h0aW5nIzI1LjE3LjMwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjAzLjAwI0ludGVyaW9yIHJhaWxjYXIgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDQuMDAjSW50ZXJpb3Igc2hpcCBvciBib2F0IGxpZ2h0aW5nIzI1LjE3LjMwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjA1LjAwI0xpZ2h0IHBsYXRlIGFzc2VtYmxpZXMjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDAuMDAjTG9jYXRpb24gYW5kIG5hdmlnYXRpb24gc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wMS4wMCNBaXJjcmFmdCBkaWdpdGFsIGFsdGl0dWRlIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wMi4wMCNBaXJjcmFmdCBuYXZpZ2F0aW9uIGJlYWNvbnMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDMuMDAjVGVycmFpbiBmb2xsb3dpbmcgc3lzdGVtcyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wNC4wMCNBaXJjcmFmdCBndWlkYW5jZSBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjA1LjAwI0FpcmNyYWZ0IHN0ZWVyaW5nIGNvbnRyb2xzIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjA2LjAwI1NwYWNlY3JhZnQgYXR0aXR1ZGUgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjA3LjAwI1ZlaGljdWxhciBnbG9iYWwgcG9zaXRpb25pbmcgc3lzdGVtcyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wMC4wMCNDb21tdW5pY2F0aW9ucyByZWxhdGVkIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDEuMDAjQWlyY3JhZnQgY29tbXVuaWNhdGlvbiBzeXN0ZW1zIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjAyLjAwI0ZsaWdodCByZWNvcmRlcnMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDMuMDAjQWlyY3JhZnQgY291bnRlcm1lYXN1cmVzIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjA0LjAwI0FpcmNyYWZ0IGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiBzeXN0ZW1zIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjA1LjAwI0FpcmNyYWZ0IHRlbGVtZXRyeSBzeXN0ZW1zIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjA2LjAwI0FpcmNyYWZ0IGludGVyZmFjZSBlbGVjdHJvbmljcyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMy4wMC4wMCNNYXN0ZXIgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjAxLjAwI0ZsaWdodCBjb21wdXRlciBzeXN0ZW1zIzI1LjE3LjMzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjAyLjAwI1NwYWNlY3JhZnQgY29tbWFuZCBtb2R1bGVzIzI1LjE3LjMzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjAzLjAwI0F1dG9tb3RpdmUgY29tcHV0ZXIgc3lzdGVtcyMyNS4xNy4zMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMy4wNC4wMCNFbGVjdHJvbmljIGlnbml0aW9uIHN5c3RlbXMjMjUuMTcuMzMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzQuMDAuMDAjVmVoaWNsZSBlbWVyZ2VuY3kgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNC4wMS4wMCNBaXJjcmFmdCBmaXJlIGNvbnRyb2wgb3IgZXh0aW5ndWlzaGluZyBzeXN0ZW1zIzI1LjE3LjM0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM0LjAyLjAwI0FpcmNyYWZ0IGVzY2FwZSBvciBlamVjdGlvbiBzeXN0ZW1zIzI1LjE3LjM0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM0LjAzLjAwI0FpcmNyYWZ0IHdhcm5pbmcgc3lzdGVtcyMyNS4xNy4zNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNS4wMC4wMCNWZWhpY2xlIHBvd2VyIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzUuMDEuMDAjU3BhY2VjcmFmdCBzb2xhciBjZWxscyMyNS4xNy4zNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNS4wMi4wMCNTcGFjZWNyYWZ0IHNvbGFyIGFycmF5cyMyNS4xNy4zNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNi4wMC4wMCNWZWhpY2xlIGluc3RydW1lbnRhdGlvbiMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNi4wMS4wMCNBaXJjcmFmdCBjb2NrcGl0IGRpc3BsYXlzIzI1LjE3LjM2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM3LjAwLjAwI0V4aGF1c3QgYW5kIGVtaXNzaW9uIGNvbnRyb2xzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM3LjAxLjAwI0NhdGFseXRpYyBjb252ZXJ0ZXJzIzI1LjE3LjM3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM3LjAyLjAwI011ZmZsZXJzIzI1LjE3LjM3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM3LjAzLjAwI0V4aGF1c3QgbWFuaWZvbGRzIzI1LjE3LjM3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjAwLjAwI0RyaXZldHJhaW4gc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wMS4wMCNEcml2aW5nIGF4bGVzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjAyLjAwI05vbiBkcml2aW5nIGF4bGVzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjAzLjAwI0F4bGUgaG91c2luZ3MjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDQuMDAjQXhsZSBzcGluZGxlcyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wNS4wMCNEaWZmZXJlbnRpYWxzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA2LjAwI0NvbnN0YW50IHZlbG9jaXR5IGpvaW50cyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wNy4wMCNBeGxlIHNoYWZ0cyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wOC4wMCNBeGxlIHJlcGFpciBraXRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA5LjAwI0F4bGUgaHVicyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xMC4wMCNVbml2ZXJzYWwgam9pbnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjExLjAwI0RyaXZlIHNoYWZ0cyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xMi4wMCNNYW51YWwgdHJhbnNtaXNzaW9ucyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xMy4wMCNBdXRvbWF0aWMgdHJhbnNtaXNzaW9ucyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xNC4wMCNQb3dlciB0YWtlIG9mZnMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTUuMDAjQ2x1dGNoIGNhYmxlcyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xNi4wMCNIeWRyYXVsaWMgY2x1dGNoIHBhcnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjE3LjAwI0RyaXZldHJhaW4gY2hhaW5zIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM5LjAwLjAwI0VsZWN0cmljYWwgY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOS4wMS4wMCNJZ25pdGlvbiMyNS4xNy4zOS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wMC4wMCNFbmdpbmUgY29vbGFudCBzeXN0ZW0jMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDEuMDAjRmFuIzI1LjE3LjQwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQwLjAyLjAwI1ZlaGljbGUgcmFkaWF0b3JzIzI1LjE3LjQwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQwLjAzLjAwI1JhZGlhdG9yIGNhcHMjMjUuMTcuNDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDQuMDAjRW5naW5lIGNvb2xhbnQjMjUuMTcuNDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDAuMDAjUm9vZiBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjAxLjAwI0VtZXJnZW5jeSB2ZWhpY2xlIGV4aXRzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjAyLjAwI1Blcm1hbmVudCBjb252ZXJ0aWJsZSByb29mIHRvcHMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDMuMDAjUmVtb3ZhYmxlIGhhcmQgcm9vZiB0b3BzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjA0LjAwI1JlbW92YWJsZSBzb2Z0IHJvb2YgdG9wcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wNS4wMCNSb29mIHJhY2sgc3lzdGVtcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wNi4wMCNTdW5yb29mcyBvciBtb29ucm9vZnMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDcuMDAjV2luZCBkZWZsZWN0b3JzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjAwLjAwI1N0ZWVyaW5nIHN5c3RlbSMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wMS4wMCNTdGVlcmluZyBzYWNrcyMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wMi4wMCNTdGVlcmluZyBzdXNwZW5zaW9uIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjAzLjAwI0JhbGwgam9pbnQjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDQuMDAjUG93ZXIgc3RlZXJpbmcgc3lzdGVtIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA1LjAwI1RpZSBSb2RzIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA2LjAwI0RyYWcgbGluayMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wNy4wMCNTdGVlcmluZyBsaW5rYWdlIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA4LjAwI0h1YmxvY2sjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDkuMDAjUGluaW9ucyMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4xMC4wMCNQb3dlciBzdGVlcmluZyB0dW5pbmcgY2FibGUjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDMuMDAuMDAjVmVoaWNsZSBleGhhdXN0IHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDMuMDEuMDAjQ2F0YWx5dGljIGNvbnZlcnRlcnMjMjUuMTcuNDMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDMuMDIuMDAjTXVmZmxlcnMgb3IgcmVzb25hdG9ycyMyNS4xNy40My4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wMC4wMCNWZWhpY2xlIGludGVyaW9yIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDEuMDAjQmV6ZWxzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjAyLjAwI0NvbnNvbGVzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjAzLjAwI0Rvb3IgcGFuZWxzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA0LjAwI0hlYWRsaW5lcnMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDUuMDAjSW5zdHJ1bWVudCBjbHVzdGVycyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wNi4wMCNJbnN0cnVtZW50IHBhbmVscyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wNy4wMCNQZWRhbHMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDguMDAjUG93ZXIgcG9ydHMgb3IgbGlnaHRlcnMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDkuMDAjU3VuIHZpc29ycyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wMC4wMCNWZWhpY2xlIHNhZmV0eSBhbmQgc2VjdXJpdHkgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wMS4wMCNBaXIgYmFnIHByb3BlbGxhbnQgY2FuaXN0ZXJzIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjAyLjAwI0FpciBiYWdzIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjAzLjAwI1ZlaGljbGUgaG9ybnMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDQuMDAjUmVtb3RlIGxvY2tpbmcgc3lzdGVtIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA1LjAwI1ZlaGljbGUgc3RhYmlsaXR5IGNvbnRyb2wgc3lzdGVtcyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wNi4wMCNWZWhpY2xlIHRyYWN0aW9uIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wNy4wMCNWZWhpY2xlIG5hdmlnYXRpb24gc3lzdGVtcyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wOC4wMCNXaGVlbCBjbGFtcHMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDYuMDAuMDAjVmVoaWNsZSBzZWF0aW5nIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDYuMDEuMDAjU2VhdCBjb3ZlcnMjMjUuMTcuNDYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDYuMDIuMDAjU2VhdCBjdXNoaW9ucyBvciBib2xzdGVycyMyNS4xNy40Ni4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMy4wMCNTZWF0IGZyYW1lcyMyNS4xNy40Ni4wMC4wMAotdW5zcHNjNyMyNS4xOC4wMC4wMC4wMCNWZWhpY2xlIGJvZGllcyBhbmQgdHJhaWxlcnMjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDAuMDAjQWlyY3JhZnQgZnVzZWxhZ2UgYW5kIGNvbXBvbmVudHMjMjUuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDEuMDAjQWlyY3JhZnQgc3BvaWxlcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDIuMDAjQWlyY3JhZnQgZmlucyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMy4wMCNBaXJjcmFmdCBob3Jpem9udGFsIHN0YWJpbGl6ZXJzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA0LjAwI0FpcmNyYWZ0IGNhbmFyZHMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDUuMDAjQWlyY3JhZnQgc2xhdHMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDYuMDAjQWlyY3JhZnQgZmxhcHMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDcuMDAjQWlyY3JhZnQgcnVkZGVycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wOC4wMCNBaXJjcmFmdCBlbGV2YXRvcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDkuMDAjQWlyY3JhZnQgYWlsZXJvbnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTAuMDAjQWlyY3JhZnQgcHJvcGVsbGVyIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjExLjAwI0FpcmNyYWZ0IHdpbmdzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjEyLjAwI0FpcmNyYWZ0IGZ1c2VsYWdlIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjEzLjAwI0FpcmNyYWZ0IHJhZG9tZXMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTQuMDAjQWlyY3JhZnQgcm90b3JzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjE1LjAwI0FpcmNyYWZ0IGxpZnQgZmFucyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xNi4wMCNBaXJjcmFmdCBjYW5vcGllcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xNy4wMCNBaXJjcmFmdCBmdXJuaXNoaW5ncyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wMC4wMCNBdXRvbW90aXZlIGNoYXNzaXMjMjUuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTYuMDEuMDAjQXV0b21vYmlsZSBjaGFzc2lzIzI1LjE4LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE2LjAyLjAwI1RydWNrIGNoYXNzaXMjMjUuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTYuMDMuMDAjTW90b3JjeWNsZSBmcmFtZXMjMjUuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTYuMDQuMDAjVHJ1Y2sgY2hhc3NpcyMyNS4xOC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wMC4wMCNQcm9kdWN0IGFuZCBtYXRlcmlhbCB0cmFpbGVycyMyNS4xOC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wMS4wMCNDb250YWluZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDIuMDAjRmxhdGJlZCB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wMy4wMCNMaXZlc3RvY2sgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDQuMDAjTm9uIHRlbXBlcmF0dXJlIGNvbnRyb2xsZWQgdGFua2VyIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA1LjAwI1RlbXBlcmF0dXJlIGNvbnRyb2xsZWQgdGFua2VyIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA2LjAwI1RlbXBlcmF0dXJlIGNvbnRyb2xsZWQgY29udGFpbmVyIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA3LjAwI0F1dG9tb2JpbGUgY2FycmllciB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wOC4wMCNUcmFpbGVyIGhpdGNoZXMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDkuMDAjU2tpcCBsb2FkZXIjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMTAuMDAjVHJhaWxlciBlbmQgcGxhdGVzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjExLjAwI1Nub3dtb2JpbGUgdHJhaWxlciMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4xMi4wMCNNb3RvcmN5Y2xlIHRyYWlsZXIjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMTMuMDAjQm9hdCBUcmFpbGVyIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE5LjAwLjAwLjAwI1RyYW5zcG9ydGF0aW9uIHNlcnZpY2VzIGVxdWlwbWVudCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wMC4wMCNBaXIgdHJhbnNwb3J0YXRpb24gc3VwcG9ydCBzeXN0ZW1zIGFuZCBlcXVpcG1lbnQjMjUuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDEuMDAjR3JvdW5kIHN1cHBvcnQgdHJhaW5pbmcgc3lzdGVtcyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wMi4wMCNHcm91bmQgc3VwcG9ydCB0ZXN0IG9yIG1haW50ZW5hbmNlIHN5c3RlbXMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDMuMDAjSW50ZWdyYXRlZCBtYWludGVuYW5jZSBpbmZvcm1hdGlvbiBzeXN0ZW1zIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA0LjAwI0FpcmNyYWZ0IGZsaWdodCBzaW11bGF0b3JzIG9yIHRyYWluZXJzIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA1LjAwI0FpcmNyYWZ0IGNhcmdvIGhhbmRsaW5nIGVxdWlwbWVudCMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wNi4wMCNBaXJjcmFmdCByZWZ1ZWxpbmcgZXF1aXBtZW50IzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA3LjAwI0FpcmNyYWZ0IGRlaWNpbmcgZXF1aXBtZW50IzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA4LjAwI0pldHdheXMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDkuMDAjQWlyY3JhZnQgcHVzaGJhY2sgb3IgdG93IHRyYWN0b3JzIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjEwLjAwI0dyb3VuZCBwb3dlciB1bml0cyBmb3IgYWlyY3JhZnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMTEuMDAjTGF2YXRvcnkgc2VydmljZSBlcXVpcG1lbnQgZm9yIGFpcmNyYWZ0IzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjEyLjAwI0FpcnN0YWlycyBvciBzdGFpciB0cnVja3MjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTYuMDAuMDAjU3BhY2UgdHJhbnNwb3J0YXRpb24gc3VwcG9ydCBzeXN0ZW1zIGFuZCBlcXVpcG1lbnQjMjUuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTYuMDEuMDAjU3BhY2VjcmFmdCBmbGlnaHQgc2ltdWxhdG9ycyMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMi4wMCNQYXlsb2FkIGRlbGl2ZXJ5IHN5c3RlbXMgZm9yIHNwYWNlY3JhZnQjMjUuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTYuMDMuMDAjTGlxdWlkIGxhdW5jaCB2ZWhpY2xlcyMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wNC4wMCNTb2xpZCBsYXVuY2ggdmVoaWNsZXMjMjUuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTYuMDUuMDAjU3BhY2VjcmFmdCBzZXJ2aWNlIG1vZHVsZXMjMjUuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDAuMDAjVmVoaWNsZSBzZXJ2aWNpbmcgZXF1aXBtZW50IzI1LjE5LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE5LjE3LjAxLjAwI1doZWVsIGJhbGFuY2luZyBlcXVpcG1lbnQjMjUuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDIuMDAjV2hlZWwgYWxpZ25tZW50IGVxdWlwbWVudCMyNS4xOS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wMy4wMCNUaXJlIGNoYW5naW5nIG1hY2hpbmVzIzI1LjE5LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE3LjA0LjAwI0VuZ2luZSBvciB2ZWhpY2xlIHN0YW5kcyMyNS4xOS4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4wMC4wMC4wMCNBZXJvc3BhY2Ugc3lzdGVtcyBhbmQgY29tcG9uZW50cyBhbmQgZXF1aXBtZW50IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjAwLjAwI0FpcmNyYWZ0IGZ1c2VsYWdlIGFuZCBjb21wb25lbnRzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjAxLjAwI0FpcmNyYWZ0IHNwb2lsZXJzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjAyLjAwI0FpcmNyYWZ0IGZpbnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDMuMDAjQWlyY3JhZnQgaG9yaXpvbnRhbCBzdGFiaWxpemVycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wNC4wMCNBaXJjcmFmdCBjYW5hcmRzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA1LjAwI0FpcmNyYWZ0IHNsYXRzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA2LjAwI0FpcmNyYWZ0IGZsYXBzIG9yIGZsYXAgZHJpdmVzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA3LjAwI0FpcmNyYWZ0IHJ1ZGRlcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDguMDAjQWlyY3JhZnQgZWxldmF0b3JzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA5LjAwI0FpcmNyYWZ0IGFpbGVyb25zIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjEwLjAwI0FpcmNyYWZ0IHByb3BlbGxlcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTEuMDAjQWlyY3JhZnQgd2luZ3MjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTIuMDAjQWlyY3JhZnQgZnVzZWxhZ2VzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjEzLjAwI0FpcmNyYWZ0IHJhZG9tZXMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTQuMDAjQWlyY3JhZnQgcm90b3JzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjE1LjAwI0FpcmNyYWZ0IGxpZnQgZmFucyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xNi4wMCNBaXJjcmFmdCBjYW5vcGllcyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xNy4wMCNBaXJjcmFmdCBmdXJuaXNoaW5ncyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wMC4wMCNBZXJvc3BhY2UgbG9jYXRpb24gYW5kIG5hdmlnYXRpb24gc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wMS4wMCNBaXJjcmFmdCBkaWdpdGFsIGFsdGl0dWRlIGNvbnRyb2wgc3lzdGVtcyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wMi4wMCNBaXJjcmFmdCBuYXZpZ2F0aW9uIGJlYWNvbnMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDMuMDAjQWlyIHRvIGdyb3VuZCB0ZXJyYWluIGZvbGxvd2luZyBzeXN0ZW1zIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjA0LjAwI0FpcmNyYWZ0IGd1aWRhbmNlIHN5c3RlbXMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDUuMDAjQWlyY3JhZnQgc3RlZXJpbmcgY29udHJvbHMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDYuMDAjU3BhY2VjcmFmdCBhbHRpdHVkZSBjb250cm9sIHN5c3RlbXMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDAuMDAjRmxpZ2h0IGNvbW11bmljYXRpb25zIHJlbGF0ZWQgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wMS4wMCNBaXJjcmFmdCBjb21tdW5pY2F0aW9uIHN5c3RlbXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDIuMDAjRmxpZ2h0IGRhdGEgcmVjb3JkZXJzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjAzLjAwI0FpcmNyYWZ0IGNvdW50ZXJtZWFzdXJlcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wNC4wMCNFbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gc3lzdGVtcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wNS4wMCNBaXJjcmFmdCB0ZWxlbWV0cnkgc3lzdGVtcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wNi4wMCNBaXJjcmFmdCBpbnRlcmZhY2UgZWxlY3Ryb25pY3MjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDcuMDAjQWlyY3JhZnQgZ3lyb3MjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDguMDAjQWlyY3JhZnQgY2FtZXJhcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wOS4wMCNBaXJjcmFmdCBwcm9iZXMgb3Igc2Vuc29ycyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4xMC4wMCNBaXJjcmFmdCB3YXZlZ3VpZGVzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE4LjAwLjAwI0FpcmNyYWZ0IG1hc3RlciBjb250cm9sIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTguMDEuMDAjRmxpZ2h0IGNvbXB1dGVyIHN5c3RlbXMjMjUuMjAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTguMDIuMDAjU3BhY2VjcmFmdCBjb21tYW5kIG1vZHVsZXMjMjUuMjAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTkuMDAuMDAjQWlyY3JhZnQgZW1lcmdlbmN5IHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTkuMDEuMDAjQWlyY3JhZnQgZmlyZSBjb250cm9sIG9yIGV4dGluZ3Vpc2hpbmcgc3lzdGVtcyMyNS4yMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wMi4wMCNBaXJjcmFmdCBlc2NhcGUgb3IgZWplY3Rpb24gc3lzdGVtcyMyNS4yMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wMy4wMCNBaXJjcmFmdCB3YXJuaW5nIHN5c3RlbXMjMjUuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTkuMDQuMDAjUGFyYWNodXRlcyMyNS4yMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wMC4wMCNBaXJjcmFmdCBwb3dlciBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIwLjAxLjAwI1NwYWNlY3JhZnQgc29sYXIgY2VsbHMjMjUuMjAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDIuMDAjU3BhY2VjcmFmdCBzb2xhciBhcnJheXMjMjUuMjAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDMuMDAjQWlyY3JhZnQgcG93ZXIgc3VwcGx5IHVuaXRzIzI1LjIwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIwLjA0LjAwI0F1eGlsbGlhcnkgcG93ZXIgdW5pdCBzeXN0ZW1zIChBUFVzKSMyNS4yMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wMC4wMCNGbGlnaHQgaW5zdHJ1bWVudGF0aW9uIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjAxLjAwI0Flcm9zcGFjZSBjb2NrcGl0IGluZGljYXRvcnMjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDIuMDAjQWVyb3NwYWNlIGNvY2twaXQgZ2F1Z2VzIzI1LjIwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjAzLjAwI0Flcm9zcGFjZSBjb2NrcGl0IGRpc3BsYXkgcGFuZWxzIzI1LjIwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjA0LjAwI0Flcm9zcGFjZSBjb2NrcGl0IHN3aXRjaCBwYW5lbHMjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDUuMDAjQWVyb3NwYWNlIGhlYWQgdXAgZGlzcGxheSAoSFVEcykjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDAuMDAjQWlyY3JhZnQgbGFuZGluZyBhbmQgYnJha2luZyBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjAxLjAwI0FpcmNyYWZ0IGJyYWtpbmcgc3lzdGVtcyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wMi4wMCNBaXJjcmFmdCBkcmFnIGNodXRlcyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wMy4wMCNBaXJjcmFmdCB3aGVlbHMjMjUuMjAuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDQuMDAjTGFuZGluZyBnZWFyIGFzc2VtYmxpZXMjMjUuMjAuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDUuMDAjQWlyY3JhZnQgdGlyZXMjMjUuMjAuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDYuMDAjQWljcmFmdCBhbnRpIHNraWQgY29udHJvbHMjMjUuMjAuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjMuMDAuMDAjQWlyY3JhZnQgcGFzc2VuZ2VyIHJlc3RyYWludHMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjMuMDEuMDAjQWlyY3JhZnQgbGFwYmVsdHMjMjUuMjAuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjMuMDIuMDAjQWlyY3JhZnQgaGFybmVzcyByZXN0cmFpbnRzIzI1LjIwLjIzLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjAwLjAwI0FpcmNyYWZ0IGZ1ZWwgdGFua3MgYW5kIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDEuMDAjQWlyY3JhZnQgaW50ZXJuYWwgZnVlbCB0YW5rcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wMi4wMCNBaXJjcmFmdCBmdWVsIGRyb3AgdGFua3MjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDMuMDAjQWlyY3JhZnQgcHJvcGVsbGFudCB0YW5rcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wNC4wMCNBaXJjcmFmdCBoeWJyaWQgZnVlbCBzdG9yYWdlIHN5c3RlbXMjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDUuMDAjQWlyY3JhZnQgZnVlbCBtYW5hZ2VtZW50IHN5c3RlbXMjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDYuMDAjUG9zdGJvb3N0ZXJzIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAwLjAwI0FpcmNyYWZ0IGVxdWlwbWVudCMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wMS4wMCNBaXJjcmFmdCBoeWRyYXVsaWMgc3lzdGVtcyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wMi4wMCNFeHRlcmlvciBhaXJjcmFmdCBsaWdodGluZyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wMy4wMCNJbnRlcmlvciBhaXJjcmFmdCBsaWdodGluZyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wNC4wMCNBaXJjcmFmdCB3aW5kc2hpZWxkIHdpcGVycyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wNS4wMCNBaXJjcmFmdCBvbmJvYXJkIGRlZnJvc3Rpbmcgb3IgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDYuMDAjQWlyY3JhZnQgZG9vcnMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDcuMDAjQWlyY3JhZnQgd2luZG93cyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wOC4wMCNBaXJjcmFmdCB3aW5kc2hpZWxkcyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wOS4wMCNBaXJjcmFmdCBzaG9jayBtb3VudHMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMTAuMDAjQWlyY3JhZnQgc2xpcCByaW5nIGFzc2VtYmxpZXMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDAuMDAjQWlyY3JhZnQgZW52aXJvbm1lbnRhbCBjb250cm9sIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDEuMDAjQWlyY3JhZnQgZW52aXJvbm1lbnQgY29udHJvbGxlcnMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDIuMDAjQWlyY3JhZnQgZW52aXJvbm1lbnQgcmVndWxhdG9ycyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMy4wMCNBaXJjcmFmdCBjb29saW5nIHR1cmJpbmVzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjA0LjAwI0FpcmNyYWZ0IGNvb2xpbmcgZmFucyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wNS4wMCNBaXJjcmFmdCBoZWF0IGV4Y2hhbmdlcnMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDYuMDAjQWlyY3JhZnQgd2F0ZXIgc2VwYXJhdG9ycyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wNy4wMCNBaXJjcmFmdCBveHlnZW4gZXF1aXBtZW50IzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI3LjAwLjAwI0FpcmNyYWZ0IGFjY3VtdWxhdG9ycyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNy4wMS4wMCNIeWRyYXVsaWMgYWlyY3JhZnQgYWNjdW11bGF0b3JzIzI1LjIwLjI3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI3LjAyLjAwI1BuZXVtYXRpYyBhaXJjcmFmdCBhY2N1bXVsYXRvcnMjMjUuMjAuMjcuMDAuMDAKLXVuc3BzYzcjMjYuMDAuMDAuMDAuMDAjUG93ZXIgR2VuZXJhdGlvbiBhbmQgRGlzdHJpYnV0aW9uIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMDAuMDAuMDAjUG93ZXIgc291cmNlcyMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wMC4wMCNFbmdpbmVzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjAxLjAwI0h5ZHJhdWxpYyBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjAyLjAwI1BuZXVtYXRpYyBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjAzLjAwI0dhcyBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjA0LjAwI0RpZXNlbCBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjA1LjAwI1N0ZWFtIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDYuMDAjVHVyYmluZSBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjA3LjAwI1R1cmJvZmFuIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDguMDAjVGhlcm1hbCBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjA5LjAwI0h5ZHJvZWxlY3RyaWMgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4xMC4wMCNSb3RhcnkgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4xMS4wMCNIeWRyYXVsaWMgdHVyYmluZSBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjEyLjAwI1R1cmJvcHJvcCBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjEzLjAwI0VuZ2luZSBSZXBhaXIgS2l0IzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjAwLjAwI01vdG9ycyMyNi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wMS4wMCNJbmR1Y3Rpb24gbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjAyLjAwI0FsdGVybmF0aW5nIGN1cnJlbnQgKEFDKSBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDMuMDAjRGlyZWN0IGN1cnJlbnQgKERDKSBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDQuMDAjQWx0ZXJuYXRpbmcgY3VycmVudCBvciBkaXJlY3QgY3VycmVudCAoQUMvREMpIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wNS4wMCNEeW5hbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA2LjAwI1NlcnZvbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA3LjAwI1RvcnF1ZSBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDguMDAjTGlxdWlkIHJvY2tldCBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDkuMDAjU3luY2hyb25vdXMgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjEwLjAwI1NvbGlkIHJvY2tldCBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTEuMDAjU2luZ2xlIHBoYXNlIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xMi4wMCNNdWx0aSBwaGFzZSBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTMuMDAjSHlkcmF1bGljIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xNC4wMCNTdGVwIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xNS4wMCNBbHRlcm5hdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xNi4wMCNDYXJib24gQnJ1c2hlcyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wMC4wMCNFbmdpbmUgY29tcG9uZW50cyMyNi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wMS4wMCNBaXJjcmFmdCBidXJuZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAyLjAwI0FpcmNyYWZ0IGVuZ2luZSBjb21wcmVzc29ycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wMy4wMCNBaXJjcmFmdCBlbmdpbmUgZGlmZnVzZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA0LjAwI0VuZ2luZSBtb3VudHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDUuMDAjQWlyY3JhZnQgZHJpdmUgc2hhZnRzIHBvd2VyIHRha2Ugb2ZmcyBvciBzY3JldyBqYWNrcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wNi4wMCNBaXJjcmFmdCB0cmFuc21pc3Npb24gdW5pdHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDcuMDAjQmFsYW5jZSBzaGFmdHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDguMDAjQ2FtIGZvbGxvd2VycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wOS4wMCNDYW1zaGFmdCBsaWZ0ZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjEwLjAwI0NhcmJ1cmV0b3JzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjExLjAwI0Nvbm5lY3Rpbmcgcm9kcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xMi4wMCNDcmFua2Nhc2UgdmVudGlsbGF0aW9uIHZhbHZlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xMy4wMCNDeWxpbmRlciBoZWFkcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xNC4wMCNFbmdpbmUgY29vbGFudCByYWRpYXRvcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTUuMDAjRW5naW5lIGNvdmVycyBvciBwYW5zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE2LjAwI0VuZ2luZSBmb3JnaW5ncyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xNy4wMCNFbmdpbmUgaGVhdGVycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xOC4wMCNFbmdpbmUgaWduaXRpb24gc3lzdGVtcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xOS4wMCNTdXBlcmNoYXJnZXIjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjAuMDAjVHVyYm9jaGFyZ2VyIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjIxLjAwI0VuZ2luZSBwdWxsZXlzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjIyLjAwI0Z1ZWwgaW5qZWN0aW9uIHN5c3RlbXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjMuMDAjRnVlbCB2YXBvciBjYW5pc3RlciMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yNC4wMCNHbG93IHBsdWdzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI1LjAwI09pbCBkaXAgc3RpY2tzIGFuZCB0dWJlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yNi4wMCNPaWwgc3RyYWluZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI3LjAwI1Bpc3RvbiByaW5ncyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yOC4wMCNQdXNoIHJvZCB0dWJlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yOS4wMCNSb2NrZXIgYXJtIGJhbGxzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjMwLjAwI1JvY2tlciBhcm0gc2hhZnRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjMxLjAwI1JvY2tlciBhcm1zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjMyLjAwI1NwYXJrIHBsdWdzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjMzLjAwI0NhcmJ1cmV0b3IgamV0IzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM0LjAwI0NhcmJ1cmV0b3IgZGlhcGhyYWdtcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zNS4wMCNPaWwgcGFuIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM2LjAwI1Bpc3RvbnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzcuMDAjVGltaW5nIGNoYWluIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM4LjAwI0ludGFrZSBtYW5pZm9sZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzkuMDAjRXhoYXVzdCBtYW5pZm9sZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDAuMDAjRnVlbCBpbmplY3RvcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDEuMDAjRW5naW5lIHNsZWV2ZXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDIuMDAjRnVlbCBpbmplY3Rpb24gbWFuaWZvbGRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQzLjAwI0VuZ2luZSB2YWx2ZXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDQuMDAjVHVyYm9jaGFyZ2VyIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ1LjAwI2NhbXNoYWZ0IzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ2LjAwI0N5bGluZGVyIGhlYWQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDcuMDAjUHVzaCByb2RzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ4LjAwI0VuZ2luZSBmbHl3aGVlbCMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40OS4wMCNDcmFua3NoYWZ0IzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjUwLjAwI1Rocm90dGxlIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjUxLjAwI0VsZWN0cm9uaWMgZW5naW5lIGNvbnRyb2xzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjUyLjAwI1ZpYnJhdGlvbiBkYW1wZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE4LjAwLjAwI01vdG9yIG9yIGdlbmVyYXRvciBjb21wb25lbnRzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE4LjAxLjAwI01vdG9yIGJydXNoZXMjMjYuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDIuMDAjQXJtYXR1cmVzIzI2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE4LjAzLjAwI1JvdG9ycyBvciBzdGF0b3JzIzI2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE4LjA0LjAwI01vdG9yIG1vdW50cyBvciBiYXNlcyMyNi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wMC4wMCNJbnRlcm5hbCBjb21idXN0aW9uIGVuZ2luZSBjb21wb25lbnRzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAxLjAwI0NyYW5rIHNoYWZ0cyMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wMi4wMCNTcGFyayBwbHVncyMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wMy4wMCNDYW1zaGFmdCMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wNC4wMCNGdWVsIGluamVjdGlvbiBub3p6bGUjMjYuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDUuMDAjQ3lsaW5kZXIgYmxvY2sjMjYuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMDAuMDAuMDAjQmF0dGVyaWVzIGFuZCBnZW5lcmF0b3JzIGFuZCBraW5ldGljIHBvd2VyIHRyYW5zbWlzc2lvbiMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wMC4wMCNLaW5ldGljIHBvd2VyIHRyYW5zbWlzc2lvbiMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wMS4wMCNDb21tdXRhdG9ycyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wMy4wMCNBZGp1c3RhYmxlIHNwZWVkIGRyaXZlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wNC4wMCNCZWx0IGRyaXZlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wNS4wMCNDaGFpbiBkcml2ZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDYuMDAjTGluZWFyIG1vdGlvbiBkZXZpY2VzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA3LjAwI0NsdXRjaGVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA4LjAwI1Bvd2VyIHRha2Ugb2ZmcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wOS4wMCNUcmFuc21pc3Npb24geW9rZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTAuMDAjVHJhbnNtaXNzaW9uIHNoYWZ0cyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xMS4wMCNVbml2ZXJzYWwgam9pbnRzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjEyLjAwI0F4bGVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjEzLjAwI1Bvd2VyIHRyYW5zbWlzc2lvbiBjaGFpbnMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTQuMDAjS251Y2tsZSBqb2ludHMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTUuMDAjU2Vydm8gY29udHJvbGxlciMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xNi4wMCNTdGVwIGRyaXZlIG9yIHN0ZXBwZXIgZHJpdmUgb3Igc3RlcCBpbmRleGVyIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE3LjAwI1BsYW5ldCBjYXJyaWVyIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE4LjAwI1RlbnNpb24gc3RydXQjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTkuMDAjVG9ycXVlIGNvbnZlcnRlcnMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMjAuMDAjVHJ1bm5pb25zIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjIxLjAwI1B1c2hlciBoZWFkIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjIyLjAwI1B1c2hlciBhc3NlbWJseSMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4yMy4wMCNCYWNrc3RvcHMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDAuMDAjUG93ZXIgZ2VuZXJhdG9ycyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wMS4wMCNEaWVzZWwgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wMi4wMCNIeWRybyBlbGVjdHJpYyBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjAzLjAwI1dpbmQgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wNC4wMCNHYXMgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wNS4wMCNUaGVybWFsIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDYuMDAjSHlkcmF1bGljIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDcuMDAjU29sYXIgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wMC4wMCNCYXR0ZXJpZXMgYW5kIGFjY2Vzc29yaWVzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjAxLjAwI1JlY2hhcmdlYWJsZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDIuMDAjQWxrYWxpbmUgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjAzLjAwI1ZlaGljbGUgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjA0LjAwI0JhdHRlcnkgY2hhcmdlcnMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDUuMDAjRHJ5IGNlbGwgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjA2LjAwI0VsZWN0cm9uaWMgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjA3LjAwI0xlYWQgYWNpZCBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDguMDAjTmlja2VsIGlyb24gYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjA5LjAwI05pY2tlbCBjYWRtaXVtIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xMC4wMCNQcm9kdWN0IHNwZWNpZmljIGJhdHRlcnkgcGFja3MjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTEuMDAjTGl0aGl1bSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTIuMDAjTmlja2VsIGh5ZHJvZ2VuIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xMy4wMCNUaGVybWFsIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xNC4wMCNaeW5jIGFpciMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xNS4wMCNaaW5jIGNvYWwgYmF0dGVyeSMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xNi4wMCNNZXJjdXJ5IG94aWRlIGJhdHRlcnkjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTcuMDAjTWFuZ2FuZXNlIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xOC4wMCNTaWx2ZXIgb3hpZGUgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE5LjAwI0JhdHRlcnkgdGVzdGVycyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wMC4wMCNEcml2ZSBjb21wb25lbnRzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjAxLjAwI1YgYmVsdHMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDIuMDAjR2VhcmVkIHRpbWluZyBiZWx0cyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wMy4wMCNSb3VuZCBiZWx0cyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wNC4wMCNGbGF0IGJlbHRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA1LjAwI0JlbHQgdGVuc2lvbmVycyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wNi4wMCNUcmFuc21pc3Npb24gcHVsbGV5cyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wNy4wMCNUaW1pbmcgcHVsbGV5IzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA4LjAwI1RyYW50b3JxdWUjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDkuMDAjQmVsdCBndWFyZHMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDAuMDAjQ2x1dGNoZXMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDEuMDAjUGxhdGUgY2x1dGNoZXMjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDIuMDAjRGlhcGhyYWdtIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMy4wMCNDZW50cmlmdWdhbCBjbHV0Y2gjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDQuMDAjU2VtaSBjZW50cmlmdWdhbCBjbHV0Y2gjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDUuMDAjRnJlZSB3aGVlbCBjbHV0Y2gjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDYuMDAjVG9ycXVlIGNvbnZlcnRlciMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNy4wMCNGbHVpZCBjb3VwbGluZyMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wOC4wMCNDYW0gY2x1dGNoZXMjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjAuMDAuMDAjQ2x1dGNoIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMC4wMS4wMCNQcmVzc3VyZSBwbGF0ZSMyNi4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMC4wMi4wMCNEcml2ZW4gcGxhdGUjMjYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjAuMDMuMDAjQ2x1dGNoIHBsYXRlcyMyNi4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMS4wMC4wMCNJbmR1c3RyaWFsIGJyYWtpbmcgc3lzdGVtcyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMS4wMS4wMCNBaXIgb3IgcG5ldW1hdGljIGJyYWtpbmcgc3lzdGVtcyMyNi4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMS4wMi4wMCNIeWRyYXVsaWMgYnJha2luZyBzeXN0ZW1zIzI2LjExLjIxLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAzLjAwI01lY2hhbmljYWwgYnJha2luZyBzeXN0ZW1zIzI2LjExLjIxLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjA0LjAwI0JyYWtpbmcgY2x1dGNoIGFzc2VtYmxpZXMjMjYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMDAuMDAuMDAjRWxlY3RyaWNhbCB3aXJlIGFuZCBjYWJsZSBhbmQgaGFybmVzcyMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wMC4wMCNFbGVjdHJpY2FsIHdpcmUjMjYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDEuMDAjSGVhdGluZyB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjA1LjAwI0ZpeHR1cmUgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wNy4wMCNSYWRpbyBvciB0ZWxldmlzaW9uIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDguMDAjQXV0b21vdGl2ZSBvciBhaXJjcmFmdCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjA5LjAwI01hZ25ldCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjEwLjAwI1Ryb2xsZXkgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4xNC4wMCNVbmRlcmdyb3VuZCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjE1LjAwI1NpbGljb24gYXNiZXN0b3MgKFNBKSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjE3LjAwI0NvcHBlciB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjE5LjAwI0NvcHBlciBjbGFkIGFsdW1pbnVtIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMjAuMDAjQ29wcGVyIHN0ZWVsIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMjEuMDAjQnJvbnplIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMjIuMDAjQmFyZSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjIzLjAwI0NvdmVyZWQgYnV0IG5vdCBpbnN1bGF0ZWQgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yNC4wMCNJbnN1bGF0ZWQgb3IgY292ZXJlZCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjMyLjAwI0ludGVyIGNvbm5lY3Qgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zMy4wMCNLYXB0YW4gd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zNC4wMCNQb2x5bWlkZSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjM1LjAwI0V4dGVuc2lvbiBjb3JkIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjM2LjAwI0V4dGVuc2lvbiBjb3JkIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjM3LjAwI1dpcmUgYXNzZW1ibHkjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzguMDAjV2lyZSBhc3NlbWJseSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wMC4wMCNFbGVjdHJpY2FsIGNhYmxlIzI2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjAxLjAwI0hlYXRpbmcgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDIuMDAjU3VibWFyaW5lIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjAzLjAwI0NvbnRyb2wgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDQuMDAjU2lnbmFsIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA1LjAwI0F1dG9tb3RpdmUgb3IgYWlyY3JhZnQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDYuMDAjQ29heGlhbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wNy4wMCNGaWJlciBvcHRpYyBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wOC4wMCNBZXJpYWwgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDkuMDAjTmV0d29yayBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xMC4wMCNCcm9uemUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTEuMDAjQmFyZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xMi4wMCNDb3ZlcmVkIGJ1dCBub3QgaW5zdWxhdGVkIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjEzLjAwI0luc3VsYXRlZCBvciBjb3ZlcmVkIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE0LjAwI0J1aWxkaW5nIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE1LjAwI1Bvd2VyIGNhYmxlIGZvciBkaXJlY3QgYnVyaWFsIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE2LjAwI1RlbGVjb21tdW5pY2F0aW9ucyBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xNy4wMCNUcmlheGlhbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xOC4wMCNDcm9zc2xpbmtlZCBwb2x5a2FlbmUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTkuMDAjRmxvcm9wb2x5bWVyIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjIwLjAwI0ludGVyIGNvbm5lY3QgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjEuMDAjS2FwdGFuIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjIyLjAwI1BvbHltaWRlIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjIzLjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjI0LjAwI1JpYmJvbiBvciBmbGF0IGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjI1LjAwI0NvcHBlciBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNy4wMC4wMCNXaXJpbmcgaGFybmVzcyMyNi4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNy4wMS4wMCNQYW5lbCB3aXJpbmcgaGFybmVzcyMyNi4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNy4wMi4wMCNUcnVuayB3aXJpbmcgaGFybmVzcyMyNi4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNy4wMy4wMCNDb21tdW5pY2F0aW9uIHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjA0LjAwI1NwZWNpYWx0eSB3aXJpbmcgaGFybmVzcyMyNi4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMy4wMC4wMC4wMCNQb3dlciBnZW5lcmF0aW9uIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjAwLjAwI1Bvd2VyIHBsYW50cyMyNi4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wMS4wMCNEaWVzZWwgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjAyLjAwI0dlb3RoZXJtYWwgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjAzLjAwI0h5ZHJvIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wNC4wMCNHYXMgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA1LjAwI01hcmluZSBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDYuMDAjUGV0cm9sIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wNy4wMCNTb2xhciBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDguMDAjU3RlYW0gcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA5LjAwI1dpbmQgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjEwLjAwI1RoZXJtYWwgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjE0LjAwLjAwLjAwI0F0b21pYyBhbmQgbnVjbGVhciBlbmVyZ3kgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTYuMDAuMDAjU3ViY3JpdGljYWwgYXNzZW1ibHkgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE2LjAxLjAwI1N1YmNyaXRpY2FsIGFzc2VtYmx5IGZ1ZWwjMjYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTYuMDIuMDAjU3ViY3JpdGljYWwgYXNzZW1ibHkgY29tcG9uZW50cyMyNi4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNi4wMy4wMCNTdWJjcml0aWNhbCBhc3NlbWJseSBtb2RlcmF0b3IjMjYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTcuMDAuMDAjRG9zaW1ldHJ5IGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNy4wMS4wMCNJb25pemF0aW9uIGNoYW1iZXIgZG9zaW1ldGVycyMyNi4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNy4wMi4wMCNEb3NpbWV0ZXJzIzI2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjAzLjAwI1NlY29uZGFyeSBzdGFuZGFyZCBkb3NpbWV0cnkgc3lzdGVtcyMyNi4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNy4wNC4wMCNQaGFudG9tIGRvc2ltZXRlcnMjMjYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDAuMDAjSG90IGNlbGwgZGV2aWNlcyMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wMS4wMCNIb3QgY2VsbCByZW1vdGUgaGFuZGxpbmcgZXF1aXBtZW50IzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjAyLjAwI0hvdCBjZWxsIHJlbW90ZSB2aWV3aW5nIGRldmljZSMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wMy4wMCNIb3QgY2VsbCBzaGllbGRpbmcgZG9vcnMjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDQuMDAjSG90IGNlbGwgc2FtcGxlcnMjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDUuMDAjSG90IGNlbGwgc2FtcGxlIHByb2Nlc3NpbmcgZXF1aXBtZW50IzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjA2LjAwI0hvdCBjZWxsIHNwZWNpYWwgdG9vbHMjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDcuMDAjSG90IGNlbGwgbGVhZCBnbGFzcyB3aW5kb3dzIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjA4LjAwI0hvdCBjZWxsIGRlY29udGFtaW5hdGlvbiBzeXN0ZW1zIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjA5LjAwI0hvdCBjZWxsIHBlbmV0cmF0aW9uIGRldmljZXMjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDAuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgaW5zdHJ1bWVudHMjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDEuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgYWlyYm9ybmUgZHVzdCBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wMi4wMCNCZXRhIGdhdWdlIG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjA0LjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIGxpcXVpZCBsZXZlbCBnYXVnZXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDUuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgbWFzcyBwZXIgdW5pdCBvcmUgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDYuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgbW9pc3R1cmUgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDcuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgdGhpY2tuZXNzIG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjA4LjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIGZsb3cgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDkuMDAjSXNvdG9wZSBzZXBhcmF0b3JzIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjEwLjAwI0lzb3RvcGUgcHJvZHVjdGlvbiBmYWNpbGl0aWVzIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjExLjAwI0lzb3RvcGUgY2FsaWJyYXRvciBhY3Rpdml0eSBtZXRlcnMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDAuMDAjSXJyYWRpYXRpb24gZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjAxLjAwI0lycmFkaWF0aW9uIGdhbW1hIHNvdXJjZXMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDIuMDAjTWFnbmV0IHN5c3RlbXMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDMuMDAjTklNIG51Y2xlYXIgZWxlY3Ryb25pYyB1bml0cyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wNC4wMCNOZXV0cm9uIGlycmFkaWF0b3JzIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjA1LjAwI0lycmFkaWF0aW9uIHRlc3RpbmcgY2Fwc3VsZXMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDYuMDAjSXJyYWRpYXRpb24gc2FtcGxlIHRyYW5zZmVyIHN5c3RlbSMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wNy4wMCNOZXV0cm9uIGdlbmVyYXRvcnMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjEuMDAuMDAjTnVjbGVhciByZWFjdG9yIGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMS4wMS4wMCNOdWNsZWFyIHJlYWN0b3Igc3BlY2ltZW4gaXJyYWRpYXRpb24gY29udGFpbmVycyMyNi4xNC4yMS4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMS4wNi4wMCNOdWNsZWFyIHJlYWN0b3IgY29udHJvbCByb2Qgc3lzdGVtcyMyNi4xNC4yMS4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMS4wOC4wMCNOdWNsZWFyIHJlYWN0b3IgaW4gY29yZSBuZXV0cm9uIGZsdXggaW5zdHJ1bWVudGF0aW9uIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjE3LjAwI051Y2xlYXIgcmVhY3RvciBlYXJ0aHF1YWtlIGluc3RydW1lbnRhdGlvbiMyNi4xNC4yMS4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMi4wMC4wMCNOdWNsZWFyIGZ1ZWwgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIyLjAxLjAwI051Y2xlYXIgZnVlbCBjbGFkZGluZyB0dWJlcyMyNi4xNC4yMi4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMi4wMi4wMCNOdWNsZWFyIGZ1ZWwgZWxlbWVudCBmYWlsdXJlIGRldGVjdGlvbiBzeXN0ZW1zIzI2LjE0LjIyLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjAwLjAwI1JhZGlhdGlvbiBzaGllbGRpbmcgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjAyLjAwI0xlYWQgc2NyZWVucyMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wMy4wMCNGaWxtIGJhZGdlcyMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wNC4wMCNSYWRpb2dyYXBoaWMgZXF1aXBtZW50IzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjA2LjAwI1NoaWVsZGVkIGNvbnRhaW5lcnMgZm9yIHJhZGlhdGlvbiBwcm90ZWN0aW9uIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjA3LjAwI0xlYWQgY2hhbWJlcnMgb3Igc2FmZXMgZm9yIHJhZGlhdGlvbiBwcm90ZWN0aW9uIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjA4LjAwI0xlYWQgYnJpY2tzIGZvciByYWRpYXRpb24gcHJvdGVjdGlvbiMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4xMC4wMCNHbG92ZSBib3hlcyBmb3IgcmFkaWF0aW9uIHByb3RlY3Rpb24jMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMTEuMDAjUmFkaWF0aW9uIHNoaWVsZGluZyB3aW5kb3dzIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjEyLjAwI0xlYWQgZm9yIHJhZGlhdGlvbiBzaGllbGRpbmcjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDAuMDAjUmFkaW9hY3RpdmUgd2FzdGUgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjAxLjAwI1JhZGlvYWN0aXZlIHdhc3RlIHRyZWF0bWVudCBjb21wYWN0b3JzIG9yIGluY2luZXJhdG9ycyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wMi4wMCNOdWNsZWFyIHJhZGlhdGlvbiBhYnNvcmJlcnMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDMuMDAjQXRvbWljIGVuZXJneSBldmFwb3JhdG9ycyBvciBjb25jZW50cmF0b3JzIG9yIGRyeWVycyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wNC4wMCNEb29yIGludGVybG9ja2luZyBzeXN0ZW1zIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA1LjAwI1JhZGlvYWN0aXZlIHdhc3RlIGRvc2FnZSBzeXN0ZW1zIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA2LjAwI1JhZGlvYWN0aXZlIHdhc3RlIHNvbGlkaWZpY2F0aW9uIHN5c3RlbXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDcuMDAjUmFkaW9hY3RpdmUgd2FzdGUgZGlzcG9zYWwgc3lzdGVtcyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wOC4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSB0cmVhdG1lbnQgZmFjaWxpdGllcyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNy4wMC4wMC4wMC4wMCNUb29scyBhbmQgR2VuZXJhbCBNYWNoaW5lcnkjMjcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMDAuMDAuMDAjSGFuZCB0b29scyMyNy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wMC4wMCNDdXR0aW5nIGFuZCBjcmltcGluZyBhbmQgcHVuY2hpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDEuMDAjS25pZmUgYmxhZGVzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjAyLjAwI1Jhem9yIGtuaXZlcyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wMy4wMCNVdGlsaXR5IGtuaXZlcyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wNC4wMCNQb2NrZXQga25pdmVzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA1LjAwI1B1bmNoZXMgb3IgbmFpbCBzZXRzIG9yIGRyaWZ0cyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wNi4wMCNTaGVhcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDcuMDAjTWV0YWwgY3V0dGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wOC4wMCNTYXdzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA5LjAwI0F1Z2VycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xMC4wMCNTdHJpcHBpbmcgdG9vbHMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTEuMDAjV2lyZSBjdXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjEyLjAwI0JvbHQgY3V0dGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xMy4wMCNIb3NlIGN1dHRlciMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xNC4wMCNHbGFzcyBjdXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjE1LjAwI0hhbmQgb3IgcHVzaCBkcmlsbCMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xNi4wMCNQdW5jaGluZyBwbGllcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTcuMDAjS25pZmUgYmxhZGUgc2V0cyBvciBkaXNwZW5zZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjIwLjAwI051dCBzcGxpdHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMjEuMDAjTmliYmxlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDAuMDAjRm9ybWluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wMS4wMCNNYWxsZXRzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjAyLjAwI0hhbW1lcnMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDMuMDAjQW52aWxzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjA0LjAwI0hhdGNoZXRzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjA1LjAwI1BpY2tzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjA2LjAwI0JvbHQgY3V0dGVycyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wNy4wMCNTd2FnaW5nIHRvb2xzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjAwLjAwI1dyZW5jaGVzIGFuZCBkcml2ZXJzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjAxLjAwI1NjcmV3ZHJpdmVycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wMi4wMCNOdXQgZHJpdmVycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wMy4wMCNTb2NrZXQgc2V0cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wNC4wMCNTb2NrZXRzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA1LjAwI0JveCBlbmQgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDYuMDAjT3BlbiBlbmQgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDcuMDAjQWRqdXN0YWJsZSB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wOC4wMCNQaXBlIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA5LjAwI1NjcmV3IGV4dHJhY3RvcnMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTAuMDAjSGV4IGtleXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTEuMDAjUmF0Y2hldHMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTIuMDAjUHVsbGVycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMy4wMCNDb21iaW5hdGlvbiB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xNC4wMCNTcGVjaWFsdHkgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTUuMDAjVG9ycXVlIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE2LjAwI1Rvcngga2V5cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xNy4wMCNQaXBlIGV4dHJhY3RvcnMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTguMDAjVGFwIGV4dHJhY3RvcnMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTkuMDAjVG9ycXVlIHdyZW5jaCMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yMC4wMCNUIGhhbmRsZSB0YXAgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjEuMDAjQ3JhbmtzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjIyLjAwI0RpZSBzdG9ja3MjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjMuMDAjVHViZSB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yNC4wMCNIb29rIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjI1LjAwI09mZnNldCBzb2NrZXQgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjYuMDAjU3Bhbm5lciB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wMC4wMCNNZWFzdXJpbmcgYW5kIGxheW91dCB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wMS4wMCNUYXBlIG1lYXN1cmVzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAyLjAwI0xldmVscyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wMy4wMCNTcXVhcmVzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjA0LjAwI1BsdW1iIGJvYnMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDUuMDAjUHJvdHJhY3RvcnMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDYuMDAjTmFpbCBvciByb3V0ZXIgZ2F1Z2VzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjA3LjAwI1N0cmFpZ2h0IGVkZ2VzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjA4LjAwI1J1bGVzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjA5LjAwI0JldmVscyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4xMC4wMCNTdHVkIGZpbmRlcnMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMTEuMDAjQ2FsaXBlcnMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDAuMDAjUm91Z2ggYW5kIGZpbmlzaGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMS4wMCNDb2xkIGNoaXNlbHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDIuMDAjRmlsZXMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDMuMDAjUGxhbmVzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA0LjAwI1Jhc3BzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA1LjAwI0dyaW5kZXJzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA2LjAwI1dvb2QgY2hpc2VscyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wNy4wMCNXaXJlIGJydXNoZXMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDguMDAjU2hhcnBlbmluZyB0b29scyBvciBraXRzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA5LjAwI1NwYXR1bGFzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjExLjAwI0Nyb3NzIGN1dCBjaGlzZWxzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjAwLjAwI0dhcmRlbiB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wMS4wMCNNYWNoZXRlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wMi4wMCNTcGFkZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDMuMDAjUmFrZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDQuMDAjU2hvdmVscyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wNS4wMCNBeGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA2LjAwI1NjeXRoZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDcuMDAjU2VjYXRldXJzIG9yIHBydW5pbmcgc2hlYXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA4LjAwI0hvZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDkuMDAjU2NyYXBlcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTAuMDAjR2FyZGVuIGZvcmtzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjExLjAwI1Rvb2wgaGFuZGxlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xMi4wMCNHYXJkZW4gcmlkZGxlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xMy4wMCNQb3N0IGhvbGUgZGlnZ2VyIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjE0LjAwI0xhd25tb3dlcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTUuMDAjTGF3biBzY2FyaWZpZXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjE2LjAwI0hlZGdlIGNsaXBwZXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjE3LjAwI0RpZ2dpbmcgYmFycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wMC4wMCNIb2xkaW5nIGFuZCBjbGFtcGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wMS4wMCNQaXBlIHZpc2VzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjAyLjAwI0JlbmNoIHZpc2VzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjAzLjAwI0hhbmQgY2xhbXBzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA0LjAwI1RvbmdzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA1LjAwI1R3ZWV6ZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA2LjAwI0xpbmVtYW5zIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wNy4wMCNBZGp1c3RhYmxlIHdpZGVtb3V0aCBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDguMDAjTmVlZGxlbm9zZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDkuMDAjTWFnbmV0aWMgdG9vbHMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTAuMDAjUmV0YWluaW5nIHJpbmcgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjExLjAwI0FsbGlnYXRvciBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTIuMDAjVG9uZ3VlIGFuZCBncm9vdmUgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjEzLjAwI1NsaXAgb3IgZ3Jvb3ZlIGpvaW50IHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xNC4wMCNEaWFnb25hbCBjdXQgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE1LjAwI0xvY2tpbmcgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE2LjAwI0ZlbmNlIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xNy4wMCNFbmQgY3V0IHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xOC4wMCNXaXJlIGx1ZyBjcmltcGluZyB0b29sIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE5LjAwI0xpZ2h0IGJ1bGIgY2hhbmdlciMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yMC4wMCNDIGNsYW1wcyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yMS4wMCNDb3JuZXIgY2xhbXBzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIyLjAwI1NoZWV0IG1ldGFsIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yMy4wMCNCZW5jaCBkb2cjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjQuMDAjVGVuc2lvbmVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yNS4wMCNSb3VuZCBub3NlIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yNi4wMCNGbGF0IG5vc2UgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjI3LjAwI1N0cmFwIHdyZW5jaGVzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIyLjAwLjAwI01hc29ucnkgYW5kIGNvbmNyZXRlIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIyLjAxLjAwI1Ryb3dlbHMjMjcuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDIuMDAjRmxvYXRzIzI3LjExLjIyLjAwLjAwCi11bnNwc2M3IzI3LjExLjIyLjAzLjAwI0VkZ2VycyMyNy4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMi4wNC4wMCNDZW1lbnQgbWl4ZXJzIzI3LjExLjIyLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjAwLjAwI01hcmtpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDEuMDAjQnJhbmRlcnMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDIuMDAjQXdscyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wMy4wMCNTY3JpYmVycyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wNC4wMCNDaGFsayBsaW5lcyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wNS4wMCNNZXRhbCBtYXJrZXJzIG9yIGhvbGRlcnMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDYuMDAjTWV0YWwgc3RhbXBzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjAwLjAwI0Zhc3RlbmVyIHNldHRpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDEuMDAjU3RhcGxlIGd1bnMjMjcuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDIuMDAjUml2ZXQgdG9vbHMjMjcuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDMuMDAjQmFuZGVycyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wNC4wMCNBbmNob3Igc2V0dGluZyB0b29scyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wNS4wMCNCb2x0IGhlYXRlcnMjMjcuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDAuMDAjUHJ5aW5nIGFuZCBiZW5kaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjAxLjAwI1BpcGUgYmVuZGluZyB0b29scyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wMi4wMCNQcnkgYmFycyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wMy4wMCNDb25kdWl0IGJlbmRlcnMjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDQuMDAjV2VkZ2VzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjA1LjAwI1BhY2tpbmcgaG9va3MjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDYuMDAjSGlja2V5cyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNi4wMC4wMCNTZWFsaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI2LjAxLjAwI1B1dHR5IGtuaXZlcyMyNy4xMS4yNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNi4wMi4wMCNDYXVsa2luZyB0b29scyMyNy4xMS4yNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wMC4wMCNQb3dlciB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wMS4wMCNQb3dlciBibG93ZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjAyLjAwI1Bvd2VyIGJ1ZmZlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDMuMDAjUG93ZXIgZHJpbGxzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA0LjAwI1Bvd2VyIGdyaW5kZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA1LjAwI0RlbW9saXRpb24gaGFtbWVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wNi4wMCNQb3dlciBwbGFuZXMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDcuMDAjUG93ZXIgcm91dGVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wOC4wMCNQb3dlciBzYW5kZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA5LjAwI1Bvd2VyIHNhd3MjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTAuMDAjUG93ZXIgc2NyZXdndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjExLjAwI1Bvd2VyIHN0YXBsZSBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjEyLjAwI1Bvd2VyIHRyaW1tZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjEzLjAwI0ltcGFjdCB3cmVuY2hlcyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xNC4wMCNQb3dlciBjYXVsa2luZyBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE1LjAwI1Bvd2VyIGNoaXBwZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE2LjAwI1Bvd2VyIG5haWwgZ3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xNy4wMCNIZWF0IGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTguMDAjRW5ncmF2ZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE5LjAwI0dsdWUgZ3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4yMC4wMCNUb3JxdWUgdG9vbHMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMjEuMDAjQmlzY3VpdCBqb2ludGVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wMC4wMCNUb29sIGF0dGFjaG1lbnRzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjAxLjAwI0RyaWxsIGJpdHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDIuMDAjU2F3IGJsYWRlcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wMy4wMCNFbmQgbWlsbHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDQuMDAjU3RhbXBpbmcgZGllcyBvciBwdW5jaGVzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA1LjAwI1RocmVhZGluZyBkaWVzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA2LjAwI1RocmVhZGluZyB0YXBzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA3LjAwI0NodWNrcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wOC4wMCNDb2xsZXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA5LjAwI1Rvb2wgaG9sZGVycyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xMC4wMCNUaHJlYWQgcmVwYWlyIGtpdHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTEuMDAjQXJib3JzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjEyLjAwI0NvdW50ZXJzaW5rcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xMy4wMCNFeHRlbnNpb24gcG9sZSMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xNC4wMCNTY3Jld2RyaXZlciBiaXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE1LjAwI051dCBkcml2ZXIgYml0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xNi4wMCNBYnJhc2l2ZSBkaXNrIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE3LjAwI0hvbGUgc2F3cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xOC4wMCNWaXNlIGphdyBsaW5lcnMgb3IgY2FwcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xOS4wMCNTa2l2aW5nIHRvb2wgY3V0dGVyIGJsYWRlcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4yMS4wMCNSb3V0ZXIgYml0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wMC4wMCNEaXNwZW5zaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjAxLjAwI0dyZWFzZSBndW5zIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjAyLjAwI0luZHVzdHJpYWwgZnVubmVscyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wMy4wMCNIYW5kIHNwcmF5ZXJzIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjA0LjAwI1Jlc2luIGd1bnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDUuMDAjT2lsIGNhbiMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wNi4wMCNDYXVsa2luZyBndW5zIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjA3LjAwI0Jyb2FkY2FzdCBzcHJlYWRlcnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzAuMDAuMDAjQnJ1c2hlcyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMC4wMS4wMCNTY3JhdGNoIGJydXNoZXMjMjcuMTEuMzAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzAuMDIuMDAjVHViZSBicnVzaGVzIzI3LjExLjMwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMwLjAzLjAwI0FwcGxpY2F0b3IgYnJ1c2hlcyMyNy4xMS4zMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMS4wMC4wMCNQdWxsaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMxLjAxLjAwI0Zpc2ggdGFwZSMyNy4xMS4zMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMS4wMi4wMCNGdXNlIHB1bGxlcnMjMjcuMTEuMzEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDAuMDAjVG9vbCBraXRzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMyLjAxLjAwI0dlbmVyYWwgdG9vbCBraXRzIzI3LjExLjMyLjAwLjAwCi11bnNwc2M3IzI3LjExLjMyLjAyLjAwI0JlYXJpbmcgZml0dGluZyB0b29sIGtpdHMjMjcuMTEuMzIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDMuMDAjQ29tcHV0ZXIgdG9vbCBraXRzIzI3LjExLjMyLjAwLjAwCi11bnNwc2M3IzI3LjExLjMyLjA0LjAwI0VsZWN0cmljaWFuIGtpdHMjMjcuMTEuMzIuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMDAuMDAuMDAjSHlkcmF1bGljIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzI3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjE1LjAwLjAwI0h5ZHJhdWxpYyBwcmVzc2VzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjE1LjAxLjAwI1ByZXNzIHJldHVybiBzcHJpbmdzIzI3LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE2LjAwLjAwI0h5ZHJhdWxpYyBjeWxpbmRlcnMgYW5kIHBpc3RvbnMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTYuMDEuMDAjQ3lsaW5kZXIgcGlzdG9ucyMyNy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNi4wMi4wMCNIeWRyYXVsaWMgY3lsaW5kZXJzIzI3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjAwLjAwI0h5ZHJhdWxpYyBob3NlIGFuZCB0dWJlIGZpdHRpbmdzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjAxLjAwI0h5ZHJhdWxpYyBxdWljayBjb25uZWN0b3JzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjAyLjAwI0h5ZHJhdWxpYyB0ZWVzIG9yIGNyb3NzZXMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDMuMDAjRmVycnVsZXMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDQuMDAjSHlkcmF1bGljIHVuaW9ucyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wNS4wMCNIeWRyYXVsaWMgb3IgY29tcHJlc3Npb24gZWxib3dzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjA2LjAwI0ZlcnJ1bGUgbnV0cyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wNy4wMCNDcmltcCBjb25uZWN0b3JzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE4LjAwLjAwI0h5ZHJhdWxpYyBxdWljayBjb25uZWN0b3JzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjE5LjAwLjAwI0h5ZHJhdWxpYyB0ZWVzIG9yIGNyb3NzZXMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMjAuMDAuMDAjRmVycnVsZXMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMzAuMDAuMDAjSHlkcmF1bGljIHVuaW9ucyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi40MC4wMC4wMCNIeWRyYXVsaWMgb3IgY29tcHJlc3Npb24gZWxib3dzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjUwLjAwLjAwI0ZlcnJ1bGUgbnV0cyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi42MC4wMC4wMCNDcmltcCBjb25uZWN0b3JzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjYxLjAwLjAwI0h5ZHJhdWxpYyB0b29scyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi42MS4wMS4wMCNNYW5ob2xlIGNvdmVyIGxpZnRlcnMjMjcuMTIuNjEuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMDAuMDAuMDAjUG5ldW1hdGljIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzI3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjAwLjAwI1BuZXVtYXRpYyB0b29scyMyNy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wMS4wMCNQbmV1bWF0aWMgaW1wYWN0IHdyZW5jaGVzIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjAyLjAwI0NvbXByZXNzZWQgYWlyIGd1biMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wMy4wMCNQbmV1bWF0aWMgc2NyZXdkcml2ZXIjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDQuMDAjUG5ldW1hdGljIGhhbW1lciMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wNS4wMCNQbmV1bWF0aWMgZHJpbGwjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDYuMDAjUG5ldW1hdGljIG5haWwgZHJpdmVycyMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wNy4wMCNQbmV1bWF0aWMgc2FuZGluZyBtYWNoaW5lcyMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wMC4wMCNBaXIgZml0dGluZ3MgYW5kIGNvbm5lY3RvcnMjMjcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDEuMDAjQWlyIG1hbmlmb2xkcyMyNy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wMi4wMCNGaWx0ZXJzIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjAzLjAwI1JlZ3VsYXRvciMyNy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wNC4wMCNMdWJyaWNhdG9yIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjA1LjAwI0FpciBjdXJ0YWluIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjA2LjAwI0FpciBjb3VwbGluZyMyNy4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMC4wMC4wMC4wMC4wMCNTdHJ1Y3R1cmVzIGFuZCBCdWlsZGluZyBhbmQgQ29uc3RydWN0aW9uIGFuZCBNYW51ZmFjdHVyaW5nIENvbXBvbmVudHMgYW5kIFN1cHBsaWVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjAwLjAwLjAwI1N0cnVjdHVyYWwgbWF0ZXJpYWxzIGFuZCBiYXNpYyBzaGFwZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDAuMDAjQW5nbGVzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjAxLjAwI0ZlcnJvdXMgYWxsb3kgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wMy4wMCNJcm9uIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wNC4wMCNTdGVlbCBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wNi4wMCNBbHVtaW51bSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDcuMDAjTWFnbmVzaXVtIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wOC4wMCNUaXRhbml1bSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDkuMDAjQ29wcGVyIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xMC4wMCNCcmFzcyBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTEuMDAjQnJvbnplIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xMi4wMCNaaW5jIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xMy4wMCNUaW4gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjE0LjAwI0xlYWQgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjE1LjAwI1BsYXN0aWMgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjE2LjAwI1J1YmJlciBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTcuMDAjUHJlY2lvdXMgbWV0YWwgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjAwLjAwI0JhciMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wMS4wMCNGZXJyb3VzIGFsbG95IGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wMy4wMCNJcm9uIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDQuMDAjU3RlZWwgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wNi4wMCNBbHVtaW51bSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA3LjAwI01hZ25lc2l1bSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA4LjAwI1RpdGFuaXVtIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDkuMDAjQ29wcGVyIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTAuMDAjQnJhc3MgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xMS4wMCNCcm9uemUgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xMi4wMCNaaW5jIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTMuMDAjVGluIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTQuMDAjTGVhZCBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjE1LjAwI1BsYXN0aWMgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xNi4wMCNQcmVjaW91cyBtZXRhbCBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjE3LjAwI1dvb2RlbiBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjAwLjAwI0JlYW1zIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjAxLjAwI0ZlcnJvdXMgYWxsb3kgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDMuMDAjSXJvbiBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wNC4wMCNTdGVlbCBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDYuMDAjQWx1bWludW0gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDcuMDAjTWFnbmVzaXVtIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA4LjAwI1RpdGFuaXVtIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA5LjAwI0NvcHBlciBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xMC4wMCNCcmFzcyBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xMS4wMCNCcm9uemUgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTIuMDAjWmluYyBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xMy4wMCNUaW4gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTQuMDAjTGVhZCBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xNS4wMCNQbGFzdGljIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE2LjAwI1J1YmJlciBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xNy4wMCNDb25jcmV0ZSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xOC4wMCNQcmVjaW91cyBtZXRhbCBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wMC4wMCNDaGFubmVscyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wMS4wMCNGZXJyb3VzIGFsbG95IGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjAzLjAwI0lyb24gY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDQuMDAjU3RlZWwgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA2LjAwI0FsdW1pbnVtIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA3LjAwI01hZ25lc2l1bSBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wOC4wMCNUaXRhbml1bSBjaGFubm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDkuMDAjQ29wcGVyIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjEwLjAwI0JyYXNzIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjExLjAwI0Jyb256ZSBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xMi4wMCNaaW5jIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjEzLjAwI1RpbiBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xNC4wMCNMZWFkIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjE1LjAwI1BsYXN0aWMgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTYuMDAjUnViYmVyIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjE3LjAwI1ByZWNpb3VzIG1ldGFsIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjAwLjAwI0NvaWwjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDEuMDAjRmVycm91cyBhbGxveSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDMuMDAjSXJvbiBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA0LjAwI1N0ZWVsIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDYuMDAjQWx1bWludW0gY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wNy4wMCNNYWduZXNpdW0gY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wOC4wMCNUaXRhbml1bSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA5LjAwI0NvcHBlciBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjEwLjAwI0JyYXNzIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTEuMDAjQnJvbnplIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTIuMDAjWmluYyBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjEzLjAwI1RpbiBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE0LjAwI0xlYWQgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xNS4wMCNQbGFzdGljIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY29pbHMjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTcuMDAjTm9uIG1ldGFsbGljIGNvaWxzIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE4LjAwI1BlcmZvcmF0ZWQgc3RlZWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTkuMDAjRW1ib3NzZWQgc3RlZWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMjAuMDAjQ29tcHJlc3NlZCBmaWJlciBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjIxLjAwI0ZpYmVyIGFuZCBydWJiZXIgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4yMi4wMCNHcmFwaGl0ZSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjAwLjAwI0ZvaWwjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDEuMDAjRmVycm91cyBhbGxveSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDMuMDAjSXJvbiBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA0LjAwI1N0ZWVsIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDYuMDAjQWx1bWludW0gZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wNy4wMCNNYWduZXNpdW0gZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wOC4wMCNUaXRhbml1bSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA5LjAwI0NvcHBlciBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjEwLjAwI0JyYXNzIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTEuMDAjQnJvbnplIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTIuMDAjWmluYyBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjEzLjAwI1RpbiBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjE0LjAwI0xlYWQgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xNS4wMCNQbGFzdGljIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDAuMDAjUGlwZSMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wMS4wMCNGZXJyb3VzIGFsbG95IHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wMy4wMCNJcm9uIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDQuMDAjU3RlZWwgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wNi4wMCNBbHVtaW51bSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA3LjAwI01hZ25lc2l1bSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA4LjAwI1RpdGFuaXVtIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDkuMDAjQ29wcGVyIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTAuMDAjQnJhc3MgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xMS4wMCNCcm9uemUgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xMi4wMCNaaW5jIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTMuMDAjVGluIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTQuMDAjTGVhZCBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjE1LjAwI1BsYXN0aWMgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xNi4wMCNSdWJiZXIgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xNy4wMCNDb25jcmV0ZSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjAwLjAwI1BsYXRlIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjAxLjAwI0ZlcnJvdXMgYWxsb3kgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDIuMDAjTm9uIGZlcnJvdXMgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDMuMDAjSXJvbiBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wNC4wMCNTdGVlbCBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDYuMDAjQWx1bWludW0gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDcuMDAjTWFnbmVzaXVtIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA4LjAwI1RpdGFuaXVtIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA5LjAwI0NvcHBlciBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xMC4wMCNCcmFzcyBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xMS4wMCNCcm9uemUgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTIuMDAjWmluYyBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xMy4wMCNUaW4gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTQuMDAjTGVhZCBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xNS4wMCNQbGFzdGljIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE2LjAwI1J1YmJlciBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xNy4wMCNDb25jcmV0ZSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xOC4wMCNQcmVjaW91cyBtZXRhbCBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xOS4wMCNOb24gbWV0YWxsaWMgcGxhdGVzIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjAwLjAwI1Byb2ZpbGVzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjAxLjAwI0ZlcnJvdXMgYWxsb3kgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDMuMDAjSXJvbiBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wNC4wMCNTdGVlbCBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDYuMDAjQWx1bWludW0gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDcuMDAjTWFnbmVzaXVtIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA4LjAwI1RpdGFuaXVtIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA5LjAwI0NvcHBlciBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xMC4wMCNCcmFzcyBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xMS4wMCNCcm9uemUgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTIuMDAjWmluYyBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xMy4wMCNUaW4gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTQuMDAjTGVhZCBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xNS4wMCNQbGFzdGljIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjE2LjAwI1J1YmJlciBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wMC4wMCNSb2QjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDEuMDAjRmVycm91cyBhbGxveSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDMuMDAjSXJvbiByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA0LjAwI1N0ZWVsIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDYuMDAjQWx1bWludW0gcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wNy4wMCNNYWduZXNpdW0gcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wOC4wMCNUaXRhbml1bSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA5LjAwI0NvcHBlciByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjEwLjAwI0JyYXNzIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTEuMDAjQnJvbnplIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTIuMDAjWmluYyByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjEzLjAwI1RpbiByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjE0LjAwI0xlYWQgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xNS4wMCNQbGFzdGljIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTYuMDAjUnViYmVyIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDAuMDAjU2hlZXQjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDEuMDAjRmVycm91cyBhbGxveSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wMi4wMCNOb24gZmVycm91cyBhbGxveSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wMy4wMCNJcm9uIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA0LjAwI1N0ZWVsIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wNi4wMCNBbHVtaW51bSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wNy4wMCNNYWduZXNpdW0gc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDguMDAjVGl0YW5pdW0gc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDkuMDAjQ29wcGVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjEwLjAwI0JyYXNzIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjExLjAwI0Jyb256ZSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xMi4wMCNaaW5jIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjEzLjAwI1RpbiBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xNC4wMCNMZWFkIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE1LjAwI1BsYXN0aWMgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTYuMDAjUnViYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE3LjAwI0FybW9yIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE4LjAwI0JlcnlsbGl1bSBhbGxveSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xOS4wMCNDb21wb3NpdGUgbWV0YWwgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjAuMDAjTmlja2VsIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjIxLjAwI0ZvYW0gUnViYmVyIFNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjIyLjAwI0NvcmsgYW5kIHJ1YmJlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yMy4wMCNDb21wcmVzc2VkIGZpYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjI0LjAwI01ldGFsIGluc2VydGVkIGNvbXByZXNzZWQgZmliZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjUuMDAjRmliZXIgYW5kIHJ1YmJlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yNi4wMCNBc2Jlc3RvcyBzaGVldHMjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDAuMDAjU3RyaXAjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDEuMDAjRmVycm91cyBhbGxveSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wMi4wMCNOb24gZmVycm91cyBhbGxveSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wMy4wMCNJcm9uIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA0LjAwI1N0ZWVsIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wNi4wMCNBbHVtaW51bSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wNy4wMCNNYWduZXNpdW0gc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDguMDAjVGl0YW5pdW0gc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDkuMDAjQ29wcGVyIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjEwLjAwI0JyYXNzIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjExLjAwI0Jyb256ZSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xMi4wMCNaaW5jIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjEzLjAwI1RpbiBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xNC4wMCNMZWFkIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjE1LjAwI1BsYXN0aWMgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTYuMDAjUnViYmVyIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjAwLjAwI1R1YmUgYW5kIHR1YmluZyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wMS4wMCNGZXJyb3VzIGFsbG95IHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wMi4wMCNDb3BwZXIgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjAzLjAwI1RpdGFuaXVtIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wNC4wMCNNYWduZXNpdW0gdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA1LjAwI1RpbiB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDYuMDAjQnJhc3MgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA3LjAwI0xlYWQgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA4LjAwI0Jyb256ZSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDkuMDAjWmluYyB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTAuMDAjU3RlZWwgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjExLjAwI0lyb24gdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjEyLjAwI0NlbWVudCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTMuMDAjUGxhc3RpYyB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTQuMDAjUnViYmVyIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xNS4wMCNHbGFzcyB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTYuMDAjU3RvbmUgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE3LjAwI05vbiBmZXJyb3VzIGFsbG95IHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xOC4wMCNBbHVtaW51bSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTkuMDAjU3RhaW5sZXNzIHN0ZWVsIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4yMC4wMCNQcmVjaW91cyBtZXRhbCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjguMDAuMDAjUGlsaW5nIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI4LjAxLjAwI0FsdW1pbnVtIHBpbGluZ3MjMzAuMTAuMjguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjguMDIuMDAjQ29uY3JldGUgcGlsaW5ncyMzMC4xMC4yOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOC4wMy4wMCNTdGVlbCBwaWxpbmdzIzMwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjAwLjAwI1Bvc3QjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDEuMDAjQ2VtZW50IG9yIGNvbmNyZXRlIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjAyLjAwI1N0ZWVsIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjAzLjAwI01ldGFsIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjA0LjAwI1dvb2RlbiBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wNS4wMCNQbGFzdGljIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjA2LjAwI0ZpYmVyZ2xhc3MgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzAuMDAuMDAjU2hhZnRpbmcjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzAuMDEuMDAjU3RlZWwgc2hhZnRpbmcjMzAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzAuMDIuMDAjU3RhaW5sZXNzIHN0ZWVsIHNoYWZ0aW5nIzMwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMxLjAwLjAwI1JhaWxzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMxLjAxLjAwI1N0ZWVsIHJhaWwjMzAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzEuMDIuMDAjQWx1bWludW0gcmFpbCMzMC4xMC4zMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMS4wMy4wMCNNZXRhbCByYWlsIzMwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjAwLjAwI0dyYXRpbmcjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDEuMDAjU3RlZWwgZ3JhdGluZyMzMC4xMC4zMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wMi4wMCNTdGFpbmxlc3Mgc3RlZWwgZ3JhdGluZyMzMC4xMC4zMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wMy4wMCNBbHVtaW51bSBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjA0LjAwI0ZpYmVyZ2xhc3MgZ3JhdGluZyMzMC4xMC4zMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wNS4wMCNJcm9uIGdyYXRpbmcjMzAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDAuMDAjQmlsbGV0cyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wMS4wMCNBbHVtaW51bSBiaWxsZXQjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDIuMDAjQnJhc3MgYmlsbGV0IzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjAzLjAwI0Jyb256ZSBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA0LjAwI0NvcHBlciBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA1LjAwI0xlYWQgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wNi4wMCNaaW5jIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDcuMDAjU3RlZWwgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wOC4wMCNUaXRhbml1bSBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA5LjAwI01hZ25lc2l1bSBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjEwLjAwI1ByZWNpb3VzIG1ldGFsIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMTEuMDAjTm9uIGZlcnJvdXMgbWV0YWwgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4xMi4wMCNGZXJyb3VzIG1ldGFsIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMTMuMDAjTm9uIG1ldGFsbGljIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDAuMDAjSW5nb3RzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjAxLjAwI0FsdW1pbnVtIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wMi4wMCNCcmFzcyBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDMuMDAjTGVhZCBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDQuMDAjWmluYyBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDUuMDAjU3RlZWwgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA2LjAwI01hZ25lc2l1bSBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDcuMDAjQnJvbnplIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wOC4wMCNDb3BwZXIgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA5LjAwI1RpdGFuaXVtIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4xMC4wMCNQcmVjaW91cyBtZXRhbCBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMTEuMDAjRmVycm91cyBhbGxveSBleHRydXNpb24gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IGV4dHJ1c2lvbiBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMTMuMDAjTm9uIG1ldGFsbGljIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wMC4wMCNIb25leWNvbWIgY29yZSMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wMS4wMCNBbHVtaW51bSBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wMi4wMCNNYWduZXNpdW0gaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDMuMDAjRm9hbSBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wNC4wMCNQbGFzdGljIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA1LjAwI1dvb2RlbiBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wNi4wMCNGZXJyb3VzIG1ldGFsIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA3LjAwI0Jyb256ZSBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wOC4wMCNDb3BwZXIgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDkuMDAjU3RlZWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTAuMDAjTGVhZCBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xMS4wMCNaaW5jIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjEyLjAwI1RpdGFuaXVtIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjEzLjAwI0JyYXNzIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjE0LjAwI05vbiBmZXJyb3VzIG1ldGFsIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjE1LjAwI1ByZWNpb3VzIG1ldGFsIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjAwLjAwI1N0cnVjdHVyYWwgcHJvZHVjdHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDEuMDAjV29vZCBiZWFtcyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wMi4wMCNXb29kIGNvbXBvc2l0ZSBiZWFtcyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wMy4wMCNGcmFtaW5nIGx1bWJlciMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wNC4wMCNXb29kIHNoZWF0aGluZyBvciBzaGVldHMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDUuMDAjV29vZCBwbGFua3MjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDYuMDAjV29vZCB0cnVzc2VzIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjA3LjAwI1dvb2Qgam9pc3RzIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM3LjAwLjAwI0JyYWlkIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjM3LjAxLjAwI1N0YWlubGVzcyBzdGVlbCBicmFpZCMzMC4xMC4zNy4wMC4wMAotdW5zcHNjNyMzMC4xMS4wMC4wMC4wMCNDb25jcmV0ZSBhbmQgY2VtZW50IGFuZCBwbGFzdGVyIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjExLjE1LjAwLjAwI0NvbmNyZXRlIGFuZCBtb3J0YXJzIzMwLjExLjAwLjAwLjAwCi11bnNwc2M3IzMwLjExLjE1LjAxLjAwI0ZvYW1lZCBjb25jcmV0ZSMzMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNS4wMi4wMCNDb25kdWN0aXZlIGNvbmNyZXRlIzMwLjExLjE1LjAwLjAwCi11bnNwc2M3IzMwLjExLjE1LjAzLjAwI0luc3VsYXRpbmcgY29uY3JldGUjMzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDQuMDAjTW9ydGFycyMzMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wMC4wMCNDZW1lbnQgYW5kIGxpbWUjMzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDEuMDAjQ2VtZW50IzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjAyLjAwI0NobG9yaW5hdGVkIGxpbWUjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDMuMDAjSHlkcmF1bGljIGxpbWUjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDQuMDAjSHlkcmF0ZWQgbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNS4wMCNMZWFuIGxpbWUjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDYuMDAjR3JvdXQjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDcuMDAjVW5zbGFrZWQgbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNy4wMC4wMCNQbGFzdGVycyMzMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNy4wMS4wMCNHeXBzdW0gcGxhc3RlciMzMC4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMi4wMC4wMC4wMCNSb2FkcyBhbmQgbGFuZHNjYXBlIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEyLjE1LjAwLjAwI0JpdHVtaW5vdXMgZGVyaXZhdGl2ZXMjMzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTUuMDEuMDAjQ29hbCB0YXIjMzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTUuMDIuMDAjVGFycyMzMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNS4wMy4wMCNDcmVzb3RlIzMwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE2LjAwLjAwI0FzcGhhbHRzIzMwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEyLjE2LjAxLjAwI0FzcGhhbHQjMzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDIuMDAjUGl0Y2gjMzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDMuMDAjR2lsc29uaXRlIzMwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE2LjA0LjAwI0N1dGJhY2sgcHJvZHVjdHMjMzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDUuMDAjTWFuaG9sZSBmcmFtZXMgd2l0aCBjb3ZlcnMjMzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMDAuMDAuMDAjU3RydWN0dXJhbCBidWlsZGluZyBwcm9kdWN0cyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wMC4wMCNCbG9ja3MjMzAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTUuMDEuMDAjQ2VtZW50IGJsb2NrcyMzMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wMi4wMCNDb25jcmV0ZSBibG9ja3MjMzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTUuMDMuMDAjU3RvbmUgYmxvY2tzIzMwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjA0LjAwI0NlcmFtaWMgYmxvY2tzIzMwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjAwLjAwI0JyaWNrcyMzMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNi4wMS4wMCNDZW1lbnQgYnJpY2tzIzMwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjAyLjAwI0NlcmFtaWMgYnJpY2tzIzMwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjAzLjAwI0NvbmNyZXRlIGJyaWNrcyMzMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNi4wNC4wMCNTdG9uZSBicmlja3MjMzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDAuMDAjVGlsZXMgYW5kIGZsYWdzdG9uZXMjMzAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDEuMDAjQ2VtZW50IHRpbGVzIG9yIGZsYWdzdG9uZXMjMzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDIuMDAjU3RvbmUgdGlsZXMgb3IgZmxhZ3N0b25lcyMzMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMy4wMCNDb25jcmV0ZSB0aWxlcyBvciBmbGFnc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjA0LjAwI0NlcmFtaWMgdGlsZXMgb3IgZmxhZ3N0b25lcyMzMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wNS4wMCNIZWFkIHN0b25lcyMzMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNC4wMC4wMC4wMCNJbnN1bGF0aW9uIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjAwLjAwI1RoZXJtYWwgaW5zdWxhdGlvbiMzMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wMS4wMCNXZWF0aGVyIHN0cmlwcGluZyMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wMi4wMCNJbnN1bGF0aW9uIGJsYW5rZXRzIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjAzLjAwI0ZvYW0gaW5zdWxhdGlvbiMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wNC4wMCNJbnN1bGF0aW9uIGJhdHRzIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA1LjAwI1RoZXJtYWwgaW5zdWxhdGlvbiBzbGVldmluZyMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wNi4wMCNMb29zZSBmaWxsIGluc3VsYXRpb24jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDcuMDAjUmlnaWQgYm9hcmQgaW5zdWxhdGlvbiMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wOC4wMCNGaWJlciBpbnN1bGF0aW9uIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA5LjAwI1JlZnJhY3RvcmllcyMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4xMC4wMCNEb29yIHN3ZWVwIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjExLjAwI1dpbmRvdyBmaWxtIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE2LjAwLjAwI1NwZWNpYWx0eSBpbnN1bGF0aW9uIzMwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE0LjE2LjAxLjAwI0Fjb3VzdGljYWwgaW5zdWxhdGlvbiMzMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNi4wMi4wMCNOb24gdGhlcm1hbCBpbnN1bGF0aW9uIHNsZWV2aW5nIzMwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE2LjAzLjAwI0hlYXQgU2hpZWxkcyMzMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4wMC4wMC4wMCNFeHRlcmlvciBmaW5pc2hpbmcgbWF0ZXJpYWxzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjAwLjAwI1Jvb2ZpbmcgbWF0ZXJpYWxzIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjAxLjAwI1JvbGwgcm9vZmluZyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wMi4wMCNSb29mIHZhbGxleXMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDMuMDAjUm9vZmluZyBmYWJyaWNzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA0LjAwI1Jvb2ZpbmcgZmVsdHMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDUuMDAjUm9vZmluZyBtZW1icmFuZXMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDYuMDAjUm9vZmluZyB0aWxlcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wNy4wMCNTaGFrZXMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDguMDAjU2hpbmdsZXMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDkuMDAjVHJ1c3NlcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4xMC4wMCNTbGF0ZSByb29maW5nIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjAwLjAwI1Jvb2ZpbmcgYWNjZXNzb3JpZXMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDEuMDAjUm9vZiBmYXNjaWFzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjAyLjAwI0ZsYXNoaW5ncyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wMy4wMCNHcmF2ZWwgc3RvcHMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDQuMDAjUm9vZmluZyBicnVzaGVzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA1LjAwI1Jvb2ZpbmcgZHJhaW5zIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA2LjAwI1Jvb2ZpbmcgbW9wcyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wNy4wMCNSb29maW5nIHZlbnRzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA4LjAwI1NvZmZpdHMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDkuMDAjUm9vZiBjdXJicyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4xMC4wMCNSb29mIHJpcHBlcnMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDAuMDAjUmFpbiBndXR0ZXJzIGFuZCBhY2Nlc3NvcmllcyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNy4wMS4wMCNEb3duc3BvdXRzIzMwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjAyLjAwI0RyaXAgY2FwcyMzMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNy4wMy4wMCNHdXR0ZXJzIzMwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjA0LjAwI1NwbGFzaGJsb2NrcyMzMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wMC4wMCNTaWRpbmcgYW5kIGV4dGVyaW9yIHdhbGwgbWF0ZXJpYWxzIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjAxLjAwI1NodXR0ZXJzIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjAyLjAwI1NpZGluZyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wMy4wMCNTaWRpbmcgYnV0dCBqb2ludHMjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDQuMDAjU2lkaW5nIGNvcm5lcnMjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDUuMDAjU3R1Y2NvIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjA2LjAwI0dsYXNzIGN1cnRhaW53YWxsaW5nIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE5LjAwLjAwI0ZpbmlzaGluZyBtYXRlcmlhbHMgYW5kIHByb2R1Y3RzIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE5LjAxLjAwI0F3bmluZ3MjMzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTkuMDIuMDAjRXh0ZXJpb3IgdHJpbSBtYXRlcmlhbHMjMzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjAuMDAuMDAjRmVuY2luZyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4yMC4wMS4wMCNNZXRhbCBmZW5jaW5nIzMwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjIwLjAyLjAwI1dvb2QgZmVuY2luZyMzMC4xNS4yMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4yMS4wMC4wMCNTdXJmYWNlIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjIxLjAxLjAwI1Nob3Qgc3RlZWwjMzAuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMDAuMDAuMDAjSW50ZXJpb3IgZmluaXNoaW5nIG1hdGVyaWFscyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wMC4wMCNXYWxsIGZpbmlzaGluZyBtYXRlcmlhbHMjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDEuMDAjV2FsbGJvYXJkIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjAyLjAwI1dhbGxwYXBlcnMjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDMuMDAjRHJ5d2FsbCMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wNC4wMCNDb3JuZXIgZ3VhcmRzIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA1LjAwI1BhbmVscyBvciBwYW5lbGxpbmcjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDYuMDAjUGxhc3RlciMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wNy4wMCNEcnl3YWxsIGpvaW50IGNvbXBvdW5kcyMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wOC4wMCNXYWxscGFwZXIgcm9sbGVyIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE2LjAwLjAwI0NlaWxpbmcgbWF0ZXJpYWxzIzMwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE2LjAxLjAwI0Fjb3VzdGljIGNlaWxpbmcgdGlsZXMjMzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDIuMDAjQ2VpbGluZyBwYW5lbHMjMzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDMuMDAjQ29mZmVycyMzMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wNC4wMCNTdXNwZW5kZWQgY2VpbGluZyBzeXN0ZW1zIzMwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjAwLjAwI0Zsb29yaW5nIzMwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjAxLjAwI0NhcnBldGluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wMi4wMCNXb29kIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjAzLjAwI0xpbm9sZXVtIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjA1LjAwI1J1YmJlciBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wNi4wMCNTdG9uZSBvciB0aWxlIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjA3LjAwI1ZpbnlsIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjA4LjAwI0tub3R0ZWQgY2FycGV0aW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjA5LjAwI1R1ZnRlZCBjYXJwZXRpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTAuMDAjTGFtaW5hdGUgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTEuMDAjT3V0ZG9vciBjYXJwZXRpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTIuMDAjRmxvb3Jpbmcgam9pc3RzIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjEzLjAwI0NhcnBldCBwYWRzIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjE0LjAwI0NvcmsgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTUuMDAjRHVja2JvYXJkcyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xNi4wMCNUaWxlIHNwYWNlcnMjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTguMDAuMDAjQ2FiaW5ldHJ5IzMwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE4LjAxLjAwI0NhYmluZXRzIzMwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE4LjAyLjAwI0NvdW50ZXJ0b3BzIzMwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjAwLjAwI01vbGRpbmcgYW5kIG1pbGx3b3JrIzMwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjAxLjAwI0xvdXZlcnMjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDIuMDAjQ29sdW1ucyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wMy4wMCNXYWluc2NvdGluZyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wNC4wMCNDb3JuaWNlcyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wNS4wMCNEb29yIHN1cnJvdW5kcyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wNi4wMCNNb2xkaW5nIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA3LjAwI1N0YWlycyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wOC4wMCNTdGFpciBwYXJ0cyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4wMC4wMC4wMCNEb29ycyBhbmQgd2luZG93cyBhbmQgZ2xhc3MjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDAuMDAjRG9vcnMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDEuMDAjR2xhc3MgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDIuMDAjU2NyZWVuIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjAzLjAwI1JvbGxpbmcgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDQuMDAjV29vZGVuIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA1LjAwI01ldGFsIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA2LjAwI1N0b3JtIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA3LjAwI0Rvb3IgZnJhbWVzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA4LjAwI1BvY2tldCBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wOS4wMCNSZXZvbHZpbmcgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMTAuMDAjQXV0b21hdGljIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjExLjAwI1N3aW5nIGRvb3IjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMTIuMDAjRG9vciBvcGVuZXJzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjAwLjAwI1dpbmRvd3MjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDQuMDAjRG91YmxlIGh1bmcgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wNS4wMCNTaW5nbGUgaHVuZyB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA2LjAwI0Nhc2VtZW50IHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDcuMDAjSG9yaXpvbnRhbCBzbGlkZXIgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wOC4wMCNUaWx0IG9yIHRyYW5zb20gd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wOS4wMCNGaXhlZCB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjEwLjAwI0JheSB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjExLjAwI0JvdyB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjEyLjAwI1Byb2plY3RlZCB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjEzLjAwI1dpbmRvdyB3YWxscyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4xNC4wMCNXaW5kb3cgc2NyZWVucyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4xNS4wMCNGcmVuY2ggd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wMC4wMCNHbGFzcyBwcm9kdWN0cyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wMS4wMCNQYXZpbmcgYmxvY2tzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjAzLjAwI0JldmVsZWQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDQuMDAjTGVhZGVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA1LjAwI0xhbWluYXRlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wNi4wMCNUZW1wZXJlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wNy4wMCNTYWZldHkgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDguMDAjRmxvYXQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDkuMDAjV2lyZWQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTguMDAuMDAjU2t5bGlnaHRzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE4LjAxLjAwI0ZpeGVkIHNreWxpZ2h0cyMzMC4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOC4wMi4wMCNWZW50ZWQgc2t5bGlnaHRzIzMwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE4LjAzLjAwI1R1YmUgc2t5bGlnaHRzIzMwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjAwLjAwI1dpbmRvdyBmcmFtZXMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDEuMDAjRG91YmxlIGh1bmcgd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wMi4wMCNTaW5nbGUgaHVuZyB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjAzLjAwI0Nhc2VtZW50IHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDQuMDAjSG9yaXpvbnRhbCBzbGlkZXIgd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wNS4wMCNUaWx0IG9yIHRyYW5zb20gd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wNi4wMCNGaXhlZCB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjIwLjAwLjAwI0dhdGVzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjIwLjAxLjAwI1NpbmdsZSBiYXIgZ2F0ZSMzMC4xNy4yMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4yMC4wMi4wMCNEb3VibGUgYmFyIGdhdGUjMzAuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTguMDAuMDAuMDAjUGx1bWJpbmcgZml4dHVyZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDAuMDAjU2FuaXRhcnkgd2FyZSMzMC4xOC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wMS4wMCNCYXRodHVicyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wMi4wMCNCaWRldHMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDMuMDAjU2hvd2VycyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wNC4wMCNTaW5rcyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wNS4wMCNUb2lsZXRzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA2LjAwI1VyaW5hbHMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDcuMDAjQmF0aHR1YiBvciBzaG93ZXIgZW5jbG9zdXJlcyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wOC4wMCNSZXN0cm9vbSBwYXJ0aXRpb25zIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA5LjAwI1NvYXAgZGlzaGVzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjEwLjAwI05hcGtpbiByaW5ncyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4wMC4wMC4wMCNDb25zdHJ1Y3Rpb24gYW5kIG1haW50ZW5hbmNlIHN1cHBvcnQgZXF1aXBtZW50IzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjAwLjAwI0xhZGRlcnMgYW5kIHNjYWZmb2xkaW5nIzMwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjAxLjAwI0xhZGRlcnMjMzAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDIuMDAjU2NhZmZvbGRpbmcjMzAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDMuMDAjU3RlcCBzdG9vbCMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wNC4wMCNTdGVwIHN0b29sIzMwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjA1LjAwI1N0ZXAgc3Rvb2wjMzAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTYuMDAuMDAjTGFkZGVycyBhbmQgc2NhZmZvbGRpbmcgYWNjZXNzb3JpZXMjMzAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTYuMDEuMDAjSGFuZHJhaWxzIzMwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE2LjAyLjAwI1NjYWZmb2xkaW5nIHN0YWJpbGl6ZXJzIzMwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE2LjAzLjAwI1NjYWZmb2xkaW5nIGZsb29yaW5nIzMwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjAwLjAwLjAwI1ByZWZhYnJpY2F0ZWQgc3RydWN0dXJlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNS4wMC4wMCNQcmVmYWJyaWNhdGVkIGZhcm0gc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNS4wMS4wMCNTaWxvcyMzMC4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNS4wMi4wMCNHcmVlbmhvdXNlcyMzMC4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wMC4wMCNQcmVmYWJyaWNhdGVkIHJlc2lkZW50aWFsIHN0cnVjdHVyZXMjMzAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDEuMDAjSG91c2VzIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjAyLjAwI01vYmlsZSBob21lcyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wMy4wMCNDYWJpbnMjMzAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDQuMDAjR2FyYWdlcyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wNS4wMCNHYXplYm8jMzAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDAuMDAjUHJlZmFicmljYXRlZCBjb21tZXJjaWFsIGFuZCBpbmR1c3RyaWFsIHN0cnVjdHVyZXMjMzAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDEuMDAjSW4gcGxhbnQgb2ZmaWNlcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMi4wMCNTcHJheSBib290aHMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDMuMDAjU3RvcmFnZSBzaGVkcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wNC4wMCNDbGVhbiByb29tcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wNS4wMCNHdWFyZGhvdXNlcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wNi4wMCNQb3J0YWJsZSB0b2lsZXR0ZXMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDcuMDAjV2FyZWhvdXNlcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wOC4wMCNBdWRpdG9yaXVtIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA5LjAwI0NvbnNlcnZhdG9yeSMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4xMC4wMCNPZmZpY2Uga2l0Y2hlbnMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTguMDAuMDAjUHJlZmFicmljYXRlZCBlbWVyZ2VuY3kgcmVsaWVmIHN0cnVjdHVyZXMjMzAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTguMDEuMDAjU2hlbHRlcnMjMzAuMjAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTguMDIuMDAjRW1lcmdlbmN5IHRlbnQgaGFsbHMjMzAuMjAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTguMDMuMDAjQ29udGFpbmVyIHVuaXRzIzMwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE5LjAwLjAwI1ByZWZhYnJpY2F0ZWQgbWVkaWNhbCBzdHJ1Y3R1cmVzIzMwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE5LjAxLjAwI01lZGljYWwgdW5pdHMjMzAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDIuMDAjTGFib3JhdG9yeSB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wMy4wMCNEZW50YWwgdW5pdHMjMzAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDQuMDAjU3VyZ2ljYWwgdW5pdHMjMzAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMDAuMDAuMDAjRWxlY3RyaWNhbCBlcXVpcG1lbnQgYW5kIGNvbXBvbmVudHMgYW5kIHN1cHBsaWVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjAwLjAwI1Bvd2VyIGNvbnZlcnNpb24jMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDEuMDAjVHJhbnNmb3JtZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjAyLjAwI1Bvd2VyIHN1cHBseSB1bml0cyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wMy4wMCNQb3dlciBkaXN0cmlidXRpb24gdW5pdHMgKFBEVXMpIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA0LjAwI1Bvd2VyIGFkYXB0ZXJzIG9yIGludmVydGVycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wNS4wMCNGcmVxdWVuY3kgY29udmVydGVycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wNi4wMCNTaWduYWwgY29udmVydGVycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wNy4wMCNUcmFuc2R1Y2VycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wOC4wMCNSZWd1bGF0b3JzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA5LjAwI01hZ25ldGljIGNvaWxzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjEwLjAwI1VuaW50ZXJydXB0aWJsZSBwb3dlciBzdXBwbGllcyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xMS4wMCNTb2xlbm9pZHMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTIuMDAjQ2hva2VzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjEzLjAwI0VsZWN0cmljIHJvdGFyeSBjb252ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjE0LjAwI0NhcGFjaXRvciBiYW5rcyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xNS4wMCNSZWFjdG9ycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wMC4wMCNDb25kdWl0cyBhbmQgcmFjZXdheXMjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDEuMDAjQ2FibGUgdHJheXMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDIuMDAjRWxlY3RyaWNhbCBjb25kdWl0IzMwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjAzLjAwI0VsZWN0cmljYWwgcmFjZXdheXMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDQuMDAjV2lyaW5nIGR1Y3RzIzMwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjA1LjAwI1dpcmV3YXlzIzMwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjA2LjAwI1dpcmluZyB0cm91Z2hzIzMwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjAwLjAwI0VsZWN0cmljYWwgYm94ZXMgYW5kIGVuY2xvc3VyZXMgYW5kIGZpdHRpbmdzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjAxLjAwI0VsZWN0cmljYWwgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDIuMDAjRWxlY3RyaWNhbCBib3ggY292ZXJzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjAzLjAwI1dlYXRoZXJwcm9vZiBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wNC4wMCNTd2l0Y2ggYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDUuMDAjRmxvb3IgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDYuMDAjT3V0bGV0IGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA3LjAwI1NwZWNpYWx0eSBlbGVjdHJpY2FsIGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA4LjAwI1V0aWxpdHkgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDkuMDAjRWxlY3RyaWNhbCBmaXR0aW5ncyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4xMC4wMCNFbGVjdHJpY2FsIGJ1c2hpbmdzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjExLjAwI0NlaWxpbmcgZmxhbmdlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wMC4wMCNMdWdzIGNvbm5lY3RvcnMgYW5kIHRlcm1pbmFscyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wMS4wMCNFbGVjdHJpY2FsIHRlcm1pbmFscyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wMi4wMCNFbGVjdHJpY2FsIHBsdWdzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAzLjAwI1R3aXN0IGxvY2sgcGx1Z3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDQuMDAjRWxlY3RyaWNhbCBzbGVldmVzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA1LjAwI0NhYmxlIG9yIHdpcmUgbHVncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wNi4wMCNFbGVjdHJpY2FsIHJlY2VwdGFjbGVzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA3LjAwI1Rlcm1pbmFsIHN0cmlwcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wOC4wMCNNZWNoYW5pY2FsIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDkuMDAjUmluZyBvciBmbGFnIHRlcm1pbmFscyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xMC4wMCNXaXJlIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTEuMDAjVGVybWluYWwgYmxvY2tzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjEyLjAwI0Z1c2UgYmxvY2tzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjEzLjAwI0JhY2tzaGVsbCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE0LjAwI0NpcmN1bGFyIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTUuMDAjQ29heGlhbCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE2LjAwI0ZsYXQgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xNy4wMCNFbGVjdHJvbmljIGNvbm5lY3RvciBjYXBzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE4LjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTkuMDAjRWxlY3RyaWNhbCBtZXRhbGxpYyB0dWJpbmcgKEVNVCkgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yMC4wMCNDb21wcmVzc2lvbiBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjIxLjAwI1NldCBzY3JldyBjb3VwbGluZ3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjIuMDAjRmxleCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjIzLjAwI0xpcXVpZCB0aWdodCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI0LjAwI0Nvbm5lY3RvciBhc3NlbWJsaWVzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI1LjAwI01lY2hhbmljYWwgY291cGxpbmdzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI2LjAwI1NwcmluZyBqYXcgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yNy4wMCNUZXJtaW5hbCBibG9jayBjb3ZlcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjguMDAjVGVybWluYWwgYmxvY2sgc2VwYXJhdG9yIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI5LjAwI0p1bXBlciBiYXIjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMzAuMDAjV2lyaW5nIHRhcHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMzEuMDAjRWxlY3RyaWNhbCB0YXBzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjMyLjAwI0ZpYmVyIG9wdGljIGNvbm5lY3RvciMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wMC4wMCNTd2l0Y2hlcyBhbmQgY29udHJvbHMgYW5kIHJlbGF5cyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wMS4wMCNTYWZldHkgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDIuMDAjRGltbWVyIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjAzLjAwI0RydW0gc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDQuMDAjVGltZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wNS4wMCNTbmFwIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA2LjAwI01lY2hhbmljYWwgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDcuMDAjUHJlc3N1cmUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDguMDAjVG9nZ2xlIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA5LjAwI1NsaWRlIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjEwLjAwI0xpbWl0IHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjExLjAwI0NvbnRyb2xsZXIgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTIuMDAjVmFyaWFibGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTMuMDAjUHVzaCBidXR0b24gc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTQuMDAjUm90YXJ5IHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE1LjAwI1Bvd2VyIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xNi4wMCNHZW5lcmFsIHB1cnBvc2UgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE3LjAwI1NvY2tldCByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTguMDAjQWx0ZXJuYXRpbmcgdm9sdGFnZSByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTkuMDAjTWVyY3VyeSByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjAuMDAjVGltZSByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjEuMDAjT3ZlcmxvYWQgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjIyLjAwI01vdG9yIHN0YXJ0ZXIgY29udHJvbHMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjMuMDAjRWxlY3RyaWNhbCBjb250YWN0cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yNC4wMCNUaW1lciBjb250cm9scyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yNS4wMCNQaG90b2NvbnRyb2xzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI2LjAwI05vbiBmdXNpYmxlIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI3LjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI4LjAwI1Byb3hpbWl0eSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yOS4wMCNFbmNvZGVycyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4zMC4wMCNQaG90b2VsZWN0cmljIHNlbnNvcnMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMzEuMDAjQ29udGFjdG9ycyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wMC4wMCNDaXJjdWl0IHByb3RlY3Rpb24gZGV2aWNlcyBhbmQgYWNjZXNzb3JpZXMjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDEuMDAjQ2lyY3VpdCBicmVha2VycyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wMi4wMCNNYWduZXRpYyBjaXJjdWl0IGJyZWFrZXJzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjAzLjAwI01pbmlhdHVyZSBjaXJjdWl0IGJyZWFrZXJzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA0LjAwI1RpbWUgZGVsYXkgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDUuMDAjUGx1ZyBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wNi4wMCNDYXJ0cmlkZ2UgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDcuMDAjR2xhc3MgYm9keSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wOC4wMCNDbGFzcyB0eXBlIGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA5LjAwI01pZGdldCBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4xMC4wMCNTdXJnZSBzdXBwcmVzc2VycyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4xMS4wMCNDZXJhbWljIGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjEyLjAwI0JsYWRlIGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjAwLjAwI0VsZWN0cmljYWwgaGFyZHdhcmUgYW5kIHN1cHBsaWVzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjAxLjAwI0VsZWN0cmljYWwgaGFuZ2VycyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wMi4wMCNDYWJsZSBjbGlwcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wMy4wMCNDYWJsZSB0aWVzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA0LjAwI1dhbGxwbGF0ZXMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDUuMDAjU3dpdGNocGxhdGVzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA2LjAwI0NhYmxlIGNsYW1wcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wNy4wMCNUcmFuc2Zvcm1lciBidXNoaW5ncyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wOC4wMCNIYXJuZXNzIGJvYXJkIG5haWxzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA5LjAwI0RpbiBSYWlsIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjEwLjAwI0hhbmRsZSB0aWUjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTEuMDAjRWxlY3RyaWNhbCByZWNlcHRhY2xlIG11bHRpcGxpZXJzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjEyLjAwI1R1YmluZ3MjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTMuMDAjRW5kIGNhcHMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTQuMDAjU3BpcmFsIHdyYXBwaW5nIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjE1LjAwI0dyb21tZXQgZWRnaW5nIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjE2LjAwI0NvcnJ1Z2F0ZWQgbG9vbSB0dWJlcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xNy4wMCNFeHBhbmRhYmxlIGJyYWlkZWQgc2xlZXZlIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjE4LjAwI0NhYmxlIHRpZSBtb3VudHMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMDAuMDAuMDAjUGVybWFuZW50IHN0cnVjdHVyZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDAuMDAjQ29tbWVyY2lhbCBhbmQgZW50ZXJ0YWlubWVudCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjAxLjAwI1Nob3BwaW5nIG1hbGxzIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjAyLjAwI1Bhcmtpbmcgc3RydWN0dXJlcyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wMy4wMCNDYWZldGVyaWEjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDQuMDAjU2hvcCBidWlsZGluZ3MjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDUuMDAjU2hvcHBpbmcgY2VudGVyIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA2LjAwI0NhbnRlZW4jMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDcuMDAjVGhlYXRlciMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wOC4wMCNBdWRpdG9yaXVtIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA5LjAwI01hcmtldCMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4xMC4wMCNDaGlsZHJlbnMgcGxheSBhcmVhIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjExLjAwI1pvbyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4xMi4wMCNHYXJkZW5zIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjEzLjAwI1BhcmtzIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjE0LjAwI1dhdGVyc2lkZSBsZWlzdXJlIGZhY2lsaXRpZXMjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDAuMDAjVHJhbnNwb3J0IHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDEuMDAjU3RlZWwgYnJpZGdlcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wMi4wMCNEcnkgZG9jayMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wMy4wMCNCdXMgc3RhdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wNC4wMCNCdXMgZ2FyYWdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA1LjAwI1NlcnZpY2UgYXJlYSBidWlsZGluZyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wNi4wMCNSYWlsd2F5IHN0YXRpb24jMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDcuMDAjUmFpbHdheSBkZXBvdCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wOC4wMCNVbmRlcmdyb3VuZCByYWlsd2F5IHN0YXRpb24jMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDkuMDAjUmFpbCB0ZXJtaW5hbCBidWlsZGluZyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xMC4wMCNUcmFtd2F5IGRlcG90IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjExLjAwI1RyYW13YXkgcGxhdGZvcm1zIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjEyLjAwI0FpcnBvcnQgYnVpbGRpbmdzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjEzLjAwI0FpcnBvcnQgY29udHJvbCB0b3dlciMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xNC4wMCNBaXJmaWVsZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xNS4wMCNSdW53YXkjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTYuMDAjUXVheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xNy4wMCNQaWVyIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE4LjAwI0RvY2sjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTkuMDAjV2hhcmYjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjAuMDAjTWFyaW5hIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjIxLjAwI1lhY2h0IGhhcmJvciMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yMi4wMCNCcmVha3dhdGVyIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjIzLjAwI1NlYXdhbGwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjQuMDAjRmVycnkgdGVybWluYWwgYnVpbGRpbmcjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjUuMDAjUm8gcm8gdGVybWluYWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjYuMDAjTGlnaHRob3VzZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNy4wMCNSb2FkIGJyaWRnZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yOC4wMCNSYWlsd2F5IGJyaWRnZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yOS4wMCNGb290YnJpZGdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjMwLjAwI1JvYWQgdmlhZHVjdCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zMS4wMCNSYWlsd2F5IHZpYWR1Y3QjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzIuMDAjVW5kZXJwYXNzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjMzLjAwI092ZXJwYXNzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM0LjAwI1N1YndheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zNS4wMCNDdWx2ZXJ0cyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zNi4wMCNSb2FkIHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zNy4wMCNSYWlsd2F5IHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zOC4wMCNQZWRlc3RyaWFuIHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zOS4wMCNDYW5hbCB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDAuMDAjVW5kZXIgcml2ZXIgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQxLjAwI1VuZGVyc2VhIHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40Mi4wMCNIaWdod2F5cyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40My4wMCNDcm9zc3JvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDQuMDAjUmluZyByb2FkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQ1LjAwI1RydW5rIHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDYuMDAjU2Vjb25kYXJ5IHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDcuMDAjQWNjZXNzIHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDguMDAjU2xpcCByb2FkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQ5LjAwI0R1YWwgY2FycmlhZ2V3YXkjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTAuMDAjU2luZ2xlIGNhcnJpYWdld2F5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjUxLjAwI1JvYWQganVuY3Rpb24jMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTIuMDAjUGVkZXN0cmlhbiB3YXlzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjUzLjAwI1BlZGVzdHJpYW4gb3ZlcnBhc3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTQuMDAjRm9vdHBhdGgjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTUuMDAjQ3ljbGUgcGF0aCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41Ni4wMCNQaXBlbGluZSBjYXJyeWluZyBicmlkZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTcuMDAjUGlwZWxpbmVzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU4LjAwI1B1bXBpbmcgc3RhdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41OS4wMCNTZXdhZ2UgcHVtcGluZyBzdGF0aW9ucyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC42MC4wMCNTZXdhZ2Ugb3V0ZmFsbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC42MS4wMCNQYXJraW5nIGxvdCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC42Mi4wMCNQYXJraW5nIHN0cnVjdHVyZXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNjMuMDAjTW90b3J3YXkgc2VydmljZSBhcmVhIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjAwLjAwI1B1YmxpYyBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjAxLjAwI1Bvc3Qgb2ZmaWNlIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjAyLjAwI0JhbmsjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDMuMDAjUG9saWNlIHN0YXRpb24jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDQuMDAjQ291cnQgYnVpbGRpbmcjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDUuMDAjUHJpc29uIGJ1aWxkaW5nIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA2LjAwI0ZpcmUgc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wNy4wMCNBbWJ1bGFuY2Ugc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wOC4wMCNNb3VudGFpbiByZXNjdWUgYnVpbGRpbmcjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDkuMDAjTGlmZWJvYXQgc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xMC4wMCNDb2FzdGd1YXJkIGJ1aWxkaW5nIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjExLjAwI1Jlc2N1ZSBzZXJ2aWNlIHN0YXRpb24jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTIuMDAjQ2l2aWMgY2VudGVyIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjEzLjAwI0NyZW1hdG9yaXVtIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjE0LjAwI0FydCBnYWxsZXJ5IzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjE1LjAwI1ByZWhpc3RvcmljIG1vbnVtZW50IzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjE2LjAwI1RpY2tldCBvZmZpY2VzIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjAwLjAwI1V0aWxpdGllcyBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjAxLjAwI1JhZGFyIHN0YXRpb24jMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDIuMDAjU3Vic3RhdGlvbiMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wMy4wMCNOdWNsZWFyIHBvd2VyIHN0YXRpb24jMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDQuMDAjV2F0ZXIgdG93ZXIjMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDUuMDAjV2VsbHMjMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDYuMDAjTW9iaWxlIHRlbGVwaG9uZSBiYXNlIHN0YXRpb25zIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjA3LjAwI0RhbSMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wOC4wMCNPaWwgb3IgZ2FzIHBsYXRmb3JtcyMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wMC4wMCNFZHVjYXRpb25hbCBhbmQgcmVzZWFyY2ggc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wMS4wMCNTY2hvb2xzIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjAyLjAwI1BvbHl0ZWNobmljIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjAzLjAwI1ZvY2F0aW9uYWwgY29sbGVnZSMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wNC4wMCNMZWN0dXJlIHRoZWF0ZXIjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDUuMDAjTGlicmFyeSMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wNi4wMCNMYW5ndWFnZSBsYWJvcmF0b3J5IzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA3LjAwI0xhYm9yYXRvcnkgYnVpbGRpbmcjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDguMDAjTWV0ZW9yb2xvZ2ljYWwgc3RhdGlvbnMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDkuMDAjUmVzZWFyY2ggb3IgdGVzdGluZyBmYWNpbGl0aWVzIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjAwLjAwI0hvc3BpdGFsIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDEuMDAjQ2xpbmljIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjAyLjAwI051cnNpbmcgaG9tZSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wMy4wMCNPcGVyYXRpbmcgdGhlYXRlciMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wNC4wMCNJbnRlbnNpdmUgY2FyZSB1bml0IzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA1LjAwI0RpYWdub3N0aWMgc2NyZWVuaW5nIHJvb20jMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDYuMDAjU2NyZWVuaW5nIHJvb21zIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA3LjAwI0ZsdW9yb3Njb3B5IHJvb20jMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDguMDAjUGF0aG9sb2d5IHJvb20jMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDkuMDAjQ2F0aGV0ZXIgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMC4wMCNBY2NvbW1vZGF0aW9uIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDEuMDAjUmVzaWRlbnRpYWwgaG9tZXMjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDIuMDAjRmxhdHMjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDMuMDAjQ2hpbGRyZW5zIGhvbWUjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDQuMDAjRGF5Y2FyZSBjZW50ZXIjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDUuMDAjUmV0aXJlbWVudCBob21lIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjA2LjAwI09sZCBwZW9wbGVzIGhvbWUjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDcuMDAjSG9zdGVsIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjAwLjAwI1Nwb3J0cyBhbmQgaGVhbHRoIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDEuMDAjU3RhZGl1bSMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wMi4wMCNTcG9ydHMgZ3JvdW5kIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjAzLjAwI1J1bm5pbmcgdHJhY2sjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDQuMDAjU3BvcnRzIGhhbGwjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDUuMDAjU3BhIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjA2LjAwI0d5bW5hc2l1bSMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wNy4wMCNTd2ltbWluZyBwb29sIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjA4LjAwI1dhdGVyIHNwb3J0cyBmYWNpbGl0aWVzIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI3LjAwLjAwI0luZHVzdHJpYWwgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNy4wMS4wMCNXb3Jrc2hvcHMjMzAuMjIuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjcuMDIuMDAjQ29sZCBzdG9yYWdlIGluc3RhbGxhdGlvbnMjMzAuMjIuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjcuMDMuMDAjV2FyZWhvdXNlIHN0b3JlcyMzMC4yMi4yNy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOC4wMC4wMCNBZ3JpY3VsdHVyYWwgYW5kIGZhcm1pbmcgYW5kIGZpc2hpbmcgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOC4wMS4wMCNCYXJuIzMwLjIyLjI4LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI4LjAyLjAwI0Nvd3NoZWRzIzMwLjIyLjI4LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI4LjAzLjAwI0lycmlnYXRpb24gY2hhbm5lbCMzMC4yMi4yOC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wMC4wMCNEZWZlbnNlIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjkuMDEuMDAjTWlsaXRhcnkgYnVua2VyIzMwLjIyLjI5LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI5LjAyLjAwI01pbGl0YXJ5IHNoZWx0ZXIjMzAuMjIuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjkuMDMuMDAjQmFycmFja3MjMzAuMjIuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjkuMDQuMDAjTWlsaXRhcnkgbWVzcyMzMC4yMi4yOS4wMC4wMAotdW5zcHNjNyMzMC4yMi4zMC4wMC4wMCNSZWxpZ2lvdXMgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4zMC4wMS4wMCNDaHVyY2hlcyMzMC4yMi4zMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4zMC4wMi4wMCNUZW1wbGVzIzMwLjIyLjMwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAzLjAwI01vc3F1ZXMjMzAuMjIuMzAuMDAuMDAKLXVuc3BzYzcjMzEuMDAuMDAuMDAuMDAjTWFudWZhY3R1cmluZyBDb21wb25lbnRzIGFuZCBTdXBwbGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4wMC4wMC4wMCNDYXN0aW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wMC4wMCNEaWUgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDEuMDAjQWx1bWludW0gZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjAyLjAwI0ZlcnJvdXMgYWxsb3kgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjAzLjAwI0lyb24gZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA0LjAwI05vbiBmZXJyb3VzIGFsbG95IGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA2LjAwI1N0ZWVsIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wNy4wMCNNYWduZXNpdW0gZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA4LjAwI1ppbmMgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA5LjAwI1RpbiBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTAuMDAjVGl0YW5pdW0gZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjExLjAwI0JlcnlsbGl1bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTIuMDAjUHJlY2lvdXMgbWV0YWwgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjEzLjAwI0NvcHBlciBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTQuMDAjTGVhZCBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTUuMDAjQnJhc3MgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjE2LjAwI0Jyb256ZSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDAuMDAjU2FuZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjAyLjAwI0ZlcnJvdXMgYWxsb3kgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wMy4wMCNTdGVlbCBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA1LjAwI0lyb24gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wNi4wMCNBbHVtaW51bSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA3LjAwI01hZ25lc2l1bSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA4LjAwI1RpdGFuaXVtIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDkuMDAjQmVyeWxsaXVtIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTAuMDAjQ29wcGVyIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTEuMDAjQnJhc3Mgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xMi4wMCNCcm9uemUgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xMy4wMCNaaW5jIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTQuMDAjVGluIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTUuMDAjTGVhZCBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjE2LjAwI1ByZWNpb3VzIG1ldGFsIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDAuMDAjUGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDIuMDAjRmVycm91cyBhbGxveSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMy4wMCNTdGVlbCBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDUuMDAjSXJvbiBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wNi4wMCNBbHVtaW51bSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wNy4wMCNNYWduZXNpdW0gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDguMDAjVGl0YW5pdW0gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDkuMDAjQmVyeWxsaXVtIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjEwLjAwI0NvcHBlciBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xMS4wMCNCcmFzcyBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xMi4wMCNCcm9uemUgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTMuMDAjWmluYyBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xNC4wMCNUaW4gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTUuMDAjTGVhZCBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xNi4wMCNQcmVjaW91cyBtZXRhbCBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wMC4wMCNTaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDIuMDAjRmVycm91cyBhbGxveSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjAzLjAwI1N0ZWVsIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDUuMDAjSXJvbiBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA2LjAwI0FsdW1pbnVtIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDcuMDAjTWFnbmVzaXVtIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDguMDAjVGl0YW5pdW0gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wOS4wMCNCZXJ5bGxpdW0gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xMC4wMCNDb3BwZXIgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xMS4wMCNCcmFzcyBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjEyLjAwI0Jyb256ZSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjEzLjAwI1ppbmMgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xNC4wMCNUaW4gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xNS4wMCNMZWFkIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTYuMDAjUHJlY2lvdXMgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wMC4wMCNJbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDIuMDAjRmVycm91cyBhbGxveSBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjAzLjAwI1N0ZWVsIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDUuMDAjSXJvbiBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjA2LjAwI0FsdW1pbnVtIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDcuMDAjTWFnbmVzaXVtIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDguMDAjWmluYyBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjA5LjAwI1RpbiBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjEwLjAwI0xlYWQgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4xMS4wMCNQcmVjaW91cyBtZXRhbCBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjEyLjAwI1RpdGFuaXVtIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDAuMDAjQ2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDIuMDAjRmVycm91cyBhbGxveSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMy4wMCNTdGVlbCBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDUuMDAjSXJvbiBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wNi4wMCNBbHVtaW51bSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wNy4wMCNNYWduZXNpdW0gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDguMDAjVGl0YW5pdW0gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDkuMDAjQmVyeWxsaXVtIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjEwLjAwI0NvcHBlciBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xMS4wMCNCcmFzcyBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xMi4wMCNCcm9uemUgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTMuMDAjWmluYyBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xNC4wMCNUaW4gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTUuMDAjTGVhZCBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xNi4wMCNQcmVjaW91cyBtZXRhbCBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wMC4wMCNDZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjAzLjAwI1N0ZWVsIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA1LjAwI0lyb24gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA2LjAwI0FsdW1pbnVtIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wNy4wMCNNYWduZXNpdW0gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA4LjAwI1RpdGFuaXVtIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wOS4wMCNCZXJ5bGxpdW0gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjEwLjAwI0NvcHBlciBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTEuMDAjQnJhc3MgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjEyLjAwI0Jyb256ZSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTMuMDAjWmluYyBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTQuMDAjVGluIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xNS4wMCNMZWFkIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xNi4wMCNQcmVjaW91cyBtZXRhbCBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDAuMDAjR3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjAyLjAwI0ZlcnJyb3VzIGFsbG95IGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDMuMDAjU3RlZWwgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wNS4wMCNJcm9uIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDYuMDAjQWx1bWludW0gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wNy4wMCNNYWduZXNpdW0gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wOC4wMCNUaXRhbml1bSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA5LjAwI0JlcnlsbGl1bSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjEwLjAwI0NvcHBlciBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjExLjAwI0JyYXNzIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTIuMDAjQnJvbnplIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTMuMDAjWmluYyBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjE0LjAwI1RpbiBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjE1LjAwI0xlYWQgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xNi4wMCNQcmVjaW91cyBtZXRhbCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjAwLjAwI1BsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDIuMDAjRmVycm91cyBhbGxveSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDMuMDAjU3RlZWwgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDUuMDAjSXJvbiBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDYuMDAjQWx1bWludW0gcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjA3LjAwI01hZ25lc2l1bSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDguMDAjVGl0YW5pdW0gcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjA5LjAwI0JlcnlsbGl1bSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTAuMDAjQ29wcGVyIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xMS4wMCNCcmFzcyBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTIuMDAjQnJvbnplIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xMy4wMCNaaW5jIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xNC4wMCNUaW4gcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjE1LjAwI0xlYWQgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjE2LjAwI1ByZWNpb3VzIG1ldGFsIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wMC4wMCNWIHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjAyLjAwI0ZlcnJvdXMgYWxsb3kgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjAzLjAwI1N0ZWVsIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA1LjAwI0lyb24gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA2LjAwI0FsdW1pbnVtIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wNy4wMCNNYWduZXNpdW0gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA4LjAwI1RpdGFuaXVtIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wOS4wMCNCZXJ5bGxpdW0gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjEwLjAwI0NvcHBlciB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTEuMDAjQnJhc3MgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjEyLjAwI0Jyb256ZSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTMuMDAjWmluYyB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTQuMDAjVGluIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xNS4wMCNMZWFkIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xNi4wMCNQcmVjaW91cyBtZXRhbCB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMDAuMDAuMDAjRXh0cnVzaW9ucyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wMC4wMCNQcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDEuMDAjQWx1bWludW0gcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjAyLjAwI0JlcnlsbGl1bSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDMuMDAjQnJhc3MgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA0LjAwI0Jyb256ZSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDUuMDAjQ29wcGVyIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wNi4wMCNGZXJyb3VzIGFsbG95IHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wNy4wMCNMZWFkIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wOC4wMCNNYWduZXNpdW0gcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xMC4wMCNQbGFzdGljIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xMS4wMCNQcmVjaW91cyBtZXRhbCBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTIuMDAjUnViYmVyIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjE0LjAwI1N0ZWVsIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xNS4wMCNUaW4gcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjE2LjAwI1RpdGFuaXVtIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xNy4wMCNaaW5jIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wMC4wMCNJbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wMS4wMCNBbHVtaW51bSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wMi4wMCNCZXJ5bGxpdW0gaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDMuMDAjQnJhc3MgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDQuMDAjQnJvbnplIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA1LjAwI0NvcHBlciBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wNi4wMCNGZXJyb3VzIGFsbG95IGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA3LjAwI0xlYWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDguMDAjTWFnbmVzaXVtIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjEwLjAwI1BsYXN0aWMgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTEuMDAjUHJlY2lvdXMgbWV0YWwgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTIuMDAjUnViYmVyIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xNC4wMCNTdGVlbCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xNS4wMCNUaW4gaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTYuMDAjVGl0YW5pdW0gaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTcuMDAjWmluYyBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wMC4wMCNDb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDEuMDAjQWx1bWludW0gY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjAyLjAwI0JlcnlsbGl1bSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDMuMDAjQnJhc3MgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA0LjAwI0Jyb256ZSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDUuMDAjQ29wcGVyIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wNi4wMCNGZXJyb3VzIGFsbG95IGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wNy4wMCNMZWFkIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wOC4wMCNNYWduZXNpdW0gY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xMC4wMCNQbGFzdGljIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xMS4wMCNQcmVjaW91cyBtZXRhbCBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTIuMDAjUnViYmVyIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjE0LjAwI1N0ZWVsIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xNS4wMCNUaW4gY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjE2LjAwI1RpdGFuaXVtIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xNy4wMCNaaW5jIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4wMC4wMC4wMCNNYWNoaW5lZCBjYXN0aW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wMC4wMCNNYWNoaW5lZCB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjAyLjAwI0ZlcnJvdXMgYWxsb3kgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjAzLjAwI1N0ZWVsIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA1LjAwI0lyb24gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA2LjAwI0FsdW1pbnVtIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wNy4wMCNNYWduZXNpdW0gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA4LjAwI1RpdGFuaXVtIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wOS4wMCNCZXJ5bGxpdW0gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjEwLjAwI0NvcHBlciB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTEuMDAjQnJhc3MgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjEyLjAwI0Jyb256ZSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTMuMDAjWmluYyB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTQuMDAjVGluIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xNS4wMCNMZWFkIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xNi4wMCNQcmVjaW91cyBtZXRhbCB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTcuMDAjQ29tcG9zaXRlIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xOC4wMCNOaWNrZWwgYWxsb3kgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE5LjAwI05vbiBtZXRhbGxpYyB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDAuMDAjTWFjaGluZWQgZGllIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjAxLjAwI0FsdW1pbnVtIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wMi4wMCNGZXJyb3VzIGFsbG95IGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wMy4wMCNJcm9uIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wNC4wMCNOb24gZmVycm91cyBhbGxveSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wNi4wMCNTdGVlbCBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDcuMDAjTWFnbmVzaXVtIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wOC4wMCNaaW5jIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wOS4wMCNUaW4gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjEwLjAwI1RpdGFuaXVtIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xMS4wMCNCZXJ5bGxpdW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjEyLjAwI1ByZWNpb3VzIG1ldGFsIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xMy4wMCNDb3BwZXIgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE0LjAwI0xlYWQgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE1LjAwI0JyYXNzIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xNi4wMCNCcm9uemUgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE3LjAwI0NvbXBvc2l0ZSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTguMDAjTmlja2VsIEFsbG95IGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xOS4wMCNOb24gbWV0YWxsaWMgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjAwLjAwI01hY2hpbmVkIHNhbmQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wMi4wMCNGZXJyb3VzIGFsbG95IHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDMuMDAjU3RlZWwgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wNS4wMCNJcm9uIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDYuMDAjQWx1bWludW0gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wNy4wMCNNYWduZXNpdW0gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wOC4wMCNUaXRhbml1bSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA5LjAwI0JlcnlsbGl1bSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjEwLjAwI0NvcHBlciBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjExLjAwI0JyYXNzIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTIuMDAjQnJvbnplIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTMuMDAjWmluYyBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE0LjAwI1RpbiBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE1LjAwI0xlYWQgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xNi4wMCNQcmVjaW91cyBtZXRhbCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE3LjAwI0NvbXBvc2l0ZSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE4LjAwI05pY2tlbCBBbGxveSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE5LjAwI05vbiBtZXRhbGxpYyBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjAwLjAwI01hY2hpbmVkIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjAyLjAwI0ZlcnJvdXMgYWxsb3kgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDMuMDAjU3RlZWwgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjA1LjAwI0lyb24gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDYuMDAjQWx1bWludW0gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDcuMDAjTWFnbmVzaXVtIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjA4LjAwI1RpdGFuaXVtIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjA5LjAwI0JlcnlsbGl1bSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xMC4wMCNDb3BwZXIgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTEuMDAjQnJhc3MgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTIuMDAjQnJvbnplIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjEzLjAwI1ppbmMgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTQuMDAjVGluIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE1LjAwI0xlYWQgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTYuMDAjUHJlY2lvdXMgbWV0YWwgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTcuMDAjQ29tcG9zaXRlIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE4LjAwI05pY2tlbCBhbGxveSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xOS4wMCNOb24gbWV0YWxsaWMgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDAuMDAjTWFjaGluZWQgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wMi4wMCNGZXJyb3VzIGFsbG95IHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wMy4wMCNTdGVlbCBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wNS4wMCNJcm9uIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wNi4wMCNBbHVtaW51bSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDcuMDAjTWFnbmVzaXVtIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wOC4wMCNUaXRhbml1bSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDkuMDAjQmVyeWxsaXVtIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xMC4wMCNDb3BwZXIgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjExLjAwI0JyYXNzIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xMi4wMCNCcm9uemUgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjEzLjAwI1ppbmMgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE0LjAwI1RpbiBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTUuMDAjTGVhZCBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTYuMDAjUHJlY2lvdXMgbWV0YWwgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE3LjAwI0NvbXBvc2l0ZSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTguMDAjTmlja2VsIGFsbG95IHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xOS4wMCNOb24gbWV0YWxsaWMgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjAwLjAwI01hY2hpbmVkIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wMi4wMCNGZXJyb3VzIGFsbG95IHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDMuMDAjU3RlZWwgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wNS4wMCNJcm9uIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDYuMDAjQWx1bWludW0gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wNy4wMCNNYWduZXNpdW0gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wOC4wMCNUaXRhbml1bSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA5LjAwI0JlcnlsbGl1bSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjEwLjAwI0NvcHBlciBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjExLjAwI0JyYXNzIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTIuMDAjQnJvbnplIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTMuMDAjWmluYyBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE0LjAwI1RpbiBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE1LjAwI0xlYWQgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xNi4wMCNQcmVjaW91cyBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE3LjAwI0NvbXBvc2l0ZSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE4LjAwI05pY2tlbCBhbGxveSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE5LjAwI05vbiBtZXRhbGxpYyBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjAwLjAwI01hY2hpbmVkIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wMi4wMCNGZXJyb3VzIGFsbG95IGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDMuMDAjU3RlZWwgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wNS4wMCNJcm9uIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDYuMDAjQWx1bWludW0gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wNy4wMCNNYWduZXNpdW0gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wOC4wMCNaaW5jIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDkuMDAjVGluIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTAuMDAjTGVhZCBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjExLjAwI1ByZWNpb3VzIG1ldGFsIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTIuMDAjVGl0YW5pdW0gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xMy4wMCNDb21wb3NpdGUgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xNC4wMCNOaWNrZWwgYWxsb3kgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xNS4wMCNOb24gbWV0YWxsaWMgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wMC4wMCNNYWNoaW5lZCBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wMi4wMCNGZXJyb3VzIGFsbG95IGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAzLjAwI1N0ZWVsIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wNS4wMCNJcm9uIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA2LjAwI0FsdW1pbnVtIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA3LjAwI01hZ25lc2l1bSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wOC4wMCNUaXRhbml1bSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wOS4wMCNCZXJ5bGxpdW0gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTAuMDAjQ29wcGVyIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjExLjAwI0JyYXNzIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjEyLjAwI0Jyb256ZSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xMy4wMCNaaW5jIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE0LjAwI1RpbiBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xNS4wMCNMZWFkIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE3LjAwI0NvbXBvc2l0ZSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xOC4wMCNOaWNrZWwgYWxsb3kgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTkuMDAjTm9uIG1ldGFsbGljIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjAwLjAwI01hY2hpbmVkIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDIuMDAjRmVycm91cyBhbGxveSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDMuMDAjU3RlZWwgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDUuMDAjSXJvbiBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDYuMDAjQWx1bWludW0gY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjA3LjAwI01hZ25lc2l1bSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDguMDAjVGl0YW5pdW0gY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjA5LjAwI0JlcnlsbGl1bSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTAuMDAjQ29wcGVyIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xMS4wMCNCcmFzcyBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTIuMDAjQnJvbnplIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xMy4wMCNaaW5jIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xNC4wMCNUaW4gY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE1LjAwI0xlYWQgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xNy4wMCNDb21wb3NpdGUgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE4LjAwI05pY2tlbCBhbGxveSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTkuMDAjTm9uIG1ldGFsbGljIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wMC4wMCNNYWNoaW5lZCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDIuMDAjRmVycnJvdXMgYWxsb3kgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wMy4wMCNTdGVlbCBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA1LjAwI0lyb24gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wNi4wMCNBbHVtaW51bSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA3LjAwI01hZ25lc2l1bSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA4LjAwI1RpdGFuaXVtIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDkuMDAjQmVyeWxsaXVtIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTAuMDAjQ29wcGVyIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTEuMDAjQnJhc3MgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xMi4wMCNCcm9uemUgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xMy4wMCNaaW5jIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTQuMDAjVGluIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTUuMDAjTGVhZCBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTcuMDAjQ29tcG9zaXRlIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTguMDAjTmlja2VsIGFsbG95IG1ldGFsIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTkuMDAjTm9uIG1ldGFsbGljIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMDAuMDAuMDAjRm9yZ2luZ3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDAuMDAjT3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDIuMDAjRmVycm91cyBhbGxveSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMy4wMCNTdGVlbCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDUuMDAjSXJvbiBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wNi4wMCNBbHVtaW51bSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wNy4wMCNNYWduZXNpdW0gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDguMDAjVGl0YW5pdW0gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDkuMDAjQmVyeWxsaXVtIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjEwLjAwI0NvcHBlciBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xMS4wMCNCcmFzcyBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xMi4wMCNCcm9uemUgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTMuMDAjWmluYyBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xNC4wMCNUaW4gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTUuMDAjTGVhZCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xNi4wMCNQcmVjaW91cyBtZXRhbCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wMC4wMCNDbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDIuMDAjRmVycm91cyBhbGxveSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjAzLjAwI1N0ZWVsIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDUuMDAjSXJvbiBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA2LjAwI0FsdW1pbnVtIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDcuMDAjTWFnbmVzaXVtIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDguMDAjVGl0YW5pdW0gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wOS4wMCNCZXJ5bGxpdW0gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xMC4wMCNDb3BwZXIgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xMS4wMCNCcmFzcyBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjEyLjAwI0Jyb256ZSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjEzLjAwI1ppbmMgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xNC4wMCNUaW4gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xNS4wMCNMZWFkIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wMC4wMCNJbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wMi4wMCNGZXJyb3VzIGFsbG95IGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAzLjAwI1N0ZWVsIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wNS4wMCNJcm9uIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA2LjAwI0FsdW1pbnVtIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA3LjAwI01hZ25lc2l1bSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wOC4wMCNUaXRhbml1bSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wOS4wMCNCZXJ5bGxpdW0gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTAuMDAjQ29wcGVyIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjExLjAwI0JyYXNzIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjEyLjAwI0Jyb256ZSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xMy4wMCNaaW5jIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjE0LjAwI1RpbiBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xNS4wMCNMZWFkIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjAwLjAwI0Ryb3AgZm9yZ2luZ3MjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wMi4wMCNaaW5jIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDMuMDAjRmVycm91cyBhbGxveSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA0LjAwI1RpbiBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA1LjAwI0xlYWQgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wNi4wMCNTdGVlbCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA3LjAwI1ByZWNpb3VzIG1ldGFsIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDguMDAjU3RhaW5sZXNzIHN0ZWVsIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDkuMDAjSXJvbiBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjEwLjAwI0FsdW1pbnVtIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTEuMDAjTWFnbmVzaXVtIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTIuMDAjVGl0YW5pdW0gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xMy4wMCNCZXJ5bGxpdW0gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xNC4wMCNDb3BwZXIgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xNS4wMCNCcmFzcyBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE2LjAwI0Jyb256ZSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE3LjAwI0NvbGQgc3RlZWwgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xOC4wMCNTZW1pIGZpbmlzaGVkIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDAuMDAjUm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDEuMDAjQWx1bWludW0gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDIuMDAjQmVyeWxsaXVtIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjAzLjAwI0JyYXNzIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA0LjAwI0Jyb256ZSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wNS4wMCNDb3BwZXIgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDYuMDAjSXJvbiByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wNy4wMCNMZWFkIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA4LjAwI01hZ25lc2l1bSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wOS4wMCNQcmVjaW91cyBtZXRhbCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTEuMDAjVGluIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjEyLjAwI1RpdGFuaXVtIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjEzLjAwI1ppbmMgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTUuMDAjRmVycm91cyBhbGxveSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xNi4wMCNTdGVlbCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4yMC4wMC4wMCNQb3dkZXJlZCBtZXRhbCBjb21wb25lbnRzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjIwLjAxLjAwI0ZlcnJvdXMgcG93ZGVyZWQgbWV0YWwgY29tcG9uZW50cyMzMS4xMy4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4yMC4wMi4wMCNOb24gZmVycm91cyBwb3dkZXJlZCBtZXRhbCBwYXJ0cyMzMS4xMy4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4wMC4wMC4wMCNNb2xkaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNS4wMC4wMCNJbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTUuMDEuMDAjUGxhc3RpYyBpbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTUuMDIuMDAjUnViYmVyIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNS4wMy4wMCNHbGFzcyBpbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTYuMDAuMDAjVmFjdXVtIG1vbGRpbmdzIzMxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE2LjAxLjAwI1BsYXN0aWMgdmFjdXVtIG1vbGRpbmdzIzMxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE2LjAyLjAwI1J1YmJlciB2YWN1dW0gbW9sZGluZ3MjMzEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTYuMDMuMDAjR2xhc3MgdmFjdXVtIG1vbGRpbmdzIzMxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE3LjAwLjAwI0Jsb3cgbW9sZGluZ3MjMzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTcuMDEuMDAjUGxhc3RpYyBibG93IG1vbGRpbmdzIzMxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE3LjAyLjAwI1J1YmJlciBibG93IG1vbGRpbmdzIzMxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE4LjAwLjAwI1JlYWN0aW9uIGluamVjdGlvbiBtb2xkaW5ncyAoUklNKSMzMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xOC4wMS4wMCNQbGFzdGljIHJlYWN0aW9uIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xOC4wMi4wMCNSdWJiZXIgcmVhY3Rpb24gaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE1LjAwLjAwLjAwI1JvcGUgYW5kIGNoYWluIGFuZCBjYWJsZSBhbmQgd2lyZSBhbmQgc3RyYXAjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDAuMDAjUm9wZXMjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDEuMDAjQ290dG9uIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDIuMDAjUG9seWVzdGVyIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDMuMDAjUG9seXByb3B5bGVuZSByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjA0LjAwI055bG9uIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDUuMDAjV2lyZSByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjA2LjAwI0hlbXAgcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wNy4wMCNTdHJpbmcgb3IgdHdpbmUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDguMDAjU2lzYWwgcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wMC4wMCNDaGFpbnMjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDEuMDAjU2FmZXR5IGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wMi4wMCNTa2lkIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wMy4wMCNSb2xsZXIgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjA0LjAwI1Byb29mIGNvaWwgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjA1LjAwI1Nhc2ggY2hhaW4jMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDYuMDAjSmFjayBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDcuMDAjQ29pbCBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDguMDAjQmFsbCBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDkuMDAjQ2hhaW4gbGlua3MjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDAuMDAjTWVjaGFuaWNhbCBjYWJsZSMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wMS4wMCNNZWNoYW5pY2FsIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wMi4wMCNOb24gZWxlY3RyaWMgY29udHJvbCBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDMuMDAjTGlmdGluZyBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDQuMDAjVHJhY2sgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjA1LjAwI05vbiBlbGVjdHJpY2FsIHN0ZWVsIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wNi4wMCNOb24gZWxlY3RyaWNhbCBjb3BwZXIgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjA3LjAwI05vbiBlbGVjdHJpY2FsIGFsdW1pbnVtIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOC4wMC4wMCNNZWNoYW5pY2FsIHdpcmUjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTguMDEuMDAjTWVjaGFuaWNhbCB3aXJlIzMxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE4LjAyLjAwI0JhcmJlZCB3aXJlIzMxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE4LjAzLjAwI1BpYW5vIHN0ZWVsIHdpcmUjMzEuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTkuMDAuMDAjU3RyYXBzIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjAxLjAwI01ldGFsIHN0cmFwcyMzMS4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wMi4wMCNMZWF0aGVyIHN0cmFwcyMzMS4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wMy4wMCNGaWJlciBzdHJhcHMjMzEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTkuMDQuMDAjUGxhc3RpYyBzdHJhcHMjMzEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjAuMDAuMDAjU2VjdXJpdHkgd2lyZSMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4yMC4wMS4wMCNSYXpvciB3aXJlIzMxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjIwLjAyLjAwI0JhcmJlZCB3aXJlIzMxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjIxLjAwLjAwI0VsZWN0cmljYWwgd2lyZSMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4yMS4wMS4wMCNXaXJlIGFzc2VtYmx5IzMxLjE1LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjAwLjAwLjAwI0hhcmR3YXJlIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjAwLjAwI1NjcmV3cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wMS4wMCNDYXAgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjAyLjAwI0FuY2hvciBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDMuMDAjRHJpdmUgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjA0LjAwI01hY2hpbmUgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjA1LjAwI1NldCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDYuMDAjU2hlZXQgbWV0YWwgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjA3LjAwI1RhcHBpbmcgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjA4LjAwI1dvb2Qgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjA5LjAwI0RyeXdhbGwgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjEwLjAwI0NhcHRpdmUgc2NyZXcjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTEuMDAjTG9ja2luZyBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTIuMDAjVGhyZWFkIHJvbGxpbmcgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjEzLjAwI0ZsYXRoZWFkIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xNC4wMCNXZWxkIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xNS4wMCNGbGF0IGhlYWQgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE2LjAwI1RodW1iIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xNy4wMCNTaG91bGRlciBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDAuMDAjQm9sdHMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDEuMDAjQW5jaG9yIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjAyLjAwI0JsaW5kIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjAzLjAwI0NhcnJpYWdlIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA0LjAwI0NsZXZpcyBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wNS4wMCNDeWxpbmRlciBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wNi4wMCNEb29yIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA3LjAwI0V4cGFuc2lvbiBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wOC4wMCNMYWcgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDkuMDAjVG9nZ2xlIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjEwLjAwI0V5ZSBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xMS4wMCNMb2NraW5nIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjEyLjAwI1BpbiBvciBjb2xsYXIgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTMuMDAjVGVuc2lvbiBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xNC4wMCNTdHJ1Y3R1cmFsIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE1LjAwI1RvcnF1ZSBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xNi4wMCNVIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE3LjAwI1dpbmcgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTguMDAjVGhyZWFkZWQgcm9kIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE5LjAwI1N0dWQgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMjAuMDAjSGV4YWdvbmFsIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjAwLjAwI051dHMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDEuMDAjQW5jaG9yIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDIuMDAjQmVhcmluZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjAzLjAwI0JsaW5kIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDQuMDAjQmFycmVsIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDUuMDAjQ2FwIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDYuMDAjQ2FwdGl2ZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA3LjAwI0Nhc3RsZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA4LjAwI0NoYW5uZWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wOS4wMCNDbGFtcGluZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjEwLjAwI0V4cGFuc2lvbiBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjExLjAwI0V5ZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjEyLjAwI0ZsYW5nZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjEzLjAwI0hvc2UgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xNC4wMCNJbnNlcnQgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xNS4wMCNTZWxmIGxvY2tpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xNi4wMCNMb2NrbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xNy4wMCNXaW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTguMDAjVG9nZ2xlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTkuMDAjU3dpdmVsIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjAuMDAjU3RvcCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjIxLjAwI1NwcmluZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjIyLjAwI1VuaW9uIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjMuMDAjTnV0cGxhdGUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yNC4wMCNQcmVzcyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI1LjAwI0NsaXAgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yNi4wMCNEb21lIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjcuMDAjSGV4YWdvbmFsIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjguMDAjQ291cGxpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yOS4wMCNLbnVybGVkIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDAuMDAjV2FzaGVycyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wMS4wMCNMb2NraW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDIuMDAjQmV2ZWwgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wMy4wMCNCaW5kaW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDQuMDAjQ3VydmVkIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDUuMDAjRWxlY3RyaWNhbCBpbnN1bGF0aW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDYuMDAjRmluaXNoaW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDcuMDAjRmxhdCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA4LjAwI09wZW4gd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wOS4wMCNSZWR1Y2luZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjEwLjAwI1NoaW0gd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xMS4wMCNTcHJpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xMi4wMCNTcXVhcmUgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xMy4wMCNTd2l2ZWwgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xNC4wMCNUaHJ1c3Qgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xNS4wMCNTaG91bGRlciB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjE2LjAwI1NwYWNlcnMgb3Igc3RhbmRvZmZzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjE3LjAwI0NvbmljYWwgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wMC4wMCNTcHJpbmdzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjAxLjAwI0hlbGljYWwgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wMi4wMCNMZWFmIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDMuMDAjU3BpcmFsIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDQuMDAjQ29tcHJlc3Npb24gc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wNS4wMCNEaWUgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wNi4wMCNEaXNrIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDcuMDAjRXh0ZW5zaW9uIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDguMDAjVG9yc2lvbiBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjAwLjAwI05haWxzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjAxLjAwI0JyYWRzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjAyLjAwI0NhcCBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wMy4wMCNGaW5pc2hpbmcgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDQuMDAjTWFzb25yeSBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wNS4wMCNSb29maW5nIG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA2LjAwI1dpcmUgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDcuMDAjVXBob2xzdGVyeSBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wOC4wMCNEcml2ZSBwaW5zIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjAwLjAwI0FuY2hvcnMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDEuMDAjQ29uY3JldGUgYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wMi4wMCNXZWRnZSBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjAzLjAwI1dhbGwgYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wNC4wMCNTY3JldyBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjA1LjAwI1Jlc2luIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDYuMDAjUGlwZSBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjA3LjAwI05haWwgZXhwYW5zaW9uIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDguMDAjVGllIGRvd24gYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wMC4wMCNSaXZldHMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDEuMDAjQmxpbmQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjAyLjAwI0Nyb3duaGVhZCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDMuMDAjRmxhdCBoZWFkIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wNC4wMCNGdWxsIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wNS4wMCNSYXRjaGV0IHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wNi4wMCNUaW5uZXJzIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wNy4wMCNDb21wcmVzc2lvbiByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDguMDAjQ29vcGVycyByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDkuMDAjQnV0dG9uIGhlYWQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjAwLjAwI01vdW50aW5nIGhhcmR3YXJlIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjAxLjAwI01vdW50aW5nIHByb2ZpbGVzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjAzLjAwI01vdW50aW5nIGJhcnMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDQuMDAjTW91bnRpbmcgc3RyaXBzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA1LjAwI01vdW50aW5nIGNsaXBzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA2LjAwI01vdW50aW5nIGhhbmdlcnMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDcuMDAjTW91bnRpbmcgcGxhdGVzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA4LjAwI01vdW50aW5nIHBhbmVscyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wOS4wMCNNb3VudGluZyByYWNrcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4xMC4wMCNNb3VudGluZyBzdHJhcHMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMTEuMDAjV2FsbCBidXNoaW5ncyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wMC4wMCNNaXNjZWxsYW5lb3VzIGZhc3RlbmVycyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wMS4wMCNHcm9tbWV0cyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wMi4wMCNIYXNwcyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wMy4wMCNIaW5nZXMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDQuMDAjSGFyZHdhcmUgc3RhcGxlcyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wNS4wMCNUdXJuYnVja2xlcyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wNi4wMCNTdHJhcHBpbmcgb3IgYmFuZGluZyBidWNrbGVzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA3LjAwI0xhdGNoIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA4LjAwI0NvdHRlciBwaW5zIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjAwLjAwI0JyYWNrZXRzIGFuZCBicmFjZXMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDEuMDAjU2hlbGYgYnJhY2tldHMjMzEuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDIuMDAjQW5nbGUgYnJhY2tldHMjMzEuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDMuMDAjQnJhY2VzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjA0LjAwI0VsZWN0cmljYWwgZml4dHVyZSBicmFja2V0cyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wNS4wMCNNYWduZXRpYyBtb3VudGluZyBicmFja2V0cyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wMC4wMCNIb29rcyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wMS4wMCNTd2l2ZWwgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDIuMDAjU3ByaW5nIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjAzLjAwI1MgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDQuMDAjU2FmZXR5IGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA1LjAwI0xpZnRpbmcgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDYuMDAjSiBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wNy4wMCNHdXkgd2lyZSBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wOC4wMCNHcmFiIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA5LjAwI1NjcmV3IGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjEwLjAwI1BlZyBib2FyZCBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4xMS4wMCNTbGlwIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI3LjAwLjAwI1JvbGxpbmcgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjcuMDEuMDAjQ2FzdGVycyMzMS4xNi4yNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNy4wMi4wMCNXaGVlbHMjMzEuMTYuMjcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjcuMDMuMDAjU2xpZGVycyMzMS4xNi4yNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wMC4wMCNNaXNjZWxsYW5lb3VzIGhhcmR3YXJlIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjAxLjAwI0hhbmRsZXMgb3Iga25vYnMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDIuMDAjSW5zZXJ0cyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wMy4wMCNTaGFja2xlcyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wNC4wMCNEb29yIHN0b3BzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA1LjAwI0NhYmxlIHRoaW1ibGUjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDYuMDAjU2NyZXcgY292ZXJzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA3LjAwI0xldmVycyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wOC4wMCNQYW5pYyBiYXJzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjAwLjAwI0NsYW1wcyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wMS4wMCNFYXIgY2xhbXBzIzMxLjE2LjI5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjAyLjAwI1NwcmluZyBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDMuMDAjU2NyZXcgY2xhbXBzIzMxLjE2LjI5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjA0LjAwI1dpcmUgcm9wZSBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDUuMDAjQmVhbSBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzAuMDAuMDAjQ291cGxpbmdzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjAxLjAwI0VsYXN0b21lcmljIGNvdXBsaW5ncyMzMS4xNi4zMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wMi4wMCNHZWFyIGNvdXBsaW5ncyMzMS4xNi4zMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wMy4wMCNNZXRhbGxpYyBjb3VwbGluZ3MjMzEuMTYuMzAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzAuMDQuMDAjTWluaWF0dXJlIGNvdXBsaW5ncyMzMS4xNi4zMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMS4wMC4wMCNDb25uZWN0b3JzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMxLjAxLjAwI1F1aWNrIGRpc2Nvbm5lY3RzIzMxLjE2LjMxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMxLjAyLjAwI0ZlcnJ1bGUjMzEuMTYuMzEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzEuMDMuMDAjVHJhaWxlciBDb25uZWN0b3IjMzEuMTYuMzEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDAuMDAjUmV0YWluaW5nIGhhcmR3YXJlIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjAxLjAwI1NwcmluZyBwaW5zIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjAyLjAwI1JldGFpbmluZyByaW5ncyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wMy4wMCNEb3dlbCBwaW4jMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDQuMDAjQ290dGVyIHBpbiMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wNS4wMCNUYXBlciBwaW5zIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA2LjAwI0dyb292ZWQgcGlucyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wNy4wMCNTaGFmdCBvciB3b29kcnVmZiBrZXlzIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA4LjAwI0tleXN0b2NrIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA5LjAwI0JlYXJpbmcgaG9sZGVycyBvciByZXRhaW5lcnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMTAuMDAjUmV0YWluaW5nIGNvbGxhcnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzMuMDAuMDAjU3BhY2VyIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMzLjAxLjAwI1NoaW0jMzEuMTYuMzMuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMDAuMDAuMDAjQmVhcmluZ3MgYW5kIGJ1c2hpbmdzIGFuZCB3aGVlbHMgYW5kIGdlYXJzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjAwLjAwI0JlYXJpbmdzIzMxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjAxLjAwI0ZsYW5nZWQgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDIuMDAjUmFkaWFsIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjAzLjAwI1doZWVsIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA0LjAwI0JhbGwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDUuMDAjUm9sbGVyIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA2LjAwI0xpbmVhciBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wNy4wMCNUaHJ1c3QgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDguMDAjUm9kIGVuZCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wOS4wMCNTbGVldmUgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTAuMDAjU3BoZXJpY2FsIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjExLjAwI1BpbGxvdyBibG9jayBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xMi4wMCNOZWVkbGUgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTMuMDAjSGFuZ2VyIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE0LjAwI0Rvb3IgY2xvc2VycyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xNS4wMCNQbGFpbiBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xNi4wMCNUYXBlcmVkIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE3LjAwI05lZWRsZSBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xOC4wMCNCZWFyaW5nIENhZ2UjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTkuMDAjQmVhcmluZyBibG9ja3Mgb3IgaG91c2luZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMjAuMDAjQmVhcmluZyBqb3VybmFscyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4yMS4wMCNCZWFyaW5nIHJvbGxlcnMgb3IgYmFsbHMjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTYuMDAuMDAjQnVzaGluZ3MjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTYuMDEuMDAjVHJhbnNmb3JtZXIgYnVzaGluZ3MjMzEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTYuMDIuMDAjV2FsbCBidXNoaW5ncyMzMS4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMy4wMCNEcmlsbCBidXNoaW5ncyMzMS4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wNC4wMCNQaWxvdCBidXNoaW5ncyMzMS4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wNS4wMCNTaGFmdCBidXNoaW5ncyMzMS4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wMC4wMCNHZWFycyMzMS4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wMS4wMCNHZWFyIGJveGVzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjAyLjAwI1JhY2sgb3IgcGluaW9uIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjAzLjAwI0RpZmZlcmVudGlhbCBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wNC4wMCNGcmljdGlvbiBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wNS4wMCNIZWxpY2FsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA2LjAwI0NvbmljYWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDcuMDAjU3B1ciBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wOC4wMCNCZXZlbCBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wOS4wMCNSYWNrIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjEwLjAwI1BpbmlvbiBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4xMS4wMCNSaW5nIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjEyLjAwI1dvcm0gZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTMuMDAjU2lkZSBHZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4xNC4wMCNIZWxpY2FsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjAwLjAwI0luZHVzdHJpYWwgd2hlZWxzIzMxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjAxLjAwI0NvZyB3aGVlbHMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDIuMDAjSW1wZWxsZXIgd2hlZWxzIzMxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjAzLjAwI0ZseXdoZWVscyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wNC4wMCNTaGVhdmVzIzMxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjA1LjAwI1doZWVsIGJydXNoZXMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTkuMDAuMDAjU3Byb2NrZXRzIzMxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE5LjAxLjAwI1JvbGxlciBjaGFpbiBzcHJvY2tldHMjMzEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTkuMDIuMDAjU3BsaXQgc3Byb2NrZXRzIzMxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE4LjAwLjAwLjAwI0dhc2tldHMgYW5kIHNlYWxzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjAwLjAwI0dhc2tldHMjMzEuMTguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDEuMDAjUGxhc3RpYyBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjAyLjAwI1J1YmJlciBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjAzLjAwI01ldGFsIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDQuMDAjVGV4dGlsZSBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA1LjAwI0NvcmsgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wNi4wMCNPIHJpbmcgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wNy4wMCNFbGVjdHJvbWFnbmV0aWMgaW50ZXJmZXJlbmNlIChFTUkpIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDguMDAjQm9sdGVkIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDkuMDAjR2Fza2V0IGtpdHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMTAuMDAjU2lsaWNvbmUgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4xMS4wMCNMaXF1aWQgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNi4wMC4wMCNTZWFscyMzMS4xOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNi4wMS4wMCNQbGFzdGljIHNlYWxzIzMxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAyLjAwI1J1YmJlciBzZWFscyMzMS4xOC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNi4wMy4wMCNNZXRhbGxpYyBzZWFscyMzMS4xOC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNi4wNC4wMCNTZWFsIG1lY2hhbmljYWwjMzEuMTguMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTcuMDAuMDAjUGFja2luZ3MgYW5kIGdsYW5kcyMzMS4xOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNy4wMS4wMCNQYWNraW5ncyMzMS4xOC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNy4wMi4wMCNHbGFuZHMjMzEuMTguMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMDAuMDAuMDAjR3JpbmRpbmcgYW5kIHBvbGlzaGluZyBhbmQgc21vb3RoaW5nIG1hdGVyaWFscyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wMC4wMCNBYnJhc2l2ZXMgYW5kIGFicmFzaXZlIG1lZGlhIzMxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAxLjAwI0FicmFzaXZlIHBhcGVycyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wMi4wMCNCdWZmcyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wMy4wMCNBYnJhc2l2ZSB3aGVlbHMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDQuMDAjQWJyYXNpdmUgY2xvdGgjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDUuMDAjQWJyYXNpdmUgcGFkcyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wNi4wMCNBYnJhc2l2ZSBkaXNjcyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wNy4wMCNBYnJhc2l2ZSBiZWx0cyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wOC4wMCNCb3J0IzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA5LjAwI0FicmFzaXZlIHBvbGlzaGVycyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xMC4wMCNBYnJhc2l2ZSBzdG9uZXMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTEuMDAjU3RlZWwgd29vbCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xMi4wMCNTaG90IGJsYXN0IzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjEzLjAwI0dsYXNzIGJlYWQjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTQuMDAjVHVtYmxlIG1lZGlhIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjE1LjAwI0FicmFzaXZlIG1lc2gjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTYuMDAjQWJyYXNpdmUgY2FydHJpZGdlIHJvbGxzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjE3LjAwI0VtZXJ5IGJvYXJkcyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNi4wMC4wMCNBYnJhc2l2ZSB3aGVlbHMjMzEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTYuMDEuMDAjQWJyYXNpdmUgY3ViaWMgYm9yb3pvbiBuaXRyYXRlIHdoZWVscyMzMS4xOS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNi4wMi4wMCNBYnJhc2l2ZSBkaWFtb25kIHdoZWVscyMzMS4xOS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNi4wMy4wMCNUdW5nc3RlbiBjYXJiaWRlIGFicmFzaXZlIHdoZWVscyMzMS4xOS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4wMC4wMC4wMCNBZGhlc2l2ZXMgYW5kIHNlYWxhbnRzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjAwLjAwI1RhcGUjMzEuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDEuMDAjRHVjdCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjAyLjAwI0VsZWN0cmljYWwgaW5zdWxhdGluZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjAzLjAwI01hc2tpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wNC4wMCNDYXJwZXQgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wNS4wMCNEb3VibGUgc2lkZWQgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wNi4wMCNCaXNtYWxlbWlkZSB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA3LjAwI0ZpYmVyZ2xhc3MgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wOC4wMCNHcmFwaGl0ZSB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA5LjAwI055bG9uIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTAuMDAjUmVzaW4gaW1wcmVnbmF0ZWQgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xMS4wMCNXaXJlIG1lc2ggdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xMi4wMCNUcmFuc3BhcmVudCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjEzLjAwI05vbiBza2lkIHNhZmV0eSB0YXBlcyMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xNC4wMCNQb2x5dGV0cmFmbHVvcm9ldGh5bGVuZSAoUFRGRSkgdGhyZWFkIHNlYWxpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xNS4wMCNQYXBlciB0YXBlcyMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xNi4wMCNSZWZsZWN0aXZlIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTcuMDAjUGFja2FnaW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTguMDAjRWxlY3RyaWNhbGx5IGNvbmR1Y3RpdmUgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xOS4wMCNQaXBlIG9yIGhvc2UgcmVwYWlyIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjAuMDAjQWlzbGUgbWFya2luZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjIxLjAwI0ZvaWwgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yMi4wMCNBZGhlc2l2ZSB0cmFuc2ZlciB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjIzLjAwI0Nsb3RoIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjQuMDAjQ29sb3IgY29kaW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjUuMDAjVmlueWwgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yNi4wMCNNYWduZXRpYyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjAwLjAwI090aGVyIGFkaGVzaXZlcyBhbmQgc2VhbGFudHMjMzEuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDEuMDAjQ2hlbWljYWwgYWRoZXNpdmVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjAyLjAwI1Bhc3RlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wMy4wMCNHdW1zIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjA0LjAwI1J1YmJlciBjZW1lbnRzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjA1LjAwI1B1dHRpZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDYuMDAjQ2F1bGtzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjA3LjAwI0Vwb3h5IGJvbmQjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDguMDAjRm9hbSBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDkuMDAjSG90IG1lbHQgYWRoZXNpdmVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjEwLjAwI0dsdWVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjExLjAwI0ZpbG0gYWRoZXNpdmVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjEyLjAwI1RocmVhZCBzZWFsYW50cyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4xMy4wMCNSZSB1c2FibGUgYWRoZXNpdmUjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTQuMDAjU2VhbGluZyB3YXhlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4wMC4wMC4wMCNQYWludHMgYW5kIHByaW1lcnMgYW5kIGZpbmlzaGVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjAwLjAwI1BhaW50cyBhbmQgcHJpbWVycyMzMS4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wMS4wMCNFbmFtZWwgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjAyLjAwI1dhdGVyIGJhc2VkIHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wMy4wMCNQaWdtZW50IHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wNC4wMCNDb2F0aW5nIHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wNS4wMCNPaWwgYmFzZWQgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA2LjAwI0xhdGV4IHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wNy4wMCNTcHJheSBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDguMDAjQWNyeWxpYyBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDkuMDAjRW5hbWVsIHByaW1lcnMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMTAuMDAjUG9seXVyZXRoYW5lIHByaW1lcnMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMTEuMDAjVXJldGhhbmUgcHJpbWVycyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4xMi4wMCNMYXRleCBwcmltZXJzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjAwLjAwI1BhaW50IGFkZGl0aXZlcyMzMS4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wMS4wMCNDYWxjaW1pbmVzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjAyLjAwI1RleHR1cmluZyBtYXRlcmlhbHMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDMuMDAjUGFpbnQgZHJpZXJzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjA0LjAwI1BhaW50IGV4dGVuZGVycyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wNS4wMCNBbnRpIHNsaXAgYWdlbnRzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjA2LjAwI0xldmVsaW5nIGFnZW50cyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wNy4wMCNBbnRpIGZvYW1pbmcgYWdlbnRzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjAwLjAwI01pc2NlbGxhbmVvdXMgZmluaXNoZXMjMzEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDEuMDAjR2xhemVzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjAyLjAwI0x1c3RlcnMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDMuMDAjTGFjcXVlcnMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDQuMDAjU2VhbGVycyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wNS4wMCNTaGVsbGFjcyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wNi4wMCNTdGFpbnMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDcuMDAjVmFybmlzaGVzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA4LjAwI1Bvd2RlciBjb2F0IzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE4LjAwLjAwI1BhaW50IHNvbHZlbnRzIGFuZCB0aGlubmVycyMzMS4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOC4wMS4wMCNQYWludCBvciB2YXJuaXNoIHJlbW92ZXJzIzMxLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE4LjAyLjAwI1BhaW50IG9yIHZhcm5pc2ggc3RyaXBwZXJzIzMxLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE4LjAzLjAwI1BhaW50IG9yIHZhcm5pc2ggdGhpbm5lcnMjMzEuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDAuMDAjUGFpbnQgYXBwbGljYXRvcnMgYW5kIHBhaW50aW5nIGFjY2Vzc29yaWVzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjAxLjAwI0Ryb3AgY2xvdGhzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjAyLjAwI0VkZ2luZyB0b29scyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wMy4wMCNNYXNraW5nIGVxdWlwbWVudCMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wNC4wMCNQYWludCBicnVzaGVzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA1LjAwI1BhaW50IG1peGVycyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wNi4wMCNQYWludCByb2xsZXJzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA4LjAwI1BhaW50IHNwcmF5ZXJzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA5LjAwI1BhaW50IHRyYXlzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjEwLjAwI1BhaW50IG1pdHRzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjEyLjAwI1RlbGVzY29waW5nIHBvbGVzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjEzLjAwI1BhaW50IG5venpsZXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTQuMDAjQWlyIGJydXNoZXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTUuMDAjUGFpbnQgc3RyYWluZXJzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIyLjAwLjAwLjAwI0R5ZWluZyBhbmQgdGFubmluZyBleHRyYWN0cyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMC4wMCNEeWVpbmcgcHJvZHVjdHMjMzEuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTUuMDEuMDAjSW5vcmdhbmljIGR5ZXMjMzEuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTUuMDIuMDAjT3JnYW5pYyBkeWVzIG9mIGFuaW1hbCBvcmlnaW4jMzEuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTUuMDMuMDAjT3JnYW5pYyBkeWVzIG9mIHZlZ2V0YWJsZSBvcmlnaW4jMzEuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTYuMDAuMDAjVGFubmluZyBwcm9kdWN0cyMzMS4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNi4wMS4wMCNJbm9yZ2FuaWMgdGFubmluZyBleHRyYWN0cyMzMS4yMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNi4wMi4wMCNPcmdhbmljIHRhbm5pbmcgZXh0cmFjdHMgb2YgYW5pbWFsIG9yaWdpbiMzMS4yMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNi4wMy4wMCNPcmdhbmljIHRhbm5pbmcgZXh0cmFjdHMgb2YgdmVnZXRhYmxlIG9yaWdpbiMzMS4yMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMy4wMC4wMC4wMCNNYWNoaW5lZCByYXcgc3RvY2sjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDAuMDAjTWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjAxLjAwI0FsdW1pbnVtIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjAzLjAwI0JyYXNzIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wNC4wMCNCcm9uemUgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDYuMDAjSXJvbiBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDcuMDAjTGVhZCBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wOS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTAuMDAjU3RhaW5sZXNzIHN0ZWVsIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xMS4wMCNUaW4gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjEyLjAwI1RpdGFuaXVtIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xMy4wMCNaaW5jIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xNC4wMCNOb24gZmVycm91cyBhbGxveSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTUuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTYuMDAjU3RlZWwgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE3LjAwI0NvbXBvc2l0ZSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTguMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xOS4wMCNOb24gbWV0YWxsaWMgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjAwLjAwI01hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjAxLjAwI0FsdW1pbnVtIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wMy4wMCNCcmFzcyBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wNC4wMCNCcm9uemUgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA2LjAwI0lyb24gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDcuMDAjTGVhZCBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDkuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTAuMDAjU3RhaW5sZXNzIHN0ZWVsIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjExLjAwI1RpbiBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xMi4wMCNUaXRhbml1bSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xMy4wMCNaaW5jIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE0LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE1LjAwI0ZlcnJvdXMgYWxsb3kgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTYuMDAjU3RlZWwgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTcuMDAjQ29tcG9zaXRlIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE4LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xOS4wMCNOb24gbWV0YWxsaWMgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDAuMDAjU2hpbSBzdG9jayMzMS4yMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wMS4wMCNCcmFzcyBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjAyLjAwI1N0ZWVsIHNoaW0gc3RvY2sjMzEuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDMuMDAjU3RhaW5sZXNzIHN0ZWVsIHNoaW0gc3RvY2sjMzEuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDQuMDAjQWx1bWludW0gc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wNS4wMCNDb3BwZXIgc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yNC4wMC4wMC4wMCNJbmR1c3RyaWFsIG9wdGljcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNS4wMC4wMCNMZW5zZXMgYW5kIHByaXNtcyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNS4wMS4wMCNMZW5zZXMjMzEuMjQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTUuMDIuMDAjUHJpc21zIzMxLjI0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjAwLjAwI09wdGljYWwgYmxhbmtzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjAxLjAwI0ZpbHRlciBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDIuMDAjR2xhc3MgZGlza3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDMuMDAjTW9sZGVkIGdsYXNzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA0LjAwI1ByaXNtIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wNS4wMCNTaWxpY29uIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wNi4wMCNHZXJtYW5pdW0gYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA3LjAwI1JvdW5kIGJhciBzdG9jayMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wOC4wMCNTcXVhcmUgYmFyIHN0b2NrIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA5LjAwI1dpdG5lc3Mgc2FtcGxlIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4xMC4wMCNJbmZyYXJlZCBvcHRpY2FsIG1hdGVyaWFsIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNy4wMC4wMCNNaXJyb3JzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjAxLjAwI0RpYW1vbmQgdHVybmVkIG1pcnJvcnMjMzEuMjQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTcuMDIuMDAjTWV0YWxsaWMgbWlycm9ycyMzMS4yNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNy4wMy4wMCNQYXJhYm9saWMgbWlycm9ycyMzMS4yNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNy4wNC4wMCNVbmNvYXRlZCBtaXJyb3JzIzMxLjI0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjAwLjAwI09wdGljYWwgZmlsdGVycyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wMS4wMCNCcm9hZCBiYW5kIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDIuMDAjR3JhZGllbnQgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wMy4wMCNJbmZyYXJlZCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjA0LjAwI0xhc2VyIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDUuMDAjTmFycm93IGJhbmQgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wNi4wMCNQZWxpY2xlIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDcuMDAjVmlzdWFsIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDAuMDAjT3B0aWNhbCBkb21lcyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMS4wMCNTcGVjaWFsdHkgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDIuMDAjRGlhbW9uZCB0dXJuZWQgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDMuMDAjTWV0YWxsaWMgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDQuMDAjTW9sZGVkIGdsYXNzIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjA1LjAwI01vbGRlZCBwb2x5Y2FyYm9uYXRlIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjA2LjAwI1JlcGxpY2F0ZWQgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDcuMDAjU2hhcGVkIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjA4LjAwI0ZyYW5naWJsZSBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMC4wMC4wMCNMZW5zIGFuZCBsYXNlciB3aW5kb3dzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIwLjAxLjAwI0V4dGVybmFsIGxlbnMgb3IgbGFzZXIgd2luZG93cyMzMS4yNC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMC4wMi4wMCNJbmZyYXJlZCBsZW5zIG9yIGxhc2VyIHdpbmRvd3MjMzEuMjQuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjAuMDMuMDAjVmlzdWFsIGxlbnMgb3IgbGFzZXIgd2luZG93cyMzMS4yNC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMS4wMC4wMCNPcHRpY2FsIGRldmljZSBhY2Nlc3NvcmllcyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMS4wMS4wMCNQcmlzbSBob2xkZXJzIzMxLjI0LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAyLjAwI0xlbnMgaG9sZGVycyMzMS4yNC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMS4wMy4wMCNPcHRpY2FsIHNsaXRzIzMxLjI0LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI1LjAwLjAwLjAwI1BuZXVtYXRpYyBhbmQgaHlkcmF1bGljIGFuZCBlbGVjdHJpYyBjb250cm9sIHN5c3RlbXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDAuMDAjQWN0dWF0b3JzIzMxLjI1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjAxLjAwI0VsZWN0cmljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wMi4wMCNFbGVjdHJvbmljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wMy4wMCNIeWRyYXVsaWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjA0LjAwI1BuZXVtYXRpYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDUuMDAjVmFsdmUgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjA2LjAwI0dlYXIgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjA3LjAwI1JvdGFyeSBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDguMDAjUGhvdG9lbGVjdHJpYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDkuMDAjRWxlY3Ryb21hZ25ldGljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4xMC4wMCNTb2xlbm9pZHMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMTEuMDAjTGluZWFyIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4wMC4wMC4wMCNIb3VzaW5ncyBhbmQgY2FiaW5ldHMgYW5kIGNhc2luZ3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTUuMDAuMDAjSG91c2luZ3MgYW5kIGNhYmluZXRzIzMxLjI2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI2LjE1LjAxLjAwI1BsYXN0aWMgaG91c2luZ3Mgb3IgY2FiaW5ldHMjMzEuMjYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTUuMDIuMDAjTWV0YWwgaG91c2luZ3Mgb3IgY2FiaW5ldHMjMzEuMjYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTUuMDMuMDAjU3RlZWwgaG91c2luZ3Mgb3IgY2FiaW5ldHMjMzEuMjYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTUuMDQuMDAjR2VhciBib3hlcyBvciBob3VzaW5ncyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNi4wMC4wMCNTaGVsbHMgYW5kIGNhc2luZ3MjMzEuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTYuMDEuMDAjUGxhc3RpYyBzaGVsbHMgb3IgY2FzaW5ncyMzMS4yNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNi4wMi4wMCNNZXRhbCBzaGVsbHMgb3IgY2FzaW5ncyMzMS4yNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNi4wMy4wMCNTdGVlbCBzaGVsbHMgb3IgY2FzaW5ncyMzMS4yNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNy4wMC4wMC4wMCNNYWNoaW5lIG1hZGUgcGFydHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTUuMDAuMDAjR2VuZXJhbCBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTUuMDEuMDAjTWV0YWwgZ2VuZXJhbCBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTUuMDIuMDAjTm9uIG1ldGFsIGdlbmVyYWwgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI3LjE2LjAwLjAwI1NjcmV3IG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNi4wMS4wMCNNZXRhbCBzY3JldyBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTYuMDIuMDAjTm9uIG1ldGFsIHNjcmV3IG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4yOC4wMC4wMC4wMCNTdGFtcGluZ3MgYW5kIHNoZWV0IGNvbXBvbmVudHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDAuMDAjU3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjAxLjAwI1N0YW1wZWQgbWV0YWwgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wMi4wMCNBbHVtaW51bSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDMuMDAjRmVycm91cyBhbGxveSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDQuMDAjSXJvbiBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDUuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA2LjAwI1N0YWlubGVzcyBzdGVlbCBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDcuMDAjQ2FyYm9uIFN0ZWVsIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wOC4wMCNNYWduZXNpdW0gc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA5LjAwI1ppbmMgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjEwLjAwI1RpbiBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTEuMDAjVGl0YW5pdW0gc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjEyLjAwI0JlcnlsbGl1bSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTMuMDAjUHJlY2lvdXMgbWV0YWwgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE0LjAwI0NvcHBlciBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTUuMDAjTGVhZCBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTYuMDAjQnJhc3Mgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE3LjAwI0Jyb256ZSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTguMDAjQ29tcG9zaXRlIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xOS4wMCNOaWNrZWwgYWxsb3kgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjIwLjAwI05vbiBtZXRhbGxpYyBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMjEuMDAjQ29hdGVkIFN0YW1waW5ncyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNi4wMC4wMCNGb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNi4wMS4wMCNGb3JtZWQgbWV0YWwgY29tcG9uZW50cyMzMS4yOC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNy4wMC4wMCNXZWxkZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNy4wMS4wMCNXZWxkZWQgbWV0YWwgY29tcG9uZW50cyMzMS4yOC4xNy4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wMC4wMCNQdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDEuMDAjQWx1bWludW0gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjAyLjAwI0ZlcnJvdXMgYWxsb3kgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjAzLjAwI0lyb24gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA0LjAwI05vbiBmZXJyb3VzIGFsbG95IHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA2LjAwI0NhcmJvbiBTdGVlbCBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDcuMDAjQ29tcG9zaXRlIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wOC4wMCNOaWNrZWwgYWxsb3kgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA5LjAwI05vbiBtZXRhbGxpYyBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTAuMDAjVGl0YW5pdW0gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjExLjAwI0JlcnlsbGl1bSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTIuMDAjUHJlY2lvdXMgbWV0YWwgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjEzLjAwI0NvcHBlciBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTQuMDAjTGVhZCBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTUuMDAjQnJhc3MgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE2LjAwI0Jyb256ZSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTcuMDAjTWFnbmVzaXVtIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xOC4wMCNaaW5jIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xOS4wMCNUaW4gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjAwLjAwI0RyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDEuMDAjQWx1bWludW0gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wMi4wMCNCZXJ5bGxpdW0gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wMy4wMCNCcmFzcyBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA0LjAwI0Jyb256ZSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA1LjAwI0NvbXBvc2l0ZSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA2LjAwI0NvcHBlciBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA3LjAwI0ZlcnJvdXMgYWxsb3kgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wOC4wMCNJcm9uIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDkuMDAjTGVhZCBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjEwLjAwI01hZ25lc2l1bSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjExLjAwI05pY2tlbCBhbGxveSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTMuMDAjTm9uIG1ldGFsbGljIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTQuMDAjUHJlY2lvdXMgbWV0YWwgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xNi4wMCNTdGVlbCBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE3LjAwI1RpbiBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE4LjAwI1RpdGFuaXVtIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTkuMDAjWmluYyBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjAwLjAwI0h5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjAxLjAwI0FsdW1pbnVtIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjAyLjAwI0JlcnlsbGl1bSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wMy4wMCNCcmFzcyBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wNC4wMCNCcm9uemUgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDUuMDAjQ29tcG9zaXRlIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA2LjAwI0NvcHBlciBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wNy4wMCNGZXJyb3VzIGFsbG95IGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA4LjAwI0lyb24gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDkuMDAjTGVhZCBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xMC4wMCNNYWduZXNpdW0gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTEuMDAjTmlja2VsIGFsbG95IGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjEzLjAwI05vbiBtZXRhbGxpYyBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xNC4wMCNQcmVjaW91cyBtZXRhbCBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xNS4wMCNTdGFpbmxlc3Mgc3RlZWwgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTYuMDAjU3RlZWwgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTcuMDAjVGluIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE4LjAwI1RpdGFuaXVtIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE5LjAwI1ppbmMgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDAuMDAjU3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wMS4wMCNBbHVtaW51bSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjAyLjAwI0JlcnlsbGl1bSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjAzLjAwI0JyYXNzIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDQuMDAjQnJvbnplIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDUuMDAjQ29tcG9zaXRlIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDYuMDAjQ29wcGVyIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDcuMDAjRmVycm91cyBhbGxveSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA4LjAwI0lyb24gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wOS4wMCNMZWFkIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTAuMDAjTWFnbmVzaXVtIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTEuMDAjTmlja2VsIGFsbG95IHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMy4wMCNOb24gbWV0YWxsaWMgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xNC4wMCNQcmVjaW91cyBtZXRhbCBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE1LjAwI1N0YWlubGVzcyBzdGVlbCBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE2LjAwI1N0ZWVsIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTcuMDAjVGluIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTguMDAjVGl0YW5pdW0gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xOS4wMCNaaW5jIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDAuMDAjUm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wMS4wMCNBbHVtaW51bSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjAyLjAwI0JlcnlsbGl1bSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjAzLjAwI0JyYXNzIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDQuMDAjQnJvbnplIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDUuMDAjQ29tcG9zaXRlIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDYuMDAjQ29wcGVyIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDcuMDAjRmVycm91cyBhbGxveSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA4LjAwI0lyb24gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wOS4wMCNMZWFkIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTAuMDAjTWFnbmVzaXVtIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTEuMDAjTmlja2VsIGFsbG95IHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMy4wMCNOb24gbWV0YWxsaWMgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xNC4wMCNQcmVjaW91cyBtZXRhbCByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE1LjAwI1N0YWlubGVzcyBzdGVlbCByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE2LjAwI1N0ZWVsIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTcuMDAjVGluIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTguMDAjVGl0YW5pdW0gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xOS4wMCNaaW5jIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDAuMDAjU3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wMS4wMCNBbHVtaW51bSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjAyLjAwI0JlcnlsbGl1bSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjAzLjAwI0JyYXNzIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDQuMDAjQnJvbnplIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDUuMDAjQ29tcG9zaXRlIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDYuMDAjQ29wcGVyIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDcuMDAjRmVycm91cyBhbGxveSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA4LjAwI0lyb24gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wOS4wMCNMZWFkIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTAuMDAjTWFnbmVzaXVtIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTEuMDAjTmlja2VsIGFsbG95IHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMy4wMCNOb24gbWV0YWxsaWMgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xNC4wMCNQcmVjaW91cyBtZXRhbCBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE1LjAwI1N0YWlubGVzcyBzdGVlbCBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE2LjAwI1N0ZWVsIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTcuMDAjVGluIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTguMDAjVGl0YW5pdW0gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xOS4wMCNaaW5jIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDAuMDAjRXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjAxLjAwI0FsdW1pbnVtIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wMi4wMCNCZXJ5bGxpdW0gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjAzLjAwI0JyYXNzIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wNC4wMCNCcm9uemUgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA1LjAwI0NvbXBvc2l0ZSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDYuMDAjQ29wcGVyIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wNy4wMCNGZXJyb3VzIGFsbG95IGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wOC4wMCNJcm9uIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wOS4wMCNMZWFkIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xMC4wMCNNYWduZXNpdW0gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjExLjAwI05pY2tlbCBhbGxveSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjEzLjAwI05vbiBtZXRhbGxpYyBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTQuMDAjUHJlY2lvdXMgbWV0YWwgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjE1LjAwI1N0YWlubGVzcyBzdGVlbCBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTYuMDAjU3RlZWwgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjE3LjAwI1RpbiBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTguMDAjVGl0YW5pdW0gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjE5LjAwI1ppbmMgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjAwLjAwLjAwI01hY2hpbmVkIGV4dHJ1c2lvbnMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDAuMDAjTWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjAzLjAwI0JyYXNzIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wNS4wMCNDb3BwZXIgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDYuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wNy4wMCNMZWFkIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wOS4wMCNOb24gZmVycm91cyBhbGxveSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xMC4wMCNQbGFzdGljIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjExLjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjEyLjAwI1J1YmJlciBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTQuMDAjU3RlZWwgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTUuMDAjVGluIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjE2LjAwI1RpdGFuaXVtIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjE3LjAwI1ppbmMgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTguMDAjQ29tcG9zaXRlIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjE5LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4yMC4wMCNOb24gbWV0YWxsaWMgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDAuMDAjTWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjAzLjAwI0JyYXNzIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wNS4wMCNDb3BwZXIgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDYuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wNy4wMCNMZWFkIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wOS4wMCNOb24gZmVycm91cyBhbGxveSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xMC4wMCNQbGFzdGljIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjExLjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjEyLjAwI1J1YmJlciBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTQuMDAjU3RlZWwgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTUuMDAjVGluIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjE2LjAwI1RpdGFuaXVtIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjE3LjAwI1ppbmMgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTguMDAjQ29tcG9zaXRlIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjE5LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4yMC4wMCNOb24gbWV0YWxsaWMgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDAuMDAjTWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjAxLjAwI0FsdW1pbnVtIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjAzLjAwI0JyYXNzIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wNC4wMCNCcm9uemUgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDYuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDcuMDAjTGVhZCBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wOS4wMCNOb24gZmVycm91cyBhbGxveSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTAuMDAjUGxhc3RpYyBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjEyLjAwI1J1YmJlciBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xNC4wMCNTdGVlbCBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTUuMDAjVGluIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xNi4wMCNUaXRhbml1bSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTcuMDAjWmluYyBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTguMDAjQ29tcG9zaXRlIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xOS4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjIwLjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDAuMDAjTWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjAzLjAwI0JyYXNzIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wNS4wMCNDb3BwZXIgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDYuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wNy4wMCNMZWFkIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wOS4wMCNOb24gZmVycm91cyBhbGxveSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xMC4wMCNQbGFzdGljIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjExLjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjEyLjAwI1J1YmJlciBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTQuMDAjU3RlZWwgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTUuMDAjVGluIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjE2LjAwI1RpdGFuaXVtIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjE3LjAwI1ppbmMgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTguMDAjQ29tcG9zaXRlIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjE5LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4yMC4wMCNOb24gICBtZXRhbGxpYyBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNS4wMC4wMCNNYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNi4wMC4wMCNNYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTcuMDAuMDAjTWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTguMDAuMDAjTWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMDAuMDAuMDAjTWFjaGluZWQgZm9yZ2luZ3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTAuMDAuMDAjTWFjaGluZWQgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDAuMDAjTWFjaGluZWQgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDIuMDAjRmVycm91cyBhbGxveSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMy4wMCNTdGVlbCBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDUuMDAjSXJvbiBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wNi4wMCNBbHVtaW51bSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wNy4wMCNNYWduZXNpdW0gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDguMDAjVGl0YW5pdW0gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDkuMDAjQmVyeWxsaXVtIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjEwLjAwI0NvcHBlciBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xMS4wMCNCcmFzcyBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xMi4wMCNCcm9uemUgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTMuMDAjWmluYyBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xNC4wMCNUaW4gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTUuMDAjTGVhZCBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xNi4wMCNQcmVjaW91cyBtZXRhbCBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xNy4wMCNDb21wb3NpdGUgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTguMDAjTmlja2VsIGFsbG95IG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE5LjAwI05vbiBtZXRhbGxpYyBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wMC4wMCNNYWNoaW5lZCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDIuMDAjRmVycm91cyBhbGxveSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjAzLjAwI1N0ZWVsIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDUuMDAjSXJvbiBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA2LjAwI0FsdW1pbnVtIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDcuMDAjTWFnbmVzaXVtIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDguMDAjVGl0YW5pdW0gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wOS4wMCNCZXJ5bGxpdW0gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xMC4wMCNDb3BwZXIgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xMS4wMCNCcmFzcyBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjEyLjAwI0Jyb256ZSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjEzLjAwI1ppbmMgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xNC4wMCNUaW4gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xNS4wMCNMZWFkIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xNy4wMCNDb21wb3NpdGUgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xOC4wMCNOaWNrZWwgYWxsb3kgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xOS4wMCNOb24gbWV0YWxsaWMgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wMC4wMCNNYWNoaW5lZCBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wMi4wMCNGZXJyb3VzIGFsbG95IGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAzLjAwI1N0ZWVsIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wNS4wMCNJcm9uIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA2LjAwI0FsdW1pbnVtIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA3LjAwI01hZ25lc2l1bSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wOC4wMCNUaXRhbml1bSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wOS4wMCNCZXJ5bGxpdW0gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTAuMDAjQ29wcGVyIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjExLjAwI0JyYXNzIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjEyLjAwI0Jyb256ZSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xMy4wMCNaaW5jIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE0LjAwI1RpbiBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xNS4wMCNMZWFkIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE3LjAwI0NvbXBvc2l0ZSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xOC4wMCNOaWNrZWwgYWxsb3kgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTkuMDAjTm9uIG1ldGFsbGljIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjAwLjAwI01hY2hpbmVkIGRyb3AgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wMi4wMCNaaW5jIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDMuMDAjRmVycm91cyBhbGxveSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA0LjAwI1RpbiBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA1LjAwI0xlYWQgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wNi4wMCNTdGVlbCBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA3LjAwI1ByZWNpb3VzIG1ldGFsIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDguMDAjU3RhaW5sZXNzIHN0ZWVsIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDkuMDAjSXJvbiBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjEwLjAwI0FsdW1pbnVtIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTEuMDAjTWFnbmVzaXVtIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTIuMDAjVGl0YW5pdW0gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xMy4wMCNCZXJ5bGxpdW0gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xNC4wMCNDb3BwZXIgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xNS4wMCNCcmFzcyBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE2LjAwI0Jyb256ZSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE3LjAwI0NvbXBvc2l0ZSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE4LjAwI05pY2tlbCBhbGxveSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE5LjAwI05vbiBtZXRhbGxpYyBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjAwLjAwI01hY2hpbmVkIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjAxLjAwI0FsdW1pbnVtIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjAyLjAwI0JlcnlsbGl1bSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wMy4wMCNCcmFzcyByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wNC4wMCNCcm9uemUgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDUuMDAjQ29wcGVyIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA2LjAwI0lyb24gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDcuMDAjTGVhZCByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wOC4wMCNNYWduZXNpdW0gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDkuMDAjUHJlY2lvdXMgbWV0YWwgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTAuMDAjU3RhaW5sZXNzIHN0ZWVsIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjExLjAwI1RpbiByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xMi4wMCNUaXRhbml1bSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xMy4wMCNaaW5jIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE0LjAwI05vbiBmZXJyb3VzIGFsbG95IHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE1LjAwI0ZlcnJvdXMgYWxsb3kgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTYuMDAjU3RlZWwgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTcuMDAjQ29tcG9zaXRlIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE4LjAwI05pY2tlbCBhbGxveSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xOS4wMCNOb24gbWV0YWxsaWMgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTYuMDAuMDAjTWFjaGluZWQgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTcuMDAuMDAjTWFjaGluZWQgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xOC4wMC4wMCNNYWNoaW5lZCBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xOS4wMC4wMCNNYWNoaW5lZCBkcm9wIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjAwLjAwLjAwI0ZhYnJpY2F0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjAwLjAwI1NvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjAwLjAwI1JpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjAyLjAwI0NhcmJvbiBzdGVlbCByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMTEuMDAjV2FzcGFsbG95IHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjEyLjAwI0NvcHBlciByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4xMy4wMCNCcmFzcyByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wMC4wMCNCb2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjAxLjAwI0FsdW1pbnVtIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDMuMDAjSGFzdGFsbG95IFggYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNC4wMCNJbmNvbmVsIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDYuMDAjTm9uIG1ldGFsbGljIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4xMi4wMCNDb3BwZXIgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4xMy4wMCNCcmFzcyBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wMC4wMCNTb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjAwLjAwI0JvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDEuMDAjQWx1bWludW0gYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA0LjAwI0luY29uZWwgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4xMC4wMCNUaXRhbml1bSBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjExLjAwI1dhc3BhbGxveSBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjEyLjAwI0NvcHBlciBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjEzLjAwI0JyYXNzIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMDAuMDAuMDAjRmFicmljYXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wMC4wMCNCb25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDEuMDAjQWx1bWludW0gYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA0LjAwI0luY29uZWwgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4xMC4wMCNUaXRhbml1bSBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4xMi4wMCNDb3BwZXIgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjEzLjAwI0JyYXNzIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wMC4wMCNTb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDAuMDAjUml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wMS4wMCNBbHVtaW51bSByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjAyLjAwI0NhcmJvbiBzdGVlbCByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDQuMDAjSW5jb25lbCByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA1LjAwI0xvdyBhbGxveSBzdGVlbCByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wOC4wMCNPdGhlciBub24gZmVycm91cyByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMTEuMDAjV2FzcGFsbG95IHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMTMuMDAjQnJhc3Mgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wMC4wMCNTb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjAyLjAwI0NhcmJvbiBzdGVlbCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMTEuMDAjV2FzcGFsbG95IHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wMC4wMCNCb2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDEuMDAjQWx1bWludW0gYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDMuMDAjSGFzdGFsbG95IFggYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA0LjAwI0luY29uZWwgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDYuMDAjTm9uIG1ldGFsbGljIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4xMC4wMCNUaXRhbml1bSBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4xMi4wMCNDb3BwZXIgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjEzLjAwI0JyYXNzIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4wMC4wMC4wMCNGYWJyaWNhdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wMC4wMCNCb25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjAxLjAwI0FsdW1pbnVtIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNC4wMCNJbmNvbmVsIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDcuMDAjT3RoZXIgZmVycm91cyBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMTAuMDAjVGl0YW5pdW0gYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4xMi4wMCNDb3BwZXIgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4xMy4wMCNCcmFzcyBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjAwLjAwI0JvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDEuMDAjQWx1bWludW0gYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA0LjAwI0luY29uZWwgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4xMC4wMCNUaXRhbml1bSBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjExLjAwI1dhc3BhbGxveSBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjEyLjAwI0NvcHBlciBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjEzLjAwI0JyYXNzIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDAuMDAjU29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjAyLjAwI0NhcmJvbiBzdGVlbCBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMTEuMDAjV2FzcGFsbG95IHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wMC4wMCNTb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDAuMDAjUml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDEuMDAjQWx1bWludW0gcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA0LjAwI0luY29uZWwgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4xMC4wMCNUaXRhbml1bSByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjEzLjAwI0JyYXNzIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjAwLjAwLjAwI0ZhYnJpY2F0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wMC4wMCNSaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDEuMDAjQWx1bWludW0gcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjAyLjAwI0NhcmJvbiBzdGVlbCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA0LjAwI0luY29uZWwgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4xMC4wMCNUaXRhbml1bSByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMTEuMDAjV2FzcGFsbG95IHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4xMi4wMCNDb3BwZXIgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjEzLjAwI0JyYXNzIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjAwLjAwI1NvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjAyLjAwI0NhcmJvbiBzdGVlbCBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMTEuMDAjV2FzcGFsbG95IHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wMC4wMCNTb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjAwLjAwI0JvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjAxLjAwI0FsdW1pbnVtIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wNC4wMCNJbmNvbmVsIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDcuMDAjT3RoZXIgZmVycm91cyBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMTAuMDAjVGl0YW5pdW0gYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjEyLjAwI0NvcHBlciBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4xMy4wMCNCcmFzcyBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wMC4wMCNCb2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wMS4wMCNBbHVtaW51bSBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDMuMDAjSGFzdGFsbG95IFggYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDQuMDAjSW5jb25lbCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDYuMDAjTm9uIG1ldGFsbGljIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjExLjAwI1dhc3BhbGxveSBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4xMi4wMCNDb3BwZXIgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMTMuMDAjQnJhc3MgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMDAuMDAuMDAjRmFicmljYXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjAwLjAwI1JpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjAyLjAwI0NhcmJvbiBzdGVlbCByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA1LjAwI0xvdyBhbGxveSBzdGVlbCByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wOC4wMCNPdGhlciBub24gZmVycm91cyByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMTEuMDAjV2FzcGFsbG95IHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjEyLjAwI0NvcHBlciByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4xMy4wMCNCcmFzcyByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wMC4wMCNCb25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjAxLjAwI0FsdW1pbnVtIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNC4wMCNJbmNvbmVsIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDcuMDAjT3RoZXIgZmVycm91cyBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMTAuMDAjVGl0YW5pdW0gYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4xMi4wMCNDb3BwZXIgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4xMy4wMCNCcmFzcyBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjAwLjAwI0JvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDEuMDAjQWx1bWludW0gYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA0LjAwI0luY29uZWwgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4xMC4wMCNUaXRhbml1bSBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjExLjAwI1dhc3BhbGxveSBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjEyLjAwI0NvcHBlciBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjEzLjAwI0JyYXNzIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDAuMDAjU29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDAuMDAjU29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjAyLjAwI0NhcmJvbiBzdGVlbCBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMTEuMDAjV2FzcGFsbG95IHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4wMC4wMC4wMCNGYWJyaWNhdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDAuMDAjQm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDEuMDAjQWx1bWludW0gYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA0LjAwI0luY29uZWwgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4xMC4wMCNUaXRhbml1bSBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMTIuMDAjQ29wcGVyIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjEzLjAwI0JyYXNzIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjAwLjAwI0JvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjAxLjAwI0FsdW1pbnVtIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wNC4wMCNJbmNvbmVsIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjEyLjAwI0NvcHBlciBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4xMy4wMCNCcmFzcyBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wMC4wMCNTb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDAuMDAjU29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjAwLjAwI1JpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wMS4wMCNBbHVtaW51bSByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDQuMDAjSW5jb25lbCByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjEyLjAwI0NvcHBlciByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMTMuMDAjQnJhc3Mgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM3LjAwLjAwLjAwI1JlZnJhY3RvcmllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMC4wMC4wMCNDZXJhbWljIGZpYnJlIHByb2R1Y3RzIzMxLjM3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEwLjAxLjAwI0luc3VsYXRpb24gYm9hcmRzIzMxLjM3LjEwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEwLjAyLjAwI0luc3VsYXRpbmcgd29vbCMzMS4zNy4xMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wMC4wMCNSZWZyYWN0b3J5IGJyaWNrcyMzMS4zNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wMS4wMCNNdWxsaXRlIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wMi4wMCNTaWxsaW1hbml0ZSBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDMuMDAjQWNpZCByZXNpc3RhbnQgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjA0LjAwI1NpbGljYSBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDUuMDAjSGlnaCBhbHVtaW5hIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wNi4wMCNDYWxjaXVtIHNpbGljYXRlIGJsb2NrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wNy4wMCNTaGFwZWQgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjAwLjAwI0Nhc3RhYmxlcyMzMS4zNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wMS4wMCNEZW5zZSBjYXN0YWJsZXMjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDIuMDAjSW5zdWxhdGluZyBjYXN0YWJsZXMjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDMuMDAjTG93IGNlbWVudCBjYXN0YWJsZXMjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDQuMDAjQWNpZCBvciBhbGthbGkgcmVzaXN0YW50IGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA1LjAwI0FicmFzaW9uIHJlc2lzdGFudCBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wNi4wMCNTaWMgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDcuMDAjU2VsZiBmbG93IGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA4LjAwI1RhYnVsYXIgYWx1bWluYSBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wOS4wMCNFcm9zaW9uIHJlc2lzdGFudCBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMy4wMC4wMCNTaGFwZWQgcmVmcmFjdG9yaWVzIzMxLjM3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEzLjAxLjAwI1Bvcm91cyBibG9ja3MjMzEuMzcuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTMuMDIuMDAjWmlyY29uIG5venpsZXMjMzEuMzcuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzguMDAuMDAuMDAjTWFnbmV0cyBhbmQgbWFnbmV0aWMgbWF0ZXJpYWxzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM4LjEwLjAwLjAwI1Blcm1hbmVudCBtYWduZXRzIzMxLjM4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM4LjEwLjAxLjAwI0xvZGUgc3RvbmUjMzEuMzguMTAuMDAuMDAKLXVuc3BzYzcjMzEuMzguMTAuMDIuMDAjQWxuaWNvIG1hZ25ldHMjMzEuMzguMTAuMDAuMDAKLXVuc3BzYzcjMzIuMDAuMDAuMDAuMDAjRWxlY3Ryb25pYyBDb21wb25lbnRzIGFuZCBTdXBwbGllcyMzMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4wMC4wMC4wMCNQcmludGVkIGNpcmN1aXRzIGFuZCBpbnRlZ3JhdGVkIGNpcmN1aXRzIGFuZCBtaWNyb2Fzc2VtYmxpZXMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDAuMDAjUHJpbnRlZCBjaXJjdWl0cyBhbmQgY2lyY3VpdCBjYXJkIGFzc2VtYmxpZXMjMzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDEuMDAjQmFyZSBwcmludGVkIGNpcmN1aXQgYm9hcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjAyLjAwI1ByaW50ZWQgY2lyY3VpdCBhc3NlbWJsaWVzIChQQ0FzKSMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wMy4wMCNNaXhlZCBjaXJjdWl0IGFzc2VtYmxpZXMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDQuMDAjU3VyZmFjZSBtb3VudCBjaXJjdWl0IGFzc2VtYmxpZXMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDUuMDAjUGxhdGVkIHRocm91Z2ggY2lyY3VpdCBhc3NlbWJsaWVzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA2LjAwI0RvdWJsZSBzaWRlZCBjaXJjdWl0IGNhcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA3LjAwI0JhY2twbGFuZSBjaXJjdWl0IGNhcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA4LjAwI011bHRpbGF5ZXIgY2lyY3VpdCBjYXJkcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wOS4wMCNTaW5nbGUgc2lkZWQgY2lyY3VpdCBjYXJkcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4xMC4wMCNQcmludGVkIHdpcmUgYm9hcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjAwLjAwI0VsZWN0cm9uaWMgY29tcG9uZW50cyBmb3IgbWVtb3J5IG9yIHNtYXJ0IGNhcmRzIzMyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjAxLjAwI1JhbmRvbSBhY2Nlc3MgbWVtb3J5IChSQU0pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjAyLjAwI0R5bmFtaWMgcmFuZG9tIGFjY2VzcyBtZW1vcnkgKERSQU0pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjAzLjAwI1N0YXRpYyByYW5kb20gYWNjZXNzIG1lbW9yeSAoU1JBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDQuMDAjUHJvZ3JhbW1hYmxlIHJlYWQgb25seSBtZW1vcnkgKFBST00pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA1LjAwI0VyYXNlYWJsZSBwcm9ncmFtbWFibGUgcmVhZCBvbmx5IG1lbW9yeSAoRVBST00pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA2LjAwI0VsZWN0cm9uaWNhbGx5IGVyYXNlYWJsZSBwcm9ncmFtbWFibGUgcmVhZCBvbmx5IG1lbW9yeSAoRUVQUk9NKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wNy4wMCNNb25vbGl0aWhjIG1lbW9yeSBpbnRlZ3JhdGVkIGNpcmN1aXRzIChNTUlDKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wOC4wMCNSZWFkIG9ubHkgbWVtb3J5IChST00pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA5LjAwI0FwcGxpY2F0aW9uIHNwZWNpZmljIGludGVncmF0ZWQgY2lyY3VpdHMgKEFTSUMpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjEwLjAwI1RoaW4gcXVhZCBmbGF0IHBhY2sgKFRRRlApIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjExLjAwI1Byb2dyYW1tYWJsZSBhcnJheSBsb2dpYyAoUEFMKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xMi4wMCNHYXRlIGFycmF5IGxvZ2ljIChHQUwpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjEzLjAwI1RyYW5zaXN0b3IgdHJhbnNpc3RvciBsb2dpYyAoVFRMKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xNC4wMCNFbWl0dGVyIGNvdXBsZWQgbG9naWMgKEVDTCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTUuMDAjQmlwb2xhciBvciBtZXRhbCBveGlkZSBzZW1pY29uZHVjdG9yIHRlY2hub2xvZ3kgKEJJTU9TKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xNi4wMCNCaXBvbGFyIGNvbXBsZW1lbnRhcnkgbWV0YWwgb3hpZGUgc2VtaWNvbmR1Y3RvciB0ZWNobm9sb2d5IChCSUNNT1MpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE3LjAwI1NtYXJ0IGNhcmRzIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE4LjAwI1Vwc2NyZWVuZWQgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xOS4wMCNMaW5lYXIgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4yMC4wMCNEaWdpdGFsIGludGVncmF0ZWQgY2lyY3VpdHMjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjEuMDAjU3luY2hyb25vdXMgZHluYW1pYyByYW5kb20gYWNjZXNzIG1lbW9yeSAoU0RSQU0pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjIyLjAwI0ZsYXNoIG1lbW9yeSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4yMy4wMCNSYW1idXMgZHluYW1pYyByYW5kb20gYWNjZXNzIG1lbW9yeVJEUkFNIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjI0LjAwI1N5bmNocm9ub3VzIGdyYXBoaWMgcmFuZG9tIGFjY2VzcyBtZW1vcnkgU0dSQU0jMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTcuMDAuMDAjSHlicmlkIGludGVncmF0ZWQgY2lyY3VpdHMjMzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTcuMDEuMDAjTWljcm9wcm9jZXNzb3JzIzMyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE3LjAyLjAwI0Nsb2NrIG9zY2lsbGF0b3JzIzMyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE3LjAzLjAwI01pY3JvY29udHJvbGxlcnMjMzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTguMDAuMDAjVW5tb3VudGVkIGludGVncmF0ZWQgY2lyY3VpdHMjMzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTguMDEuMDAjVW5tb3VudGVkIGRpZXMjMzIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTguMDIuMDAjVW5tb3VudGVkIHdhZmVycyMzMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMy4wMCNVbm1vdW50ZWQgY2hpcHMjMzIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTEuMDAuMDAuMDAjRGlvZGVzIGFuZCB0cmFuc2lzdG9ycyBhbmQgc2VtaWNvbmR1Y3RvciBkZXZpY2VzIzMyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjAwLjAwI0Rpb2RlcyMzMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wMS4wMCNNaWNyb3dhdmUgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjAyLjAwI1plbmVyIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wMy4wMCNMaWdodCBlbWl0dGluZyBkaW9kZXMgKExFRHMpIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA0LjAwI1NjaG90dGt5IGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wNS4wMCNUdW5uZWwgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA2LjAwI1Bob3Rvc2Vuc2l0aXZlIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wNy4wMCNWYXJpYWJsZSBjYXBhY2l0YW5jZSBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDguMDAjU29sYXIgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA5LjAwI1Bvd2VyIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4xMC4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMTEuMDAjU21hbGwgc2lnbmFsIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wMC4wMCNUcmFuc2lzdG9ycyMzMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wMS4wMCNQaG90byBzZW5zaXRpdmUgdHJhbnNpc3RvcnMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDIuMDAjRmllbGQgZWZmZWN0IHRyYW5zaXN0b3JzIChGRVQpIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjAzLjAwI01ldGFsIG94aWRlIHNpbGljb25lIGZpZWxkIGVmZmVjdCB0cmFuc2lzdG9ycyAoTU9TRkVUKSMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wNC4wMCNUcmFuc2lzdG9yIGNoaXBzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA1LjAwI1RyYW5zaXN0b3IgZGllcyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wNi4wMCNUcmFuc2lzdG9yIHdhZmVycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wNy4wMCNCaXBvbGFyIGRhcmxpbmd0b24gb3IgcmFkaW8gZnJlcXVlbmN5IChSRikgdHJhbnNpc3RvcnMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDguMDAjVW5panVuY3Rpb24gdHJhbnNpc3RvcnMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDkuMDAjSW5zdWxhdGVkIGdhdGUgYmlwb2xhciB0cmFuc2lzdG9ycyAoSUdCVCkjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMTAuMDAjSnVuY3Rpb24gZmllbGQgZWZmZWN0IHRyYW5zaXN0b3JzIChKRkVUKSMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wMC4wMCNTZW1pY29uZHVjdG9yIGRldmljZXMjMzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDEuMDAjUGhvdG92b2x0YWljIGNlbGxzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjAyLjAwI1RoeXJpc3RvcnMjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDMuMDAjRGlhY3MjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDQuMDAjVHJpYWNzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjA1LjAwI09wdGljYWwgY291cGxlZCBpc29sYXRvcnMjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDYuMDAjQ3J5c3RhbCBvc2NpbGxhdG9ycyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOC4wMC4wMCNJbnRlZ3JhdGVkIGNpcmN1aXQgY29tcG9uZW50cyMzMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOC4wMS4wMCNJbnRlcmdyYXRlZCBjaXJjdWl0IGxpZHMjMzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTguMDIuMDAjSW50ZWdyYXRlZCBjaXJjdWl0IHBhY2thZ2VzIzMyLjExLjE4LjAwLjAwCi11bnNwc2M3IzMyLjExLjE4LjAzLjAwI1N1YnN0cmF0ZXMjMzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDAuMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgY29tcG9uZW50cyMzMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wMS4wMCNBbXBsaWZpZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjAyLjAwI0F0dGVudWF0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjAzLjAwI0NpcmN1bGF0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA0LjAwI0NvdXBsZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA1LjAwI0RlbGF5IGxpbmVzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA2LjAwI0RldGVjdG9ycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wNy4wMCNEdW1teSBsb2FkcyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wOC4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBmaWx0ZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA5LjAwI0lzb2xhdG9ycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMC4wMCNNaXhlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTEuMDAjUGhhc2Ugc2hpZnRlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTIuMDAjUG93ZXIgZGl2aWRlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTMuMDAjV2F2ZSB0dWJlIGFtcGxpZmllcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTQuMDAjVGVybWluYXRpb25zIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjE1LjAwI01vZHVsYXRvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMDAuMDAuMDAjUHJpbnRlZCBjb21wb25lbnRzIzMyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjAwLjAwI0NhcGFjaXRvcnMjMzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTUuMDEuMDAjRml4ZWQgY2FwYWNpdG9ycyMzMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNS4wMi4wMCNWYXJpYWJsZSBjYXBhY2l0b3JzIG9yIHZhcmFjdG9ycyMzMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNS4wMy4wMCNBZGp1c3RhYmxlIHByZSBzZXQgY2FwYWNpdG9ycyMzMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNS4wNC4wMCNDYXBhY2l0b3IgbmV0d29ya3MjMzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDAuMDAjUmVzaXN0b3JzIzMyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjAxLjAwI1RoZXJtaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjAyLjAwI0Z1c2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wMy4wMCNWYXJpYWJsZSByZXNpc3RvcnMgb3IgdmFyaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA0LjAwI0ZpeGVkIGNhcmJvbiByZXNpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDUuMDAjRml4ZWQgdGhpY2sgZmlsbSByZXNpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDYuMDAjRml4ZWQgdGhpbiBmaWxtIHJlc2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wNy4wMCNSZXNpc3RvciBuZXR3b3JrcyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wOC4wMCNXaXJlIHdvdW5kIHJlc2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wMC4wMCNEaXNjcmV0ZSBjb21wb25lbnRzIzMyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjAxLjAwI1JlY3RpZmllcnMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDIuMDAjSW5kdWN0b3JzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjAzLjAwI0ZlcnJpdGVzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjA0LjAwI1N0YXRpYyBjb252ZXJ0ZXJzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjA1LjAwI0ludmVydGVycyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wNi4wMCNSZXNpc3RvciBvciBjYXBhY2l0b3IgKFIvQykgbmV0d29ya3MjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTMuMDAuMDAuMDAjUGFzc2l2ZSBjb21wb25lbnRzIzMyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEzLjEwLjAwLjAwI1RlbXBlcmF0dXJlIGNvbnRyb2xzIzMyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEzLjEwLjAxLjAwI0hlYXQgc2lua3MjMzIuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMzkuMDAuMDAuMDAuMDAjTGlnaHRpbmcgYW5kIEVsZWN0cmljYWwgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzM5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjAwLjAwLjAwI0xhbXBzIGFuZCBsaWdodGJ1bGJzIGFuZCBsYW1wIGNvbXBvbmVudHMjMzkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDAuMDAjTGFtcHMjMzkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDEuMDAjSGFsb2dlbiBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wMi4wMCNNZWRpY2FsIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjAzLjAwI1NvbGFyIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjA0LjAwI0FsY29ob2wgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDUuMDAjRmx1b3Jlc2NlbnQgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDYuMDAjQXJjIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjA4LjAwI1NoYWRvd2xlc3Mgb3Igc2NpYWx5dGljIG9wZXJhdGlvbiBsaWdodCMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wOS4wMCNTdGFnZSBvciBzdHVkaW8gbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTAuMDAjRmlsYW1lbnQgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTEuMDAjSGlnaCBpbnRlbnNpdHkgZGlzY2hhcmdlIChISUQpIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjEyLjAwI0luY2FuZGVzY2VudCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xMy4wMCNJbmZyYXJlZCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xNC4wMCNNZXRhbCBoYWxpZGUgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTUuMDAjVmFwb3IgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTYuMDAjVWx0cmF2aW9sZXQgKFVWKSBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xNy4wMCNIaWdoIHByZXNzdXJlIHNvZGl1bSBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNy4wMC4wMCNCdWxiIGdsYXNzIzM5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE3LjAxLjAwI0ZsdW9yZXNjZW50IHR1YmVzIzM5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE4LjAwLjAwI0xhbXAgY29tcG9uZW50cyMzOS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xOC4wMS4wMCNMYW1wIGZpbGFtZW50IzM5LjEwLjE4LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE5LjAwLjAwI01vYmlsZSBhbmQgZml4ZWQgZmxvb2RsaWdodGluZyMzOS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xOS4wMS4wMCNMaWdodCB0b3dlciMzOS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzOS4xMC4xOS4wMi4wMCNMaWdodCBjYXJ0IzM5LjEwLjE5LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE5LjAzLjAwI0xpZ2h0IHN0YW5kIzM5LjEwLjE5LjAwLjAwCi11bnNwc2M3IzM5LjExLjAwLjAwLjAwI0xpZ2h0aW5nIGFuZCBmaXh0dXJlcyBhbmQgYWNjZXNzb3JpZXMjMzkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDAuMDAjSW50ZXJpb3IgbGlnaHRpbmcgYW5kIGZpeHR1cmVzIzM5LjExLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjAxLjAwI0ZsdW9yZXNjZW50IGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjAyLjAwI1Zhbml0eSBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wMy4wMCNXYWxsIGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjA0LjAwI1N0YWdlIG9yIHN0dWRpbyBsaWdodGluZyBzeXN0ZW1zIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjA1LjAwI1JlY2Vzc2VkIGxpZ2h0aW5nIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjA2LjAwI0NoYW5kZWxpZXJzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjA3LjAwI0Rlc2sgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDguMDAjVHJhY2sgbGlnaHRpbmcjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDkuMDAjRmxvb3IgdG9yY2hpZXJlIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjEwLjAwI1RhYmxlIGxhbXBzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjExLjAwI0RlY29yYXRpdmUgbGlnaHRpbmcjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTIuMDAjTGFib3JhdG9yeSBiZW5jaCBsaWdodHMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTMuMDAjSW50ZXJpb3Igc29sYXIgbGlnaHRpbmcjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTQuMDAjVHJlZSBsaWdodHMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTUuMDAjRG93bmxpZ2h0aW5nIGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjE2LjAwI1Rhc2sgbGlnaHRpbmcgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTcuMDAjV2F4IGNhbmRsZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTguMDAjSGFuZCBvciBleHRlbnNpb24gbGlnaHQjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTkuMDAjQ2FuZGxlIGhvbGRlcnMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMjAuMDAjSGFsb2dlbiBsaWdodGluZyBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wMC4wMCNFeHRlcmlvciBsaWdodGluZyBhbmQgZml4dHVyZXMjMzkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDMuMDAjUm9hZHdheSBvciBoaWdod2F5IGxpZ2h0aW5nIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjA1LjAwI0xhbmRzY2FwZSBvciBhcmVhIGxpZ2h0aW5nIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjA2LjAwI1VuZGVyd2F0ZXIgbGlnaHRpbmcjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDguMDAjUmVzaWRlbnRpYWwgc3RyZWV0IGxpZ2h0cyMzOS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wOS4wMCNLZXJvc2VuZSBvciBwcm9wYW5lIG9yIGJ1dGFuZSBsYW50ZXJucyMzOS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wMC4wMCNFbWVyZ2VuY3kgbGlnaHRpbmcjMzkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTcuMDIuMDAjRmxhc2hsaWdodHMjMzkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTcuMDMuMDAjU3Rvcm0gbGlnaHRzIzM5LjExLjE3LjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjA0LjAwI0Zsb29kIGxpZ2h0cyMzOS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wNS4wMCNMaWdodCBzdGlja3MjMzkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDAuMDAjTGlnaHRpbmcgYWNjZXNzb3JpZXMjMzkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDEuMDAjTGFtcCBiYWxsYXN0cyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wMi4wMCNMYW1wIGhvdXNpbmdzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjAzLjAwI0xhbXAgc29ja2V0cyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wNC4wMCNMYW1wIGJhc2VzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA1LjAwI0xhbXAgYnJhY2tldHMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDYuMDAjTGlnaHQgYm94ZXMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDguMDAjR3JpbGxlcyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wOS4wMCNMaWdodCBjb25kaXRpb25lciBmaWx0ZXJzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjEwLjAwI0xhbXAgc3RhcnRlciMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4xMS4wMCNFbGVjdHJpZmllZCB0cmFja3MjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMTIuMDAjTGFtcCBjb3ZlcnMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTkuMDAuMDAjSGF6YXJkb3VzIGxvY2F0aW9uIGxpZ2h0aW5nIGFuZCBmaXh0dXJlcyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOS4wMS4wMCNIYXphcmRvdXMgbG9jYXRpb24gZmxvdXJlc2NlbnQgZml4dHVyZXMjMzkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTkuMDIuMDAjSGF6YXJkb3VzIGxvY2F0aW9uIGluY2FuZGVzY2VudCBmaXh0dXJlcyMzOS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MC4wMC4wMC4wMC4wMCNEaXN0cmlidXRpb24gYW5kIENvbmRpdGlvbmluZyBTeXN0ZW1zIGFuZCBFcXVpcG1lbnQgYW5kIENvbXBvbmVudHMjNDAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMDAuMDAuMDAjSGVhdGluZyBhbmQgdmVudGlsYXRpb24gYW5kIGFpciBjaXJjdWxhdGlvbiM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wMC4wMCNWZW50aWxhdGlvbiM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wMS4wMCNBaXIgY29sbGVjdG9ycyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wMi4wMCNBaXIgZXhoYXVzdGVycyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wMy4wMCNWZW50cyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wNC4wMCNWZW50aWxhdGlvbiBkYW1wZXJzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjA1LjAwI0FpciBkaWZmdXNlcnMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDYuMDAjVmVudGlsYXRpb24gcGlwZXMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDAuMDAjQWlyIGNpcmN1bGF0aW9uIzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE2LjAxLjAwI0Jsb3dlcnMjNDAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDIuMDAjQWlyIGNpcmN1bGF0b3JzIzQwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE2LjAzLjAwI0ltcGVsbGVycyM0MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wNC4wMCNGYW5zIzQwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjAwLjAwI0Nvb2xpbmcjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTcuMDEuMDAjQWlyIGNvbmRpdGlvbmVycyM0MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wMi4wMCNDb29saW5nIGV4Y2hhbmdlcnMjNDAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTcuMDMuMDAjRXZhcG9yYXRpdmUgY29vbGVycyM0MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wNC4wMCNDb25kZW5zaW5nIHVuaXRzIzQwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjAwLjAwI0hlYXRpbmcgZXF1aXBtZW50IzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjAxLjAwI1JhZGlhdG9ycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wMi4wMCNIZWF0IGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDMuMDAjRmlyZXBsYWNlcyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wNC4wMCNIZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA1LjAwI0Z1cm5hY2VzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA2LjAwI0hlYXQgcHVtcHMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDcuMDAjU29sYXIgaGVhdGluZyB1bml0cyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wOC4wMCNIZWF0aW5nIHN0b3ZlcyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wOS4wMCNDaXJjdWxhdGlvbiBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjEwLjAwI0NvaWwgZHVjdCBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjExLjAwI0NvbnZlY3Rpb24gaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xMi4wMCNEaXZpZGVkIGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTMuMDAjRG91YmxlIHNwbGl0IGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTQuMDAjRmlubmVkIHR1YnVsYXIgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xNS4wMCNJbW1lcnNpb24gaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xNi4wMCNLZXR0bGUgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xNy4wMCNPbmUgcGFzcyBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE4LjAwI1Byb2Nlc3MgYWlyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTkuMDAjU3BhY2UgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yMC4wMCNTcGxpdCBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjIxLjAwI1N0cmlwIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjIuMDAjVHVidWxhciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjIzLjAwI1R3byBwYXNzIGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjQuMDAjUXVhcnR6IGhlYXRlciM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yNS4wMCNEb21lc3RpYyB3YXRlciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjI2LjAwI0NvbW1lcmNpYWwgd2F0ZXIgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOS4wMC4wMCNIdW1pZGl0eSBjb250cm9sIzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE5LjAxLjAwI1ZhcG9yaXplcnMjNDAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTkuMDIuMDAjRGVodW1pZGlmaWVycyM0MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOS4wMy4wMCNIdW1pZGlmaWVycyM0MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MC4xMC4yMC4wMC4wMCNCb2lsZXJzIzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjIwLjAxLjAwI0ZpcmUgdHViZSBib2lsZXJzIzQwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjIwLjAyLjAwI1dhdGVyIHR1YmUgYm9pbGVyIzQwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjIwLjAzLjAwI0VsZWN0cmljIGJvaWxlcnMjNDAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMDAuMDAuMDAjRmx1aWQgYW5kIGdhcyBkaXN0cmlidXRpb24jNDAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTUuMDAuMDAjRmx1aWQgYW5kIGdhcyBjb25kdWl0cyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNS4wMi4wMCNEdWN0cyM0MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNS4wNC4wMCNIb3NlcyM0MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wMC4wMCNWYWx2ZXMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDEuMDAjQ2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjAyLjAwI05lZWRsZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDMuMDAjUG5ldW1hdGljIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wNC4wMCNTYWZldHkgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA1LjAwI1NvbGVub2lkIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wNi4wMCNSZWxpZWYgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA3LjAwI0JhbGwgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA4LjAwI0h5ZHJhdWxpYyB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDkuMDAjQ29udHJvbCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTAuMDAjRmxvYXQgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjExLjAwI0dsb2JlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xMi4wMCNFeHBhbnNpb24gdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjEzLjAwI0dhdGUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE0LjAwI0J1dHRlcmZseSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTUuMDAjRmxhcCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTYuMDAjVmFsdmUgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE3LjAwI0FuZ2xlIGdsb2JlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xOC4wMCNCYWxsIGNoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xOS4wMCNCdXR0ZXJmbHkgbHVnIHBhdHRlcm4gdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjIwLjAwI0J1dHRlcmZseSB3YWZlciBwYXR0ZXJuIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yMS4wMCNEaWFwaHJhZ20gdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjIyLjAwI0lubGluZSBjaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjMuMDAjS25pZmUgZ2F0ZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjQuMDAjTHVicmljYXRlZCBwbHVnIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yNS4wMCNNdWQgb3Igc2x1c2ggdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI2LjAwI05vbmx1YnJpY2F0ZWQgcGx1ZyB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjcuMDAjT3JpZmljZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjguMDAjUGlsb3QgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI5LjAwI1BpbmNoIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zMC4wMCNQaXN0b24gY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjMxLjAwI1B1bXAgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjMyLjAwI1NlbnRpbmVsIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zMy4wMCNTbGlkZXIgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjM0LjAwI1N3aW5nIGNoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zNS4wMCNUdXJiaW5lIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zNi4wMCNWYWx2ZSBraXRzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjM3LjAwI1dhZmVyIGNoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wMC4wMCNIYXJkd2FyZSBhbmQgZml0dGluZ3MjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDEuMDAjRHJhaW5zIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjAyLjAwI0ZhdWNldHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDMuMDAjU2hvd2VyIGhlYWRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjA0LjAwI1NwaWdvdHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDUuMDAjU3BvdXRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjA2LjAwI1BpcGUgcGx1Z3MjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDcuMDAjUGlwZSBjbGFtcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDguMDAjTGlxdWlkIHRyYXBzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjA5LjAwI1N0ZWFtIHRyYXBzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjEwLjAwI1BsdW1iaW5nIGZsYW5nZXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTEuMDAjTWV0YWwgb3IgcnViYmVyIGV4cGFuc2lvbiBqb2ludHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTIuMDAjUGlwZSBjYXBzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjEzLjAwI1BsdW1iaW5nIHVuaW9ucyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xNC4wMCNQbHVtYmluZyBjcm9zc2VzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE1LjAwI1BsdW1iaW5nIG5pcHBsZXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTYuMDAjUCB0cmFwcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xNy4wMCNQaXBlIGJlbmRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE4LjAwI1BsdW1iaW5nIGVsYm93cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xOS4wMCNQbHVtYmluZyBhZGFwdGVycyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yMC4wMCNQbHVtYmluZyBjb25uZWN0b3JzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIxLjAwI1BsdW1iaW5nIGNvdXBsaW5ncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yMi4wMCNIYWxmIGNvdXBsaW5ncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yMy4wMCNSZWR1Y2luZyBjb3VwbGluZ3MjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjQuMDAjUGx1bWJpbmcgYnVzaGluZ3MjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjUuMDAjUGx1bWJpbmcgaGFuZ2VycyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yNi4wMCNIeWRyYW50cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yNy4wMCNQbHVtYmluZyB2ZW50cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yOC4wMCNGbHVpZCByZWd1bGF0b3JzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI5LjAwI1BsdW1iaW5nIHRlZXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzAuMDAjU3RyYWluZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjMxLjAwI05venpsZXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzIuMDAjUGx1bWJpbmcgc3BpZGVycyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zMy4wMCNQaXBlIGZpdHRpbmcjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzQuMDAjSG9zZSBmaXR0aW5nIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjM1LjAwI0Z1bm5lbHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzYuMDAjR3JlYXNlIGZpdHRpbmcjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzcuMDAjRGlhcGhyYWdtcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wMC4wMCNUdWJlIGFuZCB0dWJpbmcjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDEuMDAjRmVycm91cyBhbGxveSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDIuMDAjQ29wcGVyIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wMy4wMCNUaXRhbml1bSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDQuMDAjTWFnbmVzaXVtIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wNS4wMCNUaW4gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA2LjAwI0JyYXNzIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wNy4wMCNMZWFkIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wOC4wMCNCcm9uemUgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA5LjAwI1ppbmMgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjEwLjAwI1N0ZWVsIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xMS4wMCNJcm9uIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xMi4wMCNDZW1lbnQgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjEzLjAwI1BsYXN0aWMgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE0LjAwI1J1YmJlciB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTUuMDAjR2xhc3MgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE2LjAwI1N0b25lIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xNy4wMCNOb24gZmVycm91cyBhbGxveSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTguMDAjQWx1bWludW0gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE5LjAwI1N0YWlubGVzcyBzdGVlbCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMjAuMDAjUHJlY2lvdXMgbWV0YWwgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjIxLjAwI055bG9uIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOS4wMC4wMCNEdWN0cyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOS4wMS4wMCNGbGV4aWJsZSBkdWN0cyM0MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOS4wMi4wMCNSaWdpZCBkdWN0cyM0MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wMC4wMCNIb3NlcyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wMS4wMCNBY2lkIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAyLjAwI0FpciBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wMy4wMCNEcmlsbCBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wNC4wMCNNYXJpbmUgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDUuMDAjTWF0ZXJpYWwgaGFuZGxpbmcgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDYuMDAjT2lsIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA3LjAwI1NwZWNpYWwgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDguMDAjV2F0ZXIgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDkuMDAjQWlyIHdhdGVyIGdhcyBtdWx0aXB1cnBvc2UgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMTAuMDAjVGVmbG9uIGxpbmVkIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjAwLjAwI1BpcGUjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDEuMDAjQ2FyYm9uIHN0ZWVsIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDIuMDAjRHVjdGlsZSBpcm9uIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDMuMDAjSGlnaCBuaWNrZWwgYWxsb3kgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wNC4wMCNIaWdoIHlpZWxkIHN0ZWVsIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDUuMDAjRmVycml0aWMgYWxsb3kgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wNi4wMCNBbHVtaW51bSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA3LjAwI0JyYXNzIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDguMDAjQnJvbnplIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDkuMDAjQ29uY3JldGUgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xMC4wMCNDb3BwZXIgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xMS4wMCNDYXN0IGlyb24gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xMi4wMCNMZWFkIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTMuMDAjTWFnbmVzaXVtIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTQuMDAjTm9uIGZlcnJvdXMgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNS4wMCNQbGFzdGljIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTYuMDAjUnViYmVyIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTcuMDAjU3RhaW5sZXNzIHN0ZWVsIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTguMDAjVGluIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTkuMDAjVGl0YW5pdW0gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4yMC4wMCNaaW5jIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMjEuMDAjSG9zZSByZWVscyM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMi4wMC4wMCNGbHVpZCBhbmQgZ2FzIHJlZ3VsYXRvcnMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjIuMDEuMDAjR2FzIHJlZ3VsYXRvcnMjNDAuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjIuMDIuMDAjRmx1aWQgcmVndWxhdG9ycyM0MC4xNC4yMi4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wMC4wMCNQaXBlIGZpdHRpbmdzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjAxLjAwI1BpcGUgYW5nbGUgZmFjZSByaW5ncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wMi4wMCNQaXBlIGJyYW5jaCBvdXRsZXRzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjAzLjAwI1BpcGUgbGF0ZXJhbHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDQuMDAjUGlwZSBpbnNlcnRzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjA1LjAwI1BpcGUgcmVkdWNlcnMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDYuMDAjUGlwZSBzYWRkbGVzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjA3LjAwI1BpcGUgc3R1YmVuZHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDguMDAjUGlwZSB3eWVzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjA5LjAwI1BpcGUgYmVuZHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTAuMDAjUGlwZSBjYXBzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjExLjAwI1BpcGUgaGFsZiBjb3VwbGluZ3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTIuMDAjUGlwZSBleHBhbnNpb24gam9pbnRzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjEzLjAwI1BpcGUgcGx1Z3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTQuMDAjUGlwZSBidXNoaW5ncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xNS4wMCNQaXBlIGNvdXBsaW5ncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xNi4wMCNQaXBlIGNyb3NzZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTcuMDAjUGlwZSBlbGJvd3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTguMDAjUGlwZSBuaXBwbGVzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE5LjAwI1BpcGUgdGVlcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4yMC4wMCNQaXBlIHVuaW9ucyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4yMS4wMCNQaXBlIHJlZHVjaW5nIGNvdXBsaW5ncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4yMi4wMCNQaXBlIHJlcGFpciBjbGFtcHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMjMuMDAjUnVwdHVyZSBkaXNrIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjAwLjAwI1BpcGUgZmxhbmdlcyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wMS4wMCNBbW1vbmlhIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDIuMDAjQmFja3VwIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDMuMDAjQmxpbmQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wNC4wMCNMYXBqb2ludCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA1LjAwI0xvbmcgd2VsZG5lY2sgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wNi4wMCNPcmlmaWNlIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDcuMDAjUGxhdGUgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wOC4wMCNTbGlwb24gZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wOS4wMCNTb2NrZXR3ZWxkIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMTAuMDAjU3BlY3RhY2xlIGJsaW5kIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMTEuMDAjVGhyZWFkZWQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4xMi4wMCNXZWxkbmVjayBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI1LjAwLjAwI1RyYXBzIGFuZCBzdHJhaW5lcnMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjUuMDEuMDAjTGlxdWlkIHN0cmFpbmVycyM0MC4xNC4yNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wMi4wMCNMaXF1aWQgdHJhcHMjNDAuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjUuMDMuMDAjU3RlYW0gdHJhcHMjNDAuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjUuMDQuMDAjU3RlYW0gc3RyYWluZXJzIzQwLjE0LjI1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI2LjAwLjAwI1R1YmUgZml0dGluZ3MjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjYuMDEuMDAjQnJhc3MgdHViZSBmaXR0aW5ncyM0MC4xNC4yNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNi4wMi4wMCNDYXJib24gc3RlZWwgdHViZSBmaXR0aW5ncyM0MC4xNC4yNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNi4wMy4wMCNTdGFpbmxlc3Mgc3RlZWwgdHViZSBmaXR0aW5ncyM0MC4xNC4yNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4wMC4wMC4wMCNJbmR1c3RyaWFsIHB1bXBzIGFuZCBjb21wcmVzc29ycyM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wMC4wMCNQdW1wcyM0MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wMS4wMCNBaXIgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDIuMDAjVmFjdXVtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjAzLjAwI0NlbnRyaWZ1Z2FsIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA0LjAwI0NpcmN1bGF0aW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA1LjAwI0Rvc2luZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wNi4wMCNIYW5kIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA3LjAwI0lycmlnYXRpb24gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDguMDAjTXVkIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA5LjAwI1JlY2lwcm9jYXRpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTAuMDAjV2F0ZXIgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTEuMDAjV2VsbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xMi4wMCNTdW1wIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjEzLjAwI1N1Ym1lcnNpYmxlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE0LjAwI1N0ZWFtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE1LjAwI1NvbGVub2lkIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE2LjAwI1NoZWFyIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE3LjAwI1Nld2FnZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xOC4wMCNTZWFsbGVzcyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xOS4wMCNTYW5pdGFyeSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yMC4wMCNTYW1wbGluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yMS4wMCNSb3RhcnkgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjIuMDAjUmV2ZXJzZSBvc21vc2lzIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjIzLjAwI1Bvc2l0aXZlIGRpc3BsYWNlbWVudCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yNC4wMCNPaWwgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjUuMDAjU2x1ZGdlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI2LjAwI1R1cmJpbmUgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjcuMDAjUGx1bmdlciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yOC4wMCNPc2NpbGxhdGluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yOS4wMCNEcnVtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjMwLjAwI0RyZWRnZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zMS4wMCNEZXdhdGVyaW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjMyLjAwI0Z1ZWwgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzMuMDAjSHlkcmF1bGljIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM0LjAwI0NyeW9nZW5pYyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zNS4wMCNTbHVkZ2UgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zNi4wMCNTZXdhZ2UgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zNy4wMCNTdWJtZXJzaWJsZSBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM4LjAwI1dhdGVyIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzkuMDAjV2VsbCBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQwLjAwI1N1bXAgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40MS4wMCNEb3NpbmcgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40Mi4wMCNDZW50cmlmdWdhbCBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQzLjAwI0NpcmN1bGF0aW9uIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDQuMDAjUm90YXJ5IHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDUuMDAjUHVtcCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDYuMDAjQXhpYWwgc3BsaXQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDcuMDAjRGVlcHdlbGwgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDguMDAjRGlhcGhyYWdtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQ5LjAwI0RvdWJsZSBkaWFwaHJhZ20gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTAuMDAjRHVwbGV4IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjUxLjAwI0dlYXIgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTIuMDAjTWV0ZXJpbmcgb3IgaW5qZWN0aW9uIG9yIHByb3BvcnRpb25pbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTMuMDAjUHJvZ3Jlc3NpdmUgY2F2aXR5IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU0LjAwI1JhbSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41NS4wMCNSb3RhcnkgY2FtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU2LjAwI1JvdGFyeSBsb2JlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU3LjAwI1JvdGF0aW5nIHBpc3RvbiBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41OC4wMCNTY3JldyBQdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41OS4wMCNTaW1wbGV4IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjYwLjAwI1NsaWRpbmcgdmFuZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS42MS4wMCNUcmlwbGV4IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjYyLjAwI1dvcm0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDAuMDAjQ29tcHJlc3NvcnMjNDAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDEuMDAjQWlyIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjAyLjAwI0F4aWFsIGZsb3cgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDMuMDAjRGlhcGhyYWdtIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA0LjAwI0dhcyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wNS4wMCNNb3RvciBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wNi4wMCNSZWNpcHJvY2F0aW5nIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA3LjAwI1JlZnJpZ2VyYW50IGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA4LjAwI1JvdGFyeSBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wOS4wMCNTY3JldyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xMC4wMCNDb21wcmVzc29yIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xMS4wMCNCYXJyZWwgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTIuMDAjQ2VudHJpZnVnYWwgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTMuMDAjQ29tYmluYXRpb24gY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTQuMDAjU2VtaSByYWRpYWwgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTUuMDAjVHVyYm8gY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTYuMDAjQ29tcHJlc3NvciBraXRzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE3LjAwLjAwI1B1bXAgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE1LjE3LjAxLjAwI1B1bXAgY2FzaW5ncyM0MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNy4wMi4wMCNQdW1wIHBhY2tpbmdzIzQwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE2LjAwLjAwLjAwI0luZHVzdHJpYWwgZmlsdGVyaW5nIGFuZCBwdXJpZmljYXRpb24jNDAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDAuMDAjRmlsdGVycyM0MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wMS4wMCNWYWN1dW0gZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wMi4wMCNXYXRlciBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjAzLjAwI0R1c3QgY29sbGVjdG9ycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wNC4wMCNPaWwgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wNS4wMCNBaXIgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wNi4wMCNGaWx0ZXJpbmcgbWFjaGluZXJ5IzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA3LjAwI0ZpbHRlciBtZW1icmFuZXMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDguMDAjQmFnIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDkuMDAjQWJzb3JwdGlvbiBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjEwLjAwI0JhZyBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjExLjAwI0NvYWxlc2NpbmcgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xMi4wMCNFbGVjdHJvbmljIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTMuMDAjRnVlbCBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE0LjAwI0dhcyBwaXBlbGluZSBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE1LjAwI0h5ZHJhdWxpYyBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE2LjAwI0luIGxpbmUgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xNy4wMCNMaWdodCBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE4LjAwI01pY3JvZmliZXIgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xOS4wMCNQYW5lbCBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIwLjAwI1JhZGlhbCBmaW4gZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4yMS4wMCNGaWx0ZXIgQmFzZSM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4yMi4wMCNGaWx0ZXIgRmlucyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4yMy4wMCNGdWVsIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjI0LjAwI1BhaW50IzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE2LjAwLjAwI1B1cmlmaWNhdGlvbiM0MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNi4wMS4wMCNBaXIgc2NydWJiZXJzIzQwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE2LjAyLjAwI0FpciBjbGVhbmVycyM0MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNy4wMC4wMCNTZXBhcmF0b3JzIzQwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE3LjAxLjAwI0NlbnRyaWZ1Z2VzIzQwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE3LjAyLjAwI1dldCBzY3J1YmJlcnMjNDAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTcuMDMuMDAjTWlzdCBlbGltaW5hdG9ycyM0MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wMC4wMCNGaWx0ZXIgbWVkaWEjNDAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTguMDEuMDAjTWV0YWwgZmFicmljIG1lZGlhIzQwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjAyLjAwI1ByZXNzZWQgZmVsdHMjNDAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTguMDMuMDAjRmlsdGVyIHBhcGVycyM0MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wNS4wMCNGaWx0ZXIgY2xvdGgjNDAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDEuMDAuMDAuMDAuMDAjTGFib3JhdG9yeSBhbmQgTWVhc3VyaW5nIGFuZCBPYnNlcnZpbmcgYW5kIFRlc3RpbmcgRXF1aXBtZW50IzQxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjAwLjAwLjAwI0xhYm9yYXRvcnkgYW5kIHNjaWVudGlmaWMgZXF1aXBtZW50IzQxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjAwLjAwI0xhYm9yYXRvcnkgYmxlbmRpbmcgYW5kIGRpc3BlcnNpbmcgYW5kIGhvbW9nZW5pemluZyBhbmQgbWl4aW5nIGFuZCBzdGlycmluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDEuMDAjTWl4ZXJzIG9yIGJsZW5kZXJzIG9yIGVtdWxzaWZpZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjAyLjAwI1N0b21hY2hlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDMuMDAjTGFib3JhdG9yeSBzcHJheWVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wNC4wMCNIb21vZ2VuaXNlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDUuMDAjRnJlbmNoIHByZXNzdXJlIGNlbGxzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjA2LjAwI1JvbGxlciBtaXhlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDcuMDAjUm90YXRvcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDguMDAjVmlicmF0b3JzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjEwLjAwI01hZ25ldGljIHNwaW4gYmFycyBvciByZXRyaWV2ZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjExLjAwI1N0aXJyaW5nIHRhYmxlcyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xMi4wMCNNdWx0aSBiYW5rIG9yIGZsb2NjdWxhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTMuMDAjU2hha2VycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xNC4wMCNMYWJvcmF0b3J5IGNlbnRyaWZ1Z2VzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjE1LjAwI0xpcXVpZCBtZWFzdXJpbmcgY2FucyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xNi4wMCNMaXF1aWQgZGlzcGVuc2VycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wMC4wMCNMYWJvcmF0b3J5IGZpeHR1cmVzIGFuZCBhY2Nlc3NvcmllcyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wMy4wMCNMYWJvcmF0b3J5IHN0YW5kcyBvciBjbGFtcHMgb3IgdG9uZ3MjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDQuMDAjU2xpZGUgY29udGFpbmVycyM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wNS4wMCNTbGlkZSBkcnlpbmcgcGxhdGVzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA3LjAwI01pY3Jvc2xpZGUgbWFraW5nIGVxdWlwbWVudCM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wOC4wMCNNaWNyb3NsaWRlIHN0b3JhZ2UgZXF1aXBtZW50IzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA5LjAwI1N0YXRpYyBlbGltaW5hdG9ycyM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4xMS4wMCNTbGlkZSB3YXJtZXJzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAwLjAwI0xhYm9yYXRvcnkgYm9yaW5nIGFuZCBncmluZGluZyBhbmQgY3V0dGluZyBhbmQgY3J1c2hpbmcgYW5kIHByZXNzaW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wMS4wMCNNaWxscyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wMi4wMCNQZXN0bGUgb3IgbW9ydGFycyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wMy4wMCNUaXNzdWUgZ3JpbmRlcnMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDQuMDAjTWljcm90b21lcyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wNS4wMCNDcnVzaGVycyBvciBwdWx2ZXJpc2VycyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wNi4wMCNEaXNpbnRlZ3JhdG9ycyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wNy4wMCNMYWJvcmF0b3J5IHByZXNzZXMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDAuMDAjTGFib3JhdG9yeSBlbGVjdHJvbiBhbmQgc29saWQgc3RhdGUgcGh5c2ljcyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDEuMDAjRWxlY3Ryb24gZ3VucyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wMi4wMCNYIHJheSBnZW5lcmF0b3JzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjAzLjAwI0NvdWxvbWV0ZXJzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA0LjAwI0VsZWN0cm9zY29wZXMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDUuMDAjRmx1eG1ldGVycyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wNi4wMCNNYWduZXRvbWV0ZXJzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA3LjAwI0VsZWN0cm9uIGRpZmZyYWN0aW9uIGFwcGFyYXR1cyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wOC4wMCNOZXV0cm9uIGRpZmZyYWN0aW9uIGFwcGFyYXR1cyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wOS4wMCNPcHRpY2FsIGRpZmZyYWN0aW9uIGFwcGFyYXR1cyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4xMC4wMCNEaWZmcmFjdG9tZXRlcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTkuMDAuMDAjTGFib3JhdG9yeSBpb25pYyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTkuMDEuMDAjSW9uIHNvdXJjZXMjNDEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTkuMDIuMDAjSW9uIGV4Y2hhbmdlIGFwcGFyYXR1cyM0MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMy4wMCNJb24gaW1wbGFudGF0aW9uIGVxdWlwbWVudCM0MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wMC4wMCNTYW1wbGluZyBhbmQgcHVyaWZpY2F0aW9uIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wMS4wMCNTYW1wbGUgY2hhbmdlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDIuMDAjU2FtcGxlIG94aWRpc2VyIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjAzLjAwI1NhbXBsZSBwcmVwYXJhdGlvbiBsaW5lIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA0LjAwI1NhbXBsZSBwcmVwYXJhdGlvbiBib21icyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wNS4wMCNXYXRlciBzYW1wbGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wNi4wMCNBaXIgc2FtcGxlcnMgb3IgY29sbGVjdG9ycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wNy4wMCNSZWFnZW50IGtpdHMgZm9yIHVzZSB3aXRoIGFpciBzYW1wbGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wOC4wMCNGaWx0ZXJzIG9yIG90aGVyIHNwYXJlIHBhcnRzIGZvciBzYW1wbGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wOS4wMCNEdXN0IGZhbGwgaG9sZGVycyBvciBqYXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjExLjAwI1N1bHBodXIgZGlveGlkZSBvciBzbW9rZSBzYW1wbGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xMi4wMCNTYW1wbGUgYXBwbGljYXRvcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTMuMDAjUGxhbnQgc2FtcGxlcyBhbmFseXNpcyBlcXVpcG1lbnQjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTQuMDAjQWlyIHBvbGx1dGFudCBzYW1wbGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xNS4wMCNXYXRlciBwdXJpZmljYXRpb24gcmVhZ2VudHMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTYuMDAjRGVpb25pc2F0aW9uIG9yIGRlbWluZXJhbGlzYXRpb24gZXF1aXBtZW50IzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE3LjAwI0Jhc2UgZXhjaGFuZ2UgZXF1aXBtZW50IzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE4LjAwI1JldmVyc2Ugb3Ntb3NpcyBlcXVpcG1lbnQjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTkuMDAjVWx0cmEgdmlvbGV0IHdhdGVyIHB1cmlmaWNhdGlvbiB1bml0cyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yMC4wMCNVbHRyYSBwdXJlIHdhdGVyIHN5c3RlbXMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjEuMDAjV2F0ZXIgYW5hbHlzaXMgc3lzdGVtcyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yMi4wMCNEZWh5ZHJhdG9ycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yMy4wMCNEZW94aWRlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjQuMDAjRGlzc29sdmVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yNS4wMCNTcGVjaW1lbiBob2xkZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjI2LjAwI1NwZWNpbWVuIGNvbGxlY3RvcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjcuMDAjU2FtcGxlIGhvbGRlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjguMDAjTHVicmljYW50IHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjAwLjAwI0xhYm9yYXRvcnkgZmVybWVudGF0aW9uIGFuZCBpbmN1YmF0aW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wMS4wMCNTdGFuZGFyZCBmZXJtZW50YXRpb24gdW5pdHMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDIuMDAjQ29udGludW91cyBjdWx0dXJlIGFwcGFyYXR1cyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wMy4wMCNBbmFlcm9iaWMgamFycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wNC4wMCNEaWdlc3Rpb24gc3lzdGVtcyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wNS4wMCNXYXRlciBqYWNrZXRlZCBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA2LjAwI0NPMiBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA3LjAwI1Rpc3N1ZSBjdWx0dXJlIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDguMDAjSW5jdWJhdG9yIG92ZW5zIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA5LjAwI0Nvb2xlZCBpbmN1YmF0b3JzIChCT0QpIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjEwLjAwI1NoYWtpbmcgaW5jdWJhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4xMS4wMCNJbnNwaXNzYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMTIuMDAjUGxhdGUgaW5jdWJhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4xMy4wMCNJbiB2aXRybyBjdWx0dXJlIGVxdWlwbWVudCM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4xNC4wMCNCYWN0ZXJpYSBlcXVpcG1lbnQjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDAuMDAjTGFib3JhdG9yeSBoZWF0aW5nIGFuZCBkcnlpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjAxLjAwI0dhcyBidXJuZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjAyLjAwI1NwaXJpdCBidXJuZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjAzLjAwI0xhYm9yYXRvcnkgaW5jaW5lcmF0b3JzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA0LjAwI0xhYm9yYXRvcnkgaGVhdGVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wNS4wMCNNYW50bGVzIG9yIHRhcGVzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA2LjAwI0hvdCBwbGF0ZXMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDcuMDAjV2FybWluZyBjYWJpbmV0cyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wOC4wMCNEcnlpbmcgb3ZlbnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDkuMDAjSW5kdWN0aW9uIGRyeWVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xMC4wMCNJbmZyYXJlZCBkcnllcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTEuMDAjU3ByYXkgZHJ5ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjEyLjAwI0hvdCBhaXIgYmxvd2VycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xMy4wMCNEcnlpbmcgY2FiaW5ldHMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTQuMDAjRnJlZXplIGRyeWVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xNS4wMCNMYWJvcmF0b3J5IGZ1cm5hY2VzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE2LjAwI0FnZWluZyBvdmVucyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xOC4wMCNRdWFydHogb3ZlbiBwb3RzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE5LjAwI01pY3Jvd2F2ZSBvciByYWRpYW50IGhlYXQgb3ZlbnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMjAuMDAjRGVzaWNjYXRvcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMjEuMDAjVGVtcGVyYXR1cmUgY3ljbGluZyBjaGFtYmVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wMC4wMCNMYWJvcmF0b3J5IGVudG9tb2xvZ2ljYWwgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wMS4wMCNJbnNlY3QgY29udGFpbmVycyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wMi4wMCNSZWFyaW5nIGZhY2lsaXRpZXMgZm9yIGVudG9tb2xvZ3kjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDMuMDAjRmFicmljIG9yIG5ldHRpbmcgZm9yIGVudG9tb2xvZ3kjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDQuMDAjRW50b21vbG9naWNhbCBwaW5uaW5nIGVxdWlwbWVudCM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wNS4wMCNFbnRvbW9sb2dpY2FsIG1vdW50aW5nIG1hdGVyaWFscyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wNi4wMCNFbnRvbW9sb2dpY2FsIHRyYXlzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA3LjAwI0VudG9tb2xvZ2ljYWwgY2F0Y2hpbmcgZXF1aXBtZW50IzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA4LjAwI0VudG9tb2xvZ2ljYWwgYXNwaXJhdG9ycyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wOS4wMCNFbnRvbW9sb2dpY2FsIGRpcHBlcnMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMTAuMDAjRW50b21vbG9naWNhbCBtb25vY3VwcyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4xMS4wMCNFbnRvbW9sb2dpY2FsIHN0aWNreSB0cmFwcyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4xMi4wMCNJbnNlY3QgdGVzdCBraXRzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjEzLjAwI0VudG9tb2xvZ2ljYWwgZGlzcGxheSB1bml0cyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wMC4wMCNBbmltYWwgbGFib3JhdG9yeSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjAxLjAwI0NhZ2VzIGZvciBzbWFsbCBhbmltYWxzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjAyLjAwI0FxdWFyaWEgZXF1aXBtZW50IzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjAzLjAwI0FuaW1hbCBpZGVudGlmaWNhdGlvbiBzdXBwbGllcyM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wNC4wMCNBbmltYWwgY2F0Y2hpbmcgZGV2aWNlcyM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wNS4wMCNGaXNoIGFlcmF0aW9uIHN5c3RlbXMjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDYuMDAjQW5pbWFsIGZlZWRpbmcgbmVlZGxlcyM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wMC4wMCNDcnlzdGFsbG9ncmFwaHkgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjAxLjAwI0NyeXN0YWwgbGF0dGljZSBtb2RlbHMjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDIuMDAjU2NpbnRpbGxhdGlvbiBjcnlzdGFsIGFzc2VtYmxpZXMjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDMuMDAjTGlnaHQgc2NhdHRlcmluZyBlcXVpcG1lbnQjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDQuMDAjWCByYXkgZGlmZnJhY3Rpb24gZXF1aXBtZW50IzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjA1LjAwI0NyeXN0YWxsaXNlcnMjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDYuMDAjQ3J5c3RhbCBncm93aW5nIGVxdWlwbWVudCM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wMC4wMCNIaXN0b2xvZ3kgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjAxLjAwI1Rpc3N1ZSBlbWJlZGRpbmcgc3RhdGlvbnMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDIuMDAjRW1iZWRkaW5nIG1vbGRzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjAzLjAwI0VtYmVkZGluZyBjYXBzdWxlcyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wNC4wMCNFbWJlZGRpbmcgY29tcG91bmRzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjA1LjAwI0hpc3RvbG9naWNhbCBzdGFpbmluZyBhcHBhcmF0dXMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDkuMDAjVGlzc3VlIHByb2Nlc3NvcnMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTAuMDAjVGlzc3VlIGN1bHR1cmUgYXBwYXJhdHVzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjExLjAwI0hpc3RvbG9naWNhbCBrbml2ZXMgb3Iga25pZmUgaG9sZGVycyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4xMi4wMCNIaXN0b2xvZ2ljYWwgZ2xhc3Mga25pZmUgbWFrZXJzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjEzLjAwI0hpc3RvbG9naWNhbCBob25lcyBvciBzdHJhcHMgb3IgY29tcG91bmRzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjE0LjAwI1VsdHJhc29uaWMgZGlzaW50ZWdyYXRvcnMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDAuMDAjTGFib3JhdG9yeSBjb29saW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMS4wMCNSZWZyaWdlcmF0ZWQgY29vbGluZyBwbGF0ZSBwcm9iZXMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDIuMDAjRnJlZXppbmcgc3ByYXkgYWVyb3NvbHMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDMuMDAjQ3J5b3N0YXRzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA0LjAwI0ZhbiBjaXJjdWxhdGVkIG92ZW5zIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA1LjAwI1VsdHJhIGNvbGQgY2FiaW5ldHMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDYuMDAjQ3J5b2dlbmljIGZyZWV6ZXJzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA3LjAwI0NoaWxsaW5nIHVuaXRzIG9yIGNvbGQgd2F0ZXIgY2lyY3VsYXRpb24jNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDguMDAjUmVmcmlnZXJhdGVkIGNvb2xpbmcgbW9kdWxlcyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wOS4wMCNDYWRhdmVyIHN0b3JhZ2UgcmVmcmlnZXJhdG9ycyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wMC4wMCNMYWJvcmF0b3J5IHN1cHBsaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjAxLjAwI1Rlc3QgdHViZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDMuMDAjUGlwZXR0ZXMgb3IgYWNjZXNzb3JpZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDQuMDAjRmxhc2tzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA1LjAwI0JlYWtlcnMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDYuMDAjU3RpcnJpbmcgcm9kcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wNy4wMCNMYWJvcmF0b3J5IG9yIHNhbXBsaW5nIHN5cmluZ2VzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA4LjAwI0Rlc2ljY2FudHMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDkuMDAjV2F0Y2ggZ2xhc3NlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xMC4wMCNCdXJldHMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTEuMDAjTWVhc3VyaW5nIGN5bGluZGVyIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjEyLjAwI0xhYm9yYXRvcnkgZGlzaGVzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjEzLjAwI1NsaWRlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xNC4wMCNTdG9wcGVycyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xNS4wMCNUdWJpbmcgY29ubmVjdG9ycyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xNi4wMCNMYWJvcmF0b3J5IGNhc2VzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE3LjAwI0xhYm9yYXRvcnkgc2Nvb3BzIG9yIHNwYXR1bGFzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMyLjAwLjAwI0xhYm9yYXRvcnkgY2xlYW5pbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMyLjAxLjAwI0NoZW1pY2FsIGVuZ2luZWVyaW5nIHdhc2hlcnMjNDEuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDIuMDAjTGFib3JhdG9yeSB3YXNoaW5nIG1hY2hpbmVzIzQxLjEwLjMyLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMyLjAzLjAwI1BpcGV0dGUgd2FzaGVycyM0MS4xMC4zMi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMi4wNC4wMCNVbHRyYXNvbmljIGNsZWFuZXJzIzQxLjEwLjMyLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjAwLjAwI0ZsdWlkIG1lY2hhbmljcyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDEuMDAjTGlxdWlkIHNjaW50aWxsYXRpb24gY291bnRlcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDIuMDAjQmF0dGVyeSBhY2lkIGh5ZHJvbWV0ZXJzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjAzLjAwI0RlbnNpdG9tZXRlcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDQuMDAjVmFjdXVtIG92ZW5zIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA1LjAwI0hpZ2ggdmFjdXVtIGVxdWlwbWVudCM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wNi4wMCNQbmV1bWF0aWMgdmFjdXVtIGVxdWlwbWVudCM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wNy4wMCNWYWN1dW0gb3IgbWVyY3VyeSB2YXBvdXIgZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA4LjAwI0hpZ2ggdmFjdXVtIGNvbWJ1c3Rpb24gYXBwYXJhdHVzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA5LjAwI0Zsb3cgaW5qZWN0aW9uIGFuYWx5c2lzIGVxdWlwbWVudCM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xMC4wMCNHYXMgb3IgdmFwb3VyIGNvbmNlbnRyYXRpb24gbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjExLjAwI01hbm9tZXRlcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTIuMDAjVmlzY29zaW1ldGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xMy4wMCNEZXB0aCBpbmRpY2F0b3JzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjE0LjAwI01pY3Jvc2NvcGljIHN0cnVjdHVyZSBlc3RpbWF0aW9uIGFwcGFyYXR1cyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xNS4wMCNTb2x1dGlvbiBzdHJlbmd0aCBlc3RpbWF0aW9uIGFwcGFyYXR1cyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wMC4wMCNMYWJvcmF0b3J5IGVudmlyb25tZW50YWwgY29uZGl0aW9uaW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wMS4wMCNDb250YW1pbmF0aW9uIGNvbnRyb2wgc2NyZWVucyM0MS4xMC4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wMi4wMCNFbnZpcm9ubWVudGFsIGNoYW1iZXJzIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAzLjAwI01pY3JvYmlvbG9naWNhbCBhaXJjb250cm9sIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjA0LjAwI0dyb3d0aCBjaGFtYmVycyM0MS4xMC4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wNS4wMCNXYWxrIGluIGNoYW1iZXJzIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjA2LjAwI0dsb3ZlIGJveGVzIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM1LjAwLjAwI0xhYm9yYXRvcnkgdmVudGlsYXRpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM1LjAxLjAwI0VidWxpb21ldGVyIzQxLjEwLjM1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM1LjAyLjAwI0Z1bWUgaG9vZHMjNDEuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDMuMDAjRnVtZSBjdXBib2FyZHMjNDEuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDQuMDAjTGFtaW5hciBmbG93IGNhYmluZXRzIG9yIHN0YXRpb25zIzQxLjEwLjM1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjAwLjAwI0xhYm9yYXRvcnkgZGVjYW50aW5nIGFuZCBkaXN0aWxsaW5nIGFuZCBldmFwb3JhdGluZyBhbmQgZmlsdGVyaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDEuMDAjRmxhc2sgb3IgcmV0b3J0IHVuaXRzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjAyLjAwI0JpIGRpc3RpbGxhdGlvbiB1bml0cyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wMy4wMCNFdmFwb3JhdG9ycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wNC4wMCNWYWN1dW0gZXZhcG9yYXRvcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDUuMDAjRXh0cmFjdGluZyBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDYuMDAjTGluZSBmaWx0ZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA3LjAwI0dlbCBmaWx0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wOC4wMCNVbHRyYSBmaWx0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wOS4wMCNTaW50ZXJlZCBjZWxsIGZpbHRlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTAuMDAjVGhpbiBjaGFubmVsIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjExLjAwI1JldmVyc2Ugb3Ntb3NpcyBmaWx0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xMi4wMCNNb2xlY3VsYXIgZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTMuMDAjQ2FydHJpZGdlIGVsZW1lbnQgZmlsdGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xNC4wMCNGaWx0ZXIgaG9sZGVycyBvciBjeWNsb25lcyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xNS4wMCNNdWx0aSBzaGVldCBvciBwcmVzcyBvciBmaWx0ZXIjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTYuMDAjQWlyIGZpbHRyYXRpb24gc3lzdGVtcyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xNy4wMCNIZXBhIGZpbHRlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTguMDAjRmx1aWQgcHJlc3NlcyBmaWx0ZXIjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTkuMDAjU2VkaW1lbnRvbG9naWNhbCBhbmFseXppbmcgdW5pdCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yMC4wMCNMYWJvcmF0b3J5IHNlcGFyYXRvcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjEuMDAjTGFib3JhdG9yeSBzaWZ0aW5nIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yMi4wMCNUZXN0IHNpZXZlcyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yMy4wMCNMYWJvcmF0b3J5IHNjcnViYmVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yNC4wMCNUaXRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI1LjAwI0xhYm9yYXRvcnkgZGlsdXRlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjYuMDAjRnJhY3Rpb25hdGlvbiBhcHBhcmF0dXMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjcuMDAjRGlzdGlsbGF0aW9uIHBpcGluZ3Mgb3IgY29sdW1ucyBvciBmaXR0aW5ncyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yOC4wMCNSZWZsdXggY29tcG9uZW50cyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yOS4wMCNIZWF0IGV4Y2hhbmdlIGNvbmRlbnNlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDAuMDAjTGFib3JhdG9yeSBiYXRocyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wMS4wMCNDaXJjdWxhdGluZyBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wMi4wMCNUaGVybW9zdGF0aWMgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDMuMDAjTXVsdGlwbGUgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDQuMDAjQmlvbG9naWNhbCBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wNS4wMCNPcmdhbiBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wNi4wMCNXYXRlciBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wNy4wMCNPaWwgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDguMDAjU2FuZCBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wOS4wMCNSZWZyaWdlcmF0ZWQgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMDAuMDAuMDAjTWVhc3VyaW5nIGFuZCBvYnNlcnZpbmcgYW5kIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDAuMDAjV2VpZ2h0IG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wMS4wMCNFbGVjdHJvbmljIHRvcGxvYWRpbmcgYmFsYW5jZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDIuMDAjTGFib3JhdG9yeSBiYWxhbmNlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wMy4wMCNNZWNoYW5pY2FsIGJhbGFuY2VzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA0LjAwI1B1bGwgc3ByaW5nIGJhbGFuY2VzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA1LjAwI0NhbGlicmF0aW9uIHdlaWdodHMgb3Igd2VpZ2h0IHNldHMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDYuMDAjQW5pbWFsIHdlaWdoaW5nIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wNy4wMCNCZW5jaCBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDguMDAjQm9keXdlaWdodCBtZWFzdXJpbmcgc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA5LjAwI0Zsb29yIG9yIHBsYXRmb3JtIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4xMC4wMCNQb3N0YWwgc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjExLjAwI1RydWNrIG9yIHJhaWwgc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjAwLjAwI0xlbmd0aCBhbmQgdGhpY2tuZXNzIGFuZCBkaXN0YW5jZSBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDEuMDAjTWljcm9tZXRlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDIuMDAjUGVkb21ldGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wMy4wMCNSYW5nZWZpbmRlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDQuMDAjUnVsZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjA1LjAwI1N0cmFpbiBnYXVnZXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDYuMDAjVGVsbHVyb21ldGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wNy4wMCNUaHJlYWQgY291bnRlcnMgb3IgZ2F1Z2VzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjA4LjAwI0NhbGlwZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjEzLjAwI0Rpc3RhbmNlIG1ldGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xNC4wMCNIZWlnaHQgZ2F1Z2VzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE1LjAwI0xhc2VyIG1lYXN1cmluZyBzeXN0ZW1zIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE2LjAwI01lYXN1cmluZyB3aGVlbHMgZm9yIGRpc3RhbmNlIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE3LjAwI0ZlZWxlciBnYXVnZXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTguMDAjR2FnZSBibG9jayBzZXQjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTkuMDAjR28gb3Igbm8gZ28gZ2F1Z2UjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMjAuMDAjRXRhbG9uIHdlZGdlIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjAwLjAwI1ZpZXdpbmcgYW5kIG9ic2VydmluZyBpbnN0cnVtZW50cyBhbmQgYWNjZXNzb3JpZXMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDEuMDAjSW9uIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjAyLjAwI01vbm9jdWxhciBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wMy4wMCNTdGVyZW8gbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDQuMDAjSWxsdW1pbmF0b3JzIGZvciBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wNS4wMCNPYmplY3RpdmVzIGZvciBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wNi4wMCNQaG90byBhdHRhY2htZW50cyBmb3IgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDcuMDAjUHJvZmlsZSBwcm9qZWN0b3JzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA4LjAwI1ZpZGVvIGF0dGFjaG1lbnRzIGZvciBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wOS4wMCNCaW5vY3VsYXIgbWljcm9zY29wZSM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMC4wMCNDb21iaW5hdGlvbiBlbGVjdHJvbiBhbmQgbGlnaHQgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTEuMDAjRWxlY3Ryb24gbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTIuMDAjSW52ZXJ0ZWQgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTMuMDAjTWFnbmlmaWVycyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xNC4wMCNMb3VwZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTUuMDAjVGVsZXNjb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xNi4wMCNCb3Jlc2NvcGUgaW5zcGVjdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTcuMDAjQmlub2N1bGFycyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wMC4wMCNOb24gZGVzdHJ1Y3RpdmUgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjAxLjAwI0VkZHkgY3VycmVudCBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDIuMDAjTGlxdWlkIHBlbmV0cmFudCBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDMuMDAjTWFnbmV0aWMgcGFydGljbGUgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjA0LjAwI1VsdHJhc29uaWMgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjA1LjAwI0NPIDYwIHJhZGlvZ3JhcGh5IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wNi4wMCNDUyAxMzcgcmFkaW9ncmFwaHkgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjA3LjAwI0lSIDE5MiByYWRpb2dyYXBoeSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDguMDAjWCByYXkgcmFkaW9ncmFwaHkgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjAwLjAwI0luZGljYXRpbmcgYW5kIHJlY29yZGluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wMS4wMCNDb3VudGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wMi4wMCNFbGVjdHJvbmljIGNvdW50ZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjAzLjAwI01ldGFsIGRldGVjdG9ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wNC4wMCNFbGVjdHJvbmljIGNvbHVtbnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDUuMDAjRWxlY3Ryb25pYyBtZWFzdXJpbmcgcHJvYmVzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA2LjAwI0NoYXJ0IHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wNy4wMCNEaWdpdGFsIHJlYWRvdXQgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA4LjAwI0dyYXBoaWMgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA5LjAwI01hZ25ldGljIHRhcGUgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjEwLjAwI011bHRpcGVuIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xMS4wMCNPc2NpbGxvZ3JhcGhpYyByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTIuMDAjUGh5c2lvbG9naWNhbCByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTMuMDAjUG9pbnQgcGxvdHRpbmcgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE0LjAwI1NlcnZvIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xNS4wMCNCaSBtZXRhbGxpYyBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE2LjAwI05vbiBjb250YWN0IHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTcuMDAjRGlnaXRhbCB0ZXN0ZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE4LjAwI0d5cm9zY29waWMgaW5zdHJ1bWVudHMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTkuMDAjRGV0ZWN0aW9uIGFwcGFyYXR1cyBmb3Igbm9uIG1ldGFsaWMgb2JqZWN0cyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yMC4wMCNDb29yZGluYXRlIG1lYXN1cmluZyBtYWNoaW5lcyAoQ01NKSM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yMS4wMCNTcGVlZCBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjIyLjAwI0xhbXAgZmFpbHVyZSBzZW5zb3IjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjMuMDAjUHJlIGlnbml0aW9uIGtub2NrIHNlbnNvciM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yNC4wMCNPeHlnZW4gc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yNS4wMCNTcGVlZCBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI2LjAwI1Byb3hpbWl0eSBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI3LjAwI1ByZXNzdXJlIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjguMDAjQ3VycmVudCBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjAwLjAwI0xpZ2h0IGFuZCB3YXZlIGFuZCBzb3VuZCBnZW5lcmF0aW5nIGFuZCAgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wMS4wMCNMaWdodCBhYnNvcnB0aW9ubWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjAyLjAwI0Fjb3VzdGljIHRlc3Rpbmcgcm9vbXMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDMuMDAjQW5lY2hvaWMgY2hhbWJlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDQuMDAjRnJlcXVlbmN5IGFuYWx5emVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wNS4wMCNGcmVxdWVuY3kgY291bnRlcnMgb3IgdGltZXIgb3IgZGl2aWRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDYuMDAjRWxlY3RyaWNhbCBmcmVxdWVuY3kgbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA3LjAwI0ludGVyZmVyb21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wOC4wMCNMYXNlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDkuMDAjTGlnaHRtZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTAuMDAjTHV4bWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjExLjAwI09wdGljYWwgY2FsbGlicmF0aW9uIHNldHMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTIuMDAjUGhvdG9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTMuMDAjUG9sYXJpbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE0LjAwI1BvbGFyaXNjb3BlcyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xNS4wMCNSZWZsZWN0b21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xNi4wMCNTb25hcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTcuMDAjU29ub21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xOC4wMCNTb3VuZCBtZWFzdXJpbmcgYXBwYXJhdHVzIG9yIGRlY2liZWwgbWV0ZXIjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTkuMDAjU3BlY3Ryb2ZsdW9yaW1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yMC4wMCNTcGVjdHJvZ3JhcGhzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjIxLjAwI1NwZWN0cm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjIuMDAjTWFzcyBzcGVjdHJvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjIzLjAwI1Byb3RvbiBzcGVjdHJvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjI0LjAwI1NwZWN0cm9waG90b21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yNS4wMCNTdHJvYm9zY29wZXMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjYuMDAjU291bmQgdmVsb2NpdHkgYW5hbHl6ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjI3LjAwI1RoaWNrbmVzcyBtZWFzdXJpbmcgZGV2aWNlcyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMS4wMC4wMCNUcmFuc2R1Y2VycyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMS4wMS4wMCNQaWV6byBlbGVjdHJpYyBjcnlzdGFscyM0MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMS4wMi4wMCNTdHJhaW4gZ2F1Z2VzIzQxLjExLjIxLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAzLjAwI0ZpYmVyIHNlbnNvcnMjNDEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDAuMDAjVGVtcGVyYXR1cmUgYW5kIGhlYXQgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjAxLjAwI0NhbG9yaW1ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wMi4wMCNIZWF0IHRyYWNpbmcgZXF1aXBtZW50IzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjAzLjAwI01lbHRpbmcgcG9pbnQgcmVjb3JkZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA0LjAwI1B5cm9tZXRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDUuMDAjVGVtcGVyYXR1cmUgcmVndWxhdG9ycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wNi4wMCNUaGVybW9jb3VwbGVzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA3LjAwI1RoZXJtb2dyYXBocyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wOS4wMCNUaGVybW9zdGF0cyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMC4wMCNSZW1vdGUgcmVhZGluZyB0aGVybW9tZXRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMTEuMDAjUmVzaXN0YW5jZSB0aGVybW9tZXRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMTIuMDAjU3VyZmFjZSB0aGVybW9tZXRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMTMuMDAjSGFuZGhlbGQgdGhlcm1vbWV0ZXIjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjMuMDAuMDAjSHVtaWRpdHkgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIzLjAxLjAwI0h5Z3JvbWV0ZXJzIzQxLjExLjIzLjAwLjAwCi11bnNwc2M3IzQxLjExLjIzLjAyLjAwI1BzeWNocm9tZXRlcnMjNDEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjMuMDMuMDAjVGVtcGVyYXR1cmUgaHVtaWRpdHkgdGVzdGVycyM0MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wMC4wMCNQcmVzc3VyZSBtZWFzdXJpbmcgYW5kIGNvbnRyb2wgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDEuMDAjRGVwdGggZ2F1Z2VzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjAyLjAwI01hbm9zdGF0cyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wMy4wMCNQcmVzc3VyZSByZWFkaW5nIGluZGljYXRvcnMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDQuMDAjUHJlc3N1cmUgcmVndWxhdG9yIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjA1LjAwI1ByZXNzdXJlIG9yIHZhY3V1bSByZWNvcmRlcnMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDYuMDAjVmFjdXVtIGdhdWdlcyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wNy4wMCNMaXF1aWQgbGV2ZWwgY29udHJvbHMgb3IgaW5zdHJ1bWVudHMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDAuMDAjRmxvdyBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDEuMDAjRmxvd21ldGVycyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wMi4wMCNSaGVvbWV0ZXJzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjAzLjAwI1JvdGFtZXRlcnMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDQuMDAjV2F0ZXIgbWV0ZXJzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjA1LjAwI1dhdGVyIG1ldGVyIHNwYXJlcyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wNi4wMCNWZW50dXJpcyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNy4wMC4wMCNTZWVkIGFuZCBmZWVkIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNy4wMS4wMCNHcmFpbiBhbmFseXplcnMjNDEuMTEuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjcuMDIuMDAjU2VlZCBjb3VudGVycyM0MS4xMS4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNy4wMy4wMCNGaWJlciBhcHBhcmF0dXMgZm9yIGZlZWQgc2FtcGxlIGFuYWx5c2lzIzQxLjExLjI3LjAwLjAwCi11bnNwc2M3IzQxLjExLjI4LjAwLjAwI1RyYW5zcG9ydGF0aW9uIHJlbGF0ZWQgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOC4wMS4wMCNTcGVlZG9tZXRlcnMjNDEuMTEuMjguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjguMDIuMDAjVGFjaG9tZXRlcnMjNDEuMTEuMjguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjkuMDAuMDAjTmF2aWdhdGlvbmFsIGVxdWlwbWVudCBhbmQgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjkuMDEuMDAjRGlyZWN0aW9uIGZpbmRpbmcgY29tcGFzc2VzIzQxLjExLjI5LjAwLjAwCi11bnNwc2M3IzQxLjExLjI5LjAyLjAwI1JhZGlvIG5hdmlnYXRpb24gaW5zdHJ1bWVudHMjNDEuMTEuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjkuMDMuMDAjU2V4dGFudHMjNDEuMTEuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjkuMDQuMDAjQ29tcGxleCBjb250cm9sbGluZyBkZXZpY2VzIzQxLjExLjI5LjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjAwLjAwI0NoZW1pY2FsIGV2YWx1YXRpb24gaW5zdHJ1bWVudHMgYW5kIHN1cHBsaWVzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjAxLjAwI0RpZ2l0YWwgYW5hbHl6ZXIgY29udHJvbGxlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDIuMDAjQ2hlbWlsdW1pbmVzY2VuY2Ugb3IgYmlvbHVtaW5lc2NlbmNlIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wMy4wMCNFbGVjdHJvZ3JhdmltZXRyeSBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDQuMDAjRmxhbWUgaW9uaXphdGlvbiBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDUuMDAjSW9uIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wNi4wMCNSYWRpb21ldHJ5IGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wNy4wMCNSYW5kb20gYWNjZXNzIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wOC4wMCNDaW50aWdyYXBoaWMgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA5LjAwI1RoZXJtYWwgZGlmZmVyZW50aWFsIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xMC4wMCNUaGVybW8gZ3JhdmltZXRyeSBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTEuMDAjQ2hyb21hdG9ncmFwaGljIGRldGVjdG9ycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xMi4wMCNDaHJvbWF0b2dyYXBoaWMgc2Nhbm5lcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTMuMDAjR2FzIGNocm9tYXRvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjE0LjAwI0lvbiBjaHJvbWF0b2dyYXBocyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xNS4wMCNMaXF1aWQgY2hyb21hdG9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTYuMDAjVGhpbmxheWVyIGNocm9tYXRvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjE4LjAwI0hpZ2ggcHJlc3N1cmUgbGlxdWlkIGNocm9tYXRvZ3JhcGggY2hyb21hdG9ncmFwaHkjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTkuMDAjSGlnaCBwcmVzc3VyZSB0aGluIGxheWVyIGNocm9tYXRvZ3JhcGggKFRMQykjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjAuMDAjQ29sb3JpbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjIxLjAwI0NvbmR1Y3RpbWV0cmljIGluc3RydW1lbnRzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjIyLjAwI0ZsdW9yaW1ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yMy4wMCNHZWwgcGFydGl0aW9uIGVxdWlwbWVudCM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yNC4wMCNIeWRyb21ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yNS4wMCNNb25vY2hyb21hdG9ycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yNi4wMCNOZXBoZWxvbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI3LjAwI09zbW9tZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjguMDAjcEggbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI5LjAwI1BvbGFyb2dyYXBocyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4zMC4wMCNSYWRpb2Nocm9tYXRvZ3JhcGhpYyBzY2FubmVyIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjMxLjAwI1NhY2NoYXJvbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjMyLjAwI1NhbGluaXR5IG1ldGVyIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjMzLjAwI1ZvbHVtZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDAuMDAjR2FzIGFuYWx5emVycyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wMS4wMCNBdXRvbW90aXZlIGV4aGF1c3QgZW1pc3Npb24gYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjAyLjAwI0NhdGFseXRpYyBjb21idXN0aW9uIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wMy4wMCNDaGVtaWNhbCBhYnNvcnB0aW9uIGdhcyBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDQuMDAjRXhwbG9zaW1ldGVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wNS4wMCNIeWRyb2NhcmJvbnMgYW5hbHl6ZXJzIG9yIGRldGVjdG9ycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wNi4wMCNJbmZyYSByZWQgb3IgdWx0cmEgdmlvbGV0IGFic29ycHRpb24gYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA3LjAwI05pdHJvZ2VuIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wOC4wMCNOaXRyb2dlbiBveGlkZSBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDkuMDAjT1JTQVQgZXF1aXBtZW50IzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjEwLjAwI094eWdlbiBnYXMgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjExLjAwI096b25lIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xMi4wMCNQYXJhbWFnbmV0aWMgc3VzY2VwdGliaWxpdHkgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjEzLjAwI1N1bGZ1ciBkaW94aWRlIGFuYWx5emVycyBvciBkZXRlY3RvcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTQuMDAjVGhlcm1hbCBjb25kdWN0aXZpdHkgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjE1LjAwI1JhZG9uIGRldGVjdG9ycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xNi4wMCNHYXMgZGV0ZWN0b3IgdHViZXMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDAuMDAjTGlxdWlkIGFuZCBzb2xpZCBhbmFseXplcnMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDEuMDAjQWNpZCBvciBiYXNlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wMi4wMCNBbGJ1bWlub21ldGVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wMy4wMCNBbWlubyBhY2lkIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wNC4wMCNCYXV4aXRlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wNS4wMCNDYWxjaXVtIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wNi4wMCNDaGxvcmlkZSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDcuMDAjRGlzc29sdmVkIG94eWdlbiBtZWFzdXJlbWVudCBtZXRlciM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wOC4wMCNFbGVjdHJvbHl0ZSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDkuMDAjRW56eW1lIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xMC4wMCNGYXR0eSBhY2lkIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xMS4wMCNIYWxpZGUgZGV0ZWN0b3IgbGFtcCM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xMi4wMCNMYWN0YXRlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xMy4wMCNNaW5lcmFsIG9pbCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE0LjAwI09pbCBjb250ZW50IG1vbml0b3JzIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xNS4wMCNPcmdhbmljIGNhcmJvbiBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTYuMDAjUGV0cm9sZXVtIHRlc3RpbmcgZXF1aXBtZW50IzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE3LjAwI1Byb3RlaW4gYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE4LjAwI1VyYW5pdW0gYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE5LjAwI1dhdGVyIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4yMC4wMCNMdWJyaWNhdGluZyBvaWwgdGVzdGluZyBraXQjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMjEuMDAjUGFpbnQgdGVzdGVyIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjAwLjAwI051Y2xlYXIgZXZhbHVhdGlvbiBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wMS4wMCNBbHBoYSBjb3VudGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wMi4wMCNBbHBoYSBiZXRhIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjAzLjAwI0JldGEgY291bnRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDQuMDAjQmV0YSBnYW1tYSBjb3VudGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wNS4wMCNHYW1tYSBjb3VudGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wNi4wMCNLVlAgbWV0ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjA3LjAwI1ggcmF5IG1pY3JvYW5hbHlzZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAwLjAwI0VsZWN0cmljYWwgbWVhc3VyaW5nIGFuZCB0ZXN0aW5nIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wMS4wMCNBbW1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wMi4wMCNQaGFzZW1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wMy4wMCNCcmlkZ2VzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA0LjAwI0NhcGFjaXRhbmNlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wNS4wMCNUaGVybW9hbmFseXNpcyBkZXJpdmF0b2dyYXBocyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wNi4wMCNGcmVlemUgd2F0Y2ggaW5kaWNhdG9ycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wNy4wMCNIZWF0IHN0cmVzcyBtb25pdG9ycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wOC4wMCNDb2luY2lkZW5jZSBvciBhbnRpY29pbmNpZGVuY2UgY291bnRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDkuMDAjQ29uZHVjdGl2aXR5IGNlbGxzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjEwLjAwI0NvbmR1Y3Rpdml0eSBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTEuMDAjQ3Jvc3MgdGFsayBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTIuMDAjRWFydGggcmVzaXN0YW5jZSB0ZXN0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjEzLjAwI0VsZWN0cmljYWwgdmFsdWUgcmVjb3JkZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE0LjAwI0VsZWN0cm9tYWduZXRpYyBmaWVsZCBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTUuMDAjRWxlY3Ryb21ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xNi4wMCNFbGVjdHJvbmljIGxvYWRzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE3LjAwI0ZpZWxkIHN0cmVuZ3RoIG1lYXN1cmluZyBlcXVpcG1lbnQjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTguMDAjR2FpbiBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTkuMDAjR2FsdmFub21ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yMC4wMCNIaWdoIHZvbHRhZ2UgY2FibGUgZGV0ZWN0aW9uIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjIxLjAwI0ltcGVkYW5jZSBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjIuMDAjQ2FsaWJyYXRlZCBpbmR1Y3RhbmNlIGNvaWxzIG9yIGJveGVzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjIzLjAwI0luc3VsYXRpb24gcmVzaXN0YW5jZSBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjQuMDAjSW5zdWxhdGlvbiB0ZXN0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI1LjAwI0lvbml6YXRpb24gY2hhbWJlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjYuMDAjSW9ubWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI3LjAwI0xpbmUgZWFydGggbG9vcCB0ZXN0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI4LjAwI01lZ29obW1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yOS4wMCNNaWNyb3dhdmUgbGVha2FnZSBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzAuMDAjTXVsdGltZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzEuMDAjT2htbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjMyLjAwI09zY2lsbG9ncmFwaHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzMuMDAjUG90ZW50aW9tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzQuMDAjUSBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzUuMDAjQ2FsaWJyYXRlZCByZXNpc3RhbmNlIG1lYXN1cmluZyBlcXVpcG1lbnQjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzYuMDAjTGV2ZWwgZ2VuZXJhdG9ycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNy4wMCNWb2x0YWdlIG9yIGN1cnJlbnQgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM4LjAwI09zY2lsbG9zY29wZXMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzkuMDAjQWNjZWxlcm9tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDAuMDAjV2F0dG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi40MS4wMCNHRkkgY2lyY3VpdCB0ZXN0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjQyLjAwI0NpcmN1aXQgdGVzdGVyIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjQzLjAwI0RlbWFuZCBtZXRlcnMgb3IgcmVnaXN0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjQ0LjAwI0NpcmN1aXQgdHJhY2VycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wMC4wMCNFbGVjdHJvbmljIGFuZCBjb21tdW5pY2F0aW9uIG1lYXN1cmluZyBhbmQgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wMS4wMCNDYXRob2RlIHJheSB0dWJlIHRlc3RlciM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wMi4wMCNDb21wYXJhdG9ycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wMy4wMCNEaXJlY3Rpb25hbCBjb3VwbGVyIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA0LjAwI0ludGVncmF0ZWQgY2lyY3VpdCB0ZXN0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA1LjAwI0xvZ2ljIHN0YXRlIHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDYuMDAjU2VtaWNvbmR1Y3RvciB0ZXN0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA3LjAwI1RyYW5zaXN0b3IgY2lyY3VpdCB0ZXN0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA4LjAwI1Bvd2VyIG1ldGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wOS4wMCNNb2R1bGF0aW9uIG1ldGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xMC4wMCNMZXZlbCBtZXRlciM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xMS4wMCNOZXR3b3JrIGFuYWx5emVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xMi4wMCNUYXBlIHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMTMuMDAjVGFwZXNwZWVkIHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMTQuMDAjRGlmZmVyZW50aWF0b3IjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDAuMDAjR2VvcGh5c2ljYWwgYW5kIGdlb3RlY2huaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wMS4wMCNHZW9sb2dpY2FsIGNvbXBhc3NlcyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wMi4wMCNHZW9sb2dpY2FsIHByb3NwZWN0aW5nIGFwcGFyYXR1cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wMy4wMCNFbGVjdHJvbWFnbmV0aWMgZ2VvcGh5c2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDQuMDAjR3Jhdml0eSBnZW9waHlzaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wNS4wMCNJbmR1Y2VkIHBvbGFyaXphdGlvbiAoSVApIGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA2LjAwI01hZ25ldG9tZXRlciBnZW9waHlzaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wNy4wMCNSZXNpc3Rpdml0eSBnZW9waHlzaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wOC4wMCNHcmF2aW1ldGVycyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wMC4wMCNTb2lsIG1lYXN1cmluZyBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDEuMDAjQm9yZSBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDIuMDAjRGlzc29sdXRpb24gb3IgZGlzaW50ZWdyYXRpb24gdGVzdGVycyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wMy4wMCNQYXJ0aWNsZSBzaXplIG1lYXN1cmluZyBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDQuMDAjUGVuZXRyb21ldGVycyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wNS4wMCNQZXJtZWFiaWxpdHkgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDYuMDAjUGVybWVhYmlsaXR5IG9yIHBvcm9zaXR5IGVzdGltYXRpb24gYXBwYXJhdHVzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA3LjAwI1Bvcm9zaW1ldGVycyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wOC4wMCNTYW5kIHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA5LjAwI1NvaWwgY29yZSBzYW1wbGluZyBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMTAuMDAjU29pbCB0ZXN0aW5nIGtpdHMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDAuMDAuMDAjUm9jayBhbmQgc3RyYXRhIG1lYXN1cmluZyBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDAuMDEuMDAjQ2xpbm9tZXRlcnMjNDEuMTEuNDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDAuMDAjU2Vpc21vbG9naWNhbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wMi4wMCNFYXJ0aHF1YWtlIHNpbXVsYXRvcnMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDMuMDAjU2Vpc21pYyBhbGFybSBtb2R1bGVzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA0LjAwI1NlaXNtaWMgYW1wbGlmaWVycyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wNS4wMCNQb3J0YWJsZSBzZWlzbWljIGFwcGFyYXR1cyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wNi4wMCNTZWlzbWljIHJlY29yZGVycyBvciBzZWlzbW9ncmFwaHMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDcuMDAjU2Vpc21vbWV0ZXJzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA4LjAwI1ZpYnJvbWV0ZXJzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjAwLjAwI0xhbmQgc3VydmV5aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjAxLjAwI01lYXN1cmluZyB0YXBlcyM0MS4xMS40Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wMi4wMCNNZWFzdXJpbmcgcm9kcyM0MS4xMS40Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wMy4wMCNNZWFzdXJpbmcgdGFibGVzIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjA0LjAwI1RoZW9kb2xpdGVzIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjA1LjAwI0xvY2F0aW9uIHN0YWtlIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjA2LjAwI0xvY2F0aW9uIGh1YiM0MS4xMS40Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMC4wMCNIeWRyb2xvZ2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDMuMDEuMDAjT3BlbiBzdHJlYW0gY3VycmVudCBtZXRlcnMjNDEuMTEuNDMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDMuMDIuMDAjTG9nZ2luZyBpbnN0cnVtZW50cyBmb3Igd2F0ZXIgd2VsbHMjNDEuMTEuNDMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDMuMDMuMDAjT3BlbiBzdHJlYW0gd2F0ZXIgbGV2ZWwgcmVjb3JkZXJzIzQxLjExLjQzLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjAwLjAwI01ldGVvcm9sb2dpY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjAxLjAwI0FuZW1vbWV0ZXJzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjAyLjAwI0Jhcm9tZXRlcnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDMuMDAjUHJlY2lwaXRhdGlvbiBvciBldmFwb3JhdGlvbiByZWNvcmRlcnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDQuMDAjUmFkaW9zb25kZSBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDUuMDAjUmFpbmZhbGwgcmVjb3JkZXJzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjA2LjAwI1ByZWNpcGl0YXRpb24gb3IgZXZhcG9yYXRpb24gc3VyZmFjZSBvYnNlcnZpbmcgYXBwYXJhdHVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjA3LjAwI1NvbGFyIHJhZGlhdGlvbiBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDguMDAjVGVtcGVyYXR1cmUgb3IgaHVtaWRpdHkgc3VyZmFjZSBvYnNlcnZpbmcgYXBwYXJhdHVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjA5LjAwI1dpbmQgc3VyZmFjZSBvYnNlcnZpbmcgYXBwYXJhdHVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjEwLjAwI1dlYXRoZXIgc3RhdGlvbnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMTEuMDAjTWV0ZW9yb2xvZ3kgaW5zdHJ1bWVudCBhY2Nlc3NvcmllcyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wMC4wMCNNZWNoYW5pY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjAxLjAwI0R5bmFtb21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wMi4wMCNFbGFzdG9tZXRlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDMuMDAjRXh0ZW5zb21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wNC4wMCNQaXRjaCBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDUuMDAjUm91bmRuZXNzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDYuMDAjU3BoZXJvbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA3LjAwI1NwcmluZyB0ZXN0aW5nIG1hY2hpbmVzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA4LjAwI1N1cmZhY2UgdGVzdGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wOS4wMCNUZW5zaW9tZXRlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMTAuMDAjVG9ycXVlIGxpbWl0ZXIjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDAuMDAjTWV0YWxzIGFuZCBtZXRhbGx1cmd5IGFuZCBzdHJ1Y3R1cmFsIG1hdGVyaWFscyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjAxLjAwI0FicmFzaW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDIuMDAjQ29tcHJlc3Npb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wMy4wMCNDb25jcmV0ZSBvciBjZW1lbnQgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wNC4wMCNDb3Jyb3Npb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wNS4wMCNDcmFjayBvciBjb3Jyb3Npb24gZGV0ZWN0b3JzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA2LjAwI0NyZWVwIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDcuMDAjRHVjdGlsaXR5IHRlc3RpbmcgbWFjaGluZXMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDguMDAjRmF0aWd1ZSB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA5LjAwI0ZvcmdpbmcgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTAuMDAjRm91bmRyeSB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xMS4wMCNIYXJkbmVzcyB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjEyLjAwI0ltcGFjdCB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjEzLjAwI0xvYWQgZnJhbWUjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTQuMDAjTWV0YWwgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xNS4wMCNQaG90b2VsYXN0aWMgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xNi4wMCNQcm9vZnN0cmVzcyBpbmRpY2F0b3JzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE3LjAwI1JlbGF4YXRpb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xOC4wMCNSb3VnaG5lc3MgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE5LjAwI1NoZWFyIHN0cmVuZ3RoIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjAuMDAjU2hvY2sgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjEuMDAjVGVuc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjIyLjAwI1RvcnNpb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yMy4wMCNGbGV4dXJlIG9yIHRyYW5zdmVyc2UgdGVzdGluZyBtYWNoaW5lcyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yNC4wMCNWaWJyYXRpb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yNS4wMCNXZWFyIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjYuMDAjV2VsZGluZyB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wMC4wMCNQYXBlciBhbmQgd29vZCBhbmQgdGV4dGlsZSB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjAxLjAwI0NhcmRib2FyZCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjAyLjAwI1RleHRpbGVzIGZhc3RuZXNzIHRlc3RlcnMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDMuMDAjTGVhdGhlciB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjA0LjAwI1BhcGVyIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDUuMDAjVGV4dGlsZSB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjA2LjAwI1dvb2QgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40OC4wMC4wMCNDZXJhbWljcyBhbmQgZ2xhc3MgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40OC4wMS4wMCNDZXJhbWljcyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ4LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ4LjAyLjAwI0dsYXNzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDguMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDguMDMuMDAjUG90dGVyeSB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ4LjAwLjAwCi11bnNwc2M3IzQxLjExLjUxLjAwLjAwI0NvYWwgYW5kIG9yZSB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjUxLjAxLjAwI0NvYWwgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS41MS4wMC4wMAotdW5zcHNjNyM0MS4xMS41Mi4wMC4wMCNSYWRhciBhbmQgc29uYXIgc3lzdGVtcyBhbmQgY29tcG9uZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS41Mi4wMS4wMCNSYWRhcmJhc2VkIHN1cnZlaWxsYW5jZSBzeXN0ZW1zIzQxLjExLjUyLjAwLjAwCi11bnNwc2M3IzQxLjExLjUyLjAyLjAwI0ZlZWQgaG9ybnMjNDEuMTEuNTIuMDAuMDAKLXVuc3BzYzcjNDIuMDAuMDAuMDAuMDAjTWVkaWNhbCBFcXVpcG1lbnQgYW5kIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyM0Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4wMC4wMC4wMCNIb3NwaXRhbCBhbmQgbWVkaWNhbCBhbmQgZGVudGFsIGVxdWlwbWVudCM0Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNS4wMC4wMCNBbmVzdGhlc2lhIGVxdWlwbWVudCBhbmQgaW5zdHJ1bWVudHMgYW5kIGFjY2Vzc29yaWVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE1LjAyLjAwI0hlYWx0aGNhcmUgZ2FzIG1hY2hpbmVzIzQyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE1LjAzLjAwI0FuZXN0aGVzaWEgbWFjaGluZXMjNDIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTUuMDQuMDAjUmVnaW9uYWwgYW5hZXN0aGVzaWEga2l0cyBvciBuZWVkbGVzIzQyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjAwLjAwI01lZGljYWwgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wMS4wMCNNZWRpY2FsIHRoZXJtb21ldGVycyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wMi4wMCNTcGVjdWx1bXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDMuMDAjT3Rvc2NvcGVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA0LjAwI0F1ZGlvbWV0ZXJzIG9yIHR5bXBhbm9tZXRlcnMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDUuMDAjU3RldGhvc2NvcGVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA2LjAwI0VyZ29ub21ldGVycyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wNy4wMCNFbGVjdHJvIHRoZXJhcHkgYXBwYXJhdHVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA4LjAwI1Bob3RvIHRoZXJhcHkgYXBwYXJhdHVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA5LjAwI0h5ZHJvdGhlcmFweSBzdXBwbGllcyBvciBhY2Nlc3NvcmllcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4xMC4wMCNBY3VwdW5jdHVyZSB1bml0cyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4xMS4wMCNTdGV0aG9ncmFwaHMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMTIuMDAjTWVkaWNhbCBwdW1wcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4xMy4wMCNNZWRpY2FsIHZhbHZlcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4xNC4wMCNFbmRvc2NvcGVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjAwLjAwI01lZGljYWwgdGVzdGluZyBhbmQgYW5hbHl6aW5nIGFuZCBkaWFnbm9zdGljIGVxdWlwbWVudCM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wMS4wMCNTa2luIHRlc3Qgc3RyaXBzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjAyLjAwI0Jsb29kIGFuYWx5emVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wMy4wMCNCbG9vZCBjZWxsIGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA0LjAwI0hhZW1vZ2xvYmlub21ldGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wNS4wMCNCaWxpcnViaW4gbWV0ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA2LjAwI0hhZW1hY3l0b21ldGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wNy4wMCNDb2xvbnkgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDguMDAjRmVycml0aW4gdGVzdCBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA5LjAwI0VuenltZSBsaW5rZWQgaW1tdW5vc29yYmVudCBhc3NheSAoRUxJU0EpIHRlc3Qga2l0IzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjEwLjAwI0h1bWFuIGltbXVuZSBkZWZpY2llbmN5IChISVYpIHRlc3Qga2l0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xMS4wMCNTeWZhY2FyZCBzeXBoaWxpcyB0ZXN0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xMi4wMCNQcmVnbmFuY3kgdGVzdCBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjEzLjAwI1JhZGlvIGltbXVub2Fzc2F5IChSSUEpIHRlc3Qga2l0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xNC4wMCNQb2xpbyBjYXNlIGludmVzdGlnYXRpb24ga2l0IzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE1LjAwI1VyaW5lIGJsb29kIHRlc3Qgc3RyaXBzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE2LjAwI0NlbGwgc2l6ZSBhbmFseXplcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTcuMDAjV2hvbGUgYm9keSBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xOC4wMCNCaW9tZWRpY2FsIGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE5LjAwI01lZGljYWwgbXVsdGlwcm9iZSBzeXN0ZW0gY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjAuMDAjQWxsZXJneSBvciBkaWFnbm9zdGljIGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjEuMDAjVXJpbmFyeSB0ZXN0IHNldCM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yMi4wMCNEaWZmZXJlbnRpYWwgY2VsbCBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yMy4wMCNQbGFzbWEgdmlzY29zaXR5IG1lYXN1cmVtZW50IzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjI0LjAwI1BsYXRlbGV0IGFuYWx5c2lzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjI1LjAwI0Jsb29kIGdsdWNvc2UgbWV0ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjI2LjAwI0hlbW9jdWx0dXJlIHRlc3RzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjI3LjAwI0JvZHlmYXQgYW5hbHlzZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjI4LjAwI1NhbXBsZSBjb2xsZWN0aW9uIHN5c3RlbXMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDAuMDAjWCByYXkgYW5kIGFscGhhIGFuZCBiZXRhIGFuZCBnYW1tYSByYWRpYXRpb24gYXBwYXJhdHVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjAxLjAwI0RpYWdub3N0aWMgeCByYXkgZXF1aXBtZW50IzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjAyLjAwI1JhZGlvdGhlcmFweSBzaW11bGF0b3IjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDMuMDAjQ2FsaWJyYXRpb24gZXF1aXBtZW50IzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA0LjAwI0Jpb21lZGljYWwgcmVzZWFyY2ggc3VwcG9ydCB1bml0cyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wNS4wMCNDb21wdXRlZCB0b21vZ3JhcGh5IChDVCkgc2Nhbm5lcnMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDYuMDAjV2F0ZXIgcGhhbnRvbXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDcuMDAjUmFkaW9iaW9sb2dpY2FsIGluc3RydW1lbnRzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA4LjAwI0dhbW1hIHNjaW50aWxsYXRvcnMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDkuMDAjR2FtbWEgY2FtZXJhcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xMC4wMCNMaW5lYXIgYWNjZWxlcmF0b3JzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjExLjAwI1JhZGlvdGhlcmFweSBicmFjaHl0aGVyYXB5IGVxdWlwbWVudCM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xMi4wMCNSYWRpb3RoZXJhcHkgdGVsZXRoZXJhcHkgY29iYWx0IDYwIG1hY2hpbmUjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTMuMDAjUmFkaW90aGVyYXB5IHRlbGV0aGVyYXB5IHN1cGVyZmljaWFsIHggcmF5IG1hY2hpbmUjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTQuMDAjUmFkaW90aGVyYXB5IHRlbGV0aGVyYXB5IG9ydGhvdm9sdGFnZSB4IHJheSBtYWNoaW5lIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE1LjAwI1JhZGlvdGhlcmFweSB0ZWxldGhlcmFweSBsaW5lYXIgYWNjZWxlcmF0b3JzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE2LjAwI1JhZGlvaXNvdG9wZSBzY2FubmVycyBmb3IgbWVkaWNhbCBwdXJwb3NlcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xNy4wMCNEZW50YWwgeCByYXkgdW5pdHMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTguMDAjQW5naW9ncmFwaHkgc3VwcGxpZXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTkuMDAjQW5naW9ncmFwaHkgZGV2aWNlcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4yMC4wMCNBbmdpb3BsYXN0eSBzdXBwbGllcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4yMS4wMCNBbmdpb3BsYXN0eSBkZXZpY2VzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjAwLjAwI094eWdlbiB0aGVyYXB5IGVxdWlwbWVudCM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wMS4wMCNJbmhhbGF0aW9uIGVxdWlwbWVudCM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wMi4wMCNNZWRpY2FsIGh1bWlkaWZpZXJzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjAzLjAwI1Jlc3VzY2l0YXRvcnMgb3IgcmVzcGlyYXRvcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDQuMDAjQXNwaXJhdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wNS4wMCNJbnN1ZmZsYXRvcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDYuMDAjUmVzdXNjaXRhdGlvbiBlbWVyZ2VuY3kgb3V0Zml0cyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wNy4wMCNOZWJ1bGl6ZXJzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA4LjAwI0Flcm9zb2wgdGhlcmFweSBhcHBhcmF0dXMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDkuMDAjTWVkaWNhbCB2ZW50aWxhdGlvbiBzeXN0ZW1zIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjEwLjAwI01hc2tzIG9yIGJyZWF0aGluZyBiYWdzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjExLjAwI0hlYXJ0IGx1bmcgYXBwYXJhdHVzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjEyLjAwI0JyZWF0aGluZyBkZXZpY2Ugd2l0aCBoeWdpZW5pYyBiYXJyaWVyIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjEzLjAwI094eWdlbiBtYXNrcyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xNC4wMCNNb2JpbGUgc3VjdGlvbiB1bml0IzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjE1LjAwI0h5cGVyYmFyaWMgdHJlYXRtZW50IGNoYW1iZXIjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTYuMDAjT3h5Z2VuYXRvcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTcuMDAjQWlyIG94eWdlbiB1bml0cyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wMC4wMCNNZWRpY2FsIGFuZCBzdXJnaWNhbCBhbmQgbGFib3JhdG9yeSBzdGVyaWxpemVycyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wMS4wMCNBdXRvY2xhdmVzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjAyLjAwI1N0ZWFtIHN0ZXJpbGl6ZXJzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjAzLjAwI0JvaWxpbmcgZGlzaW5mZWN0b3JzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA0LjAwI0hvdCBhaXIgc3RlcmlsaXplcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDUuMDAjQ2hlbWljYWwgc3RlcmlsaXplcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDYuMDAjTGFib3JhdG9yeSBzdGVyaWxpemVycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wNy4wMCNTdGVyaWxpemF0aW9uIG92ZW5zIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA4LjAwI0dlcm1pY2lkYWwgbGFtcHMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDkuMDAjU3RlcmlsaXppbmcgbGFtcHMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMTAuMDAjRGVjb250YW1pbmF0aW9uIHdhc2hpbmcgZXF1aXBtZW50IzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjAwLjAwI1N1cmdpY2FsIHNldHMgYW5kIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjAxLjAwI0NyeW8gc3VyZ2VyeSBlcXVpcG1lbnQjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDIuMDAjQXV0b3BzeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wMy4wMCNTdWN0aW9uIHVuaXRzIG9yIHBhcnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA0LjAwI1N1cmdpY2FsIGxhc2VycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wNS4wMCNFbGVjdHJvIGNhdXRlcnkgc3VyZ2ljYWwgZXF1aXBtZW50IzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA2LjAwI0VhciBvciBub3NlIG9yIHRocm9hdCAoRU5UKSBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA3LjAwI0d5bmVjb2xvZ2ljYWwgc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wOC4wMCNDYXJkaW9sb2d5IHN1cmdlcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDkuMDAjTWljcm8gc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xMC4wMCNPcnRob3BlZGljIHN1cmdlcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTEuMDAjU3V0dXJlIGNsaXBzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjEyLjAwI0Rpc3NlY3RpbmcgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTMuMDAjRGlzc2VjdGluZyBwaW5zIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE0LjAwI0ltcGxhbnQgc3lzdGVtcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xNS4wMCNCbG9vZCBsYW5jZXRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE2LjAwI1NjYWxwZWxzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE3LjAwI1N1cmdpY2FsIGJsYWRlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xOC4wMCNDcmFuaW9jbGFzdHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTkuMDAjU3VyZ2ljYWwgc2Npc3NvcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjAuMDAjU3VyZ2ljYWwgc2hlYXJzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjIxLjAwI1N1cmdpY2FsIGRyaWxscyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yMi4wMCNTdXJnaWNhbCB3aXJlIHNhd3MjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjMuMDAjU3VyZ2ljYWwgcGVyZm9yYXRvcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjQuMDAjQ3VyZXR0ZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjUuMDAjU3VyZ2ljYWwgY2xhbXBzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI2LjAwI1N1cmdpY2FsIGluc3RydW1lbnQgaG9sZGVycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yNy4wMCNTdXJnaWNhbCBlbGV2YXRvcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjguMDAjUmFzcGF0b3J5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI5LjAwI0ZvcmNlcHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzAuMDAjU3VyZ2ljYWwgcmV0cmFjdG9ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zMS4wMCNTdXJnaWNhbCBzcHJlYWRlcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzIuMDAjVXRlcmluZSBzb3VuZCBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zMy4wMCNEaWxhdG9ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zNC4wMCNTdXJnaWNhbCBkaXNoZXMgb3IgcG90cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zNS4wMCNTdXJnaWNhbCBwcm9iZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzYuMDAjU3VyZ2ljYWwgbWFsbGV0cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zNy4wMCNEZWNhcGl0YXRpb24gaG9va3MjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzguMDAjU3V0dXJlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zOS4wMCNDYXRndXQgY2hyb21pYyBzdXR1cmVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjQwLjAwI0xhcnluZ29zY29wZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuNDEuMDAjU3VyZ2ljYWwgc2hhdmluZyBraXRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjAwLjAwI1JlaGFiaWxpdGF0aW9uIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDEuMDAjU3BsaW50cyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wMi4wMCNQc3ljaG9sb2dpY2FsIGFwdGl0dWRlIHRlc3RpbmcgYXBwYXJhdHVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjAzLjAwI01hc3NhZ2UgYXBwYXJhdHVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA0LjAwI1RyYWN0aW9uIHB1bGxleXMgb3IgYmVsdHMgb3Igd2VpZ2h0cyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wNS4wMCNQaHlzaWNhbCB0aGVyYXB5IHJlaGFiaWxpdGF0aW9uIGVxdWlwbWVudCBvciBhY2Nlc3NvcmllcyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wNi4wMCNPdmVyYmVkIGZyYW1lcyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wNy4wMCNSZWhhYmlsaXRhdGlvbiBzdGltdWxhdG9ycyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wOC4wMCNQYXRpZW50IGxpZnRlcnMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDkuMDAjU2hvcnQgd2F2ZSBkaWF0aGVybXkgZXF1aXBtZW50IzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjEwLjAwI01vaXN0IGhlYXQgdGhlcmFweSBlcXVpcG1lbnQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTEuMDAjSGVhdCBvciBjb2xkIHBhY2tzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjEyLjAwI1BoeXNpb2xvZ2ljYWwgZXF1aXBtZW50IzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjEzLjAwI1N0aW11bGF0b3JzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjE0LjAwI1JlaGFiaWxpdGF0aW9uIHN1cHBsaWVzIGZvciB0aGUgYmxpbmQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTUuMDAjRWxlY3Ryb215b2dyYXBoIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjE2LjAwI1JlaGFiaWxpdGF0aW9uIHN1cHBsaWVzIGZvciBzcGVlY2ggaGFuZGljYXBwZWQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTcuMDAjRWxlY3RybyBzbGVlcCBhcHBhcmF0dXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTguMDAjVmlzdWFsIGV4ZXJjaXNlIHRyYWluaW5nIGFpZHMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTkuMDAjT3J0aG9wZWRpYyBjdXNoaW9ucyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wMC4wMCNPcGh0aGFsbW9sb2d5IGluc3RydW1lbnRzIGFuZCBhcHBsaWFuY2VzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjAxLjAwI09wdGhhbG1vbG9naWNhbCBwdW5jaGVzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjAyLjAwI1Bob3RvY29hZ3VsYXRvcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDMuMDAjU2xpdCBsYW1wcyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wNC4wMCNQZXJpbWV0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA1LjAwI1Rvbm9tZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDYuMDAjUmV0aW5vbWV0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA3LjAwI0V5ZXdhc2hlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDguMDAjT3BodGhhbG1vbWV0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA5LjAwI09waHRoYWxtb3Njb3BlcyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4xMC4wMCNFbWVyZ2VuY3kgZXllIGNhcmUgZXF1aXBtZW50IzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjExLjAwI0tlcmF0b21ldGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4xMi4wMCNWaXNpb24gdGVzdGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4xMy4wMCNTeW5vdG9zY29wZXMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMTQuMDAjT3BodGhhbG1pYyBvcGVyYXRpb24gaW5zdHJ1bWVudHMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDAuMDAjR3luZWNvbG9naWNhbCBhbmQgb2JzdGV0cmljYWwgaW5zdHJ1bWVudHMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDEuMDAjSW50cmEgdXRlcmluZSBkZXZpY2UgKElVRCkgaW5zZXJ0aW9uIGtpdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDIuMDAjVHViYWwgbGlnYXRpb24ga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMy4wMCNWYXNlY3RvbXkga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wNC4wMCNMYXBhcm9zY29waWMgZXF1aXBtZW50IzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA1LjAwI1NpbGFzdGljIGJhbmRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA2LjAwI01lbnN0cnVhdGlvbiByZWd1bGF0aW9uIGtpdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDcuMDAjU3Blcm1va2luZXNlbWV0ZXIjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDguMDAjVXRlcmluZSBvciBneW5lY29sb2dpY2FsIHRlc3RzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA5LjAwI09ic3RldHJpY2FsIHJldHJhY3RvcnMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTAuMDAjVW1iaWxpY2FsIHRhcGVzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjExLjAwI0JyZWFzdCBwdW1wcyBvciBhY2Nlc3NvcmllcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xMi4wMCNNaWR3aWZlIGVxdWlwbWVudCBvciBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjEzLjAwI0h5c3Rlcm9zY29waWMgZXF1aXBtZW50IzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE0LjAwI1ZhZ2lub3Njb3BlIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE1LjAwI1VyZXRocm9zY29wZSBjeXN0ZXJzY29wZSM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xNi4wMCNVbWJpbGljYWwgY29yZCBjbGFtcHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTcuMDAjVmFjdXVtIGV4dHJhY3RvcnMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTguMDAjSW4gdml0cm8gZmVydGlsaXphdGlvbiBlcXVpcG1lbnQgb3Igc3VwcGxpZXMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTkuMDAjRW5kb21ldHJpYWwgYmlvcHN5IGVxdWlwbWVudCM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4yMC4wMCNJbnRyYXV0ZXJpbmUgaW5zZW1pbmF0aW9uIGNhdGhldGVycyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4yMS4wMCNQZWx2aW1ldGVycyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wMC4wMCNGaWJlciBvcHRpYyBleGFtaW5hdGlvbiBpbnN0cnVtZW50cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wMS4wMCNMaWdodCBzb3VyY2VzIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjAyLjAwI0VuZG9zY29weSBlcXVpcG1lbnQjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDMuMDAjUHJvdG9zY29wZXMjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDQuMDAjQ3VsZG9zY29wZXMjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDUuMDAjR2FzdHJvc2NvcGVzIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA2LjAwI0Vzb3BoYWdvc2NvcGUjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDcuMDAjU2lnbW9pZG9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wOC4wMCNCcm9uY2hvc2NvcGUjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDkuMDAjQ29sb25vc2NvcGUjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMTAuMDAjQXJ0aHJvc2NvcGUjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDAuMDAjRWxlY3RybyBkaWFnbm9zdGljIGFwcGFyYXR1cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wMS4wMCNFbGVjdHJvY2FyZGlvZ3JhcGhzIChFQ0dzKSM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wMi4wMCNDYXJkaW9zY29wZXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDMuMDAjU3RlcmVvdGFjdGljIHN5c3RlbXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDQuMDAjQWNoaWxsZWFuIHJlZmxleG9tZXRlciM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wNS4wMCNUaGVzaW9tZXRlciM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wNi4wMCNQbmV1bW90YWNob2dyYXBocyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wNy4wMCNCaW92aWRlb2dyYXBocyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wOC4wMCNQaHlzaW9sb2dpY2FsIGxldmVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wOS4wMCNOZXJ2ZSBjaGFtYmVyIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xMC4wMCNVbHRyYXNvbmljIGRpYWdub3N0aWMgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjExLjAwI1VsdHJhc291bmQgc2Nhbm5lcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTIuMDAjRG9wcGxlciB1bHRyYXNvdW5kIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xMy4wMCNVbHRyYXNvbmljIHN1cmdlcnkgZXF1aXBtZW50IG9yIHVsdHJhc29uaWMgYXNwaXJhdGlvbiM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xNC4wMCNVbHRyYXNvdW5kIHBoeXNpb3RoZXJhcHkgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE1LjAwI0NhcmRpbyBzb25hcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTYuMDAjU2hvcnQgd2F2ZSBtZWRpY2FsIGFwcGFyYXR1cyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xNy4wMCNCbG9vZCBwcmVzc3VyZSBtZWFzdXJpbmcgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE4LjAwI0VsZWN0cm9lbmNlcGhhbG9ncmFwaHMgKEVFR3MpIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE5LjAwI1NwaXJvbWV0ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjIwLjAwI0d5bmVjb2xvZ2ljYWwgZGlhZ25vc3RpYyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjEuMDAjQ29scG9zY29wZXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjIuMDAjQW1uaW9zY29wZXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjMuMDAjRmV0YWwgbW9uaXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjQuMDAjRGVsaXZlcnkgbW9uaXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjUuMDAjTmVvbmF0YWwgbW9uaXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjYuMDAjSGVhcnQgbW9uaXRvciBzeXN0ZW1zIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjI3LjAwI0ludGVuc2l2ZSBjYXJlIG1vbml0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjI4LjAwI0VsZWN0cm9tZWRpY2FsIHRlc3RpbmcgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjI5LjAwI0RlZmlicmlsbGF0b3IgdGVzdGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjMwLjAwI0F1ZGlvbWV0ZXIgY2FsaWJyYXRpb24gdGVzdGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjMxLjAwI0VsZWN0cm9kZSBvciBlbGVjdHJvbWVkaWNhbCB0ZXN0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzIuMDAjVmVudGlsYXRvciB0ZXN0IG1ldGVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zMy4wMCNFQ0cgcGF0aWVudCBzaW11bGF0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM0LjAwI0VsZWN0cm9zdXJnaWNhbCBhbmFseXplcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzUuMDAjRWxlY3Ryb21lZGljYWwgc2FmZXR5IGFuYWx5emVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zNi4wMCNFbGVjdHJvbWVkaWNhbCB0ZXN0IHN5c3RlbXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzcuMDAjRWxlY3Ryb25pYyBwdWxzZSBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zOC4wMCNWYWdpbmFsIHVsdHJhc291bmQgcHJvYmUjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzkuMDAjTWVkaWNhbCBjb25kdWN0aXZlIGdlbHMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDAuMDAjRGlhbHlzaXMgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wMS4wMCNCbG9vZCBiYWcgc2FtcGxlciM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wMi4wMCNCbG9vZCB3YXJtZXIjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDMuMDAjRGlhbHlzaXMgaW5zdHJ1bWVudCBzZXRzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA0LjAwI1Blcml0b25lYWwgZGlhbHlzaXMgdW5pdHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDUuMDAjSGFlbW9kaWFseXNpcyB1bml0cyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wNi4wMCNCbG9vZCBmaWx0ZXJzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA3LjAwI0Jsb29kIHNlcGFyYXRvciBzdGFuZCM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wOC4wMCNQbGFzbWFwaG9yZXNpcyBlcXVpcG1lbnQjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDkuMDAjQW5naW9ncmFwaGljIGluamVjdG9ycyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xMC4wMCNIZW1hZmlsdGVycyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xMS4wMCNEaWFseXNpcyB0dWJpbmcgb3IgbWVtYnJhbmVzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjEyLjAwI0Jsb29kIG94eWdlbiBkZW1hbmQgYXBwYXJhdHVzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjEzLjAwI0Nsb3QgY29hZ3VsYXRpb24gZGV0ZWN0aW9uIHN5c3RlbXMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTQuMDAjTWVkaWNhbCBkcmFpbnMgb3IgZHJhaW5hZ2Uga2l0cyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xNS4wMCNLeW1vZ3JhcGhzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjE2LjAwI0Jsb29kIHNhbXBsaW5nIGVxdWlwbWVudCM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wMC4wMCNEZW50YWwgaW5zdHJ1bWVudHMgYW5kIGFwcGxpYW5jZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDEuMDAjRGVudGFsIG1peGluZyBzbGFicyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wMi4wMCNCYW5kcyBmb3IgZGVudGFsIG1hdHJpeCM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wMy4wMCNEZW50YWwgcmV0YWluZXJzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA0LjAwI0RlbnRhbCBoYW5kcGllY2VzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA1LjAwI0RlbnRhbCBjcnlvc3VyZ2ljYWwgaW5zdHJ1bWVudGF0aW9uIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA2LjAwI0RlbnRhbCBmb3JtZXJzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA3LjAwI1BlcmlvZG9udGl1bSBjb250cm9sIGluc3RydW1lbnRzIG9yIHBlcmlvdGVzdCM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wOC4wMCNEZW50YWwgdHJheXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDkuMDAjRGVudGFsIHByb2JlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xMC4wMCNEZW50YWwgc2NhbGVzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjExLjAwI0RlbnRhbCBzcGF0dWxhcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xMi4wMCNEZW50YWwgZWxldmF0b3JzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjEzLjAwI0RlbnRhbCBleGNhdmF0b3JzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE0LjAwI0RlbnRhbCBmaW5nZXIgcHJvdGVjdG9ycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xNS4wMCNEZW50YWwgdHdlZXplcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTYuMDAjRGVudGFsIHNjaXNzb3JzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE3LjAwI0RlbnRhbCBmb3JjZXBzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE4LjAwI0RlbnRhbCBtaXJyb3JzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE5LjAwI09ydGhvZG9udGljIGFwcGxpYW5jZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMjAuMDAjRGVudGFsIGltcHJlc3Npb24gdHJheXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMjEuMDAjRGVudGFsIHN5cmluZ2VzIG9yIG5lZWRsZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMjIuMDAjRGVudGFsIGRyaWxscyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMy4wMCNFbmRvZG9udGljcyBhY2Nlc3NvcmllcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wMC4wMCNDYXJkaW9sb2d5IGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDEuMDAjSGVhcnQgdmFsdmVzIzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjAyLjAwI0hlYXJ0IGNhdGhldGVycyM0Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wMy4wMCNEZWZyaWJpbGF0b3JzIzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjA0LjAwI0FvcnRpYyBiYWxsb29uIGVxdWlwbWVudCM0Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wNS4wMCNQYWNlbWFrZXJzIzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjAwLjAwI01lZGljYWwgY29uc3VtYWJsZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDEuMDAjQmxvb2Qgb3IgaW50cmF2ZW5vdXMgKElWKSBib3R0bGVzIG9yIGJhZ3MjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDIuMDAjVG9uZ3VlIGRlcHJlc3NvcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDMuMDAjU3V0dXJlIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDQuMDAjQmlvcHN5IG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDUuMDAjQmlvcHN5IGNhcHN1bGVzIG9yIHB1bmNoZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDYuMDAjRGlzc2VjdGluZyBuZWVkbGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjA3LjAwI0FjdXB1bmN0dXJlIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDguMDAjTWVkaWNhbCBkaXNwb3NhbCBjb250YWluZXJzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjA5LjAwI0hhZW1hdG9jcml0IHR1YmVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjEwLjAwI1N3YWJzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjExLjAwI0Jsb29kIHRyYW5zZnVzaW9uIG5lZWRsZXMgb3IgY2FubnVsYWUjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTIuMDAjVHJhbnNmZXIgc3dhYnMgb3IgYXBwbGljYXRvcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTMuMDAjVXJpbmUgYmFncyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xNC4wMCNTcGVjaW1lbiBjb250YWluZXJzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE1LjAwI1BsYXN0ZXIgb2YgcGFyaXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTYuMDAjU3RlcmlsZSBzdHJpcHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTcuMDAjR2F1emUgY2xvdGgjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTguMDAjQ290dG9uIHdvb2wjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTkuMDAjU3RlcmlsZSBzdXJnaWNhbCBjb21wcmVzc2VzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjIwLjAwI0JhbmRhZ2VzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjIxLjAwI0ZpcnN0IGFpZCBraXRzIG9yIGtpdCByZWZpbGxzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjIyLjAwI0h5cG9kZXJtaWMgc3lyaW5nZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjMuMDAjQ290dG9uIHN3YWJzIG9uIHN0aWNrcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yNC4wMCNJbmZ1c2lvbiBzZXRzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI1LjAwI05hc29nYXN0cmljIHR1YmVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI2LjAwI0Rlc3RydWN0aW9uIGNsaXBzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI3LjAwI0RyZXNzaW5ncyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yOC4wMCNJbXBsYW50YWJsZSBkcnVnIGRlbGl2ZXJ5IHN5c3RlbXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjkuMDAjQXV0b21hdGljIG1hc3MgdmFjY2luYXRvcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzAuMDAjUGlwZXR0aW5nIHN5cmluZ2VzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjMxLjAwI1NjYWxwIHZlaW4gbmVlZGxlcyBvciBzdG9wY29ja3MjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzIuMDAjSHlwb2Rlcm1pYyBuZWVkbGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjMzLjAwI01lZGljYWwgamV0IGluamVjdG9ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zNC4wMCNMYW5jZXRzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM1LjAwI0NhdGhldGVyIGZvciBpbmZ1c2lvbiM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zNi4wMCNJbnRhdmVub3VzIChJVikgZXF1aXBtZW50IHR1YmVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM3LjAwI0V5ZXdhc2ggc29sdXRpb25zIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM4LjAwI0V4YW1pbmF0aW9uIGdsb3ZlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zOS4wMCNQYXRob2dlbiBjbGVhbnVwIGtpdHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuNDAuMDAjRGlhYmV0aWMgc3lyaW5nZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuNDEuMDAjRGlhYmV0aWMgcGVuIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuNDIuMDAjTGFuY2V0IGRldmljZSM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4wMC4wMC4wMCNBc3Npc3RpdmUgYW5kIGNvcnJlY3RpdmUgZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjAwLjAwI1Byb3N0aGVzZXMgYW5kIHBhcnRzIHRoZXJlb2YjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDEuMDAjQW5rbGUgb3IgZm9vdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wMi4wMCNDZXJ2aWNhbCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wMy4wMCNDZXJ2aWNvIHRob3JhdGljIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA0LjAwI0NlcnZpY28gdGhvcmF0aWMgbHVtYm8gc2FjcmFsIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA1LjAwI0VsYm93IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA2LjAwI0VsYm93IHdyaXN0IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA3LjAwI0ZpbmdlciBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wOC4wMCNGb290IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA5LjAwI0hhbmQgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTAuMDAjSGlwIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjExLjAwI0hpcCBrbmVlIGFua2xlIGZvb3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTIuMDAjSGlwIG9yIGtuZWUgb3IgYW5rbGUgb3J0aG9zZXMgam9pbnRzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjEzLjAwI1Nob3VsZGVyIG9yIGVsYm93IG9yIHdyaXN0IG9ydGhvc2VzIGpvaW50cyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xNC4wMCNLbmVlIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE1LjAwI0tuZWUgYW5rbGUgZm9vdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xNi4wMCNMdW1ibyBvciBzYWNyYWwgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTcuMDAjU2Fjcm8gaWxpYWMgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTguMDAjU2hvdWxkZXIgb3IgZWxib3cgb3Igd3Jpc3Qgb3IgaGFuZCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xOS4wMCNUaG9yYWNvIG9yIGx1bWJvIG9yIHNhY3JhbCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yMC4wMCNXcmlzdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yMS4wMCNXcmlzdCBvciBoYW5kIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjIyLjAwI1dyaXN0IG9yIGhhbmQgb3IgZmluZ2VyIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjIzLjAwI0Fua2xlIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI0LjAwI0F1cmFsIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjUuMDAjQ29zbWV0aWMgb3Igc2tpbiBjb3ZlcmluZyBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI2LjAwI0VsYm93IGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI3LjAwI0hpcCBkaXNhcnRpY3VsYXRpb24gcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yOC4wMCNIb29rIG9yIGZ1bmN0aW9uYWwgdG9vbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI5LjAwI0tuZWUgb3IgaGlwIGpvaW50IHByb3N0aGVzZXMgb3IgdG9ycXVlIHJlZHVjZXJzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjMwLjAwI1dyaXN0IG9yIGVsYm93IGpvaW50IHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzEuMDAjS25lZSBkaXNhcnRpY3VsYXRpb24gcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zMi4wMCNNYW1tYXJ5IHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzMuMDAjTmFzYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zNC4wMCNPY3VsYXIgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zNS4wMCNCYWNrIGZpbGxlciBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM2LjAwI1BhbGF0ZSBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM3LjAwI1BhcnRpYWwgZm9vdCBpbmNsdWRpbmcgdG9lIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzguMDAjUGFydGlhbCBoYW5kIGluY2x1ZGluZyBmaW5nZXIgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zOS4wMCNTaG91bGRlciBkaXNhcnRpY3VsYXRpb24gcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40MC4wMCNTb2NrZXQgb3IgYWxpZ25tZW50IHVuaXQgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40MS4wMCNUZW1wb3JhcnkgcHJvc3RoZXNlcyBmb3IgZWFybHkgbW9iaWxpemF0aW9uIG9mIGxvd2VyIGxpbWIgYW1wdXRlZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDIuMDAjVHJhbnNmZW1vcmFsIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDMuMDAjVHJhbnNodW1lcmFsIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDQuMDAjVHJhbnNyYWRpYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40NS4wMCNUcmFuc3RpYmlhbCBpbmNsdWRpbmcgYW5rbGUgb3IgZm9vdCBkZXZpY2UgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40Ni4wMCNXcmlzdCBkaXNhcnRpY3VsYXRpb24gcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40Ny4wMCNQcm9zdGhldGljIGhhbmRzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ4LjAwI1Zhc2N1bGFyIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDAuMDAjQ29tbXVuaWNhdGlvbiBhbmQgZWR1Y2F0aW9uYWwgbWF0ZXJpYWwgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wMS4wMCNCcmFpbGxlIHdyaXRpbmcgcGFwZXIgb3IgcGxhc3RpYyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wMi4wMCNTd2l0Y2hib2FyZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wMy4wMCNDaGFyYWN0ZXIgcmVhZGluZyBtYWNoaW5lcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA0LjAwI1N5bnRoZXRpYyBzcGVlY2ggZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA1LjAwI1RhY3RpbGUgZGlzcGxheXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wNi4wMCNMZXR0ZXIgb3Igc3ltYm9sIGJvYXJkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA3LjAwI0RpYWxvZ3VlIHVuaXRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDguMDAjVm9pY2UgZ2VuZXJhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA5LjAwI1ZvaWNlIGFtcGxpZmllcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xMC4wMCNIZWFyaW5nIGFpZHMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTEuMDAjV3JpdGluZyBmcmFtZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xMi4wMCNSYWluIGluZGljYXRvcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xMy4wMCNMaWdodCBpbmRpY2F0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTQuMDAjU291bmQgaW5kaWNhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjE1LjAwI1NwZWVjaCB0cmFpbmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTYuMDAjTGFuZ3VhZ2UgdHJhaW5pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjE3LjAwI0JyYWlsbGUgZXF1aXBtZW50IzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjE4LjAwI0Jvb2sgb3IgbWFudXNjcmlwdCBob2xkZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTkuMDAjUGFnZSB0dXJuZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMjAuMDAjU2lnbmF0dXJlIGd1aWRlcyBvciBzdGFtcHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4yMS4wMCNFcmdvbm9taWNhbGx5IGRlc2lnbmVkIHN0YXRpb25lcnkgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjAwLjAwI0Z1cm5pdHVyZSBhbmQgYWNjZXNzb3JpZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wMS4wMCNQcmVzc3VyZSBzb3JlIHByZXZlbnRpb24gZnVybml0dXJlIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjAyLjAwI1ByZXNzdXJlIHNvcmUgcHJldmVudGlvbiBtYXR0cmVzc2VzIG9yIGNvdmVyaW5ncyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wMy4wMCNCYWNrcGFkcyBvciBiYWNrcmVzdHMgb3Igc2ltaWxhciBhZGFwdGF0aW9ucyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjA0LjAwI0FybSByZXN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjA1LjAwI0JlZCBleHRlbnNpb25zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDYuMDAjQmVkIGxpZnRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDcuMDAjQmVkIHNob3J0ZW5pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjA4LjAwI0VyZ29ub21pY2FsbCBkZXNpZ25lZCBiZWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDkuMDAjQmxhbmtldCBzdXBwb3J0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjEwLjAwI01lY2hhbml6ZWQgY2hhaXJzIHRvIGFzc2lzdCB3aXRoIHNpdHRpbmcgb3Igc3RhbmRpbmcgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xMS4wMCNDb3hpdCBvciBhcnRocm9kZXNpcyBjaGFpcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xMi4wMCNMZWcgZXh0ZW5kZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTMuMDAjTGVnIHN1cHBvcnRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTQuMDAjTW9kdWxhciBvciBzcGVjaWFsIHNpdHRpbmcgZnVybml0dXJlIHN5c3RlbXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xNS4wMCNIZWlnaHQgYWRqdXN0YWJsZSBwbGludGhzIG9yIGJyYWNrZXRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTYuMDAjRXJnb25vbWljYWxseSBkZXNpZ25lZCB0YWJsZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wMC4wMCNQZXJzb25hbCBjYXJlIGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wMS4wMCNBaWRzIHRvIGFzc2lzdCBpbiBkcmVzc2luZyBvbmVzIHNlbGYgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wMi4wMCNBaWRzIGZvciB3YXNoaW5nIG9uZXMgc2VsZiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAzLjAwI0FpZHMgZm9yIGRyeWluZyBvbmVzIHNlbGYgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wNC4wMCNCYXRoaW5nIHN0cmV0Y2hlcnMgb3Igc2hvd2VyIHRhYmxlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA1LjAwI0RpYXBlciBjaGFuZ2luZyB0YWJsZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wNi4wMCNCZWRwYW5zIG9yIGNvbW1vZGUgY2hhaXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDcuMDAjQnV0dG9uaW5nIG9yIGZhc3RlbmluZyBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDguMDAjRXh0ZW5kZWQgaGFuZGxlIGNvbWJzIG9yIGJydXNoZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wOS4wMCNUb2lsZXQgYXR0YWNoZWQgZG91Y2hlcyBvciBhaXIgZHJ5ZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTAuMDAjVG9pbGV0IHNlYXRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTEuMDAjSGFuZCBncmlwIHRvb3RoYnJ1c2hlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjEyLjAwI0JvZHkgd29ybiB1cmluZSBhYnNvcmJpbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjEzLjAwI1VyaW5lIGNvbGxlY3Rpb24gc3lzdGVtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjE0LjAwI0luY29udGluZW5jZSBhbGFybXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xNS4wMCNPc3RvbXkgYmFncyBvciBhY2Nlc3NvcmllcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjAwLjAwI1Byb3RlY3Rpb24gYW5kIG1vYmlsaXR5IGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wMS4wMCNDcnV0Y2hlcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wMi4wMCNUcmlwb2RzIG9yIHF1YWRyb3BvZHMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDMuMDAjV2Fsa2luZyBzdGlja3MgYWNjZXNzb3JpZXMgb3IgcGFydHMgdGhlcmVvZiM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wNC4wMCNSb2xsYXRvcnMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDUuMDAjV2Fsa2VycyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wNi4wMCNXaGVlbGNoYWlycyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wNy4wMCNXaGVlbGNoYWlyIGFjY2Vzc29yaWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA4LjAwI1N1cHBvcnQgcmFpbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wOS4wMCNSb3BlIGxhZGRlcnMgb3IgbGlmdGluZyBiZWx0cyBvciBoYXJuZXNzZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xMC4wMCNMaWZ0aW5nIG9yIHR1cm5pbmcgY3VzaGlvbnMgY2FycGV0cyBvciBzaGVldHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xMS4wMCNIb2lzdHMgb3IgdHJvbGxleXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTIuMDAjV2hlZWxjaGFpciByYW1wcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xMy4wMCNXaGVlbGNoYWlyIGxpZnRpbmcgcGxhdGZvcm1zIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE0LjAwI05hdmlnYXRpb24gb3Igb3JpZW50YXRpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE1LjAwI0NoYWlyIGxpZnRzIG9yIGNoYWlyIHRyYW5zcG9ydGVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE2LjAwI1dhcm5pbmcgb3IgYWxhcm0gZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE3LjAwI0FpcndheSBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xOC4wMCNFYXIgb3IgaGVhcmluZyBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xOS4wMCNGYWNlIG9yIGV5ZSBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yMC4wMCNIYW5kIG9yIGFybSBvciBlbGJvdyBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yMS4wMCNIZWFkIHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIyLjAwI0xvd2VyIGV4dHJlbWl0eSBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yMy4wMCNCYXRodHViIGxlbmd0aCBvciB3aWR0aCByZWR1Y3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI0LjAwI1RydW5rIG9yIHdob2xlIGJvZHkgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjUuMDAjQm9keSBzdXBwb3J0IHVuaXRzIGZvciBob2lzdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yNi4wMCNEb29yIHdhcm5lcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yNy4wMCNGbG9hdGF0aW9uIG9yIHN3bW1pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI4LjAwI1JlbGllZiBtYXBzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjkuMDAjTm9uIGNvc21ldGljIHNraW4gY2xlYW5pbmcgb3IgcHJvdGVjdGl2ZSBwcm9kdWN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjMwLjAwI1N0YXRpb25hcnkgaG9pc3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMzEuMDAjU3RvbWEgc2hpZWxkcyBvciBwcm90ZWN0b3JzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjMyLjAwI1RhY3RpbGUgc3RpY2tzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMzMuMDAjVG9pbGV0IGFybSBvciBiYWNrcmVzdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wMC4wMCNSZWNyZWF0aW9uYWwgYW5kIHRyYWluaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wMS4wMCNDYW1waW5nIGVxdWlwbWVudCBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjAyLjAwI1RpbHRpbmcgdGFibGVzIGZvciBiYWxhbmNlIHRyYWluaW5nIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDMuMDAjQmlvZmVlZGJhY2sgZGV2aWNlcyBmb3IgbW92ZW1lbnQgc3RyZW5ndGggb3IgYmFsYW5jZSBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA0LjAwI1Nwb3J0cyBleGVyY2lzZSBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDUuMDAjRmlzaGluZyBvciBodW50aW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wNi4wMCNQbGF5aW5nIG9yIHRyYWluaW5nIGJhbGxzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDcuMDAjQ2hlc3MgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wOC4wMCNQbGF5aW5nIGNhcmRzIG9yIGhvbGRlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wOS4wMCNHYXJkZW5pbmcgdG9vbHMgb3IgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjEwLjAwI0hhbmRpY3JhZnQgdG9vbHMgbWF0ZXJpYWxzIG9yIGVxdWlwbWVudCBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjExLjAwI1Bob3RvZ3JhcGhpYyBlcXVpcG1lbnQgb3IgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjEyLjAwI0NhcmF2YW5uaW5nIGVxdWlwbWVudCBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjEzLjAwI1ZpYnJhdGluZyBjaGFpcnMgZm9yIHRyYWluaW5nIGRlYWYgcGVvcGxlIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjAwLjAwI1NwZWNpYWxpemVkIGFpZHMgZm9yIGhvdXNla2VlcGluZyBhbmQgaGFuZGxpbmcgZ29vZHMgYW5kIG1lYXN1cmluZyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjAxLjAwI1dlaWdoaW5nIG9yIG1lYXN1cmluZyBhaWRzIG9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wMi4wMCNDdXR0aW5nIG9yIGNob3BwaW5nIG9yIGRpdmlkaW5nIGFpZHMgb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjAzLjAwI0NsZWFuaW5nIG9yIHBlZWxpbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA0LjAwI0Jha2luZyBvciBjb29raW5nIG9yIGZyeWluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDUuMDAjRm9vZCBvciBkcmluayBzZXJ2aWNlIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wNi4wMCNGb29kIHN0b3BwZXJzIG9yIGZ1bm5lbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wNy4wMCNUYWJsZXdhcmUgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wOC4wMCNQdXNoZXIgZWRnZXMgb3IgcGxhdGUgYnVmZmVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA5LjAwI0ZlZWRpbmcgYXBwYXJhdHVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTAuMDAjRmVlZGluZyBwcm9iZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xMS4wMCNTaG9lIGNsZWFuaW5nIGFwcGFyYXR1cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjEyLjAwI1Nld2luZyBvciBrbml0dGluZyBvciBjcm9jaGV0aW5nIG9yIGRhcm5pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjEzLjAwI0JvdHRsZSBvciBjYW4gb3IgY29udGFpbmVyIG9wZW5lcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xNC4wMCNUdWJlIHNxdWVlemluZyBrZXlzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTUuMDAjR3Jhc3BpbmcgYWlkcyB0byBhc3Npc3Qgb3IgcmVwbGFjZSBoYW5kIG9yIGZpbmdlciBmdW5jdGlvbiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE2LjAwI0dyaXAgYWRhcHRlcnMgb3IgYXR0YWNobWVudHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xNy4wMCNCb2R5IHdvcm4gaG9sZGVycyB0byBhc3Npc3QgaGFuZCBvciBmaW5nZXIgZnVuY3Rpb24gZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xOC4wMCNTdGFuZHMgdG8gYXNzaXN0IGhhbmQgb3IgZmluZ2VyIGZ1bmN0aW9uIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTkuMDAjT3BlcmF0aW5nIHN0aWNrcyBzdWNoIGFzIGhlYWQgb3IgY2hpbiBvciBtb3V0aCBzdGlja3MgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yMC4wMCNFeHRlbmRlcnMgd2l0aG91dCBncmlwIGZ1bmN0aW9uIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjEuMDAjRml4ZWQgcG9zaXRpb25pbmcgc3lzdGVtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjIyLjAwI0JhbGFuY2VzIG9yIGVxdWlwbWVudCBmb3IgaG9pc3Rpbmcgb3IgYmFsYW5jaW5nIG9iamVjdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yMy4wMCNNYW5pcHVsYXRvcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yNC4wMCNSb2JvdHMgdG8gYXNzaXN0IHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yNS4wMCNJbmRpY2F0b3JzIHN1Y2ggYXMgc2lnbmFsIGxpZ2h0cyBvciBidXp6ZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjYuMDAjUG9pbnRpbmcgbGFtcHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yNy4wMCNNZWFzdXJpbmcgYWlkcyBvciB0b29scyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI4LjAwI09iamVjdCBwb3NpdGlvbmluZyBsaWZ0aW5nIG9yIHRpbHRpbmcgc3lzdGVtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI5LjAwI01hbnVhbCBleHRlbmRlZCByZWFjaCBncmlwcGluZyB0b25ncyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEyLjAwLjAwLjAwI1ZldGVyaW5hcnkgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wMC4wMCNWZXRlcmluYXJ5IGVxdWlwbWVudCM0Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wMS4wMCNWZXRlcmluYXJ5IGJsb29kIHByZXNzdXJlIHRlc3RlcnMjNDIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDIuMDAjVmV0ZXJpbmFyeSBreW1vZ3JhcGggdGVzdGVyIzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjAzLjAwI1ZldGVyaW5hcnkgcHlyb2dlbmljIHRlc3RlciM0Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wNC4wMCNWZXRlcmluYXJ5IHN0ZXJlb3RveGljIGVxdWlwbWVudCM0Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wNS4wMCNWZXRlcmluYXJ5IGVsZWN0cm9jYXJkaW9ncmFwaCAoRUNHKSM0Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wMC4wMCNWZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjAxLjAwI0dhc3Ryb2ludGVzdGluYWwgdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wMi4wMCNCbG9vZCBvciBibG9vZCBmb3JtaW5nIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDMuMDAjUmVzcGlyYXRvcnkgc3lzdGVtIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDQuMDAjTXVzY3VsbyBza2VsZXRhbCBvciBuZXJ2b3VzIHN5c3RlbSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjA1LjAwI0NhcmRpb3Zhc2N1bGFyIHN5c3RlbSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjA2LjAwI0Rlcm1hdG9sb2dpY2FscyBvciBhbnRpcHJvdG96b2EgdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wNy4wMCNHZW5pdG8gdXJpbmFyeSBzeXN0ZW0gc2V4IG9yIGhvcm1vbmUgdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0My4wMC4wMC4wMC4wMCNDb21tdW5pY2F0aW9ucyBhbmQgQ29tcHV0ZXIgRXF1aXBtZW50IGFuZCBQZXJpcGhlcmFscyBhbmQgQ29tcG9uZW50cyBhbmQgU3VwcGxpZXMjNDMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMDAuMDAuMDAjU29mdHdhcmUjNDMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTUuMDAuMDAjRGF0YWJhc2Ugc3lzdGVtcyM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xNS4wMS4wMCNEYXRhYmFzZSBzb2Z0d2FyZSM0My4xNi4xNS4wMC4wMAotdW5zcHNjNyM0My4xNi4xNi4wMC4wMCNPcGVyYXRpbmcgc3lzdGVtcyM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xNi4wMS4wMCNNYWluZnJhbWUgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4xNi4wMC4wMAotdW5zcHNjNyM0My4xNi4xNi4wMi4wMCNQZXJzb25hbCBjb21wdXRlciAoUEMpIG9wZXJhdGluZyBzeXN0ZW0gc29mdHdhcmUjNDMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTYuMDMuMDAjT3BlbiBzeXN0ZW1zIG9wZXJhdGluZyBzeXN0ZW1zIzQzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjA0LjAwI0NsdXN0ZXJpbmcgc29mdHdhcmUjNDMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDAuMDAjQnVzaW5lc3MgdHJhbnNhY3Rpb24gYW5kIHBlcnNvbmFsIGJ1c2luZXNzIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjAxLjAwI0ludmVzdG1lbnQgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wMi4wMCNUYXggcHJlcGFyYXRpb24gc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDMuMDAjRmFjaWxpdGllcyBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA0LjAwI1NvZnR3YXJlIHN1aXRlcyM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wNS4wMCNJbnZlbnRvcnkgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wNi4wMCNGaW5hbmNpYWwgYW5hbHlzaXMgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDcuMDAjQWNjb3VudGluZyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wOC4wMCNUaW1lIGFjY291bnRpbmcgb3IgaHVtYW4gcmVzb3VyY2VzIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA5LjAwI0FuYWx5dGljYWwgb3Igc2NpZW50aWZpYyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4xMC4wMCNNYXRoZW1hdGljYWwgb3IgZm9yZWNhc3Rpbmcgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMTEuMDAjQXVjdGlvbiBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4xMi4wMCNTYWxlcyBvciBtYXJrZXRpbmcgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDAuMDAjRG9jdW1lbnQgY3JlYXRpb24gc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDEuMDAjRG9jdW1lbnQgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMi4wMCNFbGVjdHJvbmljIHB1Ymxpc2hpbmcgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDMuMDAjT3B0aWNhbCBjaGFyYWN0ZXIgcmVhZGVyIChPQ1IpIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA0LjAwI1ZvaWNlIHJlY29nbml0aW9uIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA1LjAwI0Rlc2t0b3AgcHVibGlzaGluZyBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wNi4wMCNQcmVzZW50YXRpb24gc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDcuMDAjV29yZCBwcm9jZXNzaW5nIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA4LjAwI1NjYW5uZXIgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDkuMDAjU3BlbGwgY2hlY2tlcnMjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDAuMDAjRHJhd2luZyBhbmQgaW1hZ2luZyBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMS4wMCNDb21wdXRlciBhaWRlZCBkZXNpZ24gKENBRCkgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDIuMDAjR3JhcGhpY3Mgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDMuMDAjRWR1Y2F0aW9uYWwgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDQuMDAjQ29tcHV0ZXIgYWlkZWQgbWFudWZhY3R1cmluZyAoQ0FNKSBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wNS4wMCNDaGFydGluZyBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wNi4wMCNGb3JtIG1ha2luZyBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wNy4wMCNNYXBwaW5nIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjIwLjAwLjAwI1NjaGVkdWxpbmcgYW5kIHByb2R1Y3Rpdml0eSBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMC4wMS4wMCNQcm9qZWN0IG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjAuMDIuMDAjU2NoZWR1bGluZyBzb2Z0d2FyZSM0My4xNi4yMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMC4wMy4wMCNDb250YWN0IG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjEuMDAuMDAjU3ByZWFkc2hlZXRzIGFuZCBlbmhhbmNlbWVudCBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMS4wMS4wMCNTcHJlYWRzaGVldCBzb2Z0d2FyZSM0My4xNi4yMS4wMC4wMAotdW5zcHNjNyM0My4xNi4yMi4wMC4wMCNNdWx0aW1lZGlhIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIyLjAxLjAwI011c2ljIG9yIHNvdW5kIGVkaXRpbmcgc29mdHdhcmUjNDMuMTYuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjMuMDAuMDAjUHJpbnQgc2hvcCBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMy4wMS4wMCNBZGRyZXNzIGJvb2sgbWFraW5nIHNvZnR3YXJlIzQzLjE2LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIzLjAyLjAwI0xhYmVsIG1ha2luZyBzb2Z0d2FyZSM0My4xNi4yMy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wMC4wMCNQcm9ncmFtbWluZyBsYW5ndWFnZXMgYW5kIHRvb2xzIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjAxLjAwI0NvbXBpbGluZyBzb2Z0d2FyZXMjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDIuMDAjQ29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjAzLjAwI0RldmVsb3BtZW50IHNvZnR3YXJlIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjA0LjAwI0dyYXBoaWNhbCB1c2VyIGludGVyZmFjZSAoR1VJKSB0b29scyM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wNS4wMCNQcm9ncmFtbWluZyBsYW5ndWFnZXMjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDYuMDAjUHJvZ3JhbSB0ZXN0aW5nIHNvZnR3YXJlIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjAwLjAwI1NvZnR3YXJlIHV0aWxpdGllcyM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wMS4wMCNCYWNrdXAgb3IgcmVjb3Zlcnkgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDIuMDAjQmFyIGNvZGluZyBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wMy4wMCNGaWxlIHNlY3VyaXR5IG9yIGRhdGEgc2VjdXJpdHkgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDQuMDAjRm9yZWlnbiBsYW5ndWFnZSB0cmFuc2xhdGlvbiBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wNS4wMCNQcmludCB1dGlsaXR5IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA2LjAwI1N0b3JhZ2UgbWVkaWEgbG9hZGluZyBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wNy4wMCNWaXJ1cyBwcm90ZWN0aW9uIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA4LjAwI0dlbmVyYWwgdXRpbGl0eSBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wOS4wMCNDb21wcmVzc2lvbiB1dGlsaXRpZXMjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMTAuMDAjU3lzdGVtIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMTEuMDAjU3RvcmFnZSBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjEyLjAwI1ZlcnNpb24gY2hlY2tlciBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wMC4wMCNOZXR3b3JraW5nIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjAxLjAwI1BsYXRmb3JtIGludGVyY29ubmVjdGl2aXR5IHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjAyLjAwI09wdGljYWwganVrZWJveCBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDMuMDAjT3BlcmF0aW5nIHN5c3RlbSBlbmhhbmNlbWVudCBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wNC4wMCNOZXR3b3JrIG9wZXJhdGluZyBzeXN0ZW0gc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDUuMDAjTmV0d29ya2luZyBkZXZlbG9wZXJzIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA2LjAwI05ldHdvcmsgY29ubmVjdGl2aXR5IHRlcm1pbmFsIGVtdWxhdGlvbiBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wNy4wMCNNYWluZnJhbWUgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wOC4wMCNMaWNlbnNlIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDkuMDAjR2F0ZXdheSBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xMC4wMCNDb21wYWN0IGRpc2MgKENEKSBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTEuMDAjQWRtaW5pc3RyYXRpb24gc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTIuMDAjVHJhbnNhY3Rpb24gc2VydmVyIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjEzLjAwI1N3aXRjaCBvciByb3V0ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTQuMDAjTXVsdGlwbGV4ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTUuMDAjQ29tbXVuaWNhdGlvbnMgc2VydmVyIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjE2LjAwI0JyaWRnZSBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wMC4wMCNDb21tdW5pY2F0aW9uIFNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjAxLjAwI0Rlc2t0b3AgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDIuMDAjU2VydmVyIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjAzLjAwI0ludGVyYWN0aXZlIHZvaWNlIHJlc3BvbnNlIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjA0LjAwI01vZGVtIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjA1LjAwI1JlbW90ZSBhY2Nlc3Mgc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDYuMDAjVmlkZW8gY29uZmVyZW5jaW5nIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjA3LjAwI0V4Y2hhbmdlIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI4LjAwLjAwI0ludGVybmV0IGFuZCBpbnRyYW5ldCBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yOC4wMS4wMCNJbnRlcm5ldCBicm93c2luZyBzb2Z0d2FyZSM0My4xNi4yOC4wMC4wMAotdW5zcHNjNyM0My4xNi4yOC4wMi4wMCNXZWIgc2VydmVyIHNvZnR3YXJlIzQzLjE2LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjAwLjAwI01pc2NlbGxhbmVvdXMgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDEuMDAjQ29tcHV0ZXIgZ2FtZSBzb2Z0d2FyZSM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wMi4wMCNTY3JlZW4gc2F2ZXJzIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjAzLjAwI1RyYWluaW5nIHNvZnR3YXJlIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjA0LjAwI0VudGVydGFpbm1lbnQgc29mdHdhcmUjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDUuMDAjRmFtaWx5IHRpdGxlcyM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wNi4wMCNFZHVjYXRpb25hbCBzb2Z0d2FyZSM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wMC4wMCNJbmR1c3RyeSBzcGVjaWZpYyBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wMS4wMCNQb2ludCBvZiBzYWxlIChQT1MpIHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjAyLjAwI0ZsaWdodCBjb250cm9sIHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjAzLjAwI0F2aWF0aW9uIGdyb3VuZCBzdXBwb3J0IHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjA0LjAwI0F2aWF0aW9uIHRlc3Qgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDUuMDAjSW5kdXN0cmlhbCBjb250cm9sIHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjA2LjAwI0xpYnJhcnkgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDcuMDAjQ29tcGxpYW5jZSBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMS4wMC4wMCNEcml2ZXJzIGFuZCBzeXN0ZW0gc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzEuMDEuMDAjRXRoZXJuZXQgZHJpdmVycyM0My4xNi4zMS4wMC4wMAotdW5zcHNjNyM0My4xNi4zMS4wMi4wMCNHcmFwaGljcyBjYXJkIGRyaXZlcnMjNDMuMTYuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMDAuMDAuMDAjSGFyZHdhcmUgYW5kIGFjY2Vzc29yaWVzIzQzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjAwLjAwI1RlbGVwaG9ueSBlcXVpcG1lbnQjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDEuMDAjRXhjaGFuZ2UgY29tcG9uZW50cyAoQ09ERUMpIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjAyLjAwI0V4Y2hhbmdlIGRhdGEgaW50ZXJmYWNlIGNhcmRzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjAzLjAwI0V4Y2hhbmdlIGRhdGFjb20gbW9kdWxlcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wNC4wMCNQaG9uZSBleGNoYW5nZSBpbnRlcmZhY2VzIG9yIGNvbXBvbmVudHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDUuMDAjRXhjaGFuZ2UgdHJ1bmsgaW50ZXJmYWNlIG9yIGNhcmQgY29tcG9uZW50cyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wNi4wMCNQcmVtaXNlIGJyYW5jaCBleGNoYW5nZSAoUEJYKSBzeXN0ZW1zIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA3LjAwI1RlbGVwaG9uZSBzd2l0Y2hpbmcgZXF1aXBtZW50IzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA4LjAwI1N3aXRjaGJvYXJkIGVxdWlwbWVudCM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wOS4wMCNQdW5jaCBkb3duIGJsb2NrcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xMC4wMCNBbmFsb2cgb3IgZGlnaXRhbCB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjExLjAwI0FuYWxvZyBvciBkaWdpdGFsIGNlbGx1bGFyIHRlbGVwaG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTIuMDAjTW9iaWxlIHRlbGVwaG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTMuMDAjQ29yZGxlc3MgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xNC4wMCNQYXkgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xNS4wMCNBbnN3ZXJpbmcgbWFjaGluZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTYuMDAjVGVsZXBob25lIGhlYWRzZXRzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE3LjAwI1ZvaWNlIG1haWwgc3lzdGVtcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xOC4wMCNDYWxsIG1hbmFnZW1lbnQgc3lzdGVtIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE5LjAwI0NlbGx1bGFyIHRlbGVwaG9uZSBhY2Nlc3NvcmllcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yMC4wMCNUZWxlcGhvbmUgcmVzdHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjEuMDAjVGVsZXBob25lIGFkYXB0ZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjIyLjAwI1RlbGVwaG9uZSBsaW5lIG11bHRpcGxpZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjIzLjAwI1RlbGVwaG9uZSBsaW5lIG1vZHVsYXIgY291cGxlcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjQuMDAjVmlkZW9waG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjUuMDAjRGlhbGVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yNi4wMCNUZWxlcGhvbmUgYW1wbGlmaWVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yNy4wMCNUZWxlcGhvbmUgc3RhbmRzIG9yIGhvbGRlcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjguMDAjSW50ZWdyYXRlZCBzZXJ2aWNlcyBkaWdpdGFsIG5ldHdvcmsgZXhjaGFuZ2VzIElTRE4jNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjkuMDAjVGVsZXBob25lIGphY2tzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjAwLjAwI0FudGVubmFzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjAxLjAwI1RyYW5zbWl0dGVycyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wMi4wMCNSZWNlaXZlcnMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDMuMDAjVHVuZXJzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA0LjAwI1Nob3J0IHdhdmUgZXF1aXBtZW50IzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA1LjAwI0FpcmNyYWZ0IGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA2LjAwI0F1dG9tb3RpdmUgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDcuMDAjQnJvYWRjYXN0IGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA4LjAwI01pY3Jvd2F2ZSBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wOS4wMCNUZWxldmlzaW9uIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjEwLjAwI1NhdGVsbGl0ZSBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4xMS4wMCNSYWRpbyBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4xMi4wMCNSYWRhciBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4xMy4wMCNDb21tdW5pY2F0aW9ucyBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4xNC4wMCNDb21tdW5pY2F0aW9uIHRvd2VycyBvciBzdXBwb3J0IzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjAwLjAwI1RlbGVjb21tdW5pY2F0aW9ucyBlcXVpcG1lbnQjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDEuMDAjV2lyZWxlc3MgYmFzZSBzdGF0aW9ucyM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wMi4wMCNUZWxlZ3JhcGggZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjAzLjAwI1RlbGV0eXBlIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wNC4wMCNUZWxlY29uZmVyZW5jaW5nIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wNS4wMCNTYXRlbGxpdGUgY29tbXVuaWNhdGlvbiBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDYuMDAjUGFnZXJzIG9yIGJlZXBlcnMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDcuMDAjSW50ZXJjb21tdW5pY2F0aW9ucyBvciBwYWdpbmcgc3lzdGVtcyM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wOC4wMCNQdWJsaWMgYWRkcmVzcyBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDkuMDAjRWxlY3Ryb25pYyBzb3VuZCBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMTAuMDAjRGljdGF0aW5nIG1hY2hpbmVzIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjExLjAwI0xpbmUgY29uZGl0aW9uZXJzIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjEyLjAwI0NoYW5uZWwgc2VydmljZSB1bml0IG9yIGRhdGEgc2VydmljZSB1bml0IChDU1Ugb3IgRFNVKSM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wMC4wMCNDb21wdXRlcnMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDEuMDAjTm90ZWJvb2sgY29tcHV0ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjAyLjAwI0RvY2tpbmcgc3RhdGlvbnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDMuMDAjV29ya3N0YXRpb25zIG9yIGRlc2t0b3AgY29tcHV0ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA0LjAwI1BlcnNvbmFsIGRpZ2l0YWwgYXNzaXN0YW50cyAoUERBcykgb3IgcGVuIGJhc2VkIGNvbXB1dGVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wNS4wMCNNYWluZnJhbWUgY29tcHV0ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA2LjAwI1NlcnZlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDcuMDAjUG9ydCByZXBsaWNhdG9ycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wOC4wMCNNaW5pY29tcHV0ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA5LjAwI1BvaW50IG9mIHNhbGUgKFBPUykgdGVybWluYWxzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjEwLjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIChQTEMpIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjExLjAwI0NvbnNvbGUgIG1haW5mcmFtZSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xMi4wMCNDb25zb2xlIGNvbnRyb2xsZXIgIG1haW5mcmFtZSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xMy4wMCNDaGFubmVsIGNvbnZlcnRlciM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xNC4wMCNDaGFubmVsIHRvIGNoYW5uZWwgaW50ZXJmYWNlIG1haW5mcmFtZSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xNS4wMCNDb250cm9sIHVuaXQjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTYuMDAjQ291cGxlciBmYWNpbGl0eSAgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE3LjAwI1Bvd2VyIGNvb2xlciB1bml0ICBtYWluZnJhbWUjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTguMDAjVGhpbiBjbGllbnQgb3IgZGlza2xlc3Mgd29ya3N0YXRpb25zIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE5LjAwI0NvbnNvbGUgZXh0ZW5kZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE5LjAwLjAwI01lbW9yeSBhbmQgY2VudHJhbCBwcm9jZXNzaW5nIHVuaXRzIENQVXMgYW5kIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjE5LjAxLjAwI0NhY2hlIG1lbW9yeSBtb2R1bGVzIzQzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE5LjAyLjAwI0NlbnRyYWwgcHJvY2Vzc2luZyB1bml0IChDUFUpIHByb2Nlc3NvcnMjNDMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDMuMDAjQ2VudGFsIHByb2Nlc3NpbmcgdW5pdCAoQ1BVKSBtb3RoZXJib2FyZHMgb3IgZGF1Z2h0ZXJib2FyZHMjNDMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDQuMDAjTWVtb3J5IG1vZHVsZXMjNDMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDUuMDAjQ2VudHJhbCBwcm9jZXNzaW5nIHVuaXQgY29vbGVycyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wMC4wMCNDb21wdXRlciBjb250cm9sIGFuZCBpbnRlcmZhY2UgYm9hcmRzIGFuZCBjYXJkcyBhbmQgY2FibGVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAxLjAwI1BhcmFsbGVsIHRvIHNtYWxsIGNvbXB1dGVyIHN5c3RlbSBpbnRlcmZhY2UgY29udmVydGVycyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wMi4wMCNQYXJhbGxlbCB0byBzZXJpYWwgY29udmVydGVycyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wMy4wMCNTZXJpYWwgaW5mcmFyZWQgcG9ydHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDQuMDAjVmlkZW8gYWNjZWxlcmF0b3IgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDUuMDAjR3JhcGhpYyBhY2NlbGVyYXRvciBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wNi4wMCNOZXR3b3JrIGludGVyZmFjZSBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wNy4wMCNBdWRpbyBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wOC4wMCNFbXVsYXRpb24gYWRhcHRlcnMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDkuMDAjU2VyaWFsIHBvcnQgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTAuMDAjUGFyYWxsZWwgcG9ydCBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xMS4wMCNTbWFsbCBjb21wdXRlciBzeXN0ZW0gaW50ZXJmYWNlIChTQ1NJKSBjb250cm9sbGVyIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjEyLjAwI0RlY29kZXIjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTMuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgaW5wdXQgbW9kdWxlIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjE0LjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIGNvdW50ZXIgbW9kdWxlIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjE1LjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIGNvbW11bmljYXRpb24gbW9kdWxlIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjE2LjAwI1dpcmVsZXNzIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjE3LjAwI1RpbWVrZWVwaW5nIGNhcmQgbWFjaGluZSBhbmQgY29tcHV0ZXIgaW50ZXJmYWNlIGRldmljZSM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xOC4wMCNQcm9jZXNzb3IgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDAuMDAjQXVkaW8gYW5kIHZpc3VhbCBhY2Nlc3NvcmllcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wMS4wMCNNdXNpY2FsIGluc3RydW1lbnQgZGlnaXRhbCBpbnRlcmZhY2UgKE1JREkpIGludGVyZmFjZXMgb3IgYWRhcHRlcnMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDIuMDAjU2lnbmFsIHByb2Nlc3NvciB1cGdyYWRlcyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wMy4wMCNWaWRlbyBjYXB0dXJlIGJvYXJkcyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wNC4wMCNUZWxldmlzaW9uIGNhcmRzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA1LjAwI1JhZGlvIGNhcmRzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA2LjAwI011bHRpbWVkaWEga2l0cyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wNy4wMCNDb21wdXRlciBzcGVha2VycyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wOC4wMCNDb21wdXRlciBoZWFkc2V0IzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA5LjAwI1NldCB0b3AgYm94ZXMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMTAuMDAjVmlkZW8gY2Fzc2V0dGUgY29udGFpbmVycyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wMC4wMCNJbnB1dCBkZXZpY2VzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjAxLjAwI0JhciBjb2RlIHJlYWRlcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDIuMDAjR3JhcGhpY3MgdGFibGV0cyBvciBkaWdpdGl6ZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjAzLjAwI0pveXN0aWNrcyBvciBnYW1lIHBhZHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDQuMDAjS2V5Ym9hcmRzIG9yIGtleXBhZHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDUuMDAjQ29tcHV0ZXIgbW91c2UjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDYuMDAjUmVtb3RlIHVzZXIgaW50ZXJmYWNlcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNy4wMCNTY2FubmVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wOC4wMCNUb3VjaCBwYWRzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA5LjAwI1RvdWNoIHNjcmVlbnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTAuMDAjVHJhY2tiYWxscyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xMS4wMCNWb2ljZSBtaWNyb3Bob25lcyBmb3IgY29tcHV0ZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjEyLjAwI1B1bmNoIGNhcmQgcmVhZGVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xMy4wMCNMaWdodCBwZW4jNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTQuMDAjU3R5bHVzIHBlbiBmb3IgbW9iaWxlIGNvbXB1dGVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xNS4wMCNNb3VzZSBwYWQjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTYuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgaGFuZGhlbGQgcHJvZ3JhbW1lciM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xNy4wMCNFR1IgIEVsZWN0cm9uaWMgZ2F0ZSByZWFkZXIjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTguMDAjRHVtYiB0ZXJtaW5hbCM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xOS4wMCNQdW5jaGVkIGNhcmRzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjAwLjAwI0VsZWN0cm9uaWMgZGF0YSBzdG9yYWdlIGVxdWlwbWVudCM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wMS4wMCNSZWFkIG9ubHkgY29tcGFjdCBkaXNjIChDRCkgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjAyLjAwI0NvbXBhY3QgZGlzYyAoQ0QpIGp1a2Vib3hlcyBvciBjaGFuZ2VycyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wMy4wMCNDb21iaW5hdGlvbiBmbG9wcHkgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjA0LjAwI0Rpc2sgYXJyYXlzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjA1LjAwI0Zsb3BweSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDYuMDAjSGlnaCBjYXBhY2l0eSByZW1vdmFibGUgbWVkaWEgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjA3LjAwI011bHRpIGRyaXZlIGhhcmQgZHJpdmUgdG93ZXJzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjA4LjAwI1JlY29yZGFibGUgY29tcGFjdCBkaXNjIChDRCkgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjA5LjAwI1JlZWwgdG8gcmVlbCB0YXBlIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xMC4wMCNTaW5nbGUgb3B0aWNhbCBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTEuMDAjVGFwZSBhcnJheXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTIuMDAjVGFwZSBkcml2ZSBhdXRvIGxvYWRlcnMgb3IgbGlicmFyaWVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjEzLjAwI0hhcmQgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjE0LjAwI0NvbXB1dGVyIERWRCBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTUuMDAjQXJyYXkgY29udHJvbGxlciM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xNi4wMCNNUDMgcGxheWVyIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjE3LjAwI01lbW9yeSBjYXJkIHJlYWRlcnMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTguMDAjUGVyaXBoZXJhbCBjb21wb25lbnQgbWljcm9jaGFubmVsIGludGVyY29ubmVjdCBhcmNoaXRlY3R1cmUgIHJlYWRlciBhbmQgd3JpdGVyIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wMC4wMCNNb25pdG9ycyBhbmQgZGlzcGxheXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjQuMDEuMDAjTW9uaXRvcnMjNDMuMTcuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjQuMDIuMDAjRmxhdCBwYW5lbCBkaXNwbGF5cyM0My4xNy4yNC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wMy4wMCNUb3VjaCBzY3JlZW4gbW9uaXRvcnMjNDMuMTcuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjQuMDQuMDAjTW9uaXRvciBhY2Nlc3NvcmllcyM0My4xNy4yNC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wMC4wMCNQcmludGVycyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wMS4wMCNQbG90dGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wMi4wMCNCYW5kIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAzLjAwI0RvdCBtYXRyaXggcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDQuMDAjTGFiZWwgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDUuMDAjTGFyZ2UgZm9ybWF0IHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjA2LjAwI0xpbmUgbWF0cml4IHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjA3LjAwI1BhZ2UgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDguMDAjVGhlcm1hbCB0YXBlIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjA5LjAwI0lua2pldCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4xMC4wMCNMYXNlciBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4xMS4wMCNCdWJibGUgamV0IHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjEyLjAwI0JhZyB0YWcgcHJpbnRlciM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4xMy4wMCNQcmludGVyIHNlcGVyYXRvciM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4xNC4wMCNNdWx0aSBmdW5jdGlvbiBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4xNS4wMCNBVEIgYWlybGluZSB0aWNrZXQgb3IgYm9hcmRpbmcgcGFzcyBwcmludGVyIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjAwLjAwI0VuY2xvc3VyZXMgYW5kIGZyYW1lcyBhbmQgYmFja3BsYW5lcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wMS4wMCNDaGFzc2lzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjAyLjAwI05ldHdvcmsgY2hhc3NpcyM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wMy4wMCNEcml2ZSBjYWJpbmV0cyM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wNC4wMCNFeHBhbnNpb24gc2xvdCBleHBhbmRlciM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wNS4wMCNSYWNrcyM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wNi4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciByYWNrIG9yIGJhc2UjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDcuMDAjUmVtb3ZhYmxlIGRyaXZlIGZyYW1lcyM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wMC4wMCNOZXR3b3JrIGhhcmR3YXJlIGFuZCBjb21wb25lbnRzIGFuZCBhY2Nlc3NvcmllcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wMS4wMCNIdWJzIG9yIGNvbmNlbnRyYXRvcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDIuMDAjUm91dGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wMy4wMCNSZXBlYXRlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDQuMDAjTmV0d29yayBicmlkZ2VzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjA1LjAwI1N3aXRjaGVzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjA2LjAwI01lZGlhIGZpbHRlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDcuMDAjV2lkZSBhcmVhIG5ldHdvcmsgKFdBTikgY2FyZHMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDguMDAjTXVsdGlzdGF0aW9uIGFjY2VzcyB1bml0cyAoTUFVcykjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDkuMDAjRGF0YSBzZXJ2aWNlIHVuaXRzIChEU1VzKSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xMC4wMCNOZXR3b3JrIGFkYXB0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjExLjAwI0xvYWQgYmFsYW5jZXIjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTIuMDAjUHJpbnRlciAgYWNjdW11bGF0b3IjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTMuMDAjRW50ZXJwcmlzZSBTeXN0ZW0gQ29ubmVjdGl2aXR5IEVTQ09OIERpcmVjdG9yIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE0LjAwI05ldHdvcmsgbWFuYWdlbWVudCBzeXN0ZW0jNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTUuMDAjRmlyZXdhbGwgZmlyZXdhbGwgYXBwbGlhbmNlIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE2LjAwI0NhYmxlIG5ldHdvcmsgdGVzdGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xNy4wMCNEYXRhIHN5bmNocm9uaXphdGlvbiBkZXZpY2UjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTguMDAjRGlnaXRhbCBjcm9zcyBjb25uZWN0cyBlcXVpcG1lbnQjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTkuMDAjT3B0aWNhbCBjcm9zcyBjb25uZWN0cyBlcXVpcG1lbnQjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjAuMDAjU2NyZWVuIGFtcGxpZmllciM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4yMS4wMCNUaW1lIGRpdmlzaW9uYWwgbXVsdGlwbGV4IzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjIyLjAwI0Nvbm5lY3Rpb24gcGFuZWxzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjIzLjAwI1ZvaWNlIGVjaG8gY2FuY2VsbGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4yNC4wMCNQYXRjaCBwYW5lbCM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wMC4wMCNNb2RlbXMgYW5kIHJlbGF0ZWQgaGFyZHdhcmUjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDEuMDAjTW9kZW1zIG9yIG5ldHdvcmsgY29tYm8gY2FyZHMjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDIuMDAjTW9kZW1zIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjAzLjAwI0ludGVncmF0ZWQgc2VydmljZXMgZGlnaXRhbCBuZXR3b3JrIChJU0ROKSBhZGFwdGVycyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wNC4wMCNNb2RlbSBiYW5rcyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wNS4wMCNNb2RlbSB0ZWxlYWRhcHRvcnMjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDYuMDAjTXVsdGlwbGV4b3IgTVVYcyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wNy4wMCNBZGQgZHJvcCBtdWx0aXBsZXhlciM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOS4wMC4wMCNOZXR3b3JrIHN3aXRjaGVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAxLjAwI0xvY2FsIGFyZWEgbmV0d29yayAoTEFOKSBzd2l0Y2hlcyM0My4xNy4yOS4wMC4wMAotdW5zcHNjNyM0My4xNy4yOS4wMi4wMCNBc3luY2hyb25vdXMgdHJhbnNmZXIgbW9kZSAoQVRNKSBzd2l0Y2hlcyM0My4xNy4yOS4wMC4wMAotdW5zcHNjNyM0My4xNy4yOS4wMy4wMCNGaWJlciBkaXN0cmlidXRlZCBkYXRhIGludGVyZmFjZSAoRkRESSkgIHN3aXRjaGVzIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjA0LjAwI1dpZGUgYXJlYSBuZXR3b3JrIChXQU4pIHN3aXRjaGVzIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjA1LjAwI0ludGVsbGlnZW50IG5ldHdvcmsgc3dpdGNoaW5nIHN5c3RlbSM0My4xNy4yOS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMC4wMC4wMCNOZXR3b3JrIHJlcGVhdGVycyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMC4wMS4wMCNBdHRhY2hlZCByZXNvdXJjZSBjb21wdXRlciBuZXR3b3JrIChBUkNuZXQpIHJlcGVhdGVycyM0My4xNy4zMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMC4wMi4wMCNFdGhlcm5ldCByZXBlYXRlcnMjNDMuMTcuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzAuMDMuMDAjRmliZXIgZGlzdHJpYnV0ZWQgZGF0YSBpbnRlcmZhY2UgKEZEREkpIHJlcGVhdGVycyM0My4xNy4zMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMC4wNC4wMCNUb2tlbiByaW5nIHJlcGVhdGVycyM0My4xNy4zMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wMC4wMCNSYWRpbyBzeXN0ZW1zIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjAxLjAwI1RyYW5zbWl0dGVycyM0My4xNy4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wMi4wMCNSZWNlaXZlcnMjNDMuMTcuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDMuMDAjVHJhbnNjZWl2ZXJzIzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjA0LjAwI1R1bmVycyM0My4xNy4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wNS4wMCNTaG9ydCB3YXZlIGVxdWlwbWVudCM0My4xNy4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wMC4wMCNBdXRvbWF0ZWQgZGF0YSBjb2xsZWN0aW9uIGVxdWlwbWVudCM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wMS4wMCNCYXIgY29kZSBlcXVpcG1lbnQjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDIuMDAjUmFkaW8gZnJlcXVlbmN5IGlkZW50aWZpY2F0aW9uIChJRCkgZXF1aXBtZW50IzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjAzLjAwI1JhZGlvIGZyZXF1ZW5jeSBkYXRhIGNvbW11bmljYXRpb24gZXF1aXBtZW50IzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjA0LjAwI0NhbWVyYSBiYXNlZCB2aXNpb24gc3lzdGVtcyBmb3IgYXV0b21hdGVkIGRhdGEgY29sbGVjdGlvbiM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wNS4wMCNDdXJyZW5jeSByZWNvZ25pdGlvbiBlcXVpcG1lbnQjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDYuMDAjTWFnbmV0aWMgY2FyZCByZWFkZXJzIzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjAwLjAwI0NvbXB1dGVyIGRhdGEgc3dpdGNoZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDEuMDAjU2VyaWFsIGRhdGEgc3dpdGNoZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDIuMDAjS2V5Ym9hcmQgdmlkZW8gbW91c2UgKEtWTSkgc3dpdGNoIGJveGVzIzQzLjE3LjMzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjAzLjAwI01hbnVhbCBwcmludGVyIHN3aXRjaGVzIzQzLjE3LjMzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjA0LjAwI0F1dG9tYXRpYyBwcmludGVyIHN3aXRjaGVzIzQzLjE3LjMzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjA1LjAwI0NvbnNvbGUgc3dpdGNoIzQzLjE3LjMzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjA2LjAwI1BhcmFsbGVsIGRhdGEgc3dpdGNoZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzQuMDAuMDAjQ29tcHV0ZXIgYWNjZXNzb3J5IGNvdmVycyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNC4wMS4wMCNLZXkgYm9hcmQgc2tpbnMjNDMuMTcuMzQuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzQuMDIuMDAjTm90ZWJvb2sgb3IgcGFsbXRvcCBza2lucyM0My4xNy4zNC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNS4wMC4wMCNLZXkgYm9hcmQgc2tpbnMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDAuMDAjQ29tcHV0ZXIgY2FibGVzIGFuZCBhY2Nlc3NvcmllcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wMS4wMCNNb3VzZSBhZGFwdGVyIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjAyLjAwI0tleWJvYXJkIGV4dGVuc2lvbiBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDMuMDAjTW9kZW0gY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA0LjAwI0NvcmQgY292ZXJzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA1LjAwI1BhcmFsbGVsIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wNi4wMCNTZXJpYWwgY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA3LjAwI1VuaXZlcnNhbCBzZXJpYWwgYnVzIFVTQiBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDguMDAjTmV0d29yayBwYXRjaCBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDkuMDAjQ29tcHV0ZXIgYXVkaW8gY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjEwLjAwI0NvbXB1dGVyIHZpZGVvIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4xMS4wMCNJbnRlciBkZXZpY2UgbGluayBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMTIuMDAjQ29tcHV0ZXIgY2FibGUga2l0cyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4xMy4wMCNDYWJsZSBqYWNrcyBvciBjb25uZWN0b3JzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjAwLjAwI1N0b3JhZ2UgZHJpdmUgY29tcG9uZW50cyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wMS4wMCNIZWFkIGFzc2VtYmxpZXMgb3IgcGFydHMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDIuMDAjTGVhZCBhc3NlbWJsaWVzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjAzLjAwI0hlYWQgc3RhY2sgYXNzZW1ibGllcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNC4wMCNDb21iIGFzc2VtYmxpZXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDUuMDAjQ3Jhc2ggc3RvcHMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDYuMDAjUGxhdHRlcnMgb3IgZGlza3MjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDcuMDAjSGVhZCBtb3VudGluZyBhcm1zIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA4LjAwI1JlYWQgd3JpdGUgaGVhZHMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDkuMDAjTW90b3IgZHJpdmVzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjAwLjAwLjAwI0NvbW11bmljYXRpb25zIGFuZCBjb21wdXRlciBzdXBwbGllcyM0My4wMC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xNS4wMC4wMCNBdWRpbyByZWNvcmRpbmcgbWVkaWEjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTUuMDEuMDAjQmxhbmsgYXVkaW8gdGFwZXMjNDMuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDAuMDAjRGF0YSBzdG9yYWdlIG1lZGlhIzQzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjAxLjAwI0Zsb3BweSBkaXNrZXR0ZXMjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDIuMDAjUmVjb3JkYWJsZSBjb21wYWN0IGRpc2NzIChDRHMpIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjAzLjAwI0JsYW5rIGRhdGEgdGFwZXMjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDQuMDAjSGlnaCBkZW5zaXR5IHJlbW92YWJsZSBtZWRpYSBibGFuayBkaXNrcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wNS4wMCNCbGFuayBkaWdpdGFsIHZpZGVvIGRpc2NzIERWRCM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wNi4wMCNEYXRhIHN0b3JhZ2UgY2FyZHMjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDcuMDAjTWFnbmV0byBvcHRpY2FsIGRpc2tzIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjAwLjAwI011bHRpbWVkaWEgc3RvcmFnZSM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wMS4wMCNNdWx0aW1lZGlhIHRvd2VycyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wMi4wMCNNdWx0aW1lZGlhIGRyYXdlcnMjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDMuMDAjQ29tcGFjdCBkaXNjIChDRCkgY2FzZXMjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDQuMDAjRGlza2V0dGUgaG9sZGVycyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wNS4wMCNEaXNrZXR0ZSBzdG9yYWdlIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjA2LjAwI011bHRpbWVkaWEgdHJheXMgb3Igb3JnYW5pemVycyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wNy4wMCNaaXAgbWFpbGVycyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xOC4wMC4wMCNNb25pdG9yIHN0YW5kcyBvciByaXNlcnMjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTkuMDAuMDAjTW9uaXRvciBhcm1zIzQzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ0LjAwLjAwLjAwLjAwI09mZmljZSBFcXVpcG1lbnQgYW5kIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyM0NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4wMC4wMC4wMCNPZmZpY2UgbWFjaGluZXMgYW5kIHRoZWlyIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM0NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNS4wMC4wMCNEdXBsaWNhdGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNS4wMS4wMCNQaG90b2NvcGllcnMjNDQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTUuMDIuMDAjRmFjc2ltaWxlIG1hY2hpbmVzIzQ0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE1LjAzLjAwI011bHRpZnVuY3Rpb24gbWFjaGluZXMjNDQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTYuMDAuMDAjUGFwZXIgcHJvY2Vzc2luZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNi4wMS4wMCNQYXBlciBjdXR0aW5nIG1hY2hpbmVzIzQ0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE2LjAyLjAwI1BhcGVyIHB1bmNoaW5nIG9yIGJpbmRpbmcgbWFjaGluZXMjNDQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTYuMDMuMDAjUGFwZXIgc2hyZWRkaW5nIG1hY2hpbmVzIG9yIGFjY2Vzc29yaWVzIzQ0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjAwLjAwI1ByaW50ZXIgYW5kIHBob3RvY29waWVyIGFuZCBmYWNzaW1pbGUgYWNjZXNzb3JpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDEuMDAjQ29sb3Igb3B0aW9ucyBvciB1cGdyYWRlcyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wMi4wMCNEdXBsZXhlciB0cmF5cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wMy4wMCNEdXBsZXhlciB1bml0cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wNC4wMCNGYWNzaW1pbGUgaGFuZHNldHMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDUuMDAjUHJpbnRlciB0cmF5cyBvciBmZWVkZXJzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjA2LjAwI1Bob3RvY29uZHVjdG9yIG9yIGltYWdpbmcgdW5pdHMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDcuMDAjU3RhcGxlciB1bml0cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOC4wMC4wMCNDYWxjdWxhdGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOC4wMS4wMCNDYWxjdWxhdG9ycyM0NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOC4wMi4wMCNBZGRpbmcgbWFjaGluZXMjNDQuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTguMDMuMDAjQWNjb3VudGluZyBtYWNoaW5lcyM0NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOC4wNC4wMCNDYXNoIHJlZ2lzdGVycyM0NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOS4wMC4wMCNDaGVjayBlbmRvcnNpbmcgYW5kIHdyaXRpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTkuMDEuMDAjQ2hlY2sgZW5kb3JzaW5nIG1hY2hpbmVzIzQ0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE5LjAyLjAwI0NoZWNrIHdyaXRpbmcgbWFjaGluZXMjNDQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjAuMDAuMDAjTGFtaW5hdGluZyBzdXBwbGllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMC4wMS4wMCNMYW1pbmF0aW9uIGZpbG0jNDQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjAuMDIuMDAjTGFtaW5hdG9yIHBvdWNoZXMjNDQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDAuMDAjTWFpbCBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wMS4wMCNGcmFua2luZyBvciBwb3N0YWdlIG1hY2hpbmVzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjAyLjAwI01haWwgb3BlbmluZyBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wMy4wMCNNYWlsIHNlYWxpbmcgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDQuMDAjU3RhbXAgY2FuY2VsaW5nIG1hY2hpbmVzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjA1LjAwI0FkZHJlc3NpbmcgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDYuMDAjTGV0dGVyIGZvbGRlcnMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjIuMDAuMDAjU2Nhbm5lciBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMi4wMS4wMCNFbmRvcnNlcnMjNDQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDAuMDAjUGFja2luZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wMS4wMCNCdW5kbGluZyBtYWNoaW5lcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wMi4wMCNQYXJjZWwgd3JhcHBpbmcgbWFjaGluZXMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDMuMDAjU2VhbCBwcmVzc2VzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjA0LjAwI1NlYWxpbmcgbWFjaGluZXMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDUuMDAjU3RyYXBwaW5nIHRlbnNpb25lcnMgb3Igc2VhbGVycyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wNi4wMCNUeWluZyBtYWNoaW5lcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wMC4wMCNMYWJlbGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wMS4wMCNUYXBlIGxhYmVsIG1ha2VycyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wMi4wMCNEYXRpbmcgb3IgbnVtYmVyaW5nIG1hY2hpbmVzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAzLjAwI0lkZW50aWZpY2F0aW9uIChJRCkgcHJlc3MgbWFjaGluZXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDQuMDAjTGFiZWwgYXBwbHlpbmcgbWFjaGluZXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDUuMDAjTGFiZWwgbWFraW5nIG1hY2hpbmVzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA2LjAwI0xldHRlcmluZyBlcXVpcG1lbnQjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDcuMDAjVGFwZSBlbWJvc3NlciM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wOC4wMCNBdXRvbWF0aWMgbGFiZWxpbmcgc3lzdGVtcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wOS4wMCNTZW1pIGF1dG9tYXRpYyBsYWJlbGluZyBzeXN0ZW1zIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjExLjAwI0xhYmVsIGRpc3BlbnNlcnMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjUuMDAuMDAjU29ydGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNS4wMS4wMCNNb25leSBjb3VudGluZyBtYWNoaW5lcyM0NC4xMC4yNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNS4wMi4wMCNTb3J0ZXJzIzQ0LjEwLjI1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjAwLjAwI1R5cGluZyBtYWNoaW5lcyBhbmQgYWNjZXNzb3JpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDIuMDAjVHlwZXdyaXRlcnMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDMuMDAjUHJpbnR3aGVlbHMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDQuMDAjU3Rlbm90eXBlIG1hY2hpbmVzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA1LjAwI0RpY3RhdGlvbiBtYWNoaW5lcyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wNi4wMCNUeXBlcndyaXRlciByaWJib25zIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA3LjAwI1dvcmQgcHJvY2Vzc29ycyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wOC4wMCNUeXBld3JpdGVyIHByaW50aW5nIGVsZW1lbnRzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI4LjAwLjAwI0JpbmRpbmcgYW5kIGxhbWluYXRpb24gbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjguMDEuMDAjTGFtaW5hdG9ycyM0NC4xMC4yOC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wMC4wMCNPZmZpY2UgbWFjaGluZSBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wMS4wMCNUcmF2ZWwga2l0cyBmb3Igb2ZmaWNlIG1hY2hpbmVzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAyLjAwI1N0b3JhZ2UgYWNjZXNzb3JpZXMgZm9yIG9mZmljZSBtYWNoaW5lcyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wMy4wMCNUYXBlIGNsZWFuZXJzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA0LjAwI0FpciBjb21wcmVzc2VkIHNwcmF5IzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA1LjAwI1NtYWxsIHBhcGVyIGJhZ3Mgb2Ygd2V0IGFic29yYmluZyBzYWx0cyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wNi4wMCNDb21wdXRlciBvciBvZmZpY2UgZXF1aXBtZW50IGNsZWFuaW5nIGtpdCM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wNy4wMCNFcXVpcG1lbnQgZHVzdCBjb3ZlcnMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDguMDAjQ29tcGFjdCBkaXNjIGNsZWFuZXJzIG9yIHNjcmF0Y2ggcmVtb3ZlcnMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDkuMDAjQ29tcGFjdCBkaXNjIGRyaXZlIGNsZWFuZXIjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMTAuMDAjTGFtaW5hdG9yIHRyYXlzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjExLjAwI0NsZWFuaW5nIHdpcGVzIGZvciBvZmZpY2UgbWFjaGluZXMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMTIuMDAjQ2xlYW5pbmcgc29sdXRpb25zIGZvciBvZmZpY2UgZXF1aXBtZW50IzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjEzLjAwI0NvbXBhY3QgZGlzYyBkZXN0cm95ZXIjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzAuMDAuMDAjRnVzZXJzIGFuZCBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMC4wMS4wMCNGdXNlciBjbGVhbmluZyBwYWRzIzQ0LjEwLjMwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjAyLjAwI0Z1c2VyIG9pbCM0NC4xMC4zMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMC4wMy4wMCNGdXNlciB3aXBlciM0NC4xMC4zMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMC4wNC4wMCNGdXNlcnMjNDQuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDAuMDAjUHJpbnRlciBhbmQgZmFjc2ltaWxlIGFuZCBwaG90b2NvcGllciBzdXBwbGllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wMS4wMCNQcmludGVyIG9yIGZhY3NpbWlsZSBvciBwaG90b2NvcGllciBiZWx0cyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wMi4wMCNQcmludGVyIG9yIGZhY3NpbWlsZSBvciBwaG90b2NvcGllciByaWJib25zIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjAzLjAwI1RvbmVyIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjA0LjAwI1RyYW5zZmVyIHJvbGxzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjA1LjAwI0luayBjYXJ0cmlkZ2VzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjA2LjAwI0luayBzdGlja3MjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDcuMDAjUHJpbnRlciBvciBmYWNzaW1pbGUgb3IgcGhvdG9jb3BpZXIgY2xlYW5pbmcgc3VwcGxpZXMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDguMDAjRGV2ZWxvcGVyIGZvciBwcmludGVycyBvciBwaG90b2NvcGllcnMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDkuMDAjUHJpbnRlciBvciBmYWNzaW1pbGUgb3IgcGhvdG9jb3BpZXIgZHJ1bXMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTAuMDAjUHJpbnQgaGVhZHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTEuMDAjSW5rIHJvbGxzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjEyLjAwI1ByaW50ZXIgcmliYm9uIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjEzLjAwI1BoYXNlcnMgb3IgaW5ramV0IGtpdHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTQuMDAjTGFzZXJqZXQgY29hdGluZyBraXRzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjE1LjAwI0ltYWdpbmcgZmlsbXMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTYuMDAjS2l0IGZvciBwcmludGVyIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjE3LjAwI0ZhY3NpbWlsZSByaWJib25zIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjAwLjAwI09mZmljZSB0aW1lIHJlY29yZGluZyBtYWNoaW5lcyBhbmQgYWNjZXNzb3JpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDEuMDAjVGltZSBjYXJkIG1hY2hpbmVzIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjAyLjAwI1RpbWUgc3RhbXBpbmcgbWFjaGluZXMjNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDMuMDAjVGltZSBjYXJkIG1hY2hpbmUgcmVwbGFjZW1lbnQgcmliYm9uIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjA0LjAwI1RpbWUgY2FyZCByYWNrcyM0NC4xMC4zMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wNS4wMCNUaW1lIGNhcmRzIG9yIHNoZWV0cyM0NC4xMC4zMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMy4wMC4wMCNUaW1lIGNhcmQgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzQuMDAuMDAjVGltZSBzdGFtcGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zNS4wMC4wMCNCaW5kaW5nIG1hY2hpbmUgc3VwbGllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zNS4wMS4wMCNXaXJlIGJpbmRpbmcgZWxlbWVudHMgb3IgY29tYnMjNDQuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzUuMDIuMDAjQmluZGluZyBjb3ZlcnMjNDQuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMDAuMDAuMDAjT2ZmaWNlIGFuZCBkZXNrIGFjY2Vzc29yaWVzIzQ0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjAwLjAwI09yZ2FuaXplcnMgYW5kIGFjY2Vzc29yaWVzIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjAxLjAwI01lc3NhZ2UgaG9sZGVycyBvciBkaXNwZW5zZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjAyLjAwI0Rlc2sgZHJhd2VyIG9yZ2FuaXplcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDMuMDAjRGVza3RvcCB0cmF5cyBvciBvcmdhbml6ZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjA0LjAwI0Rpc2tldHRlIGhvbGRlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDUuMDAjQ29weSBob2xkZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjA2LjAwI1BhcGVyIG9yIHBhZCBob2xkZXIjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDcuMDAjQm9vayBlbmRzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjA4LjAwI1N0YXkgcHV0IHBlbiBvciBob2xkZXIjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDkuMDAjUGVuIG9yIHBlbmNpbCBob2xkZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjEwLjAwI0hhbmdpbmcgb3JnYW5pemVycyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xMS4wMCNEaXNwbGF5IHJhY2tzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjEyLjAwI0xpdGVyYXR1cmUgcmFjayM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xMy4wMCNTdXBwb3J0cyBmb3IgZGlhcmllcyBvciBjYWxlbmRhcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTQuMDAjU3RhbXAgcmFja3Mgb3Igb3JnYW5pemVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xNS4wMCNGaWxlIHN0b3JhZ2UgYm94ZXMgb3Igb3JnYW5pemVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wMC4wMCNDYXNoIGhhbmRsaW5nIHN1cHBsaWVzIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjAxLjAwI0N1cnJlbmN5IGJhZ3Mgb3Igd2FsbGV0cyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wMi4wMCNDb3VudGVyZmVpdCBiaWxsIGRldGVjdG9yIHBlbnMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDMuMDAjQ29pbiBzb3J0ZXJzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA0LjAwI0NvaW4gd3JhcHBlcnMgb3IgYmlsbCBzdHJhcHMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDUuMDAjQ2FzaCBvciB0aWNrZXQgYm94ZXMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDYuMDAjQ2FzaCBib3ggdHJheXMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDcuMDAjQ2hlY2sgZmlsZXMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDguMDAjQ29pbiBiYW5rcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wOS4wMCNDb3VudGVyZmVpdCBiaWxsIGRldGVjdG9ycyBvciBzdXBwbGllcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wMC4wMCNEcmFmdGluZyBzdXBwbGllcyM0NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wMS4wMCNTdGVuY2lscyBvciBsZXR0ZXJpbmcgYWlkcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wMi4wMCNEcmFmdGluZyBmaWxtcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wMy4wMCNDb21wYXNzZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDQuMDAjRHJhZnRpbmcgcGFwZXJzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA1LjAwI0N1cnZlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wNi4wMCNQcm90cmFjdG9ycyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wNy4wMCNTY2FsZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDguMDAjVCBzcXVhcmVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA5LjAwI1RlbXBsYXRlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4xMC4wMCNUcmlhbmdsZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMTEuMDAjQ29sb3IgY2hhcnRzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjEyLjAwI0RyYWZ0aW5nIGtpdHMgb3Igc2V0cyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4xMy4wMCNEcmFmdGluZyBkb3RzIG9yIHRhcGVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjAwLjAwI0JvYXJkcyM0NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wMS4wMCNQbGFubmluZyBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDIuMDAjRWxlY3Ryb25pYyBjb3B5Ym9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjAzLjAwI0Vhc2VscyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wNC4wMCNMZXR0ZXIgYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA1LjAwI0RyeSBlcmFzZSBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDYuMDAjQ2hhbGsgYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA3LjAwI0J1bGxldGluIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wOC4wMCNNYWduZXRpYyBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDkuMDAjQm9hcmQgY2xlYW5pbmcga2l0cyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wMC4wMCNQbGFubmluZyBzeXN0ZW1zIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjAxLjAwI0FkZHJlc3MgYm9va3Mgb3IgcmVmaWxscyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wMi4wMCNDYWxlbmRhcnMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDQuMDAjTWVldGluZyBwbGFubmVycyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wNS4wMCNBcHBvaW50bWVudCBib29rcyBvciByZWZpbGxzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA2LjAwI0RpYXJpZXMgb3IgcmVmaWxscyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wNy4wMCNTdWdnZXN0aW9uIGJveCM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wOC4wMCNXYWxsIHBsYW5uZXJzIG9yIHJlZmlsbHMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMDAuMDAuMDAjT2ZmaWNlIHN1cHBsaWVzIzQ0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjAwLjAwI01haWxpbmcgc3VwcGxpZXMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDEuMDAjTWFpbGVyIHR1YmVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjAzLjAwI01haWxlcnMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDQuMDAjV2luZG93IGVudmVsb3BlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wNS4wMCNTcGVjaWFsdHkgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA2LjAwI1N0YW5kYXJkIGVudmVsb3BlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wNy4wMCNDYXRhbG9nIG9yIGNsYXNwIGVudmVsb3BlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wOC4wMCNNZXNzYWdlIGRyb3BwZXJzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA5LjAwI01haWxpbmcgYmFncyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4xMC4wMCNNYWlsaW5nIHNlYWxzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjExLjAwI01haWxpbmcgYm94ZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMDAuMDAjRGVzayBzdXBwbGllcyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4wNC4wMCNTdGFtcHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMDUuMDAjVGFwZSBkaXNwZW5zZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjA2LjAwI0ZpbmdlciBzdGFsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTEuMDAjUGFwZXIgb3IgZXllbGV0IHB1bmNoZXMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTIuMDAjUGFwZXIgY3V0dGVycyBvciByZWZpbGxzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjEzLjAwI1N0YXBsZSByZW1vdmVycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xNC4wMCNDYWxsIGJlbGxzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE1LjAwI1N0YXBsZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE3LjAwI01hbnVhbCBsZXR0ZXIgb3BlbmVycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xOC4wMCNTY2lzc29ycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xOS4wMCNQZW5jaWwgc2hhcnBlbmVycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yMC4wMCNGaW5nZXIgc3RhbGxzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjIxLjAwI0Rlc2sgcGFkcyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yMi4wMCNNb2lzdGVuZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjIzLjAwI01lY2hhbmljYWwgbGV0dGVyIG9wZW5lciM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yNC4wMCNFbWJvc3NpbmcgdG9vbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjUuMDAjUGFwZXIgd2VpZ2h0cyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yNi4wMCNBZGhlc2l2ZSByZW1vdmVyIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI3LjAwI0Jvb2ttYXJrcyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yOC4wMCNDbGlwIGhvbGRlcnMgb3IgZGlzcGVuc2VycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yOS4wMCNQYXBlciBjbGlwIGRpc3BlbnNlciBvciBob2xkZXIjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMzAuMDAjU3RhcGxlciBraXQjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMzEuMDAjR2x1ZSBkaXNwZW5zZXJzIG9yIHJlZmlsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDAuMDAjV3JpdGluZyBpbnN0cnVtZW50cyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wMS4wMCNSb2xsZXJiYWxsIHBlbnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDIuMDAjUGVuIG9yIHBlbmNpbCBzZXRzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjAzLjAwI0ZvdW50YWluIHBlbnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDQuMDAjQmFsbCBwb2ludCBwZW5zIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA1LjAwI01lY2hhbmljYWwgcGVuY2lscyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wNi4wMCNXb29kZW4gcGVuY2lscyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wNy4wMCNDb2xvcmVkIHBlbmNpbHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDguMDAjTWFya2VycyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wOS4wMCNDcmF5b25zIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjEwLjAwI1dyaXRpbmcgY2hhbGsgb3IgYWNjZXNzb3JpZXMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTEuMDAjRmVsdCBwZW4jNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTIuMDAjTWFya2VyIHJlZmlsbHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTMuMDAjUGVuIG5pYnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTQuMDAjUGVuY2lsIG9yIHBlbiBncmlwcyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xNS4wMCNDb21iaW5hdGlvbiBwZW4gb3IgcGVuY2lsIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjAwLjAwI0NvcnJlY3Rpb24gbWVkaWEjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDEuMDAjQ29ycmVjdGlvbiBmaWxtIG9yIHRhcGUjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDIuMDAjQ29ycmVjdGlvbiBmbHVpZCM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wNC4wMCNFcmFzZXJzIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjA1LjAwI0NvcnJlY3Rpb24gcGVucyM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wNi4wMCNDb3JyZWN0aW9uIHBlbiByZWZpbGxzIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjA3LjAwI0VyYXNlciByZWZpbGxzIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjAwLjAwI0luayBhbmQgbGVhZCByZWZpbGxzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjAxLjAwI0luZGlhIGluayM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wMi4wMCNMZWFkIHJlZmlsbHMjNDQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDMuMDAjUGVuIHJlZmlsbHMjNDQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDQuMDAjSW5rIHJlZmlsbHMjNDQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDUuMDAjSW5rIG9yIHN0YW1wIHBhZHMjNDQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDAuMDAjRm9sZGVycyBhbmQgYmluZGVycyBhbmQgaW5kZXhlcyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wMS4wMCNJbmRleCBjYXJkIGZpbGVzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjAyLjAwI1NoZWV0IHByb3RlY3RvcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDMuMDAjQmluZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNC4wMCNEYXRhIGJpbmRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDUuMDAjTWFnYXppbmUgb3IgYm9vayBjb3ZlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDYuMDAjSGFuZ2luZyBmaWxlIGZvbGRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDcuMDAjUHJlc2VudGF0aW9uIGJpbmRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDguMDAjVGFiIGluZGV4ZXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDkuMDAjUm90YXJ5IG9yIGJ1c2luZXNzIGNhcmQgZmlsZXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTAuMDAjRGl2aWRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTEuMDAjRm9sZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xMi4wMCNDbGlwYm9hcmRzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjEzLjAwI1JlcG9ydCBjb3ZlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTQuMDAjU2hlZXQgbGlmdGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xNS4wMCNGaWxlIGJhY2tlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTYuMDAjRG9jdW1lbnQgaG9sZGVyIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE3LjAwI0hhbmdpbmcgZm9sZGVycyBvciBhY2Nlc3NvcmllcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xOC4wMCNGaWxlIGluc2VydHMgb3IgdGFicyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xOS4wMCNGaWxlIHBvY2tldHMgb3IgYWNjZXNzb3JpZXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMjAuMDAjQ2FyZCBwb2NrZXRzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjIxLjAwI1Bvc3RhZ2Ugc3RhbXAgYWxidW1zIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjIyLjAwI0JpbmRpbmcgYmFycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wMC4wMCNGYXN0ZW5pbmcgc3VwcGxpZXMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDEuMDAjUnViYmVyIGJhbmRzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjAyLjAwI1Byb25ncyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wMy4wMCNDbGFzcCBmYXN0ZW5lcnMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDQuMDAjUGFwZXIgY2xpcHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDUuMDAjQmluZGVyIG9yIGJ1bGxkb2cgY2xpcHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDYuMDAjUGlucyBvciB0YWNrcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNy4wMCNTdGFwbGVzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA4LjAwI0ZpbGluZyBwb2NrZXRzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA5LjAwI1ZlbGNybyBmYXN0ZW5lcnMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTAuMDAjQWRoZXNpdmUgbW91bnRzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjExLjAwI0hvbGUgcmVpbmZvcmNlbWVudHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTIuMDAjUm91bmQgaGVhZCBmYXN0ZW5lcnMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTMuMDAjVGFnIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xNC4wMCNTY3JldyBwb3N0cyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xNS4wMCNBZGhlc2l2ZSBjb3JuZXJzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE2LjAwI0JhZyBjbGlwcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xNy4wMCNCb29rIHJpbmdzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ1LjAwLjAwLjAwLjAwI1ByaW50aW5nIGFuZCBQaG90b2dyYXBoaWMgYW5kIEF1ZGlvIGFuZCBWaXN1YWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4wMC4wMC4wMCNQcmludGluZyBhbmQgcHVibGlzaGluZyBlcXVpcG1lbnQjNDUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDAuMDAjUHJpbnRpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDEuMDAjSGVsaW9ncmFwaGljIHByaW50ZXJzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjAyLjAwI09mZnNldCBwcmludGluZyBwcmVzc2VzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjAzLjAwI0xldHRlcnByZXNzIGVxdWlwbWVudCM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wNC4wMCNMaXRob2dyYXBoaWMgZXF1aXBtZW50IzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA1LjAwI1Bob3RvZ3JhdnVyZSBwcmludGluZyBtYWNoaW5lcyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wNi4wMCNTaWxrIHNjcmVlbiBwcmludGluZyBtYWNoaW5lcyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wNy4wMCNQcmludGluZyBwcmVzc2VzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA4LjAwI1BlcmZvcmF0aW5nIG1hY2hpbmVzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA5LjAwI1VsdHJhdmlvbGV0IChVVikgcm90YXJ5IHByaW50ZXIjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTAuMDAjRmxleG9ncmFwaGljIHByaW50ZXIjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTEuMDAjSW5ramV0IHByaW50ZXIgZm9yIGNvbW1lcmNpYWwgcHJpbnRpbmcgYXBwbGljYXRpb25zIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjEyLjAwI1RoZXJtYWwgdHJhbnNmZXIgcHJpbnRlciBmb3IgY29tbWVyY2lhbCBwcmludGluZyBhcHBsaWNhdGlvbnMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTMuMDAjSG90IHN0YW1wIHByaW50ZXIjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTQuMDAjUGFkIHByaW50ZXIjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTUuMDAjQ29yZSBwcmludGVyIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjAwLjAwI1ByaW50aW5nIG1hY2hpbmVyeSBhY2Nlc3NvcmllcyM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wMi4wMCNPZmZzZXQgZGFya3Jvb20gZXF1aXBtZW50IzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjAzLjAwI09mZnNldCBwcmludGluZyBjb25zdW1hYmxlcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wNC4wMCNPZmZzZXQgcHJpbnRpbmcgcGxhdGUgcHJvY2Vzc29ycyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wNS4wMCNPZmZzZXQgcGxhdGVzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA2LjAwI09mZnNldCBmaWxtIHByb2Nlc3NvcnMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDcuMDAjU2lsayBzY3JlZW4gYXJjIGxhbXBzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA4LjAwI1NpbGsgc2NyZWVuIHNjcmVlbnMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDkuMDAjU2lsayBzY3JlZW4gcHJpbnRpbmcgcmFja3MjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMTAuMDAjU2lsayBzY3JlZW4gdmFjdXVtIHByaW50aW5nIGZyYW1lcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4xMS4wMCNTaWxrIHNjcmVlbiBzcXVlZWdlZXMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDAuMDAjUHJpbnRpbmcgYWNjZXNzb3JpZXMjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDEuMDAjUHJpbnRpbmcgYXNzZW1ibGVycyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wMi4wMCNQcmludGluZyBndWlsbG90aW5lcyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wMy4wMCNQcmludGluZyBjb2xsYXRvcnMgb3IgZGVjb2xsYXRvcnMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDQuMDAjUHJpbnRpbmcgY3V0dGVycyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wNS4wMCNQcmludGluZyB0cmltbWVycyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wNi4wMCNQcmludGluZyBwdW5jaGVzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA3LjAwI1ByaW50aW5nIHBsYXRlcyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wOC4wMCNQcmludGluZyBhd2xzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjAwLjAwI0Jvb2sgYmluZGluZyBhbmQgc2V3aW5nIG1hY2hpbmVyeSM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wMS4wMCNCb29rIGNyZWFzaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjAyLjAwI0Jvb2sgY3V0dGluZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wMy4wMCNCb29rIHB1bmNoaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjA0LjAwI0Jvb2sgc3RpdGNoaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjA1LjAwI0Jvb2sgam9nZ2luZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wNi4wMCNCb29rIGdhdGhlcmluZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wNy4wMCNCb29rIGZvbGRpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDAuMDAjUHJpbnRpbmcgbGFib3JhdG9yeSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE5LjAxLjAwI0JhbmRpbmcgbWFjaGluZXMjNDUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDIuMDAjUGxhdGVtYWtlcnMjNDUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDMuMDAjUGFwZXIgZHJpbGxpbmcgbWFjaGluZXMjNDUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDQuMDAjRW5sYXJnZXJzIzQ1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE5LjA1LjAwI0RyYXdpbmcgb3IgcmV0b3VjaGluZyBib2FyZHMjNDUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDAuMDAjQ29tcG9zaW5nIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wMS4wMCNJbnRlcnR5cGUgY29tcG9zaW5nIG1hY2hpbmVzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjAyLjAwI0xpbm90eXBlIGNvbXBvc2luZyBtYWNoaW5lcyM0NS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wMy4wMCNQaG90b2NvbXBvc2l0aW9uIG1hdGVyaWFscyM0NS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wNC4wMCNNb25vdHlwZSBjb21wb3NpbmcgbWFjaGluZXMjNDUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDUuMDAjUGhvdG90eXBlc2V0dGluZyBtYWNoaW5lcyM0NS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4wMC4wMC4wMCNBdWRpbyBhbmQgdmlzdWFsIHByZXNlbnRhdGlvbiBlcXVpcG1lbnQjNDUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTUuMDAuMDAjTGVjdGVybnMgYW5kIHNvdW5kIHN5c3RlbXMgYW5kIGFjY2Vzc29yaWVzIzQ1LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE1LjAxLjAwI0ZyZWUgc3RhbmRpbmcgbGVjdGVybnMjNDUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTUuMDIuMDAjVGFibGUgdG9wIGxlY3Rlcm5zIzQ1LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjAwLjAwI1Byb2plY3RvcnMgYW5kIHN1cHBsaWVzIzQ1LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjAxLjAwI1BvaW50ZXJzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjAyLjAwI1Byb2plY3Rpb24gYnVsYnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDMuMDAjUHJvamVjdGlvbiBzY3JlZW5zIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA0LjAwI1NsaWRlIHByb2plY3RvcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDUuMDAjVHJhbnNwYXJlbmN5IGVxdWlwbWVudCBvciBzdXBwbGllcyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wNi4wMCNMaXF1aWQgY3J5c3RhbCBkaXNwbGF5IHByb2plY3Rpb24gcGFuZWxzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA3LjAwI092ZXJoZWFkIHByb2plY3RvcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDguMDAjRmlsbSBwcm9qZWN0b3JzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA5LjAwI0NvbXB1dGVyIHNjcmVlbiBwcm9qZWN0b3IjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTAuMDAjRXBpZGlhc2NvcGVzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjExLjAwI01pY3JvZmljaGUgb3IgbWljcm9maWxtIHZpZXdlcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTIuMDAjRGlzc29sdmUgY29udHJvbHMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTMuMDAjQ2F0aG9kZSByYXkgdHViZSBkYXRhIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjE0LjAwI0xpcXVpZCBjcnlzdGFsIGRpc3BsYXkgZGF0YSBvciB2aWRlbyBwcm9qZWN0b3IjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTUuMDAjUHJvamVjdGlvbiBsZW5zZXMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTYuMDAjVmlkZW8gcHJvamVjdG9ycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xOC4wMCNQcmVzZW50YXRpb24gbGlnaHQgYm94ZXMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTcuMDAuMDAjQXVkaW8gcHJlc2VudGF0aW9uIGVxdWlwbWVudCBhbmQgaGFyZHdhcmUgYW5kIGNvbnRyb2xsZXJzIzQ1LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE3LjAxLjAwI0Fzc2lzdGl2ZSBsaXN0ZW5pbmcgZGV2aWNlcyM0NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNy4wMi4wMCNBdWRpbyBqYWNrIGJveGVzIzQ1LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE3LjAzLjAwI0xpc3RlbmluZyBjZW50ZXJzIzQ1LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjAwLjAwI1ZpZGVvIGFuZCBjb21iaW5hdGlvbiB2aWRlbyBhbmQgYXVkaW8gcHJlc2VudGF0aW9uIGVxdWlwbWVudCBhbmQgaGFyZHdhcmUgYW5kIGNvbnRyb2xsZXJzIzQ1LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjAxLjAwI01lZGlhIGNvbnRyb2wgc3lzdGVtcyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wMi4wMCNUZWxldmlzaW9uIG1vdW50cyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wMy4wMCNTY2FuIGNvbnZlcnRlcnMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDQuMDAjTGluZSBkb3VibGVycyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wNS4wMCNWaWRlbyBlZGl0b3JzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA2LjAwI0Rpc3RhbmNlIGxlYXJuaW5nIHN5c3RlbXMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDcuMDAjSW50ZXJmYWNlcyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wOC4wMCNMaWdodGluZyBjb250cm9scyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOS4wMC4wMCNQaG9uZSBhbmQgdmlkZW8gY29uZmVyZW5jZSBlcXVpcG1lbnQgYW5kIGhhcmR3YXJlIGFuZCBjb250cm9sbGVycyM0NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOS4wMS4wMCNBdWRpb2NvbmZlcmVuY2luZyBzeXN0ZW1zIzQ1LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE5LjAyLjAwI1ZpZGVvY29uZmVyZW5jaW5nIHN5c3RlbXMjNDUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMDAuMDAuMDAjUGhvdG9ncmFwaGljIGVxdWlwbWVudCM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wMC4wMCNDYW1lcmFzIzQ1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjAxLjAwI1N0aWxsIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDIuMDAjSW5zdGFudCBwcmludCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjAzLjAwI0Rpc3Bvc2FibGUgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wNC4wMCNEaWdpdGFsIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDUuMDAjQ2luZW1hdG9ncmFwaGljIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDYuMDAjVmlkZW8gY29uZmVyZW5jZSBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjA4LjAwI01pY3JvZmlsbSBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjEwLjAwI0FlcmlhbCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjExLjAwI0hpZ2ggc3BlZWQgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xMi4wMCNVbmRlcndhdGVyIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTMuMDAjT2Zmc2V0IGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTQuMDAjUGhvdG9jb3BpZXIgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xNS4wMCNIYW5kIGhlbGQgY2FtY29yZGVycyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xNi4wMCNEaWdpdGFsIGNhbWNvcmRlciM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xNy4wMCNEb2N1bWVudCBjYW1lcmEjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTguMDAjQ2FtZXJhIGtpdHMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDAuMDAjQ2FtZXJhIGFjY2Vzc29yaWVzIzQ1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjAxLjAwI0NhbWVyYSBmbGFzaGVzIG9yIGxpZ2h0aW5nIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjAyLjAwI0NhbWVyYSB0cmlwb2RzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjAzLjAwI0NhbWVyYSBsZW5zZXMgb3IgZmlsdGVycyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wNC4wMCNDYW1lcmEgc2h1dHRlcnMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDUuMDAjU2NyZWVuIGZyYW1lcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wNi4wMCNDYW1lcmEgaGFybmVzc2VzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA3LjAwI0NhbWVyYSBibG9ja3Mgb3IgaG9sZGVycyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wOC4wMCNDYW1lcmEgYXNzZW1ibGllcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wOS4wMCNDYW1lcmEgYnJhY2tldHMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTAuMDAjQ2FtZXJhIGNhYmxlcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xMS4wMCNMZW5zIGNvdmVyIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjEyLjAwI0NhbWVyYSB0YWJsZXMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTMuMDAjQ2FtZXJhIGVuY2xvc3VyZXMgb3IgY292ZXJzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjE0LjAwI1JldHJvZml0IGtpdHMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTUuMDAjQ2FtZXJhIHJpbmdzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjE2LjAwI1BhbiBoZWFkcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wMC4wMCNQaG90b2dyYXBoaWMgcHJvY2Vzc2luZyBlcXVpcG1lbnQjNDUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDEuMDAjRmlsbSBkcmllcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDIuMDAjRmlsbSB3YXNoZXJzIzQ1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjAzLjAwI0ZpbG0gc3BsaWNlcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDQuMDAjRmlsbSBlZGl0b3JzIzQ1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjA1LjAwI1Bob3RvZ3JhcGhpYyBlbmxhcmdlcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMDAuMDAuMDAjUGhvdG9ncmFwaGljIGFuZCByZWNvcmRpbmcgbWVkaWEjNDUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDAuMDAjU3RpbGwgcGljdHVyZSBmaWxtIzQ1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjAxLjAwI0NvbG9yIGZpbG0jNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDIuMDAjQmxhY2sgYW5kIHdoaXRlIGZpbG0jNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDMuMDAjSW5zdGFudCBwaWN0dXJlIGZpbG0jNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDQuMDAjTWljcm9maWxtIzQ1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjA1LjAwI1ggcmF5IGZpbG0jNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDYuMDAjUGhvdG9ncmFwaHkgcGFwZXIjNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTYuMDAuMDAjTW92aW5nIHBpY3R1cmUgbWVkaWEjNDUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTYuMDEuMDAjTW90aW9uIHBpY3R1cmUgY2FtZXJhIGZpbG0jNDUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTYuMDQuMDAjQmxhbmsgdmlkZW8gdGFwZXMjNDUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTcuMDAuMDAjTWVkaWEgc3RvcmFnZSM0NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNy4wMS4wMCNTbGlkZSB0cmF5cyM0NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM0NS4xNC4wMC4wMC4wMCNQaG90b2dyYXBoaWMgZmlsbW1ha2luZyBzdXBwbGllcyM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNS4wMC4wMCNQaG90b2dyYXBoaWMgcHJvY2Vzc2luZyBjaGVtaWNhbHMjNDUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTUuMDEuMDAjRGV2ZWxvcGVyIHNvbHV0aW9uIzQ1LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE1LjAyLjAwI0ZpeGF0aXZlIzQ1LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE2LjAwLjAwI0Rhcmtyb29tIHN1cHBsaWVzIzQ1LjE0LjAwLjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE2LjAxLjAwI0RldmVsb3BpbmcgdHJheXMjNDUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTYuMDIuMDAjRGV2ZWxvcGluZyB0YW5rcyM0NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNi4wMy4wMCNEZXZlbG9waW5nIHRvbmdzIzQ1LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjAwLjAwLjAwLjAwI0RlZmVuc2UgYW5kIExhdyBFbmZvcmNlbWVudCBhbmQgU2VjdXJpdHkgYW5kIFNhZmV0eSBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEwLjAwLjAwLjAwI0xpZ2h0IHdlYXBvbnMgYW5kIGFtbXVuaXRpb24jNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDAuMDAjRmlyZWFybXMjNDYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDEuMDAjTWFjaGluZSBndW5zIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjAyLjAwI1BvbGljZSBvciBzZWN1cml0eSBzaG90Z3VucyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wMy4wMCNNaWxpdGFyeSByaWZsZXMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDQuMDAjSGFuZGd1bnMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDUuMDAjQWlyIHJpZmxlcyBvciBhaXIgaGFuZGd1bnMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDYuMDAjUGFydHMgb2YgZ3VucyBvciBwaXN0b2xzIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE2LjAwLjAwI0FtbXVuaXRpb24jNDYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTYuMDEuMDAjRGVmZW5zZSBvciBsYXcgZW5mb3JjZW1lbnQgYW1tdW5pdGlvbiM0Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNy4wMC4wMCNBbW11bml0aW9uIGhhbmRsaW5nIHN5c3RlbXMjNDYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTcuMDEuMDAjVGFuayBhbW11bml0aW9uIGhhbmRsaW5nIHN5c3RlbXMjNDYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTcuMDIuMDAjQWlyY3JhZnQgYW1tdW5pdGlvbiBoYW5kbGluZyBzeXN0ZW1zIzQ2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE4LjAwLjAwI0FybXMgYW5kIGFtbXVuaXRpb24gYWNjZXNzb3JpZXMjNDYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTguMDEuMDAjR3VuIGNhc2VzIzQ2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ2LjExLjAwLjAwLjAwI0NvbnZlbnRpb25hbCB3YXIgd2VhcG9ucyM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMC4wMCNCb21icyBhbmQgZ3JlbmFkZXMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTUuMDEuMDAjR3JlbmFkZXMjNDYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTUuMDIuMDAjTWluZXMjNDYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTUuMDMuMDAjTW9ydGFyIGJvbWJzIzQ2LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE2LjAwLjAwI0d1biBzeXN0ZW1zIzQ2LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjExLjE2LjAxLjAwI0NoYWluIGd1biBzeXN0ZW1zIzQ2LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE2LjAyLjAwI0dhdGxpbmcgZ3VuIHN5c3RlbXMjNDYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTcuMDAuMDAjSW5mcmFyZWQgKElSKSBzZW5zb3JzIzQ2LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjExLjE3LjAxLjAwI0luZnJhcmVkIChJUikgY29vbGVycyM0Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNy4wMi4wMCNJbmZyYXJlZCAoSVIpIGRldGVjdG9ycyM0Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xOC4wMC4wMCNOYXZhbCB3ZWFwb25zIzQ2LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjExLjE4LjAxLjAwI1RvcnBlZG9lcyM0Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xMi4wMC4wMC4wMCNNaXNzaWxlcyM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wMC4wMCNHdWlkZWQgbWlzc2lsZXMjNDYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDEuMDAjQWlyIHRvIGFpciBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wMi4wMCNBbnRpYWlyY3JhZnQgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDMuMDAjQW50aW1pc3NpbGUgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDQuMDAjQW50aXNoaXAgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDUuMDAjQW50aXRhbmsgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDYuMDAjQmFsbGlzdGljIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA3LjAwI0NydWlzZSBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wOC4wMCNTdXJmYWNlIHRvIGFpciBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wOS4wMCNBbnRpYmFsbGlzdGljIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjEwLjAwI1N1cmZhY2UgdG8gc3VyZmFjZSBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4xMS4wMCNBaXIgdG8gc3VyZmFjZSBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4xMi4wMCNUcmFpbmluZyBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wMC4wMCNNaXNzaWxlIHN1YnN5c3RlbXMjNDYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDEuMDAjRWxlY3Ryb25pYyBzYWZlIG9yIGFybSBkZXZpY2VzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjAyLjAwI1NvbGlkIG1pc3NpbGUgYm9vc3RlcnMjNDYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDMuMDAjTWlzc2lsZSB3YXJoZWFkcyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wNC4wMCNTYWZldHkgcGluIHB1bGxlcnMjNDYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDUuMDAjSmV0IHJlYWN0aW9uIGNvbnRyb2wgYXNzZW1ibGllcyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMy4wMC4wMC4wMCNSb2NrZXRzIGFuZCBzdWJzeXN0ZW1zIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjAwLjAwI0xhdW5jaCB2ZWhpY2xlcyBhbmQgcm9ja2V0cyM0Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wMS4wMCNNdWx0aSBzdGFnZSByb2NrZXRzIzQ2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjAyLjAwI1JldXNhYmxlIHJvY2tldHMjNDYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDMuMDAjU2luZ2xlIHN0YWdlIHJvY2tldHMjNDYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDQuMDAjTGlxdWlkIHJvY2tldHMjNDYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDUuMDAjU29saWQgcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNi4wMC4wMCNCb29zdGVycyM0Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNi4wMS4wMCNSZXVzYWJsZSBib29zdGVycyM0Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNi4wMi4wMCNTb2xpZCBib29zdGVycyM0Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNi4wMy4wMCNNdWx0aSBzdGFnZSBib29zdGVycyM0Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNi4wNC4wMCNMaXF1aWQgYm9vc3RlcnMjNDYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTQuMDAuMDAuMDAjTGF1bmNoZXJzIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE0LjE1LjAwLjAwI01pc3NpbGUgYW5kIHJvY2tldCBsYXVuY2hlcnMjNDYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTQuMTUuMDEuMDAjTWlzc2lsZSBsYXVuY2hlcnMjNDYuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTQuMTUuMDIuMDAjUm9ja2V0IGxhdW5jaGVycyM0Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4wMC4wMC4wMCNMYXcgZW5mb3JjZW1lbnQjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDAuMDAjQ3Jvd2QgY29udHJvbCBlcXVpcG1lbnQjNDYuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDEuMDAjQmFycmljYWRlcyM0Ni4xNS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMi4wMCNSaW90IGhlbG1ldHMjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDMuMDAjUmlvdCBzaGllbGRzIzQ2LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjA0LjAwI0JvZHkgYXJtb3VyIzQ2LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjA1LjAwI0JhcnJpZXJzIzQ2LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjAwLjAwI1NlY3VyaXR5IGFuZCBjb250cm9sIGVxdWlwbWVudCM0Ni4xNS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wMS4wMCNIYW5kY3VmZnMjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDIuMDAjTmlnaHQgc3RpY2tzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjAzLjAwI0ZpbmdlcnByaW50IGVxdWlwbWVudCM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wNC4wMCNBbGNvaG9sIGFuYWx5c2VycyM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wNS4wMCNXZWFwb25zIG9yIGV4cGxvc2l2ZXMgZGV0ZWN0b3JzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjA2LjAwI05hcmNvdGljIHRlc3Qga2l0cyM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNi4wMC4wMC4wMCNQdWJsaWMgc2FmZXR5IGFuZCBjb250cm9sIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjAwLjAwI1RyYWZmaWMgY29udHJvbCM0Ni4xNi4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wMS4wMCNBaXJwb3J0IHNpZ25hbGluZyBzeXN0ZW1zIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjAyLjAwI1JhaWx3YXkgc2lnbmFsaW5nIHN5c3RlbXMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDMuMDAjTWFyaW5lIHNpZ25hbGluZyBzeXN0ZW1zIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA0LjAwI1RyYWZmaWMgc2lnbmFscyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wNS4wMCNQYXJraW5nIG1ldGVycyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wNi4wMCNTbm93IG9yIGljZSBtZWx0ZXIjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDcuMDAjQmFycmllciB0YXBlIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA4LjAwI1RyYWZmaWMgb3IgZmxvb3IgY29uZXMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDkuMDAjU3BlZWQgc3RvcHBlcnMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTYuMDAuMDAjV2F0ZXIgc2FmZXR5IzQ2LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjAxLjAwI1JvcGUgZmxvYXQgbGluZXMjNDYuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTYuMDIuMDAjTGlmZSByaW5ncyM0Ni4xNi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wMy4wMCNQb29sIGFsYXJtcyM0Ni4xNi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wNC4wMCNMaWZlIHZlc3RzIG9yIHByZXNlcnZlcnMjNDYuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMDAuMDAuMDAjU2VjdXJpdHkgc3VydmVpbGxhbmNlIGFuZCBkZXRlY3Rpb24jNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDAuMDAjTG9ja3MgYW5kIHNlY3VyaXR5IGhhcmR3YXJlIzQ2LjE3LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjAxLjAwI1BhZGxvY2tzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjAyLjAwI0NhYmxlIGxvY2tzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjAzLjAwI0xvY2sgc2V0cyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wNC4wMCNQdXNoYnV0dG9uIGxvY2tzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA1LjAwI0tleXMgb3IgYWNjZXNzb3JpZXMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDYuMDAjU2FmZXMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDcuMDAjU2VjdXJpdHkgYmFycyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wOC4wMCNOdW1iZXIgbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDkuMDAjS2V5IGNhYmluZXRzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjEwLjAwI1RpbWUgbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTEuMDAjTG9ja291dCBkZXZpY2VzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjEyLjAwI0luc3RydW1lbnQgbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTMuMDAjTG9ja2luZyBjYW0jNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTQuMDAjU2VjdXJpdHkgY2hhaW5zIG9yIGFjY2Vzc29yaWVzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjAwLjAwI1N1cnZlaWxsYW5jZSBhbmQgZGV0ZWN0aW9uIGVxdWlwbWVudCM0Ni4xNy4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wMi4wMCNTYWZldHkgaG9ybnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDMuMDAjQ2xvY2sgdGltZXJzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA0LjAwI0FsYXJtIHN5c3RlbXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDUuMDAjRG9vciBjaGltZXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDYuMDAjU2lyZW5zIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA3LjAwI0J1enplcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDguMDAjTW90aW9uIGRldGVjdG9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wOS4wMCNDb252ZXggc2VjdXJpdHkgbWlycm9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xMC4wMCNTZWN1cml0eSBjYW1lcmFzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjExLjAwI1ZpZGVvIGlkZW50aWZpY2F0aW9uIHN5c3RlbXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTIuMDAjVmlkZW8gbW9uaXRvcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTMuMDAjR2FzIGRldGVjdG9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xNC4wMCNTdXJ2ZWlsbGFuY2UgY2FtZXJhcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xNS4wMCNMaWdodCBlbmhhbmNpbmcgY2FtZXJhcyBvciB2aXNpb24gZGV2aWNlcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xNi4wMCNSYWRhciBkZXRlY3RvcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTcuMDAjRG9vciBleWVzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE4LjAwI0Rvb3IgYmVsbHMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMDAuMDAuMDAjUGVyc29uYWwgc2FmZXR5IGFuZCBwcm90ZWN0aW9uIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjAwLjAwI1NhZmV0eSBhcHBhcmVsIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjAxLjAwI1Byb3RlY3RpdmUgYXByb25zIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjAyLjAwI0J1bGxldCBwcm9vZiB2ZXN0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wMy4wMCNQcm90ZWN0aXZlIGNvdmVyYWxscyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wNC4wMCNQcm90ZWN0aXZlIGdsb3ZlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wNS4wMCNQcm90ZWN0aXZlIGtuZWUgcGFkcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wNi4wMCNQcm90ZWN0aXZlIHBvbmNob3MjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDcuMDAjU2FmZXR5IHZlc3RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA4LjAwI0ZpcmUgcmV0YXJkYW50IGFwcGFyZWwjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDkuMDAjSGF6YXJkb3VzIG1hdGVyaWFsIHByb3RlY3RpdmUgYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMC4wMCNGaXJlIHJldGFyZGFudCBnbG92ZXMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTEuMDAjSGF6YXJkb3VzIG1hdGVyaWFsIHByb3RlY3RpdmUgZ29vZHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTIuMDAjQ2xlYW5yb29tIGFwcGFyZWwjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTMuMDAjQ2xlYW5yb29tIGdsb3ZlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xNC4wMCNFbGJvdyBwcm90ZWN0b3JzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE1LjAwI0luc2VjdGljaWRlIHByb3RlY3RpdmUgY2xvdGhpbmcjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTYuMDAjU2FmZXR5IHNsZWV2ZXMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTcuMDAjSW5zdWxhdGVkIG9yIGZsb3RhdGlvbiBzdWl0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xOC4wMCNIZWF0IHJlc2lzdGFudCBjbG90aGluZyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xOS4wMCNTYWZldHkgaGFybmVzc2VzIG9yIGJlbHRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjIwLjAwI0xlZyBwcm90ZWN0b3JzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjIxLjAwI1JhZGlhdGlvbiBwcm90ZWN0aW9uIGNsb3RoaW5nIG9yIGNvYXRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjIyLjAwI1NhZmV0eSBob29kcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yMy4wMCNJbnN1bGF0ZWQgY2xvdGhpbmcgZm9yIGNvbGQgZW52aXJvbm1lbnRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI0LjAwI1BlcnNvbmFsIGZsb3RhdGlvbiBkZXZpY2VzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI1LjAwI1Byb3RlY3RpdmUgcmFpbndlYXIgb3Igd2V0IGVudmlyb25tZW50IGFwcGFyZWwjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjYuMDAjUHJvdGVjdGl2ZSBzaGlydHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjcuMDAjUHJvdGVjdGl2ZSBwYW50cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yOC4wMCNQcm90ZWN0aXZlIGZyb2NrIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI5LjAwI0luc3VsYXRlZCBjbG90aGluZyBmb3IgY29sZCBlbnZpcm9ubWVudHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMzAuMDAjUHJvdGVjdGl2ZSBmaW5nZXIgY290cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4zMS4wMCNSZWZsZWN0aXZlIHN1c3BlbmRlcnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMzIuMDAjTGFiIGNvYXRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAwLjAwI1NhZmV0eSBmb290d2VhciM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wMS4wMCNGaXJlIHJldGFyZGFudCBmb290d2VhciM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wMi4wMCNIYXphcmRvdXMgbWF0ZXJpYWwgcHJvdGVjdGl2ZSBmb290d2VhciM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wMy4wMCNDbGVhbnJvb20gZm9vdHdlYXIjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDQuMDAjU2FmZXR5IGJvb3RzIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjA1LjAwI1NhZmV0eSBzaG9lcyM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wNi4wMCNGb290d2VhciBjb3ZlcnMjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDAuMDAjRmFjZSBhbmQgaGVhZCBwcm90ZWN0aW9uIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjAxLjAwI0hhcmQgaGF0cyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wMi4wMCNGYWNpYWwgc2hpZWxkcyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wMy4wMCNXZWxkaW5nIG1hc2tzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjA0LjAwI1NhZmV0eSBoZWxtZXRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjA1LjAwI01vdG9yY3ljbGUgaGVsbWV0cyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wNi4wMCNIZWxtZXQgcGFydHMgb3IgYWNjZXNzb3JpZXMjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDAuMDAjVmlzaW9uIHByb3RlY3Rpb24gYW5kIGFjY2Vzc29yaWVzIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjAxLjAwI0V5ZXdlYXIgaG9sZGVycyM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wMi4wMCNTYWZldHkgZ2xhc3NlcyM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wMy4wMCNFeWUgc2hpZWxkcyM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wNC4wMCNHb2dnbGVzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjA1LjAwI1ZpZGVvIGRpc3BsYXkgZmlsdGVycyM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wNi4wMCNMZW5zIGNsZWFuZXIjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTkuMDAuMDAjSGVhcmluZyBwcm90ZWN0b3JzIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE5LjAxLjAwI0VhciBwbHVncyM0Ni4xOC4xOS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOS4wMi4wMCNFYXIgbXVmZnMjNDYuMTguMTkuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjAuMDAuMDAjUmVzcGlyYXRvcnkgcHJvdGVjdGlvbiM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wMS4wMCNNYXNrcyM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wMi4wMCNSZXNwaXJhdG9ycyM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wMy4wMCNHYXMgbWFza3MjNDYuMTguMjAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjAuMDQuMDAjUmVzcGlyYXRpb24gYWlyIHN1cHBseWluZyBzZWxmIGNvbnRhaW5lZCBicmVhdGhpbmcgYXBwYXJhdHVzIChTQ0JBKSM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wNS4wMCNNYXNrIGZpbHRlcnMjNDYuMTguMjAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDAuMDAjQW50aSBzdGF0aWMgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wMS4wMCNBbnRpc3RhdGljIHdyaXN0IHN0cmFwcyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wMi4wMCNIZWVsIGdyb3VuZGluZyBzdHJhcHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDMuMDAjR3JvdW5kaW5nIGhhcmR3YXJlIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjA0LjAwI0FudGkgc3RhdGljIGZsb29yIG1hdHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDUuMDAjQW50aSBzdGF0aWMgd29ya3RhYmxlIG1hdHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDYuMDAjQW50aXN0YXRpYyBiZWx0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wNy4wMCNBbnRpc3RhdGljIG1haW50ZW5hbmNlIGtpdHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDguMDAjQW50aXN0YXRpYyB0b2Ugc3RyYXBzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjAwLjAwI0VyZ29ub21pYyBzdXBwb3J0IGFpZHMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDEuMDAjQmFjayBzdXBwb3J0IGJlbHRzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjAyLjAwI0VsYm93IHN1cHBvcnRzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjAzLjAwI0JhY2sgc3VwcG9ydCByZXN0cyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wNC4wMCNXcmlzdCBicmFjZXMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDUuMDAjRm9vdCByZXN0cyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wNi4wMCNXcmlzdCByZXN0cyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wNy4wMCNBbmtsZSBzdXBwb3J0cyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wOC4wMCNTaG9lIGluc29sZXMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDAuMDAjRmFsbCBwcm90ZWN0aW9uIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjAxLjAwI0xpZmVsaW5lcyBvciBsaWZlbGluZSBlcXVpcG1lbnQjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDIuMDAjRmFsbCBwcm90ZWN0aW9uIGxhbnlhcmQjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDMuMDAjU2FmZXR5IGhhcm5lc3Mgd2luZGVycyM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wNC4wMCNBbmNob3JhZ2UgY29ubmVjdG9yIzQ2LjE4LjIzLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjA1LjAwI1NlbGYgcmV0cmFjdGluZyBsYW55YXJkIzQ2LjE4LjIzLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjI0LjAwLjAwI0RlY29udGFtaW5hdGlvbiBhaWRzIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjI0LjAxLjAwI0RlY29udGFtaW5hdGlvbiBzaG93ZXIjNDYuMTguMjQuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjUuMDAuMDAjUGVyc29uYWwgc2FmZXR5IGRldmljZXMgb3Igd2VhcG9ucyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yNS4wMS4wMCNSZXBlbGxlbnRzIGZvciBjYW5pbmUgYXR0YWNrcyM0Ni4xOC4yNS4wMC4wMAotdW5zcHNjNyM0Ni4xOS4wMC4wMC4wMCNGaXJlIHByb3RlY3Rpb24jNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTUuMDAuMDAjRmlyZSBwcmV2ZW50aW9uIzQ2LjE5LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE1LjAxLjAwI1Ntb2tlIGRldGVjdG9ycyM0Ni4xOS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNS4wMi4wMCNIZWF0IGRldGVjdG9ycyM0Ni4xOS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNS4wMy4wMCNGaXJlIHJlc2lzdGFudCBjb2F0aW5ncyBvciBwdXR0aWVzIG9yIHNlYWxhbnRzIzQ2LjE5LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjAwLjAwI0ZpcmUgZmlnaHRpbmcgZXF1aXBtZW50IzQ2LjE5LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjAxLjAwI0ZpcmUgZXh0aW5ndWlzaGVycyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wMi4wMCNGaXJlIHNwcmlua2xlciBzeXN0ZW1zIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjAzLjAwI0ZpcmUgaG9zZXMgb3Igbm96emxlcyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wNC4wMCNGaXJlIGJsYW5rZXRzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjA1LjAwI0ZpcmUgc3VwcHJlc3Npb24gaGFuZCB0b29scyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wNi4wMCNGaXJlIHN1cHByZXNzaW9uIGZvYW0gb3Igc2ltaWxhciBjb21wb3VuZHMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDcuMDAjRmlyZSBicmVhdGhpbmcgYXBwYXJhdHVzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ3LjAwLjAwLjAwLjAwI0NsZWFuaW5nIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMjNDcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMDAuMDAuMDAjV2F0ZXIgYW5kIHdhc3Rld2F0ZXIgdHJlYXRtZW50IHN1cHBseSBhbmQgZGlzcG9zYWwjNDcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDAuMDAjV2F0ZXIgdHJlYXRtZW50IGFuZCBzdXBwbHkgZXF1aXBtZW50IzQ3LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjAxLjAwI0FjdGl2YXRlZCBjYXJib24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjAyLjAwI0FtbW9uaWEgcmVtb3ZhbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDMuMDAjQ2FyYm9uIGZpbHRyYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA0LjAwI0JhY3RlcmlhbCByZW1vdmFsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wNS4wMCNDaGxvcmluZSBoYW5kbGluZyBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDYuMDAjQ29ycm9zaW9uIGNvbnRyb2wgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA3LjAwI0dyaXQgY2hhbWJlcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDguMDAjRGVzYWxpbmF0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wOS4wMCNGbHVvcmlkYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjEwLjAwI0lyb24gcmVtb3ZhbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTEuMDAjSW9uIGV4Y2hhbmdlIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xMi4wMCNNaXhlcnMgb3IgYWdpdGF0b3JzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjEzLjAwI094eWdlbiBnZW5lcmF0b3JzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE0LjAwI1dhdGVyIHB1cmlmaWNhdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTYuMDAjVHVyYmlkaW1ldGVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xNy4wMCNVbHRyYXZpb2xldCBkaXNpbmZlY3Rpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE4LjAwI1dhdGVyIGNvbmRpdGlvbmVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xOS4wMCNXYXRlciBzb2Z0ZW5pbmcgYWNjZXNzb3JpZXMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjEuMDAjVWx0cmFmaWx0cmF0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yMi4wMCNQYWNrYWdlZCB3YXRlciB0cmVhdG1lbnQgc3lzdGVtcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yMy4wMCNDb2xsZWN0aW9uIHRhbmtzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI0LjAwI1NsdWRnZSBvciBzZXdhZ2UgY29tcG9zdGluZyBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjUuMDAjRGV3YXRlcmluZyBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjYuMDAjU2x1ZGdlIHBlbGxldGl6ZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI3LjAwI1NsdWRnZSBzaHJlZGRlcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjguMDAjV2F0ZXIgdHJlYXRtZW50IGRyeWVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yOS4wMCNJbmNpbmVyYXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzAuMDAjT2RvciBjb250cm9sIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMS4wMCNTZXB0aWMgdGFua3MjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzIuMDAjU2V0dGxpbmcgdGFua3MjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzMuMDAjTGlmdCBzdGF0aW9ucyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zNC4wMCNTZXdhZ2UgZGlzdHJpYnV0b3JzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM1LjAwI1NsdWRnZSBkaXNwb3NhbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzYuMDAjU2x1ZGdlIGNvbGxlY3RvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzcuMDAjU2x1ZGdlIGNvbmRpdGlvbmluZyBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzguMDAjU2x1ZGdlIG9yIHNld2FnZSBkaWdlc3RlcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzkuMDAjU2x1ZGdlIG9yIHNld2FnZSByZW1vdmFsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wMC4wMCNXYXRlciB0cmVhdG1lbnQgY29uc3VtYWJsZXMjNDcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDEuMDAjQWxnYWVjaWRlcyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wMi4wMCNBbnRpc2NhbGFudHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDMuMDAjRGVzY2FsZXJzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA0LjAwI0JvaWxlciBmZWVkIGNoZW1pY2FscyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wNS4wMCNCYWN0ZXJpYWwgcmVtb3ZhbCBjaGVtaWNhbHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDYuMDAjQ29ycm9zaW9uIGNvbnRyb2wgY2hlbWljYWxzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA3LjAwI09kb3IgY29udHJvbCBjaGVtaWNhbHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDguMDAjRmxvY2N1bGVudHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDkuMDAjTWljcm9iaW9jaWRlcyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4xMC4wMCNXYXRlciBzb2Z0ZW5pbmcgY29tcG91bmRzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjExLjAwI0RlbXVsc2lmaWVycyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4xMi4wMCNQb2x5ZWxlY3Ryb2x5dGVzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjExLjAwLjAwLjAwI0luZHVzdHJpYWwgbGF1bmRyeSBhbmQgZHJ5IGNsZWFuaW5nIGVxdWlwbWVudCM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNS4wMC4wMCNXYXNoaW5nIGFuZCBkcnlpbmcgZXF1aXBtZW50IzQ3LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAxLjAwI0xhdW5kcnkgdHlwZSBjb21iaW5lZCB3YXNoaW5nIG9yIGRyeWluZyBtYWNoaW5lcyM0Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNS4wMi4wMCNMYXVuZHJ5IHR5cGUgd2FzaGluZyBtYWNoaW5lcyM0Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNS4wMy4wMCNDbG90aGVzIGRyeWVycyM0Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNS4wNC4wMCNMYXVuZHJ5IHR5cGUgZHJ5aW5nIG1hY2hpbmVzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjA1LjAwI0xhdW5kcnkgZXF1aXBtZW50IHN0YW5kcyM0Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNi4wMC4wMCNJcm9uaW5nIGVxdWlwbWVudCM0Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNi4wMS4wMCNJcm9uaW5nIG1hY2hpbmVzIG9yIHByZXNzZXMjNDcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTYuMDIuMDAjRm9sZGluZyBtYWNoaW5lcyM0Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNi4wMy4wMCNTdGVhbSBwcmVzc2luZyBtYWNoaW5lcyM0Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNy4wMC4wMCNEcnkgY2xlYW5pbmcgZXF1aXBtZW50IzQ3LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjExLjE3LjAxLjAwI0RyeSBjbGVhbmluZyBtYWNoaW5lcyM0Ny4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4wMC4wMC4wMCNKYW5pdG9yaWFsIGVxdWlwbWVudCM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNS4wMC4wMCNKYW5pdG9yIGNhcnRzIGFuZCBhY2Nlc3NvcmllcyM0Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNS4wMS4wMCNKYW5pdG9yIGNhcnRzIzQ3LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE1LjAyLjAwI0phbml0b3IgY2FydCBhY2Nlc3NvcmllcyM0Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wMC4wMCNGbG9vciBtYWNoaW5lcyBhbmQgYWNjZXNzb3JpZXMjNDcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDIuMDAjVmFjdXVtIGNsZWFuZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjAzLjAwI0Zsb29yIHBvbGlzaGVycyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wNC4wMCNXZXQgb3IgZHJ5IGNvbWJpbmF0aW9uIHZhY3V1bSBjbGVhbmVycyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wNS4wMCNGbG9vciBzY3J1YmJlcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDYuMDAjQ2FycGV0IHN3ZWVwZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA3LjAwI1ZhY3V1bSBjbGVhbmVyIHN1cHBsaWVzIG9yIGFjY2Vzc29yaWVzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA4LjAwI0Zsb29yIG1hY2hpbmUgcGFkcyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wOS4wMCNDYXJwZXQgY2xlYW5pbmcgZXF1aXBtZW50IzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjEwLjAwI0Zsb29yIHdhc2hpbmcgbWFjaGluZSM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wMC4wMCNXYXN0ZSBjb250YWluZXJzIGFuZCBhY2Nlc3NvcmllcyM0Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wMS4wMCNUcmFzaCBiYWdzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjAyLjAwI1dhc3RlIGNvbnRhaW5lcnMgb3IgcmlnaWQgbGluZXJzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjAzLjAwI1Ntb2tpbmcgdXJucyBvciBhY2Nlc3NvcmllcyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wNC4wMCNXYXN0ZSBjb250YWluZXIgbGlkcyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wNS4wMCNVcm4gc2FuZCBiYWdzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA2LjAwI0FzaCB0cmF5cyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wNy4wMCNNb3Rpb24gc2lja25lc3MgYmFncyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wMC4wMCNDbGVhbmluZyBlcXVpcG1lbnQjNDcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDEuMDAjQ2xlYW5pbmcgZHVzdGVycyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wMi4wMCNMaW50IHJlbW92ZXJzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjAzLjAwI1NxdWVlZ2VzIG9yIHdhc2hlcnMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDQuMDAjQ2xlYW5pbmcgcGFpbHMgb3IgYnVja2V0cyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wNS4wMCNQcmVzc3VyZSBvciBzdGVhbSBjbGVhbmVycyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wNi4wMCNNb3Agd3JpbmdlciM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wNy4wMCNEcmFpbiBvciB0b2lsZXQgcGx1bmdlciM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wOC4wMCNEcmFpbiBvciBwaXBlIGNsZWFuaW5nIGVxdWlwbWVudCM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wOS4wMCNEZWdyZWFzaW5nIHBhbnMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMTAuMDAjQ2xlYW5pbmcgcmFnIGRpc3BlbnNlciM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4xMS4wMCNEdWN0IGNsZWFuaW5nIG1hY2hpbmVzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjAwLjAwLjAwI0NsZWFuaW5nIGFuZCBqYW5pdG9yaWFsIHN1cHBsaWVzIzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE1LjAwLjAwI0NsZWFuaW5nIHJhZ3MgYW5kIGNsb3RocyBhbmQgd2lwZXMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTUuMDEuMDAjUmFncyM0Ny4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNS4wMi4wMCNXaXBlcyM0Ny4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wMC4wMCNCcm9vbXMgYW5kIG1vcHMgYW5kIGJydXNoZXMgYW5kIGFjY2Vzc29yaWVzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjAxLjAwI0R1c3QgYnJ1c2hlcyBvciBwYW5zIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjAyLjAwI1Njb3VyaW5nIHBhZHMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDMuMDAjU3BvbmdlcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wNC4wMCNCcm9vbXMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDUuMDAjQ2xlYW5pbmcgYnJ1c2hlcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wNi4wMCNEdXN0IG1vcHMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDcuMDAjV2V0IG1vcHMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDguMDAjVG9pbGV0IGJydXNoZXMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDkuMDAjQnJvb20gb3IgbW9wIGhhbmRsZXMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMTAuMDAjRmxvb3IgZmluaXNoIGFwcGxpY2F0b3IjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMTEuMDAjVHJhc2ggcGlja2VyIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjEyLjAwI1JlcGxhY2VtZW50IHJ1YmJlcnMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMTMuMDAjTW9wIG9yIGJyb29tIGhvbGRlciM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xNC4wMCNDbGVhbmluZyBlcXVpcG1lbnQgY2xhbXBzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjAwLjAwI1Jlc3Ryb29tIHN1cHBsaWVzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjAxLjAwI1BhcGVyIHRvd2VsIGRpc3BlbnNlcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDIuMDAjU2FuaXRhcnkgZ29vZHMgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wMy4wMCNTYW5pdGFyeSB3YXN0ZSByZWNlcHRhY2xlcyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wNC4wMCNJbnN0aXR1dGlvbmFsIHNvYXAgb3IgbG90aW9uIGRpc3BlbnNlcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDUuMDAjVXJpbmFsIG9yIHRvaWxldCBhY2Nlc3NvcmllcyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wNi4wMCNBaXIgZnJlc2hlbmVyIGRpc3BlbnNlcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDcuMDAjSW5zdGl0dXRpb25hbCBoYW5kIGRyeWVycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wOC4wMCNCYXRocm9vbSB0aXNzdWUgZGlzcGVuc2VyIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA5LjAwI0ZhY2lhbCB0aXNzdWUgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4xMC4wMCNUb2lsZXQgdGlzc3VlIGRpc3BlbnNlcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMTEuMDAjQ2xlYW5lciBkaXNwZW5zZXIjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDAuMDAjQ2xlYW5pbmcgYW5kIGRpc2luZmVjdGluZyBzb2x1dGlvbnMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDEuMDAjRmxvb3IgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDIuMDAjRmxvb3Igd2F4ZXMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDMuMDAjSG91c2Vob2xkIGRpc2luZmVjdGFudHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDQuMDAjQW1tb25pYXMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDUuMDAjR2VuZXJhbCBwdXJwb3NlIGNsZWFuZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjA2LjAwI0Z1cm5pdHVyZSBwb2xpc2ggb3Igd2F4ZXMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDcuMDAjQmxlYWNoZXMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDguMDAjRHJ5IGdlcm1pY2lkYWwjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDkuMDAjU2hvZSBjbGVhbmluZyBvciBwb2xpc2hpbmcgcHJvZHVjdHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTAuMDAjRGlzaHdhc2hpbmcgcHJvZHVjdHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTEuMDAjTGF1bmRyeSBwcm9kdWN0cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xMi4wMCNBaXIgZnJlc2hlbmVyIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjEzLjAwI1NjcmVlbiBjbGVhbmVyIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE0LjAwI01ldGFsIGNsZWFuZXJzIG9yIHBvbGlzaGVzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE1LjAwI0RyYWluIGNsZWFuZXIjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTYuMDAjRGVvZG9yaXplcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTcuMDAjSG91c2Vob2xkIG9yIGF1dG9tb3RpdmUgcHJvdGVjdGFudHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTguMDAjQWlyIHNhbml0aXplciM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xOS4wMCNDYXVzdGljIGNsZWFuZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjIwLjAwI1BldHJvbGV1bSBkZXJpdmF0aXZlIGNsZWFuZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjIxLjAwI0RlZ3JlYXNpbmcgY29tcG91bmRzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjIyLjAwI0NhcmJvbiByZW1vdmluZyBjb21wb3VuZHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjMuMDAjRGVpY2VycyBhbmQgZGVmcm9zdGVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yNC4wMCNHbGFzcyBvciB3aW5kb3cgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjUuMDAjQ29udGFjdCBzdXJmYWNlIGNsZWFuZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjAwLjAwI0Fic29yYmVudHMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDEuMDAjTWF0cyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wMi4wMCNHcmFudWxhciBhYnNvcmJlbnQjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDMuMDAjUGx1Z2dpbmcgY29tcG91bmQjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDQuMDAjQWJzb3JiZW50IHNvY2tzIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjA1LjAwI1NwaWxsIGtpdHMjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDYuMDAjUGFucyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wNy4wMCNBYnNvcmJlbnQgYm9vbXMjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDguMDAjQWJzb3JiZW50IHBpbGxvd3MjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMjAuMDAuMDAjTWF0cyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4yMS4wMC4wMCNDbGVhbmluZyBraXRzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjIxLjAxLjAwI0luZHVzdHJpYWwgY2xlYW5pbmcga2l0cyM0Ny4xMy4yMS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4yMS4wMi4wMCNHZW5lcmFsIHB1cnBvc2UgY2xlYW5pbmcga2l0cyM0Ny4xMy4yMS4wMC4wMAotdW5zcHNjNyM0OC4wMC4wMC4wMC4wMCNTZXJ2aWNlIEluZHVzdHJ5IE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IGFuZCBTdXBwbGllcyM0OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4wMC4wMC4wMCNJbnN0aXR1dGlvbmFsIGZvb2Qgc2VydmljZXMgZXF1aXBtZW50IzQ4LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjAwLjAwI0Nvb2tpbmcgYW5kIHdhcm1pbmcgZXF1aXBtZW50IzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjAxLjAwI0NvbW1lcmNpYWwgdXNlIGJhaW4gbWFyaWVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjAyLjAwI0NvbW1lcmNpYWwgdXNlIGJhcmJlcXVlIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjAzLjAwI0NvbW1lcmNpYWwgdXNlIGJyb2lsZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA0LjAwI0NvbW1lcmNpYWwgdXNlIGNoYXJjb2FsIGdyaWxscyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wNS4wMCNDb21tZXJjaWFsIHVzZSBjb2ZmZWUgb3IgaWNlZCB0ZWEgbWFrZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA2LjAwI0NvbW1lcmNpYWwgdXNlIGNvZmZlZSB3YXJtZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA3LjAwI0NvbW1lcmNpYWwgdXNlIGNvbnZlY3Rpb24gb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDguMDAjQ29tbWVyY2lhbCB1c2UgY29udmV5ZXIgdG9hc3RlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDkuMDAjQ29tbWVyY2lhbCB1c2UgZGVlcCBmcnllcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTAuMDAjQ29tbWVyY2lhbCB1c2UgZm9vZCB3YXJtZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjExLjAwI0NvbW1lcmNpYWwgdXNlIGdyaWRkbGVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjEyLjAwI0NvbW1lcmNpYWwgdXNlIGdyaWxscyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xMy4wMCNDb21tZXJjaWFsIHVzZSBoZWF0IGxhbXBzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjE0LjAwI0NvbW1lcmNpYWwgdXNlIGhpZ2ggcHJlc3N1cmUgc3RlYW1lcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTUuMDAjQ29tbWVyY2lhbCB1c2UgaG90IGRvZyBncmlsbHMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTYuMDAjQ29tbWVyY2lhbCB1c2UgbWljcm93YXZlIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjE3LjAwI0NvbW1lcmNpYWwgdXNlIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjE4LjAwI0NvbW1lcmNpYWwgdXNlIHBhc3RhIGNvb2tlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTkuMDAjQ29tbWVyY2lhbCB1c2UgcGl6emEgb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjAuMDAjQ29tbWVyY2lhbCB1c2UgcG9wY29ybiBtYWNoaW5lcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMS4wMCNDb21tZXJjaWFsIHVzZSByYW5nZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjIuMDAjQ29tbWVyY2lhbCB1c2Ugcm90aXNzZXJpZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjMuMDAjQ29tbWVyY2lhbCB1c2Ugc21va2VycyBvciBzbW9rZSBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yNC4wMCNDb21tZXJjaWFsIHVzZSBzdGVhbWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yNS4wMCNDb21tZXJjaWFsIHVzZSB0b2FzdGVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yNi4wMCNDb21tZXJjaWFsIHVzZSB3YWZmbGUgaXJvbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjcuMDAjQmFyYmVjdWVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI4LjAwI0NvbW1lcmNpYWwgdXNlIGNyZXBlIG1hY2hpbmVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI5LjAwI1ByZXNzdXJlIGNvb2tlcnMgb3IgcHJlc3N1cmUgZnJ5ZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjMwLjAwI0NvbW1lcmNpYWwgdXNlIHJpY2UgY29va2VycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4zMS4wMCNDb21tZXJjaWFsIHNhbG1vbiBwb2FjaGVycyBvciBrZXR0bGVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjAwLjAwI0Zvb2QgcHJlcGFyYXRpb24gZXF1aXBtZW50IzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjAxLjAwI0NvbW1lcmNpYWwgdXNlIGJsZW5kZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjAyLjAwI0NvbW1lcmNpYWwgdXNlIGVsZWN0cmljIGNhbiBvcGVuZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjAzLjAwI0NvbW1lcmNpYWwgdXNlIGZvb2QgY2hvcHBlcnMgb3IgY3ViZXJzIG9yIGRpY2VycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wNC4wMCNDb21tZXJjaWFsIHVzZSBjb2ZmZWUgZ3JpbmRlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDUuMDAjQ29tbWVyY2lhbCB1c2UgZm9vZCBncmluZGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wNi4wMCNDb21tZXJjaWFsIHVzZSBncmF0ZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA3LjAwI0NvbW1lcmNpYWwgdXNlIGp1aWNlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDguMDAjQ29tbWVyY2lhbCB1c2UgbWl4ZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA5LjAwI0NvbW1lcmNpYWwgdXNlIHBhc3RhIG1hY2hpbmVzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjEwLjAwI0NvbW1lcmNpYWwgdXNlIHBlZWxlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTEuMDAjQ29tbWVyY2lhbCB1c2Ugc2NhbGVzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjEyLjAwI0NvbW1lcmNpYWwgdXNlIGZvb2QgcHJvY2Vzc29ycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xMy4wMCNDb21tZXJjaWFsIHVzZSBkb3VnaCBtYWNoaW5lcyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xNC4wMCNDb21tZXJjaWFsIHVzZSBpY2luZyBzZXRzIG9yIGJhZ3MjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTUuMDAjQ29tbWVyY2lhbCB1c2UgZGlzaHdhc2hlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTYuMDAjQ29tbWVyY2lhbCB1c2UgYnJlYWQgc2xpY2VycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xNy4wMCNDb21tZXJjaWFsIHVzZSBwbGFzdGljIHNob3ZlbHMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDAuMDAjRm9vZCBhbmQgYmV2ZXJhZ2UgZGlzcGVuc2luZyBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDEuMDAjQ2FyYm9uYXRlZCBiZXZlcmFnZSBkaXNwZW5zZXIjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDIuMDAjTm9uIGNhcmJvbmF0ZWQgYmV2ZXJhZ2UgZGlzcGVuc2VyIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjAzLjAwI01pbGsgZGlzcGVuc2VycyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wNC4wMCNTeXJ1cCBwdW1wcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wNS4wMCNDYXBwdWNjaW5vIG9yIGVzcHJlc3NvIG1hY2hpbmVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA2LjAwI01pbGtzaGFrZSBtYWNoaW5lcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wNy4wMCNTb2Z0IHNlcnZlIG1hY2hpbmVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA4LjAwI1NsdXNoIG1hY2hpbmVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA5LjAwI0ljZSBkaXNwZW5zZXJzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjEwLjAwI0RyaW5raW5nIGZvdW50YWlucyBvciBidWJibGVycyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4xMS4wMCNCb3R0bGVkIHdhdGVyIGRpc3BlbnNlcnMgb3IgYWNjZXNzb3JpZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTIuMDAjQ3VwIGRpc3BlbnNlciM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4xMy4wMCNDb2NrdGFpbCBzaGFrZXJzIG9yIGFjY2Vzc29yaWVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjE0LjAwI0hvdCB3YXRlciBkaXNwZW5zZXIjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDAuMDAjQ29va3dhcmUgYW5kIGtpdGNoZW4gdG9vbHMjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDEuMDAjQ29tbWVyY2lhbCB1c2UgY3V0bGVyeSM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wMi4wMCNDb21tZXJjaWFsIHVzZSBtb2xkcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wMy4wMCNDb21tZXJjaWFsIHVzZSBzY29vcHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDQuMDAjQ29tbWVyY2lhbCB1c2UgbWVhc3VyaW5nIGN1cHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDUuMDAjQ29tbWVyY2lhbCB1c2UgbWl4aW5nIGJvd2xzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA2LjAwI0NvbW1lcmNpYWwgdXNlIGNha2Ugb3IgcGllIHBhbnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDcuMDAjQ29tbWVyY2lhbCB1c2UgcGl6emEgcGFucyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wOC4wMCNDb21tZXJjaWFsIHVzZSBzYXVjZSBvciBzYXV0ZSBwYW5zIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA5LjAwI0NvbW1lcmNpYWwgdXNlIHN0b2NrIG9yIHNhdWNlIHBvdHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTAuMDAjQ29tbWVyY2lhbCB1c2UgcG90IG9yIHBhbiBjb3ZlcnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTEuMDAjQ29tbWVyY2lhbCB1c2Ugcm9sbGluZyBwaW5zIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjEyLjAwI0NvbW1lcmNpYWwgdXNlIHN0cmFpbmVycyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xMy4wMCNDb21tZXJjaWFsIHVzZSB3aGlza3MjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTQuMDAjQ29tbWVyY2lhbCB1c2Ugd29rcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xNS4wMCNDb21tZXJjaWFsIHVzZSBsYWRsZXMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTYuMDAjQ29tbWVyY2lhbCB1c2UgY3V0bGVyeSBwb3VjaCM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xNy4wMCNDYWtlIGRlY29yYXRpbmcgZXF1aXBtZW50IG9yIG1vdWxkcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wMC4wMCNUYWJsZXRvcCBhbmQgc2VydmluZyBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDEuMDAjRm9vZCBzZXJ2aWNlIGRpbm5lcndhcmUjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDIuMDAjRm9vZCBzZXJ2aWNlIGZsYXR3YXJlIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjAzLjAwI0Zvb2Qgc2VydmljZSBnbGFzc2VzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA0LjAwI0Zvb2Qgc2VydmljZSBzdGVtd2FyZSM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wNS4wMCNGb29kIHNlcnZpY2UgY3VwcyBvciBtdWdzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA2LjAwI0Zvb2Qgc2VydmljZSBzZXJ2aW5nIGJhc2tldHMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDcuMDAjRm9vZCBzZXJ2aWNlIHBpdGNoZXJzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA4LjAwI0Zvb2Qgc2VydmljZSBjaGFmZXJzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA5LjAwI0Zvb2Qgc2VydmljZSBjb2ZmZWUgb3IgdGVhIHBvdHMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTAuMDAjRm9vZCBzZXJ2aWNlIHNvdXAgY3JvY2tzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjExLjAwI0Zvb2Qgc2VydmljZSBpY2UgYnVja2V0cyBvciB3aW5lIGNvb2xlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTIuMDAjRm9vZCBzZXJ2aWNlIGNvbmRpbWVudCBkaXNwZW5zZXJzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjEzLjAwI0Zvb2Qgc2VydmljZSBwdW5jaCBib3dscyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xNC4wMCNGb29kIHNlcnZpY2Ugd2luZSBjYXJhZmVzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjE1LjAwI0Zvb2Qgc2VydmljZSB0cmF5cyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xNi4wMCNGb29kIHNlcnZpY2UgbmFwa2luIGRpc3BlbnNlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTcuMDAjRm9vZCBzZXJ2aWNlIGZvbmR1ZSBwb3RzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjAwLjAwI1Jlc3RhdXJhbnQgZnVybml0dXJlIzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjAxLjAwI1Jlc3RhdXJhbnQgY2hhaXJzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjAyLjAwI0Jvb3RocyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wMy4wMCNTYWxhZCBiYXJzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjA0LjAwI1RhYmxldG9wcyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wNS4wMCNSZXN0YXVyYW50IG9yIGJhciBzdG9vbHMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDYuMDAjUGVybWFuZW50IGJhcnMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDcuMDAjUG9ydGFibGUgYmFycyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wMC4wMCNTdG9yYWdlIGFuZCBoYW5kbGluZyBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDEuMDAjRGlzcGxheSBjYXNlcyM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wMi4wMCNIZWF0ZWQgZGlzcGxheSBjYXNlcyM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wMy4wMCNSZWZyaWdlcmF0ZWQgZGlzcGxheSBjYXNlcyM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wNC4wMCNJY2UgY3JlYW0gZGlzcGxheSBjYXNlcyM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wNS4wMCNHbGFzcyBjaGlsbGluZyBlcXVpcG1lbnQjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDYuMDAjQ29vbCBjb250YWluZXJzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjExLjAwLjAwLjAwI1ZlbmRpbmcgbWFjaGluZXMjNDguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTAuMDAuMDAjTGlxdWlkIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTAuMDEuMDAjTWFjaGluZXMgZGlzcGVuc2luZyBzaW5nbGUgc2VydmluZ3Mgd2l0aCBjdXBzIzQ4LjExLjEwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEwLjAyLjAwI01hY2hpbmVzIGRpc3BlbnNpbmcgYnVsayBxdWFudGl0aWVzIzQ4LjExLjEwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjAwLjAwI1BpZWNlIGFuZCBwYXJ0IHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDEuMDAjQm90dGxlIG9yIGNhbiB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjAyLjAwI0d1bWJhbGwgY2FuZHkgb3IgY2hpbGRyZW5zIG5vdmVsdGllcyBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wMy4wMCNTbmFjayBvciBzbWFsbCBwYWNrYWdlIGdvb2RzIGRpc3BsYXkgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDQuMDAjQSBsYSBjYXJ0ZSBmb29kcyB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjA1LjAwI0Zyb3plbiBjb25mZWN0aW9ucyBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wNi4wMCNQZXJzb25hbCBhY2NvbW1vZGF0aW9uIGl0ZW0gZGlzcGVuc2VycyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wNy4wMCNDaWdhcmV0dGUgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTIuMDAuMDAjUHJlcGFyZWQgdG8gb3JkZXIgZm9vZCB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEyLjAxLjAwI0ZyZW5jaCBmcnkgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4xMi4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMi4wMi4wMCNQb3Bjb3JuIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTIuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTMuMDAuMDAjU2VydmljZSBhbmQgdGlja2V0IHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTMuMDEuMDAjVGlja2V0IGRpc3BlbnNpbmcgbWFjaGluZXMjNDguMTEuMTMuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTMuMDIuMDAjSW5zdXJhbmNlIHBvbGljeSB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjEzLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEzLjAzLjAwI1N0YW1wIG1hY2hpbmVzIzQ4LjExLjEzLjAwLjAwCi11bnNwc2M3IzQ4LjExLjE0LjAwLjAwI0N1cnJlbmN5IHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDEuMDAjQXV0b21hdGljIHRlbGxlciBtYWNoaW5lcyAoQVRNcykjNDguMTEuMTQuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDIuMDAjQmlsbCB0byBjb2luIGNoYW5nZXJzIzQ4LjExLjE0LjAwLjAwCi11bnNwc2M3IzQ4LjExLjE0LjAzLjAwI0ZvcmVpZ24gY3VycmVuY3kgZXhjaGFuZ2UgbWFjaGluZXMjNDguMTEuMTQuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDQuMDAjRWxlY3Ryb25pYyBmdW5kcyB0cmFuc2ZlciBwb2ludCBvZiBzYWxlIGVxdWlwbWVudCM0OC4xMS4xNC4wMC4wMAotdW5zcHNjNyM0OC4xMi4wMC4wMC4wMCNHYW1ibGluZyBvciB3YWdlcmluZyBlcXVpcG1lbnQjNDguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTEuMDAuMDAjQ29pbiBvcGVyYXRlZCBnYW1ibGluZyBtYWNoaW5lcyM0OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMS4wMS4wMCNQb2tlciBvciBzbG90IG1hY2hpbmVzIzQ4LjEyLjExLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEyLjAwLjAwI0dhbWJsaW5nIHRhYmxlcyBhbmQgZ2FtZXMjNDguMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTIuMDEuMDAjUm91bGV0dGUgd2hlZWxzIzQ4LjEyLjEyLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEyLjAyLjAwI0NhcmQgdGFibGVzIzQ4LjEyLjEyLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEzLjAwLjAwI0dhbWJsaW5nIG1hbmFnZW1lbnQgYW5kIG5ldHdvcmtlZCB3YWdlcmluZyBzeXN0ZW1zIzQ4LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEzLjAxLjAwI1RhYmxlIGdhbWJsaW5nIG1hbmFnZW1lbnQgc3lzdGVtcyM0OC4xMi4xMy4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMy4wMi4wMCNOZXR3b3JrZWQgd2FnZXJpbmcgZ2FtZXMjNDguMTIuMTMuMDAuMDAKLXVuc3BzYzcjNDkuMDAuMDAuMDAuMDAjU3BvcnRzIGFuZCBSZWNyZWF0aW9uYWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBhbmQgQWNjZXNzb3JpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMDAuMDAuMDAjQ29sbGVjdGlibGVzIGFuZCBhd2FyZHMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDAuMDAjQXJ0IzQ5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjAxLjAwI1BhaW50aW5ncyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wMi4wMCNTY3VscHR1cmVzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjAzLjAwI1N0YXR1YXJ5IzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA0LjAwI1BvcnRyYWl0cyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wNS4wMCNEcmF3aW5ncyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wNi4wMCNQaWN0dXJlcyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wNy4wMCNMaXRob2dyYXBocyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wOC4wMCNQb3N0ZXJzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA5LjAwI0RlY29yYXRpdmUgcG90IzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjEwLjAwI1Njcm9sbHMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMTEuMDAjUGhvdG9ncmFwaHMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMTIuMDAjRmxvd2VyIHZhc2VzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjAwLjAwI0NvbGxlY3RpYmxlcyM0OS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wMS4wMCNBbnRpcXVlcyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wMi4wMCNTb3V2ZW5pcnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDMuMDAjTWludCBjb2luIGNvbGxlY3Rpb25zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA0LjAwI1N0YW1wIGNvbGxlY3Rpb25zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA1LjAwI0FudGlxdWUgcnVncyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wNi4wMCNEaWdnaW5ncyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wNy4wMCNDb21pYyBib29rIGNvbGxlY3Rpb25zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA4LjAwI0FudGlxdWUgbXVzaWNhbCBpbnN0cnVtZW50cyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wOS4wMCNPcm5hbWVudHMgb3IgZGVjb3JhdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMTAuMDAjS2V5IGNoYWlucyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4xMS4wMCNDaGFybXMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMTIuMDAjSG9sb2dyYW1zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjEzLjAwI0dsYXNzIGNyeXN0YWxzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjAwLjAwI0F3YXJkcyM0OS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wMS4wMCNNZWRhbHMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDIuMDAjVHJvcGhpZXMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDMuMDAjTWVkYWxsaW9ucyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wNC4wMCNQbGFxdWVzIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA1LjAwI0NlcnRpZmljYXRlcyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wNi4wMCNQaG90byBhd2FyZCM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wNy4wMCNBY2hpZXZlbWVudCBjZXJ0aWZpY2F0ZSM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wOC4wMCNDcm93bnMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMDAuMDAuMDAjTXVzaWNhbCBpbnN0cnVtZW50cyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNS4wMC4wMCNLZXlib2FyZCBpbnN0cnVtZW50cyM0OS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNS4wMS4wMCNNdXNpY2FsIG9yZ2FucyM0OS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNS4wMi4wMCNBY2NvcmRpb25zIzQ5LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAzLjAwI1BpYW5vcyM0OS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wMC4wMCNCcmFzcyBpbnN0cnVtZW50cyM0OS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wMS4wMCNUcnVtcGV0cyM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wMi4wMCNUcm9tYm9uZXMjNDkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTYuMDMuMDAjU291c2FwaG9uZXMjNDkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTYuMDQuMDAjU2F4b3Bob25lcyM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wNS4wMCNXaGlzdGxlIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjAwLjAwI1dvb2R3aW5kIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjAxLjAwI0NsYXJpbmV0cyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wMi4wMCNPYm9lcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wMy4wMCNNdXNpY2FsIGZsdXRlcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wNC4wMCNQaWNjb2xvZXMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDUuMDAjTXVzaWNhbCBjb3JuZXRzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjA2LjAwI0JhZ3BpcGVzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjA3LjAwI0hhcm1vbmljYXMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDguMDAjS2F6b29zIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjAwLjAwI1N0cmluZyBpbnN0cnVtZW50cyM0OS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wMS4wMCNIYXJwc2ljaG9yZHMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDIuMDAjQ2xhdmljaG9yZHMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDMuMDAjR3VpdGFycyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wNC4wMCNWaW9saW5zIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjA1LjAwI0hhcnBzIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjA2LjAwI0JhbmpvZXMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDAuMDAjUGVyY3Vzc2lvbiBpbnN0cnVtZW50cyM0OS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wMS4wMCNDeW1iYWxzIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjAyLjAwI0JlbGxzIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjAzLjAwI1RhbWJvdXJpbmVzIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjA0LjAwI0Nhc3RhbmV0cyM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wNS4wMCNEcnVtcyM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wNi4wMCNYeWxvcGhvbmVzIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjA3LjAwI0JvZGhyYW4jNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDAuMDAjTXVzaWNhbCBpbnN0cnVtZW50IHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM0OS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wMS4wMCNNZXRyb25vbWVzIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjAyLjAwI1JlZWRzIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjAzLjAwI0luc3RydW1lbnQgc3RyaW5ncyBvciBwaWNrcyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wNC4wMCNUdW5pbmcgcGlucyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wNS4wMCNNdXNpY2FsIGluc3RydW1lbnQgc3RhbmRzIG9yIHNoZWV0IGhvbGRlcnMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDYuMDAjQWNjZXNzb3JpZXMgZm9yIHN0cmluZ2VkIGluc3RydW1lbnRzIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA3LjAwI1BlcmN1c3Npb24gaW5zdHJ1bWVudCBhY2Nlc3NvcnkjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDguMDAjTXVzaWMgYm94ZXMgb3IgbWVjaGFuaXNtcyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMi4wMC4wMC4wMCNDYW1waW5nIGFuZCBvdXRkb29yIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDAuMDAjQ2FtcGluZyBhbmQgb3V0ZG9vciBlcXVpcG1lbnQjNDkuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDEuMDAjVGFycGF1bGlucyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wMi4wMCNTbGVlcGluZyBwYWRzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjAzLjAwI1RlbnRzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA0LjAwI1NsZWVwaW5nIGJhZ3MjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDUuMDAjSWNlIGNoZXN0cyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wNi4wMCNUZW50IHJlcGFpciBraXRzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA3LjAwI1BuZXVtYXRpYyBtYXR0cmVzc2VzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA4LjAwI01vc3F1aXRvIG5ldHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDkuMDAjQ2FtcGluZyBvciBvdXRkb29yIHN0b3ZlcyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4xMC4wMCNEcmluayBjb29sZXJzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE2LjAwLjAwI0NhbXBpbmcgZnVybml0dXJlIzQ5LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE2LjAxLjAwI0NhbXBpbmcgY2hhaXJzIG9yIHN0b29scyM0OS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNi4wMi4wMCNDYW1waW5nIHRhYmxlcyM0OS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNi4wMy4wMCNDYW1waW5nIGNvdHMjNDkuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMDAuMDAuMDAjRmlzaGluZyBhbmQgaHVudGluZyBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDAuMDAjRmlzaGluZyB0YWNrbGUjNDkuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDEuMDAjRmlzaGluZyByb2RzIzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjAyLjAwI0Zpc2hpbmcgbGluZSM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wMy4wMCNGaXNoaW5nIHJlZWxzIzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjA0LjAwI0Zpc2hpbmcgbHVyZXMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDUuMDAjRmlzaGluZyBiYWl0IzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjA2LjAwI0Zpc2hpbmcgd2VpZ2h0cyBvciBzaW5rZXJzIzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjAwLjAwI0h1bnRpbmcgcHJvZHVjdHMjNDkuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDEuMDAjQW5pbWFsIGNhbGxzIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjAyLjAwI1Nwb3J0aW5nIGRlY295cyM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wMy4wMCNTcG9ydGluZyB0cmFwcyM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wNC4wMCNTcG9ydGluZyBzaG90Z3VucyM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wNS4wMCNTcG9ydGluZyByaWZsZXMjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDYuMDAjU3BvcnRpbmcgYW1tdW5pdGlvbiM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wNy4wMCNHdW4gYmFycmVsIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjAwLjAwLjAwI1dhdGVyc3BvcnRzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wMC4wMCNTY3ViYSBhbmQgc25vcmtlbGluZyBnZWFyIzQ5LjE0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAxLjAwI0JvdXlhbmN5IGNvbXBlbnNhdG9ycyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wMi4wMCNTY3ViYSB0YW5rcyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wMy4wMCNTY3ViYSByZWd1bGF0b3JzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjA0LjAwI0RpdmluZyBpbnN0cnVtZW50cyBvciBhY2Nlc3NvcmllcyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wNS4wMCNNYXNrcyBvciBmaW5zIG9yIHNub3JrZWxzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjA2LjAwI1dldHN1aXRzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjA3LjAwI0RyeXN1aXRzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjAwLjAwI1N1cmYgYW5kIHN3aW0gZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0OS4xNC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wMi4wMCNXYWtlYm9hcmRzIG9yIGtuZWVib2FyZHMgb3IgYm9vZ2llYm9hcmRzIzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjAzLjAwI1dhdGVyIHNraXMgb3IgYWNjZXNzb3JpZXMjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDQuMDAjV2luZHN1cmZpbmcgZXF1aXBtZW50IzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjA1LjAwI1N1cmZib2FyZHMjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDYuMDAjU3dpbSBnb2dnbGVzIG9yIHN3aW0gZmlucyM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wNy4wMCNQYXJhc2FpbGluZyBlcXVpcG1lbnQjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMDAuMDAuMDAjV2ludGVyIHNwb3J0cyBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDAuMDAjU2tpaW5nIGFuZCBzbm93Ym9hcmRpbmcgZXF1aXBtZW50IzQ5LjE1LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjAxLjAwI1NraSBib290cyM0OS4xNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wMi4wMCNTa2lzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjAzLjAwI1NraSBwb2xlcyM0OS4xNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wNC4wMCNCaW5kaW5ncyM0OS4xNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wNS4wMCNTbm93Ym9hcmRzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE2LjAwLjAwI1NrYXRpbmcgYW5kIGljZSBob2NrZXkgZXF1aXBtZW50IzQ5LjE1LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE2LjAxLjAwI0hvY2tleSBwdWNrcyM0OS4xNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNi4wMi4wMCNJY2Ugc2thdGVzIzQ5LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE2LjAzLjAwI0hvY2tleSBzdGlja3MjNDkuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMDAuMDAuMDAjRmllbGQgYW5kIGNvdXJ0IHNwb3J0cyBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDAuMDAjRmllbGQgc3BvcnRzIGVxdWlwbWVudCM0OS4xNi4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wMS4wMCNGb290YmFsbCBibG9ja2luZyBzbGVkcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wMi4wMCNCYXNlYmFsbCBnbG92ZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDMuMDAjQmFzZWJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA0LjAwI0Zvb3RiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wNS4wMCNTb2NjZXIgYmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDYuMDAjQmFzZWJhbGwgYmF0cyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wNy4wMCNCYXNlYmFsbCBiYXNlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wOC4wMCNQaXRjaGluZyBtYWNoaW5lcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wOS4wMCNTb2Z0YmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTAuMDAjRm9vdGJhbGwgdGFja2xpbmcgZHVtbWllcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMS4wMCNMYWNyb3NzZSBzdGlja3MjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTIuMDAjTGFjcm9zc2UgYmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTMuMDAjRmllbGQgaG9ja2V5IHN0aWNrcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xNC4wMCNGaWVsZCBob2NrZXkgYmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTUuMDAjVGVhbSBoYW5kYmFsbCBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xNi4wMCNUZWFtIGhhbmRiYWxsIHNjaG9vbCBzZXRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE3LjAwI0Jhc2ViYWxsIG9yIHNvZnRiYWxsIHByb3RlY3RpdmUgZ2VhciM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xOC4wMCNCYXNlYmFsbCBiYXR0aW5nIGFpZHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTkuMDAjQmFzZWJhbGwgYmFja3N0b3BzIG9yIGZlbmNlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yMC4wMCNTb2Z0YmFsbCBiYXRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjIxLjAwI1NvZnRiYWxsIGdsb3ZlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yMi4wMCNGb290YmFsbCBraWNraW5nIHRlZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjMuMDAjRmxhZyBmb290YmFsbCBnZWFyIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjI0LjAwI1NvY2NlciBmaWVsZCBtYXJraW5nIGVxdWlwbWVudCM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yNS4wMCNTb2NjZXIgcHJvdGVjdGl2ZSBlcXVpcG1lbnQjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjYuMDAjU29jY2VyIHRyYWluaW5nIGFpZHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDAuMDAjUmFjcXVldCBhbmQgY291cnQgc3BvcnRzIGVxdWlwbWVudCM0OS4xNi4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wMS4wMCNSYWNxdWV0YmFsbCByYWNrZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjAyLjAwI0JhZG1pbnRvbiByYWNrZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjAzLjAwI0Jhc2tldGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA0LjAwI1Rlbm5pcyBiYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wNS4wMCNSYWNxdWV0IGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA2LjAwI1NxdWFzaCBiYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wNy4wMCNUZW5uaXMgcmFjcXVldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDguMDAjVm9sbGV5YmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDkuMDAjQmFkbWludG9uIGJpcmRpZXMgb3Igc2h1dHRsZWNvY2tzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjEwLjAwI1NxdWFzaCByYWNxdWV0cyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xMS4wMCNUZW5uaXMgdHJhaW5pbmcgYWlkcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xMi4wMCNUZW5uaXMgY291cnQgZXF1aXBtZW50IzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjEzLjAwI1ZvbGxleWJhbGwgc3RvcmFnZSBmb3IgYmFsbHMgb3IgbmV0cyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xNC4wMCNWb2xsZXliYWxsIGd5bW5hc2l1bSBzdGFuZGFyZHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTUuMDAjQmFza2V0YmFsbCBjb21wbGV0ZSBnYW1lIHN5c3RlbXMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTYuMDAjRmxvb3IgaG9ja2V5IHByb3RlY3RpdmUgZXF1aXBtZW50IzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE3LjAwI1RldGhlciBwb2xlcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xOC4wMCNUZXRoZXIgYmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDAuMDAjVHJhY2sgc3BvcnRzIGVxdWlwbWVudCM0OS4xNi4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wMS4wMCNKYXZlbGlucyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wMi4wMCNKdW1waW5nIGJhcnMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDMuMDAjRGlzY3VzIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjA0LjAwI1Nob3RwdXRzIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjA1LjAwI1ZhdWx0aW5nIHBvbGVzIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjA2LjAwI0h1cmRsZXMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDcuMDAjQmF0b25zIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjAwLjAwLjAwI0d5bW5hc3RpY3MgYW5kIGJveGluZyBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDAuMDAjR3ltbmFzdGljcyBlcXVpcG1lbnQjNDkuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDEuMDAjR3ltbmFzdGljIGJhcnMgb3IgYmVhbXMjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDIuMDAjR3ltbmFzdGljIHJvcGVzIG9yIHJpbmdzIG9yIGNsaW1iaW5nIGFjY2Vzc29yaWVzIzQ5LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE1LjAzLjAwI0d5bW5hc3RpYyB2YXVsdGluZyBlcXVpcG1lbnQjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDQuMDAjR3ltbmFzdGljIHRyYW1wb2xpbmVzIzQ5LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE1LjA1LjAwI0JhbGFuY2UgZXF1aXBtZW50IzQ5LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE2LjAwLjAwI0JveGluZyBlcXVpcG1lbnQjNDkuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTYuMDEuMDAjQm94aW5nIHJpbmdzIzQ5LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE2LjAyLjAwI1B1bmNoaW5nIGJhZ3MjNDkuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTYuMDMuMDAjQm94aW5nIGdsb3ZlcyM0OS4xNy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4wMC4wMC4wMCNUYXJnZXQgYW5kIHRhYmxlIGdhbWVzIGFuZCBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDAuMDAjVGFibGUgZ2FtZXMgYW5kIGVxdWlwbWVudCM0OS4xOC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wMS4wMCNCaWxsaWFyZCB0YWJsZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDIuMDAjUG9vbCBjdWVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjAzLjAwI1NodWZmbGVib2FyZCM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wNC4wMCNQaW5iYWxsIGdhbWVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA1LjAwI0JpbGxpYXJkIGJhbGxzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA2LjAwI0FpciBob2NrZXkgdGFibGVzIG9yIGFjY2Vzc29yaWVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA3LjAwI1Rlbm5pcyB0YWJsZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDguMDAjVGFibGUgdGVubmlzIHBhZGRsZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDkuMDAjVGFibGUgdGVubmlzIGJhbGxzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjEwLjAwI0Zvb3NiYWxsIHRhYmxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xMS4wMCNGb29zYmFsbHMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTIuMDAjRm9vc2JhbGwgcmVwbGFjZW1lbnQgcGxheWVycyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xMy4wMCNCaWxsaWFyZCBjdWUgdGlwcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xNC4wMCNCaWxsaWFyZCBjaGFsayM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xNS4wMCNCaWxsaWFyZCByYWNrcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wMC4wMCNUYXJnZXQgZ2FtZXMgYW5kIGVxdWlwbWVudCM0OS4xOC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wMS4wMCNBcmNoZXJ5IHRhcmdldHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDIuMDAjQXJjaGVyeSBib3dzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjAzLjAwI0FyY2hlcnkgYXJyb3dzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA0LjAwI0RhcnRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA1LjAwI0RhcnQgYm9hcmRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA2LjAwI1RyYXBzaG9vdGluZyBlcXVpcG1lbnQjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDcuMDAjVGhyb3dpbmcgdGFyZ2V0cyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wOC4wMCNBcmNoZXJ5IGJvdyBzdHJpbmdzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA5LjAwI0FyY2hlcnkgZ2xvdmVzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjEwLjAwI0FyY2hlcnkgYXJtIGd1YXJkcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4xMS4wMCNBcmNoZXJ5IHRhcmdldCBzdGFuZHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMTIuMDAjQXJjaGVyeSBiYWNrc3RvcHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMDAuMDAuMDAjRml0bmVzcyBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMDAuMDAjQWVyb2JpYyB0cmFpbmluZyBlcXVpcG1lbnQjNDkuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMDEuMDAjVHJlYWRtaWxscyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wMi4wMCNTdGFpciBjbGltYmVycyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wMy4wMCNTdGF0aW9uYXJ5IGJpY3ljbGVzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjA0LjAwI1Jvd2luZyBtYWNoaW5lcyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4xMi4wMCNKdW1wIHJvcGVzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjEzLjAwI0V4ZXJjaXNlIHRyYW1wb2xpbmVzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjE0LjAwI0V4ZXJjaXNlIGJhbGxzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjE1LjAwI1N0ZXAgYWVyb2JpYyBlcXVpcG1lbnQjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDAuMDAjV2VpZ2h0IGFuZCByZXNpc3RhbmNlIHRyYWluaW5nIGVxdWlwbWVudCM0OS4yMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMS4wMCNEdW1iYmVsbHMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDIuMDAjQmFyYmVsbHMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDMuMDAjTG93ZXIgYm9keSByZXNpc3RhbmNlIG1hY2hpbmVzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA0LjAwI1dlaWdodCBiZW5jaGVzIG9yIHJhY2tzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA1LjAwI1VwcGVyIGJvZHkgcmVzaXN0YW5jZSBtYWNoaW5lcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wNi4wMCNGaXRuZXNzIHdlaWdodHMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDcuMDAjUGlsYXRlcyBtYWNoaW5lcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wOC4wMCNHcmlwIHN0cmVuZ3RoZW5lciM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wOS4wMCNSZXNpc3RhbmNlIGJhbmRzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjEwLjAwI1Jlc2lzdGFuY2UgdHViZXMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMDAuMDAuMDAjT3RoZXIgc3BvcnRzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjAwLjAwI0dvbGYgZXF1aXBtZW50IzQ5LjIxLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjAxLjAwI0dvbGYgYmFncyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wMi4wMCNHb2xmIGJhbGxzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjAzLjAwI0dvbGYgY2x1YnMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDQuMDAjR29sZiB0ZWVzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjA1LjAwI0dvbGYgY2x1YiBoZWFkIGNvdmVycyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wNi4wMCNHb2xmIGdsb3ZlcyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wNy4wMCNEaXZvdCBmaXhlcnMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTcuMDAuMDAjQm93bGluZyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM0OS4yMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNy4wMS4wMCNCb3dsaW5nIGVxdWlwbWVudCM0OS4yMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNy4wMi4wMCNCb3dsaW5nIHN1cHBsaWVzIzQ5LjIxLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE3LjAzLjAwI0Jvd2xpbmcgYWNjZXNzb3JpZXMjNDkuMjEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDAuMDAjUGh5c2ljYWwgZWR1Y2F0aW9uIGNsYXNzcm9vbSBlcXVpcG1lbnQjNDkuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDEuMDAjUGFyYWNodXRlIGVxdWlwbWVudCM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wMi4wMCNIdWxhIGhvb3BzIG9yIGhvb3AgZXF1aXBtZW50IzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjAzLjAwI09yaWVudGVlcmluZyBlcXVpcG1lbnQjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDQuMDAjVGVhbSBpZGVudGlmaWNhdGlvbiBtYXRlcmlhbHMgb3IgbWFya2VycyM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wNS4wMCNMYW55YXJkcyM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wNi4wMCNQaHlzaWNhbCBlZHVjYXRpb24gZXF1aXBtZW50IHN0b3JhZ2UjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDcuMDAjUGh5c2ljYWwgZWR1Y2F0aW9uIGFzc2Vzc21lbnQgdG9vbHMjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjIuMDAuMDAuMDAjU3BvcnRzIGFjY2Vzc29yaWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjAwLjAwI1Nwb3J0IGFjY2Vzc29yaWVzIzQ5LjIyLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjAxLjAwI1Nwb3J0IHNjb3JlYm9hcmRzIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjAyLjAwI1Nwb3J0IGdvYWxzIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjAzLjAwI1Nwb3J0IHNhZmV0eSBlcXVpcG1lbnQgb3RoZXIgdGhhbiBoZWFkZ2VhciM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wNC4wMCNTcG9ydCBzYWZldHkgaGVhZGdlYXIjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDUuMDAjU3BvcnQgbmV0cyBvciBuZXR0aW5nIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA2LjAwI1Nwb3J0IG1hdHMgb3IgcGFkZGluZyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wNy4wMCNCYXNrZXRiYWxsIGJhY2tib2FyZHMjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDguMDAjQmFza2V0YmFsbCBob29wIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA5LjAwI1JvbGxlciBza2F0ZXMgb3Igcm9sbGVyIGJsYWRlcyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4wMC4wMC4wMCNUb3lzIGFuZCBnYW1lcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wMC4wMCNUb3lzIzQ5LjIzLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjAxLjAwI011c2ljYWwgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wMi4wMCNFZHVjYXRpb25hbCB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjAzLjAwI1RveSBiYWxsb29ucyBvciBiYWxscyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wNC4wMCNEb2xscyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wNS4wMCNEb2xsIGhvdXNlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wNi4wMCNTdHVmZmVkIGFuaW1hbHMgb3IgcHVwcGV0cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wNy4wMCNQbGF5aG91c2VzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA4LjAwI0J1aWxkaW5nIGJsb2NrcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wOS4wMCNSaWRpbmcgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xMC4wMCNQdWxsIHRveXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTEuMDAjQ2hpbGRyZW5zIHNjaWVuY2Uga2l0cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xMi4wMCNUb3kgdmVoaWNsZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTMuMDAjVG95IHRyYWlucyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xNC4wMCNJbmZsYXRhYmxlIHRveXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTUuMDAjRG9sbCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xNi4wMCNZbyB5b3MjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTcuMDAjS2l0ZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTguMDAjUG9ncyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xOS4wMCNLYWxlaWRvc2NvcGVzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjIwLjAwI1BvbSBwb21zIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjIxLjAwI1BpbmF0YXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjIuMDAjQm9vbWVyYW5ncyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yMy4wMCNGbHlpbmcgZGlzY3MjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjQuMDAjVG95IHBhaWxzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjAwLjAwI0dhbWVzIzQ5LjIzLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjAxLjAwI0VkdWNhdGlvbmFsIGdhbWVzIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjAyLjAwI0JvYXJkIGdhbWVzIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjAzLjAwI1BsYXlpbmcgY2FyZHMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDQuMDAjVmlkZW8gZ2FtZXMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDUuMDAjUHV6emxlcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wNi4wMCNEaWNlIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjAwLjAwLjAwI1JlY3JlYXRpb24gYW5kIHBsYXlncm91bmQgYW5kIHN3aW1taW5nIGFuZCBzcGEgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wMC4wMCNQbGF5Z3JvdW5kIGVxdWlwbWVudCM0OS4yNC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wMS4wMCNQbGF5Z3JvdW5kIHN3aW5ncyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wMi4wMCNQbGF5Z3JvdW5kIGNsaW1iaW5nIGFwcGFyYXR1cyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wMy4wMCNQbGF5Z3JvdW5kIG1lcnJ5IGdvIHJvdW5kcyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wNC4wMCNQbGF5Z3JvdW5kIHNsaWRlcyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wNS4wMCNQbGF5Z3JvdW5kIHNlZSBzYXdzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA2LjAwI1BsYXlncm91bmQgdHVubmVscyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wNy4wMCNQbGF5Z3JvdW5kIHNhbmRib3hlcyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wOC4wMCNQbGF5Z3JvdW5kIGJsZWFjaGVycyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wOS4wMCNXYWxsIGNsaW1iaW5nIGVxdWlwbWVudCM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4xMC4wMCNSb3BlIGNsaW1iaW5nIGVxdWlwbWVudCM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNi4wMC4wMCNSZWNyZWF0aW9uYWwgZXF1aXBtZW50IzQ5LjI0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjAxLjAwI0Nyb3F1ZXQgc2V0cyM0OS4yNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNi4wMi4wMCNMYXduIGJvd2xpbmcgZXF1aXBtZW50IzQ5LjI0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjAzLjAwI0hvcnNlc2hvZSBlcXVpcG1lbnQjNDkuMjQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDQuMDAjTGF3biBkYXJ0cyM0OS4yNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wMC4wMCNTd2ltbWluZyBwb29sIGFuZCBzcGEgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0OS4yNC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wMS4wMCNEaXZpbmcgYm9hcmRzIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjAyLjAwI1Bvb2wgc2xpZGVzIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjAzLjAwI1NwYSBibG93ZXIjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDQuMDAjV2F0ZXIgdGVzdCBraXQgb3Igc29sdXRpb25zIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA1LjAwI0F1dG9tYXRpYyBwb29sIGNsZWFuZXIjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDYuMDAjU29sYXIgYmxhbmtldCM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wNy4wMCNQb29sIG9yIHNwYSBoZWF0ZXIjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDguMDAjT3pvbmUgZ2VuZXJhdG9yIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA5LjAwI1NvbGFyIGJsYW5rZXQgcmVlbHMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMDAuMDAuMDAjQXJ0cyBhbmQgY3JhZnRzIHN1cHBsaWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjAwLjAwI0FydCBzdXBwbGllcyM0OS4yNS4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wMS4wMCNBcnQgcGFpbnRzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjAyLjAwI01vZGVsaW5nIGNsYXkjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDMuMDAjQXJ0IHBhaW50YnJ1c2hlcyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wNC4wMCNQaWN0dXJlIG9yIHBvc3RlciBmcmFtZXMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDUuMDAjUGljdHVyZSBhbGJ1bXMgb3Igb3JnYW5pemVycyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wNi4wMCNDdXR0aW5nIG1hdHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDcuMDAjQ2FydmluZyBib2FyZCM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wOC4wMCNQYWxldHRlcyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wOS4wMCNHbGl0dGVyIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjEwLjAwI0JlYWRzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjExLjAwI0RlY29yYXRpdmUgdGFwZXMgb3IgdHdpc3RzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE2LjAwLjAwI0NyYWZ0IHN1cHBsaWVzIzQ5LjI1LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE2LjAxLjAwI01vZGVsIGtpdHMjNDkuMjUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDIuMDAjUG90dGVycyB3aGVlbHMjNDkuMjUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDMuMDAjRGVjb3JhdGl2ZSBidXR0b25zIzQ5LjI1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE2LjA0LjAwI0RlY29yYXRpdmUgc2hhcGVzIG9yIHN0cmluZ3MjNDkuMjUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDUuMDAjQ3JhZnQga2l0cyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4wMC4wMC4wMC4wMCNGb29kIEJldmVyYWdlIGFuZCBUb2JhY2NvIFByb2R1Y3RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjAwLjAwLjAwI0ZydWl0cyBhbmQgdmVnZXRhYmxlcyBhbmQgbnV0cyBhbmQgc2VlZHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDAuMDAjVmVnZXRhYmxlcyM1MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wMS4wMCNCZWFucyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wMi4wMCNTcGluYWNoIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjAzLjAwI1BvdGF0b2VzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA0LjAwI1BlYXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDUuMDAjT25pb25zIG9yIG90aGVyIGFsbGlhY2VvdXMgdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wNi4wMCNMZXR0dWNlIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA3LjAwI0NhYmJhZ2UjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDguMDAjU3F1YXNoZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDkuMDAjWWFtcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xMC4wMCNDYXJyb3RzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjExLjAwI1J1dGFiYWdhcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xMi4wMCNFZ2dwbGFudHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTMuMDAjUGVwcGVycyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xNC4wMCNSaHViYXJiIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE1LjAwI0VuZGl2ZSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xNi4wMCNBc3BhcmFndXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTcuMDAjQXJ0aWNob2tlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xOC4wMCNQYXJzbmlwcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xOS4wMCNDZWxlcnkjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjAuMDAjUmFkaXNoZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjEuMDAjTXVzaHJvb21zIG9yIG90aGVyIGVkaWJsZSBmdW5naSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yMi4wMCNIb3JzZXJhZGlzaCM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yMy4wMCNUdXJuaXBzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjI0LjAwI011c3RhcmQgZ3JlZW5zIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjI1LjAwI0thbGUjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjYuMDAjQ29sbGFyZHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjcuMDAjQnJ1c3NlbCBzcHJvdXRzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjI4LjAwI0Jyb2Njb2xpIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjI5LjAwI0NhdWxpZmxvd2VycyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zMC4wMCNPa3JhIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMxLjAwI0N1Y3VtYmVycyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zMi4wMCNUb21hdG9lcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zMy4wMCNCZWV0cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zNC4wMCNNYW5pb2Mgcm9vdHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzUuMDAjTGVudGlscyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zNi4wMCNDb3JuIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM3LjAwI1B1bXBraW5zIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM4LjAwI0ZyZXNoIHZlZ2V0YWJsZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzkuMDAjRnJvemVuIHZlZ2V0YWJsZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuNDAuMDAjU2hlbGYgc3RhYmxlIHZlZ2V0YWJsZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDAuMDAjRnJ1aXRzIzUwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjAxLjAwI0xpbWVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjAyLjAwI01hbmdvZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDMuMDAjR3VhdmFzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA0LjAwI0dyYXBlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wNS4wMCNEYXRlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wNi4wMCNBcHJpY290cyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wNy4wMCNCZXJyaWVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA4LjAwI1BlYWNoZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDkuMDAjQ2hlcnJpZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTAuMDAjQmFuYW5hcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xMS4wMCNNZWxvbnMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTIuMDAjUG9tZWdyYW5hdGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjEzLjAwI1BhcGF5YXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTQuMDAjS2l3aXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTUuMDAjTGljaGVlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xNi4wMCNQZWFycyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xNy4wMCNQbHVtcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xOC4wMCNBcHBsZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTkuMDAjUGFzc2lvbiBmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yMC4wMCNOZWN0YXJpbmVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjIxLjAwI1BpbmVhcHBsZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjIuMDAjRmlncyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yMy4wMCNUYW5nZWxvcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yNC4wMCNNYW5kYXJpbnMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjUuMDAjT3JhbmdlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yNi4wMCNUYW5nZXJpbmVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI3LjAwI0dyYXBlZnJ1aXQjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjguMDAjTGVtb25zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI5LjAwI0R1cmlhbnMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzAuMDAjQ29jb251dHMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzEuMDAjQXZvY2Fkb3MjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzIuMDAjUXVpbmNlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMy4wMCNPbGl2ZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzQuMDAjRnJlc2ggZnJ1aXQjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzUuMDAjRnJvemVuIGZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjM2LjAwI1NoZWxmIHN0YWJsZSBmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wMC4wMCNOdXRzIGFuZCBzZWVkcyM1MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wMS4wMCNDaGVzdG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDMuMDAjUGVjYW5zIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA0LjAwI0JyYXppbCBudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA1LjAwI0Nhc2hld3MjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDYuMDAjQWxtb25kcyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wNy4wMCNNYWNhZGFtaWEgbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wOC4wMCNIYXplbG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDkuMDAjUGluZSBudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjEwLjAwI1Bpc3RhY2hpb3MjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTEuMDAjV2FsbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xMi4wMCNCZXRlbCBudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjEzLjAwI1BlYW51dHMgb3IgZ3JvdW5kbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xNC4wMCNNaXhlZCBudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjE1LjAwI051dCBtZWF0IzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjE2LjAwI1dob2xlIG51dHMgb3Igc2VlZHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTcuMDAjU2hlbGxlZCM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMS4wMC4wMC4wMCNNZWF0IGFuZCBwb3VsdHJ5IHByb2R1Y3RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjAwLjAwI01lYXQgYW5kIHBvdWx0cnkjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDEuMDAjQ2hpY2tlbiM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wMi4wMCNUdXJrZXkjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDMuMDAjRHVjayM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wNC4wMCNPc3RyaWNoIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA1LjAwI1BhcnRyaWRnZSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wNi4wMCNEb3ZlIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA3LjAwI1BoZWFzYW50IzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA4LjAwI1F1YWlsIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA5LjAwI0dvb3NlIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjEwLjAwI0ZyZXNoIG1lYXQgYW5kIHBvdWx0cnkjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMTEuMDAjRnJvemVuIG1lYXQgYW5kIHBvdWx0cnkjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMTIuMDAjU2hlbGYgc3RhYmxlIG1lYXQgYW5kIHBvdWx0cnkjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDAuMDAjRnJlc2ggYW5kIGZyb3plbiByZWQgbWVhdCBhbmQgYnlwcm9kdWN0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wMS4wMCNCZWVmIzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjAyLjAwI1ZlYWwjNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDMuMDAjTXV0dG9uIzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjA0LjAwI0xhbWIjNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDUuMDAjQnVmZmFsbyM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wNi4wMCNIb3JzZW1lYXQjNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDcuMDAjQXNzIG9yIG11bGUgb3IgaGlubnkgbWVhdCM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNy4wMC4wMCNGcmVzaCBhbmQgZnJvemVuIHBvcmsgYW5kIGJ5cHJvZHVjdHMjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTcuMDEuMDAjUG9yayM1MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wMC4wMCNGcmVzaCBhbmQgZnJvemVuIG9yZ2FuIG1lYXQgYW5kIGJ5cHJvZHVjdHMjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDEuMDAjT3JnYW4gbWVhdCM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wMi4wMCNMaXZlciM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wMy4wMCNHaXp6YXJkIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjA0LjAwI1RyaXBlIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjA1LjAwI1N0b21hY2gjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDYuMDAjS2lkbmV5IzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjA3LjAwI0JyYWlucyM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wMC4wMCNEZWxpY2F0ZXNzZW4gbWVhdCBwcm9kdWN0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wMS4wMCNTYWxhbWkjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDIuMDAjS2FiYW5hIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjAzLjAwI1Bhc3RyYW1pIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjA0LjAwI1JvYXN0IGJlZWYjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDUuMDAjQ29ybmVkIGJlZWYgb3Igc2lsdmVyc2lkZSM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wNi4wMCNGcmFua2Z1cnQgb3IgaG90IGRvZyM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4yMC4wMC4wMCNQcm9jZXNzZWQgYW5kIHByZXBhcmVkIG1lYXRzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjIwLjAxLjAwI0ZyZXNoIHByb2Nlc3NlZCBvciBwcmVwYXJlZCBtZWF0cyM1MC4xMS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4yMC4wMi4wMCNGcm96ZW4gcHJvY2Vzc2VkIG9yIHByZXBhcmVkIG1lYXRzIzUwLjExLjIwLjAwLjAwCi11bnNwc2M3IzUwLjExLjIwLjAzLjAwI1NoZWxmIHN0YWJsZSBwcm9jZXNzZWQgb3IgcHJlcGFyZWQgbWVhdHMjNTAuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMDAuMDAuMDAjU2VhZm9vZCM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wMC4wMCNGaXNoIzUwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjAxLjAwI0xlbW9uZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wMi4wMCNEb2dmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjAzLjAwI0dyb3VwZXIjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDQuMDAjTWFoaSBtYWhpIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA1LjAwI01vbmtmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA2LjAwI1BvbXBhbm8jNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDcuMDAjQmFzcyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wOC4wMCNTaGFyayM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wOS4wMCNUaWxhcGlhIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjEwLjAwI1N3b3JkZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xMS4wMCNBbmNob3ZpZXMjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTIuMDAjQ2FycCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xMy4wMCNDYXRmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE0LjAwI0VlbCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xNS4wMCNTdHVyZ2VvbiM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xNi4wMCNUdW5hIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE3LjAwI0NvZCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xOC4wMCNIYWxpYnV0IzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE5LjAwI0hhZGRvY2sjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjAuMDAjT2NlYW4gcGVyY2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjEuMDAjT3JhbmdlIHJvdWdoeSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yMi4wMCNQYXJyb3QgZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yMy4wMCNQaWtlIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI0LjAwI1JlZCBzbmFwcGVyIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI1LjAwI1JvY2tmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI2LjAwI1NtZWx0IzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI3LjAwI1NvbGUjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjguMDAjV2hpdGluZyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yOS4wMCNTYWxtb24jNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzAuMDAjTWFja2VyZWwjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzEuMDAjU2FyZGluZXMjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzIuMDAjVHJvdXQjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzMuMDAjU3VyaW1pIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM0LjAwI0JsYWNrZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zNS4wMCNIZXJyaW5nIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM2LjAwI0ZyZXNoIGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzcuMDAjRnJvemVuIGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzguMDAjU2hlbGYgc3RhYmxlIGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzkuMDAjRnJlc2ggZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wMC4wMCNTaGVsbGZpc2gjNTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDEuMDAjQWJhbG9uZSM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wMi4wMCNTY2FsbG9wcyM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wMy4wMCNDbGFtcyM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wNC4wMCNDcmFicyM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wNS4wMCNDb25jaCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wNi4wMCNDcmF5ZmlzaCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wNy4wMCNMb2JzdGVyIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA4LjAwI011c3NlbHMjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDkuMDAjT3lzdGVycyM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4xMC4wMCNTaHJpbXAjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMTEuMDAjRnJlc2ggc2hlbGxmaXNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjEyLjAwI0Zyb3plbiBzaGVsbGZpc2gjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMTMuMDAjU2hlbGYgc3RhYmxlIHNoZWxsZmlzaCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wMC4wMCNBcXVhdGljIGludmVydGVicmF0ZXMjNTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDEuMDAjU3F1aWQjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDIuMDAjT2N0b3B1cyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wMy4wMCNBbmVtb25lcyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wNC4wMCNTZWEgY3VjdW1iZXJzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjA1LjAwI0ZyZXNoIGFxdWF0aWMgaW52ZXJ0ZWJyYXRlcyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wNi4wMCNGcm96ZW4gYXF1YXRpYyBpbnZlcnRlYnJhdGVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjA3LjAwI1NoZWxmIHN0YWJsZSBhcXVhdGljIGludmVydGVicmF0ZXMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTguMDAuMDAjQXF1YXRpYyBwbGFudHMjNTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTguMDEuMDAjU2Vhd2VlZHMjNTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTguMDIuMDAjRnJlc2ggYXF1YXRpYyBwbGFudHMjNTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTguMDMuMDAjRnJvemVuIGFxdWF0aWMgcGxhbnRzIzUwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE4LjA0LjAwI1NoZWxmIHN0YWJsZSBhcXVhdGljIHBsYW50cyM1MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMy4wMC4wMC4wMCNEYWlyeSBwcm9kdWN0cyBhbmQgZWdncyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wMC4wMCNEYWlyeSBwcm9kdWN0cyBhbmQgZGFpcnkgc3Vic3RpdHV0ZXMjNTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDEuMDAjQ29mZmVlIGNyZWFtZXIjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDIuMDAjQnV0dGVyIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjAzLjAwI01pbGsjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDQuMDAjU29mdCBjaGVlc2VzIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA1LjAwI1lvZ3VydHMjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDYuMDAjSWNlIGNyZWFtcyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wNy4wMCNTb3VyIGNyZWFtcyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wOC4wMCNIYXJkIGNoZWVzZXMjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDkuMDAjQnV0dGVybWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xMC4wMCNJbmZhbnQgZm9ybXVsYSM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xMS4wMCNDdXN0YXJkIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjEyLjAwI0V2YXBvcmF0ZWQgbWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xMy4wMCNTd2VldGVuZWQgY29uZGVuc2VkIG1pbGsjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTQuMDAjUG93ZGVyZWQgbWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xNS4wMCNDcmVhbSM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xNi4wMCNMb25nIGxpZmUgbWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wMC4wMCNFZ2dzIGFuZCBlZ2cgc3Vic3RpdHV0ZXMjNTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDEuMDAjRWdncyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wMi4wMCNFZ2cgc3Vic3RpdHV0ZXMjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDMuMDAjTWVyaW5ndWUgcG93ZGVycyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wNC4wMCNFZ2cgd2hpdGVzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA1LjAwI0VnZyB5b2xrcyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wNi4wMCNGcmVzaCBlZ2dzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA3LjAwI0VnZyBzdWJzdGl0dXRlcyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wOC4wMCNFZ2cgd2hpdGVzIG9yIHlvbGtzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA5LjAwI1ByZXBhcmVkIGVnZ3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTcuMDAuMDAjTWlsayBhbmQgYnV0dGVyIHByb2R1Y3RzIzUwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE3LjAxLjAwI0ZyZXNoIG1pbGsgYW5kIGJ1dHRlciBwcm9kdWN0cyM1MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNy4wMi4wMCNTaGVsZiBzdGFibGUgbWlsayBhbmQgYnV0dGVyIHByb2R1Y3RzIzUwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE4LjAwLjAwI0NoZWVzZSM1MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xOC4wMS4wMCNOYXR1cmFsIGNoZWVzZSM1MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xOC4wMi4wMCNQcm9jZXNzZWQgY2hlZXNlIzUwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE4LjAzLjAwI0ltaXRhdGlvbiBjaGVlc2UjNTAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTQuMDAuMDAuMDAjR3JhaW5zIGFuZCBjZXJlYWxzIGFuZCB0aGVpciBmbG91cnMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDAuMDAjR3JhaW5zIGFuZCBjZXJlYWxzIzUwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjAxLjAwI01pbGxldCM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wMi4wMCNIb3BzIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjAzLjAwI0J1Y2t3aGVhdCM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wNC4wMCNSeWUjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDUuMDAjQ29ybiBjZXJlYWxzIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA2LjAwI1NvcmdodW0jNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDcuMDAjT2F0cyM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wOC4wMCNSaWNlIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA5LjAwI0JhcmxleSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4xMC4wMCNXaGVhdCM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4xMS4wMCNQYXN0YSBvciBub29kbGUjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMTIuMDAjQnJhbiM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4xMy4wMCNzaG9ydCBncmFpbiByaWNlIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjAwLjAwI0Zsb3VycyM1MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wMS4wMCNNaWxsZXQgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDIuMDAjT2F0IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjAzLjAwI0JhcmxleSBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wNC4wMCNSaWNlIGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA1LjAwI0J1Y2t3aGVhdCBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wNi4wMCNSeWUgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDcuMDAjQ29ybiBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wOC4wMCNXaGVhdCBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wOS4wMCNTZWxmIHJpc2luZyBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4xMC4wMCNMb25nIEdyYWluIFJpY2UjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMDAuMDAuMDAjRWRpYmxlIG9pbHMgYW5kIGZhdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDAuMDAjRWRpYmxlIHZlZ2V0YWJsZSBhbmQgcGxhbnQgb2lscyBhbmQgZmF0cyM1MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wMS4wMCNTb3liZWFuIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wMi4wMCNDb3JuIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wMy4wMCNDYW5vbGEgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA0LjAwI1Nlc2FtZSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDUuMDAjUGVhbnV0IG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wNi4wMCNPbGl2ZSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDcuMDAjUGFsbSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDguMDAjU2FmZmxvd2VyIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wOS4wMCNDYXN0b3Igb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjEwLjAwI1N1bmZsb3dlciBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTEuMDAjQ290dG9uc2VlZCBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTIuMDAjQ29semEgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjEzLjAwI0VkaWJsZSB2ZWdldGFibGUgb3IgcGxhbnQgb2lscyM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xNC4wMCNFZGlibGUgdmVnZXRhYmxlIG9yIHBsYW50IGZhdHMjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDAuMDAjRWRpYmxlIGFuaW1hbCBvaWxzIGFuZCBmYXRzIzUwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE1LjE2LjAxLjAwI0xhcmQjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDIuMDAjVGFsbG93IzUwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE2LjAzLjAwI0NvZCBsaXZlciBvaWwjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDQuMDAjRWRpYmxlIGFuaW1hbCBvaWxzIzUwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE2LjA1LjAwI0VkaWJsZSBhbmltYWwgZmF0cyM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wMC4wMCNPaWxzIGFuZCBmYXRzIGFuZCBvdGhlciM1MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wMS4wMCNTaG9ydGVuaW5ncyM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wMi4wMCNNYXJnYXJpbmUjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDMuMDAjTGluc2VlZCBvaWwjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDQuMDAjQ29jb2EgYnV0dGVyIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjA1LjAwI0hvcCBPaWwjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDYuMDAjTWFjYWRhbWlhIG9pbCM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4wMC4wMC4wMCNDaG9jb2xhdGUgYW5kIHN1Z2FycyBhbmQgc3dlZXRlbmVycyBhbmQgY29uZmVjdGlvbmFyeSBwcm9kdWN0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wMC4wMCNDaG9jb2xhdGUgYW5kIHN1Z2FycyBhbmQgc3dlZXRlbmluZyBwcm9kdWN0cyM1MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wMS4wMCNCcm93biBzdWdhciM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wMi4wMCNXaGl0ZSBzdWdhcnMjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDMuMDAjU3VnYXIgY2FuZSM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wNC4wMCNGcnVjdG9zZSM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wNS4wMCNQYWxtIHN1Z2FyIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA2LjAwI0dsdWNvc2UjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDcuMDAjQmVldCBzdWdhciM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wOC4wMCNSYXcgc3VnYXIjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDkuMDAjTmF0dXJhbCBzdWdhcnMgYW5kIHN3ZWV0ZW5pbmcgcHJvZHVjdHMjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMTAuMDAjQXJ0aWZpY2lhbCBzd2VldGVuaW5nIGFnZW50cyM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4xMS4wMCNDaG9jb2xhdGUgYW5kIGNob2NvbGF0ZSBzdWJzdGl0dXRlIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjEyLjAwI1N5cnVwcyM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMC4wMCNTeXJ1cHMgYW5kIG90aGVyIHN3ZWV0ZW5lcnMjNTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDEuMDAjTW9sYXNzZXMjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDIuMDAjSG9uZXkjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDMuMDAjQmxhY2sgdHJlYWNsZSM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wNC4wMCNDb3JuIHN5cnVwIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjA1LjAwI0FzcGVydGFtZSM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wNi4wMCNTYWNjaGFycmluIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjA3LjAwI01hcGxlIHN5cnVwIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE3LjAwLjAwI0Nob2NvbGF0ZSBhbmQgY2Fyb2IgYW5kIGNob2NvbGF0ZSBzdWJzdGl0dXRlcyM1MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNy4wMS4wMCNDaG9jb2xhdGUjNTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTcuMDIuMDAjQ2Fyb2IjNTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTcuMDMuMDAjQ29jb2EjNTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDAuMDAjQ29uZmVjdGlvbmFyeSBwcm9kdWN0cyM1MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNC4wMCNDaGV3aW5nIGd1bXMjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDUuMDAjQ2FuZHkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDYuMDAjTGljb3JpY2UjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDcuMDAjamVsbGllZCBjb25mZWN0aW9uYXJ5IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA4LjAwI0Z1ZGdlIzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA5LjAwI01lZGljYXRlZCBjb25mZWN0aW9uZXJ5IG9yIGxvemVuZ2VzIzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjEwLjAwI1N1Z2FyIGZyZWUgY29uZmVjdGlvbmFyeSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xMS4wMCNNYXJzaG1hbGxvdyM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xMi4wMCNOb3VnYXQjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTMuMDAjQ2hvY29sYXRlIG9yIGNob2NvbGF0ZSBzdWJzdGl0dXRlIGNhbmR5IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjE0LjAwI1N1Z2FyIG9yIHN1Z2FyIHN1YnN0aXR1dGUgY2FuZHkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTUuMDAjQ2hld2luZyBndW0jNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMDAuMDAuMDAjU2Vhc29uaW5ncyBhbmQgcHJlc2VydmF0aXZlcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wMC4wMCNIZXJicyBhbmQgc3BpY2VzIGFuZCBleHRyYWN0cyM1MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wMS4wMCNTYWx0IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjAzLjAwI051dG1lZyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wNC4wMCNCYXkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDUuMDAjQW5pc2UjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDYuMDAjU2FmZnJvbiM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wNy4wMCNCYXNpbCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wOC4wMCNHaW5nZXIjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDkuMDAjTGF2ZW5kZXIjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTAuMDAjTWFjZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xMS4wMCNQYXByaWthIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjEyLjAwI0NoaWNvcnkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTMuMDAjR2FybGljIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE0LjAwI0N1bWluIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE1LjAwI0Nsb3ZlcyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xNi4wMCNDaW5uYW1vbiM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xNy4wMCNDaWxhbnRybyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xOC4wMCNBbGxzcGljZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xOS4wMCNNYXJqb3JhbSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMC4wMCNZYXJyb3cjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjEuMDAjVGh5bWUjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjIuMDAjVGFycmFnb24jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjMuMDAjU2VzYW1lIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI0LjAwI1NhZ2UjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjUuMDAjUm9zZW1hcnkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjYuMDAjUGFyc2xleSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yNy4wMCNDaGFtb21pbGUjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjguMDAjTWludHMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjkuMDAjQ2FyYXdheSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zMC4wMCNMZW1vbmdyYXNzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjMxLjAwI0xlbW9uIGJhbG0jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzIuMDAjRGlsbCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zMy4wMCNGZW5uZWwjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzQuMDAjQ3VycnkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzUuMDAjQ29tZnJleSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNi4wMCNDaGl2ZXMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzcuMDAjQ2hlcnZpbCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zOC4wMCNPcmVnYW5vIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM5LjAwI1BlcHBlcmNvcm5zIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQwLjAwI0NhcmRhbW9tIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQxLjAwI0NvcmlhbmRlciM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40Mi4wMCNGbGF2b3JpbmcgZXh0cmFjdHMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDMuMDAjQ2hpbGkgcG93ZGVyIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ0LjAwI1BvcHB5IHNlZWRzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ1LjAwI01peGVkIGhlcmJzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ2LjAwI1ZhbmlsbGEjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDcuMDAjU2Vhc29uaW5nIG1peCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40OC4wMCNGcmVzaCBoZXJicyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40OS4wMCNEcmllZCBoZXJicyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS41MC4wMCNTcGljZXMgb3IgZXh0cmFjdHMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTYuMDAuMDAjUHJlc2VydmF0aXZlcyBhbmQgYWRkaXRpdmVzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE2LjAxLjAwI1BlY3RpbiM1MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNi4wMi4wMCNGb29kIGNvbG9yaW5ncyM1MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNi4wMy4wMCNNb25vc29kaXVtIGdsdXRhbWF0ZSAoTVNHKSM1MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wMC4wMCNWaW5lZ2FycyBhbmQgY29va2luZyB3aW5lcyM1MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wMS4wMCNDaWRlciB2aW5lYWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wMi4wMCNCYWxzYW1pYyB2aW5lZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAzLjAwI0Rpc3RpbGxlZCB2aW5lZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjA0LjAwI1JpY2UgdmluZWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wNS4wMCNXaW5lIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDYuMDAjSW5mdXNlZCB2aW5lZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjA3LjAwI1ZpbmVnYXJzIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjA4LjAwI0Nvb2tpbmcgd2luZXMjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDAuMDAjU2F1Y2VzIGFuZCBzcHJlYWRzIGFuZCBjb25kaW1lbnRzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjAxLjAwI011c3RhcmRzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjAyLjAwI0NhdHN1cCBvciBrZXRjaHVwIG9yIHRvbWF0byBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wMy4wMCNCYXJiZWN1ZSBzYXVjZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDQuMDAjTWFyaW5hZGVzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA1LjAwI0hvdCBzYXVjZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDYuMDAjTWF5b25uYWlzZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wNy4wMCNTb3kgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDguMDAjU2FsYWQgZHJlc3NpbmdzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA5LjAwI1dvcmNoZXN0ZXJzaGlyZSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xMC4wMCNTYWxzYSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xMS4wMCNSZWxpc2hlcyBvciBjaHV0bmV5cyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xMi4wMCNDb25zZXJ2ZSBvciBqYW0jNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTMuMDAjRGlwIG9yIGNoaWxsZWQgZGlwcGluZyBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xNC4wMCNTd2VldCBhbmQgc291ciBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xNS4wMCNUYXJ0YXJlIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE2LjAwI01pbnQgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTcuMDAjR3Jhdnkgc2F1Y2Ugb3IgcG93ZGVyIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE4LjAwI05vb2RsZSBvciBwYXN0YSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xOS4wMCNGb29kIHNwcmVhZHMgb3IgcGFzdGVzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjIwLjAwI1RvbWF0byBwYXN0ZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yMS4wMCNCbGFjayBiZWFuIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjIyLjAwI1NhdGF5IHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjIzLjAwI1Rlcml5YWtpIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjI0LjAwI1NlYWZvb2Qgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjUuMDAjUGVzdG8jNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjYuMDAjU3RlYWsgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjcuMDAjT3lzdGVyIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjI4LjAwI1BsdW0gc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjkuMDAjV2hpdGUgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMzAuMDAjRGlwcGluZyBzYXVjZXMgb3IgY29uZGltZW50cyBvciBzcHJlYWRzIG9yIG1hcmluYWRlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4zMS4wMCNDb29raW5nIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjMyLjAwI1NhbGFkIGRyZXNzaW5nIG9yIGRpcHMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMzMuMDAjU2F2b3J5IHNwcmVhZCBvciBwYXRlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE5LjAwLjAwI1BpY2tsZXMgYW5kIHJlbGlzaCBhbmQgb2xpdmVzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE5LjAxLjAwI1BpY2tsZXMjNTAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDIuMDAjUmVsaXNoIzUwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE5LjAzLjAwI09saXZlcyM1MC4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOS4wNC4wMCNDaHV0bmV5cyM1MC4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4wMC4wMC4wMCNCcmVhZCBhbmQgYmFrZXJ5IHByb2R1Y3RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjAwLjAwI0xlYXZlbmluZyBhZ2VudHMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTUuMDEuMDAjWWVhc3QjNTAuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTUuMDIuMDAjQmFraW5nIHBvd2RlciM1MC4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wMy4wMCNCYWtpbmcgc29kYSM1MC4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wNC4wMCNCYWtlcnMgYW1tb25pYSM1MC4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wMC4wMCNUaGlja2VuZXJzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjAxLjAwI0dlbGF0aW5zIzUwLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjAyLjAwI0Zvb2QgZ3JhZGUgc3RhcmNoZXMjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDMuMDAjVGFwaW9jYSM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wNC4wMCNBcnJvd3Jvb3QjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDUuMDAjRm9vZCBncmFkZSBhZ2FyIzUwLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjAwLjAwI0Jha2luZyBtaXhlcyBhbmQgc3VwcGxpZXMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDEuMDAjRm9vZCBnbGF6ZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDIuMDAjSWNpbmdzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjAzLjAwI0Nha2UgZGVjb3JhdGlvbnMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDQuMDAjQ2FrZSBvciBwdWRkaW5nIG1peHR1cmVzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA1LjAwI1BpZSBmaWxsaW5ncyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wNi4wMCNCYWtpbmcgbWl4ZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDcuMDAjQ29hdGluZyBtaXggb3IgYnJlYWRjcnVtYnMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDguMDAjQmFraW5nIG1peGVzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA5LjAwI0Jha2luZyBzdXBwbGllcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wMC4wMCNCYWtlZCBnb29kcyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wMS4wMCNQYXN0cnkgc2hlbGxzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjAyLjAwI0NyYWNrZXJzIG9yIGRyeSBvciBzYXZvdXJ5IGJpc2N1aXRzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjAzLjAwI0JyZWFkIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjA0LjAwI1Bhc3RyaWVzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjA1LjAwI0Nha2VzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjA2LjAwI0Nvb2tpZSBvciBzd2VldCBiaXNjdWl0IzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjA3LjAwI0Jpc2N1aXRzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjA4LjAwI1VubGVhdmVuZWQgYnJlYWQjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDkuMDAjTXVmZmlucyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4xMC4wMCNEb251dHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMTEuMDAjUGl6emEgb3IgcGl6emEgYmFzZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMTIuMDAjQ29ybmV0cyBvciBjb25lcyBvciB3YWZmbGVzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjAwLjAwI0JyZWFkIGFuZCBiaXNjdWl0cyBhbmQgY29va2llcyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wMS4wMCNGcmVzaCBicmVhZCM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wMi4wMCNGcm96ZW4gYnJlYWQjNTAuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDMuMDAjUGxhaW4gc2F2b3J5IGJpc2N1aXRzIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjA0LjAwI0RyaWVkIGJyZWFkcyBvciBicmVhZCBzaGVsbHMgb3IgY3JvdXRvbnMjNTAuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDUuMDAjU3dlZXQgYmlzY3VpdHMgb3IgY29va2llcyM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4yMC4wMC4wMCNDYWtlcyBhbmQgcGllcyBhbmQgcGFzdHJpZXMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMjAuMDEuMDAjRnJlc2ggY2FrZXMgb3IgcGllcyBvciBwYXN0cmllcyM1MC4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4yMC4wMi4wMCNGcm96ZW4gY2FrZXMgb3IgcGllcyBvciBwYXN0cmllcyM1MC4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4wMC4wMC4wMCNQcmVwYXJlZCBhbmQgcHJlc2VydmVkIGZvb2RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAwLjAwI1ByZXBhcmVkIHNvdXBzIGFuZCBzdGV3cyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wMS4wMCNTdGV3cyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wMi4wMCNTb3VwcyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wMy4wMCNTdG9jayBvciBzdG9jayBjdWJlcyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wNC4wMCNTdGV3IG9yIGNhc3Nlcm9sZSBiYXNlIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjA1LjAwI0ZyZXNoIHByZXBhcmVkIHNvdXBzIG9yIHN0ZXdzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjA2LjAwI0Zyb3plbiBwcmVwYXJlZCBzb3VwcyBvciBzdGV3cyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wNy4wMCNTaGVsZiBzdGFibGUgcHJlcGFyZWQgc291cHMgb3Igc3Rld3MjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDAuMDAjRnJvemVuIGZvb2RzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjAxLjAwI0Zyb3plbiBkZXNzZXJ0cyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wMi4wMCNGcm96ZW4gbWVhdHMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDMuMDAjRnJvemVuIGZydWl0cyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wNC4wMCNGcm96ZW4gdmVnZXRhYmxlcyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wNS4wMCNGcm96ZW4gcHJlcGFyZWQgbWVhbHMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDYuMDAjRnJvemVuIGZpc2gjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDcuMDAjRnJvemVuIGNydXN0YWNlYW5zIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA4LjAwI0Zyb3plbiBtb2xsdXNrcyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wOS4wMCNGcm96ZW4gcHJlcGFyZWQgcGFzdHJ5IHVuYmFrZWQjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMTAuMDAjRnJvemVuIHNhdm91cmllcyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wMC4wMCNDYW5uZWQgZm9vZHMgYW5kIGJvdHRsZWQgZXRjIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjAxLjAwI0Nhbm5lZCBmcnVpdHMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDIuMDAjQ2FubmVkIHZlZ2V0YWJsZXMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDMuMDAjQ2FubmVkIGZpc2gjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDQuMDAjQ2FubmVkIG1lYXQjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDUuMDAjQ2FubmVkIEluZmFudCBmb29kcyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wNi4wMCNGcnVpdCBqYW1zIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA3LjAwI01hcm1hbGFkZSM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wOC4wMCNDYW5uZWQgcHJlcGFyZWQgbWVhbHMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDkuMDAjQ2FubmVkIGRlc3NlcnRzIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE4LjAwLjAwI0RyaWVkIGZvb2RzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE4LjAxLjAwI0RyaWVkIGZpc2gjNTAuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDIuMDAjRHJpZWQgbWVhdCM1MC4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOC4wMy4wMCNEcmllZCB2ZWdldGFibGVzIzUwLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE4LjA0LjAwI0RyaWVkIGZydWl0cyM1MC4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wMC4wMCNTYWx0ZWQgYW5kIHNtb2tlZCBmb29kcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wMS4wMCNTYWx0ZWQgb3Igc21va2VkIGZpc2gjNTAuMTkuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTkuMDIuMDAjU2FsdGVkIG9yIHNtb2tlZCBtZWF0cyM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wMy4wMCNTYWx0ZWQgb3Igc21va2VkIHNoZWxsZmlzaCBvciBjcnVzdGFjZWFucyBvciByb2UjNTAuMTkuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTkuMDQuMDAjU2FsdGVkIG9yIHNtb2tlZCBmcnVpdHMjNTAuMTkuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTkuMDUuMDAjU2FsdGVkIG9yIHNtb2tlZCBudXRzIzUwLjE5LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjAwLjAwI1BpY2tsZWQgZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDEuMDAjUGlja2xlZCBmaXNoIzUwLjE5LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjAyLjAwI1BpY2tsZWQgY3J1c3RhY2VhbnMjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDMuMDAjUGlja2xlZCBtZWF0cyM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wNC4wMCNQaWNrbGVkIHZlZ2V0YWJsZXMjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDUuMDAjUGlja2xlZCBlZ2dzIzUwLjE5LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjAwLjAwI1NuYWNrIGZvb2RzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjAxLjAwI1ByZXR6ZWxzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjAyLjAwI0Nvcm4gY2hpcHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDMuMDAjUG90YXRvIGNoaXBzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA0LjAwI1BvcGNvcm4jNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDUuMDAjRmlzaCBmaW5nZXJzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA2LjAwI0ZydWl0IHNuYWNrcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wNy4wMCNPdGhlciBmbGF2b3VyZWQgc25hY2sgZm9vZHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDguMDAjRnJ1aXQgb3IgbnV0IG1peCM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wOS4wMCNDcmlzcHMgb3IgY2hpcHMgb3IgcHJldHplbHMgb3IgbWl4ZXMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMTAuMDAjTnV0cyBvciBkcmllZCBmcnVpdHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMTEuMDAjRHJpZWQgb3IgcHJvY2Vzc2VkIG1lYXRzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjEyLjAwI1BvcHBlZCBjb3JuIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIyLjAwLjAwI1NwcmVhZHMgYW5kIGNvbnNlcnZlcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMi4wMS4wMCNQZWFudXQgYnV0dGVyIzUwLjE5LjIyLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIyLjAyLjAwI1llYXN0IG9yIHZlZ2V0YWJsZSBleHRyYWN0IHNwcmVhZHMjNTAuMTkuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjIuMDMuMDAjSmFtcyBvciBqZWxsaWVzIG9yIHF1aW5jZXMjNTAuMTkuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjMuMDAuMDAjRGVzZXJ0cyBhbmQgZGVzZXJ0IHRvcHBpbmdzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIzLjAxLjAwI1ByZXBhcmVkIGRlc2VydHMjNTAuMTkuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjMuMDIuMDAjRGVzZXJ0IHRvcHBpbmdzIzUwLjE5LjIzLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIzLjAzLjAwI0ZsYXZvcmVkIGljZXMgb3IgaWNlIGNyZWFtIG9yIGljZSBjcmVhbSBkZXNlcnRzIG9yIGZyb3plbiB5b2d1cnRzIzUwLjE5LjIzLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI0LjAwLjAwI0phbXMgYW5kIGplbGxpZXMgYW5kIG51dCBhbmQgc3dlZXQgc3ByZWFkcyBhbmQgZnJ1aXQgY29uc2VydmVzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI0LjAxLjAwI0phbXMgb3IgamVsbGllcyBvciBmcnVpdCBwcmVzZXJ2ZXMjNTAuMTkuMjQuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjQuMDIuMDAjTnV0IG9yIG1peGVkIHNwcmVhZHMjNTAuMTkuMjQuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjQuMDMuMDAjSG9uZXkjNTAuMTkuMjQuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjUuMDAuMDAjU2FuZHdpY2hlcyBhbmQgZmlsbGVkIHJvbGxzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI1LjAxLjAwI0ZyZXNoIHNhbmR3aWNoZXMgb3IgZmlsbGVkIHJvbGxzIzUwLjE5LjI1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI1LjAyLjAwI0Zyb3plbiBzYW5kd2ljaGVzIG9yIGZpbGxlZCByb2xscyM1MC4xOS4yNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNi4wMC4wMCNQcmVwYXJlZCBwb3RhdG9lcyBhbmQgcmljZSBhbmQgcGFzdGEgYW5kIHN0dWZmaW5nIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI2LjAxLjAwI0ZyZXNoIHByZXBhcmVkIHBvdGF0b2VzIG9yIHJpY2Ugb3IgcGFzdGEgb3Igc3R1ZmZpbmcjNTAuMTkuMjYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjYuMDIuMDAjRnJvemVuIHByZXBhcmVkIHBvdGF0b2VzIG9yIHJpY2Ugb3IgcGFzdGEgb3Igc3R1ZmZpbmcjNTAuMTkuMjYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjYuMDMuMDAjU2hlbGYgc3RhYmxlIHByZXBhcmVkIHBvdGF0b2VzIG9yIHJpY2Ugb3IgcGFzdGEgb3Igc3R1ZmZpbmcjNTAuMTkuMjYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjcuMDAuMDAjUGFja2FnZWQgY29tYmluYXRpb24gbWVhbHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjcuMDEuMDAjRnJlc2ggY29tYmluYXRpb24gbWVhbHMjNTAuMTkuMjcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjcuMDIuMDAjRnJvemVuIGNvbWJpbmF0aW9uIG1lYWxzIzUwLjE5LjI3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI3LjAzLjAwI1NoZWxmIHN0YWJsZSBjb21iaW5hdGlvbiBtZWFscyM1MC4xOS4yNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOC4wMC4wMCNTYXZvcnkgcGllcyBhbmQgcXVpY2hlcyBhbmQgcGFzdGllcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOC4wMS4wMCNGcmVzaCBzYXZvcnkgcGllcyBvciBxdWljaGVzIG9yIHBhc3RpZXMjNTAuMTkuMjguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjguMDIuMDAjRnJvemVuIHNhdm9yeSBwaWVzIG9yIHF1aWNoZXMgb3IgcGFzdGllcyM1MC4xOS4yOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOC4wMy4wMCNTaGVsZiBzdGFibGUgc2F2b3J5IHBpZXMgb3IgcXVpY2hlcyBvciBwYXN0aWVzIzUwLjE5LjI4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI5LjAwLjAwI1BsYWluIHBhc3RhIGFuZCBub29kbGVzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI5LjAxLjAwI0ZyZXNoIHBsYWluIHBhc3RhIG9yIG5vb2RsZXMjNTAuMTkuMjkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjkuMDIuMDAjU2hlbGYgc3RhYmxlIHBsYWluIHBhc3RhIG9yIG5vb2RsZXMjNTAuMTkuMjkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMzAuMDAuMDAjSW5mYW50IGZvb2RzIGFuZCBiZXZlcmFnZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMzAuMDEuMDAjSW5mYW50IGZvb2RzIzUwLjE5LjMwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjMwLjAyLjAwI0luZmFudCBiZXZlcmFnZXMjNTAuMTkuMzAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMDAuMDAuMDAjQmV2ZXJhZ2VzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjAwLjAwI1dhdGVyIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjAxLjAwI1NwYXJrbGluZyB3YXRlciM1MC4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNS4wMi4wMCNTcHJpbmcgd2F0ZXIjNTAuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDMuMDAjTWluZXJhbCB3YXRlciM1MC4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNS4wNC4wMCNEaXN0aWxsZWQgb3IgcHVyaWZpZWQgd2F0ZXIjNTAuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDAuMDAjSnVpY2VzIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjAxLjAwI0JsZW5kZWQganVpY2VzIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjAyLjAwI0d1YXZhIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjAzLjAwI1BydW5lIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA0LjAwI1RvbWF0byBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wNS4wMCNDcmFuYmVycnkganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDYuMDAjR3JhcGVmcnVpdCBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wNy4wMCNHcmFwZSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wOC4wMCNQaW5lYXBwbGUganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDkuMDAjT3JhbmdlIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjEwLjAwI0FwcGxlIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjExLjAwI0xlbW9uIGp1aWNlcyBvciBsZW1vbmFkZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4xMi4wMCNJbmZhbnQganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDAuMDAjQ29mZmVlIGFuZCB0ZWEjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDEuMDAjSW5zdGFudCBjb2ZmZWUjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDIuMDAjR3JvdW5kIGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMy4wMCNXaG9sZSBiZWFuIGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wNC4wMCNHcmVlbiBjb2ZmZWUjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDUuMDAjQ29mZmVlIHN1YnN0aXR1dGVzIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA2LjAwI0NvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wNy4wMCNDb2ZmZWUgc3Vic3RpdHV0ZXMjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDguMDAjQ29mZmVlIGRyaW5rcyM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wOS4wMCNJbnN0YW50IGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4xMC4wMCNMZWFmIHRlYSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4xMS4wMCNJbnN0YW50IHRlYSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4xMi4wMCNUZWEgZHJpbmtzIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjEzLjAwI1RlYSBiYWdzIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjAwLjAwI1RlYSM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wMS4wMCNHcmVlbiB0ZWEjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDIuMDAjQmxhY2sgdGVhIzUwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjAzLjAwI0hlcmJhbCB0ZWEjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDQuMDAjUG93ZGVyZWQgdGVhIzUwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjA1LjAwI1RlYSBiYWdzIzUwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjAwLjAwI1NvZnQgZHJpbmtzIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjAxLjAwI05vbiBjYXJib25hdGVkIHNvZnQgZHJpbmtzIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjAyLjAwI0NhcmJvbmF0ZWQgc29mdCBkcmlua3MjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDMuMDAjQ29yZGlhbHMgb3IgY29sb3VyaW5ncyM1MC4yMC4xOS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wNC4wMCNTcG9ydHMgb3IgaGlnaCBlbmVyZ3kgZHJpbmtzIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjA1LjAwI1NveSBiZXZlcmFnZSM1MC4yMC4xOS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wMC4wMCNCZWVyIGFuZCB3aW5lIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjAxLjAwI0NoYW1wYWduZSM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wMi4wMCNCZWVyIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjAzLjAwI1dpbmUjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDQuMDAjU3BhcmtsaW5nIHdpbmVzIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjA1LjAwI0ZvcnRpZmllZCB3aW5lIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjA2LjAwI1BvcnQjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDcuMDAjU2hlcnJ5IzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjA4LjAwI1dpbmUgY29vbGVyIGJldmVyYWdlIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjAwLjAwI1NwaXJpdHMgYW5kIGxpcXVvcnMjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDEuMDAjQnJhbmR5IzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjAyLjAwI0NvZ25hYyBvciBhcm1hZ25hYyM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wMy4wMCNXaGlza2V5IzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA0LjAwI1ZvZGthIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA1LjAwI1RlcXVpbGEjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDYuMDAjR2luIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA3LjAwI0xpcXVldXJzIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA4LjAwI1J1bSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wOS4wMCNCb3VyYm9uIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjEwLjAwI1Njb3RjaCM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xMS4wMCNDaWRlciM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xMi4wMCNTY2huYXBwcyM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xMy4wMCNPdXpvIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjE0LjAwI0FwZXJpdGlmcyBvciBiaXR0ZXJzIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjE1LjAwI1Zlcm1vdXRoIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjE2LjAwI1NhbWJ1Y2EjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTcuMDAjU2FrZSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xOC4wMCNNdXNjYXQgb3IgbWFkZWlyYSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wMC4wMCNBbGNvaG9saWMgYmV2ZXJhZ2VzIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjAxLjAwI0JlZXIjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDIuMDAjQ2lkZXIgb3IgcGVycnkjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDMuMDAjV2luZSM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wNC4wMCNGb3J0aWZpZWQgd2luZSM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wNS4wMCNTcGFya2xpbmcgd2luZSM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wNi4wMCNTcGlyaXRzIG9yIGxpcXVvcnMjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDcuMDAjQWxjb2hvbCBjb2NrdGFpbHMgb3IgZHJpbmsgbWl4ZXMjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDAuMDAjTm9uIGFsY29ob2xpYyBiZXZlcmFnZXMjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDEuMDAjV2F0ZXIjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDIuMDAjSWNlIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjAzLjAwI0Zyb3plbiBqdWljZXMjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDQuMDAjU2hlbGYgc3RhYmxlIGp1aWNlIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA1LjAwI0ZyZXNoIGp1aWNlIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA2LjAwI1NvZnQgZHJpbmtzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA3LjAwI0Nob2NvbGF0ZSBvciBtYWx0IG9yIG90aGVyIGhvdCBiZXZlcmFnZXMjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDguMDAjQWxjb2hvbCBmcmVlIGNvY2t0YWlscyBvciBkcmluayBtaXhlcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wOS4wMCNTcG9ydCBkcmluayBtaXhlcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4xMC4wMCNTcHJpbmcgd2F0ZXIjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMDAuMDAuMDAjVG9iYWNjbyBhbmQgc21va2luZyBwcm9kdWN0cyBhbmQgc3Vic3RpdHV0ZXMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDAuMDAjVG9iYWNjbyBhbmQgc3Vic3RpdHV0ZXMjNTAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDEuMDAjVG9iYWNjbyBsZWFmIzUwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE1LjAyLjAwI0NpZ2FyZXR0ZXMgb3IgY2lnYXJzIzUwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE1LjAzLjAwI1BpcGUgdG9iYWNjbyBvciBsZWFmIHRvYmFjY28jNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDQuMDAjQ2hld2luZyB0b2JhY2NvIzUwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE1LjA1LjAwI0hlcmJhbCBjaWdhcmV0dGVzIzUwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjAwLjAwI1RvYmFjY28gcHJvZHVjdCBhY2Nlc3NvcmllcyBhbmQgc3VwcGxpZXMjNTAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDEuMDAjUGlwZSB0b2JhY2NvIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjAyLjAwI0NpZ2FycyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wMy4wMCNDaWdhcmV0dGVzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjA0LjAwI1Ntb2tlbGVzcyB0b2JhY2NvIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjA1LjAwI1JlYWR5IHJ1YmJlZCB0b2JhY2NvIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjA2LjAwI0NpZ2FyZXR0ZSBwYXBlcnMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDcuMDAjQ2lnYXJldHRlIHBhcGVycyBvciBmaWx0ZXJzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjA4LjAwI0NpZ2FyZXR0ZSBsaWdodGVycyBvciBmbGludHMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDkuMDAjU21va2luZyBwaXBlcyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMi4wMC4wMC4wMCNDZXJlYWwgYW5kIHB1bHNlIHByb2R1Y3RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEwLjAwLjAwI1B1bHNlcyM1MC4yMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMC4wMS4wMCNQdWxzZSBncmFpbnMjNTAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTAuMDIuMDAjUHVsc2UgZmxvdXIjNTAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTEuMDAuMDAjQ2VyZWFscyM1MC4yMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMS4wMS4wMCNDZXJlYWwgZ3JhaW5zIzUwLjIyLjExLjAwLjAwCi11bnNwc2M3IzUwLjIyLjExLjAyLjAwI0NlcmVhbCBmbG91ciM1MC4yMi4xMS4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMi4wMC4wMCNQcm9jZXNzZWQgY2VyZWFscyM1MC4yMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMi4wMS4wMCNSZWFkeSB0byBlYXQgb3IgaG90IGNlcmVhbHMjNTAuMjIuMTIuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTIuMDIuMDAjSGVhbHRoIG9yIGJyZWFrZmFzdCBiYXJzIzUwLjIyLjEyLjAwLjAwCi11bnNwc2M3IzUxLjAwLjAwLjAwLjAwI0RydWdzIGFuZCBQaGFybWFjZXV0aWNhbCBQcm9kdWN0cyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4wMC4wMC4wMCNBbnRpIGluZmVjdGl2ZSBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wMC4wMCNBbnRpYmlvdGljcyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wMS4wMCNBbWlub2dseWNvc2lkZXMjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDIuMDAjQ2VwaGFsb3Nwb3JpbnMjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDMuMDAjQ2hsb3JhbXBoZW5pY29sIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA0LjAwI0NsaW5kYW15Y2luIG9yIGxpbmNvbXljaW4jNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDUuMDAjRmx1b3JvcXVpbm9sb25lcyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wNi4wMCNNYWNyb2xpZGUjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDcuMDAjUGVuaWNpbGxpbnMjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDguMDAjQW50aWJpb3RpYyBzdWxmb25hbWlkZXMjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDkuMDAjVGV0cmFjeWNsaW5lcyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNi4wMC4wMCNBbWViaWNpZGVzIGFuZCBUcmljaG9tb25hY2lkZXMgYW5kIEFudGlwcm90b3pvYWxzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE2LjAxLjAwI0F0b3ZhcXVvbmUjNTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTYuMDIuMDAjRWZsb3JuaXRoaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTYuMDMuMDAjTWV0cm9uaWRhem9sZSM1MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wMC4wMCNBbnRoZWxtaW50aWNzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjAxLjAwI0FsYmVuZGFkb2xlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjAyLjAwI01lYmVuZGF6b2xlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjAzLjAwI094YW1uaXF1aW5lIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjA0LjAwI1BpcGVyYXppbmUgY2l0cmF0ZSM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wNS4wMCNQcmF6aXF1YW50ZWwjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDYuMDAjUHlyYW50ZWwgcGFtb2F0ZSM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wNy4wMCNUaGlhYmVuZGF6b2xlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjAwLjAwI0FudGlmdW5nYWwgZHJ1Z3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDEuMDAjQW1waG90ZXJpY2luIGIjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDIuMDAjQnV0ZW5hZmluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjAzLjAwI0J1dG9jb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA0LjAwI0NpY2xvcGlyb3ggb2xhbWluZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wNS4wMCNDbG90cmltYXpvbGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDYuMDAjRWNvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDcuMDAjRmx1Y29uYXpvbGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDguMDAjRmx1Y3l0b3NpbmUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDkuMDAjR3Jpc2VvZnVsdmluIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjEwLjAwI0l0cmFjb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xMS4wMCNLZXRvY29uYXpvbGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTIuMDAjTWljb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xMy4wMCNOYWZ0aWZpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xNC4wMCNOYXRhbXljaW4jNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTUuMDAjTnlzdGF0aW4jNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTYuMDAjT3hpY29uYXpvbGUgbml0cmF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xNy4wMCNTdWxjb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE4LjAwI1RlcmJpbmFmaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTkuMDAjVGVyY29uYXpvbGUgbml0cmF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4yMC4wMCNUaW9jb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4yMS4wMCNUb2xuYWZ0YXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjAwLjAwI0FudGltYWxhcmlhbCBkcnVncyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wMS4wMCNBbWlub3F1aW5vbGluZXMjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDIuMDAjTWVmbG9xdWluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjAzLjAwI1ByaW1hcXVpbmUgcGhvc3BoYXRlIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjA0LjAwI1F1aW5pbmUgc3VsZmF0ZSM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wNS4wMCNDaGxvcm9xdWluZSM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wNi4wMCNQcm9ndWFuaWwjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDcuMDAjUHlyaW1ldGhhbWluZSM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wMC4wMCNBbnRpdHViZXJjdWxhciBkcnVncyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wMS4wMCNDeWNsb3NlcmluZSM1MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wMi4wMCNFdGhhbWJ1dG9sIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDMuMDAjSXNvbmlhemlkIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjA0LjAwI1JpZnVidXRpbiM1MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wNS4wMCNSaWZhbXBpbiM1MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMS4wMC4wMCNMZXByb3N0YXRpY3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjEuMDEuMDAjQ2xvZmF6aW1pbmUjNTEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjEuMDIuMDAjRGFwc29uZSM1MS4xMC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wMC4wMCNVcmluYXJ5IGFudGkgaW5mZWN0aXZlcyBhbmQgYW5hbGdlc2ljcyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wMS4wMCNDaW5veGFjaW4jNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDIuMDAjRmxhdm94YXRlIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDMuMDAjTWV0aGVuYW1pbmUgaGlwcHVyYXRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA0LjAwI01ldGhlbmFtaW5lIG1hbmRlbGF0ZSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wNS4wMCNOYWxpZGl4aWMgYWNpZCM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wNi4wMCNOaXRyb2Z1cmFudG9pbiM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wNy4wMCNPeHlidXR5bmluIGNobG9yaWRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA4LjAwI1BlbnRvc2FuIHBvbHlzdWxmYXRlIHNvZGl1bSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wOS4wMCNQaGVuYXpvcHlyaWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4xMC4wMCNBbnRpc2VwdGljIHNvbHV0aW9ucyM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wMC4wMCNBbnRpdmlyYWwgZHJ1Z3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDEuMDAjQWN5Y2xvdmlyIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjAyLjAwI0FtYW50YWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wMy4wMCNDeWRvZm92aXIjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDQuMDAjRGlkYW5vc2luZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wNS4wMCNGYW1jaWNsb3ZpciM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wNi4wMCNGb3NjYXJuZXQgc29kaXVtIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA3LjAwI0dhbmNpY2xvdmlyIHNvZGl1bSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wOC4wMCNJZG94dXJpZGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wOS4wMCNJbmRpbmF2aXIgc3VsZmF0ZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xMC4wMCNMYW1pdnVkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjExLjAwI05ldmlyYXBpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTIuMDAjUmliYXZpcmluIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjEzLjAwI1JpbWFudGFkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTQuMDAjUml0b25hdmlyIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE1LjAwI1NhcXVpbmF2aXIgbWVzeWxhdGUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTYuMDAjU3RhdmlkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE3LjAwI1RyaWZsdXJhZGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xOC4wMCNWYWxhY3ljbG92aXIgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xOS4wMCNWaWRhcmFiaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjIwLjAwI1phbGNpdGFiaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjIxLjAwI1ppZG92dWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMDAuMDAuMDAjQW50aW5lb3BsYXN0aWMgYWdlbnRzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjAwLjAwI0Fsa3lsYXRpbmcgYWdlbnRzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjAxLjAwI0FtaWZvc3RpbmUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDIuMDAjQnVzdWxmYW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDMuMDAjQ2FyYm9wbGF0aW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDQuMDAjQ2FybXVzdGluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wNS4wMCNDaGxvcmFtYnVjaWwjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDYuMDAjQ2lzcGxhdGluIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA3LjAwI0N5Y2xvcGhvc3BoYW1pZGUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDguMDAjRGFjYXJiYXppbmUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDkuMDAjSWZvc2ZhbWlkZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xMC4wMCNMb211c3RpbmUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTEuMDAjTWVjaGxvcmV0aGFtaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTIuMDAjTWVscGhhbGFuIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjEzLjAwI01lc25hIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjE0LjAwI1BpcG9icm9tYW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTUuMDAjU3RyZXB0b3pvY2luIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjE2LjAwI1RoaW90ZXBhIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjE3LjAwI1VyYWNpbCBtdXN0YXJkIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjAwLjAwI0FudGltZXRhYm9saXRlcyM1MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wMS4wMCNDbGFkcmliaW5lIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjAyLjAwI0N5dGFyYWJpbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDMuMDAjRmxveHVyaWRpbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDQuMDAjRmx1ZGFyYWJpbmUgcGhvc3BoYXRlIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA1LjAwI0ZsdW9yb3VyYWNpbCM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wNi4wMCNIeWRyb3h5dXJlYSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wNy4wMCNJZGFydWJpY2luIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDguMDAjTGV2YW1pc29sZSBoeWRyb2NobG9yaWRlIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA5LjAwI01lcmNhcHRvcHVyaW5lIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjEwLjAwI01ldGhvdHJleGF0ZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4xMS4wMCNUZW5pcG9zaWRlIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjEyLjAwI1RoaW9ndWFuaW5lIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjAwLjAwI0FudGluZW9wbGFzdGljIGFudGliaW90aWNzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjAxLjAwI0JsZW9teWNpbiBzdWxmYXRlIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjAyLjAwI0RhY3Rpbm9teWNpbiM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wMy4wMCNEYXVub3J1YmljaW5zIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA0LjAwI01pdG9teWNpbiM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wNS4wMCNNaXRvdGFuZSM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wNi4wMCNNaXRveGFudHJvbmUgaHlkcm9jaGxvcmlkZSM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wNy4wMCNQZW50b3N0YXRpbiM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wOC4wMCNQbGljYW15Y2luIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjAwLjAwI0hvcm1vbmVzIGFuZCBhbnRpaG9ybW9uZXMjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDEuMDAjQW5hc3Ryb3pvbGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDIuMDAjQmljYWx1dGFtaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjAzLjAwI0VzdHJhbXVzdGluZSBwaG9zcGhhdGUgc29kaXVtIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA0LjAwI0ZsdXRhbWlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wNS4wMCNHb3NlcmVsaW4gYWNldGF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wNi4wMCNJcmlub3RlY2FuIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDcuMDAjTGV1cHJvbGlkZSBhY2V0YXRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA4LjAwI05pbHV0YW1pZGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDkuMDAjVGFtb3hpZmVuIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjEwLjAwI1Rlc3RvbGFjdG9uZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4xMS4wMCNUb3BvdGVjYW4gaHlkcm9jaGxvcmlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4xMi4wMCNWaW5ibGFzdGluZSBzdWxmYXRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjEzLjAwI1ZpbmNyaXN0aW5lIHN1bGZhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTQuMDAjVmlub3JlbGJpbmUgdGFydHJhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDAuMDAjTmF0dXJhbCBhbnRpbmVvcGxhc3RpYyBwcm9kdWN0cyM1MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wMS4wMCNBc3BhcmFnaW5hc2UjNTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDIuMDAjRG9jZXRheGVsIzUxLjExLjE5LjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjAzLjAwI0ludGVyZmVyb24jNTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDQuMDAjUGFjbGl0YXhlbCM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wNS4wMCNQb3JmaW1lciBzb2RpdW0jNTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMDAuMDAuMDAjQ2FyZGlvdmFzY3VsYXIgZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTUuMDAuMDAjQW50aWFycnl0aG1pYyBhZ2VudHMjNTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTUuMDEuMDAjQWRlbm9zaW5lIzUxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE1LjAyLjAwI0RpZ294aW4jNTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTUuMDMuMDAjUXVpbmlkaW5lIGdsdWNvbmF0ZSM1MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wMC4wMCNBbnRpYW5naW5hbCBkcnVncyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wMS4wMCNBbXlsIG5pdHJhdGUjNTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTYuMDIuMDAjSXNvc29yYmlkZSBkaW5pdHJhdGUjNTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTYuMDMuMDAjTml0cm9nbHljZXJpbiM1MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wNC4wMCNQZW50YWVyeXRocml0b2wgdGV0cmFuaXRyYXRlIzUxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjAwLjAwI0FudGloeXBlcnRlbnNpdmUgZHJ1Z3MjNTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDEuMDAjRGlhem94aWRlIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjAyLjAwI1RlcmF6b3NpbiM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wMy4wMCNDYXB0b3ByaWwjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDQuMDAjTGlzaW5vcHJpbCM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wNS4wMCNGZWxvZGlwaW5lIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA2LjAwI0lzcmFkaXBpbmUjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDcuMDAjVmVyYXBhbWlsIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA4LjAwI01ldGh5bGRvcGEjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDkuMDAjQ2FydmVkaWxvbCM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4xMC4wMCNMb3NhcnRhbiBwb3Rhc3NpdW0jNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMTEuMDAjTWlub3hpZGlsIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjAwLjAwI0FudGloeXBlcmxpcGlkZW1pYyBhbmQgaHlwb2Nob2xlc3Rlcm9sZW1pYyBhZ2VudHMjNTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDEuMDAjRmx1dmFzdGF0aW4gc29kaXVtIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjAyLjAwI0xvdmFzdGF0aW4jNTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDMuMDAjU2ltdmFzdGF0aW4jNTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDQuMDAjQ2xvZmlicmF0ZSM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wNS4wMCNHZW1maWJyb3ppbCM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOS4wMC4wMCNEcnVncyB1c2VkIGZvciBjb25nZXN0aXZlIGhlYXJ0IGZhaWx1cmUjNTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTkuMDEuMDAjQW1yaW5vbmUgbGFjdGF0ZSM1MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOS4wMi4wMCNNaWxyaW5vbmUgbGFjdGF0ZSM1MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOS4wMy4wMCNEaWdpdG94aW4jNTEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMDAuMDAuMDAjSGVtYXRvbGljIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEzLjE1LjAwLjAwI0FudGlhbmVtaWMgZHJ1Z3MjNTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTUuMDEuMDAjRmVycm91cyBmdW1hcmF0ZSM1MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNS4wMi4wMCNGZXJyb3VzIGdsdWNvbmF0ZSM1MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNS4wMy4wMCNGZXJyb3VzIHN1bGZhdGUjNTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTYuMDAuMDAjQW50aWNvYWd1bGFudHMjNTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTYuMDEuMDAjQXByb3RpbmluIzUxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjAyLjAwI0hlcGFyaW4gY2FsY2l1bSM1MS4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wMy4wMCNIZXBhcmluIHNvZGl1bSM1MS4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wNC4wMCNXYXJmYXJpbiBzb2RpdW0jNTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTcuMDAuMDAjVGhyb21ib2x5dGljIGRydWdzIGFuZCBwbGF0ZWxldCBhZ2dyZWdhdGlvbiBpbmhpYml0b3JzIzUxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjAxLjAwI0FiY2l4aW1hYiM1MS4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wMi4wMCNBbHRlcGxhc2UjNTEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTcuMDMuMDAjU3RyZXB0b2tpbmFzZSM1MS4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wNC4wMCNVcm9raW5hc2UjNTEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMDAuMDAuMDAjQ2VudHJhbCBuZXJ2b3VzIHN5c3RlbSBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wMC4wMCNBbnRpY29udnVsc2FudHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDEuMDAjQWNldGF6b2xhbWlkZSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wMi4wMCNDbG9uYXplcGFtIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjAzLjAwI0ZlbGJhbWF0ZSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wNC4wMCNMYW1vdHJpZ2luZSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wNS4wMCNQaGVub2JhcmJpdGFsIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA2LjAwI1BoZW5vYmFyYml0YWwgc29kaXVtIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA3LjAwI1BoZW55dG9pbiM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wOC4wMCNFdGhvc3V4aW1pZGUjNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDAuMDAjQW50aWRlcHJlc3NhbnRzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjAxLjAwI0FtaXRyaXB0eWxpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wMi4wMCNEb3hlcGluIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDMuMDAjSW1pcHJhbWluZSBwYW1vYXRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjA0LjAwI01pcnRhemFwaW5lIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjA1LjAwI1Bhcm94ZXRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wNi4wMCNUcmF6b2RvbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNy4wMC4wMCNBbnRpcHN5Y2hvdGljIGFnZW50cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNy4wMS4wMCNQaGVub3RoaWF6aW5lcyM1MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNy4wMi4wMCNIYWxvcGVyaWRvbCM1MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNy4wMy4wMCNPbGFuemFwaW5lIzUxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjA0LjAwI1Jpc3Blcmlkb25lIzUxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjAwLjAwI0h5cG5vdGljcyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wMS4wMCNQZW50b2JhcmJpdGFsIzUxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjAyLjAwI1NlY29iYXJiaXRhbCBzb2RpdW0jNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDMuMDAjQ2hsb3JhbCBoeWRyYXRlIzUxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjA0LjAwI0VzdGF6b2xhbSM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wNS4wMCNUcmlhem9sYW0jNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDAuMDAjVHJhbnF1aWxpemVycyBhbmQgYW50aW1hbmljIGRydWdzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjAxLjAwI0FscHJhem9sYW0jNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDIuMDAjRGlhemVwYW0jNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDMuMDAjTGl0aGl1bSBjYXJib25hdGUjNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDQuMDAjTGl0aGl1bSBjaXRyYXRlIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjA1LjAwI01pZGF6b2xhbSBoeWRyb2NobG9yaWRlIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjA2LjAwI1RlbWF6ZXBhbSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wMC4wMCNOb24gbmFyY290aWMgYW5hbGdlc2ljcyBhbmQgYW50aXB5cmV0aWNzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjAxLjAwI0FjZXRhbWlub3BoZW4jNTEuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjAuMDIuMDAjQWNldHlsc2FsaWN5bGljIGFjaWQjNTEuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjAuMDMuMDAjTWVzYWxhbWluZSM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wNC4wMCNNZXByb2Jyb21hdGUjNTEuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDAuMDAjTm9uc3Rlcm9pZGFsIGFudGkgaW5mbGFtbWF0b3J5IGRydWdzIChOU0FJRHMpIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjAxLjAwI0F1cmFub2ZpbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wMi4wMCNDYXJwb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wMy4wMCNEaWNsb2ZlbmFjIHBvdGFzc2l1bSM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wNC4wMCNEaWNsb2ZlbmFjIHNvZGl1bSM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wNS4wMCNGbHVyYmlwcm9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDYuMDAjSWJ1cHJvZmVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA3LjAwI0luZG9tZXRoYWNpbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wOC4wMCNLZXRvcHJvZmVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA5LjAwI05hcHJveGVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjEwLjAwI05hcHJveGVuIHNvZGl1bSM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4xMS4wMCNPeGFwcm96aW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMTIuMDAjU3VsaW5kYWMjNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMTMuMDAjU3Vwcm9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDAuMDAjTmFyY290aWMgYW5hbGdlc2ljcyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wMS4wMCNCdXRvcnBoYW5vbCB0YXJ0cmF0ZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wMi4wMCNDb2RlaW5lIHBob3NwaGF0ZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wMy4wMCNDb2RlaW5lIHN1bGZhdGUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDUuMDAjTWVwZXJpZGluZSBoeWRyb2NobG9yaWRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjA2LjAwI01vcnBoaW5lIHN1bGZhdGUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDcuMDAjT3h5Y29kb25lIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjA4LjAwI1N1ZmVudGFuaWwjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjMuMDAuMDAjTmFyY290aWMgYW50YWdvbmlzdHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjMuMDEuMDAjTmFsbWVmZW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjMuMDIuMDAjTmFsb3hvbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMy4wMCNOYWx0cmV4b25lIzUxLjE0LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE0LjI0LjAwLjAwI0RydWdzIHVzZWQgZm9yIHZhc2N1bGFyIGFuZCBtaWdyYWluZSBoZWFkYWNoZXMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjQuMDEuMDAjTWV0aHlzZXJnaWRlIG1hbGVhdGUjNTEuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjQuMDIuMDAjU3VtYXRyaXB0YW4gc3VjY2luYXRlIzUxLjE0LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI1LjAwLjAwI0FudGlwYXJraW5zb24gZHJ1Z3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjUuMDEuMDAjQnJvbW9jcmlwdGluZSBtZXN5bGF0ZSM1MS4xNC4yNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wMi4wMCNDYXJiaWRvcGEjNTEuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjUuMDMuMDAjTGV2b2RvcGEjNTEuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjUuMDQuMDAjU2VsZWdpbGluZSBoeWRyb2NobG9yaWRlIzUxLjE0LjI1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI2LjAwLjAwI1N0aW11bGFudHMgYW5kIGFub3JleGlhbnRzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjI2LjAxLjAwI0FtcGhldGFtaW5lIHN1bGZhdGUjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDIuMDAjRmVuZmx1cmFtaW5lIzUxLjE0LjI2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI2LjAzLjAwI01hemluZG9sIzUxLjE0LjI2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI2LjA0LjAwI1BlbW9saW5lIzUxLjE0LjI2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI2LjA1LjAwI1BoZW5kaW1ldHJhemluZSB0YXJ0cmF0ZSM1MS4xNC4yNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4wMC4wMC4wMCNBdXRvbm9taWMgbmVydm91cyBzeXN0ZW0gZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTUuMDAuMDAjQ2hvbGluZXJnaWMgZHJ1Z3MgYW5kIGNob2xpbmVzdGVyYXNlIGluaGliaXRvcnMjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTUuMDEuMDAjQmV0aGFuZWNob2wgY2hsb3JpZGUjNTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTUuMDIuMDAjRWRyb3Bob25pdW0gY2hsb3JpZGUjNTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTUuMDMuMDAjUGh5c29zdGlnbWluZSBzYWxpY3lsYXRlIzUxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE1LjA0LjAwI1BpbG9jYXJwaW5lIG5pdHJhdGUjNTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTYuMDAuMDAjQ2hvbGluZXJnaWMgYmxvY2tpbmcgYWdlbnRzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE2LjAxLjAwI0F0cm9waW5lIHN1bGZhdGUjNTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTYuMDIuMDAjQmVuenRyb3BpbmUgbWVzeWxhdGUjNTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTYuMDMuMDAjUHJvY3ljbGlkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTYuMDQuMDAjVHJpaGV4eXBoZW5pZHlsIGh5ZHJvY2hsb3JpZGUjNTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDAuMDAjU3ltcGF0aG9taW1ldGljIG9yIGFkcmVuZXJnaWMgZHJ1Z3MjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDEuMDAjQWxidXRlcm9sIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjAyLjAwI0JyaW1vbmlkaW5lIHRhcnRyYXRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjAzLjAwI0VwaW5lcGhyaW5lIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA0LjAwI0VwaW5lcGhyaW5lIGJvcmF0ZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wNS4wMCNFcGluZXBocmluZSBoeWRyb2NobG9yaWRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA2LjAwI0lzb3Byb3RlcmVub2wjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDcuMDAjSXNvcHJvdGVyZW5vbCBzdWxmYXRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA4LjAwI0xldmFydGVyZW5vbCBiaXRhcnRyYXRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA5LjAwI1BoZW55bHByb3Bhbm9sYW1pbmUgaHlkcm9jaGxvcmlkZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wMC4wMCNBZHJlbmVyZ2ljIGJsb2NraW5nIGFnZW50cyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wMS4wMCNBdGVub2xvbCM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wMi4wMCNFc21vbG9sIGh5ZHJvY2hsb3JpZGUjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMDMuMDAjTmFkb2xvbCM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wNC4wMCNQaW5kb2xvbCM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wNS4wMCNUaW1vbG9sIG1hbGVhdGUjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMTAuMDAjUGhlbnRvbGFtaW5lIG1lc3lsYXRlIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjAwLjAwI1NrZWxldGFsIG11c2NsZSByZWxheGFudHMgYW5kIGNlbnRyYWxseSBhY3RpbmcjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDEuMDAjQmFjbG9mZW4jNTEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDIuMDAjQ2hsb3J6b3hhem9uZSM1MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wMy4wMCNEYW50cm9sZW5lIHNvZGl1bSM1MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wNC4wMCNNZXRob2NhcmJhbW9sIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjA1LjAwI0Nhcmlzb3Byb2RvbCM1MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNS4yMC4wMC4wMCNOZXVyb211c2N1bGFyIGJsb2NraW5nIGFnZW50cyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4yMC4wMS4wMCNBdHJhY3VyaXVtIGJlc3lsYXRlIzUxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjAyLjAwI01pdmFjdXJpdW0gY2h5bG9yaWRlIzUxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjAzLjAwI1JvY3Vyb25pdW0gYnJvbWlkZSM1MS4xNS4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4yMC4wNC4wMCNWZWN1cm9uaXVtIGJyb21pZGUjNTEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMDAuMDAuMDAjRHJ1Z3MgYWZmZWN0aW5nIHRoZSByZXNwaXJhdG9yeSB0cmFjdCM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wMC4wMCNBbnRpYXN0aG1hdGljIGRydWdzIzUxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjAxLjAwI0JpdG9sdGVyb2wgbWVzeWxhdGUjNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDIuMDAjTmVkb2Nyb21pbCBzb2RpdW0jNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDMuMDAjUGlyYnV0ZXJvbCBhY2V0YXRlIzUxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjA0LjAwI0FtaW5vcGh5bGxpbmUjNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDUuMDAjVGhlb3BoeWxsaW5lIzUxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjAwLjAwI0FudGloaXN0YW1pbmVzIG9yIEgxIGJsb2NrZXJzIzUxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjAxLjAwI0FzdGVtaXpvbGUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDIuMDAjQ2xlbWFzdGluZSBmdW1hcmF0ZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wMy4wMCNEZXhjaGxvcnBoZW5pcmFtaW5lIG1hbGVhdGUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDQuMDAjRGltZW5oeWRyaW5hdGUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDUuMDAjTGV2b2NhYmFzdGluZSBoeWRyb2NobG9yaWRlIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjA2LjAwI0xvcmF0aWRpbmUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDcuMDAjVGVyZmVuYWRpbmUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDAuMDAjRHJ1Z3MgdXNlZCBmb3IgcmVzcGlyYXRvcnkgdHJhY3QgZGlzb3JkZXJzIzUxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjAxLjAwI0FjZXR5bGN5c3RlaW5lIzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjAyLjAwI0JlcmFjdGFudCM1MS4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wMy4wMCNCdWRlc29uaWRlIzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjA0LjAwI0NvbGZvc2NlcmlsIHBhbG1pdGF0ZSM1MS4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wNS4wMCNJcHJhdHJvcGl1bSBicm9taWRlIzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE4LjAwLjAwI0NvdWdoIGFuZCBjb2xkIGFuZCBhbnRpYWxsZXJneSBwcm9kdWN0cyM1MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOC4wMS4wMCNCZW56b25hdGF0ZSM1MS4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOC4wMi4wMCNHdWFpZmVuZXNpbiM1MS4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOS4wMC4wMCNOYXNhbCBkZWNvbmdlc3RhbnRzIzUxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAxLjAwI094eW1ldGF6b2xpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOS4wMi4wMCNQc2V1ZG9lcGhlZHJpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOS4wMy4wMCNYeWxvbWV0YXpvbGluZSBoeWRyb2NobG9yaWRlIzUxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjAwLjAwLjAwI0RydWdzIGFmZmVjdGluZyB0aGUgZ2FzdHJvaW50ZXN0aW5hbCBzeXN0ZW0jNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTUuMDAuMDAjQW50YWNpZHMjNTEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTUuMDEuMDAjQ2FsY2l1bSBjYXJib25hdGUjNTEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTUuMDIuMDAjTWFnYWxkcmF0ZSM1MS4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMy4wMCNNYWduZXNpdW0gaHlkcm94aWRlIzUxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE1LjA0LjAwI1NvZGl1bSBiaWNhcmJvbmF0ZSBhbnRhY2lkcyM1MS4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wMC4wMCNMYXhhdGl2ZXMjNTEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDEuMDAjQ2FzY2FyYSBzYWdyYWRhIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjAyLjAwI0RvY3VzYXRlIGNhbGNpdW0jNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDMuMDAjRG9jdXNhdGUgcG90YXNzaXVtIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjA0LjAwI0RvY3VzYXRlIHNvZGl1bSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wNS4wMCNMYWN0dWxvc2UjNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDYuMDAjTWFnbmVzaXVtIHN1bGZhdGUjNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDcuMDAjUHN5bGxpdW0gaHlkcm9waGlsaWMgbXVjaWxvaWQjNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTcuMDAuMDAjQW50aWRpYXJyaGVhbHMjNTEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTcuMDEuMDAjRGlmZW5veGluIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTcuMDIuMDAjTG9wZXJhbWlkZSBoeWRyb2NobG9yaWRlIzUxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE3LjAzLjAwI1BhcmVnb3JpYyM1MS4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wMC4wMCNBbnRpZW1ldGljcyBhbmQgYW50aW5hdXNlYW50cyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wMS4wMCNEcm9uYWJpbm9sIzUxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjAyLjAwI0dyYW5pc2V0cm9uIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDMuMDAjTWVjbGl6aW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDQuMDAjT25kYW5zZXRyb24gaHlkcm9jaGxvcmlkZSM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wNS4wMCNUcmltZXRob2JlbnphbWlkZSBoeWRyb2NobG9yaWRlIzUxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjAwLjAwI0FudGl1bGNlciBhbmQgcmVsYXRlZCBnYXN0cm9pbnRlc3RpbmFsIChHSSkgZHJ1Z3MjNTEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDEuMDAjQ2ltZXRpZGluZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wMi4wMCNGYW1vdGlkaW5lIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjAzLjAwI05pemF0aWRpbmUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDQuMDAjUmFuaXRpZGluZSBoeWRyb2NobG9yaWRlIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjA1LjAwI0Npc2FwcmlkZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wNi4wMCNMYW5zb3ByYXpvbGUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDcuMDAjTGlicmF4IzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjA4LjAwI01pc29wcm9zdG9sIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjIwLjAwLjAwI0RydWdzIHVzZWQgZm9yIGdhbGxibGFkZGVyIGRpc2Vhc2UjNTEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDEuMDAjQ2hlbm9kaW9sIzUxLjE3LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjIwLjAyLjAwI01vbm9jdGFub2luIzUxLjE3LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjIwLjAzLjAwI1Vyc29kaW9sIzUxLjE3LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjAwLjAwLjAwI0hvcm1vbmVzIGFuZCBob3Jtb25lIGFudGFnb25pc3RzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjAwLjAwI0FudGlkaWFiZXRpYyBhZ2VudHMgYW5kIGh5cGVyZ2x5Y2VtaWMgYWdlbnRzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjAxLjAwI0FjYXJib3NlIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjAyLjAwI0FjZXRvaGV4YW1pZGUjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDMuMDAjQ2hsb3Jwcm9wYW1pZGUjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDQuMDAjR2xpbWVwaXJpZGUjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDUuMDAjR2xpcGl6aWRlIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjA2LjAwI0luc3VsaW4jNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDguMDAjR2x1Y2Fnb24jNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDAuMDAjVGh5cm9pZCBhbmQgYW50aXRoeXJvaWQgZHJ1Z3MjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDEuMDAjTGV2b3RoeXJveGluZSBzb2RpdW0jNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDIuMDAjTGlvdGh5cm9uaW5lIHNvZGl1bSM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMy4wMCNMaW90cml4IzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjA0LjAwI1RoeXJvdHJvcGluIzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjA1LjAwI01ldGhpbWF6b2xlIzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjA2LjAwI1Byb3B5bHRoaW91cmFjaWwjNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDAuMDAjQ29ydGljb3N0ZXJvaWRzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjAxLjAwI0JldGFtZXRoYXNvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDIuMDAjQ29ydGljb3Ryb3BpbiM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wMy4wMCNDb3N5bnRyb3BpbiM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wNC4wMCNEZXhhbWV0aGFzb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA1LjAwI0ZsdW5pc29saWRlIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA2LjAwI0h5ZHJvY29ydGlzb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA3LjAwI01ldGh5bHByZWRuaXNvbG9uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wOC4wMCNQcmVkbmlzb2xvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDkuMDAjVHJpYW1jaW5vbG9uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wMC4wMCNFc3Ryb2dlbnMgYW5kIHByb2dlc3RpbnMgYW5kIGludGVybmFsIGNvbnRyYWNlcHRpdmVzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjAxLjAwI0NobG9yb3RyaWFuaXNlbmUjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDIuMDAjRXN0cm9uZSM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wMy4wMCNFc3Ryb2dlbnMgY29uanVnYXRlZCM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wNC4wMCNFc3Ryb3BpcGF0ZSM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wNS4wMCNMZXZvbm9yZ2VzdHJlbCM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wNi4wMCNNZWdlc3Ryb2wgYWNldGF0ZSM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wNy4wMCNFdGhpbnlsIGVzdHJhZGlvbCM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wOC4wMCNNZXN0cmFub2wjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDAuMDAjR29uYWRvdHJvcGljIGhvcm1vbmVzIGFuZCBvdmFyaWFuIHN0aW11bGFudHMgYW5kIGluaGliaXRvcnMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDEuMDAjQ2hvcmlvbmljIGdvbmFkb3Ryb3BpbiM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wMi4wMCNEYW5hem9sIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjAzLjAwI0dvbmFkb3JlbGluIGFjZXRhdGUjNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDQuMDAjSGlzdHJlbGluIGFjZXRhdGUjNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDUuMDAjTWVub3Ryb3BpbnMjNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDYuMDAjVXJvZm9sbGl0cm9waW4jNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDAuMDAjQW5kcm9nZW5zIGFuZCBhbmRyb2dlbiBpbmhpYml0b3JzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjAxLjAwI0ZpbmFzdGVyaWRlIzUxLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjAyLjAwI1Rlc3Rvc3Rlcm9uZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wMy4wMCNUZXN0b3N0ZXJvbmUgY3lwaW9uYXRlIzUxLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjA0LjAwI1Rlc3Rvc3Rlcm9uZSBlbmFudGhhdGUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDUuMDAjVGVzdG9zdGVyb25lIHByb3Bpb25hdGUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjEuMDAuMDAjUG9zdGVyaW9yIHBpdHVpdGFyeSBob3Jtb25lcyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMS4wMS4wMCNEZXNtb3ByZXNzaW4gYWNldGF0ZSM1MS4xOC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMS4wMi4wMCNWYXNvcHJlc3NpbiM1MS4xOC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMi4wMC4wMCNEcnVncyBmb3IgaW5kdWNpbmcgbGFib3IjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjIuMDEuMDAjRGlub3Byb3N0b25lIzUxLjE4LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIyLjAyLjAwI01ldGh5bGVyZ29ub3ZpbmUgbWFsZWF0ZSM1MS4xOC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMi4wMy4wMCNPeHl0b2NpbiM1MS4xOC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMy4wMC4wMCNHcm93dGggaG9ybW9uZXMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjMuMDEuMDAjU29tYXRyZW0jNTEuMTguMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjMuMDIuMDAjU29tYXRyb3BpbiM1MS4xOC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wMC4wMCNDYWxjaXVtIHNhbHRzIGFuZCBjYWxjaXVtIHJlZ3VsYXRvcnMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDEuMDAjQ2FsY2l1bSBjaGxvcmlkZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wMi4wMCNDYWxjaXVtIGNpdHJhdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDMuMDAjQ2FsY2l1bSBnbHVjb25hdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDQuMDAjQ2FsY2l1bSBsYWN0YXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA1LjAwI0RpYmFzZSBjYWxjaXVtIHBob3NwaGF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wNi4wMCNBbGVuZHJvbmF0ZSBzb2RpdW0jNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDcuMDAjQ2FsY2l0b25pbiM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wOC4wMCNDZWxsdWxvc2Ugc29kaXVtIHBob3NwaGF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wOS4wMCNHYWxsaXVtIG5pdHJhdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMDAuMDAuMDAjQWdlbnRzIGFmZmVjdGluZyB3YXRlciBhbmQgZWxlY3Ryb2x5dGVzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAwLjAwI0RpdXJldGljcyM1MS4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wMS4wMCNDaGxvcm90aGlhemlkZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wMi4wMCNDaGxvcnRoYWxpZG9uZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wMy4wMCNNZW50b2xhem9uZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wNC4wMCNCdW1ldGFuaWRlIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA1LjAwI0V0aGFjcnluYXRlIHNvZGl1bSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wNi4wMCNBbWlsb3JpZGUgaHlkcm9jaGxvcmlkZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wNy4wMCNTcGlyb25vbGFjdG9uZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wOC4wMCNUcmlhbXRlcmVuZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wOS4wMCNNYW5uaXRvbCM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNi4wMC4wMCNFbGVjdHJvbHl0ZXMjNTEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTYuMDEuMDAjRGV4dHJvc2UjNTEuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTYuMDIuMDAjU29kaXVtIGNobG9yaWRlIGVsZWN0cm9seXRlcyM1MS4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNy4wMC4wMCNBbGthbGluaXppbmcgYWdlbnRzIzUxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE5LjE3LjAxLjAwI1Ryb21ldGhhbWluZSM1MS4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOS4xOC4wMC4wMCNQb3Rhc3NpdW0gc2FsdHMjNTEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTguMDEuMDAjUG90YXNzaXVtIGJpY2FyYm9uYXRlIzUxLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE4LjAyLjAwI1BvdGFzc2l1bSBjaGxvcmlkZSM1MS4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xOC4wMy4wMCNQb3Rhc3NpdW0gZ2x1Y29uYXRlIzUxLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUxLjIwLjAwLjAwLjAwI0ltbXVub21vZHVsYXRpbmcgZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDAuMDAjSW1tdW5vc3VwcHJlc3NhbnRzIzUxLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIwLjE1LjAxLjAwI0F6YXRoaW9wcmluZSM1MS4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wMi4wMCNDeWNsb3Nwb3JpbmUjNTEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDMuMDAjTXljb3BoZW5vbGF0ZSBtb2ZldGlsIzUxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE1LjA0LjAwI1RhY3JvbGltdXMjNTEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDAuMDAjVmFjY2luZXMjNTEuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDEuMDAjQW50aHJheCBhbnRpZ2VuIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjAyLjAwI0JydWNlbGxhIGFudGlnZW4jNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDMuMDAjQ2hvbGVyYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wNC4wMCNEaXBodGVyaWEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDUuMDAjRW5jZXBoYWxpdGlzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA2LjAwI0hlbW9waGlsdXMgaW5mbHVlbnphZSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wNy4wMCNIZXBhdGl0aXMgYiM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wOC4wMCNJbmZsdWVuemEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDkuMDAjTWVhc2xlcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xMC4wMCNNZW5pbmdvY29jY3VzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjExLjAwI01vcmJpbGxpIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjEyLjAwI011bXBzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjEzLjAwI1Bhcm90aXRpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xNC4wMCNQZXJ0dXNzaXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTUuMDAjUG5ldW1vY29jY3VzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE2LjAwI1BvbGlvbXllbGl0aXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTcuMDAjUmFiaWVzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE4LjAwI1JvdGEgdmlydXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTkuMDAjUnViZWxsYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yMC4wMCNTbWFsbHBveCM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yMS4wMCNUZXRhbnVzIHRveG9pZCM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yMi4wMCNUdWJlcmN1bG9zaXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjMuMDAjVHlwaG9pZCM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yNC4wMCNWYXJpY2VsbGEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjUuMDAjWWVsbG93IGZldmVyIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjI2LjAwI0hlcGF0aXRpcyBhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjAwLjAwLjAwI01pc2NlbGxhbmVvdXMgZHJ1ZyBjYXRlZ29yaWVzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIxLjE1LjAwLjAwI0FudGlnb3V0IGRydWdzIzUxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIxLjE1LjAxLjAwI0FsbG9wdXJpbm9sIzUxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE1LjAyLjAwI0NvbGNoaWNpbmUjNTEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDMuMDAjUHJvYmVuZWNpZCM1MS4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNS4wNC4wMCNTdWxmaW5weXJhem9uZSM1MS4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wMC4wMCNBbnRpZG90ZXMjNTEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDEuMDAjRGVmZXJveGFtaW5lIG1lc3lsYXRlIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjAyLjAwI0RleHJhem94YW5lIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjAzLjAwI0RpZ294aW4gaW1tdW5lIGZhYiM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wNC4wMCNEaW1lcmNhcHJvbCM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wNS4wMCNFZGV0YXRlIGRpc29kaXVtIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA2LjAwI0ZsdW1hemVuaWwjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDcuMDAjSXBlY2FjIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA4LjAwI1BlbmljaWxsYW1pbmUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDkuMDAjUHJvdGFtaW5lIHN1bGZhdGUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMTAuMDAjU29kaXVtIHBvbHlzdHlyZW5lIHN1bGZvbmF0ZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4xMS4wMCNUcmllbnRpbmUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTcuMDAuMDAjTnV0cml0aW91cyBmb29kIzUxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIxLjE3LjAxLjAwI1Jlc2lkdWUgb2YgbWFpemUgZ2VybSM1MS4yMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4yMS4xOC4wMC4wMCNBbmFlc3RoZXRpYyBkcnVncyM1MS4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMS4xOC4wMS4wMCNDaGxvcm9mb3JtIzUxLjIxLjE4LjAwLjAwCi11bnNwc2M3IzUyLjAwLjAwLjAwLjAwI0RvbWVzdGljIEFwcGxpYW5jZXMgYW5kIFN1cHBsaWVzIGFuZCBDb25zdW1lciBFbGVjdHJvbmljIFByb2R1Y3RzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEwLjAwLjAwLjAwI0Zsb29yIGNvdmVyaW5ncyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wMC4wMCNSdWdzIGFuZCBtYXRzIzUyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjAxLjAwI09yaWVudGFsIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDIuMDAjQXJlYSBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjAzLjAwI1dvb2wgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wNC4wMCNDb3R0b24gcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wNS4wMCNTeW50aGV0aWMgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wNi4wMCNCcmFpZGVkIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDcuMDAjQmF0aCBtYXRzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA4LjAwI0Rvb3IgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wOS4wMCNEZWNvcmF0aXZlIG1hdHMjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMTAuMDAjQW50aSBmYXRpZ3VlIG1hdHMjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMTEuMDAjUnViYmVyIG9yIHZpbnlsIG1hdHMjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMTIuMDAjQ2hhaXIgbWF0IzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjEzLjAwI0NhcnBldCBwcm90ZWN0b3IjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMDAuMDAuMDAjQWNjb21tb2RhdGlvbiBmdXJuaXR1cmUjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDAuMDAjRnVybml0dXJlIzUyLjExLjAwLjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjAxLjAwI1NvZmFzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjAyLjAwI1N0YW5kcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wMy4wMCNCb29rY2FzZXMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDQuMDAjRW50ZXJ0YWlubWVudCBjZW50ZXJzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA1LjAwI0Z1dG9ucyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wNi4wMCNDaGFpcnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDcuMDAjQ29hdCByYWNrcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wOC4wMCNXYWxsIHJhY2tzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA5LjAwI01hdHRyZXNzZXMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTAuMDAjQ290cyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xMS4wMCNCZWRzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjEyLjAwI0Zvb3Qgc3Rvb2xzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjEzLjAwI1RhYmxlcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xNC4wMCNDaGVzdHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTUuMDAjU3Rvb2xzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjE2LjAwI0RyZXNzZXJzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjE3LjAwI1BhcnRpdGlvbnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTYuMDAuMDAjT3V0ZG9vciBmdXJuaXR1cmUjNTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTYuMDEuMDAjT3V0ZG9vciBjaGFpcnMjNTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTYuMDIuMDAjT3V0ZG9vciB0YWJsZXMgb3IgcGljbmljIHRhYmxlcyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMy4wMCNPdXRkb29yIHN3aW5ncyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wNC4wMCNPdXRkb29yIGJlbmNoZXMjNTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTYuMDUuMDAjT3V0ZG9vciB1bWJyZWxsYXMjNTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTcuMDAuMDAjT2ZmaWNlIGZ1cm5pdHVyZSM1Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNy4wMS4wMCNDcmVkZW56YXMjNTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTcuMDMuMDAjRGVza3MjNTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMDAuMDAuMDAjQmVkY2xvdGhlcyBhbmQgdGFibGUgYW5kIGtpdGNoZW4gbGluZW4gYW5kIHRvd2VscyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wMC4wMCNCZWRjbG90aGVzIzUyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjAxLjAwI1F1aWx0cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wMi4wMCNDb21mb3J0ZXJzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjAzLjAwI0NvbWZvcnRlciBjb3ZlcnMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDQuMDAjTWF0dHJlc3MgY292ZXJzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA1LjAwI1BpbGxvd3MjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDYuMDAjTWF0dHJlc3MgcGFkcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wNy4wMCNGZWF0aGVyYmVkcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wOC4wMCNCbGFua2V0cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wOS4wMCNTaGVldHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMTAuMDAjRHVzdCBydWZmbGVzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjExLjAwI0R1dmV0cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4xMi4wMCNQaWxsb3cgY2FzZXMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMTMuMDAjQmVkIHNwcmVhZHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDAuMDAjVGFibGUgYW5kIGtpdGNoZW4gbGluZW4jNTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDEuMDAjRGlzaCB0b3dlbHMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDIuMDAjTmFwa2lucyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMy4wMCNUYWJsZSBydW5uZXJzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjA0LjAwI1RhYmxlIGNsb3RocyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wNS4wMCNEb21lc3RpYyBvdmVuIG1pdHMgb3IgcG90IGhvbGRlcnMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDYuMDAjUGxhY2UgbWF0cyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wNy4wMCNUYWJsZSBza2lydHMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDAuMDAjVG93ZWxzIzUyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjAxLjAwI0JhdGggdG93ZWxzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjAyLjAwI0JlYWNoIHRvd2VscyM1Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNy4wMy4wMCNXYXNoIGNsb3RocyM1Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNy4wNC4wMCNIYW5kIHRvd2VscyM1Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMy4wMC4wMC4wMCNXaW5kb3cgdHJlYXRtZW50cyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNS4wMC4wMCNDdXJ0YWlucyBhbmQgZHJhcGVyaWVzIzUyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEzLjE1LjAxLjAwI0N1cnRhaW5zIzUyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE1LjAzLjAwI0RyYXBlcmllcyM1Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wMC4wMCNCbGluZHMgYW5kIHNoYWRlcyM1Mi4xMy4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wMS4wMCNWZW5ldGlhbiBibGluZHMjNTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTYuMDIuMDAjUm9sbCB1cCBzaGFkZXMjNTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTYuMDMuMDAjSW50ZXJpb3Igc2h1dHRlcnMjNTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTYuMDQuMDAjVmVydGljYWwgYmxpbmRzIzUyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjAwLjAwI1dpbmRvdyB0cmVhdG1lbnQgYWNjZXNzb3JpZXMgYW5kIGhhcmR3YXJlIzUyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjAxLjAwI1ZhbGFuY2VzIzUyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjAyLjAwI0N1cnRhaW4gcm9kcyM1Mi4xMy4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNy4wMy4wMCNSb2QgZmluaWFscyM1Mi4xMy4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNy4wNC4wMCNDdXJ0YWluIHJpbmdzIG9yIGNsaXBzIzUyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjAwLjAwLjAwI0RvbWVzdGljIGFwcGxpYW5jZXMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDAuMDAjRG9tZXN0aWMga2l0Y2hlbiBhcHBsaWFuY2VzIzUyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjAxLjAwI0RvbWVzdGljIHJlZnJpZ2VyYXRvcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDIuMDAjRG9tZXN0aWMgbWljcm93YXZlIG92ZW5zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjAzLjAwI0RvbWVzdGljIGdhcmJhZ2UgZGlzcG9zYWxzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA0LjAwI0RvbWVzdGljIHJhbmdlcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wNS4wMCNEb21lc3RpYyBkaXNoIHdhc2hlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDYuMDAjRG9tZXN0aWMgZnJlZXplcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDcuMDAjRG9tZXN0aWMgdXByaWdodCBmcmVlemVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wOC4wMCNEb21lc3RpYyBjaGVzdCBmcmVlemVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wOS4wMCNEb21lc3RpYyBjb21iaW5hdGlvbiByZWZyaWdlcmF0b3IgZnJlZXplcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTAuMDAjRG9tZXN0aWMgcG9ydGFibGUgYWlyIGNvbmRpdGlvbmVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xMS4wMCNEb21lc3RpYyBqdWljZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjEyLjAwI0RvbWVzdGljIHdhZmZsZSBpcm9ucyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xMy4wMCNEb21lc3RpYyBlbGVjdHJpYyBjYW4gb3BlbmVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xNC4wMCNEb21lc3RpYyBmb29kIHByb2Nlc3NvcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTUuMDAjRG9tZXN0aWMgdHJhc2ggY29tcGFjdG9ycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xNi4wMCNEb21lc3RpYyBkZWVwIGZyeWVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xNy4wMCNEb21lc3RpYyBwb3Bjb3JuIHBvcHBlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTguMDAjRG9tZXN0aWMgYnJlYWQgbWFraW5nIG1hY2hpbmVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE5LjAwI0RvbWVzdGljIGNvbnZlY3Rpb25hbCBvdmVucyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yMC4wMCNEb21lc3RpYyBtaXhlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjEuMDAjRG9tZXN0aWMgdG9hc3RlciBvdmVucyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yMi4wMCNEb21lc3RpYyB0b2FzdGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yMy4wMCNEb21lc3RpYyBlbGVjdHJpY2FsIGtldHRsZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjQuMDAjRG9tZXN0aWMgYmxlbmRlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjUuMDAjRG9tZXN0aWMgaG90IHBsYXRlcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yNi4wMCNEb21lc3RpYyBjb2ZmZWUgbWFrZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI3LjAwI0RvbWVzdGljIGVsZWN0cmljIGtuaXZlcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yOC4wMCNEb21lc3RpYyBlbGVjdHJpYyB3b2tzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI5LjAwI0RvbWVzdGljIGNvZmZlZSBncmluZGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zMC4wMCNQYXJ0cyBvZiBkaXNod2FzaGluZyBtYWNoaW5lcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zMS4wMCNEb21lc3RpYyBmb29kIGNob3BwZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjMyLjAwI0RvbWVzdGljIGVsZWN0cmljIHNraWxsZXRzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjMzLjAwI0RvbWVzdGljIGVsZWN0cmljIGdyaWRkbGVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjM0LjAwI0RvbWVzdGljIGVsZWN0cmljIHNhbmR3aWNoIG1ha2VyIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjM1LjAwI0RvbWVzdGljIGluZG9vciBlbGVjdHJpYyBncmlsbHMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzYuMDAjRG9tZXN0aWMgcGl6ZWxsZSBvciBjb29raWUgbWFrZXIjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzcuMDAjRG9tZXN0aWMgY3JvY2sgcG90IzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjAwLjAwI0RvbWVzdGljIGxhdW5kcnkgYXBwbGlhbmNlcyBhbmQgc3VwcGxpZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDEuMDAjRG9tZXN0aWMgY2xvdGhlcyB3YXNoZXJzIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjAyLjAwI0RvbWVzdGljIHR1bWJsZSBkcnllcnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDMuMDAjRG9tZXN0aWMgY2xvdGhpbmcgaXJvbnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDQuMDAjRm9vdHdlYXIgZHJ5ZXJzIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjA1LjAwI0xhdW5kcnkgaGFtcGVycyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wNi4wMCNMYXVuZHJ5IGJhc2tldHMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDAuMDAjRG9tZXN0aWMgYmF0aCBhcHBsaWFuY2VzIzUyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjAxLjAwI0RvbWVzdGljIGVsZWN0cmljIHRvb3RoYnJ1c2hlcyM1Mi4xNC4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wMy4wMCNEb21lc3RpYyBoYWlyIGRyeWVycyM1Mi4xNC4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wNC4wMCNEb21lc3RpYyBlbGVjdHJpYyByYXpvcnMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDUuMDAjUGFydHMgb2Ygc2hhdmVycyBvciBoYWlyIHJlbW92ZXJzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjA2LjAwI05haWwgZHJ5ZXJzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE4LjAwLjAwI090aGVyIGRvbWVzdGljIGhvdXNlaG9sZCBhcHBsaWFuY2VzIzUyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE0LjE4LjAxLjAwI0RvbWVzdGljIHNld2luZyBtYWNoaW5lcyM1Mi4xNC4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xOC4wMi4wMCNEb21lc3RpYyBzcGFjZSBoZWF0ZXJzIzUyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE4LjAzLjAwI0RvbWVzdGljIGVsZWN0cmljIGJsYW5rZXRzIzUyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjAwLjAwLjAwI0RvbWVzdGljIGtpdGNoZW53YXJlIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjAwLjAwI0RvbWVzdGljIGRpc3Bvc2FibGUga2l0Y2hlbndhcmUjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDEuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBjb29rd2FyZSM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wMi4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGRpc2hlcyM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wMy4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGZsYXR3YXJlIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjA0LjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgY3VwcyBvciBnbGFzc2VzIG9yIGxpZHMjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDUuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBzdGlycmVycyM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wNi4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGZvb2QgY29udGFpbmVycyM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wNy4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGRyaW5raW5nIHN0cmF3cyM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wMC4wMCNEb21lc3RpYyBraXRjaGVuIHRvb2xzIGFuZCB1dGVuc2lscyM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wMS4wMCNEb21lc3RpYyByb2xsaW5nIHBpbnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDIuMDAjRG9tZXN0aWMgbWl4aW5nIGJvd2xzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjAzLjAwI0RvbWVzdGljIGdyYXRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDQuMDAjRG9tZXN0aWMgc3RyYWluZXJzIG9yIGNvbGFuZGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNS4wMCNEb21lc3RpYyBjYW4gb3IgYm90dGxlIG9wZW5lcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDYuMDAjRG9tZXN0aWMgY3V0dGluZyBib2FyZHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDcuMDAjRG9tZXN0aWMgbWVhc3VyaW5nIGN1cHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDguMDAjQmFzdGVycyBvciBiYXN0aW5nIGJydXNoZXMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDkuMDAjVmVnZXRhYmxlIHBlZWxlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xMC4wMCNDb29raWUgY3V0dGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xMS4wMCNEb21lc3RpYyBraXRjaGVuIHRvbmdzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjEyLjAwI0RvbWVzdGljIGtpdGNoZW4gd2lyZSB3aGlwcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xMy4wMCNEb21lc3RpYyBmb29kIHNjcmFwZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE0LjAwI0RvbWVzdGljIGNvb2xpbmcgcmFja3MjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTUuMDAjRG9tZXN0aWMgcGl6emEgY3V0dGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xNi4wMCNEb21lc3RpYyBraXRjaGVuIHNwYXR1bGFzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE3LjAwI0RvbWVzdGljIHdvb2RlbiBzcG9vbnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTguMDAjRG9tZXN0aWMgd29vZGVuIG92ZW4gcGFkZGxlIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE5LjAwI0RvbWVzdGljIHBhc3RyeSBibGVuZGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjIwLjAwI0RvbWVzdGljIHNpZnRlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yMS4wMCNEb21lc3RpYyBjb29raWUgc3RhbXBlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjIuMDAjRG9tZXN0aWMgcGFzdHJ5IGRlY29yYXRpbmcgZ3VuIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjIzLjAwI0RvbWVzdGljIGNvb2tpZSBwcmVzcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yNC4wMCNEb21lc3RpYyBrbmlmZSBzaGFycGVuZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI1LjAwI0RvbWVzdGljIGJpc2N1aXQgY3V0dGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yNi4wMCNEb21lc3RpYyBtYW5kb2xpbiM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yNy4wMCNEb21lc3RpYyBnYXJsaWMgcHJlc3MjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjguMDAjRG9tZXN0aWMgZWdnIHNsaWNlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yOS4wMCNEb21lc3RpYyBlZ2cgc2VwYXJhdG9yIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjMwLjAwI0RvbWVzdGljIGNoZWVzZSBzbGljZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzEuMDAjRG9tZXN0aWMgZm9vZCBtaWxsIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjMyLjAwI0RvbWVzdGljIGtpdGNoZW4gZnVubmVscyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zMy4wMCNEb21lc3RpYyBnYXJuaXNoaW5nIHRvb2xzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjM0LjAwI0RvbWVzdGljIGFwcGxlIGNvcmVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjM1LjAwI0RvbWVzdGljIG1lbG9uIG9yIGJ1dHRlciBiYWxsZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzYuMDAjRG9tZXN0aWMgZm9vZCBzY29vcHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzcuMDAjRG9tZXN0aWMgcHVtcGtpbiBjYXJ2ZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzguMDAjRG9tZXN0aWMgdmVnZXRhYmxlIGJydXNoIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjM5LjAwI0RvbWVzdGljIGVnZyBiZWF0ZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDAuMDAjRG9tZXN0aWMgcGFzdGEgZHJ5aW5nIHJhY2sjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDEuMDAjRG9tZXN0aWMgd2hpcHBlZCBjcmVhbSBtYWtlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40Mi4wMCNEb21lc3RpYyBkb3VnaCBwcmVzcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40My4wMCNEb21lc3RpYyByYXZpb2xpIG1ha2VyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ0LjAwI0RvbWVzdGljIG1pc3Qgc3ByYXllciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40NS4wMCNEb21lc3RpYyBwYXN0cnkgYnJ1c2gjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDYuMDAjRG9tZXN0aWMga2l0Y2hlbiBvciBkaWV0IHNjYWxlcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40Ny4wMCNEb21lc3RpYyBraXRjaGVuIHRpbWVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40OC4wMCNEb21lc3RpYyBraXRjaGVuIG9yIGZvb2QgdGhlcm1vbWV0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ5LjAwI0RvbWVzdGljIGJyZWFkIHNsaWNpbmcgZ3VpZGUjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNTAuMDAjRG9tZXN0aWMgZHJhaW4gYm9hcmRzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjAwLjAwI0RvbWVzdGljIGZsYXR3YXJlIGFuZCBjdXRsZXJ5IzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjAxLjAwI0RvbWVzdGljIHNlcnZpbmcgdXRlbnNpbHMjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDIuMDAjRG9tZXN0aWMga25pdmVzIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjAzLjAwI0RvbWVzdGljIGZvcmtzIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjA0LjAwI0RvbWVzdGljIHNwb29ucyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wNS4wMCNTcG9vbiByZXN0cyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wNi4wMCNDaG9wc3RpY2tzIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjAwLjAwI0RvbWVzdGljIGNvb2t3YXJlIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjAxLjAwI0RvbWVzdGljIGR1dGNoIG92ZW5zIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjAyLjAwI0RvbWVzdGljIGZyeWluZyBwYW5zIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjAzLjAwI0RvbWVzdGljIHNhdWNlcGFucyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wNC4wMCNEb21lc3RpYyBrZXR0bGVzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA1LjAwI0RvbWVzdGljIHdva3MjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDYuMDAjRG9tZXN0aWMgc3RlYW1lcnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDcuMDAjRG9tZXN0aWMgc3RvY2sgcG90cyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wOC4wMCNEb21lc3RpYyBwcmVzc3VyZSBjb29rZXJzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA5LjAwI0RvbWVzdGljIHNhdXRlIHBhbnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMTAuMDAjRG9tZXN0aWMgY2hhZmluZyBkaXNoZXMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMTEuMDAjRG9tZXN0aWMgZ3JpZGRsZXMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMTIuMDAjRG9tZXN0aWMgZG91YmxlIGJvaWxlcnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMTMuMDAjRG9tZXN0aWMgc3BsYXR0ZXIgc2hpZWxkIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjAwLjAwI0RvbWVzdGljIGJha2V3YXJlIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjAxLjAwI0RvbWVzdGljIG11ZmZpbiBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjAyLjAwI0RvbWVzdGljIGJha2luZyBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjAzLjAwI0RvbWVzdGljIGNha2Ugb3IgcGllIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDQuMDAjRG9tZXN0aWMgcm9hc3RpbmcgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wNS4wMCNEb21lc3RpYyBiYWtpbmcgc2hlZXRzIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA2LjAwI0RvbWVzdGljIGJyb2lsaW5nIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDcuMDAjRG9tZXN0aWMgYmFraW5nIG1vbGRzIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA4LjAwI0RvbWVzdGljIHBpenphIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDkuMDAjRG9tZXN0aWMgdG9ydGlsbGEgYmFrZXJzIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAwLjAwI0RvbWVzdGljIGRpc2hlcyBhbmQgc2VydmluZ3dhcmUgYW5kIHN0b3JhZ2UgY29udGFpbmVycyM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wMS4wMCNEb21lc3RpYyBwaXRjaGVycyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wMi4wMCNEb21lc3RpYyBmb29kIHN0b3JhZ2UgY29udGFpbmVycyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wMy4wMCNEb21lc3RpYyBwdW5jaCBib3dscyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wNC4wMCNEb21lc3RpYyBwbGF0ZXMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDUuMDAjRG9tZXN0aWMgc2F1Y2VycyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wNi4wMCNEb21lc3RpYyB0cmF5cyBvciBwbGF0dGVycyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wNy4wMCNEb21lc3RpYyBzZXJ2aW5nIGJvd2xzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA4LjAwI0RvbWVzdGljIHRlYSBvciBjb2ZmZWUgcG90cyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wOS4wMCNEb21lc3RpYyBzb3VwIG9yIHNhbGFkIGJvd2xzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjEwLjAwI0RvbWVzdGljIHZhY3V1bSBmbGFza3MjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTEuMDAjSW5uZXJzIGZvciB2YWNjdW0gZmxhc2tzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjEyLjAwI0ljZSB0cmF5cyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xMy4wMCNTcGljZSBvciBzYWx0IG9yIHBlcHBlciBzaGFrZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjE0LjAwI0NhcmFmZSBzZXRzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjE1LjAwI0RvbWVzdGljIGNha2UgcGxhdGUgd2l0aCBkb21lIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIxLjAwLjAwI0RvbWVzdGljIGRyaW5raW5nIHV0ZW5zaWxzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIxLjAxLjAwI0RvbWVzdGljIGNvZmZlZSBvciB0ZWEgY3VwcyM1Mi4xNS4yMS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMS4wMi4wMCNEb21lc3RpYyBkcmlua2luZyBnbGFzc2VzIzUyLjE1LjIxLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIxLjAzLjAwI0RvbWVzdGljIG11Z3MjNTIuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDQuMDAjRG9tZXN0aWMgc3RlbXdhcmUjNTIuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjIuMDAuMDAjRGlzaHdhc2hpbmcgYW5kIGRpc2ggc3RvcmFnZSBhY2Nlc3NvcmllcyM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMi4wMS4wMCNTaGVsZiBsaW5lciM1Mi4xNS4yMi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMi4wMi4wMCNEaXNoIGRyYWluZXIjNTIuMTUuMjIuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjIuMDMuMDAjU29hcCBkaXNwZW5zaW5nIGJydXNoIzUyLjE1LjIyLjAwLjAwCi11bnNwc2M3IzUyLjE2LjAwLjAwLjAwI0NvbnN1bWVyIGVsZWN0cm9uaWNzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjAwLjAwI0F1ZGlvIGFuZCB2aXN1YWwgZXF1aXBtZW50IzUyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjAxLjAwI0NvbXBhY3QgZGlzYyBwbGF5ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjAyLjAwI0Nhc3NldHRlIHBsYXllcnMgb3IgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjAzLjAwI0RpZ2l0YWwgdmlkZW8gZGlzYyBwbGF5ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA0LjAwI1ZpZGVvIGNhc3NldHRlIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wNS4wMCNUZWxldmlzaW9ucyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wNi4wMCNIZWFkcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA3LjAwI0Nsb2NrIHJhZGlvcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wOC4wMCNMYXNlciBkaXNjIHBsYXllcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDkuMDAjUG9ydGFibGUgc3RlcmVvIHN5c3RlbXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTAuMDAjSG9tZSBzdGVyZW8gc3lzdGVtcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMS4wMCNSYWRpb3MjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTIuMDAjU3BlYWtlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTMuMDAjQ29tYmluYXRpb24gdGVsZXZpc2lvbiB2aWRlbyBjYXNzZXR0ZSByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTQuMDAjSGVhZHBob25lcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xNS4wMCNDb21wYWN0IGRpc2sgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTYuMDAjRGlnaXRhbCB2aWRlbyBkaXNrIHBsYXllcnMgb3IgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE3LjAwI0VxdWFsaXplcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTguMDAjR2xvYmFsIHBvc2l0aW9uaW5nIHN5c3RlbSByZWNlaXZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTkuMDAjSGVhZHBob25lcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yMC4wMCNNaWNyb3Bob25lcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yMS4wMCNNdWx0aW1lZGlhIHJlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yMi4wMCNSYWRpbyBmcmVxdWVuY3kgc2Nhbm5lcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjMuMDAjUmFkaW8gZnJlcXVlbmN5IHRyYW5zbWl0dGVyc3JlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yNC4wMCNSYWRpbyByZWNlaXZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjUuMDAjUmVtb3RlIGNvbnRyb2wjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjYuMDAjU2F0ZWxsaXRlIHJlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yNy4wMCNTdWJ3b29mZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI4LjAwI1RlbGV2aXNpb25zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI5LjAwI1ZpZGVvIGNhc3NldHRlIHBsYXllcnMgb3IgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjMwLjAwI1ZpZGVvIG1vbml0b3JzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjMxLjAwI1JhZGlvIHBob25vZ3JhcGhzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjMyLjAwI0thcmFva2Ugc3lzdGVtcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zMy4wMCNNZWdhcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjM0LjAwI0ludGVncmF0ZWQgY2lyY3V0IElDIGNoaXAgcmVjb3JkZXIjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzUuMDAjRGlnaXRhbCB2b2ljZSByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzYuMDAjTWluaWRpc2MgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTYuMDAuMDAjQXVkaW8gdmlzdWFsIGVxdWlwbWVudCBhY2Nlc3NvcmllcyM1Mi4xNi4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNi4wMS4wMCNDYXNzZXR0ZSBzdG9yYWdlIzUyLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE2LjAyLjAwI0F1ZGlvIG9yIHZpZGVvIGhlYWQgY2xlYW5lcnMjNTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTcuMDAuMDAuMDAjRG9tZXN0aWMgd2FsbCB0cmVhdG1lbnRzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjE3LjEwLjAwLjAwI0JhdGhyb29tIHdhbGwgdHJlYXRtZW50cyM1Mi4xNy4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNy4xMC4wMS4wMCNIYW5naW5nIHRvaWxldHJ5IG9yZ2FuaXplciBvciBzaGVsZiM1Mi4xNy4xMC4wMC4wMAotdW5zcHNjNyM1My4wMC4wMC4wMC4wMCNBcHBhcmVsIGFuZCBMdWdnYWdlIGFuZCBQZXJzb25hbCBDYXJlIFByb2R1Y3RzIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjAwLjAwLjAwI0Nsb3RoaW5nIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjAwLjAwI1NsYWNrcyBhbmQgdHJvdXNlcnMgYW5kIHNob3J0cyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wMS4wMCNCb3lzIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDIuMDAjTWVucyBzbGFja3Mgb3IgdHJvdXNlcnMgb3Igc2hvcnRzIzUzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjAzLjAwI0dpcmxzIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDQuMDAjV29tZW5zIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDUuMDAjSW5mYW50cyBzbGFja3Mgb3IgdHJvdXNlcnMgb3Igc2hvcnRzIzUzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAwLjAwI1NoaXJ0cyBhbmQgYmxvdXNlcyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wMS4wMCNCb3lzIHNoaXJ0cyM1My4xMC4xNi4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wMi4wMCNNZW5zIHNoaXJ0cyM1My4xMC4xNi4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wMy4wMCNHaXJscyBzaGlydHMgb3IgYmxvdXNlcyM1My4xMC4xNi4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wNC4wMCNXb21lbnMgc2hpcnRzIG9yIGJsb3VzZXMjNTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDUuMDAjSW5mYW50cyBzaGlydHMgb3IgYmxvdXNlcyM1My4xMC4xNi4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wMC4wMCNTd2VhdGVycyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wMS4wMCNCb3lzIHN3ZWF0ZXJzIzUzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjAyLjAwI01lbnMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDMuMDAjR2lybHMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDQuMDAjV29tZW5zIHN3ZWF0ZXJzIzUzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjA1LjAwI0luZmFudHMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDAuMDAjQ29hdHMgYW5kIGphY2tldHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDEuMDAjQm95cyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjAyLjAwI01lbnMgY29hdHMgb3IgamFja2V0cyM1My4xMC4xOC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wMy4wMCNHaXJscyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjA0LjAwI1dvbWVucyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjA1LjAwI0luZmFudHMgY29hdHMgb3IgamFja2V0cyM1My4xMC4xOC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wMC4wMCNTdWl0cyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wMS4wMCNCb3lzIHN1aXRzIzUzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjAyLjAwI01lbnMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDMuMDAjR2lybHMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDQuMDAjV29tZW5zIHN1aXRzIzUzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjA1LjAwI0luZmFudHMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjAuMDAuMDAjRHJlc3NlcyBhbmQgc2tpcnRzIGFuZCBzYXJpcyBhbmQga2ltb25vcyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMC4wMS4wMCNHaXJscyBkcmVzc2VzIG9yIHNraXJ0cyBvciBzYXJpcyBvciBraW1vbm9zIzUzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIwLjAyLjAwI1dvbWVucyBkcmVzc2VzIG9yIHNraXJ0cyBvciBzYXJpcyBvciBraW1vbm9zIzUzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIwLjAzLjAwI0luZmFudHMgZHJlc3NlcyBvciBza2lydHMgb3Igc2FyaXMgb3Iga2ltb25vcyM1My4xMC4yMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMS4wMC4wMCNPdmVyYWxscyBhbmQgY292ZXJhbGxzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjAxLjAwI0JveXMgb3ZlcmFsbHMgb3IgY292ZXJhbGxzIzUzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjAyLjAwI01lbnMgb3ZlcmFsbHMgb3IgY292ZXJhbGxzIzUzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjAzLjAwI0dpcmxzIG92ZXJhbGxzIG9yIGNvdmVyYWxscyM1My4xMC4yMS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMS4wNC4wMCNXb21lbnMgb3ZlcmFsbHMgb3IgY292ZXJhbGxzIzUzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjA1LjAwI0luZmFudHMgb3ZlcmFsbHMgb3IgY292ZXJhbGxzIzUzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAwLjAwI0ZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wMS4wMCNCb3lzIGZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4yMi4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wMi4wMCNNZW5zIGZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4yMi4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wMy4wMCNHaXJscyBmb2xrbG9yaWMgY2xvdGhpbmcjNTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDQuMDAjV29tZW5zIGZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4yMi4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wNS4wMCNJbmZhbnRzIGZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4yMi4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wMC4wMCNVbmRlcmdhcm1lbnRzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjAxLjAwI1VuZGVyc2hpcnRzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjAyLjAwI1NsaXBzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjAzLjAwI1VuZGVycGFudHMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDQuMDAjQnJhc3NpZXJlcyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wNS4wMCNJbmZhbnQgZGlhcGVycyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wNi4wMCNBZHVsdCBkaWFwZXJzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjA3LjAwI0JvZHkgc2hhcGluZyBnYXJtZW50cyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yNC4wMC4wMCNIb3NpZXJ5IzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAxLjAwI1N0b2NraW5ncyM1My4xMC4yNC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNC4wMi4wMCNTb2NrcyM1My4xMC4yNC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNC4wMy4wMCNQYW50eSBob3NlIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjA0LjAwI1RpZ2h0cyM1My4xMC4yNC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wMC4wMCNDbG90aGluZyBhY2Nlc3NvcmllcyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wMS4wMCNCZWx0cyBvciBzdXNwZW5kZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAyLjAwI1RpZXMgb3Igc2NhcnZlcyBvciBtdWZmbGVycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wMy4wMCNIYXRzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA0LjAwI0dsb3ZlcyBvciBtaXR0ZW5zIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA1LjAwI1VtYnJlbGxhcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wNi4wMCNTd2VhdCBiYW5kcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wNy4wMCNDbG90aGluZyBoYW5nZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA4LjAwI0FybWJhbmRzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA5LjAwI0dhcnRlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMTAuMDAjVGFzc2xlcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xMS4wMCNCYW5kYW5uYXMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMTIuMDAjSGFuZGtlcmNoaWVmcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xMy4wMCNIZWFkYmFuZHMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMTQuMDAjUG9ja2V0IHByb3RlY3RvcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMTUuMDAjQnV0dG9uIGNvdmVycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wMC4wMCNOaWdodHdlYXIjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDEuMDAjQm95cyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjAyLjAwI01lbnMgcGFqYW1hcyBvciBuaWdodHNoaXJ0cyM1My4xMC4yNi4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wMy4wMCNHaXJscyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjA0LjAwI1dvbWVucyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjA1LjAwI0luZmFudHMgcGFqYW1hcyBvciBuaWdodHNoaXJ0cyM1My4xMC4yNi4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wNi4wMCNCYXRoIHJvYmVzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI3LjAwLjAwI1VuaWZvcm1zIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI3LjAxLjAwI01pbGl0YXJ5IHVuaWZvcm1zIzUzLjEwLjI3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI3LjAyLjAwI0N1c3RvbXMgdW5pZm9ybXMjNTMuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDMuMDAjUG9saWNlIHVuaWZvcm1zIzUzLjEwLjI3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI4LjAwLjAwI1N3aW13ZWFyIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI4LjAxLjAwI01lbnMgc3dpbXdlYXIjNTMuMTAuMjguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDIuMDAjV29tZW5zIHN3aW13ZWFyIzUzLjEwLjI4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI4LjAzLjAwI0JveXMgc3dpbXdlYXIjNTMuMTAuMjguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDQuMDAjR2lybHMgc3dpbXdlYXIjNTMuMTAuMjguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDUuMDAjSW5mYW50cyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOS4wMC4wMCNBdGhsZXRpYyB3ZWFyIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjAxLjAwI1dvbWVucyBhdGhsZXRpYyB3ZWFyIzUzLjEwLjI5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjAyLjAwI01lbnMgYXRobGV0aWMgd2VhciM1My4xMC4yOS4wMC4wMAotdW5zcHNjNyM1My4xMC4yOS4wMy4wMCNCb3lzIGF0aGxldGljIHdlYXIjNTMuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDQuMDAjR2lybHMgYXRobGV0aWMgd2VhciM1My4xMC4yOS4wMC4wMAotdW5zcHNjNyM1My4xMS4wMC4wMC4wMCNGb290d2VhciM1My4wMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xNS4wMC4wMCNCb290cyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xNS4wMS4wMCNNZW5zIGJvb3RzIzUzLjExLjE1LjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAyLjAwI1dvbWVucyBib290cyM1My4xMS4xNS4wMC4wMAotdW5zcHNjNyM1My4xMS4xNS4wMy4wMCNCb3lzIGJvb3RzIzUzLjExLjE1LjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjA0LjAwI0dpcmxzIGJvb3RzIzUzLjExLjE1LjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjA1LjAwI0luZmFudHMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTYuMDAuMDAjU2hvZXMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTYuMDEuMDAjTWVucyBzaG9lcyM1My4xMS4xNi4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMi4wMCNXb21lbnMgc2hvZXMjNTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTYuMDMuMDAjQm95cyBzaG9lcyM1My4xMS4xNi4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wNC4wMCNHaXJscyBzaG9lcyM1My4xMS4xNi4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wNS4wMCNJbmZhbnRzIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE3LjAwLjAwI1NsaXBwZXJzIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE3LjAxLjAwI01lbnMgc2xpcHBlcnMjNTMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDIuMDAjV29tZW5zIHNsaXBwZXJzIzUzLjExLjE3LjAwLjAwCi11bnNwc2M3IzUzLjExLjE3LjAzLjAwI0JveXMgc2xpcHBlcnMjNTMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDQuMDAjR2lybHMgc2xpcHBlcnMjNTMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDUuMDAjSW5mYW50cyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wMC4wMCNTYW5kYWxzIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAxLjAwI01lbnMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wMi4wMCNXb21lbnMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wMy4wMCNCb3lzIHNhbmRhbHMjNTMuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDQuMDAjR2lybHMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wNS4wMCNJbmZhbnRzIHNhbmRhbHMjNTMuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTkuMDAuMDAjQXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTkuMDEuMDAjTWVucyBhdGhsZXRpYyBmb290d2VhciM1My4xMS4xOS4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMi4wMCNXb21lbnMgYXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTkuMDMuMDAjQm95cyBhdGhsZXRpYyBmb290d2VhciM1My4xMS4xOS4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wNC4wMCNHaXJscyBhdGhsZXRpYyBmb290d2VhciM1My4xMS4xOS4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wNS4wMCNJbmZhbnRzIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjIwLjAwLjAwI1Nob2UgYWNjZXNzb3JpZXMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMjAuMDEuMDAjU2hvZWhvcm5zIzUzLjExLjIwLjAwLjAwCi11bnNwc2M3IzUzLjExLjIwLjAyLjAwI1Nob2VsYWNlcyM1My4xMS4yMC4wMC4wMAotdW5zcHNjNyM1My4xMi4wMC4wMC4wMCNMdWdnYWdlIGFuZCBoYW5kYmFncyBhbmQgcGFja3MgYW5kIGNhc2VzIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjE1LjAwLjAwI0x1Z2dhZ2UjNTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTUuMDEuMDAjR2FybWVudCBiYWdzIzUzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE1LjAyLjAwI0x1Z2dhZ2Ugc2V0cyM1My4xMi4xNS4wMC4wMAotdW5zcHNjNyM1My4xMi4xNS4wMy4wMCNJbmRpdmlkdWFsIGx1Z2dhZ2UgcGllY2VzIzUzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjAwLjAwI1B1cnNlcyBhbmQgaGFuZGJhZ3MgYW5kIGJhZ3MjNTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDEuMDAjSGFuZGJhZ3Mgb3IgcHVyc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjAyLjAwI0R1ZmZsZSBiYWdzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjAzLjAwI0JhY2twYWNrcyM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wNC4wMCNFeWVnbGFzcyBjYXNlcyM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wNS4wMCNDb2luIHB1cnNlcyM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wNi4wMCNMaXBzdGljayBjYXNlcyM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wNy4wMCNDaWdhciBjYXNlIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjAwLjAwI0J1c2luZXNzIGNhc2VzIzUzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjAxLjAwI0JyaWVmY2FzZXMjNTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDIuMDAjQXR0YWNoZXMjNTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDQuMDAjUG9ydGZvbGlvcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wNS4wMCNFcXVpcG1lbnQgY2FzZXMjNTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDYuMDAjQ29tcHV0ZXIgYmFncyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wMC4wMCNUcmF2ZWwga2l0cyBhbmQgYWNjZXNzb3JpZXMjNTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTguMDEuMDAjVHJhdmVsIGtpdHMjNTMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTguMDIuMDAjVHJhdmVsIGNhcnRzIzUzLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjAzLjAwI0dhcm1lbnQgYnJ1c2hlcyM1My4xMi4xOC4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wNC4wMCNNYWtldXAgb3IgbWFuaWN1cmUgY2FzZXMjNTMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTMuMDAuMDAuMDAjUGVyc29uYWwgY2FyZSBwcm9kdWN0cyM1My4wMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wMC4wMCNEZW50YWwjNTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDEuMDAjTW91dGh3YXNoIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjAyLjAwI1Rvb3RocGFzdGUjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDMuMDAjVG9vdGhicnVzaGVzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA0LjAwI0RlbnRhbCBmbG9zcyM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wNS4wMCNJbmZhbnQgc29vdGhlciBvciBwYWNpZmllciBvciBkdW1teSM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wNi4wMCNEZW50YWwga2l0cyM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wNy4wMCNUb290aHBpY2tzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA4LjAwI0RlbnR1cmUgY2xlYW5pbmcgdGFibGV0cyM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wMC4wMCNCYXRoIGFuZCBib2R5IzUzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjAxLjAwI1Nob3dlciBjYXBzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjAyLjAwI0hhaXIgY2FyZSBzdXBwbGllcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wMy4wMCNSYXpvcnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDQuMDAjSGFpciBjb21icyBvciBicnVzaGVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjA1LjAwI1Zhbml0eSBraXRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjA2LjAwI0Rlb2RvcmFudHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDcuMDAjSGFuZCBvciBib2R5IGxvdGlvbnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDguMDAjU29hcHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDkuMDAjU3VuIHByb3RlY3Rpb24gcHJvZHVjdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTAuMDAjRXllIGNhcmUgc3VwcGxpZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTEuMDAjU2hhdmluZyBjcmVhbXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTIuMDAjQmF0aCBnZWxzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjEzLjAwI1NraW4gY2FyZSBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xNC4wMCNGb290IGNhcmUgcHJvZHVjdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTUuMDAjRmVtaW5pbmUgaHlnaWVuZSBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xNi4wMCNQYXJhIHBoYXJtYWNldXRpY2FsIGNyZWFtcyBvciBsb3Rpb25zIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE3LjAwI01hbmljdXJlIGltcGxlbWVudHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTguMDAjUGVkaWN1cmUgaW1wbGVtZW50cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xOS4wMCNDb3NtZXRpY3MjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjAuMDAjUGVyZnVtZXMgb3IgY29sb2duZXMgb3IgZnJhZ3JhbmNlcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yMS4wMCNOYWlsIGNsaXBwZXJzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjIyLjAwI0NvbmRvbXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjMuMDAjSGFpciByZW1vdmFsIG9yIGRlcGlsYXRvcnkgcHJvZHVjdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjQuMDAjRGlzcG9zYWJsZSBwZXJzb25hbCB3aXBlcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNS4wMCNIYWlyIG9yIGJlYXJkIG5ldHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjYuMDAjSGFuZCBzYW5pdGl6ZXIjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjcuMDAjSGFuZCBjbGVhbmVyIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI4LjAwI1NoYW1wb29zIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI5LjAwI01ha2V1cCBraXRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjMwLjAwI0xpcCBiYWxtIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjMxLjAwI1RhdHRvb3MjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzIuMDAjSG90IHJvbGxlcnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzMuMDAjQmFycmV0dGVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjM0LjAwI0NoZW1pY2FsIHByb3RlY3Rpb24gcHJvZHVjdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzUuMDAjU2hhdmluZyBicnVzaGVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE3LjAwLjAwI0V5ZXdlYXIjNTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTcuMDEuMDAjT3B0aWNhbCBnbGFzc2VzIG9yIHNwZWN0YWNsZXMjNTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTcuMDIuMDAjQ29udGFjdCBsZW5zZXMjNTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTcuMDMuMDAjU3VuZ2xhc3NlcyM1My4xMy4xNy4wMC4wMAotdW5zcHNjNyM1My4xNC4wMC4wMC4wMCNTZXdpbmcgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjAwLjAwI1Nld2luZyBmYXN0ZW5lcnMjNTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDEuMDAjU3RyYWlnaHQgcGlucyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wMi4wMCNTYWZldHkgcGlucyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wMy4wMCNaaXBwZXJzIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA0LjAwI0J1Y2tsZXMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDUuMDAjQnV0dG9ucyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wNi4wMCNTbmFwcyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wNy4wMCNDbGFzcHMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDguMDAjR2FybWVudCByaXZldCM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wMC4wMCNNaXNjZWxsYW5lb3VzIHNld2luZyBzdXBwbGllcyM1My4xNC4wMC4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wMS4wMCNQaW4gY3VzaGlvbnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDIuMDAjU2V3aW5nIGtpdHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDMuMDAjVGhpbWJsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDQuMDAjU2V3aW5nIHBhdHRlcm5zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA1LjAwI1Nld2luZyBuZWVkbGVzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA2LjAwI0JvYmJpbnMgb3IgYm9iYmluIGhvbGRlcnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDcuMDAjU2VhbSBnYXVnZSM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wOC4wMCNCb2RraW4jNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDkuMDAjTG9vcCB0dXJuZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTAuMDAjRmFicmljIG9yIHRhaWxvcnMgY2hhbGsgaG9sZGVycyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xMS4wMCNGYWJyaWMgbWFya2VycyBvciBmYWJyaWMgcGVuY2lscyBvciBmYWJyaWMgY2hhbGsjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTIuMDAjU2VycmF0ZWQgcGF0dGVybiB0cmFjaW5nIHdoZWVsIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjEzLjAwI1RyYW5zZmVyIHBhcGVyIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE0LjAwI1RhcGVzdHJ5IG5lZWRsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTUuMDAjV2VhdmluZyBuZWVkbGVzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE2LjAwI0xvb3BlciBsb29tcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xNy4wMCNDb3R0b24gamVyc2V5IGxvb3BzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE4LjAwI05lZWRsZXBvaW50IGNhbnZhcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xOS4wMCNNYWduZXQgd2FuZHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjAuMDAjU2VhbSByaXBwZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjEuMDAjTmVlZGxlIHRocmVhZGVyIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjIyLjAwI0RyZXNzbWFrZXJzIHJ1bGVyIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjIzLjAwI0xpcXVpZCB0aHJlYWQgbG9jayBvciByZWluZm9yY2VyIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI0LjAwI0Nyb3NzIHN0aXRjaCBmYWJyaWMgb3IgbmVlZGxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yNS4wMCNDcm9zcyBzdGl0Y2ggZGVzaWducyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yNi4wMCNFbWJyb2lkZXJ5IGhvb3BzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI3LjAwI0Nyb2NoZXQgaG9va3MjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjguMDAjUXVpbHRlcnMgYmFzdGluZyB0b29scyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yOS4wMCNRdWlsdGVycyBwaW5zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjMwLjAwI1BhdHRlcm4gY3V0dGluZyBtYXRzIG9yIGJvYXJkcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1NC4wMC4wMC4wMC4wMCNUaW1lcGllY2VzIGFuZCBKZXdlbHJ5IGFuZCBHZW1zdG9uZSBQcm9kdWN0cyM1NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMC4wMC4wMC4wMCNKZXdlbHJ5IzU0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjAwLjAwI0ZpbmUgamV3ZWxyeSM1NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wMS4wMCNHb2xkIG9yIHNpbHZlciBvciBwbGF0aW51bSBjaGFpbnMjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDIuMDAjRmluZSBqZXdlbHJ5IG5lY2tsYWNlcyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wMy4wMCNGaW5lIGpld2VscnkgcmluZ3MjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDQuMDAjRmluZSBqZXdlbHJ5IGVhcnJpbmdzIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjA1LjAwI0ZpbmUgYm9keSBqZXdlbHJ5IzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjA2LjAwI0ZpbmUgamV3ZWxyeSBicmFjZWxldHMjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDcuMDAjVGlhcmFzIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjAwLjAwI0ltaXRhdGlvbiBqZXdlbHJ5IzU0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjAxLjAwI0JyYWNlbGV0cyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wMi4wMCNOZWNrbGFjZXMjNTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDMuMDAjUmluZ3MjNTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDQuMDAjRWFycmluZ3MjNTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDUuMDAjQm9keSBqZXdlbHJ5IzU0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU0LjExLjAwLjAwLjAwI1RpbWVwaWVjZXMjNTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTUuMDAuMDAjV2F0Y2hlcyM1NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNS4wMS4wMCNXcmlzdCB3YXRjaGVzIzU0LjExLjE1LjAwLjAwCi11bnNwc2M3IzU0LjExLjE1LjAyLjAwI1BvY2tldCB3YXRjaGVzIzU0LjExLjE1LjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjAwLjAwI0Nsb2NrcyM1NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNi4wMS4wMCNXYWxsIGNsb2NrcyM1NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNi4wMi4wMCNNYW50ZWwgb3IgdGFibGUgY2xvY2tzIzU0LjExLjE2LjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjAzLjAwI0ZyZWUgc3RhbmRpbmcgY2xvY2tzIzU0LjExLjE2LjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjA0LjAwI0hvdXJnbGFzc2VzIzU0LjExLjE2LjAwLjAwCi11bnNwc2M3IzU0LjExLjE3LjAwLjAwI1dhdGNoIG9yIGNsb2NrIHBhcnRzIzU0LjExLjAwLjAwLjAwCi11bnNwc2M3IzU0LjExLjE3LjAxLjAwI1dhdGNoIG9yIGNsb2NrIGRpYWxzIzU0LjExLjE3LjAwLjAwCi11bnNwc2M3IzU0LjExLjE3LjAyLjAwI1dhdGNoIG9yIGNsb2NrIGNyeXN0YWxzIzU0LjExLjE3LjAwLjAwCi11bnNwc2M3IzU0LjExLjE3LjAzLjAwI1dhdGNoIG9yIGNsb2NrIHBsYXRlcyBvciBicmlkZ2VzIzU0LjExLjE3LjAwLjAwCi11bnNwc2M3IzU0LjExLjE3LjA0LjAwI1dhdGNoIHN0cmFwcyBvciBiYW5kcyBvciBicmFjZWxldHMgb3IgZm9icyM1NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMi4wMC4wMC4wMCNHZW1zdG9uZXMjNTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDAuMDAjUHJlY2lvdXMgc3RvbmVzIzU0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE1LjAxLjAwI0RpYW1vbmQgZ2Vtc3RvbmVzIzU0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE1LjAyLjAwI0VtZXJhbGQgZ2Vtc3RvbmVzIzU0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE1LjAzLjAwI1J1YnkgZ2Vtc3RvbmVzIzU0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE1LjA0LjAwI1NhcHBoaXJlIGdlbXN0b25lcyM1NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNi4wMC4wMCNTZW1pIHByZWNpb3VzIHN0b25lcyM1NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNi4wMS4wMCNHYXJuZXQgZ2Vtc3RvbmVzIzU0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE2LjAyLjAwI0phZGUgZ2Vtc3RvbmVzIzU0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE2LjAzLjAwI09wYWwgZ2Vtc3RvbmVzIzU0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE3LjAwLjAwI1BlYXJscyM1NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNy4wMS4wMCNDdWx0dXJlZCBwZWFybHMjNTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTcuMDIuMDAjTmF0dXJhbCBwZWFybHMjNTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTguMDAuMDAjSW5kdXN0cmlhbCBwcmVjaW91cyBhbmQgc2VtaSBwcmVjaW91cyBzdG9uZXMjNTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTguMDEuMDAjSW5kdXN0cmlhbCBkaWFtb25kcyM1NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xOC4wMi4wMCNJbmR1c3RyaWFsIGdhcm5ldHMjNTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTUuMDAuMDAuMDAuMDAjUHVibGlzaGVkIFByb2R1Y3RzIzU1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEwLjAwLjAwLjAwI1ByaW50ZWQgbWVkaWEjNTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDAuMDAjUHJpbnRlZCBwdWJsaWNhdGlvbnMjNTUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDEuMDAjQ2hhcnRzIG9yIG1hcHMgb3IgYXRsYXNlcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wMi4wMCNEaXJlY3RvcmllcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wMy4wMCNDYXRhbG9ncyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wNC4wMCNOZXdzcGFwZXJzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA1LjAwI0NvbWljIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA2LjAwI01hZ2F6aW5lcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wNy4wMCNQaWN0dXJlIG9yIGRyYXdpbmcgb3IgY29sb3JpbmcgYm9va3MgZm9yIGNoaWxkcmVuIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA4LjAwI0VuY3ljbG9wZWRpYXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDkuMDAjRWR1Y2F0aW9uYWwgb3Igdm9jYXRpb25hbCB0ZXh0Ym9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTAuMDAjTGVpc3VyZSByZWFkaW5nIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjExLjAwI1JlZmVyZW5jZSBib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xMi4wMCNEaWN0aW9uYXJpZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTMuMDAjVHJhZGluZyBjYXJkcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xNC4wMCNTaGVldCBtdXNpYyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xNS4wMCNQcm9tb3Rpb25hbCBtYXRlcmlhbCBvciBhbm51YWwgcmVwb3J0cyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xNi4wMCNPcGVyYXRpb24gYW5kIGluc3RydWN0aW9uIG1hbnVhbHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTcuMDAjQ2xlYXJhbmNlIGFuZCBkaW1lbnNpb25hbCBkcmF3aW5ncyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xOC4wMCNUZWNobmljYWwgZGlhZ3JhbXMgb3IgZHJhd2luZ3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTkuMDAjUGVyaW9kaWNhbHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjAuMDAjSW5zdHJ1Y3Rpb24gc2hlZXRzIG9yIGJvb2tsZXRzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjIxLjAwI093bmVyIG9yIHVzZXIgbWFudWFscyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yMi4wMCNUZXJyZXN0cmlhbCBvciBjZWxlc3RpYWwgZ2xvYmVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjIzLjAwI0V4ZXJjaXNlIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjI0LjAwI1JlZmVyZW5jZSBib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yNS4wMCNFbmN5Y2xvcGVkaWFzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjI2LjAwI0RpY3Rpb25hcmllcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4wMC4wMC4wMCNFbGVjdHJvbmljIHJlZmVyZW5jZSBtYXRlcmlhbCM1NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wMC4wMCNFbGVjdHJvbmljIHB1YmxpY2F0aW9ucyBhbmQgbXVzaWMjNTUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDEuMDAjRWxlY3Ryb25pYyBkaXJlY3RvcmllcyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wMi4wMCNFbGVjdHJvbmljIGRpY3Rpb25hcmllcyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wMy4wMCNFbGVjdHJvbmljIGVuY3ljbG9wZWRpYXMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDQuMDAjRWxlY3Ryb25pYyBjYXRhbG9ncyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wNS4wMCNCb29rcyBvbiB0YXBlIG9yIGNvbXBhY3QgZGlzYyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wNi4wMCNFbGVjdHJvbmljIG1hZ2F6aW5lcyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wNy4wMCNFbGVjdHJvbmljIG5ld3NwYXBlcnMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDguMDAjRWxlY3Ryb25pYyBjaGFydHMgb3IgbWFwcyBvciBhdGxhc2VzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA5LjAwI0JhY2tncm91bmQgbXVzaWMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMTAuMDAjTW90aW9uIHBpY3R1cmVzIG9uIGNlbGx1bG9pZCM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4xMS4wMCNNb3Rpb24gcGljdHVyZXMgb24gdmlkZW8gdGFwZSM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4xMi4wMCNNdXNpYyBvbiB0YXBlIG9yIGNvbXBhY3QgZGlzYyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNi4wMC4wMCNFbGVjdHJvbmljIFNvZnR3YXJlIHJlZmVyZW5jZSBtYXRlcmlhbCM1NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNi4wMS4wMCNFbGVjdHJvbmljIFNvZnR3YXJlIERvY3VtZW50YXRpb24gYW5kIFVzZXIgTWFudWFscyM1NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4wMC4wMC4wMCNTaWduYWdlIGFuZCBhY2Nlc3NvcmllcyM1NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNS4wMC4wMCNUYWdzIzU1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEyLjE1LjAxLjAwI0x1Z2dhZ2UgdGFncyM1NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNS4wMi4wMCNTZWN1cml0eSB0YWdzIzU1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE1LjAzLjAwI0lkZW50aWZpY2F0aW9uIHRhZ3MjNTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDAuMDAjTGFiZWxzIzU1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjAxLjAwI0xhYmVsIHJlbW92aW5nIGtpdHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDIuMDAjQ2xvdGhpbmcgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjAzLjAwI1ByZXNzdXJlIHNlbnNpdGl2ZSBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDQuMDAjQ2FubmluZyBvciBib3R0bGluZyBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDUuMDAjQWRkcmVzc2luZyBvciBtYWlsaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wNi4wMCNTZWxmIGFkaGVzaXZlIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wNy4wMCNEZWNhbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDguMDAjQmFyIGNvZGUgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA5LjAwI1BhY2thZ2luZyBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTAuMDAjQ29uc2VjdXRpdmVseSBudW1iZXJlZCBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTEuMDAjTGFiZWwgbWFraW5nIHRhcGVzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjEyLjAwI1ByaW50ZXIgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjEzLjAwI0NvbG9yIGNvZGluZyBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTQuMDAjUmVtb3ZhYmxlIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xNS4wMCNBZGhlc2l2ZSBkb3RzIG9yIGFycm93cyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xNi4wMCNTZWxmIGFkaGVzaXZlIGZsYWdzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjAwLjAwI1NpZ25hZ2UjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDEuMDAjTWV0YWxsaWMgbmFtZXBsYXRlcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wMi4wMCNOb24gbWV0YWxsaWMgbmFtZXBsYXRlcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wMy4wMCNJbGx1bWluYXRlZCBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wNC4wMCNTYWZldHkgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDUuMDAjU2VsZiBhZGhlc2l2ZSBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wNi4wMCNCYW5uZXJzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA3LjAwI01hZ25ldGljIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA4LjAwI05lb24gc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDkuMDAjTW92aW5nIG1lc3NhZ2Ugc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTAuMDAjVHJhZmZpYyBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xMS4wMCNCaWxsYm9hcmRzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjEyLjAwI0RpcmVjdGlvbmFsIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjEzLjAwI1BvaW50IG9mIHB1cmNoYXNlIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE0LjAwI1Blbm5hbnRzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE1LjAwI0ZsYWdzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE2LjAwI1dvb2RlbiBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xNy4wMCNNYXJrZXIgcGxhdGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE4LjAwI0luZm9ybWF0aW9uYWwgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTkuMDAjU2lnbmFsbGluZyBjb21wb25lbnRzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjIwLjAwI0VtYmxlbXMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMjEuMDAjVmlueWwgbGV0dGVycyBvciBudW1iZXJzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjIyLjAwI0ZsYWdwb2xlcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4yMy4wMCNTaWduIGhvbGRlcnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDAuMDAjSWRlbnRpZmljYXRpb24gZG9jdW1lbnRzIzU1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEyLjE4LjAxLjAwI0NhciB0YXggZGlzY3MjNTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDIuMDAjSWRlbnRpZmljYXRpb24gY2FyZHMjNTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDMuMDAjUGFzc3BvcnRzIzU1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE4LjA0LjAwI0JhZGdlcyBvciBiYWRnZSBob2xkZXJzIzU1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjAwLjAwLjAwLjAwI0Z1cm5pdHVyZSBhbmQgRnVybmlzaGluZ3MjNTYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMDAuMDAuMDAjQWNjb21tb2RhdGlvbiBmdXJuaXR1cmUjNTYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDAuMDAjRnVybml0dXJlIzU2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjAxLjAwI1N0YW5kcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wMi4wMCNTb2ZhcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wMy4wMCNDb2F0IHJhY2tzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA0LjAwI0NoYWlycyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wNS4wMCNFbnRlcnRhaW5tZW50IGNlbnRlcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDYuMDAjRnV0b25zIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA3LjAwI0Jvb2tjYXNlcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wOC4wMCNNYXR0cmVzc2VzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA5LjAwI0RyZXNzZXJzIG9yIGFybW9pcmVzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjEwLjAwI1BhcnRpdGlvbnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTIuMDAjU3Rvb2xzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjEzLjAwI0NvdHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTQuMDAjRm9vdCBzdG9vbHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTUuMDAjQmVkcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xNi4wMCNDaGVzdHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTguMDAjV2FsbCByYWNrcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xOS4wMCNUYWJsZXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjAuMDAjTG9ja2VycyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yMS4wMCNCZWQgaGVhZGJvYXJkIG9yIGZvb3Rib2FyZCM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yMi4wMCNBcm0gY2hhaXIjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjMuMDAjVW1icmVsbGEgc3RhbmRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjI0LjAwI0lyb25pbmcgYm9hcmRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjI1LjAwI0lyb25pbmcgYm9hcmQgY292ZXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjI2LjAwI0ZyaWRnZSBiYXIjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjcuMDAjSG91c2Vob2xkIHR5cGUgbGluZW4gZHJpZXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjI4LjAwI0FydGlmaWNpYWwgcGxhbnRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjI5LjAwI01hZ2F6aW5lIHJhY2tzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjAwLjAwI091dGRvb3IgZnVybml0dXJlIzU2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjAxLjAwI091dGRvb3IgdW1icmVsbGFzIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjAyLjAwI091dGRvb3IgY2hhaXJzIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjAzLjAwI091dGRvb3IgdGFibGVzIG9yIHBpY25pYyB0YWJsZXMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDQuMDAjT3V0ZG9vciBzd2luZ3MjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDUuMDAjT3V0ZG9vciBiZW5jaGVzIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjA2LjAwI0Zsb3dlciBzdGFuZHMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDcuMDAjT3V0c2lkZSBjbG90aGVzIGRyeWVyIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjAwLjAwI09mZmljZSBmdXJuaXR1cmUjNTYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDEuMDAjQ3JlZGVuemFzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjAyLjAwI0ZpbGluZyBjYWJpbmV0cyBvciBhY2Nlc29yaWVzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjAzLjAwI0Rlc2tzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjA0LjAwI1RhYmxlIGJhc2UjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDUuMDAjU2hvd2Nhc2VzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjA2LjAwI0NvbmZlcmVuY2luZyB0YWJsZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDcuMDAjRHJhZnRpbmcgdGFibGVzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjA4LjAwI01vYmlsZSBmaWxlcyBvciBlcXVpcG1lbnQgY2FydHMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDkuMDAjVGFibGUgdG9wcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wMC4wMCNCYWJ5IGFuZCB0b2RkbGVyIGZ1cm5pdHVyZSBhbmQgYWNjZXNzb3JpZXMjNTYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDMuMDAjQ2FycmlhZ2VzIG9yIHBlcmFtYnVsYXRvcnMgb3Igc3Ryb2xsZXJzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA0LjAwI0NyaWJzIG9yIHBsYXlwZW5zIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA1LjAwI0NhciBzZWF0cyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wNi4wMCNIaWdoIGNoYWlycyBvciBhY2Nlc3NvcmllcyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wNy4wMCNCb3VuY2VyIHNlYXRzIG9yIGp1bXBlcnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDguMDAjU3dpbmdzIG9yIGp1bXBlcnMgb3IgYWNjZXNzb3JpZXMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDkuMDAjUG90dHkgc2VhdHMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMTAuMDAjQmFieSBiYXRocyBvciB0dWJzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjExLjAwI0Jhc3NpbmV0cyBvciBjcmFkbGVzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjEyLjAwI0NoYW5naW5nIHRhYmxlcyBvciBhY2Nlc3NvcmllcyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4wMC4wMC4wMCNDb21tZXJjaWFsIGFuZCBpbmR1c3RyaWFsIGZ1cm5pdHVyZSM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wMC4wMCNXb3Jrc3RhdGlvbnMgYW5kIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wMS4wMCNNb2R1bGFyIHJlY2VwdGlvbiBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDIuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgZXhlY3V0aXZlIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wMy4wMCNNb2R1bGFyIGV4ZWN1dGl2ZSBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDQuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgbWFuYWdlcmlhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDUuMDAjTW9kdWxhciBtYW5hZ2VyaWFsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBzdGFmZiBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDcuMDAjTW9kdWxhciBzdGFmZiBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDguMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgdGVjaG5pY2FsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wOS4wMCNNb2R1bGFyIHRlY2huaWNhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMTAuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgY2xlcmljYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjExLjAwI01vZHVsYXIgY2xlcmljYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjEyLjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIHJlY2VwdGlvbiBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMTMuMDAjQ29uZmVyZW5jZSBvciBub24gbW9kdWxhciByb29tIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjAwLjAwI1BhbmVsIHN5c3RlbXMjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDEuMDAjU2NyZWVucyBmb3IgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wMi4wMCNTdG9yYWdlIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjAzLjAwI09yZ2FuaXphdGlvbiBmb3IgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wNC4wMCNXb3JrIHN1cmZhY2VzIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjA1LjAwI0xpZ2h0aW5nIG9yIHBvd2VyIG9yIGRhdGEgY29tcG9uZXRzIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjA2LjAwI1BhcnRzIG9yIGFjY2Vzc29yaWVzIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDAuMDAjQ2FzZWdvb2QgYW5kIG5vbiBtb2R1bGFyIHN5c3RlbXMjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDEuMDAjQ2FzZWdvb2QgIG9yIG5vbiBtb2R1bGFyIGRlc2sjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDIuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgY3JlZGVuemEjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDMuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgc3RvcmFnZSM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wNC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBvcmdhbml6YXRpb24jNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDUuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgbGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25lbnRzIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjA2LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjAwLjAwI0ZyZWVzdGFuZGluZyBmdXJuaXR1cmUjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDEuMDAjRnJlZXN0YW5kaW5nIGxpZ2h0aW5nIG9yIHBvd2VyIG9yIGRhdGEgY29tcG9uZW50cyM1Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wMi4wMCNGcmVlc3RhbmRpbmcgdGFibGVzIzU2LjExLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjAzLjAwI0ZyZWVzdGFuZGluZyBzdG9yYWdlIzU2LjExLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjA0LjAwI0ZyZWVzdGFuZGluZyBvcmdhbml6YXRpb24jNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDUuMDAjRnJlZXN0YW5kaW5nIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzU2LjExLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjAwLjAwI0luZHVzdHJpYWwgZnVybml0dXJlIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjAxLjAwI0luZHVzdHJpYWwgbGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25lbnRzIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjAyLjAwI0luZHVzdHJpYWwgd29yayBzdXJmYWNlcyM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wMy4wMCNJbmR1c3RyaWFsIHN0b3JhZ2UgdW5pdHMjNTYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDQuMDAjSW5kdXN0cmlhbCBvcmdhbml6YXRpb24jNTYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDUuMDAjSW5kdXN0cmlhbCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wMC4wMCNDb21wdXRlciBzdXBwb3J0IGZ1cm5pdHVyZSM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wMS4wMCNDb21wdXRlciBzdXBwb3J0IGxpZ2h0aW5nIG9yIHBvd2VyIG9yIGRhdGEgY29tcG9uZW50cyM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wMi4wMCNDb21wdXRlciBzdXBwb3J0IHdvcmsgc3VyZmFjZXMjNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDMuMDAjQ29tcHV0ZXIgc3VwcG9ydCBzdG9yYWdlIGFjY2Vzc29yaWVzIzU2LjExLjIwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjA0LjAwI0NvbXB1dGVyIHN1cHBvcnQgb3JnYW5pemF0aW9uIzU2LjExLjIwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjA1LjAwI0NvbXB1dGVyIHN1cHBvcnQgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDAuMDAjU2VhdGluZyM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wMS4wMCNBdWRpdG9yaXVtIG9yIHN0YWRpdW0gb3Igc3BlY2lhbCB1c2Ugc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wMi4wMCNUYXNrIHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDMuMDAjR3Vlc3Qgc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wNC4wMCNFeGVjdXRpdmUgc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wNS4wMCNMb3VuZ2Ugc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wNi4wMCNTdG9vbCBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA3LjAwI1NlYXRpbmcgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDguMDAjQ29tYmluYXRpb24gY2hhaXIgd2l0aCBkZXNrIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA5LjAwI0JlbmNoZXMjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMDAuMDAuMDAjQ2xhc3Nyb29tIGFuZCBpbnN0cnVjdGlvbmFsIGFuZCBpbnN0aXR1dGlvbmFsIGZ1cm5pdHVyZSBhbmQgZml4dHVyZXMjNTYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDAuMDAjTGlicmFyeSBmdXJuaXNoaW5ncyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wMS4wMCNCb29rIGNhcnRzIG9yIGJvb2sgdHJ1Y2tzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjAyLjAwI0NpcmN1bGF0aW9uIG9yIGxpYnJhcmlhbiBkZXNrcyBvciBjb21wb25lbnRzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjAzLjAwI0Jvb2sgcmV0dXJucyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wNC4wMCNDYXJkIGNhdGFsb2cgdW5pdHMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDUuMDAjRGljdGlvbmFyeSBzdGFuZHMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDYuMDAjVXBob2xzdGVyZWQgYmVuY2hlcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wNy4wMCNQdWJsaWMgYWNjZXNzIHRhYmxlcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wOC4wMCNCb29rIGJyb3dzZXIgdW5pdHMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDkuMDAjU2xvcGVkIHJlYWRpbmcgdGFibGVzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjEwLjAwI0Jvb2sga2lvc2tzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjExLjAwI0xpYnJhcnkgY29tcGFjdCBkaXNjIG9yIGF1ZGlvIGNhc3NldHRlIGRpc3BsYXllcnMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMTIuMDAjUm90YXJ5IGlzbGFuZCBzdGFuZHMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMTQuMDAjSGFuZyB1cCBiYWcgcmFja3Mgb3IgYmFncyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMS4wMC4wMCNBcnQgY2xhc3Nyb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjExLjAxLjAwI0FydCBob3JzZSM1Ni4xMi4xMS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMS4wMi4wMCNBcnQgc3R1ZGVudCBiZW5jaCM1Ni4xMi4xMS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMi4wMC4wMCNGaXJzdCBhaWQgcm9vbSBmdXJuaXNoaW5ncyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMi4wMS4wMCNGaXJzdCBhaWQgY291Y2hlcyM1Ni4xMi4xMi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMy4wMC4wMCNHZW5lcmFsIGVkdWNhdGlvbmFsIGZhY2lsaXR5IGZpeHR1cmVzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjAxLjAwI1N0YW5kaW5nIHJpc2VycyM1Ni4xMi4xMy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMy4wMi4wMCNUYWJsZSBvciBjaGFpciBtb3ZlcnMgb3IgY2FkZHlzIzU2LjEyLjEzLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjAzLjAwI1J1YmJlciBicnVzaCBmbG9vciBtYXR0aW5nIzU2LjEyLjEzLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjA0LjAwI1BsYW5uaW5nIHRhYmxlcyM1Ni4xMi4xMy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNC4wMC4wMCNDYWZldGVyaWEgYW5kIGx1bmNocm9vbSBmdXJuaXNoaW5ncyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNC4wMS4wMCNNb2JpbGUgYmVuY2ggdGFibGVzIzU2LjEyLjE0LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE0LjAyLjAwI01vYmlsZSBzdG9vbCB0YWJsZXMjNTYuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTQuMDMuMDAjTW9iaWxlIHRhYmxlcyM1Ni4xMi4xNC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wMC4wMCNHZW5lcmFsIGNsYXNzcm9vbSBmdXJuaXNoaW5ncyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wMS4wMCNBY3Rpdml0eSB0YWJsZXMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDIuMDAjQ2xhc3Nyb29tIGNoYWlycyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wMy4wMCNDbGFzc3Jvb20gYmVuY2hlcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wNC4wMCNDbGFzcm9vbSBzdG9vbHMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDUuMDAjQ2xhc3Nyb29tIHRhYmxlcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wNi4wMCNTdHVkZW50IGRlc2tzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA3LjAwI1N0dWR5IGNhcnJlbHMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDguMDAjU3R1ZGVudCBjb21wdXRlciBkZXNrcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wOS4wMCNTdHVkZW50IGNvbXB1dGVyIHRhYmxlcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wMC4wMCNDcmVhdGl2ZSBwbGF5IGFuZCByZXN0IHRpbWUgZnVybmlzaGluZ3MgZm9yIGRheWNhcmUgYW5kIGVhcmx5IGNoaWxkaG9vZCBmYWNpbGl0aWVzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjAxLjAwI1RvZGRsZXIgb3IgY2hpbGQgc2l6ZSBsaXZpbmcgcm9vbSBzZXRzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjAyLjAwI1RvZGRsZXIgb3IgY2hpbGQgc2l6ZSBzb2ZhcyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wMy4wMCNUb2RkbGVyIG9yIGNoaWxkIHNpemUgZWFzeSBjaGFpcnMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDQuMDAjVG9kZGxlciBvciBjaGlsZCBzaXplIGJlYW4gYmFnIGNoYWlycyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wNS4wMCNMb3cgcmlzZSByb29tIGRpdmlkZXJzIG9yIHBsYXkgcGFuZWxzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA2LjAwI0NoaWxkcyByZXN0IG1hdHMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDcuMDAjQ2hpbGRzIHJlc3QgbWF0IHJhY2tzIG9yIGhvbGRlcnMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDguMDAjQ2hpbGRyZW5zIGNvdHMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDkuMDAjQ2hpbGRyZW5zIGNvdCBjYXJyaWVycyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4xMC4wMCNDaGlsZHJlbnMgY290IGFjdGl2aXR5IHN5c3RlbXMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDAuMDAjQm9vayBhbmQgZ2VuZXJhbCBzdG9yYWdlIHVuaXRzIGZvciBjbGFzc3Jvb21zIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE3LjAxLjAwI0dlbmVyYWwgc3RvcmFnZSB1bml0cyM1Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wMi4wMCNCb29rIHN0b3JhZ2UgdW5pdHMjNTYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDMuMDAjQ3ViYmllIHVuaXRzIzU2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE3LjA0LjAwI0luc3RpdHV0aW9uYWwgU3RvcmFnZSBDYWJpbmV0cyM1Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wMC4wMCNWb2NhdGlvbmFsIGNsYXNzcm9vbSBmdXJuaXNoaW5ncyBhbmQgZml4dHVyZXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTguMDEuMDAjVGVjaG5pY2FsIGVkdWNhdGlvbiB0b29sIHN0b3JhZ2UgY2FiaW5ldHMgb3IgY2FiaW5ldHMgd2l0aCB0b29scyM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wMi4wMCNHZW5lcmFsIHNob3AgdG9vbCBzdG9yYWdlIGNhYmluZXRzIG9yIGNhYmluZXRzIHdpdGggdG9vbHMjNTYuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTguMDMuMDAjV29yZHdvcmtpbmcgdG9vbCBzdG9yYWdlIGNhYmluZXRzIG9yIGNhYmluZXRzIHdpdGggdG9vbHMjNTYuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTguMDQuMDAjSW5zdHJ1Y3RvcnMgdGVjaG5pY2FsIGRlc2sjNTYuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTguMDUuMDAjRmxhdCBmaWxlcyM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOS4wMC4wMCNEZW1vbnN0cmF0aW9uIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE5LjAxLjAwI1Nld2luZyBtYWNoaW5lIGRlbW9uc3RyYXRvciB0YWJsZXMjNTYuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMjAuMDAuMDAjTGFib3JhdG9yeSBmdXJuaXR1cmUjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMjAuMDEuMDAjTGFib3JhdG9yeSBiZW5jaGVzIzU2LjEyLjIwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjIwLjAyLjAwI0xhYm9yYXRvcnkgc3RvcmFnZSB1bml0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMi4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4yMC4wMy4wMCNMYWJvcmF0b3J5IHdvcmtzdGF0aW9ucyM1Ni4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4wMC4wMC4wMC4wMCNNdXNpY2FsIEluc3RydW1lbnRzIGFuZCBHYW1lcyBhbmQgVG95cyBhbmQgQXJ0cyBhbmQgQ3JhZnRzIGFuZCBFZHVjYXRpb25hbCBFcXVpcG1lbnQgYW5kIE1hdGVyaWFscyBhbmQgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjAwLjAwLjAwI0RldmVsb3BtZW50YWwgYW5kIHByb2Zlc3Npb25hbCB0ZWFjaGluZyBhaWRzIGFuZCBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIGFuZCBzdXBwbGllcyM2MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wMC4wMCNNYXRoIGtpdHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDEuMDAjQWRkaXRpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjAyLjAwI0RpdmlzaW9uIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wMy4wMCNGcmFjdGlvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDQuMDAjTWlkZGxlIFNjaG9vbCBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDUuMDAjRWFybHkgY2hpbGRob29kIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNi4wMCNNZWFzdXJlbWVudCBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDcuMDAjTXVsdGlwbGljYXRpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA4LjAwI0VsZW1lbnRhcnkgbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA5LjAwI1N1YnRyYWN0aW9uIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4xMC4wMCNIaWdoIHNjaG9vbCBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDAuMDAjRWxlY3Ryb25pYyBsZWFybmluZyBhaWRzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjExLjAxLjAwI0VsZWN0cm9uaWMgY2FyZCByZWFkZXJzIzYwLjEwLjExLjAwLjAwCi11bnNwc2M3IzYwLjEwLjExLjAyLjAwI0N1cnJpY3VsdW0gYmFzZWQgZWxlY3Ryb25pYyBsZWFybmluZyBhaWRzIzYwLjEwLjExLjAwLjAwCi11bnNwc2M3IzYwLjEwLjExLjAzLjAwI0VsZWN0cm9uaWMgZ2xvYmVzIzYwLjEwLjExLjAwLjAwCi11bnNwc2M3IzYwLjEwLjExLjA0LjAwI0VsZWN0cm9uaWMgcXVpeiBtYWNoaW5lcyM2MC4xMC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wMC4wMCNFZHVjYXRpb25hbCBpbmNlbnRpdmVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjAxLjAwI0JpYmxlIGJhc2VkIGNoYXJ0IHN0aWNrZXJzIzYwLjEwLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjAyLjAwI0JpYmxlIGJhc2VkIGluY2VudGl2ZSBjaGFydHMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDMuMDAjSW5jZW50aXZlIGNoYXJ0IHN0aWNrZXJzIzYwLjEwLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjA0LjAwI0luY2VudGl2ZSBjaGFydHMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDUuMDAjSW5jZW50aXZlIHB1bmNoY2FyZHMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDAuMDAjRWR1Y2F0aW9uYWwgc3RpY2tlcnMgYW5kIHN1cHBsaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjAxLjAwI0JpYmxlIGJhc2VkIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjAyLjAwI0dpYW50IHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjAzLjAwI05vdGFyeSBzZWFsIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA0LjAwI1Bob3RvIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA1LjAwI1Jld2FyZCBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wNi4wMCNTY2VudGVkIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA3LjAwI1NoYXBlIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA4LjAwI1NwYXJrbGUgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDkuMDAjUmV3YXJkIHN0YXIgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTAuMDAjU3RpY2tlciBhc3NvcnRtZW50cyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xMS4wMCNTdGlja2VyIGJvb2tzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjEyLjAwI1N0aWNrZXIgYm94ZXMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTMuMDAjVGF0dG9vIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE0LjAwI0FkZGl0aW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE1LjAwI0FsbCBmYWN0cyBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xNi4wMCNCbGFuayBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xNy4wMCNEaXZpc2lvbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xOC4wMCNFbGVjdHJvbmljIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE5LjAwI0VxdWl2YWxlbnQgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjAuMDAjRnJhY3Rpb24gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjEuMDAjR3JlYXRlciB0aGFuIG9yIGxlc3MgdGhhbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yMi4wMCNNdWx0aXBsaWNhdGlvbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yMy4wMCNTdWJ0cmFjdGlvbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yNC4wMCNBbHBoYWJldCBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yNS4wMCNXb3JkIGJ1aWxkaW5nIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI2LjAwI1Bob25pY3MgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjcuMDAjSGFuZHdyaXRpbmcgb3Igd3JpdGluZyBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yOC4wMCNOdW1iZXIgY2xhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjkuMDAjTW9uZXkgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMzAuMDAjVGltZSBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4zMS4wMCNTdGF0ZSBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNC4wMC4wMCNDbGFzc3Jvb20gYXdhcmRzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjAxLjAwI0JhZGdlcyM2MC4xMC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNC4wMi4wMCNBd2FyZCBidXR0b25zIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjAzLjAwI0NlbGVicmF0aW9uIGNyb3ducyM2MC4xMC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNC4wNC4wMCNSZXdhcmQgamV3bGVyeSM2MC4xMC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNC4wNS4wMCNDbGFzc3Jvb20gcmliYm9ucyBvciByb3NldHRlcyM2MC4xMC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wMC4wMCNFZHVjYXRpb25hbCBjZXJ0aWZpY2F0ZXMgb3IgZGlwbG9tYXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDEuMDAjQmlibGUgYmFzZWQgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjAyLjAwI0JsYW5rIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wMy4wMCNDZXJ0aWZpY2F0ZSBmcmFtZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDQuMDAjQ2VydGlmaWNhdGUgaG9sZGVycyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wNS4wMCNDZXJ0aWZpY2F0ZSByaWJib25zIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA2LjAwI0RpcGxvbWFzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA3LjAwI0ZvcmVpZ24gbGFuZ3VhZ2UgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA4LjAwI0dlbmVyYWwgcHJhaXNlIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wOS4wMCNHcmFkZSBzcGVjaWZpYyBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMTAuMDAjU3ViamVjdCBzcGVjaWZpYyBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDAuMDAjVGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDEuMDAjQXNzZXNzbWVudCByZXNvdXJjZSBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMi4wMCNDYWxlbmRhcnMgb3IgY3V0IG91dHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDMuMDAjQ2hhcmFjdGVyIGVkdWNhdGlvbiByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDQuMDAjQ2xhc3Nyb29tIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA1LjAwI0NyaXRpY2FsIHRoaW5raW5nIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wNi4wMCNDcm9zcyBjdXJyaWN1bHVtIGd1aWRlcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wNy4wMCNDdXJyaWN1bHVtIGd1aWRlcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wOC4wMCNGYWJyaWMgY2hhcnRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA5LjAwI0ZsYW5uZWwgYm9hcmQgYWlkcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xMC4wMCNFZHVjYXRvciBnaWZ0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xMS4wMCNHcmFkaW5nIHN0YW1wcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xMi4wMCNIYWxsIHBhc3NlcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xMy4wMCNIb21lIGVkdWNhdGlvbiByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTQuMDAjSG9tZXdvcmsgYXNzaWdubWVudCByZXNvdXJjZXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTUuMDAjSWRlYSBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xNi4wMCNNYWduZXRpYyBib2FyZCBhaWRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE3LjAwI05hbWUgcGxhdGVzIG9yIHRhZ3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTguMDAjVGVhY2hlciBwbGFuIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE5LjAwI1BvY2tldCBjaGFydHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjAuMDAjVGVhY2hlciBjb21tdW5pY2F0aW9uIHBvc3RjYXJkcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yMS4wMCNQcm9mZXNzaW9uYWwgdGVhY2hlciByZXNvdXJjZSBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yMi4wMCNUZWFjaGVyIGNsYXNzcm9vbSBncmFkaW5nIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjIzLjAwI0NsYXNzcm9vbSBzdHVkZW50IHNlYXRpbmcgY2hhcnRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI0LjAwI1N1YnN0aXR1dGUgdGVhY2hlciBmb2xkZXJzIG9yIGZvcm1zIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI1LjAwI1RlY2hub2xvZ3kgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjYuMDAjVGVjaG5vbG9neSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI3LjAwI1Rlc3QgdGFraW5nIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yOC4wMCNUaGVtZSB1bml0IHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yOS4wMCNNaWRkbGUgb3IganVuaW9yIHNjaG9vbCB0ZWFjaGluZyBraXRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjMwLjAwI0xhYm9yYXRvcnkgbWFudWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOC4wMC4wMCNDaHVyY2ggc2Nob29sIGVkdWNhdGlvbmFsIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOC4wMS4wMCNCaWJsZSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAyLjAwI0JpYmxlIGJhc2VkIGRyYW1hcyM2MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOC4wMy4wMCNCaWJsZSBiYXNlZCByZXNvdXJjZSBvciBhY3Rpdml0eSBib29rcyM2MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOC4wNC4wMCNTdW5kYXkgc2Nob29sIGFjdGl2aXR5IHJlc291cmNlIGJvb2tzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjA1LjAwI1ZhY2F0aW9uIGJpYmxlIHNjaG9vbCByZXNvdXJjZXMjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDAuMDAjQWxwaGFiZXQgc2tpbGxzIG1hdGVyaWFscyBhbmQgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjAxLjAwI0FscGhhYmV0IGFjdGl2aXR5IGJvb2tzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjAyLjAwI0FscGhhYmV0IGN1YmVzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjAzLjAwI0FscGhhYmV0IGRlc2sgdGFwZXMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDQuMDAjQWxwaGFiZXQga2l0cyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wNS4wMCNBbHBoYWJldCBsZXR0ZXIgdGlsZXMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDYuMDAjQWxwaGFiZXQgcG9zdGVyIGNhcmRzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA3LjAwI0FscGhhYmV0IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDguMDAjQWxwaGFiZXQgcmVzb3VyY2UgYm9va3MjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDkuMDAjQWxwaGFiZXQgc3RhbXBzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjEwLjAwI0FscGhhYmV0IHdhbGwgY2FyZHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMTEuMDAjVGFjdGlsZSBhbHBoYWJldHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDAuMDAjV29yZCBidWlsZGluZyByZXNvdXJjZSBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjAxLjAwI1NwZWVjaCBtaXJyb3IjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDIuMDAjU3BlbGxpbmcgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjAzLjAwI1dvcmQgYnVpbGRpbmcgYWN0aXZpdHkgYm9va3MjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDQuMDAjV29yZCBidWlsZGluZyBraXRzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjA1LjAwI1dvcmQgYnVpbGRpbmcgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDYuMDAjV29yZCBidWlsZGluZyB0aWxlcyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wNy4wMCNXb3JkIHdhbGxzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjAwLjAwI0xhbmd1YWdlIGFydHMgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjAxLjAwI0FkamVjdGl2ZSByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wMi4wMCNBZHZlcmIgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDMuMDAjR3JhbW1hciByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wNC4wMCNOb3VuIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjA1LjAwI1B1bmN0dXRhdGlvbiByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wNi4wMCNWZXJiIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjAwLjAwI1Bob25pY3MgcmVzb3VyY2UgbWF0ZXJpYWxzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wMS4wMCNQaG9uaWNzIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjAyLjAwI1Bob25pY3MgZHJpbGwgY2FyZHMjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDMuMDAjUGhvbmljcyBraXQjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDQuMDAjUGhvbmljcyBwaWN0dXJlIGNhcmRzIzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjA1LjAwI1Bob25pY3MgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDYuMDAjUGhvbmljcyB0aWxlcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wMC4wMCNSZWFkaW5nIGJvb2tzIGFuZCByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDEuMDAjUmVhZGluZyBhY3Rpdml0eSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wMi4wMCNCZWdpbm5pbmcgcmVhZGluZyBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wMy4wMCNCaWJsZSBiYXNlZCBjaGlsZHJlbnMgbGl0ZXJhdHVyZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wNC4wMCNDaGlsZHJlbnMgbGl0ZXJhdHVyZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wNS4wMCNDcml0aWNhbCByZWFkaW5nIHNraWxscyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wNi4wMCNGbGFubmVsIGJvYXJkcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wNy4wMCNQb2V0cnkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDguMDAjUmVhZGluZyBjb21wcmVoZW5zaW9uIG1hdGVyaWFscyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wOS4wMCNSZWFkaW5nIGRldmVsb3BtZW50IG1hdGVyaWFscyBvciBraXRzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjEwLjAwI1JlYWRpbmcgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMTEuMDAjUmVhZGluZyB0aGVtYXRpYyB1bml0cyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4xMi4wMCNWb2NhYnVsYXJ5IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjAwLjAwI0Vhcmx5IGxlYXJuaW5nIG1hdGggYW5kIGNvdW50aW5nIHJlc291cmNlcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDEuMDAjQWJhY3VzIG9yIGNvdW50aW5nIGZyYW1lcyM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wMi4wMCNBY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyBmb3Igd29ya2luZyB3aXRoIGVhcmx5IG1hdGggbWFuaXB1bGF0aXZlcyM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wMy4wMCNBY3Rpdml0eSBjYXJkcyBmb3Igd29ya2luZyB3aXRoIGVhcmx5IG1hdGggbWFuaXB1bGF0aXZlcyM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wNC4wMCNCZWFkcyBvciBiZWFkIGFjdGl2aXR5IHNldHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDUuMDAjQ291bnRlcnMgb3IgY291bnRlciBhY3Rpdml0eSBzZXRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA2LjAwI0NvdW50aW5nIG9yIHNvcnRpbmcgdHJheXMgb3IgYm93bHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDcuMDAjTGFjZXMgb3IgbGFjaW5nIHNldHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDguMDAjTGlua2luZyBtYW5pcHVsYXRpdmVzIG9yIGxpbmtpbmcgYWN0aXZpdHkgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wOS4wMCNNYXRoIGdhbWUgY2hpcHMgb3IgdG9rZW5zIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjEwLjAwI051bWJlciBjYXJkcyM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4xMS4wMCNOdW1iZXIgZm9ybXMgbW9kZWxzIG9yIGFjY2Vzc29yaWVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjEyLjAwI1BlZ2JvYXJkcyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4xMy4wMCNQZWdzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjE0LjAwI1NvcnRpbmcgbWFuaXB1bGF0aXZlcyBvciBzb3J0aW5nIGFjdGl2aXR5IHNldHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDAuMDAjQmFzaWMgbWF0aCBvcGVyYXRpb25zIGFuZCBudW1lcmF0aW9uIHJlc291cmNlcyBhbmQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjAxLjAwI0FkZGl0aW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjAyLjAwI0Jhc2ljIG9wZXJhdGlvbnMgbW9kZWxzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjAzLjAwI0Jhc2ljIG9wZXJhdGlvbnMgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wNC4wMCNEaXZpc2lvbiBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wNS4wMCNNdWx0aXBsaWNhdGlvbiBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wNi4wMCNTdWJ0cmFjdGlvbiBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wNy4wMCNOdW1iZXIgZGVzayB0YXBlcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wOC4wMCNIdW5kcmVkcyBjaGFydHMgb3IgYm9hcmRzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA5LjAwI0h1bmRyZWRzIG51bWJlciB0aWxlcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4xMC4wMCNOdW1iZXIga2l0cyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4xMS4wMCNOdW1iZXIgbGluZXMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMTIuMDAjTnVtYmVyYXRpb24gYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMTMuMDAjRG9taW5vZXMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDAuMDAjUHJvYmFiaWxpdHkgb3IgY2hhbmNlIG9yIGRhdGEgb3IgcHJvYmxlbSBzb2x2aW5nIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjAxLjAwI1R3byBzaWRlZCBjb3VudGVycyBvciB0b2tlbnMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDIuMDAjU3Bpbm5lcnMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDMuMDAjRGljZSBzZXRzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA0LjAwI1Byb2JhYmlsaXR5IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA1LjAwI0xvZ2ljIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA2LjAwI0F0dHJpYnV0ZSBibG9ja3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDcuMDAjQXR0cmlidXRlIGJsb2NrcyBhY3Rpdml0eSBjYXJkcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wOC4wMCNBdHRyaWJ1dGUgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDkuMDAjR3JhcGhpbmcgbWF0IzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjEwLjAwI0dyYXBoaW5nIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjExLjAwI0xvZ2ljIGdhbWVzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjEyLjAwI0F0dHJpYnV0ZSBzZXRzIG9yIGtpdHMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTMuMDAjUHJvYmxlbSBzb2x2aW5nIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjE0LjAwI1Byb2JsZW0gc29sdmluZyBhY3Rpdml0eSBjYXJkcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wMC4wMCNQYXR0ZXJuaW5nIG9yIG1hdGNoaW5nIG9yIHNwYXRpYWwgcGVyY2VwdGlvbiBvciBsb2dpY2FsIHRoaW5raW5nIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjAxLjAwI1BhdHRlcm4gYmxvY2tzIG9yIHBhcnF1ZXRyeSBibG9ja3MgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDIuMDAjUGF0dGVybiBibG9ja3MjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDMuMDAjUGF0dGVybiBibG9jayBhY3Rpdml0eSBvciBwYXR0ZXJuIGNhcmRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA0LjAwI1BhdHRlcm4gYmxvY2sgZ2FtZXMgb3IgYWN0aXZpdHkgc2V0cyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wNS4wMCNQYXR0ZXJuIGJsb2NrIHN0aWNrZXJzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA2LjAwI1BhdHRlcm4gYmxvY2tzIG1pcnJvciM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wNy4wMCNQYXR0ZXJuIGJsb2NrcyBjaGFydHMgb3IgcG9zdGVycyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wOC4wMCNQYXJxdWV0cnkgYmxvY2tzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA5LjAwI1BhcnF1ZXRyeSBibG9ja3MgYWN0aXZpdHkgb3IgcGF0dGVybiBjYXJkcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xMC4wMCNQYXJxdWV0cnkgYmxvY2tzIGFjdGl2aXR5IHNldHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTEuMDAjVGFuZ3JhbXMgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTIuMDAjVGFuZ3JhbSBhY3Rpdml0eSBvciBwYXR0ZXJuIGNhcmRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjEzLjAwI1RhbmdyYW0gcHV6emxlIGFjdGl2aXR5IHNldHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTQuMDAjVGFuZ3JhbXMgcHV6emxlcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xNS4wMCNQZW50b21pbm9lcyBhY3Rpdml0eSBhbmQgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTYuMDAjUGVudG9taW5vZXMgYWN0aXZpdHkgb3IgcGF0dGVybiBjYXJkcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xNy4wMCNQZW50b21pbm9lcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xOC4wMCNQZW50b21pbm9lcyBhY3Rpdml0eSBzZXRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjAwLjAwI0Jhc2UgdGVuIGFuZCBwbGFjZSB2YWx1ZSB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wMS4wMCNCYXNlIHRlbiBibG9ja3MjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDIuMDAjQmFzZSB0ZW4gb3IgcGxhY2UgdmFsdWUgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDMuMDAjQmFzZSB0ZW4gb3IgcGxhY2UgdmFsdWUgYWN0aXZpdHkgY2FyZHMjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDQuMDAjQmFzZSB0ZW4gcnViYmVyIHN0YW1wcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wNS4wMCNQbGFjZSB2YWx1ZSBncmlkcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wNi4wMCNQbGFjZSB2YWx1ZSBnYW1lcyBvciBhY3Rpdml0eSBzZXRzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjA3LjAwI1BsYWNlIHZhbHVlIG1vZGVscyBvciBhY2Nlc3NvcmllcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wMC4wMCNNb25leSBhbmQgdGltZSB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wMS4wMCNNb25leSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wMi4wMCNCdWxrIGJpbGxzIGZvciB0aGUgY2xhc3Nyb29tIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAzLjAwI0J1bGsgY29pbnMgZm9yIHRoZSBjbGFzc3Jvb20jNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDQuMDAjQ29pbiBjdWJlcyBvciBkaWNlIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjA1LjAwI01hZ25ldGljIG1vbmV5IzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjA2LjAwI092ZXJoZWFkIGJpbGxzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjA3LjAwI092ZXJoZWFkIGNvaW5zIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjA4LjAwI01vbmV5IHB1enpsZXMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDkuMDAjTW9uZXkgcnViYmVyIHN0YW1wcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xMC4wMCNDb2luIGJhbmsjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTEuMDAjTW9uZXkgZ2FtZXMgb3Iga2l0cyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xMi4wMCNQbGF5IGNhc2ggcmVnaXN0ZXJzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjEzLjAwI01vbmV5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTQuMDAjVGltZSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xNS4wMCNUaW1lIHJ1YmJlciBzdGFtcHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTYuMDAjVGltZSBraXRzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjE3LjAwI1RpbWUgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wMC4wMCNGcmFjdGlvbnMgYW5kIHBlbnRvbWlub2VzIGFuZCBkZWNpbWFscyB0ZWFjaGluZyBhaWRzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjAxLjAwI0ZyYWN0aW9uIGNpcmNsZXMgb3Igc3F1YXJlcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wMi4wMCNEZWNpbWFsIHNxdWFyZXMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDMuMDAjRnJhY3Rpb24gYWN0aXZpdHkgYm9va3MjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDQuMDAjRnJhY3Rpb24gYmFycyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wNS4wMCNGcmFjdGlvbiBjaGFydHMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDYuMDAjRnJhY3Rpb24gZGljZSM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wNy4wMCNGcmFjdGlvbiBnYW1lcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wOC4wMCNGcmFjdGlvbiBraXRzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA5LjAwI0ZyYWN0aW9uIHRpbGVzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjEwLjAwI0ZyYWN0aW9ucyBkaXNjcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4xMi4wMCNQZW50b21pbm9lcyBhY3Rpdml0eSBib29rIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjEzLjAwI1BlbnRvbWlub2VzIHBhdHRlcm4gY2FyZHMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDAuMDAjR2VvbWV0cnkgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDEuMDAjR2VvbWV0cnkgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDIuMDAjR2VvbWV0cnkgY2hhcnRzIG9yIHBvc3RlcnMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDMuMDAjR2VvYm9hcmRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA0LjAwI0dlb21ldHJpYyBjb25zdHJ1Y3Rpb24gc2V0cyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wNS4wMCNEb3VibGUgc2lkZWQgZ2VvYm9hcmRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA2LjAwI0dlb2JvYXJkIGdhbWVzIG9yIGFjdGl2aXR5IGtpdHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDcuMDAjR2VvYm9hcmQgcnViYmVyIGJhbmRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA4LjAwI0dlb2JvYXJkcyBhY3Rpdml0eSBjYXJkcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wOS4wMCNHZW9tZXRyaWMgY2hhbGtib2FyZCBkcmF3aW5nIGluc3RydW1lbnRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjEwLjAwI0dlb21ldHJ5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMTEuMDAjR2VvTWlycm9yIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjEyLjAwI0dlb21ldHJpYyBzb2xpZHMgbW9kZWxzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjAwLjAwI0FsZ2VicmEgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDEuMDAjQWxnZWJyYSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMi4wMi4wMCNDZW50aW1ldGVyIGN1YmVzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjAzLjAwI0FsZ2VicmEgb3IgcHJlIGFsZ2VicmEgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMi4wNC4wMCNBbGdlYnJhIG1vZGVscyBvciBhY2Nlc3NvcmllcyM2MC4xMC4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMy4wMC4wMCNQcmVjYWxjdWx1cyBhbmQgY2FsY3VsdXMgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzMuMDEuMDAjQ2FsY3VsdXMgYWN0aXZpdHkgb3IgcmVzb3VyY2VzIGJvb2tzIzYwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMzLjAyLjAwI1ByZWNhbGN1bHVzIG9yIGNhbGN1bHVzIHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzMuMDMuMDAjUHJlY2FsY3VsdXMgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDAuMDAjR2VvZ3JhcGh5IGFuZCBtYXAgc2tpbGxzIHJlc291cmNlcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDEuMDAjR29lZ3JhcGh5IGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjAyLjAwI0NvbnRpbmVudHMgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDMuMDAjRWxlY3Ryb25pYyBzb2NpYWwgc3R1ZGllcyBsZWFybmluZyBhaWRzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA0LjAwI0dlb2dyYXBoeSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA1LjAwI01hcCByYWNrcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wNi4wMCNNYXAgc3RlbmNpbCBraXRzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA3LjAwI1BvcnRhYmxlIHdhbGwgbWFwcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wOC4wMCNHZW9ncmFwaHkgcmVzb3VyY2Ugb3IgYWN0aXZpdHkgYm9va3MjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDAuMDAjUG9saXRpY2FsIHNjaWVuY2UjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDEuMDAjRWNvbm9taWNzIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM1LjAyLjAwI0dvdmVybm1lbnQgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDMuMDAjR292ZXJubWVudCByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM1LjA0LjAwI1N0YXRlIHRoZW1lIHVuaXRzIzYwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjAwLjAwI011bHRpY3VsdHVyYWwgYWN0aXZpdGllcyBhbmQgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjAxLjAwI0FuY2llbnQgY2l2aWxpemF0aW9ucyByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDIuMDAjQ3VzdG9tcyBvciByaXR1YWxzIG9yIHRyYWRpdGlvbnMgcmVzb3VyY2VzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjAzLjAwI0V0aG5pYyBkaXZlcnNpdHkgcmVzb3VyY2VzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjA0LjAwI0dlbmVhbG9neSByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDUuMDAjTXVsdGljdWx0dXJhbCBob2xpZGF5cyByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDYuMDAjTXVsdGljdWx0dXJhbCB0aGVtZSB1bml0cyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wMC4wMCNGb3JlaWduIGxhbmd1YWdlcyByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDEuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBzcGFuaXNoIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjAyLjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgZnJlbmNoIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjAzLjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgZ2VybWFuIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjA0LjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgZW5nbGlzaCM2MC4xMC4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wNS4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIGxhdGluIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjA2LjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgaXRhbGlhbiM2MC4xMC4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wMC4wMCNIaXN0b3J5IHRlYWNoaW5nIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wMS4wMCNBZnJpY2FuIGhpc3RvcnkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDIuMDAjSGlzdG9yeSBjaGFydHMgb3IgcG9zdGVycyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wMy4wMCNFdXJvcGVhbiBoaXN0b3J5IHJlc291cmNlIGJvb2tzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA0LjAwI0hpc3RvcmljYWwgbWFwcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wNS4wMCNIaXN0b3J5IHRoZW1lIHVuaXRzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA2LjAwI0hpc3RvcnkgcGhvdG8gY2FyZHMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDcuMDAjSGlzdG9yeSByZXNvdXJjZSBib29rcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wOC4wMCNXb21hbnMgaGlzdG9yeSByZXNvdXJjZXMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDkuMDAjV29ybGQgaGlzdG9yeSByZXNvdXJjZXMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDAuMDAjTGl2aW5nIG9yZ2FuaXNtcyBhbmQgcHJlc2VydmVkIHNwZWNpbWVucyBhbmQgcmVsYXRlZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDEuMDAjTGl2ZSBhbXBoaWJpYSM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMi4wMCNQcmVzZXJ2ZWQgYW1waGliaWEjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDMuMDAjQW1waGliaWEgbW9kZWxzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA0LjAwI0Z1bmdpIGN1bHR1cmVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA1LjAwI0N1bHR1cmUga2l0cyBvciBzdXBwbGllcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wNi4wMCNQcm90b3pvYW4gY3VsdHVyZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDcuMDAjQXF1YXJpYSBwbGFudHMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDguMDAjVGVycmFyaXVtIHBsYW50cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wOS4wMCNMaXZlIGludmVydGVicmF0ZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTAuMDAjUHJlc2VydmVkIGludmVydGVicmF0ZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTEuMDAjTGl2ZSB2ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMi4wMCNQcmVzZXJ2ZWQgdmVydGVicmF0ZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTMuMDAjTGl2ZSByZXB0aWxpYSM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xNC4wMCNQcmVzZXJ2ZWQgcmVwdGlsbGEjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTUuMDAjRGlzc2VjdGlvbiBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjE4LjAwI0Jpb3NwaGVyZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTkuMDAjQmlvbG9neSBleHBlcmltZW50IGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjAuMDAjU3RhaW5pbmcga2l0cyBvciBzdXBwbGllcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yMS4wMCNQcmVzZXJ2ZWQgbGlmZSBjeWNsZSBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjIuMDAjQmlvbG9neSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjIzLjAwI1NrZWxldG9uIG9yIGJvbmUgb3Igc2hlbGwgc3BlY2ltZW4jNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjQuMDAjQmlvbG9neSByZXNvdXJjZSBvciBhY3Rpdml0eSBib29rcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yNS4wMCNCaW9sb2d5IHN0dWR5IG9yIGFjdGl2aXR5IGtpdHMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjYuMDAjQmlvbG9neSBjaGFydHMgb3IgcG9zdGVycyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yNy4wMCNQcmVzZXJ2ZWQgcGxhbnQgYm9keSBvciBvcmdhbiBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjguMDAjQmlvbG9neSBhY3Rpdml0eSBvciBwaG90byBjYXJkcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yOS4wMCNQbGFudCBsaWZlIGN5Y2xlIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zMC4wMCNDb21iaW5hdGlvbiBvcmdhbmlzbSBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMzEuMDAjQW5pbWFsIGJvZHkgb3IgYm9keSBwYXJ0IG9yIG9yZ2FuIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zMi4wMCNFY29zeXN0ZW0gZGlzcGxheXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMzMuMDAjSHVtYW4gYm9keSBvciBib2R5IHBhcnQgb3Igb3JnYW4gc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjM0LjAwI1Rpc3N1ZSBjdWx0dXJlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wMC4wMCNCaW90ZWNobm9sb2d5IGFuZCBiaW8gY2hlbWlzdHJ5IGFuZCBnZW5ldGljcyBhbmQgbWljcm9iaW9sb2d5IGFuZCByZWxhdGVkIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wMS4wMCNEZW94eXJpYm9udWNsZWljIGFjaWQgRE5BIG1vZGVscyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wMi4wMCNEZW94eXJpYm9udWNsZWljIGFjaWQgRE5BIGV4cGVyaW1lbnQga2l0cyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wMy4wMCNHZW5ldGljIGJvb2tzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjA0LjAwI0dlbmV0aWMga2l0cyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wNS4wMCNCYWN0ZXJpYSB0ZWFjaGluZyBraXRzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjA2LjAwI0JhY3RlcmlhIHRlc3Rpbmcgc3VwcGxpZXMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDcuMDAjRW56eW1vbG9neSBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjA4LjAwI1Byb3RlaW4gdGVzdGluZyBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQxLjAwLjAwI0JvZHkgc3lzdGVtcyBhbmQgcmVsYXRlZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDEuMDAjQm9keSBtb2RlbHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDIuMDAjQ2VsbCBtb2RlbHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDMuMDAjQ2VsbCB0ZWFjaGluZyBraXRzIzYwLjEwLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQxLjA0LjAwI0JvZHkgc3lzdGVtcyB0ZWFjaGluZyBraXRzIzYwLjEwLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQxLjA1LjAwI0JvZHkgc3lzdGVtcyB0ZWFjaGluZyBhaWRzIzYwLjEwLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjAwLjAwI1dhdGVyIHRlc3RpbmcgYW5kIGNvbnNlcnZhdGlvbiBhbmQgZWNvbG9neSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40Mi4wMS4wMCNXYXRlciB0ZXN0aW5nIGNoZW1pY2FscyM2MC4xMC40Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC40Mi4wMi4wMCNXYXRlciB0ZXN0aW5nIGFuZCBzYW1wbGluZyBraXRzIzYwLjEwLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjAzLjAwI1dhdGVyIG1vZGVscyM2MC4xMC40Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC40Mi4wNC4wMCNXYXRlciBlY29sb2d5IHN1cHBsaWVzIzYwLjEwLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQzLjAwLjAwI0FzdHJvbm9teSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40My4wMS4wMCNBc3Ryb25vbXkgbW9kZWxzIzYwLjEwLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQzLjAyLjAwI0FzdHJvbm9teSBjaGFydHMjNjAuMTAuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDMuMDMuMDAjQXN0cm9ub215IHN0dWR5IGtpdHMjNjAuMTAuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDAuMDAjR2VvbG9neSBhbmQgZWFydGggc2NpZW5jZSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMS4wMCNSb2NrIHNwZWNpbWVuIHNldHMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDIuMDAjUm9jayBzcGVjaW1lbnMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDMuMDAjRm9zc2lscyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wNC4wMCNMYW5kZm9ybSBtb2RlbHMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDUuMDAjRm9zc2lsIG1vZGVscyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wNi4wMCNHZW9sb2d5IHRvb2xzIG9yIGZpZWxkIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA3LjAwI1N0cmVhbSB0YWJsZXMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDguMDAjR2VvbG9neSBzdHVkeSBraXRzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjAwLjAwI0NoZW1pc3RyeSBhbmQgZWxlY3Ryb2NoZW1pc3RyeSBhbmQgbWljcm9jaGVtaXN0cnkjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDEuMDAjUGVyaW9kaWMgdGFibGUgcG9zdGVycyBvciBib2FyZHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDIuMDAjQ29uc3VtZXIgYW5hbHlzaXMga2l0cyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wMy4wMCNDaGVtaXN0cnkgY2xhc3Mga2l0cyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wNC4wMCNDaGVtaXN0cnkgZGVtb25zdHJhdGlvbiBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA1LjAwI0F0b21pYyBtb2RlbHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDYuMDAjTW9sZWN1bGFyIG1vZGVscyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wNy4wMCNFbGVjdHJvY2hlbWljYWwgZGVtb25zdHJhdGlvbiB0b29scyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wOC4wMCNFbGVjdHJvY2hlbWljYWwga2l0cyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wOS4wMCNGdWVsIGNlbGxzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjEwLjAwI01pY3JvY2hlbWlzdHJ5IGtpdHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMTEuMDAjTWljcm9jaGVtaXN0cnkgdG9vbHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDAuMDAjTWVjaGFuaWNhbCBwaHlzaWNzIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wMS4wMCNGb3JjZSB0YWJsZXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDIuMDAjR3Jhdml0eSBtb2RlbHMgb3IgbW9kZWwgc2V0cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wNC4wMCNJbmNsaW5lZCBwbGFuZXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDUuMDAjRnJpY3Rpb24gYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA2LjAwI1BoeXNpYyBjYXJzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA3LjAwI1BlbmR1bHVtIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wOC4wMCNUb3JxdWUgYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA5LjAwI1Byb2plY3RpbGUgYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjEwLjAwI0FpciB0YWJsZXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMTEuMDAjQWlyIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4xMi4wMCNMaWdodCBvciBwaG90byBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDAuMDAjRW5lcmd5IGFuZCBwb3dlciBwaHlzaWNzIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wMS4wMCNTb2xhciBjb2xsZWN0aW5nIGRldmljZXMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDIuMDAjU29sYXIga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wMy4wMCNFbmVyZ3kgZGVtb25zdHJhdGlvbiBraXRzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjA0LjAwI0VuZXJneSBjbGFzcyBraXRzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjA1LjAwI01hdHRlciBkZW1vbnN0cmF0aW9uIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDYuMDAjTWF0dGVyIGNsYXNzIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDcuMDAjTW9ub21ldGVycyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wOC4wMCNHYXMgZGlmZnVzaW9uIGFwcGFyYXR1cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wMC4wMCNXYXZlIGFuZCBzb3VuZCBwaHlzaWNzIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wMS4wMCNXYXZlIGdlbmVyYXRvcnMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDIuMDAjV2F2ZSB0YW5rcyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wMy4wMCNXYXZlIHNwcmluZ3MjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDQuMDAjV2F2ZSBkZW1vbnN0cmF0aW9uIHNldHMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDUuMDAjVHVuaW5nIGZvcmtzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA2LjAwI0RvcHBsZXIgZGVtb25zdHJhdG9ycyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wNy4wMCNSZXNvbmFuY2UgYXBwYXJhdHVzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA4LjAwI1NvdW5kIG1ldGVycyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wOS4wMCNXYXZlIGFwcGFyYXR1cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xMC4wMCNTcGVjdHJvc2NvcGVzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjExLjAwI1NwZWN0cnVtIGNoYXJ0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xMi4wMCNMaWdodCBkZW1vbnN0cmF0aW9uIGtpdHMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTMuMDAjQ29sb3IgY2hhcnRzIG9yIHNhbXBsZXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTQuMDAjUmFkaW9tZXRlciM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xNS4wMCNSZWZsZWN0aW9uIG9yIHJlZnJhY3Rpb24gYXBwYXJhdHVzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjE2LjAwI09wdGljcyBzZXRzIG9yIGtpdHMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDAuMDAjRWxlY3RyaWNhbCBwaHlzaWNzIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wMS4wMCNWYW4gZGVncmFmZiBnZW5lcmF0b3JzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjAyLjAwI0VsZWN0cm9zdGF0aWMgYXBwYXJhdHVzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjAzLjAwI0VsZWN0cm9zdGF0aWMga2l0cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wNC4wMCNFbGVjdHJpY2l0eSBraXRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA1LjAwI0VsZWN0cmljaXR5IGRlbW9uc3RyYXRpb24gYm9hcmRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA2LjAwI0JhdHRlcnkga2l0cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wNy4wMCNIYW5kIGhlbGQgZ2VuZXJhdG9ycyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wOC4wMCNFbGVjdHJvbWFnbmV0aWMgYXBwYXJhdHVzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA5LjAwI01hZ25ldGlzbSBhcHBhcmF0dXMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMTAuMDAjRWxlY3Ryb21hZ25ldHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMTEuMDAjRWxlY3RyaWMgYmVsbHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMTIuMDAjRWxlY3RyaWMgbGVhZCB3aXJlcyBvciBjYWJsZXMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDAuMDAjTnVjbGVhciBwaHlzaWNzIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wMS4wMCNSYWRpb2FjdGl2aXR5IHNldHMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDIuMDAjR2VpZ2VyIGNvdW50ZXJzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjAzLjAwI0VsZWN0cm9uIGFwcGFyYXR1cyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wNC4wMCNSYWRpYXRpb24gd2FybmluZyBzaWducyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wNS4wMCNOdWNsZWFyIHBoeXNpY3MgdHJhbnNwYXJlbmNpZXMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDYuMDAjTnVjbGVhciBwaHlzaWNzIGNoYXJ0cyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wMC4wMCNSb2NrZXRyeSBhbmQgZmxpZ2h0IG1hdGVyaWFscyBhbmQgc3VwcGxpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTEuMDEuMDAjUm9ja2V0IHNldHMjNjAuMTAuNTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTEuMDIuMDAjTGF1bmNoaW5nIGFwcGFyYXR1cyM2MC4xMC41MS4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wMy4wMCNBbHRpdHVkZSBtZWFzdXJpbmcgZGV2aWNlcyM2MC4xMC41MS4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wNC4wMCNBaXJwbGFuZSBraXRzIzYwLjEwLjUxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUyLjAwLjAwI0xpZmUgc2tpbGxzIHJlc291cmNlcyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41Mi4wMS4wMCNCdWlsZGluZyBsaXN0ZW5pbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUyLjAyLjAwI1N0dWR5IHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC41Mi4wMy4wMCNUZXN0IHByZXBhcmF0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjAwLjAwI0NhcmVlciBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDEuMDAjQ2FyZWVyIGVkdWNhdGlvbiBvciBwbGFubmluZyBvciBkZWNpc2lvbiBtYWtpbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjAyLjAwI0Jhc2ljIGpvYiBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDMuMDAjSm9iIHNlYXJjaCBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDQuMDAjVGltZSBtYW5hZ2VtZW50IHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wNS4wMCNJbnRlcnZpZXcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA2LjAwI1Jlc3VtZSBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDcuMDAjV29yayBldGhpY3Mgb3IgYXR0aXR1ZGUgdHJhaW5pbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDguMDAjVGVhbSBidWlsZGluZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDkuMDAjQnVzaW5lc3MgZXRpcXVldHRlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjAwLjAwI0NvbnN1bWVyIGVjb25vbWljcyBhbmQgbW9uZXkgbWFuYWdlbWVudCBhbmQgaW5kZXBlbmRlbnQgbGl2aW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjAxLjAwI1BlcnNvbmFsIGZpbmFuY2Ugb3IgbW9uZXkgbWFuYWdlbWVudCBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDIuMDAjU2hvcHBpbmcgb3IgY29uc3VtZXIgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjAzLjAwI0luZGVwZW5kZW50IGxpdmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wNC4wMCNVbmRlcnN0YW5kaW5nIGNvbnN1bWVyIGNyZWRpdCBvciBsb2FucyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wNS4wMCNJbnN1cmFuY2UgY292ZXJhZ2Ugb3IgaW5zdXJhbmNlIGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDYuMDAjSG9tZSBidXlpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDcuMDAjQXBhcnRtZW50IHJlbnRhbCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wOC4wMCNDYXIgYnV5aW5nIGVkdWNhdGlvbmFsIGFpZHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDkuMDAjQnJhbmQgbWFya2V0aW5nIG9yIGFkdmVydGlzaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjEwLjAwI1JlbGF0aW9uc2hpcCBidWlsZGluZyBvciBmYW1pbHkgbGlmZSBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTEuMDAjRGV2ZWxvcGluZyBzZWxmIGNvbmNlcHQgYW5kIHNlbGYgZXN0ZWVtIGluc3R1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTIuMDAjVmlvbGVuY2UgYXZvaWRhbmNlIGVkdWNhdGlvbiBvciB2aW9sZW5jZSBwcmV2ZW50aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjEzLjAwI0FuZ2VyIHJlc29sdXRpb24gdHJhaW5pbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTQuMDAjVGVhY2hpbmcgcGF0aWVuY2Ugc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE1LjAwI1RvbGVyYW5jZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xNi4wMCNQZXJzb25hbCBzYWZldHkgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTcuMDAjUGVyc29uYWwgY29uZmxpY3QgcmVzb2x1dGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xOC4wMCNQcmFjdGljYWwgdGVlbiBhZHZpY2UgZ3VpZGVzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE5LjAwI0RldmVsb3Bpbmcgc29jaWFsIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yMC4wMCNNYW5uZXJzIG9yIGV0aXF1ZXR0ZSBvciBjb3VydGVzeSBpbnN0cnVjdGlvbmFsIGFpZHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjEuMDAjVW5kZXJzdGFuZGluZyBvciBkZWFsaW5nIHdpdGggY3VsdHVyYWwgZGl2ZXJzaXR5IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjIyLjAwI0hvdyB0byByZWFkIGJvZHkgbGFuZ3VhZ2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjMuMDAjRGV2ZWxvcGluZyByZXNpbGllbmN5IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI0LjAwI1VuZGVyc3RhbmRpbmcgY29tbXVuaXR5IHNlcnZpY2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjUuMDAjRGV2ZWxvcGluZyByZWZ1c2FsIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yNi4wMCNSZXNwb25zaWJpbGl0eSBvciBEZGVjaXNpb24gbWFraW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yNy4wMCNVbmRlcnN0YW5kaW5nIHRlZW5zIGxlZ2FsIHJpZ2h0cyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yOC4wMCNSZXBlcmN1c3Npb25zIG9mIGRyb3BwaW5nIG91dCBvZiBzY2hvb2wgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjkuMDAjUmFjZSByZWxhdGlvbnMgdmlkZW9zIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjAwLjAwI0hvbWUgYW5kIGludGVyaW9yIGRlc2lnbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wMS4wMCNGZW5nIHNodWkgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDIuMDAjSW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMgZm9yIHVzaW5nIGNvbG9yIG9yIHBhaW50IGZvciBob21lIGRlY29yYXRpb24jNjAuMTAuNTUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDMuMDAjSW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMgZm9yIGhvbWUgcGxhbm5pbmcgb3IgZGVzaWduIzYwLjEwLjU1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjA0LjAwI0xhbmRzY2FwaW5nIGRlc2lnbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wNS4wMCNJbnN0cnVjdGlvbmFsIG1hdGVyaWFscyBmb3IgaG9tZSBkZWNvcmF0aW5nIG9yIGZ1cm5pc2hpbmcjNjAuMTAuNTUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDAuMDAjSGVhbHRoIGVkdWNhdGlvbiBhbmQgbnV0cml0aW9uIGFuZCBmb29kIHByZXBhcmF0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjAxLjAwI0RpZXRhcnkgZ3VpZGVsaW5lcyBvciBiYWxhbmNlZCBkaWV0cyBlZHVjYXRpb25hbCByZXNvdXJjZXMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDIuMDAjTnV0cml0aW9uYWwgY3VycmljdWx1bSBtZW51IHBsYW5uaW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wMy4wMCNVbmRlcnN0YW5kaW5nIG51dHJpdGlvbiBsYWJlbGluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wNC4wMCNGb29kIHNob3BwaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA1LjAwI0hlYWx0aHkgZm9vZCBjaG9pY2VzIGRlbW9uc3RyYXRpb24gdW5pdHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDYuMDAjVW5kZXJzdGFuZGluZyB0aGUgZWZmZWN0cyBvZiBkaWV0YXJ5IGZhdCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wNy4wMCNVbmRlcnN0YW5kaW5nIHZlZ2V0YXJpYW5pc20gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDguMDAjUmVjaXBlIGJvb2tzIG9yIGNvb2sgYm9va3MjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDkuMDAjRWF0aW5nIGRpc29yZGVycyBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTAuMDAjV2VpZ2h0IGNvbnRyb2wgb3IgZXhlcmNpc2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTEuMDAjS2l0Y2hlbiBtZWFzdXJlbWVudHMgb2Ygc29saWRzIG9yIGxpcXVpZHMgaW5zdHJ1Y3Rpb25hbCBhaWRzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjEyLjAwI0tpdGNoZW4gZXF1aXZhbGFudHMgb3Iga2l0Y2hlbiBtYXRoIGluc3RydWN0aW9uYWwgYWlkcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xMy4wMCNLaXRjaGVuIHV0ZW5zaWxzIGluc3RydWN0aW9uYWwgYWlkcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xNC4wMCNLaXRjaGVuIHNhZmV0eSBvciBzYW5pdGF0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE1LjAwI0Zvb2Qgc2FmZXR5IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE2LjAwI0Zvb2Qgc2NpZW5jZSBhY3Rpdml0aWVzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE3LjAwI0Nvb2tpbmcgc2tpbGxzIGluc3RydWN0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE4LjAwI1RhYmxlIG1hbm5lcnMgb3IgZWF0aW5nIGV0aXF1ZXR0ZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xOS4wMCNUYWJsZSBzZXR0aW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjIwLjAwI0Zvb2Qgc2VydmljZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yMS4wMCNEcnVnIG9yIHRvYmFjY28gb3IgYWxjb2hvbCBhYnVzZSBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjIuMDAjU21va2luZyBTaW11bGF0b3JzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjIzLjAwI1VuZGVyc3RhbmRpbmcgYWRkaWN0aW9uIG9yIGFkZGljdGlvbiBhdm9pZGFuY2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjQuMDAjVGVlbiBkZXByZXNzaW9uIHN5bXB0b21zIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjI1LjAwI1RlZW4gc3VpY2lkZSBhdm9pZGFuY2UgdHJhaW5pbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjYuMDAjQ29waW5nIHdpdGggc3RyZXNzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjAwLjAwI01lbW9yeSBib29rcyBhbmQgc3VwcGxpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDEuMDAjTWVtb3J5IGJvb2tzIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjAyLjAwI01lbW9yeSBib29rIHBvc3RzIG9yIGV4dGVuZGVycyM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wMy4wMCNNZW1vcnkgYm9vayBwYXBlciM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wNC4wMCNBY2lkIGZyZWUgbWVtb3J5IGJvb2sgZ2x1ZSBzdGlja3MjNjAuMTAuNTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDUuMDAjQWNpZCBmcmVlIG1lbW9yeSBib29rIHRhcGUjNjAuMTAuNTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDAuMDAjQ2xvdGhpbmcgYW5kIHRleHRpbGUgZGVzaWduIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjAxLjAwI1Nld2luZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDIuMDAjU2V3aW5nIHByb2plY3QgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjAzLjAwI1VuZGVyc3RhbmRpbmcgY2xvdGhpbmcgY29uc3RydWN0aW9uIG9yIHdvcmttYW5zaGlwIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjA0LjAwI0Nsb3RoaW5nIGRlc2lnbiBvciBmYXNoaW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjA1LjAwI1BlcnNvbmFsIGNvbG9yIGFuYWx5c2lzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjA2LjAwI0Zhc2hpb24gbWVyY2hhbmRpc2luZyBvciByZXRhaWwgZnVuZGFtZW50YWxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjA3LjAwI1NjaWVuY2Ugb2YgZmFicmljcyBvciBmaWJlcnMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDguMDAjQ2xvdGhpbmcgY2FyZSBvciBtYWludGVuYW5jZSBvciBsYXVuZGVyaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjA5LjAwI01hdGVyaWFscyBmb3IgdGVhY2hpbmcgdGhlIGFydCBvZiBkZXNpZ24gY29sb3Igb24gZmFicmljIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjEwLjAwI0ZhYnJpYyBkeWVzIG9yIHBhaW50cyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4xMS4wMCNRdWlsdGluZyBwcm9qZWN0cyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wMC4wMCNEYXRpbmcgYW5kIHNleCBhbmQgdGVlbiBwcmVnbmFuY3kgYW5kIHBhcmVudGluZyBza2lsbHMgYW5kIGNoaWxkIGRldmVsb3BtZW50IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjAxLjAwI1NleCBlZHVjYXRpb24gb3Igc2V4dWFsbHkgdHJhbnNtaXR0ZWQgZGlzZWFzZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wMi4wMCNQcmVuYXRhbCBudXRyaXRpb24gcmVzb3VyY2VzIG9yIGZldGFsIGFidXNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjAzLjAwI1BhcmVudGluZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDQuMDAjQ2hpbGQgZGV2ZWxvcG1lbnQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDUuMDAjVW5kZXJzdGFuZGluZyBkYXRlIHJhcGUgb3IgZGF0aW5nIHNraWxscyBvciBoYXJhc3NtZW50IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA2LjAwI0NoaWxkYmlydGggZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA3LjAwI1ByZWduYW5jeSBmcm9tIGNvbmNlcHRpb24gdGhyb3VnaCBiaXJ0aCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wOC4wMCNVbmRlcnN0YW5kaW5nIHRoZSByaXNrcyBvZiBiaXJ0aCBkZWZlY3RzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA5LjAwI1ByZWduYW5jeSBzaW11bGF0b3JzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjEwLjAwI0luZmFudCBzaW11bGF0b3JzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xMS4wMCNJbmZhbnQgY2FyZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xMi4wMCNVbmRlcnN0YW5kaW5nIHBoeXNpY2FsIG9yIGVtb3Rpb25hbCBjaGlsZCBhYnVzZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xMy4wMCNEaXNjaXBsaW5lIHNraWxsIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyBmb3IgcGFyZW50cyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xNC4wMCNIb21lIHNhZmV0eSBvciBjaGlsZHByb29maW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE1LjAwI0NhcmRpbyBwdWxtb25hcnkgcmVzdXNpdGF0aW9uIG9yICBiYXNpYyBsaWZlIHN1cHBvcnQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTYuMDAjVW5kZXJzdGFuZGluZyBjaGlsZGhvb2QgaWxsbmVzc2VzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE3LjAwI1VuZGVyc3RhbmRpbmcgYXR0ZW50aW9uIGRlZmljaXQgaHlwZXJhY3Rpdml0eSBkaXNvcmRlciBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xOC4wMCNDaGlsZCBjYXJlZ2l2ZXIgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTkuMDAjQmFieXNpdHRpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDAuMDAjQ3VycmljdWx1bSBndWlkZXMgYW5kIHByb2plY3RzIGFuZCBhY3Rpdml0aWVzIGFuZCBsZXNzb25zIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjAxLjAwI01pZGRsZSBzY2hvb2wgY3VycmljdWx1bSByZXNvdXJjZSBvciBpZGVhIGJvb2tzIzYwLjEwLjYwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjAyLjAwI0hpZ2ggU2Nob29sIGN1cnJpY3VsdW0gcmVzb3VyY2Ugb3IgaWRlYSBib29rcyM2MC4xMC42MC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MC4wMy4wMCNIb21lIGVjb25vbWljcyBpbmRlcGVuZGVudCBzdHVkeSBwcm9qZWN0cyM2MC4xMC42MC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MC4wNC4wMCNIb21lIGVjb25vbWljcyBwcm9qZWN0cyBvciBhY3Rpdml0aWVzIHJlc291cmNlcyBvciBndWlkZXMjNjAuMTAuNjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDAuMDAjVm9jYXRpb25hbCB0ZWFjaGluZyBhaWRzIGFuZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDEuMDAjQXV0b21vdGl2ZSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMi4wMCNDb25zdHJ1Y3Rpb24gdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDMuMDAjRHJhZnRpbmcgb3IgZGVzaWduIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjA0LjAwI0VsZWN0cm9uaWNzIG9yIGVsZWN0cmljaXR5IHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjA1LjAwI0dyYXBoaWMgYXJ0cyBvciBwaG90b2dyYXBoeSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wNi4wMCNIb3J0aWN1bHR1cmUgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDcuMDAjTWFudWZhY3R1cmluZyB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wMC4wMCNUZWNobm9sb2d5IHRlYWNoaW5nIGFpZHMgYW5kIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wMS4wMCNBZ3JpY3VsdHVyZSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wMi4wMCNCaW90ZWNobm9sb2d5IHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAzLjAwI0NvbW11bmljYXRpb25zIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjA0LjAwI0NvbXB1dGVyIHNjaWVuY2UgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDUuMDAjRW5lcmd5IG9yIHBvd2VyIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjA2LjAwI0Vudmlyb25tZW50YWwgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDcuMDAjTWF0ZXJpYWxzIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjA4LjAwI01lZGljYWwgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDkuMDAjVHJhbnNwb3J0YXRpb24gdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjMuMDAuMDAjRm9yZW5zaWMgc2NpZW5jZSB0ZWFjaGluZyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYzLjAxLjAwI0ZvcmVuc2ljIHNjaWVuY2Uga2l0cyM2MC4xMC42My4wMC4wMAotdW5zcHNjNyM2MC4xMC42NC4wMC4wMCNFbGVjdHJvbmljcyB0ZWFjaGluZyBzdXBwbGllcyBhbmQgZXF1aXBtZW50IzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjY0LjAxLjAwI0VsZWN0cm9uaWNzIGtpdHMjNjAuMTAuNjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjQuMDIuMDAjRWxlY3Ryb25pY3MgdGVhY2hpbmcgc3VwcGxpZXMjNjAuMTAuNjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjQuMDMuMDAjRm9yZW5zaWMgc2NpZW5jZSB0ZWFjaGluZyBzdXBwbGllcyM2MC4xMC42NC4wMC4wMAotdW5zcHNjNyM2MC4xMS4wMC4wMC4wMCNDbGFzc3Jvb20gZGVjb3JhdGl2ZXMgYW5kIHN1cHBsaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEwLjAwLjAwI0NsYXNzcm9vbSBDaGFydHMgb3IgY2xhc3Nyb29tIHBvc3RlcnMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDEuMDAjQ2hhcnQgcGFja3MjNjAuMTEuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDIuMDAjQ2xhc3Nyb29tIGNoYXJ0cyM2MC4xMS4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wMy4wMCNDbGFzc3Jvb20gcG9zdGVycyBvciBzZXRzIzYwLjExLjEwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEwLjA0LjAwI0RvIGl0IHlvdXJzZWxmIHBvc3RlcnMjNjAuMTEuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDAuMDAjQnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wMS4wMCNCaWcgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wMi4wMCNDYWxlbmRhciBidWxsZXRpbmcgYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wMy4wMCNFYXJseSBjaGlsZGhvb2QgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wNC4wMCNMYW5ndWFnZSBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA1LjAwI01hdGggYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wNi4wMCNNdWx0aXB1cnBvc2UgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wNy4wMCNTY2llbmNlIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDguMDAjU2Vhc29uYWwgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wOS4wMCNTb2NpYWwgc3R1ZGllcyBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjAwLjAwI0J1bGxldGluIGJvYXJkIGJvcmRlcnMgYW5kIHRyaW1tZXJzIzYwLjExLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjAxLjAwI0NsYXNzcm9vbSBiYW5uZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjAyLjAwI0JvcmRlciBwYWNrcyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wMy4wMCNDbGFzc3Jvb20gaGVhZGVycyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wNC4wMCNDb3JyaWd1YXRlZCBib3JkZXJzIG9yIHRyaW1tZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA1LjAwI0RpZSBjdXQgc2hhcGVkIHNjYWxsb3BlZCBib3JkZXJzIG9yIHRyaW1tZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA2LjAwI1NwYXJrbGUgYm9yZGVycyBvciB0cmltbWVycyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wNy4wMCNTdHJhaWdodCBib3JkZXJzIG9yIHRyaW1tZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA4LjAwI0JvcmRlciBvciBUcmltbWVyIHN0b3JhZ2UjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDAuMDAjRGVjb3JhdGl2ZSBsZXR0ZXJzIGFuZCBudW1iZXJzIzYwLjExLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjAxLjAwI0xldHRlcmVkIG9yIG51bWJlcmVkIGJsb2NrcyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wMi4wMCNDYXN1YWwgbGV0dGVycyBvciBudW1iZXJzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjAzLjAwI0l0YWxpYyBsZXR0ZXJzIG9yIG51bWJlcnMjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDQuMDAjU2VsZiBhZGhlc2l2ZSBsZXR0ZXJzIG9yIG51bWJlcnMjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDUuMDAjU3BhcmtsZSBsZXR0ZXJzIG9yIG51bWJlcnMjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDYuMDAjVHJhY2luZyBsZXR0ZXJzIG9yIG51bWJlcnMjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDAuMDAjU3BlY2lhbHR5IGRlY29yYXRpdmVzIGZvciB0aGUgY2xhc3Nyb29tIGFuZCBkZWNvcmF0aXZlIGFjY2Vzc29yaWVzIzYwLjExLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjAxLjAwI0NsYXNzcm9vbSBkZWNvcmF0aXZlIGtpdHMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDIuMDAjRG9vciBkZWNvcmF0aW9ucyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wMy4wMCNNb2JpbGVzIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjA0LjAwI1R3byBzaWRlZCBkZWNvcmF0aW9ucyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wNS4wMCNXaW5kb3cgY2xpbmcgZGVjb3JhdGlvbnMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDcuMDAjRGVjb3JhdGl2ZSBTdG9yYWdlIFN5c3RlbXMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDguMDAjRGVjb3JhdGl2ZSB0YXBlcyBvciB0d2lzdHMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDkuMDAjRGVjb3JhdGl2ZSBidXR0b25zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjEwLjAwI0RlY29yYXRpdmUgc2hhcGVzIG9yIHN0cmluZ3MjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMDAuMDAuMDAjQXJ0cyBhbmQgY3JhZnRzIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMgYW5kIHN1cHBsaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjAwLjAwI0FydCM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wMS4wMCNQYWludGluZ3MjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDIuMDAjU2N1bHB0dXJlcyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wMy4wMCNTdGF0dWFyeSM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNC4wMCNQb3J0cmFpdHMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDUuMDAjRHJhd2luZ3MjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDYuMDAjUGljdHVyZXMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDcuMDAjTGl0aG9ncmFwaHMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDguMDAjUG9zdGVycyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wOS4wMCNEZWNvcmF0aXZlIHBvdCM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4xMC4wMCNTY3JvbGxzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjExLjAwI1Bob3RvZ3JhcGhzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjAwLjAwI0NhbnZhc2VzIGFuZCBmaWxtcyBhbmQgYm9hcmRzIGFuZCBhcnRpc3RzIHBhcGVycyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wMS4wMCNTdWxwaGl0ZSBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjAyLjAwI0dyb3VuZHdvb2QgZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wMy4wMCNUcmFjaW5nIG9yIHZlbGx1bSBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA0LjAwI0JvbmQgZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wNS4wMCNDaGFyY29hbCBvciBwYXN0ZWwgZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wNi4wMCNCcmlzdG9sIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDcuMDAjV2F0ZXJjb2xvciBwYXBlciBzaGVldHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDguMDAjV2F0ZXJjb2xvciBwYXBlciBwYWRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA5LjAwI1dhdGVyY29sb3IgcGFwZXIgYmxvY2tzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjEwLjAwI0ZpbmdlciBwYWludCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xMS4wMCNTdWxwaGl0ZSBjb25zdHJ1Y3Rpb24gcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTIuMDAjR3JvdW5kd29vZCBjb25zdHJ1Y3Rpb24gcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTMuMDAjRm9pbCBjb25zdHJ1Y3Rpb24gcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTQuMDAjT3JpZ2FtaSBjcmFmdCBwYXBlcnMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTUuMDAjUGFwZXIgb3IgcGxhc3RpYyBDb25mZXR0aSM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xNi4wMCNDcmVwZSBwYXBlciBmb3IgY3JhZnRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE3LjAwI0NyYWZ0IHRpc3N1ZSBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xOC4wMCNDb3JydWdhdGVkIGNyYWZ0IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE5LjAwI1BhdHRlcm4gcHJpbnRlZCBjcmFmdCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yMC4wMCNTZWxmIGFkaGVzaXZlIGNyYWZ0IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjIxLjAwI0dsb3cgaW4gdGhlIGRhcmsgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjMuMDAjSGFuZCBtYWRlIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI0LjAwI0tyYWZ0IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI1LjAwI0NhbnZhcyBwYW5lbHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjYuMDAjUHJlc3RyZXRjaGVkIGNhbnZhcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yNy4wMCNQcmltZWQgY2FudmFzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI4LjAwI1VucHJpbWVkIGNhbnZhcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yOS4wMCNNYXNvbml0ZSBwYW5lbHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzAuMDAjQ2FudmFzIGxpa2UgcGFwZXIgcGFkcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zMS4wMCNKYXBhbmVzZSBwcmludG1ha2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zMi4wMCNMaXRob2dyYXBoeSBvciBpbnRhZ2xpbyBwcmludG1ha2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zMy4wMCNCbG9ja3ByaW50aW5nIHByaW50bWFraW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM0LjAwI0ZvaWwgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzUuMDAjQWNldGF0ZSBvciB2aW55bCBvciBwb2x5ZXN0ZXIgZmlsbXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzYuMDAjQ2VsbG9waGFuZSBmaWxtcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zNy4wMCNBY3J5bGljIHNoZWV0cyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zOC4wMCNJbGx1c3RyYXRpb24gYm9hcmRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM5LjAwI01hdCBib2FyZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDAuMDAjTW91bnRpbmcgYm9hcmQjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDEuMDAjRm9hbSBjb3JlIG1vdW50aW5nIGJvYXJkIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQyLjAwI1RhZ2JvYXJkIG9yIHJhaWxyb2FkIGJvYXJkIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQzLjAwI0Rpc3BsYXkgYm9hcmQjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDQuMDAjU2NyYXRjaCBhcnQgcGFwZXJzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQ1LjAwI1NjcmF0Y2ggYXJ0IGJvYXJkcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40Ni4wMCNTY3JhdGNoIGFydCBhY2Nlc3NvcmllcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wMC4wMCNDbGFzc3Jvb20gYW5kIGZpbmUgYXJ0IHBhaW50IGFuZCBtZWRpdW1zIGFuZCBhcHBsaWNhdG9ycyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDEuMDAjVHJhZGl0aW9uYWwgbGlxdWlkIHRlbXBlcmEgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDIuMDAjQ29udGVtcG9yYXJ5IGxpcXVpZCB0ZW1wZXJhIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjAzLjAwI1Bvd2RlcmVkIHRlbXBlcmEgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDQuMDAjV2FzaGFibGUgdGVtcGVyYSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wNS4wMCNUZW1wZXJhIGNha2VzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA2LjAwI0xpcXVpZCBmYWNlIG9yIGJvZHkgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDcuMDAjQ2FrZSBmYWNlIG9yIGJvZHkgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDguMDAjTWFya2VyIGZhY2Ugb3IgYm9keSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wOS4wMCNUZW1wb3JhcnkgdGF0dG9vIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjEwLjAwI1dhc2hhYmxlIGZpbmdlciBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xMS4wMCNTY2hvb2wgc3R5bGUgYWNyeWxpYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xMi4wMCNBY3J5bGljIGFpcmJydXNoIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjEzLjAwI1N5bnRoZXRpYyBoZWF0IHRyZWF0ZWQgb2lsIHBhaW50IG9yIG1lZGl1bXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTQuMDAjV2F0ZXIgc29sdWJsZSBvaWwgcGFpbnQgb3IgbWVkaXVtcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xNS4wMCNMb3cgdmlzY29zaXR5IHJlbW92YWJsZSBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE2LjAwI0xvdyB2aXNjb3NpdHkgcGVybWFuZW50IGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTcuMDAjSGlnaCB2aXNjb3NpdHkgR2VsIHJlbW92YWJsZSBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE4LjAwI0hpZ2ggdmlzY29zaXR5IEdlbCBwZXJtYW5lbnQgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xOS4wMCNPdmVuIGJha2VkIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjAuMDAjTWFya2VyIGRlbGl2ZXJ5IHN5c3RlbSBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjIxLjAwI1BhbiB3YXRlcmNvbG9yIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjIyLjAwI1R1YmUgd2F0ZXJjb2xvciBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yMy4wMCNMaXF1aWQgd2F0ZXJjb2xvciBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yNC4wMCNMaXF1aWQgd2F0ZXJjb2xvciBmcmlza2V0IHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI1LjAwI1dhdGVyY29sb3IgcGFpbnRpbmcgbWVkaXVtcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yNi4wMCNXYXRlcmNvbG9yIGJydXNoZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjcuMDAjT3JpZW50YWwgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yOC4wMCNVdGlsaXR5IGJydXNoZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjkuMDAjU3BlY2lhbHR5IGJydXNoZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzAuMDAjRWFzZWwgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zMS4wMCNQYWxldHRlIGtuaXZlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zMi4wMCNCcmF5ZXJzIGZvciBoYW5kIHByaW50aW5nIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjMzLjAwI1Nwb25nZSBzdGFtcHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzQuMDAjU2NyYXBlcnMgZm9yIHBhaW50IGFwcGxpY2F0aW9uIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjM1LjAwI1BpcGV0dGVzIGZvciBwYWludCBvciBkeWUgbWl4aW5nIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjM2LjAwI0NvbWJzIG9yIHRvb2xzIGZvciBwYWludCBvciBpbmsgYXBwbGljYXRpb24jNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzcuMDAjUGFsZXR0ZXMgZm9yIHBhaW50IG9yIGluayBtaXhpbmcjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzguMDAjUGFpbnQgcG90cyBmb3IgcGFpbnQgc3RvcmFnZSBvciBtaXhpbmcjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzkuMDAjUGFpbnQgY3VwcyBvciBib3R0bGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQxLjAwI0JydXNoIG9yIHRvb2wgY2xlYW5lcnMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDIuMDAjUGFpbnQgYXByb25zIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQzLjAwI0FydGlzdHMgU21vY2tzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQ0LjAwI1N0cmV0Y2hlciBzdHJpcHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDUuMDAjQ2FudmFzIHN0cmV0Y2hlcnMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDYuMDAjTWV0YWwgZWFzZWxzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQ3LjAwI1dvb2QgZWFzZWxzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQ4LjAwI1RhYmxlIHRvcCBlYXNlbHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDkuMDAjUHJlc2VudGF0aW9uIGVhc2VscyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wMC4wMCNBcnQgYW5kIGNyYWZ0IGN1dHRpbmcgcHJvZHVjdHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDEuMDAjR3VpbGxvdGluZSBwYXBlciB0cmltbWVycyM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wMi4wMCNNYXQgY3V0dGVyIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjAzLjAwI01hdCBrbml2ZXMjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDQuMDAjQXJ0aXN0IGtuaXZlcyM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wNS4wMCNSb3RhcnkgcGFwZXIgb3IgZmFicmljIGN1dHRlciM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wNi4wMCNDaXJjbGUgb3Igb3ZhbCBwYXBlciBjdXR0ZXJzIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjAwLjAwI1BpY3R1cmUgRnJhbWluZyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wMS4wMCNQcmUgYXNzZW1ibGVkIHdvb2QgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDIuMDAjV29vZCBzZWN0aW9uIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjAzLjAwI1ByZSBhc3NlbWJsZWQgbWV0YWwgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDQuMDAjTWV0YWwgc2VjdGlvbiBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wNS4wMCNBZGp1c3RhYmxlIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA2LjAwI1BsYXN0aWMgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDcuMDAjQ2xlYXIgYm94IHBpY3R1cmUgZnJhbWUjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDguMDAjUG9pbnQgZHJpdmVycyBvciBhY2Nlc3NvcmllcyBmb3IgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDkuMDAjTWl0cmUgYm94IzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjEwLjAwI1BpY3R1cmUgSGFuZ2luZyBkZXZpY2VzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjExLjAwI0FjcnlsaWMgcGFuZWxzIGZvciBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4xMi4wMCNHbGFzcyBwYW5lbHMgZm9yIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjAwLjAwI0RyYXdpbmcgdG9vbHMgYW5kIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wMS4wMCNXYXRlciBiYXNlZCBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjAyLjAwI1NvbHZlbnQgYmFzZWQgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wMy4wMCNXYXNoYWJsZSBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA0LjAwI0NhbGxpZ3JhcGh5IG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDUuMDAjRmFicmljIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDYuMDAjTWV0YWxsaWMgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wNy4wMCNUZW1wZXJhIG9yIGNoYWxrIHdpbmRvdyBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA4LjAwI1BhaW50IG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDkuMDAjV2F4IGJhc2VkIGNyYXlvbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTAuMDAjU295IGJhc2VkIGNyYXlvbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTEuMDAjU3BlY2lhbHR5IGNyYXlvbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTIuMDAjV2F0ZXJjb2xvciBjcmF5b25zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjEzLjAwI0RyeSBwYXN0ZWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTQuMDAjQ2hhbGsgcGFzdGVsIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE1LjAwI09pbCBiYXNlZCBwYXN0ZWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTYuMDAjQ29tcHJlc3NlZCBjaGFyY29hbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xNy4wMCNWaW5lIGNoYXJjb2FsIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE4LjAwI0dyYXBoaXRlIHBlbmNpbHMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTkuMDAjV2F4IGJhc2VkIGNvbG9yZWQgZHJhd2luZyBwZW5jaWxzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjIwLjAwI0NoYXJjb2FsIHBlbmNpbHMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjEuMDAjV2F0ZXJjb2xvciBwZW5jaWxzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjIyLjAwI1dhdGVyYmFzZWQgcGVucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yMy4wMCNQZXJtYW5lbnQgcGVucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yNC4wMCNHZWwgcGVucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yNS4wMCNUZWNobmljYWwgcGVucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yNi4wMCNDYWxsaWdyYXBoeSBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI4LjAwI1dhdGVyIGJhc2VkIGRyYXdpbmcgaW5rIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI5LjAwI1NvbHZlbnQgYmFzZWQgZHJhd2luZyBpbmsjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMzAuMDAjQ2FsbGlncmFwaHkgZHJhd2luZyBpbmsjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMzEuMDAjUGluayBwZW5jaWwgZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMi4wMCNLbmVhZGVkIGVyYXNlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMzMuMDAjVmlueWwgZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zNC4wMCNQbGFzdGljIGVyYXNlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMzUuMDAjR3VtIGVyYXNlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDAuMDAjU3R1ZGlvIGFpZHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDEuMDAjV29vZCBNYW5uZXF1aW5zIzYwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjAyLjAwI0NsZWFyIGFjcnlsaWMgbWlycm9ycyBvciBwYW5lbHMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDMuMDAjUGxhc3RpYyBSdWJiaW5nIHBsYXRlcyM2MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wNC4wMCNTdHVkaW8gYWlkIGFjY2Vzc29yaWVzIzYwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjA1LjAwI0FuYXRvbWljYWwgbW9kZWxzIzYwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjAwLjAwI1ByaW50bWFraW5nIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wMS4wMCNSdWJiZXIgc3RhbXBpbmcgc3RhbXBzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjAyLjAwI1J1YmJlciBzdGFtcGluZyBzdGFtcCBwYWRzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjAzLjAwI1J1YmJlciBzdGFtcGluZyBhY2Nlc3NvcmllcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wNC4wMCNMaW5vbGV1bSBmb3IgYmxvY2sgcHJpbnRpbmcjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDUuMDAjV29vZCBibG9ja3MgZm9yIHByaW50aW5nIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA2LjAwI1N5bnRoZXRpYyBibG9ja3MgZm9yIHByaW50aW5nIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA3LjAwI0Jsb2NrIHByaW50aW5nIGFjY2Vzc29yaWVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA4LjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IHBsYXRlcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wOS4wMCNJbnRhZ2xpbyBvciBsaXRob2dyYXBoeSBibGFua2V0cyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xMC4wMCNJbnRhZ2xpbyBvciBsaXRob2dyYXBoeSB3aXBlcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xMS4wMCNJbnRhZ2xpbyBvciBsaXRob2dyYXBoeSBob3QgcGxhdGVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjEyLjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IHByaW50aW5nIHByZXNzZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTMuMDAjUHJpbnRpbmcgQmFyZW5zIGFuZCBCcmF5ZXJzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjE0LjAwI0ludGFnbGlvIEV0Y2hpbmcgb3IgZW5ncmF2aW5nIHRvb2xzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjE1LjAwI1NpbGtzY3JlZW4gc2NyZWVucyBvciBwcmludGluZyBzdGF0aW9ucyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xNi4wMCNTaWxrc2NyZWVuIGFjY2Vzc29yaWVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjAwLjAwI1ByaW50aW5nIGFuZCBkcmF3aW5nIGlua3MjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDEuMDAjV2F0ZXIgYmFzZWQgcG9zdGVyIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDIuMDAjV2F0ZXIgYmFzZWQgYWNyeWxpYyBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjAzLjAwI09pbCBiYXNlZCBzaWxrc2NyZWVuIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDQuMDAjV2F0ZXIgYmFzZWQgVGV4dGlsZSBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA1LjAwI09pbCBiYXNlZCB0ZXh0aWxlIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDYuMDAjUHJpbnRtYWtpbmcgc3VibGltYXRpb24gaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wNy4wMCNPaWwgYmFzZWQgaW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wOC4wMCNPaWwgYmFzZWQgbW9ub3ByaW50IGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDkuMDAjV2F0ZXIgYmFzZWQgbW9ub3ByaW50IGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMTAuMDAjV2F0ZXIgYmFzZWQgZHJhd2luZyBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjExLjAwI1NvbHZlbnQgYmFzZWQgZHJhd2luZyBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjEyLjAwI0NhbGxpZ3JhcGh5IGRyYXdpbmcgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4xMy4wMCNTaWxrc2NyZWVuIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDAuMDAjQXJ0IGZhYnJpYyBhbmQgZmFicmljIGRlY29yYXRpb24gbWF0ZXJpYWxzIGFuZCBzdXBwbGllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wMS4wMCNNdXNsaW4jNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDIuMDAjRmVsdCM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wMy4wMCNDcmFmdCBmdXIjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDQuMDAjQ290dG9uIGJsZW5kcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wNS4wMCNDYW52YXMgaW1wcmludGFibGVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA2LjAwI1ByZSBzZW5zaXRpemVkIGltcHJpbnRhYmxlcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wNy4wMCNDb3R0b24gaW1wcmludGFibGVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA4LjAwI0JsZW5kZWQgaW1wcmludGFibGVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA5LjAwI0JhdGlrIHdheGVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjEwLjAwI0JhdGlrIGFjY2Vzc29yaWVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjExLjAwI0JhdGlrIGZhYnJpYyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wMC4wMCNTZXdpbmcgYW5kIHN0aXRjaGVyeSBhbmQgd2VhdmluZyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjAxLjAwI1dlYXZpbmcgb3IgdGFwZXN0cnkgbmVlZGxlcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wMi4wMCNXZWF2aW5nIGFjY2Vzc29yaWVzIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjAzLjAwI0hhbmQgc2V3aW5nIG5lZWRsZXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDQuMDAjU3RyaW5nIGFydCBraXRzIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA1LjAwI0hhbmQgbG9vbXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDYuMDAjVGFibGUgbG9vbXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDcuMDAjRmxvb3IgbG9vbXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDguMDAjUmV4bGFjZSM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wOS4wMCNMYWNpbmcgb3Igc3RyaW5naW5nIGFjY2Vzc29yaWVzIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIxLjAwLjAwI0NhbmRsZW1ha2luZyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMS4wMS4wMCNDYW5kbGVtYWtpbmcgd2lja3MjNjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjEuMDIuMDAjQ2FuZGxlbWFraW5nIGZvcm1zIzYwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIxLjAzLjAwI0NhbmRsZW1ha2luZyBhY2Nlc3NvcmllcyM2MC4xMi4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMi4wMC4wMCNXb29kIGNyYWZ0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMi4wMS4wMCNXb29kIGNyYWZ0IG1hdGVyaWFscyM2MC4xMi4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMi4wMi4wMCNGaW5pc2hpbmcgbWF0ZXJpYWxzIzYwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAzLjAwI1dvb2QgYnVybmluZyB0b29scyM2MC4xMi4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMi4wNC4wMCNDYXJ2aW5nIHRvb2xzIzYwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIzLjAwLjAwI0Jhc2tldHJ5IG1ha2luZyBzdXBwbGllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMy4wMS4wMCNCYXNrZXRyeSByZWVkIzYwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIzLjAyLjAwI0Jhc2tldHJ5IHByb2plY3Qga2l0cyM2MC4xMi4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNC4wMC4wMCNTdGFpbmVkIGdsYXNzIG1ha2luZyBzdXBwbGllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNC4wMS4wMCNTdGFpbmVkIEdsYXNzIGZyYWdtZW50cyM2MC4xMi4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNC4wMi4wMCNTdGFpbmVkIGdsYXNzIHRvb2xzIG9yIGFjY2Vzc29yaWVzIzYwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjAwLjAwI1BhcGVyIGNyYWZ0cyBhbmQgaGFuZCBtYWRlIHBhcGVybWFraW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjAxLjAwI1BhcGVyIHNoYXBpbmcgdG9vbHMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDIuMDAjUGFwZXIgcGljdHVyZSBmcmFtZXMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDMuMDAjUGFwZXIgcGxhdGVzIG9yIHRyYXlzIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjA0LjAwI1BhcGVyIGZpbHRlcnMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDUuMDAjQ29ycnVnYXRlZCBjYXJkYm9hcmQgc2hhcGVzIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjA2LjAwI1BhcGVyIERvaWxpZXMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDcuMDAjRGVja2xlcyBvciBtb2xkcyBmb3IgaGFuZCBtYWRlIHBhcGVyIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjA4LjAwI0NvdWNoIHNoZWV0cyBvciBmZWx0cyBmb3IgaGFuZCBtYWRlIHBhcGVyIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjA5LjAwI1B1bHAgb3IgcmF3IG1hdGVyaWFscyBmb3IgaGFuZCBtYWRlIHBhcGVyIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI2LjAwLjAwI01vc2FpY3MjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDEuMDAjTW9zYWljIHRpbGVzIzYwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI2LjAyLjAwI01vc2FpYyBtb2xkcyM2MC4xMi4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wMy4wMCNNb3NhaWMgdG9vbHMjNjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDQuMDAjTW9zYWljIGFjY2Vzc29yaWVzIzYwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjAwLjAwI0VuYW1lbGluZyBwYWludHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjAxLjAwI0VuYW1lbGluZyBwYWludHMgb3IgbWVkaXVtcyM2MC4xMi4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNy4wMi4wMCNDb3BwZXIgc2hhcGVzIzYwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjAzLjAwI0VuYW1lbGluZyBhY2Nlc3NvcmllcyM2MC4xMi4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNy4wNC4wMCNFbmFtZWxpbmcgS2lsbnMjNjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjguMDAuMDAjTWFza21ha2luZyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOC4wMS4wMCNNYXNrbWFraW5nIGZvcm1zIzYwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjAwLjAwI0JlYWRzIG9yIGJlYWRpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDEuMDAjU2VlZCBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wMi4wMCNQb255IGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjAzLjAwI1dvb2QgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDQuMDAjU3RyYXcgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDUuMDAjQ2VyYW1pYyBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wNi4wMCNHbGFzcyBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wNy4wMCNBc3NvcnRlZCBvciBkZWNvcmF0aXZlIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA4LjAwI0JlYWQgYWNjZXNzb3JpZXMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzAuMDAuMDAjRm9hbSBjcmFmdHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzAuMDEuMDAjU3R5cm9mb2FtIHNoYXBlcyM2MC4xMi4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMC4wMi4wMCNUb29scyBmb3IgZm9hbSBjcmFmdHMjNjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzEuMDAuMDAjQ2hlbmlsbGUgc3RlbSBjcmFmdHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzEuMDEuMDAjSnVtYm8gY2hlbmlsbGUgc3RlbXMjNjAuMTIuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzEuMDIuMDAjQ290dG9uIGNoZW5pbGxlIHN0ZW1zIzYwLjEyLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMxLjAzLjAwI0J1bXBzIGNoZW5pbGxlIHN0ZW1zIzYwLjEyLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMyLjAwLjAwI1JpYmJvbiBtYWtpbmcgbWF0ZXJpYWxzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMyLjAxLjAwI1BhcGVyIHJpYmJvbnMjNjAuMTIuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDIuMDAjU2lsayByaWJib25zIzYwLjEyLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMyLjAzLjAwI1N5bnRoZXRpYyByaWJib25zIzYwLjEyLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMyLjA0LjAwI0RlY29yYXRpdmUgcmliYm9ucyM2MC4xMi4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMy4wMC4wMCNDcmFmdCBQb21zIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMzLjAxLjAwI0FjcnlsaWMgY3JhZnQgcG9tcyM2MC4xMi4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMy4wMi4wMCNHbGl0dGVyIGNyYWZ0IHBvbXMjNjAuMTIuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzMuMDMuMDAjQ3JhZnQgcG9tIGJlYWR6IzYwLjEyLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM0LjAwLjAwI1dpZ2dsZSBleWVzIG1hdGVyaWFscyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNC4wMS4wMCNOb24gc2VsZiBhZGhlc2l2ZSB3aWdnbGUgZXllcyM2MC4xMi4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNC4wMi4wMCNTZWxmIGFkaGVzaXZlIHdpZ2dsZSBleWVzIzYwLjEyLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM0LjAzLjAwI0RlY29yYXRpdmUgd2lnZ2xlIGV5ZXMjNjAuMTIuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzUuMDAuMDAjTGVhdGhlciBjcmFmdCBtYXRlcmlhbHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzUuMDEuMDAjTGVhdGhlciBvciBsZWF0aGVyIGxhY2luZyBtYXRlcmlhbHMjNjAuMTIuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzUuMDIuMDAjTGVhdGhlciBhY2Nlc3NvcmllcyM2MC4xMi4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wMC4wMCNHbGl0dGVyIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjAxLjAwI0dsaXR0ZXIgZ2x1ZSM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wMi4wMCNHbGl0dGVyIGRvdHMjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDMuMDAjR2xpdHRlciBqZXdlbHMjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDQuMDAjUGxhc3RpYyBnbGl0dGVyIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjA1LjAwI0lycmlkZXNjZW50IGdsaXR0ZXIjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDYuMDAjTWV0YWxsaWMgZ2xpdHRlciM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNy4wMC4wMCNNYWNyYW1lIGNyYWZ0IG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzcuMDEuMDAjTWFjcmFtZSBjb3JkIzYwLjEyLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM3LjAyLjAwI01hY3JhbWUgYmVhZHMjNjAuMTIuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzcuMDMuMDAjTWFjcmFtZSBhY2Nlc3NvcmllcyM2MC4xMi4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zOC4wMC4wMCNNYXJibGluZyBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzguMDEuMDAjTWFyYmxpbmcgaW5rcyM2MC4xMi4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zOC4wMi4wMCNNYXJibGluZyBhY2Nlc3NvcmllcyM2MC4xMi4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zOS4wMC4wMCNTZXF1aW5zIGFuZCB0cmltcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zOS4wMS4wMCNEZWNvcmF0aXZlIHNlcXVpbnMgb3IgdHJpbXMjNjAuMTIuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDAuMDAuMDAjQ29yayBjcmFmdCBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDAuMDEuMDAjQ29yayBzaGVldHMjNjAuMTIuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDAuMDIuMDAjQ29yayBzdG9wcGVycyM2MC4xMi40MC4wMC4wMAotdW5zcHNjNyM2MC4xMi40MS4wMC4wMCNNdWx0aWN1bHR1cmFsIHByb2plY3QgbWF0ZXJpYWxzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40MS4wMS4wMCNNdWx0aWN1bHR1cmFsIHBhaW50aW5nIHByb2R1Y3RzIzYwLjEyLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQxLjAyLjAwI011bHRpY3VsdHVyYWwgY3JhZnRzIHByb2R1Y3RzIzYwLjEyLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQyLjAwLjAwI0Nyb3NzIGN1cnJpY3VsYXIgcHJvamVjdHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDIuMDEuMDAjTXlsYXIgc2N1bHB0dXJlcyM2MC4xMi40Mi4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wMC4wMCNDbGF5IGFuZCBtb2RlbGluZyBjb21wb3VuZHMgYW5kIGNlcmFtaWNzIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDEuMDAjTW9pc3Qga2lsbiBmaXJlZCBjbGF5IzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjAyLjAwI0RyeSBraWxuIGZpcmVkIGNsYXkjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDMuMDAjS2lsbiBmdXJuaXR1cmUjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDQuMDAjS2lsbnMgZm9yIGZpcmluZyBjZXJhbWljcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wNS4wMCNLaWxuIGFjY2Vzc29yaWVzIGZvciBmaXJpbmcgY2VyYW1pY3MjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDYuMDAjUG90dGVycyB3aGVlbHMgZm9yIGhhbmQgbWFkZSBjZXJhbWljcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wNy4wMCNFeHRydWRlcnMgZm9yIG1vZGVsaW5nIG1hdGVyaWFscyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wOC4wMCNDb25lcyBmb3IgZmlyaW5nIGtpbG5zIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA5LjAwI1BvdHRlcnkgQmF0dHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTAuMDAjRGVjb3JhdGluZyB3aGVlbHMgZm9yIHBvdHRlcnkjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTEuMDAjQ2xheSBvciBtb2RlbGluZyB0b29scyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xMi4wMCNGaXJlZCBjZXJhbWljIHRpbGVzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjEzLjAwI0NsYXkgc3RvcmFnZSBjb250YWluZXJzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE0LjAwI1BsYXNpY2l6ZWQgbm9uIGhhcmRlbmluZyBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTUuMDAjT2lsYmFzZWQgbm9uaGFyZGVuaW5nIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xNi4wMCNBaXIgZHJ5IGNsYXkgb3IgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE3LjAwI01vZGVsaW5nIGRvdWdoIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE4LjAwI1BhcGllciBNYWNoZSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xOS4wMCNTcGVjaWFsdHkgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjIwLjAwI1BsYXN0ZXIgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjIxLjAwI092ZW4gaGFyZGVuaW5nIGNsYXkgb3IgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjIyLjAwI1BsYXN0aWMgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjIzLjAwI0Nhc3RzIG9yIG1vbGRzIGZvciBzaGFwaW5nIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wMC4wMCNBcnQgbWV0YWxzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjAxLjAwI0NvcHBlciB0b29saW5nIGZvaWwjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDIuMDAjQWx1bWludW0gdG9vbGluZyBmb2lsIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjAzLjAwI0FsdW1pbnVtIHdpcmUjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDQuMDAjQnJhc3MgdG9vbGluZyBmb2lsIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjA1LjAwI0JyYXNzIHdpcmUjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDYuMDAjU2lsdmVyIHNoZWV0cyBvciBwbGF0ZXMjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDcuMDAjU2lsdmVyIHdpcmUjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDguMDAjUGV3dGVyIHBlbGxldHMgb3Igc2hvdHMjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDkuMDAjUGV3dGVyIGluZ290cyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4xMC4wMCNOdSBnb2xkIHNoZWV0cyBwbGF0ZXMjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMTEuMDAjTnUgZ29sZCB3aXJlIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjEyLjAwI0dhbHZhbml6ZWQgc3RvdmVwaXBlIHdpcmUjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDAuMDAjU2N1bHB0dXJlIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMS4wMCNQbGFzdGVyIHdyYXAjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDIuMDAjQ2FzdGluZyByZXNpbnMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDMuMDAjU2N1bHB0dXJlIGFjY2Vzc29yaWVzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA0LjAwI1B1enpsZSByYWNrcyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wNS4wMCNCdWJibGVzIG9yIGFjY2Vzc29yaWVzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA2LjAwI1BsYXN0aWMgc2FuZCBvciB3YXRlciB0b29scyBvciBtb2xkcyBvciB0b3lzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA3LjAwI1BsYXkgc2FuZCM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wOC4wMCNTYW5kIG9yIHdhdGVyIHRhYmxlcyBvciBhY3Rpdml0eSBjZW50ZXJzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA5LjAwI1ZlaGljbGUgc2V0cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xMC4wMCNXYXRlcndheSBzZXRzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjExLjAwI1BsYXkgdG9vbHMgb3IgcGxheSB0b29sIGtpdHMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTIuMDAjU2Nvb3RlciBib2FyZHMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTMuMDAjQmVhbmJhZ3MjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTQuMDAjVGFjdGlsZSB0b3lzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjE1LjAwI0NvZ25pdGl2ZSB0b3lzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjAwLjAwLjAwI011c2ljYWwgSW5zdHJ1bWVudHMgYW5kIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM2MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMC4wMC4wMCNLZXlib2FyZCBpbnN0cnVtZW50cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMC4wMS4wMCNQaWFub3MjNjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTAuMDIuMDAjQWNjb3JkaW9ucyM2MC4xMy4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMC4wMy4wMCNNdXNpY2FsIG9yZ2FucyM2MC4xMy4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wMC4wMCNCcmFzcyBpbnN0cnVtZW50cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wMS4wMCNUcnVtcGV0cyM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wMi4wMCNUcm9tYm9uZXMjNjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTEuMDMuMDAjU291c2FwaG9uZXMjNjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTEuMDQuMDAjU2F4b3Bob25lcyM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wNS4wMCNXaGlzdGxlIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjAwLjAwI1dvb2R3aW5kIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjAxLjAwI0NsYXJpbmV0cyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wMi4wMCNPYm9lcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wMy4wMCNNdXNpY2FsIGZsdXRlcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wNC4wMCNQaWNjb2xvZXMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDUuMDAjTXVzaWNhbCBjb3JuZXRzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjA2LjAwI0JhZ3BpcGVzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjA3LjAwI0hhcm1vbmljYXMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDguMDAjS2F6b29zIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjAwLjAwI1N0cmluZyBpbnN0cnVtZW50cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wMS4wMCNIYXJwc2ljaG9yZHMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDIuMDAjQ2xhdmljaG9yZHMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDMuMDAjR3VpdGFycyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wNC4wMCNWaW9saW5zIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjA1LjAwI0hhcnBzIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjA2LjAwI0JhbmpvZXMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDAuMDAjUGVyY3Vzc2lvbiBpbnN0cnVtZW50cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wMS4wMCNDeW1iYWxzIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjAyLjAwI0JlbGxzIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjAzLjAwI1RhbWJvdXJpbmVzIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjA0LjAwI0Nhc3RhbmV0cyM2MC4xMy4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wNS4wMCNEcnVtcyM2MC4xMy4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wNi4wMCNYeWxvcGhvbmVzIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjAwLjAwI011c2ljYWwgaW5zdHJ1bWVudCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDEuMDAjTWV0cm9ub21lcyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wMi4wMCNSZWVkcyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wMy4wMCNJbnN0cnVtZW50IHN0cmluZ3Mgb3IgcGlja3MjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDQuMDAjVHVuaW5nIHBpbnMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDUuMDAjTXVzaWNhbCBpbnN0cnVtZW50IHN0YW5kcyBvciBzaGVldCBob2xkZXJzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjA2LjAwI0FjY2Vzc29yaWVzIGZvciBzdHJpbmdlZCBpbnN0cnVtZW50cyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wNy4wMCNQZXJjdXNzaW9uIGluc3RydW1lbnQgYWNjZXNzb3J5IzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjA4LjAwI011c2ljIGJveGVzIG9yIG1lY2hhbmlzbXMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTYuMDAuMDAjTXVzaWNhbCBpbnN0cnVtZW50IHNldHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTYuMDEuMDAjUmh5dGhtIGJhbmQgc2V0cyM2MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNy4wMC4wMCNBbHRlcm5hdGl2ZSBzb3VuZHMgbXVzaWNhbCBpbnN0cnVtZW50cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNy4wMS4wMCNCb29td2hhY2tlcnMjNjAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTcuMDIuMDAjRGlzY28gdGFwcyM2MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xOC4wMC4wMCNNdXNpYyBhbmQgZGFuY2UgYWNjZXNzb3JpZXMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTguMDEuMDAjRGFuY2luZyBzY2FydmVzIzYwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE4LjAyLjAwI1JoeXRobSBzdGlja3Mgb3IgbHVtbWkgc3RpY2tzIzYwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE4LjAzLjAwI1JoeXRobSB3YW5kcyBvciBob29wcyM2MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM2MC4xNC4wMC4wMC4wMCNUb3lzIGFuZCBnYW1lcyM2MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wMC4wMCNUb3lzIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAxLjAwI1RveSBiYWxsb29ucyBvciBiYWxscyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wMi4wMCNEb2xscyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wMy4wMCNEb2xsIGhvdXNlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wNC4wMCNTdHVmZmVkIGFuaW1hbHMgb3IgcHVwcGV0cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wNS4wMCNQbGF5aG91c2VzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA2LjAwI0J1aWxkaW5nIGJsb2NrcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wNy4wMCNSaWRpbmcgdG95cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wOC4wMCNQdWxsIHRveXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDkuMDAjQ2hpbGRyZW5zIHNjaWVuY2Uga2l0cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xMC4wMCNUb3kgdmVoaWNsZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTEuMDAjVG95IHRyYWlucyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xMi4wMCNJbmZsYXRhYmxlIHRveXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTMuMDAjRG9sbCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xNC4wMCNZbyB5b3MjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTUuMDAjS2l0ZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTYuMDAjUG9ncyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xNy4wMCNLYWxlaWRvc2NvcGVzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE4LjAwI1BvbSBwb21zIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE5LjAwI1BpbmF0YXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMjAuMDAjQm9vbWVyYW5ncyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4yMS4wMCNGbHlpbmcgZGlzY3MjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMjIuMDAjVG95IHBhaWxzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjAwLjAwI0dhbWVzIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjAxLjAwI0VkdWNhdGlvbmFsIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjAyLjAwI0JvYXJkIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjAzLjAwI1BsYXlpbmcgY2FyZHMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDQuMDAjVmlkZW8gZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDUuMDAjUHV6emxlcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wNi4wMCNEaWNlIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA3LjAwI0JpbmdvIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA4LjAwI0NsYXNzaWMgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDkuMDAjQ29sbGFib3JhdGl2ZSBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xMC4wMCNTdHJhdGVneSBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xMS4wMCNHYW1lIGFjY2Vzc29yaWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjEyLjAwI0dhbWUgYm9va3MjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMTMuMDAjTG90dG8gZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMTQuMDAjTWVtb3J5IGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjAwLjAwI0FjdGl2ZSBQbGF5IGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDEuMDAjQmFsYW5jZSBvciBncm9zcyBtb3RvciBlcXVpcG1lbnQjNjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDIuMDAjQmFsbCBwb29scyBvciBhY2Nlc3NvcmllcyM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wMy4wMCNQbGF5IGhvdXNlcyBvciBodXRzIzYwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjA0LjAwI1RyaWtlcyBvciB3YWdvbnMjNjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDUuMDAjU29mdCBwbGF5IGNlbnRlcnMjNjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDAuMDAjQ2hpbGRyZW5zIGJsb2NrcyBhbmQgYnVpbGRpbmcgc3lzdGVtcyM2MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wMi4wMCNDb25zdHJ1Y3Rpb24gc2V0cyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wMy4wMCNQbGF5bWF0cyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wNC4wMCNSYWlscGxheSBzeXN0ZW1zIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjA1LjAwI1VuaXQgYmxvY2tzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjA2LjAwI1BsYXkgdmVoaWNsZXMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDcuMDAjUGxheSBhbmltYWxzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjAwLjAwI0RyYW1hdGljIHBsYXkgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM2MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xNC4wMS4wMCNDb3N0dW1lcyBvciBhY2Nlc3NvcmllcyM2MC4xNC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xNC4wMi4wMCNEcmVzcyB1cCBDZW50ZXJzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjAzLjAwI0hvdXNla2VlcGluZyB1bml0cyBvciBhY2Nlc3NvcmllcyM2MC4xNC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xNC4wNC4wMCNQbGF5IGZvb2QgZGlzaGVzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjA1LjAwI1ByZXRlbmQgcGxheSBraXRzIG9yIHN1cHBsaWVzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzcwLjAwLjAwLjAwLjAwI0Zhcm1pbmcgYW5kIEZpc2hpbmcgYW5kIEZvcmVzdHJ5IGFuZCBXaWxkbGlmZSBDb250cmFjdGluZyBTZXJ2aWNlcyM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4wMC4wMC4wMCNGaXNoZXJpZXMgYW5kIGFxdWFjdWx0dXJlIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjAwLjAwI0Zpc2hlcmllcyBvcGVyYXRpb25zIzcwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjAxLjAwI0NvbW1lcmNpYWwgZmlzaGluZyBvcGVyYXRpb25zIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjAyLjAwI0Zpc2hpbmcgcG9ydCBzZXJ2aWNlcyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wMy4wMCNGaXNoaW5nIG9uc2hvcmUgZmFjaWxpdGllcyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wNC4wMCNEZWVwIHNlYSBmaXNoaW5nIG9wZXJhdGlvbnMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDUuMDAjU29uYXIgZmlzaGluZyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wNi4wMCNXaGFsaW5nIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA3LjAwI1RyYXdsaW5nIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA4LjAwI0xpbmUgZmlzaGluZyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wOS4wMCNTZWluZSBvcGVyYXRpb25zIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjEwLjAwI0Zpc2hpbmcgbmV0cyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wMC4wMCNGaXNoZXJpZXMgb3ZlcnNpZ2h0IzcwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAxLjAwI0Zpc2hlcnkgaW5mb3JtYXRpb24gb3IgZG9jdW1lbnRhdGlvbiBzZXJ2aWNlcyM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wMi4wMCNGaXNoZXJ5IHJlc2VhcmNoIG9yIGV4cGVyaW1lbnRhdGlvbiBzZXJ2aWNlcyM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wMy4wMCNGaXNoZXJ5IGRhdGEgY29sbGVjdGlvbiBvciBkaXN0cmlidXRpb24jNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDQuMDAjRmlzaGVyeSBjb21tZXJjaWFsIG1hbmFnZW1lbnQjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDUuMDAjRmlzaGluZyBmbGVldCBtYW5hZ2VtZW50IzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjA2LjAwI0Zpc2hpbmcgY29vcGVyYXRpdmVzIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjA3LjAwI0Zpc2hlcnkgcmVzb3VyY2VzIHByb3RlY3Rpb24gb3IgY29uc2VydmF0aW9uIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE3LjAwLjAwI0Zpc2hlcnkgaW5kdXN0cnkgYW5kIHRlY2hub2xvZ3kjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDEuMDAjRmlzaGluZyB0ZWNobm9sb2d5IHNlcnZpY2VzIzcwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE3LjAyLjAwI0Zpc2hlcnkgYnkgcHJvZHVjdHMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wMy4wMCNGaXNoIHByb2R1Y3Rpb24jNzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDQuMDAjRmlzaCBzdG9yYWdlIzcwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjAwLjAwI0Zpc2hlcmllcyByZXNvdXJjZXMjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDEuMDAjSW5sYW5kIHdhdGVyIGZpc2hlcnkgcmVzb3VyY2VzIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjAyLjAwI0Zpc2ggcG9uZCByZXNvdXJjZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDMuMDAjRmlzaCBoYXRjaGVyaWVzIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjA0LjAwI0Zpc2ggcmFuY2hlcyM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wNS4wMCNGaXNoZXJ5IGJ5IHByb2R1Y3QgcmVzb3VyY2VzIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjA2LjAwI0Zpc2hlcmllcyByZXNvdXJjZSBldmFsdWF0aW9uIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE5LjAwLjAwI0FxdWFjdWx0dXJlIzcwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjE5LjAxLjAwI01hcmljdWx0dXJlIzcwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE5LjAyLjAwI09zdHJlaWN1bHR1cmUjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDMuMDAjU2hlbGxmaXNoIGN1bHR1cmUjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDQuMDAjU2hyaW1wIGZhcm1pbmcjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDUuMDAjRmlzaCBmYXJtaW5nIzcwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcwLjExLjAwLjAwLjAwI0hvcnRpY3VsdHVyZSM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMC4wMCNQbGFudHMgYW5kIG9ybmFtZW50YWwgdHJlZXMjNzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDEuMDAjUGxhbnRpbmcgc2VydmljZXMgb3Igb3JuYW1lbnRhbCBwbGFudCBvciBidXNoIG9yIHRyZWUjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDIuMDAjUHJ1bmluZyBzZXJ2aWNlcyBvciBvcm5hbWVudGFsIHBsYW50IG9yIGJ1c2gjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDMuMDAjVHJlZSB0cmltbWluZyBzZXJ2aWNlcyM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wNC4wMCNCcmFjaW5nIHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA1LjAwI1RyZWUgc3VyZ2VyeSBzZXJ2aWNlcyM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wNi4wMCNBcmJvcmlzdCBzZXJ2aWNlcyM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wNy4wMCNSZW1vdmFsIHNlcnZpY2VzIG9yIG9ybmFtZW50YWwgcGxhbnQgb3IgYnVzaCBvciB0cmVlIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA4LjAwI1BsYW50cyBvciBvcm5hbWVudGFsIHRyZWUgc3ByYXlpbmcgc2VydmljZXMjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTYuMDAuMDAjRmxvd2VyaW5nIHBsYW50cyM3MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNi4wMS4wMCNQbGFudGluZyBzZXJ2aWNlcyM3MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNi4wMi4wMCNOdXJzZXJ5IHNlcnZpY2VzIzcwLjExLjE2LjAwLjAwCi11bnNwc2M3IzcwLjExLjE2LjAzLjAwI0Zsb3JpY3VsdHVyZSBzZXJ2aWNlcyM3MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wMC4wMCNQYXJrcyBhbmQgZ2FyZGVucyBhbmQgb3JjaGFyZHMjNzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDEuMDAjT3JjaGFyZCBtYW5hZ2VtZW50IG9yIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjAyLjAwI1ZpbmV5YXJkIG1hbmFnZW1lbnQgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDMuMDAjR2FyZGVuIHBsYW50aW5nIG9yIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA0LjAwI0hvcnRpY3VsdHVyYWwgY291bnNlbGluZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wNS4wMCNDZW1ldGVyeSB1cGtlZXAgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDYuMDAjTGF3biBjYXJlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA3LjAwI0hpZ2h3YXkgbGF3biBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wOC4wMCNNdWxjaGluZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wOS4wMCNTZWVkaW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjEwLjAwI01vd2luZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4xMS4wMCNTcHJpZ2dpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMTIuMDAjUGFya3Mgb3IgZ2FyZGVucyBzcHJheWluZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4xMy4wMCNQYXJrcyBtYW5hZ2VtZW50IG9yIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjAwLjAwLjAwI0xpdmVzdG9jayBzZXJ2aWNlcyM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wMC4wMCNEYWlyeWluZyM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wMS4wMCNEYWlyeSBoZXJkIG1hbmFnZW1lbnQjNzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTUuMDIuMDAjRGFpcnkgaW5kdXN0cnkgZGV2ZWxvcG1lbnQjNzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTUuMDMuMDAjRGFpcnkgdGVjaG5vbG9neSM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wNC4wMCNEYWlyeSBsYWJvcmF0b3JpZXMgc2VydmljZXMjNzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTUuMDUuMDAjRGFpcnkgZmFybSBpbiBob3VzZSBwcm9jZXNzaW5nIzcwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjAwLjAwI0xpdmVzdG9jayBpbmR1c3RyeSM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wMS4wMCNMaXZlc3RvY2sgYnJlZWRpbmcjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDIuMDAjTGl2ZXN0b2NrIGdlbmV0aWNzIHNlcnZpY2VzIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjAzLjAwI1NlcmljdWx0dXJlIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjA0LjAwI0FuaW1hbCBodXNiYW5kcnkjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDUuMDAjRmFybSByZWFyaW5nIHN5c3RlbXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDYuMDAjUG91bHRyeSBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjA3LjAwI1NtYWxsIGFuaW1hbCBicmVlZGluZyBzZXJ2aWNlcyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wOC4wMCNCb3ZpbmUgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4xMC4wMCNBcGljdWx0dXJlIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjAwLjAwI0xpdmVzdG9jayBtYW5hZ2VtZW50IzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjAxLjAwI0xpdmVzdG9jayBzZWxlY3Rpb24jNzAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDIuMDAjTGl2ZXN0b2NrIHNob3dpbmcgc2VydmljZXMjNzAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDMuMDAjTGl2ZXN0b2NrIHNsYXVnaHRlcmluZyBzZXJ2aWNlcyM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wNC4wMCNIZXJkIG1hbmFnZW1lbnQjNzAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDUuMDAjTGl2ZXN0b2NrIGJyZWVkaW5nIG9yIGdyb29taW5nIHNlcnZpY2VzIzcwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE4LjAwLjAwI1BldHMgaW5kdXN0cnkjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTguMDEuMDAjUGV0IGJyZWVkaW5nIHNlcnZpY2VzIzcwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE4LjAyLjAwI1BldCBncm9vbWluZyBzZXJ2aWNlcyM3MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOC4wMy4wMCNLZW5uZWxzIHNlcnZpY2VzIzcwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE5LjAwLjAwI1Bhc3R1cmUgYW5kIHJhbmdlIHNlcnZpY2VzIzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE5LjAxLjAwI1Bhc3R1cmUgaW1wcm92ZW1lbnQjNzAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTkuMDIuMDAjUmFuZ2UgbWFuYWdlbWVudCM3MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOS4wMy4wMCNSYW5nZSByZXNlYXJjaCM3MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wMC4wMCNBbmltYWwgaGVhbHRoIzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjAxLjAwI0FuaW1hbCBudXRyaXRpb24jNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDIuMDAjQW5pbWFsIGRpc2Vhc2UgY29udHJvbCM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wMy4wMCNBbmltYWwgdHJ5cGFub3NvbWlhc2lzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA0LjAwI0Zvb3Qgb3IgbW91dGggY29udHJvbCBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wNS4wMCNBbmltYWwgaGVhbHRoIHByZXZlbnRpdmUgbWVkaWNhdGlvbiBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wNi4wMCNBbmltYWwgdmFjY2luYXRpb24gc2VydmljZXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDcuMDAjVmV0ZXJpbmFyeSBhZG1pbmlzdHJhdGlvbiM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wOC4wMCNWZXRlcmluYXJ5IGxhYm9yYXRvcnkgdGVjaG5vbG9neSM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wOS4wMCNBbmltYWwgaG9zcGl0YWwgc2VydmljZXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMTAuMDAjQW5pbWFsIGhlYWx0aCBpbmZvcm1hdGlvbiBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMy4wMC4wMC4wMCNMYW5kIGFuZCBzb2lsIHByZXBhcmF0aW9uIGFuZCBtYW5hZ2VtZW50IGFuZCBwcm90ZWN0aW9uIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjAwLjAwI0xhbmQgYW5kIHNvaWwgcHJvdGVjdGlvbiM3MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wMS4wMCNEZXNlcnRpZmljYXRpb24gYXNzZXNzbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjAyLjAwI1NvaWwgY29uc2VydmF0aW9uIG9yIHByb3RlY3Rpb24gc2VydmljZXMjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDMuMDAjRXJvc2lvbiBjb250cm9sIHNlcnZpY2VzIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjA0LjAwI1NhbmQgZHVuZSBmaXhhdGlvbiM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wNS4wMCNTb2lsIGNvbmRpdGlvbmluZyM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wNi4wMCNTb2lsIGltcHJvdmVtZW50IzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjAwLjAwI0xhbmQgYW5kIHNvaWwgcHJlcGFyYXRpb24jNzAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDEuMDAjRmVydGlsaXplciBhcHBsaWNhdGlvbiBzZXJ2aWNlcyM3MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wMi4wMCNMaW1lIHNwcmVhZGluZyBzZXJ2aWNlcyM3MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wMy4wMCNQbG93aW5nIHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjA0LjAwI1NlZWQgYmVkIHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjA1LjAwI1NvaWwgY2hlbWljYWwgdHJlYXRtZW50IHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjAwLjAwI0xhbmQgYW5kIHNvaWwgbWFuYWdlbWVudCM3MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wMS4wMCNMYW5kIHVzZSBwbGFubmluZyM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wMi4wMCNMYW5kIGV2YWx1YXRpb24jNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDMuMDAjTGFuZCByZWNsYW1hdGlvbiM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wNC4wMCNBZ3JvIGVjb2xvZ2ljYWwgem9uZXMgYXNzZXNzbWVudCBvciBwbGFubmluZyM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wNS4wMCNTb2lsIGNsYXNzaWZpY2F0aW9uIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA2LjAwI1dhdGVyc2hlZCBtYW5hZ2VtZW50IzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA3LjAwI1NvaWwgZmVydGlsaXR5IGFuYWx5c2lzIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA4LjAwI1BlZG9sb2d5IzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjAwLjAwLjAwI0Nyb3AgcHJvZHVjdGlvbiBhbmQgbWFuYWdlbWVudCBhbmQgcHJvdGVjdGlvbiM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wMC4wMCNDcm9wIHByb2R1Y3Rpb24jNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDEuMDAjU2VlZCBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjAyLjAwI0h5ZHJvcG9uaWNzIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjAzLjAwI0dyYXNzIG9yIGZvZGRlciBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA0LjAwI0Fyb21hdGljIHBsYW50cyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA1LjAwI0JldmVyYWdlIGNyb3BzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDYuMDAjQ29jb2EgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wNy4wMCNTdWdhcmJlZXQgb3Igc3VnYXJjYW5lIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDguMDAjTnV0IHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDkuMDAjRXNzZW50aWFsIG9pbCBjcm9wcyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjEwLjAwI0ZpYmVyIGNyb3BzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTEuMDAjRnJ1aXQgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xMi4wMCNHcmFpbiBvciBsZWd1bWUgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xMy4wMCNJbnNlY3RpY2lkYWwgcGxhbnRzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTQuMDAjTWVkaWNpbmFsIHBsYW50cyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE1LjAwI1Jvb3RzIG9yIHR1YmVycyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE2LjAwI0NlcmVhbHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xNy4wMCNSdWJiZXIgcGxhbnQgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xOC4wMCNTcGljZSBjcm9wcyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE5LjAwI1RvYmFjY28gY3JvcCBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjIwLjAwI1ZlZ2V0YWJsZSBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjAwLjAwI0Nyb3AgcHJvdGVjdGlvbiM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wMS4wMCNDcm9wIHNwcmF5aW5nIHNlcnZpY2VzIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjAyLjAwI0Jpb2xvZ2ljYWwgY29udHJvbCBzZXJ2aWNlcyM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wMy4wMCNXZWVkIGNvbnRyb2wgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDQuMDAjSGVyYmljaWRlIHNlcnZpY2VzIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjA1LjAwI0ludGVncmF0ZWQgcGVzdCBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjA2LjAwI1BsYW50IHBhdGhvbG9neSM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wNy4wMCNMb2N1c3QgY29udHJvbCM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wMC4wMCNDcm9wIG1hbmFnZW1lbnQjNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDEuMDAjR3JlZW5ob3VzZSBzZXJ2aWNlcyM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wMi4wMCNGZXJ0aWxpemVyIHNlcnZpY2VzIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjAzLjAwI0Nyb3AgYWRtaW5pc3RyYXRpb24jNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDQuMDAjQ3JvcCBzdWJzdGl0dXRpb24jNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDUuMDAjRXh0ZW5zaW9uIHNlcnZpY2VzIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA2LjAwI0Nyb3Agc3BlY2lhbGl6YXRpb24jNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDcuMDAjQ3VsdGl2YXRpb24gZmFybWluZyBzeXN0ZW0gbWFuYWdlbWVudCM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wOC4wMCNDcm9wIHJvdGF0aW9uIG9yIGRpdmVyc2lmaWNhdGlvbiBjb3Vuc2VsaW5nIHNlcnZpY2VzIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA5LjAwI1BsYW50IHRheG9ub215IHNlcnZpY2VzIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjEwLjAwI0ZpZWxkIGNyb3AgZW50b21vbG9neSM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOC4wMC4wMCNDcm9wIHBsYW50aW5nIGFuZCBjdWx0aXZhdGlvbiM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOC4wMS4wMCNPcmNoYXJkIHRyZWUgb3IgdmluZSBwbGFudGluZyBzZXJ2aWNlcyM3MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOC4wMi4wMCNTcHJvdXQgb3IgdHdpZyBzZXJ2aWNlcyM3MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOC4wMy4wMCNDcm9wIGN1bHRpdmF0aW5nIHNlcnZpY2VzIzcwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjA0LjAwI0Nyb3AgcGxhbnRpbmcgc2VydmljZXMjNzAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDAuMDAjQ3JvcCBoYXJ2ZXN0aW5nIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE5LjAxLjAwI0Nhc2ggZ3JhaW5zIGhhcnZlc3Rpbmcgc2VydmljZXMjNzAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDIuMDAjRnJ1aXQgb3IgdHJlZSBudXRzIGhhcnZlc3Rpbmcgc2VydmljZXMjNzAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDMuMDAjRmllbGQgY3JvcCBoYXJ2ZXN0aW5nIHNlcnZpY2VzIzcwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE5LjA0LjAwI1NlZWQgaGFydmVzdGluZyBzZXJ2aWNlcyM3MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wMC4wMCNQb3N0IGhhcnZlc3RpbmcgY3JvcCBwcm9jZXNzaW5nIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjAxLjAwI1NpbG9zIHJlbGF0ZWQgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDIuMDAjR3JhaW4gZHJ5ZXJzIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjAzLjAwI0Nyb3AgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wNC4wMCNGaWVsZCBjcm9wcyBtYXJrZXQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDUuMDAjQ2FzaCBncmFpbiBjcm9wcyBtYXJrZXQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDYuMDAjVmVnZXRhYmxlIGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wNy4wMCNGcnVpdCBjcm9wcyBtYXJrZXQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDguMDAjVHJlZSBudXQgY3JvcHMgbWFya2V0IHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA5LjAwI0dpbm5pbmcgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMTAuMDAjQ3JvcCBjbGVhbmluZyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4xMS4wMCNDb29saW5nIG9yIHJlZnJpZ2VyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMTIuMDAjU3ByYXlpbmcgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMDAuMDAuMDAjRm9yZXN0cnkjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDAuMDAjRm9yZXN0cnkgbWFuYWdlbWVudCM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wMS4wMCNGb3Jlc3QgcmVzb3VyY2VzIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDIuMDAjRm9yZXN0IHBlc3QgY29udHJvbCM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wMy4wMCNGb3Jlc3Qgb3JnYW5pemF0aW9ucyBvciBhc3NvY2lhdGlvbnMgb3IgY29vcGVyYXRpdmVzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA0LjAwI0ZvcmVzdCBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wNS4wMCNGb3Jlc3QgaW52ZW50b3J5IzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA2LjAwI0ZvcmVzdCBtb25pdG9yaW5nIG9yIGV2YWx1YXRpb24jNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDcuMDAjQWZmb3Jlc3RhdGlvbiBzZXJ2aWNlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wOC4wMCNGb3Jlc3RyeSBleHRlbnNpb24gc2VydmljZXMjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDkuMDAjRm9yZXN0IG51cnNlcnkgbWFuYWdlbWVudCM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4xMC4wMCNGb3Jlc3Qgc2VjdG9yYWwgcGxhbm5pbmcjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDAuMDAjRm9yZXN0cnkgaW5kdXN0cnkjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDEuMDAjTm9ud29vZCBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjAyLjAwI0Vzc2VudGlhbCBvaWxzIHByb2R1Y3Rpb24jNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDMuMDAjVGltYmVyIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDQuMDAjRHllcyBwcm9kdWN0aW9uIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjA1LjAwI0VkaWJsZSBmb3Jlc3RyeSBwcm9kdWN0aW9uIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjA2LjAwI1dvb2QgdGVzdGluZyBzZXJ2aWNlcyM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wNy4wMCNUaW1iZXIgcHJvZHVjdGlvbiM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wMC4wMCNGb3Jlc3RyeSBoYXJ2ZXN0aW5nIzcwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAxLjAwI0xvZ2dpbmcgb3IgZmVsbGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wMi4wMCNGb3Jlc3QgaGFydmVzdGluZyBtb3VudGFpbm91cyBhcmVhcyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wMy4wMCNGb3Jlc3QgaGFydmVzdGluZyBzcGVjaWFsaXplZCBvcGVyYXRpb25zIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjA0LjAwI1BsYW50YXRpb24gaGFydmVzdGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wNS4wMCNTd2FtcCBvciBtYW5ncm92ZSBmb3Jlc3QgaGFydmVzdGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wNi4wMCNUZW1wZXJhdGUgZm9yZXN0IGhhcnZlc3RpbmcjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDcuMDAjVHJvcGljYWwgaGlnaCBmb3Jlc3RzIGhhcnZlc3RpbmcjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDAuMDAjRm9yZXN0cnkgY29uc2VydmF0aW9uIHNlcnZpY2VzIzcwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjAxLjAwI0NvbnNlcnZhdGlvbiBvZiBmb3Jlc3QgZ2VuZXRpYyByZXNvdXJjZXMjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDIuMDAjRm9yZXN0IHByb3RlY3Rpb24gc2VydmljZXMjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDMuMDAjRm9yZXN0IGFyaWQgbGFuZCByZWhhYmlsaXRhdGlvbiM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wNC4wMCNGb3Jlc3Qgd2luZCBicmVha3Mgb3Igc2hlbHRlciBiZWx0cyM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wNS4wMCNGb3Jlc3QgcmVzZXJ2ZXMgb3IgcGFya3MgY29uc2VydmF0aW9uIHNlcnZpY2VzIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjA2LjAwI0ZvcmVzdHJ5IHdhdGVyc2hlZCBtYW5hZ2VtZW50IzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjA3LjAwI0ZvcmVzdHJ5IHRvcnJlbnQgY29udHJvbCM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wMC4wMCNGb3Jlc3RyeSByZXNvdXJjZXMjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDEuMDAjRm9yZXN0IHJlc291cmNlcyBkZXZlbG9wbWVudCM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wMi4wMCNBZ3JvZm9yZXN0cnkgcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjAzLjAwI0Z1ZWwgd29vZCByZXNvdXJjZXMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDQuMDAjU2lsdmljdWx0dXJlIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjA1LjAwI0FyaWQgcmFpbmZlZCBwbGFudGF0aW9uIHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wNi4wMCNCcm9hZCBsZWFmZWQgcGxhbnRhdGlvbiByZXNvdXJjZXMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDcuMDAjQ29uaWZlcnMgcGxhbnRhdGlvbnMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDkuMDAjVHJvcGljYWwgcmFpbiBmb3Jlc3QgcGxhbnRhdGlvbnMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMTAuMDAjTWFuZ3JvdmUgc3dhbXBzIHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNi4wMC4wMC4wMCNXaWxkbGlmZSBhbmQgZmxvcmEjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTUuMDAuMDAjRmF1bmEjNzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTUuMDEuMDAjRmF1bmEgcHJvdGVjdGlvbiM3MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNi4wMC4wMCNGbG9yYSM3MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNi4wMS4wMCNGbG9yYSBwcm90ZWN0aW9uIzcwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE2LjE3LjAwLjAwI0Vjb3N5c3RlbXMjNzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDEuMDAjRWNvZGV2ZWxvcG1lbnQgc2VydmljZXMjNzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDIuMDAjTWFyaW5lIGVjb3N5c3RlbSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE2LjE3LjAzLjAwI1RlcnJlc3RyaWFsIGVjb3N5c3RlbSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE2LjE3LjA0LjAwI0Vjb3N5c3RlbXMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4wMC4wMC4wMCNXYXRlciByZXNvdXJjZXMgZGV2ZWxvcG1lbnQgYW5kIG92ZXJzaWdodCM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wMC4wMCNEZXZlbG9wbWVudCM3MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wMS4wMCNXYXRlciBxdWFsaXR5IGFzc2Vzc21lbnQgc2VydmljZXMjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDIuMDAjV2F0ZXIgcmVzb3VyY2VzIHBsYW5uaW5nIHNlcnZpY2VzIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjAzLjAwI0dyb3VuZCBvciBzdXJmYWNlIHdhdGVyIHN1cnZleWluZyM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wNC4wMCNXYXRlciByZXNvdXJjZXMgbWFwcGluZyBzZXJ2aWNlcyM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wNS4wMCNSaXZlciBiYXNpbiBkZXZlbG9wbWVudCM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wNi4wMCNHcm91bmQgb3Igc3VyZmFjZSB3YXRlciBtb2RlbGluZyBzZXJ2aWNlcyM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wMC4wMCNPdmVyc2lnaHQjNzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDEuMDAjV2F0ZXIgcXVhbGl0eSBtYW5hZ2VtZW50IzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjAyLjAwI1dhdGVyIHRlc3Rpbmcgc2VydmljZXMjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDMuMDAjRmxvb2RwbGFpbiBtYW5hZ2VtZW50IzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjA0LjAwI1dhdGVyIGNvbnNlcnZhdGlvbiBhZHZpc29yeSBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wNS4wMCNXYXRlciByaWdodHMgYWR2aXNvcnkgc2VydmljZXMjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDYuMDAjV2F0ZXIgcmVzb3VyY2UgcmVjb3Zlcnkgc2VydmljZXMjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDcuMDAjV2F0ZXIgcHJpY2luZyBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wMC4wMCNJcnJpZ2F0aW9uIzcwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjAxLjAwI0NhbmFsIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDIuMDAjRGFtIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDMuMDAjUmVzZXJ2b2lycyBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA0LjAwI1B1bXBpbmcgc3RhdGlvbiBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA1LjAwI1BpcGVsaW5lcyBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA2LjAwI0Rpa2Ugb3IgZW1iYW5rbWVudCBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA3LjAwI1dhdGVyIHdlbGwgbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wOC4wMCNJcnJpZ2F0aW9uIGFkdmlzb3J5IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA5LjAwI0lycmlnYXRpb24gc3lzdGVtcyBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE4LjAwLjAwI0RyYWluYWdlIHNlcnZpY2VzIzcwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE4LjAxLjAwI0xhbmQgZHJhaW5hZ2Ugc2VydmljZXMjNzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTguMDIuMDAjU3Rvcm0gd2F0ZXIgZHJhaW5hZ2UjNzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTguMDMuMDAjRmxvb2QgcHJvdGVjdGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzcwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzcxLjAwLjAwLjAwLjAwI01pbmluZyBhbmQgT2lsIGFuZCBHYXMgU2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMDAuMDAuMDAjTWluaW5nIHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEwLjE1LjAwLjAwI01pbmUgZXhwbG9yYXRpb24jNzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTUuMDEuMDAjTWluZSBkZXZlbG9wbWVudCM3MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNS4wMi4wMCNUZXN0IGJvcmluZyBvciBjb3JlIGRyaWxsaW5nIzcxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE2LjAwLjAwI01pbmUgZHJpbGxpbmcgYW5kIGJsYXN0aW5nIHNlcnZpY2VzIzcxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEwLjE2LjAxLjAwI1NoYWZ0IHNpbmtpbmcjNzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTYuMDIuMDAjTWluZSBibGFzdGluZyBzZXJ2aWNlcyM3MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wMC4wMCNFeHRyYWN0aW9uIzcxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjAxLjAwI1NoYWZ0IG1pbmluZyBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wMi4wMCNPcGVuIHBpdCBtaW5pbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDMuMDAjU3RyaXAgbWluaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA0LjAwI0luIHNpdHUgbGVhY2hpbmcgKElTTCkgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDUuMDAjUHVtcGluZyBvciBkcmFpbmluZyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wNi4wMCNPdmVyYnVyZGVuIHJlbW92YWwjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDcuMDAjSW1wb3VuZG1lbnQgb3Igc3RvcmFnZSBvZiB3YXRlciBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wOC4wMCNTb2lsIGZsdXNoaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA5LjAwI01pbmUgZmlsbGluZyBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4wMC4wMC4wMCNPaWwgYW5kIGdhcyBleHBsb3JhdGlvbiBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNS4wMC4wMCNPaWwgYW5kIGdhcyBleHBsb3JhdGlvbiM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNS4wMS4wMCNTZWlzbW9ncmFwaGljIHN1cnZleXMjNzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTUuMDIuMDAjT2Zmc2hvcmUgZXhwbG9yYXRpb24jNzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTUuMDMuMDAjV2VsbCBzdXJ2ZXlpbmcjNzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDAuMDAjV2VsbCBkcmlsbGluZyBhbmQgbWFpbnRlbmFuY2UjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDEuMDAjRGlyZWN0aW9uYWwgZHJpbGxpbmcjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDIuMDAjT2lsIHdlbGwgZHJpbGxpbmcjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDMuMDAjRHJpbGxpbmcgb2Ygd2F0ZXIgaW50YWtlIHdlbGxzIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjA0LjAwI1JlZHJpbGxpbmcgb3IgcmV3b3JraW5nIG9mIHdlbGxzIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjA1LjAwI0FjaWRpemluZyBvciBjaGVtaWNhbCB0cmVhdGluZyBvZiB3ZWxscyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wNi4wMCNUb29sIGZpc2hpbmcgc2VydmljZXMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDcuMDAjT2lsIHdlbGwgcGxhdGZvcm0gbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTcuMDAuMDAjRXh0cmFjdGlvbiBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wMS4wMCNGbG93IHJhdGUgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTcuMDIuMDAjT2lsIHNhbXBsaW5nIHNlcnZpY2VzIzcxLjExLjE3LjAwLjAwCi11bnNwc2M3IzcxLjExLjE3LjAzLjAwI09pbCBmaWVsZCBkcmlsbGluZyBvciBtdWQgc2VydmljZXMjNzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTcuMDQuMDAjSW1wb3VuZCBvciBzdG9yYWdlIG9mIHdhdGVyIzcxLjExLjE3LjAwLjAwCi11bnNwc2M3IzcxLjExLjE4LjAwLjAwI1dlbGwgcmVzdG9yYXRpb24gYW5kIHJlY2xhbWF0aW9uIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE4LjAxLjAwI0NsZWFuaW5nIG9yIHN3YWJiaW5nIG9mIHdlbGxzIzcxLjExLjE4LjAwLjAwCi11bnNwc2M3IzcxLjExLjE4LjAyLjAwI1NvaWwgZmx1c2hpbmcgc2VydmljZXMjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDMuMDAjTWluZSBmaWxsaW5nIHNlcnZpY2VzIzcxLjExLjE4LjAwLjAwCi11bnNwc2M3IzcxLjExLjE4LjA0LjAwI1dlbGwgcGx1Z2dpbmcgb3IgYWJhbmRvbm1lbnQgc2VydmljZXMjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDUuMDAjQ2VtZW50aW5nIHNlcnZpY2VzIGZvciB3ZWxsIGNhc2luZ3MjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTkuMDAuMDAjV2VsbCBlbWVyZ2VuY3kgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTkuMDEuMDAjV2VsbCBmaXJlIGZpZ2h0aW5nIHNlcnZpY2VzIzcxLjExLjE5LjAwLjAwCi11bnNwc2M3IzcxLjExLjE5LjAyLjAwI1dlbGwgY2FwcGluZyBzZXJ2aWNlcyM3MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wMC4wMCNDYXNlZCBob2xlIHdlbGwgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wMS4wMCNDYXNlZCBob2xlIGZvcm1hdGlvbiBzYW1wbGluZyB0ZXN0aW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjAyLjAwI0Nhc2luZyB0aGlja25lc3MgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDMuMDAjQ2hlbWljYWwgY3V0dGVycyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wNC4wMCNFbGVjdHJvbWFnbmV0aWMgcGlwZSByZWNvdmVyeSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wNS4wMCNXZWxsIGZsb3cgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDYuMDAjV2VsbCBmbHVpZCBkZW5zaXR5IG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA3LjAwI1dlbGwgZmx1aWQgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDguMDAjRnJlZSBwb2ludCB0b29sIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA5LjAwI0dhbW1hIHJheSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xMC4wMCNKZXQgY3V0dGVyIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjExLjAwI01lYXN1cmVtZW50IHdoaWxlIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjEyLjAwI05ldXRyb24gcG9yb3NpdHkgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTMuMDAjTnVjbGVhciBzcGVjdHJvc2NvcHkgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTQuMDAjV2VsbCBwYWNrZXIgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTUuMDAjUGVybWFuZW50IG1hZ25ldHMgcGlwZSByZWNvdmVyeSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xNi4wMCNXZWxsIHBsdWdnaW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE3LjAwI1dlbGwgcHJlc3N1cmUgbWVhc3VyZW1lbnQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xOC4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgYm9yZWhvbGUgZmx1aWQgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTkuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIGRlbnNpdHkgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjAuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIGRvd25ob2xlIHZpZGVvIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjIxLjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBmbG93IG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjIyLjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBwcmVzc3VyZSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yMy4wMCNPdGhlciBwcm9kdWN0aW9uIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjQuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI1LjAwI1NldmVyaW5nIGNvbGxpZGluZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yNi4wMCNXZWxsIGxvZ2dpbmcgc29uaWMgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjcuMDAjU3R1Y2sgcG9pbnQgdG9vbCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yOC4wMCNUaGVybWFsIGRlY2F5IHdlbGwgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yOS4wMCNXZWxsIHR1YnVsYXIgY29ycm9zaW9uIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMzAuMDAjV2VsbCBwZXJmb3JtYW5jZSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4zMS4wMCNXZWxsIHR1YnVsYXIgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDAuMDAjT3BlbiBob2xlIHdlbGwgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wMS4wMCNEaWdpdGFsIHNvbmljIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDIuMDAjQm9yZWhvbGUgZ2VvbWV0cnkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wMy4wMCNEZW5zaXR5IGxpdGhvbG9neSBudWNsZWFyIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDQuMDAjRGlwbWV0ZXIgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wNS4wMCNEaXBvbGUgc29uaWMgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wNi4wMCNEaXJlY3Rpb25hbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA3LjAwI0RpcmVjdGlvbmFsIHN1cnZleSBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wOC4wMCNFbGVjdHJvbWFnbmV0aWMgcHJvcGFnYXRpb24gbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wOS4wMCNGb3JtYXRpb24gdGVzdGluZyBzYW1wbGluZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xMC4wMCNGcmFjdHVyZSBpZGVudGlmaWNhdGlvbiBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjExLjAwI0dhbW1hIHJheSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjEyLjAwI0dhbW1hIHJheSBzcGVjdHJvc2NvcHkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xMy4wMCNHZW9jaGVtaWNhbCBudWNsZWFyIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTQuMDAjV2VsbCBpbWFnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE1LjAwI01hZ25ldGljIHJlc29uYW5jZSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE2LjAwI01pY3JvcmVzaXN0aXZpdHkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xNy4wMCNOZXV0cm9uIHBvcm9zaXR5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTguMDAjUGV0cm9waHlzaWNzIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE5LjAwI1Jlc2lzdGl2aXR5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMjAuMDAjU2xpbSBhY2Nlc3Mgc29uaWMgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4yMS4wMCNTb25pYyBjZW1lbnQgYm9uZCByYXRpbyBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjIyLjAwI1dlbGwgc29uaWMgaW1hZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wMC4wMCNPdGhlciBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjAxLjAwI0xvZ2dpbmcgd2l0aCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjAyLjAwI0xvZ2dpbmcgd2hpbGUgZHJpbGxpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDMuMDAjTG9nZ2luZyBkdXJpbmcgZmlzaGluZyBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wNC4wMCNMb2dnaW5nIHdoaWxlIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjA1LjAwI0RyaWxsIHBpcGUgY29udmV5ZWQgd2VsbCBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wNi4wMCNHZW5lcmFsIHdlbGwgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wMC4wMCNTZWlzbWljIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjAxLjAwI1R3byBkaW1lbnNpb25hbCBsYW5kIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDIuMDAjVHdvIGRpbWVuc2lvbmFsIG1hcmluZSBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjAzLjAwI1R3byBkaW1lbnNpb25hbCBzZWlzbWljIGRhdGEgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNC4wMCNUaHJlZSBkaW1lbnNpb25hbCBsYW5kIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDUuMDAjVGhyZWUgZGltZW5zaW9uYWwgbWFyaW5lIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDYuMDAjVGhyZWUgZGltZW5zaW9uYWwgc2Vpc21pYyBkYXRhIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDcuMDAjRm91ciBkaW1lbnNpb25hbCBsYW5kIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDguMDAjRm91ciBkaW1lbnNpb25hbCBtYXJpbmUgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wOS4wMCNGb3VyIGRpbWVuc2lvbmFsIHNlaXNtaWMgZGF0YSBwcm9jZXNzaW5nIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjEwLjAwI0NoZWNrc2hvdCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjExLjAwI0Nyb3NzIHdlbGwgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xMi4wMCNEZXZpYXRlZCB3ZWxsIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTMuMDAjR2VvcGh5c2ljcyBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE0LjAwI09mZnNldCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE1LjAwI1F1aWNrc2hvdCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE2LjAwI1NlaXNtaWMgZGF0YSBhY3F1aXNpdGlvbiB3aGlsZSBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xNy4wMCNTbGltIGhvbGUgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xOC4wMCNTZWlzbWljIHN1cnZleSBldmFsdWF0aW9uIG9yIGRlc2lnbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xOS4wMCNWZXJ0aWNhbCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjIwLjAwI1dhbGthd2F5IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMjEuMDAjR2VvbG9naWNhbCBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4wMC4wMC4wMCNXZWxsIGRyaWxsaW5nIGNvbnN0cnVjdGlvbiBhbmQgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDAuMDAjQ2VtZW50IHB1bXBpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDEuMDAjT2lsZmllbGQgY2FzaW5nIGhhcmR3YXJlIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjAyLjAwI09pbGZpZWxkIGNlbWVudCBsYWIgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wMy4wMCNEb3duaG9sZSBvaWxmaWVsZCB0b29scyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wNC4wMCNPaWxmaWVsZCBmaWx0ZXJpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDUuMDAjRm9hbSBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDYuMDAjR2VvdGhlcm1hbCB3ZWxsIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wNy4wMCNMaW5lciBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDguMDAjT2lsd2VsbCBsb3N0IGNpcmN1bGF0aW9uIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA5LjAwI09pbGZpZWxkIG11ZCByZW1vdmFsIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjEwLjAwI1BsdWcgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjExLjAwI1dlbGwgc2l0ZSBwcmVzc3VyZSBwdW1waW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjEyLjAwI09pbGZpZWxkIHByZXNzdXJlIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTMuMDAjU3VyZmFjZSBjYXNpbmcgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE0LjAwI0ludGVybWVkaWF0ZSBjYXNpbmcgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE1LjAwI1Byb2R1Y3Rpb24gc3RyaW5nIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xNi4wMCNTcXVlZXplIHdlbGwgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE3LjAwI1dlbGwgd2F0ZXIgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xOC4wMCNXZWxsIGNlbWVudCBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE5LjAwI1dlbGwgY2VtZW50IGdyb3V0aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjIwLjAwI1dlbGwgY2VtZW50aW5nIGFkZGl0aXZlcyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4yMS4wMCNXZWxsIGNlbWVudGluZyBkZXNpZ24gc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMjIuMDAjV2VsbCBjbGVhbmluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4yMy4wMCNXZWxsIHJlcGFpciBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wMC4wMCNDb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjAxLjAwI0FjaWRpemluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDIuMDAjQ2FibGUgaW5zdGFsbGF0aW9uIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wMy4wMCNDZW1lbnRpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA0LjAwI0NoZW1pY2FsIGN1dHRpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA1LjAwI0NsZWFuIG91dCB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDYuMDAjQ29tcGxldGlvbiB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDcuMDAjQ29udmV5aW5nIGluZmxhdGFibGVzIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wOC4wMCNDb3JpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA5LjAwI0V4dGVuZGVkIHJlYWNoIHdlbGwgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTAuMDAjRmlzaGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTEuMDAjRnJhY3R1cmluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTIuMDAjSGlnaCBwcmVzc3VyZSBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjEzLjAwI0hvcml6b250YWwgaXNvbGF0aW9uIG9pbGZpZWxkIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE0LjAwI0xvZ2dpbmcgd2l0aCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE1LjAwI01pbGxpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE2LjAwI05pdHJvZ2VuIHJlbGF0ZWQgYXBwbGljYXRpb25zIHRocm91Z2ggY29pbGVkIHR1YmluZyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xNy4wMCNQZXJmb3JhdGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTguMDAjUGlwZWxpbmUgb3IgZmxvd2xpbmUgbGF5aW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE5LjAwI1BpcGVsaW5lIGludGVydmVudGlvbiBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4yMC4wMCNTYW5kIGNvbnRyb2wgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjIxLjAwI0FicmFzaXZlIHR1YnVsYXIgY2xlYW5pbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMjIuMDAjV2VsbCBraWxsIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4yMy4wMCNDYXNpbmcgZXhpdCB3aXRoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDAuMDAjQ29yaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjAxLjAwI0NvbnZlbnRpb25hbCBjb3Jpbmcgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDIuMDAjQ29yZSBpc29sYXRpb24gc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDMuMDAjQ29yZSBwcmVzZXJ2YXRpb24gc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDQuMDAjSG9yaXpvbnRhbCBjb3Jpbmcgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDUuMDAjT3JpZW50ZWQgY29yaW5nIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjA2LjAwI1JpZyBzaXRlIGNvcmUgYW5hbHlzaXMgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDcuMDAjU3BvbmdlIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wOC4wMCNXaXJlbGluZSByZXRyaWV2YWJsZSBjb3Jpbmcgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTMuMDAuMDAjRG93bmhvbGUgdG9vbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wMS4wMCNEb3duaG9sZSB2aWJyYXRpb24gY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wMi4wMCNEb3duaG9sZSBob2xlIG9wZW5pbmcgc2VydmljZXMjNzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTMuMDMuMDAjUmVhbWluZyB3aGlsZSBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wNC4wMCNEb3duaG9sZSB0b3JxdWUgb3IgZHJhZyByZWR1Y3Rpb24gc2VydmljZXMjNzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTMuMDUuMDAjRG93bmhvbGUgdW5kZXJyZWFtaW5nIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjAwLjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wMS4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgZGVzaWduIHNlcnZpY2VzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjAyLjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCBoeWRyYXVsaWMgb3B0aW1pemF0aW9uIHNlcnZpY2VzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjAzLjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCBwbGFubmluZyBzZXJ2aWNlcyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wNC4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgcmVjb3JkaW5nIHNlcnZpY2VzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjA1LjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCByZXBhaXIgc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDYuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IGZvb3RhZ2UgY29udHJhY3RzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjA3LjAwI1dlbGwgc2l0ZSBkcmlsbGluZyBvcHRpbWl6YXRpb24gYXNzaXN0YW5jZSBzZXJ2aWNlIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjAwLjAwI0RyaWxsaW5nIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjAxLjAwI0Fjb3VzdGljIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDIuMDAjQWNvdXN0aWMgdGVsZW1ldHJ5IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDMuMDAjQ2FsaXBlciBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA0LjAwI0RlbnNpdHkgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wNS4wMCNPaWxmaWVsZCBkcmlsbGluZyBwZXJmb3JtYW5jZSBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wNi4wMCNFbGVjdHJvbWFnbmV0aWMgdGVsZW1ldHJ5IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDcuMDAjRm9ybWF0aW9uIGRpcCBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA4LjAwI0Zvcm1hdGlvbiBwcmVzc3VyZSBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA5LjAwI0dlb2xvZ2ljYWxseSBzdGVlcmVkIHdlbGxzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjEwLjAwI0dlb3N0b3BwaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjExLjAwI011ZCBsb2dnaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjEyLjAwI051Y2xlYXIgbWFnbmV0aWMgcmVzb25hbmNlIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjEzLjAwI1Bvcm9zaXR5IG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTQuMDAjUmVzaXN0aXZpdHkgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xNS4wMCNXZWxsIHN1cnZleWluZyBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjE2LjAwI1N1cnZleWluZyB3aXJlbGluZSBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wMC4wMCNPaWwgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wMS4wMCNXZWxsIGNhc2luZyBjcmV3IHNlcnZpY2UjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDIuMDAjV2VsbCBjYXNpbmcgcGxhbm5pbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDMuMDAjV2VsbCBjYXNpbmcgbWlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wNC4wMCNDb2lsZWQgdHViaW5nIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA1LjAwI1dlbGwgY29tcGxldGlvbiBwbGFubmluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wNi4wMCNDb252ZW50aW9uYWwgd2VsbCBkaXJlY3Rpb25hbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wNy4wMCNXZWxsIGRpcmVjdGlvbmFsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA4LjAwI1dlbGwgZHJpbGxpbmcgY29udHJhY3QgZGV2ZWxvcG1lbnQgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDkuMDAjV2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xMC4wMCNXZWxsIGRyaWxsaW5nIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjExLjAwI1dlbGwgZHJpbGxpbmcgbXVkIG9yIGZsdWlkIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjEyLjAwI1dlbGwgZHJpbGxpbmcgb2Ygd2F0ZXIgaW50YWtlIHdlbGwgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTMuMDAjV2VsbCBkcmlsbGluZyByaWcgbW9uaXRvciBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xNC4wMCNXZWxsIGRyaWxsaW5nIHNvbGlkcyBjb250cm9sIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE1LjAwI1dlbGwgZHJpbGxpbmcgc3RhYmlsaXppbmcgb3IgaG9sZSBvcGVuaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE2LjAwI1dlbGwgZHJpbGxpbmcgc3VwZXJ2aXNpb24jNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTcuMDAjV2VsbCBkcmlsbGluZyBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE4LjAwI1dlbGwgZHJpbGxpbmcgb3RoZXIgZ2VuZXJhbCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xOS4wMCNFeHRlbmRlZCByZWFjaCBkaXJlY3Rpb25hbCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjIwLjAwI011bHRpbGF0ZXJhbCBkaXJlY3Rpb25hbCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjIxLjAwI09pbCBjb3VudHJ5IHR1YnVsYXIgbW9kaWZpY2F0aW9uIG9yIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjIuMDAjV2VsbCBkcmlsbGluZyBwaWNrdXAgb3IgbGF5ZG93biBzZXJ2aWNlIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjIzLjAwI1dlbGwgZHJpbGxpbmcgcGlwZSBzdG9yYWdlIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjI0LjAwI1dlbGwgZHJpbGxpbmcgcGlwZSB0aHJlYWRpbmcjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjUuMDAjUmF0aG9sZSB3ZWxsIGRyaWxsaW5nIHNlcnZpY2UjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjYuMDAjU2hvcnQgcmFkaXVzIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjcuMDAjU3RlZXJhYmxlIHVuZGVycmVhbWluZyB3aGlsZSB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjI4LjAwI1VsdHJhIHNob3J0IHJhZGl1cyBkaXJlY3Rpb25hbCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjI5LjAwI1VuZGVyYmFsYW5jZWQgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zMC4wMCNXZWxsIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjMxLjAwI1dlbGwgcmVkcmlsbGluZyBvciByZXdvcmtpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzIuMDAjV2VsbCBkcmlsbGluZyBkZXZpYXRpb24gY29udHJvbCM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zMy4wMCNPaWxmaWVsZCBncmF2ZWwgcGFja2luZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zNC4wMCNPaWxmaWVsZCBodWxsIHN5c3RlbXMgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzUuMDAjUmlnIHdlbGwgcHVsbGluZyBjcmV3IHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjM2LjAwI1dlbGxoZWFkIGVxdWlwbWVudCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zNy4wMCNTaWRldHJhY2tpbmcgd2l0aCB3aGlwc3RvY2sgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDAuMDAjT2lsZmllbGQgZmlzaGluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wMS4wMCNPaWxmaWVsZCBmaXNoaW5nIHNlcnZpY2UgZGVzaWduIHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjAyLjAwI09pbGZpZWxkIGZpc2hpbmcgc2VydmljZSBlY29ub21pYyBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjAzLjAwI09pbGZpZWxkIGZpc2hpbmcgc2VydmljZSBvcGVyYXRpb24gc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDQuMDAjT2lsZmllbGQganVuayByZWNvdmVyeSBzZXJ2aWNlcyM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wNS4wMCNPaWxmaWVsZCBwaXBlIHJlY292ZXJ5IHNlcnZpY2UjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDYuMDAjT2lsZmllbGQgZmlzaGluZyBvciBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOC4wMC4wMCNHYXMgbGlmdCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOC4wMS4wMCNDb2lsZWQgdHViaW5nIGdhcyBsaWZ0IHNlcnZpY2VzIzcxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjAyLjAwI0dhcyBsaWZ0IGZpeGluZyBvciB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjAzLjAwI0dhcyBsaWZ0IGtpY2tvdmVyIHNlcnZpY2VzIzcxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjA0LjAwI0dhcyBsaWZ0IHNhbmQgY29udGFpbm1lbnQgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDAuMDAjRG93biBob2xlIGZsdWlkIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE5LjAxLjAwI0Rvd24gaG9sZSBmbHVpZCBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE5LjAyLjAwI0Rvd24gaG9sZSBmbHVpZCBsYWJvcmF0b3J5IHNlcnZpY2VzIzcxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE5LjAzLjAwI0Rvd24gaG9sZSBmbHVpZCBzYW1wbGluZyBzZXJ2aWNlcyM3MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wMC4wMCNXZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAxLjAwI0NvaWxlZCB0dWJpbmcgd2VsbCBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wMi4wMCNTbGlja2xpbmUgd2VsbCBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wMy4wMCNUaHJvdWdoIHR1YmluZyB3ZWxsIHBlcmZvcmF0aW9uIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjA0LjAwI1R1YmluZyBjb252ZXllZCB3ZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjA1LjAwI1dpcmVsaW5lIHdlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDYuMDAjV2VsbCB0dWJpbmcgcHVuY2hlciBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wMC4wMCNPaWxmaWVsZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDEuMDAjQWNpZCBzYW5kIGNvbnRyb2wgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wMi4wMCNTYW5kIGNvbnRyb2wgYmxlbmRpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDMuMDAjQ2xlYW5pbmcgZmx1aWQgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA0LjAwI0NvbXBsZXRpb24gZmx1aWQgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA1LjAwI1dlbGwgY29uc29saWRhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wNi4wMCNPaWxmaWVsZCBmaWx0ZXJpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDcuMDAjRnJhY3R1cmluZyBmbHVpZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDguMDAjRnJhY3R1cmluZyBwcmUgZnJhYyBkZXNpZ24gdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wOS4wMCNHZW5lcmFsIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xMC4wMCNHcmF2ZWwgY2FycmllciBmbHVpZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTEuMDAjU2FuZCBjb250cm9sIGxhYiB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjEyLjAwI011bHRpem9uZSBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTMuMDAjU2FuZCBjb250cm9sIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTQuMDAjU2FuZCBjb250cm9sIHRlbXBvcmFyeSBpc29sYXRpb24gc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTUuMDAjV2VsbCB0b29sIHJlZHJlc3Npbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTYuMDAjTm9uIGZyYWN0dXJpbmcgc2FuZCBjb250cm9sIHB1bXBpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDAuMDAjU2xpY2tsaW5lIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIyLjAxLjAwI1NsaWNrbGluZSBmaXNoaW5nIHNlcnZpY2VzIzcxLjEyLjIyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIyLjAyLjAwI1NsaWNrbGluZSBsaWZ0aW5nIHNlcnZpY2VzIzcxLjEyLjIyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIyLjAzLjAwI1NsaWNrbGluZSBtYW5pcHVsYXRpb24gc2VydmljZXMjNzEuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDAuMDAjU3Vic2VhIHdlbGwgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDEuMDAjU3Vic2VhIHdlbGwgZGl2aW5nIHNlcnZpY2VzIzcxLjEyLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjAyLjAwI1N1YnNlYSB3ZWxsIHJlbW90ZSBvcGVyYXRpb24gdmVoaWNsZSByb3Ygc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDMuMDAjU3Vic2VhIHdlbGwgZml4dHVyaW5nIG9yIHRlc3QgZXF1aXBtZW50IHNlcnZpY2VzIzcxLjEyLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjA0LjAwI1N1YnNlYSB3ZWxsIGludGVydmVudGlvbiBvciBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjA1LjAwI1N1YnNlYSB3ZWxsIHNhZmV0eSB0ZXN0IHRyZWUgc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDYuMDAjU3Vic2VhIHdlbGwgZXF1aXBtZW50IG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjEyLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjAwLjAwI1dlbGwgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wMS4wMCNEcmlsbCBzdGVtIGZsb3cgbWV0ZXJpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDIuMDAjRHJpbGwgc3RlbSBzdXJmYWNlIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDMuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIHBhY2tlciBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wNC4wMCNEcmlsbCBzdGVtIHRlc3RpbmcgcHJlc3N1cmUgY29udHJvbCB0ZXN0IHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA1LjAwI0RyaWxsIHN0ZW0gdGVzdGluZyBwdWxzZSBvcGVyYXRlZCB0ZXN0IHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA2LjAwI0RyaWxsIHN0ZW0gdGVzdGluZyBmb3IgdWx0cmEgaGlnaCBwcmVzcyBoaWdoIHRlbXAgZW52aXJvbm1lbnQgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDcuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA4LjAwI1BlcmlvZGljIHdlbGwgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wOS4wMCNTdXJmYWNlIHdlbGwgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4xMC4wMCNVbmRlcmJhbGFuY2VkIHRlc3Rpbmcgd2hpbGUgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDAuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDEuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgZGVzaWduIHNlcnZpY2VzIzcxLjEyLjI1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI1LjAyLjAwI1dhdGVyIG9yIGdhcyBjb250cm9sIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDMuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgaXNvbGF0aW9uIHNlcnZpY2VzIzcxLjEyLjI1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI1LjA0LjAwI1dhdGVyIG9yIGdhcyBjb250cm9sIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDUuMDAjV2F0ZXIgb3IgZ2FzIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDAuMDAjV2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjAxLjAwI1dlbGwgY2FzaW5nIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDIuMDAjV2VsbCBjb21wbGV0aW9uIGZsdWlkcyBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wMy4wMCNHYXMgbGlmdCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDQuMDAjSG9yaXpvbnRhbCBjYXNlZCBob2xlIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA1LjAwI0hvcml6b250YWwgb3BlbiBob2xlIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA2LjAwI0ludGVsbGlnZW50IHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wNy4wMCNMaW5lciB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDguMDAjTXVsdGlsYXRlcmFsIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wOS4wMCNQZXJtYW5lbnQgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjEwLjAwI1NhbmQgY29udHJvbCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMTEuMDAjVGVtcG9yYXJ5IGRyaWxsIHN0ZW0gdGVzdGluZyB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMTIuMDAjVHViaW5nIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4xMy4wMCNVbmRlcmJhbGFuY2VkIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wMC4wMCNXZWxsIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjAxLjAwI09pbCB3ZWxsIHBsYXRmb3JtIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjAyLjAwI09pbGZpZWxkIHB1bXBpbmcgdW5pdCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wMy4wMCNPaWxmaWVsZCByb2QgcHVtcCByZXBhaXIgc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDQuMDAjT2lsZmllbGQgc251YmJpbmcgc2VydmljZSM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wNS4wMCNPaWxmaWVsZCBzdWNrZXIgcm9kIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA2LjAwI1dlbGwgc3dhYmJpbmcgc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDcuMDAjT2lsZmllbGQgdHViaW5nIGFuY2hvciBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wOC4wMCNPaWxmaWVsZCBwdW1wIG1lY2hhbmljIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjAwLjAwI1dlbGwgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wMS4wMCNEb3duaG9sZSByZWNvcmRpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDIuMDAjV2VsbCBmbG93IG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDMuMDAjT2lsIG9yIGdhcyB3ZWxsIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDQuMDAjV2VsbCBzaXRlIHBoYXNlIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDUuMDAjV2VsbCBzaXRlIHB1bXAgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wNi4wMCNXZWxsIHNpdGUgc3VyZmFjZSBkYXRhIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA3LjAwI1dlbGwgc2l0ZSBzdXJmYWNlIHJlYWRvdXQgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDguMDAjV2VsbCBzaXRlIHN1cmZhY2UgcmVjb3JkaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA5LjAwI1N1cmZhY2Ugd2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjEwLjAwI1N1YnN1cmZhY2Ugd2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjAwLjAwI09pbGZpZWxkIHJpZ3MjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDEuMDAjRGVlcHdhdGVyIG9pbGZpZWxkIHJpZyBzZXJ2aWNlcyM3MS4xMi4yOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wMi4wMCNKYWNrdXAgb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjAzLjAwI0JhcmdlIG9pbGZpZWxkIHJpZyBzZXJ2aWNlcyM3MS4xMi4yOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wNC4wMCNMYW5kIG9pbGZpZWxkIHJpZyBzZXJ2aWNlcyM3MS4xMi4yOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wNS4wMCNQbGF0Zm9ybSBvaWxmaWVsZCByaWcgc2VydmljZXMjNzEuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMDAuMDAuMDAjT2lsIGFuZCBnYXMgZXh0cmFjdGlvbiBhbmQgcHJvZHVjdGlvbiBlbmhhbmNlbWVudCBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wMC4wMCNXZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDEuMDAjQWNpZCBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDIuMDAjRW11bHNpb24gYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjAzLjAwI0ZvYW0gYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA0LjAwI09pbCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDUuMDAjT2lsIHdlbGwgc2NhbGUgY29udHJvbCBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wNi4wMCNXZWxsIGZyYWN0dXJlIHRlc3Rpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDcuMDAjV2VsbCBmcmFjdHVyaW5nIGRvd25ob2xlIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDguMDAjV2VsbCBmcmFjdHVyaW5nIGhlaWdodCBjb250cm9sIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA5LjAwI1dlbGwgZnJhY3R1cmluZyBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjEwLjAwI1dlbGwgZnJhY3R1cmluZyBzZXJ2aWNlIGRlc2lnbiBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xMS4wMCNXZWxsIGZyYWN0dXJpbmcgc2VydmljZSBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjEyLjAwI1dlbGwgZnJhY3R1cmluZyBzdXJmYWNlIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTMuMDAjV2VsbCBmcmFjdHVyaW5nIHRyZWF0bWVudCBxdWFsaXR5IGNvbnRyb2wgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTQuMDAjT2lsIGJhc2VkIGZsdWlkIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xNS4wMCNPdGhlciB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTYuMDAjV2VsbCBmcmFjdHVyaW5nIHN0cmVzcyBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjE3LjAwI1dhdGVyIGJhc2VkIGZsdWlkIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMC4wMCNNYXRyaXggc3RpbXVsYXRpb24gc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDEuMDAjQWNpZCBiYXNlZCBtYXRyaXggc3RpbXVsYXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDIuMDAjRm9ybWF0aW9uIHNlYWxlciBtYXRyaXggc3RpbXVsYXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDMuMDAjTWF0cml4IG9yZ2FuaWMgY2xlYW51cCBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wNC4wMCNNYXRyaXggb3JnYW5pYyBpbmhpYml0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA1LjAwI01hdHJpeCBzY2FsZSBjbGVhbnVwIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA2LjAwI01hdHJpeCBzY2FsZSBpbmhpYml0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA3LjAwI01hdHJpeCB0cmVhdG1lbnQgZGVzaWduIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA4LjAwI01hdHJpeCB0cmVhdG1lbnQgZGl2ZXJzaW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA5LjAwI01hdHJpeCB0cmVhdG1lbnQgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4xMC4wMCNNYXRyaXggdHJlYXRtZW50IHF1YWxpdHkgY29udHJvbCBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4xMS4wMCNOb24gYWNpZCBiYXNlZCBtYXRyaXggc3RpbXVsYXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTIuMDAuMDAjT2lsZmllbGQgbml0cm9nZW4gc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTIuMDEuMDAjTml0cm9nZW4gd2VsbCBzZXJ2aWNlcyM3MS4xMy4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wMC4wMCNPdGhlciBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjAxLjAwI0JvdHRvbSBpbnRha2Ugb2lsZmllbGQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wMi4wMCNDYWJsZSBkZXBsb3llZCBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjAzLjAwI0NvMiBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA0LjAwI0NvaWxlZCB0dWJpbmcgZGVwbG95ZWQgb2lsZmllbGQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wNS4wMCNEb3duaG9sZSBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA2LjAwI0R1YWwgY29tcGxldGlvbiB3ZWxsIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA3LjAwI0hvcml6b250YWwgcHVtcGluZyB3ZWxsIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA4LjAwI09pbGZpZWxkIHB1bXBpbmcgaW5zdGFsbGF0aW9uIHB1bGwgb3Igb3BlcmF0aW9uIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA5LjAwI1dlbGwgcHJvZmlsZSBtb2RpZmljYXRpb24gc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMTAuMDAjT2lsZmllbGQgc3Bvb2xpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTQuMDAuMDAjV2VsbCBwcm9kdWN0aW9uIHNlcnZpY2VzIzcxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjE0LjAxLjAwI09pbGZpZWxkIGZsYXJlIHN5c3RlbSBzZXJ2aWNlcyM3MS4xMy4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xNC4wMi4wMCNPaWxmaWVsZCBob3Qgb2lsIG9yIHdhdGVyIHNlcnZpY2UjNzEuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTQuMDMuMDAjT2lsZmllbGQgc3RlYW1pbmcgc2VydmljZXMjNzEuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMDAuMDAuMDAjT2lsIGFuZCBnYXMgcmVzdG9yYXRpb24gYW5kIHJlY2xhbWF0aW9uIHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEwLjAwLjAwI0VtZXJnZW5jeSB3ZWxsIGNvbnRyb2wgc2VydmljZXMjNzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDEuMDAjV2VsbCBwcmVzc3VyZSBjb250cm9sIHNlcnZpY2VzIzcxLjE0LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEwLjAyLjAwI1dlbGwgY2FwcGluZyBzZXJ2aWNlcyM3MS4xNC4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wMy4wMCNXZWxsIGZpcmUgZmlnaHRpbmcgc2VydmljZXMjNzEuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDQuMDAjV2lsZCB3ZWxsIGNvbnRyb2wgc2VydmljZXMjNzEuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTEuMDAuMDAjV2VsbCBwbHVnZ2luZyBhbmQgYWJhbmRvbm1lbnQgc2VydmljZXMjNzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTEuMDEuMDAjV2VsbCBhYmFuZG9ubWVudCBzZXJ2aWNlcyM3MS4xNC4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMS4wMi4wMCNXZWxsIHBsdWdnaW5nIHNlcnZpY2VzIzcxLjE0LjExLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEyLjAwLjAwI1dlbGwgc2l0ZSByZXN0b3JhdGlvbiM3MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMi4wMS4wMCNXZWxsIGNsZWFuaW5nIG9yIHN3YWJiaW5nIHNlcnZpY2VzIzcxLjE0LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEyLjAyLjAwI1dlbGwgc2l0ZSByZXN0b3JhdGlvbiBzZXJ2aWNlcyM3MS4xNC4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNS4wMC4wMC4wMCNPaWwgYW5kIGdhcyBkYXRhIG1hbmFnZW1lbnQgYW5kIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDAuMDAjT2lsZmllbGQgZGF0YSBjb21tdW5pY2F0aW9uIHNlcnZpY2VzIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjAxLjAwI0xvZyBkYXRhIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM3MS4xNS4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wMi4wMCNMb2cgZ3JhcGhpY3MgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjAzLjAwI1JlYWwgdGltZSB3ZWxsIGRhdGEgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xNS4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wNC4wMCNTYXRlbGxpdGUgd2VsbCBkYXRhIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM3MS4xNS4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wNS4wMCNXZWxsIGRhdGEgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjAwLjAwI09pbGZpZWxkIGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wMS4wMCNPaWxmaWVsZCBhc3NldCBkYXRhIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTUuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDIuMDAjT2lsZmllbGQgZGF0YSBtaW5pbmcgc2VydmljZXMjNzEuMTUuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDMuMDAjTG9nIGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wNC4wMCNPaWxmaWVsZCBtYXBwaW5nIGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wNS4wMCNTZWlzbWljIGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMi4wMC4wMCNPaWxmaWVsZCBlY29ub21pYyBhbmQgcmlzayBtb2RlbCBzZXJ2aWNlcyM3MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMi4wMS4wMCNPaWxmaWVsZCBidWRnZXRpbmcgc2VydmljZXMjNzEuMTUuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTIuMDIuMDAjT2lsZmllbGQgY2FwaXRhbCBwbGFubmluZyBzZXJ2aWNlcyM3MS4xNS4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMi4wMy4wMCNPaWxmaWVsZCBkZWNpc2lvbiB0cmVlIHNlcnZpY2VzIzcxLjE1LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjAwLjAwI09pbGZpZWxkIGludGVycHJldGF0aW9uIHNlcnZpY2VzIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjAxLjAwI09pbGZpZWxkIGJ1YmJsZSBtYXAgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDIuMDAjT2lsZmllbGQgY2FzZSBzdHVkaWVzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjAzLjAwI09pbGZpZWxkIGRlY2xpbmUgYW5hbHlzaXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDQuMDAjT2lsZmllbGQgZmllbGQgc3R1ZGllcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wNS4wMCNPaWxmaWVsZCBmcmFjdHVyaW5nIGludGVycHJldGF0aW9uIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA2LjAwI0dlb2xvZ3kgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDcuMDAjR2VvcGh5c2ljcyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wOC4wMCNHcmF2ZWwgcGFjayBpbnRlcnByZXRhdGlvbiBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wOS4wMCNPaWxmaWVsZCBncmlkIG1hcHBpbmcgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTAuMDAjT2lsZmllbGQgbWFwcGluZyBvciB2aXN1YWxpemF0aW9uIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjExLjAwI1BldHJvcGh5c2ljcyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xMi4wMCNSZXNlcnZvaXIgZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTMuMDAjUmVzZXJ2b2lyIG1vZGVsaW5nIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjE0LjAwI1Jlc2Vydm9pciBzaW11bGF0aW9uIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjE1LjAwI1JvY2sgbWVjaGFuaWNzIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjAwLjAwI1dlbGwgc2VydmljZSBlbmdpbmVlcmluZyM3MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wMS4wMCNXZWxsIGNlbWVudGluZyBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjAyLjAwI0NvaWxlZCB0dWJpbmcgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wMy4wMCNXZWxsIGRyaWxsaW5nIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDQuMDAjV2VsbCBmcmFjdHVyaW5nIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDUuMDAjTWF0cml4IHN0aW11bGF0aW9uIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDYuMDAjV2VsbCBzYW5kIGNvbnRyb2wgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4wMC4wMC4wMCNPaWwgYW5kIGdhcyB3ZWxsIHByb2plY3QgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wMC4wMCNPaWxmaWVsZCBNb2RlbGluZyBTZXJ2aWNlcyM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wMS4wMCNPaWxmaWVsZCBjb21wbGV0aW9uIG1vZGVscyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wMi4wMCNPaWxmaWVsZCBkcmlsbGluZyBtb2RlbHMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDMuMDAjT2lsZmllbGQgZWNvbm9taWMgbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjA0LjAwI09pbGZpZWxkIGZpZWxkIGRldmVsb3BtZW50IG1vZGVscyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wNS4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIG1vZGVscyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wNi4wMCNPaWxmaWVsZCByaXNrIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDAuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBlbmdpbmVlcmluZyBtYW5hZ2VtZW50IzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjAxLjAwI09pbGZpZWxkIGFydGlmaWNpYWwgbGlmdCBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wMi4wMCNFbmhhbmNlZCBvaWwgcmVjb3Zlcnkgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDMuMDAjV2VsbCBpbmplY3Rpb24gc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDQuMDAjT2lsZmllbGQgbm9kYWwgYW5hbHlzaXMgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDUuMDAjV2VsbCBwZXJmb3JhdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wNi4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIGNoZW1pc3RyeSBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wNy4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDguMDAjT2lsZmllbGQgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA5LjAwI1dlbGwgc3RpbXVsYXRpb24gc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMTAuMDAjVW5kZXJncm91bmQgZ2FzIHN0b3JhZ2Ugc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMTEuMDAjT2lsZmllbGQgd2F0ZXIgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wMC4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIG9wZXJhdGlvbnMgbWFuYWdlbWVudCM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wMS4wMCNPaWxmaWVsZCBob3Qgb2lsaW5nIHNlcnZpY2UjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDIuMDAjT2lsZmllbGQgbGVhc2Ugb3BlcmF0aW9ucyM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wMy4wMCNPaWxmaWVsZCBsb2dnaW5nIHNlcnZpY2VzIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjA0LjAwI09pbGZpZWxkIHBhcmFmZmluIGN1dHRpbmcgc2VydmljZSM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wNS4wMCNPaWxmaWVsZCBwbGFubmluZyBzZXJ2aWNlcyM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wNi4wMCNPaWxmaWVsZCBwcm9jZXNzaW5nIHNlcnZpY2VzIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjA3LjAwI1dlbGwgdGVzdGluZyBzZXJ2aWNlcyM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wMC4wMCNPaWxmaWVsZCBwcm9qZWN0IG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDEuMDAjT2lsZmllbGQgYXVkaXRzIG9yIGluc3BlY3Rpb24gc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDIuMDAjT2lsZmllbGQgZW1lcmdlbmN5IHJlc3BvbnNlIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjAzLjAwI09pbGZpZWxkIGZpZWxkIGRldmVsb3BtZW50IHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjA0LjAwI09pbGZpZWxkIHBlcmZvcm1hbmNlIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDUuMDAjT2lsZmllbGQgcmVwb3J0aW5nIHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjA2LjAwI09pbGZpZWxkIHN1Y2Nlc3Npb24gcGxhbiBvciBoYW5kb3ZlciBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wNy4wMCNPaWxmaWVsZCB0cmFpbmluZyBtYXRyaXggc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDguMDAjV2VsbCBzaXRlIGxvZ2lzdGljcyBvciBwcm9jdXJlbWVudCBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wMC4wMCNXZWxsIGNvbnN0cnVjdGlvbiBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjAxLjAwI0NvaWxlZCB0dWJpbmcgZHJpbGxpbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDIuMDAjV2VsbCBjb21wbGV0aW9uIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjAzLjAwI0RlYWRtYW4gYW5jaG9yIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjA0LjAwI1dlbGwgZHJpbGxpbmcgZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDUuMDAjV2VsbCBzaXRlIHBpdCBsaW5pbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDYuMDAjV2VsbCBwbHVnIG9yIGFiYW5kb25tZW50IHNlcnZpY2UjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDcuMDAjV2VsbCBwdWxsaW5nIHVuaXQgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDguMDAjU2hvcmViYXNlIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjA5LjAwI1Rlc3QgcGl0IGxpbmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4xMC4wMCNXZWxsIHNpdGUgdmFjdXVtIHRydWNrIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjExLjAwI1VuZGVyYmFsYW5jZWQgYXBwbGljYXRpb25zIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjEyLjAwI1dlbGwgd29ya292ZXIgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMTMuMDAjV2VsbCBmYWJyaWNhdGlvbiBvciBjb25zdHJ1Y3Rpb24gc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDAuMDAjV2VsbCBzaXRlIG9wZXJhdGlvbnMgc2VydmljZXMjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDEuMDAjV2VsbCBzaXRlIGVsZWN0cmljYWwgb3IgaW5zdHJ1bWVudGF0aW9uIHNlcnZpY2VzIzcxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE1LjAyLjAwI1dlbGwgc2l0ZSBoZWF2eSBlcXVpcG1lbnQgb3IgY3JhbmUgc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDMuMDAjV2VsbCBzaXRlIGluc3BlY3Rpb24gb3IgZXF1aXBtZW50IHRlc3Rpbmcgc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDQuMDAjV2VsbCBzaXRlIGluc3RydW1lbnQgYW5kIG1ldGVyIHNlcnZpY2VzIzcxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE1LjA1LjAwI1dlbGwgc2l0ZSB2YWx2ZSBvciB2YWx2ZSBwYXJ0IHNlcnZpY2VzIzcxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcyLjAwLjAwLjAwLjAwI0J1aWxkaW5nIGFuZCBDb25zdHJ1Y3Rpb24gYW5kIE1haW50ZW5hbmNlIFNlcnZpY2VzIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjAwLjAwLjAwI0J1aWxkaW5nIGNvbnN0cnVjdGlvbiBhbmQgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgYW5kIHJlcGFpciBzZXJ2aWNlcyM3Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wMC4wMCNCdWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjAxLjAwI0hhbmR5bWFuIHNlcnZpY2VzIzcyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjAyLjAwI1NjYWZmb2xkaW5nIHNlcnZpY2VzIzcyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjAzLjAwI1JpZ2dpbmcgc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDQuMDAjRGlzYXN0ZXIgcHJvb2Zpbmcgb3IgY29udGluZ2VuY3kgc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDUuMDAjTG9ja3NtaXRoIHNlcnZpY2VzIzcyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjAwLjAwI1Jvb2ZpbmcgYW5kIHNpZGluZyBhbmQgc2hlZXQgbWV0YWwgd29yayM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wMS4wMCNSb29maW5nIGluc3RhbGxhdGlvbiBvciByZXBhaXIjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDIuMDAjU2t5bGlnaHQgaW5zdGFsbGF0aW9uIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjAzLjAwI0d1dHRlciBvciBkb3duc3BvdXQgc2VydmljZXMjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDQuMDAjQXJjaGl0ZWN0dXJhbCBzaGVldCBtZXRhbCB3b3JrIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjA1LjAwI0NlaWxpbmcgZXJlY3Rpb24gb3IgcmVwYWlyIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjA2LjAwI0NodXRlIGluc3RhbGxhdGlvbiM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wNy4wMCNTaWRpbmcgaW5zdGFsbGF0aW9uIG9yIHJlcGFpciM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNy4wMC4wMCNDb25jcmV0ZSB3b3JrIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAxLjAwI0V4dGVyaW9yIGNvbmNyZXRlIG9yIHN0dWNjbyBzZXJ2aWNlcyM3Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNy4wMi4wMCNHcm91dGluZyBzZXJ2aWNlcyM3Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNy4wMy4wMCNTaWRld2FsayBvciBjdXJiIGNvbnN0cnVjdGlvbiM3Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNy4wNC4wMCNGb3VuZGF0aW9uIG9yIHNsYWIgd29yayM3Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOC4wMC4wMCNFeHRlcmlvciBjbGVhbmluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOC4wMS4wMCNTYW5kYmxhc3RpbmcjNzIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTguMDIuMDAjSGlnaCBwcmVzc3VyZSB3YXRlciBibGFzdGluZyM3Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOC4wMy4wMCNTdGVhbSBjbGVhbmluZyM3Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOS4wMC4wMCNJbnRlcmlvciBmaW5pc2hpbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTkuMDEuMDAjSW50ZXJpb3IgZGVzaWduIG9yIGRlY29yYXRpbmcjNzIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTkuMDIuMDAjUGxhc3RlcmluZyBvciBkcnl3YWxsIzcyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE5LjAzLjAwI0ZpbmlzaCBjYXJwZW50cnkgb3IgY2FiaW5ldHJ5IzcyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjAwLjAwI0NvYXRpbmcgYW5kIGNhdWxraW5nIGFuZCB3ZWF0aGVyIGFuZCB3YXRlciBhbmQgZmlyZXByb29maW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjAxLjAwI0NhdWxraW5nIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjAyLjAwI1BsYXN0aWMgZW5jYXNlbWVudCBvciBjb2F0aW5nIG9mIHN0cnVjdHVyYWwgbWF0ZXJpYWxzIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjAzLjAwI0NvYXRpbmcgb3IgZ2xhemluZyBvZiBtZXRhbCBvciB3b29kIG9yIGNvbmNyZXRlIHN0cnVjdHVyYWwgbWF0ZXJpYWxzIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjA0LjAwI0RhbXBwcm9vZmluZyM3Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wNS4wMCNGaXJlcHJvb2Zpbmcgb2YgYnVpbGRpbmdzIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjA2LjAwI1dyYXBwaW5nIG9mIHBpcGVzIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjAwLjAwI1Blc3QgY29udHJvbCM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wMS4wMCNCaXJkIHByb29maW5nIHNlcnZpY2VzIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjAyLjAwI1Rlcm1pdGUgY29udHJvbCBzZXJ2aWNlcyM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wMy4wMCNFeHRlcm1pbmF0aW9uIG9yIGZ1bWlnYXRpb24gc2VydmljZXMjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDQuMDAjU3RydWN0dXJhbCBwZXN0IGNvbnRyb2wjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDUuMDAjQW5pbWFsIHRyYXBwaW5nIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjA2LjAwI1JvZGVudCBjb250cm9sIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjAwLjAwI0VsZWN0cmljYWwgc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDEuMDAjRWxlY3RyaWMgcG93ZXIgc3lzdGVtcyBpbnN0YWxsYXRpb24gb3Igc2VydmljZSM3Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wMi4wMCNFbGVjdHJvbmljIGNvbnRyb2xzIGluc3RhbGxhdGlvbiM3Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wMy4wMCNDb21tdW5pY2F0aW9uIGVxdWlwbWVudCBpbnN0YWxsYXRpb24jNzIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDQuMDAjU2FmZXR5IG9yIHNlY3VyaXR5IHN5c3RlbXMgaW5zdGFsbGF0aW9uIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjA1LjAwI0NhYmxpbmcgc2VydmljZSM3Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wMC4wMCNQbHVtYmluZyBhbmQgaGVhdGluZyBhbmQgYWlyIGNvbmRpdGlvbmluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wMS4wMCNCb2lsZXIgaW5zdGFsbGF0aW9uIG9yIGFkanVzdG1lbnQgb3IgbWFpbnRlbmFuY2Ugb3IgcmVwYWlyIHNlcnZpY2VzIzcyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjAyLjAwI0hlYXRpbmcgc3lzdGVtcyBpbnN0YWxsYXRpb24gcmVwYWlyIG9yIG1haW50ZW5hbmNlIzcyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjAzLjAwI1BsdW1iaW5nIHN5c3RlbSBjb25zdHJ1Y3Rpb24jNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDQuMDAjUGx1bWJpbmcgc3lzdGVtIG1haW50ZW5hbmNlIG9yIHJlcGFpciM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wNS4wMCNBaXIgY29uZGl0aW9uaW5nIGluc3RhbGxhdGlvbiBvciBtYWludGVuYW5jZSBvciByZXBhaXIgc2VydmljZXMjNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDAuMDAjUGFpbnRpbmcgYW5kIHBhcGVyIGhhbmdpbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDEuMDAjRXh0ZXJpb3IgcGFpbnRpbmcgc2VydmljZXMjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDIuMDAjSW50ZXJpb3IgcGFpbnRpbmcgc2VydmljZXMjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDMuMDAjV2FsbGNvdmVyaW5nIHNlcnZpY2VzIzcyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI0LjA0LjAwI0luZHVzdHJpYWwgb3Igc3BlY2lhbGl6ZWQgcGFpbnQgYXBwbGljYXRpb24gZm9yIGFpcmNyYWZ0IG9yIHNoaXAgb3IgYnJpZGdlIzcyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI0LjA1LjAwI1BhdmVtZW50IG1hcmtpbmcgc2VydmljZXMjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDAuMDAjTWFzb25yeSBhbmQgc3RvbmV3b3JrIGFuZCB0aWxlIHNldHRpbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDEuMDAjQnJpY2tsYXlpbmcjNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDIuMDAjQ2hpbW5leSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDMuMDAjTWFyYmxlIG9yIHN0b25lIG9yIHRpbGUgaW5zdGFsbGF0aW9uIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA0LjAwI1JldGFpbmluZyB3YWxsIGNvbnN0cnVjdGlvbiM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wNS4wMCNGcmVzY28gd29yayM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wNi4wMCNBY291c3RpY2FsIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA3LjAwI0luc3VsYXRpbmcgbWF0ZXJpYWwgaW5zdGFsbGF0aW9uIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA4LjAwI1Jlc3RvcmF0aW9uIG9mIG1hc29ucnkgb3Igc3RvbmV3b3JrIG9yIHRpbGUjNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjYuMDAuMDAjQ2FycGVudHJ5IzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI2LjAxLjAwI1JvdWdoIGNhcnBlbnRyeSM3Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNi4wMi4wMCNXaW5kb3dzIG9yIGRvb3Igb3IgZml4dHVyZSBpbnN0YWxsYXRpb24jNzIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjYuMDMuMDAjRnVybml0dXJlIGluc3RhbGxhdGlvbiM3Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNy4wMC4wMCNGbG9vcmluZyBzZXJ2aWNlIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI3LjAxLjAwI0Zsb29yIHNoZWF0aGluZyBvciBsYXlpbmcgb3IgaW5zdGFsbGF0aW9uIG9yIGZpbmlzaGluZyM3Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNy4wMi4wMCNGbG9vciBjb3ZlcmluZyBpbnN0YWxsYXRpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjcuMDMuMDAjRmxvb3IgY2xlYW5pbmcgc2VydmljZXMjNzIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjguMDAuMDAjUmVmdXJiaXNoaW5nIHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI4LjAxLjAwI1Jlbm92YXRpb24gb2YgYnVpbGRpbmdzIG9yIGxhbmRtYXJrcyBvciBtb251bWVudHMjNzIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjguMDIuMDAjUmVzdG9yYXRpb24gb2YgYnVpbGRpbmdzIG9yIGxhbmRtYXJrcyBvciBtb251bWVudHMjNzIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjkuMDAuMDAjR3JvdW5kcyBtYWludGVuYW5jZSBzZXJ2aWNlcyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOS4wMS4wMCNTbm93IFJlbW92YWwgU2VydmljZXMjNzIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjkuMDIuMDAjTGFuZHNjYXBpbmcgc2VydmljZXMjNzIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDAuMDAjU2l0ZSBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wMS4wMCNMYW5kIGNsZWFyaW5nIHNlcnZpY2VzIzcyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjMwLjAyLjAwI0xhbmQgbGV2ZWxsaW5nIHNlcnZpY2VzIzcyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjMwLjAzLjAwI0RlbW9saXRpb24gc2VydmljZXMjNzIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDQuMDAjRGlnZ2luZyBzZXJ2aWNlcyM3Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4wMC4wMC4wMCNHZW5lcmFsIGJ1aWxkaW5nIGNvbnN0cnVjdGlvbiM3Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNS4wMC4wMCNQcml2YXRlIGhvdXNpbmcjNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTUuMDEuMDAjU2luZ2xlIGZhbWlseSBob3VzaW5nIGNvbnN0cnVjdGlvbiBvciByZW1vZGVsaW5nIG9yIHJlcGFpciM3Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNS4wMi4wMCNSZXNpZGVudGlhbCBtdWx0aSB0ZW5hbnQgY29uc3RydWN0aW9uIG9yIHJlbW9kZWxpbmcgb3IgcmVwYWlyIzcyLjExLjE1LjAwLjAwCi11bnNwc2M3IzcyLjExLjE2LjAwLjAwI0luZHVzdHJpYWwgcGxhbnRzIzcyLjExLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE2LjAxLjAwI0NvbW1lcmNpYWwgb2ZmaWNlIGJ1aWxkaW5nIGNvbnN0cnVjdGlvbiBvciByZW1vZGVsaW5nIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIzcyLjExLjE2LjAwLjAwCi11bnNwc2M3IzcyLjExLjE2LjAyLjAwI0luZHVzdHJpYWwgYnVpbGRpbmdzIG9yIHdhcmVob3VzZSBjb25zdHJ1Y3Rpb24gb3IgcmVtb2RlbGluZyBvciByZW5vdmF0aW9uIG9yIHJlcGFpciM3Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNy4wMC4wMCNQdWJsaWMgdXNlIGJ1aWxkaW5ncyM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNy4wMS4wMCNTcGVjaWFsaXplZCBwdWJsaWMgdXNlIGJ1aWxkaW5nIGNvbnN0cnVjdGlvbiM3Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNy4wMi4wMCNOb24gcmVzaWRlbnRpYWwgYWdyaWN1bHR1cmFsIGJ1aWxkaW5nIGNvbnN0cnVjdGlvbiM3Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNy4wMy4wMCNTZXJ2aWNlIHN0YXRpb24gb3Igc2VydmljZSBnYXJhZ2UgY29uc3RydWN0aW9uIzcyLjExLjE3LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjA0LjAwI0NvbW1lcmNpYWwgYnVpbGRpbmcgY29uc3RydWN0aW9uIG9yIGVyZWN0aW9uIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIzcyLjExLjE3LjAwLjAwCi11bnNwc2M3IzcyLjExLjE4LjAwLjAwI0NvbW1lcmNpYWwgYnVpbGRpbmdzIzcyLjExLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE4LjAxLjAwI1Jlc3RhdXJhbnQgY29uc3RydWN0aW9uIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIG9yIG1haW50ZW5hbmNlIzcyLjExLjE4LjAwLjAwCi11bnNwc2M3IzcyLjExLjE4LjAyLjAwI1Nob3BwaW5nIGNlbnRlciBvciBzdG9yZSBjb25zdHJ1Y3Rpb24gb3IgcmVub3ZhdGlvbiBvciByZXBhaXIgb3IgbWFpbnRlbmFuY2UjNzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDMuMDAjT2ZmaWNlIGJ1aWxkaW5nIGNvbnN0cnVjdGlvbiBvciByZW5vdmF0aW9uIG9yIHJlcGFpciBvciBtYWludGVuYW5jZSM3Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOC4wNC4wMCNCYXRocm9vbSByZW5vdmF0aW9uIzcyLjExLjE4LjAwLjAwCi11bnNwc2M3IzcyLjExLjE5LjAwLjAwI0xhbmQgYW5kIGJ1aWxkaW5nIHNpdGUgcHJlcGFyYXRpb24jNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTkuMDEuMDAjTGFuZCBjbGVhcmluZyM3Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOS4wMi4wMCNMYW5kIGxldmVsaW5nIzcyLjExLjE5LjAwLjAwCi11bnNwc2M3IzcyLjExLjE5LjAzLjAwI0J1aWxkaW5nIGRlbW9saXRpb24jNzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMDAuMDAuMDAjSW5mcmFzdHJ1Y3R1cmUgY29uc3RydWN0aW9uIGFuZCBtYWludGVuYW5jZSM3Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNS4wMC4wMCNIaWdod2F5cyBhbmQgc3RyZWV0cyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNS4wMS4wMCNIaWdod2F5IG9yIHN0cmVldCBvciByb2FkIGNvbnN0cnVjdGlvbiM3Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNS4wMi4wMCNIaWdod2F5IG9yIHN0cmVldCBvciByb2FkIHN1cmZhY2luZyBvciBwYXZpbmcgb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTUuMDMuMDAjSGlnaHdheSBvciBzdHJlZXQgZ3VhcmRyYWlsIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNS4wNC4wMCNIaWdod2F5IG9yIHN0cmVldCBzaWduIG9yIHRyYWZmaWMgc2lnbmFsIGluc3RhbGxhdGlvbiM3Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wMC4wMCNXYXRlciBhbmQgc2V3ZXIgYW5kIHV0aWxpdHkgbGluZXMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDEuMDAjRWxlY3RyaWMgcG93ZXIgbGluZSBjb25zdHJ1Y3Rpb24gb3IgaW5zdGFsbGF0aW9uIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjAyLjAwI0NhYmxlIGxheWluZyM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wMy4wMCNBcXVlZHVjdCBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDQuMDAjU2V3ZXIgbGluZSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDUuMDAjV2F0ZXIgbWFpbiBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDYuMDAjVm9pY2Ugb3IgZGF0YSBsaW5lIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNy4wMCNXYXRlciBpbmR1c3RyaWFsIHBsYW50IGNvbnN0cnVjdGlvbiM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wMC4wMCNEYW1zIGFuZCBtYXJpbmUgY29uc3RydWN0aW9uIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjAxLjAwI0RhbSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDIuMDAjUGllciBvciBkb2NrIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wMy4wMCNIYXJib3Igb3IgYnJlYWt3YXRlciBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDQuMDAjRHlrZSBvciBsZXZlZSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDUuMDAjRHJlZGdpbmcgb3IgY2Fpc3NvbiBkcmlsbGluZyM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNi4wMCNDYW5hbCBvciBkcmFpbmFnZSBvciBpcnJpZ2F0aW9uIHN5c3RlbSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDcuMDAjUG9uZCBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTguMDAuMDAjUmFpbHJvYWRzIGFuZCBzdWJ3YXlzIGFuZCB0cmFtd2F5cyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wMS4wMCNDdXR0aW5nIG9mIHJpZ2h0IG9mIHdheSM3Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wMi4wMCNSYWlscm9hZCBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTguMDMuMDAjU3Vid2F5IGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wNC4wMCNUcmFtIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOS4wMC4wMCNBaXJwb3J0cyBhbmQgYXZpYXRpb24jNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTkuMDEuMDAjQWlycG9ydCBydW53YXkgY29uc3RydWN0aW9uIzcyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE5LjAyLjAwI0FpcnBvcnQgdGVybWluYWwgY29uc3RydWN0aW9uIzcyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE5LjAzLjAwI0hlbGlwYWQgY29uc3RydWN0aW9uIzcyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEyLjIwLjAwLjAwI0JyaWRnZXMgYW5kIHR1bm5lbHMgYW5kIHZpYWR1Y3RzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIwLjAxLjAwI0JyaWRnZSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjAuMDIuMDAjVHVubmVsIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMC4wMy4wMCNWaWFkdWN0IGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMS4wMC4wMCNDb25zdHJ1Y3Rpb24gcXVhbnRpdHkgc3VydmV5b3JzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIxLjAxLjAwI1dhdGVyIG9yIHdhc3Rld2F0ZXIgcXVhbnRpdHkgc3VydmV5b3JzIzcyLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIyLjAwLjAwI0NvbnN0cnVjdGlvbiBjb25zdWx0YW5jeSBzZXJ2aWNlcyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMi4wMS4wMCNTaXRlIHN1cGVydmlzaW9uIzcyLjEyLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIyLjAyLjAwI0luZHVzdHJpYWwgcGxhbnQgZGVzaWduIzcyLjEyLjIyLjAwLjAwCi11bnNwc2M3IzczLjAwLjAwLjAwLjAwI0luZHVzdHJpYWwgUHJvZHVjdGlvbiBhbmQgTWFudWZhY3R1cmluZyBTZXJ2aWNlcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4wMC4wMC4wMCNQbGFzdGljIGFuZCBjaGVtaWNhbCBpbmR1c3RyaWVzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjAwLjAwI1BldHJvY2hlbWljYWwgYW5kIHBsYXN0aWMgcHJvZHVjdGlvbiM3My4xMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wMS4wMCNQZXRyb2xldW0gcmVmaW5pbmcgc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDIuMDAjTmF0dXJhbCBnYXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wMy4wMCNPaWxzIG9yIGdyZWFzZXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wNC4wMCNDb2FsIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDUuMDAjUGxhc3RpY3Mgb3IgcmVzaW5zIG9yIGZpYmVycyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjA2LjAwI0NyZWRpdCBjYXJkIHByb2R1Y3Rpb24gb3IgZW1ib3NzaW5nIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjAwLjAwI0NoZW1pY2FscyBhbmQgZmVydGlsaXplcnMgcHJvZHVjdGlvbiM3My4xMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wMS4wMCNJbm9yZ2FuaWMgY2hlbWljYWxzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDIuMDAjU29kYSBhc2ggb3IgY2hsb3JpbmUgb3IgY2F1c3RpYyBzb2RhIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDMuMDAjSW5vcmdhbmljIGFjaWRzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDQuMDAjT3JnYW5pYyBjaGVtaWNhbCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjA1LjAwI0FjZXR5bGVuZSBvciBkZXJpdmF0aXZlcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjA2LjAwI0V0aHlsZW5lIG9yIGRlcml2YXRpdmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDcuMDAjRXRoYW5vbCBvciBtZXRoYW5vbCBvciBkZXJpdmF0aXZlcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjA4LjAwI0ZlcnRpbGl6ZXJzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDkuMDAjUG90YXNoIG1pbmluZyBvciBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjEwLjAwI1Blc3RpY2lkZSBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjExLjAwI1BhaW50cyBvciB2YXJuaXNoZXMgb3IgbGFjcXVlcnMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4xMi4wMCNTb2FwIG9yIGNsZWFuaW5nIHByZXBhcmF0aW9ucyBvciBwZXJmdW1lcyBvciBjb3NtZXRpY3MgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4xMy4wMCNTb2x2ZW50cyBvciBnbHljb2xzIG9yIGRldGVyZ2VudHMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4xNC4wMCNGZXJtZW50cyBvciBlbnp5bWVzIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE3LjAwLjAwI1BoYXJtYWNldXRpY2FsIHByb2R1Y3Rpb24jNzMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTcuMDEuMDAjRHJ1Z3Mgb3IgbWVkaWNpbmUgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNy4wMC4wMAotdW5zcHNjNyM3My4xMC4xNy4wMi4wMCNWYWNjaW5lcyBvciBzZXJhIG9yIGFudGliaW90aWNzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTcuMDMuMDAjUGFyYXBoYXJtYWNldXRpY2FsIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTguMDAuMDAjQmlvY2hlbWljYWwgYW5kIGJpb3RlY2hub2xvZ3kgcHJvZHVjdGlvbiM3My4xMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xOC4wMS4wMCNCaW9tYXNzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTguMDIuMDAjQmlvcHJvdGVpbiBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE4LjAwLjAwCi11bnNwc2M3IzczLjEwLjE5LjAwLjAwI1J1YmJlciBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE5LjAxLjAwI1J1YmJlciBtaWxsaW5nIHNlcnZpY2VzIzczLjEwLjE5LjAwLjAwCi11bnNwc2M3IzczLjEwLjE5LjAyLjAwI1J1YmJlciB0aXJlcyBvciB0dWJlcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE5LjAwLjAwCi11bnNwc2M3IzczLjEwLjE5LjAzLjAwI1J1YmJlciBvciBwbGFzdGljIGZvb3R3ZWFyIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMDAuMDAuMDAjV29vZCBhbmQgcGFwZXIgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wMC4wMCNXb29kIHByb2Nlc3NpbmcjNzMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDEuMDAjU2F3bWlsbGluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wMi4wMCNWZW5lZXIgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wMy4wMCNXb29kIGJhc2UgcGFuZWxzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDQuMDAjV29vZGVuIGNvbnRhaW5lcnMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wNS4wMCNGdXJuaXR1cmUgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wNi4wMCNDb3JrIHByb2R1Y3RzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDcuMDAjQ2FuZSBvciB3aWNrZXJ3YXJlIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTYuMDAuMDAjUHVscCBhbmQgcGFwZXIgcHJvY2Vzc2luZyM3My4xMS4wMC4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wMS4wMCNQdWxwIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTYuMDIuMDAjUGFwZXIgb3IgcGFwZXIgYm9hcmQgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMS4xNi4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wMy4wMCNIYXJkYm9hcmQgb3IgZmliZXJib2FyZCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjExLjE2LjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjA0LjAwI1BhcGVyIHByb2R1Y3Rpb24gb3IgcmVjeWNsaW5nIHNlcnZpY2VzIzczLjExLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjAwLjAwLjAwI01ldGFsIGFuZCBtaW5lcmFsIGluZHVzdHJpZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDAuMDAjTWV0YWwgc21lbHRpbmcgYW5kIHJlZmluaW5nIGFuZCBmb3JtaW5nIHByb2Nlc3NlcyM3My4xMi4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wMS4wMCNGZXJyb3VzIGFsbG95IHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDIuMDAjQmFzaWMgbWV0YWwgY29tYmluYXRpb24gcHJvY2Vzc2VzIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjAzLjAwI1JlZnJhY3RvcnMgc2VydmljZXMgZm9yIGlyb24gb3Igc3RlZWwgcHJvZHVjdGlvbiM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wNC4wMCNJcm9uIG9yIHN0ZWVsIG1ha2luZyBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wNS4wMCNJcm9uIG9yIHN0ZWVsIGZvcmdpbmcgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDYuMDAjUHJlIGZpbmlzaGluZyBpcm9uIG9yIHN0ZWVsIHByb2Nlc3NlcyBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wNy4wMCNGaW5pc2hpbmcgbWV0YWwgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wOC4wMCNTbWVsdGluZyBtZXRhbCBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wOS4wMCNSZWZpbmluZyBtZXRhbCBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wMC4wMCNNZXRhbCBmaW5pc2hpbmcjNzMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDEuMDAjTWV0YWwgY3V0dGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wMi4wMCNCbGFja3NtaXRoIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjAzLjAwI01ldGFsIGhlYXRpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDQuMDAjTWV0YWwgcGxhdGluZyBvciByZXBsYXRpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDUuMDAjTWV0YWwgcm9sbGluZyBvcGVyYXRpb25zIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA2LjAwI01ldGFsIGZvcmdpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDcuMDAjTWV0YWwgZHJhd2luZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wOC4wMCNNZXRhbCBleHRydWRpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDkuMDAjU3VyZmFjZSBtZXRhbCBmaW5pc2hpbmcgb3IgdHJlYXRtZW50IHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjEwLjAwI0hvcnNlc2hvZWluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4xMS4wMCNUaW5zbWl0aGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4xMi4wMCNSZWJhYmJpdGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4xMy4wMCNNZXRhbCBjYXN0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE3LjAwLjAwI1dlbGRpbmcgYW5kIGJyYXppbmcgYW5kIHNvbGRlcmluZyM3My4xMi4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xNy4wMS4wMCNXZWxkaW5nIHNlcnZpY2VzIzczLjEyLjE3LjAwLjAwCi11bnNwc2M3IzczLjEyLjE3LjAyLjAwI0JyYXppbmcgc2VydmljZXMjNzMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDMuMDAjU29sZGVyaW5nIHNlcnZpY2VzIzczLjEyLjE3LjAwLjAwCi11bnNwc2M3IzczLjEyLjE3LjA0LjAwI0Nhc3Rpbmcgc2VydmljZXMjNzMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDAuMDAjTm9uIG1ldGFsbGljIG1pbmVyYWwgcHJvZHVjdHMgaW5kdXN0cnkgc2VydmljZXMjNzMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDEuMDAjUG90dGVyeSBvciBjaGluYSBvciBlYXJ0aGVud2FyZSBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjAyLjAwI0dsYXNzIG9yIGdsYXNzIHByb2R1Y3RzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDMuMDAjU3RydWN0dXJhbCBjbGF5IHByb2R1Y3RzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDQuMDAjQ2VtZW50IG9yIGxpbWUgb3IgcGxhc3RlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjA1LjAwI0NvbmNyZXRlIG9yIGFnZ3JlZ2F0ZXMgb3Igc3RvbmUgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wNi4wMCNBYnJhc2l2ZXMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wNy4wMCNBc2Jlc3RvcyBwcm9kdWN0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjAwLjAwLjAwI0Zvb2QgYW5kIGJldmVyYWdlIGluZHVzdHJpZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDAuMDAjQmV2ZXJhZ2UgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wMS4wMCNTcGlyaXRzIGRpc3RpbGxpbmcgb3IgYmxlbmRpbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDIuMDAjV2luZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjAzLjAwI0JyZXdlcnkgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wNC4wMCNOb24gYWxjb2hvbGljIGZydWl0IGJhc2VkIGJldmVyYWdlIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDUuMDAjV2F0ZXIgYmV2ZXJhZ2VzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDYuMDAjSW5mdXNlZCBiZXZlcmFnZXMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wNy4wMCNDb2ZmZWUgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wOC4wMCNUZWEgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wMC4wMCNNZWF0IGFuZCBwb3VsdHJ5IGFuZCBzZWFmb29kIHByb2Nlc3NpbmcjNzMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDEuMDAjTWVhdCBwcm9kdWN0cyBvciBieSBwcm9kdWN0cyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjAyLjAwI0Zpc2ggb3IgZmlzaCBwcm9kdWN0cyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjAzLjAwI1BvdWx0cnkgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wNC4wMCNNZWF0IGh5Z2llbmUgb3IgaW5zcGVjdGlvbiBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wNS4wMCNNZWF0IHBsYW50IG9wZXJhdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA2LjAwI1NsYXVnaHRlciBob3VzZXMgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDcuMDAjQnV0Y2hlciBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wOC4wMCNDb2xkIHN0b3JhZ2Ugc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTcuMDAuMDAjRnJ1aXRzIGFuZCB2ZWdldGFibGVzIHByb2Nlc3NpbmcjNzMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTcuMDEuMDAjRnJ1aXQgb3IgdmVnZXRhYmxlIGNsZWFuaW5nIHNlcnZpY2VzIzczLjEzLjE3LjAwLjAwCi11bnNwc2M3IzczLjEzLjE3LjAyLjAwI0ZydWl0IG9yIHZlZ2V0YWJsZSBzcHJheWluZyBzZXJ2aWNlcyM3My4xMy4xNy4wMC4wMAotdW5zcHNjNyM3My4xMy4xNy4wMy4wMCNGcnVpdCBvciB2ZWdldGFibGUgcGFja2luZyBzZXJ2aWNlcyM3My4xMy4xNy4wMC4wMAotdW5zcHNjNyM3My4xMy4xOC4wMC4wMCNEYWlyeSBhbmQgZWdncyBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAxLjAwI01pbGsgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOC4wMC4wMAotdW5zcHNjNyM3My4xMy4xOC4wMi4wMCNFZ2cgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOC4wMC4wMAotdW5zcHNjNyM3My4xMy4xOC4wMy4wMCNDaGVlc2UgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOC4wMC4wMAotdW5zcHNjNyM3My4xMy4xOC4wNC4wMCNCdXR0ZXIgb3IgY3JlYW0gcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOC4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wMC4wMCNHcmFpbnMgYW5kIHN1Z2FyIGFuZCBvaWxzIGFuZCBmYXQgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wMS4wMCNNaWxsaW5nIHNlcnZpY2VzIzczLjEzLjE5LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjAyLjAwI0NlcmVhbCBwcm9kdWN0cyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE5LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjAzLjAwI1N1Z2FyIG9yIHN1Z2FyIHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDQuMDAjVmVnZXRhYmxlIG9pbHMgb3IgZmF0cyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE5LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjA1LjAwI1NwaWNlIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDYuMDAjQmFrZXJ5IHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMDAuMDAuMDAjRmliZXJzIGFuZCB0ZXh0aWxlcyBhbmQgZmFicmljIGluZHVzdHJpZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDAuMDAjRmliZXIgcHJvZHVjdGlvbiM3My4xNC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wMS4wMCNSYXlvbiBvciBhY2V0YXRlIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDIuMDAjR2xhc3MgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wMy4wMCNTaWxrIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDQuMDAjQ290dG9uIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDUuMDAjV29vbCBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjA2LjAwI1BvbHllc3RlciBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjA3LjAwI1BvbHlhbWlkZSBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjA4LjAwI0FjcnlsaWMgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNi4wMC4wMCNUaHJlYWQgYW5kIHlhcm4gcHJvY2Vzc2luZyM3My4xNC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNC4xNi4wMS4wMCNUaHJlYWQgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xNC4xNi4wMC4wMAotdW5zcHNjNyM3My4xNC4xNi4wMi4wMCNZYXJuIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDAuMDAjRmFicmljcyBhbmQgbGVhdGhlciBwcm9kdWN0aW9uIzczLjE0LjAwLjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjAxLjAwI0Jyb2FkIHdvdmVuIGZhYnJpY3MgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wMi4wMCNOYXJyb3cgd292ZW4gZmFicmljcyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjAzLjAwI0tuaXR3ZWFyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDQuMDAjQ2FycGV0IG9yIHJ1ZyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjA1LjAwI0NvcmRhZ2Ugb3Igcm9wZSBvciB0d2luZSBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjA2LjAwI0R5ZWluZyBvciBwcmludGluZyBvciBmaW5pc2hpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDcuMDAjV292ZW4gc3VpdHMgb3IgY29hdHMgb3Igb3ZlcmNvYXRzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDguMDAjV292ZW4gb3V0ZXJ3ZWFyIGNsb3RoaW5nIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDkuMDAjRnVyIGRyZXNzaW5nIG9yIGR5ZWluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xMC4wMCNMZWF0aGVyIGZvb3R3ZWFyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTEuMDAjTGVhdGhlciBsdWdnYWdlIG9yIGhhbmRiYWdzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTIuMDAjTGVhdGhlciB0YW5uaW5nIG9yIGZpbmlzaGluZyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjEzLjAwI05vbndvdmVuIGZhYnJpYyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xNC4wMCNCcmFpZGVkIHlhcm4gb3IgZmFicmljIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjE1LjAwI0luZHVzdHJpYWwgc2V3aW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE1LjAwLjAwLjAwI01hbnVmYWN0dXJpbmcgc3VwcG9ydCBzZXJ2aWNlcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xNS4wMC4wMCNBc3NlbWJseSBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xNS4wMS4wMCNBc3NlbWJseSBsaW5lIHdvcmsjNzMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTUuMDIuMDAjSm9pbnQgc2VhbGluZyBzZXJ2aWNlcyM3My4xNS4xNS4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wMC4wMCNQYWNrYWdpbmcgc2VydmljZXMjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDEuMDAjQ2FubmluZyBwbGFudHMgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDIuMDAjUGFja2FnaW5nIG9mIGFncmljdWx0dXJhbCBieSBwcm9kdWN0cyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wMy4wMCNQYWNrYWdpbmcgb2Ygbm9uIGZvb2QgcHJvZHVjdHMgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDQuMDAjUGFja2FnaW5nIG9mIHBoYXJtYWNldXRpY2FscyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wNS4wMCNQb2ludCBvZiBwdXJjaGFzZSBkaXNwbGF5IHBhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wNi4wMCNNYW51YWwgaGFuZCBwYWNrYWdpbmcgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDcuMDAjTWFjaGluZSBhc3Npc3RlZCBwYWNrYWdpbmcgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTcuMDAuMDAjTWF0ZXJpYWwgdHJlYXRtZW50IzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE3LjAxLjAwI1dhdGVyIHByb29maW5nIG1hdGVyaWFsIHRyZWF0bWVudCBzZXJ2aWNlcyM3My4xNS4xNy4wMC4wMAotdW5zcHNjNyM3My4xNS4xNy4wMi4wMCNGaXJlIHByb3RlY3Rpb24gbWF0ZXJpYWwgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE1LjE3LjAwLjAwCi11bnNwc2M3IzczLjE1LjE3LjAzLjAwI0FudGljb3Jyb3Npb24gbWF0ZXJpYWwgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE1LjE3LjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjAwLjAwI0NvbnZlcnRpbmcgc2VydmljZXMjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDEuMDAjU2hlZXRpbmcgc2VydmljZXMjNzMuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDIuMDAjU2xpdHRpbmcgc2VydmljZXMjNzMuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDMuMDAjRGllIGN1dHRpbmcgc2VydmljZXMjNzMuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDQuMDAjRm9sZGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wNS4wMCNMYW1pbmF0aW5nIHNlcnZpY2VzIzczLjE1LjE4LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjAwLjAwI0luZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDEuMDAjRmxleG9ncmFwaGljIGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDIuMDAjUm90b2dyYXZ1cmUgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wMy4wMCNTY3JlZW4gaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wNC4wMCNPZmZzZXQgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wNS4wMCNEaWdpdGFsIGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDYuMDAjVGhlcm1hbCB0cmFuc2ZlciBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjIwLjAwLjAwI0ZpbGxpbmcgU2VydmljZXMjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDEuMDAjTGlxdWlkIGZpbGxpbmcgc2VydmljZXMjNzMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDIuMDAjQWVyb3NvbCBmaWxsaW5nIHNlcnZpY2VzIzczLjE1LjIwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIwLjAzLjAwI1Bhc3RlIGZpbGxpbmcgc2VydmljZXMjNzMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDQuMDAjUG93ZGVyIGZpbGxpbmcgc2VydmljZXMjNzMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjEuMDAuMDAjTWFudWZhY3R1cmluZyBlcXVpcG1lbnQgbWFpbnRlbmFuY2UgYW5kIHJlcGFpciBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMS4wMS4wMCNNYW51ZmFjdHVyaW5nIGVxdWlwbWVudCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3My4xNS4yMS4wMC4wMAotdW5zcHNjNyM3My4xNS4yMS4wMi4wMCNNYW51ZmFjdHVyaW5nIGVxdWlwbWVudCByZXBhaXIgc2VydmljZXMjNzMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMDAuMDAuMDAjTWFjaGluZXJ5IGFuZCB0cmFuc3BvcnQgZXF1aXBtZW50IG1hbnVmYWN0dXJlIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjAwLjAwI01hbnVmYWN0dXJlIG9mIG1hY2hpbmVyeSM3My4xNi4wMC4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wMS4wMCNFbmdpbmUgb3IgdHVyYmluZSBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjAyLjAwI0FncmljdWx0dXJhbCBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDMuMDAjTWFjaGluZSB0b29scyBvciBtZXRhbCBvciB3b29kIHdvcmtpbmcgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wNC4wMCNTcGVjaWFsIGluZHVzdHJpYWwgcGxhbnRzIG9yIG1hY2hpbmVyeSBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA1LjAwI0NvbnN0cnVjdGlvbiBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDYuMDAjTWluaW5nIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wNy4wMCNGb29kIHByb2R1Y3RzIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wOC4wMCNQYXBlciBwcmludGluZyBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA5LjAwI01ldGFsbHVyZ2ljYWwgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xMC4wMCNDaGVtaWNhbCBvciBwaGFybWFjZXV0aWNhbCBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjExLjAwI0NlbWVudCBwbGFudCBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjEyLjAwI1RleHRpbGUgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xMy4wMCNQb3dlciBwbGFudCBib2lsZXJzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE0LjAwI0Z1cm5hY2VzIG9yIG92ZW5zIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE1LjAwI09mZmljZSBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE2LjAwI0xpZnRpbmcgb3IgaG9pc3Rpbmcgb3IgY29udmV5aW5nIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xNy4wMCNBaXIgY29uZGl0aW9uaW5nIG9yIHZlbnRpbGF0aW5nIG9yIHJlZnJpZ2VyYXRpb24gZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE4LjAwI0RvbWVzdGljIGFwcGxpYW5jZXMgb3IgbWFjaGluZXMgZXhjZXB0IGVsZWN0cmljYWwgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTkuMDAjUHVtcHMgb3IgY29tcHJlc3NvcnMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDAuMDAjTWFudWZhY3R1cmUgb2YgdHJhbnNwb3J0IGVxdWlwbWVudCM3My4xNi4wMC4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wMS4wMCNGaXNoaW5nIHNoaXAgb3IgYm9hdCBidWlsZGluZyBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wMi4wMCNSYWlscm9hZCByb2xsaW5nIHN0b2NrIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjAzLjAwI0xvY29tb3RpdmUgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDQuMDAjTW90b3IgdmVoaWNsZXMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDUuMDAjTW90b3IgdmVoaWNsZXMgcGFydHMgb3IgYWNjZXNzb3JpZXMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDYuMDAjTW90b3JjeWNsZSBvciBiaWN5Y2xlIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjA3LjAwI0FpciBvciBzcGFjZWNyYWZ0IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE3LjAwLjAwLjAwI01hbnVmYWN0dXJlIG9mIGVsZWN0cmljYWwgZ29vZHMgYW5kIHByZWNpc2lvbiBpbnN0cnVtZW50cyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wMC4wMCNNYW51ZmFjdHVyZSBvZiBlbGVjdHJpY2FsIGdvb2RzIzczLjE3LjAwLjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjAxLjAwI1Bvd2VyIGdlbmVyYXRpb24gb3IgdHJhbnNtaXNzaW9uIG9yIGRpc3RyaWJ1dGlvbiBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDIuMDAjRHJ5IG9yIHN0b3JhZ2UgYmF0dGVyeSBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wMy4wMCNFbGVjdHJpY2FsIHRvb2xzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA0LjAwI01lYXN1cmluZyBvciB0ZXN0aW5nIGluc3RydW1lbnRzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA1LjAwI1JhZGlvIG9yIHRlbGV2aXNpb24gbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDYuMDAjQ29tbXVuaWNhdGlvbiBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDcuMDAjRWxlY3RyaWNhbCBob3VzZWhvbGQgYXBwbGlhbmNlcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wOC4wMCNJbnN1bGF0ZWQgd2lyZSBvciBjYWJsZSBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wOS4wMCNFbGVjdHJpY2FsIGFjY2Vzc29yaWVzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjEwLjAwI0VsZWN0cmljYWwgYWNjZXNzb3JpZXMgb3Igc3VwcGxpZXMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMTEuMDAjRWxlY3Ryb25pYyBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMTIuMDAjRWxlY3Ryb25pYyBjb21wdXRlcnMgb3IgZGF0YSBwcm9jZXNzaW5nIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wMC4wMCNNYW51ZmFjdHVyZSBvZiBwcmVjaXNpb24gaW5zdHJ1bWVudHMjNzMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDEuMDAjU2NpZW50aWZpYyBpbnN0cnVtZW50cyBvciBtZWFzdXJpbmcgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE2LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjAyLjAwI01lZGljYWwgb3IgZGVudGFsIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wMy4wMCNQaG90b2dyYXBoaWMgb3Igb3B0aWNhbCBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDQuMDAjV2F0Y2hlcyBvciBjbG9ja3MgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDUuMDAjTGFib3JhdG9yeSBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTguMDAuMDAuMDAjTWFjaGluaW5nIGFuZCBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjAwLjAwI01hY2hpbmluZyBzZXJ2aWNlcyM3My4xOC4wMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wMS4wMCNUdXJuaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjAyLjAwI0VsZWN0cm8gZGlzY2hhcmdlIG1hY2hpbmluZyAoRURNKSBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wMy4wMCNFbGVjdHJvIGNoZW1pY2FsIG1hY2hpbmluZyAoRUNNKSBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNC4wMCNDaGVtIG1pbGxpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDUuMDAjUHVuY2hpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDYuMDAjU3RhbXBpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDcuMDAjQm9yaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA4LjAwI0RyaWxsaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA5LjAwI1RhcHBpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTAuMDAjTGFzZXIgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTEuMDAjQmVuZGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xMi4wMCNHcmluZGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xMy4wMCNTaG90IGJsYXN0aW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE0LjAwI1BvbGlzaGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xNS4wMCNGbGFtZSBjdXR0aW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE2LjAwI0xhc2VyIGN1dHRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTcuMDAjUGxhc21hIGN1dHRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTguMDAjV2F0ZXIgamV0IGN1dHRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTkuMDAjUm9sbGluZyBTZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4yMC4wMCNTdXJmYWNlIHRyZWF0bWVudCBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4yMS4wMCNNaWxsaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjIyLjAwI1NwcmF5aW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjIzLjAwI1NoYXJwZW5pbmcgc2VydmljZSM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wMC4wMCNDb2F0aW5nIHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjAxLjAwI0VsZWN0cm8gY29hdGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wMi4wMCNEaXBwaW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjAzLjAwI1dyYXBwaW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjA0LjAwI1BhaW50aW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjA1LjAwI1dlYiBjb2F0aW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjA2LjAwI1BsYXRpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDAuMDAjRm9ybWluZyBzZXJ2aWNlcyM3My4xOC4wMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wMS4wMCNEcmF3IGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDIuMDAjSHlkcm8gZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wMy4wMCNSb2xsIGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDQuMDAjU3RyZXRjaCBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjA1LjAwI1NwaW4gZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wNi4wMCNFeHBsb3NpdmUgZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wMC4wMCNIZWF0IHRyZWF0bWVudCBzZXJ2aWNlcyM3My4xOC4wMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wMS4wMCNRdWVuY2ggYW5kIHRlbXBlciBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wMi4wMCNBbm5lYWxpbmcgc2VydmljZXMjNzMuMTguMTMuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTMuMDMuMDAjTm9ybWFsaXppbmcgc2VydmljZXMjNzMuMTguMTMuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTMuMDQuMDAjQWdpbmcgb3Igc3RhYmlsaXppbmcgc2VydmljZXMjNzMuMTguMTMuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDAuMDAjV2VsZGluZyBhbmQgYnJhemluZyBhbmQgc29sZGVyaW5nIHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjAxLjAwI0FyYyB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjAyLjAwI01ldGFsIGluZXJ0IGdhcyAoTUlHKSB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjAzLjAwI1R1bmdzdGVuIGluZXJ0IGdhcyAoVElHKSB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjA0LjAwI0xhc2VyIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDUuMDAjU3BvdCB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjA2LjAwI1Byb2plY3Rpb24gd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wNy4wMCNCcmF6aW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjA4LjAwI1NvbGRlcmluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3Ni4wMC4wMC4wMC4wMCNJbmR1c3RyaWFsIENsZWFuaW5nIFNlcnZpY2VzIzc2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEwLjAwLjAwLjAwI0RlY29udGFtaW5hdGlvbiBzZXJ2aWNlcyM3Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNS4wMC4wMCNEaXNpbmZlY3Rpb24jNzYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTUuMDEuMDAjV2FzaHJvb20gc2FuaXRhdGlvbiBzZXJ2aWNlcyM3Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNS4wMi4wMCNSZXN0IHJvb20gY2xlYW5pbmcgc2VydmljZXMjNzYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTUuMDMuMDAjRGlzaW5mZWN0aW9uIG9yIGRlb2Rvcml6aW5nIHNlcnZpY2VzIzc2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEwLjE2LjAwLjAwI0hhemFyZG91cyBtYXRlcmlhbCBkZWNvbnRhbWluYXRpb24jNzYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTYuMDEuMDAjUmFkaW9hY3RpdmUgZGVjb250YW1pbmF0aW9uIHNlcnZpY2VzIzc2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEwLjE2LjAyLjAwI0FzYmVzdG9zIGRlY29udGFtaW5hdGlvbiBvciByZW1vdmFsIzc2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjAwLjAwLjAwI0NsZWFuaW5nIGFuZCBqYW5pdG9yaWFsIHNlcnZpY2VzIzc2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjAwLjAwI0dlbmVyYWwgYnVpbGRpbmcgYW5kIG9mZmljZSBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wMS4wMCNCdWlsZGluZyBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wMi4wMCNCdWlsZGluZyBtYWludGVuYW5jZSBvciByZXBhaXIgc2VydmljZXMjNzYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTUuMDMuMDAjTGlnaHRpbmcgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTUuMDQuMDAjV2luZG93IG9yIHdpbmRvdyBibGluZCBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMC4wMCNCdWlsZGluZyBjb21wb25lbnQgY2xlYW5pbmcgc2VydmljZXMjNzYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDEuMDAjQWNvdXN0aWNhbCB0aWxlIG9yIGNlaWxpbmcgY2xlYW5pbmcgc2VydmljZXMjNzYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDIuMDAjQWlyIGR1Y3QgY2xlYW5pbmcjNzYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDMuMDAjQ2hpbW5leSBjbGVhbmluZyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wNC4wMCNGbG9vciB3YXhpbmcgb3IgY2FycGV0IGNsZWFuaW5nIzc2LjExLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjA1LjAwI0V4aGF1c3QgaG9vZCBvciBmYW4gY2xlYXJpbmcjNzYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTcuMDAuMDAjQnVpbGRpbmcgc2l0ZSBjbGVhbiB1cCM3Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNy4wMS4wMCNDb25zdHJ1Y3Rpb24gc2l0ZSBjbGVhbiB1cCBzZXJ2aWNlcyM3Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNy4wMi4wMCNDb25zdHJ1Y3Rpb24gc2l0ZSBoYXVsIGF3YXkgc2VydmljZXMjNzYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMDAuMDAuMDAjUmVmdXNlIGRpc3Bvc2FsIGFuZCB0cmVhdG1lbnQjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTUuMDAuMDAjUmVmdXNlIGNvbGxlY3Rpb24gYW5kIGRpc3Bvc2FsIzc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE1LjAxLjAwI0dhcmJhZ2UgY29sbGVjdGlvbiBvciBkZXN0cnVjdGlvbiBvciBwcm9jZXNzaW5nIG9yIGRpc3Bvc2FsIzc2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE1LjAyLjAwI0xpcXVpZCB3YXN0ZSBjb2xsZWN0aW9uIG9yIHByb2Nlc3Npbmcgb3IgZGlzcG9zYWwjNzYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTUuMDMuMDAjU3RyZWV0IGNsZWFuaW5nIHNlcnZpY2VzIzc2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjAwLjAwI05vbmhhemFyZG91cyB3YXN0ZSBkaXNwb3NhbCM3Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wMS4wMCNHYXJiYWdlIGR1bXAjNzYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTYuMDIuMDAjU2FuaXRhcnkgbGFuZGZpbGwgb3BlcmF0aW9ucyM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wMy4wMCNTbHVkZ2UgZGlzcG9zYWwjNzYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTYuMDQuMDAjRGVhZCBhbmltYWwgZGlzcG9zYWwgc2VydmljZXMjNzYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTcuMDAuMDAjTGlxdWlkIHdhc3RlIHRyZWF0bWVudCM3Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNy4wMS4wMCNTZXdhZ2UgdHJlYXRtZW50IHNlcnZpY2VzIzc2LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE3LjAyLjAwI0NoZW1pY2FsIHRyZWF0bWVudCBzZXJ2aWNlcyM3Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOC4wMC4wMCNSZWZ1c2UgdHJlYXRtZW50Izc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE4LjAxLjAwI1JlY3ljbGluZyBzZXJ2aWNlcyM3Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOS4wMC4wMCNIYXphcmRvdXMgd2FzdGUgZGlzcG9zYWwjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTkuMDEuMDAjTWVkaWNhbCB3YXN0ZSBkaXNwb3NhbCM3Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOS4wMi4wMCNBY2lkIHdhc3RlIGNvbGxlY3Rpb24gb3IgZGlzcG9zYWwjNzYuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTkuMDMuMDAjQ2hlbWljYWwgZGV0b3hpZmljYXRpb24jNzYuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMDAuMDAuMDAjVG94aWMgYW5kIGhhemFyZG91cyB3YXN0ZSBjbGVhbnVwIzc2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEzLjE1LjAwLjAwI051Y2xlYXIgd2FzdGUgdHJlYXRtZW50Izc2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEzLjE1LjAxLjAwI1JhZGlvYWN0aXZlIHdhc3RlIG1hdGVyaWFsIHRyZWF0bWVudCM3Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNS4wMi4wMCNSYWRpb2FjdGl2ZSBjb250YWlubWVudCBzZXJ2aWNlcyM3Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNi4wMC4wMCNUb3hpYyBzcGlsbCBjbGVhbnVwIzc2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEzLjE2LjAxLjAwI1RveGljIHNwaWxsIGNvbnRhaW5tZW50Izc2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE2LjAyLjAwI1RveGljIHN1YnN0YW5jZXMgc3BpbGwgY2xlYW51cCM3Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNy4wMC4wMCNPaWwgc3BpbGwgY2xlYW51cCM3Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNy4wMS4wMCNPaWwgcmVzaWR1ZSBkaXNwb3NhbCBvciBjb250cm9sIHNlcnZpY2VzIzc2LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE3LjAyLjAwI09pbCBzcGlsbCB0cmVhdG1lbnQgc2VydmljZXMjNzYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMDAuMDAuMDAuMDAjRW52aXJvbm1lbnRhbCBTZXJ2aWNlcyM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4wMC4wMC4wMCNFbnZpcm9ubWVudGFsIG1hbmFnZW1lbnQjNzcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDAuMDAjRW52aXJvbm1lbnRhbCBpbXBhY3QgYXNzZXNzbWVudCM3Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wMS4wMCNSaXNrIG9yIGhhemFyZCBhc3Nlc3NtZW50Izc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjAyLjAwI0Vudmlyb25tZW50YWwgc3RhbmRhcmRzIzc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjAzLjAwI0Vudmlyb25tZW50YWwgaW5kaWNhdG9ycyBhbmFseXNpcyM3Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wNC4wMCNFbnZpcm9ubWVudGFsIGltcGFjdCBhc3Nlc3NtZW50ICAoRUlBKSBzZXJ2aWNlcyM3Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wNS4wMCNFbnZpcm9ubWVudGFsIG1vbml0b3JpbmcjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDAuMDAjRW52aXJvbm1lbnRhbCBwbGFubmluZyM3Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wMS4wMCNVcmJhbiBlbnZpcm9ubWVudGFsIGRldmVsb3BtZW50IHBsYW5uaW5nIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjAyLjAwI0ZvcmVzdCBjb25zZXJ2YXRpb24gc3RyYXRlZ3kgcGxhbm5pbmcjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDMuMDAjTWFyaW5lIGNvbnNlcnZhdGlvbiBzdHJhdGVneSBwbGFubmluZyM3Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wNC4wMCNOYXR1cmFsIHJlc291cmNlcyBtYW5hZ2VtZW50IG9yIGNvbnNlcnZhdGlvbiBzdHJhdGVneSBwbGFubmluZyBzZXJ2aWNlcyM3Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wNS4wMCNFbnZpcm9ubWVudGFsIGluc3RpdHV0aW9uIGJ1aWxkaW5nIG9yIHBsYW5uaW5nIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjAwLjAwI0Vudmlyb25tZW50YWwgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDEuMDAjRW52aXJvbm1lbnRhbCBzY2llbmNlcyBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wMi4wMCNFbnZpcm9ubWVudGFsIGNoZW1pc3RyeSBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wMy4wMCNFbnZpcm9ubWVudGFsIGV0aGljcyBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNC4wMCNFbnZpcm9ubWVudGFsIHRlY2hub2xvZ3kgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDUuMDAjRW52aXJvbm1lbnRhbCBlY29ub21pY3MgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDYuMDAjRW52aXJvbm1lbnRhbCBsYXcgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDcuMDAjRWNvbG9neSBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wMC4wMCNFbnZpcm9ubWVudGFsIGF1ZGl0aW5nIzc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAxLjAwI0Vudmlyb25tZW50YWwgaW5mb3JtYXRpb24gc3lzdGVtcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wMi4wMCNDb3Jwb3JhdGUgZW52aXJvbm1lbnRhbCBhdWRpdGluZyBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wMy4wMCNTZWN0b3JhbCBlbnZpcm9ubWVudGFsIGF1ZGl0aW5nIHNlcnZpY2VzIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjA0LjAwI0FjdGl2aXR5IHNwZWNpZmljIGVudmlyb25tZW50YWwgYXVkaXRpbmcgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDUuMDAjRW52aXJvbm1lbnRhbCBxdWFsaXR5IGNvbnRyb2wgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDYuMDAjRW52aXJvbm1lbnRhbCBzZWN1cml0eSBjb250cm9sIHNlcnZpY2VzIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjAwLjAwI1BvbGx1dGlvbiBpbnZlc3RpZ2F0aW9uIHNlcnZpY2VzIzc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjAxLjAwI0luZHVzdHJpYWwgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjAyLjAwI0luZHVzdHJpYWwgd2FzdGUgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjAzLjAwI0dhc3dvcmtzIHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wNC4wMCNDaGVtaWNhbCB3b3JrcyBvciBvaWwgcmVmaW5lcnkgd2FzdGUgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA1LjAwI1dvb2QgdHJlYXRtZW50IHBsYW50IHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wNi4wMCNPaWwgZGVwb3Qgb3IgdGVybWluYWwgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA3LjAwI0RyeSBjbGVhbmluZyBwbGFudHMgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA4LjAwI0ZvdW5kcnkgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA5LjAwI1JlY3ljbGluZyBwbGFudCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMTAuMDAjRm9vZCBwcm9jZXNzaW5nIHBsYW50IHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4wMC4wMC4wMCNFbnZpcm9ubWVudGFsIHByb3RlY3Rpb24jNzcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDAuMDAjRW52aXJvbm1lbnRhbCBzYWZldHkgc2VydmljZXMjNzcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDEuMDAjTGFuZHNjYXBlIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDIuMDAjT3pvbmUgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMy4wMCNGb29kIG9yIGZlZWQgY29udGFtaW5hdGlvbiBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjA0LjAwI0dlbmV0aWMgcmVzb3VyY2VzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDUuMDAjVG94aWMgc3Vic3RhbmNlcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjA2LjAwI1JhZGlhdGlvbiBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjA3LjAwI0VuZGFuZ2VyZWQgc3BlY2llcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjA4LjAwI05hdHVyYWwgcmlza3Mgb3IgaGF6YXJkcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE2LjAwLjAwI0Vudmlyb25tZW50YWwgcmVoYWJpbGl0YXRpb24jNzcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDEuMDAjSW5kdXN0cmlhbCBzaXRlIHJlaGFiaWxpdGF0aW9uIzc3LjExLjE2LjAwLjAwCi11bnNwc2M3Izc3LjExLjE2LjAyLjAwI0Vudmlyb25tZW50YWwgZGVjb250YW1pbmF0aW9uIHNlcnZpY2VzIzc3LjExLjE2LjAwLjAwCi11bnNwc2M3Izc3LjExLjE2LjAzLjAwI0xhbmQgcmVjbGFtYXRpb24gc2VydmljZXMjNzcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMDAuMDAuMDAjUG9sbHV0aW9uIHRyYWNraW5nIGFuZCBtb25pdG9yaW5nIGFuZCByZWhhYmlsaXRhdGlvbiM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wMC4wMCNBaXIgcG9sbHV0aW9uIzc3LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjAxLjAwI0FpciBxdWFsaXR5IG1hbmFnZW1lbnQjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDIuMDAjVHJhbnNib3VuZGFyeSBhaXIgcG9sbHV0aW9uIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wMy4wMCNBaXIgcG9sbHV0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDQuMDAjQWlyIHBvbGx1dGlvbiBtb25pdG9yaW5nIG9yIG1lYXN1cmVtZW50IHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA1LjAwI1RveGljIGdhcyBkZXRlY3Rpb24gc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDYuMDAjTWV0aGFuZSBtb25pdG9yaW5nIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA3LjAwI0NhcmJvbiBkaW94aWRlIG1vbml0b3Jpbmcgc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDguMDAjQWlyYm9ybmUgcGFydGljbGUgbW9uaXRvcmluZyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wOS4wMCNPem9uZSBkZXBsZXRpb24gbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wMC4wMCNTb2lsIHBvbGx1dGlvbiM3Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wMS4wMCNTb2lsIHBvbGx1dGlvbiBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAyLjAwI1BvbGx1dGVkIHNvaWwgcmVtb3ZhbCBzZXJ2aWNlcyM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wMy4wMCNQb2xsdXRlZCBzb2lsIHRyZWF0bWVudCBvciByZWhhYmlsaXRhdGlvbiM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wNC4wMCNTb2lsIHBvbGx1dGlvbiBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wNS4wMCNTb2lsIHBvbGx1dGlvbiBtYXBwaW5nIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA2LjAwI1NvaWwgcG9sbHV0aW9uIG1lYXN1cmVtZW50IG9yIG1vbml0b3JpbmcjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDcuMDAjT3JnYW5pYyBmZXJ0aWxpemVyIHBvbGx1dGlvbiBhc3Nlc3NtZW50Izc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA4LjAwI1Blc3RpY2lkZXMgcG9sbHV0aW9uIGFzc2Vzc21lbnQjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDkuMDAjTml0cmF0ZXMgcG9sbHV0aW9uIGFzc2Vzc21lbnQjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMTAuMDAjUGhvc3BoYXRlcyBwb2xsdXRpb24gYXNzZXNzbWVudCM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wMC4wMCNXYXRlciBwb2xsdXRpb24jNzcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDEuMDAjU3VyZmFjZSB3YXRlciBwb2xsdXRpb24gbW9uaXRvcmluZyBvciBjb250cm9sIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjAyLjAwI1N1cmZhY2Ugd2F0ZXIgcG9sbHV0aW9uIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjAzLjAwI1N1cmZhY2Ugd2F0ZXIgcG9sbHV0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDQuMDAjU3VyZmFjZSB3YXRlciB0cmVhdG1lbnQgc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDUuMDAjU3VyZmFjZSB3YXRlciBwb2xsdXRpb24gZHJhaW5hZ2Ugc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDYuMDAjVHJhbnNib3VuZGFyeSB3YXRlciBwb2xsdXRpb24gbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjA3LjAwI0dyb3VuZHdhdGVyIHBvbGx1dGlvbiBtb25pdG9yaW5nIG9yIGNvbnRyb2wgc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDguMDAjR3JvdW5kd2F0ZXIgcG9sbHV0aW9uIGRyYWluYWdlIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjA5LjAwI0dyb3VuZHdhdGVyIHBvbGx1dGlvbiB0cmVhdG1lbnQgb3IgcmVoYWJpbGl0YXRpb24jNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMDAuMDAuMDAjUG9sbHV0YW50cyB0cmFja2luZyBhbmQgbW9uaXRvcmluZyBhbmQgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjNzcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTUuMDAuMDAjT2lsIHBvbGx1dGlvbiM3Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNS4wMS4wMCNPaWwgc3BpbGxhZ2UgbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMy4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNS4wMi4wMCNPaWwgc3BpbGxhZ2UgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMy4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNS4wMy4wMCNPaWwgc3BpbGxhZ2UgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjNzcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTYuMDAuMDAjTm9pc2UgcG9sbHV0aW9uIzc3LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEzLjE2LjAxLjAwI05vaXNlIGNvbnRyb2wgc2VydmljZXMjNzcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTYuMDIuMDAjTm9pc2UgcG9sbHV0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTYuMDMuMDAjTm9pc2UgcG9sbHV0aW9uIG1vbml0b3Jpbmcgc2VydmljZXMjNzcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTYuMDQuMDAjTm9pc2UgcG9sbHV0aW9uIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE3LjAwLjAwI1RveGljIHN1YnN0YW5jZXMgcG9sbHV0aW9uIzc3LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEzLjE3LjAxLjAwI1RveGljIHN1YnN0YW5jZXMgbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNy4wMi4wMCNUb3hpYyBzdWJzdGFuY2VzIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzc3LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc4LjAwLjAwLjAwLjAwI1RyYW5zcG9ydGF0aW9uIGFuZCBTdG9yYWdlIGFuZCBNYWlsIFNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjAwLjAwLjAwI01haWwgYW5kIGNhcmdvIHRyYW5zcG9ydCM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNS4wMC4wMCNBaXIgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE1LjAxLjAwI0RvbWVzdGljIGFpciBjYXJnbyB0cmFucG9zcnQjNzguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTUuMDIuMDAjSW50ZXJuYXRpb25hbCBhaXIgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE1LjAzLjAwI0FybW9yZWQgYWlyIHRyYW5zcG9ydCM3OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNi4wMC4wMCNSYWlsIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNi4wMS4wMCNCb3hjYXIgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjAyLjAwI0J1bGsgY2FyZ28gcmFpbCB0cmFzbnBvcnQgc2VydmljZXMjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDMuMDAjTGl2ZXN0b2NrIHJhaWwgdHJhbnNwb3J0Izc4LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjA0LjAwI1ZlaGljbGUgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjAwLjAwI01hcmluZSBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDEuMDAjRG9tZXN0aWMgdmVzc2VsIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wMi4wMCNJbnRlcm5hdGlvbmFsIHZlc3NlbCB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDMuMDAjRG9tZXN0aWMgYmFyZ2UgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjA0LjAwI0ludGVybmF0aW9uYWwgYmFyZ2UgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjA1LjAwI0FybW9yZWQgbWFyaW5lIHRyYW5zcG9ydCM3OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOC4wMC4wMCNSb2FkIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOC4wMS4wMCNMb2NhbCBhcmVhIHRydWNraW5nIHNlcnZpY2VzIzc4LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjAyLjAwI1JlZ2lvbmFsIG9yIG5hdGlvbmFsIHRydWNraW5nIHNlcnZpY2VzIzc4LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjAzLjAwI1ZlaGljbGUgY2FycmllciBzZXJ2aWNlcyM3OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOC4wNC4wMCNSZWxvY2F0aW9uIHNlcnZpY2VzIzc4LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjAwLjAwI0ludGVybW9kYWwgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjAxLjAwI0FpciB0byBvY2VhbiB0cmFuc3BvcnRhdGlvbiM3OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wMi4wMCNPY2VhbiB0byByYWlsIHRyYW5zcG9ydGF0aW9uIzc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjAzLjAwI09jZWFuIHRvIHRydWNrIHRyYW5zcG9ydGF0aW9uIzc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjA0LjAwI0FpciB0byB0cnVjayB0cmFuc3BvcnQjNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDUuMDAjUmFpbCB0cnVjayB0cmFuc3BvcnRhdGlvbiM3OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMC4wMC4wMCNTcGFjZWNyYWZ0IGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMC4wMS4wMCNTYXRlbGxpdGUgbGF1bmNoIHNlcnZpY2VzIzc4LjEwLjIwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIwLjAyLjAwI0V4cGVyaW1lbnRhbCBwYXlsb2FkIHNlcnZpY2VzIzc4LjEwLjIwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIxLjAwLjAwI1BpcGVsaW5lIHNlcnZpY2VzIzc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIxLjAxLjAwI1BldHJvbGV1bSBwcm9kdWN0cyB0cmFuc3BvcnQjNzguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjEuMDIuMDAjV2F0ZXIgdHJhbnNwb3J0Izc4LjEwLjIxLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjAwLjAwI1Bvc3RhbCBhbmQgc21hbGwgcGFyY2VsIGFuZCBjb3VyaWVyIHNlcnZpY2VzIzc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjAxLjAwI05hdGlvbmFsIHBvc3RhbCBkZWxpdmVyeSBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wMi4wMCNQb3N0IG9mZmljZSBib3ggc2VydmljZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDMuMDAjTWFpbGluZyBvciBtYWlsIHBpY2sgdXAgb3IgZGVsaXZlcnkgc2VydmljZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDQuMDAjTGV0dGVyIG9yIHNtYWxsIHBhcmNlbCB3b3JsZHdpZGUgZGVsaXZlcnkgc2VydmljZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDUuMDAjTGV0dGVyIG9yIHNtYWxsIHBhcmNlbCBsb2NhbCBkZWxpdmVyeSBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wNi4wMCNCaWN5Y2xlIG9yIHNjb290ZXIgbWVzc2VuZ2VyIHNlcnZjaWVzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjExLjAwLjAwLjAwI1Bhc3NlbmdlciB0cmFuc3BvcnQjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTUuMDAuMDAjQWlyIHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE1LjAxLjAwI0hlbGljb3B0ZXIgc2VydmljZXMjNzguMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTUuMDIuMDAjQ29tbWVyY2lhbCBhaXJwbGFuZSB0cmF2ZWwjNzguMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTUuMDMuMDAjQ2hhcnRlcmVkIGFpcnBsYW5lIHRyYXZlbCM3OC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNi4wMC4wMCNSYWlsd2F5IHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE2LjAxLjAwI0xpZ2h0IHJhaWwgdmVoaWNsZSB0cmFuc3BvcnQgKExSVikgc2VydmljZXMjNzguMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTYuMDIuMDAjU3Vid2F5IHRyYW5zcG9ydCM3OC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNi4wMy4wMCNDb250aW5lbnRhbCBvciBpbnRlciBjb250aW5lbnRhbCByYWlsIHNlcnZpY2VzIzc4LjExLjE2LjAwLjAwCi11bnNwc2M3Izc4LjExLjE3LjAwLjAwI01hcmluZSB0cmFuc3BvcnRhdGlvbiM3OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNy4wMS4wMCNXYXRlciB0YXhpcyM3OC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNy4wMi4wMCNPdmVybmlnaHQgc2hpcCBjcnVpc2VzIzc4LjExLjE3LjAwLjAwCi11bnNwc2M3Izc4LjExLjE3LjAzLjAwI1NpZ2h0c2VlaW5nIGJvYXQgZXhjdXJzaW9ucyM3OC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wMC4wMCNSb2FkIHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjAxLjAwI0NhciByZW50YWwgc2VydmljZXMjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDIuMDAjU2NoZWR1bGVkIGJ1cyBzZXJ2aWNlcyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wMy4wMCNDaGFydGVyZWQgYnVzIHNlcnZpY2VzIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjA0LjAwI1RheGljYWIgc2VydmljZXMjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDUuMDAjVHJhbnNwb3J0YXRpb24gbWFpbnRlbmFuY2UjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDYuMDAjVmVoaWNsZSByZW50YWwgb3IgbGVhc2luZyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOS4wMC4wMCNTcGFjZSB0cmFuc3BvcnRhdGlvbiM3OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOS4wMS4wMCNFeHBlcmltZW50YWwgb3IgZWR1Y2F0aW9uYWwgbWlzc2lvbnMjNzguMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTIuMDAuMDAuMDAjTWF0ZXJpYWwgcGFja2luZyBhbmQgaGFuZGxpbmcjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTUuMDAuMDAjUGFja2luZyM3OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNS4wMS4wMCNDb250YWluZXJpemF0aW9uIG9mIGdvb2RzIzc4LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEyLjE1LjAyLjAwI0NyYXRpbmcgc2VydmljZXMjNzguMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTYuMDAuMDAjTWF0ZXJpYWwgaGFuZGxpbmcgc2VydmljZXMjNzguMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTYuMDEuMDAjRnJlaWdodCBsb2FkaW5nIG9yIHVubG9hZGluZyM3OC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNi4wMi4wMCNXZWlnaGluZyBzZXJ2aWNlcyM3OC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMy4wMC4wMC4wMCNTdG9yYWdlIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE1LjAwLjAwI0Zhcm0gcHJvZHVjdHMgd2FyZWhvdXNpbmcjNzguMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTUuMDEuMDAjU2lsbyBzZXJ2aWNlcyM3OC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNS4wMi4wMCNHcmFpbiBlbGV2YXRvciBzZXJ2aWNlcyM3OC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNi4wMC4wMCNHZW5lcmFsIGdvb2RzIHN0b3JhZ2UjNzguMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTYuMDEuMDAjUGFsbGV0aXplZCBjYXJnbyBzdG9yYWdlIzc4LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE2LjAyLjAwI0ZpbGUgYXJjaGl2ZSBzdG9yYWdlIzc4LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE3LjAwLjAwI0J1bGsgc3RvcmFnZSM3OC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNy4wMS4wMCNJbiBncm91bmQgc3RvcmFnZSBzZXJ2aWNlcyM3OC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMy4xOC4wMC4wMCNTcGVjaWFsaXplZCB3YXJlaG91c2luZyBhbmQgc3RvcmFnZSM3OC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xOC4wMS4wMCNSZWZyaWdlcmF0ZWQgc3RvcmFnZSM3OC4xMy4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xOC4wMi4wMCNDdXN0b21zIGJvbmRlZCBzdG9yYWdlIHNlcnZpY2VzIzc4LjEzLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAzLjAwI0hhemFyZG91cyBtYXRlcmlhbHMgc3RvcmFnZSM3OC4xMy4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xOC4wNC4wMCNEb2N1bWVudCBzdG9yYWdlIHNlcnZpY2VzIzc4LjEzLjE4LjAwLjAwCi11bnNwc2M3Izc4LjE0LjAwLjAwLjAwI1RyYW5zcG9ydCBvcGVyYXRpb25zIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE0LjE1LjAwLjAwI1RyYW5zcG9ydCBhcnJhbmdlbWVudHMjNzguMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDEuMDAjRnJlaWdodCBmb3J3YXJkZXJzIHNlcnZpY2VzIzc4LjE0LjE1LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE1LjAyLjAwI0N1c3RvbXMgYnJva2VyYWdlIHNlcnZpY2VzIzc4LjE0LjE1LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE1LjAzLjAwI1RyYW5zcG9ydGF0aW9uIGluZHVzdHJ5IHRhcmlmZiBjb21wYXJpc29uIG9yIGZyZWlnaHQgYXVkaXQgc2VydmljZXMjNzguMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTYuMDAuMDAjSW5zcGVjdGlvbiM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNi4wMS4wMCNQYWNraW5nIGluc3BlY3Rpb24gc2VydmljZXMjNzguMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTYuMDIuMDAjQ2FyZ28gc3VydmV5IHNlcnZpY2VzIzc4LjE0LjE2LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE2LjAzLjAwI1Blc3QgY29udHJvbCBpbnNwZWN0aW9ucyM3OC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNy4wMC4wMCNOYXZpZ2F0aW9uYWwgc2VydmljZXMjNzguMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTcuMDEuMDAjVHVnYm9hdCBzZXJ2aWNlcyM3OC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNy4wMi4wMCNEcmF3YnJpZGdlIG9wZXJhdGlvbnMjNzguMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTguMDAuMDAjVGVybWluYWwgc2VydmljZXMjNzguMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTguMDEuMDAjU3RldmVkb3Jpbmcgc2VydmljZXMjNzguMTQuMTguMDAuMDAKLXVuc3BzYzcjNzguMTQuMTguMDIuMDAjVmVzc2VsIGRvY2tpbmcgc2VydmljZXMjNzguMTQuMTguMDAuMDAKLXVuc3BzYzcjNzguMTQuMTguMDMuMDAjVmVzc2VsIHN0b3JlcyBzZXJ2aWNlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wNC4wMCNQYXJraW5nIHN0cnVjdHVyZXMjNzguMTQuMTguMDAuMDAKLXVuc3BzYzcjNzguMTUuMDAuMDAuMDAjVHJhbnNwb3J0IGluZHVzdHJ5IHN1cHBvcnQgYW5kIG1haW50ZW5hbmNlIGFuZCByZXBhaXIgc2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTUuMDEuMDAuMDAjUGFuZWwgYW5kIHBhaW50IHNlcnZpY2VzIzc4LjE1LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAxLjAxLjAwI1BhbmVsYmVhdGluZyBzZXJ2aWNlcyM3OC4xNS4wMS4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMi4wMC4wMCNUcmFuc3BvcnQgZnVlbGxpbmcgYW5kIHZlaGljbGUgc3RvcmFnZSBhbmQgc3VwcG9ydCBzZXJ2aWNlcyM3OC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMi4wMS4wMCNGdWVsbGluZyBvZiB2ZWhpY2xlcyM3OC4xNS4wMi4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMi4wMi4wMCNUcmFuc3BvcnRhdGlvbiBzdG9yYWdlIzc4LjE1LjAyLjAwLjAwCi11bnNwc2M3Izc4LjE2LjAwLjAwLjAwI1BhbmVsIGFuZCBwYWludCBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNy4wMC4wMC4wMCNQYW5lbGJlYXRpbmcgc2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTguMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gb3IgdmVoaWNsZSByZXBhaXIgc2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTguMDEuMDAuMDAjVmVoaWNsZSByZXBhaXIgc2VydmljZXMjNzguMTguMDAuMDAuMDAKLXVuc3BzYzcjNzguMTguMDEuMDEuMDAjVmVoaWNsZSBib2R5IHJlcGFpciBvciBwYWludGluZyBzZXJ2aWNlcyM3OC4xOC4wMS4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMS4wMi4wMCNUcmFuc21pc3Npb24gcmVwYWlyIzc4LjE4LjAxLjAwLjAwCi11bnNwc2M3Izc4LjE5LjAwLjAwLjAwI1ZlaGljbGUgcmVwYWlyIHNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE5LjExLjAwLjAwI1ZlaGljbGUgYm9keSByZXBhaXIgb3IgcGFpbnRpbmcgc2VydmljZXMjNzguMTkuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTkuMTIuMDAuMDAjVHJhbnNtaXNzaW9uIHJlcGFpciM3OC4xOS4wMC4wMC4wMAotdW5zcHNjNyM4MC4wMC4wMC4wMC4wMCNNYW5hZ2VtZW50IGFuZCBCdXNpbmVzcyBQcm9mZXNzaW9uYWxzIGFuZCBBZG1pbmlzdHJhdGl2ZSBTZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMC4wMC4wMC4wMCNNYW5hZ2VtZW50IGFkdmlzb3J5IHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjAwLjAwI0J1c2luZXNzIGFuZCBjb3Jwb3JhdGUgbWFuYWdlbWVudCM4MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wMS4wMCNOZXcgYnVzaW5lc3Mgc3RhcnQgdXAgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjAyLjAwI0NvcnBvcmF0ZSBtZXJnZXJzIGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wMy4wMCNDb3Jwb3JhdGUgZGl2ZXN0aXR1cmUgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjA0LjAwI1N0cmF0ZWdpYyBwbGFubmluZyBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDUuMDAjQ29ycG9yYXRlIG9iamVjdGl2ZXMgb3IgcG9saWN5IGRldmVsb3BtZW50IzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjA2LjAwI09yZ2FuaXphdGlvbmFsIHN0cnVjdHVyZSBjb25zdWx0YXRpb24jODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDcuMDAjSW5mb3JtYXRpb24gdGVjaG5vbG9neSBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTYuMDAuMDAjUHJvamVjdCBtYW5hZ2VtZW50IzgwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjE2LjAxLjAwI0ZlYXNpYmlsaXR5IHN0dWRpZXMgb3Igc2NyZWVuaW5nIG9mIHByb2plY3QgaWRlYXMjODAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTYuMDIuMDAjUmVnaW9uYWwgb3IgbG9jYXRpb24gc3R1ZGllcyBmb3IgcHJvamVjdHMjODAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTYuMDMuMDAjRWNvbm9taWMgb3IgZmluYW5jaWFsIGV2YWx1YXRpb24gb2YgcHJvamVjdHMjODAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTYuMDQuMDAjUHJvamVjdCBhZG1pbmlzdHJhdGlvbiBvciBwbGFubmluZyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wMC4wMCNJbmR1c3RyaWFsIG1hbmFnZW1lbnQjODAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDEuMDAjRmFjdG9yeSBtYW5hZ2VtZW50IHNlcnZpY2VzIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjAyLjAwI1Byb2R1Y3Rpdml0eSBvciBlZmZpY2llbmN5IHN0dWRpZXMgb3IgaW1wbGVtZW50YXRpb24jODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDMuMDAjU3BlY2lmaWNhdGlvbiBzdGFuZGFyZGl6YXRpb24gc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDQuMDAjU3VwcGx5IGNoYWluIGFuYWx5c2lzIG9yIHJlIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjA1LjAwI0NvIG9wZXJhdGl2ZSBvciBjb25zb3J0aXVtIHNlcnZpY2VzIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjA2LjAwI1Byb2Zlc3Npb25hbCBwcm9jdXJlbWVudCBzZXJ2aWNlcyM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMS4wMC4wMC4wMCNIdW1hbiByZXNvdXJjZXMgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDAuMDAjSHVtYW4gcmVzb3VyY2UgZGV2ZWxvcG1lbnQjODAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDEuMDAjTWFuYWdlbWVudCBkZXZlbG9wbWVudCM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMi4wMCNDb21wZW5zYXRpb24gb3IgYmVuZWZpdHMgcGxhbm5pbmcjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDMuMDAjTGFib3Igb3IgdW5pb24gcmVsYXRpb25zIzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjA0LjAwI0xhYm9yIHRyYWluaW5nIG9yIGRldmVsb3BtZW50IzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjA1LjAwI0h1bWFuIHJlc291cmNlcyBwcm9kdWN0aXZpdHkgYXVkaXRzIzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjA2LjAwI1BlcnNvbm5lbCByZWxvY2F0aW9uIzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjAwLjAwI1RlbXBvcmFyeSBwZXJzb25uZWwgc2VydmljZXMjODAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDEuMDAjVGVtcG9yYXJ5IGNsZXJpY2FsIG9yIGFkbWluc3RyYXRpdmUgYXNzaXN0YW5jZSM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wMi4wMCNUZW1wb3JhcnkgbWFya2V0aW5nIHN0YWZmIG5lZWRzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjAzLjAwI1RlbXBvcmFyeSBwcm9kdWN0aW9uIHN0YWZmaW5nIG5lZWRzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjA0LjAwI1RlbXBvcmFyeSB0ZWNobmljaWFuIHN0YWZmaW5nIG5lZWRzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjA1LjAwI1RlbXBvcmFyeSBmaW5hbmNpYWwgc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDYuMDAjVGVtcG9yYXJ5IG1lZGljYWwgc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDcuMDAjVGVtcG9yYXJ5IGxlZ2FsIHN0YWZmaW5nIG5lZWRzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjA4LjAwI1RlbXBvcmFyeSBpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IHNvZnR3YXJlIGRldmVsb3BlcnMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDkuMDAjVGVtcG9yYXJ5IGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgc3lzdGVtcyBvciBkYXRhYmFzZSBhZG1pbmlzdHJhdG9ycyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xMC4wMCNUZW1wb3JhcnkgaW5mb3JtYXRpb24gdGVjaG5vbG9neSBuZXR3b3JraW5nIHNwZWNpYWxpc3RzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjExLjAwI1RlbXBvcmFyeSB3YXJlaG91c2Ugc3RhZmYjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTIuMDAjVGVtcG9yYXJ5IGRyaXZlcnMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTMuMDAjVGVtcG9yYXJ5IG1hbnVhbCBsYWJvciM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xNC4wMCNUZW1wb3JhcnkgcHJvZmVzc2lvbmFsIHN0YWZmIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjE1LjAwI1RlbXBvcmFyeSBtYWNoaW5pc3QgcGVyc29ubmVsIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE3LjAwLjAwI1BlcnNvbm5lbCByZWNydWl0bWVudCM4MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNy4wMS4wMCNTdGFmZiByZWNydWl0aW5nIHNlcnZpY2VzIzgwLjExLjE3LjAwLjAwCi11bnNwc2M3IzgwLjExLjE3LjAyLjAwI1JlZmVyZW5jZSBvciBiYWNrZ3JvdW5kIGNoZWNrIHNlcnZpY2VzIzgwLjExLjE3LjAwLjAwCi11bnNwc2M3IzgwLjExLjE3LjAzLjAwI1Jlc3VtZSBvciBjdXJyaWN1bHVtIHZpdGFlIHNjcmVlbmluZyBzZXJ2aWNlcyM4MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMS4xOC4wMC4wMCNJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IGNvbnRyYWN0b3JzIzgwLjExLjAwLjAwLjAwCi11bnNwc2M3IzgwLjExLjE4LjAxLjAwI1RlbXBvcmFyeSBpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IGNvbnRyYWN0b3JzIzgwLjExLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEyLjAwLjAwLjAwI0xlZ2FsIHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE1LjAwLjAwI0NyaW1pbmFsIGxhdyBzZXJ2aWNlcyM4MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNS4wMS4wMCNKdXZlbmlsZSBqdXN0aWNlIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNS4wMi4wMCNBcHBlbGxhdGUgcHJvY2VkdXJlIHNlcnZpY2VzIzgwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE1LjAzLjAwI0RlZmVuc2Ugb3IgY3JpbWluYWwgbGF3IHNlcnZpY2VzIzgwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjAwLjAwI0J1c2luZXNzIGxhdyBzZXJ2aWNlcyM4MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wMS4wMCNHb3Zlcm5tZW50IGFudGl0cnVzdCBvciByZWd1bGF0aW9ucyBsYXcgc2VydmljZXMjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDIuMDAjQmFua3J1cHRjeSBsYXcgc2VydmljZXMjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDMuMDAjUGFydG5lcnNoaXAgbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA0LjAwI1BhdGVudCBvciB0cmFkZW1hcmsgb3IgY29weXJpZ2h0IGxhdyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wNS4wMCNMaXF1aWRhdGlvbiBsYXcgc2VydmljZXMjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDYuMDAjUmVhbCBlc3RhdGUgbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA3LjAwI1RheGF0aW9uIGxhdyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wOC4wMCNNZXJnZXJzIG9yIGFjcXVpc2l0aW9ucyBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDkuMDAjTGVnYWwgcmVzZWFyY2ggc2VydmljZXMjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMTAuMDAjRGVidCBjb2xsZWN0aW9uIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wMC4wMCNDaXZpbCBsaWFiaWxpdHkgc2VydmljZXMjODAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTcuMDEuMDAjTWFscHJhY3RpY2Ugb3IgbmVnbGlnZW5jZSBsYXcgc2VydmljZXMjODAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTcuMDIuMDAjUGVyc29uYWwgaW5qdXJ5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wMy4wMCNQcm9wZXJ0eSBsYXcgc2VydmljZXMjODAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTcuMDQuMDAjQ29udHJhY3QgbGF3IHNlcnZpY2VzIzgwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE4LjAwLjAwI0ZhbWlseSBsYXcgc2VydmljZXMjODAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDEuMDAjRGl2b3JjZSBsYXcgc2VydmljZXMjODAuMTIuMTguMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDIuMDAjQWRvcHRpb24gbGF3IHNlcnZpY2VzIzgwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE4LjAzLjAwI0ltbWlncmF0aW9uIG9yIG5hdHVyYWxpemF0aW9uIGxhdyM4MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wNC4wMCNHdWFyZGlhbnNoaXAgb3IgY3VzdG9keSBsYXcgc2VydmljZXMjODAuMTIuMTguMDAuMDAKLXVuc3BzYzcjODAuMTMuMDAuMDAuMDAjUmVhbCBlc3RhdGUgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTUuMDAuMDAjTGVhc2UgYW5kIHJlbnRhbCBvZiBwcm9wZXJ0eSBvciBidWlsZGluZyM4MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNS4wMS4wMCNSZXNpZGVudGlhbCByZW50YWwjODAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTUuMDIuMDAjQ29tbWVyY2lhbCBvciBpbmR1c3RyaWFsIGZhY2lsaXR5IHJlbnRhbCM4MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNS4wMy4wMCNMYW5kIGxlYXNlcyM4MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNi4wMC4wMCNTYWxlIG9mIHByb3BlcnR5IGFuZCBidWlsZGluZyM4MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNi4wMS4wMCNSZWFsIGVzdGF0ZSBicm9rZXJzIG9yIGFnZW50cyM4MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNi4wMi4wMCNSZWFsIGVzdGF0ZSBhdWN0aW9uIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAzLjAwI1NhbGUgb2YgcmVzaWRlbnRpYWwgbGFuZCM4MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNi4wNC4wMCNTYWxlIG9mIGNvbW1lcmNpYWwgb3IgaW5kdXN0cmlhbCBsYW5kIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjA1LjAwI1NhbGUgb2YgY29tbWVyY2lhbCBidWlsZGluZyM4MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNy4wMC4wMCNFc2Nyb3cgYW5kIHRpdGxlIHNlcnZpY2VzIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE3LjAxLjAwI1RpdGxlIHJlY29udmV5YW5jZSBzZXJ2aWNlcyM4MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNy4wMi4wMCNUaXRsZSBzZWFyY2ggc2VydmljZXMjODAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTcuMDMuMDAjRXNjcm93IGFjY291bnQgc2VydmljZXMjODAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTguMDAuMDAjUmVhbCBlc3RhdGUgbWFuYWdlbWVudCBzZXJ2aWNlcyM4MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xOC4wMS4wMCNQcm9wZXJ0eSBtYW5hZ2VtZW50IzgwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE4LjAyLjAwI1JlYWwgZXN0YXRlIGFwcHJhaXNhbCBzZXJ2aWNlcyM4MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xOC4wMy4wMCNSZWFsIGVzdGF0ZSBsaXN0aW5nIHNlcnZpY2VzIzgwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzgwLjE0LjAwLjAwLjAwI01hcmtldGluZyBhbmQgZGlzdHJpYnV0aW9uIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjAwLjAwI01hcmtldCByZXNlYXJjaCM4MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wMS4wMCNNYXJrZXRpbmcgYW5hbHlzaXMjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDIuMDAjRGlzdHJpYnV0aXZlIG9yIHNlcnZpY2UgdHJhZGUgc3RhdGlzdGljcyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wMy4wMCNDb21tb2RpdHkgcHJpY2UgZm9yZWNhc3RpbmcjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDQuMDAjUHJlcGFyYXRpb24gb2YgY29tbW9kaXR5IG1hcmtldCBzdXJ2ZXlzIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjA1LjAwI01hcmtldGluZyBwbGFucyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wNi4wMCNJbnRlcm5ldCBiYXNlZCBtYXJrZXQgcmVzZWFyY2gjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDAuMDAjU2FsZXMgYW5kIGJ1c2luZXNzIHByb21vdGlvbiBhY3Rpdml0aWVzIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjAxLjAwI1NhbGVzIHByb21vdGlvbiBzZXJ2aWNlcyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wMi4wMCNQdWJsaWMgcmVsYXRpb24gc2VydmljZXMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDMuMDAjVGVsZW1hcmtldGluZyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wNC4wMCNCcmFuZGluZyBvZiBwcm9kdWN0IG5hbWluZyBzZXJ2aWNlcyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wNS4wMCNQcm9tb3Rpb25hbCBtZXJjaGFuZGlzZSM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wNi4wMCNEaXJlY3QgbWFya2V0aW5nIGZ1bGZpbGxtZW50IzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA3LjAwI0V2ZW50cyBtYW5hZ2VtZW50IzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA4LjAwI0xldHRlciBzaG9wIHNlcnZpY2VzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA5LjAwI1Nwb25zb3JzaGlwIG9mIGV2ZW50IG9yIGNlbGVicml0eSM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4xMC4wMCNDbG9zZSBvdXRzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjAwLjAwI0Rpc3RyaWJ1dGlvbiM4MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wMS4wMCNEaXJlY3Qgc2FsZXMgc2VydmljZXMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDIuMDAjV2hvbGVzYWxlIGRpc3RyaWJ1dGlvbiBzZXJ2aWNlcyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wMy4wMCNSZXRhaWwgZGlzdHJpYnV0aW9uIHNlcnZpY2VzIzgwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjA0LjAwI0ZyYW5jaGlzZSBvcGVyYXRpb25zIzgwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjA1LjAwI0F1Y3Rpb24gc2VydmljZXMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTguMDAuMDAjTWFpbGluZyBzZXJ2aWNlcyM4MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xOC4wMS4wMCNNYWlsaW5nIGxpc3QgY29tcGlsYXRpb24gc2VydmljZXMjODAuMTQuMTguMDAuMDAKLXVuc3BzYzcjODAuMTQuMTguMDIuMDAjTWFpbGluZyBsaXN0IG1hbmFnZW1lbnQgc2VydmljZSM4MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xOC4wMy4wMCNBZGRyZXNzaW5nIHNlcnZpY2UjODAuMTQuMTguMDAuMDAKLXVuc3BzYzcjODAuMTUuMDAuMDAuMDAjVHJhZGUgcG9saWN5IGFuZCBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wMC4wMCNUcmFkZSBmYWNpbGl0YXRpb24jODAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDEuMDAjQ29tbW9kaXR5IHBvbGljeSBvciBwcm9qZWN0aW9ucyBzZXJ2aWNlcyM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wMi4wMCNUcmFkZSBleHBhbnNpb24jODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDMuMDAjVHJhZGUgaW5mb3JtYXRpb24gc2VydmljZXMjODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDQuMDAjVHJhZGUgcHJvbW90aW9uIHNlcnZpY2VzIzgwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjA1LjAwI011bHRpbmF0aW9uYWwgbWFya2V0aW5nIGVudGVycHJpc2VzIzgwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE2LjAwLjAwI0ludGVybmF0aW9uYWwgdHJhZGUgc2VydmljZXMjODAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDEuMDAjRXhwb3J0IGRldmVsb3BtZW50IzgwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE2LjAyLjAwI0ltcG9ydCBwbGFubmluZyM4MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wMy4wMCNFeHBvcnQgcHJvamVjdGlvbnMjODAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDQuMDAjSW1wb3J0IHByb2N1cmVtZW50IHNlcnZpY2VzIzgwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE2LjAwLjAwLjAwI0J1c2luZXNzIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjAwLjAwI01hbmFnZW1lbnQgc3VwcG9ydCBzZXJ2aWNlcyM4MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wMS4wMCNPZmZpY2UgYWRtaW5pc3RyYXRpb24gb3Igc2VjcmV0YXJpYWwgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDIuMDAjTWVldGluZyBwbGFubmluZyBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wMy4wMCNLZXlib2FyZCBlbnRyeSBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wNC4wMCNDbGVyaWNhbCBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wNS4wMCNGbGVldCBtYW5hZ2VtZW50IHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjA2LjAwI0RhdGEgYXJjaGl2aW5nIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjA3LjAwI0F1ZGlvIHZpc3VhbCBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNi4wMC4wMCNCdXNpbmVzcyBmYWNpbGl0aWVzIG92ZXJzaWdodCM4MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNi4wMS4wMCNQcm9wZXJ0eSBtYW5hZ21lbnQgc2VydmljZXMjODAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjODEuMDAuMDAuMDAuMDAjRW5naW5lZXJpbmcgYW5kIFJlc2VhcmNoIGFuZCBUZWNobm9sb2d5IEJhc2VkIFNlcnZpY2VzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjAwLjAwLjAwI1Byb2Zlc3Npb25hbCBlbmdpbmVlcmluZyBzZXJ2aWNlcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wMC4wMCNDaXZpbCBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wMS4wMCNXZWxsIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjAyLjAwI1RlY2huaWNhbCBkcmF3aW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjAzLjAwI0hhcmJvciBvciB3YXRlciBwb3J0cyBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wNS4wMCNTdHJ1Y3R1cmFsIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA2LjAwI05hdmFsIGFyY2hpdGVjdHVyZSM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wNy4wMCNEYW0gZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDguMDAjQXJjaGl0ZWN0dXJhbCBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wOS4wMCNBaXJwb3J0IGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjEwLjAwI0hpZ2h3YXkgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMTEuMDAjUmFpbHdheSBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNi4wMC4wMCNNZWNoYW5pY2FsIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjAxLjAwI01lY2hhbmljYWwgZHJhd2luZyM4MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNi4wMi4wMCNNZWNoYW5pY2FsIHByb2R1Y3QgZW5jbG9zdXJlcyBkZXNpZ24jODEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTYuMDMuMDAjTWFjaGluZSB0b29sIGRlc2lnbiM4MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNi4wNC4wMCNQb3dlciB0cmFuc21pc3Npb24gZGVzaWduIzgxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE3LjAwLjAwI0VsZWN0cmljYWwgYW5kIGVsZWN0cm9uaWMgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTcuMDEuMDAjRWxlY3RyaWNhbCBlbmdpbmVlcmluZyBzZXJ2aWNlcyM4MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNy4wMi4wMCNFbGVjdHJvbmljIGNpcmN1aXQgZGVzaWduIzgxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE4LjAwLjAwI0NoZW1pY2FsIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE4LjAxLjAwI1BsYXN0aWNzIGVuZ2luZWVyaW5nIzgxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE5LjAwLjAwI09pbCBhbmQgZ2FzIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE5LjAxLjAwI0RyaWxsaW5nIGVuZ2luZWVyaW5nIGZvciBvaWwgb3IgZ2FzIzgxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE5LjAyLjAwI1Byb2R1Y3Rpb24gZW5naW5lZXJpbmcgZm9yIG9pbCBvciBnYXMjODEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDMuMDAjUmVzZXJ2b2lyIGVuZ2luZWVyaW5nIGZvciBvaWwgb3IgZ2FzIzgxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzgxLjEwLjIwLjAwLjAwI01pbmluZyBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMC4wMS4wMCNIeWRyYXVsaWMgbWluaW5nIzgxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIxLjAwLjAwI09jZWFuIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIxLjAxLjAwI0NvYXN0YWwgZW5naW5lZXJpbmcjODEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjIuMDAuMDAjVHJhbnNwb3J0YXRpb24gZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjIuMDEuMDAjVHJhZmZpYyBlbmdpbmVlcmluZyM4MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMi4wMi4wMCNVcmJhbiB0cmFuc3BvcnQgbmV0d29yayM4MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMi4wMy4wMCNJbmxhbmQgd2F0ZXJ3YXlzIzgxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIzLjAwLjAwI0Flcm9uYXV0aWNhbCBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMy4wMS4wMCNBdmlvbmljcyBkZXNpZ24jODEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjQuMDAuMDAjQXZpb25pY3MgZGVzaWduIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjAwLjAwLjAwI0NvbXB1dGVyIHNlcnZpY2VzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjAwLjAwI1NvZnR3YXJlIG9yIGhhcmR3YXJlIGVuZ2luZWVyaW5nIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjAxLjAwI01haW5mcmFtZSBzb2Z0d2FyZSBhcHBsaWNhdGlvbnMgZGVzaWduIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjAyLjAwI1BlcnNvbmFsIGNvbXB1dGVyIChQQykgYXBwbGljYXRpb24gZGVzaWduIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjAzLjAwI1N5c3RlbXMgaW50ZWdyYXRpb24gZGVzaWduIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA0LjAwI0FwcGxpY2F0aW9uIHByb2dyYW1taW5nIHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA1LjAwI09wZXJhdGluZyBzeXN0ZW0gcHJvZ3JhbW1pbmcgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDYuMDAjQ2xpZW50IG9yIHNlcnZlciBwcm9ncmFtbWluZyBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wNy4wMCNFUlAgb3IgZGF0YWJhc2UgYXBwbGljYXRpb25zIHByb2dyYW1taW5nIHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA4LjAwI0FwcGxpY2F0aW9uIGltcGxlbWVudGF0aW9uIHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA5LjAwI0ludGVybmV0IG9yIGludHJhbmV0IGNsaWVudCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4xMC4wMCNJbnRlcm5ldCBvciBpbnRyYW5ldCBzZXJ2ZXIgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMTEuMDAjSHVtYW4gcmVzb3VyY2VzIHByb2R1Y3Rpdml0eSBhdWRpdHMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDAuMDAjQ29tcHV0ZXIgcHJvZ3JhbW1lcnMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDEuMDAjUHJvZ3JhbW1pbmcgZm9yIFZpc3VhbCBCYXNpYyM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wMi4wMCNQcm9ncmFtbWluZyBmb3IgSmF2YSM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wMy4wMCNQcm9ncmFtbWluZyBmb3IgSFRNTCM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wNC4wMCNQcm9ncmFtbWluZyBmb3IgQUxHT0wjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDUuMDAjUHJvZ3JhbW1pbmcgZm9yIEFzc2VtYmxlciM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wNi4wMCNQcm9ncmFtbWluZyBmb3IgQmFzaWMjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDcuMDAjUHJvZ3JhbW1pbmcgZm9yIEMgb3IgQysrIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA4LjAwI1Byb2dyYW1taW5nIGZvciBDT0JPTCM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wOS4wMCNQcm9ncmFtbWluZyBmb3IgRk9SVFJBTiM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4xMC4wMCNQcm9ncmFtbWluZyBmb3IgUGFzY2FsIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjExLjAwI1Byb2dyYW1taW5nIGZvciBQTC8xIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjEyLjAwI1Byb2dyYW1taW5nIG9yIFByb3ByaWV0YXJ5IExhbmd1YWdlcyM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wMC4wMCNNYW5hZ2VtZW50IGluZm9ybWF0aW9uIHN5c3RlbXMgKE1JUykjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDEuMDAjV2lkZSBhcmVhIG5ldHdvcmsgY29tbXVuaWNhdGlvbnMgZGVzaWduIzgxLjExLjE3LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjAyLjAwI0xvY2FsIGFyZWEgbmV0d29yayBjb21tdW5pY2F0aW9ucyBkZXNpZ24jODEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDMuMDAjRWxlY3Ryb25pYyBkYXRhIGludGVyY2hhbmdlIChFREkpIGRlc2lnbiM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wNC4wMCNEYXRhYmFzZSBkZXNpZ24jODEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDUuMDAjU3lzdGVtcyBhcmNoaXRlY3R1cmUjODEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDAuMDAjU3lzdGVtIGFkbWluaXN0cmF0b3JzIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjAxLjAwI0NvbXB1dGVyIG9yIG5ldHdvcmsgb3IgaW50ZXJuZXQgc2VjdXJpdHkjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDIuMDAjTWFpbmZyYW1lIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjAzLjAwI0xvY2FsIGFyZWEgbmV0d29yayAoTEFOKSBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA0LjAwI1dpZGUgYXJlYSBuZXR3b3JrIChXQU4pIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDUuMDAjUHJvcHJpZXRhcnkgb3IgbGljZW5zZWQgc3lzdGVtcyBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA2LjAwI0RhdGFiYXNlIGFuYWx5c2lzIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA3LjAwI0RhdGEgc3RvcmFnZSM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wOC4wMCNTeXN0ZW1zIGFuYWx5c2lzIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA5LjAwI1N5c3RlbSBpbnN0YWxsYXRpb24jODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTAuMDAjU29mdHdhcmUgY29kaW5nIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjExLjAwI1RlY2huaWNhbCBzdXBwb3J0IG9yIGhlbHAgZGVzayBzZXJ2aWNlcyM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xMi4wMCNDb21wdXRlciBoYXJkd2FyZSBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjEzLjAwI0NvbXB1dGVyIHNvZnR3YXJlIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTQuMDAjQ28gbG9jYXRpb24gc2VydmljZSM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xNS4wMCNQcmludGVyIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IHNlcnZpY2VzIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjE2LjAwI01haW5mcmFtZSBjb21wdXRlciBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjE3LjAwI1RlbGVjb20gZXF1aXBtZW50IG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTkuMDAuMDAjSW5mb3JtYXRpb24gcmV0cmlldmFsIHN5c3RlbXMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTkuMDEuMDAjRGF0YWJhc2UgaW5mb3JtYXRpb24gcmV0cmlldmFsIzgxLjExLjE5LjAwLjAwCi11bnNwc2M3IzgxLjExLjE5LjAyLjAwI09uIGxpbmUgZGF0YWJhc2UgaW5mb3JtYXRpb24gcmV0cmlldmFsIzgxLjExLjE5LjAwLjAwCi11bnNwc2M3IzgxLjExLjE5LjAzLjAwI1JlbW90ZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwjODEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDAuMDAjRGF0YSBzZXJ2aWNlcyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wMS4wMCNPbiBsaW5lIGRhdGEgcHJvY2Vzc2luZyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wMi4wMCNEYXRhIHByb2Nlc3Npbmcgb3IgcHJlcGFyYXRpb24gc2VydmljZXMjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDMuMDAjRGF0YSBjZW50ZXIgc2VydmljZXMjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDQuMDAjRGlzYXN0ZXIgcmVjb3Zlcnkgc2VydmljZXMjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDUuMDAjRG9jdW1lbnQgc2Nhbm5pbmcgc2VydmljZSM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wNi4wMCNEYXRhIHN0b3JhZ2Ugc2VydmljZSM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wNy4wMCNDb250ZW50IG9yIGRhdGEgc3RhbmRhcmRpemF0aW9uIHNlcnZpY2VzIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjAwLjAwI0ludGVybmV0IHNlcnZpY2VzIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjAxLjAwI0ludGVybmV0IHNlcnZpY2UgcHJvdmlkZXJzIChJU1ApIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjAyLjAwI0VsZWN0cm9uaWMgbWFpbCBzZXJ2aWNlIHByb3ZpZGVyIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjAzLjAwI1dvcmxkIHdpZGUgd2ViIChXV1cpIHNpdGUgZGVzaWduIHNlcnZpY2VzIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjA0LjAwI1dlYiBzZWFyY2ggZW5naW5lIHByb3ZpZGVycyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wNS4wMCNXb3JsZCB3aWRlIHdlYiAoV1dXKSBzaXRlIG9wZXJhdGlvbiAoaG9zdCkgc2VydmljZXMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDYuMDAjQXBwbGljYXRpb24gc2VydmljZSBwcm92aWRlcnMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDcuMDAjSW50ZXJuZXQgZG9tYWluIG5hbWVzIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIyLjAwLjAwI1NvZnR3YXJlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIyLjAxLjAwI01haW50ZW5hbmNlIGFuZCBzdXBwb3J0IGZlZXMjODEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjIuMDIuMDAjU29mdHdhcmUgcGF0Y2hlcyBvciB1cGdyYWRlcyM4MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM4MS4xMi4wMC4wMC4wMCNFY29ub21pY3MjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTUuMDAuMDAjRWNvbm9taWMgYW5hbHlzaXMjODEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTUuMDEuMDAjTWFjcm8gZWNvbm9taWMgYW5hbHlzaXMjODEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTUuMDIuMDAjTWljcm8gZWNvbm9taWMgYW5hbHlzaXMjODEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTUuMDMuMDAjRWNvbm9tZXRyaWNzIzgxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE1LjA0LjAwI0Vjb25vbWljIGZvcmVjYXN0cyM4MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wMC4wMCNNb25ldGFyeSBzeXN0ZW1zIGFuZCBpc3N1ZXMjODEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDEuMDAjTW9uZXRhcnkgcG9saWN5IzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjAyLjAwI01vbmV0YXJ5IHN5c3RlbXMjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDMuMDAjTW9uZXRhcnkgYW5hbHlzaXMjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDQuMDAjTW9uZXRhcnkgbGlxdWlkaXR5IzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjA1LjAwI1ByZWNpb3VzIG1ldGFscyByZXNlcnZlcyM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wNi4wMCNGb3JlaWduIGV4Y2hhbmdlIGNvbnRyb2wjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDcuMDAjQ3VycmVuY3kgZXhjaGFuZ2UgbWFya2V0cyM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMy4wMC4wMC4wMCNTdGF0aXN0aWNzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjAwLjAwI01ldGhvZG9sb2d5IGFuZCBhbmFseXNpcyM4MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wMS4wMCNGYWN0b3IgYW5hbHlzaXMjODEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDIuMDAjTXVsdGl2YXJpYXRlIGFuYWx5c2lzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjAzLjAwI1JlZ3Jlc3Npb24gYW5hbHlzaXMjODEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDQuMDAjU2FtcGxpbmcgc3VydmV5cyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wNS4wMCNUaW1lIHNlcmllcyBhbmFseXNpcyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4wMC4wMC4wMCNNYW51ZmFjdHVyaW5nIHRlY2hub2xvZ2llcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wMC4wMCNRdWFsaXR5IGNvbnRyb2wjODEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDEuMDAjTWF0ZXJpYWxzIHRlc3RpbmcjODEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDIuMDAjTWF0ZXJpYWxzIHN5bnRoZXNpcyM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wMy4wMCNNYXRlcmlhbHMgaW5zcGVjdGlvbiM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wNC4wMCNFcXVpcG1lbnQgdGVzdCBvciBjYWxpYnJhdGlvbiM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wNS4wMCNQcm9kdWN0aW9uIHN0YW5kYXJkcyBkZXZlbG9wbWVudCM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wNi4wMCNQcm9kdWN0IHRlc3RpbmcjODEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDAuMDAjU3VwcGx5IGNoYWluIG1hbmFnZW1lbnQjODEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDEuMDAjTG9naXN0aWNzIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjAyLjAwI1RyYW5zaXQgYW5hbHlzaXMjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDMuMDAjVHJhbnNwb3J0IGZpbmFuY2Ugb3IgZWNvbm9taWNzIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjA0LjAwI1RyYW5zcG9ydCBmYWNpbGl0YXRpb24jODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDUuMDAjVHJhbnNwb3J0IGluZnJhc3RydWN0dXJlIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjA2LjAwI1RyYW5zcG9ydCBwbGFubmluZyM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNy4wMC4wMCNQcm9kdWN0aW9uIHBsYW5uaW5nIGFuZCBjb250cm9sIzgxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjAxLjAwI1Byb2R1Y3Rpb24gcGxhbm5pbmcjODEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDIuMDAjUHJvZHVjdGlvbiBjb250cm9sIzgxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjAzLjAwI1Byb2R1Y3Rpb24gc2NoZWR1bGluZyM4MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNy4wNC4wMCNQcm9kdWN0aW9uIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBvciBhbmFseXNpcyBzZXJ2aWNlcyM4MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wMC4wMCNGYWNpbGl0aWVzIG1hbmFnZW1lbnQjODEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDEuMDAjU2FmZXR5IG9yIHJpc2sgYW5hbHlzaXMjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDIuMDAjSW5kdXN0cmlhbCBoeWdpZW5lIG9yIHZlbnRpbGF0aW9uIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjAzLjAwI0Fjb3VzdGljcyBvciBub2lzZSBjb250cm9sIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjA0LjAwI0VxdWlwbWVudCBpbnNwZWN0aW9uIHNlcnZpY2UjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDUuMDAjQnVpbGRpbmcgaW5zcGVjdGlvbiBzZXJ2aWNlIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjA2LjAwI1Bvd2VyIGxpbmUgaW5zcGVjdGlvbiBzZXJ2aWNlIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjA3LjAwI1BsdW1iaW5nIG9yIHNld2VyIGluc3BlY3Rpb24gc2VydmljZSM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4wMC4wMC4wMCNFYXJ0aCBzY2llbmNlIHNlcnZpY2VzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjE1LjE1LjAwLjAwI01ldGVvcm9sb2d5IzgxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE1LjE1LjAxLjAwI0NsaW1hdG9sb2d5IzgxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE1LjAyLjAwI01ldGVvcm9sb2dpY2FsIHNlcnZpY2VzIzgxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE1LjAzLjAwI0h5ZHJvbWV0ZW9yb2xvZ3kjODEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTYuMDAuMDAjQ2FydG9ncmFwaHkjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTYuMDEuMDAjTWFwcGluZyM4MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wMi4wMCNNYXAgcHJvZHVjdGlvbiM4MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wMy4wMCNQaG90b2dyYW1tZXRyeSM4MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wNC4wMCNMYW5kIHN1cnZleWluZyM4MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wMC4wMCNHZW9sb2d5IzgxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjAxLjAwI1Bob3RvZ2VvbG9neSM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wMi4wMCNTdHJhdGlncmFwaGljIGdlb2xvZ3kjODEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDMuMDAjR2VvbG9naWNhbCBzdXJ2ZXlzIzgxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjA0LjAwI0dlb2xvZ2ljYWwgZXhwbG9yYXRpb24jODEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDUuMDAjQXJjaGFlb2xvZ2ljYWwgc2VydmljZXMjODEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDAuMDAjT2NlYW5vZ3JhcGh5IGFuZCBoeWRyb2xvZ3kjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDEuMDAjT2NlYW5vZ3JhcGhpYyBzdXJ2ZXkjODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDIuMDAjRXN0dWFyaW5lIG9jZWFub2dyYXBoeSM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMy4wMCNQaHlzaWNhbCBvY2Vhbm9ncmFwaHkjODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDQuMDAjSHlkcm9sb2dpY2FsIHN1cnZleXMjODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDUuMDAjQmF0aHltZXRyaWMgc3VydmV5cyM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wNi4wMCNVbmRlcndhdGVyIGV4cGxvcmF0aW9uIzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjAwLjAwI0dlb3BoeXNpY3MjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTkuMDEuMDAjR2VvcGh5c2ljYWwgc3VydmV5cyM4MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOS4wMi4wMCNHZW9waHlzaWNhbCBleHBsb3JhdGlvbiM4MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOS4wMy4wMCNHZW9waHlzaWNhbCBwaG90byBpbnRlcnByZXRhdGlvbiM4MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOS4wNC4wMCNBZXJvIG1hZ25ldGljIGdlb3BoeXNpY3MjODEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjODIuMDAuMDAuMDAuMDAjRWRpdG9yaWFsIGFuZCBEZXNpZ24gYW5kIEdyYXBoaWMgYW5kIEZpbmUgQXJ0IFNlcnZpY2VzIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEwLjAwLjAwLjAwI0FkdmVydGlzaW5nIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjAwLjAwI1ByaW50IGFkdmVydGlzaW5nIzgyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjAxLjAwI0JpbGxib2FyZCBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wMi4wMCNQb3N0ZXIgYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDMuMDAjTWFnYXppbmUgYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDQuMDAjTmV3c3BhcGVyIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjA1LjAwI0hhbmRiaWxsIG9yIGNvdXBvbiBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wNi4wMCNUcmFuc2l0IGFkdmVydGlzaW5nIHNlcnZpY2VzIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjA3LjAwI1Nob3BwaW5nIG5ld3Mgb3IgYWR2ZXJ0aXNpbmcgb3IgZGlzdHJpYnV0aW9uIHNlcnZpY2UjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDguMDAjWWVsbG93ICBwYWdlcyBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNi4wMC4wMCNCcm9hZGNhc3QgYWR2ZXJ0aXNpbmcjODIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTYuMDEuMDAjUmFkaW8gYWR2ZXJ0aXNpbmcjODIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTYuMDIuMDAjVGVsZXZpc2lvbiBhZHZlcnRpc2luZyM4Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNi4wMy4wMCNJbnRlcm5ldCBhZHZlcnRpc2luZyM4Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNy4wMC4wMCNBZXJpYWwgYWR2ZXJ0aXNpbmcjODIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTcuMDEuMDAjQmFubmVyIGFkdmVydGlzaW5nIHNlcnZpY2VzIzgyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE3LjAyLjAwI1NreXdyaXRpbmcgYWR2ZXJ0aXNpbmcgc2VydmljZXMjODIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTguMDAuMDAjQWR2ZXJ0aXNpbmcgYWdlbmN5IHNlcnZpY2VzIzgyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEwLjE4LjAxLjAwI0FkdmVydGlzaW5nIGNhbXBhaWduIHNlcnZpY2VzIzgyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjAwLjAwLjAwI1dyaXRpbmcgYW5kIHRyYW5zbGF0aW9ucyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNS4wMC4wMCNUZWNobmljYWwgd3JpdGluZyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNS4wMS4wMCNJbnN0cnVjdGlvbiB3cml0aW5nIHNlcnZpY2VzIzgyLjExLjE1LjAwLjAwCi11bnNwc2M3IzgyLjExLjE1LjAyLjAwI01hbnVhbCB3cml0aW5nIHNlcnZpY2VzIzgyLjExLjE1LjAwLjAwCi11bnNwc2M3IzgyLjExLjE1LjAzLjAwI0FjYWRlbWljIG9yIHNjaWVudGlmaWMgYXJ0aWNsZSB3cml0aW5nIzgyLjExLjE1LjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAwLjAwI05vbiB0ZWNobmljYWwgd3JpdGluZyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNi4wMS4wMCNMZXR0ZXIgd3JpdGluZyBzZXJ2aWNlcyM4Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNi4wMi4wMCNSZXN1bWUgd3JpdGluZyBzZXJ2aWNlcyM4Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNi4wMy4wMCNDb3VydCByZXBvcnRpbmcgc2VydmljZXMjODIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTYuMDQuMDAjVHJhbnNjcmliaW5nIHNlcnZpY2VzIzgyLjExLjE2LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjAwLjAwI0NyZWF0aXZlIHdyaXRpbmcjODIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDEuMDAjQXJ0aWNsZSB3cml0ZXJzIHNlcnZpY2VzIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjAyLjAwI0Jvb2sgYXV0aG9ycyBzZXJ2aWNlcyM4Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wMy4wMCNQb2V0cnkgYXV0aG9ycyBzZXJ2aWNlcyM4Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wNC4wMCNDb3B5d3JpdGluZyM4Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wNS4wMCNTcGVlY2ggd3JpdGluZyM4Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOC4wMC4wMCNFZGl0b3JpYWwgYW5kIHN1cHBvcnQgc2VydmljZXMjODIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTguMDEuMDAjRWRpdGluZyBzZXJ2aWNlcyM4Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOC4wMi4wMCNGYWN0IGNoZWNraW5nIHNlcnZpY2VzIzgyLjExLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjAzLjAwI1Byb29mcmVhZGluZyBzZXJ2aWNlcyM4Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOC4wNC4wMCNXcml0dGVuIHRyYW5zbGF0aW9uIHNlcnZpY2VzIzgyLjExLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjAwLjAwI05ld3MgYW5kIHB1YmxpY2l0eSBzZXJ2aWNlcyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOS4wMS4wMCNQcmVzcyByZWxlYXNlIHNlcnZpY2VzIzgyLjExLjE5LjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjAyLjAwI1NwZWNpYWwgaW50ZXJlc3QgbmV3c2xldHRlciBzZXJ2aWNlcyM4Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOS4wMy4wMCNOZXdzIGFnZW5jeSB3aXJlIHNlcnZpY2VzIzgyLjExLjE5LjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjA0LjAwI05ld3NwYXBlciBvciBhZHZlcnRpc2luZyBtYXRlcmlhbCBkZWxpdmVyeSBzZXJ2aWNlcyM4Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4wMC4wMC4wMCNSZXByb2R1Y3Rpb24gc2VydmljZXMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDAuMDAjUHJpbnRpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDEuMDAjUGxhbm5pbmcgb3IgbGF5b3V0IG9mIGdyYXBoaWMgcHJvZHVjdGlvbiM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wMi4wMCNUeXBlc2V0dGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wMy4wMCNEaWdpdGFsIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA0LjAwI0xldHRlcnByZXNzIG9yIHNjcmVlbiBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wNS4wMCNQcm9tb3Rpb25hbCBvciBhZHZlcnRpc2luZyBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wNi4wMCNQdWJsaWNhdGlvbiBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wNy4wMCNTdGF0aW9uZXJ5IG9yIGJ1c2luZXNzIGZvcm0gcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDguMDAjV3JhcCBvciB0YWcgb3IgbGFiZWwgb3Igc2VhbCBvciBiYWcgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDkuMDAjU2VjdXJpdHkgb3IgZmluYW5jaWFsIGluc3RydW1lbnRzIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjEwLjAwI1RleHRpbGUgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMTEuMDAjVGVjaG5pY2FsIG1hbnVhbCBhbmQgaW5zdHJ1Y3Rpb24gc2hlZXQgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMTIuMDAjRW1ib3NzaW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE2LjAwLjAwI0VuZ3JhdmluZyM4Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNi4wMS4wMCNDdXJyZW5jeSBlbmdyYXZpbmcjODIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTYuMDIuMDAjRW5ncmF2ZWQgcm9sbCBwcmludGluZyM4Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNi4wMy4wMCNNZXRhbCBwbGF0ZSBlbmdyYXZpbmcjODIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTcuMDAuMDAjUGhvdG9jb3B5aW5nIzgyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE3LjAxLjAwI0JsYWNrIGFuZCB3aGl0ZSBjb3B5IG9yIGNvbGxhdGluZyBzZXJ2aWNlcyM4Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNy4wMi4wMCNDb2xvciBjb3B5IG9yIGNvbGxhdGluZyBzZXJ2aWNlcyM4Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOC4wMC4wMCNQdWJsaXNoaW5nIzgyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE4LjAxLjAwI1RleHRib29rIG9yIHJlc2VhcmNoIHB1Ymxpc2hpbmcjODIuMTIuMTguMDAuMDAKLXVuc3BzYzcjODIuMTIuMTguMDIuMDAjQXV0aG9yIGZ1bmRlZCBwdWJsaXNoaW5nIHNlcnZpY2VzIzgyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjAwLjAwI0Jvb2tiaW5kaW5nIzgyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjAxLjAwI1RocmVhZCBzdGl0Y2ggYm9va2JpbmRpbmcjODIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDIuMDAjU3BpcmFsIGJpbmRpbmcjODIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDMuMDAjR2x1ZWQgYmluZGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wNC4wMCNDb21iIG9yIGNsYW1wIHR5cGUgYmluZGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wNS4wMCNCaW5kaW5nIHJlc3RvcmF0aW9uIG9yIHJlcGFpciM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wNi4wMCNCcm9uemluZyBvciBnaWxkaW5nIG9yIGVkZ2luZyBvciBkZWNrbGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4wMC4wMC4wMCNQaG90b2dyYXBoaWMgc2VydmljZXMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDAuMDAjRmlsbSBwcm9jZXNzaW5nIHNlcnZpY2VzIzgyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEzLjE1LjAxLjAwI1N0aWxsIGZpbG0gcHJvY2Vzc2luZyBvciByZXByb2R1Y3Rpb24jODIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDIuMDAjTW90aW9uIHBpY3R1cmUgZmlsbSBwcm9jZXNzaW5nIG9yIHJlcHJvZHVjdGlvbiM4Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wMy4wMCNNaWNyb2ZpY2hlIHNlcnZpY2VzIzgyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE1LjA0LjAwI0NvbG9yIHNlcGFyYXRpb24jODIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTYuMDAuMDAjUGhvdG9ncmFwaGVycyBhbmQgY2luZW1hdG9ncmFwaGVycyM4Mi4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMS4wMCNBZXJpYWwgcGhvdG9ncmFwaHkgc2VydmljZXMjODIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTYuMDIuMDAjTW90aW9uIHBpY3R1cmUgY2luZW1hdG9ncmFwaHkjODIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTYuMDMuMDAjVmlkZW8gcHJvZHVjdGlvbiBzZXJ2aWNlcyM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wNC4wMCNTdHVkaW8gcGhvdG9ncmFwaHkgc2VydmljZXMgb3Igc3RpbGwgcGhvdG9ncmFwaHMjODIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTQuMDAuMDAuMDAjR3JhcGhpYyBkZXNpZ24jODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDAuMDAjQXJ0IGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wMS4wMCNMYXlvdXQgb3IgZ3JhcGhpY3MgZWRpdGluZyBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wMi4wMCNBcnQgZGVzaWduIG9yIGdyYXBoaWNzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjAzLjAwI1Bob3RvY29tcG9zaXRpb24jODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDQuMDAjQ2hhcnQgb3IgZ3JhcGggZGVzaWduIHNlcnZpY2VzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjA1LjAwI0NvbXB1dGVyIGdlbmVyYXRlZCBkZXNpZ24gc2VydmljZXMjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDYuMDAjUGFja2FnZSBkZXNpZ24gc2VydmljZXMjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDcuMDAjU2lsa3NjcmVlbiBkZXNpZ24gc2VydmljZXMjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTYuMDAuMDAjR3JhcGhpYyBkaXNwbGF5IHNlcnZpY2VzIzgyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgyLjE0LjE2LjAxLjAwI1Bob3RvZ3JhcGhpYyBvciBwaWN0dXJlIG1vdW50aW5nIG9yIGZyYW1pbmcgc2VydmljZXMjODIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTYuMDIuMDAjQXJ0aWNsZSBkaXNwbGF5IGFycmFuZ2VtZW50IzgyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjAwLjAwLjAwI1Byb2Zlc3Npb25hbCBhcnRpc3RzIGFuZCBwZXJmb3JtZXJzIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjAwLjAwI1Zpc3VhbCBhcnQgc2VydmljZXMjODIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDEuMDAjUGFpbnRlcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDIuMDAjTGl0aG9ncmFwaGVycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wMy4wMCNDYXJ0b29uaXN0cyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wNC4wMCNTY3VscHRvcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDUuMDAjQ2VyYW1pY3MgbWFrZXJzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjA2LjAwI0dsYXNzIGJsb3dlcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDcuMDAjVGV4dGlsZSBzcGlubmVycyBvciBsb29tZXJzIG9yIHdlYXZlcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDguMDAjVGF4aWRlcm15IHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjAwLjAwI0NpcmN1cyBwZXJmb3JtZXJzIzgyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjAxLjAwI0FuaW1hbCB0cmFpbmVycyBzZXJ2aWNlcyM4Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNi4wMi4wMCNBY3JvYmF0cyBzZXJ2aWNlcyM4Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNi4wMy4wMCNNYWdpY2lhbnMgc2VydmljZXMjODIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDQuMDAjQ2xvd25zIHNlcnZpY2VzIzgyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjAwLjAwI1BlcmZvcm1pbmcgYXJ0cyBwcm9mZXNzaW9uYWxzIzgyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjAxLjAwI0FjdGluZyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wMi4wMCNDb21lZGlhbnMgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDMuMDAjRGFuY2VycyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wNC4wMCNNdXNpY2lhbnMgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDUuMDAjVm9jYWxpc3RzIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjA2LjAwI0Nob3Jlb2dyYXBoaWMgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODMuMDAuMDAuMDAuMDAjUHVibGljIFV0aWxpdGllcyBhbmQgUHVibGljIFNlY3RvciBSZWxhdGVkIFNlcnZpY2VzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjAwLjAwLjAwI1V0aWxpdGllcyM4My4wMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wMC4wMCNXYXRlciBhbmQgc2V3ZXIgdXRpbGl0aWVzIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjAxLjAwI1N1cHBseSBvZiB3YXRlciM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wMi4wMCNXYXRlciByZXNvdXJjZSBtYW5hZ2VtZW50IzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjAzLjAwI1dhdGVyIHF1YWxpdHkgY29udHJvbCBtYW5hZ2VtZW50IzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA0LjAwI1dhdGVyIGRpc3RyaWJ1dGlvbiBtYW5hZ2VtZW50IzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA1LjAwI1dhdGVyIHBvbGljeSBhZHZpc29yeSBzZXJ2aWNlcyM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wNi4wMCNXYXRlciB0cmVhdG1lbnQgc2VydmljZXMjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDcuMDAjRGVzYWxpbmF0aW9uIHNlcnZpY2VzIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA4LjAwI1Rvd24gd2F0ZXIjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDkuMDAjU2VydmljZSB3YXRlciM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4xMC4wMCNDaGlsbGVkIHdhdGVyIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjAwLjAwI09pbCBhbmQgZ2FzIHV0aWxpdGllcyM4My4xMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wMS4wMCNTdXBwbHkgb2YgbmF0dXJhbCBnYXMjODMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDIuMDAjU3VwcGx5IG9mIGZ1ZWwgb2lsIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjAzLjAwI09pbCBwaXBlbGluZSBzZXJ2aWNlcyM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wNC4wMCNHYXMgcGlwZWxpbmUgc2VydmljZXMjODMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDUuMDAjR2FzIGZhY2lsaXR5IGNoYXJnZSM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wMC4wMCNFbGVjdHJpYyB1dGlsaXRpZXMjODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDEuMDAjU3VwcGx5IG9mIHNpbmdsZSBwaGFzZSBlbGVjdHJpY2l0eSM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wMi4wMCNTdXBwbHkgb2YgdHdvIHBoYXNlIGVsZWN0cmljaXR5IzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjAzLjAwI1N1cHBseSBvZiB0aHJlZSBwaGFzZSBlbGVjdHJpY2l0eSM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNC4wMCNFbGVjdHJpYyBwb3dlciB0cmFuc21pc3Npb24gc2VydmljZXMjODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDUuMDAjSW5kdXN0cmlhbCBlbGVjdHJpYyBwb3dlciBkaXN0cmlidXRpb24jODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDYuMDAjUnVyYWwgZWxlY3RyaWNhbCBwb3dlciBkaXN0cmlidXRpb24jODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDcuMDAjTXVuaWNpcGFsIGVsZWN0cmljIHBvd2VyIGRpc3RyaWJ1dGlvbiM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOS4wMC4wMCNFbmVyZ3kgY29uc2VydmF0aW9uIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE5LjAxLjAwI0VuZXJneSBjb25zZXJ2YXRpb24gcHJvZ3JhbXMjODMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTkuMDIuMDAjRW5lcmd5IHVzZSByZWR1Y3Rpb24gbWVhc3VyZXMjODMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTAuMjAuMDAuMDAjRnVuZXJhbCBzZXJ2aWNlcyM4My4xMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4yMC4wMS4wMCNHcmF2ZSBkaWdnaW5nIzgzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzgzLjExLjAwLjAwLjAwI1RlbGVjb21tdW5pY2F0aW9ucyBtZWRpYSBzZXJ2aWNlcyM4My4wMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMC4wMCNMb2NhbCBhbmQgbG9uZyBkaXN0YW5jZSB0ZWxlcGhvbmUgY29tbXVuaWNhdGlvbnMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDEuMDAjTG9jYWwgdGVsZXBob25lIHNlcnZpY2UjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDIuMDAjTG9uZyBkaXN0YW5jZSB0ZWxlcGhvbmUgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDMuMDAjUGF5IHBob25lIHByb3ZpZGVyIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA0LjAwI1ByZSBwYWlkIHBob25lIGNhcmQgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDUuMDAjRGlyZWN0b3J5IGFzc2lzdGFuY2Ugc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDYuMDAjQ29uZmVyZW5jZSBjYWxsaW5nIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA3LjAwI0NhbGwgY2VudHJlIGJ1cmVhdSBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wOC4wMCNUb2xsIGZyZWUgaW5ib3VuZCB0ZWxlcGhvbmUgc2VydmljZSM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wOS4wMCNUZWxlcGhvbmUgZXF1aXBtZW50IHJlcGFpciBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wMC4wMCNNb2JpbGUgY29tbXVuaWNhdGlvbnMgc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTYuMDEuMDAjVGVsZWNvbW11bmljYXRpb24gc2lnbmFsIGVuaGFuY2VtZW50IG5ldHdvcmsgc2VydmljZXMjODMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTYuMDIuMDAjU2F0ZWxsaXRlIG9yIGVhcnRoIGNvbW11bmljYXRpb24gc3lzdGVtcyBzZXJ2aWNlcyM4My4xMS4xNi4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wMy4wMCNDZWxsdWxhciB0ZWxlcGhvbmUgc2VydmljZXMjODMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTYuMDQuMDAjUGFnaW5nIHNlcnZpY2VzIzgzLjExLjE2LjAwLjAwCi11bnNwc2M3IzgzLjExLjE3LjAwLjAwI0ZhY3NpbWlsZSBhbmQgdGVsZWdyYXBoIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE3LjAxLjAwI0ZhY3NpbWlsZSB0cmFuc21pc3Npb24gc2VydmljZXMjODMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTcuMDIuMDAjVGVsZWdyYXBoIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMS4xNy4wMC4wMAotdW5zcHNjNyM4My4xMS4xNy4wMy4wMCNUZWxleCB0cmFuc21pc3Npb24gc2VydmljZXMjODMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTguMDAuMDAjVGVsZXZpc2lvbiBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wMS4wMCNDYWJsZSB0ZWxldmlzaW9uIHNlcnZpY2VzIzgzLjExLjE4LjAwLjAwCi11bnNwc2M3IzgzLjExLjE4LjAyLjAwI0Nsb3NlZCBjaXJjdWl0IHRlbGV2aXNpb24gc2VydmljZXMjODMuMTEuMTguMDAuMDAKLXVuc3BzYzcjODMuMTEuMTguMDMuMDAjVGVsZXZpc2lvbiBhbnRlbm5hIGNvbnN0cnVjdGlvbiBvciByZW50YWwgc2VydmljZXMjODMuMTEuMTguMDAuMDAKLXVuc3BzYzcjODMuMTEuMTguMDQuMDAjVGVsZXZpc2lvbiBicm9hZGNhc3Rpbmcgc3RhdGlvbiBtYW5hZ2VtZW50IzgzLjExLjE4LjAwLjAwCi11bnNwc2M3IzgzLjExLjE5LjAwLjAwI1JhZGlvIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE5LjAxLjAwI1JhZGlvIGJyb2FkY2FzdGluZyBzdGF0aW9uIG1hbmFnZW1lbnQjODMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDIuMDAjQW1hdGV1ciByYWRpbyBuZXR3b3JrcyBvciBzZXJ2aWNlcyM4My4xMS4xOS4wMC4wMAotdW5zcHNjNyM4My4xMS4xOS4wMy4wMCNTbWFsbCBzY2FsZSByYWRpbyBzeXN0ZW1zIzgzLjExLjE5LjAwLjAwCi11bnNwc2M3IzgzLjExLjE5LjA0LjAwI1JhZGlvIHN0dWRpbyBvciBlcXVpcG1lbnQgc2VydmljZXMjODMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjAuMDAuMDAjRmliZXIgdGVsZWNvbW11bmljYXRpb25zIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIwLjAxLjAwI0RhcmsgZmliZXIjODMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjAuMDIuMDAjRGVuc2Ugd2F2ZWxlbmd0aCBkaXZpc2lvbiBtdWx0aXBsZXhpbmcgRFdETSM4My4xMS4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wMy4wMCNXYXZlIGRpdmlzaW9uIG11bHRpcGxleGluZyBXRE0jODMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjAuMDQuMDAjT2N4IG9wdGljYWwgY2FycmllciBzZXJ2aWNlIzgzLjExLjIwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjAwLjAwI1N3aXRjaGVkIGRpYWwgdXAgYW5kIGxlYXNlZCBkZWRpY2F0ZWQgbGluZSBjaXJjdWl0IHRlbGVjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wMS4wMCNIaWdoIHNwZWVkIGNpcmN1aXQgc3dpdGNoZWQgZGlhbCB1cCBzZXJ2aWNlcyM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wMi4wMCNJU0ROIGludGVncmF0ZWQgc2VydmljZXMgZGlnaXRhbCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjAzLjAwI1BvaW50IHRvIHBvaW50IGRpZ2l0YWwgdGVsZWNvbW11bmljYXRpb25zIGNpcmN1aXQjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDQuMDAjTXVsdGkgcG9pbnQgYW5hbG9nIHRlbGVjb21tdW5pY2F0aW9ucyBjaXJjdWl0IzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjA1LjAwI1BvaW50IHRvIHBvaW50IGFuYWxvZyB0ZWxlY29tbXVuaWNhdGlvbnMgY2lyY3VpdCM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wNi4wMCN4RFNMIGRpZ2l0YWwgc3Vic2NyaWJlciBsaW5lIzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjAwLjAwI0VuaGFuY2VkIHRlbGVjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wMS4wMCNBVE0gYXN5bmNyb25vdXMgdHJhbnNmZXIgbW9kZSBtYW5hZ2VkIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDIuMDAjRnJhbWUgcmVsYXkgcHVibGljIG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wMy4wMCNWUE4gdmlydHVhbCBwcml2YXRlIG5ldHdvcmsgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjA0LjAwI1g3NSBtYW5hZ2VkIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDUuMDAjWDI1IG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMi4wMC4wMC4wMCNJbmZvcm1hdGlvbiBzZXJ2aWNlcyM4My4wMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wMC4wMCNMaWJyYXJpZXMjODMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTUuMDEuMDAjR2VuZXJhbCBtdW5pY2lwYWwgcHVibGljIHVzZSBsaWJyYXJpZXMjODMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTUuMDIuMDAjQ29sbGVnZSBvciB1bml2ZXJzaXR5IGxpYnJhcmllcyM4My4xMi4xNS4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wMy4wMCNQcml2YXRlbHkgb3duZWQgbGlicmFyaWVzIzgzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjA0LjAwI05hdGlvbmFsIGdvdmVybm1lbnQgb3IgbWlsaXRhcnkgcG9zdCBsaWJyYXJpZXMjODMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDAuMDAjSW5mb3JtYXRpb24gY2VudGVycyM4My4xMi4wMC4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wMS4wMCNDaGFtYmVycyBvZiBjb21tZXJjZSM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wMi4wMCNUb3VyaXNtIGJvYXJkIHNlcnZpY2VzIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjAzLjAwI0NvbXB1dGVyaXplZCBpbmZvcm1hdGlvbiByZXRyaWV2YWwgc3lzdGVtcyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wNC4wMCNPbmxpbmUgZGF0YWJhc2UgaW5mb3JtYXRpb24gcmV0cmlldmFsIHN5c3RlbXMjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDUuMDAjUmVtb3RlIGRhdGFiYXNlIGluZm9ybWF0aW9uIHJldHJpZXZhbCBzZXJ2aWNlcyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wNi4wMCNTa2lwIHRyYWNpbmcjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDAuMDAjTWFzcyBjb21tdW5pY2F0aW9uIHNlcnZpY2VzIzgzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEyLjE3LjAxLjAwI1RlbGV2aXNpb24gcmVsYXRlZCBzZXJ2aWNlcyM4My4xMi4xNy4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wMi4wMCNSYWRpbyByZWxhdGVkIHNlcnZpY2VzIzgzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE3LjAzLjAwI0ludGVybmV0IHJlbGF0ZWQgc2VydmljZXMjODMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDQuMDAjQ2l0aXplbiB3YXJuaW5nIHN5c3RlbXMjODMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMDAuMDAuMDAuMDAjRmluYW5jaWFsIGFuZCBJbnN1cmFuY2UgU2VydmljZXMjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMDAuMDAuMDAjRGV2ZWxvcG1lbnQgZmluYW5jZSM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNS4wMC4wMCNEZXZlbG9wbWVudCBhc3Npc3RhbmNlIzg0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEwLjE1LjAxLjAwI0ZpbmFuY2lhbCBhc3Npc3RhbmNlIzg0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE1LjAyLjAwI1NhdmluZ3MgbW9iaWxpemF0aW9uIHByb2dyYW1zIzg0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE1LjAzLjAwI0d1YXJhbnRlZSBhZ3JlZW1lbnRzIzg0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE2LjAwLjAwI0FpZCBmaW5hbmNpbmcjODQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDEuMDAjQ28gZmluYW5jaW5nIzg0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE2LjAyLjAwI0JpIGxhdGVyYWwgb3IgbXVsdGkgbGF0ZXJhbCBhaWQjODQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDMuMDAjTm9uIGdvdmVybm1lbnRhbCBhaWQjODQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDQuMDAjR292ZXJubWVudCBhaWQjODQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDAuMDAjRGVidCBtYW5hZ2VtZW50Izg0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjAxLjAwI0RlYnQgbmVnb3RpYXRpb24jODQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDIuMDAjRGVidCByZW9yZ2FuaXphdGlvbiM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wMy4wMCNEZWJ0IHNlcnZpY2luZyM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wNC4wMCNEZWJ0IGNvbGxlY3Rpb24gc2VydmljZXMjODQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDUuMDAjUmVwb3NzZXNzaW9uIHNlcnZpY2VzIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjExLjAwLjAwLjAwI0FjY291bnRpbmcgYW5kIGF1ZGl0aW5nIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjAwLjAwI0FjY291bnRpbmcgc2VydmljZXMjODQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDEuMDAjQ29zdCBhY2NvdW50aW5nIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjAyLjAwI0ZpbmFuY2lhbCBhY2NvdW50aW5nIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjAzLjAwI1RheCBhY2NvdW50aW5nIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjA0LjAwI0Jvb2trZWVwaW5nIHNlcnZpY2VzIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjA1LjAwI1BheXJvbGwgYWNjb3VudGluZyBzZXJ2aWNlcyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wNi4wMCNCaWxsaW5nIHNlcnZpY2VzIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjA3LjAwI0ludmVudG9yeSBhY2NvdW50aW5nIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE2LjAwLjAwI0F1ZGl0IHNlcnZpY2VzIzg0LjExLjAwLjAwLjAwCi11bnNwc2M3Izg0LjExLjE2LjAxLjAwI1llYXIgZW5kIGF1ZGl0cyM4NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNi4wMi4wMCNRdWFydGVybHkgcmV2aWV3cyM4NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNi4wMy4wMCNJbnRlcm5hbCBhdWRpdHMjODQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTcuMDAuMDAjQ29ycG9yYXRlIGZpbmFuY2UjODQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTcuMDEuMDAjVHJlYXN1cnkgc2VydmljZXMjODQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTcuMDIuMDAjSW52ZXN0b3IgcmVsYXRpb25zIHNlcnZpY2VzIG9yIHByb2dyYW1zIzg0LjExLjE3LjAwLjAwCi11bnNwc2M3Izg0LjExLjE3LjAzLjAwI0J1ZGdldCBwcmVwYXJhdGlvbiBvciByZXZpZXcgc2VydmljZXMjODQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTguMDAuMDAjVGF4YXRpb24gaXNzdWVzIGFuZCBwcmVwYXJhdGlvbiM4NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xOC4wMS4wMCNUYXggcHJlcGFyZXJzIzg0LjExLjE4LjAwLjAwCi11bnNwc2M3Izg0LjExLjE4LjAyLjAwI1RheCBhZHZpc29yeSBzZXJ2aWNlcyM4NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4wMC4wMC4wMCNCYW5raW5nIGFuZCBpbnZlc3RtZW50Izg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjAwLjAwI0JhbmtpbmcgaW5zdGl0dXRpb25zIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjAxLjAwI1ByaXZhdGVseSBvd25lZCBiYW5rcyM4NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNS4wMi4wMCNQdWJsaWNseSBvd25lZCBiYW5rcyM4NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNS4wMy4wMCNDcmVkaXQgdW5pb25zIzg0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjA0LjAwI0RldmVsb3BtZW50IGZpbmFuY2UgaW5zdGl0dXRpb25zIzg0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjAwLjAwI0Z1bmRzIHRyYW5zZmVyIGFuZCBjbGVhcmFuY2UgYW5kIGV4Y2hhbmdlIHNlcnZpY2VzIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjAxLjAwI0Z1bmRzIGNsZWFyYW5jZSBzZXJ2aWNlcyM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wMi4wMCNMZXR0ZXIgb2YgY3JlZGl0IHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjAzLjAwI0N1cnJlbmN5IGV4Y2hhbmdlIHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjA0LjAwI1Nwb3QgZXhjaGFuZ2UgdHJhbnNhY3Rpb24gc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDUuMDAjQ3VycmVuY3kgY29udmVyc2lvbiBzZXJ2aWNlIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjA2LjAwI1JlbWl0dGFuY2UgcHJvY2Vzc2luZyBzZXJ2aWNlcyM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wMC4wMCNJbnZlc3RtZW50IGFkdmljZSM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wMS4wMCNJbnZlc3RtZW50IGFkdmlzZXJzIzg0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjAyLjAwI0ludmVzdG1lbnQgcG9saWN5Izg0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjAzLjAwI0ludmVzdG1lbnQgYW5hbHlzaXMjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDQuMDAjSW52ZXN0bWVudCBhZ3JlZW1lbnRzIzg0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjA1LjAwI01hcmtldCBkYXRhIzg0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjAwLjAwI1NlY3VyaXRpZXMgYW5kIGNvbW1vZGl0aWVzIG1hcmtldHMgc2VydmljZXMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDEuMDAjU3RvY2sgbWFya2V0IHRyYWRpbmcgc2VydmljZXMjODQuMTIuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDIuMDAjQ29tbW9kaXRpZXMgb3IgZnV0dXJlcyBtYXJrZXQgc2VydmljZXMjODQuMTIuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDMuMDAjR292ZXJubWVudCBib25kcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wNC4wMCNQcml2YXRlbHkgaXNzdWVkIGJvbmRzIzg0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjA1LjAwI1ByZWNpb3VzIG1ldGFscyBtYXJrZXQgc2VydmljZXMjODQuMTIuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMTkuMDAuMDAjTW9ydGdhZ2UgYmFua2luZyM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOS4wMS4wMCNIb3VzaW5nIGZpbmFuY2UjODQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTkuMDIuMDAjUmUgZmluYW5jaW5nIHNlcnZpY2VzIzg0LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE5LjAzLjAwI0NvbW1lcmNpYWwgbW9ydGdhZ2UgZmluYW5jZSM4NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM4NC4xMi4yMC4wMC4wMCNDYXNoIHZhdWx0IHNlcnZpY2VzIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjIwLjAxLjAwI0RlcG9zaXQgdmVyaWZpY2F0aW9uIHNlcnZpY2VzIzg0LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjAwLjAwLjAwI0luc3VyYW5jZSBhbmQgcmV0aXJlbWVudCBzZXJ2aWNlcyM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wMC4wMCNJbnN1cmFuY2Ugc2VydmljZXMgZm9yIHN0cnVjdHVyZXMgYW5kIHByb3BlcnR5IGFuZCBwb3NzZXNzaW9ucyM4NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wMS4wMCNCdWlsZGluZyBvciBidWlsZGluZyBjb250ZW50cyBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDIuMDAjSG9tZW93bmVycyBvciByZW50ZXJzIGluc3VyYW5jZSM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wMy4wMCNDYXIgb3IgdHJ1Y2sgaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjA0LjAwI0NhcmdvIGluc3VyYW5jZSM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wNS4wMCNNYXJpbmUgaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjA2LjAwI1JlaW5zdXJhbmNlIHNlcnZpY2VzIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjAwLjAwI0xpZmUgYW5kIGhlYWx0aCBhbmQgYWNjaWRlbnQgaW5zdXJhbmNlIzg0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjAxLjAwI0xpZmUgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjAyLjAwI0hlYWx0aCBvciBob3NwaXRhbGl6YXRpb24gaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjAzLjAwI0FjY2lkZW50YWwgaW5qdXJ5IGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wNC4wMCNEaXNhYmlsaXR5IGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wNS4wMCNXb3JrbWVucyBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDYuMDAjVW5lbXBsb3ltZW50IGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wNy4wMCNMaWFiaWxpdHkgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE3LjAwLjAwI1BlbnNpb24gZnVuZHMjODQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTcuMDEuMDAjRW1wbG95ZXIgYWRtaW5pc3RlcmVkIHBlbnNpb24gZnVuZHMjODQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTcuMDIuMDAjVW5pb24gb3IgZ3VpbGQgYWRtaW5pc3RlcmVkIHBlbnNpb24gZnVuZHMjODQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTguMDAuMDAjUmV0aXJlbWVudCBmdW5kcyM4NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xOC4wMS4wMCNTZWxmIGRpcmVjdGVkIG9yIGVtcGxveWVyIHNwb25zb3JlZCByZXRpcmVtZW50IGZ1bmRzIzg0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE4LjAyLjAwI1NlbGYgZGlyZWN0ZWQgb3Igc2VsZiBpbml0aWF0ZWQgcmV0aXJlbWVudCBwbGFucyM4NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM4NC4xNC4wMC4wMC4wMCNDcmVkaXQgYWdlbmNpZXMjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTUuMDAuMDAjR292ZXJubWVudGFsIGNyZWRpdCBhZ2VuY2llcyM4NC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNS4wMS4wMCNGYXJtIGNyZWRpdCBzZXJ2aWNlcyM4NC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNS4wMi4wMCNTbWFsbCBidXNpbmVzcyBsb2FuIGFnZW5jaWVzIzg0LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE1LjAzLjAwI01pbm9yaXR5IG93bmVkIGJ1c2luZXNzIHByb2dyYW1zIzg0LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE2LjAwLjAwI1BlcnNvbmFsIGNyZWRpdCBhZ2VuY2llcyM4NC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNi4wMS4wMCNDb25zdW1lciBjcmVkaXQgZ2F0aGVyaW5nIG9yIHJlcG9ydGluZyBzZXJ2aWNlcyM4NC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNi4wMi4wMCNDcmVkaXQgY2FyZCBzZXJ2aWNlIHByb3ZpZGVycyM4NC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNy4wMC4wMCNCdXNpbmVzcyBjcmVkaXQgYWdlbmNpZXMjODQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTcuMDEuMDAjQnVzaW5lc3MgY3JlZGl0IGdhdGhlcmluZyBvciByZXBvcnRpbmcgc2VydmljZXMjODQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTcuMDIuMDAjVmFsdWUgYWRkZWQgbmV0d29yayAoVkFOKSBzZXJ2aWNlcyM4NC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4NS4wMC4wMC4wMC4wMCNIZWFsdGhjYXJlIFNlcnZpY2VzIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEwLjAwLjAwLjAwI0NvbXByZWhlbnNpdmUgaGVhbHRoIHNlcnZpY2VzIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjAwLjAwI0hlYWx0aGNhcmUgY2VudGVycyM4NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wMS4wMCNFbWVyZ2VuY3kgb3Igc3VyZ2ljYWwgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDIuMDAjUHJpdmF0ZSBzcGVjaWFsaXplZCBjbGluaWMgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDMuMDAjTWVkaWNhbCBvZmZpY2Ugc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDQuMDAjUHN5Y2hpYXRyaWMgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDUuMDAjUmVzcGlyYXRvcnkgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDYuMDAjU3Vic3RhbmNlIGFidXNlIGhvc3BpdGFsIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA3LjAwI1VyZ2VudCBjYXJlIGNlbnRlcnMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDguMDAjTW9iaWxlIGhlYWx0aGNhcmUgY2VudGVycyBvciBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wOS4wMCNHeW5lY29sb2dpY2FsIG9yIG9ic3RldHJpY2FsIGhvc3BpdGFsIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE2LjAwLjAwI0hlYWx0aGNhcmUgcHJvdmlkZXIgc3VwcG9ydCBwZXJzb25zIzg1LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEwLjE2LjAxLjAwI051cnNpbmcgc2VydmljZXMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDIuMDAjTWlkd2lmZXJ5IG9yIGNoaWxkIGJpcnRoIHByZXBhcmF0aW9uIHNlcnZpY2VzIzg1LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE2LjAzLjAwI1BlcnNvbmFsIGNhcmUgc2VydmljZXMgaW4gc3BlY2lhbGl6ZWQgaW5zdGl0dXRpb25zIzg1LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE2LjA0LjAwI1BoeXNpY2lhbnMgcGVyc29ubmVsIGFzc2lzdGFuY2Ugc2VydmljZXMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDUuMDAjSG9tZSBoZWFsdGggYXNzaXN0YW50cyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wMC4wMCNIZWFsdGggYWRtaW5pc3RyYXRpb24gc2VydmljZXMjODUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDEuMDAjSGVhbHRoIHBvbGljeSM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wMi4wMCNIZWFsdGggbGVnaXNsYXRpb24gb3IgcmVndWxhdGlvbnMjODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDMuMDAjSGVhbHRoIHNlcnZpY2UgcGxhbm5pbmcjODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDQuMDAjSGVhbHRoIGVjb25vbWljcyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wNS4wMCNQdWJsaWMgaGVhbHRoIGFkbWluaXN0cmF0aW9uIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjA2LjAwI1RyYWRpdGlvbmFsIGhlYWx0aGNhcmUgc2VydmljZXMjODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDcuMDAjSGVhbHRoIHN5c3RlbXMgZXZhbHVhdGlvbiBzZXJ2aWNlcyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMS4wMC4wMC4wMCNEaXNlYXNlIHByZXZlbnRpb24gYW5kIGNvbnRyb2wjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDAuMDAjQ29udGFnaW91cyBkaXNlYXNlIHByZXZlbnRpb24gYW5kIGNvbnRyb2wjODUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDEuMDAjQWlkcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDIuMDAjUGFyYXNpdGljIGRpc2Vhc2UgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjAzLjAwI0Z1bmdhbCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDQuMDAjVHViZXJjdWxvc2lzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wNS4wMCNMZXByb3N5IHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wNi4wMCNCYWN0ZXJpYWwgZGlzZWFzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDcuMDAjU2V4dWFsbHkgdHJhbnNtaXR0ZWQgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA4LjAwI1ZpcmFsIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wOS4wMCNab29ub3RpYyBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMTAuMDAjVmFjY2luYXRpb24gc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMTEuMDAjUXVhcmFudGluZSBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMi4wMCNJbW11bml6YXRpb24gc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMTMuMDAjRGlzaW5zZWN0aXphdGlvbiBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xNC4wMCNFcGlkZW1pY3MgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjAwLjAwI05vbiBjb250YWdpb3VzIGRpc2Vhc2UgcHJldmVudGlvbiBhbmQgY29udHJvbCM4NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wMS4wMCNCb25lIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wMi4wMCNDYW5jZXIgb3IgbGV1a2VtaWEgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjAzLjAwI0VuZG9jcmluZSBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDQuMDAjSGVhcnQgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA1LjAwI0ltbXVub2xvZ2ljIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wNi4wMCNBbGxlcmdpZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA3LjAwI05ldXJvbG9naWNhbCBkaXNvcmRlcnMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA4LjAwI051dHJpdGlvbmFsIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wOS4wMCNSYWRpYXRpb24gc2lja25lc3MgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjEwLjAwI0RpZ2VzdGl2ZSBzeXN0ZW0gZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjExLjAwI0V5ZSBkaXNlYXNlIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xMi4wMCNSZXNwaXJhdG9yeSBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTMuMDAjVHJvcGljYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjE0LjAwI0NoaWxkaG9vZCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTUuMDAjRGlhcnJoZWFsIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xNi4wMCNBbGNvaG9saXNtIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xNy4wMCNEcnVnIGFkZGljdGlvbiBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDAuMDAjRGlzZWFzZSB2ZWN0b3JzIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wjODUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDEuMDAjVGlja3MgbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE3LjAwLjAwCi11bnNwc2M3Izg1LjExLjE3LjAyLjAwI1RzZXRzZSBmbGllcyBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDMuMDAjQmFjdGVyaWEgbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE3LjAwLjAwCi11bnNwc2M3Izg1LjExLjE3LjA0LjAwI01vc3F1aXRvIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4wMC4wMC4wMCNNZWRpY2FsIHByYWN0aWNlIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE1LjAwLjAwI1ByaW1hcnkgY2FyZSBwcmFjdGl0aW9uZXJzIHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE1LjAxLjAwI1ByaW1hcnkgY2FyZSBwaHlzaWNpYW5zIGhvbWUgdmlzaXRzIHNlcnZpY2VzIzg1LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE1LjAyLjAwI1ByaW1hcnkgY2FyZSBwaHlzaWNpYW5zIGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNS4wMy4wMCNQcmltYXJ5IGNhcmUgcGh5c2ljaWFucyBjb250cm9sIHNlcnZpY2VzIzg1LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE1LjA0LjAwI1ByaW1hcnkgY2FyZSBwaHlzaWNpYW5zIGVtZXJnZW5jeSBtZWRpY2FsIHNlcnZpY2VzIzg1LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjAwLjAwI01lZGljYWwgZG9jdG9ycyBzcGVjaWFsaXN0IHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjAxLjAwI0d5bmVjb2xvZ2ljIG9yIG9ic3RldHJpYyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wMi4wMCNOZXBocm9sb2d5IHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjAzLjAwI0NhcmRpb2xvZ3kgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDQuMDAjUHVsb21vbmFyeSBzcGVjaWFsaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wNS4wMCNHYXN0cm9lbnRlcm9sb2dpc3RzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA2LjAwI0dlcmlhdHJpYyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wNy4wMCNQc3ljaGlhdHJpc3Qgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDguMDAjUHN5Y2hvbG9naXN0cyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wOS4wMCNTdXJnZXJ5IHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjEwLjAwI09waHRoYWxtb2xvZ2lzdHMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTEuMDAjRGVybWF0b2xvZ3kgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTIuMDAjT3J0aG9wZWRpY3Mgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTMuMDAjUGVkaWF0cmljIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjE0LjAwI05lcnZvdXMgc3lzdGVtIHNwZWNpYWxpc3Qgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDAuMDAjSGVhbHRoY2FyZSBwcm92aWRlcnMgc3BlY2lhbGlzdHMgc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDEuMDAjUHN5Y2hvdGhlcmFwaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMi4wMCNPcHRvbWV0cmlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDMuMDAjUG9kaWF0cmlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDQuMDAjU3BlZWNoIHNwZWNpYWxpc3RzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjA1LjAwI0FjdXB1bmN0dXJpc3RzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjA2LjAwI0NoaXJvcHJhY3RvcnMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDAuMDAjTWVkaWNhbCBsYWJvcmF0b3JpZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDEuMDAjQmxvb2QgYW5hbHlzaXMgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wMi4wMCNCYWN0ZXJpb2xvZ2ljYWwgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wMy4wMCNCaW9sb2dpY2FsIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDQuMDAjUGF0aG9sb2dpY2FsIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDUuMDAjVXJpbmFseXNpcyBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA2LjAwI05ldXJvbG9naWNhbCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA3LjAwI1VsdHJhc291bmQgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wOC4wMCNYIHJheSBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA5LjAwI0Jsb29kIG9yIHNwZXJtIG9yIHRyYW5zcGxhbnQgb3JnYW4gYmFua3Mgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMTAuMDAjRHJ1ZyBvciBhbGNvaG9sIHNjcmVlbmluZyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOS4wMC4wMCNQaGFybWFjaXN0cyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOS4wMS4wMCNQaGFybWFjZXV0aWNhbCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM4NS4xMi4xOS4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOS4wMi4wMCNDb21tZXJjaWFsIHBoYXJtYWNldXRpY2FsIHNlcnZpY2VzIzg1LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAwLjAwI0RlbnRhbCBzZXJ2aWNlcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wMS4wMCNEZW50aXN0cyBzZXJ2aWNlcyM4NS4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wMi4wMCNEZW50YWwgaHlnaWVuaXN0cyBzZXJ2aWNlcyM4NS4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wMy4wMCNEZW50aXN0IHN1cHBvcnQgc3RhZmYgc2VydmljZXMjODUuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDQuMDAjT3JhbCBzdXJnZW9ucyBzZXJ2aWNlcyM4NS4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wNS4wMCNPcnRob2RvbnRpYyBzZXJ2aWNlcyM4NS4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wMC4wMCNSZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wMS4wMCNQaHlzaWNhbCB0aGVyYXB5IHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjAyLjAwI09jY3VwYXRpb25hbCB0aGVyYXB5IHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjAzLjAwI1JlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIGZvciBzdWJzdGFuY2UgYWJ1c2UjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDQuMDAjQXRobGV0aWMgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDUuMDAjRWF0aW5nIGRpc29yZGVycyBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNi4wMCNCcmFpbiBvciBzcGluYWwgY29yZCBpbmp1cnkgc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDcuMDAjQmxpbmQgb3IgdmlzaW9uIGltcGFpcmVkIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA4LjAwI1NwZWVjaCBvciBsYW5ndWFnZSB0aGVyYXB5Izg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA5LjAwI1JlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIGZvciBwZW9wbGUgd2l0aCBjaHJvbmljIGRpc2FiaWxpdGllcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMy4wMC4wMC4wMCNNZWRpY2FsIHNjaWVuY2UgcmVzZWFyY2ggYW5kIGV4cGVyaW1lbnRhdGlvbiM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wMC4wMCNFeHBlcmltZW50YWwgbWVkaWNpbmUgc2VydmljZXMjODUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDEuMDAjT3JnYW4gdHJhbnNwbGFudCBzZXJ2aWNlcyM4NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wMi4wMCNDbGluaWNhbCBodW1hbiBkcnVnIHRyaWFscyM4NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wMy4wMCNBbmltYWwgZXhwZXJpbWVudGF0aW9uIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjA0LjAwI0h1bWFuIGV4cGVyaW1lbnRhdGlvbiM4NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wNS4wMCNTcGFjZSBleHBlcmltZW50YXRpb24jODUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTYuMDAuMDAjTWVkaWNhbCBldGhpY3MjODUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTYuMDEuMDAjRXV0aGFuYXNpYSBpc3N1ZXMjODUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTYuMDIuMDAjTWVkaWNhbCBjb2RlIG9mIGNvbmR1Y3QjODUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTYuMDMuMDAjTWVkaWNhbCBzb2NpZXRpZXMjODUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTYuMDQuMDAjSW50ZXJuYXRpb25hbCBkcnVnIG1vbml0b3Jpbmcgc2VydmljZXMjODUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDAuMDAjTWVkaWNhbCBzY2llbmNlIGFuZCByZXNlYXJjaCM4NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wMS4wMCNQaGFybWFjZXV0aWNhbCByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wMi4wMCNCYWN0ZXJpb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDMuMDAjQmlvbWVkaWNhbCByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wNC4wMCNDYXJkaW9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA1LjAwI0FuYXRvbXkgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDYuMDAjUGF0aG9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA3LjAwI0VtYnJ5b2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDguMDAjRXBpZGVtaW9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA5LjAwI0dlbmV0aWNzIHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjEwLjAwI0ltbXVub2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMTEuMDAjUGh5c2lvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4xMi4wMCNUb3hpY29sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjEzLjAwI05ldXJvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNC4wMC4wMC4wMCNBbHRlcm5hdGl2ZSBhbmQgaG9saXN0aWMgbWVkaWNpbmUjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTUuMDAuMDAjRmFpdGggaGVhbGVycyM4NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wMS4wMCNXaXRjaCBkb2N0b3JzIG9yIHZvb2RvbyBzZXJ2aWNlcyM4NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wMi4wMCNGYWl0aCBoZWFsZXJzIHNlcnZpY2VzIzg1LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjAzLjAwI1NoYW1hbnMjODUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTUuMDQuMDAjRW5lcmd5IHdvcmsjODUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTYuMDAuMDAjSGVyYmFsIHRyZWF0bWVudHMjODUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTYuMDEuMDAjSGVyYmFsIG1lZGljaW5lIG9yIGhlcmJhbGlzdHMgc2VydmljZXMjODUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTYuMDIuMDAjQWxnYWUgb3Igc2VhIHdlZWQgbWVkaWNhbCBjdXJlcyM4NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMy4wMCNIb3Qgc3ByaW5ncyBjdXJlIHNlcnZpY2VzIzg1LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE3LjAwLjAwI0hvbWVvcGF0aGljIHByYWN0aWNlIzg1LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE0LjE3LjAxLjAwI0luaXRpYWwgZGlhZ25vc3RpYyBhc3Nlc3NtZW50Izg1LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE3LjAyLjAwI1JlbWVkeSBjb25zdWx0YXRpb25zIzg1LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjAwLjAwLjAwI0Zvb2QgYW5kIG51dHJpdGlvbiBzZXJ2aWNlcyM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMC4wMCNGb29kIHRlY2hub2xvZ3kjODUuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDEuMDAjRm9vZCBoeWdpZW5lIGNvbnRyb2wgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDIuMDAjRm9vZCBjb250YW1pbmF0aW9uIGNvbnRyb2wgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDMuMDAjRm9vZCBwcmVzZXJ2YXRpb24gbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA0LjAwI0Zvb2QgcHJlcGFyYXRpb24gY291bnNlbGluZyBvciBjb250cm9sIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA1LjAwI0Zvb2QgcmVzZWFyY2ggc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDYuMDAjU3R1ZGllcyBvbiBmb29kcyBvciBmb29kIGhhYml0cyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wNy4wMCNGb29kIGFkZGl0aXZlIG9yIHF1YWxpdHkgc3RhbmRhcmRzIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA4LjAwI0Zvb2QgYW5hbHlzaXMgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDkuMDAjRm9vZCBsZWdpc2xhdGlvbiBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wMC4wMCNOdXRyaXRpb24gaXNzdWVzIzg1LjE1LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjAxLjAwI051dHJpdGlvbiBwcm9ncmFtbWluZyBzZXJ2aWNlcyM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wMi4wMCNCcmVhc3Qgb3IgYm90dGxlIGZlZWRpbmcgcG9saWN5Izg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjAzLjAwI051dHJpdGlvbmFsIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjA0LjAwI051dHJpdGlvbiBwcm9qZWN0IGV2YWx1YXRpb24jODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDUuMDAjRm9vZCBvciBudXRyaXRpb24gZGV2ZWxvcG1lbnQgc3RyYXRlZ2llcyM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wNi4wMCNOdXRyaWVudCBkZWZpY2llbmN5IGNvbnRyb2wgcHJvZ3JhbXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDcuMDAjRGlldCBjb250cm9sIG9yIHByb2dyYW1zIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjAwLjAwI0Zvb2QgcG9saWN5IHBsYW5uaW5nIGFuZCBhaWQjODUuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDEuMDAjRm9vZCBzdGFuZGFyZHMjODUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDIuMDAjRm9vZCBhaWQgZ2xvYmFsIGluZm9ybWF0aW9uIG9yIGVhcmx5IHdhcm5pbmcgc3lzdGVtcyBzZXJ2aWNlcyM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wMy4wMCNBc3Nlc3NtZW50IG9mIGVtZXJnZW5jeSBmb29kIHJlcXVpcmVtZW50cyM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wNC4wMCNOYXRpb25hbCBmb29kIGludGVydmVudGlvbiBwb2xpY3kgb3IgcHJvZ3JhbXMjODUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDUuMDAjRXZhbHVhdGlvbiBvZiBmb29kIGFpZCBudXRyaXRpb25hbCBpbXBhY3QjODUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODYuMDAuMDAuMDAuMDAjRWR1Y2F0aW9uIGFuZCBUcmFpbmluZyBTZXJ2aWNlcyM4Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4wMC4wMC4wMCNWb2NhdGlvbmFsIHRyYWluaW5nIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjAwLjAwI0FncmljdWx0dXJlIGFuZCBmb3Jlc3RyeSBhbmQgb3RoZXIgbmF0dXJhbCByZXNvdXJjZXMgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDEuMDAjQWdybyBpbmR1c3RyeSB2b2NhdGlvbmFsIHRyYWluaW5nIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjAyLjAwI0RhaXJ5IGluZHVzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDMuMDAjTWVhdCBpbmR1c3RyeSB2b2NhdGlvbmFsIHRyYWluaW5nIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA0LjAwI0FncmljdWx0dXJlIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDUuMDAjUnVyYWwgeW91dGggb3IgZmFybWVycyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA2LjAwI0ZvcmVzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDcuMDAjRmlzaGVyeSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA4LjAwI0Vudmlyb25tZW50YWwgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wOS4wMCNOYXR1cmFsIHJlc291cmNlcyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjAwLjAwI1NjaWVudGlmaWMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wMS4wMCNDb21wdXRlciB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjAyLjAwI0VuZXJneSByZWxhdGVkIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDMuMDAjQ2hlbWlzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDQuMDAjQmlvbG9neSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA1LjAwI01lZGljYWwgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wNi4wMCNFbGVjdHJvbmljcyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA3LjAwI1RlbGVjb21tdW5pY2F0aW9ucyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA4LjAwI0h5ZHJhdWxpY3Mgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wOS4wMCNJbmR1c3RyaWFsIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMTAuMDAjRW5naW5lZXJpbmcgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wMC4wMCNOb24gc2NpZW50aWZpYyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjAxLjAwI0NvbW11bmljYXRpb25zIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDIuMDAjVG91cmlzbSByZWxhdGVkIHRyYWluaW5nIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjAzLjAwI0xpYnJhcnkgb3IgZG9jdW1lbnRhdGlvbiB0cmFpbmluZyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wNC4wMCNQcm9jdXJlbWVudCBvciBzdXBwbHkgY2hhaW4gdHJhaW5pbmcjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDUuMDAjQ2xlcmljYWwgdHJhaW5pbmcjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDYuMDAjSGVhbHRoIGFzc2lzdGFuY2Ugdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wNy4wMCNQZXJzb25hbCBjYXJlIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDguMDAjTGl0ZXJhY3kgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDkuMDAjU2FmZXR5IHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjEwLjAwI1RlYWNoZXIgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTEuMDAjRmlyZSBmaWdodGluZyB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xMi4wMCNIYW5kY3JhZnRzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTMuMDAjTGF3IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTQuMDAjTGF3IGVuZm9yY2VtZW50IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTUuMDAjUm9hZCBvciByYWlsIHRyYW5zcG9ydGF0aW9uIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTYuMDAjU2hpcHBpbmcgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wMC4wMCNJbiBzZXJ2aWNlIHRyYWluaW5nIGFuZCBtYW5wb3dlciBkZXZlbG9wbWVudCM4Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wMS4wMCNCYW5rIG9yIGZpbmFuY2Ugc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjAyLjAwI1JlIHRyYWluaW5nIG9yIHJlZnJlc2hpbmcgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDMuMDAjVm9jYXRpb25hbCByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wNC4wMCNDb21tZXJjaWFsIHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wNS4wMCNJbmR1c3RyaWFsIHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wNi4wMCNIZWFsdGggc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA3LjAwI01hbmFnZW1lbnQgc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA4LjAwI1B1YmxpYyBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQgc2VydmljZXMjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDkuMDAjTWVyY2hhbnQgbWFyaW5lIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTEuMDAuMDAuMDAjQWx0ZXJuYXRpdmUgZWR1Y2F0aW9uYWwgc3lzdGVtcyM4Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wMC4wMCNEaXN0YW5jZSBsZWFybmluZyBzZXJ2aWNlcyM4Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wMS4wMCNEaXN0YW5jZSBsZWFybmluZyBndWlkYW5jZSBzZXJ2aWNlcyM4Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wMi4wMCNEaXN0YW5jZSB0ZWFjaGluZyBzZXJ2aWNlcyM4Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wMy4wMCNDZXJ0aWZpY2F0ZWQgZGlzdGFuY2UgbGVhcm5pbmcgc2VydmljZXMjODYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTUuMDQuMDAjTm9uIGNlcnRpZmljYXRlZCBkaXN0YW5jZSBsZWFybmluZyBzZXJ2aWNlcyM4Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wNS4wMCNEaXN0YW5jZSBsZWFybmluZyBhc3Nlc3NtZW50IHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjAwLjAwI0FkdWx0IGVkdWNhdGlvbiM4Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNi4wMS4wMCNFdmVuaW5nIGNvdXJzZXMjODYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDIuMDAjUGFydCB0aW1lIGFkdWx0IGVkdWNhdGlvbiBzZXJ2aWNlcyM4Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNi4wMy4wMCNQYXJlbnQgZWR1Y2F0aW9uIzg2LjExLjE2LjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjA0LjAwI0VtcGxveWVlIEVkdWNhdGlvbiM4Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNy4wMC4wMCNMYW5ndWFnZSBzY2hvb2xpbmcjODYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTcuMDEuMDAjQ29udmVyc2F0aW9uYWwgZm9yZWlnbiBsYW5ndWFnZSBpbnN0cnVjdGlvbiM4Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNy4wMi4wMCNGb3JlaWduIGxhbmd1YWdlIGltbWVyc2lvbiBpbnN0cnVjdGlvbiM4Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xOC4wMC4wMCNFZHVjYXRpb25hbCBleGNoYW5nZXMjODYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTguMDEuMDAjRWR1Y2F0aW9uYWwgZXhjaGFuZ2VzIGJldHdlZW4gdW5pdmVyc2l0aWVzIzg2LjExLjE4LjAwLjAwCi11bnNwc2M3Izg2LjExLjE4LjAyLjAwI0VkdWNhdGlvbmFsIGV4Y2hhbmdlcyBiZXR3ZWVuIHNjaG9vbHMjODYuMTEuMTguMDAuMDAKLXVuc3BzYzcjODYuMTIuMDAuMDAuMDAjRWR1Y2F0aW9uYWwgaW5zdGl0dXRpb25zIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEyLjE1LjAwLjAwI0VsZW1lbnRhcnkgYW5kIHNlY29uZGFyeSBzY2hvb2xzIzg2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEyLjE1LjAxLjAwI1ByZSBzY2hvb2wgZWR1Y2F0aW9uYWwgc2VydmljZXMjODYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDIuMDAjUmVsaWdpb3VzIGVsZW1lbnRhcnkgb3Igc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDMuMDAjUHJpdmF0ZSBlbGVtZW50YXJ5IG9yIHNlY29uZGFyeSBzY2hvb2xzIzg2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE1LjA0LjAwI1B1YmxpYyBlbGVtZW50YXJ5IG9yIHNlY29uZGFyeSBzY2hvb2xzIzg2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE2LjAwLjAwI0p1bmlvciBjb2xsZWdlcyM4Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNi4wMS4wMCNDb21tdW5pdHkgY29sbGVnZXMjODYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTYuMDIuMDAjVGVjaG5pY2FsIGluc3RpdHV0ZXMjODYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTcuMDAuMDAjVW5pdmVyc2l0eSBhbmQgY29sbGVnZXMjODYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTcuMDEuMDAjVW5kZXJncmFkdWF0ZSBwcm9ncmFtcyM4Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNy4wMi4wMCNQb3N0Z3JhZHVhdGUgcHJvZ3JhbXMjODYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTguMDAuMDAjUHJvZmVzc2lvbmFsIHNjaG9vbHMjODYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTguMDIuMDAjVGhlb2xvZ2ljYWwgc2VtaW5hcmllcyM4Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wMy4wMCNUZWNobmljYWwgcHJvZmVzc2lvbmFsIHNjaG9vbHMjODYuMTIuMTguMDAuMDAKLXVuc3BzYzcjODYuMTIuMTguMDQuMDAjTm9uIHRlY2huaWNhbCBwcm9mZXNzaW9uYWwgc2Nob29scyM4Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4wMC4wMC4wMCNTcGVjaWFsaXplZCBlZHVjYXRpb25hbCBzZXJ2aWNlcyM4Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNS4wMC4wMCNGaW5lIGFydHMjODYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDEuMDAjVGhlYXRlciBzdHVkaWVzIzg2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjAyLjAwI1BhaW50aW5nIzg2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjAzLjAwI1NjdWxwdHVyZSM4Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNS4wNC4wMCNNZWRpYSBzdHVkaWVzIzg2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE2LjAwLjAwI011c2ljIGFuZCBkcmFtYSM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNi4wMS4wMCNNdXNpYyBzY2hvb2xzIzg2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE2LjAyLjAwI0RhbmNlIGVkdWNhdGlvbiM4Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNi4wMy4wMCNEcmFtYSBzdHVkaWVzIzg2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE3LjAwLjAwI0RyaXZpbmcgYW5kIGZseWluZyBhbmQgc2FpbGluZyM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNy4wMS4wMCNWZWhpY2xlIGRyaXZpbmcgc2Nob29scyBzZXJ2aWNlcyM4Ni4xMy4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNy4wMi4wMCNGbGlnaHQgc2Nob29sIHNlcnZpY2VzIzg2LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE3LjAzLjAwI1lhY2h0aW5nIG9yIGJvYXRpbmcgc2Nob29sIHNlcnZpY2VzIzg2LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjAwLjAwI01pbGl0YXJ5IGVkdWNhdGlvbiM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOC4wMS4wMCNTZXJ2aWNlIGFjYWRlbWllcyM4Ni4xMy4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOC4wMi4wMCNQaWxvdCBzY2hvb2xzIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjAzLjAwI01pbGl0YXJ5IHBvbGljZSB0cmFpbmluZyM4Ni4xMy4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOC4wNC4wMCNXYXIgY29sbGVnZSM4Ni4xMy4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wMC4wMCNTY2hvb2xzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjODYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTkuMDEuMDAjUHJpbWFyeSBzY2hvb2xpbmcgc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4xOS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wMi4wMCNTZWNvbmRhcnkgc2Nob29saW5nIHNlcnZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjODYuMTMuMTkuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTkuMDMuMDAjU3BlY2lhbGl6ZWQgc2Nob29scyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzg2LjEzLjE5LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjA0LjAwI1NwZWNpYWxpemVkIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjODYuMTMuMTkuMDAuMDAKLXVuc3BzYzcjODYuMTQuMDAuMDAuMDAjRWR1Y2F0aW9uYWwgZmFjaWxpdGllcyM4Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNS4wMC4wMCNFZHVjYXRpb25hbCBndWlkYW5jZSBzZXJ2aWNlcyM4Ni4xNC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNS4wMS4wMCNFZHVjYXRpb25hbCBhZHZpc29yeSBzZXJ2aWNlcyM4Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNS4wMi4wMCNVbml2ZXJzaXRpZXMgY29vcGVyYXRpb24gZ3VpZGFuY2Ugc2VydmljZXMjODYuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTUuMDMuMDAjU3R1ZHkgYWJyb2FkIGFkdmlzb3J5IHNlcnZpY2VzIzg2LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE2LjAwLjAwI1N0dWRlbnRzIG9yZ2FuaXphdGlvbnMjODYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTYuMDEuMDAjU3R1ZGVudHMgaG9iYnkgY2x1YnMjODYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTYuMDIuMDAjU3R1ZGVudHMgdW5pb25zIzg2LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE2LjAzLjAwI1N0dWRlbnRzIHRyYXZlbGxpbmcgb3JnYW5pemF0aW9ucyM4Ni4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNy4wMC4wMCNFZHVjYXRpb25hbCB0ZWNobm9sb2d5Izg2LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAxLjAwI0xhbmd1YWdlIGxhYm9yYXRvcmllcyM4Ni4xNC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNy4wMi4wMCNBdWRpbyB2aXN1YWwgdGVjaG5vbG9neSM4Ni4xNC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNy4wMy4wMCNDb21wdXRlciBwcm9ncmFtbWVkIGluc3RydWN0aW9uIzg2LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjA0LjAwI0xpYnJhcnkgb3IgZG9jdW1lbnRhdGlvbiBzZXJ2aWNlcyM4Ni4xNC4xNy4wMC4wMAotdW5zcHNjNyM5MC4wMC4wMC4wMC4wMCNUcmF2ZWwgYW5kIEZvb2QgYW5kIExvZGdpbmcgYW5kIEVudGVydGFpbm1lbnQgU2VydmljZXMjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMDAuMDAuMDAjUmVzdGF1cmFudHMgYW5kIGNhdGVyaW5nIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE1LjAwLjAwI0VhdGluZyBhbmQgZHJpbmtpbmcgZXN0YWJsaXNobWVudHMjOTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTUuMDEuMDAjUmVzdGF1cmFudHMjOTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTUuMDIuMDAjQmFycyM5MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wMy4wMCNGYXN0IGZvb2QgZXN0YWJsaXNobWVudHMjOTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTUuMDQuMDAjT24gc3RyZWV0IGZvb2QgdmVuZG9ycyM5MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNi4wMC4wMCNCYW5xdWV0IGFuZCBjYXRlcmluZyBzZXJ2aWNlcyM5MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNi4wMS4wMCNCYW5xdWV0IGZhY2lsaXRpZXMjOTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTYuMDIuMDAjUGFydHkgdGVudCBzZXJ2aWNlcyM5MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNi4wMy4wMCNDYXRlcmluZyBzZXJ2aWNlcyM5MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNi4wNC4wMCNDb25zdHJ1Y3Rpb24gb3Igd29yayBzaXRlIGNhdGVyaW5nIHNlcnZpY2VzIzkwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE3LjAwLjAwI0NhZmV0ZXJpYSBzZXJ2aWNlcyM5MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNy4wMS4wMCNPbiBzaXRlIGNhZmV0ZXJpYSBtYW5hZ2VtZW50IzkwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE4LjAwLjAwI0NhcnJ5b3V0IGFuZCB0YWtlYXdheSBzZXJ2aWNlcyM5MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xOC4wMS4wMCNQcm9mZXNzaW9uYWxseSBwcmVwYXJlZCBjYXJyeW91dCBtZWFscyM5MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xOC4wMi4wMCNEZWxpdmVyZWQgbWVhbHMgc2VydmljZXMjOTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTAuMTEuMDAuMDAuMDAjSG90ZWxzIGFuZCBsb2RnaW5nIGFuZCBtZWV0aW5nIGZhY2lsaXRpZXMjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDAuMDAjSG90ZWxzIGFuZCBtb3RlbHMgYW5kIGlubnMjOTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDEuMDAjSG90ZWxzIzkwLjExLjE1LjAwLjAwCi11bnNwc2M3IzkwLjExLjE1LjAyLjAwI0xvZGdlcyBvciByZXNvcnRzIzkwLjExLjE1LjAwLjAwCi11bnNwc2M3IzkwLjExLjE1LjAzLjAwI0JlZCBhbmQgYnJlYWtmYXN0IGlubnMjOTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDQuMDAjQ290dGFnZSByZW50YWwgc2VydmljZXMjOTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTYuMDAuMDAjTWVldGluZyBmYWNpbGl0aWVzIzkwLjExLjAwLjAwLjAwCi11bnNwc2M3IzkwLjExLjE2LjAxLjAwI0NvbmZlcmVuY2UgY2VudGVycyM5MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNi4wMi4wMCNWaWRlb2NvbmZlcmVuY2luZyBmYWNpbGl0aWVzIzkwLjExLjE2LjAwLjAwCi11bnNwc2M3IzkwLjExLjE2LjAzLjAwI01lZXRpbmcgb3IgYmFucXVldCByb29tcyM5MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNy4wMC4wMCNDYW1waW5nIGFuZCB3aWxkZXJuZXNzIGZhY2lsaXRpZXMjOTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTcuMDEuMDAjQ2FtcHNpdGVzIzkwLjExLjE3LjAwLjAwCi11bnNwc2M3IzkwLjExLjE3LjAyLjAwI0dvdmVybm1lbnQgb3duZWQgcGFya3MjOTAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTcuMDMuMDAjUmVjcmVhdGlvbmFsIHZlaGljbGUgY2FtcHNpdGUgZmFjaWxpdGllcyM5MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMi4wMC4wMC4wMCNUcmF2ZWwgZmFjaWxpdGF0aW9uIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEyLjE1LjAwLjAwI1RyYXZlbCBhZ2VudHMjOTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTUuMDEuMDAjVG91ciBhcnJhbmdlbWVudCBzZXJ2aWNlcyM5MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNS4wMi4wMCNUcmF2ZWwgYWdlbmNpZXMjOTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTUuMDMuMDAjQ2hhcnRlcmluZyBzZXJ2aWNlcyM5MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNi4wMC4wMCNUcmF2ZWwgZG9jdW1lbnQgYXNzaXN0YW5jZSM5MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNi4wMS4wMCNQYXNzcG9ydCBzZXJ2aWNlcyM5MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNi4wMi4wMCNWaXNhIG9yIGF1eGlsbGlhcnkgZG9jdW1lbnQgc2VydmljZXMjOTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTcuMDAuMDAjR3VpZGVzIGFuZCBpbnRlcnByZXRlcnMjOTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTcuMDEuMDAjQXJlYSBvciB0b3VyIGd1aWRlcyM5MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNy4wMi4wMCNJbnRlcnByZXRlcnMjOTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMDAuMDAuMDAjUGVyZm9ybWluZyBhcnRzIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjAwLjAwI0xpdmUgcGVyZm9ybWFuY2VzIzkwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjAxLjAwI1RoZWF0cmljYWwgcGVyZm9ybWFuY2VzIG9yIHBsYXlzIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjAyLjAwI0RhbmNlIHBlcmZvcm1hbmNlcyM5MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNS4wMy4wMCNPcGVyYSM5MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNS4wNC4wMCNDb25jZXJ0cyM5MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNi4wMC4wMCNUYXBlZCBvciBtb3Rpb24gcGljdHVyZSBwZXJmb3JtYW5jZXMjOTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTYuMDEuMDAjTW90aW9uIHBpY3R1cmVzIzkwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE2LjAyLjAwI1ZpZGVvdGFwZWQgZW50ZXJ0YWlubWVudCM5MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNC4wMC4wMC4wMCNDb21tZXJjaWFsIHNwb3J0cyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNS4wMC4wMCNQcm9mZXNzaW9uYWwgc3BvcnRpbmcgZXZlbnRzIzkwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE0LjE1LjAxLjAwI0xlYWd1ZSBwbGF5IzkwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE1LjAyLjAwI0NvbXBldGl0aXZlIGV2ZW50cyM5MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNS4wMy4wMCNFeGhpYml0aW9ucyM5MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNi4wMC4wMCNTcG9ydHMgZXZlbnQgcHJvbW90aW9uIGFuZCBzcG9uc29yc2hpcCM5MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNi4wMS4wMCNDb21wYW55IHNwb25zb3JlZCBwcm9mZXNzaW9uYWwgc3BvcnRzIGV2ZW50cyM5MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNi4wMi4wMCNDb21wYW55IHNwb25zb3JlZCBhbWF0ZXVyIHNwb3J0cyBldmVudHMjOTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTYuMDMuMDAjU3BvcnRpbmcgZXZlbnQgcHJvbW90aW9uIHNlcnZpY2VzIzkwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE3LjAwLjAwI0FtYXRldXIgYW5kIHJlY3JlYXRpb25hbCBzcG9ydHMjOTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTcuMDEuMDAjWW91dGggY29tcGV0aXRpdmUgc3BvcnRzIGxlYWd1ZXMjOTAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTcuMDIuMDAjQWR1bHQgc3BvcnRzIGxlYWd1ZXMjOTAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTcuMDMuMDAjWW91dGggc3BvcnRzIzkwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE1LjAwLjAwLjAwI0VudGVydGFpbm1lbnQgc2VydmljZXMjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTUuMDAuMDAjVG91cmlzdCBhdHRyYWN0aW9ucyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNS4wMS4wMCNNdXNldW1zIzkwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE1LjAyLjAwI0hpc3RvcmljYWwgb3IgY3VsdHVyYWwgc2l0ZXMjOTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTUuMDMuMDAjWm9vbG9naWNhbCBnYXJkZW5zIzkwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE2LjAwLjAwI1RyYXZlbGxpbmcgc2hvd3MjOTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTYuMDEuMDAjQ2lyY3VzZXMjOTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTYuMDIuMDAjVG91cmluZyBjb21wYW5pZXMjOTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTYuMDMuMDAjQXJ0IGV4aGliaXRpb25zIzkwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAwLjAwI0FtdXNlbWVudCBwYXJrcyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNy4wMS4wMCNUaGVtZSBwYXJrcyM5MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNy4wMi4wMCNXYXRlciBwYXJrcyM5MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNy4wMy4wMCNNaW5pYXR1cmUgZ29sZiBjb3Vyc2VzIzkwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE4LjAwLjAwI0Nhcm5pdmFscyBhbmQgZmFpcnMjOTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTguMDEuMDAjVHJhdmVsbGluZyBjYXJuaXZhbHMjOTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTguMDIuMDAjRmFpciBvcmdhbml6YXRpb24gb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM5MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOS4wMC4wMCNHYW1ibGluZyBhbmQgYmV0dGluZyBlc3RhYmxpc2htZW50cyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOS4wMS4wMCNDYXNpbm9zIzkwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE5LjAyLjAwI0NhcmQgY2x1YnMjOTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTkuMDMuMDAjUmFjZXRyYWNrcyM5MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM5MC4xNS4yMC4wMC4wMCNOaWdodGNsdWJzIGFuZCBkYW5jZSBoYWxscyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4yMC4wMS4wMCNOaWdodGNsdWJzIzkwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjIwLjAyLjAwI0RhbmNlIGhhbGxzIzkwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzkxLjAwLjAwLjAwLjAwI1BlcnNvbmFsIGFuZCBEb21lc3RpYyBTZXJ2aWNlcyM5MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4wMC4wMC4wMCNQZXJzb25hbCBhcHBlYXJhbmNlIzkxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjAwLjAwI1NwYSBhbmQgd29ya291dCBhbmQgcmVqdXZlbmF0aW9uIGZhY2lsaXRpZXMjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDEuMDAjSGVhbHRoIG9yIGZpdG5lc3MgY2x1YnMjOTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDIuMDAjU3BhcyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wMy4wMCNNYXNzYWdlIHNlcnZpY2VzIzkxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjA0LjAwI0Flcm9iaWNzIG9yIGV4ZXJjaXNlIGNsYXNzZXMjOTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDUuMDAjVHVya2lzaCBvciBzdGVhbSBvciByaXR1YWwgYmF0aHMjOTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTYuMDAuMDAjRmFjZSBhbmQgYm9keSBjYXJlIGFuZCBhZG9ybm1lbnQjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTYuMDEuMDAjRmFjaWFsIG9yIGJvZHkgdHJlYXRtZW50cyM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wMi4wMCNNYWtlIHVwIGNvbnN1bHRhdGlvbiM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wMy4wMCNUYXR0b28gc2VydmljZXMjOTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTYuMDQuMDAjQm9keSBwaWVyY2luZyBzZXJ2aWNlcyM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wNS4wMCNFbGVjdHJvbHlzaXMjOTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTcuMDAuMDAjSGFpciBjYXJlIzkxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjE3LjAxLjAwI0hhaXIgY3V0dGluZyBvciBjb2xvciBzZXJ2aWNlcyM5MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNy4wMi4wMCNIYWlyIHdlYXZpbmcgb3IgcmVwbGFjZW1lbnQgc2VydmljZXMjOTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTguMDAuMDAjQ2xvdGhpbmcgcmVudGFsIzkxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjE4LjAxLjAwI1R1eGVkbyBvciBmb3JtYWx3ZWFyIHJlbnRhbCM5MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOC4wMi4wMCNFdmVuaW5nIG9yIGJyaWRhbCBnb3duIG9yIGRyZXNzIHJlbnRhbCM5MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOC4wMy4wMCNDb3N0dW1lIHJlbnRhbCM5MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOS4wMC4wMCNGYXNoaW9uIGNvbnN1bHRhbnRzIzkxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjE5LjAxLjAwI0NvbG9yIGNvbnN1bHRhbnQjOTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTkuMDIuMDAjRmFzaGlvbiBzdHlsaXN0IzkxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE5LjAzLjAwI1dhcmRyb2JlIGNvbnN1bHRhbnQjOTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMDAuMDAuMDAjRG9tZXN0aWMgYW5kIHBlcnNvbmFsIGFzc2lzdGFuY2UjOTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTUuMDAuMDAjTGF1bmRlcmluZyBzZXJ2aWNlcyM5MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNS4wMS4wMCNVbmlmb3JtIHJlbnRhbCM5MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNS4wMi4wMCNMYXVuZHJ5IHNlcnZpY2VzIzkxLjExLjE1LjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjAzLjAwI0RyeSBjbGVhbmluZyM5MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNS4wNC4wMCNDb2luIG9wZXJhdGVkIHNlbGYgc2VydmljZSBsYXVuZHJpZXMjOTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTYuMDAuMDAjSG91c2Vob2xkIGFzc2lzdGFuY2UgYW5kIGNhcmUjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTYuMDEuMDAjSG91c2VrZWVwaW5nIHNlcnZpY2VzIzkxLjExLjE2LjAwLjAwCi11bnNwc2M3IzkxLjExLjE2LjAyLjAwI1lhcmQgb3IgcG9vbCBjYXJlIHNlcnZpY2VzIzkxLjExLjE2LjAwLjAwCi11bnNwc2M3IzkxLjExLjE2LjAzLjAwI0Nvb2tpbmcgb3IgZm9vZCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM5MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNy4wMC4wMCNDb25zdW1lciBidXlpbmcgYW5kIGJhcnRlcmluZyBzZXJ2aWNlcyM5MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNy4wMS4wMCNVc2VkIGNsb3RoaW5nIGNvbnNpZ25tZW50IHNlcnZpY2VzIzkxLjExLjE3LjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAyLjAwI0JhcnRlciBjbHVicyBvciBjb25zb3J0aXVtcyM5MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNy4wMy4wMCNXYXJkcm9iZSBidXlpbmcgc2VydmljZXMjOTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDAuMDAjUGVyc29uYWwgaXRlbSBjYXJlIGFuZCBzdG9yYWdlIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE4LjAxLjAwI1ZhbGV0IHNlcnZpY2VzIzkxLjExLjE4LjAwLjAwCi11bnNwc2M3IzkxLjExLjE4LjAyLjAwI0NoZWNrIHJvb20gY29uY2Vzc2lvbnMjOTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDMuMDAjTG9ja2VyIHJlbnRhbCM5MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wNC4wMCNGdXIgc3RvcmFnZSM5MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOS4wMC4wMCNQZXJzb25hbCBjYXJlIHNlcnZpY2VzIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjAxLjAwI0luZmFudCBvciBjaGlsZCBkYXljYXJlIHNlcnZpY2VzIzkxLjExLjE5LjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjAyLjAwI05hbm55IG9yIGJhYnlzaXR0aW5nIHNlcnZpY2VzIzkxLjExLjE5LjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjAzLjAwI0VsZGVybHkgZGF5Y2FyZSBzZXJ2aWNlcyM5MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOS4wNC4wMCNBc3Npc3RlZCBsaXZpbmcgc2VydmljZXMjOTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMDAuMDAuMDAuMDAjTmF0aW9uYWwgRGVmZW5zZSBhbmQgUHVibGljIE9yZGVyIGFuZCBTZWN1cml0eSBhbmQgU2FmZXR5IFNlcnZpY2VzIzkyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjAwLjAwLjAwI1B1YmxpYyBvcmRlciBhbmQgc2FmZXR5IzkyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjAwLjAwI1BvbGljZSBzZXJ2aWNlcyM5Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNS4wMS4wMCNQb2xpY2luZyBzZXJ2aWNlcyM5Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNS4wMi4wMCNTcGVjaWFsIHdlYXBvbnMgYW5kIHRhY3RpY3MgKFNXQVQpIG9yIHJpb3QgdGVhbXMjOTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDMuMDAjQ29tbXVuaXR5IG91dHJlYWNoIHByb2dyYW1zIzkyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjA0LjAwI0NyaW1lIGRldGVycmVuY2UgcHJvZ3JhbXMjOTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDAuMDAjRmlyZSBzZXJ2aWNlcyM5Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wMS4wMCNNdW5pY2lwYWwgb3IgbmF0aW9uYWwgZmlyZWZpZ2h0aW5nIHNlcnZpY2VzIzkyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE2LjAyLjAwI1ZvbHVudGVlciBmaXJlIGRlcGFydG1lbnQgc2VydmljZXMjOTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDMuMDAjRmlyZSBwcmV2ZW50aW9uIHNlcnZpY2VzIzkyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE2LjA0LjAwI0ZvcmVzdCBvciB3aWxkZXJuZXNzIGZpcmVmaWdodGluZyBzZXJ2aWNlcyM5Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNy4wMC4wMCNKYWlsIGFuZCBwcmlzb24gc3lzdGVtIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjAxLjAwI0phaWwgb3IgcHJpc29uIG9yIHBlbml0ZW50aWFyeSBzZXJ2aWNlcyM5Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNy4wMi4wMCNZb3V0aCBjYW1wcyBvciBmYWNpbGl0aWVzIHNlcnZpY2VzIzkyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjAzLjAwI0hhbGYgd2F5IGhvdXNlIHNlcnZpY2VzIzkyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjA0LjAwI01lbnRhbGx5IGltcGFpcmVkIGNyaW1pbmFsIGZhY2lsaXRpZXMjOTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDAuMDAjQ291cnQgc3lzdGVtIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE4LjAxLjAwI1NoZXJpZmZzIHNlcnZpY2VzIzkyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE4LjAyLjAwI1BsZWEgYmFyZ2FpbiBhZ3JlZW1lbnRzIzkyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE4LjAzLjAwI0NpdmlsIGNhc2UgY291cnQgZXhwZW5zZXMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDQuMDAjQ3JpbWluYWwgY2FzZSBmZWVzIG9yIGZpbmVzIzkyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE4LjA1LjAwI0FwcGVhbHMgcHJvY2VzcyBvciBqdWRpY2lhbCByZXZpZXcjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDAuMDAjUmVzY3VlIHNlcnZpY2VzIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE5LjAxLjAwI1NlYXJjaCBhbmQgcmVzY3VlIHRlYW1zIzkyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE5LjAyLjAwI0FtYnVsYW5jZSBzZXJ2aWNlcyM5Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOS4wMy4wMCNMaWZlIHNhdmluZyBoZWxpY29wdGVyIHNlcnZpY2VzIzkyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE5LjA0LjAwI0xpZmVndWFyZCBzZXJ2aWNlcyBmb3IgcG9vbCBvciBiZWFjaCM5Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4wMC4wMC4wMCNNaWxpdGFyeSBzZXJ2aWNlcyBhbmQgbmF0aW9uYWwgZGVmZW5zZSM5Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wMC4wMCNNYWludGVuYW5jZSBvZiBpbnRlcm5hdGlvbmFsIHBlYWNlIGFuZCBzZWN1cml0eSM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wMS4wMCNEaXNwdXRlIG1lZGlhdGlvbiBvciBjb25jaWxpYXRpb24gb3IgbmVnb3RpYXRpb24gb3Igc2V0dGxlbWVudCM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wMi4wMCNQZWFjZSBrZWVwaW5nIG9wZXJhdGlvbnMjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDMuMDAjQ2Vhc2UgZmlyZSBhZ3JlZW1lbnRzIG9yIHRydWNlIHN1cGVydmlzaW9uIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjA0LjAwI0ZhY3QgZmluZGluZyBtaXNzaW9ucyM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wNS4wMCNXYXIgcHJldmVudGlvbiBzdHJhdGVnaWVzIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjA2LjAwI0NvdW50ZXJ0ZXJyb3Jpc20jOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDcuMDAjRW1iYXJnb2VzIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjAwLjAwI0Rpc2FybWFtZW50IzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjAxLjAwI0FybXMgbGltaXRhdGlvbnMjOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDIuMDAjQ29udmVudGlvbmFsIGFybXMgZGlzYXJtYW1lbnQjOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDMuMDAjTnVjbGVhciBmcmVlemVzIG9yIGRpc2FybWFtZW50IzkyLjExLjE2LjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjA0LjAwI1dlYXBvbnMgZGVzdHJ1Y3Rpb24jOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDUuMDAjRGlzYXJtYW1lbnQgbmVnb3RpYXRpb25zIG9yIGFncmVlbWVudHMjOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDYuMDAjTXV0dWFsIG9yIGJhbGFuY2VkIGZvcmNlIHJlZHVjdGlvbnMjOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDAuMDAjTWlsaXRhcnkgc2NpZW5jZSBhbmQgcmVzZWFyY2gjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDEuMDAjTWlsaXRhcnkgaGlzdG9yeSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wMi4wMCNDb252ZW50aW9uYWwgd2VhcG9ucyB1c2FnZSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wMy4wMCNDaGVtaWNhbCB3ZWFwb25zIHVzYWdlIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjA0LjAwI0d1ZXJpbGxhIHdhcmZhcmUjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDUuMDAjTWlsaXRhcnkgc3RyYXRlZ3kjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDYuMDAjQWVyaWFsIG1hbmV1dmVycyM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wNy4wMCNOYXZhbCBvciBzdWJtYXJpbmUgbWFuZXV2ZXJzIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjA4LjAwI0xhbmQgbWFuZXV2ZXJzIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjAwLjAwI01pbGl0YXJ5IHBlcnNvbm5lbCBhbmQgZGlzY2lwbGluZSM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wMS4wMCNDaXZpbCBkZWZlbnNlIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjAyLjAwI0NvbXB1bHNvcnkgbWlsaXRhcnkgc2VydmljZXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDMuMDAjVm9sdW50YXJ5IG1pbGl0YXJ5IHNlcnZpY2VzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA0LjAwI01pbGl0YXJ5IHJlc2VydmlzdHMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDUuMDAjR3VlcmlsbGFzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA2LjAwI01lcmNlbmFyaWVzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA3LjAwI1ZldGVyYW5zIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA4LjAwI01pbGl0YXJ5IGNvdXJ0cyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wOS4wMCNNaWxpdGFyeSBvZmZlbnNlcyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4xMC4wMCNNaWxpdGFyeSBwZXJzb25uZWwjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDAuMDAjTWlsaXRhcnkgcG9saWN5IzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjAxLjAwI05hdGlvbmFsIHNlY3VyaXR5IzkyLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjAyLjAwI0RlZmVuc2UgY29udHJhY3RzIzkyLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjAzLjAwI05vbiBmaXJzdCB1c2UgcG9saWN5IzkyLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjA0LjAwI0FybXMgcmFjZSM5Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wNS4wMCNNaWxpdGFyeSByZWxhdGlvbnMjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDAuMDAjTWlsaXRhcnkgem9uZXMjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDEuMDAjRGVtaWxpdGFyaXplZCB6b25lcyM5Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wMi4wMCNOdWNsZWFyIG9yIGNoZW1pY2FsIHdlYXBvbiBmcmVlIHpvbmVzIzkyLjExLjIwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIwLjAzLjAwI1BlYWNlIHpvbmVzIzkyLjExLjIwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIwLjA0LjAwI05vIGZseSB6b25lcyM5Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMS4wMC4wMCNOdWNsZWFyIHdhcmZhcmUjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjEuMDEuMDAjTnVjbGVhciBzYWZlZ3VhcmRzIzkyLjExLjIxLjAwLjAwCi11bnNwc2M3IzkyLjExLjIxLjAyLjAwI051Y2xlYXIgd2VhcG9uIHRlc3RzIzkyLjExLjIxLjAwLjAwCi11bnNwc2M3IzkyLjExLjIxLjAzLjAwI051Y2xlYXIgbm9uIHByb2xpZmVyYXRpb24jOTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDAuMDAjTWlsaXRhcnkgdGFjdGljcyM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMS4wMCNXZWFwb25zIGRlcGxveW1lbnQjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDIuMDAjTWlsaXRhcnkgcmVjb25uYWlzc2FuY2UjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDMuMDAjQXJtcyB0cmFuc2ZlcnMjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDQuMDAjTWlsaXRhcnkgYXNzaXN0YW5jZSM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wNS4wMCNUcm9vcCB3aXRoZHJhd2FscyM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wNi4wMCNSYXBpZCBkZXBsb3ltZW50IGZvcmNlcyM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wNy4wMCNFbnZpcm9ubWVudGFsIHdhcmZhcmUjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjMuMDAuMDAjTWlsaXRhcnkgYmFzZXMjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjMuMDEuMDAjRG9tZXN0aWMgbWlsaXRhcnkgYmFzZXMjOTIuMTEuMjMuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjMuMDIuMDAjRm9yZWlnbiBtaWxpdGFyeSBiYXNlcyM5Mi4xMS4yMy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMy4wMCNOYXZhbCBiYXNlcyM5Mi4xMS4yMy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yNC4wMC4wMCNBcm1lZCBjb25mbGljdHMgYW5kIGluY2lkZW50cyM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yNC4wMS4wMCNCb3JkZXIgaW5jaWRlbnRzIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjAyLjAwI0xpbWl0ZWQgd2FyIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjAzLjAwI051Y2xlYXIgd2FyIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjA0LjAwI1NwYWNlIGJhc2VkIHdhciM5Mi4xMS4yNC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yNC4wNS4wMCNSZXNwb25zZSB0byB0ZXJyb3Jpc3QgYXR0YWNrcyM5Mi4xMS4yNC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4wMC4wMC4wMCNTZWN1cml0eSBhbmQgcGVyc29uYWwgc2FmZXR5IzkyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEyLjE1LjAwLjAwI0d1YXJkIHNlcnZpY2VzIzkyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEyLjE1LjAxLjAwI0FybW9yZWQgY2FyIHNlcnZpY2VzIzkyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE1LjAyLjAwI0J1cmdsYXJ5IHByb3RlY3Rpb24gc2VydmljZXMjOTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDMuMDAjR3VhcmQgZG9nIHJlbnRhbCM5Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNS4wNC4wMCNTZWN1cml0eSBndWFyZCBzZXJ2aWNlcyM5Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wMC4wMCNEZXRlY3RpdmUgc2VydmljZXMjOTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDEuMDAjRGV0ZWN0aXZlIGFnZW5jaWVzIzkyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE2LjAyLjAwI0ZpbmdlcnByaW50IHNlcnZpY2VzIzkyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE2LjAzLjAwI0xpZSBkZXRlY3Rpb24gc2VydmljZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDQuMDAjUHJpdmF0ZSBpbnZlc3RpZ2F0aW9uIHNlcnZpY2VzIzkyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE3LjAwLjAwI1NlY3VyaXR5IHN5c3RlbXMgc2VydmljZXMjOTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDEuMDAjU3VydmVpbGxhbmNlIG9yIGFsYXJtIG1haW50ZW5hbmNlIG9yIG1vbml0b3JpbmcjOTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDIuMDAjRmlyZSBhbGFybSBtYWludGVuYW5jZSBvciBtb25pdG9yaW5nIzkyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE3LjAzLjAwI1N0b3JlIG9yIGJ1c2luZXNzIGFudGkgdGhlZnQgc2VydmljZXMjOTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDQuMDAjQ29uZmluZW1lbnQgc3VydmVpbGxhbmNlIHN5c3RlbXMgbWFpbnRlbmFuY2Ugb3IgbW9uaXRvcmluZyM5Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4wMC4wMC4wMC4wMCNQb2xpdGljcyBhbmQgQ2l2aWMgQWZmYWlycyBTZXJ2aWNlcyM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMC4wMC4wMC4wMCNQb2xpdGljYWwgc3lzdGVtcyBhbmQgaW5zdGl0dXRpb25zIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjAwLjAwI1BvbGl0aWNhbCBib2RpZXMjOTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDEuMDAjUG9saXRpY2FsIHBhcnRpZXMgcmVwcmVzZW50YXRpb24gc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDIuMDAjUG9saXRpY2FsIHBhcnRpZXMgZnVuZCByYWlzaW5nIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjAzLjAwI1BvbGl0aWNhbCBwYXJ0aWVzIHB1YmxpYyBhcHBlYXJhbmNlIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjA0LjAwI1BvbGl0aWNhbCBsZWdpc2xhdHVyZSBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wNS4wMCNQb2xpdGljYWwganVkaWNpYWwgcG93ZXIgb3Igc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDYuMDAjUG9saXRpY2FsIGV4ZWN1dGl2ZSBwb3dlciBvciBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wMC4wMCNQb2xpdGljYWwgb2ZmaWNpYWxzIzkzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjAxLjAwI0NhYmluZXQgb2ZmaWNlcnMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDIuMDAjR292ZXJub3JzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjAzLjAwI0hlYWRzIG9mIHN0YXRlcyBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wNC4wMCNQcmVzaWRlbnRpYWwgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDUuMDAjUHJpbWUgbWluaXN0ZXJzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjA2LjAwI01vbmFyY2ggc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDcuMDAjU3RhdGVzbWVuIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjA4LjAwI1BhcmxpYW1lbnQgbWVtYmVycyBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wMC4wMCNMZWdpc2xhdGl2ZSBib2RpZXMgYW5kIHByYWN0aWNlIzkzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjAxLjAwI05hdGlvbmFsIGNvdW5jaWwgc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDIuMDAjQ29ycG9yYXRlIHN0YXRlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wMy4wMCNCaWxsIGRyYWZ0aW5nIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjA0LjAwI0xlZ2lzbGF0aXZlIGhlYXJpbmdzIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjA1LjAwI0ludGVsbGlnZW5jZSBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wNi4wMCNMZWdpc2xhdG9ycyBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wNy4wMCNQYXJsaWFtZW50YXJ5IHByYWN0aWNlIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjExLjAwLjAwLjAwI1NvY2lvIHBvbGl0aWNhbCBjb25kaXRpb25zIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjAwLjAwI1BvbGl0aWNhbCBtb3ZlbWVudHMjOTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDEuMDAjRXh0cmVtaXN0IG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wMi4wMCNQZWFjZSBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDMuMDAjUHJvdGVzdCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDQuMDAjVW5kZXJncm91bmQgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjA1LjAwI1N0dWRlbnQgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjA2LjAwI1BlYXNhbnQgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjA3LjAwI09wcG9zaXRpb24gbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjAwLjAwI1BvbGl0aWNhbCByZXByZXNlbnRhdGlvbiBhbmQgcGFydGljaXBhdGlvbiM5My4xMS4wMC4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wMS4wMCNQb2xpdGljYWwgcmVwcmVzZW50YXRpb24jOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDIuMDAjUG9saXRpY2FsIHBhcnRpY2lwYXRpb24jOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDMuMDAjUHJvcG9ydGlvbmFsIHJlcHJlc2VudGF0aW9uIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjA0LjAwI1ZvdGUgY2F0Y2hlciBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wNS4wMCNWb3RlciByZWdpc3RyYXRpb24gb3IgY291bnRpbmcgb3IgYW5hbHlzaXMgb3Igc2NydXRpbnkgc2VydmljZXMjOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDYuMDAjUHJlc3N1cmUgZ3JvdXBzIHJlcHJlc2VudGF0aW9uIG9yIHBhcnRpY2lwYXRpb24gc2VydmljZXMjOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDcuMDAjRWxlY3Rpb24gYW5hbHlzaXMgc2VydmljZXMjOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDguMDAjRWxlY3Rpb24gb3JnYW5pemF0aW9uIHNlcnZpY2VzIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjAwLjAwLjAwI0ludGVybmF0aW9uYWwgcmVsYXRpb25zIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjAwLjAwI0RpcGxvbWFjeSM5My4xMi4wMC4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wMS4wMCNEaXBsb21hdGljIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjAyLjAwI0NvbnN1bGFyIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjAzLjAwI0RpcGxvbWF0cyBzZWN1cml0eSBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wNC4wMCNEaXBsb21hdGljIHByaXZpbGVnZXMgb3IgaW1tdW5pdGllcyBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wNS4wMCNTdGF0ZSBpbW11bml0aWVzIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA2LjAwI0VtYmFzc2llcyBvciBhbWJhc3NhZG9ycyBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wNy4wMCNTdGF0ZSB2aXNpdHMgb3JnYW5pemF0aW9uIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA4LjAwI0ludGVybmF0aW9uYWwgbGF3IHByZXNjcmlwdGlvbiBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wOS4wMCNJbnRlcm5hdGlvbmFsIGxhdyBwcm9tb3Rpb24gb3IgcmVjb2duaXRpb24gc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDAuMDAjSW50ZXJuYXRpb25hbCByZWxhdGlvbnMgYW5kIGNvb3BlcmF0aW9uIzkzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjAxLjAwI011bHRpbGF0ZXJhbCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wMi4wMCNNaWxpdGFyeSBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wMy4wMCNQb2xpdGljYWwgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDQuMDAjSW50ZXJuYXRpb25hbCBlY29ub21pYyBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wNS4wMCNOb3J0aCBzb3V0aCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wNi4wMCNFYXN0IHdlc3QgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDcuMDAjSW50ZXJuYXRpb25hbCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wOC4wMCNOb24gZ292ZXJubWVudGFsIGxpYWlzb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDkuMDAjTm9uIGFsaWduZWQgY291bnRyaWVzIGNvb3BlcmF0aW9uIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjEwLjAwI0FsaWduZWQgY291bnRyaWVzIGNvb3BlcmF0aW9uIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjExLjAwI1BvbGl0aWNhbCBjcmltZXMgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTIuMDAjUGVhY2UgdHJlYXRpZXMgY29vcGVyYXRpb24jOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTMuMDAjVHJlYXR5IHNpZ25hdHVyZSBvciBhY2Nlc3Npb25zIG9yIHJlY3RpZmljYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTQuMDAjSW50ZXJuYXRpb25hbCB3YXRlcmNvdXJzZSBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xNS4wMCNUZXJyaXRvcmlhbCBjbGFpbXMgb3IgbmVnb3RpYXRpb25zIHRoaXJkIHBhcnR5IHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjAwLjAwI0ludGVybmF0aW9uYWwgb3JnYW5pemF0aW9ucyM5My4xMi4wMC4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wMS4wMCNTeXN0ZW0gb2Ygb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wMi4wMCNTZWN1cml0eSBjb3VuY2lsIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjAzLjAwI0Vjb25vbWljIG9yIHNvY2lhbCBjb3VuY2lsIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjA0LjAwI1NlY3JldGFyaWF0IHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjA1LjAwI1RydXN0c2hpcCBjb3VuY2lsIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjA2LjAwI0dlbmVyYWwgYXNzZW1ibHkgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDcuMDAjSW50ZXJuYXRpb25hbCBjb3VydCBvZiBqdXN0aWNlIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjA4LjAwI0ludGVybmF0aW9uYWwgcG9saXRpY2FsIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDkuMDAjSW50ZXJuYXRpb25hbCBjaGFyaXR5IG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMTAuMDAjSW50ZXJuYXRpb25hbCBodW1hbiByZWxpZWYgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4xMS4wMCNJbnRlcm5hdGlvbmFsIGhlYWx0aCBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjAwLjAwLjAwI0h1bWFuaXRhcmlhbiBhaWQgYW5kIHJlbGllZiM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wMC4wMCNSZWZ1Z2VlIHByb2dyYW1zIzkzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjAxLjAwI1Byb3RlY3Rpb24gb2YgaHVtYW4gcmlnaHRzIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjAyLjAwI1Byb21vdGlvbiBvZiBodW1hbiByaWdodHMgc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDMuMDAjSHVtYW4gcmlnaHRzIGVkdWNhdGlvbiBvciBpbmZvcm1hdGlvbiBkaXNzZW1pbmF0aW9uIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjA0LjAwI1JlZnVnZWUgZW1lcmdlbmN5IGFzc2lzdGFuY2Ugc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDUuMDAjUmVmdWdlZSBjYW1wcyBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wNi4wMCNSZWZ1Z2VlIHJlc2V0dGxlbWVudHMgb3IgcmVwYXRyaWF0aW9uIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjA3LjAwI0Rpc3BsYWNlZCBwZXJzb25zIGFzc2lzdGFuY2Ugc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDAuMDAjRm9vZCBhbmQgbnV0cml0aW9uIHBvbGljeSBwbGFubmluZyBhbmQgcHJvZ3JhbXMjOTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDEuMDAjSHVuZ2VyIGVyYWRpY2F0aW9uIHByb2dyYW1zIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjAyLjAwI0VtZXJnZW5jeSBmb29kIHN1cHBseSBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wMy4wMCNXb3JsZCBmb29kIHByb2dyYW0gc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDQuMDAjRm9vZCBvciBhZ3JpY3VsdHVyZSBvcmdhbml6YXRpb24gc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDUuMDAjQ29tbW9uIGZ1bmQgZm9yIGNvbW1vZGl0aWVzIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjA2LjAwI0ludGVybmF0aW9uYWwgZnVuZCBmb3IgYWdyaWN1bHR1cmFsIGRldmVsb3BtZW50IHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjA3LjAwI0Zvb2QgZGlzdHJpYnV0aW9uIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjA4LjAwI0Zvb2Qgc3VwcGx5IHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjA5LjAwI0Zvb2QgYWlkIHBvbGljaWVzIG9yIHByb2dyYW1zIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjEwLjAwI0Zvb2QgcGxhbm5pbmcgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMTEuMDAjRm9vZCBzZWN1cml0eSBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4xMi4wMCNGb29kIHJlc2VydmVzIG1hbmFnZW1lbnQjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMTMuMDAjRm9vZCBzaG9ydGFnZSBvciBzdXJwbHVzIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wMC4wMCNIZWFsdGggcHJvZ3JhbXMjOTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDEuMDAjQW50aSB0b2JhY2NvIGNhbXBhaWducyM5My4xMy4xNy4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wMi4wMCNTYW5pdGF0aW9uIHByb2dyYW1zIzkzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjAzLjAwI1Jlc2VhcmNoIHByb2dyYW1zIzkzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjA0LjAwI0Rpc2Vhc2UgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzkzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjA1LjAwI0RydWcgYWJ1c2UgcHJldmVudGlvbiBvciBjb250cm9sIHByb2dyYW1zIzkzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE4LjAwLjAwI0Rpc2FzdGVyIHByZXBhcmVkbmVzcyBhbmQgcmVsaWVmIzkzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEzLjE4LjAxLjAwI0Rpc2FzdGVyIHdhcm5pbmcgc2VydmljZXMjOTMuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDIuMDAjRGlzYXN0ZXIgcHJlcGFyZWRuZXNzIHJlc3BvbnNlIHNlcnZpY2VzIzkzLjEzLjE4LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE4LjAzLjAwI0VtZXJnZW5jeSBob3VzaW5nIHNlcnZpY2VzIzkzLjEzLjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjAwLjAwLjAwI0NvbW11bml0eSBhbmQgc29jaWFsIHNlcnZpY2VzIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjAwLjAwI1NvY2lhbCBkZXZlbG9wbWVudCBhbmQgc2VydmljZXMjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDEuMDAjU29jaWFsIHBvbGljeSBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wMi4wMCNTb2NpYWwgc2VjdXJpdHkgbGVnaXNsYXRpb24gc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDMuMDAjU29jaWFsIHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjA0LjAwI0Zvc3RlciBob21lIGNhcmUgc2VydmljZXMgb3Igb3JwaGFuYWdlIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjA1LjAwI0Fkb3B0aW9uIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjA2LjAwI1NvY2lhbCB3ZWxmYXJlIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjA3LjAwI1NvY2lhbCB3b3JrIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjA4LjAwI1ZvbHVudGFyeSBzZXJ2aWNlIG1hbmFnZW1lbnQjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDkuMDAjU29jaWFsIHByb2JsZW1zIGFuYWx5c2lzIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMTAuMDAjU29jaWFsIHN0cnVjdHVyZSBzdHVkaWVzIG9yIHJlbGF0ZWQgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMTEuMDAjU29jaWFsIGdyb3VwcyBzdHVkaWVzIG9yIHJlbGF0ZWQgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMTIuMDAjWW91dGggbW92ZW1lbnRzIG9yIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMTMuMDAjU29jaWFsIGp1c3RpY2Ugb3IgbGVnaXNsYXRpb24gc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMTQuMDAjU29jaW8gY3VsdHVyYWwgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDAuMDAjUG9wdWxhdGlvbiM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wMS4wMCNQb3B1bGF0aW9uIGNlbnN1cyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wMi4wMCNQb3B1bGF0aW9uIHNhbXBsZSBzdXJ2ZXlzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjAzLjAwI0JpcnRoIHJlcG9ydGluZyBvciBjb250cm9sIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA0LjAwI1BvcHVsYXRpb24gY29udHJvbCBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wNS4wMCNQb3B1bGF0aW9uIHRyZW5kcyBvciBwcm9qZWN0aW9ucyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wNi4wMCNCaXJ0aCBzdGF0aXN0aWNzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA3LjAwI01hcnJpYWdlIHJlc2VhcmNoIG9yIHN0YXRpc3RpY3Mgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDguMDAjUG9wdWxhdGlvbiBkaXN0cmlidXRpb24gb3IgYW5hbHlzaXMgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDkuMDAjUG9wdWxhdGlvbiBjb21wb3NpdGlvbiBhbmFseXNpcyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4xMC4wMCNEZW1vZ3JhcGhpYyBzdHVkaWVzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjExLjAwI0ltbWlncmF0aW9uIGFuYWx5c2lzIG9yIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjEyLjAwI0ZhbWlseSBwbGFubmluZyBwcm9ncmFtcyBvciBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4xMy4wMCNIdW1hbiByZXByb2R1Y3Rpb24gYW5hbHlzaXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDAuMDAjQ3VsdHVyZSM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wMS4wMCNDdWx0dXJhbCBldmVudHMgb3JnYW5pemF0aW9ucyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wMi4wMCNDdWx0dXJlIHByb21vdGlvbmFsIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjAzLjAwI0FydCByZWxhdGVkIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA0LjAwI1Nvbmcgd3JpdGluZyBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wNS4wMCNMaXRlcmFyeSB3cml0aW5nIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA2LjAwI01pbm9yaXRpZXMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wNy4wMCNDdWx0dXJhbCBoZXJpdGFnZSBwcmVzZXJ2YXRpb24gb3IgcHJvbW90aW9uIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA4LjAwI011c2V1bSBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wOS4wMCNDdWx0dXJhbCBwb2xpY3kgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTAuMDAjQXJjaGFpYyBvciBpbmRpZ2Vub3VzIGxhbmd1YWdlIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjExLjAwI1RyYWRpdGlvbmFsIGhhbmRjcmFmdHMgcHJvbW90aW9uIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjEyLjAwI1Byb3RlY3Rpb24gb2YgaW50ZWxsZWN0dWFsIG9yIGN1bHR1cmFsIHByb3BlcnR5IHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjEzLjAwI0hpc3RvcmljIHNpdGVzIG9yIG1vbnVtZW50cyBwcm90ZWN0aW9uIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjE0LjAwI015dGhvbG9neSM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wMC4wMCNFbXBsb3ltZW50IzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjAxLjAwI0VtcGxveW1lbnQgcHJvbW90aW9uIG9yIHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjAyLjAwI1JlY3J1aXRtZW50IHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjAzLjAwI0ludGVybmF0aW9uYWwgbGFib3Igc3RhbmRhcmRzIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA0LjAwI0ludGVybmF0aW9uYWwgbGFib3IgcmVnaXN0cmF0aW9uIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA1LjAwI1VuZW1wbG95bWVudCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wNi4wMCNFbXBsb3ltZW50IHN0YXRpc3RpY3Mgb3IgZm9yZWNhc3Rpbmcgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDcuMDAjV29yayB0aW1lIGFycmFuZ2VtZW50cyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wOC4wMCNPY2N1cGF0aW9uYWwgaGVhbHRoIG9yIHNhZmV0eSBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xMC4wMCNDYXJlZXIgZGV2ZWxvcG1lbnQgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMTEuMDAjUHJvbW90aW9uYWwgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMTIuMDAjTGFib3IgaW5zcGVjdGlvbiBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xMy4wMCNXb3JrIGNvdW5jaWwgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMTQuMDAjSW50ZXJuYXRpb25hbCBsYWJvciBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wMC4wMCNSdXJhbCBkZXZlbG9wbWVudCM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wMS4wMCNBZ3JpY3VsdHVyYWwgY29tbWVyY2lhbCBiYW5raW5nIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjAyLjAwI1J1cmFsIGludmVzdG1lbnQgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDMuMDAjQWdyaWN1bHR1cmFsIGluc3RpdHV0aW9ucyBvcmdhbml6YXRpb24gb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wNC4wMCNBZ3JpY3VsdHVyYWwgb3IgcnVyYWwgY29vcGVyYXRpdmVzIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA1LjAwI0FncmljdWx0dXJhbCByZXNlYXJjaCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wNi4wMCNGYXJtZXJzIG9yIHBlYXNhbnRzIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDcuMDAjV29tZW5zIHNlcnZpY2VzIGluIGFncmljdWx0dXJhbCBwcm9kdWN0aW9uIG9yIHJ1cmFsIGRldmVsb3BtZW50IzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA4LjAwI0FncmFyaWFuIHJlZm9ybSBvciBsYW5kIHNldHRsZW1lbnQgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDkuMDAjTGFuZCBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4xMC4wMCNJc2xhbmQgZGV2ZWxvcG1lbnQgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDAuMDAjVXJiYW4gZGV2ZWxvcG1lbnQjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDEuMDAjVXJiYW4gZGV2ZWxvcG1lbnQgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDIuMDAjVXJiYW4gbGFuZCBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMy4wMCNVcmJhbiBpbnZlc3RtZW50IHByb2dyYW1taW5nIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA0LjAwI1NsdW0gcmVkZXZsb3BtZW50IHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA1LjAwI1VyYmFuIGxpZ2h0aW5nIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA2LjAwI1VyYmFuIGRldmVsb3BtZW50IGNvbnRyb2wgb3IgcmVndWxhdGlvbnMgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDcuMDAjVXJiYW4gYnVpbGRpbmcgc3RhbmRhcmRzIG9yIHJlZ3VsYXRpb25zIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA4LjAwI1VyYmFuIGNvbW11bml0eSBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wOS4wMCNVcmJhbiBwcm9qZWN0IG9yIHByb2dyYW0gYWRtaW5pc3RyYXRpb24gb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMS4wMC4wMCNSZWdpb25hbCBkZXZlbG9wbWVudCM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMS4wMS4wMCNSZWdpb25hbCBkZXZlbG9wbWVudCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4yMS4wMC4wMAotdW5zcHNjNyM5My4xNC4yMS4wMi4wMCNFY29ub21pYyBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xNC4yMS4wMC4wMAotdW5zcHNjNyM5My4xNC4yMS4wMy4wMCNUZWNobmljYWwgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTQuMjEuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjEuMDQuMDAjU2VjdG9yYWwgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMjEuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMDAuMDAuMDAjUHVibGljIGFkbWluaXN0cmF0aW9uIGFuZCBmaW5hbmNlIHNlcnZpY2VzIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjAwLjAwI1B1YmxpYyBhZG1pbmlzdHJhdGlvbiM5My4xNS4wMC4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wMS4wMCNQdWJsaWMgZW50ZXJwcmlzZXMgbWFuYWdlbWVudCBvciBmaW5hbmNpYWwgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDIuMDAjUHVibGljIGVudGVycHJpc2VzIGluZm9ybWF0aW9uIG9yIGNvbnRyb2wgc3lzdGVtcyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wMy4wMCNQcml2YXRpemF0aW9uIHByb2dyYW1zIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA0LjAwI0FkbWluaXN0cmF0aXZlIHJlZm9ybSBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wNS4wMCNBZG1pbmlzdHJhdGl2ZSBhZ2VuY2llcyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wNi4wMCNBZG1pbmlzdHJhdGl2ZSBlY29ub21pYyBjb3VuY2lsIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA3LjAwI0FkbWluaXN0cmF0aXZlIHByb2NlZHVyZXMgb3Igc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDguMDAjR292ZXJubWVudCBkZXBhcnRtZW50cyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wOS4wMCNHb3Zlcm5tZW50IGluZm9ybWF0aW9uIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjEwLjAwI0FkbWluaXN0cmF0aXZlIGZlZXMgb3IgdGF4IGNvbGxlY3Rpb24gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTEuMDAjQWRtaW5pc3RyYXRpdmUgYWN0cyByYXRpZmljYXRpb24gb3IgaW1wbGVtZW50YXRpb24gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTIuMDAjUHVibGljIGluc3RpdHV0aW9ucyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xMy4wMCNNdWx0aW5hdGlvbmFsIHB1YmxpYyBjb3Jwb3JhdGlvbnMgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTQuMDAjT21idWRzbWFuIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjE1LjAwI05hdGlvbmFsIHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjAwLjAwI1B1YmxpYyBmaW5hbmNlIzkzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjAxLjAwI1Byb2dyYW0gYnVkZ2V0aW5nIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjAyLjAwI0dvdmVybm1lbnQgYnVkZ2V0aW5nIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjAzLjAwI0J1ZGdldCBvciBwdWJsaWMgaW52ZXN0bWVudCBtYW5hZ2VtZW50IzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA0LjAwI01pbGl0YXJ5IGV4cGVuZGl0dXJlcyBidWRnZXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDUuMDAjR292ZXJubWVudCBmaW5hbmNlIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA2LjAwI0dvdmVybm1lbnQgYWNjb3VudGluZyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wNy4wMCNHb3Zlcm5tZW50IGF1ZGl0aW5nIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA4LjAwI0dvdmVybm1lbnQgb3IgY2VudHJhbCBiYW5rIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA5LjAwI0xvdHRlcmllcyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4xMC4wMCNUYXggY29sbGVjdGlvbiBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4xMS4wMCNTdWJzaWRpZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTcuMDAuMDAjQ3VycmVuY3kjOTMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTcuMDEuMDAjQ3VycmVuY2llcyBvciBjb2luYWdlIzkzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE3LjAyLjAwI05hdGlvbmFsIGJhbmsgbm90ZXMjOTMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMDAuMDAuMDAjVGF4YXRpb24jOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDAuMDAjSW5jb21lIHRheCM5My4xNi4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xNS4wMS4wMCNOYXRpb25hbCBpbmNvbWUgdGF4IzkzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE1LjAyLjAwI011bmljaXBhbCBpbmNvbWUgdGF4IzkzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE1LjAzLjAwI0NhcGl0YWwgZ2FpbnMgdGF4IzkzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE1LjA0LjAwI0V4Y2VzcyBwcm9maXRzIHRheCM5My4xNi4xNS4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wMC4wMCNUYXhlcyBvdGhlciB0aGFuIGluY29tZSB0YXgjOTMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDEuMDAjUHJvcGVydHkgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjAyLjAwI0xhbmQgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjAzLjAwI1ZhbHVlIGFkZGVkIHRheCAoVkFUKSM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wNC4wMCNQYXlyb2xsIHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wNS4wMCNTYWxlcyB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDYuMDAjU29jaWFsIHNlY3VyaXR5IHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wNy4wMCNJbmhlcml0YW5jZSBvciB0cmFuc2ZlciB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTcuMDAuMDAjVGF4IGFkbWluaXN0cmF0aW9uIzkzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE2LjE3LjAxLjAwI1RheCBjb2xsYXRpb24jOTMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTcuMDIuMDAjVGF4IGluY2VudGl2ZXMjOTMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTcuMDMuMDAjVGF4IHN5c3RlbXMjOTMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTcuMDQuMDAjVGF4IHJldmVudWUgYWRtaW5pc3RyYXRpb24jOTMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDAuMDAjVGF4YXRpb24gaXNzdWVzIzkzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjAxLjAwI1RheCByZWZvcm0jOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDIuMDAjVGF4YXRpb24gcG9saWN5IzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjAzLjAwI1RheCByZXNlYXJjaCM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNC4wMCNJbnZlc3RtZW50IHRheCBjcmVkaXQjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDUuMDAjVGF4IGRlZHVjdGlvbnMjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDYuMDAjVGF4IGV2YXNpb24jOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDcuMDAjVGF4IHNoZWx0ZXJzIG9yIGhhdmVucyM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wOC4wMCNUYXggcmV0dXJucyM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNy4wMC4wMC4wMCNUcmFkZSBwb2xpY3kgYW5kIHJlZ3VsYXRpb24jOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDAuMDAjVHJhZGUgcG9saWN5IzkzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE3LjE1LjAxLjAwI1RyYWRlIGFncmVlbWVudHMjOTMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDIuMDAjVHJhZGUgbmVnb3RpYXRpb25zIzkzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE1LjAzLjAwI0Zvcm11bGF0aW9uIG9mIG5hdGlvbmFsIGNvbW1vZGl0eSBwb2xpY2llcyM5My4xNy4xNS4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wNC4wMCNEZXZlbG9wbWVudCBvZiBzbWFsbCBzY2FsZSBpbmR1c3RyaWVzIzkzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE2LjAwLjAwI0ludGVybmF0aW9uYWwgdHJhZGUjOTMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDEuMDAjSW50ZXJuYXRpb25hbCBjb21tb2RpdHkgYWdyZWVtZW50cyM5My4xNy4xNi4wMC4wMAotdW5zcHNjNyM5My4xNy4xNi4wMi4wMCNFeHBvcnQgcG9saWN5IzkzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE2LjAzLjAwI0dsb2JhbCB0cmFkZSBwb2xpY2llcyBvciBwcm9jZWR1cmVzIzkzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE2LjA0LjAwI0JpbGF0ZXJhbCB0cmFkZSBhZ3JlZW1lbnRzIzkzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE3LjAwLjAwI0N1c3RvbXMgYWRtaW5pc3RyYXRpb24gYW5kIGNvbXBsaWFuY2UjOTMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTcuMDEuMDAjQ3VzdG9tcyBjb252ZW50aW9ucyM5My4xNy4xNy4wMC4wMAotdW5zcHNjNyM5My4xNy4xNy4wMi4wMCNDdXN0b21zIGZvcm1hbGl0aWVzIzkzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE3LjAzLjAwI0N1c3RvbXMgb2ZmZW5jZXMjOTMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTguMDAuMDAjVHJhZGUgYW5hbHlzaXMjOTMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTguMDEuMDAjVHJhZGUgcHJvamVjdGlvbnMjOTMuMTcuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTguMDIuMDAjQmFsYW5jZSBvZiB0cmFkZSBwcm9qZWN0aW9ucyM5My4xNy4xOC4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMy4wMCNUcmFkZSBzdGF0aXN0aWNzIzkzLjE3LjE4LjAwLjAwCi11bnNwc2M3Izk0LjAwLjAwLjAwLjAwI09yZ2FuaXphdGlvbnMgYW5kIENsdWJzIzk0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjAwLjAwLjAwI1dvcmsgcmVsYXRlZCBvcmdhbml6YXRpb25zIzk0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjAwLjAwI0J1c2luZXNzIGFzc29jaWF0aW9ucyM5NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNS4wMS4wMCNBZ3JpY3VsdHVyYWwgaW5kdXN0cnkgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjAyLjAwI1JlZ3VsYXRvcnkgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjAzLjAwI1NlY3RvcmFsIGJ1c2luZXNzIGFzc29jaWF0aW9ucyM5NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNS4wNC4wMCNJbnRlcm5hdGlvbmFsIGJ1c2luZXNzIGFzc29jaWF0aW9ucyM5NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNS4wNS4wMCNFbXBsb3llcnMgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjAwLjAwI1Byb2Zlc3Npb25hbCBhc3NvY2lhdGlvbnMjOTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDEuMDAjRGVudGFsIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wMi4wMCNNZWRpY2FsIGhlYWx0aCBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDMuMDAjTnVyc2luZyBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDQuMDAjQWNjb3VudGluZyBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDUuMDAjQXJjaGl0ZWN0IGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wNi4wMCNCYXIgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA3LjAwI0VkdWNhdGlvbmFsIG9yIHRlYWNoZXIgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA4LjAwI0VuZ2luZWVyaW5nIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wOS4wMCNTY2llbnRpZmljIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4xMC4wMCNQcm9mZXNzaW9uYWwgc3RhbmRhcmRzIHJldmlldyBib2FyZHMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDAuMDAjU3RhZmYgYXNzb2NpYXRpb25zIzk0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjAxLjAwI1N0YWZmIGhvYmJ5IGNsdWJzIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjAyLjAwI1N0YWZmIHNwb3J0cyBhc3NvY2lhdGlvbnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDMuMDAjV29tZW4gc3RhZmYgYXNzb2NpYXRpb25zIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjA0LjAwI1BlbnNpb25uaXN0IHN0YWZmIGFzc29jaWF0aW9ucyM5NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wNS4wMCNNYW5hZ2VtZW50IHN0YWZmIGFzc29jaWF0aW9ucyM5NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wMC4wMCNUcmFkZSB1bmlvbnMjOTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDEuMDAjTGFib3Igb3IgZ2VuZXJhbCB3b3JrZXJzIHRyYWRlIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wMi4wMCNUcmFkZSB1bmlvbiBhY3RpdmlzdHMgc2VydmljZXMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDMuMDAjVHJhZGUgdW5pb24gaW5mb3JtYXRpb24gc2VydmljZXMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDQuMDAjVHJhbnNwb3J0IHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wNS4wMCNUZWFjaGVycyB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDYuMDAjTWVkaWNhbCBwZXJzb25uZWwgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA3LjAwI0VtcGxveWVycyB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDguMDAjQ2l2aWwgc2VydmFudHMgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA5LjAwI1BlcnNvbmFsIGFzc2lzdGFuY2Ugc2VydmljZXMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMTAuMDAjQXZpYXRpb24gdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjExLjAwLjAwLjAwI1JlbGlnaW91cyBvcmdhbml6YXRpb25zIzk0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjAwLjAwI1JlbGlnaW91cyByZXNpZGVuY2VzIzk0LjExLjAwLjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjAxLjAwI1ByaXZhdGUgcmVsaWdpb3VzIGhvbWUgcmVzaWRlbmNlcyM5NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMS4xNy4wMi4wMCNDb21tdW5pdHkgcmVsaWdpb3VzIGhvbWUgcmVzaWRlbmNlcyM5NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMS4xNy4wMy4wMCNSZWxpZ2lvdXMgcmV0cmVhdCByZXNpZGVuY2VzIzk0LjExLjE3LjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjA0LjAwI1RlbXBvcmFyeSByZWxpZ2lvdXMgaG9tZSByZXNpZGVuY2VzIzk0LjExLjE3LjAwLjAwCi11bnNwc2M3Izk0LjExLjE4LjAwLjAwI1BpbGdyaW1hZ2Ugb3JnYW5pemF0aW9ucyBhbmQgc2VydmljZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDEuMDAjTWVjY2EgcGlsZ3JpbWFnZSBvcmdhbml6YXRpb25zIG9yIHNlcnZpY2VzIzk0LjExLjE4LjAwLjAwCi11bnNwc2M3Izk0LjExLjE4LjAyLjAwI1ZhdGljYW4gcGlsZ3JpbWFnZSBvcmdhbml6YXRpb25zIG9yIHNlcnZpY2VzIzk0LjExLjE4LjAwLjAwCi11bnNwc2M3Izk0LjExLjE4LjAzLjAwI1BpbGdyaW1hZ2UgdHJhdmVsIGFzc2lzdGFuY2Ugc2VydmljZXMjOTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDQuMDAjUGlsZ3JpbWFnZSB0b3VyIG9wZXJhdG9ycyBzZXJ2aWNlcyM5NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOS4wMC4wMCNNaXNzaW9uYXJ5IHNlcnZpY2VzIzk0LjExLjAwLjAwLjAwCi11bnNwc2M3Izk0LjExLjE5LjAxLjAwI1JlbGlnaW91cyBvcmRlcnMgc2VydmljZXMjOTQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTkuMDIuMDAjRXZhbmdlbGljYWwgbWlzc2lvbmFyeSBzZXJ2aWNlcyM5NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOS4wMy4wMCNFZHVjYXRpb25hbCBtaXNzaW9uYXJ5IHNlcnZpY2VzIzk0LjExLjE5LjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjAwLjAwI0Rlbm9taW5hdGlvbmFsIHNlcnZpY2VzIzk0LjExLjAwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjAxLjAwI0hpbmR1aXNtIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjAyLjAwI0J1ZGRoaXNtIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjAzLjAwI0NocmlzdGlhbiBzZXJ2aWNlcyM5NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4yMC4wNC4wMCNJc2xhbSBzZXJ2aWNlcyM5NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4yMC4wNS4wMCNKdWRhaXNtIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjAwLjAwLjAwI0NsdWJzIzk0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjAwLjAwI1Nwb3J0IGNsdWJzIzk0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjAxLjAwI0ljZSBzcG9ydHMgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDIuMDAjQm9hdGluZyBvciBzd2ltbWluZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wMy4wMCNHdW4gb3IgaHVudGluZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wNC4wMCNPdXRkb29yIGZpZWxkIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA1LjAwI0luZG9vciBvciBvdXRkb29yIGNvdXJ0IHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA2LjAwI1dpbnRlciBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wNy4wMCNCZWFjaCBvciB3YXRlciBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wOC4wMCNDeWNsaW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA5LjAwI01vdW50YWluZWVyaW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjEwLjAwI1JhY2luZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xMS4wMCNGbHlpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTIuMDAjUHJvZmVzc2lvbmFsIG9yIHNlbWlwcm9mZXNzaW9uYWwgc3BvcnRzIGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjEzLjAwI1N0YWRpdW0gZXZlbnQgb3BlcmF0b3Igc2VydmljZXMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTQuMDAjU3BvcnQgY2x1YiBtYW5hZ2VycyBvciBwcm9tb3RlcnMgc2VydmljZXMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDAuMDAjSG9iYnkgY2x1YnMjOTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDEuMDAjUGxheWluZyBjYXJkIGhvYmJ5IGNsdWJzIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjAyLjAwI0hhbmRjcmFmdHMgY2x1YnMjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDMuMDAjUG9ldHJ5IG9yIGxpdGVyYXR1cmUgaG9iYnkgY2x1YnMjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDQuMDAjQ29va2luZyBob2JieSBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNS4wMCNHYXJkZW5pbmcgaG9iYnkgY2x1YnMjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDYuMDAjQ29sbGVjdG9yIGhvYmJ5IGNsdWIjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDcuMDAjU2NvdXRpbmcgY2x1YiM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNy4wMC4wMCNBbWF0ZXVycyBjbHVicyM5NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNy4wMS4wMCNBbWF0ZXVyIGRyYW1hIGNsdWJzIG9yIHNlcnZpY2VzIzk0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjAyLjAwI0FtYXRldXIgbXVzaWMgY2x1YnMgb3Igc2VydmljZXMjOTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTcuMDMuMDAjQW1hdGV1ciBkYW5jZSBjbHVicyBvciBzZXJ2aWNlcyM5NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNy4wNC4wMCNBbWF0ZXVyIGZpbmUgYXJ0cyBjbHVicyBvciBzZXJ2aWNlcyM5NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wMC4wMCNTb2NpYWwgY2x1YnMjOTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDEuMDAjWW91dGggY2x1YnMjOTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDIuMDAjU2VuaW9yIGNpdGl6ZW5zIGNsdWJzIzk0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjAzLjAwI1NvY2lhbCBnYXRoZXJpbmcgY2x1YnMjOTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDQuMDAjU29jaWFsIGNsdWJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjOTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDUuMDAjV2FyIHZldGVyYW5zIHNvY2lhbCBjbHVicyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4wMC4wMC4wMCNDaXZpYyBvcmdhbml6YXRpb25zIGFuZCBhc3NvY2lhdGlvbnMgYW5kIG1vdmVtZW50cyM5NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNS4wMC4wMCNOb24gZ292ZXJubWVudGFsIG9yZ2FuaXphdGlvbnMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDEuMDAjRW52aXJvbm1lbnRhbCBub24gZ292ZXJubWVudGFsIHNlcnZpY2VzIzk0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjAyLjAwI0VtZXJnZW5jeSByZWxpZWYgbm9uIGdvdmVybm1lbnRhbCBzZXJ2aWNlcyM5NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNS4wMy4wMCNUZWNobmljYWwgYXNzaXN0YW5jZSBub24gZ292ZXJubWVudGFsIHNlcnZpY2VzIzk0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjA0LjAwI0RldmVsb3BtZW50IGFpZCBub24gZ292ZXJuZW1udGFsIHNlcnZpY2VzIzk0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAwLjAwI0NoYXJpdHkgb3JnYW5pemF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wMS4wMCNDaGFyaXR5IG9yZ2FuaXphdGlvbnMgc2hlbHRlciBzZXJ2aWNlcyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wMi4wMCNGb29kIHJlbGllZiBzZXJ2aWNlcyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wMy4wMCNMZWdhbCBhc3Npc3RhbmNlIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA0LjAwI1Jlc291cmNlIG1vYmlsaXphdGlvbiBzZXJ2aWNlcyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wNS4wMCNJbnRlcm5hdGlvbmFsIGFpZCBhc3Npc3RhbmNlIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA2LjAwI09ycGhhbmFnZSBvciBhZG9wdGlvbiBzZXJ2aWNlcyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wNy4wMCNFZGVybHkgYXNzaXN0YW5jZSBvcmdhbml6YXRpb25zIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA4LjAwI1ByaXNvbmVyIGFzc2lzdGFuY2Ugb3JnYW5pemF0aW9ucyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wMC4wMCNHcmVlbiBhc3NvY2lhdGlvbnMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTcuMDEuMDAjUmFkaWNhbCBncmVlbiBhc3NvY2lhdGlvbnMjOTQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTcuMDIuMDAjRWNvZmVtaW5pc3RzIGFzc29jaWF0aW9ucyM5NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wMy4wMCNFY29sb2dpY2FsIHBvbGl0aWNhbCBvcmdhbml6YXRpb25zIzk0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjA0LjAwI0dyZWVuIGFjdGl2aXN0cyBtb3ZlbWVudHMgb3Igc2VydmljZXMjOTQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDAuMDAjTW92ZW1lbnRzIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjAxLjAwI0dheSBvciBsZXNiaWFuIG9yIGJpc2V4dWFsIG9yIHRyYW5zZ2VuZGVyIG1vdmVtZW50cyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wMi4wMCNBbnRpIHJhY2lzbSBtb3ZlbWVudHMjOTQuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDMuMDAjV29tZW4gbGliZXJhdGlvbiBtb3ZlbWVudHMjOTQuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDQuMDAjRnJhdGVybmFsIGFzc29jaWF0aW9ucyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wNS4wMCNFdGhuaWMgbWlub3JpdGllcyBjdWx0dXJhbCBwcmVzZXJ2YXRpb24gc2VydmljZXMjOTQuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTkuMDAuMDAjQW5pbWFsIHByb3RlY3Rpb24gYXNzb2NpYXRpb25zIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE5LjAxLjAwI0FuaW1hbCBsaWJlcmF0aW9uIG1vdmVtZW50cyM5NC4xMy4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOS4wMi4wMCNFbmRhbmdlcmVkIHNwZWNpZXMgcHJvdGVjdGlvbiBhc3NvY2lhdGlvbnMjOTQuMTMuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTkuMDMuMDAjVGhyZWF0ZW5lZCBhbmltYWxzIHByb3RlY3Rpb24gYXNzb2NpYXRpb25zIzk0LjEzLjE5LjAwLjAwCi11bnNwc2M3Izk0LjEzLjIwLjAwLjAwI0h1bWFuIHJpZ2h0cyBhZHZvY2FjeSBhbmQgZGVmZW5zZSBhc3NvY2lhdGlvbnMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDEuMDAjQ2hpbGRyZW4gcmlnaHRzIGRlZmVuc2Ugc2VydmljZXMjOTQuMTMuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDIuMDAjUHJpc29uZXJzIGRlZmVuc2Ugc2VydmljZXMjOTQuMTMuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDMuMDAjUGh5c2ljYWwgb3IgbWVudGFsIHRvcnR1cmUgZGVmZW5zZSBhc3NvY2lhdGlvbnMjOTQuMTMuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDQuMDAjRnJlZWRvbSBvZiBzcGVlY2ggZGVmZW5zZSBhc3NvY2lhdGlvbnMjOTQuMTMuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDUuMDAjVm90aW5nIHJpZ2h0cyBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4yMC4wMC4wMApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBlOWY5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci08L3NjcmlwdD4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InN1YlF1ZXJ5R2V0Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPiAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZUFkdmFuY2VkJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgYm9vbGVhbiB0YWJsZUhhc0Vycm9ycyA9ICFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFN0cmluZ1tdIHNlcnZpY2VJbnRlcmZhY2VTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VTIiwobmV3IEJvb2xlYW4odGFibGVIYXNFcnJvcnMpKS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpLCJwdWJsaXNoU2VydmljZUFkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlSW50ZXJmYWNlU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhOGExNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgbXVzdCBiZSBhIGJ1c2luZXNzIG5vZGUuCi0gICBOb2RlIGJ1c05vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGJ1c05vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc3ViUXVlcnlLZXkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08JQotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSAgIC8vIGJ1c2luZXNzIHBhcmVudCBub2RlIG1heSBiZSBlaXRoZXIgdGhlIHB1Ymxpc2hlZCBpdGVtcyBmb2xkZXIgb3IgYSBxdWVyeSBub2RlLgotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShidXNOb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0UiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBzZWN0aW9uSWRzID0gWyJwdWJsaXNoU2VydmljZVNpbXBsZSIsInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiXTsKLSAgdmFyIHN0eWxlRm9ybSA9ICJwdWJsaXNoU2VydmljZVN0eWxlIjsKLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhmb3JtKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFNlcnZpY2VTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPls8JT1wdWJsaXNoU2VydmljZVN0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgCi0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0gPSBwdWJsaXNoU2VydmljZVNpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSk7Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKSklPiI7Ci0gICAgCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtID0gcHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIik7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICAgcHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKSU+IjsKLTwlCi0gICBWZWN0b3Igc2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3Igc2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICBpZiAoc2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsZmFsc2UpOwotICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2VydmljZUludGVyZmFjZXMpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotJT4KLTwlCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoc2VydmljZURlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pc2VydmljZURlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2VydmljZUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChzZXJ2aWNlQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNlcnZpY2VDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0gICAKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0lPgotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLSAgICBzaG93UHVibGlzaEZvcm0oPCU9cHVibGlzaFNlcnZpY2VTdHlsZUluZGV4JT4pOyAgICAKLSAgfQotICAKLSAgZnVuY3Rpb24gc2hvd1B1Ymxpc2hGb3JtKHN0eWxlKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHN0eWxlKQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsgICAgCi0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0hfU0VSVklDRSIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDxmb3JtIG5hbWU9InB1Ymxpc2hTZXJ2aWNlU3R5bGUiIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4gICAgICAgIAotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvZGl2PgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+ICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YTRkOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZVNpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VTaW1wbGUnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMGEwOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c2luZXNzRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9CVVNJTkVTU19ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIGJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHNUYWJsZSA9IGdldFRhYmxlKCJidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzIik7Ci0gICAgdmFyIGJ1c2luZXNzRGV0YWlsc05hbWVzVGFibGUgPSBnZXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzTmFtZXMiKTsKLSAgICB2YXIgYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci0gICAgdmFyIGJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzVGFibGUgPSBnZXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnMiKTsKLTwlCi0gICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgaWYgKGRpc2NvdmVyeVVSTFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRpc2NvdmVyeVVSTFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IChEaXNjb3ZlcnlVUkwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdygiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNEaXNjb3ZlcnlVUkxSb3coImJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGlzY292ZXJ5VVJMLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgbmFtZUluZGV4VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgIGlmIChuYW1lSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8bmFtZUluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICBib29sZWFuIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygiYnVzaW5lc3NEZXRhaWxzTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJidXNpbmVzc0RldGFpbHNOYW1lcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPW5hbWUuZ2V0TGFuZygpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coYnVzaW5lc3NEZXRhaWxzTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBkZXNjcmlwdGlvbkluZGV4VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoZGVzY3JpcHRpb25JbmRleFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygiYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9ZGVzY3JpcHRpb24uZ2V0TGFuZygpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGlkVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgIGlmIChpZFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxpZFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpaWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxpKTsKLSAgICAgICBib29sZWFuIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvdygiYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzSWRlbnRpZmllclJvdygiYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlICAgICAgIAotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgY2F0VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgaWYgKGNhdFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxjYXRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93KCJidXNpbmVzc0RldGFpbHNDYXRlZ29yaWVzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0NhdGVnb3J5Um93KCJidXNpbmVzc0RldGFpbHNDYXRlZ29yaWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfSAgICAgICAKLSAgICAgfQotICAgfQotCi0gICAvLyBBdXRoZW50aWNhdGlvbi4KLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICBpZiAoPCU9IXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpJT4pCi0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVzaW5lc3NEZXRhaWxzQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0KLSAgICBzaG93TWFpbkZvcm0oKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybSgpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTFRhYmxlKCJidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzIiwiPCU9VURESUFjdGlvbklucHV0cy5ESVNDT1ZFUllVUkxfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuRElTQ09WRVJZVVJMX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUoImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNJZGVudGlmaWVyVGFibGUoImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzQ2F0ZWdvcnlUYWJsZSgiYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllcyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQlVTSU5FU1NfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSU+IiB2YWx1ZT0iPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSklPiI+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZIiklPgotICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgIDwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc05hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzSWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzIik7Ci0gICBCb29sZWFuIGRpc2NvdmVyeVVSTFNwZWNpZmljSW5mbyA9IG5ldyBCb29sZWFuKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKSk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGlzY292ZXJ5VVJMU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0Rpc2NvdmVyeVVSTHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZGl2PgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvR2V0Rm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvR2V0Rm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGI3Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0dldEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgU3RyaW5nIHBhcmVudFF1ZXJ5S2V5OwotICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBzdWJRdWVyeUtleS5sYXN0SW5kZXhPZignOicpOwotICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPT0gLTEpCi0gICAgIHBhcmVudFF1ZXJ5S2V5ID0gIiI7Ci0gICBlbHNlCi0gICAgIHBhcmVudFF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKDAsbGFzdFNlcGFyYXRvclBvcyk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgcGFyZW50Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhwYXJlbnRRdWVyeUtleSk7Ci0gICBPYmplY3QgcXVlcnlJdGVtUHJvcGVydHkgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSk7Ci0gICBPYmplY3QgcXVlcnlTdHlsZUJ1cyA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTKTsKLSAgIE9iamVjdCBxdWVyeVN0eWxlU2VyID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSAgIE9iamVjdCBxdWVyeVN0eWxlU2VySW50ID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBIYXNodGFibGUgcGFyZW50UXVlcnlEYXRhID0gbmV3IEhhc2h0YWJsZSgpOwotICAgaWYgKHF1ZXJ5SXRlbVByb3BlcnR5ICE9IG51bGwpCi0gICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLCBxdWVyeUl0ZW1Qcm9wZXJ0eSk7Ci0gICBpZiAocXVlcnlTdHlsZUJ1cyAhPSBudWxsKQotICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUywgcXVlcnlTdHlsZUJ1cyk7Ci0gICBpZiAocXVlcnlTdHlsZVNlciAhPSBudWxsKQotICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsIHF1ZXJ5U3R5bGVTZXIpOwotICAgaWYgKHF1ZXJ5U3R5bGVTZXJJbnQgIT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUywgcXVlcnlTdHlsZVNlckludCk7Ci0gICBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgPSBuZXcgU3ViUXVlcnlUcmFuc2ZlclRhcmdldChzZWxlY3RlZE5vZGUsc3ViUXVlcnlLZXkscGFyZW50UXVlcnlEYXRhKTsKLSAgIHRyZWVFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCxzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KTsKLSAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIuYWRkRWxlbWVudChzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KTsKLSAgIGJvb2xlYW4gaGFzVGFyZ2V0ID0gdHJ1ZTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0dFVF9GT1JNIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotPCUKLSAgIGludCBxdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pKTsKLSAgIEhhc2h0YWJsZSBhbGxVbmlxdWVOb2RlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgIFZlY3RvciBhbGxOb2RlcyA9IG5ldyBWZWN0b3IoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIHJlZ05vZGUuZ2V0QWxsQnVzaW5lc3NOb2RlcyhhbGxOb2Rlcyk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgIHJlZ05vZGUuZ2V0QWxsU2VydmljZU5vZGVzKGFsbE5vZGVzKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICBkZWZhdWx0OgotICAgICAgIHJlZ05vZGUuZ2V0QWxsU2VydmljZUludGVyZmFjZU5vZGVzKGFsbE5vZGVzKTsKLSAgIH0KLSAgIAotICAgZm9yIChpbnQgaT0wO2k8YWxsTm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBub2RlID0gKE5vZGUpYWxsTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICBhbGxVbmlxdWVOb2Rlcy5wdXQobm9kZS5nZXRUcmVlRWxlbWVudCgpLmdldEtleSgpLG5vZGUpOwotICAgfQotCi0gICBpZiAoIWFsbFVuaXF1ZU5vZGVzLmlzRW1wdHkoKSkKLSAgIHsKLSAgICAgT2JqZWN0W10gaXRlbU5vZGVzID0gYWxsVW5pcXVlTm9kZXMudmFsdWVzKCkudG9BcnJheSgpOwotICAgICBRdWlja1NvcnQuc29ydChpdGVtTm9kZXMsMCxpdGVtTm9kZXMubGVuZ3RoLTEpOwotICAgICBmb3IgKGludCBpPTA7aTxpdGVtTm9kZXMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIE5vZGUgaXRlbU5vZGUgPSAoTm9kZSlpdGVtTm9kZXNbaV07Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhpdGVtTm9kZS5nZXROb2RlSWQoKSxmYWxzZSk7Ci0gICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgICAgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgIHsKLSAgICAgICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICAgICBuYW1lID0gYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgICAgewotICAgICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgICAgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSAgICAgICBlbHNlIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgIHsKLSAgICAgICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKTsKLSAgICAgICAgIG5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotJT4KLSAgICBhZGRSZXN1bHRSb3coIkdldCIsPCU9aXRlbU5vZGUuZ2V0Tm9kZUlkKCklPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbiklPiIpOwotPCUKLSAgICAgfQotJT4KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbi5nZXRBY3Rpb25MaW5rRm9yUmV0dXJuKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGRpdiBpZD0iY29udGVudCI+Ci0gIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9HRVQiKTsKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9maW5kX2hpZ2hsaWdodGVkLmdpZiI7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDxmb3JtIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgU3RyaW5nIHRhYmxlVGl0bGU7Ci0gICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgIHsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIH0KLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHt0YWJsZVRpdGxlLCIifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJHZXQiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fVFJBTlNGRVIiKSU+IiBvbkNsaWNrPSJ0cmFuc2ZlclNlbGVjdGlvbnMoJ0dldCcsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFRlJFU0giKSU+IiBvbkNsaWNrPSJyZWZyZXNoU2VsZWN0aW9ucygnR2V0Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0iYWRkU2VsZWN0aW9uc1RvRmF2b3JpdGVzKCdHZXQnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NMRUFSIiklPiIgb25DbGljaz0iY2xlYXJTZWxlY3Rpb25zKCdHZXQnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvSXRlbXNTdW1tYXJ5Rm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvSXRlbXNTdW1tYXJ5Rm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZmRhY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0l0ZW1zU3VtbWFyeUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBpbnQgcXVlcnlJdGVtID0gSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFZlY3RvciBzdW1tYXJ5Tm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBRdWVyeVBhcmVudEVsZW1lbnQpCi0gICAgIHJlZ05vZGUuZ2V0RGlzY292ZXJlZE5vZGVzKHN1bW1hcnlOb2RlcyxxdWVyeUl0ZW0pOwotICAgZWxzZSBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBQdWJsaXNoZWRJdGVtc0VsZW1lbnQpCi0gICB7Ci0gICAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgICB7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgIHJlZ05vZGUuZ2V0UHVibGlzaGVkQnVzaW5lc3NOb2RlcyhzdW1tYXJ5Tm9kZXMpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgICByZWdOb2RlLmdldFB1Ymxpc2hlZFNlcnZpY2VOb2RlcyhzdW1tYXJ5Tm9kZXMpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICByZWdOb2RlLmdldFB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VOb2RlcyhzdW1tYXJ5Tm9kZXMpOwotICAgICB9Ci0gICB9Ci0gICBib29sZWFuIGhhc1RhcmdldCA9IGZhbHNlOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfSVRFTVNfU1VNTUFSWSIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlICAgCi0gICBIYXNodGFibGUgYWxsVW5pcXVlTm9kZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICBmb3IgKGludCBpPTA7aTxzdW1tYXJ5Tm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBzdW1tYXJ5Tm9kZSA9IChOb2RlKXN1bW1hcnlOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIGFsbFVuaXF1ZU5vZGVzLnB1dChzdW1tYXJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpLmdldEtleSgpLHN1bW1hcnlOb2RlKTsKLSAgIH0KLSAgIAotICAgaWYgKCFhbGxVbmlxdWVOb2Rlcy5pc0VtcHR5KCkpCi0gICB7Ci0gICAgIE9iamVjdFtdIGl0ZW1Ob2RlcyA9IGFsbFVuaXF1ZU5vZGVzLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICAgUXVpY2tTb3J0LnNvcnQoaXRlbU5vZGVzLDAsaXRlbU5vZGVzLmxlbmd0aC0xKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8aXRlbU5vZGVzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBOb2RlIGl0ZW1Ob2RlID0gKE5vZGUpaXRlbU5vZGVzW2ldOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoaXRlbU5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpOwotICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBRdWVyeUVsZW1lbnQgcXVlcnlFbGVtZW50ID0gKFF1ZXJ5RWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgbmFtZSA9IHF1ZXJ5RWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICAgICBTdHJpbmcgbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoaXRlbU5vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSk7Ci0gICAgICAgICBzd2l0Y2ggKHF1ZXJ5RWxlbWVudC5nZXRRdWVyeVR5cGUoKSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIixudW1iZXJPZkNoaWxkTm9kZXNTdHJpbmcpOwotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFU19GT1VORCIsbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nKTsKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nKTsKLSAgICAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgIHsKLSAgICAgICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICAgICBuYW1lID0gYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgICAgewotICAgICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgICAgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSAgICAgICBlbHNlIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgIHsKLSAgICAgICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKTsKLSAgICAgICAgIG5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotJT4KLSAgICBhZGRSZXN1bHRSb3coIlN1bW1hcnkiLDwlPWl0ZW1Ob2RlLmdldE5vZGVJZCgpJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24pJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGRpdiBpZD0iY29udGVudCI+Ci0gIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlID0gc2VsZWN0ZWRUb29sLmdldEFsdFRleHQoKTsKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9IHNlbGVjdGVkVG9vbC5nZXRIaWdobGlnaHRlZEltYWdlTGluaygpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8Zm9ybSB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIFN0cmluZyB0YWJsZVRpdGxlOwotICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1FVRVJJRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1FVRVJJRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIH0KLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHt0YWJsZVRpdGxlLCIifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJTdW1tYXJ5Iik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0icmVmcmVzaFNlbGVjdGlvbnMoJ1N1bW1hcnknLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci08JQotICAgaWYgKHF1ZXJ5SXRlbSAhPSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUykKLSAgIHsKLSU+ICAgICAgICAgICAgIAotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0iYWRkU2VsZWN0aW9uc1RvRmF2b3JpdGVzKCdTdW1tYXJ5Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotPCUKLSAgIH0KLSU+ICAgICAgICAgICAgIAotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DTEVBUiIpJT4iIG9uQ2xpY2s9ImNsZWFyU2VsZWN0aW9ucygnU3VtbWFyeScsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0xvZ2luVWRkaUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0xvZ2luVWRkaUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWQyNGI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Mb2dpblVkZGlGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBtdXN0IGJlIGEgcmVnaXN0cnkgbm9kZS4KLSAgIE5vZGUgcmVnTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICByZWdOb2RlLmdldFRvb2xNYW5hZ2VyKCkuc2V0U2VsZWN0ZWRUb29sSWQoMSk7Ci0gICBMaXN0IHRvb2xzID0gcmVnTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRUb29scygpOwotICAgSXRlcmF0b3IgaXRlciA9IHRvb2xzLml0ZXJhdG9yKCk7Ci0gICBUb29sIHQgPSBudWxsOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHJlZ05vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPk5ldyBMb2dpbiBGb3JtPC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKHB1Ymxpc2hWYWx1ZSkKLSAgewotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotCi08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iID4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gIkxvZ2luIjsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPC9kaXY+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbG9naW5fYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzaG93TWFpbkZvcm0oMCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjhmOTQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoucmVzcG9uc2UuQ29tcGxldGlvblN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFN0cmluZyBwdWJBc3NlcnRpb25Gb3JtID0gInNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9ybSI7Ci0gICBTdHJpbmcgcHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzID0gInB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyI7Ci0KLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsgICAKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICBTdHJpbmcgZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUgPSAiZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUiOwotICAgU3RyaW5nIHhkaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSA9ICJ4ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUiOwotJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzdWJRdWVyeUtleSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLTwlCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCI8JT1wdWJBc3NlcnRpb25Gb3JtJT4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotICAgCi0gICBWZWN0b3IgYnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgTGlzdE1hbmFnZXIgYnVzaW5lc3NDb3B5ID0gKExpc3RNYW5hZ2VyKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlNfQ09QWSk7Ci0gICBpZiAoYnVzaW5lc3MgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKGJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIGJ1c2luZXNzQ29weSA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgICBlbHNlCi0gICAgICAgYnVzaW5lc3NDb3B5LmNsZWFyKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGJ1c2luZXNzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClidXNpbmVzcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBidXNpbmVzc0NvcHkuYWRkKGxpc3RFbGVtZW50KTsKLSU+Ci0gICAgYWRkUHVibGlzaGVyQXNzZXJ0aW9uUmVzdWx0Um93KCI8JT1wdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MlPiIsPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFksYnVzaW5lc3NDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgYnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGJ1c2luZXNzQ29weSA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TLGJ1c2luZXNzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZLGJ1c2luZXNzQ29weSk7Ci0gICB9Ci0lPgotICB9Ci0KLSAgZnVuY3Rpb24gcG9wdWxhdGVBc3NlcnRpb25UYWJsZSgpIHsKLTwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkKLSAgICB7Ci0gICAgICBMaXN0TWFuYWdlciBwdWJBc3NlcnRpb25zID0gKChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRQdWJsaXNoZXJBc3NlcnRpb25zKCk7Ci0gICAgICBpZiAocHViQXNzZXJ0aW9ucyA9PSBudWxsKQotICAgICAgewotICAgICAgICBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBhY3Rpb24gPSBuZXcgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGFjdGlvbi5ydW4oKTsKLSU+Ci0gICAgICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwlCi0gICAgICAgIHB1YkFzc2VydGlvbnMgPSAoKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLSAgICAgIH0KLQotICAgICAgcHViQXNzZXJ0aW9ucyA9ICgoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotICAgICAgRW51bWVyYXRpb24gZSA9ICgocHViQXNzZXJ0aW9ucyAhPSBudWxsKSA/IHB1YkFzc2VydGlvbnMuZ2V0TGlzdEVsZW1lbnRzKCkgOiBudWxsKTsKLSAgICAgIHdoaWxlIChlICE9IG51bGwgJiYgZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgaW50IHZpZXdJZCA9IGxlLmdldFZpZXdJZCgpOwotICAgICAgICBTdHJpbmcgZGlyZWN0aW9uOwotICAgICAgICBpZiAoKChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0RnJvbUtleSgpKSkKLSAgICAgICAgICBkaXJlY3Rpb24gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9GUk9NIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkaXJlY3Rpb24gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9UTyIpOwotICAgICAgICBMaXN0RWxlbWVudCBzcCA9IChMaXN0RWxlbWVudClwdWJBc3NlcnRpb25FbGVtZW50LmdldFNlcnZpY2VQcm92aWRlcigpOwotICAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gc3AuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBzcC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICAgaW50IHRhcmdldFZpZXdJZCA9IHNwLmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgICBpbnQgc3ViUXVlcnlJdGVtSWQgPSBwdWJBc3NlcnRpb25FbGVtZW50LmdldFN1YlF1ZXJ5SXRlbUlkKCk7Ci0gICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9FWElTVElOR19QVUJMSVNIRVJfQVNTRVJUSU9OUyxzdWJRdWVyeUl0ZW1JZCxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxmYWxzZSk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKChCdXNpbmVzc0VudGl0eSlzcC5nZXRPYmplY3QoKSkuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgU3RyaW5nIGRlc2MgPSAoKEJ1c2luZXNzRW50aXR5KXNwLmdldE9iamVjdCgpKS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICAgU3RyaW5nIHN0YXR1cyA9IHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3RhdHVzKCk7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gcHViQXNzZXJ0aW9uRWxlbWVudC5nZXRLZXllZFJlZigpLmdldEtleVZhbHVlKCk7Ci0lPgotICAgICAgYWRkQXNzZXJ0aW9uKCI8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Iiw8JT12aWV3SWQlPiwiPCU9ZGlyZWN0aW9uJT4iLCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2MpJT4iLCI8JT1zdGF0dXMlPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0eXBlKSU+Iik7Ci08JQotICAgICAgfQotICAgIH0KLSU+Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRBc3NlcnRpb24odGFibGVDb250YWluZXJJZCx2aWV3SWQsZGlyZWN0aW9uLHVybCxuYW1lLGRlc2Msc3RhdHVzLHR5cGUpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICByb3dDaGVja2JveC5uYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEJT4iOwotICAgIHJvd0NoZWNrYm94LnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVEhJU19CVVNJTkVTUyIpJT4iKSk7Ci0KLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpcmVjdGlvbikpOwotCi0gICAgdmFyIG5hbWVEZXRhaWxzTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBuYW1lRGV0YWlsc0xpbmsuaHJlZiA9IHVybDsKLSAgICBuYW1lRGV0YWlsc0xpbmsudGFyZ2V0ID0gIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI7Ci0gICAgbmFtZURldGFpbHNMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5hbWUpKTsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKG5hbWVEZXRhaWxzTGluayk7Ci0KLSAgICBjb2x1bW40LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGRlc2MpKSk7Ci0KLSAgICBjb2x1bW41LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0YXR1cykpOwotCi0gICAgY29sdW1uNi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eXBlKSk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW41LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW42LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW41KTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZFB1Ymxpc2hlckFzc2VydGlvblJlc3VsdFJvdyh0YWJsZUNvbnRhaW5lcklkLG5vZGVJZCx1cmwsbmFtZSxkZXNjcmlwdGlvbikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW41ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLG5vZGVJZCkpOwotCi0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVEhJU19CVVNJTkVTUyIpJT4iKSk7Ci0KLSAgICB2YXIgZGlyZWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgZGlyZWN0aW9uLmlkID0gImxhYmVsX3B1Ymxpc2hlcl9hc3NlcnRpb25fZGlyZWN0aW9uIjsKLSAgICBkaXJlY3Rpb24ubmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTiU+IjsKLSAgICBkaXJlY3Rpb24uY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGRpcmVjdGlvbi5vcHRpb25zWzBdID0gbmV3IE9wdGlvbigiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9ESVJFQ1RJT05fRlJPTSIpJT4iLCAiPCU9U3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5ESVJFQ1RJT05fRlJPTSklPiIpOwotICAgIGRpcmVjdGlvbi5vcHRpb25zWzFdID0gbmV3IE9wdGlvbigiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9ESVJFQ1RJT05fVE8iKSU+IiwgIjwlPVN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuRElSRUNUSU9OX1RPKSU+Iik7Ci0gICAgY29sdW1uMi5hcHBlbmRDaGlsZChkaXJlY3Rpb24pOwotCi0gICAgdmFyIG5hbWVEZXRhaWxzTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBuYW1lRGV0YWlsc0xpbmsuaHJlZiA9IHVybDsKLSAgICBuYW1lRGV0YWlsc0xpbmsudGFyZ2V0ID0gIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI7Ci0gICAgbmFtZURldGFpbHNMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5hbWUpKTsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKG5hbWVEZXRhaWxzTGluayk7Ci0KLSAgICBjb2x1bW40LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGRlc2NyaXB0aW9uKSkpOwotCi0gICAgdmFyIGFzc2VydGlvblR5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBhc3NlcnRpb25UeXBlLmlkID0gImxhYmVsX3B1Ymxpc2hlcl9hc3NlcnRpb25fdHlwZSI7Ci0gICAgYXNzZXJ0aW9uVHlwZS5uYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSU+IjsKLSAgICBhc3NlcnRpb25UeXBlLmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICBhc3NlcnRpb25UeXBlLm9wdGlvbnNbMF0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfUEFSRU5UX0NISUxEIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfUEFSRU5UX0NISUxEKSU+Iik7Ci0gICAgYXNzZXJ0aW9uVHlwZS5vcHRpb25zWzFdID0gbmV3IE9wdGlvbigiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX1BFRVJfVE9fUEVFUiIpJT4iLCAiPCU9U3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX1BFRVJfVE9fUEVFUiklPiIpOwotICAgIGFzc2VydGlvblR5cGUub3B0aW9uc1syXSA9IG5ldyBPcHRpb24oIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9JREVOVElUWSIpJT4iLCAiPCU9U3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX0lERU5USVRZKSU+Iik7Ci0gICAgY29sdW1uNS5hcHBlbmRDaGlsZChhc3NlcnRpb25UeXBlKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjQuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjUuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjUpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KGZvcm0sbG9jYXRpb24pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9IGxvY2F0aW9uOwotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCI8JT1wdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MlPiIsICI8JT1VRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCU+IiwgZm9ybSwgZmFsc2UpOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjaGVja1RhYmxlRW50cmllc0FuZFN1Ym1pdCh0YWJsZUNvbnRhaW5lcklkLGZvcm0sbG9jYXRpb24pCi0gIHsKLSAgICBpZiAoZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQpID4gMCkgewotICAgICAgc2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KGZvcm0sbG9jYXRpb24pOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhbGVydCgiPCU9Y29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNoZWNrVGFibGVTaXplQW5kU3VibWl0KHRhYmxlQ29udGFpbmVySWQsZm9ybSxsb2NhdGlvbikKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmICh0YWJsZS5yb3dzLmxlbmd0aCA+IG51bWJlck9mSGVhZGVyUm93cykgewotICAgICAgc2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KGZvcm0sbG9jYXRpb24pOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhbGVydCgiPCU9Y29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotCi08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8ZGl2IGlkPSJwdWJsaXNoZXJBc3NlcnRpb25zIj4KLSAgICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotCi08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OU19ERVNDIiklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPicsJzwlPXhkaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0FTU0VSVElPTlMiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT0oKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSU+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PGxhYmVsIGZvcj0ibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl9kaXJlY3Rpb24iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJUkVDVElPTiIpJT48L2xhYmVsPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTIiklPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NUQVRVUyIpJT48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48bGFiZWwgZm9yPSJsYWJlbF9wdWJsaXNoZXJfYXNzZXJ0aW9uX3R5cGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FTU0VSVElPTl9UWVBFIiklPjwvbGFiZWw+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICA8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOQ09NUExFVEVfQVNTRVJUSU9OU19WSVNJQklMSVRZX0RFU0MiKSU+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotCi08JQotICAgYm9vbGVhbiB0YWJsZUhhc0Vycm9ycyA9ICFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICBTdHJpbmdbXSBidXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfQlVTSU5FU1NFUyIsKG5ldyBCb29sZWFuKHRhYmxlSGFzRXJyb3JzKSkudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyksInB1Ymxpc2hlckFzc2VydGlvbnMiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZChwdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJ1c1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzUHVibGlzaGVyQXNzZXJ0aW9uc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQocHViQXNzZXJ0aW9uRm9ybSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9ImF1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1NIT1dfQUxMX1BVQkxJU0hFUl9BU1NFUlRJT05TIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KHRoaXMuZm9ybSwnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NPTVBMRVRFX1BVQkxJU0hFUl9BU1NFUlRJT05TIiklPiIgb25DbGljaz0iY2hlY2tUYWJsZUVudHJpZXNBbmRTdWJtaXQoJzwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4nLHRoaXMuZm9ybSwnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCIpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMiKSU+IiBvbkNsaWNrPSJjaGVja1RhYmxlU2l6ZUFuZFN1Ym1pdCgnPCU9cHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzJT4nLHRoaXMuZm9ybSwnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVNT1ZFX1BVQkxJU0hFUl9BU1NFUlRJT05TIiklPiIgb25DbGljaz0iY2hlY2tUYWJsZUVudHJpZXNBbmRTdWJtaXQoJzwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4nLHRoaXMuZm9ybSwnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgIDwvZm9ybT4KLQotICAgIDwvZGl2PgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwb3B1bGF0ZUFzc2VydGlvblRhYmxlKCk7Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzYwOWVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzayA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzayk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JQotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgVmVjdG9yIHJlZmVyZW5jZWRTZXJ2aWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMpOwotICAgaWYgKHJlZmVyZW5jZWRTZXJ2aWNlcyA9PSBudWxsKQotICAgewotICAgICByZWZlcmVuY2VkU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIEJ1c2luZXNzRW50aXR5IGJ1c2luZXNzRW50aXR5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBidXNpbmVzc0VudGl0eS5nZXRCdXNpbmVzc0tleSgpOwotICAgICBCdXNpbmVzc1NlcnZpY2VzIGJ1c2luZXNzU3ZjcyA9IGJ1c2luZXNzRW50aXR5LmdldEJ1c2luZXNzU2VydmljZXMoKTsKLSAgICAgaWYgKGJ1c2luZXNzU3ZjcyAhPSBudWxsKQotICAgICB7Ci0gICAgICAgVmVjdG9yIGJ1c2luZXNzU3ZjVmVjdG9yID0gYnVzaW5lc3NTdmNzLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgIGZvciAoaW50IGk9MDtpPGJ1c2luZXNzU3ZjVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgewotICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJ1c1NlcnZpY2UgPSAoQnVzaW5lc3NTZXJ2aWNlKWJ1c2luZXNzU3ZjVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgIGlmICghYnVzU2VydmljZS5nZXRCdXNpbmVzc0tleSgpLmVxdWFscyhidXNpbmVzc0tleSkpCi0gICAgICAgICB7Ci0gICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGJ1c1NlcnZpY2UpOwotICAgICAgICAgICByZWZlcmVuY2VkU2VydmljZXMuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTLHJlZmVyZW5jZWRTZXJ2aWNlcyk7Ci0gICB9Ci0KLSAgIGZvciAoaW50IGk9MDtpPHJlZmVyZW5jZWRTZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgewotICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClyZWZlcmVuY2VkU2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLGZhbHNlKTsKLSAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgU3RyaW5nIG5hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBicy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNSZWZlcmVuY2VzIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbiklPiIpOwotPCUKLSAgIH0KLQotICAgVmVjdG9yIHNlcnZpY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMpOwotICAgaWYgKHNlcnZpY2VzICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5LFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgU3RyaW5nIG5hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1NlcnZpY2VzIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbiklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NSZWZlcmVuY2VUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGlucHV0TmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGlucHV0cyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0cy5pdGVtKDApLmNoZWNrZWQpKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVmZXJlbmNlVGFibGUoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1NlcnZpY2VzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0FkZFNlcnZpY2VzKGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiKTsKLSAgICBpZiAodGFibGUucm93cy5sZW5ndGggPT0gbnVtYmVyT2ZIZWFkZXJSb3dzKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTIikpJT4iKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTiU+LnZhbHVlID0gIjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX0FERCU+IjsKLSAgICAgIHByb2Nlc3NGb3JtKGZvcm0pOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdmVSZWZlcmVuY2VzKGZvcm0pCi0gIHsKLSAgICB2YXIgbnVtYmVyT2ZTZWxlY3Rpb25zID0gZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNSZWZlcmVuY2VzIik7Ci0gICAgaWYgKGdldE51bWJlck9mU2VsZWN0aW9ucygibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIpID09IDApCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fUkVGRVJFTkNFX1NFTEVDVEVEIikpJT4iKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTiU+LnZhbHVlID0gIjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX1JFTU9WRSU+IjsKLSAgICAgIHByb2Nlc3NGb3JtKGZvcm0pOwotICAgIH0KLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxkaXYgaWQ9Im1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlcyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDsiPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04lPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19ERVNDIiklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIFN0cmluZ1tdIHByb2plY3Rpb25zU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX1JFRkVSRU5DRURfU0VSVklDRVMiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpLCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXMiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhwcm9qZWN0aW9uc1NwZWNpZmljSW5mbyk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5lbmFibGVEeW5hbWljKGZhbHNlKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFN0cmluZ1tdIHNlcnZpY2VzU3BlY2lmaWNJbmZvID0geyJGT1JNX09QVElPTl9TRVJWSUNFUyIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyksIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlcyIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1NlcnZpY2VzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoc2VydmljZXNTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9BRERfU0VSVklDRVMiKSU+IiBvbkNsaWNrPSJwcm9jZXNzQWRkU2VydmljZXModGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRU1PVkVfUkVGRVJFTkNFUyIpJT4iIG9uQ2xpY2s9InByb2Nlc3NSZW1vdmVSZWZlcmVuY2VzKHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgPC9mb3JtPgotICAgIDwvZGl2PgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZDQyODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL09wZW5SZWdpc3RyeUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE1ICAgMTM1MzA3IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNTEzICAgMjMxMzUxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci1VRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci1PcGVuUmVnaXN0cnlUb29sIG9wZW5SZWdpc3RyeVRvb2wgPSAoT3BlblJlZ2lzdHJ5VG9vbCkodWRkaU1haW5Ob2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLUVudW1lcmF0aW9uIGZhdm9yaXRlUmVnaXN0cnlFbGVtZW50cyA9IG9wZW5SZWdpc3RyeVRvb2wuZ2V0RmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzKCk7Ci1WZWN0b3IgZmF2b3JpdGVSZWdpc3RyeUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci13aGlsZSAoZmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzLmhhc01vcmVFbGVtZW50cygpKQotICBmYXZvcml0ZVJlZ2lzdHJ5TGlzdC5hZGRFbGVtZW50KGZhdm9yaXRlUmVnaXN0cnlFbGVtZW50cy5uZXh0RWxlbWVudCgpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX09QRU5fUkVHSVNUUlkiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGZpbGxGYXZvcml0ZUluZm8oZmF2b3JpdGVSZWdpc3RyeVNlbGVjdCkKLSAgICB7Ci0gICAgICB2YXIgc2VsZWN0ZWRGYXZvcml0ZVJlZ2lzdHJ5SW5kZXggPSBmYXZvcml0ZVJlZ2lzdHJ5U2VsZWN0LnNlbGVjdGVkSW5kZXgtMTsKLSAgICAgIGlmIChzZWxlY3RlZEZhdm9yaXRlUmVnaXN0cnlJbmRleCA+PSAwKQotICAgICAgewotICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcGVuUmVnaXN0cnlGb3JtIik7Ci0gICAgICAgIHN3aXRjaCAoc2VsZWN0ZWRGYXZvcml0ZVJlZ2lzdHJ5SW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICA8JQotICAgICAgICAgIGZvciAoaW50IGk9MDtpPGZhdm9yaXRlUmVnaXN0cnlMaXN0LnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZSZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZmF2b3JpdGVSZWdpc3RyeUxpc3QuZWxlbWVudEF0KGkpOwotICAgICAgICAgICU+Ci0gICAgICAgICAgICBjYXNlIDwlPWklPjoKLSAgICAgICAgICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmF2UmVnRWxlbWVudC5nZXROYW1lKCkpJT4iOwotICAgICAgICAgICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmF2UmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCkpJT4iOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICAlPgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICAgIHsKLSAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9wZW5SZWdpc3RyeUZvcm0iKTsKLSAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpb3BlblJlZ2lzdHJ5VG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpKSU+IjsKLSAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKW9wZW5SZWdpc3RyeVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCkpJT4iOwotICAgICAgc2hvd01haW5Gb3JtKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKCkKLSAgICB7Ci0gICAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgfQotCi0gICAKLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgIDwlCi0gICAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiOwotICAgICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1JFR0lTVFJZIik7Ci0gICAgICAlPgotICAgICAgPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgPHRhYmxlPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1BFTl9SRUdJU1RSWV9ERVNDIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgCi0gICAgICA8Zm9ybSBpZD0ib3BlblJlZ2lzdHJ5Rm9ybSIgYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgIAotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiB2YWxpZ249ImJvdHRvbSIgbm93cmFwIGhlaWdodD0yNT4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZmF2b3JpdGVSZWdpc3RyeSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfUkVHSVNUUlkiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiA+Ci0gICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImZhdm9yaXRlUmVnaXN0cnkiIG9uQ2hhbmdlPSJmaWxsRmF2b3JpdGVJbmZvKHRoaXMpIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIiBzZWxlY3RlZD4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPGZhdm9yaXRlUmVnaXN0cnlMaXN0LnNpemUoKTtpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZSZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZmF2b3JpdGVSZWdpc3RyeUxpc3QuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1mYXZSZWdFbGVtZW50LmdldE5hbWUoKSU+Ij48JT1mYXZSZWdFbGVtZW50LmdldE5hbWUoKSU+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYoZmF2b3JpdGVSZWdpc3RyeUxpc3Quc2l6ZSgpID09IDApewotICAgICAgICAgICAgICAgICU+CQotICAgICAgICAgICAgICAgIAk8b3B0aW9uIHZhbHVlPSJFbXB0eSI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9vcHRpb24+Ci0JCQkJPCUgICAgICAgICAgICAgICAgCi0JCQkJfQotICAgICAgICAgICAgIAklPgotICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcmVnaXN0cnlfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICBpZiAoIW9wZW5SZWdpc3RyeVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcmVnaXN0cnlfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbnF1aXJ5X3VybCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgaWYgKCFvcGVuUmVnaXN0cnlUb29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbnF1aXJ5X3VybCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9mb3JtPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIHNldERlZmF1bHRzKCk7Ci0gICAgICA8L3NjcmlwdD4KLSAgICAgIAotICAgIDwvZGl2PgotICA8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiM2VkZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChmb3JtQWN0aW9uLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mb3JtRnJhbWVOYW1lJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiI+Ci08L2Zvcm0+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0RldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZjQ1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gVGhlIHNlbGVjdGVkIG5vZGUgbXVzdCBiZSBhIHJlZ2lzdHJ5IG5vZGUuCi0gICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpKTsgICAKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIHJlZ0VsZW1lbnQucmVmcmVzaE1ldGEoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1JFR0lTVFJZX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICB2YXIgcmVnaXN0cnlEZXRhaWxzTmFtZVRhYmxlID0gZ2V0VGFibGUoInJlZ2lzdHJ5RGV0YWlsc05hbWUiKTsKLTwlCi0gICBTdHJpbmcgbmFtZSA9IHJlZ0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOyAgIAotJT4KLSAgICBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdygicmVnaXN0cnlEZXRhaWxzTmFtZSIsZmFsc2UpOwotICAgIHNldERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdygicmVnaXN0cnlEZXRhaWxzTmFtZSIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhyZWdpc3RyeURldGFpbHNOYW1lVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICB9Ci0gICAKLSAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICBib29sZWFuIGNvbnRhaW5zVXNlckRlZmluZWRDYXRlZ29yaWVzOwotICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgIHsKLSU+Ci0gICAgdmFyIHJlZ2lzdHJ5Q2F0ZWdvcmllc1RhYmxlID0gZ2V0VGFibGUoInJlZ2lzdHJ5VXNlckRlZmluZWRDYXRlZ29yaWVzIik7Ci08JSAgIAotICAgICBjb250YWluc1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHRydWU7Ci0gICAgIEFycmF5TGlzdCB1c2VyRGVmaW5lZENhdGVnb3JpZXNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICBkbwotICAgICB7Ci0gICAgICAgdXNlckRlZmluZWRDYXRlZ29yaWVzTGlzdC5hZGQodXNlckRlZmluZWRDYXRlZ29yaWVzLm5leHRFbGVtZW50KCkpOwotICAgICB9IHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpOwotICAgICBDYXRlZ29yeU1vZGVsW10gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXkgPSBuZXcgQ2F0ZWdvcnlNb2RlbFt1c2VyRGVmaW5lZENhdGVnb3JpZXNMaXN0LnNpemUoKV07Ci0gICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0xpc3QudG9BcnJheSh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheSk7Ci0gICAgIFF1aWNrU29ydC5zb3J0KHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5LDAsdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXkubGVuZ3RoLTEpOwotICAgICBTdHJpbmdCdWZmZXIgZmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5Lmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBuYW1lID0gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uZ2V0RGlzcGxheU5hbWUoKTsKLSAgICAgICBTdHJpbmcgdE1vZGVsS2V5ID0gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgYm9vbGVhbiBjaGVja2VkID0gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uaXNDaGVja2VkKCk7Ci0gICAgICAgZmlsZU5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5pc0RhdGFMb2FkZWQoKSkKLSAgICAgICAgIGZpbGVOYW1lLmFwcGVuZCh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5nZXRDYXRlZ29yeUtleSgpKS5hcHBlbmQoIi50eHQiKTsKLSAgICAgICBlbHNlCi0gICAgICAgICBmaWxlTmFtZS5hcHBlbmQoY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpKTsKLSAgICAgICBib29sZWFuIGhhc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHRNb2RlbEtleSk7Ci0lPgotICAgIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93KCJyZWdpc3RyeVVzZXJEZWZpbmVkQ2F0ZWdvcmllcyIsIjwlPXRNb2RlbEtleSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLDwlPWNoZWNrZWQlPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZpbGVOYW1lLnRvU3RyaW5nKCkpJT4iLDwlPWhhc0Vycm9yJT4pOwotPCUKLSAgICAgICBpZiAoaGFzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocmVnaXN0cnlDYXRlZ29yaWVzVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrPCU9aSU+XSwiZXJyYW50Um93Iik7Ci08JSAgICAgICAKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgICAgY29udGFpbnNVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSBmYWxzZTsgICAKLSU+ICAgICAgIAotICAgIHNob3dNYWluRm9ybSgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSgicmVnaXN0cnlEZXRhaWxzTmFtZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FJT4iLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFR0lTVFJZX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHJlZ2lzdHJ5Tm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJyZWdpc3RyeURldGFpbHNOYW1lIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXModWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRSIpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1yZWdFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICB7Ci0lPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1yZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgfQotICAgCi0gICBpZiAoY29udGFpbnNVc2VyRGVmaW5lZENhdGVnb3JpZXMpCi0gICB7Ci0gICAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJyZWdpc3RyeVVzZXJEZWZpbmVkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZF9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICB9Ci0gICBpZiAocmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0lPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSSUQiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9cmVnRWxlbWVudC5nZXRVc2VySWQoKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgfQotICAgCi0gICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gcmVnRWxlbWVudC5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfVVJMIixyZWdpc3RyYXRpb25VUkwpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICB9Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZGl2PiAgICAgIAotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOyAgCi08L3NjcmlwdD4gICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwN2QwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9ImZpbmRCdXNpbmVzc2VzQWR2YW5jZWQiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MzUgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ZpbmRfYnVzaW5lc3Nlc19hZHZhbmNlX293bmVkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4iIG9uQ2xpY2s9InRvZ2dsZUFkdmFuY2VkQXV0aGVudGljYXRpb25TZWN0aW9uKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sdGhpcy5jaGVja2VkKSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9idXNpbmVzc2VzX2FkdmFuY2Vfb3duZWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09XTkVEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmdbXSBzaVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSwiZmluZEJ1c2luZXNzZXNBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzaVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmV3IEJvb2xlYW4oZmFsc2UpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENvbW1vbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxNDgzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kQnVzaW5lc3NlcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJmaW5kQnVzaW5lc3Nlc1N0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX1RZUEUiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9idXNpbmVzc19zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX2J1c2luZXNzX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9idXNpbmVzc19hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX2J1c2luZXNzX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9idXNpbmVzc191dWlkIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfYnVzaW5lc3NfdXVpZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fVVVJRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc1VVSUQiKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHsidWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb25KU1AuanNwIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLCJGT1JNX0xBQkVMX0ZJTkRfQlVTSU5FU1NfVVVJRF9ERVNDIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3ZTM0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9ImZpbmRCdXNpbmVzc2VzU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX0JVU0lORVNTRVNfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX2J1c2luZXNzZXNfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9maW5kX2J1c2luZXNzZXNfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNWNiNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcxMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICogMjAwODExMDYgICAyNTQ1MTYgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBmaXggY29tcGlsYXRpb24gZXJyb3IsIHJlbW92ZSBkdXBsaWNhdGUgdmFyaWFibGUgZGVjbGFyYXRpb24KLSAqIDIwMDgxMjE3ICAgMjU5MTQwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBzdWJRdWVyeUtleVByb3BlcnR5LnNldFN1YlF1ZXJ5S2V5KHN1YlF1ZXJ5S2V5KTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCUKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRUdJU1RSWV9GSU5EIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgc2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXMiLCJmaW5kU2VydmljZXMiLCJmaW5kU2VydmljZUludGVyZmFjZXMiXTsKLSAgdmFyIGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXNTaW1wbGUiLCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIiwiZmluZEJ1c2luZXNzVVVJRCJdOwotICB2YXIgZmluZFNlcnZpY2VzU2VjdGlvbklkcyA9IFsiZmluZFNlcnZpY2VzU2ltcGxlIiwiZmluZFNlcnZpY2VzQWR2YW5jZWQiLCJmaW5kU2VydmljZVVVSUQiXTsKLSAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHMgPSBbImZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZSIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEIl07Ci0gIHZhciBzdHlsZUZvcm1zID0gWyJmaW5kQnVzaW5lc3Nlc1N0eWxlIiwiZmluZFNlcnZpY2VzU3R5bGUiLCJmaW5kU2VydmljZUludGVyZmFjZXNTdHlsZSJdOwotICB2YXIgYXV0aGVudGljYXRpb25TZWN0aW9uSWRzID0gWyJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iLCJmaW5kU2VydmljZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiJdOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlUXVlcnlOYW1lKCkKLSAgewotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleVZhbHVlID0gc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpOwotICAgYm9vbGVhbiBpc1N1YlF1ZXJ5ID0gKHN1YlF1ZXJ5S2V5VmFsdWUgIT0gbnVsbCAmJiBzdWJRdWVyeUtleVZhbHVlLmxlbmd0aCgpID4gMCk7Ci0lPiAgIAotICAgIGlmICg8JT1pc1N1YlF1ZXJ5JT4pCi0gICAgewotICAgICAgLy8gU3VicXVlcmllcyBtdXN0IGhhdmUgYSBuYW1lIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgdGhlIGN1cnJlbnQgcXVlcnkgb3IgdGhlIGNsb3Nlc3QgcXVlcnkgZW5jbG9zaW5nIHRoaXMgb2JqZWN0LgotPCUKLSAgIFN0cmluZyBjdXJyZW50UXVlcnlOYW1lID0gIiI7Ci0gICBpZiAoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgICBjdXJyZW50UXVlcnlOYW1lID0gc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCk7Ci0gICBlbHNlIGlmIChzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICB7Ci0gICAgIE5vZGUgcGFyZW50Tm9kZSA9IHNlbGVjdGVkTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICAgY3VycmVudFF1ZXJ5TmFtZSA9IHBhcmVudE5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgIH0KLSU+ICAgIAotICAgICAgdmFyIHF1ZXJ5TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWVyeU5hbWUiKS52YWx1ZTsKLSAgICAgIGlmIChxdWVyeU5hbWUgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjdXJyZW50UXVlcnlOYW1lKSU+IikKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUVVFUllfTkFNRV9DT05GTElDVCIpJT4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmICghaGFuZGxlU3VibWl0KGZvcm0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVRdWVyeU5hbWUoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4udmFsdWUgPSAiPCU9c3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4udmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChwcm9jZXNzRm9ybShmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NOYW1lRmluZFF1YWxpZmllcnMoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzSWRlbnRpZmllclRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLHRydWUpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NEaXNjb3ZlcnlVUkxUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZEJ1c2luZXNzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTmFtZUZpbmRRdWFsaWZpZXJzKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc05hbWVGaW5kUXVhbGlmaWVycygiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWROYW1lIixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICAvLyBTZXQgdGhlIHF1ZXJ5IG5hbWUKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpKSU+IjsKLSAgICB2YXIgc2VhcmNoRm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaEZvciIpOwotICAgIHNlYXJjaEZvci5zZWxlY3RlZEluZGV4ID0gPCU9Zm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pJT47Ci0gICAgc2V0RGVmYXVsdHNGb3JGaW5kQnVzaW5lc3Nlc0Zvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JGaW5kU2VydmljZXNGb3JtcygpOwotICAgIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybXMoKTsKLSAgICBzaG93TWFpbkZvcm0oc2VhcmNoRm9yLnZhbHVlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGFkdmFuY2VkRm9ybSxxdWVyeUl0ZW1JbmRleCxpc093bmVkQ2hlY2tlZCkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4uY2hlY2tlZCA9IGlzT3duZWRDaGVja2VkOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbihxdWVyeUl0ZW1JbmRleCxpc093bmVkQ2hlY2tlZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRBZHZhbmNlZENvbW1vblNlY3Rpb25EZWZhdWx0cyhmb3JtLG1heFNlYXJjaFNldCxtYXhSZXN1bHRzKQotICB7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUJT4udmFsdWUgPSBtYXhTZWFyY2hTZXQ7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTJT4udmFsdWUgPSBtYXhSZXN1bHRzOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JGaW5kQnVzaW5lc3Nlc0Zvcm1zKCkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbmRCdXNpbmVzc2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRCdXNpbmVzc2VzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPls8JT1maW5kQnVzaW5lc3Nlc1N0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybSA9IGZpbmRCdXNpbmVzc2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKSU+IjsKLQotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtID0gZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IDwlPShmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpICE9IG51bGwpJT47Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMoZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPixpc093bmVkQ2hlY2tlZCk7Ci08JQotICAgVmVjdG9yIGJ1c05hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICBpZiAoYnVzTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxidXNOYW1lVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlidXNOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgSWRlbnRpZmllckJhZyBidXNJZEJhZyA9IChJZGVudGlmaWVyQmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICBpZiAoYnVzSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gYnVzSWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkSWRlbnRpZmllclJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIGJ1c0NhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICBpZiAoYnVzQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IGJ1c0NhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGJ1c1NlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFZlY3RvciBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICBpZiAoYnVzU2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxidXNTZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpYnVzU2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuYWRkRWxlbWVudChidXNTZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgYnVzU2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTLGJ1c1NlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0KLSAgIERpc2NvdmVyeVVSTHMgYnVzRGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgIGlmIChidXNEaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBidXNEaXNjb3ZlcnlVUkxzLmdldERpc2NvdmVyeVVSTFZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWRpc2NvdmVyeVVSTFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZERpc2NvdmVyeVVSTFJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgICBzZXREaXNjb3ZlcnlVUkxSb3dTZXR0aW5ncygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgYnVzRmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChidXNGaW5kUXVhbGlmaWVycyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IGJ1c0ZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIiwiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNldEFkdmFuY2VkQ29tbW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTKSklPiIpOwotCi0gICAgLy8gVVVJRCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRCdXNpbmVzc2VzVVVJRFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZEJ1c2luZXNzZXNVVUlERm9ybSA9IGZpbmRCdXNpbmVzc2VzVVVJRFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIGZpbmRCdXNpbmVzc2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSkpJT4iOwotCi0gICAgc2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9ZmluZEJ1c2luZXNzZXNTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JGaW5kU2VydmljZXNGb3JtcygpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBmaW5kU2VydmljZXMgZm9ybS4KLTwlCi0gICBTdHJpbmcgZmluZFNlcnZpY2VzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPls8JT1maW5kU2VydmljZXNTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBmaW5kU2VydmljZXNTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlcnZpY2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0gPSBmaW5kU2VydmljZXNTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kU2VydmljZXNTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSA9IGZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgdmFyIGlzT3duZWRDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPixpc093bmVkQ2hlY2tlZCk7Ci08JQotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VCdXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VCdXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRCdXNpbmVzcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoImZpbmRTZXJ2aWNlc0FkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIHNlcnZpY2VDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2VydmljZUNhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzZXJ2aWNlQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LmFkZEVsZW1lbnQoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzZXJ2aWNlU2VydmljZUludGVyZmFjZXMpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgc2VydmljZUZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChzZXJ2aWNlRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBzZXJ2aWNlRmluZFF1YWxpZmllcnMuZ2V0RmluZFF1YWxpZmllclZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBGaW5kUXVhbGlmaWVyIGZpbmRRdWFsaWZpZXIgPSAoRmluZFF1YWxpZmllcilmaW5kUXVhbGlmaWVyVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgc2V0RmluZFF1YWxpZmllcigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZpbmRRdWFsaWZpZXIuZ2V0VGV4dCgpKSU+IiwiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUykpJT4iKTsKLQotICAgIC8vIFVVSUQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kU2VydmljZXNVVUlEU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZFNlcnZpY2VzVVVJREZvcm0gPSBmaW5kU2VydmljZXNVVUlEU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKSklPiI7Ci0KLSAgICBzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9ZmluZFNlcnZpY2VzU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybXMoKQotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmluZFNlcnZpY2VJbnRlcmZhY2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT5bPCU9ZmluZFNlcnZpY2VJbnRlcmZhY2VzU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtID0gZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0KLSAgICB2YXIgaXNPd25lZENoZWNrZWQgPSA8JT0oZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4saXNPd25lZENoZWNrZWQpOwotICAgIHZhciBpc1VzZVNlcnZpY2VDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSkgIT0gbnVsbCklPjsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSU+LmNoZWNrZWQgPSBpc1VzZVNlcnZpY2VDaGVja2VkOwotICAgIHRvZ2dsZUZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVBhcmFtZXRlcnMoZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKTsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKSU+IjsKLQotPCUKLSAgIFZlY3RvciBzaVNlcnZpY2UgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgIFZlY3RvciBzaVNlcnZpY2VDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZKTsKLSAgIGlmIChzaVNlcnZpY2UgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNpU2VydmljZUNvcHkgPT0gbnVsbCkKLSAgICAgICBzaVNlcnZpY2VDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2lTZXJ2aWNlQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzaVNlcnZpY2Uuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNpU2VydmljZS5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2lTZXJ2aWNlQ29weS5hZGRFbGVtZW50KHNpU2VydmljZS5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZSIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSxzaVNlcnZpY2VDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2lTZXJ2aWNlID0gbmV3IFZlY3RvcigpOwotICAgICBzaVNlcnZpY2VDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSxzaVNlcnZpY2UpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZLHNpU2VydmljZUNvcHkpOwotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIHNpSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKHNpSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzaUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2lDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgc2lGaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMpOwotICAgaWYgKHNpRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBzaUZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZSIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTKSklPiIpOwotCi0gICAgLy8gVVVJRCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1VVSURTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlcnZpY2VJbnRlcmZhY2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNVVUlERm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1VVSURTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNVVUlERm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKSklPiI7Ci0KLSAgICBzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPWZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oc2VhcmNoRm9yVmFsdWVTdHJpbmcpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgcXVlcnlJbmZvSXRlbUxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlJbmZvSXRlbUxpc3QiKTsKLSAgICB2YXIgc2VhcmNoRm9ySW5kZXggPSBwYXJzZUludChzZWFyY2hGb3JWYWx1ZVN0cmluZyk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHNlYXJjaEZvckluZGV4KQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotPCUKLSAgIGlmIChzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkubGVuZ3RoKCkgPCAxKQotICAgewotJT4KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlJbmZvSXRlbUxpc3QiKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93RmluZEZvcm0ocXVlcnlJdGVtSW5kZXgsc3R5bGUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgZmluZFNlY3Rpb25JZHM7Ci0gICAgc3dpdGNoIChxdWVyeUl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT46Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZEJ1c2luZXNzZXNTZWN0aW9uSWRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT46Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZFNlcnZpY2VzU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPjoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZFNlcnZpY2VJbnRlcmZhY2VzU2VjdGlvbklkczsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBzdHlsZSkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24ocXVlcnlJdGVtSW5kZXgsaXNDaGVja2VkKQotICB7Ci0gICAgaWYgKGlzQ2hlY2tlZCAmJiA8JT0hcmVnRWxlbWVudC5pc0xvZ2dlZEluKCklPikKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF1dGhlbnRpY2F0aW9uU2VjdGlvbklkc1txdWVyeUl0ZW1JbmRleF0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdXRoZW50aWNhdGlvblNlY3Rpb25JZHNbcXVlcnlJdGVtSW5kZXhdKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlUGFyYW1ldGVycyhmb3JtKQotICB7Ci0gICAgdmFyIGlzVXNlU2VydmljZUNoZWNrZWQgPSBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UlPi5jaGVja2VkOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+LmNoZWNrZWQ7Ci0gICAgaWYgKGlzVXNlU2VydmljZUNoZWNrZWQpCi0gICAgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRPd25lZCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sZmFsc2UpOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVyc1NlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkT3duZWQiKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4saXNPd25lZENoZWNrZWQpOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlOwotICAgLy9UaGUgSlNQIHZhbGlkYXRvciBjbGFpbXMgdGhpcyBzdWJRdWVyeUtleSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpcwotICAgLy9pbnZhbGlkLCBidXQgcmVtb3ZpbmcgaXQgY2F1c2VzIHRoZSBKU1Agbm90IHRvIGNvbXBpbGUgb24gSmV0dHkuCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCAmJiBzdWJRdWVyeUtleS5sZW5ndGgoKSA+IDApCi0gICB7Ci0gICAgIGludCBxdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pKTsKLSAgICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICAgIHsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICAgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVQlFVRVJZIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICAgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVQlFVRVJZIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVMiKSk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVUJRVUVSWSIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpKTsKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgICB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRklORCIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2Zvcm1zL2ZpbmRmb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgIDxsYWJlbCBmb3I9InF1ZXJ5TmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUVVFUllfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkPiA8aW5wdXQgaWQ9InF1ZXJ5TmFtZSIgdHlwZT0idGV4dCIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfUVVFUllfTkFNRSIpKSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJxdWVyeUluZm9JdGVtTGlzdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiB2YWxpZ249Im1pZGRsZSIgbm93cmFwIGhlaWdodD00MD4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2VhcmNoRm9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUFSQ0hfRk9SIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBub3dyYXAgaGVpZ2h0PTQwPgotICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJzZWFyY2hGb3IiIG9uQ2hhbmdlPSJzaG93TWFpbkZvcm0odGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpJT4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIiklPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpJT4KLSAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIHdpZHRoPSI5MCUiIGhlaWdodD00MD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWJhZDJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPiAgICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+IDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRfQURWQU5DRURfREVTQyIpJT4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV91c2Vfc2VydmljZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSU+IiBvbkNsaWNrPSJ0b2dnbGVGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2VQYXJhbWV0ZXJzKHRoaXMuZm9ybSkiPjxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV91c2Vfc2VydmljZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFX1NFUlZJQ0UiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBTdHJpbmdbXSBzZXJ2aWNlU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX1NFUlZJQ0UiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpLCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoc2VydmljZVNwZWNpZmljSW5mbyk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlU2VjdGlvbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+Ci0gICAgPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRPd25lZCI+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGhlaWdodD0zNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2Vfb3duZWQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQlPiIgb25DbGljaz0idG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LHRoaXMuY2hlY2tlZCkiPgotICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX293bmVkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PV05FRCIpJT48L2xhYmVsPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZGl2PgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWROYW1lIj4KLSAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZWRfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlZF9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE5hbWVGaW5kUXVhbGlmaWVyc1NlY3Rpb24iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL25hbWVzX2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotICAgIDwvZGl2PgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVyc1NlY3Rpb24iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZWQ5YzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJmaW5kU2VydmljZUludGVyZmFjZXNTdHlsZSI+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQVJDSF9UWVBFIiklPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX3V1aWQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX3V1aWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1VVSUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJRCIpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0geyJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uSlNQLmpzcCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSwiRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfSU5URVJGQUNFX1VVSURfREVTQyJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM1OTM0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfSU5URVJGQUNFU19TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VzX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZXNfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5NzZhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZXNBZHZhbmNlZCI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+ICAgIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0zNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlc19hZHZhbmNlX293bmVkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4iIG9uQ2xpY2s9InRvZ2dsZUFkdmFuY2VkQXV0aGVudGljYXRpb25TZWN0aW9uKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LHRoaXMuY2hlY2tlZCkiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZXNfYWR2YW5jZV9vd25lZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1dORUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFN0cmluZ1tdIGJ1c1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9CVVNJTkVTUyIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSwiZmluZFNlcnZpY2VzQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlc0FkdmFuY2VkQnVzaW5lc3MiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhidXNTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmdbXSBzaVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSwiZmluZFNlcnZpY2VzQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoc2lTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTRmMzkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZXMiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0iZmluZFNlcnZpY2VzU3R5bGUiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUFSQ0hfVFlQRSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2Vfc2ltcGxlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2Vfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2VfYWR2YW5jZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2VfdXVpZCIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfc2VydmljZV91dWlkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19VVUlEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZVVVSUQiKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHsidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbkpTUC5qc3AiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSwiRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfVVVJRF9ERVNDIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGI3MjgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlc1NpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRfU0VSVklDRVNfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VzX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VzX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzOWRiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSAgIAotICAgU3RyaW5nIGZvcm1Db250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSAoU3RyaW5nW10pKHNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpKTsKLSAgIFN0cmluZyBhY3Rpb25MaW5rID0gKFN0cmluZylvdGhlclByb3BlcnRpZXNbMF07Ci0gICBTdHJpbmcgdXVpZEVudHJ5S2V5ID0gKFN0cmluZylvdGhlclByb3BlcnRpZXNbMV07Ci0gICBTdHJpbmcgZGVzY3JpcHRpb25LZXkgPSAoU3RyaW5nKW90aGVyUHJvcGVydGllc1syXTsKLSU+Ci08ZGl2IGlkPSI8JT1mb3JtQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb25MaW5rKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKGRlc2NyaXB0aW9uS2V5KSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSI8JT0oZm9ybUNvbnRhaW5lcklkKyJfaW5wdXRfdXVpZF9rZXkiKSU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VVUlEX0tFWSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQodXVpZEVudHJ5S2V5KSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9KGZvcm1Db250YWluZXJJZCsiX2lucHV0X3V1aWRfa2V5IiklPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGUxYTkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaEJ1c2luZXNzQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0JVU0lORVNTX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5ldyBCb29sZWFuKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2Rpc2NvdmVyeVVSTHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgIAotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdiMzBjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0icHVibGlzaEJ1c2luZXNzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9InB1Ymxpc2hCdXNpbmVzc1N0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9GT1JNIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9idXNpbmVzc19zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3B1Ymxpc2hfYnVzaW5lc3NfYWR2YW5jZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9idXNpbmVzc19hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzE5M2Q1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hCdXNpbmVzc1NpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfQlVTSU5FU1NfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NTaW1wbGVBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9idXNpbmVzc19zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9idXNpbmVzc19zaW1wbGVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX2J1c2luZXNzX3NpbXBsZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTiU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0M2Q2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIG11c3QgYmUgYSByZWdpc3RyeSBub2RlLgotICAgTm9kZSByZWdOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShyZWdOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBzdWJRdWVyeUtleVByb3BlcnR5LnNldFN1YlF1ZXJ5S2V5KHN1YlF1ZXJ5S2V5KTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCUKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUkVHSVNUUllfUFVCTElTSCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBzZWN0aW9uSWRzID0gWyJwdWJsaXNoQnVzaW5lc3MiLCJwdWJsaXNoU2VydmljZSIsInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlIl07Ci0gIHZhciBwdWJsaXNoQnVzaW5lc3NTZWN0aW9uSWRzID0gWyJwdWJsaXNoQnVzaW5lc3NTaW1wbGUiLCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZCJdOwotICB2YXIgcHVibGlzaFNlcnZpY2VTZWN0aW9uSWRzID0gWyJwdWJsaXNoU2VydmljZVNpbXBsZSIsInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiXTsKLSAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkcyA9IFsicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGUiLCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkIl07Ci0gIHZhciBzdHlsZUZvcm1zID0gWyJwdWJsaXNoQnVzaW5lc3NTdHlsZSIsInB1Ymxpc2hTZXJ2aWNlU3R5bGUiLCJwdWJsaXNoU2VydmljZUludGVyZmFjZVN0eWxlIl07Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzSWRlbnRpZmllclRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZElkZW50aWZpZXJzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0Rpc2NvdmVyeVVSTFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZVNpbXBsZUJ1c2luZXNzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZEJ1c2luZXNzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzSWRlbnRpZmllclRhYmxlKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICB2YXIgcHVibGlzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoIik7Ci0gICAgcHVibGlzaC5zZWxlY3RlZEluZGV4ID0gPCU9Zm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pJT47Ci0gICAgc2V0RGVmYXVsdHNGb3JQdWJsaXNoQnVzaW5lc3NGb3JtcygpOwotICAgIHNldERlZmF1bHRzRm9yUHVibGlzaFNlcnZpY2VGb3JtcygpOwotICAgIHNldERlZmF1bHRzRm9yUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VGb3JtcygpOwotPCUKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0lPgotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoQnVzaW5lc3NTaW1wbGVBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaFNlcnZpY2VTaW1wbGVBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLSAgICBzaG93TWFpbkZvcm0ocHVibGlzaC52YWx1ZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhmb3JtKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JQdWJsaXNoQnVzaW5lc3NGb3JtcygpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBwdWJsaXNoQnVzaW5lc3MgZm9ybS4KLTwlCi0gICBTdHJpbmcgcHVibGlzaEJ1c2luZXNzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPls8JT1wdWJsaXNoQnVzaW5lc3NTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaEJ1c2luZXNzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0gPSBwdWJsaXNoQnVzaW5lc3NTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtKTsKLSAgICBwdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKSU+IjsKLSAgICBwdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTikpJT4iOwotCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoQnVzaW5lc3NTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0gPSBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybSk7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIik7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIik7Ci08JQotICAgVmVjdG9yIGJ1c05hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICBpZiAoYnVzTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxidXNOYW1lVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlidXNOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGJ1c0Rlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChidXNEZXNjcmlwdGlvblZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxidXNEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pYnVzRGVzY3JpcHRpb25WZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgSWRlbnRpZmllckJhZyBidXNJZEJhZyA9IChJZGVudGlmaWVyQmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICBpZiAoYnVzSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gYnVzSWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkSWRlbnRpZmllclJvdygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotICAgIHNldElkZW50aWZpZXJSb3dTZXR0aW5ncygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRJZGVudGlmaWVycyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgYnVzQ2F0QmFnID0gKENhdGVnb3J5QmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgIGlmIChidXNDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gYnVzQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0gIAotICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gKERpc2NvdmVyeVVSTHMpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgaWYgKGRpc2NvdmVyeVVSTHMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IGRpc2NvdmVyeVVSTHMuZ2V0RGlzY292ZXJ5VVJMVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IChEaXNjb3ZlcnlVUkwpZGlzY292ZXJ5VVJMVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkRGlzY292ZXJ5VVJMUm93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgICBzZXREaXNjb3ZlcnlVUkxSb3dTZXR0aW5ncygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSU+ICAgICAgIAotICAgIHNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPXB1Ymxpc2hCdXNpbmVzc1N0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0c0ZvclB1Ymxpc2hTZXJ2aWNlRm9ybXMoKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPls8JT1wdWJsaXNoU2VydmljZVN0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZXJ2aWNlU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtKTsKLTwlCi0gICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VCdXNpbmVzc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlQnVzaW5lc3Muc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkuYWRkRWxlbWVudChzZXJ2aWNlQnVzaW5lc3MuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJwdWJsaXNoU2VydmljZVNpbXBsZUJ1c2luZXNzIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICB9Ci0lPgotPCUKLSAgIFZlY3RvciBzZXJ2aWNlSW50ZXJmYWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFZlY3RvciBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUludGVyZmFjZXNDb3B5ID09IG51bGwpCi0gICAgICAgc2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2VydmljZUludGVyZmFjZXNDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VJbnRlcmZhY2VzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyxmYWxzZSk7Ci0gICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZUludGVyZmFjZXNDb3B5LmFkZEVsZW1lbnQoc2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0lPgotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTikpJT4iOwotCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZXJ2aWNlU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0gPSBwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLTwlCi0gICBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VCdXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VCdXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZEJ1c2luZXNzIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTLHNlcnZpY2VCdXNpbmVzcyk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICB9Ci0lPgotICAgIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKSklPiI7Ci08JQotICAgVmVjdG9yIHNlcnZpY2VOYW1lVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICBpZiAoc2VydmljZU5hbWVWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZU5hbWVWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKXNlcnZpY2VOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3Igc2VydmljZURlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgaWYgKHNlcnZpY2VEZXNjcmlwdGlvblZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKXNlcnZpY2VEZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIHNlcnZpY2VDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2VydmljZUNhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzZXJ2aWNlQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICBzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9cHVibGlzaFNlcnZpY2VTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm1zKCkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoU2VydmljZUludGVyZmFjZVN0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT5bPCU9cHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoU2VydmljZUludGVyZmFjZVNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0gPSBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybSk7Ci0gICAgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTiU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04pKSU+IjsKLQotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoU2VydmljZUludGVyZmFjZVNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtID0gcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtKTsKLSAgICBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpJT4iOwotICAgIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotPCUKLSAgIFZlY3RvciBzaURlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChzaURlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNpRGVzY3JpcHRpb25WZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKXNpRGVzY3JpcHRpb25WZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgSWRlbnRpZmllckJhZyBzaUlkQmFnID0gKElkZW50aWZpZXJCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgIGlmIChzaUlkQmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNpSWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkSWRlbnRpZmllclJvdygicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkSWRlbnRpZmllcnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIHNpQ2F0QmFnID0gKENhdGVnb3J5QmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChzaUNhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzaUNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1wdWJsaXNoU2VydmljZUludGVyZmFjZVN0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0ocHVibGlzaFZhbHVlKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIHB1Ymxpc2ggPSBwYXJzZUludChwdWJsaXNoVmFsdWUpOwotICAgIGZvciAodmFyIGk9MDtpPHNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBwdWJsaXNoKQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dQdWJsaXNoRm9ybShxdWVyeUl0ZW1JbmRleCxzdHlsZSkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotICAgIHZhciBwdWJsaXNoU2VjdGlvbklkczsKLSAgICBzd2l0Y2ggKHF1ZXJ5SXRlbUluZGV4KQotICAgIHsKLSAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPjoKLSAgICAgICAgcHVibGlzaFNlY3Rpb25JZHMgPSBwdWJsaXNoQnVzaW5lc3NTZWN0aW9uSWRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT46Ci0gICAgICAgIHB1Ymxpc2hTZWN0aW9uSWRzID0gcHVibGlzaFNlcnZpY2VTZWN0aW9uSWRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+OgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHVibGlzaFNlY3Rpb25JZHMgPSBwdWJsaXNoU2VydmljZUludGVyZmFjZVNlY3Rpb25JZHM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBmb3IgKHZhciBpPTA7aTxwdWJsaXNoU2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHN0eWxlKQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoU2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZWxzZQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoU2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9QVUJMSVNIIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiB2YWxpZ249Im1pZGRsZSIgbm93cmFwPgotICAgICAgICAgICAgPGxhYmVsIGZvcj0icHVibGlzaCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSCIpJT48L2xhYmVsPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBub3dyYXA+Ci0gICAgICAgICAgICA8c2VsZWN0IGlkPSJwdWJsaXNoIiBvbkNoYW5nZT0ic2hvd01haW5Gb3JtKHRoaXMudmFsdWUpIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTUyIpJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFIiklPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRSIpJT4KLSAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZGl2PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjZjMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUFkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPiAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPiAgICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBib29sZWFuIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICBTdHJpbmdbXSBidXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfQlVTSU5FU1MiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpLCJwdWJsaXNoU2VydmljZUFkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1N9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQnVzaW5lc3MiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhidXNTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2Vfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICB0YWJsZUhhc0Vycm9ycyA9ICFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFN0cmluZ1tdIHNlcnZpY2VJbnRlcmZhY2VTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VTIiwobmV3IEJvb2xlYW4odGFibGVIYXNFcnJvcnMpKS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpLCJwdWJsaXNoU2VydmljZUFkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlSW50ZXJmYWNlU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhM2ZmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJwdWJsaXNoU2VydmljZVN0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9GT1JNIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGVjYTc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfSU5URVJGQUNFX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2Vfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWQnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmE4MmNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9InB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGUiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0ZPUk0iKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIwNmViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0VfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUF1dGhlbnRpY2F0aW9uIik7Ci0lPiAgICAgIAotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gIAotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGUnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZV9kZXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTiU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+ICAgICAgICAgIAotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFjYWYxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZVNpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPiAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VTaW1wbGVBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgYm9vbGVhbiB0YWJsZUhhc0Vycm9ycyA9ICFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKTsKLSAgIFN0cmluZ1tdIGJ1c1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9CVVNJTkVTUyIsKG5ldyBCb29sZWFuKHRhYmxlSGFzRXJyb3JzKSkudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyksInB1Ymxpc2hTZXJ2aWNlU2ltcGxlIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VTaW1wbGVCdXNpbmVzcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJ1c1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VTaW1wbGUnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVzdWx0c0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Jlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ0NmZkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVzdWx0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSU+Ci08L2pzcDp1c2VCZWFuPiAgIAotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgPSBudWxsOwotICAgYm9vbGVhbiBoYXNUYXJnZXQgPSBmYWxzZTsKLSAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFF1ZXJ5RWxlbWVudCkKLSAgIHsKLSAgICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IChTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KXRyZWVFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCk7Ci0gICAgIGlmIChzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ICE9IG51bGwgJiYgc3ViUXVlcnlUcmFuc2ZlclRhcmdldC5nZXRUYXJnZXRGb3JtVG9vbCgpICE9IG51bGwpCi0gICAgIHsKLSAgICAgICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5hZGRFbGVtZW50KHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpOwotICAgICAgIGhhc1RhcmdldCA9IHRydWU7Ci0gICAgIH0KLSAgIH0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1JFU1VMVFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBWZWN0b3IgY2hpbGROb2RlcyA9IHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIFN0cmluZyB1cmwgPSBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoY2hpbGROb2RlLmdldE5vZGVJZCgpLGZhbHNlKTsKLSAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotICAgICBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICB7Ci0gICAgICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgIG5hbWUgPSBiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgIGRlc2NyaXB0aW9uID0gYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgIH0KLSAgICAgZWxzZSBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgIHsKLSAgICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCljaGlsZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgICBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICB9Ci0gICAgIGVsc2UgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICB7Ci0gICAgICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0gICAgICAgbmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgICAgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgIH0KLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJSZXN1bHRzIiw8JT1jaGlsZE5vZGUuZ2V0Tm9kZUlkKCklPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbiklPiIpOwotPCUKLSAgIH0KLSU+Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGRpdiBpZD0iY29udGVudCI+Ci0gIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9RVUVSWV9SRVNVTFRTIik7Ci0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPGZvcm0gdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZTsKLSAgIGludCBpdGVtVHlwZSA9IEludGVnZXIucGFyc2VJbnQodHJlZUVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSkpOyAgIAotICAgc3dpdGNoIChpdGVtVHlwZSkKLSAgIHsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIH0KLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHt0YWJsZVRpdGxlLCIifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJSZXN1bHRzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci08JQotICAgaWYgKGhhc1RhcmdldCkKLSAgIHsKLSU+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1RSQU5TRkVSIiklPiIgb25DbGljaz0idHJhbnNmZXJTZWxlY3Rpb25zKCdSZXN1bHRzJyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0icmVmcmVzaFNlbGVjdGlvbnMoJ1Jlc3VsdHMnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9UT19GQVZPUklURVMiKSU+IiBvbkNsaWNrPSJhZGRTZWxlY3Rpb25zVG9GYXZvcml0ZXMoJ1Jlc3VsdHMnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NMRUFSIiklPiIgb25DbGljaz0iY2xlYXJTZWxlY3Rpb25zKCdSZXN1bHRzJyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTE2MDJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9TRVJWSUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICB2YXIgc2VydmljZURldGFpbHNXU0RMVVJMVGFibGUgPSBnZXRUYWJsZSgic2VydmljZURldGFpbHNXU0RMVVJMIik7Ci0gICAgdmFyIHNlcnZpY2VEZXRhaWxzTmFtZXNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlRGV0YWlsc05hbWVzIik7Ci0gICAgdmFyIHNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiKTsKLTwlCi0gICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgIFN0cmluZyB3c2RsVVJMID0gbnVsbDsKLSAgIGlmICh3c2RsVVJMTGlzdEVsZW1lbnQgPT0gbnVsbCkKLSAgIHsKLSAgICAgdHJ5Ci0gICAgIHsKLSAgICAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgICAgIHdzZGxVUkwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETChzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKSwgc2VydmljZUVsZW1lbnQuZ2V0UmVnaXN0cnlFbGVtZW50KCkuZ2V0UHJveHkoKSk7Ci0gICAgICAgdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICAgICB3c2RsVVJMID0gInRlbXAud3NkbCI7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICB7Ci0gICAgICAgd3NkbFVSTCA9ICIiOwotICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICB9Ci0gICAgIHdzZGxVUkxMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh3c2RsVVJMKTsKLSAgICAgd3NkbFVSTExpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbygtMSwtMSwwKTsKLSAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMLHdzZGxVUkxMaXN0RWxlbWVudCk7Ci0gICB9Ci0gICBlbHNlCi0gICAgIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKHdzZGxVUkxMaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdygic2VydmljZURldGFpbHNXU0RMVVJMIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KCJzZXJ2aWNlRGV0YWlsc1dTRExVUkwiLDwlPVVERElBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxVUkwpJT4iKTsKLTwlCi0gICBpZiAoaXNFcnJvcikKLSAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHNlcnZpY2VEZXRhaWxzV1NETFVSTFRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgfQotCi0gICBWZWN0b3IgbmFtZUluZGV4VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgaWYgKG5hbWVJbmRleFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxuYW1lSW5kZXhWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW5hbWVJbmRleFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZURldGFpbHNOYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VEZXRhaWxzTmFtZXMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1uYW1lLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHNlcnZpY2VEZXRhaWxzTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBkZXNjcmlwdGlvbkluZGV4VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChkZXNjcmlwdGlvbkluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uSW5kZXhWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPWRlc2NyaXB0aW9uLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGNhdFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKGNhdFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxjYXRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMsaSk7Ci0gICAgICAgaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvdygic2VydmljZURldGFpbHNDYXRlZ29yaWVzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0NhdGVnb3J5Um93KCJzZXJ2aWNlRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgLy8gQXV0aGVudGljYXRpb24uCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXJ2aWNlRGV0YWlsc0F1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSU+Ci0KLSAgICBzaG93TWFpbkZvcm0oKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybSgpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSgic2VydmljZURldGFpbHNXU0RMVVJMIiwiPCU9VURESUFjdGlvbklucHV0cy5XU0RMX1VSTF9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUoInNlcnZpY2VEZXRhaWxzTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUoInNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0NhdGVnb3J5VGFibGUoInNlcnZpY2VEZXRhaWxzQ2F0ZWdvcmllcyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NFUlZJQ0VfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSU+IiB2YWx1ZT0iPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSU+IiB2YWx1ZT0iPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKSU+Ij4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVUQUlMU19FRElUQUJMRSIsc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0tFWSIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzV1NETFVSTCIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZURldGFpbHNOYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZURldGFpbHNDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZGl2PgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZUludGVyZmFjZURldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTVhNmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOyAgIAotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkxUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkwiKTsKLSAgICB2YXIgc2VydmljZUludGVyZmFjZURldGFpbHNOYW1lVGFibGUgPSBnZXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNOYW1lIik7Ci0gICAgdmFyIHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiKTsKLSAgICB2YXIgc2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVyc1RhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiKTsKLSAgICB2YXIgc2VydmljZUludGVyZmFjZURldGFpbHNDYXRlZ29yaWVzVGFibGUgPSBnZXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNDYXRlZ29yaWVzIik7Ci08JQotICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgU3RyaW5nIHdzZGxVUkwgPSBudWxsOwotICAgaWYgKHdzZGxVUkxMaXN0RWxlbWVudCA9PSBudWxsKQotICAgewotICAgICB0cnkKLSAgICAgewotICAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICAgd3NkbFVSTCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKHNpRWxlbWVudC5nZXRUTW9kZWwoKSk7Ci0gICAgICAgdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICAgICB3c2RsVVJMID0gInRlbXAud3NkbCI7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICB7Ci0gICAgICAgd3NkbFVSTCA9ICIiOwotICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgfQotICAgICB3c2RsVVJMTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQod3NkbFVSTCk7Ci0gICAgIHdzZGxVUkxMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsMCk7Ci0gICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsd3NkbFVSTExpc3RFbGVtZW50KTsKLSAgIH0KLSAgIGVsc2UKLSAgICAgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKHdzZGxVUkxMaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdygic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkwiLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UlPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxVUkwpJT4iKTsKLTwlCi0gICBpZiAoaXNFcnJvcikKLSAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTFRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JSAgIAotICAgfQotCi0gICBMaXN0RWxlbWVudCBuYW1lTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgIFN0cmluZyBuYW1lID0gKFN0cmluZyluYW1lTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgaXNOZXdJdGVtID0gKG5hbWVMaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdygic2VydmljZUludGVyZmFjZURldGFpbHNOYW1lIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc05hbWVTaW5nbGVJdGVtUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIpOwotPCUKLSAgIGlmIChpc0Vycm9yKQotICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZUludGVyZmFjZURldGFpbHNOYW1lVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICB9Ci0gICAKLSAgIFZlY3RvciBkZXNjcmlwdGlvbkluZGV4VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoZGVzY3JpcHRpb25JbmRleFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9ZGVzY3JpcHRpb24uZ2V0TGFuZygpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JSAgICAgICAKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSAgIAotICAgVmVjdG9yIGlkVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgIGlmIChpZFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxpZFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpaWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMsaSk7Ci0gICAgICAgaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0lkZW50aWZpZXJSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlICAgICAgIAotICAgICB9Ci0gICB9Ci0gICAKLSAgIFZlY3RvciBjYXRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoY2F0VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGNhdFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMsaSk7Ci0gICAgICAgaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvdygic2VydmljZUludGVyZmFjZURldGFpbHNDYXRlZ29yaWVzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0NhdGVnb3J5Um93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSAgIAotICAgLy8gQXV0aGVudGljYXRpb24uCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+ICAgCi0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0F1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSU+ICAKLSAgICBzaG93TWFpbkZvcm0oKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKCkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0RldGFpbHNTaW5nbGVJdGVtVGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIsIjwlPVVERElBY3Rpb25JbnB1dHMuV1NETF9VUkxfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNOYW1lIiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzSWRlbnRpZmllclRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzQ2F0ZWdvcnlUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNDYXRlZ29yaWVzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gICAKLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4gIAotICAgICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+ICAgICAgCi0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpJT4iPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVRBSUxTX0VESVRBQkxFIixzZWxlY3RlZE5vZGUuZ2V0Tm9kZU5hbWUoKSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPiAgICAgICAgCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VfS0VZIiklPgotICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgIDwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNOYW1lIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXModWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgIAotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzSWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAKLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZGl2PgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOyAgCi08L3NjcmlwdD4gICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQyMjhiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFN0cmluZyB3c2RsVVJMOwotICAgLy8gc2VsZWN0ZWROb2RlIHNob3VsZCBiZSBlaXRoZXIgYSBzZXJ2aWNlIG9yIGEgc2VydmljZSBpbnRlcmZhY2Ugbm9kZS4KLSAgIGlmIChzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgIHsKLSAgICAgU2VydmljZU5vZGUgc2VydmljZU5vZGUgPSAoU2VydmljZU5vZGUpc2VsZWN0ZWROb2RlOwotICAgICB3c2RsVVJMID0gc2VydmljZU5vZGUuZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBTZXJ2aWNlSW50ZXJmYWNlTm9kZSBzaU5vZGUgPSAoU2VydmljZUludGVyZmFjZU5vZGUpc2VsZWN0ZWROb2RlOwotICAgICB3c2RsVVJMID0gc2lOb2RlLmdldFdTRExVUkxGcm9tRGV0YWlsc1Rvb2woKTsKLSAgIH0KLSAgIGZvcm1Qcm9wZXJ0aWVzLnB1dCgiZm9ybUFjdGlvbkxpbmsiLCJ1ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AiKTsKLSAgIGZvcm1Qcm9wZXJ0aWVzLnB1dCgid3NkbFVSTCIsd3NkbFVSTCk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZmEyNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUFjdGlvbkxpbmsuYXBwZW5kKCJ1ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VucHVibGlzaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VucHVibGlzaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWEzMzcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VbnB1Ymxpc2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUobmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgCi0gICBGb3JtVG9vbCB1bnB1Ymxpc2hUb29sID0gKEZvcm1Ub29sKShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSU+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVU5QVUJMSVNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotJT4KLSAgICB2YXIgYXV0aGVudGljYXRpb25TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVucHVibGlzaEF1dGhlbnRpY2F0aW9uIik7Ci0gICAgYXV0aGVudGljYXRpb25TZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKXVucHVibGlzaFRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCkpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyl1bnB1Ymxpc2hUb29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKSklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpdW5wdWJsaXNoVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKSklPiI7ICAgIAotPCUKLSAgIH0KLSU+Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gdW5wdWJsaXNoVG9vbC5nZXRIaWdobGlnaHRlZEltYWdlTGluaygpOwotICAgU3RyaW5nIHRpdGxlID0gdW5wdWJsaXNoVG9vbC5nZXRBbHRUZXh0KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOUFVCTElTSF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgidW5wdWJsaXNoQXV0aGVudGljYXRpb24iKTsKLSU+ICAgICAgIAotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZTg1M2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj0zIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFYX1NFQVJDSF9TRVQiKSU+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VUKSkKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUJT4iIGNsYXNzPSJzbXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfUkVTVUxUUyIpJT4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMpKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMlPiIgY2xhc3M9InNtdGV4dGVudGVyIj4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTc3OWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkFic3RyYWN0VURESUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1UcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotU3RyaW5nIHVzZXJuYW1lID0gbnVsbDsKLVN0cmluZyBwYXNzd29yZCA9IG51bGw7Ci1pZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQWJzdHJhY3RVRERJRWxlbWVudCkKLXsKLSAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoKEFic3RyYWN0VURESUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRSZWdpc3RyeUVsZW1lbnQoKTsKLSAgdXNlcm5hbWUgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotfQotaWYgKHVzZXJuYW1lID09IG51bGwpCi0gIHVzZXJuYW1lID0gIiI7Ci1pZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgcGFzc3dvcmQgPSAiIjsKLSU+Ci08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3B1Ymxpc2hfdXJsIiU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT48L2xhYmVsPgotICAgICAgICA8JQotICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKSkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF9wdWJsaXNoX3VybCIlPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF91c2VyX2lkIiU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSSUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPCUKLSAgICAgICAgaWYgKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3VzZXJfaWQiJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVzZXJuYW1lKSU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+PGxhYmVsIGZvcj0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3Bhc3N3b3JkIiU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVNTV09SRCIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBpZD0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3Bhc3N3b3JkIiU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHBhc3N3b3JkKSU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU0OWE2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4gCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FURUdPUklFUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZENhdGVnb3J5Um93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+ICAKLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBVEVHT1JZX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi0gICBpZiAodGFibGVDb250YWluZXJJZC5zdGFydHNXaXRoKCJmaW5kQnVzaW5lc3NlcyIpKQotICAgey8vIGNvbmRpdGlvbiB0byB0dXJuIG9mZiBmb3IgZXZlcnl0aGluZyBvdGhlciB0aGFuIGZpbmQgYnkgYnVzaW5lc3Mgc2VhcmNoZXMuCi0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImJ1c2luZXNzX2NhdGVnb3JpZXMiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX0NBVEVHT1JJRVMiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgPHNlbGVjdCBpZD0iYnVzaW5lc3NfY2F0ZWdvcmllcyIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgIDxvcHRpb24+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVNfT05MWSIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNlcnZpY2VTdWJzZXQlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTX09OTFkiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5jb21iaW5lQ2F0ZWdvcnlCYWdzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CT1RIIiklPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlICAgCi0gICB9Ci0lPiAgICAgCi08L2Rpdj4gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkY2ZlNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FURUdPUklFUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZERldGFpbHNDYXRlZ29yeVJvdygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdFNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjYW5jZWxTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FURUdPUllfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9WQUxVRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0Rpc2NvdmVyeVVSTHNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQzZDcxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0Rpc2NvdmVyeVVSTHNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gKChCb29sZWFuKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpKS5ib29sZWFuVmFsdWUoKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4gIAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWVVSTFMiKSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAKLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdHJ1ZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzRGlzY292ZXJ5VVJMUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjYW5jZWxTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSU+PC9hPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ3YmM1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSURFTlRJRklFUlMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzSWRlbnRpZmllclJvdygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSURFTlRJRklFUl9UWVBFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX1ZBTFVFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDhkNWU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nW10gdGl0bGVLZXlzID0ge290aGVyUHJvcGVydGllc1swXSxvdGhlclByb3BlcnRpZXNbMV19OwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSBvdGhlclByb3BlcnRpZXNbMl0uZXF1YWxzKEJvb2xlYW4uVFJVRS50b1N0cmluZygpKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0aXRsZUtleXNbMF0pJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgIAotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLTwlCi0gICBTdHJpbmcgdGV4dENvbnRyb2xUaXRsZUtleTsKLSAgIGlmICh0aXRsZUtleXNbMF0uZXF1YWxzKCJGT1JNX0xBQkVMX05BTUVTIikpCi0gICAgIHRleHRDb250cm9sVGl0bGVLZXkgPSAiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSI7Ci0gICBlbHNlCi0gICAgIHRleHRDb250cm9sVGl0bGVLZXkgPSAiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiOwotJT4gICAgICAgICAKLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0ZXh0Q29udHJvbFRpdGxlS2V5KSklPicsdHJ1ZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdFNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNhbmNlbFNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1sxXSklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWM3Y2ZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nIGl0ZW1IZWFkZXIgPSAoU3RyaW5nKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9aXRlbUhlYWRlciU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2Rpc2NvdmVyeVVSTHNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2Rpc2NvdmVyeVVSTHNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjNmNTM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9ICgoQm9vbGVhbilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKSkuYm9vbGVhblZhbHVlKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+ICAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkxTIiklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgICAgICAgICAgICAgCi0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREaXNjb3ZlcnlVUkxSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzNzIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOyAgIAotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EUVVBTElGSUVSUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD48bGFiZWwgZm9yPSJjb21iaW5lX2tleXMiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NPTUJJTkVfS0VZUyIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxzZWxlY3QgaWQ9ImNvbWJpbmVfa2V5cyIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuYW5kQWxsS2V5cyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQU5EQUxMS0VZUyIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLm9yQWxsS2V5cyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fT1JBTExLRVlTIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIub3JMaWtlS2V5cyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fT1JMSUtFS0VZUyIpJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPUlRfQllfTkFNRSIpJT48L3RkPgotICAgICAgPHRkPgotICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJhZHZhbmNlX3NvcnRfYnlfbmFtZV9hc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9OQU1FJT4iIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVBc2MlPiIgY2hlY2tlZD48bGFiZWwgZm9yPSJhZHZhbmNlX3NvcnRfYnlfbmFtZV9hc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NPUlRfQVNDIiklPjwvbGFiZWw+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImFkdmFuY2Vfc29ydF9ieV9uYW1lX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9OQU1FJT4iIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVEZXNjJT4iPjxsYWJlbCBmb3I9ImFkdmFuY2Vfc29ydF9ieV9uYW1lX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NPUlRfREVTQyIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT1JUX0JZX0RBVEUiKSU+PC90ZD4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iYWR2YW5jZV9zb3J0X2J5X2RhdGVfYXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfREFURSU+IiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5zb3J0QnlEYXRlQXNjJT4iIGNoZWNrZWQ+PGxhYmVsIGZvcj0iYWR2YW5jZV9zb3J0X2J5X2RhdGVfYXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TT1JUX0FTQyIpJT48L2xhYmVsPgotICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJhZHZhbmNlX3NvcnRfYnlfZGF0ZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfREFURSU+IiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5zb3J0QnlEYXRlRGVzYyU+Ij48bGFiZWwgZm9yPSJhZHZhbmNlX3NvcnRfYnlfZGF0ZV9kZXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TT1JUX0RFU0MiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRmb3JtaGVhZGVyLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9maW5kZm9ybWhlYWRlci5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlODJlMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRmb3JtaGVhZGVyLmluYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGl0bGVJbWFnZVBhdGgpKSU+IiBhbHQ9IiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCB3aWR0aD0iKiI+Jm5ic3A7PC90ZD4KLTwlCi0gICBpbnQgY29sc3BhbiA9IDI7Ci0gICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCAmJiBzdWJRdWVyeUtleS5sZW5ndGgoKSA+IDApCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgIGludCB0b29sSWQgPSBmb3JtVG9vbC5nZXRUb29sSWQoKTsKLSAgICAgaW50IHZpZXdJZCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpOwotICAgICBpbnQgY291bnQgPSAxOwotJT4KLSAgICA8dGQgYWxpZ249InJpZ2h0Ij4KLSAgICAgIDxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsIiIsZmFsc2UpKSklPiI+PCU9Y291bnQlPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgICAgU3RyaW5nIGN1cnJlbnRTdWJRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5OwotICAgICBpbnQgc2VwYXJhdG9yUG9zID0gLTE7Ci0gICAgIHdoaWxlICgoc2VwYXJhdG9yUG9zID0gY3VycmVudFN1YlF1ZXJ5S2V5LmluZGV4T2YoJzonKSkgIT0gLTEpCi0gICAgIHsKLSAgICAgICBjb3VudCsrOwotJT4KLSAgICA8dGQgYWxpZ249InJpZ2h0Ij4KLSAgICAgIDxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsY3VycmVudFN1YlF1ZXJ5S2V5LnN1YnN0cmluZygwLHNlcGFyYXRvclBvcyksZmFsc2UpKSklPiI+PCU9Y291bnQlPjwvYT4KLSAgICA8L3RkPiAgICAgIAotPCUgICAKLSAgICAgICBjdXJyZW50U3ViUXVlcnlLZXkgPSBjdXJyZW50U3ViUXVlcnlLZXkuc3Vic3RyaW5nKHNlcGFyYXRvclBvcysxLGN1cnJlbnRTdWJRdWVyeUtleS5sZW5ndGgoKSk7Ci0gICAgIH0KLSAgICAgY29sc3BhbiArPSBjb3VudDsKLSAgIH0KLSU+ICAgIAotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCBjb2xzcGFuPTwlPWNvbHNwYW4lPj4gPGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+IDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYWM0NmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7ICAgCi0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSURFTlRJRklFUlMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRJZGVudGlmaWVyUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPiAgCi0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSURFTlRJRklFUl9UWVBFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX1ZBTFVFIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDU4ZDEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSAoU3RyaW5nW10pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBTdHJpbmdbXSB0aXRsZUtleXMgPSB7b3RoZXJQcm9wZXJ0aWVzWzBdLG90aGVyUHJvcGVydGllc1sxXX07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IG90aGVyUHJvcGVydGllc1syXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgYm9vbGVhbiBpc0ZpbmQgPSB0YWJsZUNvbnRhaW5lcklkLnN0YXJ0c1dpdGgoImZpbmQiKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0aXRsZUtleXNbMF0pJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLTwlCi0gICBTdHJpbmcgdGV4dENvbnRyb2xUaXRsZUtleTsKLSAgIGlmICh0aXRsZUtleXNbMF0uZXF1YWxzKCJGT1JNX0xBQkVMX05BTUVTIikpCi0gICAgIHRleHRDb250cm9sVGl0bGVLZXkgPSAiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSI7Ci0gICBlbHNlCi0gICAgIHRleHRDb250cm9sVGl0bGVLZXkgPSAiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiOwotJT4gICAgICAgCi0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZExhbmd1YWdlSW5wdXRSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0ZXh0Q29udHJvbFRpdGxlS2V5KSklPicpIj4KLSAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+Ci0gICAgICA8L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGl0bGVLZXlzWzFdKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUgCi0gICBpZiAoaXNGaW5kKQotICAgey8vIGNvbmRpdGlvbiB0byB0dXJuIG9mZiB3aGVuIHB1Ymxpc2hpbmcgdG8gY29tZS4KLSU+ICAgICAKLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgfQotJT4gICAgIAotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbG9naW5fYXV0aGVudGljYXRpb25fdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhOGM1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbG9naW5fYXV0aGVudGljYXRpb25fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5BYnN0cmFjdFVERElFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1UcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoKEFic3RyYWN0VURESUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRSZWdpc3RyeUVsZW1lbnQoKTsKLVN0cmluZyB1c2VybmFtZSA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci1TdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLVN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0KLWlmICh1c2VybmFtZSA9PSBudWxsKSB7Ci0JdXNlcm5hbWUgPSAiIjsKLX0KLQotaWYgKHBhc3N3b3JkID09IG51bGwpIHsKLQlwYXNzd29yZCA9ICIiOwotfQotCi1pZiAocHVibGlzaFVSTCA9PSBudWxsKSB7Ci0JcHVibGlzaFVSTCA9ICIiOwotfQotCi0lPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4iIHZhbHVlPSJ0cnVlIi8+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+IiB2YWx1ZT0iUXVlcnkgUmVzdWx0cyIvPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUJT4iIHZhbHVlPSIxMDAiLz4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyU+IiB2YWx1ZT0iMTAiLz4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgIDxsYWJlbD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPiIgdmFsdWU9IjwlPXB1Ymxpc2hVUkwlPiIgY2xhc3M9InRleHRlbnRlciIvPgotICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRVJJRCIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IjwlPXVzZXJuYW1lJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiLz48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+PGxhYmVsPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BBU1NXT1JEIiklPjwvbGFiZWw+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIHZhbHVlID0iPCU9cGFzc3dvcmQlPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+IiBjbGFzcz0idGV4dGVudGVyIi8+PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL25hbWVzX2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZWU2OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL25hbWVzX2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iZmluZF9xdWFsaWZpZXJfZXhhY3RfbmFtZV9tYXRjaCIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuZXhhY3ROYW1lTWF0Y2glPiI+PGxhYmVsIGZvcj0iZmluZF9xdWFsaWZpZXJfZXhhY3RfbmFtZV9tYXRjaCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRVhBQ1RfTkFNRV9NQVRDSCIpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJmaW5kX3F1YWxpZmllcl9jYXNlX3NlbnNpdGl2ZV9tYXRjaCIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuY2FzZVNlbnNpdGl2ZU1hdGNoJT4iPjxsYWJlbCBmb3I9ImZpbmRfcXVhbGlmaWVyX2Nhc2Vfc2Vuc2l0aXZlX21hdGNoIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQVNFX1NFTlNJVElWRV9NQVRDSCIpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjMxODU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBzcGVjaWZpY0luZm8gPSAoU3RyaW5nW10pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBTdHJpbmcgdGl0bGUgPSBzcGVjaWZpY0luZm9bMF07Ci0gICBTdHJpbmcgcGFyZW50Q29udGFpbmVySWQgPSBzcGVjaWZpY0luZm9bMV07Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dGl0bGUlPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzYzI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLTwlCi0gICBpbnQgY29sc3BhbiA9IDE7Ci0gICBpZiAoaGFzVGFyZ2V0KQotICAgewotICAgICBTdHJpbmcgcmV0dXJuTGluayA9IFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JSZXR1cm4oKTsKLSU+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iKiI+Jm5ic3A7PC90ZD4KLSAgICA8dGQgYWxpZ249InJpZ2h0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocmV0dXJuTGluaykpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1RBUkdFVCIpJT48L2E+Ci0gICAgPC90ZD4KLTwlCi0gICAgIGNvbHNwYW4gKz0gMjsKLSAgIH0KLSU+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIGNvbHNwYW49PCU9Y29sc3BhbiU+PiA8aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIj4gPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjb2xzcGFuPTwlPWNvbHNwYW4lPj4KLTwlCi0gICBpZiAoaGFzVGFyZ2V0KQotICAgewotJT4KLTwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NVQlFVRVJZIiklPgotPCUKLSAgIH0KLSU+Ci08JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9RVUVSWSIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZF9jYXRlZ29yaWVzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZF9jYXRlZ29yaWVzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IxZmYwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRfY2F0ZWdvcmllc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4gCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8IS0tCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdFNlbGVjdGVkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNhbmNlbFNlbGVjdGVkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgLS0+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5OicnOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8IS0tCi0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIC0tPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjE1JSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPCEtLQotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwJSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hFQ0tFRCIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjcwJSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklMRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IioiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgICAtLT4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c1B1Ymxpc2hlckFzc2VydGlvbnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzUHVibGlzaGVyQXNzZXJ0aW9uc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjgyMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzUHVibGlzaGVyQXNzZXJ0aW9uc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gc3BlY2lmaWNJbmZvID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nIHRhYmxlVGl0bGVLZXkgPSBzcGVjaWZpY0luZm9bMF07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IHNwZWNpZmljSW5mb1sxXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgU3RyaW5nIHF1ZXJ5SXRlbVN0cmluZyA9IHNwZWNpZmljSW5mb1syXTsKLSAgIFN0cmluZyBwYXJlbnRDb250YWluZXJJZCA9IHNwZWNpZmljSW5mb1szXTsKLSAgIFN0cmluZyB0cmFuc2ZlclRhcmdldEtleSA9IHNwZWNpZmljSW5mb1s0XTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0YWJsZVRpdGxlS2V5KSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAgICAKLSAgICA8L3RkPgotPCUKLSAgIGlmIChzZWN0aW9uSGVhZGVySW5mby5pc0R5bmFtaWMoKSkKLSAgIHsKLSU+ICAgICAgIAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmluaXRpYXRlU3ViUXVlcnkoJzwlPXBhcmVudENvbnRhaW5lcklkJT4nLCc8JT10cmFuc2ZlclRhcmdldEtleSU+Jyw8JT1xdWVyeUl0ZW1TdHJpbmclPix0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19HRVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6aW5pdGlhdGVTdWJRdWVyeSgnPCU9cGFyZW50Q29udGFpbmVySWQlPicsJzwlPXRyYW5zZmVyVGFyZ2V0S2V5JT4nLDwlPXF1ZXJ5SXRlbVN0cmluZyU+LGZhbHNlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GSU5EIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgIH0KLSU+ICAgICAgIAotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPSgoQnVzaW5lc3NFbGVtZW50KXVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXREZWZhdWx0TmFtZVN0cmluZygpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElSRUNUSU9OIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQVNTRVJUSU9OX1RZUEUiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjViM2RhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIHNwZWNpZmljSW5mbyA9IChTdHJpbmdbXSlzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZyB0YWJsZVRpdGxlS2V5ID0gc3BlY2lmaWNJbmZvWzBdOwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSBzcGVjaWZpY0luZm9bMV0uZXF1YWxzKEJvb2xlYW4uVFJVRS50b1N0cmluZygpKTsKLSAgIFN0cmluZyBxdWVyeUl0ZW1TdHJpbmcgPSBzcGVjaWZpY0luZm9bMl07Ci0gICBTdHJpbmcgcGFyZW50Q29udGFpbmVySWQgPSBzcGVjaWZpY0luZm9bM107Ci0gICBTdHJpbmcgdHJhbnNmZXJUYXJnZXRLZXkgPSBzcGVjaWZpY0luZm9bNF07Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGFibGVUaXRsZUtleSklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgICAgCi0gICAgPC90ZD4KLTwlCi0gICBpZiAoc2VjdGlvbkhlYWRlckluZm8uaXNEeW5hbWljKCkpCi0gICB7Ci0lPiAgICAgICAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDppbml0aWF0ZVN1YlF1ZXJ5KCc8JT1wYXJlbnRDb250YWluZXJJZCU+JywnPCU9dHJhbnNmZXJUYXJnZXRLZXklPicsPCU9cXVlcnlJdGVtU3RyaW5nJT4sdHJ1ZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfR0VUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmluaXRpYXRlU3ViUXVlcnkoJzwlPXBhcmVudENvbnRhaW5lcklkJT4nLCc8JT10cmFuc2ZlclRhcmdldEtleSU+Jyw8JT1xdWVyeUl0ZW1TdHJpbmclPixmYWxzZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRklORCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLTwlCi0gICB9Ci0lPiAgICAgICAKLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDZhNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDZhNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzMDQzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzMDQzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkN2NlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvY2F0ZWdvcnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTE0ZDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvY2F0ZWdvcnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTQwYTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTQwYTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTY5OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTY5OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjZWYxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjZWYxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1ZWE1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1ZWE1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRlOTkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRlOTkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDU1MDBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDU1MDBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmNhMTU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcnkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MDc2NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTUwNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTUwNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdpc3RyeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDNjYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdpc3RyeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnc3RyeWNhdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzdkNTllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnc3RyeWNhdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNjcxNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzI1Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZDk4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZDk4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmNjMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTY1NDRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTY1NDRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4NjA1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5fZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4NjA1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2guZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2guZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjkyMmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczMGIwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczMGIwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YmQ4M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YmQ4M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTcxM2UyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTcxM2UyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkYzlhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9UT09MQkFSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYzljYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08JQotICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBpbnQgZm9jdXNlZE5vZGVJZCA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICB7Ci0gICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICBmb2N1c2VkQW5jaG9yTmFtZSA9IHNlbGVjdGVkQW5jaG9yTmFtZTsKLSAgIH0KLSU+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uTG9hZD0ic2VsZi5sb2NhdGlvbi5oYXNoPScjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPic7c2V0U2VsZWN0ZWRBbmNob3JOYW1lKCc8JT1zZWxlY3RlZEFuY2hvck5hbWUlPicpIiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotPCU9bmF2aWdhdG9yTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UyNjRlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ1ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoVURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL25hdmlnYXRvci5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh1ZGRpUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIGVsc2UKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05BVklHQVRPUiIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRSZWZyZXNoID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUkVGUkVTSCIpOwotICAgU3RyaW5nIGFsdENsZWFyID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0xFQVIiKTsKLSU+ICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdFJlZnJlc2glPiIgdGl0bGU9IjwlPWFsdFJlZnJlc2glPiI+PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MWQxYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ5MTA1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROYXZpZ2F0b3JOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MjkyYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ1ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoVURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9hY3Rpb25zLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OUyIpJT48L3RkPgotPCUKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5hdmlnYXRvck5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgaWYgKHNlbGVjdGVkTmF2aWdhdG9yTm9kZSAhPSBudWxsKQotICAgewotICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgaWYgKHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgZWxzZQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICBmb3IgKGludCBpPTA7aTx0b29sTWFuYWdlci5nZXROdW1iZXJPZlRvb2xzKCk7aSsrKQotICAgICB7Ci0gICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbE1hbmFnZXIuZ2V0VG9vbChpKTsKLSU+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjwlPXRvb2wucmVuZGVyVG9vbChyZXNwb25zZSxjb250cm9sbGVyKSU+PC90ZD4KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjcxOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgY2F0ZWdvcnlCcm93c2VyV2luZG93ID0gdG9wOwotICB2YXIgY2F0ZWdvcnlCcm93c2VyV2luZG93V29ya0FyZWEgPSB0b3AuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1dPUktBUkVBJT4iXTsKLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvd1Rvb2xiYXIgPSBjYXRlZ29yeUJyb3dzZXJXaW5kb3cuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgY2F0ZWdvcnlCcm93c2VyV2luZG93Q29udGVudCA9IGNhdGVnb3J5QnJvd3NlcldpbmRvdy5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZGUzNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLHRleHRDb250cm9sVGl0bGUsaGFzRXJyb3IpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI3MCUiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBsYW5ndWFnZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwgdGV4dCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLHRleHRDb250cm9sVGl0bGUpKTsgPCUvLyBjb250cm9sIHRpdGxlJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsaGFzRXJyb3IpKTsgPCUvLyBtb2RlJT4KLSAgICBpZiAoaGFzRXJyb3IpCi0gICAgewotICAgICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgICBsYW5ndWFnZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgICBwb3B1bGF0ZUxhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0KTsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQobGFuZ3VhZ2VTZWxlY3QpOwotICAgICAgCi0gICAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgdGV4dElucHV0LnRpdGxlID0gdGV4dENvbnRyb2xUaXRsZTsKLSAgICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKLSAgICAgIAotICAgICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICAKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbikKLSAgewotICAgIGZvciAodmFyIGk9MDtpPGNvbHVtbi5jaGlsZE5vZGVzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgY29sdW1uLnJlbW92ZUNoaWxkKGNvbHVtbi5jaGlsZE5vZGVzW2ldKTsKLSAgICAgIGktLTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciByZW1vdmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChyZW1vdmVMaW5rLCJyZW1vdmVEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgcmVtb3ZlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKHJlbW92ZUxpbmspOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoZWRpdExpbmssImVkaXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOyAgCi0gIH0gIAotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGNhbmNlbExpbmssImNhbmNlbERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdCIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAKLSAgICB2YXIgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBpbnB1dFZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciB0ZXh0Q29udHJvbFRpdGxlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSB0cnVlOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICAKLSAgICB2YXIgbGFuZ3VhZ2VTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBwb3B1bGF0ZUxhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0KTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChsYW5ndWFnZVNlbGVjdCxjb2x1bW4xQ29udHJvbCk7Ci0gICAgbGFuZ3VhZ2VTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIHNldExhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0LGxhbmdJZCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIHZhciB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKHRleHRJbnB1dCxjb2x1bW4yQ29udHJvbCk7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gdGV4dENvbnRyb2xUaXRsZTsKLSAgICB0ZXh0SW5wdXQudmFsdWUgPSBpbnB1dFZhbHVlOwotCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMyk7Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQsaW5kZXgsdmlld0lkLGxhbmdJZCxpbnB1dFZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK2luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWUgPSB2aWV3SWQ7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gbGFuZ0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGlucHV0VmFsdWU7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBzZXRMYW5ndWFnZVNlbGVjdChjb2x1bW4xQ29udHJvbCxsYW5nSWQpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICAgIHZhciBsYW5ndWFnZSA9IHNldExhbmd1YWdlU2VsZWN0KHRlbXBTZWxlY3QsbGFuZ0lkKTsKLSAgICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGxhbmd1YWdlKSksY29sdW1uMUNvbnRyb2wpOwotICAgIH0KLSAgICAKLSAgICB2YXIgY29sdW1uMkNvbnRyb2wgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uMkNvbnRyb2wudmFsdWUgPSBpbnB1dFZhbHVlOwotICAgIGVsc2UKLSAgICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGlucHV0VmFsdWUpKSxjb2x1bW4yQ29udHJvbCkKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAgIAotICBmdW5jdGlvbiBjYW5jZWxEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXQodGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAKLSAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgIHZhciBsYW5nSWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgdmFyIGlucHV0VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIHJvd0FjdGlvbkxpbmtIcmVmID0gY29sdW1uMy5jaGlsZE5vZGVzW2NvbHVtbjMuY2hpbGROb2Rlcy5sZW5ndGgtMV0uaHJlZjsKLSAgICBpZiAocm93QWN0aW9uTGlua0hyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSAhPSAwKQotICAgICAgcmV0dXJuOwotICAgICAgCi0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIHZhciB0ZW1wU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICB2YXIgbGFuZ3VhZ2UgPSBzZXRMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0LGxhbmdJZCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcobGFuZ3VhZ2UpKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGlucHV0VmFsdWUpKSxjb2x1bW4yQ29udHJvbCk7Ci0KLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4zKTsKLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZpeERldGFpbHNMYW5ndWFnZUlucHV0Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNMYW5ndWFnZUlucHV0Um93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIDwlLy8gRml4IHRoZSBsaW5rcyU+Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IGNvbHVtbnMuaXRlbSgwKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgCi0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAgIHZhciBsaW5rID0gY29sdW1uMy5jaGlsZE5vZGVzW2NvbHVtbjMuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgICB2YXIgcmVtb3ZlTGluazsKLSAgICAgIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICByZW1vdmVMaW5rID0gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVtb3ZlTGluayA9IGZhbHNlOwotICAgICAgICAKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOyAgICAgICAgICAgIAotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4zLGkpOwotICAgICAgZWxzZSBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6ZWRpdCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4zLGkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdFNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgZWRpdERldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0gICAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2FuY2VsRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkLGhhc0Vycm9yKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLSAgICAKLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4xLndpZHRoID0gIjEwJSI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI0MCUiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiNDAlIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdHlwZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IG5hbWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSB2YWx1ZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgCi0gICAgdmFyIGlkZW50aWZpZXJUeXBlU2VsZWN0OwotICAgIHZhciBrZXlOYW1lVGV4dElucHV0OwotICAgIGlmIChoYXNFcnJvcikKLSAgICB7Ci0gICAgICBpZGVudGlmaWVyVHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub25jaGFuZ2UgPSBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlOwotICAgICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCk7Ci0gICAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGlkZW50aWZpZXJUeXBlU2VsZWN0KTsgICAgCi0gICAgCi0gICAgICBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIGtleU5hbWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FIiklPiI7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGtleU5hbWVUZXh0SW5wdXQpOwotCi0gICAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfVkFMVUUiKSU+IjsKLSAgICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOyAgICAgIAotICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gICAgaWYgKGhhc0Vycm9yKQotICAgICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGlkZW50aWZpZXJUeXBlU2VsZWN0Lm9wdGlvbnNbMF0udGV4dDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNJZGVudGlmaWVyUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciByZW1vdmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChyZW1vdmVMaW5rLCJyZW1vdmVEZXRhaWxzSWRlbnRpZmllclJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgcmVtb3ZlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKHJlbW92ZUxpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNJZGVudGlmaWVyUm93Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBlZGl0TGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChlZGl0TGluayk7Ci0gIH0gIAotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNJZGVudGlmaWVyUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzSWRlbnRpZmllclJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsgIAotICB9Ci0KLSAgZnVuY3Rpb24gZWRpdERldGFpbHNJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSAgICAgCi0gICAgdmFyIGtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIGtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgaWRlbnRpZmllclR5cGVTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5vbmNoYW5nZSA9IGhhbmRsZUlkZW50aWZpZXJDaGFuZ2U7Ci0gICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoaWRlbnRpZmllclR5cGVTZWxlY3QsY29sdW1uMUNvbnRyb2wpOwotICAgIGlkZW50aWZpZXJUeXBlU2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICBzZXRUTW9kZWxLZXlTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QsdE1vZGVsS2V5KTsgICAgCi0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChrZXlOYW1lVGV4dElucHV0LGNvbHVtbjJDb250cm9sKTsKLSAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX05BTUUiKSU+IjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnZhbHVlID0ga2V5TmFtZTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChrZXlWYWx1ZVRleHRJbnB1dCxjb2x1bW4zQ29udHJvbCk7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFIiklPiI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudmFsdWUgPSBrZXlWYWx1ZTsKLSAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIAotICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxpbmRleCx2aWV3SWQsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0TW9kZWxLZXk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlID0ga2V5TmFtZTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWUgPSBrZXlWYWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHNldFRNb2RlbEtleVNlbGVjdChjb2x1bW4xQ29udHJvbCx0TW9kZWxLZXkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICAgIHZhciB0TW9kZWxLZXlWYWx1ZSA9IHNldFRNb2RlbEtleVNlbGVjdCh0ZW1wU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0TW9kZWxLZXlWYWx1ZSksY29sdW1uMUNvbnRyb2wpOwotICAgIH0KLSAgICAgICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjJDb250cm9sLnZhbHVlID0ga2V5TmFtZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlOYW1lKSxjb2x1bW4yQ29udHJvbCk7Ci0gICAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uM0NvbnRyb2wudmFsdWUgPSBrZXlWYWx1ZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlWYWx1ZSksY29sdW1uM0NvbnRyb2wpOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlRGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0lkZW50aWZpZXJSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICB2YXIgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBrZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciBrZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgcm93QWN0aW9uTGlua0hyZWYgPSBjb2x1bW40LmNoaWxkTm9kZXNbY29sdW1uNC5jaGlsZE5vZGVzLmxlbmd0aC0xXS5ocmVmOwotICAgIGlmIChyb3dBY3Rpb25MaW5rSHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpICE9IDApCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIHZhciB0ZW1wU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRNb2RlbEtleVZhbHVlKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleU5hbWUpLGNvbHVtbjJDb250cm9sKTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHJvd0luZGV4KTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICA8JS8vIEZpeCB0aGUgbGlua3MlPgotICAgIGZpeERldGFpbHNJZGVudGlmaWVyUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNJZGVudGlmaWVyUm93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGZvciAodmFyIGo9MTtqPGNvbHVtbnMubGVuZ3RoO2orKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJyb3djb2xvciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgICAgfQotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgICB2YXIgbGluayA9IGNvbHVtbjQuY2hpbGROb2Rlc1tjb2x1bW40LmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgICAgdmFyIHJlbW92ZUxpbms7Ci0gICAgICBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgcmVtb3ZlTGluayA9IHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlbW92ZUxpbmsgPSBmYWxzZTsgICAgICAKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgICAgCi0gICAgICBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNhbmNlbERldGFpbHNJZGVudGlmaWVyUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxoYXNFcnJvcikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIAotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI1JSI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI1NSUiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiMjUlIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdHlwZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IG5hbWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSB2YWx1ZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgCi0gICAgaWYgKGhhc0Vycm9yKQotICAgIHsKLSAgICAgIHZhciBjYXRlZ29yeVR5cGVTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgICBjYXRlZ29yeVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChjYXRlZ29yeVR5cGVTZWxlY3QpOwotICAgICAgCi0gICAgICB2YXIga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUUiKSU+IjsKLSAgICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCk7Ci0gICAgICAKLSAgICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBrZXlWYWx1ZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfVkFMVUUiKSU+IjsKLSAgICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOwotICAgICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7ICAgICAgCi0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGNhbmNlbExpbmssImNhbmNlbERldGFpbHNDYXRlZ29yeVJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsgIAotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNDYXRlZ29yeVJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciByZW1vdmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChyZW1vdmVMaW5rLCJyZW1vdmVEZXRhaWxzQ2F0ZWdvcnlSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsgIAotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlUmVtb3ZlQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVkaXREZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICB2YXIgY29sdW1uNCA9IGNvbHVtbnMuaXRlbSg0KTsKLSAgICAKLSAgICB2YXIgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlCi0gICAgdmFyIGtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIGtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0KTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChjYXRlZ29yeVR5cGVTZWxlY3QsY29sdW1uMUNvbnRyb2wpOwotICAgIGNhdGVnb3J5VHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgc2V0VE1vZGVsS2V5U2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCx0TW9kZWxLZXkpOyAgICAKLSAgICAKLSAgICB2YXIgY29sdW1uMkNvbnRyb2wgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGtleU5hbWVUZXh0SW5wdXQsY29sdW1uMkNvbnRyb2wpOwotICAgIGtleU5hbWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUUiKSU+IjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnZhbHVlID0ga2V5TmFtZTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChrZXlWYWx1ZVRleHRJbnB1dCxjb2x1bW4zQ29udHJvbCk7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9WQUxVRSIpJT4iOwotICAgIGtleVZhbHVlVGV4dElucHV0LnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW40LHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERldGFpbHNDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLGluZGV4LHZpZXdJZCx0TW9kZWxLZXksa2V5TmFtZSxrZXlWYWx1ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytpbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IHRNb2RlbEtleTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBrZXlOYW1lOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZSA9IGtleVZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgc2V0VE1vZGVsS2V5U2VsZWN0KGNvbHVtbjFDb250cm9sLHRNb2RlbEtleSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhciB0ZW1wU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgICBwb3B1bGF0ZUNhdGVnb3J5VHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICAgIHZhciB0TW9kZWxLZXlWYWx1ZSA9IHNldFRNb2RlbEtleVNlbGVjdCh0ZW1wU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0TW9kZWxLZXlWYWx1ZSksY29sdW1uMUNvbnRyb2wpOwotICAgIH0KLSAgICAgICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjJDb250cm9sLnZhbHVlID0ga2V5TmFtZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlOYW1lKSxjb2x1bW4yQ29udHJvbCk7Ci0gICAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uM0NvbnRyb2wudmFsdWUgPSBrZXlWYWx1ZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlWYWx1ZSksY29sdW1uM0NvbnRyb2wpOyAKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTsKLSAgICBmaXhEZXRhaWxzQ2F0ZWdvcnlSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc0NhdGVnb3J5Um93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIga2V5TmFtZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICB2YXIga2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgdmFyIHJvd0FjdGlvbkxpbmtIcmVmID0gY29sdW1uNC5jaGlsZE5vZGVzW2NvbHVtbjQuY2hpbGROb2Rlcy5sZW5ndGgtMV0uaHJlZjsKLSAgICBpZiAocm93QWN0aW9uTGlua0hyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSAhPSAwKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KHRlbXBTZWxlY3QpOwotICAgIHZhciB0TW9kZWxLZXlWYWx1ZSA9IHNldFRNb2RlbEtleVNlbGVjdCh0ZW1wU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodE1vZGVsS2V5VmFsdWUpLGNvbHVtbjFDb250cm9sKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMkNvbnRyb2wgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF07Ci0gICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5TmFtZSksY29sdW1uMkNvbnRyb2wpOwotICAgIAotICAgIHZhciBjb2x1bW4zQ29udHJvbCA9IGNvbHVtbjMuY2hpbGROb2Rlc1swXTsKLSAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlWYWx1ZSksY29sdW1uM0NvbnRyb2wpOwotCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7ICAgIAotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gICAgaWYgKHJvd0luZGV4ID09IHRhcmdldENhdGVnb3J5Um93KQotICAgICAgY2xvc2VDYXRlZ29yeUJyb3dzZXIoKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgPCUvLyBGaXggdGhlIGxpbmtzJT4KLSAgICBmaXhEZXRhaWxzQ2F0ZWdvcnlSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZml4RGV0YWlsc0NhdGVnb3J5Um93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGZvciAodmFyIGo9MTtqPGNvbHVtbnMubGVuZ3RoO2orKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJyb3djb2xvciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgICAgfQotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci08JSAgICAgIAotICAgICAgLy8gQnJvd3NlLCBSZW1vdmUKLSAgICAgIC8vIEJyb3dzZSwgQ2FuY2VsCi0gICAgICAvLyBFZGl0Ci0gICAgICAvLyBCcm93c2UKLSU+ICAgICAgCi0gICAgICB2YXIgbGFzdExpbmsgPSBjb2x1bW40LmNoaWxkTm9kZXNbY29sdW1uNC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgICAgaWYgKGxhc3RMaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dCcm93c2VSZW1vdmVBY3Rpb25MaW5rcyh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsYXN0TGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgICAgZWxzZSBpZiAobGFzdExpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsYXN0TGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6b3BlbiIpID09IDApCi0gICAgICAgIGFkZENhdGVnb3J5Um93QnJvd3NlTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBlZGl0RGV0YWlsc0NhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNhbmNlbERldGFpbHNDYXRlZ29yeVJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCx0TW9kZWxLZXksY2F0ZWdvcnlOYW1lLGlzQ2hlY2tlZCxmaWxlTmFtZSxoYXNFcnJvcikKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIC8vdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAvL3ZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAvL3ZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAvL3ZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAKLSAgICAvL2NvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiMTUlIjsKLSAgICAvL2NvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIC8vY29sdW1uMi53aWR0aCA9ICIxMCUiOwotICAgIC8vY29sdW1uMy5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgLy9jb2x1bW4zLndpZHRoID0gIjcwJSI7Ci0gICAgLy9jb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAKLSAgICAvL3ZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgLy9jb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLSAgICAKLSAgICAvL2NvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixmaWxlTmFtZSkpOyAgPCUvLyBvcmlnaW5hbCBmaWxlIG5hbWUlPgotICAgIC8vY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7ICA8JS8vIG1vZGUlPgotICAgIC8vY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLHRNb2RlbEtleSkpOyA8JS8vIHRNb2RlbEtleSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjYXRlZ29yeU5hbWUpKTsKLSAgICAKLSAgICAvL2NvbHVtbjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaXNDaGVja2VkKSk7Ci0gICAgCi0gICAgLy9pZiAoaGFzRXJyb3IpCi0gICAgLy97Ci0gICAgLy8gIGNvbHVtbjMuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZJT4iLHRNb2RlbEtleSkpOwotICAgIC8vICB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAvLyAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfRklMRU5BTUUlPiIpOwotICAgIC8vICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiZmlsZSIpOwotICAgIC8vICBmaWxlSW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfRklMRSIpKSU+IjsKLSAgICAvLyAgZmlsZUlucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZWZpbGVicm93c2UiOwotICAgIC8vICBjb2x1bW4zLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7Ci0gICAgLy8gIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Q2FuY2VsTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIC8vfQotICAgIC8vZWxzZQotICAgIC8vewotICAgIC8vICBjb2x1bW4zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZpbGVOYW1lKSk7Ci0gICAgLy8gIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93RWRpdExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICAvL30KLSAgICAKLSAgICAvL25ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgCi0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93RWRpdExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGVkaXRMaW5rLCJlZGl0RGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7ICAgIAotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPT0gInRydWUiKTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZJT4iLHRNb2RlbEtleSkpOwotICAgIHZhciBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX0ZJTEVOQU1FJT4iKTsKLSAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiZmlsZSIpOwotICAgIGZpbGVJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9GSUxFIikpJT4iOwotICAgIGZpbGVJbnB1dC5jbGFzc05hbWUgPSAidGFibGVmaWxlYnJvd3NlIjsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dDYW5jZWxMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Q2FuY2VsTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIGlmICghZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMyk7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWUpKTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAKLSAgICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXRMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsU2VsZWN0ZWREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0gIAotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLGhhc0Vycm9yKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI4NSUiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIAotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCI8JT1BY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQlPiIpKTsgPCUvLyB2aWV3SWQlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIERpc2NvdmVyeSBVUkwlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyA8JS8vIG1vZGUlPgotICAgIGlmIChoYXNFcnJvcikKLSAgICB7Ci0gICAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgdGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfRElTQ09WRVJZX1VSTCIpJT4iOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOwotICAgICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKTsKLSAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICAKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgcmVtb3ZlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKHJlbW92ZUxpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGVkaXRMaW5rLCJlZGl0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdCIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIAotICAgIHZhciBkaXNjb3ZlcnlVUkwgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpCi0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IHRydWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdOwotICAgIHZhciB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKHRleHRJbnB1dCxjb2x1bW4xQ29udHJvbCk7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfRElTQ09WRVJZX1VSTCIpJT4iOwotICAgIHRleHRJbnB1dC52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4yKTsKLSAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzRGlzY292ZXJ5VVJMUm93KHRhYmxlQ29udGFpbmVySWQsaW5kZXgsdmlld0lkLGRpc2NvdmVyeVVSTCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytpbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjFDb250cm9sLnZhbHVlID0gZGlzY292ZXJ5VVJMOwotICAgIGVsc2UKLSAgICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGRpc2NvdmVyeVVSTCkpLGNvbHVtbjFDb250cm9sKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTsKLSAgICBmaXhEZXRhaWxzRGlzY292ZXJ5VVJMUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNEaXNjb3ZlcnlVUkxSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgCi0gICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICB2YXIgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciByb3dBY3Rpb25MaW5rSHJlZiA9IGNvbHVtbjIuY2hpbGROb2Rlc1tjb2x1bW4yLmNoaWxkTm9kZXMubGVuZ3RoLTFdLmhyZWY7Ci0gICAgaWYgKHJvd0FjdGlvbkxpbmtIcmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgIT0gMCkKLSAgICAgIHJldHVybjsKLSAgICAgIAotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkaXNjb3ZlcnlVUkwpKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMik7Ci0gICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmaXhEZXRhaWxzRGlzY292ZXJ5VVJMUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNEaXNjb3ZlcnlVUkxSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgPCUvLyBGaXggdGhlIGxpbmtzJT4KLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICAKLSAgICAgIGZvciAodmFyIGo9MTtqPGNvbHVtbnMubGVuZ3RoO2orKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJyb3djb2xvciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgICAgfQotICAgICAgCi0gICAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgICAgdmFyIGxpbmsgPSBjb2x1bW4yLmNoaWxkTm9kZXNbY29sdW1uMi5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjIpOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLGkpOyAKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgZWRpdERldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQsaGFzRXJyb3IpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIAotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjAud2lkdGggPSAiOTAlIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBpdGVtIHZhbHVlJT4KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsaGFzRXJyb3IpKTsgPCUvLyBtb2RlJT4KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4pCi0gIHsKLSAgICB2YXIgYnJvd3NlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBicm93c2VMaW5rLmhyZWYgPSAiamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ2NvbnRlbnRib3JkZXInLCIrd3NkbFR5cGUrIikiOwotICAgIGJyb3dzZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoYnJvd3NlTGluayk7ICAgIAotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VDYW5jZWxBY3Rpb25MaW5rcyh0YWJsZUNvbnRhaW5lcklkLHdzZGxUeXBlLGNvbHVtbikKLSAgewotICAgIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4pOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBjYW5jZWxMaW5rLmhyZWYgPSAiamF2YXNjcmlwdDpjYW5jZWxEZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0KCciK3RhYmxlQ29udGFpbmVySWQrIicpIjsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uKQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIGVkaXRMaW5rLmhyZWYgPSAiamF2YXNjcmlwdDplZGl0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KCciK3RhYmxlQ29udGFpbmVySWQrIicpIjsKLSAgICBlZGl0TGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChlZGl0TGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0VkaXQodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIAotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldFdTRExVUkxEaXNwbGF5KGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZSkpLGNvbHVtbjBDb250cm9sKTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4xKTsKLSAgICAKLSAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IGNvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAKLSAgICB2YXIgd3NkbFR5cGUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzJdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICB2YXIgd3NkbFVSTEVkaXRDb250cm9sID0gY3JlYXRlV1NETFVSTEVkaXRDb250cm9sKCk7Ci0gICAgY29sdW1uMC5yZXBsYWNlQ2hpbGQod3NkbFVSTEVkaXRDb250cm9sLGNvbHVtbjBDb250cm9sKTsKLSAgICB3c2RsVVJMRWRpdENvbnRyb2wuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICB3c2RsVVJMRWRpdENvbnRyb2wudmFsdWUgPSBnZXRXU0RMVVJMRGlzcGxheShjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUpOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjEpOwotICAgIAotICAgIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsY29sdW1uMSk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNyZWF0ZVdTRExVUkxFZGl0Q29udHJvbCgpCi0gIHsKLSAgICB2YXIgY29udHJvbDsKLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiPGlucHV0IG5hbWU9JzwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+Jz4iKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgibmFtZSIsIjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+Iik7Ci0gICAgfQotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBmdW5jdGlvbiBnZXRXU0RMVVJMRGlzcGxheSh3c2RsVVJMKQotICB7Ci0gICAgaWYgKHdzZGxVUkwubGVuZ3RoIDwgMSkKLSAgICAgIHdzZGxVUkxEaXNwbGF5ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0RMX1VSTF9JU19VTlJFQUNIQUJMRSIpKSU+IjsKLSAgICBlbHNlCi0gICAgICB3c2RsVVJMRGlzcGxheSA9IHdzZGxVUkw7Ci0gICAgcmV0dXJuIHdzZGxVUkxEaXNwbGF5OwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3codGFibGVDb250YWluZXJJZCx3c2RsVHlwZSx3c2RsVVJMKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0KLSAgICBjb2x1bW4wLmluc2VydEJlZm9yZShjcmVhdGVIaWRkZW5FbGVtZW50KCIiLHdzZGxUeXBlKSxjb2x1bW4wLmNoaWxkTm9kZXNbMV0pOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4wLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKTsKLSAgICB2YXIgd3NkbFVSTERpc3BsYXkgPSBnZXRXU0RMVVJMRGlzcGxheSh3c2RsVVJMKTsKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUgPSB3c2RsVVJMOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbDsgICAgCi0gICAgaWYgKGVkaXRhYmxlKQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sID0gY3JlYXRlV1NETFVSTEVkaXRDb250cm9sKCk7Ci0gICAgICBjb2x1bW4wQ29udHJvbC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93QnJvd3NlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLHdzZGxUeXBlLGNvbHVtbjEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3c2RsVVJMRGlzcGxheSk7Ci0gICAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICAgIH0KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNvbHVtbjBDb250cm9sKTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4wQ29udHJvbC52YWx1ZSA9IHdzZGxVUkxEaXNwbGF5OwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uKQotICB7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgY2FuY2VsTGluay5ocmVmID0gImphdmFzY3JpcHQ6Y2FuY2VsRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdCgnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4pICAKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBlZGl0TGluay5ocmVmID0gImphdmFzY3JpcHQ6ZWRpdERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdygnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc05hbWVTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IGNvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgIHZhciB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKHRleHRJbnB1dCxjb2x1bW4wQ29udHJvbCk7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSU5QVVRfVEVYVF9WQUxVRSIpJT4iOwotICAgIHRleHRJbnB1dC52YWx1ZSA9IGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjEpOwotICAgIAotICAgIGFkZERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzFdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjBDb250cm9sID0gY29sdW1uMC5jaGlsZE5vZGVzW2NvbHVtbjAuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgY29sdW1uMC5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlKSxjb2x1bW4wQ29udHJvbCk7Ci0gICAgCi0gICAgZm9yICh2YXIgaT0wO2k8Y29sdW1uMS5jaGlsZE5vZGVzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgY29sdW1uMS5yZW1vdmVDaGlsZChjb2x1bW4xLmNoaWxkTm9kZXNbaV0pOwotICAgICAgaS0tOwotICAgIH0KLSAgICBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3codGFibGVDb250YWluZXJJZCxuYW1lKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjAuY2hpbGROb2Rlc1sxXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZSA9IG5hbWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjBDb250cm9sOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICB7Ci0gICAgICBjb2x1bW4wQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBjb2x1bW4wQ29udHJvbC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgY29sdW1uMENvbnRyb2wudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JTlBVVF9URVhUX1ZBTFVFIiklPiI7Ci0gICAgICBjb2x1bW4wQ29udHJvbC52YWx1ZSA9IG5hbWU7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TX05PTkUiKSU+IikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKTsKLSAgICAgIGFkZERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMSk7Ci0gICAgfQotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQoY29sdW1uMENvbnRyb2wpOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTFRhYmxlKHRhYmxlQ29udGFpbmVySWQsbW9kaWZpZWROYW1lLHZpZXdJZE5hbWUsZGlzY292ZXJ5VVJMTmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIGRpc2NvdmVyeVVSTDsKLSAgICAgIGlmIChlZGl0YWJsZSkKLSAgICAgICAgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgICAgZWxzZQotICAgICAgICBkaXNjb3ZlcnlVUkwgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQodmlld0lkTmFtZSx2aWV3SWQpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChkaXNjb3ZlcnlVUkxOYW1lLGRpc2NvdmVyeVVSTCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KG1vZGlmaWVkTmFtZSxlZGl0YWJsZSkpOyAgICAgICAgCi0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLG1vZGlmaWVkTmFtZSx2aWV3SWROYW1lLGxhbmdJZE5hbWUsaW5wdXROYW1lLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgICB2YXIgbGFuZ0lkLGlucHV0VGV4dDsKLSAgICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHsKLSAgICAgICAgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAgICAgaW5wdXRUZXh0ID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBsYW5nSWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgICAgIGlucHV0VGV4dCA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCh2aWV3SWROYW1lLHZpZXdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGxhbmdJZE5hbWUsbGFuZ0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0VGV4dCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KG1vZGlmaWVkTmFtZSxlZGl0YWJsZSkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0RldGFpbHNJZGVudGlmaWVyVGFibGUodGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIHRNb2RlbEtleSxpZEtleU5hbWUsaWRLZXlWYWx1ZTsKLSAgICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHsKLSAgICAgICAgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAgICAgaWRLZXlOYW1lID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAgICAgaWRLZXlWYWx1ZSA9IGNvbHVtbjMuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgICBpZEtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgICAgIGlkS2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgICB9Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9WSUVXSUQlPiIsdmlld0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFJT4iLHRNb2RlbEtleSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUlPiIsaWRLZXlOYW1lKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUlPiIsaWRLZXlWYWx1ZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfTU9ESUZJRUQlPiIsZWRpdGFibGUpKTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NEZXRhaWxzQ2F0ZWdvcnlUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgICB2YXIgdE1vZGVsS2V5LGNhdEtleU5hbWUsY2F0S2V5VmFsdWU7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgICAgIGNhdEtleU5hbWUgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgICAgICBjYXRLZXlWYWx1ZSA9IGNvbHVtbjMuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgICBjYXRLZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgICAgICBjYXRLZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9WSUVXSUQlPiIsdmlld0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSU+Iix0TW9kZWxLZXkpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSU+IixjYXRLZXlOYW1lKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFJT4iLGNhdEtleVZhbHVlKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQlPiIsZWRpdGFibGUpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKHRhYmxlQ29udGFpbmVySWQsbW9kaWZpZWROYW1lLGlucHV0TmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTJdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIGlucHV0VmFsdWU7Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgaW5wdXRWYWx1ZSA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdLnZhbHVlOwotICAgIGVsc2UKLSAgICAgIGlucHV0VmFsdWUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dFZhbHVlKSk7Ci0gICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KG1vZGlmaWVkTmFtZSxlZGl0YWJsZSkpOyAgICAKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWI2NjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIG51bWJlclNlbGVjdGVkID0gMDsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgbnVtYmVyU2VsZWN0ZWQrKzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bWJlclNlbGVjdGVkOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0Rm9ybSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLCI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iLGZvcm0sdHJ1ZSk7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIGZvcm0uYWN0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLgotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAobnVtYmVyU2VsZWN0ZWQgPiAwKQotICAgICAgcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKTsKLSAgICBlbHNlCi0gICAgICBhbGVydCgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0gIAotICBmdW5jdGlvbiByZWZyZXNoU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KLSAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKG51bWJlclNlbGVjdGVkID4gMCkKLSAgICAgIHByb2Nlc3NSZXN1bHRGb3JtKHRhYmxlQ29udGFpbmVySWQsZm9ybSk7Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uc1RvRmF2b3JpdGVzKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIGZvcm0uYWN0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLgotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAobnVtYmVyU2VsZWN0ZWQgPiAwKQotICAgICAgcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKTsKLSAgICBlbHNlCi0gICAgICBhbGVydCgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0gIAotPCUKLSAgIGlmIChzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLnNpemUoKSA+IDApCi0gICB7Ci0gICAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IChTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KXN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIuZWxlbWVudEF0KDApOwotICAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXkubGFzdEluZGV4T2YoJzonKTsKLSAgICAgU3RyaW5nIHRhcmdldFF1ZXJ5S2V5OwotICAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA9PSAtMSkKLSAgICAgICB0YXJnZXRRdWVyeUtleSA9ICIiOwotICAgICBlbHNlCi0gICAgICAgdGFyZ2V0UXVlcnlLZXkgPSBzdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxsYXN0U2VwYXJhdG9yUG9zKTsKLSAgICAgU3RyaW5nIHRhcmdldFByb3BlcnR5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKGxhc3RTZXBhcmF0b3JQb3MrMSxzdWJRdWVyeUtleS5sZW5ndGgoKSk7Ci0lPiAgICAgCi0gIGZ1bmN0aW9uIHRyYW5zZmVyU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgLy8gRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgc2VsZWN0ZWQuCi0gICAgdmFyIG51bWJlclNlbGVjdGVkID0gZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmIChudW1iZXJTZWxlY3RlZCA+IDApCi0gICAgewotPCUKLSAgICAgaWYgKHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpIHx8IHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKSB8fCB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKSkKLSAgICAgewotJT4KLSAgICAgIGlmIChudW1iZXJTZWxlY3RlZCAhPSAxKQotICAgICAgewotICAgICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0lOR0xFX0lURU0iKSklPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLTwlCi0gICAgICAgRm9ybVRvb2wgdGFyZ2V0Rm9ybVRvb2wgPSBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmdldFRhcmdldEZvcm1Ub29sKCk7Ci0gICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHRhcmdldEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKXRhcmdldEZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXModGFyZ2V0UXVlcnlLZXkpOwotICAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKXRhcmdldEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpOwotICAgICAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgIT0gbnVsbCAmJiBzZXJ2aWNlQnVzaW5lc3Muc2l6ZSgpID4gMCkKLSAgICAgICB7Ci0lPgotICAgICAgaWYgKCFjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9JVEVNX1JFUExBQ0VNRU5UIikpJT4iKSkKLSAgICAgICAgcmV0dXJuOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSU+Ci0gICAgICBwcm9jZXNzUmVzdWx0Rm9ybSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBhbGVydCgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci08JQotICAgfQotJT4gICAgICAgCi08L3NjcmlwdD4gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyNGFkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiJdLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZXNldCIpLml0ZW0oMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDg2NGNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIG5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiJdOwotICB2YXIgbmF2aWdhdG9yVG9vbGJhciA9IG5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIG5hdmlnYXRvckNvbnRlbnQgPSBuYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+Il07Ci0gIHZhciBhY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiJdOwotICB2YXIgcHJvcGVydGllc0NvbnRhaW5lciA9IGFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBwcm9wZXJ0aWVzVG9vbGJhciA9IHByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgcHJvcGVydGllc0NvbnRlbnQgPSBwcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iXTsKLSAgdmFyIHN0YXR1c0NvbnRhaW5lciA9IGFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHN0YXR1c1Rvb2xiYXIgPSBzdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciBzdGF0dXNDb250ZW50ID0gc3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiJdOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmIyNzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODk0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbW1vbkNhdGVnb3J5TW9kZWxzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9ImFwcGxpY2F0aW9uIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUmVxdWlyZXMgYnJvd3NlcmRldGVjdC5qcywgdGFibGVzLmpzcCAoZXhwbG9yZXIpCi0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLSAgdmFyIGNhdGVnb3J5V2luZG93OwotICB2YXIgY2F0ZWdvcnlXaW5kb3dDbG9zZWQgPSB0cnVlOwotICB2YXIgdGFyZ2V0Q2F0ZWdvcnlSb3cgPSAtMTsKLSAgdmFyIHRhcmdldENhdGVnb3J5S2V5TmFtZUVsZW1lbnQ7Ci0gIHZhciB0YXJnZXRDYXRlZ29yeUtleVZhbHVlRWxlbWVudDsKLSAgdmFyIGxhbmd1YWdlQXJyYXkgPSBuZXcgQXJyYXkoKTsKLSAgdmFyIGNhdGVnb3J5QXJyYXkgPSBuZXcgQXJyYXkoKTsKLSAgdmFyIHdpbGRjYXJkQ2F0ZWdvcnlCcm93c2VyVVJMUmUgPSAvKCUpLzsKLQotICBmdW5jdGlvbiBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKQotICB7Ci0gICAgY2xvc2VDYXRlZ29yeUJyb3dzZXIoKTsKLSAgICBjbG9zZVdTRExCcm93c2VyKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBMYW5ndWFnZShkaXNwbGF5TmFtZSxsYW5nSWQpCi0gIHsKLSAgICB0aGlzLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgdGhpcy5sYW5nSWQgPSBsYW5nSWQ7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wYXJlTGFuZ3VhZ2VEaXNwbGF5TmFtZXMoYSxiKQotICB7Ci0gICAgdmFyIHJlc3VsdCA9IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChyZXN1bHQgPiAwKQotICAgICAgcmV0dXJuIDE7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRUTW9kZWxLZXlTZWxlY3QoaXRlbVNlbGVjdCx0TW9kZWxLZXkpCi0gIHsKLSAgICBmb3IgKHZhciBpPTA7aTxpdGVtU2VsZWN0Lm9wdGlvbnMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaXRlbVNlbGVjdC5vcHRpb25zW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gdE1vZGVsS2V5LnRvTG93ZXJDYXNlKCkpCi0gICAgICB7Ci0gICAgICAgIGl0ZW1TZWxlY3Qub3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBpdGVtU2VsZWN0Lm9wdGlvbnNbaV0udGV4dDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCxsYW5ndWFnZVZhbHVlKQotICB7Ci0gICAgdmFyIHN0YXJ0OwotPCUKLSAgIC8vIENvbXBhcmUgd2l0aCB0aGUgZW1wdHkgc3RyaW5nIG9ubHkgaWYgdGhlIGxhbmd1YWdlVmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZy4KLSU+Ci0gICAgaWYgKGxhbmd1YWdlVmFsdWUubGVuZ3RoIDwgMSkKLSAgICAgIHN0YXJ0ID0gMDsKLSAgICBlbHNlCi0gICAgICBzdGFydCA9IDE7Ci0gICAgZm9yICh2YXIgaT1zdGFydDtpPGxhbmd1YWdlU2VsZWN0Lm9wdGlvbnMubGVuZ3RoO2krKykKLSAgICB7Ci08JQotICAgLy8gVXNlIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGxhbmd1YWdlVmFsdWUgYmVnaW5zIHdpdGggYSBrZXkgd2hvc2UgaXRlbSBpcyBpbiB0aGUgcGljayBsaXN0LiBUaGlzIGVuYWJsZXMgIkVuZ2xpc2giIHRvIGJlIHNlbGVjdGVkCi0gICAvLyBmb3IgZW4teHh4IChkaWFsZWN0cykuCi0lPgotICAgICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoIl4iK2xhbmd1YWdlU2VsZWN0Lm9wdGlvbnNbaV0udmFsdWUsImkiKTsKLSAgICAgIGlmIChyZWdFeHAudGVzdChsYW5ndWFnZVZhbHVlKSkKLSAgICAgIHsKLSAgICAgICAgbGFuZ3VhZ2VTZWxlY3Qub3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBsYW5ndWFnZVNlbGVjdC5vcHRpb25zW2ldLnRleHQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCkKLSAgewotICAgIGlmIChsYW5ndWFnZUFycmF5Lmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCIiLCIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VOIikpJT4iLCJlbiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQUEiKSklPiIsImFhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BQiIpKSU+IiwiYWIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FGIikpJT4iLCJhZiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQU0iKSklPiIsImFtIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BUiIpKSU+IiwiYXIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FTIikpJT4iLCJhcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQVkiKSklPiIsImF5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BWiIpKSU+IiwiYXoiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JBIikpJT4iLCJiYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQkUiKSklPiIsImJlIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CRyIpKSU+IiwiYmciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JIIikpJT4iLCJiaCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQkkiKSklPiIsImJpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CTiIpKSU+IiwiYm4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JPIikpJT4iLCJibyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQlIiKSklPiIsImJyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9DQSIpKSU+IiwiY2EiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0NPIikpJT4iLCJjbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQ1oiKSklPiIsImN6Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9DWSIpKSU+IiwiY3kiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0RBIikpJT4iLCJkYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfREUiKSklPiIsImRlIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9EWiIpKSU+IiwiZHoiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VMIikpJT4iLCJlbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRU8iKSklPiIsImVvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FUyIpKSU+IiwiZXMiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VUIikpJT4iLCJldCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRVUiKSklPiIsImV1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GQSIpKSU+IiwiZmEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZJIikpJT4iLCJmaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRkoiKSklPiIsImZqIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GTyIpKSU+IiwiZm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZSIikpJT4iLCJmciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRlkiKSklPiIsImZ5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HQSIpKSU+IiwiZ2EiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0dEIikpJT4iLCJnZCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfR0wiKSklPiIsImdsIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HTiIpKSU+IiwiZ24iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0dVIikpJT4iLCJndSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSEEiKSklPiIsImhhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9ISSIpKSU+IiwiaGkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0hSIikpJT4iLCJociIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSFUiKSklPiIsImh1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9IWSIpKSU+IiwiaHkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lBIikpJT4iLCJpYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSUUiKSklPiIsImllIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JSyIpKSU+IiwiaWsiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lOIikpJT4iLCJpbiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSVMiKSklPiIsImlzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JVCIpKSU+IiwiaXQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lXIikpJT4iLCJpdyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSkEiKSklPiIsImphIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9KSSIpKSU+IiwiamkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0pXIikpJT4iLCJqdyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS0EiKSklPiIsImthIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LSyIpKSU+Iiwia2siKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tMIikpJT4iLCJrbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS00iKSklPiIsImttIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LTiIpKSU+Iiwia24iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tPIikpJT4iLCJrbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS1MiKSklPiIsImtzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LVSIpKSU+Iiwia3UiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tZIikpJT4iLCJreSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTEEiKSklPiIsImxhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9MTiIpKSU+IiwibG4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0xPIikpJT4iLCJsbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTFQiKSklPiIsImx0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9MViIpKSU+IiwibHYiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01HIikpJT4iLCJtZyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTUkiKSklPiIsIm1pIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NSyIpKSU+IiwibWsiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01MIikpJT4iLCJtbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTU4iKSklPiIsIm1uIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NTyIpKSU+IiwibW8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01SIikpJT4iLCJtciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTVMiKSklPiIsIm1zIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NVCIpKSU+IiwibXQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01ZIikpJT4iLCJteSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTkEiKSklPiIsIm5hIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9ORSIpKSU+IiwibmUiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX05MIikpJT4iLCJubCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTk8iKSklPiIsIm5vIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9PQyIpKSU+Iiwib2MiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX09NIikpJT4iLCJvbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfT1IiKSklPiIsIm9yIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9QQSIpKSU+IiwicGEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1BMIikpJT4iLCJwbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUFMiKSklPiIsInBzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9QVCIpKSU+IiwicHQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1FVIikpJT4iLCJxdSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUk0iKSklPiIsInJtIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9STiIpKSU+Iiwicm4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1JPIikpJT4iLCJybyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUlUiKSklPiIsInJ1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9SVyIpKSU+IiwicnciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NBIikpJT4iLCJzYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0QiKSklPiIsInNkIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TRyIpKSU+Iiwic2ciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NIIikpJT4iLCJzaCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0kiKSklPiIsInNpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TSyIpKSU+Iiwic2siKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NMIikpJT4iLCJzbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU00iKSklPiIsInNtIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TTiIpKSU+Iiwic24iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NPIikpJT4iLCJzbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1EiKSklPiIsInNxIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TUiIpKSU+Iiwic3IiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NTIikpJT4iLCJzcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1QiKSklPiIsInN0IikKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NVIikpJT4iLCJzdSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1YiKSklPiIsInN2Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TVyIpKSU+Iiwic3ciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RBIikpJT4iLCJ0YSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEUiKSklPiIsInRlIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9URyIpKSU+IiwidGciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RIIikpJT4iLCJ0aCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEkiKSklPiIsInRpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9USyIpKSU+IiwidGsiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RMIikpJT4iLCJ0bCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVE4iKSklPiIsInRuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UTyIpKSU+IiwidG8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RSIikpJT4iLCJ0ciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVFMiKSklPiIsInRzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UVCIpKSU+IiwidHQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RXIikpJT4iLCJ0dyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVUsiKSklPiIsInVrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9VUiIpKSU+IiwidXIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1VaIikpJT4iLCJ1eiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVkkiKSklPiIsInZpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9WTyIpKSU+Iiwidm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1dPIikpJT4iLCJ3byIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfWEgiKSklPiIsInhoIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9ZTyIpKSU+IiwieW8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1pIIikpJT4iLCJ6aCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfWlUiKSklPiIsInp1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5LnNvcnQoY29tcGFyZUxhbmd1YWdlRGlzcGxheU5hbWVzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpPTA7aTxsYW5ndWFnZUFycmF5Lmxlbmd0aDtpKyspCi0gICAgICBsYW5ndWFnZVNlbGVjdC5vcHRpb25zW2ldID0gbmV3IE9wdGlvbihsYW5ndWFnZUFycmF5W2ldLmRpc3BsYXlOYW1lLGxhbmd1YWdlQXJyYXlbaV0ubGFuZ0lkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncyh0YWJsZUNvbnRhaW5lcklkLG5hbWVJbmRleCxsYW5ndWFnZVZhbHVlLG5hbWVUZXh0VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrbmFtZUluZGV4XTsKLSAgICB2YXIgbGFuZ3VhZ2VTZWxlY3QgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCk7Ci0gICAgdmFyIG5hbWVUZXh0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMSk7Ci0gICAgc2V0TGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QsbGFuZ3VhZ2VWYWx1ZSk7Ci0gICAgbmFtZVRleHQudmFsdWUgPSBuYW1lVGV4dFZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWRDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIC8vIENoZWNrIGlmIGFueSByb3dzIGFib3ZlIGFuZCBpbmNsdWRpbmcgdGhlIHRhcmdldENhdGVnb3J5Um93IGFyZSBzZWxlY3RlZC4KLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgbmV3VGFyZ2V0Q2F0ZWdvcnlSb3cgPSB0YXJnZXRDYXRlZ29yeVJvdzsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPD10YXJnZXRDYXRlZ29yeVJvdztpKyspCi0gICAgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGkgPT0gdGFyZ2V0Q2F0ZWdvcnlSb3cpCi0gICAgICAgICAgbmV3VGFyZ2V0Q2F0ZWdvcnlSb3cgPSAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld1RhcmdldENhdGVnb3J5Um93LS07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdUYXJnZXRDYXRlZ29yeVJvdyA9PSAtMSkKLSAgICAgIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci0gICAgdGFyZ2V0Q2F0ZWdvcnlSb3cgPSBuZXdUYXJnZXRDYXRlZ29yeVJvdzsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgLy8gRml4IHRoZSBicm93c2UuLi4gbGlua3MuCi0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBicm93c2VMaW5rID0gdGFibGVSb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKS5pdGVtKDApOwotICAgICAgc2V0SlNMaW5rUm93VGFyZ2V0KGJyb3dzZUxpbmssIm9wZW5DYXRlZ29yeUJyb3dzZXIiLHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gYWRkTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLHRleHRDb250cm9sVGl0bGUpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChsYW5ndWFnZVNlbGVjdCk7Ci0KLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKHRleHRJbnB1dCk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBsYW5ndWFnZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gdGV4dENvbnRyb2xUaXRsZTsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLndpZHRoID0gIjkwJSI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRJZGVudGlmaWVyUm93U2V0dGluZ3ModGFibGVDb250YWluZXJJZCxpZGVudGlmaWVySW5kZXgsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraWRlbnRpZmllckluZGV4XTsKLSAgICB2YXIgaWRlbnRpZmllclR5cGVTZWxlY3QgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCk7Ci0gICAgdmFyIHJvd0VsZW1lbnRDb2xsZWN0aW9uID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHZhciBrZXlOYW1lVGV4dCA9IHJvd0VsZW1lbnRDb2xsZWN0aW9uLml0ZW0oMSk7Ci0gICAgdmFyIGtleVZhbHVlVGV4dCA9IHJvd0VsZW1lbnRDb2xsZWN0aW9uLml0ZW0oMik7Ci0gICAgc2V0VE1vZGVsS2V5U2VsZWN0KGlkZW50aWZpZXJUeXBlU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAga2V5TmFtZVRleHQudmFsdWUgPSBrZXlOYW1lOwotICAgIGtleVZhbHVlVGV4dC52YWx1ZSA9IGtleVZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCkKLSAgewotICAgIHZhciBjb3VudGVyID0gMDsKLSAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5vcHRpb25zW2NvdW50ZXIrK10gPSBuZXcgT3B0aW9uKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0lERU5USUZJRVJfRFVOUyIpKSU+IiwiPCU9VE1vZGVsLkRfVV9OX1NfVE1PREVMX0tFWSU+Iik7Ci0gICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub3B0aW9uc1tjb3VudGVyKytdID0gbmV3IE9wdGlvbigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9JREVOVElGSUVSX1RIT01BU19SRUdJU1RSWSIpKSU+IiwiPCU9VE1vZGVsLlRIT01BU19SRUdJU1RFUl9UTU9ERUxfS0VZJT4iKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZUlkZW50aWZpZXJDaGFuZ2UoZSkKLSAgewotICAgIHZhciBpZGVudGlmaWVyU2VsZWN0OwotICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICAgIGlkZW50aWZpZXJTZWxlY3QgPSBldmVudC5zcmNFbGVtZW50OwotICAgIGVsc2UKLSAgICAgIGlkZW50aWZpZXJTZWxlY3QgPSBlLnRhcmdldDsKLSAgICB2YXIgY2VsbCA9IGlkZW50aWZpZXJTZWxlY3QucGFyZW50Tm9kZTsKLSAgICB2YXIgcm93ID0gY2VsbC5wYXJlbnROb2RlOwotICAgIHZhciBpbnB1dEVsZW1lbnRzID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPGlucHV0RWxlbWVudHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaW5wdXRFbGVtZW50cy5pdGVtKGkpLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICBpbnB1dEVsZW1lbnRzLml0ZW0oaSkudmFsdWUgPSBpZGVudGlmaWVyU2VsZWN0Lm9wdGlvbnNbaWRlbnRpZmllclNlbGVjdC5zZWxlY3RlZEluZGV4XS50ZXh0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBrZXlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAga2V5VHlwZVNlbGVjdC5vbmNoYW5nZSA9IGhhbmRsZUlkZW50aWZpZXJDaGFuZ2U7Ci0gICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChrZXlUeXBlU2VsZWN0KTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGtleVR5cGVTZWxlY3QpOwotCi0gICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCk7Ci0KLSAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAga2V5VHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCIKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4xLndpZHRoID0gIjUlIjsKLSAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FIikpJT4iOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNDAlIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFIikpJT4iOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiNTUlIjsKLQotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICBrZXlOYW1lVGV4dElucHV0LnZhbHVlID0ga2V5VHlwZVNlbGVjdC5vcHRpb25zWzBdLnRleHQ7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIENhdGVnb3J5KGRpc3BsYXlOYW1lLHRNb2RlbEtleSkKLSAgewotICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKLSAgICB0aGlzLnRNb2RlbEtleSA9IHRNb2RlbEtleTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbXBhcmVDYXRlZ29yeURpc3BsYXlOYW1lcyhhLGIpCi0gIHsKLSAgICB2YXIgcmVzdWx0ID0gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKHJlc3VsdCA+IDApCi0gICAgICByZXR1cm4gMTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gMDsKLSAgfSAgCi0KLSAgZnVuY3Rpb24gcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0KQotICB7Ci0gICAgaWYgKGNhdGVnb3J5QXJyYXkubGVuZ3RoID09IDApCi0gICAgewotPCUKLSAgIEVudW1lcmF0aW9uIGNvbW1vbkNhdGVnb3JpZXMgPSBjb21tb25DYXRlZ29yeU1vZGVscy5lbGVtZW50cygpOwotICAgd2hpbGUgKGNvbW1vbkNhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICB7Ci0gICAgIENhdGVnb3J5TW9kZWwgY29tbW9uQ2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKWNvbW1vbkNhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsKLSU+Ci0gICAgICBjYXRlZ29yeUFycmF5W2NhdGVnb3J5QXJyYXkubGVuZ3RoXSA9IG5ldyBDYXRlZ29yeSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbW1vbkNhdGVnb3J5TW9kZWwuZ2V0RGlzcGxheU5hbWUoKSklPiIsIjwlPWNvbW1vbkNhdGVnb3J5TW9kZWwuZ2V0VE1vZGVsS2V5KCklPiIpOwotPCUKLSAgIH0KLSAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICBpZiAodXNlckRlZmluZWRDYXRlZ29yaWVzICE9IG51bGwpCi0gICB7Ci0gICAgIHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgIHsKLSAgICAgICBDYXRlZ29yeU1vZGVsIHVzZXJEZWZpbmVkQ2F0ZWdvcnkgPSAoQ2F0ZWdvcnlNb2RlbCl1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsKLSU+Ci0gICAgICBjYXRlZ29yeUFycmF5W2NhdGVnb3J5QXJyYXkubGVuZ3RoXSA9IG5ldyBDYXRlZ29yeSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0RGlzcGxheU5hbWUoKSklPiIsIjwlPXVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0VE1vZGVsS2V5KCklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICAgIGNhdGVnb3J5QXJyYXkuc29ydChjb21wYXJlQ2F0ZWdvcnlEaXNwbGF5TmFtZXMpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHZhciBpPTA7aTxjYXRlZ29yeUFycmF5Lmxlbmd0aDtpKyspCi0gICAgICBjYXRlZ29yeVR5cGVTZWxlY3Qub3B0aW9uc1tpXSA9IG5ldyBPcHRpb24oY2F0ZWdvcnlBcnJheVtpXS5kaXNwbGF5TmFtZSxjYXRlZ29yeUFycmF5W2ldLnRNb2RlbEtleSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRKU0xpbmtSb3dUYXJnZXQobGluayxqc0Z1bmN0aW9uLHRhYmxlQ29udGFpbmVySWQscm93KQotICB7Ci0gICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6Iitqc0Z1bmN0aW9uKyIoJyIrdGFibGVDb250YWluZXJJZCsiJywiK3JvdysiKSI7Ci0gIH0KLQotICBmdW5jdGlvbiBvcGVuQ2F0ZWdvcnlCcm93c2VyKHRhYmxlQ29udGFpbmVySWQscm93KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNhdGVnb3J5U2VsZWN0ID0gdGFibGUucm93c1tyb3ddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciBzZWxlY3RlZENhdGVnb3J5T3B0aW9uID0gY2F0ZWdvcnlTZWxlY3Qub3B0aW9uc1tjYXRlZ29yeVNlbGVjdC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdOwotICAgIHZhciBjYXRlZ29yeVR5cGUgPSB0YWJsZS5yb3dzW3Jvd10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCkub3B0aW9ucy5zZWxlY3RlZEluZGV4OwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tyb3ddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHRhcmdldENhdGVnb3J5Um93ID0gcm93OwotICAgIHRhcmdldENhdGVnb3J5S2V5TmFtZUVsZW1lbnQgPSBjb2x1bW5zLml0ZW0oMikuY2hpbGROb2Rlc1swXTsKLSAgICB0YXJnZXRDYXRlZ29yeUtleVZhbHVlRWxlbWVudCA9IGNvbHVtbnMuaXRlbSgzKS5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmdldFdpbGRDYXJkQWN0aW9uTGluayhzZXNzaW9uSWQpKSklPiI7Ci0gICAgY2F0ZWdvcnlXaW5kb3cgPSB3aW5kb3cub3BlbihsaW5rLnJlcGxhY2Uod2lsZGNhcmRDYXRlZ29yeUJyb3dzZXJVUkxSZSxzZWxlY3RlZENhdGVnb3J5T3B0aW9uLnZhbHVlKSwiY2F0ZWdvcnlXaW5kb3ciLCJoZWlnaHQ9MzAwLHdpZHRoPTMwMCxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAoY2F0ZWdvcnlXaW5kb3cuZm9jdXMpCi0gICAgICBjYXRlZ29yeVdpbmRvdy5mb2N1cygpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvc2VDYXRlZ29yeUJyb3dzZXIoKQotICB7Ci0gICAgaWYgKCFjYXRlZ29yeVdpbmRvd0Nsb3NlZCkKLSAgICAgIGNhdGVnb3J5V2luZG93LmNsb3NlKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKHRhYmxlQ29udGFpbmVySWQsY2F0ZWdvcnlJbmRleCx0TW9kZWxLZXksa2V5TmFtZSxrZXlWYWx1ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytjYXRlZ29yeUluZGV4XTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciByb3dFbGVtZW50Q29sbGVjdGlvbiA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICB2YXIga2V5TmFtZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDEpOwotICAgIHZhciBrZXlWYWx1ZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDIpOwotICAgIHNldFRNb2RlbEtleVNlbGVjdChjYXRlZ29yeVR5cGVTZWxlY3QsdE1vZGVsS2V5KTsKLSAgICBrZXlOYW1lVGV4dC52YWx1ZSA9IGtleU5hbWU7Ci0gICAga2V5VmFsdWVUZXh0LnZhbHVlID0ga2V5VmFsdWU7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgYnJvd3NlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoYnJvd3NlTGluaywib3BlbkNhdGVnb3J5QnJvd3NlciIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgYnJvd3NlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChicm93c2VMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZENhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0KTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0KLSAgICB2YXIga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMi5hcHBlbmRDaGlsZChrZXlOYW1lVGV4dElucHV0KTsKLQotICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChrZXlWYWx1ZVRleHRJbnB1dCk7Ci0KLSAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNhdGVnb3J5VHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI1JSI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUUiKSklPiI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI1NSUiOwotICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX1ZBTFVFIikpJT4iOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiMjUlIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREaXNjb3ZlcnlVUkxSb3dTZXR0aW5ncyh0YWJsZUNvbnRhaW5lcklkLGRpc2NvdmVyeVVSTEluZGV4LGRpc2NvdmVyeVVSTCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytkaXNjb3ZlcnlVUkxJbmRleF07Ci0gICAgdmFyIHJvd0VsZW1lbnRDb2xsZWN0aW9uID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHZhciBkaXNjb3ZlcnlVUkxUZXh0SW5wdXQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDEpOwotICAgIGRpc2NvdmVyeVVSTFRleHRJbnB1dC52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGRpc2NvdmVyeVVSTFRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChkaXNjb3ZlcnlVUkxUZXh0SW5wdXQpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgZGlzY292ZXJ5VVJMVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgZGlzY292ZXJ5VVJMVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkwiKSklPiI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI5NSUiOwotCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZFJlc3VsdFJvdyh0YWJsZUNvbnRhaW5lcklkLG5vZGVJZCx1cmwsbmFtZSxkZXNjcmlwdGlvbikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLG5vZGVJZCkpOwotCi0gICAgdmFyIG5hbWVEZXRhaWxzTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBuYW1lRGV0YWlsc0xpbmsuaHJlZiA9IHVybDsKLSAgICBuYW1lRGV0YWlsc0xpbmsudGFyZ2V0ID0gIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI7Ci0gICAgbmFtZURldGFpbHNMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5hbWUpKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKG5hbWVEZXRhaWxzTGluayk7Ci0KLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGRlc2NyaXB0aW9uKSkpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI0OCUiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNDglIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldEZpbmRRdWFsaWZpZXJUYWJsZShjb250YWluZXJJZCkKLSAgewotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250YWluZXJJZCk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKS5pdGVtKDEpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RmluZFF1YWxpZmllcihmaW5kUXVhbGlmaWVyLG5hbWVUYWJsZUNvbnRhaW5lcklkLGNhdGVnb3J5VGFibGVDb250YWluZXJJZCxmaW5kUXVhbGlmaWVyc1RhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdHdpc3RPcGVuTmFtZXMgPSBmYWxzZTsKLSAgICB2YXIgdHdpc3RPcGVuQ2F0ZWdvcmllcyA9IGZhbHNlOwotICAgIHZhciB0d2lzdE9wZW5GaW5kUXVhbGlmaWVycyA9IGZhbHNlOwotCi0gICAgaWYgKGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuZXhhY3ROYW1lTWF0Y2glPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUobmFtZVRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGV4YWN0TmFtZU1hdGNoQ2hlY2tib3ggPSBmcVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBleGFjdE5hbWVNYXRjaENoZWNrYm94LmNoZWNrZWQgPSB0cnVlOwotICAgICAgdHdpc3RPcGVuTmFtZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmNhc2VTZW5zaXRpdmVNYXRjaCU+IikKLSAgICB7Ci0gICAgICB2YXIgZnFUYWJsZSA9IGdldEZpbmRRdWFsaWZpZXJUYWJsZShuYW1lVGFibGVDb250YWluZXJJZCk7Ci0gICAgICB2YXIgY2FzZVNlbnNpdGl2ZU1hdGNoQ2hlY2tib3ggPSBmcVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMSk7Ci0gICAgICBjYXNlU2Vuc2l0aXZlTWF0Y2hDaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIHR3aXN0T3Blbk5hbWVzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5zZXJ2aWNlU3Vic2V0JT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuY29tYmluZUNhdGVnb3J5QmFncyU+IikKLSAgICB7Ci0gICAgICB2YXIgZnFUYWJsZSA9IGdldEZpbmRRdWFsaWZpZXJUYWJsZShjYXRlZ29yeVRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGNhdGVnb3J5U2VsZWN0ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICAgIHNldFNlbGVjdChjYXRlZ29yeVNlbGVjdCxmaW5kUXVhbGlmaWVyKTsKLSAgICAgIHR3aXN0T3BlbkNhdGVnb3JpZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmFuZEFsbEtleXMlPiIgfHwgZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5vckFsbEtleXMlPiIgfHwgZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5vckxpa2VLZXlzJT4iKQotICAgIHsKLSAgICAgIHZhciBmcVRhYmxlID0gZ2V0VGFibGUoZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBrZXlTZWxlY3QgPSBmcVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgICAgc2V0U2VsZWN0KGtleVNlbGVjdCxmaW5kUXVhbGlmaWVyKTsKLSAgICAgIGlmIChmaW5kUXVhbGlmaWVyICE9ICI8JT1GaW5kUXVhbGlmaWVyLmFuZEFsbEtleXMlPiIpCi0gICAgICAgIHR3aXN0T3BlbkZpbmRRdWFsaWZpZXJzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZURlc2MlPiIgfHwgZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlEYXRlQXNjJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZURlc2MlPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRUYWJsZShmaW5kUXVhbGlmaWVyc1RhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIHNvcnRDb2xsZWN0aW9uID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICAgIGZvciAodmFyIGk9MDtpPHNvcnRDb2xsZWN0aW9uLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChzb3J0Q29sbGVjdGlvbi5pdGVtKGkpLnZhbHVlID09IGZpbmRRdWFsaWZpZXIpCi0gICAgICAgICAgc29ydENvbGxlY3Rpb24uaXRlbShpKS5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChmaW5kUXVhbGlmaWVyICE9ICI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVBc2MlPiIgJiYgZmluZFF1YWxpZmllciAhPSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlEYXRlQXNjJT4iKQotICAgICAgICB0d2lzdE9wZW5GaW5kUXVhbGlmaWVycyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR3aXN0T3Blbk5hbWVzKQotICAgICAgdHdpc3RPcGVuKG5hbWVUYWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAodHdpc3RPcGVuQ2F0ZWdvcmllcykKLSAgICAgIHR3aXN0T3BlbihjYXRlZ29yeVRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmICh0d2lzdE9wZW5GaW5kUXVhbGlmaWVycykKLSAgICAgIHR3aXN0T3BlbihmaW5kUXVhbGlmaWVyc1RhYmxlQ29udGFpbmVySWQpOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGxhbmdWYXIsdGV4dFZhcixmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGxhbmd1YWdlU2VsZWN0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKLSAgICB2YXIgdGV4dElucHV0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPGxhbmd1YWdlU2VsZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBoaWRkZW5MYW5ndWFnZVNlbGVjdCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQobGFuZ1ZhcixsYW5ndWFnZVNlbGVjdHNbaV0udmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5MYW5ndWFnZVNlbGVjdCk7Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuVGV4dElucHV0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCh0ZXh0VmFyLHRleHRJbnB1dHNbaV0udmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlblRleHRJbnB1dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc05hbWVGaW5kUXVhbGlmaWVycyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIG5hbWVGaW5kUXVhbGlmaWVyQ2hlY2tib3hlcyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPG5hbWVGaW5kUXVhbGlmaWVyQ2hlY2tib3hlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBpdGVtID0gbmFtZUZpbmRRdWFsaWZpZXJDaGVja2JveGVzLml0ZW0oaSk7Ci0gICAgICBpZiAoaXRlbS5jaGVja2VkKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuRmluZFF1YWxpZmllciA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixpdGVtLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5GaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzSWRlbnRpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBpZGVudGlmaWVyVHlwZVNlbGVjdHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci0gICAgdmFyIHRleHRJbnB1dHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxpZGVudGlmaWVyVHlwZVNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGlkZGVuSWRlbnRpZmllclR5cGVTZWxlY3QgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSU+IixpZGVudGlmaWVyVHlwZVNlbGVjdHNbaV0udmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5JZGVudGlmaWVyVHlwZVNlbGVjdCk7Ci0gICAgfQotCi0gICAgdmFyIGlzS2V5TmFtZSA9IHRydWU7Ci0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgbmFtZTsKLSAgICAgICAgaWYgKGlzS2V5TmFtZSkKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSU+IjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSU+IjsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQobmFtZSx0ZXh0SW5wdXRzW2ldLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0SW5wdXQpOwotICAgICAgICBpc0tleU5hbWUgPSAhaXNLZXlOYW1lOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NDYXRlZ29yeVRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSxpc0ZpbmRCdXNpbmVzcykKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjYXRlZ29yeVR5cGVTZWxlY3RzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwotICAgIHZhciB0ZXh0SW5wdXRzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y2F0ZWdvcnlUeXBlU2VsZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBoaWRkZW5DYXRlZ29yeVR5cGVTZWxlY3QgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUlPiIsY2F0ZWdvcnlUeXBlU2VsZWN0c1tpXS52YWx1ZSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlbkNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgfQotCi0gICAgdmFyIGlzS2V5TmFtZSA9IHRydWU7Ci0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgbmFtZTsKLSAgICAgICAgaWYgKGlzS2V5TmFtZSkKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUlPiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFJT4iOwotICAgICAgICB2YXIgaGlkZGVuVGV4dElucHV0ID0gY3JlYXRlSGlkZGVuRWxlbWVudChuYW1lLHRleHRJbnB1dHNbaV0udmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlblRleHRJbnB1dCk7Ci0gICAgICAgIGlzS2V5TmFtZSA9ICFpc0tleU5hbWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzRmluZEJ1c2luZXNzKQotICAgIHsKLSAgICAgIHRhYmxlID0gZ2V0RmluZFF1YWxpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGNhdGVnb3J5RmluZFF1YWxpZmllciA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgICAgaWYgKGNhdGVnb3J5RmluZFF1YWxpZmllci5zZWxlY3RlZEluZGV4ICE9IDApCi0gICAgICB7Ci0gICAgICAgIHZhciBoaWRkZW5GaW5kUXVhbGlmaWVyID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSJT4iLGNhdGVnb3J5RmluZFF1YWxpZmllci52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuRmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Rpc2NvdmVyeVVSTFRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0ZXh0SW5wdXRzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuVGV4dElucHV0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwlPiIsdGV4dElucHV0c1tpXS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dElucHV0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBmaW5kUXVhbGlmaWVyU2VsZWN0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxmaW5kUXVhbGlmaWVyU2VsZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBmaW5kUXVhbGlmaWVyU2VsZWN0ID0gZmluZFF1YWxpZmllclNlbGVjdHMuaXRlbShpKTsKLSAgICAgIHZhciBoaWRkZW5GaW5kUXVhbGlmaWVyID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSJT4iLGZpbmRRdWFsaWZpZXJTZWxlY3QudmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5GaW5kUXVhbGlmaWVyKTsKLSAgICB9Ci0KLSAgICB2YXIgZmluZFF1YWxpZmllclNvcnRSYWRpb3MgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxmaW5kUXVhbGlmaWVyU29ydFJhZGlvcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChmaW5kUXVhbGlmaWVyU29ydFJhZGlvcy5pdGVtKGkpLmNoZWNrZWQpCi0gICAgICB7Ci0gICAgICAgIHZhciBoaWRkZW5Tb3J0RWxlbWVudCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixmaW5kUXVhbGlmaWVyU29ydFJhZGlvcy5pdGVtKGkpLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5Tb3J0RWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdFRhYmxlKHRhYmxlQ29udGFpbmVySWQsaW5wdXROYW1lLGZvcm0sc2VsZWN0ZWRPbmx5KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGlucHV0cyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgICBpZiAoc2VsZWN0ZWRPbmx5KQotICAgICAgewotICAgICAgICBpZiAoaW5wdXRzLml0ZW0oMCkuY2hlY2tlZCkKLSAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0cy5pdGVtKDEpLnZhbHVlKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChpbnB1dE5hbWUsaW5wdXRzLml0ZW0oMSkudmFsdWUpKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBpbml0aWF0ZVN1YlF1ZXJ5KGZvcm1Db250YWluZXJJZCxuZXdTdWJRdWVyeUtleSxxdWVyeUl0ZW0saXNHZXQpCi0gIHsKLSAgICBpZiAoaXNHZXQpCi0gICAgewotICAgICAgdmFyIGhhc0dldEl0ZW1zID0gZmFsc2U7Ci0gICAgICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+OgotICAgICAgICAgIGhhc0dldEl0ZW1zID0gPCU9cmVnTm9kZS5oYXNCdXNpbmVzcygpJT47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT46Ci0gICAgICAgICAgaGFzR2V0SXRlbXMgPSA8JT1yZWdOb2RlLmhhc1NlcnZpY2UoKSU+OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBoYXNHZXRJdGVtcyA9IDwlPXJlZ05vZGUuaGFzU2VydmljZUludGVyZmFjZSgpJT47Ci0gICAgICB9Ci0gICAgICBpZiAoIWhhc0dldEl0ZW1zKQotICAgICAgewotICAgICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fSVRFTVNfVE9fR0VUIikpJT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICB2YXIgZm9ybUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1Db250YWluZXJJZCk7Ci0gICAgdmFyIGZvcm0gPSBmb3JtQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4udmFsdWUgPSBpc0dldDsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+LnZhbHVlID0gbmV3U3ViUXVlcnlLZXk7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4udmFsdWUgPSBxdWVyeUl0ZW07Ci0gICAgdmFyIG9rVG9TdWJtaXQgPSBmYWxzZTsKLSAgICBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJmaW5kU2VydmljZXNBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybShmb3JtKTsKLSAgICBlbHNlIGlmIChmb3JtQ29udGFpbmVySWQgPT0gImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAicHVibGlzaFNlcnZpY2VTaW1wbGUiKQotICAgICAgb2tUb1N1Ym1pdCA9IHByb2Nlc3NQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJwdWJsaXNoU2VydmljZUFkdmFuY2VkIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJwdWJsaXNoZXJBc3NlcnRpb25zIikKLSAgICAgIG9rVG9TdWJtaXQgPSBoYW5kbGVTdWJtaXQoZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXMiKQotICAgICAgb2tUb1N1Ym1pdCA9IHByb2Nlc3NGb3JtKGZvcm0pOwotICAgIGlmIChva1RvU3VibWl0KQotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZDM3NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTU0YjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxwcmU+Ci08JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5nZXRNZXNzYWdlc0Zyb21MaXN0KCkpJT4KLSAgICAgICAgPC9wcmU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGI0ZWQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoInVkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChVRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3RhdHVzLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1NUQVRVUyIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRDbGVhciA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NMRUFSIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEVOVCU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNmZiMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1VERElfUEVSU1BFQ1RJVkVfQ09OVEVOVCIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IGNvbHM9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+IiBiZ2NvbG9yPSNFQ0U5RDg+Ci0gIDwlCi0gIGlmIChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5pc1JUTCgpKQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9uc19jb250YWluZXIuanNwIikpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9uc19jb250YWluZXIuanNwIikpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICAlPgotPC9mcmFtZXNldD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjMzVjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkNsZWFyV1NETEFjdGlvbiIlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotaWYgKGNvbnRyb2xsZXIuZ2V0U2Vzc2lvbklkKCkgPT0gbnVsbCkgewotJT4KLQotIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50ID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iXTsKLQkJcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gImh0dHA6Ly88JT1yZXF1ZXN0LmdldFNlcnZlck5hbWUoKSU+OjwlPXJlcXVlc3QuZ2V0U2VydmVyUG9ydCgpJT48JT1yZXF1ZXN0LmdldENvbnRleHRQYXRoKCklPi9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AiOwotIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotQ2xlYXJXU0RMQWN0aW9uIGFjdGlvbiA9IG5ldyBDbGVhcldTRExBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTQwMzg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkNyZWF0ZUluc3RhbmNlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPCUKLSAgQ3JlYXRlSW5zdGFuY2VBY3Rpb24gYWN0aW9uID0gbmV3IENyZWF0ZUluc3RhbmNlQWN0aW9uKGNvbnRyb2xsZXIpOwotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBhY3Rpb24uZXhlY3V0ZSgpOwotICAlPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiZjQ3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgaWYgKGlucHV0c1ZhbGlkKQotICB7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICB9Ci0gICU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBjMmQ0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbiBhY3Rpb24gPSBuZXcgSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgaWYgKGlucHV0c1ZhbGlkKQotICB7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICB9Ci0gICU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjM5ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VuLm1pc2MuQkFTRTY0RGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24oY29udHJvbGxlcik7Ci1TdHJpbmcgaHR0cEJhc2ljQXV0aERhdGEgPSByZXF1ZXN0LmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX0FVVEgpOwotaWYgKGh0dHBCYXNpY0F1dGhEYXRhICE9IG51bGwgJiYgaHR0cEJhc2ljQXV0aERhdGEubGVuZ3RoKCkgPiAwKQotewotICBpbnQgYmFzaWNJbmRleCA9IGh0dHBCYXNpY0F1dGhEYXRhLmluZGV4T2YoSFRUUFRyYW5zcG9ydC5CQVNJQyk7Ci0gIGlmIChiYXNpY0luZGV4ICE9IC0xKQotICB7Ci0gICAgQkFTRTY0RGVjb2RlciBkZWNvZGVyID0gbmV3IEJBU0U2NERlY29kZXIoKTsKLSAgICBodHRwQmFzaWNBdXRoRGF0YSA9IG5ldyBTdHJpbmcoZGVjb2Rlci5kZWNvZGVCdWZmZXIoaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKGJhc2ljSW5kZXggKyBIVFRQVHJhbnNwb3J0LkJBU0lDLmxlbmd0aCgpICsgMSkpKTsKLSAgICBpbnQgY29sb25JbmRleCA9IGh0dHBCYXNpY0F1dGhEYXRhLmluZGV4T2YoSFRUUFRyYW5zcG9ydC5DT0xPTik7Ci0gICAgaWYgKGNvbG9uSW5kZXggIT0gLTEpCi0gICAgewotICAgICAgYWN0aW9uLmFkZFByb3BlcnR5KFdTRExBY3Rpb25JbnB1dHMuSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FLCBodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCkpOwotICAgICAgYWN0aW9uLmFkZFByb3BlcnR5KFdTRExBY3Rpb25JbnB1dHMuSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JELCBodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIGh0dHBCYXNpY0F1dGhEYXRhLmxlbmd0aCgpKSk7Ci0gICAgfQotICB9Ci19Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1pZiAoIWlucHV0c1ZhbGlkKQotewotJT4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICA8aGVhZD4KLSAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgPC9oZWFkPgotICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIDwvc2NyaXB0PgotICAgIDwvYm9keT4KLSAgPC9odG1sPgotPCUKLX0KLWVsc2UKLXsKLSAgdHJ5Ci0gIHsKLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICA8L2hlYWQ+Ci0gICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgPCUKLSAgICAgICAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICAgICAgIHsKLSAgICAgICAgICAlPgotICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgJT4KLSAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICAlPgotICAgICAgICA8L3NjcmlwdD4KLSAgICAgIDwvYm9keT4KLSAgICA8L2h0bWw+Ci08JQotICB9Ci0gIGNhdGNoIChIVFRQVHJhbnNwb3J0RXhjZXB0aW9uIGh0dHBlKQotICB7Ci0gICAgaW50IGNvZGUgPSBodHRwZS5nZXRTdGF0dXNDb2RlKCk7Ci0gICAgaWYgKGNvZGUgPT0gSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpCi0gICAgewotICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKGNvZGUpOwotICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgsIFN0cmluZy52YWx1ZU9mKDApKTsKLSAgICAgIFN0cmluZyB3d3dBdXRoRGF0YSA9IGh0dHBlLmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRILnRvTG93ZXJDYXNlKCkpOwotICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgIHd3d0F1dGhEYXRhID0gaHR0cGUuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgpOwotICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgIHd3d0F1dGhEYXRhID0gSFRUUFRyYW5zcG9ydC5CQVNJQzsKLSAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRILCB3d3dBdXRoRGF0YSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoU3RyaW5nLnZhbHVlT2YoY29kZSkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoaHR0cGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICU+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgICAgIDwvaGVhZD4KLSAgICAgICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICA8L2JvZHk+Ci0gICAgICAgIDwvaHRtbD4KLSAgICAgIDwlCi0gICAgfQotICB9Ci19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWNjOWU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VuLm1pc2MuQkFTRTY0RGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbiBhY3Rpb24gPSBuZXcgSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIAotaWYgKGFjdGlvbi53YXNTYXZlQXNTZWxlY3RlZCgpKQotewotICAvLyB3cml0ZSB0byBmaWxlIHN5c3RlbQotICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gIHJlc3BvbnNlLnNldEhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbiIsImF0dGFjaG1lbnQ7ZmlsZW5hbWU9IithY3Rpb24uZ2V0RGVmYXVsdFNhdmVBc0ZpbGVOYW1lKCkpOwotICBhY3Rpb24ud3JpdGVTb3VyY2VDb250ZW50KHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsgICAgCi19Ci1lbHNlCi17Ci0gIGlmICghaW5wdXRzVmFsaWQpCi0gIHsKLSAgJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgICA8aGVhZD4KLSAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgPC9oZWFkPgotICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICA8L3NjcmlwdD4KLSAgICAgIDwvYm9keT4KLSAgICA8L2h0bWw+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICAgaWYgKGFjdGlvbi53YXNOZXdGaWxlU2VsZWN0ZWQoKSkKLSAgICB7ICAgICAKLSAgJT4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgICAgICA8aGVhZD4KLSAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgPC9oZWFkPgotICAgICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwvYm9keT4KLSAgICAgIDwvaHRtbD4KLSAgICA8JSAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBodHRwQmFzaWNBdXRoRGF0YSA9IHJlcXVlc3QuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfQVVUSCk7Ci0gICAgICBpZiAoaHR0cEJhc2ljQXV0aERhdGEgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoRGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGludCBiYXNpY0luZGV4ID0gaHR0cEJhc2ljQXV0aERhdGEuaW5kZXhPZihIVFRQVHJhbnNwb3J0LkJBU0lDKTsKLSAgICAgICAgaWYgKGJhc2ljSW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBCQVNFNjREZWNvZGVyIGRlY29kZXIgPSBuZXcgQkFTRTY0RGVjb2RlcigpOwotICAgICAgICAgIGh0dHBCYXNpY0F1dGhEYXRhID0gbmV3IFN0cmluZyhkZWNvZGVyLmRlY29kZUJ1ZmZlcihodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoYmFzaWNJbmRleCArIEhUVFBUcmFuc3BvcnQuQkFTSUMubGVuZ3RoKCkgKyAxKSkpOwotICAgICAgICAgIGludCBjb2xvbkluZGV4ID0gaHR0cEJhc2ljQXV0aERhdGEuaW5kZXhPZihIVFRQVHJhbnNwb3J0LkNPTE9OKTsKLSAgICAgICAgICBpZiAoY29sb25JbmRleCAhPSAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhY3Rpb24uYWRkUHJvcGVydHkoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUsIGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KSk7Ci0gICAgICAgICAgICBhY3Rpb24uYWRkUHJvcGVydHkoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQsIGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgaHR0cEJhc2ljQXV0aERhdGEubGVuZ3RoKCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgICU+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgICAgIDwvaGVhZD4KLSAgICAgICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgPC9odG1sPgotPCUKLSAgICAgIH0KLSAgICAgIGNhdGNoIChIVFRQVHJhbnNwb3J0RXhjZXB0aW9uIGh0dHBlKQotICAgICAgewotICAgICAgICBpbnQgY29kZSA9IGh0dHBlLmdldFN0YXR1c0NvZGUoKTsKLSAgICAgICAgaWYgKGNvZGUgPT0gSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpCi0gICAgICAgIHsKLSAgICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoY29kZSk7Ci0gICAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgsIFN0cmluZy52YWx1ZU9mKDApKTsKLSAgICAgICAgICBTdHJpbmcgd3d3QXV0aERhdGEgPSBodHRwZS5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSC50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICBpZiAod3d3QXV0aERhdGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHd3d0F1dGhEYXRhID0gaHR0cGUuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgpOwotICAgICAgICAgIGlmICh3d3dBdXRoRGF0YSA9PSBudWxsKQotICAgICAgICAgICAgd3d3QXV0aERhdGEgPSBIVFRQVHJhbnNwb3J0LkJBU0lDOwotICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRILCB3d3dBdXRoRGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKFN0cmluZy52YWx1ZU9mKGNvZGUpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShodHRwZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICU+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgICAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgICAgIDwvaGVhZD4KLSAgICAgICAgICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgICAgPC9ib2R5PgotICAgICAgICAgIDwvaHRtbD4KLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmZlMjU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBPcGVuV1NETEFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBpZiAoIWlucHV0c1ZhbGlkKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgd3NkbE5hdmlnYXRvckNvbnRlbnQubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci0gICAgfQotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiZWE1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5SZWZyZXNoV1NETEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5DbGVhcldTRExBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi1pZiAoY29udHJvbGxlci5nZXRTZXNzaW9uSWQoKSA9PSBudWxsKSB7Ci0lPgotCi0gPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0JICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnQgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiJdOwotCQlwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiaHR0cDovLzwlPXJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpJT46PCU9cmVxdWVzdC5nZXRTZXJ2ZXJQb3J0KCklPjwlPXJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSU+L2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcCI7Ci0gPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgkKLQotIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gPC9zY3JpcHQ+Ci0gPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSA8JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIFJlZnJlc2hXU0RMQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoV1NETEFjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBUaGUgYWN0aW9uIG1heSBiZSBleGVjdXRlZCB2aWEgcHJvZ3JhbSBsaW5rLgotICBib29sZWFuIHBhcmFtc1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgaWYgKHBhcmFtc1ZhbGlkKSB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHdzZGxOb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAKLSAgICAvLyBSdW4gdGhlIGFjdGlvbi4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIAotICAgIGlmIChhY3Rpb25SZXN1bHQpIHsKLSAJJT4KLQkgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgCWlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgCXdzZGxOYXZpZ2F0b3JDb250ZW50LmxvY2F0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAJd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgCXdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAJfQotICAgIAllbHNlIHsKLSAgICAgIAlwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci0gICAgCX0KLSAgCTwvc2NyaXB0PgotICAgPCUKLSAgIH0KLSAgIGVsc2UgewotICAgJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAJaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9XU0RMX05PREUiLCB3c2RsTm9kZS5nZXROb2RlTmFtZSgpKSklPiIpKQotICAgICAgCXBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyV1NETEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJRCkpKSU+IjsKLSAgICAJZWxzZSB7Ci0gICAgICAJd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgCXdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAJfQotICAJPC9zY3JpcHQ+Ci0gICA8JQotICB9Ci0gfQotJT4KLTwlCi19Ci0lPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNzY0NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBDcmVhdGUgdGhlIGFjdGlvbi4KLSAgIFJlc2l6ZVdTRExGcmFtZXNBY3Rpb24gYWN0aW9uID0gbmV3IFJlc2l6ZVdTRExGcmFtZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLSAgIC8vIFBvcHVsYXRlIHRoZSBhY3Rpb24gd2l0aCB0aGUgcmVxdWVzdCBwcm9wZXJ0aWVzLgotICAgYm9vbGVhbiByZXN1bHQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgCi0gICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsgIAotICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LnNldEF0dHJpYnV0ZSgiY29scyIsIjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Iik7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0LnNldEF0dHJpYnV0ZSgicm93cyIsIjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIpOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2Q0NGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLWlmIChjb250cm9sbGVyLmdldFNlc3Npb25JZCgpID09IG51bGwpIHsKLSU+Ci0KLSA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLQkgICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudCA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfQ09OVEVOVCU+Il07Ci0JCXBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICJodHRwOi8vPCU9cmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCklPjo8JT1yZXF1ZXN0LmdldFNlcnZlclBvcnQoKSU+PCU9cmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpJT4vYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwIjsKLSA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDc2NDE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMWM3NjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uCi1Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uIGFjdGlvbiA9IG5ldyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICAKLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFJlYWRPbmx5RnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hSZWFkT25seUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQ3NjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFJlYWRPbmx5RnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotaWYgKHdzZGxQZXJzcGVjdGl2ZS5nZXRTdGF0dXNDb250ZW50VHlwZSgpID09IFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfRk9STSkKLSAgd3NkbFBlcnNwZWN0aXZlLnNldFN0YXR1c0NvbnRlbnRUeXBlKFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFKTsKLWVsc2UKLSAgd3NkbFBlcnNwZWN0aXZlLnNldFN0YXR1c0NvbnRlbnRUeXBlKFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfRk9STSk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hXU0RMRGV0YWlsc1ZpZXdzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFdTRExEZXRhaWxzVmlld3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTdhZGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFdTRExEZXRhaWxzVmlld3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETERldGFpbHNUb29sIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSB3c2RsTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotV1NETERldGFpbHNUb29sIHdzZGxEZXRhaWxzVG9vbCA9IChXU0RMRGV0YWlsc1Rvb2wpd3NkbE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLXdzZGxEZXRhaWxzVG9vbC50b2dnbGVWaWV3SWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMmQ4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25BYm9ydEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2wiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotaWYgKGludm9rZVdTRExPcGVyYXRpb25Ub29sLmdldEZyYWdtZW50Vmlld0lEKCkuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNKSkKLSAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnRWaWV3SUQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpOwotZWxzZQotICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDVhYzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uIGFjdGlvbiA9IG5ldyBTeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24oY29udHJvbGxlcik7Ci1ib29sZWFuIHBhcmFtVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotU3RyaW5nIHZpZXdJRCA9IChTdHJpbmcpYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19JRCk7Ci1ib29sZWFuIHNvdXJjZVRvRm9ybSA9IHZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0pOwotaWYgKHNvdXJjZVRvRm9ybSkgewotICBpZiAocGFyYW1WYWxpZCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmICghY29uZmlybSgiPCU9Y29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fU1lOQ19WSUVXUyIpJT4iKSkKLSAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25BYm9ydEpTUC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci0gIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmICghY29uZmlybSgiPCU9Y29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fU1lOQ19WSUVXU19ERVNQSVRFX0lOVkFMSURfU09VUkNFX0NPTlRFTlQiKSU+IikpCi0gICAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uQWJvcnRKU1AuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTU4NmQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1RvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYxNmMyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotaWYgKGNvbnRyb2xsZXIuZ2V0U2Vzc2lvbklkKCkgPT0gbnVsbCkgewotJT4KLQotIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50ID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iXTsKLQkJcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gImh0dHA6Ly88JT1yZXF1ZXN0LmdldFNlcnZlck5hbWUoKSU+OjwlPXJlcXVlc3QuZ2V0U2VydmVyUG9ydCgpJT48JT1yZXF1ZXN0LmdldENvbnRleHRQYXRoKCklPi9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AiOwotIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbiBhY3Rpb24gPSBuZXcgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24oY29udHJvbGxlcik7Ci0gIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwNjUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIiU+Ci0KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZjQ4MDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij4KLTwlCi1FbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotd2hpbGUgKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9cGFyYW1OYW1lJT4iIHZhbHVlPSI8JT1wYXJhbVZhbHVlc1tpXSU+Ij4KLTwlCi0gIH0KLX0KLSU+Ci08L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci0KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLWlmIChhY3Rpb24uZmF2b3JpdGVFeGlzdHMoKSkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9PVkVSV1JJVEVfRkFWT1JJVEVTIikpJT4iKSkKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGYwMmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIzODJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4NzYwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IFdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzRm9ybVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhZjQyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzRm9ybVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotbm9kZUlELmRlbGV0ZSgwLCBub2RlSUQubGVuZ3RoKCkpOwotbm9kZUlELmFwcGVuZChzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpOwotSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7Ci0KLWlmIChpdC5oYXNOZXh0KCkpIHsKLQlTdHJpbmcgaGVhZGVyRGl2SWQgPSAiSGVhZGVyIjsKLQlTdHJpbmcgaGVhZGVySW1nSWQgPSAieEhlYWRlciI7Ci0gICAgJT4KLQk8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCSAgPHRyPgotCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWhlYWRlckRpdklkJT4nLCc8JT1oZWFkZXJJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9aGVhZGVySW1nSWQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSEVBREVSIiklPjwvc3Ryb25nPjwvdGQ+Ci0JICA8L3RyPgotCTwvdGFibGU+Ci0JCi0JPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLQkKLQk8ZGl2IGlkPSI8JT1oZWFkZXJEaXZJZCU+Ij4KLQk8JQotCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7Ci0JICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIpOwkgICAKLQkgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLQkgIGZyYWdJRC5hcHBlbmQoZnJhZy5nZXRJRCgpKTsKLQkgICU+Ci0JICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLQkgIDwlICAKLQl9Ci0JJT4KLQk8L2Rpdj4KLSAgICA8JSAgICAKLX0KLQotYm9vbGVhbiBoYXNJbnB1dCA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJoYXNJbnB1dCIpKTsKLVN0cmluZyBib2R5RGl2SWQgPSAiQm9keSI7Ci0KLWlmIChoYXNJbnB1dCkgewotCVN0cmluZyBib2R5SW1nSWQgPSAieEJvZHkiOwotICAgICU+Ci0JPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1ib2R5RGl2SWQlPicsJzwlPWJvZHlJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9Ym9keUltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JPRFkiKSU+PC9zdHJvbmc+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4gCi0JCi0JPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLSAgICA8JQotfQotJT4KLQotPGRpdiBpZD0iPCU9Ym9keURpdklkJT4iIGNsYXNzPSJmcmFnYXJlYSI+Ci08JQotaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoZnJhZy5nZXRJRCgpKTsKLSAgJT4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gIDwlCi19Ci0lPgotPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c1NvYXBWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNTb2FwVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWVlODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c1NvYXBWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICogMjAwNjA3MjYgICAxNDQ4MjQgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkod3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICBJU09BUFRyYW5zcG9ydCBzb2FwVHJhbnNwb3J0ID0gb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCk7Ci0gICBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UgPSBzb2FwVHJhbnNwb3J0Lm5ld01lc3NhZ2Uob3BlckVsZW1lbnQuZ2V0TWVzc2FnZUNvbnRleHQoKSk7Ci0gICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVF9UTVAsIHNvYXBNZXNzYWdlKTsKLSAgIAotICAgSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZShzb2FwTWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpKTsgICAgICAKLSAgIAotICAgU3RyaW5nIGNhY2hlZEhlYWRlckNvbnRlbnQgPSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX0hFQURFUik7Ci0gICBTdHJpbmcgY2FjaGVkQm9keUNvbnRlbnQgPSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UKTsKLSAgIAotICAgLy8gaWYgZWl0aGVyIGhlYWRlciBvciBib2R5IGhhcyBiZWVuIGNhY2hlZCwgbmVlZCB0byBlbnN1cmUgbmFtZXNwYWNlIHRhYmxlIGlzIHVwZGF0ZWQKLSAgIC8vIGZyb20gdGhlIGNhY2hlZCBjb3B5Ci0gICBpZiAoY2FjaGVkSGVhZGVyQ29udGVudCAhPSBudWxsIHx8IGNhY2hlZEJvZHlDb250ZW50ICE9IG51bGwpIHsKLQkgICBpZiAoU09BUE1lc3NhZ2VVdGlscy5kZWNvZGVOYW1lc3BhY2VUYWJsZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQpKQotCQkgICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSk7Ci0gICB9Ci0JICAgICAgICAgICAgCi0gICBTdHJpbmcgaGVhZGVyQ29udGVudDsKLSAgIFN0cmluZyBib2R5Q29udGVudDsKLSAgIAotICAgaWYgKGNhY2hlZEhlYWRlckNvbnRlbnQgIT0gbnVsbCkKLSAgICAgICBoZWFkZXJDb250ZW50ID0gY2FjaGVkSGVhZGVyQ29udGVudDsKLSAgIGVsc2UgewotCSAgIHRyeSB7Ci0JICAgICAgIFNPQVBNZXNzYWdlVXRpbHMuc2V0SGVhZGVyQ29udGVudEZyb21Nb2RlbChzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsKLQkgICAgICAgCi0JICAgICAgIC8vIGVuc3VyZSBuYW1lc3BhY2UgdGFibGUgdXBkYXRlZCBpbiBtZXNzYWdlIGJlZm9yZSBzZXJpYWxpemUgb3BlcmF0aW9uCi0JICAgICAgIHNvYXBNZXNzYWdlLnNldE5hbWVzcGFjZVRhYmxlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKTsKLQkgICAgICAgaGVhZGVyQ29udGVudCA9IHNvYXBUcmFuc3BvcnQubmV3U2VyaWFsaXplcigpLnNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQsIHNvYXBNZXNzYWdlKTsKLQkgICB9Ci0JICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgIGhlYWRlckNvbnRlbnQgPSAiIjsKLQkgICB9Ci0gICB9Ci0gICAKLSAgIGlmIChjYWNoZWRCb2R5Q29udGVudCAhPSBudWxsKQotCSAgIGJvZHlDb250ZW50ID0gY2FjaGVkQm9keUNvbnRlbnQ7Ci0gICBlbHNlIHsKLQkgICB0cnkgewotCSAgICAgICBTT0FQTWVzc2FnZVV0aWxzLnNldEJvZHlDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotCSAgICAgICAKLQkgICAgICAgLy8gZW5zdXJlIG5hbWVzcGFjZSB0YWJsZSB1cGRhdGVkIGluIG1lc3NhZ2UgYmVmb3JlIHNlcmlhbGl6ZSBvcGVyYXRpb24KLQkgICAgICAgc29hcE1lc3NhZ2Uuc2V0TmFtZXNwYWNlVGFibGUoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUpOwotCSAgICAgICBib2R5Q29udGVudCA9IHNvYXBUcmFuc3BvcnQubmV3U2VyaWFsaXplcigpLnNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuQk9EWV9DT05URU5ULCBzb2FwTWVzc2FnZSk7Ci0JICAgfQotCSAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgICBib2R5Q29udGVudCA9ICIiOwotCSAgIH0KLSAgIH0gICAgICAKLSAgIAotICAgLy8gY2FjaGUgdGhlIG5hbWVzcGFjZSB0YWJsZQotICAgRW51bWVyYXRpb24gZW5tID0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUua2V5cygpOwotICAgd2hpbGUgKGVubS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgIHsKLSAgICAgU3RyaW5nIHVyaSA9IChTdHJpbmcpZW5tLm5leHRFbGVtZW50KCk7Ci0gICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmdldCh1cmkpOwotICAgICBTdHJpbmcgdmFsdWUgPSBTb2FwSGVscGVyLmVuY29kZU5hbWVzcGFjZURlY2xhcmF0aW9uKHByZWZpeCwgdXJpKTsKLSAgICAgJT4KLSAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFJT4iIHZhbHVlPSI8JT12YWx1ZSU+Ij4KLSAgICAgPCUKLSAgIH0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci08JQotCUVsZW1lbnQgc29hcEVudmVsb3BlRWxlbWVudCA9IHNvYXBNZXNzYWdlLmdldEVudmVsb3BlKGZhbHNlKTsKLSAgICBTdHJpbmdCdWZmZXIgaGVhZGVyID0gbmV3IFN0cmluZ0J1ZmZlcigiPCIpOwotICAgIGhlYWRlci5hcHBlbmQoc29hcEVudmVsb3BlRWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgIE5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gc29hcEVudmVsb3BlRWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IG51bWJlck9mQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0gICAgaWYgKG51bWJlck9mQXR0cmlidXRlcyA9PSAwKQotICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgZm9yIChpbnQgaT0wO2k8bnVtYmVyT2ZBdHRyaWJ1dGVzO2krKykKLSAgICB7Ci0gICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgTm9kZSBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLSAgICAgIGhlYWRlci5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZVZhbHVlKCkpLmFwcGVuZCgnXCInKTsKLSAgICAgIGlmIChpID09IG51bWJlck9mQXR0cmlidXRlcy0xKQotICAgICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICB9Ci0gICAgCi0gICAgRWxlbWVudCBzb2FwSGVhZGVyRWxlbWVudCA9IHNvYXBNZXNzYWdlLmdldEhlYWRlcihmYWxzZSk7Ci0gICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICBoZWFkZXIuYXBwZW5kKCc8JykuYXBwZW5kKHNvYXBIZWFkZXJFbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgYXR0cmlidXRlcyA9IHNvYXBIZWFkZXJFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBudW1iZXJPZkF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotICAgIGlmIChudW1iZXJPZkF0dHJpYnV0ZXMgPT0gMCkKLSAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgewotICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICBoZWFkZXIuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVWYWx1ZSgpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICBpZiAoaSA9PSBudW1iZXJPZkF0dHJpYnV0ZXMtMSkKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICB9Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0iMTYiPgotICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4gICAgCi0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRV9IRUFERVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU09BUF9GSUxFIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmRvQWN0aW9uKCc8JT1XU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUiU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJCVVRUT05fTEFCRUxfTE9BRCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmRvQWN0aW9uKCc8JT1XU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVNfSEVBREVSJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkJVVFRPTl9MQUJFTF9TQVZFX0FTIiklPjwvYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9IjE2Ij4KLSAgICAgIDxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHRleHRhcmVhIGlkPSJzb2FwX2hlYWRlcl9jb250ZW50IiBuYW1lPSI8JT1GcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9IRUFERVIlPiIgY2xhc3M9InRleHRhcmVhZW50ZXIiPjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoaGVhZGVyQ29udGVudCklPjwvdGV4dGFyZWE+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgaGVhZGVyLmFwcGVuZCgiPC8iKS5hcHBlbmQoc29hcEhlYWRlckVsZW1lbnQuZ2V0VGFnTmFtZSgpKS5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtZW50ID0gc29hcE1lc3NhZ2UuZ2V0Qm9keShmYWxzZSk7Ci0gICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICBoZWFkZXIuYXBwZW5kKCc8JykuYXBwZW5kKHNvYXBCb2R5RWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgIGF0dHJpYnV0ZXMgPSBzb2FwQm9keUVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgIG51bWJlck9mQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0gICAgaWYgKG51bWJlck9mQXR0cmlidXRlcyA9PSAwKQotICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9OD4KLSAgICAgIDxpbWcgd2lkdGg9OCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgZm9yIChpbnQgaT0wO2k8bnVtYmVyT2ZBdHRyaWJ1dGVzO2krKykKLSAgICB7Ci0gICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgTm9kZSBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLSAgICAgIGhlYWRlci5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZVZhbHVlKCkpLmFwcGVuZCgnXCInKTsKLSAgICAgIGlmIChpID09IG51bWJlck9mQXR0cmlidXRlcy0xKQotICAgICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIH0KLQotICAgIEVsZW1lbnQgd3JhcHBlckVsZW1lbnQgPSBudWxsOwotICAgIGlmICghb3BlckVsZW1lbnQuaXNEb2N1bWVudFN0eWxlKCkpCi0gICAgeyAgICAgIAotICAgICAgLy8gR2VuZXJhdGUgYW4gUlBDIHN0eWxlIHdyYXBwZXIgZWxlbWVudC4gICAgICAKLSAgICAgIHdyYXBwZXJFbGVtZW50ID0gKEVsZW1lbnQpIHNvYXBCb2R5RWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgaGVhZGVyLmFwcGVuZCgnPCcpLmFwcGVuZCh3cmFwcGVyRWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgICAgYXR0cmlidXRlcyA9IHdyYXBwZXJFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIG51bWJlck9mQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0gICAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgICBmb3IgKGludCBpPTA7aTxudW1iZXJPZkF0dHJpYnV0ZXM7aSsrKQotICAgICAgewotICAgICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgICBOb2RlIGF0dHJOb2RlID0gYXR0cmlidXRlcy5pdGVtKGkpOwotICAgICAgICBoZWFkZXIuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVWYWx1ZSgpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICAgIGlmIChpID09IG51bWJlck9mQXR0cmlidXRlcy0xKQotICAgICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTI0PgotICAgICAgPGltZyB3aWR0aD0yNCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgICB9Ci0gICAgfQotCi0gICAgaW50IHNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGggPSAxNjsKLSAgICBpZiAod3JhcHBlckVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGggKz0gODsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTwlPXNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGglPj4KLSAgICAgIDxpbWcgd2lkdGg9PCU9c291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCU+IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4gICAgCi0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRSU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TT0FQX0ZJTEUiKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9BY3Rpb24oJzwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEUlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQlVUVE9OX0xBQkVMX0xPQUQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9TQVZFX0FTJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkJVVFRPTl9MQUJFTF9TQVZFX0FTIiklPjwvYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9PCU9c291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCU+PgotICAgICAgPGltZyB3aWR0aD08JT1zb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoJT4gaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB3aWR0aD0iMTAwJSI+Ci0gICAgICA8dGV4dGFyZWEgaWQ9InNvYXBfYm9keV9jb250ZW50IiBuYW1lPSI8JT1GcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVCU+IiBjbGFzcz0iYmlndGV4dGFyZWFlbnRlciI+PCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChib2R5Q29udGVudCklPjwvdGV4dGFyZWE+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgaWYgKHdyYXBwZXJFbGVtZW50ICE9IG51bGwpCi0gICB7Ci0gICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgIGhlYWRlci5hcHBlbmQoIjwvIikuYXBwZW5kKHdyYXBwZXJFbGVtZW50LmdldFRhZ05hbWUoKSkuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgfQotCi0gICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgaGVhZGVyLmFwcGVuZCgiPC8iKS5hcHBlbmQoc29hcEJvZHlFbGVtZW50LmdldFRhZ05hbWUoKSkuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTEgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICBoZWFkZXIuYXBwZW5kKCI8LyIpLmFwcGVuZChzb2FwRW52ZWxvcGVFbGVtZW50LmdldFRhZ05hbWUoKSkuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTEgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ludm9rZVdTRExPcGVyYXRpb25Gb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2NzZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTEyICAgMTIxMjEwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMgCi0gKiAyMDA4MDgyNSAgIDE1ODM2NiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgU3RyaW5nIGZyYWdtZW50Vmlld0lEID0gaW52b2tlV1NETE9wZXJhdGlvblRvb2wuZ2V0RnJhZ21lbnRWaWV3SUQoKTsKLSAgaW50IG9wZXJhdGlvblR5cGUgPSBvcGVyRWxlbWVudC5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gIFN0cmluZyBpbnZva2VXU0RMT3BlcmF0aW9uVVJMID0gcmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGludm9rZVdTRExPcGVyYXRpb25Ub29sLmdldEZvcm1BY3Rpb25MaW5rKG9wZXJhdGlvblR5cGUsZnJhZ21lbnRWaWV3SUQpKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTlZPS0VfV1NETF9PUEVSQVRJT04iKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy9mcmFnbWVudHRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGRvQWN0aW9uKGFjdGlvbikKLSAgewotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBmb3JtLjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04lPi52YWx1ZSA9IGFjdGlvbjsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICBmb3JtLjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04lPi52YWx1ZSA9ICI8JT1pbnZva2VXU0RMT3BlcmF0aW9uVVJMJT4iOwotICAgICAgcmVzZXRTdWJtaXNzaW9uKCk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBjbG9zZUNoaWxkV2luZG93cygpCi0gIHsKLSAgICBjbG9zZVhTREluZm9EaWFsb2coKTsKLSAgICBjbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VDaGlsZFdpbmRvd3MoKSI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1pbnZva2VXU0RMT3BlcmF0aW9uVVJMJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04lPiIgdmFsdWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fRk9STSU+Ij4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25faGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0lOVk9LRV9XU0RMX09QRVJBVElPTiIpOwotICAgIGlmIChvcGVyYXRpb25UeXBlID09IFdTRExPcGVyYXRpb25FbGVtZW50Lk9QRVJBVElPTl9UWVBFX1NPQVApCi0gICAgewotICAgICU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0aXRsZUltYWdlUGF0aCkpJT4iIGFsdD0iIj4KLSAgICAgIDxzdHJvbmc+PCU9dGl0bGUlPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIHdpZHRoPSIqIj4mbmJzcDs8L3RkPgotICAgIDx0ZCBhbGlnbj0icmlnaHQiIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgIGlmIChmcmFnbWVudFZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpKQotICAgewotJT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3luY2hyb25pemVGcmFnbWVudFZpZXdzKCc8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSU+JykiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19GT1JNX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZPUk0iKSU+PC9hPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN5bmNocm9uaXplRnJhZ21lbnRWaWV3cygnPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UlPicpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1NPVVJDRSIpJT48L2E+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCBjb2xzcGFuPTM+PGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0KLSAgICAgICAgPCUgICAgICAgICAgIAotCQkvL2hlcmUgd2UgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhpcyBvcGVyYXRpb24KLQkJYm9vbGVhbiBoYXNJbnB1dCA9IHRydWU7Ci0JCXNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOyAgCi0JCUl0ZXJhdG9yIGl0ZXIgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsgICAgICAgIAotCQlTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJFbGVtZW50LmdldE5hbWUoKTsKLQotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KWl0ZXIubmV4dCgpOyAKLQkJCUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7ICAKLQkJCW9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbiBkZWYgPSBmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkvL3dlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24ncyBpbnB1dCBtZXNzYWdlCi0JCQlpZiAoZGVmID09IG51bGwpCi0JCQl7Ci0JCQkJLy90aGlzIGlzIHRoZSBwYXR0ZXJuIDxlbGVtZW50IG5hbWU9ImZvbyI+PC9lbGVtZW50PgotCQkJCWhhc0lucHV0ID0gZmFsc2U7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb3JnLnczYy5kb20uRWxlbWVudCBlbGVtZW50ID0gZGVmLmdldEVsZW1lbnQoKTsJCQkJCi0JCQkJaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKCJjb21wbGV4VHlwZSIpICYmICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkKLQkJCQl7CS8vdGhpcyBpcyB0aGUgcGF0dGVybiAgPGVsZW1lbnQgbmFtZT0iZm9vIj48Y29tcGxleFR5cGUvPjwvZWxlbWVudD4KLQkJCQkJLy90aGVyZSBjb3VsZCBiZSBvdGhlciBwYXR0ZXJucyB3aXRoIG5vIGlucHV0IGJ1dCB0aGV5IGFyZSB1bmNvbW1vbgotCQkJCQloYXNJbnB1dCA9IGZhbHNlOwotCQkJCX0KLQkJCX0gCi0gICAgICAJfQotCQlpZiAoaGFzSW5wdXQgfHwgIW9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXNFbXB0eSgpKQotCQl7Ci0JCQlvdXQucHJpbnQod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0MiLCBvcGVyYXRpb25OYW1lKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlvdXQucHJpbnQod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0NfTk9fSU5QVVQiLCBvcGVyYXRpb25OYW1lICkpOwotCQl9Ci0gICAgICAgICU+Ci0gICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJrZXlsaW5lZmllbGRzZXQiPgotICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRU5EX1BPSU5UUyIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC9sZWdlbmQ+Ci0gICAgICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9IjwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4iIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudClvcGVyRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGVuZFBvaW50cyA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3VyckVuZFBvaW50ID0gaW52b2tlV1NETE9wZXJhdGlvblRvb2wuZ2V0RW5kUG9pbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1lbmRQb2ludHNbaV0lPiIgPCVpZiAoZW5kUG9pbnRzW2ldLmVxdWFscyhjdXJyRW5kUG9pbnQpKSB7JT5zZWxlY3RlZDwlfSU+PjwlPWVuZFBvaW50c1tpXSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDwvZmllbGRzZXQ+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPCUKLSAgICBpZiAoZnJhZ21lbnRWaWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKSkKLSAgICB7Ci0gICAgJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9GcmFnbWVudHNTb2FwVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcCIgZmx1c2g9InRydWUiPgotCTxqc3A6cGFyYW0gbmFtZT0iaGFzSW5wdXQiIHZhbHVlPSI8JT1oYXNJbnB1dCU+Ii8+Ci08L2pzcDppbmNsdWRlPgotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9PcGVuV1NETEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL09wZW5XU0RMRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZTM2ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL09wZW5XU0RMRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKXdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9PUEVOX1dTREwiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZVdTRExCcm93c2VyKCkiPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NETCIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGU+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PUEVOX1dTRExfREVTQyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4gICAgICAgIAotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpKSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBTdHJpbmcgd3NkbFVybCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICAgICAgICAgICAgaWYgKHdzZGxVcmwgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB3c2RsVXJsID0gIiI7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcignY29udGVudGJvcmRlcicsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzZGxVcmwpJT4iIHNpemU9IjUwIiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBjbG9zZVdTRExCcm93c2VyKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U1MmY0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGZvcm1BY3Rpb24udG9TdHJpbmcoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4KLSAgPGlucHV0IG5hbWU9IjwlPUFjdGlvbklucHV0cy5GUkFNRV9OQU1FJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZvcm1GcmFtZU5hbWUlPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Ij4KLTwvZm9ybT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiMzg4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNGb3JtVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA3MDUwNyAgIDE4NTYwMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIHN0YXR1cyBwYW5lJ3MgImhlYWRlciIgdHdpc3RpZSBzaG91bGQgbm90IGFwcGVhciBmb3IgcmVzcG9uc2VzIHdpdGhvdXQgaGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnBhcnNlcnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotd3NkbFBlcnNwZWN0aXZlLnNldFN0YXR1c0NvbnRlbnRUeXBlKFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfRk9STSk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE9wZXJhdGlvbk5vZGUoKTsKLW5vZGVJRC5kZWxldGUoMCwgbm9kZUlELmxlbmd0aCgpKTsKLW5vZGVJRC5hcHBlbmQob3Blck5vZGUuZ2V0Tm9kZUlkKCkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLU9wZXJhdGlvbiBvcGVyID0gb3BlckVsZW1lbnQuZ2V0T3BlcmF0aW9uKCk7Ci1pZiAob3Blci5nZXRPdXRwdXQoKSA9PSBudWxsKQotewotJT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05PVEhJTkdfVE9fRElTUExBWV9JTl9GT1JNX1ZJRVciKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZQotewotICBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UgPSAoSVNPQVBNZXNzYWdlKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVTUE9OU0UpOwotICBFbGVtZW50W10gaGVhZGVyQ29udGVudCA9IHNvYXBNZXNzYWdlLmdldEhlYWRlckNvbnRlbnQoKTs7Ci0gIEVsZW1lbnRbXSBib2R5Q29udGVudCAgID0gc29hcE1lc3NhZ2UuZ2V0Qm9keUNvbnRlbnQoKTsKLSAgCi0gIGJvb2xlYW4gY2FjaGVkID0gKChCb29sZWFuKW9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETEFjdGlvbklucHV0cy5TT0FQX1JFU1BPTlNFX0NBQ0hFRCkpLmJvb2xlYW5WYWx1ZSgpOwotCi0gIGlmIChzb2FwTWVzc2FnZS5nZXRCb2R5KGZhbHNlKSA9PSBudWxsKSAvLyBib2R5IGlzIG1hbmRhdG9yeQotICB7Ci0gICU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPQVBfUkVTUE9OU0VfRkFJTEVEX1ZBTElEQVRJT05fSU5fRk9STV9WSUVXIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotCWlmIChoZWFkZXJDb250ZW50ICE9IG51bGwgJiYgaGVhZGVyQ29udGVudC5sZW5ndGggPiAwKSB7CQkKLQotCQlTdHJpbmcgaGVhZGVyRGl2SWQgPSAiSGVhZGVyIjsKLQkJU3RyaW5nIGhlYWRlckltZ0lkID0gInhIZWFkZXIiOwkJCi0JICAgICU+Ci0JICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JCSAgPHRyPgotCQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1oZWFkZXJEaXZJZCU+JywnPCU9aGVhZGVySW1nSWQlPicpIj48aW1nIG5hbWU9IjwlPWhlYWRlckltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkJICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9IRUFERVIiKSU+PC9zdHJvbmc+PC90ZD4KLQkJICA8L3RyPgotCQk8L3RhYmxlPgotCQkKLQkJPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkJICA8dHI+Ci0JCSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotCQkgIDwvdHI+Ci0JCTwvdGFibGU+Ci0JCQotCQk8ZGl2IGlkPSI8JT1oZWFkZXJEaXZJZCU+IiBjbGFzcz0iZnJhZ2FyZWEiPgotCQk8JQotCQlib29sZWFuIGhhc1NPQVBIZWFkZXJzID0gZmFsc2U7CQkKLQkJSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycyhmYWxzZSkuaXRlcmF0b3IoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSAmJiBzdGFydCA8IGhlYWRlckNvbnRlbnQubGVuZ3RoKSB7Ci0JCQlTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOwkJCQkJCQkJCQotCQkJSVhTREZyYWdtZW50IGZyYWdtZW50ID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlciwgZmFsc2UpOwotCQkJCi0JCQlpZiAoIWNhY2hlZCkgewkJCQkKLQkJCQlpbnQgcG9zID0gU09BUE1lc3NhZ2VVdGlscy5maW5kRmlyc3RNYXRjaGluZ0VsZW1lbnQoCi0JCQkJCXNvYXBIZWFkZXIuZ2V0RVBhcnQoKSwKLQkJCQkJaGVhZGVyQ29udGVudCwKLQkJCQkJc29hcE1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSwKLQkJCQkJZnJhZ21lbnQuZ2V0TmFtZSgpLAotCQkJCQlzdGFydCk7Ci0JCQkJCi0JCQkJaWYgKHBvcyA9PSAtMSkKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJRWxlbWVudCBlbGVtZW50ID0gaGVhZGVyQ29udGVudFtwb3NdOwotCQkJCXN0YXJ0ID0gcG9zICsgMTsKLQkJCQkKLQkJCQlpZiAoIWZyYWdtZW50LnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhuZXcgRWxlbWVudFtdIHsgZWxlbWVudCB9KSkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0JCQllbHNlIGlmICghZnJhZ21lbnQudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLQkJCQljb250aW51ZTsKLQkJCQotCQkJaGFzU09BUEhlYWRlcnMgPSB0cnVlOwkJCQkKLQkJCWZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLQkJCWZyYWdJRC5hcHBlbmQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0JCQklPgotCQkJPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWdtZW50LmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0JCQk8JSAgCi0JCX0JCQotCQlpZiAoIWhhc1NPQVBIZWFkZXJzKSB7Ci0JCQklPgotCQkJPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkJICAgICAgPHRyPgotCQkgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLQkJICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBTk5PVF9ESVNQTEFZX0hFQURFUl9JTl9GT1JNX1ZJRVciKSU+Ci0JCSAgICAgICAgPC90ZD4KLQkJICAgICAgPC90cj4KLQkJICAgIDwvdGFibGU+Ci0JCQk8JQotCQl9Ci0JCSU+Ci0JCTwvZGl2PgotCQk8JSAgIAotCX0KLQkJCi0JU3RyaW5nIGJvZHlEaXZJZCA9ICJCb2R5IjsKLQlTdHJpbmcgYm9keUltZ0lkID0gInhCb2R5IjsJICAJCQotCSU+CQkJCi0JPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1ib2R5RGl2SWQlPicsJzwlPWJvZHlJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9Ym9keUltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JPRFkiKSU+PC9zdHJvbmc+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4gCi0JCi0JPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLQkKLQk8ZGl2IGlkPSI8JT1ib2R5RGl2SWQlPiIgY2xhc3M9ImZyYWdhcmVhIj4KLQk8JQkKLQlib29sZWFuIGhhc1NPQVBCb2R5ID0gZmFsc2U7Ci0JaWYgKGJvZHlDb250ZW50ICE9IG51bGwgJiYgYm9keUNvbnRlbnQubGVuZ3RoID4gMCkgewkJCQkKLQkJCi0JICAgIE1hcCBwYXJ0c01hcCA9IG9wZXIuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCk7Ci0JICAgIEl0ZXJhdG9yIGl0ID0gcGFydHNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkgICAgSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMgPSBudWxsOwotCSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotCSAgICB7Ci0JICAgICAgSVhTREZyYWdtZW50IGZyYWdtZW50ID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQoKFBhcnQpaXQubmV4dCgpLCBmYWxzZSk7Ci0JICAgICAgaWYgKCFjYWNoZWQpCi0JICAgICAgewotCSAgICAgICAgaWYgKCFvcGVyRWxlbWVudC5pc1VzZUxpdGVyYWwoKSAmJiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50KSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgaWYgKHVyaVJlZmVyZW5jZXMgPT0gbnVsbCkKLQkgICAgICAgICAgICB1cmlSZWZlcmVuY2VzID0gU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LnBhcnNlVVJJUmVmZXJlbmNlcyhzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZSh0cnVlKSwgdHJ1ZSk7Ci0JICAgICAgICAgICgoSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudClmcmFnbWVudCkuc2V0VVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGlmICghZnJhZ21lbnQuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGJvZHlDb250ZW50KSkKLQkgICAgICAgIAljb250aW51ZTsKLQkgICAgICB9Ci0JICAgICAgZWxzZSBpZiAoIWZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0JCQljb250aW51ZTsKLQkJCQotCQkgIGhhc1NPQVBCb2R5ID0gdHJ1ZTsJCQkJCi0JICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotCSAgICAgIGZyYWdJRC5hcHBlbmQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0JICAgICAgJT4KLQkgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLQkgICAgICA8JQotCSAgICB9Ci0JICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETEFjdGlvbklucHV0cy5TT0FQX1JFU1BPTlNFX0NBQ0hFRCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCX0KLQkKLQlpZiAoc29hcE1lc3NhZ2UuZ2V0RmF1bHQoKSA9PSBudWxsICYmIChib2R5Q29udGVudCA9PSBudWxsIHx8IGJvZHlDb250ZW50Lmxlbmd0aCA9PSAwKSkgewotCQklPgotCQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCSAgICAgIDx0cj4KLQkgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLQkgICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQk9EWV9JU19FTVBUWSIpJT4KLQkgICAgICAgIDwvdGQ+Ci0JICAgICAgPC90cj4KLQkgICAgPC90YWJsZT4KLQkJPCUKLSAgICB9Ci0JZWxzZSBpZiAoIWhhc1NPQVBCb2R5KSB7Ci0JCSU+Ci0JCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICAgICAgPHRyPgotCSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotCSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQU5OT1RfRElTUExBWV9CT0RZX0lOX0ZPUk1fVklFVyIpJT4KLQkgICAgICAgIDwvdGQ+Ci0JICAgICAgPC90cj4KLQkgICAgPC90YWJsZT4KLQkJPCUKLQl9IAotICAgICU+Ci0gICAgPC9kaXY+Ci0gICAgPCUKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkzMWViZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNTb2FwVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDkgICAxMDMwNzIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDUxNSAgIDE0MDYwNyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci13c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRPcGVyYXRpb25Ob2RlKCk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotU3RyaW5nIHNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCA9ICJTT0FQUmVxdWVzdCI7Ci1TdHJpbmdCdWZmZXIgc29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLXNvYXBSZXF1ZXN0VHdpc3RJbWFnZU5hbWUuYXBwZW5kKHNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCk7Ci1TdHJpbmcgc29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCA9ICJTT0FQUmVzcG9uc2UiOwotU3RyaW5nQnVmZmVyIHNvYXBSZXNwb25zZVR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotc29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUuYXBwZW5kKHNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBzZWN0aW9uSWRzID0gWyI8JT1zb2FwUmVxdWVzdFRhYmxlQ29udGFpbmVySWQlPiIsIjwlPXNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQlPiJdOwotICBmdW5jdGlvbiB0b2dnbGVTT0FQRW52ZWxvcGUoc29hcEVudmVsb3BlVHlwZSx0d2lzdEltYWdlTmFtZSkKLSAgewotPCUKLSAgICAvLyBJZiBib3RoIGVudmVsb3BlcyBhcmUgZXhwYW5kZWQsIGVhY2ggc2hvdWxkIGhhdmUgNTAlIGhlaWdodC4gT3RoZXJ3aXNlLCB0aGUgcmVtYWluaW5nIGRpc3BsYXllZCBlbnZlbG9wZSBzaG91bGQgYmUgcmVzZXQgdG8gMTAwJSBoZWlnaHQuCi0lPgotICAgIHZhciBzb2FwU2VjdGlvbklkID0gc2VjdGlvbklkc1tzb2FwRW52ZWxvcGVUeXBlXTsKLSAgICB2YXIgc29hcFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzb2FwU2VjdGlvbklkKTsKLSAgICB2YXIgc29hcFNlY3Rpb25UYWJsZSA9IGdldFRhYmxlKHNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBvdGhlclNvYXBTZWN0aW9uSWQgPSBzZWN0aW9uSWRzWzEtc29hcEVudmVsb3BlVHlwZV07Ci0gICAgdmFyIG90aGVyU29hcFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdGhlclNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBvdGhlclNvYXBTZWN0aW9uVGFibGUgPSBnZXRUYWJsZShvdGhlclNvYXBTZWN0aW9uSWQpOwotICAgIGlmIChzb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICBpZiAob3RoZXJTb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgewotICAgICAgICBzb2FwU2VjdGlvblRhYmxlLmhlaWdodCA9ICI1MCUiOwotICAgICAgICBvdGhlclNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjUwJSI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjEwMCUiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKG90aGVyU29hcFNlY3Rpb24uc3R5bGUuZGlzcGxheSA9PSAiIikKLSAgICAgICAgb3RoZXJTb2FwU2VjdGlvblRhYmxlLmhlaWdodCA9ICIxMDAlIjsKLSAgICB9Ci0gICAgdHdpc3Qoc29hcFNlY3Rpb25JZCx0d2lzdEltYWdlTmFtZSk7Ci0gIH0KLTwvc2NyaXB0PgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnRvZ2dsZVNPQVBFbnZlbG9wZSg8JT1XU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUJT4sJzwlPXNvYXBSZXF1ZXN0VHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX1JFUVVFU1RfRU5WRUxPUEUiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGRpdiBpZD0iPCU9c29hcFJlcXVlc3RUYWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSI1MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpZnJhbWUgbmFtZT0icmVxdWVzdEVudmVsb3BlRnJhbWUiIGZyYW1lYm9yZGVyPTAgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQod3NkbFBlcnNwZWN0aXZlLmdldFNPQVBFbnZlbG9wZVhNTExpbmsoV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVRVUVTVCkpKSU+IiB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiPjwvaWZyYW1lPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdHdpc3QoIjwlPXNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iKTsKLTwvc2NyaXB0PgotCi08JQotaWYgKG9wZXJFbGVtZW50LmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpCi17Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0b2dnbGVTT0FQRW52ZWxvcGUoPCU9V1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVTUE9OU0UlPiwnPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9FTlZFTE9QRSIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08ZGl2IGlkPSI8JT1zb2FwUmVzcG9uc2VUYWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSI1MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAJPCEtLSB0aGUgb25sb2FkIGNhbGwgaXMgdG8gZml4IGJ1ZyAxNDA2MDcgaW4gYnVnemlsbGEgLS0+Ci0gICAgICAgIDxpZnJhbWUgb25sb2FkPSJqYXZhc2NyaXB0OnJlcXVlc3RFbnZlbG9wZUZyYW1lLmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpIiBmcmFtZWJvcmRlcj0wIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHdzZGxQZXJzcGVjdGl2ZS5nZXRTT0FQRW52ZWxvcGVYTUxMaW5rKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFKSkpJT4iIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiPCU9c29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+Iik7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGJlM2EzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMQmluZGluZ0RldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgYmluZGluZ05vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTRExfQklORElOR19ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9CSU5ESU5HX0RFVEFJTFMiKTsKLSAgIFdTRExCaW5kaW5nRWxlbWVudCB3c2RsQmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWJpbmRpbmdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBWZWN0b3Igb3BlcmF0aW9uTm9kZXMgPSBiaW5kaW5nTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci08aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1iaW5kaW5nTm9kZS5nZXROb2RlSWQoKSU+Ij4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX0RFVEFJTFNfREVTQyIsd3NkbFBlcnNwZWN0aXZlLmdldEJpbmRpbmdUeXBlU3RyaW5nKHdzZGxCaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nVHlwZSgpKSklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbEJpbmRpbmdFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci0gICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA+IDApCi0gICB7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgfQotCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIk9wZXJhdGlvbnMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvcGVyYXRpb25Ob2Rlcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL29wZXJhdGlvbnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIGlmIChvcGVyYXRpb25Ob2Rlcy5zaXplKCkgPiAwKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiT3BlcmF0aW9ucyIsInhPcGVyYXRpb25zIik7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0KLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiRW5kcG9pbnRzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMod3NkbEJpbmRpbmdFbGVtZW50KTsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL2VuZHBvaW50X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIGlmICh3c2RsQmluZGluZ0VsZW1lbnQuZ2V0RW5kUG9pbnRzKCkubGVuZ3RoID4gMCkKLSAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdE9wZW4oIkVuZHBvaW50cyIpOwotPC9zY3JpcHQ+Ci08JQotICB9Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdjOTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgd3NkbE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gd3NkbE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gIFdTRExEZXRhaWxzVG9vbCB3c2RsRGV0YWlsc1Rvb2wgPSAoV1NETERldGFpbHNUb29sKWN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTRExfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzd2l0Y2hXU0RMRGV0YWlsc1ZpZXcoKSB7Ci0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9Td2l0Y2hXU0RMRGV0YWlsc1ZpZXdzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfREVUQUlMUyIpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci0gICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgaWYgKHdzZGxEZXRhaWxzVG9vbC5nZXRWaWV3SWQoKSA9PSBXU0RMRGV0YWlsc1Rvb2wuU09VUkNFX1ZJRVdfSUQpCi0gICB7ICAgICAKLSU+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFdTRExEZXRhaWxzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fRk9STV9WSUVXIiklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GT1JNIiklPjwvYT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzd2l0Y2hXU0RMRGV0YWlsc1ZpZXcoKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX1NPVVJDRV9WSUVXIiklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19TT1VSQ0UiKSU+PC9hPgotPCUKLSAgIH0KLSU+ICAgCi0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgY29sc3Bhbj0zPjxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgaWYgKHdzZGxEZXRhaWxzVG9vbC5nZXRWaWV3SWQoKSA9PSBXU0RMRGV0YWlsc1Rvb2wuRk9STV9WSUVXX0lEKQotICB7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSAgZWxzZQotICB7Ci0lPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpZnJhbWUgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvZm9ybXMvV1NETERldGFpbHNTb3VyY2VWaWV3LmpzcCIpKSU+IiB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiPjwvaWZyYW1lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgfQotJT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyNWM1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfREVUQUlMU19ERVNDIiklPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLU5vZGUgd3NkbE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLVdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KXdzZGxOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci1pZiAoZG9jdW1lbnRhdGlvbiAhPSBudWxsICYmIGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPiAwKQotewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLX0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC90aD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9d3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpJT48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JSAgIAotc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJTZXJ2aWNlcyIpOwotVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlTm9kZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9zZXJ2aWNlc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTEwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUgICAKLVZlY3RvciBiaW5kaW5nTm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci1mb3IgKGludCBpPTA7aTxzZXJ2aWNlTm9kZXMuc2l6ZSgpO2krKykKLXsKLSAgTm9kZSBzZXJ2aWNlTm9kZSA9IChOb2RlKXNlcnZpY2VOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gIFZlY3RvciBzZXJ2aWNlQmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICBmb3IgKGludCBqPTA7ajxzZXJ2aWNlQmluZGluZ05vZGVzLnNpemUoKTtqKyspCi0gIHsKLSAgICBOb2RlIHNlcnZpY2VCaW5kaW5nTm9kZSA9IChOb2RlKXNlcnZpY2VCaW5kaW5nTm9kZXMuZWxlbWVudEF0KGopOwotICAgIGJpbmRpbmdOb2Rlcy5hZGRFbGVtZW50KHNlcnZpY2VCaW5kaW5nTm9kZSk7Ci0gIH0KLX0KLXNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci1zZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiQmluZGluZ3MiKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhiaW5kaW5nTm9kZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9iaW5kaW5nc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi1pZiAoc2VydmljZU5vZGVzLnNpemUoKSA+IDApCi17Ci0lPgotICB0d2lzdCgiU2VydmljZXMiLCJ4U2VydmljZXMiKTsKLTwlCi19Ci1pZiAoYmluZGluZ05vZGVzLnNpemUoKSA+IDApCi17Ci0lPgotICB0d2lzdCgiQmluZGluZ3MiLCJ4QmluZGluZ3MiKTsKLTwlCi19Ci0lPgotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNTb3VyY2VWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzBhNGI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC94bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLnhtbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZmFjdG9yeS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1EZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsRWxlbWVudC5nZXREZWZpbml0aW9uKCk7Ci1XU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLVdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLVN0cmluZ1dyaXRlciBzdHJpbmdXcml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci10cnkKLXsKLSAgd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgc3RyaW5nV3JpdGVyKTsKLSAgJT4KLSAgPCU9c3RyaW5nV3JpdGVyLnRvU3RyaW5nKCklPgotICA8JQotfQotY2F0Y2ggKFdTRExFeGNlcHRpb24gd3NkbGUpCi17Ci0gICU+Ci0gIDw/eG1sIHZlcnNpb249IjEuMCI/PgotICA8JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWQ5ZDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFN0cmluZyB3c2RsVXJsID0gKChXU0RMRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0V3NkbFVybCgpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJmb3JtQWN0aW9uTGluayIsIndzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2RsVXJsKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTNkODBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb25MaW5rIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLWZvcm1BY3Rpb25MaW5rLmFwcGVuZCgid3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmNGJkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETFNlcnZpY2VEZXRhaWxzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICBOb2RlIHNlcnZpY2VOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfREVUQUlMU19ERVNDIiklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIFdTRExTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgaWYgKGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPiAwKQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTEwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSAgIFZlY3RvciBiaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIkJpbmRpbmdzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYmluZGluZ05vZGVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+Ci08JQotICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPiAwKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiQmluZGluZ3MiLCJ4QmluZGluZ3MiKTsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL2JpbmRpbmdzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2ZWU2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIyMCUiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIyMCUiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci08JQotICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IChWZWN0b3Ipc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBmb3IgKGludCBpPTA7aTxiaW5kaW5nTm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBiaW5kaW5nTm9kZSA9IChOb2RlKWJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIFdTRExCaW5kaW5nRWxlbWVudCB3c2RsQmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWJpbmRpbmdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgIEJpbmRpbmcgYmluZGluZyA9IHdzZGxCaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nKCk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpKSklPiI+PCU9YmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpJT48L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0QmluZGluZ1R5cGVTdHJpbmcod3NkbEJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdUeXBlKCkpJT48L3RkPgotPCUKLSAgICAgV1NETFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpd3NkbEJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSB3c2RsU2VydmljZUVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9ET0NVTUVOVEFUSU9OKTsKLSAgICAgaWYgKGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPCAxKQotICAgICAgIGRvY3VtZW50YXRpb24gPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIlRBQkxFX0JMQU5LX1BMQUNFSE9MREVSIik7ICAgICAKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlCi0gICB9Ci0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL2VuZHBvaW50X3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkZDJlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGRFbmRwb2ludCh0YWJsZUNvbnRhaW5lcklELCBpZCwgbmFtZSwgdmFsdWUsIGlzUmVtb3ZhYmxlKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGlmICghaXNSZW1vdmFibGUpCi0gICAgewotICAgICAgcm93Q2hlY2tib3guZGlzYWJsZWQgPSB0cnVlOwotICAgIH0KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBlbmRQb2ludDsKLSAgICBpZiAoaXNSZW1vdmFibGUpCi0gICAgewotICAgICAgZW5kUG9pbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgZW5kUG9pbnQudHlwZSA9ICJ0ZXh0IjsKLSAgICAgIGVuZFBvaW50LmlkID0gaWQ7Ci0gICAgICBlbmRQb2ludC5uYW1lID0gbmFtZTsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgICBlbmRQb2ludC52YWx1ZSA9IHZhbHVlOwotICAgICAgZW5kUG9pbnQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZW5kUG9pbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChlbmRQb2ludCk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlRW5kcG9pbnRDaGVja0FsbENsaWNrKHRhYmxlQ29udGFpbmVySWQsY2hlY2tBbGxDaGVja2JveCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgIGlmICghcm93Q2hlY2tib3guZGlzYWJsZWQpCi0gICAgICB7Ci0gICAgICAgIHJvd0NoZWNrYm94LmNoZWNrZWQgPSBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQ7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJyb3djb2xvciIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpOyAgIAotICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudClzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZ1tdIGVuZHBvaW50cyA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgU3RyaW5nIGFkZHJlc3NMb2NhdGlvbiA9ICgoV1NETFNlcnZpY2VFbGVtZW50KWJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKSkuZ2V0QWRkcmVzc0xvY2F0aW9uKGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKSk7ICAgCi0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkRfUE9JTlRTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRW5kcG9pbnQoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9YWRkcmVzc0xvY2F0aW9uJT4nLCB0cnVlKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUVuZHBvaW50Q2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VORF9QT0lOVFMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gIGJvb2xlYW4gaXNEZWZhdWx0QWRkZWQgPSBmYWxzZTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRwb2ludHMubGVuZ3RoOyBpKyspCi0gIHsKLSAgICBpZiAoZW5kcG9pbnRzW2ldLmVxdWFscyhhZGRyZXNzTG9jYXRpb24pICYmICFpc0RlZmF1bHRBZGRlZCkKLSAgICB7Ci0lPgotICAgIGFkZEVuZHBvaW50KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICIiLCAnPCU9ZW5kcG9pbnRzW2ldJT4nLCBmYWxzZSk7Ci0gICAgCi08JQotICAgICAgaXNEZWZhdWx0QWRkZWQgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotJT4KLSAgICBhZGRFbmRwb2ludCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICc8JT1lbmRwb2ludHNbaV0lPicsIHRydWUpOwotPCUKLSAgICB9Ci0gIH0KLSU+Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9vcGVyYXRpb25zX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9vcGVyYXRpb25zX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlODI2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvb3BlcmF0aW9uc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOyAgIAotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PUEVSQVRJT05TIiklPjwvc3Ryb25nPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci08JQotICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPG9wZXJhdGlvbk5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgb3BlcmF0aW9uTm9kZSA9IChOb2RlKW9wZXJhdGlvbk5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgd3NkbE9wZXJhdGlvbkVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3BlcmF0aW9uTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG9wZXJhdGlvbk5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpKSklPiI+PCU9d3NkbE9wZXJhdGlvbkVsZW1lbnQuZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLTwlICAgICAKLSAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSB3c2RsT3BlcmF0aW9uRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlICAgCi0gICB9ICAgCi0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL3NlcnZpY2VzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzNTljOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRVMiKSU+PC9zdHJvbmc+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMjAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLTwlCi0gICBWZWN0b3Igc2VydmljZU5vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXJ2aWNlTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+Ij48JT13c2RsU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCklPjwvYT48L3RkPgotPCUgICAgIAotICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlICAgCi0gICB9ICAgCi0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYzIzNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVNPQVBFbmNBcnJheUZyYWdtZW50IGZyYWcgPSAoSVNPQVBFbmNBcnJheUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcUZpeFdGcmFnbWVudEpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGYyZTZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVNPQVBFbmNBcnJheUZyYWdtZW50IGZyYWcgPSAoSVNPQVBFbmNBcnJheUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgIDwlPWZyYWcuZ2V0TmFtZSgpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+Ij4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnbWVudHNbal0uZ2V0SUQoKSk7Ci0lPgotICAgICAgPHRyPgotICAgICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnbWVudHNbal0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci08JQotICAgIH0KLSU+Ci0gIDwvdGFibGU+Ci0gIDwvc3Bhbj4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMmE2OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBTZXFGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cFNlcUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX0VOQ19BUlJBWVMiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKQotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgIGVsc2UKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSAgICAgICU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8JQotICAgICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBIZWFkZXJXcmFwcGVyV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5MThjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IHdyYXBwZXJGcmFnbWVudCA9IChTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gd3JhcHBlckZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0KLVN0cmluZyBtdXN0VW5kZXJzdGFuZElEID0gd3JhcHBlckZyYWdtZW50LmdldE11c3RVbmRlcnN0YW5kSUQoKTsKLVN0cmluZyBhY3RvcklEID0gd3JhcHBlckZyYWdtZW50LmdldEFjdG9ySUQoKTsKLQotU3RyaW5nIGZpZWxkc2V0Q2xhc3MgPSAgQnJvd3NlckRldGVjdC5pc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIocmVxdWVzdCkgPyAiIiA6ICJoZWFkZXJmaWVsZHNldCI7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImZpeGZyYWd0YWJsZSI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0JICA8ZmllbGRzZXQgY2xhc3M9IjwlPWZpZWxkc2V0Q2xhc3MlPiI+Ci0JCTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+CSAgICAgIAkgIAotCQk8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iZml4ZnJhZ3RhYmxlIj4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PSIzIj48IS0tIHNwYWNlciAtLT48L3RkPgotCQkgIDwvdHI+Ci0JCSAgPHRyPgotCQkgICAgPHRkPgotCQkgICAgICA8JSBpZiAod3JhcHBlckZyYWdtZW50LmlzTXVzdFVuZGVyc3RhbmQoKSkgeyAlPiAgICAJCi0JCSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+IiBuYW1lPSI8JT1tdXN0VW5kZXJzdGFuZElEJT4iIGNoZWNrZWQvPgotCQkgICAgICA8JSB9IGVsc2UgeyAlPgotCQkgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiIgbmFtZT0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+Ii8+Ci0JCSAgICAgIDwlIH0gJT4gICAgICAJCi0JCSAgICA8L3RkPgotCQkgICAgPHRkIGNsYXNzPSJsYWJlbCI+Ci0JCSAgICAgIDxsYWJlbCBmb3I9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTVVTVFVOREVSU1RBTkQiKSU+PC9sYWJlbD4KLQkJICAgIDwvdGQ+Ci0JCSAgICA8dGQ+fDwvdGQ+Ci0JCSAgICA8dGQgY2xhc3M9ImxhYmVsIj4KLQkJICAgICAgPGxhYmVsIGZvcj0iPCU9YWN0b3JJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RPUiIpJT48L2xhYmVsPgotCQkgICAgPC90ZD4KLQkJICAgIDx0ZD4KLQkJICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDVweCI+Ci0gICAgICAJCSAgICA8JSBpZiAoIXdyYXBwZXJGcmFnbWVudC52YWxpZGF0ZUFjdG9yKCkpIHsgJT4KLSAgICAgIAkJICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICAgIDwlIH0gJT4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgCQk8L3RkPiAgICAJCi0JCSAgICA8dGQgd2lkdGg9IjEwMCUiPiAgICAJCi0JCSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9YWN0b3JJRCU+IiBuYW1lPSI8JT1hY3RvcklEJT4iIHZhbHVlPSI8JT13cmFwcGVyRnJhZ21lbnQuZ2V0QWN0b3IoKSU+IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiLz4KLQkJICAgIDwvdGQ+Ci0JCSAgPC90cj4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PSIzIj48IS0tIHNwYWNlciAtLT48L3RkPgotCQkgIDwvdHI+ICAgIAotCQk8L3RhYmxlPgotCSAgPC9maWVsZHNldD4KLQk8L3RkPgotICA8L3RyPgotICA8dHI+Ci0JPHRkIGhlaWdodD0iNSI+PCEtLSBzcGFjZXIgLS0+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4N2Q0YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTE2ICAgMTg1NTk2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWlzaW50ZXJwcmV0cyByZXNwb25zZSBtZXNzYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICAKLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgIGF0dHJpYnV0ZS5hcHBlbmQoImZhbHNlIik7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZD4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDwlCi0gICAgfSAgCi0gIH0gIAotfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViNTQwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUxNiAgIDE4NTU5NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG1pc2ludGVycHJldHMgcmVzcG9uc2UgbWVzc2FnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSk7Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgIDwlPWZyYWcuZ2V0TmFtZSgpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+Ij4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICA8L3RkPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnc1tpXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8JQotCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdzW2ldLmdldElEKCkpKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPCUKLSAgICB9ICAKLSAgfQotfSAgCi0gICU+Ci0gIAotICA8L3RhYmxlPgotICA8L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTU5OGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIwMSAgIDE5Nzg2NSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NPTlRFTlQiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICAlPgotICAgICAgCi0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgd2lkdGg9MTA+Ci0gICAgICAgICAgCi0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDwlCi0gICAgCi0gICAgCi0gICAgfSAgCi0gIH0KLX0KLSU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNTYyMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAyCi0qIFZlcnNpb24gMS4yIDA1LzA1LzI2IDE2OjE4OjIzCi0qLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIAotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIAotICAKLSAgCi0gICAgCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgYXR0cmlidXRlLmFwcGVuZCgiZmFsc2UiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgCi0gIAotIAotICBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBmcmFnLmdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZ21lbnQ7Ci0gIGZvcihpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBqKyspewotICAgIGF0dHJpYnV0ZUZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnRzW2pdOwotICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdJRCkpewotICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICAKLSAgICA8JQotICAgIH0KLSAgfSAgICAKLX0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjNjAyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPCUKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNTozMzo1NwotKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhdHRyaWJ1dGUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZUJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJREJhc2UpLnRvU3RyaW5nKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykgewotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4nLCc8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4nKSI+PGltZyBuYW1lPSI8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgPCU9ZnJhZy5nZXROYW1lKCklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8c3BhbiBpZD0iPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4iPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gICAgPHRyPgotICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0KLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAKLSAgICAgIAotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgPCUKLSAgICAKLSAgICAKLSAgICB9ICAKLSAgfQotfQotICAlPgotICAKLSAgPC90YWJsZT4KLSAgPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQyZjE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yIDIKLSogVmVyc2lvbiAxLjIgMDUvMDUvMjYgMTY6MTg6MjQKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhdHRyaWJ1dGUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEQ29tcGxleEZyYWdtZW50IGZyYWcgPSAoSVhTRENvbXBsZXhGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzQXR0cmlidXRlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DT05URU5UIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICU+Ci0gIAotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlUm93Q2hlY2tib3hDbGljaygpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICAKLSAgPCUKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnSUQpKXsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgICU+Ci0gICAgICAKLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICAgPCUKLSAgICAKLSAgICAKLSAgICB9ICAKLSAgfQotfQotJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOGFkODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLk5vZGVMaXN0IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9InNlc3Npb25JRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlIQotcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TX0xBTkcgPSAieG1sOmxhbmciOwotcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfWE1MTlNfTEFORyA9ICJlbi1VUyI7Ci0lPgotCi08JQotSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JRC50b1N0cmluZygpKTsKLUNvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpOwotWFNEQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gbnVsbDsKLUVMaXN0IGFwcEluZm9MaXN0ID0gbnVsbDsKLUVMaXN0IGRvY0xpc3QgPSBudWxsOwotaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICBhbm5vdGF0aW9uID0gKChYU0RUeXBlRGVmaW5pdGlvbil4c2RDb21wb25lbnQpLmdldEFubm90YXRpb24oKTsKLWVsc2UgaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgYW5ub3RhdGlvbiA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKXhzZENvbXBvbmVudCkuZ2V0QW5ub3RhdGlvbigpOwotaWYgKGFubm90YXRpb24gIT0gbnVsbCkgewotICBhcHBJbmZvTGlzdCA9IGFubm90YXRpb24uZ2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbigpOwotICBkb2NMaXN0ID0gYW5ub3RhdGlvbi5nZXRVc2VySW5mb3JtYXRpb24oKTsKLX0KLVN0cmluZyBhcHBJbmZvQ29udGFpbmVySUQgPSAiOjphcHBJbmZvIjsKLVN0cmluZyB4YXBwSW5mb0NvbnRhaW5lcklEID0gIng6OmFwcEluZm8iOwotU3RyaW5nIGRvY3VtZW50YXRpb25Db250YWluZXJJRCA9ICI6OmRvY3VtZW50YXRpb24iOwotU3RyaW5nIHhkb2N1bWVudGF0aW9uQ29udGFpbmVySUQgPSAieDo6ZG9jdW1lbnRhdGlvbiI7Ci0lPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gdHdpc3QodGFibGVDb250YWluZXJJZCx0d2lzdEltYWdlTmFtZSkKLSAgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0d2lzdEltYWdlID0gZG9jdW1lbnQuaW1hZ2VzW3R3aXN0SW1hZ2VOYW1lXTsKLSAgICBpZiAodGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgdHdpc3RJbWFnZS5zcmMgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iOwotICAgICAgdHdpc3RJbWFnZS5hbHQgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpKSU+IjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIikpJT4iOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHR3aXN0Q2xvc2UodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklkKS5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwieCIrdGFibGVDb250YWluZXJJZCk7Ci0gIH0KLTwvc2NyaXB0PgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWFwcEluZm9Db250YWluZXJJRCU+JywnPCU9eGFwcEluZm9Db250YWluZXJJRCU+JykiPjxpbWcgbmFtZT0iPCU9eGFwcEluZm9Db250YWluZXJJRCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfQVBQTElDQVRJT05fSU5GT1JNQVRJT04iKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9YXBwSW5mb0NvbnRhaW5lcklEJT4iPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWFNEX0FQUExJQ0FUSU9OX0lORk9STUFUSU9OIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIGJvb2xlYW4gb3BlbkFwcEluZm9UYWJsZSA9IGZhbHNlOwotICBpZiAoYXBwSW5mb0xpc3QgIT0gbnVsbCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXBwSW5mb0xpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgIEVsZW1lbnQgZSA9IChFbGVtZW50KWFwcEluZm9MaXN0LmdldChpKTsKLSAgICAgIFN0cmluZyBhcHBJbmZvTGFuZyA9IGUuZ2V0QXR0cmlidXRlKFhNTE5TX0xBTkcpOwotICAgICAgU3RyaW5nIGFwcEluZm9UZXh0ID0gbnVsbDsKLSAgICAgIE5vZGVMaXN0IG5sID0gZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspIHsKLSAgICAgICAgaWYgKG5sLml0ZW0oaikuZ2V0Tm9kZVR5cGUoKSA9PSBvcmcudzNjLmRvbS5Ob2RlLlRFWFRfTk9ERSkgewotICAgICAgICAgIGFwcEluZm9UZXh0ID0gbmwuaXRlbShqKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGFwcEluZm9UZXh0ICE9IG51bGwpCi0gICAgICB7IAotICAgICAgICBvcGVuQXBwSW5mb1RhYmxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGFwcEluZm9UZXh0LnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgICAgYXBwSW5mb1RleHQgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIlRBQkxFX0JMQU5LX1BMQUNFSE9MREVSIik7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPSgoYXBwSW5mb0xhbmcgIT0gbnVsbCAmJiBhcHBJbmZvTGFuZy5sZW5ndGgoKSA+IDApID8gYXBwSW5mb0xhbmcgOiBERUZBVUxUX1hNTE5TX0xBTkcpJT48L3RkPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9YXBwSW5mb1RleHQlPjwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gICAgICB9Ci0gICAgfQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghb3BlbkFwcEluZm9UYWJsZSkgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdENsb3NlKCc8JT1hcHBJbmZvQ29udGFpbmVySUQlPicpOwotPC9zY3JpcHQ+Ci08JQotfQotJT4KLQotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPicsJzwlPXhkb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPicpIj48aW1nIG5hbWU9IjwlPXhkb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWFNEX0RPQ1VNRU5UQVRJT04iKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9ZG9jdW1lbnRhdGlvbkNvbnRhaW5lcklEJT4iPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWFNEX0RPQ1VNRU5UQVRJT04iKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgYm9vbGVhbiBvcGVuRG9jVGFibGUgPSBmYWxzZTsKLSAgaWYgKGRvY0xpc3QgIT0gbnVsbCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9jTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgRWxlbWVudCBlID0gKEVsZW1lbnQpZG9jTGlzdC5nZXQoaSk7Ci0gICAgICBTdHJpbmcgZG9jTGFuZyA9IGUuZ2V0QXR0cmlidXRlKFhNTE5TX0xBTkcpOwotICAgICAgU3RyaW5nIGRvY1RleHQgPSBudWxsOwotICAgICAgTm9kZUxpc3QgbmwgPSBlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBpZiAobmwuaXRlbShqKS5nZXROb2RlVHlwZSgpID09IG9yZy53M2MuZG9tLk5vZGUuVEVYVF9OT0RFKSB7Ci0gICAgICAgICAgZG9jVGV4dCA9IG5sLml0ZW0oaikuZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAKLSAgICAgIGlmIChkb2NUZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wZW5Eb2NUYWJsZSA9IHRydWU7Ci0gICAgICAgIGlmIChkb2NUZXh0LnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgICAgZG9jVGV4dCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9KChkb2NMYW5nICE9IG51bGwgJiYgZG9jTGFuZy5sZW5ndGgoKSA+IDApID8gZG9jTGFuZyA6IERFRkFVTFRfWE1MTlNfTEFORyklPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1kb2NUZXh0JT48L3RkPgotICA8L3RyPgotICA8JQotICAgICAgfQotICAgIH0KLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KLTwlCi1pZiAoIW9wZW5Eb2NUYWJsZSkgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdENsb3NlKCc8JT1kb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPicpOwotPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5YzlmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5ycGMuTmFtZXNwYWNlQ29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuSGFzaHRhYmxlIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLS8vIFRPRE86IFJlcGxhY2UgIlNPQVAtRU5WIiBieSBOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU09BUF9FTlZFTE9QRSAoPSJzb2FwZW52IikKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU09BUF9FTlZFTE9QRSwiU09BUC1FTlYiKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTSSxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTSSk7Ci1zb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoTmFtZXNwYWNlQ29uc3RhbnRzLk5TVVJJX1NDSEVNQV9YU0QsTmFtZXNwYWNlQ29uc3RhbnRzLk5TUFJFRklYX1NDSEVNQV9YU0QpOwotRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoIW9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLSAgICBjb250aW51ZTsKLSAgc2IuYXBwZW5kKFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1tpXSwgdHJ1ZSkpOwotICBzYi5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLX0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48JT1mcmFnLmdldE5hbWUoKSU+PC9sYWJlbD4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDx0ZXh0YXJlYSBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0idGV4dGFyZWFlbnRlciIgcmVhZG9ubHk+PCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChzYi50b1N0cmluZygpKSU+PC90ZXh0YXJlYT4KLTwlCi0gICAgICAvKgotICAgICAgU3RyaW5nQnVmZmVyIHVybCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHVybC5hcHBlbmQocmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcD8iKSkpOwotICAgICAgdXJsLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKS5hcHBlbmQoIj0iKS5hcHBlbmQoZnJhZ0lEKS5hcHBlbmQoIiYiKTsKLSAgICAgIHVybC5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCI9IikuYXBwZW5kKG5vZGVJRCkuYXBwZW5kKCImIik7Ci0gICAgICB1cmwuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgiPSIpLmFwcGVuZChzZXNzaW9uLmdldElkKCkpOwotICAgICAgKi8KLSU+Ci0gICAgICA8IS0tCi0gICAgICA8aWZyYW1lIHNyYz0iIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxNTBweCI+PC9pZnJhbWU+Ci0gICAgICAtLT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwODlmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFJGcmFnbWVudFhNTC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L3htbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS5FbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcueG1sLnNheC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcueG1sLnNheC5oZWxwZXJzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5ycGMuTmFtZXNwYWNlQ29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwucGFyc2Vycy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotPCUKLVN0cmluZyBmcmFnSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKTsKLVN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLVN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lEKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLS8vIFRPRE86IFJlcGxhY2UgIlNPQVAtRU5WIiBieSBOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU09BUF9FTlZFTE9QRSAoPSJzb2FwZW52IikKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU09BUF9FTlZFTE9QRSwiU09BUC1FTlYiKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTSSxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTSSk7Ci1zb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoTmFtZXNwYWNlQ29uc3RhbnRzLk5TVVJJX1NDSEVNQV9YU0QsTmFtZXNwYWNlQ29uc3RhbnRzLk5TUFJFRklYX1NDSEVNQV9YU0QpOwotRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMF07Ci1TdHJpbmdCdWZmZXIgc2IgPSBudWxsOwotdHJ5Ci17Ci0gIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoIW9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotICBpZiAoaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoID09IDEpCi0gIHsKLSAgICBieXRlW10gYiA9IFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1swXSwgdHJ1ZSkuZ2V0Qnl0ZXMoSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYik7Ci0gICAgU0FYUGFyc2VyRmFjdG9yeSBzYXhGYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgIHNheEZhY3Rvcnkuc2V0VmFsaWRhdGluZyh0cnVlKTsKLSAgICBTQVhQYXJzZXIgc2F4UGFyc2VyID0gc2F4RmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICBzYXhQYXJzZXIucGFyc2UoYmFpcywKLSAgICAgIG5ldyBEZWZhdWx0SGFuZGxlcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgYmFpcy5jbG9zZSgpOwotICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihuZXcgU3RyaW5nKGIpKTsKLSAgfQotfQotY2F0Y2ggKFRocm93YWJsZSB0KQotewotfQotaWYgKHNiID09IG51bGwpCi17Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mcmFnLmdldE5hbWUoKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0gICAgICBjb250aW51ZTsKLSAgICBzYi5hcHBlbmQoSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChYTUxVdGlscy5zZXJpYWxpemUoaW5zdGFuY2VEb2N1bWVudHNbaV0sIHRydWUpKSk7Ci0gIH0KLSU+Ci08JT1zYi50b1N0cmluZygpJT4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi19Ci1lbHNlCi17Ci0lPgotPCU9c2IudG9TdHJpbmcoKSU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4NTIwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyBwYXJhbSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCAwKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8dGV4dGFyZWEgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9InRleHRhcmVhZW50ZXIiPjwlPSgocGFyYW0gIT0gbnVsbCkgPyBIVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHBhcmFtKSA6ICIiKSU+PC90ZXh0YXJlYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA5MzFmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvblJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0REZWxlZ2F0aW9uRnJhZ21lbnQgd3JhcHBlckZyYWdtZW50ID0gKElYU0REZWxlZ2F0aW9uRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLWZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLWZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0NjA3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvbldGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRERlbGVnYXRpb25GcmFnbWVudCB3cmFwcGVyRnJhZ21lbnQgPSAoSVhTRERlbGVnYXRpb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjMjYyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiwgMjAwMzEyMzFhIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MzQ6MDQKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gZWxlbWVudEZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZWxlbWVudEZyYWdtZW50LmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1mcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci1mcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLWVsZW1lbnRJRC5kZWxldGUoMCwgZWxlbWVudElELmxlbmd0aCgpKTsKLWVsZW1lbnRJRC5hcHBlbmQoZWxlbWVudEZyYWdtZW50LmdldElEKCkpOwotJT4KLQotIAotCi08dGFibGUgIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KCJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi0gCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1NjQ0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGVsZW1lbnRGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGVsZW1lbnRGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci1lbGVtZW50SUQuZGVsZXRlKDAsIGVsZW1lbnRJRC5sZW5ndGgoKSk7Ci1lbGVtZW50SUQuYXBwZW5kKGVsZW1lbnRGcmFnbWVudC5nZXRJRCgpKTsKLSU+Ci0KLSAKLQotPHRhYmxlICBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLSAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhM2NlZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWE0OTQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotaW50IG1pbk9jY3VycyA9IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLWludCBtYXhPY2N1cnMgPSB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci1pZiAobWluT2NjdXJzID09IG1heE9jY3VycykgewotJT4KLTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9bWF4T2NjdXJzJT4iLz4KLTwlCi19IGVsc2UgewotICBTdHJpbmdbXSBwYXJhbXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotJT4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09DQ1VSQU5DRSIpJT4mbmJzcDs8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBpZiAobWF4T2NjdXJzICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCkgewotICAgICAgJT4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSBtaW5PY2N1cnM7IGkgPD0gbWF4T2NjdXJzOyBpKyspIHsKLSAgICAgICAgJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1pJT4iIDwlIGlmIChwYXJhbXMgIT0gbnVsbCAmJiBpID09IHBhcmFtcy5sZW5ndGgpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9aSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8JQotICAgICAgfSBlbHNlIHsKLSAgICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9KChwYXJhbXMgIT0gbnVsbCkgPyBTdHJpbmcudmFsdWVPZihwYXJhbXMubGVuZ3RoKSA6ICIiKSU+IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgICAgPCUKLSAgICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICAgJT4KLSAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQWxsV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5MDI5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwQWxsRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBBbGxGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotYm9vbGVhbiBlbmFibGVHcm91cCA9ICh4c2RDb25maWcuZ2V0TWluT2NjdXJzKCkgPiAwIHx8IGZyYWcuZ2V0R3JvdXBJRHMoKS5sZW5ndGggPiAwKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgZ3JvdXBJRCA9IGZyYWcuZ2V0R3JvdXBBbGxJbnN0YW5jZSgpOwotU3RyaW5nIGdyb3VwQ2hlY2tib3hJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlhTRF9BTExfR1JPVVBfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIGdyb3VwTWVtYmVyUmFkaW9JRCA9IChuZXcgU3RyaW5nQnVmZmVyKGdyb3VwQ2hlY2tib3hJRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGluaXRHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBncm91cENoZWNrYm94SUQsIGVuYWJsZSkgewotICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdyb3VwQ2hlY2tib3hJRCk7Ci0gICAgY2hlY2tib3guY2hlY2tlZCA9IGVuYWJsZTsKLSAgICBlbmFibGVHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBjaGVja2JveCk7Ci0gIH0KLQotICBmdW5jdGlvbiBlbmFibGVHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBjaGVja2JveCkgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciBjaGVja2JveFRhYmxlID0gY2hlY2tib3gucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGU7Ci0gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHsKLSAgICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJRCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgY2hlY2tib3gubmFtZSA9IGZyYWdJRDsKLSAgICAgIGNoZWNrYm94LnZhbHVlID0gZ3JvdXBJRDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAodGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAiIikKLSAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJRCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgY2hlY2tib3gubmFtZSA9ICIiOwotICAgICAgY2hlY2tib3gudmFsdWUgPSAiIjsKLSAgICB9Ci0gICAgdmFyIHRkcyA9IGNoZWNrYm94VGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNoZWNrYm94Q2VsbEluZGV4ID0gY2hlY2tib3gucGFyZW50Tm9kZS5jZWxsSW5kZXg7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChpID09IGNoZWNrYm94Q2VsbEluZGV4IHx8IGNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIHRkcy5pdGVtKGkpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgdGRzLml0ZW0oaSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBncm91cEFsbE9yZGVyaW5nTW92ZVVwKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAodGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgYWxlcnQoJzwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQ0FOTk9UX01PVkVfRklSU1RfRUxFTUVOVF9VUCIpJT4nKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93cyArIDE7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodGFibGUucm93c1tpXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQpIHsKLSAgICAgICAgc3dhcFJvd3ModGFibGUsIGktMSwgaSk7Ci0gICAgICAgIHRhYmxlLnJvd3NbaS0xXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGFsZXJ0KCc8JT1jb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPicpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ3JvdXBBbGxPcmRlcmluZ01vdmVEb3duKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAodGFibGUucm93c1t0YWJsZS5yb3dzLmxlbmd0aCAtIDFdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgYWxlcnQoJzwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQ0FOTk9UX01PVkVfTEFTVF9FTEVNRU5UX0RPV04iKSU+Jyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSBudW1iZXJPZkhlYWRlclJvd3M7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aCAtIDE7IGkrKykgewotICAgICAgaWYgKHRhYmxlLnJvd3NbaV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkKSB7Ci0gICAgICAgIHN3YXBSb3dzKHRhYmxlLCBpLCBpKzEpOwotICAgICAgICB0YWJsZS5yb3dzW2krMV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBhbGVydCgnPCU9Y29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4nKTsKLSAgfQotCi0gIDwlCi0gIC8vIHJvd0luZGV4MSBtdXN0IGJlIHNtYWxsZXIgdGhhbiByb3dJbmRleDIgaW4gb3JkZXIgdG8gd29yawotICAlPgotICBmdW5jdGlvbiBzd2FwUm93cyh0YWJsZSwgcm93SW5kZXgxLCByb3dJbmRleDIpIHsKLSAgICB2YXIgcm93MUNoaWxkTm9kZXMgPSBjbG9uZUFycmF5KHRhYmxlLnJvd3Nbcm93SW5kZXgxXS5jaGlsZE5vZGVzKTsKLSAgICB2YXIgcm93MkNoaWxkTm9kZXMgPSBjbG9uZUFycmF5KHRhYmxlLnJvd3Nbcm93SW5kZXgyXS5jaGlsZE5vZGVzKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgyKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgxKTsKLSAgICB2YXIgcm93MSA9IHRhYmxlLmluc2VydFJvdyhyb3dJbmRleDEpOwotICAgIHZhciByb3cyID0gdGFibGUuaW5zZXJ0Um93KHJvd0luZGV4Mik7Ci0gICAgYXBwZW5kVG9Sb3cocm93MSwgcm93MkNoaWxkTm9kZXMpOwotICAgIGFwcGVuZFRvUm93KHJvdzIsIHJvdzFDaGlsZE5vZGVzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb25lQXJyYXkob2xkQXJyYXkpIHsKLSAgICB2YXIgYXJyYXlDbG9uZSA9IG5ldyBBcnJheSgpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFycmF5Q2xvbmVbaV0gPSBvbGRBcnJheVtpXS5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheUNsb25lOwotICB9Ci0KLSAgZnVuY3Rpb24gYXBwZW5kVG9Sb3cocm93LCBub2Rlc0FycmF5KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlc0FycmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICByb3cuYXBwZW5kQ2hpbGQobm9kZXNBcnJheVtpXSk7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8JQotICAgIGlmICh4c2RDb25maWcuZ2V0TWluT2NjdXJzKCkgPiAwKSB7Ci0gICAgJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWdyb3VwSUQlPiI+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9Z3JvdXBDaGVja2JveElEJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9FTkFCTEVfRElTQUJMRV9HUk9VUCIpJT4iIG9uQ2xpY2s9ImphdmFzY3JpcHQ6ZW5hYmxlR3JvdXBBbGwoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT10d2lzdEltYWdlTmFtZSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWdyb3VwSUQlPicsIHRoaXMpIiBjaGVja2VkPjxsYWJlbCBmb3I9IjwlPWdyb3VwQ2hlY2tib3hJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkFCTEVfRElTQUJMRV9HUk9VUCIpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpncm91cEFsbE9yZGVyaW5nTW92ZVVwKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfVVAiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Z3JvdXBBbGxPcmRlcmluZ01vdmVEb3duKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfRE9XTiIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9MTA+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTEVNRU5UUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRJRCgpKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9Z3JvdXBNZW1iZXJSYWRpb0lEJT4iIHZhbHVlPSI8JT1mcmFnSUQudG9TdHJpbmcoKSU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfRUxFTUVOVF9JTl9HUk9VUCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiB3aWR0aD0iMTAwJSI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1ncm91cElEJT4iIHZhbHVlPSI8JT1mcmFnSUQudG9TdHJpbmcoKSU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghZW5hYmxlR3JvdXApIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGluaXRHcm91cEFsbCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPXR3aXN0SW1hZ2VOYW1lJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9Z3JvdXBJRCU+JywgJzwlPWdyb3VwQ2hlY2tib3hJRCU+JywgPCU9ZW5hYmxlR3JvdXAlPik7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyM2RjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNob29zZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cENob2ljZUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT0lDRVMiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci08JQotICBYU0RQYXJ0aWNsZVtdIGNob2ljZXMgPSBmcmFnLmdldENob2ljZXMoKTsKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgICBTdHJpbmcgZ3JvdXBJRDsKLSAgICBpbnQgY2hvaWNlSW5kZXg7Ci0gICAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpIHsKLSAgICAgIGdyb3VwSUQgPSBncm91cElEc1tpXTsKLSAgICAgIGNob2ljZUluZGV4ID0gZnJhZy5nZXRDaG9pY2VJbmRleChncm91cElEKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBncm91cElEID0gZnJhZy5jcmVhdGVHcm91cENob2ljZUluc3RhbmNlKDApOwotICAgICAgY2hvaWNlSW5kZXggPSAwOwotICAgIH0KLSAgICBJWFNERnJhZ21lbnRbXSBjaG9pY2VGcmFncyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9Z3JvdXBJRCU+IiBuYW1lPSI8JT1ncm91cElEJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNob29zZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0NIT0lDRVMiKSU+Ij4KLTwlCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgWFNEQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IGNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICIiOwotICAgICAgICAgICAgaWYoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICAgICAgICBuYW1lID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkQ29tcG9uZW50KS5nZXRRTmFtZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBuYW1lID0geHNkQ29tcG9uZW50LmdldEVsZW1lbnQoKS5nZXRUYWdOYW1lKCk7ICAKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaiA9PSBjaG9pY2VJbmRleCkgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+IiBzZWxlY3RlZD48JT1uYW1lJT4KLTwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPWNob2ljZUZyYWdzW2pdLmdldElEKCklPiI+PCU9bmFtZSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci08JQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci0gICAgICAgICAgPHNwYW4gaWQ9IjwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNob2ljZUZyYWdzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHNob3dUYWJsZSgnPCU9Y2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQlPicsIDwlPShqID09IGNob2ljZUluZGV4KSU+KTsKLSAgICAgICAgICA8L3NjcmlwdD4KLTwlCi0gICAgICAgIH0KLSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzZiODU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBDaG9pY2VGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cENob2ljZUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1pZiAoZ3JvdXBJRHMubGVuZ3RoID09IDEpIHsKLSAgaW50IGNob2ljZUluZGV4ID0gZnJhZy5nZXRDaG9pY2VJbmRleChncm91cElEc1swXSk7Ci0gIElYU0RGcmFnbWVudCBjaG9pY2VGcmFnID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1swXSlbY2hvaWNlSW5kZXhdOwotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZy5nZXRJRCgpKTsKLSU+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICBpbnQgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSURzW2ldKTsKLSAgICBJWFNERnJhZ21lbnQgY2hvaWNlRnJhZyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pW2Nob2ljZUluZGV4XTsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaG9pY2VGcmFnLmdldElEKCkpOwotJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0dST1VQX05VTUJFUiIsIFN0cmluZy52YWx1ZU9mKGkgKyAxKSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gICAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hvaWNlRnJhZy5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDwvc3Bhbj4KLTwlCi0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTFiN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNob29zZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cENob2ljZUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgbmFtZUFuY2hvcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuTkFNRV9BTkNIT1JfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotJT4KLTxhIG5hbWU9IjwlPW5hbWVBbmNob3JJRCU+Ii8+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT0lDRVMiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci08JQotICBYU0RQYXJ0aWNsZVtdIGNob2ljZXMgPSBmcmFnLmdldENob2ljZXMoKTsKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGludCBjaG9pY2VJbmRleDsKLSAgICBpZiAoaSA8IGdyb3VwSURzLmxlbmd0aCkgewotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgICAgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSUQpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoMCk7Ci0gICAgICBjaG9pY2VJbmRleCA9IDA7Ci0gICAgfQotICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9Z3JvdXBJRCU+IiBuYW1lPSI8JT1ncm91cElEJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNob29zZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0NIT0lDRVMiKSU+Ij4KLTwlCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBpZiAoaiA9PSBjaG9pY2VJbmRleCkgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+IiBzZWxlY3RlZD48JT14c2RFbGVtZW50LmdldFFOYW1lKCklPgotPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+Ij48JT14c2RFbGVtZW50LmdldFFOYW1lKCklPgotPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0lPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotPCUKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKGNob2ljZUZyYWdzW2pdLmdldElEKCkpOwotICAgICAgICAgIFN0cmluZyBjaG9pY2VGcmFnVGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGNob2ljZUZyYWdzW2pdLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotICAgICAgICAgIDxzcGFuIGlkPSI8JT1jaG9pY2VGcmFnVGFibGVDb250YWluZXJJRCU+Ij4KLSAgICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBzaG93VGFibGUoJzwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4nLCA8JT0oaiA9PSBjaG9pY2VJbmRleCklPik7Ci0gICAgICAgICAgPC9zY3JpcHQ+Ci08JQotICAgICAgICB9Ci0lPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotPCUKLSAgfQotJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkZmRhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySURCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEQmFzZSkudG9TdHJpbmcoKTsKLVN0cmluZ1tdIGdyb3VwSURzID0gZnJhZy5nZXRHcm91cElEcygpOwotaWYgKGdyb3VwSURzLmxlbmd0aCA9PSAxKSB7Ci0gIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1swXSk7Ci0lPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgIGZyYWdJRC5hcHBlbmQoZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2V0SUQoKSk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotICA8L3RhYmxlPgotPCUKLX0KLWVsc2UgewotICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKTsKLSU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPicsJzwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPicpIj48aW1nIG5hbWU9IjwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9HUk9VUF9OVU1CRVIiLCBTdHJpbmcudmFsdWVPZihpICsgMSkpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8c3BhbiBpZD0iPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4iPgotICAgIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLTwlCi0gICAgfQotJT4KLSAgICA8L3RhYmxlPgotICAgIDwvc3Bhbj4KLTwlCi0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVkODFjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cFNlcUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwU2VxRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZ1tdIGdyb3VwSURzID0gZnJhZy5nZXRHcm91cElEcygpOwotZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICBTdHJpbmcgZ3JvdXBJRDsKLSAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpCi0gICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICBlbHNlCi0gICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0lPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWdyb3VwSUQlPiI+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzQxZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxUmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwU2VxRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBTZXFGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjcmVhdGVJbnN0YW5jZSgnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4sICc8JT1mcmFnSUQlPicsICc8JT1uYW1lQW5jaG9ySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTEVNRU5UUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBTdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgU3RyaW5nIGdyb3VwSUQ7Ci0gICAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpCi0gICAgICBncm91cElEID0gZ3JvdXBJRHNbaV07Ci0gICAgZWxzZQotICAgICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldElEKCkpOwotICAgICAgJT4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvRGlhbG9nLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvRGlhbG9nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxM2M0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgbm9kZUlkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICBTdHJpbmcgZnJhZ21lbnRJZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+Ci0gICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlRJVExFX1hTRF9JTkZPUk1BVElPTl9ESUFMT0ciKSU+Ci0gIDwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIGxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdtZW50SWQpOwotJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLlhTRF9JTkZPX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08JSAgICAgIAotICAgbGluay5zZXRMZW5ndGgoMCk7Ci0gICBsaW5rLmFwcGVuZCgid3NkbC9mcmFnbWVudC9YU0RJbmZvX2NvbnRlbnQuanNwPyIpOwotICAgbGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICBsaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpLmFwcGVuZCgnPScpLmFwcGVuZChmcmFnbWVudElkKTsKLSU+ICAKLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLlhTRF9JTkZPX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiOTY0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9InNlc3Npb25JRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgc2Vzc2lvbklELmFwcGVuZChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKSk7Ci0gICBmcmFnSUQuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpKTsKLQotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JRC50b1N0cmluZygpKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBub2RlSUQuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWcuZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMTg2YjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChyZXF1ZXN0LmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKSk7ICAgCi0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uVW5sb2FkPSJ0b3Aub3BlbmVyLnhzZEluZm9EaWFsb2dDbG9zZWQ9dHJ1ZSIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIj4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1mcmFnLmdldE5hbWUoKSU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0b3Aub3BlbmVyLnhzZEluZm9EaWFsb2dDbG9zZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzRkM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TdHJpbmcgZnJhZ0lEU3RyaW5nID0gZnJhZ0lELnRvU3RyaW5nKCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLVhTRFR5cGVEZWZpbml0aW9uIHhzZEJ1aWx0SW5UeXBlID0gWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWdJRFN0cmluZyU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnSURTdHJpbmcpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8JQotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9IjYwJSI+Ci0gICAgICA8JQotICAgICAgU3RyaW5nIHZhbHVlID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZShmcmFnLmdldElEKCksIGkpOwotICAgICAgJT4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWdJRFN0cmluZyU+IiB2YWx1ZT0iPCU9KCh2YWx1ZSAhPSBudWxsKSA/IEhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QodmFsdWUpIDogIiIpJT4iIHNpemU9IjUwIiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuQ2FsZW5kYXJCcm93c2VyKDwlPXJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKSU+LCdjb250ZW50Ym9yZGVyJywnPCU9ZnJhZ0lEU3RyaW5nJT4nLDwlPWklPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSIzMCUiPiZuYnNwOzwvdGQ+ICAgIAotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjUyM2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci1YU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotaW50IGNhbGVuZGFyVHlwZSA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAlPgotICAgIAotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkRGF0ZVRpbWVSb3dzKDwlPWNhbGVuZGFyVHlwZSU+LCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIHdpZHRoPSI5MCUiIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVkFMVUVTIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNEYXRlVGltZVJvd3MoPCU9Y2FsZW5kYXJUeXBlJT4sIjwlPXRhYmxlQ29udGFpbmVySUQlPiIsIjwlPWZyYWcuZ2V0SUQoKSU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT12YWx1ZXNbaV0lPiIsPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwiPCU9dGFibGVDb250YWluZXJJRCU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT1mcmFnLmdldElEKCklPiIsbnVsbCw8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPik7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OTczMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1GaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCBmcmFnID0gKFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotICAgSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICBYU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8bGFiZWwgZm9yPSI8JT1mcmFnLmdldElEKCklPiI+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+PC9sYWJlbD4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8JT0oeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKSU+Ci0gICAgPC90ZD4KLSAgICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQ+Ci08JQotICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBmcmFnLmdldE9wdGlvblZlY3RvcigpOwotICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykKLSAgIHsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci08JQotICAgICBTdHJpbmcgc2VsZWN0ZWRWYWx1ZSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCBpKTsKLSU+Ci0gICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLTwlICAgICAgICAgICAgICAKLSAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvcHRpb25WZWN0b3Iuc2l6ZSgpOyBqKyspCi0gICAgIHsKLSAgICAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gb3B0aW9uVmVjdG9yLmdldERpc3BsYXlWYWx1ZShqKTsKLSAgICAgICBTdHJpbmcgdmFsdWUgPSBvcHRpb25WZWN0b3IuZ2V0VmFsdWUoaik7Ci0gICAgICAgaWYgKHZhbHVlLmVxdWFscyhzZWxlY3RlZFZhbHVlKSkKLSAgICAgICB7Ci0lPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT12YWx1ZSU+IiBzZWxlY3RlZD48JT1kaXNwbGF5VmFsdWUlPgotPCUKLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXZhbHVlJT4iPjwlPWRpc3BsYXlWYWx1ZSU+Ci08JQotICAgICAgIH0KLSAgICAgfQotJT4KLSAgICAgIDwvc2VsZWN0PgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotICAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxN2E5ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgZnJhZyA9IChYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLSAgIElYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLSAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBmcmFnLmdldE9wdGlvblZlY3RvcigpOwotICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICBYU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgIFN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotICAgU3RyaW5nIG9wdGlvbnNDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlhTRF9BVE9NSUNfRU5VTV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNwYW4gaWQ9IjwlPW9wdGlvbnNDb250YWluZXJJRCU+Ij4KLTwlCi0gICBmb3IgKGludCBqID0gMDsgaiA8IG9wdGlvblZlY3Rvci5zaXplKCk7IGorKykgewotJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1vcHRpb25zQ29udGFpbmVySUQlPiIgdmFsdWU9IjwlPW9wdGlvblZlY3Rvci5nZXREaXNwbGF5VmFsdWUoaiklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4iIHZhbHVlPSI8JT1vcHRpb25WZWN0b3IuZ2V0VmFsdWUoaiklPiI+Ci08JQotICAgfQotJT4KLTwvc3Bhbj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGRTaW1wbGVBdG9taWNFbnVtUm93cyh0YWJsZUNvbnRhaW5lcklELCBvcHRpb25zQ29udGFpbmVySUQsIGlkLCBuYW1lLCB2YWx1ZSwgbWF4T2NjdXJzKSB7Ci0gICAgaWYgKGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpKQotICAgICAgcmV0dXJuOwotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKHNlbGVjdCk7Ci0gICAgc2VsZWN0LmlkID0gaWQ7Ci0gICAgc2VsZWN0Lm5hbWUgPSBuYW1lOwotICAgIHNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgdmFyIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnNDb250YWluZXJJRCk7Ci0gICAgdmFyIGluZGV4ID0gMDsKLSAgICBmb3IgKHZhciBrID0gMDsgayA8IG9wdGlvbnMubGVuZ3RoOyBrICs9IDIpIHsKLSAgICAgIHNlbGVjdC5vcHRpb25zW2luZGV4XSA9IG5ldyBPcHRpb24ob3B0aW9uc1trXS52YWx1ZSxvcHRpb25zW2srMV0udmFsdWUpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPT0gb3B0aW9uc1trKzFdLnZhbHVlKQotICAgICAgICBzZWxlY3Qub3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zQ29udGFpbmVySUQpIHsKLSAgICB2YXIgb3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnNDb250YWluZXJJRCk7Ci0gICAgdmFyIG9wdGlvbnMgPSBvcHRpb25zQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHJldHVybiBvcHRpb25zOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsIG51bGwsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVkFMVUVTIiklPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLVN0cmluZ1tdIHZhbHVlcyA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSk7Ci1pbnQgaSA9IDA7Ci1pZiAodmFsdWVzICE9IG51bGwpIHsKLSAgZm9yICggOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgYWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT12YWx1ZXNbaV0lPicsICc8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPicpOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY0VudW1Sb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNmFkODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotYm9vbGVhbiBhdHRyaWJ1dGVCb29sID0gQm9vbGVhbi52YWx1ZU9mKGF0dHJpYnV0ZS50b1N0cmluZygpKS5ib29sZWFuVmFsdWUoKSA7Ci0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSAmJiAhKGF0dHJpYnV0ZUJvb2wpICl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICAKLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBTdHJpbmcgdmFsdWUgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlKGZyYWcuZ2V0SUQoKSwgaSk7Ci0gICAgICAlPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT0oKHZhbHVlICE9IG51bGwpID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh2YWx1ZSkgOiAiIiklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0YWJsZXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2VmZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJzZXNzaW9uSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSUQudG9TdHJpbmcoKSk7Ci1Db250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0KLWludCBtaW5MZW5ndGggPSAtMTsKLWludCBtYXhMZW5ndGggPSAtMTsKLVZlY3RvciBwYXR0ZXJuVmVjdG9yID0gbmV3IFZlY3RvcigpOwotU3RyaW5nIHdoaXRlU3BhY2UgPSBudWxsOwotYm9vbGVhbiBtaW5FeGNsdXNpdmUgPSB0cnVlOwotT2JqZWN0IG1pbiA9IG51bGw7Ci1ib29sZWFuIG1heEV4Y2x1c2l2ZSA9IHRydWU7Ci1PYmplY3QgbWF4ID0gbnVsbDsKLWludCB0b3RhbERpZ2l0cyA9IC0xOwotaW50IGZyYWN0aW9uRGlnaXRzID0gLTE7Ci0KLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIGN1cnJUeXBlID0gc2ltcGxlVHlwZTsKLXdoaWxlICghWFNEVHlwZURlZmluaXRpb25VdGlsLmlzUm9vdFR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkgewotICAvLyBtaW5MZW5ndGgKLSAgaWYgKG1pbkxlbmd0aCA8IDApIHsKLSAgICBYU0RMZW5ndGhGYWNldCB4c2RMZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldExlbmd0aEZhY2V0KCk7Ci0gICAgWFNETWluTGVuZ3RoRmFjZXQgeHNkTWluTGVuZ3RoRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5MZW5ndGhGYWNldCgpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKHhzZExlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICBtaW5MZW5ndGggPSB4c2RMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHhzZE1pbkxlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICBtaW5MZW5ndGggPSB4c2RNaW5MZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICB9Ci0gIC8vIG1heExlbmd0aAotICBpZiAobWF4TGVuZ3RoIDwgMCkgewotICAgIFhTRExlbmd0aEZhY2V0IHhzZExlbmd0aEZhY2V0ID0gY3VyclR5cGUuZ2V0TGVuZ3RoRmFjZXQoKTsKLSAgICBYU0RNYXhMZW5ndGhGYWNldCB4c2RNYXhMZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldE1heExlbmd0aEZhY2V0KCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoeHNkTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1heExlbmd0aCA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoeHNkTWF4TGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1heExlbmd0aCA9IHhzZE1heExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gIH0KLSAgLy8gcGF0dGVyblZlY3RvcgotICBFTGlzdCB4c2RQYXR0ZXJuRmFjZXRzID0gY3VyclR5cGUuZ2V0UGF0dGVybkZhY2V0cygpOwotICBpZiAoeHNkUGF0dGVybkZhY2V0cyAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RQYXR0ZXJuRmFjZXRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBYU0RQYXR0ZXJuRmFjZXQgeHNkUGF0dGVybkZhY2V0ID0gKFhTRFBhdHRlcm5GYWNldCl4c2RQYXR0ZXJuRmFjZXRzLmdldChpKTsKLSAgICAgIEVMaXN0IHBhdHRlcm5zID0geHNkUGF0dGVybkZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhdHRlcm5zLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIHBhdHRlcm5WZWN0b3IuYWRkKHBhdHRlcm5zLmdldChqKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIC8vIHdoaXRlU3BhY2UKLSAgaWYgKHdoaXRlU3BhY2UgPT0gbnVsbCkgewotICAgIFhTRFdoaXRlU3BhY2VGYWNldCB4c2RXaGl0ZVNwYWNlRmFjZXQgPSBjdXJyVHlwZS5nZXRXaGl0ZVNwYWNlRmFjZXQoKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmICh4c2RXaGl0ZVNwYWNlRmFjZXQgIT0gbnVsbCkKLSAgICAgIHdoaXRlU3BhY2UgPSB4c2RXaGl0ZVNwYWNlRmFjZXQuZ2V0VmFsdWUoKS5nZXROYW1lKCk7Ci0gIH0KLSAgLy8gbWluIGluL2V4Y2x1c2l2ZQotICBpZiAobWluID09IG51bGwgKSB7Ci0gICAgWFNETWluRXhjbHVzaXZlRmFjZXQgeHNkTWluRXhjbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5FeGNsdXNpdmVGYWNldCgpOwotICAgIFhTRE1pbkluY2x1c2l2ZUZhY2V0IHhzZE1pbkluY2x1c2l2ZUZhY2V0ID0gY3VyclR5cGUuZ2V0TWluSW5jbHVzaXZlRmFjZXQoKTsKLSAgICBpZiAoeHNkTWluRXhjbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWluID0geHNkTWluRXhjbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1pbkV4Y2x1c2l2ZSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKHhzZE1pbkluY2x1c2l2ZUZhY2V0ICE9IG51bGwpIHsKLSAgICAgIG1pbiA9IHhzZE1pbkluY2x1c2l2ZUZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBtaW5FeGNsdXNpdmUgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgLy8gbWF4IGluL2V4Y2x1c2l2ZQotICBpZiAobWF4ID09IG51bGwpIHsKLSAgICBYU0RNYXhFeGNsdXNpdmVGYWNldCB4c2RNYXhFeGNsdXNpdmVGYWNldCA9IGN1cnJUeXBlLmdldE1heEV4Y2x1c2l2ZUZhY2V0KCk7Ci0gICAgWFNETWF4SW5jbHVzaXZlRmFjZXQgeHNkTWF4SW5jbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNYXhJbmNsdXNpdmVGYWNldCgpOwotICAgIGlmICh4c2RNYXhFeGNsdXNpdmVGYWNldCAhPSBudWxsKSB7Ci0gICAgICBtYXggPSB4c2RNYXhFeGNsdXNpdmVGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgbWF4RXhjbHVzaXZlID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeHNkTWF4SW5jbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWF4ID0geHNkTWF4SW5jbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1heEV4Y2x1c2l2ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotICAvLyB0b3RhbERpZ2l0cwotICBpZiAodG90YWxEaWdpdHMgPCAwKSB7Ci0gICAgWFNEVG90YWxEaWdpdHNGYWNldCB4c2RUb3RhbERpZ2l0c0ZhY2V0ID0gY3VyclR5cGUuZ2V0VG90YWxEaWdpdHNGYWNldCgpOwotICAgIGlmICh4c2RUb3RhbERpZ2l0c0ZhY2V0ICE9IG51bGwpCi0gICAgICB0b3RhbERpZ2l0cyA9IHhzZFRvdGFsRGlnaXRzRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyBmcmFjdGlvbkRpZ2l0cwotICBpZiAoZnJhY3Rpb25EaWdpdHMgPCAwKSB7Ci0gICAgWFNERnJhY3Rpb25EaWdpdHNGYWNldCB4c2RGcmFjdGlvbkRpZ2l0c0ZhY2V0ID0gY3VyclR5cGUuZ2V0RnJhY3Rpb25EaWdpdHNGYWNldCgpOwotICAgIGlmICh4c2RGcmFjdGlvbkRpZ2l0c0ZhY2V0ICE9IG51bGwpCi0gICAgICBmcmFjdGlvbkRpZ2l0cyA9IHhzZEZyYWN0aW9uRGlnaXRzRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyB3YWxrIHRvIGJhc2UgdHlwZQotICBjdXJyVHlwZSA9IGN1cnJUeXBlLmdldEJhc2VUeXBlRGVmaW5pdGlvbigpOwotfQotJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CQVNFX1RZUEUiKSU+Ci0gICAgPC90aD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8JT1YU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpLmdldE5hbWUoKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTwlCi1TdHJpbmcgbWluTGVuZ3RoU3RyaW5nID0gKG1pbkxlbmd0aCA8IDApID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBTdHJpbmcudmFsdWVPZihtaW5MZW5ndGgpOwotU3RyaW5nIG1heExlbmd0aFN0cmluZyA9IChtYXhMZW5ndGggPCAwKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogU3RyaW5nLnZhbHVlT2YobWF4TGVuZ3RoKTsKLVN0cmluZ1tdIGxlbmd0aFZhbHVlcyA9IHttaW5MZW5ndGhTdHJpbmcsIG1heExlbmd0aFN0cmluZ307Ci1pZiAobWluTGVuZ3RoID49IDAgfHwgbWF4TGVuZ3RoID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MRU5HVEgiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEVOR1RIX1ZBTFVFIiwgbGVuZ3RoVmFsdWVzKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KLQotPCUKLWlmIChwYXR0ZXJuVmVjdG9yLnNpemUoKSA+IDApIHsKLSAgU3RyaW5nIHBhdHRlcm5Db250YWluZXJJRCA9ICI6OnBhdHRlcm4iOwotICBTdHJpbmcgeHBhdHRlcm5Db250YWluZXJJRCA9ICJ4OjpwYXR0ZXJuIjsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1wYXR0ZXJuQ29udGFpbmVySUQlPicsJzwlPXhwYXR0ZXJuQ29udGFpbmVySUQlPicpIj48aW1nIG5hbWU9IjwlPXhwYXR0ZXJuQ29udGFpbmVySUQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUEFUVEVSTiIpJT48L3N0cm9uZz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPXBhdHRlcm5Db250YWluZXJJRCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVRURVJOIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDwlCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBwYXR0ZXJuVmVjdG9yLnNpemUoKTsgaysrKSB7Ci0gICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICA8JT0oU3RyaW5nKXBhdHRlcm5WZWN0b3IuZ2V0KGspJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgPC90YWJsZT4KLSAgPC9zcGFuPgotPCUKLX0KLSU+Ci0KLTwlCi1pZiAod2hpdGVTcGFjZSAhPSBudWxsKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV0hJVEVTUEFDRSIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT13aGl0ZVNwYWNlJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotU3RyaW5nIGxvd2VyQm91bmQ7Ci1pZiAobWluRXhjbHVzaXZlKQotICBsb3dlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUlOX0VYQ0xVU0lWRSIsIChtaW4gPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1pbi50b1N0cmluZygpKTsKLWVsc2UKLSAgbG93ZXJCb3VuZCA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01JTl9JTkNMVVNJVkUiLCAobWluID09IG51bGwpID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBtaW4udG9TdHJpbmcoKSk7Ci1TdHJpbmcgdXBwZXJCb3VuZDsKLWlmIChtYXhFeGNsdXNpdmUpCi0gIHVwcGVyQm91bmQgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfRVhDTFVTSVZFIiwgKG1heCA9PSBudWxsKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogbWF4LnRvU3RyaW5nKCkpOwotZWxzZQotICB1cHBlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFYX0lOQ0xVU0lWRSIsIChtYXggPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1heC50b1N0cmluZygpKTsKLWlmIChtaW4gIT0gbnVsbCB8fCBtYXggIT0gbnVsbCkgewotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JBTkdFX09GX1ZBTFVFUyIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT1sb3dlckJvdW5kICsgdXBwZXJCb3VuZCU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KLQotPCUKLWlmICh0b3RhbERpZ2l0cyA+PSAwKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVE9UQUxfRElHSVRTIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlPXRvdGFsRGlnaXRzJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotaWYgKGZyYWN0aW9uRGlnaXRzID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GUkFDVElPTl9ESUdJVFMiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9ZnJhY3Rpb25EaWdpdHMlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmRkNGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotU3RyaW5nW10gbGFiZWxBcmdzID0ge2ZyYWcuZ2V0TmFtZSgpLCAoeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKX07Ci1TdHJpbmdbXSBwYXJhbXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FUT01JQ19OQU1FX1RZUEUiLCBsYWJlbEFyZ3MpJT4KLSAgICA8L3RoPgotICAgIDx0ZCBoZWFkZXJzPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSgocGFyYW1zICE9IG51bGwgJiYgcGFyYW1zLmxlbmd0aCA+IDApID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhwYXJhbXNbMF0pIDogd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTlVMTCIpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgaWYgKHBhcmFtcyAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPjwvdGQ+Ci0gICAgICAgIDx0ZCBoZWFkZXJzPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKHBhcmFtc1tpXSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8JQotICAgIH0KLSAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjY4ZDc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gYWRkU2ltcGxlQXRvbWljUm93cyh0YWJsZUNvbnRhaW5lcklELCBpZCwgbmFtZSwgdmFsdWUsIG1heE9jY3VycykgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoaW5wdXQpOwotICAgIGlucHV0LnR5cGUgPSAidGV4dCI7Ci0gICAgaW5wdXQuaWQgPSBpZDsKLSAgICBpbnB1dC5uYW1lID0gbmFtZTsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKQotICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTsKLSAgICBpbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotPC9zY3JpcHQ+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9WQUxVRVMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9dmFsdWVzW2ldJT4nLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLWZvciAoIDsgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBhZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljMjMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdEZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZUxpc3RGcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVMaXN0RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUlYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi1mb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gIFN0cmluZyBjaGlsZEZyYWdJRDsKLSAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgY2hpbGRGcmFnSUQgPSBjaGlsZEZyYWcuZ2V0SUQoKTsKLSAgfQotICBlbHNlIHsKLSAgICBjaGlsZEZyYWdJRCA9IGZyYWcuY3JlYXRlTGlzdEluc3RhbmNlKCk7Ci0gICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gIH0KLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPCUKLX0KLSU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzI4NjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykgewotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnc1tpXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotfQotJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2ViYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0lURU1TIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVMaXN0SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkODM0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlVW5pb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hhbmdlVW5pb25NZW1iZXJUeXBlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5JT05fVFlQRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5JT05fTUVNQkVSUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbltdIG1lbWJlclR5cGVzID0gZnJhZy5nZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgSVhTREZyYWdtZW50W10gbWVtYmVyRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgaW50IHR5cGVTZWxlY3Rpb25JbmRleCA9IDA7Ci0gICAgU3RyaW5nW10gbmV3TWVtYmVyRnJhZ0lEcyA9IG5ldyBTdHJpbmdbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBJWFNERnJhZ21lbnRbXSBuZXdNZW1iZXJGcmFncyA9IG5ldyBJWFNERnJhZ21lbnRbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG1lbWJlclR5cGVzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBpZiAoaSA8IG1lbWJlckZyYWdzLmxlbmd0aCAmJiBtZW1iZXJGcmFnc1tpXS5nZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldFFOYW1lKCkuZXF1YWxzKG1lbWJlclR5cGVzW2pdLmdldFFOYW1lKCkpKSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBtZW1iZXJGcmFnc1tpXS5nZXRJRCgpOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IG1lbWJlckZyYWdzW2ldOwotICAgICAgICB0eXBlU2VsZWN0aW9uSW5kZXggPSBqOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBmcmFnLmNyZWF0ZVVuaW9uSW5zdGFuY2Uoaik7Ci0gICAgICAgIG5ld01lbWJlckZyYWdzW2pdID0gZnJhZy5nZXRGcmFnbWVudChuZXdNZW1iZXJGcmFnSURzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNoYW5nZVVuaW9uTWVtYmVyVHlwZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1VOSU9OX1RZUEUiKSU+Ij4KLSAgICAgICAgICA8JQotICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICAgIGlmIChrID09IHR5cGVTZWxlY3Rpb25JbmRleCkgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1uZXdNZW1iZXJGcmFnSURzW2tdJT4iIHNlbGVjdGVkPjwlPW1lbWJlclR5cGVzW2tdLmdldFFOYW1lKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiI+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgICU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBsKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChuZXdNZW1iZXJGcmFnSURzW2xdKTsKLSAgICAgICAgICBTdHJpbmcgbWVtYmVyVGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKG5ld01lbWJlckZyYWdzW2xdLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzcGFuIGlkPSI8JT1tZW1iZXJUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1uZXdNZW1iZXJGcmFnc1tsXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC9zcGFuPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICBzaG93VGFibGUoJzwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPicsIDwlPShsID09IHR5cGVTZWxlY3Rpb25JbmRleCklPik7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU2MWZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlVW5pb25GcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVVbmlvbkZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwlCi19Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU2MTEwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlVW5pb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNoYW5nZVVuaW9uTWVtYmVyVHlwZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9UWVBFIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwMCUiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9NRU1CRVJTIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gbWVtYmVyVHlwZXMgPSBmcmFnLmdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICBJWFNERnJhZ21lbnRbXSBtZW1iZXJGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVyRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIGludCB0eXBlU2VsZWN0aW9uSW5kZXggPSAwOwotICAgIFN0cmluZ1tdIG5ld01lbWJlckZyYWdJRHMgPSBuZXcgU3RyaW5nW21lbWJlclR5cGVzLmxlbmd0aF07Ci0gICAgSVhTREZyYWdtZW50W10gbmV3TWVtYmVyRnJhZ3MgPSBuZXcgSVhTREZyYWdtZW50W21lbWJlclR5cGVzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGorKykgewotICAgICAgaWYgKGkgPCBtZW1iZXJGcmFncy5sZW5ndGggJiYgbWVtYmVyRnJhZ3NbaV0uZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXRRTmFtZSgpLmVxdWFscyhtZW1iZXJUeXBlc1tqXS5nZXRRTmFtZSgpKSkgewotICAgICAgICBuZXdNZW1iZXJGcmFnSURzW2pdID0gbWVtYmVyRnJhZ3NbaV0uZ2V0SUQoKTsKLSAgICAgICAgbmV3TWVtYmVyRnJhZ3Nbal0gPSBtZW1iZXJGcmFnc1tpXTsKLSAgICAgICAgdHlwZVNlbGVjdGlvbkluZGV4ID0gajsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBuZXdNZW1iZXJGcmFnSURzW2pdID0gZnJhZy5jcmVhdGVVbmlvbkluc3RhbmNlKGopOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IGZyYWcuZ2V0RnJhZ21lbnQobmV3TWVtYmVyRnJhZ0lEc1tqXSk7Ci0gICAgICB9Ci0gICAgfQotICAgICU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hhbmdlVW5pb25NZW1iZXJUeXBlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfVU5JT05fVFlQRSIpJT4iPgotICAgICAgICAgIDwlCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKGsgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiIgc2VsZWN0ZWQ+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9bmV3TWVtYmVyRnJhZ0lEc1trXSU+Ij48JT1tZW1iZXJUeXBlc1trXS5nZXRRTmFtZSgpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGwrKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKG5ld01lbWJlckZyYWdJRHNbbF0pOwotICAgICAgICAgIFN0cmluZyBtZW1iZXJUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQobmV3TWVtYmVyRnJhZ3NbbF0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPHNwYW4gaWQ9IjwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPW5ld01lbWJlckZyYWdzW2xdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3NwYW4+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgIHNob3dUYWJsZSgnPCU9bWVtYmVyVGFibGVDb250YWluZXJJRCU+JywgPCU9KGwgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSU+KTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25fZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYzQwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYzQwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL29wZW5fd3NkbF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU1YmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU1YmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9iaW5kaW5nX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzg2YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX29wZXJhdGlvbl9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxMWJhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMDhiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzBjZGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL2ZyYWdtZW50dGFibGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLQotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciB4c2RJbmZvRGlhbG9nOwotICB2YXIgeHNkSW5mb0RpYWxvZ0Nsb3NlZCA9IHRydWU7Ci0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLSAgdmFyIHVuYm91bmRlZCA9IDwlPUZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCU+OwotCi0gIGZ1bmN0aW9uIGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAobWF4T2NjdXJzICE9IHVuYm91bmRlZCAmJiAodGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3MpID49IG1heE9jY3VycykgewotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX01BWF9PQ0NVUlNfVklPTEFUSU9OIikpJT4iKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklELCBtaW5PY2N1cnMpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgcm93c0xlbmd0aCA9IHRhYmxlLnJvd3MubGVuZ3RoIC0gbnVtYmVyT2ZIZWFkZXJSb3dzOwotICAgIHZhciBjaGVja2VkUm93cyA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93czsgaSA8IHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNoZWNrZWRSb3dzKys7Ci0gICAgfQotICAgIGlmIChjaGVja2VkUm93cyA9PSAwKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSklPiIpOwotICAgIGVsc2UgaWYgKChyb3dzTGVuZ3RoIC0gY2hlY2tlZFJvd3MpIDwgbWluT2NjdXJzKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX01JTl9PQ0NVUlNfVklPTEFUSU9OIikpJT4iKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJRCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzQXR0cmlidXRlKHRhYmxlQ29udGFpbmVySUQsIG1pbk9jY3VycykgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciByb3dzTGVuZ3RoID0gdGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3M7Ci0gICAgdmFyIGNoZWNrZWRSb3dzID0gMDsKLSAgICBmb3IgKHZhciBpID0gbnVtYmVyT2ZIZWFkZXJSb3dzOyBpIDwgdGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2hlY2tlZFJvd3MrKzsKLSAgICB9Ci0gICAgaWYgKGNoZWNrZWRSb3dzID09IDApCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpKSU+Iik7Ci0gICAgZWxzZSBpZiAoKHJvd3NMZW5ndGggLSBjaGVja2VkUm93cykgPCBtaW5PY2N1cnMpCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTUlOX09DQ1VSU19WSU9MQVRJT04iKSklPiIpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVNlbGVjdGVkUm93c0F0dHJpYnV0ZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgfQotICAKLSAgCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWREYXRlVGltZVJvd3MoY2FsZW5kYXJUeXBlLHRhYmxlQ29udGFpbmVySUQsbWluT2NjdXJzKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIG5ld0NhbGVuZGFyVGFyZ2V0Um93ID0gY2FsZW5kYXJUYXJnZXRSb3c7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGktbnVtYmVyT2ZIZWFkZXJSb3dzID09IGNhbGVuZGFyVGFyZ2V0Um93KQotICAgICAgICAgIG5ld0NhbGVuZGFyVGFyZ2V0Um93ID0gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdDYWxlbmRhclRhcmdldFJvdy0tOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3Q2FsZW5kYXJUYXJnZXRSb3cgPT0gLTEpCi0gICAgICBjbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICAgIGNhbGVuZGFyVGFyZ2V0Um93ID0gbmV3Q2FsZW5kYXJUYXJnZXRSb3c7Ci0gICAgICAKLSAgICBjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklELG1pbk9jY3Vycyk7Ci08JQotICAgLy8gRml4IHRoZSBicm93c2UuLi4gbGlua3MuCi0lPgotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBkYXRlVGltZVRleHRGaWVsZCA9IGNvbHVtbnMuaXRlbSgxKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihjb2x1bW5zLml0ZW0oMikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKS5pdGVtKDApLGNhbGVuZGFyVHlwZSxkYXRlVGltZVRleHRGaWVsZC5uYW1lLGktbnVtYmVyT2ZIZWFkZXJSb3dzKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMsIGZyYWdtZW50SUQsIG5hbWVBbmNob3JJRCkgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIG5ld0NvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgbmV3Q29sdW1uLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEJT4iLCBmcmFnbWVudElEKSk7Ci0gICAgbmV3Q29sdW1uLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEJT4iLCBuYW1lQW5jaG9ySUQpKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q29sdW1uKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIik7Ci0gICAgZm9ybVswXS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIGZvcm1bMF0uc3VibWl0KCk7Ci0gIH0KLQotICBmdW5jdGlvbiBvcGVuWFNESW5mb0RpYWxvZyhsaW5rKSB7Ci0gICAgeHNkSW5mb0RpYWxvZyA9IHdpbmRvdy5vcGVuKGxpbmssICJYU0RJbmZvcm1hdGlvbkRpYWxvZyIsICJoZWlnaHQ9NTAwLHdpZHRoPTUwMCxzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAoeHNkSW5mb0RpYWxvZy5mb2N1cykKLSAgICAgIHhzZEluZm9EaWFsb2cuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlWFNESW5mb0RpYWxvZygpCi0gIHsKLSAgICBpZiAoIXhzZEluZm9EaWFsb2dDbG9zZWQpCi0gICAgICB4c2RJbmZvRGlhbG9nLmNsb3NlKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzeW5jaHJvbml6ZUZyYWdtZW50Vmlld3Modmlld0lEKSB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpOwotICAgIGlmICh2aWV3SUQgPT0gIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFJT4iKQotICAgICAgZm9ybVswXS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lEJT4iLCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSU+IikpOwotICAgIGVsc2UKLSAgICAgIGZvcm1bMF0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19JRCU+IiwiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0lPiIpKTsKLSAgICBmb3JtWzBdLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIGZvcm1bMF0uc3VibWl0KCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyhjYWxlbmRhclR5cGUsdGFibGVDb250YWluZXJJRCxpZCxuYW1lLHZhbHVlLG1heE9jY3VycykgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBpbnB1dC50eXBlID0gInRleHQiOwotICAgIGlucHV0LmlkID0gaWQ7Ci0gICAgaW5wdXQubmFtZSA9IG5hbWU7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkKLSAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7Ci0gICAgaW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGlucHV0KTsKLSAgICAKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGNyZWF0ZURhdGVUaW1lQnJvd3NlTGluayhjYWxlbmRhclR5cGUsbmFtZSx0YWJsZS5yb3dzLmxlbmd0aC0xKSk7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI5MCUiOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0gIAotICAKLSAgZnVuY3Rpb24gY3JlYXRlRGF0ZVRpbWVCcm93c2VMaW5rKGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKQotICB7Ci0gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihsaW5rLGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKTsKLSAgICBsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIikpJT4iKSk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVUaW1lQnJvd3NlTGlua0hyZWYobGluayxjYWxlbmRhclR5cGUsbmFtZSxwb3NpdGlvbikKLSAgewotICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0Om9wZW5DYWxlbmRhckJyb3dzZXIoIitjYWxlbmRhclR5cGUrIiwnY29udGVudGJvcmRlcicsJyIrbmFtZSsiJywiK3Bvc2l0aW9uKyIpIjsKLSAgICByZXR1cm4gbGluazsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGMzODQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjUwOWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgd3NkbE5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2RsTmF2aWdhdG9yVG9vbGJhciA9IHdzZGxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIHdzZGxOYXZpZ2F0b3JDb250ZW50ID0gd3NkbE5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgd3NkbEFjdGlvbnNDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyID0gd3NkbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxQcm9wZXJ0aWVzVG9vbGJhciA9IHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NkbFByb3BlcnRpZXNDb250ZW50ID0gd3NkbFByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciB3c2RsU3RhdHVzQ29udGFpbmVyID0gd3NkbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIlPiJdOwotICB2YXIgd3NkbFN0YXR1c1Rvb2xiYXIgPSB3c2RsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2RsU3RhdHVzQ29udGVudCA9IHdzZGxTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zb2FwX2VudmVsb3BlX3htbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZWVjOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+PCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQveG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuKiIgJT48anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz48JQotaW50IHNvYXBFbnZlbG9wZVR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFKSk7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSB3c2RsUGVyc3BlY3RpdmUuZ2V0T3BlcmF0aW9uTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci1JU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2U7Ci1zd2l0Y2ggKHNvYXBFbnZlbG9wZVR5cGUpCi17Ci0gIGNhc2UgV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVRVUVTVDoKLSAgICBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNUKTsKLSAgICBicmVhazsKLSAgY2FzZSBXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVNQT05TRToKLSAgZGVmYXVsdDoKLSAgICBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSk7Ci0gICAgYnJlYWs7Ci19Ci1TdHJpbmcgbWVzc2FnZXMgPSBzb2FwTWVzc2FnZS50b1hNTCgpOwotJT48JT1tZXNzYWdlcyU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDkzYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfYWN0aW9uc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfc3RhdHVzX2NvbnRhaW5lci5qc3AiKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyMzcwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9UT09MQkFSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05URU5UJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDVhMjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAgICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotPCUKLSAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgaW50IGZvY3VzZWROb2RlSWQgPSBub2RlTWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICAgfQotJT4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25Mb2FkPSJzZWxmLmxvY2F0aW9uLmhhc2g9JyM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+JztzZXRTZWxlY3RlZEFuY2hvck5hbWUoJzwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+JykiIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gICAgPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotICAgICAgICA8JT1ub2RlTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotICAgIDwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjlhNjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICBlbHNlCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9OQVZJR0FUT1IiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0UmVmcmVzaCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0giKTsKLSAgIFN0cmluZyBhbHRDbGVhciA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NMRUFSIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVmcmVzaCU+IiB0aXRsZT0iPCU9YWx0UmVmcmVzaCU+Ij48L2E+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTIxNTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxmcmFtZXNldCBjb2xzPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDwlCi0gIGlmIChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5pc1JUTCgpKQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNjkyMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmU0ODI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYTI3NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0FDVElPTlMiKSU+PC90ZD4KLTwlCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOyBpKyspIHsKLSAgICAgICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0gICAgICAgICAgICAlPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci0gICAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotJT4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyNzEyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgaW50IHZpZXdJRCA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRTdGF0dXNDb250ZW50VHlwZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHN3aXRjaFJlYWRPbmx5RnJhZ21lbnRzVmlldygpIHsKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N3aXRjaFJlYWRPbmx5RnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgICAgICBpZiAodmlld0lEID09IHdzZGxQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFKQotICAgICAgICB7ICAgICAKLSU+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzd2l0Y2hSZWFkT25seUZyYWdtZW50c1ZpZXcoKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX0ZPUk1fVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRk9STSIpJT48L2E+Ci08JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotJT4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFJlYWRPbmx5RnJhZ21lbnRzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1NPVVJDRSIpJT48L2E+Ci08JQotICAgICAgICB9Ci0lPiAgIAotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLSAgaWYgKHZpZXdJRCA9PSB3c2RsUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSkKLSAgewotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNTb2FwVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UKLSAgewotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNGb3JtVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDg4NDI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyBzdGF0dXNDb250ZW50U3JjID0gIndzZGxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgIHN3aXRjaCAod3NkbFBlcnNwZWN0aXZlLmdldFN0YXR1c0NvbnRlbnRUeXBlKCkpCi0gICB7Ci0gICAgIGNhc2UgV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNOgotICAgICAgIHN0YXR1c0NvbnRlbnRTcmMgPSAid3NkbF9yZXN1bHRfY29udGVudC5qc3AiOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFOgotICAgICAJc3RhdHVzQ29udGVudFNyYyA9ICJ3c2RsX3Jlc3VsdF9jb250ZW50LmpzcCI7Ci0gICAgIAlicmVhazsKLSAgIH0KLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19UT09MQkFSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9zdGF0dXNfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChzdGF0dXNDb250ZW50U3JjKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yzc5MWRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0Jb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICB3c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX0RFRkFVTFQpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxwcmU+Ci08JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5nZXRNZXNzYWdlc0Zyb21MaXN0KCkpJT4KLSAgICAgICAgPC9wcmU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmMjdjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3N0YXR1cy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWI2Y2RkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9icm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFN0cmluZyB3c2RsVHlwZVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XU0RMX1RZUEUpOwotICAgaW50IHdzZGxUeXBlID0gQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRTsKLSAgIHRyeQotICAgewotICAgICB3c2RsVHlwZSA9IEludGVnZXIucGFyc2VJbnQod3NkbFR5cGVTdHJpbmcpOwotICAgfQotICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgewotICAgfQotICAgY29udHJvbGxlci5zZXRXU0RMVHlwZSh3c2RsVHlwZSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT4KLTwlCi0gICBTdHJpbmcgd3NkbFNvdXJjZTsKLSAgIGlmICh3c2RsVHlwZSA9PSBBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFKQotICAgICB3c2RsU291cmNlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0VTIik7Ci0gICBlbHNlCi0gICAgIHdzZGxTb3VyY2UgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIldTRExfVFlQRV9TRVJWSUNFUyIpOwotICAgICAKLSAgIFN0cmluZ0J1ZmZlciBzZXNzaW9uSWRQYXJhbSA9IG5ldyBTdHJpbmdCdWZmZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBzZXNzaW9uSWRQYXJhbS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIAotICAgU3RyaW5nQnVmZmVyIHRvb2xiYXJMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbF90b29sYmFyLmpzcD8iKTsKLSAgIHRvb2xiYXJMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSU+Ci0gICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9XU0RMX0JST1dTRVIiLHdzZGxTb3VyY2UpJT4KLSAgPC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuV1NETF9UT09MQkFSJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRvb2xiYXJMaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLldTRExfQ09OVEVOVCU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9XU0RMX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLCJ3c2RsX2NvbnRlbnQuanNwIikpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjIzZjI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA1MjQgICAxNDI0OTkgamVmZmxpdUBjYS5pYm0uY29tIC0gSmVmZnJleSBMaXUKLSAqIDIwMDcwMTA5ICAgMTY5NTUzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA4MDYxOCAgIDE4NjQ1NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldlYlNlcnZpY2VGaW5kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlQ2F0ZWdvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIGludCB3c2RsVHlwZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFR5cGUoKTsKLSAgIAotICAgVmVjdG9yIHdzSW5mb0NhY2hlID0gbmV3IFZlY3RvcigpOwotICAgaW50IHdvcmtzcGFjZVN0YXJ0ID0gLTE7Ci0gICBpbnQgd29ya3NwYWNlRW5kICAgPSAtMTsKLSAgIAotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9XU0RMX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAKLSAgCi0gIGZ1bmN0aW9uIGZpbGxDYXRlZ29yaWVzKCkKLSAgewotICAgIHZhciB5ID0gMDsKLSAgICB2YXIgeCA9IDA7Ci0gICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0FsbCIpJT4iLCI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9BbGwiKSU+Iik7Ci0gICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9GQVZPUklURVMiKSU+IiwiPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUyIpJT4iKTsKLTwlCi0gICB7Ci0gICAgIFdlYlNlcnZpY2VDYXRlZ29yeVtdIGNhdGVnb3JpZXMgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCkuZ2V0V2ViU2VydmljZUNhdGVnb3JpZXMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0ZWdvcmllcy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgU3RyaW5nIGxhYmVsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKGNhdGVnb3JpZXNbaV0uZ2V0TGFiZWwoKSk7Ci0gICAgICAgaWYoY2F0ZWdvcmllc1tpXS5nZXRJZCgpLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLmNhdGVnb3J5LndvcmtzcGFjZSIpKXsKLSU+Ci0gICAgdmFyIHkgPSB4OwotPCUgICAgCi0gICAgICAgfSAgICAKLSU+ICAgIAotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPWxhYmVsJT4iLCI8JT1sYWJlbCU+Iik7Ci08JSAgICAgICAKLSAgICAgfQotICAgfSAKLSU+Ci0gICAgaWYgKGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+Lm9wdGlvbnMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3ldLnNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgIGZpbGxXU0RMRmlsZXNCeUNhdGVnb3J5KGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+Lm9wdGlvbnNbeV0udmFsdWUpOwotICAgIH0KLSAgCi0gIH0gICAgCi0gIAotICBmdW5jdGlvbiBmaWxsV2ViUHJvamVjdHMoKQotICB7Ci0gICAgdmFyIHggPSAwOwotPCUKLSAgIHsKLSAgICAgSVdvcmtzcGFjZVJvb3QgaVdvcmtzcGFjZVJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICBJUHJvamVjdFtdIHByb2plY3RzID0gaVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8cHJvamVjdHMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIGlmICghcHJvamVjdHNbaV0uaXNPcGVuKCkpCi0gICAgICAgICBjb250aW51ZTsKLSAgICAgICBTdHJpbmcgbmFtZSA9IEhUTUxVdGlscy5KU01hbmdsZShwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUFJPSkVDVCU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPW5hbWUlPiIsIjwlPW5hbWUlPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICBpZiAoZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlBST0pFQ1QlPi5vcHRpb25zLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlBST0pFQ1QlPi5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgIGZpbGxXU0RMRmlsZXMoZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlBST0pFQ1QlPi5vcHRpb25zWzBdLnZhbHVlKTsKLSAgICB9Ci0gIH0KLQotPCUhIHByaXZhdGUgVmVjdG9yIHdzZGxVUkxzXyA9IG5ldyBWZWN0b3IoKTsgJT4KLQotICAgZnVuY3Rpb24gZmlsbFdTRExGaWxlc0J5Q2F0ZWdvcnkod2ViU2VydmljZUZpbmRlckxhYmVsKQotICAgewotICAgIHZhciBjdXJyZW50TnVtYmVyT2ZPcHRpb25zID0gZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zLmxlbmd0aDsKLSAgICBmb3IgKHZhciBpPTA7aTxjdXJyZW50TnVtYmVyT2ZPcHRpb25zO2krKykKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1swXSA9IG51bGw7Ci0gICAgaWYgKHdlYlNlcnZpY2VGaW5kZXJMYWJlbCA9PSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0FsbCIpKSU+Iil7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvamVjdHMiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyAKLSAgICAgIGZpbGxBbGxXU0RMRmlsZXMoKTsKLSAgICB9Ci0gICAgaWYgKHdlYlNlcnZpY2VGaW5kZXJMYWJlbCA9PSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9GQVZPUklURVMiKSklPiIpewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2plY3RzIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgCi0gICAgICBmaWxsRmF2b3JpdGVXU0RMRmlsZXMoKTsKLSAgICB9Ci0gICAgCi08JQotICAgewotICAgICAgICAgCi0gICAgIFdlYlNlcnZpY2VGaW5kZXIgZmluZGVyID0gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpOwotICAgICBXZWJTZXJ2aWNlQ2F0ZWdvcnlbXSBjYXRlZ29yaWVzID0gZmluZGVyLmdldFdlYlNlcnZpY2VDYXRlZ29yaWVzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3JpZXMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIFdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbaV07Ci0lPgotICAgIGlmICh3ZWJTZXJ2aWNlRmluZGVyTGFiZWwgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjYXRlZ29yeS5nZXRMYWJlbCgpKSU+IikKLSAgICB7Ci0gICAgdmFyIHggPSAwOwotICAgICAgICAKLTwlCi0gICAgICAgSXRlcmF0b3IgaXQgPSBmaW5kZXIuZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5KGNhdGVnb3J5LG51bGwpOwotICAgICAgIGlmKGNhdGVnb3J5LmdldElkKCkuZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuY2F0ZWdvcnkud29ya3NwYWNlIikpewotCi0gICAgCSAgIHdvcmtzcGFjZVN0YXJ0ID0gd3NJbmZvQ2FjaGUuc2l6ZSgpOwotICAgIAkgICB3b3Jrc3BhY2VFbmQgICA9IHdvcmtzcGFjZVN0YXJ0OwotICAgIAkgICAKLSAgICAJICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAJICAgd3NJbmZvQ2FjaGUuYWRkKGl0Lm5leHQoKSk7Ci0gICAgICAgIAkgICB3b3Jrc3BhY2VFbmQrKzsKLSAgICAJICAgfQotJT4KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9qZWN0cyIpLnN0eWxlLmRpc3BsYXkgPSAiIjsgCi0gICAgICBmaWxsV2ViUHJvamVjdHMoKTsKLTwlCi0gICAgICAgfQotICAgICAgIGVsc2V7Ci0lPgotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2plY3RzIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIAotPCUgIAotICAgICAgICAgd2hpbGUoaXQuaGFzTmV4dCgpKQotICAgICAgICAgewotICAgICAgICAgICBXZWJTZXJ2aWNlSW5mbyB3c2kgPSAoV2ViU2VydmljZUluZm8paXQubmV4dCgpOwotICAgICAgICAgICBTdHJpbmcgd3NkbCA9IEhUTUxVdGlscy5KU01hbmdsZSh3c2kuZ2V0V3NkbFVSTCgpKTsKLSU+Ci0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPXdzZGwlPiIsICI8JT13c2RsJT4iKTsgCi08JQotICAgICAgICAgICB3c0luZm9DYWNoZS5hZGQod3NpKTsKLSAgICAgICAgIH0KLSAgICAgICB9Ci0lPgotICAgIH0KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpbGxBbGxXU0RMRmlsZXMoKQotICB7Ci0gICAgdmFyIHggPSAwOwotICAgIHZhciBjdXJyZW50TnVtYmVyT2ZPcHRpb25zID0gZG9jdW1lbnQuZm9ybXNbMF0ud2ViUHJvamVjdFdTRExVUkwub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS53ZWJQcm9qZWN0V1NETFVSTC5vcHRpb25zWzBdID0gbnVsbDsKLTwlCi0gICAgIFRyZWVTZXQgdXJscyA9IG5ldyBUcmVlU2V0KCk7Ci0gICAgIEl0ZXJhdG9yIHdzSXRlcmF0b3IgPSB3c0luZm9DYWNoZS5pdGVyYXRvcigpOwotICAgICB3aGlsZSAod3NJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgIHsKLSAgICAgICBXZWJTZXJ2aWNlSW5mbyB3c0luZm8gPSAoV2ViU2VydmljZUluZm8pd3NJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgU3RyaW5nIHdzZGwgPSBIVE1MVXRpbHMuSlNNYW5nbGUod3NJbmZvLmdldFdzZGxVUkwoKSk7Ci0gICAgICAgdXJscy5hZGQod3NkbCk7Ci0gICAgIH0KLSAgICAgCi0gICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICBOb2RlTWFuYWdlciBmYXZvcml0ZXNOb2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgIFRyZWVFbGVtZW50IGZhdm9yaXRlc01haW5FbGVtZW50ID0gZmF2b3JpdGVzTm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICBUcmVlRWxlbWVudCBmYXZvcml0ZVdTRExTZXJ2aWNlc0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpKGZhdm9yaXRlc01haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICAgICBFbnVtZXJhdGlvbiBmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMgPSBmYXZvcml0ZVdTRExTZXJ2aWNlc0VsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKTsKLSAgICAgd2hpbGUgKGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgewotICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgU3RyaW5nIHdzZGwgPSBIVE1MVXRpbHMuSlNNYW5nbGUoKGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKS5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0TG9jYXRpb24oKSk7Ci0gICAgICAgdXJscy5hZGQod3NkbCk7Ci0gICAgIH0KLSAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB1cmxzLml0ZXJhdG9yKCk7Ci0gICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSl7Ci0gICAgICAgU3RyaW5nIHdzZGwgPSBIVE1MVXRpbHMuSlNNYW5nbGUoaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwotJT4KLSAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT13c2RsJT4iLCAiPCU9d3NkbCU+Iik7IAotPCUKLQotICAgICB9Ci0gICAKLSU+ICAgICAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpbGxXU0RMRmlsZXMoc2VsZWN0ZWRXZWJQcm9qZWN0TmFtZSkKLSAgewotICAgIHZhciBjdXJyZW50TnVtYmVyT2ZPcHRpb25zID0gZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zLmxlbmd0aDsKLSAgICBmb3IgKHZhciBpPTA7aTxjdXJyZW50TnVtYmVyT2ZPcHRpb25zO2krKykKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1swXSA9IG51bGw7Ci08JQotICAgewotCi0gICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgCi0gICAgIGZvciAoaW50IGk9MDtpPHByb2plY3RzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKQotICAgICAgICAgY29udGludWU7Ci0gICAgICAgewotJT4KLSAgICBpZiAoc2VsZWN0ZWRXZWJQcm9qZWN0TmFtZSA9PSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHByb2plY3RzW2ldLmdldE5hbWUoKSklPiIpCi0gICAgewotICAgICAgdmFyIHg9MDsKLTwlCi0gICAgICAgICBTdHJpbmcgcGxhdGZvcm1Qcm90b2NvbCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOwotICAgICAgICAgU3RyaW5nIGh0dHBQcm90b2NvbCA9ICJodHRwOi8vIjsKLSAgICAgICAgIFN0cmluZyBodHRwc1Byb3RvY29sID0gImh0dHBzOi8vIjsKLSAgICAgICAgIHdzZGxVUkxzXy5yZW1vdmVBbGxFbGVtZW50cygpOwotCi0JCSBJdGVyYXRvciB3cyA9IHdzSW5mb0NhY2hlLnN1Ykxpc3Qod29ya3NwYWNlU3RhcnQsIHdvcmtzcGFjZUVuZCkuaXRlcmF0b3IoKTsKLQotICAgICAgICAgd2hpbGUgKHdzLmhhc05leHQoKSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIFdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IChXZWJTZXJ2aWNlSW5mbyl3cy5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsID0gd3NJbmZvLmdldFdzZGxVUkwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgIC8vIGZpbHRlciB3c2RsIFVSTHMgd2l0aCBzYW1lIHByb2plY3QgbmFtZSBhcyBzZWxlY3RlZCBwcm9qZWN0Ci0gICAgICAgICAgLy8gb25seSBsb29rIGF0IHdvcmtzcGFjZSBVUkxzIHJldHVybmVkIGZyb20gdGhlIHdlYiBzZXJ2aWNlIGZpbmRlcgotICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChwbGF0Zm9ybVByb3RvY29sKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgLy9zdHJpcCBvZmYgcGxhdGZvcm1Qcm90b2NvbCB0byBsb29rIGF0IHRoZSB3b3Jrc3BhY2UgcGF0aAotICAgICAgICAgICAgIFBhdGggd3NkbFBhdGggPSBuZXcgUGF0aCh1cmwuc3Vic3RyaW5nKHBsYXRmb3JtUHJvdG9jb2wubGVuZ3RoKCkrMSkpOwotICAgICAgICAgICAgIFN0cmluZyBwYXRoUHJvak5hbWUgPSB3c2RsUGF0aC5zZWdtZW50KDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgICAgICAgICBpZiAocGF0aFByb2pOYW1lLmVxdWFscyhwcm9qZWN0c1tpXS5nZXROYW1lKCkpKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHdzZGxVUkxzXy5hZGQodXJsKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGFsc28gYWRkIGFueSBodHRwIG9yIGh0dHBzIFVSTHMgcmV0dXJuZWQKLSAgICAgICAgICBlbHNlIGlmICh1cmwuc3RhcnRzV2l0aChodHRwUHJvdG9jb2wpIHx8IHVybC5zdGFydHNXaXRoKGh0dHBzUHJvdG9jb2wpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHdzZGxVUkxzXy5hZGQodXJsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBpZiAod3NkbFR5cGUgPT0gQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSkKLSAgICAgICAgIHsKLSAgICAgICAgIAotICAgICAgICAgfQotCi0gICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbFVSTHNfLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgU3RyaW5nIHdzZGwgPSBIVE1MVXRpbHMuSlNNYW5nbGUoaXQubmV4dCgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9d3NkbCU+IiwgIjwlPXdzZGwlPiIpOyAKLSAgICAgICAgICAgICA8JQotICAgICAgICAgfQotJT4KLSAgICB9Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotJT4KLSAgfQotICAKLSAgZnVuY3Rpb24gZmlsbEZhdm9yaXRlV1NETEZpbGVzKCkKLSAgewotICAgIHZhciBjdXJyZW50TnVtYmVyT2ZPcHRpb25zID0gZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zLmxlbmd0aDsKLSAgICBmb3IgKHZhciBpPTA7aTxjdXJyZW50TnVtYmVyT2ZPcHRpb25zO2krKykKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1swXSA9IG51bGw7Ci0gICAgdmFyIHggPSAwOwotPCUKLSAgIEVudW1lcmF0aW9uIGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50czIgPSBmYXZvcml0ZVdTRExTZXJ2aWNlc0VsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKTsKLSAgIHdoaWxlIChmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMyLmhhc01vcmVFbGVtZW50cygpKQotICAgewotICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KWZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50czIubmV4dEVsZW1lbnQoKTsKLSAgICAgU3RyaW5nIHVybCA9IEhUTUxVdGlscy5KU01hbmdsZSgoZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRMb2NhdGlvbigpKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT11cmwlPiIsIjwlPXVybCU+Iik7Ci08JSAgICAgCi0gICB9Ci0lPiAgCi0gIAotICB9Ci0gIAotICAKLSAgCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIGZpbGxDYXRlZ29yaWVzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOyAgICAgIAotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgICA8Zm9ybSBzdHlsZT0ibWFyZ2luLXRvcDowIj4KLQotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPiA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TT1VSQ0UiKSU+IDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPGRpdiBpZD0id29ya2JlbmNoIiA+Ci0gICAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PGxhYmVsIGZvcj0iPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0NBVEVHT1JZIiklPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBub3dyYXA+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+IiBvbkNoYW5nZT0iZmlsbFdTRExGaWxlc0J5Q2F0ZWdvcnkodGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0iZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPiAgICAKLSAgICAgICAgICA8ZGl2IGlkPSJwcm9qZWN0cyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPiAgICAgICAgICAKLSAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjxsYWJlbCBmb3I9InByb2plY3QiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9XRUJQUk9KRUNUUyIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwPgotICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0icHJvamVjdCIgbmFtZT0icHJvamVjdCIgb25DaGFuZ2U9ImZpbGxXU0RMRmlsZXModGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVGUkVTSCIpJT4iIG9uQ2xpY2s9ImRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjxsYWJlbCBmb3I9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIG5vd3JhcCBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fR08iKSU+IiBvbkNsaWNrPSJ0b3Aub3BlbmVyLnRhcmdldFdTRExVUkxFbGVtZW50LnZhbHVlPXRoaXMuZm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+LnZhbHVlO3RvcC5jbG9zZSgpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgbm93cmFwIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DQU5DRUwiKSU+IiBvbkNsaWNrPSJ0b3AuY2xvc2UoKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAKLSAgICAgIDwvZm9ybT4KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+ICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2M2FhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25VbmxvYWQ9InRvcC5vcGVuZXIud3NkbFdpbmRvd0Nsb3NlZD10cnVlIiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGwuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfQlJPV1NFUiIpJT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHRvcC5vcGVuZXIud3NkbFdpbmRvd0Nsb3NlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2V4cGxvcmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUwMGMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiJT4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGluaXRXaW5kb3dOYW1lKG5hbWUpCi0gICAgewotICAgICAgd2luZG93Lm5hbWUgPSBuYW1lOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci0gIDwlCi0gIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0gICU+Ci0gIDxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiI+Ci0gICAgPCUhCi0gICAgcHJpdmF0ZSB2b2lkIHJlc2V0Q29udHJvbGxlcihTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbixTdHJpbmcgc2Vzc2lvbklkLEh0dHBTZXNzaW9uIHNlc3Npb24sSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsQ29udHJvbGxlciBjb250cm9sbGVyKXsKLQkgICAgLy8gQWRkIHRoZSBzZXNzaW9uIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBhbGxvd3MgdXMgdG8gcmVzdXJyZWN0IHRoZSBzZXNzaW9uIGV2ZW4gaWYgdGhlIGJyb3dzZXIgY2hvb3NlcyBub3QgdG8gcGFydGljaXBhdGUuCi0JICAgIGFwcGxpY2F0aW9uLnNldEF0dHJpYnV0ZShzZXNzaW9uSWQsc2Vzc2lvbik7Ci0gICAgCi0JICAgIC8vIFNldCBNYXggaW5hY3Rpdml0eSB0aW1lIG91dCB2YWx1ZSB0byAzMG1pbnMuCi0JICAgIHNlc3Npb24uc2V0TWF4SW5hY3RpdmVJbnRlcnZhbCgxODAwKTsKLQkKLQkgICAgLy8gTGF1bmNoT3B0aW9uTWFuYWdlciAoYmVsb3cpIGhhbmRsZXMgbW9zdCBvcHRpb25zLAotCSAgICAvLyBidXQgbmVlZCB0byBnZXQgc3RhdGUgYW5kIGluc3RhbGwgbG9jYXRpb25zIGVhcmxpZXIsCi0JICAgIC8vIHNwZWNpZmljYWxseSBiZWZvcmUgY29udHJvbGxlci5pbml0KCkuCi0JICAgIEVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci0JICAgIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKQotCSAgICB7Ci0JICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotCSAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLQkgICAgICBpZiAocGFyYW1WYWx1ZXMgIT0gbnVsbCAmJiBwYXJhbVZhbHVlcy5sZW5ndGggPiAwKQotCSAgICAgIHsKLQkgICAgICAgIFN0cmluZyBkZWNvZGVkUGFyYW1OYW1lID0gVVJMVXRpbHMuZGVjb2RlKHBhcmFtTmFtZSk7Ci0JICAgICAgICBpZiAoZGVjb2RlZFBhcmFtTmFtZS5lcXVhbHMoTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTikpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGNvbnRyb2xsZXIuc2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKHBhcmFtVmFsdWVzWzBdKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGVsc2UgaWYgKGRlY29kZWRQYXJhbU5hbWUuZXF1YWxzKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04pKQotCSAgICAgICAgewotCSAgICAgICAgICBjb250cm9sbGVyLnNldFN0YXRlTG9jYXRpb24ocGFyYW1WYWx1ZXNbMF0pOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCQotCSAgICAvLyBjb250cm9sbGVyLmluaXQoKQotCSAgICBjb250cm9sbGVyLmluaXQoc2Vzc2lvbklkLGFwcGxpY2F0aW9uLHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSk7Ci0gICAgfQotICAgICU+Ci0gICAgPCUvL3Jlc2V0Q29udHJvbGxlcihhcHBsaWNhdGlvbixzZXNzaW9uSWQsc2Vzc2lvbixyZXF1ZXN0LGNvbnRyb2xsZXIpOyU+Ci0gIDwvanNwOnVzZUJlYW4+Ci0gIDwlCi0gIC8vIENoZWNrIGlmIHNlc3Npb24gQ29udHJvbGxlciBuZWVkcyB0byBiZSByZS1pbml0aWFsaXplZAotICBpZiAoY29udHJvbGxlci5nZXRTZXNzaW9uSWQoKT09bnVsbCl7Ci0JICByZXNldENvbnRyb2xsZXIoYXBwbGljYXRpb24sc2Vzc2lvbklkLHNlc3Npb24scmVxdWVzdCxjb250cm9sbGVyKTsKLSAgfQotIAotICAvLyBwcmVsb2FkIGZyb20gTGF1bmNoT3B0aW9uTWFuYWdlcgotICBTdHJpbmcga2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVVJMVXRpbHMuZW5jb2RlKFdTRXhwbG9yZXJDb250ZXh0LklEKSk7Ci0gIGlmIChrZXkgIT0gbnVsbCAmJiBrZXkubGVuZ3RoKCkgPiAwKQotICB7Ci0gICAgTGF1bmNoT3B0aW9uc01hbmFnZXIgbWFuYWdlciA9IExhdW5jaE9wdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0gICAgbWFuYWdlci5tYW5hZ2Uoa2V5LCBzZXNzaW9uSWQsIGFwcGxpY2F0aW9uKTsKLSAgfQotICAgIAotICAlPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL2FjdGlvbmVuZ2luZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX1dTRVhQTE9SRVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTwlCi0vLyByZXNldCBwZXJzcGVjdGl2ZSBjb250ZW50IHRvIGJsYW5rCi1jb250cm9sbGVyLmVuYWJsZVBlcnNwZWN0aXZlQ29udGVudEJsYW5rKHRydWUpOwotJT4KLTxmcmFtZXNldCByb3dzPSIwLDM1LCoiIGJvcmRlcj0wIG9ubG9hZD0iaW5pdFdpbmRvd05hbWUoJzwlPUZyYW1lTmFtZXMuV0lORE9XX05BTUVfV1NFWFBMT1JFUl9KU1AlPicpIj4KLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfV09SS0FSRUEiKSU+IiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9UT09MQkFSJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgicGVyc3BlY3RpdmVfdG9vbGJhci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgicGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhck5vZGVDb25maXJtSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWM2ODE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgMTU1NDM0ICAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJhY2sgU2xhc2ggJ1wnIG5vdCBhcHBlYXJpbmcgaW4gIldTSUwgbm8gbG9uZ2VyIHJlc29sdmFibGUiIGVycm9yIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0NPTkZJUk1fUkVNT1ZFX05PREUiLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Tm9kZU5hbWUoKSkpJT4iKSkgewotICAgICAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJXU0lMQWN0aW9uLmdldEFjdGlvbkxpbmsoY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldE5vZGVJZCgpKSkpJT4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiYjEzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb24iJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICAgQ2xlYXJXU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBDbGVhcldTSUxBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1Yjk0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWRjZDhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiODM3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLU9wZW5XU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuV1NJTEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1ib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLWlmICghaW5wdXRzVmFsaWQpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzaWxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpIHsKLSAgICAgICAgd3NpbE5hdmlnYXRvckNvbnRlbnQubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZGNiZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLk9wZW5XU0lMTGlua0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLU9wZW5XU0lMTGlua0FjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTSUxMaW5rQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgICB3c2lsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWVjYzc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBBY3Rpb24gYWN0aW9uID0gUmVmcmVzaEFjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICA8JQotICAgIGlmICghYWN0aW9uUmVzdWx0KSB7Ci0gICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBSZWZyZXNoV1NJTEFjdGlvbikgewotICAgICAgICAlPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL2FjdGlvbnMvQ2xlYXJOb2RlQ29uZmlybUpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICA8JQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWM1MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gQ3JlYXRlIHRoZSBhY3Rpb24uCi0gICBSZXNpemVXU0lMRnJhbWVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZXNpemVXU0lMRnJhbWVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBQb3B1bGF0ZSB0aGUgYWN0aW9uIHdpdGggdGhlIHJlcXVlc3QgcHJvcGVydGllcy4KLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAocmVzdWx0KQotICAgewotICAgICBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAgIAotICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuc2V0QXR0cmlidXRlKCJjb2xzIiwiPCU9d3NpbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iKTsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQuc2V0QXR0cmlidXRlKCJyb3dzIiwiPCU9d3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Iik7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOTRjODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMTm9kZUFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBTZWxlY3RXU0lMTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0V1NJTE5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi0gICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4ZGZkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIFNlbGVjdFdTSUxUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0lMVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZDA3YjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uCi0gICBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICAKLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTMxMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gbmV3IFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOTljZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gQWRkVG9GYXZvcml0ZXNBY3Rpb24ubmV3QWN0aW9uKHJlcXVlc3QsIGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uCi1hY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzNTVlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgQWN0aW9uIGFjdGlvbiA9IEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLm5ld0FjdGlvbihyZXF1ZXN0LCBjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gIGlmIChhY3Rpb25SZXN1bHQpCi0gIHsKLSAgICBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotICAlPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksZmFsc2UpKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQyMmZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24iJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IG5ldyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLWlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMLGZhbHNlKSkpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Yzk2NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotPCUKLSAgICBFbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1wYXJhbU5hbWUlPiIgdmFsdWU9IjwlPXBhcmFtVmFsdWVzW2ldJT4iPgotPCUKLSAgICAgIH0KLSAgICB9Ci0lPgotICA8L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci08JQotaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pID09IG51bGwpIHsKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBpZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVMiKSklPiIpKQotICAgICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RhYWM2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NGM4MzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODJjZGIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Xc2lsVG9nZ2xlTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbFRvZ2dsZU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL09wZW5XU0lMRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiMzU2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscyIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci1Gb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfT1BFTl9XU0lMIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgPCUKLSAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9oaWdobGlnaHRlZC5naWYiOwotICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NJTCIpOwotICAlPgotICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1BFTl9XU0lMX0RFU0MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+ICAgICAgICAKLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfd3NpbF91cmwiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJXU0lMX1VSTCIpJT48L2xhYmVsPgotICAgICAgICA8JQotICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKSkgewotICAgICAgICAlPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgd3NpbFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCk7Ci0gICAgICAgIGlmICh3c2lsVVJMID09IG51bGwpCi0gICAgICAgICAgd3NpbFVSTCA9ICIiOwotICAgICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF93c2lsX3VybCIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsVVJMKSU+IiBzaXplPSI1MCIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDwlCi0gIFN0cmluZyBpbnNwZWN0aW9uVHlwZVN0cmluZyA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSk7Ci0gIGludCBpbnNwZWN0aW9uVHlwZSA9IFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9ERVRBSUxTOwotICBpZiAoaW5zcGVjdGlvblR5cGVTdHJpbmcgIT0gbnVsbCkKLSAgICBpbnNwZWN0aW9uVHlwZSA9IEludGVnZXIucGFyc2VJbnQoaW5zcGVjdGlvblR5cGVTdHJpbmcpOwotICAlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnNwZWN0aW9uX3R5cGUiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT09TRV9XU0lMX0lOU1BFQ1RJT05fVFlQRSIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9Imluc3BlY3Rpb25fdHlwZSIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9ERVRBSUxTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTSUwiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0RMX1NFUlZJQ0VTJT4iIDwlIGlmIChpbnNwZWN0aW9uVHlwZSA9PSBXc2lsQWN0aW9uSW5wdXRzLldTRExfU0VSVklDRVMpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TRVJWSUNFIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuVURESV9TRVJWSUNFUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5VRERJX1NFUlZJQ0VTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfU0VSVklDRSIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLlVERElfQlVTSU5FU1NFUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5VRERJX0JVU0lORVNTRVMpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9CVVNJTkVTUyIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLldTSUxfTElOS1MlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9MSU5LUykgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0lMX0xJTktTIiklPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzJlNmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlCdXNpbmVzc0RldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YmU5YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlCdXNpbmVzc0RldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIFN0cmluZyBkaXNjb3ZlcnlVUkwgPSBudWxsOwotICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IGxpbmsgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBsaW5rID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpZiAobGluayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKGxpbmsuZ2V0TGlua0Fic3RyYWN0cygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKGxpbmsuZ2V0TGlua0Fic3RyYWN0TGFuZ3MoKSk7Ci0gICAgICAgICAgICBpbnF1aXJ5QVBJID0gbGluay5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICAgICAgICAgIGJ1c2luZXNzS2V5ID0gbGluay5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgICAgICAgICBkaXNjb3ZlcnlVUkwgPSBsaW5rLmdldFVERElMaW5rRGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VERElfTElOS19ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBsaW5rICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfQVBJIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPSgoaW5xdWlyeUFQSSAhPSBudWxsKSA/IGlucXVpcnlBUEkgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX0tFWSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKGJ1c2luZXNzS2V5ICE9IG51bGwpID8gYnVzaW5lc3NLZXkgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChkaXNjb3ZlcnlVUkwgIT0gbnVsbCkgPyBkaXNjb3ZlcnlVUkwgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOTZjMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IG51bGw7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBudWxsOwotICAgIFN0cmluZyBkaXNjb3ZlcnlVUkwgPSBudWxsOwotICAgIFdzaWxTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgc2VydmljZSA9IChXc2lsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5hbWVzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lcygpKTsKLSAgICAgICAgICAgIG5hbWVMYW5ncy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlTmFtZUxhbmdzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdHMoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgaW5xdWlyeUFQSSA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICAgICAgICAgIHNlcnZpY2VLZXkgPSAoKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpc2VydmljZSkuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICAgICAgICAgIGRpc2NvdmVyeVVSTCA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRVRERJU2VydmljZURpc2NvdmVyeVVSTCgpOwotICAgICAgICB9Ci0gICAgfQotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9BUEkiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChpbnF1aXJ5QVBJICE9IG51bGwpID8gaW5xdWlyeUFQSSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0tFWSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKHNlcnZpY2VLZXkgIT0gbnVsbCkgPyBzZXJ2aWNlS2V5IDogd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkEiKSklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWV9VUkwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChkaXNjb3ZlcnlVUkwgIT0gbnVsbCkgPyBkaXNjb3ZlcnlVUkwgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbE5hbWVUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUwOGZiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iPgotICA8JQotICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFUTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0giKTsKLSAgJT4KLSAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSF9ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgIDxsYWJlbCBmb3I9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldPUktCRU5DSF9QUk9KRUNUX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIiBub3dyYXA+Ci0gICAgICAgIDwlCi0gICAgICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9cHJvamVjdE5hbWUlPiI+PCU9cHJvamVjdE5hbWUlPgotICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF93c2lsX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0lMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIHdpZHRoPSI2MCUiPgotPCUKLSBTdHJpbmcgd3NpbEZpbGVOYW1lID0gInRlbXAud3NpbCI7Ci0gU3RyaW5nIHdzaWxVUkwgPSB3c2lsRWxlbWVudC5nZXRXc2lsVXJsKCk7Ci0gaWYgKHdzaWxVUkwuZW5kc1dpdGgoIi53c2lsIikpCi0gewotICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2lsVVJMLmxhc3RJbmRleE9mKCIvIiksIHdzaWxVUkwubGFzdEluZGV4T2YoIlxcIikpOwotICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPiAwKQotICAgICB3c2lsRmlsZU5hbWUgPSB3c2lsVVJMLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsIHdzaWxVUkwubGVuZ3RoKCkpOwotIH0KLSU+ICAgCi0gICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW1wb3J0ZWRfd3NpbF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NpbEZpbGVOYW1lKSU+IiBzaXplPTUwIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAKLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NkbFNlcnZpY2VEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NkbFNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MjI0MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzZGxTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLlFOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgIFN0cmluZyBiaW5kaW5nVGFibGUgPSAiYmluZGluZ1RhYmxlIjsKLSAgICBTdHJpbmcgeGJpbmRpbmdUYWJsZSA9ICJ4YmluZGluZ1RhYmxlIjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPWNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0gbnVsbDsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICAgVmVjdG9yIHdzZGxCaW5kaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsV1NETFNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgc2VydmljZSA9IChXc2lsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5hbWVzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lcygpKTsKLSAgICAgICAgICAgIG5hbWVMYW5ncy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlTmFtZUxhbmdzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdHMoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgd3NkbFVSTCA9ICgoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgICAgICAgICAgd3NkbEJpbmRpbmdzID0gKChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFdTRExCaW5kaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NETF9TRVJWSUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQgJiYgc2VydmljZSAhPSBudWxsKSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT12aWV3SUQlPiI+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT13c2RsVVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1iaW5kaW5nVGFibGUlPicsJzwlPXhiaW5kaW5nVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhiaW5kaW5nVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9CSU5ESU5HUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWJpbmRpbmdUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUVTUEFDRV9VUkkiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MT0NBTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSB3c2RsQmluZGluZ3MuZWxlbWVudHMoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSAoUU5hbWUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9cW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCklPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXFuYW1lLmdldExvY2FsTmFtZSgpJT48L3RkPgotICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWJpbmRpbmdUYWJsZSU+JywnPCU9eGJpbmRpbmdUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4OTc3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKHdzaWxFbGVtZW50LmdldFdTSUxBYnN0cmFjdHMoKSk7Ci0gICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKHdzaWxFbGVtZW50LmdldFdTSUxBYnN0cmFjdExhbmdzKCkpOwotICAgIH0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0lMX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VhZmY3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICB7Ci0gICAgaW50IHZpZXdJZCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0RWxlbWVudCBsZSA9IHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJZCk7Ci0gICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCB3c2lsV3NkbFNlcnZpY2VFbGVtZW50ID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2lsV3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCkpOwotICB9Ci0gIGZvcm1Qcm9wZXJ0aWVzLnB1dCgiZm9ybUFjdGlvbkxpbmsiLCJ3c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AiKTsKLSU+ICAgCi08L2pzcDp1c2VCZWFuPgotPCUKLSAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICB7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICB7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OTE5NWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUFjdGlvbkxpbmsuYXBwZW5kKCJ3c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMaW5rRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMaW5rRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjY0YTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGlua0RldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIGludCB2aWV3SUQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbFdzaWxMaW5rRWxlbWVudCBsaW5rID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsV1NJTExpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgbGluayA9IChXc2lsV3NpbExpbmtFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpZiAobGluayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChsaW5rLmdldExpbmtBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChsaW5rLmdldExpbmtBYnN0cmFjdHMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NJTF9MSU5LX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0xJTktfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQgJiYgbGluayAhPSBudWxsKSB7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1saW5rLmdldFdTSUxMaW5rTG9jYXRpb24oKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhM2RkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhM2RkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2UxMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2UxMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGM4ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGM4ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NJTF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRiYmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRiYmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYjk3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYjk3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9vcGVuX3dzaWxfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxNzc1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxNzc1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTkxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy93c2lsX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNGQwODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1TdHJpbmcgYWJzdHJhY3RUYWJsZSA9ICJhYnN0cmFjdFRhYmxlIjsKLVN0cmluZyB4YWJzdHJhY3RUYWJsZSA9ICJ4YWJzdHJhY3RUYWJsZSI7Ci1TdHJpbmcgc2hvd0FsbEFic3RyYWN0SUQgPSAic2hvd0FsbEFic3RyYWN0SUQiOwotV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIHNob3dBYnN0cmFjdCh0YWJsZUNvbnRhaW5lcklEKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgICAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICAgICAgdmFyIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzwlPXNob3dBbGxBYnN0cmFjdElEJT4nKTsKLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgJT4KLSAgICAgICAgICAgYWRkUm93VG9BYnN0cmFjdFRhYmxlKHRhYmxlQm9keSwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylhYnN0cmFjdExhbmdzLmVsZW1lbnRBdChpKSklPiIsCi0gICAgICAgICAgICAgICAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpYWJzdHJhY3RzLmVsZW1lbnRBdChpKSklPiIpOwotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkUm93VG9BYnN0cmFjdFRhYmxlKHRhYmxlQm9keSwgbGFuZywgYWJzdCkgewotICAgICAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAgICAgYWRkS2V5VmFsdWVUb1JvdyhuZXdSb3csIGxhbmcsIGFic3QpOwotICAgICAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB9Ci08L3NjcmlwdD4KLQotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1hYnN0cmFjdFRhYmxlJT4nLCc8JT14YWJzdHJhY3RUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGFic3RyYWN0VGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUJTVFJBQ1QiKSU+PC9zdHJvbmc+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT1hYnN0cmFjdFRhYmxlJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQlNUUkFDVCIpJT48L3RoPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgc2hvd0Fic3RyYWN0KCc8JT1hYnN0cmFjdFRhYmxlJT4nKTsKLSAgICB0d2lzdEluaXQoJzwlPWFic3RyYWN0VGFibGUlPicsJzwlPXhhYnN0cmFjdFRhYmxlJT4nKTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjI1ZjAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gaXNTb21ldGhpbmdTZWxlY3RlZCh0YWJsZUNvbnRhaW5lcklkKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93czsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhbGVydCgiPCU9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCh0YWJsZUNvbnRhaW5lcklkLCBmb3JtLCBsb2NhdGlvbikgewotICAgICAgICBpZiAoaXNTb21ldGhpbmdTZWxlY3RlZCh0YWJsZUNvbnRhaW5lcklkKSkKLSAgICAgICAgICAgIHNldExvY2F0aW9uQW5kU3VibWl0KGZvcm0sIGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRMb2NhdGlvbkFuZFN1Ym1pdChmb3JtLCBsb2NhdGlvbikgewotICAgICAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgICAgICB7Ci0gICAgICAgICAgZm9ybS5hY3Rpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICB9Ci0gICAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDYwYzljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZUxhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZXMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotU3RyaW5nIG5hbWVUYWJsZSA9ICJuYW1lVGFibGUiOwotU3RyaW5nIHhuYW1lVGFibGUgPSAieG5hbWVUYWJsZSI7Ci1TdHJpbmcgc2hvd0FsbE5hbWVJRCA9ICJzaG93QWxsTmFtZUlEIjsKLVdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPWNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBzaG93TmFtZSh0YWJsZUNvbnRhaW5lcklEKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgICAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICAgICAgdmFyIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzwlPXNob3dBbGxOYW1lSUQlPicpOwotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgIGFkZFJvd1RvTmFtZVRhYmxlKHRhYmxlQm9keSwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyluYW1lTGFuZ3MuZWxlbWVudEF0KGkpKSU+IiwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyluYW1lcy5lbGVtZW50QXQoaSkpJT4iKTsKLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFkZFJvd1RvTmFtZVRhYmxlKHRhYmxlQm9keSwgbGFuZywgbmFtZSkgewotICAgICAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAgICAgYWRkS2V5VmFsdWVUb1JvdyhuZXdSb3csIGxhbmcsIG5hbWUpOwotICAgICAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB9Ci08L3NjcmlwdD4KLQotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1uYW1lVGFibGUlPicsJzwlPXhuYW1lVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhuYW1lVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3N0cm9uZz4KLSAgICAgICAgPC90ZD4KLSAgICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPW5hbWVUYWJsZSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgc2hvd05hbWUoJzwlPW5hbWVUYWJsZSU+Jyk7Ci0gICAgdHdpc3RJbml0KCc8JT1uYW1lVGFibGUlPicsJzwlPXhuYW1lVGFibGUlPicpOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjNWIzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHdzaWxOYXZpZ2F0b3JDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIlPiJdOwotICB2YXIgd3NpbE5hdmlnYXRvclRvb2xiYXIgPSB3c2lsTmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2lsTmF2aWdhdG9yQ29udGVudCA9IHdzaWxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05URU5UJT4iXTsKLSAgdmFyIHdzaWxBY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9BQ1RJT05TX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsUHJvcGVydGllc0NvbnRhaW5lciA9IHdzaWxBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsUHJvcGVydGllc1Rvb2xiYXIgPSB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19UT09MQkFSJT4iXTsKLSAgdmFyIHdzaWxQcm9wZXJ0aWVzQ29udGVudCA9IHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRFTlQlPiJdOwotICB2YXIgd3NpbFN0YXR1c0NvbnRhaW5lciA9IHdzaWxBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzaWxTdGF0dXNUb29sYmFyID0gd3NpbFN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NpbFN0YXR1c0NvbnRlbnQgPSB3c2lsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUxMjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCi0gICAgZnVuY3Rpb24gd3NpbEhhbmRsZUNoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCwgY2hlY2tBbGxDaGVja2JveCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICAgICAgICAgICAgcm93Q2hlY2tib3gubmFtZSA9ICI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICAgICAgICAgICAgICByb3dDaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoZWNrQm94SW5wdXQoY2hlY2tib3gsIGlzQ2hlY2tlZCkgewotICAgICAgICBpZiAoaXNDaGVja2VkKSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlUm93Q2hlY2tib3hDbGljaygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHR3aXN0SW5pdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKSB7Ci0gICAgICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkS2V5VmFsdWVUb1Jvdyhyb3csIGtleSwgdmFsdWUpIHsKLSAgICAgICAgdmFyIGtleVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXkpOwotICAgICAgICB2YXIgdmFsdWVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotICAgICAgICB2YXIgbmV3Q29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgdmFyIG5ld0NvbDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICBuZXdDb2wuYXBwZW5kQ2hpbGQoa2V5VGV4dCk7Ci0gICAgICAgIG5ld0NvbC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICAgIG5ld0NvbDIuYXBwZW5kQ2hpbGQodmFsdWVUZXh0KTsKLSAgICAgICAgbmV3Q29sMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICAgIHJvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwotICAgICAgICByb3cuYXBwZW5kQ2hpbGQobmV3Q29sMik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2xlYXJUYWJsZSh0YWJsZUJvZHksIG51bUhlYWRlcikgewotICAgICAgICBmb3IodmFyIGkgPSBudW1IZWFkZXI7IGkgPCB0YWJsZUJvZHkucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdGFibGVCb2R5LmRlbGV0ZVJvdyhpKTsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgfQotICAgIH0KLQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODI2NzNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX0FDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZnJhbWVzZXRTaXplc0Zvcm0pCi0gIHsKLSAgICB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCk7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4udmFsdWUgPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQucm93czsKLSAgICBmcmFtZXNldFNpemVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY5OTI1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvVWRkaUJ1c2luZXNzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZVRERJQnVzaW5lc3NMaXN0ID0gImRpdlVERElCdXNpbmVzc0xpc3QiOwotICAgIFN0cmluZyB4ZGl2VURESUJ1c2luZXNzTGlzdCA9ICJ4ZGl2VURESUJ1c2luZXNzTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9CVVNJTkVTU0VTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9MSU5LUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9VRERJX0JVU0lORVNTRVNfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2VURESUJ1c2luZXNzTGlzdCU+JywnPCU9eGRpdlVERElCdXNpbmVzc0xpc3QlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZVRERJQnVzaW5lc3NMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfQlVTSU5FU1MiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IndzaWxIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lURU1fTlVNQkVSIiklPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9CVVNJTkVTU19OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3MgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESUxpbmtzKCk7Ci0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IHVkZGlMaW5rcy5nZXRMaXN0RWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICBpbnQgaXRlbU51bSA9IDE7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3J0ZWRWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpc29ydGVkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUxpbmsgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdWRkaUxpbmsuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0JICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotICAgICAgIAkgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9bmFtZSU+PC9hPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICA8JQotICAgICAgIAkgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAlPgotCSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfQlVTSU5FU1MiKSU+Jm5ic3A7PCU9dWRkaUxpbmsuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpJT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsJzwlPXhkaXZVRERJQnVzaW5lc3NMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESUJ1c2luZXNzTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUZSRVNIIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVmcmVzaEFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyZWI0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvVWRkaVNlcnZpY2VzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdlVERElTZXJ2aWNlTGlzdCA9ICJkaXZVRERJU2VydmljZUxpc3QiOwotICAgIFN0cmluZyB4ZGl2VURESVNlcnZpY2VMaXN0ID0gInhkaXZVRERJU2VydmljZUxpc3QiOwotCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfU0VSVklDRVMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9TRVJWSUNFUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9VRERJX1NFUlZJQ0VTX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCc8JT14ZGl2VURESVNlcnZpY2VMaXN0JT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2VURESVNlcnZpY2VMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfU0VSVklDRSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdlVERElTZXJ2aWNlTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lURU1fTlVNQkVSIiklPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9TRVJWSUNFX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gdWRkaVNlcnZpY2VzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdWRkaVNlcnZpY2UuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBsZS5nZXRWaWV3SWQoKSwgMCwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L2E+PC90ZD4KLQkgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9bmFtZSU+PC9hPjwvdGQ+Ci0JICAgICAgICAgICAgICAgICA8JQotCSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICAgICAgCTx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L3RkPgotCQkJCTx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfU0VSVklDRSIpJT4mbmJzcDs8JT11ZGRpU2VydmljZS5nZXRVRERJU2VydmljZUtleSgpJT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdlVERElTZXJ2aWNlTGlzdCU+JywnPCU9eGRpdlVERElTZXJ2aWNlTGlzdCU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVmcmVzaEFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhZjRkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvV3NkbFNlcnZpY2VzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdldTRExMaXN0ID0gImRpdldTRExMaXN0IjsKLSAgICBTdHJpbmcgeGRpdldTRExMaXN0ID0gInhkaXZXU0RMTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfV1NETF9TRVJWSUNFUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfV1NETF9TRVJWSUNFUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9XU0RMX1NFUlZJQ0VTX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdldTRExMaXN0JT4nLCc8JT14ZGl2V1NETExpc3QlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZXU0RMTGlzdCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NFUlZJQ0UiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZXU0RMTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2V1NETExpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gd3NkbFNlcnZpY2VzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB3c2RsVVJMID0gd3NkbFNlcnZpY2UuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT1sZS5nZXRWaWV3SWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1TdHJpbmcudmFsdWVPZihpdGVtTnVtKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48JT13c2RsVVJMJT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBpdGVtTnVtKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZXU0RMTGlzdCU+JywnPCU9eGRpdldTRExMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZXU0RMTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2V1NETExpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JkYjg5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvV3NpbExpbmtzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2V1NJTExpc3QgPSAiZGl2V1NJTExpc3QiOwotICAgIFN0cmluZyB4ZGl2V1NJTExpc3QgPSAieGRpdldTSUxMaXN0IjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9XU0lMX0xJTktTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfV1NJTF9MSU5LUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9XU0lMX0xJTktTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuV1NJTExpbmtBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2V1NJTExpc3QlPicsJzwlPXhkaXZXU0lMTGlzdCU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdldTSUxMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTSUxfTElOS1MiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZXU0lMTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2V1NJTExpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0lMTGlua3MoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gd3NpbExpbmtzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsV3NpbExpbmtFbGVtZW50IHdzaWxMaW5rID0gKFdzaWxXc2lsTGlua0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSB3c2lsTGluay5nZXRXU0lMTGlua0xvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9bGUuZ2V0Vmlld0lkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9dXJsJT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBpdGVtTnVtKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZXU0lMTGlzdCU+JywnPCU9eGRpdldTSUxMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19OQVZJR0FUT1IiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdldTSUxMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbldTSUxMaW5rQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRhYjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIiklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3N0YXR1c19jb250YWluZXIuanNwIiklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYTNlNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5YzM5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90cmVldmlldy5jc3MiKSklPiI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLTwvaGVhZD4KLTwlCi0gICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIGludCBmb2N1c2VkTm9kZUlkID0gbm9kZU1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgIFN0cmluZyBmb2N1c2VkQW5jaG9yTmFtZSA9IFN0cmluZy52YWx1ZU9mKGZvY3VzZWROb2RlSWQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgIH0KLSU+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uTG9hZD0ic2VsZi5sb2NhdGlvbi5oYXNoPScjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPic7c2V0U2VsZWN0ZWRBbmNob3JOYW1lKCc8JT1zZWxlY3RlZEFuY2hvck5hbWUlPicpIiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICAgIDxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLSAgICAgICAgPCU9bm9kZU1hbmFnZXIucmVuZGVyVHJlZVZpZXcocmVzcG9uc2UpJT4KLSAgICA8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBmNGUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvbmF2aWdhdG9yLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgZWxzZQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkFWSUdBVE9SIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdFJlZnJlc2ggPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0hfV1NJTCIpOwotICAgU3RyaW5nIGFsdENsZWFyID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9DTEVBUl9XU0lMIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZWZyZXNoJT4iIHRpdGxlPSI8JT1hbHRSZWZyZXNoJT4iPjwvYT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOWNjMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IGNvbHM9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPCUKLSAgaWYgKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmlzUlRMKCkpCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICAlPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc0YzBlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MmYzOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyOwotICAgICAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sICE9IG51bGwgJiYgc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikgewotICAgICAgICAlPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIGxvY2F0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWRUb29sLmdldEZvcm1MaW5rKCkpKSU+IjsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19BQ1RJT05fU0VMRUNURUQiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05PREVfU0VMRUNURUQiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY3ZDljYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9hY3Rpb25zLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAod3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OUyIpJT48L3RkPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyOwotICAgICAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICBmb3IoaW50IGk9MDsgaTx0b29sTWFuYWdlci5nZXROdW1iZXJPZlRvb2xzKCk7IGkrKykgewotICAgICAgICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbE1hbmFnZXIuZ2V0VG9vbChpKTsKLSAgICAgICAgICAgICU+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjwlPXRvb2wucmVuZGVyVG9vbChyZXNwb25zZSxjb250cm9sbGVyKSU+PC90ZD4KLSAgICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICB9Ci0lPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmYWMxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfc3RhdHVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfc3RhdHVzX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlYmU2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxwcmU+Ci08JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5nZXRNZXNzYWdlc0Zyb21MaXN0KCkpJT4KLSAgICAgICAgPC9wcmU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIwMDI2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zdGF0dXMuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NpbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmICh3c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfU1RBVFVTIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdENsZWFyID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0xFQVIiKTsKLSU+ICAgICAgICAgICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIHRhcmdldD0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiOWIyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi0uY2R0cHJvamVjdAotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotcGFyc2VyLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWI2NjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMDdkOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNXZWQgSnVuIDA2IDE0OjMzOjUzIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YjBiNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozOTo1OSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlNjE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAyLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW4uUGFyc2VyUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3Zlcnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcudWRkaTRqO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjQsMi4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyM2Q3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NWFjNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBQYXJzZXIKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPQ29udHJhY3RSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT0NvbnRyYWN0UmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjQwYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPQ29udHJhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjbzsKLQotcHVibGljIGNsYXNzIERJU0NPQ29udHJhY3RSZWZlcmVuY2UgZXh0ZW5kcyBESVNDT1JlZmVyZW5jZQotewotICBwcml2YXRlIFN0cmluZyBkb2NSZWZfOwotICAKLSAgcHVibGljIERJU0NPQ29udHJhY3RSZWZlcmVuY2UoU3RyaW5nIHJlZixTdHJpbmcgZG9jUmVmKQotICB7Ci0gICAgc3VwZXIocmVmKTsKLSAgICBkb2NSZWZfID0gZG9jUmVmOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERvY1JlZigpCi0gIHsKLSAgICByZXR1cm4gZG9jUmVmXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1YjdiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09QYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL21zZG5tYWcvaXNzdWVzLzAyLzAyL3htbC9kZWZhdWx0LmFzcHggZm9yIG1vcmUKLSAqIGRldGFpbHMgb24gRElTQ08uCi0gKi8KLXB1YmxpYyBjbGFzcyBESVNDT1BhcnNlcgotewotICBwcml2YXRlIERvY3VtZW50QnVpbGRlciBwYXJzZXJfOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOU19ESVNDTyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9kaXNjby8iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBESVNDT1ZFUlkgPSAiZGlzY292ZXJ5IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRElTQ09WRVJZX1JFRiA9ICJkaXNjb3ZlcnlSZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOU19DT05UUkFDVF9SRUYgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vc2NsLyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENPTlRSQUNUX1JFRiA9ICJjb250cmFjdFJlZiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJFRiA9ICJyZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBET0NfUkVGID0gImRvY1JlZiI7Ci0KLSAgcHVibGljIERJU0NPUGFyc2VyKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jQnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLSAgICAgIHBhcnNlcl8gPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgIHsKLSAgICAgIHBhcnNlcl8gPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBESVNDT1JlZmVyZW5jZVtdIHBhcnNlKFN0cmluZyBkaXNjb1VSSSwgSW5wdXRTb3VyY2Ugc291cmNlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyc2VyXyAhPSBudWxsKQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvYyA9IHBhcnNlcl8ucGFyc2Uoc291cmNlKTsKLSAgICAgIEVsZW1lbnQgcm9vdEVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBSb290IGVsZW1lbnQgbXVzdCBieSA8ZGlzY286ZGlzY292ZXJ5Ci0gICAgICAvLyB4bWxuczpkaXNjbz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vIj4KLSAgICAgIGlmIChyb290RWxlbWVudCAhPSBudWxsICYmIHJvb3RFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhOU19ESVNDTykgJiYgcm9vdEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKERJU0NPVkVSWSkpCi0gICAgICB7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSByb290RWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIFZlY3RvciBkaXNjb1JlZmVyZW5jZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgICAgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpY2hpbGROb2RlOwotICAgICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgbnNVUkkgPSBlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgaWYgKG5zVVJJLmVxdWFscyhOU19ESVNDTykgJiYgbG9jYWxOYW1lLmVxdWFscyhESVNDT1ZFUllfUkVGKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gRElTQ08gbGluay4KLSAgICAgICAgICAgICAgU3RyaW5nIHJlZiA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKGRpc2NvVVJJLCBlbGVtZW50LmdldEF0dHJpYnV0ZShSRUYpKTsKLSAgICAgICAgICAgICAgZGlzY29SZWZlcmVuY2VzLmFkZEVsZW1lbnQobmV3IERJU0NPUmVmZXJlbmNlKHJlZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobnNVUkkuZXF1YWxzKE5TX0NPTlRSQUNUX1JFRikgJiYgbG9jYWxOYW1lLmVxdWFscyhDT05UUkFDVF9SRUYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBXU0RMIGxpbmsuCi0gICAgICAgICAgICAgIFN0cmluZyByZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoUkVGKSk7Ci0gICAgICAgICAgICAgIFN0cmluZyBkb2NSZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoRE9DX1JFRikpOwotICAgICAgICAgICAgICBkaXNjb1JlZmVyZW5jZXMuYWRkRWxlbWVudChuZXcgRElTQ09Db250cmFjdFJlZmVyZW5jZShyZWYsIGRvY1JlZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnQgbnVtYmVyT2ZESVNDT1JlZmVyZW5jZXMgPSBkaXNjb1JlZmVyZW5jZXMuc2l6ZSgpOwotICAgICAgICBpZiAobnVtYmVyT2ZESVNDT1JlZmVyZW5jZXMgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRElTQ09SZWZlcmVuY2VbXSByZWZlcmVuY2VzID0gbmV3IERJU0NPUmVmZXJlbmNlW251bWJlck9mRElTQ09SZWZlcmVuY2VzXTsKLSAgICAgICAgICBkaXNjb1JlZmVyZW5jZXMuY29weUludG8ocmVmZXJlbmNlcyk7Ci0gICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGRvY3VtZW50IGlzIG5vdCBhIHZhbGlkIERJU0NPIGRvY3VtZW50LgotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvQWJzb2x1dGVVUkkoU3RyaW5nIGRpc2NvVVJJLCBTdHJpbmcgcmVmVVJJKQotICB7Ci0gICAgaWYgKHJlZlVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZWZVUkkuaW5kZXhPZigiOi8vIikgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gcmVmVVJJIGlzIGFscmVhZHkgYWJzb2x1dGUuCi0gICAgICAgIHJldHVybiByZWZVUkk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhYnNvbHV0ZVVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoZGlzY29VUkkuc3Vic3RyaW5nKDAsIE1hdGgubWF4KGRpc2NvVVJJLmxhc3RJbmRleE9mKCdcXCcpLCBkaXNjb1VSSS5sYXN0SW5kZXhPZignLycpICsgMSkpKTsKLSAgICAgICAgYWJzb2x1dGVVUkkuYXBwZW5kKHJlZlVSSSk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVVSSS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09SZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlZDNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09SZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjbzsKLQotcHVibGljIGNsYXNzIERJU0NPUmVmZXJlbmNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIHJlZl87Ci0gIAotICBwdWJsaWMgRElTQ09SZWZlcmVuY2UoU3RyaW5nIHJlZikKLSAgewotICAgIHJlZl8gPSByZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmKCkKLSAgewotICAgIHJldHVybiByZWZfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L05ldFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L05ldFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmY3NWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9OZXRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuYmluYXJ5LkJhc2U2NDsKLQotcHVibGljIGZpbmFsIGNsYXNzIE5ldFV0aWxzCi17Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgamF2YS5uZXQuVVJMQ29ubmVjdGlvbiBnaXZlbiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4gVGhpcyBjbGFzcyBlbnN1cmVzCi0gICAqIHRoYXQgcHJveHkgc2V0dGluZ3MgaW4gV1NBRCBhcmUgcmVzcGVjdGVkLgotICAgKiBAcGFyYW0gdXJsU3RyaW5nIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4KLSAgICogQHJldHVybiBqYXZhLm5ldC5VUkxDRG9ubmVjdGlvbiBVUkxDb25uZWN0aW9uIHRvIHRoZSBVUkwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFVSTENvbm5lY3Rpb24gZ2V0VVJMQ29ubmVjdGlvbihTdHJpbmcgdXJsU3RyaW5nKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIHVybCA9IGNyZWF0ZVVSTCh1cmxTdHJpbmcpOwotICAgICAgVVJMQ29ubmVjdGlvbiB1YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotICAgICAgU3RyaW5nIHByb3h5VXNlck5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpOwotICAgICAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlQYXNzd29yZCIpOwotICAgICAgaWYgKHByb3h5VXNlck5hbWUgIT0gbnVsbCAmJiBwcm94eVBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciB1c2VyTmFtZVBhc3N3b3JkID0gbmV3IFN0cmluZ0J1ZmZlcihwcm94eVVzZXJOYW1lKTsKLSAgICAgICAgdXNlck5hbWVQYXNzd29yZC5hcHBlbmQoJzonKS5hcHBlbmQocHJveHlQYXNzd29yZCk7Ci0gICAgICAgIEJhc2U2NCBlbmNvZGVyID0gbmV3IEJhc2U2NCgpOwotICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBuZXcgU3RyaW5nKGVuY29kZXIuZW5jb2RlKHVzZXJOYW1lUGFzc3dvcmQudG9TdHJpbmcoKS5nZXRCeXRlcygpKSk7Ci0gICAgICAgIHVzZXJOYW1lUGFzc3dvcmQuc2V0TGVuZ3RoKDApOwotICAgICAgICB1c2VyTmFtZVBhc3N3b3JkLmFwcGVuZCgiQmFzaWMgIikuYXBwZW5kKGVuY29kaW5nKTsKLSAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJQcm94eS1hdXRob3JpemF0aW9uIix1c2VyTmFtZVBhc3N3b3JkLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIHVjOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBqYXZhLmlvLklucHV0U3RyZWFtIGZvciBhIFVSTCBnaXZlbiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4gVGhpcyBjbGFzcwotICAgKiBlbnN1cmVzIHRoYXQgcHJveHkgc2V0dGluZ3MgaW4gV1NBRCBhcmUgcmVzcGVjdGVkLgotICAgKiBAcGFyYW0gdXJsU3RyaW5nIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4KLSAgICogQHJldHVybiBqYXZhLmlvLklucHV0U3RyZWFtIElucHV0U3RyZWFtIGZvciByZWFkaW5nIHRoZSBVUkwgc3RyZWFtLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBJbnB1dFN0cmVhbSBnZXRVUkxJbnB1dFN0cmVhbShTdHJpbmcgdXJsU3RyaW5nKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMQ29ubmVjdGlvbiB1YyA9IGdldFVSTENvbm5lY3Rpb24odXJsU3RyaW5nKTsKLSAgICAgIGlmICh1YyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICAgIHJldHVybiBpczsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBVUkwgZnJvbSBhIHN0cmluZy4KLSAgICogQHBhcmFtIHVybFN0cmluZyBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwuCi0gICAqIEByZXR1cm4gVVJMIGphdmEubGFuZy5VUkwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVSTC4KLSAgICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgVVJMIGNyZWF0ZVVSTChTdHJpbmcgdXJsU3RyaW5nKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0gIHsKLSAgCXJldHVybiBuZXcgVVJMKHVybFN0cmluZyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjb3ZlcnkvV2ViU2VydmljZXNQYXJzZXJFeHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjb3ZlcnkvV2ViU2VydmljZXNQYXJzZXJFeHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3OGJjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L1dlYlNlcnZpY2VzUGFyc2VyRXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5OwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VzUGFyc2VyRXh0IGV4dGVuZHMgV2ViU2VydmljZXNQYXJzZXIgewotCi0gICAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyRXh0KCkgewotICAgICAgICBzdXBlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlckV4dChTdHJpbmcgdXJpKSB7Ci0gICAgICAgIHN1cGVyKHVyaSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBOZXRVdGlscy5jcmVhdGVVUkwodXJsKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwNTkzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNDb25zdGFudHMKLXsKLSAgLy8gTmFtZXNwYWNlCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9XU0RMID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfVjEgPSAidXJuOnVkZGktb3JnOmFwaSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX1YyID0gInVybjp1ZGRpLW9yZzphcGlfdjIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9CSU5ESU5HID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi91ZGRpLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9XU0lMX0lOU1BFQ1RJT04gPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uLyI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0xpbmsuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzTGluay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzgxMGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzTGluay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0xpbmsKLXsKLSAgcHJvdGVjdGVkIExpbmsgbGlua187Ci0KLSAgcHVibGljIEZhdm9yaXRlc0xpbmsoKQotICB7Ci0gICAgbGlua18gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIExpbmsgZ2V0TGluaygpCi0gIHsKLSAgICByZXR1cm4gbGlua187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMaW5rKExpbmsgbGluaykKLSAgewotICAgIGxpbmtfID0gbGluazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGIxNTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuSW5zcGVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuQnVzaW5lc3NEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuU2VydmljZURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLkFic3RyYWN0SW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5EZXNjcmlwdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuTGlua0ltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuU2VydmljZU5hbWVJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLmV4dGVuc2lvbi51ZGRpLkJ1c2luZXNzRGVzY3JpcHRpb25JbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbkltcGw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkJ1c2luZXNzS2V5OwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5TZXJ2aWNlS2V5OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QgaW1wbGVtZW50cyBJRmF2b3JpdGVzUmVnaXN0cnlUeXBlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UmVhZExvY2F0aW9uKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0V3JpdGVMb2NhdGlvbigpOwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudCgpOwotCi0gIHB1YmxpYyB2b2lkIGluaXQoKQotICB7Ci0gICAgZ2V0V1NJTERvY3VtZW50KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NJTERvY3VtZW50IGxvYWRXU0lMRG9jdW1lbnQoU3RyaW5nIHBhdGgsIGJvb2xlYW4gZm9yY2UpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgd3NpbERvYy5yZWFkKG5ldyBGaWxlUmVhZGVyKG5ldyBGaWxlKHBhdGgpKSk7Ci0gICAgICByZXR1cm4gd3NpbERvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGlmIChmb3JjZSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0MikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmF2b3JpdGVzVmVyc2lvbigpCi0gIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gaW5zcGVjdGlvbi5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDApCi0gICAgICByZXR1cm4gYWJzdHJhY3RzWzBdLmdldFRleHQoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZhdm9yaXRlc1ZlcnNpb24oU3RyaW5nIHZlcnNpb24pCi0gIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIEFic3RyYWN0IGFic3QgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgYWJzdC5zZXRUZXh0KHZlcnNpb24pOwotICAgIGluc3BlY3Rpb24ucmVtb3ZlQWJzdHJhY3RzKCk7Ci0gICAgaW5zcGVjdGlvbi5hZGRBYnN0cmFjdChhYnN0KTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzYXZlKCkgdGhyb3dzIFdTSUxFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIGlmICh3c2lsRG9jICE9IG51bGwpCi0gICAgICB3c2lsRG9jLndyaXRlKGdldFdyaXRlTG9jYXRpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgSUZhdm9yaXRlc1VERElSZWdpc3RyeVtdIGdldEZhdm9yaXRlc1VERElSZWdpc3RyaWVzKCkKLSAgewotICAgIExpbmtbXSBsaW5rcyA9IGxvYWRVRERJUmVnaXN0cmllcygpOwotICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeVtdIHJlZ2lzdHJpZXMgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5W2xpbmtzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICByZWdpc3RyaWVzW2ldID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeSgpOwotICAgICAgcmVnaXN0cmllc1tpXS5zZXRMaW5rKGxpbmtzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlZ2lzdHJpZXM7Ci0gIH0KLQotICBwdWJsaWMgSUZhdm9yaXRlc1VERElCdXNpbmVzc1tdIGdldEZhdm9yaXRlc1VERElCdXNpbmVzc2VzKCkKLSAgewotICAgIExpbmtbXSBsaW5rcyA9IGxvYWRVRERJQnVzaW5lc3NlcygpOwotICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc1tdIGJ1c2luZXNzZXMgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzW2xpbmtzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBidXNpbmVzc2VzW2ldID0gbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzcygpOwotICAgICAgYnVzaW5lc3Nlc1tpXS5zZXRMaW5rKGxpbmtzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1c2luZXNzZXM7Ci0gIH0KLQotICBwdWJsaWMgSUZhdm9yaXRlc1VERElTZXJ2aWNlW10gZ2V0RmF2b3JpdGVzVURESVNlcnZpY2VzKCkKLSAgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGxvYWRVRERJU2VydmljZXMoKTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZVtdIHVkZGlTZXJ2aWNlcyA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZVtzZXJ2aWNlcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdWRkaVNlcnZpY2VzW2ldID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlKCk7Ci0gICAgICB1ZGRpU2VydmljZXNbaV0uc2V0U2VydmljZShzZXJ2aWNlc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiB1ZGRpU2VydmljZXM7Ci0gIH0KLQotICBwdWJsaWMgSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlW10gZ2V0RmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VzKCkKLSAgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZVtdIHNlckludHMgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Vbc2VydmljZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHNlckludHNbaV0gPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoKTsKLSAgICAgIHNlckludHNbaV0uc2V0U2VydmljZShzZXJ2aWNlc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBzZXJJbnRzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNXU0RMW10gZ2V0RmF2b3JpdGVzV1NETHMoKQotICB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gbG9hZFdTRExTZXJ2aWNlcygpOwotICAgIEZhdm9yaXRlc1dTRExbXSB3c2RscyA9IG5ldyBGYXZvcml0ZXNXU0RMW3NlcnZpY2VzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB3c2Rsc1tpXSA9IG5ldyBGYXZvcml0ZXNXU0RMKCk7Ci0gICAgICB3c2Rsc1tpXS5zZXRTZXJ2aWNlKHNlcnZpY2VzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNXU0lMW10gZ2V0RmF2b3JpdGVzV1NJTHMoKQotICB7Ci0gICAgTGlua1tdIGxpbmtzID0gbG9hZFdTSUxzKCk7Ci0gICAgRmF2b3JpdGVzV1NJTFtdIHdzaWxzID0gbmV3IEZhdm9yaXRlc1dTSUxbbGlua3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHdzaWxzW2ldID0gbmV3IEZhdm9yaXRlc1dTSUwoKTsKLSAgICAgIHdzaWxzW2ldLnNldExpbmsobGlua3NbaV0pOwotICAgIH0KLSAgICByZXR1cm4gd3NpbHM7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRVRERJUmVnaXN0cmllcygpIHsKLSAgICByZXR1cm4gbG9hZExpbmtzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YxKTsKLSAgfQotICAgIAotICBwdWJsaWMgTGlua1tdIGxvYWRVRERJQnVzaW5lc3NlcygpIHsKLSAgICByZXR1cm4gbG9hZExpbmtzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YyKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFVERElTZXJ2aWNlcygpIHsKLSAgICByZXR1cm4gbG9hZFNlcnZpY2VzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YyKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFVERElTZXJ2aWNlSW50ZXJmYWNlcygpIHsKLSAgICByZXR1cm4gbG9hZFNlcnZpY2VzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YxKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFdTRExTZXJ2aWNlcygpIHsKLSAgICByZXR1cm4gbG9hZFNlcnZpY2VzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9XU0RMKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rW10gbG9hZFdTSUxzKCkgewotICAgIHJldHVybiBsb2FkTGlua3NCeU5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1dTSUxfSU5TUEVDVElPTik7Ci0gIH0KLQotICBwcml2YXRlIFNlcnZpY2VbXSBsb2FkU2VydmljZXNCeU5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0gICAgVmVjdG9yIHNlcnZpY2VWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBpZiAod3NpbERvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgICAgU2VydmljZVtdIHNlcnZpY2VzID0gaW5zcGVjdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgIERlc2NyaXB0aW9uW10gZGVzYyA9IHNlcnZpY2VzW2ldLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgICAgaWYgKGRlc2NbMF0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgICBzZXJ2aWNlVmVjdG9yLmFkZChzZXJ2aWNlc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IG5ldyBTZXJ2aWNlW3NlcnZpY2VWZWN0b3Iuc2l6ZSgpXTsKLSAgICBzZXJ2aWNlVmVjdG9yLmNvcHlJbnRvKHNlcnZpY2VzKTsKLSAgICByZXR1cm4gc2VydmljZXM7Ci0gIH0KLQotICBwcml2YXRlIExpbmtbXSBsb2FkTGlua3NCeU5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0gICAgVmVjdG9yIGxpbmtWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBpZiAod3NpbERvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgICAgTGlua1tdIGxpbmtzID0gaW5zcGVjdGlvbi5nZXRMaW5rcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGxpbmtzW2ldLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICBsaW5rVmVjdG9yLmFkZChsaW5rc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIExpbmtbXSBsaW5rcyA9IG5ldyBMaW5rW2xpbmtWZWN0b3Iuc2l6ZSgpXTsKLSAgICBsaW5rVmVjdG9yLmNvcHlJbnRvKGxpbmtzKTsKLSAgICByZXR1cm4gbGlua3M7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJUmVnaXN0cnkoSUZhdm9yaXRlc1VERElSZWdpc3RyeSByZWdpc3RyeSkKLSAgewotICAgIGFkZFVERElSZWdpc3RyeShyZWdpc3RyeS5nZXROYW1lKCksIHJlZ2lzdHJ5LmdldElucXVpcnlVUkwoKSwgcmVnaXN0cnkuZ2V0UHVibGlzaFVSTCgpLCByZWdpc3RyeS5nZXRSZWdpc3RyYXRpb25VUkwoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJQnVzaW5lc3MoSUZhdm9yaXRlc1VERElCdXNpbmVzcyBidXNpbmVzcykKLSAgewotICAgIGFkZFVERElCdXNpbmVzcyhidXNpbmVzcy5nZXROYW1lKCksIGJ1c2luZXNzLmdldElucXVpcnlVUkwoKSwgYnVzaW5lc3MuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJU2VydmljZShJRmF2b3JpdGVzVURESVNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGFkZFVERElTZXJ2aWNlKHNlcnZpY2UuZ2V0TmFtZSgpLCBzZXJ2aWNlLmdldElucXVpcnlVUkwoKSwgc2VydmljZS5nZXRTZXJ2aWNlS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIHNlcnZpY2VJbnRlcmZhY2UpCi0gIHsKLSAgICBhZGRVRERJU2VydmljZUludGVyZmFjZShzZXJ2aWNlSW50ZXJmYWNlLmdldE5hbWUoKSwgc2VydmljZUludGVyZmFjZS5nZXRJbnF1aXJ5VVJMKCksIHNlcnZpY2VJbnRlcmZhY2UuZ2V0U2VydmljZUludGVyZmFjZUtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1dTREwoSUZhdm9yaXRlc1dTREwgd3NkbCkKLSAgewotICAgIGFkZFdTRExTZXJ2aWNlKHdzZGwuZ2V0V3NkbFVybCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1dTSUwoSUZhdm9yaXRlc1dTSUwgd3NpbCkKLSAgewotICAgIGFkZFdTSUxMaW5rKHdzaWwuZ2V0V3NpbFVybCgpKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElSZWdpc3RyeShTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHB1Ymxpc2hBUEksIFN0cmluZyByZWdpc3RyYXRpb25VUkwpIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIExpbmsgbGluayA9IG5ldyBMaW5rSW1wbCgpOwotICAgIC8vIHJlZ2lzdHJ5IG5hbWUKLSAgICBBYnN0cmFjdCBhYnN0ID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGFic3Quc2V0VGV4dChyZWdpc3RyeU5hbWUpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdCk7Ci0gICAgLy8gaW5xdWlyeSBVUkwKLSAgICBBYnN0cmFjdCBhYnN0MiA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBhYnN0Mi5zZXRUZXh0KGlucXVpcnlBUEkpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdDIpOwotICAgIC8vIHB1Ymxpc2ggVVJMCi0gICAgQWJzdHJhY3QgYWJzdDMgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgaWYgKHB1Ymxpc2hBUEkgIT0gbnVsbCkKLSAgICAgIGFic3QzLnNldFRleHQocHVibGlzaEFQSSk7Ci0gICAgZWxzZQotICAgICAgYWJzdDMuc2V0VGV4dCgiIik7Ci0gICAgbGluay5hZGRBYnN0cmFjdChhYnN0Myk7Ci0gICAgLy8gcmVnaXN0cmF0aW9uIFVSTAotICAgIEFic3RyYWN0IGFic3Q0ID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGlmIChyZWdpc3RyYXRpb25VUkwgIT0gbnVsbCkKLSAgICAgIGFic3Q0LnNldFRleHQocmVnaXN0cmF0aW9uVVJMKTsKLSAgICBlbHNlCi0gICAgICBhYnN0NC5zZXRUZXh0KCIiKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3Q0KTsKLSAgICAvLyBhZGQgbmFtZXNwYWNlCi0gICAgbGluay5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMSk7Ci0gICAgaW5zcGVjdGlvbi5hZGRMaW5rKGxpbmspOwotICAgIHJldHVybiBsaW5rOwotICB9Ci0KLSAgcHVibGljIExpbmsgYWRkVURESUJ1c2luZXNzKFN0cmluZyBidXNpbmVzc05hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgYnVzaW5lc3NLZXkpIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIExpbmsgbGluayA9IG5ldyBMaW5rSW1wbCgpOwotICAgIEFic3RyYWN0IGFic3QgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgYWJzdC5zZXRUZXh0KGJ1c2luZXNzTmFtZSk7Ci0gICAgbGluay5hZGRBYnN0cmFjdChhYnN0KTsKLSAgICBsaW5rLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YyKTsKLSAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gbmV3IEJ1c2luZXNzRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgYmQuc2V0TG9jYXRpb24oaW5xdWlyeUFQSSk7Ci0gICAgQnVzaW5lc3NLZXkga2V5ID0gbmV3IEJ1c2luZXNzS2V5KGJ1c2luZXNzS2V5KTsKLSAgICBiZC5zZXRCdXNpbmVzc0tleShrZXkpOwotICAgIGxpbmsuc2V0RXh0ZW5zaW9uRWxlbWVudChiZCk7Ci0gICAgaW5zcGVjdGlvbi5hZGRMaW5rKGxpbmspOwotICAgIHJldHVybiBsaW5rOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkVURESVNlcnZpY2UoU3RyaW5nIHNlcnZpY2VOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlcnZpY2VLZXkpIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IG5ldyBTZXJ2aWNlSW1wbCgpOwotICAgIFNlcnZpY2VOYW1lIG5hbWUgPSBuZXcgU2VydmljZU5hbWVJbXBsKCk7Ci0gICAgbmFtZS5zZXRUZXh0KHNlcnZpY2VOYW1lKTsKLSAgICBzZXJ2aWNlLmFkZFNlcnZpY2VOYW1lKG5hbWUpOwotICAgIERlc2NyaXB0aW9uIGRlc2MgPSBuZXcgRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgZGVzYy5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gbmV3IFNlcnZpY2VEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBzZC5zZXRMb2NhdGlvbihpbnF1aXJ5QVBJKTsKLSAgICBTZXJ2aWNlS2V5IGtleSA9IG5ldyBTZXJ2aWNlS2V5KHNlcnZpY2VLZXkpOwotICAgIHNkLnNldFNlcnZpY2VLZXkoa2V5KTsKLSAgICBkZXNjLnNldEV4dGVuc2lvbkVsZW1lbnQoc2QpOwotICAgIHNlcnZpY2UuYWRkRGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgaW5zcGVjdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkVURESVNlcnZpY2VJbnRlcmZhY2UoU3RyaW5nIHNlckludE5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VySW50S2V5KSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwoKTsKLSAgICBTZXJ2aWNlTmFtZSBuYW1lID0gbmV3IFNlcnZpY2VOYW1lSW1wbCgpOwotICAgIG5hbWUuc2V0VGV4dChzZXJJbnROYW1lKTsKLSAgICBzZXJ2aWNlLmFkZFNlcnZpY2VOYW1lKG5hbWUpOwotICAgIERlc2NyaXB0aW9uIGRlc2MgPSBuZXcgRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgZGVzYy5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMSk7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gbmV3IFNlcnZpY2VEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBzZC5zZXRMb2NhdGlvbihpbnF1aXJ5QVBJKTsKLSAgICBTZXJ2aWNlS2V5IGtleSA9IG5ldyBTZXJ2aWNlS2V5KHNlckludEtleSk7Ci0gICAgc2Quc2V0U2VydmljZUtleShrZXkpOwotICAgIGRlc2Muc2V0RXh0ZW5zaW9uRWxlbWVudChzZCk7Ci0gICAgc2VydmljZS5hZGREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBpbnNwZWN0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBhZGRXU0RMU2VydmljZShTdHJpbmcgdXJsKSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwoKTsKLSAgICBEZXNjcmlwdGlvbiBkZXNjID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotICAgIGRlc2Muc2V0TG9jYXRpb24odXJsKTsKLSAgICBkZXNjLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9XU0RMKTsKLSAgICBzZXJ2aWNlLmFkZERlc2NyaXB0aW9uKGRlc2MpOwotICAgIGluc3BlY3Rpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFdTSUxMaW5rKFN0cmluZyB1cmwpIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIExpbmsgbGluayA9IG5ldyBMaW5rSW1wbCgpOwotICAgIGxpbmsuc2V0TG9jYXRpb24odXJsKTsKLSAgICBsaW5rLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9XU0lMX0lOU1BFQ1RJT04pOwotICAgIGluc3BlY3Rpb24uYWRkTGluayhsaW5rKTsKLSAgICByZXR1cm4gbGluazsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElSZWdpc3RyeShJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVJlZ2lzdHJ5KQotICAgICAgcmVtb3ZlTGluaygoKEZhdm9yaXRlc1VERElSZWdpc3RyeSlyZWdpc3RyeSkuZ2V0TGluaygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElCdXNpbmVzcyhJRmF2b3JpdGVzVURESUJ1c2luZXNzIGJ1c2luZXNzKQotICB7Ci0gICAgaWYgKGJ1c2luZXNzIGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzKQotICAgICAgcmVtb3ZlTGluaygoKEZhdm9yaXRlc1VERElCdXNpbmVzcylidXNpbmVzcykuZ2V0TGluaygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElTZXJ2aWNlKElGYXZvcml0ZXNVRERJU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgaWYgKHNlcnZpY2UgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZSkKLSAgICAgIHJlbW92ZVNlcnZpY2UoKChGYXZvcml0ZXNVRERJU2VydmljZSlzZXJ2aWNlKS5nZXRTZXJ2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIHNlcnZpY2VJbnRlcmZhY2UpCi0gIHsKLSAgICBpZiAoc2VydmljZUludGVyZmFjZSBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKQotICAgICAgcmVtb3ZlU2VydmljZSgoKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKXNlcnZpY2VJbnRlcmZhY2UpLmdldFNlcnZpY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNXU0RMKElGYXZvcml0ZXNXU0RMIHdzZGwpCi0gIHsKLSAgICBpZiAod3NkbCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTREwpCi0gICAgICByZW1vdmVTZXJ2aWNlKCgoRmF2b3JpdGVzV1NETCl3c2RsKS5nZXRTZXJ2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzV1NJTChJRmF2b3JpdGVzV1NJTCB3c2lsKQotICB7Ci0gICAgaWYgKHdzaWwgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0lMKQotICAgICAgcmVtb3ZlTGluaygoKEZhdm9yaXRlc1dTSUwpd3NpbCkuZ2V0TGluaygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBpbnNwZWN0aW9uLnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVMaW5rKExpbmsgbGluaykKLSAgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgaW5zcGVjdGlvbi5yZW1vdmVMaW5rKGxpbmspOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1NlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjc1ZmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1NlcnZpY2UKLXsKLSAgcHJvdGVjdGVkIFNlcnZpY2Ugc2VydmljZV87Ci0KLSAgcHVibGljIEZhdm9yaXRlc1NlcnZpY2UoKQotICB7Ci0gICAgc2VydmljZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIHNlcnZpY2VfID0gc2VydmljZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTFjYmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLkJ1c2luZXNzRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJQnVzaW5lc3MgZXh0ZW5kcyBGYXZvcml0ZXNMaW5rIGltcGxlbWVudHMgSUZhdm9yaXRlc1VERElCdXNpbmVzcwotewotICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMF0uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiAoKEJ1c2luZXNzRGVzY3JpcHRpb24pbGlua18uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpKS5nZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRCdXNpbmVzc0tleSgpCi0gIHsKLSAgICByZXR1cm4gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWxpbmtfLmdldEV4dGVuc2lvbkVsZW1lbnQoKSkuZ2V0QnVzaW5lc3NLZXkoKS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRCdXNpbmVzc0tleShTdHJpbmcga2V5KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UyOGE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLnBsdWdpbi5QYXJzZXJQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnkgZXh0ZW5kcyBGYXZvcml0ZXNMaW5rIGltcGxlbWVudHMgSUZhdm9yaXRlc1VERElSZWdpc3RyeQotewotICBwdWJsaWMgRmF2b3JpdGVzVURESVJlZ2lzdHJ5KCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzBdLmdldFRleHQoKTsKLSAgICBpZiAobmFtZS5zdGFydHNXaXRoKCIlIikpCi0gICAgewotICAgICAgU3RyaW5nIHRyYW5zbGF0ZWROYW1lID0gUGFyc2VyUGx1Z2luLmdldE1lc3NhZ2UobmFtZSk7Ci0gICAgICBpZiAodHJhbnNsYXRlZE5hbWUgIT0gbnVsbCkKLSAgICAgICAgbmFtZSA9IHRyYW5zbGF0ZWROYW1lOwotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICByZXR1cm4gKGxpbmtfLmdldEFic3RyYWN0cygpKVsxXS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKQotICB7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDIpCi0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBhYnN0cmFjdHNbMl0uZ2V0VGV4dCgpOwotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCAmJiBwdWJsaXNoVVJMLmxlbmd0aCgpID4gMCkKLSAgICAgICAgcmV0dXJuIHB1Ymxpc2hVUkw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKQotICB7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDMpCi0gICAgewotICAgICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IGFic3RyYWN0c1szXS5nZXRUZXh0KCk7Ci0gICAgICBpZiAocmVnaXN0cmF0aW9uVVJMICE9IG51bGwgJiYgcmVnaXN0cmF0aW9uVVJMLmxlbmd0aCgpID4gMCkKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvblVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgKGxpbmtfLmdldEFic3RyYWN0cygpKVswXS5zZXRUZXh0KG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMV0uc2V0VGV4dChpbnF1aXJ5VVJMKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hVUkwoU3RyaW5nIHB1Ymxpc2hVUkwpCi0gIHsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGlmIChhYnN0cmFjdHMubGVuZ3RoID4gMikKLSAgICAgIGFic3RyYWN0c1syXS5zZXRUZXh0KHB1Ymxpc2hVUkwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVnaXN0cmF0aW9uVVJMKFN0cmluZyByZWdpc3RyYXRpb25VUkwpCi0gIHsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGlmIChhYnN0cmFjdHMubGVuZ3RoID4gMykKLSAgICAgIGFic3RyYWN0c1szXS5zZXRUZXh0KHJlZ2lzdHJhdGlvblVSTCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMwMDlhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZSBleHRlbmRzIEZhdm9yaXRlc1NlcnZpY2UgaW1wbGVtZW50cyBJRmF2b3JpdGVzVURESVNlcnZpY2UKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChzZXJ2aWNlXy5nZXRTZXJ2aWNlTmFtZXMoKSlbMF0uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pKHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNkLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VLZXkoKQotICB7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gKFNlcnZpY2VEZXNjcmlwdGlvbikoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2QuZ2V0U2VydmljZUtleSgpLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VLZXkoU3RyaW5nIGtleSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMmQ5ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuU2VydmljZURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UgZXh0ZW5kcyBGYXZvcml0ZXNTZXJ2aWNlIGltcGxlbWVudHMgSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiAoc2VydmljZV8uZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKShzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgIHJldHVybiBzZC5nZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCkKLSAgewotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pKHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNkLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KFN0cmluZyBrZXkpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0RMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1dTREwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1MzJiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1dTREwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETCBleHRlbmRzIEZhdm9yaXRlc1NlcnZpY2UgaW1wbGVtZW50cyBJRmF2b3JpdGVzV1NETAotewotICBwdWJsaWMgRmF2b3JpdGVzV1NETCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRXc2RsVXJsKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKQotICB7Ci0gICAgcmV0dXJuIChzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVcmwoU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0lMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1dTSUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNjZjMyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1dTSUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTCBleHRlbmRzIEZhdm9yaXRlc0xpbmsgaW1wbGVtZW50cyBJRmF2b3JpdGVzV1NJTAotewotICBwdWJsaWMgRmF2b3JpdGVzV1NJTCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRXc2lsVXJsKCk7Ci0gIH0KLQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVybCgpCi0gIHsKLSAgICByZXR1cm4gbGlua18uZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdzaWxVcmwoU3RyaW5nIHdzaWxVUkwpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzUmVnaXN0cnlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNSZWdpc3RyeVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODljOTRhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNSZWdpc3RyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNSZWdpc3RyeVR5cGUKLXsKLSAgcHVibGljIElGYXZvcml0ZXNVRERJUmVnaXN0cnlbXSBnZXRGYXZvcml0ZXNVRERJUmVnaXN0cmllcygpOwotICBwdWJsaWMgSUZhdm9yaXRlc1VERElCdXNpbmVzc1tdIGdldEZhdm9yaXRlc1VERElCdXNpbmVzc2VzKCk7Ci0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVNlcnZpY2VbXSBnZXRGYXZvcml0ZXNVRERJU2VydmljZXMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZVtdIGdldEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlcygpOwotICBwdWJsaWMgSUZhdm9yaXRlc1dTRExbXSBnZXRGYXZvcml0ZXNXU0RMcygpOwotICBwdWJsaWMgSUZhdm9yaXRlc1dTSUxbXSBnZXRGYXZvcml0ZXNXU0lMcygpOwotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElSZWdpc3RyeShJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IHJlZ2lzdHJ5KTsKLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESUJ1c2luZXNzKElGYXZvcml0ZXNVRERJQnVzaW5lc3MgYnVzaW5lc3MpOwotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJU2VydmljZShJRmF2b3JpdGVzVURESVNlcnZpY2Ugc2VydmljZSk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlKTsKLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzV1NETChJRmF2b3JpdGVzV1NETCB3c2RsKTsKLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzV1NJTChJRmF2b3JpdGVzV1NJTCB3c2lsKTsKLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJUmVnaXN0cnkoSUZhdm9yaXRlc1VERElSZWdpc3RyeSByZWdpc3RyeSk7Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElCdXNpbmVzcyhJRmF2b3JpdGVzVURESUJ1c2luZXNzIGJ1c2luZXNzKTsKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVNlcnZpY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlIHNlcnZpY2UpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZShJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Ugc2VydmljZUludGVyZmFjZSk7Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1dTREwoSUZhdm9yaXRlc1dTREwgd3NkbCk7Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1dTSUwoSUZhdm9yaXRlc1dTSUwgd3NpbCk7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNTVmMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzVURESUJ1c2luZXNzCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRCdXNpbmVzc0tleSgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLSAgcHVibGljIHZvaWQgc2V0QnVzaW5lc3NLZXkoU3RyaW5nIGtleSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzczMzMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1VERElSZWdpc3RyeQotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGlzaFVSTCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFVSTChTdHJpbmcgcHVibGlzaFVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJhdGlvblVSTChTdHJpbmcgcmVnaXN0cmF0aW9uVVJMKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDgwYTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzVURESVNlcnZpY2UKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VLZXkoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VLZXkoU3RyaW5nIGtleSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyN2M4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KFN0cmluZyBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWYzNjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTREwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNXU0RMCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVybChTdHJpbmcgd3NkbFVSTCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0lMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0lMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OGRjNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NJTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1dTSUwKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVybCgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRXc2lsVXJsKFN0cmluZyB3c2lsVVJMKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9wbHVnaW4vUGFyc2VyUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvcGx1Z2luL1BhcnNlclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTMyYjIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9wbHVnaW4vUGFyc2VyUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLnBsdWdpbjsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uTWVzc2FnZVV0aWxzOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgUGFyc2VyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgUGFyc2VyUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgUGFyc2VyUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgICA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QYXJzZXJQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFBhcnNlclBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUGFyc2VyUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLQotCSAvKioKLQkgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KLQkgICogdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUuCi0JICAqIEBwYXJhbSBrZXkgVGhlIG1lc3NhZ2Uga2V5IHN0cmluZyBwcmVmaXhlZCBieSBhICIlIiBzeW1ib2wuCi0JICAqIFRoYXQgaXMsIHRoZSBzdHJpbmcgcGFzc2VkIGluIG11c3QgYmUgb2YgdGhlIGZvcm0gIiVLRVkiCi0JICAqIHdoZXJlIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRhaW5zIGEgbGluZSBvZiB0aGUKLQkgICogZm9ybTogIktFWSA9IHZhbHVlIi4KLQkgICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG1lc3NhZ2UuCi0JICAqLwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXkgKQotCSAgewotCSAgICBNZXNzYWdlVXRpbHMgbXNnVXRpbHMgPSBuZXcgTWVzc2FnZVV0aWxzKCAib3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5wbHVnaW4iLCBwbHVnaW4gKTsKLQkgICAgCi0JICAgIGlmKCBrZXkuc3RhcnRzV2l0aCgiJSIpKQotCSAgICB7Ci0JICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyggMSwga2V5Lmxlbmd0aCgpICk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHJldHVybiBtc2dVdGlscy5nZXRNZXNzYWdlKGtleSk7Ci0JICB9Ci0KLQkgIC8qKgotCSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotCSAgKiB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGxvY2FsZS4KLQkgICogU3Vic3RpdHV0aW9uIHNlcXVlbmNlcyBpbiB0aGUgbWVzc2FnZSBzdHJpbmcKLQkgICogYXJlIHJlcGxhY2VkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBzdWJzdGl0dXRpb24gb2JqZWN0cyAod2hpY2gKLQkgICogYXJlIG1vc3QgZnJlcXVlbnRseSBzdHJpbmdzKS4gU2VlIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0IGZvcgotCSAgKiBmdXJ0aGVyIGRldGFpbHMgb24gc3Vic3RpdHV0aW9uLgotCSAgKiBAcGFyYW0ga2V5IFRoZSBtZXNzYWdlIGtleSBzdHJpbmcgcHJlZml4ZWQgYnkgYSAiJSIgc3ltYm9sLgotCSAgKiBUaGF0IGlzLCB0aGUgc3RyaW5nIHBhc3NlZCBpbiBtdXN0IGJlIG9mIHRoZSBmb3JtICIlS0VZIgotCSAgKiB3aGVyZSB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250YWlucyBhIGxpbmUgb2YgdGhlCi0JICAqIGZvcm06ICJLRVkgPSB2YWx1ZSIuCi0JICAqIEBwYXJhbSBhcmdzIFRoZSBzdWJzdGl0dXRpb24gdmFsdWVzIGZvciB0aGUgbWVzc2FnZQotCSAgKiBhcyByZXF1aXJlZCBieSB0aGUgbWVzc2FnZSBpbiBwbHVnaW4ucHJvcGVydGllcyBhbmQKLQkgICogYnkgdGhlIHJ1bGVzIG9mIGNsYXNzIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LgotCSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbWVzc2FnZS4KLQkgICovCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncyApCi0JICB7Ci0JICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRNZXNzYWdlKGtleSksYXJncyk7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9IVE1MSGVhZEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0hUTUxIZWFkSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjNjNjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0hUTUxIZWFkSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNyAgIDE0MjMyNCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEhUTUxIZWFkSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi17Ci0gIHByaXZhdGUgZmluYWwgY2hhciBTVEFSVF9UQUcgPSAnPCc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBFTkRfVEFHID0gJz4nOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIRUFEX1NUQVJUX1RBRyA9ICI8aGVhZD4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIRUFEX0VORF9UQUcgPSAiPC9oZWFkPiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJPT1RfU1RBUlRfVEFHID0gIjxyb290PiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJPT1RfRU5EX1RBRyA9ICI8L3Jvb3Q+IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVVRGOCA9ICJVVEYtOCI7Ci0gIAotICAvL0hUTUwgTUVUQSB0YWcgaW5mb3JtYXRpb24gdXNlZCB0byBkZXRlY3QgdGhlIGNoYXJzZXQuCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUTUxfQ09OVEVOVCA9ICJjb250ZW50IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9FUVVJViA9ICJodHRwLWVxdWl2IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9FUVVJVl9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0hBUlNFVCA9ICJjaGFyc2V0IjsKLSAgCi0gIC8vIFdTSUwgdGFnIGluZm9ybWF0aW9uLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBNRVRBID0gIm1ldGEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOQU1FID0gIm5hbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX0lOU1BFQ1RJT04gPSAic2VydmljZUluc3BlY3Rpb24iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDT05URU5UID0gImNvbnRlbnQiOwotICAKLSAgLy8gRElTQ08gdGFnIGluZm9ybWF0aW9uLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBMSU5LID0gImxpbmsiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBUWVBFID0gInR5cGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBURVhUX1hNTCA9ICJ0ZXh0L3htbCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJFTCA9ICJyZWwiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBTFRFUk5BVEUgPSAiYWx0ZXJuYXRlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFJFRiA9ICJocmVmIjsKLSAgICAKLSAgcHJpdmF0ZSBTdHJpbmcgYmFzZVVSSV87Ci0gIHByaXZhdGUgVmVjdG9yIHdzaWxzXzsKLSAgcHJpdmF0ZSBWZWN0b3IgZGlzY29zXzsKLSAgcHJpdmF0ZSBTdHJpbmcgYnl0ZUVuY29kaW5nID0gVVRGODsgLy9EZWZhdWx0IHRvIFVURi04LgotICAKLSAgcHVibGljIEhUTUxIZWFkSGFuZGxlcihTdHJpbmcgYmFzZVVSSSkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgYmFzZVVSSV8gPSBiYXNlVVJJOwotICAgIHdzaWxzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBkaXNjb3NfID0gbmV3IFZlY3RvcigpOwotICB9Ci0gCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXc2lscygpCi0gIHsKLSAgICBTdHJpbmdbXSB3c2lscyA9IG5ldyBTdHJpbmdbd3NpbHNfLnNpemUoKV07Ci0gICAgd3NpbHNfLmNvcHlJbnRvKHdzaWxzKTsKLSAgICByZXR1cm4gd3NpbHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREaXNjb3MoKQotICB7Ci0gICAgU3RyaW5nW10gZGlzY29zID0gbmV3IFN0cmluZ1tkaXNjb3NfLnNpemUoKV07Ci0gICAgZGlzY29zXy5jb3B5SW50byhkaXNjb3MpOwotICAgIHJldHVybiBkaXNjb3M7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHFOYW1lTEMgPSBxTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIGlmIChxTmFtZUxDLmVxdWFscyhNRVRBKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZVZhbHVlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShOQU1FKTsKLSAgICAgIGlmIChTRVJWSUNFX0lOU1BFQ1RJT04uZXF1YWxzKG5hbWVWYWx1ZSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB3c2lsVVJJID0gYXR0cmlidXRlcy5nZXRWYWx1ZShDT05URU5UKTsKLSAgICAgICAgaWYgKGJhc2VVUklfICE9IG51bGwgJiYgd3NpbFVSSS5pbmRleE9mKCI6LyIpID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIHNiLmFwcGVuZChiYXNlVVJJXy5zdWJzdHJpbmcoMCwgYmFzZVVSSV8ubGFzdEluZGV4T2YoIi8iKSsxKSk7Ci0gICAgICAgICAgc2IuYXBwZW5kKHdzaWxVUkkpOwotICAgICAgICAgIHdzaWxVUkkgPSBzYi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghd3NpbHNfLmNvbnRhaW5zKHdzaWxVUkkpKQotICAgICAgICAgIHdzaWxzXy5hZGQod3NpbFVSSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHFOYW1lTEMuZXF1YWxzKExJTkspKQotICAgIHsKLSAgICAgIC8vIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL21zZG5tYWcvaXNzdWVzLzAyLzAyL3htbC9kZWZhdWx0LmFzcHggZm9yIG1vcmUgZGV0YWlscyBvbiBESVNDTy4KLSAgICAgIFN0cmluZyB0eXBlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShUWVBFKTsKLSAgICAgIFN0cmluZyByZWwgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFJFTCk7Ci0gICAgICBTdHJpbmcgaHJlZiA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoSFJFRik7Ci0gICAgICBpZiAoVEVYVF9YTUwuZXF1YWxzKHR5cGUpICYmIEFMVEVSTkFURS5lcXVhbHMocmVsKSAmJiBocmVmICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBkaXNjb1VSSSA9IGhyZWY7Ci0gICAgICAgIGlmIChkaXNjb1VSSS5pbmRleE9mKCI6LyIpID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIHNiLmFwcGVuZChiYXNlVVJJXy5zdWJzdHJpbmcoMCxiYXNlVVJJXy5sYXN0SW5kZXhPZigiLyIpKzEpKTsKLSAgICAgICAgICBzYi5hcHBlbmQoZGlzY29VUkkpOwotICAgICAgICAgIGRpc2NvVVJJID0gc2IudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRpc2Nvc18uY29udGFpbnMoZGlzY29VUkkpKQotICAgICAgICAgIGRpc2Nvc18uYWRkKGRpc2NvVVJJKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgewotICB9Ci0gIAotICAvKioKLSAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgdGhlIHByb3ZpZGVkIHRhZyBpbiB0aGUgcHJvdmlkZWQgZG9jdW1lbnQgdG8gdGhlIHByb3ZpZGVkIFN0cmluZ0J1ZmZlci4KLSAgICogQHBhcmFtIHRhcmdldAotICAgKiBAcGFyYW0gZG9jdW1lbnQKLSAgICogQHBhcmFtIHRhZwotICAgKiBAcGFyYW0gZW5jb2RpbmcKLSAgICogQHJldHVybiBib29sZWFuIGZhbHNlIGlmIHRoZSB2YWx1ZSBvZiB0aGUgZW5jb2RpbmcgcGFyYW1ldGVyIG1hdGNoZWQgdGhlIGRldGVjdGVkIGNoYXJzZXQgb3IgaWYgbm8gY2hhcnNldCB3YXMgZGV0ZWN0ZWQuCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBhIGNoYXJzZXQgd2FzIGRldGVjdGVkIGFuZCBpdCBkaWQgbm90IGVxdWFsIHRoZSBlbmNvZGluZyBwYXJhbWV0ZXIuIElmIHRydWUgaXMgcmV0dXJuZWQKLSAgICogdGhlIGhhcnZlc3Rpbmcgb2YgdGhlIHRhZ3Mgd291bGQgaGF2ZSBzdG9wcGVkIGF0IHRoZSBwb2ludCB0aGUgY2hhcnNldCB3YXMgZGV0ZWN0ZWQuIFRoZSBjYWxsZXIKLSAgICogc2hvdWxkIGNhbGwgdGhpcyBtZXRob2QgYWdhaW4gd2l0aCB0aGUgY29ycmVjdCBlbmNvZGluZy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXJ2ZXN0VGFncyhTdHJpbmdCdWZmZXIgdGFyZ2V0LFN0cmluZyBkb2N1bWVudCxTdHJpbmcgdGFnLCBTdHJpbmcgZW5jb2RpbmcpCi0gIHsKLQlib29sZWFuIGNoYW5nZUVuY29kaW5nID0gZmFsc2U7Ci0gICAgaW50IGluZGV4ID0gZG9jdW1lbnQuaW5kZXhPZihTVEFSVF9UQUcpOwotICAgIGludCBkb2N1bWVudExlbmd0aCA9IGRvY3VtZW50Lmxlbmd0aCgpOwotICAgIGludCB0YWdMZW5ndGggPSB0YWcubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGluZGV4ICE9IC0xICYmIChpbmRleCsxK3RhZ0xlbmd0aCk8ZG9jdW1lbnRMZW5ndGgpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IGRvY3VtZW50LnN1YnN0cmluZyhpbmRleCsxLGluZGV4KzErdGFnTGVuZ3RoKTsKLSAgICAgIGlmIChzdHIudG9Mb3dlckNhc2UoKS5lcXVhbHModGFnKSkKLSAgICAgIHsKLSAgICAgICAgc3RyID0gZG9jdW1lbnQuc3Vic3RyaW5nKGluZGV4LGRvY3VtZW50LmluZGV4T2YoRU5EX1RBRyxpbmRleCsxKSsxKTsKLSAgICAgICAgdGFyZ2V0LmFwcGVuZChzdHIpOwotICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICAvL0lmIHRhZyBpcyBNRVRBIGFuZCBkZWNsYXJlcyB0aGUgY2hhcnNldCwgZmluZCBvdXQgd2hhdCBpdCBpcwotICAgICAgICAvL2FuZCBpZiBpdCBtYXRjaGVzIHdoYXQgd2FzIHBhc3NlZCBpbi4gSWYgaXQgbWF0Y2hlcywgY29udGludWUgCi0gICAgICAgIC8vd2l0aCB0aGUgcGFyc2luZyBhbmQgcmV0dXJuIGZhbHNlIHdoZW4gY29tcGxldGUuIAotICAgICAgICAvL0lmIHRoZSBkZXRlY3RlZCBjaGFyc2V0IGlzIGRpZmZlcmVudCBmcm9tIHdoYXQgd2FzIHBhc3NlZCBpbiwgCi0gICAgICAgIC8vLSBjaGFuZ2UgYnl0ZUVuY29kaW5nIHRvIGVxdWFsIHRoZSBkZXRlY3RlZCBjaGFyc2V0LgotICAgICAgICAvLy0gc3RvcCBwYXJzaW5nLgotICAgICAgICAvLy0gcmV0dXJuIHRydWUuCi0gICAgICAgIGlmICh0YWcuZXF1YWxzKE1FVEEpKQotICAgICAgICB7Ci0gICAgICAgICAgaW50IGlkeE9mQ29udGVudCA9IHN0ci5pbmRleE9mKEhUTUxfQ09OVEVOVCk7Ci0gICAgICAgICAgaW50IGlkeE9mSFRUUEVRVUlWID0gc3RyLmluZGV4T2YoSFRUUF9FUVVJVik7Ci0gICAgICAgICAgaWYgKGlkeE9mSFRUUEVRVUlWIT0gLTEgJiYgaWR4T2ZDb250ZW50ICE9IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgCS8vQ2hlY2sgaWYgdGhlIGh0dHAtZXF1aXYgYXR0cmlidXRlIGlzIHNldCB0byBDb250ZW50LVR5cGUuCi0gICAgICAgICAgCWludCBpZHhPZkhUVFBFUVVJVk9wZW5RdW90ZSA9IHN0ci5pbmRleE9mKCJcIiIsIGlkeE9mSFRUUEVRVUlWKzEpOwotICAgICAgICAJaW50IGlkeE9mSFRUUEVRVUlWQ2xvc2luZ1F1b3RlID0gc3RyLmluZGV4T2YoIlwiIiwgaWR4T2ZIVFRQRVFVSVZPcGVuUXVvdGUrMSk7Ci0gICAgICAgIAlTdHJpbmcgaFRUUEVRVUlWVmFsdWVVbnRyaW1tZWQgPSBzdHIuc3Vic3RyaW5nKGlkeE9mSFRUUEVRVUlWT3BlblF1b3RlKzEsIGlkeE9mSFRUUEVRVUlWQ2xvc2luZ1F1b3RlKTsKLSAgICAgICAgCWlmIChoVFRQRVFVSVZWYWx1ZVVudHJpbW1lZC50cmltKCkuZXF1YWxzKEhUVFBfRVFVSVZfQ09OVEVOVF9UWVBFKSkKLSAgICAgICAgCXsKLSAgICAgICAgCSAgLy9UaGlzIE1FVEEgdGFnIGNvbnRhaW5zIHRoZSBjaGFyc2V0LiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50IGF0dHJpYnV0ZQotICAgICAgICAJICBpbnQgaWR4T2ZPcGVuUXVvdGUgPSBzdHIuaW5kZXhPZigiXCIiLCBpZHhPZkNvbnRlbnQrMSk7Ci0gICAgICAgIAkgIGludCBpZHhPZkNsb3NpbmdRdW90ZSA9IHN0ci5pbmRleE9mKCJcIiIsIGlkeE9mT3BlblF1b3RlKzEpOwotICAgICAgICAJICBTdHJpbmcgY29udGVudFZhbHVlID0gc3RyLnN1YnN0cmluZyhpZHhPZk9wZW5RdW90ZSsxLCBpZHhPZkNsb3NpbmdRdW90ZSk7Ci0gICAgICAgIAkgIAotICAgICAgICAJICAvL0dldCB0aGUgY2hhcnNldAotICAgICAgICAJICBpbnQgaWR4T2ZDaGFyU2V0ID0gY29udGVudFZhbHVlLmluZGV4T2YoQ0hBUlNFVCk7Ci0gICAgICAgIAkgIGludCBpZHhPZkVxdWFscyA9IGNvbnRlbnRWYWx1ZS5pbmRleE9mKCI9IiwgaWR4T2ZDaGFyU2V0K0NIQVJTRVQubGVuZ3RoKCkpOwotICAgICAgICAJICBTdHJpbmcgZGV0ZWN0ZWRFbmNvZGluZ1ZhbHVlVW50cmltbWVkID0gY29udGVudFZhbHVlLnN1YnN0cmluZyhpZHhPZkVxdWFscysxKTsKLSAgICAgICAgCSAgU3RyaW5nIGRldGVjdGVkRW5jb2RpbmdWYWx1ZSA9IGRldGVjdGVkRW5jb2RpbmdWYWx1ZVVudHJpbW1lZC50cmltKCk7Ci0gICAgICAgIAkgIGlmICghZGV0ZWN0ZWRFbmNvZGluZ1ZhbHVlLmVxdWFscyhlbmNvZGluZykpCi0gICAgICAgIAkgIHsKLSAgICAgICAgCSAgICBieXRlRW5jb2RpbmcgPSBkZXRlY3RlZEVuY29kaW5nVmFsdWU7Ci0gICAgICAgIAkgICAgY2hhbmdlRW5jb2RpbmcgPSB0cnVlOwotICAgICAgICAJICAgIGJyZWFrOwotICAgICAgICAJICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICBpbmRleCA9IGRvY3VtZW50LmluZGV4T2YoU1RBUlRfVEFHLGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNoYW5nZUVuY29kaW5nOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBJZiB0aGUgcHJvdmlkZWQgYnl0ZSBhcnJheSByZXBlcmVzZW50cyB0aGUgY29udGVudHMgb2YgYW4gSFRNTAotICAgKiBkb2N1bWVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYSBieXRlIGFycmF5IGluIHdoaWNoCi0gICAqIDx1bD4KLSAgICogPGxpPnRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIEhFQUQgdGFncyBhcmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aCAKLSAgICogb3BlbmluZyBhbmQgY2xvc2luZyA8cm9vdD4gdGFnczwvbGk+Ci0gICAqIDxsaT5vbmx5IHRoZSBNRVRBIGFuZCBMSU5LIGVsZW1lbnRzIGFyZSBpbiB0aGUgSFRNTCBkb2N1bWVudAotICAgKiBhcmUgaW5jbHVkZWQgaW4gdGhlIGNvbnRlbnRzIGJldHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcKLSAgICogPHJvb3Q+IHRhZ3MuCi0gICAqIDwvdWw+Ci0gICAqIFRoaXMgbWV0aG9kIHdpbGwgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYnl0ZUVuY29kaW5nIFN0cmluZwotICAgKiBhdHRyaWJ1dGUgb24gdGhpcyBjbGFzcyBpZiBpdCBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbgotICAgKiBVVEYtOC4gQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBnZXRCeXRlRW5jb2RpbmcoKQotICAgKiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIGlmIHRoZXkgbmVlZCB0byBrbm93IHRoZSBjaGFyc2V0Ci0gICAqIHZhbHVlIHVzZWQgYnkgdGhpcyBtZXRob2QgdG8gZGVjb2RlL2VuZGNvZGUgdGhlIGJ5dGUgYXJyYXkuCi0gICAqIEBwYXJhbSBiCi0gICAqIEByZXR1cm4gYnl0ZVtdCi0gICAqLwotICBwdWJsaWMgYnl0ZVtdIGhhcnZlc3RIZWFkVGFncyhieXRlW10gYikKLSAgewotICAgIFN0cmluZyBzOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAJLy9Bc3N1bWUgdGhlIGRlZmF1bHQgYnl0ZSBlbmNvZGluZyBvZiBVVEYtOCBmb3Igbm93LgotICAgIAlzID0gbmV3IFN0cmluZyhiLCBieXRlRW5jb2RpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgewotICAgICAgcyA9IG5ldyBTdHJpbmcoYik7Ci0gICAgfQotICAgIFN0cmluZyBoZWFkID0gcy50b0xvd2VyQ2FzZSgpOwotICAgIGludCBoZWFkU3RhcnRJbmRleCA9IGhlYWQuaW5kZXhPZihIRUFEX1NUQVJUX1RBRyk7Ci0gICAgaW50IGhlYWRFbmRJbmRleCA9IGhlYWQuaW5kZXhPZihIRUFEX0VORF9UQUcpOwotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQoUk9PVF9TVEFSVF9UQUcpOwotICAgIGlmIChoZWFkU3RhcnRJbmRleCAhPSAtMSAmJiBoZWFkRW5kSW5kZXggIT0gLTEpCi0gICAgewotICAgICAgaGVhZCA9IHMuc3Vic3RyaW5nKGhlYWRTdGFydEluZGV4LCBoZWFkRW5kSW5kZXgrSEVBRF9FTkRfVEFHLmxlbmd0aCgpKTsKLSAgICAgIGJvb2xlYW4gZW5jb2RpbmdDaGFuZ2VkID0gaGFydmVzdFRhZ3Moc2IsaGVhZCxNRVRBLCBieXRlRW5jb2RpbmcpOwotICAgICAgaWYgKGVuY29kaW5nQ2hhbmdlZCkKLSAgICAgIHsKLSAgICAJICAvL1RoZSBoYXJ2ZXN0VGFncyBtZXRob2QgZGV0ZWN0ZWQgYSBkaWZmZXJlbnQgY2hhcnNldAotICAgIAkgIC8vdGhhbiB0aGUgb25lIHRoYXQgd2FzIHBhc3NlZCBpbi4gU3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nCi0gICAgCSAgLy93aXRoIHRoZSBjb3JyZWN0IGNoYXJzZXQuCi0gICAgCSAgICBTdHJpbmcgczI7Ci0gICAgCSAgICB0cnkKLSAgICAJICAgIHsKLSAgICAJICAgIAlzMiA9IG5ldyBTdHJpbmcoYiwgYnl0ZUVuY29kaW5nKTsKLSAgICAJICAgIH0KLSAgICAJICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICAJICAgIHsKLSAgICAJICAgICAgczIgPSBuZXcgU3RyaW5nKGIpOwotICAgIAkgICAgfQotICAgIAkgICAgU3RyaW5nIGhlYWQyID0gczIudG9Mb3dlckNhc2UoKTsKLSAgICAJICAgIGludCBoZWFkMlN0YXJ0SW5kZXggPSBoZWFkMi5pbmRleE9mKEhFQURfU1RBUlRfVEFHKTsKLSAgICAJICAgIGludCBoZWFkMkVuZEluZGV4ID0gaGVhZDIuaW5kZXhPZihIRUFEX0VORF9UQUcpOwotICAgIAkgICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgCSAgICBzYi5hcHBlbmQoUk9PVF9TVEFSVF9UQUcpOwotICAgIAkgICAgaWYgKGhlYWQyU3RhcnRJbmRleCAhPSAtMSAmJiBoZWFkMkVuZEluZGV4ICE9IC0xKQotICAgIAkgICAgewotICAgIAkgICAgICBoZWFkMiA9IHMyLnN1YnN0cmluZyhoZWFkMlN0YXJ0SW5kZXgsIGhlYWQyRW5kSW5kZXgrSEVBRF9FTkRfVEFHLmxlbmd0aCgpKTsKLSAgICAJICAgICAgaGFydmVzdFRhZ3Moc2IsaGVhZDIsTUVUQSwgYnl0ZUVuY29kaW5nKTsKLSAgICAJICAgICAgaGFydmVzdFRhZ3Moc2IsaGVhZDIsTElOSyxieXRlRW5jb2RpbmcpOwotICAgIAkgICAgfSAgICAJICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaGFydmVzdFRhZ3Moc2IsaGVhZCxMSU5LLGJ5dGVFbmNvZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHNiLmFwcGVuZChST09UX0VORF9UQUcpOwotICAgIHRyeQotICAgIHsKLSAgICAJcmV0dXJuIHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoYnl0ZUVuY29kaW5nKTsgICAgICAKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICB7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKS5nZXRCeXRlcygpOwotICAgIH0gICAgCi0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Qnl0ZUVuY29kaW5nKCkKLSAgewotCSAgcmV0dXJuIGJ5dGVFbmNvZGluZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTdmZTFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0lsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1wdWJsaWMgY2xhc3MgSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMjUzMzk4MTE3NjI4NTU2MTIzNEw7Ci0KLSAgcHVibGljIElsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24oU3RyaW5nIGFyZykKLSAgewotICAgIHN1cGVyKGFyZyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1VERElVUklIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1VERElVUklIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzZTg5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9VRERJVVJJSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElVUklIZWxwZXIKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZU0VSVklDRV9VUklfVEVNUExBVEUgPSAidWRkaXNlcnZpY2U6cXVlcnk6ezB9OnF1ZXJ5OnsxfSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFS0VZX1VSSV9URU1QTEFURSA9ICJ1ZGRpc2VydmljZTpzZXJ2aWNlS2V5OnswfTpzZXJ2aWNlS2V5OnsxfSI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRRdWVyeVNlcnZpY2VVUkkoU3RyaW5nIHF1ZXJ5LFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgU3RyaW5nW10gdXJpUGFyYW1zID0ge3F1ZXJ5LGlucXVpcnlVUkx9OwotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChRVUVSWVNFUlZJQ0VfVVJJX1RFTVBMQVRFLHVyaVBhcmFtcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFNlcnZpY2VLZXlVUkkoU3RyaW5nIHNlcnZpY2VLZXksU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBTdHJpbmdbXSB1cmlQYXJhbXMgPSB7c2VydmljZUtleSxpbnF1aXJ5VVJMfTsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoU0VSVklDRUtFWV9VUklfVEVNUExBVEUsdXJpUGFyYW1zKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gcGFyc2VVUkkoU3RyaW5nIHBhdHRlcm4sU3RyaW5nIHVyaSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIE1lc3NhZ2VGb3JtYXQgbWYgPSBuZXcgTWVzc2FnZUZvcm1hdChwYXR0ZXJuKTsKLSAgICAgIE9iamVjdFtdIHBhcnNlZFJlc3VsdHMgPSBtZi5wYXJzZSh1cmkpOwotICAgICAgaWYgKHBhcnNlZFJlc3VsdHMgIT0gbnVsbCAmJiBwYXJzZWRSZXN1bHRzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIHJlc3VsdHMgPSBuZXcgU3RyaW5nW3BhcnNlZFJlc3VsdHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8cGFyc2VkUmVzdWx0cy5sZW5ndGg7aSsrKQotICAgICAgICAgIHJlc3VsdHNbaV0gPSAoU3RyaW5nKXBhcnNlZFJlc3VsdHNbaV07Ci0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gcGFyc2VTZXJ2aWNlS2V5VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICByZXR1cm4gcGFyc2VVUkkoU0VSVklDRUtFWV9VUklfVEVNUExBVEUsdXJpKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBwYXJzZVF1ZXJ5U2VydmljZVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlVVJJKFFVRVJZU0VSVklDRV9VUklfVEVNUExBVEUsdXJpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1NJTE1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XU0lMTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI4NmJhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XU0lMTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIFdTSUxNZXNzYWdlcyBleHRlbmRzIE5MUwotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLndzaWwiOyAvLyROT04tTkxTLTEkCi0gIAotICBzdGF0aWMKLSAgewotICAgIE5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFdTSUxNZXNzYWdlcy5jbGFzcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFM7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTExFR0FMX0FSR1VNRU5UUzsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkk7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlZBTElEX1dTSUxfVVJJOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5SRVNPTFZBQkxFX1dTREw7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01BTEZPUk1FRF9XU0RMOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1JJVEVfV1NJTDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2YWUzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTQ5MTgyMTEwMjE2MjAzMTYwNDlMOwotCi0gIHByaXZhdGUgSU9FeGNlcHRpb24gaW9lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgd3d3QXV0aE1zZ187Ci0gIHByaXZhdGUgU3RyaW5nIHVybF87Ci0KLSAgcHVibGljIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uKElPRXhjZXB0aW9uIGlvZSwgU3RyaW5nIHd3d0F1dGhNc2csIFN0cmluZyB1cmwpCi0gIHsKLSAgICBzdXBlcihpb2UuZ2V0TWVzc2FnZSgpKTsKLSAgICBpb2VfID0gaW9lOwotICAgIHd3d0F1dGhNc2dfID0gd3d3QXV0aE1zZzsKLSAgICB1cmxfID0gdXJsOwotICB9Ci0KLSAgcHVibGljIElPRXhjZXB0aW9uIGdldElPRXhjZXB0aW9uKCkKLSAgewotICAgIHJldHVybiBpb2VfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXV1dBdXRoZW50aWNhdGlvbk1zZygpCi0gIHsKLSAgICByZXR1cm4gd3d3QXV0aE1zZ187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVSTCgpCi0gIHsKLSAgICByZXR1cm4gdXJsXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkZWJhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1wdWJsaWMgaW50ZXJmYWNlIFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlcgotewotICBwdWJsaWMgdm9pZCBoYW5kbGVXV1dBdXRoZW50aWNhdGlvbihXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZUVudGl0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZUVudGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTE3YmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VFbnRpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRW50aXR5Ci17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfVU5LTk9XTiA9IC0xOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0hUTUwgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1dTSUwgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1dTREwgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1VERElfU0VSVklDRSA9IDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfRElTQ08gPSA0OwotCi0gIHByaXZhdGUgT2JqZWN0IHBhcmVudF87Ci0gIHByaXZhdGUgTGlzdCBjaGlsZHJlbl87Ci0gIHByaXZhdGUgaW50IHR5cGVfOwotICBwcml2YXRlIFN0cmluZyB1cmlfOwotICBwcml2YXRlIGJ5dGVbXSBieXRlc187Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBVc2VybmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBQYXNzd29yZF87Ci0gIHByaXZhdGUgU3RyaW5nIGRvY3VtZW50YXRpb25fOwotICBwcml2YXRlIE9iamVjdCBtb2RlbF87Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VFbnRpdHkoKQotICB7Ci0gICAgcGFyZW50XyA9IG51bGw7Ci0gICAgY2hpbGRyZW5fID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHR5cGVfID0gVFlQRV9VTktOT1dOOwotICAgIHVyaV8gPSBudWxsOwotICAgIGJ5dGVzXyA9IG51bGw7Ci0gICAgaHR0cFVzZXJuYW1lXyA9IG51bGw7Ci0gICAgaHR0cFBhc3N3b3JkXyA9IG51bGw7Ci0gICAgZG9jdW1lbnRhdGlvbl8gPSBudWxsOwotICAgIG1vZGVsXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFBhcmVudCgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudChPYmplY3QgcGFyZW50KQotICB7Ci0gICAgcGFyZW50XyA9IHBhcmVudDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldENoaWxkcmVuKCkKLSAgewotICAgIHJldHVybiBjaGlsZHJlbl87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRDaGlsZChPYmplY3QgY2hpbGQpCi0gIHsKLSAgICBjaGlsZHJlbl8uYWRkKGNoaWxkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkKE9iamVjdCBjaGlsZCkKLSAgewotICAgIGNoaWxkcmVuXy5yZW1vdmUoY2hpbGQpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoaW50IHR5cGUpCi0gIHsKLSAgICB0eXBlXyA9IHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdXJpXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgdXJpXyA9IHVyaTsKLSAgfQotCi0gIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZXMoKQotICB7Ci0gICAgcmV0dXJuIGJ5dGVzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEJ5dGVzKGJ5dGVbXSBieXRlcykKLSAgewotICAgIGJ5dGVzXyA9IGJ5dGVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBVc2VybmFtZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQVXNlcm5hbWUoU3RyaW5nIGh0dHBVc2VybmFtZSkKLSAgewotICAgIGh0dHBVc2VybmFtZV8gPSBodHRwVXNlcm5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEhUVFBQYXNzd29yZCgpCi0gIHsKLSAgICByZXR1cm4gaHR0cFBhc3N3b3JkXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEhUVFBQYXNzd29yZChTdHJpbmcgaHR0cFBhc3N3b3JkKQotICB7Ci0gICAgaHR0cFBhc3N3b3JkXyA9IGh0dHBQYXNzd29yZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXREb2N1bWVudGF0aW9uKCkKLSAgewotICAgIHJldHVybiBkb2N1bWVudGF0aW9uXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRhdGlvbihTdHJpbmcgZG9jdW1lbnRhdGlvbikKLSAgewotICAgIGRvY3VtZW50YXRpb25fID0gZG9jdW1lbnRhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWxfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNb2RlbChPYmplY3QgbW9kZWwpCi0gIHsKLSAgICBtb2RlbF8gPSBtb2RlbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW50aXR5UmVzb2x2ZWQoKQotICB7Ci0gICAgcmV0dXJuIChieXRlc18gIT0gbnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VzUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlc1BhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWEyZmVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VzUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA0ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTE3ICAgMTQyMzI0IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA3MTEgICAxNTAzMDEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA4MTggICAxNTQzOTMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA5MDYgICAxNTY0MjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuYmluYXJ5LkJhc2U2NDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5JbnNwZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlVERElDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvLkRJU0NPQ29udHJhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjby5ESVNDT1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvLkRJU0NPUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZXNQYXJzZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfTk9ORSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX1dTSUwgPSAxPDwwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJTRV9XU0RMID0gMTw8MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfTElOS1MgPSAxPDwyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJTRV9ESVNDTyA9IDE8PDM7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgdXJpXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdXJpVG9FbnRpdHlUYWJsZV87Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXzsKLQotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgdGhpcyhudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlcihTdHJpbmcgdXJpKQotICB7Ci0gICAgdXJpXyA9IHVyaTsKLSAgICB1cmlUb0VudGl0eVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBodHRwQmFzaWNBdXRoVXNlcm5hbWVfID0gbnVsbDsKLSAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmRfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICB1cmlfID0gdXJpOwotICB9Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VFbnRpdHkgZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICBpZiAodXJpICE9IG51bGwpCi0gICAgICByZXR1cm4gKFdlYlNlcnZpY2VFbnRpdHkpdXJpVG9FbnRpdHlUYWJsZV8uZ2V0KHVyaSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSB3c2lsVVJJCi0gICAqIEByZXR1cm4KLSAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKFN0cmluZywgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoU3RyaW5nIHdzaWxVUkkgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIGdldFdTSUxEb2N1bWVudFZlcmJvc2Uod3NpbFVSSSwgIlVURi04IiApOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gd3NpbFVSSQotICAgKiBAcmV0dXJuCi0gICAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICogQHRocm93cyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICAgKiBAdGhyb3dzIFdTSUxFeGNlcHRpb24KLSAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKFN0cmluZywgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKFN0cmluZyB3c2lsVVJJICkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBXU0lMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZ2V0V1NJTERvY3VtZW50VmVyYm9zZSggd3NpbFVSSSwgIlVURi04IiApOwotICB9Ci0gIAotICBwdWJsaWMgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudFZlcmJvc2UoU3RyaW5nIHdzaWxVUkksIFN0cmluZyBieXRlRW5jb2RpbmcgKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24sIFdTSUxFeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NpbFVSSSk7Ci0gICAgCi0gICAgaWYgKHdzRW50aXR5ID09IG51bGwpCi0gICAgewotICAgICAgd3NFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgd3NFbnRpdHkuc2V0VVJJKHdzaWxVUkkpOwotICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHdzaWxVUkksIHdzRW50aXR5KTsKLSAgICB9Ci0gICAgCi0gICAgV1NJTERvY3VtZW50IHdzaWxEb2N1bWVudCA9IChXU0lMRG9jdW1lbnQpd3NFbnRpdHkuZ2V0TW9kZWwoKTsKLSAgICAKLSAgICBpZiAod3NpbERvY3VtZW50ID09IG51bGwpCi0gICAgewotICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIFdTREw0SiBpcyBub3QgcmVhZGluZyB0aGUgY29udGVudCB0eXBlIHByb3Blcmx5IGZvciBwbGF0Zm9ybSByZXNvdXJjZXMuICBUaGVyZWZvcmUsIHdlIHdpbGwgZ2V0Ci0gICAgICAvLyB0aGUgc3RyZWFtIGRpcmVjdGx5IGZyb20gRWNsaXBzZSBpZiB3ZSBmaW5kIGEgcGxhdGZvcm0gcHJvdG9jb2wgc3BlY2lmaWVkIGluIHRoZSBVUkwuCi0gICAgICBpZiggd3NpbFVSSS5zdGFydHNXaXRoKCAicGxhdGZvcm06L3Jlc291cmNlIiApICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICAgIHBhdGggICAgID0gd3NpbFVSSS5zdWJzdHJpbmcoMTgpOwotICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIoIHBhdGggKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCByZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlICkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElGaWxlICAgICAgICAgICAgIGZpbGUgICA9IChJRmlsZSlyZXNvdXJjZTsKLSAgICAgICAgICAgIElucHV0U3RyZWFtICAgICAgIHN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLSAgICAgICAgICAgIElucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlciggc3RyZWFtLCBmaWxlLmdldENoYXJzZXQoKSApOwotICAgICAgICAgIAotICAgICAgICAgICAgd3NpbERvY3VtZW50ID0gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICB3c2lsRG9jdW1lbnQucmVhZCggcmVhZGVyICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApe30KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUT0RPIHRoZSBmb2xsb3dpbmcgMyBsaW5lcyBvZiBjb2RlIHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkLCBzaW5jZQotICAgICAgICAvLyB0aGUgV1NETDRKIHBhcnNlciBkb2VzIG5vdCBuZWVkIGEgYnl0ZSBzdHJlYW0uCi0gICAgICAgIGJ5dGVbXSBiID0gZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheSh3c2lsVVJJKTsKLSAgICAgICAgd3NFbnRpdHkuc2V0Qnl0ZXMoYik7Ci0gICAgICAgIHNldEhUVFBTZXR0aW5ncyh3c0VudGl0eSk7Ci0gICAgICAKLSAgICAgICAgLy8gVGhpcyBwYXJzZXIgb25seSBjaGVja3MgdGhlIGhlYWRlciBvZiBIVE1MIGZvciBhIHBhcnRpY3VsYXIgZW5jb2RpbmcuCi0gICAgICAgIC8vIEl0IGRvZXNuJ3QgY2hlY2sgdGhlIGVuY29kaW5nIGZvciBnZW5lcmFsIFhNTCBkb2N1bWVudHMgbGlrZSBXU0RMIGFuZCBXU0lMLgotICAgICAgICAvLyBUaGlzIGNhdXNpbmcgdGhpcyBwYXJzZXIgdG8gYWx3YXkgdXNlIFVURi04IGFzIHRoZSBlbmNvZGluZy4gIFRoZXJlZm9yZSwKLSAgICAgICAgLy8gc2luY2Ugd2UgY2FuIG5vdCB0cnVzdCB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIHdlIHdpbGwgbm90IHVzZSBpdC4gIEluc3RlYWQsCi0gICAgICAgIC8vIHdlIHdpbGwganVzdCBsZXQgdGhlIFdTSUwgcGFyc2VyIGZpZ3VyZSBvdXQgd2hhdCBlbmNvZGluZyB0byB1c2UuCi0gICAgICAKLSAgICAgICAgLy9JbnB1dFN0cmVhbVJlYWRlciBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpLCBieXRlRW5jb2RpbmcgKTsKLSAgICAgICAgd3NpbERvY3VtZW50ID0gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIHdzaWxEb2N1bWVudC5yZWFkKHdzaWxVUkkpOwotICAgICAgfQotICAgICAgCi0gICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0lMKTsKLSAgICAgIHdzRW50aXR5LnNldE1vZGVsKHdzaWxEb2N1bWVudCk7Ci0gICAgfQotICAgIHJldHVybiB3c2lsRG9jdW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRXU0RMRGVmaW5pdGlvbihTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBnZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSSSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0V1NETERlZmluaXRpb25WZXJib3NlKFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24sIFdTRExFeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NkbFVSSSk7Ci0gICAgaWYgKHdzRW50aXR5ID09IG51bGwpCi0gICAgewotICAgICAgd3NFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgd3NFbnRpdHkuc2V0VVJJKHdzZGxVUkkpOwotICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHdzZGxVUkksIHdzRW50aXR5KTsKLSAgICB9Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pd3NFbnRpdHkuZ2V0TW9kZWwoKTsKLSAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIGJ5dGVbXSBiID0gZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheSh3c2RsVVJJKTsKLSAgICAgIHdzRW50aXR5LnNldEJ5dGVzKGIpOwotICAgICAgc2V0SFRUUFNldHRpbmdzKHdzRW50aXR5KTsKLSAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYik7Ci0gICAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5jcmVhdGVXU0RMNEpGYWN0b3J5KCk7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICAgIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKHdzZGxVUkksIG5ldyBJbnB1dFNvdXJjZShiYWlzKSk7Ci0gICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKTsKLSAgICAgIHdzRW50aXR5LnNldE1vZGVsKGRlZmluaXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhcnNlKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIHBhcnNlVVJMKFBBUlNFX1dTSUwgfCBQQVJTRV9XU0RMIHwgUEFSU0VfTElOS1MgfCBQQVJTRV9ESVNDTyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXJzZShpbnQgcGFyc2VPcHRpb24pIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBwYXJzZVVSTChwYXJzZU9wdGlvbik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcGFyc2VVUkwoaW50IHBhcnNlT3B0aW9uKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgCi0gICAgLy8gVGhpcyB2YXJpYWJsZSBtYWtlcyB0aGlzIG9iamVjdCBhIGxpdHRsZSBtb3JlIHRocmVhZCBzYWZlIHRoYW4gaXQgd2FzCi0gICAgLy8gYmVmb3JlLCBhbHRob3VnaCB0aGlzIG9iamVjdCBpcyBub3QgY29tcGxldGVseSB0aHJlYWQgc2FmZS4gIFRoZSBzY2VuYXJpbwotICAgIC8vIHRoYXQgd2UgYXJlIHRyeWluZyB0byBhdm9pZCBpcyB3aGVyZSBvbmUgY2FsbCB0byB0aGlzIG1ldGhvZCBnZXRzIGJsb2NrZWQKLSAgICAvLyBhdCB0aGUgZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheSBjYWxsLiAgVGhlbiBhIHNlY29uZCBjYWxsIHRvIHRoZSBtZXRob2QKLSAgICAvLyBpcyBtYWRlIHRoYXQgY2hhbmdlcyB0aGUgdXJpXyBnbG9iYWwgdmFyaWFibGUuICBXaGVuIHRoZSBmaXJzdCBjYWxsCi0gICAgLy8gY29tcGxldGVzIGl0IHdvdWxkIHVzZSB1cmlfIHZhbHVlIGZyb20gdGhlIHNlY29uZCBpbnZvY2F0aW9uIGluc3RlYWQKLSAgICAvLyBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgZmlyc3QuICBTdG9yaW5nIHRoZSB1cmlfIGludG8gdGhpcyB2YXJpYWJsZSBoZWxwcyAKLSAgICAvLyBhdm9pZCB0aGlzIGJhZCBzY2VuYXJpby4KLSAgICBTdHJpbmcgdGhlVXJpID0gdXJpXzsKLSAgICAKLSAgICB3c0VudGl0eS5zZXRVUkkodGhlVXJpKTsKLSAgICBieXRlW10gYiA9IGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkodGhlVXJpKTsKLSAgICB3c0VudGl0eS5zZXRCeXRlcyhiKTsKLSAgICBzZXRIVFRQU2V0dGluZ3Mod3NFbnRpdHkpOwotICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dCh0aGVVcmksIHdzRW50aXR5KTsKLSAgICAvLyBwYXJzZSB1cmlfIGFzIGEgSFRNTCBkb2N1bWVudAotICAgIEhUTUxIZWFkSGFuZGxlciBoZWFkSGFuZGxlciA9IG5ldyBIVE1MSGVhZEhhbmRsZXIodGhlVXJpKTsKLSAgICBieXRlW10gaGVhZCA9IGhlYWRIYW5kbGVyLmhhcnZlc3RIZWFkVGFncyhiKTsKLSAgICBTdHJpbmcgYnl0ZUVuY29kaW5nID0gaGVhZEhhbmRsZXIuZ2V0Qnl0ZUVuY29kaW5nKCk7Ci0gICAgU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUoZmFsc2UpOwotICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgU0FYUGFyc2VyIHBhcnNlciA9IGZhY3RvcnkubmV3U0FYUGFyc2VyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShoZWFkKTsKLSAgICAgIElucHV0U3RyZWFtUmVhZGVyIGlzciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihiYWlzLCBieXRlRW5jb2RpbmcpOwotICAgICAgSW5wdXRTb3VyY2UgaXMgPSBuZXcgSW5wdXRTb3VyY2UoaXNyKTsKLSAgICAgIHBhcnNlci5wYXJzZShpcywgaGVhZEhhbmRsZXIpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgIH0KLSAgICBTdHJpbmdbXSB3c2lsVVJJcyA9IGhlYWRIYW5kbGVyLmdldFdzaWxzKCk7Ci0gICAgU3RyaW5nW10gZGlzY29VUklzID0gaGVhZEhhbmRsZXIuZ2V0RGlzY29zKCk7Ci0gICAgLy8gdHJ1ZSBpZiB1cmlfIGlzIGEgSFRNTCBkb2N1bWVudAotICAgIGlmICh3c2lsVVJJcy5sZW5ndGggPiAwIHx8IGRpc2NvVVJJcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX0hUTUwpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2lsVVJJcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGFic29sdXRlVVJJID0gY29udmVydFRvQWJzb2x1dGVVUkkodGhlVXJpLCB3c2lsVVJJc1tpXSk7Ci0gICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NpbEVudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgIHdzaWxFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCk7Ci0gICAgICAgIHdzaWxFbnRpdHkuc2V0VVJJKGFic29sdXRlVVJJKTsKLSAgICAgICAgYXNzb2NpYXRlKHdzRW50aXR5LCB3c2lsRW50aXR5KTsKLSAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KGFic29sdXRlVVJJLCB3c2lsRW50aXR5KTsKLSAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX1dTSUwpID09IHBhcnNlT3B0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcGFyc2VXU0lMKGFic29sdXRlVVJJLCBwYXJzZU9wdGlvbiwgYnl0ZUVuY29kaW5nICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBpPTA7aTxkaXNjb1VSSXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgV2ViU2VydmljZUVudGl0eSBkaXNjb0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgIGRpc2NvRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX0RJU0NPKTsKLSAgICAgICAgZGlzY29FbnRpdHkuc2V0VVJJKGRpc2NvVVJJc1tpXSk7Ci0gICAgICAgIGFzc29jaWF0ZSh3c0VudGl0eSxkaXNjb0VudGl0eSk7Ci0gICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChkaXNjb1VSSXNbaV0sZGlzY29FbnRpdHkpOwotICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfRElTQ08pID09IHBhcnNlT3B0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcGFyc2VESVNDTyhkaXNjb1VSSXNbaV0scGFyc2VPcHRpb24pOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBmYWxzZSBpZiB1cmlfIGlzIG5vdCBhIEhUTUwgZG9jdW1lbnQKLSAgICAvLyB0aGVuIHBhcnNlIHVyaV8gYXMgYSBXU0lMIGRvY3VtZW50Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwYXJzZVdTSUwodGhlVXJpLCBwYXJzZU9wdGlvbiwgYnl0ZUVuY29kaW5nICk7Ci0gICAgICAgIC8vIG5vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBhIFdTSUwgZG9jdW1lbnQKLSAgICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgICB7Ci0gICAgICAgIC8vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBub3QgYSBXU0lMIGRvY3VtZW50Ci0gICAgICAgIC8vIHRoZW4gcGFyc2UgdXJpXyBhcyBhIERJU0NPIGRvY3VtZW50LgotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHBhcnNlRElTQ08odGhlVXJpLCBwYXJzZU9wdGlvbik7Ci0gICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIHRocm93biBpZiB1cmlfIGlzIGEgRElTQ08gZG9jdW1lbnQKLSAgICAgICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9ESVNDTyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0MikKLSAgICAgICAgewotICAgICAgICAgIC8vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBub3QgYSBESVNDTyBkb2N1bWVudAotICAgICAgICAgIC8vIHRoZW4gcGFyc2UgdXJpXyBhcyBhIFdTREwgZG9jdW1lbnQKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZVdTREwodGhlVXJpKTsKLSAgICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBhIFdTREwgZG9jdW1lbnQKLSAgICAgICAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHQzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBub3QgYSBXU0RMIGRvY3VtZW50Ci0gICAgICAgICAgICAvLyB0aGVuIGRvIG5vdGhpbmcKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcGFyc2VXU0lMKFN0cmluZyB3c2lsVVJJLCBpbnQgcGFyc2VPcHRpb24sIFN0cmluZyBieXRlRW5jb2RpbmcgKSB0aHJvd3MgV1NJTEV4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NpbEVudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c2lsVVJJKTsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IChXU0lMRG9jdW1lbnQpd3NpbEVudGl0eS5nZXRNb2RlbCgpOwotICAgIGlmICh3c2lsRG9jICE9IG51bGwpCi0gICAgewotICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wcyBmcm9tIG9jY3VycmluZyB3aGVuIGEgV1NJTCBjeWNsZXMgb2NjdXIuCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKHdzaWxVUkksIGJ5dGVFbmNvZGluZyApOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGluc3BlY3Rpb24uZ2V0U2VydmljZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIERlc2NyaXB0aW9uW10gZGVzY3MgPSBzZXJ2aWNlc1tpXS5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgIC8vIFNldCB0aGUgZG9jdW1lbnRhdGlvbiB0byB0aGUgPHNlcnZpY2U+IGVsZW1lbnQncyBmaXJzdCBhYnN0cmFjdC4KLSAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gbnVsbDsKLSAgICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gc2VydmljZXNbaV0uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgICBpZiAoYWJzdHJhY3RzICE9IG51bGwgJiYgYWJzdHJhY3RzLmxlbmd0aCA+IDApCi0gICAgICAgIGRvY3VtZW50YXRpb24gPSBhYnN0cmFjdHNbMF0uZ2V0VGV4dCgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgIAlTdHJpbmcgcmVmZXJlbmNlZE5TID0gZGVzY3Nbal0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpOwotICAgICAgCS8vIElmIGEgPGRlc2NyaXB0aW9uPiBlbGVtZW50IGNvbnRhaW5zIGFuIGFic3RyYWN0LCB1c2UgaXQgdG8gb3ZlcnJpZGUgdGhlIHNlcnZpY2UgZG9jdW1lbnRhdGlvbi4gICAgICAJCi0gICAgICAJYWJzdHJhY3RzID0gZGVzY3Nbal0uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgICAJaWYgKGFic3RyYWN0cyAhPSBudWxsICYmIGFic3RyYWN0cy5sZW5ndGggPiAwKQotICAgICAgCSAgZG9jdW1lbnRhdGlvbiA9IGFic3RyYWN0c1swXS5nZXRUZXh0KCk7Ci0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0RMLmVxdWFscyhyZWZlcmVuY2VkTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gZGVzY3Nbal0uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCAmJiBsb2NhdGlvbi5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGFic29sdXRlVVJJID0gY29udmVydFRvQWJzb2x1dGVVUkkod3NpbFVSSSwgbG9jYXRpb24pOwotICAgICAgICAgICAgV2ViU2VydmljZUVudGl0eSB3c2RsRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgICAgIHdzZGxFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCk7Ci0gICAgICAgICAgICB3c2RsRW50aXR5LnNldFVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgICAgICB3c2RsRW50aXR5LnNldERvY3VtZW50YXRpb24oZG9jdW1lbnRhdGlvbik7Ci0gICAgICAgICAgICBhc3NvY2lhdGUod3NpbEVudGl0eSwgd3NkbEVudGl0eSk7Ci0gICAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQoYWJzb2x1dGVVUkksIHdzZGxFbnRpdHkpOwotICAgICAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX1dTREwpID09IHBhcnNlT3B0aW9uKQotICAgICAgICAgICAgICBwYXJzZVdTREwoYWJzb2x1dGVVUkkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChVRERJQ29uc3RhbnRzLk5TX1VSSV9VRERJX1YyLmVxdWFscyhyZWZlcmVuY2VkTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaW9uRWxlbWVudCBlZSA9IGRlc2NzW2pdLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICAgICAgICBpZiAoZWUgaW5zdGFuY2VvZiBTZXJ2aWNlRGVzY3JpcHRpb24pCi0gICAgICAgICAgewotICAgICAgICAgICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gKFNlcnZpY2VEZXNjcmlwdGlvbillZTsKLSAgICAgICAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gc2QuZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gc2QuZ2V0U2VydmljZUtleSgpLmdldFRleHQoKTsKLSAgICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgdWRkaVNlcnZpY2VFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICAgICAgdWRkaVNlcnZpY2VFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfVURESV9TRVJWSUNFKTsKLSAgICAgICAgICAgIFN0cmluZyB1ZGRpU2VydmljZUtleVVSSSA9IFVERElVUklIZWxwZXIuZ2V0U2VydmljZUtleVVSSShzZXJ2aWNlS2V5LGlucXVpcnlVUkwpOwotICAgICAgICAgICAgdWRkaVNlcnZpY2VFbnRpdHkuc2V0VVJJKHVkZGlTZXJ2aWNlS2V5VVJJKTsKLSAgICAgICAgICAgIHVkZGlTZXJ2aWNlRW50aXR5LnNldERvY3VtZW50YXRpb24oZG9jdW1lbnRhdGlvbik7Ci0gICAgICAgICAgICBhc3NvY2lhdGUod3NpbEVudGl0eSx1ZGRpU2VydmljZUVudGl0eSk7Ci0gICAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQodWRkaVNlcnZpY2VLZXlVUkksdWRkaVNlcnZpY2VFbnRpdHkpOwotICAgICAgICAgICAgLy8gVE9ETzogcGFyc2UgV1NETCBpZiBuZWNlc3NhcnkuLi4KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgTGlua1tdIGxpbmtzID0gaW5zcGVjdGlvbi5nZXRMaW5rcygpOyAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChXU0lMQ29uc3RhbnRzLk5TX1VSSV9XU0lMLmVxdWFscyhsaW5rc1tpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCkpKQotICAgICAgewotICAgICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IG51bGw7Ci0gICAgICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua3NbaV0uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgICAgIGlmIChhYnN0cmFjdHMgIT0gbnVsbCAmJiBhYnN0cmFjdHMubGVuZ3RoID4gMCkKLSAgICAgICAgICBkb2N1bWVudGF0aW9uID0gYWJzdHJhY3RzWzBdLmdldFRleHQoKTsKLSAgICAgICAgU3RyaW5nIGxpbmtMb2NhdGlvbiA9IGxpbmtzW2ldLmdldExvY2F0aW9uKCk7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZVVSSSA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKHdzaWxVUkksIGxpbmtMb2NhdGlvbik7Ci0gICAgICAgIC8vIFByZXZlbnQgY3ljbGVzLgotICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzaWxMaW5rRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKGFic29sdXRlVVJJKTsKLSAgICAgICAgaWYgKHdzaWxMaW5rRW50aXR5ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2lsTGlua0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgd3NpbExpbmtFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCk7Ci0gICAgICAgICAgd3NpbExpbmtFbnRpdHkuc2V0VVJJKGFic29sdXRlVVJJKTsKLSAgICAgICAgICB3c2lsTGlua0VudGl0eS5zZXREb2N1bWVudGF0aW9uKGRvY3VtZW50YXRpb24pOwotICAgICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChhYnNvbHV0ZVVSSSwgd3NpbExpbmtFbnRpdHkpOwotICAgICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9MSU5LUykgPT0gcGFyc2VPcHRpb24pCi0gICAgICAgICAgICBwYXJzZVdTSUwoYWJzb2x1dGVVUkksIHBhcnNlT3B0aW9uLCBieXRlRW5jb2RpbmcgKTsKLSAgICAgICAgfQotICAgICAgICBhc3NvY2lhdGUod3NpbEVudGl0eSx3c2lsTGlua0VudGl0eSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgcGFyc2VESVNDTyhTdHJpbmcgZGlzY29VUkksIGludCBwYXJzZU9wdGlvbikgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24sIEV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZUVudGl0eSBkaXNjb0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSShkaXNjb1VSSSk7Ci0gICAgYnl0ZVtdIGIgPSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5KGRpc2NvVVJJKTsKLSAgICBkaXNjb0VudGl0eS5zZXRCeXRlcyhiKTsKLSAgICBzZXRIVFRQU2V0dGluZ3MoZGlzY29FbnRpdHkpOwotICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYik7Ci0gICAgRElTQ09QYXJzZXIgcGFyc2VyID0gbmV3IERJU0NPUGFyc2VyKCk7Ci0gICAgRElTQ09SZWZlcmVuY2VbXSByZWZlcmVuY2VzID0gcGFyc2VyLnBhcnNlKGRpc2NvVVJJLG5ldyBJbnB1dFNvdXJjZShiYWlzKSk7Ci0gICAgaWYgKHJlZmVyZW5jZXMgIT0gbnVsbCAmJiByZWZlcmVuY2VzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wO2k8cmVmZXJlbmNlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBpZiAocmVmZXJlbmNlc1tpXSBpbnN0YW5jZW9mIERJU0NPQ29udHJhY3RSZWZlcmVuY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBjb250cmFjdFJlZgotICAgICAgICAgIERJU0NPQ29udHJhY3RSZWZlcmVuY2UgcmVmZXJlbmNlID0gKERJU0NPQ29udHJhY3RSZWZlcmVuY2UpcmVmZXJlbmNlc1tpXTsKLSAgICAgICAgICBTdHJpbmcgcmVmID0gcmVmZXJlbmNlLmdldFJlZigpOwotICAgICAgICAgIFN0cmluZyBkb2NSZWYgPSByZWZlcmVuY2UuZ2V0RG9jUmVmKCk7Ci0gICAgICAgICAgV2ViU2VydmljZUVudGl0eSB3c2RsRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgICB3c2RsRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpOwotICAgICAgICAgIHdzZGxFbnRpdHkuc2V0VVJJKHJlZik7Ci0gICAgICAgICAgd3NkbEVudGl0eS5zZXREb2N1bWVudGF0aW9uKGRvY1JlZik7Ci0gICAgICAgICAgYXNzb2NpYXRlKGRpc2NvRW50aXR5LHdzZGxFbnRpdHkpOwotICAgICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChyZWYsd3NkbEVudGl0eSk7Ci0gICAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX1dTREwpID09IHBhcnNlT3B0aW9uKQotICAgICAgICAgICAgcGFyc2VXU0RMKHJlZik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZGlzY292ZXJ5UmVmCi0gICAgICAgICAgU3RyaW5nIHJlZiA9IHJlZmVyZW5jZXNbaV0uZ2V0UmVmKCk7Ci0gICAgICAgICAgLy8gUHJldmVudCBjeWNsZXMuCi0gICAgICAgICAgV2ViU2VydmljZUVudGl0eSBkaXNjb0xpbmtFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkocmVmKTsKLSAgICAgICAgICBpZiAoZGlzY29MaW5rRW50aXR5ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgZGlzY29MaW5rRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgICAgIGRpc2NvTGlua0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9ESVNDTyk7Ci0gICAgICAgICAgICBkaXNjb0xpbmtFbnRpdHkuc2V0VVJJKHJlZik7Ci0gICAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQocmVmLGRpc2NvTGlua0VudGl0eSk7Ci0gICAgICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfTElOS1MpID09IHBhcnNlT3B0aW9uKQotICAgICAgICAgICAgICBwYXJzZURJU0NPKHJlZixwYXJzZU9wdGlvbik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGFzc29jaWF0ZShkaXNjb0VudGl0eSxkaXNjb0xpbmtFbnRpdHkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIHBhcnNlV1NETChTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVUkkpOwotICB9Ci0KLSAgcHJpdmF0ZSBieXRlW10gZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheShTdHJpbmcgdXJpU3RyaW5nKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIFRyeSB0byBnZXQgYSBjYWNoZWQgY29weSBvZiB0aGUgYnl0ZVtdCi0gICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh1cmlTdHJpbmcpOwotICAgIGlmICh3c0VudGl0eSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJ5dGVbXSBieXRlcyA9IHdzRW50aXR5LmdldEJ5dGVzKCk7Ci0gICAgICBpZiAoYnl0ZXMgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGJ5dGVzOwotICAgIH0KLSAgICAvLyBHZXQgdGhlIGJ5dGVbXSBieSBvcGVuaW5nIGEgc3RyZWFtIHRvIHRoZSBVUkkKLSAgICBVUkwgdXJsID0gY3JlYXRlVVJMKHVyaVN0cmluZyk7Ci0gICAgVVJMQ29ubmVjdGlvbiBjb25uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgLy8gcHJveHkgc2VydmVyIHNldHRpbmcKLSAgICBTdHJpbmcgcHJveHlVc2VyTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVVzZXJOYW1lIik7Ci0gICAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlQYXNzd29yZCIpOwotICAgIGlmIChwcm94eVVzZXJOYW1lICE9IG51bGwgJiYgcHJveHlQYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciB1c2VyTmFtZVBhc3N3b3JkID0gbmV3IFN0cmluZ0J1ZmZlcihwcm94eVVzZXJOYW1lKTsKLSAgICAgIHVzZXJOYW1lUGFzc3dvcmQuYXBwZW5kKCc6JykuYXBwZW5kKHByb3h5UGFzc3dvcmQpOwotICAgICAgQmFzZTY0IGVuY29kZXIgPSBuZXcgQmFzZTY0KCk7Ci0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBuZXcgU3RyaW5nKGVuY29kZXIuZW5jb2RlKHVzZXJOYW1lUGFzc3dvcmQudG9TdHJpbmcoKS5nZXRCeXRlcygpKSk7Ci0gICAgICB1c2VyTmFtZVBhc3N3b3JkLnNldExlbmd0aCgwKTsKLSAgICAgIHVzZXJOYW1lUGFzc3dvcmQuYXBwZW5kKCJCYXNpYyAiKS5hcHBlbmQoZW5jb2RpbmcpOwotICAgICAgY29ubi5zZXRSZXF1ZXN0UHJvcGVydHkoIlByb3h5LWF1dGhvcml6YXRpb24iLCB1c2VyTmFtZVBhc3N3b3JkLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHNldHRpbmcKLSAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhQYXNzd29yZF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGh0dHBCYXNpY0F1dGhVc2VybmFtZV8pOwotICAgICAgc2IuYXBwZW5kKCc6JykuYXBwZW5kKGh0dHBCYXNpY0F1dGhQYXNzd29yZF8pOwotICAgICAgQmFzZTY0IGVuY29kZXIgPSBuZXcgQmFzZTY0KCk7Ci0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBuZXcgU3RyaW5nKGVuY29kZXIuZW5jb2RlKHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSkpOwotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKCJCYXNpYyAiKS5hcHBlbmQoZW5jb2RpbmcpOwotICAgICAgY29ubi5zZXRSZXF1ZXN0UHJvcGVydHkoIkF1dGhvcml6YXRpb24iLCBzYi50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAgU3RyaW5nIHd3d0F1dGhNc2cgPSBjb25uLmdldEhlYWRlckZpZWxkKCJXV1ctQXV0aGVudGljYXRlIik7Ci0gICAgICBpZiAod3d3QXV0aE1zZyAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24obmV3IElPRXhjZXB0aW9uKCksIHd3d0F1dGhNc2csIHVyaVN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgewotICAgICAgU3RyaW5nIHd3d0F1dGhNc2cgPSBjb25uLmdldEhlYWRlckZpZWxkKCJXV1ctQXV0aGVudGljYXRlIik7Ci0gICAgICBpZiAod3d3QXV0aE1zZyAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24oaW9lLCB3d3dBdXRoTXNnLCB1cmlTdHJpbmcpOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBpb2U7Ci0gICAgfQotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIGJ5dGVbXSBiID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgaW50IGJ5dGVSZWFkID0gaXMucmVhZChiKTsKLSAgICB3aGlsZSAoYnl0ZVJlYWQgIT0gLTEpCi0gICAgewotICAgICAgYmFvcy53cml0ZShiLCAwLCBieXRlUmVhZCk7Ci0gICAgICBieXRlUmVhZCA9IGlzLnJlYWQoYik7Ci0gICAgfQotICAgIGlzLmNsb3NlKCk7Ci0gICAgcmV0dXJuIGJhb3MudG9CeXRlQXJyYXkoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBVUkwgY3JlYXRlVVJMKFN0cmluZyB1cmwpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBuZXcgVVJMKHVybCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzb2NpYXRlKFdlYlNlcnZpY2VFbnRpdHkgcGFyZW50LCBXZWJTZXJ2aWNlRW50aXR5IGNoaWxkKQotICB7Ci0gICAgcGFyZW50LmFkZENoaWxkKGNoaWxkKTsKLSAgICBjaGlsZC5zZXRQYXJlbnQocGFyZW50KTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRUb0Fic29sdXRlVVJJKFN0cmluZyBiYXNlVVJJLFN0cmluZyByZWZVUkkpCi0gIHsKLSAgICBpZiAocmVmVVJJICE9IG51bGwgJiYgcmVmVVJJLmluZGV4T2YoIjoiKSA8IDApCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIGFic29sdXRlVVJJID0gbmV3IFN0cmluZ0J1ZmZlcihiYXNlVVJJLnN1YnN0cmluZygwLE1hdGgubWF4KGJhc2VVUkkubGFzdEluZGV4T2YoJ1xcJyksYmFzZVVSSS5sYXN0SW5kZXhPZignLycpKzEpKSk7Ci0gICAgICBhYnNvbHV0ZVVSSS5hcHBlbmQocmVmVVJJKTsKLSAgICAgIHJldHVybiBhYnNvbHV0ZVVSSS50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gcmVmVVJJOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEhUVFBTZXR0aW5ncyhXZWJTZXJ2aWNlRW50aXR5IGVudGl0eSkKLSAgewotICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWVfICE9IG51bGwgJiYgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyAhPSBudWxsKQotICAgIHsKLSAgICAgIGVudGl0eS5zZXRIVFRQVXNlcm5hbWUoaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyk7Ci0gICAgICBlbnRpdHkuc2V0SFRUUFBhc3N3b3JkKGh0dHBCYXNpY0F1dGhQYXNzd29yZF8pOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkKLSAgewotICAgIGh0dHBCYXNpY0F1dGhVc2VybmFtZV8gPSB1c2VybmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoUGFzc3dvcmRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKFN0cmluZyBwYXNzd29yZCkKLSAgewotICAgIGh0dHBCYXNpY0F1dGhQYXNzd29yZF8gPSBwYXNzd29yZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvd3NpbC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvd3NpbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQ1MzBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL3dzaWwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGZvciBBZGRXU0RMVG9XU0lMQ29tbWFuZAotIwotTVNHX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTPUlXQUIwMDU1RSBJbnZhbGlkIGNvbW1hbmQgYXJndW1lbnRzLgotTVNHX0VSUk9SX0lMTEVHQUxfQVJHVU1FTlRTPUlXQUIwMTA1RSBJbGxlZ2FsIGFyZ3VtZW50LgotTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkk9SVdBQjAxODVFIEludmFsaWQgV1NETCBVUkkuCi1NU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSST1JV0FCMDIwNkUgSW52YWxpZCBXU0lMIFVSSS4KLU1TR19FUlJPUl9VTlJFU09MVkFCTEVfV1NETD1JV0FCMDQwNUUgV1NETCBpcyB1bnJlc29sdmFibGUuCi1NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT049SVdBQjA0NTFFIEFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGhhcyBvY2N1cmVkLgotTVNHX0VSUk9SX01BTEZPUk1FRF9XU0RMPUlXQUIwNDUyRSBXU0RMIGlzIG1hbGZvcm1lZCwgZXJyb3IgcGFyc2luZyBXU0RMLgotTVNHX0VSUk9SX1dSSVRFX1dTSUw9SVdBQjA0NTNFIEVycm9yIHdyaXRpbmcgV1NJTC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3BhcnNlci9QbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL1BsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MzQ0MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL1BsdWdpbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBjbGFzcyBQbHVnaW5NZXNzYWdlcyBleHRlbmRzIE5MUwotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5wbHVnaW4iOyAvLyROT04tTkxTLTEkCi0gIAotICBzdGF0aWMKLSAgewotICAgIE5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1hNRVRIT0RTOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYjY3NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSMKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA9U0FQIFVEREkgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVD1TQVAgVURESSBUZXN0IFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM9WE1ldGhvZHMgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NPU5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwZGI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0uc2V0dGluZ3MKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzBmNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1YzEwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDIucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uuc3d0O2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWksCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4ZDNmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgc2NoZW1hLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL29iajE2L2ZpbGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjJkZWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vYmoxNi9mbGRyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL29iajE2L2ZsZHJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc5MWYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL29iajE2L2ZsZHJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvZmF2b3JpdGVfb3ZyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvZmF2b3JpdGVfb3ZyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJiMTY3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L2Zhdm9yaXRlX292ci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L2ludmFsaWR0eXBlX292ci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L2ludmFsaWR0eXBlX292ci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOWRjY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi9pbnZhbGlkdHlwZV9vdnIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi91bm1vZGlmaWFibGVfb3ZyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvdW5tb2RpZmlhYmxlX292ci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwOTNkODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi91bm1vZGlmaWFibGVfb3ZyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvd2FybmluZ19vdnIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi93YXJuaW5nX292ci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMmRhYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi93YXJuaW5nX292ci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWE3N2M2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1TZXJ2aWNlIFBvbGljeSAtIFVJCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLVNFUlZJQ0VfUE9MSUNZX05BTUU9U2VydmljZSBwb2xpY3kgVUkKLVBSRUZFUkVOQ0VfU0VSVklDRVBPTElDSUVTPVNlcnZpY2UgUG9saWNpZXMKLUNPTVBMSUFOQ0VfTEVWRUxfTE9OR05BTUU9Q29tcGxpYW5jZSBsZXZlbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkY2FkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNlcnZpY2Vwb2xpY3l1aSIgbmFtZT0iJVNFUlZJQ0VfUE9MSUNZX05BTUUiIHNjaGVtYT0ic2NoZW1hL3NlcnZpY2VQb2xpY3l1aS5leHNkIi8+Ci0gICAKLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLSAgICAgIDxwYWdlIG5hbWU9IiVQUkVGRVJFTkNFX1NFUlZJQ0VQT0xJQ0lFUyIKLSAgICAgIAkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcmVmZXJlbmNlcy5TZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMuV29ya2JlbmNoIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJlZmVyZW5jZXMuV1NJQ29tcGxpYW5jZVByZWZlcmVuY2VQYWdlIj4KLSAgICAgIDwvcGFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xpY3l1aSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5VUk+Ci0gICAgICAgPG9wZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2kuKiI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBsb25nTmFtZT0iJUNPTVBMSUFOQ0VfTEVWRUxfTE9OR05BTUUiLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnN1Z2dlc3Rpb25FbnVtIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0idHJ1ZSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICA8L3NlcnZpY2VQb2xpY3lVST4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJvcGVydHlQYWdlcyI+Ci0KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9TRVJWSUNFUE9MSUNJRVMiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByb3BlcnRpZXMuU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllcy5XU0lDb21wbGlhbmNlUHJvcGVydHlQYWdlIj4KLSAgICAgICAgICAgCi0gICAgICAgICAgICA8ZW5hYmxlZFdoZW4+Ci0gICAgICAgICAgICAgICA8YWRhcHQgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPiAKLSAgICAgICAgICAgICAgICAgPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5pc0VuYWJsZWQiIGZvcmNlUGx1Z2luQWN0aXZhdGlvbj0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hZGFwdD4gCi0gICAgICAgICAgICA8L2VuYWJsZWRXaGVuPgotICAgICAgPC9wYWdlPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5wcm9wZXJ0eVRlc3RlcnMiPgotICAgIDxwcm9wZXJ0eVRlc3RlcgotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5lbmFibGVkIgotICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiCi0gICAgICBuYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIKLSAgICAgIHByb3BlcnRpZXM9ImlzRW5hYmxlZCIKLSAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkucHJvcGVydGllcy5TZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIiPgotICAgIDwvcHJvcGVydHlUZXN0ZXI+Ci0gIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zY2hlbWEvc2VydmljZVBvbGljeXVpLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zY2hlbWEvc2VydmljZVBvbGljeXVpLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMTA0YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc2NoZW1hL3NlcnZpY2VQb2xpY3l1aS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS51aSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kudWkiIGlkPSJzZXJ2aWNlcG9saWN5dWkiIG5hbWU9IlNlcnZpY2UgcG9saWN5IFVJIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBleHRlbmRlcnMgdG8gYWRkIHNlcnZpY2UgcG9saWN5IFVJIG9wZXJhdGlvbnMgZm9yIHRoZQotICAgICAgICAgc2VydmljZSBwb2xpY2llcyB0aGF0IHRoZXkgaGF2ZSBhZGRlZC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InNlcnZpY2VQb2xpY3lVSSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJzZXJ2aWNlUG9saWN5VUkiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGlzIGludGVuZGVkIGZvciBleHRlbmRlcnMgd2hvIHdhbnQgdG8gYWRkIFVJIG9wZXJhdGlvbnMgdG8gdGhlIFNlcnZpY2UgcG9saWNpZXMgdGhhdCB0aGV5IGhhdmUgZGVmaW5lZC4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxjaG9pY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Im9wZXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJxdWlja0ZpeCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9jaG9pY2U+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJkZXNjcmlwdG9yIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBBIGRlc2NyaXB0b3IgZm9yIHRoaXMgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIG9yIGFjdGlvbi4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNob3J0TmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgc2hvcnQgbmFtZSBvZiB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLiAgTm90ZTogaWYgYSBzaG9ydCBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbG9uZyBuYW1lLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvbmdOYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBsb25nIG5hbWUgb2YgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi4gIE5vdGU6IGlmIGEgbG9uZyBuYW1lIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGl0IGlzIGRlZmF1bHRlZCB0byB0aGUgc2hvcnROYW1lIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvbnRleHRIZWxwSWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNvbnRleHQgaGVscCBpZCBmb3IgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbiBpZiBpdCBpcyByZXF1aXJlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpY29ucGF0aCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHBsdWdpbiByZWxhdGl2ZSBwYXRoIHRvIHNvbWUgaWNvbiBmaWxlIGZvciB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIERlZmluZXMgYSBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRlc2NyaXB0b3IiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZW5hYmxlZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgICAgICAgIDxjaG9pY2U+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNlbGVjdGlvbiIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjb21wbGV4Ii8+Ci0gICAgICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgdW5pcXVlIGlkIG9mIHRoaXMgc2VydmljZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5UGF0dGVybiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlIHNwZWNpZmllcyB3aGljaCBzZXJ2aWNlIHBvbGljZXMgdGhpcyBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoLiAgQW55IEphdmEgcmVndWxhciBleHByZXNzaW9uIG1heSBiZSBzcGVjaWZpZWQuICBUaGlzIGV4cHJlc3Npb24gd2lsbCBiZSB1c2VkIHRvIG1hdGNoIHRoZSBpZHMgb2YgYWxsIGtub3duIHNlcnZpY2UgcG9saWN5IGlkcy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ3b3Jrc3BhY2VPbmx5IiB0eXBlPSJib29sZWFuIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaWYgdGhpcyBvcGVyYXRpb24gaXMgb25seSB0byBiZSB1c2VkIGluIHRoZSB3b3Jrc3BhY2UgcHJlZmVyZW5jZSBwYWdlLiAgSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBkZWZhdWx0ZWQgdG8gZmFsc2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdGRhdGEiIHR5cGU9ImJvb2xlYW4iIHVzZT0iZGVmYXVsdCIgdmFsdWU9InRydWUiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJlbnVtZXJhdGlvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGRlZmluZXMgdGhlIGVudW1lcmF0aW9uIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgaWQgb2YgdGhpcyBlbnVtZXJhdGlvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0SXRlbSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0IGJ5IHRoZSBlbnVtZXJhdGlvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0ic2VsZWN0aW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggYSBzb21lIGtpbmQgb2YgVUkgYm9vbGVhbiBzZWxlY3Rpb24uICBBbGwgc2VydmljZSBwb2xpY2llcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcGVyYXRpb24gc2hvdWxkIHVzZSB0aGUgb3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIGVudW1lcmF0aW9uLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpY29uIiB0eXBlPSJib29sZWFuIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBib29sZWFuIHNlbGVjdGlvbiBzaG91bGQgYmUgcmVuZGVyZWQgdmlhIGFuIGljb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdEl0ZW0iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgZGVmYXVsdCBmb3IgdGhpcyBib29sZWFuIHNlbGVjdGlvbiB0aGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIgb3JnLmVjbGlwc2Uud3N0LnRydWUgb3Igb3JnLmVjbGlwc2Uud3N0LmZhbHNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJjb21wbGV4Ij4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgY29tcGxleCB0byByZW5kZXIgYW5kIHBlcnNpc3QuICBUaGUgbGF1bmNoQ2xhc3MgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGxhdW5jaCBhIGRpYWxvZyB0byBzZXQgbW9yZSBjb21wbGV4IGRhdGEuICBUaGUgZXh0ZW5kZXIgd2lsbCBuZWVkIHRvIGNhbGwgdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIEFQSSB0byBwZXJzaXN0IGRhdGEgb24gZWFjaCBwb2xpY3kgYXMgcmVxdWlyZWQuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhdW5jaENsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBkaWFsb2cuICBUaGUgY2xhc3Mgc3BlY2lmaWVkIG11c3QgaW1wbGVtZW50IHRoZSBJTGF1bmNoT3BlcmF0aW9uIGludGVyZmFjZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZW5hYmxlZCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgSW5kaWNhdGVzIGlmIHRoaXMgb3BlcmF0aW9uIGlzIGVuYWJsZWQvZ3JheWVkIG91dCBvciBub3QgaW4gdGhlIFVJLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbmFibGVkQ2xhc3MiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgYXR0cmlidXRlIG11Y2ggaW1wbGVtZW50IHRoZSBJRW5hYmxlT3BlcmF0aW9uIGludGVyZmFjZS4gIFRoaXMgY2xhc3MgYWxsb3dzIGV4dGVuZGVycyB0byBwcm92aWRlIGEgbW9yZSBjb21wbGV4IGxvZ2ljIGZvciB3aGVuIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11bHRpc2VsZWN0IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBpZiB0aGlzIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uIG9mIHBvbGljeSBvYmplY3RzIG9yIG5vdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icXVpY2tGaXgiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBhbGxvd3MgZXh0ZW5kZXJzIHRvIGFkZCBxdWljayBmaXhlcyB0byB0aGUgU2VydmljZSBwb2xpY3kgVUkgZnJhbWV3b3Jrcy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iYWN0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwbHVnaW5JZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgcGx1Z2luIGlkIHRoYXQgdGhlIGVuY2xvc2VkIHF1aWNrIGZpeCBhY3Rpb25zIGFwcGx5IHRvLiAgVGhpcyBpcyB0aGUgaWQgdGhhdCB3aWxsIG1hdGNoIHRoZSBwbHVnaW4gaWQgZnJvbSB0aGUgSVN0YXR1cyBvZiBhIFNlcnZpY2VQb2xpY3kgb2JqZWN0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNvZGUgdGhhdCB0aGUgZW5jbG9zZWQgcXVpY2sgZml4IGFjdGlvbnMgYXBwbHkgdG8uICBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgd2lsbCBtYXRjaCB0aGUgY29kZSBmcm9tIHRoZSBJU3RhdHVzIG9mIGEgU2VydmljZVBvbGljeSBvYmplY3QuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImFjdGlvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIGVsZW1lbnQgaXMgdXNlZCB0byBhZGQgYSBxdWljayBmaXggYWN0aW9uLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkZXNjcmlwdG9yIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCB0aGUgZnJhbWV3b3JrIHdpbGwgY2FsbCBmb3IgYSBwYXJ0aWN1bGFyIHF1aWNrIGZpeCBhY3Rpb24uICBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBJUXVpY2tGaXhBY3Rpb24gaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAxLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL0Jhc2VPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL0Jhc2VPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTBmOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9CYXNlT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZyBvZiBzZXJ2aWNlIHBvbGljeQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUVuYWJsZU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUxhdW5jaE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLlJlZ2lzdHJ5VXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlT3BlcmF0aW9uSW1wbCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgaWQ7Ci0gIHByaXZhdGUgSURlc2NyaXB0b3IgICAgICAgICAgIGRlc2NyaXB0b3I7Ci0gIHByaXZhdGUgT3BlcmF0aW9uS2luZCAgICAgICAgIG9wZXJhdGlvbktpbmQ7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgIHBvbGljeUlkUGF0dGVybjsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgbXVsdGlTZWxlY3QgPSBmYWxzZTsKLSAgcHJpdmF0ZSBJTGF1bmNoT3BlcmF0aW9uICAgICAgbGF1bmNoT3BlcmF0aW9uT2JqZWN0OwotICBwcml2YXRlIElFbmFibGVPcGVyYXRpb24gICAgICBlbmFibGVPcGVyYXRpb25PYmplY3Q7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgIGVudW1JZDsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZW5hYmxlZEVsZW1lbnQ7Ci0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbXBsZXhFbGVtZW50OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICB3b3Jrc3BhY2VPbmx5OwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbTsgIAotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICB1c2VEZWZhdWx0RGF0YTsKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICB9Ci0gIHB1YmxpYyBib29sZWFuIGlzV29ya3NwYWNlT25seSgpCi0gIHsKLSAgICByZXR1cm4gd29ya3NwYWNlT25seTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdvcmtzcGFjZU9ubHkoIGJvb2xlYW4gd29ya3NwYWNlT25seSApCi0gIHsKLSAgICB0aGlzLndvcmtzcGFjZU9ubHkgPSB3b3Jrc3BhY2VPbmx5OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbiggYm9vbGVhbiBpc0ljb24gKQotICB7Ci0gICAgaWYoIGlzSWNvbiApCi0gICAgewotICAgICAgb3BlcmF0aW9uS2luZCA9IE9wZXJhdGlvbktpbmQuaWNvblNlbGVjdGlvbjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG9wZXJhdGlvbktpbmQgPSBPcGVyYXRpb25LaW5kLnNlbGVjdGlvbjsgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gIH0KLQotICBwdWJsaWMgT3BlcmF0aW9uS2luZCBnZXRPcGVyYXRpb25LaW5kKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25LaW5kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtZXJhdGlvbklkKCkKLSAgewotICAgIHJldHVybiBlbnVtSWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnVtZXJhdGlvbklkKCBTdHJpbmcgZW51bUlkICkKLSAgewotICAgIHRoaXMuZW51bUlkICAgPSBlbnVtSWQ7ICAKLSAgICBvcGVyYXRpb25LaW5kID0gT3BlcmF0aW9uS2luZC5lbnVtZXJhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQb2xpY3lJZFBhdHRlcm4oKQotICB7Ci0gICAgcmV0dXJuIHBvbGljeUlkUGF0dGVybjsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgCi0gICAgLy8gSWYgd2UgZG9uJ3QgYWxsb3cgbXVsdGkgc2VsZWN0IGFuZCBtdWx0aXBsZSBwb2xpY2llcyBoYXZlIGJlZW4gc2VsZWN0ZWQKLSAgICAvLyB0aGVuIHRoaXMgb3BlcmF0aW9uIGlzIG5vdCBlbmFibGVkLgotICAgIGlmKCAhbXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWRQb2xpY2llcy5zaXplKCkgPiAxICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHJlc3VsdCAmJiBlbmFibGVkRWxlbWVudCAhPSBudWxsICkKLSAgICB7Ci0gICAgICAvLyBXZSBoYXZlIGFuIGV4dGVuc2lvbiBmb3IgdGhpcyBlbmFibGVtZW50IGNvZGUgc28gd2Ugd2lsbCBjYWxsIHRoaXMKLSAgICAgIC8vIGNvZGUuCi0gICAgICBpZiggZW5hYmxlT3BlcmF0aW9uT2JqZWN0ID09IG51bGwgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBlbmFibGVkQ2xhc3NOYW1lID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGVOYW1lKCBlbmFibGVkRWxlbWVudCwgImVuYWJsZWRjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGVuYWJsZU9wZXJhdGlvbk9iamVjdCA9IChJRW5hYmxlT3BlcmF0aW9uKWVuYWJsZWRFbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oIGVuYWJsZWRDbGFzc05hbWUgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIHNlcnZpY2UgcG9saWN5IHVpIFwiZW5hYmxlZFwiIGNsYXNzLiIsIGV4YyApOyAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggZW5hYmxlT3BlcmF0aW9uT2JqZWN0ICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gZW5hYmxlT3BlcmF0aW9uT2JqZWN0LmlzRW5hYmxlZCggc2VsZWN0ZWRQb2xpY2llcyApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXVuY2hPcGVyYXRpb24oIElTZXJ2aWNlUG9saWN5IHRoaXNQb2xpY3ksIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKQotICB7Ci0gICAgaWYoIGxhdW5jaE9wZXJhdGlvbk9iamVjdCA9PSBudWxsICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxhdW5jaENsYXNzTmFtZSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlTmFtZSggY29tcGxleEVsZW1lbnQsICJsYXVuY2hjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBsYXVuY2hPcGVyYXRpb25PYmplY3QgPSAoSUxhdW5jaE9wZXJhdGlvbiljb21wbGV4RWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCBsYXVuY2hDbGFzc05hbWUgKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmxvZ0Vycm9yKCAiRXJyb3IgbG9hZGluZyBzZXJ2aWNlIHBvbGljeSB1aSBsYXVuY2ggY2xhc3MuIiwgZXhjICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIGxhdW5jaE9wZXJhdGlvbk9iamVjdCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBsYXVuY2hPcGVyYXRpb25PYmplY3QubGF1bmNoKCBzZWxlY3RlZFBvbGljaWVzICk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNNdWx0aVNlbGVjdCgpCi0gIHsKLSAgICByZXR1cm4gbXVsdGlTZWxlY3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNdWx0aVNlbGVjdChib29sZWFuIG11bHRpU2VsZWN0KQotICB7Ci0gICAgdGhpcy5tdWx0aVNlbGVjdCA9IG11bHRpU2VsZWN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRvcihJRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvbGljeUlkUGF0dGVybihTdHJpbmcgcG9saWN5SWRQYXR0ZXJuKQotICB7Ci0gICAgdGhpcy5wb2xpY3lJZFBhdHRlcm4gPSBwb2xpY3lJZFBhdHRlcm47Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZW5hYmxlZEVsZW1lbnQpCi0gIHsKLSAgICB0aGlzLmVuYWJsZWRFbGVtZW50ID0gZW5hYmxlZEVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb21wbGV4RWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29tcGxleEVsZW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbXBsZXhFbGVtZW50ID0gY29tcGxleEVsZW1lbnQ7Ci0gICAgb3BlcmF0aW9uS2luZCA9IE9wZXJhdGlvbktpbmQuY29tcGxleDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHRJdGVtKCBTdHJpbmcgZGVmYXVsdEl0ZW0gKQotICB7Ci0gICAgdGhpcy5kZWZhdWx0SXRlbSA9IGRlZmF1bHRJdGVtOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEl0ZW0oKQotICB7Ci0gICAgaWYoIGRlZmF1bHRJdGVtID09IG51bGwgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgICBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0ID0gcGxhdGZvcm0uZ2V0U3RhdGVFbnVtZXJhdGlvbiggZW51bUlkICk7Ci0gICAgICAKLSAgICAgIGlmKCBlbnVtTGlzdCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdEl0ZW0gPSBlbnVtTGlzdC5nZXQoMCkuZ2V0SWQoKTsKLSAgICAgIAotICAgICAgICAvLyBObyBkZWZhdWx0IGl0ZW0gaGFzIGJlZW4gc3BlY2lmaWVkIHNvIHdlIHdpbGwgc2VhcmNoIHRoZSBlbnVtZXJhdGlvbiBmb3Igb25lLgotICAgICAgICAvLyBJZiBub25lIHdhcyBzcGVjaWZpZWQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGVudW1lcmF0aW9uIGlzIHVzZWQuCi0gICAgICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBlbnVtTGlzdCApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggaXRlbS5pc0RlZmF1bHQoKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgZGVmYXVsdEl0ZW0gPSBpdGVtLmdldElkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gZGVmYXVsdEl0ZW07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1VzZURlZmF1bHREYXRhKCkKLSAgewotICAgIHJldHVybiB1c2VEZWZhdWx0RGF0YTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVzZURlZmF1bHREYXRhKCBib29sZWFuIHVzZURlZmF1bHREYXRhICkKLSAgewotICAgIHRoaXMudXNlRGVmYXVsdERhdGEgPSB1c2VEZWZhdWx0RGF0YTsKLSAgfSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9JQ29uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9JQ29uTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjk0OTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvSUNvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjUgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuQ29tcG9zaXRlSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgSUNvbk1hbmFnZXIKLXsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBJbWFnZT4gaWNvblRhYmxlOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBmYXZvcml0ZSA9ICJmYXYiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgaW52YWxpZCAgPSAiaW52IjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdhcm5pbmcgID0gIndhciI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIFN0cmluZyBsb2NrICAgICA9ICJsb2MiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIFN0cmluZyBmb2xkZXJCYXNlVVJMOyAKLSAgcHJpdmF0ZSBTdHJpbmcgbGVhZkJhc2VVUkw7Ci0gIHByaXZhdGUgSW1hZ2UgIGZhdm9yaXRlSW1hZ2U7Ci0gIHByaXZhdGUgSW1hZ2UgIGludmFsaWRJbWFnZTsKLSAgcHJpdmF0ZSBJbWFnZSAgd2FybmluZ0ltYWdlOwotICBwcml2YXRlIEltYWdlICBsb2NrSW1hZ2U7Ci0gIAotICBwcml2YXRlIERlY29yYXRvckRlc2NyaXB0b3IgaWNvbkNyZWF0b3I7Ci0gIAotICBwdWJsaWMgSUNvbk1hbmFnZXIoKQotICB7Ci0gICAgaWNvblRhYmxlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbWFnZT4oKTsKLSAgICBhZGRPdmVybGF5SWNvbnMoKTsgIAotICAgIGljb25DcmVhdG9yID0gbmV3IERlY29yYXRvckRlc2NyaXB0b3IoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRGb2xkZXJCYXNlVXJsKCkKLSAgewotICAgIHJldHVybiBmb2xkZXJCYXNlVVJMOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGVhZkJhc2VVcmwoKQotICB7Ci0gICAgcmV0dXJuIGxlYWZCYXNlVVJMOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRPdmVybGF5SWNvbnMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQnVuZGxlIGJ1bmRsZSAgICAgID0gU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKTsKLSAgICAgIFVSTCAgICBmb2xkZXJVcmwgICA9IEZpbGVMb2NhdG9yLmZpbmQoIGJ1bmRsZSwgbmV3IFBhdGgoICJpY29ucy9mdWxsL29iajE2L2ZsZHJfb2JqLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgbGVhZlVybCAgICAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vYmoxNi9maWxlX29iai5naWYiICksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVVJMICAgIGZhdm9yaXRlVXJsID0gRmlsZUxvY2F0b3IuZmluZCggYnVuZGxlLCBuZXcgUGF0aCggImljb25zL2Z1bGwvb3ZyMTYvZmF2b3JpdGVfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgaW52YWxpZFVybCAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vdnIxNi9pbnZhbGlkdHlwZV9vdnIuZ2lmIiApLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFVSTCAgICB3YXJuaW5nVXJsICA9IEZpbGVMb2NhdG9yLmZpbmQoIGJ1bmRsZSwgbmV3IFBhdGgoICJpY29ucy9mdWxsL292cjE2L3dhcm5pbmdfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgbG9ja1VybCAgICAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vdnIxNi91bm1vZGlmaWFibGVfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIGdldEljb25JbWFnZSggZm9sZGVyVXJsICk7Ci0gICAgICBnZXRJY29uSW1hZ2UoIGxlYWZVcmwgKTsKLSAgICAgIGZhdm9yaXRlSW1hZ2UgICA9IGdldEljb25JbWFnZSggZmF2b3JpdGVVcmwgKTsKLSAgICAgIGludmFsaWRJbWFnZSAgICA9IGdldEljb25JbWFnZSggaW52YWxpZFVybCApOwotICAgICAgd2FybmluZ0ltYWdlICAgID0gZ2V0SWNvbkltYWdlKCB3YXJuaW5nVXJsICk7Ci0gICAgICBsb2NrSW1hZ2UgICAgICAgPSBnZXRJY29uSW1hZ2UoIGxvY2tVcmwgKTsKLSAgICAgIAotICAgICAgZm9sZGVyQmFzZVVSTCA9IGZvbGRlclVybC50b1N0cmluZygpOwotICAgICAgbGVhZkJhc2VVUkwgICA9IGxlYWZVcmwudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5sb2dFcnJvciggIkVycm9yIHJlYWRpbmcgaWNvbiBvdmVybGF5cyIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBoYXNDaGFuZ2VkKCBTdHJpbmdbXSBzdHJpbmcxLCBTdHJpbmdbXSBzdHJpbmcyICkKLSAgewotICAgIGlmKCBzdHJpbmcxID09IG51bGwgfHwgc3RyaW5nMiA9PSBudWxsIHx8IHN0cmluZzEubGVuZ3RoICE9IHN0cmluZzIubGVuZ3RoICkgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0cmluZzEubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgdmFsdWUxID0gc3RyaW5nMVtpbmRleF07Ci0gICAgICBTdHJpbmcgdmFsdWUyID0gc3RyaW5nMltpbmRleF07Ci0gICAgICAKLSAgICAgIC8vIFdlIGNhbiBkbyBwb2ludGVyIGNvbXBhcmlzb24gc2luY2Ugd2UgYXJlIHVzaW5nIGNvbnN0YW50IFN0cmluZ3MuCi0gICAgICBpZiggdmFsdWUxICE9IHZhbHVlMiApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJbWFnZSBnZXRJY29uT3ZlcmxheSggU3RyaW5nIGJhc2VVcmwsIFN0cmluZ1tdIG92ZXJsYXlzICkKLSAgewotICAgIFN0cmluZyBpbWFnZVVybCAgPSBnZXRJbWFnZVVSTCggYmFzZVVybCwgb3ZlcmxheXMgKTsgCi0gICAgSW1hZ2UgIHJlc3VsdCAgICA9IChJbWFnZSlpY29uVGFibGUuZ2V0KCBpbWFnZVVybCApOwotICAgIAotICAgIGlmKCByZXN1bHQgPT0gbnVsbCApCi0gICAgewotICAgICAgSW1hZ2UgYmFzZUltYWdlID0gKEltYWdlKWljb25UYWJsZS5nZXQoIGJhc2VVcmwgKTsKLSAgICAgIAotICAgICAgaWYoIGJhc2VJbWFnZSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoaXMgYmFzZUltYWdlCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgYmFzZUltYWdlID0gZ2V0SWNvbkltYWdlKCBuZXcgVVJMKCBiYXNlVXJsICkgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIGltYWdlIGZyb206IiArIGJhc2VVcmwsIGV4Yyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBpY29uQ3JlYXRvci5zZXRCYXNlSW1hZ2UoIGJhc2VJbWFnZSwgb3ZlcmxheXMgKTsKLSAgICAgIAotICAgICAgcmVzdWx0ID0gaWNvbkNyZWF0b3IuY3JlYXRlSW1hZ2UoKTsKLSAgICAgIGljb25UYWJsZS5wdXQoIGltYWdlVXJsLCByZXN1bHQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc092ZXJsYXkoIFN0cmluZ1tdIG92ZXJsYXlzLCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAKLSAgICBmb3IoIFN0cmluZyBvdmVybGF5IDogb3ZlcmxheXMgKQotICAgIHsKLSAgICAgIC8vIE5vdGU6IFdlIGFyZSB1c2luZyBzdHJpbmcgcG9pbnRlciBjb21wYXJpc29uIGhlcmUgc2luY2UsIHRoZSBzdHJpbmdzCi0gICAgICAvLyBzaG91bGQgb25seSBiZSB0aGUgY29uc3RhbnRzIGRlZmluZWQgYWJvdmUuCi0gICAgICBpZiggb3ZlcmxheSA9PSB2YWx1ZSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEltYWdlVVJMKCBTdHJpbmcgYmFzZVVybCwgU3RyaW5nW10gb3ZlcmxheXMgKQotICB7Ci0gICAgU3RyaW5nIHVybCA9IGJhc2VVcmw7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgdmFsdWUgOiBvdmVybGF5cyApCi0gICAgewotICAgICAgaWYoIHZhbHVlICE9IG51bGwgKQotICAgICAgewotICAgICAgICB1cmwgPSB1cmwgKyAiOiIgKyB2YWx1ZTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdXJsOwotICB9Ci0gIAotICBwdWJsaWMgSW1hZ2UgZ2V0SWNvbkltYWdlKCBVUkwgdXJsICkKLSAgewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwudG9TdHJpbmcoKTsKLSAgICBJbWFnZSAgaW1hZ2UgICAgID0gaWNvblRhYmxlLmdldCggdXJsU3RyaW5nICk7Ci0gICAgCi0gICAgaWYoIGltYWdlID09IG51bGwgKQotICAgIHsKLSAgICAgIEltYWdlRGVzY3JpcHRvciBpbWFnZURlc2MgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTCh1cmwpOwotICAgICAgCi0gICAgICBpbWFnZSA9IGltYWdlRGVzYy5jcmVhdGVJbWFnZSgpOwotICAgICAgaWNvblRhYmxlLnB1dCggdXJsU3RyaW5nLCBpbWFnZSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW1hZ2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gICAgZm9yKCBJbWFnZSBpbWFnZSA6IGljb25UYWJsZS52YWx1ZXMoKSApCi0gICAgewotICAgICAgaW1hZ2UuZGlzcG9zZSgpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBEZWNvcmF0b3JEZXNjcmlwdG9yIGV4dGVuZHMgQ29tcG9zaXRlSW1hZ2VEZXNjcmlwdG9yCi0gIHsKLSAgICBwcml2YXRlIEltYWdlICAgIGJhc2VJbWFnZTsKLSAgICBwcml2YXRlIFBvaW50ICAgIHNpemU7Ci0gICAgcHJpdmF0ZSBTdHJpbmdbXSBvdmVybGF5czsKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3Q29tcG9zaXRlSW1hZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgIHsKLSAgICAgIGRyYXdJbWFnZSggYmFzZUltYWdlLmdldEltYWdlRGF0YSgpLCAwLCAwKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG92ZXJsYXlzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGlmKCBoYXNPdmVybGF5KG92ZXJsYXlzLCBmYXZvcml0ZSkgKQotICAgICAgICB7Ci0gICAgICAgICAgZHJhd0ltYWdlKCBmYXZvcml0ZUltYWdlLmdldEltYWdlRGF0YSgpLCBzaXplLnggLSBmYXZvcml0ZUltYWdlLmdldEJvdW5kcygpLndpZHRoLCAwICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBoYXNPdmVybGF5KCBvdmVybGF5cywgd2FybmluZyApICkKLSAgICAgICAgewotICAgICAgICAgIGRyYXdJbWFnZSggd2FybmluZ0ltYWdlLmdldEltYWdlRGF0YSgpLCAwLCBzaXplLnkgLSB3YXJuaW5nSW1hZ2UuZ2V0Qm91bmRzKCkuaGVpZ2h0ICk7ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggaGFzT3ZlcmxheSggb3ZlcmxheXMsIGludmFsaWQgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBkcmF3SW1hZ2UoIGludmFsaWRJbWFnZS5nZXRJbWFnZURhdGEoKSwgMCwgc2l6ZS55IC0gaW52YWxpZEltYWdlLmdldEJvdW5kcygpLmhlaWdodCApOyAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIGhhc092ZXJsYXkoIG92ZXJsYXlzLCBsb2NrICkgKQotICAgICAgICB7Ci0gICAgICAgICAgZHJhd0ltYWdlKCBsb2NrSW1hZ2UuZ2V0SW1hZ2VEYXRhKCksIAotICAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC0gbG9ja0ltYWdlLmdldEJvdW5kcygpLndpZHRoLCAKLSAgICAgICAgICAgICAgICAgICAgIHNpemUueSAtIGxvY2tJbWFnZS5nZXRCb3VuZHMoKS5oZWlnaHQgKTsgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCYXNlSW1hZ2UoIEltYWdlIGltYWdlLCBTdHJpbmdbXSBvdmVybGF5cyApCi0gICAgeyAKLSAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBpbWFnZS5nZXRCb3VuZHMoKTsKLSAgICAgIAotICAgICAgdGhpcy5iYXNlSW1hZ2UgPSBpbWFnZTsKLSAgICAgIHRoaXMuc2l6ZSAgICAgID0gbmV3IFBvaW50KCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQgKTsKLSAgICAgIHRoaXMub3ZlcmxheXMgID0gb3ZlcmxheXM7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBQb2ludCBnZXRTaXplKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUG9saWN5T3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Qb2xpY3lPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZTc2MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Qb2xpY3lPcGVyYXRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZQotICogYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFBvbGljeU9wZXJhdGlvbkltcGwgaW1wbGVtZW50cyBJUG9saWN5T3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgQmFzZU9wZXJhdGlvbkltcGwgYmFzZU9wZXJhdGlvbjsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSAgICBwb2xpY3k7Ci0gIAotICBwdWJsaWMgUG9saWN5T3BlcmF0aW9uSW1wbCggQmFzZU9wZXJhdGlvbkltcGwgYmFzZU9wZXJhdGlvbiwgSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLSAgewotICAgIHRoaXMuYmFzZU9wZXJhdGlvbiA9IGJhc2VPcGVyYXRpb247Ci0gICAgdGhpcy5wb2xpY3kgICAgICAgID0gcG9saWN5OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRJdGVtKCkKLSAgewotICAgIHJldHVybiBiYXNlT3BlcmF0aW9uLmdldERlZmF1bHRJdGVtKCk7Ci0gIH0KLQotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXREZXNjcmlwdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVudW1lcmF0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uZ2V0RW51bWVyYXRpb25JZCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXRJZCgpOwotICB9Ci0KLSAgcHVibGljIE9wZXJhdGlvbktpbmQgZ2V0T3BlcmF0aW9uS2luZCgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXRPcGVyYXRpb25LaW5kKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBvbGljeUlkUGF0dGVybigpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXRQb2xpY3lJZFBhdHRlcm4oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5pc0VuYWJsZWQoIHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzV29ya3NwYWNlT25seSgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5pc1dvcmtzcGFjZU9ubHkoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxhdW5jaE9wZXJhdGlvbiggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcykKLSAgewotICAgIGJhc2VPcGVyYXRpb24ubGF1bmNoT3BlcmF0aW9uKCBwb2xpY3ksIHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgfQotCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRTZXJ2aWNlUG9saWN5KCkKLSAgewotICAgIHJldHVybiBwb2xpY3k7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlSXRlbSggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBJUG9saWN5U3RhdGUgc3RhdGUgICAgICAgPSBnZXRTdGF0ZSggcHJvamVjdCApOwotICAgIFN0cmluZyAgICAgICBrZXkgICAgICAgICA9IGJhc2VPcGVyYXRpb24uZ2V0SWQoKTsKLSAgICBTdHJpbmcgICAgICAgZGVmYXVsdEl0ZW0gPSBiYXNlT3BlcmF0aW9uLmdldERlZmF1bHRJdGVtKCk7Ci0gICAgCi0gICAgaWYoIGJhc2VPcGVyYXRpb24uaXNVc2VEZWZhdWx0RGF0YSgpICkKLSAgICB7Ci0gICAgICBrZXkgPSBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5OwotICAgIH0KLSAgICAKLSAgICBpZiggZGVmYXVsdEl0ZW0gIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGUucHV0RGVmYXVsdFZhbHVlKCBrZXksIGRlZmF1bHRJdGVtLCBmYWxzZSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdGUuZ2V0VmFsdWUoIGtleSApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3RhdGVJdGVtKCBJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc3RhdGVJdGVtICkKLSAgewotICAgIElQb2xpY3lTdGF0ZSBzdGF0ZSA9IGdldFN0YXRlKCBwcm9qZWN0ICk7Ci0gICAgU3RyaW5nICAgICAgIGtleSAgID0gYmFzZU9wZXJhdGlvbi5nZXRJZCgpOwotICAgIAotICAgIGlmKCBiYXNlT3BlcmF0aW9uLmlzVXNlRGVmYXVsdERhdGEoKSApCi0gICAgewotICAgICAga2V5ID0gSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGUucHV0VmFsdWUoIGtleSwgc3RhdGVJdGVtICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVBvbGljeVN0YXRlIGdldFN0YXRlKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHJldHVybiBwcm9qZWN0ID09IG51bGwgPyBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoKSA6IHBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApOyAgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VEZWZhdWx0RGF0YSgpIAotICB7Ci0JICByZXR1cm4gYmFzZU9wZXJhdGlvbi5pc1VzZURlZmF1bHREYXRhKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUXVpY2tGaXhBY3Rpb25JbmZvSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9RdWlja0ZpeEFjdGlvbkluZm9JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OGZmYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9RdWlja0ZpeEFjdGlvbkluZm9JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotCi1wdWJsaWMgY2xhc3MgUXVpY2tGaXhBY3Rpb25JbmZvSW1wbCBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbkluZm8KLXsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudDsKLSAgcHJpdmF0ZSBJRGVzY3JpcHRvciAgICAgICAgICAgZGVzY3JpcHRvcjsKLSAgCi0gIHB1YmxpYyBRdWlja0ZpeEFjdGlvbkluZm9JbXBsKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgSURlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gIHsKLSAgICB0aGlzLmVsZW1lbnQgICAgPSBlbGVtZW50OwotICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUXVpY2tGaXhBY3Rpb24gZ2V0QWN0aW9uKCkKLSAgewotICAgIElRdWlja0ZpeEFjdGlvbiByZXN1bHQgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIE9iamVjdCBhY3Rpb24gPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBpZiggYWN0aW9uIGluc3RhbmNlb2YgSVF1aWNrRml4QWN0aW9uICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gKElRdWlja0ZpeEFjdGlvbilhY3Rpb247Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmxvZ0Vycm9yKCAiRXJyb3IgbG9hZGluZyBxdWljayBmaXggYWN0aW9uLiIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpCi0gIHsKLSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TY3JvbGxlZFBhZ2VDb250ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1Njcm9sbGVkUGFnZUNvbnRlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzZTA4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1Njcm9sbGVkUGFnZUNvbnRlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICogMjAwODA1MTIgICAyMzExNjEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgRml4IHRhYiBrZXkgYWNjZXNzaWJsaXR5IHByb2JsZW0uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLkZvcm1Db2xvcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5Gb3JtVG9vbGtpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLlNoYXJlZFNjcm9sbGVkQ29tcG9zaXRlOwotCi0KLXB1YmxpYyBjbGFzcyBTY3JvbGxlZFBhZ2VDb250ZW50IGV4dGVuZHMgU2hhcmVkU2Nyb2xsZWRDb21wb3NpdGUgewotCi0JcHJpdmF0ZSBGb3JtVG9vbGtpdCBmVG9vbGtpdDsKLQkKLQlwdWJsaWMgU2Nyb2xsZWRQYWdlQ29udGVudChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMocGFyZW50LCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCX0KLQkKLQlwdWJsaWMgU2Nyb2xsZWRQYWdlQ29udGVudChDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIocGFyZW50LCBzdHlsZSk7Ci0JCQotCQlzZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQkKLQkJZlRvb2xraXQ9IGdldERpYWxvZ3NGb3JtVG9vbGtpdCgpOwotCQkKLQkJc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKLQkJc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7Ci0JCQotCQlDb21wb3NpdGUgYm9keT0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7Ci0JCWJvZHkuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJc2V0Q29udGVudChib2R5KTsKLQl9Ci0JCi0JcHVibGljIEZvcm1Ub29sa2l0IGdldERpYWxvZ3NGb3JtVG9vbGtpdCgpIHsKLQkJaWYgKGZUb29sa2l0ID09IG51bGwpIHsKLQkJCUZvcm1Db2xvcnMgY29sb3JzPSBuZXcgRm9ybUNvbG9ycyhEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQljb2xvcnMuc2V0QmFja2dyb3VuZChudWxsKTsKLQkJCWNvbG9ycy5zZXRGb3JlZ3JvdW5kKG51bGwpOwkKLQkJCWZUb29sa2l0PSBuZXcgRm9ybVRvb2xraXQoY29sb3JzKTsKLQkJfQotCQlyZXR1cm4gZlRvb2xraXQ7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRhcHRDaGlsZChDb250cm9sIGNoaWxkQ29udHJvbCkgewotCSAgLy8gTmVlZCB0byBoYXZlIHRoZSB0cmFjayBrZXlib2FyZCBwYXJhbWV0ZXIgZmFsc2UsIHNpbmNlIGEgdHJ1ZQotCSAgLy8gdmFsdWUgY2F1c2VzIENvbXBvc2l0ZSBjb250cm9scyB0byBlYXQgdGFiIGtleXMsIHdoaWNoIGluIHR1cm4KLQkgIC8vIGNhdXNlcyB0aGUgd2hvbGUgcHJlZmVyZW5jZSBwYWdlIHRvIGJlY29tZSBpbmFjY2Vzc2libGUuCi0JCWZUb29sa2l0LmFkYXB0KGNoaWxkQ29udHJvbCwgdHJ1ZSwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgQ29tcG9zaXRlIGdldEJvZHkoKSB7Ci0JCXJldHVybiAoQ29tcG9zaXRlKSBnZXRDb250ZW50KCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjNjllMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDYgMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICogMjAwNzExMjAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJIAotICogMjAwNzEyMTIgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqIDIwMDgwMjExICAgMjE4NTIwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzI0ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVJIG5vdyBsaXN0ZW5zIGZvciBzdGF0ZSBjaGFuZ2VzLgotICogMjAwODAzMjQgICAyMjM2MzQgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgU2VydmljZSBQb2xpY2llcyBwcmVmZXJlbmNlIHRyZWUgc2hvdWxkIGJlIDMgbGV2ZWwgdHJlZQotICogMjAwODA1MDYgICAyMTkwMDUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgU2VydmljZSBwb2xpY3kgcHJlZmVyZW5jZSBwYWdlIG5vdCByZXN0b3JpbmcgcHJvcGVybHkKLSAqIDIwMDgwNTMwICAgMjM0OTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEZpeGVkIGZvY3VzIHByb2JsZW0gZm9yIGFjdGlvbiBjb250cm9scwotICogMjAwODA3MTYgICAyMzk0NTcgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgU2VydmljZSBQb2xpY3kgVUkgUmVzdG9yZSBkZWZhdWx0cyBkb2VzIG5vdCByZWZyZXNoIHZhbGlkYXRpb24gZXJyb3IKLSAqIDIwMDkwMzA2ICAgMjI0NjMyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEZpeCBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2UgcGFnZSBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlNjcm9sbGVkQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuRXhwYW5zaW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuRXhwYW5zaW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5FeHBhbmRhYmxlQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5UmVsYXRpb25zaGlwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklQb2xpY3lPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeVBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuU2VydmljZVV0aWxzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cwotCQlTZWxlY3Rpb25MaXN0ZW5lciwgSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgIHsKLQotCXByaXZhdGUgU2Nyb2xsZWRDb21wb3NpdGUgb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlOwotCS8vYSBzY3JvbGxhYmxlIGNvbXBvc2l0ZSBjb250YWluaW5nIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc2VsZWN0ZWQgcG9saWNpZXMKLQlwcml2YXRlIENvbXBvc2l0ZSBvcGVyYXRpb25zQ29tcG9zaXRlOwotCXByaXZhdGUgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbTsKLQlwcml2YXRlIENvbXBvc2l0ZSBtYXN0ZXJDb21wb3NpdGU7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgZGV0YWlsc0NvbXBvc2l0ZTsKLQlwcml2YXRlIFRyZWUgbWFzdGVyUG9saWN5VHJlZTsKLQkvL3RlcnRpYXJ5IGFuZCBoaWdoZXIgbGV2ZWwgcG9saWN5IG5vZGVzIGluIGEgc2VwYXJhdGUgdHJlZQotCXByaXZhdGUgVHJlZSBkZXRhaWxzUG9saWN5VHJlZTsKLQlwcml2YXRlIFRleHQgdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb247Ci0JcHJpdmF0ZSBUZXh0IHRleHRfRGV0YWlsc1BhbmVsX2RlcGVuZGVuY2llczsKLQlwcml2YXRlIExhYmVsIGxhYmVsX0RldGFpbHNQYW5lbF9kZXNjcmlwdGlvbjsKLQlwcml2YXRlIExhYmVsIGxhYmVsX2RldGFpbHNQYW5lbF9kZXBlbmRhbmNpZXM7Ci0JcHJpdmF0ZSBIYXNodGFibGU8U3RyaW5nLCBJU3RhdHVzPiBhbGxFcnJvcnM7Ci0JcHJpdmF0ZSBJU3RhdHVzIGVycm9yOwotCXByaXZhdGUgYm9vbGVhbiBiQ29tcGxleE9wQ29tcGxldGVkID0gdHJ1ZTsKLQlwcml2YXRlIExpc3Q8Q2hpbGRDaGFuZ2VFdmVudD4gbGlzdENoaWxkQ2hhbmdlRXZlbnRzOwotCXByaXZhdGUgSUNvbk1hbmFnZXIgaWNvbk1hbmFnZXIgPSBuZXcgSUNvbk1hbmFnZXIoKTsKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCXByaXZhdGUgU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXI7Ci0JcHJpdmF0ZSBFeHBhbmRhYmxlQ29tcG9zaXRlIGV4Y29tcG9zaXRlOwotCXByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtID0gU2VydmljZVBvbGljeVBsYXRmb3JtCi0JCQkuZ2V0SW5zdGFuY2UoKTsKLQlwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSQotCQkJLmdldEluc3RhbmNlKCk7Ci0JcHJpdmF0ZSBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciBzdGF0ZUNoYW5nZUxpc3RlbmVyICA9IG5ldyBTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZUVuYWJsZWQgICA9IHRydWU7Ci0JcHJpdmF0ZSBIYXNoU2V0PElTZXJ2aWNlUG9saWN5PiAgICBzdGF0ZUNoYW5nZVBvbGljeVNldCA9IG5ldyBIYXNoU2V0PElTZXJ2aWNlUG9saWN5PigpOwotCXByaXZhdGUgTGlzdDxJU2VydmljZVBvbGljeT4gICAgICAgbGFzdFNlbGVjdGVkU3AgICAgICAgPSBudWxsOwotCS8qQ09OVEVYVF9JRCBQVFBQMDAwMSBmb3IgdGhlIFNlcnZpY2UgUG9saWNpZXMgUHJlZmVyZW5jZSAmIFByb3BlcnR5IFBhZ2UqLwotICAgIHByaXZhdGUgU3RyaW5nIElORk9QT1BfU1BQUF9QQUdFID0gU2VydmljZVBvbGljeUFjdGl2YXRvclVJLlBMVUdJTl9JRCArICIuU1BQUDAwMDEiOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBleHBhbmRhYmxlIGNvbXBvc2l0ZQotCSAqIEBwYXJhbSBwYXJlbnQKLQkgKiBAcGFyYW0gbkNvbHVtbnMKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBFeHBhbmRhYmxlQ29tcG9zaXRlIGNyZWF0ZUV4cGFuZGFibGVDb21wb3NpdGUoQ29tcG9zaXRlIHBhcmVudCwKLQkJCWludCBuQ29sdW1ucykgewotCQlFeHBhbmRhYmxlQ29tcG9zaXRlIGV4Y29tcG9zaXRlID0gbmV3IEV4cGFuZGFibGVDb21wb3NpdGUocGFyZW50LAotCQkJCVNXVC5OT05FLCBFeHBhbmRhYmxlQ29tcG9zaXRlLlRXSVNUSUUKLQkJCQkJCXwgRXhwYW5kYWJsZUNvbXBvc2l0ZS5DTElFTlRfSU5ERU5UKTsKLQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoZmFsc2UpOwotCQlleGNvbXBvc2l0ZS5zZXRWaXNpYmxlKGZhbHNlKTsKLQkJZXhjb21wb3NpdGUuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250UmVnaXN0cnkoKS5nZXRCb2xkKAotCQkJCUpGYWNlUmVzb3VyY2VzLkRJQUxPR19GT05UKSk7Ci0JCWV4Y29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsCi0JCQkJdHJ1ZSwgZmFsc2UsIG5Db2x1bW5zLCAxKSk7Ci0JCWV4Y29tcG9zaXRlLmFkZEV4cGFuc2lvbkxpc3RlbmVyKG5ldyBFeHBhbnNpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgZXhwYW5zaW9uU3RhdGVDaGFuZ2VkKEV4cGFuc2lvbkV2ZW50IGUpIHsKLQkJCQlleHBhbmRlZFN0YXRlQ2hhbmdlZCgoRXhwYW5kYWJsZUNvbXBvc2l0ZSkgZS5nZXRTb3VyY2UoKSk7Ci0JCQl9Ci0JCX0pOwotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKGV4Y29tcG9zaXRlKTsKLQkJcmV0dXJuIGV4Y29tcG9zaXRlOwotCX0KLQkKLQkvKioKLQkgKiBAYXV0aG9yIGVyaWNkcAotCSAqIEhlbHBlciBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBkYXRhIHJlcXVpcmVkIHdoZW4gYW4gYWN0aW9uIGNvbnRyb2wgY2hhbmdlcyBzdGF0ZQotCSAqCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBBY3Rpb25Db250cm9sRGF0YSB7Ci0JCXByaXZhdGUgTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0OwotCQlwcml2YXRlIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9MaXN0OwotLy8JCXByaXZhdGUgSVBvbGljeU9wZXJhdGlvbiBwbzsKLQotCQlwdWJsaWMgQWN0aW9uQ29udHJvbERhdGEoTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0LCBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvTGlzdCkgewotCQkJdGhpcy5zcExpc3QgPSBzcExpc3Q7Ci0JCQl0aGlzLnBvTGlzdCA9IHBvTGlzdDsKLQkJfQotCQlwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0U3BMaXN0KCkgewotCQkJcmV0dXJuIHNwTGlzdDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFNwTGlzdChMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3QpIHsKLQkJCXRoaXMuc3BMaXN0ID0gc3BMaXN0OwotCQl9Ci0vLwotLy8JCXB1YmxpYyBJUG9saWN5T3BlcmF0aW9uIGdldFBvKCkgewotLy8JCQlyZXR1cm4gcG87Ci0vLwkJfQotLy8KLS8vCQlwdWJsaWMgdm9pZCBzZXRQbyhJUG9saWN5T3BlcmF0aW9uIHBvKSB7Ci0vLwkJCXRoaXMucG8gPSBwbzsKLS8vCQl9Ci0KLQkJcHVibGljIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gZ2V0UG9MaXN0KCkgewotCQkJcmV0dXJuIHBvTGlzdDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFBvTGlzdChMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvTGlzdCkgewotCQkJdGhpcy5wb0xpc3QgPSBwb0xpc3Q7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBNYWtlcyB0aGUgc2Nyb2xsYWJsZSBjb21wb3NpdGUgYXdhcmUgb2YgdGhpcyBjb250cm9sLCBzbyBleHBhbmQvY29sbGFwc2UKLQkgKiBvZiB0aGUgc2Nyb2xsYWJsZSBjb21wb3NpdGUgd2lsbCBtb3ZlIHRoaXMgY29udHJvbCBkb3duL3VwIGFjY29yZGluZ2x5Ci0JICogQHBhcmFtIGNvbnRyb2wgdGhlIGNvbnRyb2wgdG8gbWFrZSB0aGUgc2Nyb2xsYWJsZSBjb21wb3NpdGUgYXdhcmUgb2YKLQkgKi8KLQlwcml2YXRlIHZvaWQgbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShDb250cm9sIGNvbnRyb2wpIHsKLQkJU2Nyb2xsZWRQYWdlQ29udGVudCBwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSA9IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKGNvbnRyb2wpOwotCQlpZiAocGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgIT0gbnVsbCkgewotCQkJcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUuYWRhcHRDaGlsZChjb250cm9sKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU2Nyb2xsZWRQYWdlQ29udGVudCBnZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZShDb250cm9sIGNvbnRyb2wpIHsKLQkJQ29udHJvbCBwYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpOwotCQl3aGlsZSAoIShwYXJlbnQgaW5zdGFuY2VvZiBTY3JvbGxlZFBhZ2VDb250ZW50KSAmJiBwYXJlbnQgIT0gbnVsbCkgewotCQkJcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpOwotCQl9Ci0JCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBTY3JvbGxlZFBhZ2VDb250ZW50KSB7Ci0JCQlyZXR1cm4gKFNjcm9sbGVkUGFnZUNvbnRlbnQpIHBhcmVudDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIGZpbmFsIHZvaWQgZXhwYW5kZWRTdGF0ZUNoYW5nZWQoRXhwYW5kYWJsZUNvbXBvc2l0ZSBleHBhbmRhYmxlKSB7Ci0JCVNjcm9sbGVkUGFnZUNvbnRlbnQgcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgPSBnZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZShleHBhbmRhYmxlKTsKLQkJaWYgKHBhcmVudFNjcm9sbGVkQ29tcG9zaXRlICE9IG51bGwpIHsKLQkJCXBhcmVudFNjcm9sbGVkQ29tcG9zaXRlLnJlZmxvdyh0cnVlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwYXJlbnQKLQkgKiBAcmV0dXJuIGEgc2Nyb2xsYWJsZSBjb21wb3NpdGUgY29udGFpbmluZyBhbiBleHBhbmRhYmxlIGNvbnRlbnQKLQkgKgotCSAqLwotCXByaXZhdGUgQ29tcG9zaXRlIGNyZWF0ZURldGFpbHNTY3JvbGxQYWdlQ29udGVudChDb21wb3NpdGUgcGFyZW50KSB7Ci0KLQkJaW50IG5Db2x1bW5zID0gMTsKLQotCQlmaW5hbCBTY3JvbGxlZFBhZ2VDb250ZW50IHBhZ2VDb250ZW50ID0gbmV3IFNjcm9sbGVkUGFnZUNvbnRlbnQocGFyZW50KTsKLQotCQlHcmlkTGF5b3V0IHBhZ2VDb250TGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJcGFnZUNvbnRMYXlvdXQubnVtQ29sdW1ucyA9IG5Db2x1bW5zOwotCQlwYWdlQ29udExheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlwYWdlQ29udExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0KLQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IHBhZ2VDb250ZW50LmdldEJvZHkoKTsKLQkJY29tcG9zaXRlLnNldExheW91dChwYWdlQ29udExheW91dCk7Ci0KLQkJZXhjb21wb3NpdGUgPSBjcmVhdGVFeHBhbmRhYmxlQ29tcG9zaXRlKGNvbXBvc2l0ZSwgbkNvbHVtbnMpOwotCi0JCUNvbXBvc2l0ZSBpbm5lciA9IG5ldyBDb21wb3NpdGUoZXhjb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJaW5uZXIuc2V0Rm9udChjb21wb3NpdGUuZ2V0Rm9udCgpKTsKLQkJaW5uZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KG5Db2x1bW5zLCBmYWxzZSkpOwotCQlleGNvbXBvc2l0ZS5zZXRDbGllbnQoaW5uZXIpOwotCQkvL2RldGFpbHMgcG9saWN5IHRyZWUgZm9yIHRlcnRpYXJ5IGFuZCBoaWdoZXIgbGV2ZWwgc2VydmljZSBwb2xpY2llcwotCQlkZXRhaWxzUG9saWN5VHJlZSA9IG5ldyBUcmVlKGlubmVyLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJKTsKLQkJZGV0YWlsc1BvbGljeVRyZWUuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCUdyaWREYXRhIGRldGFpbHNQcmVmVHJlZUdEID0gbmV3IEdyaWREYXRhKAotCQkJCUdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0JCWRldGFpbHNQcmVmVHJlZUdELmhlaWdodEhpbnQgPSA1MDsKLQkJZGV0YWlsc1BvbGljeVRyZWUuc2V0TGF5b3V0RGF0YShkZXRhaWxzUHJlZlRyZWVHRCk7Ci0JCWRldGFpbHNQb2xpY3lUcmVlLnNldFRvb2xUaXBUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BTUF9ERVRBSUxTVFJFRSk7Ci0JCS8vbWFrZSB0aGUgc2Nyb2xsYWJsZSBjb21wb3NpdGUgYXdhcmUgb2YgdGhlIHRyZWUgc28gZXhwYW5kL2NvbGxhcHNlIHdvcmtzIHByb3Blcmx5Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUoZGV0YWlsc1BvbGljeVRyZWUpOwotCQkKLQkJY3JlYXRlUG9saWN5T3BlcmF0aW9uc0NvbXBvc2l0ZShjb21wb3NpdGUpOwotCQlDb21wb3NpdGUgZGVzY3JpcHRpb25BbmREZXRhaWxzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJZGVzY3JpcHRpb25BbmREZXRhaWxzQ29tcG9zaXRlLnNldEZvbnQoY29tcG9zaXRlLmdldEZvbnQoKSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQobkNvbHVtbnMsIGZhbHNlKTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0KLQkJCi0JCWRlc2NyaXB0aW9uQW5kRGV0YWlsc0NvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKLQkJR3JpZERhdGEgZGV0YWlsc0dENCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkVORCwgdHJ1ZSwgdHJ1ZSk7Ci0JCQotCQlkZXNjcmlwdGlvbkFuZERldGFpbHNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkZXRhaWxzR0Q0KTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShkZXNjcmlwdGlvbkFuZERldGFpbHNDb21wb3NpdGUpOwotCQlsYWJlbF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24gPSBuZXcgTGFiZWwoZGVzY3JpcHRpb25BbmREZXRhaWxzQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGRldGFpbHNHRDIgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5FTkQsIHRydWUsIHRydWUpOwotCQlsYWJlbF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24uc2V0TGF5b3V0RGF0YShkZXRhaWxzR0QyKTsKLQkJbGFiZWxfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uCi0JCQkJLnNldFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VQT0xJQ0lFU19ERVNDUklQVElPTik7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUobGFiZWxfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24gPSBuZXcgVGV4dChkZXNjcmlwdGlvbkFuZERldGFpbHNDb21wb3NpdGUsIFNXVC5XUkFQCi0JCQkJfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULlJFQURfT05MWSk7Ci0JCUdyaWREYXRhIGRldGFpbHNHRCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkVORCwgdHJ1ZSwgdHJ1ZSk7Ci0JCWRldGFpbHNHRC5oZWlnaHRIaW50ID0gNzU7Ci0JCWRldGFpbHNHRC53aWR0aEhpbnQgPSAyMjA7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uLnNldExheW91dERhdGEoZGV0YWlsc0dEKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24uc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX0RFU0NSSVBUSU9OKTsKLQotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKHRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uKTsKLQkJbGFiZWxfZGV0YWlsc1BhbmVsX2RlcGVuZGFuY2llcyA9IG5ldyBMYWJlbChkZXNjcmlwdGlvbkFuZERldGFpbHNDb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJR3JpZERhdGEgZGV0YWlsc0dEMyA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkVORCwgdHJ1ZSwgdHJ1ZSk7Ci0JCWxhYmVsX2RldGFpbHNQYW5lbF9kZXBlbmRhbmNpZXMuc2V0TGF5b3V0RGF0YShkZXRhaWxzR0QzKTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShsYWJlbF9kZXRhaWxzUGFuZWxfZGVwZW5kYW5jaWVzKTsKLQkJbGFiZWxfZGV0YWlsc1BhbmVsX2RlcGVuZGFuY2llcwotCQkJCS5zZXRUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzID0gbmV3IFRleHQoZGVzY3JpcHRpb25BbmREZXRhaWxzQ29tcG9zaXRlLCBTV1QuV1JBUAotCQkJCXwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5SRUFEX09OTFkpOwotCQl0ZXh0X0RldGFpbHNQYW5lbF9kZXBlbmRlbmNpZXMuc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX0RFUEVOREVOQ0lFUyk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUodGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzKTsKLQkJCi0KLQkJY29tcG9zaXRlLnNldExheW91dChwYWdlQ29udExheW91dCk7Ci0JCUdyaWREYXRhIGRlcGVuZGVuY2llc0dEID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRU5ELCB0cnVlLCB0cnVlKTsKLQkJZGVwZW5kZW5jaWVzR0QuaGVpZ2h0SGludCA9IDc1OwotCQlkZXBlbmRlbmNpZXNHRC53aWR0aEhpbnQgPSAyMjA7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2RlcGVuZGVuY2llcy5zZXRMYXlvdXREYXRhKGRlcGVuZGVuY2llc0dEKTsKLQotCQlyZXR1cm4gcGFnZUNvbnRlbnQ7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgc2Nyb2xsYWJsZSBjb21wb3NpdGUgdGhhdCB3aWxsIGNvbnRhaW4gd2lkZ2V0cyBhc3NvY2lhdGVkIHdpdGggYSBwb2xpY3kgb3BlcmF0aW9uCi0JICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNvbXBvc2l0ZQotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVQb2xpY3lPcGVyYXRpb25zQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKHBhcmVudCwKLQkJCQlTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKHRydWUpOwotCQlHcmlkRGF0YSBvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGVHRCA9IG5ldyBHcmlkRGF0YSgKLQkJCQlHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGVHRC5oZWlnaHRIaW50ID03NTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldExheW91dERhdGEob3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlR0QpOwotCQlvcGVyYXRpb25zQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUsCi0JCQkJU1dULk5PTkUpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChvcGVyYXRpb25zQ29tcG9zaXRlKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCQotCQlvcGVyYXRpb25zQ29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShvcGVyYXRpb25zQ29tcG9zaXRlLmNvbXB1dGVTaXplKAotCQkJCTQwMCwgMTAwKSk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUob3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlKTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShvcGVyYXRpb25zQ29tcG9zaXRlKTsKLQl9Ci0KLQlwdWJsaWMgU2VydmljZVBvbGljaWVzQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsIElQcm9qZWN0IHByb2plY3QsCi0JCQlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCi0JCXN1cGVyKHBhcmVudCwgU1dULk5PTkUpOwotCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotCQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7Ci0JCWFsbEVycm9ycyA9IG5ldyBIYXNodGFibGU8U3RyaW5nLCBJU3RhdHVzPigpOwotCQloZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0JCUdyaWRMYXlvdXQgcGFyZW50TGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJcGFyZW50TGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlwYXJlbnRMYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAwOwotCQkKLQkJdGhpcy5zZXRMYXlvdXQocGFyZW50TGF5b3V0KTsKLQkJdGhpcy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJTGFiZWwgZGVzY3JpcHRpb24gPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOwotCQlkZXNjcmlwdGlvbi5zZXRUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFUE9MSUNJRVNfUEFHRV9ERVNDUklQVElPTik7Ci0JCUdyaWREYXRhIGRlc2NHRCA9IG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HLCBTV1QuVE9QLCBmYWxzZSwgZmFsc2UsIDIsMSAgKTsKLQkJZGVzY3JpcHRpb24uc2V0TGF5b3V0RGF0YShkZXNjR0QpOwotCQltYXN0ZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLQotCQlHcmlkTGF5b3V0IG1hc3RlckxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCW1hc3RlckxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJbWFzdGVyTGF5b3V0Lmhvcml6b250YWxTcGFjaW5nID0gMDsKLQkJbWFzdGVyQ29tcG9zaXRlLnNldExheW91dChtYXN0ZXJMYXlvdXQpOwotCQltYXN0ZXJDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9WRVJUSUNBTCkpOwotCi0JCWRldGFpbHNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBkZXRhaWxzTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZGV0YWlsc0xheW91dC5udW1Db2x1bW5zID0gMTsKLQkJZGV0YWlsc0xheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0JCWRldGFpbHNDb21wb3NpdGUuc2V0TGF5b3V0KGRldGFpbHNMYXlvdXQpOwotCQlkZXRhaWxzQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQltYXN0ZXJQb2xpY3lUcmVlID0gbmV3IFRyZWUobWFzdGVyQ29tcG9zaXRlLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJKTsKLQkJbWFzdGVyUG9saWN5VHJlZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKSk7Ci0JCW1hc3RlclBvbGljeVRyZWUuc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX1RSRUUpOwotCi0JCUNvbXBvc2l0ZSBvdGhlcnNDb21wb3NpdGUgPSBjcmVhdGVEZXRhaWxzU2Nyb2xsUGFnZUNvbnRlbnQoZGV0YWlsc0NvbXBvc2l0ZSk7Ci0JCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsIHRydWUsCi0JCQkJdHJ1ZSk7Ci0JCW90aGVyc0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLQotCQltYXN0ZXJQb2xpY3lUcmVlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljeUxpc3QgPSBwbGF0Zm9ybS5nZXRSb290U2VydmljZVBvbGljaWVzKG51bGwpOwotCQkKLQkJcG9saWN5TGlzdCA9IFNlcnZpY2VVdGlscy5zb3J0TGlzdCggcG9saWN5TGlzdCApOwotCQkKLQkJZm9yIChJU2VydmljZVBvbGljeSBwb2xpY3kgOiBwb2xpY3lMaXN0KSB7Ci0JCQlhZGRQb2xpY3kocG9saWN5LCBtYXN0ZXJQb2xpY3lUcmVlLCB0cnVlKTsKLQkJfQotCQlUcmVlSXRlbVtdIHRyZWVJdGVtcyA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJaWYgKHRyZWVJdGVtcy5sZW5ndGggPiAwKSB7Ci0JCQkvL3NlbGVjdCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgdHJlZSAmIGZpcmUgZXZlbnQgc28gVUkgaXMgdXBkYXRlZAotCQkJbWFzdGVyUG9saWN5VHJlZS5zZXRTZWxlY3Rpb24odHJlZUl0ZW1zWzBdKTsKLQkJCW1hc3RlclBvbGljeVRyZWUubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGltYWdlIG9uIHRpLCBpZiBhc3NvY2lhdGVkIHNlcnZpY2UgcG9saWN5IGRlZmluZXMgYW4gaWNvbgotCSAqIGl0IHdpbGwgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgZGVmYXVsdCBGb2xkZXIvTGVhZiBpY29ucyB3aWxsIGJlIHVzZWQKLQkgKiBAcGFyYW0gdGkgdGhlIFRyZWVJdGVtIHRvIHNldCB0aGUgaW1hZ2UgZm9yCi0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGkKLQkgKiBAcGFyYW0gaWNvbk92ZXJsYXlzIGRlc2NyaXB0aW9uIG9mIHdoaWNoIG92ZXJsYXlzIHNob3VsZCBiZSBhcHBsaWVkIAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRJbWFnZShUcmVlSXRlbSB0aSwgSVNlcnZpY2VQb2xpY3kgc3AsIFN0cmluZ1tdIGljb25PdmVybGF5cykgewotCQlJbWFnZSBpID0gKHNwLmdldENoaWxkcmVuKCkuc2l6ZSgpID09IDApID8gaWNvbk1hbmFnZXIuZ2V0SWNvbk92ZXJsYXkoCi0JCQkJaWNvbk1hbmFnZXIuZ2V0TGVhZkJhc2VVcmwoKSwgaWNvbk92ZXJsYXlzKSA6IGljb25NYW5hZ2VyCi0JCQkJLmdldEljb25PdmVybGF5KGljb25NYW5hZ2VyLmdldEZvbGRlckJhc2VVcmwoKSwgaWNvbk92ZXJsYXlzKTsKLQkJaWYgKHNwLmdldERlc2NyaXB0b3IoKSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgaWNvblBhdGhCdW5kbGVJRCA9IG51bGw7Ci0JCQlTdHJpbmcgaWNvblBhdGggPSBudWxsOwotCQkJaWNvblBhdGhCdW5kbGVJRCA9IHNwLmdldERlc2NyaXB0b3IoKS5nZXRJY29uQnVuZGxlSWQoKTsKLQkJCWljb25QYXRoID0gc3AuZ2V0RGVzY3JpcHRvcigpLmdldEljb25QYXRoKCk7Ci0JCQlpZiAoaWNvblBhdGhCdW5kbGVJRCAhPSBudWxsICYmIGljb25QYXRoICE9IG51bGwKLQkJCQkJJiYgaWNvblBhdGhCdW5kbGVJRC5sZW5ndGgoKSA+IDAgJiYgaWNvblBhdGgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJQnVuZGxlIGIgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoaWNvblBhdGhCdW5kbGVJRCk7Ci0JCQkJaSA9IGljb25NYW5hZ2VyLmdldEljb25PdmVybGF5KEZpbGVMb2NhdG9yLmZpbmQoYiwKLQkJCQkJCW5ldyBQYXRoKGljb25QYXRoKSwgbnVsbCkudG9TdHJpbmcoKSwgaWNvbk92ZXJsYXlzKTsKLQkJCX0KLQkJfQotCQl0aS5zZXRJbWFnZShpKTsKLQkJLy8gaW1hZ2UgaGFzIGNoYW5nZWQsIG5vdGlmeSBjaGFuZ2UgbGlzdGVuZXJzIHNvIHRyZWUgZ2V0cyB1cGRhdGVkCi0JCXRpLm5vdGlmeUxpc3RlbmVycyhTV1QuTW9kaWZ5LCBuZXcgRXZlbnQoKSk7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpczR0aExldmVsT3JIaWdoZXJQb2xpY3kgKElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCXJldHVybiBzcC5nZXRQYXJlbnRQb2xpY3koKSAhPSBudWxsCi0JCSYmIHNwLmdldFBhcmVudFBvbGljeSgpLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwgJiYgc3AuZ2V0UGFyZW50UG9saWN5KCkuZ2V0UGFyZW50UG9saWN5KCkuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbDsKLQkJCi0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpczNyZExldmVsUG9sSW5NYXN0ZXJUcmVlV2l0aENoaWxkcmVuIChMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3RJbk1hc3RlclRyZWUpIHsKLQkJcmV0dXJuIHNwTGlzdEluTWFzdGVyVHJlZS5nZXQoMCkuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbCAmJiBzcExpc3RJbk1hc3RlclRyZWUuZ2V0KDApLmdldFBhcmVudFBvbGljeSgpLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwKLQkJJiYgc3BMaXN0SW5NYXN0ZXJUcmVlLmdldCgwKS5nZXRDaGlsZHJlbigpLnNpemUoKSA+IDAgOwotCX0KLQkvKioKLQkgKiBBZGQgc2VydmljZSBwb2xpY3kgc3AgYW5kIGNoaWxkcmVuIG9mIHNwIHRvIHRoZSBwYXJlbnQKLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWN5IHRvIGFkZAotCSAqIEBwYXJhbSBwYXJlbnQgZWl0aGVyIGEgVHJlZSAobWFzdGVyUG9saWN5VHJlZSBvciBEZXRhaWxzUG9saWN5VHJlZSksIG9yIGEgVHJlZUl0ZW0KLQkgKiB0byBhZGQgc2VydmljZSBwb2xpY3kgY2hpbGRyZW4gdG8KLQkgKiBAcGFyYW0gYWRkVXBUb0xldmVsM09ubHkgZmFsc2UgaWYgc2hvdWxkIGFkZCA0dGggYW5kIGhpZ2hlciBsZXZlbAotCSAqIGNoaWxkIHBvbGljaWVzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZFBvbGljeShJU2VydmljZVBvbGljeSBzcCwgV2lkZ2V0IHBhcmVudCwKLQkJCWJvb2xlYW4gYWRkVXBUb0xldmVsM09ubHkpIHsKLQkJc3AuYWRkUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQkJYWRkU3RhdGVMaXN0ZW5lciggc3AgKTsKLQkJaWYgKGFkZFVwVG9MZXZlbDNPbmx5ICYmIGlzNHRoTGV2ZWxPckhpZ2hlclBvbGljeShzcCkgKQotCQkJLy8gZG9uJ3QgYWRkIDR0aCBsZXZlbCBhbmQgaGlnaGVyIGJyYW5jaGVzLCB0aGVzZSBhcmUgYWRkZWQgb24gZGVtYW5kCi0JCQkvLyB0byBhIGRpZmZlcmVudCB0cmVlCi0JCQlyZXR1cm47Ci0JCVRyZWVJdGVtIHRpOwotCQlpZiAocGFyZW50IGluc3RhbmNlb2YgVHJlZUl0ZW0pCi0JCQl0aSA9IG5ldyBUcmVlSXRlbSgoVHJlZUl0ZW0pIHBhcmVudCwgU1dULk5PTkUpOwotCQllbHNlCi0JCQl0aSA9IG5ldyBUcmVlSXRlbSgoVHJlZSkgcGFyZW50LCBTV1QuTk9ORSk7Ci0JCXRpLnNldFRleHQoc3AuZ2V0RGVzY3JpcHRvcigpLmdldExvbmdOYW1lKCkpOwotCQl0aS5zZXREYXRhKHNwKTsKLQotCQlzZXRJbWFnZSh0aSwgc3AsIGdldEljb25PdmVybGF5SW5mbyhzcCwgZmFsc2UpKTsKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRyZW5Qb2xpY3lMaXN0ID0gc3AuZ2V0Q2hpbGRyZW4oKTsKLQkJCi0JCWNoaWxkcmVuUG9saWN5TGlzdCA9IFNlcnZpY2VVdGlscy5zb3J0TGlzdCggY2hpbGRyZW5Qb2xpY3lMaXN0ICk7Ci0JCQotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IGNoaWxkcmVuUG9saWN5TGlzdCkgewotCQkJYWRkUG9saWN5KHBvbGljeSwgdGksIGFkZFVwVG9MZXZlbDNPbmx5KTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBpY29uIG92ZXJsYXkgaW5mb3JtYXRpb24KLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWN5IHRoYXQgc2hvdWxkIGhhdmUgc29tZSBvdmVybGF5IGltYWdlcyBhc3NvY2lhdGVkIHdpdGggaXQKLQkgKiBAcGFyYW0gaW52YWxpZCB0cnVlIGlmIHRoZSBzZXJ2aWNlIHBvbGljeSBpcyB2YWxpZAotCSAqIEByZXR1cm4gU3RyaW5nW10gY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IG92ZXJsYXlzIHRvIGFwcGx5IHRvIHRoZSBpY29uIHRoYXQKLQkgKiBpcyBhc3NvY2lhdGVkIHdpdGggc3AKLQkgKi8KLQlwcml2YXRlIFN0cmluZ1tdIGdldEljb25PdmVybGF5SW5mbyhJU2VydmljZVBvbGljeSBzcCwgYm9vbGVhbiBpbnZhbGlkKSB7Ci0JCVN0cmluZ1tdIG92ZXJMYXlzID0gbmV3IFN0cmluZ1s0XTsKLQkJCQkKLQkJSVBvbGljeVN0YXRlIHBvbFN0YXRlID0gKHByb2plY3QgPT0gbnVsbCkgPyBzcC5nZXRQb2xpY3lTdGF0ZSgpIDogc3AKLQkJCQkuZ2V0UG9saWN5U3RhdGUocHJvamVjdCk7Ci0JCUlQb2xpY3lTdGF0ZUVudW0gcG9sRW51bSA9IChwcm9qZWN0ID09IG51bGwpID8gc3AuZ2V0UG9saWN5U3RhdGVFbnVtKCkKLQkJCQk6IHNwLmdldFBvbGljeVN0YXRlRW51bShwcm9qZWN0KTsKLQkJaWYgKCFwb2xTdGF0ZS5pc011dGFibGUoKSkKLQkJCW92ZXJMYXlzWzBdID0gaWNvbk1hbmFnZXIubG9jazsKLQkJaWYgKChzcC5nZXRTdGF0dXMoKSAhPSBudWxsICYmIHNwLmdldFN0YXR1cygpLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgfHwgaW52YWxpZCkKLQkJCW92ZXJMYXlzWzFdID0gaWNvbk1hbmFnZXIuaW52YWxpZDsKLQkJaWYgKChzcC5nZXRTdGF0dXMoKSAhPSBudWxsICYmIHNwLmdldFN0YXR1cygpLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSkKLQkJCW92ZXJMYXlzWzJdID0gaWNvbk1hbmFnZXIud2FybmluZzsKLQkJaWYgKHBvbEVudW0gIT0gbnVsbCkgewotCQkJaWYgKHBvbEVudW0uZ2V0RW51bUlkKCkuZXF1YWxzKAotCQkJCQkib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChwb2xpY3lIYXNJY29uU2VsZWN0aW9uT3BlcmF0aW9uU2VsZWN0ZWQoc3ApKQotCQkJCQlvdmVyTGF5c1szXSA9IGljb25NYW5hZ2VyLmZhdm9yaXRlOwotCQkJfQotCQkJCQotCQl9Ci0JCXJldHVybiBvdmVyTGF5czsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3AKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gcG9saWN5SGFzSWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkKElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCWJvb2xlYW4gaWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkID0gZmFsc2U7Ci0JCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9uTGlzdCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyhzcCwgcHJvamVjdCA9PSBudWxsKTsKLQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbkl0ZW0gOiBvcGVyYXRpb25MaXN0KSB7Ci0JCQlpZiAob3BlcmF0aW9uSXRlbS5nZXRPcGVyYXRpb25LaW5kKCkuZXF1YWxzKE9wZXJhdGlvbktpbmQuaWNvblNlbGVjdGlvbikpIHsKLQkJCQlTdHJpbmcgc3RhdGVJRCA9IG9wZXJhdGlvbkl0ZW0uZ2V0U3RhdGVJdGVtKHByb2plY3QpOwotCQkJCWlmIChzdGF0ZUlELmVxdWFscygib3JnLmVjbGlwc2Uud3N0LnRydWUiKSkgIC8vJE5PTi1OTFMtMSQKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQkKLQkJfQotCQlyZXR1cm4gaWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkOwotCX0KLQotCS8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICovCi0JcHVibGljIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkgewotCQlpbml0aWFsaXplRGVmYXVsdHMoKTsKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gcG9saWN5TGlzdCA9IHBsYXRmb3JtLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMobnVsbCk7Ci0JCQotCQlwb2xpY3lMaXN0ID0gU2VydmljZVV0aWxzLnNvcnRMaXN0KCBwb2xpY3lMaXN0ICk7Ci0JCW1hc3RlclBvbGljeVRyZWUucmVtb3ZlQWxsKCk7Ci0JCQotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IHBvbGljeUxpc3QpIHsKLQkJCWFkZFBvbGljeShwb2xpY3ksIG1hc3RlclBvbGljeVRyZWUsIHRydWUpOwotCQl9Ci0JCVRyZWVJdGVtW10gdHJlZUl0ZW1zID0gbWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQlpZiAodHJlZUl0ZW1zLmxlbmd0aCA+IDApIHsKLQkJCS8vc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSB0cmVlICYgZmlyZSBldmVudCBzbyBVSSBpcyB1cGRhdGVkCi0JCQltYXN0ZXJQb2xpY3lUcmVlLnNldFNlbGVjdGlvbih0cmVlSXRlbXNbMF0pOwotCQkJbWFzdGVyUG9saWN5VHJlZS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotCQkJZXJyb3IgPSB2YWxpZGF0ZUFsbFBvbGljaWVzKChJU2VydmljZVBvbGljeSl0cmVlSXRlbXNbMF0uZ2V0RGF0YSgpKTsKLQkJfQotCi0JfQotCXByaXZhdGUgY2xhc3MgQ2hpbGRDaGFuZ2VFdmVudCB7Ci0JCXB1YmxpYyBDaGlsZENoYW5nZUV2ZW50KExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoYW5nZWRDaGlsZHJlbiwgTGlzdDxCb29sZWFuPiBhZGRlZCApIHsKLQkJCXRoaXMuY2hhbmdlZENoaWxkcmVuID0gY2hhbmdlZENoaWxkcmVuOwotCQkJdGhpcy5hZGRlZCA9IGFkZGVkOwotCQkJCi0JCX0KLQkJcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGFuZ2VkQ2hpbGRyZW47Ci0JCXByaXZhdGUgTGlzdDxCb29sZWFuPiBhZGRlZDsKLQkJcHVibGljIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGdldENoYW5nZWRDaGlsZHJlbigpIHsKLQkJCXJldHVybiBjaGFuZ2VkQ2hpbGRyZW47Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0Q2hhbmdlZENoaWxkcmVuKExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoYW5nZWRDaGlsZHJlbikgewotCQkJdGhpcy5jaGFuZ2VkQ2hpbGRyZW4gPSBjaGFuZ2VkQ2hpbGRyZW47Ci0JCX0KLQkJcHVibGljIExpc3Q8Qm9vbGVhbj4gZ2V0QWRkZWQoKSB7Ci0JCQlyZXR1cm4gYWRkZWQ7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0QWRkZWQoTGlzdDxCb29sZWFuPiBhZGRlZCkgewotCQkJdGhpcy5hZGRlZCA9IGFkZGVkOwotCQl9Ci0JfQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIjY2hpbGRDaGFuZ2UoTGlzdDxvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k+LCBMaXN0PGphdmEubGFuZy5Cb29sZWFuPikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjaGlsZENoYW5nZSggTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGQsIExpc3Q8Qm9vbGVhbj4gYWRkZWQgKSB7Ci0JCS8vaWdub3JlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIGEgY29tcGxleCBvcGVyYXRpb24KLQkJaWYgKCFiQ29tcGxleE9wQ29tcGxldGVkKQotCQkJLy9jYWNoZSB0aGUgZXZlbnQgdW50aWwgY29tcGxleCBvcGVyYXRpb24gY29tcGxldGVkCi0JCQlsaXN0Q2hpbGRDaGFuZ2VFdmVudHMuYWRkKG5ldyBDaGlsZENoYW5nZUV2ZW50KGNoaWxkLCBhZGRlZCkpOwotCQkJCi0JfQotCQotCQotCS8qKgotCSAqIEBwYXJhbSBjaGlsZAotCSAqIEBwYXJhbSBhZGRlZAotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudChDaGlsZENoYW5nZUV2ZW50IGNjZSwKLQkJCUhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PiBodFRvcExldmVsQWRkdGlvbnMpIHsKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gY2hhbmdlZFNlcnZpY2VQb2xpY3lMaXN0ID0gY2NlLmdldENoYW5nZWRDaGlsZHJlbigpOwotCQlMaXN0PEJvb2xlYW4+IGNoYW5nZWRTZXJ2aWNlUG9saWN5QWRkZWRMaXN0ID0gY2NlLmdldEFkZGVkKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhbmdlZFNlcnZpY2VQb2xpY3lMaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQlJU2VydmljZVBvbGljeSBuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kgPSBjaGFuZ2VkU2VydmljZVBvbGljeUxpc3QuZ2V0KGkpOwotCQkJYm9vbGVhbiBhZGRlZCA9IGNoYW5nZWRTZXJ2aWNlUG9saWN5QWRkZWRMaXN0LmdldChpKTsKLQkJCWlmICghYWRkZWQpIHsKLQkJCQkvL2RlbGV0ZSBub2RlCi0JCQkJcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnRSZW1vdmVTZXJ2aWNlUG9saWN5KG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSk7Ci0JCQl9IGVsc2UgewotCQkJCS8vYW4gYWRkaXRpb24sIG9ubHkgcHJvY2VzcyB0b3AgbGV2ZWwgYWRkaXRpb25zIGFzIHRoaXMgaXMgYSByZWN1cnNpdmUgb3BlcmF0aW9uIChhZGRzIGNoaWxkcmVuIHRvbykKLQkJCQlpZiAoaHRUb3BMZXZlbEFkZHRpb25zLmNvbnRhaW5zS2V5KG5leHRDaGFuZ2VkU2VydmljZVBvbGljeS5nZXRJZCgpKSkgewotCQkJCQlwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudEFkZFNlcnZpY2VQb2xpY3kobmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkKLQkvKioKLQkgKiBAcGFyYW0gbmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NDaGlsZENoYW5nZUV2ZW50UmVtb3ZlU2VydmljZVBvbGljeShJU2VydmljZVBvbGljeSBuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kpIHsKLQkJYm9vbGVhbiBpczR0aExldmVsT3JIaWdoZXIgPSBpczR0aExldmVsT3JIaWdoZXJQb2xpY3kobmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5KTsKLQkJCi0JCXJlbW92ZVN0YXRlTGlzdGVuZXIoIG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSApOwotCQkKLQkJaWYgKGlzNHRoTGV2ZWxPckhpZ2hlcikgewotCQkJaWYgKGRldGFpbHNQb2xpY3lUcmVlLmlzVmlzaWJsZSgpKSB7Ci0JCQkJVHJlZUl0ZW1bXSBjaGlsZHJlbiA9IGRldGFpbHNQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCQkJVHJlZUl0ZW0gZm91bmQgPSBudWxsOwotCQkJCWZvciAoaW50IGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCSBmb3VuZCA9IGZpbmRQb2xpY3kobmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5LCBjaGlsZHJlbltpXSk7CQotCQkJCQkgaWYgKGZvdW5kICE9IG51bGwpCi0JCQkJCQkgYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChmb3VuZCAhPSBudWxsICYmICFmb3VuZC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQkJcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnREZWxldGVUcmVlSXRlbShmb3VuZCk7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJVHJlZUl0ZW1bXSBjaGlsZHJlbiA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJCVRyZWVJdGVtIGZvdW5kID0gbnVsbDsKLQkJCWZvciAoaW50IGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJIGZvdW5kID0gZmluZFBvbGljeShuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3ksIGNoaWxkcmVuW2ldKTsJCi0JCQkJIGlmIChmb3VuZCAhPSBudWxsKQotCQkJCQkgYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoZm91bmQgIT0gbnVsbCAmJiAhZm91bmQuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnREZWxldGVUcmVlSXRlbShmb3VuZCk7Ci0JCQkJCi0JCQl9Ci0KLQkJCQotCQkJCi0JCX0KLQkJCi0JfQotCi0JLyoqCi0JICogRGVsZXRlIHRoZSBpdGVtLCBhbmQgY2hvb3NlIHNldCBhIG5ldyBzZWxlY3Rpb24gYXMgYXBwcm9wcmlhdGUgZnJvbSBvbmUgb2YgdGhlIHBvbGljeSB0cmVlcyAKLQkgKiBAcGFyYW0gZGVsZXRlSXRlbQotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudERlbGV0ZVRyZWVJdGVtKFRyZWVJdGVtIGRlbGV0ZUl0ZW0pIHsKLQkJVHJlZSBwYXJlbnRUcmVlID0gZGVsZXRlSXRlbS5nZXRQYXJlbnQoKTsKLQkJVHJlZSBzZWxlY3Rpb25UcmVlID0gcGFyZW50VHJlZTsKLQkJVHJlZUl0ZW0gcGFyZW50VHJlZUl0ZW0gPSBkZWxldGVJdGVtLmdldFBhcmVudEl0ZW0oKTsKLQkJLy9pbmRleCBvZiBmb3VuZCBpbiB0aGUgdHJlZQotCQlpbnQgaWR4ID0gKHBhcmVudFRyZWVJdGVtID09IG51bGwpID8gcGFyZW50VHJlZS5pbmRleE9mKGRlbGV0ZUl0ZW0pIDogcGFyZW50VHJlZUl0ZW0uaW5kZXhPZihkZWxldGVJdGVtKTsKLQkJLy9pcyBpbmRleCB0aGUgbGFzdCBpbmRleCBpbiB0aGUgdHJlZQotCQlib29sZWFuIGlzTGFzdEluZGV4ID0gKHBhcmVudFRyZWVJdGVtID09IG51bGwpID8gcGFyZW50VHJlZS5pbmRleE9mKGRlbGV0ZUl0ZW0pID09IHBhcmVudFRyZWUuZ2V0SXRlbUNvdW50KCkgLTEgOiBwYXJlbnRUcmVlSXRlbS5pbmRleE9mKGRlbGV0ZUl0ZW0pID09IHBhcmVudFRyZWVJdGVtLmdldEl0ZW1Db3VudCgpIC0xOwotCQkvL251bWJlciBvZiBzaWJsaW5ncwotCQlpbnQgc2libGluZ3NDb3VudCA9IChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSA/IHBhcmVudFRyZWUuZ2V0SXRlbUNvdW50KCkgLTEgOiBwYXJlbnRUcmVlSXRlbS5nZXRJdGVtQ291bnQoKSAtMTsKLQkJYm9vbGVhbiBoYXNQYXJlbnQgPSAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgPyBwYXJlbnRUcmVlLmdldEl0ZW1Db3VudCgpID09IDAgOiBwYXJlbnRUcmVlSXRlbS5nZXRJdGVtQ291bnQoKSA9PSAwOwotCQlkZWxldGVJdGVtLmRpc3Bvc2UoKTsKLQkJcGFyZW50VHJlZS5yZWRyYXcoKTsKLQkJVHJlZUl0ZW0gc2VsZWN0SXRlbSA9IG51bGw7Ci0JCWlmIChzaWJsaW5nc0NvdW50ID09IDApIHsKLQkJCWlmIChoYXNQYXJlbnQpIHsKLQkJCS8vbm8gc2libGluZ3MsIHNlbGVjdCBwYXJlbnQKLQkJCWlmICAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgCi0JCQkJc2VsZWN0SXRlbSA9IHBhcmVudFRyZWUuZ2V0SXRlbSgwKTsKLQkJCWVsc2UgCi0JCQkJc2VsZWN0SXRlbSA9IHBhcmVudFRyZWVJdGVtOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocGFyZW50VHJlZSA9PSBkZXRhaWxzUG9saWN5VHJlZSkKLQkJCQkJLy9zZWxlY3Qgc29tZXRoaW5nIGZyb20gbWFzdGVyIHRyZWUKLQkJCQkJaWYgKG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKS5sZW5ndGggPiAwKSB7Ci0JCQkJCQlzZWxlY3RJdGVtID0gbWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtKDApOwotCQkJCQkJc2VsZWN0aW9uVHJlZSA9IG1hc3RlclBvbGljeVRyZWU7Ci0JCQkJCX0KLQkJCQkKLQkJCX0KLQkJCQotCQl9IGVsc2UgewotCQkJaWYgIChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSB7Ci0JCQkJaWYgKGlzTGFzdEluZGV4KQotCQkJCQlzZWxlY3RJdGVtID0gcGFyZW50VHJlZS5nZXRJdGVtKGlkeCAtMSk7Ci0JCQkJZWxzZSAKLQkJCQkJc2VsZWN0SXRlbSA9IHBhcmVudFRyZWUuZ2V0SXRlbShpZHgpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaXNMYXN0SW5kZXgpCi0JCQkJCXNlbGVjdEl0ZW0gPSBwYXJlbnRUcmVlSXRlbS5nZXRJdGVtKGlkeCAtMSk7Ci0JCQkJZWxzZSAKLQkJCQkJc2VsZWN0SXRlbSA9IHBhcmVudFRyZWVJdGVtLmdldEl0ZW0oaWR4KTsKLQotCQkJfQotCQl9Ci0JCWlmIChzZWxlY3RJdGVtICE9IG51bGwpIHsKLQkJCXNlbGVjdGlvblRyZWUuc2V0U2VsZWN0aW9uKHNlbGVjdEl0ZW0pOwotCQkJc2VsZWN0aW9uVHJlZS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHBvbGljeVRvQWRkCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NDaGlsZENoYW5nZUV2ZW50QWRkU2VydmljZVBvbGljeShJU2VydmljZVBvbGljeSBwb2xpY3lUb0FkZCkgewotCQlib29sZWFuIGlzNHRoTGV2ZWxPckhpZ2hlciA9IGlzNHRoTGV2ZWxPckhpZ2hlclBvbGljeShwb2xpY3lUb0FkZCk7Ci0JCUlTZXJ2aWNlUG9saWN5IHBhcmVudCA9IHBvbGljeVRvQWRkLmdldFBhcmVudFBvbGljeSgpOwotCQlpZiAoaXM0dGhMZXZlbE9ySGlnaGVyKSB7Ci0JCQlpZiAoZGV0YWlsc1BvbGljeVRyZWUuaXNWaXNpYmxlKCkpIHsKLQkJCQlUcmVlSXRlbVtdIGNoaWxkcmVuID0gZGV0YWlsc1BvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJCQlUcmVlSXRlbSBmb3VuZCA9IG51bGw7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQkJIGZvdW5kID0gZmluZFBvbGljeShwYXJlbnQsIGNoaWxkcmVuW2ldKTsJCi0JCQkJCSBpZiAoZm91bmQgIT0gbnVsbCkKLQkJCQkJCSBicmVhazsKLQkJCQl9Ci0JCQkJaWYgKGZvdW5kICE9IG51bGwgJiYgIWZvdW5kLmlzRGlzcG9zZWQoKSkgewotCQkJCQlhZGRQb2xpY3kocG9saWN5VG9BZGQsIGZvdW5kLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJCS8vbGVzcyB0aGFuIDR0aCBsZXZlbCBwb2xpY3kKLQkJCQlUcmVlSXRlbVtdIGNoaWxkcmVuID0gbWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQkJCVRyZWVJdGVtIGZvdW5kID0gbnVsbDsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCQkgZm91bmQgPSBmaW5kUG9saWN5KHBhcmVudCwgY2hpbGRyZW5baV0pOwkKLQkJCQkJIGlmIChmb3VuZCAhPSBudWxsKQotCQkJCQkJIGJyZWFrOwotCQkJCX0KLQkJCQlpZiAoZm91bmQgIT0gbnVsbCAmJiAhZm91bmQuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJCWFkZFBvbGljeShwb2xpY3lUb0FkZCwgZm91bmQsIGZhbHNlKTsKLQkJCQkJCi0JCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogRmluZCB0aGUgcG9saWN5IHdpdGhpbiB0aGUgdHJlZSB0aQotCSAqIEBwYXJhbSBwb2xpY3lUb0ZpbmQKLQkgKi8KLQlwcml2YXRlIFRyZWVJdGVtIGZpbmRQb2xpY3koSVNlcnZpY2VQb2xpY3kgcG9saWN5VG9GaW5kLCBUcmVlSXRlbSB0aSkgewotCQlUcmVlSXRlbSB0b1JldHVybiA9IG51bGw7Ci0JCWlmICh0aSA9PSBudWxsIHx8ICEodGkuZ2V0RGF0YSgpIGluc3RhbmNlb2YgSVNlcnZpY2VQb2xpY3kpKQotCQkJcmV0dXJuIHRvUmV0dXJuOwotCQlJU2VydmljZVBvbGljeSBzcCA9IChJU2VydmljZVBvbGljeSl0aS5nZXREYXRhKCk7Ci0JCWlmIChzcC5nZXRJZCgpLmVxdWFscyhwb2xpY3lUb0ZpbmQuZ2V0SWQoKSkpCi0JCQlyZXR1cm4gdGk7Ci0JCWVsc2UgewotCQkJVHJlZUl0ZW1bXSB0aUNoaWxkcmVuID0gdGkuZ2V0SXRlbXMoKTsKLQkJCWZvciAoaW50IGkgPTA7IGkgPCB0aUNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdG9SZXR1cm4gPSBmaW5kUG9saWN5KHBvbGljeVRvRmluZCwgdGlDaGlsZHJlbltpXSk7Ci0JCQkJaWYgKHRvUmV0dXJuICE9IG51bGwpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiB0b1JldHVybjsKLQl9Ci0JLyoqCi0JICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcyBpbiB0aGUgcHJlZmVyZW5jZQotCSAqIHN0b3JlLgotCSAqLwotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKSB7Ci0JCWlmIChwcm9qZWN0ID09IG51bGwpCi0JCQlwbGF0Zm9ybS5yZXN0b3JlRGVmYXVsdHMoKTsKLQkJZWxzZQotCQkJcGxhdGZvcm0ucmVzdG9yZURlZmF1bHRzKHByb2plY3QpOwotCi0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJaWYgKGUuZ2V0U291cmNlKCkgPT0gbWFzdGVyUG9saWN5VHJlZSB8fCBlLmdldFNvdXJjZSgpID09IGRldGFpbHNQb2xpY3lUcmVlKSB7Ci0JCQlUcmVlSXRlbVtdIHNlbGVjdGVkSXRlbXM7Ci0JCQlpZiAoZS5nZXRTb3VyY2UoKSA9PSBtYXN0ZXJQb2xpY3lUcmVlKQotCQkJCXNlbGVjdGVkSXRlbXMgPSBtYXN0ZXJQb2xpY3lUcmVlLmdldFNlbGVjdGlvbigpOwotCQkJZWxzZQotCQkJCXNlbGVjdGVkSXRlbXMgPSBkZXRhaWxzUG9saWN5VHJlZS5nZXRTZWxlY3Rpb24oKTsKLQkJCS8vcG9zc2libGUgdGhhdCBhbiBldmVudCBpcyBmaXJlZCBhbmQgbm8gbm9kZXMgc2VsZWN0ZWQKLQkJCWlmICghKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkpCi0JCQkJcmV0dXJuOwotCQkJTGlzdDxJU2VydmljZVBvbGljeT4gc3AgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3RlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJc3AuYWRkKChJU2VydmljZVBvbGljeSkgc2VsZWN0ZWRJdGVtc1tpXS5nZXREYXRhKCkpOwotCQkJfQotCQkJLy91cGRhdGUgdGhlIGNvbnRleHQgc2Vuc2l0aXZlIGhlbHAKLQkJCXVwZGF0ZUNTSChzcCk7Ci0JCQl1cGRhdGVJbmZvUGFuZWxzKHNwKTsKLQotCQkJaWYgKGUuZ2V0U291cmNlKCkgPT0gbWFzdGVyUG9saWN5VHJlZSkgewotCQkJCS8vIGlmIHNlbGVjdGVkIG5vZGUgaW4gbWFzdGVyIHRyZWUgaXMgM3JkIGxldmVsICYgaGFzCi0JCQkJLy8gY2hpbGRyZW4sIHBvcHVsYXRlIGRldGFpbHMgdHJlZQotCQkJCWlmIChpczNyZExldmVsUG9sSW5NYXN0ZXJUcmVlV2l0aENoaWxkcmVuKHNwKSkgewotCQkJCQlwb3B1bGF0ZURldGFpbHNQb2xpY3lUcmVlKHNwKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvL2lmIGV4cGFuZGFibGUgY29tcG9zaXRlIHdhcyB2aXNpYmxlLCBjb2xsYXBzZSBhbmQgc2V0IGludmlzaWJsZQotCQkJCQlpZiAoZXhjb21wb3NpdGUuZ2V0VmlzaWJsZSgpKSB7Ci0JCQkJCQlleGNvbXBvc2l0ZS5zZXRWaXNpYmxlKGZhbHNlKTsKLQkJCQkJCWV4Y29tcG9zaXRlLnNldEV4cGFuZGVkKGZhbHNlKTsKLQkJCQkJCWV4cGFuZGVkU3RhdGVDaGFuZ2VkKGV4Y29tcG9zaXRlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWFkZEFjdGlvbkJ1dHRvbnMoc3ApOwotCQkJbGFzdFNlbGVjdGVkU3AgPSBzcDsKLQotCQl9IGVsc2UgewotCQkJLy8gYW4gYWN0aW9uIGNvbnRyb2wgZmlyZWQgYSBjaGFuZ2UgZXZlbnQKLQkJCUNvbnRyb2wgYWN0aW9uQ29udHJvbCA9IChDb250cm9sKSBlLmdldFNvdXJjZSgpOwotCQkJT2JqZWN0ICBvbGREYXRhICAgICAgID0gYWN0aW9uQ29udHJvbC5nZXREYXRhKCk7Ci0JCQkKLQkJCXVwZGF0ZVBvbGljeShhY3Rpb25Db250cm9sKTsKLQkJCQotCQkJaWYoIGxhc3RTZWxlY3RlZFNwICE9IG51bGwgKQotCQkJewotCQkJICBhZGRBY3Rpb25CdXR0b25zKGxhc3RTZWxlY3RlZFNwKTsgIAotCQkJfQotCQkJCi0JCQkvL3BvbGljeSB1cGRhdGVzIG1pZ2h0IGRlbGV0ZSBub2RlcyBpbiB0aGUgdHJlZSwgc28gbWFrZSBzdXJlIGFjdGlvbiBjb250cm9sIG5vdCBkaXNwb3NlZAotCQkJSVNlcnZpY2VQb2xpY3kgY2hhbmdlZFNQID0gbnVsbDsKLQkJCWlmICghYWN0aW9uQ29udHJvbC5pc0Rpc3Bvc2VkKCkpCi0JCQkJY2hhbmdlZFNQID0gKChBY3Rpb25Db250cm9sRGF0YSkgYWN0aW9uQ29udHJvbC5nZXREYXRhKCkpCi0JCQkJCS5nZXRTcExpc3QoKS5nZXQoMCk7Ci0JCQllcnJvciA9IHZhbGlkYXRlQWxsUG9saWNpZXMoY2hhbmdlZFNQKTsKLQkJCS8vaW5mb3JtIGxpc3RlbmVycyB0aGF0IGEgY29udHJvbCBoYXMgY2hhbmdlZCwgYXMgY29tcG9zaXRlIG1heSBiZSBpbiBlcnJvciBub3cKLQkJCWxpc3RlbmVyLndpZGdldFNlbGVjdGVkKGUpOwotCQkJCi0JCQlzZXRGb2N1c0Zvckxhc3RDb250cm9sKCBvbGREYXRhICk7Ci0JCX0KLQl9Ci0KLQkvLyBUaGUgVUkgaXMgY29udGludWFsbHkgcmVjcmVhdGluZyB0aGUgYWN0aW9uIGJ1dHRvbnMsIHNvIHRoZSBmb2N1cyBpcwotCS8vIGlzIGxvc3Qgd2hlbiBhbiBhY3Rpb24gYnV0dG9uIGlzIHNlbGVjdGVkLiAgVGhpcyBtZXRob2QgYXR0ZW1wdHMKLQkvLyB0byBmaW5kIHRoZSBuZXdseSBjcmVhdGVkIGNvbnRyb2wgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggb3BlcmF0aW9uCi0JLy8gdGhhdCB3YXMgcHJldmlvdXNseSBzZWxlY3RlZC4gIFRoZSBmb2N1cyBpcyB0aGVuIHJlZXN0YWJsaXNoZWQgZm9yIHRoaXMgCi0JLy8gY29udHJvbC4KLQlwcml2YXRlIHZvaWQgc2V0Rm9jdXNGb3JMYXN0Q29udHJvbCggT2JqZWN0IG9sZERhdGEgKQotCXsKLQkgIGlmKCBvbGREYXRhICE9IG51bGwgJiYgb2xkRGF0YSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyb2xEYXRhICkKLQkgIHsKLQkgICAgQWN0aW9uQ29udHJvbERhdGEgY29udHJvbERhdGEgICAgICAgPSAoQWN0aW9uQ29udHJvbERhdGEpb2xkRGF0YTsKLQkgICAgSVBvbGljeU9wZXJhdGlvbiAgb3BlcmF0aW9uICAgICAgICAgPSBjb250cm9sRGF0YS5nZXRQb0xpc3QoKS5nZXQoMCk7Ci0JICAgIENvbnRyb2xbXSAgICAgICAgIGNvbXBvc2l0ZUNvbnRyb2xzID0gb3BlcmF0aW9uc0NvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOwotIAotCSAgICBmb3IoIENvbnRyb2wgbmV3Q29udHJvbCA6IGNvbXBvc2l0ZUNvbnRyb2xzICkKLQkgICAgewotCSAgICAgIE9iamVjdCBuZXdEYXRhID0gbmV3Q29udHJvbC5nZXREYXRhKCk7Ci0JICAgICAgCi0JICAgICAgaWYoIG5ld0RhdGEgIT0gbnVsbCAmJiBuZXdEYXRhIGluc3RhbmNlb2YgQWN0aW9uQ29udHJvbERhdGEgKQotCSAgICAgIHsKLQkgICAgICAgIElQb2xpY3lPcGVyYXRpb24gbmV3T3BlcmF0aW9uID0gKChBY3Rpb25Db250cm9sRGF0YSluZXdEYXRhKS5wb0xpc3QuZ2V0KDApOwotCSAgICAgICAgCi0JICAgICAgICBpZiggbmV3T3BlcmF0aW9uID09IG9wZXJhdGlvbiApCi0JICAgICAgICB7Ci0JICAgICAgICAgIG5ld0NvbnRyb2wuc2V0Rm9jdXMoKTsKLQkgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JfQotCQotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBkZXRhaWxzIHBvbGljeSB0cmVlIHdpdGggc3AgYW5kIHRoZWlyIGNoaWxkcmVuCi0JICogQHBhcmFtIHNwIGEgbGlzdCBvZiB0b3AgbGV2ZWwgZGV0YWlscyB0cmVlIHNlcnZpY2UgcG9saWNpZXMKLQkgKi8KLQlwcml2YXRlIHZvaWQgcG9wdWxhdGVEZXRhaWxzUG9saWN5VHJlZShMaXN0PElTZXJ2aWNlUG9saWN5PiBzcCkgewotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZHBvbGljeUxpc3QgPSBzcC5nZXQoMCkKLQkJCQkuZ2V0Q2hpbGRyZW4oKTsKLQkJZGV0YWlsc1BvbGljeVRyZWUucmVtb3ZlQWxsKCk7Ci0JCWZvciAoSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogY2hpbGRwb2xpY3lMaXN0KSB7Ci0JCQlhZGRQb2xpY3kocG9saWN5LCBkZXRhaWxzUG9saWN5VHJlZSwgZmFsc2UpOwotCQl9Ci0JCS8vIHVwZGF0ZSBkZXRhaWxzIHByZWZlcmVuY2UgdHJlZQotCQlUcmVlSXRlbVtdIHRyZWVJdGVtcyA9IGRldGFpbHNQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdHJlZUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQl1cGRhdGVWYWxpZFN0YXRlcyh0cmVlSXRlbXNbaV0sIHRydWUpOwotCQl9Ci0KLQkJZXhjb21wb3NpdGUuc2V0VmlzaWJsZSh0cnVlKTsKLQkJZXhjb21wb3NpdGUuc2V0VGV4dChzcC5nZXQoMCkuZ2V0RGVzY3JpcHRvcigpLmdldExvbmdOYW1lKCkKLQkJCQkrICIgKCIgKyBXc3RTUFVJUGx1Z2luTWVzc2FnZXMuVEVYVF9ERVRBSUxTICsgIikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCS8vIHRleHQgaGFzIGNoYW5nZWQsIHNvIG5lZWQgdG8gZm9yY2UgbGF5b3V0IHNvIHVwZGF0ZWQKLQkJZXhjb21wb3NpdGUubGF5b3V0KCk7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyB0aGUgZGV0YWlscyBhbmQgZGVwZW5kZW5jaWVzIHBhbmVscyBmb3IgdGhlIGZpcnN0IHNlcnZpY2UKLQkgKiBwb2xpY3kgaW4gc3BMaXN0Ci0JICogQHBhcmFtIHNwTGlzdCBhIGxpc3Qgb2Ygc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcwotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVJbmZvUGFuZWxzKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdCkgewotCQlTdHJpbmcgZGVzYyA9IChzcExpc3QuZ2V0KDApID09IG51bGwKLQkJCQl8fCBzcExpc3QuZ2V0KDApLmdldERlc2NyaXB0b3IoKSA9PSBudWxsIHx8IHNwTGlzdC5nZXQoMCkKLQkJCQkuZ2V0RGVzY3JpcHRvcigpLmdldERlc2NyaXB0aW9uKCkgPT0gbnVsbCkgPyAiIiA6IHNwTGlzdC5nZXQoMCkgLy8kTk9OLU5MUy0xJAotCQkJCS5nZXREZXNjcmlwdG9yKCkuZ2V0RGVzY3JpcHRpb24oKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24uc2V0VGV4dChkZXNjKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzLnNldFRleHQoZ2V0RGVwZW5kYW5jaWVzVGV4dChzcExpc3QKLQkJCQkuZ2V0KDApKSk7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyB0aGUgY29udGV4dCBzZW5zaXRpdmUgaGVscCBmb3IgdGhlIGNvbXBvc2l0ZSB3aXRoIAotCSAqIHRoYXQgZGVmaW5lZCBmb3IgdGhlIGZpcnN0IHBvbGljeSBpbiBzcExpc3QgKG9yIGEgcGFyZW50IG9mIAotCSAqIGZpcnN0IHBvbGljeSBpbiBzcExpc3QgcG9saWN5IGRvZXMgbm90IGRlZmluZSBhbnkgQ1NIKQotCSAqIEBwYXJhbSBzcExpc3QgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcwotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVDU0goTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0KSB7Ci0JCVN0cmluZyBDU0hfSUQgPSAoc3BMaXN0LmdldCgwKSA9PSBudWxsIHx8IHNwTGlzdC5nZXQoMCkuZ2V0RGVzY3JpcHRvcigpID09IG51bGwpID8gbnVsbAotCQkJCTogc3BMaXN0LmdldCgwKS5nZXREZXNjcmlwdG9yKCkuZ2V0Q29udGV4dEhlbHBJZCgpOwotCQlJU2VydmljZVBvbGljeSBwYXJlbnRTUCA9IHNwTGlzdC5nZXQoMCk7Ci0JCXdoaWxlICgoQ1NIX0lEID09IG51bGwgfHwgQ1NIX0lELmxlbmd0aCgpID09IDApKSB7Ci0JCQlwYXJlbnRTUCA9IHBhcmVudFNQLmdldFBhcmVudFBvbGljeSgpOwotCQkJaWYgKHBhcmVudFNQID09IG51bGwpCi0JCQkJYnJlYWs7Ci0JCQlDU0hfSUQgPSAocGFyZW50U1AuZ2V0RGVzY3JpcHRvcigpID09IG51bGwpID8gbnVsbCA6IHBhcmVudFNQCi0JCQkJCS5nZXREZXNjcmlwdG9yKCkuZ2V0Q29udGV4dEhlbHBJZCgpOwotCQl9Ci0JCWlmIChDU0hfSUQgPT0gbnVsbCkKLQkJCUNTSF9JRCA9IElORk9QT1BfU1BQUF9QQUdFOwotCQloZWxwU3lzdGVtLnNldEhlbHAodGhpcywgQ1NIX0lEKTsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgYWxsIFNlcnZpY2UgUG9saWNpZXMgaW4gdGhlIG1vZGVsCi0JICogCi0JICogQHBhcmFtIElTZXJ2aWNlUG9saWN5Ci0JICogICAgICAgICAgICB0aGUgZm9jdXMgcG9saWN5LCBpLmUuIG9uZSB0aGF0IGNoYW5nZWQgc3RhdGUKLQkgKiBAcmV0dXJuIElTdGF0dXMgbnVsbCBpZiBubyBTZXJ2aWNlIHBvbGljaWVzIGluIGVycm9yLCBvdGhlcndpc2UgYSBTZXJ2aWNlCi0JICogICAgICAgICBQb2xpY3kgZXJyb3IgKHRoZSBmb2N1Y1BvbGljeSBlcnJvciBpZiBpdCBpcyBpbiBlcnJvcikuCi0JICogICAgICAgICBQb3N0Y29uZGl0aW9uLSB0aGUgZXJyb3IgcHJvcGVydHkgaXMgdXBkYXRlZC4KLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgdmFsaWRhdGVBbGxQb2xpY2llcyhJU2VydmljZVBvbGljeSBmb2N1c1BvbGljeSkgewotCQkvLyByZW1vdmUgYWxsIGVycm9ycyBhcyBnb2luZyB0byByZS12YWxpZGF0ZQotCQlhbGxFcnJvcnMuY2xlYXIoKTsKLQkJLy8gcmUtdmFsaWRhdGUgYWxsIHBvbGljaWVzIGluIG1vZGVsCi0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlcnZpY2VQb2xpY3lMaXN0ID0gcGxhdGZvcm0KLQkJCQkuZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyhudWxsKTsKLQkJZm9yIChJU2VydmljZVBvbGljeSBzZXJ2aWNlUG9saWN5SXRlbSA6IHNlcnZpY2VQb2xpY3lMaXN0KSB7Ci0JCQl2YWxpZGF0ZVBvbGljeShzZXJ2aWNlUG9saWN5SXRlbSk7Ci0JCX0KLQkJLy8gZ2V0IHRoZSBlcnJvciBmb3IgdGhlIHNlbGVjdGVkL2ZvY3VzUG9saWN5Ci0JCUlTdGF0dXMgZXJyb3IgPSAoZm9jdXNQb2xpY3kgPT0gbnVsbCkgPyBudWxsIDogYWxsRXJyb3JzCi0JCQkJLmdldChmb2N1c1BvbGljeS5nZXRJZCgpKTsKLQkJLy9pZiB0aGVyZSB3YXMgbm8gZXJyb3IgZm9yIHRoZSBzZWxlY3RlZC9mb2N1c1BvbGljeSwgZ2V0IHRoZSBmaXJzdCBlcnJvciBpbiB0aGUgbGlzdCBvZiBlcnJvcnMKLQkJaWYgKGVycm9yID09IG51bGwpCi0JCQlpZiAoIWFsbEVycm9ycy5pc0VtcHR5KCkpCi0JCQkJZXJyb3IgPSBhbGxFcnJvcnMuZ2V0KGFsbEVycm9ycy5rZXlzKCkubmV4dEVsZW1lbnQoKSk7Ci0KLQkJLy8gdXBkYXRlIG1hc3RlciBwb2xpY3kgdHJlZSBub2RlcyBkZW5vdGluZyBub2RlIGVycm9yIHN0YXR1cwotCQlUcmVlSXRlbVtdIHRyZWVJdGVtcyA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlSXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJCXVwZGF0ZVZhbGlkU3RhdGVzKHRyZWVJdGVtc1tpXSwgZmFsc2UpOwotCQl9Ci0JCWlmIChkZXRhaWxzUG9saWN5VHJlZS5pc1Zpc2libGUoKSkgewotCQkJLy8gdXBkYXRlIGRldGFpbHMgcHJlZmVyZW5jZSB0cmVlIG5vZGVzIGRlbm90aW5nIG5vZGUgZXJyb3Igc3RhdHVzCi0JCQl0cmVlSXRlbXMgPSBkZXRhaWxzUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlSXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJCQl1cGRhdGVWYWxpZFN0YXRlcyh0cmVlSXRlbXNbaV0sIGZhbHNlKTsKLQkJCX0KLQotCQl9Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQkvKioKLQkgKiBVcGRhdGVzIHRoZSBwb2xpY3kgdHJlZXMgdG8gcmVmbGVjdCB2YWxpZCBvciBpbnZhbGlkIHN0YXRlcywgaW52YWxpZCBzdGF0ZXMgYXJlIAotCSAqIHByb3BhZ2F0ZWQgdXAgdGhyb3VnaCB0aGUgdHJlZSwgYW5kIHVwIHRvIG1hc3RlciB0cmVlIGlmIHVwZGF0ZURldGFpbHNPbmx5IGlzIGZhbHNlCi0JICogQHBhcmFtIHRpIHRoZSBUcmVlSXRlbSB0byB1cGRhdGUsIHVwZGF0ZXMgdGkgYW5kIGFsbCBpdCdzIGNoaWxkcmVuCi0JICogQHBhcmFtIHVwZGF0ZURldGFpbHNPbmx5IGlmIGZhbHNlIHRoZW4gcHJvcGFnYXRlIGludmFsaWQgc3RhdGVzIGludG8KLQkgKiBtYXN0ZXIgdHJlZSAKLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlVmFsaWRTdGF0ZXMoVHJlZUl0ZW0gdGksIGJvb2xlYW4gdXBkYXRlRGV0YWlsc09ubHkpIHsKLQkJLy8gYXNzdW1lIHRyZWUgaXRlbSBpcyB2YWxpZCBmb3Igbm93Ci0JCUlTZXJ2aWNlUG9saWN5IHNwID0gKElTZXJ2aWNlUG9saWN5KSB0aS5nZXREYXRhKCk7Ci0JCXNldFZhbGlkUG9saWN5U3RhdGUodGkpOwotCi0JCWlmIChhbGxFcnJvcnMuY29udGFpbnNLZXkoc3AuZ2V0SWQoKSkpCi0JCQlzZXRJbnZhbGlkUG9saWN5U3RhdGUodGksIHVwZGF0ZURldGFpbHNPbmx5KTsKLQkJVHJlZUl0ZW1bXSB0cmVlSXRlbXMgPSB0aS5nZXRJdGVtcygpOwotCQlpZiAodGkuZ2V0SXRlbXMoKS5sZW5ndGggPT0gMCkgewotCQkJaWYgKHNwLmdldENoaWxkcmVuKCkuc2l6ZSgpICE9IDAgJiYgcG9saWN5Q2hpbGRyZW5JbnZhbGlkKHNwKSkKLQkJCQlzZXRJbnZhbGlkUG9saWN5U3RhdGUodGksIHVwZGF0ZURldGFpbHNPbmx5KTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJlZUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0KLQkJCQl1cGRhdGVWYWxpZFN0YXRlcyh0cmVlSXRlbXNbaV0sIHVwZGF0ZURldGFpbHNPbmx5KTsKLQkJCX0KLQkJfQotCi0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHdoZXRoZXIgdGhlIHNwIGhhcyBpbnZhbGlkIGNoaWxkcmVuCi0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljeSB3aG9zZSBjaGlsZHJlbiBtYXkgYmUgaW52YWxpZAotCSAqIEByZXR1cm4gdHJ1ZSBpZiBzcCBoYXMgYW4gaW52YWxpZCBjaGlsZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBwb2xpY3lDaGlsZHJlbkludmFsaWQoSVNlcnZpY2VQb2xpY3kgc3ApIHsKLQkJYm9vbGVhbiB0b1JldHVybiA9IGZhbHNlOwotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBzZXJ2aWNlUG9saWN5TGlzdCA9IHNwLmdldENoaWxkcmVuKCk7Ci0JCWZvciAoSVNlcnZpY2VQb2xpY3kgc2VydmljZVBvbGljeUl0ZW0gOiBzZXJ2aWNlUG9saWN5TGlzdCkgewotCQkJaWYgKGFsbEVycm9ycy5jb250YWluc0tleShzZXJ2aWNlUG9saWN5SXRlbS5nZXRJZCgpKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCWVsc2UKLQkJCQl0b1JldHVybiA9IHBvbGljeUNoaWxkcmVuSW52YWxpZChzZXJ2aWNlUG9saWN5SXRlbSk7Ci0JCX0KLQkJcmV0dXJuIHRvUmV0dXJuOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlcyB0aGUgU2VydmljZSBQb2xpY2llcyBmb3IgdGhlIHNwIGFuZCBhbGwgaXQncyBjaGlsZHJlbiwgY3JlYXRpbmcgCi0JICogZXJyb3Igc3RhdHVzIG9iamVjdHMgZm9yIGFueSB1bnNhdGlzZmllZCByZWxhdGlvbnNoaXBzCi0JICogCi0JICogQHBhcmFtIHNwCi0JICogICAgICAgICAgICB0aGUgc2VydmljZSBwb2xpY3kgdG8gdmFsaWRhdGUKLQkgKi8KLQlwcml2YXRlIHZvaWQgdmFsaWRhdGVQb2xpY3koSVNlcnZpY2VQb2xpY3kgc3ApIHsKLQkJU3RyaW5nIG9wZXJhdGlvbkxvbmdOYW1lOwotCQlTdHJpbmcgb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWU7Ci0JCVN0cmluZyBkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWU7Ci0JCUxpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25TaGlwTGlzdCA9IHNwLmdldFJlbGF0aW9uc2hpcHMoKTsKLQkJU3RyaW5nIGN1cnJlbnRWYWx1ZUlEID0gbnVsbDsKLQkJaWYgKHJlbGF0aW9uU2hpcExpc3QgIT0gbnVsbCAmJiByZWxhdGlvblNoaXBMaXN0LnNpemUoKSA+IDApIHsKLQkJZm9yIChJUG9saWN5UmVsYXRpb25zaGlwIHJlbGF0aW9uU2hpcEl0ZW0gOiByZWxhdGlvblNoaXBMaXN0KSB7Ci0JCQkvL29wZXJhdGlvbnMgZm9yIHRoZSBwb2xpY3kKLQkJCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5T3BlcmF0aW9uc0xpc3QgPSBwbGF0Zm9ybVVJCi0JCQkJCS5nZXRPcGVyYXRpb25zKHJlbGF0aW9uU2hpcEl0ZW0uZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkKLQkJCQkJCQkuZ2V0UG9saWN5KCksIHByb2plY3QgPT0gbnVsbCk7Ci0JCQkvL2RlZmF1bHQgb3BlcmF0aW9uIG5hbWUKLQkJCW9wZXJhdGlvbkxvbmdOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoSVBvbGljeU9wZXJhdGlvbiBwb2xpY3lPcGVyYXRpb25JdGVtIDogcG9saWN5T3BlcmF0aW9uc0xpc3QpIHsKLQkJCQlpZiAocG9saWN5T3BlcmF0aW9uSXRlbS5pc1VzZURlZmF1bHREYXRhKCkpIHsKLQkJCQkJb3BlcmF0aW9uTG9uZ05hbWUgPSBwb2xpY3lPcGVyYXRpb25JdGVtLmdldERlc2NyaXB0b3IoKQotCQkJCQkJCS5nZXRMb25nTmFtZSgpOwotCQkJCQljdXJyZW50VmFsdWVJRCA9IHBvbGljeU9wZXJhdGlvbkl0ZW0uZ2V0U3RhdGVJdGVtKHByb2plY3QpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvLyBhIGxpc3Qgb2Ygc3RhdGVzCi0JCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gc3BTdGF0ZUVudW1lcmF0aW9uTGlzdCA9IHJlbGF0aW9uU2hpcEl0ZW0KLQkJCQkJLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpLmdldEVudW1lcmF0aW9uTGlzdCgpOwotCQkJLy8gYSBsaXN0IG9mIHJlbGF0ZWQgcG9saWNpZXMgYW5kIHRoZWlyIGFjY2VwdGFibGUgc3RhdGVzIHRvIHNhdGlzZnkgYSBzdGF0ZUVudW1lcmF0aW9uSXRlbSBpbiBzcFN0YXRlRW51bWVyYXRpb25MaXN0Ci0JCQlMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IHJlbGF0ZWRQb2xpY2llcyA9IHJlbGF0aW9uU2hpcEl0ZW0KLQkJCQkJLmdldFJlbGF0ZWRQb2xpY2llcygpOwotCQkJZm9yIChJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gc3RhdGVFbnVtZXJhdGlvbkl0ZW0gOiBzcFN0YXRlRW51bWVyYXRpb25MaXN0KSB7Ci0JCQkJaWYgKHN0YXRlRW51bWVyYXRpb25JdGVtLmdldElkKCkgIT0gY3VycmVudFZhbHVlSUQpCi0JCQkJCWNvbnRpbnVlOwotCQkJCS8vbG9uZyBuYW1lIG9mIHRoZSByZWxhdGVkIHBvbGljeSBvcGVyYXRpb24KLQkJCQlvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZSA9IHN0YXRlRW51bWVyYXRpb25JdGVtLmdldExvbmdOYW1lKCk7Ci0JCQkJZm9yIChJUG9saWN5RW51bWVyYXRpb25MaXN0IHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0gOiByZWxhdGVkUG9saWNpZXMpIHsKLQkJCQkJZGVwZW5kYW50UG9saWN5U2hvcnROYW1lID0gcmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbQotCQkJCQkJCS5nZXRQb2xpY3koKS5nZXREZXNjcmlwdG9yKCkuZ2V0U2hvcnROYW1lKCk7Ci0JCQkJCS8vdGhlIGxpc3Qgb2YgcmVsYXRlZCBzcCBzdGF0ZXMgdGhhdCBzYXRpc2Z5IHRoZSBzdGF0ZUVudW1lcmF0aW9uSXRlbQotCQkJCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gcmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3QgPSByZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtCi0JCQkJCQkJLmdldEVudW1lcmF0aW9uTGlzdCgpOwotCQkJCQkvL3RoZSBsaXN0IG9mIHZhbGlkIGlkcyBmb3IgdGhlIHJlbGF0ZWQgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uCi0JCQkJCUxpc3Q8U3RyaW5nPiB2YWxpZElkcyA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0Ci0JCQkJCQkJLnNpemUoKTsgaSsrKSB7Ci0JCQkJCQl2YWxpZElkcwotCQkJCQkJCQkuYWRkKHJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0Ci0JCQkJCQkJCQkJLmdldChpKS5nZXRJZCgpKTsKLQotCQkJCQl9Ci0JCQkJCS8vZ2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZWxhdGVkIHNlcnZpY2UgcG9saWN5IGRlZmF1bHQgb3BlcmF0aW9uCi0JCQkJCVN0cmluZyBjdXJyZW50SXRlbUlEID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJTGlzdDxJUG9saWN5T3BlcmF0aW9uPiByZWxhdGVkU2VydmljZVBvbGljeVBvbGljeU9wZXJhdGlvbnNMaXN0ID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zKHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0uZ2V0UG9saWN5KCksIHByb2plY3QgPT1udWxsKTsKLQkJCQkJSVBvbGljeU9wZXJhdGlvbiByZWxhdGVkUG9saWN5T3BlcmF0aW9uSXRlbSA9IG51bGw7Ci0JCQkJCWZvciAoSVBvbGljeU9wZXJhdGlvbiByZWxhdGVkU2VydmljZVBvbGljeVBvbGljeU9wZXJhdGlvbkl0ZW0gOiByZWxhdGVkU2VydmljZVBvbGljeVBvbGljeU9wZXJhdGlvbnNMaXN0KSB7Ci0JCQkJCQlpZiAocmVsYXRlZFNlcnZpY2VQb2xpY3lQb2xpY3lPcGVyYXRpb25JdGVtLmlzVXNlRGVmYXVsdERhdGEoKSkgewotCQkJCQkJCWN1cnJlbnRJdGVtSUQgPSByZWxhdGVkU2VydmljZVBvbGljeVBvbGljeU9wZXJhdGlvbkl0ZW0uZ2V0U3RhdGVJdGVtKHByb2plY3QpOwotCQkJCQkJCXJlbGF0ZWRQb2xpY3lPcGVyYXRpb25JdGVtID0gcmVsYXRlZFNlcnZpY2VQb2xpY3lQb2xpY3lPcGVyYXRpb25JdGVtOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCQotCQkJCQlpZiAoIXZhbGlkSWRzCi0JCQkJCQkJLmNvbnRhaW5zKGN1cnJlbnRJdGVtSUQpKSB7Ci0JCQkJCQkvLyBwb2xpY3kgc3RhdGUgaXMgaW52YWxpZAotCQkJCQkJSVN0YXR1cyBlcnJvciA9IGNyZWF0ZVVuc2F0aXNmaWVkUmVsYXRpb25zaGlwRXJyb3Ioc3AsCi0JCQkJCQkJCW9wZXJhdGlvbkxvbmdOYW1lLAotCQkJCQkJCQlvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZSwKLQkJCQkJCQkJZGVwZW5kYW50UG9saWN5U2hvcnROYW1lLAotCQkJCQkJCQlyZWxhdGVkUG9saWN5T3BlcmF0aW9uSXRlbSwKLQkJCQkJCQkJcmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3QpOwotCQkJCQkJYWxsRXJyb3JzLnB1dChzcC5nZXRJZCgpLCBlcnJvcik7Ci0KLQkJCQkJfQotCi0KLQkJCQl9Ci0KLQkJCX0KLQotCQl9Ci0JCX0KLQotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBzZXJ2aWNlUG9saWN5Q2hpbGRyZW5MaXN0ID0gc3AuZ2V0Q2hpbGRyZW4oKTsKLQkJZm9yIChJU2VydmljZVBvbGljeSBzZXJ2aWNlUG9saWN5Q2hpbGRyZW5JdGVtIDogc2VydmljZVBvbGljeUNoaWxkcmVuTGlzdCkgewotCQkJdmFsaWRhdGVQb2xpY3koc2VydmljZVBvbGljeUNoaWxkcmVuSXRlbSk7Ci0KLQkJfQotCi0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgaWNvbiBmb3IgdGhlIHRpIGRlbm90aW5nIGl0IGFzIHZhbGlkCi0JICogQHBhcmFtIHRpIGEgdmFsaWQgdHJlZSBpdGVtCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldFZhbGlkUG9saWN5U3RhdGUoVHJlZUl0ZW0gdGkpIHsKLQkJSVNlcnZpY2VQb2xpY3kgc3AgPSAoSVNlcnZpY2VQb2xpY3kpIHRpLmdldERhdGEoKTsKLQkJc2V0SW1hZ2UodGksIHNwLCBnZXRJY29uT3ZlcmxheUluZm8oc3AsIGZhbHNlKSk7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgaWNvbiBmb3IgdGkgZGVub3RpbmcgaXQgYXMgaW52YWxpZCwgYXMgd2VsbCBhcyB0aSdzIHBhcmVudCB0cmVlIGl0ZW1zCi0JICogQHBhcmFtIHRpIGFuIGludmFsaWQgdHJlZSBpdGVtCi0JICogQHBhcmFtIHVwZGF0ZURldGFpbHNPbmx5IHRydWUgaW5kaWNhdGVzIGRvIG5vdCB1cGRhdGUgcGFyZW50IHRyZWUgaXRlbXMgb25seSBpbiBtYXN0ZXIgdHJlZQotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRJbnZhbGlkUG9saWN5U3RhdGUoVHJlZUl0ZW0gdGksIGJvb2xlYW4gdXBkYXRlRGV0YWlsc09ubHkpIHsKLQkJSVNlcnZpY2VQb2xpY3kgU1AgPSAoSVNlcnZpY2VQb2xpY3kpIHRpLmdldERhdGEoKTsKLQkJc2V0SW1hZ2UodGksIFNQLCBnZXRJY29uT3ZlcmxheUluZm8oU1AsIHRydWUpKTsKLQkJVHJlZUl0ZW0gcGFyZW50OwotCQlpZiAodGkuZ2V0UGFyZW50KCkgPT0gbWFzdGVyUG9saWN5VHJlZSB8fCB1cGRhdGVEZXRhaWxzT25seSkKLQkJCXBhcmVudCA9IHRpLmdldFBhcmVudEl0ZW0oKTsKLQkJZWxzZQotCQkJcGFyZW50ID0gKHRpLmdldFBhcmVudEl0ZW0oKSA9PSBudWxsICYmIFNQLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwpID8gZ2V0UGFyZW50SW5NYXN0ZXJUcmVlKFNQCi0JCQkJCS5nZXRJZCgpKQotCQkJCQk6IHRpLmdldFBhcmVudEl0ZW0oKTsKLQkJd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7Ci0JCQlzZXRJbWFnZShwYXJlbnQsIChJU2VydmljZVBvbGljeSkgcGFyZW50LmdldERhdGEoKSwKLQkJCQkJZ2V0SWNvbk92ZXJsYXlJbmZvKChJU2VydmljZVBvbGljeSkgcGFyZW50LmdldERhdGEoKSwKLQkJCQkJCQl0cnVlKSk7Ci0JCQlpZiAodXBkYXRlRGV0YWlsc09ubHkpCi0JCQkJcGFyZW50ID0gcGFyZW50LmdldFBhcmVudEl0ZW0oKTsKLQkJCWVsc2UgewotCQkJCXBhcmVudCA9IChwYXJlbnQuZ2V0UGFyZW50SXRlbSgpID09IG51bGwgJiYgKChJU2VydmljZVBvbGljeSkgcGFyZW50Ci0JCQkJCQkuZ2V0RGF0YSgpKS5nZXRQYXJlbnRQb2xpY3koKSAhPSBudWxsKSA/IGdldFBhcmVudEluTWFzdGVyVHJlZSgoKElTZXJ2aWNlUG9saWN5KSBwYXJlbnQKLQkJCQkJCS5nZXREYXRhKCkpLmdldFBhcmVudFBvbGljeSgpLmdldElkKCkpCi0JCQkJCQk6IHBhcmVudC5nZXRQYXJlbnRJdGVtKCk7Ci0JCQl9Ci0KLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gZXJyb3Igc3RhdHVzIG9iamVjdCBmb3IgdGhlIHNwLiBUaGUgZXJyb3IgbWVzc2FnZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCAKLQkgKiBhbiB1bnNhdGlzZmllZCByZWxhdGlvbnNoaXAKLQkgKiBAcGFyYW0gc3AKLQkgKiBAcGFyYW0gb3BlcmF0aW9uTG9uZ05hbWUKLQkgKiBAcGFyYW0gb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUKLQkgKiBAcGFyYW0gZGVwZW5kYW50UG9saWN5U2hvcnROYW1lCi0JICogQHBhcmFtIHJlbGF0ZWRPcGVyYXRpb24KLQkgKiBAcGFyYW0gcmVsYXRlZE9wZXJhdGlvbkFjY2VwdGFibGVWYWx1ZXMKLQkgKiBAcmV0dXJuIGFuIEVycm9yIHN0YXR1cwotCSAqLwotCXByaXZhdGUgSVN0YXR1cyBjcmVhdGVVbnNhdGlzZmllZFJlbGF0aW9uc2hpcEVycm9yKElTZXJ2aWNlUG9saWN5IHNwLAotCQkJU3RyaW5nIG9wZXJhdGlvbkxvbmdOYW1lLCBTdHJpbmcgb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUsCi0JCQlTdHJpbmcgZGVwZW5kYW50UG9saWN5U2hvcnROYW1lLAotCQkJSVBvbGljeU9wZXJhdGlvbiByZWxhdGVkT3BlcmF0aW9uLAotCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHJlbGF0ZWRPcGVyYXRpb25BY2NlcHRhYmxlVmFsdWVzKSB7Ci0JCVN0cmluZyBkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWU7Ci0JCVN0cmluZyBkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0OwotCQlkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWUgPSByZWxhdGVkT3BlcmF0aW9uCi0JCQkJLmdldERlc2NyaXB0b3IoKS5nZXRTaG9ydE5hbWUoKTsKLQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCA9IG5ldyBTdHJpbmcoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGVkT3BlcmF0aW9uQWNjZXB0YWJsZVZhbHVlcy5zaXplKCk7IGkrKykgewotCQkJSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gPSByZWxhdGVkT3BlcmF0aW9uQWNjZXB0YWJsZVZhbHVlcy5nZXQoaSk7Ci0JCQlpZiAoaSAhPSAwKQotCQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgKz0gIiB8ICI7IC8vJE5PTi1OTFMtMSQKLQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgKz0gaXRlbS5nZXRTaG9ydE5hbWUoKTsKLQotCQl9Ci0JCVN0cmluZ1tdIGFyZ3MgPSB7IHNwLmdldERlc2NyaXB0b3IoKS5nZXRMb25nTmFtZSgpLCBvcGVyYXRpb25Mb25nTmFtZSwKLQkJCQlvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZSwgZGVwZW5kYW50UG9saWN5U2hvcnROYW1lLAotCQkJCWRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZSwKLQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0fTsKLQkJSVN0YXR1cyBlcnJvciA9IG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLAotCQkJCVNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQsIE5MUy5iaW5kKAotCQkJCQkJV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNZX0VSUk9SLAotCQkJCQkJYXJncykpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHBhcmVudElEIHRoZSBpZCB0byBmaW5kIGluIHRoZSBtYXN0ZXIgdHJlZQotCSAqIEByZXR1cm4gYSBUcmVlSXRlbSB3aXRoIHRoZSBpZCBpbiB0aGUgbWFzdGVyIHRyZWUKLQkgKi8KLQlwcml2YXRlIFRyZWVJdGVtIGdldFBhcmVudEluTWFzdGVyVHJlZShTdHJpbmcgcGFyZW50SUQpIHsKLQkJVHJlZUl0ZW0gcGFyZW50ID0gbnVsbDsKLQkJVHJlZUl0ZW1bXSByb290Tm9kZXMgPSBtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcm9vdE5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwYXJlbnQgPSBmaW5kQ2hpbGROb2RlKHJvb3ROb2Rlc1tpXSwgcGFyZW50SUQpOwotCQkJaWYgKHBhcmVudCAhPSBudWxsKQotCQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiBwYXJlbnQ7Ci0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgVHJlZUl0ZW0gYXNzb2NpYXRlZCB3aXRoIGEgY2hpbGQgcG9saWN5IG9mIHRpCi0JICogQHBhcmFtIHRpCi0JICogQHBhcmFtIGlkIHRoZSBwb2xpY3kgaWQgb2YgYSBjaGlsZCBub2RlIG9mIHRpCi0JICogQHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGNoaWxkIHBvbGljeSBtYXRjaGluZyBpZAotCSAqLwotCXByaXZhdGUgVHJlZUl0ZW0gZmluZENoaWxkTm9kZShUcmVlSXRlbSB0aSwgU3RyaW5nIGlkKSB7Ci0JCVRyZWVJdGVtIHRvUmV0dXJuID0gbnVsbDsKLQkJaWYgKCgoSVNlcnZpY2VQb2xpY3kpIHRpLmdldERhdGEoKSkuZ2V0SWQoKS5lcXVhbHMoaWQpKSB7Ci0JCQl0b1JldHVybiA9IHRpOwotCQl9IGVsc2UgewotCQkJVHJlZUl0ZW1bXSBjaGlsZEl0ZW1zID0gdGkuZ2V0SXRlbXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRJdGVtcy5sZW5ndGg7IGkrKykgewotCQkJCXRvUmV0dXJuID0gZmluZENoaWxkTm9kZShjaGlsZEl0ZW1zW2ldLCBpZCk7Ci0JCQl9Ci0KLQkJfQotCQlyZXR1cm4gdG9SZXR1cm47Ci0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGRlcGVuZGFuY3kgaW5mb3JtYXRpb24gYWJvdXQgc3AsIHRoYXQgaXMgaW5mb3JtYXRpb24gYWJvdXQKLQkgKiBpdCdzIHJlbGF0aW9uc2hpcHMgKGlmIGFueSkgd2l0aCBvdGhlciBzZXJ2aWNlIHBvbGljaWVzCi0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljeSB0byBnZXQgZGVwZW5kZW5jeSBpbmZvIGFib3V0Ci0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldERlcGVuZGFuY2llc1RleHQoSVNlcnZpY2VQb2xpY3kgc3ApIHsKLQkJLy8gdGhlIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCBmb3IgdGhlIHBvbGljeQotCQlMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uU2hpcExpc3QgPSBzcC5nZXRSZWxhdGlvbnNoaXBzKCk7Ci0JCWlmIChyZWxhdGlvblNoaXBMaXN0ID09IG51bGwgfHwgcmVsYXRpb25TaGlwTGlzdC5zaXplKCkgPT0gMCkKLQkJCXJldHVybiBXc3RTUFVJUGx1Z2luTWVzc2FnZXMuU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ0lFU19OT05FOwotCQlTdHJpbmcgdG9SZXR1cm4gPSBuZXcgU3RyaW5nKCk7Ci0KLQkJU3RyaW5nIG9wZXJhdGlvbkxvbmdOYW1lOwotCQlTdHJpbmcgb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWU7Ci0JCVN0cmluZyBkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWU7Ci0JCVN0cmluZyBkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWU7Ci0JCVN0cmluZyBkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0OwotCi0JCWZvciAoSVBvbGljeVJlbGF0aW9uc2hpcCByZWxhdGlvblNoaXBJdGVtIDogcmVsYXRpb25TaGlwTGlzdCkgewotCQkJTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lPcGVyYXRpb25zTGlzdCA9IHBsYXRmb3JtVUkKLQkJCQkJLmdldE9wZXJhdGlvbnMocmVsYXRpb25TaGlwSXRlbS5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKQotCQkJCQkJCS5nZXRQb2xpY3koKSwgcHJvamVjdCA9PSBudWxsKTsKLQkJCW9wZXJhdGlvbkxvbmdOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoSVBvbGljeU9wZXJhdGlvbiBwb2xpY3lPcGVyYXRpb25JdGVtIDogcG9saWN5T3BlcmF0aW9uc0xpc3QpIHsKLQkJCQlpZiAocG9saWN5T3BlcmF0aW9uSXRlbS5pc1VzZURlZmF1bHREYXRhKCkpIHsKLQkJCQkJb3BlcmF0aW9uTG9uZ05hbWUgPSBwb2xpY3lPcGVyYXRpb25JdGVtLmdldERlc2NyaXB0b3IoKQotCQkJCQkJCS5nZXRMb25nTmFtZSgpOwotCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCS8vIHBvbGljaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsYXRpb25zaGlwIGl0ZW0KLQkJCUxpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gcmVsYXRlZFBvbGljaWVzID0gcmVsYXRpb25TaGlwSXRlbQotCQkJCQkuZ2V0UmVsYXRlZFBvbGljaWVzKCk7Ci0JCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gc3BTdGF0ZUVudW1lcmF0aW9uTGlzdCA9IHJlbGF0aW9uU2hpcEl0ZW0KLQkJCQkJLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpLmdldEVudW1lcmF0aW9uTGlzdCgpOwotCQkJZm9yIChJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gc3RhdGVFbnVtZXJhdGlvbkl0ZW0gOiBzcFN0YXRlRW51bWVyYXRpb25MaXN0KSB7Ci0JCQkJb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUgPSBzdGF0ZUVudW1lcmF0aW9uSXRlbS5nZXRMb25nTmFtZSgpOwotCQkJCWZvciAoSVBvbGljeUVudW1lcmF0aW9uTGlzdCByZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtIDogcmVsYXRlZFBvbGljaWVzKSB7Ci0JCQkJCWRlcGVuZGFudFBvbGljeVNob3J0TmFtZSA9IHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0KLQkJCQkJCQkuZ2V0UG9saWN5KCkuZ2V0RGVzY3JpcHRvcigpLmdldFNob3J0TmFtZSgpOwotCQkJCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gcmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3QgPSByZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtCi0JCQkJCQkJLmdldEVudW1lcmF0aW9uTGlzdCgpOwotCQkJCQlMaXN0PElQb2xpY3lPcGVyYXRpb24+IHJlbGF0ZWRQb2xpY3lPcGVyYXRpb25zTGlzdCA9IHBsYXRmb3JtVUkKLQkJCQkJCQkuZ2V0T3BlcmF0aW9ucyhyZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtCi0JCQkJCQkJCQkuZ2V0UG9saWN5KCksIChwcm9qZWN0ID09IG51bGwpKTsKLQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIHJlbGF0ZWRQb2xpY3lPcGVyYXRpb25JdGVtIDogcmVsYXRlZFBvbGljeU9wZXJhdGlvbnNMaXN0KSB7Ci0JCQkJCQlpZiAocmVsYXRlZFBvbGljeU9wZXJhdGlvbkl0ZW0uaXNVc2VEZWZhdWx0RGF0YSgpKQotCQkJCQkJCWRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZSA9IHJlbGF0ZWRQb2xpY3lPcGVyYXRpb25JdGVtCi0JCQkJCQkJCQkuZ2V0RGVzY3JpcHRvcigpLmdldFNob3J0TmFtZSgpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0ID0gbmV3IFN0cmluZygpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQkJCQlJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA9IHJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0Ci0JCQkJCQkJCS5nZXQoaSk7Ci0JCQkJCQlpZiAoaSAhPSAwKQotCQkJCQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgKz0gIiB8ICI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgKz0gaXRlbQotCQkJCQkJCQkuZ2V0U2hvcnROYW1lKCk7Ci0KLQkJCQkJfQotCQkJCQlTdHJpbmdbXSBhcmdzID0geyBvcGVyYXRpb25Mb25nTmFtZSwKLQkJCQkJCQlvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZSwKLQkJCQkJCQlkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUsCi0JCQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lLAotCQkJCQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgfTsKLQkJCQkJdG9SZXR1cm4gKz0gTkxTLmJpbmQoCi0JCQkJCQkJV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVMsCi0JCQkJCQkJYXJncykKLQkJCQkJCQkrICJcclxuIjsgLy8kTk9OLU5MUy0xJAotCi0JCQkJfQotCi0JCQl9Ci0KLQkJfQotCQlyZXR1cm4gdG9SZXR1cm47Ci0JfQotCi0KLQkvKioKLQkgKiBTYXZlcyB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZSB0aGUgd2lkZ2V0IGRhdGEgKHdpZGdldCBkYXRhIGNvbnRhaW5zIGFsbCAKLQkgKiBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb25zIHRoZSBjb250cm9sIGFwcGxpZXMgdG8pCi0JICogQHBhcmFtIGFjdGlvbkNvbnRyb2wgYSB3aWRnZXQgd2hvJ3MgZGF0YSBuZWVkcyB0byBiZSBzYXZlZCB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZQotCSAqIAotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVQb2xpY3koQ29udHJvbCBhY3Rpb25Db250cm9sKSB7Ci0KLQkJTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lPcGVyYXRpb25MaXN0ID0gKChBY3Rpb25Db250cm9sRGF0YSkgYWN0aW9uQ29udHJvbC5nZXREYXRhKCkpLmdldFBvTGlzdCgpOwotCQlJUG9saWN5T3BlcmF0aW9uIHBvMCA9IHBvbGljeU9wZXJhdGlvbkxpc3QuZ2V0KDApOwotCQkKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gc2VydmljZVBvbGljeUxpc3QgPSAoKEFjdGlvbkNvbnRyb2xEYXRhKSBhY3Rpb25Db250cm9sCi0JCQkJLmdldERhdGEoKSkuZ2V0U3BMaXN0KCk7Ci0JCWlmIChhY3Rpb25Db250cm9sIGluc3RhbmNlb2YgQnV0dG9uCi0JCQkJJiYgcG8wLmdldE9wZXJhdGlvbktpbmQoKS5lcXVhbHMoT3BlcmF0aW9uS2luZC5jb21wbGV4KSkKLQkJCXVwZGF0ZUNvbXBsZXhPcGVyYXRpb25QcmVmZXJlbmNlKHBvMCwgc2VydmljZVBvbGljeUxpc3QpOwotCQllbHNlCi0JCQlmb3IgKElQb2xpY3lPcGVyYXRpb24gcG9saWN5T3BlcmF0aW9uSXRlbSA6IHBvbGljeU9wZXJhdGlvbkxpc3QpIHsKLQotCQkJCXVwZGF0ZVNlbGVjdGlvbk9wZXJhdGlvblByZWZlcmVuY2UoYWN0aW9uQ29udHJvbCwgcG9saWN5T3BlcmF0aW9uSXRlbSk7Ci0JCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBva1RvTGVhdmUoKSB7Ci0JCXJldHVybiBhbGxFcnJvcnMuc2l6ZSgpID09IDA7Ci0KLQl9Ci0KLQkvKioKLQkgKiBTYXZlcyB2YWx1ZSBvZiBlbnVtZXJhdGlvbiwgc2VsZWN0aW9uLCBhbmQgaWNvbnNlbGVjdGlvbiB0eXBlIG9wZXJhdGlvbnMKLQkgKiB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZQotCSAqIEBwYXJhbSBhY3Rpb25Db250cm9sIHRoZSBhY3Rpb24gY29udHJvbCBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcmVmZXJlbmNlCi0JICogQHBhcmFtIHBvIAotCSAqIEBwYXJhbSBzcAotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVTZWxlY3Rpb25PcGVyYXRpb25QcmVmZXJlbmNlKENvbnRyb2wgYWN0aW9uQ29udHJvbCwgSVBvbGljeU9wZXJhdGlvbiBwbykgewotCQlTdHJpbmcgc2VsZWN0ZWRWYWx1ZTsKLQkJCi0JCS8vIFdlIGFyZSB1cGRhdGluZyB0aGUgc3RhdGUgb2YgYSBzZXJ2aWNlIHBvbGljeS4gIFdlIGRvbid0IHdhbnQgdGhpcwotCQkvLyB1cGRhdGUgdG8gdHJpZ2dlciBvdXIgc3RhdGUgY2hhbmdlIGxpc3RlbmVyLgotCQllbmFibGVTdGF0ZUxpc3RlbmVyKCBmYWxzZSApOwotCQkKLQkJaWYgKGFjdGlvbkNvbnRyb2wgaW5zdGFuY2VvZiBDb21ibykgewotCQkJc2VsZWN0ZWRWYWx1ZSA9ICgoQ29tYm8pIGFjdGlvbkNvbnRyb2wpLmdldFRleHQoKTsKLQkJCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtSXRlbUxpc3QgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0KLQkJCQkJLmdldEluc3RhbmNlKCkuZ2V0U3RhdGVFbnVtZXJhdGlvbihwby5nZXRFbnVtZXJhdGlvbklkKCkpOwotCQkJZm9yIChJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtSXRlbUxpc3QpIHsKLQkJCQlpZiAoZW51bUl0ZW0uZ2V0TG9uZ05hbWUoKS5lcXVhbHMoc2VsZWN0ZWRWYWx1ZSkpIHsKLQkJCQkJcG8uc2V0U3RhdGVJdGVtKHByb2plY3QsIGVudW1JdGVtLmdldElkKCkpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJfSBlbHNlIHsKLQkJCWlmICgoKEJ1dHRvbikgYWN0aW9uQ29udHJvbCkuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCQlwby5zZXRTdGF0ZUl0ZW0ocHJvamVjdCwgIm9yZy5lY2xpcHNlLndzdC50cnVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0gZWxzZQotCQkJCXBvLnNldFN0YXRlSXRlbShwcm9qZWN0LCAib3JnLmVjbGlwc2Uud3N0LmZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLQotCQl9Ci0KLQkJLy8gUmVlbmFibGUgb3VyIHN0YXRlIGNoYW5nZSBsaXN0ZW5lci4KLQkJZW5hYmxlU3RhdGVMaXN0ZW5lciggdHJ1ZSApOwotCX0KLQotCQotCXByaXZhdGUgdm9pZCBhZGRTdGF0ZUxpc3RlbmVyKCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotCXsKLQkgIGlmKCBzdGF0ZUNoYW5nZVBvbGljeVNldC5jb250YWlucyggcG9saWN5ICkgKSByZXR1cm47Ci0JICAKLQkgIGlmKCBwcm9qZWN0ID09IG51bGwgKQotCSAgewotCSAgICBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5hZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBzdGF0ZUNoYW5nZUxpc3RlbmVyLCBmYWxzZSApOwotCSAgfQotCSAgZWxzZQotCSAgewotCSAgICBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKS5hZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBzdGF0ZUNoYW5nZUxpc3RlbmVyLCBmYWxzZSApOwotCSAgfQotCSAgCi0JICBzdGF0ZUNoYW5nZVBvbGljeVNldC5hZGQoIHBvbGljeSApOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcmVtb3ZlU3RhdGVMaXN0ZW5lciggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLQl7Ci0gICAgaWYoIHN0YXRlQ2hhbmdlUG9saWN5U2V0LmNvbnRhaW5zKCBwb2xpY3kgKSApIHJldHVybjsKLSAgICAKLSAgICBpZiggcHJvamVjdCA9PSBudWxsICkKLSAgICB7Ci0JICAgIHBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLnJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIHN0YXRlQ2hhbmdlTGlzdGVuZXIgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApLnJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIHN0YXRlQ2hhbmdlTGlzdGVuZXIgKTsgICAgICAKLSAgICB9Ci0gICAgCi0JICBzdGF0ZUNoYW5nZVBvbGljeVNldC5yZW1vdmUoIHBvbGljeSApOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZW5hYmxlU3RhdGVMaXN0ZW5lciggYm9vbGVhbiBlbmFibGVkICkKLQl7Ci0JICBzdGF0ZUNoYW5nZUVuYWJsZWQgPSBlbmFibGVkOwotCX0KLQkKLQkvKioKLQkgKiBMYXVuY2hlcyB0aGUgY29tcGxleCBvcGVyYXRpb24gZm9yIHRoZSBsaXN0IG9mIHNlcnZpY2UgcG9saWNpZXMKLQkgKiBAcGFyYW0gcG8gYSAiY29tcGxleCIgcG9saWN5IG9wZXJhdGlvbiAKLQkgKiBAcGFyYW0gc3BzIGEgbGlzdCBvZiBzZXJ2aWNlIHBvbGljaWVzIHRvIGFwcGx5IHRoZSBvcGVyYXRpb24gdG8KLQkgKi8KLQlwcml2YXRlIHZvaWQgIHVwZGF0ZUNvbXBsZXhPcGVyYXRpb25QcmVmZXJlbmNlKElQb2xpY3lPcGVyYXRpb24gcG8sCi0JCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBzcHMpIHsKLQkJLy9jb21wbGV4IG9wZXJhdGlvbnMgY2FuIHJlc3VsdCBpbiBhZGRlZCBhbmQgZGVsZXRlZCBub2RlcywgY2FjaGUgdGhlbSB1bnRpbCBvcGVyYXRpb24gY29tcGxldGVkCi0JCWJDb21wbGV4T3BDb21wbGV0ZWQgPSBmYWxzZTsKLQkJbGlzdENoaWxkQ2hhbmdlRXZlbnRzID0gbmV3IFZlY3RvcjxDaGlsZENoYW5nZUV2ZW50PigpOwotCQl0cnkgewotCQkJcG8ubGF1bmNoT3BlcmF0aW9uKHNwcyk7Ci0JCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotCQkJLy9qdXN0IHdhbnQgdG8gbWFrZSBzdXJlIGZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIHNvIGNhbiB1cGRhdGUgVUkgb2YgYWRkaXRpb25zL2RlbGV0aW9ucwotCQl9IGZpbmFsbHkgewotCQkJYkNvbXBsZXhPcENvbXBsZXRlZCA9dHJ1ZTsKLQkJCUhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PiB0b3BMZXZlbEFkZHMgPSBnZXRIaWdoZXN0TGV2ZWxDaGlsZHJlbihsaXN0Q2hpbGRDaGFuZ2VFdmVudHMsIHRydWUpOwotCQkJZm9yIChDaGlsZENoYW5nZUV2ZW50IGNoaWxkQ2hhbmdlRXZlbnRJdGVtIDogbGlzdENoaWxkQ2hhbmdlRXZlbnRzKSB7Ci0JCQkJcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnQoY2hpbGRDaGFuZ2VFdmVudEl0ZW0sIHRvcExldmVsQWRkcyk7Ci0JCQl9Ci0JCQkKLQkJfQotCX0KLQlwcml2YXRlIEhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PiBnZXRIaWdoZXN0TGV2ZWxDaGlsZHJlbiAoTGlzdDxDaGlsZENoYW5nZUV2ZW50PiBodENoaWxkQ2hhbmdlRXZlbnRzLCBib29sZWFuIGZvckFkZE9ubHkpIHsKLQkJSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+IHRvUmV0dXJuID0gbmV3IEhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PigpOwotCQlJdGVyYXRvcjxDaGlsZENoYW5nZUV2ZW50PiBlbGVtZW50cyA9IGh0Q2hpbGRDaGFuZ2VFdmVudHMuaXRlcmF0b3IoKTsKLQkJQ2hpbGRDaGFuZ2VFdmVudCBuZXh0OwotCQlIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4gYWxsU3BzID0gbmV3IEhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PigpOwotCQl3aGlsZSAoZWxlbWVudHMuaGFzTmV4dCgpKSB7Ci0JCQluZXh0ID0gZWxlbWVudHMubmV4dCgpOwotCQkJTGlzdDxJU2VydmljZVBvbGljeT4gY2hhbmdlZENoaWxkcmVuTGlzdCA9IG5leHQuZ2V0Q2hhbmdlZENoaWxkcmVuKCk7Ci0JCQlMaXN0PEJvb2xlYW4+IGFkZGVkTGlzdCA9IG5leHQuZ2V0QWRkZWQoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhbmdlZENoaWxkcmVuTGlzdC5zaXplKCk7IGkrKykgewotCQkJCWlmIChmb3JBZGRPbmx5ICYmIGFkZGVkTGlzdC5nZXQoaSkuYm9vbGVhblZhbHVlKCkgPT0gdHJ1ZSkKLQkJCQkJYWxsU3BzLnB1dChjaGFuZ2VkQ2hpbGRyZW5MaXN0LmdldChpKS5nZXRJZCgpLCBjaGFuZ2VkQ2hpbGRyZW5MaXN0LmdldChpKSk7Ci0JCQl9Ci0JCX0KLQkJRW51bWVyYXRpb248SVNlcnZpY2VQb2xpY3k+IHNlcnZpY2VQb2xpY3lFbGVtZW50cyA9IGFsbFNwcy5lbGVtZW50cygpOwotCQlJU2VydmljZVBvbGljeSBuZXh0U2VydmljZVBvbGljeUVsZW1lbnQ7Ci0JCXdoaWxlIChzZXJ2aWNlUG9saWN5RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCW5leHRTZXJ2aWNlUG9saWN5RWxlbWVudCA9IHNlcnZpY2VQb2xpY3lFbGVtZW50cy5uZXh0RWxlbWVudCgpOwotCQkJaWYgKG5leHRTZXJ2aWNlUG9saWN5RWxlbWVudC5nZXRQYXJlbnRQb2xpY3koKSA9PSBudWxsIHx8ICFhbGxTcHMuY29udGFpbnNLZXkobmV4dFNlcnZpY2VQb2xpY3lFbGVtZW50LmdldFBhcmVudFBvbGljeSgpLmdldElkKCkpKSB7Ci0JCQkJdG9SZXR1cm4ucHV0KG5leHRTZXJ2aWNlUG9saWN5RWxlbWVudC5nZXRJZCgpLCBuZXh0U2VydmljZVBvbGljeUVsZW1lbnQpOwotCQkJfQotCQl9Ci0JCXJldHVybiB0b1JldHVybjsKLQl9Ci0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCQlpY29uTWFuYWdlci5kaXNwb3NlKCk7Ci0JCQotCQlmb3IoIElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IHN0YXRlQ2hhbmdlUG9saWN5U2V0ICkKLQkJewotCQkgIElQb2xpY3lTdGF0ZSBzdGF0ZSA9IHByb2plY3QgPT0gbnVsbCA/IHBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpIDogcG9saWN5LmdldFBvbGljeVN0YXRlKCBwcm9qZWN0ICk7Ci0JCSAgCi0JCSAgc3RhdGUucmVtb3ZlUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggc3RhdGVDaGFuZ2VMaXN0ZW5lciApOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIFVJIHdpZGdldHMgZm9yIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byB0aGUgbGlzdCBvZiBzZXJ2aWNlIHBvbGljaWVzIHNwCi0JICogQHBhcmFtIHNwTGlzdCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHBvbGljaWVzIHRvIGNyZWF0ZSBVSSB3aWRnZXRzLCB0aGUgVUkgd2lkZ2V0cwotCSAqIHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgb3BlcmF0aW9ucy9wcmVmZXJlbmNlcyB0byBhcHBseSB0byB0aGUgc2VydmljZSBwb2xpY2llcyBpbiB0aGUgbGlzdAotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRBY3Rpb25CdXR0b25zKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdCkgewotCSAgCi0JCS8vIHJlbW92ZSBleGlzdGluZyBhY3Rpb24gY29udHJvbHMKLQkJQ29udHJvbFtdIHRvUmVtb3ZlID0gb3BlcmF0aW9uc0NvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7Ci0JCQl0b1JlbW92ZVtpXS5kaXNwb3NlKCk7Ci0JCX0KLQkJTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBwb2xpY3lPcGVyYXRpb25MaXN0TGlzdCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3Qoc3BMaXN0LCAocHJvamVjdCA9PSBudWxsKSk7Ci0KLQkJZm9yIChMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeU9wZXJhdGlvbkxpc3QgOiBwb2xpY3lPcGVyYXRpb25MaXN0TGlzdCkgewotCQkJaWYgKHBvbGljeU9wZXJhdGlvbkxpc3Quc2l6ZSgpID4gMCkgewotCQkJaWYgKHBvbGljeU9wZXJhdGlvbkxpc3QuZ2V0KDApLmdldE9wZXJhdGlvbktpbmQoKSA9PSBJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuY29tcGxleCkgewotCQkJCWFkZENvbXBsZXhPcGVyYXRpb25VSShwb2xpY3lPcGVyYXRpb25MaXN0LCBzcExpc3QpOwotCQkJfSBlbHNlCi0JCQkJYWRkU2VsZWN0aW9uT3BlcmF0aW9uVUkocG9saWN5T3BlcmF0aW9uTGlzdCwgc3BMaXN0KTsKLQkJCX0KLQotCQl9Ci0JCS8vIGp1c3QgcmVtb3ZlZCBhbmQgYWRkZWQgc29tZSBjb250cm9scyBzbyBmb3JjZSBjb21wb3NpdGUKLQkJLy8gdG8gcmUtbGF5b3V0IGl0J3MgY29udHJvbHMKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldE1pblNpemUob3BlcmF0aW9uc0NvbXBvc2l0ZS5jb21wdXRlU2l6ZSgKLQkJCQlTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKLQkJb3BlcmF0aW9uc0NvbXBvc2l0ZS5sYXlvdXQoKTsKLQl9Ci0JLyoqCi0JICogQ3JlYXRlcyBVSSB3aWRnZXRzIGZvciBwb2xpY3kgb3BlcmF0aW9ucyBvZiBlbnVtZXJhdGlvbiwgc2VsZWN0aW9uLCBhbmQgCi0JICogaWNvbnNlbGVjdGlvbiB0eXBlcwotCSAqIEBwYXJhbSBwbyB0aGUgcG9saWN5IG9wZXJhdGlvbiB0byBjcmVhdGUgYSBVSSB3aWRnZXQgZm9yCi0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljaWVzIHRoaXMgb3BlcmF0aW9uIHdpbGwgYXBwbHkgdG8KLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkU2VsZWN0aW9uT3BlcmF0aW9uVUkoTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb3MsIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwcykgewotCQkvL3VzZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIGluc3RhbmNlIGluIHRoZSBsaXN0IGZvciBkYXRhCi0JCUlQb2xpY3lPcGVyYXRpb24gcG8wID0gcG9zLmdldCgwKTsKLQkJLy9JU2VydmljZVBvbGljeSBzcDAgPSBwb3MuZ2V0KDApLmdldFNlcnZpY2VQb2xpY3koKTsKLQkJSURlc2NyaXB0b3IgZCA9IHBvMC5nZXREZXNjcmlwdG9yKCk7Ci0JCUNvbnRyb2wgc2VsZWN0aW9uQ29udHJvbDsKLQkJaWYgKHBvMC5nZXRPcGVyYXRpb25LaW5kKCkgPT0gSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmVudW1lcmF0aW9uKSB7Ci0JCQlMYWJlbCBsID0gbmV3IExhYmVsKG9wZXJhdGlvbnNDb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJCWwuc2V0VGV4dChkLmdldExvbmdOYW1lKCkgKyAiOiIpOyAvLyROT04tTkxTLTEkCi0JCQlHcmlkRGF0YSBjb21ib0dEID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgZmFsc2UpOwotCi0JCQlDb21ibyBjYiA9IG5ldyBDb21ibyhvcGVyYXRpb25zQ29tcG9zaXRlLCBTV1QuRFJPUF9ET1dOCi0JCQkJCXwgU1dULlJFQURfT05MWSk7Ci0JCQljYi5zZXRMYXlvdXREYXRhKGNvbWJvR0QpOwotCQkJc2VsZWN0aW9uQ29udHJvbCA9IGNiOwotCQkJY2IuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUl0ZW1MaXN0ID0gU2VydmljZVBvbGljeVBsYXRmb3JtCi0JCQkJCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlRW51bWVyYXRpb24ocG8wLmdldEVudW1lcmF0aW9uSWQoKSk7Ci0JCQlmb3IgKElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSA6IGVudW1JdGVtTGlzdCkgewotCQkJCWNiLmFkZChlbnVtSXRlbS5nZXRMb25nTmFtZSgpKTsKLQkJCX0KLQkJCWwuc2V0RW5hYmxlZChwbzAuaXNFbmFibGVkKHNwcykpOwotCQkJY2Iuc2V0RW5hYmxlZChwbzAuaXNFbmFibGVkKHNwcykpOwotCQkJaWYgKGNiLmlzRW5hYmxlZCgpKQotCQkJCWNiLnNldFRleHQoZ2V0RW51bWVyYXRpb25PcGVyYXRpb25DdXJyZW50U2VsZWN0aW9uKHBvMCkpOwotCQl9IGVsc2UgewotCQkJLy8gYSBzZWxlY3Rpb24gb3IgaWNvbgotCQkJQnV0dG9uIGNoZWNrQm94ID0gbmV3IEJ1dHRvbihvcGVyYXRpb25zQ29tcG9zaXRlLCBTV1QuQ0hFQ0spOwotCQkJc2VsZWN0aW9uQ29udHJvbCA9IGNoZWNrQm94OwotCQkJY2hlY2tCb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQlHcmlkRGF0YSBjaGVja0JveEdEID0gbmV3IEdyaWREYXRhKCk7Ci0JCQljaGVja0JveEdELmhvcml6b250YWxTcGFuID0gMjsKLQkJCWNoZWNrQm94LnNldExheW91dERhdGEoY2hlY2tCb3hHRCk7Ci0JCQljaGVja0JveC5zZXRUZXh0KGQuZ2V0TG9uZ05hbWUoKSk7Ci0JCQljaGVja0JveC5zZXRFbmFibGVkKHBvMC5pc0VuYWJsZWQoc3BzKSk7Ci0JCQlpZiAoY2hlY2tCb3guaXNFbmFibGVkKCkpCi0JCQkJY2hlY2tCb3gKLQkJCQkJCS5zZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uT3BlcmF0aW9uQ3VycmVudFNlbGVjdGlvbihwbzApKTsKLQotCQl9Ci0KLQkJc2VsZWN0aW9uQ29udHJvbC5zZXREYXRhKG5ldyBBY3Rpb25Db250cm9sRGF0YShzcHMsIHBvcykpOwotCi0JfQotCS8qKgotCSAqIEBwYXJhbSBzcCBhIHNlcnZpY2UgcG9saWN5IHdpdGggYSBzZWxlY3Rpb24gb3IgaWNvbnNlbGVjdGlvbiBvcGVyYXRpb24gZGVmaW5lZAotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBzZWxlY3RlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBnZXRTZWxlY3Rpb25PcGVyYXRpb25DdXJyZW50U2VsZWN0aW9uKElQb2xpY3lPcGVyYXRpb24gcG8pIHsKLQkJcmV0dXJuIHBvLmdldFN0YXRlSXRlbShwcm9qZWN0KS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC50cnVlIikgPyB0cnVlIDogZmFsc2U7IC8vJE5PTi1OTFMtMSQKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzcCBhIHNlcnZpY2UgcG9saWN5IHdpdGggYW4gZW51bWVyYXRpb24gb3BlcmF0aW9uIGRlZmluZWQKLQkgKiBAcmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW51bWVyYXRpb24gaXRlbQotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEVudW1lcmF0aW9uT3BlcmF0aW9uQ3VycmVudFNlbGVjdGlvbihJUG9saWN5T3BlcmF0aW9uIHBvKSB7Ci0JCVN0cmluZyBjdXJyZW50U2VsZWN0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1JdGVtTGlzdCA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybQotCQkuZ2V0SW5zdGFuY2UoKS5nZXRTdGF0ZUVudW1lcmF0aW9uKHBvLmdldEVudW1lcmF0aW9uSWQoKSk7Ci0JCWZvciAoSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtIDogZW51bUl0ZW1MaXN0KSB7Ci0JCQlpZiAoZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMocG8uZ2V0U3RhdGVJdGVtKHByb2plY3QpKSkgewotCQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBlbnVtSXRlbS5nZXRMb25nTmFtZSgpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBjdXJyZW50U2VsZWN0aW9uOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgVUkgd2lkZ2V0cyBmb3IgcG9saWN5IG9wZXJhdGlvbnMgb2YgY29tcGxleCB0eXBlCi0JICogQHBhcmFtIHBvIHRoZSBwb2xpY3kgb3BlcmF0aW9uIHRvIGNyZWF0ZSBhIFVJIHdpZGdldCBmb3IKLQkgKiBAcGFyYW0gc3BzIHRoZSBzZXJ2aWNlIHBvbGljaWVzIHRoaXMgb3BlcmF0aW9uIHdpbGwgYXBwbHkgdG8KLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkQ29tcGxleE9wZXJhdGlvblVJKExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9zLAotCQkJTGlzdDxJU2VydmljZVBvbGljeT4gc3BzKSB7Ci0JCUlQb2xpY3lPcGVyYXRpb24gcG8wID0gcG9zLmdldCgwKTsKLQkJSURlc2NyaXB0b3IgZCA9IHBvMC5nZXREZXNjcmlwdG9yKCk7Ci0JCUJ1dHRvbiBwdXNoQnV0dG9uID0gbmV3IEJ1dHRvbihvcGVyYXRpb25zQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0JCUdyaWREYXRhIHB1c2hCdXR0b25HRCA9IG5ldyBHcmlkRGF0YSgpOwotCQlwdXNoQnV0dG9uR0QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwdXNoQnV0dG9uLnNldExheW91dERhdGEocHVzaEJ1dHRvbkdEKTsKLQkJcHVzaEJ1dHRvbi5zZXRUZXh0KGQuZ2V0TG9uZ05hbWUoKSk7Ci0JCXB1c2hCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCXB1c2hCdXR0b24uc2V0RGF0YShuZXcgQWN0aW9uQ29udHJvbERhdGEoc3BzLCBwb3MpKTsKLQkJcHVzaEJ1dHRvbi5zZXRFbmFibGVkKHBvMC5pc0VuYWJsZWQoc3BzKSk7Ci0gIAotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovICAKLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCi0JfQotCi0JLyoqCi0JICogQHJldHVybiB0aGUgZXJyb3IgdGhhdCBzaG91bGQgYmUgc2hvd24sIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YWxpZGF0aW9uIGVycm9ycywKLQkgKiByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3IgZm9yIGEgc2VydmljZSBwb2xpY3kgdGhhdCBqdXN0IGNoYW5nZXMgc3RhdGUgKG9mdGVuIHRoZQotCSAqIHNlbGVjdGVkIHNlcnZpY2UgcG9saWN5KQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldEVycm9yKCkgewotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgU3RhdGVDaGFuZ2VMaXN0ZW5lciBpbXBsZW1lbnRzIElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyCi0JewotICAgIHB1YmxpYyB2b2lkIHBvbGljeVN0YXRlQ2hhbmdlKElTZXJ2aWNlUG9saWN5IHBvbGljeSwgU3RyaW5nIGtleSwgU3RyaW5nIG9sZFZhbHVlLCBTdHJpbmcgbmV3VmFsdWUpCi0gICAgewotICAgICAgLy8gV2UgYXJlIG5vdCBlbmFibGVkIGZvciBzdGF0ZSBjaGFuZ2UgZXZlbnRzIHNvIHdlIHdpbGwgaWdub3JlIHRoaXMgZXZlbnQuCi0gICAgICBpZiggIXN0YXRlQ2hhbmdlRW5hYmxlZCApIHJldHVybjsKLSAgICAgIAotICAgICAgZXJyb3IgPSB2YWxpZGF0ZUFsbFBvbGljaWVzKCBwb2xpY3kgKTsKLSAgICAgIAotICAgICAgLy9pbmZvcm0gbGlzdGVuZXJzIHRoYXQgYSBjb250cm9sIGhhcyBjaGFuZ2VkLCBhcyBjb21wb3NpdGUgbWF5IGJlIGluIGVycm9yIG5vdwotICAgICAgbGlzdGVuZXIud2lkZ2V0U2VsZWN0ZWQoIG51bGwgKTsKLSAgICB9CSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZDFhOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2Rpbmcgb2Ygc2VydmljZSBwb2xpY3kKLSAqIDIwMDgwMTA5ICAgMjEzNDk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzI1ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklQb2xpY3lPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbkluZm87Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwKLXsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBCYXNlT3BlcmF0aW9uSW1wbD4gICAgICAgICAgICAgYmFzZU9wZXJhdGlvbk1hcDsKLSAgcHJpdmF0ZSBNYXA8SVNlcnZpY2VQb2xpY3ksIFNldDxJUG9saWN5T3BlcmF0aW9uPj4gcG9saWN5Q2FjaGU7Ci0gIHByaXZhdGUgTWFwPFN0cmluZyxMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+PiAgICAgIHF1aWNrRml4ZXM7Ci0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsKCkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgIHBsYXRmb3JtICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgIFNlcnZpY2VQb2xpY3lSZWdpc3RyeVVJIHJlZ2lzdHJ5ICA9IG5ldyBTZXJ2aWNlUG9saWN5UmVnaXN0cnlVSSgpOwotICAgIFNldDxTdHJpbmc+ICAgICAgICAgICAgIHBvbGljeUlkcyA9IHBsYXRmb3JtLmdldEFsbFBvbGljeUlkcygpOwotICAgIAotICAgIGJhc2VPcGVyYXRpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJhc2VPcGVyYXRpb25JbXBsPigpOwotICAgIHBvbGljeUNhY2hlICAgICAgPSBuZXcgSGFzaE1hcDxJU2VydmljZVBvbGljeSwgU2V0PElQb2xpY3lPcGVyYXRpb24+PigpOwotICAgIHF1aWNrRml4ZXMgICAgICAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4+KCk7Ci0gICAgcmVnaXN0cnkubG9hZCggYmFzZU9wZXJhdGlvbk1hcCwgcXVpY2tGaXhlcyApOwotICAgIGNyZWF0ZU9wZXJhdGlvbkNhY2hlKCBwb2xpY3lJZHMgKTsKLSAgICAKLSAgICBwbGF0Zm9ybS5hZGRDaGlsZENoYW5nZUxpc3RlbmVyKCBuZXcgQ2hpbGRMaXN0ZW5lcigpLCBmYWxzZSApOwotICB9Ci0gICAgICAKLSAgcHVibGljIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gZ2V0UXVpY2tGaXhlcyggSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICBwbHVnaW5JZCA9IHN0YXR1cy5nZXRQbHVnaW4oKTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgID0gc3RhdHVzLmdldENvZGUoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIGtleSAgICAgID0gcGx1Z2luSWQgKyAiOiIgKyBjb2RlOyAvLyROT04tTkxTLTEkCi0gICAgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiByZXN1bHQgICA9IHF1aWNrRml4ZXMuZ2V0KCBrZXkgKTsKLSAgICAKLSAgICBpZiggcmVzdWx0ID09IG51bGwgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8SVF1aWNrRml4QWN0aW9uSW5mbz4oKTsKLSAgICAgIHF1aWNrRml4ZXMucHV0KCBrZXksIHJlc3VsdCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBnZXRBbGxPcGVyYXRpb25zKCkKLSAgewotICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IG5ldyBWZWN0b3I8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAKLSAgICBmb3IoIFNldDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25TZXQgOiBwb2xpY3lDYWNoZS52YWx1ZXMoKSApCi0gICAgewotICAgICAgb3BlcmF0aW9ucy5hZGRBbGwoIG9wZXJhdGlvblNldCApOyAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBvcGVyYXRpb25zOwotICB9Ci0gIAotICBwdWJsaWMgU2V0PElQb2xpY3lPcGVyYXRpb24+IGdldE9wZXJhdGlvbnNGb3JQb2xpY3koIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgYm9vbGVhbiBpc1dvcmtzcGFjZSApCi0gIHsKLSAgICBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5T3BlcmF0aW9ucyAgID0gcG9saWN5Q2FjaGUuZ2V0KCBwb2xpY3kgKTsKLSAgICBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gcmVzdWx0ICAgICAgICAgICAgID0gbmV3IEhhc2hTZXQ8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAKLSAgICBpZiggcG9saWN5T3BlcmF0aW9ucyAhPSBudWxsICkKLSAgICB7Ci0gICAgICByZXN1bHQuYWRkQWxsKCBwb2xpY3lPcGVyYXRpb25zICk7ICAKLSAgICAKLSAgICAgIGlmKCAhaXNXb3Jrc3BhY2UgKQotICAgICAgewotICAgICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogcG9saWN5T3BlcmF0aW9ucyApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggb3BlcmF0aW9uLmlzV29ya3NwYWNlT25seSgpICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQucmVtb3ZlKCBvcGVyYXRpb24gKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gZ2V0T3BlcmF0aW9uc0xpc3QoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljaWVzLCBib29sZWFuIGlzV29ya3NwYWNlICkKLSAgewotICAgIE1hcDxTdHJpbmcsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wZXJhdGlvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxJUG9saWN5T3BlcmF0aW9uPj4oKTsKLSAgICAKLSAgICBmb3IoIElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IHBvbGljaWVzICkKLSAgICB7Ci0gICAgICBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IHBvbGljeUNhY2hlLmdldCggcG9saWN5ICk7Ci0KLSAgICAgIGlmKCBvcGVyYXRpb25zICE9IG51bGwgKQotICAgICAgewotICAgICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9ucyApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIGlkICAgICAgICA9IG9wZXJhdGlvbi5nZXRJZCgpOwotICAgICAgICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gZW50cnlMaXN0ID0gb3BlcmF0aW9uTWFwLmdldCggaWQgKTsKLSAgICAgICAgCi0gICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCB0aGlzIG9wZXJhdGlvbiBpZiBpdCBpcyBmb3IgdGhlIHdvcmtzcGFjZSBwcmVmZXJlbmNlIHBhZ2Ugb3IKLSAgICAgICAgICAvLyBpZiB3ZSBhcmUgb24gdGhlIHByb2plY3QgcHJlZmVyZW5jZSBwYWdlIGFuZCB0aGUgb3BlcmF0aW9uIGlzIG5vdCBvbmx5Ci0gICAgICAgICAgLy8gZm9yIHRoZSB3b3Jrc3BhY2UgbGV2ZWwuCi0gICAgICAgICAgaWYoIGlzV29ya3NwYWNlIHx8ICFvcGVyYXRpb24uaXNXb3Jrc3BhY2VPbmx5KCkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBlbnRyeUxpc3QgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGVudHJ5TGlzdCA9IG5ldyBWZWN0b3I8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAgICAgICAgICAgb3BlcmF0aW9uTWFwLnB1dCggaWQsIGVudHJ5TGlzdCApOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGVudHJ5TGlzdC5hZGQoIG9wZXJhdGlvbiApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFZlY3RvcjxMaXN0PElQb2xpY3lPcGVyYXRpb24+Piggb3BlcmF0aW9uTWFwLnZhbHVlcygpICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVPcGVyYXRpb25DYWNoZSggU2V0PFN0cmluZz4gcG9saWN5SWRzICkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgICAgIHBsYXRmb3JtICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICBDb2xsZWN0aW9uPEJhc2VPcGVyYXRpb25JbXBsPiBvcGVyYXRpb25zID0gYmFzZU9wZXJhdGlvbk1hcC52YWx1ZXMoKTsKLSAgICAKLSAgICBmb3IoIEJhc2VPcGVyYXRpb25JbXBsIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMgKQotICAgIHsKLSAgICAgIFN0cmluZyAgcG9saWN5UGF0dGVybiA9IG9wZXJhdGlvbi5nZXRQb2xpY3lJZFBhdHRlcm4oKTsKLSAgICAgIFBhdHRlcm4gcGF0dGVybiAgICAgICA9IFBhdHRlcm4uY29tcGlsZSggcG9saWN5UGF0dGVybiApOwotICAgICAgCi0gICAgICBmb3IoIFN0cmluZyBwb2xpY3lJZCA6IHBvbGljeUlkcyApCi0gICAgICB7Ci0gICAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IHBhdHRlcm4ubWF0Y2hlciggcG9saWN5SWQgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBtYXRjaGVyLm1hdGNoZXMoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBJU2VydmljZVBvbGljeSAgICAgICAgcG9saWN5ICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIHBvbGljeUlkICk7Ci0gICAgICAgICAgU2V0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbnNTZXQgPSBwb2xpY3lDYWNoZS5nZXQocG9saWN5KTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggb3BlcmF0aW9uc1NldCA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zU2V0ID0gbmV3IEhhc2hTZXQ8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAgICAgICAgIHBvbGljeUNhY2hlLnB1dCggcG9saWN5LCBvcGVyYXRpb25zU2V0ICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG9wZXJhdGlvbnNTZXQuYWRkKCBuZXcgUG9saWN5T3BlcmF0aW9uSW1wbCggb3BlcmF0aW9uLCBwb2xpY3kgKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBDaGlsZExpc3RlbmVyIGltcGxlbWVudHMgSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIGNoaWxkQ2hhbmdlKExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkTGlzdCwgTGlzdDxCb29sZWFuPiBhZGRlZExpc3QpCi0gICAgewotICAgICAgU2V0PFN0cmluZz4gaWRTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZExpc3Quc2l6ZSgpOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gY2hpbGRMaXN0LmdldCggaW5kZXggKTsKLSAgICAgICAgYm9vbGVhbiAgICAgICAgYWRkZWQgID0gYWRkZWRMaXN0LmdldCggaW5kZXggKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBhZGRlZCApCi0gICAgICAgIHsKLSAgICAgICAgCi0gICAgICAgICAgaWRTZXQuYWRkKCBwb2xpY3kuZ2V0SWQoKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHBvbGljeUNhY2hlLnJlbW92ZSggcG9saWN5ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIGlkU2V0LnNpemUoKSA+IDAgKQotICAgICAgewotICAgICAgICBjcmVhdGVPcGVyYXRpb25DYWNoZSggaWRTZXQgKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lSZWdpc3RyeVVJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lSZWdpc3RyeVVJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ODE4YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UmVnaXN0cnlVSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDQyOCAgIDIyNzUwMSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBGaXhlZCB0b0xvd2VyQ2FzZSBMb2NhbGUgcHJvYmxlbS4KLSAqIDIwMDgwODI5ICAgMjQ1NzU0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEFkZGVkIGRlZmF1bHRpbmcgZm9yIHNlbGVjdGlvbiBvcGVyYXRpb25zLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLlJlZ2lzdHJ5VXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UmVnaXN0cnlVSQotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX1BPTElDWV9JRCA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQgKyAiLnNlcnZpY2Vwb2xpY3l1aSI7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgcHVibGljIHZvaWQgbG9hZCggTWFwPFN0cmluZywgQmFzZU9wZXJhdGlvbkltcGw+IG9wZXJhdGlvbk1hcCwgTWFwPFN0cmluZywgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPj4gcXVpY2tGaXhlcyApCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKFNFUlZJQ0VfUE9MSUNZX0lEKTsKLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogZWxlbWVudHMgKQotICAgIHsKLSAgICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW1lbnQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCBMb2NhbGUuRU5HTElTSCApOwotICAgICAgCi0gICAgICBpZiggZWxlbWVudE5hbWUuZXF1YWxzKCAic2VydmljZXBvbGljeXVpIikgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkcmVuID0gZWxlbWVudC5nZXRDaGlsZHJlbigpOwotICAgICAgICAKLSAgICAgICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNoaWxkLmdldE5hbWUoKS50b0xvd2VyQ2FzZSggTG9jYWxlLkVOR0xJU0ggKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbmFtZS5lcXVhbHMoICJvcGVyYXRpb24iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgbG9hZFNlcnZpY2VQb2xpY3l1aSggY2hpbGQsIG9wZXJhdGlvbk1hcCApOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmKCBuYW1lLmVxdWFscyggInF1aWNrZml4IikgKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgbG9hZFF1aWNrRml4KCBjaGlsZCwgcXVpY2tGaXhlcyApOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgdWkgZWxlbWVudCwgIiArIG5hbWUgKyAiIGZvdW5kLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IHVpIGVsZW1lbnQsICIgKyBlbGVtZW50TmFtZSArICIgZm91bmQuIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9IAotICB9Ci0gICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRTZXJ2aWNlUG9saWN5dWkoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgQmFzZU9wZXJhdGlvbkltcGw+IG9wZXJhdGlvbk1hcCApCi0gIHsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm4gICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgInBvbGljeXBhdHRlcm4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VPbmx5ICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJ3b3Jrc3BhY2Vvbmx5IiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgdXNlRGVmYXVsdFN0cmluZyA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiZGVmYXVsdGRhdGEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjaGlsZHJlbiAgICAgICAgID0gZWxlbWVudC5nZXRDaGlsZHJlbigpOwotICAgIElEZXNjcmlwdG9yICAgICAgICAgICAgIGRlc2NyaXB0b3IgICAgICAgPSBudWxsOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIGVudW1JZCAgICAgICAgICAgPSBudWxsOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIGRlZmF1bHRJdGVtICAgICAgPSBudWxsOwotICAgIGJvb2xlYW4gICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAgICAgICAgPSBmYWxzZTsKLSAgICBib29sZWFuICAgICAgICAgICAgICAgICBpY29uICAgICAgICAgICAgID0gZmFsc2U7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgbXVsdGlTZWxlY3QgICAgICA9IGZhbHNlOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudCAgIGVuYWJsZWRFbGVtZW50ICAgPSBudWxsOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudCAgIGxhdW5jaEVsZW1lbnQgICAgPSBudWxsOwotICAgIGJvb2xlYW4gICAgICAgICAgICAgICAgIGVycm9yICAgICAgICAgICAgPSBmYWxzZTsKLSAgICBib29sZWFuICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0RGF0YSAgID0gdHJ1ZTsKLSAgICAKLSAgICBpZiggdXNlRGVmYXVsdFN0cmluZyAhPSBudWxsICkKLSAgICB7Ci0gICAgICB1c2VEZWZhdWx0RGF0YSA9IHVzZURlZmF1bHRTdHJpbmcuZXF1YWxzKCAidHJ1ZSIgKTsgICAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkIDogY2hpbGRyZW4gKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hpbGQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCBMb2NhbGUuRU5HTElTSCApOwotICAgICAgCi0gICAgICBpZiggbmFtZS5lcXVhbHMoICJkZXNjcmlwdG9yIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBkZXNjcmlwdG9yID0gUmVnaXN0cnlVdGlscy5sb2FkRGVzY3JpcHRvciggY2hpbGQgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAiZW51bWVyYXRpb24iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGVudW1JZCA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGRlZmF1bHRJdGVtID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGNoaWxkLCAiZGVmYXVsdGl0ZW0iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmKCBlbnVtSWQgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHVpIGVudW1lcmF0aW9uIGVsZW1lbnQgaXMgbWlzc2luZyBpZCBhdHRyaWJ1dGUuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICB9ICAgICAgIAotICAgICAgfQotICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJzZWxlY3Rpb24iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpY29uVmFsdWUgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggY2hpbGQsICJpY29uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiggaWNvblZhbHVlICE9IG51bGwgJiYgaWNvblZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoICJ0cnVlIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgaWNvbiA9IHRydWU7Ci0gICAgICAgICAgdXNlRGVmYXVsdERhdGEgPSB0cnVlOwotICAgICAgICB9ICAgCi0gICAgICAgIAotICAgICAgICBkZWZhdWx0SXRlbSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImRlZmF1bHRpdGVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgZGVmYXVsdEl0ZW0KLSAgICAgICAgaWYoIGRlZmF1bHRJdGVtICE9IG51bGwgJiYgCi0gICAgICAgIAkhZGVmYXVsdEl0ZW0uZXF1YWxzKCBJUG9saWN5U3RhdGVFbnVtLkZBTFNFX0VOVU0pICYmIAotICAgICAgICAJIWRlZmF1bHRJdGVtLmVxdWFscyggSVBvbGljeVN0YXRlRW51bS5UUlVFX0VOVU0gKSApCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciggIlRoZSBkZWZhdWx0SXRlbSBhdHRyaWJ1dGUgb2YgYSBzZWxlY3Rpb24gZWxlbWVudCBtdXN0IGJlOiAiICsgSVBvbGljeVN0YXRlRW51bS5UUlVFX0VOVU0gKyAiIG9yICIgKyBJUG9saWN5U3RhdGVFbnVtLkZBTFNFX0VOVU0gKyAiLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAiY29tcGxleCIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxhdW5jaENsYXNzID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGNoaWxkLCAibGF1bmNoY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmKCBsYXVuY2hDbGFzcyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgdWkgZW51bWVyYXRpb24gZWxlbWVudCBpcyBtaXNzaW5nIGlkIGF0dHJpYnV0ZS4iICk7ICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbGF1bmNoRWxlbWVudCA9IGNoaWxkOwotICAgICAgfQotICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJlbmFibGVkIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBTdHJpbmcgbXVsdGlTZWxlY3RWYWx1ZSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgIm11bHRpc2VsZWN0IiApLnRvTG93ZXJDYXNlKCBMb2NhbGUuRU5HTElTSCApOyAvLyROT04tTkxTLTEkCi0gICAgICAgCi0gICAgICAgIGlmKCBtdWx0aVNlbGVjdFZhbHVlICE9IG51bGwgJiYgbXVsdGlTZWxlY3RWYWx1ZS5lcXVhbHMoICJ0cnVlIiApKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aVNlbGVjdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAKLSAgICAgICAgU3RyaW5nIGVuYWJsZWRDbGFzcyA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImVuYWJsZWRjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAKLSAgICAgICAgaWYoIGVuYWJsZWRDbGFzcyAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGVuYWJsZWRFbGVtZW50ID0gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IHVpIGVsZW1lbnQsICIgKyBuYW1lICsgIiBmb3VuZC4iICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBkZXNjcmlwdG9yID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGVsZW1lbnQgbXVzdCBoYXZlIGEgZGVzY3JpcHRvciBlbGVtZW50IGRlZmluZWQuIiApOyAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIGlkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiSWQgYXR0cmlidXRlIG5vdCBzcGVjaWZpZWQgaW4gc2VydmljZSBwb2xpY3kgdWkgb3BlcmF0aW9uIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICBlcnJvciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmKCBwb2xpY3lQYXR0ZXJuID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiSWQgYXR0cmlidXRlIG5vdCBzcGVjaWZpZWQgaW4gc2VydmljZSBwb2xpY3kgdWkgb3BlcmF0aW9uIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICBlcnJvciA9IHRydWU7ICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYoICggZW51bUlkID09IG51bGwgJiYgIXNlbGVjdGlvbiAmJiBsYXVuY2hFbGVtZW50ID09IG51bGwpICB8fAotICAgICAgICAoIGVudW1JZCAhPSBudWxsICYmIChzZWxlY3Rpb24gfHwgbGF1bmNoRWxlbWVudCAhPSBudWxsKSkgfHwKLSAgICAgICAgKCBzZWxlY3Rpb24gJiYgKGVudW1JZCAhPSBudWxsIHx8IGxhdW5jaEVsZW1lbnQgIT0gbnVsbCkpIHx8Ci0gICAgICAgICggbGF1bmNoRWxlbWVudCAhPSBudWxsICYmIChzZWxlY3Rpb24gJiYgZW51bUlkICE9IG51bGwpKSkKLSAgICB7Ci0gICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBlbGVtZW50IG11c3QgaGF2ZSBlaXRoZXIgYW4gZW51bWVyYXRpb24gZWxlbWVudCBvciBhIHNlbGVjdGlvbiBlbGVtZW50IG9yIGEgY29tcGxleCBlbGVtZW50IiApOyAvLyROT04tTkxTLTEkCi0gICAgICBlcnJvciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmKCAhIGVycm9yICkKLSAgICB7Ci0gICAgICBCYXNlT3BlcmF0aW9uSW1wbCBvcGVyYXRpb24gICAgICAgICAgPSBuZXcgQmFzZU9wZXJhdGlvbkltcGwoKTsKLSAgICAgIGJvb2xlYW4gICAgICAgICAgIHdvcmtzcGFjZU9ubHlWYWx1ZSA9IHdvcmtzcGFjZU9ubHkgIT0gbnVsbCAmJiB3b3Jrc3BhY2VPbmx5LmVxdWFscyggInRydWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgb3BlcmF0aW9uLnNldElkKCBpZCApOwotICAgICAgb3BlcmF0aW9uLnNldFBvbGljeUlkUGF0dGVybiggcG9saWN5UGF0dGVybiApOwotICAgICAgb3BlcmF0aW9uLnNldERlc2NyaXB0b3IoIGRlc2NyaXB0b3IgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRNdWx0aVNlbGVjdCggbXVsdGlTZWxlY3QgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRFbnVtZXJhdGlvbklkKCBlbnVtSWQgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRXb3Jrc3BhY2VPbmx5KCB3b3Jrc3BhY2VPbmx5VmFsdWUgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRVc2VEZWZhdWx0RGF0YSggdXNlRGVmYXVsdERhdGEgKTsKLSAgICAgIAotICAgICAgaWYoIGRlZmF1bHRJdGVtICE9IG51bGwgKQotICAgICAgewotICAgICAgICBvcGVyYXRpb24uc2V0RGVmYXVsdEl0ZW0oIGRlZmF1bHRJdGVtICk7ICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIHNlbGVjdGlvbiApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbnVtZXJhdGlvbklkKCAib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIG9wZXJhdGlvbi5zZXRTZWxlY3Rpb24oIGljb24gKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIGxhdW5jaEVsZW1lbnQgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRDb21wbGV4RWxlbWVudCggbGF1bmNoRWxlbWVudCApOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiggZW5hYmxlZEVsZW1lbnQgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbmFibGVkRWxlbWVudCggZW5hYmxlZEVsZW1lbnQgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgb3BlcmF0aW9uTWFwLnB1dCggaWQsIG9wZXJhdGlvbiApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRRdWlja0ZpeCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIE1hcDxTdHJpbmcsIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4+IHF1aWNrRml4ZXMgKQotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICBjaGlsZHJlbiA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oICJhY3Rpb24iICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIHBsdWdpbklkID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJwbHVnaW5pZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgY29kZSAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgImNvZGUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+IGZpeExpc3QgID0gbmV3IFZlY3RvcjxJUXVpY2tGaXhBY3Rpb25JbmZvPigpOwotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkIDogY2hpbGRyZW4gKQotICAgIHsKLSAgICAgIGxvYWRBY3Rpb24oIGNoaWxkLCBmaXhMaXN0ICk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwbHVnaW5JZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIk1pc3NpbmcgcGx1Z2luSWQgYXR0cmlidXRlIGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmKCBjb2RlID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiTWlzc2luZyBjb2RlIGF0dHJpYnV0ZSBmb3IgU2VydmljZSBwb2xpY3kgVUkgcXVpY2sgZml4IGV4dGVuc2lvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiggZml4TGlzdC5zaXplKCkgPT0gMCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGFjdGlvbiBlbGVtZW50IGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBrZXkgPSBwbHVnaW5JZCArICI6IiArIGNvZGU7IC8vJE5PTi1OTFMtMSQKLSAgICBxdWlja0ZpeGVzLnB1dCgga2V5LCBmaXhMaXN0ICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkQWN0aW9uKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiBmaXhMaXN0ICkKLSAgewotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGRlc2NFbGVtID0gZWxlbWVudC5nZXRDaGlsZHJlbiggImRlc2NyaXB0b3IiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICBjbGF6eiAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiggZGVzY0VsZW0gPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGRlc2NyaXB0b3IgZWxlbWVudCBmb3IgU2VydmljZSBwb2xpY3kgVUkgcXVpY2sgZml4IGV4dGVuc2lvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuOyAgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiggY2xhenogPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGNsYXNzIGF0dHJpYnV0ZSBmb3IgU2VydmljZSBwb2xpY3kgVUkgcXVpY2sgZml4IGV4dGVuc2lvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuOyAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIElEZXNjcmlwdG9yICAgICAgICAgICAgZGVzY3JpcHRvciA9IFJlZ2lzdHJ5VXRpbHMubG9hZERlc2NyaXB0b3IoIGVsZW1lbnQgKTsKLSAgICBRdWlja0ZpeEFjdGlvbkluZm9JbXBsIGFjdGlvbiAgICAgPSBuZXcgUXVpY2tGaXhBY3Rpb25JbmZvSW1wbCggZWxlbWVudCwgZGVzY3JpcHRvciApOwotICAgIAotICAgIGZpeExpc3QuYWRkKCBhY3Rpb24gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGVycm9yKCBTdHJpbmcgbWVzc2FnZSApCi0gIHsKLSAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoIG1lc3NhZ2UsIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNDVjMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNSAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEwNyAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICogMjAwNzEyMTIgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqIDIwMDkwMzA2ICAgMjI0NjMyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEZpeCBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2UgcGFnZSBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXc3RTUFVJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5Xc3RTUFVJUGx1Z2luTWVzc2FnZXMiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV3N0U1BVSVBsdWdpbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ0lFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BTUF9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BTUF9ERVBFTkRFTkNJRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1BfVFJFRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BTUF9ERVRBSUxTVFJFRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNZX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVNfTk9ORTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMSU5LX0NPTkZJR1dPUktTUEFDRV9TRVRUSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FTkFCTEVfUFJPSkVDVF9TRVRUSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9RRkxJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9RRklYX05PU1VHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfREVUQUlMUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFUE9MSUNJRVNfUEFHRV9ERVNDUklQVElPTjsKLQotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1dzdFNQVUlQbHVnaW5NZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FlMDBlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1dzdFNQVUlQbHVnaW5NZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcxMDI1IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSMgMjAwNzExMDcgMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotIyAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotIyAyMDA3MTIxMiAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotIyAyMDA5MDMwNiAgIDIyNDYzMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBGaXggU2VydmljZSBQb2xpY2llcyBwcmVmZXJlbmNlIHBhZ2UgVUkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBTZXJ2aWNlIFBvbGljaWVzIFByZWZlcmVuY2UgcGFnZQotIwotCi1MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVTQ1JJUFRJT049RGVzY3JpcHRpb246Ci1MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTPURlcGVuZGVuY2llczoKLSNleGFtcGxlIG1lc3NhZ2UgYmVsb3cgaXMgQ29tcGxpYW5jZSBsZXZlbCAiU3VnZ2VzdCBjb21wbGlhbmNlIiByZXF1aXJlcyBXUy1JIEFQIDEuMCAgWyBzdWdnZXN0fGlnbm9yZSBdCi1TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTPXswfSBcInsxfVwiIHJlcXVpcmVzIHsyfSB7M30gW3s0fV0KLSNleGFtcGxlIG1lc3NhZ2UgYmVsb3cgaXMgV1MtSSBTU0JQIENvbXBsaWFuY2UgbGV2ZWwgIlN1Z2dlc3QgY29tcGxpYW5jZSIgcmVxdWlyZXMgV1MtSSBBUCAxLjAgIFsgc3VnZ2VzdHxpZ25vcmUgXQotU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ1lfRVJST1I9IHswfSB7MX0gXCJ7Mn1cIiByZXF1aXJlcyB7M30gezR9IFt7NX1dCi1TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTX05PTkU9Tm9uZQotVE9PTFRJUF9QU1BfREVTQ1JJUFRJT049RGVzY3JpcHRpb24gb2Ygc2VsZWN0ZWQgdHJlZSBub2RlCi1UT09MVElQX1BTUF9ERVBFTkRFTkNJRVM9RGVwZW5kZW5jaWVzIG9mIHNlbGVjdGVkIHRyZWUgbm9kZQotVE9PTFRJUF9QU1BfVFJFRT1TZWxlY3QgYSB0cmVlIG5vZGUgYW5kIHVzZSB0aGUgcGFuZWwgb24gdGhlIHJpZ2h0IHRvIGRlZmluZSByZWxhdGVkIHByZWZlcmVuY2VzCi1UT09MVElQX1BTUF9ERVRBSUxTVFJFRT1TZWxlY3QgYSB0cmVlIG5vZGUgYW5kIHVzZSB0aGUgcGFuZWwgYmVsb3cgdG8gZGVmaW5lIHJlbGF0ZWQgcHJlZmVyZW5jZXMKLUxBQkVMX1FGTElOSz1RdWljayBGaXgKLVRFWFRfUUZJWF9OT1NVRz1ObyBTdWdnZXN0aW9ucy4gU2VlIHRoZSBlcnJvciBtZXNzYWdlIGFuZCBhbnkgbGlzdGVkIGRlcGVuZGVuY2llcyBmb3IgezF9IHRvIHJlc29sdmUgdGhlIGVycm9yLgotVEVYVF9ERVRBSUxTPWRldGFpbHMKLUxJTktfQ09ORklHV09SS1NQQUNFX1NFVFRJTkdTPUNvbmZpZ3VyZSBXb3Jrc3BhY2UgU2V0dGluZ3MuLi4KLUxBQkVMX0VOQUJMRV9QUk9KRUNUX1NFVFRJTkdTPUVuYWJsZSBwcm9qZWN0IHNwZWNpZmljIHNldHRpbmdzCi1MQUJFTF9TRVJWSUNFUE9MSUNJRVNfUEFHRV9ERVNDUklQVElPTj1TcGVjaWZ5IHF1YWxpdHkgb2Ygc2VydmljZSByZWxhdGVkIHNldHRpbmdzOgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3ByZWZlcmVuY2VzL1NlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3ByZWZlcmVuY2VzL1NlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NzA2NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcmVmZXJlbmNlcy9TZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNSAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEwNyAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWNpZXNDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cwotCQlJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyCi0KLXsKLQlTZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUgcHJlZmVyZW5jZVBhZ2U7Ci0JQ29tcG9zaXRlIHN1cGVyUGFyZW50OwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBR0VfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0JICogCi0JICogQHBhcmFtIHBhcmVudENvbXBvc2l0ZQotCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkgewotCQlwcmVmZXJlbmNlUGFnZSA9IG5ldyBTZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUoc3VwZXJwYXJlbnQsIG51bGwsIHRoaXMpOwotCQlvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOwotCQl0aGlzLnN1cGVyUGFyZW50ID0gc3VwZXJwYXJlbnQ7Ci0JCXJldHVybiBwcmVmZXJlbmNlUGFnZTsKLQotCX0KLQotCS8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkgewotCQlwcmVmZXJlbmNlUGFnZS5wZXJmb3JtRGVmYXVsdHMoKTsKLQkJSVN0YXR1cyBlcnJvciA9IHByZWZlcmVuY2VQYWdlLmdldEVycm9yKCk7Ci0JCWlmIChlcnJvciA9PSBudWxsKSB7Ci0JCQlzdXBlci5zZXRWYWxpZCh0cnVlKTsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJfSBlbHNlIHsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCkpOwotCQkJc3VwZXIuc2V0VmFsaWQoZmFsc2UpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqIAotCSAqIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSB7Ci0JCXN0b3JlVmFsdWVzKCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpIHsKLQkJU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCkuY29tbWl0Q2hhbmdlcygpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDYW5jZWwgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICogCi0JICogQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1DYW5jZWwoKSB7Ci0JCVNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmRpc2NhcmRDaGFuZ2VzKCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKSB7Ci0JCXN0b3JlVmFsdWVzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSB7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG9rVG9MZWF2ZSgpIHsKLQkJcmV0dXJuIHByZWZlcmVuY2VQYWdlLmdldEVycm9yKCkgPT0gbnVsbDsKLQotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQkJcHJlZmVyZW5jZVBhZ2UuZGlzcG9zZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCUlTdGF0dXMgZXJyb3IgPSBwcmVmZXJlbmNlUGFnZS5nZXRFcnJvcigpOwotCQlpZiAoZXJyb3IgPT0gbnVsbCkgewotCQkJc3VwZXIuc2V0VmFsaWQodHJ1ZSk7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpKTsKLQkJCXN1cGVyLnNldFZhbGlkKGZhbHNlKTsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3Byb3BlcnRpZXMvU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3Byb3BlcnRpZXMvU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYTBhZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcm9wZXJ0aWVzL1NlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEwNyAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEwOCAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcm9wZXJ0aWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkNvbnRyb2xFbmFibGVTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZ1BhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JTWVzc2FnZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuUHJlZmVyZW5jZXNVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuUHJvcGVydHlQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWNpZXNDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLldzdFNQVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkucHJlZmVyZW5jZXMuU2VydmljZVBvbGljaWVzUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlIGV4dGVuZHMgUHJvcGVydHlQYWdlIGltcGxlbWVudHMKLQkJU2VsZWN0aW9uTGlzdGVuZXIgewotCi0JcHJpdmF0ZSBTZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUgcHJvcGVydHlQYWdlOwotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQUdFX0lEID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllcy5XU0lDb21wbGlhbmNlUHJvcGVydHlQYWdlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgQnV0dG9uIGZVc2VQcm9qZWN0U2V0dGluZ3M7Ci0JcHJpdmF0ZSBMaW5rIGZDaGFuZ2VXb3Jrc3BhY2VTZXR0aW5nczsKLQlwcml2YXRlIENvbnRyb2xFbmFibGVTdGF0ZSBmQmxvY2tFbmFibGVTdGF0ZTsKLQlwcml2YXRlIENvbnRyb2wgZkNvbmZpZ3VyYXRpb25CbG9ja0NvbnRyb2w7Ci0JcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0KLQkJCS5nZXRJbnN0YW5jZSgpOwotCi0JcHVibGljIFNlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZSgpIHsKLQkJZkJsb2NrRW5hYmxlU3RhdGUgPSBudWxsOwotCX0KLQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkgewotCQlwcm9qZWN0ID0gKElQcm9qZWN0KSBnZXRFbGVtZW50KCkuZ2V0QWRhcHRlcihJUHJvamVjdC5jbGFzcyk7Ci0JCWJvb2xlYW4gcHJvamVjdFByZWZzRW5hYmxlZCA9IHBsYXRmb3JtCi0JCQkJLmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0KTsKLQkJaWYgKCFwcm9qZWN0UHJlZnNFbmFibGVkKSB7Ci0JCQkvL2VuYWJsZSB0aGVtIHNvIHRoYXQgc2VydmljZSBwb2xpY2llcyBjb21wb3NpdGUgVUkgcmVmbGVjdHMgCi0JCQkvL2N1cnJlbnRseSBzZXQgcHJvamVjdCBwcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHNob3dzIHdvcmtzcGFjZSAKLQkJCS8vcHJlZmVyZW5jZXMgYW5kIHdvdWxkIG5lZWQgdG8gcmVkcmF3IHRyZWUgd2hlbiB1c2VyIGVuYWJsZXMgdGhlbSAKLQkJCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgdHJ1ZSk7Ci0JCX0KLQkJcHJvcGVydHlQYWdlID0gbmV3IFNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZShzdXBlcnBhcmVudCwgcHJvamVjdCwgdGhpcyk7Ci0JCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgcHJvamVjdFByZWZzRW5hYmxlZCk7Ci0JCWZDb25maWd1cmF0aW9uQmxvY2tDb250cm9sID0gcHJvcGVydHlQYWdlOwotCQllbmFibGVQcmVmZXJlbmNlQ29udGVudChwcm9qZWN0UHJlZnNFbmFibGVkKTsKLQkJZlVzZVByb2plY3RTZXR0aW5ncy5zZXRTZWxlY3Rpb24ocHJvamVjdFByZWZzRW5hYmxlZCk7Ci0JCXVwZGF0ZUxpbmtWaXNpYmlsaXR5KCk7Ci0KLQkJb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsKLQkJcmV0dXJuIHByb3BlcnR5UGFnZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlwcm9wZXJ0eVBhZ2Uud2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQkJcHJvcGVydHlQYWdlLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBva1RvTGVhdmUoKSB7Ci0JCXJldHVybiBwcm9wZXJ0eVBhZ2UuZ2V0RXJyb3IoKSA9PSBudWxsOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkgewotCQlpZiAoIWZVc2VQcm9qZWN0U2V0dGluZ3MuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgZmFsc2UpOwotCQl9Ci0JCXN0b3JlVmFsdWVzKCk7Ci0JfQotCi0JLyoqCi0JICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENhbmNlbCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1DYW5jZWwoKSB7Ci0JCXBsYXRmb3JtLmRpc2NhcmRDaGFuZ2VzKHByb2plY3QpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpIHsKLQkJZW5hYmxlUHJvamVjdFNwZWNpZmljU2V0dGluZ3MoZmFsc2UpOwotCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIGZhbHNlKTsKLQkJcHJvcGVydHlQYWdlLnBlcmZvcm1EZWZhdWx0cygpOwotCQlJU3RhdHVzIGVycm9yID0gcHJvcGVydHlQYWdlLmdldEVycm9yKCk7Ci0JCWlmIChlcnJvciA9PSBudWxsKSB7Ci0JCQlzdXBlci5zZXRWYWxpZCh0cnVlKTsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJfSBlbHNlIHsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCkpOwotCQkJc3VwZXIuc2V0VmFsaWQoZmFsc2UpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSB7Ci0JCWlmICghZlVzZVByb2plY3RTZXR0aW5ncy5nZXRTZWxlY3Rpb24oKSkgewotCQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCBmYWxzZSk7Ci0JCX0KLQkJc3RvcmVWYWx1ZXMoKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkgewotCQlwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKHByb2plY3QpOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJSVN0YXR1cyBlcnJvciA9IHByb3BlcnR5UGFnZS5nZXRFcnJvcigpOwotCQlpZiAoZXJyb3IgPT0gbnVsbCkgewotCQkJc3VwZXIuc2V0VmFsaWQodHJ1ZSk7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpKTsKLQkJCXN1cGVyLnNldFZhbGlkKGZhbHNlKTsKLQkJfQotCi0JfQotCi0JcHJvdGVjdGVkIExhYmVsIGNyZWF0ZURlc2NyaXB0aW9uTGFiZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQkvLwkJCWZQYXJlbnRDb21wb3NpdGU9IHBhcmVudDsKLQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWNvbXBvc2l0ZS5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKLQkJY29tcG9zaXRlCi0JCQkJLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSkpOwotCi0JCVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IHNlKSB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IHNlKSB7Ci0JCQkJZW5hYmxlUHJvamVjdFNwZWNpZmljU2V0dGluZ3MoZlVzZVByb2plY3RTZXR0aW5ncwotCQkJCQkJLmdldFNlbGVjdGlvbigpKTsKLQkJCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsCi0JCQkJCQlmVXNlUHJvamVjdFNldHRpbmdzLmdldFNlbGVjdGlvbigpKTsKLQkJCX0KLQkJfTsKLQotCQlmVXNlUHJvamVjdFNldHRpbmdzID0gbmV3IEJ1dHRvbihjb21wb3NpdGUsIFNXVC5DSEVDSyk7Ci0JCWZVc2VQcm9qZWN0U2V0dGluZ3MuYWRkU2VsZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQlmVXNlUHJvamVjdFNldHRpbmdzCi0JCQkJLnNldFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX0VOQUJMRV9QUk9KRUNUX1NFVFRJTkdTKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAxOwotCQlnZC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJZlVzZVByb2plY3RTZXR0aW5ncy5zZXRMYXlvdXREYXRhKGdkKTsKLQkJZkNoYW5nZVdvcmtzcGFjZVNldHRpbmdzID0gY3JlYXRlTGluayhjb21wb3NpdGUsCi0JCQkJV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLkxJTktfQ09ORklHV09SS1NQQUNFX1NFVFRJTkdTKTsKLQkJZkNoYW5nZVdvcmtzcGFjZVNldHRpbmdzLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5FTkQsCi0JCQkJU1dULkNFTlRFUiwgZmFsc2UsIGZhbHNlKSk7Ci0KLQkJTGFiZWwgaG9yaXpvbnRhbExpbmUgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuU0VQQVJBVE9SCi0JCQkJfCBTV1QuSE9SSVpPTlRBTCk7Ci0JCWhvcml6b250YWxMaW5lLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsCi0JCQkJdHJ1ZSwgZmFsc2UsIDIsIDEpKTsKLQkJaG9yaXpvbnRhbExpbmUuc2V0Rm9udChjb21wb3NpdGUuZ2V0Rm9udCgpKTsKLQotCQlyZXR1cm4gc3VwZXIuY3JlYXRlRGVzY3JpcHRpb25MYWJlbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgTGluayBjcmVhdGVMaW5rKENvbXBvc2l0ZSBjb21wb3NpdGUsIFN0cmluZyB0ZXh0KSB7Ci0JCUxpbmsgbGluayA9IG5ldyBMaW5rKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQlsaW5rLnNldEZvbnQoY29tcG9zaXRlLmdldEZvbnQoKSk7Ci0JCWxpbmsuc2V0VGV4dCgiPEE+IiArIHRleHQgKyAiPC9BPiIpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQlsaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlvcGVuV29ya3NwYWNlUHJlZmVyZW5jZXMoKExpbmspIGUud2lkZ2V0KTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlvcGVuV29ya3NwYWNlUHJlZmVyZW5jZXMoKExpbmspIGUud2lkZ2V0KTsKLQkJCX0KLQkJfSk7Ci0JCXJldHVybiBsaW5rOwotCX0KLQotCXByaXZhdGUgdm9pZCB1cGRhdGVMaW5rVmlzaWJpbGl0eSgpIHsKLQkJaWYgKGZDaGFuZ2VXb3Jrc3BhY2VTZXR0aW5ncyA9PSBudWxsCi0JCQkJfHwgZkNoYW5nZVdvcmtzcGFjZVNldHRpbmdzLmlzRGlzcG9zZWQoKSkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJZkNoYW5nZVdvcmtzcGFjZVNldHRpbmdzLnNldEVuYWJsZWQoIXVzZVByb2plY3RTZXR0aW5ncygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VQcm9qZWN0U2V0dGluZ3MoKSB7Ci0JCXJldHVybiBmVXNlUHJvamVjdFNldHRpbmdzLmdldFNlbGVjdGlvbigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGVuYWJsZVByZWZlcmVuY2VDb250ZW50KGJvb2xlYW4gZW5hYmxlKSB7Ci0JCWlmIChlbmFibGUpIHsKLQkJCWlmIChmQmxvY2tFbmFibGVTdGF0ZSAhPSBudWxsKSB7Ci0JCQkJZkJsb2NrRW5hYmxlU3RhdGUucmVzdG9yZSgpOwotCQkJCWZCbG9ja0VuYWJsZVN0YXRlID0gbnVsbDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChmQmxvY2tFbmFibGVTdGF0ZSA9PSBudWxsKSB7Ci0JCQkJZkJsb2NrRW5hYmxlU3RhdGUgPSBDb250cm9sRW5hYmxlU3RhdGUKLQkJCQkJCS5kaXNhYmxlKGZDb25maWd1cmF0aW9uQmxvY2tDb250cm9sKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGVuYWJsZVByb2plY3RTcGVjaWZpY1NldHRpbmdzKAotCQkJYm9vbGVhbiB1c2VQcm9qZWN0U3BlY2lmaWNTZXR0aW5ncykgewotCQlmVXNlUHJvamVjdFNldHRpbmdzLnNldFNlbGVjdGlvbih1c2VQcm9qZWN0U3BlY2lmaWNTZXR0aW5ncyk7Ci0JCWVuYWJsZVByZWZlcmVuY2VDb250ZW50KHVzZVByb2plY3RTcGVjaWZpY1NldHRpbmdzKTsKLQkJdXBkYXRlTGlua1Zpc2liaWxpdHkoKTsKLQkJZG9TdGF0dXNDaGFuZ2VkKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9TdGF0dXNDaGFuZ2VkKCkgewotCQlpZiAodXNlUHJvamVjdFNldHRpbmdzKCkpIHsKLQkJCUlTdGF0dXMgc3RhdHVzOwotCQkJc3RhdHVzID0gKHByb3BlcnR5UGFnZS5nZXRFcnJvcigpID09IG51bGwpID8gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLAotCQkJCQlTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuUExVR0lOX0lELCAiIikgOiBwcm9wZXJ0eVBhZ2UgLy8kTk9OLU5MUy0xJAotCQkJCQkuZ2V0RXJyb3IoKTsKLQkJCXVwZGF0ZVN0YXR1cyhzdGF0dXMpOwotCQl9IGVsc2UgewotCQkJdXBkYXRlU3RhdHVzKG5ldyBTdGF0dXMoSVN0YXR1cy5PSywKLQkJCQkJU2VydmljZVBvbGljeUFjdGl2YXRvclVJLlBMVUdJTl9JRCwgIiIpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVN0YXR1cyhJU3RhdHVzIHN0YXR1cykgewotCQlib29sZWFuIHZhbGlkID0gKHN0YXR1cyA9PSBudWxsIHx8ICFzdGF0dXMubWF0Y2hlcyhJU3RhdHVzLkVSUk9SKSk7Ci0JCXNldFZhbGlkKHZhbGlkKTsKLQkJYXBwbHlUb1N0YXR1c0xpbmUodGhpcywgc3RhdHVzKTsKLQl9Ci0KLQkvKioKLQkgKiBBcHBsaWVzIHRoZSBzdGF0dXMgdG8gdGhlIHN0YXR1cyBsaW5lIG9mIGEgZGlhbG9nIHBhZ2UuCi0JICogQHBhcmFtIHBhZ2UgdGhlIGRpYWxvZyBwYWdlCi0JICogQHBhcmFtIHN0YXR1cyB0aGUgc3RhdHVzIHRvIGFwcGx5Ci0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFwcGx5VG9TdGF0dXNMaW5lKERpYWxvZ1BhZ2UgcGFnZSwgSVN0YXR1cyBzdGF0dXMpIHsKLQkJU3RyaW5nIG1lc3NhZ2UgPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotCQlpZiAobWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkgewotCQkJbWVzc2FnZSA9IG51bGw7Ci0JCX0KLQkJc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkgewotCQljYXNlIElTdGF0dXMuT0s6Ci0JCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5OT05FKTsKLQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVN0YXR1cy5XQVJOSU5HOgotCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuV0FSTklORyk7Ci0JCQlwYWdlLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCWJyZWFrOwotCQljYXNlIElTdGF0dXMuSU5GTzoKLQkJCXBhZ2Uuc2V0TWVzc2FnZShtZXNzYWdlLCBJTWVzc2FnZVByb3ZpZGVyLklORk9STUFUSU9OKTsKLQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwYWdlLnNldE1lc3NhZ2UobnVsbCk7Ci0JCQlwYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGZpbmFsIHZvaWQgb3BlbldvcmtzcGFjZVByZWZlcmVuY2VzKE9iamVjdCBkYXRhKSB7Ci0JCVN0cmluZyBpZCA9IFNlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlLlBBR0VfSUQ7Ci0JCVByZWZlcmVuY2VzVXRpbC5jcmVhdGVQcmVmZXJlbmNlRGlhbG9nT24oZ2V0U2hlbGwoKSwgaWQsCi0JCQkJbmV3IFN0cmluZ1tdIHsgaWQgfSwgZGF0YSkub3BlbigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcm9wZXJ0aWVzL1NlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcm9wZXJ0aWVzL1NlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDUwNWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJvcGVydGllcy9TZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLlByb3BlcnR5VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIgZXh0ZW5kcyBQcm9wZXJ0eVRlc3RlcgotewotCi0gIHB1YmxpYyBib29sZWFuIHRlc3QoT2JqZWN0IHJlY2VpdmVyLCBTdHJpbmcgcHJvcGVydHksIE9iamVjdFtdIGFyZ3MsIE9iamVjdCBleHBlY3RlZFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmlzRW5hYmxlZCggcmVjZWl2ZXIgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MzE4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVuYWJsZWRDbGFzcyBhdHRyaWJ1dGUgb2YgdGhlCi0gKiBlbmFibGVkIGVsZW1lbnQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElFbmFibGVPcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3RlZFBvbGljaWVzIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIHBvbGljaWVzLgotICAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JTGF1bmNoT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2YzNmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotLyoqCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgbGF1bmNoQ2xhc3MgYXR0cmlidXRlIG9mCi0gKiB0aGUgY29tcGxleCBlbGVtZW50LgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJTGF1bmNoT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhpcyBjb21wbGV4IG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3RlZFBvbGljaWVzIGEgbGlzdCBvZiB0aGUgc2VydmljZSBwb2xpY2llcyB0aGF0IHdlcmUgc2VsZWN0ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBsYXVuY2goIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjVmN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICogMjAwODA1MTYgICAyMzI2MDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ2xlYW4gdXAgamF2YSBkb2MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSByZXByZXNlbnRzIGEgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHRoYXQgaGFzIGJlZW4gZGVmaW5lZAotICogaW4gdGhlIHBsdWdpbi54bWwgbWV0YSBkYXRhLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5T3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiAKLSAgICogSW5kaWNhdGVzIHRoZSBraW5kIG9mIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiB0aGF0IHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuCi0gICAqIDx1bD4KLSAgICogPGxpPmVudW1lcmF0aW9uOiBpbmRpY2F0ZXMgdGhhdCBhIGxpc3Qgb2YgZW51bWVyYXRlZCB2YWx1ZXMgaXMgYXNzb2NpYXRlZC48L2xpPgotICAgKiA8bGk+c2VsZWN0aW9uOiBpbmRpY2F0ZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggc29tZQotICAgKiBib29sZWFuIG9wZXJhdGlvbjwvbGk+Ci0gICAqIDxsaT4gaWNvblNlbGVjdGlvbjogdGhpcyBvcGVyYXRpb24gaXMgc2ltaWxhciB0byB0aGUgc2VsZWN0aW9uIG9wZXJhdGlvbgotICAgKiBleGNlcHQgdGhhdCBpdCB2aXN1YWwgc3RhdGUgaXMgcmVuZGVyZWQgdmlhIGFuIGljb24uPC9saT4KLSAgICogPGxpPmNvbXBsZXg6IGluZGljYXRlcyB0aGF0IHNvbWUgY29tcGxleCBvcGVyYXRpb24gaXMgcmVxdWlyZWQgdG8gcmVuZGVyCi0gICAqIGFuZCBwZXJzaXN0IHNvbWUgcG9saWN5IGRhdGEuICBUaGlzIG9wZXJhdGlvbiB3aWxsIGJlIHJlbmRlcmVkIHZpYSBhIFVJCi0gICAqIGJ1dHRvbi4gIFdoZW4gdGhpcyBidXR0b24gaXMgc2VsZWN0ZWQgdGhlIGxhdW5jaCBjbGFzcyBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgKiBvcGVyYXRpb24gaXMgY2FsbGVkLjwvbGk+ICAgCi0gICAqIDx1bC8+IAotICAgKi8KLSAgcHVibGljIGVudW0gT3BlcmF0aW9uS2luZCB7IGVudW1lcmF0aW9uLCBzZWxlY3Rpb24sIGljb25TZWxlY3Rpb24sIGNvbXBsZXggfTsKLSAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB1bmlxdWUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBpcyBhIHdvcmtzcGFjZSBvbmx5IG9wZXJhdGlvbiBvciBub3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBzaG91bGQgb25seSBhcHBlYXIKLSAgICogaW4gdGhlIHdvcmtzcGFjZSBzZXJ2aWNlIHBvbGljeSBwcmVmZXJlbmNlIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dvcmtzcGFjZU9ubHkoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUga2luZCBvZiBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGtpbmQgb2Ygc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvbktpbmQgZ2V0T3BlcmF0aW9uS2luZCgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBlbnVtIElEIGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZW51bWVyYXRpb24gSUQgaWYgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gaXMKLSAgICogYW4gZW51bWVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVudW1lcmF0aW9uSWQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBpZiB0aGlzIGlzIGFuIGVudW1lcmF0aW9uIGl0IHJldHVybnMgdGhlIGRlZmF1bHQgaXRlbSBmb3IgdGhpcwotICAgKiBlbnVtZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEl0ZW0oKTsKLSAgCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGlmIHRoaXMgaXMgYSBjb21wbGV4IG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3RlZFBvbGljaWVzIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIHBvbGljaWVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgbGF1bmNoT3BlcmF0aW9uKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0ZWRQb2xpY2llcyB0aGUgc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcy4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBpZCBwYXR0ZXJuIGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9uLgotICAgKiBBbGwgc2VydmljZSBwb2xpY3kgSUQgdGhhdCBtYXRjaCB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGFzc29jaWF0ZWQKLSAgICogd2l0aCB0aGlzIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UG9saWN5SWRQYXR0ZXJuKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIHNlcnZpY2UgcG9saWN5IGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc2VydmljZSBwb2xpY3kgZm9yIHRoaXMgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFNlcnZpY2VQb2xpY3koKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgY3VycmVudCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IGlmIHRoaXMgaXMgcHJvamVjdCBwcm9wZXJ0eSBwYWdlIGl0ZW0uCi0gICAqIEZvciB0aGUgcHJlZmVyZW5jZSBwYWdlIGNvbnRleHQgbnVsbCBzaG91bGQgYmUgc3BlY2lmaWVkLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlSXRlbSggSVByb2plY3QgcHJvamVjdCApOwotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdCB0aGUgcHJvamVjdCBpZiB0aGlzIGlzIHByb2plY3QgcHJvcGVydHkgcGFnZSBpdGVtLgotICAgKiBGb3IgdGhlIHByZWZlcmVuY2UgcGFnZSBjb250ZXh0IG51bGwgc2hvdWxkIGJlIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIHN0YXRlSXRlbSB0aGUgaXRlbS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXRlSXRlbSggSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHN0YXRlSXRlbSApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gdXNlcyBkZWZhdWx0IHN0YXRlIG9yIG5vdC4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHVzZXMgZGVmYXVsdCBzdGF0ZSBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VzZURlZmF1bHREYXRhKCk7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZmY3NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IGV4dGVuZGVycyB0byBhZGQgcXVpY2sgZml4ZXMgdG8gdGhlIHNlcnZpY2UgcG9saWN5IHVpCi0gKiBmcmFtZXdvcmsuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElRdWlja0ZpeEFjdGlvbgotewotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoaXMgYWN0aW9uIHRvIHJlc29sdmUKLSAgICogYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5IHByb2JsZW0uCi0gICAqIAotICAgKiBAcGFyYW0gcG9saWN5IFRoZSBwb2xpY3kgdGhhdCB0aGlzIHF1aWNrIGZpeCBhcHBsaWVzIHRvLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWN0aW9uKCBJU2VydmljZVBvbGljeSBwb2xpY3kpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3ZGYzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBzdG9yZSBxdWljayBmaXggYWN0aW9uIGluZm9ybWF0aW9uLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUXVpY2tGaXhBY3Rpb25JbmZvCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIGEgZGVzY3JpcHRvciBmb3IgdGhpcyBxdWljayBmaXguCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBkZXNjcmlwdG9yIGZvciB0aGlzIHF1aWNrIGZpeC4KLSAgICovCi0gIHB1YmxpYyBJRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgYWN0aW9uIGZvciB0aGlzIHF1aWNrIGZpeC4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYWN0aW9uIGZvciB0aGlzIHF1aWNrIGZpeC4KLSAgICovCi0gIHB1YmxpYyBJUXVpY2tGaXhBY3Rpb24gZ2V0QWN0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYmIxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICogMjAwODA1MTYgICAyMzI2MDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ2xlYW4gdXAgamF2YSBkb2MKLSAqIDIwMDkxMDA5ICAgMjc3MTk4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgUmVtb3ZlIElTdGFydHVwIGNvZGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSSBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvclVJIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgU2VydmljZVBvbGljeUFjdGl2YXRvclVJKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0JICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotCSAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQkJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBuYW1lKSB7Ci0JCQl0cnkgewotCQkJCVVSTCBpbnN0YWxsVVJMID0gcGx1Z2luLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0JCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCSAgICAgcmV0dXJuIG51bGw7Ci0JICAgfQotCSB9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvclVJIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotCS8qKgotCSAqIExvZ3MgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBwbHVnaW4uCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiBAcGFyYW0gZXhjCi0JICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvciggU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIDAsIG1lc3NhZ2UsIGV4YyApOwotICAgIAotICAgIGdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coc3RhdHVzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWI1NmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotLyoqCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnZXQgU2VydmljZSBwb2xpY3kgVUkgaW5mb3JtYXRpb24uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVBsYXRmb3JtVUkKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgaW5zdGFuY2U7Ci0gIAotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbCBwbGF0Zm9ybVVJOwotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSgpCi0gIHsKLSAgICBwbGF0Zm9ybVVJID0gbmV3IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbCgpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBVSSBvYmplY3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBVSSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBpbnN0YW5jZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyBhbGwgdGhlIG9wZXJhdGlvbnMgZm9yIGFsbCBrbm93biBwb2xpY2llcy4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhbGwgdGhlIG9wZXJhdGlvbnMgZm9yIGFsbCBrbm93biBwb2xpY2llcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGdldEFsbE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtVUkuZ2V0QWxsT3BlcmF0aW9ucygpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbiBvcGVyYXRpb24gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5Ci0gICAqIGFuZCBoYXMgdGhlIHNwZWNpZmllZCBpZC4KLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY3kgdGhlIHNlcnZpY2UgcG9saWN5Ci0gICAqIEBwYXJhbSBpZCB0aGUgb3BlcmF0aW9uIGlkLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG9wZXJhdGlvbiBiZWluZyBzZWFyY2hlZCBmb3Igb3IgbnVsbCBpcyBub3QgZm91bmQuIAotICAgKi8KLSAgcHVibGljIElQb2xpY3lPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCBJU2VydmljZVBvbGljeSBwb2xpY3ksIFN0cmluZyBpZCApCi0gIHsKLSAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbnMgPSBnZXRPcGVyYXRpb25zKCBwb2xpY3ksIHRydWUgKTsKLSAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgIHJlc3VsdCAgICAgPSBudWxsOwotICAgIAotICAgIGZvciggSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcGVyYXRpb25zICkKLSAgICB7Ci0gICAgICBpZiggb3BlcmF0aW9uLmdldElkKCkuZXF1YWxzKCBpZCApICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgZm9yIHRoaXMgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgcG9saWN5Ci0gICAqIEBwYXJhbSBpc1dvcmtzcGFjZSB0cnVlIGlmIHRoaXMgaXMgYSBwcmVmZXJlbmNlIHBhZ2UgY29udGV4dAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgdGhpcyBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBnZXRPcGVyYXRpb25zKCBJU2VydmljZVBvbGljeSBwb2xpY3ksIGJvb2xlYW4gaXNXb3Jrc3BhY2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBWZWN0b3I8SVBvbGljeU9wZXJhdGlvbj4oIHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0ZvclBvbGljeSggcG9saWN5LCBpc1dvcmtzcGFjZSApICk7Ci0gIH0KLSAgIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgYSBsaXN0IG9mIGxpc3QgcG9saWN5IG9wZXJhdGlvbnMgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAotICAgKiB0aGUgc3BlY2lmaWVkIHNlcnZpY2UgcG9saWNpZXMuCi0gICAqIAotICAgKiBAcGFyYW0gcG9saWNpZXMKLSAgICogQHBhcmFtIGlzV29ya3NwYWNlCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2Ygb3BlcmF0aW9ucy4gIEVhY2ggbGlzdAotICAgKiBhcyB0aGUgdG9wIGxldmVsIGNvbnRhaW5zIGxpc3Qgb2YgSVBvbGljeU9wZXJhdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIAotICAgKiBzYW1lIGJhc2Ugb3BlcmF0aW9uLiAgSG93ZXZlciwgdGhleSB3aWxsIGVhY2ggaGF2ZSBkaWZmZXJlbnQgYXNzb2NpYXRlZAotICAgKiBwb2xpY2llcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGdldE9wZXJhdGlvbnNMaXN0KCBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY2llcywgYm9vbGVhbiBpc1dvcmtzcGFjZSApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggcG9saWNpZXMsIGlzV29ya3NwYWNlICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgcXVpY2sgZml4IGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgc3RhdHVzIG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBxdWljayBmaXhlcyBmb3IgdGhpcyBzdGF0dXMgb2JqZWN0LiAgSWYKLSAgICogbm8gcXVpY2sgZml4ZXMgYXJlIGF2YWlsYWJsZSBhbiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiBnZXRRdWlja0ZpeGVzKCBJU3RhdHVzIHN0YXR1cyApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1VSS5nZXRRdWlja0ZpeGVzKCBzdGF0dXMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2MzUyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMiAgIDIwOTg1OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGl2aXRpZXMuSUFjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpdml0aWVzLklJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotLyoqCi0gKiAKLSAqIFVzZWQgYnkgdGhlIEVjbGlwc2UgYWN0aXZpdGllcyBmcmFtZXdvcmsuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQWN0aXZpdHlVdGlscwotewotICAvKioKLSAgICogUmV0dXJucyBhIHNlcnZpY2UgcG9saWN5IGZpbHRlciBiYXNlZCBvbiB0aGUgRWNsaXBzZSBhY3Rpdml0aWVzIHNldHRpbmdzLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgZmlsdGVyIGJhc2VkIG9uIHRoZSBFY2xpcHNlIGFjdGl2aXRpZXMgc2V0dGluZ3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElGaWx0ZXIgZ2V0Q3VycmVudEFjdGl2aXRpZXNGaWx0ZXIoKQotICB7Ci0gICAgZmluYWwgSVdvcmtiZW5jaCAgICAgICB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgIGZpbmFsIElBY3Rpdml0eU1hbmFnZXIgbWFuYWdlciAgID0gd29ya2JlbmNoLmdldEFjdGl2aXR5U3VwcG9ydCgpLmdldEFjdGl2aXR5TWFuYWdlcigpOwotICAgICAgICAgCi0gICAgcmV0dXJuIG5ldyBJRmlsdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gICAgICB7IAotICAgICAgICBJSWRlbnRpZmllciBpZGVudGlmaWVyID0gbWFuYWdlci5nZXRJZGVudGlmaWVyKCBwb2xpY3kuZ2V0SWQoKSApOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT0gbnVsbCA/IGZhbHNlIDogaWRlbnRpZmllci5pc0VuYWJsZWQoKTsKLSAgICAgIH0gIAotICAgIH07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmJjNDlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMTEgICAyMTg1MjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA1MTYgICAyMzI2MDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ2xlYW4gdXAgamF2YSBkb2MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBjb250YWlucyB1dGlsaXR5IG1ldGhvZCBmb3Igc2VydmljZSBwb2xpY2llcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlVXRpbHMKLXsKLSAgLyoqCi0gICAqIFNvcnRzIGEgbGlzdCBvZiBzZXJ2aWNlIHBvbGljaWVzLgotICAgKiAKLSAgICogQHBhcmFtIHVuc29ydGVkTGlzdCBhbiB1bnNvcnRlZCBsaXN0Ci0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygc29ydGVkIHNlcnZpY2UgcG9saWNpZXMgYmFzZSBub3QgdGhlaXIgbG9uZyBuYW1lcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTGlzdDxJU2VydmljZVBvbGljeT4gc29ydExpc3QoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHVuc29ydGVkTGlzdCApCi0gIHsKLSAgICBUcmVlU2V0PElTZXJ2aWNlUG9saWN5PiBzb3J0ZWRTZXQgPSBuZXcgVHJlZVNldDxJU2VydmljZVBvbGljeT4oIG5ldyBDb21wYXJlU2VydmljZVBvbGljeSgpICk7Ci0gICAgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiAgc29ydGVkTGlzdCA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgCi0gICAgc29ydGVkU2V0LmFkZEFsbCggdW5zb3J0ZWRMaXN0ICk7Ci0gICAgc29ydGVkTGlzdC5hZGRBbGwoIHNvcnRlZFNldCApOwotICAgIAotICAgIHJldHVybiBzb3J0ZWRMaXN0OwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb21wYXJlU2VydmljZVBvbGljeSBpbXBsZW1lbnRzIENvbXBhcmF0b3I8SVNlcnZpY2VQb2xpY3k+Ci0gIHsKLSAgICBwdWJsaWMgaW50IGNvbXBhcmUoSVNlcnZpY2VQb2xpY3kgYXJnMCwgSVNlcnZpY2VQb2xpY3kgYXJnMSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZTAgPSBhcmcwLmdldERlc2NyaXB0b3IoKS5nZXRMb25nTmFtZSgpOwotICAgICAgU3RyaW5nIG5hbWUxID0gYXJnMS5nZXREZXNjcmlwdG9yKCkuZ2V0TG9uZ05hbWUoKTsKLSAgICAgIAotICAgICAgcmV0dXJuIG5hbWUwLmNvbXBhcmVUbyggbmFtZTEgKTsgCi0gICAgfSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzc5NjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwODE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUaHUgTm92IDI5IDExOjU5OjMzIEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZjNlZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAzLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IKLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnM7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNjdiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBzY2hlbWEvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OGJhYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNywgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9U2VydmljZSBQb2xpY3kgLSBDb3JlCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLVNFUlZJQ0VfUE9MSUNZX05BTUU9U2VydmljZSBwb2xpY3kKLQotVFJVRV9TSE9SVE5BTUU9dHJ1ZQotRkFMU0VfU0hPUlROQU1FPWZhbHNlCi1JR05PUkVfU0hPUlROQU1FPWlnbm9yZQotV0FSTl9TSE9SVE5BTUU9d2FybgotRVJST1JfU0hPUlROQU1FPWVycm9yCi1JR05PUkVfTE9OR05BTUU9SWdub3JlCi1XQVJOX0xPTkdOQU1FPVdhcm4KLUVSUk9SX0xPTkdOQU1FPUVycm9yCi0KLVNVR19JR05PUkVfU0hPUlROQU1FPWlnbm9yZQotU1VHX1NVR0dFU1RfU0hPUlROQU1FPXN1Z2dlc3QKLVNVR19SRVFVSVJFX1NIT1JUTkFNRT1yZXF1aXJlCi1TVUdfSUdOT1JFX0xPTkdOQU1FPUlnbm9yZSBjb21wbGlhbmNlCi1TVUdfU1VHR0VTVF9MT05HTkFNRT1TdWdnZXN0IGNvbXBsaWFuY2UKLVNVR19SRVFVSVJFX0xPTkdOQU1FPVJlcXVpcmUgY29tcGxpYW5jZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YmJjNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNlcnZpY2Vwb2xpY3kiIG5hbWU9IiVTRVJWSUNFX1BPTElDWV9OQU1FIiBzY2hlbWE9InNjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QiLz4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnNlcnZpY2Vwb2xpY3kiPgotICAgICA8c2VydmljZVBvbGljeT4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIiAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ib3JnLmVjbGlwc2Uud3N0LnRydWUiPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC50cnVlIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlVFJVRV9TSE9SVE5BTUUiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LmZhbHNlIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlRkFMU0VfU0hPUlROQU1FIiAvPgotICAgICAgIDwvZW51bWVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVJR05PUkVfU0hPUlROQU1FIiBsb25nTmFtZT0iJUlHTk9SRV9MT05HTkFNRSIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3Qud2FybiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJVdBUk5fU0hPUlROQU1FIiBsb25nTmFtZT0iJVdBUk5fTE9OR05BTUUiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlRVJST1JfU0hPUlROQU1FIiBsb25nTmFtZT0iJUVSUk9SX0xPTkdOQU1FIiAvPgotICAgICAgIDwvZW51bWVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuc3VnZ2VzdGlvbkVudW0iIAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSI+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVTVUdfSUdOT1JFX1NIT1JUTkFNRSIgbG9uZ05hbWU9IiVTVUdfSUdOT1JFX0xPTkdOQU1FIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJVNVR19TVUdHRVNUX1NIT1JUTkFNRSIgbG9uZ05hbWU9IiVTVUdfU1VHR0VTVF9MT05HTkFNRSIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVTVUdfUkVRVUlSRV9TSE9SVE5BTUUiIGxvbmdOYW1lPSIlU1VHX1JFUVVJUkVfTE9OR05BTUUiIC8+Ci0gICAgICAgPC9lbnVtZXJhdGlvbj4KLSAgICAgPC9zZXJ2aWNlUG9saWN5PgotICAgPC9leHRlbnNpb24+ICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zY2hlbWEvc2VydmljZVBvbGljeS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWM3ZTgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5Ij4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kiIGlkPSJzZXJ2aWNlUG9saWN5IiBuYW1lPSJTZXJ2aWNlIHBvbGljeSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBhbGxvd3MgZXh0ZW5kZXJzIHRvIGRlZmluZSBzZXJ2aWNlIHBvbGljaWVzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy9zY2hlbWEvZXhwcmVzc2lvbkxhbmd1YWdlLmV4c2QiLz4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2VydmljZVBvbGljeSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJzZXJ2aWNlUG9saWN5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icG9saWN5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJlbnVtZXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibG9hZExpc3RlbmVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJlbmFibGVtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InBvbGljeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRlc2NyaXB0b3IiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icmVsYXRpb25zaGlwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0YXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJlbnRQb2xpY3lJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhcmVudCBwb2xpY3kgaWQgZm9yIHRoaXMgcG9saWN5LiAgSWYgdGhpcyBpcyBhIHJvb3QgcG9saWN5IHRoaXMgYXR0cmlidXRlIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSB1bmlxdWUgaWQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZW51bUxpc3RJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJZiB0aGlzIHBvbGljeSZhcG9zO3Mgc3RhdGUgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVudW1lcmF0aW9uIHRoZW4gdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBpZCBvZiB0aGlzIGVudW1lcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlZmF1bHRFbnVtSWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBlbnVtTGlzdElkIGlzIGFsc28gc3BlY2lmaWVkLiAgSXQgaXMgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnVtIHZhbHVlIGRlZmluZWQgYnkgdGhlIGVudW1lcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11dGFibGUiIHR5cGU9ImJvb2xlYW4iIHVzZT0iZGVmYXVsdCIgdmFsdWU9ImZhbHNlIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgaWYgdGhpcyBwb2xpY3kgaGFzIG11dGFibGUgZGF0YSBvciBub3QuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImRlc2NyaXB0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2hvcnROYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc2VydmljZSBwb2xpY3kuICBOb3RlOiBpZiBhIHNob3J0IG5hbWUgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBkZWZhdWx0ZWQgdG8gdGhlIHZhbHVlIG9mIHRoZSBsb25nIG5hbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9uZ05hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGxvbmcgbmFtZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5LiAgTm90ZTogaWYgYSBsb25nIG5hbWUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBzaG9ydE5hbWUgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29udGV4dEhlbHBJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5IGlmIGl0IGlzIHJlcXVpcmVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb25QYXRoIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgcGx1Z2luIHJlbGF0aXZlIHBhdGggdG8gc29tZSBpY29uIGZpbGUgZm9yIHRoaXMgc2VydmljZSBwb2xpY3ksIG9yIGFsdGVybmF0aXZlbHksIGEgY29tcGxldGUgcGx1Z2luIHBhdGggdG8gdGhlIGljb24gZmlsZSwgaW4gZm9ybWF0IHBsdWdpbjovL3BsdWdpbk5hbWUvcGx1Z2luUmVsYXRpdmVQYXRoIChleGFtcGxlIHBsdWdpbjovL2NvbS5teWNvbXBhbnkubXlwbHVnaW4vaWNvbnMvaWNvbi5naWYpCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InJlbGF0aW9uc2hpcCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3RhdGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBzZXJ2aWNlIHBvbGljeSBhbmQgdGhlIHN0YXRlcyBvZiBvdGhlciBzZXJ2aWNlIHBvbGljaWVzLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ0YXJnZXRQb2xpY3kiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImVudW1MaXN0IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ0YXJnZXRQb2xpY3kiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpdGVtTGlzdCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZW51bWVyYXRpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJpdGVtIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2hvcnROYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvbmdOYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJsb2FkTGlzdGVuZXIiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIGludGVyZmFjZS4gIFRoZSBsb2FkIG1ldGhvZCBvZiB0aGlzIGNsYXNzIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIFNlcnZpY2VQb2xpY3kgZnJhbWV3b3JrIGlzIGZpcnN0IGxvYWRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZW5hYmxlbWVudCI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgSW5jbHVkZSBlbmFibGVtZW50IGNyaXRlcmlhIGZvciB3aGVuIHRoZSBwb2xpY3kgc2hvdWxkIGJlIHNob3duCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJzdGF0ZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGFsbG93cyB0aGUgZXh0ZW5kZXIgdG8gZGVmaW5lIHN0YXRlIGRhdGEgZm9yIHRoaXMgcG9saWN5LgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJrZXkiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGtleSBmb3IgdGhpcyBzdGF0ZSBkYXRhLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIHN0YXRlIGRhdGEuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIDEuMAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRGVzY3JpcHRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRGVzY3JpcHRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZDM3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0Rlc2NyaXB0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDMwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci0KLXB1YmxpYyBjbGFzcyBEZXNjcmlwdG9ySW1wbCBpbXBsZW1lbnRzIElEZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nICBzaG9ydE5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nICBsb25nTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgIGRlc2NyaXB0aW9uOwotICBwcml2YXRlIFN0cmluZyAgaWNvblBhdGg7Ci0gIHByaXZhdGUgU3RyaW5nICBpY29uQnVuZGxlSWQ7Ci0gIHByaXZhdGUgU3RyaW5nICBjb250ZXh0SGVscElkOwotICBwcml2YXRlIGJvb2xlYW4gaGFzQ2hhbmdlZCA9IGZhbHNlOwotICAgIAotICBwdWJsaWMgYm9vbGVhbiBoYXNDaGFuZ2VkKCkKLSAgewotICAgIHJldHVybiBoYXNDaGFuZ2VkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXNldEhhc0NoYW5nZWQoKQotICB7Ci0gICAgaGFzQ2hhbmdlZCA9IGZhbHNlOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCkKLSAgewotICAgIHJldHVybiBzaG9ydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3J0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuc2hvcnROYW1lID0gbmFtZTsKLSAgICAKLSAgICBpZiggbG9uZ05hbWUgPT0gbnVsbCApIGxvbmdOYW1lID0gc2hvcnROYW1lOwotICAgIAotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldExvbmdOYW1lKCkKLSAgewotICAgIHJldHVybiBsb25nTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExvbmdOYW1lKFN0cmluZyBsb25nTmFtZSkKLSAgewotICAgIHRoaXMubG9uZ05hbWUgPSBsb25nTmFtZTsKLSAgICAKLSAgICBpZiggc2hvcnROYW1lID09IG51bGwgKSBzaG9ydE5hbWUgPSBsb25nTmFtZTsKLSAgICAKLSAgICBoYXNDaGFuZ2VkID0gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pCi0gIHsKLSAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWNvblBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGljb25QYXRoOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJY29uUGF0aChTdHJpbmcgaWNvblBhdGgpCi0gIHsKLSAgICB0aGlzLmljb25QYXRoID0gaWNvblBhdGg7Ci0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWNvbkJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBpY29uQnVuZGxlSWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEljb25CdW5kbGVJZChTdHJpbmcgaWNvbkJ1bmRsZUlkKQotICB7Ci0gICAgdGhpcy5pY29uQnVuZGxlSWQgPSBpY29uQnVuZGxlSWQ7Ci0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGV4dEhlbHBJZCgpCi0gIHsKLSAgICByZXR1cm4gY29udGV4dEhlbHBJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHRIZWxwSWQoU3RyaW5nIGNvbnRleHRIZWxwSWQpCi0gIHsKLSAgICB0aGlzLmNvbnRleHRIZWxwSWQgPSBjb250ZXh0SGVscElkOwotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9FbnVtZXJhdGlvblN0YXRlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9FbnVtZXJhdGlvblN0YXRlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2VjOTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRW51bWVyYXRpb25TdGF0ZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDYyNSAgIDIzODQ4MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBBZGRpbmcgdGhyZWFkIHNhZmV0eSB0byB0aGUgc2VydmljZSBwbGF0Zm9ybSBhcGkuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLQotcHVibGljIGNsYXNzIEVudW1lcmF0aW9uU3RhdGVJbXBsIGltcGxlbWVudHMgSVBvbGljeVN0YXRlRW51bQotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWQUxVRSA9IElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXk7ICAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBlbnVtSWQ7Ci0gIHByaXZhdGUgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0OwotICBwcml2YXRlIElQb2xpY3lTdGF0ZSAgICAgICAgICAgICAgICBzdGF0ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdElkOwotICAKLSAgcHVibGljIEVudW1lcmF0aW9uU3RhdGVJbXBsKCBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0sIFN0cmluZyBlbnVtSWQsIFN0cmluZyBkZWZhdWx0SWQsIElQb2xpY3lTdGF0ZSBzdGF0ZSApCi0gIHsKLSAgICB0aGlzLmVudW1JZCAgICA9IGVudW1JZDsKLSAgICB0aGlzLmVudW1MaXN0ICA9IHBsYXRmb3JtLmdldFN0YXRlRW51bWVyYXRpb24oIGVudW1JZCApOwotICAgIHRoaXMuc3RhdGUgICAgID0gc3RhdGU7Ci0gICAgdGhpcy5kZWZhdWx0SWQgPSBlbnVtTGlzdC5nZXQoMCkuZ2V0SWQoKTsKLSAgIAotICAgIGlmKCBkZWZhdWx0SWQgIT0gbnVsbCApCi0gICAgewotICAgICAgdGhpcy5kZWZhdWx0SWQgPSBkZWZhdWx0SWQ7Ci0gICAgICBzdGF0ZS5wdXREZWZhdWx0VmFsdWUoIFZBTFVFLCBkZWZhdWx0SWQsIGZhbHNlICk7IAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtTGlzdCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBlbnVtSXRlbS5pc0RlZmF1bHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICB0aGlzLmRlZmF1bHRJZCA9IGVudW1JdGVtLmdldElkKCk7Ci0gICAgICAgICAgc3RhdGUucHV0RGVmYXVsdFZhbHVlKCBWQUxVRSwgIHRoaXMuZGVmYXVsdElkLCBmYWxzZSApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtSWQoKQotICB7Ci0gICAgcmV0dXJuIGVudW1JZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdElkKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0SWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRJdGVtKCBTdHJpbmcgaXRlbUlkICkKLSAgewotICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtIDogZW51bUxpc3QgKQotICAgIHsKLSAgICAgIFN0cmluZyBlbnVtSXRlbUlkID0gZW51bUl0ZW0uZ2V0SWQoKTsKLSAgICAgIAotICAgICAgaWYoIGVudW1JdGVtSWQuZXF1YWxzKCBpdGVtSWQgKSApCi0gICAgICB7Ci0gICAgICAgIHN0YXRlLnB1dFZhbHVlKCBWQUxVRSwgZW51bUl0ZW1JZCApOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0YXRlRW51bWVyYXRpb25JdGVtIGdldEN1cnJlbnRJdGVtKCkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICBjdXJyZW50RW51bSA9IHN0YXRlLmdldFZhbHVlKCBWQUxVRSApOwotICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBjdXJyZW50SXRlbSA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtTGlzdCApCi0gICAgewotICAgICAgaWYoIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBjdXJyZW50RW51bSApICkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEl0ZW0gPSBlbnVtSXRlbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjdXJyZW50SXRlbTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Mb2NhbFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0xvY2FsVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlN2E0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0xvY2FsVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMzAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA2MjYgICAyMzg2MzUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgTG9jYWxseSBhZGRlZCBzZXJ2aWNlIHBvbGljeSBub2RlcyBtZXRhIGRhdGEgY29saWRpbmcgd2l0aCBzdGF0ZSBkYXRhLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5UmVsYXRpb25zaGlwSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExvY2FsVXRpbHMKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfS0VZICAgICAgPSAib3JnLmVjbGlwc2Uud3N0LmxvY2FsLiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX0lEU19LRVkgPSAibG9jYWxJZHMiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJFTlRfS0VZICAgID0gInBhcmVudElkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVUQUJMRV9LRVkgICA9ICJtdXRhYmxlIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JfS0VZICAgICA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPTkdOQU1FX0tFWSAgPSAibG9uZ25hbWUiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9SVE5BTUVfS0VZID0gInNob3J0bmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElDT05QQVRIX0tFWSAgPSAiaWNvbnBhdGgiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJQ09OQlVORF9LRVkgID0gImljb25idW5kbGVpZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFTFBJRF9LRVkgICAgPSAiY29udGV4dGhlbHBpZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOVU1MSVNUX0tFWSAgPSAiZW51bWxpc3RpZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkVOVU1fS0VZICAgPSAiZGVmYXVsdGVudW1pZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9LRVkgICAgICAgPSAicmVsIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX1NVRkZJWCA9ICIudGFyZ2V0IjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX1NVRkZJWCA9ICIuc291cmNlIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0TG9jYWxQb2xpY3lJZHMoKQotICB7Ci0gICAgTGlzdDxTdHJpbmc+ICAgICAgICByZXN1bHQgICAgICA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOwotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBnZXRQcmVmZXJlbmNlcygpOwotICAgIFN0cmluZyAgICAgICAgICAgICAga2V5ICAgICAgICAgPSBCQVNFX0tFWSArIExPQ0FMX0lEU19LRVk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBpZHNWYWx1ZSAgICA9IHByZWZlcmVuY2VzLmdldCgga2V5ICwgIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCAhaWRzVmFsdWUuZXF1YWxzKCAiIiApICkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0cmluZ0xpc3QoIGlkc1ZhbHVlICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlTG9jYWxJZHMoIExpc3Q8U3RyaW5nPiBsb2NhbElkcyApCi0gIHsgCi0gICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGdldFByZWZlcmVuY2VzKCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBrZXkgICAgICAgICA9IEJBU0VfS0VZICsgTE9DQUxfSURTX0tFWTsKLSAgICAKLSAgICBpZiggbG9jYWxJZHMuc2l6ZSgpID4gMCApCi0gICAgewotICAgICAgcHJlZmVyZW5jZXMucHV0KCBrZXksIGNyZWF0ZVNwYWNlRGVsaW1pdGVkU3RyaW5nKCBsb2NhbElkcyApICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlQWxsUHJlZmVyZW5jZVBvbGljaWVzKCBTdHJpbmcgc3RhcnRzV2l0aCwgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmcyApCi0gIHsKLSAgICBpZiggc3RhcnRzV2l0aCA9PSBudWxsICkgc3RhcnRzV2l0aCA9IEJBU0VfS0VZOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBwcmVmcyA9PSBudWxsID8gZ2V0UHJlZmVyZW5jZXMoKSA6IHByZWZzOwotICAgICAgU3RyaW5nW10gICAgICAgICAgICBrZXlzICAgICAgICA9IHByZWZlcmVuY2VzLmtleXMoKTsKLSAgICAgIAotICAgICAgZm9yKCBTdHJpbmcga2V5IDoga2V5cyApCi0gICAgICB7Ci0gICAgICAgIGlmKCBrZXkuc3RhcnRzV2l0aCggc3RhcnRzV2l0aCApICkKLSAgICAgICAgewotICAgICAgICAgIHByZWZlcmVuY2VzLnJlbW92ZSgga2V5ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIHNlcnZpY2UgcG9saWN5IGxvY2FsIHByZWZlcmVuY2VzLiIsIGV4Yyk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlTG9jYWxQb2xpY3koIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSApCi0gIHsKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gZ2V0UHJlZmVyZW5jZXMoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIHBvbGljeUlkICAgID0gcG9saWN5LmdldElkKCk7Ci0gICAgSURlc2NyaXB0b3IgICAgICAgICBkZXNjcmlwdG9yICA9IHBvbGljeS5nZXREZXNjcmlwdG9yKCk7Ci0gICAgSVNlcnZpY2VQb2xpY3kgICAgICBwYXJlbnQgICAgICA9IHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKTsKLSAgICAKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIFBBUkVOVF9LRVksICBwYXJlbnQgPT0gbnVsbCA/IG51bGwgOiBwYXJlbnQuZ2V0SWQoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgTVVUQUJMRV9LRVksICIiICsgcG9saWN5LmdldFBvbGljeVN0YXRlKCkuaXNNdXRhYmxlKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgRU5VTUxJU1RfS0VZLCBwb2xpY3kuZ2V0RW51bUxpc3RJZCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBERUZFTlVNX0tFWSwgcG9saWN5LmdldERlZmF1bHRFbnVtSWQoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgREVTQ1JfS0VZLCBkZXNjcmlwdG9yLmdldERlc2NyaXB0aW9uKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIFNIT1JUTkFNRV9LRVksIGRlc2NyaXB0b3IuZ2V0U2hvcnROYW1lKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIExPTkdOQU1FX0tFWSwgZGVzY3JpcHRvci5nZXRMb25nTmFtZSgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBJQ09OUEFUSF9LRVksIGRlc2NyaXB0b3IuZ2V0SWNvblBhdGgoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgSUNPTkJVTkRfS0VZLCBkZXNjcmlwdG9yLmdldEljb25CdW5kbGVJZCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBIRUxQSURfS0VZLCBkZXNjcmlwdG9yLmdldENvbnRleHRIZWxwSWQoKSApOwotICAgIHNhdmVSZWxhdGlvbnNoaXBzKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIHBvbGljeS5nZXRSZWxhdGlvbnNoaXBzKCkgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvYWRMb2NhbFBvbGljeSggU3RyaW5nIHBvbGljeUlkLCBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtICkKLSAgewotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBnZXRQcmVmZXJlbmNlcygpOwotICAgIFNlcnZpY2VQb2xpY3lJbXBsICAgcG9saWN5ICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBwb2xpY3lJZCApOwotICAgIERlc2NyaXB0b3JJbXBsICAgICAgZGVzY3JpcHRvciAgPSAoRGVzY3JpcHRvckltcGwpcG9saWN5LmdldERlc2NyaXB0b3IoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIHBhcmVudElkICAgID0gcHJlZmVyZW5jZXMuZ2V0KCBjcmVhdGVLZXkoIHBvbGljeUlkLCBQQVJFTlRfS0VZKSwgbnVsbCApOwotICAgIAotICAgIGlmKCBwYXJlbnRJZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBJU2VydmljZVBvbGljeSBwYXJlbnRQb2xpY3kgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBwYXJlbnRJZCApOwotICAgICAgCi0gICAgICBwb2xpY3kuc2V0UGFyZW50KCAoU2VydmljZVBvbGljeUltcGwpcGFyZW50UG9saWN5ICk7Ci0gICAgfQotICAgIAotICAgIHBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLnNldE11dGFibGUoIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oIGNyZWF0ZUtleSggcG9saWN5SWQsIE1VVEFCTEVfS0VZKSwgdHJ1ZSApICk7Ci0gICAgcG9saWN5LnNldEVudW1MaXN0SWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgRU5VTUxJU1RfS0VZKSwgbnVsbCApICk7Ci0gICAgcG9saWN5LnNldERlZmF1bHRFbnVtSWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgREVGRU5VTV9LRVkpLCBudWxsICkgKTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0aW9uKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIERFU0NSX0tFWSksIG51bGwgKSApOwotICAgIGRlc2NyaXB0b3Iuc2V0U2hvcnROYW1lKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIFNIT1JUTkFNRV9LRVkpLCBudWxsICkgKTsKLSAgICBkZXNjcmlwdG9yLnNldExvbmdOYW1lKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIExPTkdOQU1FX0tFWSksIG51bGwgKSApOwotICAgIGRlc2NyaXB0b3Iuc2V0SWNvblBhdGgoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgSUNPTlBBVEhfS0VZKSwgbnVsbCApICk7Ci0gICAgZGVzY3JpcHRvci5zZXRJY29uQnVuZGxlSWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgSUNPTkJVTkRfS0VZKSwgbnVsbCApICk7Ci0gICAgZGVzY3JpcHRvci5zZXRDb250ZXh0SGVscElkKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIEhFTFBJRF9LRVkpLCBudWxsICkgKTsKLSAgICBwb2xpY3kuc2V0UmVsYXRpb25zaGlwcyggbG9hZFJlbGF0aW9uc2hpcHMoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgcGxhdGZvcm0gKSApOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBJRWNsaXBzZVByZWZlcmVuY2VzIGdldFByZWZlcmVuY2VzKCkKLSAgewotICAgIHJldHVybiBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gY3JlYXRlU3RyaW5nTGlzdCggU3RyaW5nIHNwYWNlRGVsaW1pdGVkU3RyaW5nICkKLSAgewotICAgIFN0cmluZ1tdIHNwbGl0VmFsdWVzID0gc3BhY2VEZWxpbWl0ZWRTdHJpbmcuc3BsaXQoICIgIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoIHNwbGl0VmFsdWVzICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVTcGFjZURlbGltaXRlZFN0cmluZyggTGlzdDxTdHJpbmc+IHN0cmluZ0xpc3QgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5nTGlzdC5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyBpZCA9IHN0cmluZ0xpc3QuZ2V0KCBpbmRleCApOwotICAgICAgCi0gICAgICBidWZmZXIuYXBwZW5kKCBpZCApOwotICAgICAgCi0gICAgICBpZiggaW5kZXggPCAoc3RyaW5nTGlzdC5zaXplKCkgLSAxKSApIGJ1ZmZlci5hcHBlbmQoICcgJyApOwotICAgIH0KLQotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUmVsYXRpb25zaGlwcyggSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcywgU3RyaW5nIHBvbGljeUlkLCBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgKQotICB7Ci0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJlbGF0aW9uc2hpcHMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBJUG9saWN5UmVsYXRpb25zaGlwICAgICAgICAgIHJlbGF0aW9uc2hpcCAgID0gcmVsYXRpb25zaGlwcy5nZXQoIGluZGV4ICk7Ci0gICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHBvbGljeUxpc3QgICAgID0gcmVsYXRpb25zaGlwLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiB0YXJnZXRQb2xpY2llcyA9IHJlbGF0aW9uc2hpcC5nZXRSZWxhdGVkUG9saWNpZXMoKTsKLSAgICAgIAotICAgICAgc2F2ZVBvbGljeVJlbGF0aW9uc2hpcCggaW5kZXgrMSwgcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBwb2xpY3lMaXN0LCBTT1VSQ0VfU1VGRklYICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHRhcmdldEluZGV4ID0gMDsgdGFyZ2V0SW5kZXggPCB0YXJnZXRQb2xpY2llcy5zaXplKCk7IHRhcmdldEluZGV4KysgKQotICAgICAgewotICAgICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0IHRhcmdldFBvbGljeSA9IHRhcmdldFBvbGljaWVzLmdldCggdGFyZ2V0SW5kZXggKTsKLSAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICB0YXJnZXRTdWZmaXggPSBUQVJHRVRfU1VGRklYICsgKHRhcmdldEluZGV4KzEpOwotICAgICAgICAKLSAgICAgICAgc2F2ZVBvbGljeVJlbGF0aW9uc2hpcCggaW5kZXgrMSwgcHJlZmVyZW5jZXMsIHBvbGljeUlkLCB0YXJnZXRQb2xpY3ksIHRhcmdldFN1ZmZpeCApOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiBsb2FkUmVsYXRpb25zaGlwcyggSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcywgU3RyaW5nIHBvbGljeUlkLCBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtICkKLSAgewotICAgIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyA9IG5ldyBWZWN0b3I8SVBvbGljeVJlbGF0aW9uc2hpcD4oKTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIHJlbENvdW50ICAgICAgPSAxOwotICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgc291cmNlTGlzdCAgICA9IGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIHJlbENvdW50LCBwcmVmZXJlbmNlcywgcGxhdGZvcm0sIHBvbGljeUlkLCBTT1VSQ0VfU1VGRklYICk7Ci0gICAgCi0gICAgd2hpbGUoIHNvdXJjZUxpc3QgIT0gbnVsbCApCi0gICAgewotICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb3VudCAgPSAxOwotICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdWZmaXggPSBUQVJHRVRfU1VGRklYICsgdGFyZ2V0Q291bnQ7Ci0gICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHRhcmdldExpc3QgICA9IGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIHJlbENvdW50LCBwcmVmZXJlbmNlcywgcGxhdGZvcm0sIHBvbGljeUlkLCB0YXJnZXRTdWZmaXggKTsKLSAgICAgIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gdGFyZ2V0cyAgICAgID0gbmV3IFZlY3RvcjxJUG9saWN5RW51bWVyYXRpb25MaXN0PigpOwotICAgICAgCi0gICAgICB3aGlsZSggdGFyZ2V0TGlzdCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgdGFyZ2V0cy5hZGQoIHRhcmdldExpc3QgKTsKLSAgICAgICAgdGFyZ2V0Q291bnQrKzsKLSAgICAgICAgdGFyZ2V0U3VmZml4ID0gVEFSR0VUX1NVRkZJWCArIHRhcmdldENvdW50OwotICAgICAgICB0YXJnZXRMaXN0ID0gbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggcmVsQ291bnQsIHByZWZlcmVuY2VzLCBwbGF0Zm9ybSwgcG9saWN5SWQsIHRhcmdldFN1ZmZpeCApOwotICAgICAgfQotICAgICAgCi0gICAgICByZWxhdGlvbnNoaXBzLmFkZCggbmV3IFBvbGljeVJlbGF0aW9uc2hpcEltcGwoIHNvdXJjZUxpc3QsIHRhcmdldHMgKSApOwotICAgICAgcmVsQ291bnQrKzsKLSAgICAgIHNvdXJjZUxpc3QgPSBsb2FkUG9saWN5UmVsYXRpb25zaGlwKCByZWxDb3VudCwgcHJlZmVyZW5jZXMsIHBsYXRmb3JtLCBwb2xpY3lJZCwgU09VUkNFX1NVRkZJWCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVsYXRpb25zaGlwczsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUG9saWN5UmVsYXRpb25zaGlwKCBpbnQgICAgICAgICAgICAgICAgICAgIHJlbENvdW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRWNsaXBzZVByZWZlcmVuY2VzICAgIHByZWZlcmVuY2VzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIHBvbGljeUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgZW51bUxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBrZXlTdWZmaXggKQotICB7Ci0gICAgU3RyaW5nIGtleSAgID0gY3JlYXRlS2V5KCBwb2xpY3lJZCwgUkVMX0tFWSArIHJlbENvdW50ICsga2V5U3VmZml4ICk7Ci0gICAgU3RyaW5nIHZhbHVlID0gY3JlYXRlUmVsYXRpb25zaGlwVmFsdWUoIGVudW1MaXN0ICk7Ci0gICAgCi0gICAgcHJlZmVyZW5jZXMucHV0KCBrZXksIHZhbHVlICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggaW50ICAgICAgICAgICAgICAgICAgICAgICByZWxDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRWNsaXBzZVByZWZlcmVuY2VzICAgICAgIHByZWZlcmVuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICBwb2xpY3lJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIGtleVN1ZmZpeCApCi0gIHsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgIGtleSAgICAgID0gY3JlYXRlS2V5KCBwb2xpY3lJZCwgUkVMX0tFWSArIHJlbENvdW50ICsga2V5U3VmZml4ICk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICB2YWx1ZSAgICA9IHByZWZlcmVuY2VzLmdldCgga2V5LCAiIiApOyAvLyROT04tTkxTLTEkCi0gICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBlbnVtTGlzdCA9IG51bGw7Ci0gICAgCi0gICAgaWYoICF2YWx1ZS5lcXVhbHMoICIiICkgKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgU3RyaW5nW10gICAgICAgICAgICAgICAgICAgIHNwbGl0VmFsdWUgICAgID0gdmFsdWUuc3BsaXQoICIgIiApOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UG9saWN5SWQgPSBzcGxpdFZhbHVlWzBdOwotICAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgICAgIHRhcmdldFBvbGljeSAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggdGFyZ2V0UG9saWN5SWQgKTsKLSAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBpdGVtcyAgICAgICAgICA9IG5ldyBWZWN0b3I8SVN0YXRlRW51bWVyYXRpb25JdGVtPigpOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDE7IGluZGV4IDwgc3BsaXRWYWx1ZS5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA9IHBsYXRmb3JtLmdldFN0YXRlSXRlbUVudW1lcmF0aW9uKCBzcGxpdFZhbHVlW2luZGV4XSApOwotICAgICAgICAKLSAgICAgICAgaXRlbXMuYWRkKCBpdGVtICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGVudW1MaXN0ID0gbmV3IFBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwoIGl0ZW1zLCB0YXJnZXRQb2xpY3kgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVudW1MaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgd2lsbCBjcmVhdGUgYSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIGVudW1lcmF0aW9ucyBpZC4KLSAgICogVGhlIGZpcnN0IGlkIGluIHRoZSBsaXN0IHdpbGwgYmUgdGhlIHBvbGljeSBpZCBmb3IgdGhpcyByZWxhdGlvbnNoaXAuCi0gICAqIFN1YnNlcXVlbnQgaWRzIHdpbGwgYmUgZW51bWVyYXRpb24gaXRlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gZW51bUxpc3QKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVJlbGF0aW9uc2hpcFZhbHVlKCBJUG9saWN5RW51bWVyYXRpb25MaXN0IGVudW1MaXN0ICkKLSAgewotICAgIExpc3Q8U3RyaW5nPiAgICAgICAgICAgICAgICBzdHJpbmdMaXN0ID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGl0ZW1MaXN0ICAgPSBlbnVtTGlzdC5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAKLSAgICBzdHJpbmdMaXN0LmFkZCggZW51bUxpc3QuZ2V0UG9saWN5KCkuZ2V0SWQoKSApOwotICAgIAotICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBpdGVtTGlzdCApCi0gICAgewotICAgICAgc3RyaW5nTGlzdC5hZGQoIGl0ZW0uZ2V0SWQoKSApOyAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBjcmVhdGVTcGFjZURlbGltaXRlZFN0cmluZyggc3RyaW5nTGlzdCApOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNhdmUoIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMsIFN0cmluZyBwb2xpY3lJZCwgU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlICkKLSAgewotICAgIGlmKCB2YWx1ZSAhPSBudWxsICYmICF2YWx1ZS5lcXVhbHMoICIiICkgKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJlZmVyZW5jZXMucHV0KCBjcmVhdGVLZXkocG9saWN5SWQsa2V5KSwgdmFsdWUgKTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVLZXkoIFN0cmluZyBpZCwgU3RyaW5nIGtleSApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcig1MCk7Ci0gICAgCi0gICAgYnVmZmVyLmFwcGVuZCggQkFTRV9LRVkgKTsKLSAgICBidWZmZXIuYXBwZW5kKCBpZCApOwotICAgIGJ1ZmZlci5hcHBlbmQoICcuJyApOwotICAgIGJ1ZmZlci5hcHBlbmQoIGtleSApOwotICAgIAotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Qb2xpY3lTdGF0ZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvUG9saWN5U3RhdGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YTU4MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Qb2xpY3lTdGF0ZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEyMjEgICAyMTM0OTIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAxMDkgICAyMTQ4MTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA0MzAgICAyMjE1NzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgRml4ZWQgY29tbWl0IHByb2JsZW0uCi0gKiAyMDA4MDYyNSAgIDIzODQ4MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBBZGRpbmcgdGhyZWFkIHNhZmV0eSB0byB0aGUgc2VydmljZSBwbGF0Zm9ybSBhcGkuCi0gKiAyMDA5MDMyNyAgIDI3MDI4MyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIG5vdCBub3RpZmllZCBmaXJzdCB0aW1lIGNoYW5nZSBpcyBtYWRlCi0gKiAyMDA5MDUxNCAgIDI3NjMyOSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBTZXJ2aWNlIFBvbGljeSBwbGF0Zm9ybSByZWdyZXNzaW9uLCBjYXVzaW5nIE5QRSBmb3IgbGlzdGVuZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSVByZWZlcmVuY2VzU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBQb2xpY3lTdGF0ZUltcGwgaW1wbGVtZW50cyBJUG9saWN5U3RhdGUKLXsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPiBzdGF0ZUNoYW5nZUxpc3RlbmVyczsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPiBzdGF0ZUNoYW5nZUxpc3RlbmVyc09ubHlPbkNvbW1pdDsKLSAgcHJpdmF0ZSBJUHJlZmVyZW5jZXNTZXJ2aWNlICAgICAgICAgICAgICBzZXJ2aWNlOwotICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q7Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YWJsZTsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSAgICAgICAgICAgICAgICAgICBwb2xpY3k7Ci0gIHByaXZhdGUgTWFwPFN0cmluZyxUYWJsZUVudHJ5PiAgICAgICAgICAgdGFibGU7Ci0gIHByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtICAgICAgICAgICAgcGxhdGZvcm07Ci0KLSAgcHVibGljIFBvbGljeVN0YXRlSW1wbCggU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtLCBJU2VydmljZVBvbGljeSBwb2xpY3ksIElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICB0aGlzLnNlcnZpY2UgICAgICAgICAgICAgID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCk7Ci0gICAgdGhpcy5wbGF0Zm9ybSAgICAgICAgICAgICA9IHBsYXRmb3JtOwotICAgIHRoaXMucHJvamVjdCAgICAgICAgICAgICAgPSBwcm9qZWN0OwotICAgIHRoaXMucG9saWN5ICAgICAgICAgICAgICAgPSBwb2xpY3k7Ci0gICAgdGhpcy5tdXRhYmxlICAgICAgICAgICAgICA9IHBvbGljeS5pc1ByZWRlZmluZWQoKSA/IGZhbHNlIDogdHJ1ZTsKLSAgICB0aGlzLnRhYmxlICAgICAgICAgICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBUYWJsZUVudHJ5PigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCkKLSAgewotICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHRoaXMgcG9saWN5IGlzIG5vdCBtdXRhYmxlLgotICAgIGlmKCAhbXV0YWJsZSApIHJldHVybjsKLSAgICAKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbnVsbDsKLSAgICAKLSAgICBpZiggcHJvamVjdCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBwcmVmZXJlbmNlcyA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByZWZlcmVuY2VzID0gbmV3IFByb2plY3RTY29wZSggcHJvamVjdCApLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgfQotCi0gICAgZm9yKCBNYXAuRW50cnk8U3RyaW5nLCBUYWJsZUVudHJ5PiBlbnRyeSA6IHRhYmxlLmVudHJ5U2V0KCkgKQotICAgIHsKLSAgICAgIFN0cmluZyAgICAga2V5ICAgICAgICA9IGVudHJ5LmdldEtleSgpOwotICAgICAgU3RyaW5nICAgICBzdG9yZUtleSAgID0gbWFrZVN0b3JlS2V5KCBrZXkgKTsKLSAgICAgIFRhYmxlRW50cnkgdGFibGVFbnRyeSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICBTdHJpbmcgICAgIHZhbHVlICAgICAgPSB0YWJsZUVudHJ5LnZhbHVlOwotICAgICAgCi0gICAgICBpZiggdmFsdWUgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IHRhYmxlRW50cnkubGFzdENvbW1pdHRlZFZhbHVlOwotICAgICAgIAotICAgICAgICAvLyBBbHdheXMgbmVlZCB0byBwdXQgdGhlIHZhbHVlIGluIHRoZSBiYWNraW5nIHN0b3JlIGV2ZW4gaWYgaXQgaXMgdGhlIHNhbWUgdmFsdWUKLSAgICAgICAgLy8gc2luY2Ugd2UgZGVsZXRlIGFsbCBwcmVmZXJlbmNlcyBiZWZvcmUgY29tbWl0dGluZyB0aGVtLgotICAgICAgICBwcmVmZXJlbmNlcy5wdXQoIHN0b3JlS2V5LCB2YWx1ZSApOwotICAgICAgICB0YWJsZUVudHJ5Lmxhc3RDb21taXR0ZWRWYWx1ZSA9IHZhbHVlOwotICAgICAgICAKLSAgICAgICAgaWYoIG9sZFZhbHVlID09IG51bGwgKQotICAgICAgICB7IAotICAgICAgICAgIC8vaWYgdGhlIG9sZCB2YWx1ZSBpcyBudWxsLCBhbmQgdGhlIG5ldyB2YWx1ZSBpcyBub3QgbnVsbCwgbmVlZCB0byBmaXJlIGEgY2hhbmdlCi0gICAgICAgICAgZmlyZVBvbGljeVN0YXRlQ2hhbmdlKCBzdGF0ZUNoYW5nZUxpc3RlbmVyc09ubHlPbkNvbW1pdCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUgKTsKLSAgICAgICAgCQotICAgICAgICAgIC8vIFRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgdGFibGVFbnRyeSB2YWx1ZSBzbyB0aGF0IGdldFZhbHVlIHdpbGwgZ2V0IHRoZSBvbGQgdmFsdWUuCi0gICAgICAgICAgdGFibGVFbnRyeS52YWx1ZSA9IG51bGw7Ci0gICAgICAgICAgb2xkVmFsdWUgPSBnZXRWYWx1ZSgga2V5ICk7Ci0gICAgICAgIAotICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHRhYmxlRW50cnkgdmFsdWU7Ci0gICAgICAgICAgdGFibGVFbnRyeS52YWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggIXZhbHVlLmVxdWFscyggb2xkVmFsdWUgKSApIAotICAgICAgICB7ICAgICAgICAgIAotICAgICAgICAgIGZpcmVQb2xpY3lTdGF0ZUNoYW5nZSggc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQsIGtleSwgb2xkVmFsdWUsIHZhbHVlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgSUVjbGlwc2VQcmVmZXJlbmNlc1tdIGdldE5vZGVzKCkKLSAgewotICAgIElFY2xpcHNlUHJlZmVyZW5jZXNbXSByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBwcm9qZWN0ICE9IG51bGwgJiYgcGxhdGZvcm0uaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QpICkKLSAgICB7IAotICAgICAgcmVzdWx0ICAgID0gbmV3IElFY2xpcHNlUHJlZmVyZW5jZXNbMl07Ci0gICAgICByZXN1bHRbMF0gPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICAgIHJlc3VsdFsxXSA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBJRWNsaXBzZVByZWZlcmVuY2VzWzFdOwotICAgICAgcmVzdWx0WzBdID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBpZiggIW11dGFibGUgKSByZXR1cm47Ci0gICAgCi0gICAgZm9yKCBUYWJsZUVudHJ5IGVudHJ5IDogdGFibGUudmFsdWVzKCkgKQotICAgIHsKLSAgICAgIGVudHJ5LnZhbHVlID0gbnVsbDsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cygpCi0gIHsKLSAgICAvLyBXZSB3YW50IHRvIHJlc3RvcmUgdGhlIHNldHRpbmcgdG8gdGhlcmUgZGVmYXVsdCBzdGF0ZSwgYnV0IHdlIGRvbid0Ci0gICAgLy8gd2FudCBjaGFuZ2UgdGhlIGJhY2tlbmQgZWNsaXBzZSBwcmVmZXJlbmNlcywgc2luY2UgdGhlIHVzZXIgbWlnaHQgbm90Ci0gICAgLy8gY29tbWl0IHRoZXNlIGNoYW5nZXMuICBUaGVyZWZvcmUsIHdlIHdpbGwgc2V0IHRoZSB2YWx1ZXMgZm9yIGFsbCB0aGUKLSAgICAvLyB0YWJsZSBlbnRyaWVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuICAKLSAgICBpZiggcHJvamVjdCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmb3IoIFRhYmxlRW50cnkgZW50cnkgOiB0YWJsZS52YWx1ZXMoKSApCi0gICAgICB7Ci0gICAgICAgICBlbnRyeS52YWx1ZSA9IGVudHJ5LmRlZmF1bHRWYWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIE5vdGU6IHNpbmNlIHdlIGFyZSByZXN0b3JpbmcgdGhlIHN0YXRlIGZvciBhIHByb2plY3Qgd2UgbmVlZCB0byBlbnN1cmUKLSAgICAgIC8vICAgICAgIHRoYXQgb25seSB0aGUgaW5zdGFuY2Ugc2NvcGUgdmFsdWVzIGFyZSB1c2VkLiAgKGllLiB3ZSB3YW50IHRvCi0gICAgICAvLyAgICAgICBpZ25vcmUgcHJvamVjdCBzY29wZSB2YWx1ZXMuKQotICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlc1tdIG5vZGVzID0gbmV3IElFY2xpcHNlUHJlZmVyZW5jZXNbXXtuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICl9OwotICAgICAgCi0gICAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsVGFibGVFbnRyeT4gZW50cnkgOiB0YWJsZS5lbnRyeVNldCgpICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICAgICBzdG9yZUtleSAgICAgPSBtYWtlU3RvcmVLZXkoIGVudHJ5LmdldEtleSgpICk7Ci0gICAgICAgIFRhYmxlRW50cnkgdGFibGVFbnRyeSAgID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgU3RyaW5nICAgICBkZWZhdWx0VmFsdWUgPSAiIjsKLSAgICAgICAgCi0gICAgICAgIGlmKCB0YWJsZUVudHJ5LmRlZmF1bHRWYWx1ZSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRhYmxlRW50cnkuZGVmYXVsdFZhbHVlOyAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdGFibGVFbnRyeS52YWx1ZSA9IHNlcnZpY2UuZ2V0KCBzdG9yZUtleSwgZGVmYXVsdFZhbHVlLCBub2RlcyApOyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIAotICB9Ci0gIAotICAvKiogCi0gICAqIFRoZSBtZXRob2QgZ2V0cyB0aGUgdmFsdWUgZnJvbSB0aGUgZm9sbG93aW5nIHBsYWNlcyBpbiB0aGUgZ2l2ZW4gb3JkZXIuCi0gICAqIAotICAgKiAxKSBGcm9tIHRoZSBsb2NhbCB0YWJsZS4KLSAgICogMikgRnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZSBub2Rlcy4gIE5vdGU6IHRoaXMgY291bGQgaW5jbHVkZSBzZWFyY2hpbmcKLSAgICogICAgICAgICB0aGUgcHJvamVjdCBwcmVmZXJlbmNlIHN0b3JlIGFuZCB0aGUgcGx1Z2luIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqIDMpIEZyb20gdGhlIGRlZmF1bHQgaW4gdGhlIGxvY2FsIHRhYmxlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcga2V5KQotICB7Ci0gICAgU3RyaW5nICAgICByZXN1bHQgPSBudWxsOwotICAgIFRhYmxlRW50cnkgZW50cnkgID0gdGFibGUuZ2V0KCBrZXkgKTsKLSAgICAKLSAgICBpZiggZW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgVGFibGVFbnRyeSgpOwotICAgICAgdGFibGUucHV0KCBrZXksIGVudHJ5ICk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwcm9qZWN0ID09IG51bGwgfHwKLSAgICAgICAgKCBwcm9qZWN0ICE9IG51bGwgJiYgcGxhdGZvcm0uaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0ICkgKSApCi0gICAgeyAKLSAgICAgICAgcmVzdWx0ID0gZW50cnkudmFsdWU7Ci0gICAgfQotICAgIAotICAgIGlmKCByZXN1bHQgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGxvY2FsIHZhbHVlIGZvciB0aGlzIGtleSBzbyB3ZSB3aWxsIGxvb2sgaW4gdGhlCi0gICAgICAvLyBwcmVmZXJlbmNlIHN0b3JlLgotICAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgc3RvcmVLZXkgICAgID0gbWFrZVN0b3JlS2V5KCBrZXkgKTsKLSAgICAgIAotICAgICAgaWYoIGVudHJ5LmRlZmF1bHRWYWx1ZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdFZhbHVlID0gZW50cnkuZGVmYXVsdFZhbHVlOwotICAgICAgfQotICAgICAgCi0gICAgICByZXN1bHQgPSBzZXJ2aWNlLmdldCggc3RvcmVLZXksIGRlZmF1bHRWYWx1ZSwgZ2V0Tm9kZXMoKSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgbWFrZVN0b3JlS2V5KCBTdHJpbmcga2V5ICkKLSAgewotICAgIHJldHVybiBwb2xpY3kuZ2V0SWQoKSArICIuIiArIGtleTsgICAgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc011dGFibGUoKQotICB7Ci0gICAgcmV0dXJuIG11dGFibGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwdXREZWZhdWx0VmFsdWUoIFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUsIGJvb2xlYW4gb3ZlcnJpZGVFeGlzdGluZyApCi0gIHsKLSAgICBpZiggIW11dGFibGUgKSByZXR1cm47Ci0gICAgCi0gICAgVGFibGVFbnRyeSBlbnRyeSA9IHRhYmxlLmdldCgga2V5ICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGVudHJ5ID0gbmV3IFRhYmxlRW50cnkoKTsKLSAgICAgIHRhYmxlLnB1dCgga2V5LCBlbnRyeSApOwotICAgIH0KLSAgICAKLSAgICBpZiggZW50cnkuZGVmYXVsdFZhbHVlID09IG51bGwgfHwgb3ZlcnJpZGVFeGlzdGluZyApCi0gICAgewotICAgICAgZW50cnkuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlOwotICAgIH0KLSAgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHB1dFZhbHVlKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmKCAhbXV0YWJsZSApIHJldHVybjsKLSAgICAKLSAgICBUYWJsZUVudHJ5IGVudHJ5ID0gdGFibGUuZ2V0KCBrZXkgKTsKLSAgICAKLSAgICBpZiggZW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgVGFibGVFbnRyeSgpOwotICAgICAgdGFibGUucHV0KCBrZXksIGVudHJ5ICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG9sZFZhbHVlID0gZ2V0VmFsdWUoIGtleSApOwotICAgIAotICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7Ci0gICAgZmlyZVBvbGljeVN0YXRlQ2hhbmdlKCBzdGF0ZUNoYW5nZUxpc3RlbmVycywga2V5LCBvbGRWYWx1ZSwgdmFsdWUgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGludGVybmFsU2V0TXV0YWJsZSggYm9vbGVhbiBtdXRhYmxlICkKLSAgewotICAgIHRoaXMubXV0YWJsZSA9IG11dGFibGU7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TXV0YWJsZShib29sZWFuIG11dGFibGUpCi0gIHsKLSAgICBpZiggcG9saWN5LmlzUHJlZGVmaW5lZCgpICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiQXR0ZW1wdCB0byBzZXQgbXV0YWJpbGl0eSBvbiBhIHByZWRlZmluZWQgc2VydmljZSBwb2xpY3kuIiwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aGlzLm11dGFibGUgPSBtdXRhYmxlOwotICAgIH0KLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBhZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG5vdGlmeU9uQ29tbWl0T25seSApCi0gIHsKLSAgICBpZiggbm90aWZ5T25Db21taXRPbmx5ICkKLSAgICB7Ci0gICAgICBpZiggc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0ID0gbmV3IFZlY3RvcjxJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcj4oKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQuYWRkKCBsaXN0ZW5lciApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYoIHN0YXRlQ2hhbmdlTGlzdGVuZXJzID09IG51bGwgKQotICAgICAgewotICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVycyA9IG5ldyBWZWN0b3I8SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI+KCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBpZiggc3RhdGVDaGFuZ2VMaXN0ZW5lcnMgIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgICAKLSAgICBpZiggc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQgIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpcmVQb2xpY3lTdGF0ZUNoYW5nZSggTGlzdDxJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcj4gbGlzdGVuZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlICkKLSAgewotICAgIGlmKCBsaXN0ZW5lcnMgIT0gbnVsbCApCi0gICAgewotICAgICAgZm9yKCBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycyApICAKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIucG9saWN5U3RhdGVDaGFuZ2UoIHBvbGljeSwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUgKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgVGFibGVFbnRyeQotICB7Ci0gICAgU3RyaW5nIHZhbHVlOwotICAgIFN0cmluZyBsYXN0Q29tbWl0dGVkVmFsdWU7Ci0gICAgU3RyaW5nIGRlZmF1bHRWYWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGU0NjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAyMTQgICAyMTg5OTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ29uY3VycmVudCBleGNlcHRpb24gZml4Ci0gKiAyMDA4MDYyNSAgIDIzODQ4MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBBZGRpbmcgdGhyZWFkIHNhZmV0eSB0byB0aGUgc2VydmljZSBwbGF0Zm9ybSBhcGkuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5SW1wbCBpbXBsZW1lbnRzIElTZXJ2aWNlUG9saWN5Ci17Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVmaW5lZDsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDsKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5SW1wbCAgICAgICAgICAgICAgICBwYXJlbnQ7Ci0gIHByaXZhdGUgRGVzY3JpcHRvckltcGwgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjsKLSAgcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICAgICAgICBjb21taXR0ZWRDaGlsZHJlbjsKLSAgcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICAgICAgICBjaGlsZHJlbjsKLSAgcHJpdmF0ZSBQb2xpY3lTdGF0ZUltcGwgICAgICAgICAgICAgICAgICBwb2xpY3lTdGF0ZTsKLSAgcHJpdmF0ZSBNYXA8SVByb2plY3QsIFBvbGljeVN0YXRlSW1wbD4gICBwcm9qZWN0UG9saWN5U3RhdGVzOwotICBwcml2YXRlIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gICAgICAgIHJlbGF0aW9uc2hpcExpc3Q7Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcj4gY2hpbGRDaGFuZ2VMaXN0ZW5lcnM7Ci0gIHByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbCAgICAgICAgcGxhdGZvcm07Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bUxpc3RJZDsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkOwotICBwcml2YXRlIExpc3Q8SVN0YXR1c0NoYW5nZUxpc3RlbmVyPiAgICAgIHN0YXR1c0NoYW5nZUxpc3RlbmVyczsgCi0gIHByaXZhdGUgSVN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnJlc29sdmVkUGFyZW50OwotICBwcml2YXRlIExpc3Q8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4gICAgIHVucmVzb2x2ZWRSZWxhdGlvbnNoaXBMaXN0OwotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lJbXBsKCBib29sZWFuIGlzUHJlZGVmaW5lZCwgU3RyaW5nIGlkLCBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtICkKLSAgewotICAgIHRoaXMucHJlZGVmaW5lZCAgICAgICAgICAgICAgICAgPSBpc1ByZWRlZmluZWQ7ICAKLSAgICB0aGlzLmlkICAgICAgICAgICAgICAgICAgICAgICAgID0gaWQ7Ci0gICAgdGhpcy5jaGlsZHJlbiAgICAgICAgICAgICAgICAgICA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgdGhpcy5yZWxhdGlvbnNoaXBMaXN0ICAgICAgICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeVJlbGF0aW9uc2hpcD4oKTsKLSAgICB0aGlzLnVucmVzb2x2ZWRSZWxhdGlvbnNoaXBMaXN0ID0gbmV3IFZlY3RvcjxVbnJlc29sdmVkUmVsYXRpb25zaGlwPigpOwotICAgIHRoaXMucG9saWN5U3RhdGUgICAgICAgICAgICAgICAgPSBuZXcgUG9saWN5U3RhdGVJbXBsKCBwbGF0Zm9ybS5nZXRBcGlQbGF0Zm9ybSgpLCB0aGlzLCBudWxsICk7Ci0gICAgdGhpcy5wbGF0Zm9ybSAgICAgICAgICAgICAgICAgICA9IHBsYXRmb3JtOyAgCi0gICAgdGhpcy5jaGlsZENoYW5nZUxpc3RlbmVycyAgICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+KCk7Ci0gICAgdGhpcy5wcm9qZWN0UG9saWN5U3RhdGVzICAgICAgICA9IG5ldyBIYXNoTWFwPElQcm9qZWN0LCBQb2xpY3lTdGF0ZUltcGw+KCk7Ci0gICAgdGhpcy5zdGF0dXMgICAgICAgICAgICAgICAgICAgICA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzUHJlZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gcHJlZGVmaW5lZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudCggU2VydmljZVBvbGljeUltcGwgcGFyZW50ICkKLSAgewotICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgIAotICAgIGlmKCBwYXJlbnQgIT0gbnVsbCApCi0gICAgewotICAgICAgcGFyZW50LmFkZENoaWxkKCB0aGlzLCBmYWxzZSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgY29tbWl0Q2hhbmdlcygpCi0gIHsKLSAgICBwb2xpY3lTdGF0ZS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgCi0gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIGNoaWxkcmVuIGluIHRoZSBjb21taXR0ZWRDaGlsZHJlbiBvYmplY3QuCi0gICAgY29tbWl0dGVkQ2hpbGRyZW4gPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiggY2hpbGRyZW4gKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoKQotICB7Ci0gICAgcG9saWN5U3RhdGUuZGlzY2FyZENoYW5nZXMoKTsKLSAgICAgICAgCi0gICAgZmlyZUNoaWxkQ2hhbmdlc0R1ZXRvRGlzY2FyZCgpOwotICAgIAotICAgIC8vUmVzdG9yZSBjaGlsZHJlbi4KLSAgICBjaGlsZHJlbiA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCBjb21taXR0ZWRDaGlsZHJlbiApOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0Q2hpbGRyZW4oKQotICB7Ci0gICAgcmV0dXJuIGNoaWxkcmVuOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYWRkQ2hpbGQoIFNlcnZpY2VQb2xpY3lJbXBsIGNoaWxkLCBib29sZWFuIGZpcmVFdmVudCApCi0gIHsKLSAgICBjaGlsZHJlbi5hZGQoIGNoaWxkICk7Ci0gICAgICAKLSAgICBpZiggZmlyZUV2ZW50ICkKLSAgICB7Ci0gICAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggY2hpbGQsIHRydWUgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkKElTZXJ2aWNlUG9saWN5IHBvbGljeVRvUmVtb3ZlICkKLSAgewotICAgIGlmKCAhcG9saWN5VG9SZW1vdmUuaXNQcmVkZWZpbmVkKCkgKQotICAgIHsKLSAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoaXMgcG9saWN5IGZpcnN0LgotICAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRQb2xpY2llcyA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCBwb2xpY3lUb1JlbW92ZSAuZ2V0Q2hpbGRyZW4oKSApOwotICAgICAgCi0gICAgICBmb3IoIElTZXJ2aWNlUG9saWN5IGNoaWxkUG9saWN5IDogY2hpbGRQb2xpY2llcyApCi0gICAgICB7Ci0gICAgICAgIHBvbGljeVRvUmVtb3ZlLnJlbW92ZUNoaWxkKCBjaGlsZFBvbGljeSApOwotICAgICAgfQotICAgICAgCi0gICAgICBib29sZWFuIHJlbW92ZWQgPSBjaGlsZHJlbi5yZW1vdmUoIHBvbGljeVRvUmVtb3ZlICApOwotICAgICAgCi0gICAgICBpZiggcmVtb3ZlZCApCi0gICAgICB7Ci0gICAgICAgIHBsYXRmb3JtLnJlbW92ZVBvbGljeSggcG9saWN5VG9SZW1vdmUgKTsKLSAgICAgICAgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIHBvbGljeVRvUmVtb3ZlICwgZmFsc2UgKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpCi0gIHsKLSAgICBpZiggZGVzY3JpcHRvciA9PSBudWxsICkKLSAgICB7Ci0gICAgICBkZXNjcmlwdG9yID0gbmV3IERlc2NyaXB0b3JJbXBsKCk7ICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0b3IoIERlc2NyaXB0b3JJbXBsIGRlc2NyaXB0b3IgKQotICB7Ci0gICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRQYXJlbnRQb2xpY3koKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotCi0gIHB1YmxpYyBJUG9saWN5U3RhdGUgZ2V0UG9saWN5U3RhdGUoKQotICB7Ci0gICAgcmV0dXJuIHBvbGljeVN0YXRlOwotICB9Ci0gIAotICBwdWJsaWMgSVBvbGljeVN0YXRlIGdldFBvbGljeVN0YXRlKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIFBvbGljeVN0YXRlSW1wbCBwcm9qZWN0UG9saWN5U3RhdGUgPSBwcm9qZWN0UG9saWN5U3RhdGVzLmdldCggcHJvamVjdCApOwotICAgIAotICAgIGlmKCBwcm9qZWN0UG9saWN5U3RhdGUgPT0gbnVsbCApCi0gICAgewotICAgICAgcHJvamVjdFBvbGljeVN0YXRlID0gbmV3IFBvbGljeVN0YXRlSW1wbCggcGxhdGZvcm0uZ2V0QXBpUGxhdGZvcm0oKSwgdGhpcywgcHJvamVjdCApOwotICAgICAgcHJvamVjdFBvbGljeVN0YXRlLmludGVybmFsU2V0TXV0YWJsZSggcG9saWN5U3RhdGUuaXNNdXRhYmxlKCkgKTsKLSAgICAgIHByb2plY3RQb2xpY3lTdGF0ZXMucHV0KCBwcm9qZWN0LCBwcm9qZWN0UG9saWN5U3RhdGUgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHByb2plY3RQb2xpY3lTdGF0ZTsKLSAgfQotICAKLSAgcHVibGljIElQb2xpY3lTdGF0ZUVudW0gZ2V0UG9saWN5U3RhdGVFbnVtKCkKLSAgewotICAgIEVudW1lcmF0aW9uU3RhdGVJbXBsIG5ld0VudW0gPSBudWxsOwotICAgIAotICAgIGlmKCBlbnVtTGlzdElkICE9IG51bGwgKQotICAgIHsKLSAgICAgIG5ld0VudW0gPSBuZXcgRW51bWVyYXRpb25TdGF0ZUltcGwoIHBsYXRmb3JtLmdldEFwaVBsYXRmb3JtKCksIGVudW1MaXN0SWQsIGRlZmF1bHRFbnVtSWQsIHBvbGljeVN0YXRlICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuZXdFbnVtOwotICB9Ci0gIAotICBwdWJsaWMgSVBvbGljeVN0YXRlRW51bSBnZXRQb2xpY3lTdGF0ZUVudW0oIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgRW51bWVyYXRpb25TdGF0ZUltcGwgbmV3RW51bSA9IG51bGw7Ci0gICAgCi0gICAgaWYoIGVudW1MaXN0SWQgIT0gbnVsbCApCi0gICAgewotICAgICAgbmV3RW51bSA9IG5ldyBFbnVtZXJhdGlvblN0YXRlSW1wbCggcGxhdGZvcm0uZ2V0QXBpUGxhdGZvcm0oKSwgZW51bUxpc3RJZCwgZGVmYXVsdEVudW1JZCwgZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3RW51bTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvbGljeVN0YXRlKCBQb2xpY3lTdGF0ZUltcGwgcG9saWN5U3RhdGUgKQotICB7Ci0gICAgdGhpcy5wb2xpY3lTdGF0ZSA9IHBvbGljeVN0YXRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoKQotICB7Ci0gICAgLy8gUmVtb3ZlIGFsbCBsb2NhbCBjaGlsZHJlbiBmcm9tIHRoZSB0cmVlCi0gICAgLy8gSmF2YSB3aWxsIG5vdCBsZXQgeW91IHJlbW92ZSBhbiBpdGVtIGZyb20gYSBjb2xsZWN0aW9uCi0gICAgLy8gdGhhdCBpcyBiZWluZyBpdGVyYXRlZCBvdmVyLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeQotICAgIC8vIGNvcHkgb2YgdGhlIGNoaWxkcmVuIGNvbGxlY3Rpb24gdG8gaXRlcmF0b3Igb3Zlci4KLSAgICBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+IHRlbXBDaGlsZHJlbiA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCBjaGlsZHJlbiApOwotICAgIAotICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGQgOiB0ZW1wQ2hpbGRyZW4gKQotICAgIHsKLSAgICAgIGlmKCAhY2hpbGQuaXNQcmVkZWZpbmVkKCkgKQotICAgICAgewotICAgICAgICByZW1vdmVDaGlsZCggY2hpbGQgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcG9saWN5U3RhdGUucmVzdG9yZURlZmF1bHRzKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cyggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBQb2xpY3lTdGF0ZUltcGwgc3RhdGVJbXBsID0gcHJvamVjdFBvbGljeVN0YXRlcy5nZXQoIHByb2plY3QgKTsKLSAgICAKLSAgICBpZiggc3RhdGVJbXBsICE9IG51bGwgKQotICAgIHsKLSAgICAgIHN0YXRlSW1wbC5yZXN0b3JlRGVmYXVsdHMoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiBnZXRSZWxhdGlvbnNoaXBzKCkKLSAgewotICAgIHJldHVybiByZWxhdGlvbnNoaXBMaXN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbnNoaXBzKExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcykKLSAgewotICAgIGlmKCAhcHJlZGVmaW5lZCApCi0gICAgewotICAgICAgdGhpcy5yZWxhdGlvbnNoaXBMaXN0ID0gcmVsYXRpb25zaGlwczsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVudW1MaXN0SWQoKQotICB7Ci0gICAgcmV0dXJuIGVudW1MaXN0SWQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW51bUxpc3RJZChTdHJpbmcgZW51bUxpc3RJZCkKLSAgewotICAgIHRoaXMuZW51bUxpc3RJZCA9IGVudW1MaXN0SWQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRFbnVtSWQoKQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRFbnVtSWQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdEVudW1JZChTdHJpbmcgZGVmYXVsdEVudW1WYWx1ZSkKLSAgewotICAgIHRoaXMuZGVmYXVsdEVudW1JZCA9IGRlZmF1bHRFbnVtVmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVbnJlc29sdmVkUGFyZW50KCBTdHJpbmcgcGFyZW50SWQgKQotICB7Ci0gICAgdW5yZXNvbHZlZFBhcmVudCA9IHBhcmVudElkOyAgCi0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZFJlbGF0aW9uc2hpcHMoIExpc3Q8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyApCi0gIHsKLSAgICB1bnJlc29sdmVkUmVsYXRpb25zaGlwTGlzdCA9IHJlbGF0aW9uc2hpcHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoKQotICB7Ci0gICAgc2V0UGFyZW50KCBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCB1bnJlc29sdmVkUGFyZW50ICkgKTsKLSAgICAgICAgCi0gICAgZm9yKCBVbnJlc29sdmVkUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IHVucmVzb2x2ZWRSZWxhdGlvbnNoaXBMaXN0ICkKLSAgICB7Ci0gICAgICBMaXN0PFN0cmluZz4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVudW1JZExpc3QgPSByZWxhdGlvbnNoaXAuZ2V0U291cmNlRW51bWVyYXRpb25MaXN0KCk7IAotICAgICAgTGlzdDxVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwPiB0YXJnZXRFbnVtSWRMaXN0ID0gcmVsYXRpb25zaGlwLmdldFRhcmdldEVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+ICAgICAgICBzb3VyY2VFbnVtTGlzdCAgID0gZ2V0UmVzb2x2ZWRFbnVtTGlzdCggc291cmNlRW51bUlkTGlzdCApOwotICAgICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCAgICAgICAgICAgICBzb3VyY2VQb2xpY3lMaXN0ID0gbmV3IFBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwoIHNvdXJjZUVudW1MaXN0LCB0aGlzICk7Ci0gICAgICBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+ICAgICAgIHRhcmdldFBvbGljeUxpc3QgPSBuZXcgVmVjdG9yPElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+KCk7Ci0gICAgICAKLSAgICAgIGZvciggVW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcCB0YXJnZXRFbnVtIDogdGFyZ2V0RW51bUlkTGlzdCApCi0gICAgICB7Ci0gICAgICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICAgICB0YXJnZXRQb2xpY3kgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIHRhcmdldEVudW0uZ2V0UG9saWN5SWQoKSApOwotICAgICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gdGFyZ2V0TGlzdCAgICAgICAgICAgPSBnZXRSZXNvbHZlZEVudW1MaXN0KCB0YXJnZXRFbnVtLmdldEVudW1MaXN0KCkpOwotICAgICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgdGFyZ2V0RW51bVBvbGljeUxpc3QgPSBuZXcgUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbCggdGFyZ2V0TGlzdCwgdGFyZ2V0UG9saWN5ICk7Ci0gICAgICAgIAotICAgICAgICB0YXJnZXRQb2xpY3lMaXN0LmFkZCggdGFyZ2V0RW51bVBvbGljeUxpc3QgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCB0YXJnZXRQb2xpY3kgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiUG9saWN5IGlkLCAiICsgdGFyZ2V0RW51bS5nZXRQb2xpY3lJZCgpICsgIiBub3QgZm91bmQuIiwgbnVsbCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBJUG9saWN5UmVsYXRpb25zaGlwIHBvbGljeVJlbGF0aW9uc2hpcCA9IG5ldyBQb2xpY3lSZWxhdGlvbnNoaXBJbXBsKCBzb3VyY2VQb2xpY3lMaXN0LCB0YXJnZXRQb2xpY3lMaXN0ICk7Ci0gICAgICAKLSAgICAgIHJlbGF0aW9uc2hpcExpc3QuYWRkKCBwb2xpY3lSZWxhdGlvbnNoaXAgKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHVucmVzb2x2ZWRQYXJlbnQgPSBudWxsOwotICAgIHVucmVzb2x2ZWRSZWxhdGlvbnNoaXBMaXN0ID0gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZ2V0UmVzb2x2ZWRFbnVtTGlzdCggTGlzdDxTdHJpbmc+IGVudW1JZExpc3QgKQotICB7Ci0gICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0ID0gbmV3IFZlY3RvcjxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+KCk7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgZW51bUlkIDogZW51bUlkTGlzdCApCi0gICAgewotICAgICAgZW51bUxpc3QuYWRkKCBwbGF0Zm9ybS5nZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbiggZW51bUlkICkgKTsgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBlbnVtTGlzdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcihJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcihJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzLnJlbW92ZSggbGlzdGVuZXIgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkU3RhdHVzQ2hhbmdlTGlzdGVuZXIoIElTdGF0dXNDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBpZiggc3RhdHVzQ2hhbmdlTGlzdGVuZXJzID09IG51bGwgKQotICAgIHsKLSAgICAgIHN0YXR1c0NoYW5nZUxpc3RlbmVycyA9IG5ldyBWZWN0b3I8SVN0YXR1c0NoYW5nZUxpc3RlbmVyPigpOyAgICAKLSAgICB9Ci0gICAgCi0gICAgc3RhdHVzQ2hhbmdlTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlU3RhdHVzQ2hhbmdlTGlzdGVuZXIoIElTdGF0dXNDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBpZiggc3RhdHVzQ2hhbmdlTGlzdGVuZXJzICE9IG51bGwgKQotICAgIHsKLSAgICAgIHN0YXR1c0NoYW5nZUxpc3RlbmVycy5yZW1vdmUoIGxpc3RlbmVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzKCBJU3RhdHVzIHN0YXR1cyApCi0gIHsKLSAgICBJU3RhdHVzIG9sZFN0YXR1cyA9IHRoaXMuc3RhdHVzOwotICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwotICAgIGZpcmVTdGF0dXNDaGFuZ2VFdmVudCggb2xkU3RhdHVzLCBzdGF0dXMgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpcmVTdGF0dXNDaGFuZ2VFdmVudCggSVN0YXR1cyBvbGRTdGF0dXMsIElTdGF0dXMgbmV3U3RhdHVzICkKLSAgewotICAgIGlmKCBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMgIT0gbnVsbCApCi0gICAgewotICAgICAgZm9yKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMgKQotICAgICAgewotICAgICAgICBsaXN0ZW5lci5zdGF0dXNDaGFuZ2UoIHRoaXMsIG9sZFN0YXR1cywgbmV3U3RhdHVzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBmaXJlQ2hpbGRDaGFuZ2VzRHVldG9EaXNjYXJkKCkKLSAgewotICAgIFNldDxJU2VydmljZVBvbGljeT4gY2hpbGRTZXQgPSBuZXcgSGFzaFNldDxJU2VydmljZVBvbGljeT4oIGNoaWxkcmVuICk7Ci0gICAgU2V0PElTZXJ2aWNlUG9saWN5PiBjb21taXR0ZWRDaGlsZFNldCA9IG5ldyBIYXNoU2V0PElTZXJ2aWNlUG9saWN5PiggY29tbWl0dGVkQ2hpbGRyZW4gKTsKLSAgICAKLSAgICBmb3IoIElTZXJ2aWNlUG9saWN5IGNoaWxkIDogY2hpbGRTZXQgKQotICAgIHsKLSAgICAgIGlmKCBjb21taXR0ZWRDaGlsZFNldC5jb250YWlucyggY2hpbGQgKSApCi0gICAgICB7Ci0gICAgICAgIGNvbW1pdHRlZENoaWxkU2V0LnJlbW92ZSggY2hpbGQgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQSBjaGlsZCB3YXMgYWRkZWQgYW5kIGlzIG5vdyBiZWluZyBkZWxldGVkIGJ5IHRoZSBkaXNjYXJkLgotICAgICAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggY2hpbGQsIGZhbHNlICk7Ci0gICAgICAgIHBsYXRmb3JtLmZpcmVDaGlsZENoYW5nZUV2ZW50KCBjaGlsZCwgZmFsc2UgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQW55IGNoaWxkcmVuIGxlZnQgaW4gdGhlIGNvbW1pdHRlZCBzZXQgbXVzdCBoYXZlIGJlZW4gZGVsZXRlZCBhbmQgYXJlIG5vdwotICAgIC8vIGJlaW5nIGFkZGVkIGJhY2sgZHVlIHRvIHRoZSBkaXNjYXJkLgotICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGQgOiBjb21taXR0ZWRDaGlsZFNldCApCi0gICAgewotICAgICAgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIGNoaWxkLCB0cnVlICk7Ci0gICAgICBwbGF0Zm9ybS5maXJlQ2hpbGRDaGFuZ2VFdmVudCggY2hpbGQsIHRydWUgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggSVNlcnZpY2VQb2xpY3kgcG9saWN5LCBib29sZWFuIGlzQWRkICkKLSAgewotICAgIGZvciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBjaGlsZENoYW5nZUxpc3RlbmVycyApCi0gICAgewotICAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gcG9saWN5TGlzdCA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KDEpOwotICAgICAgTGlzdDxCb29sZWFuPiAgICAgICAgYWRkZWRMaXN0ICA9IG5ldyBWZWN0b3I8Qm9vbGVhbj4oMSk7Ci0gICAgICAKLSAgICAgIHBvbGljeUxpc3QuYWRkKCBwb2xpY3kgKTsKLSAgICAgIGFkZGVkTGlzdC5hZGQoIGlzQWRkICk7Ci0gICAgICBsaXN0ZW5lci5jaGlsZENoYW5nZSggcG9saWN5TGlzdCwgYWRkZWRMaXN0ICk7ICAgICAKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMjU3ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMTEzICAgMjA5NzAxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMTExICAgMjE0OTA3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMjE0ICAgMjE4OTk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENvbmN1cnJlbnQgZXhjZXB0aW9uIGZpeAotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA2MjUgICAyMzg0ODIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQWRkaW5nIHRocmVhZCBzYWZldHkgdG8gdGhlIHNlcnZpY2UgcGxhdGZvcm0gYXBpLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLkV2YWx1YXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5FeHByZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuSUV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlByb2plY3RTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIAotewotICBwcml2YXRlIExpc3Q8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPiAgICAgICAgbG9hZExpc3RlbmVyczsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4gICAgICAgICAgIGNvbW1pdHRlZFBvbGljeU1hcDsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4gICAgICAgICAgIHBvbGljeU1hcDsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4+IGVudW1MaXN0OwotICBwcml2YXRlIE1hcDxTdHJpbmcsIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbD4gICAgZW51bUl0ZW1MaXN0OwotICBwcml2YXRlIE1hcDxJUHJvamVjdCwgUHJvamVjdEVudHJ5PiAgICAgICAgICAgICAgZW5hYmxlZFByb2plY3RNYXA7Ci0gIHByaXZhdGUgTGlzdDxFeHByZXNzaW9uPiAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkTGlzdDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPiAgICAgICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzOwotICBwcml2YXRlIExpc3Q8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+ICAgICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdDsKLSAgcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICAgICAgICAgICAgICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5OwotICBwcml2YXRlIExpc3Q8Qm9vbGVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0Q2hpbGRDaGFuZ2VBZGRlZDsKLSAgcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICAgICAgICAgICAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5OwotICBwcml2YXRlIExpc3Q8Qm9vbGVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI+IHByb2plY3RQbGF0Zm9ybUxpc3RlbmVyczsKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgICAgICAgICAgICAgICAgIGFwaVBsYXRmb3JtOwotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwoIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSApCi0gIHsKLSAgICBhcGlQbGF0Zm9ybSA9IHBsYXRmb3JtOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lSZWdpc3RyeSByZWdpc3RyeSAgPSBuZXcgU2VydmljZVBvbGljeVJlZ2lzdHJ5KCB0aGlzICk7Ci0gICAgTGlzdDxTdHJpbmc+ICAgICAgICAgIGxvY2FsSWRzICA9IExvY2FsVXRpbHMuZ2V0TG9jYWxQb2xpY3lJZHMoKTsKLSAgICAKLSAgICBsb2FkTGlzdGVuZXJzICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPigpOwotICAgIHBvbGljeU1hcCAgICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4oKTsKLSAgICBlbnVtTGlzdCAgICAgICAgICA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+PigpOwotICAgIGVudW1JdGVtTGlzdCAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+KCk7Ci0gICAgZW5hYmxlZFByb2plY3RNYXAgPSBuZXcgSGFzaE1hcDxJUHJvamVjdCwgUHJvamVjdEVudHJ5PigpOwotICAgIGVuYWJsZWRMaXN0ICAgICAgID0gbmV3IFZlY3RvcjxFeHByZXNzaW9uPigpOwotICAgIAotICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzICAgICAgICAgPSBuZXcgVmVjdG9yPElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPigpOwotICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzT25Db21taXQgPSBuZXcgVmVjdG9yPElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPigpOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5ICAgICAgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQgICAgICAgPSBuZXcgVmVjdG9yPEJvb2xlYW4+KCk7Ci0gICAgcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcj4oKTsKLSAgICAKLSAgICByZWdpc3RyeS5sb2FkKCBsb2FkTGlzdGVuZXJzLCBwb2xpY3lNYXAsIGVudW1MaXN0LCBlbnVtSXRlbUxpc3QgKTsKLSAgICAKLSAgICAvLyBUaGlzIGZpcnN0IGxvb3AgdGhyb3VnaCB0aGUgaWRzIHdpbGwgb25seSBjcmVhdGUgc2VydmljZSBwb2xpY3kgb2JqZWN0cwotICAgIC8vIHdpdGhvdXQgcG9wdWxhdGluZyB0aGVtIHdpdGggdGhlcmUgdmFsdWVzLgotICAgIGZvciggU3RyaW5nIGxvY2FsUG9saWN5SWQgOiBsb2NhbElkcyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUltcGwgbG9jYWxQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeUltcGwoIGZhbHNlLCBsb2NhbFBvbGljeUlkLCB0aGlzICk7Ci0gICAgICAKLSAgICAgIHBvbGljeU1hcC5wdXQoIGxvY2FsUG9saWN5SWQsIGxvY2FsUG9saWN5ICk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgc2Vjb25kIGxvb3Agd2lsbCBwb3B1bGF0ZSB0aGUgc2VydmljZSBwb2xpY3kgdmFsdWVzIGFuZAotICAgIC8vIGNyb3NzcmVmZXJlbmNlIHBhcmVudCBhbmQgY2hpbGQgc2VydmljZSBwb2xpY2llcy4KLSAgICBmb3IoIFN0cmluZyBsb2NhbFBvbGljeUlkIDogbG9jYWxJZHMgKQotICAgIHsKLSAgICAgIExvY2FsVXRpbHMubG9hZExvY2FsUG9saWN5KCBsb2NhbFBvbGljeUlkLCB0aGlzICk7Ci0gICAgfSAgICAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY2FsbExvYWRMaXN0ZW5lcnMoKQotICB7Ci0gICAgZm9yKCBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIgbG9hZExpc3RlbmVyIDogbG9hZExpc3RlbmVycyApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGxvYWRMaXN0ZW5lci5sb2FkKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBpbiBsb2FkIGxpc3RlbmVyOiIgKyBsb2FkTGlzdGVuZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCksIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGNvbW1pdENoYW5nZXMoIGZhbHNlICk7ICAgCi0KLSAgICAvLyBDb21taXQgYW55IHByb2plY3QgbGV2ZWwgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIGJ5IGxvYWQgbGlzdGVuZXJzLgotICAgIGZvciggSVByb2plY3QgcHJvamVjdCA6IGVuYWJsZWRQcm9qZWN0TWFwLmtleVNldCgpICkKLSAgICB7Ci0gICAgICBjb21taXRDaGFuZ2VzKCBwcm9qZWN0ICk7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBnZXRBcGlQbGF0Zm9ybSgpCi0gIHsKLSAgICByZXR1cm4gYXBpUGxhdGZvcm07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEVuYWJsZWRFeHByZXNzaW9uKCBFeHByZXNzaW9uIGV4cHJlc3Npb24gKQotICB7Ci0gICAgaWYoIGV4cHJlc3Npb24gIT0gbnVsbCApCi0gICAgewotICAgICAgZW5hYmxlZExpc3QuYWRkKCBleHByZXNzaW9uICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgIElFdmFsdWF0aW9uQ29udGV4dCBjb250ZXh0ID0gbmV3IEV2YWx1YXRpb25Db250ZXh0KCBudWxsLCBvYmplY3QgKTsKLSAgICBjb250ZXh0LmFkZFZhcmlhYmxlKCAic2VsZWN0aW9uIiwgb2JqZWN0ICk7IC8vJE5PTi1OTFMtMSQKLSAgICBjb250ZXh0LnNldEFsbG93UGx1Z2luQWN0aXZhdGlvbiggdHJ1ZSApOwotICAgIAotICAgIGZvciggRXhwcmVzc2lvbiBlbmFibGVkSXRlbSA6IGVuYWJsZWRMaXN0ICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgRXZhbHVhdGlvblJlc3VsdCBleHBSZXN1bHQgPSBlbmFibGVkSXRlbS5ldmFsdWF0ZSggY29udGV4dCApOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgYW55IGV4cHJlc3Npb24gcmV0dXJucyBUUlVFIG9yIE5PVF9MT0FERUQgd2Ugd2lsbCByZXR1cm4gdHJ1ZSBhcwotICAgICAgICAvLyB0aGUgcmVzdWx0LgotICAgICAgICBpZiggZXhwUmVzdWx0ICE9IEV2YWx1YXRpb25SZXN1bHQuRkFMU0UgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIHRoZSBleHByZXNzaW9uIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCi0gICAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBldmFsdWF0aW5nIGVuYWJsZW1lbnQgZXhwcmVzc2lvbi4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCBib29sZWFuIHNhdmVMb2NhbHMgKQotICB7Ci0gICAgTGlzdDxTdHJpbmc+IGxvY2FsSWRzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgCi0gICAgaWYoIHNhdmVMb2NhbHMgKSBMb2NhbFV0aWxzLnJlbW92ZUFsbFByZWZlcmVuY2VQb2xpY2llcyggbnVsbCwgbnVsbCApOwotICAgIAotICAgIC8vIEZpcmUgY2hpbGQgY2hhbmdlIGV2ZW50cyBmb3IgY29tbWl0IGxpc3RlbmVycwotICAgIGZvciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBjaGlsZENoYW5nZUxpc3RlbmVyc09uQ29tbWl0ICkKLSAgICB7Ci0gICAgICBsaXN0ZW5lci5jaGlsZENoYW5nZSggY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3ksIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmVtb3ZlRGVsZXRlZFByZWZlcmVuY2VEYXRhKCk7Ci0gICAgCi0gICAgY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3kgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQgID0gbmV3IFZlY3RvcjxCb29sZWFuPigpOwotICAgIAotICAgIGZvciggU2VydmljZVBvbGljeUltcGwgcG9saWN5IDogcG9saWN5TWFwLnZhbHVlcygpICkKLSAgICB7Ci0gICAgICBwb2xpY3kuY29tbWl0Q2hhbmdlcygpOwotICAgICAgCi0gICAgICBpZiggc2F2ZUxvY2FscyAmJiAhcG9saWN5LmlzUHJlZGVmaW5lZCgpICkKLSAgICAgIHsKLSAgICAgICAgTG9jYWxVdGlscy5zYXZlTG9jYWxQb2xpY3koIHBvbGljeSApOwotICAgICAgICBsb2NhbElkcy5hZGQoIHBvbGljeS5nZXRJZCgpICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBzYXZlTG9jYWxzICkgTG9jYWxVdGlscy5zYXZlTG9jYWxJZHMoIGxvY2FsSWRzICk7Ci0gICAgCi0gICAgY29tbWl0dGVkUG9saWN5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4oKTsKLSAgICBjb21taXR0ZWRQb2xpY3lNYXAucHV0QWxsKCBwb2xpY3lNYXAgKTsKLSAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZURlbGV0ZWRQcmVmZXJlbmNlRGF0YSgpCi0gIHsKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3kuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBJU2VydmljZVBvbGljeSBwb2xpY3kgPSBjb21taXRDaGlsZENoYW5nZVBvbGljeS5nZXQoIGluZGV4ICk7Ci0gICAgICBib29sZWFuICAgICAgICBhZGRlZCAgPSBjb21taXRDaGlsZENoYW5nZUFkZGVkLmdldCggaW5kZXggKTsKLSAgICAgIAotICAgICAgaWYoICFhZGRlZCApCi0gICAgICB7Ci0gICAgICAgIC8vIEFkZCBwb2xpY3kgaXMgYmVpbmcgZGVsZXRlZC4gIFdlIG5lZWQgdG8gcmVtb3ZlIGFueSBzdGF0ZSBkYXRhCi0gICAgICAgIC8vIGZvciB0aGlzIHBvbGljeSBhdCB0aGUgd29ya3NwYWNlIGxldmVsIGFuZCB0aGUgcHJvamVjdCBsZXZlbC4KLSAgICAgICAgTG9jYWxVdGlscy5yZW1vdmVBbGxQcmVmZXJlbmNlUG9saWNpZXMoIHBvbGljeS5nZXRJZCgpLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgICBmb3IoIElQcm9qZWN0IHByb2ogOiBlbmFibGVkUHJvamVjdE1hcC5rZXlTZXQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggcHJvai5leGlzdHMoKSAmJiBwcm9qLmlzT3BlbigpICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByb2pQcmVmcyA9IG5ldyBQcm9qZWN0U2NvcGUoIHByb2ogKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgICAgICAgICAgTG9jYWxVdGlscy5yZW1vdmVBbGxQcmVmZXJlbmNlUG9saWNpZXMoIHBvbGljeS5nZXRJZCgpLCBwcm9qUHJlZnMgKTsKLSAgICAgICAgICAKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcm9qUHJlZnMuZmx1c2goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBCYWNraW5nU3RvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIkVycm9yIGZsdXNoaW5nIHByb2plY3QgcHJvcGVydGllcy4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJCAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbGx5IHRvIHJlbW92ZSBhIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUG9saWN5KCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICB7Ci0gICAgcG9saWN5TWFwLnJlbW92ZSggcG9saWN5LmdldElkKCkgKTsKLSAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggcG9saWN5LCBmYWxzZSApOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgcGxhdGZvcm0gQVBJCi0gICAqIAotICAgKiBAcGFyYW0gcG9saWN5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVQbGF0Zm9ybVBvbGljeSggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLSAgewotICAgIGlmKCBwb2xpY3kuaXNQcmVkZWZpbmVkKCkgKSByZXR1cm47Ci0gICAgCi0gICAgSVNlcnZpY2VQb2xpY3kgcGFyZW50ID0gcG9saWN5LmdldFBhcmVudFBvbGljeSgpOwotICAgIAotICAgIGlmKCBwYXJlbnQgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gUmVtb3ZlIGFueSBjaGlsZHJlbiBmaXJzdAotICAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRyZW4gPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiggcG9saWN5LmdldENoaWxkcmVuKCkgKTsKLSAgICAgIAotICAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICAgIHsKLSAgICAgICAgcG9saWN5LnJlbW92ZUNoaWxkKCBjaGlsZCApOyAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJlbW92ZVBvbGljeSggKFNlcnZpY2VQb2xpY3lJbXBsKXBvbGljeSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoIHBvbGljeSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsIGJvb2xlYW4gb25Db21taXQgKQotICB7Ci0gICAgaWYoIG9uQ29tbWl0ICkKLSAgICB7Ci0gICAgICBjaGlsZENoYW5nZUxpc3RlbmVyc09uQ29tbWl0LmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG9uQ29tbWl0ICkKLSAgewotICAgIGlmKCBvbkNvbW1pdCApCi0gICAgewotICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdC5yZW1vdmUoIGxpc3RlbmVyICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjaGlsZENoYW5nZUxpc3RlbmVycy5yZW1vdmUoIGxpc3RlbmVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBxdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzKCBib29sZWFuIHF1ZXVlICkKLSAgewotICAgIGlmKCBxdWV1ZSAmJiBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkID09IG51bGwgKQotICAgIHsKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlQWRkZWQgPSBuZXcgVmVjdG9yPEJvb2xlYW4+KCk7Ci0gICAgICBxdWV1ZWRDaGlsZENoYW5nZVBvbGljeSA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgfQotICAgIGVsc2UgaWYoICFxdWV1ZSAmJiBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkICE9IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFF1ZXVpbmcgaGFzIGJlZW4gdHVybmVkIG9mZiBzbyB3ZSB3aWxsIGZpcmUgYWxsIHRoZSBxdWV1ZWQgZXZlbnRzLgotICAgICAgZm9yKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGNoaWxkQ2hhbmdlTGlzdGVuZXJzICkKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIuY2hpbGRDaGFuZ2UoIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5LCBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlQWRkZWQgPSBudWxsOwotICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VQb2xpY3kgPSBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgYm9vbGVhbiBpc0FkZCApCi0gIHsKLSAgICBpZiggcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY3lMaXN0ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oMSk7Ci0gICAgICBMaXN0PEJvb2xlYW4+ICAgICAgICBhZGRlZExpc3QgID0gbmV3IFZlY3RvcjxCb29sZWFuPigxKTsKLSAgICAgIAotICAgICAgcG9saWN5TGlzdC5hZGQoIHBvbGljeSApOwotICAgICAgYWRkZWRMaXN0LmFkZCggaXNBZGQgKTsKLSAgICAgIAotICAgICAgZm9yKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGNoaWxkQ2hhbmdlTGlzdGVuZXJzICkKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIuY2hpbGRDaGFuZ2UoIHBvbGljeUxpc3QsIGFkZGVkTGlzdCApOyAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkLmFkZCggaXNBZGQgKTsKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5LmFkZCggcG9saWN5ICk7Ci0gICAgfQotICAgIAotICAgIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQuYWRkKCBpc0FkZCApOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5LmFkZCggcG9saWN5ICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNvbW1pdENoYW5nZXMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiBwb2xpY3lNYXAudmFsdWVzKCkgKQotICAgIHsKLSAgICAgICgoUG9saWN5U3RhdGVJbXBsKXBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApKS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgfQotICAgIAotICAgIFByb2plY3RFbnRyeSBlbnRyeSA9IGdldFByb2plY3RFbnRyeSggcHJvamVjdCApOwotICAgIAotICAgIGVudHJ5LmlzRW5hYmxlZENvbW1pdHRlZCA9IGVudHJ5LmlzRW5hYmxlZDsgIAotICAgIHNldFByb2plY3RFbmFibGVkKCBwcm9qZWN0LCBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQgKTsKLSAgICAgICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcm9qZWN0UHJlZnMgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICAgIAotICAgICAgcHJvamVjdFByZWZzLmZsdXNoKCk7Ci0gICAgfQotICAgIGNhdGNoKCBCYWNraW5nU3RvcmVFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiRXJyb3Igd2hpbGUgY29tbWl0dGluZyBwcm9qZWN0IHByZWZlcmVuY2VzLiIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBwb2xpY3lNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPigpOwotICAgIHBvbGljeU1hcC5wdXRBbGwoIGNvbW1pdHRlZFBvbGljeU1hcCApOwotICAgIAotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICBjb21taXRDaGlsZENoYW5nZUFkZGVkICA9IG5ldyBWZWN0b3I8Qm9vbGVhbj4oKTsKLSAgICAKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IGNvbW1pdHRlZFBvbGljeU1hcC52YWx1ZXMoKSApCi0gICAgewotICAgICAgcG9saWN5LmRpc2NhcmRDaGFuZ2VzKCk7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiBwb2xpY3lNYXAudmFsdWVzKCkgKQotICAgIHsKLSAgICAgICgoUG9saWN5U3RhdGVJbXBsKXBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApKS5kaXNjYXJkQ2hhbmdlcygpOwotICAgIH0KLSAgICAKLSAgICBQcm9qZWN0RW50cnkgZW50cnkgPSBnZXRQcm9qZWN0RW50cnkoIHByb2plY3QgKTsKLSAgICAKLSAgICBlbnRyeS5pc0VuYWJsZWQgPSBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCkKLSAgewotICAgIFZlY3RvcjxTZXJ2aWNlUG9saWN5SW1wbD4gdGVtcFBvbGljeVZhbHVlcyAKLSAgICAgICA9IG5ldyBWZWN0b3I8U2VydmljZVBvbGljeUltcGw+KCBwb2xpY3lNYXAudmFsdWVzKCkgKTsKLSAgICAKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IHRlbXBQb2xpY3lWYWx1ZXMgKQotICAgIHsKLSAgICAgIHBvbGljeS5yZXN0b3JlRGVmYXVsdHMoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cyggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IHBvbGljeU1hcC52YWx1ZXMoKSApCi0gICAgewotICAgICAgcG9saWN5LnJlc3RvcmVEZWZhdWx0cyggcHJvamVjdCApOwotICAgIH0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGxQb2xpY3lJZHMoKQotICB7Ci0gICAgcmV0dXJuIHBvbGljeU1hcC5rZXlTZXQoKTsKLSAgfQotICAgIAotICBwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyggSUZpbHRlciBmaWx0ZXIgKQotICB7Ci0gICAgTGlzdDxJU2VydmljZVBvbGljeT4gcm9vdFBvbGljaWVzID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAKLSAgICBmb3IoIFN0cmluZyBwb2xpY3lJZCA6IHBvbGljeU1hcC5rZXlTZXQoKSApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUltcGwgcG9saWN5ID0gcG9saWN5TWFwLmdldCggcG9saWN5SWQgKTsKLSAgICAgIAotICAgICAgaWYoIHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGZpbHRlciA9PSBudWxsIHx8IChmaWx0ZXIgIT0gbnVsbCAmJiBmaWx0ZXIuYWNjZXB0KCBwb2xpY3kgKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgcm9vdFBvbGljaWVzLmFkZCggcG9saWN5ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJvb3RQb2xpY2llczsKLSAgfQotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lJbXBsIGNyZWF0ZVNlcnZpY2VQb2xpY3koIElTZXJ2aWNlUG9saWN5IHBhcmVudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICBpZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICBlbnVtTGlzdElkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgIGRlZmF1bHRFbnVtSWQgKQotICB7Ci0gICAgaWYoIGlkID09IG51bGwgKSBpZCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuaWQiOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgU3RyaW5nICAgICAgICAgICAgdW5pcXVlSWQgPSBtYWtlVW5pcXVlSWQoIGlkICk7Ci0gICAgU2VydmljZVBvbGljeUltcGwgcG9saWN5ICAgPSBuZXcgU2VydmljZVBvbGljeUltcGwoIGZhbHNlLCB1bmlxdWVJZCwgdGhpcyApOwotICAgIAotICAgIHBvbGljeS5zZXRQYXJlbnQoIChTZXJ2aWNlUG9saWN5SW1wbClwYXJlbnQgKTsKLSAgICBwb2xpY3kuc2V0RW51bUxpc3RJZCggZW51bUxpc3RJZCApOwotICAgIHBvbGljeS5zZXREZWZhdWx0RW51bUlkKCBkZWZhdWx0RW51bUlkICk7Ci0gICAgcG9saWN5TWFwLnB1dCggdW5pcXVlSWQsIHBvbGljeSApOwotICAgIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBwb2xpY3ksIHRydWUgKTsKLSAgICAKLSAgICByZXR1cm4gcG9saWN5OwotICB9Ci0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeUltcGwgZ2V0U2VydmljZVBvbGljeSggU3RyaW5nIGlkICkKLSAgewotICAgIHJldHVybiBpZCA9PSBudWxsID8gbnVsbCA6IHBvbGljeU1hcC5nZXQoIGlkICk7ICAKLSAgfQotICAKLSAgcHVibGljIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBnZXRTdGF0ZUVudW1lcmF0aW9uKCBTdHJpbmcgZW51bUlkICkKLSAgewotICAgIHJldHVybiBlbnVtTGlzdC5nZXQoIGVudW1JZCApOyAKLSAgfQotICAKLSAgcHVibGljIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBnZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbiggU3RyaW5nIHN0YXRlSXRlbUlkICkKLSAgewotICAgIHJldHVybiBlbnVtSXRlbUxpc3QuZ2V0KCBzdGF0ZUl0ZW1JZCApOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgUHJvamVjdEVudHJ5IGVudHJ5ICA9IGdldFByb2plY3RFbnRyeSggcHJvamVjdCApOwotICAgIAotICAgIHJldHVybiBlbnRyeS5pc0VuYWJsZWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBnZXRQcm9qZWN0UHJlZmVyZW5jZUVuYWJsZWQoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZCAgICAgICAgICA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEOwotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZlcmVuY2UgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggcGx1Z2luSWQgKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIGtleSAgICAgICAgICAgICAgID0gcGx1Z2luSWQgKyAiLnByb2plY3RFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJldHVybiBwcm9qZWN0UHJlZmVyZW5jZS5nZXRCb29sZWFuKCBrZXksIGZhbHNlICk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIFByb2plY3RFbnRyeSBlbnRyeSAgPSBnZXRQcm9qZWN0RW50cnkoIHByb2plY3QgKTsKLSAgICAKLSAgICBlbnRyeS5pc0VuYWJsZWQgPSB2YWx1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIHByb2plY3QgcGxhdGZvcm0gbGlzdGVuZXIuICBXaGVuIGEgcGFydGljdWxhciBwcm9qZWN0IGlzIHJlZmVyZW5jZWQKLSAgICogYnkgaW4gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgdGhlIGZpcnN0Ci0gICAqIHRpbWUgdGhlIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHN5c3RlbS4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2plY3RMb2FkTGlzdGVuZXIoIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUHJvamVjdExvYWRMaXN0ZW5lciggSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBwcm9qZWN0UGxhdGZvcm1MaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0UHJvamVjdEVuYWJsZWQoIElQcm9qZWN0IHByb2plY3QsIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZCAgICAgICAgICA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEOwotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZlcmVuY2UgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggcGx1Z2luSWQgKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIGtleSAgICAgICAgICAgICAgID0gcGx1Z2luSWQgKyAiLnByb2plY3RFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgcHJvamVjdFByZWZlcmVuY2UucHV0Qm9vbGVhbigga2V5LCB2YWx1ZSApOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBQcm9qZWN0RW50cnkgZ2V0UHJvamVjdEVudHJ5KCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIFByb2plY3RFbnRyeSBlbnRyeSAgPSBlbmFibGVkUHJvamVjdE1hcC5nZXQoIHByb2plY3QgKTsKLSAgICAKLSAgICBpZiggZW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgUHJvamVjdEVudHJ5KCk7Ci0gICAgICBlbmFibGVkUHJvamVjdE1hcC5wdXQoIHByb2plY3QsIGVudHJ5ICk7Ci0gICAgICBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQgPSBnZXRQcm9qZWN0UHJlZmVyZW5jZUVuYWJsZWQoIHByb2plY3QgKTsKLSAgICAgIGVudHJ5LmlzRW5hYmxlZCA9IGVudHJ5LmlzRW5hYmxlZENvbW1pdHRlZDsKLSAgICAgIGZpcmVQcm9qZWN0TG9hZExpc3RlbmVyKCBwcm9qZWN0ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZmlyZVByb2plY3RMb2FkTGlzdGVuZXIoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGxpc3RlbmVyIDogcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzICkKLSAgICB7Ci0gICAgICBsaXN0ZW5lci5sb2FkKCBwcm9qZWN0ICk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBtYWtlVW5pcXVlSWQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBTdHJpbmcgIHJlc3VsdCAgPSBpZDsKLSAgICBpbnQgICAgIGlkQ291bnQgPSAxOwotICAgIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSggIlxcZCokIiApOyAvLyBNYXRjaCBhbnkgbnVtZXJpY2FsIGRpZ2l0cyBhdCB0aGUgZW5kIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHN0cmluZy4KLSAgICAKLSAgICB3aGlsZSggcG9saWN5TWFwLmNvbnRhaW5zS2V5KCByZXN1bHQgKSApCi0gICAgewotICAgICAgTWF0Y2hlciBtYXRjaGVyID0gcGF0dGVybi5tYXRjaGVyKCByZXN1bHQgKTsKLSAgICAKLSAgICAgIHJlc3VsdCA9IG1hdGNoZXIucmVwbGFjZUZpcnN0KCAiIiApICsgaWRDb3VudDsgLy8kTk9OLU5MUy0xJAotICAgICAgaWRDb3VudCsrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFByb2plY3RFbnRyeQotICB7Ci0gICAgIGJvb2xlYW4gaXNFbmFibGVkQ29tbWl0dGVkOwotICAgICBib29sZWFuIGlzRW5hYmxlZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ODAyZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA0MjggICAyMjc1MDEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgRml4ZWQgdG9Mb3dlckNhc2UgTG9jYWxlIHByb2JsZW0uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLkV4cHJlc3Npb25Db252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5FeHByZXNzaW9uVGFnTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuUmVnaXN0cnlVdGlsczsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lSZWdpc3RyeQotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX1BPTElDWV9JRCA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICsgIi5zZXJ2aWNlcG9saWN5IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtOwotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lSZWdpc3RyeSggU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbCBwbGF0Zm9ybSApCi0gIHsKLSAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxvYWQoIExpc3Q8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPiAgICAgICAgbG9hZExpc3RlbmVycywKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU2VydmljZVBvbGljeUltcGw+ICAgICAgICAgICBwb2xpY3lNYXAsCi0gICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPj4gZW51bU1hcCwKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsPiAgICBlbnVtSXRlbU1hcCApCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKFNFUlZJQ0VfUE9MSUNZX0lEKTsKLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogZWxlbWVudHMgKQotICAgIHsKLSAgICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW1lbnQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCBMb2NhbGUuRU5HTElTSCApOwotICAgICAgCi0gICAgICBpZiggZWxlbWVudE5hbWUuZXF1YWxzKCAic2VydmljZXBvbGljeSIpICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBsb2FkU2VydmljZVBvbGljeSggZWxlbWVudCwgbG9hZExpc3RlbmVycywgcG9saWN5TWFwLCBlbnVtTWFwLCBlbnVtSXRlbU1hcCApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvciggIlVuZGVmaW5lZCBzZXJ2aWNlIHBvbGljeSBlbGVtZW50LCAiICsgZWxlbWVudE5hbWUgKyAiIGZvdW5kLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFJlc29sdmUgYWxsIHBvbGljeSBzZXJ2aWNlcy4KLSAgICBmb3IoIFN0cmluZyBwb2xpY3lJZCA6IHBvbGljeU1hcC5rZXlTZXQoKSApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUltcGwgcG9saWN5ID0gcG9saWN5TWFwLmdldCggcG9saWN5SWQgKTsKLSAgICAgIAotICAgICAgcG9saWN5LnJlc29sdmUoKTsKLSAgICB9Ci0gIH0KLSAgIAotICBwcml2YXRlIHZvaWQgbG9hZFNlcnZpY2VQb2xpY3koIElDb25maWd1cmF0aW9uRWxlbWVudCAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcj4gICAgICAgIGxvYWRMaXN0ZW5lcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU2VydmljZVBvbGljeUltcGw+ICAgICAgICAgICBwb2xpY3lNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+PiBlbnVtTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbD4gICAgZW51bUl0ZW1NYXAgKSAKLSAgewotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmdldENoaWxkcmVuKCk7Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZEVsZW1lbnRzICkKLSAgICB7Ci0gICAgICBTdHJpbmcgY2hpbGROYW1lID0gY2hpbGQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCBMb2NhbGUuRU5HTElTSCApOwotICAgICAgCi0gICAgICBpZiggY2hpbGROYW1lLmVxdWFscyggImxvYWRsaXN0ZW5lciIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZExvYWRMaXN0ZW5lciggY2hpbGQsIGxvYWRMaXN0ZW5lcnMgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNoaWxkTmFtZS5lcXVhbHMoICJwb2xpY3kiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRQb2xpY3koIGNoaWxkLCBwb2xpY3lNYXAgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNoaWxkTmFtZS5lcXVhbHMoICJlbnVtZXJhdGlvbiIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZEVudW1lcmF0aW9uKCBjaGlsZCwgZW51bU1hcCwgZW51bUl0ZW1NYXAgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNoaWxkTmFtZS5lcXVhbHMoIEV4cHJlc3Npb25UYWdOYW1lcy5FTkFCTEVNRU5UICkgKSAKLSAgICAgIHsKLSAgICAgICAgbG9hZEVuYWJsZW1lbnQoIGNoaWxkICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVsZW1lbnQsICIgKyBjaGlsZE5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkRW5hYmxlbWVudCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gRXhwcmVzc2lvbkNvbnZlcnRlci5nZXREZWZhdWx0KCkucGVyZm9ybSggZWxlbWVudCApOwotICAgICAgCi0gICAgICBwbGF0Zm9ybS5hZGRFbmFibGVkRXhwcmVzc2lvbiggZXhwcmVzc2lvbiApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGVycm9yKCAiRXJyb3IgbG9hZGluZyBlbmFibGVtZW50IGV4cHJlc3Npb246ICIgKyBleGMuZ2V0TWVzc2FnZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkRW51bWVyYXRpb24oIElDb25maWd1cmF0aW9uRWxlbWVudCAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+PiBlbnVtTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+ICAgIGVudW1JdGVtTWFwICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBlbnVtSWQgICAgICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJkZWZhdWx0IiApOyAvLyROT04tTkxTLTEkCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmdldENoaWxkcmVuKCk7Ci0gICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0ICAgICAgPSBuZXcgVmVjdG9yPElTdGF0ZUVudW1lcmF0aW9uSXRlbT4oKTsKLSAgICAKLSAgICBpZiggZW51bUlkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiXCJJZFwiIGF0dHJpYnV0ZSBtaXNzaW5nIGZyb20gU2VyaXZjZSBQb2xpY3kgRW51bWVyYXRpb24gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZEVsZW1lbnRzICkKLSAgICB7Ci0gICAgICBTdHJpbmcgY2hpbGROYW1lID0gY2hpbGQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCBMb2NhbGUuRU5HTElTSCApOwotICAgICAgCi0gICAgICBpZiggY2hpbGROYW1lLmVxdWFscyggIml0ZW0iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRJdGVtKCBjaGlsZCwgZW51bUxpc3QsIGVudW1JdGVtTWFwICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVudW1lcmF0aW9uIGVsZW1lbnQsICIgKyBjaGlsZE5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0gCi0gICAgfQotICAgIAotICAgIGlmKCBkZWZhdWx0RW51bUlkICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbCBkZWZhdWx0RW51bSA9IGVudW1JdGVtTWFwLmdldCggZGVmYXVsdEVudW1JZCApOwotICAgICAgCi0gICAgICBpZiggZGVmYXVsdEVudW0gPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiRGVmYXVsdCBlbnVtIGF0dHJpYnV0ZSBmb3IgZW51bWVyYXRpb24gIiArIGVudW1JZCArICIgbm90IGZvdW5kLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRFbnVtLnNldERlZmF1bHQoIHRydWUgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZW51bU1hcC5wdXQoIGVudW1JZCwgZW51bUxpc3QgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRJdGVtKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICAgICAgICAgICAgIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+ICAgICAgICAgICBlbnVtTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+IGVudW1JdGVtTWFwKQotICB7Ci0gICAgU3RyaW5nIGl0ZW1JZCAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgc2hvcnROYW1lID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJzaG9ydG5hbWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgbG9uZ05hbWUgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJsb25nbmFtZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCBpdGVtSWQgPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJcIklkXCIgYXR0cmlidXRlIG1pc3NpbmcgZnJvbSBTZXJpdmNlIFBvbGljeSBFbnVtZXJhdGlvbiBpdGVtIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGlmKCBzaG9ydE5hbWUgPT0gbnVsbCAmJiBsb25nTmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggInNob3J0TmFtZSBvciBsb25nTmFtZSBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIFNlcnZpY2UgUG9saWN5IEVudW1lcmF0aW9uIGl0ZW0gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiggc2hvcnROYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIHNob3J0TmFtZSA9IGxvbmdOYW1lOwotICAgIH0KLSAgICBlbHNlIGlmKCBsb25nTmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBsb25nTmFtZSA9IHNob3J0TmFtZTsKLSAgICB9Ci0gICAgICAKLSAgICBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwgaXRlbSA9IG5ldyBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwoKTsKLSAgICAKLSAgICBpdGVtLnNldElkKCBpdGVtSWQgKTsKLSAgICBpdGVtLnNldFNob3J0TmFtZSggc2hvcnROYW1lICk7Ci0gICAgaXRlbS5zZXRMb25nTmFtZSggbG9uZ05hbWUgKTsKLSAgICBlbnVtTGlzdC5hZGQoIGl0ZW0gKTsKLSAgICBlbnVtSXRlbU1hcC5wdXQoIGl0ZW1JZCwgaXRlbSApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZExvYWRMaXN0ZW5lciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcj4gbG9hZExpc3RlbmVycyApCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBPYmplY3QgbGlzdGVuZXIgPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBpZiggbGlzdGVuZXIgaW5zdGFuY2VvZiBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIgKQotICAgICAgewotICAgICAgICBsb2FkTGlzdGVuZXJzLmFkZCggKElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcilsaXN0ZW5lciApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvciggIkxvYWQgbGlzdGVuZXIsICIgKyBlbGVtZW50LmdldEF0dHJpYnV0ZSggImNsYXNzIiApICsgIiBkb2VzIG5vdCBpbXBsZW1lbnQgSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIHNlcnZpY2UgcG9saWN5IGxvYWRsaXN0ZW5lci4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRQb2xpY3koIElDb25maWd1cmF0aW9uRWxlbWVudCBwb2xpY3ksIE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPiBwb2xpY3lNYXAgKQotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICAgICBwb2xpY3lFbGVtZW50cyA9IHBvbGljeS5nZXRDaGlsZHJlbigpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQgICAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5LCAicGFyZW50cG9saWN5aWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeSwgImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBlbnVtTGlzdElkICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJlbnVtbGlzdGlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJkZWZhdWx0ZW51bWlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlVmFsdWUgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJtdXRhYmxlIiApOyAvLyROT04tTkxTLTEkCi0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlICAgICAgICA9IG11dGFibGVWYWx1ZSAhPSBudWxsICYmIG11dGFibGVWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCAidHJ1ZSIgKTsgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIERlc2NyaXB0b3JJbXBsICAgICAgICAgICAgICAgZGVzY3JpcHRvciAgICAgPSBudWxsOwotICAgIExpc3Q8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyAgPSBuZXcgVmVjdG9yPFVucmVzb2x2ZWRSZWxhdGlvbnNoaXA+KCk7Ci0gICAgTGlzdDxTdHJpbmdbXT4gICAgICAgICAgICAgICBzdGF0ZUtleVZhbHVlcyA9IG5ldyBWZWN0b3I8U3RyaW5nW10+KCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIG11dGFibGUgYXR0cmlidXRlIHdhcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgZW51bUxpc3RJZCBhdHRyaWJ1dGUKLSAgICAvLyBhdHRyaWJ1dGUgd2FzIHNwZWNpZmllZCB0aGVuIHRoaXMgcG9saWN5IHNob3VsZCBiZSBtdXRhYmxlLCBzaW5jZQotICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBhc3NvY2lhdGUgc3RhdGUgd2l0aCBhIHBvbGljeSB0aGF0IGlzIG5vdAotICAgIC8vIGNoYW5nZWFibGUuCi0gICAgaWYoIG11dGFibGVWYWx1ZSA9PSBudWxsICYmIGVudW1MaXN0SWQgIT0gbnVsbCApCi0gICAgewotICAgICAgbXV0YWJsZSA9IHRydWU7ICAKLSAgICB9Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgcG9saWN5RWxlbWVudCA6IHBvbGljeUVsZW1lbnRzICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBwb2xpY3lFbGVtZW50LmdldE5hbWUoKS50b0xvd2VyQ2FzZSggTG9jYWxlLkVOR0xJU0ggKTsKLSAgICAgIAotICAgICAgICBpZiggbmFtZS5lcXVhbHMoICJkZXNjcmlwdG9yIikgKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBkZXNjcmlwdG9yID0gUmVnaXN0cnlVdGlscy5sb2FkRGVzY3JpcHRvciggcG9saWN5RWxlbWVudCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAicmVsYXRpb25zaGlwIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgbG9hZFJlbGF0aW9uc2hpcCggcG9saWN5RWxlbWVudCwgcmVsYXRpb25zaGlwcyApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAic3RhdGUiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcga2V5ICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5RWxlbWVudCwgImtleSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3lFbGVtZW50LCAidmFsdWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAKLSAgICAgICAgICBpZigga2V5ID09IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgc3RhdGUgbWlzc2luZyBhdHRyaWJ1dGUgXCJrZXlcIi4iICk7IC8vJE5PTi1OTFMtMSQgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZiggdmFsdWUgPT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoICJTZXJ2aWNlIHBvbGljeSBzdGF0ZSBtaXNzaW5nIGF0dHJpYnV0ZSBcInZhbHVlXCIuIiApOyAvLyROT04tTkxTLTEkICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGtleSAhPSBudWxsICYmIHZhbHVlICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlS2V5VmFsdWVzLmFkZCggbmV3IFN0cmluZ1tdeyBrZXksIHZhbHVlIH0gKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgZWxlbWVudCwgIiArIG5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgU2VydmljZVBvbGljeUltcGwgbmV3UG9saWN5ID0gbmV3IFNlcnZpY2VQb2xpY3lJbXBsKCB0cnVlLCBpZCwgcGxhdGZvcm0gKTsKLSAgICAgIAotICAgICAgbmV3UG9saWN5LnNldFVucmVzb2x2ZWRQYXJlbnQoIHBhcmVudElkICk7Ci0gICAgICBuZXdQb2xpY3kuc2V0VW5yZXNvbHZlZFJlbGF0aW9uc2hpcHMoIHJlbGF0aW9uc2hpcHMgKTsKLSAgICAgIG5ld1BvbGljeS5zZXREZXNjcmlwdG9yKCBkZXNjcmlwdG9yICk7Ci0gICAgICBuZXdQb2xpY3kuc2V0RW51bUxpc3RJZCggZW51bUxpc3RJZCApOwotICAgICAgbmV3UG9saWN5LnNldERlZmF1bHRFbnVtSWQoIGRlZmF1bHRFbnVtSWQgKTsKLSAgICAgIHBvbGljeU1hcC5wdXQoIGlkLCBuZXdQb2xpY3kgKTsKLSAgICAgIAotICAgICAgUG9saWN5U3RhdGVJbXBsIHBvbGljeVN0YXRlID0gKFBvbGljeVN0YXRlSW1wbCluZXdQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKTsKLSAgICAgIAotICAgICAgLy8gVGVtcG9yYXJpbHkgYWxsb3cgdGhlIHN0YXRlIHRvIGJlIHVwZGF0ZWQgZm9yIHN0YXRpYyBzdGF0ZSBwcm92aWRlZAotICAgICAgLy8gYnkgdGhlIGV4dGVuZGVyLgotICAgICAgcG9saWN5U3RhdGUuaW50ZXJuYWxTZXRNdXRhYmxlKCB0cnVlICk7Ci0gICAgICAKLSAgICAgIGZvciggU3RyaW5nW10ga2V5VmFsdWUgOiBzdGF0ZUtleVZhbHVlcyApCi0gICAgICB7Ci0gICAgICAgIHBvbGljeVN0YXRlLnB1dFZhbHVlKCBrZXlWYWx1ZVswXSwga2V5VmFsdWVbMV0gKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcG9saWN5U3RhdGUuaW50ZXJuYWxTZXRNdXRhYmxlKCBtdXRhYmxlICk7Ci0gICAgfQotICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBlcnJvciggIkFuIGVycm9yIHdhcyBmb3VuZCBsb2FkaW5nIGEgc2VydmljZSBwb2xpY3kuIiApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gICAgCi0gIHByaXZhdGUgdm9pZCBsb2FkUmVsYXRpb25zaGlwKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgcmVsYXRpb25zaGlwRWxlbWVudCwgTGlzdDxVbnJlc29sdmVkUmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzICkKLSAgewotICAgIFN0cmluZyBlbnVtVmFsdWVBdHRyID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHJlbGF0aW9uc2hpcEVsZW1lbnQsICJlbnVtbGlzdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCBlbnVtVmFsdWVBdHRyID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgcmVsYXRpb25zaGlwIG1pc3NpbmcgYXR0cmlidXRlIFwiZW51bUxpc3RcIi4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgTGlzdDxTdHJpbmc+ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VFbnVtTGlzdCAgICAgICAgID0gQXJyYXlzLmFzTGlzdCggZW51bVZhbHVlQXR0ci5zcGxpdCggIiAiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdICAgICAgICAgICAgY2hpbGRyZW4gICAgICAgICAgICAgICA9IHJlbGF0aW9uc2hpcEVsZW1lbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHRhcmdldFJlbGF0aW9uc2hpcExpc3QgPSBuZXcgVmVjdG9yPFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+KCk7Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBjaGlsZC5nZXROYW1lKCkudG9Mb3dlckNhc2UoIExvY2FsZS5FTkdMSVNIICk7Ci0gICAgICAKLSAgICAgIGlmKCBuYW1lLmVxdWFscyggInRhcmdldHBvbGljeSIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggY2hpbGQsIHRhcmdldFJlbGF0aW9uc2hpcExpc3QgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgZWxlbWVudCwgIiArIG5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwID0gbmV3IFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAoIHNvdXJjZUVudW1MaXN0LCB0YXJnZXRSZWxhdGlvbnNoaXBMaXN0ICk7Ci0gICAgCi0gICAgcmVsYXRpb25zaGlwcy5hZGQoIHJlbGF0aW9uc2hpcCApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IHBvbGljeUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHBvbGljeVJlbGF0aW9uc2hpcExpc3QgKQotICB7Ci0gICAgU3RyaW5nIGl0ZW1MaXN0QXR0ciA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3lFbGVtZW50LCAiaXRlbWxpc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgcG9saWN5SWQgICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3lFbGVtZW50LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiggaXRlbUxpc3RBdHRyID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgcmVsYXRpb25zaGlwIG1pc3NpbmcgYXR0cmlidXRlIFwiZW51bUxpc3RcIi4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHBvbGljeUlkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgcmVsYXRpb25zaGlwIG1pc3NpbmcgYXR0cmlidXRlIFwiaWRcIi4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgTGlzdDxTdHJpbmc+ICAgICAgICAgICAgICAgICB0YXJnZXRFbnVtTGlzdCAgICAgPSBBcnJheXMuYXNMaXN0KCBpdGVtTGlzdEF0dHIuc3BsaXQoICIgIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwIHBvbGljeVJlbGF0aW9uc2hpcCA9IG5ldyBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwKCBwb2xpY3lJZCwgdGFyZ2V0RW51bUxpc3QgKTsKLSAgICAKLSAgICBwb2xpY3lSZWxhdGlvbnNoaXBMaXN0LmFkZCggcG9saWN5UmVsYXRpb25zaGlwICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBlcnJvciggU3RyaW5nIG1lc3NhZ2UgKQotICB7Ci0gICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggbWVzc2FnZSwgbnVsbCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1N0YXRlRW51bWVyYXRpb25JdGVtSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlMjI5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1N0YXRlRW51bWVyYXRpb25JdGVtSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotCi1wdWJsaWMgY2xhc3MgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsIGltcGxlbWVudHMgSVN0YXRlRW51bWVyYXRpb25JdGVtCi17Ci0gIHByaXZhdGUgU3RyaW5nICBpZDsKLSAgcHJpdmF0ZSBTdHJpbmcgIHNob3J0TmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgIGxvbmdOYW1lOwotICBwcml2YXRlIGJvb2xlYW4gaXNEZWZhdWx0ID0gZmFsc2U7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCkKLSAgewotICAgIHJldHVybiBzaG9ydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3J0TmFtZShTdHJpbmcgc2hvcnROYW1lKQotICB7Ci0gICAgdGhpcy5zaG9ydE5hbWUgPSBzaG9ydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ05hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxvbmdOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMb25nTmFtZShTdHJpbmcgbG9uZ05hbWUpCi0gIHsKLSAgICB0aGlzLmxvbmdOYW1lID0gbG9uZ05hbWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlzRGVmYXVsdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHQoYm9vbGVhbiBpc0RlZmF1bHQpCi0gIHsKLSAgICB0aGlzLmlzRGVmYXVsdCA9IGlzRGVmYXVsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1VucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3ZDc0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1VucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgIHBvbGljeUlkOwotICBwcml2YXRlIExpc3Q8U3RyaW5nPiBlbnVtTGlzdDsKLSAgCi0gIHB1YmxpYyBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwKCBTdHJpbmcgcG9saWN5SWQsIExpc3Q8U3RyaW5nPiBlbnVtTGlzdCApCi0gIHsKLSAgICB0aGlzLnBvbGljeUlkID0gcG9saWN5SWQ7Ci0gICAgdGhpcy5lbnVtTGlzdCA9IGVudW1MaXN0OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBvbGljeUlkKCkKLSAgewotICAgIHJldHVybiBwb2xpY3lJZDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRFbnVtTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gZW51bUxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvVW5yZXNvbHZlZFJlbGF0aW9uc2hpcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUmVsYXRpb25zaGlwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MTlmNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUmVsYXRpb25zaGlwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgVW5yZXNvbHZlZFJlbGF0aW9uc2hpcCAKLXsKLSAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gc291cmNlRW51bWVyYXRpb25MaXN0OwotICBwcml2YXRlIExpc3Q8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4gdGFyZ2V0RW51bWVyYXRpb25MaXN0OwotICAKLSAgcHVibGljIFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAoIExpc3Q8U3RyaW5nPiBzb3VyY2VFbnVtZXJhdGlvbkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHRhcmdldEVudW1lcmF0aW9uTGlzdCApCi0gIHsKLSAgICB0aGlzLnNvdXJjZUVudW1lcmF0aW9uTGlzdCA9IHNvdXJjZUVudW1lcmF0aW9uTGlzdDsKLSAgICB0aGlzLnRhcmdldEVudW1lcmF0aW9uTGlzdCA9IHRhcmdldEVudW1lcmF0aW9uTGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTb3VyY2VFbnVtZXJhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHNvdXJjZUVudW1lcmF0aW9uTGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4gZ2V0VGFyZ2V0RW51bWVyYXRpb25MaXN0KCkKLSAgewotICAgIHJldHVybiB0YXJnZXRFbnVtZXJhdGlvbkxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhZTFhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwNTE1ICAgICAgICAgIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGlkZWEgb2YgYSBkZXNjcmlwdGlvbiBmb3IgYSBzZXJ2aWNlIHBvbGljeS4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2NyaXB0b3IKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc2hvcnQgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgc2hvcnQgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG9ydE5hbWUoU3RyaW5nIG5hbWUpOwotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvbmcgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbG9uZyBuYW1lIGZvciB0aGUgZGVzY3JpcHRvci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ05hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgbG9uZyBuYW1lIGZvciB0aGUgZGVzY3JpcHRvci4KLSAgICogQHBhcmFtIGxvbmdOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb25nTmFtZShTdHJpbmcgbG9uZ05hbWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgZGVzY3JpcHRvci4KLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pOwotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGljb24gcGF0aCByZWxhdGl2ZSB0byBhbiBpY29uIGJ1bmRsZS4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBpY29uIHBhdGggZm9yIHRoaXMgZGVzY3JpcHRvci4gIFRoaXMgcGF0aAotICAgKiBpcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIHNwZWNpZmllZCBieSB0aGUgaWNvbiBidW5kbGUgaWQuICBUaGlzCi0gICAqIG1ldGhvZCBtYXkgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJY29uUGF0aCgpOwotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGljb24gcGF0Y2ggZm9yIHRoaXMgZGVzY3JpcHRvci4KLSAgICogCi0gICAqIEBwYXJhbSBpY29uUGF0aAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWNvblBhdGgoU3RyaW5nIGljb25QYXRoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpY29uIGJ1bmRsZSBpZC4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBidW5kbGUgSUQgb2YgYSBwbHVnaW4gdGhhdCBjb250YWlucyBhbiBpY29uLiAgVGhpcwotICAgKiBtZXRob2QgbWF5IHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGljb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVzY3JpcHRvci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWNvbkJ1bmRsZUlkKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFNldHMgdGhlIGljb24gYnVuZGxlIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gaWNvbkJ1bmRsZUlkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJY29uQnVuZGxlSWQoU3RyaW5nIGljb25CdW5kbGVJZCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgY29udGV4dCBoZWxwIGlkLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGNvbnRleHQgaGVscCBpZCBmb3IgdGhpcyBkZXNjcmlwdG9yLiAgVGhpcyBtZXRob2QKLSAgICogbWF5IHJldHVybiBudWxsIGlmIG5vIGNvbnRleHQgaGFzIGJlZW4gc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb250ZXh0SGVscElkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGNvbnRleHQgaGVscCBpZCBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHRIZWxwSWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHRIZWxwSWQoU3RyaW5nIGNvbnRleHRIZWxwSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0OGZmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNSAgICAgICAgICBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBmaWx0ZXIgc2VydmljZSBwb2xpY2llcy4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUZpbHRlcgotewotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiBhIHBvbGljeSBzaG91bGQgYmUgYWNjZXB0ZWQgb3Igbm90LgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgc2VydmljZSBwb2xpY3kuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgcG9saWN5IGlzIGFjY2VwdGVkIGJ5IHRoZSBmaWx0ZXIuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4MzliOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNSAgICAgICAgICBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgcG9saWN5IGFuZCBhIGxpc3QKLSAqIG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLiAgVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB3aXRoIHRoZSBJUG9saWN5UmVsYXRpb25zaGlwCi0gKiBpbnRlcmZhY2UuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNlcnZpY2UgcG9saWN5IGZvciB0aGlzIGxpc3QuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFBvbGljeSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBlbnVtZXJhdGlvbiBsaXN0IGl0ZW1zLgotICAgKiBAcmV0dXJuIHJldHVybnMgYSBsaXN0IG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBnZXRFbnVtZXJhdGlvbkxpc3QoKTsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1NDBiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4KLSAqIHNlcnZpY2UgcG9saWNpZXMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lSZWxhdGlvbnNoaXAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBwb2xpY3kgZW51bWVyYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbnNoaXAuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNvdXJjZSBzZXJ2aWNlIHBvbGljeSBhbG9uZyB3aXRoIGEgbGlzdAotICAgKiBvZiBwb3NzaWJsZSBzdGF0ZXMgdGhhdCB0aGlzIHNvdXJjZSBwb2xpY3kgY291bGQgYmUgaW4uCi0gICAqLwotICBwdWJsaWMgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZWxhdGVkIHBvbGljaWVzIGZvciB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygb3RoZXIgdGFyZ2V0IHNlcnZpY2UgcG9saWNpZXMgYW5kIHRoZSBzdGF0ZXMgdGhhdAotICAgKiB0aGVzZSBwb2xpY2llcyBtdXN0IGJlIGluIHRvIHNhdGlzZnkgdGhlIHJlbGF0aW9uc2hpcC4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IGdldFJlbGF0ZWRQb2xpY2llcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YmFkMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IHNlcnZpY2UgcG9saWN5IGV4dGVuZGVycyB0byBzYXZlIHRoZSBzdGF0ZSBvZgotICogdGhlcmUgcG9saWNpZXMuICBOb3RlOiBleHRlbmRlcnMgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgaWYgdGhlc2UgY2hhbmdlcwotICogYXJlIGNvbW1pdHRlZCBvciBkaXNjYXJkZWQuICBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIGZyYW1ld29yay4gIEZvciBleGFtcGxlCi0gKiBpZiBhbiBleHRlbmRlciBtYWtlcyBhIG51bWJlciBvZiBjYWxscyB0byB0aGUgcHV0VmFsdWUgbWV0aG9kIGFuZCBhdCBzb21lCi0gKiBwb2ludCBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZGlzY2FyZCgpIGlzIGNhbGxlZCwgdGhlIGZyYW1ld29yayB3aWxsIGhhbmRsZQotICogdGhlIGRpc2NhcmRpbmcgb2YgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgcHV0VmFsdWUgbWV0aG9kIGNhbGxzLgotICogCi0gKiBOb3RlOiB0aGlzIGRhdGEgd2lsbCBldmVudHVhbGx5IGJlIHN0b3JlZCBpbiBFY2xpcHNlIHdpdGggdGhlIGZvbGxvd2luZyBrZXk6Ci0gKiAKLSAqICAgICBzZXJ2aWNlUG9saWN5SWQgKyAiLiIgKyBrZXkKLSAqICAgICAKLSAqICAgICB3aGVyZSBzZXJ2aWNlUG9saWN5SWQgaXMgdGhlIHVuaXF1ZSBpZCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeSBhbmQgdGhlIGtleQotICogICAgIGlzIHRoZSBrZXkgc3BlY2lmaWVkIGluIHRoZSBwdXRWYWx1ZSBtZXRob2QuCi0gKiAKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5U3RhdGUKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRGVmYXVsdFZhbHVlS2V5ID0gImRlZmF1bHQudmFsdWUua2V5IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHN0YXRlIG9mIHRoaXMgcG9saWN5IGlzIG11dGlibGUgb3Igbm90LgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoaXMgcG9saWN5IGlzIG11dGFibGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc011dGFibGUoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG11dGFibGUgc2V0cyB3aGV0aGVyIHRoaXMgcG9saWN5IGlzIG11dGFibGUgb3Igbm90LiAgTm90ZToKLSAgICogaWYgdGhlIHNlcnZpY2UgcG9saWN5IGZvciB0aGlzIElQb2xpY3lTdGF0ZSBvYmplY3QgaXMgcHJlZGVmaW5lZCBjYWxsaW5nCi0gICAqIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNdXRhYmxlKCBib29sZWFuIG11dGFibGUgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IGEga2V5IGZvciB0aGlzIHBvbGljeSBzdGF0ZS4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgcG9saWN5IHN0YXRlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHV0VmFsdWUoIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGdldHMgc29tZSBzdGF0ZSBmb3IgYSBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZXJlCi0gICAqIGlzIG5vIHBlcnNpc3RlZCB2YWx1ZSBmb3IgdGhpcyBrZXkgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBiZQotICAgKiByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgotICAgKiAKLSAgICogQHBhcmFtIGtleSBhIGtleSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGtleSBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCBTdHJpbmcga2V5ICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBwYXJ0aWN1bGFyIGtleS4gIAotICAgKiAKLSAgICogQHBhcmFtIGtleSB0aGUga2V5Ci0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAqIEBwYXJhbSBvdmVycmlkZUV4aXN0aW5nIGluZGljYXRlcyBpZiBhIGV4aXN0aW5nIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIG92ZXJyaWRkZW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBwdXREZWZhdWx0VmFsdWUoIFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUsIGJvb2xlYW4gb3ZlcnJpZGVFeGlzdGluZyApOwotICAKLSAgLyoqCi0gICAqIEFkZHMgYSBwb2xpY3kgc3RhdGUgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyCi0gICAqIEBwYXJhbSBub3RpZnlPbmx5T25Db21taXQgaW5kaWNhdGVzIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlCi0gICAqIGNhbGxlZCBmb3IgYWxsIHN0YXRlIGNoYW5nZXMgb3Igb25seSB3aGVuIHRoZSBzdGF0ZSBkYXRhIGlzCi0gICAqIGNvbW1pdHRlZC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBub3RpZnlPbmx5T25Db21taXQgKTsKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgcG9saWN5IHN0YXRlIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTE2ZDc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzI1ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIHN0YXRlIHdoZW4gYW4gZW51bWVyYXRpb24gaXMgdXNlZAotICogdG8gcGVyc2lzdCBzdGF0ZS4gIAotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5U3RhdGVFbnVtCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRSVUVfRU5VTSAgPSAib3JnLmVjbGlwc2Uud3N0LnRydWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGQUxTRV9FTlVNID0gIm9yZy5lY2xpcHNlLndzdC5mYWxzZSI7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIGVudW1lcmF0aW9uIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBlbnVtZXJhdGlvbiBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW51bUlkKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBlbnVtIGl0ZW0gZm9yIHRoaXMgZW51bWVyYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgZW51bSBpdGVtIGZvciB0aGlzIGVudW1lcmF0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0SWQoKTsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjdXJyZW50IGVudW0gaXRlbS4gIFRoaXMgZW51bSBpdGVtIGlkIG5lZWRzIHRvIGJlIGFuZCBlbnVtIGl0ZW0KLSAgICogaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZW51bWVyYXRpb24uCi0gICAqIEBwYXJhbSBpdGVtSWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRJdGVtKCBTdHJpbmcgaXRlbUlkICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZW51bSBpdGVtLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IGVudW0gaXRlbS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZ2V0Q3VycmVudEl0ZW0oKTsgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NGYzMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjsKLQotLyoqCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIHNlcnZpY2UgcG9saWN5Ci0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTZXJ2aWNlUG9saWN5Ci17IAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgaWYgdGhpcyBzZXJ2aWNlIHBvbGljeSBpcyBkZWZpbmVkIGJ5IGFuIGV4dGVuc2lvbiBvciBub3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlcnZpY2UgcG9saWN5IGlzIGRlZmluZWQgaW4gcGx1Z2luLnhtbCAKLSAgICogbWV0YSBkYXRhLiAgT3RoZXJ3aXNlLCBmYWxzZSBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUHJlZGVmaW5lZCgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgSUQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBJRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgSVNlcnZpY2VQb2xpY3kgb2JqZWN0cy4KLSAgICogICAKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiByZWxhdGlvbnNoaXBzIHRvIG90aGVyIElTZXJ2aWNlUG9saWN5IG9iamVjdHMuICAKLSAgICogIAotICAgKi8KLSAgcHVibGljIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gZ2V0UmVsYXRpb25zaGlwcygpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByZWxhdGlvbnNoaXBzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIHJlbGF0aW9uc2hpcHMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlbGF0aW9uc2hpcHMoIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyApOwotICAKLSAgLyoqCi0gICAqIFJlc3RvcmVzIHRoZSBwb2xpY3kgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiAgQWxsIGxvY2FsbHkgYWRkZWQKLSAgICogY2hpbGQgcG9saWNpZXMgd2lsbCBiZSByZW1vdmVkLiAgVGhlIHN0YXRlIG9mIGVhY2ggcG9saWN5IHdpbGwKLSAgICogYmUgc2V0IHRvIGlzIGRlZmF1bHQgdmFsdWUuICAgTm90ZTogdGhlIGNoYW5nZXMgbWFkZSBjYWxsaW5nCi0gICAqIHRoaXMgbWV0aG9kIGNhbiBiZSB1bmRvbmUgaWYgdGhlIHBsYXRmb3JtIHBlcmZvcm1zIGEgZGlzY2FyZENoYW5nZXMKLSAgICogb3BlcmF0aW9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHBsYWZvcm0gcGVyZm9ybXMgYSBjb21taXRDaGFuZ2VzCi0gICAqIG9wZXJhdGlvbiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoKTsKLSAgCi0gIC8qKgotICAgKiBSZXN0b3JlcyB0aGUgcG9saWN5IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuICAKLSAgICogVGhlIHN0YXRlIG9mIGVhY2ggcG9saWN5IHdpbGwgYmUgc2V0IHRvIGlzIGRlZmF1bHQgdmFsdWUuICAgCi0gICAqIE5vdGU6IHRoZSBjaGFuZ2VzIG1hZGUgY2FsbGluZwotICAgKiB0aGlzIG1ldGhvZCBjYW4gYmUgdW5kb25lIGlmIHRoZSBwbGF0Zm9ybSBwZXJmb3JtcyBhIGRpc2NhcmRDaGFuZ2VzCi0gICAqIG9wZXJhdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIHRoZSBwbGFmb3JtIHBlcmZvcm1zIGEgY29tbWl0Q2hhbmdlcwotICAgKiBvcGVyYXRpb24gdGhlc2UgY2hhbmdlcyB3aWxsIGJlIHNhdmVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCBJUHJvamVjdCBwcm9qZWN0ICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIElQb2xpY3lTdGF0ZSBnZXRQb2xpY3lTdGF0ZSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBJUG9saWN5U3RhdGUgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QgdGhlIHByb2plY3QuCi0gICAqIEByZXR1cm4gVGhlIElQb2xpY3lTdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgSVBvbGljeVN0YXRlIGdldFBvbGljeVN0YXRlKCBJUHJvamVjdCBwcm9qZWN0ICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBlbnVtZXJhdGlvbiBvYmplY3QuICBOb3RlOiB0aGlzIGlzIGp1c3QKLSAgICogYSB3cmFwcGVyIGFyb3VuZCB0aGUgcG9saWN5IHN0YXRlIG9iamVjdC4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc3RhdGUgZW51bWVyYXRpb24gb2JqZWN0IGZvciB0aGlzIHNlcnZpY2UKLSAgICogcG9saWN5LiAgSWYgdGhpcyBwb2xpY3kgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBlbnVtZXJhdGlvbgotICAgKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgSVBvbGljeVN0YXRlRW51bSBnZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGVudW1lcmF0aW9uIG9iamVjdCBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuICAKLSAgICogTm90ZTogdGhpcyBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIHBvbGljeSBzdGF0ZSBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdCB0aGUgcHJvamVjdAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0YXRlIGVudW1lcmF0aW9uIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gIElmCi0gICAqIG5vIHN0YXRlIGVudW1lcmF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VydmljZSBwb2xpY3kKLSAgICogbnVsbCB3aWxsIGJlIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIElQb2xpY3lTdGF0ZUVudW0gZ2V0UG9saWN5U3RhdGVFbnVtKCBJUHJvamVjdCBwcm9qZWN0ICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIHBhcmVudCBzZXJ2aWNlIHBvbGljeSBvYmplY3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHBhcmVudCBwb2xpY3kgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuICBJZiB0aGlzCi0gICAqIHNlcnZpY2UgcG9saWN5IGhhcyBubyBwYXJlbnQgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFBhcmVudFBvbGljeSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGNoaWxkIHNlcnZpY2UgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuICBDaGFuZ2VzCi0gICAqIG1hZGUgdG8gdGhlIHJldHVybmVkIGxpc3QgZG8gbm90IGNoYW5nZSB0aGUgdW5kZXJseWluZyBudW1iZXIgb2YgY2hpbGRyZW4KLSAgICogZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0Q2hpbGRyZW4oKTsKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgY2hpbGQgc2VydmljZSBwb2xpY3kgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LiAgSWYgdGhlIHBvbGljeSBzcGVjaWZpZWQKLSAgICogaXMgbnVsbCBvciBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gICAqIEFsc28sIGlmIHRoaXMgc2VydmljZSBwb2xpY3kgaXMgcHJlZGVmaW5lZCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZQotICAgKiBubyBlZmZlY3QuCi0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkKCBJU2VydmljZVBvbGljeSBwb2xpY3kgKTsKLSAgCi0gIC8qKgotICAgKiBBZGRzIGEgY2hpbGQgbGlzdGVuZXIgdG8gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIGNoaWxkIGxpc3RlbmVyIGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogQHBhcmFtIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciApOwotICAKLSAgLyoqCi0gICAqIEFkZHMgYSBzdGF0dXMgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuIFdoZW4gdGhlIHN0YXR1cyBjaGFuZ2VzCi0gICAqIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBub3RpZmllZC4KLSAgICogIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKTsKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgc3RhdHVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdGF0dXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKTsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzdGF0dXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMoIElTdGF0dXMgc3RhdHVzICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNlOWJjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBkZXNjcmliZSBhIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0gdGhhdCB3YXMKLSAqIGRlZmluZWQgYnkgYW4gZW51bWVyYXRpb24gaW4gcGx1Z2luLnhtbCBtZXRhIGRhdGEuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTdGF0ZUVudW1lcmF0aW9uSXRlbQoteyAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgSUQgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBJRCBvZiB0aGlzIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCk7Ci0gICAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgbG9uZyBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbG9uZyBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ05hbWUoKTsKLQotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGlzIHRoZSBkZWZhdWx0IGl0ZW0gb3Igbm90LgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhpcyBlbnVtZXJhdGlvbiBpdGVtIGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzCi0gICAqIGVudW1lcmF0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZWZhdWx0KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDIxMjc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUG9saWN5RW51bWVyYXRpb25MaXN0IGludGVyZmFjZS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsIGltcGxlbWVudHMgSVBvbGljeUVudW1lcmF0aW9uTGlzdAotewotICBwcml2YXRlIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtTGlzdDsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSAgICAgICAgICAgICAgcG9saWN5OwotICAKLSAgLyoqCi0gICAqIEEgc2ltcGxlIGNvbnN0cnVjdG9yIGZvciB0aGlzIGNsYXNzLgotICAgKiAKLSAgICogQHBhcmFtIGVudW1MaXN0Ci0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKCBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUxpc3QsIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gIHsKLSAgICB0aGlzLmVudW1MaXN0ID0gZW51bUxpc3Q7Ci0gICAgdGhpcy5wb2xpY3kgICA9IHBvbGljeTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcy4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygc3RhdGUgZW51bWVyYXRpb24gaXRlbXMuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGdldEVudW1lcmF0aW9uTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gZW51bUxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgYSBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFBvbGljeSgpCi0gIHsKLSAgICByZXR1cm4gcG9saWN5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzZjZjIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwNTE2ICAgMjMyNjAzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENsZWFuIHVwIGphdmEgZG9jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUG9saWN5UmVsYXRpb25zaGlwCi0gKiBpbnRlcmZhY2UuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUG9saWN5UmVsYXRpb25zaGlwSW1wbCBpbXBsZW1lbnRzIElQb2xpY3lSZWxhdGlvbnNoaXAKLXsKLSAgcHJpdmF0ZSBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHBvbGljeUVudW1lcmF0aW9uTGlzdDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IHJlbGF0ZWRQb2xpY2VzOwotICAKLSAgcHVibGljIFBvbGljeVJlbGF0aW9uc2hpcEltcGwoIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICAgcG9saWN5RW51bWVyYXRpb25MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiByZWxhdGVkUG9saWNpZXMgKQotICB7Ci0gICAgdGhpcy5wb2xpY3lFbnVtZXJhdGlvbkxpc3QgPSBwb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci0gICAgdGhpcy5yZWxhdGVkUG9saWNlcyAgICAgICAgPSByZWxhdGVkUG9saWNpZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyB0aGUgcG9saWN5IGVudW1lcmF0aW9uIGxpc3QgZm9yIHRoaXMgcmVsYXRpb25zaGlwLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzb3VyY2Ugc2VydmljZSBwb2xpY3kgYWxvbmcgd2l0aCBhIGxpc3QKLSAgICogb2YgcG9zc2libGUgc3RhdGVzIHRoYXQgdGhpcyBzb3VyY2UgcG9saWN5IGNvdWxkIGJlIGluLgotICAgKi8KLSAgcHVibGljIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkKLSAgewotICAgIHJldHVybiBwb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgdGhlIHJlbGF0ZWQgcG9saWNpZXMgZm9yIHRoaXMgcmVsYXRpb25zaGlwLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBvdGhlciB0YXJnZXQgc2VydmljZSBwb2xpY2llcyBhbmQgdGhlIHN0YXRlcyB0aGF0Ci0gICAqIHRoZXNlIHBvbGljaWVzIG11c3QgYmUgaW4gdG8gc2F0aXNmeSB0aGUgcmVsYXRpb25zaGlwLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gZ2V0UmVsYXRlZFBvbGljaWVzKCkKLSAgewotICAgIHJldHVybiByZWxhdGVkUG9saWNlczsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZGIzOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAxMDA0MDcgTlBFIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuamF2YTo3NSkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgMzA4NDI3Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeUFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvciBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0JCi0JLyoqCi0JICogTG9ncyBhbiBlcnJvciB3aXRoIHRoaXMgcGx1Z2luLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlCi0JICogQHBhcmFtIGV4YwotCSAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgICAKLSAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yIHNwYSA9IGdldERlZmF1bHQoKTsKLQkJaWYgKHNwYSAhPSBudWxsKSB7Ci0JCQlJTG9nIGlMb2cgPSBzcGEuZ2V0TG9nKCk7Ci0JCQlpZiAoaUxvZyAhPSBudWxsKQotCQkJCWlMb2cubG9nKHN0YXR1cyk7Ci0JCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc3ZDc4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMyNSAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICogMjAwODA2MjUgICAyMzg0ODIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQWRkaW5nIHRocmVhZCBzYWZldHkgdG8gdGhlIHNlcnZpY2UgcGxhdGZvcm0gYXBpLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjsKLQotLyoqCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBhY2Nlc3MgYW5kIGFkZCBzZXJ2aWNlIHBvbGljaWVzIHRvIHRoZSBwbGF0Zm9ybS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm0KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeVBsYXRmb3JtIGluc3RhbmNlUGxhdGZvcm0gPSBudWxsOwotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgICAgcGxhdGZvcm1JbXBsOwotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0oKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIGluc3RhbmNlUGxhdGZvcm0gPT0gbnVsbCApCi0gICAgewotICAgICAgaW5zdGFuY2VQbGF0Zm9ybSAgICAgICAgICAgICAgPSBuZXcgU2VydmljZVBvbGljeVBsYXRmb3JtKCk7ICAgICAKLSAgICAgIGluc3RhbmNlUGxhdGZvcm0ucGxhdGZvcm1JbXBsID0gbmV3IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwoIGluc3RhbmNlUGxhdGZvcm0gKTsKLSAgICAgIGluc3RhbmNlUGxhdGZvcm0ucGxhdGZvcm1JbXBsLmxvYWQoKTsKLSAgICAgIGluc3RhbmNlUGxhdGZvcm0ucGxhdGZvcm1JbXBsLmNhbGxMb2FkTGlzdGVuZXJzKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZVBsYXRmb3JtOwotICB9Ci0gIAotICAvKioKLSAgICogSW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0eSBwYWdlIGZvciBhIHByb2plY3Qgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIHBvcHVwCi0gICAqIG1lbnUgb3Igbm90LgotICAgKiAKLSAgICogQHBhcmFtIG9iamVjdAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHBsYXRmb3JtIGlzIGVuYWJsZWQgZm9yIHNwZWNpZmllZCBvYmplY3QuICBJbiBtb3N0Ci0gICAqIGNhc2VzIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHdpbGwgYmUgYW4gSVByb2plY3QuICBUaGlzIG1ldGhvZCBpcyB1c3VhbGx5IGNhbGxlZAotICAgKiB0byBkZXRlcm1pbmUgaWYgYSB0aGUgc2VydmljZSBwb2xpY3kgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5pc0VuYWJsZWQoIG9iamVjdCApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSAgICogdGhlIHNlcnZpY2UgcG9saWNpZXMuICBUaGUgbWV0aG9kIG9ubHkgYXBwbGllcyB0byBzdGF0ZSBjaGFuZ2VzIGF0IHRoZSB3b3Jrc3BhY2UKLSAgICogbGV2ZWwuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgY29tbWl0Q2hhbmdlcygpCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuY29tbWl0Q2hhbmdlcyggdHJ1ZSApOwotICB9Ci0gIAotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYWxsIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGFsbAotICAgKiB0aGUgc2VydmljZSBwb2xpY2llcy4gIFRoZSBtZXRob2Qgb25seSBhcHBsaWVzIHRvIHN0YXRlIGNoYW5nZXMgYXQgdGhlIHdvcmtzcGFjZQotICAgKiBsZXZlbC4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuZGlzY2FyZENoYW5nZXMoKTsgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSAgICogdGhlIHNlcnZpY2UgcG9saWNpZXMgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgVGhlIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gCi0gICAqIHN0YXRlIGNoYW5nZXMgYXQgdGhlIHByb2plY3QgbGV2ZWwuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgY29tbWl0Q2hhbmdlcyggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuY29tbWl0Q2hhbmdlcyggcHJvamVjdCApOwotICB9Ci0gIAotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYWxsIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGFsbAotICAgKiB0aGUgc2VydmljZSBwb2xpY2llcyBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuICBUaGUgbWV0aG9kIG9ubHkgYXBwbGllcyB0byAKLSAgICogc3RhdGUgY2hhbmdlcyBhdCB0aGUgcHJvamVjdCBsZXZlbC4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkaXNjYXJkQ2hhbmdlcyggSVByb2plY3QgcHJvamVjdCApCi0gIHsgCi0gICAgcGxhdGZvcm1JbXBsLmRpc2NhcmRDaGFuZ2VzKCBwcm9qZWN0ICk7IAotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgYWxsIHNlcnZpY2UgcG9saWN5IElEcyB0aGF0IGFyZSBkZWZpbmVkLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGFsbCBzZXJ2aWNlIHBvbGljeSBJRHMgdGhhdCBhcmUgZGVmaW5lZC4KLSAgICovCi0gIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGxQb2xpY3lJZHMoKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5nZXRBbGxQb2xpY3lJZHMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHJvb3QgcG9saWNpZXMgZm9yIHRoZSBwbGF0Zm9ybSBnaXZlbiBhIGZpbHRlci4KLSAgICogCi0gICAqIEBwYXJhbSBmaWx0ZXIgYSBmaWx0ZXIgYSB0aGUgc2VydmljZSBwb2xpY2llcy4gIFRoaXMgbWV0aG9kIG1heSBiZSBudWxsIGlmCi0gICAqIG5vIGZpbHRlciBpcyByZXF1aXJlZC4KLSAgICogQHJldHVybiByZXR1cm5zIGFsbCByb290IGxldmVsIHNlcnZpY2UgcG9saWNpZXMuICBJZiBhIGZpbHRlciBpcyBzcGVjaWZpZWQKLSAgICogc29tZSBzZXJ2aWNlIHBvbGljaWVzIG1heSBiZSByZW1vdmVkIGZyb20gdGhlIHJldHVybmVkIGxpc3QuICBBIHJvb3QKLSAgICogbGV2ZWwgc2VydmljZSBwb2xpY3kgaXMgZGVmaW5lZCB0byBiZSBhIHNlcnZpY2UgcG9saWN5IHdpdGggbm8gcGFyZW50LgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBMaXN0PElTZXJ2aWNlUG9saWN5PiBnZXRSb290U2VydmljZVBvbGljaWVzKCBJRmlsdGVyIGZpbHRlciApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIGZpbHRlciApOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBnaXZlbiBpdCdzIHVuaXF1ZSBJRC4KLSAgICogCi0gICAqIEBwYXJhbSBpZAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBnaXZlbiBpdCdzIHVuaXF1ZSBJRC4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRTZXJ2aWNlUG9saWN5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5nZXRTZXJ2aWNlUG9saWN5KCBpZCApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogUmV0dXJucyBpZiB0aGUgcGFydGljdWxhciBwcm9qZWN0IGhhcyBiZWVuIGVuYWJsZWQgb3Igbm90IG9uIGl0J3MKLSAgICogc2VydmljZSBwb2xpY3kgcHJvcGVydHkgcGFnZS4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgcHJvamVjdCBoYXMgYmVlbiBlbmFibGVkIGZvcgotICAgKiBwcm9qZWN0IHNwZWNpZmljIHBvbGljeSBwcmVmZXJlbmNlcy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCApOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB3aGV0aGVyIGEgcHJvamVjdCBzcGVjaWZpYyBzZXJ2aWNlIHBvbGljeSBwcmVmZXJlbmNlcyBpcyBlbmFibGVkIG9yIG5vdC4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEBwYXJhbSB2YWx1ZQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIElQcm9qZWN0IHByb2plY3QsIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIHByb2plY3QsIHZhbHVlICk7IAotICB9Ci0gIAotICAvKioKLSAgICogUmVzdG9yZXMgdGhlIHdvcmtzcGFjZSBsZXZlbCBkZWZhdWx0cy4gIE5vdGU6IHRoZSBzdGF0ZSBjaGFuZ2VzIG1hZGUgYnkgCi0gICAqIGNhbGxpbmcgdGhpcyBtZXRob2QgbmVlZCB0byBiZSBjb21taXR0ZWQgb3IgZGlzY2FyZGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXN0b3JlRGVmYXVsdHMoKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlc3RvcmVEZWZhdWx0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIFJlc3RvcmVzIHRoZSBwcm9qZWN0IGxldmVsIGRlZmF1bHRzLiAgTm90ZTogdGhlIHN0YXRlIGNoYW5nZXMgbWFkZSBieSAKLSAgICogY2FsbGluZyB0aGlzIG1ldGhvZCBuZWVkIHRvIGJlIGNvbW1pdHRlZCBvciBkaXNjYXJkZWQgYnkgdGhlIHBsYXRmb3JtLgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXN0b3JlRGVmYXVsdHMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlc3RvcmVEZWZhdWx0cyggcHJvamVjdCApOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBJU2VydmljZVBvbGljeSBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgcG9saWN5IGZvciB0aGlzIHBvbGljeS4gIElmIHRoaXMgcG9saWN5IGhhcyBubyAKLSAgICogcGFyZW50IG51bGwgbWF5IGJlIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGlkIFRoaXMgaXMgYSB1bmlxdWUgaWQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuICBJZiB0aGUgaWQgc3BlY2lmaWVkCi0gICAqIGlzIG5vdCB1bmlxdWUgdHJhaWxpbmcgbnVtZXJpY2FsIGRpZ2l0cyBpbiB0aGUgaWQgd2lsbCBiZSBzdHJpcHBlZCBvZmYuICAKLSAgICogTnVtZXJpY2FsIGRpZ2l0cyB3aWxsIHRoZW4gYmUgYWRkZWQgdG8gZW5kIG9mIHRoZSBpZCB0byBtYWtlIGl0IHVuaXF1ZS4KLSAgICogSWYgdGhlIGlkIGlzIGVtcHR5IG9yIG51bGwgdGhlIGZyYW1ld29yayB3aWxsIGFzc2lnbiBhIHVuaXF1ZSBpZC4KLSAgICogQHBhcmFtIGVudW1MaXN0SWQgSWYgdGhpcyBwb2xpY3kncyBzdGF0ZSBpcyBkZWZpbmVkIGJ5IGFuIGVudW1lcmF0aW9uCi0gICAqIHRoZSBlbnVtZXJhdGlvbiBpZCBzaG91bGQgYmUgc3BlY2lmaWVkIGhlcmUuICBPdGhlcndpc2UgbnVsbCBzaG91bGQgYmUKLSAgICogc3BlY2lmaWVkLgotICAgKiBAcGFyYW0gZGVmYXVsdEVudW1JZCBJZiB0aGlzIHBvbGljeSdzIHN0YXRlIGlzIGRlZmluZWQgYnkgYW4gZW51bWVyYXRpb24KLSAgICogdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHZhbHVlLiAgVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCAKLSAgICogaWYgbm90IHVzaW5nIGFuIGVudW1lcmF0aW9uIG9yIGlmIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBlbnVtZXJhdGlvbgotICAgKiBzaG91bGQgYmUgdXNlZC4KLSAgICogQHJldHVybiByZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCBJU2VydmljZVBvbGljeSBjcmVhdGVTZXJ2aWNlUG9saWN5KCBJU2VydmljZVBvbGljeSBwYXJlbnQsIFN0cmluZyBpZCwgU3RyaW5nIGVudW1MaXN0SWQsIFN0cmluZyBkZWZhdWx0RW51bUlkICkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybUltcGwuY3JlYXRlU2VydmljZVBvbGljeSggcGFyZW50LCBpZCwgZW51bUxpc3RJZCwgZGVmYXVsdEVudW1JZCApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIHNlcnZpY2UgcG9saWN5IGZyb20gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgc2VydmljZSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmVTZXJ2aWNlUG9saWN5KCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlbW92ZVBsYXRmb3JtUG9saWN5KCBwb2xpY3kgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBjYWxscyB0byBsaXN0ZW5lciB0byBhbnkgY2hpbGQgY2hhbmdlIHRoYXQgaXMKLSAgICogbWFkZSBpbiB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gcmVnYXJkbGVzcyBvZiB3aGVyZSBpdCBpcyAKLSAgICogbG9jYXRlZCBpbiB0aGUgdHJlZSBvZiBzZXJ2aWNlIHBvbGljaWVzLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyCi0gICAqIEBwYXJhbSBvbkNvbW1pdCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGxpc3RlbmVyIHNob3VsZCBiZSBpbnZva2VkIHdoZW4KLSAgICogdGhlIHRoZSBwbGF0Zm9ybSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsIGJvb2xlYW4gb25Db21taXQgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLmFkZENoaWxkQ2hhbmdlTGlzdGVuZXIoIGxpc3RlbmVyLCBvbkNvbW1pdCApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBjaGlsZCBjaGFuZ2UgbGlzdGVuZXJzIHNob3VsZCBiZSBxdWV1ZWQgb3Igbm90LiAgSWYKLSAgICogdGhleSBhcmUgcXVldWVkIHRoZW4gY2hpbGQgY2hhbmdlIGV2ZW50cyB3aWxsIGJlIHF1ZXVlIHVwIHVudGlsIHRoaXMKLSAgICogbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGEgZmFsc2UgcGFyYW1ldGVyLiAgV2hlbiB0aGlzIGhhcHBlbnMgdGhlIGNoaWxkCi0gICAqIGNoYW5nZSBldmVudCBsaXN0ZW5lcnMgYXJlIG5vdGljZWQgb2YgYWRkIHRoZSBldmVudHMgdGhhdCBoYXZlIG9jY3VycmVkLgotICAgKiAKLSAgICogQHBhcmFtIHF1ZXVlCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyggYm9vbGVhbiBxdWV1ZSApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwucXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyggcXVldWUgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBjaGlsZCBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICogQHBhcmFtIG9uQ29tbWl0IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGxpc3RlbmVyIHNob3VsZCBiZSByZW1vdmVkCi0gICAqIGZyb20gdGhlIG9uQ29tbWl0IGxpc3QuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVtb3ZlQ2hpbGRDaGFuZ2VMaXN0ZW5lciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsIGJvb2xlYW4gb25Db21taXQgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIoIGxpc3RlbmVyLCBvbkNvbW1pdCApOyAgIAotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci4gIFdoZW4gYSBwYXJ0aWN1bGFyIHByb2plY3QgaXMgcmVmZXJlbmNlZAotICAgKiBieSBpbiB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gdGhpcyBsaXN0ZW5lciB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QKLSAgICogdGltZSB0aGUgcHJvamVjdCBpcyBsb2FkZWQgaW50byB0aGUgc3lzdGVtLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZFByb2plY3RMb2FkTGlzdGVuZXIoIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLmFkZFByb2plY3RMb2FkTGlzdGVuZXIoIGxpc3RlbmVyICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyKCBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5yZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyKCBsaXN0ZW5lciApOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gZW51bUlkCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygc3RhdGUgZW51bWVyYXRpb24gaXRlbXMgZ2l2ZW4gdGhlIHVuaXF1ZQotICAgKiBlbnVtZXJhdGlvbiBJRCBmb3IgdGhpcyBlbnVtZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZ2V0U3RhdGVFbnVtZXJhdGlvbiggU3RyaW5nIGVudW1JZCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldFN0YXRlRW51bWVyYXRpb24oIGVudW1JZCApOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gc3RhdGVJdGVtSWQKLSAgICogQHJldHVybiByZXR1cm5zIGEgc3RhdGUgZW51bWVyYXRpb24gaXRlbSBnaXZlbiB0aGlzIElEIGZvciB0aGlzIGVudW1lcmF0aW9uCi0gICAqIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgSVN0YXRlRW51bWVyYXRpb25JdGVtIGdldFN0YXRlSXRlbUVudW1lcmF0aW9uKCBTdHJpbmcgc3RhdGVJdGVtSWQgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5nZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbiggc3RhdGVJdGVtSWQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTM2MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyCi17Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9mIGNoaWxkIGNoYW5nZXMuICBFYWNoIGNoaWxkIGl0ZW0KLSAgICogaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRlZCBpdGVtIGF0IHRoZSBzYW1lIGluZGV4IHZhbHVlLgotICAgKiAKLSAgICogQHBhcmFtIGNoaWxkIHNlcnZpY2UgcG9saWNpZXMgdGhhdCBoYXZlIGNoYW5nZWQuCi0gICAqIEBwYXJhbSBhZGRlZCBpbmRpY2F0ZXMgaWYgdGhlIGFzc29jaWF0ZSBwb2xpY3kgd2FzIGFkZGVkIG9yIHJlbW92ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjaGlsZENoYW5nZSggTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGQsIExpc3Q8Qm9vbGVhbj4gYWRkZWQgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTI5YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA1MTYgICAyMzI2MDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ2xlYW4gdXAgamF2YSBkb2MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzOwotCi0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlZ2lzdGVyIGNvZGUgdGhhdCBuZWVkcyB0byBleGVjdXRlIHdoZW4gdGhlCi0gKiBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBpcyBsb2FkZWQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcgotewotICAvKioKLSAgICogQ2FsbGVkIG9uY2Ugd2hlbiB0aGUgc2VydmljZSBwbGF0Zm9ybSBpcyBsb2FkZWQgaW4gdGhlIHN5c3RlbS4gIFRoaXMKLSAgICogbWF5IG5vdCBuZWNlc3NhcmlseSBoYXBwZW4gd2hlbiBFY2xpcHNlIGluaXRpYWxseSBzdGFydHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2FkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYjVhOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzI0ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVJIG5vdyBsaXN0ZW5zIGZvciBzdGF0ZSBjaGFuZ2VzLgotICogMjAwODA1MTYgICAyMzI2MDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ2xlYW4gdXAgamF2YSBkb2MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlZ2lzdGVyIGNvZGUgdGhhdCBuZWVkcyB0byBsb2FkZWQgd2hlbiBhIHBhcnRpY3VsYXIKLSAqIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyCi17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIGEgcHJvamVjdCBsb2FkZWQgaW50byB0aGUgc2VydmljZSBwb2xpY3kKLSAgICogcGxhdGZvcm0uCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdCB0aGUgcHJvamVjdAotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZCggSVByb2plY3QgcHJvamVjdCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YWRkMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHdoZW4gdGhlIGRldmVsb3BlciB3YW50cyB0byBsaXN0ZW5lciB0byBzdGF0ZQotICogY2hhbmdlcyBmb3IgYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5LgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcgotewotICAvKioKLSAgICogQ2FsbGVkIHdoZW4gYSBzdGF0ZSBjaGFuZ2UgZXZlbnQgb2NjdXJzIGZvciBhIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgc2VydmljZSBwb2xpY3kKLSAgICogQHBhcmFtIGtleSB0aGUga2V5IG9mIHRoZSBzdGF0ZSB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBvbGRWYWx1ZSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBzdGF0ZSB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzdGF0ZSB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwb2xpY3lTdGF0ZUNoYW5nZSggSVNlcnZpY2VQb2xpY3kgcG9saWN5LCBTdHJpbmcga2V5LCBTdHJpbmcgb2xkVmFsdWUsIFN0cmluZyBuZXdWYWx1ZSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1YjMxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IGNvZGUgdGhhdCBpcyBpbnRlcmVzdGVkIGluIGxpc3RlbmluZyB0byBzdGF0dXMKLSAqIGNoYW5nZSBldmVudHMgb2Ygc2VydmljZSBwb2xpY2llcy4gCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTdGF0dXNDaGFuZ2VMaXN0ZW5lcgotewotICAvKioKLSAgICogQ2FsbGVkIHdoZW4gYSBzdGF0dXMgY2hhbmdlIGV2ZW50IG9jY3Vycy4KLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY3kgdGhlIHNlcnZpY2UgcG9saWN5LgotICAgKiBAcGFyYW0gb2xkU3RhdHVzIHRoZSBvbGQgc3RhdHVzLgotICAgKiBAcGFyYW0gbmV3U3RhdHVzIHRoZSBuZXcgc3RhdHVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhdHVzQ2hhbmdlKCBJU2VydmljZVBvbGljeSBwb2xpY3ksIElTdGF0dXMgb2xkU3RhdHVzLCBJU3RhdHVzIG5ld1N0YXR1cyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZlYzgzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODA0MjggICAyMjc1MDEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgRml4ZWQgdG9Mb3dlckNhc2UgTG9jYWxlIHByb2JsZW0uCi0gKiAyMDA4MDUxNiAgIDIzMjYwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDbGVhbiB1cCBqYXZhIGRvYwotICogMjAwODA5MDUgICAyNDY0MjggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQWRkZWQgaWNvbkJ1bmRsZUlkIHBhcnNpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzOwotCi1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5LkRlc2NyaXB0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBpcyBvbmx5IGludGVuZGVkIGZvciBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkgcGx1Z2luIHRvIHVzZS4KLSAqIEl0IGNvbnRhaW5zIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgcGFyc2luZyB0aGUgc2VydmljZSBwb2xpY3kgZXh0ZW5zaW9uIHBvaW50LgotICoKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5VXRpbHMKLXsKLSAgLyoqCi0gICAqIExvYWRzIHRoZSBhdHRyaWJ1dGVzIGZvciBhIGRlc2NyaXB0b3IgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgdGhlIGRlc2NyaXB0b3IgZWxlbWVudAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRhdGEgZm9yIHRoaXMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRGVzY3JpcHRvckltcGwgbG9hZERlc2NyaXB0b3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIERlc2NyaXB0b3JJbXBsIGRlc2NyaXB0b3IgPSBuZXcgRGVzY3JpcHRvckltcGwoKTsKLSAgICAKLSAgICBTdHJpbmcgc2hvcnROYW1lICAgPSBnZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJzaG9ydG5hbWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgbG9uZ05hbWUgICAgPSBnZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJsb25nbmFtZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdldEF0dHJpYnV0ZSggZWxlbWVudCwgImRlc2NyaXB0aW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIGljb25QYXRoICAgID0gZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiaWNvbnBhdGgiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgY29udGV4dEhlbHAgPSBnZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJjb250ZXh0aGVscGlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYoIHNob3J0TmFtZSA9PSBudWxsICYmIGxvbmdOYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJTaG9ydCBuYW1lIG9yIExvbmcgbmFtZSBtaXNzaW5nIGZyb20gc2VydmljZSBwb2xpY3kgZGVzY3JpcHRvci4iLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiggc2hvcnROYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIHNob3J0TmFtZSA9IGxvbmdOYW1lOwotICAgIH0KLSAgICBlbHNlIGlmKCBsb25nTmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBsb25nTmFtZSA9IHNob3J0TmFtZTsKLSAgICB9Ci0gICAgCi0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdGlvbiggZGVzY3JpcHRpb24gKTsKLSAgICBkZXNjcmlwdG9yLnNldFNob3J0TmFtZSggc2hvcnROYW1lICk7Ci0gICAgZGVzY3JpcHRvci5zZXRMb25nTmFtZSggbG9uZ05hbWUgKTsKLSAgICBkZXNjcmlwdG9yLnNldENvbnRleHRIZWxwSWQoIGNvbnRleHRIZWxwICk7Ci0gICAgCi0gICAgaWYoIGljb25QYXRoICE9IG51bGwgKQotICAgIHsgIAkKLSAgICAgIFN0cmluZyBpY29uQnVuZGxlSWQgPSBlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpOwotICAgICAgU3RyaW5nIHBsdWdpblByZWZpeCA9ICJwbHVnaW46Ly8iOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIGlmKCBpY29uUGF0aC5zdGFydHNXaXRoKCBwbHVnaW5QcmVmaXggKSAmJiBpY29uUGF0aC5sZW5ndGgoKSA+IHBsdWdpblByZWZpeC5sZW5ndGgoKSApIAotICAgICAgewotICAgIAkgaW50IHBsdWdpblNsYXNoID0gaWNvblBhdGguaW5kZXhPZiggJy8nLCBwbHVnaW5QcmVmaXgubGVuZ3RoKCkgKTsKLSAgICAJIAotICAgIAkgaWNvbkJ1bmRsZUlkID0gaWNvblBhdGguc3Vic3RyaW5nKCBwbHVnaW5QcmVmaXgubGVuZ3RoKCksIHBsdWdpblNsYXNoICk7Ci0gICAgCSBpY29uUGF0aCAgICAgPSBpY29uUGF0aC5zdWJzdHJpbmcoIHBsdWdpblNsYXNoICsgMSApOyAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGRlc2NyaXB0b3Iuc2V0SWNvblBhdGgoIGljb25QYXRoICk7ICAgICAgCi0gICAgICBkZXNjcmlwdG9yLnNldEljb25CdW5kbGVJZCggaWNvbkJ1bmRsZUlkICk7Ci0gICAgfQotICAgIAotICAgIGRlc2NyaXB0b3IucmVzZXRIYXNDaGFuZ2VkKCk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBpbiBhIGxvd2VyIGNhc2UgYXR0cmlidXRlIG5hbWUuICBJdCB3aWxsIHRoZW4gcmV0dXJuCi0gICAqIHRoZSBzYW1lIGF0dHJpYnV0ZSBuYW1lIHRoYXQgaW5jbHVkZXMgcG90ZW50aWFsbHkgdXBwZXJjYXNlIGNoYXJhY3RlcnMuCi0gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBjbGllbnRzIHRvIHNwZWNpZnkgYXR0cmlidXRlIG5hbWVzIGluIGEgY2FzZSBpbnNlbnNpdGl2ZQotICAgKiBmYXNoaW9uLgotICAgKiAgCi0gICAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50Ci0gICAqIEBwYXJhbSBhdHRyaWJ1dGUgdGhlIGF0dHJpYnV0ZQotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGxvd2VyY2FzZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWUoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlICkKLSAgewotICAgIFN0cmluZ1tdIG5hbWVzICA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKLSAgICBTdHJpbmcgICByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGZvciggU3RyaW5nIG5hbWUgOiBuYW1lcyApCi0gICAgewotICAgICAgaWYoIG5hbWUudG9Mb3dlckNhc2UoIExvY2FsZS5FTkdMSVNIICkuZXF1YWxzKCBhdHRyaWJ1dGUgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG5hbWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldHMgYSBhdHRyaWJ1dGUgdmFsdWUgd2hlcmUgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2UgaW5zZW5zaXRpdmUuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudC4KLSAgICogQHBhcmFtIGF0dHJpYnV0ZSB0aGUgYXR0cmlidXRlIHRvIGdldC4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgZm9yIHRoaXMgYXR0cmlidXRlIG9yIG51bGwgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZSApCi0gIHsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKLSAgICBTdHJpbmcgICB2YWx1ZSA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgbmFtZSA6IG5hbWVzICkKLSAgICB7Ci0gICAgICBpZiggbmFtZS50b0xvd2VyQ2FzZSggTG9jYWxlLkVOR0xJU0ggKS5lcXVhbHMoIGF0dHJpYnV0ZSApICkKLSAgICAgIHsKLSAgICAgICAgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggbmFtZSApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ4NjdiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi13c3VpLmphcgotYnVpbGQueG1sCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTQ4N2QyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2NTRiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozODoxNSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OTY5MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM5OjQ2IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhMjg2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMjAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTdlY2Q1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTIyMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA4MjAgICAxOTE1ODUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA3MTEwMiAgIDIwODQ5MSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVSQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVdpemFyZCBWYWxpZGF0aW9uCi0KLSMKLSMgUG9wdXAgYWN0aW9uIENhdGVnb3J5Ci0jCi1MQUJFTF9QT1BVUF9DQVRFR09SWV9XRUJfU0VSVklDRVM9V2ViIFNlcnZpY2VzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxNzhkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLSAgICAJPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5XZWJTZXJ2aWNlc1ByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIj4KLSAgICAgIDwvcGFnZT4KLSAgICAgIAotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1dTSSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldpemFyZFZhbGlkYXRpb24iPgotICAgICAgPC9wYWdlPgotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8IS0tIFRoZSBpZCBmb3IgdGhpcyBjYXRlZ29yeSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGpzdCB0byB3c3QgaW4gdmVyc2lvbiAzLjAuLS0+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudSI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IiVMQUJFTF9QT1BVUF9DQVRFR09SWV9XRUJfU0VSVklDRVMiCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51Ij4KLSAgICAgICAgICAgIDxzZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgIG5hbWU9InBvcHVwQWN0aW9ucyI+Ci0gICAgICAgICAgICA8L3NlcGFyYXRvcj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+ICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNDgxYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA4MTYgICAxNTE2MzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFJlbW92ZWQgdW51c2VkIHByb3BlcnRpZXMgZm9yICJXYWl0IGZvciB3aXphcmQgV1NETCB2YWxpZGF0aW9uIgotIyAyMDA3MDQyNCAgIDE4MjM3NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDcxMTIwICAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0jIDIwMDgwMjA5ICAgMjUzNjgzIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFBJSS0gIENvbmZ1c2luZyBkZXNjcmlwdGlvbiBpbiBwcmVmZXJlbmNlcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgVUkKLVBMVUdJTl9WRU5ET1I9RWNsaXBzZS5vcmcKLVBMVUdJTl9ERVNDPVwKLVRoZSBXZWIgc2VydmljZXMgR1VJIHBsdWdpbiBkZWxpdmVycyB0aGUgZ3JhcGhpY2FsIFwKLXVzZXIgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZXMgZnVuY3Rpb24gaW4gdGhlIFdTVCBzdWJwcm9qZWN0LgotCi1QTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M9V2ViIFNlcnZpY2VzCi0KLQotIwotIyAgV1MtSSBQcmVmZXJlbmNlIHBhZ2VzCi0jCi0jIFdTLUkgQ29tcGxpYW5jZSBQYWdlCi0jCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1dTST1XUy1JIENvbXBsaWFuY2UKLVNUT1BfTk9OX1dTST1SZXF1aXJlIGNvbXBsaWFuY2UKLVdBUk5fTk9OX1dTST1TdWdnZXN0IGNvbXBsaWFuY2UKLUlHTk9SRV9OT05fV1NJPUlnbm9yZSBjb21wbGlhbmNlCi1GT0xMT1dfV1NJX1BSRUZFUkVOQ0U9Rm9sbG93IFByZWZlcmVuY2UKLQotVE9PTFRJUF9QV1NJX1BBR0U9V2ViIFNlcnZpY2VzIEludGVyb3BlcmFiaWxpdHkKLVRPT0xUSVBfUFdTSV9SQURJT19TVE9QX05PTl9XU0k9U3RvcCBhbmQgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGlmIHlvdSBtYWtlIGEgY2hvaWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggV1MtSS4KLVRPT0xUSVBfUFdTSV9SQURJT19XQVJOSU5HX05PTl9XU0k9UHJvZHVjZSBhIHdhcm5pbmcgbWVzc2FnZSBpZiB5b3UgbWFrZSBhIGNob2ljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIFdTLUkuCi1UT09MVElQX1BXU0lfUkFESU9fSUdOT1JFX05PTl9XU0k9U2lsZW50bHkgYWxsb3cgY2hvaWNlcyB0aGF0IGRvIG5vdCBjb21wbHkgd2l0aCBXUy1JLgotVE9PTFRJUF9QV1NJX1JBRElPX0ZPTExPV19XU0lfUFJFRkVSRU5DRT1Qcm9qZWN0IHdvdWxkIHVzZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwgc2V0IGluIFdvcmtzcGFjZSBQcmVmZXJlbmNlLgotCi1MQUJFTF9XU0lfU1NCUD1XUy1JIFMmU0JQIGNvbXBsaWFuY2UgbGV2ZWwKLVRPT0xUSVBfUFdTSV9TU0JQX0xBQkVMPVdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIGNvbXBsaWFuY2UgbGV2ZWwKLVRPT0xUSVBfUFdTSV9TU0JQX0NPTUJPPUNob29zZSB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotCi1MQUJFTF9XU0lfQVA9V1MtSSBBJlAgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX0FQX0xBQkVMPVdTLUkgQXR0YWNobWVudCBQcm9maWxlIGNvbXBsaWFuY2UgbGV2ZWwKLVRPT0xUSVBfUFdTSV9BUF9DT01CTz1DaG9vc2UgdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlIGNvbXBsaWFuY2UgbGV2ZWwKLQotIwotIwlXU0RMIFZhbGlkYXRpb24KLSMKLUxBQkVMX1dTRExWQUw9U2VsZWN0IHdoZXRoZXIgV1NETCB2YWxpZGF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgYnkgd2l6YXJkcyB0aGF0IGNvbnN1bWUgV1NETCBmaWxlcwotTEFCRUxfV1NETFZBTF9OT05FPSZObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uCi1MQUJFTF9XU0RMVkFMX1JFTU9URT1XaXphcmQgV1NETCB2YWxpZGF0aW9uIGZvciAmcmVtb3RlIGZpbGVzIG9ubHkKLUxBQkVMX1dTRExWQUxfQUxMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yICZhbGwgV1NETCBmaWxlcwotVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORT1EbyBub3QgcGVyZm9ybSBXU0RMIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZSBvciBVUkwgaW5wdXQgdG8gdGhlIFdlYiBTZXJ2aWNlcyB3aXphcmQKLVRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX1JFTU9URT1Pbmx5IHBlcmZvcm0gV1NETCB2YWxpZGF0aW9uIG9uIHJlbW90ZSBXU0RMIGZpbGUgb3IgVVJMIGlucHV0IHRvIHRoZSBXZWIgU2VydmljZXMgd2l6YXJkCi1UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9BTEw9UGVyZm9ybSBXU0RMIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZSBvciBVUkwgaW5wdXQgdG8gdGhlIFdlYiBTZXJ2aWNlcyB3aXphcmQKLVRPT0xUSVBfUFdTSV9XU0RMVkFMX0xBQkVMPVNlbGVjdCB3aGV0aGVyIFdTREwgdmFsaWRhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIGJ5IHdpemFyZHMgdGhhdCBjb25zdW1lIFdTREwgZmlsZXMsIFxuZm9yIGV4YW1wbGUsIFdlYiBTZXJ2aWNlIHdpemFyZCBpbiBza2VsZXRvbiBzY2VuYXJpbyBhbmQgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZC4KLQotCi1XRUJTRVJWSUNFX0NBVEVHT1JZX1BSRUY9RXhwYW5kIHRoaXMgcHJlZmVyZW5jZXMgY2F0ZWdvcnkgdG8gc2V0IHNwZWNpZmljIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcy4KLVdFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRl9MSU5LPVNlZSA8YSBocmVmPVwib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2VcIj4nU2VydmljZSBQb2xpY2llcyc8L2E+IGZvciBXUy1JIGNvbXBsaWFuY2UgcHJlZmVyZW5jZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0M2VjOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE1MTYzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA0MjQgICAxODIzNzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXc3RXU1VJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5Xc3RXU1VJUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdzdFdTVUlQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX1ZFTkRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGX0xJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9XU0k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RPUF9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5fTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xMT1dfV1NJX1BSRUZFUkVOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1NUT1BfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fV0FSTklOR19OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19JR05PUkVfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fRk9MTE9XX1dTSV9QUkVGRVJFTkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSV9TU0JQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9TU0JQX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9TU0JQX0NPTUJPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSV9BUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfQVBfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX0FQX0NPTUJPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETFZBTF9OT05FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUxfUkVNT1RFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUxfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX05PTkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfV1NETFZBTF9MQUJFTDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL2NvbW1hbmQvT3BlbkVkaXRvckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGU2YTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxMCAgIDEzNTM5NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRW5hYmxlIFdUUCBXZWIgc2VydmljZSBmcmFtZXdvcmsgb3BlbmluZyBKYXZhIGVkaXRvcgotICogMjAwNjEwMjUgICAxNjIyODggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdvcmtzcGFjZSBwYXRocyB3aXRoIHNwYWNlcyBicmVhayBKYXZhIEVkaXRvciBMYXVuY2gKLSAqIDIwMDgwNDExICAgMjI2NzY3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIgZG9lcyBub3QgaGFuZGxlIHBhdGhzIHcvIHNwYWNlcyB0aGF0IGFyZSBlbmNvZGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV1NVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0vKioKLSAqIEEgY29tbWFuZCB3aGljaCwgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBpbXBsZW1lbnRhdGlvbiBVUkxzLCB3aWxsCi0gKiBvcGVuIHRoZW0gd2l0aGluIEVjbGlwc2UgdXNpbmcgdGhlIGVkaXRvciByZWdpc3RlcmVkIHdpdGggdGhlCi0gKiBmaWxlIGV4dGVuc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBPcGVuRWRpdG9yQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd2ViU2VydmljZTsKLQlwcml2YXRlIElDb250ZXh0CWNvbnRleHQ7Ci0gCi0JLyoqCi0JICogU2V0dGVyIGZvciB0aGUgSVdlYlNlcnZpY2UKLQkgKiAKLQkgKiBAcGFyYW0gd2ViU2VydmljZSBUaGUgSVdlYlNlcnZpY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlID0gd2ViU2VydmljZTsgIAotCX0KLQkgIAotCS8qKgotCSAqIFNldHRlciBmb3IgdGhlIElDb250ZXh0Ci0JICogCi0JICogQHBhcmFtIGNvbnRleHQgVGhlIElDb250ZXh0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkgewotCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb24jZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUpCi0JICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykKLQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQotCQlpZiAoY29udGV4dC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCVN0cmluZ1tdIGltcGxVUkxzID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldEltcGxVUkxzKCk7Ci0JCQkKLQkJLy8gbm90aGluZyB0byBvcGVuCi0JCWlmIChpbXBsVVJMcyA9PSBudWxsKQotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQlJRmlsZSBmaWxlOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBsVVJMcy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsgICAgCQkJCQkJCi0JCQkJU3RyaW5nIGltcGxVUkwgPSBpbXBsVVJMc1tpXTsKLQkJCQlmaWxlID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvRmlsZShpbXBsVVJMKTsKLQkJCQkJCQotCQkJCWlmIChmaWxlID09IG51bGwgfHwgIWZpbGUuZXhpc3RzKCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCQotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQkKLQkJCQlpZiAocGFnZSA9PSBudWxsKQotCQkJCQljb250aW51ZTsKLQkJCQkJCQkJCi0JCQkJSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgdHJ1ZSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvL1RPRE86IGZvciBXVFAgMi4wLCByZXR1cm4gcHJvcGVyIHN0YXR1cyAod2l0aCBOTFMpCi0JCQkJV1NVSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldExvZygpLmxvZygKLQkJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgV1NVSVBsdWdpbi5JRCwgMCwgZS5nZXRNZXNzYWdlKCksIGUpKTsKLQkJCX0JCQkKLQkJfQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dTVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dTVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUwOTkwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XU1VJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW47Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBwbHVnaW4uCi0qIDxwPgotKiBUaGlzIHBsdWdpbiBjb250YWlucyB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSB0byB0aGUKLSogV2ViIFNlcnZpY2VzIHJ1bnRpbWUgZm91bmQgaW4gb3JnLmVjbGlwc2UuanN0LndzLgotKi8KLXB1YmxpYyBjbGFzcyBXU1VJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotCi0gLyoqCi0gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICovCi0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzLnVpIjsKLQotIC8qKgotICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICovCi0gcHJpdmF0ZSBzdGF0aWMgV1NVSVBsdWdpbiBpbnN0YW5jZV87Ci0gCi0gLyoqCi0gICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICovCi0gcHVibGljIFdTVUlQbHVnaW4oKSB7Ci0Jc3VwZXIoKTsKLQlpbnN0YW5jZV8gPSB0aGlzOwotIH0KLQotIC8qKgotICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAqIChXU1VJUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LndzLnVpIik7Ci0gKiBAcmV0dXJuIFRoZSBXU1VJUGx1Z2luIHNpbmdsZXRvbi4KLSAqLwotIHN0YXRpYyBwdWJsaWMgV1NVSVBsdWdpbiBnZXRJbnN0YW5jZSgpIHsKLSAgIHJldHVybiBpbnN0YW5jZV87Ci0gfQotCi0gLyoqCi0gKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBuYW1lKSB7Ci0JCXRyeSB7Ci0JCQlVUkwgaW5zdGFsbFVSTCA9IGluc3RhbmNlXy5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotCQkJVVJMIGltYWdlVVJMID0gbmV3IFVSTChpbnN0YWxsVVJMLCBuYW1lKTsKLQkJCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgIHJldHVybiBudWxsOwotICAgfQotIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9XZWJTZXJ2aWNlc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1dlYlNlcnZpY2VzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3OTQ3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1dlYlNlcnZpY2VzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQyNCAxODIzNzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzExMjAgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLldzdFdTVUlQbHVnaW5NZXNzYWdlczsKLQotLyoqCi0gKiBUaGUgV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZQotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKLQlwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnRDb21wb3NpdGUgPSBudWxsOwotLyoqCi0gKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBTV1QgY29udHJvbCBmb3IgdGhlIGN1c3RvbWl6ZWQgYm9keSAKLSAqIG9mIHRoaXMgcHJlZmVyZW5jZSBwYWdlIHVuZGVyIHRoZSBnaXZlbiBwYXJlbnQgY29tcG9zaXRlLgotICogPHA+Ci0gKiBUaGlzIGZyYW1ld29yayBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBjb25jcmV0ZQotICogc3ViY2xhc3Nlcy4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgY29tcG9zaXRlCi0gKiBAcmV0dXJuIHRoZSBuZXcgY29udHJvbAotICovCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlIHBhcmVudCkgewotCQlwYXJlbnRDb21wb3NpdGUgPSBwYXJlbnQ7Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCQlMYWJlbCBtZXNzYWdlID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULldSQVApOwotCQltZXNzYWdlLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLldFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRik7Ci0JCUxpbmsgbGluayA9IG5ldyBMaW5rKGNvbXBvc2l0ZSwgU1dULldSQVApOwotCQlsaW5rLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLldFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRl9MSU5LKTsKLQkJbGluay5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJlZmVyZW5jZURpYWxvZ09uKHBhcmVudENvbXBvc2l0ZQotCQkJCQkJLmdldFNoZWxsKCksIGUudGV4dCwgbnVsbCwgbnVsbCk7Ci0JCQkJcGFyZW50Q29tcG9zaXRlLmxheW91dCgpOwotCQkJfQotCQl9KTsKLQotCQlub0RlZmF1bHRBbmRBcHBseUJ1dHRvbigpOwotCQlEaWFsb2cuYXBwbHlEaWFsb2dGb250KGNvbXBvc2l0ZSk7Ci0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCi0JLyoqCi0JICogRG8gYW55IGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIGJ5IHRoZSBkZXNrdG9wLiBCeSBkZWZhdWx0IGRvIG5vdGhpbmcuCi0JICovCi1wdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggZGVza3RvcCkge30KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS91dGlscy9BZGFwdGVyVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvdXRpbHMvQWRhcHRlclV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjhkMTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS91dGlscy9BZGFwdGVyVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA3MTYgICAxOTEzNTcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjIwICAgMjE5NTM3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA4MDQyMSAgIDIyNzgyNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWRhcHRlclV0aWxzIGFkYXB0IHRvIElGaWxlIGJlZm9yZSBTdHJpbmcKLSAqIDIwMDkwMzEwICAgMjQyNDQwIHllbmx1QGNhLmlibS5jb20gLSBZZW4gTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHM7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbnZlcnRlci5JSUZpbGUyVXJpQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLS8qKgotICogVGhlIEFkYXB0ZXJVdGlscyBjbGFzcyBwcm92aWRlcyB1dGlsaXR5IG1ldGhvZHMgdG8gZ2V0IG9iamVjdHMgZnJvbSB0aGUgUGxhdGZvcm0ncyBhZGFwdGVyIGV4dGVuc2lvbi4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyVXRpbHMgewkKLQkKLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgYW4gSUZpbGUgb3IgU3RyaW5nIGFkYXB0ZXIuCi0JICogCi0JICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSB0aGUgb2JqZWN0IGlzIGFkYXB0YWJsZSB0byBJRmlsZSBvciBTdHJpbmcsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzQWRhcHRlcihPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJYm9vbGVhbiBoYXNBZGFwdGVyID0gUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5oYXNBZGFwdGVyKG9iamVjdCwgIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2UuSUZpbGUiKTsKLQkJaWYgKCFoYXNBZGFwdGVyKQotCQkJaGFzQWRhcHRlciA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuaGFzQWRhcHRlcihvYmplY3QsICJqYXZhLmxhbmcuU3RyaW5nIik7Ci0JCXJldHVybiBoYXNBZGFwdGVyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gb2JqZWN0IE9iamVjdCB0byBhZGFwdAotCSAqIEByZXR1cm4gVGhlIGFkYXB0ZWQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmlsZSBvciBTdHJpbmcgaWYgYW4gYWRhcHRlciBpcyBmb3VuZC4gCi0JICogICAgICAgICBSZXR1cm5zIG51bGwgaWYgYW4gYWRhcHRlciBpcyBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0QWRhcHRlZE9iamVjdCAoT2JqZWN0IG9iamVjdCkgeyAKLQkJaWYgKG9iamVjdCA9PSBudWxsKSAKLQkJCXJldHVybiBudWxsOwotCQlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIob2JqZWN0LCAiamF2YS5sYW5nLlN0cmluZyIpOwotCQlpZiAoYWRhcHRlZE9iamVjdCA9PSBudWxsKSB7Ci0JCQlhZGFwdGVkT2JqZWN0ID0gUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5sb2FkQWRhcHRlcihvYmplY3QsICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVkT2JqZWN0OwotCX0KLQkKLQkvKioKLQkgICAqIEBwYXJhbSBvYmplY3QgTG9vayB1cCBhbiBhZGFwdGVyIG1hcHBpbmcgdGhlIG9iamVjdCB0byBJRmlsZSBvciBTdHJpbmcuCi0JICAgKiBAcmV0dXJuIFRoZSBXU0RMIHVyaSByZXR1cm5lZCBieSB0aGUgYWRhcHRlciBvciBudWxsIGlmIG5vIGFkYXB0ZXIgaXMgZm91bmQuCi0JICAgKi8KLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFkYXB0ZWRXU0RMIChPYmplY3Qgb2JqZWN0KSB7Ci0JCSAgU3RyaW5nIHdzZGxVUkkgPSBudWxsOwotCQkgIE9iamVjdCBhZGFwdGVkT2JqZWN0ID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRPYmplY3Qob2JqZWN0KTsKLQkJICBpZiAoIGFkYXB0ZWRPYmplY3QgIT0gbnVsbCkgewotCQkJICBpZiAoYWRhcHRlZE9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQotCQkJICB7Ci0JCQkJICBJRmlsZSBmaWxlID0gKElGaWxlKWFkYXB0ZWRPYmplY3Q7Ci0JCQkJICBib29sZWFuIGFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUgPSB0cnVlOwotCQkJCSAgSUlGaWxlMlVyaUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldElGaWxlMlVyaUNvbnZlcnRlcigpOwotCQkJCSAgaWYgKGNvbnZlcnRlciAhPSBudWxsKQotCQkJCSAgewotCQkJCQkgIHdzZGxVUkkgPSBjb252ZXJ0ZXIuY29udmVydChmaWxlKTsKLQkJCQkJICBhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gY29udmVydGVyLmFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUoKTsKLQkJCQkgIH0KLQkJCQkgIGlmICh3c2RsVVJJID09IG51bGwgJiYgYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSkKLQkJCQkgIHsKLQkJCQkgICAgVVJJIHVyaSA9IGZpbGUuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkgICAgaWYgKHVyaSAhPSBudWxsKSB7Ci0JCQkJCSAgd3NkbFVSSSA9IHVyaS50b1N0cmluZygpOwotCQkJCSAgICB9Ci0JCQkJICB9Ci0JCQkgIH0gZWxzZSBpZiAoYWRhcHRlZE9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJCSAgd3NkbFVSSSA9IChTdHJpbmcpIGFkYXB0ZWRPYmplY3Q7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgcmV0dXJuIHdzZGxVUkk7Ci0JICB9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NpL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWY3MWQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NpL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxMCAgIDEzMTM1MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDcyOCAgIDE1MTYzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEwMjUgICAgICAgICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5Xc3RXU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luOwotCi0KLQotcHVibGljIGNsYXNzIFdTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lciwgTGlzdGVuZXIKLQotewotCSAgCi0gIC8qQ09OVEVYVF9JRCBQV1NJMDAwMSBmb3IgdGhlIFdTLUkgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1BBR0UgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAwMCI7Ci0gIAotICBwcml2YXRlIFRleHQgd3NkbFZhbGlkYXRpb25MYWJlbF87Ci0gIC8qQ09OVEVYVF9JRCBQV1NJMDAwOSBmb3IgdGhlIE5vIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gYnV0dG9uIG9uIHRoZSBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcGFnZSovCi0gIHByaXZhdGUgQnV0dG9uIHZhbGlkYXRlTm9Xc2RsQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU0kwMDAxMCBmb3IgdGhlIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yIHJlbW90ZSBmaWxlcyBvbmx5IGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDExIGZvciB0aGUgV2l6YXJkIFdTREwgdmFsaWRhdGlvbiBmb3IgYWxsIGZpbGVzIGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fOwotICAKLQotICAvKgotICAgKiBDT05URVhUX0lEIFBXUlMwMDA5IGZvciB0aGUgbm8gd3NkbCB2YWxpZGF0aW9uIHJhZGlvIGJ1dHRvbiBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA5IjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMCBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBvbiByZW1vdGUgZG9jdW1lbnQgcmFkaW8gYnV0dG9uIG9mIHRoZSBwcm9maWxlIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAwMTAiOwotICAvKgotICAgKiBDT05URVhUX0lEIFBXUlMwMDExIGZvciB0aGUgd3NkbCB2YWxpZGF0aW9uIG9uIGFsbCBkb2N1bWVudCByYWRpbyBidXR0b24gb2YgdGhlIHByb2ZpbGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTSV9SQURJT19XU0RMVkFMX0FMTCA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDExIjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMiBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBsYWJlbCBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1dTRExWQUxfTEFCRUwgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAxMiI7Ci0KLSAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnRDb21wb3NpdGUgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotICAgCi0gICAgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfVkVSVElDQUwgKSApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1BBR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChwYXJlbnQsSU5GT1BPUF9QV1NJX1BBR0UpOwotCi0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0KLSAgICAKLSAgICB3c2RsVmFsaWRhdGlvbkxhYmVsXyA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlJFQURfT05MWSk7Ci0gICAgd3NkbFZhbGlkYXRpb25MYWJlbF8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTCk7Ci0gICAgd3NkbFZhbGlkYXRpb25MYWJlbF8uc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9XU0RMVkFMX0xBQkVMKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAod3NkbFZhbGlkYXRpb25MYWJlbF8sIElORk9QT1BfUFdTSV9XU0RMVkFMX0xBQkVMKTsKLSAgICAKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTF9OT05FKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9OT05FKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodmFsaWRhdGVOb1dzZGxCdXR0b25fLCBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9OT05FKTsKLSAgICAKLSAgICB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5SQURJTyk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9XU0RMVkFMX1JFTU9URSk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fLCBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUpOwotICAgIAotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1dTRExWQUxfQUxMKTsKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8sIElORk9QT1BfUFdTSV9SQURJT19XU0RMVkFMX0FMTCk7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgdXNpbmcgZGVmYXVsdCB2YWx1ZXMKLSAgICogaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotCi0gICAgUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dCB3c2RsVmFsaWRhdGlvbkNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpOwotICAgIFN0cmluZyB2YWxpZGF0aW9uU2VsZWN0aW9uID0gd3NkbFZhbGlkYXRpb25Db250ZXh0LmdldERlZmF1bHQoKTsKLSAgICB3c2RsVmFsaWRhdGlvbkNvbnRleHQudXBkYXRlV1NETFZhbGlkYXRpb24odmFsaWRhdGlvblNlbGVjdGlvbik7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICBwcm9jZXNzV1NETFZhbGlkYXRpb25TZWxlY3Rpb24odmFsaWRhdGlvblNlbGVjdGlvbik7Ci0gICAgCi0gICAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCkuc2V0V2FpdEZvcldTRExWYWxpZGF0aW9uKFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpLmdldERlZmF1bHQoKSk7Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24gPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpLmdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpOwotICAgIHByb2Nlc3NXU0RMVmFsaWRhdGlvblNlbGVjdGlvbih2YWxpZGF0aW9uU2VsZWN0aW9uKTsKLSAgICAKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzV1NETFZhbGlkYXRpb25TZWxlY3Rpb24oU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24pIHsKLQotCQlpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9OT19XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkJdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJfSBlbHNlIGlmIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX1JFTU9URV9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkJdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCX0gZWxzZSBpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9BTExfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHsKLQkJCXZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQl9Ci0KLQl9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkKLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBvbiB0aGUgcGFnZS4gSGFuZGxlcyB0aGUgZXZlbnQgYW5kIHJldmFsaWRhdGVzIHRoZSBwYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGV2ZW50Ci0gICAqICAgICAgICAgIFRoZSBldmVudCB0aGF0IG9jY3VyZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgewotCSAgCi0JICBTdHJpbmcgd3NkbFZhbGRhdGlvblNlbGVjdGlvbiA9IG51bGw7Ci0JICBpZiAodmFsaWRhdGVOb1dzZGxCdXR0b25fID09IGV2ZW50LndpZGdldCkgewotCQkgIHdzZGxWYWxkYXRpb25TZWxlY3Rpb24gPSBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX05PX1dTREw7Ci0JICB9Ci0JICBlbHNlIGlmICh2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fID09IGV2ZW50LndpZGdldCkgewotCQkgIHdzZGxWYWxkYXRpb25TZWxlY3Rpb24gPSBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX1JFTU9URV9XU0RMOwotCSAgfQotCSAgZWxzZSBpZiAodmFsaWRhdGVBbGxXc2RsQnV0dG9uXyA9PSBldmVudC53aWRnZXQpIHsKLQkJICB3c2RsVmFsZGF0aW9uU2VsZWN0aW9uID0gUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9BTExfV1NETDsKLQkgIH0KLQkgIFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCkudXBkYXRlV1NETFZhbGlkYXRpb24od3NkbFZhbGRhdGlvblNlbGVjdGlvbik7Ci0JICAKLSAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NydC9JT2JqZWN0U2VsZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NydC9JT2JqZWN0U2VsZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5ZTY4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzcnQvSU9iamVjdFNlbGVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIElPYmplY3RTZWxlY3RvciB7Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbCk7Ci0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCk7Ci0JcHVibGljIFN0cmluZyBnZXRQcm9qZWN0KCk7Ci0JcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWwpOwotCXB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExODhkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLXdzLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5NGUyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMTI1MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1RodSBNYXkgMzEgMTM6MTI6NTMgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTU2ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjEyIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkYTlmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMjAzLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb252ZXJ0ZXIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGE7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjUuMCwxLjYuMCkiLAotIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMy4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhYTRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9SZWdpc3RyeU1vZGVsMi9zcmMiCi0gICAgZWRpdERpcmVjdG9yeT0iL1JlZ2lzdHJ5TW9kZWwyLmVkaXQvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9SZWdpc3RyeU1vZGVsMi5lZGl0b3Ivc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9IlJlZ2lzdHJ5TW9kZWwyIiBydW50aW1lSmFyPSJ0cnVlIiBtb2RlbE5hbWU9IlJUIiBlZGl0UGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5wcm92aWRlci5SVEVkaXRQbHVnaW4iCi0gICAgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5wcmVzZW50YXRpb24uUlRFZGl0b3JQbHVnaW4iCi0gICAgcnVudGltZUNvbXBhdGliaWxpdHk9ImZhbHNlIj4KLSAgPGZvcmVpZ25Nb2RlbD5JbmRleC54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5SZWdpc3RyeS54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5VRERJUmVnaXN0cnkueHNkPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+VGF4b25vbXkueHNkPC9mb3JlaWduTW9kZWw+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlJUSW5kZXgiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24iPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uL3ZhbHVlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24vbGFuZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L3hNTE5TUHJlZml4TWFwIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L3hTSVNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2luZGV4Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L3JlZ2lzdHJ5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlRheG9ub215IiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMCIKLSAgICAgIHJlc291cmNlPSJYTUwiIGVjb3JlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvIj4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvbmxuYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jYXRlZ29yeSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jb2RlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25hbWUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9teSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9ubG5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2lkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2xvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvcmVmIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3Rtb2RlbEtleSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iUmVnaXN0cnkiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL3ZhbHVlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9yZWdpc3RyeSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9kZXNjcmlwdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9pZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9sb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9yZWYiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlVERElSZWdpc3RyeSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAiCi0gICAgICByZXNvdXJjZT0iWE1MIiBlY29yZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveE1MTlNQcmVmaXhNYXAiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94U0lTY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3RheG9ub21pZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC91ZGRpUmVnaXN0cnkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzL3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS92ZXJzaW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGlzY292ZXJ5VVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvcHVibGljYXRpb25VUkwiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkRGlzY292ZXJ5VVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvc2VjdXJlZFB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdExvZ2luIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdFBhc3N3b3JkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3RheG9ub21pZXMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmRhZTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL1JULnhzZDJlY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgotPHhzZDJlY29yZTpYU0QyRWNvcmVNYXBwaW5nUm9vdCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNkMmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL1hTRDJFY29yZSIgaW5wdXRzPSJJbmRleC54c2QjLyBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLyBUYXhvbm9teS54c2QjLyBSZWdpc3RyeS54c2QjLyBVRERJUmVnaXN0cnkueHNkIy8iCi0gICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvIgotICAgIHRvcFRvQm90dG9tPSJ0cnVlIj4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2Jhc2U7WFNEQXR0cmlidXRlRGVjbGFyYXRpb249MiIKLSAgICAgIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9iYXNlIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLy9pZDtYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbj0zIiBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9YTUxOYW1lc3BhY2VEb2N1bWVudFJvb3QvaWQiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2xhbmc7WFNEQXR0cmlidXRlRGVjbGFyYXRpb24iIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9sYW5nIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLy9sYW5nO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uL1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL3NwYWNlO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTEiCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9YTUxOYW1lc3BhY2VEb2N1bWVudFJvb3Qvc3BhY2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL3NwYWNlO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTEvWFNEU2ltcGxlVHlwZURlZmluaXRpb24iCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9TcGFjZVR5cGUiLz4KLSAgPG5lc3RlZCBpbnB1dHM9ImJ1bmRsZWVudHJ5Oi8vMTgzOS9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCMvL3N0cmluZztYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbj03IgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0yIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL0NhdGVnb3J5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9ubG5hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvY2F0ZWdvcnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlPTEiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jb2RlIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL0NhdGVnb3J5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25hbWUiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9jYXRlZ29yeTtYU0RFbGVtZW50RGVjbGFyYXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9jYXRlZ29yeSIvPgotICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL0Rlc2NyaXB0aW9uO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0yL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9kZXNjcmlwdGlvbjtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9kZXNjcmlwdGlvbiIvPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9EZXNjcmlwdGlvbi9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vZGVzY3JpcHRpb247WFNERWxlbWVudERlY2xhcmF0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9kZXNjcmlwdGlvbiIvPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vTmFtZTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IkluZGV4LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iYnVuZGxlZW50cnk6Ly8xODM5L2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIy8vYW55VVJJO1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uPTIzIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvbmFtZSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvZGVzY3JpcHRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2lkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2xvY2F0aW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L3JlZiIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9ubG5hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2NhdGVnb3J5Ii8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2UiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9pZCIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTIiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9sb2NhdGlvbiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTMiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9uYW1lIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3JlZiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTQiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS90bW9kZWxLZXkiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L25hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvZGVzY3JpcHRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvcmVnaXN0cnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvdGF4b25vbXkiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9pbmRleDtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9pbmRleCIvPgotICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vbmFtZTtYU0RFbGVtZW50RGVjbGFyYXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9uYW1lO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvbmFtZSIvPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vbmFtZTtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9yZWdpc3RyeTtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvcmVnaXN0cnkiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL3RheG9ub215O1hTREVsZW1lbnREZWNsYXJhdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9teSIvPgotICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1RheG9ub21pZXM7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVGF4b25vbWllcyI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9UYXhvbm9taWVzO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVGF4b25vbWllcy90YXhvbm9teSIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy90YXhvbm9taWVzO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9taWVzIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkiPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS92ZXJzaW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGlzY292ZXJ5VVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvcHVibGljYXRpb25VUkwiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0zIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkRGlzY292ZXJ5VVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NCIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvc2VjdXJlZFB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdExvZ2luIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdFBhc3N3b3JkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvdGF4b25vbWllcyIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy91ZGRpUmVnaXN0cnk7WFNERWxlbWVudERlY2xhcmF0aW9uIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC91ZGRpUmVnaXN0cnkiLz4KLTwveHNkMmVjb3JlOlhTRDJFY29yZU1hcHBpbmdSb290PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTczYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgam1lcmdlci8sXAotICAgICAgICAgICAgICAgaWNvbnMvCi1zcmMuaW5jbHVkZXMgPSBjb21wb25lbnQueG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvY29tcG9uZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlMzVjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzIj4KLSAgIDxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPgotICAgPC9jb21wb25lbnQtZGVwZW5kcz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cyIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5heGlzIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUud3NpbDRqIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy51ZGRpNGoiIGZyYWdtZW50PSJmYWxzZSIvPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OTk4M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGE5ZjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ljb25zL2Z1bGwvb2JqMTYvd3NpY2F0X2NoaWxkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ptZXJnZXIvbWVyZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZTIxMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBNZXJnZSBydWxlcyB1c2VkIGJ5IEpNZXJnZXIgLS0+Ci08bWVyZ2U6b3B0aW9ucyAKLQl4bWxuczptZXJnZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZWNsaXBzZS9lbWYvY29kZWdlbi9qbWVyZ2UvT3B0aW9ucyI+Ci0JPG1lcmdlOnB1bGwgCi0JCXNvdXJjZUdldD0iTWV0aG9kL2dldFJldHVyblR5cGUiIAotCQl0YXJnZXRQdXQ9Ik1ldGhvZC9zZXRSZXR1cm5UeXBlIi8+Ci0JPG1lcmdlOnB1bGwgCi0JCXNvdXJjZUdldD0iTWV0aG9kL2dldEV4Y2VwdGlvbnMiIAotCQl0YXJnZXRQdXQ9Ik1ldGhvZC9hZGRFeGNlcHRpb24iLz4KLQotPCEtLSBNZXJnZSBydWxlcyB0byBoYW5kbGUgYW5ub3RhdGlvbjoKLQktIFdpdGggdGhpcyBwdWxsIHJ1bGUsIGFubm90YXRpb25zIGluIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgYnkgYW5ub3RhdGlvbnMgb2YgdGhlIAotCXNhbWUgbmFtZSBpbiB0aGUgc291cmNlLgotCS0gV2l0aCB0aGlzIHN3ZWVwIHJ1bGUsIGFueSBhbm5vdGF0aW9uIGluIHRoZSB0YXJnZXQgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSAKLSAgCXNvdXJjZSBpcyBjb21tZW50ZWQgb3V0LiAKLSAgCS0gQnkgZGVmYXVsdCwgYW55IGFubm90YXRpb24gaW4gdGhlIHNvdXJjZSB0aGF0IGlzIG5vdCBpbiB0aGUgdGFyZ2V0IGFyZSBwdWxsZWQgaW50byB0aGUgdGFyZ2V0LgotLS0+Ci0KLQk8bWVyZ2U6cHVsbCAKLSAgICAJc291cmNlR2V0PSJBbm5vdGF0aW9uL2dldENvbnRlbnRzIgotICAgIAl0YXJnZXRQdXQ9IkFubm90YXRpb24vc2V0Q29udGVudHMiLz4KLSAgIAotICAJPG1lcmdlOnN3ZWVwIHNlbGVjdD0iQW5ub3RhdGlvbiIgYWN0aW9uPSJjb21tZW50Ii8+Ci0JCQotPC9tZXJnZTpvcHRpb25zPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNmNTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL0luZGV4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnJ0aT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleCIKLXhtbG5zOnJlZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi14bWxuczp0YXg9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4Ij4KLQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0Jc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotCXNjaGVtYUxvY2F0aW9uPSIuL1JlZ2lzdHJ5LnhzZCIvPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotCXNjaGVtYUxvY2F0aW9uPSIuL1RheG9ub215LnhzZCIvPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImluZGV4IiB0eXBlPSJydGk6SW5kZXgiLz4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluZGV4Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJydGk6TmFtZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJydGk6RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InJlZzpyZWdpc3RyeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idGF4OnRheG9ub215IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InJ0aTpOYW1lIi8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWUiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InJ0aTpEZXNjcmlwdGlvbiIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlMTk2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9SZWdpc3RyeS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEKLXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi14bWxuczpyZWc9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJyZWdpc3RyeSIgdHlwZT0icmVnOlJlZ2lzdHJ5Ii8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3RyeSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0icmVnOk5hbWUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0icmVnOkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYXRpb24iIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJyZWc6TmFtZSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJyZWc6RGVzY3JpcHRpb24iLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRGVzY3JpcHRpb24iPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNTZhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVGF4b25vbXkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgoteG1sbnM6dGF4PSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQlzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0idGF4b25vbXkiIHR5cGU9InRheDpUYXhvbm9teSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUYXhvbm9teSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmxuYW1lIiB0eXBlPSJ0YXg6TmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRtb2RlbEtleSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ2F0ZWdvcnkiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Im5sbmFtZSIgdHlwZT0idGF4Ok5hbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjYXRlZ29yeSIgdHlwZT0idGF4OkNhdGVnb3J5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ0YXg6TmFtZSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1VERElSZWdpc3RyeS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzYyNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnVyZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IgoteG1sbnM6cmVnPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLXhtbG5zOnRheD0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi10YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQkKLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vUmVnaXN0cnkueHNkIi8+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vVGF4b25vbXkueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0idWRkaVJlZ2lzdHJ5IiB0eXBlPSJ1cmc6VURESVJlZ2lzdHJ5Ii8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJVRERJUmVnaXN0cnkiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0icmVnOlJlZ2lzdHJ5Ij4KLQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNjb3ZlcnlVUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0icHVibGljYXRpb25VUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJlZERpc2NvdmVyeVVSTCIgdHlwZT0ieHNkOmFueVVSSSIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cmVkUHVibGljYXRpb25VUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVmYXVsdExvZ2luIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjEiLz4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlZmF1bHRQYXNzd29yZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9taWVzIiB0eXBlPSJ1cmc6VGF4b25vbWllcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9taWVzIiB0eXBlPSJ1cmc6VGF4b25vbWllcyIvPgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVGF4b25vbWllcyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0YXg6dGF4b25vbXkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwNDJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InJlZ2lzdHJ5IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIgbnNQcmVmaXg9InJlZ2lzdHJ5Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iRGVzY3JpcHRpb24iLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5hbWUiIHVwcGVyQm91bmQ9Ii0yIiBlVHlwZT0iIy8vTmFtZSIKLSAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vUmVnaXN0cnkiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0icmVnaXN0cnkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Ik5hbWUiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWdpc3RyeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJSZWdpc3RyeSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVzY3JpcHRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWQiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InJlZiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDk1YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InJ0aW5kZXgiCi0gICAgbnNVUkk9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgiIG5zUHJlZml4PSJydGluZGV4Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iRGVzY3JpcHRpb24iLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImluZGV4IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0luZGV4IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImluZGV4Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbmRleCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJJbmRleCIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVzY3JpcHRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRheG9ub215IiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbXkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Ik5hbWUiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE4ODliMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InRheG9ub215IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIgbnNQcmVmaXg9InRheG9ub215Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ2F0ZWdvcnkiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iQ2F0ZWdvcnkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5sbmFtZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5sbmFtZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjYXRlZ29yeSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJjYXRlZ29yeSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb2RlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNvZGUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvY3VtZW50Um9vdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSIiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9Im1peGVkIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1peGVkIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUZlYXR1cmVNYXBFbnRyeSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudFdpbGRjYXJkIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjptaXhlZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4TUxOU1ByZWZpeE1hcCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4bWxuczpwcmVmaXgiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieFNJU2NoZW1hTG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieHNpOnNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImNhdGVnb3J5IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0NhdGVnb3J5IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNhdGVnb3J5Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0YXhvbm9teSIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9UYXhvbm9teSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iTmFtZSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRheG9ub215Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IlRheG9ub215Ii8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50T25seSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJubG5hbWUiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJubG5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY2F0ZWdvcnkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vQ2F0ZWdvcnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iY2F0ZWdvcnkiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWQiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlZiIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWYiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idG1vZGVsS2V5IiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRtb2RlbEtleSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGNlNjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InVkZGlyZWdpc3RyeSIKLSAgICBuc1VSST0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IiBuc1ByZWZpeD0idWRkaXJlZ2lzdHJ5Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG9jdW1lbnRSb290Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IiIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ibWl4ZWQiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWl4ZWQiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRmVhdHVyZU1hcEVudHJ5Ij4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50V2lsZGNhcmQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOm1peGVkIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhNTE5TUHJlZml4TWFwIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhtbG5zOnByZWZpeCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4U0lTY2hlbWFMb2NhdGlvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4c2k6c2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbWllcyIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9UYXhvbm9taWVzIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRheG9ub21pZXMiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ1ZGRpUmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vVURESVJlZ2lzdHJ5IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InVkZGlSZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRheG9ub21pZXMiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iVGF4b25vbWllcyIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbXkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVERElSZWdpc3RyeSIgZVN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJVRERJUmVnaXN0cnkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlcnNpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InZlcnNpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzY292ZXJ5VVJMIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHVibGljYXRpb25VUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlY3VyZWREaXNjb3ZlcnlVUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InNlY3VyZWREaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VjdXJlZFB1YmxpY2F0aW9uVVJMIgotICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJzZWN1cmVkUHVibGljYXRpb25VUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVmYXVsdExvZ2luIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0TG9naW4iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVmYXVsdFBhc3N3b3JkIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0UGFzc3dvcmQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbWllcyIgZVR5cGU9IiMvL1RheG9ub21pZXMiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbWllcyIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTY1YzZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcxMTIyICAgMjA5ODU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAzMjQgICAyMjA3MzkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFRleHQgRGVzY3JpcHRpb24gbWlzc2luZyBmb3IgUHJvZmlsZSBDb21wbGFpbmNlIG5vZGVzCi0jIDIwMDgwNDAzICAgMjI1NDgwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDgwNzE1ICAgMjQwNzIyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDYW5ub3Qgc2V0dXAgVENQL0lQIE1vbml0b3IgZm9yIHNvYXAxMiBlbmRwb2ludHMKLSMgMjAwOTAzMTAgICAyNDI0NDAgeWVubHVAY2EuaWJtLmNvbSAtIFllbiBMdSwgUGx1Z2dhYmxlIElGaWxlIHRvIFVSSSBDb252ZXJ0ZXIKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotIyBFeHRlbnNpb24gcG9pbnQgbmFtZXMKLVhQX1dFQl9TRVJWSUNFX0xPQ0FUT1I9V2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX1dPUktTUEFDRT1Xb3Jrc3BhY2UgV2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX1dPUktTUEFDRT1Xb3Jrc3BhY2UgV1NETCBkb2N1bWVudHMKLVhfV1NJTF9DT05URU5UX1RZUEU9V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgRG9jdW1lbnQKLVhQX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9UUkFOU0ZPUk1FUj1FeHRlbnNpYmlsaXR5IEVsZW1lbnQgVHJhbnNmb3JtZXIKLVhQX0lGSUxFXzJfVVJJX0NPTlZFUlRFUj1JRmlsZSB0byBVUkkgQ29udmVydGVyCi0KLU1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUj1JV0FCMDAwMUUgVW5hYmxlIHRvIG1vbml0b3IgcG9ydCB7MH0gb2YgezF9LgotCi0jIEN1cnJlbnRseSBrbm93biBwdWJsaWMgVURESSByZWdpc3RyaWVzCi1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQPVNBUCBVRERJIFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQX1RFU1Q9U0FQIFVEREkgVGVzdCBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1hNRVRIT0RTPVhNZXRob2RzIFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTT1OVFQgQ29tbXVuaWNhdGlvbnMgUmVnaXN0cnkKLQotCi1QUkVGRVJFTkNFX1NFUlZJQ0VQT0xJQ0lFU19DT05UQUlORVJfV1NJX0NPTVBMSUFOQ0U9UHJvZmlsZSBDb21wbGlhbmNlCi1MQUJFTF9XU0lfU1NCUD1XUy1JIEJQIDEuMSArIFNTQlAgMS4wCi1MQUJFTF9XU0lfQVA9V1MtSSBBUCAxLjAKLQotIyBTZXJ2aWNlIHBvbGljeSBkZXNjcmlwdGlvbnMKLURFU0NSSVBUSU9OX1dTSV9DT01QTElBTkNFPVdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKSBwcm9maWxlcyBjb21wbGlhbmNlIGxldmVscy4KLURFU0NSSVBUSU9OX1dTSV9BUD1XUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wXG5cCi1SZXF1aXJlbWVudHMgZm9yIHN1cHBvcnRpbmcgaW50ZXJvcGVyYWJsZSBTT0FQIG1lc3NhZ2VzIHdpdGggYXR0YWNobWVudHMtYmFzZWQgV2ViIHNlcnZpY2VzLgotREVTQ1JJUFRJT05fV1NJX1NTQlA9V1MtSSBCYXNpYyBQcm9maWxlIDEuMSBhbmQgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMFxuXAotQmFzaWMgcHJvZmlsZSBhbmQgcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHNlcmlhbGl6YXRpb24gb2YgYW4gZW52ZWxvcGUgYW5kIGl0cyByZXByZXNlbnRhdGlvbiBpbiBhIFNPQVAgbWVzc2FnZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmYyZTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBwcm9tb3RlZCBmb3IgcHVibGljIHVzZSwgcG9zc2libHkgd2l0aCBjaGFuZ2VzLCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImxvY2F0b3IiIG5hbWU9IiVYUF9XRUJfU0VSVklDRV9MT0NBVE9SIiBzY2hlbWE9InNjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkIi8+Ci0gICAKLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9IkV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIiIG5hbWU9IiVYUF9FWFRFTlNJQklMSVRZX0VMRU1FTlRfVFJBTlNGT1JNRVIiIHNjaGVtYT0ic2NoZW1hL0V4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIuZXhzZCIvPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iaWZpbGUydXJpY29udmVydGVyIiBuYW1lPSIlWFBfSUZJTEVfMl9VUklfQ09OVkVSVEVSIiBzY2hlbWE9InNjaGVtYS9pZmlsZTJ1cmljb252ZXJ0ZXIuZXhzZCIvPgotCi0gICA8IS0tIEV4dGVuc2lvbiBwcm92aWRpbmcgd29ya3NwYWNlIFdTREwgZGlzY292ZXJ5IC0tPiAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIj4KLQotICAgICAgPHdlYlNlcnZpY2VMb2NhdG9yQ2F0ZWdvcnkKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuY2F0ZWdvcnkud29ya3NwYWNlIgotICAgICAgICAgICAgbGFiZWw9IiVYX1dFQl9TRVJWSUNFX0xPQ0FUT1JfQ0FURUdPUllfV09SS1NQQUNFIi8+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5Xb3Jrc3BhY2VXU0RMTG9jYXRvciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV29ya3NwYWNlV1NETExvY2F0b3IiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLmNhdGVnb3J5LndvcmtzcGFjZSIKLSAgICAgICAgICAgIGxhYmVsPSIlWF9XRUJfU0VSVklDRV9MT0NBVE9SX1dPUktTUEFDRSI+Ci0gICAgICA8L3dlYlNlcnZpY2VMb2NhdG9yPgotCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSBFeHRlbnNpb24gdG8gYmluZCBhIGZpbGUgdHlwZSB0byBXU0lMIGZpbGVzIC0tPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudGVhbS5jb3JlLmZpbGVUeXBlcyI+Ci0gICAgICA8ZmlsZVR5cGVzCi0gICAgICAgICAgICB0eXBlPSJ0ZXh0IgotICAgICAgICAgICAgZXh0ZW5zaW9uPSJ3c2lsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBFeHRlbnNpb24gdG8gZGVmaW5lIGEgY29udGVudCB0eXBlIGZvciBXU0lMIGZpbGVzIC0tPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnRUeXBlcyI+Ci0gICAgICA8Y29udGVudC10eXBlCi0gICAgICAgICAgICBwcmlvcml0eT0iaGlnaCIKLSAgICAgICAgICAgIG5hbWU9IiVYX1dTSUxfQ09OVEVOVF9UWVBFIgotICAgICAgICAgICAgaWQ9IndzaWxzb3VyY2UiCi0gICAgICAgICAgICBiYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0gICAgICAgICAgICBkZWZhdWx0LWNoYXJzZXQ9IlVURi04IgotICAgICAgICAgICAgZmlsZS1leHRlbnNpb25zPSJ3c2lsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnNlcnZpY2Vwb2xpY3kiPgotICAgICA8c2VydmljZVBvbGljeT4KLSAgICAgICAgIDxsb2FkTGlzdGVuZXIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NaWdyYXRlV1NJcHJlZmVyZW5jZXNMb2FkTGlzdGVuZXIiLz4KLSAgICAgPC9zZXJ2aWNlUG9saWN5PgotICAgPC9leHRlbnNpb24+IAotICAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMucHJvcGVydHlUZXN0ZXJzIj4KLSAgICA8cHJvcGVydHlUZXN0ZXIKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS53cy5zZXJ2aWNlLnBvbGljeSIKLSAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0IgotICAgICAgbmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS53cy5zZXJ2aWNlLnBvbGljeSIKLSAgICAgIHByb3BlcnRpZXM9InByb2plY3RIYXNXU0RMZmlsZXMiCi0gICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTRExGaWxlUHJvcGVydHlUZXN0ZXIiPgotICAgIDwvcHJvcGVydHlUZXN0ZXI+Ci0gIDwvZXh0ZW5zaW9uPgotICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5zZXJ2aWNlcG9saWN5Ij4KLSAgICAgPHNlcnZpY2VQb2xpY3k+Ci0gICAgICAgPGVuYWJsZW1lbnQ+Ci0gICAgICAgICAgIDxvcj4KLSAgICAgICAgICAgICA8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJvamVjdEZhY2V0IgotICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqc3Qud2ViIi8+Ci0gICAgICAgICAgICAgPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByb2plY3RGYWNldCIKLSAgICAgICAgICAgICAgICAgICB2YWx1ZT0ianN0LmVqYiIvPgotICAgICAgICAgICAgIDx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS53cy5zZXJ2aWNlLnBvbGljeS5wcm9qZWN0SGFzV1NETGZpbGVzIi8+Ci0gICAgICAgICAgIDwvb3I+Ci0gICAgICAgPC9lbmFibGVtZW50PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcCI+Ci0gICAgICAgICA8IS0tIENPTlRFWFRfSUQgUFNQVzAwMDEgZm9yIHRoZSBTZXJ2aWNlIFBvbGljaWVzIFdTLUkgUHJlZmVyZW5jZXMgY2F0ZWdvcnkgLS0+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBsb25nTmFtZT0iJVBSRUZFUkVOQ0VfU0VSVklDRVBPTElDSUVTX0NPTlRBSU5FUl9XU0lfQ09NUExJQU5DRSIgaWNvblBhdGg9Imljb25zL2Z1bGwvb2JqMTYvd3NpY2F0LmdpZiIgY29udGV4dEhlbHBJZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlBTUFcwMDAxIgotICAgICAgICAgCWRlc2NyaXB0aW9uPSIlREVTQ1JJUFRJT05fV1NJX0NPTVBMSUFOQ0UiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3NpYXAiIHBhcmVudFBvbGljeUlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5zdWdnZXN0aW9uRW51bSIgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0Ij4KLSAgICAgICAgIDwhLS0gQ09OVEVYVF9JRCBQU1BXMDAwMiBmb3IgdGhlIFNlcnZpY2UgUG9saWNpZXMgV1MtSSBBUCAxLjAgUHJlZmVyZW5jZSAtLT4KLSAgICAgICAgIDxkZXNjcmlwdG9yIGxvbmdOYW1lPSIlTEFCRUxfV1NJX0FQIiBpY29uUGF0aD0iaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmIiBjb250ZXh0SGVscElkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuUFNQVzAwMDIiCi0gICAgICAgICAJZGVzY3JpcHRpb249IiVERVNDUklQVElPTl9XU0lfQVAiLz4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3Qgb3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPgotICAgICAgICAgPHN0YXRlIGtleT0iZGVmYXVsdFByb3RvY29sIiB2YWx1ZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIiBwYXJlbnRQb2xpY3lJZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuc3VnZ2VzdGlvbkVudW0iIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCI+Ci0gICAgICAgICA8IS0tIENPTlRFWFRfSUQgUFNQVzAwMDMgZm9yIHRoZSBTZXJ2aWNlIFBvbGljaWVzIFdTLUkgU1NCUCAxLjAgUHJlZmVyZW5jZSAtLT4KLSAgICAgICAgIDxkZXNjcmlwdG9yIGxvbmdOYW1lPSIlTEFCRUxfV1NJX1NTQlAiIGljb25QYXRoPSJpY29ucy9mdWxsL29iajE2L3dzaWNhdF9jaGlsZC5naWYiIGNvbnRleHRIZWxwSWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5QU1BXMDAwMyIKLSAgICAgICAgIAlkZXNjcmlwdGlvbj0iJURFU0NSSVBUSU9OX1dTSV9TU0JQIi8+Ci0gICAgICAgICA8c3RhdGUga2V5PSJkZWZhdWx0UHJvdG9jb2wiIHZhbHVlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgIDwvc2VydmljZVBvbGljeT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL0V4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS9FeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZDQ1M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL0V4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3MiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiBpZD0iRXh0ZW5zaWJpbGl0eUVsZW1lbnRUcmFuc2Zvcm1lciIgbmFtZT0iRXh0ZW5zaWJpbGl0eSBFbGVtZW50IFRyYW5zZm9ybWVyIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHByb3ZpZGVkIGZvciBhZGRpbmcgVENQL0lQIG1vbml0b3Igc3VwcG9ydCBmb3Igbm9uLXN0YW5kYXJkIGVuZHBvaW50cy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2UgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InRyYW5zZm9ybWVyIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InRyYW5zZm9ybWVyIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSB0cmFuc2Zvcm1lciBjbGFzcyB3aGljaCBleHRlbmRzIElFeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yLklFeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGlzIGV4dGVuc2lvbiBwb2ludCBhcHBlYXJzLl0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIEV4dGVuZGVycyBzaG91bGQgaW1wbGVtZW50ICZsdDtjb2RlJmd0Oy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0lFeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL2lmaWxlMnVyaWNvbnZlcnRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL2lmaWxlMnVyaWNvbnZlcnRlci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzMyYjU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS9pZmlsZTJ1cmljb252ZXJ0ZXIuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3MiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiBpZD0iaWZpbGUydXJpY29udmVydGVyIiBuYW1lPSJJRmlsZSB0byBVUkkgQ29udmVydGVyIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHByb3ZpZGVkIHRvIHJlZ2lzdGVyIElGaWxlIHRvIFVSSSBjb252ZXJ0ZXJzIHdoaWNoIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlaXRoZXIgZmlsZTogb3IgcGxhdGZvcm06IFVSSXMgcHJvdmlkZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcyB0b29scy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNvbnZlcnRlciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgSUQgb2YgdGhlIElGaWxlIHRvIFVSSSBDb252ZXJ0ZXIgZXh0ZW5zaW9uLiBJZiB0aGUgZXh0ZW5zaW9uIHdpbGwgc2VydmUgdGhlIHByb2R1Y3QgdGhlbiB0aGlzIGlzIHRoZSBJRCB0aGF0IG11c3QgYmUgYWRkZWQgdG8gdGhlIHByb2R1Y3QmYXBvcztzIHBsdWdpbl9jdXN0b21pemF0aW9uLmluaSB2aWEgdGhlIHNldHRpbmc6Ci0KLSZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53cy9JRmlsZTJVcmlDb252ZXJ0ZXIgPSBbdmFsdWUgb2YgaWRdJmx0Oy9jb2RlJmd0OwotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iY29udmVydGVyIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSBJRmlsZSB0byBVUkkgY29udmVydGVyIHByb3ZpZGVkIGZvciB0aGlzIHByb2R1Y3QuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuYWwuY29udmVydGVyLkFic3RyYWN0SUZpbGUyVXJpQ29udmVydGVyOiIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtleHRlbnNpb24gcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzLmlmaWxlMnVyaWNvbnZlcnRlciZxdW90OyBpZD0mcXVvdDtjb20uZXhhbXBsZS5jb252ZXJ0ZXJwbHVnaW4uY29udmVydGVyZXh0ZW5zaW9uJnF1b3Q7Jmd0OwotICAmbHQ7Y29udmVydGVyIGNsYXNzPSZxdW90O2NvbS5leGFtcGxlLmNvbnZlcnRlcnBsdWdpbi5pbXBsLk15SUZpbGUyVXJpQ29udmVydGVyJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIEV4dGVuZGVycyBzaG91bGQgc3ViY2xhc3MgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29udmVydGVyL0Fic3RyYWN0SUZpbGUyVXJpQ29udmVydGVyJmx0Oy9jb2RlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL3dlYlNlcnZpY2VMb2NhdG9yLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zY2hlbWEvd2ViU2VydmljZUxvY2F0b3IuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5N2QwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zY2hlbWEvd2ViU2VydmljZUxvY2F0b3IuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3MiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cyIgaWQ9IndlYlNlcnZpY2VMb2NhdG9yIiBuYW1lPSJXZWIgU2VydmljZSBMb2NhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHByb3ZpZGVkIHRvIHJlZ2lzdGVyIGxvY2F0b3JzIHRoYXQgZXh0ZW5kIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuCi0gICAgICAgICBUaGVzZSBsb2NhdG9ycyBhcmUgdXNlZCBieSBXZWJTZXJ2aWNlRmluZGVyIHRvIGxvY2F0ZSBXZWIgc2VydmljZXMgZm9yIHRoZSBwdXJwb3NlIG9mIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhbGw+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VMb2NhdG9yIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VMb2NhdG9yQ2F0ZWdvcnkiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvYWxsPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlTG9jYXRvciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZSBmb3IgdGhlIGxvY2F0b3IgY2xhc3Mgd2hpY2ggZXh0ZW5kcyBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgc2hvcnQgbGFiZWwgdG8gaWRlbnRpZnkgdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwdXJwb3NlIG9mIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWNvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhbiBpY29uIHRoYXQgcmVwcmVzZW50cyB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYXRlZ29yeSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhIGNhdGVnb3J5IHRvIHdoaWNoIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yIHNob3VsZCBiZWxvbmcuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VMb2NhdG9yQ2F0ZWdvcnkiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY2F0ZWdvcnkgb2YgV2ViIFNlcnZpY2UgTG9jYXRvcnMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBzaG9ydCBsYWJlbCBmb3IgdGhlIGNhdGVnb3J5IG9mIFdlYiBTZXJ2aWNlIExvY2F0b3JzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F0ZWdvcnkgb2YgV2ViIFNlcnZpY2UgTG9jYXRvcnMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpY29uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGFuIGljb24gdGhhdCByZXByZXNlbnRzIHRoZSBjYXRlZ29yeSBvZiBXZWIgU2VydmljZSBMb2NhdG9ycy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYXRlZ29yeSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhIHBhcmVudCBjYXRlZ29yeSB1bmRlciB3aGljaCB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvcgotICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgc2hvdWxkIGJlIGdyb3VwZWQuIElmIGFic2VudCwgdGhlIGNhdGVnb3J5IGlzIGNvbnNpZGVyZWQKLSAgICAgICAgICAgICAgICAgIHRvIGJlIGEgcm9vdCBjYXRlZ29yeS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIEV4dGVuZGVycyBzaG91bGQgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yJmx0Oy9jb2RlJmd0Oy4gIFRoZSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHVzZXMgdGhpcyBleHRlbnNpb24gcG9pbnQgdG8gcmV0cmlldmUgYWxsIGxvY2F0b3JzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODAzNjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvV3N0V1NQbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotIyAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotIyAyMDA4MDQwMyAgIDIyNTQ4MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIEdldE1vbml0b3JDb21tYW5kCi0jCi1NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1I9SVdBQjAwMDFFIFVuYWJsZSB0byBtb25pdG9yIHBvcnQgezB9IG9mIHsxfS4KLQotIwotIyBXU0RMVXRpbGl0eQotIwotTVNHX1VOQUJMRV9UT19SRVNPTFZFX0hUVFA9Q291bGQgbm90IHJlc29sdmUgc2VydmljZSBkZWZpbml0aW9uIGh0dHA6Ly97MH0uICBTZXJ2aWNlIG1heSBub3QgYmUgcnVubmluZyBvbiB0aGUgc2VydmVyLgotTVNHX1VOQUJMRV9UT19SRVNPTFZFX1BMQVRGT1JNX1VSST1Db3VsZCBub3QgcGFyc2UgcGxhdGZvcm06L3Jlc291cmNlezB9LgotCi0jCi0jIFdTSUNvbXBsaWFuY2VVdGlscwotIwotSUdOT1JFX0xBQkVMPUlnbm9yZQotSUdOT1JFX0RFU0NSSVBUSU9OPUlnbm9yZSB0aGUgV1MtSSBub24tY29tcGxpYW5jZSBhbmQgY29udGludWUKLUlHTk9SRV9BTExfTEFCRUw9SWdub3JlIEFsbAotSUdOT1JFX0FMTF9ERVNDUklQVElPTj1BbHdheXMgaWdub3JlIHRoZSBXUy1JIG5vbi1jb21wbGlhbmNlIGFuZCBjb250aW51ZQotQ0FOQ0VMX0xBQkVMPUNhbmNlbAotQ0FOQ0VMX0RFU0NSSVBUSU9OPUNhbmNlbAotCi0jCi0jCVdTLUkgQ29tcGxpYW5jZSBNZXNzYWdlcwotIwotV1NJX1NTQlBfRVJST1I9WW91IGhhdmUgbWFkZSBhIGNob2ljZSB0aGF0IG1heSByZXN1bHQgaW4gYSBXZWIgc2VydmljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xIGFuZCBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wLiBZb3VyIGN1cnJlbnQgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2UgaXMgc2V0IHRvIHJlcXVpcmUgY29tcGxpYW5jZS4KLVdTSV9TU0JQX1dBUk5JTkc9WW91IGhhdmUgbWFkZSBhIGNob2ljZSB0aGF0IG1heSByZXN1bHQgaW4gYSBXZWIgc2VydmljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xIGFuZCBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wLiBEbyB5b3Ugd2lzaCB0byBpZ25vcmUgdGhpcyB3YXJuaW5nIGFuZCBjb250aW51ZT8KLVdTSV9TU0JQX0lOQ09NUExJQU5UX1JVTlRJTUU9VGhlIHNlbGVjdGVkIFdlYiBTZXJ2aWNlIHJ1bnRpbWUgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEgYW5kIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAuCi1XU0lfQVBfRVJST1I9WW91IGhhdmUgbWFkZSBhIGNob2ljZSB0aGF0IG1heSByZXN1bHQgaW4gYSBXZWIgc2VydmljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEF0dGFjaG1lbnQgUHJvZmlsZSAxLjAuIFlvdXIgY3VycmVudCBXZWIgc2VydmljZXMgcHJlZmVyZW5jZSBpcyBzZXQgdG8gcmVxdWlyZSBjb21wbGlhbmNlLgotV1NJX0FQX1dBUk5JTkc9WW91IGhhdmUgbWFkZSBhIGNob2ljZSB0aGF0IG1heSByZXN1bHQgaW4gYSBXZWIgc2VydmljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEF0dGFjaG1lbnQgUHJvZmlsZSAxLjAuIERvIHlvdSB3aXNoIHRvIGlnbm9yZSB0aGlzIHdhcm5pbmcgYW5kIGNvbnRpbnVlPwotV1NJX0FQX0lOQ09NUExJQU5UX1JVTlRJTUU9VGhlIHNlbGVjdGVkIFdlYiBTZXJ2aWNlIHJ1bnRpbWUgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlIDEuMC4KLQotCi0jCi0jIFdTRExDb3BpZXIgTWVzc2FnZXMKLSMKLU1TR19FUlJPUl9DT1BZX1dTREw9RmFpbGVkIHRvIGNvcHkgV1NETCAiezB9IiB0byAiezF9Ii4KLU1TR19FUlJPUl9UQVJHRVRfRk9MREVSX05PVF9TUEVDSUZJRUQ9QSB0YXJnZXQgZm9sZGVyIHdhcyBub3Qgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JiMjM4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdzdFdTUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXc3RXU1BsdWdpbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VOQUJMRV9UT19SRVNPTFZFX1BMQVRGT1JNX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfVU5BQkxFX1RPX1JFU09MVkVfSFRUUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUdOT1JFX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElHTk9SRV9BTExfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUdOT1JFX0FMTF9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9TU0JQX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9TU0JQX1dBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX1NTQlBfSU5DT01QTElBTlRfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfQVBfRVJST1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX0FQX1dBUk5JTkc7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9BUF9JTkNPTVBMSUFOVF9SVU5USU1FOwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DT1BZX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1RBUkdFVF9GT0xERVJfTk9UX1NQRUNJRklFRDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFdzdFdTUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0J1bmRsZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9CdW5kbGVVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzQ3MTZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0J1bmRsZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDEgICAxODQ1MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjI0MTQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBzY2VuYXJpb3MgYnJva2UgaW4gbGF0ZXN0IGJ1aWxkcyB3aXRoIEVxdWlub3ggcDIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlZlcnNpb247Ci0KLXB1YmxpYyBjbGFzcyBCdW5kbGVVdGlscwotewotCXN0YXRpYyBwdWJsaWMgVVJMIGdldFVSTEZyb21CdW5kbGUoIFN0cmluZyBidW5kbGVJZCwgU3RyaW5nIHBhdGggKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JewotCQlCdW5kbGUgICAgICBidW5kbGUgICAgID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCBidW5kbGVJZCApOwotCQlVUkwgICAgICAgICBpbnN0YWxsVVJMID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCVVSTCAgICAgICAgIGZpbGVVUkwgICAgPSBuZXcgVVJMKGluc3RhbGxVUkwsIHBhdGggKTsKLQotCQlyZXR1cm4gZmlsZVVSTDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYnVuZGxlSWQKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHBhdGggZm9yIHRoZSBKYXJyZWQgcGx1Z2luLiAgUmV0dXJucyBudWxsIGlmIHBhdGggbm90IGZvdW5kLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgSVBhdGggZ2V0SmFycmVkUGx1Z2luUGF0aChTdHJpbmcgYnVuZGxlSWQpIHsKLQkJSVBhdGggcmVzdWx0ID0gbnVsbDsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVJZCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlGaWxlIGZpbGUgPSBGaWxlTG9jYXRvci5nZXRCdW5kbGVGaWxlKGJ1bmRsZSk7Ci0JCQkJcmVzdWx0ID0gbmV3IFBhdGgoZmlsZS5nZXRDYW5vbmljYWxQYXRoKCkpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBpZ25vcmUsIHJldHVybiBudWxsCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYnVuZGxlSWQKLQkgKiBAcmV0dXJuIFRoZSB2ZXJzb2luIG9mIHRoZSBwbHVnaW4gd2l0aCB0aGF0IGJ1bmRsZSBJRAotCSAqLwotCXN0YXRpYyBwdWJsaWMgVmVyc2lvbiBnZXRWZXJzaW9uKFN0cmluZyBidW5kbGVJZCkgewotCQlWZXJzaW9uIHJlc3VsdCA9IG51bGw7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlSWQpOwotCQlTdHJpbmcgdmVyc2lvblN0cmluZyA9IChTdHJpbmcpIGJ1bmRsZS5nZXRIZWFkZXJzKCkuZ2V0KCJCdW5kbGUtVmVyc2lvbiIpOwotCQlyZXN1bHQgPSBuZXcgVmVyc2lvbih2ZXJzaW9uU3RyaW5nKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0hUVFBVdGlsaXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9IVFRQVXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjUxMTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0hUVFBVdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMjQgICAxNjc0ODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgSFRUUFV0aWxpdHkgewotCi0JcHVibGljIFN0cmluZyBoYW5kbGVSZWRpcmVjdChTdHJpbmcgdXJsU3RyaW5nKXsKLQkJVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQkJU3RyaW5nIHVybFJlZGlyZWN0ID0gdXJsU3RyaW5nOwotCQlpbnQgdGltZSA9IDA7Ci0JCXdoaWxlKHVybFJlZGlyZWN0IT0gbnVsbCl7Ci0JCQlpZiAodGltZSA9PSA2KSByZXR1cm4gdXJsUmVkaXJlY3Q7Ci0JCQl0cnl7Ci0JCQkJVVJMIHVybCA9IG5ldyBVUkwodXJsUmVkaXJlY3QpOwotCQkJCWNvbm4gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJCX1jYXRjaChFeGNlcHRpb24gZXhjKXsKLQkJCQlyZXR1cm4gdXJsUmVkaXJlY3Q7Ci0JCQl9Ci0JCQlpZiAoY29ubiBpbnN0YW5jZW9mIEh0dHBVUkxDb25uZWN0aW9uKQotCQkJCXsKLQkJCQlIdHRwVVJMQ29ubmVjdGlvbiBodHRwID0gKEh0dHBVUkxDb25uZWN0aW9uKSBjb25uOwotCQkJCWh0dHAuc2V0SW5zdGFuY2VGb2xsb3dSZWRpcmVjdHMoZmFsc2UpOwotCSAgICAgICAgIAotCQkJCXRyeXsKLQkJCQkJaW50IGNvZGUgPSBodHRwLmdldFJlc3BvbnNlQ29kZSgpOwotCQkJCQlpZiAoY29kZSA+PSAzMDAgJiYgY29kZSA8PSAzMDcgJiYgY29kZSAhPSAzMDYgJiYKLQkgICAgICAgIAkJCSBjb2RlICE9IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfTk9UX01PRElGSUVEKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgdXJsUmVkaXJlY3QyID0gY2hhbmdlU2xhc2goaHR0cC5nZXRIZWFkZXJGaWVsZCgiTG9jYXRpb24iKSk7Ci0JICAgICAgICAgICAJIAkJaWYgKHVybFJlZGlyZWN0MiA9PSBudWxsIHx8IHVybFJlZGlyZWN0LmVxdWFscyh1cmxSZWRpcmVjdDIpKSByZXR1cm4gdXJsUmVkaXJlY3Q7Ci0JICAgICAgICAgIAkgCQllbHNlIHVybFJlZGlyZWN0ID0gdXJsUmVkaXJlY3QyOwotCQkJCQl9ZWxzZSByZXR1cm4gdXJsUmVkaXJlY3Q7Ci0JCQkJCi0JCQkJCi0JCQkJfWNhdGNoKElPRXhjZXB0aW9uIGV4Yyl7Ci0JCQkJCXJldHVybiB1cmxSZWRpcmVjdDsgCi0JCQkJfQotCQkJfQotCQkJZWxzZSByZXR1cm4gdXJsUmVkaXJlY3Q7Ci0JCQl0aW1lKys7Ci0JCX0KLQkJcmV0dXJuIHVybFN0cmluZzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGNoYW5nZVNsYXNoKFN0cmluZyB1cmwpewotCQlTdHJpbmcgdGVtcCA9ICIiOwotCQl0cnl7Ci0JCQl0ZW1wID0gdXJsLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJfWNhdGNoKEV4Y2VwdGlvbiBleGMpewotCQkJcmV0dXJuIHVybDsKLQkJfQotCQlyZXR1cm4gdGVtcDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9MaXZlV1NETEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vTGl2ZVdTRExGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYzYwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9MaXZlV1NETEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExpdmVXU0RMRmlsdGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotICBwcml2YXRlIGJvb2xlYW4gZmluaXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIGxpdmVfOwotCi0gIHB1YmxpYyBMaXZlV1NETEZpbHRlcihTdHJpbmcgd3NkbFVSTCkKLSAgewotICAgIHdzZGxVUkxfID0gd3NkbFVSTDsKLSAgICBmaW5pc2hfID0gZmFsc2U7Ci0gICAgbGl2ZV8gPSBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFVSTF87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaCgpCi0gIHsKLSAgICByZXR1cm4gZmluaXNoXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETExpdmUoKQotICB7Ci0gICAgcmV0dXJuIGxpdmVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGxpdmVfID0gdmFsaWRhdGVXU0RMKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyb3dpbmcgZXhjZXB0aW9uICIgKyB0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICBsaXZlXyA9IGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgZmluaXNoXyA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlV1NETCgpIHRocm93cyBXU0RMRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gIAlXZWJTZXJ2aWNlc1BhcnNlckV4dCBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSTF8pOwotICAJU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsVVJMXyAiICsgd3NkbFVSTF8udG9TdHJpbmcoKSk7Ci0gICAgTWFwIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIEl0ZXJhdG9yIHNlcnZpY2VJdGVyYXRvciA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXJ2aWNlSXRlcmF0b3IgIiArIHNlcnZpY2VJdGVyYXRvci50b1N0cmluZygpKTsKLSAgICB3aGlsZSAoc2VydmljZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlzZXJ2aWNlSXRlcmF0b3IubmV4dCgpOwotICAgICAgTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgSXRlcmF0b3IgcG9ydEl0ZXJhdG9yID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChwb3J0SXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydClwb3J0SXRlcmF0b3IubmV4dCgpOwotICAgICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChleHRlbnNpYmlsaXR5RWxlbWVudHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgaWYgKChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB8fCAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL1dTRExVdGlsaXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9XU0RMVXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjE2MGM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL1dTRExVdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0vKioKLSAqIFV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIGEgd29ya3NwYWNlIFdTREwgZmlsZSByZXNvdXJjZS4KLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBXU0RMVXRpbGl0eSB7Ci0KLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uXyA9IG51bGw7Ci0JcHJvdGVjdGVkIElSZXNvdXJjZSByZXNvdXJjZV8gPSBudWxsOwotCXByb3RlY3RlZCBTdHJpbmcgc2VydmljZU5hbWVfID0gIiI7Ci0JcHJvdGVjdGVkIFVSTCB1cmxfID0gbnVsbDsKLQkKLQlwdWJsaWMgV1NETFV0aWxpdHkoSVJlc291cmNlIHJlcykKLQl7Ci0gCQlzdXBlcigpOwotCQlyZXNvdXJjZV8gPSByZXM7Ci0JCWJ1aWxkRGVmaW5pdGlvbigpOwkJCi0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGJ1aWxkRGVmaW5pdGlvbigpCi0JewkJCi0JCWlmIChyZXNvdXJjZV8uZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCSAgICB7ICAgICAgICAKLQkgICAgICAgIFN0cmluZyBleHQgPSByZXNvdXJjZV8uZ2V0RmlsZUV4dGVuc2lvbigpOwotCSAgICAgICAgU3RyaW5nIHJlc1BhdGggPSByZXNvdXJjZV8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCSAgICAgICAgaWYgKGV4dCAhPSBudWxsKQotCSAgICAgICAgewotCQkgICAgICAJCi0JCSAgICAgICAgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0JCSAgICAgIAkJCSAgICAgIAkKLQkJICAgICAgCXRyeSB7Ci0JCSAgICAgIAkJZGVmaW5pdGlvbl8gPSBwYXJzZXIuZ2V0V1NETERlZmluaXRpb24oInBsYXRmb3JtOiIgKyByZXNQYXRoKTsKLQkJICAgICAgCSAgIGlmIChkZWZpbml0aW9uXyA9PSBudWxsKXsJCSAgICAgIAkJICAgCi0JCSAgICAgIAkJIHRocm93IG5ldyBFeGNlcHRpb24oTkxTLmJpbmQoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfVU5BQkxFX1RPX1JFU09MVkVfUExBVEZPUk1fVVJJLCByZXNQYXRoKSk7CQkgICAgICAJCSAKLQkJICAgICAgCSAgIH0KLQkJICAgICAgCX0KLQkJICAgICAgCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCSAgICAgIAkJcmV0dXJuIGZhbHNlOwotCQkgICAgICAJfQotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZiAocmVzUGF0aC5pbmRleE9mKCc/JykgPiAwKSAgLy9kZXBsb3llZCByZXNvdXJjZQotCSAgICAgICAgewotCSAgICAgICAgCVdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlcigpOwotCQkgICAgICAJCQkgICAgICAJCi0JCSAgICAgIAl0cnkgewotCQkgICAgICAJCWRlZmluaXRpb25fID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uKCJodHRwOiIgKyByZXNQYXRoKTsKLQkJICAgICAgCSAgIGlmIChkZWZpbml0aW9uXyA9PSBudWxsKXsKLQkJICAgICAgCQkgdGhyb3cgbmV3IEV4Y2VwdGlvbihOTFMuYmluZChXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19VTkFCTEVfVE9fUkVTT0xWRV9IVFRQLCByZXNQYXRoKSk7CQkgICAgICAJCQotCi0JCSAgICAgIAkgICB9Ci0JCSAgICAgIAl9Ci0JCSAgICAgIAljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkgICAgICAJCXJldHVybiBmYWxzZTsKLQkJICAgICAgCX0KLQkgICAgICAgIH0KLQkgICAgfQotCQlzZXJ2aWNlTmFtZV8gPSAiIjsJCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyoqCi0JICogRGV0ZXJtaW5lcyB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMIGZpbGUKLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHdvcmtzcGFjZSByZXNvdXJjZSBmb3IgdGhlIFdTREwgZmlsZQotCSAqIEByZXR1cm4gUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIHNlcnZpY2UgZWxlbWVudCAKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VOYW1lKCkKLQl7Ci0JCWlmIChzZXJ2aWNlTmFtZV8uZXF1YWxzKCIiKSkKLQkJewotCQkJaWYgKGRlZmluaXRpb25fICE9IG51bGwpCi0JCQl7Ci0JCQkJICAgTWFwIHNlcnZpY2VzTWFwID0gZGVmaW5pdGlvbl8uZ2V0U2VydmljZXMoKTsgIC8vanZoIC0gbmVlZCB0byBoYW5kbGUgbnVsbCBkZWZpbml0aW9uIGhlcmUuLi4uCi0JCQkgIAkgICBPYmplY3RbXSBzZXJ2aWNlcyA9IHNlcnZpY2VzTWFwLnZhbHVlcygpLnRvQXJyYXkoKTsKLQkJCSAgCSAgIAotCQkJICAJICAgLy8gVE9ETzogaGVyZSBjYW4gZGV0ZWN0IGlmIG5vIHNlcnZpY2UgdGFnIC0gc2VuZCBhcHByb3ByaWF0ZSBtZXNzYWdlCi0JCQkgIAkgICAvLyBUT0RPOiB3aGF0IGlmID4gMSBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIFdTREw/Ci0JCQkgIAkgICAvLyBmb3Igbm93IHJldHVybiB0aGUgZmlyc3Qgc2VydmljZSBuYW1lIGZvdW5kLi4uCi0JCQkgIAkgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCSAgIFNlcnZpY2UgcyA9IChTZXJ2aWNlKXNlcnZpY2VzW2ldOwotCQkJCQkgICBTdHJpbmcgcVN0cmluZyA9IHMuZ2V0UU5hbWUoKS50b1N0cmluZygpOwotCQkJCQkgICAKLQkJCQkJICAgLy9nZXQgbmFtZSBvbmx5IGZyb20gcXVhbGlmaWVkIHN0cmluZwotCQkJCQkgICBpbnQgaW5kZXgxID0gcVN0cmluZy5pbmRleE9mKCJ9IikrMTsgIC8vJE5PTi1OTFMtMSQKLQkJCQkJICAgaW50IGluZGV4MiA9IHFTdHJpbmcubGVuZ3RoKCk7Ci0JCQkJCSAgIAotCQkJCQkgICBzZXJ2aWNlTmFtZV8gPSBxU3RyaW5nLnN1YnN0cmluZyhpbmRleDEsIGluZGV4Mik7CQkJCSAgIAotCQkJICAJICAgfSAgCQotCQkJfQkJCQkgIAotCQl9Ci0JICAJcmV0dXJuIHNlcnZpY2VOYW1lXzsKLQl9Ci0JCi0JcHVibGljIFVSTCBnZXRXU0RMQWRkcmVzcygpIAotICAgIHsKLQkgICBpZiAodXJsXyA9PSBudWxsKQotCSAgIHsJICAgCi0JICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IG51bGw7Ci0JICAgICAgIGlmIChkZWZpbml0aW9uXyAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgIAkgICBNYXAgc2VydmljZXNNYXAgPSBkZWZpbml0aW9uXy5nZXRTZXJ2aWNlcygpOwotCQkgIAkgICBPYmplY3RbXSBzZXJ2aWNlcyA9IHNlcnZpY2VzTWFwLnZhbHVlcygpLnRvQXJyYXkoKTsKLQkJICAJICAgCi0JCSAgCSAgIC8vIFRPRE86IGhlcmUgY2FuIGRldGVjdCBpZiBubyBzZXJ2aWNlIHRhZyAtIHNlbmQgYXBwcm9wcmlhdGUgbWVzc2FnZQotCQkgIAkgICAvLyBUT0RPOiB3aGF0IGlmID4gMSBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIFdTREw/Ci0JCSAgCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkgICBTZXJ2aWNlIHMgPSAoU2VydmljZSlzZXJ2aWNlc1tpXTsKLQkJCQkgICBNYXAgcG9ydHNNYXAgPSBzLmdldFBvcnRzKCk7Ci0JCQkJICAgT2JqZWN0W10gcG9ydHMgPSBwb3J0c01hcC52YWx1ZXMoKS50b0FycmF5KCk7Ci0JCQotCQkJCSAgIC8vIFRPRE86IGhlcmUgY2FuIGRldGVjdCBpZiA+IDEgcG9ydCBmb3IgdGhlIHNlcnZpY2UgLSBkZXRlcm1pbmUgaG93IHRvIGhhbmRsZQotCQkJCSAgIGZvciAoaW50IGogPSAwOyBqIDwgcG9ydHMubGVuZ3RoOyBqKyspIHsKLQkJCQkJCVBvcnQgcCA9IChQb3J0KXBvcnRzW2pdOwotCQkJCQkJTGlzdCBleHRMaXN0ID0gcC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQkJCQkJCQotCQkJCQkJZm9yIChpbnQgayA9IDA7IGogPCBleHRMaXN0LnNpemUoKTsgaisrKXsKLQkJCQkJCSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0TGlzdC5nZXQoayk7Ci0JCQkJCQkgICAgICBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotCQkJCQkJICAgICAgeyAgCi0JCQkJCQkgICAgICAgIGxvY2F0aW9uVVJJID0gKChTT0FQQWRkcmVzcylleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkJICAgICAgfQotCQkJCQkJICAgICAgZWxzZSBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotCQkJCQkJICAgICAgIHsKLQkJCQkJCSAgICAgICAgbG9jYXRpb25VUkkgPSAoKEhUVFBBZGRyZXNzKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7CQkJCQkJICAgICAgICAKLQkJCQkJCSAgICAgIH0KLQkJCQkJCSAgICAgIGVsc2UKLQkJCQkJCSAgICAgIHsKLQkJCQkJCSAgICAJICAvL1RPRE86IGlmIG5vdCBTT0FQIG9yIEhUVFAgLSBob3cgZG8gd2Ugd2FudCB0byBoYW5kbGUgaXQuLi4gCi0JCQkJCQkgICAgICB9Ci0JCQkJCQkgfQkJCQkJCi0JCQkJICAgfQotCQkgIAkgICB9ICAJCSAgICAJCi0JCSAgCSAKLQkJCSAgICB0cnkgewotCQkJICAgICAgICAgdXJsXyA9IG5ldyBVUkwobG9jYXRpb25VUkkgKyAiPyIgKyByZXNvdXJjZV8uZ2V0RmlsZUV4dGVuc2lvbigpKTsJICAgICAgICAgCi0JCQkgICAgfQotCQkJICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWFsRXhjKXt9Ci0gICAgICAgICAgICB9CSAgCQkgICAgICAKLQkgICAgfQotCSAgIHJldHVybiB1cmxfOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29udmVydGVyL0Fic3RyYWN0SUZpbGUyVXJpQ29udmVydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbnZlcnRlci9BYnN0cmFjdElGaWxlMlVyaUNvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2EyNjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29udmVydGVyL0Fic3RyYWN0SUZpbGUyVXJpQ29udmVydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwOTAzMTAgICAyNDI0NDAgeWVubHVAY2EuaWJtLmNvbSAtIFllbiBMdSwgUGx1Z2dhYmxlIElGaWxlIHRvIFVSSSBDb252ZXJ0ZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29udmVydGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci0KLS8qKgotICogPHA+Ci0gKiBUaGUgYWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgYW4gSUZpbGUgdG8gVVJJIGNvbnZlcnRlci4gQWRvcHRlcnMgd2hvIHdpc2ggdG8KLSAqIHByb3ZpZGUgdGhlaXIgb3duIGNvbnZlcnRlciBzaG91bGQgc3ViY2xhc3MgdGhpcyBhYnN0cmFjdCBjbGFzcyByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgSUlGaWxlMlVyaUNvbnZlcnRlci4gCi0gKgotICogQHNlZSBJSUZpbGUyVXJpQ29udmVydGVyCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdElGaWxlMlVyaUNvbnZlcnRlciBpbXBsZW1lbnRzIElJRmlsZTJVcmlDb252ZXJ0ZXIgewotCi0JcHVibGljIFN0cmluZyBjb252ZXJ0KElGaWxlIGZpbGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUoKQotCXsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbnZlcnRlci9JSUZpbGUyVXJpQ29udmVydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbnZlcnRlci9JSUZpbGUyVXJpQ29udmVydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYWQwNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb252ZXJ0ZXIvSUlGaWxlMlVyaUNvbnZlcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDkwMzEwICAgMjQyNDQwIHllbmx1QGNhLmlibS5jb20gLSBZZW4gTHUsIFBsdWdnYWJsZSBJRmlsZSB0byBVUkkgQ29udmVydGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbnZlcnRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotCi0vKioKLSAqIDxwPgotICogVGhlIGludGVyZmFjZSBmb3IgYW4gRWNsaXBzZSBJRmlsZSB0byBVUkkgY29udmVydGVyLiBBZG9wdGVycyBzaG91bGQKLSAqIHN1YmNsYXNzIEFic3RyYWN0SUZpbGUyVXJpQ29udmVydGVyIGluc3RlYWQuCi0gKiAKLSAqIEBzZWUgQWJzdHJhY3RJRmlsZTJVcmlDb252ZXJ0ZXIKLSAqLwotcHVibGljIGludGVyZmFjZSBJSUZpbGUyVXJpQ29udmVydGVyIHsKLQkvKioKLQkgKiA8cD4KLQkgKiBQcm9kdWNlIGEgU3RyaW5nIFVSSSBmcm9tIGEgZ2l2ZW4gSUZpbGUuIFRoZSBJRmlsZSBpcyBmcm9tIHRoZSB3b3JrYmVuY2guIElmIHRoaXMgbWV0aG9kIHJldHVybnMgbnVsbCwKLQkgKiB0aGUgcmVzdWx0IGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlIGFuZCB0aGUKLQkgKiB7QGxpbmsgI2FsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUgYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZX0gbWV0aG9kIHdpbGwgYmUgY29uc3VsdGVkIHRvIGRldGVybWluZQotCSAqIHdoZXRoZXIgb3Igbm90IGJhc2UgY29udmVyc2lvbiBzaG91bGQgYmUgdXNlZCBhcyBhIGJhY2t1cC4KLQkgKiBAcGFyYW0gZmlsZSBBbiBJRmlsZSByZWZlcmVuY2UuCi0JICogQHJldHVybiBUaGUgU3RyaW5nIFVSSSBjb3JyZXNwb25kaW5nIHRvIHRoZSBJRmlsZSByZWZlcmVuY2UuCi0JICogPHA+Ci0JICogQHNpbmNlIDMuMQotCSAqLwotCXB1YmxpYyBTdHJpbmcgY29udmVydChJRmlsZSBmaWxlKTsKLQkKLQkvKioKLQkgKiA8cD4KLQkgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29udmVydGVyIHdpbGwgYWxsb3cgYmFzZSBjb252ZXJzaW9uIHJvdXRpbmVzIHRvIGJlIHBlcmZvcm1lZAotCSAqIHdoZW4gYSBmYWlsdXJlIG9jY3Vycy4KLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGJhc2UgY29udmVyc2lvbiBzaG91bGQgYmUgcGVyZm9ybWVkIHdoZW4gYSBmYWlsdXJlIG9jY3Vycy4KLQkgKiA8cD4KLQkgKiBAc2luY2UgMy4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gYWxsb3dCYXNlQ29udmVyc2lvbk9uRmFpbHVyZSgpOwkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyOGQ2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhOwotCi1wdWJsaWMgY2xhc3MgTGFiZWxzQW5kSWRzCi17Ci0gIHByaXZhdGUgU3RyaW5nW10gbGFiZWxzXzsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBpZHNfOwotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaWRzXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRJZHNfKCkKLSAgewotICAgIHJldHVybiBpZHNfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gaWRzXyBUaGUgaWRzXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZHNfKFN0cmluZ1tdIGlkc18pCi0gIHsKLSAgICB0aGlzLmlkc18gPSBpZHNfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGxhYmVsc18uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0TGFiZWxzXygpCi0gIHsKLSAgICByZXR1cm4gbGFiZWxzXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGxhYmVsc18gVGhlIGxhYmVsc18gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGFiZWxzXyhTdHJpbmdbXSBsYWJlbHNfKQotICB7Ci0gICAgdGhpcy5sYWJlbHNfID0gbGFiZWxzXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNDb25uZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0Nvbm5lY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmMTJkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0Nvbm5lY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY0Nvbm5lY3Rpb24gaW1wbGVtZW50cyBDb25uZWN0aW9uCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBSZWwgZlJlbDsKLSAgcHJpdmF0ZSBFbGVtZW50IGZFbGVtZW50OwotICBwcml2YXRlIENvbm5lY3Rpb24gZk9wcG9zaW5nQ29ubmVjdGlvbjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVVRCT1VORCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQk9VTkQgPSAxOwotCi0gIHB1YmxpYyBzdGF0aWMgQ29ubmVjdGlvbltdIGNyZWF0ZVBhaXIgKCBSZWwgb3V0Ym91bmRSZWwsIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCwgUmVsIGluYm91bmRSZWwsIEVsZW1lbnQgc291cmNlRWxlbWVudCApCi0gIHsKLSAgICBCYXNpY0Nvbm5lY3Rpb24gb3V0Ym91bmRDb25uZWN0aW9uID0gbmV3IEJhc2ljQ29ubmVjdGlvbihvdXRib3VuZFJlbCx0YXJnZXRFbGVtZW50KTsKLSAgICBCYXNpY0Nvbm5lY3Rpb24gaW5ib3VuZENvbm5lY3Rpb24gPSBuZXcgQmFzaWNDb25uZWN0aW9uKGluYm91bmRSZWwsc291cmNlRWxlbWVudCk7Ci0gICAgb3V0Ym91bmRDb25uZWN0aW9uLmZPcHBvc2luZ0Nvbm5lY3Rpb24gPSBpbmJvdW5kQ29ubmVjdGlvbjsKLSAgICBpbmJvdW5kQ29ubmVjdGlvbi5mT3Bwb3NpbmdDb25uZWN0aW9uID0gb3V0Ym91bmRDb25uZWN0aW9uOwotICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbltdIHtvdXRib3VuZENvbm5lY3Rpb24saW5ib3VuZENvbm5lY3Rpb259OwotICB9Ci0KLSAgcHVibGljIEJhc2ljQ29ubmVjdGlvbiAoIFJlbCByZWwsIEVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICBmUmVsID0gcmVsOwotICAgIGZFbGVtZW50ID0gZWxlbWVudDsKLSAgICBmT3Bwb3NpbmdDb25uZWN0aW9uID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBSZWwgZ2V0UmVsICgpCi0gIHsKLSAgICByZXR1cm4gZlJlbDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldE9wcG9zaW5nQ29ubmVjdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIGZPcHBvc2luZ0Nvbm5lY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnQuZ2V0TmFtZSgpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZGZiOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY0VsZW1lbnQgaW1wbGVtZW50cyBFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGZNVUlEOwotICBwcml2YXRlIE1vZGVsIGZNb2RlbDsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZlJlbHM7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGZQcm9wZXJ0aWVzOwotICBwcml2YXRlIFZlY3RvciBmTGlzdGVuZXJzOwotCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgKCBTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIHNldE1VSUQobW9kZWwubWFrZU1VSUQobmFtZSkpOwotICAgIG1vZGVsLmFkZEVsZW1lbnQodGhpcyk7Ci0gICAgZk1vZGVsID0gbW9kZWw7Ci0gICAgZlJlbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZkxpc3RlbmVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmUHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmUHJvcGVydGllcy5wdXQoUHJvcGVydHkuTkFNRSxuZXcgQmFzaWNQcm9wZXJ0eShQcm9wZXJ0eS5OQU1FLGZOYW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgQmFzaWNFbGVtZW50ICggU3RyaW5nIG5hbWUsIEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG91dGJvdW5kUmVsTmFtZSwgU3RyaW5nIGluYm91bmRSZWxOYW1lICkKLSAgewotICAgIHRoaXMobmFtZSxlbGVtZW50LmdldE1vZGVsKCkpOwotICAgIGNvbm5lY3QoZWxlbWVudCxvdXRib3VuZFJlbE5hbWUsaW5ib3VuZFJlbE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgPGNvZGU+RWxlbWVudDwvY29kZT4KLSAgKiBvZiB0aGUgc2FtZSBjbGFzcyBhbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtb2RlbCwKLSAgKiBidXQgd2l0aCBubyBQcm9wZXJ0aWVzLCBSZWxzIG9yIExpc3RlbmVycyBleGNlcHQgZm9yCi0gICogdGhlIHtAbGluayBQcm9wZXJ0eSNOQU1FIE5BTUV9IHByb3BlcnR5LgotICAqIEByZXR1cm4gT2JqZWN0IEEgbmV3IEVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBFbGVtZW50IHNoYWxsb3dDbG9uZSAoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCYXNpY0VsZW1lbnQoZk5hbWUsZk1vZGVsKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYSBjbG9uZSBvZiB0aGlzIDxjb2RlPkVsZW1lbnQ8L2NvZGU+Ci0gICogb2YgdGhlIHNhbWUgY2xhc3MgYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgbW9kZWwKLSAgKiBhbmQgd2l0aCBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIEVsZW1lbnQncyBQcm9wZXJ0aWVzLgotICAqIFRoZSBSZWxzIGFuZCBMaXN0ZW5lcnMgYXJlIG5vdCBjbG9uZWQuCi0gICogQHJldHVybiBFbGVtZW50IEEgbmV3IEVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBFbGVtZW50IGRlZXBDbG9uZSAoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gc2hhbGxvd0Nsb25lKCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldFByb3BlcnRpZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IChQcm9wZXJ0eSllLm5leHRFbGVtZW50KCk7Ci0gICAgICBQcm9wZXJ0eSBuZXdQcm9wZXJ0eSA9IChQcm9wZXJ0eSlwcm9wZXJ0eS5zaGFsbG93Q2xvbmUoKTsKLSAgICAgIG5ld0VsZW1lbnQuc2V0UHJvcGVydHkobmV3UHJvcGVydHkpOwotICAgIH0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAqIE1vZGVsLVZpZXctQ29udHJvbGxlcjogQWxsIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlIG1vZGVsCi0gICogKHN1Y2ggYXMgdGhvc2UgbWFkZSBieSBhIHdpemFyZCBpbiB0aGUgcm9sZSBvZiBhIENvbnRyb2xsZXIpCi0gICogc2hvdWxkIHlpZWxkIGV2ZW50cyB0byB3aGljaCBhbiBpbnRlcmVzdGVkIHBhcnR5IGNhbiBsaXN0ZW4KLSAgKiAoc3VjaCBhcyBhIHdpemFyZCBpbiB0aGUgcm9sZSBvZiBhIFZpZXdlcikuCi0gICogQHBhcmFtIHRtbCBUaGUgbGlzdGVuZXIgdG8gYWRkLgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lciAoIEVsZW1lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBmTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgTW9kZWwgZ2V0TW9kZWwgKCkKLSAgewotICAgIHJldHVybiBmTW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkICgpCi0gIHsKLSAgICByZXR1cm4gKGZNb2RlbCAhPSBudWxsICYmIGZNb2RlbC5jb250YWluc0VsZW1lbnQodGhpcykpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlICgpCi0gIHsKLSAgICByZXR1cm4gZk1vZGVsLnJlbW92ZUVsZW1lbnQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZQcm9wZXJ0aWVzLnB1dChQcm9wZXJ0eS5OQU1FLG5ldyBCYXNpY1Byb3BlcnR5KFByb3BlcnR5Lk5BTUUsZk5hbWUpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIGZOYW1lOwotICB9Ci0KLSAgLyoKLSAgKiBUaGUgZ2V0dGVyIGZvciB0aGUgTVVJRAotICAqIFRoZSBNVUlEIGlzIHRoZSBNb2RlbCBVbmlxdWUgSWRlbnRpZmllciwgbWFkZSBmcm9tIHRoZSBuYW1lIGFuZCBhbgotICAqIGFwcGVuZGVkIHVuaXF1ZSBudW1iZXIgCi0gICogQHJldHVybiBTdHJpbmcgYSB1bmlxdWUgaWQgZm9yIHRoaXMgZWxlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1vZGVsIAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1VSUQoKQotICB7Ci0gICAgcmV0dXJuIGZNVUlEOwotICB9Ci0KLSAgLyoKLSAgKgotICAqCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVySUQoKQotICB7Ci0gICAgU3RyaW5nIG51bWJlciA9IGdldE1VSUQoKS5zdWJzdHJpbmcoZ2V0TmFtZSgpLmxlbmd0aCgpKTsgIAotICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KG51bWJlcik7Ci0gIH0KLQotICAvKgotICAqIFNldCB0aGUgTVVJRCB3aGljaCB3YXMgbWFkZSBieSB0aGUgbW9kZWwKLSAgKiBTaG91bGQgb25seSBiZSBzZXR0YWJsZSB3aXRoaW4gdGhpcyBlbGVtZW50Ci0gICogU2V0IG9uY2UgdXBvbiBjcmVhdGlvbiwgeW91IGNhbiBjaGFuZ2UgdGhlIG5hbWUKLSAgKiBidXQgdGhlIGlkIHdpbGwgcmVtYWluIGNvbnN0YW50LgotICAqLwotICBwcml2YXRlIHZvaWQgc2V0TVVJRChTdHJpbmcgTVVJRCkKLSAgewotICAgIGZNVUlEID0gTVVJRDsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eSAoIFByb3BlcnR5IHByb3BlcnR5ICkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5nZXROYW1lKCk7Ci0gICAgUHJvcGVydHkgb2xkUHJvcGVydHkgPSBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIGZQcm9wZXJ0aWVzLnB1dChwcm9wZXJ0eU5hbWUscHJvcGVydHkpOwotICAgIGlmIChvbGRQcm9wZXJ0eSA9PSBudWxsKQotICAgIHsKLSAgICAgIFByb3BlcnR5QWRkRXZlbnQgZXZlbnQgPSBuZXcgUHJvcGVydHlBZGRFdmVudCh0aGlzLHByb3BlcnR5KTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBmTGlzdGVuZXJzLmVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgKChFbGVtZW50TGlzdGVuZXIpZS5uZXh0RWxlbWVudCgpKS5wcm9wZXJ0eUFkZGVkKGV2ZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIE9iamVjdCBvbGRWYWx1ZSA9IG9sZFByb3BlcnR5LmdldFZhbHVlKCk7Ci0gICAgICBPYmplY3QgbmV3VmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZSgpOwotICAgICAgaWYgKG9sZFZhbHVlICE9IG5ld1ZhbHVlKQotICAgICAgewotICAgICAgICBpZiAob2xkVmFsdWUgPT0gbnVsbCB8fCBuZXdWYWx1ZSA9PSBudWxsIHx8ICghb2xkVmFsdWUuZXF1YWxzKG5ld1ZhbHVlKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50ID0gbmV3IFByb3BlcnR5Q2hhbmdlRXZlbnQodGhpcyxwcm9wZXJ0eSxvbGRQcm9wZXJ0eSk7Ci0gICAgICAgICAgRW51bWVyYXRpb24gZSA9IGZMaXN0ZW5lcnMuZWxlbWVudHMoKTsKLSAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAoKEVsZW1lbnRMaXN0ZW5lcillLm5leHRFbGVtZW50KCkpLnByb3BlcnR5Q2hhbmdlZChldmVudCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUuZXF1YWxzKFByb3BlcnR5Lk5BTUUpKSBmTmFtZSA9IHByb3BlcnR5LmdldFZhbHVlKCkudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5QXNPYmplY3QgKCBTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlICkKLSAgewotICAgIHNldFByb3BlcnR5KG5ldyBCYXNpY1Byb3BlcnR5KG5hbWUsdmFsdWUpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5QXNTdHJpbmcgKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlICkKLSAgewotICAgIHNldFByb3BlcnR5KG5ldyBCYXNpY1Byb3BlcnR5KG5hbWUsdmFsdWUpKTsKLSAgfQotCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRQcm9wZXJ0eSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIHJldHVybiAoUHJvcGVydHkpZlByb3BlcnRpZXMuZ2V0KG5hbWUpOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0ICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgUHJvcGVydHkgcHJvcGVydHkgPSBnZXRQcm9wZXJ0eShuYW1lKTsKLSAgICByZXR1cm4gKHByb3BlcnR5ID09IG51bGwgPyBudWxsIDogcHJvcGVydHkuZ2V0VmFsdWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5QXNTdHJpbmcgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KG5hbWUpOwotICAgIHJldHVybiAocHJvcGVydHkgPT0gbnVsbCA/IG51bGwgOiBwcm9wZXJ0eS5nZXRWYWx1ZUFzU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFByb3BlcnRpZXMgKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydGllcy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gY29ubmVjdCAoIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCwgU3RyaW5nIG91dGJvdW5kUmVsTmFtZSwgU3RyaW5nIGluYm91bmRSZWxOYW1lICkKLSAgewotICAgIGlmIChmTW9kZWwgPT0gbnVsbCB8fCBmTW9kZWwgIT0gdGFyZ2V0RWxlbWVudC5nZXRNb2RlbCgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBFbGVtZW50IHNvdXJjZUVsZW1lbnQgPSB0aGlzOwotICAgIFJlbCBvdXRib3VuZFJlbCA9IHNvdXJjZUVsZW1lbnQuZ2V0UmVsKG91dGJvdW5kUmVsTmFtZSk7Ci0gICAgUmVsIGluYm91bmRSZWwgPSB0YXJnZXRFbGVtZW50LmdldFJlbChpbmJvdW5kUmVsTmFtZSk7Ci0gICAgQ29ubmVjdGlvbltdIHBhaXIgPSBCYXNpY0Nvbm5lY3Rpb24uY3JlYXRlUGFpcihvdXRib3VuZFJlbCx0YXJnZXRFbGVtZW50LGluYm91bmRSZWwsc291cmNlRWxlbWVudCk7Ci0gICAgb3V0Ym91bmRSZWwuYWRkQ29ubmVjdGlvbihwYWlyW0Jhc2ljQ29ubmVjdGlvbi5PVVRCT1VORF0pOwotICAgIGluYm91bmRSZWwuYWRkQ29ubmVjdGlvbihwYWlyW0Jhc2ljQ29ubmVjdGlvbi5JTkJPVU5EXSk7Ci0gICAgUmVsQWRkRXZlbnQgZXZlbnQgPSBuZXcgUmVsQWRkRXZlbnQocGFpcik7Ci0gICAgRW51bWVyYXRpb24gZVNvdXJjZSA9IGdldExpc3RlbmVycygpOwotICAgIEVudW1lcmF0aW9uIGVUYXJnZXQgPSB0YXJnZXRFbGVtZW50LmdldExpc3RlbmVycygpOwotICAgIHdoaWxlIChlU291cmNlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgICgoRWxlbWVudExpc3RlbmVyKWVTb3VyY2UubmV4dEVsZW1lbnQoKSkucmVsQWRkZWQoZXZlbnQpOwotICAgIH0KLQotICAgIHdoaWxlIChlVGFyZ2V0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgICgoRWxlbWVudExpc3RlbmVyKWVUYXJnZXQubmV4dEVsZW1lbnQoKSkucmVsQWRkZWQoZXZlbnQpOwotICAgIH0KLQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0ICggRWxlbWVudCB0YXJnZXRFbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lICkKLSAgewotICAgIHJldHVybiBkaXNjb25uZWN0KHRhcmdldEVsZW1lbnQsZ2V0UmVsKG91dGJvdW5kUmVsTmFtZSkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdFJlbCAoIFN0cmluZyBvdXRib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGRpc2Nvbm5lY3RSZWwoZ2V0UmVsKG91dGJvdW5kUmVsTmFtZSkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdEFsbCAoKQotICB7Ci0gICAgaWYgKGZNb2RlbCA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZSZWxzLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgUmVsIHJlbCA9IChSZWwpZS5uZXh0RWxlbWVudCgpOwotICAgICAgZGlzY29ubmVjdFJlbChyZWwpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRFbGVtZW50cyAoIFN0cmluZyByZWxOYW1lICkKLSAgewotICAgIHJldHVybiBnZXRSZWwocmVsTmFtZSkuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZFbGVtZW50cyAoIFN0cmluZyByZWxOYW1lICkKLSAgewotICAgIHJldHVybiBnZXRSZWwocmVsTmFtZSkuZ2V0TnVtYmVyT2ZUYXJnZXRFbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIFJlbCBnZXRSZWwgKCBTdHJpbmcgcmVsTmFtZSApCi0gIHsKLSAgICBSZWwgcmVsID0gKFJlbClmUmVscy5nZXQocmVsTmFtZSk7Ci0gICAgaWYgKHJlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlbCA9IG5ldyBCYXNpY1JlbChyZWxOYW1lLHRoaXMpOwotICAgICAgZlJlbHMucHV0KHJlbE5hbWUscmVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlbDsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRSZWxzICgpCi0gIHsKLSAgICByZXR1cm4gZlJlbHMuZWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRMaXN0ZW5lcnMoKQotICB7Ci0gICAgcmV0dXJuIGZMaXN0ZW5lcnMuZWxlbWVudHMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGRpc2Nvbm5lY3QgKCBFbGVtZW50IHRhcmdldEVsZW1lbnQsIFJlbCBvdXRib3VuZFJlbCApCi0gIHsKLSAgICBpZiAoZk1vZGVsID09IG51bGwgfHwgZk1vZGVsICE9IHRhcmdldEVsZW1lbnQuZ2V0TW9kZWwoKSB8fCBvdXRib3VuZFJlbCA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgQ29ubmVjdGlvbiBvdXRib3VuZENvbm5lY3Rpb24gPSBvdXRib3VuZFJlbC5nZXRDb25uZWN0aW9uVG8odGFyZ2V0RWxlbWVudCk7Ci0gICAgaWYgKG91dGJvdW5kQ29ubmVjdGlvbiA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgQ29ubmVjdGlvbiBpbmJvdW5kQ29ubmVjdGlvbiA9IG91dGJvdW5kQ29ubmVjdGlvbi5nZXRPcHBvc2luZ0Nvbm5lY3Rpb24oKTsKLSAgICBSZWxSZW1vdmVFdmVudCBldmVudCA9IG5ldyBSZWxSZW1vdmVFdmVudChuZXcgQ29ubmVjdGlvbiBbXSB7b3V0Ym91bmRDb25uZWN0aW9uLGluYm91bmRDb25uZWN0aW9ufSk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZkxpc3RlbmVycy5lbGVtZW50cygpOwotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgICgoRWxlbWVudExpc3RlbmVyKWUubmV4dEVsZW1lbnQoKSkucmVsUmVtb3ZlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICBFbnVtZXJhdGlvbiBlVGFyZ2V0ID0gdGFyZ2V0RWxlbWVudC5nZXRMaXN0ZW5lcnMoKTsKLSAgICB3aGlsZSAoZVRhcmdldC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICAoKEVsZW1lbnRMaXN0ZW5lcillVGFyZ2V0Lm5leHRFbGVtZW50KCkpLnJlbFJlbW92ZWQoZXZlbnQpOwotICAgIH0KLQotICAgIFJlbCBpbmJvdW5kUmVsID0gaW5ib3VuZENvbm5lY3Rpb24uZ2V0UmVsKCk7Ci0gICAgYm9vbGVhbiBkb25lID0gb3V0Ym91bmRSZWwucmVtb3ZlQ29ubmVjdGlvbihvdXRib3VuZENvbm5lY3Rpb24pOwotICAgIGluYm91bmRSZWwucmVtb3ZlQ29ubmVjdGlvbihpbmJvdW5kQ29ubmVjdGlvbik7Ci0gICAgcmV0dXJuIGRvbmU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBkaXNjb25uZWN0UmVsICggUmVsIG91dGJvdW5kUmVsICkKLSAgewotICAgIGlmIChmTW9kZWwgPT0gbnVsbCB8fCBvdXRib3VuZFJlbCA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudFtdIGVsZW1lbnRzID0gbmV3IEVsZW1lbnRbb3V0Ym91bmRSZWwuZ2V0TnVtYmVyT2ZUYXJnZXRFbGVtZW50cygpXTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgRW51bWVyYXRpb24gZSA9IG91dGJvdW5kUmVsLmdldFRhcmdldEVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgZWxlbWVudHNbaSsrXSA9IChFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICB9Ci0gICAgd2hpbGUgKGktLSA+IDApCi0gICAgewotICAgICAgZGlzY29ubmVjdChlbGVtZW50c1tpXSxvdXRib3VuZFJlbCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKQotICB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY01vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY01vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZDIwNjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQmFzaWNNb2RlbCBpbXBsZW1lbnRzIE1vZGVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGZFbGVtZW50czsKLSAgcHJpdmF0ZSBFbGVtZW50IGZSb290OwotICAvL1RoaXMgaXMgdXNlZCBieSB0aGUgTVVJRAotICBwcml2YXRlIGludCBmVW5pcXVlTnVtYmVyQ291bnRlcjsKLQotICBwdWJsaWMgQmFzaWNNb2RlbCAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgICBmRWxlbWVudHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZlJvb3QgPSBudWxsOwotICAgIGZVbmlxdWVOdW1iZXJDb3VudGVyID0gMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBmTmFtZTsKLSAgfQotCi0KLSAgLyoKLSAgKiBzaW1wbGUgY291bnRlciB0aGF0IGluY3JlbWVudHMgZWFjaCBjYWxsIAotICAqLwotICBwdWJsaWMgaW50IGdldFVuaXF1ZU51bWJlcigpCi0gIHsKLSAgICBmVW5pcXVlTnVtYmVyQ291bnRlcisrOwotICAgIHJldHVybiBmVW5pcXVlTnVtYmVyQ291bnRlcjsKLSAgfQotCi0gIC8qCi0gICogVGhpcyB3aWxsIHVzZSBhIHVuaXF1ZSBudW1iZXIgYW5kIGFwcGVuZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBuYW1lIAotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBvZiB0aGUgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIE1VSUQKLSAgKi8KLSAgcHVibGljIFN0cmluZyBtYWtlTVVJRChTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBudW0gPSBTdHJpbmcudmFsdWVPZihnZXRVbmlxdWVOdW1iZXIoKSk7Ci0gICAgU3RyaW5nIG11aWQgPSBuYW1lICsgbnVtOwotICAgIHJldHVybiBtdWlkOwotICB9Ci0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRSb290RWxlbWVudCAoIEVsZW1lbnQgcm9vdCApCi0gIHsKLSAgICBpZiAocm9vdC5nZXRNb2RlbCgpID09IG51bGwpCi0gICAgICBhZGRFbGVtZW50KHJvb3QpOwotICAgIGVsc2UgaWYgKHJvb3QuZ2V0TW9kZWwoKSAhPSB0aGlzKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZSb290ID0gcm9vdDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGdldFJvb3RFbGVtZW50ICgpCi0gIHsKLSAgICBpZiAoZlJvb3QgPT0gbnVsbCkgZlJvb3QgPSBnZXRGaXJzdEVsZW1lbnQoKTsKLSAgICByZXR1cm4gZlJvb3Q7Ci0gIH0KLQotCi0gIC8qKgotICAqIEdldCB0aGUgZWxlbWVudHMgdGhhdCBoYXZlIHRoaXMgbmFtZQotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCAKLSAgKiBAcmV0dXJuIFZlY3RvciBhIHZlY3RvciBvZiBlbGVtZW50cyB0aGF0IGhhdmUgdGhpcyBuYW1lCi0gICogVGhlc2UgZWxlbWVudHMgbWF5IGJlIG9mIGRpZmZlcmVudCB0eXBlcwotICAqKi8KLQotICBwdWJsaWMgVmVjdG9yIGdldEVsZW1lbnRzQnlOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZkVsZW1lbnRzLmtleXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHZlY3Rvci5hZGRFbGVtZW50KGVsZW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gdmVjdG9yOwotICB9Ci0KLSAKLQotICBwdWJsaWMgYm9vbGVhbiBhZGRFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE1vZGVsKCkgIT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIGZFbGVtZW50cy5wdXQoZWxlbWVudCxlbGVtZW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUVsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TW9kZWwoKSAhPSB0aGlzKSByZXR1cm4gZmFsc2U7Ci0gICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgaWYgKGZSb290ID09IGVsZW1lbnQpIGZSb290ID0gbnVsbDsKLSAgICByZXR1cm4gKGZFbGVtZW50cy5yZW1vdmUoZWxlbWVudCkgPT0gZWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudHMuZWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50cy5zaXplKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0VsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50cy5jb250YWlucyhlbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXRGaXJzdEVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cygpOwotICAgIHJldHVybiAoZS5oYXNNb3JlRWxlbWVudHMoKSA/IChFbGVtZW50KWUubmV4dEVsZW1lbnQoKSA6IG51bGwpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKQotICB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1Byb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1Byb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNGMzZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotcHVibGljIGNsYXNzIEJhc2ljUHJvcGVydHkgaW1wbGVtZW50cyBQcm9wZXJ0eQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZOYW1lOwotICBwcml2YXRlIE9iamVjdCBmVmFsdWU7Ci0KLSAgcHVibGljIEJhc2ljUHJvcGVydHkgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgQmFzaWNQcm9wZXJ0eSAoIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZWYWx1ZSA9IHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyA8Y29kZT5Qcm9wZXJ0eTwvY29kZT4uCi0gICogUHJvcGVydHkga2V5IGFuZCB2YWx1ZSByZWZlcmVuY2VzIGFyZSBjbG9uZWQsCi0gICogYnV0IHRoZSB2YWx1ZSBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIG5vdCBjbG9uZWQuCi0gICogQHJldHVybiBQcm9wZXJ0eSBBIG5ldyBQcm9wZXJ0eS4KLSAgKi8KLSAgcHVibGljIFByb3BlcnR5IHNoYWxsb3dDbG9uZSAoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCYXNpY1Byb3BlcnR5KGZOYW1lLGZWYWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBmTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFZhbHVlICggT2JqZWN0IHZhbHVlICkKLSAgewotICAgIGZWYWx1ZSA9IHZhbHVlOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRWYWx1ZSAoKQotICB7Ci0gICAgcmV0dXJuIGZWYWx1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFZhbHVlQXNTdHJpbmcgKCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgZlZhbHVlID0gdmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlQXNTdHJpbmcgKCkKLSAgewotICAgIHJldHVybiAoZlZhbHVlICE9IG51bGwgPyBmVmFsdWUudG9TdHJpbmcoKSA6IG51bGwpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUmVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1JlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDVmMDg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUmVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQmFzaWNSZWwgaW1wbGVtZW50cyBSZWwKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFN0cmluZyBmTmFtZTsKLSAgcHJpdmF0ZSBFbGVtZW50IGZTb3VyY2VFbGVtZW50OwotICBwcml2YXRlIFZlY3RvciBmQ29ubmVjdGlvbnM7Ci0KLSAgcHVibGljIEJhc2ljUmVsICggU3RyaW5nIG5hbWUsIEVsZW1lbnQgc291cmNlRWxlbWVudCApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgZlNvdXJjZUVsZW1lbnQgPSBzb3VyY2VFbGVtZW50OwotICAgIGZDb25uZWN0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIGZOYW1lOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0U291cmNlRWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZTb3VyY2VFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFRhcmdldEVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEVsZW1lbnRFbnVtZXJhdGlvbihmQ29ubmVjdGlvbnMuZWxlbWVudHMoKSk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mVGFyZ2V0RWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBmQ29ubmVjdGlvbnMuc2l6ZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbiAoIENvbm5lY3Rpb24gY29ubmVjdGlvbiApCi0gIHsKLSAgICBmQ29ubmVjdGlvbnMuYWRkRWxlbWVudChjb25uZWN0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUNvbm5lY3Rpb24gKCBDb25uZWN0aW9uIGNvbm5lY3Rpb24gKQotICB7Ci0gICAgcmV0dXJuIGZDb25uZWN0aW9ucy5yZW1vdmVFbGVtZW50KGNvbm5lY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvblRvICggRWxlbWVudCB0YXJnZXRFbGVtZW50ICkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBmQ29ubmVjdGlvbnMuZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBDb25uZWN0aW9uIGMgPSAoQ29ubmVjdGlvbillLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAoYy5nZXRFbGVtZW50KCkgPT0gdGFyZ2V0RWxlbWVudCkgcmV0dXJuIGM7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKQotICB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgRWxlbWVudEVudW1lcmF0aW9uIGltcGxlbWVudHMgRW51bWVyYXRpb24KLSAgewotICAgIHByaXZhdGUgRW51bWVyYXRpb24gZkNvbm5lY3Rpb25FbnVtZXJhdGlvbjsKLQotICAgIHB1YmxpYyBFbGVtZW50RW51bWVyYXRpb24gKCBFbnVtZXJhdGlvbiBjb25uZWN0aW9uRW51bWVyYXRpb24gKQotICAgIHsKLSAgICAgIGZDb25uZWN0aW9uRW51bWVyYXRpb24gPSBjb25uZWN0aW9uRW51bWVyYXRpb247Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzTW9yZUVsZW1lbnRzICgpCi0gICAgewotICAgICAgcmV0dXJuIGZDb25uZWN0aW9uRW51bWVyYXRpb24uaGFzTW9yZUVsZW1lbnRzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBuZXh0RWxlbWVudCAoKQotICAgIHsKLSAgICAgIHJldHVybiAoKENvbm5lY3Rpb24pZkNvbm5lY3Rpb25FbnVtZXJhdGlvbi5uZXh0RWxlbWVudCgpKS5nZXRFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Nvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Nvbm5lY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNkY2Y2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Db25uZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIGEgY29ubmVjdGlvbiB0aGF0IHRpZXMgYSBSZWwgdG8gYSBOb2RlLgotKiBOb3JtYWxseSBDb25uZWN0aW9uIG9iamVjdHMgYXJlIG1hbnVmYWN0dXJlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlCi0qIGRlcml2ZWQgY2xhc3NlcyBvZiB0aGUgTW9kZWwgZnJhbWV3b3JrLCBhbmQgYXJlIG5vdCBtYW5pcHVsYXRlZCBieQotKiB0aGUgY2FsbGVyIGRpcmVjdGx5LgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29ubmVjdGlvbgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIFJlbCB0aGF0IG93bnMgdGhpcyBjb25uZWN0aW9uLgotICAqIEByZXR1cm4gUmVsIFRoZSBSZWwgdGhhdCBvd25zIHRoaXMgY29ubmVjdGlvbi4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwsIHRoYXQgaXMsIGEgQ29ubmVjdGlvbgotICAqIGNhbm5vdCBleGlzdCB3aXRob3V0IGEgUmVsIHRvIG93biBpdC4KLSAgKi8KLSAgcHVibGljIFJlbCBnZXRSZWwgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgTm9kZSB0aGF0IHRoaXMgY29ubmVjdGlvbiBwb2ludHMgdG8uCi0gICogQHJldHVybiBOb2RlIFRoZSBOb2RlIHRoaXMgY29ubmVjdGlvbiBwb2ludHMgdG8uCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLCB0aGF0IGlzLCBhIENvbm5lY3Rpb24KLSAgKiBjYW5ub3QgZXhpc3Qgd2l0aG91dCBhIE5vZGUgdG8gcG9pbnQgdG8uCi0gICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgb3Bwb3NpbmcgY29ubmVjdGlvbiB0byB0aGlzIGNvbm5lY3Rpb24uCi0gICogQ29ubmVjdGlvbiBvYmplY3RzIGFsd2F5cyBleGlzdCBpbiBwYWlycywgdGhhdCBpcywKLSAgKiBpZiBub2RlICJQYXJlbnQiIGhhcyBhIHJlbGF0aW9uc2hpcCBuYW1lZCAiQ2hpbGRyZW4iCi0gICogY29udGFpbmluZyBhIGNvbm5lY3Rpb24gdG8gbm9kZSAiQ2hpbGQiLCB0aGVuIHRoZXJlCi0gICogbXVzdCBleGlzdCBhbiBvcHBvc2luZyBjb25uZWN0aW9uIGZyb20gIkNoaWxkIiB0bwotICAqICJQYXJlbnQiIGluIHNvbWUgcmVsYXRpb25zaGlwIG9mICJDaGlsZCIgKGZvciBleGFtcGxlLAotICAqIGluIGEgcmVsYXRpb25zaGlwIGNhbGxlZCAiUGFyZW50cyIpLgotICAqIEByZXR1cm4gQ29ubmVjdGlvbiBUaGUgb3Bwb3NpbmcgY29ubmVjdGlvbi4KLSAgKiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIHJldHVybiBudWxsLgotICAqIEl0IG1heSBvbmx5IHJldHVybiBudWxsIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhlIHBhaXIKLSAgKiBvZiBjb25uZWN0aW9ucy4KLSAgKi8KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0T3Bwb3NpbmdDb25uZWN0aW9uICgpOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MDU3YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyBmb3IgZWxlbWVudHMgdGhhdCBjYW4gYmUgbWFuYWdlZCBieSBhIE1vZGVsLgotKiBFdmVyeSBlbGVtZW50IGhhcyBhIG5hbWUsIGEgc2V0IG9mIHByb3BlcnRpZXMsIGFuZCBhIHNldCBvZiByZWxhdGlvbnNoaXBzCi0qIHRvIG90aGVyIGVsZW1lbnRzLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFJldHVybnMgYSBjbG9uZSBvZiB0aGlzIDxjb2RlPkVsZW1lbnQ8L2NvZGU+Ci0gICogb2YgdGhlIHNhbWUgY2xhc3MgYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgbW9kZWwsCi0gICogYnV0IHdpdGggbm8gUHJvcGVydGllcywgUmVscyBvciBMaXN0ZW5lcnMgZXhjZXB0IGZvcgotICAqIHRoZSB7QGxpbmsgUHJvcGVydHkjTkFNRSBOQU1FfSBwcm9wZXJ0eS4KLSAgKiBAcmV0dXJuIE9iamVjdCBBIG5ldyBFbGVtZW50LgotICAqLwotICBwdWJsaWMgRWxlbWVudCBzaGFsbG93Q2xvbmUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgPGNvZGU+RWxlbWVudDwvY29kZT4KLSAgKiBvZiB0aGUgc2FtZSBjbGFzcyBhbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtb2RlbAotICAqIGFuZCB3aXRoIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgRWxlbWVudCdzIFByb3BlcnRpZXMuCi0gICogVGhlIFJlbHMgYW5kIExpc3RlbmVycyBhcmUgbm90IGNsb25lZC4KLSAgKiBAcmV0dXJuIEVsZW1lbnQgQSBuZXcgRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgZGVlcENsb25lICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG1vZGVsIHRoaXMgZWxlbWVudCBiZWxvbmdzIHRvLCBvciBudWxsIGlmIHRoZSBlbGVtZW50Ci0gICogaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGEgbW9kZWwuIFNlZSBhbHNvIHtAbGluayAjaXNWYWxpZCBpc1ZhbGlkKCl9LgotICAqIEByZXR1cm4gTW9kZWwgVGhlIG1vZGVsIHRoaXMgZWxlbWVudCBiZWxvbmdzIHRvLCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8gYSBtb2RlbC4KLSAgKiBTZWUgYWxzbyB7QGxpbmsgI2dldE1vZGVsIGdldE1vZGVsKCl9LgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgZWxlbWVudCBiZWxvbmdzIHRvIGEgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQgKCk7Ci0KLSAgLyoqCi0gICogUmVtb3ZlcyB0aGlzIGVsZW1lbnQgZnJvbSB0aGUgbW9kZWwgdG8gd2hpY2ggaXQgY3VycmVudGx5IGJlbG9uZ3MuCi0gICogQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwge0BsaW5rICNnZXRNb2RlbCBnZXRNb2RlbCgpfSB3aWxsIHJldHVybgotICAqIG51bGwgYW5kIHtAbGluayAjaXNWYWxpZCBpc1ZhbGlkKCl9IHdpbGwgcmV0dXJuIGZhbHNlLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBlbGVtZW50IHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tCi0gICogaXRzIG1vZGVsLiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGJlbG9uZwotICAqIHRvIGFueSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlICgpOwotCi0gIC8qKgotICAqIFNldHMgdGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50IGFuZCB1cGRhdGVzIHRoZSAibmFtZSIgcHJvcGVydHkuCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byBzZXROYW1lKCkuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50LgotICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lICggU3RyaW5nIG5hbWUgKTsKLQotICAvKioKLSAgKgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lciAoIEVsZW1lbnRMaXN0ZW5lciBsaXN0ZW5lciApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50LgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIEFkZHMgb3Igc2V0cyBhIHByb3BlcnR5IG9mIHRoaXMgZWxlbWVudC4KLSAgKiBQcm9wZXJ0aWVzIHNldCB1c2luZyB0aGlzIG1ldGhvZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGVpdGhlcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHkgZ2V0UHJvcGVydHkoKX0gb3IKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5QXNPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCgpfS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEFueSBwcmV2aW91cyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgcmVwbGFjZWQuCi0gICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBzZXQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5ICggUHJvcGVydHkgcHJvcGVydHkgKTsKLQotICAvKioKLSAgKiBBZGRzIG9yIHNldHMgYSBwcm9wZXJ0eSBvZiB0aGlzIGVsZW1lbnQuCi0gICogUHJvcGVydGllcyBzZXQgdXNpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBlaXRoZXIKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5IGdldFByb3BlcnR5KCl9IG9yCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eUFzT2JqZWN0IGdldFByb3BlcnR5QXNPYmplY3QoKX0uCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBBbnkgcHJldmlvdXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIHJlcGxhY2VkLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuCi0gICogQHBhcmFtIHZhbHVlIFRoZSBPYmplY3QgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc09iamVjdCAoIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUgKTsKLQotICAvKioKLSAgKiBBZGRzIG9yIHNldHMgYSBTdHJpbmcgcHJvcGVydHkgb2YgdGhpcyBlbGVtZW50LgotICAqIFByb3BlcnRpZXMgc2V0IHVzaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgZWl0aGVyCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eSBnZXRQcm9wZXJ0eSgpfSwKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5QXNPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCgpfSBvcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHlBc1N0cmluZyBnZXRQcm9wZXJ0eUFzU3RyaW5nKCl9LgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQW55IHByZXZpb3VzIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSBpcyByZXBsYWNlZC4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LgotICAqIEBwYXJhbSB2YWx1ZSBUaGUgU3RyaW5nIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5QXNTdHJpbmcgKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBuYW1lIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byByZXR1cm4uCi0gICogQHJldHVybiBQcm9wZXJ0eSBUaGUgcHJvcGVydHksIG9yIG51bGwgaWYgbm9uZS4KLSAgKi8KLSAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5ICggU3RyaW5nIG5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBPYmplY3QgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gbmFtZSBvciBudWxsCi0gICogaWYgdGhlcmUgaXMgbm9uZS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byByZXR1cm4uCi0gICogQHJldHVybiBPYmplY3QgVGhlIHByb3BlcnR5IHZhbHVlIGFzIGFuIE9iamVjdCwgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5QXNPYmplY3QgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBuYW1lIG9yIG51bGwKLSAgKiBpZiB0aGVyZSBpcyBub25lLgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHVybi4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgcHJvcGVydHkgdmFsdWUgYXMgYSBTdHJpbmcsIG9yIG51bGwgaWYgbm9uZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eUFzU3RyaW5nICggU3RyaW5nIG5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBwcm9wZXJ0aWVzIG9mIHRoaXMgZWxlbWVudC4KLSAgKiBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHByb3BlcnR5IHRoYXQgY2FycmllcyB0aGUKLSAgKiBuYW1lIG9mIHRoaXMgZWxlbWVudCAoc2VlIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9KS4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIEFuIGVudW1lcmF0aW9uIG9mIGFsbCBwcm9wZXJ0aWVzIG9mIHRoaXMgZWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFByb3BlcnRpZXMgKCk7Ci0KLSAgLyoqCi0gICogQ3JlYXRlcyBhIGJpZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBlbGVtZW50IGFuZCBhbm90aGVyLgotICAqIEJvdGggcmVsYXRpb25zaGlwcyBhcmUgaWRlbnRpZmllZCBieSBuYW1lcy4gVGhlIG5hbWVzIG9mIGFsbCB0aGUKLSAgKiBvdXRib3VuZCByZWxhdGlvbnNoaXBzIG9mIGEgZWxlbWVudCBtdXN0IGJlIG11dHVhbGx5IHVuaXF1ZS4KLSAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjb25uZWN0IHRvLgotICAqIEBwYXJhbSBvdXRib3VuZFJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCB0byBjb250YWluIHRoZQotICAqIGNvbm5lY3Rpb24gdG8gdGhlIGVsZW1lbnQuCi0gICogQHBhcmFtIGluYm91bmRSZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAgdG8gY29udGFpbiB0aGUKLSAgKiBpbnZlcnNlIGNvbm5lY3Rpb24gYmFjayB0byB0aGlzIGVsZW1lbnQuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuCi0gICogQm90aCBlbGVtZW50cyBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBtb2RlbCwgb3RoZXIgZmFsc2UgaXMgcmV0dXJuZWQuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGNvbm5lY3QgKCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUsIFN0cmluZyBpbmJvdW5kUmVsTmFtZSApOwotCi0gIC8qKgotICAqIERpc21hbnRsZXMgdGhlIGNvbm5lY3Rpb24gdG8gYW5vdGhlciBlbGVtZW50IGluIGEgZ2l2ZW4gcmVsYXRpb25zaGlwLgotICAqIFRoZSBpbnZlcnNlIGNvbm5lY3Rpb24gaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGRpc21hbnRsZWQuCi0gICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gZGlzY29ubmVjdCBmcm9tLgotICAqIEBwYXJhbSBvdXRib3VuZFJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCBjb250YWluaW5nCi0gICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGVsZW1lbnQuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCi0gICogQm90aCBlbGVtZW50cyBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBtb2RlbCwgb3RoZXIgZmFsc2UgaXMgcmV0dXJuZWQuCi0gICogSWYgdGhlIGVsZW1lbnRzIGFyZSBub3QgY29ubmVjdGVkIHRocm91Z2ggdGhlIGdpdmVuIHJlbGF0aW9uc2hpcCwgdGhlbgotICAqIGZhbHNlIGlzIHJldHVybmVkLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0ICggRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogRGlzbWFudGxlcyB0aGUgY29ubmVjdGlvbiB0byBhbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGUgaW52ZXJzZSBjb25uZWN0aW9ucyBhcmUgYWxzbyBhdXRvbWF0aWNhbGx5IGRpc21hbnRsZWQuCi0gICogQHBhcmFtIG91dGJvdW5kUmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGFsbCBjb25uZWN0aW9ucyBhcmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBiZWxvbmcgdG8gYSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdFJlbCAoIFN0cmluZyBvdXRib3VuZFJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBEaXNtYW50bGVzIGFsbCBjb25uZWN0aW9ucyBmcm9tIHRoaXMgZWxlbWVudC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBhbGwgY29ubmVjdGlvbnMgYXJlIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgotICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgYmVsb25nIHRvIGEgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3RBbGwgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgZWxlbWVudHMKLSAgKiBjb25uZWN0ZWQgdGhydSB0aGUgZ2l2ZW4gcmVsYXRpb25zaGlwLgotICAqIEBwYXJhbSByZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBUaGUgZWxlbWVudHMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRFbGVtZW50cyAoIFN0cmluZyByZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBnaXZlbiByZWxhdGlvbnNoaXAuCi0gICogQHBhcmFtIHJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLgotICAqLwotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRMaXN0ZW5lcnMoKTsKLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mRWxlbWVudHMgKCBTdHJpbmcgcmVsTmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHJlbGF0aW9uc2hpcCBvYmplY3Qgb2YgdGhlIGdpdmVuIG5hbWUuCi0gICogQHBhcmFtIHJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIGludCBUaGUgcmVsYXRpb25zaGlwLiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0gICogSW4gb3RoZXIgd29yZHMsIGFueSByZWZlcmVuY2UgdG8gYSByZWxhdGlvbnNoaXAgbmFtZSBhdXRvbWF0aWNhbGx5Ci0gICogYnJpbmdzIGEgY29ycmVzcG9uZGluZyBSZWwgb2JqZWN0IGludG8gZXhpc3RlbmNlLiBDYXJlbGVzcyBuYW1pbmcKLSAgKiBtYXkgcmVzdWx0IGluIHRoZSB7QGxpbmsgI2dldFJlbHMgZ2V0UmVscygpfSBtZXRob2QgcmV0dXJuaW5nIGFuIGVudW1lcmF0aW9uIG9mCi0gICogbW9yZSByZWxhdGlvbnNoaXBzIHRoYW4gd291bGQgYmUgbWVhbmluZ2Z1bCwgZWZmaWNpZW50IG9yIHVzZWZ1bC4KLSAgKi8KLSAgcHVibGljIFJlbCBnZXRSZWwgKCBTdHJpbmcgcmVsTmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIGtub3duIHJlbGF0aW9uc2hpcHMuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBUaGUgb3V0Ym91bmQgcmVsYXRpb25zaGlwcyBvZiB0aGUgZWxlbWVudC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRSZWxzICgpOwotCi0KLSAgLyoKLSAgKiBUaGVyZSBpcyBhIG5lZWQgc29tZXRpbWVzIGZvciBlYWNoIGVsZW1lbnQgaW4gYSBtb2RlbCB0byBoYXZlIGEgdW5pcXVlIGlkZW50aWZpZXIuCi0gICogTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBsZWZ0IHRvIGEgbmFtZSwgYnV0IHNpbmNlIHRoZSBlbGVtZW50IG1ha2VyIGdpdmVzIGl0IGl0cyBuYW1lCi0gICogdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBhIG1vZGVsIGNvdWxkIGhhdmUgdHdvIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZS4gSWYgdGhleSAKLSAgKiBhcmUgdGhlIHNhbWUgZWxlbWVudCB0eXBlIHRoZW4gdGhlcmUgd291bGQgYmUgbm8gd2F5IHRvIGRpZmZlcmVuY2lhdGUgYmV0d2VlbiB0aGUgdHdvLgotICAqIFRoZSBmb2xsb3dpbmcgZ2V0dGVyIGFuZCBzZXR0ZXIgd2lsbCBwcm92aWRlIGEgdW5pcXVlIGlkZW50aWZpZXIuIFRoaXMgaWRlbnRpZmllciB3aWxsIGJlIGtub3duIAotICAqIGFzIHRoZSBtdWlkIG9yIE1vZGVsIFVuaXF1ZSBJZGVudGlmaWVyLiBVbmxpa2UgYSB1dWlkIGl0IHdpbGwgb25seSBiZSBhc3N1cmVkIHVuaXF1ZW5lc3MgCi0gICogd2l0aGluIGl0cyBvd24gbW9kZWwuIFRoZSBpbnRlbnRpb24gaXMgdG8gdXNlIGEgdW5pcXVlIG51bWJlciBhcHBlbmRlZCB0byB0aGUgZW5kIAotICAqIG9mIHRoZSBuYW1lLgotICAqIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGdldHRlcgotICAqIEByZXR1cm4gU3RyaW5nIHRoZSB1bmlxdWUgaWRlbnRpZmllcgotICAqLwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TVVJRCgpOwotICAKLSAgCi0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudEFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliYzE3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIFRoaXMgaXMgd2hlcmUgd2Ugc3RvcmUgYWxsIHRoZSBzdGF0ZSBkYXRhIHRoYXQgdmFyaW91cyBVSXMKLSogKHN1Y2ggYXMgdGhlIE5ld1dTRExDcmVhdGlvbldpemFyZCkgY2FwdHVyZSBmcm9tIHRoZSB1c2VyCi0qIGFuZCB0aGVuIG5lZWQgdG8gcHJvY2Vzcy4KLSovCi1wdWJsaWMgY2xhc3MgRWxlbWVudEFkYXB0ZXIgaW1wbGVtZW50cyBFbGVtZW50TGlzdGVuZXIKLXsKLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUFkZGVkICggUHJvcGVydHlBZGRFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaW4gdGhlIG1vZGVsIGNoYW5nZXMuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHksIG9sZCB2YWx1ZQotICAqIGFuZCBuZXcgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZCAoIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQgKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGluIHRoZSBtb2RlbCBpcyByZW1vdmVkLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCBvbGQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5UmVtb3ZlZCAoIFByb3BlcnR5UmVtb3ZlRXZlbnQgZXZlbnQgKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbEFkZGVkICggUmVsQWRkRXZlbnQgZXZlbnQgKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQgKCBSZWxSZW1vdmVFdmVudCBldmVudCApCi0gIHsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50TGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDA5NmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIFRoaXMgaXMgd2hlcmUgd2Ugc3RvcmUgYWxsIHRoZSBzdGF0ZSBkYXRhIHRoYXQgdmFyaW91cyBVSXMKLSogKHN1Y2ggYXMgdGhlIE5ld1dTRExDcmVhdGlvbldpemFyZCkgY2FwdHVyZSBmcm9tIHRoZSB1c2VyCi0qIGFuZCB0aGVuIG5lZWQgdG8gcHJvY2Vzcy4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIEVsZW1lbnRMaXN0ZW5lcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlBZGRlZCAoIFByb3BlcnR5QWRkRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGluIHRoZSBtb2RlbCBjaGFuZ2VzLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5LCBvbGQgdmFsdWUKLSAgKiBhbmQgbmV3IHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQgKCBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50ICk7Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpbiB0aGUgbW9kZWwgaXMgcmVtb3ZlZC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgb2xkIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eVJlbW92ZWQgKCBQcm9wZXJ0eVJlbW92ZUV2ZW50IGV2ZW50ICk7Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCByZWxBZGRlZCAoIFJlbEFkZEV2ZW50IGV2ZW50ICk7Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkICggUmVsUmVtb3ZlRXZlbnQgZXZlbnQgKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvTW9kZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL01vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTVkZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvTW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyBmb3IgYSBzaW1wbGUgZGF0YSBtb2RlbCBjb25zaXN0aW5nIG9mCi0qIGEgbmV0d29yayBvZiBuYW1lZCBub2RlcyAoY2xhc3MgTm9kZSkuIEV2ZXJ5IG5vZGUgY2FycmllcyBhIHNldAotKiBvZiBuYW1lZCBwcm9wZXJ0aWVzIChjbGFzcyBQcm9wZXJ0eSkuIE5vZGVzIGFyZSBpbnRlcnJlbGF0ZWQgYnkKLSogcmVsYXRpb25zaGlwcyAoY2xhc3MgUmVsKSBhbmQgY29ubmVjdGlvbnMgKGNsYXNzIENvbm5lY3Rpb24pLgotKiBFYWNoIE1vZGVsIGtlZXBzIGEgcmVnaXN0cnkgb2YgYWxsIG9mIGl0cyBub2RlcywgYW5kIGtlZXBzIGEKLSogcmVmZXJlbmNlIHRvIG9uZSAicm9vdCIgbm9kZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgc3RhcnRpbmcKLSogcG9pbnQgZm9yIG5hdmlnYXRpb24uCi0qLwotcHVibGljIGludGVyZmFjZSBNb2RlbAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIG1vZGVsLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZSAoIFN0cmluZyBuYW1lICk7Ci0KLSAgLyoqCi0gICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgbW9kZWwuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUgb2YgdGhlIG1vZGVsLiBUaGlzIG11c3Qgbm90IGJlIG51bGwuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotICAvKioKLSAgKiBTZXRzIGEgbm9kZSBhcyB0aGUgcm9vdCBvZiB0aGUgbW9kZWwuIElmIHRoZSBub2RlIGRvZXMgbm90Ci0gICogYmVsb25nIHRvIGEgbW9kZWwsIHRoZW4gaXQgaXMgYWRkZWQgYXV0b21hdGljYWxseS4gSWYgdGhlCi0gICogbm9kZSBhbHJlYWR5IGJlbG9uZ3MgdG8gYW5vdGhlciBtb2RlbCwgdGhlbiB0aGUgcm9vdCBub2RlCi0gICogaXMgbm90IHNldCBhbmQgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICogQHBhcmFtIHJvb3QgVGhlIG5vZGUgdG8gc2V0IGFzIHRoZSByb290LiBUaGUgbm9kZSBtdXN0Ci0gICogYmVsb25nIGVpdGhlciB0byB0aGlzIG1vZGVsIG9yIHRvIG5vIG1vZGVsLiBUaGlzIG11c3QKLSAgKiBub3QgYmUgbnVsbC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgbm9kZSB3YXMgc2V0IGFzIHRoZSByb290LgotICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGdpdmVuIG5vZGUgYWxyZWFkeSBiZWxvbmdzCi0gICogdG8gYW5vdGhlciBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gc2V0Um9vdEVsZW1lbnQgKCBFbGVtZW50IHJvb3QgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSByb290IG5vZGUuIFRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIGEgbm9kZQotICAqIGV4Y2VwdCBvbiBhbiBlbXB0eSBNb2RlbC4gSWYgc2V0Um9vdE5vZGUoKSBoYXMgbm90IGJlZW4KLSAgKiBjYWxsZWQsIG9yIGlmIHRoZSBsYXN0IHJvb3Qgbm9kZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBtb2RlbCwKLSAgKiB0aGVuIHRoZSBtZXRob2Qgd2lsbCBzZWxlY3QgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgbm9kZSBhcwotICAqIHRoZSByb290LiBUaGlzIG1ldGhvZCB3aWxsIGNvbnNpc3RlbnRseSByZXR1cm4gdGhlIHNhbWUgbm9kZQotICAqIHVudGlsIGVpdGhlcgotICAqIChhKSBzZXRSb290Tm9kZSgpIGlzIGNhbGxlZCB3aXRoIGEgZGlmZmVyZW50IG5vZGUgb3IKLSAgKiAoYikgcmVtb3ZlTm9kZSgpIGlzIGNhbGxlZCB0byByZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgbW9kZWwuCi0gICogQHJldHVybiBOb2RlIFRoZSBjdXJyZW50IHJvb3Qgbm9kZSwgb3IgbnVsbCBpZiB0aGUgbW9kZWwgaXMgZW1wdHkuCi0gICovCi0KLSAgcHVibGljIEVsZW1lbnQgZ2V0Um9vdEVsZW1lbnQgKCk7Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBlbGVtZW50cyB0aGF0IGhhdmUgdGhpcyBuYW1lCi0gICogQHBhcmFtIFN0cmluZyBuYW1lIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IAotICAqIEByZXR1cm4gVmVjdG9yIGEgdmVjdG9yIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGlzIG5hbWUKLSAgKiBUaGVzZSBlbGVtZW50cyBtYXkgYmUgb2YgZGlmZmVyZW50IHR5cGVzCi0gICoqLwotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0RWxlbWVudHNCeU5hbWUoU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIEFkZHMgYSBub2RlIHRvIHRoZSBtb2RlbC4gSWYgdGhlIG5vZGUgYWxyZWFkeSBiZWxvbmdzIHRvIGFub3RoZXIKLSAgKiBtb2RlbCB0aGVuIGl0IHdpbGwgbm90IGJlIGFkZGVkLgotICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRvIGFkZC4gVGhpcyBtdXN0IG5vdCBiZSBudWxsLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBub2RlIHdhcyBhZGRlZCBzdWNjZXNzZnVsbHkuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZ2l2ZW4gbm9kZSBhbHJlYWR5IGJlbG9uZ3MgdG8KLSAgKiB0aGUgY3VycmVudCBtb2RlbCBvciB0byBhbm90aGVyIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBhZGRFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICk7Ci0KLSAgLyoqCi0gICogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgbW9kZWwuCi0gICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gcmVtb3ZlLiBUaGlzIG11c3Qgbm90IGJlIG51bGwuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIG5vZGUgd2FzIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgotICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGdpdmVuIG5vZGUgZG9lcyBub3QgYmVsb25nCi0gICogdG8gdGhpcyBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIG5vZGVzIGluIHRoZSBtb2RlbCBhbmQgaW4gbm8KLSAgKiBwYXJ0aWN1bGFyIG9yZGVyLAotICAqIEByZXR1cm4gRW51bWVyYXRpb24gQW4gZW51bWVyYXRpb24gb2YgYWxsIG5vZGVzIGluIHRoZSBtb2RlbC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRFbGVtZW50cyAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIG1vZGVsLgotICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIG1vZGVsLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJPZkVsZW1lbnRzICgpOwotCi0gIC8qKgotICAqIERldGVybWluZXMgaWYgdGhpcyBtb2RlbCBjb250YWlucyB0aGUgZ2l2ZW4gbm9kZS4KLSAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBjaGVjayBmb3IuIFRoaXMgbXVzdCBub3QgYmUgbnVsbC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgbW9kZWwgY29udGFpbnMgdGhlIG5vZGUuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApOwotCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIG5leHQgbnVtYmVyIGluIHRoZSBxdWV1ZSBmb3IgdGhlIE1VSUQKLSAgKgotICAqLwotICBwdWJsaWMgaW50IGdldFVuaXF1ZU51bWJlcigpOwotCi0gIC8qCi0gICogaGVyZXMgd2hhdCB3ZSBjYWxsIGZyb20gdGhlIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIFN0cmluZyBtYWtlTVVJRChTdHJpbmcgbmFtZSk7Ci0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzZDIxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBwcm9wZXJ0aWVzIG9mIGEgTm9kZS4KLSogRXZlcnkgcHJvcGVydHkgaGFzIGFuIGltbXV0YWJsZSBuYW1lIGFuZCBhIHZhbHVlIG9mIHR5cGUgT2JqZWN0LgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHkKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBFdmVyeSBOb2RlIGhhcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgdGhhdCBpcyBlcXVpdmFsZW50Ci0gICogdG8gYW5kIGtlcHQgc3luY2hyb25pemVkIHdpdGggTm9kZS5nZXROYW1lKCkgYW5kIE5vZGUuc2V0TmFtZSgpLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gIm5hbWUiOwotCi0gIC8qKgotICAqIFJldHVybnMgYSBzaGFsbG93IGNsb25lIG9mIHRoaXMgPGNvZGU+UHJvcGVydHk8L2NvZGU+LgotICAqIFByb3BlcnR5IGtleSBhbmQgdmFsdWUgcmVmZXJlbmNlcyBhcmUgY2xvbmVkLAotICAqIGJ1dCB0aGUgdmFsdWUgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBub3QgY2xvbmVkLgotICAqIEByZXR1cm4gUHJvcGVydHkgQSBuZXcgUHJvcGVydHkuCi0gICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBzaGFsbG93Q2xvbmUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIG5vZGUuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUgb2YgdGhpcyBub2RlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4KLSAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4gQW55IHByZXZpb3VzIHZhbHVlIGlzIHJlcGxhY2VkLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoIE9iamVjdCB2YWx1ZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuCi0gICogQHJldHVybiBPYmplY3QgVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHksIHBvc3NpYmx5IG51bGwuCi0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0VmFsdWUgKCk7Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBhcyBhIHN0cmluZy4KLSAgKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyB0byBzZXQuIEFueSBwcmV2aW91cyB2YWx1ZSBpcyByZXBsYWNlZC4KLSAgKiBUaGUgdHlwZSBvZiB0aGUgcHJldmlvdXMgdmFsdWUsIGlmIGFueSwgaXMgb2Ygbm8gY29uc2VxdWVuY2UuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbHVlQXNTdHJpbmcgKCBTdHJpbmcgdmFsdWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFzIGEgc3RyaW5nLgotICAqIEByZXR1cm4gU3RyaW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFzIGEgc3RyaW5nLCBwb3NzaWJseSBudWxsLgotICAqIElmIHRoZSBzZXQgdmFsdWUgaXMgYW4gYXJiaXRyYXJ5IE9iamVjdCwgdGhlbiBPYmplY3QudG9TdHJpbmcoKSBpcwotICAqIHJldHVybmVkLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlQXNTdHJpbmcgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUFkZEV2ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUFkZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMjdjYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlBZGRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIENhcnJpZXMgZGF0YSByZWxldmFudCB0byB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eUFkZEV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQmFzaWNFbGVtZW50IGZFbGVtZW50OwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZQcm9wZXJ0eTsKLQotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnR5J3MgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHlBZGRFdmVudCAoIEJhc2ljRWxlbWVudCBlbGVtZW50LCBQcm9wZXJ0eSBwcm9wZXJ0eSkKLSAgewotICAgIGZFbGVtZW50ID0gZWxlbWVudDsKLSAgICBmUHJvcGVydHkgPSBwcm9wZXJ0eTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCB0aGF0IGNoYW5nZWQgKHRoYXQgcHJvZHVjZWQgdGhpcyBldmVudCkuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgQmFzaWNFbGVtZW50IGdldEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5ICgpCi0gIHsKLSAgICByZXR1cm4gZlByb3BlcnR5OwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5Q2hhbmdlRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5Q2hhbmdlRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJmMDEzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUNoYW5nZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyBjaGFuZ2VkIGluIHRoZSBtb2RlbC4KLSovCi1wdWJsaWMgY2xhc3MgUHJvcGVydHlDaGFuZ2VFdmVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIEJhc2ljRWxlbWVudCBmRWxlbWVudDsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSdzIG9sZCB2YWx1ZS4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZPbGRQcm9wZXJ0eTsKLQotICAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBvbGRWYWx1ZSBUaGUgcHJvcGVydHkncyBvbGQgdmFsdWUuCi0gICAqIEBwYXJhbSBuZXdWYWx1ZSBUaGUgcHJvcGVydHkncyBuZXcgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHlDaGFuZ2VFdmVudCAoIEJhc2ljRWxlbWVudCBlbGVtZW50ICwgUHJvcGVydHkgcHJvcGVydHksIFByb3BlcnR5IG9sZFByb3BlcnR5ICkKLSAgewotICAgIGZFbGVtZW50ID0gZWxlbWVudDsKLSAgICBmUHJvcGVydHkgPSBwcm9wZXJ0eTsKLSAgICBmT2xkUHJvcGVydHkgPSBvbGRQcm9wZXJ0eTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCB0aGF0IGNoYW5nZWQgKHRoYXQgcHJvZHVjZWQgdGhpcyBldmVudCkuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgQmFzaWNFbGVtZW50IGdldEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgcHJvcGVydHkncyBvbGQgdmFsdWUuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBwcm9wZXJ0eSdzIG9sZCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRPbGRQcm9wZXJ0eSAoKQotICB7Ci0gICAgcmV0dXJuIGZPbGRQcm9wZXJ0eTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eVJlbW92ZUV2ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eVJlbW92ZUV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MWExODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlSZW1vdmVFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIENhcnJpZXMgZGF0YSByZWxldmFudCB0byB3aGVuIGEgcHJvcGVydHkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtb2RlbC4KLSovCi1wdWJsaWMgY2xhc3MgUHJvcGVydHlSZW1vdmVFdmVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIEJhc2ljRWxlbWVudCBmRWxlbWVudDsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkgdGhhdCB3YXMgcmVtb3ZlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZQcm9wZXJ0eTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgd2FzIHJlbW92ZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvcGVydHkncyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eVJlbW92ZUV2ZW50ICggQmFzaWNFbGVtZW50IGVsZW1lbnQsIFByb3BlcnR5IHByb3BlcnR5KQotICB7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZQcm9wZXJ0eSA9IHByb3BlcnR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHRoYXQgY2hhbmdlZCAodGhhdCBwcm9kdWNlZCB0aGlzIGV2ZW50KS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5IHRoYXQgd2FzIHJlbW92ZWQuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyByZW1vdmVkLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5ICgpCi0gIHsKLSAgICByZXR1cm4gZlByb3BlcnR5OwotICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiMjkyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyBmb3IgcmVsYXRpb25zaGlwcyBpbiBhIE1vZGVsLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIHJlbGF0aW9uc2hpcC4gUmVsYXRpb25zaGlwIG5hbWVzCi0gICogY2Fubm90IGJlIGNoYW5nZWQuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5vZGUgdGhhdCBvd25zIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gTm9kZSBUaGUgbm9kZSB0aGF0IG93bnMgdGhpcyByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLCB0aGF0IGlzLCByZWxhdGlvbnNoaXBzCi0gICogY2Fubm90IGV4aXN0IGluIHRoZSBhYnNlbmNlIG9mIGEgbm9kZS4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0U291cmNlRWxlbWVudCgpOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIG5vZGVzIGluIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gVGhlIG5vZGVzIGluIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFRhcmdldEVsZW1lbnRzICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzICgpOwotCi0gIC8qKgotICAqIEFkZHMgYSBjb25uZWN0aW9uIHRvIHRoaXMgcmVsYXRpb25zaGlwLiBUaGlzIG1ldGhvZCBpcwotICAqIGludGVuZGVkIGZvciB1c2UgYnkgZGVyaXZhdGlvbnMgb2YgdGhlIE1vZGVsIGZyYW1ld29yaywKLSAgKiBub3QgYnkgdXNlcnMgb2YgdGhlIGZyYW1ld29yay4gQ29ubmVjdGlvbiBvYmplY3RzIHNob3VsZAotICAqIG9ubHkgYmUgY29uc3RydWN0ZWQsIGFkZGVkLCByZW1vdmVkIGFuZCByZXRyaWV2ZWQgYnkKLSAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIE5vZGUgYW5kIFJlbCBpbnRlcmZhY2VzLgotICAqIEBwYXJhbSBjb25uZWN0aW9uIFRoZSBjb25uZWN0aW9uIHRvIGFkZC4KLSAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbiAoIENvbm5lY3Rpb24gY29ubmVjdGlvbiApOwotCi0gIC8qKgotICAqIFJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gdGhpcyByZWxhdGlvbnNoaXAuIFRoaXMgbWV0aG9kIGlzCi0gICogaW50ZW5kZWQgZm9yIHVzZSBieSBkZXJpdmF0aW9ucyBvZiB0aGUgTW9kZWwgZnJhbWV3b3JrLAotICAqIG5vdCBieSB1c2VycyBvZiB0aGUgZnJhbWV3b3JrLiBDb25uZWN0aW9uIG9iamVjdHMgc2hvdWxkCi0gICogb25seSBiZSBjb25zdHJ1Y3RlZCwgYWRkZWQsIHJlbW92ZWQgYW5kIHJldHJpZXZlZCBieQotICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTm9kZSBhbmQgUmVsIGludGVyZmFjZXMuCi0gICogQHBhcmFtIGNvbm5lY3Rpb24gVGhlIGNvbm5lY3Rpb24gdG8gcmVtb3ZlLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbiAoIENvbm5lY3Rpb24gY29ubmVjdGlvbiApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIENvbm5lY3Rpb24gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gdGFyZ2V0IG5vZGUuCi0gICogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBkZXJpdmF0aW9ucyBvZiB0aGUgTW9kZWwKLSAgKiBmcmFtZXdvcmssIG5vdCBieSB1c2VycyBvZiB0aGUgZnJhbWV3b3JrLiBDb25uZWN0aW9uIG9iamVjdHMKLSAgKiBzaG91bGQgb25seSBiZSBjb25zdHJ1Y3RlZCwgYWRkZWQsIHJlbW92ZWQgYW5kIHJldHJpZXZlZCBieQotICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTm9kZSBhbmQgUmVsIGludGVyZmFjZXMuCi0gICogQHBhcmFtIHRhcmdldE5vZGUgVGhlIG5vZGUgdG8gZmluZCB0aGUgQ29ubmVjdGlvbiB0by4KLSAgKiBAcmV0dXJuIENvbm5lY3Rpb24gVGhlIGNvbm5lY3Rpb24sIG9yIG51bGwgaWYgbm9uZS4KLSAgKi8KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvblRvICggRWxlbWVudCB0YXJnZXRFbGVtZW50ICk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbEFkZEV2ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxBZGRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2NjNDllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbEFkZEV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIENhcnJpZXMgZGF0YSByZWxldmFudCB0byB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBSZWxBZGRFdmVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIENvbm5lY3Rpb24gZk91dEJvdW5kOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIENvbm5lY3Rpb24gZkluQm91bmQ7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvcGVydHkncyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBSZWxBZGRFdmVudCAoQ29ubmVjdGlvbltdIHBhaXIpCi0gIHsKLSAgICAgZk91dEJvdW5kID0gcGFpcltCYXNpY0Nvbm5lY3Rpb24uT1VUQk9VTkRdOwotICAgICBmSW5Cb3VuZCA9IHBhaXJbQmFzaWNDb25uZWN0aW9uLklOQk9VTkRdOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG91dGJvdW5kIGNvbm5lY3Rpb24gdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0T3V0Qm91bmRDb25uZWN0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsIG5hbWUgCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldE91dEJvdW5kUmVsTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldFJlbCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbAotICAqKi8KLSAgcHVibGljIFJlbCBnZXRPdXRCb3VuZFJlbCgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldFJlbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsIG5hbWUgCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldEluQm91bmRSZWxOYW1lKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRSZWwoKS5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwKLSAgKiovCi0gIHB1YmxpYyBSZWwgZ2V0SW5Cb3VuZFJlbCgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0UmVsKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3V0Ym91bmQgZWxlbWVudCB0aGF0IGNoYW5nZWQgCi0gICoqLwotICBwdWJsaWMgRWxlbWVudCBnZXRQYXJlbnRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldEVsZW1lbnQoKTsKLSAgfQotCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5ib3VuZCBjb25uZWN0aW9uIHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBFbGVtZW50IGdldENoaWxkRWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldEVsZW1lbnQoKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxSZW1vdmVFdmVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsUmVtb3ZlRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5YTZiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxSZW1vdmVFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFJlbFJlbW92ZUV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBmT3V0Qm91bmQ7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBmSW5Cb3VuZDsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFJlbFJlbW92ZUV2ZW50IChDb25uZWN0aW9uW10gcGFpcikKLSAgewotICAgICBmT3V0Qm91bmQgPSBwYWlyW0Jhc2ljQ29ubmVjdGlvbi5PVVRCT1VORF07Ci0gICAgIGZJbkJvdW5kID0gcGFpcltCYXNpY0Nvbm5lY3Rpb24uSU5CT1VORF07Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgdGhhdCBjaGFuZ2VkICh0aGF0IHByb2R1Y2VkIHRoaXMgZXZlbnQpLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0T3V0Qm91bmQgKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICovCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldEluQm91bmQgKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbCBuYW1lIAotICAqKi8KLSAgcHVibGljIFN0cmluZyBnZXRPdXRCb3VuZFJlbE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZC5nZXRSZWwoKS5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwKLSAgKiovCi0gIHB1YmxpYyBSZWwgZ2V0T3V0Qm91bmRSZWwoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZC5nZXRSZWwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbCBuYW1lIAotICAqKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbkJvdW5kUmVsTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0UmVsKCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsCi0gICoqLwotICBwdWJsaWMgUmVsIGdldEluQm91bmRSZWwoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldFJlbCgpOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvdXRib3VuZCBlbGVtZW50IHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBFbGVtZW50IGdldE91dEJvdW5kRWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZC5nZXRFbGVtZW50KCk7Ci0gIH0KLQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluYm91bmQgY29ubmVjdGlvbiB0aGF0IGNoYW5nZWQgCi0gICoqLwotICBwdWJsaWMgRWxlbWVudCBnZXRJbmJvdW5kRWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldEVsZW1lbnQoKTsKLSAgfQotICAKLQotICAKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXhlY3V0YWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0YTY4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXhlY3V0YWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotKiBBbGwgRXh0ZW5zaW9ucyB3aXRoIGV4ZWN0dXRhYmxlIGV4dGVuc2lvbnMgc2hvdWxkIGltcGxlbWVudCB0aGlzIAotKiB0byBmaXQgb3VyIGZyYW1ld29yawotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZUV4ZWN1dGFibGUKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIC8qKgotICAqUmV0dXJucyBhIHdpemFyZCBmcmFnbWVudCBmb3IgdGhpcyBleGVudGlvbiB0eXBlIAotICAqCi0gICovCi0gIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBnZXRGaW5pc2hDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDY5MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci0KLQotLyoqCi0qIFRoaXMgcmVwcmVzZW50cyBhbiBleHRlbnNpb24gaW4gdGhlIHBsdWdpbiByZWdpc3RyeSAKLSogSXQgam9iIGlzIHRvIGFjdCBhcyBhIHByb3h5IHRvIHRoZSBpY29uZmlnZWxlbWVudAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZUV4dGVuc2lvbgotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgb3IgYSBmcmFnbWVudCBhZGRlZAotICAqIEByZXR1cm4gV2ViU2VydmljZUV4ZWN1dGFibGUgdGhpcyBpbnRlcmZhY2UgaG9sZHMgZXhlY3V0YWJsZSBjb2RlIGFuZCBhIAotICAqIGZyYWdtZW50Ci0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24oKTsKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCk7Ci0gCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKTsKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyZjdkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotCi0KLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VFeHRlbnNpb25JbXBsIGltcGxlbWVudHMgV2ViU2VydmljZUV4dGVuc2lvbgotewotCi0JcHJpdmF0ZSBJTG9nCWxvZ187Ci0JCi0gIC8qCi0gICogVGhlIENvbmZpZ0VsZW1lbnQgdGhhdCBob2xkcyBleHRlbnNpb24gaW5mbwotICAqLwotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnRfOwotCi0gIC8qCi0gICogVGhlIGV4dGVuc2lvbiBleGVjdXRhYmxlIAotICAqLwotICBwcm90ZWN0ZWQgV2ViU2VydmljZUV4ZWN1dGFibGUgd2ViU2VydmljZUV4ZWN1dGFibGVfOwotICAKLQotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbkltcGwoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICBjb25maWdFbGVtZW50XyA9IGNvbmZpZ0VsZW1lbnQ7Ci0gICAgbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0gIH0KLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgb3IgYSBmcmFnbWVudCBhZGRlZAotICAqIEByZXR1cm4gV2ViU2VydmljZUV4ZWN1dGFibGUgdGhpcyBpbnRlcmZhY2UgaG9sZHMgZXhlY3V0YWJsZSBjb2RlIGFuZCBhIAotICAqIGZyYWdtZW50Ci0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24oKQotICB7Ci0gICAgaWYod2ViU2VydmljZUV4ZWN1dGFibGVfICE9IG51bGwpIHJldHVybiB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0KLSAgICB0cnl7Ci0gICAgICByZXR1cm4gY29uZmlnRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICB9Y2F0Y2ggKENvcmVFeGNlcHRpb24gZSl7Ci0gICAgICBsb2dfLmxvZyhJTG9nLkVSUk9SLCA1MDI5LCB0aGlzLCAiZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24iLGUpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQgdGhhdCBob2xkcyB0aGUgZXh0ZW5zaW9uIGluZm8KLSAgKiBAcGFyYW0gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldENvbmZpZ0VsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICBjb25maWdFbGVtZW50XyA9IGNvbmZpZ0VsZW1lbnQ7Ci0gIH0JCi0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQgdGhhdCBob2xkcyB0aGUgZXh0ZW5zaW9uIGluZm8KLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGNvbmZpZ0VsZW1lbnRfOwotICB9Ci0gIAotICAvKioKLSAgKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGJlaW5nIHVzZWQKLSAgKiBAcmV0dXJuIFN0cmluZyBuYW1lIG9mIHRoaXMgZXh0ZW5zaW9uCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggIm5hbWUiICk7Ci0gIH0KLQotCi19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ZWNjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLQotLyoqCi0qIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBleHRlbnNpb25zIGZvciBhIGdpdmVuIGV4dGVuc2lvbi1wb2ludCAKLSogYWxzbyByZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0cyAKLSoKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeQotewotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCk7Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0IG9mIHRoZSBnaXZlbiBuYW1lCi0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0Ci0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKCBTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpOwotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZDRkZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YS5MYWJlbHNBbmRJZHM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBnZW5lcmljIHJlZ2lzdHJ5IHdoaWNoIHNldHMgdXAgZ2VuZXJhbCBjb2RlIGluIGhhbmRsaW5nICAgCi0qIElDb25maWdFbGVtZW50cyBmb3IgYW4gZXh0ZW5zaW9uCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIAotICBwcml2YXRlIEhhc2h0YWJsZSBuYW1lRXh0ZW5zaW9uVGFibGVfOwotICBwcml2YXRlIFZlY3RvciBpZF87Ci0gIHByaXZhdGUgVmVjdG9yIGxhYmVsXzsKLSAgcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzYW5kaWRzXzsKLSAgICAKLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwoKQotICB7Ci0gICAgbmFtZUV4dGVuc2lvblRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBsYWJlbF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWRfID0gbmV3IFZlY3RvcigpOwotICAgIGxvYWRFeHRlbnNpb25zKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENoaWxkcmVuIHJlZ2lzdHJpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCBleHRlbnNpb24gdHlwZXMgCi0gICogQHJldHVybiBXZWJzZXJ2aWNlRXh0ZW5zaW9uIGhvbGRzIGEgY29uZmlnIGVsZW0KLSAgKiBmb3IgdGhhdCBleHRlbnNpb24gY2FwYWJsZSBvZiBjcmVhdGluZyBhbiBleGVjdXRhYmxlIGZpbGUKLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFdlYlNlcnZpY2VFeHRlbnNpb24gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCk7Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gbXVzdCBpbXBsZW1lbnQgaG93IHRoZXkgZ2V0IHRoZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHBhcnRpY3VsYXIgdG8gdGhhdAotICAqIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgYWJzdHJhY3QgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQotICAvKgotICAqIExvYWRzIFdlYlNlcnZpY2VFeHRlbnNpb25zIGZvciBXZWJTZXJ2aWNlQ2xpZW50VGVzdCBpbnRvIHRoaXMgcmVnaXN0cnkuCi0gICogVGhpcyBpcyBkb25lIGJ5IHF1ZXJ5aW5nIHRoZSBwbHVnaW4gcmVnaXN0cnkgZm9yIGFsbCBleHRlbnNpb25zCi0gICogdGhhdCBleHRlbmQgd2ViU2VydmljZUNsaWVudFRlc3QgIAotICAqLwotICBwcml2YXRlIHZvaWQgbG9hZEV4dGVuc2lvbnMgKCkKLSAgeyAgICAKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSBnZXRDb25maWdFbGVtZW50cygpOwotCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PGNvbmZpZy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGNvbmZpZ1tpZHhdOwotICAgICAgU3RyaW5nIGxhYmVsID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJsYWJlbCIgKTsKLSAgICAgIFN0cmluZyBpZCA9ICAgZWxlbS5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgICAgICAKLSAgICAgIFdlYlNlcnZpY2VFeHRlbnNpb24gd2ViU2VydmljZUV4dGVuc2lvbiA9IGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oZWxlbSk7CQotICAgICAgbmFtZUV4dGVuc2lvblRhYmxlXy5wdXQobGFiZWwsd2ViU2VydmljZUV4dGVuc2lvbik7Ci0gICAgICBsYWJlbF8uYWRkKGxhYmVsKTsKLSAgICAgIGlkXy5hZGQoaWQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMKLSAgKiBAcmV0dXJuIFRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zLgotICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzICgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZ1tdKW5hbWVFeHRlbnNpb25UYWJsZV8ua2V5U2V0KCkudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbmFtZXMgYW5kIElkcyAKLSAgICovCi0gIHB1YmxpYyBMYWJlbHNBbmRJZHMgZ2V0TGFiZWxzQW5kSURzKCkKLSAgewotICAJbGFiZWxzYW5kaWRzXyA9IG5ldyBMYWJlbHNBbmRJZHMoKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0TGFiZWxzXygoU3RyaW5nW10pbGFiZWxfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlsYWJlbHNhbmRpZHNfLnNldElkc18oKFN0cmluZ1tdKWlkXy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICkpOwotICAJcmV0dXJuIGxhYmVsc2FuZGlkc187Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvYmplY3Qgb2YgdGhlIGdpdmVuIG5hbWUKLSAgKiBAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0Ci0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAoV2ViU2VydmljZUV4dGVuc2lvbiluYW1lRXh0ZW5zaW9uVGFibGVfLmdldChuYW1lKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgQWxsIGV4dGVudGlvbiBvYmplY3RzIGluIHRoaXMgcmVnaXN0cnkKLSAgKkByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3RzCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnMoKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uW10pbmFtZUV4dGVuc2lvblRhYmxlXy52YWx1ZXMoKS50b0FycmF5KCBuZXcgV2ViU2VydmljZUV4dGVuc2lvblswXSApOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0Q2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdENsaWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjc3ZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0Q2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGYWN0b3J5RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBDb21tYW5kRmFjdG9yeUZyYWdtZW50Ci17Ci0gIHByb3RlY3RlZCBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJvdGVjdGVkIElFbnZpcm9ubWVudCAgICAgICBlbnZpcm9ubWVudF87Ci0gIHByb3RlY3RlZCBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJvdGVjdGVkIElTZWxlY3Rpb24gICAgICAgIHNlbGVjdGlvbl87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICAgICAgICBwcm9qZWN0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgICAgIG1vZHVsZV87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICAgICAgICBlYXJQcm9qZWN0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0gICAgCi0gIHB1YmxpYyBBYnN0cmFjdENsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQWJzdHJhY3RDbGllbnRGcmFnbWVudCggQWJzdHJhY3RDbGllbnRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgCi0JCi0Jd2ViU2VydmljZUNsaWVudF8gPSBmcmFnbWVudC53ZWJTZXJ2aWNlQ2xpZW50XzsKLQllbnZpcm9ubWVudF8gICAgICA9IGZyYWdtZW50LmVudmlyb25tZW50XzsKLQljb250ZXh0XyAgICAgICAgICA9IGZyYWdtZW50LmNvbnRleHRfOwotCXNlbGVjdGlvbl8gICAgICAgID0gZnJhZ21lbnQuc2VsZWN0aW9uXzsKLQltb2R1bGVfICAgICAgICAgICA9IGZyYWdtZW50Lm1vZHVsZV87Ci0JZWFyXyAgICAgICAgICAgICAgPSBmcmFnbWVudC5lYXJfOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2UgKQotICB7Ci0Jd2ViU2VydmljZUNsaWVudF8gPSB3ZWJTZXJ2aWNlOyAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnZpcm9ubWVudCggSUVudmlyb25tZW50IGVudmlyb25tZW50ICkKLSAgewotCWVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KCBJQ29udGV4dCBjb250ZXh0ICkKLSAgewkgIAotCWNvbnRleHRfID0gY29udGV4dDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKCBJU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLQlzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0KQotICB7Ci0gICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JbW9kdWxlXyA9IG1vZHVsZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdChTdHJpbmcgZWFyUHJvamVjdCkKLSAgewotICAgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotICB7Ci0JZWFyXyA9IGVhcjsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdFNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2Y2ZDdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdFNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZhY3RvcnlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBDb21tYW5kRmFjdG9yeUZyYWdtZW50Ci17Ci0gIHByb3RlY3RlZCBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlXzsKLSAgcHJvdGVjdGVkIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudF87Ci0gIHByb3RlY3RlZCBJQ29udGV4dCAgICBjb250ZXh0XzsKLSAgcHJvdGVjdGVkIElTZWxlY3Rpb24gIHNlbGVjdGlvbl87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICBwcm9qZWN0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgIG1vZHVsZV87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICBlYXJQcm9qZWN0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgIGVhcl87Ci0gICAgCi0gIHB1YmxpYyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFic3RyYWN0U2VydmljZUZyYWdtZW50KCBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgCi0JCi0Jd2ViU2VydmljZV8gID0gZnJhZ21lbnQud2ViU2VydmljZV87Ci0JZW52aXJvbm1lbnRfID0gZnJhZ21lbnQuZW52aXJvbm1lbnRfOwotCWNvbnRleHRfICAgICA9IGZyYWdtZW50LmNvbnRleHRfOwotCXNlbGVjdGlvbl8gICA9IGZyYWdtZW50LnNlbGVjdGlvbl87Ci0JbW9kdWxlXyAgICAgID0gZnJhZ21lbnQubW9kdWxlXzsKLQllYXJfICAgICAgICAgPSBmcmFnbWVudC5lYXJfOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UgKQotICB7Ci0Jd2ViU2VydmljZV8gPSB3ZWJTZXJ2aWNlOyAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnZpcm9ubWVudCggSUVudmlyb25tZW50IGVudmlyb25tZW50ICkKLSAgewotCWVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KCBJQ29udGV4dCBjb250ZXh0ICkKLSAgewkgIAotCWNvbnRleHRfID0gY29udGV4dDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKCBJU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLQlzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0KQotICB7Ci0gICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JbW9kdWxlXyA9IG1vZHVsZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdChTdHJpbmcgZWFyUHJvamVjdCkKLSAgewotICAgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotICB7Ci0JZWFyXyA9IGVhcjsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlQ2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIyYjUzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBc3NlbWJsZUNsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLSAgcHVibGljIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBBc3NlbWJsZUNsaWVudEZyYWdtZW50KCBBc3NlbWJsZUNsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgQXNzZW1ibGVDbGllbnRGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZUNsaWVudF8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRBc3NlbWJsZSgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VDbGllbnRfLmFzc2VtYmxlKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlU2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YzlkODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlU2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEFzc2VtYmxlU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFzc2VtYmxlU2VydmljZUZyYWdtZW50KCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IEFzc2VtYmxlU2VydmljZUZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlXyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldEFzc2VtYmxlKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZV8uYXNzZW1ibGUoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RlcGxveUNsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95Q2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZlZmMyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95Q2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBEZXBsb3lDbGllbnRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBEZXBsb3lDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIERlcGxveUNsaWVudEZyYWdtZW50KCBEZXBsb3lDbGllbnRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IERlcGxveUNsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldERlcGxveSgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VDbGllbnRfLmRlcGxveSggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95U2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95U2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YmU5OWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RlcGxveVNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIERlcGxveVNlcnZpY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2VydmljZUZyYWdtZW50IAotewotICBwdWJsaWMgRGVwbG95U2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGVwbG95U2VydmljZUZyYWdtZW50KCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0RGVwbG95KCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZV8uZGVwbG95KCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wQ2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wQ2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmOGUyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcENsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIERldmVsb3BDbGllbnRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBEZXZlbG9wQ2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQoIERldmVsb3BDbGllbnRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IERldmVsb3BDbGllbnRGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZUNsaWVudF8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXREZXZlbG9wKCkgKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VDbGllbnRfLmRldmVsb3AoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BTZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wU2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNTM4NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BTZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2VydmljZUZyYWdtZW50IAotewotICBwdWJsaWMgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQoIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBEZXZlbG9wU2VydmljZUZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlXyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldERldmVsb3AoKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5kZXZlbG9wKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsQ2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsQ2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2MzdlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbENsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEluc3RhbGxDbGllbnRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgCi17Ci0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIEluc3RhbGxDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEluc3RhbGxDbGllbnRGcmFnbWVudCggSW5zdGFsbENsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgSW5zdGFsbENsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldEluc3RhbGwoKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlQ2xpZW50Xy5pbnN0YWxsKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxTZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsU2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkN2U2NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxTZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2VydmljZUZyYWdtZW50IAotewotCXByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0JCi0gIHB1YmxpYyBJbnN0YWxsU2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCggSW5zdGFsbFNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0SW5zdGFsbCgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLmluc3RhbGwoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0JICBjb250ZXh0Xz1jb250ZXh0OwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1bkNsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuQ2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIxOWI2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuQ2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgUnVuQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IAotewotCXByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0JCi0gIHB1YmxpYyBSdW5DbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFJ1bkNsaWVudEZyYWdtZW50KCBSdW5DbGllbnRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IFJ1bkNsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldFJ1bigpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VDbGllbnRfLnJ1biggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLQkgIGNvbnRleHRfPWNvbnRleHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5TZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5TZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVmZTg5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuU2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFJ1blNlcnZpY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2VydmljZUZyYWdtZW50IAotewotCQotCXByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0JCi0gIHB1YmxpYyBSdW5TZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBSdW5TZXJ2aWNlRnJhZ21lbnQoIFJ1blNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IFJ1blNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRSdW4oKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5ydW4oIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0JICBjb250ZXh0Xz1jb250ZXh0OwkgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9EZXNjcmlwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4MDc0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9EZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEZXNjcmlwdGlvbi5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERlc2NyaXB0aW9uKCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEZXNjcmlwdGlvbiBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RGVzY3JpcHRpb25fVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMYW5nKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERlc2NyaXB0aW9uX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMYW5nKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gRGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDg4MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3QuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFJvb3QgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAuRW50cnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9NaXhlZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZlYXR1cmVNYXBFbnRyeSIgbWFueT0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRmVhdHVyZU1hcCBnZXRNaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24pCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0TmFtZShOYW1lKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X05hbWUoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE5hbWUoTmFtZSB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFJlZ2lzdHJ5KFJlZ2lzdHJ5KQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnkgZ2V0UmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRSZWdpc3RyeShSZWdpc3RyeSB2YWx1ZSk7Ci0KLX0gLy8gRG9jdW1lbnRSb290CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9OYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjM2RkMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0TmFtZV8oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hbWUgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldE5hbWVfVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0TmFtZV9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMYW5nKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gTmFtZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OTJkYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVnaXN0cnk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRJZCA8ZW0+SWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeSgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVnaXN0cnkgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lfS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0UmVnaXN0cnlfTmFtZSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbn0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0UmVnaXN0cnlfRGVzY3JpcHRpb24oKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0SWQoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0UmVnaXN0cnlfSWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldElkKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldElkIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRJZChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMb2NhdGlvbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9Mb2NhdGlvbigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExvY2F0aW9uKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFJlZihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9SZWYoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFJlZigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRSZWYgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFJlZihTdHJpbmcgdmFsdWUpOwotCi19IC8vIFJlZ2lzdHJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzI0MTMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeUZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlZ2lzdHJ5RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVJlZ2lzdHJ5RmFjdG9yeSBlSU5TVEFOQ0UgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5RmFjdG9yeUltcGwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEZXNjcmlwdGlvbiBjcmVhdGVEZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgY3JlYXRlTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVJlZ2lzdHJ5IGNyZWF0ZVJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVJlZ2lzdHJ5UGFja2FnZSBnZXRSZWdpc3RyeVBhY2thZ2UoKTsKLQotfSAvL1JlZ2lzdHJ5RmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeVBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4ZjFlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeVBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3MCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5UGFja2FnZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogCi0gKiAgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gKiAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAqIAotICogICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtCi0gKiAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLiAgCi0gKiAKLSAqICAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQKLSAqICAgICBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuICBUaGUKLSAqICAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQKLSAqICAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwKLSAqICAgICBzcGVjaWZpY2F0aW9uLCBvciBkb2N1bWVudCBpbnN0YW5jZToKLSAqIAotICogICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHByb3ZpZGVzIGEgVVJJIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGludGVycHJldGluZyBhbnkKLSAqICAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0Ci0gKiAgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBCYXNlIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgZGVjbGFyZWQgdG8gYmUgb2YgdHlwZSBJRC4KLSAqICAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLAotICogICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24KLSAqICAgICAgICAgIHdpdGggdGhlIG1lY2hhbmlzbXMgaXQgcHJvcG9zZXMuICBOb3RlIHRoYXQgaXQgaXMgX25vdF8gaW5jbHVkZWQKLSAqICAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLgotICogCi0gKiAgICAgbGFuZyAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZgotICogICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAgIAotICogICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlCi0gKiAgICAgICAgICB2YWx1ZSBpcyBhIGtleXdvcmQgaW5kaWNhdGluZyB3aGF0IHdoaXRlc3BhY2UgcHJvY2Vzc2luZwotICogICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cwotICogICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMKLSAqICAgICAgICAgIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mIAotICogICAgICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAotICogICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAKLSAqICAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOgotICogCi0gKiAgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uCi0gKiAgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwCi0gKiAgICAgICAgICAgICAgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5IHRoZSBYTUwgbmFtZQotICogICAgICAgICAgICAgIHhtbDpGYXRoZXIKLSAqICAgCi0gKiBUaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICogICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gKiAgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQKLSAqICAgICAgICAgYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KLSAqIAotICogICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYQotICogICAgICAgICBmb3IgdGhlIFhNTCBuYW1lc3BhY2UsIGUuZy4gYXMgZm9sbG93czoKLSAqICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotICogICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8mZ3Q7Ci0gKiAKLSAqICAgICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcwotICogICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCi0gKiAKLSAqICAgICAgICAgJmx0O3R5cGUgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2F0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sOnNwZWNpYWxBdHRycyIvJmd0OwotICogIAotICogICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlCi0gKiAgICAgICAgICBlbGVtZW50IHdpdGggYW55IG9mIHRob3NlIGF0dHJpYnV0ZXMKLSAqIEluIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcKLSAqICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2QuCi0gKiAgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLgotICogICAgVGhlIHNjaGVtYSBkb2N1bWVudCBhdCB0aGF0IFVSSSBtYXkgaG93ZXZlciBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwKLSAqICAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEKLSAqICAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTAotICogICAgU2NoZW1hIG9yIFhNTCBuYW1lc3BhY2VzIGNoYW5nZSwgdGhlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlCi0gKiAgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZCB3aWxsIG5vdCBjaGFuZ2UuCi0gKiAgIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5RmFjdG9yeQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlZ2lzdHJ5UGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTkFNRSA9ICJyZWdpc3RyeSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfUFJFRklYID0gInJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnlQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRlc2NyaXB0aW9uSW1wbCA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRGVzY3JpcHRpb25JbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBERVNDUklQVElPTiA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9fVkFMVUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX0ZFQVRVUkVfQ09VTlQgPSAyOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX01JWEVEID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04gPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19OQU1FID0gNDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZID0gNTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX0ZFQVRVUkVfQ09VTlQgPSA2OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuTmFtZUltcGwgPGVtPk5hbWU8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuTmFtZUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IE5BTUUgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fVkFMVUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19MQU5HID0gMTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+TmFtZTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX0ZFQVRVUkVfQ09VTlQgPSAyOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsIDxlbT5SZWdpc3RyeTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IFJFR0lTVFJZID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9fTkFNRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19ERVNDUklQVElPTiA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9fSUQgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfX0xPQ0FUSU9OID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9fUkVGID0gNDsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+UmVnaXN0cnk8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfRkVBVFVSRV9DT1VOVCA9IDU7Ci0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9WYWx1ZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRMYW5nKCkKLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1peGVkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0TmFtZV8oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFJlZ2lzdHJ5X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldERlc2NyaXB0aW9uKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0UmVnaXN0cnlfRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRJZCA8ZW0+SWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0SWQoKQotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9JZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X0xvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0UmVmIDxlbT5SZWY8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZWY8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldFJlZigpCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X1JlZigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnlGYWN0b3J5IGdldFJlZ2lzdHJ5RmFjdG9yeSgpOwotCi19IC8vUmVnaXN0cnlQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9EZXNjcmlwdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjExZDk0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRGVzY3JpcHRpb25JbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRGVzY3JpcHRpb25JbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRlc2NyaXB0aW9uSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRGVzY3JpcHRpb25JbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEZXNjcmlwdGlvbiB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQU5HX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsYW5nID0gTEFOR19FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEZXNjcmlwdGlvbkltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERlc2NyaXB0aW9uKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYW5nKCkgewotCQlyZXR1cm4gbGFuZzsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYW5nKFN0cmluZyBuZXdMYW5nKSB7Ci0JCVN0cmluZyBvbGRMYW5nID0gbGFuZzsKLQkJbGFuZyA9IG5ld0xhbmc7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fTEFORywgb2xkTGFuZywgbGFuZykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXJldHVybiBnZXRMYW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZyhMQU5HX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXJldHVybiBMQU5HX0VERUZBVUxUID09IG51bGwgPyBsYW5nICE9IG51bGwgOiAhTEFOR19FREVGQVVMVC5lcXVhbHMobGFuZyk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmFsdWUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxhbmc6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxhbmcpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9EZXNjcmlwdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzJlMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3RJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5CYXNpY0ZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFJvb3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb2N1bWVudFJvb3QgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1peGVkKCkgPGVtPk1peGVkPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE1peGVkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRmVhdHVyZU1hcCBtaXhlZCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYTUxOU1ByZWZpeE1hcCgpIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeE1MTlNQcmVmaXhNYXAgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhTSVNjaGVtYUxvY2F0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEb2N1bWVudFJvb3RJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3QoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRmVhdHVyZU1hcCBnZXRNaXhlZCgpIHsKLQkJaWYgKG1peGVkID09IG51bGwpIHsKLQkJCW1peGVkID0gbmV3IEJhc2ljRmVhdHVyZU1hcCh0aGlzLCBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQl9Ci0JCXJldHVybiBtaXhlZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpIHsKLQkJaWYgKHhNTE5TUHJlZml4TWFwID09IG51bGwpIHsKLQkJCXhNTE5TUHJlZml4TWFwID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQl9Ci0JCXJldHVybiB4TUxOU1ByZWZpeE1hcDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJaWYgKHhTSVNjaGVtYUxvY2F0aW9uID09IG51bGwpIHsKLQkJCXhTSVNjaGVtYUxvY2F0aW9uID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQl9Ci0JCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoRGVzY3JpcHRpb24pZ2V0TWl4ZWQoKS5nZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gbmV3RGVzY3JpcHRpb24sIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCBuZXdEZXNjcmlwdGlvbiwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gbmV3RGVzY3JpcHRpb24pIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCBuZXdEZXNjcmlwdGlvbik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIChOYW1lKWdldE1peGVkKCkuZ2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0TmFtZShOYW1lIG5ld05hbWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUoTmFtZSBuZXdOYW1lKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgZ2V0UmVnaXN0cnkoKSB7Ci0JCXJldHVybiAoUmVnaXN0cnkpZ2V0TWl4ZWQoKS5nZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0UmVnaXN0cnkoUmVnaXN0cnkgbmV3UmVnaXN0cnksIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCBuZXdSZWdpc3RyeSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVnaXN0cnkoUmVnaXN0cnkgbmV3UmVnaXN0cnkpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCBuZXdSZWdpc3RyeSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TWl4ZWQoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WE1MTlNQcmVmaXhNYXAoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCQlyZXR1cm4gYmFzaWNTZXREZXNjcmlwdGlvbihudWxsLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCQlyZXR1cm4gYmFzaWNTZXROYW1lKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRSZWdpc3RyeShudWxsLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBnZXRNaXhlZCgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4gZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZOgotCQkJCXJldHVybiBnZXRSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlnZXRNaXhlZCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlzZXREZXNjcmlwdGlvbigoRGVzY3JpcHRpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJc2V0UmVnaXN0cnkoKFJlZ2lzdHJ5KW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXNldERlc2NyaXB0aW9uKChEZXNjcmlwdGlvbiludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJc2V0UmVnaXN0cnkoKFJlZ2lzdHJ5KW51bGwpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIG1peGVkICE9IG51bGwgJiYgIW1peGVkLmlzRW1wdHkoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwICE9IG51bGwgJiYgIXhNTE5TUHJlZml4TWFwLmlzRW1wdHkoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgIXhTSVNjaGVtYUxvY2F0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpICE9IG51bGw7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCkgIT0gbnVsbDsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZOgotCQkJCXJldHVybiBnZXRSZWdpc3RyeSgpICE9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChtaXhlZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQobWl4ZWQpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9Eb2N1bWVudFJvb3RJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL05hbWVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL05hbWVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjY2VmNzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9OYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuTmFtZUltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuTmFtZUltcGwjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE5hbWVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBOYW1lIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE5hbWVJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXROYW1lXygpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKLQkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7Ci0JCXZhbHVlID0gbmV3VmFsdWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYW5nKCkgewotCQlyZXR1cm4gbGFuZzsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYW5nKFN0cmluZyBuZXdMYW5nKSB7Ci0JCVN0cmluZyBvbGRMYW5nID0gbGFuZzsKLQkJbGFuZyA9IG5ld0xhbmc7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJcmV0dXJuIGdldFZhbHVlKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXJldHVybiBnZXRMYW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJcmV0dXJuIFZBTFVFX0VERUZBVUxUID09IG51bGwgPyB2YWx1ZSAhPSBudWxsIDogIVZBTFVFX0VERUZBVUxULmVxdWFscyh2YWx1ZSk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXJldHVybiBMQU5HX0VERUZBVUxUID09IG51bGwgPyBsYW5nICE9IG51bGwgOiAhTEFOR19FREVGQVVMVC5lcXVhbHMobGFuZyk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmFsdWUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxhbmc6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxhbmcpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9OYW1lSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmMmMxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeUZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUmVnaXN0cnlGYWN0b3J5IHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuZCBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgewotCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT046IHJldHVybiBjcmVhdGVEZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRTogcmV0dXJuIGNyZWF0ZU5hbWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZOiByZXR1cm4gY3JlYXRlUmVnaXN0cnkoKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBjcmVhdGVEZXNjcmlwdGlvbigpIHsKLQkJRGVzY3JpcHRpb25JbXBsIGRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKSB7Ci0JCURvY3VtZW50Um9vdEltcGwgZG9jdW1lbnRSb290ID0gbmV3IERvY3VtZW50Um9vdEltcGwoKTsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBjcmVhdGVOYW1lKCkgewotCQlOYW1lSW1wbCBuYW1lID0gbmV3IE5hbWVJbXBsKCk7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBjcmVhdGVSZWdpc3RyeSgpIHsKLQkJUmVnaXN0cnlJbXBsIHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5SW1wbCgpOwotCQlyZXR1cm4gcmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5UGFja2FnZSBnZXRSZWdpc3RyeVBhY2thZ2UoKSB7Ci0JCXJldHVybiAoUmVnaXN0cnlQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZGVwcmVjYXRlZAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlZ2lzdHJ5UGFja2FnZSBnZXRQYWNrYWdlKCkgewotCQlyZXR1cm4gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQl9Ci0KLX0gLy9SZWdpc3RyeUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3MWU3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVnaXN0cnk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXRSZWYgPGVtPlJlZjwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgUmVnaXN0cnkgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgbmFtZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZXNjcmlwdGlvbigpIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IGRlc2NyaXB0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZCgpIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBpZCA9IElEX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVmKCkgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UmVmKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVmKCkgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UmVmKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlZiA9IFJFRl9FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBSZWdpc3RyeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldFJlZ2lzdHJ5KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldE5hbWUoKSB7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoTmFtZS5jbGFzcywgdGhpcywgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCWlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbiA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChEZXNjcmlwdGlvbi5jbGFzcywgdGhpcywgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTik7Ci0JCX0KLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgbmV3SWQpIHsKLQkJU3RyaW5nIG9sZElkID0gaWQ7Ci0JCWlkID0gbmV3SWQ7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fSUQsIG9sZElkLCBpZCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKSB7Ci0JCXJldHVybiBsb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbmV3TG9jYXRpb24pIHsKLQkJU3RyaW5nIG9sZExvY2F0aW9uID0gbG9jYXRpb247Ci0JCWxvY2F0aW9uID0gbmV3TG9jYXRpb247Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT04sIG9sZExvY2F0aW9uLCBsb2NhdGlvbikpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmKCkgewotCQlyZXR1cm4gcmVmOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlZihTdHJpbmcgbmV3UmVmKSB7Ci0JCVN0cmluZyBvbGRSZWYgPSByZWY7Ci0JCXJlZiA9IG5ld1JlZjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUYsIG9sZFJlZiwgcmVmKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TmFtZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldERlc2NyaXB0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fSUQ6Ci0JCQkJcmV0dXJuIGdldElkKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fUkVGOgotCQkJCXJldHVybiBnZXRSZWYoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQlnZXROYW1lKCkuY2xlYXIoKTsKLQkJCQlnZXROYW1lKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5jbGVhcigpOwotCQkJCWdldERlc2NyaXB0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fSUQ6Ci0JCQkJc2V0SWQoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY6Ci0JCQkJc2V0UmVmKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQlnZXROYW1lKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDoKLQkJCQlzZXRJZChJRF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKExPQ0FUSU9OX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fUkVGOgotCQkJCXNldFJlZihSRUZfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU6Ci0JCQkJcmV0dXJuIG5hbWUgIT0gbnVsbCAmJiAhbmFtZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGRlc2NyaXB0aW9uICE9IG51bGwgJiYgIWRlc2NyaXB0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDoKLQkJCQlyZXR1cm4gSURfRURFRkFVTFQgPT0gbnVsbCA/IGlkICE9IG51bGwgOiAhSURfRURFRkFVTFQuZXF1YWxzKGlkKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gTE9DQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uICE9IG51bGwgOiAhTE9DQVRJT05fRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY6Ci0JCQkJcmV0dXJuIFJFRl9FREVGQVVMVCA9PSBudWxsID8gcmVmICE9IG51bGwgOiAhUkVGX0VERUZBVUxULmVxdWFscyhyZWYpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAoaWQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGlkKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsb2NhdGlvbjogIik7Ci0JCXJlc3VsdC5hcHBlbmQobG9jYXRpb24pOwotCQlyZXN1bHQuYXBwZW5kKCIsIHJlZjogIik7Ci0JCXJlc3VsdC5hcHBlbmQocmVmKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vUmVnaXN0cnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5UGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Y5YmVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5YTUxUeXBlUGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsLlhNTFR5cGVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5UGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBSZWdpc3RyeVBhY2thZ2UgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRlc2NyaXB0aW9uRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRvY3VtZW50Um9vdEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBuYW1lRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIHJlZ2lzdHJ5RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgotCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLQkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0JICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2VOU19VUkkKLQkgKiBAc2VlICNpbml0KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBSZWdpc3RyeVBhY2thZ2VJbXBsKCkgewotCQlzdXBlcihlTlNfVVJJLCBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLQkgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0JICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0JICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0JICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotCSAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLQkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotCSAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0JICogdGhvc2Ugb2YgYW5vdGhlci4KLQkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0JICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZU5TX1VSSQotCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0JICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVnaXN0cnlQYWNrYWdlIGluaXQoKSB7Ci0JCWlmIChpc0luaXRlZCkgcmV0dXJuIChSZWdpc3RyeVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgUmVnaXN0cnlQYWNrYWdlSW1wbCgpKTsKLQotCQlpc0luaXRlZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKLQkJUlRJbmRleFBhY2thZ2VJbXBsIHRoZVJUSW5kZXhQYWNrYWdlID0gKFJUSW5kZXhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSVEluZGV4UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSA6IFJUSW5kZXhQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUYXhvbm9teVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIDogVGF4b25vbXlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVVRERJUmVnaXN0cnlQYWNrYWdlID0gKFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIDogVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQotCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotCQl0aGVSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmZyZWV6ZSgpOwotCi0JCXJldHVybiB0aGVSZWdpc3RyeVBhY2thZ2U7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX1ZhbHVlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVzY3JpcHRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVzY3JpcHRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERvY3VtZW50Um9vdCgpIHsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdEVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0TmFtZV8oKSB7Ci0JCXJldHVybiBuYW1lRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0UmVnaXN0cnkoKSB7Ci0JCXJldHVybiByZWdpc3RyeUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRSZWdpc3RyeV9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpcmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfSWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X0xvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9SZWYoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeUZhY3RvcnkgZ2V0UmVnaXN0cnlGYWN0b3J5KCkgewotCQlyZXR1cm4gKFJlZ2lzdHJ5RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0JICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOwotCQlpc0NyZWF0ZWQgPSB0cnVlOwotCi0JCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotCQlkZXNjcmlwdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZGVzY3JpcHRpb25FQ2xhc3MsIERFU0NSSVBUSU9OX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZGVzY3JpcHRpb25FQ2xhc3MsIERFU0NSSVBUSU9OX19MQU5HKTsKLQotCQlkb2N1bWVudFJvb3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9DVU1FTlRfUk9PVCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19SRUdJU1RSWSk7Ci0KLQkJbmFtZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOQU1FKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fTEFORyk7Ci0KLQkJcmVnaXN0cnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkVHSVNUUlkpOwotCQljcmVhdGVFUmVmZXJlbmNlKHJlZ2lzdHJ5RUNsYXNzLCBSRUdJU1RSWV9fTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UocmVnaXN0cnlFQ2xhc3MsIFJFR0lTVFJZX19ERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUocmVnaXN0cnlFQ2xhc3MsIFJFR0lTVFJZX19JRCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUocmVnaXN0cnlFQ2xhc3MsIFJFR0lTVFJZX19MT0NBVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUocmVnaXN0cnlFQ2xhc3MsIFJFR0lTVFJZX19SRUYpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKLQkJaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0JCXNldE5hbWUoZU5BTUUpOwotCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLQkJc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotCQlYTUxUeXBlUGFja2FnZUltcGwgdGhlWE1MVHlwZVBhY2thZ2UgPSAoWE1MVHlwZVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFhNTFR5cGVQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLQotCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotCQlpbml0RUNsYXNzKGRlc2NyaXB0aW9uRUNsYXNzLCBEZXNjcmlwdGlvbi5jbGFzcywgIkRlc2NyaXB0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREZXNjcmlwdGlvbl9WYWx1ZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgRGVzY3JpcHRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREZXNjcmlwdGlvbl9MYW5nKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldExhbmd1YWdlKCksICJsYW5nIiwgbnVsbCwgMCwgMSwgRGVzY3JpcHRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MoZG9jdW1lbnRSb290RUNsYXNzLCBEb2N1bWVudFJvb3QuY2xhc3MsICJEb2N1bWVudFJvb3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUZlYXR1cmVNYXBFbnRyeSgpLCAibWl4ZWQiLCBudWxsLCAwLCAtMSwgbnVsbCwgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhNTE5TUHJlZml4TWFwIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhTSVNjaGVtYUxvY2F0aW9uIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCB0aGlzLmdldERlc2NyaXB0aW9uKCksIG51bGwsICJkZXNjcmlwdGlvbiIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJuYW1lIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCB0aGlzLmdldFJlZ2lzdHJ5KCksIG51bGwsICJyZWdpc3RyeSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MobmFtZUVDbGFzcywgTmFtZS5jbGFzcywgIk5hbWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKHJlZ2lzdHJ5RUNsYXNzLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAiUmVnaXN0cnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFJlZ2lzdHJ5X05hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmFtZSIsIG51bGwsIDEsIC0xLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpLCB0aGlzLmdldERlc2NyaXB0aW9uKCksIG51bGwsICJkZXNjcmlwdGlvbiIsIG51bGwsIDEsIC0xLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRSZWdpc3RyeV9JZCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgImlkIiwgbnVsbCwgMCwgMSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFJlZ2lzdHJ5X0xvY2F0aW9uKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAibG9jYXRpb24iLCBudWxsLCAwLCAxLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0UmVnaXN0cnlfUmVmKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAicmVmIiwgbnVsbCwgMCwgMSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJLy8gQ3JlYXRlIHJlc291cmNlCi0JCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotCi0JCS8vIENyZWF0ZSBhbm5vdGF0aW9ucwotCQkvLyBodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEKLQkJY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhlIGFubm90YXRpb25zIGZvciA8Yj5odHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGE8L2I+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpIHsKLQkJU3RyaW5nIHNvdXJjZSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiOwkJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRlc2NyaXB0aW9uRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJEZXNjcmlwdGlvbiIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERlc2NyaXB0aW9uX1ZhbHVlKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIjowIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RGVzY3JpcHRpb25fTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRvY3VtZW50Um9vdEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiIiwKLQkJCSAia2luZCIsICJtaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudFdpbGRjYXJkIiwKLQkJCSAibmFtZSIsICI6bWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieG1sbnM6cHJlZml4IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhzaTpzY2hlbWFMb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGVzY3JpcHRpb24iLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAicmVnaXN0cnkiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAobmFtZUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiTmFtZSIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX0xhbmcoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsYW5nIiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChyZWdpc3RyeUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiUmVnaXN0cnkiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRSZWdpc3RyeV9JZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImlkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X0xvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibG9jYXRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfUmVmKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAicmVmIgotCQkgICB9KTsKLQl9Ci0KLX0gLy9SZWdpc3RyeVBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWIyMDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTEgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBSZWdpc3RyeVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5KCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgewotCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgUmVnaXN0cnlTd2l0Y2ggbW9kZWxTd2l0Y2ggPQotCQluZXcgUmVnaXN0cnlTd2l0Y2goKSB7Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRGVzY3JpcHRpb25BZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZU5hbWVBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VSZWdpc3RyeShSZWdpc3RyeSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlUmVnaXN0cnlBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCX07Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgewotCQlyZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLQl9Ci0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXNjcmlwdGlvbkFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5hbWVBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVnaXN0cnlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vUmVnaXN0cnlBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzg3MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FeHRlbmRlZE1ldGFEYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbC5SZWdpc3RyeVJlc291cmNlSW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEV4dGVuZGVkTWV0YURhdGEgZXh0ZW5kZWRNZXRhRGF0YTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQkJZXh0ZW5kZWRNZXRhRGF0YSA9IEV4dGVuZGVkTWV0YURhdGEuSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFJlZ2lzdHJ5UmVzb3VyY2VJbXBsKHVyaSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0gLy9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViZmMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsLlJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgewotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHVyaSB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeVJlc291cmNlSW1wbChVUkkgdXJpKSB7Ci0JCXN1cGVyKHVyaSk7Ci0JfQotCi19IC8vUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5U3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5U3dpdGNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OTM3MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlTd2l0Y2guamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUxIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVN3aXRjaCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBSZWdpc3RyeVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeVN3aXRjaCgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotCQl9Ci0JCWVsc2UgewotCQkJTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotCQkJcmV0dXJuCi0JCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KLQkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgotCQkJCQlkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTjogewotCQkJCURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogewotCQkJCURvY3VtZW50Um9vdCBkb2N1bWVudFJvb3QgPSAoRG9jdW1lbnRSb290KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VEb2N1bWVudFJvb3QoZG9jdW1lbnRSb290KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FOiB7Ci0JCQkJTmFtZSBuYW1lID0gKE5hbWUpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZU5hbWUobmFtZSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUlk6IHsKLQkJCQlSZWdpc3RyeSByZWdpc3RyeSA9IChSZWdpc3RyeSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlUmVnaXN0cnkocmVnaXN0cnkpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRGVzY3JpcHRpb24oRGVzY3JpcHRpb24gb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VSZWdpc3RyeShSZWdpc3RyeSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vUmVnaXN0cnlTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRGVzY3JpcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3NzYzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0Rlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERlc2NyaXB0aW9uLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERlc2NyaXB0aW9uKCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEZXNjcmlwdGlvbiBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERlc2NyaXB0aW9uX1ZhbHVlKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRWYWx1ZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMYW5nKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREZXNjcmlwdGlvbl9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMYW5nKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gRGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRG9jdW1lbnRSb290LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0RvY3VtZW50Um9vdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTMzODhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRG9jdW1lbnRSb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3QuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldEluZGV4IDxlbT5JbmRleDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFJvb3QgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAuRW50cnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTWl4ZWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGZWF0dXJlTWFwRW50cnkiIG1hbnk9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUZlYXR1cmVNYXAgZ2V0TWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24pCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZGV4PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmRleDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmRleDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0SW5kZXgoSW5kZXgpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X0luZGV4KCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JSW5kZXggZ2V0SW5kZXgoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmRleDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldEluZGV4KEluZGV4IHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0TmFtZShOYW1lKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9OYW1lKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE5hbWUoTmFtZSB2YWx1ZSk7Ci0KLX0gLy8gRG9jdW1lbnRSb290CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0luZGV4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0luZGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YWE0YWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9JbmRleC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBJbmRleC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5kZXg8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXRJbmRleCgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSW5kZXggZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWV9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0SW5kZXhfTmFtZSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb259LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXRJbmRleF9EZXNjcmlwdGlvbigpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXRJbmRleF9SZWdpc3RyeSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldFJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXRJbmRleF9UYXhvbm9teSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldFRheG9ub215KCk7Ci0KLX0gLy8gSW5kZXgKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9OYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNDVmYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9OYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWUuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0TmFtZV8oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hbWUgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXROYW1lX1ZhbHVlKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRWYWx1ZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldE5hbWVfTGFuZygpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuTGFuZ3VhZ2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMYW5nKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMYW5nKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gTmFtZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGRiNzA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleEZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJUSW5kZXhGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgewotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUlRJbmRleEZhY3RvcnkgZUlOU1RBTkNFID0gbmV3IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhGYWN0b3J5SW1wbCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURlc2NyaXB0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5kZXg8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkluZGV4PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlJbmRleCBjcmVhdGVJbmRleCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGNyZWF0ZU5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUlRJbmRleFBhY2thZ2UgZ2V0UlRJbmRleFBhY2thZ2UoKTsKLQotfSAvL1JUSW5kZXhGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZDJiZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4UGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUwICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFBhY2thZ2UuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogCi0gKiAgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gKiAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAqIAotICogICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtCi0gKiAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLiAgCi0gKiAKLSAqICAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQKLSAqICAgICBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuICBUaGUKLSAqICAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQKLSAqICAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwKLSAqICAgICBzcGVjaWZpY2F0aW9uLCBvciBkb2N1bWVudCBpbnN0YW5jZToKLSAqIAotICogICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHByb3ZpZGVzIGEgVVJJIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGludGVycHJldGluZyBhbnkKLSAqICAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0Ci0gKiAgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBCYXNlIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgZGVjbGFyZWQgdG8gYmUgb2YgdHlwZSBJRC4KLSAqICAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLAotICogICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24KLSAqICAgICAgICAgIHdpdGggdGhlIG1lY2hhbmlzbXMgaXQgcHJvcG9zZXMuICBOb3RlIHRoYXQgaXQgaXMgX25vdF8gaW5jbHVkZWQKLSAqICAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLgotICogCi0gKiAgICAgbGFuZyAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZgotICogICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAgIAotICogICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlCi0gKiAgICAgICAgICB2YWx1ZSBpcyBhIGtleXdvcmQgaW5kaWNhdGluZyB3aGF0IHdoaXRlc3BhY2UgcHJvY2Vzc2luZwotICogICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cwotICogICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMKLSAqICAgICAgICAgIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mIAotICogICAgICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAotICogICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAKLSAqICAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOgotICogCi0gKiAgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uCi0gKiAgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwCi0gKiAgICAgICAgICAgICAgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5IHRoZSBYTUwgbmFtZQotICogICAgICAgICAgICAgIHhtbDpGYXRoZXIKLSAqICAgCi0gKiBUaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICogICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gKiAgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQKLSAqICAgICAgICAgYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KLSAqIAotICogICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYQotICogICAgICAgICBmb3IgdGhlIFhNTCBuYW1lc3BhY2UsIGUuZy4gYXMgZm9sbG93czoKLSAqICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotICogICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8mZ3Q7Ci0gKiAKLSAqICAgICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcwotICogICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCi0gKiAKLSAqICAgICAgICAgJmx0O3R5cGUgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2F0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sOnNwZWNpYWxBdHRycyIvJmd0OwotICogIAotICogICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlCi0gKiAgICAgICAgICBlbGVtZW50IHdpdGggYW55IG9mIHRob3NlIGF0dHJpYnV0ZXMKLSAqIEluIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcKLSAqICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2QuCi0gKiAgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLgotICogICAgVGhlIHNjaGVtYSBkb2N1bWVudCBhdCB0aGF0IFVSSSBtYXkgaG93ZXZlciBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwKLSAqICAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEKLSAqICAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTAotICogICAgU2NoZW1hIG9yIFhNTCBuYW1lc3BhY2VzIGNoYW5nZSwgdGhlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlCi0gKiAgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZCB3aWxsIG5vdCBjaGFuZ2UuCi0gKiAgIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleEZhY3RvcnkKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBSVEluZGV4UGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTkFNRSA9ICJydGluZGV4IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleCI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1BSRUZJWCA9ICJydGluZGV4IjsKLQotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUlRJbmRleFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsLmluaXQoKTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRGVzY3JpcHRpb25JbXBsIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRlc2NyaXB0aW9uSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX19MQU5HID0gMTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1QgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19NSVhFRCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVAgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmRleDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX0lOREVYID0gNDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTkFNRSA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9GRUFUVVJFX0NPVU5UID0gNjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsIDxlbT5JbmRleDwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IElOREVYID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBJTkRFWF9fTkFNRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IElOREVYX19ERVNDUklQVElPTiA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IElOREVYX19SRUdJU1RSWSA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IElOREVYX19UQVhPTk9NWSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IElOREVYX0ZFQVRVUkVfQ09VTlQgPSA0OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5OYW1lSW1wbCA8ZW0+TmFtZTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLk5hbWVJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgTkFNRSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5OYW1lPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRWYWx1ZSgpCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZzwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRMYW5nKCkKLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1peGVkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRNaXhlZCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldEluZGV4IDxlbT5JbmRleDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkluZGV4PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRJbmRleCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfSW5kZXgoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4IDxlbT5JbmRleDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0SW5kZXgoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0SW5kZXhfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldERlc2NyaXB0aW9uKCkKLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0SW5kZXhfRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRSZWdpc3RyeSgpCi0JICogQHNlZSAjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldEluZGV4X1JlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0VGF4b25vbXkoKQotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRJbmRleF9UYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXROYW1lXygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZzwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVJUSW5kZXhGYWN0b3J5IGdldFJUSW5kZXhGYWN0b3J5KCk7Ci0KLX0gLy9SVEluZGV4UGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjhjYjUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9EZXNjcmlwdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERlc2NyaXB0aW9uSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5EZXNjcmlwdGlvbkltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5EZXNjcmlwdGlvbkltcGwjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERlc2NyaXB0aW9uSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRGVzY3JpcHRpb24gewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRGVzY3JpcHRpb25JbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERlc2NyaXB0aW9uKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0Rlc2NyaXB0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OGRiYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuQmFzaWNGZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldEluZGV4IDxlbT5JbmRleDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRSb290SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRG9jdW1lbnRSb290IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaXhlZCgpIDxlbT5NaXhlZDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRNaXhlZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEZlYXR1cmVNYXAgbWl4ZWQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WE1MTlNQcmVmaXhNYXAoKSA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhNTE5TUHJlZml4TWFwID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkgPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4U0lTY2hlbWFMb2NhdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRG9jdW1lbnRSb290SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3QoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRmVhdHVyZU1hcCBnZXRNaXhlZCgpIHsKLQkJaWYgKG1peGVkID09IG51bGwpIHsKLQkJCW1peGVkID0gbmV3IEJhc2ljRmVhdHVyZU1hcCh0aGlzLCBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCX0KLQkJcmV0dXJuIG1peGVkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhNTE5TUHJlZml4TWFwKCkgewotCQlpZiAoeE1MTlNQcmVmaXhNYXAgPT0gbnVsbCkgewotCQkJeE1MTlNQcmVmaXhNYXAgPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJfQotCQlyZXR1cm4geE1MTlNQcmVmaXhNYXA7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCWlmICh4U0lTY2hlbWFMb2NhdGlvbiA9PSBudWxsKSB7Ci0JCQl4U0lTY2hlbWFMb2NhdGlvbiA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQl9Ci0JCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoRGVzY3JpcHRpb24pZ2V0TWl4ZWQoKS5nZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBuZXdEZXNjcmlwdGlvbiwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgbmV3RGVzY3JpcHRpb24sIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG5ld0Rlc2NyaXB0aW9uKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCBuZXdEZXNjcmlwdGlvbik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEluZGV4IGdldEluZGV4KCkgewotCQlyZXR1cm4gKEluZGV4KWdldE1peGVkKCkuZ2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0SW5kZXgoSW5kZXggbmV3SW5kZXgsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0luZGV4KCksIG5ld0luZGV4LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbmRleChJbmRleCBuZXdJbmRleCkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgbmV3SW5kZXgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoTmFtZSlnZXRNaXhlZCgpLmdldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0TmFtZShOYW1lIG5ld05hbWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShOYW1lIG5ld05hbWUpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRNaXhlZCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhNTE5TUHJlZml4TWFwKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiBiYXNpY1NldERlc2NyaXB0aW9uKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fSU5ERVg6Ci0JCQkJCXJldHVybiBiYXNpY1NldEluZGV4KG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0TmFtZShudWxsLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQlyZXR1cm4gZ2V0SW5kZXgoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXNldERlc2NyaXB0aW9uKChEZXNjcmlwdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQlzZXRJbmRleCgoSW5kZXgpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJc2V0RGVzY3JpcHRpb24oKERlc2NyaXB0aW9uKW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fSU5ERVg6Ci0JCQkJc2V0SW5kZXgoKEluZGV4KW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW51bGwpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiB4TUxOU1ByZWZpeE1hcCAhPSBudWxsICYmICF4TUxOU1ByZWZpeE1hcC5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgIXhTSVNjaGVtYUxvY2F0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCkgIT0gbnVsbDsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fSU5ERVg6Ci0JCQkJcmV0dXJuIGdldEluZGV4KCkgIT0gbnVsbDsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpICE9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChtaXhlZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQobWl4ZWQpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9Eb2N1bWVudFJvb3RJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvSW5kZXhJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvSW5kZXhJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZGMwOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0luZGV4SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogSW5kZXhJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZGV4PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsI2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEluZGV4SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgSW5kZXggewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgbmFtZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZXNjcmlwdGlvbigpIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IGRlc2NyaXB0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZ2lzdHJ5KCkgPGVtPlJlZ2lzdHJ5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgcmVnaXN0cnkgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGF4b25vbXkoKSA8ZW0+VGF4b25vbXk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCB0YXhvbm9teSA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgSW5kZXhJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldEluZGV4KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldE5hbWUoKSB7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoTmFtZS5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUUpOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXREZXNjcmlwdGlvbigpIHsKLQkJaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KERlc2NyaXB0aW9uLmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5JTkRFWF9fREVTQ1JJUFRJT04pOwotCQl9Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0UmVnaXN0cnkoKSB7Ci0JCWlmIChyZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlyZWdpc3RyeSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChSZWdpc3RyeS5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1JFR0lTVFJZKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldFRheG9ub215KCkgewotCQlpZiAodGF4b25vbXkgPT0gbnVsbCkgewotCQkJdGF4b25vbXkgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoVGF4b25vbXkuY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWSk7Ci0JCX0KLQkJcmV0dXJuIHRheG9ub215OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUU6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TmFtZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RGVzY3JpcHRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1JFR0lTVFJZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFJlZ2lzdHJ5KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRUYXhvbm9teSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1JFR0lTVFJZOgotCQkJCXJldHVybiBnZXRSZWdpc3RyeSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIGdldFRheG9ub215KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQlnZXROYW1lKCkuY2xlYXIoKTsKLQkJCQlnZXROYW1lKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1JFR0lTVFJZOgotCQkJCWdldFJlZ2lzdHJ5KCkuY2xlYXIoKTsKLQkJCQlnZXRSZWdpc3RyeSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJZ2V0VGF4b25vbXkoKS5jbGVhcigpOwotCQkJCWdldFRheG9ub215KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQlnZXROYW1lKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJZ2V0UmVnaXN0cnkoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZOgotCQkJCWdldFRheG9ub215KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUU6Ci0JCQkJcmV0dXJuIG5hbWUgIT0gbnVsbCAmJiAhbmFtZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAhZGVzY3JpcHRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIHJlZ2lzdHJ5ICE9IG51bGwgJiYgIXJlZ2lzdHJ5LmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZOgotCQkJCXJldHVybiB0YXhvbm9teSAhPSBudWxsICYmICF0YXhvbm9teS5pc0VtcHR5KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotfSAvL0luZGV4SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL05hbWVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvTmFtZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I2ODUyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvTmFtZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWVJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5OYW1lSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLk5hbWVJbXBsI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBOYW1lSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgTmFtZSB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQU5HX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsYW5nID0gTEFOR19FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBOYW1lSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXROYW1lXygpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKLQkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7Ci0JCXZhbHVlID0gbmV3VmFsdWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJUSW5kZXhQYWNrYWdlLk5BTUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORywgb2xkTGFuZywgbGFuZykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJcmV0dXJuIGdldFZhbHVlKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJc2V0TGFuZyhMQU5HX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJcmV0dXJuIFZBTFVFX0VERUZBVUxUID09IG51bGwgPyB2YWx1ZSAhPSBudWxsIDogIVZBTFVFX0VERUZBVUxULmVxdWFscyh2YWx1ZSk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL05hbWVJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZmEzM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleEZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJUSW5kZXhGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFJUSW5kZXhGYWN0b3J5IHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuZCBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleEZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OOiByZXR1cm4gY3JlYXRlRGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVDogcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWDogcmV0dXJuIGNyZWF0ZUluZGV4KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUU6IHJldHVybiBjcmVhdGVOYW1lKCk7Ci0JCQlkZWZhdWx0OgotCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRGVzY3JpcHRpb24gY3JlYXRlRGVzY3JpcHRpb24oKSB7Ci0JCURlc2NyaXB0aW9uSW1wbCBkZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbkltcGwoKTsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCkgewotCQlEb2N1bWVudFJvb3RJbXBsIGRvY3VtZW50Um9vdCA9IG5ldyBEb2N1bWVudFJvb3RJbXBsKCk7Ci0JCXJldHVybiBkb2N1bWVudFJvb3Q7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEluZGV4IGNyZWF0ZUluZGV4KCkgewotCQlJbmRleEltcGwgaW5kZXggPSBuZXcgSW5kZXhJbXBsKCk7Ci0JCXJldHVybiBpbmRleDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBjcmVhdGVOYW1lKCkgewotCQlOYW1lSW1wbCBuYW1lID0gbmV3IE5hbWVJbXBsKCk7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4UGFja2FnZSBnZXRSVEluZGV4UGFja2FnZSgpIHsKLQkJcmV0dXJuIChSVEluZGV4UGFja2FnZSlnZXRFUGFja2FnZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGRlcHJlY2F0ZWQKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBSVEluZGV4UGFja2FnZSBnZXRQYWNrYWdlKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1JUSW5kZXhGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk3NTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4UGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhQYWNrYWdlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlhNTFR5cGVQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwuWE1MVHlwZVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJUSW5kZXhQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFJUSW5kZXhQYWNrYWdlIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkZXNjcmlwdGlvbkVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkb2N1bWVudFJvb3RFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgaW5kZXhFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgbmFtZUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLQkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLQkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0JICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLQkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZU5TX1VSSQotCSAqIEBzZWUgI2luaXQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIFJUSW5kZXhQYWNrYWdlSW1wbCgpIHsKLQkJc3VwZXIoZU5TX1VSSSwgUlRJbmRleEZhY3RvcnkuZUlOU1RBTkNFKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLQkgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0JICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0JICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0JICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotCSAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLQkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotCSAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0JICogdGhvc2Ugb2YgYW5vdGhlci4KLQkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0JICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZU5TX1VSSQotCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0JICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUlRJbmRleFBhY2thZ2UgaW5pdCgpIHsKLQkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFJUSW5kZXhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLQkJUlRJbmRleFBhY2thZ2VJbXBsIHRoZVJUSW5kZXhQYWNrYWdlID0gKFJUSW5kZXhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBSVEluZGV4UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBSVEluZGV4UGFja2FnZUltcGwoKSk7Ci0KLQkJaXNJbml0ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotCQlYTUxUeXBlUGFja2FnZUltcGwuaW5pdCgpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCi0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRheG9ub215UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgOiBUYXhvbm9teVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVVERElSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVVERElSZWdpc3RyeVBhY2thZ2UgPSAoVURESVJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCi0JCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0JCXRoZVJUSW5kZXhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0JCXRoZVJUSW5kZXhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotCQl0aGVSVEluZGV4UGFja2FnZS5mcmVlemUoKTsKLQotCQlyZXR1cm4gdGhlUlRJbmRleFBhY2thZ2U7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX1ZhbHVlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVzY3JpcHRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVzY3JpcHRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERvY3VtZW50Um9vdCgpIHsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdEVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfSW5kZXgoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0SW5kZXgoKSB7Ci0JCXJldHVybiBpbmRleEVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmRleF9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW5kZXhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmRleF9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWluZGV4RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5kZXhfUmVnaXN0cnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlpbmRleEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEluZGV4X1RheG9ub215KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW5kZXhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldE5hbWVfKCkgewotCQlyZXR1cm4gbmFtZUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleEZhY3RvcnkgZ2V0UlRJbmRleEZhY3RvcnkoKSB7Ci0JCXJldHVybiAoUlRJbmRleEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKLQkJaXNDcmVhdGVkID0gdHJ1ZTsKLQotCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLQkJZGVzY3JpcHRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVTQ1JJUFRJT04pOwotCQljcmVhdGVFQXR0cmlidXRlKGRlc2NyaXB0aW9uRUNsYXNzLCBERVNDUklQVElPTl9fVkFMVUUpOwotCQljcmVhdGVFQXR0cmlidXRlKGRlc2NyaXB0aW9uRUNsYXNzLCBERVNDUklQVElPTl9fTEFORyk7Ci0KLQkJZG9jdW1lbnRSb290RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPQ1VNRU5UX1JPT1QpOwotCQljcmVhdGVFQXR0cmlidXRlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX0lOREVYKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX05BTUUpOwotCi0JCWluZGV4RUNsYXNzID0gY3JlYXRlRUNsYXNzKElOREVYKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShpbmRleEVDbGFzcywgSU5ERVhfX05BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKGluZGV4RUNsYXNzLCBJTkRFWF9fREVTQ1JJUFRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGluZGV4RUNsYXNzLCBJTkRFWF9fUkVHSVNUUlkpOwotCQljcmVhdGVFUmVmZXJlbmNlKGluZGV4RUNsYXNzLCBJTkRFWF9fVEFYT05PTVkpOwotCi0JCW5hbWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTkFNRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fVkFMVUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX0xBTkcpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKLQkJaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0JCXNldE5hbWUoZU5BTUUpOwotCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLQkJc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotCQlYTUxUeXBlUGFja2FnZUltcGwgdGhlWE1MVHlwZVBhY2thZ2UgPSAoWE1MVHlwZVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFhNTFR5cGVQYWNrYWdlLmVOU19VUkkpOwotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKTsKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotCi0JCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0JCWluaXRFQ2xhc3MoZGVzY3JpcHRpb25FQ2xhc3MsIERlc2NyaXB0aW9uLmNsYXNzLCAiRGVzY3JpcHRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERlc2NyaXB0aW9uX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBEZXNjcmlwdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERlc2NyaXB0aW9uX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBEZXNjcmlwdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhkb2N1bWVudFJvb3RFQ2xhc3MsIERvY3VtZW50Um9vdC5jbGFzcywgIkRvY3VtZW50Um9vdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIGVjb3JlUGFja2FnZS5nZXRFRmVhdHVyZU1hcEVudHJ5KCksICJtaXhlZCIsIG51bGwsIDAsIC0xLCBudWxsLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieE1MTlNQcmVmaXhNYXAiLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieFNJU2NoZW1hTG9jYXRpb24iLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9JbmRleCgpLCB0aGlzLmdldEluZGV4KCksIG51bGwsICJpbmRleCIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJuYW1lIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhpbmRleEVDbGFzcywgSW5kZXguY2xhc3MsICJJbmRleCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0SW5kZXhfTmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJuYW1lIiwgbnVsbCwgMSwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9EZXNjcmlwdGlvbigpLCB0aGlzLmdldERlc2NyaXB0aW9uKCksIG51bGwsICJkZXNjcmlwdGlvbiIsIG51bGwsIDEsIC0xLCBJbmRleC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0SW5kZXhfUmVnaXN0cnkoKSwgdGhlUmVnaXN0cnlQYWNrYWdlLmdldFJlZ2lzdHJ5KCksIG51bGwsICJyZWdpc3RyeSIsIG51bGwsIDAsIC0xLCBJbmRleC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0SW5kZXhfVGF4b25vbXkoKSwgdGhlVGF4b25vbXlQYWNrYWdlLmdldFRheG9ub215KCksIG51bGwsICJ0YXhvbm9teSIsIG51bGwsIDAsIC0xLCBJbmRleC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKG5hbWVFQ2xhc3MsIE5hbWUuY2xhc3MsICJOYW1lIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9MYW5nKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldExhbmd1YWdlKCksICJsYW5nIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJLy8gQ3JlYXRlIHJlc291cmNlCi0JCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotCi0JCS8vIENyZWF0ZSBhbm5vdGF0aW9ucwotCQkvLyBodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEKLQkJY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhlIGFubm90YXRpb25zIGZvciA8Yj5odHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGE8L2I+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpIHsKLQkJU3RyaW5nIHNvdXJjZSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiOwkJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRlc2NyaXB0aW9uRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJEZXNjcmlwdGlvbiIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERlc2NyaXB0aW9uX1ZhbHVlKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIjowIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RGVzY3JpcHRpb25fTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRvY3VtZW50Um9vdEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiIiwKLQkJCSAia2luZCIsICJtaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudFdpbGRjYXJkIiwKLQkJCSAibmFtZSIsICI6bWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieG1sbnM6cHJlZml4IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhzaTpzY2hlbWFMb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGVzY3JpcHRpb24iLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X0luZGV4KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImluZGV4IiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5hbWUiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoaW5kZXhFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkluZGV4IiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0SW5kZXhfRGVzY3JpcHRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGVzY3JpcHRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0SW5kZXhfUmVnaXN0cnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAicmVnaXN0cnkiLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0SW5kZXhfVGF4b25vbXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbXkiLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAobmFtZUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiTmFtZSIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX0xhbmcoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsYW5nIiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQkJICAgfSk7Ci0JfQotCi19IC8vUlRJbmRleFBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZGU0MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleEFkYXB0ZXJGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBSVEluZGV4UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgewotCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgUlRJbmRleFN3aXRjaCBtb2RlbFN3aXRjaCA9Ci0JCW5ldyBSVEluZGV4U3dpdGNoKCkgewotCQkJcHVibGljIE9iamVjdCBjYXNlRGVzY3JpcHRpb24oRGVzY3JpcHRpb24gb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURlc2NyaXB0aW9uQWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlSW5kZXgoSW5kZXggb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUluZGV4QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVOYW1lQWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotCQkJfQotCQl9OwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLQkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKLQkJcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0JfQotCi0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlc2NyaXB0aW9uQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXggPGVtPkluZGV4PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbmRleEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlTmFtZUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SVEluZGV4QWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMDlmY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWwuUlRJbmRleFJlc291cmNlSW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JCWV4dGVuZGVkTWV0YURhdGEgPSBFeHRlbmRlZE1ldGFEYXRhLklOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7Ci0JCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBSVEluZGV4UmVzb3VyY2VJbXBsKHVyaSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0gLy9SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4UmVzb3VyY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMzE2NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFJlc291cmNlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWwuUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJUSW5kZXhSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgewotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHVyaSB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4UmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKLQkJc3VwZXIodXJpKTsKLQl9Ci0KLX0gLy9SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4U3dpdGNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODViZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhTd2l0Y2guamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KLSAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KLSAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKLSAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0Ci0gKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5Ci0gKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKLSAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJUSW5kZXhTd2l0Y2ggewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgUlRJbmRleFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4U3dpdGNoKCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKLQkJfQotCQllbHNlIHsKLQkJCUxpc3QgZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKLQkJCXJldHVybgotCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/Ci0JCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKLQkJCQkJZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTjogewotCQkJCURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVg6IHsKLQkJCQlJbmRleCBpbmRleCA9IChJbmRleCl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlSW5kZXgoaW5kZXgpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRTogewotCQkJCU5hbWUgbmFtZSA9IChOYW1lKXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VOYW1lKG5hbWUpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRGVzY3JpcHRpb24oRGVzY3JpcHRpb24gb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlSW5kZXgoSW5kZXggb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vUlRJbmRleFN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvQ2F0ZWdvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0NhdGVnb3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1M2Q5NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvQ2F0ZWdvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IENhdGVnb3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q29kZSA8ZW0+Q29kZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeSgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ2F0ZWdvcnkgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5ObG5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWV9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmxuYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmxuYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnlfTmxuYW1lKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRObG5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnlfQ2F0ZWdvcnkoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRDYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29kZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q29kZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Db2RlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRDb2RlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldENhdGVnb3J5X0NvZGUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldENvZGUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q29kZSA8ZW0+Q29kZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q29kZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0Q29kZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0Q29kZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldENhdGVnb3J5X05hbWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi19IC8vIENhdGVnb3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9Eb2N1bWVudFJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0RvY3VtZW50Um9vdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzAyNGU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0RvY3VtZW50Um9vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdCgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSb290IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwLkVudHJ5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTWl4ZWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGZWF0dXJlTWFwRW50cnkiIG1hbnk9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUZlYXR1cmVNYXAgZ2V0TWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldENhdGVnb3J5KENhdGVnb3J5KQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQ2F0ZWdvcnkgZ2V0Q2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRDYXRlZ29yeShDYXRlZ29yeSB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldE5hbWUoTmFtZSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9OYW1lKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKE5hbWUgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRUYXhvbm9teShUYXhvbm9teSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9UYXhvbm9teSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215IGdldFRheG9ub215KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VGF4b25vbXkoVGF4b25vbXkgdmFsdWUpOwotCi19IC8vIERvY3VtZW50Um9vdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDFlY2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldE5hbWVfKCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBOYW1lIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXROYW1lX1ZhbHVlKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRWYWx1ZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMYW5nKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldE5hbWVfTGFuZygpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuTGFuZ3VhZ2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMYW5nKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TGFuZyhTdHJpbmcgdmFsdWUpOwotCi19IC8vIE5hbWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTRiZTA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldElkIDxlbT5JZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRSZWYgPGVtPlJlZjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRUbW9kZWxLZXkgPGVtPlRtb2RlbCBLZXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUYXhvbm9teSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5sbmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5ObG5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5ObG5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9ObG5hbWUoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldE5sbmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9DYXRlZ29yeSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldENhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldElkKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X0lkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRJZCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRJZCA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0SWQoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TG9jYXRpb24oU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfTG9jYXRpb24oKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X05hbWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVmPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRSZWYoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfUmVmKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRSZWYoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0UmVmIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0UmVmKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRSZWYoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRtb2RlbCBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRtb2RlbCBLZXk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VG1vZGVsIEtleTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VG1vZGVsS2V5KFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X1Rtb2RlbEtleSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFRtb2RlbEtleSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRUbW9kZWxLZXkgPGVtPlRtb2RlbCBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRtb2RlbCBLZXk8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFRtb2RlbEtleSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VG1vZGVsS2V5KFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gVGF4b25vbXkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNmZkYmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVGF4b25vbXlGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgewotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXlGYWN0b3J5IGVJTlNUQU5DRSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlGYWN0b3J5SW1wbCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUNhdGVnb3J5IGNyZWF0ZUNhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBjcmVhdGVOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXkgY3JlYXRlVGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXlQYWNrYWdlIGdldFRheG9ub215UGFja2FnZSgpOwotCi19IC8vVGF4b25vbXlGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teVBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215UGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmQ5NmY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215UGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUwICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlQYWNrYWdlLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAKLSAqICAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICogCi0gKiAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KLSAqICAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAKLSAqIAotICogICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZAotICogICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZQotICogICAgIGZvbGxvd2luZyBuYW1lcyBhcmUgY3VycmVudGx5IGRlZmluZWQgaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHNob3VsZAotICogICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLAotICogICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOgotICogCi0gKiAgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQotICogICAgICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKLSAqICAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELgotICogICAgICAgICAgVGhlIHhtbDppZCBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQgYSBXM0MgUmVjb21tZW5kYXRpb24sCi0gKiAgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbgotICogICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZAotICogICAgICAgICAgaW4gdGhlIHNwZWNpYWxBdHRycyBhdHRyaWJ1dGUgZ3JvdXAuCi0gKiAKLSAqICAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCi0gKiAgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqICAgCi0gKiAgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UKLSAqICAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nCi0gKiAgICAgICAgICBkaXNjaXBsaW5lIGlzIGludGVuZGVkIGZvciB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudDsgaXRzCi0gKiAgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cwotICogICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgCi0gKiAgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgCi0gKiAgICAgICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAotICogICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6Ci0gKiAKLSAqICAgICAgICAgICAgICBJbiBhcHByZWNpYXRpb24gZm9yIGhpcyB2aXNpb24sIGxlYWRlcnNoaXAgYW5kIGRlZGljYXRpb24KLSAqICAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAKLSAqICAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lCi0gKiAgICAgICAgICAgICAgeG1sOkZhdGhlcgotICogICAKLSAqIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gKiAgICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAqICAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZAotICogICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotICogCi0gKiAgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gKiAgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICogICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gKiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLyZndDsKLSAqIAotICogICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gKiAgICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLSAqIAotICogICAgICAgICAmbHQ7dHlwZSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8mZ3Q7Ci0gKiAgCi0gKiAgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAqICAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcwotICogSW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICogICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4KLSAqICAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gKiAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICogICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICogICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MCi0gKiAgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAqICAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAqICAgCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlGYWN0b3J5Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVGF4b25vbXlQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgewotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOQU1FID0gInRheG9ub215IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19QUkVGSVggPSAidGF4b25vbXkiOwotCi0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwuaW5pdCgpOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuQ2F0ZWdvcnlJbXBsIDxlbT5DYXRlZ29yeTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IENBVEVHT1JZID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5ObG5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX19OTE5BTUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBDQVRFR09SWV9fQ0FURUdPUlkgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBDQVRFR09SWV9fQ09ERSA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX19OQU1FID0gMzsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfRkVBVFVSRV9DT1VOVCA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsIDxlbT5Eb2N1bWVudCBSb290PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTUlYRUQgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19DQVRFR09SWSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX05BTUUgPSA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fVEFYT05PTVkgPSA1OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfRkVBVFVSRV9DT1VOVCA9IDY7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5OYW1lSW1wbCA8ZW0+TmFtZTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5OYW1lSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgTkFNRSA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5OYW1lPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwgPGVtPlRheG9ub215PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgVEFYT05PTVkgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5sbmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX05MTkFNRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19DQVRFR09SWSA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fSUQgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX0xPQ0FUSU9OID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX05BTUUgPSA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19SRUYgPSA1OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRtb2RlbCBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fVE1PREVMX0tFWSA9IDY7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX0ZFQVRVUkVfQ09VTlQgPSA3OwotCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldENhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+TmxuYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRObG5hbWUoKQotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRDYXRlZ29yeV9ObG5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENhdGVnb3J5KCkKLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0Q2F0ZWdvcnlfQ2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlIDxlbT5Db2RlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q29kZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q29kZSgpCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldENhdGVnb3J5X0NvZGUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldENhdGVnb3J5X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NaXhlZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE1peGVkKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldE5hbWVfKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRWYWx1ZSgpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldExhbmcoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0VGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5ObG5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5sbmFtZSgpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFRheG9ub215X05sbmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRUYXhvbm9teV9DYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldElkIDxlbT5JZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPklkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRJZCgpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFRheG9ub215X0lkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldExvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFRheG9ub215X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRSZWYgPGVtPlJlZjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0UmVmKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfUmVmKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0VG1vZGVsS2V5IDxlbT5UbW9kZWwgS2V5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VG1vZGVsIEtleTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0VG1vZGVsS2V5KCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teUZhY3RvcnkgZ2V0VGF4b25vbXlGYWN0b3J5KCk7Ci0KLX0gLy9UYXhvbm9teVBhY2thZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvQ2F0ZWdvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0NhdGVnb3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWIyZTNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvQ2F0ZWdvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBDYXRlZ29yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuQ2F0ZWdvcnlJbXBsI2dldENvZGUgPGVtPkNvZGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIENhdGVnb3J5SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgQ2F0ZWdvcnkgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5sbmFtZSgpIDxlbT5ObG5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmxuYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgbmxuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENhdGVnb3J5KCkgPGVtPkNhdGVnb3J5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgY2F0ZWdvcnkgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvZGUoKSA8ZW0+Q29kZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0Q29kZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb2RlKCkgPGVtPkNvZGU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldENvZGUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgY29kZSA9IENPREVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBDYXRlZ29yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldENhdGVnb3J5KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldE5sbmFtZSgpIHsKLQkJaWYgKG5sbmFtZSA9PSBudWxsKSB7Ci0JCQlubG5hbWUgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoTmFtZS5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUUpOwotCQl9Ci0JCXJldHVybiBubG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldENhdGVnb3J5KCkgewotCQlpZiAoY2F0ZWdvcnkgPT0gbnVsbCkgewotCQkJY2F0ZWdvcnkgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoQ2F0ZWdvcnkuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlkpOwotCQl9Ci0JCXJldHVybiBjYXRlZ29yeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldENvZGUoKSB7Ci0JCXJldHVybiBjb2RlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldENvZGUoU3RyaW5nIG5ld0NvZGUpIHsKLQkJU3RyaW5nIG9sZENvZGUgPSBjb2RlOwotCQljb2RlID0gbmV3Q29kZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFLCBvbGRDb2RlLCBjb2RlKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKSB7Ci0JCVN0cmluZyBvbGROYW1lID0gbmFtZTsKLQkJbmFtZSA9IG5ld05hbWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUU6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TmxuYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlk6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0Q2F0ZWdvcnkoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmxuYW1lKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGdldENhdGVnb3J5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ09ERToKLQkJCQlyZXR1cm4gZ2V0Q29kZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FOgotCQkJCWdldE5sbmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmxuYW1lKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlk6Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5jbGVhcigpOwotCQkJCWdldENhdGVnb3J5KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ09ERToKLQkJCQlzZXRDb2RlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OQU1FOgotCQkJCXNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUU6Ci0JCQkJZ2V0TmxuYW1lKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlk6Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXNldENvZGUoQ09ERV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05BTUU6Ci0JCQkJc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUU6Ci0JCQkJcmV0dXJuIG5sbmFtZSAhPSBudWxsICYmICFubG5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NBVEVHT1JZOgotCQkJCXJldHVybiBjYXRlZ29yeSAhPSBudWxsICYmICFjYXRlZ29yeS5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ09ERToKLQkJCQlyZXR1cm4gQ09ERV9FREVGQVVMVCA9PSBudWxsID8gY29kZSAhPSBudWxsIDogIUNPREVfRURFRkFVTFQuZXF1YWxzKGNvZGUpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05BTUU6Ci0JCQkJcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKGNvZGU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGNvZGUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIG5hbWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKG5hbWUpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9DYXRlZ29yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Nzg3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3RJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5CYXNpY0ZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFJvb3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb2N1bWVudFJvb3QgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1peGVkKCkgPGVtPk1peGVkPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE1peGVkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRmVhdHVyZU1hcCBtaXhlZCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYTUxOU1ByZWZpeE1hcCgpIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeE1MTlNQcmVmaXhNYXAgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhTSVNjaGVtYUxvY2F0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEb2N1bWVudFJvb3RJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3QoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRmVhdHVyZU1hcCBnZXRNaXhlZCgpIHsKLQkJaWYgKG1peGVkID09IG51bGwpIHsKLQkJCW1peGVkID0gbmV3IEJhc2ljRmVhdHVyZU1hcCh0aGlzLCBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQl9Ci0JCXJldHVybiBtaXhlZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpIHsKLQkJaWYgKHhNTE5TUHJlZml4TWFwID09IG51bGwpIHsKLQkJCXhNTE5TUHJlZml4TWFwID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQl9Ci0JCXJldHVybiB4TUxOU1ByZWZpeE1hcDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJaWYgKHhTSVNjaGVtYUxvY2F0aW9uID09IG51bGwpIHsKLQkJCXhTSVNjaGVtYUxvY2F0aW9uID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQl9Ci0JCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQ2F0ZWdvcnkgZ2V0Q2F0ZWdvcnkoKSB7Ci0JCXJldHVybiAoQ2F0ZWdvcnkpZ2V0TWl4ZWQoKS5nZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0Q2F0ZWdvcnkoQ2F0ZWdvcnkgbmV3Q2F0ZWdvcnksIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpLCBuZXdDYXRlZ29yeSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q2F0ZWdvcnkoQ2F0ZWdvcnkgbmV3Q2F0ZWdvcnkpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpLCBuZXdDYXRlZ29yeSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIChOYW1lKWdldE1peGVkKCkuZ2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0TmFtZShOYW1lIG5ld05hbWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUoTmFtZSBuZXdOYW1lKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgZ2V0VGF4b25vbXkoKSB7Ci0JCXJldHVybiAoVGF4b25vbXkpZ2V0TWl4ZWQoKS5nZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VGF4b25vbXkoVGF4b25vbXkgbmV3VGF4b25vbXksIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpLCBuZXdUYXhvbm9teSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGF4b25vbXkoVGF4b25vbXkgbmV3VGF4b25vbXkpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpLCBuZXdUYXhvbm9teSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TWl4ZWQoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WE1MTlNQcmVmaXhNYXAoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRDYXRlZ29yeShudWxsLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCQlyZXR1cm4gYmFzaWNTZXROYW1lKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRUYXhvbm9teShudWxsLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBnZXRNaXhlZCgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4gZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19DQVRFR09SWToKLQkJCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZOgotCQkJCXJldHVybiBnZXRUYXhvbm9teSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlnZXRNaXhlZCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19DQVRFR09SWToKLQkJCQlzZXRDYXRlZ29yeSgoQ2F0ZWdvcnkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJc2V0VGF4b25vbXkoKFRheG9ub215KW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCXNldENhdGVnb3J5KChDYXRlZ29yeSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJc2V0VGF4b25vbXkoKFRheG9ub215KW51bGwpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIG1peGVkICE9IG51bGwgJiYgIW1peGVkLmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwICE9IG51bGwgJiYgIXhNTE5TUHJlZml4TWFwLmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgIXhTSVNjaGVtYUxvY2F0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCXJldHVybiBnZXRDYXRlZ29yeSgpICE9IG51bGw7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCkgIT0gbnVsbDsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZOgotCQkJCXJldHVybiBnZXRUYXhvbm9teSgpICE9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChtaXhlZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQobWl4ZWQpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9Eb2N1bWVudFJvb3RJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL05hbWVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL05hbWVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNTViZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9OYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuTmFtZUltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuTmFtZUltcGwjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE5hbWVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBOYW1lIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE5hbWVJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXROYW1lXygpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKLQkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7Ci0JCXZhbHVlID0gbmV3VmFsdWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYW5nKCkgewotCQlyZXR1cm4gbGFuZzsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYW5nKFN0cmluZyBuZXdMYW5nKSB7Ci0JCVN0cmluZyBvbGRMYW5nID0gbGFuZzsKLQkJbGFuZyA9IG5ld0xhbmc7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJcmV0dXJuIGdldFZhbHVlKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXJldHVybiBnZXRMYW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJcmV0dXJuIFZBTFVFX0VERUZBVUxUID09IG51bGwgPyB2YWx1ZSAhPSBudWxsIDogIVZBTFVFX0VERUZBVUxULmVxdWFscyh2YWx1ZSk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXJldHVybiBMQU5HX0VERUZBVUxUID09IG51bGwgPyBsYW5nICE9IG51bGwgOiAhTEFOR19FREVGQVVMVC5lcXVhbHMobGFuZyk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmFsdWUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxhbmc6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxhbmcpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9OYW1lSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215RmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y1YjU0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215RmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215RmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teUZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgVGF4b25vbXlGYWN0b3J5IHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuZCBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgewotCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUlk6IHJldHVybiBjcmVhdGVDYXRlZ29yeSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRTogcmV0dXJuIGNyZWF0ZU5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZOiByZXR1cm4gY3JlYXRlVGF4b25vbXkoKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBDYXRlZ29yeSBjcmVhdGVDYXRlZ29yeSgpIHsKLQkJQ2F0ZWdvcnlJbXBsIGNhdGVnb3J5ID0gbmV3IENhdGVnb3J5SW1wbCgpOwotCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKSB7Ci0JCURvY3VtZW50Um9vdEltcGwgZG9jdW1lbnRSb290ID0gbmV3IERvY3VtZW50Um9vdEltcGwoKTsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBjcmVhdGVOYW1lKCkgewotCQlOYW1lSW1wbCBuYW1lID0gbmV3IE5hbWVJbXBsKCk7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBjcmVhdGVUYXhvbm9teSgpIHsKLQkJVGF4b25vbXlJbXBsIHRheG9ub215ID0gbmV3IFRheG9ub215SW1wbCgpOwotCQlyZXR1cm4gdGF4b25vbXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215UGFja2FnZSBnZXRUYXhvbm9teVBhY2thZ2UoKSB7Ci0JCXJldHVybiAoVGF4b25vbXlQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZGVwcmVjYXRlZAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRheG9ub215UGFja2FnZSBnZXRQYWNrYWdlKCkgewotCQlyZXR1cm4gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRTsKLQl9Ci0KLX0gLy9UYXhvbm9teUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3ODk1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldElkIDxlbT5JZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRSZWYgPGVtPlJlZjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRUbW9kZWxLZXkgPGVtPlRtb2RlbCBLZXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFRheG9ub215IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRObG5hbWUoKSA8ZW0+TmxuYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5sbmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IG5sbmFtZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDYXRlZ29yeSgpIDxlbT5DYXRlZ29yeTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IGNhdGVnb3J5ID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZCgpIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBpZCA9IElEX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWYoKSA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWYoKSA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgcmVmID0gUkVGX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRtb2RlbEtleSgpIDxlbT5UbW9kZWwgS2V5PC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUbW9kZWxLZXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRNT0RFTF9LRVlfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VG1vZGVsS2V5KCkgPGVtPlRtb2RlbCBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRtb2RlbEtleSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB0bW9kZWxLZXkgPSBUTU9ERUxfS0VZX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFRheG9ub215SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0VGF4b25vbXkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmxuYW1lKCkgewotCQlpZiAobmxuYW1lID09IG51bGwpIHsKLQkJCW5sbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRSk7Ci0JCX0KLQkJcmV0dXJuIG5sbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0Q2F0ZWdvcnkoKSB7Ci0JCWlmIChjYXRlZ29yeSA9PSBudWxsKSB7Ci0JCQljYXRlZ29yeSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChDYXRlZ29yeS5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWSk7Ci0JCX0KLQkJcmV0dXJuIGNhdGVnb3J5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgbmV3SWQpIHsKLQkJU3RyaW5nIG9sZElkID0gaWQ7Ci0JCWlkID0gbmV3SWQ7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQsIG9sZElkLCBpZCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKSB7Ci0JCXJldHVybiBsb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbmV3TG9jYXRpb24pIHsKLQkJU3RyaW5nIG9sZExvY2F0aW9uID0gbG9jYXRpb247Ci0JCWxvY2F0aW9uID0gbmV3TG9jYXRpb247Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTE9DQVRJT04sIG9sZExvY2F0aW9uLCBsb2NhdGlvbikpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkgewotCQlTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0JCW5hbWUgPSBuZXdOYW1lOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJlZigpIHsKLQkJcmV0dXJuIHJlZjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZWYoU3RyaW5nIG5ld1JlZikgewotCQlTdHJpbmcgb2xkUmVmID0gcmVmOwotCQlyZWYgPSBuZXdSZWY7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGLCBvbGRSZWYsIHJlZikpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VG1vZGVsS2V5KCkgewotCQlyZXR1cm4gdG1vZGVsS2V5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRtb2RlbEtleShTdHJpbmcgbmV3VG1vZGVsS2V5KSB7Ci0JCVN0cmluZyBvbGRUbW9kZWxLZXkgPSB0bW9kZWxLZXk7Ci0JCXRtb2RlbEtleSA9IG5ld1Rtb2RlbEtleTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZLCBvbGRUbW9kZWxLZXksIHRtb2RlbEtleSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUU6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TmxuYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlk6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0Q2F0ZWdvcnkoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmxuYW1lKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGdldENhdGVnb3J5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJcmV0dXJuIGdldElkKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRjoKLQkJCQlyZXR1cm4gZ2V0UmVmKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fVE1PREVMX0tFWToKLQkJCQlyZXR1cm4gZ2V0VG1vZGVsS2V5KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRToKLQkJCQlnZXRObG5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5sbmFtZSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCWdldENhdGVnb3J5KCkuY2xlYXIoKTsKLQkJCQlnZXRDYXRlZ29yeSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0lEOgotCQkJCXNldElkKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRToKLQkJCQlzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19SRUY6Ci0JCQkJc2V0UmVmKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZOgotCQkJCXNldFRtb2RlbEtleSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRToKLQkJCQlnZXRObG5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQlnZXRDYXRlZ29yeSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0lEOgotCQkJCXNldElkKElEX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oTE9DQVRJT05fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FOgotCQkJCXNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRjoKLQkJCQlzZXRSZWYoUkVGX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fVE1PREVMX0tFWToKLQkJCQlzZXRUbW9kZWxLZXkoVE1PREVMX0tFWV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCXJldHVybiBubG5hbWUgIT0gbnVsbCAmJiAhbmxuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQlyZXR1cm4gY2F0ZWdvcnkgIT0gbnVsbCAmJiAhY2F0ZWdvcnkuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0lEOgotCQkJCXJldHVybiBJRF9FREVGQVVMVCA9PSBudWxsID8gaWQgIT0gbnVsbCA6ICFJRF9FREVGQVVMVC5lcXVhbHMoaWQpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05BTUU6Ci0JCQkJcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19SRUY6Ci0JCQkJcmV0dXJuIFJFRl9FREVGQVVMVCA9PSBudWxsID8gcmVmICE9IG51bGwgOiAhUkVGX0VERUZBVUxULmVxdWFscyhyZWYpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVk6Ci0JCQkJcmV0dXJuIFRNT0RFTF9LRVlfRURFRkFVTFQgPT0gbnVsbCA/IHRtb2RlbEtleSAhPSBudWxsIDogIVRNT0RFTF9LRVlfRURFRkFVTFQuZXF1YWxzKHRtb2RlbEtleSk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChpZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoaWQpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxvY2F0aW9uOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbmFtZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQobmFtZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgcmVmOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChyZWYpOwotCQlyZXN1bHQuYXBwZW5kKCIsIHRtb2RlbEtleTogIik7Ci0JCXJlc3VsdC5hcHBlbmQodG1vZGVsS2V5KTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vVGF4b25vbXlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215UGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmY3ZGE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjU4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlQYWNrYWdlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5YTUxUeXBlUGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsLlhNTFR5cGVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFRheG9ub215UGFja2FnZSB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgY2F0ZWdvcnlFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZG9jdW1lbnRSb290RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIG5hbWVFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgdGF4b25vbXlFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0JICogcGFja2FnZSBVUkkgdmFsdWUuCi0JICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0JICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLQkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZU5TX1VSSQotCSAqIEBzZWUgI2luaXQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIFRheG9ub215UGFja2FnZUltcGwoKSB7Ci0JCXN1cGVyKGVOU19VUkksIFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0JICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLQkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLQkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0JICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLQkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0JICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0JICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0JICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLQkgKiB0aG9zZSBvZiBhbm90aGVyLgotCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNlTlNfVVJJCi0JICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBUYXhvbm9teVBhY2thZ2UgaW5pdCgpIHsKLQkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFRheG9ub215UGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFRheG9ub215UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBUYXhvbm9teVBhY2thZ2VJbXBsKCkpOwotCi0JCWlzSW5pdGVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcwotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIDogUlRJbmRleFBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVVERElSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVVERElSZWdpc3RyeVBhY2thZ2UgPSAoVURESVJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCi0JCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0JCXRoZVRheG9ub215UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotCQl0aGVUYXhvbm9teVBhY2thZ2UuZnJlZXplKCk7Ci0KLQkJcmV0dXJuIHRoZVRheG9ub215UGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldENhdGVnb3J5KCkgewotCQlyZXR1cm4gY2F0ZWdvcnlFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0Q2F0ZWdvcnlfTmxuYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRDYXRlZ29yeV9DYXRlZ29yeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWNhdGVnb3J5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q2F0ZWdvcnlfQ29kZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWNhdGVnb3J5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q2F0ZWdvcnlfTmFtZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWNhdGVnb3J5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREb2N1bWVudFJvb3QoKSB7Ci0JCXJldHVybiBkb2N1bWVudFJvb3RFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldE5hbWVfKCkgewotCQlyZXR1cm4gbmFtZUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldFRheG9ub215KCkgewotCQlyZXR1cm4gdGF4b25vbXlFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VGF4b25vbXlfTmxuYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUYXhvbm9teV9DYXRlZ29yeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfSWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X0xvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9OYW1lKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9SZWYoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X1Rtb2RlbEtleSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215RmFjdG9yeSBnZXRUYXhvbm9teUZhY3RvcnkoKSB7Ci0JCXJldHVybiAoVGF4b25vbXlGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLQkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47Ci0JCWlzQ3JlYXRlZCA9IHRydWU7Ci0KLQkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0JCWNhdGVnb3J5RUNsYXNzID0gY3JlYXRlRUNsYXNzKENBVEVHT1JZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShjYXRlZ29yeUVDbGFzcywgQ0FURUdPUllfX05MTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoY2F0ZWdvcnlFQ2xhc3MsIENBVEVHT1JZX19DQVRFR09SWSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoY2F0ZWdvcnlFQ2xhc3MsIENBVEVHT1JZX19DT0RFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShjYXRlZ29yeUVDbGFzcywgQ0FURUdPUllfX05BTUUpOwotCi0JCWRvY3VtZW50Um9vdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET0NVTUVOVF9ST09UKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19DQVRFR09SWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19OQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZKTsKLQotCQluYW1lRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5BTUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19MQU5HKTsKLQotCQl0YXhvbm9teUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUQVhPTk9NWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19OTE5BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fQ0FURUdPUlkpOwotCQljcmVhdGVFQXR0cmlidXRlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fSUQpOwotCQljcmVhdGVFQXR0cmlidXRlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fTE9DQVRJT04pOwotCQljcmVhdGVFQXR0cmlidXRlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fTkFNRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19SRUYpOwotCQljcmVhdGVFQXR0cmlidXRlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fVE1PREVMX0tFWSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0JICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOwotCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKLQkJc2V0TmFtZShlTkFNRSk7Ci0JCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotCQlzZXROc1VSSShlTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotCi0JCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0JCWluaXRFQ2xhc3MoY2F0ZWdvcnlFQ2xhc3MsIENhdGVnb3J5LmNsYXNzLCAiQ2F0ZWdvcnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldENhdGVnb3J5X05sbmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJubG5hbWUiLCBudWxsLCAwLCAtMSwgQ2F0ZWdvcnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldENhdGVnb3J5X0NhdGVnb3J5KCksIHRoaXMuZ2V0Q2F0ZWdvcnkoKSwgbnVsbCwgImNhdGVnb3J5IiwgbnVsbCwgMCwgLTEsIENhdGVnb3J5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRDYXRlZ29yeV9Db2RlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAiY29kZSIsIG51bGwsIDAsIDEsIENhdGVnb3J5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0Q2F0ZWdvcnlfTmFtZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgIm5hbWUiLCBudWxsLCAwLCAxLCBDYXRlZ29yeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhkb2N1bWVudFJvb3RFQ2xhc3MsIERvY3VtZW50Um9vdC5jbGFzcywgIkRvY3VtZW50Um9vdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIGVjb3JlUGFja2FnZS5nZXRFRmVhdHVyZU1hcEVudHJ5KCksICJtaXhlZCIsIG51bGwsIDAsIC0xLCBudWxsLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieE1MTlNQcmVmaXhNYXAiLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieFNJU2NoZW1hTG9jYXRpb24iLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIHRoaXMuZ2V0Q2F0ZWdvcnkoKSwgbnVsbCwgImNhdGVnb3J5IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIHRoaXMuZ2V0VGF4b25vbXkoKSwgbnVsbCwgInRheG9ub215IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhuYW1lRUNsYXNzLCBOYW1lLmNsYXNzLCAiTmFtZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9WYWx1ZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3ModGF4b25vbXlFQ2xhc3MsIFRheG9ub215LmNsYXNzLCAiVGF4b25vbXkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFRheG9ub215X05sbmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJubG5hbWUiLCBudWxsLCAwLCAtMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFRheG9ub215X0NhdGVnb3J5KCksIHRoaXMuZ2V0Q2F0ZWdvcnkoKSwgbnVsbCwgImNhdGVnb3J5IiwgbnVsbCwgMCwgLTEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRUYXhvbm9teV9JZCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgImlkIiwgbnVsbCwgMCwgMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRUYXhvbm9teV9Mb2NhdGlvbigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgImxvY2F0aW9uIiwgbnVsbCwgMCwgMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRUYXhvbm9teV9OYW1lKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAibmFtZSIsIG51bGwsIDAsIDEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGF4b25vbXlfUmVmKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAicmVmIiwgbnVsbCwgMCwgMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRUYXhvbm9teV9UbW9kZWxLZXkoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ0bW9kZWxLZXkiLCBudWxsLCAxLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJLy8gQ3JlYXRlIHJlc291cmNlCi0JCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotCi0JCS8vIENyZWF0ZSBhbm5vdGF0aW9ucwotCQkvLyBodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEKLQkJY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhlIGFubm90YXRpb25zIGZvciA8Yj5odHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGE8L2I+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpIHsKLQkJU3RyaW5nIHNvdXJjZSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiOwkJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGNhdGVnb3J5RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJDYXRlZ29yeSIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0Q2F0ZWdvcnlfTmxuYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5sbmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRDYXRlZ29yeV9DYXRlZ29yeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJjYXRlZ29yeSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRDYXRlZ29yeV9Db2RlKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAiY29kZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRDYXRlZ29yeV9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChkb2N1bWVudFJvb3RFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIiIsCi0JCQkgImtpbmQiLCAibWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnRXaWxkY2FyZCIsCi0JCQkgIm5hbWUiLCAiOm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhtbG5zOnByZWZpeCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4c2k6c2NoZW1hTG9jYXRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImNhdGVnb3J5IiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5hbWUiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInRheG9ub215IiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKG5hbWVFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIk5hbWUiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX1ZhbHVlKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIjowIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAodGF4b25vbXlFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIlRheG9ub215IiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9ObG5hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmxuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X0NhdGVnb3J5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImNhdGVnb3J5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X0lkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAiaWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9SZWYoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJyZWYiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAidG1vZGVsS2V5IgotCQkgICB9KTsKLQl9Ci0KLX0gLy9UYXhvbm9teVBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215QWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzJiNzBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlBZGFwdGVyRmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBUYXhvbm9teVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teUFkYXB0ZXJGYWN0b3J5KCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgewotCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVGF4b25vbXlTd2l0Y2ggbW9kZWxTd2l0Y2ggPQotCQluZXcgVGF4b25vbXlTd2l0Y2goKSB7Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VDYXRlZ29yeShDYXRlZ29yeSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlQ2F0ZWdvcnlBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZU5hbWVBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VUYXhvbm9teShUYXhvbm9teSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlVGF4b25vbXlBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCX07Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgewotCQlyZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLQl9Ci0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVDYXRlZ29yeUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5hbWVBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlVGF4b25vbXlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vVGF4b25vbXlBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZDVjYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FeHRlbmRlZE1ldGFEYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbC5UYXhvbm9teVJlc291cmNlSW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEV4dGVuZGVkTWV0YURhdGEgZXh0ZW5kZWRNZXRhRGF0YTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQkJZXh0ZW5kZWRNZXRhRGF0YSA9IEV4dGVuZGVkTWV0YURhdGEuSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFRheG9ub215UmVzb3VyY2VJbXBsKHVyaSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0gLy9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNiZWQ5Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215UmVzb3VyY2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsLlRheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgewotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHVyaSB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teVJlc291cmNlSW1wbChVUkkgdXJpKSB7Ci0JCXN1cGVyKHVyaSk7Ci0JfQotCi19IC8vVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215U3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215U3dpdGNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZGRjNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlTd2l0Y2guamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVN3aXRjaCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBUYXhvbm9teVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teVN3aXRjaCgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotCQl9Ci0JCWVsc2UgewotCQkJTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotCQkJcmV0dXJuCi0JCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KLQkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgotCQkJCQlkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWTogewotCQkJCUNhdGVnb3J5IGNhdGVnb3J5ID0gKENhdGVnb3J5KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VDYXRlZ29yeShjYXRlZ29yeSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogewotCQkJCURvY3VtZW50Um9vdCBkb2N1bWVudFJvb3QgPSAoRG9jdW1lbnRSb290KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VEb2N1bWVudFJvb3QoZG9jdW1lbnRSb290KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FOiB7Ci0JCQkJTmFtZSBuYW1lID0gKE5hbWUpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZU5hbWUobmFtZSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVk6IHsKLQkJCQlUYXhvbm9teSB0YXhvbm9teSA9IChUYXhvbm9teSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlVGF4b25vbXkodGF4b25vbXkpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlQ2F0ZWdvcnkoQ2F0ZWdvcnkgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VUYXhvbm9teShUYXhvbm9teSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vVGF4b25vbXlTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4ZGNiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3QuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRVZGRpUmVnaXN0cnkgPGVtPlVkZGkgUmVnaXN0cnk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFJvb3QgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAuRW50cnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X01peGVkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmVhdHVyZU1hcEVudHJ5IiBtYW55PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlGZWF0dXJlTWFwIGdldE1peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0VGF4b25vbWllcyhUYXhvbm9taWVzKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub21pZXMgZ2V0VGF4b25vbWllcygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFRheG9ub21pZXMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbWllcyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VZGRpIFJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFVkZGlSZWdpc3RyeShVRERJUmVnaXN0cnkpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlVRERJUmVnaXN0cnkgZ2V0VWRkaVJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VWRkaVJlZ2lzdHJ5IDxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRVZGRpUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFVkZGlSZWdpc3RyeShVRERJUmVnaXN0cnkgdmFsdWUpOwotCi19IC8vIERvY3VtZW50Um9vdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1RheG9ub21pZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9UYXhvbm9taWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjN2ViY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1RheG9ub21pZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbWllcy5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFRheG9ub21pZXMoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRheG9ub21pZXMgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VGF4b25vbWllc19UYXhvbm9teSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldFRheG9ub215KCk7Ci0KLX0gLy8gVGF4b25vbWllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2YyMTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVERElSZWdpc3RyeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VmVyc2lvbiA8ZW0+VmVyc2lvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERpc2NvdmVyeVVSTCA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFB1YmxpY2F0aW9uVVJMIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdExvZ2luIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdFBhc3N3b3JkIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnkoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElSZWdpc3RyeSBleHRlbmRzIFJlZ2lzdHJ5IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZXJzaW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZXJzaW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlcnNpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZlcnNpb24oU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZlcnNpb24oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZXJzaW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWZXJzaW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EaXNjb3ZlcnkgVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaXNjb3ZlcnkgVVJMPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldERpc2NvdmVyeVVSTChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9EaXNjb3ZlcnlVUkwoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXREaXNjb3ZlcnlVUkwoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREaXNjb3ZlcnlVUkwgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGlzY292ZXJ5VVJMKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QdWJsaWNhdGlvbiBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFB1YmxpY2F0aW9uVVJMKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0UHVibGljYXRpb25VUkwoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRQdWJsaWNhdGlvblVSTCA8ZW0+UHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRQdWJsaWNhdGlvblVSTChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRTZWN1cmVkRGlzY292ZXJ5VVJMKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWREaXNjb3ZlcnlVUkwoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFNlY3VyZWREaXNjb3ZlcnlVUkwoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFNlY3VyZWRQdWJsaWNhdGlvblVSTChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVmYXVsdCBMb2dpbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWZhdWx0IExvZ2luPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXREZWZhdWx0TG9naW4oU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfRGVmYXVsdExvZ2luKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0RGVmYXVsdExvZ2luKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdExvZ2luIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWZhdWx0IExvZ2luPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXREZWZhdWx0TG9naW4oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldERlZmF1bHRMb2dpbihTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVmYXVsdCBQYXNzd29yZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXREZWZhdWx0UGFzc3dvcmQoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfRGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0RGVmYXVsdFBhc3N3b3JkKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdFBhc3N3b3JkIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXREZWZhdWx0UGFzc3dvcmQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldERlZmF1bHRQYXNzd29yZChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRUYXhvbm9taWVzKFRheG9ub21pZXMpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9UYXhvbm9taWVzKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbWllcyBnZXRUYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0VGF4b25vbWllcygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9taWVzIHZhbHVlKTsKLQotfSAvLyBVRERJUmVnaXN0cnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjEwYzcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeUZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElSZWdpc3RyeUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7Ci0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlVRERJUmVnaXN0cnlGYWN0b3J5IGVJTlNUQU5DRSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUZhY3RvcnlJbXBsKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbWllcyBjcmVhdGVUYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVERElSZWdpc3RyeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlVRERJUmVnaXN0cnkgY3JlYXRlVURESVJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeVBhY2thZ2UgZ2V0VURESVJlZ2lzdHJ5UGFja2FnZSgpOwotCi19IC8vVURESVJlZ2lzdHJ5RmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeVBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZTVhZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeVBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2OCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVBhY2thZ2UuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIAotICogICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIGFuZAotICogICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuCi0gKiAKLSAqICAgICBUaGlzIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliZXMgdGhlIFhNTCBuYW1lc3BhY2UsIGluIGEgZm9ybQotICogICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gIAotICogCi0gKiAgICAgTm90ZSB0aGF0IGxvY2FsIG5hbWVzIGluIHRoaXMgbmFtZXNwYWNlIGFyZSBpbnRlbmRlZCB0byBiZSBkZWZpbmVkCi0gKiAgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlCi0gKiAgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkCi0gKiAgICAgbm90IGJlIHVzZWQgd2l0aCBjb25mbGljdGluZyBzZW1hbnRpY3MgYnkgYW55IFdvcmtpbmcgR3JvdXAsCi0gKiAgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6Ci0gKiAKLSAqICAgICBiYXNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55Ci0gKiAgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdAotICogICAgICAgICAgYXBwZWFyczsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgaWQgICAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCi0gKiAgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwKLSAqICAgICAgICAgIGJ1dCB0aGlzIGF0dHJpYnV0ZSBpcyBpbmNsdWRlZCBoZXJlIHRvIGZhY2lsaXRhdGUgZXhwZXJpbWVudGF0aW9uCi0gKiAgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkCi0gKiAgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4KLSAqIAotICogICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YKLSAqICAgICAgICAgIGFueSBlbGVtZW50OyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogICAKLSAqICAgICBzcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQotICogICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKLSAqICAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKLSAqICAgICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCi0gKiAgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIEZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTogZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKLSAqICAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAKLSAqICAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgCi0gKiAgICAgICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKLSAqIAotICogICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbgotICogICAgICAgICAgICAgIHRoZSBXM0MgWE1MIFBsZW5hcnkgb24gdGhpcyAxMHRoIGRheSBvZiBGZWJydWFyeSwgMjAwMAotICogICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUKLSAqICAgICAgICAgICAgICB4bWw6RmF0aGVyCi0gKiAgIAotICogVGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAqICAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieQotICogICAgICAgICBzY2hlbWFzIHdpc2hpbmcgdG8gYWxsb3cgeG1sOmJhc2UsIHhtbDpsYW5nLCB4bWw6c3BhY2Ugb3IgeG1sOmlkCi0gKiAgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0gKiAKLSAqICAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAqICAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gKiAgICAgICAgICZsdDtzY2hlbWEgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAqICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvJmd0OwotICogCi0gKiAgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAqICAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotICogCi0gKiAgICAgICAgICZsdDt0eXBlIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLyZndDsKLSAqICAKLSAqICAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICogICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzCi0gKiBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gKiAgICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLgotICogICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAqICAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gKiAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gKiAgICBpdHNlbGYsIG9yIHdpdGggdGhlIFhNTCBuYW1lc3BhY2UgaXRzZWxmLiAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBYTUwKLSAqICAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZQotICogICAgYWNjb3JkaW5nbHk7IHRoZSB2ZXJzaW9uIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLgotICogICAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5RmFjdG9yeQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElSZWdpc3RyeVBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7Ci0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5BTUUgPSAidWRkaXJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfUFJFRklYID0gInVkZGlyZWdpc3RyeSI7Ci0KLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX01JWEVEID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04gPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VZGRpIFJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWSA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9GRUFUVVJFX0NPVU5UID0gNTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5UYXhvbm9taWVzSW1wbCA8ZW0+VGF4b25vbWllczwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVGF4b25vbWllc0ltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0VGF4b25vbWllcygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBUQVhPTk9NSUVTID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTUlFU19fVEFYT05PTVkgPSAwOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01JRVNfRkVBVFVSRV9DT1VOVCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCA8ZW0+VURESVJlZ2lzdHJ5PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19OQU1FID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19ERVNDUklQVElPTiA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT047Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19JRCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fSUQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19MT0NBVElPTiA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT047Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fUkVGID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVyc2lvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1ZFUlNJT04gPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzY292ZXJ5IFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkwgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHVibGljYXRpb24gVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlZmF1bHQgTG9naW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlZmF1bHQgUGFzc3dvcmQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyA3OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyA4OwotCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWl4ZWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9taWVzKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRVZGRpUmVnaXN0cnkgPGVtPlVkZGkgUmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFVkZGlSZWdpc3RyeSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRUYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyNnZXRUYXhvbm9teSgpCi0JICogQHNlZSAjZ2V0VGF4b25vbWllcygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0VGF4b25vbWllc19UYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5IDxlbT5VRERJUmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRVRERJUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFZlcnNpb24gPGVtPlZlcnNpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZXJzaW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFZlcnNpb24oKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1ZlcnNpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERpc2NvdmVyeVVSTCA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2NvdmVyeSBVUkw8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGlzY292ZXJ5VVJMKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EaXNjb3ZlcnlVUkwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFB1YmxpY2F0aW9uVVJMIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0UHVibGljYXRpb25VUkwoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0TG9naW4gPGVtPkRlZmF1bHQgTG9naW48L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWZhdWx0IExvZ2luPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRMb2dpbigpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGVmYXVsdExvZ2luKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0UGFzc3dvcmQgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRQYXNzd29yZCgpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGVmYXVsdFBhc3N3b3JkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRUYXhvbm9taWVzKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFVERElSZWdpc3RyeV9UYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlVRERJUmVnaXN0cnlGYWN0b3J5IGdldFVERElSZWdpc3RyeUZhY3RvcnkoKTsKLQotfSAvL1VERElSZWdpc3RyeVBhY2thZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwMmQzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3RJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuQmFzaWNGZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFVkZGlSZWdpc3RyeSA8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50Um9vdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvY3VtZW50Um9vdCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4ZWQoKSA8ZW0+TWl4ZWQ8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TWl4ZWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBGZWF0dXJlTWFwIG1peGVkID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhNTE5TUHJlZml4TWFwKCkgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4TUxOU1ByZWZpeE1hcCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeFNJU2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERvY3VtZW50Um9vdEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3QoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRmVhdHVyZU1hcCBnZXRNaXhlZCgpIHsKLQkJaWYgKG1peGVkID09IG51bGwpIHsKLQkJCW1peGVkID0gbmV3IEJhc2ljRmVhdHVyZU1hcCh0aGlzLCBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJfQotCQlyZXR1cm4gbWl4ZWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKSB7Ci0JCWlmICh4TUxOU1ByZWZpeE1hcCA9PSBudWxsKSB7Ci0JCQl4TUxOU1ByZWZpeE1hcCA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCX0KLQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlpZiAoeFNJU2NoZW1hTG9jYXRpb24gPT0gbnVsbCkgewotCQkJeFNJU2NoZW1hTG9jYXRpb24gPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQl9Ci0JCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbWllcyBnZXRUYXhvbm9taWVzKCkgewotCQlyZXR1cm4gKFRheG9ub21pZXMpZ2V0TWl4ZWQoKS5nZXQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VGF4b25vbWllcyhUYXhvbm9taWVzIG5ld1RheG9ub21pZXMsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCBuZXdUYXhvbm9taWVzLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcykgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIG5ld1RheG9ub21pZXMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnkgZ2V0VWRkaVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKFVERElSZWdpc3RyeSlnZXRNaXhlZCgpLmdldChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFVkZGlSZWdpc3RyeShVRERJUmVnaXN0cnkgbmV3VWRkaVJlZ2lzdHJ5LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpLCBuZXdVZGRpUmVnaXN0cnksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVkZGlSZWdpc3RyeShVRERJUmVnaXN0cnkgbmV3VWRkaVJlZ2lzdHJ5KSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpLCBuZXdVZGRpUmVnaXN0cnkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRNaXhlZCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WE1MTlNQcmVmaXhNYXAoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhTSVNjaGVtYUxvY2F0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUzoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0VGF4b25vbWllcyhudWxsLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0VWRkaVJlZ2lzdHJ5KG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBnZXRNaXhlZCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTOgotCQkJCXJldHVybiBnZXRUYXhvbm9taWVzKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQlyZXR1cm4gZ2V0VWRkaVJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlnZXRNaXhlZCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTOgotCQkJCXNldFRheG9ub21pZXMoKFRheG9ub21pZXMpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCXNldFVkZGlSZWdpc3RyeSgoVURESVJlZ2lzdHJ5KW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTOgotCQkJCXNldFRheG9ub21pZXMoKFRheG9ub21pZXMpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlk6Ci0JCQkJc2V0VWRkaVJlZ2lzdHJ5KChVRERJUmVnaXN0cnkpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIG1peGVkICE9IG51bGwgJiYgIW1peGVkLmlzRW1wdHkoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiB4TUxOU1ByZWZpeE1hcCAhPSBudWxsICYmICF4TUxOU1ByZWZpeE1hcC5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJcmV0dXJuIGdldFRheG9ub21pZXMoKSAhPSBudWxsOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFVkZGlSZWdpc3RyeSgpICE9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChtaXhlZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQobWl4ZWQpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9Eb2N1bWVudFJvb3RJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9UYXhvbm9taWVzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVGF4b25vbWllc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3NWJmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9UYXhvbm9taWVzSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbWllc0ltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlRheG9ub21pZXNJbXBsI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub21pZXNJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBUYXhvbm9taWVzIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXhvbm9teSgpIDxlbT5UYXhvbm9teTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IHRheG9ub215ID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBUYXhvbm9taWVzSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldFRheG9ub21pZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0VGF4b25vbXkoKSB7Ci0JCWlmICh0YXhvbm9teSA9PSBudWxsKSB7Ci0JCQl0YXhvbm9teSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChUYXhvbm9teS5jbGFzcywgdGhpcywgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWSk7Ci0JCX0KLQkJcmV0dXJuIHRheG9ub215OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRUYXhvbm9teSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIGdldFRheG9ub215KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCWdldFRheG9ub215KCkuY2xlYXIoKTsKLQkJCQlnZXRUYXhvbm9teSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQlnZXRUYXhvbm9teSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIHRheG9ub215ICE9IG51bGwgJiYgIXRheG9ub215LmlzRW1wdHkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi19IC8vVGF4b25vbWllc0ltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTgwMzNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFVERElSZWdpc3RyeUZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgewotCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHJldHVybiBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTOiByZXR1cm4gY3JlYXRlVGF4b25vbWllcygpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUlk6IHJldHVybiBjcmVhdGVVRERJUmVnaXN0cnkoKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCkgewotCQlEb2N1bWVudFJvb3RJbXBsIGRvY3VtZW50Um9vdCA9IG5ldyBEb2N1bWVudFJvb3RJbXBsKCk7Ci0JCXJldHVybiBkb2N1bWVudFJvb3Q7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub21pZXMgY3JlYXRlVGF4b25vbWllcygpIHsKLQkJVGF4b25vbWllc0ltcGwgdGF4b25vbWllcyA9IG5ldyBUYXhvbm9taWVzSW1wbCgpOwotCQlyZXR1cm4gdGF4b25vbWllczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5IGNyZWF0ZVVERElSZWdpc3RyeSgpIHsKLQkJVURESVJlZ2lzdHJ5SW1wbCB1ZGRpUmVnaXN0cnkgPSBuZXcgVURESVJlZ2lzdHJ5SW1wbCgpOwotCQlyZXR1cm4gdWRkaVJlZ2lzdHJ5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlQYWNrYWdlIGdldFVERElSZWdpc3RyeVBhY2thZ2UoKSB7Ci0JCXJldHVybiAoVURESVJlZ2lzdHJ5UGFja2FnZSlnZXRFUGFja2FnZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGRlcHJlY2F0ZWQKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBVRERJUmVnaXN0cnlQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUzOGIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzMSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVERElSZWdpc3RyeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldFZlcnNpb24gPGVtPlZlcnNpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXREaXNjb3ZlcnlVUkwgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRQdWJsaWNhdGlvblVSTCA8ZW0+UHVibGljYXRpb24gVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldERlZmF1bHRMb2dpbiA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldERlZmF1bHRQYXNzd29yZCA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlJbXBsIGV4dGVuZHMgUmVnaXN0cnlJbXBsIGltcGxlbWVudHMgVURESVJlZ2lzdHJ5IHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVyc2lvbigpIDxlbT5WZXJzaW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWZXJzaW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJTSU9OX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlcnNpb24oKSA8ZW0+VmVyc2lvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmVyc2lvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2ZXJzaW9uID0gVkVSU0lPTl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNjb3ZlcnlVUkwoKSA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBESVNDT1ZFUllfVVJMX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2NvdmVyeVVSTCgpIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZGlzY292ZXJ5VVJMID0gRElTQ09WRVJZX1VSTF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQdWJsaWNhdGlvblVSTCgpIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHVibGljYXRpb25VUkwoKSA8ZW0+UHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBwdWJsaWNhdGlvblVSTCA9IFBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDVVJFRF9ESVNDT1ZFUllfVVJMX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHNlY3VyZWREaXNjb3ZlcnlVUkwgPSBTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQ1VSRURfUFVCTElDQVRJT05fVVJMX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHNlY3VyZWRQdWJsaWNhdGlvblVSTCA9IFNFQ1VSRURfUFVCTElDQVRJT05fVVJMX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlZmF1bHRMb2dpbigpIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREZWZhdWx0TG9naW4oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9HSU5fRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVmYXVsdExvZ2luKCkgPGVtPkRlZmF1bHQgTG9naW48L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlZmF1bHRMb2dpbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBkZWZhdWx0TG9naW4gPSBERUZBVUxUX0xPR0lOX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlZmF1bHRQYXNzd29yZCgpIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREZWZhdWx0UGFzc3dvcmQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlZmF1bHRQYXNzd29yZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQgPSBERUZBVUxUX1BBU1NXT1JEX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGF4b25vbWllcygpIDxlbT5UYXhvbm9taWVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVGF4b25vbWllcyB0YXhvbm9taWVzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBVRERJUmVnaXN0cnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0VURESVJlZ2lzdHJ5KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkgewotCQlyZXR1cm4gdmVyc2lvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKFN0cmluZyBuZXdWZXJzaW9uKSB7Ci0JCVN0cmluZyBvbGRWZXJzaW9uID0gdmVyc2lvbjsKLQkJdmVyc2lvbiA9IG5ld1ZlcnNpb247Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVkVSU0lPTiwgb2xkVmVyc2lvbiwgdmVyc2lvbikpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGlzY292ZXJ5VVJMKCkgewotCQlyZXR1cm4gZGlzY292ZXJ5VVJMOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldERpc2NvdmVyeVVSTChTdHJpbmcgbmV3RGlzY292ZXJ5VVJMKSB7Ci0JCVN0cmluZyBvbGREaXNjb3ZlcnlVUkwgPSBkaXNjb3ZlcnlVUkw7Ci0JCWRpc2NvdmVyeVVSTCA9IG5ld0Rpc2NvdmVyeVVSTDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMLCBvbGREaXNjb3ZlcnlVUkwsIGRpc2NvdmVyeVVSTCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHVibGljYXRpb25VUkwoKSB7Ci0JCXJldHVybiBwdWJsaWNhdGlvblVSTDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQdWJsaWNhdGlvblVSTChTdHJpbmcgbmV3UHVibGljYXRpb25VUkwpIHsKLQkJU3RyaW5nIG9sZFB1YmxpY2F0aW9uVVJMID0gcHVibGljYXRpb25VUkw7Ci0JCXB1YmxpY2F0aW9uVVJMID0gbmV3UHVibGljYXRpb25VUkw7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMLCBvbGRQdWJsaWNhdGlvblVSTCwgcHVibGljYXRpb25VUkwpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSB7Ci0JCXJldHVybiBzZWN1cmVkRGlzY292ZXJ5VVJMOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlY3VyZWREaXNjb3ZlcnlVUkwoU3RyaW5nIG5ld1NlY3VyZWREaXNjb3ZlcnlVUkwpIHsKLQkJU3RyaW5nIG9sZFNlY3VyZWREaXNjb3ZlcnlVUkwgPSBzZWN1cmVkRGlzY292ZXJ5VVJMOwotCQlzZWN1cmVkRGlzY292ZXJ5VVJMID0gbmV3U2VjdXJlZERpc2NvdmVyeVVSTDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkwsIG9sZFNlY3VyZWREaXNjb3ZlcnlVUkwsIHNlY3VyZWREaXNjb3ZlcnlVUkwpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIHNlY3VyZWRQdWJsaWNhdGlvblVSTDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoU3RyaW5nIG5ld1NlY3VyZWRQdWJsaWNhdGlvblVSTCkgewotCQlTdHJpbmcgb2xkU2VjdXJlZFB1YmxpY2F0aW9uVVJMID0gc2VjdXJlZFB1YmxpY2F0aW9uVVJMOwotCQlzZWN1cmVkUHVibGljYXRpb25VUkwgPSBuZXdTZWN1cmVkUHVibGljYXRpb25VUkw7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkwsIG9sZFNlY3VyZWRQdWJsaWNhdGlvblVSTCwgc2VjdXJlZFB1YmxpY2F0aW9uVVJMKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0TG9naW4oKSB7Ci0JCXJldHVybiBkZWZhdWx0TG9naW47Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdExvZ2luKFN0cmluZyBuZXdEZWZhdWx0TG9naW4pIHsKLQkJU3RyaW5nIG9sZERlZmF1bHRMb2dpbiA9IGRlZmF1bHRMb2dpbjsKLQkJZGVmYXVsdExvZ2luID0gbmV3RGVmYXVsdExvZ2luOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU4sIG9sZERlZmF1bHRMb2dpbiwgZGVmYXVsdExvZ2luKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0UGFzc3dvcmQoKSB7Ci0JCXJldHVybiBkZWZhdWx0UGFzc3dvcmQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdFBhc3N3b3JkKFN0cmluZyBuZXdEZWZhdWx0UGFzc3dvcmQpIHsKLQkJU3RyaW5nIG9sZERlZmF1bHRQYXNzd29yZCA9IGRlZmF1bHRQYXNzd29yZDsKLQkJZGVmYXVsdFBhc3N3b3JkID0gbmV3RGVmYXVsdFBhc3N3b3JkOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQsIG9sZERlZmF1bHRQYXNzd29yZCwgZGVmYXVsdFBhc3N3b3JkKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub21pZXMgZ2V0VGF4b25vbWllcygpIHsKLQkJcmV0dXJuIHRheG9ub21pZXM7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VGF4b25vbWllcyhUYXhvbm9taWVzIG5ld1RheG9ub21pZXMsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJVGF4b25vbWllcyBvbGRUYXhvbm9taWVzID0gdGF4b25vbWllczsKLQkJdGF4b25vbWllcyA9IG5ld1RheG9ub21pZXM7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgewotCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUywgb2xkVGF4b25vbWllcywgbmV3VGF4b25vbWllcyk7Ci0JCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0JCX0KLQkJcmV0dXJuIG1zZ3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9taWVzIG5ld1RheG9ub21pZXMpIHsKLQkJaWYgKG5ld1RheG9ub21pZXMgIT0gdGF4b25vbWllcykgewotCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0JCQlpZiAodGF4b25vbWllcyAhPSBudWxsKQotCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl0YXhvbm9taWVzKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTLCBudWxsLCBtc2dzKTsKLQkJCWlmIChuZXdUYXhvbm9taWVzICE9IG51bGwpCi0JCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1RheG9ub21pZXMpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVMsIG51bGwsIG1zZ3MpOwotCQkJbXNncyA9IGJhc2ljU2V0VGF4b25vbWllcyhuZXdUYXhvbm9taWVzLCBtc2dzKTsKLQkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKLQkJfQotCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUywgbmV3VGF4b25vbWllcywgbmV3VGF4b25vbWllcykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXREZXNjcmlwdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJCXJldHVybiBiYXNpY1NldFRheG9ub21pZXMobnVsbCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0lEOgotCQkJCXJldHVybiBnZXRJZCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRMb2NhdGlvbigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1JFRjoKLQkJCQlyZXR1cm4gZ2V0UmVmKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVkVSU0lPTjoKLQkJCQlyZXR1cm4gZ2V0VmVyc2lvbigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkw6Ci0JCQkJcmV0dXJuIGdldERpc2NvdmVyeVVSTCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlyZXR1cm4gZ2V0UHVibGljYXRpb25VUkwoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJcmV0dXJuIGdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlyZXR1cm4gZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTjoKLQkJCQlyZXR1cm4gZ2V0RGVmYXVsdExvZ2luKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRDoKLQkJCQlyZXR1cm4gZ2V0RGVmYXVsdFBhc3N3b3JkKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbWllcygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19JRDoKLQkJCQlzZXRJZCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1JFRjoKLQkJCQlzZXRSZWYoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1ZFUlNJT046Ci0JCQkJc2V0VmVyc2lvbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlzZXREaXNjb3ZlcnlVUkwoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlzZXRQdWJsaWNhdGlvblVSTCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMOgotCQkJCXNldFNlY3VyZWREaXNjb3ZlcnlVUkwoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMOgotCQkJCXNldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTjoKLQkJCQlzZXREZWZhdWx0TG9naW4oKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQ6Ci0JCQkJc2V0RGVmYXVsdFBhc3N3b3JkKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTOgotCQkJCXNldFRheG9ub21pZXMoKFRheG9ub21pZXMpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTkFNRToKLQkJCQlnZXROYW1lKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19JRDoKLQkJCQlzZXRJZChJRF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKExPQ0FUSU9OX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXNldFJlZihSRUZfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OOgotCQkJCXNldFZlcnNpb24oVkVSU0lPTl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkw6Ci0JCQkJc2V0RGlzY292ZXJ5VVJMKERJU0NPVkVSWV9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkw6Ci0JCQkJc2V0UHVibGljYXRpb25VUkwoUFVCTElDQVRJT05fVVJMX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMOgotCQkJCXNldFNlY3VyZWREaXNjb3ZlcnlVUkwoU0VDVVJFRF9ESVNDT1ZFUllfVVJMX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkw6Ci0JCQkJc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKFNFQ1VSRURfUFVCTElDQVRJT05fVVJMX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTjoKLQkJCQlzZXREZWZhdWx0TG9naW4oREVGQVVMVF9MT0dJTl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQ6Ci0JCQkJc2V0RGVmYXVsdFBhc3N3b3JkKERFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTOgotCQkJCXNldFRheG9ub21pZXMoKFRheG9ub21pZXMpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTkFNRToKLQkJCQlyZXR1cm4gbmFtZSAhPSBudWxsICYmICFuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAhZGVzY3JpcHRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0lEOgotCQkJCXJldHVybiBJRF9FREVGQVVMVCA9PSBudWxsID8gaWQgIT0gbnVsbCA6ICFJRF9FREVGQVVMVC5lcXVhbHMoaWQpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1JFRjoKLQkJCQlyZXR1cm4gUkVGX0VERUZBVUxUID09IG51bGwgPyByZWYgIT0gbnVsbCA6ICFSRUZfRURFRkFVTFQuZXF1YWxzKHJlZik7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVkVSU0lPTjoKLQkJCQlyZXR1cm4gVkVSU0lPTl9FREVGQVVMVCA9PSBudWxsID8gdmVyc2lvbiAhPSBudWxsIDogIVZFUlNJT05fRURFRkFVTFQuZXF1YWxzKHZlcnNpb24pOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkw6Ci0JCQkJcmV0dXJuIERJU0NPVkVSWV9VUkxfRURFRkFVTFQgPT0gbnVsbCA/IGRpc2NvdmVyeVVSTCAhPSBudWxsIDogIURJU0NPVkVSWV9VUkxfRURFRkFVTFQuZXF1YWxzKGRpc2NvdmVyeVVSTCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMOgotCQkJCXJldHVybiBQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQgPT0gbnVsbCA/IHB1YmxpY2F0aW9uVVJMICE9IG51bGwgOiAhUFVCTElDQVRJT05fVVJMX0VERUZBVUxULmVxdWFscyhwdWJsaWNhdGlvblVSTCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMOgotCQkJCXJldHVybiBTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQgPT0gbnVsbCA/IHNlY3VyZWREaXNjb3ZlcnlVUkwgIT0gbnVsbCA6ICFTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQuZXF1YWxzKHNlY3VyZWREaXNjb3ZlcnlVUkwpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMOgotCQkJCXJldHVybiBTRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCA9PSBudWxsID8gc2VjdXJlZFB1YmxpY2F0aW9uVVJMICE9IG51bGwgOiAhU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQuZXF1YWxzKHNlY3VyZWRQdWJsaWNhdGlvblVSTCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTjoKLQkJCQlyZXR1cm4gREVGQVVMVF9MT0dJTl9FREVGQVVMVCA9PSBudWxsID8gZGVmYXVsdExvZ2luICE9IG51bGwgOiAhREVGQVVMVF9MT0dJTl9FREVGQVVMVC5lcXVhbHMoZGVmYXVsdExvZ2luKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEOgotCQkJCXJldHVybiBERUZBVUxUX1BBU1NXT1JEX0VERUZBVUxUID09IG51bGwgPyBkZWZhdWx0UGFzc3dvcmQgIT0gbnVsbCA6ICFERUZBVUxUX1BBU1NXT1JEX0VERUZBVUxULmVxdWFscyhkZWZhdWx0UGFzc3dvcmQpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJcmV0dXJuIHRheG9ub21pZXMgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZlcnNpb246ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZlcnNpb24pOwotCQlyZXN1bHQuYXBwZW5kKCIsIGRpc2NvdmVyeVVSTDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoZGlzY292ZXJ5VVJMKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBwdWJsaWNhdGlvblVSTDogIik7Ci0JCXJlc3VsdC5hcHBlbmQocHVibGljYXRpb25VUkwpOwotCQlyZXN1bHQuYXBwZW5kKCIsIHNlY3VyZWREaXNjb3ZlcnlVUkw6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHNlY3VyZWREaXNjb3ZlcnlVUkwpOwotCQlyZXN1bHQuYXBwZW5kKCIsIHNlY3VyZWRQdWJsaWNhdGlvblVSTDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoc2VjdXJlZFB1YmxpY2F0aW9uVVJMKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBkZWZhdWx0TG9naW46ICIpOwotCQlyZXN1bHQuYXBwZW5kKGRlZmF1bHRMb2dpbik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgZGVmYXVsdFBhc3N3b3JkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChkZWZhdWx0UGFzc3dvcmQpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3NTI4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlhNTFR5cGVQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwuWE1MVHlwZVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgVURESVJlZ2lzdHJ5UGFja2FnZSB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZG9jdW1lbnRSb290RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIHRheG9ub21pZXNFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgdWRkaVJlZ2lzdHJ5RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgotCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLQkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0JICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZU5TX1VSSQotCSAqIEBzZWUgI2luaXQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKCkgewotCQlzdXBlcihlTlNfVVJJLCBVRERJUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0JICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLQkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLQkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLQkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLQkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0JICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLQkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotCSAqIHRob3NlIG9mIGFub3RoZXIuCi0JICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2VOU19VUkkKLQkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVERElSZWdpc3RyeVBhY2thZ2UgaW5pdCgpIHsKLQkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFVERElSZWdpc3RyeVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0JCVVERElSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVVERElSZWdpc3RyeVBhY2thZ2UgPSAoVURESVJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCgpKTsKLQotCQlpc0luaXRlZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKLQkJUlRJbmRleFBhY2thZ2VJbXBsIHRoZVJUSW5kZXhQYWNrYWdlID0gKFJUSW5kZXhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSVEluZGV4UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSA6IFJUSW5kZXhQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUYXhvbm9teVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIDogVGF4b25vbXlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIDogUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCi0JCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmZyZWV6ZSgpOwotCi0JCXJldHVybiB0aGVVRERJUmVnaXN0cnlQYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCkgewotCQlyZXR1cm4gZG9jdW1lbnRSb290RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0VGF4b25vbWllcygpIHsKLQkJcmV0dXJuIHRheG9ub21pZXNFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VGF4b25vbWllc19UYXhvbm9teSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXRheG9ub21pZXNFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldFVERElSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIHVkZGlSZWdpc3RyeUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EaXNjb3ZlcnlVUkwoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkUHVibGljYXRpb25VUkwoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGVmYXVsdExvZ2luKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRQYXNzd29yZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVERElSZWdpc3RyeV9UYXhvbm9taWVzKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeUZhY3RvcnkgZ2V0VURESVJlZ2lzdHJ5RmFjdG9yeSgpIHsKLQkJcmV0dXJuIChVRERJUmVnaXN0cnlGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLQkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47Ci0JCWlzQ3JlYXRlZCA9IHRydWU7Ci0KLQkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0JCWRvY3VtZW50Um9vdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET0NVTUVOVF9ST09UKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlkpOwotCi0JCXRheG9ub21pZXNFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEFYT05PTUlFUyk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UodGF4b25vbWllc0VDbGFzcywgVEFYT05PTUlFU19fVEFYT05PTVkpOwotCi0JCXVkZGlSZWdpc3RyeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhVRERJX1JFR0lTVFJZKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1ZFUlNJT04pOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkwpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU4pOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLQkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47Ci0JCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgcGFja2FnZQotCQlzZXROYW1lKGVOQU1FKTsKLQkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0JCXNldE5zVVJJKGVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpOwotCQlYTUxUeXBlUGFja2FnZUltcGwgdGhlWE1MVHlwZVBhY2thZ2UgPSAoWE1MVHlwZVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFhNTFR5cGVQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLQkJdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVJlZ2lzdHJ5UGFja2FnZS5nZXRSZWdpc3RyeSgpKTsKLQotCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotCQlpbml0RUNsYXNzKGRvY3VtZW50Um9vdEVDbGFzcywgRG9jdW1lbnRSb290LmNsYXNzLCAiRG9jdW1lbnRSb290IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVGZWF0dXJlTWFwRW50cnkoKSwgIm1peGVkIiwgbnVsbCwgMCwgLTEsIG51bGwsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4TUxOU1ByZWZpeE1hcCIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4U0lTY2hlbWFMb2NhdGlvbiIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCB0aGlzLmdldFRheG9ub21pZXMoKSwgbnVsbCwgInRheG9ub21pZXMiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpLCB0aGlzLmdldFVERElSZWdpc3RyeSgpLCBudWxsLCAidWRkaVJlZ2lzdHJ5IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyh0YXhvbm9taWVzRUNsYXNzLCBUYXhvbm9taWVzLmNsYXNzLCAiVGF4b25vbWllcyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGF4b25vbWllc19UYXhvbm9teSgpLCB0aGVUYXhvbm9teVBhY2thZ2UuZ2V0VGF4b25vbXkoKSwgbnVsbCwgInRheG9ub215IiwgbnVsbCwgMCwgLTEsIFRheG9ub21pZXMuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElSZWdpc3RyeS5jbGFzcywgIlVERElSZWdpc3RyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X1ZlcnNpb24oKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2ZXJzaW9uIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgImRpc2NvdmVyeVVSTCIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9QdWJsaWNhdGlvblVSTCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgInB1YmxpY2F0aW9uVVJMIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWREaXNjb3ZlcnlVUkwoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJzZWN1cmVkRGlzY292ZXJ5VVJMIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgInNlY3VyZWRQdWJsaWNhdGlvblVSTCIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJkZWZhdWx0TG9naW4iLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfRGVmYXVsdFBhc3N3b3JkKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAiZGVmYXVsdFBhc3N3b3JkIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKSwgdGhpcy5nZXRUYXhvbm9taWVzKCksIG51bGwsICJ0YXhvbm9taWVzIiwgbnVsbCwgMCwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCS8vIENyZWF0ZSByZXNvdXJjZQotCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLQotCQkvLyBDcmVhdGUgYW5ub3RhdGlvbnMKLQkJLy8gaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhCi0JCWNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIHRoZSBhbm5vdGF0aW9ucyBmb3IgPGI+aHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhPC9iPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKSB7Ci0JCVN0cmluZyBzb3VyY2UgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIjsJCQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChkb2N1bWVudFJvb3RFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIiIsCi0JCQkgImtpbmQiLCAibWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnRXaWxkY2FyZCIsCi0JCQkgIm5hbWUiLCAiOm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhtbG5zOnByZWZpeCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4c2k6c2NoZW1hTG9jYXRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbWllcyIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInVkZGlSZWdpc3RyeSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgICh0YXhvbm9taWVzRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJUYXhvbm9taWVzIiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9taWVzX1RheG9ub215KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInRheG9ub215IiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKHVkZGlSZWdpc3RyeUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiVURESVJlZ2lzdHJ5IiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ2ZXJzaW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9EaXNjb3ZlcnlVUkwoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGlzY292ZXJ5VVJMIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9QdWJsaWNhdGlvblVSTCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJwdWJsaWNhdGlvblVSTCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJzZWN1cmVkRGlzY292ZXJ5VVJMIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9TZWN1cmVkUHVibGljYXRpb25VUkwoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAic2VjdXJlZFB1YmxpY2F0aW9uVVJMIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGVmYXVsdExvZ2luIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGVmYXVsdFBhc3N3b3JkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9UYXhvbm9taWVzKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInRheG9ub21pZXMiCi0JCSAgIH0pOwotCX0KLQotfSAvL1VERElSZWdpc3RyeVBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM4ZTBjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgVURESVJlZ2lzdHJ5UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5KCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFVERElSZWdpc3RyeVN3aXRjaCBtb2RlbFN3aXRjaCA9Ci0JCW5ldyBVRERJUmVnaXN0cnlTd2l0Y2goKSB7Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VUYXhvbm9taWVzKFRheG9ub21pZXMgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZVRheG9ub21pZXNBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VVRERJUmVnaXN0cnkoVURESVJlZ2lzdHJ5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVVRERJUmVnaXN0cnlBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VSZWdpc3RyeShSZWdpc3RyeSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlUmVnaXN0cnlBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCX07Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgewotCQlyZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLQl9Ci0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcwotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVUYXhvbm9taWVzQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkgPGVtPlVERElSZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlVURESVJlZ2lzdHJ5QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZ2lzdHJ5QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1VERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzE1YWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRXh0ZW5kZWRNZXRhRGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsLlVERElSZWdpc3RyeVJlc291cmNlSW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNTFJlc291cmNlRmFjdG9yeUltcGwgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFeHRlbmRlZE1ldGFEYXRhIGV4dGVuZGVkTWV0YURhdGE7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsKHVyaSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7Ci0KLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDAyOWM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbC5VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgewotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHVyaSB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlSZXNvdXJjZUltcGwoVVJJIHVyaSkgewotCQlzdXBlcih1cmkpOwotCX0KLQotfSAvL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5U3dpdGNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkM2Q4YWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5U3dpdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlTd2l0Y2guamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeVN3aXRjaCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBVRERJUmVnaXN0cnlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5U3dpdGNoKCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotCQl9Ci0JCWVsc2UgewotCQkJTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotCQkJcmV0dXJuCi0JCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KLQkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgotCQkJCQlkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogewotCQkJCURvY3VtZW50Um9vdCBkb2N1bWVudFJvb3QgPSAoRG9jdW1lbnRSb290KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VEb2N1bWVudFJvb3QoZG9jdW1lbnRSb290KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFUzogewotCQkJCVRheG9ub21pZXMgdGF4b25vbWllcyA9IChUYXhvbm9taWVzKXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VUYXhvbm9taWVzKHRheG9ub21pZXMpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZOiB7Ci0JCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IChVRERJUmVnaXN0cnkpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZVVERElSZWdpc3RyeSh1ZGRpUmVnaXN0cnkpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlVGF4b25vbWllcyhUYXhvbm9taWVzIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVERElSZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlVURESVJlZ2lzdHJ5KFVERElSZWdpc3RyeSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VSZWdpc3RyeShSZWdpc3RyeSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5U3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vbml0b3IvRXh0ZW5zaWJpbGl0eUVsZW1lbnRUcmFuc2Zvcm1lclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vbml0b3IvRXh0ZW5zaWJpbGl0eUVsZW1lbnRUcmFuc2Zvcm1lclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTFkYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0V4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNzE1ICAgMjQwNzIyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDYW5ub3Qgc2V0dXAgVENQL0lQIE1vbml0b3IgZm9yIHNvYXAxMiBlbmRwb2ludHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXJSZWdpc3RyeSB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIEV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXJSZWdpc3RyeSBJTlNUQU5DRSA9Ci0JCW5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyUmVnaXN0cnkoKTsKLQkKLQlwcml2YXRlIExpc3Q8SUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXI+IHRyYW5zZm9ybWVyczsKLQkKLQlwcml2YXRlIEV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXJSZWdpc3RyeSgpIHsKLQkJCi0JCXRyYW5zZm9ybWVycyA9IG5ldyBBcnJheUxpc3Q8SUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXI+KCk7Ci0JCQotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWdzID0gCi0JCQlleHRlbnNpb25SZWdpc3RyeS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLndzdC53cy5FeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyIik7Ci0JCQotCQlmb3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWcgOiBjb25maWdzKSB7Ci0JCQkKLQkJCXRyeSB7Ci0JCQkJSUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSAoSUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIpIAotCQkJCQljb25maWcuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsJCQkKLQkJCQotCQkJCXRyYW5zZm9ybWVycy5hZGQodHJhbnNmb3JtZXIpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCVdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKGUuZ2V0U3RhdHVzKCkpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdHJhbnNmb3JtKEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW1lbnQpIHsKLQkJCi0JCWZvciAoSUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgOiB0cmFuc2Zvcm1lcnMpIHsKLQkJCVN0cmluZyBzdHIgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZWxlbWVudCk7Ci0JCQlpZiAoc3RyICE9IG51bGwpCi0JCQkJcmV0dXJuIHN0cjsJCQkKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9uaXRvci9HZXRNb25pdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjN2MxNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNzA5ICAgMjM3MTE2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBtb25pdG9yaW5nIGZhaWxzIG9uIGh0dHBzIGVuZHBvaW50Ci0gKiAyMDA4MDcxNSAgIDI0MDcyMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ2Fubm90IHNldHVwIFRDUC9JUCBNb25pdG9yIGZvciBzb2FwMTIgZW5kcG9pbnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb25pdG9yV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5Nb25pdG9yQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudXRpbC5Tb2NrZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIEdldE1vbml0b3JDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCXByaXZhdGUgYm9vbGVhbiBtb25pdG9yU2VydmljZTsKLQotCXByaXZhdGUgYm9vbGVhbiBjcmVhdGU7Ci0KLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQotCXByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgcHJveHlFbmRwb2ludDsKLQotCXB1YmxpYyBHZXRNb25pdG9yQ29tbWFuZCgpIHsKLQkJbW9uaXRvclNlcnZpY2UgPSB0cnVlOwotCQljcmVhdGUgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQllbmRwb2ludHMgPSBuZXcgVmVjdG9yKCk7Ci0JCWlmIChtb25pdG9yU2VydmljZSAmJiB3ZWJTZXJ2aWNlc1BhcnNlciAhPSBudWxsICYmIHdzZGxVUkkgIT0gbnVsbCAmJiB3c2RsVVJJLmxlbmd0aCgpID4gMCkgewotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSk7Ci0JCQlpZiAoZGVmaW5pdGlvbiAhPSBudWxsKSB7Ci0JCQkJTWFwIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpOwotCQkJCWZvciAoSXRlcmF0b3Igc2VydmljZXNJdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IHNlcnZpY2VzSXQuaGFzTmV4dCgpOykgewotCQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2VydmljZXNJdC5uZXh0KCk7Ci0JCQkJCU1hcCBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLQkJCQkJZm9yIChJdGVyYXRvciBwb3J0c0l0ID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgcG9ydHNJdC5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlQb3J0IHdzZGxQb3J0ID0gKFBvcnQpIHBvcnRzSXQubmV4dCgpOwotCQkJCQkJTGlzdCBleHRFbGVtZW50cyA9IHdzZGxQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCQkJCQkJZm9yIChJdGVyYXRvciBleHRFbGVtZW50c0l0ID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsgZXh0RWxlbWVudHNJdC5oYXNOZXh0KCk7KSB7Ci0JCQkJCQkJRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHNJdC5uZXh0KCk7Ci0JCQkJCQkJU3RyaW5nIGVuZHBvaW50ID0gbnVsbDsKLQkJCQkJCQlVUkwgZW5kcG9pbnRVUkwgPSBudWxsOwotCQkJCQkJCWlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0JCQkJCQkJCWVuZHBvaW50ID0gKChTT0FQQWRkcmVzcykgZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkJCQllbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0JCQkJCQkJCWVuZHBvaW50ID0gKChIVFRQQWRkcmVzcykgZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkJCQllbHNlCi0JCQkJCQkJCWVuZHBvaW50ID0gRXh0ZW5zaWJpbGl0eUVsZW1lbnRUcmFuc2Zvcm1lclJlZ2lzdHJ5LklOU1RBTkNFLnRyYW5zZm9ybShleHRFbGVtZW50KTsKLQkJCQkJCQlpZiAoZW5kcG9pbnQgIT0gbnVsbCkgewotCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJZW5kcG9pbnRVUkwgPSBuZXcgVVJMKGVuZHBvaW50KTsKLQkJCQkJCQkJfQotCQkJCQkJCQljYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKSB7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQkJaWYgKGVuZHBvaW50VVJMICE9IG51bGwpIHsKLQkJCQkJCQkJU3RyaW5nIHByb3RvY29sID0gZW5kcG9pbnRVUkwuZ2V0UHJvdG9jb2woKTsKLQkJCQkJCQkJU3RyaW5nIGhvc3QgPSBlbmRwb2ludFVSTC5nZXRIb3N0KCk7Ci0JCQkJCQkJCWludCBwb3J0ID0gZW5kcG9pbnRVUkwuZ2V0UG9ydCgpOwotCQkJCQkJCQlpZiAocG9ydCA9PSAtMSkgewotCQkJCQkJCQkJaWYgKCJodHRwIi5lcXVhbHNJZ25vcmVDYXNlKHByb3RvY29sKSkKLQkJCQkJCQkJCQlwb3J0ID0gODA7Ci0JCQkJCQkJCQllbHNlIGlmICgiaHR0cHMiLmVxdWFsc0lnbm9yZUNhc2UocHJvdG9jb2wpKQotCQkJCQkJCQkJCXBvcnQgPSA0NDM7Ci0JCQkJCQkJCX0KLQkJCQkJCQkJaWYgKCJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0JCQkJICAgICAgICAgICAgICAgIHsKLQkJCQkgICAgICAgICAgICAgICAgCUlTdGF0dXMgd2FybmluZyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLCBuZXcgT2JqZWN0W117U3RyaW5nLnZhbHVlT2YocG9ydCksIGVuZHBvaW50fSkpOwotCQkJCSAgICAgICAgICAgICAgICAJdHJ5Ci0JCQkJICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnYgIT0gbnVsbCkKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydCh3YXJuaW5nKTsKLQkJCQkgICAgICAgICAgICAgICAgICAgIH0KLQkJCQkgICAgICAgICAgICAgICAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpCi0JCQkJICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgICAgICAgICB9Ci0JCQkJICAgICAgICAgICAgICAgIH0KLQkJCQkgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwIikgJiYgaG9zdCAhPSBudWxsICYmIGhvc3QubGVuZ3RoKCkgPiAwICYmIHBvcnQgIT0gLTEpIHsKLQkJCQkJCQkJCUlNb25pdG9yIG0gPSBudWxsOwotCQkJCQkJCQkJSU1vbml0b3JbXSBtb25pdG9ycyA9IE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCk7Ci0JCQkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG1vbml0b3JzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJCQkJaWYgKGhvc3QuZXF1YWxzSWdub3JlQ2FzZShtb25pdG9yc1tpXS5nZXRSZW1vdGVIb3N0KCkpICYmIHBvcnQgPT0gbW9uaXRvcnNbaV0uZ2V0UmVtb3RlUG9ydCgpKSB7Ci0JCQkJCQkJCQkJCW0gPSBtb25pdG9yc1tpXTsKLQkJCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQkJaWYgKG0gPT0gbnVsbCAmJiBjcmVhdGUpIHsKLQkJCQkJCQkJCQlpbnQgbW9uaXRvcmVkUG9ydCA9IFNvY2tldFV0aWwuZmluZFVudXNlZFBvcnQoNTAwMCwgMTUwMDApOwotCQkJCQkJCQkJCUlNb25pdG9yV29ya2luZ0NvcHkgbW9uaXRvcldvcmtpbmdDb3B5ID0gTW9uaXRvckNvcmUuY3JlYXRlTW9uaXRvcigpOwotCQkJCQkJCQkJCW1vbml0b3JXb3JraW5nQ29weS5zZXRMb2NhbFBvcnQobW9uaXRvcmVkUG9ydCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZUhvc3QoaG9zdCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZVBvcnQocG9ydCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFByb3RvY29sKCJIVFRQIik7Ci0JCQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCQkJbSA9IG1vbml0b3JXb3JraW5nQ29weS5zYXZlKCk7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJCQkJCQkJCQlJU3RhdHVzIHdhcm5pbmcgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLCBuZXcgT2JqZWN0W117U3RyaW5nLnZhbHVlT2YocG9ydCksIGVuZHBvaW50fSksIHQpOwotCQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQkJaWYgKGVudiAhPSBudWxsKQotCQkJCQkJCQkJCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHdhcm5pbmcpOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpIHsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJCWlmIChtICE9IG51bGwpIHsKLQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQlpZiAoIW0uaXNSdW5uaW5nKCkpCi0JCQkJCQkJCQkJCQltLnN0YXJ0KCk7Ci0JCQkJCQkJCQkJCS8vIFVzZSB0aGUgZW5kcG9pbnQgdGhhdCBtYXRjaGVzIHdpdGggdGhlIHByb3h5IHRoZSBleHRlbnNpb24gcGFzc2VzIHRvIHVzIGlmIGl0IGlzIHNldAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAJCWlmIChwcm94eUVuZHBvaW50ICE9IG51bGwpIHsKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgCQkJdHJ5IHsKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgCQkJCWVuZHBvaW50VVJMID0gbmV3IFVSTChwcm94eUVuZHBvaW50KTsKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgCQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotCQkJCSAgICAJCQkgICAgICAgICAgICAgICAgeyAKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgCQkJCS8vIGlnbm9yZSBwcm94eSBlbmRwb2ludCAKLQkJCQkgICAgCQkJICAgICAgICAgICAgICAgIH0KLQkJCQkgICAgICAgICAgICAgICAgICAgICAgCQl9Ci0JCQkJCQkJCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoZW5kcG9pbnRVUkwuZ2V0UHJvdG9jb2woKSk7Ci0JCQkJCQkJCQkJCXNiLmFwcGVuZCgiOi8vbG9jYWxob3N0OiIpOwotCQkJCQkJCQkJCQlzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YobS5nZXRMb2NhbFBvcnQoKSkpOwotCQkJCQkJCQkJCQlzYi5hcHBlbmQoZW5kcG9pbnRVUkwuZ2V0RmlsZSgpKTsKLQkJCQkJCQkJCQkJZW5kcG9pbnRzLmFkZChzYi50b1N0cmluZygpKTsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQkJCQkJCQkJCUlTdGF0dXMgd2FybmluZyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXXtTdHJpbmcudmFsdWVPZihwb3J0KSwgZW5kcG9pbnR9KSwgdCk7Ci0JCQkJCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQkJCQlpZiAoZW52ICE9IG51bGwpCi0JCQkJCQkJCQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQod2FybmluZyk7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBzZSkgewotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKGJvb2xlYW4gbW9uaXRvclNlcnZpY2UpIHsKLQkJdGhpcy5tb25pdG9yU2VydmljZSA9IG1vbml0b3JTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDcmVhdGUoYm9vbGVhbiBjcmVhdGUpIHsKLQkJdGhpcy5jcmVhdGUgPSBjcmVhdGU7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RW5kcG9pbnRzKCkgewotCQlyZXR1cm4gZW5kcG9pbnRzOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gcHJveHlFbmRwb2ludCBUaGUgcHJveHlFbmRwb2ludCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJveHlFbmRwb2ludChTdHJpbmcgcHJveHlFbmRwb2ludCkgewotCSAgCXRoaXMucHJveHlFbmRwb2ludCA9IHByb3h5RW5kcG9pbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0lFeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vbml0b3IvSUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJjZjY0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vbml0b3IvSUV4dGVuc2liaWxpdHlFbGVtZW50VHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDcxNSAgIDI0MDcyMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ2Fubm90IHNldHVwIFRDUC9JUCBNb25pdG9yIGZvciBzb2FwMTIgZW5kcG9pbnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9uaXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotLyoqCi0gKiBBIHRyYW5zZm9ybWVyIHRoYXQgdGFrZXMgYW4gZW5kcG9pbnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFuZCByZXR1cm5zCi0gKiB0aGUgZW5kcG9pbnQgbG9jYXRpb24gVVJMIGFzIGEgU3RyaW5nLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElFeHRlbnNpYmlsaXR5RWxlbWVudFRyYW5zZm9ybWVyIHsKLQotCS8qKgotCSAqIEdpdmVuIGFuIGVuZHBvaW50IGluIHRoZSBmb3JtIG9mIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQsIHJldHVybnMKLQkgKiB0aGUgZW5kcG9pbnQgbG9jYXRpb24gVVJMIGFzIGEgU3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IEFuIGVuZHBvaW50IGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLQkgKiBAcmV0dXJuIFRoZSBlbmRwb2ludCBsb2NhdGlvbiBVUkwuCi0JICovCi0JcHVibGljIFN0cmluZyB0cmFuc2Zvcm0oRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BsdWdpbi9XU1BsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wbHVnaW4vV1NQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMzMDM3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BsdWdpbi9XU1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwMyAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA5MDMxMCAgIDI0MjQ0MCB5ZW5sdUBjYS5pYm0uY29tIC0gWWVuIEx1LCBQbHVnZ2FibGUgSUZpbGUgdG8gVVJJIENvbnZlcnRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbnZlcnRlci5JSUZpbGUyVXJpQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQVBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgV1NQbHVnaW4gcGx1Z2luOwotCQotCXByaXZhdGUgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IHdzaVNTQlBDb250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgd3NpQVBDb250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgd3NkbFZhbGlkYXRpb25Db250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0IHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCXByaXZhdGUgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHRfOwotCXByaXZhdGUgSUlGaWxlMlVyaUNvbnZlcnRlciBpRmlsZTJVcmlDb252ZXJ0ZXJfOwotCXByaXZhdGUgYm9vbGVhbiBpc0lGaWxlMlVyaUNvbnZlcnRlckluaXRpYWxpemVkXyA9IGZhbHNlOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzIjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFdTUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0JICogKFdTUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LndzIik7Ci0JICogQHJldHVybiBUaGUgV1NQbHVnaW4gc2luZ2xldG9uLgotCSAqLwotCSBzdGF0aWMgcHVibGljIFdTUGx1Z2luIGdldEluc3RhbmNlKCkgewotCSAgIHJldHVybiBwbHVnaW47Ci0JIH0KLQkgCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBXU1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCi0JLyoqCi0JICogR2V0IFdTSSBDb250ZXh0Ci0JICogQGRlcHJlY2F0ZWQgdXNlIGdldFdTSVNTQlBDb250ZXh0IG9yIGdldFdTSUFQQ29udGV4dCBpbnN0ZWFkCi0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJQ29udGV4dCBnZXRXU0lDb250ZXh0KCkgCi0gCXsgLy8gZGVmYXVsdGluZyB0byBnZXQgV1NJIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBjb250ZXh0Ci0gCSAgcmV0dXJuIGdldFdTSVNTQlBDb250ZXh0KCk7Ci0gCX0KLSAKLSAvKioKLQkgKiBHZXQgV1NJIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBDb250ZXh0Ci0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgZ2V0V1NJU1NCUENvbnRleHQoKSAKLQl7Ci0JICBpZiAod3NpU1NCUENvbnRleHRfID09IG51bGwpCi0JICAJewotCSAgCQl3c2lTU0JQQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0KCk7Ci0JICAJCXdzaVNTQlBDb250ZXh0Xy5sb2FkKCk7Ci0JICAJfQotCSAgcmV0dXJuIHdzaVNTQlBDb250ZXh0XzsKLQl9Ci0gCi0gLyoqCi0JICogR2V0IFdTSSBBdHRhY2htZW50IFByb2ZpbGUgQ29udGV4dAotCSAqIAotCSAqLyAKLSBwdWJsaWMgUGVyc2lzdGVudFdTSUFQQ29udGV4dCBnZXRXU0lBUENvbnRleHQoKSAKLQl7Ci0JICBpZiAod3NpQVBDb250ZXh0XyA9PSBudWxsKQotCSAgCXsKLQkgIAkJd3NpQVBDb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0KCk7Ci0JICAJCXdzaUFQQ29udGV4dF8ubG9hZCgpOwotCSAgCX0KLQkgIHJldHVybiB3c2lBUENvbnRleHRfOwotCX0KLQotCSAvKioKLQkgKiBHZXQgV1NETCBWYWxpYXRpb24gQ29udGV4dAotCSAqIAotCSAqLyAKLQotCXB1YmxpYyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IGdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpIHsKLQkJaWYgKHdzZGxWYWxpZGF0aW9uQ29udGV4dF8gPT0gbnVsbCkgewotCQkJd3NkbFZhbGlkYXRpb25Db250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JCQl3c2RsVmFsaWRhdGlvbkNvbnRleHRfLmxvYWQoKTsKLQkJfQotCQlyZXR1cm4gd3NkbFZhbGlkYXRpb25Db250ZXh0XzsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IFdhaXQgZm9yIFdTREwgVmFsaWF0aW9uIENvbnRleHQKLQkgKiAKLQkgKi8gCi0KLQlwdWJsaWMgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQgZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpIHsKLQkJaWYgKHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfID09IG51bGwpIHsKLQkJCXdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JCQl3YWl0Rm9yV3NkbFZhbGlkYXRpb25Db250ZXh0Xy5sb2FkKCk7Ci0JCX0KLQkJcmV0dXJuIHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgU2tlbGV0b24gTWVyZ2UgQ29udGV4dAotCSAqIAotCSAqLyAKLSBwdWJsaWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBnZXRNZXJnZUNvbnRleHQoKSAKLQl7Ci0JICBpZiAobWVyZ2VDb250ZXh0XyA9PSBudWxsKQotCSAgCXsKLQkJICBtZXJnZUNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRNZXJnZUNvbnRleHQoKTsKLQkJICBtZXJnZUNvbnRleHRfLmxvYWQoKTsKLQkgIAl9Ci0JICByZXR1cm4gbWVyZ2VDb250ZXh0XzsKLQl9Ci0gCi0gLyoqCi0gICogPHA+Ci0gICogR2V0IHRoZSBwcm9kdWN0J3MgcmVnaXN0ZXJlZCBJRmlsZSB0byBVUkkgY29udmVydGVyLiBJZiB0aGVyZSBpcyBubyBjb252ZXJ0ZXIgcmVnaXN0ZXJlZCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG51bGwuCi0gICogQHJldHVybiBUaGUgSUZpbGUgdG8gVVJJIGNvbnZlcnRlciByZWdpc3RlcmVkIHdpdGggdGhlIDxjb2RlPm9yZy5lY2xpcHNlLndzdC53cy9JRmlsZTJVcmlDb252ZXJ0ZXJJZDwvY29kZT4gcHJlZmVyZW5jZSBpbiBwbHVnaW5fY3VzdG9taXphdGlvbi5pbmkKLSAgKi8KLSBwdWJsaWMgSUlGaWxlMlVyaUNvbnZlcnRlciBnZXRJRmlsZTJVcmlDb252ZXJ0ZXIoKQotIHsKLQkgaWYgKCFpc0lGaWxlMlVyaUNvbnZlcnRlckluaXRpYWxpemVkXykKLQkgewotCQkgU3RyaW5nIHByb2R1Y3RDb252ZXJ0ZXJJZCA9IGdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0RGVmYXVsdFN0cmluZygiSUZpbGUyVXJpQ29udmVydGVySWQiKTsKLQkJIGlmIChwcm9kdWN0Q29udmVydGVySWQubGVuZ3RoKCkgPiAwKQotCQkgewotCQkJIElFeHRlbnNpb24gZXh0ZW5zaW9uID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRFeHRlbnNpb24ocHJvZHVjdENvbnZlcnRlcklkKTsKLQkJCSBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0JCQkgewotCQkJICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbWVudHMgPSBleHRlbnNpb24uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0JCQkgICBpZiAoY29uZmlnRWxlbWVudHMubGVuZ3RoID4gMCkKLQkJCSAgIHsKLQkJCQkgdHJ5Ci0JCQkJIHsKLQkJCQkgICBpRmlsZTJVcmlDb252ZXJ0ZXJfID0gKElJRmlsZTJVcmlDb252ZXJ0ZXIpY29uZmlnRWxlbWVudHNbMF0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLQkJCQkgfQotCQkJCSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJCSB7Ci0JCQkJCSBnZXRMb2coKS5sb2coZS5nZXRTdGF0dXMoKSk7Ci0JCQkJIH0KLQkJCSAgIH0KLQkJCSB9Ci0JCSB9Ci0JCSBpc0lGaWxlMlVyaUNvbnZlcnRlckluaXRpYWxpemVkXyA9IHRydWU7Ci0JIH0KLQkgcmV0dXJuIGlGaWxlMlVyaUNvbnZlcnRlcl87Ci0gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXJnZURlZmF1bHRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01lcmdlRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyNTk5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01lcmdlRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwMyAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMDkgICAyMDkwNzUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBjbGFzcyBNZXJnZURlZmF1bHRzCi17Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFX0RFRkFVTFQgPSB0cnVlOwotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBza2VsZXRvbiBtZXJnZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0U2tlbGV0b25NZXJnZURlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRV9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWlncmF0ZVdTSXByZWZlcmVuY2VzTG9hZExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01pZ3JhdGVXU0lwcmVmZXJlbmNlc0xvYWRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTEwYjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWlncmF0ZVdTSXByZWZlcmVuY2VzTG9hZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA1ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMjE4ICAgMjA5ODU4IGVwZXRlcnNAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICogMjAwODAzMTggICAyMjMxMTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgbWV0YWRhdGEgcmVxdWlyZWQgaW4gV1MtSSBwcm9maWxlcyB0byBzdXBwb3J0IGVkaXRvcnMgJiB2YWxpZGF0b3JzCi0gKiAyMDA4MDMxOCAgIDIyMTU3OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBNaWdyYXRlV1NJcHJlZmVyZW5jZXNMb2FkTGlzdGVuZXIgaW1wbGVtZW50cyBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRU5VTV9JRF9WQUxVRVMgPSB7ICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiLCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IiwgIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIn07IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIENPTlRFWFRfSURTICAgID0geyBQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0ksIFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kgfTsKLSAgCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgLy8gV2UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgV1NJIHByZWZlcmVuY2VzLgotICAgIC8vIElmIG5vdCB3ZSB3YW50IHRvIGRlZmF1bHQgV1NJIHByZWZlcmVuY2VzIHRvIGFueSBvbGQgV1NJIHByZWZlcmVuY2VzIHRoYXQKLSAgICAvLyBoYXZlIGJlZW4gc2V0LgotICAgIAotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgICBwcmVmZXJlbmNlcyAgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7ICAgIAotICAgIFN0cmluZyAgICAgICAgICAgICAgICBhcFZhbHVlICAgICAgPSBwcmVmZXJlbmNlcy5nZXQoIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfQVAxMCArICIuIiArIElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICBzc2JwVmFsdWUgICAgPSBwcmVmZXJlbmNlcy5nZXQoIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfU1NCUDEwICsgIi4iICsgSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgUHJlZmVyZW5jZXMgICAgICAgICAgIG9sZFByZWZzICAgICA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAgICBTdHJpbmdbXSAgICAgICAgICAgICAgb2xkUHJvcE5hbWVzID0gb2xkUHJlZnMucHJvcGVydHlOYW1lcygpOwotICAgIAotICAgIGlmKCBhcFZhbHVlID09IG51bGwgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBhcFBvbGljeSAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX0FQMTAgKTsKLSAgICAgIElQb2xpY3lTdGF0ZSAgICAgICAgICBhcFN0YXRlICAgICAgPSBhcFBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpOwotICAgICAgCi0gICAgICBpZiggaW5kZXhPZlN0cmluZyggIm5vbldTSUFQQ29tcGxpYW5jZSIsIG9sZFByb3BOYW1lcyApICE9IC0xICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGFuIG9sZCBBUCB2YWx1ZSBzbyB3ZSB3aWxsIHVzZSBpdCdzIHZhbHVlIGFzIHRoZSBkZWZhdWx0IGZvciBzZXR0aW5ncy4KLSAgICAgICAgU3RyaW5nIG9sZEFwVmFsdWUgPSBvbGRQcmVmcy5nZXRTdHJpbmcoICJub25XU0lBUENvbXBsaWFuY2UiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaW50ICAgIG9sZEFwSW5kZXggPSBpbmRleE9mU3RyaW5nKCBvbGRBcFZhbHVlLCBDT05URVhUX0lEUyApOwotICAgICAgICBTdHJpbmcgbmV3QXBWYWx1ZSA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICBpZiggb2xkQXBJbmRleCA8IEVOVU1fSURfVkFMVUVTLmxlbmd0aCApCi0gICAgICAgIHsKLSAgICAgICAgICBuZXdBcFZhbHVlID0gRU5VTV9JRF9WQUxVRVNbb2xkQXBJbmRleF07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBuZXdBcFZhbHVlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgYXBTdGF0ZS5wdXRWYWx1ZSggSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSwgbmV3QXBWYWx1ZSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAJCS8vIGFsc28gbmVlZCB0byBjaGVjayBpZiBhbnkgcHJvamVjdCBzcGVjaWZpYyBwcmVmZXJlbmNlcyB3ZXJlIHNldAotCQkJUXVhbGlmaWVkTmFtZSBuYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQsCi0JCQkJCSJub25XU0lBUENvbXBsaWFuY2UiKTsgLy8kTk9OLU5MUy0xJAotCQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKLQkJCQkJLmdldFByb2plY3RzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJSVByb2plY3QgcHJvamVjdCA9IHByb2plY3RzW2ldOwotCQkJCQlTdHJpbmcgb2xkUHJvcGVydHkgPSBudWxsOwotCQkJCQkJb2xkUHJvcGVydHkgPSBwcm9qZWN0LmdldFBlcnNpc3RlbnRQcm9wZXJ0eShuYW1lKTsKLQkJCQkJaWYgKG9sZFByb3BlcnR5ICE9IG51bGwgJiYgIW9sZFByb3BlcnR5LmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJaW50IG9sZEFwSW5kZXggPSBpbmRleE9mU3RyaW5nKG9sZFByb3BlcnR5LCBDT05URVhUX0lEUyk7Ci0JCQkJCQlTdHJpbmcgbmV3QXBWYWx1ZSA9IG51bGw7Ci0JCQkJCQlpZiAob2xkQXBJbmRleCAhPSAtMSAmJiBvbGRBcEluZGV4IDwgRU5VTV9JRF9WQUxVRVMubGVuZ3RoKSB7Ci0JCQkJCQkJbmV3QXBWYWx1ZSA9IEVOVU1fSURfVkFMVUVTW29sZEFwSW5kZXhdOwotCQkJCQkJfQotCi0JCQkJCQlpZiAobmV3QXBWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJCQkJYXBTdGF0ZSA9IGFwUG9saWN5LmdldFBvbGljeVN0YXRlKHByb2plY3QpOwotCQkJCQkJCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgdHJ1ZSk7Ci0JCQkJCSAgICAgICAgYXBTdGF0ZS5wdXRWYWx1ZSggSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSwgbmV3QXBWYWx1ZSApOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vaWdub3JlIHRoaXMgcHJvamVjdAotCQkJCX0KLQkJCX0KLSAgICB9Ci0KLQotICAgIAotICAgIGlmKCBzc2JwVmFsdWUgPT0gbnVsbCApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIHNzYnBQb2xpY3kgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfU1NCUDEwICk7Ci0gICAgICBJUG9saWN5U3RhdGUgICAgICAgICAgc3NicFN0YXRlICAgID0gc3NicFBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpOwotICAgICAgCi0gICAgICBpZiggaW5kZXhPZlN0cmluZyggIm5vbldTSVNTQlBDb21wbGlhbmNlIiwgb2xkUHJvcE5hbWVzICkgIT0gLTEgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYW4gb2xkIFNTQlAgdmFsdWUgc28gd2Ugd2lsbCB1c2UgaXQncyB2YWx1ZSBhcyB0aGUgZGVmYXVsdCBmb3Igc2V0dGluZ3MuCi0gICAgICAgIFN0cmluZyBvbGRTU0JQVmFsdWUgPSBvbGRQcmVmcy5nZXRTdHJpbmcoICJub25XU0lTU0JQQ29tcGxpYW5jZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBpbnQgICAgb2xkU1NCUEluZGV4ID0gaW5kZXhPZlN0cmluZyggb2xkU1NCUFZhbHVlLCBDT05URVhUX0lEUyApOwotICAgICAgICBTdHJpbmcgbmV3U1NCUFZhbHVlID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmKCBvbGRTU0JQSW5kZXggPCBFTlVNX0lEX1ZBTFVFUy5sZW5ndGggKQotICAgICAgICB7Ci0gICAgICAgICAgbmV3U1NCUFZhbHVlID0gRU5VTV9JRF9WQUxVRVNbb2xkU1NCUEluZGV4XTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIG5ld1NTQlBWYWx1ZSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAJc3NicFN0YXRlLnB1dFZhbHVlKCBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5LCBuZXdTU0JQVmFsdWUgKTsKLSAgICAgICAgfQotICAgICAgfQotCQkvLyBhbHNvIG5lZWQgdG8gY2hlY2sgaWYgYW55IHByb2plY3Qgc3BlY2lmaWMgcHJlZmVyZW5jZXMgd2VyZSBzZXQKLQkJUXVhbGlmaWVkTmFtZSBuYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQsCi0JCQkJIm5vbldTSVNTQlBDb21wbGlhbmNlIik7IC8vJE5PTi1OTFMtMSQKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKLQkJCQkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gcHJvamVjdHNbaV07Ci0JCQkJU3RyaW5nIG9sZFByb3BlcnR5ID0gbnVsbDsKLQkJCQkJb2xkUHJvcGVydHkgPSBwcm9qZWN0LmdldFBlcnNpc3RlbnRQcm9wZXJ0eShuYW1lKTsKLQkJCQlpZiAob2xkUHJvcGVydHkgIT0gbnVsbCAmJiAhb2xkUHJvcGVydHkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCWludCBvbGRTU0JQSW5kZXggPSBpbmRleE9mU3RyaW5nKG9sZFByb3BlcnR5LCBDT05URVhUX0lEUyk7Ci0JCQkJCVN0cmluZyBuZXdTU0JQVmFsdWUgPSBudWxsOwotCQkJCQlpZiAob2xkU1NCUEluZGV4ICE9IC0xICYmIG9sZFNTQlBJbmRleCA8IEVOVU1fSURfVkFMVUVTLmxlbmd0aCkgewotCQkJCQkJbmV3U1NCUFZhbHVlID0gRU5VTV9JRF9WQUxVRVNbb2xkU1NCUEluZGV4XTsKLQkJCQkJfQotCi0JCQkJCWlmIChuZXdTU0JQVmFsdWUgIT0gbnVsbCkgewotCQkJCQkJc3NicFN0YXRlID0gc3NicFBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KTsKLQkJCQkJCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgdHJ1ZSk7Ci0JCQkJCQlzc2JwU3RhdGUucHV0VmFsdWUoIElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXksIG5ld1NTQlBWYWx1ZSApOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy9pZ25vcmUgdGhpcyBwcm9qZWN0Ci0JCQl9Ci0JCX0KLQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBpbnQgaW5kZXhPZlN0cmluZyggU3RyaW5nIHRhcmdldCwgU3RyaW5nW10gdmFsdWVzICkKLSAgewotICAgIGludCByZXN1bHQgPSAtMTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4PCB2YWx1ZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdOwotICAgICAgCi0gICAgICBpZiggdmFsdWUuZXF1YWxzKCB0YXJnZXQgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50TWVyZ2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRNZXJnZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNjMDdjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRNZXJnZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwMyAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotCSAvKioKLQkgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIGVuYWJsZSBza2VsZXRvbiBtZXJnZSBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotCSAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkqKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFID0gInNrZWxldG9uTWVyZ2UiOwotCQotICBwcml2YXRlIHN0YXRpYyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IGNvbnRleHRfID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiggY29udGV4dF8gPT0gbnVsbCApCi0gICAgewotICAgICAgY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudE1lcmdlQ29udGV4dCgpOwotICAgICAgY29udGV4dF8ubG9hZCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0KCkKLSAgewotCSAgc3VwZXIoV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRSwgTWVyZ2VEZWZhdWx0cy5nZXRTa2VsZXRvbk1lcmdlRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNrZWxldG9uTWVyZ2VFbmFibGVkKGJvb2xlYW4gZW5hYmxlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRSwgZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0UpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMWMwNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFURV9OT19XU0RMID0gIjAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX1JFTU9URV9XU0RMID0gIjEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX0FMTF9XU0RMID0gIjIiOwotCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbF92YWxpZGF0aW9uID0gIldTRExfVkFMSURBVElPTiI7Ci0KLXB1YmxpYyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0ICgpIAotewotCXN1cGVyKCAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JCi19Ci0KLXB1YmxpYyB2b2lkIGxvYWQoKSAKLXsKLQlzZXREZWZhdWx0KHdzZGxfdmFsaWRhdGlvbiwgVkFMSURBVEVfTk9fV1NETCk7Ci19Ci0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJlZmVyZW5jZSBwYWdlCi1wdWJsaWMgdm9pZCB1cGRhdGVXU0RMVmFsaWRhdGlvbiAoIFN0cmluZyB2YWx1ZSkKLXsKLSAJCXNldFZhbHVlKCB3c2RsX3ZhbGlkYXRpb24sIHZhbHVlKTsKLX0KLQotcHVibGljIFN0cmluZyBnZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24gKCkKLXsKLQlTdHJpbmcgcHJvcGVydHkgPSBnZXRWYWx1ZUFzU3RyaW5nKHdzZGxfdmFsaWRhdGlvbik7Ci0vLwkgZGVmYXVsdCB0byBJZ25vcmUgaWYgbm8gaW5pdCBoYXMgYmVlbiBkb25lIGZyb20gaW5pIGZpbGUKLQlpZiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpKSB7Ci0JCXNldFZhbHVlKCB3c2RsX3ZhbGlkYXRpb24sIFZBTElEQVRFX05PX1dTREwpOwotCQlyZXR1cm4gVkFMSURBVEVfTk9fV1NETDsKLQl9Ci0JZWxzZQotCQlyZXR1cm4gcHJvcGVydHk7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdCgpCi17Ci0JcmV0dXJuIGdldERlZmF1bHRTdHJpbmcod3NkbF92YWxpZGF0aW9uKTsKLX0KLQotcHVibGljIGJvb2xlYW4gVmFsaWRhdGVOb1dTREwoKQotewotCSByZXR1cm4gVkFMSURBVEVfTk9fV1NETC5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCkpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBXYXJuTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gVkFMSURBVEVfUkVNT1RFX1dTREwuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpKTsKLX0KLQotcHVibGljIGJvb2xlYW4gSWdub3JlTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gVkFMSURBVEVfQUxMX1dTREwuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpKTsKLX0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lBUENvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUFQQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU1YjdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUFQQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzE4ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudFdTSUNvbnRleHQKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX1dTSV9BUF9DT01QTElBTkNFID0gIm5vbldTSUFQQ29tcGxpYW5jZSI7Ci0KLXB1YmxpYyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0ICgpIAotewotCXN1cGVyKCk7Ci0Jbm9uX3dzaV9jb21wbGlhbmNlID0gTk9OX1dTSV9BUF9DT01QTElBTkNFOwotCW5hbWUgPSBuZXcgUXVhbGlmaWVkTmFtZShXU1BsdWdpbi5JRCAsIG5vbl93c2lfY29tcGxpYW5jZSk7Ci0Jd3NpV2FybmluZ18gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9BUF9XQVJOSU5HOwotCXdzaUVycm9yXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX0FQX0VSUk9SOwotfQotCi1wdWJsaWMgU3RyaW5nIGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlICgpCi17Ci0JU3RyaW5nIHByb3BlcnR5ID0gZ2V0VmFsdWVBc1N0cmluZyhub25fd3NpX2NvbXBsaWFuY2UpOwotCS8vIGRlZmF1bHQgdG8gV2FybmluZyBpZiBubyBpbml0IGhhcyBiZWVuIGRvbmUgZnJvbSBpbmkgZmlsZQotCWlmIChwcm9wZXJ0eSA9PSBudWxsIHx8IHByb3BlcnR5LmVxdWFscygiIikpIHsKLQkJc2V0VmFsdWUoIG5vbl93c2lfY29tcGxpYW5jZSwgV0FSTl9OT05fV1NJKTsKLQkJcmV0dXJuIFdBUk5fTk9OX1dTSTsKLQl9Ci0JZWxzZQotCQlyZXR1cm4gcHJvcGVydHk7Ci19Ci0KLXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VydmljZVBvbGljeUlkKCkKLXsKLSAgcmV0dXJuIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfQVAxMDsKLX0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NjI0ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEwOCAgIDIwOTI2NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMxOCAgIDIyMzExOCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBtZXRhZGF0YSByZXF1aXJlZCBpbiBXUy1JIHByb2ZpbGVzIHRvIHN1cHBvcnQgZWRpdG9ycyAmIHZhbGlkYXRvcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotCi0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRXU0lDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVE9QX05PTl9XU0kgPSAiMCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0FSTl9OT05fV1NJID0gIjEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElHTk9SRV9OT05fV1NJID0gIjIiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTExPV19XU0lfUFJFRkVSRU5DRSA9ICIzIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTlVNX0lEX1ZBTFVFUyA9IHsgIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIsICJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiLCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUifTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ09OVEVYVF9JRFMgICAgPSB7IFNUT1BfTk9OX1dTSSwgV0FSTl9OT05fV1NJLCBJR05PUkVfTk9OX1dTSSB9OwotCQotCXByb3RlY3RlZCBRdWFsaWZpZWROYW1lIG5hbWUgPSBudWxsOyAvLyBzZXQgaW4gc3ViY2xhc3MKLQlwcm90ZWN0ZWQgU3RyaW5nIG5vbl93c2lfY29tcGxpYW5jZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX1dTSV9TU0JQX0NPTVBMSUFOQ0UgPSAibm9uV1NJU1NCUENvbXBsaWFuY2UiOwotCXByb3RlY3RlZCBTdHJpbmcgd3NpV2FybmluZ187IC8vIHNldCBpbiBzdWJjbGFzcwotCXByb3RlY3RlZCBTdHJpbmcgd3NpRXJyb3JfOyAvLyBzZXQgaW4gc3ViY2xhc3MKLQotcHVibGljIFBlcnNpc3RlbnRXU0lDb250ZXh0ICgpIAotewotCXN1cGVyKCAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JCi0vLyAgTk9URTogIG5hbWUsIHdzaVdhcm5pbmdfIGFuZCB3c2lFcnJvcl8gc2hvdWxkIGJlIHNldCBpbiB0aGUgc3ViY2xhc3Nlcy4gIFRoaXMgaXMgcHJvdmlkaW5nIGRlZmF1bHRpbmcgb25seS4KLQlub25fd3NpX2NvbXBsaWFuY2UgPSBOT05fV1NJX1NTQlBfQ09NUExJQU5DRTsKLQluYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQgLCBub25fd3NpX2NvbXBsaWFuY2UpOwotCXdzaVdhcm5pbmdfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9XQVJOSU5HOwotCXdzaUVycm9yXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX1NTQlBfRVJST1I7Ci19Ci0KLXB1YmxpYyB2b2lkIGxvYWQoKSAKLXsKLQkvLyBsZXQgdGhlIGRlZmF1bHQgYmUgcmVhZCBmcm9tIHBsdWdpbl9jb3N0b21pemF0aW9uLmluaSBmaWxlCi0JLy8gc2V0RGVmYXVsdChub25fd3NpX2NvbXBsaWFuY2UsIFdBUk5fTk9OX1dTSSk7Ci19Ci0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJlZmVyZW5jZSBwYWdlCi1wdWJsaWMgdm9pZCB1cGRhdGVXU0lDb21wbGlhbmNlcyAoIFN0cmluZyB2YWx1ZSkKLXsKLSAJCXNldFZhbHVlKCBub25fd3NpX2NvbXBsaWFuY2UsIHZhbHVlKTsKLX0KLQotcHVibGljIFN0cmluZyBnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSAoKQotewotCVN0cmluZyBwcm9wZXJ0eSA9IGdldFZhbHVlQXNTdHJpbmcobm9uX3dzaV9jb21wbGlhbmNlKTsKLS8vCSBkZWZhdWx0IHRvIFdhcm5pbmcgaWYgbm8gaW5pdCBoYXMgYmVlbiBkb25lIGZyb20gaW5pIGZpbGUKLQlpZiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpKSB7Ci0JCXNldFZhbHVlKCBub25fd3NpX2NvbXBsaWFuY2UsIFdBUk5fTk9OX1dTSSk7Ci0JCXJldHVybiBXQVJOX05PTl9XU0k7Ci0JfQotCWVsc2UKLQkJcmV0dXJuIHByb3BlcnR5OwotfQotCi1wdWJsaWMgYm9vbGVhbiBTdG9wTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gU1RPUF9OT05fV1NJLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpKTsKLX0KLQotcHVibGljIGJvb2xlYW4gV2Fybk5vbldTSUNvbXBsaWFuY2VzKCkKLXsKLQkgcmV0dXJuIFdBUk5fTk9OX1dTSS5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKSk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIElnbm9yZU5vbldTSUNvbXBsaWFuY2VzKCkKLXsKLQkgcmV0dXJuIElHTk9SRV9OT05fV1NJLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpKTsKLX0KLQotLy8gdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBwcm9wZXJ0eSBwYWdlCi1wdWJsaWMgdm9pZCB1cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMgKCBJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgdmFsdWUpCi17Ci0gICAgdHJ5IHsKLQkJcHJvamVjdC5zZXRQZXJzaXN0ZW50UHJvcGVydHkobmFtZSwgdmFsdWUpOwotICAgIH0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7IAotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIk5vIHN1Y2ggUHJvamVjdCIpOwotICAgIAlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0gICAgCWxvZy5sb2coSUxvZy5JTkZPLCA1MDg0LCB0aGlzLCAidXBkYXRlUHJvamVjdFdTSUNvbXBsaWFuY2VzIiwgIk5vIHN1Y2ggUHJvamVjdCAiK3Byb2plY3QpOwotICAgIH0KLX0KLQotcHVibGljIGJvb2xlYW4gcHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyhJUHJvamVjdCBwcm9qZWN0KQotewotIAlyZXR1cm4gU1RPUF9OT05fV1NJLmVxdWFscyhnZXRQcm9qZWN0UGVyc2lzdGVudFByb3BlcnR5KHByb2plY3QpKTsgICAgCi19Ci0KLXB1YmxpYyBib29sZWFuIHByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXMoSVByb2plY3QgcHJvamVjdCkKLXsKLSAJcmV0dXJuIFdBUk5fTk9OX1dTSS5lcXVhbHMoZ2V0UHJvamVjdFBlcnNpc3RlbnRQcm9wZXJ0eShwcm9qZWN0KSk7ICAgIAotfQotCi1wdWJsaWMgYm9vbGVhbiBwcm9qZWN0SWdub3JlTm9uV1NJQ29tcGxpYW5jZXMoSVByb2plY3QgcHJvamVjdCkKLXsKLSAJcmV0dXJuIElHTk9SRV9OT05fV1NJLmVxdWFscyhnZXRQcm9qZWN0UGVyc2lzdGVudFByb3BlcnR5KHByb2plY3QpKTsgICAgCi19Ci0KLQotLy8gdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBwcm9wZXJ0eSBwYWdlCi1wdWJsaWMgYm9vbGVhbiBwcm9qZWN0Rm9sbG93V1NJUHJlZmVyYW5jZShJUHJvamVjdCBwcm9qZWN0KQotewotICAgIHRyeSB7Ci0gCVN0cmluZyBwcm9wZXJ0eSA9IHByb2plY3QuZ2V0UGVyc2lzdGVudFByb3BlcnR5KG5hbWUpOwotICAgIHJldHVybiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpIHx8IHByb3BlcnR5LmVxdWFscyhGT0xMT1dfV1NJX1BSRUZFUkVOQ0UpKTsKLSAgICAJfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpICAgICB7Ci0gICAgCXJldHVybiB0cnVlOwotICAgICB9ICAgICAKLX0KLQotcHJpdmF0ZSBTdHJpbmcgZ2V0UHJvamVjdFBlcnNpc3RlbnRQcm9wZXJ0eShJUHJvamVjdCBwcm9qZWN0KQotewotCVN0cmluZyBwcm9wZXJ0eSA9IGdldFByb2plY3RXU0lDb21wbGlhbmNlKHByb2plY3QpOwotCWlmIChwcm9wZXJ0eS5lcXVhbHMoRk9MTE9XX1dTSV9QUkVGRVJFTkNFKSkgewotCQlwcm9wZXJ0eSA9IGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCk7Ci0JfQotCXJldHVybiBwcm9wZXJ0eTsKLSB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0V1NJQ29tcGxpYW5jZShJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0KLSAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gICAgICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICBJU2VydmljZVBvbGljeSAgICAgICAgc2VydmljZVBvbGljeSAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBnZXRTZXJ2aWNlUG9saWN5SWQoKSApOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVJRCA9IHNlcnZpY2VQb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKHByb2plY3QpLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLQkJU3RyaW5nICAgICAgICAgICAgICAgIHByb3BlcnR5ICAgICAgID0gRk9MTE9XX1dTSV9QUkVGRVJFTkNFOwotCQkKLQkJZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IEVOVU1fSURfVkFMVUVTLmxlbmd0aDsgaW5kZXgrKyApCi0JCXsKLQkJICBpZiggRU5VTV9JRF9WQUxVRVNbaW5kZXhdLmVxdWFscyggY3VycmVudFN0YXRlSUQgKSApCi0JCSAgewotCQkgICAgcHJvcGVydHkgPSBDT05URVhUX0lEU1tpbmRleF07Ci0JCSAgICBicmVhazsKLQkJICB9Ci0JCX0KLQkJCi0JCXJldHVybiBwcm9wZXJ0eTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0U2VydmljZVBvbGljeUlkKCkKLSAgewotICAgIHJldHVybiBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX1NTQlAxMDsKLSAgfQotICAKLSAgcHVibGljIFF1YWxpZmllZE5hbWUgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdhcm5pbmcoKQotICB7Ci0JICByZXR1cm4gd3NpV2FybmluZ187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yKCkKLSAgewotCSAgcmV0dXJuIHdzaUVycm9yXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMDgyNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMxOCAgIDIyMzExOCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBtZXRhZGF0YSByZXF1aXJlZCBpbiBXUy1JIHByb2ZpbGVzIHRvIHN1cHBvcnQgZWRpdG9ycyAmIHZhbGlkYXRvcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudFdTSUNvbnRleHQKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX1dTSV9TU0JQX0NPTVBMSUFOQ0UgPSAibm9uV1NJU1NCUENvbXBsaWFuY2UiOwotCi0gIHB1YmxpYyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgKCkgCi0gIHsKLQkgIHN1cGVyKCk7Ci0JICBub25fd3NpX2NvbXBsaWFuY2UgPSBOT05fV1NJX1NTQlBfQ09NUExJQU5DRTsKLQkgIG5hbWUgPSBuZXcgUXVhbGlmaWVkTmFtZShXU1BsdWdpbi5JRCAsIG5vbl93c2lfY29tcGxpYW5jZSk7Ci0JICB3c2lXYXJuaW5nXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX1NTQlBfV0FSTklORzsKLQkgIHdzaUVycm9yXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX1NTQlBfRVJST1I7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZpY2VQb2xpY3lJZCgpCi0gIHsKLSAgICByZXR1cm4gV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9TU0JQMTA7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2VkMjExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQKLXsKLQotCXByaXZhdGUgU3RyaW5nIHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbiA9ICJXQUlUX0ZPUl9XU0RMX1ZBTElEQVRJT04iOwotCi1wdWJsaWMgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQgKCkgCi17Ci0Jc3VwZXIoICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQkKLX0KLQotcHVibGljIHZvaWQgbG9hZCgpIAotewotCXNldERlZmF1bHQod2FpdF9mb3Jfd3NkbF92YWxpZGF0aW9uLCB0cnVlKTsKLX0KLQotLy8gdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBwcmVmZXJlbmNlIHBhZ2UKLXB1YmxpYyB2b2lkIHNldFdhaXRGb3JXU0RMVmFsaWRhdGlvbiAoIGJvb2xlYW4gdmFsdWUpCi17Ci0gCQlzZXRWYWx1ZSggd2FpdF9mb3Jfd3NkbF92YWxpZGF0aW9uLCB2YWx1ZSk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIGdldFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb24gKCkKLXsKLQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4od2FpdF9mb3Jfd3NkbF92YWxpZGF0aW9uKTsKLQotfQotCi1wdWJsaWMgYm9vbGVhbiBnZXREZWZhdWx0KCkKLXsKLQlyZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4od2FpdF9mb3Jfd3NkbF92YWxpZGF0aW9uKTsKLX0KLQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0RMRmlsZVByb3BlcnR5VGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTRExGaWxlUHJvcGVydHlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlZmU0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTRExGaWxlUHJvcGVydHlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTIxOSAgIDIxMzQ0NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExGaWxlUHJvcGVydHlUZXN0ZXIgZXh0ZW5kcyBQcm9wZXJ0eVRlc3RlcgotewotICBwdWJsaWMgYm9vbGVhbiB0ZXN0KE9iamVjdCByZWNlaXZlciwgU3RyaW5nIHByb3BlcnR5LCBPYmplY3RbXSBhcmdzLCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYoIHJlY2VpdmVyIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBoYXNXU0RMZmlsZSggKElDb250YWluZXIpIHJlY2VpdmVyICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNXU0RMZmlsZSggSUNvbnRhaW5lciBjb250YWluZXIgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgICA9IGZhbHNlOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIElSZXNvdXJjZVtdIGNoaWxkcmVuID0gY29udGFpbmVyLm1lbWJlcnMoKTsKLSAgICAgIAotICAgICAgZm9yKCBJUmVzb3VyY2UgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgICB7Ci0gICAgICAgIGlmKCBjaGlsZCBpbnN0YW5jZW9mIElDb250YWluZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gaGFzV1NETGZpbGUoIChJQ29udGFpbmVyKSBjaGlsZCApOwotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGNoaWxkIGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGNoaWxkLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggZXh0ZW5zaW9uICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGV4dGVuc2lvbi5lcXVhbHMoICJ3c2RsIiApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBzaW5nbGUgd3NkbCBmaWxlIHdlIHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAgICBpZiggcmVzdWx0ICkgYnJlYWs7Ci0gICAgICB9ICAgIAotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBleGNlcHRpb24gYW5kIHJldHVybiBmYWxzZS4gIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4ODQwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwODI3ICAgMjQ1NDM5IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFVzYWJpbGl0eSBpc3N1ZSB3aXRoIHRoZSBjb21wbGlhbmNlIHdhcm5pbmcgZGlhbG9nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotCi0KLXB1YmxpYyBjbGFzcyBXU0lDb21wbGlhbmNlVXRpbHMKLXsKLQotLyoqCi0gKiBAcGFyYW0gcHJvamVjdAotICogQHBhcmFtIGNvbnRleHQKLSAqIEByZXR1cm4KLSAqLwotcHVibGljIHN0YXRpYyBpbnQgZ2V0V1NJU2V2ZXJpdHkgKElQcm9qZWN0IHByb2plY3QsIFBlcnNpc3RlbnRXU0lDb250ZXh0IGNvbnRleHQpCi17Ci0JaWYgKGNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLQkJcmV0dXJuIFN0YXR1cy5FUlJPUjsKLQllbHNlIGlmIChjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0JCXJldHVybiBTdGF0dXMuV0FSTklORzsKLQllbHNlCi0JCXJldHVybiBTdGF0dXMuSU5GTzsKLX0KLQotLyoqCi0gKiBAcGFyYW0gbW9uaXRvciBJU3RhdHVzSGFuZGxlcgotICogQHBhcmFtIHN0YXR1cyBTdGF0dXNbXQotICogQHBhcmFtIHByb2plY3QgSVByb2plY3QKLSAqIEBwYXJhbSBjb250ZXh0IFBlcnNpc3RlbnRXU0lDb250ZXh0Ci0gKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0byBjb250aW51ZQotICovCi1wdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tXU0lDb21wbGlhbmNlICggSVN0YXR1c0hhbmRsZXIgbW9uaXRvciwgU3RhdHVzW10gc3RhdHVzLCBJUHJvamVjdCBwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dCBjb250ZXh0KQotewotICAJaWYgKGNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgCQl7Ci0gICAgICAKLSAgCQkJLy8gZW1pdCBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gZmFsc2UKLSAgCQkJSVN0YXR1cyBzdGF0dXNfID0gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoIGNvbnRleHQuZ2V0RXJyb3IoKSwgc3RhdHVzICk7Ci0JCQltb25pdG9yLnJlcG9ydEVycm9yKHN0YXR1c18pOwotICAJCQlyZXR1cm4gZmFsc2U7Ci0gIAkJfQotICAJZWxzZSBpZiAoY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotICAJCXsKLSAgCQkJLy8gZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSB3aXRoIHRoZSBvcHRpb25zIHRvIHN0b3AsIGlnbm9yZSB0aGlzIG9uZSwgb3IgaWdub3JlIGFsbCBjb21pbmcgbWVzc2FnZXMKLSAgCQkJSVN0YXR1cyBzdGF0dXNfID0gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoIGNvbnRleHQuZ2V0V2FybmluZygpLCBzdGF0dXMpOwotCi0gIAkJCUNob2ljZSBpZ25vcmVDaG9pY2UgPSBuZXcgQ2hvaWNlKCdJJywgV3N0V1NQbHVnaW5NZXNzYWdlcy5JR05PUkVfTEFCRUwsIFdzdFdTUGx1Z2luTWVzc2FnZXMuSUdOT1JFX0RFU0NSSVBUSU9OKTsKLSAgCQkJQ2hvaWNlIGlnbm9yZUFsbENob2ljZSA9IG5ldyBDaG9pY2UoJ0EnLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLklHTk9SRV9BTExfTEFCRUwsIFdzdFdTUGx1Z2luTWVzc2FnZXMuSUdOT1JFX0FMTF9ERVNDUklQVElPTik7Ci0gIAkJCUNob2ljZSBjYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgV3N0V1NQbHVnaW5NZXNzYWdlcy5DQU5DRUxfTEFCRUwsIFdzdFdTUGx1Z2luTWVzc2FnZXMuQ0FOQ0VMX0RFU0NSSVBUSU9OKTsKLSAgCQkJQ2hvaWNlIHJlc3VsdCA9IG1vbml0b3IucmVwb3J0KHN0YXR1c18sIG5ldyBDaG9pY2VbXXtpZ25vcmVDaG9pY2UsIGlnbm9yZUFsbENob2ljZSwgY2FuY2VsQ2hvaWNlfSk7Ci0gIAkJCQotICAJCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIHRvIGNhbmNlbCwgb3IgY2xvc2VzL2VzY2FwZXMgdGhlIG1lc3NhZ2UgYm94LCBkbyBub3QgY29udGludWUgd2l0aCB0aGUgY29tbWFuZAotICAgICAgICAJaWYgKHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhjYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0JCQkJCXJldHVybiBmYWxzZTsKLSAgCQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyBpZ25vcmUsIGNvbnRpbnVlCi0gIAkJCWVsc2UgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgIAkJCXJldHVybiB0cnVlOwotICAJCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIGlnbm9yZSBhbGwsIGNoYW5nZSB0aGUgcHJlZmVyZW5jZQotCSAgICAgICAgZWxzZSAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVBbGxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0JICAgICAgICAJewotCSAgICAgICAgCQljb250ZXh0LnVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyhwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgICAgICAJCXJldHVybiB0cnVlOwotCSAgICAgICAgCX0KLQkJCQotICAJCX0KLSAgcmV0dXJuIHRydWU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjM2Y2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMxOCAgIDIyMzExOCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBtZXRhZGF0YSByZXF1aXJlZCBpbiBXUy1JIHByb2ZpbGVzIHRvIHN1cHBvcnQgZWRpdG9ycyAmIHZhbGlkYXRvcnMKLSAqIDIwMDgwMzI0ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotcHVibGljIGludGVyZmFjZSBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHN0YXRlS2V5RGVmYXVsdFByb3RvY29sID0gImRlZmF1bHRQcm90b2NvbCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2xfVkFMVUVfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzdGF0ZUtleURlZmF1bHRQcm90b2NvbF9WQUxVRV9TT0FQMTIgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTZXJ2aWNlUG9saWN5SURfU1NCUDEwID0gIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTZXJ2aWNlUG9saWN5SURfQVAxMCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3NpYXAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNlcnZpY2VQb2xpY3lJRF9XU0lQcm9maWxlUm9vdCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHN0YXRlRW51bVJlcXVpcmUgPSAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzdGF0ZUVudW1TdWdnZXN0ID0gIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RhdGVFbnVtSWdub3JlID0gIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIjsKLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0dlbmVyaWNSZXNvdXJjZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvR2VuZXJpY1Jlc291cmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTM2ZDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvR2VuZXJpY1Jlc291cmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIFBhdHRlcm5lZCBhZnRlciB0aGUgUmVzb3VyY2VGYWN0b3J5IGNsYXNzZXMgZ2VuZXJhdGVkCi0gKiBieSB0aGUgRU1GIHRvb2xzLCB0aGlzIGdlbmVyaWMgZmFjdG9yeSBoYW5kbGVzIGNyZWF0aW9uCi0gKiBvZiBFTUYgcmVzb3VyY2VzIGZvciBYTUwgZG9jdW1lbnRzIGluIGdlbmVyYWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5IGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbAotewotCS8qKgotCSAqIEhvbGRzIGFuIGluc3RhbmNlIG9mIDxjb2RlPkV4dGVuZGVkTWV0YURhdGE8L2NvZGU+Ci0JICogZm9yIGFzc29jaWF0aW5nIGV4dGVuZGVkIG1ldGFkYXRhIHdpdGggdGhlCi0JICogPGNvZGU+UmVzb3VyY2U8L2NvZGU+IHJldHVybmVkIGJ5IDxjb2RlPmNyZWF0ZVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5HZW5lcmljUmVzb3VyY2VGYWN0b3J5PC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSgpCi0JewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UkRmFjdG9yeSNjcmVhdGVSZXNvdXJjZShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKQotCXsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFhNTFJlc291cmNlSW1wbCh1cmkpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lSZWdpc3RyeU1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVJlZ2lzdHJ5TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI3OTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVJlZ2lzdHJ5TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotLyoqCi0gKiBBbiBJUmVnaXN0cnlNYW5hZ2VyIG1hbmFnZXMgYSBmYW1pbHkgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+Ci0gKiBhbmQgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBwZXJzaXN0ZWQgd2l0aGluIHNvbWUKLSAqIGFkZHJlc3NhYmxlIGxvY2F0aW9uIHN1Y2ggYXMgdW5kZXIgYSBkaXJlY3RvcnkgaW4gdGhlCi0gKiBmaWxlc3lzdGVtIG9yIHVuZGVyIGEgZm9sZGVyIGluIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSwKLSAqIGFuZCByZWZlcmVuY2VkIGZyb20gYW4gaW5kZXggZG9jdW1lbnQgYXQgdGhlIHNhbWUgbG9jYXRpb24uIAotICogPHA+Ci0gKiBDYWxsIDxjb2RlPlJlZ2lzdGVyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpPC9jb2RlPgotICogb3IgPGNvZGU+UmVnaXN0ZXJ5U2VydmljZS5nZXRSZWdpc3RyeU1hbmFnZXIoVVJMKTwvY29kZT4gdG8KLSAqIGdldCBhIG5ldyBJUmVnaXN0cnlNYW5hZ2VyLgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2UjaW5zdGFuY2UoKQotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqLwotcHVibGljIGludGVyZmFjZSBJUmVnaXN0cnlNYW5hZ2VyCi17Ci0JLyoqCi0JICogQSBjb25zdGFudCBmb3IgdXNlIGluIHRoZSA8Y29kZT5yZW1vdmVSZWdpc3RyeSguLi4pPC9jb2RlPgotCSAqIGFuZCA8Y29kZT5yZW1vdmVUYXhvbm9teSguLi4pPC9jb2RlPiBtZXRob2RzIHRoYXQgd2lsbAotCSAqIGNhdXNlIHRoZSBnaXZlbiByZWdpc3RyeSBvciB0YXhvbm9teSBkb2N1bWVudCB0byBiZSByZW1vdmVkCi0JICogZnJvbSB0aGUgaW5kZXgsIGJ1dCBub3QgZGVsZXRlZC4KLQkgKiAKLQkgKiBAc2VlICNyZW1vdmVSZWdpc3RyeShTdHJpbmcsIGJvb2xlYW4pCi0JICogQHNlZSAjcmVtb3ZlVGF4b25vbXkoU3RyaW5nLCBib29sZWFuKQotCSAqLwotCXB1YmxpYyBib29sZWFuIEtFRVBfRE9DVU1FTlQgPSBmYWxzZTsKLQotCS8qKgotCSAqIEEgY29uc3RhbnQgZm9yIHVzZSBpbiB0aGUgPGNvZGU+cmVtb3ZlUmVnaXN0cnkoLi4uKTwvY29kZT4KLQkgKiBhbmQgPGNvZGU+cmVtb3ZlVGF4b25vbXkoLi4uKTwvY29kZT4gbWV0aG9kcyB0aGF0IHdpbGwKLQkgKiBjYXVzZSB0aGUgZ2l2ZW4gcmVnaXN0cnkgb3IgdGF4b25vbXkgZG9jdW1lbnQgdG8gYmUgcmVtb3ZlZAotCSAqIGZyb20gdGhlIGluZGV4IGFuZCBkZWxldGVkLgotCSAqIAotCSAqIEBzZWUgI3JlbW92ZVJlZ2lzdHJ5KFN0cmluZywgYm9vbGVhbikKLQkgKiBAc2VlICNyZW1vdmVUYXhvbm9teShTdHJpbmcsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIGJvb2xlYW4gREVMRVRFX0RPQ1VNRU5UID0gdHJ1ZTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgWE1MIGluZGV4IGRvY3VtZW50IHRoYXQgcmVmZXJlbmNlcwotCSAqIHRoZSBYTUwgcmVnaXN0cnkgYW5kIHRheG9ub215IG1vZGVscyBtYW5hZ2VkIGJ5IHRoaXMKLQkgKiBSZWdpc3RyeSBNYW5hZ2VyLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIFVSTCBvZiB0aGUgbWFuYWdpbmcgZG9jdW1lbnQuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gSWYgYSBVUkwgdG8gdGhlIG1hbmFnaW5nCi0JICogZG9jdW1lbnQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgY3JlYXRlZC4KLQkgKi8KLQlwdWJsaWMgVVJMIGdldFVSTCAoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi0JLyoqCi0JICogQWRkcyBhbiA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IHRoYXQgdGhlCi0JICogPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gY2FuIHVzZSB0byBmaW5kCi0JICogdGhlIHNldCBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHVzZWQKLQkgKiBieSBhIGdpdmVuIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4KLQkgKiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyLnNhdmUocmVnaXN0cnkpPC9jb2RlPiBuZWVkcyBoZWxwIGZpbmRpbmcKLQkgKiB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyB1c2VkIGJ5IGEgPGNvZGU+UmVnaXN0cnk8L2NvZGU+LAotCSAqIGlmIGFueS4KLQkgKiAKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25jcmV0ZSA8Y29kZT5SZWdpc3RyeTxjb2RlPgotCSAqIGNsYXNzIGZvciB3aGljaCB0aGUgPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiBpcyBiZWluZyBhZGRlZC4KLQkgKiBAcGFyYW0gdGF4b25vbXlGaW5kZXIgQW4gPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiB0aGF0IGtub3dzCi0JICogaG93IHRvIGRldGVybWluZSB0aGUgc2V0IG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgYSBnaXZlbgotCSAqIGNvbmNyZXRlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCBpcyB1c2luZy4KLQkgKiBAc2VlIElUYXhvbm9teUZpbmRlcgotCSAqIEBzZWUgI3NhdmVSZWdpc3RyeShSZWdpc3RyeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUYXhvbm9teUZpbmRlciAoIFN0cmluZyBjbGFzc05hbWUsIElUYXhvbm9teUZpbmRlciB0YXhvbm9teUZpbmRlciApOwotCi0gICAgLyoqCi0gICAgICogRGVzdHJveXMgdGhlIGluZGV4IG9mIHJlZ2lzdHJpZXMgYW5kIHRheG9ub21pZXMgaW4gbWVtb3J5LgotICAgICAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gPGNvZGU+Z2V0SW5kZXgoKTwvY29kZT4gYW5kIG90aGVyIG1ldGhvZHMKLSAgICAgKiBvZiB0aGlzIGludGVyZmFjZSB3aWxsIGNhdXNlIHRoZSBpbmRleCB0byBiZSByZWxvYWRlZC4KLSAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGFueXRpbWUgdGhlIGNhbGxlciBzdXNwZWN0cyB0aGUKLSAgICAgKiBwZXJzaXN0ZW50IGluZGV4IGhhcyBjaGFuZ2VkIGFuZCB3aXNoZXMgdG8gbG9hZCB0aGUgY2hhbmdlcwotICAgICAqIGludG8gdGhlIGN1cnJlbnQgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVmcmVzaE1hbmFnZXIgKCk7Ci0KLQkvKioKLQkgKiBTYXZlcyBhIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQKLQkgKiBsb2NhdGVkIHJlbGF0aXZlIHRvIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgYXMgaWRlbnRpZmllZCBieQotCSAqIDxjb2RlPmdldFVSTCgpPC9jb2RlPiwgYW5kIHVwZGF0ZXMgdGhlIGluZGV4IFhNTCBkb2N1bWVudAotCSAqIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc2F2ZWQgdGF4b25vbXkgZG9jdW1lbnQuCi0JICogVGhlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHRoZSB0YXhvbm9teSBYTUwgZG9jdW1lbnQgaXMKLQkgKiBjb21wdXRlZCBieSB0aGUgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gYW5kIGNhbm5vdAotCSAqIGJlIGluZmx1ZW5jZWQgYnkgdGhlIGNhbGxlci4KLQkgKiAKLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCAoYW5kCi0JICogcmVmZXJlbmNlZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzKSB0byBzYXZlLgotCSAqIEByZXR1cm4gQSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gcmVmZXJlbmNlLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSAjYWRkVGF4b25vbXlGaW5kZXIoU3RyaW5nLCBJVGF4b25vbXlGaW5kZXIpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IHNhdmVSZWdpc3RyeSAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBMb2FkcyBhcyBuZWNlc3NhcnkgYW5kIHJldHVybnMgYSBmdWxsIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPgotCSAqIG1vZGVsIGFzIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIFVSSSBhbmQgcmVmZXJlbmNlZCBmcm9tCi0JICogdGhlIGluZGV4IFhNTCBkb2N1bWVudCBsb2NhdGVkIGF0IDxjb2RlPmdldFVSTCgpPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgcmVnaXN0cnkuCi0JICogQHJldHVybiBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIG1vZGVsIGNhbiBiZSBmb3VuZC4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBsb2FkUmVnaXN0cnkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBMb2FkcyBhcyBuZWNlc3NhcnkgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgZnVsbCA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLQkgKiBtb2RlbHMgYXMgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2YgVVJJcyBhbmQgcmVmZXJlbmNlZCBmcm9tCi0JICogdGhlIGluZGV4IFhNTCBkb2N1bWVudCBsb2NhdGVkIGF0IDxjb2RlPmdldFVSTCgpPC9jb2RlPi4KLQkgKiBVc2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT5nZXRSZWdpc3RyeVVSSXMoKTwvY29kZT4uCi0JICogTm90ZSB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGFycmF5IG1heSBiZSBsZXNzIHRoYW4KLQkgKiB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvZiBVUklzIGluIGNhc2VzIHdoZXJlIG9uZSBvciBtb3JlCi0JICogVVJJcyBmYWlsIHRvIHJlc29sdmUgdG8gYSBsb2FkYWJsZSBtb2RlbC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpcyBUaGUgVVJJIGlkZW50aWZpZXJzIG9mIHRoZSByZWdpc3RyaWVzLgotCSAqIEByZXR1cm4gVGhlIGFycmF5IG9mIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbHMsCi0JICogbmV2ZXIgbnVsbCwgYnV0IHBvc3NpYmx5IGVtcHR5LgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIFJlZ2lzdHJ5W10gbG9hZFJlZ2lzdHJpZXMgKCBTdHJpbmdbXSB1cmlzICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycyB0byA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLQkgKiBtb2RlbHMgaW4gdGhlIGluZGV4IG1hbmFnZWQgYnkgdGhpcyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycywgcG9zc2libHkgZW1wdHkgYnV0IG5ldmVyIG51bGwsCi0JICogdG8gcmVnaXN0ZXJlZCA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWxzLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFJlZ2lzdHJ5VVJJcyAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFJlbW92ZXMgdGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCBpZGVudGlmaWVkIGJ5IHRoZQotCSAqIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4gZnJvbSB0aGUgaW5kZXggYW5kIGVpdGhlciBrZWVwcyBvcgotCSAqIGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGRvY3VtZW50Ci0JICogYmFzZWQgb24gdGhlIHZhbHVlIGdpdmVuIGZvciA8Y29kZT5kZWxldGVEb2N1bWVudDwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIG1vZGVsIHRvIGRlbGV0ZS4KLQkgKiBAcGFyYW0gZGVsZXRlRG9jdW1lbnQgRWl0aGVyIDxjb2RlPktFRVBfRE9DVU1FTlQ8L2NvZGU+Ci0JICogb3IgPGNvZGU+REVMRVRFX0RPQ1VNRU5UPC9jb2RlPiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKLQkgKiBtb2RlbCBkb2N1bWVudCBzaG91bGQgYmUga2VwdCBvciBkZWxldGVkLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSAjS0VFUF9ET0NVTUVOVAotCSAqIEBzZWUgI0RFTEVURV9ET0NVTUVOVAotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVJlZ2lzdHJ5ICggU3RyaW5nIHVyaSwgYm9vbGVhbiBkZWxldGVEb2N1bWVudCApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogU2F2ZXMgYSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gYW4gWE1MIGRvY3VtZW50Ci0JICogbG9jYXRlZCByZWxhdGl2ZSB0byB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGFzIGlkZW50aWZpZWQgYnkKLQkgKiA8Y29kZT5nZXRVUkwoKTwvY29kZT4sIGFuZCB1cGRhdGVzIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQKLQkgKiB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHNhdmVkIHRheG9ub215IGRvY3VtZW50LgotCSAqIFRoZSByZWxhdGl2ZSBwYXRobmFtZSB0byB0aGUgdGF4b25vbXkgWE1MIGRvY3VtZW50IGlzCi0JICogY29tcHV0ZWQgYnkgdGhlIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGFuZCBjYW5ub3QKLQkgKiBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBjYWxsZXIuCi0JICogCi0JICogQHBhcmFtIHRheG9ub215IFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gc2F2ZS4KLQkgKiBAcmV0dXJuIEEgPGNvZGU+VGF4b25vbXk8L2NvZGU+IHJlZmVyZW5jZS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBzYXZlVGF4b25vbXkgKCBUYXhvbm9teSB0YXhvbm9teSApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogTG9hZHMgYXMgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIGEgZnVsbCA8Y29kZT5UYXhvbm9teTwvY29kZT4KLQkgKiBtb2RlbCBhcyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBVUkkgYW5kIHJlZmVyZW5jZWQgZnJvbQotCSAqIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgbG9jYXRlZCBhdCA8Y29kZT5nZXRVUkwoKTwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIHRheG9ub215LgotCSAqIEByZXR1cm4gVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbAotCSAqIG9yIG51bGwgaWYgbm8gc3VjaCBtb2RlbCBjYW4gYmUgZm91bmQuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgbG9hZFRheG9ub215ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogTG9hZHMgYXMgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGZ1bGwgPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0JICogbW9kZWxzIGFzIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIFVSSXMgYW5kIHJlZmVyZW5jZWQgZnJvbQotCSAqIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgbG9jYXRlZCBhdCA8Y29kZT5nZXRVUkwoKTwvY29kZT4uCi0JICogVXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+Z2V0VGF4b25vbXlVUklzKCk8L2NvZGU+LgotCSAqIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBhcnJheSBtYXkgYmUgbGVzcyB0aGFuCi0JICogdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb2YgVVJJcyBpbiBjYXNlcyB3aGVyZSBvbmUgb3IgbW9yZQotCSAqIFVSSXMgZmFpbCB0byByZXNvbHZlIHRvIGEgbG9hZGFibGUgbW9kZWwuIAotCSAqIAotCSAqIEBwYXJhbSB1cmlzIFRoZSBVUkkgaWRlbnRpZmllcnMgb2YgdGhlIHRheG9ub21pZXMuCi0JICogQHJldHVybiBUaGUgYXJyYXkgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscywKLQkgKiBuZXZlciBudWxsLCBidXQgcG9zc2libHkgZW1wdHkuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSBsb2FkVGF4b25vbWllcyAoIFN0cmluZ1tdIHVyaXMgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzIHRvIDxjb2RlPlRheG9ub215PC9jb2RlPgotCSAqIG1vZGVscyBpbiB0aGUgaW5kZXggbWFuYWdlZCBieSB0aGlzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzLCBwb3NzaWJseSBlbXB0eSBidXQgbmV2ZXIgbnVsbCwKLQkgKiB0byByZWdpc3RlcmVkIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0VGF4b25vbXlVUklzICgpIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogUmVtb3ZlcyB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIGlkZW50aWZpZWQgYnkgdGhlCi0JICogZ2l2ZW4gPGNvZGU+dXJpPC9jb2RlPiBmcm9tIHRoZSBpbmRleCBhbmQgZWl0aGVyIGtlZXBzIG9yCi0JICogZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyA8Y29kZT5UYXhvbm9teTwvY29kZT4gZG9jdW1lbnQKLQkgKiBiYXNlZCBvbiB0aGUgdmFsdWUgZ2l2ZW4gZm9yIDxjb2RlPmRlbGV0ZURvY3VtZW50PC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlLgotCSAqIEBwYXJhbSBkZWxldGVEb2N1bWVudCBFaXRoZXIgPGNvZGU+S0VFUF9ET0NVTUVOVDwvY29kZT4KLQkgKiBvciA8Y29kZT5ERUxFVEVfRE9DVU1FTlQ8L2NvZGU+IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQotCSAqIG1vZGVsIGRvY3VtZW50IHNob3VsZCBiZSBrZXB0IG9yIGRlbGV0ZWQuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKiBAc2VlICNLRUVQX0RPQ1VNRU5UCi0JICogQHNlZSAjREVMRVRFX0RPQ1VNRU5UCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVGF4b25vbXkgKCBTdHJpbmcgdXJpLCBib29sZWFuIGRlbGV0ZURvY3VtZW50ICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lUYXhvbm9teUZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JVGF4b25vbXlGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc4ZmNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lUYXhvbm9teUZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotLyoqCi0gKiBBbiA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IGNvbXB1dGVzIHRoZSBzZXQgb2YKLSAqIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgcmVmZXJlbmNlZCBvciB1c2VkIGJ5IGEKLSAqIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPi4KLSAqIEBhdXRob3IgZ2lsYmVydGFAY2EuaWJtLmNvbQotICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVRheG9ub215RmluZGVyCi17Ci0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSB0YXhvbm9taWVzIHVzZWQgYnkgdGhlIGdpdmVuCi0JICogPGNvZGU+cmVnaXN0cnk8L2NvZGU+LiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0JICoKLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBmb3Igd2hpY2gKLQkgKiBhIHNldCBvZiB0YXhvbm9taWVzIG1pZ2h0IGJlIGZvdW5kLgotCSAqIEByZXR1cm4gVGhlIGFycmF5IG9mIHRheG9ub21pZXMsIHBvc3NpYmx5IGVtcHR5LgotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIHRheG9ub21pZXMgKCBSZWdpc3RyeSByZWdpc3RyeSApOwkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzY2NkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxMzE1ODIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDkwNiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0vKioKLSAqIEEgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlNYW5hZ2VyIGltcGxlbWVudHMgSVJlZ2lzdHJ5TWFuYWdlcgotewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBSRUdJU1RSWSA9ICJSZWdpc3RyeSI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBWE9OT01ZID0gIlRheG9ub215IjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgWE1MID0gInhtbCI7Ci0JcHJpdmF0ZSBIYXNodGFibGUgdGF4b25vbXlGaW5kZXJzXzsKLQlwcml2YXRlIEluZGV4IGluZGV4XzsKLQlwcml2YXRlIEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkgcmVzb3VyY2VGYWN0b3J5XyA9IG5ldyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5KCk7Ci0JcHJpdmF0ZSBVUkwgcmVnaXN0cnlVUkxfPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIHJlZ2lzdHJ5UGF0aG5hbWVfID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgUmVnaXN0cnlNYW5hZ2VyIGZvciB0aGUgaW5kZXggWE1MIGZpbGUKLQkgKiBhdCB0aGUgZ2l2ZW4gPGNvZGU+dXJsPC9jb2RlPi4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIGluZGV4IFhNTCBmaWxlLgotCSAqLwotCVJlZ2lzdHJ5TWFuYWdlciAoIFVSTCB1cmwgKQotCXsKLQkJcmVnaXN0cnlVUkxfID0gdXJsOwotCQl0YXhvbm9teUZpbmRlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgUmVnaXN0cnlNYW5hZ2VyIGZvciB0aGUgaW5kZXggWE1MIGZpbGUKLQkgKiBhdCB0aGUgZ2l2ZW4gPGNvZGU+cGF0aG5hbWU8L2NvZGU+LgotCSAqIEBwYXJhbSBwYXRobmFtZSBUaGUgcGF0aG5hbWUgdG8gdGhlIGluZGV4IFhNTCBmaWxlLgotCSAqLwotCVJlZ2lzdHJ5TWFuYWdlciAoIFN0cmluZyBwYXRobmFtZSApCi0JewotCQlyZWdpc3RyeVBhdGhuYW1lXyA9IHBhdGhuYW1lOwotCQl0YXhvbm9teUZpbmRlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2dldFVSTCgpCi0JICovCi0JcHVibGljIFVSTCBnZXRVUkwgKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCXsKLQkJaWYgKHJlZ2lzdHJ5VVJMXyA9PSBudWxsKQotCQl7Ci0JCQlyZWdpc3RyeVVSTF8gPSBuZXcgRmlsZShyZWdpc3RyeVBhdGhuYW1lXykudG9VUkwoKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlVUkxfOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gYWJzb2x1dGUgVVJMIGNvbXB1dGVkIGZyb20gdGhlIGFic29sdXRlIFVSTCBvZiB0aGUKLQkgKiBpbmRleCBYTUwgZG9jdW1lbnQgbWFuYWdlZCBieSB0aGlzIDxjb2RlPlJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4KLQkgKiBhbmQgdGhlIGdpdmVuIDxjb2RlPmlkPC9jb2RlPi4gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZXRlcm1pbmUKLQkgKiBhIHJlYXNvbmFibGUgbG9jYXRpb24gVVJMIGZvciByZWdpc3RyeSBhbmQgdGF4b25vbXkgZG9jdW1lbnRzCi0JICogd2hlbiByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIGZpcnN0IHRvIGJlIGFkZGVkIHRvIHRoZSBpbmRleCBYTUwKLQkgKiBkb2N1bWVudC4gVGhpcyBtZXRob2QgaXMgaWRlbXBvdGVudCBpbnNvZmFyIGFzIGl0IHdpbGwgYWx3YXlzCi0JICogY29tcHV0ZSB0aGUgc2FtZSBVUkwgZm9yIGEgZ2l2ZW4gPGNvZGU+UmVnaXN0cnlNYW5hZ2VyPC9jb2RlPgotCSAqIGFuZCBhIGdpdmVuIDxjb2RlPmlkPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSByZWZlcmVuY2VkIHJlZ2lzdHJ5IG9yIHRheG9ub215IGRvY3VtZW50LiAKLQkgKiBAcmV0dXJuIFRoZSBhYnNvbHV0ZSBVUkwgdG8gdGhlIHJlZmVyZW5jZWQgZG9jdW1lbnQuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gSWYgYSB2aWFibGUgYWJzb2x1dGUgVVJMIGNhbm5vdAotCSAqIGJlIGNvbXB1dGVkLgotCSAqLwotCXByaXZhdGUgVVJMIGdldFVSTCAoIFN0cmluZyBpZCApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBiYXNlVXJsID0gIiI7IAotCQlVUkwgaW5kZXhVcmwgPSBnZXRVUkwoKTsKLQkJU3RyaW5nIGluZGV4U3RyaW5nID0gaW5kZXhVcmwudG9TdHJpbmcoKTsKLQkJaW50IGluZGV4ID0gaW5kZXhTdHJpbmcubGFzdEluZGV4T2YoIi8iKTsgCi0JCWJhc2VVcmwgPSBpbmRleFN0cmluZy5zdWJzdHJpbmcoMCxpbmRleCArIDEpOwotCQlTdHJpbmcgdXJsU3RyaW5nID0gYmFzZVVybCArIGlkICsgIi4iICsgWE1MOwotCQlyZXR1cm4gbmV3IFVSTCh1cmxTdHJpbmcpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3JlZnJlc2hNYW5hZ2VyKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoTWFuYWdlciAoKQotCXsKLQkJaW5kZXhfID0gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogQ2FjaGVzIGFuZCByZXR1cm5zIHRoZSBpbmRleCBtb2RlbC4gT24gZmlyc3QgY2FsbCwKLQkgKiBpZiBhbiBpbmRleCBkb2N1bWVudCBleGlzdHMsIHRoZSBpbmRleCBpcyBsb2FkZWQKLQkgKiBmcm9tIGl0LCBvdGhlcndpc2UsIGEgbmV3IGluZGV4IGlzIHJldHVybmVkLgotCSAqIEByZXR1cm4gVGhlIGluZGV4LgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgaW5kZXggY2Fubm90IGJlIGxvYWRlZCBmb3IgYW55IHJlYXNvbi4KLQkgKi8KLQlwcml2YXRlIEluZGV4IGdldEluZGV4ICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlpZiAoaW5kZXhfID09IG51bGwpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCVVSTCBpbmRleFVSTCA9IGdldFVSTCgpOwotCQkJCWlmIChSZWdpc3RyeVNlcnZpY2UuZXhpc3RzKGluZGV4VVJMKSkKLQkJCQl7Ci0JCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJCQkJcmVzb3VyY2UubG9hZChSZWdpc3RyeVNlcnZpY2UuZ2V0SW5wdXRTdHJlYW1Gb3IoaW5kZXhVUkwpLG51bGwpOwotCQkJCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IGRvY3VtZW50ID0gKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QpcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7Ci0JCQkJCWluZGV4XyA9IGRvY3VtZW50LmdldEluZGV4KCk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWluZGV4XyA9IFJUSW5kZXhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbmRleCgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vVE9ETzogTmVlZCBhIG1lc3NhZ2UgZm9yIHRoaXMgU3RhdHVzLgotCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW5kZXhfOwotCX0KLQotCS8qKgotCSAqIFNhdmVzIHRoZSBpbmRleCBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQuCQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgc2F2ZSBmYWlscyBmb3IgYW55IHJlYXNvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2F2ZUluZGV4ICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IGRvY3VtZW50ID0gUlRJbmRleEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQlkb2N1bWVudC5zZXRJbmRleChnZXRJbmRleCgpKTsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkb2N1bWVudCk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5zYXZlKFJlZ2lzdHJ5U2VydmljZS5nZXRPdXRwdXRTdHJlYW1Gb3IoZ2V0VVJMKCkpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvL1RPRE86IE5lZWQgYSBtZXNzYWdlIGZvciB0aGlzIFN0YXR1cy4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNhZGRUYXhvbm9teUZpbmRlcihqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVRheG9ub215RmluZGVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRheG9ub215RmluZGVyKFN0cmluZyBjbGFzc05hbWUsIElUYXhvbm9teUZpbmRlciB0YXhvbm9teUZpbmRlcikKLQl7Ci0JCXRheG9ub215RmluZGVyc18ucHV0KGNsYXNzTmFtZSx0YXhvbm9teUZpbmRlcik7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPiBhcy1pcywgd2hldGhlciBmdWxsIG1vZGVsCi0JICogb3IgcmVmZXJlbmNlLCB0byB0aGUgaW5kZXggb25seSBpZiBhIHJlZ2lzdHJ5IHdpdGggdGhlIHNhbWUgSUQKLQkgKiBvciByZWZlcmVuY2UgaXMgbm90IGFscmVhZHkgc3RvcmVkIHRoZXJlLgotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgcmVnaXN0cnkgdG8gYWRkLgotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRSZWdpc3RyeVRvSW5kZXgoUmVnaXN0cnkgcmVnaXN0cnkpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgaWQgPSByZWdpc3RyeS5nZXRJZCgpOwotCQlpZiAoaWQgPT0gbnVsbCkgaWQgPSByZWdpc3RyeS5nZXRSZWYoKTsKLQkJaWYgKGlkICE9IG51bGwgJiYgZ2V0UmVnaXN0cnkoaWQpID09IG51bGwpCi0JCXsKLQkJCWdldEluZGV4KCkuZ2V0UmVnaXN0cnkoKS5hZGQocmVnaXN0cnkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgdGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPiBhcy1pcywgd2hldGhlciBmdWxsIG1vZGVsCi0JICogb3IgcmVmZXJlbmNlLCB0byB0aGUgaW5kZXggb25seSBpZiBhIHRheG9ub215IHdpdGggdGhlIHNhbWUgSUQKLQkgKiBvciByZWZlcmVuY2UgaXMgbm90IGFscmVhZHkgc3RvcmVkIHRoZXJlLgotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgdGF4b25vbXkgdG8gYWRkLgotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRUYXhvbm9teVRvSW5kZXgoVGF4b25vbXkgdGF4b25vbXkpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgaWQgPSB0YXhvbm9teS5nZXRJZCgpOwotCQlpZiAoaWQgPT0gbnVsbCkgaWQgPSB0YXhvbm9teS5nZXRSZWYoKTsKLQkJaWYgKGlkICE9IG51bGwgJiYgZ2V0VGF4b25vbXkoaWQpID09IG51bGwpCi0JCXsKLQkJIAlnZXRJbmRleCgpLmdldFRheG9ub215KCkuYWRkKHRheG9ub215KTsJCi0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjc2F2ZVJlZ2lzdHJ5KG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IHNhdmVSZWdpc3RyeSAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJUmVnaXN0cnkgcmVnaXN0cnlSZWYgPSBudWxsOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IGdldFVSTChSRUdJU1RSWSArIHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVSZWdpc3RyeSh1cmwscmVnaXN0cnkpOwotCQkJcmVnaXN0cnlSZWYgPSByZWdpc3RyeVNlcnZpY2UubmV3UmVnaXN0cnlSZWZlcmVuY2UocmVnaXN0cnkpOwotCQkJcmVnaXN0cnlSZWYuc2V0TG9jYXRpb24odXJsLnRvU3RyaW5nKCkpOwotCQkJYWRkUmVnaXN0cnlUb0luZGV4KHJlZ2lzdHJ5UmVmKTsKLQkJCXNhdmVJbmRleCgpOwotCQkJLyoKLQkJCSAqIFRPRE86IFRoZSBmb2xsb3dpbmcgcGlsZSBvZiBjb2RlIGlzIGNvbW1lbnRlZCBvdXQKLQkJCSAqIHNpbmNlIHRoZXJlIGlzbid0IGEgcmVsaWFibGUgd2F5IHVuZGVyIHRoZSBjdXJyZW50Ci0JCQkgKiBkZXNpZ24gdG8gc2F2ZSB0YXhvbm9teSBtb2RlbHMgaGVsZCBpbiBhIHJlZ2lzdHJ5IG1vZGVsCi0JCQkgKiAKLQkJCUlUYXhvbm9teUZpbmRlciBmaW5kZXIgPSAoSVRheG9ub215RmluZGVyKXRheG9ub215RmluZGVyc18uZ2V0KHJlZ2lzdHJ5LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCWlmIChmaW5kZXIgIT0gbnVsbCkKLQkJCXsKLQkJCQlUYXhvbm9teVtdIHRheG9ub21pZXMgPSBmaW5kZXIudGF4b25vbWllcyhyZWdpc3RyeSk7Ci0JCQkJZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlTdHJpbmcgaWQgPSB0YXhvbm9taWVzW2ldLmdldElkKCk7Ci0JCQkJCVN0cmluZyByZWYgPSB0YXhvbm9taWVzW2ldLmdldFJlZigpOwotCQkJCQlpZiAoaWQgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJVVJMIHRheG9ub215VVJMID0gZ2V0VVJMKFRBWE9OT01ZICsgaWQpOwotCQkJCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVUYXhvbm9teSh0YXhvbm9teVVSTCx0YXhvbm9taWVzW2ldKTsKLQkJCQkJCVRheG9ub215IHRheG9ub215UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub21pZXNbaV0pOwotCQkJCQkJdGF4b25vbXlSZWYuc2V0TG9jYXRpb24odGF4b25vbXlVUkwudG9TdHJpbmcoKSk7Ci0JCQkJCQlhZGRUYXhvbm9teVRvSW5kZXgodGF4b25vbXlSZWYpOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHJlZiAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlpZiAodGF4b25vbWllc1tpXS5nZXRMb2NhdGlvbigpID09IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJCQkJCQlUYXhvbm9teSB0YXhvbm9teSA9IGdldFRheG9ub215KHJlZik7Ci0JCQkJCQkJaWYgKHRheG9ub215ICE9IG51bGwpIGxvY2F0aW9uID0gdGF4b25vbXkuZ2V0TG9jYXRpb24oKTsKLQkJCQkJCQlpZiAobG9jYXRpb24gPT0gbnVsbCkgbG9jYXRpb24gPSBnZXRVUkwoVEFYT05PTVkgKyByZWYpLnRvU3RyaW5nKCk7Ci0JCQkJCQkJdGF4b25vbWllc1tpXS5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCQkJCQkJaWYgKHRheG9ub215ID09IG51bGwpCi0JCQkJCQkJewotCQkJCQkJCQlhZGRUYXhvbm9teVRvSW5kZXgocmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub21pZXNbaV0pKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCSAgICAqLwotCQl9Ci0JCWNhdGNoICggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lICkKLQkJewotCQkJLy9UT0RPOiBNZXNzYWdlIHRleHQgcmVxdWlyZWQuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixtZSkpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeVNlcnZpY2UubmV3UmVnaXN0cnlSZWZlcmVuY2UocmVnaXN0cnlSZWYpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2xvYWRSZWdpc3RyeShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBsb2FkUmVnaXN0cnkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJdHJ5Ci0JCXsKLQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkodXJpKTsKLQkJCWlmIChyZWdpc3RyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQotCQkJLy8gSWYgdGhlIFJlZ2lzdHJ5IGhhcyBhbiBJRCwgaXQncyBhIGZ1bGwgbW9kZWwKLQkJCS8vIGlubGluZWQgd2l0aGluIHRoZSBJbmRleCBhbmQgaXMgcmV0dXJuZWQgYXMtaXMuCi0JCQlpZiAocmVnaXN0cnkuZ2V0SWQoKSAhPSBudWxsKSByZXR1cm4gcmVnaXN0cnk7Ci0KLQkJCS8vIE90aGVyd2lzZSBpdCdzIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbAotCQkJLy8gd2hpY2ggd2UgbG9hZCBmcm9tIHRoZSByZWZlcmVuY2UncyBsb2NhdGlvbi4KLQkJCVN0cmluZyB1cmxTdHJpbmcgPSByZWdpc3RyeS5nZXRMb2NhdGlvbigpOwotCQkJaWYgKHVybFN0cmluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7Ci0JCQlyZXR1cm4gcmVnaXN0cnlTZXJ2aWNlLmxvYWRSZWdpc3RyeSh1cmwpOwotCQl9Ci0JCWNhdGNoICggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lICkKLQkJewotCQkJLy9UT0RPOiBNZXNzYWdlIHRleHQgcmVxdWlyZWQuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixtZSkpOwotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2xvYWRSZWdpc3RyaWVzKGphdmEubGFuZy5TdHJpbmdbXSkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlbXSBsb2FkUmVnaXN0cmllcyAoIFN0cmluZ1tdIHVyaXMgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCh1cmlzLmxlbmd0aCk7Ci0JCWZvciAoaW50IGk9MDsgaTx1cmlzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IGxvYWRSZWdpc3RyeSh1cmlzW2ldKTsKLQkJCWlmIChyZWdpc3RyeSAhPSBudWxsKQotCQkJewotCQkJCWxpc3QuYWRkKHJlZ2lzdHJ5KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKFJlZ2lzdHJ5W10pbGlzdC50b0FycmF5KG5ldyBSZWdpc3RyeVswXSk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjZ2V0UmVnaXN0cnlVUklzKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0UmVnaXN0cnlVUklzICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpOwotCQlMaXN0IHJlZ2lzdHJ5VVJJcyA9IG5ldyBBcnJheUxpc3QobGlzdC5zaXplKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKQotCQl7Ci0JCQkvLyBFYWNoIFJlZ2lzdHJ5IGZvdW5kIGluIHRoZSBpbmRleCBtYXkgYmUKLQkJCS8vIGVpdGhlciBhIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UgdG8gb25lLgotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSAoUmVnaXN0cnkpaXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKHJlZ2lzdHJ5LmdldElkKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlyZWdpc3RyeVVSSXMuYWRkKHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJfQotCQkJZWxzZSBpZiAocmVnaXN0cnkuZ2V0UmVmKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlyZWdpc3RyeVVSSXMuYWRkKHJlZ2lzdHJ5LmdldFJlZigpKTsKLQkJCX0KLQkJfQkKLQkJcmV0dXJuIChTdHJpbmdbXSlyZWdpc3RyeVVSSXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNyZW1vdmVSZWdpc3RyeShqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVJlZ2lzdHJ5ICggU3RyaW5nIHVyaSwgYm9vbGVhbiBkZWxldGVEb2N1bWVudCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpOwotCQlSZWdpc3RyeSByZWdpc3RyeSA9IGdldFJlZ2lzdHJ5KHVyaSk7Ci0JCWlmIChyZWdpc3RyeSAhPSBudWxsKQotCQl7Ci0JCQlsaXN0LnJlbW92ZShyZWdpc3RyeSk7Ci0JCQlzYXZlSW5kZXgoKTsKLQkJCS8vIFRoZSBpZGVudGlmaWVkIFJlZ2lzdHJ5IG1heSBiZSBlaXRoZXIgYSBmdWxsIG1vZGVsCi0JCQkvLyAoaWUuIGlubGluZWQgaW4gdGhlIEluZGV4KSBvciBhIHJlZmVyZW5jZSB0byBvbmUuCi0JCQkvLyBPbmx5IGluIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGVyZSBhIGZpbGUgdG8gZGVsZXRlLgotCQkJaWYgKGRlbGV0ZURvY3VtZW50ICYmIHJlZ2lzdHJ5LmdldExvY2F0aW9uKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQkvL1RPRE86IEltcGxlbWVudCBtZS4KLQkJCX0KLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3NhdmVUYXhvbm9teShvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215KQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBzYXZlVGF4b25vbXkgKCBUYXhvbm9teSB0YXhvbm9teSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCVRheG9ub215IHRheG9ub215UmVmID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTAl1cmwgPSBnZXRVUkwoVEFYT05PTVkgKyB0YXhvbm9teS5nZXRJZCgpKTsKLQkJICAgIHJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkodXJsLHRheG9ub215KTsKLQkJCXRheG9ub215UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub215KTsKLQkJCXRheG9ub215UmVmLnNldExvY2F0aW9uKHVybC50b1N0cmluZygpKTsKLQkJCWFkZFRheG9ub215VG9JbmRleCh0YXhvbm9teVJlZik7Ci0JCQlzYXZlSW5kZXgoKTsKLQkJfQotCQljYXRjaCAoIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSApCi0JCXsKLQkJCS8vVE9ETzogTWVzc2FnZSB0ZXh0IHJlcXVpcmVkLgotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsbWUpKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub215UmVmKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub215KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIFRheG9ub215IGxvYWRUYXhvbm9teSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQl0cnkKLQkJewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSBnZXRUYXhvbm9teSh1cmkpOwotCQkJaWYgKHRheG9ub215ID09IG51bGwpIHJldHVybiBudWxsOwotCi0JCQkvLyBJZiB0aGUgVGF4b25vbXkgaGFzIGFuIElELCBpdCdzIGEgZnVsbCBtb2RlbAotCQkJLy8gaW5saW5lZCB3aXRoaW4gdGhlIEluZGV4IGFuZCBpcyByZXR1cm5lZCBhcy1pcy4KLQkJCWlmICh0YXhvbm9teS5nZXRJZCgpICE9IG51bGwpIHJldHVybiB0YXhvbm9teTsKLQotCQkJLy8gT3RoZXJ3aXNlIGl0J3MgYSByZWZlcmVuY2UgdG8gYSBmdWxsIG1vZGVsCi0JCQkvLyB3aGljaCB3ZSBsb2FkIGZyb20gdGhlIHJlZmVyZW5jZSdzIGxvY2F0aW9uLgotCQkJU3RyaW5nIHVybFN0cmluZyA9IHRheG9ub215LmdldExvY2F0aW9uKCk7Ci0JCQlpZiAodXJsU3RyaW5nID09IG51bGwpIHJldHVybiBudWxsOwotCQkJVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKLQkJCXJldHVybiByZWdpc3RyeVNlcnZpY2UubG9hZFRheG9ub215KHVybCk7Ci0JCX0KLQkJY2F0Y2ggKCBNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUgKQotCQl7Ci0JCQkvL1RPRE86IE1lc3NhZ2UgdGV4dCByZXF1aXJlZC4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLG1lKSk7Ci0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub21pZXMoamF2YS5sYW5nLlN0cmluZ1tdKQotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIGxvYWRUYXhvbm9taWVzICggU3RyaW5nW10gdXJpcyApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KHVyaXMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaT0wOyBpPHVyaXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCVRheG9ub215IHRheG9ub215ID0gbG9hZFRheG9ub215KHVyaXNbaV0pOwotCQkJaWYgKHRheG9ub215ICE9IG51bGwpCi0JCQl7Ci0JCQkJbGlzdC5hZGQodGF4b25vbXkpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoVGF4b25vbXlbXSlsaXN0LnRvQXJyYXkobmV3IFRheG9ub215WzBdKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNnZXRUYXhvbm9teVVSSXMoKQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRUYXhvbm9teVVSSXMgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFRheG9ub215KCk7Ci0JCUxpc3QgdGF4b25vbXlVUklzID0gbmV3IEFycmF5TGlzdChsaXN0LnNpemUoKSk7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpCi0JCXsKLQkJCS8vIEVhY2ggVGF4b25vbXkgZm91bmQgaW4gdGhlIGluZGV4IG1heSBiZQotCQkJLy8gZWl0aGVyIGEgZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZSB0byBvbmUuCi0JCQlUYXhvbm9teSB0YXhvbm9teSA9IChUYXhvbm9teSlpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAodGF4b25vbXkuZ2V0SWQoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmICh0YXhvbm9teS5nZXRSZWYoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0UmVmKCkpOwotCQkJfQotCQl9CQotCQlyZXR1cm4gKFN0cmluZ1tdKXRheG9ub215VVJJcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3JlbW92ZVRheG9ub215KGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVGF4b25vbXkgKCBTdHJpbmcgdXJpLCBib29sZWFuIGRlbGV0ZURvY3VtZW50ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFRheG9ub215KCk7Ci0JCVRheG9ub215IHRheG9ub215ID0gZ2V0VGF4b25vbXkodXJpKTsKLQkJaWYgKHRheG9ub215ICE9IG51bGwpCi0JCXsKLQkJCWxpc3QucmVtb3ZlKHRheG9ub215KTsKLQkJCXNhdmVJbmRleCgpOwotCQkJLy8gVGhlIGlkZW50aWZpZWQgVGF4b25vbXkgbWF5IGJlIGVpdGhlciBhIGZ1bGwgbW9kZWwKLQkJCS8vIChpZS4gaW5saW5lZCBpbiB0aGUgSW5kZXgpIG9yIGEgcmVmZXJlbmNlIHRvIG9uZS4KLQkJCS8vIE9ubHkgaW4gdGhlIGxhdHRlciBjYXNlIGlzIHRoZXJlIGEgZmlsZSB0byBkZWxldGUuCi0JCQlpZiAoZGVsZXRlRG9jdW1lbnQgJiYgdGF4b25vbXkuZ2V0TG9jYXRpb24oKSAhPSBudWxsKQotCQkJewotCQkJCS8vVE9ETzogSW1wbGVtZW50IG1lLgotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgUmVnaXN0cnkgZnJvbSB0aGUgaW5kZXggd2hvc2UgSUQgb3IgUmVmZXJlbmNlCi0JICogbWF0Y2hlcyB0aGUgZ2l2ZW4gVVJJLiBBcyBzdWNoLCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEKLQkgKiBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbC4KLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgUmVnaXN0cnkKLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gb2JqZWN0IHdob3NlIElEIG9yIHJlZmVyZW5jZQotCSAqIG1hdGNoZXMgdGhlIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4sIG9yIG51bGwgaWYgbm9uZSBtYXRjaC4KLQkgKi8KLSAgICBwcml2YXRlIFJlZ2lzdHJ5IGdldFJlZ2lzdHJ5ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpOwkKLQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpewotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSAoUmVnaXN0cnkpaXQubmV4dCgpOwotCQkJaWYgKHVyaS5lcXVhbHMocmVnaXN0cnkuZ2V0SWQoKSkgfHwgdXJpLmVxdWFscyhyZWdpc3RyeS5nZXRSZWYoKSkpewotCQkJCXJldHVybiByZWdpc3RyeTsgIAotCQkJfQotCQl9CQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVGF4b25vbXkgZnJvbSB0aGUgaW5kZXggd2hvc2UgSUQgb3IgUmVmZXJlbmNlCi0JICogbWF0Y2hlcyB0aGUgZ2l2ZW4gVVJJLiBBcyBzdWNoLCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEKLQkgKiBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbC4KLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgVGF4b25vbXkKLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0IHdob3NlIElEIG9yIHJlZmVyZW5jZQotCSAqIG1hdGNoZXMgdGhlIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4sIG9yIG51bGwgaWYgbm9uZSBtYXRjaC4KLQkgKi8KLSAgICBwcml2YXRlIFRheG9ub215IGdldFRheG9ub215ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRUYXhvbm9teSgpOwkKLQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSAoVGF4b25vbXkpaXQubmV4dCgpOwotCQkJaWYgKHVyaS5lcXVhbHModGF4b25vbXkuZ2V0SWQoKSkgfHwgdXJpLmVxdWFscyh0YXhvbm9teS5nZXRSZWYoKSkpewotCQkJCXJldHVybiB0YXhvbm9teTsKLQkJCX0KLQkJfQkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOGM4MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLS8qKgotICogUmVnaXN0cnlTZXJ2aWNlIGlzIHRoZSBzdGFydGluZyBjbGFzcyBvZiB0aGUgV2ViIHNlcnZpY2UgcmVnaXN0cnkKLSAqIHByb2dyYW1taW5nIG1vZGVsLiBDYWxsIHRoZSA8Y29kZT5SZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTwvY29kZT4KLSAqIHN0YXRpYyBtZXRob2QgdG8gZ2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAqIDxwPgotICogUmVnaXN0cnlTZXJ2aWNlIHByb3ZpZGVzIGZhY3RvcnkgbWV0aG9kcyBmb3IgZ2V0dGluZyBuZXcKLSAqIGluc3RhbmNlcyBvZiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBvYmplY3RzIHdoaWNoLAotICogaW4gdHVybiwgcHJvdmlkZSB0aGUgbWVhbnMgZm9yIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nCi0gKiBncm91cHMgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGFuZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzCi0gKiBhdCBVUkwgYWRkcmVzc2FibGUgbG9jYXRpb25zIGluIHRoZSBmaWxlc3lzdGVtIG9yIGVsc2V3aGVyZS4KLSAqIDxwPgotICogUmVnaXN0cnlTZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyB0byBlYXNlIHRoZSBjcmVhdGlvbiwKLSAqIGxvYWRpbmcgYW5kIHNhdmluZyByYXcgaW5zdGFuY2VzIG9mIHRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLSAqIGFuZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLCBhbmQgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YKLSAqIGNvbXBvc2luZyBhbmQgZmluZGluZyA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIGluCi0gKiA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWxzLgotICogPHA+Ci0gKiBBIHR5cGljYWwgdXNlIG9mIDxjb2RlPlJlZ2lzdHJ5U2VydmljZTwvY29kZT4gYW5kIGl0cyByZWxhdGVkCi0gKiBjbGFzc2VzIHRvIGNyZWF0ZSBhbmQgc2F2ZSBhIG5ldyBmYW1pbHkgb2YgbW9kZWxzIGlzOgotICogPGJsb2NrcXVvdGU+Ci0gKiA8Y29kZT4KLSAqIFJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLSAqIE15UmVnaXN0cnkgcmVnaXN0cnkgPSBNeVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTXlSZWdpc3RyeSgpOwotICogLy8gYnVpbGQgdXAgeW91ciByZWdpc3RyeSBtb2RlbCBoZXJlCi0gKiBUYXhvbm9teSB0YXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotICogLy8gYnVpbGQgdXAgeW91ciB0YXhvbm9teSBtb2RlbCBoZXJlCi0gKiByZWdpc3RyeVNlcnZpY2UuYWRkVGF4b25vbXkocmVnaXN0cnksdGF4b25vbXkpOwotICogSVJlZ2lzdHJ5TWFuYWdlciByZWdpc3RyeU1hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotICogcmVnaXN0cnlNYW5hZ2VyLnNhdmVSZWdpc3RyeShyZWdpc3RyeSk7Ci0gKiA8L2NvZGU+Ci0gKiA8L2Jsb2NrcXVvdGU+Ci0gKiBAc2VlICNpbnN0YW5jZSgpCi0gKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLSAqIEBzZWUgUmVnaXN0cnkKLSAqIEBzZWUgVGF4b25vbXkKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5U2VydmljZQotewotCXByaXZhdGUgc3RhdGljIFJlZ2lzdHJ5U2VydmljZSBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSU5ERVhfWE1MX0ZJTEUgPSAiRGVmYXVsdEluZGV4LnhtbCI7Ci0JcHJpdmF0ZSBIYXNodGFibGUgcmVnaXN0cnlNYW5hZ2Vyc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JcHJpdmF0ZSBJUmVnaXN0cnlNYW5hZ2VyIGRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfID0gbnVsbDsKLQlwcml2YXRlIEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkgcmVzb3VyY2VGYWN0b3J5XyA9IG5ldyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5KCk7Ci0KLQkvKioKLQkgKiBBIFJlZ2lzdHJ5U2VydmljZSBjYW5ub3QgYmUgZGlyZWN0bHkgY29uc3RydWN0ZWQuCi0JICogVXNlIEBsaW5rICNpbnN0YW5jZSgpIHRvIGdldCB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHJpdmF0ZSBSZWdpc3RyeVNlcnZpY2UgKCkKLQl7Ci0JCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCJ4bWwiLHJlc291cmNlRmFjdG9yeV8pOwotCQlSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JCVRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2xhc3MoKTsKLQkJUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICogQHJldHVybiBUaGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZWdpc3RyeVNlcnZpY2UgaW5zdGFuY2UgKCkKLQl7Ci0JCWlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLQkJewotCQkJaW5zdGFuY2VfID0gbmV3IFJlZ2lzdHJ5U2VydmljZSgpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZV87Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBkZWZhdWx0IDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGZvciB0aGUgc3lzdGVtLgotCSAqIEByZXR1cm4gVGhlIGRlZmF1bHQgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBzeXN0ZW0uCi0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0JICovCi0JcHVibGljIElSZWdpc3RyeU1hbmFnZXIgZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlciAoKQotCXsKLQkJaWYgKGRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfID09IG51bGwpCi0JCXsKLQkJCVN0cmluZyBpbmRleEZpbGVuYW1lID0gV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKS5hcHBlbmQoREVGQVVMVF9JTkRFWF9YTUxfRklMRSkudG9TdHJpbmcoKTsKLQkJCWRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfID0gbmV3IFJlZ2lzdHJ5TWFuYWdlcihpbmRleEZpbGVuYW1lKTsKLQkJfQotCQlyZXR1cm4gZGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcl87Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBvciBleGlzdGluZyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIGdpdmVuIFVSTC4KLQkgKiBAcGFyYW0gdXJsIEEgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCBwZXJzaXN0cwotCSAqIHRoZSBzZXQgb2YgcmVnaXN0cmllcyBtYW5hZ2VkIGJ5IHRoaXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0JICogQHJldHVybiBUaGUgbmV3IG9yIGV4aXN0aW5nIDxjb2RlPlJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBnaXZlbiBVUkwuCi0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0JICovCi0JcHVibGljIElSZWdpc3RyeU1hbmFnZXIgZ2V0UmVnaXN0cnlNYW5hZ2VyICggVVJMIHVybCApCi0JewotCQlJUmVnaXN0cnlNYW5hZ2VyIHJlZ2lzdHJ5TWFuYWdlciA9IChJUmVnaXN0cnlNYW5hZ2VyKXJlZ2lzdHJ5TWFuYWdlcnNfLmdldCh1cmwpOwotCQlpZiAocmVnaXN0cnlNYW5hZ2VyID09IG51bGwpCi0JCXsKLQkJCXJlZ2lzdHJ5TWFuYWdlciA9IG5ldyBSZWdpc3RyeU1hbmFnZXIodXJsKTsKLQkJCXJlZ2lzdHJ5TWFuYWdlcnNfLnB1dCh1cmwscmVnaXN0cnlNYW5hZ2VyKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlNYW5hZ2VyOwotCX0KLQkKLQkvKioKLQkgKiBSZW1vdmVzIHRoZSA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIGdpdmVuIFVSTC4KLQkgKiBObyBwaHlzaWNhbCByZXNvdXJjZXMgYXJlIGRlbGV0ZWQuCi0JICogQHBhcmFtIHVybCBBIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRoYXQgcGVyc2lzdHMKLQkgKiB0aGUgc2V0IG9mIHJlZ2lzdHJpZXMgbWFuYWdlZCBieSB0aGlzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVJlZ2lzdHJ5TWFuYWdlciAoIFVSTCB1cmwgKQotCXsKLQkJcmVnaXN0cnlNYW5hZ2Vyc18ucmVtb3ZlKHVybCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwuCi0JICogQXMgYSBnZW5lcmFsIHJ1bGUsIHRoaXMgbWV0aG9kIGhhcyBsaXR0bGUgYWN0dWFsIHZhbHVlIGFzCi0JICogbW9zdCBjb25jcmV0ZSByZWdpc3RyeSBtb2RlbHMgd2lsbCBiZSBvZiB0eXBlcyB0aGF0IGV4dGVuZAotCSAqIHRoZSBiYXNlIFJlZ2lzdHJ5IG1vZGVsLCBzdWNoIGFzIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4uCi0JICogRm9yIGV4YW1wbGUsIDxjb2RlPlVERElSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk8L2NvZGU+Ci0JICogcmV0dXJucyBhIG5ldyA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+LiBQcm92aWRlcnMgb2Ygb3RoZXIKLQkgKiBjb25jcmV0ZSB0eXBlcyBvZiByZWdpc3RyaWVzIG1heSBwcm92aWRlIHNpbWlsYXIgZmFjaWxpdGllcy4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4gTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKiBAc2VlIFVERElSZWdpc3RyeVNlcnZpY2UjbmV3VURESVJlZ2lzdHJ5KCkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbmV3UmVnaXN0cnkgKCkKLQl7Ci0JCXJldHVybiBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lzdHJ5KCk7Ci0JfQotCQotCS8qKgotCSAqIExvYWRzIHRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgZnJvbSBhbiBYTUwgZG9jdW1lbnQuCi0JICogSWYgbG9hZGluZyB0aGUgbW9kZWwgb2YgYSByZWdpc3RyeSB0aGF0IGV4dGVuZHMgdGhlIGJhc2UKLQkgKiBSZWdpc3RyeSBpbnRlcmZhY2UgYW5kIFNjaGVtYSwgeW91IG11c3QgaW5pdGlhbGl6ZSB0aGUgRU1GCi0JICogZUNvcmUgcGFja2FnZSAoZWcuIDxjb2RlPk15UmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTwvY29kZT4KLQkgKiBmb3IgeW91ciBtb2RlbCBiZWZvcmUgY2FsbGluZyB0aGlzIGxvYWQgbWV0aG9kLgotCSAqIEZvciBVRERJIFJlZ2lzdHJ5IG1vZGVscywgdGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkKLQkgKiBjYWxsaW5nIDxjb2RlPlVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTwvY29kZT4uCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gbG9hZC4KLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwuCi0JICogQHRocm93cyA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBJZiB0aGUgbW9kZWwgY2Fubm90IGJlIGxvYWRlZC4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSBVRERJUmVnaXN0cnlTZXJ2aWNlI2luc3RhbmNlKCkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbG9hZFJlZ2lzdHJ5ICggVVJMIHVybCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5sb2FkKGdldElucHV0U3RyZWFtRm9yKHVybCksbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdClyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKLQkJcmV0dXJuIGRvY3VtZW50LmdldFJlZ2lzdHJ5KCk7Ci0JfQotCi0JLyoqCi0JICogU2F2ZXMgdGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gc2F2ZS4KLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCB0byBzYXZlLgotCSAqIEB0aHJvd3MgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gSWYgdGhlIG1vZGVsIGNhbm5vdCBiZSBzYXZlZC4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIHZvaWQgc2F2ZVJlZ2lzdHJ5ICggVVJMIHVybCwgUmVnaXN0cnkgcmVnaXN0cnkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQlkb2N1bWVudC5zZXRSZWdpc3RyeShyZWdpc3RyeSk7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZG9jdW1lbnQpOwotCQl0cnkKLQkJewotCQkJcmVzb3VyY2Uuc2F2ZShnZXRPdXRwdXRTdHJlYW1Gb3IodXJsKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwuIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIFRheG9ub215IG5ld1RheG9ub215ICgpCi0JewotCQlyZXR1cm4gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUYXhvbm9teSgpOwotCX0KLQkKLQkvKioKLQkgKiBMb2FkcyB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIGZyb20gYW4gWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRvIGxvYWQuCi0JICogQHJldHVybiB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsLgotCSAqIEB0aHJvd3MgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gSWYgdGhlIG1vZGVsIGNhbm5vdCBiZSBsb2FkZWQuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBsb2FkVGF4b25vbXkgKCBVUkwgdXJsICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJdHJ5Ci0JCXsKLQkJCXJlc291cmNlLmxvYWQoZ2V0SW5wdXRTdHJlYW1Gb3IodXJsKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290IGRvY3VtZW50ID0gKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290KXJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOwotCQlyZXR1cm4gZG9jdW1lbnQuZ2V0VGF4b25vbXkoKTsKLQl9Ci0KLQkvKioKLQkgKiBTYXZlcyB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIGFuIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0byBzYXZlLgotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIHNhdmUuCi0JICogQHRocm93cyA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBJZiB0aGUgbW9kZWwgY2Fubm90IGJlIHNhdmVkLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzYXZlVGF4b25vbXkgKCBVUkwgdXJsLCBUYXhvbm9teSB0YXhvbm9teSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCWRvY3VtZW50LnNldFRheG9ub215KHRheG9ub215KTsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkb2N1bWVudCk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5zYXZlKGdldE91dHB1dFN0cmVhbUZvcih1cmwpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgbmV3IFJlZ2lzdHJ5IG1vZGVsIGNvbmZpZ3VyZWQKLQkgKiB0byByZWZlcmVuY2UgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiA8cD4KLQkgKiBUaGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+IGNhbiBiZSBlaXRoZXIgYSBmdWxsCi0JICogbW9kZWwgYXMgc2lnbmlmaWVkIGJ5IGhhdmluZyBhIG5vbi1udWxsLCBub24tZW1wdHkKLQkgKiBpZGVudGlmaWVyICg8Y29kZT5yZWdpc3RyeS5nZXRJZCgpPC9jb2RlPiksIG9yIGEKLQkgKiByZWZlcmVuY2UgaXRzZWxmIGFzIHNpZ25pZmllZCBieSBoYXZpbmcgYSBub24tbnVsbCwKLQkgKiBub24tZW1wdHkgcmVmZXJlbmNlICg8Y29kZT5yZWdpc3RyeS5nZXRSZWYoKTwvY29kZT4pLgotCSAqIDxwPgotCSAqIElmIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4gaXMgYSBmdWxsIG1vZGVsLAotCSAqIHRoZW4gYSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGlzIHJldHVybmVkIHN1Y2ggdGhhdAotCSAqIDx1bD4KLQkgKiA8bGk+PGNvZGU+Z2V0UmVmKCk8L2NvZGU+IGVxdWFscyA8Y29kZT5yZWdpc3RyeS5nZXRJZCgpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldExvY2F0aW9uKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDxsaT48Y29kZT5nZXRJZCgpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8L3VsPgotCSAqIDxwPgotCSAqIEluIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4gaXMgaXRzZWxmIGEgcmVmZXJlbmNlLAotCSAqIHRoZW4gYSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGlzIHJldHVybmVkIHN1Y2ggdGhhdAotCSAqIDx1bD4KLQkgKiA8bGk+PGNvZGU+Z2V0UmVmKCk8L2NvZGU+IGVxdWFscyA8Y29kZT5yZWdpc3RyeS5nZXRSZWYoKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRMb2NhdGlvbigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+cmVnaXN0cnkuZ2V0TG9jYXRpb24oKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRJZCgpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8L3VsPgotCSAqIAotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIHRvIGNsb25lIG9yCi0JICogcmVmZXIgdG8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPgotCSAqIGlzIGEgZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZS4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiwgZ3VhcmFudGVlZCB0byBiZSBhIHJlZmVyZW5jZS4KLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbmV3UmVnaXN0cnlSZWZlcmVuY2UgKCBSZWdpc3RyeSByZWdpc3RyeSApCi0JewotCQlTdHJpbmcgaWQgPSByZWdpc3RyeS5nZXRJZCgpOwotCQlTdHJpbmcgcmVmID0gcmVnaXN0cnkuZ2V0UmVmKCk7Ci0JCVJlZ2lzdHJ5IHJlZ2lzdHJ5UmVmID0gbmV3UmVnaXN0cnkoKTsKLQkJaWYgKHJlZiA9PSBudWxsIHx8ICIiLmVxdWFscyhyZWYpKQotCQl7Ci0JCQlyZWdpc3RyeVJlZi5zZXRSZWYoaWQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmVnaXN0cnlSZWYuc2V0UmVmKHJlZik7Ci0JCQlyZWdpc3RyeVJlZi5zZXRMb2NhdGlvbihyZWdpc3RyeS5nZXRMb2NhdGlvbigpKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlSZWY7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIG5ldyBUYXhvbm9teSBtb2RlbCBjb25maWd1cmVkCi0JICogdG8gcmVmZXJlbmNlIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4uCi0JICogPHA+Ci0JICogVGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEgZnVsbAotCSAqIG1vZGVsIGFzIHNpZ25pZmllZCBieSBoYXZpbmcgYSBub24tbnVsbCwgbm9uLWVtcHR5Ci0JICogaWRlbnRpZmllciAoPGNvZGU+dGF4b25vbXkuZ2V0SWQoKTwvY29kZT4pLCBvciBhCi0JICogcmVmZXJlbmNlIGl0c2VsZiBhcyBzaWduaWZpZWQgYnkgaGF2aW5nIGEgbm9uLW51bGwsCi0JICogbm9uLWVtcHR5IHJlZmVyZW5jZSAoPGNvZGU+dGF4b25vbXkuZ2V0UmVmKCk8L2NvZGU+KS4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+IGlzIGEgZnVsbCBtb2RlbCwKLQkgKiB0aGVuIGEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiBpcyByZXR1cm5lZCBzdWNoIHRoYXQKLQkgKiA8dWw+Ci0JICogPGxpPjxjb2RlPmdldFJlZigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+dGF4b25vbXkuZ2V0SWQoKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRMb2NhdGlvbigpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0SWQoKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPC91bD4KLQkgKiA8cD4KLQkgKiBJbiB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+IGlzIGl0c2VsZiBhIHJlZmVyZW5jZSwKLQkgKiB0aGVuIGEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiBpcyByZXR1cm5lZCBzdWNoIHRoYXQKLQkgKiA8dWw+Ci0JICogPGxpPjxjb2RlPmdldFJlZigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+dGF4b25vbXkuZ2V0UmVmKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0TG9jYXRpb24oKTwvY29kZT4gZXF1YWxzIDxjb2RlPnRheG9ub215LmdldExvY2F0aW9uKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0SWQoKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPC91bD4KLQkgKiAKLQkgKiBAcGFyYW0gdGF4b25vbXkgVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBjbG9uZSBvcgotCSAqIHJlZmVyIHRvIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4KLQkgKiBpcyBhIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4sIGd1YXJhbnRlZWQgdG8gYmUgYSByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIFRheG9ub215IG5ld1RheG9ub215UmVmZXJlbmNlICggVGF4b25vbXkgdGF4b25vbXkgKQotCXsKLQkJU3RyaW5nIGlkID0gdGF4b25vbXkuZ2V0SWQoKTsKLQkJU3RyaW5nIHJlZiA9IHRheG9ub215LmdldFJlZigpOwotCQlUYXhvbm9teSB0YXhvbm9teVJlZiA9IG5ld1RheG9ub215KCk7Ci0JCWlmIChyZWYgPT0gbnVsbCB8fCAiIi5lcXVhbHMocmVmKSkKLQkJewotCQkJdGF4b25vbXlSZWYuc2V0UmVmKGlkKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXRheG9ub215UmVmLnNldFJlZihyZWYpOwotCQkJdGF4b25vbXlSZWYuc2V0TG9jYXRpb24odGF4b25vbXkuZ2V0TG9jYXRpb24oKSk7Ci0JCX0KLQkJcmV0dXJuIHRheG9ub215UmVmOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gVVJMIGlkZW50aWZpZXMKLQkgKiBhIHJlc291cmNlIHRoYXQgZXhpc3RzIGFuZCBpcyBhIGZpbGUuCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSByZXNvdXJjZSB0byBjaGVjayBmb3IgZXhpc3RlbmNlLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgVVJMIHJlc291cmNlIGV4aXN0cyBhbmQgaXMgYSBmaWxlLAotCSAqIG9yIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlzdGF0aWMgYm9vbGVhbiBleGlzdHMgKCBVUkwgdXJsICkKLQl7Ci0JCWlmICgicGxhdGZvcm0iLmVxdWFscyh1cmwuZ2V0UHJvdG9jb2woKSkpCi0JCXsKLQkJCVN0cmluZyB1cmxGaWxlID0gdXJsLmdldEZpbGUoKS50cmltKCk7Ci0JCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJsRmlsZSkucmVtb3ZlRmlyc3RTZWdtZW50cygxKTsKLQkJCWlmIChwYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpCi0JCQl7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJSVBhdGggb3NQYXRoID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpLmdldExvY2F0aW9uKCk7Ci0JCQlpZiAob3NQYXRoID09IG51bGwpCi0JCQl7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUob3NQYXRoLnRvU3RyaW5nKCkpOwotCQkJcmV0dXJuIChmaWxlLmV4aXN0cygpICYmICFmaWxlLmlzRGlyZWN0b3J5KCkpOwotCQl9Ci0JCWVsc2UgaWYgKCJmaWxlIi5lcXVhbHModXJsLmdldFByb3RvY29sKCkpKQotCQl7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh1cmwuZ2V0RmlsZSgpLnRyaW0oKSk7Ci0JCQlyZXR1cm4gKGZpbGUuZXhpc3RzKCkgJiYgIWZpbGUuaXNEaXJlY3RvcnkoKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIE9wZW5zIGFuIDxjb2RlPk91dHB1dFN0cmVhbTwvY29kZT4gZm9yIHdyaXRpbmcgdG8KLQkgKiB0aGUgZ2l2ZW4gPGNvZGU+dXJsPC9jb2RlPi4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIHdyaXRlLgotCSAqIEByZXR1cm4gQW4gT3VwdHV0U3RyZWFtIHRvIHdyaXRlIHRvLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgdGhlIHN0cmVhbSBjb3VsZCBub3QgYmUgb3BlbmVkLgotCSAqLwotCXN0YXRpYyBPdXRwdXRTdHJlYW0gZ2V0T3V0cHV0U3RyZWFtRm9yICggVVJMIHVybCApIHRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG51bGw7Ci0JCWlmICgicGxhdGZvcm0iLmVxdWFscyh1cmwuZ2V0UHJvdG9jb2woKSkpCi0JCXsKLQkJCVN0cmluZyB1cmxGaWxlID0gdXJsLmdldEZpbGUoKS50cmltKCk7Ci0JCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJsRmlsZSkucmVtb3ZlRmlyc3RTZWdtZW50cygxKTsKLQkJCWlmIChwYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJUaGUgUGxhdGZvcm0gVVJMIHswfSBpcyBub3QgYm91bmQgdG8gYSBsb2NhbCwgd3JpdGFibGUgZmlsZS4iKTsKLQkJCX0KLQkJCUlQYXRoIG9zUGF0aCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRMb2NhdGlvbigpOwotCQkJaWYgKG9zUGF0aCA9PSBudWxsKQotCQkJewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIFBsYXRmb3JtIFVSTCB7MH0gaXMgbm90IGJvdW5kIHRvIGEgbG9jYWwsIHdyaXRhYmxlIGZpbGUuIik7Ci0JCQl9Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShvc1BhdGgudG9TdHJpbmcoKSk7Ci0JCQlpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKQotCQkJewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIFBsYXRmb3JtIFVSTCB7MH0gaXMgYm91bmQgdG8gYSBmb2xkZXIuIik7Ci0JCQl9Ci0JCQlvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKLQkJfQotCQllbHNlIGlmICgiZmlsZSIuZXF1YWxzKHVybC5nZXRQcm90b2NvbCgpKSkKLQkJewotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUodXJsLmdldEZpbGUoKS50cmltKCkpOwotCQkJaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBGaWxlIFVSTCB7MH0gaXMgYm91bmQgdG8gYSBkaXJlY3RvcnkuIik7Ci0JCQl9Ci0JCQlvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCVVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKLQkJCW91dHB1dFN0cmVhbSA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCX0KLQkJcmV0dXJuIG91dHB1dFN0cmVhbTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVucyBhbiA8Y29kZT5JbnB1dFN0cmVhbTwvY29kZT4gZm9yIHJlYWRpbmcgZnJvbQotCSAqIHRoZSBnaXZlbiA8Y29kZT51cmw8L2NvZGU+LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gcmVhZC4KLQkgKiBAcmV0dXJuIEFuIElucHV0U3RyZWFtIHRvIHJlYWQgZnJvbS4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIHRoZSBzdHJlYW0gY291bGQgbm90IGJlIG9wZW5lZC4KLQkgKi8KLQlzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0SW5wdXRTdHJlYW1Gb3IgKCBVUkwgdXJsICkgdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gdXJsLm9wZW5TdHJlYW0oKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElSZWdpc3RyeVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVJlZ2lzdHJ5U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjNjYTFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVJlZ2lzdHJ5U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotLyoqCi0gKiBVRERJUmVnaXN0cnlTZXJ2aWNlIGlzIGFuIGFkanVuY3QgdG8gPGNvZGU+UmVnaXN0cnlTZXJ2aWNlPC9jb2RlPi4KLSAqIENhbGwgdGhlIDxjb2RlPlJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpPC9jb2RlPiBzdGF0aWMgbWV0aG9kIHRvCi0gKiBnZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICogPHA+Ci0gKiBVRERJUmVnaXN0cnlTZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyB0byBlYXNlIHRoZSBjcmVhdGlvbgotICogb2YgbmV3IDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gbW9kZWxzIGFuZCB0aGUgbWFuYWdlbWVudCBvZiB0aGVpcgotICogcmVsYXRpb25zaGlwcyB0byA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLgotICogPHA+Ci0gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gYW5kCi0gKiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIGFyZSBvbiA8Y29kZT5SZWdpc3RyeVNlcnZpY2U8L2NvZGU+LgotICogTWV0aG9kcyBmb3IgbWFuYWdpbmcgYW4gaW5kZXhlZCBmYW1pbHkgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGFuZAotICogPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBhcmUgb24gPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0gKiA8cD4KLSAqIEEgdHlwaWNhbCB1c2Ugb2YgPGNvZGU+VURESVJlZ2lzdHJ5U2VydmljZTwvY29kZT4gYW5kIGl0cyByZWxhdGVkCi0gKiBjbGFzc2VzIHRvIGNyZWF0ZSBhbmQgc2F2ZSBhIG5ldyBmYW1pbHkgb2YgbW9kZWxzIGlzOgotICogPGJsb2NrcXVvdGU+Ci0gKiA8Y29kZT4KLSAqIFJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLSAqIFVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLSAqIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSB1ZGRpUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpOwotICogLy8gYnVpbGQgdXAgeW91ciByZWdpc3RyeSBtb2RlbCBoZXJlCi0gKiBUYXhvbm9teSB0YXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotICogLy8gYnVpbGQgdXAgeW91ciB0YXhvbm9teSBtb2RlbCBoZXJlCi0gKiB1ZGRpUmVnaXN0cnlTZXJ2aWNlLmFkZFRheG9ub215KHVkZGlSZWdpc3RyeSx0YXhvbm9teSk7Ci0gKiBJUmVnaXN0cnlNYW5hZ2VyIHJlZ2lzdHJ5TWFuYWdlciA9IHJlZ2lzdHJ5U2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk7Ci0gKiByZWdpc3RyeU1hbmFnZXIuc2F2ZVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0gKiA8L2NvZGU+Ci0gKiA8L2Jsb2NrcXVvdGU+Ci0gKiBAc2VlICNpbnN0YW5jZSgpCi0gKiBAc2VlIFJlZ2lzdHJ5U2VydmljZQotICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0gKiBAc2VlIFVERElSZWdpc3RyeQotICogQHNlZSBUYXhvbm9teQotICogQGF1dGhvciBjYnJlYWxleQotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5U2VydmljZQotewotCXByaXZhdGUgc3RhdGljIFVERElSZWdpc3RyeVNlcnZpY2UgaW5zdGFuY2VfOwotCi0JLyoqCi0JICogQSBVRERJUmVnaXN0cnlTZXJ2aWNlIGNhbm5vdCBiZSBkaXJlY3RseSBjb25zdHJ1Y3RlZC4KLQkgKiBVc2UgQGxpbmsgI2luc3RhbmNlKCkgdG8gZ2V0IHRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwcml2YXRlIFVERElSZWdpc3RyeVNlcnZpY2UgKCkKLQl7Ci0JCVVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICogQHJldHVybiBUaGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBVRERJUmVnaXN0cnlTZXJ2aWNlIGluc3RhbmNlICgpCi0JewotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlXyA9IG5ldyBVRERJUmVnaXN0cnlTZXJ2aWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlXzsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyBhIHJlZmVyZW5jZSBmcm9tIHRoZSBnaXZlbiA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+Ci0JICogdG8gdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3QuCi0JICogQHBhcmFtIHVkZGlSZWdpc3RyeSBUaGUgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiB0byB3aGljaCB0aGUgcmVmZXJlbmNlCi0JICogdG8gdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3Qgc2hvdWxkIGJlIGFkZGVkLgotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdCB0byBhZGQuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW92ZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUYXhvbm9teSAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnksIFRheG9ub215IHRheG9ub215ICkKLQl7Ci0JCWFkZFRheG9ub21pZXModWRkaVJlZ2lzdHJ5LG5ldyBUYXhvbm9teVtdIHt0YXhvbm9teX0pOwotCX0KLQotCS8qKgotCSAqIEFkZHMgdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3RzIGFzLWlzCi0JICogKHdoZXRoZXIgdGhleSBhcmUgcmVmZXJlbmNlcyBvciBmdWxsIG1vZGVscykKLQkgKiB0byB0aGUgZ2l2ZW4gPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiBAcGFyYW0gdWRkaVJlZ2lzdHJ5IFRoZSA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IHRvIHdoaWNoCi0JICogdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3RzIHNob3VsZCBiZSBhZGRlZC4KLQkgKiBAcGFyYW0gdGF4b25vbWllcyBUaGUgYXJyYXkgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdHMgdG8gYWRkLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vdmVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICovCi0JcHVibGljIHZvaWQgYWRkVGF4b25vbWllcyAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnksIFRheG9ub215W10gdGF4b25vbWllcyApCi0JewotCQlpZiAodGF4b25vbWllcy5sZW5ndGggPiAwKQotCQl7Ci0JCQlUYXhvbm9taWVzIHRheG9ub215U2V0ID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJCWlmICh0YXhvbm9teVNldCA9PSBudWxsKQotCQkJewotCQkJCXRheG9ub215U2V0ID0gVURESVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVGF4b25vbWllcygpOwotCQkJCXVkZGlSZWdpc3RyeS5zZXRUYXhvbm9taWVzKHRheG9ub215U2V0KTsKLQkJCX0KLQkJCUVMaXN0IGxpc3QgPSB0YXhvbm9teVNldC5nZXRUYXhvbm9teSgpOwotCQkJZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJbGlzdC5hZGQodGF4b25vbWllc1tpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMgdG8gPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0JICogbW9kZWxzIGNvbnRhaW5lZCBpbiBvciByZWZlcmVuY2VkIGJ5IHRoZSA8Y29kZT51ZGRpUmVnaXN0cnk8L2NvZGU+LgotCSAqIFBhc3NpbmcgdGhlIHJlc3VsdCB0byA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKCk8L2NvZGU+Ci0JICogaXMgYSBoYW5keSB3YXkgdG8gcmVzb2x2ZSBhbmQgbG9hZCB0aGUgZnVsbCB0YXhvbm9teSBtb2RlbHMgdXNlZAotCSAqIGJ5IHRoZSBVRERJIHJlZ2lzdHJ5LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzLCBwb3NzaWJseSBlbXB0eSBidXQgbmV2ZXIgbnVsbCwKLQkgKiB0byA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub21pZXMoU3RyaW5nW10pCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFRheG9ub215VVJJcyAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgKQotCXsKLQkJVGF4b25vbWllcyB0YXhvbm9taWVzID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJaWYgKHRheG9ub21pZXMgPT0gbnVsbCkgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JCUVMaXN0IHRheG9ub215TGlzdCA9IHRheG9ub21pZXMuZ2V0VGF4b25vbXkoKTsKLQkJTGlzdCB0YXhvbm9teVVSSXMgPSBuZXcgQXJyYXlMaXN0KHRheG9ub215TGlzdC5zaXplKCkpOwotCQlJdGVyYXRvciBpID0gdGF4b25vbXlMaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSAoVGF4b25vbXkpaS5uZXh0KCk7Ci0JCQlpZiAodGF4b25vbXkuZ2V0SWQoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmICh0YXhvbm9teS5nZXRSZWYoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0UmVmKCkpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoU3RyaW5nW10pdGF4b25vbXlVUklzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBmdWxsIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMKLQkgKiBjb250YWluZWQgaW4gb3IgcmVmZXJlbmNlZCBieSB0aGUgZ2l2ZW4gPGNvZGU+dWRkaVJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiBJbmxpbmUgdGF4b25vbWllcyBhcmUgcmV0dXJuZWQgYXMtaXMuIFJlZmVyZW5jZXMgdG8gdGF4b25vbWllcyBhcmUKLQkgKiByZXNvbHZlZCBieSBmb2xsb3dpbmcgdGhlIGxvY2F0aW9ucyBvZiB0aGUgcmVmZXJlbmNlcyBhbmQgbG9hZGluZwotCSAqIHRoZSBtb2RlbHMgYXQgdGhlIGxvY2F0aW9uIFVSTHMuCi0JICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLCBidXQgbWF5IHJldHVybiBhbiBlbXB0eSBhcnJheS4KLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gd2hvc2UKLQkgKiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHRvIGZpbmQuCi0JICogQHJldHVybiBUaGUgYXJyYXksIG5ldmVyIG51bGwgYnV0IHBvc3NpYmx5IGxlbmd0aCB6ZXJvLAotCSAqIG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW92ZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKiBAc2VlICNnZXRUYXhvbm9teVVSSXMoVURESVJlZ2lzdHJ5KQotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlciNsb2FkVGF4b25vbWllcyhTdHJpbmdbXSkKLQkgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBzdWZmZXJzIGZyb20gYSBsYWNrIG9mIGF3YXJlbmVzcyBvZiB0aGUKLQkgKiBJbmRleCBYTUwgZG9jdW1lbnQgdGhhdCBpcyBvZnRlbiByZXNwb25zaWJsZSBmb3IgbWFwcGluZyBVUklzCi0JICogdG8gbG9jYXRpb24gVVJMcy4gVXNlCi0JICogPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlci5sb2FkVGF4b25vbWllcyhnZXRUYXhvbm9teVVSSXModWRkaVJlZ2lzdHJ5KSk8L2NvZGU+Ci0JICogaW5zdGVhZC4KLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSBnZXRUYXhvbm9taWVzICggVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCVRheG9ub21pZXMgdGF4b25vbWllcyA9IHVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCk7Ci0JCWlmICh0YXhvbm9taWVzID09IG51bGwpIHJldHVybiBuZXcgVGF4b25vbXlbMF07Ci0JCUVMaXN0IGxpdGVyYWxUYXhvbm9teUxpc3QgPSB0YXhvbm9taWVzLmdldFRheG9ub215KCk7Ci0JCUxpc3QgcmVzb2x2ZWRUYXhvbm9teUxpc3QgPSBuZXcgQXJyYXlMaXN0KGxpdGVyYWxUYXhvbm9teUxpc3Quc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaSA9IGxpdGVyYWxUYXhvbm9teUxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlUYXhvbm9teSBsaXRlcmFsVGF4b25vbXkgPSAoVGF4b25vbXkpaS5uZXh0KCk7Ci0JCQlpZiAobGl0ZXJhbFRheG9ub215LmdldElkKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlyZXNvbHZlZFRheG9ub215TGlzdC5hZGQobGl0ZXJhbFRheG9ub215KTsKLQkJCX0KLQkJCWVsc2UgaWYgKGxpdGVyYWxUYXhvbm9teS5nZXRMb2NhdGlvbigpICE9IG51bGwpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlUYXhvbm9teSByZXNvbHZlZFRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLmxvYWRUYXhvbm9teShuZXcgVVJMKGxpdGVyYWxUYXhvbm9teS5nZXRMb2NhdGlvbigpKSk7Ci0JCQkJCXJlc29sdmVkVGF4b25vbXlMaXN0LmFkZChyZXNvbHZlZFRheG9ub215KTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJLy9UT0RPOiBOZWVkIG1lc3NhZ2UgdGV4dCBoZXJlCi0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgV1NQbHVnaW4uSUQsIDAsICIiLCBlKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAoVGF4b25vbXlbXSlyZXNvbHZlZFRheG9ub215TGlzdC50b0FycmF5KG5ldyBUYXhvbm9teVswXSk7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gbW9kZWwsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeSBuZXdVRERJUmVnaXN0cnkgKCkKLQl7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVRERJUmVnaXN0cnkoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElUYXhvbm9teUZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJVGF4b25vbXlGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0Y2U4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElUYXhvbm9teUZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci0KLS8qKgotICogVGhpcyA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IGZvciBVRERJIHJlZ2lzdHJpZXMKLSAqIHJldHVybnMgYW4gYXJyYXkgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0gKiBtb2RlbHMgdXNlZCAoc3VwcG9ydGVkIGJ5KSB0aGUgcmVnaXN0cnkuCi0gKiBAYXV0aG9yIGdpbGJlcnRhQGNhLmlibS5jb20KLSAqIEBzZWUgVURESVJlZ2lzdHJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBVRERJVGF4b25vbXlGaW5kZXIgaW1wbGVtZW50cyBJVGF4b25vbXlGaW5kZXIKLXsKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVRheG9ub215RmluZGVyI3RheG9ub21pZXMob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSB0YXhvbm9taWVzICggUmVnaXN0cnkgcmVnaXN0cnkgKQotCXsKLQkJaWYgKCByZWdpc3RyeSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSApCi0JCXsKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSAoVURESVJlZ2lzdHJ5KXJlZ2lzdHJ5OwkgIAotCQkJcmV0dXJuIChUYXhvbm9teVtdKXVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCkuZ2V0VGF4b25vbXkoKS50b0FycmF5KG5ldyBUYXhvbm9teVswXSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1VuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1VuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjYxZDM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcyAKLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQxMSAgIDIyNjc2NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyIGRvZXMgbm90IGhhbmRsZSBwYXRocyB3LyBzcGFjZXMgdGhhdCBhcmUgZW5jb2RlZAotICogMjAwOTAxMjggICAyNjI2MzkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV1NETENvcGllciBnaXZlcyBOUEUgaW4gcHJvamVjdHMgd2l0aCBzcGFjZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotCi0vKioKLSAqIDxwPkEgdXRpbGl0eSBjbGFzcyBmb3IgdHJhbnNmb3JtaW5nIGEgcGF0aCB0byBhbmQgZnJvbSB0aGUgZm9sbG93aW5nIGZvcm1hdHM6PC9wPgotICogPHVsPgotICogPGxpPkFuIGFic29sdXRlIGVjbGlwc2UgcGF0aCAoaS5lLiBzdGFydHMgd2l0aCAvUHJvamVjdE5hbWUvLi4uKTwvbGk+Ci0gKiA8bGk+QW4gYWJzb2x1dGUgZmlsZXN5c3RlbSBVUkkgcGF0aCAoaS5lLiBmaWxlOi9DOi9NeVdvcmtzcGFjZS9Qcm9qZWN0TmFtZS8uLi4pPC9saT4KLSAqIDxsaT5BIHBsYXRmb3JtIFVSSSBwYXRoIChpLmUuIHBsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0TmFtZS8uLi4pPC9saT4gCi0gKiA8L3VsPiAKLSAqIDxwPkluIGFsbCBjYXNlcywgaWYgdGhlIHRyYW5zZm9ybWVyIGNvdWxkIG5vdCBjb252ZXJ0IHRoZSBwYXRoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuPC9wPgotICovCi1wdWJsaWMgY2xhc3MgVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyIHsKLQkKLQkvKioKLQkgKiBQcmVmaXggb2YgcGxhdGZvcm0gVVJJcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFURk9STV9QUkVGSVggPSAicGxhdGZvcm06L3Jlc291cmNlLyI7Ci0JCi0JLyoqCi0JICogUHJlZml4IG9mIGZpbGVzeXN0ZW0gVVJJcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9QUkVGSVggPSAiZmlsZTovIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9NQVJLRVIgPSAiOiI7Ci0JcHJpdmF0ZSBzdGF0aWMgY2hhciBQQVRIX1NFUEFSQVRPUiAgICA9ICcvJzsKLSAJCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBhIFVSSSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHByZWZpeC4gIFRoaXMgbWV0aG9kIGlzIGNhc2UtaW5zZW5zaXRpdmUuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBzdHJpbmcgdG8gY2hlY2suCi0JICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4LgotCSAqIEByZXR1cm4gdHJ1ZSBpZmYgcHJlZml4IGlzIGEgc3RyaWN0IHByZWZpeCBvZiB0aGUgVVJJIHN0cmluZyAoaS5lLiBwcmVmaXggIT0gdXJpKSwgZmFsc2UKLQkgKiBpcyByZXR1cm5lZCBvdGhlcndpc2UuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByZWZpeChTdHJpbmcgdXJpLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmIChwcmVmaXgubGVuZ3RoKCkgPj0gdXJpLmxlbmd0aCgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCgpKS5lcXVhbHNJZ25vcmVDYXNlKHByZWZpeCk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBwYXRoIHRvIGFuIGVjbGlwc2UgcGF0aC4gIElmIHRoZSBnaXZlbiBwYXRoIGlzIGEgZmlsZXN5c3RlbSBVUkksIGl0IG11c3QgbWFwIHRvCi0JICogYSByZWFsIHJlc291cmNlIGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgcGF0aCB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIGFuIGVjbGlwc2UgcGF0aCBlcXVpdmFsZW50IG9mIHRoZSBnaXZlbiBwYXRoLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvUGF0aChTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJaWYgKGlzUHJlZml4KHN0ciwgUExBVEZPUk1fUFJFRklYKSkgewotCQkJc3RyID0gc3RyLnN1YnN0cmluZyhQTEFURk9STV9QUkVGSVgubGVuZ3RoKCkgLSAxKTsKLQkJfQotCQllbHNlIGlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCUlGaWxlIGZpbGUgPSB0b0ZpbGUoc3RyKTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJc3RyID0gZmlsZS5nZXRGdWxsUGF0aCgpLm1ha2VBYnNvbHV0ZSgpLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzdHI7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0gVVJJIHBhdGguICBJZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIGZpbGVzeXN0ZW0gVVJJLCBpdCBtdXN0IG1hcCB0bwotCSAqIGEgcmVhbCByZXNvdXJjZSBpbiB0aGUgd29ya3NwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBzdHIgVGhlIHBhdGggdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBhIHBsYXRmb3JtIFVSSSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9QbGF0Zm9ybVBhdGgoU3RyaW5nIHN0cikgewotCi0JCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBzdHI7CQkKLQkJCi0JCWlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCUlGaWxlIGZpbGUgPSB0b0ZpbGUoc3RyKTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgZmlsZS5nZXRGdWxsUGF0aCgpLm1ha2VSZWxhdGl2ZSgpOwotCQl9CQkJCi0JCWVsc2UgaWYgKHN0ci5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsKLQkJCWlmIChzdHIuY2hhckF0KDApID09IFBBVEhfU0VQQVJBVE9SKQotCQkJCXN0ciA9IFBMQVRGT1JNX1BSRUZJWCArIHN0ci5zdWJzdHJpbmcoMSk7Ci0JCQllbHNlCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgc3RyOwotCQl9Ci0JCQotCQlyZXR1cm4gc3RyOwotCX0KLQkKLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIHBhdGggdG8gYSBmaWxlc3lzdGVtIFVSSSBwYXRoLiAgVGhlIHBhdGggbXVzdCBiZSBhIHZhbGlkCi0JICogZWNsaXBzZSByZXNvdXJjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBwYXRoIHRvIHRyYW5zZm9ybS4KLQkgKiBAcmV0dXJuIFJldHVybnMgYSBmaWxlc3lzdGVtIFVSSSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Mb2NhdGlvbihTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJU3RyaW5nIHMgPSBzdHI7Ci0JCQotCQlpZiAoaXNQcmVmaXgocywgUExBVEZPUk1fUFJFRklYKSkKLQkJCXMgPSB0b1BhdGgocyk7Ci0JCQotCQlpZiAocy5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsJCQkKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocykpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQlzdHIgPSBmaWxlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJfQotCQkJCQotCQlyZXR1cm4gc3RyOwotCX0JCi0JCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBVUkkgdG8gYW4gSUZpbGUuICBSZXR1cm5zIG51bGwgaWYgdGhlIFVSSSBpcyBub3QgaW4gdGhlIHdvcmtzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBVUkkgdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBJRmlsZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgdG9GaWxlKFN0cmluZyBzdHIpIHsKLQkJCi0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQkKLQkJLy8gbG9jYWwgZmlsZXN5c3RlbSBwYXRoCi0JCWlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCXN0ciA9IHN0ci5zdWJzdHJpbmcoTE9DQVRJT05fUFJFRklYLmxlbmd0aCgpKS5yZXBsYWNlQWxsKCIlMjAiLCAiICIpOwotCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZUZvckxvY2F0aW9uKG5ldyBQYXRoKHN0cikpOwotCQl9Ci0JCWVsc2UgewkKLQkJCS8vIHBsYXRmb3JtIHBhdGgKLQkJCWlmIChzdHIuc3RhcnRzV2l0aChQTEFURk9STV9QUkVGSVgpKQotCQkJCXN0ciA9IHN0ci5zdWJzdHJpbmcoUExBVEZPUk1fUFJFRklYLmxlbmd0aCgpKTsKLQkJCi0JCQlpZiAoc3RyLmluZGV4T2YoUFJPVE9DT0xfTUFSS0VSKSA9PSAtMSkgewkJCQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoc3RyKSk7Ci0JCQl9Ci0JCX0KLQkJCQkJCQkJCi0JCXJldHVybiBmaWxlOwotCX0JCi0JCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBVUklzIHRvIGFuIElGaWxlcy4gIAotCSAqIElGaWxlIHNldCB0byBudWxsIGlmIHRoZSBVUkkgaXMgbm90IGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgVVJJcyB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIElGaWxlW10KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElGaWxlW10gdG9GaWxlcyhTdHJpbmdbXSB1cmlzKSB7Ci0JCQotCQlJRmlsZVtdIGZpbGVzID0gbnVsbDsKLQkJaWYgKHVyaXMgIT0gbnVsbCkgewotCQkJZmlsZXMgPSBuZXcgSUZpbGVbdXJpcy5sZW5ndGhdOwkJCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHVyaXMubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgdXJpID0gdXJpc1tpXTsKLQkJCQlmaWxlc1tpXSA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0ZpbGUodXJpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBlbmNvZGVkIFVSSSB0byBhIGZpbGU6IHByb3RvY29sIFVSSS4gIFRoZSBVUkkgbXVzdCBiZSBhIHZhbGlkCi0JICogZWNsaXBzZSByZXNvdXJjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBVUkkgdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBhIGZpbGU6IHByb3RvY29sIFVSSSBlcXVpdmFsZW50IG9mIHRoZSBnaXZlbiBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdXJpVG9Mb2NhdGlvbihTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJU3RyaW5nIHMgPSBzdHI7Ci0JCWlmIChpc1ByZWZpeChzLCBQTEFURk9STV9QUkVGSVgpKQotCQkJcyA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgocyk7Ci0JCQotCQlpZiAocy5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsJCQotCQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoVVJMRGVjb2Rlci5kZWNvZGUocywgIlVURi04IikpKTsKLQkJCWlmIChmaWxlICE9IG51bGwpIAotCQkJCXN0ciA9IHVyaUNyZWF0ZShVUkxEZWNvZGVyLmRlY29kZShmaWxlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSwgIlVURi04IikpLnRvU3RyaW5nKCk7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkvL25vdGhpbmcgdG8gZG8gaGVyZSwganVzdCByZXR1cm4gc2FtZSBzdHJpbmcKLQkJCX0KLQkJfQotCQkJCQotCQlyZXR1cm4gc3RyOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGphdmEubmV0LlVSSSB1cmlDcmVhdGUoU3RyaW5nIHVyaSkgewotCQlpZiAodXJpICE9IG51bGwpCi0JCQl1cmkgPSB1cmkucmVwbGFjZSgnXFwnLCAnLycpOwotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQlyZXR1cm4gamF2YS5uZXQuVVJJLmNyZWF0ZSh1cmkpOwotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CQkJCQotCQkJCXJldHVybiBqYXZhLm5ldC5VUkkuY3JlYXRlKFVSSUVuY29kZXIuZW5jb2RlKHVyaSwgIlVURi04IikpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBqYXZhLm5ldC5VUkkuY3JlYXRlKCIiKTsKLQkJfQkKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1dTRExDb3BpZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9XU0RMQ29waWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NDA3MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1dTRExDb3BpZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwNzA0MDkgICAxODE2MzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgdXRpbGl0eSBzaG91bGQgY3JlYXRlIHRhcmdldCBmb2xkZXIKLSAqIDIwMDcxMjA1ICAgMjExMjYyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIENvcHlXU0RMVHJlZUNvbW1hbmQgZmFpbHMgdG8gY29weSA/d3NkbAotICogMjAwODAzMjQgICAyMTU1NTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgZXhwZWN0cyBub3QgZW5jb2RlZCBVUkkKLSAqIDIwMDgwNTAxICAgMjI5NzI4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB1cHBlcmNhc2UgLldTREwgY2Fubm90IGJlIGZvdW5kIGJ5IHRoZSBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkCi0gKiAyMDA5MDEyOCAgIDI2MjYzOSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXU0RMQ29waWVyIGdpdmVzIE5QRSBpbiBwcm9qZWN0cyB3aXRoIHNwYWNlcwotICogMjAwOTAyMDQgICAyNjI5MTMgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgVG9wLWRvd24gV1MgZmFpbHMgd2hlbiAud3NkbCBpbXBvcnRzIC54c2Qgb3IgLndzZGwgd2hpY2ggcmVzaWRlcyBpbiBmb2xkZXIgY29udGFpbmluZyBVUkkgZW5jb2RlZCBjaGFycyBsaWtlICIgIiwgIikiCi0gKiAyMDA5MTEwNiAgIDI5NDQ4NiB5ZW5sdUBjYS5pYiwuY29tIC0gWWVuIEx1LCBXU0RMQ29waWVyIG1heSBub3Qgd3JpdGUgV1NETHMgYW5kIFhTRHMgd2l0aCB0aGUgY29ycmVjdCBYTUwgZW5jb2RpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUklTY2hlbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuU2ltcGxlVVJJRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5VUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUVuY29kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuTmV0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiA8cD5UaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvcHkgYSBXU0RMIGZpbGUgYW5kIGl0cyByZWxhdGl2ZSBpbXBvcnRzCi0gKiAoYm90aCB3c2RsOmltcG9ydCBhbmQgeHNkOmltcG9ydCkgdG8gYSBmb2xkZXIgaW4gdGhlIGZpbGVzeXN0ZW0uICBUaGUgY29kZSB3aWxsIGFuYWx5emUKLSAqIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBkb2VzIHRoZSBmb2xsb3dpbmc6Ci0gKiA8b2w+Ci0gKiAgICA8bGk+ZmluZCBhbGwgZmlsZXMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQgYW5kIHRhZyB0aGVtIGFzIHN1Y2guPC9saT4KLSAqICAgIDxsaT5maW5kIHRoZSBjb21tb24gcGFyZW50IGRpcmVjdG9yeSBvZiBhbGwgdGhlIGZpbGVzIHRoYXQgYXJlIHRhZ2dlZDsgdGhpcyBpcyB0aGUgCi0gKiAgICByb290IG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLjwvbGk+Ci0gKiA8L29sPgotICogRHVyaW5nIHRoZSBjb3B5LCB0aGUgcm9vdCBvZiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBiZSBtYXBwZWQgdG8gdGhlIAotICogc3BlY2lmaWVkIHRhcmdldCBmb2xkZXIgYW5kIGFsbCB0YWdnZWQgZmlsZXMgd2lsbCBiZSBkdXBsaWNhdGVkIHVuZGVyIGl0LjwvcD4KLSAqIAotICogPHA+SWYgdGhlIFdTREwgc291cmNlIGFuZCB0aGUgdGFyZ2V0IGxvY2F0aW9uIGFyZSB0aGUgc2FtZSwgdGhpcyB1dGlsaXR5IG9ubHkgZ3VhcmFudGVlcwotICogdGhhdCB0aGUgc3RhcnRpbmcgV1NETCBmaWxlIGlzICJyZS1jb3BpZWQiIG9udG8gaXRzZWxmIChzaW5jZSB0aGUgV1NETCBkZWZpbml0aW9uIGNvdWxkIAotICogaGF2ZSBiZWVuIGFsdGVyZWQpLiAgTm8gZ3VhcmFudGVlIGlzIG1hZGUgZm9yIHRoZSBvdGhlciBmaWxlcyB0aGF0IHRoZSBXU0RMIGZpbGUgaW1wb3J0cy48L3A+Ci0gKiAKLSAqIDxwPk5vdGUgdGhhdCBXU0RMQ29waWVyIGRvZXMgbm90IGRvIGEgZGlyZWN0IGZpbGUgY29weS4gIFRoZSBzb3VyY2UgZmlsZXMgYXJlIHJlYWQgaW50bwotICogYSBtb2RlbCBhbmQgdGhlbiB3cml0dGVuIG91dCB0byB0aGUgdGFyZ2V0IGZvbGRlciwgaGVuY2UgdGhlIG91dHB1dCBmaWxlIG1pZ2h0IG5vdCBiZQotICogc3ludGFjdGljYWxseSBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBmaWxlIGJ1dCB0aGV5IHdpbGwgYmUgc3RydWN0dXJhbGx5IGlkZW50aWNhbC48L3A+Ci0gKiAKLSAqIDxwPlNpbmNlIHRoaXMgdXRpbGl0eSBpbXBsZW1lbnRzIElXb3Jrc3BhY2VSdW5uYWJsZSwgaXQgY2FuIGJlIHJ1biBieSB0aGUgd29ya3NwYWNlIGFzCi0gKiBhbiBhdG9taWMgd29ya3NwYWNlIG9wZXJhdGlvbi48L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29waWVyIGltcGxlbWVudHMgSVdvcmtzcGFjZVJ1bm5hYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0QgPSAiLnhzZCI7Ci0JCi0JLyoqCi0JICogSGVscGVyIGNsYXNzIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGVzIHdlIG5lZWQgdG8gY29weQotCSAqLwotCXByaXZhdGUgY2xhc3MgWE1MT2JqZWN0SW5mbyB7Ci0JICAJCi0JCXB1YmxpYyBJUGF0aCAgcGF0aDsKLQkgIAlwdWJsaWMgT2JqZWN0IGNvbnRlbnQ7Ci0JICAJcHVibGljIFN0cmluZyBlbmNvZGluZzsKLQkgIAkgIAkKLQkgIAkvKioKLQkgIAkgKiBDb25zdHJ1Y3Rvci4KLQkgIAkgKiAKLQkgIAkgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGUuCi0JICAJICogQHBhcmFtIGNvbnRlbnQgQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlIGZpbGUgKGVpdGhlciB3c2RsIG9yIHhzZCkKLQkgIAkgKi8KLQkgIAlwdWJsaWMgWE1MT2JqZWN0SW5mbyhJUGF0aCBwYXRoLCBPYmplY3QgY29udGVudCkgewotCSAgCQl0aGlzLnBhdGggICAgPSBwYXRoLnNldERldmljZShudWxsKTsgLy8gd2Ugd2FudCBhIGRldmljZSBpbmRlcGVuZGVudCBwYXRoICAJCQotCSAgCQl0aGlzLmNvbnRlbnQgPSBjb250ZW50OwkgIAkJCi0JICAJfQotCSAgCQotCSAgCS8qKgotCSAgCSAqIENvbnN0cnVjdG9yLgotCSAgCSAqIAotCSAgCSAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZS4KLQkgIAkgKiBAcGFyYW0gY29udGVudCBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2UgZmlsZSAoZWl0aGVyIHdzZGwgb3IgeHNkKQotCSAgCSAqIEBwYXJhbSBlbmNvZGluZyBUaGUgZW5jb2Rpbmcgb2YgdGhlIGNvbnRlbnQuCi0JICAJICovCSAgCQotCSAgCXB1YmxpYyBYTUxPYmplY3RJbmZvKElQYXRoIHBhdGgsIE9iamVjdCBjb250ZW50LCBTdHJpbmcgZW5jb2RpbmcpCi0JICAJewotCSAgCQl0aGlzKHBhdGgsIGNvbnRlbnQpOwotCSAgCQl0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7Ci0JICAJfQotCX0JICAKLQkKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcgk9IG51bGw7CQkJCQkvLyBwYXJzZXIgdG8gcGFyc2UgdGhlIHdzZGwgYW5kIHhzZCBmaWxlcwotCQotCXByaXZhdGUgVVJJIHNvdXJjZVVSSQkJCQk9IFVSSS5jcmVhdGUoIiIpOwkJLy8gdXJpIG9mIHRoZSBzdGFydGluZyB3c2RsCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb24JCT0gbnVsbDsJCQkJCS8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFydGluZyB3c2RsCi0JCi0JcHJpdmF0ZSBVUkkgdGFyZ2V0Rm9sZGVyVVJJCQkJPSBudWxsOwkJCQkJLy8gdXJpIG9mIHRoZSBmb2xkZXIgdG8gY29weSB0bwotCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGVuYW1lCQk9IG51bGw7CQkJCQkvLyBvcHRpb25hbCBuZXcgZmlsZW5hbWUgZm9yIHRoZSBzdGFydGluZyB3c2RsCi0JCi0JcHJpdmF0ZSBJUGF0aCBwYXRoUHJlZml4CQkJPSBudWxsOyAgCQkJCS8vIHRoZSBzaG9ydGVzdCBjb21tb24gcGF0aCBvZiBhbGwgZmlsZXMgd2UgbmVlZCB0byBjb3B5Ci0JcHJpdmF0ZSBJUGF0aCB3c2RsUmVsUGF0aAkJCT0gbnVsbDsJCQkJCS8vIHJlbGF0aXZlIHBhdGggb2YgdGhlIHN0YXJ0aW5nIHdzZGwgdG8gdGhlIHRhcmdldCBmb2xkZXIKLQkJCi0JcHJpdmF0ZSBNYXAgeG1sT2JqZWN0SW5mb3MJCQk9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CS8vIHRhYmxlIHRvIHN0b3JlIGluZm8gYWJvdXQgdGhlIGZpbGVzIHdlIG5lZWQgdG8gY29weQotCQotCXByaXZhdGUgU2ltcGxlVVJJRmFjdG9yeSB1cmlGYWN0b3J5ID0gbnVsbDsKLQkKLQkvKioKLQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLiAgQSBuZXcgV2ViU2VydmljZXNQYXJzZXIgaXMgY29uc3RydWN0ZWQgZm9yIHVzZS4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllcigpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuICBUaGUgZ2l2ZW4gV2ViU2VydmljZXNQYXJzZXIgd2lsbCBiZSB1c2VkLgotCSAqIAotCSAqIEBwYXJhbSBwYXJzZXIgQSBXZWJTZXJ2aWNlc1BhcnNlciBmb3IgV1NETENvcGllciB0byB1c2UuICBJZiBudWxsLCBhIG5ldyBvbmUgd2lsbCBiZSBjb25zdHJ1Y3RlZC4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpIHsKLQkJaWYgKHBhcnNlciA9PSBudWxsKQotCQkJdGhpcy5wYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIoKTsKLQkJZWxzZQotCQkJdGhpcy5wYXJzZXIgPSBwYXJzZXI7Ci0JCQotCQlJVVJJU2NoZW1lIGVjbGlwc2VTY2hlbWUgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZVNjaGVtZSgpOwotCSAgICBJVVJJU2NoZW1lIGZpbGVTY2hlbWUgICAgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmlsZVNjaGVtZSgpOwotCSAgICB1cmlGYWN0b3J5ID0gbmV3IFNpbXBsZVVSSUZhY3RvcnkoKTsKLQkgICAgdXJpRmFjdG9yeS5yZWdpc3RlclNjaGVtZSgicGxhdGZvcm0iLCBlY2xpcHNlU2NoZW1lKTsKLQkgICAgdXJpRmFjdG9yeS5yZWdpc3RlclNjaGVtZSgiZmlsZSIsIGZpbGVTY2hlbWUpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIFVSSSBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4gIFRoZSBVUkkgbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkkKLQkgKiB3aXRoIGEgdmFsaWQgcHJvdG9jb2wuICBGb3IgbG9jYWwgZmlsZXMsIGJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgCi0JICogcHJvdG9jb2wgYXJlIGFjY2VwdGFibGUuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpKSB7Ci0JCXNldFNvdXJjZVVSSSh1cmksIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuICBUaGUgVVJJIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJJCi0JICogd2l0aCBhIHZhbGlkIHByb3RvY29sLiAgRm9yIGxvY2FsIGZpbGVzLCBib3RoIGZpbGU6LyBhbmQgcGxhdGZvcm06L3Jlc291cmNlIAotCSAqIHByb3RvY29sIGFyZSBhY2NlcHRhYmxlLiAKLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuIAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShVUkkgdXJpKSB7Ci0JCXNldFNvdXJjZVVSSSh1cmksIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBTYW1lIGFzIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpKSB2ZXJzaW9uLCBleGNlcHQgdGhhdCBhbiBhbHJlYWR5IHBhcnNlZAotCSAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3c2RsIGRvY3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QgdG8gYXZvaWQKLQkgKiBoYXZpbmcgdG8gcGFyc2UgaXQgYSBzZWNvbmQgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGRlZmluaXRpb24gQSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCWlmICh1cmkgIT0gbnVsbCkKLQkJCXVyaSA9IHVyaS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0JCVVSSSB1cmlPYmogPSBudWxsOwkJCi0JCXRyeSB7Ci0JCQl0cnkgewotCQkJCXVyaU9iaiA9IG5ldyBVUkkodXJpKTsKLQkJCX0KLQkJCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewkJCQkKLQkJCQl1cmlPYmogPSBVUkkuY3JlYXRlKFVSSUVuY29kZXIuZW5jb2RlKHVyaSwgIlVURi04IikpOwotCQkJfQotCQkJc2V0U291cmNlVVJJKHVyaU9iaiwgZGVmaW5pdGlvbik7CQkKLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUsIGRlZmF1bHQgVVJJKCIiKSBpcyB1c2VkLCBvcGVyYXRpb24gd2lsbCBiZSBhIG5vLW9wCi0JCX0JCQotCX0KLQkKLQkvKioKLQkgKiBTYW1lIGFzIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpKSB2ZXJzaW9uLCBleGNlcHQgdGhhdCBhbiBhbHJlYWR5IHBhcnNlZAotCSAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3c2RsIGRvY3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QgdG8gYXZvaWQKLQkgKiBoYXZpbmcgdG8gcGFyc2UgaXQgYSBzZWNvbmQgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGRlZmluaXRpb24gQSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuIAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShVUkkgdXJpLCBEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJc291cmNlVVJJID0gdXJpOwotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBTcGVjaWZ5IHRoZSB0YXJnZXQgZm9sZGVyIFVSSSBmb3IgV1NETENvcGllciB0byBjb3B5IHRoZSB3c2RsIHRvLiAgVGhlIFVSSSBtdXN0IGJlCi0JICogYW4gYWJzb2x1dGUgVVJJIHdpdGggYSB2YWxpZCBwcm90b2NvbC4gIEJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgcHJvdG9jb2wKLQkgKiBhcmUgYWNjZXB0YWJsZS4gIFRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGFsbCB0aGUgZmlsZXMgdGhhdCB0aGUgd3NkbCAKLQkgKiBpbXBvcnRzIHdpbGwgYmUgZHVwbGljYXRlZCB1bmRlciB0aGlzIGZvbGRlci4gIElmIHRoZSB0YXJnZXQgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCAKLQkgKiBpdCB3aWxsIGJlIGNyZWF0ZWQuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBmb2xkZXIgVVJJIHdoZXJlIHRoZSB3c2RsIHN0cnVjdHVyZSBpcyBjb3BpZWQgdG8uCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGb2xkZXJVUkkoU3RyaW5nIHVyaSkgewotCQlpZiAodXJpICE9IG51bGwpCi0JCQl1cmkgPSB1cmkucmVwbGFjZSgnXFwnLCAnLycpOwotCQlVUkkgdXJpT2JqID0gbnVsbDsJCQotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQl1cmlPYmogPSBuZXcgVVJJKHVyaSk7Ci0JCQl9Ci0JCQljYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsJCQkJCi0JCQkJdXJpT2JqID0gVVJJLmNyZWF0ZShVUklFbmNvZGVyLmVuY29kZSh1cmksICJVVEYtOCIpKTsKLQkJCX0KLQkJCXNldFRhcmdldEZvbGRlclVSSSh1cmlPYmopOwkJCi0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlLCB0YXJnZXRGb2xkZXJVUkkgd2lsbCBiZSBjaGVja2VkIGZvciBudWxsIGxhdGVyCi0JCX0JCQotCX0KLQkKLQkvKioKLQkgKiBTcGVjaWZ5IHRoZSB0YXJnZXQgZm9sZGVyIFVSSSBmb3IgV1NETENvcGllciB0byBjb3B5IHRoZSB3c2RsIHRvLiAgVGhlIFVSSSBtdXN0IGJlCi0JICogYW4gYWJzb2x1dGUgVVJJIHdpdGggYSB2YWxpZCBwcm90b2NvbC4gIEJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgcHJvdG9jb2wKLQkgKiBhcmUgYWNjZXB0YWJsZS4gIFRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGFsbCB0aGUgZmlsZXMgdGhhdCB0aGUgd3NkbCAKLQkgKiBpbXBvcnRzIHdpbGwgYmUgZHVwbGljYXRlZCB1bmRlciB0aGlzIGZvbGRlci4gIElmIHRoZSB0YXJnZXQgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCAKLQkgKiBpdCB3aWxsIGJlIGNyZWF0ZWQuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBmb2xkZXIgVVJJIHdoZXJlIHRoZSB3c2RsIHN0cnVjdHVyZSBpcyBjb3BpZWQgdG8uIAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRhcmdldEZvbGRlclVSSShVUkkgdXJpKSB7CQkKLQkJdGFyZ2V0Rm9sZGVyVVJJID0gdXJpOwotCX0KLQkKLQkvKioKLQkgKiBPcHRpb25hbGx5IHNldCBhIG5ldyBmaWxlbmFtZSBmb3IgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQgdG8gdXNlIGFmdGVyIGl0IGlzCi0JICogY29waWVkLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIHdzZGwgaXMgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgQSBmaWxlbmFtZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGaWxlbmFtZShTdHJpbmcgZmlsZW5hbWUpIHsKLQkJdGFyZ2V0RmlsZW5hbWUgPSBmaWxlbmFtZTsKLQl9IAotCQotCS8qCi0JICogQ29tcGFyZSB0aGUgcGF0aCBwcmVmaXggd2l0aCB0aGUgcGF0aCBpbiB0aGUgaW5mbyBvYmplY3QsCi0JICogbW9kaWZ5IHRoZSBwYXRoIHByZWZpeCBhY2NvcmRpbmdseS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlUGF0aFByZWZpeChYTUxPYmplY3RJbmZvIGluZm8pIHsKLQkgIAlpZiAocGF0aFByZWZpeCA9PSBudWxsKQotCSAgICAgICAgcGF0aFByZWZpeCA9IGluZm8ucGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0JICAgIGVsc2UgewotCSAgICAJaW50IG1hdGNoaW5nID0gcGF0aFByZWZpeC5tYXRjaGluZ0ZpcnN0U2VnbWVudHMoaW5mby5wYXRoKTsKLQkgICAgCQotCSAgICAJaWYgKG1hdGNoaW5nIDwgcGF0aFByZWZpeC5zZWdtZW50Q291bnQoKSkKLQkgICAgCQlwYXRoUHJlZml4ID0gcGF0aFByZWZpeC51cHRvU2VnbWVudChtYXRjaGluZyk7Ci0JICAgIH0KLQl9ICAgIAkKLQkKLQkvKgotCSAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gVVJJIGlzIGEgcmVsYXRpdmUgVVJJLiAKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNSZWxhdGl2ZShTdHJpbmcgdXJpKSB7Ci0JCXJldHVybiB1cmkuaW5kZXhPZignOicpID09IC0xOwotCX0KLQotCS8qCi0JICogQW5hbHl6ZSB0aGUgd3NkbCBkb2N1bWVudCBhdCB0aGUgZ2l2ZW4gVVJJLCBhbmQgdHJhdmVyc2UgYW55IHJlbGF0aXZlIGZpbGVzIHRoYXQKLQkgKiBpdCBpbXBvcnRzLiBDYW4gb3B0aW9uYWxseSBwYXNzIGluIGEgcGFyc2VkIERlZmluaXRpb24gaWYgb25lJ3MgYXZhaWxhYmxlIHNvCi0JICogd2UgZG9uJ3QgaGF2ZSB0byBwYXJzZSB0aGUgd3NkbCBhZ2FpbiAob3RoZXJ3aXNlIGp1c3QgcGFzcyBpbiBudWxsKS4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVXU0RMKFVSSSB1cmksIERlZmluaXRpb24gZGVmaW5pdGlvbikgdGhyb3dzIAotCQlNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7Ci0JCQotCQl1cmkgPSB1cmkubm9ybWFsaXplKCk7Ci0JCQotCQkvLyBhbHJlYWR5IHNlZW4gdGhpcyB3c2RsLCBza2lwCi0JCWlmICh4bWxPYmplY3RJbmZvcy5jb250YWluc0tleSh1cmkudG9TdHJpbmcoKSkpCi0JCQlyZXR1cm47Ci0JCQkJCi0JCS8vIG5lZWQgdG8gcGFyc2UgdGhlIHdzZGwgb3Vyc2VsdmVzCi0JCWlmIChkZWZpbml0aW9uID09IG51bGwpCi0JCQlkZWZpbml0aW9uID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh1cmkudG9TdHJpbmcoKSk7Ci0JCQotCQkvLyBzYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBzdGFydGluZyB3c2RsCi0JCWlmICh0aGlzLmRlZmluaXRpb24gPT0gbnVsbCkKLQkJCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JCQotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJpLmdldFBhdGgoKSk7Ci0JCQotCQkvLyBhIHRhcmdldCBmaWxlbmFtZSB3YXMgZ2l2ZW4sIHNvIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBwYXRoIHdpdGggdGhlIG5ldyBuYW1lCi0JCWlmIChkZWZpbml0aW9uID09IHRoaXMuZGVmaW5pdGlvbiAmJiB0YXJnZXRGaWxlbmFtZSAhPSBudWxsKQotCQkJcGF0aCA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLmFwcGVuZCh0YXJnZXRGaWxlbmFtZSk7Ci0JCSAJCQotCSAgICBYTUxPYmplY3RJbmZvIGluZm8gPSBuZXcgWE1MT2JqZWN0SW5mbyhwYXRoLCBkZWZpbml0aW9uKTsJICAgIAotCSAgICB4bWxPYmplY3RJbmZvcy5wdXQodXJpLnRvU3RyaW5nKCksIGluZm8pOwotCSAgICB1cGRhdGVQYXRoUHJlZml4KGluZm8pOwotCQkKLQkgICAgLy8gbm93IGxvb2sgYXQgd3NkbCBpbXBvcnRzCi0JICAgIAotCSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotCi0JICAgIAlMaXN0IGxpc3QgPSAoTGlzdCkgaXQubmV4dCgpOwotCSAgICAgIAotCSAgICAJZm9yIChJdGVyYXRvciBsaXN0SXQgPSBsaXN0Lml0ZXJhdG9yKCk7IGxpc3RJdC5oYXNOZXh0KCk7KSB7Ci0JICAgIAkJCi0JCSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSAoSW1wb3J0KSBsaXN0SXQubmV4dCgpOwotCQkgICAgICAgIFN0cmluZyB3c2RsSW1wb3J0TG9jYXRpb24gPSB3c2RsSW1wb3J0LmdldExvY2F0aW9uVVJJKCk7Ci0KLQkJICAgICAgICAvLyBhbmFseXplIGFueSByZWxhdGl2ZSBpbXBvcnRzIHdlIGZpbmQKLQkJICAgICAgICBpZiAod3NkbEltcG9ydExvY2F0aW9uICE9IG51bGwgJiYgaXNSZWxhdGl2ZSh3c2RsSW1wb3J0TG9jYXRpb24pKSB7Ci0KLQkJICAgICAgICAJLy8gYmFkIGZvcm0sIGltcG9ydGluZyB4c2Qgd2l0aCB3c2RsOmltcG9ydCwgYnV0IG5lZWQgdG8gaGFuZGxlCi0JCSAgICAgICAgCWlmICh3c2RsSW1wb3J0TG9jYXRpb24udG9Mb3dlckNhc2UoKS5lbmRzV2l0aChYU0QpKQotCQkgICAgICAgIAkJYW5hbHl6ZVhTRCh1cmkucmVzb2x2ZSh1cmlDcmVhdGUod3NkbEltcG9ydExvY2F0aW9uKSkpOwotCQkgICAgICAgIAllbHNlCQotCQkgICAgICAgIAkJYW5hbHl6ZVdTREwodXJpLnJlc29sdmUodXJpQ3JlYXRlKHdzZGxJbXBvcnRMb2NhdGlvbikpLCBudWxsKTsKLQkJICAgICAgICB9Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vIG5vdyBsb29rIGF0IHhzZCBpbXBvcnRzCi0KLQkgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0JICAgIAotCSAgICAvLyB0aGVyZSdzIG5vIHdzZGw6dHlwZXMsIHdlJ3JlIGRvbmUKLQkgICAgaWYgKHR5cGVzID09IG51bGwpCi0JICAgIAlyZXR1cm47Ci0JICAgICAgICAJCi0gICAgCWZvciAoSXRlcmF0b3IgaXQgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CQkJCi0JCQkKLSAgICAJCUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsgICAgCQkKLSAgICAJCUVsZW1lbnQgZWxlbWVudDsKLSAgICAJCQotICAgIAkJLy8gd2UnbGwgdHJ5IHRvIHBhcnNlIGFueSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGFuZAotICAgIAkJLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGludG8gYW4gWFNEIHNjaGVtYSAgICAJCQotICAgIAkJCi0gICAgCQlpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAJCQllbGVtZW50ID0gKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKTsKLSAgIAkJCWVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgIAkJCQllbGVtZW50ID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudCkuZ2V0RWxlbWVudCgpOwotICAgCQkJZWxzZSBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFNjaGVtYSkKLSAgIAkJCQllbGVtZW50ID0gKChTY2hlbWEpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKTsKLSAgIAkJCWVsc2UKLSAgIAkJCQljb250aW51ZTsKLSAgICAJCQkgICAgCQkJCi0JCQl0cnkgewotCQkJCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShlbGVtZW50KTsKLQkJCQkKLQkJCQkvLyBhbmFseXplIHRoZSBpbmxpbmVkIHNjaGVtYSBhdCB0aGUgY3VycmVudCB1cmkKLQkJCQlhbmFseXplWFNEKHVyaSwgeHNkU2NoZW1hKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJCS8vIGlnbm9yZSBhbnkgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgaW50byBhCi0JCQkJLy8gWFNEU2NoZW1hIGluc3RhbmNlCi0JCQl9Ci0gICAgICAgIH0KLQl9Ci0JCi0JLyoKLQkgKiBBbmFseXplIHRoZSBzY2hlbWEgYXQgdGhlIGdpdmVuIFVSSSwgdHJhdmVyc2UgaXRzIGltcG9ydHMgYW5kIGluY2x1ZGVzLgotCSAqIFRoZSBzY2hlbWEgaW5mb3JtYXRpb24gaXMgbm90IHN0b3JlZCBpbiBYTUxPYmplY3RJbmZvcyBiZWNhdXNlIGl0J3MKLQkgKiBlaXRoZXIgbm90IG5lY2Nlc3NhcnkgKHNjaGVtYSBpbmxpbmVkIGluIGEgd3NkbCkgb3IgaXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHN0b3JlZC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVhTRChVUkkgdXJpLCBYU0RTY2hlbWEgc2NoZW1hKSB7Ci0JCQotCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQkvLyBsb29rIGF0IHRoZSBpbXBvcnRzIGFuZCBpbmNsdWRlcwotCSAgICAKLQkJZm9yIChJdGVyYXRvciBpdCA9IHNjaGVtYS5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQkgICAgICAgIAotCQkJT2JqZWN0IGNvbnRlbnQgPSBpdC5uZXh0KCk7Ci0JICAgICAgICAKLQkJCWlmICghKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpKQotCQkJCWNvbnRpbnVlOwotCQkJCQkgICAgICAgIAotCQkJWFNEU2NoZW1hRGlyZWN0aXZlIHhzZFNjaGVtYURpcmVjdGl2ZSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGNvbnRlbnQ7Ci0JCQlTdHJpbmcgeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24gPSB4c2RTY2hlbWFEaXJlY3RpdmUuZ2V0U2NoZW1hTG9jYXRpb24oKTsKLQkgICAgICAgICAgCi0JCQkvLyBhbmFseXplIGFueSByZWxhdGl2ZSBpbXBvcnRzIGFuZCBpbmNsdWRlcyB3ZSBmaW5kCi0JCQlpZiAoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24gIT0gbnVsbCAmJiBpc1JlbGF0aXZlKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKSkKLQkJCQl0cnkgewotCQkJCQlhbmFseXplWFNEKHVyaS5yZXNvbHZlKHVyaUNyZWF0ZSh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbikpKTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkvLyBpZ25vcmUgYW55IHhzZCdzIHdlIGNhbm5vdCByZXNvbHZlCi0JCQkJfQotCQl9Ci0JfQotCQotCS8qCi0JICogQW5hbHl6ZSB0aGUgc2NoZW1hIGF0IHRoZSBnaXZlbiBVUkksIHRoZSBzY2hlbWEgaXMgcGFyc2VkIGFuZCBzdG9yZWQgaW4KLQkgKiBYTUxPYmplY3RJbmZvcy4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVhTRChVUkkgdXJpKSB7Ci0JCQotCQl1cmkgPSB1cmkubm9ybWFsaXplKCk7Ci0JCQotCQkvLyBhbHJlYWR5IHNlZW4gdGhpcyB4c2QsIHNraXAgaXQKLQkJaWYgKHhtbE9iamVjdEluZm9zLmNvbnRhaW5zS2V5KHVyaS50b1N0cmluZygpKSkKLQkJCXJldHVybjsKLQkJCi0JCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYSh1cmkudG9TdHJpbmcoKSk7Ci0KLQkJU3RyaW5nIGVuY29kaW5nID0gbnVsbDsKLQkJLy8gaWYgc2NoZW1hIGlzIG5vdCBjYWNoZWQsIHBhcnNlIGl0Ci0JICAgIGlmICh4c2RTY2hlbWEgPT0gbnVsbCkgewotCSAgICAJWFNEUGFyc2VyIHAgPSBuZXcgWFNEUGFyc2VyKG51bGwpOwotCSAgICAJSW5wdXRTdHJlYW0gaXMgPSBOZXRVdGlscy5nZXRVUkxJbnB1dFN0cmVhbSh1cmkudG9TdHJpbmcoKSk7Ci0JICAgICAgCi0JICAgIAlpZiAoaXMgIT0gbnVsbCkgewotCSAgICAJCXAucGFyc2UoaXMpOwotCSAgICAJCXhzZFNjaGVtYSA9IHAuZ2V0U2NoZW1hKCk7Ci0JICAgIAkJZW5jb2RpbmcgPSBwLmdldEVuY29kaW5nKCk7Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICAJZW5jb2RpbmcgPSB4c2RTY2hlbWEuZ2V0RG9jdW1lbnQoKS5nZXRYbWxFbmNvZGluZygpOwotCSAgICAKLQkgICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKSB7Ci0JICAgICAgICAKLQkgICAgCWlmIChlbmNvZGluZyA9PSBudWxsKQotCSAgICAJCWVuY29kaW5nID0gIlVURi04IjsKLQkgICAgCQotCSAgICAJWE1MT2JqZWN0SW5mbyBpbmZvID0gbmV3IFhNTE9iamVjdEluZm8obmV3IFBhdGgodXJpLmdldFBhdGgoKSksIHhzZFNjaGVtYSwgZW5jb2RpbmcpOwkgICAgCQotCSAgICAJeG1sT2JqZWN0SW5mb3MucHV0KHVyaS50b1N0cmluZygpLCBpbmZvKTsKLQkgICAgCXVwZGF0ZVBhdGhQcmVmaXgoaW5mbyk7Ci0JICAgICAgCi0JICAgIAkvLyBhbmFseXplIGl0cyBpbXBvcnRzIGFuZCBpbmNsdWRlcwotCSAgICAJYW5hbHl6ZVhTRCh1cmksIHhzZFNjaGVtYSk7Ci0JICAgIH0KLQl9Ci0JCQotCS8qCi0JICogQXBwZW5kcyBhIHBhdGggdG8gYSBVUkkgYW5kIHJldHVybnMgdGhlIG5ldyBjb21iaW5lZCBVUkkgaW4gYW4gYXJyYXkgb2YgMiBlbGVtZW50cywKLQkgKiB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBpcyBpbiBkZWNvZGVkIGZvcm0gYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBpcyBpbiBlbmNvZGVkIGZvcm0uCi0JICovCi0JcHJpdmF0ZSBTdHJpbmdbXSBhcHBlbmRQYXRoVG9VUkkoVVJJIHVyaU9iaiwgSVBhdGggcGF0aCkgewotCQkKLQkJU3RyaW5nIHNjaGVtZVNwZWNpZmljUGFydCA9IHVyaU9iai5nZXRTY2hlbWVTcGVjaWZpY1BhcnQoKTsgCi0JCQotCQlpZiAoc2NoZW1lU3BlY2lmaWNQYXJ0LmVuZHNXaXRoKCIvIikpCi0JCQlwYXRoID0gcGF0aC5tYWtlUmVsYXRpdmUoKTsKLQkJZWxzZQotCQkJcGF0aCA9IHBhdGgubWFrZUFic29sdXRlKCk7Ci0JCQotCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsKLQkJCQl1cmlPYmouZ2V0U2NoZW1lKCkgKyAnOicgKyBzY2hlbWVTcGVjaWZpY1BhcnQgKyBwYXRoLAotCQkJCXVyaU9iai5nZXRTY2hlbWUoKSArICc6JyArIHVyaU9iai5nZXRSYXdTY2hlbWVTcGVjaWZpY1BhcnQoKSArIHBhdGgKLQkJfTsKLQl9Ci0JCi0JLyoKLQkgKiBXcml0ZXMgdGhlIHdzZGwgZGVmaW5pdGlvbiB0byB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmb2xkZXIuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgd3JpdGVYTUxPYmooSVBhdGggcGF0aCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cwotCQlXU0RMRXhjZXB0aW9uLCBVUklFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsJCQkJCi0JCQkgIAotCSAgICBTdHJpbmdbXSB0YXJnZXRVUkkgPSBhcHBlbmRQYXRoVG9VUkkodGFyZ2V0Rm9sZGVyVVJJLCBwYXRoKTsKLQkgICAgCi0JICAgIE91dHB1dFN0cmVhbSBvcyA9IHVyaUZhY3RvcnkubmV3VVJJKHRhcmdldFVSSVswXSkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JICAgIAotCSAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uSW1wbCA9IChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uOwotCQlXU0RMUmVzb3VyY2VJbXBsIHJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpIGRlZmluaXRpb25JbXBsLmVSZXNvdXJjZSgpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb25JbXBsLmdldERvY3VtZW50KCk7Ci0JCXJlc291cmNlLnNlcmlhbGl6ZShvcywgZG9jdW1lbnQsIGRvY3VtZW50LmdldFhtbEVuY29kaW5nKCkpOwotCSAgICAKLQkgICAgb3MuY2xvc2UoKTsKLQkgICAgCi0JICAgIHJldHVybiB0YXJnZXRVUklbMV07Ci0JfQotICAKLQkvKgotCSAqIFdyaXRlcyB0aGUgeHNkIHNjaGVtYSB0byB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmb2xkZXIuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgd3JpdGVYTUxPYmooSVBhdGggcGF0aCwgWFNEU2NoZW1hIHhzZFNjaGVtYSwgU3RyaW5nIGVuY29kaW5nLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cwotCQlUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBVUklFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsJCQkKLQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0geHNkU2NoZW1hLmdldERvY3VtZW50KCk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBlbmNvZGluZyk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKLQkJCi0JCUVsZW1lbnQgZSA9IHhzZFNjaGVtYS5nZXRFbGVtZW50KCk7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwkJCi0JCQotCQlTdHJpbmdbXSB0YXJnZXRVUkkgPSBhcHBlbmRQYXRoVG9VUkkodGFyZ2V0Rm9sZGVyVVJJLCBwYXRoKTsKLQkJCi0JCU91dHB1dFN0cmVhbSBvcyA9IHVyaUZhY3RvcnkubmV3VVJJKHRhcmdldFVSSVswXSkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvcykpOwotCQlvcy5jbG9zZSgpOwotCQkKLQkJcmV0dXJuIHRhcmdldFVSSVsxXTsKLQl9ICAKLQotCS8qCi0JICogQ29tcGFyZXMgdGhlIDIgdXJpcyBhbmQgc2VlIGlmIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZS4gCi0JICogV2UgbmVlZCB0byBjb252ZXJ0IGJvdGggdXJpcyB0byBmaWxlOiBwcm90b2NhbCB1cmlzIGluIG9yZGVyIHRvIGNvbXBhcmUuCi0JICovCQotCXByaXZhdGUgYm9vbGVhbiBpc1NhbWVMb2NhdGlvbihTdHJpbmcgdXJpMSwgU3RyaW5nIHVyaTIpIHsKLQotCQkvLyBpZiBlaXRoZXIgdXJpIGlzIG51bGwsIHdlIGNhbm5vdCBtYWtlIGFueSBtZWFuaW5nZnVsIGNvbXBhcmlzb24KLQkJaWYgKHVyaTEgPT0gbnVsbCB8fCB1cmkyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXRyeSB7Ci0JCQkvL3dlIGhhdmUgYW4gZW5jb2RlZCBVUkkgYW5kIHdhbnQgdG8gY29tcGFyZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0KLQkJCXVyaTEgPSBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudXJpVG9Mb2NhdGlvbih1cmkxKTsKLQkJCXVyaTIgPSBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudXJpVG9Mb2NhdGlvbih1cmkyKTsKLQkJCWlmICh1cmkxID09IG51bGwgfHwgdXJpMiA9PSBudWxsIHx8IHVyaTEubGVuZ3RoKCkgPT0gMCB8fCB1cmkyLmxlbmd0aCgpID09IDApCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJcmV0dXJuIHVyaTEuZXF1YWxzKHVyaTIpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIEV4ZWN1dGVzIHRoZSBjb3B5aW5nIGFjdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbW9uaXRvciBBbiBvcHRpb25hbCBwcm9ncmVzcyBtb25pdG9yLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBUaHJvd24gaWYgdGhlIGNvcHlpbmcgaXMgdW5zdWNjZXNzZnVsLiAgUG9zc2libGUgY2F1c2VzIGluY2x1ZGU6Ci0JICogdGFyZ2V0IGZvbGRlciBVUkkgd2FzIG5vdCBzcGVjaWZpZWQ7IHNvdXJjZSBVUkkgaGFzIGluY29ycmVjdCBmb3JtYXQ7IHByb2JsZW0gcGFyc2luZyB3c2RsIAotCSAqIG9yIHhzZCBkb2N1bWVudHM7IHByb2JsZW0gd3JpdGluZyB0byBmaWxlc3lzdGVtLgotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCi0JCXhtbE9iamVjdEluZm9zLmNsZWFyKCk7Ci0KLQkJLy8gdGFyZ2V0IGZvbGRlciBtdXN0IGJlIHNldAotCQlpZiAodGFyZ2V0Rm9sZGVyVVJJID09IG51bGwpCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9UQVJHRVRfRk9MREVSX05PVF9TUEVDSUZJRUQpKTsJCQotCQkJCQotICAJCXRyeSB7Ci0gIAkJCWFuYWx5emVXU0RMKHNvdXJjZVVSSSwgZGVmaW5pdGlvbik7ICAJCQkgCi0gIAkJCQotICAJCQkvLyBiZWdpbiB3cml0aW5nIG91dCBmaWxlcwotICAJCQkKLSAgCQkJSXRlcmF0b3IgaXRlciA9IHhtbE9iamVjdEluZm9zLnZhbHVlcygpLml0ZXJhdG9yKCk7IAkJCSAgCQkJCi0gIAkJCQotICAJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgCQkJCVhNTE9iamVjdEluZm8gaW5mbyA9IChYTUxPYmplY3RJbmZvKSBpdGVyLm5leHQoKTsgIAkJCQkKLSAgCQkJCUlQYXRoIHJlbFBhdGggPSBpbmZvLnBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhwYXRoUHJlZml4LnNlZ21lbnRDb3VudCgpKTsKLSAgCQkJCQotICAJCQkJaWYgKGluZm8uY29udGVudCBpbnN0YW5jZW9mIERlZmluaXRpb24pIHsKLSAgCQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaW5mby5jb250ZW50OwotICAJCQkJCQotICAJCQkJCS8vIGlmIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHdzZGwsIHJlbWVtYmVyIGl0cyBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyCi0gIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gdGhpcy5kZWZpbml0aW9uKQotICAJCQkJCQl3c2RsUmVsUGF0aCA9IHJlbFBhdGg7Ci0KLSAgCQkJCQlTdHJpbmcgdGFyZ2V0VVJJID0gd3JpdGVYTUxPYmoocmVsUGF0aCwgZGVmaW5pdGlvbiwgbW9uaXRvcik7Ci0gIAkJCQkJCi0gIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gdGhpcy5kZWZpbml0aW9uICYmIGlzU2FtZUxvY2F0aW9uKHNvdXJjZVVSSS50b1N0cmluZygpLCB0YXJnZXRVUkkpKQotICAJCQkJCQlyZXR1cm47Ci0gIAkJCQl9Ci0gIAkJCQllbHNlCi0gIAkJCQkJd3JpdGVYTUxPYmoocmVsUGF0aCwgKFhTRFNjaGVtYSkgaW5mby5jb250ZW50LCBpbmZvLmVuY29kaW5nLCBtb25pdG9yKTsgIAkJCQkJCi0gIAkJCX0gIAkJCQotICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0gIAkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotICAJCQkJCU5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX0NPUFlfV1NETCwgbmV3IFN0cmluZ1tdIHtzb3VyY2VVUkkudG9TdHJpbmcoKSwgdGFyZ2V0Rm9sZGVyVVJJLnRvU3RyaW5nKCl9KSwgdCkpOwotICAJCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudCwgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmb2xkZXIgYWZ0ZXIKLQkgKiBjb3B5aW5nIGNvbXBsZXRlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBJUGF0aCBnZXRSZWxhdGl2ZVBhdGgoKSB7Ci0JCXJldHVybiB3c2RsUmVsUGF0aDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBqYXZhLm5ldC5VUkkgdXJpQ3JlYXRlKFN0cmluZyB1cmkpIHsKLQkJaWYgKHVyaSAhPSBudWxsKQotCQkJdXJpID0gdXJpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJcmV0dXJuIGphdmEubmV0LlVSSS5jcmVhdGUodXJpKTsKLQkJCX0KLQkJCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewkJCQkKLQkJCQlyZXR1cm4gamF2YS5uZXQuVVJJLmNyZWF0ZShVUklFbmNvZGVyLmVuY29kZSh1cmksICJVVEYtOCIpKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gamF2YS5uZXQuVVJJLmNyZWF0ZSgiIik7Ci0JCX0JCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0Fic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE0NDY3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0Fic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICogCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBJV2ViU2VydmljZUxvY2F0b3IuICBFeHRlbmRlcnMgbXVzdCBpbXBsZW1lbnQgdGhlIGFic3RyYWN0IG1ldGhvZCBnZXRXZWJTZXJ2aWNlcygpLiAgCi0gKiBUaGlzIGNsYXNzIHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIG1ldGhvZHMgdXNlZnVsIHRvIGxvY2F0b3IgaW1wbGVtZW50ZXJzLiAgRXh0ZW5kZXJzIHNob3VsZCByZWdpc3RlciB0aGVpcgotICogbG9jYXRvciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZWlyIHBsdWdpbiB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LiAKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yIGltcGxlbWVudHMgSVdlYlNlcnZpY2VMb2NhdG9yIHsKLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvciAoKQotCXsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kJ3MKLQkgKiBkZWZhdWx0IGJlaGF2aW91ciBvZiByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBub24tbnVsbCBidXQgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCdzCi0JICogZGVmYXVsdCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuCi0JICogQHBhcmFtIHByb2plY3RzIE9uZSBvciBtb3JlIHByb2plY3RzIHRvIHdoaWNoCi0JICogdGhlIHNlYXJjaCBzaG91bGQgYmUgbGltaXRlZC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBub24tbnVsbCBidXQgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4gCi0JICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QncwotCSAqIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHJldHVybmluZyBhbiBlbXB0eSBsaXN0LgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIG5vbi1udWxsIGJ1dCBwb3NzaWJseSBlbXB0eSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMKLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsgCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4gCi0JICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QncwotCSAqIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHJldHVybmluZyBhbiBlbXB0eSBsaXN0LgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaAotCSAqIHRoZSBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbm9uLW51bGwgYnV0IHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOyAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0lXZWJTZXJ2aWNlTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9JV2ViU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1MzMxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0lXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICogSW50ZXJmYWNlIGZvciBXZWIgc2VydmljZSBsb2NhdG9ycyB0aGF0IHdpbGwgYmUgcmV0cmlldmVkCi0gKiBieSB0aGUgV2ViU2VydmljZUZpbmRlci4gVGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZQotICogaW1wbGVtZW50ZWQgZGlyZWN0bHkuIEluc3RlYWQsIHN1YmNsYXNzZXMgc2hvdWxkIGV4dGVuZAotICogQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvciBhbmQgaW1wbGVtZW50IHRoZQotICogZ2V0V2ViU2VydmljZXMoKSBhbmQgZ2V0V2ViU2VydmljZUNsaWVudHMoKSBtZXRob2RzLiAKLSAqLwotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZUxvY2F0b3IKLXsKLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIFRoaXMgb3BlcmF0aW9uIG1heSBiZSBsb25nIHJ1bm5pbmcuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaCB0aGUKLQkgKiBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywKLQkgKiBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApOwotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaCB0aGUKLQkgKiBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLAotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dTRExVUkxTdHJpbmdXcmFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dTRExVUkxTdHJpbmdXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YWJhODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XU0RMVVJMU3RyaW5nV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgxMjA4ICAgMjU3NjE4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgQWRkIE1lY2hhbmlzbSBmb3IgQWRvcHRlcnMgdG8gbWFwIFNlcnZpY2VzIHRvIFdTREwgVVJMcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotcHVibGljIGNsYXNzIFdTRExVUkxTdHJpbmdXcmFwcGVyIHsKLQotCXB1YmxpYyBTdHJpbmcgd3NkbFVSTDsKLQkKLQlwdWJsaWMgV1NETFVSTFN0cmluZ1dyYXBwZXIoU3RyaW5nIHdzZGxVUkwpIHsKLQkJdGhpcy53c2RsVVJMID0gd3NkbFVSTDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRXU0RMVVJMU3RyaW5nKCkgewotCQlyZXR1cm4gd3NkbFVSTDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VDYXRlZ29yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlQ2F0ZWdvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1ODUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VDYXRlZ29yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogQSBXZWJTZXJ2aWNlQ2F0ZWdvcnkgcmVwcmVzZW50cyBhIGRlZmluZWQgY2F0ZWdvcnkgb2YKLSAqIFdlYiBzZXJ2aWNlIGxvY2F0b3JzIHBsdWdnZWQgaW50byB0aGUgV2ViU2VydmljZUZpbmRlcgotICogZnJhbWV3b3JrLiBFYWNoIGNhdGVnb3J5IGhhcyBhIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciwKLSAqIGFuIG9wdGlvbmFsIG5vbi10cmFuc2xhdGFibGUgcGFyZW50IGNhdGVnb3J5IGlkZW50aWZpZXIKLSAqIChhYnNlbnQgZm9yIHJvb3QgY2F0ZWdvcmllcyksIGEgdHJhbnNsYXRhYmxlIHNob3J0IGxhYmVsLAotICogYSB0cmFuc2xhdGFibGUgbG9uZyBkZXNjcmlwdGlvbiBhbmQgYW4gaWNvbi4KLSAqIEBzZWUgV2ViU2VydmljZUZpbmRlciNnZXRXZWJTZXJ2aWNlQ2F0ZWdvcmllcygpIAotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNhdGVnb3J5Ci17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9JRCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0NBVEVHT1JZID0gImNhdGVnb3J5IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTEFCRUwgPSAibGFiZWwiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0lDT04gPSAiaWNvbiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBpY2VfOwotCQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgV2ViU2VydmljZUNhdGVnb3J5IGZvciB0aGUgZ2l2ZW4KLQkgKiBjb25maWd1cmF0aW9uIGVsZW1lbnQgZnJvbSB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LgotCSAqIEBwYXJhbSBpY2UgVGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBvbiB3aGljaCB0aGlzCi0JICogbmV3IFdlYlNlcnZpY2VDYXRlZ29yeSBpcyBiYXNlZC4gCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeSAoIElDb25maWd1cmF0aW9uRWxlbWVudCBpY2UgKQotCXsKLQkJaWNlXyA9IGljZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyIG9mIHRoaXMgY2F0ZWdvcnkuCi0JICogQHJldHVybiBUaGUgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyIG9mIHRoaXMgY2F0ZWdvcnkuCi0JICogVGhpcyBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldElkICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9JRCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciBvZiB0aGlzIGNhdGVnb3J5J3MKLQkgKiBpbW1lZGlhdGUgcGFyZW50IGNhdGVnb3J5LCBvciBudWxsIGlmIHRoaXMgaXMgYSByb290IGNhdGVnb3J5Ci0JICogYW5kLCBhcyBzdWNoLCBoYXMgbm8gcGFyZW50IGNhdGVnb3J5LgotCSAqIEByZXR1cm4gVGhlIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciBvZiB0aGlzIGNhdGVnb3J5J3MKLQkgKiBwYXJlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFBhcmVudElkICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9DQVRFR09SWSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhpcyBjYXRlZ29yeSdzIGltbWVkaWF0ZSBwYXJlbnQgV2ViU2VydmljZUNhdGVnb3J5LCBvcgotCSAqIG51bGwgaWYgdGhpcyBpcyBhIHJvb3QgY2F0ZWdvcnkgYW5kLCBhcyBzdWNoLCBoYXMgbm8gcGFyZW50IGNhdGVnb3J5LgotCSAqIEByZXR1cm4gVGhpcyBjYXRlZ29yeSdzIGltbWVkaWF0ZSBwYXJlbnQgV2ViU2VydmljZUNhdGVnb3J5LCBvcgotCSAqIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUNhdGVnb3J5IGdldFBhcmVudCAoKQotCXsKLQkJcmV0dXJuIFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKS5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlCeUlkKGdldFBhcmVudElkKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbnRlcm5hdGlvbmFsaXplZCBzaG9ydCBsYWJlbCBvZiB0aGlzIGNhdGVnb3J5LAotCSAqIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4gTm90ZSB0aGF0IHVzZXIgaW50ZXJmYWNlcyBtYXkKLQkgKiBjaG9vc2UgdG8gYnlwYXNzIGNhdGVnb3JpZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGxhYmVsLgotCSAqIEByZXR1cm4gVGhlIGludGVybmF0aW9uYWxpemVkIHNob3J0IGxhYmVsIG9mIHRoaXMgY2F0ZWdvcnksCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwgKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0xBQkVMKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW50ZXJuYXRpb25hbGl6ZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBjYXRlZ29yeSwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICogQHJldHVybiBUaGUgaW50ZXJuYXRpb25hbGl6ZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBjYXRlZ29yeSwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotCXsKLQkJcmV0dXJuIGljZV8uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfREVTQ1JJUFRJT04pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpY29uIG9mIHRoaXMgY2F0ZWdvcnksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKiBAcmV0dXJuIFRoZSBpY29uIG9mIHRoaXMgY2F0ZWdvcnksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEljb24gKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0lDT04pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlRmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMGQ5OWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlRmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICogV2ViU2VydmljZUZpbmRlciBpcyBhIHNpbmdsZXRvbiB3aGljaCBmaW5kcyBhbGwgZXh0ZW5kZXJzIGFuZCByZXR1cm5zIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuCi0gKiBGaW5kcyB3ZWIgc2VydmljZXMgYnkgY2FsbGluZyBsb2NhdG9ycyBleHRlbmRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfSAKLSAqIHdoaWNoIGhhdmUgYmVlbiByZWdpc3RlcmVkIHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5fS4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VGaW5kZXIgewotCi0JcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZUZpbmRlciBpbnN0YW5jZSA9IG51bGw7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9MT0NBVE9SID0gIndlYlNlcnZpY2VMb2NhdG9yIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0NBVEVHT1JZID0gIndlYlNlcnZpY2VMb2NhdG9yQ2F0ZWdvcnkiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9JRCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0NMQVNTID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfQ0FURUdPUlkgPSAiY2F0ZWdvcnkiOyAvLyROT04tTkxTLTEkCi0vLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfSUNPTiA9ICJpY29uIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoKLQkgKiBQdWJsaWMgY29uc3RydWN0aW9uIGlzIG5vdCBhbGxvd2VkLgotCSAqIFVzZSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCkuCi0JICovCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlRmluZGVyICgpCQotCXsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gb2YgPGNvZGU+V2ViU2VydmljZUZpbmRlcjwvY29kZT4uCi0JICogQHJldHVybiBUaGUgc2luZ2xldG9uIG9mIDxjb2RlPldlYlNlcnZpY2VGaW5kZXI8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUZpbmRlciBpbnN0YW5jZSAoKQotCXsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlID0gbmV3IFdlYlNlcnZpY2VGaW5kZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuICBDdXJyZW50bHkgcmV0dXJucyBhbGwgd2ViIAotCSAqIHNlcnZpY2VzIGZvdW5kIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycy4gIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChudWxsLG1vbml0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuICBDdXJyZW50bHkgcmV0dXJucyBhbGwgd2ViIAotCSAqIHNlcnZpY2VzIGZvdW5kIGluIHRoZSBjb250ZXh0IG9mIHRoZSBnaXZlbiBwcm9qZWN0cyBmb3IgYWxsIHJlZ2lzdGVyZWQgbG9jYXRvcnMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkKG51bGwscHJvamVjdHMsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCksbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBUaGUgc2VhcmNoIGlzIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBzZXQgb2Ygb25lIG9yIG1vcmUgcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCkscHJvamVjdHMsbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkICggU3RyaW5nIGNhdGVnb3J5SWQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZCxudWxsLG1vbml0b3IpOwkKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBUaGUgc2VhcmNoIGlzIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBzZXQgb2Ygb25lIG9yIG1vcmUgcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkLCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJTGlua2VkTGlzdCB3ZWJTZXJ2aWNlcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCVdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NsciA9IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChFTEVNRU5UX0xPQ0FUT1IuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldE5hbWUoKSkpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlpZiAoY2F0ZWdvcnlJZCA9PSBudWxsIHx8IGNhdGVnb3J5SWQuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0NBVEVHT1JZKSkpCi0JCQkJCXsKLQkJCQkJCU9iamVjdCBvYmogPSByZWdFbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEFUVFJJQlVURV9DTEFTUyk7Ci0JCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVdlYlNlcnZpY2VMb2NhdG9yKQotCQkJCQkJewotCQkJCQkJCUlXZWJTZXJ2aWNlTG9jYXRvciB3c2wgPSAoSVdlYlNlcnZpY2VMb2NhdG9yKW9iajsKLQkJCQkJCQlMaXN0IHdzTGlzdCA9IHByb2plY3RzID09IG51bGwgPyB3c2wuZ2V0V2ViU2VydmljZXMobW9uaXRvcikgOiB3c2wuZ2V0V2ViU2VydmljZXMocHJvamVjdHMsbW9uaXRvcik7Ci0JCQkJCQkJaWYgKHdzTGlzdCAhPSBudWxsKQotCQkJCQkJCXsKLQkJCQkJCQkJd2ViU2VydmljZXMuYWRkQWxsKHdzTGlzdCk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSAKLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkKLQkJCQl7Ci0JCQkJCS8vIFF1aWV0bHkgYnlwYXNzIGFueSBJV2ViU2VydmljZUxvY2F0b3JzIHRoYXQgZmFpbGVkIHRvIGJlIGxvYWRlZC4KLQkJCQl9Ci0JCQl9Ci0JCX0gCi0JCXJldHVybiB3ZWJTZXJ2aWNlcy5pdGVyYXRvcigpOwkKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gIEN1cnJlbnRseSByZXR1cm5zIGFsbCB3ZWIgCi0JICogc2VydmljZSBjbGllbnRzIGZvdW5kIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycy4gIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQobnVsbCxtb25pdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gIEN1cnJlbnRseSByZXR1cm5zIGFsbCB3ZWIgCi0JICogc2VydmljZSBjbGllbnRzIGZvdW5kIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2l2ZW4gcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChudWxsLHByb2plY3RzLG1vbml0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uIAotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeSAoIFdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCksbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogVGhlIHNlYXJjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gc2V0IG9mIG9uZSBvciBtb3JlIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4gCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5ID09IG51bGwgPyBudWxsIDogY2F0ZWdvcnkuZ2V0SWQoKSxwcm9qZWN0cyxtb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQsbnVsbCxtb25pdG9yKTsKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogVGhlIHNlYXJjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gc2V0IG9mIG9uZSBvciBtb3JlIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkICggU3RyaW5nIGNhdGVnb3J5SWQsIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlMaW5rZWRMaXN0IHdlYlNlcnZpY2VDbGllbnRzID0gbmV3IExpbmtlZExpc3QoKTsKLQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSByZWdFbGVtZW50cyA9IHdzbHIuZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdFbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKEVMRU1FTlRfTE9DQVRPUi5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWlmIChjYXRlZ29yeUlkID09IG51bGwgfHwgY2F0ZWdvcnlJZC5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfQ0FURUdPUlkpKSkKLQkJCQkJewotCQkJCQkJT2JqZWN0IG9iaiA9IHJlZ0VsZW1lbnRzW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQVRUUklCVVRFX0NMQVNTKTsKLQkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJV2ViU2VydmljZUxvY2F0b3IpCi0JCQkJCQl7Ci0JCQkJCQkJSVdlYlNlcnZpY2VMb2NhdG9yIHdzbCA9IChJV2ViU2VydmljZUxvY2F0b3Ipb2JqOwotCQkJCQkJCUxpc3Qgd3NMaXN0ID0gcHJvamVjdHMgPT0gbnVsbCA/IHdzbC5nZXRXZWJTZXJ2aWNlQ2xpZW50cyhtb25pdG9yKSA6IHdzbC5nZXRXZWJTZXJ2aWNlQ2xpZW50cyhwcm9qZWN0cyxtb25pdG9yKTsKLQkJCQkJCQlpZiAod3NMaXN0ICE9IG51bGwpCi0JCQkJCQkJewotCQkJCQkJCQl3ZWJTZXJ2aWNlQ2xpZW50cy5hZGRBbGwod3NMaXN0KTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IAotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KQotCQkJCXsKLQkJCQkJLy8gUXVpZXRseSBieXBhc3MgYW55IElXZWJTZXJ2aWNlTG9jYXRvcnMgdGhhdCBmYWlsZWQgdG8gYmUgbG9hZGVkLgotCQkJCX0KLQkJCX0KLQkJfSAKLQkJcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRzLml0ZXJhdG9yKCk7CQotCX0gCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHJlZ2lzdGVyZWQgV2ViIFNlcnZpY2UgQ2F0ZWdvcnkgSURzLgotCSAqIEByZXR1cm4gQW4gYXJyYXksIG5ldmVyIG51bGwgYnV0IHBvc3NpYmx5IGVtcHR5LAotCSAqIG9mIHJlZ2lzdGVyZWQgV2ViIFNlcnZpY2UgQ2F0ZWdvcnkgZGVzY3JpcHRvcnMuCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeVtdIGdldFdlYlNlcnZpY2VDYXRlZ29yaWVzICgpCi0JewotCQlMaW5rZWRMaXN0IGNhdGVnb3JpZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoRUxFTUVOVF9DQVRFR09SWS5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQljYXRlZ29yaWVzLmFkZChuZXcgV2ViU2VydmljZUNhdGVnb3J5KHJlZ0VsZW1lbnRzW2ldKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChXZWJTZXJ2aWNlQ2F0ZWdvcnlbXSljYXRlZ29yaWVzLnRvQXJyYXkobmV3IFdlYlNlcnZpY2VDYXRlZ29yeVswXSk7Ci0KLQl9CQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiByZWdpc3RlcmVkIFdlYiBTZXJ2aWNlIENhdGVnb3J5IElEcy4KLQkgKiBAcmV0dXJuIEFuIGFycmF5LCBuZXZlciBudWxsIGJ1dCBwb3NzaWJseSBlbXB0eSwKLQkgKiBvZiByZWdpc3RlcmVkIFdlYiBTZXJ2aWNlIENhdGVnb3J5IElEcy4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUNhdGVnb3J5SWRzICgpCi0JewotCQlMaW5rZWRMaXN0IGNhdGVnb3JpZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoRUxFTUVOVF9DQVRFR09SWS5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgaWQgPSByZWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9JRCk7Ci0JCQkJaWYgKGlkICE9IG51bGwpCi0JCQkJewotCQkJCQljYXRlZ29yaWVzLmFkZChpZCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAoU3RyaW5nW10pY2F0ZWdvcmllcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBXZWJTZXJ2aWNlQ2F0ZWdvcnkgd2l0aCB0aGUgZ2l2ZW4gSUQsCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBJRCBvZiB0aGUgY2F0ZWdvcnkgdG8gZmluZC4KLQkgKiBAcmV0dXJuIFRoZSBtYXRjaGluZyBjYXRlZ29yeSBkZXNjcmlwdG9yLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeSBnZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlCeUlkICggU3RyaW5nIGNhdGVnb3J5SWQgKQotCXsKLQkJV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5ID0gbnVsbDsKLQkJaWYgKGNhdGVnb3J5SWQgIT0gbnVsbCkKLQkJewotCQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQkJewotCQkJCWlmIChFTEVNRU5UX0NBVEVHT1JZLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXROYW1lKCkpKQotCQkJCXsKLQkJCQkJU3RyaW5nIGlkID0gcmVnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfSUQpOwotCQkJCQlpZiAoY2F0ZWdvcnlJZC5lcXVhbHMoaWQpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbmV3IFdlYlNlcnZpY2VDYXRlZ29yeShyZWdFbGVtZW50c1tpXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGNhdGVnb3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU0MmIwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25JbXBsOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICogCi0gKiBUaGlzIGNsYXNzIGlzIHByb3ZpZGVkIGZvciB0aGUgYWRkaXRpb24gb2YgbG9jYXRvciBleHRlbnNpb24gc3BlY2lmaWMgZnVuY3Rpb25zCi0gKiAKLSAqLwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24gZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbCB7Ci0JCi0vLwkgQ29weXJpZ2h0Ci0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCQotCSBwdWJsaWMgV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0JICB7Ci0JICAgIHN1cGVyKGNvbmZpZ0VsZW1lbnQpOwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkNmJmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGw7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICogUmV0cmlldmVzIGxvY2F0b3JzIHdoaWNoIGV4dGVuZCB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLkFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotICogTG9jYXRvcnMgbXVzdCBjcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IGluIG9yZGVyIHRvIGJlIHJldHJpZXZlZCBieQotICogdGhlIHJlZ2lzdHJ5LgotICovCi0KLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsIHsKLQotCSAvLyBDb3B5cmlnaHQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0JICAvKgotCSAgICogVGhpcyBpcyBhIHNpbmdsZXRvbiBiZWNhc3VlIGl0IHdhcyBkZWNpZGVkIHRoYXQgdGhlIG1lbW9yeSBmb290IHByaW50IAotCSAgICogaXMgbm90IGFzIGV4cGVuc2l2ZSBhcyB0aGUgdGltZSB0YWtlbiByZXRyaWV2aW5nIHRoZSBkYXRhCi0JICAgKiAKLQkgICAqLwotCSAgCi0JICAKLQkgIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NscjsKLQkgIAotCSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLQkgIHsKLQkgIAlpZih3c2xyID09IG51bGwpIHdzbHIgPSBuZXcgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSgpOwotCSAgICByZXR1cm4gd3NscjsKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5KCkKLQkgIHsKLQkgICAgc3VwZXIoKTsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICAqIENoaWxkcmVuIHJlZ2lzdHJpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCBleHRlbnNpb24gdHlwZXMgCi0JICAqIEByZXR1cm4gV2Vic2VydmljZUV4dGVuc2lvbiBob2xkcyBhIGNvbmZpZyBlbGVtCi0JICAqIGZvciB0aGF0IGV4dGVuc2lvbiBjYXBhYmxlIG9mIGNyZWF0aW5nIGFuIGV4ZWN1dGFibGUgZmlsZQotCSAgKi8KLQkgIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24oY29uZmlnRWxlbWVudCk7Ci0JICB9Ci0KLQkgIC8qKgotCSAgKiBDb250YWN0cyBwbGF0Zm9ybSByZWdpc3RyeSBhbmQgZ2V0cyBhbGwgbG9jYXRvcnMgd2hpY2ggaGF2ZSByZWdpc3RlcmVkIAotCSAgKiAgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4KLQkgICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbiBhcnJheSBvZiBlbGVtZW50cyB3aGljaCBjb250YWluIGxvY2F0b3JzIAotCSAgKiBleHRlbmRpbmcgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci4KLQkgICovCi0JICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKQotCSAgewotCSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLndzdC53cyIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIik7Ci0JICAgIHJldHVybiBjb25maWc7ICAgIAotCSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dvcmtzcGFjZVdTRExMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dvcmtzcGFjZVdTRExMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGMwNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9Xb3Jrc3BhY2VXU0RMTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDkwMzEwICAgMjQyNDQwIHllbmx1QGNhLmlibS5jb20gLSBZZW4gTHUsIFBsdWdnYWJsZSBJRmlsZSB0byBVUkkgQ29udmVydGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb252ZXJ0ZXIuSUlGaWxlMlVyaUNvbnZlcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0vKioKLSAqIEV4dGVuZHMgdGhlIFdlYiBTZXJ2aWNlcyBGaW5kZXIgRnJhbWV3b3JrLgotICogRmluZHMgYWxsIC53c2RsIGZpbGVzIGluIHRoZSB3b3Jrc3BhY2UuCi0gKiBOb3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4gIFdvcmtzcGFjZVdTRExMb2NhdG9yIHJlZ2lzdGVycyB3aXRoIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgCi0gKiBhbmQgaXMgYWNjZXNzZWQgYnkgdGhlIHtAbGluayBXZWJTZXJ2aWNlRmluZGVyfS4gCi0gKi8KLQotcHVibGljIGNsYXNzIFdvcmtzcGFjZVdTRExMb2NhdG9yIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcgotewotCi0JcHJvdGVjdGVkIExpc3Qgd3NkbFNlcnZpY2VzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk1fUkVTID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7ICAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhUID0gIndzZGwiOyAgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIFdvcmtzcGFjZVdTRExMb2NhdG9yKCkKLQl7Ci0JCXN1cGVyKCk7CQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgYWxsIC53c2RsIGZpbGVzIGluIHRoZSB3b3Jrc3BhY2UuICBDdXJyZW50bHkgZG9lcyBub3QgZWxpbWluYXRlIG11bHRpcGxlIAotCSAqIG9jY3VyZW5jZXMgb2YgdGhlIHNhbWUgd2ViIHNlcnZpY2UuIAotCSAqIAotCSAqIFRPRE86IGFkZCBhIGxpc3RlbmVyIHRvIHRoZSB3b3Jrc3BhY2UgcmVzb3VyY2UgdHJlZSBzbyB0aGF0IGdldFdlYlNlcnZpY2VzIGRvZXNuJ3QgYWx3YXlzCi0JICogdXNlIHRoZSBXU0RMVmlzaXRvciB0byB3YWxrIHRoZSBlbnRpcmUgcmVzb3VyY2UgdHJlZS4gIFRoYXQgc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UuICBBZnRlcgotCSAqIHRoYXQgdGhlIHJlc291cmNlIHRyZWUgY2FuIGJlIG1vbml0b3JlZCBmb3IgbW9kaWZpY2F0aW9ucyB0byAud3NkbCBmaWxlcyBhbmQgY2hhbmdlcyBtYWRlIHRvIGEgY2FjaGUuIAotCSAqIAotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzIChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewkKLQkJaWYgKHdzZGxTZXJ2aWNlcyA9PSBudWxsKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQlXU0RMVmlzaXRvciB2aXNpdG9yID0gbmV3IFdTRExWaXNpdG9yKCk7Ci0JCQkJcm9vdC5hY2NlcHQodmlzaXRvcik7CQkKLQkJCQl3c2RsU2VydmljZXMgPSB2aXNpdG9yLmdldFdTREwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXgpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCQlyZXR1cm4gd3NkbFNlcnZpY2VzOwkJCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgLndzZGwgZmlsZXMgaW4gdGhlIGdpdmVuIHByb2plY3QuCi0JICogQ3VycmVudGx5IGRvZXMgbm90IGVsaW1pbmF0ZSBtdWx0aXBsZSBvY2N1cmVuY2VzIG9mIHRoZSBzYW1lIHdlYiBzZXJ2aWNlLiAKLQkgKiAKLQkgKiBUT0RPOiBhZGQgYSBsaXN0ZW5lciB0byB0aGUgd29ya3NwYWNlIHJlc291cmNlIHRyZWUgc28gdGhhdCBnZXRXZWJTZXJ2aWNlcyBkb2Vzbid0IGFsd2F5cwotCSAqIHVzZSB0aGUgV1NETFZpc2l0b3IgdG8gd2FsayB0aGUgZW50aXJlIHJlc291cmNlIHRyZWUuICBUaGF0IHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlLiAgQWZ0ZXIKLQkgKiB0aGF0IHRoZSByZXNvdXJjZSB0cmVlIGNhbiBiZSBtb25pdG9yZWQgZm9yIG1vZGlmaWNhdGlvbnMgdG8gLndzZGwgZmlsZXMgYW5kIGNoYW5nZXMgbWFkZSB0byBhIGNhY2hlLiAKLQkgKiAKLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzIChJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlXU0RMVmlzaXRvciB2aXNpdG9yID0gbmV3IFdTRExWaXNpdG9yKCk7Ci0JCWlmIChwcm9qZWN0cyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKGludCBwPTA7IHA8cHJvamVjdHMubGVuZ3RoOyBwKyspCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlwcm9qZWN0c1twXS5hY2NlcHQodmlzaXRvcik7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KQotCQkJCXsKLQkJCQkJLy8gRG8gbm90aGluZy4KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHZpc2l0b3IuZ2V0V1NETCgpOwotCX0KLQotCS8qKgotCSAqICBVc2VzIHRoZSBWaXNpdG9yIHBhdHRlcm4gdG8gd2FsayB0aGUgd29ya3NwYWNlIHJlc291cmNlIHRyZWUKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFdTRExWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlVmlzaXRvcgotCXsKLQotCQlwcml2YXRlIFZlY3RvciB3c2RsID0gbmV3IFZlY3RvcigpOwotCi0JCS8qKgotCQkgKiB2aXNpdHMgZXZlcnkgbm9kZSBvbiB0aGUgcmVzb3VyY2UgdHJlZSBzdG9wcGluZyBhIGZpbGUgcmVzb3VyY2VzCi0JCSAqIGlmIGZpbGUgcmVzb3VyY2UgaGFzIGV4dGVuc2lvbiAud3NkbCBhIFdlYlNlcnZpY2VJbmZvIG9iamVjdCBpcyBjcmVhdGVkIGFuZCBhZGRlZCB0byBhIHZlY3RvciAKLQkJICogIFRPRE86IGxvb2sgYXQgY2FjaGluZyB0byBlbGltaW5hdGUgZHVwbGljYXRlIHdlYiBzZXJ2aWNlIGRlZmluaXRpb25zIGluIHRoZSB2ZWN0b3IgcmV0dXJuZWQKLQkJICogIFRPRE86IGFkZCBtb3JlIGluZm9ybWF0aW9uIHRvIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QuICBDdXJyZW50bHkgb25seSB0aGUgcXVhbGlmaWVkIGZpbGVuYW1lIGlzIGFkZGVkLgotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKQotCQl7Ci0JCQlpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCQkJewotCQkJCVN0cmluZyB3c2RsVVJMID0gbnVsbDsKLQkJCQlJSUZpbGUyVXJpQ29udmVydGVyIGNvbnZlcnRlciA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SUZpbGUyVXJpQ29udmVydGVyKCk7Ci0JCQkJYm9vbGVhbiBhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gdHJ1ZTsKLQkJCQlpZiAoY29udmVydGVyICE9IG51bGwpCi0JCQkJewotCQkJCSAgd3NkbFVSTCA9IGNvbnZlcnRlci5jb252ZXJ0KChJRmlsZSlyZXNvdXJjZSk7Ci0JCQkJICBpZiAod3NkbFVSTCA9PSBudWxsKQotCQkJCQlhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlID0gY29udmVydGVyLmFsbG93QmFzZUNvbnZlcnNpb25PbkZhaWx1cmUoKTsKLQkJCQl9Ci0JCQkJaWYgKHdzZGxVUkwgPT0gbnVsbCAmJiBhbGxvd0Jhc2VDb252ZXJzaW9uT25GYWlsdXJlKQotCQkJCXsKLQkJCQkgIFN0cmluZyBleHQgPSByZXNvdXJjZS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCQkJICBpZiAoZXh0ICE9IG51bGwgJiYgZXh0LmVxdWFsc0lnbm9yZUNhc2UoV1NETF9FWFQpKQotCQkJCQl3c2RsVVJMID0gUExBVEZPUk1fUkVTICsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlpZiAod3NkbFVSTCAhPSBudWxsKQotCQkJCXsKLQkJCQkgIFdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCQkJCSAgd3NJbmZvLnNldFdzZGxVUkwod3NkbFVSTCk7ICAgICAgICAgICAKLQkJCQkgIHdzZGwuYWRkKHdzSW5mbyk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKioKLQkJICogUmV0dXJucyBhIHZlY3RvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCQkgKiBAcmV0dXJuIHZlY3RvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzCi0JCSAqLwotCQlwdWJsaWMgVmVjdG9yIGdldFdTREwoKQotCQl7Ci0JCQlyZXR1cm4gd3NkbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NpbC9BZGRXU0RMVG9XU0lMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2lsL0FkZFdTRExUb1dTSUxDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMDhjYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2lsL0FkZFdTRExUb1dTSUxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2lsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuSW5zcGVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLkltcGxlbWVudGVkQmluZGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5SZWZlcmVuY2VkU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwueG1sLlhNTFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5VUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1NJTE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFdTRExUb1dTSUxDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX1dTSUwgPSAiLXdzaWwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdfV1NETCA9ICItd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR19SRVNPTFZFX1dTREwgPSAiLXJlc29sdmV3c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSA9ICItaHR0cHVzZXJuYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCA9ICItaHR0cHBhc3N3b3JkIjsKLSAgcHJpdmF0ZSBXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIgd3d3QXV0aEhhbmRsZXJfOwotICBwcml2YXRlIFN0cmluZ1tdIGFyZ3NfOwotICBwcml2YXRlIFN0cmluZyB3c2lsXzsKLSAgcHJpdmF0ZSBBcnJheUxpc3Qgd3NkbHNfOwotICBwcml2YXRlIGJvb2xlYW4gcmVzb2x2ZVdTRExfOwotICBwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfOwotICBwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfOwotCi0gIHB1YmxpYyBBZGRXU0RMVG9XU0lMQ29tbWFuZCgpCi0gIHsKLSAgICB3d3dBdXRoSGFuZGxlcl8gPSBudWxsOwotICAgIGFyZ3NfID0gbmV3IFN0cmluZ1swXTsKLSAgICBjbGVhclBhcnNlZEFyZ3MoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjbGVhclBhcnNlZEFyZ3MoKQotICB7Ci0gICAgd3NpbF8gPSBudWxsOwotICAgIGlmICh3c2Rsc18gPT0gbnVsbCkKLSAgICAgIHdzZGxzXyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBlbHNlCi0gICAgICB3c2Rsc18uY2xlYXIoKTsKLSAgICByZXNvbHZlV1NETF8gPSBmYWxzZTsKLSAgICBodHRwVXNlcm5hbWVfID0gbnVsbDsKLSAgICBodHRwUGFzc3dvcmRfID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlcyB0aGUgQ29tbWFuZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbnZpcm9ubWVudAotICAgKiAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHJldHVybiBBIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0IGluZGljYXRpbmcgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUKLSAgICogICAgICAgICA8Y29kZT5leGVjdXRlPC9jb2RlPiBtZXRob2Qgd2FzIHN1Y2Nlc3NmdWwuIEEgdmFsdWQgb2YgPGNvZGU+bnVsbDwvY29kZT4sCi0gICAqICAgICAgICAgb3IgYSBTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5TdGF0dXMuRVJST1I8L2NvZGU+Ci0gICAqICAgICAgICAgc2lnbmlmaWVzIHN1Y2Nlc3MuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgSVVSSUZhY3RvcnkgdXJpRmFjdG9yeSA9IGVudmlyb25tZW50LmdldFVSSUZhY3RvcnkoKTsKLSAgICAvLyBQYXJzZSBhcmd1bWVudHMKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwYXJzZUFyZ3VtZW50cygpOwotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbiBpYWUpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lMTEVHQUxfQVJHVU1FTlRTLCBpYWUpOwotICAgIH0KLSAgICBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTLCBlKTsKLSAgICB9Ci0gICAgLy8gQ3JlYXRlIG5ldyBXU0lMIGRvY3VtZW50Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2N1bWVudCA9IG51bGw7Ci0gICAgVVJMIHdzaWxVUkwgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHdzaWxEb2N1bWVudCA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgd3NpbFVSTCA9IG5ldyBVUkwod3NpbF8pOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSSSwgbXVybGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoV1NJTEV4Y2VwdGlvbiB3c2lsZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCB3c2lsZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIC8vIFJlYWQgV1NJTAotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gdXJpRmFjdG9yeS5uZXdVUkkod3NpbFVSTCkuZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2lsRG9jdW1lbnQucmVhZChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLSAgICAgICAgaXMuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVSSUV4Y2VwdGlvbiB1cmllKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHVyaWUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIGlvZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHdzaWxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgLy8gaW50ZXJuYWxFeGVjdXRlCi0gICAgU3RyaW5nIGh0dHBVc2VybmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGh0dHBQYXNzd29yZCA9IG51bGw7Ci0gICAgaWYgKHdzZGxzXy5zaXplKCkgPT0gMSAmJiBodHRwVXNlcm5hbWVfICE9IG51bGwgJiYgaHR0cFBhc3N3b3JkXyAhPSBudWxsKQotICAgIHsKLSAgICAgIGh0dHBVc2VybmFtZSA9IGh0dHBVc2VybmFtZV87Ci0gICAgICBodHRwUGFzc3dvcmQgPSBodHRwUGFzc3dvcmRfOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbHNfLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU3RyaW5nIHdzZGwgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzID0gaW50ZXJuYWxFeGVjdXRlKGVudmlyb25tZW50LCB3c2lsRG9jdW1lbnQsIHBsYXRmb3JtMkZpbGUodXJpRmFjdG9yeSwgd3NpbF8pLCB3c2RsLCBodHRwVXNlcm5hbWUsIGh0dHBQYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUpCi0gICAgICB7Ci0gICAgICAgIGlmICh3d3dBdXRoSGFuZGxlcl8gIT0gbnVsbCAmJiBodHRwVXNlcm5hbWUgPT0gbnVsbCAmJiBodHRwUGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHd3d0F1dGhIYW5kbGVyXy5oYW5kbGVXV1dBdXRoZW50aWNhdGlvbih3d3dhZSk7Ci0gICAgICAgICAgU3RyaW5nIGhhbmRsZXJVc2VybmFtZSA9IHd3d0F1dGhIYW5kbGVyXy5nZXRVc2VybmFtZSgpOwotICAgICAgICAgIFN0cmluZyBoYW5kbGVyUGFzc3dvcmQgPSB3d3dBdXRoSGFuZGxlcl8uZ2V0UGFzc3dvcmQoKTsKLSAgICAgICAgICBpZiAoaGFuZGxlclVzZXJuYW1lICE9IG51bGwgJiYgaGFuZGxlclBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0YXR1cyA9IGludGVybmFsRXhlY3V0ZShlbnZpcm9ubWVudCwgd3NpbERvY3VtZW50LCBwbGF0Zm9ybTJGaWxlKHVyaUZhY3RvcnksIHdzaWxfKSwgd3NkbCwgaGFuZGxlclVzZXJuYW1lLCBoYW5kbGVyUGFzc3dvcmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSVN0YXR1cyB3d3dhZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMLCB3d3dhZTIuZ2V0SU9FeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcih3d3dhZVN0YXR1cyk7Ci0gICAgICAgICAgICAgIHJldHVybiB3d3dhZVN0YXR1czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSVN0YXR1cyBzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5SRVNPTFZBQkxFX1dTREwsIHd3d2FlLmdldElPRXhjZXB0aW9uKCkpOwotICAgICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzKTsKLSAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpICE9IFN0YXR1cy5PSykKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgLy8gV3JpdGUgV1NJTAotICAgIHRyeQotICAgIHsKLSAgICAgIFhNTFdyaXRlciB4bWxXcml0ZXIgPSBuZXcgWE1MV3JpdGVyKCk7Ci0gICAgICBPdXRwdXRTdHJlYW0gb3MgPSB1cmlGYWN0b3J5Lm5ld1VSSSh3c2lsVVJMKS5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAgIGlmIChvcyAhPSBudWxsKQotICAgICAgICB4bWxXcml0ZXIud3JpdGVEb2N1bWVudCh3c2lsRG9jdW1lbnQsIG9zKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0gICAgICBvcy5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoVVJJRXhjZXB0aW9uIHVyaWUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9XUklURV9XU0lMLCB1cmllKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTSUwsIGlvZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NJTCwgd3NpbGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBpbnRlcm5hbEV4ZWN1dGUoSUVudmlyb25tZW50IGVudmlyb25tZW50LCBXU0lMRG9jdW1lbnQgd3NpbERvY3VtZW50LCBTdHJpbmcgd3NpbCwgU3RyaW5nIHdzZGwsIFN0cmluZyBodHRwVXNlcm5hbWUsIFN0cmluZyBodHRwUGFzc3dvcmQpIHRocm93cyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBBcnJheUxpc3Qgd3NkbFNlcnZpY2UgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IHdzZGxCaW5kaW5nID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChyZXNvbHZlV1NETF8pCi0gICAgewotICAgICAgLy8gUGFyc2UgV1NETAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZmluaXRpb24gPSBwYXJzZVdTREwod3NkbCwgd3NkbFNlcnZpY2UsIHdzZGxCaW5kaW5nLCBodHRwVXNlcm5hbWUsIGh0dHBQYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkksIG11cmxlKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMLCBpb2UpOwotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgcGNlKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIHNheGUpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfTUFMRk9STUVEX1dTREwsIHNheGUpOwotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQWRkIFdTREwgdG8gV1NJTAotICAgIHRyeQotICAgIHsKLSAgICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2N1bWVudC5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSB3c2lsRG9jdW1lbnQuY3JlYXRlU2VydmljZSgpOwotICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBkb2N1bWVudGF0aW9uID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgICBBYnN0cmFjdCBzZXJ2aWNlQWJzdHJhY3QgPSB3c2lsRG9jdW1lbnQuY3JlYXRlQWJzdHJhY3QoKTsKLSAgICAgICAgc2VydmljZUFic3RyYWN0LnNldFRleHQoRWxlbWVudDJTdHJpbmcoZG9jdW1lbnRhdGlvbikpOwotICAgICAgICBzZXJ2aWNlLmFkZEFic3RyYWN0KHNlcnZpY2VBYnN0cmFjdCk7Ci0gICAgICB9Ci0gICAgICBEZXNjcmlwdGlvbiBkZXNjID0gd3NpbERvY3VtZW50LmNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0gICAgICBkZXNjLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoV1NETENvbnN0YW50cy5OU19VUklfV1NETCk7Ci0gICAgICBkZXNjLnNldExvY2F0aW9uKGdldFJlbGF0aXZlVVJJKHdzaWwsIHdzZGwpKTsKLSAgICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0QnVpbGRlciA9IHdzaWxEb2N1bWVudC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldEJ1aWxkZXIoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMKTsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwgfHwgZW5kcG9pbnRQcmVzZW50KGRlZmluaXRpb24pKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbFNlcnZpY2UuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSAoUmVmZXJlbmNlKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX1JFRkVSRU5DRSkpOwotICAgICAgICAgIHJlZmVyZW5jZS5zZXRFbmRwb2ludFByZXNlbnQobmV3IEJvb2xlYW4odHJ1ZSkpOwotICAgICAgICAgIFJlZmVyZW5jZWRTZXJ2aWNlIHJlZlNlcnZpY2UgPSAoUmVmZXJlbmNlZFNlcnZpY2UpIGV4dEJ1aWxkZXIuY3JlYXRlRWxlbWVudChuZXcgUU5hbWUoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMLCBXU0RMQ29uc3RhbnRzLkVMRU1fUkVGX1NFUlZJQ0UpKTsKLSAgICAgICAgICByZWZTZXJ2aWNlLnNldFJlZmVyZW5jZWRTZXJ2aWNlTmFtZSgoUU5hbWUpIGl0Lm5leHQoKSk7Ci0gICAgICAgICAgcmVmZXJlbmNlLnNldFJlZmVyZW5jZWRTZXJ2aWNlKHJlZlNlcnZpY2UpOwotICAgICAgICAgIGRlc2Muc2V0RXh0ZW5zaW9uRWxlbWVudChyZWZlcmVuY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSAoUmVmZXJlbmNlKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX1JFRkVSRU5DRSkpOwotICAgICAgICByZWZlcmVuY2Uuc2V0RW5kcG9pbnRQcmVzZW50KG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2RsQmluZGluZy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgSW1wbGVtZW50ZWRCaW5kaW5nIGJpbmRpbmcgPSAoSW1wbGVtZW50ZWRCaW5kaW5nKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX0lNUExfQklORElORykpOwotICAgICAgICAgIGJpbmRpbmcuc2V0QmluZGluZ05hbWUoKFFOYW1lKSBpdC5uZXh0KCkpOwotICAgICAgICAgIHJlZmVyZW5jZS5hZGRJbXBsZW1lbnRlZEJpbmRpbmcoYmluZGluZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHNlcnZpY2UuYWRkRGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgICBpbnNwZWN0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHdzaWxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHQpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmLCBhbmQgb25seSBpZiwgdGhlIENvbW1hbmQncyA8Y29kZT51bmRvPC9jb2RlPgotICAgKiBtZXRob2QgaXMgc3VwcG9ydGVkLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBDb21tYW5kIHN1cHBvcnRzIGJlaW5nIHVuZG9uZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kb2FibGUoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFVuZG9lcyB0aGUgQ29tbWFuZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbnZpcm9ubWVudAotICAgKiAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHJldHVybiBBIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0IGluZGljYXRpbmcgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUKLSAgICogICAgICAgICA8Y29kZT51bmRvPC9jb2RlPiBtZXRob2Qgd2FzIHN1Y2Nlc3NmdWwuIEEgdmFsdWQgb2YgPGNvZGU+bnVsbDwvY29kZT4sCi0gICAqICAgICAgICAgb3IgYSBTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5TdGF0dXMuRVJST1I8L2NvZGU+Ci0gICAqICAgICAgICAgc2lnbmlmaWVzIHN1Y2Nlc3MuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkKLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIHBhcnNlV1NETChTdHJpbmcgd3NkbCwgQXJyYXlMaXN0IHdzZGxTZXJ2aWNlLCBBcnJheUxpc3Qgd3NkbEJpbmRpbmcsIFN0cmluZyBodHRwVXNlcm5hbWUsIFN0cmluZyBodHRwUGFzc3dvcmQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlc1BhcnNlciB3c1BhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlcih3c2RsKTsKLSAgICBpZiAoaHR0cFVzZXJuYW1lICE9IG51bGwgJiYgaHR0cFBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgd3NQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKGh0dHBVc2VybmFtZSk7Ci0gICAgICB3c1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoaHR0cFBhc3N3b3JkKTsKLSAgICB9Ci0gICAgd3NQYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTk9ORSk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbCk7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VydmljZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgd3NkbFNlcnZpY2UuYWRkKHBhcnNlUU5hbWUoKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIGl0Lm5leHQoKSkpOwotICAgICAgTWFwIGJpbmRpbmdzID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHdzZGxCaW5kaW5nLmFkZChwYXJzZVFOYW1lKChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSBpdC5uZXh0KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZW5kcG9pbnRQcmVzZW50KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiAoZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnNpemUoKSA+IDApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEFyZ3VtZW50cygpCi0gIHsKLSAgICByZXR1cm4gYXJnc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBcmd1bWVudHMoU3RyaW5nW10gYXJncykKLSAgewotICAgIGFyZ3NfID0gYXJnczsKLSAgfQotCi0gIHB1YmxpYyBXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIgZ2V0V1dXQXV0aGVudGljYXRpb25IYW5kbGVyKCkKLSAgewotICAgIHJldHVybiB3d3dBdXRoSGFuZGxlcl87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIoV1dXQXV0aGVudGljYXRpb25IYW5kbGVyIHd3d0F1dGhIYW5kbGVyKQotICB7Ci0gICAgd3d3QXV0aEhhbmRsZXJfID0gd3d3QXV0aEhhbmRsZXI7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcGFyc2VBcmd1bWVudHMoKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbgotICB7Ci0gICAgY2xlYXJQYXJzZWRBcmdzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzXy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoQVJHX1dTSUwuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgd3NpbF8gPSBhcmdzX1srK2ldOwotICAgICAgZWxzZSBpZiAoQVJHX1dTREwuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgd3NkbHNfLmFkZChhcmdzX1srK2ldKTsKLSAgICAgIGVsc2UgaWYgKEFSR19SRVNPTFZFX1dTREwuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgcmVzb2x2ZVdTRExfID0gdHJ1ZTsKLSAgICAgIGVsc2UgaWYgKEFSR19IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgaHR0cFVzZXJuYW1lXyA9IGFyZ3NfWysraV07Ci0gICAgICBlbHNlIGlmIChBUkdfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JELmVxdWFscyhhcmdzX1tpXSkpCi0gICAgICAgIGh0dHBQYXNzd29yZF8gPSBhcmdzX1srK2ldOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbihhcmdzX1tpXSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBRTmFtZSBwYXJzZVFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcW5hbWUpCi0gIHsKLSAgICByZXR1cm4gbmV3IFFOYW1lKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBFbGVtZW50MlN0cmluZyhFbGVtZW50IGUpIHRocm93cyBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVswXTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgIHsKLSAgICAgIERPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwotICAgICAgVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0gICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICAgIHNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChiYW9zKSk7Ci0gICAgICBiYW9zLmNsb3NlKCk7Ci0gICAgICBiID0gYmFvcy50b0J5dGVBcnJheSgpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0cmluZyhiKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIHBsYXRmb3JtMkZpbGUoSVVSSUZhY3RvcnkgdXJpRmFjdG9yeSwgU3RyaW5nIHVyaSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiB1cmlGYWN0b3J5Lm5ld1VSSSh1cmkpLmFzRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIHJldHVybiB1cmk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGNoYXIgRldEX1NMQVNIID0gJy8nOwotICBwcml2YXRlIGZpbmFsIGNoYXIgQldEX1NMQVNIID0gJ1xcJzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGFyZW50RGlyID0gIi4uLyI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVsYXRpdmVVUkkoU3RyaW5nIGJhc2VVUkksIFN0cmluZyB0YXJnZXRVUkkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgYmFzZVVSSUNvcHkgPSBiYXNlVVJJLnJlcGxhY2UoQldEX1NMQVNILCBGV0RfU0xBU0gpOwotICAgICAgU3RyaW5nIHRhcmdldFVSSUNvcHkgPSB0YXJnZXRVUkkucmVwbGFjZShCV0RfU0xBU0gsIEZXRF9TTEFTSCk7Ci0gICAgICBpbnQgbWF0Y2hpbmdJbmRleCA9IC0xOwotICAgICAgaW50IGluZGV4ID0gdGFyZ2V0VVJJQ29weS5pbmRleE9mKEZXRF9TTEFTSCk7Ci0gICAgICB3aGlsZSAoaW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmIChiYXNlVVJJQ29weS5zdGFydHNXaXRoKHRhcmdldFVSSUNvcHkuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkpKQotICAgICAgICB7Ci0gICAgICAgICAgbWF0Y2hpbmdJbmRleCA9IGluZGV4OwotICAgICAgICAgIGluZGV4ID0gdGFyZ2V0VVJJQ29weS5pbmRleE9mKEZXRF9TTEFTSCwgaW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAobWF0Y2hpbmdJbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaW50IHNsYXNoQ291bnQgPSAtMTsKLSAgICAgICAgaW50IGZyb21JbmRleCA9IG1hdGNoaW5nSW5kZXg7Ci0gICAgICAgIHdoaWxlIChmcm9tSW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBzbGFzaENvdW50Kys7Ci0gICAgICAgICAgZnJvbUluZGV4ID0gYmFzZVVSSUNvcHkuaW5kZXhPZihGV0RfU0xBU0gsIGZyb21JbmRleCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZ0J1ZmZlciByZWxhdGl2ZVVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzbGFzaENvdW50OyBpKyspCi0gICAgICAgICAgcmVsYXRpdmVVUkkuYXBwZW5kKHBhcmVudERpcik7Ci0gICAgICAgIHJlbGF0aXZlVVJJLmFwcGVuZCh0YXJnZXRVUkkuc3Vic3RyaW5nKG1hdGNoaW5nSW5kZXggKyAxLCB0YXJnZXRVUkkubGVuZ3RoKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlbGF0aXZlVVJJLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiB0YXJnZXRVUkk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUxNjhiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZSBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlIHsKLQkKLQlwcml2YXRlIFdlYlNlcnZpY2VJbmZvIGluZm87Ci0KLQlwdWJsaWMgQWJzdHJhY3RXZWJTZXJ2aWNlKFdlYlNlcnZpY2VJbmZvIGluZm8pIHsKLQkJdGhpcy5pbmZvID0gaW5mbzsKLQl9Ci0JCi0KLQlwdWJsaWMgV2ViU2VydmljZUluZm8gZ2V0V2ViU2VydmljZUluZm8oKSB7Ci0JCXJldHVybiBpbmZvOwotCX0KLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkJCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjYTU3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZUNsaWVudCBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlQ2xpZW50IHsKLQkKLQlwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm87Ci0KLQlwdWJsaWMgQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50KFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm8pIHsKLQkJdGhpcy5pbmZvID0gaW5mbzsKLQl9Ci0JCi0KLQlwdWJsaWMgV2ViU2VydmljZUNsaWVudEluZm8gZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKSB7Ci0JCXJldHVybiBpbmZvOwotCX0KLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkJCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OTAzM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUgaW1wbGVtZW50cyBJV2ViU2VydmljZVJ1bnRpbWUgewotCi0JcHVibGljIGFic3RyYWN0IElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIGFic3RyYWN0IElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhbm5vdW5jZShJV2ViU2VydmljZSB3ZWJTZXJ2aWNlKQotCXsKLQkJLy9UT0RPIHByb3ZpZGUgYSBib2lsZXItcGxhdGUgYW5ub3VuY2UgaW1wbGVtZW50YXRpb24uCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwY2U1MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDcgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMTk4NDM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciBpbXBsZW1lbnRzCi0JCUlXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgewotCi0JcHVibGljIElTdGF0dXMgY2hlY2tSdW50aW1lQ29tcGF0aWJpbGl0eShTdHJpbmcgc2VydmVyVHlwZUlkLCBTdHJpbmcgc2VydmVySW5zdGFuY2VJZCwKLQkJCVN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIHByb2plY3RUeXBlSWQsIFN0cmluZyBlYXJQcm9qZWN0TmFtZSkgewotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgY2hlY2tTZXJ2aWNlQ2xpZW50Q29tcGF0aWJpbGl0eShib29sZWFuIHNlcnZpY2VOZWVkRUFSLAotCQkJU3RyaW5nIHNlcnZpY2VFQVJOYW1lLCBTdHJpbmcgc2VydmljZVByb2plY3ROYW1lLAotCQkJYm9vbGVhbiBjbGllbnROZWVkRUFSLCBTdHJpbmcgY2xpZW50RUFSTmFtZSwKLQkJCVN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSkgewotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTM3MThmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElDb250ZXh0IHsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZSgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldENoZWNrT3V0RmlsZXMoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnQoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95KCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldEluc3RhbGwoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRPdmVyV3JpdGVGaWxlcygpOwotCQotCXB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2goKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRSdW4oKTsKLQkKLQlwdWJsaWMgV2ViU2VydmljZVNjZW5hcmlvIGdldFNjZW5hcmlvKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0VGVzdCgpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSU1lcmdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lNZXJnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkYzcyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSU1lcmdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi0vKgotICogVGhlIElNZXJnZXIgaW50ZXJmYWNlIGhhbmRsZXMgbWVyZ2luZyBvZiB0aGUgYXJyYXkgb2YgSUZpbGVzLiAgVXNlcnMgb2YgdGhlIElNZXJnZXIgaW50ZXJmYWNlIHNob3VsZDoKLSAqIDEuIENhbGwgbG9hZCgpIHdpdGggdGhlIGFycmF5IG9mIElGaWxlcyB0byBsb2FkIGFuZCBzdG9yZWQgaW4gbWVyZ2UgbW9kZWxzCi0gKiAyLiBDYWxsIG1lcmdlKCkgdG8gbWVyZ2UgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIElGaWxlcyB3aXRoIHRoZSBtZXJnZWQgbW9kZWxzIHRoYXQgaGFkIGJlZW4gc3RvcmVkIAotICogcHJldmlvdXNseSAoYXQgdGhlIHRpbWUgbG9hZCB3YXMgY2FsbGVkKS4KLSAqIAotICogVGhpcyBjbGFzcyBpcyBub3QgbWVhbnQgdG8gYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkuICBJbXBsZW1lbnRlcnMgc2hvdWxkIHN1YmNsYXNzIHRoZSBNZXJnZXIgY2xhc3MgaW5zdGVhZC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJTWVyZ2VyIHsgCi0JCi0JLyoqCi0JICogTG9hZCB0aGUgdXJpcyBzcGVjaWZpZWQgc28gdGhhdCBhIG1lcmdlIGNhbiBiZSBkb25lIGxhdGVyIG9uCi0JICogQHBhcmFtIHVybHMKLQkgKiBAcmV0dXJuIElTdGF0dXMKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBsb2FkKElGaWxlW10gZmlsZXMpOwotCQotCS8qKgotCSAqIE1lcmdlIHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlIGFycmF5IG9mIElGaWxlcyB3aXRoIHdoYXQgaGFkIGJlZW4gc3RvcmVkIHdoZW4gbG9hZCB3YXMgZmlyc3QgY2FsbGVkIGFuZCB3cml0ZSAKLQkgKiB0aGUgbWVyZ2VkIGNvbnRlbnQgYmFjayBpbiB0aGUgZmlsZXMuIAotCSAqIEBwYXJhbSBtb25pdG9yIFByb2dyZXNzIG1vbml0b3IKLQkgKiBAcGFyYW0gc3RhdHVzSGFuZGxlciBUaGUgc3RhdHVzIGhhbmRsZXIgdXNlZCB0byBoYW5kbGUgdGhlIHdyaXRpbmcgb2YgdGhlIG1lcmdlZCBjb250ZW50Ci0JICogQHJldHVybiBJU3RhdHVzCi0JICovCi0JcHVibGljIElTdGF0dXMgbWVyZ2UoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JU2VsZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVNlbGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODkzYjVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JU2VsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNlbGVjdGlvbiB7Ci0JCi0JT2JqZWN0W10gZ2V0U2VsZWN0aW9uKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyM2U2MWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZSB7Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUluZm8gZ2V0V2ViU2VydmljZUluZm8oKTsKLQkKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlQ2xpZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMyMWVjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VDbGllbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VDbGllbnQgewotCQotCS8qKgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBnZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpOwotCQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7CQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VQdWJsaXNoZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVB1Ymxpc2hlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmRjNWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVB1Ymxpc2hlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZVB1Ymxpc2hlciB7Ci0JCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBwdWJsaXNoKElFbnZpcm9ubWVudCBlbnYsIElXZWJTZXJ2aWNlIHdzKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjhjMmU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci0KLQotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZVJ1bnRpbWUgewotCQotCS8qKgotCSAqLwotCXB1YmxpYyBJV2ViU2VydmljZSBnZXRXZWJTZXJ2aWNlKFdlYlNlcnZpY2VJbmZvIGluZm8pOwotCS8qKgotCSAqLwotCXB1YmxpYyBJV2ViU2VydmljZUNsaWVudCBnZXRXZWJTZXJ2aWNlQ2xpZW50KFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm8pOwotCS8qKgotCSAqLwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgYW5ub3VuY2UoSVdlYlNlcnZpY2Ugd2ViU2VydmljZSk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2ZiZjgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDcgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMTk4NDM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKgotICogVGhlIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgaW50ZXJmYWNlIGFsbG93IHRoZSBleHRlbmRlciB0byBoYXZlIGEgd2F5IHRvIGNoZWNrIHRoZSAKLSAqIHRoZSBXZWIgc2VydmljZSBydW50aW1lJ3MgY29tcGF0aWJpbGl0eSB3aXRoIHNlcnZlciB0eXBlLCBwcm9qZWN0LCBwcm9qZWN0IHR5cGUgYW5kIEVBUi4KLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHByb3ZpZGVkIGFzIHRoZSBydW50aW1lQ2hlY2tlciBhdHRyaWJ1dGUgaW4gdGhlIAotICogIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyIgYW5kCi0gKiAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcyIgZXh0ZW5zaW9uIHBvaW50cy4KLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgewotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlclR5cGVJZCBzZXJ2ZXIgdHlwZSBJRAotCSAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5hY2VJZCBzZXJ2ZXIgaW5zdGFuY2UgSUQKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUgcHJvamVjdCBuYW1lIAotCSAqIEBwYXJhbSBwcm9qZWN0VHlwZUlkIHByb2plY3QgdGVtcGxhdGUgSUQsIHNldCB0byAiIiBpZiB0aGUgcHJvamVjdCBzcGVjaWZpZWQgYnkgcHJvamVjdE5hbWUgYWxyZWFkeSBleGlzdCAKLQkgKiBAcGFyYW0gZWFyUHJvamVjdE5hbWUgRUFSIHByb2plY3QgbmFtZQotCSAqIEByZXR1cm4gSVN0YXR1cwotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGNoZWNrUnVudGltZUNvbXBhdGliaWxpdHkoU3RyaW5nIHNlcnZlclR5cGVJZCwgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQsIAotCQkJU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgcHJvamVjdFR5cGVJZCwgU3RyaW5nIGVhclByb2plY3ROYW1lKTsKLQkKLQkvKioKLQkgKiBAcGFyYW0gc2VydmljZU5lZWRFQVIKLQkgKiBAcGFyYW0gc2VydmljZUVBUk5hbWUKLQkgKiBAcGFyYW0gc2VydmljZVByb2plY3ROYW1lCi0JICogQHBhcmFtIGNsaWVudE5lZWRFQVIKLQkgKiBAcGFyYW0gY2xpZW50RUFSTmFtZQotCSAqIEBwYXJhbSBjbGllbnRQcm9qZWN0TmFtZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBjaGVja1NlcnZpY2VDbGllbnRDb21wYXRpYmlsaXR5KGJvb2xlYW4gc2VydmljZU5lZWRFQVIsIFN0cmluZyBzZXJ2aWNlRUFSTmFtZSwgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSwgCi0JCQlib29sZWFuIGNsaWVudE5lZWRFQVIsIFN0cmluZyBjbGllbnRFQVJOYW1lLCBTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUpOwotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlVGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3NDhhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VUZXN0ZXIgewotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdlbmVyYXRlKFRlc3RJbmZvIHRlc3RJbmZvKTsKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBsYXVuY2goVGVzdEluZm8gdGVzdEluZm8pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk1N2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9NZXJnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi0vKgotICogTWVyZ2VyIGlzIHRoZSBBYnN0cmFjdCBjbGFzcyB0aGF0IHNob3VsZCBiZSBzdWJjbGFzc2VkLiAKLSAqLwotcHVibGljIGNsYXNzIE1lcmdlciBpbXBsZW1lbnRzIElNZXJnZXIgewotCi0JcHVibGljIElTdGF0dXMgbG9hZChJRmlsZVtdIGZpbGVzKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIG1lcmdlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlcikgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvU2ltcGxlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg0YjRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHQgewotCi0JYm9vbGVhbiBkZXZlbG9wOwotCWJvb2xlYW4gYXNzZW1ibGU7Ci0JYm9vbGVhbiBkZXBsb3k7Ci0JYm9vbGVhbiBpbnN0YWxsOwotCWJvb2xlYW4gcnVuOwotCWJvb2xlYW4gY2xpZW50OwotCWJvb2xlYW4gdGVzdDsKLQlib29sZWFuIHB1Ymxpc2g7Ci0JCi0JV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvOwotCQotCWJvb2xlYW4gb3ZlcndyaXRlRmlsZXM7Ci0JYm9vbGVhbiBjcmVhdGVGb2xkZXJzOwotCWJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQkKLQkKLQkKLQkKLQlwdWJsaWMgU2ltcGxlQ29udGV4dCgpCi0JewotCQlzdXBlcigpOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLQlwdWJsaWMgU2ltcGxlQ29udGV4dChib29sZWFuIGRldmVsb3AsIGJvb2xlYW4gYXNzZW1ibGUsIGJvb2xlYW4gZGVwbG95LCBib29sZWFuIGluc3RhbGwsIGJvb2xlYW4gcnVuLCBib29sZWFuIGNsaWVudCwgYm9vbGVhbiB0ZXN0LCBib29sZWFuIHB1Ymxpc2gsIFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbywgYm9vbGVhbiBvdmVyd3JpdGVGaWxlcywgYm9vbGVhbiBmb2xkZXJzLCBib29sZWFuIGNoZWNrT3V0RmlsZXMpIHsKLQkJc3VwZXIoKTsJCQotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCQl0aGlzLmFzc2VtYmxlID0gYXNzZW1ibGU7Ci0JCXRoaXMuZGVwbG95ID0gZGVwbG95OwotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCQl0aGlzLnJ1biA9IHJ1bjsKLQkJdGhpcy5jbGllbnQgPSBjbGllbnQ7Ci0JCXRoaXMudGVzdCA9IHRlc3Q7Ci0JCXRoaXMucHVibGlzaCA9IHB1Ymxpc2g7Ci0JCXRoaXMuc2NlbmFyaW8gPSBzY2VuYXJpbzsKLQkJdGhpcy5vdmVyd3JpdGVGaWxlcyA9IG92ZXJ3cml0ZUZpbGVzOwotCQl0aGlzLmNyZWF0ZUZvbGRlcnMgPSBmb2xkZXJzOwotCQl0aGlzLmNoZWNrT3V0RmlsZXMgPSBjaGVja091dEZpbGVzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZShib29sZWFuIGFzc2VtYmxlKSB7Ci0JCXRoaXMuYXNzZW1ibGUgPSBhc3NlbWJsZTsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0Q2hlY2tPdXRGaWxlcygpIHsKLQkJcmV0dXJuIGNoZWNrT3V0RmlsZXM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldENoZWNrT3V0RmlsZXMoYm9vbGVhbiBjaGVja091dEZpbGVzKSB7Ci0JCXRoaXMuY2hlY2tPdXRGaWxlcyA9IGNoZWNrT3V0RmlsZXM7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudCgpIHsKLQkJcmV0dXJuIGNsaWVudDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q2xpZW50KGJvb2xlYW4gY2xpZW50KSB7Ci0JCXRoaXMuY2xpZW50ID0gY2xpZW50OwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzKCkgewotCQlyZXR1cm4gY3JlYXRlRm9sZGVyczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVycyhib29sZWFuIGNyZWF0ZUZvbGRlcnMpIHsKLQkJdGhpcy5jcmVhdGVGb2xkZXJzID0gY3JlYXRlRm9sZGVyczsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95KCkgewotCQlyZXR1cm4gZGVwbG95OwotCX0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3koYm9vbGVhbiBkZXBsb3kpIHsKLQkJdGhpcy5kZXBsb3kgPSBkZXBsb3k7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3AoKSB7Ci0JCXJldHVybiBkZXZlbG9wOwotCX0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wKGJvb2xlYW4gZGV2ZWxvcCkgewotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsKCkgewotCQlyZXR1cm4gaW5zdGFsbDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW5zdGFsbChib29sZWFuIGluc3RhbGwpIHsKLQkJdGhpcy5pbnN0YWxsID0gaW5zdGFsbDsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0T3ZlcldyaXRlRmlsZXMoKSB7Ci0JCXJldHVybiBvdmVyd3JpdGVGaWxlczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0T3ZlcldyaXRlRmlsZXMoYm9vbGVhbiBvdmVyd3JpdGVGaWxlcykgewotCQl0aGlzLm92ZXJ3cml0ZUZpbGVzID0gb3ZlcndyaXRlRmlsZXM7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2goKSB7Ci0JCXJldHVybiBwdWJsaXNoOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRQdWJsaXNoKGJvb2xlYW4gcHVibGlzaCkgewotCQl0aGlzLnB1Ymxpc2ggPSBwdWJsaXNoOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRSdW4oKSB7Ci0JCXJldHVybiBydW47Ci0JfQotCXB1YmxpYyB2b2lkIHNldFJ1bihib29sZWFuIHJ1bikgewotCQl0aGlzLnJ1biA9IHJ1bjsKLQl9Ci0JcHVibGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsKLQkJcmV0dXJuIHNjZW5hcmlvOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTY2VuYXJpbyhXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8pIHsKLQkJdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0KCkgewotCQlyZXR1cm4gdGVzdDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdChib29sZWFuIHRlc3QpIHsKLQkJdGhpcy50ZXN0ID0gdGVzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvVGVzdEluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGY4ZDA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotLyoqCi0gKiBUaGlzIGhvbGRzIGluZm8gdGhhdCBjb21lcyBmcm9tIHVzZXIgaW5wdXQgb3Igc29tZSBjYWxjdWxhdGlvbnMgdGhhdCAKLSAqIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCB0byBhbnkgdGVzdCBleHRlbmRlcnMKLSAqLwotCi1wdWJsaWMgY2xhc3MgVGVzdEluZm8gewotICBwcml2YXRlIFN0cmluZyBqc3BGb2xkZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRpb25Qcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50TW9kdWxlOwotICBwcml2YXRlIGJvb2xlYW4gY2xpZW50TmVlZEVBUjsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RUFSUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RUFSTW9kdWxlOwotICBwcml2YXRlIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRTZXJ2ZXJUeXBlSUQ7Ci0gIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0gIHByaXZhdGUgSVNlcnZlciBjbGllbnRFeGlzdGluZ1NlcnZlcjsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFNlcnZpY2VVUkw7Ci0gIHByaXZhdGUgYm9vbGVhbiBleHRlcm5hbEJyb3dzZXI7ICAKLSAgcHJpdmF0ZSBib29sZWFuIHJ1blRlc3RDbGllbnQ7Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgZm9sZGVyIHRoZSB1c2VyIGhhcyBjaG9zZW4gdG8gZ2VuZXJhdGUgYW55IGpzcHMgCi0gICogQHBhcmFtIGpzcEZvbGRlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoU3RyaW5nIGpzcEZvbGRlcil7Ci0JdGhpcy5qc3BGb2xkZXIgPSBqc3BGb2xkZXI7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKc3BGb2xkZXIoKXsKLSAgICByZXR1cm4ganNwRm9sZGVyOyAgCi0gIH0KLSAgCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIHByb2plY3QgdGhlIHVzZXIgaGFzIGNob3NlbiB0byBnZW5lcmF0ZSBhcnRpZmFjdHMgdG8gIAotICAqIEBwYXJhbSBnZW5lcmF0aW9uUHJvamVjdAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0aW9uUHJvamVjdChTdHJpbmcgZ2VuZXJhdGlvblByb2plY3QpewotICAgIHRoaXMuZ2VuZXJhdGlvblByb2plY3QgPSBnZW5lcmF0aW9uUHJvamVjdDsJICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRHZW5lcmF0aW9uUHJvamVjdCgpewotICAgIHJldHVybiBnZW5lcmF0aW9uUHJvamVjdDsJICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIHByb3h5IGJlYW4gd2FzIGdlbmVyYXRlZCBieSB1cyB0aGlzIGlzIHRoZSBuYW1lIG9mIGl0ICAKLSAgKiBAcGFyYW0gcHJveHlCZWFuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKXsKLSAgICB0aGlzLnByb3h5QmVhbiA9IHByb3h5QmVhbjsJICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm94eUJlYW4oKXsKLSAgICByZXR1cm4gcHJveHlCZWFuOwkgIAotICB9Ci0JICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgU2V0RW5kcG9pbnRNZXRob2QgICAKLSAgKiBAcGFyYW0gCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCl7Ci0JdGhpcy5zZXRFbmRwb2ludE1ldGhvZCA9IHNldEVuZHBvaW50TWV0aG9kOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0RW5kcG9pbnRNZXRob2QoKXsKLSAgICByZXR1cm4gc2V0RW5kcG9pbnRNZXRob2Q7ICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIGNsaWVudFByb2plY3QgY29udGFpbnMgdGhlIGNsaWVudCBhcnRpZmFjdHMgaW5jbHVkaW5nIHRoZSAKLSAgKiBnZW5lcmF0ZWQgcHJveHkgYmVhbiAgIAotICAqIEBwYXJhbSBjbGllbnRQcm9qZWN0IFN0cmluZwotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KXsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3QoKXsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsJICAKLSAgfQotCSAgCi0gIC8qKgotICAgKiBUaGUgY2xpZW50TW9kdWxlIGNvbnRhaW5zIHRoZSBjbGllbnQgYXJ0aWZhY3RzIGluY2x1ZGluZyB0aGUgCi0gICAqIG1vZHVsZSAgIAotICAgKiBAcGFyYW0gY2xpZW50UHJvamVjdCBTdHJpbmcKLSAgICovCi0gICBwdWJsaWMgdm9pZCBzZXRDbGllbnRNb2R1bGUoU3RyaW5nIGNsaWVudE1vZHVsZSl7Ci0gICAgIHRoaXMuY2xpZW50TW9kdWxlID0gY2xpZW50TW9kdWxlOwkgIAotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENsaWVudE1vZHVsZSgpewotICAgICByZXR1cm4gY2xpZW50TW9kdWxlOwkgIAotICAgfQotICAKLSAgLyoqCi0gICogVGhlc2UgYXJlIG1ldGhvZHMgb24gdGhlIHByb3h5YmVhbiB0aGUgdXNlciBoYXMgY2hlY2tlZCBvbmVzIAotICAqIHRoZXkgd2FudCBpbmNsdWRlZCBpbiB0aGUgdGVzdCBjbGllbnQgICAgIAotICAqIEBwYXJhbSBtZXRob2RzCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpewotCXRoaXMubWV0aG9kcyA9IG1ldGhvZHM7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb25bXSBnZXRNZXRob2RzKCl7Ci0gICAgcmV0dXJuIG1ldGhvZHM7ICAKLSAgfQotICAKLSAgLyoqCi0gICogSWYgdGhlIGNvbW1hbmQgbmVlZHMgYSBzZXJ2ZXIgdGhpcyBpcyB0aGUgY2hvc2VuIAotICAqIGNsaWVudCBzZXJ2ZXJJRAotICAqIEBwYXJhbSBzYW1wbGVTZXJ2ZXJUeXBlSUQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCl7Ci0gICAgdGhpcy5zZXJ2aWNlU2VydmVyVHlwZUlEID0gc2VydmljZVNlcnZlclR5cGVJRDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKXsKLSAgICByZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRDsgIAotICB9Ci0gIAotICAvKioKLSAgKiBJZiB0aGUgY29tbWFuZCBuZWVkcyBhIHNlcnZlciB0aGlzIGlzIHRoZSBjaG9zZW4gCi0gICogY2xpZW50IHNlcnZlcklECi0gICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJRAotICAqLwotICAgcHVibGljIHZvaWQgc2V0Q2xpZW50U2VydmVyVHlwZUlEKFN0cmluZyBjbGllbnRTZXJ2ZXJUeXBlSUQpewotICAgICB0aGlzLmNsaWVudFNlcnZlclR5cGVJRCA9IGNsaWVudFNlcnZlclR5cGVJRDsgIAotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFNlcnZlclR5cGVJRCgpewotICAgICByZXR1cm4gY2xpZW50U2VydmVyVHlwZUlEOyAgCi0gICB9Ci0JICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpewotCXRoaXMuc2VydmljZUV4aXN0aW5nU2VydmVyID0gc2VydmljZUV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gIAotICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoKXsKLSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBpcyB0aGUgU3RyaW5nIGlmIHJlcXVpcmVkCi0gICAqIEBwYXJhbSBjbGllbnRFQVJQcm9qZWN0Ci0gICAqLwotICAgcHVibGljIHZvaWQgc2V0Q2xpZW50RUFSUHJvamVjdChTdHJpbmcgY2xpZW50RUFSUHJvamVjdCl7Ci0gCXRoaXMuY2xpZW50RUFSUHJvamVjdCA9IGNsaWVudEVBUlByb2plY3Q7ICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RUFSUHJvamVjdCgpewotICAgICByZXR1cm4gY2xpZW50RUFSUHJvamVjdDsgICAKLSAgIH0KLSAgIAotICAgCi0gICAvKioKLSAgICAqIFRoaXMgaXMgdGhlIFN0cmluZyBpZiByZXF1aXJlZAotICAgICogQHBhcmFtIGNsaWVudEVBUlByb2plY3QKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENsaWVudEVBUk1vZHVsZShTdHJpbmcgY2xpZW50RUFSTW9kdWxlKXsKLSAgCXRoaXMuY2xpZW50RUFSTW9kdWxlID0gY2xpZW50RUFSTW9kdWxlOyAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVBUk1vZHVsZSgpewotICAgICAgcmV0dXJuIGNsaWVudEVBUk1vZHVsZTsgICAKLSAgICB9Ci0gICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFeGlzdGluZ1NlcnZlcihJU2VydmVyIGNsaWVudEV4aXN0aW5nU2VydmVyKXsKLSAgICB0aGlzLmNsaWVudEV4aXN0aW5nU2VydmVyID0gY2xpZW50RXhpc3RpbmdTZXJ2ZXI7ICAgCi0gIH0KLSAgIAotICBwdWJsaWMgSVNlcnZlciBnZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpewotICAgIHJldHVybiBjbGllbnRFeGlzdGluZ1NlcnZlcjsgICAKLSAgfQotICAgCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGVuZHBvaW50cyBpZiBtb25pdG9yIHNlcnZpY2UgaXMgZW5hYmxlZAotICAqIEBwYXJhbSBlbmRwb2ludHMKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoTGlzdCBlbmRwb2ludHMpewotCXRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOyAgCi0gIH0KLSAgcHVibGljIExpc3QgZ2V0RW5kcG9pbnQoKXsKLSAgICByZXR1cm4gZW5kcG9pbnRzOyAgCi0gIH0gCi0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgcHJvamVjdCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoCi0gICogd3NkbAotICAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChTdHJpbmcgc2VydmljZVByb2plY3QpewotICAgIHRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsgICAgCSAgCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VQcm9qZWN0KCl7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0OwotICB9Ci0KLSAgLyoqCi0gICogV1NETCBVUkwKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFNlcnZpY2VVUkwoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKXsKLQl0aGlzLndzZGxTZXJ2aWNlVVJMID0gd3NkbFNlcnZpY2VVUkw7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsU2VydmljZVVSTCgpewotICAgIHJldHVybiB3c2RsU2VydmljZVVSTDsgIAotICB9Ci0gIAotICAvKioKLSAgICogY2xpZW50TmVlZEVBUgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpIHsKLQkJcmV0dXJuIGNsaWVudE5lZWRFQVI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnROZWVkRUFSKGJvb2xlYW4gY2xpZW50TmVlZEVBUikgewotCQl0aGlzLmNsaWVudE5lZWRFQVIgPSBjbGllbnROZWVkRUFSOwotICB9Ci0KLSAgLyoqCi0gICAqIGV4dGVybmFsIGJyb3dzZXIKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEV4dGVybmFsQnJvd3NlcigpIAotICB7Ci0JICByZXR1cm4gZXh0ZXJuYWxCcm93c2VyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXh0ZXJuYWxCcm93c2VyKGJvb2xlYW4gZXh0ZXJuYWxCcm93c2VyKSB7Ci0JICB0aGlzLmV4dGVybmFsQnJvd3NlciA9IGV4dGVybmFsQnJvd3NlcjsKLSAgfQotCi1wdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkgewotCXJldHVybiBydW5UZXN0Q2xpZW50OwotfQotCi1wdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudCkgewotCXRoaXMucnVuVGVzdENsaWVudCA9IHJ1blRlc3RDbGllbnQ7Ci19Ci0KLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VDbGllbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZiYjdkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDbGllbnRJbmZvIHsKLQotCXByaXZhdGUgV2ViU2VydmljZVN0YXRlIHN0YXRlOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlclJ1bnRpbWVJZDsKLQlwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkw7Ci0JcHJpdmF0ZSBTdHJpbmcgaW1wbFVSTDsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gc2VydmVyQ3JlYXRlZCA9IGZhbHNlOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0SW1wbFVSTCgpIHsKLQkJcmV0dXJuIGltcGxVUkw7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEltcGxVUkwoU3RyaW5nIGltcGxVUkwpIHsKLQkJdGhpcy5pbXBsVVJMID0gaW1wbFVSTDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCXRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKSB7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCXB1YmxpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0U3RhdGUoKSB7Ci0JCXJldHVybiBzdGF0ZTsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U3RhdGUoV2ViU2VydmljZVN0YXRlIHN0YXRlKSB7Ci0JCXRoaXMuc3RhdGUgPSBzdGF0ZTsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlUnVudGltZUlkKCkgewotCQlyZXR1cm4gd2ViU2VydmljZVJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVJ1bnRpbWVJZChTdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZCkgewotCQl0aGlzLndlYlNlcnZpY2VSdW50aW1lSWQgPSB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JCXJldHVybiB3c2RsVVJMOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMud3NkbFVSTCA9IHdzZGxVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlFbmRwb2ludCgpIHsKLQkJcmV0dXJuIHByb3h5RW5kcG9pbnQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFByb3h5RW5kcG9pbnQoU3RyaW5nIHByb3h5RW5kcG9pbnQpIHsKLQkJdGhpcy5wcm94eUVuZHBvaW50ID0gcHJveHlFbmRwb2ludDsKLQl9Ci0JCi0JLyoqCi0JICogQHJldHVybiBJbmRpY2F0ZWQgd2hldGhlciB0aGUgZnJhbWV3b3JrIGhhZCBjcmVhdGVkIAotCSAqIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBnZXRTZXJ2ZXJJbnN0YW5jZUlkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXJDcmVhdGVkKCkgewotCQlyZXR1cm4gc2VydmVyQ3JlYXRlZDsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlckNyZWF0ZWQgVHJ1ZSBpZiB0aGUgZnJhbWV3b3JrIGhhZCBjcmVhdGVkIAotCSAqIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBnZXRTZXJ2ZXJJbnN0YW5jZUlkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyQ3JlYXRlZChib29sZWFuIHNlcnZlckNyZWF0ZWQpIHsKLQkJdGhpcy5zZXJ2ZXJDcmVhdGVkID0gc2VydmVyQ3JlYXRlZDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJSdW50aW1lSWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlclJ1bnRpbWVJZChTdHJpbmcgc2VydmVyUnVudGltZUlkKSB7Ci0JCXRoaXMuc2VydmVyUnVudGltZUlkID0gc2VydmVyUnVudGltZUlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NjkxYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTI4OTA1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMzMCAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLlVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUluZm8gewotCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlU3RhdGUgc3RhdGU7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUnVudGltZUlkOwotCXByaXZhdGUgU3RyaW5nIHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTDsKLQlwcml2YXRlIFN0cmluZyBlbmRQb2ludFVSTDsKLQlwcml2YXRlIFN0cmluZyBpbXBsVVJMOwotCXByaXZhdGUgU3RyaW5nW10gaW1wbFVSTHM7Ci0JcHJpdmF0ZSBib29sZWFuIHNlcnZlckNyZWF0ZWQgPSBmYWxzZTsKLQkKLQlwcml2YXRlIElNZXJnZXIgbWVyZ2VyOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0RW5kUG9pbnRVUkwoKQotCXsKLQkJcmV0dXJuIGVuZFBvaW50VVJMOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRFbmRQb2ludFVSTChTdHJpbmcgZW5kUG9pbnRVUkwpCi0JewotCQl0aGlzLmVuZFBvaW50VVJMID0gZW5kUG9pbnRVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0SW1wbFVSTCgpCi0JewotCQlyZXR1cm4gaW1wbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW1wbFVSTChTdHJpbmcgaW1wbFVSTCkKLQl7Ci0JCXRoaXMuaW1wbFVSTCA9IGltcGxVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkKLQl7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotCXsKLQkJdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0JewotCQlyZXR1cm4gc2VydmVySW5zdGFuY2VJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZCkKLQl7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCXB1YmxpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0U3RhdGUoKQotCXsKLQkJcmV0dXJuIHN0YXRlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZShXZWJTZXJ2aWNlU3RhdGUgc3RhdGUpCi0JewotCQl0aGlzLnN0YXRlID0gc3RhdGU7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVJ1bnRpbWVJZCgpCi0JewotCQlyZXR1cm4gd2ViU2VydmljZVJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVJ1bnRpbWVJZChTdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZCkKLQl7Ci0JCXRoaXMud2ViU2VydmljZVJ1bnRpbWVJZCA9IHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSTCgpCi0JewotCQlyZXR1cm4gd3NkbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V3NkbFVSTChTdHJpbmcgd3NkbFVSTCkKLQl7Ci0JCXRoaXMud3NkbFVSTCA9IHdzZGxVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmdbXSBnZXRJbXBsVVJMcygpCi0JewotCQlyZXR1cm4gaW1wbFVSTHM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEltcGxVUkxzKFN0cmluZ1tdIGltcGxVUkxzKQotCXsKLQkJdGhpcy5pbXBsVVJMcyA9IGltcGxVUkxzOwotCQlsb2FkTWVyZ2VyKCk7Ci0JCQotCX0KLQlwdWJsaWMgSU1lcmdlciBnZXRNZXJnZXIoKSB7Ci0JCXJldHVybiBtZXJnZXI7Ci0JfQotCXB1YmxpYyB2b2lkIHNldE1lcmdlcihJTWVyZ2VyIG1lcmdlcikgewotCQl0aGlzLm1lcmdlciA9IG1lcmdlcjsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGxvYWRNZXJnZXIoKSB7Ci0JCWlmIChtZXJnZXIgIT0gbnVsbCkgewotCQkJUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lcmdlQ29udGV4dCgpOwotCQkJaWYgKG1lcmdlQ29udGV4dC5pc1NrZWxldG9uTWVyZ2VFbmFibGVkKCkpIHsKLQkJCQltZXJnZXIubG9hZChVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9GaWxlcyhpbXBsVVJMcykpOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIEByZXR1cm4gSW5kaWNhdGVkIHdoZXRoZXIgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2VydmVyQ3JlYXRlZCgpIHsKLQkJcmV0dXJuIHNlcnZlckNyZWF0ZWQ7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2ZXJDcmVhdGVkIFRydWUgaWYgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlckNyZWF0ZWQoYm9vbGVhbiBzZXJ2ZXJDcmVhdGVkKSB7Ci0JCXRoaXMuc2VydmVyQ3JlYXRlZCA9IHNlcnZlckNyZWF0ZWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUnVudGltZUlkKCkgewotCQlyZXR1cm4gc2VydmVyUnVudGltZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJSdW50aW1lSWQoU3RyaW5nIHNlcnZlclJ1bnRpbWVJZCkgewotCQl0aGlzLnNlcnZlclJ1bnRpbWVJZCA9IHNlcnZlclJ1bnRpbWVJZDsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVNjZW5hcmlvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVNjZW5hcmlvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlY2NmMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTY2VuYXJpby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI0ICAgMTE2NzUwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXZWJTZXJ2aWNlU2NlbmFyaW8gZXh0ZW5kcyBBYnN0cmFjdEVudW1lcmF0b3IKLXsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1RUT01VUCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRPUERPV04gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTElFTlQgPSAyOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU2NlbmFyaW8gQk9UVE9NVVBfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU2NlbmFyaW8oQk9UVE9NVVAsICJCT1RUT01VUCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTY2VuYXJpbyBUT1BET1dOX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVNjZW5hcmlvKFRPUERPV04sICJUT1BET1dOIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVNjZW5hcmlvIENMSUVOVF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTY2VuYXJpbyhDTElFTlQsICJDTElFTlQiKTsKLQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTY2VuYXJpb1tdIFZBTFVFU19BUlJBWSA9Ci0gICAgbmV3IFdlYlNlcnZpY2VTY2VuYXJpb1tdCi0gICAgewotCSAgQk9UVE9NVVBfTElURVJBTCwKLQkgIFRPUERPV05fTElURVJBTCwKLQkgIENMSUVOVF9MSVRFUkFMLAotICAgIH07Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKLQotCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVNjZW5hcmlvIGdldChTdHJpbmcgbmFtZSkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VTY2VuYXJpbyByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07Ci0gICAgICBpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKG5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0KGludCB2YWx1ZSkKLSAgewotICAgIHN3aXRjaCAodmFsdWUpCi0gICAgewotICAgICAgY2FzZSBCT1RUT01VUDogcmV0dXJuIEJPVFRPTVVQX0xJVEVSQUw7Ci0gICAgICBjYXNlIFRPUERPV046IHJldHVybiBUT1BET1dOX0xJVEVSQUw7Ci0gICAgICBjYXNlIENMSUVOVDogcmV0dXJuIENMSUVOVF9MSVRFUkFMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsJCi0gIH0KLQotICAvKioKLSAgICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlU2NlbmFyaW8oaW50IHZhbHVlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKHZhbHVlLCBuYW1lKTsKLSAgfQotICAKLQotfSAvL1dlYlNlcnZpY2VTY2VuYXJpbwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTdGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIwYzBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXZWJTZXJ2aWNlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEVudW1lcmF0b3IKLXsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTktOT1dOID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWRUxPUEVEID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVNTRU1CTEVEID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZRUQgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMRUQgPSA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSVU5OSU5HID0gNTsKLSAgCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBVTktOT1dOX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKFVOS05PV04sICJVTktOT1dOIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIERFVkVMT1BFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShERVZFTE9QRUQsICJERVZFTE9QRUQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgQVNTRU1CTEVEX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKEFTU0VNQkxFRCwgIkFTU0VNQkxFRCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBERVBMT1lFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShERVBMT1lFRCwgIkRFUExPWUVEIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIElOU1RBTExFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShJTlNUQUxMRUQsICJJTlNUQUxMRUQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgUlVOTklOR19MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShSVU5OSU5HLCAiUlVOTklORyIpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZVtdIFZBTFVFU19BUlJBWSA9Ci0gICAgbmV3IFdlYlNlcnZpY2VTdGF0ZVtdCi0gICAgewotCSAgVU5LTk9XTl9MSVRFUkFMLAotCSAgREVWRUxPUEVEX0xJVEVSQUwsCi0JICBBU1NFTUJMRURfTElURVJBTCwKLQkgIERFUExPWUVEX0xJVEVSQUwsCi0JICBJTlNUQUxMRURfTElURVJBTCwKLQkgIFJVTk5JTkdfTElURVJBTCwKLSAgICB9OwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdCBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7Ci0KLQotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTdGF0ZSBnZXQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlU3RhdGUgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOwotICAgICAgaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVN0YXRlIGdldChpbnQgdmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKHZhbHVlKQotICAgIHsKLSAgICAgIGNhc2UgVU5LTk9XTjogcmV0dXJuIFVOS05PV05fTElURVJBTDsKLSAgICAgIGNhc2UgREVWRUxPUEVEOiByZXR1cm4gREVWRUxPUEVEX0xJVEVSQUw7Ci0gICAgICBjYXNlIEFTU0VNQkxFRDogcmV0dXJuIEFTU0VNQkxFRF9MSVRFUkFMOwotCSAgY2FzZSBERVBMT1lFRDogcmV0dXJuIERFUExPWUVEX0xJVEVSQUw7Ci0JICBjYXNlIElOU1RBTExFRDogcmV0dXJuIElOU1RBTExFRF9MSVRFUkFMOwotCSAgY2FzZSBSVU5OSU5HOiByZXR1cm4gUlVOTklOR19MSVRFUkFMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsJCi0gIH0KLQotICAvKioKLSAgICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlU3RhdGUoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKHZhbHVlLCBuYW1lKTsKLSAgfQotCi19IC8vV2ViU2VydmljZVN0YXRlCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxNzg3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtYXNkIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLWFzZC13c2RsMTEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtcmVmYWN0b3IiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtc29hcCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1zZWFyY2giLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZSIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjVmNjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXdzZGxlZGl0b3IuamFyCi10ZW1wLmZvbGRlcgotb3JnLmVjbGlwc2Uud3N0LndzZGwudWlfMS4wLjAuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhNGRkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcxNWMyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSNTdW4gSnVuIDAzIDAwOjQ5OjA2IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmY3YWM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBKYW4gMzAgMjM6Mzg6MTUgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWU3MzA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNXZWQgSnVuIDA0IDE5OjUzOjMzIEVEVCAyMDA4Ci1jb21waWxlcnMuZi51bnJlc29sdmVkLWZlYXR1cmVzPTEKLWNvbXBpbGVycy5mLnVucmVzb2x2ZWQtcGx1Z2lucz0xCi1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTEKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuZGlzY291cmFnZWQtY2xhc3M9MQotY29tcGlsZXJzLnAuaW50ZXJuYWw9MQotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0xCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1pZGVudGlmaWVyPTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnMuY3JlYXRlLWRvY3M9ZmFsc2UKLWNvbXBpbGVycy5zLmRvYy1mb2xkZXI9ZG9jCi1jb21waWxlcnMucy5vcGVuLXRhZ3M9MQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTdjYjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1VJX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4yLjMwMi5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvciwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFkYXB0ZXJmYWN0b3J5LmV4dGVuc2lvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24sCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGlhbG9nczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuaWNvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWNvbmNpbGVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuaGFuZGxlcnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnhzZDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZ2VmO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVkaXQ7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNS4wLDEuNi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3Jpbmc7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iWzIuOC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQ7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLnNlYXJjaDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW07YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA3Mzc0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotamFycy5jb21waWxlLm9yZGVyID0gLgotc291cmNlLi4gPSBzcmMtYXNkLyxcCi0gICAgICAgICAgIHNyYy1hc2Qtd3NkbDExLyxcCi0gICAgICAgICAgIHNyYy1yZWZhY3Rvci8sXAotICAgICAgICAgICBzcmMtc29hcC8sXAotICAgICAgICAgICBzcmMtc2VhcmNoLwotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBzY2hlbWEvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0ZmYxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kdG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kdG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTcwYzkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZHRvb2wxNi9jYXB0dXJlc2NyZWVuLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2VsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGMxOWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NjgzMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L3pvb21taW51cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbW1pbnVzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQyYzkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbW1pbnVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZXRvb2wxNi96b29tcGx1cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbXBsdXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjZkNzU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZXRvb2wxNi96b29tcGx1cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3JlbG9hZGdyYW1tYXIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9yZWxvYWRncmFtbWFyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0YzljYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3JlbG9hZGdyYW1tYXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy92YWxpZGF0ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3ZhbGlkYXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIzNDdhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3ZhbGlkYXRlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvd3NkbF9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIxZjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvd3NkbF9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhODVlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotX1VJX0xBQkVMX05FV19DQVRFR09SWV9OQU1FX1dTPVdlYiBTZXJ2aWNlcwotX1VJX0xBQkVMX0NSRUFURV9ORVdfV1NETF9GSUxFPUNyZWF0ZSBhIG5ldyBXU0RMIEZpbGUKLV9VSV9XSVpBUkRfTkVXX1dTREw9V1NETAotX1VJX1dTRExfTEFCRUw9V1NETCBGaWxlcwotX1VJX0xBQkVMX0dFTkVSQUw9R2VuZXJhbAotX1VJX0xBQkVMX0RPQ1VNRU5UQVRJT049RG9jdW1lbnRhdGlvbgotX1VJX0xBQkVMX0VYVEVOU0lPTlM9RXh0ZW5zaW9ucwotX1VJX0xBQkVMX1JFRkFDVE9SPVJlZmFjdG9yCi1fVUlfRURJVE9SX05BTUU9V1NETCBFZGl0b3IKLV9VSV9SRUxPQURfREVQRU5ERU5DSUVTPVJlbG9hZCBEZXBlbmRlbmNpZXMKLXJlZmFjdG9yaW5nLm1lbnUubGFiZWw9UmVmYWN0b3IKLUFkZEJvb2ttYXJrLmxhYmVsPUFkZCBCb28ma21hcmsuLi4KLUFkZEJvb2ttYXJrLnRvb2x0aXA9QWRkIEJvb2ttYXJrLi4uCi1TZWxlY3RSdWxlci5sYWJlbD1TZWxlY3QgUnVsZXIKLUFkZFRhc2subGFiZWw9QWRkICZUYXNrLi4uCi1BZGRUYXNrLnRvb2x0aXA9QWRkIFRhc2suLi4KLVdTRExFZGl0b3JNb2Rlcz1XU0RMIEVkaXRvciBNb2RlcwotCi1jb21tYW5kLndzZGwucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQubmFtZT1SZW5hbWUgV1NETCBjb21wb25lbnQKLWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5kZXNjcmlwdGlvbj1SZW5hbWVzIFdTREwgY29tcG9uZW50Ci1jb21tYW5kLndzZGwucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQubGFiZWw9UmUmbmFtZS4uLgotV1NETF9ERVNJR05fVklFV19ERVNDUklQVElPTj1XU0RMIEVkaXRvciBEZXNpZ24gVmlldwotV1NETF9ERVNJR05fVklFVz1XU0RMIEVkaXRvciBEZXNpZ24gVmlldwotV1NETF9TT1VSQ0VfVklFV19ERVNDUklQVElPTj1XU0RMIEVkaXRvciBTb3VyY2UgVmlldwotV1NETF9TT1VSQ0VfVklFVz1XU0RMIEVkaXRvciBTb3VyY2UgVmlldwotCi1fVUlfUExVR0lOX05BTUU9V1NETCBVSQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0jIwotV1NETF9Tb3VyY2VfdGFyZ2V0X25hbWU9V1NETCBTb3VyY2UKLVdTRExfaHlwZXJsaW5rPVdTREwgQ29udGVudAotU09BUD1TT0FQCi1IVFRQPUhUVFAKLVJlZmVyZW5jZXM9JlJlZmVyZW5jZXMKLV9VSV9SRUxPQURfREVQRU5ERU5DSUVTLnRvb2x0aXAgPSBSZWxvYWQgRGVwZW5kZW5jaWVzCi1leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5uYW1lID0gRXh0ZW5zaWJsaXR5IEVsZW1lbnQgRmlsdGVyCi1yZW5hbWVQYXJ0aWNpcGFudC5uYW1lID0gV1NETCBSZW5hbWUgUGFydGljcGFudAotaW50ZXJuYWxFZGl0b3JDb25maWd1cmF0aW9uLm5hbWUgPSBXU0RMIEVkaXRvciBFeHRlbnNpb24gQ29uZmlndXJhdGlvbgotZXh0ZW5zaW9uQ2F0ZWdvcmllcy5uYW1lID0gRXh0ZW5zaW9uIENhdGVnb3JpZXMKLWNvbnRlbnRHZW5lcmF0b3JVSS5uYW1lID0gVUkgUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMKLWFkYXB0ZXJGYWN0b3J5Lm5hbWUgPSBBZGFwdGVyIEZhY3RvcnkgRXh0ZW5zaW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDdlYzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgotCQk8ZWRpdG9yCi0JCQluYW1lPSIlX1VJX0VESVRPUl9OQU1FIgotCQkJaWNvbj0iaWNvbnMvd3NkbF9maWxlX29iai5naWYiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIgotCQkJY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiPgotCQkJPGNvbnRlbnRUeXBlQmluZGluZwotCQkJCWNvbnRlbnRUeXBlSWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiIC8+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotCQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLQkJPGNhdGVnb3J5Ci0JCQlpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLQkJCW5hbWU9IiVfVUlfTEFCRUxfTkVXX0NBVEVHT1JZX05BTUVfV1MiIC8+Ci0JCTx3aXphcmQKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIKLQkJCW5hbWU9IiVfVUlfV0laQVJEX05FV19XU0RMIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuTmV3V1NETFdpemFyZCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotCQkJaWNvbj0iaWNvbnMvd3NkbF9maWxlX29iai5naWYiPgotCQkJPGRlc2NyaXB0aW9uPiVfVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEU8L2Rlc2NyaXB0aW9uPgotCQkJPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiAvPgotCQk8L3dpemFyZD4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCQk8IS0tIHBsYWNlIGV2ZXJ5dGhpbmcgaW4gIldlYiBTZXJ2aWNlcyIgLS0+Ci0JCTxwYWdlCi0JCQluYW1lPSIlX1VJX1dTRExfTEFCRUwiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETFByZWZlcmVuY2VQYWdlIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExQcmVmZXJlbmNlUGFnZSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTwhLS0gVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgdXNlZCB0byBzdXBsZW1lbnQgV1NETCAxLjEgc2NoZW1hcyBpbiBvcmRlciB0byAgIC0tPgotCTwhLS0gY29uc3RyYWluIHRoZSBleHRlbnNpYmxpdHkgZWxlbWVudHMgdGhhdCBhcmUgYWxsb3dlZCBhdCB0aGUgJ3dzZGwnIGxldmVsIC0tPgotCTxleHRlbnNpb24tcG9pbnQKLQkJaWQ9ImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIgotCQluYW1lPSIlZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIubmFtZSIKLQkJc2NoZW1hPSJzY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuZXhzZCIgLz4KLQkJCi0JPGV4dGVuc2lvbi1wb2ludCBpZD0iaW50ZXJuYWxFZGl0b3JDb25maWd1cmF0aW9uIiBuYW1lPSIlaW50ZXJuYWxFZGl0b3JDb25maWd1cmF0aW9uLm5hbWUiLz4gICAgCi0gICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZWRpdG9yTW9kZXMiIG5hbWU9IiVXU0RMRWRpdG9yTW9kZXMiLz4KLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJleHRlbnNpb25DYXRlZ29yaWVzIiBuYW1lPSIlZXh0ZW5zaW9uQ2F0ZWdvcmllcy5uYW1lIi8+CQkKLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJjb250ZW50R2VuZXJhdG9yVUkiIG5hbWU9IiVjb250ZW50R2VuZXJhdG9yVUkubmFtZSIgc2NoZW1hPSJzY2hlbWEvY29udGVudEdlbmVyYXRvclVJLmV4c2QiLz4KLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhZGFwdGVyRmFjdG9yeSIgbmFtZT0iJWFkYXB0ZXJGYWN0b3J5Lm5hbWUiIHNjaGVtYT0ic2NoZW1hL2FkYXB0ZXJGYWN0b3J5LmV4c2QiLz4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLnByb3BlcnR5Q29udHJpYnV0b3IiPgotCQk8cHJvcGVydHlDb250cmlidXRvcgotCQkJY29udHJpYnV0b3JJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciIKLQotCQkJbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRExhYmVsUHJvdmlkZXIiPgkJCQotCQkJPHByb3BlcnR5Q2F0ZWdvcnkgY2F0ZWdvcnk9ImdlbmVyYWwiPjwvcHJvcGVydHlDYXRlZ29yeT4KLQkJCTxwcm9wZXJ0eUNhdGVnb3J5IGNhdGVnb3J5PSJkb2N1bWVudGF0aW9uIj48L3Byb3BlcnR5Q2F0ZWdvcnk+Ci0JCQk8cHJvcGVydHlDYXRlZ29yeSBjYXRlZ29yeT0iZXh0ZW5zaWJpbGl0eSI+PC9wcm9wZXJ0eUNhdGVnb3J5PgotCQk8L3Byb3BlcnR5Q29udHJpYnV0b3I+Ci0JPC9leHRlbnNpb24+Ci0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQucHJvcGVydHlUYWJzIj4KLQkJPHByb3BlcnR5VGFicwotCQkJY29udHJpYnV0b3JJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI+Ci0JCQk8cHJvcGVydHlUYWIKLQkJCQlsYWJlbD0iJV9VSV9MQUJFTF9HRU5FUkFMIgotCQkJCWNhdGVnb3J5PSJnZW5lcmFsIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCI+Ci0JCQk8L3Byb3BlcnR5VGFiPgotCQkJPHByb3BlcnR5VGFiCi0JCQkJbGFiZWw9IiVfVUlfTEFCRUxfRVhURU5TSU9OUyIKLQkJCQljYXRlZ29yeT0iZXh0ZW5zaWJpbGl0eSIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmV4dGVuc2liaWxpdHkiPgotCQkJPC9wcm9wZXJ0eVRhYj4KLQkJCTxwcm9wZXJ0eVRhYgotCQkJCWxhYmVsPSIlX1VJX0xBQkVMX0RPQ1VNRU5UQVRJT04iCi0JCQkJY2F0ZWdvcnk9ImRvY3VtZW50YXRpb24iCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5kb2N1bWVudGF0aW9uIj4KLQkJCTwvcHJvcGVydHlUYWI+Ci0JCTwvcHJvcGVydHlUYWJzPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLnByb3BlcnR5U2VjdGlvbnMiPgotICAgPHByb3BlcnR5U2VjdGlvbnMgY29udHJpYnV0b3JJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI+Ci0gICAgIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZG9jdW1lbnRhdGlvbiIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5Eb2N1bWVudGF0aW9uU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uRG9jdW1lbnRhdGlvblNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0Ij4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0gICAKLSAgIAkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0gICAJIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMVBhcmFtZXRlclNlY3Rpb24iCi0gICAgICAgIGZpbHRlcj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyIgotCSAJaWQ9InByb3Auc2VjdGlvbi5XMTFQYXJhbWV0ZXJTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlciI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLSAgIAkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbiI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuRW5kUG9pbnRTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLkVuZFBvaW50U2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludCI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5CaW5kaW5nU2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5CaW5kaW5nU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuSW1wb3J0U2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5JbXBvcnRTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUltcG9ydCI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSA8IS0tCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5hc2QuZWRpdG9yLnByb3BlcnRpZXMuc2VjdGlvbnMuU2NoZW1hU2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5TY2hlbWFTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmFzZC5mYWNhZGUuSVR5cGUiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4JIAotCS0tPgotCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lc3BhY2VTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lc3BhY2VTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZXNwYWNlU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZXNwYWNlU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVzcGFjZVNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVzcGFjZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQ2F0ZWdvcnlBZGFwdGVyIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uIgotCQlmaWx0ZXI9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb25GaWx0ZXIiCi0JIAlpZD0icHJvcC5zZWN0aW9uLk1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDwhLS0gbW92ZSB0byB3c2RsIHNwZWNpZmljIHBsdWdpbiAtLT4KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5leHRlbnNpYmlsaXR5IiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExRXh0ZW5zaW9uc1NlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLlcxMUFwcGxpY2F0aW9uSW5mb1NlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmV4dGVuc2liaWxpdHkiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFFeHRlbnNpb25zU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uVzExQXBwbGljYXRpb25JbmZvU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb24iPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0gIDwvcHJvcGVydHlTZWN0aW9ucz4KLTwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpb25DYXRlZ29yaWVzIj4KLSAgICAgPGNhdGVnb3J5Ci0gICAgIAlkaXNwbGF5TmFtZT0iSFRUUCIKLSAgICAgIAluYW1lc3BhY2VVUkk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iPgotICAgICAgPC9jYXRlZ29yeT4KLQotICAgICA8Y2F0ZWdvcnkKLSAgICAgCWRpc3BsYXlOYW1lPSJTT0FQIgotICAgICAgCW5hbWVzcGFjZVVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gICAgIDwvY2F0ZWdvcnk+Ci0KLSAgICAgPGNhdGVnb3J5Ci0gICAgICAgIGRpc3BsYXlOYW1lPSJNSU1FIgotICAgICAgCW5hbWVzcGFjZVVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI+Ci0gICAgIDwvY2F0ZWdvcnk+Ci0gICA8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPiAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24gCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuc2VhcmNoUmVmZXJlbmNlcy5tZW51Lm9iamVjdENvbnRyaWIiIAotICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlciI+ICAKLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbGVkaXRvci5zZWFyY2hSZWZlcmVuY2VzLm1lbnUuc2VhcmNoUmVmZXJlbmNlcy5vYmplY3QiIAotICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgIHN0eWxlPSJwdWxsZG93biIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJzZWFyY2hSZWZlcmVuY2VzLXNsb3QtdGVtcCIKLSAgICAgICAgICAgIGxhYmVsPSIlUmVmZXJlbmNlcyIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gICAgICAgICA8L2FjdGlvbj4gICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgICAgICAgICAKLSAgICA8L2V4dGVuc2lvbj4gICAgCi0JCi0JCTwhLS0gaW50aWFsaXplIHdzZGwgc291cmNlIHZhbGlkYXRvciAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnNvdXJjZXZhbGlkYXRpb24iPgotCQk8dmFsaWRhdG9yCi0JCQlzY29wZT0idG90YWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlci5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWNvbmNpbGVyLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMIj4KLQkJCTxjb250ZW50VHlwZUlkZW50aWZpZXIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI+Ci0JCQkJPHBhcnRpdGlvblR5cGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuWE1MX0RFRkFVTFQiPgotCQkJCTwvcGFydGl0aW9uVHlwZT4KLQkJCTwvY29udGVudFR5cGVJZGVudGlmaWVyPgotCQk8L3ZhbGlkYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPCEtLSBhZGQgcHJlZmVyZW5jZSBwYWdlcyB0byB0aGUgY29udGV4dCBtZW51IGFjdGlvbiAoSUQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBkZWNsYXJlZCAicGF0aCIgYWJvdmUpIC0tPgotCQk8cHJvdmlzaW9uYWxEZWZpbml0aW9uCi0JCQl0eXBlPSJwcmVmZXJlbmNlcGFnZXMiCi0JCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETFByZWZlcmVuY2VQYWdlIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiAvPgotCQk8c291cmNlVmlld2VyQ29uZmlndXJhdGlvbgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbldTREwiCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiIC8+Ci08IS0tCQkJCi0JCTxjb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24KLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5vdXRsaW5lLldTRExDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24iCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiIC8+Ci0tLT4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPCEtLSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpcyB1c2VkIHRvIGF1Z21lbnQgdGhlIE1vZGVsUXVlcnkgdG8gcHJvdmlkZSBXU0RMIHNwZWNpZmljIGd1aWRlZCBlZGl0aW5nIC0tPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5tb2RlbFF1ZXJ5RXh0ZW5zaW9ucyI+Ci0JCTxtb2RlbFF1ZXJ5RXh0ZW5zaW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMTW9kZWxRdWVyeUV4dGVuc2lvbiIKLQkJCWNvbnRlbnRUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIj4KLQkJPC9tb2RlbFF1ZXJ5RXh0ZW5zaW9uPgotCTwvZXh0ZW5zaW9uPgotICAgCi0gICAgICAgIDwhLS0gU2VhcmNoIHBhcnRpY2lwYW50IGV4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIFhNTENvbXBvbmVudFNlYXJjaFBhdHRlbiBvbiBXU0RMIHJlc291cmNlcyAtLT4KLQkgPGV4dGVuc2lvbiAgIAotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaFBhcnRpY2lwYW50cyI+Ci0JCTxzZWFyY2hQYXJ0aWNpcGFudAotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLldTRExTZWFyY2hQYXJ0aWNpcGFudCI+Ci0JCQk8ZW5hYmxlbWVudD4KLQkJCSAgIDxvcj4KLQkJCSAgICAgIDx3aXRoIHZhcmlhYmxlPSJwYXR0ZXJuIj4KLQkJCQkJPGluc3RhbmNlb2YgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiIvPgkJCSAgIAotCQkJCSAgPC93aXRoPgotCQkJCTwvb3I+Ci0JCQk8L2VuYWJsZW1lbnQ+Ci0JCTwvc2VhcmNoUGFydGljaXBhbnQ+Ci0JIDwvZXh0ZW5zaW9uPgotCQotCi0KLQk8IS0tIFJlZmFjdG9yaW5nIENPUkUgLS0+Ci0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucmVuYW1lUGFydGljaXBhbnRzIj4KLQkJPHJlbmFtZVBhcnRpY2lwYW50Ci0JCQluYW1lPSIlcmVuYW1lUGFydGljaXBhbnQubmFtZSIgICAgICAgICAgIAotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLldTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3RvcmluZy5XU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQiPgotCQkJPGVuYWJsZW1lbnQ+Ci0JCQkgICA8b3I+Ci0JCQkgICA8d2l0aCB2YXJpYWJsZT0iZWxlbWVudCI+Ci0JCQkJCTxpbnN0YW5jZW9mIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCIvPgkJCSAgIAotCQkJCTwvd2l0aD4KLQkJCSAgIDx3aXRoIHZhcmlhYmxlPSJlbGVtZW50Ij4KLQkJCQkJPGluc3RhbmNlb2YgdmFsdWU9Im9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudCIvPgkJCQkJCQkJCi0JCQkJPC93aXRoPgkJCQkJCQkKLQkJCQk8L29yPgotCQkJPC9lbmFibGVtZW50PgkJCQotCQk8L3JlbmFtZVBhcnRpY2lwYW50PgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gIFJlZmFjdG9yaW5nIFVJIGV4dGVuc2lvbnMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgotICAgIAk8bWVudUNvbnRyaWJ1dGlvbiBsb2NhdGlvblVSST0icG9wdXA6cmVmYWN0b3JQb3B1cE1lbnVJZCI+Ci0gICAgIAkgICA8Y29tbWFuZAotICAgICAJICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCIKLSAgIAkgICAgICAgICAgIGxhYmVsPSIlY29tbWFuZC53c2RsLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50LmxhYmVsIj4KLSAgCSAgICAgICAgIDx2aXNpYmxlV2hlbgotICAJICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJ0cnVlIj4KLQkgICAgICAgICAgICAgICAgPHJlZmVyZW5jZQotCSAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvci5hY3RpdmUuc291cmNlVmlldy5kZWZpbml0aW9uIj4KLQkgICAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+Ci0gIAkgICAgICAgICA8L3Zpc2libGVXaGVuPgotICAgCSAgCSAgIDwvY29tbWFuZD4KLSAJICAgCTwvbWVudUNvbnRyaWJ1dGlvbj4KLSAgIAkgCTxtZW51Q29udHJpYnV0aW9uCi0gICAgICAgIAkgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvck1lbnVJZCI+Ci0gICAgICAgICAJPGNvbW1hbmQKLSAgICAgICAgIAkgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCIKLSAgICAgICAgICAgIAkgICBsYWJlbD0iJWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5sYWJlbCI+Ci0gICAgICAgICAgICAgCTx2aXNpYmxlV2hlbgotICAgICAgICAgICAgICAgICAgIAljaGVja0VuYWJsZWQ9InRydWUiPgotICAgICAgICAgICAgIAk8L3Zpc2libGVXaGVuPgotICAgICAgICAJPC9jb21tYW5kPgotICAgIAk8L21lbnVDb250cmlidXRpb24+Ci0JCTxtZW51Q29udHJpYnV0aW9uCi0gICAgICAgIAkgIGxvY2F0aW9uVVJJPSJtZW51OnJlZmFjdG9yTWVudUlkIj4KLSAgICAgIAkJPGNvbW1hbmQKLSAgICAgICAgICAgICAJY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCIKLSAgICAgICAgICAgIAlsYWJlbD0iJWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5sYWJlbCI+Ci0gICAgICAgICAgCQk8dmlzaWJsZVdoZW4KLSAgICAgICAgICAgICAgICAJY2hlY2tFbmFibGVkPSJmYWxzZSI+Ci0gICAgICAgICAgICAgICAgCTxvcj4KLQkgICAgICAgICAgICAgICAgCTxyZWZlcmVuY2UKLQkgICAgICAgICAgICAgICAgICAgICAgCWRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLmFjdGl2ZS5kZXNpZ25WaWV3LmRlZmluaXRpb24iPgotCSAgICAgICAgICAgICAgICAJPC9yZWZlcmVuY2U+Ci0JICAgICAgICAgICAgICAgIAk8cmVmZXJlbmNlCi0JICAgICAgICAgICAgICAgICAgICAgIAlkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvci5hY3RpdmUuc291cmNlVmlldy5kZWZpbml0aW9uIj4KLQkgICAgICAgICAgICAgICAgCTwvcmVmZXJlbmNlPgotICAgICAgICAgICAgICAgIAk8L29yPgotICAgICAgICAgIAkJPC92aXNpYmxlV2hlbj4KLSAgICAgICAgCTwvY29tbWFuZD4KLSAgICAJPC9tZW51Q29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotICAgICAgICAgIAotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+Ci0JCTxjb21tYW5kCi0JCQluYW1lPSIlY29tbWFuZC53c2RsLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50Lm5hbWUiCi0JCQlkZXNjcmlwdGlvbj0iJWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5kZXNjcmlwdGlvbiIKLQkJCWNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LmVkaXQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQiPgotCQk8L2NvbW1hbmQ+Ci0JPC9leHRlbnNpb24+ICAgCi0JCi0JCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvckFjdGlvbnMiPgotCQk8ZWRpdG9yQ29udHJpYnV0aW9uCi0JCQlpZD0ib3JnLmVjbGlwc2UudWkuYXJ0aWNsZXMuYWN0aW9uLmNvbnRyaWJ1dGlvbi5lZGl0b3IiCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI+Ci0KLQkJCTxtZW51Ci0JCQkJaWQ9IldTRExFZGl0b3IiCi0JCQkJbGFiZWw9IiVfVUlfRURJVE9SX05BTUUiCi0JCQkJcGF0aD0iYWRkaXRpb25zIj4KLQkJCQk8c2VwYXJhdG9yIG5hbWU9Imdyb3VwMSIgLz4KLQkJCTwvbWVudT4KLQotCQkJPGFjdGlvbgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5hY3Rpb25zLlJlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlIgotCQkJCWxhYmVsPSIlX1VJX1JFTE9BRF9ERVBFTkRFTkNJRVMiCi0JCQkJaWNvbj0iaWNvbnMvcmVsb2FkZ3JhbW1hci5naWYiCi0JCQkJdG9vbHRpcD0iJV9VSV9SRUxPQURfREVQRU5ERU5DSUVTLnRvb2x0aXAiCi0JCQkJbWVudWJhclBhdGg9IldTRExFZGl0b3IvZ3JvdXAxIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5SZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZSI+Ci0JCQk8L2FjdGlvbj4KLQotCQkJPCEtLQotCQkJCTxhY3Rpb24KLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5WYWxpZGF0ZUFjdGlvbkRlbGVnYXRlIiAKLQkJCQlsYWJlbD0iJV9VSV9BQ1RJT05fVkFMSURBVEVfV1NETF9ET0NVTUVOVCIgCi0JCQkJaWNvbj0iaWNvbnMvdmFsaWRhdGUuZ2lmIiAKLQkJCQl0b29sdGlwPSIlX1VJX0FDVElPTl9WQUxJREFURV9XU0RMX0RPQ1VNRU5UIgotCQkJCW1lbnViYXJQYXRoPSJXU0RMRWRpdG9yL2dyb3VwMSIKLQkJCQl0b29sYmFyUGF0aD0iJU5vcm1hbC9XU0RMRWRpdG9yIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlZhbGlkYXRlQWN0aW9uRGVsZWdhdGUiPiAKLQkJCQk8L2FjdGlvbj4gICAgICAKLQkJCS0tPgotCi0JCTwvZWRpdG9yQ29udHJpYnV0aW9uPgotICAgICAgICA8ZWRpdG9yQ29udHJpYnV0aW9uCi0gICAgICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnJ1bGVyLmFjdGlvbnMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBZGRCb29rbWFyay5sYWJlbCIKLSAgICAgICAgICAgICAgIGhlbHBDb250ZXh0SWQ9Im9yZy5lY2xpcHNlLnVpLmJvb2ttYXJrX2FjdGlvbl9jb250ZXh0IgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIKLSAgICAgICAgICAgICAgIGFjdGlvbklEPSJSdWxlckRvdWJsZUNsaWNrIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIvPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVTZWxlY3RSdWxlci5sYWJlbCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIgotICAgICAgICAgICAgICAgYWN0aW9uSUQ9IlJ1bGVyQ2xpY2siCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIvPgotICAgICAgICA8L2VkaXRvckNvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCi0KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTxleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgotCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTwvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXI+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbgotICAJICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkuZXh0ZW5zaWJpbGl0eU5vZGVDdXN0b21pemF0aW9ucyI+Ci0gICAgICAgPG5vZGVDdXN0b21pemF0aW9uCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQlub2RlRWRpdG9yUHJvdmlkZXJDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9ucy5TT0FQTm9kZUVkaXRvclByb3ZpZGVyIgotCQkJbGFiZWxQcm92aWRlckNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnMuU09BUExhYmVsUHJvdmlkZXIiPgotCQk8L25vZGVDdXN0b21pemF0aW9uPgkJCi0gICAgICAgPG5vZGVDdXN0b21pemF0aW9uCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQlub2RlRWRpdG9yUHJvdmlkZXJDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9ucy5TT0FQTm9kZUVkaXRvclByb3ZpZGVyIgotCQkJbGFiZWxQcm92aWRlckNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnMuSFRUUExhYmVsUHJvdmlkZXIiPgotCQk8L25vZGVDdXN0b21pemF0aW9uPgkJCQkJCi0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0JCTx2aWV3ZXJDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnNvdXJjZS5SdWxlckNvbnRleHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzbGQudWkucnVsZXIuY29udGV4dC5hY3Rpb25zIj4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJUFkZFRhc2subGFiZWwiCi0JCQkJaGVscENvbnRleHRJZD0ib3JnLmVjbGlwc2UudWkuQWRkVGFza19hY3Rpb25fY29udGV4dCIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UYXNrUnVsZXJBY3Rpb24iCi0JCQkJdG9vbHRpcD0iJUFkZFRhc2sudG9vbHRpcCIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlRhc2tSdWxlckFjdGlvbiI+Ci0JCQk8L2FjdGlvbj4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJUFkZEJvb2ttYXJrLmxhYmVsIgotCQkJCWhlbHBDb250ZXh0SWQ9Im9yZy5lY2xpcHNlLnVpLmJvb2ttYXJrX2FjdGlvbl9jb250ZXh0IgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iCi0JCQkJdG9vbHRpcD0iJUFkZEJvb2ttYXJrLnRvb2x0aXAiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIj4KLQkJCTwvYWN0aW9uPgotCQk8L3ZpZXdlckNvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvci5oeXBlcmxpbmtEZXRlY3RvclRhcmdldHMiPgotCQk8dGFyZ2V0Ci0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIKLQkJCW5hbWU9IiVXU0RMX1NvdXJjZV90YXJnZXRfbmFtZSI+Ci0JCTwvdGFyZ2V0PgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLmh5cGVybGlua0RldGVjdG9ycyI+Ci0JCTxoeXBlcmxpbmtEZXRlY3RvcgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETEh5cGVybGlua0RldGVjdG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETEh5cGVybGlua0RldGVjdG9yIgotCQkJbmFtZT0iJVdTRExfaHlwZXJsaW5rIgotCQkJdGFyZ2V0SWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiPgotCQk8L2h5cGVybGlua0RldGVjdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuY29udGVudEdlbmVyYXRvclVJIj4KLSAgICAgIDxjb250ZW50R2VuZXJhdG9yVUkKLSAgICAgICAgbmFtZT0iU09BUCIKLSAgICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICAgICAgICBsYWJlbD0iJVNPQVAiCi0gICAgICAgIHBvcnRPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkFkZHJlc3NQb3J0T3B0aW9uc1BhZ2UiCi0gICAgICAgIGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLlNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UiPgotICAgICAgPC9jb250ZW50R2VuZXJhdG9yVUk+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuY29udGVudEdlbmVyYXRvclVJIj4KLSAgICAgIDxjb250ZW50R2VuZXJhdG9yVUkKLSAgICAgICAgbmFtZT0iSFRUUCIKLSAgICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotICAgICAgICBsYWJlbD0iJUhUVFAiCi0gICAgICAgIHBvcnRPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkFkZHJlc3NQb3J0T3B0aW9uc1BhZ2UiCi0gICAgICAgIGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UiPgotICAgICAgPC9jb250ZW50R2VuZXJhdG9yVUk+Ci0gICA8L2V4dGVuc2lvbj4gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+Ci0gICAgICA8aGFuZGxlcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmhhbmRsZXJzLlJlbmFtZUhhbmRsZXIiCi0gICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50Ij4KLSAgICAgICAgIDxlbmFibGVkV2hlbj4KLSAgICAgICAgICAgCTx3aXRoIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgotICAgICAgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWVFbmFibGVkIi8+ICAgIAotCSAgICAgICAgPC93aXRoPiAgCi0JCTwvZW5hYmxlZFdoZW4+Ci0gICAgICA8L2hhbmRsZXI+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLnByb3BlcnR5VGVzdGVycyI+Ci0gICAgICA8cHJvcGVydHlUZXN0ZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5SZW5hbWVFbmFibGVtZW50VGVzdGVyIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbmFibGVtZW50IgotICAgICAgICAgICAgbmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3RvciIKLSAgICAgICAgICAgIHByb3BlcnRpZXM9InJlbmFtZUVuYWJsZWQiCi0gICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24iPgotICAgICAgPC9wcm9wZXJ0eVRlc3Rlcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzIj4KLSAgICAgIDxjb250ZXh0Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iJVdTRExfREVTSUdOX1ZJRVdfREVTQ1JJUFRJT04iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLmRlc2lnblZpZXciCi0gICAgICAgICAgICBuYW1lPSIlV1NETF9ERVNJR05fVklFVyI+Ci0gICAgICA8L2NvbnRleHQ+Ci0gICAgICAgICAgICA8Y29udGV4dAotICAgICAgICAgICAgZGVzY3JpcHRpb249IiVXU0RMX1NPVVJDRV9WSUVXX0RFU0NSSVBUSU9OIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvci5zb3VyY2VWaWV3IgotICAgICAgICAgICAgbmFtZT0iJVdTRExfU09VUkNFX1ZJRVciPgotICAgICAgPC9jb250ZXh0PgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5kZWZpbml0aW9ucyI+Ci0gICAgICA8ZGVmaW5pdGlvbgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvci5hY3RpdmUuZGVzaWduVmlldy5kZWZpbml0aW9uIj4KLSAgICAgICAgIDx3aXRoCi0gICAgICAgICAgICAgICB2YXJpYWJsZT0iYWN0aXZlQ29udGV4dHMiPgotICAgICAgICAgICAgPGl0ZXJhdGUKLSAgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJvciI+Ci0gICAgICAgICAgICAgICA8ZXF1YWxzCi0gICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLmRlc2lnblZpZXciPgotICAgICAgICAgICAgICAgPC9lcXVhbHM+Ci0gICAgICAgICAgICA8L2l0ZXJhdGU+Ci0gICAgICAgICA8L3dpdGg+Ci0gICAgICA8L2RlZmluaXRpb24+Ci0gICAgICA8ZGVmaW5pdGlvbgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvci5hY3RpdmUuc291cmNlVmlldy5kZWZpbml0aW9uIj4KLSAgICAgICAgIDx3aXRoCi0gICAgICAgICAgICAgICB2YXJpYWJsZT0iYWN0aXZlQ29udGV4dHMiPgotICAgICAgICAgICAgPGl0ZXJhdGUKLSAgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJvciI+Ci0gICAgICAgICAgICAgICA8ZXF1YWxzCi0gICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLnNvdXJjZVZpZXciPgotICAgICAgICAgICAgICAgPC9lcXVhbHM+Ci0gICAgICAgICAgICA8L2l0ZXJhdGU+Ci0gICAgICAgICA8L3dpdGg+Ci0gICAgICA8L2RlZmluaXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvYWRhcHRlckZhY3RvcnkuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2FkYXB0ZXJGYWN0b3J5LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhODY1MzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvYWRhcHRlckZhY3RvcnkuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiIGlkPSJhZGFwdGVyRmFjdG9yeSIgbmFtZT0iQWRhcHRlciBGYWN0b3J5IEV4dGVuc2lvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgQWRhcHRlciBGYWN0b3J5IEV4dGVuc2lvbiBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgYWRhcHRlciBmYWN0b3JpZXMgdGhhdCBleHRlbmQgdGhlIGRlc2NyaXB0aW9uIG9mIFdTREwgZWxlbWVudHMgZm9yIFVJIHB1cnBvc2VzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBBZGFwdGVyIEZhY3RvcnkgRXh0ZW5zaW9uIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBhZGFwdGVyIGZhY3RvcmllcyB0aGF0IGV4dGVuZCB0aGUgZGVzY3JpcHRpb24gb2YgV1NETCBlbGVtZW50cyBmb3IgVUkgcHVycG9zZXMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImFkYXB0ZXJGYWN0b3J5Ii8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJhZGFwdGVyRmFjdG9yeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYWRhcHRlckZhY3RvcnlDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBZGFwdGVyIGZhY3RvcnkgZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlLiAgVGhlIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Jmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY29udGVudCBnZW5lcmF0b3IgdWkgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAmbHQ7ZXh0ZW5zaW9uIHBvaW50ID0gJnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuYWRhcHRlckZhY3RvcnkmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7YWRhcHRlckZhY3RvcnkKLSAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgYWRhcHRlckZhY3RvcnlDbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLlNPQVBBZGFwdGVyRmFjdG9yeSZxdW90OyZndDsKLSAgICAgICZsdDsvYWRhcHRlckZhY3RvcnkmZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Jmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9jb250ZW50R2VuZXJhdG9yVUkuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JVSS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTc1OGI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JVSS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0iY29udGVudEdlbmVyYXRvclVJIiBuYW1lPSJVSSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgVUkgUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIFVJIChpbiB0aGUgTmV3IFdTREwgRmlsZSB3aXphcmQpIGZvciB0aGVpciBjdXN0b20gZ2VuZXJhdG9ycyBmb3IgUG9ydHMgYW5kIEJpbmRpbmdzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBVSSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgdWkgKGZvciB0aGUgTmV3IFdTREwgRmlsZSB3aXphcmQpIGZvciB0aGVpciBjdXN0b20gY29udGVudCBnZW5lcmF0b3JzIGZvciBXU0RMIFBvcnRzIGFuZCBCaW5kaW5ncy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY29udGVudEdlbmVyYXRvclVJIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJjb250ZW50R2VuZXJhdG9yVUkiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE5hbWUgdXNlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvcnRPcHRpb25zUGFnZUNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFVJIHRoYXQgb2ZmZXJzIHBvcnQgb3B0aW9ucy4gIFRoZSBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSI6b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBVSSB0aGF0IG9mZmVycyBiaW5kaW5nIG9wdGlvbnMuICBUaGUgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UmbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGxhYmVsIHVzZWQgdG8gZGVzY3JpYmUgdGhpcyBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbnRlbnQgZ2VuZXJhdG9yIHVpIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uIHBvaW50ID0gJnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuY29udGVudEdlbmVyYXRvclVJJnF1b3Q7Jmd0OwotICAgICAgJmx0O2NvbnRlbnRHZW5lcmF0b3JVSQotICAgICAgICBuYW1lPSZxdW90O1NPQVAmcXVvdDsKLSAgICAgICAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgcG9ydE9wdGlvbnNQYWdlQ2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aS5BZGRyZXNzUG9ydE9wdGlvbnNQYWdlJnF1b3Q7Ci0gICAgICAgIGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuU29hcEJpbmRpbmdPcHRpb25zUGFnZSZxdW90OyZndDsKLSAgICAgICZsdDsvY29udGVudEdlbmVyYXRvclVJJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0NzBkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgaWQ9ImV4dGVuc2liaWxpdHllbGVtZW50RmlsdGVyIiBuYW1lPSJFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBmaWx0ZXJzIGZvciBFeHRlbnNpYmlsaXR5IEVsZW1lbnRzIGluIHRoZSBXU0RMIEVkaXRvciBiYXNlZCBvbiB0aGUgRXh0ZW5zaWJpbGl0eSBFbGVtZW50JmFwb3M7cyBuYW1lc3BhY2UuICBUaGVzZSBmaWx0ZXJzIGRldGVybWluZSB3aGF0IGlzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgV1NETCBFZGl0b3IuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZpbHRlciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0RlZmF1bHRFZGl0b3JNb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0RlZmF1bHRFZGl0b3JNb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YWJiNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9EZWZhdWx0RWRpdG9yTW9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQVNERWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLkFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGU7Ci0KLXB1YmxpYyBjbGFzcyBEZWZhdWx0RWRpdG9yTW9kZSBleHRlbmRzIEVkaXRvck1vZGUKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSUQgPSAgRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpOwotICAKLSAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZXMuX1VJX0xBQkVMX0RFRkFVTFQ7Ci0gIH0KLQotICBwdWJsaWMgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFTREVkaXRQYXJ0RmFjdG9yeSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gSUQ7Ci0gIH0KLQotICBwdWJsaWMgSUNvbnRlbnRQcm92aWRlciBnZXRPdXRsaW5lUHJvdmlkZXIoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBU0RDb250ZW50T3V0bGluZVByb3ZpZGVyKCk7Ci0gIH0gCi0gICAKLSAgcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihhZGFwdGVyKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMjAxYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotCi1wdWJsaWMgaW50ZXJmYWNlIElEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciBleHRlbmRzIElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciB7Ci0JcHVibGljIHZvaWQgaW5pdFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9ucyhJQWN0aW9uQmFycyBiYXJzKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lTZWxlY3Rpb25NYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSVNlbGVjdGlvbk1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjZkYWZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSVNlbGVjdGlvbk1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIElTZWxlY3Rpb25NYXBwZXIgewotCUlTZWxlY3Rpb24gbWFwU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0ZWRPYmplY3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZjRmNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLktleVN0cm9rZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5HRUZBY3Rpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuUHJpbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVBvc3RTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFPcGVuSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3RWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERpcmVjdEVkaXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5LZXlib2FyZERyYWdJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkRlZmluaXRpb25zRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuQVNEQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETE1vZGVsQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExJbXBvcnRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5JS2V5Ym9hcmREcmFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciBleHRlbmRzIEFTRE11bHRpUGFnZUVkaXRvcgoteyAKLQlwcm90ZWN0ZWQgV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlciByZXNvdXJjZUNoYW5nZUhhbmRsZXI7Ci0JCi0JLyoqCi0JICogQGRlcHJlY2F0ZWQgY2FsbCBnZXRleGlzdGluZ2FkYXB0ZXIgb24gaWRvbWRvY3VtZW50IGluc3RlYWQKLQkgKi8KLQlwcm90ZWN0ZWQgV1NETE1vZGVsQWRhcHRlciBtb2RlbEFkYXB0ZXI7Ci0JcHJvdGVjdGVkIFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyIGZTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lcjsKLQlwcm90ZWN0ZWQgV1NETFNlbGVjdGlvbk1hbmFnZXJTZWxlY3Rpb25MaXN0ZW5lciBmV1NETFNlbGVjdGlvbkxpc3RlbmVyOwotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfRURJVE9SX01PREVfRVhURU5TSU9OX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvck1vZGVzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIElEZXNjcmlwdGlvbiBidWlsZE1vZGVsKElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeyAgIAotCSAgdHJ5IHsKLQkgICAgLy8gSVNTVUU6IFRoaXMgY29kZSB3aGljaCBkZWFscyB3aXRoIHRoZSBzdHJ1Y3R1cmVkIG1vZGVsIGlzIHNpbWlsYXIgdG8gdGhlIG9uZSBpbiB0aGUgWFNEIGVkaXRvci4gCi0JICAgIC8vIEl0IGNvdWxkIGJlIHJlZmFjdG9yZWQgaW50byB0aGUgYmFzZSBjbGFzcy4KLQotCSAgICBJRG9jdW1lbnQgZG9jID0gc3RydWN0dXJlZFRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvcklucHV0KTsKLQkgICAgY3JlYXRlQW5kU2V0TW9kZWwoZG9jKTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfSAgICAKLQotCSAgcmV0dXJuIG1vZGVsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBXU0RMIG1vZGVsIGJhc2VkIG9uIHRoZSBnaXZlbiB0ZXh0IGRvY3VtZW50IGFuZCBzZXRzIAotCSAqIHRoZSBtb2RlbCBmb3IgdGhpcyBlZGl0b3IuCi0JICogQHBhcmFtIHRleHREb2N1bWVudAotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVBbmRTZXRNb2RlbChJRG9jdW1lbnQgdGV4dERvY3VtZW50KSB7Ci0JICAvKgotCSAgICogSVNTVUU6IGlmIG1vZGVsIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIG1vZGVsIGlzIG5vdCAKLQkgICAqIGNoYW5nZWQgYmVjYXVzZSB0aGVyZSBhcmUgbnVtZXJvdXMgcGxhY2VzIHRoYXQgYXNzdW1lIG1vZGVsIAotCSAgICogaXMgbmV2ZXIgbnVsbC4KLQkgICAqLwotCSAgaWYgKHRleHREb2N1bWVudCAhPSBudWxsKSB7Ci0JICAgIERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkgICAgSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JSZWFkKHRleHREb2N1bWVudCk7Ci0JICAgIHRyeSB7Ci0JICAgICAgaWYgKHN0cnVjdHVyZWRNb2RlbCBpbnN0YW5jZW9mIElET01Nb2RlbCkKLQkgICAgICAgIGRvY3VtZW50ID0gKChJRE9NTW9kZWwpc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAgIGlmIChzdHJ1Y3R1cmVkTW9kZWwgIT0gbnVsbCkKLQkgICAgICAgIHN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkgICAgfQotCSAgICBpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJTm9kZU5vdGlmaWVyKSB7Ci0JICAgICAgV1NETE1vZGVsQWRhcHRlciBtb2RlbEFkYXB0ZXIgPSBXU0RMTW9kZWxBZGFwdGVyLmxvb2t1cE9yQ3JlYXRlTW9kZWxBZGFwdGVyKGRvY3VtZW50KTsKLQkgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBtb2RlbEFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb2N1bWVudCk7Ci0JICAgICAgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyIGhlbHBlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpOwotCSAgICAgIG1vZGVsID0gKElEZXNjcmlwdGlvbiloZWxwZXIuYWRhcHQoZGVmaW5pdGlvbik7Ci0JICAgIH0KLQkgIH0KLQl9Ci0JCi0JcHJpdmF0ZSBYU0RTY2hlbWFbXSBnZXRJbmxpbmVTY2hlbWFzKCkgewotCQlMaXN0IHR5cGVzID0gZ2V0TW9kZWwoKS5nZXRUeXBlcygpOwotCQlYU0RTY2hlbWFbXSBzY2hlbWFzID0gbmV3IFhTRFNjaGVtYVt0eXBlcy5zaXplKCldOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlXMTFUeXBlIHR5cGUgPSAoVzExVHlwZSkgdHlwZXMuZ2V0KGluZGV4KTsKLQkJCXNjaGVtYXNbaW5kZXhdID0gKFhTRFNjaGVtYSkgdHlwZS5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYXM7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyB0eXBlKSB7Ci0JCWlmICh0eXBlID09IERlZmluaXRpb24uY2xhc3MpCi0JCXsKLQkJCXJldHVybiAoKFcxMURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJfQotCQllbHNlIGlmICh0eXBlID09IElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpCi0JCXsKLQkJCXJldHVybiBuZXcgV1NETFNlbGVjdGlvbk1hcHBlcigpOwotCQl9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRGVmaW5pdGlvbi5jbGFzcyAmJiBtb2RlbCBpbnN0YW5jZW9mIEFkYXB0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKChBZGFwdGVyKW1vZGVsKS5nZXRUYXJnZXQoKTsgCi0gICAgICAgIH0KLQkJZWxzZSBpZiAodHlwZSA9PSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKSB7Ci0JCQlyZXR1cm4gbmV3IFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcihnZXRFZGl0b3JJbnB1dCgpKTsKLQkJfQotCi0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKQotICAgICAgICB7Ci0gICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKSwgbnVsbCk7Ci0gICAgICAgICAgICByZWZNYW5hZ2VyLnNldFNjaGVtYXMoZ2V0SW5saW5lU2NoZW1hcygpKTsKLSAgICAgICAgICAgIHJldHVybiByZWZNYW5hZ2VyOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IG5ldyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCksIG51bGwpOwotICAgICAgICAgICAgcmVmTWFuYWdlci5zZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVmTWFuYWdlcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgCUlGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgCXJldHVybiBuZXcgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZ2V0TW9kZWwoKSwgZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAJSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgICAgICAJcmV0dXJuIG5ldyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfSAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBnZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIAlyZXR1cm4gbmV3IFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfSAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gSUtleWJvYXJkRHJhZy5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBLZXlib2FyZERyYWdJbXBsKCk7Ci0JCX0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKSB7Ci0gICAgICAgIAlyZXR1cm4gbmV3IFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcihnZXRFZGl0b3JJbnB1dCgpKTsKLSAgICAgICAgfQotCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcih0eXBlKTsKLQl9Ci0JCi0JLyoqCi0JICogTGlzdGVuZXIgb24gU1NFJ3Mgc291cmNlIGVkaXRvcidzIHNlbGVjdGlvbnMgdGhhdCBjb252ZXJ0cyBET00KLQkgKiBzZWxlY3Rpb25zIGludG8geHNkIHNlbGVjdGlvbnMgYW5kIG5vdGlmaWVzIFdTREwgc2VsZWN0aW9uIG1hbmFnZXIKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCS8qKgotCQkgKiBEZXRlcm1pbmVzIFdTREwgZmFjYWRlIG9iamVjdCBiYXNlZCBvbiBET00gbm9kZQotCQkgKiAKLQkJICogQHBhcmFtIG9iamVjdAotCQkgKiBAcmV0dXJuCi0JCSAqLwotCQlwcml2YXRlIE9iamVjdCBnZXRXU0RMRmFjYWRlT2JqZWN0KE9iamVjdCBvYmplY3QpIHsKLQkJCS8vIGdldCB0aGUgZWxlbWVudCBub2RlCi0JCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCQlOb2RlIG5vZGUgPSAoTm9kZSkgb2JqZWN0OwotCQkJCWlmIChub2RlICE9IG51bGwpIHsKLQkJCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCQkJZWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKSB7Ci0JCQkJCQllbGVtZW50ID0gKChBdHRyKSBub2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCU9iamVjdCBvID0gZWxlbWVudDsKLQkJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKLQkJCQlEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBtb2RlbCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJT2JqZWN0IG1vZGVsT2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KGRlZiwgZWxlbWVudCk7Ci0JCQkJCi0JCQkJLy8gcm1haDogV2UgaGFuZGxlIHRoaXMgc3BlY2lhbCBzY2VuYXJpbyB3aGVyZSB0aGUgbW9kZWxPYmplY3QgaXMgYW4gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0JCQkJLy8gV2UgYWN0dWFsbHkgd2FudCB0aGUgWFNEU2NoZW1hIG9iamVjdC4gIEhvd2V2ZXIsIG91ciBub2RlIHJlY29uY2lsZXIgd2lsbCBhbHdheXMgcmV0dXJuCi0JCQkJLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmVjYXVzZSBib3RoIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGFuZCBYU0RTY2hlbWEKLQkJCQkvLyBib3RoIGhhdmUgdGhlIFNBTUUgRWxlbWVudCBvYmplY3QsIGFuZCB0aGUgcmVjb25jaWxlciBlbmNvdW50ZXJzIHRoZSBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudAotCQkJCS8vIGZpcnN0Li4uLiAgU2VlIFdTRExOb2RlTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgZm9yIG1vcmUgZGV0YWlscy4uLi4uCi0JCQkJaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHsKLQkJCQkJbW9kZWxPYmplY3QgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBtb2RlbE9iamVjdCkuZ2V0U2NoZW1hKCk7Ci0JCQkJfQotCQkJCWlmIChtb2RlbE9iamVjdCAhPSBudWxsKSB7Ci0JCQkJCW8gPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpIG1vZGVsT2JqZWN0KTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbzsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmIChnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuZ2V0RW5hYmxlTm90aWZ5KCkgJiYgZ2V0QWN0aXZlUGFnZSgpID09IDEpCi0JCQl7Ci0JCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JCQkJewotCQkJCQlMaXN0IHNlbGVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCWZvciAoSXRlcmF0b3IgaSA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJCQl7Ci0JCQkJCQlPYmplY3QgZG9tTm9kZSA9IGkubmV4dCgpOwotCQkJCQkJT2JqZWN0IGZhY2FkZSA9IGdldFdTRExGYWNhZGVPYmplY3QoZG9tTm9kZSk7Ci0JCQkJCQlpZiAoZmFjYWRlICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJc2VsZWN0aW9ucy5hZGQoZmFjYWRlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkKLQkJCQkJaWYgKCFzZWxlY3Rpb25zLmlzRW1wdHkoKSkKLQkJCQkJewotCQkJCQkJU3RydWN0dXJlZFNlbGVjdGlvbiB3c2RsU2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9ucyk7Ci0JCQkJCQlnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuc2V0U2VsZWN0aW9uKHdzZGxTZWxlY3Rpb24sIGdldFRleHRFZGl0b3IoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBMaXN0ZW5lciBvbiBXU0RMJ3Mgc2VsZWN0aW9uIG1hbmFnZXIncyBzZWxlY3Rpb25zIHRoYXQgY29udmVydHMgV1NETAotCSAqIHNlbGVjdGlvbnMgaW50byBET00gc2VsZWN0aW9ucyBhbmQgbm90aWZpZXMgU1NFJ3Mgc2VsZWN0aW9uIHByb3ZpZGVyCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBXU0RMU2VsZWN0aW9uTWFuYWdlclNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCS8qKgotCQkgKiBEZXRlcm1pbmVzIERPTSBub2RlIGJhc2VkIG9uIG9iamVjdCAod3NkbCBub2RlKQotCQkgKiAKLQkJICogQHBhcmFtIG9iamVjdAotCQkgKiBAcmV0dXJuCi0JCSAqLwotCQlwcml2YXRlIE9iamVjdCBnZXRPYmplY3RGb3JPdGhlck1vZGVsKE9iamVjdCBvYmplY3QpIHsKLQkJCU5vZGUgbm9kZSA9IG51bGw7Ci0JCQkKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQkJbm9kZSA9IChOb2RlKSBvYmplY3Q7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCQkvLyBUaGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGEgVVJJIGZyYWdtZW50IHVzZWQgdG8gaWRlbnRpZnkgYSBXU0RMIGVsZW1lbnQuCi0JCQkJLy8gVGhlIFVSSSBmcmFnbWVudCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGRlZmluaXRpb24gYmVpbmcgZWRpdGVkIGluIHRoaXMgZWRpdG9yLgotCQkJCVN0cmluZyB1cmlGcmFnbWVudCA9IChTdHJpbmcpb2JqZWN0OwotCQkJCUVPYmplY3QgZGVmaW5pdGlvbiA9ICgoRGVmaW5pdGlvbikoKFcxMURlc2NyaXB0aW9uKWdldE1vZGVsKCkpLmdldFRhcmdldCgpKTsKLQkJCQlFT2JqZWN0IG1vZGVsT2JqZWN0ID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKS5nZXRFT2JqZWN0KHVyaUZyYWdtZW50KTsKLQotCQkJCWlmIChtb2RlbE9iamVjdCAhPSBudWxsKSB7Ci0JCQkJCW5vZGUgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldE5vZGVGb3JPYmplY3QobW9kZWxPYmplY3QpOwotCQkJCX0gICAgICAgIAotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbm9kZSA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0Tm9kZUZvck9iamVjdChvYmplY3QpOwotCQkJfQotCQkJCi0JCQkvLyB0aGUgdGV4dCBlZGl0b3IgY2FuIG9ubHkgYWNjZXB0IHNlZCBub2RlcyEKLQkJCS8vCi0JCQlpZiAoIShub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpKSB7Ci0JCQkJbm9kZSA9IG51bGw7Ci0JCQl9Ci0JCQlyZXR1cm4gbm9kZTsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCS8vIGRvIG5vdCBmaXJlIHNlbGVjdGlvbiBpbiBzb3VyY2UgZWRpdG9yIGlmIHRoZSBjdXJyZW50IGFjdGl2ZSBwYWdlIGlzIHRoZSBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgKHNvdXJjZSkKLQkJCS8vIFdlIG9ubHkgd2FudCB0byBtYWtlIHNvdXJjZSBzZWxlY3Rpb25zIGlmIHRoZSBhY3RpdmUgcGFnZSBpcyBlaXRoZXIgdGhlIG91dGxpbmUgb3IgcHJvcGVydGllcyAoYSBtb2RpZnkKLQkJCS8vIGhhcyBiZWVuIGRvbmUgdmlhIHRoZSBvdXRsaW5lIG9yIHByb3BlcnRpZXMgYW5kIG5vdCB0aGUgc291cmNlIHZpZXcpLiAgV2UgZG9uJ3Qgd2FudCB0byBiZSBzZWxlY3RpbmcKLQkJCS8vIGFuZCB1bnNlbGVjdGluZyB0aGluZ3MgaW4gdGhlIHNvdXJjZSB3aGVuIGVkaXRpbmcgaW4gdGhlIHNvdXJjZSEhCi0JCQlib29sZWFuIG1ha2VTZWxlY3Rpb24gPSB0cnVlOwotCQkJaWYgKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpICE9IG51bGwgICYmICEoZXZlbnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBJUG9zdFNlbGVjdGlvblByb3ZpZGVyKSkgewotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlpZiAocGFnZS5nZXRBY3RpdmVQYXJ0KCkgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHsKLQkJCQkJaWYgKGdldEFjdGl2ZUVkaXRvcigpIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCW1ha2VTZWxlY3Rpb24gPSBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJLy8gZG8gbm90IGZpcmUgc2VsZWN0aW9uIGluIHNvdXJjZSBlZGl0b3IgaWYgc2VsZWN0aW9uIGV2ZW50IGNhbWUKLQkJCS8vIGZyb20gc291cmNlIGVkaXRvcgotCQkJCWlmIChldmVudC5nZXRTb3VyY2UoKSAhPSBnZXRUZXh0RWRpdG9yKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKSAmJiBtYWtlU2VsZWN0aW9uKSB7Ci0JCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJTGlzdCBvdGhlck1vZGVsT2JqZWN0TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJZm9yIChJdGVyYXRvciBpID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQkJCU9iamVjdCB3c2RsT2JqZWN0ID0gaS5uZXh0KCk7Ci0KLQkJCQkJCWlmICh3c2RsT2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQkJCQkJd3NkbE9iamVjdCA9ICgoV1NETEJhc2VBZGFwdGVyKSB3c2RsT2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQkJCX0KLQotCQkJCQkJT2JqZWN0IG90aGVyTW9kZWxPYmplY3QgPSBnZXRPYmplY3RGb3JPdGhlck1vZGVsKHdzZGxPYmplY3QpOwotCQkJCQkJaWYgKG90aGVyTW9kZWxPYmplY3QgIT0gbnVsbCkgewotCQkJCQkJCW90aGVyTW9kZWxPYmplY3RMaXN0LmFkZChvdGhlck1vZGVsT2JqZWN0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAoIW90aGVyTW9kZWxPYmplY3RMaXN0LmlzRW1wdHkoKSkgewotCQkJCQkJU3RydWN0dXJlZFNlbGVjdGlvbiBub2RlU2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob3RoZXJNb2RlbE9iamVjdExpc3QpOwotCQkJCQkJZ2V0VGV4dEVkaXRvcigpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuc2V0U2VsZWN0aW9uKG5vZGVTZWxlY3Rpb24pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZUdyYXBoaWNhbFZpZXdlcigpIHsKLQkJc3VwZXIuY29uZmlndXJlR3JhcGhpY2FsVmlld2VyKCk7Ci0JCWdyYXBoaWNhbFZpZXdlci5nZXRLZXlIYW5kbGVyKCkucHV0KEtleVN0cm9rZS5nZXRQcmVzc2VkKFNXVC5GMiwgMCksIGdldEFjdGlvblJlZ2lzdHJ5KCkuZ2V0QWN0aW9uKEdFRkFjdGlvbkNvbnN0YW50cy5ESVJFQ1RfRURJVCkpOwotCQlzZXRFZGl0UGFydEZhY3RvcnkoZ2V0RWRpdG9yTW9kZU1hbmFnZXIoKS5nZXRDdXJyZW50TW9kZSgpLmdldEVkaXRQYXJ0RmFjdG9yeSgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlUGFnZXMoKSB7Ci0JCXN1cGVyLmNyZWF0ZVBhZ2VzKCk7Ci0JCQotCQlpZiAocmVzb3VyY2VDaGFuZ2VIYW5kbGVyID09IG51bGwpIHsKLQkJCXJlc291cmNlQ2hhbmdlSGFuZGxlciA9IG5ldyBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyKHRoaXMpOwotCQkJcmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmF0dGFjaCgpOwotCQl9Ci0JCQotCQlmU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQkJSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gZ2V0VGV4dEVkaXRvcigpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7Ci0JCWlmIChwcm92aWRlciBpbnN0YW5jZW9mIElQb3N0U2VsZWN0aW9uUHJvdmlkZXIpIHsKLQkJCSgoSVBvc3RTZWxlY3Rpb25Qcm92aWRlcikgcHJvdmlkZXIpLmFkZFBvc3RTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJfQotCQllbHNlIHsKLQkJCXByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIpOwotCQl9Ci0JCQotCQlmV1NETFNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IFdTRExTZWxlY3Rpb25NYW5hZ2VyU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQkJZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmV1NETFNlbGVjdGlvbkxpc3RlbmVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKHJlc291cmNlQ2hhbmdlSGFuZGxlciAhPSBudWxsKSB7Ci0JCQlyZXNvdXJjZUNoYW5nZUhhbmRsZXIuZGlzcG9zZSgpOwotCQl9Ci0JCWdldFNlbGVjdGlvbk1hbmFnZXIoKS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZldTRExTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVsb2FkRGVwZW5kZW5jaWVzKCkgewotCQl0cnkgewotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pICgoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCkpLmdldFRhcmdldCgpOwotCQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotCQkJCVdTRExSZXNvdXJjZVV0aWwucmVsb2FkRGlyZWN0aXZlcyhkZWZpbml0aW9uKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnVwZGF0ZUJpbmRpbmdSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwudXBkYXRlUG9ydFR5cGVSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwudXBkYXRlTWVzc2FnZVJlZmVyZW5jZXMoZGVmaW5pdGlvbik7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC51cGRhdGVTY2hlbWFSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCS8vIHRoZSBsaW5lIGJlbG93IHNpbXBseSBjYXVzZXMgYSBub3RpZmljYXRpb24gaW4gb3JkZXIgdG8KLQkJCQkvLyB1cGRhdGUgb3VyCi0JCQkJLy8gdmlld3MKLQkJCQkvLwotCQkJCWRlZmluaXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUFjdGlvbnMoKSB7Ci0JCXN1cGVyLmNyZWF0ZUFjdGlvbnMoKTsKLQotICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0QWN0aW9uUmVnaXN0cnkoKTsKLSAgICBCYXNlU2VsZWN0aW9uQWN0aW9uIGFjdGlvbjsKLSAgICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkpIHsKLQkgICAgYWN0aW9uID0gbmV3IEFTREFkZE1lc3NhZ2VBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFBZGRQYXJ0QWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXROZXdNZXNzYWdlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXROZXdUeXBlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldE5ld0VsZW1lbnRBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldEV4aXN0aW5nRWxlbWVudEFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotCSAgICBQcmludEFjdGlvbiBwcmludEFjdGlvbiA9IG5ldyBQcmludEFjdGlvbih0aGlzKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24ocHJpbnRBY3Rpb24pOwotCSAgICAKLSAgICAgIEFTRERpcmVjdEVkaXRBY3Rpb24gZGlyZWN0RWRpdEFjdGlvbiA9IG5ldyBBU0REaXJlY3RFZGl0QWN0aW9uKHRoaXMpOwotICAgICAgZGlyZWN0RWRpdEFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oZGlyZWN0RWRpdEFjdGlvbik7Ci0gICAgfQotICAgIGFjdGlvbiA9IG5ldyBXMTFPcGVuSW1wb3J0QWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICBhY3Rpb24gPSBuZXcgT3BlbkluTmV3RWRpdG9yKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0VESVRPUl9NT0RFX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRlZmF1bHRFZGl0b3JNb2RlSWQiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcm90ZWN0ZWQgRWRpdG9yTW9kZU1hbmFnZXIgY3JlYXRlRWRpdG9yTW9kZU1hbmFnZXIoKQotICB7Ci0gICAgZmluYWwgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpZ2V0QWRhcHRlcihQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gbmV3IEVkaXRvck1vZGVNYW5hZ2VyKFdTRExfRURJVE9SX01PREVfRVhURU5TSU9OX0lEKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGluaXQoKQotICAgICAgewotICAgICAgICBpZiAocHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9PSBudWxsIHx8IAotICAgICAgICAgICAgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5pc0VkaXRvck1vZGVBcHBsaWNhYmxlKERlZmF1bHRFZGl0b3JNb2RlLklEKSkKLSAgICAgICAgeyAgICAgICAgICAKLSAgICAgICAgICBhZGRNb2RlKG5ldyBEZWZhdWx0RWRpdG9yTW9kZSgpKTsKLSAgICAgICAgfSAgCi0gICAgICAgIHN1cGVyLmluaXQoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcHJvdGVjdGVkIEVkaXRvck1vZGUgZ2V0RGVmYXVsdE1vZGUoKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGVmYXVsdE1vZGVJZCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoREVGQVVMVF9FRElUT1JfTU9ERV9JRCk7Ci0gICAgICAgIGlmIChkZWZhdWx0TW9kZUlkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBFZGl0b3JNb2RlIGVkaXRvck1vZGUgPSBnZXRFZGl0b3JNb2RlKGRlZmF1bHRNb2RlSWQpOwotICAgICAgICAgIGlmIChlZGl0b3JNb2RlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVkaXRvck1vZGU7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldERlZmF1bHRNb2RlKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfTsKLSAgICBtYW5hZ2VyLnNldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIocHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcik7Ci0gICAgcmV0dXJuIG1hbmFnZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGVkaXRvck1vZGVDaGFuZ2VkKEVkaXRvck1vZGUgbmV3RWRpdG9yTW9kZSkKLSAgewotICAgIEVkaXRQYXJ0RmFjdG9yeSBlZGl0UGFydEZhY3RvcnkgPSBuZXdFZGl0b3JNb2RlLmdldEVkaXRQYXJ0RmFjdG9yeSgpOwotICAgIGlmIChlZGl0UGFydEZhY3RvcnkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGdyYXBoaWNhbFZpZXdlci5zZXRFZGl0UGFydEZhY3RvcnkoZWRpdFBhcnRGYWN0b3J5KTsKLSAgICAgIGlmIChncmFwaGljYWxWaWV3ZXIgaW5zdGFuY2VvZiBEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyKQotICAgICAgeyAgCi0gICAgICAgIERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIgdmlld2VyID0gKERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIpZ3JhcGhpY2FsVmlld2VyOwotICAgICAgICBEZWZpbml0aW9uc0VkaXRQYXJ0IGVkaXRQYXJ0ID0gKERlZmluaXRpb25zRWRpdFBhcnQpdmlld2VyLmdldFJvb3RFZGl0UGFydCgpLmdldENvbnRlbnRzKCk7Ci0gICAgICAgIGVkaXRQYXJ0LnNldE1vZGVsQ2hpbGRyZW4oQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7Ci0gICAgICAgIGVkaXRQYXJ0LnJlZnJlc2goKTsKLSAgICAgICAgZWRpdFBhcnQuc2V0TW9kZWxDaGlsZHJlbihudWxsKTsKLSAgICAgICAgZWRpdFBhcnQucmVmcmVzaCgpOyAgICAgICAgCi0gICAgICB9Ci0gICAgfSAgCi0gICAgSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciA9IG5ld0VkaXRvck1vZGUuZ2V0T3V0bGluZVByb3ZpZGVyKCk7Ci0gICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgewotICAgICAgQVNEQ29udGVudE91dGxpbmVQYWdlIG91dGxpbmUgPSAoQVNEQ29udGVudE91dGxpbmVQYWdlKWdldENvbnRlbnRPdXRsaW5lUGFnZSgpOwotICAgICAgaWYgKG91dGxpbmUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVHJlZVZpZXdlciB0cmVlVmlld2VyID0gb3V0bGluZS5nZXRUcmVlVmlld2VyKCk7Ci0gICAgICAgIGlmICh0cmVlVmlld2VyICE9IG51bGwpCi0gICAgICAgIHsgICAgICAKLSAgICAgICAgICBvdXRsaW5lLmdldFRyZWVWaWV3ZXIoKS5zZXRDb250ZW50UHJvdmlkZXIocHJvdmlkZXIpOwotICAgICAgICAgIG91dGxpbmUuZ2V0VHJlZVZpZXdlcigpLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgfSAgCi0KLSAgICB9ICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgc3RvcmVDdXJyZW50TW9kZVByZWZlcmVuY2UoU3RyaW5nIGlkKQotICB7Ci0gICAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKERFRkFVTFRfRURJVE9SX01PREVfSUQsIGlkKTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHNldElucHV0VG9HcmFwaGljYWxWaWV3ZXIoSURvY3VtZW50IG5ld0RvY3VtZW50KQotICB7Ci0gICAgY3JlYXRlQW5kU2V0TW9kZWwobmV3RG9jdW1lbnQpOwotICAgIAotICAgIC8vIFVwZGF0ZSB0aGUgZGVzaWduIHBhZ2UKLSAgICAKLSAgICBpZiAoZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgewotICAgICAgZ3JhcGhpY2FsVmlld2VyLnNldENvbnRlbnRzKG1vZGVsKTsKLSAgICAgIGdyYXBoaWNhbFZpZXdlci5nZXRDb250ZW50cygpLnJlZnJlc2goKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVXBkYXRlIG91dGxpbmUgcGFnZQotICAgIAotICAgIGlmIChnZXRDb250ZW50T3V0bGluZVBhZ2UoKSBpbnN0YW5jZW9mIEFTRENvbnRlbnRPdXRsaW5lUGFnZSkKLSAgICB7Ci0gICAgICBBU0RDb250ZW50T3V0bGluZVBhZ2Ugb3V0bGluZSA9IChBU0RDb250ZW50T3V0bGluZVBhZ2UpZ2V0Q29udGVudE91dGxpbmVQYWdlKCk7Ci0gICAgICBUcmVlVmlld2VyIHRyZWVWaWV3ZXIgPSBvdXRsaW5lLmdldFRyZWVWaWV3ZXIoKTsKLSAgICAgIGlmICh0cmVlVmlld2VyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG91dGxpbmUuc2V0TW9kZWwobW9kZWwpOwotICAgICAgICB0cmVlVmlld2VyLnNldElucHV0KG1vZGVsKTsKLSAgICAgICAgdHJlZVZpZXdlci5yZWZyZXNoKCk7Ci0gICAgICB9IAotICAgIH0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuRWRpdG9yUGFydCNkb1NhdmUob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCi0gICAqLwotICBwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICB7Ci0gICAgV1NETEltcG9ydE1hbmFnZXIucmVtb3ZlVW51c2VkSW1wb3J0cygoRGVmaW5pdGlvbilnZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpKTsKLSAgICBzdXBlci5kb1NhdmUobW9uaXRvcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkb1NhdmVBcygpCi0gIHsKLSAgICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBzYXZlIGFzLCB0aGUgZG9jdW1lbnQgY2hhbmdlcy4gICBPdXIgbW9kZWwgc3RhdGUgbGlzdGVuZXJzIHNob3VsZCBsaXN0ZW4KLSAgICAvLyB0byB0aGUgbmV3IGRvY3VtZW50LgotCi0gICAgLy8gRmlyc3QgZ2V0IHRoZSBjdXJyZW50IChzb29uIHRvIGJlIG9sZCkgZG9jdW1lbnQKLSAgICBJRG9jdW1lbnQgb2xkRG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOwotICAgIFdTRExNb2RlbEFkYXB0ZXIgb2xkQWRhcHRlciA9IG51bGw7Ci0gICAgSURPTURvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgaWYgKG9sZERvY3VtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JSZWFkKG9sZERvY3VtZW50KTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAoc3RydWN0dXJlZE1vZGVsIGluc3RhbmNlb2YgSURPTU1vZGVsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBhc3NvY2lhdGVkIElET01Eb2N1bWVudCBtb2RlbAotICAgICAgICAgIGRvYyA9ICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0gICAgICAgICAgLy8gYW5kIG5vdyBnZXQgb3VyIGFkYXB0ZXIgdGhhdCBsaXN0ZW5zIHRvIERPTSBjaGFuZ2VzCi0gICAgICAgICAgaWYgKGRvYyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9sZEFkYXB0ZXIgPSAoV1NETE1vZGVsQWRhcHRlcikgZG9jLmdldEV4aXN0aW5nQWRhcHRlcihXU0RMTW9kZWxBZGFwdGVyLmNsYXNzKTsKLSAgICAgICAgICAgIC8vIEFzc2VydC5pc1RydWUoY3VycmVudEFkYXB0ZXIgPT0gbW9kZWxBZGFwdGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZWRNb2RlbCAhPSBudWxsKQotICAgICAgICAgIHN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBJRWRpdG9ySW5wdXQgb2xkRWRpdG9ySW5wdXQgPSBzdHJ1Y3R1cmVkVGV4dEVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotCi0gICAgLy8gcGVyZm9ybSBzYXZlIGFzCi0gICAgc3RydWN0dXJlZFRleHRFZGl0b3IuZG9TYXZlQXMoKTsKLSAgICAKLSAgICBJRWRpdG9ySW5wdXQgbmV3RWRpdG9ySW5wdXQgPSBzdHJ1Y3R1cmVkVGV4dEVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotCi0gICAgLy8gaWYgc2F2ZUFzIGNhbmNlbGxlZCB0aGVuIGRvbid0IHNldElucHV0IGJlY2F1c2UgdGhlIGlucHV0IGhhc24ndCBjaGFuZ2UKLSAgICAvLyBTZWUgQWJzdHJhY3REZWNvcmF0ZWRUZXh0RWRpdG9yJ3MgcGVyZm9ybVNhdmVBcwotICAgIGlmIChvbGRFZGl0b3JJbnB1dCAhPSBuZXdFZGl0b3JJbnB1dCkKLSAgICB7Ci0gICAgICBzZXRJbnB1dChuZXdFZGl0b3JJbnB1dCk7Ci0gICAgICBzZXRQYXJ0TmFtZShuZXdFZGl0b3JJbnB1dC5nZXROYW1lKCkpOwotICAgICAgCi0gICAgICBnZXRDb21tYW5kU3RhY2soKS5tYXJrU2F2ZUxvY2F0aW9uKCk7Ci0KLSAgICAgIC8vIE5vdyBkbyB0aGUgY2xlYW4gdXAgb24gdGhlIG9sZCBkb2N1bWVudAotICAgICAgaWYgKG9sZEFkYXB0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gY2xlYXIgb3V0IG1vZGVsIGFkYXB0ZXIKLSAgICAgICAgb2xkQWRhcHRlci5jbGVhcigpOwotICAgICAgICBvbGRBZGFwdGVyID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgc291cmNlLCBpbnQgcHJvcElkKQotICB7Ci0gICAgc3dpdGNoIChwcm9wSWQpCi0gICAgewotICAgICAgLy8gd2hlbiByZWZhY3RvciByZW5hbWUgd2hpbGUgZmlsZSBpcyBvcGVuIGluIGVkaXRvciwgbmVlZCB0byByZXNldAotICAgICAgLy8gZWRpdG9yIGNvbnRlbnRzIHRvIHJlZmxlY3QgbmV3IGRvY3VtZW50Ci0gICAgICBjYXNlIElFZGl0b3JQYXJ0LlBST1BfSU5QVVQ6Ci0gICAgICB7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7ICAgICAgICAKLSAgICAgICAgaWYgKHNvdXJjZSA9PSBzdHJ1Y3R1cmVkVGV4dEVkaXRvciAmJiBkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0RXhpc3RpbmdNb2RlbEZvclJlYWQoZ2V0RG9jdW1lbnQoKSk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZWRNb2RlbCBpbnN0YW5jZW9mIElET01Nb2RlbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnQgZGVmaW5pdGlvbkRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgICAgICAgICAgICBEb2N1bWVudCBkb21Nb2RlbERvY3VtZW50ID0gKChJRE9NTW9kZWwpc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpOwotICAgICAgICAgICAgICAvLyBpZiBkb20gZG9jdW1lbnRzIGFyZSBub3QgdGhlIHNhbWUsIHRoZXkgbmVlZCB0byBiZSByZXNldAotICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbkRvY3VtZW50ICE9IGRvbU1vZGVsRG9jdW1lbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXU0RMTW9kZWxBZGFwdGVyIG9sZE1vZGVsQWRhcHRlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZmluaXRpb25Eb2N1bWVudCBpbnN0YW5jZW9mIElET01Eb2N1bWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBzYXZlIHRoaXMgbW9kZWwgYWRhcHRlciBmb3IgY2xlYW51cCBsYXRlcgotICAgICAgICAgICAgICAgICAgb2xkTW9kZWxBZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpICgoSURPTURvY3VtZW50KWRlZmluaXRpb25Eb2N1bWVudCkuZ2V0RXhpc3RpbmdBZGFwdGVyKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBtdWx0aXBhZ2UgZWRpdG9yIHdpdGggbmV3IGVkaXRvciBpbnB1dAotICAgICAgICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IHN0cnVjdHVyZWRUZXh0RWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICAgICAgc2V0SW5wdXQoZWRpdG9ySW5wdXQpOwotICAgICAgICAgICAgICAgIHNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZ2V0Q29tbWFuZFN0YWNrKCkubWFya1NhdmVMb2NhdGlvbigpOwotCi0gICAgICAgICAgICAgICAgLy8gTm93IGRvIHRoZSBjbGVhbiB1cCBtb2RlbCBhZGFwdGVyCi0gICAgICAgICAgICAgICAgaWYgKG9sZE1vZGVsQWRhcHRlciAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG9sZE1vZGVsQWRhcHRlci5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgb2xkTW9kZWxBZGFwdGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZmluYWxseQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucHJvcGVydHlDaGFuZ2VkKHNvdXJjZSwgcHJvcElkKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmNiNTRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JLyoqCi0JICogQGRlcHJlY2F0ZWQ6IFVzZSBNZXNzYWdlcy5fU1RSSU5HX0tFWSB0byBhY2Nlc3Mgc3RyaW5ncy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgewotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAZGVwcmVjYXRlZDogVXNlIE1lc3NhZ2VzLl9TVFJJTkdfS0VZIHRvIGFjY2VzcyBzdHJpbmdzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBTdHJpbmcgYXJnMCkgewotCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIG5ldyBPYmplY3QgW10geyBhcmcwIH0pOwotCX0KLQotCS8qKgotCSAqIEBkZXByZWNhdGVkOiBVc2UgTWVzc2FnZXMuX1NUUklOR19LRVkgdG8gYWNjZXNzIHN0cmluZ3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBhcmdzKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VESVRPUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9ERVBFTkRFTkNJRVNfQ0hBTkdFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfREVQRU5ERU5DSUVTX0NIQU5HRURfUkVGUkVTSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRURJVF9OQU1FU1BBQ0VTX0RJQUxPR19USVRMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0NSRUFUSU5HX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SRU1FTUJFUl9NWV9ERUNJU0lPTl9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0RFRkFVTFRfUFJFRklYOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QUkVGX0dFTkVSQVRFX1NFUEFSQVRFX0lOVEVSRkFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0lOVEVSRkFDRV9ERUZBVUxUX1BSRUZJWDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0lOVEVSRkFDRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9JTlRFUkZBQ0VfRklMRV9TVUZGSVg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xJTktfVEVYVF9NT0RJRllfREVGQVVMVF9WQUxVRVNfU0VUVElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkVHRU5fQklORElOR1NfT05fU0FWRV9RVUVTVElPTk1BUks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1dBUk5JTkdfRFVQTElDQVRFX05BTUVfRVhJU1RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0FVVE9fUkVHRU5FUkFURV9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0VOQUJMRV9BVVRPX0lNUE9SVF9DTEVBTlVQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QUkVGX1BBR0VfRU5BQkxFX0FVVE9fT1BFTl9JTVBPUlRfRElBTE9HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FRElUX05BTUVTUEFDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfUEFSVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9YTUxfU0NIRU1BX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9SRU9SREVSX1BBUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9SRU9SREVSX01FU1NBR0VfUkVGRVJFTkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fT1BFTl9JTl9ORVdfRURJVE9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VYSVNUSU5HX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VSUk9SX05BTUVTUEFDRV9JTlZBTElEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FUlJPUl9GSUxFX0FMUkVBRFlfRVhJU1RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SRUdFTl9CSU5ESU5EU19PTl9TQVZFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SQURJT19ET0NVTUVOVF9MSVRFUkFMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TUEVDSUZZX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9JTkxJTkVfU0NIRU1BX09GOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UQVJHRVRfTkFNRVNQQUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9QUkVGSVhfV0lUSF9DT0xPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQ1JFQVRFX1dTRExfU0tFTEVUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0NSRUFURV9ORVdfV1NETF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9TT0FQX0JJTkRJTkdfT1BUSU9OUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfSFRUUF9CSU5ESU5HX09QVElPTlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0FERF9FWFRFTlNJT05fRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFNfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTX1RPX0JFX0NSRUFURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05FV19CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9ORVdfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1JFRkVSRU5DRV9LSU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9ORVdfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkFESU9fUlBDX0VOQ09ERUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JBRElPX1JQQ19MSVRFUkFMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NQRUNJRllfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VSUk9SX0ZJTEVfTVVTVF9FTkRfV0lUSF9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TUEVDSUZZX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX05FV19XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1JFTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX1RZUEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9DQU5DRUxfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9ORVdfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfSU1QT1JUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX1NFUlZJQ0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfQklORElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9JTlRFUkZBQ0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfUE9SVFRZUEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfTUVTU0FHRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9ORVdfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TRVRfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9DSEVDS0JPWF9PVkVSV1JJVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TRVRfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FRElUX1BPUlRfQUREUkVTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX09QRU5fSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9VTlNQRUNJRklFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQlVUVE9OX05FVzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQlVUVE9OX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQklORElOR19XSVpBUkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1JFTU9WRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU0VMRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TRUxFQ1RfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfREVTQ1JJUFRJT05fU0VMRUNUX1dTRExfT1JfWFNEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9PUFRJT05TOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9ZRVNfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BPUlRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUE9SVF9XSVpBUkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX05PX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BREQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0hFTFA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05BTUVfRklMVEVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX05BTUVfTVVTVF9DT05UQUlOX0FUX0xFQVNUX09ORV9DSEFSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX05BTUVfSEFTX1NQQUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX05BTUVfSU5WQUxJRF9GSVJTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfREVGQVVMVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV1NJX0NPTVBMSUFOQ0VfTElOS19URVhUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX1dTSV9DT01QTElBTkNFX1BST1RPQ09MOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9FUlJPUl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfVU5ERUZJTkVEX0FSRzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX09SX1VOREVGSU5FRF9BUkcyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OT19PQkpFQ1RfU1BFQ0lGSUVEX0FSRzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05PX1BBUkFNRVRFUlNfU1BFQ0lGSUVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElOVEVSRkFDRV9IRUFERVJfVEVYVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfSFRUUF9HRVRfUkFESU87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0hUVFBfUE9TVF9SQURJTzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElOR19QUk9UT0NPTF9JTl9QUk9QRVJUSUVTX1NFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0VMRU1FTlRfUkFESU87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1RZUEVfUkFESU87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1JlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1JlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMmM0MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9SZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBSZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZSBleHRlbmRzIEFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlCi17Ci0JcHJpdmF0ZSBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcjsKLQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJQWN0aW9uIGFjdGlvbiwgSUVkaXRvclBhcnQgdGFyZ2V0RWRpdG9yKQotCXsKLQkJd3NkbEVkaXRvciA9ICh0YXJnZXRFZGl0b3IgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpID8gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcil0YXJnZXRFZGl0b3IgOiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLQl7Ci0JCWlmICh3c2RsRWRpdG9yICE9IG51bGwpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCXdzZGxFZGl0b3IucmVsb2FkRGVwZW5kZW5jaWVzKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmZTI3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkRWRpdG9yQWN0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotCi1wdWJsaWMgY2xhc3MgU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IgZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBpbXBsZW1lbnRzIElFeHRlbmRlZENvbnRyaWJ1dG9yIHsKLQotCXByb3RlY3RlZCBJRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IgZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgPSBudWxsOwotCXByb3RlY3RlZCBJRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3Igc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgPSBudWxsOwotCXByb3RlY3RlZCBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgbXVsdGlQYWdlRWRpdG9yID0gbnVsbDsKLQotCS8vIEVkaXRvckV4dGVuc2lvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSUV4dGVuZGVkQ29udHJpYnV0b3IgZXh0ZW5kZWRDb250cmlidXRvcjsKLQotCXB1YmxpYyBTb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcigpIHsKLQkJc3VwZXIoKTsKLQotCQlzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG5ldyBTb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IoKTsKLQotCQkvLyBSZWFkIGFjdGlvbiBleHRlbnNpb25zLgotCQlFeHRlbmRlZEVkaXRvckFjdGlvbkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBFeHRlbmRlZEVkaXRvckFjdGlvbkJ1aWxkZXIoKTsKLQkJZXh0ZW5kZWRDb250cmlidXRvciA9IGJ1aWxkZXIucmVhZEFjdGlvbkV4dGVuc2lvbnMoRURJVE9SX0lEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKLQkJc3VwZXIuaW5pdChhY3Rpb25CYXJzKTsKLQotCQlpZiAoYWN0aW9uQmFycyAhPSBudWxsKSB7Ci0JCQlpbml0RGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IoYWN0aW9uQmFycyk7Ci0JCQlpbml0U291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IoYWN0aW9uQmFycyk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0RGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmluaXQoYWN0aW9uQmFycywgZ2V0UGFnZSgpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0U291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmluaXQoYWN0aW9uQmFycywgZ2V0UGFnZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0KLQkJaWYgKGRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5kaXNwb3NlKCk7Ci0KLQkJaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5kaXNwb3NlKCk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciNjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0JCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudSk7Ci0KLQkJYWRkVG9NZW51KG1lbnUpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb01lbnUobWVudSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9NZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJRXh0ZW5kZWRDb250cmlidXRvciNjb250cmlidXRlVG9Qb3B1cE1lbnUoSU1lbnVNYW5hZ2VyKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIGNvbnRyaWJ1dGVUb1BvcHVwTWVudShJTWVudU1hbmFnZXIgbWVudSkgewotCi0JCWFkZFRvUG9wdXBNZW51KG1lbnUpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb1BvcHVwTWVudShtZW51KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUb1BvcHVwTWVudShJTWVudU1hbmFnZXIgbWVudSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciNjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgewotCQlzdXBlci5jb250cmlidXRlVG9Ub29sQmFyKHRvb2xCYXJNYW5hZ2VyKTsKLQotCQlhZGRUb1Rvb2xCYXIodG9vbEJhck1hbmFnZXIpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb1Rvb2xCYXIodG9vbEJhck1hbmFnZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZFRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IjY29udHJpYnV0ZVRvU3RhdHVzTGluZShJU3RhdHVzTGluZU1hbmFnZXIpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgY29udHJpYnV0ZVRvU3RhdHVzTGluZShJU3RhdHVzTGluZU1hbmFnZXIgbWFuYWdlcikgewotCQlzdXBlci5jb250cmlidXRlVG9TdGF0dXNMaW5lKG1hbmFnZXIpOwotCi0JCWFkZFRvU3RhdHVzTGluZShtYW5hZ2VyKTsKLQotCQlpZiAoZXh0ZW5kZWRDb250cmlidXRvciAhPSBudWxsKQotCQkJZXh0ZW5kZWRDb250cmlidXRvci5jb250cmlidXRlVG9TdGF0dXNMaW5lKG1hbmFnZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZFRvU3RhdHVzTGluZShJU3RhdHVzTGluZU1hbmFnZXIgbWFuYWdlcikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSUV4dGVuZGVkQ29udHJpYnV0b3IjdXBkYXRlVG9vbGJhckFjdGlvbnMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHVwZGF0ZVRvb2xiYXJBY3Rpb25zKCkgewotCQlpZiAoZXh0ZW5kZWRDb250cmlidXRvciAhPSBudWxsKQotCQkJZXh0ZW5kZWRDb250cmlidXRvci51cGRhdGVUb29sYmFyQWN0aW9ucygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJLy8gc2F2ZSBtdWx0aVBhZ2VFZGl0b3IgYmVmb3JlIGNhbGxpbmcgc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHRhcmdldEVkaXRvcikKLQkJLy8gc3VwZXIuc2V0QWN0aXZlRWRpdG9yIHdpbGwgY2FsbCBzZXRBY3RpdmVQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikKLQkJLy8gbXVsdGlQYWdlRWRpdG9yIGlzIG5lZWRlZCBpbiBzZXRBY3RpdmVQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikKLQkJaWYgKHRhcmdldEVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLQkJCW11bHRpUGFnZUVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHRhcmdldEVkaXRvcjsKLQotCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IodGFyZ2V0RWRpdG9yKTsKLQotCQl1cGRhdGVUb29sYmFyQWN0aW9ucygpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcih0YXJnZXRFZGl0b3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKSB7Ci0JCS8vIFRoaXMgY29udHJpYnV0b3IgaXMgZGVzaWduZWQgZm9yIFN0cnVjdHVyZWRUZXh0TXVsdGlQYWdlRWRpdG9yUGFydC4KLQkJLy8gVG8gc2FmZS1ndWFyZCB0aGlzIGZyb20gcHJvYmxlbXMgY2F1c2VkIGJ5IHVuZXhwZWN0ZWQgdXNhZ2UgYnkgb3RoZXIgZWRpdG9ycywgdGhlIGZvbGxvd2luZwotCQkvLyBjaGVjayBpcyBhZGRlZC4KLQkJaWYgKG11bHRpUGFnZUVkaXRvciAhPSBudWxsKSB7Ci0JCQlpZiAoYWN0aXZlRWRpdG9yICE9IG51bGwgJiYgYWN0aXZlRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpCi0JCQkJYWN0aXZhdGVTb3VyY2VQYWdlKGFjdGl2ZUVkaXRvcik7Ci0JCQllbHNlCi0JCQkJYWN0aXZhdGVEZXNpZ25QYWdlKGFjdGl2ZUVkaXRvcik7Ci0JCX0KLQotCQl1cGRhdGVUb29sYmFyQWN0aW9ucygpOwotCi0JCUlBY3Rpb25CYXJzIGFjdGlvbkJhcnMgPSBnZXRBY3Rpb25CYXJzKCk7Ci0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCS8vIHVwZGF0ZSBtZW51IGJhciBhbmQgdG9vbCBiYXIKLQkJCWFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVEZXNpZ25QYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikgewotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciBpbnN0YW5jZW9mIElEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKG11bHRpUGFnZUVkaXRvcik7Ci0JCX0KLQotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciBpbnN0YW5jZW9mIElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJLy8gaWYgZGVzaWduIHBhZ2UgaXMgbm90IHJlYWxseSBhbiBJRWRpdG9yUGFydCwgYWN0aXZlRWRpdG9yID09IG51bGwsIHNvIHBhc3MgaW4gbXVsdGlQYWdlRWRpdG9yIGluc3RlYWQgKGQyODI0MTQpCi0JCQlpZiAoYWN0aXZlRWRpdG9yID09IG51bGwpIHsKLQkJCQlzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5zZXRBY3RpdmVFZGl0b3IobXVsdGlQYWdlRWRpdG9yKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihhY3RpdmVFZGl0b3IpOwotCQkJfQotCQkJKChJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKS5zZXRWaWV3ZXJTcGVjaWZpY0NvbnRyaWJ1dGlvbnNFbmFibGVkKGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFjdGl2YXRlU291cmNlUGFnZShJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3IpIHsKLQkJaWYgKGRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yICE9IG51bGwgJiYgZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgaW5zdGFuY2VvZiBJRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHsKLQkJCWRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihtdWx0aVBhZ2VFZGl0b3IpOwotCQl9Ci0KLQkJaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwgJiYgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgaW5zdGFuY2VvZiBJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHsKLQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihhY3RpdmVFZGl0b3IpOwotCQkJKChJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKS5zZXRWaWV3ZXJTcGVjaWZpY0NvbnRyaWJ1dGlvbnNFbmFibGVkKHRydWUpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9Tb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBmYzcwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFjdGlvbkNvbnRyaWJ1dG9yWE1MOwotCi0KLS8qKgotICogU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgZm9yIG11bHRpIHBhZ2UgZWRpdG9yJ3Mgc291cmNlIHBhZ2UgY29udHJpYnV0b3IuCi0gKgotICogVXNlIFdTRExFZGl0b3JBY3Rpb25Db250cmlidXRvciBmb3Igc2luZ2xlIHBhZ2UgZWRpdG9yCi0gKiAqLwotcHVibGljIGNsYXNzIFNvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvciBleHRlbmRzIEFjdGlvbkNvbnRyaWJ1dG9yWE1MIHsKLQotCXByaXZhdGUgSUFjdGlvbkJhcnMgZkJhcnM7Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBjYWxsczoKLQkgKiA8dWw+Ci0JICogIDxsaT48Y29kZT5jb250cmlidXRlVG9NZW51PC9jb2RlPiB3aXRoIDxjb2RlPmJhcnM8L2NvZGU+JyBtZW51IG1hbmFnZXI8L2xpPgotCSAqICA8bGk+PGNvZGU+Y29udHJpYnV0ZVRvVG9vbEJhcjwvY29kZT4gd2l0aCA8Y29kZT5iYXJzPC9jb2RlPicgdG9vbCBiYXIKLQkgKiAgICBtYW5hZ2VyPC9saT4KLQkgKiAgPGxpPjxjb2RlPmNvbnRyaWJ1dGVUb1N0YXR1c0xpbmU8L2NvZGU+IHdpdGggPGNvZGU+YmFyczwvY29kZT4nIHN0YXR1cyBsaW5lCi0JICogICAgbWFuYWdlcjwvbGk+Ci0JICogPC91bD4KLQkgKiBUaGUgZ2l2ZW4gYWN0aW9uIGJhcnMgYXJlIGFsc28gcmVtZW1iZXJlZCBhbmQgbWFkZSBhY2Nlc3NpYmxlIHZpYSAKLQkgKiA8Y29kZT5nZXRBY3Rpb25CYXJzPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gYmFycyB0aGUgYWN0aW9uIGJhcnMKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElBY3Rpb25CYXJzIGJhcnMpIHsKLQkJZkJhcnMgPSBiYXJzOwotCQljb250cmlidXRlVG9NZW51KGJhcnMuZ2V0TWVudU1hbmFnZXIoKSk7Ci0JCWNvbnRyaWJ1dGVUb1Rvb2xCYXIoYmFycy5nZXRUb29sQmFyTWFuYWdlcigpKTsKLQkJY29udHJpYnV0ZVRvU3RhdHVzTGluZShiYXJzLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhpcyBjb250cmlidXRvcidzIGFjdGlvbiBiYXJzLgotCSAqCi0JICogQHJldHVybiB0aGUgYWN0aW9uIGJhcnMKLQkgKi8KLQlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKLQkJcmV0dXJuIGZCYXJzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1N0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbldTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZiMTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci0KLXB1YmxpYyBjbGFzcyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMIGV4dGVuZHMgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIHsKLQlwcm90ZWN0ZWQgTWFwIGdldEh5cGVybGlua0RldGVjdG9yVGFyZ2V0cyhJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcikgewotCQlNYXAgdGFyZ2V0cyA9IHN1cGVyLmdldEh5cGVybGlua0RldGVjdG9yVGFyZ2V0cyhzb3VyY2VWaWV3ZXIpOwotCQl0YXJnZXRzLnB1dCgib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIsIG51bGwpOyAgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gdGFyZ2V0czsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdlZWRhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5ab29tTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5HRUZBY3Rpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuWm9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5ab29tSW5SZXRhcmdldEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5ab29tT3V0UmV0YXJnZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uR3JvdXBNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuUmV0YXJnZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuSVdTRExUb29sYmFyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5hY3Rpb25zLkNhcHR1cmVTY3JlZW5BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IgZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcgotewotICBwcml2YXRlIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7Ci0gIHByaXZhdGUgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3I7Ci0gIHByb3RlY3RlZCBJVGV4dEVkaXRvciB0ZXh0RWRpdG9yOwotICBwcm90ZWN0ZWQgSUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgZlBhcnRMaXN0ZW5lcnM9IG5ldyBBcnJheUxpc3QoKTsKLSAgWm9vbUluUmV0YXJnZXRBY3Rpb24gem9vbUluUmV0YXJnZXRBY3Rpb247Ci0gIFpvb21PdXRSZXRhcmdldEFjdGlvbiB6b29tT3V0UmV0YXJnZXRBY3Rpb247Ci0gIFpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0gem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbTsKLSAgQWN0aW9uIGNhcHR1cmVTY3JlZW5BY3Rpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgPSBuZXcgU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yKCk7Ci0gICAgem9vbUluUmV0YXJnZXRBY3Rpb24gPSBuZXcgWm9vbUluUmV0YXJnZXRBY3Rpb24oKTsKLSAgICB6b29tSW5SZXRhcmdldEFjdGlvbi5zZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJpY29ucy9ldG9vbDE2L3pvb21wbHVzLmdpZiIpKTsKLSAgICB6b29tT3V0UmV0YXJnZXRBY3Rpb24gPSBuZXcgWm9vbU91dFJldGFyZ2V0QWN0aW9uKCk7Ci0gICAgem9vbU91dFJldGFyZ2V0QWN0aW9uLnNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oImljb25zL2V0b29sMTYvem9vbW1pbnVzLmdpZiIpKTsKLSAgICBjYXB0dXJlU2NyZWVuQWN0aW9uID0gbmV3IENhcHR1cmVTY3JlZW5BY3Rpb24oKTsKLSAgICBmUGFydExpc3RlbmVycy5hZGQoem9vbUluUmV0YXJnZXRBY3Rpb24pOwotICAgIGZQYXJ0TGlzdGVuZXJzLmFkZCh6b29tT3V0UmV0YXJnZXRBY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWN0aXZlUGFnZShJRWRpdG9yUGFydCBwYXJ0KQotICB7Ci0gICAgaWYgKGFjdGl2ZUVkaXRvclBhcnQgPT0gcGFydCkKLSAgICAgIHJldHVybjsKLQotICAgIGFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OwotCi0gICAgSUFjdGlvbkJhcnMgYWN0aW9uQmFycyA9IGdldEFjdGlvbkJhcnMoKTsKLSAgICBib29sZWFuIGlzU291cmNlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGFjdGl2ZUVkaXRvclBhcnQgIT0gbnVsbCAmJiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0gICAgewotICAgIAlpc1NvdXJjZSA9IHRydWU7Ci0gICAgICAgIHpvb21JblJldGFyZ2V0QWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICB6b29tT3V0UmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIGFjdGl2YXRlU291cmNlUGFnZShhY3RpdmVFZGl0b3JQYXJ0LCB0cnVlKTsKLSAgICAgICAgY2FwdHVyZVNjcmVlbkFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGFjdGl2YXRlU291cmNlUGFnZSh3c2RsRWRpdG9yLCBmYWxzZSk7Ci0gICAgICBpZiAocGFydCBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLSAgICAgIHsKLSAgICAgICAgd3NkbEVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHBhcnQ7Ci0gICAgICB9Ci0gICAgICBpZiAod3NkbEVkaXRvciAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBjczogaGVyZSdzIHdlIGVuc3VyZSB0aGUgVU5ETyBhbmQgUkVETyBhY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiAKLSAgICAgICAgLy8gdGhlIGRlc2lnbiB2aWV3IGlzIGFjdGl2ZQotICAgICAgICBJV29ya2JlbmNoUGFydFNpdGUgc2l0ZSA9IHdzZGxFZGl0b3IuZ2V0U2l0ZSgpOwotICAgICAgICBpZiAoc2l0ZSBpbnN0YW5jZW9mIElFZGl0b3JTaXRlKSAKLSAgICAgICAgewotICAgICAgICAgIElUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSB3c2RsRWRpdG9yLmdldFRleHRFZGl0b3IoKTsKLSAgICAgICAgICBJQWN0aW9uQmFycyBzaXRlQWN0aW9uQmFycyA9ICgoSUVkaXRvclNpdGUpIHNpdGUpLmdldEFjdGlvbkJhcnMoKTsKLSAgICAgICAgICBzaXRlQWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLlVORE8sIGdldEFjdGlvbih0ZXh0RWRpdG9yLCBJVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50cy5VTkRPKSk7Ci0gICAgICAgICAgc2l0ZUFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihJVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50cy5SRURPLCBnZXRBY3Rpb24odGV4dEVkaXRvciwgSVRleHRFZGl0b3JBY3Rpb25Db25zdGFudHMuUkVETykpOwotICAgICAgICAgIHNpdGVBY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsgICAgICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLQotICAgICAgICBPYmplY3QgYWRhcHRlciA9IHdzZGxFZGl0b3IuZ2V0QWRhcHRlcihBY3Rpb25SZWdpc3RyeS5jbGFzcyk7Ci0gICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgQWN0aW9uUmVnaXN0cnkpCi0gICAgICAgIHsKLSAgICAgICAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IChBY3Rpb25SZWdpc3RyeSkgYWRhcHRlcjsKLSAgICAgICAgICBhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5ERUxFVEUuZ2V0SWQoKSwgcmVnaXN0cnkuZ2V0QWN0aW9uKEFTRERlbGV0ZUFjdGlvbi5JRCkpOwotICAgICAgICAgIGFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihHRUZBY3Rpb25Db25zdGFudHMuWk9PTV9JTiwgcmVnaXN0cnkuZ2V0QWN0aW9uKEdFRkFjdGlvbkNvbnN0YW50cy5aT09NX0lOKSk7Ci0gICAgICAgICAgYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEdFRkFjdGlvbkNvbnN0YW50cy5aT09NX09VVCwgcmVnaXN0cnkuZ2V0QWN0aW9uKEdFRkFjdGlvbkNvbnN0YW50cy5aT09NX09VVCkpOwotICAgICAgICAgIGFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LlBSSU5ULmdldElkKCksIHJlZ2lzdHJ5LmdldEFjdGlvbihBY3Rpb25GYWN0b3J5LlBSSU5ULmdldElkKCkpKTsKLSAgICAgICAgICB6b29tSW5SZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgIHpvb21PdXRSZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgIGNhcHR1cmVTY3JlZW5BY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLSAgICAgIC8vIHVwZGF0ZSBtZW51IGJhciBhbmQgdG9vbCBiYXIKLSAgICAgIGFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotICAgIH0KLSAgICAKLSAgICBpZiAoem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbSAhPSBudWxsKQotICAgIHsKLSAgICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0uc2V0VmlzaWJsZSghaXNTb3VyY2UpOwotICAgICAgem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbS51cGRhdGUoKTsKLSAgICAgIC8vIEJ1ZyAyNTQ3NzIgLSBwYXJlbnQgY29udHJpYnV0aW9uIG1hbmFnZXIgc2hvdWxkIG5vdCBiZSBudWxsLiAgV2UgYWRkZWQgdGhpcyBpdGVtIGFscmVhZHkuCi0gICAgICAvLyBGb3JjZSB0aGUgVG9vbEJhck1hbmFnZXIgdG8gdXBkYXRlL3JlZHJhdyB0aGUgaXRlbXMKLSAgICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0uZ2V0UGFyZW50KCkudXBkYXRlKHRydWUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBhY3Rpb24gcmVnaXN0ZWQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBlZGl0b3IuCi0gICAqIEByZXR1cm4gSUFjdGlvbiBvciBudWxsIGlmIGVkaXRvciBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIElBY3Rpb24gZ2V0QWN0aW9uKElUZXh0RWRpdG9yIGVkaXRvciwgU3RyaW5nIGFjdGlvbklEKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIChlZGl0b3IgPT0gbnVsbCA/IG51bGwgOiBlZGl0b3IuZ2V0QWN0aW9uKGFjdGlvbklEKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIG1hbmFnZXIpCi0gIHsKLSAgICBtYW5hZ2VyLmFkZChuZXcgR3JvdXBNYXJrZXIoIldTRExFZGl0b3IiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBMaXN0IGxpc3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKS5nZXRUb29sYmFyQWN0aW9ucygpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBtYW5hZ2VyLmFkZCgoSVdTRExUb29sYmFyQWN0aW9uKWkubmV4dCgpKTsKLSAgICB9Ci0KLS8vICAgIG1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0gICAgU3RyaW5nW10gem9vbVN0cmluZ3MgPSBuZXcgU3RyaW5nW10geyBab29tTWFuYWdlci5GSVRfQUxMLCBab29tTWFuYWdlci5GSVRfSEVJR0hULCBab29tTWFuYWdlci5GSVRfV0lEVEggfTsKLSAgICB6b29tQ29tYm9Db250cmlidXRpb25JdGVtID0gbmV3IFpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0oZ2V0UGFnZSgpLCB6b29tU3RyaW5ncyk7Ci0gICAgbWFuYWdlci5hZGQoem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbSk7Ci0gICAgbWFuYWdlci5hZGQoY2FwdHVyZVNjcmVlbkFjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkKLSAgewotICAgIElFZGl0b3JQYXJ0IGFjdGl2ZU5lc3RlZEVkaXRvciA9IG51bGw7Ci0gICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBNdWx0aVBhZ2VFZGl0b3JQYXJ0KQotICAgIHsKLSAgICAgIGFjdGl2ZU5lc3RlZEVkaXRvciA9IHBhcnQ7Ci0gICAgfQotICAgIHNldEFjdGl2ZVBhZ2UoYWN0aXZlTmVzdGVkRWRpdG9yKTsKLSAgICAKLSAgICBpZiAocGFydCBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLSAgICB7Ci0gICAgICB3c2RsRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgcGFydDsKLQotICAgICAgdGV4dEVkaXRvciA9IHdzZGxFZGl0b3IuZ2V0VGV4dEVkaXRvcigpOwotICAgICAgaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkKLSAgICAgIHsgICAgICAKLSAgICAgICAgZ2V0QWN0aW9uQmFycygpLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgTGlzdCBsaXN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCkuZ2V0VG9vbGJhckFjdGlvbnMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgKChJV1NETFRvb2xiYXJBY3Rpb24paS5uZXh0KCkpLnNldEVkaXRvclBhcnQocGFydCk7Ci0gICAgfQotICAgIHN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVTb3VyY2VQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvciwgYm9vbGVhbiBzdGF0ZSkKLSAgewotICAgIGlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsICYmIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yIGluc3RhbmNlb2YgSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yKQotICAgIHsKLSAgICAgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihhY3RpdmVFZGl0b3IpOwotICAgICAgKChJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKS5zZXRWaWV3ZXJTcGVjaWZpY0NvbnRyaWJ1dGlvbnNFbmFibGVkKHN0YXRlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KElBY3Rpb25CYXJzIGJhcnMsIElXb3JrYmVuY2hQYWdlIHBhZ2UpCi0gIHsKLQkgIEl0ZXJhdG9yIGUgPSBmUGFydExpc3RlbmVycy5pdGVyYXRvcigpOwotCSAgd2hpbGUgKGUuaGFzTmV4dCgpKQotCSAgewotCQkgIHBhZ2UuYWRkUGFydExpc3RlbmVyKChSZXRhcmdldEFjdGlvbikgZS5uZXh0KCkpOwotCSAgfQotCi0JICBpbml0U291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IoYmFycyk7Ci0JICBzdXBlci5pbml0KGJhcnMsIHBhZ2UpOwotICB9Ci0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7Ci0gICAgaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwpCi0gICAgICBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5pbml0KGFjdGlvbkJhcnMsIGdldFBhZ2UoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0JICBmUGFydExpc3RlbmVycyA9IG51bGw7Ci0JICBpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJICBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5kaXNwb3NlKCk7Ci0JICBzdXBlci5kaXNwb3NlKCk7Ci0gIH0KLQotcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWFuYWdlcikgewotCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWFuYWdlcik7Ci0JCi0JSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoTWVzc2FnZXMuX1VJX0VESVRPUl9OQU1FLCAiV1NETEVkaXRvciIpOwotCi0gICAgbWVudS5hZGQoem9vbUluUmV0YXJnZXRBY3Rpb24pOwotICAgIG1lbnUuYWRkKHpvb21PdXRSZXRhcmdldEFjdGlvbik7Ci0JbWFuYWdlci5hcHBlbmRUb0dyb3VwKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TLCBtZW51KTsKLQltZW51LmFkZChjYXB0dXJlU2NyZWVuQWN0aW9uKTsKLQotICAgIG1lbnUudXBkYXRlQWxsKHRydWUpOwotCQotfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWRkZGQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb24uQWRhcHRlckZhY3RvcnlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFkYXB0ZXJmYWN0b3J5LmV4dGVuc2lvbi5BZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuV1NETEVkaXRvckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLlByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLkV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFdTRExFZGl0b3JQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIC8vLCBJUGx1Z2luSGVscGVyCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUEFHRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kZWZhdWx0cGFnZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTSUdOX1BBR0UgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGVzaWducGFnZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX1BBR0UgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc291cmNlcGFnZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRURJVE9SX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiOyAgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYU0RfRURJVE9SX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLkludGVybmFsWFNETXVsdGlQYWdlRWRpdG9yIjsgIC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1BSRUZFUkVOQ0VfUEFHRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMUHJlZmVyZW5jZVBhZ2UiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfUFJFRklYID0gInRucyI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFX1BSRUZJWF9QUkVGRVJFTkNFX0lEID0gImRlZmF1bHRQcmVmaXgiOyAvLyROT04tTkxTLTEkCi0gIAotICAvLyBUT0RPIFZCIE1vdmUgdGhlc2UgZGVmYXVsdHMgdG8gYSBwcmVmZXJlbmNlcyBpbml0aWFsaXplciBjbGFzcy4KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFTkVSQVRFX1NFUEFSQVRFX0lOVEVSRkFDRV9QUkVGRVJFTkNFX0lEID0gImdlbmVyYXRlU2VwYXJhdGVJbnRlcmZhY2UiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVSRkFDRV9QUkVGSVhfUFJFRkVSRU5DRV9JRCA9ICJpbnRlcmZhY2VEZWZhdWx0UHJlZml4IjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFUkZBQ0VfUFJFRklYX0RFRkFVTFQgPSAiaW50ZiI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5URVJGQUNFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRV9QUkVGRVJFTkNFX0lEID0gImludGVyZmFjZURlZmF1bHRUYXJnZXROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVSRkFDRV9GSUxFX1NVRkZJWF9QUkVGRVJFTkNFX0lEID0gImludGVyZmFjZUZpbGVTdWZmaXgiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVSRkFDRV9GSUxFX1NVRkZJWF9ERUZBVUxUID0gIlBvcnRUeXBlIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfSUQgPSAiZGVmYXVsdE5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVUT19SRUdFTkVSQVRFX0JJTkRJTkdfT05fU0FWRV9JRCA9ICJhdXRvUmVnZW5lcmF0ZUJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkVfSUQgPSAicHJvbXB0UmVnZW5lcmF0ZUJpbmRpbmdPblNhdmUiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFVVE9fSU1QT1JUX0NMRUFOVVBfSUQgPSAiYXV0b0ltcG9ydENsZWFudXAiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFVVE9fT1BFTl9JTVBPUlRfRElBTE9HX0lEID0gImF1dG9PcGVuSW1wb3J0RGlhbG9nIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUFJPTVBUID0gMDsKLSAgcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfSUdOT1JFID0gMTsKLSAgcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEID0gMjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIFdTRExFZGl0b3JQbHVnaW4gaW5zdGFuY2U7Ci0gIHByaXZhdGUgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSByZWdpc3RyeTsKLSAgcHJpdmF0ZSBXU0RMRWRpdG9yQ29uZmlndXJhdGlvbiB3c2RsRWRpdG9yQ29uZmlndXJhdGlvbiA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5OwotICBwcml2YXRlIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IGNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotICBwcml2YXRlIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeTsKLSAgCi0gIHByaXZhdGUgaW50IGRlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3kgPSBERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9SRUxPQUQ7Ci0KLSAgcHVibGljIFdTRExFZGl0b3JDb25maWd1cmF0aW9uIGdldFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCkKLSAgewotICAgIGlmICh3c2RsRWRpdG9yQ29uZmlndXJhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzZGxFZGl0b3JDb25maWd1cmF0aW9uID0gbmV3IFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsRWRpdG9yQ29uZmlndXJhdGlvbjsKLSAgfQotICAKLQlwdWJsaWMgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSBnZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCkgewotCQlpZiAocmVnaXN0cnkgPT0gbnVsbCkgewotCQkJcmVnaXN0cnkgPSBuZXcgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSgib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaW9uQ2F0ZWdvcmllcyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICByZWdpc3RyeS5fX2ludGVybmFsU2V0RGVwcmVjYXRlZEV4dGVuc2lvbklkKCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5FeHRlbnNpb25zU2NoZW1hc0Rlc2NyaXB0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHJlZ2lzdHJ5LnNldFByZWZTdG9yZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkgKTsKLQkJfQotCQkKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQkKLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvZ01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNvdXJjZXMgaGVscGVyLgotICAgKi8KLQotICBwdWJsaWMgV1NETEVkaXRvclBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlID0gdGhpczsKLQotICAgIC8vIFRPRE8uLi4gcmVtb3ZlIHRoaXMgY29kZSB3aGVuIHdlIGFkZCAnZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeScKLSAgICAvLyB0byBhbiBlZGl0b3IgcHJlZmVyZW5jZXMgcGFnZQotICAgIHRyeQotICAgIHsKLSAgICAJLy8gX0RFQlVHX1VQREFURV9QT0xJQ1kgPSAwRHVtbXkubGFiZWw9Ci0gICAgICBTdHJpbmcgc3RyaW5nID0gIjBEdW1teS5sYWJlbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGludCBwb2xpY3kgPSBJbnRlZ2VyLnBhcnNlSW50KHN0cmluZyk7Ci0gICAgICBpZiAocG9saWN5ID49IDAgJiYgcG9saWN5IDw9IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRCkKLSAgICAgIHsKLSAgICAgICAgZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSA9IHBvbGljeTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdGFydChjb250ZXh0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBnZXRFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnkoKQotICB7Ci0gICAgaWYgKGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSA9PSBudWxsKQotICAgIHsKLSAgICAgIGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSA9IG5ldyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIG5ldyBFbGVtZW50Q29udGVudEZpbHRlckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSkucmVhZFJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIHJldHVybiBleHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSBnZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpIHsKLQkgIGlmIChjb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSA9PSBudWxsKSB7Ci0JCSAgY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgPSBuZXcgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJICBuZXcgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkpLnJlYWRSZWdpc3RyeSgpOwotCSAgfQotCi0JICByZXR1cm4gY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSBnZXRBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5KCkgewotCSAgaWYgKGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgPT0gbnVsbCkgewotCQkgIGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgPSBuZXcgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgIG5ldyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkpLnJlYWRSZWdpc3RyeSgpOwotCSAgfQotCi0JICByZXR1cm4gYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIEluc3RhbGwgVVJMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsVVJMKCkKLSAgewotCXRyeQotCXsKLQkgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbmNlLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpOyAvLyROT04tTkxTLTEkCi0JfQotCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCXsKLQkgIHJldHVybiBudWxsOwotCX0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHBsdWdpbiBwaHlzaWNhbCBkaXJlY3RvcnkgbG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0UGx1Z2luTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSVBhdGggaW5zdGFsbFBhdGggPSBuZXcgUGF0aChnZXRJbnN0YWxsVVJMKCkudG9FeHRlcm5hbEZvcm0oKSkucmVtb3ZlVHJhaWxpbmdTZXBhcmF0b3IoKTsKLSAgICAgIFN0cmluZyBpbnN0YWxsU3RyID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKG5ldyBVUkwoaW5zdGFsbFBhdGgudG9TdHJpbmcoKSkpLmdldEZpbGUoKTsKLSAgICAgIHJldHVybiBuZXcgUGF0aChpbnN0YWxsU3RyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIldTRExFZGl0b3JQbHVnaW4uZ2V0UGx1Z2luTG9jYXRpb24oKSBleGNlcHRpb24uLiIgKyBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGltYWdlRGVzY3JpcHRvckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIHByb3RlY3RlZCBJbWFnZURlc2NyaXB0b3IgaW50ZXJuYWxHZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGtleSkKLSAgewotICAgIEltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSAoSW1hZ2VEZXNjcmlwdG9yKSBpbWFnZURlc2NyaXB0b3JDYWNoZS5nZXQoa2V5KTsKLSAgICBpZiAoaW1hZ2VEZXNjcmlwdG9yID09IG51bGwpCi0gICAgewotICAgICAgaW1hZ2VEZXNjcmlwdG9yID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKFdTRExFZGl0b3JQbHVnaW4uY2xhc3MsIGtleSk7Ci0gICAgICBpZiAoaW1hZ2VEZXNjcmlwdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGltYWdlRGVzY3JpcHRvckNhY2hlLnB1dChrZXksIGltYWdlRGVzY3JpcHRvcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KLSAgICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotICAgKgotICAgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aAotICAgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFN0cmluZyBwYXRoKSB7Ci0gICAgcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGtleSkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmludGVybmFsR2V0SW1hZ2VEZXNjcmlwdG9yKGtleSk7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIGljb25OYW1lKQotICB7Ci0gICAgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gZ2V0SW1hZ2VSZWdpc3RyeSgpOwotICAgIAotICAgIGlmIChpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW1hZ2VSZWdpc3RyeS5wdXQoaWNvbk5hbWUsIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShnZXRDbGFzcygpLCBpY29uTmFtZSkpOwotICAgICAgcmV0dXJuIGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qCi0gICAgcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyBrZXksIGJvb2xlYW4gaXNHcmF5ZWQpCi0gICAgeyAKLSAgICAgIEltYWdlIGltYWdlID0gbnVsbDsKLSAgICAgIGlmICghaXNHcmF5ZWQpCi0gICAgICB7Ci0gICAgICAgIGltYWdlID0gc3VwZXIuZ2V0SW1hZ2Uoa2V5KTsKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbWFnZSA9IChJbWFnZSlncmF5ZWRJbWFnZU1hcC5nZXQoa2V5KTsKLSAgICAgICAgaWYgKGltYWdlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJbWFnZSBjb2xvckltYWdlID0gc3VwZXIuZ2V0SW1hZ2Uoa2V5KTsKLSAgICAgICAgICBpZiAoY29sb3JJbWFnZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlKERpc3BsYXkuZ2V0Q3VycmVudCgpLCBjb2xvckltYWdlLCBTV1QuSU1BR0VfR1JBWSk7Ly9TV1QuSU1BR0VfRElTQUJMRSk7Ci0gICAgICAgICAgICBncmF5ZWRJbWFnZU1hcC5wdXQoa2V5LCBpbWFnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaW1hZ2U7Ci0gICAgfQotICAqLwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG1ldGFkYXRhIGRpcmVjdG9yeSBmb3IgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1ldGFEYXRhRGlyZWN0b3J5KCkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExFZGl0b3JQbHVnaW4gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotCSAgbmV3IFdTRExFZGl0b3JQbHVnaW4oKTsKLQl9Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHVibGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkKLSAgewotICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFNoZWxsIGdldFNoZWxsKCkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSkKLSAgewotICAgIHN0b3JlLnNldERlZmF1bHQoREVGQVVMVF9QQUdFLCBERVNJR05fUEFHRSk7Ci0gICAgCi0gICAgLy8gV1NETFByZWZlcmVuY2VQYWdlIHByZWZzCi0gICAgLy8gdmIgV2h5IGlzIHRoZSBlZGl0b3IgdXNpbmcgdGhlIHRyYW5zbGF0ZWQgcHJlZmVyZW5jZXMgbGFiZWxzIGFzIHByZWZlcmVuY2VzIGtleXM/Ci0gICAgLy8gVGhpcyBtYWtlcyB0aGUgcHJlZmVyZW5jZXMgbm9uLXBvcnRhYmxlIGJldHdlZW4gZGlmZmVyZW50IGxvY2FsZXMuCi0gICAgLy8gT3BlbmVkIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjc0NzEKLSAgICBzdG9yZS5zZXREZWZhdWx0KERFRkFVTFRfVEFSR0VUX05BTUVTUEFDRV9JRCwgREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICBzdG9yZS5zZXREZWZhdWx0KERFRkFVTFRfVEFSR0VUX05BTUVTUEFDRV9QUkVGSVhfUFJFRkVSRU5DRV9JRCwgREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFX1BSRUZJWCk7Ci0gICAgc3RvcmUuc2V0RGVmYXVsdChHRU5FUkFURV9TRVBBUkFURV9JTlRFUkZBQ0VfUFJFRkVSRU5DRV9JRCwgZmFsc2UpOwotICAgIHN0b3JlLnNldERlZmF1bHQoSU5URVJGQUNFX1BSRUZJWF9QUkVGRVJFTkNFX0lELCBJTlRFUkZBQ0VfUFJFRklYX0RFRkFVTFQpOwotICAgIHN0b3JlLnNldERlZmF1bHQoSU5URVJGQUNFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRV9QUkVGRVJFTkNFX0lELCBERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgIHN0b3JlLnNldERlZmF1bHQoSU5URVJGQUNFX0ZJTEVfU1VGRklYX1BSRUZFUkVOQ0VfSUQsIElOVEVSRkFDRV9GSUxFX1NVRkZJWF9ERUZBVUxUKTsKLSAgICBzdG9yZS5zZXREZWZhdWx0KEFVVE9fUkVHRU5FUkFURV9CSU5ESU5HX09OX1NBVkVfSUQsIGZhbHNlKTsKLSAgICBzdG9yZS5zZXREZWZhdWx0KFBST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkVfSUQsIGZhbHNlKTsKLSAgICBzdG9yZS5zZXREZWZhdWx0KEFVVE9fSU1QT1JUX0NMRUFOVVBfSUQsIGZhbHNlKTsKLSAgICBzdG9yZS5zZXREZWZhdWx0KEFVVE9fT1BFTl9JTVBPUlRfRElBTE9HX0lELCBmYWxzZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBzZXREZWZhdWx0UGFnZQotICAgKiBTZXQgdGhlIGRlZmF1bHQgcGFnZSB0byBvcGVuIHdoZW4gdGhlIGVkaXRvciBzdGFydHMuIE1haW50YWlucyB0aGUgc3RhdGUKLSAgICogd2hlbiBXU0FEIGlzIHNodXRkb3duIGFuZCByZXN0YXJ0ZWQuCi0gICAqIEBwYXJhbSBwYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFnZShTdHJpbmcgcGFnZSkKLSAgewotICAgIGdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKERFRkFVTFRfUEFHRSwgcGFnZSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRQYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoREVGQVVMVF9QQUdFKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0RGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSgpCi0gIHsKLSAgICAvL3JldHVybiBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRJbnQoREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1kpOwotICAgIHJldHVybiBkZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRSZW1vdmVJbXBvcnRTZXR0aW5nKCkKLSAgewotICAgIHJldHVybiBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKEFVVE9fSU1QT1JUX0NMRUFOVVBfSUQpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvT3BlbkltcG9ydExvY2F0aW9uRGlhbG9nU2V0dGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbihBVVRPX09QRU5fSU1QT1JUX0RJQUxPR19JRCk7Ci0gIH0gCi0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPRFVDVF9DVVNUT01JWkFUSU9OX1BST1ZJREVSX1BMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5wcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyUGx1Z2luSWQiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9EVUNUX0NVU1RPTUlaQVRJT05fUFJPVklERVJfQ0xBU1NfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5wcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyQ2xhc3NOYW1lIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBzdGF0aWMgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJJbml0aWFsaXplZCA9IGZhbHNlOwotICAKLSAgcHVibGljIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpCi0gIHsKLSAgICBpZiAoIXByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVySW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoUFJPRFVDVF9DVVNUT01JWkFUSU9OX1BST1ZJREVSX1BMVUdJTl9JRCk7Ci0gICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKFBST0RVQ1RfQ1VTVE9NSVpBVElPTl9QUk9WSURFUl9DTEFTU19OQU1FKTsKLSAgICAgIGlmIChwbHVnaW5OYW1lICE9IG51bGwgJiYgcGx1Z2luTmFtZS5sZW5ndGgoKSA+IDAgJiYKLSAgICAJICBjbGFzc05hbWUgIT0gbnVsbCAmJiBjbGFzc05hbWUubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUocGx1Z2luTmFtZSk7Ci0gICAgICAgICAgQ2xhc3MgY2xhenogPSBidW5kbGUubG9hZENsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKWNsYXp6Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgeyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gIAotICAgIHJldHVybiBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotICB9ICAgCi19Ci0KLWNsYXNzIEJhc2VSZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KFN0cmluZyBleHRlbnNpb25Qb2ludElkKQotICB7Ci0JSUV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQlJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBleHRlbnNpb25SZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQTFVHSU5fSUQsIGV4dGVuc2lvblBvaW50SWQpOwotCi0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICB9Ci19Ci0KLS8qKgotICogCi0gKi8KLWFic3RyYWN0IGNsYXNzIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeVJlYWRlciBleHRlbmRzIEJhc2VSZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRV9TUEFDRSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZDsKLSAgcHJvdGVjdGVkIFN0cmluZyB0YWdOYW1lOwotICBwcm90ZWN0ZWQgU3RyaW5nW10gYXR0cmlidXRlTmFtZXM7Ci0gIHByb3RlY3RlZCBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5OwotCi0gIHByaXZhdGUgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSkKLSAgewotICAgIHRoaXMuZXh0ZW5zaW9uUG9pbnRJZCA9IGV4dGVuc2lvblBvaW50SWQ7Ci0gICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTsKLSAgICB0aGlzLm5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSA9IG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lLCBTdHJpbmcgYXR0cmlidXRlTmFtZSwgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSkKLSAgewotICAgIHRoaXMoZXh0ZW5zaW9uUG9pbnRJZCwgdGFnTmFtZSwgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICBhdHRyaWJ1dGVOYW1lcyA9IG5ldyBTdHJpbmdbMV07Ci0gICAgYXR0cmlidXRlTmFtZXNbMF0gPSBhdHRyaWJ1dGVOYW1lOwotICB9Ci0KLSAgcHVibGljIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCwgU3RyaW5nIHRhZ05hbWUsIFN0cmluZ1tdIGF0dHJpYnV0ZU5hbWVzLCBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcyhleHRlbnNpb25Qb2ludElkLCB0YWdOYW1lLCBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIHRoaXMuYXR0cmlidXRlTmFtZXMgPSBhdHRyaWJ1dGVOYW1lczsKLSAgfQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgc3VwZXIucmVhZFJlZ2lzdHJ5KGV4dGVuc2lvblBvaW50SWQpOwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWRFbGVtZW50KCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyh0YWdOYW1lKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUVfU1BBQ0UpOwotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgewotICAgIAlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpOwotICAgICAgICBpZiAoYXR0cmlidXRlTmFtZXMubGVuZ3RoID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZXNbMF0pOwotICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkucHV0KG5hbWVzcGFjZSwgY2xhc3NOYW1lLCBidW5kbGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldOwotICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsICYmIGNsYXNzTmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1hcC5wdXQoYXR0cmlidXRlTmFtZSwgY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LnB1dChuYW1lc3BhY2UsIG1hcCwgYnVuZGxlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIAotICovCi1jbGFzcyBFbGVtZW50Q29udGVudEZpbHRlckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9QT0lOVF9JRCA9ICJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX05BTUUgPSAiZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIEVsZW1lbnRDb250ZW50RmlsdGVyRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSkKLSAgewotICAgIHN1cGVyKEVYVEVOU0lPTl9QT0lOVF9JRCwgVEFHX05BTUUsICJjbGFzcyIsIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSk7IC8vJE5PTi1OTFMtMSQKLSAgfQotfQotCi1jbGFzcyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeVJlYWRlciBleHRlbmRzIEJhc2VSZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRFTlNJT05fUE9JTlRfSUQgPSAiY29udGVudEdlbmVyYXRvclVJIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0NPTlRFTlRfR0VORVJBVE9SID0gImNvbnRlbnRHZW5lcmF0b3JVSSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9MQUJFTCA9ICJsYWJlbCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1BPUlRfT1BUSU9OU19QQUdFX0NMQVNTID0gInBvcnRPcHRpb25zUGFnZUNsYXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQklORElOR19PUFRJT05TX1BBR0VfQ0xBU1MgPSAiYmluZGluZ09wdGlvbnNQYWdlQ2xhc3MiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSkKLSAgewotICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlci5yZWFkUmVnaXN0cnkoRVhURU5TSU9OX1BPSU5UX0lEKTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkRWxlbWVudCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoRUxFTUVOVF9DT05URU5UX0dFTkVSQVRPUikpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRSk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUVTUEFDRSk7Ci0KLSAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgbmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBiaW5kaW5nR2VuZXJhdG9yRXh0ZW5zaW9uID0gbmV3IENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbihuYW1lLCBuYW1lc3BhY2UpOwotICAgICAgICBiaW5kaW5nR2VuZXJhdG9yRXh0ZW5zaW9uLnNldFBvcnRPcHRpb25zUGFnZUNsYXNzTmFtZShlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfUE9SVF9PUFRJT05TX1BBR0VfQ0xBU1MpKTsKLSAgICAgICAgYmluZGluZ0dlbmVyYXRvckV4dGVuc2lvbi5zZXRCaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWUoZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0JJTkRJTkdfT1BUSU9OU19QQUdFX0NMQVNTKSk7Ci0gICAgICAgIGJpbmRpbmdHZW5lcmF0b3JFeHRlbnNpb24uc2V0TGFiZWwoZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0xBQkVMKSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQ2xhc3NMb2FkZXIgcGx1Z2luQ2xhc3NzTG9hZGVyID0gZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXREZWNsYXJpbmdQbHVnaW5EZXNjcmlwdG9yKCkuZ2V0UGx1Z2luKCkuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOwotICAgICAgICAgIGJpbmRpbmdHZW5lcmF0b3JFeHRlbnNpb24uc2V0Q2xhc3NMb2FkZXIocGx1Z2luQ2xhc3NzTG9hZGVyKTsKLSAgICAgICAgICByZWdpc3RyeS5hZGQoYmluZGluZ0dlbmVyYXRvckV4dGVuc2lvbik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotY2xhc3MgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeVJlYWRlciBleHRlbmRzIEJhc2VSZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRFTlNJT05fUE9JTlRfSUQgPSAiYWRhcHRlckZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfQURBUFRFUl9GQUNUT1JZID0gImFkYXB0ZXJGYWN0b3J5IjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0FEQVBURVJfRkFDVE9SWV9DTEFTUyA9ICJhZGFwdGVyRmFjdG9yeUNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0gIHB1YmxpYyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgc3VwZXIucmVhZFJlZ2lzdHJ5KEVYVEVOU0lPTl9QT0lOVF9JRCk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKEVMRU1FTlRfQURBUFRFUl9GQUNUT1JZKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUVTUEFDRSk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gYWRhcHRlckZhY3RvcnlFeHRlbnNpb24gPSBuZXcgQWRhcHRlckZhY3RvcnlFeHRlbnNpb24obmFtZXNwYWNlKTsKLSAgICAgICAgYWRhcHRlckZhY3RvcnlFeHRlbnNpb24uc2V0QWRhcHRlckZhY3RvcnlDbGFzc05hbWUoZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0FEQVBURVJfRkFDVE9SWV9DTEFTUykpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIENsYXNzTG9hZGVyIHBsdWdpbkNsYXNzc0xvYWRlciA9IGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0RGVjbGFyaW5nUGx1Z2luRGVzY3JpcHRvcigpLmdldFBsdWdpbigpLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgICBhZGFwdGVyRmFjdG9yeUV4dGVuc2lvbi5zZXRDbGFzc0xvYWRlcihwbHVnaW5DbGFzc3NMb2FkZXIpOwotICAgICAgICAgIHJlZ2lzdHJ5LmFkZChhZGFwdGVyRmFjdG9yeUV4dGVuc2lvbik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDZiNjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyCi17Ci0gIHByb3RlY3RlZCBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcjsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNVcGRhdGVSZXF1aXJlZDsKLSAgcHJvdGVjdGVkIEludGVybmFsUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyOwotICBwcm90ZWN0ZWQgSW50ZXJuYWxQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyOwotCi0gIHB1YmxpYyBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yKQotICB7Ci0gICAgdGhpcy53c2RsRWRpdG9yID0gd3NkbEVkaXRvcjsKLSAgICByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0gbmV3IEludGVybmFsUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpOwotICAgIHBhcnRMaXN0ZW5lciA9IG5ldyBJbnRlcm5hbFBhcnRMaXN0ZW5lcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYXR0YWNoKCkKLSAgewotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOwotICAgIHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFBhcnRTZXJ2aWNlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOwotICAgIHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFBhcnRTZXJ2aWNlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTWFwIGNvbXB1dGVEZXBlbmRlbmN5TWFwKCkKLSAgewotICAgIE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9ICgoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSB3c2RsRWRpdG9yKS5nZXRNb2RlbCgpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0VGFyZ2V0KCk7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKWkubmV4dCgpOwotICAgICAgaWYgKHJlc291cmNlICE9IGRlZmluaXRpb24uZVJlc291cmNlKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB1cmkgPSByZXNvdXJjZS5nZXRVUkkoKS50b1N0cmluZygpOwotICAgICAgICBpZiAobWFwLmdldCh1cmkpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXAucHV0KHVyaSwgdXJpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlbG9hZCgpCi0gIHsKLSAgCWJvb2xlYW4gZG9SZWxvYWQgPSBmYWxzZTsgIAkKLQlpbnQgcG9saWN5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3koKTsKLQkKLSAgCWlmIChwb2xpY3kgPT0gV1NETEVkaXRvclBsdWdpbi5ERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9QUk9NUFQpCi0gIAl7Ci0JCWRvUmVsb2FkID0gTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24od3NkbEVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKSwgTWVzc2FnZXMuX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VELCBNZXNzYWdlcy5fVUlfREVQRU5ERU5DSUVTX0NIQU5HRURfUkVGUkVTSCk7ICAJIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAJfQotICAJZWxzZSBpZiAocG9saWN5ID09IFdTRExFZGl0b3JQbHVnaW4uREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEKQotICAJewotICAJCWRvUmVsb2FkID0gdHJ1ZTsKLSAgCX0KLSAgCQotICAgIGlmIChkb1JlbG9hZCkKLSAgICB7ICAgIAotICAgICAgd3NkbEVkaXRvci5yZWxvYWREZXBlbmRlbmNpZXMoKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNMaXN0ZW5pbmdUb1Jlc291cmNlQ2hhbmdlcygpCi0gIHsKLSAgCWludCBwb2xpY3kgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSgpOwotICAJcmV0dXJuIHBvbGljeSA9PSBXU0RMRWRpdG9yUGx1Z2luLkRFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1BST01QVCB8fAotICAJCSAgIHBvbGljeSA9PSBXU0RMRWRpdG9yUGx1Z2luLkRFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRDsKLSAgfQotCi0KLSAgY2xhc3MgSW50ZXJuYWxSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIGltcGxlbWVudHMgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZURlbHRhVmlzaXRvcgotICB7Ci0gICAgcHJvdGVjdGVkIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlbmRpbmcgPSBmYWxzZTsKLSAgICBwcm90ZWN0ZWQgaW50IGNvdW50ID0gMDsKLQotICAgIHB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkKLSAgICB7ICAgICAgCQotICAgICAgaWYgKGlzTGlzdGVuaW5nVG9SZXNvdXJjZUNoYW5nZXMoKSAmJiAhaXNVcGRhdGVSZXF1aXJlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmdldFR5cGUoKSA9PSBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSkKLSAgICAgICAgewotICAgICAgICAgIElSZXNvdXJjZURlbHRhW10gZGVsdGFzID0gZXZlbnQuZ2V0RGVsdGEoKS5nZXRBZmZlY3RlZENoaWxkcmVuKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRlbHRhc1tpXS5hY2NlcHQodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzUGVuZGluZykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpc1BlbmRpbmcgPSB0cnVlOwotICAgICAgICAgICAgbmV3IFJlbG9hZERlcGVuZGVuY2llc0pvYigpLnNjaGVkdWxlKDIwMDApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IGRlbHRhLmdldFJlc291cmNlKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotICAgICAgewotICAgICAgICBpZiAoIWxpc3QuY29udGFpbnMocmVzb3VyY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQocmVzb3VyY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjbGFzcyBSZWxvYWREZXBlbmRlbmNpZXNKb2IgZXh0ZW5kcyBKb2IKLSAgICB7Ci0gICAgICAKLSAgICAgIHB1YmxpYyBSZWxvYWREZXBlbmRlbmNpZXNKb2IoKQotICAgICAgewotICAgICAgICBzdXBlcigiUmVsb2FkIFdTREwgZGVwZW5kZW5jaWVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgc2V0U3lzdGVtKHRydWUpOwotICAgICAgICBzZXRQcmlvcml0eShTSE9SVCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gICAgICB7Ci0gICAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTWFwIGRlcGVuZGVuY3lNYXAgPSBjb21wdXRlRGVwZW5kZW5jeU1hcCgpOwotCi0gICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSlpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCBmYWxzZSkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeU1hcC5nZXQocGxhdGZvcm1QYXRoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlzVXBkYXRlUmVxdWlyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgaWYgKHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFBhcnRTZXJ2aWNlKCkuZ2V0QWN0aXZlUGFydCgpID09IHdzZGxFZGl0b3IpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlzVXBkYXRlUmVxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcGVyZm9ybVJlbG9hZCgpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlzUGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgICBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBjbGFzcyBJbnRlcm5hbFBhcnRMaXN0ZW5lciBpbXBsZW1lbnRzIElQYXJ0TGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgICBpZiAocGFydCA9PSB3c2RsRWRpdG9yKQotICAgICAgeyAgICAgCi0gICAgICAgIGlmIChpc1VwZGF0ZVJlcXVpcmVkKQotICAgICAgICB7Ci0gICAgICAgICAgaXNVcGRhdGVSZXF1aXJlZCA9IGZhbHNlOwotICAgICAgICAgIHBlcmZvcm1SZWxvYWQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICB9Ci0KLSAgIAotICAgIHB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gICAgewotICAgIH0KLSAgfQotCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0Y2VhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuUHJvcGVydHlDaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLQotcHVibGljIGNsYXNzIFdTRExQcmVmZXJlbmNlUGFnZSBleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgewotCi0gIHByaXZhdGUgQ29tcG9zaXRlIGludGVyZmFjZVByZWZlcmVuY2VzQ29tcG9zaXRlOwotICBwcml2YXRlIEJvb2xlYW5GaWVsZEVkaXRvciBnZW5lcmF0ZVNlcGFyYXRlSW50ZkZpZWxkRWRpdG9yOwotCi0gIHB1YmxpYyBXU0RMUHJlZmVyZW5jZVBhZ2UoKQotICB7Ci0gICAgc3VwZXIoRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZS5GTEFUKTsKLSAgICBzZXRQcmVmZXJlbmNlU3RvcmUoV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpCi0gIHsKLSAgICBDb21wb3NpdGUgcGFyZW50ID0gZ2V0RmllbGRFZGl0b3JQYXJlbnQoKTsKLQlHcmlkTGF5b3V0IHBhcmVudExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JcGFyZW50TGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQlwYXJlbnQuc2V0TGF5b3V0KHBhcmVudExheW91dCk7Ci0JCi0vLyAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0Q29udHJvbCgpLCBzb21lIGNvbnRleHQgaWQgaGVyZSk7IAotCi0JR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuTlVMTCk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGdyb3VwLnNldExheW91dChsYXlvdXQpOwotICAgIGdyb3VwLnNldFRleHQoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9DUkVBVElOR19GSUxFUyk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OVUxMKTsKLSAgICBHcmlkRGF0YSBkYXRhMSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhMS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhMS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhMSk7Ci0JCi0gICAgR3JpZExheW91dCBjb21wb3NpdGVMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGNvbXBvc2l0ZUxheW91dC5tYXJnaW5XaWR0aCA9IDU7ICAgLy8gRGVmYXVsdCB2YWx1ZQotICAgIGNvbXBvc2l0ZUxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7Ci0gICAgCi0gICAgU3RyaW5nIHByZWZpeExhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1BSRUZJWDsKLSAgICBTdHJpbmdGaWVsZEVkaXRvciBwcmVmaXggPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoV1NETEVkaXRvclBsdWdpbi5ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfUFJFRklYX1BSRUZFUkVOQ0VfSUQsIHByZWZpeExhYmVsLCBjb21wb3NpdGUpOwotICAgIGFkZEZpZWxkKHByZWZpeCk7Ci0gICAgCi0JU3RyaW5nIG5hbWVzcGFjZUxhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U7Ci0gICAgU3RyaW5nRmllbGRFZGl0b3IgdGFyZ2V0TmFtZXNwYWNlID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKFdTRExFZGl0b3JQbHVnaW4uREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFX0lELCBuYW1lc3BhY2VMYWJlbCwgY29tcG9zaXRlKTsKLSAgICBhZGRGaWVsZCh0YXJnZXROYW1lc3BhY2UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFyZ2V0TmFtZXNwYWNlLmdldFRleHRDb250cm9sKGNvbXBvc2l0ZSksIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1BSRUZfREVGQVVMVF9UTlMpOwotCQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0gICAgR3JpZERhdGEgZ3JpZERhdGE9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIGdyaWREYXRhLmhvcml6b250YWxTcGFuID0gMjsKLSAgICBncmlkRGF0YS52ZXJ0aWNhbEluZGVudCA9IDU7Ci0gICAgc2VwYXJhdG9yLnNldExheW91dERhdGEoZ3JpZERhdGEpOwotICAgIAotICAgIFN0cmluZyBnZW5lcmF0ZVNlcGFyYXRlSW50ZkxhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfR0VORVJBVEVfU0VQQVJBVEVfSU5URVJGQUNFOyAKLSAgICBDb21wb3NpdGUgb25lQ29sdW1uQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5Ob25lKTsKLSAgICBvbmVDb2x1bW5Db21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotICAgIEdyaWREYXRhIGludGZHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIGludGZHcmlkRGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgaW50ZkdyaWREYXRhLmhvcml6b250YWxJbmRlbnQgPSAwOwotICAgIGludGZHcmlkRGF0YS52ZXJ0aWNhbEluZGVudCA9IDA7ICAgIAotICAgIG9uZUNvbHVtbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGludGZHcmlkRGF0YSk7Ci0gICAgZ2VuZXJhdGVTZXBhcmF0ZUludGZGaWVsZEVkaXRvciA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoV1NETEVkaXRvclBsdWdpbi5HRU5FUkFURV9TRVBBUkFURV9JTlRFUkZBQ0VfUFJFRkVSRU5DRV9JRCwgZ2VuZXJhdGVTZXBhcmF0ZUludGZMYWJlbCwgb25lQ29sdW1uQ29tcG9zaXRlKTsKLSAgICBhZGRGaWVsZChnZW5lcmF0ZVNlcGFyYXRlSW50ZkZpZWxkRWRpdG9yKTsKLSAgICAKLSAgICBpbnRlcmZhY2VQcmVmZXJlbmNlc0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTm9uZSk7Ci0gICAgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgaW50ZXJmYWNlUHJlZmVyZW5jZXNDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgR3JpZERhdGEgY29tcG9zaXRlR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBjb21wb3NpdGVHcmlkRGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgY29tcG9zaXRlR3JpZERhdGEuaG9yaXpvbnRhbEluZGVudCA9IDE1OwotICAgIGNvbXBvc2l0ZUdyaWREYXRhLnZlcnRpY2FsSW5kZW50ID0gMDsgICAgCi0gICAgaW50ZXJmYWNlUHJlZmVyZW5jZXNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjb21wb3NpdGVHcmlkRGF0YSk7Ci0gICAgCi0gICAgU3RyaW5nIGludGVyZmFjZVByZWZpeExhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9JTlRFUkZBQ0VfREVGQVVMVF9QUkVGSVg7Ci0gICAgU3RyaW5nRmllbGRFZGl0b3IgaW50ZXJmYWNlUHJlZml4ID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKFdTRExFZGl0b3JQbHVnaW4uSU5URVJGQUNFX1BSRUZJWF9QUkVGRVJFTkNFX0lELCBpbnRlcmZhY2VQcmVmaXhMYWJlbCwgaW50ZXJmYWNlUHJlZmVyZW5jZXNDb21wb3NpdGUpOwotICAgIGFkZEZpZWxkKGludGVyZmFjZVByZWZpeCk7Ci0gICAgCi0gICAgU3RyaW5nIGludGVyZmFjZU5hbWVzcGFjZUxhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9JTlRFUkZBQ0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFOwotICAgIFN0cmluZ0ZpZWxkRWRpdG9yIGludGVyZmFjZU5hbWVzcGFjZSA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcihXU0RMRWRpdG9yUGx1Z2luLklOVEVSRkFDRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfUFJFRkVSRU5DRV9JRCwgaW50ZXJmYWNlTmFtZXNwYWNlTGFiZWwsIGludGVyZmFjZVByZWZlcmVuY2VzQ29tcG9zaXRlKTsKLSAgICBhZGRGaWVsZChpbnRlcmZhY2VOYW1lc3BhY2UpOwotICAgIAotICAgIFN0cmluZyBwb3J0VHlwZUZpbGVuYW1lU3VmZml4TGFiZWwgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0lOVEVSRkFDRV9GSUxFX1NVRkZJWDsKLSAgICBTdHJpbmdGaWVsZEVkaXRvciBpbnRlcmZhY2VTdWZmaXggPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoV1NETEVkaXRvclBsdWdpbi5JTlRFUkZBQ0VfRklMRV9TVUZGSVhfUFJFRkVSRU5DRV9JRCwgcG9ydFR5cGVGaWxlbmFtZVN1ZmZpeExhYmVsLCBpbnRlcmZhY2VQcmVmZXJlbmNlc0NvbXBvc2l0ZSk7Ci0gICAgYWRkRmllbGQoaW50ZXJmYWNlU3VmZml4KTsKLSAgICAKLQlTdHJpbmcgZ2VuZXJhdGVMYWJlbCA9IE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfQVVUT19SRUdFTkVSQVRFX0JJTkRJTkc7Ci0JQm9vbGVhbkZpZWxkRWRpdG9yIGdlbmVyYXRlQmluZGluZ09uU2F2ZSA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoV1NETEVkaXRvclBsdWdpbi5BVVRPX1JFR0VORVJBVEVfQklORElOR19PTl9TQVZFX0lELCBnZW5lcmF0ZUxhYmVsLCBwYXJlbnQpOwotCWFkZEZpZWxkKGdlbmVyYXRlQmluZGluZ09uU2F2ZSk7Ci0gICAgCi0JU3RyaW5nIHNob3dHZW5lcmF0ZURpYWxvZ0xhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9QUk9NUFRfUkVHRU5fQklORElOR19PTl9TQVZFOwotCUJvb2xlYW5GaWVsZEVkaXRvciBzaG93R2VuZXJhdGVEaWFsb2cgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKFdTRExFZGl0b3JQbHVnaW4uUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRV9JRCwgc2hvd0dlbmVyYXRlRGlhbG9nTGFiZWwsIHBhcmVudCk7Ci0JYWRkRmllbGQoc2hvd0dlbmVyYXRlRGlhbG9nKTsKLQkKLQlTdHJpbmcgdW51c2VkSW1wb3J0TGFiZWwgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0VOQUJMRV9BVVRPX0lNUE9SVF9DTEVBTlVQOwotCUJvb2xlYW5GaWVsZEVkaXRvciByZW1vdmVVbnVzZWRJbXBvcnRzID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcihXU0RMRWRpdG9yUGx1Z2luLkFVVE9fSU1QT1JUX0NMRUFOVVBfSUQsIHVudXNlZEltcG9ydExhYmVsLCBwYXJlbnQpOwotCWFkZEZpZWxkKHJlbW92ZVVudXNlZEltcG9ydHMpOwotCQotICAgIFN0cmluZyBvcGVuSW1wb3J0RGlhbG9nTGFiZWwgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0VOQUJMRV9BVVRPX09QRU5fSU1QT1JUX0RJQUxPRzsKLSAgICBCb29sZWFuRmllbGRFZGl0b3Igb3BlbkltcG9ydERpYWxvZyA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoV1NETEVkaXRvclBsdWdpbi5BVVRPX09QRU5fSU1QT1JUX0RJQUxPR19JRCwgb3BlbkltcG9ydERpYWxvZ0xhYmVsLCBwYXJlbnQpOwotICAgIGFkZEZpZWxkKG9wZW5JbXBvcnREaWFsb2cpOwotCQotICAgIGJvb2xlYW4gZW5hYmxlZCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKFdTRExFZGl0b3JQbHVnaW4uR0VORVJBVEVfU0VQQVJBVEVfSU5URVJGQUNFX1BSRUZFUkVOQ0VfSUQpOwotICAgIHNldENoaWxkcmVuRW5hYmxlZChpbnRlcmZhY2VQcmVmZXJlbmNlc0NvbXBvc2l0ZSwgZW5hYmxlZCk7Ci0JYXBwbHlEaWFsb2dGb250KHBhcmVudCk7Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZShQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7Ci0JICBzdXBlci5wcm9wZXJ0eUNoYW5nZShldmVudCk7Ci0JICBib29sZWFuIGVuYWJsZWQgPSBnZW5lcmF0ZVNlcGFyYXRlSW50ZkZpZWxkRWRpdG9yLmdldEJvb2xlYW5WYWx1ZSgpOwotCSAgc2V0Q2hpbGRyZW5FbmFibGVkKGludGVyZmFjZVByZWZlcmVuY2VzQ29tcG9zaXRlLCBlbmFibGVkKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRDaGlsZHJlbkVuYWJsZWQoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgYm9vbGVhbiBlbmFibGVkKSB7Ci0JICBDb250cm9sW10gY2hpbGRyZW4gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLQkgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0JCSAgY2hpbGRyZW5baV0uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpIHsKLQkgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCSAgYm9vbGVhbiBlbmFibGVkID0gZ2VuZXJhdGVTZXBhcmF0ZUludGZGaWVsZEVkaXRvci5nZXRCb29sZWFuVmFsdWUoKTsKLQkgIHNldENoaWxkcmVuRW5hYmxlZChpbnRlcmZhY2VQcmVmZXJlbmNlc0NvbXBvc2l0ZSwgZW5hYmxlZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFNlbGVjdGlvbk1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMU2VsZWN0aW9uTWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjODg4ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMU2VsZWN0aW9uTWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25NYXBwZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uTWFwcGVyIHsKLQotCXB1YmxpYyBJU2VsZWN0aW9uIG1hcFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7ICAKLQkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbjsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgewotCQkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBBZGFwdGVyKSB7Ci0JCQkJCWxpc3QuYWRkKCgoQWRhcHRlcilvKS5nZXRUYXJnZXQoKSk7Ci0JCQkJfSAgCi0JCQkJZWxzZSB7Ci0JCQkJCWxpc3QuYWRkKG8pOwotCQkJCX0gIAotCQkJfSAgCi0JCX0KLQkJcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGxpc3QpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1MDRlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLk5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBBZGRFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24gewotCXByb3RlY3RlZCBOb2RlIHBhcmVudE5vZGU7Ci0JcHJvdGVjdGVkIFN0cmluZyBwcmVmaXg7Ci0JcHJvdGVjdGVkIFN0cmluZyBub2RlTmFtZTsKLQlwcm90ZWN0ZWQgRWxlbWVudCBuZXdFbGVtZW50OwotCXByb3RlY3RlZCBOb2RlIHJlbGF0aXZlTm9kZSA9IG51bGw7Ci0JcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQ7Ci0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQlwcm90ZWN0ZWQgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQ7Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBzZWxlY3ROZXdseUNyZWF0ZWRPYmplY3QgPSB0cnVlOyAvLyBXZSBzaG91bGQgbm90IGJlCi0JCQkJCQkJCQkJCQkJCS8vIHNlbGVjdGluZyB0aGUKLQkJCQkJCQkJCQkJCQkJLy8gb2JqZWN0IGluIHRoZQotCQkJCQkJCQkJCQkJCQkvLyBhY3Rpb24uLi4uLiBUT0RPCi0KLQlwdWJsaWMgQWRkRWxlbWVudEFjdGlvbihTdHJpbmcgdGV4dCwgU3RyaW5nIGltYWdlRGVzY3JpcHRvcktleSwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgbm9kZU5hbWUpIHsKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKGltYWdlRGVzY3JpcHRvcktleSkpOwotCQl0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotCQl0aGlzLm5vZGVOYW1lID0gbm9kZU5hbWU7Ci0JfQotCi0JcHVibGljIEFkZEVsZW1lbnRBY3Rpb24oU3RyaW5nIHRleHQsIFN0cmluZyBpbWFnZURlc2NyaXB0b3JLZXksIE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGxvY2FsTmFtZSkgewotCQlzZXRUZXh0KHRleHQpOwotCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoaW1hZ2VEZXNjcmlwdG9yS2V5KSk7Ci0JCXRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Ci0JCXRoaXMucHJlZml4ID0gcHJlZml4OwotCQl0aGlzLm5vZGVOYW1lID0gbG9jYWxOYW1lOwotCX0KLQotCXB1YmxpYyBBZGRFbGVtZW50QWN0aW9uKFN0cmluZyB0ZXh0LCBOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbE5hbWUpIHsKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKG51bGwpOwotCQl0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotCQl0aGlzLnByZWZpeCA9IHByZWZpeDsKLQkJdGhpcy5ub2RlTmFtZSA9IGxvY2FsTmFtZTsKLQl9Ci0KLQlwdWJsaWMgQWRkRWxlbWVudEFjdGlvbihOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbE5hbWUsIE5vZGUgcmVsYXRpdmVOb2RlKSB7Ci0JCXRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Ci0JCXRoaXMucHJlZml4ID0gcHJlZml4OwotCQl0aGlzLm5vZGVOYW1lID0gbG9jYWxOYW1lOwotCQl0aGlzLnJlbGF0aXZlTm9kZSA9IHJlbGF0aXZlTm9kZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb21wdXRlVG9wTGV2ZWxSZWZDaGlsZChib29sZWFuIGlzRW5hYmxlZCkgewotCQljb21wdXRlVG9wTGV2ZWxSZWZDaGlsZCA9IGlzRW5hYmxlZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRFZGl0b3JQYXJ0KElFZGl0b3JQYXJ0IGVkaXRvclBhcnQpIHsKLQkJdGhpcy5lZGl0b3JQYXJ0ID0gZWRpdG9yUGFydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RGlhbG9nKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWJvb2xlYW4gb2sgPSBzaG93RGlhbG9nKCk7Ci0JCWlmIChvaykgewotCQkJYmVnaW5SZWNvcmRpbmcoKTsKLQkJCXBlcmZvcm1BZGRFbGVtZW50KCk7Ci0JCQllbmRSZWNvcmRpbmcoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1BZGRFbGVtZW50KCkgewotCQlpZiAocGFyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQluZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChub2RlTmFtZSk7Ci0JCQlhZGRBdHRyaWJ1dGVzKG5ld0VsZW1lbnQpOwotCQkJaWYgKHJlbGF0aXZlTm9kZSA9PSBudWxsICYmIGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKSB7Ci0JCQkJcmVsYXRpdmVOb2RlID0gY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQobmV3RWxlbWVudCk7Ci0JCQl9Ci0KLQkJCWlmIChyZWxhdGl2ZU5vZGUgPT0gbnVsbCkgewotCQkJCXBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdFbGVtZW50LCByZWxhdGl2ZU5vZGUpOwotCQkJfQotCQkJLy8gZm9ybWF0KHBhcmVudE5vZGUpOwotCQkJZm9ybWF0KG5ld0VsZW1lbnQpOwotCQkJLy8gVWdseS4uLi4uIFdlIHNob3VsZCBub3QgYmUgc2VsZWN0aW5nIHRoZSBvYmplY3QgaW4gdGhlIGdyYXBoCi0JCQkvLyB2aWV3IGluIHRoZSBBY3Rpb24uCi0JCQkvLyBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVkIG91dC4gV2UgYWRkIHRoaXMgYm9vbGVhbiBjaGVjawotCQkJLy8gYmVjYXVzZSBXU0RMU2V0VHlwZURpYWxvZy5qYXZhCi0JCQkvLyB1c2VzIEFkZEltcG9ydEFjdGlvbi5qYXZhIGJ1dCB3ZSBzaG91bGQgbm90IGJlIHNlbGVjdGluZyB0aGUKLQkJCS8vIG5ld2x5IGNyZWF0ZWQgaW1wb3J0Li4uLgotCQkJaWYgKHNlbGVjdE5ld2x5Q3JlYXRlZE9iamVjdCkgewotCQkJCXNlbGVjdE9iamVjdEZvck5ld0VsZW1lbnQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8vIFVnbHkuLi4uLiBXZSBzaG91bGQgbm90IGJlIHNlbGVjdGluZyB0aGUgb2JqZWN0IGluIHRoZSBncmFwaCB2aWV3IGluCi0JLy8gdGhlIEFjdGlvbi4KLQkvLyBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVkIG91dC4gV2UgYWRkIHRoaXMgYm9vbGVhbiBjaGVjayBiZWNhdXNlCi0JLy8gV1NETFNldFR5cGVEaWFsb2cuamF2YQotCS8vIHVzZXMgQWRkSW1wb3J0QWN0aW9uLmphdmEgYnV0IHdlIHNob3VsZCBub3QgYmUgc2VsZWN0aW5nIHRoZSBuZXdseQotCS8vIGNyZWF0ZWQgaW1wb3J0Li4uLgotCS8vIFdlIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHJ1bigpCi0JcHVibGljIHZvaWQgc2VsZWN0T2JqZWN0Rm9yTmV3RWxlbWVudChib29sZWFuIHNlbGVjdCkgewotCQlzZWxlY3ROZXdseUNyZWF0ZWRPYmplY3QgPSBzZWxlY3Q7Ci0JfQotCi0JcHVibGljIE5vZGUgZ2V0Tm9kZSgpIHsKLQkJaWYgKHBhcmVudE5vZGUgIT0gbnVsbCkgewotCQkJcmV0dXJuIHBhcmVudE5vZGU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuX1VJX0FDVElPTl9BREQ7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQotCXByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoU3RyaW5nIG5vZGVOYW1lKSB7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gcGFyZW50Tm9kZS5nZXRPd25lckRvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBlbGVtZW50ID0gKHByZWZpeCAhPSBudWxsICYmIHByZWZpeC5sZW5ndGgoKSA+IDApID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChwcmVmaXggKyAiOiIgKyBub2RlTmFtZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBlbGVtZW50OwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KSB7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCBmb3JtYXQoTm9kZSBwYXJlbnROb2RlKSB7Ci0JCWlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgSURPTU5vZGUpIHsKLQkJCS8vIGZvcm1hdCBzZWxlY3RlZCBub2RlCi0JCQlGb3JtYXRQcm9jZXNzb3JYTUwgZm9ybWF0UHJvY2Vzc29yWE1MID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotCQkJZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKSBwYXJlbnROb2RlKTsKLQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIEVsZW1lbnQgZ2V0RGVmaW5pdGlvbkVsZW1lbnQoRWxlbWVudCBwYXJlbnRFbGVtZW50KSB7Ci0JCUVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBudWxsOwotCi0JCWZvciAoTm9kZSBub2RlID0gcGFyZW50RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQlFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgbm9kZTsKLQkJCQlpZiAoV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShlbGVtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pIHsKLQkJCQkJZGVmaW5pdGlvbkVsZW1lbnQgPSBlbGVtZW50OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRlZmluaXRpb25FbGVtZW50OwotCX0KLQotCXB1YmxpYyBFbGVtZW50IGdldE5ld0VsZW1lbnQoKSB7Ci0JCXJldHVybiBuZXdFbGVtZW50OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0T2JqZWN0Rm9yTmV3RWxlbWVudCgpIHsKLQkJaWYgKGVkaXRvclBhcnQgPT0gbnVsbCkgewotCQkJZWRpdG9yUGFydCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCX0KLQkJaWYgKGVkaXRvclBhcnQgIT0gbnVsbCAmJiBkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCU9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgbmV3RWxlbWVudCk7Ci0JCQlpZiAob2JqZWN0ICE9IG51bGwpIHsKLQkJCQlJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLQkJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgewotCQkJCQlzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0T2JqZWN0KFdTRExFbGVtZW50IG9iamVjdCkgewotCQlpZiAoZWRpdG9yUGFydCA9PSBudWxsKSB7Ci0JCQllZGl0b3JQYXJ0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJfQotCQlpZiAoZWRpdG9yUGFydCAhPSBudWxsICYmIGRlZmluaXRpb24gIT0gbnVsbCkgewotCQkJaWYgKG9iamVjdCAhPSBudWxsKSB7Ci0JCQkJSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0JCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKLQkJCQkJc2VsZWN0aW9uUHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgc2hvd0RpYWxvZ0hlbHBlcihTdHJpbmcgdGl0bGUsIFN0cmluZyBkZWZhdWx0TmFtZSwgTGlzdCB1c2VkTmFtZXMpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGRlZmF1bHROYW1lOwotCQlOZXdDb21wb25lbnREaWFsb2cgZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhXU0RMRWRpdG9yUGx1Z2luLmdldFNoZWxsKCksIHRpdGxlLCBkZWZhdWx0TmFtZSwgdXNlZE5hbWVzKTsKLQkJaW50IHJjID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpIHsKLQkJCXJlc3VsdCA9IGRpYWxvZy5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIE5vZGUgY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQoTm9kZSBub2RlVG9BZGQpIHsKLQkJTm9kZSByZXN1bHQgPSBudWxsOwotCQlpbnQgYSA9IGdldFByZWNlZGVuY2Uobm9kZVRvQWRkKTsKLQotCQlmb3IgKE5vZGUgbm9kZSA9IHBhcmVudE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQlpbnQgYiA9IGdldFByZWNlZGVuY2Uobm9kZSk7Ci0JCQkJaWYgKGIgPiBhKSB7Ci0JCQkJCXJlc3VsdCA9IG5vZGU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZURlZmluaXRpb25TdHViKCkgewotCQlpZiAoZG9jdW1lbnQgIT0gbnVsbCkgewotCQkJLy8gQ3JlYXRlIHRoZSBEZWZpbml0aW9ucyBlbGVtZW50IHdpdGggcHJvcGVyIG5hbWVzcGFjZQotCQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZSA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCQlTdHJpbmcgY2hhclNldCA9IHByZWZlcmVuY2UuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLQkJCWlmIChjaGFyU2V0ID09IG51bGwgfHwgY2hhclNldC50cmltKCkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigieG1sIiwgInZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIgKyBjaGFyU2V0ICsgIlwiIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgid3NkbDpkZWZpbml0aW9ucyIpOyAvLyROT04tTkxTLTEkCi0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQotCQkJLy8gQWRkIHZhcmlvdXMgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgaGVyZS4KLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczpzb2FwIiwgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6dG5zIiwgZ2V0RGVmYXVsdE5hbWVzcGFjZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOndzZGwiLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBnZXRGaWxlTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIsIGdldERlZmF1bHROYW1lc3BhY2UoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkJZGVmaW5pdGlvbi5zZXRFbGVtZW50KHJvb3QpOwotCQkJcGFyZW50Tm9kZSA9IHJvb3Q7Ci0JCQlwcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKCkgewotCQlTdHJpbmcgbmFtZXNwYWNlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhXU0RMRWRpdG9yUGx1Z2luLkRFRkFVTFRfVEFSR0VUX05BTUVTUEFDRV9JRCk7IAotCQlpZiAoIW5hbWVzcGFjZS5lbmRzV2l0aCgiLyIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCW5hbWVzcGFjZSA9IG5hbWVzcGFjZS5jb25jYXQoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJbmFtZXNwYWNlICs9IGdldEZpbGVOYW1lKCkgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLQotCQlyZXR1cm4gbmFtZXNwYWNlOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEZpbGVOYW1lKCkgewotCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotCQlJUGF0aCBmaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGVMb2NhdGlvbik7Ci0JCXJldHVybiBmaWxlUGF0aC5yZW1vdmVGaWxlRXh0ZW5zaW9uKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSGFzaE1hcCBwcmVjZWRlbmNlTWFwID0gY3JlYXRlUHJlY2VkZW5jZU1hcCgpOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBpbnQgZ2V0UHJlY2VkZW5jZShOb2RlIG5vZGUpIHsKLQkJaW50IHJlc3VsdCA9IDI7Ci0JCVN0cmluZyBsb2NhbE5hbWUgPSBub2RlLmdldExvY2FsTmFtZSgpOwotCQlpZiAobG9jYWxOYW1lICE9IG51bGwpIHsKLQkJCUludGVnZXIgaW50ZWdlciA9IChJbnRlZ2VyKSBwcmVjZWRlbmNlTWFwLmdldChsb2NhbE5hbWUpOwotCQkJaWYgKGludGVnZXIgIT0gbnVsbCkgewotCQkJCXJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSGFzaE1hcCBjcmVhdGVQcmVjZWRlbmNlTWFwKCkgewotCQlIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDEpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5JTVBPUlRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDMpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5UWVBFU19FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNCkpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLk1FU1NBR0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDUpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5QT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDYpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig3KSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuU0VSVklDRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoOCkpOwotCQlyZXR1cm4gaGFzaE1hcDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWY0MDY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIHByZWZpeDsKLQkKLQlwdWJsaWMgQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHN1Z2dlc3RlZFByZWZpeCkKLQl7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCQl0aGlzLnByZWZpeCA9IHN1Z2dlc3RlZFByZWZpeDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCVN0cmluZyBleGlzdGluZ1ByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KG5hbWVzcGFjZSk7Ci0JCWlmIChleGlzdGluZ1ByZWZpeCAhPSBudWxsKQotCQl7Ci0JCQlwcmVmaXggPSBleGlzdGluZ1ByZWZpeDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXByZWZpeCA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUHJlZml4KGRlZmluaXRpb24sIHByZWZpeCk7Ci0JCQlFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotCQkJaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0JCQl7Ci0JCQkJZGVmaW5pdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgcHJlZml4LCBuYW1lc3BhY2UpOyAvLyROT04tTkxTLTEkCi0JCQl9CQkJCi0JCX0JCQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpCi0JewotCQlyZXR1cm4gcHJlZml4OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRJbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRJbXBvcnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1YTBjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkSW1wb3J0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsgCi0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEBkZXByZWNhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGRJbXBvcnRBY3Rpb24gZXh0ZW5kcyBBZGRFbGVtZW50QWN0aW9uCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeDsKLQotICBwdWJsaWMgQWRkSW1wb3J0QWN0aW9uKElFZGl0b3JQYXJ0IHBhcnQsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4KQotICB7Ci0JdGhpcyhwYXJ0LCBkZWZpbml0aW9uLCBwYXJlbnROb2RlLCBwcmVmaXgsIG51bGwsIG51bGwpOwotICB9Ci0gIAotICBwdWJsaWMgQWRkSW1wb3J0QWN0aW9uKElFZGl0b3JQYXJ0IHBhcnQsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQsICJpY29ucy9pbXBvcnRfb2JqLmdpZiIsIHBhcmVudE5vZGUsIHByZWZpeCwgImltcG9ydCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCSAgc2V0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLQkgIHNldENvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKHRydWUpOwotCSAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0JICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0JICBzZXRFZGl0b3JQYXJ0KHBhcnQpOwotCSAgCi0JICBpZiAocGFydCBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgewotCSAgCWRvY3VtZW50ID0gKChJRE9NTW9kZWwpICgoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBwYXJ0KS5nZXRNb2RlbCgpKS5nZXREb2N1bWVudCgpOwotCSAgfQotICB9Ci0gICAgICAgIAotICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KFN0cmluZyBub2RlTmFtZSkKLSAgewotICAJaWYgKGVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCAhPSBudWxsICYmIG5hbWVzcGFjZSAhPSBudWxsKQotICAJeyAKLSAgICAJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uKTsKLSAgICAJaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0gICAgCXsgICAgCi0JICAJICBkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBlbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXgsIG5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAJfSAgICAgIAkKLSAgCX0KLSAgCXJldHVybiBzdXBlci5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXgoU3RyaW5nIG5zUHJlZml4KQotICB7Ci0gIAl0aGlzLmVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCA9IG5zUHJlZml4OwotICB9Ci0gICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiLCBuYW1lc3BhY2UgIT0gbnVsbCA/IG5hbWVzcGFjZSA6ICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoImxvY2F0aW9uIiwgbG9jYXRpb24gIT0gbnVsbCA/IGxvY2F0aW9uIDogIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1BZGRFbGVtZW50KCkgewotICAJaWYgKHBhcmVudE5vZGUgPT0gbnVsbCB8fCAoZG9jdW1lbnQgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCkgPT0gMCkpIHsKLSAgCQljcmVhdGVEZWZpbml0aW9uU3R1YigpOwotICAJfQotICAJCi0gIAlzdXBlci5wZXJmb3JtQWRkRWxlbWVudCgpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZFdTSVNjaGVtYUltcG9ydEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZFdTSVNjaGVtYUltcG9ydEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDBhMjcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24KLXsKLSAgICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICAgIHByb3RlY3RlZCBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50OwotICAgIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotICAgIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb247Ci0gICAgcHJvdGVjdGVkIFN0cmluZyBlbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXg7Ci0KLSAgICBwdWJsaWMgQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0gICAgfQotCi0gICAgcHVibGljIE5vZGUgZ2V0Tm9kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZGVmaW5pdGlvbkVsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkKLSAgICB7Ci0gICAgCXJldHVybiBNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQ7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgRWxlbWVudCBnZXRPckNyZWF0ZVR5cGVzRWxlbWVudCgpCi0gICAgewotICAgICAgICBFbGVtZW50IHR5cGVzRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uLmdldFR5cGVzKCkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQWRkRWxlbWVudEFjdGlvbiBhZGRUeXBlc0FjdGlvbiA9IG5ldyBBZGRFbGVtZW50QWN0aW9uKCIiLCAiaWNvbnMveHNkX29iai5naWYiLCBkZWZpbml0aW9uRWxlbWVudCwgZGVmaW5pdGlvbkVsZW1lbnQuZ2V0UHJlZml4KCksICJ0eXBlcyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICAgICAgICAgIGFkZFR5cGVzQWN0aW9uLnNldENvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKHRydWUpOwotICAgICAgICAgICAgICAgIGFkZFR5cGVzQWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgICAgIHR5cGVzRWxlbWVudCA9IGFkZFR5cGVzQWN0aW9uLmdldE5ld0VsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBmb3JtYXQodHlwZXNFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVzRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uLmdldFR5cGVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlc0VsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBFbGVtZW50IGdldEltcG9ydEhvbGRlckVsZW1lbnQoRWxlbWVudCB0eXBlc0VsZW1lbnQpIHsKLSAgICAJRWxlbWVudCBpbXBvcnRIb2xkZXJFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSB0eXBlc0VsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotICAgICAgICAgICAgICAgIGlmIChYU0RDb25zdGFudHMuU0NIRU1BX0VMRU1FTlRfVEFHLmVxdWFscyhlbGVtZW50LmdldExvY2FsTmFtZSgpKSAmJiAhZWxlbWVudC5oYXNBdHRyaWJ1dGVOUyhudWxsLCBYU0RDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbXBvcnRIb2xkZXJFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gaW1wb3J0SG9sZGVyRWxlbWVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRWxlbWVudCBnZXRPckNyZWF0ZUltcG9ydEhvbGRlckVsZW1lbnQoRWxlbWVudCB0eXBlc0VsZW1lbnQpCi0gICAgewotICAgICAgICBFbGVtZW50IGltcG9ydEhvbGRlckVsZW1lbnQgPSBnZXRJbXBvcnRIb2xkZXJFbGVtZW50KHR5cGVzRWxlbWVudCk7Ci0gICAgICAgIGlmIChpbXBvcnRIb2xkZXJFbGVtZW50ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFkZEVsZW1lbnRBY3Rpb24gYWRkSW1wb3J0SG9sZGVyQWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oIiIsICJpY29ucy94c2Rfb2JqLmdpZiIsIHR5cGVzRWxlbWVudCwgInhzZCIsIFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlcyhFbGVtZW50IG5ld0VsZW1lbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIiwgV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYWRkSW1wb3J0SG9sZGVyQWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgaW1wb3J0SG9sZGVyRWxlbWVudCA9IGFkZEltcG9ydEhvbGRlckFjdGlvbi5nZXROZXdFbGVtZW50KCk7Ci0gICAgICAgICAgICBmb3JtYXQoaW1wb3J0SG9sZGVyRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGltcG9ydEhvbGRlckVsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYWRkIHRoZSBpbXBvcnQgaWYgaXQncyBhbHJlYWR5IHRoZXJlCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaW1wb3J0Tm90QWxyZWFkeUV4aXN0cygpIHsKLSAgICAJYm9vbGVhbiBub3RFeGlzdHMgPSB0cnVlOwotICAgIAkKLSAgICAJaWYgKGRlZmluaXRpb24uZ2V0VHlwZXMoKSAhPSBudWxsKSB7Ci0gICAgCQlFbGVtZW50IHR5cGVzRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uLmdldFR5cGVzKCkpOwotICAgIAkJRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gZ2V0SW1wb3J0SG9sZGVyRWxlbWVudCh0eXBlc0VsZW1lbnQpOwotCi0gICAgCQlpZiAoc2NoZW1hRWxlbWVudCAhPSBudWxsKSB7Ci0gICAgCQkJLy8gQ29sbGVjdCBjaGlsZHJlbgotICAgIAkJCU5vZGUgbm9kZSA9IHNjaGVtYUVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotICAgIAkJCWphdmEudXRpbC5WZWN0b3Igc2NoZW1hQ2hpbGRyZW4gPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIAkJCWlmIChub2RlICE9IG51bGwpIHsKLSAgICAJCQkJTm9kZSBjaGlsZCA9IG5vZGU7Ci0JCQkJCQotICAgIAkJCQlpZiAoIShjaGlsZCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5UZXh0SW1wbCkpIHsKLSAgICAJCQkJCXNjaGVtYUNoaWxkcmVuLmFkZEVsZW1lbnQoY2hpbGQpOwotICAgIAkJCQl9Ci0JCQkJCQotICAgIAkJCQl3aGlsZSAoY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSAhPSBudWxsKSB7Ci0gICAgCQkJCQljaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgCQkJCQlpZiAoIShjaGlsZCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5UZXh0SW1wbCkpIHsKLSAgICAJCQkJCQlzY2hlbWFDaGlsZHJlbi5hZGRFbGVtZW50KGNoaWxkKTsKLSAgICAJCQkJCX0KLSAgICAJCQkJfQotCi0gICAgCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzY2hlbWFDaGlsZHJlbi5zaXplKCk7IGluZGV4KyspIHsKLSAgICAJCQkJCUVsZW1lbnQgc2NoZW1hQ2hpbGQgPSAoRWxlbWVudCkgc2NoZW1hQ2hpbGRyZW4uZWxlbWVudEF0KGluZGV4KTsKLSAgICAJCQkJCVN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IHNjaGVtYUNoaWxkLmdldEF0dHJpYnV0ZShYU0RDb25zdGFudHMuU0NIRU1BTE9DQVRJT05fQVRUUklCVVRFKTsKLSAgICAJCQkJCVN0cmluZyBzY2hlbWFOYW1lc3BhY2UgPSBzY2hlbWFDaGlsZC5nZXRBdHRyaWJ1dGUoWFNEQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUpOwotCQkJCQotICAgIAkJCQkJaWYgKHNjaGVtYUxvY2F0aW9uLmVxdWFscyhsb2NhdGlvbikgJiYgc2NoZW1hTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgCQkJCQkJbm90RXhpc3RzID0gZmFsc2U7Ci0gICAgCQkJCQkJYnJlYWs7Ci0gICAgCQkJCQl9Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBub3RFeGlzdHM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsICYmIGltcG9ydE5vdEFscmVhZHlFeGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgYmVnaW5SZWNvcmRpbmcoKTsKLSAgICAgICAgICAgIHBlcmZvcm1BZGRFbGVtZW50KCk7Ci0gICAgICAgICAgICBlbmRSZWNvcmRpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWRkRWxlbWVudCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBnZXRPckNyZWF0ZVR5cGVzRWxlbWVudCgpOwotICAgICAgICAgICAgRWxlbWVudCBpbXBvcnRIb2xkZXJFbGVtZW50ID0gZ2V0T3JDcmVhdGVJbXBvcnRIb2xkZXJFbGVtZW50KHR5cGVzRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIEFkZEVsZW1lbnRBY3Rpb24gYWRkSW1wb3J0QWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oIiIsICJpY29ucy94c2Rfb2JqLmdpZiIsIGltcG9ydEhvbGRlckVsZW1lbnQsIGltcG9ydEhvbGRlckVsZW1lbnQuZ2V0UHJlZml4KCksIFhTRENvbnN0YW50cy5JTVBPUlRfRUxFTUVOVF9UQUcpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoWFNEQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUsIG5hbWVzcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKFhTRENvbnN0YW50cy5TQ0hFTUFMT0NBVElPTl9BVFRSSUJVVEUsIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYWRkSW1wb3J0QWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgRWxlbWVudCBuZXdFbGVtZW50ID0gYWRkSW1wb3J0QWN0aW9uLmdldE5ld0VsZW1lbnQoKTsKLSAgICAgICAgICAgIGZvcm1hdChuZXdFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeChTdHJpbmcgbnNQcmVmaXgpCi0gICAgewotICAgICAgICB0aGlzLmVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCA9IG5zUHJlZml4OwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBmb3JtYXQoTm9kZSBwYXJlbnROb2RlKQotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZm9ybWF0IHNlbGVjdGVkIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBGb3JtYXRQcm9jZXNzb3JYTUwgZm9ybWF0UHJvY2Vzc29yWE1MID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotICAgICAgICAgICAgZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKXBhcmVudE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0Jhc2VOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQmFzZU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VkMzViZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQmFzZU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOyAKLSAgICAgICAgICAgICAgICAgICAgICAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZU5vZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsgCi0gIHB1YmxpYyBhYnN0cmFjdCBOb2RlIGdldE5vZGUoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKTsKLQotICBwdWJsaWMgdm9pZCBiZWdpblJlY29yZGluZygpCi0gIHsgICAgCi0gICAgTm9kZSBub2RlID0gZ2V0Tm9kZSgpOyAgCi0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICAoKElET01Ob2RlKW5vZGUpLmdldE1vZGVsKCkuYmVnaW5SZWNvcmRpbmcodGhpcywgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkpOyAgCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZW5kUmVjb3JkaW5nKCkKLSAgeyAgICAgICAgICAgICAgICAgCi0gICAgTm9kZSBub2RlID0gZ2V0Tm9kZSgpOyAKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgIHsKLSAgICAgICgoSURPTU5vZGUpbm9kZSkuZ2V0TW9kZWwoKS5lbmRSZWNvcmRpbmcodGhpcyk7ICAKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvRWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9FZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWViY2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9FZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5FZGl0TmFtZXNwYWNlc0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01OYW1lc3BhY2VJbmZvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBFZGl0TmFtZXNwYWNlc0FjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIHB1YmxpYyBFZGl0TmFtZXNwYWNlc0FjdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzZXRUZXh0KE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVMpOyAvLyROT04tTkxTLTEkCi0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBET01OYW1lc3BhY2VJbmZvTWFuYWdlciBuYW1lc3BhY2VJbmZvTWFuYWdlciA9IG5ldyBET01OYW1lc3BhY2VJbmZvTWFuYWdlcigpOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgbmFtZXNwYWNlSW5mb0xpc3QgPSBuYW1lc3BhY2VJbmZvTWFuYWdlci5nZXROYW1lc3BhY2VJbmZvTGlzdChlbGVtZW50KTsKLS8vICAgICAgTGlzdCBvbGROYW1lc3BhY2VJbmZvTGlzdCA9IE5hbWVzcGFjZUluZm8uY2xvbmVOYW1lc3BhY2VJbmZvTGlzdChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0KLSAgICAgIC8vIGhlcmUgd2Ugc3RvcmUgYSBjb3B5IG9mIHRoZSBvbGQgaW5mbyBmb3IgZWFjaCBOYW1lc3BhY2VJbmZvCi0gICAgICAvLyB0aGlzIGluZm8gd2lsbCBiZSB1c2VkIGluIGNyZWF0ZVByZWZpeE1hcHBpbmcoKSB0byBmaWd1cmUgb3V0IGhvdyB0byB1cGRhdGUgdGhlIGRvY3VtZW50IAotICAgICAgLy8gaW4gcmVzcG9uc2UgdG8gdGhlc2UgY2hhbmdlcwotICAgICAgZm9yIChJdGVyYXRvciBpID0gbmFtZXNwYWNlSW5mb0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0gICAgICAgIE5hbWVzcGFjZUluZm8gb2xkQ29weSA9IG5ldyBOYW1lc3BhY2VJbmZvKGluZm8pOwotICAgICAgICBpbmZvLnNldFByb3BlcnR5KCJvbGRDb3B5Iiwgb2xkQ29weSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotCSAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgICAgRWRpdE5hbWVzcGFjZXNEaWFsb2cgZGlhbG9nID0gbmV3IEVkaXROYW1lc3BhY2VzRGlhbG9nKFdTRExFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKSwgIHBhdGgsIE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVNfRElBTE9HX1RJVExFLCBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2VJbmZvTGlzdCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGludCByYyA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0gICAgICBpZiAocmMgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkKLSAgICAgIHsgICAgICAJCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YXJnZXROYW1lc3BhY2UiLCBkaWFsb2cuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOyAvLyROT04tTkxTLTEkCi0JCQotICAgICAgICBMaXN0IG5ld0luZm9MaXN0ID0gZGlhbG9nLmdldE5hbWVzcGFjZUluZm9MaXN0KCk7Ci0gICAgICAgIG5hbWVzcGFjZUluZm9NYW5hZ2VyLnJlbW92ZU5hbWVzcGFjZUluZm8oZWxlbWVudCk7Ci0gICAgICAgIG5hbWVzcGFjZUluZm9NYW5hZ2VyLmFkZE5hbWVzcGFjZUluZm8oZWxlbWVudCwgbmV3SW5mb0xpc3QsIGZhbHNlKTsKLQotLyoKLSAgICAgICAgLy8gc2VlIGlmIHdlIG5lZWQgdG8gcmVuYW1lIGFueSBwcmVmaXhlcwotICAgICAgICBNYXAgcHJlZml4TWFwcGluZyA9IGNyZWF0ZVByZWZpeE1hcHBpbmcob2xkTmFtZXNwYWNlSW5mb0xpc3QsIG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICAgICAgaWYgKHByZWZpeE1hcHBpbmcuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIC8vbWFuYWdlci5nZXRNb2RlbCgpLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAgIFJlcGxhY2VQcmVmaXhBY3Rpb24gcmVwbGFjZVByZWZpeEFjdGlvbiA9IG5ldyBSZXBsYWNlUHJlZml4QWN0aW9uKGVsZW1lbnQsIHByZWZpeE1hcHBpbmcpOwotICAgICAgICAgIHJlcGxhY2VQcmVmaXhBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgLy9tYW5hZ2VyLmdldE1vZGVsKCkuY2hhbmdlZE1vZGVsKCk7Ci0gICAgICAgIH0KLSovICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgTWFwIGNyZWF0ZVByZWZpeE1hcHBpbmcoTGlzdCBvbGRMaXN0LCBMaXN0IG5ld0xpc3QpCi0gIHsKLSAgICBNYXAgbWFwID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgSGFzaHRhYmxlIG9sZFVSSVRvUHJlZml4VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gb2xkTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgTmFtZXNwYWNlSW5mbyBvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotICAgICAgb2xkVVJJVG9QcmVmaXhUYWJsZS5wdXQob2xkSW5mby51cmksIG9sZEluZm8pOwotICAgIH0KLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IG5ld0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE5hbWVzcGFjZUluZm8gbmV3SW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLSAgICAgIE5hbWVzcGFjZUluZm8gb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBvbGRVUklUb1ByZWZpeFRhYmxlLmdldChuZXdJbmZvLnVyaSAhPSBudWxsID8gbmV3SW5mby51cmkgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gaWYgb2xkSW5mbyBpcyBub24gbnVsbCAuLi4gdGhlcmUncyBhIG1hdGNoaW5nIFVSSSBpbiB0aGUgb2xkIHNldAotICAgICAgLy8gd2UgY2FuIHVzZSBpdHMgcHJlZml4IHRvIGRldGVtaW5lIG91dCBtYXBwaW5nCi0gICAgICAvLwotICAgICAgLy8gaWYgb2xkSW5mbyBpcyBudWxsIC4uLiAgd2UgdXNlIHRoZSAnb2xkQ29weScgd2Ugc3Rhc2hlZCBhd2F5IAotICAgICAgLy8gYXNzdW1pbmcgdGhhdCB0aGUgdXNlciBjaGFuZ2VkIHRoZSBVUkkgYW5kIHRoZSBwcmVmaXgKLSAgICAgIGlmIChvbGRJbmZvID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgbmV3SW5mby5nZXRQcm9wZXJ0eSgib2xkQ29weSIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0KLSAgICAgIGlmIChvbGRJbmZvICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuZXdQcmVmaXggPSBuZXdJbmZvLnByZWZpeCAhPSBudWxsID8gbmV3SW5mby5wcmVmaXggOiAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICBTdHJpbmcgb2xkUHJlZml4ID0gb2xkSW5mby5wcmVmaXggIT0gbnVsbCA/IG9sZEluZm8ucHJlZml4IDogIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKCFvbGRQcmVmaXguZXF1YWxzKG5ld1ByZWZpeCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXAucHV0KG9sZFByZWZpeCwgbmV3UHJlZml4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvSVdTRExUb29sYmFyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvSVdTRExUb29sYmFyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmIyNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0lXU0RMVG9vbGJhckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLQotcHVibGljIGludGVyZmFjZSBJV1NETFRvb2xiYXJBY3Rpb24gZXh0ZW5kcyBJQWN0aW9uewotCXB1YmxpYyB2b2lkIHNldEVkaXRvclBhcnQoSUVkaXRvclBhcnQgZWRpdG9yUGFydCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5Jbk5ld0VkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5Jbk5ld0VkaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNlMDc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuSW5OZXdFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk9wZW5PblNlbGVjdGlvbkhlbHBlcjsKLQotcHVibGljIGNsYXNzIE9wZW5Jbk5ld0VkaXRvciBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuT3BlbkluTmV3RWRpdG9yIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIE9wZW5Jbk5ld0VkaXRvcihJV29ya2JlbmNoUGFydCBwYXJ0KQotICB7Ci0gICAgc3VwZXIocGFydCk7Ci0gICAgc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX09QRU5fSU5fTkVXX0VESVRPUik7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXRJZChJRCk7Ci0gICAgc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJ3c2RsX2ZpbGVfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBjYWxjdWxhdGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIE9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotICAgICAgLy8gc2hvdWxkIG1ha2UgdGhpcyBnZW5lcmljIGFuZCBiZSBhYmxlIHRvIGdldCB0aGUgb3duZXIgZnJvbSBhIGZhY2FkZSBvYmplY3QKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKQotICAgICAgewotICAgICAgICBXU0RMQmFzZUFkYXB0ZXIgYmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKW87Ci0KLSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGVkaXRvclBhcnQuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBFT2JqZWN0IGVPYmplY3QgPSAoRU9iamVjdCliYXNlQWRhcHRlci5nZXRUYXJnZXQoKTsKLSAgICAgICAgICBPcGVuT25TZWxlY3Rpb25IZWxwZXIgb3BlbkhlbHBlciA9IG5ldyBPcGVuT25TZWxlY3Rpb25IZWxwZXIoKERlZmluaXRpb24pb2JqZWN0KTsKLSAgICAgICAgICBvcGVuSGVscGVyLm9wZW5FZGl0b3IoZU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuV1NETEVkaXRvclV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuV1NETEVkaXRvclV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjNjEyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvT3BlbldTRExFZGl0b3JVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0uRUZTOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbS5JRmlsZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0OwotCi0vKioKLSAqIAotICogQ29udmVuaWVuY2UgQ2xhc3MgdG8gb3BlbiBhIFdTREwgcmVzb3VyY2UKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBPcGVuV1NETEVkaXRvclV0aWwKLXsKLSAgcHVibGljIE9wZW5XU0RMRWRpdG9yVXRpbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBPcGVucyB0aGUgV1NETCBFZGl0b3Igb24gYSBXU0RMIHJlc291cmNlIGZyb20gYW4gSFRUUCByZWZlcmVuY2UKLSAgICogCi0gICAqIEBwYXJhbSBodHRwVVJJIDogVVJJIGluIHRoZSBmb3JtIG9mICJodHRwOi8vd3d3Li4uIgotICAgKiBAcmV0dXJuIElFZGl0b3JQYXJ0IG9mIHRoZSBvcGVuZWQgV1NETCBlZGl0b3IKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSUVkaXRvclBhcnQgb3Blbkh0dHBGaWxlSW5FZGl0b3IoVVJJIGh0dHBVUkkpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBvcGVuSHR0cEZpbGVJbkVkaXRvcihodHRwVVJJLnRvU3RyaW5nKCkpOyAKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgSUVkaXRvclBhcnQgb3Blbkh0dHBGaWxlSW5FZGl0b3IoU3RyaW5nIHVybFN0cmluZykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotICAgICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IG51bGw7Ci0gICAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgICBpZiAod29ya2JlbmNoICE9IG51bGwpIHsKLSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICAgIGlmICh3aW5kb3cgIT0gbnVsbCkgewotICAgICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgIEFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0IHJlYWRPbmx5RmlsZSA9IG5ldyBBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCh1cmxTdHJpbmcpOwotICAgICAgICAgICAgcmVhZE9ubHlGaWxlLnNldEVkaXRvcklEKFdTRExFZGl0b3JQbHVnaW4uV1NETF9FRElUT1JfSUQpOwotICAgICAgICAgICAgZWRpdG9yUGFydCA9IHBhZ2Uub3BlbkVkaXRvcihyZWFkT25seUZpbGUsIFdTRExFZGl0b3JQbHVnaW4uV1NETF9FRElUT1JfSUQpOyAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBlZGl0b3JQYXJ0OwotICAgIH0KLSAgICBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gcGllKQotICAgIHsKLSAgICAgIHRocm93IHBpZTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBPcGVucyB0aGUgV1NETCBFZGl0b3Igb24gYSBXU0RMIHJlc291cmNlIHRoYXQgaXMgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZVVSSTogVGhlIFVSSSBmaWxlIGluIHRoZSBmb3JtIG9mIGZpbGU6Ly8gCi0gICAqIEByZXR1cm4gSUVkaXRvclBhcnQgb2YgdGhlIG9wZW5lZCBXU0RMIGVkaXRvcgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJRWRpdG9yUGFydCBvcGVuRmlsZUluRWRpdG9yKFVSSSBmaWxlVVJJKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLSAgewotICAgIHRyeSB7Ci0gICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gbnVsbDsKLSAgICAgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICAgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkgewotICAgICAgICBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICAgICAgaWYgKHdpbmRvdyAhPSBudWxsKSB7Ci0gICAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKGZpbGVVUkkuZ2V0UGF0aCgpKTsKLSAgICAgICAgICAgIElGaWxlU3RvcmUgZmlsZVN0b3JlID0gRUZTLmdldExvY2FsRmlsZVN5c3RlbSgpLmdldFN0b3JlKHBhdGgpOwotICAgICAgICAgICAgaWYgKCFmaWxlU3RvcmUuZmV0Y2hJbmZvKCkuaXNEaXJlY3RvcnkoKSAmJiBmaWxlU3RvcmUuZmV0Y2hJbmZvKCkuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgSURFLm9wZW5FZGl0b3JPbkZpbGVTdG9yZShwYWdlLCBmaWxlU3RvcmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGVkaXRvclBhcnQ7Ci0gICAgfQotICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBwaWUpCi0gICAgewotICAgICAgdGhyb3cgcGllOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvUmVuYW1lQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvUmVuYW1lQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZmQ0ZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1JlbmFtZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOyAKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5CaW5kaW5nUmVuYW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLk1lc3NhZ2VSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuUG9ydFR5cGVSZW5hbWVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLQotcHVibGljIGNsYXNzIFJlbmFtZUFjdGlvbiAvL2V4dGVuZHMgQmFzZU5vZGVBY3Rpb24gaW1wbGVtZW50cyBSdW5uYWJsZQotewotICBwcm90ZWN0ZWQgT2JqZWN0IG1vZGVsT2JqZWN0OyAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZTsKLSAgcHJvdGVjdGVkIE5vZGUgbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAKLQotICBwdWJsaWMgUmVuYW1lQWN0aW9uKE9iamVjdCBtb2RlbE9iamVjdCwgU3RyaW5nIG5ld05hbWUpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHRoaXMubW9kZWxPYmplY3QgPSBtb2RlbE9iamVjdDsKLSAgICB0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotICAgIHRoaXMubm9kZSA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0Tm9kZUZvck9iamVjdChtb2RlbE9iamVjdCk7Ci0gIH0gICAgICAKLQotICAvKgotICBwdWJsaWMgTm9kZSBnZXROb2RlKCkKLSAgewotICAgIHJldHVybiBub2RlOwotICB9Ci0gICovCi0KLSAgLyoKLSAgcHVibGljIFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0FDVElPTl9SRU5BTUUiKTsgIC8vJE5PTi1OTFMtMSQKLSAgfQotICAqLwotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBPcGVyYXRpb24pIAotICAgIHsKLSAgICAgIHJlbmFtZU9wZXJhdGlvbkhlbHBlcigoT3BlcmF0aW9uKW1vZGVsT2JqZWN0KTsKLSAgICB9ICAKLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIElucHV0IHx8Ci0gICAgICAgICAgICAgbW9kZWxPYmplY3QgaW5zdGFuY2VvZiBPdXRwdXQgfHwKLSAgICAgICAgICAgICBtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEZhdWx0KQotICAgIHsKLSAgICAgIHJlbmFtZUlPRkhlbHBlcigoV1NETEVsZW1lbnQpbW9kZWxPYmplY3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIobW9kZWxPYmplY3QsIG5ld05hbWUpOwotICAgIH0KLSAgfSAKLQotICBwcm90ZWN0ZWQgdm9pZCByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihPYmplY3QgbW9kZWxPYmplY3QsIFN0cmluZyB0aGVOZXdOYW1lKQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG1vZGVsT2JqZWN0KTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsgCi0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIHRoZU5ld05hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgfSAgICAKLQotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpCi0gICAgewotICAgICAgTWVzc2FnZVJlbmFtZXIgcmVuYW1lciA9IG5ldyBNZXNzYWdlUmVuYW1lcigoTWVzc2FnZSltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0gICAgICByZW5hbWVyLnZpc2l0QmluZGluZ3MoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICBQb3J0VHlwZVJlbmFtZXIgcmVuYW1lciA9IG5ldyBQb3J0VHlwZVJlbmFtZXIoKFBvcnRUeXBlKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLSAgICAgIHJlbmFtZXIudmlzaXRCaW5kaW5ncygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0gICAgewotICAgICAgQmluZGluZ1JlbmFtZXIgcmVuYW1lciA9IG5ldyBCaW5kaW5nUmVuYW1lcigoQmluZGluZyltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0gICAgICByZW5hbWVyLnZpc2l0U2VydmljZXMoKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW5hbWVPcGVyYXRpb25IZWxwZXIoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKG9wZXJhdGlvbiwgbmV3TmFtZSk7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbmFtZUlPRkhlbHBlcihXU0RMRWxlbWVudCBvYmplY3QpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb2JqZWN0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsgCi0gICAgQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoZGVmaW5pdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIExpc3QgbGlzdCA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgewotICAgICAgbGlzdCA9IHV0aWwuZ2V0QmluZGluZ0lucHV0cygoSW5wdXQpb2JqZWN0KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgT3V0cHV0KQotICAgIHsKLSAgICAgIGxpc3QgPSB1dGlsLmdldEJpbmRpbmdPdXRwdXRzKChPdXRwdXQpb2JqZWN0KTsKLSAgICB9Ci0gICAgZWxzZSAvLyBmYXVsdAotICAgIHsKLSAgICAgIGxpc3QgPSB1dGlsLmdldEJpbmRpbmdGYXVsdHMoKEZhdWx0KW9iamVjdCk7Ci0gICAgfQotICAgICAgCi0gICAgaWYgKGxpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBiaW5kaW5nT2JqZWN0ID0gaS5uZXh0KCk7Ci0gICAgICAgIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKGJpbmRpbmdPYmplY3QsIG5ld05hbWUpOwotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICB9Ci0KLSAgICByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihvYmplY3QsIG5ld05hbWUpOwotICB9ICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvU21hcnRSZW5hbWVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9TbWFydFJlbmFtZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDc2ZTVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9TbWFydFJlbmFtZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qCi0gKiBUaGlzIGNsYXNzIHJlbmFtZXMgJ3JlbGF0ZWQnIFdTRExFbGVtZW50cy4gIFRoZSBzY2VuYXJpbyBpcyBhcyBmb2xsb3dzOgotICogVGhlIHVzZXIgcmVuYW1lcyBhIFdTRExFbGVtZW50IGluIHRoZSBlZGl0b3IsIHNheSBhIE1lc3NhZ2UuICBUaGlzIGNsYXNzCi0gKiB3aWxsIGZpbmQgdGhlICdyZWxhdGVkJyBlbGVtZW50cyB0byB0aGlzIE1lc3NhZ2UgYW5kIHJlbmFtZSB0aGVtIGFzIHdlbGwuCi0gKiBJdCB3aWxsIG9ubHkgcmVuYW1lIGEgJ3JlbGF0ZWQnIGVsZW1lbnQgaWYgdGhlIGVsZW1lbnQgbmFtZSAob3IgcGFydCBvZiBpdCkKLSAqIGlzIGdlbmVyYXRlZC4KLSAqIAotICogU2VlIE5hbWVVdGlsLmphdmEKLSAqLwotcHVibGljIGNsYXNzIFNtYXJ0UmVuYW1lQWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24gaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHJvdGVjdGVkIE9iamVjdCBlbGVtZW50OwotCXByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZTsKLQlwcml2YXRlIExpc3QgbWVzc2FnZVJlZmVyZW5jZXM7IC8vIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IG1ldGhvZCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpCi0JcHJvdGVjdGVkIE5vZGUgbm9kZTsKLQlwcml2YXRlIGJvb2xlYW4gcmVuYW1lUGFyZW50ID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyBvbGROYW1lOwotCQotCXB1YmxpYyBTbWFydFJlbmFtZUFjdGlvbihPYmplY3QgZWxlbWVudCwgU3RyaW5nIG5ld05hbWUpIHsKLQkJc2V0VGV4dCgiU21hcnQgUmVuYW1lIEFjdGlvbiIpOyAvLyBEbyBub3QgdHJhbnNsYXRlIC8vJE5PTi1OTFMtMSQKLQkJdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQkgICAgdGhpcy5ub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KGVsZW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgTm9kZSBnZXROb2RlKCkgewotCSAgIHJldHVybiBub2RlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCSAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVOQU1FOyAgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKgotCSAqIGJvb2xlYW4gYXJndW1lbnQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHRvcCBsZXZlbCAocGFyZW50KSBvYmplY3Qgc2hvdWxkIGJlIHJlbmFtZWQKLQkgKiBpdHNlbGYuICBPdGhlcndpc2UsIG9ubHkgdGhlICJjaGlsZCIgb2JqZWN0cyB3aWxsIGJlIHJlbmFtZWQuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKGJvb2xlYW4gcmVuYW1lUGFyZW50KSB7Ci0JCXRoaXMucmVuYW1lUGFyZW50ID0gcmVuYW1lUGFyZW50OwotCQlydW4oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJYmVnaW5SZWNvcmRpbmcoKTsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0KLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIE9wZXJhdGlvbgotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKG9wZXJhdGlvbiwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIElucHV0Ci0JCQlJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJCS8qCi0JCQlpZiAoaW5wdXQgIT0gbnVsbCAmJiBpc0lucHV0T3V0cHV0TmFtZUdlbmVyYXRlZChvbGROYW1lLCBpbnB1dC5nZXROYW1lKCkpKSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oaW5wdXQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCQkqLwotCQkJCi0JCQkvLyBSZW5hbWUgT3V0cHV0Ci0JCQlPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLQkJCS8qCi0JCQlpZiAob3V0cHV0ICE9IG51bGwgJiYgaXNJbnB1dE91dHB1dE5hbWVHZW5lcmF0ZWQob2xkTmFtZSwgb3V0cHV0LmdldE5hbWUoKSkpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihvdXRwdXQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCQkqLwotCQkJCi0JCQkKLQkJCS8vIAotCQkJV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0Q29udGFpbmVyKCk7Ci0JCQlpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkgewotCQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSB3c2RsRWxlbWVudDsKLQkJCQlNYXAgYmluZGluZ3MgPSBwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0QmluZGluZ3MoKTsKLQkJCQlDb2xsZWN0aW9uIHZhbHVlcyA9IGJpbmRpbmdzLnZhbHVlcygpOwotCQkJCUl0ZXJhdG9yIGl0ZXJhdG9yID0gdmFsdWVzLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCQlCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaXRlcmF0b3IubmV4dCgpOwotCQkJCQkKLQkJCQkJLy8gRmluZCBvbmx5IEJpbmRpbmdzIHdoaWNoIHJlZmVyZW5jZSB0aGUgbW9kaWZpZWQgUG9ydFR5cGUtLT5PcGVyYXRpb24KLQkJCQkJaWYgKHBvcnRUeXBlLmVxdWFscyhiaW5kaW5nLmdldFBvcnRUeXBlKCkpKSB7Ci0JCQkJCQlTdHJpbmcgb3BlcmF0aW9uSW5wdXROYW1lID0gbnVsbDsKLQkJCQkJCVN0cmluZyBvcGVyYXRpb25PdXRwdXROYW1lID0gbnVsbDsKLQkJCQkJCWlmKG9wZXJhdGlvbi5nZXRJbnB1dCgpICE9IG51bGwpIHsKLQkJCQkJCQlvcGVyYXRpb25JbnB1dE5hbWUgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKS5nZXROYW1lKCk7Ci0JCQkJCQl9Ci0JCQkJCQlpZihvcGVyYXRpb24uZ2V0T3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCQkJCW9wZXJhdGlvbk91dHB1dE5hbWUgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TmFtZSgpOwotCQkJCQkJfQotCQkJCQkJCi0JCQkJCQlCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uLmdldE5hbWUoKSwgb3BlcmF0aW9uSW5wdXROYW1lICwgb3BlcmF0aW9uT3V0cHV0TmFtZSk7Ci0JCQkJCQkvLyBUaGVyZSBtYXkgYmUgbm8gYmluZGluZyBjb250ZW50IGluIHdoaWNoIGNhc2UgYmluZGluZ09wZXJhdGlvbiB3b3VsZCBiZSBudWxsCi0JCQkJCQlpZiAoYmluZGluZ09wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJCQkJTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCQkJCQkJCUl0ZXJhdG9yIGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0JCQkJCQkJd2hpbGUgKGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCQkJCQlPYmplY3Qgb2JqZWN0ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IubmV4dCgpOwotCQkJCQkJCQlpZihvYmplY3QgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKSB7Ci0JCQkJCQkJCQlTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgb2JqZWN0OwotCQkJCQkJCQkJU3RyaW5nIHNvYXBBY3Rpb25VUkkgPSBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKTsKLQotCQkJCQkJCQkJLy8gQ2hlY2sgaWYgdGhlIG9sZCBzb2FwQWN0aW9uVVJJIGlzIGEgZ2VuZXJhdGVkIFN0cmluZy4gIElmIGl0J3Mgbm90Ci0JCQkJCQkJCQkvLyBnZW5lcmF0ZWQsIGxlYXZlIGl0LiAgSXQgbWVhbnMgYSB1c2VyIGhhcyBlZGl0ZWQgYW5kIHdlIHNob3VsZG4ndCB0b3VjaCBpdC4KLQkJCQkJCQkJCVN0cmluZyB0bnMgPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJCQkJCQkJaWYgKGNvbXB1dGVTT0FQQWN0aW9uVVJJKHRucywgb2xkTmFtZSkuZXF1YWxzKHNvYXBBY3Rpb25VUkkpKSB7Ci0JCQkJCQkJCQkJLy8gQ2hvcCBvZmYgdGhlIE9wZXJhdGlvbiBuYW1lIGF0IHRoZSBlbmQgYW5kIGFwcGVuZCB0aGUgbmV3IG5hbWUuCi0JCQkJCQkJCQkJU3RyaW5nIG5ld1NPQVBBY3Rpb25VUkkgPSBzb2FwQWN0aW9uVVJJLnN1YnN0cmluZygwLCBzb2FwQWN0aW9uVVJJLmxlbmd0aCgpIC0gb2xkTmFtZS5sZW5ndGgoKSk7Ci0JCQkJCQkJCQkJbmV3U09BUEFjdGlvblVSSSA9IG5ld1NPQVBBY3Rpb25VUkkgKyBuZXdOYW1lOwotCQkJCQkJCQkJCXNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShuZXdTT0FQQWN0aW9uVVJJKTsKLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJCi0JCQkvLyBSZW5hbWUgTWVzc2FnZXMgYW5kIFBhcnRzCi0JCQlNZXNzYWdlIG1zZzsKLQotCQkJLy8gSW5wdXQKLQkJCWlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0JCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkKLQkJCQkJaWYgKGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob2xkTWVzc2FnZU5hbWUsIG9sZE5hbWUsICJSZXF1ZXN0IikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsJCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIE91dHB1dAotCQkJaWYgKG91dHB1dCAhPSBudWxsICYmIG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlc3BvbnNlIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJfQotCQkJCQkKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIEZhdWx0cwotCQkJTGlzdCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpOwotCQkJaWYgKGZhdWx0cyAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgaXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpdC5uZXh0KCk7Ci0JCQkJCW1zZyA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0JCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQkJCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkJCi0JCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgTmFtZVV0aWwuYnVpbGRGaXJzdENoYXJVcHBlcmNhc2VOYW1lKGZhdWx0LmdldE5hbWUoKSkpKSB7Ci0JCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQkKLQkJCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSW5wdXQpIHsKLQkJCUlucHV0IGlucHV0ID0gKElucHV0KSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLQkJCWlmIChvbGROYW1lID09IG51bGwpIHsKLQkJCQlvbGROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJaW5wdXQuc2V0TmFtZShuZXdOYW1lKTsKLQkJCX0KLQotLy8JCQkgUmVuYW1lIE1lc3NhZ2VzIGFuZCBQYXJ0cwotCQkJTWVzc2FnZSBtc2c7Ci0JCQkKLQkJCS8vIElucHV0Ci0JCQlpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQltc2cgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlcXVlc3QiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkJCi0JCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwkKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgT3V0cHV0KSB7Ci0JCQlPdXRwdXQgb3V0cHV0ID0gKE91dHB1dCkgZWxlbWVudDsKLQkJCW9sZE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotCQkJaWYgKG9sZE5hbWUgPT0gbnVsbCkgewotCQkJCW9sZE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJCi0JCQlpZiAob2xkTmFtZS5lcXVhbHMobmV3TmFtZSkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlvdXRwdXQuc2V0TmFtZShuZXdOYW1lKTsKLQkJCX0KLQotLy8JCQkgUmVuYW1lIE1lc3NhZ2VzIGFuZCBQYXJ0cwotCQkJTWVzc2FnZSBtc2c7Ci0JCQkKLQkJCS8vIE91dHB1dAotCQkJaWYgKG91dHB1dCAhPSBudWxsICYmIG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCWlmIChpc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9sZE1lc3NhZ2VOYW1lLCBvbGROYW1lLCAiUmVzcG9uc2UiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkJCi0JCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBGYXVsdCkgewotCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGVsZW1lbnQ7Ci0JCQlNZXNzYWdlIG1zZyA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0JCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJb2xkTmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQkvLyBSZW5hbWUgdGhlIEZhdWx0Ci0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oZmF1bHQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0KLQkJCS8vIFJlbmFtZSB0aGUgTWVzc2FnZSBhbmQgUGFydHMKLQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCi0JCQkJT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgZmF1bHQuZUNvbnRhaW5lcigpOwotCQkJCWlmIChpc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9sZE1lc3NhZ2VOYW1lLCBvcC5nZXROYW1lKCksIG9sZE5hbWUpKSB7Ci0JCQkJCXJlbmFtZU1lc3NhZ2VIZWxwZXIobXNnLCBjb21wdXRlTmV3TWVzc2FnZU5hbWUobXNnLCBvbGROYW1lLCBuZXdOYW1lKSk7Ci0JCQkJCQotCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQlyZW5hbWVGYXVsdFBhcnRzKG1zZy5nZXRFUGFydHMoKSwgb3AuZ2V0TmFtZSgpLCBvbGROYW1lLCBuZXdOYW1lKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE1lc3NhZ2UpIHsKLQkJCU1lc3NhZ2UgbXNnID0gKE1lc3NhZ2UpIGVsZW1lbnQ7Ci0JCQlvbGROYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQlTdHJpbmcgbmV3TWVzc2FnZU5hbWUgPSBjb21wdXRlTmV3TWVzc2FnZU5hbWUobXNnLCBvbGROYW1lLCBuZXdOYW1lKTsKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgbmV3TWVzc2FnZU5hbWUpOwotCQkJfQotCQkJCQkKLQkJCWlmIChtc2cuZ2V0RVBhcnRzKCkgIT0gbnVsbCkKLQkJCQlyZW5hbWVQYXJ0c0hlbHBlcihtc2cuZ2V0RVBhcnRzKCksIG9sZE1lc3NhZ2VOYW1lLCBuZXdNZXNzYWdlTmFtZSwgdHJ1ZSk7Ci0vLwkJCQlyZW5hbWVQYXJ0c0hlbHBlcihtc2cuZ2V0RVBhcnRzKCksIG9sZE1lc3NhZ2VOYW1lLCBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgdHJ1ZSk7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSBlbGVtZW50OwotCQkJU3RyaW5nIG9sZFBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCQkKLQkJCWlmIChvbGRQYXJ0TmFtZS5lcXVhbHMobmV3TmFtZSkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihlbGVtZW50LCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCQkJCi0vLwkJCVJlbmFtZSBFbGVtZW50cwotCQkJcmVuYW1lWFNERWxlbWVudChwYXJ0LCBvbGRQYXJ0TmFtZSwgbmV3TmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnQpIHsKLQkJCVBvcnQgcG9ydCA9IChQb3J0KSBlbGVtZW50OwotCQkJU3RyaW5nIG9sZFBvcnROYW1lID0gcG9ydC5nZXROYW1lKCk7Ci0JCQkKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihlbGVtZW50LCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCi0vLwkJCVJlbmFtZSBCaW5kaW5nCi0JCQlCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0JCQlpZiAoYmluZGluZyAhPSBudWxsICYmIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMob2xkUG9ydE5hbWUpKSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oYmluZGluZywgbmV3TmFtZSk7CQotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCX0KLQkJZW5kUmVjb3JkaW5nKCk7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVTT0FQQWN0aW9uVVJJKFN0cmluZyB0bnMsIFN0cmluZyBvcGVyYXRpb25OYW1lKSB7Ci0JCS8vIFdlIG5lZWQgbW9yZSBpbnZlc3RpZ2F0aW9uIGhlcmUuICBXZSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgU09BUEFjdGlvblVSSQotCQkvLyBpcyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiAgT25lIGlzc3VlIEkgc2VlIGhlcmUgaXMgdGhlIHRyYWlsaW5nIHNsYXNoIG9mIHRoZQotCQkvLyB0YXJnZXRuYW1lc3BhY2UuICBNb3JlIHNwZWNpZmljYWxseSwgdGhlIGxhY2sgb2Ygb25lLiAgSWYgdGhlcmUgaXMgbm8gdHJhaWxpbmcgc2xhc2gsCi0JCS8vIGRvZXMgaXQgYWRkIG9uZT8KLQkJcmV0dXJuIHRucyArIG9wZXJhdGlvbk5hbWU7Ci0JfQotCS8vIGJvb2xlYW4gaXNJbnB1dE91dHB1dCBzaG91bGQgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHBhcnQgaXMgYW4gSW5wdXQgb3IgT3V0cHV0LgotCS8vIFNldCBmYWxzZSBpZiB0aGUgcGFydCBpcyBhIEZhdWx0LgotCXByaXZhdGUgdm9pZCByZW5hbWVQYXJ0c0hlbHBlcihMaXN0IHBhcnRzTGlzdCwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZywgYm9vbGVhbiBpc0lucHV0T3V0cHV0KSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJaWYgKHBhcnRzTGlzdCAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwSXQgPSBwYXJ0c0xpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwSXQuaGFzTmV4dCgpKSB7Ci0JCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBJdC5uZXh0KCk7Ci0JCQkJU3RyaW5nIG9sZFBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCQkJCi0JCQkJaWYgKGlzUGFydE5hbWVHZW5lcmF0ZWQob2xkUGFydE5hbWUsIG9sZFN1YlN0cmluZykpIHsKLQkJCQkJU3RyaW5nIG5ld1BhcnROYW1lOwotCQkJCQlpZiAoaXNJbnB1dE91dHB1dCkgewotCQkJCQkJbmV3UGFydE5hbWUgPSBjb21wdXRlTmV3UGFydE5hbWUocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJbmV3UGFydE5hbWUgPSBjb21wdXRlTmV3RmF1bHRQYXJ0TmFtZShwYXJ0LCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZyk7Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKHBhcnQsIG5ld1BhcnROYW1lKTsKLQkJCQkJcmVuYW1lci5ydW4oKTsKLQkJCQkJCi0JCQkJCS8vIFJlbmFtZSBFbGVtZW50cwotLy8JCQkJCXJlbmFtZVhTREVsZW1lbnQocGFydCwgb2xkUGFydE5hbWUsIG5ld1BhcnROYW1lKTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy8gUmVuYW1lIEVsZW1lbnRzCi0JCQkJcmVuYW1lWFNERWxlbWVudChwYXJ0LCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIFBhcnQgbmFtZSB3aGVuIHRoZSBGYXVsdCBuYW1lIGlzIGNoYW5nZWQuICBPbmx5Ci0JLy8gY2hhbmdlIHRoZSBQYXJ0IG5hbWUgaWYgdGhlIHBhcnQgbmFtZSBpcyBhIGdlbmVyYXRlZCBuYW1lLgotCS8vIENvbXBhcmUgdG8gcmVuYW1lUGFydHNIZWxwZXIoKS4gIFRoZSByZW5hbWVQYXJ0c0hlbHBlcigpIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIEZhdWx0Ci0JLy8gaGFzIE5PVCBiZWVuIHJlbmFtZWQsIHJhdGhlciwgaXQgaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgb3RoZXIgbmFtaW5nIChleC4gT3BlcmF0aW9uCi0JLy8gcmVuYW1pbmcpLiAgSXQgd2lsbCB1cGRhdCBJbnB1dC9PdXRwdXQsIEFORCBGYXVsdCBQYXJ0cy4KLQlwcml2YXRlIHZvaWQgcmVuYW1lRmF1bHRQYXJ0cyhMaXN0IHBhcnRzTGlzdCwgU3RyaW5nIGJhc2VOYW1lLCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJaWYgKHBhcnRzTGlzdCAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwSXQgPSBwYXJ0c0xpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwSXQuaGFzTmV4dCgpKSB7Ci0JCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBJdC5uZXh0KCk7Ci0JCQkJU3RyaW5nIG9sZFBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCQkJCi0JCQkJaWYgKGlzUGFydE5hbWVHZW5lcmF0ZWQob2xkUGFydE5hbWUsIGJhc2VOYW1lLCBvbGRTdWJTdHJpbmcpKSB7Ci0JCQkJCVN0cmluZyBuZXdQYXJ0TmFtZTsKLQkJCQkJbmV3UGFydE5hbWUgPSBjb21wdXRlTmV3RmF1bHRQYXJ0TmFtZShwYXJ0LCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZyk7Ci0JCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKHBhcnQsIG5ld1BhcnROYW1lKTsKLQkJCQkJcmVuYW1lci5ydW4oKTsKLQkJCQkJCi0JCQkJCS8vIFJlbmFtZSBFbGVtZW50cwotCQkJCQlyZW5hbWVYU0RFbGVtZW50KHBhcnQsIG9sZFBhcnROYW1lLCBuZXdQYXJ0TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcpIHsKLQkJU3RyaW5nIHN0cmluZyA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAwKTsJCQotCX0KLQkKLS8vCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVOZXdGYXVsdE1lc3NhZ2VOYW1lKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotLy8JCVN0cmluZyBzdHJpbmcgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0vLwkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAxKTsJCQotLy8JfQotCQotCS8vIE1ldGhvZCBmb3IgSW5wdXQsIE91dHB1dCwgYW5kIEZhdWx0IFBhcnRzCi0JLy8gU2VlIGNvbXB1dGVOZXdGYXVsdFBhcnROYW1lKCkgZm9yIGNvbXBhcmlzb24KLQlwcml2YXRlIFN0cmluZyBjb21wdXRlTmV3UGFydE5hbWUoUGFydCBwYXJ0LCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVN0cmluZyBzdHJpbmcgPSBwYXJ0LmdldE5hbWUoKTsKLQkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAwKTsJCQotCX0KLQkKLQkvLyBNZXRob2QgZm9yIEZhdWx0IFBhcnRzCi0JLy8gVGhpcyBtZXRob2QgYmVoYXZlcyBpbiB0aGUgZXhhY3Qgc2FtZSB3YXkgYXMgY29tcHV0ZU5ld1BhcnROYW1lKCkgZXhjZXB0IGl0IHN0YXJ0cyBzZWFyY2hpbmcgZm9yIGEgbWF0Y2gKLQkvLyBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyLiAgVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIHVzZXJzIHdobyB3aXNoIHRvIHJlbmFtZSBhIGdlbmVyYXRlZCAoRmF1bHQpIHBhcnQKLQkvLyB3aGVyZSB0aGUgRmF1bHQgbmFtZSBoYXMgY2hhbmdlZC4gIFdlIHN0YXJ0IG91ciBzZWFyY2ggYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgbmFtZQotCS8vIG9mIHRoZSBwYXJ0IGlzIGJ1aWx0IGJ5IGFwcGVuZGluZyB0aGUgRmF1bHQgbmFtZSBhZnRlciB0aGUgT3BlcmF0aW9uIG5hbWUuCi0JcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZU5ld0ZhdWx0UGFydE5hbWUoUGFydCBwYXJ0LCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVN0cmluZyBzdHJpbmcgPSBwYXJ0LmdldE5hbWUoKTsKLQkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAxKTsJCQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoU3RyaW5nIGZ1bGxTdHJpbmcsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcsIGludCBzdGFydFNlYXJjaEluZGV4KSB7Ci0JCVN0cmluZ0J1ZmZlciBmdWxsU0IgPSBuZXcgU3RyaW5nQnVmZmVyKGZ1bGxTdHJpbmcpOwotCQlpbnQgaW5kZXggPSBmdWxsU0IuaW5kZXhPZihvbGRTdWJTdHJpbmcsIHN0YXJ0U2VhcmNoSW5kZXgpOwotCQlpZiAoaW5kZXggPj0gMCkgewotCQkJcmV0dXJuIGZ1bGxTQi5yZXBsYWNlKGluZGV4LCBpbmRleCArIG9sZFN1YlN0cmluZy5sZW5ndGgoKSwgbmV3U3ViU3RyaW5nKS50b1N0cmluZygpOwotCQl9Ci0JCQotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjb21tb25OYW1lR2VuZXJhdG9yQ2hlY2soU3RyaW5nIHRhcmdldE5hbWUsIFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIGFwcGVuZE5hbWUpIHsKLQkJLy8gRmlyc3QgY3JpdGVyaWEgaXMgdGFyZ2V0TmFtZSBtdXN0IHN0YXJ0IHdpdGggdGhlIGJhc2VOYW1lCi0JCWlmICghdGFyZ2V0TmFtZS5zdGFydHNXaXRoKGJhc2VOYW1lKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJCQotCQlpZiAoYXBwZW5kTmFtZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7Ci0JCQkvLyBTZWNvbmQgY3JpdGVyaWEuICBUaGUgYXBwZW5kZWQgbmFtZSBtdXN0IGJlIGluIHRoZSB0YXJnZXROYW1lIGFuZCBiZWdpbiByaWdodAotCQkJLy8gYWZ0ZXIgdGhlIGJhc2VOYW1lIGxvY2F0aW9uCi0JCQlpZiAoIXRhcmdldE5hbWUuc3RhcnRzV2l0aChhcHBlbmROYW1lLCBiYXNlTmFtZS5sZW5ndGgoKSkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQkKLQkJLy8gVGhpcmQgY3JpdGVyaWEgKGlmIG5lY2Vzc2FyeSkuICBJZiBiYXNlTmFtZSArIGFwcGVuZE5hbWUgaXMgc2hvcnRlciB0aGFuIHRhcmdldE5hbWUsCi0JCS8vIHRoZW4gdGhlcmUgbXVzdCBiZSAnZXh0cmEnIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiB0YXJnZXROYW1lLiAgVGhlc2UgY2hhcmFjdGVycyBtdXN0Ci0JCS8vIG1ha2UgdXAgYW4gaW50ZWdlci4gIElmIG5vdCwgaXQgaXMgbm90IGEgZ2VuZXJhdGVkIHN0cmluZy4KLQkJaW50IHN1Ykxlbmd0aCA9IGJhc2VOYW1lLmxlbmd0aCgpICsgYXBwZW5kTmFtZS5sZW5ndGgoKTsKLQkJaWYgKHRhcmdldE5hbWUubGVuZ3RoKCkgPiBzdWJMZW5ndGgpIHsKLQkJCS8vIFdlIGhhdmUgJ2V4dHJhJyBjaGFyYWN0ZXJzCi0JCQlTdHJpbmcgZXh0cmFzID0gdGFyZ2V0TmFtZS5zdWJzdHJpbmcoc3ViTGVuZ3RoKTsKLQkJCQotCQkJaWYoIWlzRGlnaXQoZXh0cmFzKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNPcGVyYXRpb25OYW1lR2VuZXJhdGVkKFN0cmluZyBvcE5hbWUsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBvcE5hbWUuZXF1YWxzKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChTdHJpbmcgbXNnTmFtZSwgU3RyaW5nIGJhc2VOYW1lLCBTdHJpbmcgYXBwZW5kTmFtZSkgewotCQlyZXR1cm4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKG1zZ05hbWUsIGJhc2VOYW1lLCBhcHBlbmROYW1lKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW5wdXRPdXRwdXROYW1lR2VuZXJhdGVkKFN0cmluZyBpbk91dE5hbWUsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBpbk91dE5hbWUuZXF1YWxzKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNGYXVsdE5hbWVHZW5lcmF0ZWQoU3RyaW5nIGZhdWx0TmFtZSwgU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIGZhdWx0TmFtZS5lcXVhbHMobmFtZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1BhcnROYW1lR2VuZXJhdGVkKFN0cmluZyBwYXJ0TmFtZSwgU3RyaW5nIGJhc2VOYW1lKSB7Ci0JCXJldHVybiBjb21tb25OYW1lR2VuZXJhdG9yQ2hlY2socGFydE5hbWUsIGJhc2VOYW1lLCAiIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzUGFydE5hbWVHZW5lcmF0ZWQoU3RyaW5nIHBhcnROYW1lLCBTdHJpbmcgYmFzZU5hbWUsIFN0cmluZyBhcHBlbmROYW1lKSB7Ci0JCXJldHVybiBjb21tb25OYW1lR2VuZXJhdG9yQ2hlY2socGFydE5hbWUsIGJhc2VOYW1lLCBhcHBlbmROYW1lKTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RpZ2l0KFN0cmluZyBzdHJpbmcpIHsKLQkJYm9vbGVhbiByVmFsdWUgPSB0cnVlOwotCQljaGFyW10gY2hhcnMgPSBzdHJpbmcudG9DaGFyQXJyYXkoKTsKLQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKCFDaGFyYWN0ZXIuaXNEaWdpdChjaGFyc1tpbmRleF0pKSB7Ci0JCQkJclZhbHVlID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByVmFsdWU7Ci0JfQotCQotCS8qCi0JICogVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFpZCBpbiByZW5hbWluZyBhIG1lc3NhZ2UKLQkgKi8KLQlwcml2YXRlIHZvaWQgcmVuYW1lTWVzc2FnZUhlbHBlcihNZXNzYWdlIG1zZywgU3RyaW5nIG5ld05hbWUpIHsKLQkJTGlzdCBtZXNzYWdlUmVmcyA9IGdldFJlZmVyZW5jaW5nTWVzc2FnZVJlZmVyZW5jZXMobXNnLCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpKTsKLQkJCi0JCVJlbmFtZUFjdGlvbiByZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihtc2csIG5ld05hbWUpOwotCQlyZW5hbWVyLnJ1bigpOwotCQkKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBtZXNzYWdlUmVmcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSAoTWVzc2FnZVJlZmVyZW5jZSkgaXRlcmF0b3IubmV4dCgpOwotCQkJbWVzc2FnZVJlZmVyZW5jZS5zZXRFTWVzc2FnZShtc2cpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgTGlzdCBnZXRSZWZlcmVuY2luZ01lc3NhZ2VSZWZlcmVuY2VzKE1lc3NhZ2UgbXNnLCBMaXN0IG1lc3NhZ2VSZWZzKSB7Ci0JCVZlY3RvciByZWZlcmVuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlRTmFtZSBtZXNzYWdlUU5hbWUgPSBtc2cuZ2V0UU5hbWUoKTsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBtZXNzYWdlUmVmcy5pdGVyYXRvcigpOwotCQkKLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkgIT0gbnVsbCAmJiBtZXNzYWdlUU5hbWUuZXF1YWxzKG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKS5nZXRRTmFtZSgpKSkgewotCQkJCXJlZmVyZW5jZXNWZWN0b3IuYWRkRWxlbWVudChtZXNzYWdlUmVmZXJlbmNlKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJlZmVyZW5jZXNWZWN0b3I7Ci0JfQotCQotCXByaXZhdGUgTGlzdCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpIHsKLQkJaWYgKG1lc3NhZ2VSZWZlcmVuY2VzID09IG51bGwpIHsKLQkJCW1lc3NhZ2VSZWZlcmVuY2VzID0gbmV3IFZlY3RvcigpOwotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKChXU0RMRWxlbWVudCkgZWxlbWVudCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJTGlzdCBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLQkJCi0JCQlpZiAocG9ydFR5cGVzICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBwb3J0VHlwZUl0ZXJhdG9yID0gcG9ydFR5cGVzLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKHBvcnRUeXBlSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCUxpc3Qgb3BlcmF0aW9uc0xpc3QgPSAoKFBvcnRUeXBlKSBwb3J0VHlwZUl0ZXJhdG9yLm5leHQoKSkuZ2V0RU9wZXJhdGlvbnMoKTsKLQkJCQkJCi0JCQkJCWlmIChvcGVyYXRpb25zTGlzdCAhPSBudWxsKSB7Ci0JCQkJCQlJdGVyYXRvciBvcGVyYXRpb25zSXRlcmF0b3IgPSBvcGVyYXRpb25zTGlzdC5pdGVyYXRvcigpOwotCQkJCQkJd2hpbGUgKG9wZXJhdGlvbnNJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQkJCQltZXNzYWdlUmVmZXJlbmNlcy5hZGRBbGwoZ2V0QWxsTWVzc2FnZVJlZmVyZW5jZXMoKE9wZXJhdGlvbikgb3BlcmF0aW9uc0l0ZXJhdG9yLm5leHQoKSkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbWVzc2FnZVJlZmVyZW5jZXM7Ci0JfQotCQotCXByaXZhdGUgVmVjdG9yIGdldEFsbE1lc3NhZ2VSZWZlcmVuY2VzKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLQkJVmVjdG9yIGlvZnMgPSBuZXcgVmVjdG9yKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlpb2ZzLmFkZEVsZW1lbnQoaXQubmV4dCgpKTsKLQkJfQotCQkKLQkJaWYgKGlvZnMgPT0gbnVsbCkKLQkJCWlvZnMgPSBuZXcgVmVjdG9yKCk7Ci0JCQotCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpCi0JCQlpb2ZzLmFkZEVsZW1lbnQob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLQkJCi0JCWlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpCi0JCQlpb2ZzLmFkZEVsZW1lbnQob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCQotCQlyZXR1cm4gaW9mczsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZVhTREVsZW1lbnQoUGFydCBwYXJ0LCBTdHJpbmcgb2xkWFNETmFtZSwgU3RyaW5nIG5ld1hTRE5hbWUpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCWlmIChlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbCAmJiBlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgob2xkWFNETmFtZSkpIHsKLQkJCXJlbmFtZUVsZW1lbnREZWNsYXJhdGlvbkhlbHBlcihlbGVtZW50RGVjbGFyYXRpb24sIG9sZFhTRE5hbWUsIG5ld1hTRE5hbWUpOwotCQkJCi0JCQkvLyBIZXJlIHdlIHJlbmFtZSB0aGUgZWxlbWVudCByZWZlcmVuY2UuCi0JCQkvLwotCQkJUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUocGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBuZXdYU0ROYW1lKTsKLQkJCXBhcnQuc2V0RWxlbWVudE5hbWUocW5hbWUpOwkJCQotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotCQkJaWYgKEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uLCB0cnVlKSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCQlpZiAoZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKS5lcXVhbHMob2xkTmFtZSkpIHsKLQkJCQkJcmVuYW1lRWxlbWVudERlY2xhcmF0aW9uSGVscGVyKGVsZW1lbnREZWNsYXJhdGlvbiwgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQkJCQotCQkJCQkvLyBIZXJlIHdlIHJlbmFtZSB0aGUgZWxlbWVudCByZWZlcmVuY2UuCi0JCQkJCS8vCi0JCQkJCVFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgbmV3TmFtZSk7Ci0JCQkJCXBhcnQuc2V0RWxlbWVudE5hbWUocW5hbWUpOwkKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZUVsZW1lbnREZWNsYXJhdGlvbkhlbHBlcihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uLCBTdHJpbmcgb2xkWFNETmFtZSwgU3RyaW5nIG5ld1hTRE5hbWUpIHsKLQkJaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsICYmIGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkuc3RhcnRzV2l0aChvbGRYU0ROYW1lKSkgewotCQkJU3RyaW5nIG5ld0VsZW1lbnROYW1lID0gcmVwbGFjZVNlY3Rpb25XaXRoU3ViU3RyaW5nKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCksIG9sZFhTRE5hbWUsIG5ld1hTRE5hbWUsIDApOwotCQkJZWxlbWVudERlY2xhcmF0aW9uLnNldE5hbWUobmV3RWxlbWVudE5hbWUpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWEyZTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkLlcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQuVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb24uQWRhcHRlckZhY3RvcnlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeSBpbnN0YW5jZTsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV1NETEFkYXB0ZXJGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeSgpOwotICAgIH0gIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLQkgIEFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0KLQkgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFEZXNjcmlwdGlvbigpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2VydmljZSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExU2VydmljZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZykgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExQmluZGluZygpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikgewotICAgICAgICAgIGFkYXB0ZXIgPSBuZXcgVzExQmluZGluZ09wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0IHx8Ci0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0IHx8Ci0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICB7ICAKLQkJICBhZGFwdGVyID0gbmV3IFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQb3J0KSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFFbmRQb2ludCgpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLSAgICAgICAgICBhZGFwdGVyID0gbmV3IFcxMUludGVyZmFjZSgpOwotICAgICAgfSAgCi0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMU9wZXJhdGlvbigpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZSkKLQkgIHsKLQkgICAgaW50IGtpbmQgPSAtMTsKLQkgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElucHV0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQ7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgT3V0cHV0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZhdWx0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfRkFVTFQ7Ci0JICAgIH0KLQkgICAgYWRhcHRlciA9IG5ldyBXMTFNZXNzYWdlUmVmZXJlbmNlKGtpbmQpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSW1wb3J0KSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFJbXBvcnQoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFhTRFNjaGVtYSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExVHlwZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExTWVzc2FnZSgpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUGFydCkKLSAgICAgIHsKLSAgICAJICBhZGFwdGVyID0gbmV3IFcxMVBhcmFtZXRlckZvclBhcnQoKTsgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUoKTsKLSAgICAgIH0gICAgICAgIAotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZSB8fCAKLSAgICAgICAgICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgICAgewotICAgICAgICAvLyBub3Qgd2Ugb25seSBuZWVkIHRoaXMgYWRhcHRlciB0byBzZXJ2ZSBhcyBhbiAnb3RoZXJUaGluZ3NUb0xpc3RlblRvJyBhZGFwdGVyCi0gICAgICAgIC8vIGZvciB1c2UgYnkgdGhlIFcxMU1lc3NhZ2VSZWZlcmVuY2Ugd2hlbiBjb21wdXRpbmcgYSBwYXJhbWV0ZXIgbGlzdAotICAgICAgICBhZGFwdGVyID0gbmV3IFdTRExCYXNlQWRhcHRlcigpOwotICAgICAgfSAgCi0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyB8fAotICAgICAgICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgICB7Ci0gICAgICAgIC8vIFRPRE8uLiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgZmFjdG9yeSB0byBkZWxlZ2F0ZSB0byBleHRlbnNpb24gbGFuZ3VhZ2UgYWRhcHRlciBmYWN0b3JpZXMKLSAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIHJlZmVyZW5jZXMgdG8gU09BUCBvciBIVFRQIHN0dWZmIGZyb20gd2l0aGluIHRoaXMgY2xhc3MKLSAgICAgICAgLy8KLSAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7ICAgICAgICAKLSAgICAgIH0gICAgICAgICAKLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgewotICAgIAkgIEFkYXB0ZXIgZXh0ZW5zaWJpbGl0eUFkYXB0ZXIgPSBudWxsOwotICAgIAkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHRhcmdldDsKLSAgICAJICBTdHJpbmcgbmFtZXNwYWNlID0gZXh0RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgIAkgIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgCSAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gICAgCQkgIEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBleHRlbnNpb24uZ2V0QWRhcHRlckZhY3RvcnkoKTsKLSAgICAJCSAgZXh0ZW5zaWJpbGl0eUFkYXB0ZXIgPSBmYWN0b3J5LmFkYXB0KHRhcmdldCwgQWRhcHRlci5jbGFzcyk7Ci0gICAgCSAgfQotICAgIAkgIAotICAgIAkgIGlmIChleHRlbnNpYmlsaXR5QWRhcHRlciA9PSBudWxsKSB7Ci0gICAgCQkgIGFkYXB0ZXIgPSBuZXcgVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgCSAgfQotICAgIAkgIGVsc2UgewotICAgIAkJICBhZGFwdGVyID0gZXh0ZW5zaWJpbGl0eUFkYXB0ZXI7Ci0gICAgCSAgfQotICAgICAgfSAgCi0JICBpZiAoYWRhcHRlciA9PSBudWxsKQotCSAgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5PIEFEQVBURVIgQ1JFQVRFRCBGT1IgIiArIHRhcmdldCk7ICAgIC8vJE5PTi1OTFMtMSQKLQkgICAgVGhyZWFkLmR1bXBTdGFjaygpOwotCSAgfQotCi0JICByZXR1cm4gYWRhcHRlcjsJCSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiBhZGFwdCh0YXJnZXQsIHRoaXMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExCYXNlQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQmFzZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1MzJkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExCYXNlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRGVsZXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW5hbWVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLklBY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmFzZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIElBU0RPYmplY3QsIElUcmVlRWxlbWVudCwgSUFjdGlvblByb3ZpZGVyIHsKLQlwcm90ZWN0ZWQgTGlzdCBsaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJvdGVjdGVkIFdTRExCYXNlQWRhcHRlciBvd25lcjsKLQkKLQlwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgIGlmICghbGlzdGVuZXJMaXN0LmNvbnRhaW5zKGxpc3RlbmVyKSkKLSAgICAgICB7Ci0JCSBsaXN0ZW5lckxpc3QuYWRkKGxpc3RlbmVyKTsKLSAgICAgICB9ICAKLQl9Ci0KLQlwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQWRhcHRlckxpc3QoTGlzdCBub3RpZmllckxpc3QsIExpc3QgYWRhcHRlckxpc3QpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gbm90aWZpZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgICB7Ci0gICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBOb3RpZmllcikKLSAgICAgICAgICAgIHsgIAotCQkJTm90aWZpZXIgY29tcG9uZW50ID0gKE5vdGlmaWVyKW87ICAgICAgCi0JCQlBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChjb21wb25lbnQpOwotCQkJYWRhcHRlckxpc3QuYWRkKGFkYXB0ZXIpOwotCQkJCi0JCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCSgoV1NETEJhc2VBZGFwdGVyKSBhZGFwdGVyKS5zZXRPd25lcih0aGlzKTsKLQkJCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3B1bGF0ZUFkYXB0ZXJMaXN0RXJyb3IiICsgbyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0gIAotCQl9Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgbm90aWZpZXIpIHsKLQkJQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobm90aWZpZXIpOwotCi0JCWlmIChhZGFwdGVyIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyICYmICgoV1NETEJhc2VBZGFwdGVyKSBhZGFwdGVyKS5vd25lciA9PSBudWxsKSB7Ci0JCQkoKFdTRExCYXNlQWRhcHRlcikgYWRhcHRlcikuc2V0T3duZXIodGhpcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBhZGFwdGVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPd25lcihXU0RMQmFzZUFkYXB0ZXIgb3duZXIpIHsKLQkJdGhpcy5vd25lciA9IG93bmVyOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCXJldHVybiB0eXBlID09IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldFdTRExBZGFwdGVyRmFjdG9yeSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMF07Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLSAgICAKLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpCi0JewotCSAgc3VwZXIubm90aWZ5Q2hhbmdlZChtc2cpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0JICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsgICAgICAgIAotICAgICAgICAvLyBUT0RPLi4uIGV4Y2VwdGlvbiBzaG91bGQgbmV2ZXIgaGFwcGVuIGhlcmUuLiBidXQgdGhleSBkbwotICAgICAgICAvLyBkdW1waW5nIHRoZSBzdGFjayB0byB0aGUgY29uc29sZSB1bnRpbCB3ZSB0cmFjayB0aGVzZSBkb3duCi0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIG5vdGlmeUxpc3RlbmVycyhPYmplY3QgY2hhbmdlZE9iamVjdCwgU3RyaW5nIHByb3BlcnR5KQotCXsKLQkgIExpc3QgY2xvbmVkTGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgY2xvbmVkTGlzdGVuZXJMaXN0LmFkZEFsbChsaXN0ZW5lckxpc3QpOwotCSAgZm9yIChJdGVyYXRvciBpID0gY2xvbmVkTGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICB7Ci0JICAgIElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lciA9IChJQVNET2JqZWN0TGlzdGVuZXIpaS5uZXh0KCk7Ci0JICAgIGxpc3RlbmVyLnByb3BlcnR5Q2hhbmdlZCh0aGlzLCBwcm9wZXJ0eSk7Ci0JICB9ICAgICAgCi0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldE5hbWVDb21tYW5kKFN0cmluZyBuZXdOYW1lKSB7Ci0JCXJldHVybiBuZXcgVzExUmVuYW1lQ29tbWFuZCh0aGlzLCBuZXdOYW1lKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQkJdHJ5CXsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBudWxsOwotCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJaWYgKHdpbmRvdyAhPSBudWxsKQl7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJaWYgKHBhZ2UgIT0gbnVsbCkgewotCQkJCQllZGl0b3JQYXJ0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlkZWZpbml0aW9uID0gKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0JCQl9Ci0JCQlpZiAoZWRpdG9yUGFydCA9PSBudWxsKSB7Ci0JCQkJcmV0dXJuIGZhbGxCYWNrQ2hlY2tJc1JlYWRPbmx5KCk7Ci0JCQl9Ci0KLQkJCURlZmluaXRpb24gZWRpdG9yRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7Ci0JCQlpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIGRlZmluaXRpb24gPT0gZWRpdG9yRGVmaW5pdGlvbikgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXJldHVybiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpOwotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0KLQkJfQotCQkKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpIHsKLQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSB0YXJnZXQpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRE9NTm9kZSB8fCBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEltcGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0gIAotCXB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKSB7Ci0JCXJldHVybiBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMURlbGV0ZUNvbW1hbmQodGhpcyk7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMUFkZFBhcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFBZGRQYXJ0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2EyNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMUFkZFBhcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLlBhcmFtZXRlckVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMUFkZFBhcnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRQYXJ0QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBXMTFBZGRQYXJ0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QQVJUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3BhcnRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IG51bGw7Ci0JCQlJTWVzc2FnZSBpTWVzc2FnZSA9IG51bGw7Ci0JCQlNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQltZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0VGFyZ2V0KCk7Ci0JCQkJbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbSA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBvOwotCQkJCWlmIChwYXJhbS5nZXRPd25lcigpIGluc3RhbmNlb2YgSU1lc3NhZ2UpIHsKLQkJCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIHBhcmFtLmdldE93bmVyKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcmFtLmdldE93bmVyKCkgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJCW1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBwYXJhbS5nZXRPd25lcigpKS5nZXRUYXJnZXQoKTsKLQkJCQkJbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewotCQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFyYW0uZ2V0VGFyZ2V0KCk7Ci0JCQkJCW1lc3NhZ2UgPSAoTWVzc2FnZSkgcGFydC5lQ29udGFpbmVyKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlKSB7Ci0JCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIG87Ci0JCQl9Ci0JCQkKLQkJCWlmIChtZXNzYWdlID09IG51bGwgJiYgaU1lc3NhZ2UgPT0gbnVsbCAmJiBtZXNzYWdlUmVmICE9IG51bGwpIHsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pICgoVzExRGVzY3JpcHRpb24pIGVkaXRvci5nZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJCQlTdHJpbmcgbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sICJOZXdNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZmluaXRpb24sIG1lc3NhZ2VOYW1lLCBmYWxzZSk7Ci0JCQkJY29tbWFuZC5ydW4oKTsKLQkJCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCQkJfQotCQkJCi0JCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0JCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG1lc3NhZ2UpOwotCQkJfQotCi0JCQlpZiAoaU1lc3NhZ2UgIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IGlNZXNzYWdlLmdldEFkZFBhcnRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCWlmIChlcCBpbnN0YW5jZW9mIFBhcmFtZXRlckVkaXRQYXJ0KSB7Ci0JCQkoKFBhcmFtZXRlckVkaXRQYXJ0KSBlcCkucGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMU9wZW5JbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFPcGVuSW1wb3J0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OTU2ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMU9wZW5JbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVuSW1wb3J0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNET3BlbkltcG9ydEFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIFcxMU9wZW5JbXBvcnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fT1BFTl9JTVBPUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDAgJiYgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCQlJbXBvcnQgdGhlSW1wb3J0ID0gZ2V0V1NETEltcG9ydCgoVzExSW1wb3J0KSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCkpOwotCQkJCi0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB0aGVJbXBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5PcGVuT25TZWxlY3Rpb25IZWxwZXIgaGVscGVyID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyKGRlZmluaXRpb24pOwotCQkgICAgaGVscGVyLm9wZW5FZGl0b3IoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSB0aGVJbXBvcnQpOwotCQl9Ci0JfQotCQotCSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpIHsKLQkJICBib29sZWFuIGVuYWJsZWQgPSBzdXBlci5jYWxjdWxhdGVFbmFibGVkKCk7Ci0JCSAgaWYgKGVuYWJsZWQpIHsKLQkJCSAgaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDAgJiYgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCQkJCUltcG9ydCB0aGVJbXBvcnQgPSBnZXRXU0RMSW1wb3J0KChXMTFJbXBvcnQpIGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKSk7Ci0JCQkJCQotCQkJCQlpZiAodGhlSW1wb3J0ICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBsb2NhdGlvbiA9IHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkKLQkJCQkJCWlmIChsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQkJZW5hYmxlZCA9IGZhbHNlOwotCQkJCQl9Ci0JCQkgIH0KLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGVuYWJsZWQ7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgSW1wb3J0IGdldFdTRExJbXBvcnQoVzExSW1wb3J0IHcxMUltcG9ydCkgewotCQkgIHJldHVybiAoSW1wb3J0KSAoKFcxMUltcG9ydCkgdzExSW1wb3J0KS5nZXRUYXJnZXQoKTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY2OGZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotCQlpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIuZ2V0VGFyZ2V0KCksIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzY1ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldE1lc3NhZ2VJbnRlcmZhY2VBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2U7Ci0KLQkKLQlwdWJsaWMgVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQkJbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIobWVzc2FnZVJlZmVyZW5jZSk7Ci0JCWlmIChtZXNzYWdlUmVmZXJlbmNlICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4MmI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdUeXBlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIod3NkbEJhc2VBZGFwdGVyKTsKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2Uod3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJd3NkbEJhc2VBZGFwdGVyID0gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ODJkYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld0VsZW1lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXROZXdFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3RWxlbWVudEFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIHdzZGxCYXNlQWRhcHRlcjsKLQkKLQlwdWJsaWMgVzExU2V0TmV3RWxlbWVudEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotICAgICAgICBpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld01lc3NhZ2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmOTE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldE5ld01lc3NhZ2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdNZXNzYWdlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlOwotCQotCXB1YmxpYyBXMTFTZXROZXdNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19NRVNTQUdFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJTWVzc2FnZVJlZmVyZW5jZShJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCXRoaXMubWVzc2FnZVJlZmVyZW5jZSA9IG1lc3NhZ2VSZWZlcmVuY2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQkJbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIobWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlUmVmZXJlbmNlICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdUeXBlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3VHlwZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDBlNmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdUeXBlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFcxMVNldE5ld1R5cGVBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdUeXBlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXROZXdUeXBlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19UWVBFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBvIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQkJCXdzZGxCYXNlQWRhcHRlciA9IChXU0RMQmFzZUFkYXB0ZXIpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHdzZGxCYXNlQWRhcHRlcik7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXROZXdEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHdzZGxCYXNlQWRhcHRlciwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXdzZGxCYXNlQWRhcHRlciA9IG51bGw7Ci0JfQotICAgIAotICAgIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgd3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpLCBudWxsLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmMjhlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldEludGVyZmFjZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREdlbmVyYXRlQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLk5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFcxMUJpbmRpbmcgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJQmluZGluZyB7Ci0KLQlwdWJsaWMgSUludGVyZmFjZSBnZXRJbnRlcmZhY2UoKSB7Ci0gICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKChCaW5kaW5nKSB0YXJnZXQpLmdldEVQb3J0VHlwZSgpOwotICAgICAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgICAgeyAgCi0JICAgICAgcmV0dXJuIChJSW50ZXJmYWNlKSBjcmVhdGVBZGFwdGVyKHBvcnRUeXBlKTsKLQkJfQkJCi0JCXJldHVybiBudWxsOwotCX0KLSAgICAKLSAgICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nQ29udGVudExpc3QoKQotICAgIHsKLSAgICAgIExpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnMgPSBjb3B5TGlzdCgoKEJpbmRpbmcpdGFyZ2V0KS5nZXRFQmluZGluZ09wZXJhdGlvbnMoKSk7IAotICAgICAgTGlzdCBvcGVyYXRpb25zID0gY29weUxpc3QoKChCaW5kaW5nKXRhcmdldCkuZ2V0RVBvcnRUeXBlKCkuZ2V0RU9wZXJhdGlvbnMoKSk7Ci0gICAgICAKLSAgICAgIC8vIERldGVybWluZSBpZiB3ZSBuZWVkIHBsYWNlaG9sZGVycyBmb3IgT3BlcmF0aW9ucwotCSAgTGlzdCB0b0FkYXB0TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIAotCSAgSXRlcmF0b3IgYmluZGluZ09wSXQgPSBiaW5kaW5nT3BlcmF0aW9ucy5pdGVyYXRvcigpOwotCSAgd2hpbGUgKGJpbmRpbmdPcEl0Lmhhc05leHQoKSkgewotCQkgIEJpbmRpbmdPcGVyYXRpb24gaXRlbSA9IChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3BJdC5uZXh0KCk7Ci0JCSAgb3BlcmF0aW9ucy5yZW1vdmUoaXRlbS5nZXRFT3BlcmF0aW9uKCkpOwotCSAgfQotCSAgCi0gICAgICBJdGVyYXRvciBvcGVyYXRpb25zSXQgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAob3BlcmF0aW9uc0l0Lmhhc05leHQoKSkgewotICAgIAkgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wZXJhdGlvbnNJdC5uZXh0KCk7Ci0gICAgCSAgdG9BZGFwdExpc3QuYWRkKG9wKTsKLSAgICAJICB0b0FkYXB0TGlzdC5hZGQob3AuZ2V0RUlucHV0KCkpOwotICAgIAkgIHRvQWRhcHRMaXN0LmFkZChvcC5nZXRFT3V0cHV0KCkpOwotICAgIAkgIHRvQWRhcHRMaXN0LmFkZEFsbChvcC5nZXRFRmF1bHRzKCkpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdCA9IHRvQWRhcHRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7IAotICAgICAgICAgIGlmIChvICE9IG51bGwpCi0gICAgICAgICAgeyAgCi0gICAgCSAgICBPYmplY3QgYWRhcHRlZCA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcilvKTsKLSAgICAJICAgIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgcGxhY2VIb2xkZXIgPSBuZXcgQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcihhZGFwdGVkKTsKLSAgICAJICAgIGFkYXB0ZXJMaXN0LmFkZChwbGFjZUhvbGRlcik7Ci0gICAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9ICgoQmluZGluZyl0YXJnZXQpLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWkubmV4dCgpOwotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSBJbnB1dAotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSA9PSBudWxsICYmIG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0gICAgICAgIAkvLyBOZWVkIGEgcGxhY2Vob2xkZXIKLSAgICAgICAgCU9iamVjdCBhZGFwdGVkT2JqZWN0ID0gY3JlYXRlQWRhcHRlcihvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwotICAgICAgICAJQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlciB0ZW1wID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZE9iamVjdCk7Ci0gICAgICAgIAlhZGFwdGVyTGlzdC5hZGQodGVtcCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSBPdXRwdXQKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgPT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLSAgICAgICAgCS8vIE5lZWQgYSBwbGFjZWhvbGRlcgotICAgICAgICAJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBjcmVhdGVBZGFwdGVyKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotICAgICAgICAJQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlciB0ZW1wID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZE9iamVjdCk7Ci0gICAgICAgIAlhZGFwdGVyTGlzdC5hZGQodGVtcCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgRmF1bHRzCi0gICAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgIExpc3QgZmF1bHRzID0gY29weUxpc3Qob3BlcmF0aW9uLmdldEVGYXVsdHMoKSk7Ci0gICAgICAgIExpc3QgYmluZGluZ0ZhdWx0cyA9IGNvcHlMaXN0KGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBiaW5kaW5nRmF1bHRzLnNpemUoKTsgaW5kZXgrKykgewotICAgICAgICAJQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpIGJpbmRpbmdGYXVsdHMuZ2V0KGluZGV4KTsKLSAgICAgICAgCWxpc3QuYWRkKGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIAkKLSAgICAgICAgCWZhdWx0cy5yZW1vdmUoYmluZGluZ0ZhdWx0LmdldEVGYXVsdCgpKTsgICAgICAgIAkKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gTGVmdCBvdmVyIGZhdWx0cyBuZWVkIHBsYWNlaG9sZGVycwotICAgICAgICBJdGVyYXRvciByZW1hbmluZ0ZhdWx0cyA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAocmVtYW5pbmdGYXVsdHMuaGFzTmV4dCgpKSB7Ci0gICAgICAgIAlPYmplY3QgYWRhcHRlZE9iamVjdCA9IGNyZWF0ZUFkYXB0ZXIoKEZhdWx0KSByZW1hbmluZ0ZhdWx0cy5uZXh0KCkpOwotICAgICAgICAJQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlciB0ZW1wID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZE9iamVjdCk7Ci0gICAgICAgIAlhZGFwdGVyTGlzdC5hZGQodGVtcCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcG9wdWxhdGVBZGFwdGVyTGlzdChsaXN0LCBhZGFwdGVyTGlzdCk7Ci0gICAgICByZXR1cm4gYWRhcHRlckxpc3Q7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgTGlzdCBjb3B5TGlzdChMaXN0IG9yaWdMaXN0KSB7Ci0gICAgCUxpc3QgbmV3TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAJSXRlcmF0b3IgaXQgPSBvcmlnTGlzdC5pdGVyYXRvcigpOwotICAgIAl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgCQluZXdMaXN0LmFkZChpdC5uZXh0KCkpOwotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gbmV3TGlzdDsKLSAgICB9Ci0KLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuICgoQmluZGluZykgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotCQlJdGVyYXRvciBpdCA9ICgoQmluZGluZykgdGFyZ2V0KS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgaXRlbTsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCQotCQkJCWlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCQlDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJCQkJQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWVzcGFjZShuYW1lc3BhY2UpOwotCQkJCQlpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKSB7Ci0JCQkJCQlyZXR1cm4gY29udGVudEdlbmVyYXRvci5nZXRQcm90b2NvbCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTREdlbmVyYXRlQmluZGluZ0FjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9QT1JUVFlQRSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhY3Rpb25JRHMuYWRkKEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0SW50ZXJmYWNlQ29tbWFuZChJSW50ZXJmYWNlIG5ld0ludGVyZmFjZSkgewotCQlXMTFJbnRlcmZhY2UgdzExSW50ZXJmYWNlID0gKFcxMUludGVyZmFjZSkgbmV3SW50ZXJmYWNlOwotCQlyZXR1cm4gbmV3IFcxMVNldEludGVyZmFjZUNvbW1hbmQoKEJpbmRpbmcpIHRhcmdldCwgKFBvcnRUeXBlKSB3MTFJbnRlcmZhY2UuZ2V0VGFyZ2V0KCkpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQoKEJpbmRpbmcpIHRoaXMuZ2V0VGFyZ2V0KCkpOwotCX0KLSAgICAKLSAgICBwcml2YXRlIElMYWJlbFByb3ZpZGVyIGdldExhYmVsUHJvdmlkZXIoTm9kZSBub2RlKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBub2RlLmdldE5hbWVzcGFjZVVSSSgpOyAgICAgIAotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIE5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBYU0RFZGl0b3JQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldE5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnkoKTsgICAgICAKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldExhYmVsUHJvdmlkZXIobmFtZXNwYWNlKTsKLSAgICAgIH0gICAgICAgIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotICB7Ci0gICAgSW1hZ2UgaW1hZ2UgPSBudWxsOwotICAgIExpc3QgbGlzdCA9ICgoQmluZGluZykgdGFyZ2V0KS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAobGlzdC5zaXplKCkgPiAwKQotICAgIHsgIAotICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWxpc3QuZ2V0KDApOwotICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGVlLmdldEVsZW1lbnQoKTsKLSAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgIHsgIAotICAgICAgICAgSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlciA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7Ci0gICAgICAgICBpZiAobGFiZWxQcm92aWRlciAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICBpbWFnZT0gbGFiZWxQcm92aWRlci5nZXRJbWFnZShlbGVtZW50KTsKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgfSAgICAgICAgCi0gICAgaWYgKGltYWdlID09IG51bGwpCi0gICAgewotICAgICAgaW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2JpbmRpbmdfb2JqLmdpZiIpOyAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gICAgcmV0dXJuIGltYWdlOwotICAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpCi0gIHsKLSAgICByZXR1cm4gImJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgIElUcmVlRWxlbWVudFtdIHJlc3VsdCA9IG5ldyBJVHJlZUVsZW1lbnRbbGlzdC5zaXplKCldOwotICAgIGxpc3QudG9BcnJheShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCSAgaWYgKGdldEJpbmRpbmdPcGVyYXRpb25zKCkuc2l6ZSgpID4gMCkgewotCQkgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoQmluZGluZyl0YXJnZXQpLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLCBsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoYm9vbGVhbiBjcmVhdGVNaXNzaW5nT3BlcmF0aW9ucywgYm9vbGVhbiBzaG93RXh0cmFPcGVyYXRpb25zKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlODZmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci0KLQotcHVibGljIGNsYXNzIFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLCBJVHJlZUVsZW1lbnQKLXsKLSAgcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkKLSAgewotICAgIHJldHVybiBJVHJlZUVsZW1lbnQuRU1QVFlfTElTVDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotICB7ICAgCi0gICAgU3RyaW5nIGltYWdlTmFtZSA9IG51bGw7Ci0gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBpbWFnZU5hbWUgPSAiaWNvbnMvaW5wdXRfb2JqLmdpZiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICBpbWFnZU5hbWUgPSAiaWNvbnMvb3V0cHV0X29iai5naWYiOyAgICAgICAvLyROT04tTkxTLTEkCi0gICAgfSAKLSAgICBlbHNlIC8vaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICB7Ci0gICAgICBpbWFnZU5hbWUgPSAiaWNvbnMvZmF1bHRfb2JqLmdpZiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAKLSAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKGltYWdlTmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLQkgIFN0cmluZyBuYW1lID0gbnVsbDsKLQkgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0JICB7Ci0JCSAgbmFtZSA9ICgoQmluZGluZ0lucHV0KSB0YXJnZXQpLmdldE5hbWUoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0JICB7Ci0JCSAgbmFtZSA9ICgoQmluZGluZ091dHB1dCkgdGFyZ2V0KS5nZXROYW1lKCk7Ci0JICB9IAotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotCSAgewotCQkgIG5hbWUgPSAoKEJpbmRpbmdGYXVsdCkgdGFyZ2V0KS5nZXROYW1lKCk7Ci0JICB9Ci0JICAKLQkgIGlmIChuYW1lID09IG51bGwpIHsKLQkJICBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQotCSAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKQotICB7Ci0JICBTdHJpbmcgdGV4dCA9ICIiOyAvLyROT04tTkxTLTEkCi0JICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotCSAgewotCQkgIHRleHQgPSAiYmluZGluZyBpbnB1dCI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0JICB7Ci0JCSAgdGV4dCA9ICJiaW5kaW5nIG91dHB1dCI7IC8vJE5PTi1OTFMtMSQKLQkgIH0gCi0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0JICB7Ci0JCSAgdGV4dCA9ICJiaW5kaW5nIGZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICByZXR1cm4gdGV4dDsKLSAgfQotCi0gIHB1YmxpYyBJTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgewotICAgIEVPYmplY3QgcmVzdWx0Tm90aWZpZXIgPSBudWxsOwotICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgcmVzdWx0Tm90aWZpZXIgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVJbnB1dCgoQmluZGluZ0lucHV0KXRhcmdldCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgcmVzdWx0Tm90aWZpZXIgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVPdXRwdXQoKEJpbmRpbmdPdXRwdXQpdGFyZ2V0KTsKLSAgICB9ICAgICAgICAgIAotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICB7Ci0gICAgICByZXN1bHROb3RpZmllciA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZUZhdWx0KChCaW5kaW5nRmF1bHQpdGFyZ2V0KTsKLSAgICB9ICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdE5vdGlmaWVyICE9IG51bGwgPyAoSU1lc3NhZ2VSZWZlcmVuY2UpY3JlYXRlQWRhcHRlcihyZXN1bHROb3RpZmllcikgOiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCkKLSAgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7ICAgIAotICAgIENvbGxlY3Rpb24gYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotLy8gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotLy8gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0vLyAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ09wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjOGRlNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nT3BlcmF0aW9uIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJpbmRpbmdPcGVyYXRpb24sIElUcmVlRWxlbWVudAotewotICAKLSAgcHVibGljIElPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRhcmdldDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOyAgICAKLSAgICByZXR1cm4gb3BlcmF0aW9uICE9IG51bGwgPyAoSU9wZXJhdGlvbiljcmVhdGVBZGFwdGVyKG9wZXJhdGlvbikgOiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nTWVzc2FnZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRhcmdldDsKLSAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpKTsKLSAgICB9Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgIHsgIAotICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpKTsKLSAgICB9ICAgICAKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkpOwotICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHBvcHVsYXRlQWRhcHRlckxpc3QobGlzdCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pdGFyZ2V0OwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gb3BlcmF0aW9uICE9IG51bGwgPyBvcGVyYXRpb24uZ2V0TmFtZSgpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEV4dGVuc2libGl0eU9iamVjdHMoKQotICB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLQotICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0QmluZGluZ01lc3NhZ2VzKCk7Ci0gICAgSVRyZWVFbGVtZW50W10gcmVzdWx0ID0gbmV3IElUcmVlRWxlbWVudFtsaXN0LnNpemUoKV07Ci0gICAgbGlzdC50b0FycmF5KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JICBpZiAoZ2V0QmluZGluZ01lc3NhZ2VzKCkuc2l6ZSgpID4gMCkgewotCQkgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotICB7Ci0gICAgU3RyaW5nIGltYWdlTmFtZSA9ICJpY29ucy9vcGVyYXRpb25iaW5kaW5nX29iai5naWYiOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShpbWFnZU5hbWUpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotICAgIHJldHVybiAiYmluZGluZyBvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsgICAgCi0gICAgQ29sbGVjdGlvbiBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFDYXRlZ29yeUFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQ2F0ZWdvcnlBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTk3NzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEltcG9ydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkTWVzc2FnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkU2VydmljZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUNhdGVnb3J5QWRhcHRlciBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElDYXRlZ29yeUFkYXB0ZXIsIElUcmVlRWxlbWVudCwgSUFTRE9iamVjdExpc3RlbmVyIHsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElNUE9SVFMgPSAxOwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVFlQRVMgPSAyOwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU0VSVklDRVMgPSAzOwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQklORElOR1MgPSA1OwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSU5URVJGQUNFUyA9IDY7Ci0JICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNRVNTQUdFUyA9IDc7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIElNUE9SVFNfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfRk9MREVSX0lNUE9SVFM7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBUWVBFU19IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfVFlQRVM7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWSUNFX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9TRVJWSUNFUzsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEJJTkRJTkdfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfRk9MREVSX0JJTkRJTkdTOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSU5URVJGQUNFX0hFQURFUl9URVhUID0gTWVzc2FnZXMuSU5URVJGQUNFX0hFQURFUl9URVhUOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfTUVTU0FHRVM7Ci0KLQkgIHByb3RlY3RlZCBTdHJpbmcgdGV4dDsKLQkgIHByb3RlY3RlZCBJbWFnZSBpbWFnZTsKLQkgIHByb3RlY3RlZCBpbnQgZ3JvdXBUeXBlOwotCSAgcHJvdGVjdGVkIENvbGxlY3Rpb24gY2hpbGRyZW47Ci0JICBwcm90ZWN0ZWQgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCSAgCi0JICBwdWJsaWMgVzExQ2F0ZWdvcnlBZGFwdGVyKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgU3RyaW5nIGxhYmVsLCBJbWFnZSBpbWFnZSwgQ29sbGVjdGlvbiBjaGlsZHJlbiwgaW50IGdyb3VwVHlwZSkgewotCSAgICB0aGlzLnRleHQgPSBsYWJlbDsKLQkgICAgdGhpcy5pbWFnZSA9IGltYWdlOwotCSAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JICAgIHRoaXMudGFyZ2V0ID0gKChXMTFEZXNjcmlwdGlvbikgZGVzY3JpcHRpb24pLmdldFRhcmdldCgpOwotCSAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47Ci0JICAgIHRoaXMuZ3JvdXBUeXBlID0gZ3JvdXBUeXBlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCSAgICByZXR1cm4gKERlZmluaXRpb24pIHRhcmdldDsKLQkgIH0KLQkgIAotCSAgcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQkgIHJldHVybiBkZXNjcmlwdGlvbjsKLQkgIH0KLQotCSAgcHVibGljIGludCBnZXRHcm91cFR5cGUoKSB7Ci0JICAgIHJldHVybiBncm91cFR5cGU7Ci0JICB9Ci0KLQkgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkgICAgcmV0dXJuIGltYWdlOwotCSAgfQotCi0JICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JICAgIHJldHVybiB0ZXh0OwotCSAgfQotCi0JICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JICAgIHJldHVybiAoSVRyZWVFbGVtZW50W10pIGNoaWxkcmVuLnRvQXJyYXkobmV3IElUcmVlRWxlbWVudFswXSk7Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHNldENoaWxkcmVuKENvbGxlY3Rpb24gbGlzdCkgewotCSAgICBjaGlsZHJlbiA9IGxpc3Q7Ci0JICB9Ci0KLQkgIHB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7Ci0JICAgIHJldHVybiBudWxsOwotCSAgfQotCi0JICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgeyAgICAKLQkgICAgQ29sbGVjdGlvbiBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIAotCSAgICBzd2l0Y2ggKGdyb3VwVHlwZSkgewotCSAgICAgIGNhc2UgSU1QT1JUUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkSW1wb3J0QWN0aW9uLklEKTsKLQkgICAgICAgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgICBjYXNlIFRZUEVTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRTY2hlbWFBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgU0VSVklDRVMgOiB7Ci0JICAgICAgICBhY3Rpb25JRHMuYWRkKEFTREFkZFNlcnZpY2VBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgQklORElOR1MgOiB7Ci0JICAgICAgICBhY3Rpb25JRHMuYWRkKEFTREFkZEJpbmRpbmdBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgSU5URVJGQUNFUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkSW50ZXJmYWNlQWN0aW9uLklEKTsKLQkgICAgICAgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgICBjYXNlIE1FU1NBR0VTIDogewotCSAgICAJYWN0aW9uSURzLmFkZChBU0RBZGRNZXNzYWdlQWN0aW9uLklEKTsKLQkgICAgICAgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgfQotCSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkgewotCSAgICBpZiAoZ2V0VGV4dCgpLmVxdWFscyhwcm9wZXJ0eSkpCi0JICAgICAgbm90aWZ5TGlzdGVuZXJzKHRoaXMsIHByb3BlcnR5KTsKLQkgIH0KLQkgIAotCSAgcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCSAgcmV0dXJuIG51bGw7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQkgIGlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCSAgcmV0dXJuIHRydWU7Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiBmYWxzZTsKLQkgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMURlc2NyaXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMURlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNmM5YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFEZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRJbXBvcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEludGVyZmFjZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkU2NoZW1hQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRTZXJ2aWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkU2VydmljZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTU5hbWVzcGFjZUluZm9NYW5hZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFEZXNjcmlwdGlvbiBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElEZXNjcmlwdGlvbiB7Ci0JcHJvdGVjdGVkIExpc3QgY2F0ZWdvcmllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQlwcm90ZWN0ZWQgVzExQ2F0ZWdvcnlBZGFwdGVyIGdldENhdGVnb3J5KGludCBjYXRlZ29yeUlkKSB7Ci0JCXJldHVybiBnZXRDYXRlZ29yeShjYXRlZ29yeUlkLCBnZXRDYXRlZ29yeUFkYXB0ZXJzKCkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgVzExQ2F0ZWdvcnlBZGFwdGVyIGdldENhdGVnb3J5KGludCBjYXRlZ29yeUlkLCBMaXN0IGxpc3QpIHsKLQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gKFcxMUNhdGVnb3J5QWRhcHRlcikgaXQubmV4dCgpOwotCQkJaWYgKGFkYXB0ZXIuZ2V0R3JvdXBUeXBlKCkgPT0gY2F0ZWdvcnlJZCkgewotCQkJCXJldHVybiBhZGFwdGVyOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJvdGVjdGVkIExpc3QgZ2V0Q2F0ZWdvcnlBZGFwdGVycygpIHsKLQkgICAgLy8ganVzdCBzZXQgY2F0ZWdvcnlhZGFwdGVycycgY2hpbGRyZW4gaWYgY2F0ZWdvcnkgYWRhcHRlcnMgYXJlCi0JICAgIC8vIGFscmVhZHkgY3JlYXRlZAotCSAgICBpZiAoY2F0ZWdvcmllcy5zaXplKCkgPT0gMCkgewotCSAgICAJY2F0ZWdvcmllcyA9IGNyZWF0ZUNhdGVnb3J5QWRhcHRlcnMoKTsKLQkgICAgfQotCSAgICBlbHNlIHsKLQkgICAgCVcxMUNhdGVnb3J5QWRhcHRlciBjYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5JTVBPUlRTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldEltcG9ydHMoKSk7Ci0JICAgIAkKLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWFkZExpc3RlbmVyVG9UeXBlcyhjYXRlZ29yeSk7Ci0KLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLlNFUlZJQ0VTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldFNlcnZpY2VzKCkpOwotCi0JICAgIAljYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5CSU5ESU5HUywgY2F0ZWdvcmllcyk7Ci0JICAgIAljYXRlZ29yeS5zZXRDaGlsZHJlbihnZXRCaW5kaW5ncygpKTsKLQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuSU5URVJGQUNFUywgY2F0ZWdvcmllcyk7Ci0JICAgIAljYXRlZ29yeS5zZXRDaGlsZHJlbihnZXRJbnRlcmZhY2VzKCkpOwotCi0JICAgIAljYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5NRVNTQUdFUywgY2F0ZWdvcmllcyk7Ci0JICAgIAljYXRlZ29yeS5zZXRDaGlsZHJlbihnZXRNZXNzYWdlcygpKTsKLQkgICAgfQotICAgIAlyZXR1cm4gY2F0ZWdvcmllczsKLQl9Ci0JCi0JLy8gVE9ETzogcm1haDogcmlnaHQgbm93IGl0IGxvb2tzIGxpa2UgdGhlIGRlZmluaXRpb24gbmVlZHMgdG8ga25vdyB0b28gbXVjaCBhYm91dCB0aGUgY2F0ZWdvcmllcwotCS8vIFdlIHNob3VsZCBtYWtlIHRoZSBjYXRlZ29yaWVzIG1vcmUgc2VsZi1zdWZmaWNpZW50Li4uLiBzbyBpdCBrbm93cyBob3cgdG8gY29tcHV0ZSBpdCdzIGNoaWxkcmVuCi0JLy8gYmFzZWQgb24gaXQncyBraW5kCi0JcHJvdGVjdGVkIExpc3QgY3JlYXRlQ2F0ZWdvcnlBZGFwdGVycygpIHsKLQkJTGlzdCBjYXRlZ29yaWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJTGlzdCBpbXBvcnRMaXN0ID0gZ2V0SW1wb3J0cygpOwotLy8JCUxpc3Qgc2NoZW1hTGlzdCA9IGdldFR5cGVzKCk7Ci0JCUxpc3Qgc2VydmljZUxpc3QgPSBnZXRTZXJ2aWNlcygpOwotCQlMaXN0IGJpbmRpbmdMaXN0ID0gZ2V0QmluZGluZ3MoKTsKLQkJTGlzdCBpbnRlcmZhY2VMaXN0ID0gZ2V0SW50ZXJmYWNlcygpOwotCQlMaXN0IG1lc3NhZ2VMaXN0ID0gZ2V0TWVzc2FnZXMoKTsKLQotCQlTdHJpbmcgY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5JTVBPUlRTX0hFQURFUl9URVhUOwotCQlJbWFnZSBjYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9pbXBvcnRoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCVcxMUNhdGVnb3J5QWRhcHRlciBjYXRlZ29yeSA9IG5ldyBXMTFDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgaW1wb3J0TGlzdCwgVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFMpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5UWVBFU19IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvdHlwZXNfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIFcxMUNhdGVnb3J5QWRhcHRlci5UWVBFUyk7Ci0JCWFkZExpc3RlbmVyVG9UeXBlcyhjYXRlZ29yeSk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLlNFUlZJQ0VfSEVBREVSX1RFWFQ7Ci0JCWNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3NlcnZpY2VoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBzZXJ2aWNlTGlzdCwgVzExQ2F0ZWdvcnlBZGFwdGVyLlNFUlZJQ0VTKTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCWNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuQklORElOR19IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZGluZ2hlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIGJpbmRpbmdMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuQklORElOR1MpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5JTlRFUkZBQ0VfSEVBREVSX1RFWFQ7Ci0JCWNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3BvcnR0eXBlaGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQljYXRlZ29yeSA9IG5ldyBXMTFDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgaW50ZXJmYWNlTGlzdCwgVzExQ2F0ZWdvcnlBZGFwdGVyLklOVEVSRkFDRVMpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5NRVNTQUdFX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9tZXNzYWdlaGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQljYXRlZ29yeSA9IG5ldyBXMTFDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgbWVzc2FnZUxpc3QsIFcxMUNhdGVnb3J5QWRhcHRlci5NRVNTQUdFUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQlyZXR1cm4gY2F0ZWdvcmllczsKLQkgIH0KLQkKLQkvLyBTcGVjaWFsIGNhc2U6Ci0JLy8gV2UgbmVlZCB0byBoYXZlIHRoZSBUeXBlcyBvYmplY3QgaW5mb3JtIG91ciBmYWNhZGUgKFcxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyKSBvZiBpdCdzCi0JLy8gY2hhbmdlcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlc3Qgb2YgdGhlIFcxMUNhdGVnb3J5QWRhcHRlcnMgd2hpY2ggbGlzdGVucwotCS8vIHRvIHRoZSBEZWZpbml0aW9uIG9iamVjdC4KLQlwcml2YXRlIHZvaWQgYWRkTGlzdGVuZXJUb1R5cGVzKFcxMUNhdGVnb3J5QWRhcHRlciBjYXRlZ29yeSkgewotCQlEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSB0aGlzLmdldFRhcmdldCgpOwotCQlUeXBlcyB0eXBlcyA9IGRlZi5nZXRFVHlwZXMoKTsKLQkJaWYgKHR5cGVzICE9IG51bGwgJiYgIXR5cGVzLmVBZGFwdGVycygpLmNvbnRhaW5zKGNhdGVnb3J5KSkgewotCQkJdHlwZXMuZUFkYXB0ZXJzKCkuYWRkKGNhdGVnb3J5KTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKSB7Ci0JCXJldHVybiAoKERlZmluaXRpb24pIHRhcmdldCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KCkgewotCQlTdHJpbmcgdG5zID0gZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCXJldHVybiAoKERlZmluaXRpb24pIHRhcmdldCkuZ2V0UHJlZml4KHRucyk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldFNlcnZpY2VzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbCgoRGVmaW5pdGlvbikgZ2V0VGFyZ2V0KCkpOwotCQlMaXN0IHNlcnZpY2VzID0gdXRpbC5nZXRTZXJ2aWNlcygpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KHNlcnZpY2VzLCBhZGFwdGVyTGlzdCk7Ci0JCQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0QmluZGluZ3MoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKChEZWZpbml0aW9uKSBnZXRUYXJnZXQoKSk7Ci0JCUxpc3QgYmluZGluZ3MgPSB1dGlsLmdldEJpbmRpbmdzKCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QoYmluZGluZ3MsIGFkYXB0ZXJMaXN0KTsKLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0SW50ZXJmYWNlcygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoKERlZmluaXRpb24pIGdldFRhcmdldCgpKTsKLQkJTGlzdCBwb3J0VHlwZXMgPSB1dGlsLmdldFBvcnRUeXBlcygpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KHBvcnRUeXBlcywgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0SW1wb3J0cygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdCgoKERlZmluaXRpb24pIHRhcmdldCkuZ2V0RUltcG9ydHMoKSwgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0VHlwZXMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCVR5cGVzIHR5cGVzID0gKChEZWZpbml0aW9uKSB0YXJnZXQpLmdldEVUeXBlcygpOwotICAgICAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgeyAgCi0JCSAgcG9wdWxhdGVBZGFwdGVyTGlzdCh0eXBlcy5nZXRTY2hlbWFzKCksIGFkYXB0ZXJMaXN0KTsKLSAgICAgICAgfSAgCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKChEZWZpbml0aW9uKSBnZXRUYXJnZXQoKSk7Ci0JCUxpc3QgbWVzc2FnZXMgPSB1dGlsLmdldE1lc3NhZ2VzKCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QobWVzc2FnZXMsIGFkYXB0ZXJMaXN0KTsKLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJU3RyaW5nIG5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCQlpZiAoZGVmaW5pdGlvbi5nZXRRTmFtZSgpICE9IG51bGwpIHsKLQkJCW5hbWUgPSBkZWZpbml0aW9uLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1szXTsKLQkJYWN0aW9uSURzWzBdID0gQVNEQWRkU2VydmljZUFjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzFdID0gQVNEQWRkQmluZGluZ0FjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzJdID0gQVNEQWRkSW50ZXJmYWNlQWN0aW9uLklEOwotCQkKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW1wb3J0Q29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRJbXBvcnRDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRTY2hlbWFDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZFNjaGVtYUNvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZFNlcnZpY2VDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZFNlcnZpY2VDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRCaW5kaW5nQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRCaW5kaW5nQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW50ZXJmYWNlQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRJbnRlcmZhY2VDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwkKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkTWVzc2FnZUNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkTWVzc2FnZUNvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7CQotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VzSW5mbygpIHsKLQkJRE9NTmFtZXNwYWNlSW5mb01hbmFnZXIgbmFtZXNwYWNlSW5mb01hbmFnZXIgPSBuZXcgRE9NTmFtZXNwYWNlSW5mb01hbmFnZXIoKTsKLQkJRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KChEZWZpbml0aW9uKSB0YXJnZXQpOwotCQlyZXR1cm4gbmFtZXNwYWNlSW5mb01hbmFnZXIuZ2V0TmFtZXNwYWNlSW5mb0xpc3QoZWxlbWVudCk7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJkZWZpbml0aW9uIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgY2hpbGRyZW4gPSBnZXRDYXRlZ29yeUFkYXB0ZXJzKCk7Ci0JCXJldHVybiAoSVRyZWVFbGVtZW50W10pIGNoaWxkcmVuLnRvQXJyYXkobmV3IElUcmVlRWxlbWVudFswXSk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG1zZykgewotCQkvLyBUT0RPOiBybWFoOiBUaGlzIGNvZGUgc2hvdWxkIGJlIG1vdmVkIGludG8gVzExQ2F0ZWdvcnlBZGFwdGVyCi0JCWNsYXNzIENhdGVnb3J5Tm90aWZpY2F0aW9uIGV4dGVuZHMgTm90aWZpY2F0aW9uSW1wbCB7Ci0JCQlwcm90ZWN0ZWQgT2JqZWN0IGNhdGVnb3J5OwotCQkJCi0JCQlwdWJsaWMgQ2F0ZWdvcnlOb3RpZmljYXRpb24oT2JqZWN0IGNhdGVnb3J5KSB7Ci0JCQkJc3VwZXIobXNnLmdldEV2ZW50VHlwZSgpLCBtc2cuZ2V0T2xkVmFsdWUoKSwgbXNnLmdldE5ld1ZhbHVlKCksIG1zZy5nZXRQb3NpdGlvbigpKTsKLQkJCQl0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyBPYmplY3QgZ2V0Tm90aWZpZXIoKSB7Ci0JCQkJcmV0dXJuIGNhdGVnb3J5OwotCQkJfQotCQkJCi0JCQlwdWJsaWMgT2JqZWN0IGdldEZlYXR1cmUoKSB7Ci0JCQkJcmV0dXJuIG1zZy5nZXRGZWF0dXJlKCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5JTVBPUlRTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0SW1wb3J0cygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VUeXBlcygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5UWVBFUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldEltcG9ydHMoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRVMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRTZXJ2aWNlcygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VCaW5kaW5ncygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5CSU5ESU5HUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldEJpbmRpbmdzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVBvcnRUeXBlcygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5JTlRFUkZBQ0VTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0SW50ZXJmYWNlcygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VNZXNzYWdlcygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5NRVNTQUdFUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldE1lc3NhZ2VzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgewotCQkJbm90aWZ5TGlzdGVuZXJzKG51bGwsIG51bGwpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFFbmRQb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFFbmRQb2ludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YThiNDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRW5kUG9pbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0QWRkcmVzc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0QmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQuVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldE5ld0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNyZWF0ZVdTRExFbGVtZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFbmRQb2ludCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElFbmRQb2ludCwgSUFTRE9iamVjdExpc3RlbmVyIHsKLSAKLSAgICBwcm90ZWN0ZWQgTGlzdCBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMgPSBudWxsOwotICAgIHByb3RlY3RlZCBMaXN0IHRoaW5nc1RvTGlzdGVuVG8gPSBudWxsOwotICAgIAotCXB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzcygpIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gZ2V0QWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChsaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyIGFkZHJlc3NFRSA9IChXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKWxpc3QuZ2V0KDApOwotICAgICAgICAgIHJldHVybiBhZGRyZXNzRUUuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgfQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBMaXN0IGdldEFwcGxpY2FibGVQcm90b2NvbCgpIHsKLQkJQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUxpc3QgcHJvdG9jb2xzID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpOwotCQlyZXR1cm4gcHJvdG9jb2xzOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQcm90b2NvbChTdHJpbmcgbmV3UHJvdG9jb2wpIHsKLQkJQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IGZhY3RvcnlSZWdpc3RyeS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lKG5ld1Byb3RvY29sKTsKLQkJaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkgewotCQkJU3RyaW5nIGN1cnJlbnRBZGRyZXNzID0gZ2V0QWRkcmVzcygpOwotCQkJaWYgKGN1cnJlbnRBZGRyZXNzICE9IG51bGwpIHsKLQkJCQljb250ZW50R2VuZXJhdG9yLnNldEFkZHJlc3NMb2NhdGlvbihjdXJyZW50QWRkcmVzcyk7Ci0JCQl9Ci0KLQkJCVBvcnQgcG9ydCA9IGdldFBvcnQoKTsKLQkJCS8vIGdvIGFoZWFkIGFuZCBhZGQgcmVxdWlyZWQgbmFtZXNwYWNlcyBmaXJzdCBiZWZvcmUgZ2VuZXJhdGluZyBwb3J0IGNvbnRlbnQKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLmFkZFJlcXVpcmVkTmFtZXNwYWNlcyhjb250ZW50R2VuZXJhdG9yLCBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQljb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQocG9ydCk7Ci0JCX0KLQl9Ci0KLSAgICBwcm90ZWN0ZWQgTGlzdCBnZXRBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKQotICAgIHsgICAgICAgCi0gICAgICAgIGFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgdGhpbmdzVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGdldFRhcmdldCgpOyAgICAgICAgICAKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQotICAgICAgICB7ICAgCi0gICAgICAgICAgTm90aWZpZXIgaXRlbSA9IChOb3RpZmllcilpdC5uZXh0KCk7Ci0gICAgICAgICAgQWRhcHRlciBhZGFwdGVyID0gY3JlYXRlQWRhcHRlcihpdGVtKTsKLSAgICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIpCi0gICAgICAgICAgeyAgCi0gICAgICAgICAgICBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMuYWRkKGFkYXB0ZXIpOwotICAgICAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgICAgICAgIHsgIAotICAgICAgICAgICAgdGhpbmdzVG9MaXN0ZW5Uby5hZGQoYWRhcHRlcik7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgSUFTRE9iamVjdCBvYmplY3QgPSAoSUFTRE9iamVjdClpLm5leHQoKTsKLSAgICAgICAgICBvYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgfSAgCi0gICAgICAgCi0gICAgICByZXR1cm4gYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBjbGVhckFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cygpCi0gICAgeyAgICAKLSAgICAgIGlmICh0aGluZ3NUb0xpc3RlblRvICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgSUFTRE9iamVjdCBvYmplY3QgPSAoSUFTRE9iamVjdClpLm5leHQoKTsKLSAgICAgICAgICBvYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB0aGluZ3NUb0xpc3RlblRvID0gbnVsbDsKLSAgICAgIGFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cyA9IG51bGw7Ci0gICAgfQotCi0JcHVibGljIElCaW5kaW5nIGdldEJpbmRpbmcoKSB7Ci0JCWlmIChnZXRQb3J0KCkuZ2V0RUJpbmRpbmcoKSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gKElCaW5kaW5nKSBjcmVhdGVBZGFwdGVyKGdldFBvcnQoKS5nZXRFQmluZGluZygpKTsKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gZ2V0UG9ydCgpLmdldE5hbWUoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkgewotCSAgcmV0dXJuIGdldEFkZHJlc3MoKTsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXRUeXBlKCkgewotCQlyZXR1cm4gZ2V0QmluZGluZygpOwotCX0KLQotCXByaXZhdGUgUG9ydCBnZXRQb3J0KCkgewotCQlyZXR1cm4gKFBvcnQpIHRhcmdldDsKLQl9Ci0JCi0JcHVibGljIElTZXJ2aWNlIGdldE93bmVyU2VydmljZSgpIHsKLQkJcmV0dXJuIChJU2VydmljZSkgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBDb2xsZWN0aW9uIGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkRW5kUG9pbnRBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfQklORElORyk7IC8vJE5PTi1OTFMtMSQKLSAgICBhY3Rpb25JRHMuYWRkKEFTRFNldE5ld0JpbmRpbmdBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRCaW5kaW5nQ29tbWFuZChJQmluZGluZyBiaW5kaW5nKSB7Ci0JCVcxMUJpbmRpbmcgdzExQmluZGluZyA9IChXMTFCaW5kaW5nKSBiaW5kaW5nOwotCQlyZXR1cm4gbmV3IFcxMVNldEJpbmRpbmdDb21tYW5kKChQb3J0KSB0YXJnZXQsIChCaW5kaW5nKSB3MTFCaW5kaW5nLmdldFRhcmdldCgpKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0QWRkcmVzc0NvbW1hbmQoU3RyaW5nIG5ld0FkZHJlc3MpIHsKLQkJcmV0dXJuIG5ldyBXMTFTZXRBZGRyZXNzQ29tbWFuZCgoUG9ydCkgdGhpcy5nZXRUYXJnZXQoKSwgbmV3QWRkcmVzcyk7Ci0JfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvbmUgb2YgdGhlICdhZGRyZXNzJyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYWRhcHRlcnMgd2UncmUgbGlzdGVuaW5nIHRvIGNoYW5nZXMKLSAgICAgIC8vCi0gICAgICBjbGVhckFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cygpOyAgICAgIAotICAgICAgbm90aWZ5TGlzdGVuZXJzKHRoaXMsIG51bGwpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0gICAgICAgIFN0cmluZyBpbWFnZVBhdGggPSBXU0RMRWRpdG9yVXRpbC5pc09yaWVudGF0aW9uUmlnaHRUb0xlZnQoKSA/ICJpY29ucy9wb3J0X29ial9ydGwuZ2lmIiA6ICJpY29ucy9wb3J0X29iai5naWYiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgIAotICAgICAgICBXU0RMRWRpdG9yUGx1Z2luIHBsdWdpbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgcmV0dXJuIHBsdWdpbi5nZXRJbWFnZShpbWFnZVBhdGgpOwotICAgIH0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJwb3J0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBJVHJlZUVsZW1lbnQuRU1QVFlfTElTVDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKSB7Ci0JCVN0cmluZyBwcm90b2NvbCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQotCQlMaXN0IGxpc3QgPSBnZXRBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkgewotICAgICAgICAJVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlciBhZGRyZXNzRUUgPSAoVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcilsaXN0LmdldCgwKTsKLSAgICAgICAgCU9iamVjdCB0YXJnZXQgPSBhZGRyZXNzRUUuZ2V0VGFyZ2V0KCk7Ci0JCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgdGFyZ2V0OwotCQkJCVN0cmluZyBuYW1lc3BhY2UgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQkJCi0JCQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQkJCUNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQkJCQlDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSBmYWN0b3J5UmVnaXN0cnkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0JCQkJCWlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpIHsKLQkJCQkJCXByb3RvY29sID0gY29udGVudEdlbmVyYXRvci5nZXRQcm90b2NvbCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotICAgICAgICB9CQotCi0JCXJldHVybiBwcm90b2NvbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiZTMxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMU9wZW5JbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExVXBkYXRlSW1wb3J0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUltcG9ydCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElJbXBvcnQgewotCi0JcHVibGljIEltcG9ydCBnZXRJbXBvcnQoKSB7Ci0JCXJldHVybiAoSW1wb3J0KSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gZ2V0SW1wb3J0KCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4KCkgewotCQlyZXR1cm4gZ2V0SW1wb3J0KCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFByZWZpeChnZXROYW1lc3BhY2UoKSk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKSB7Ci0JCXJldHVybiBnZXRJbXBvcnQoKS5nZXRMb2NhdGlvblVSSSgpOwotCX0KLQkKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoSURlc2NyaXB0aW9uKSBvd25lcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgdGFyZ2V0OwotCQlyZXR1cm4gdGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1syXTsKLQkJYWN0aW9uSURzWzBdID0gVzExT3BlbkltcG9ydEFjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzFdID0gQVNERGVsZXRlQWN0aW9uLklEOyAgICAKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9pbXBvcnRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJpbXBvcnQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIElUcmVlRWxlbWVudC5FTVBUWV9MSVNUOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotICAgIHB1YmxpYyBDb21tYW5kIGdldFVwZGF0ZUNvbW1hbmQoU3RyaW5nIGxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgcHJlZml4KSB7Ci0gICAgICByZXR1cm4gbmV3IFcxMVVwZGF0ZUltcG9ydENvbW1hbmQoKEltcG9ydCl0YXJnZXQsIGxvY2F0aW9uLCBuYW1lc3BhY2VVUkksIHByZWZpeCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwY2VkOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkT3BlcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFJbnRlcmZhY2UgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlIHsKLQotCXB1YmxpYyBMaXN0IGdldE9wZXJhdGlvbnMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QoKChQb3J0VHlwZSkgdGFyZ2V0KS5nZXRFT3BlcmF0aW9ucygpLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoKFBvcnRUeXBlKSB0YXJnZXQpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkT3BlcmF0aW9uQ29tbWFuZCgoUG9ydFR5cGUpIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcG9ydHR5cGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJwb3J0VHlwZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IG9wZXJhdGlvbnMgPSBnZXRPcGVyYXRpb25zKCk7Ci0JCUlUcmVlRWxlbWVudFtdIHRyZWVFbGVtZW50cyA9IG5ldyBJVHJlZUVsZW1lbnRbb3BlcmF0aW9ucy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgb3BlcmF0aW9ucy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJlZUVsZW1lbnRzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMWI5YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExQWRkUGFydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRQYXJ0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2UgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJTWVzc2FnZSB7Ci0KLQlwdWJsaWMgTGlzdCBnZXRQYXJ0cygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLS8vCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoTWVzc2FnZSkgdGFyZ2V0KS5nZXRFUGFydHMoKSwgYWRhcHRlckxpc3QpOwotCQlJdGVyYXRvciBwYXJ0cyA9ICgoTWVzc2FnZSkgdGFyZ2V0KS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAocGFydHMuaGFzTmV4dCgpKSB7Ci0JCQlOb3RpZmllciBjb21wb25lbnQgPSAoTm90aWZpZXIpIHBhcnRzLm5leHQoKTsKLQkJCUFkYXB0ZXIgYWRhcHRlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGNvbXBvbmVudCk7Ci0JCQlhZGFwdGVyTGlzdC5hZGQoYWRhcHRlcik7CQkJCi0JCX0KLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCQotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChJRGVzY3JpcHRpb24pIG93bmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJaWYgKCgoTWVzc2FnZSkgdGFyZ2V0KS5nZXRRTmFtZSgpICE9IG51bGwpIHsKLQkJCXJldHVybiAoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJfQotCQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhY3Rpb25JRHMuYWRkKFcxMUFkZFBhcnRBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRQYXJ0Q29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRQYXJ0Q29tbWFuZCgoTWVzc2FnZSkgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9tZXNzYWdlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAibWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IHBhcnRzID0gZ2V0UGFydHMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtwYXJ0cy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzLnNpemUoKTsgaW5kZXgrKykgewotCQkJdHJlZUVsZW1lbnRzW2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIHBhcnRzLmdldChpbmRleCk7Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ODE4OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLk1vZGVsRGlhZ25vc3RpY0luZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLldTRExWaXNpdG9yRm9yUGFyYW1ldGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSU1lc3NhZ2VSZWZlcmVuY2UsIElBU0RPYmplY3RMaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgaW50IG1lc3NhZ2VLaW5kID0gLTE7Ci0gIHByb3RlY3RlZCBMaXN0IHBhcmFtZXRlcnMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBudWxsOwotICAKLSAgcHVibGljIFcxMU1lc3NhZ2VSZWZlcmVuY2UoaW50IG1lc3NhZ2VLaW5kKQotICB7Ci0gICAgdGhpcy5tZXNzYWdlS2luZCA9IG1lc3NhZ2VLaW5kOwotICB9Ci0KLSAgcHVibGljIElPcGVyYXRpb24gZ2V0T3duZXJPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChJT3BlcmF0aW9uKSBvd25lcjsKLSAgfQotICAKLSAgLyoKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZVN0cmluZyhTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzKSB7Ci0JICBTdHJpbmcgc3RyaW5nID0gbnVsbDsKLQotCSAgT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcikgewotCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJICBTdHJpbmcgbmV3U3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSwgYXJncyk7Ci0JCSAgaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkgIHN0cmluZyA9IG5ld1N0cmluZzsKLQkJICB9Ci0JICB9Ci0KLQkgIHJldHVybiBzdHJpbmc7Ci0gIH0KLSAgKi8KLSAgCi0gIC8vIENvbnZlbmllbmNlIG1ldGhvZAotICBwdWJsaWMgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgewotICAgIHJldHVybiAoTWVzc2FnZVJlZmVyZW5jZSkgdGFyZ2V0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZU1lc3NhZ2VLaW5kKCkKLSAgewotICAgIGlmIChnZXRNZXNzYWdlUmVmZXJlbmNlKCkgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBtZXNzYWdlS2luZCA9IEtJTkRfSU5QVVQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldE1lc3NhZ2VSZWZlcmVuY2UoKSBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICBtZXNzYWdlS2luZCA9IEtJTkRfT1VUUFVUOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRNZXNzYWdlUmVmZXJlbmNlKCkgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICAgIG1lc3NhZ2VLaW5kID0gS0lORF9GQVVMVDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0S2luZCgpCi0gIHsKLQkgIGlmIChtZXNzYWdlS2luZCA9PSAtMSkKLQkgIHsKLQkJICBjb21wdXRlTWVzc2FnZUtpbmQoKTsKLQkgIH0KLQkgIHJldHVybiBtZXNzYWdlS2luZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotCSAgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCSAgaWYgKG1lc3NhZ2VSZWYuZ2V0TmFtZSgpICE9IG51bGwpIHsKLQkJICByZXR1cm4gbWVzc2FnZVJlZi5nZXROYW1lKCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UGFyYW1ldGVycygpCi0gIHsKLQkgIExpc3QgcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIExpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JICBpZiAobWVzc2FnZVJlZiAhPSBudWxsKSB7Ci0JCSAgaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkgIGlmIChtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkgIT0gbnVsbCkgewotCQkJCSAgcGFydHMgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCk7Ci0JCQkgIH0KLQkJICB9Ci0JICB9Ci0JICAKLQkgIHBvcHVsYXRlQWRhcHRlckxpc3QocGFydHMsIHBhcmFtZXRlcnMpOwotCSAgCi0JICBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMgdmlzaXRvckZvclBhcmFtZXRlcnMgPSBuZXcgV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzKCk7Ci0gICAgICB2aXNpdG9yRm9yUGFyYW1ldGVycy52aXNpdE1lc3NhZ2VSZWZlcmVuY2UobWVzc2FnZVJlZik7Ci0gICAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHZpc2l0b3JGb3JQYXJhbWV0ZXJzLmNvbmNyZXRlQ29tcG9uZW50cywgb3RoZXJUaGluZ3NUb0xpc3RlblRvKTsKLSAgICAgIHBvcHVsYXRlQWRhcHRlckxpc3QodmlzaXRvckZvclBhcmFtZXRlcnMudGhpbmdzVG9MaXN0ZW5Ubywgb3RoZXJUaGluZ3NUb0xpc3RlblRvKTsKLSAgICAgIAotICAgICAgLy8gbm93IHdlIGxpc3RlbiB0byBhbGwgdGhlICd0aGluZ3Mgd2UgbmVlZCB0byBsaXN0ZW4gdG8nCi0gICAgICAvLwotICAgICAgZm9yIChJdGVyYXRvciBpID0gb3RoZXJUaGluZ3NUb0xpc3RlblRvLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQWRhcHRlciBhZGFwdGVyID0gKEFkYXB0ZXIpIGkubmV4dCgpOwotICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICBJQVNET2JqZWN0IGFzZE9iamVjdCA9IChJQVNET2JqZWN0KSBhZGFwdGVyOwotICAgICAgICAgIGFzZE9iamVjdC5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0JICAKLQkgIHJldHVybiBwYXJhbWV0ZXJzOwotICAgIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpCi0gIHsKLSAgICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBvbmUgb2YgdGhlICdvdGhlclRoaW5nc1RvTGlzdGVuVG8nIGhhcyBjaGFuZ2VkCi0gICAgLy8gd2hlbiBvbmUgb2YgdGhlc2UgdGhpbmdzIGNoYW5nZXMgaXQgbWVhbnMgb3VyIHBhcmFtdGVyIGxpc3QgbWF5IGhhdmUgY2hhbmdlcwotICAgIC8vIHNvIHdlIG5lZWQgdG8gcmVjb21wdXRlIGl0Ci0vLyAgICBPYmplY3Qgbm90aWZpZXIgPSBudWxsOwotLy8gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXIpCi0vLyAgICB7Ci0vLyAgICAgIG5vdGlmaWVyID0gKChBZGFwdGVyKW9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0vLyAgICB9ICAKLS8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigic29tZXRoaW5nIGluIHRoZSAnb3RoZXJUaGluZ3NUb0xpc3RlblRvJyBsaXN0IGhhcyBjaGFuZ2VkICIgKyBub3RpZmllcik7ICAgIAotICAgIGNsZWFyUGFyYW1ldGVycygpOwotICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjbGVhclBhcmFtZXRlcnMoKQotICB7Ci0gICAgaWYgKG90aGVyVGhpbmdzVG9MaXN0ZW5UbyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG90aGVyVGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgSUFTRE9iamVjdCBhc2RPYmplY3QgPSAoSUFTRE9iamVjdCkgYWRhcHRlcjsKLSAgICAgICAgICBhc2RPYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHBhcmFtZXRlcnMgPSBudWxsOyAgICAKLSAgICBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBjbGVhclBhcmFtZXRlcnMoKTsgICAgCi0gICAgc3VwZXIubm90aWZ5Q2hhbmdlZChtc2cpOyAgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkKLSAgewotCSAgTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCSAgYWN0aW9ucy5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsJICAKLQkgIGFjdGlvbnMuYWRkQWxsKCgoVzExT3BlcmF0aW9uKSBnZXRPd25lck9wZXJhdGlvbigpKS5nZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkpOyAKLQkgIGFjdGlvbnMuYWRkKEFTREFkZEZhdWx0QWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKFcxMUFkZFBhcnRBY3Rpb24uSUQpOwotCSAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0JICBhY3Rpb25zLmFkZChXMTFTZXROZXdNZXNzYWdlQWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5JRCk7Ci0JICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLS8vICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLS8vICAgICAgYWN0aW9ucy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLS8vICAgIH0KLQotCSAgU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1thY3Rpb25zLnNpemUoKV07Ci0JICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYWN0aW9ucy5zaXplKCk7IGluZGV4KyspIHsKLQkJICBhY3Rpb25JRHNbaW5kZXhdID0gKFN0cmluZykgYWN0aW9ucy5nZXQoaW5kZXgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gYWN0aW9uSURzOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQoSVBhcmFtZXRlciBsZWZ0U2libGluZywgSVBhcmFtZXRlciByaWdodFNpYmxpbmcsIElQYXJhbWV0ZXIgbW92aW5nUGFyYW1ldGVyKSB7Ci0JICByZXR1cm4gbmV3IFcxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2libGluZywgcmlnaHRTaWJsaW5nLCBtb3ZpbmdQYXJhbWV0ZXIpOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRBZGRQYXJhbXRlckNvbW1hbmQoKSB7Ci0gICAgICBDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmVDb250YWluZXIoKTsKLSAgICAgIGlmIChnZXRLaW5kKCkgPT0gS0lORF9JTlBVVCkKLSAgICAgIHsgICAgCi0gICAgICAgIGNvbW1hbmQgPSBuZXcgVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbik7Ci0gICAgICB9ICAKLSAgICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX09VVFBVVCkKLSAgICAgIHsKLSAgICAgICAgY29tbWFuZCA9IG5ldyBXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbik7ICAgICAgICAKLSAgICAgIH0gCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNvbW1hbmQgPSBuZXcgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgKEZhdWx0KWdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7ICAgICAgICAKLSAgICAgIH0gCi0gICAgICByZXR1cm4gY29tbWFuZDsKLSAgfSAgCi0gIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkgICAgYm9vbGVhbiBpc1JpZ2h0VG9MZWZ0ID0gV1NETEVkaXRvclV0aWwuaXNPcmllbnRhdGlvblJpZ2h0VG9MZWZ0KCk7Ci0JICAgIFN0cmluZyBpbWFnZVBhdGggPSBudWxsOwotCSAgICBpZiAoZ2V0S2luZCgpID09IEtJTkRfSU5QVVQpCi0JICAgIHsJICAgIAkKLQkgICAgICAgIGltYWdlUGF0aCA9IGlzUmlnaHRUb0xlZnQgPyAiaWNvbnMvaW5wdXRfb2JqX3J0bC5naWYiIDogImljb25zL2lucHV0X29iai5naWYiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgIAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX09VVFBVVCkKLQkgICAgewotCSAgICAgICAgaW1hZ2VQYXRoID0gaXNSaWdodFRvTGVmdCA/ICJpY29ucy9vdXRwdXRfb2JqX3J0bC5naWYiIDogImljb25zL291dHB1dF9vYmouZ2lmIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkICAKLQkgICAgfQotCSAgICBlbHNlIGlmIChnZXRLaW5kKCkgPT0gS0lORF9GQVVMVCkKLQkgICAgewotCSAgICAJaW1hZ2VQYXRoID0gImljb25zL2ZhdWx0X29iai5naWYiOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgICAgICAgICAKLQkgICAgV1NETEVkaXRvclBsdWdpbiBwbHVnaW4gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JICAgIEltYWdlIGltYWdlID0gaW1hZ2VQYXRoICE9IG51bGwgPyBwbHVnaW4uZ2V0SW1hZ2UoaW1hZ2VQYXRoKSA6IG51bGw7Ci0JICAgIHJldHVybiBpbWFnZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCSAgICBpZiAoZ2V0S2luZCgpID09IEtJTkRfSU5QVVQpCi0JICAgIHsKLQkgICAgICByZXR1cm4gImlucHV0IjsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX09VVFBVVCkKLQkgICAgewotCSAgICAgIHJldHVybiAib3V0cHV0IjsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX0ZBVUxUKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLQkgICAgfQotCSAgICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gICAgCi0JLyoKLQkgKiBAZGVwcmVjYXRlZC4gIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUuCi0JICogVXNlIGdldFNpbXBsaWZpZWRQYXJhbWV0ZXJzKCkuCi0JICovCi0JcHVibGljIExpc3QgZ2V0UGFyYW1ldGVyczIoKQotCXsKLQkJcmV0dXJuIGdldFNpbXBsaWZpZWREaWFnbm9zdGljTWVzc2FnZXMoKTsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0U2ltcGxpZmllZFBhcmFtZXRlcnMoKQotICAgIHsKLQkgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpCi0JICB7Ci0JICAgIHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIG90aGVyVGhpbmdzVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzIHZpc2l0b3JGb3JQYXJhbWV0ZXJzID0gbmV3IFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycygpOwotCSAgICB2aXNpdG9yRm9yUGFyYW1ldGVycy52aXNpdE1lc3NhZ2VSZWZlcmVuY2UoZ2V0TWVzc2FnZVJlZmVyZW5jZSgpKTsKLQkgICAgcG9wdWxhdGVBZGFwdGVyTGlzdCh2aXNpdG9yRm9yUGFyYW1ldGVycy5jb25jcmV0ZUNvbXBvbmVudHMsIHBhcmFtZXRlcnMpOwotCSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHZpc2l0b3JGb3JQYXJhbWV0ZXJzLnRoaW5nc1RvTGlzdGVuVG8sIG90aGVyVGhpbmdzVG9MaXN0ZW5Ubyk7Ci0KLQkgICAgLy8gbm93IHdlIGxpc3RlbiB0byBhbGwgdGhlICd0aGluZ3Mgd2UgbmVlZCB0byBsaXN0ZW4gdG8nCi0JICAgIC8vCi0JICAgIGZvciAoSXRlcmF0b3IgaSA9IG90aGVyVGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JICAgIHsKLQkgICAgICBBZGFwdGVyIGFkYXB0ZXIgPSAoQWRhcHRlcikgaS5uZXh0KCk7Ci0JICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotCSAgICAgIHsKLQkgICAgICAgIElBU0RPYmplY3QgYXNkT2JqZWN0ID0gKElBU0RPYmplY3QpIGFkYXB0ZXI7Ci0JICAgICAgICBhc2RPYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkgICAgICB9Ci0JICAgIH0gCi0JICB9Ci0KLQkgIHJldHVybiBwYXJhbWV0ZXJzOwotCX0gICAgCi0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotICAgICAgLyoKLQkJTGlzdCBwYXJ0cyA9IGdldFBhcmFtZXRlcnMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtwYXJ0cy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzLnNpemUoKTsgaW5kZXgrKykgewotCQkJdHJlZUVsZW1lbnRzW2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIHBhcnRzLmdldChpbmRleCk7Ci0JCX0KLQkJKi8KLQkJcmV0dXJuIElUcmVlRWxlbWVudC5FTVBUWV9MSVNUOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0FkdmFuY2VkVzExTWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSBnZXRUYXJnZXQoKTsKLQkJTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQlpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpICE9IG51bGwpIHsKLQkJCQlwYXJ0cyA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKTsKLQkJCX0KLQkJfQotCi0JCS8vIG1lc3NhZ2VSZWYgY2FuIG5vdCBiZSBudWxsLCBnaXZlbiBhYm92ZQotCQlpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpID09IG51bGwpIHsKLQkJCWFkZEVycm9yRGlhZ25vc3RpY01lc3NhZ2UoZ2V0VW5kZWZpbmVkQXJnMVN0cmluZygibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKHBhcnRzLnNpemUoKSA8PSAwKSB7Ci0JCQlTdHJpbmdbXSBhcmdzID0gbmV3IFN0cmluZ1sxXTsKLQkJCWFyZ3NbMF0gPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQkJCWFkZFdhcm5pbmdEaWFnbm9zdGljTWVzc2FnZShnZXROb09iamVjdFNwZWNpZmllZEFyZ3NTdHJpbmcoYXJncykpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NTaW1wbGlmaWVkVzExTWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGdldFRhcmdldCgpOwotCQkgIGlmIChtZXNzYWdlUmVmID09IG51bGwgfHwgbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpID09IG51bGwpIHsKLQkJCSAgYWRkRXJyb3JEaWFnbm9zdGljTWVzc2FnZShnZXRVbmRlZmluZWRBcmcxU3RyaW5nKCJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkCi0JCSAgfQotCQkgIGVsc2UgaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5zaXplKCkgPD0gMCkgewotCQkJICBhZGRXYXJuaW5nRGlhZ25vc3RpY01lc3NhZ2UoZ2V0Tm9QYXJhbWV0ZXJzU3BlY2lmaWVkU3RyaW5nKCkpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgUGFydCBwYXJ0ID0gKFBhcnQpIG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5nZXQoMCk7Ci0JCQkgIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCSAgaWYgKHhzZEVsZW1lbnQgPT0gbnVsbCB8fCB4c2RFbGVtZW50LmdldFNjaGVtYSgpID09IG51bGwpIHsKLQkJCQkgIC8vIE5vIFhTRCBFbGVtZW50Ci0JCQkJICBhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoImVsZW1lbnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQkgIE15SW5uZXJFbGVtZW50VmlzaXRvciB2aXNpdG9yID0gbmV3IE15SW5uZXJFbGVtZW50VmlzaXRvcigpOwotCQkJCSAgdmlzaXRvci5maW5kRXJyb3JzQW5kV2FybmluZ3MoeHNkRWxlbWVudCk7Ci0JCQkJICBkaWFnbm9zdGljTWVzc2FnZXMuYWRkQWxsKHZpc2l0b3IuZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkpOwotCQkJICB9Ci0JCSAgfQotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKFN0cmluZyB0eHQpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzLmFkZChuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyh0eHQsIE1vZGVsRGlhZ25vc3RpY0luZm8uRVJST1JfVFlQRSwgbnVsbCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYWRkV2FybmluZ0RpYWdub3N0aWNNZXNzYWdlKFN0cmluZyB0eHQpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzLmFkZChuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyh0eHQsIE1vZGVsRGlhZ25vc3RpY0luZm8uV0FSTklOR19UWVBFLCBudWxsKSk7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIExpc3QgZGlhZ25vc3RpY01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlwcm9jZXNzQWR2YW5jZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCXJldHVybiBkaWFnbm9zdGljTWVzc2FnZXM7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0U2ltcGxpZmllZERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQkJcHJvY2Vzc1NpbXBsaWZpZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCXJldHVybiBkaWFnbm9zdGljTWVzc2FnZXM7Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgTXlJbm5lckVsZW1lbnRWaXNpdG9yIGV4dGVuZHMgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgewotCQlwcml2YXRlIExpc3QgZGlhZ01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJcHVibGljIHZvaWQgZmluZEVycm9yc0FuZFdhcm5pbmdzKFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50KSB7Ci0JCQlpZiAoeHNkRWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpID09IG51bGwgfHwgeHNkRWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpLmdldFNjaGVtYSgpID09IG51bGwpIHsKLQkJCQkvLyBObyBYU0QgdHlwZSAobm9uIGFub255bW91cykgZGVmaW5lZAotCQkJCWRpYWdNZXNzYWdlcy5hZGQobmV3IE1vZGVsRGlhZ25vc3RpY0luZm8oZ2V0VW5kZWZpbmVkQXJnMVN0cmluZygidHlwZSIpLCBNb2RlbERpYWdub3N0aWNJbmZvLkVSUk9SX1RZUEUsIG51bGwpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gaW5uZXJFbGVtZW50ID0gc3VwZXIuZ2V0SW5uZXJYU0RFbGVtZW50KHhzZEVsZW1lbnQpOwotCQkJaWYgKGlubmVyRWxlbWVudC5lcXVhbHMoeHNkRWxlbWVudCkpIHsKLQkJCQlkaWFnTWVzc2FnZXMuYWRkKG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKGdldE5vUGFyYW1ldGVyc1NwZWNpZmllZFN0cmluZygpLCBNb2RlbERpYWdub3N0aWNJbmZvLldBUk5JTkdfVFlQRSwgbnVsbCkpOwotCQkJfQotCQl9Ci0JCQotCQlwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JCQlyZXR1cm4gZGlhZ01lc3NhZ2VzOwotCQl9Ci0JfQotCQotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Tm9PYmplY3RTcGVjaWZpZWRBcmdzU3RyaW5nKFN0cmluZ1tdIGFyZ3MpIHsJCSAgCi0JCSAgU3RyaW5nIHN0cmluZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9OT19PQkpFQ1RfU1BFQ0lGSUVEX0FSRzEsIGFyZ3MpOwotCQkgIFN0cmluZyBjdXN0b21pemVkTWVzc2FnZSA9IGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZSgiX1VJX0xBQkVMX05PX09CSkVDVF9TUEVDSUZJRURfQVJHMSIsIGFyZ3MpOyAvLyROT04tTkxTLTEkCi0JCSAgaWYgKGN1c3RvbWl6ZWRNZXNzYWdlICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRNZXNzYWdlLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCSAgc3RyaW5nID0gY3VzdG9taXplZE1lc3NhZ2U7Ci0JCSAgcmV0dXJuIHN0cmluZzsKLQkgIH0KLQkKLQkgIHByaXZhdGUgU3RyaW5nIGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoU3RyaW5nIGFyZykgewotCQkgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzFdOwotCQkgIGFyZ3NbMF0gPSBhcmc7CQkgIAotCQkgIFN0cmluZyBzdHJpbmcgPSBOTFMuYmluZChNZXNzYWdlcy5fVUlfTEFCRUxfVU5ERUZJTkVEX0FSRzEsIGFyZ3MpOwotCQkgIFN0cmluZyBjdXN0b21pemVkTWVzc2FnZSA9IGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZSgiX1VJX0xBQkVMX1VOREVGSU5FRF9BUkcxIiwgYXJncyk7IC8vJE5PTi1OTFMtMSQKLQkJICBpZiAoY3VzdG9taXplZE1lc3NhZ2UgIT0gbnVsbCAmJiAhY3VzdG9taXplZE1lc3NhZ2UuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJICBzdHJpbmcgPSBjdXN0b21pemVkTWVzc2FnZTsKLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCSAgCi0JICBwcml2YXRlIFN0cmluZyBnZXROb1BhcmFtZXRlcnNTcGVjaWZpZWRTdHJpbmcoKSB7Ci0JCSAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbMF07Ci0JCSAgU3RyaW5nIHN0cmluZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9OT19QQVJBTUVURVJTX1NQRUNJRklFRCwgYXJncyk7Ci0JCSAgU3RyaW5nIGN1c3RvbWl6ZWRNZXNzYWdlID0gZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKCJfVUlfTEFCRUxfTk9fUEFSQU1FVEVSU19TUEVDSUZJRUQiLCBhcmdzKTsgLy8kTk9OLU5MUy0xJAotCQkgIGlmIChjdXN0b21pemVkTWVzc2FnZSAhPSBudWxsICYmICFjdXN0b21pemVkTWVzc2FnZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkgIHN0cmluZyA9IGN1c3RvbWl6ZWRNZXNzYWdlOwotCQkgIHJldHVybiBzdHJpbmc7Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogUmV0dXJucyBhIGN1c3RvbWVkIHByb2R1Y3QtYmFzZWQgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleSBhbmQgYXJndW1lbnRzCi0JICAgKiBvciBudWxsIGlmIG5vbmUgZXhpc3RzLgotCSAgICogQHBhcmFtIGtleQotCSAgICogQHBhcmFtIGFyZ3MKLQkgICAqIEByZXR1cm4gU3RyaW5nIGN1c3RvbWl6ZWQgbWVzc2FnZSBvciBudWxsIGlmIG5vbmUgZXhpc3RzCi0JICAgKi8KLQkgIHByaXZhdGUgU3RyaW5nIGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZShTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzKSB7Ci0JCSAgU3RyaW5nIHByb2R1Y3RNZXNzYWdlID0gbnVsbDsKLQkJICAKLQkJICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKTsKLQkJICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcikgewotCQkJICBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCQkgIFN0cmluZyBjdXN0b21pemVkU3RyaW5nID0gbnVsbDsKLQkJCSAgaWYgKGFyZ3MgPT0gbnVsbCkgewotCQkJCSAgY3VzdG9taXplZFN0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXkpOwotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCSAgY3VzdG9taXplZFN0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXksIGFyZ3MpOwotCQkJICB9Ci0JCQkgIAotCQkJICBpZiAoY3VzdG9taXplZFN0cmluZyAhPSBudWxsICYmICFjdXN0b21pemVkU3RyaW5nLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCSAgcHJvZHVjdE1lc3NhZ2UgPSBjdXN0b21pemVkU3RyaW5nOwotCQkJICB9Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiBwcm9kdWN0TWVzc2FnZTsKLQkgIH0KLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOWE2ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuRGVmYXVsdEVkaXRvck1vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW5wdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE91dHB1dEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVyYXRpb24gZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJT3BlcmF0aW9uIHsKLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpCi0JewotCQlMaXN0IG1vZGVsQWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KGdldE9wZXJhdGlvbigpLmdldEVGYXVsdHMoKS5zaXplKCkgKyAyKTsKLQkJCi0JCUlucHV0IGlucHV0ID0gZ2V0T3BlcmF0aW9uKCkuZ2V0RUlucHV0KCk7Ci0JCU91dHB1dCBvdXRwdXQgPSBnZXRPcGVyYXRpb24oKS5nZXRFT3V0cHV0KCk7Ci0JCQotCQlPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBnZXRPcGVyYXRpb24oKS5nZXRTdHlsZSgpOwotCQlpZiAob3BlcmF0aW9uVHlwZSAhPSBudWxsKSB7Ci0JCQlpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSAmJiBpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gSW5wdXQsIE91dHB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIoaW5wdXQpKTsKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKG91dHB1dCkpOwotCQkJfQotCQkJZWxzZSBpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSAmJiBpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gT3V0cHV0LCBJbnB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihpbnB1dCkpOwotCQkJfQotCQkJZWxzZSBpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5PTkVfV0FZKSAmJiBpbnB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gSW5wdXQKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKGlucHV0KSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvcGVyYXRpb25UeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTikgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCQkvL091dHB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWZvciAoSXRlcmF0b3IgaSA9IGdldE9wZXJhdGlvbigpLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCXsKLQkJCUVPYmplY3QgbyA9IChFT2JqZWN0KSBpLm5leHQoKTsKLQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIobykpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsQWRhcHRlckxpc3Q7Ci0JfQotCQotCS8vIENvbnZpZW5lbmNlIG1ldGhvZAotCXB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLQl7Ci0JCXJldHVybiAoT3BlcmF0aW9uKSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpOwotCX0KLQkKLQlwdWJsaWMgSUludGVyZmFjZSBnZXRPd25lckludGVyZmFjZSgpCi0JewotCQlyZXR1cm4gKElJbnRlcmZhY2Upb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlhY3Rpb25zLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotCQlhY3Rpb25zLmFkZEFsbChnZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkpOwotCQlhY3Rpb25zLmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0JCWFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9ucy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0JCQotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nW2FjdGlvbnMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlhY3Rpb25JRHNbaW5kZXhdID0gKFN0cmluZykgYWN0aW9ucy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbnB1dENvbW1hbmQoKSB7Ci0JCVcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRPdXRwdXRDb21tYW5kKCkgewotCQlXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRGYXVsdENvbW1hbmQoT2JqZWN0IGZhdWx0KSB7Ci0JCVcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSwgbnVsbCk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKElNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ01lc3NhZ2VSZWYpIHsKLQkJcmV0dXJuIG5ldyBXMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKGxlZnRTaWJsaW5nLCByaWdodFNpYmxpbmcsIG1vdmluZ01lc3NhZ2VSZWYpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlpZiAoZ2V0T3BlcmF0aW9uKCkuZ2V0RUlucHV0KCkgPT0gbnVsbCkgewotCQkJbGlzdC5hZGQoQVNEQWRkSW5wdXRBY3Rpb24uSUQpOwotCQl9Ci0JCWlmIChnZXRPcGVyYXRpb24oKS5nZXRFT3V0cHV0KCkgPT0gbnVsbCkgewotCQkJbGlzdC5hZGQoQVNEQWRkT3V0cHV0QWN0aW9uLklEKTsKLQkJfQotCQkKLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvb3BlcmF0aW9uX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgbWVzc2FnZXMgPSBnZXRNZXNzYWdlcygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W21lc3NhZ2VzLnNpemUoKV07Ci0JCQotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbWVzc2FnZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgbWVzc2FnZXMuZ2V0KGluZGV4KTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50czsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjODIyOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3VHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLS8vaW1wb3J0IGNvbS5pYm0uY2NsLnNvYS5zZG8ud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5TRE9XMTFEZWxldGVDb21tYW5kOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSVBhcmFtZXRlciB7Ci0JCi0JcHJvdGVjdGVkIFhTREF0dHJpYnV0ZVVzZSBnZXRYU0RBdHRyaWJ1dGVVc2UoKSB7Ci0JCXJldHVybiAoWFNEQXR0cmlidXRlVXNlKSB0YXJnZXQ7Ci0JfQotCi0JcHJvdGVjdGVkIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGdldFhTREF0dHRyaWJ1dGVEZWNsYXJhdGlvbigpIHsKLQkJWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSBnZXRYU0RBdHRyaWJ1dGVVc2UoKTsKLQkJcmV0dXJuIGF0dHJVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsJCQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkgewotCQlyZXR1cm4gKElNZXNzYWdlUmVmZXJlbmNlKSBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpIHsKLQkJWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKTsKLQkJCi0JCWlmIChhdHRyRGVjbC5nZXRUeXBlKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIGF0dHJEZWNsLmdldFR5cGUoKS5nZXROYW1lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiAiZXJyb3I6IGNvdWxkIG5vdCBnZXQgdHlwZSBuYW1lIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKSB7Ci0gICAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZ2V0WFNEQXR0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRkICE9IG51bGwgPyB0ZC5nZXRUYXJnZXROYW1lc3BhY2UoKSA6IG51bGw7Ci0JfQotCQotCSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotICAgICAgICAgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAvL2xpc3QuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRJbnB1dEFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotICAgICAgICAgIC8vbGlzdC5hZGQoQVNEQWRkRmF1bHRBY3Rpb24uSUQpOwotICAgICAgICAgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0gICAgICAgICAgYWN0aW9ucy5hZGQoVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLklEKTsKLSAgICAgICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLQotICAgICAgICAgIGFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7ICAgIAotICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotICAgICAgICAgIGFjdGlvbnMudG9BcnJheShyZXN1bHQpOwotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kKHRoaXMpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgaWQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyU3RyaW5nKCJhdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRQYXJhbWV0ZXJTdHJpbmcoU3RyaW5nIHR4dCkgewotCQlTdHJpbmcgc3RyaW5nID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQlQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCQlTdHJpbmcgbmV3U3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKCJfVUlfTEFCRUxfUEFSQU1FVEVSX0FSRyIsIG5ldyBPYmplY3RbXXt0eHR9KTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkJc3RyaW5nID0gbmV3U3RyaW5nOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cmluZzsKLQl9Ci0JICAKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBuZXcgSVRyZWVFbGVtZW50WzBdOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNTQxNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW5hbWVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yRWxlbWVudCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElQYXJhbWV0ZXIKLXsKLSAgcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSB0YXJnZXQpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLQlTdHJpbmcgY29tcE5hbWUgPSAiIjsvLyArIE1lc3NhZ2VzLmdldFN0cmluZygiX1VJX0xBQkVMX05PX1RZUEVfU1BFQ0lGSUVEIikgKyAiKSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgWFNEVHlwZURlZmluaXRpb24gYW5vbnltb3VzVHlwZSA9IGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIAotICAgIGlmIChhbm9ueW1vdXNUeXBlICE9IG51bGwpIHsKLSAgICAgICAgY29tcE5hbWUgPSAiKiphbm9ueW1vdXMqKiI7ICAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcmV0dXJuICh0ZCAhPSBudWxsICYmIHRkLmdldE5hbWUoKSAhPSBudWxsKSA/IHRkLmdldE5hbWUoKSA6IGNvbXBOYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICByZXR1cm4gdGQgIT0gbnVsbCA/IHRkLmdldFRhcmdldE5hbWVzcGFjZSgpIDogbnVsbDsKLSAgIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIC8vbGlzdC5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsKLSAgICAgIC8vbGlzdC5hZGQoQVNEQWRkSW5wdXRBY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9UWVBFKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uSUQpOwotICAgICAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0gICAgIAotICAgICAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsJICAKLSAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotICAgICAgYWN0aW9ucy50b0FycmF5KHJlc3VsdCk7Ci0JICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgYWN0aW9uSWQpIHsKLQkgIHJldHVybiBuZXcgVzExU2V0VHlwZUNvbW1hbmQodGhpcy5nZXRUYXJnZXQoKSwgYWN0aW9uSWQpOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXROYW1lQ29tbWFuZChTdHJpbmcgbmV3TmFtZSkgeyAgICAKLSAgICByZXR1cm4gbmV3IFcxMVJlbmFtZUNvbW1hbmQodGhpcywgbmV3TmFtZSkgewotICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpKTsKLQkJCWdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLnNldE5hbWUobmV3TmFtZSk7Ci0gIAkJfQotICAJCWZpbmFsbHkgewotICAJCQllbmRSZWNvcmRpbmcoZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpKTsKLSAgCQl9Ci0gICAgICB9Ci0gICAgfTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkKLSAgewotCSAgcmV0dXJuIChJTWVzc2FnZVJlZmVyZW5jZSkgb3duZXI7Ci0gIH0KLSAgCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyU3RyaW5nKCJlbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JICBwcml2YXRlIFN0cmluZyBnZXRQYXJhbWV0ZXJTdHJpbmcoU3RyaW5nIHR4dCkgewotCQkgIFN0cmluZyBzdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIG5ld1N0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZygiX1VJX0xBQkVMX1BBUkFNRVRFUl9BUkciLCBuZXcgT2JqZWN0W117dHh0fSk7IC8vJE5PTi1OTFMtMSQKLQkJCSAgaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkJICBzdHJpbmcgPSBuZXdTdHJpbmc7Ci0JCQkgIH0KLQkJICB9Ci0KLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiYWUyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFBZGRQYXJ0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3RWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0RWxlbWVudENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0VHlwZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Nb2RlbERpYWdub3N0aWNJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLlByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yUGFydCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElQYXJhbWV0ZXIKLXsKLSAgcHJvdGVjdGVkIFBhcnQgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gKFBhcnQpIHRhcmdldDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UGFydCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBpZiAoZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgeyAgCi0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGdldE5vTmFtZVNwZWNpZmllZFN0cmluZygpOwotICAgIH0gIAotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXROb05hbWVTcGVjaWZpZWRTdHJpbmcoKSB7Ci0JICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZVF1YWxpZmllcigpCi0gIHsKLSAgICBpZiAoZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgeyAgCi0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgIAotICAgICAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB7Ci0JCSAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBnZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpOwotCi0JCSAgTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkgIGFjdGlvbnMuYWRkKFcxMUFkZFBhcnRBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGRBbGwoKChXMTFPcGVyYXRpb24pIG9wZXJhdGlvbikuZ2V0VmFsaWRJbnB1dE91dHB1QWN0aW9ucygpKTsKLQkJICBhY3Rpb25zLmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0JCSAgCi0JCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLQkJICBhY3Rpb25zLmFkZChXMTFTZXROZXdUeXBlQWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwotCi0JCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLQkJICBhY3Rpb25zLmFkZChXMTFTZXROZXdFbGVtZW50QWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwkJICAKLQkJICAKLQkJICBhY3Rpb25zLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgICAgCi0gICAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGFjdGlvbnMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgICB9Ci0JCSAgCi0JCSAgU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1thY3Rpb25zLnNpemUoKV07Ci0JCSAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkgIGFjdGlvbklEc1tpbmRleF0gPSAoU3RyaW5nKSBhY3Rpb25zLmdldChpbmRleCk7Ci0JCSAgfQotCSAgCi0JCSAgcmV0dXJuIGFjdGlvbklEczsKLQkgIH0KLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgewotCQkgIFN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMl07Ci0JCSAgYWN0aW9uSURzWzBdID0gVzExQWRkUGFydEFjdGlvbi5JRDsKLQkJICBhY3Rpb25JRHNbMV0gPSBBU0REZWxldGVBY3Rpb24uSUQ7Ci0JCSAgCi0JCSAgcmV0dXJuIGFjdGlvbklEczsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkKLSAgewotCSAgcmV0dXJuIG93bmVyOwotICB9Ci0gIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcGFydF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gICAgCi0gICAgcHVibGljIEltYWdlIGdldFNlY29uZGFyeUltYWdlKCkgewotICAgICAgCi0gICAgICBpZiAoZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvZWxlbWVudF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgeyAgCi0gICAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvY29tcGxleHR5cGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2ltcGxldHlwZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAKLSAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcGFydF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0gIAotICAgIH0gICAgCi0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInBhcnQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldFR5cGVDb21tYW5kKFN0cmluZyBhY3Rpb25JZCkgewotCQlyZXR1cm4gbmV3IFcxMVNldFR5cGVDb21tYW5kKChQYXJ0KSB0aGlzLmdldFRhcmdldCgpLCBhY3Rpb25JZCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEVsZW1lbnRDb21tYW5kKFN0cmluZyBhY3Rpb25JZCkgewotCQlyZXR1cm4gbmV3IFcxMVNldEVsZW1lbnRDb21tYW5kKChQYXJ0KSB0aGlzLmdldFRhcmdldCgpLCBhY3Rpb25JZCk7Ci0JfQotCQotCS8vIFRPRE86IFdlIHNob3VsZCBtb3ZlIHRoZSBpc1R5cGUoKSBtZXRob2QgdG8gdGhlIElQYXJhbWV0ZXIgSW50ZXJmYWNlLi4uLi4uLi4KLQlwdWJsaWMgYm9vbGVhbiBpc1R5cGUoKSB7Ci0JCVBhcnQgcGFydCA9IChQYXJ0KSB0YXJnZXQ7Ci0JCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JCUxpc3QgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCQlQYXJ0IHBhcnQgPSAoUGFydCkgZ2V0VGFyZ2V0KCk7Ci0JCWlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpID09IG51bGwgJiYgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpID09IG51bGwpIHsKLQkJCVN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzJdOwotCQkJYXJnc1swXSA9ICJlbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCQkJYXJnc1sxXSA9ICJ0eXBlIjsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQlTdHJpbmcgc3RyaW5nID0gTkxTLmJpbmQoTWVzc2FnZXMuX1VJX0xBQkVMX09SX1VOREVGSU5FRF9BUkcyLCBhcmdzKTsKLQkJCVN0cmluZyBjdXN0b21pemVkTWVzc2FnZSA9IGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZSgiX1VJX0xBQkVMX09SX1VOREVGSU5FRF9BUkcyIiwgYXJncyk7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChjdXN0b21pemVkTWVzc2FnZSAhPSBudWxsICYmICFjdXN0b21pemVkTWVzc2FnZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJc3RyaW5nID0gY3VzdG9taXplZE1lc3NhZ2U7Ci0JCQkKLQkJCU1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKHN0cmluZywgTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFLCBudWxsKTsKLQkJCWVycm9ycy5hZGQoaW5mbyk7Ci0JCX0KLQkJCi0JCXJldHVybiBlcnJvcnM7Ci0JfQotCQotCSAgLyoqCi0JICAgKiBSZXR1cm5zIGEgY3VzdG9tZWQgcHJvZHVjdC1iYXNlZCBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBhcmd1bWVudHMKLQkgICAqIG9yIG51bGwgaWYgbm9uZSBleGlzdHMuCi0JICAgKiBAcGFyYW0ga2V5Ci0JICAgKiBAcGFyYW0gYXJncwotCSAgICogQHJldHVybiBTdHJpbmcgY3VzdG9taXplZCBtZXNzYWdlIG9yIG51bGwgaWYgbm9uZSBleGlzdHMKLQkgICAqLwotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkJICBTdHJpbmcgcHJvZHVjdE1lc3NhZ2UgPSBudWxsOwotCQkgIAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIGN1c3RvbWl6ZWRTdHJpbmcgPSBudWxsOwotCQkJICBpZiAoYXJncyA9PSBudWxsKSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSk7Ci0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSwgYXJncyk7Ci0JCQkgIH0KLQkJCSAgCi0JCQkgIGlmIChjdXN0b21pemVkU3RyaW5nICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRTdHJpbmcuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJICBwcm9kdWN0TWVzc2FnZSA9IGN1c3RvbWl6ZWRTdHJpbmc7Ci0JCQkgIH0KLQkJICB9Ci0KLQkJICByZXR1cm4gcHJvZHVjdE1lc3NhZ2U7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmUwYTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEVuZFBvaW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuRW5kUG9pbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgVzExU2VydmljZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElTZXJ2aWNlIHsKLQotCXB1YmxpYyBMaXN0IGdldEVuZFBvaW50cygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGlzdCBlbmRQb2ludHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUl0ZXJhdG9yIGl0ID0gKChTZXJ2aWNlKSB0YXJnZXQpLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWVuZFBvaW50cy5hZGQoaXQubmV4dCgpKTsKLQkJfQotCi0JCXBvcHVsYXRlQWRhcHRlckxpc3QoZW5kUG9pbnRzLCBhZGFwdGVyTGlzdCk7Ci0JCUNvbGxlY3Rpb25zLnNvcnQoYWRhcHRlckxpc3QsIG5ldyBFbmRQb2ludENvbXBhcmF0b3IoKSk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuICgoU2VydmljZSkgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRGaWVsZHMoKSB7Ci0JCXJldHVybiBnZXRFbmRQb2ludHMoKTsKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYWN0aW9uSURzLmFkZChBU0RBZGRFbmRQb2ludEFjdGlvbi5JRCk7Ci0JCWFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLQotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotICAgIAotICAgIHB1YmxpYyBDb21tYW5kIGdldEFkZEVuZFBvaW50Q29tbWFuZCgpIHsKLSAgICAgIHJldHVybiBuZXcgVzExQWRkRW5kUG9pbnRDb21tYW5kKChTZXJ2aWNlKXRhcmdldCk7Ci0gICAgfQotICAgIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2VydmljZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBlbmRQb2ludHMgPSBnZXRFbmRQb2ludHMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtlbmRQb2ludHMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbmRQb2ludHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgZW5kUG9pbnRzLmdldChpbmRleCk7Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMGRkZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRE9wZW5TY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFcxMVR5cGUgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJVHlwZSB7Ci0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlYU0RTY2hlbWEgc2NoZW1hPSAoWFNEU2NoZW1hKSB0YXJnZXQ7Ci0JCXJldHVybiBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1syXTsKLQkJYWN0aW9uSURzWzBdID0gQVNET3BlblNjaGVtYUFjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzFdID0gQVNERGVsZXRlQWN0aW9uLklEOwkKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy94c2Rfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJzY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg1NDE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFUeXBlc0NhdGVnb3J5QWRhcHRlciBleHRlbmRzIFcxMUNhdGVnb3J5QWRhcHRlciB7Ci0JcHVibGljIFcxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgU3RyaW5nIGxhYmVsLCBJbWFnZSBpbWFnZSwgaW50IGdyb3VwVHlwZSkgewotCQlzdXBlcihkZXNjcmlwdGlvbiwgbGFiZWwsaW1hZ2UsIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QsIGdyb3VwVHlwZSk7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IHR5cGVzID0gKChXMTFEZXNjcmlwdGlvbikgZ2V0T3duZXJEZXNjcmlwdGlvbigpKS5nZXRUeXBlcygpOwotCQlyZXR1cm4gKElUcmVlRWxlbWVudFtdKSB0eXBlcy50b0FycmF5KG5ldyBJVHJlZUVsZW1lbnRbMF0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1ZDU2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFN0cmluZyBuZXdOYW1lOwotCXByaXZhdGUgQmluZGluZyBuZXdCaW5kaW5nOwotCQotCXB1YmxpYyBXMTFBZGRCaW5kaW5nQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9CSU5ESU5HLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TmV3QmluZGluZ05hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0JCi0JcHVibGljIEJpbmRpbmcgZ2V0TmV3QmluZGluZygpIHsKLQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZGVmaW5pdGlvbiwgIk5ld0JpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJCi0JCQlBZGRCaW5kaW5nQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZEJpbmRpbmdDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCQotCQkJbmV3QmluZGluZyA9IChCaW5kaW5nKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQlmb3JtYXRDaGlsZChuZXdCaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRW5kUG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NGUzNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuUG9ydFdpemFyZDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEVuZFBvaW50Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZAotewotICAgIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICAgIHByaXZhdGUgUG9ydCBwb3J0OwotICAgIAotICAgIHB1YmxpYyBXMTFBZGRFbmRQb2ludENvbW1hbmQoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQURELCBzZXJ2aWNlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQkKLQkgICAgCVBvcnRXaXphcmQgd2l6YXJkID0gbmV3IFBvcnRXaXphcmQoc2VydmljZSk7Ci0JCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpLCB3aXphcmQpOwotCQkJd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCi0JCQlpbnQgcmVzdWx0ID0gd2l6YXJkRGlhbG9nLm9wZW4oKTsKLQkJCWlmIChyZXN1bHQgPT0gV2luZG93Lk9LICYmIHNlcnZpY2UuZ2V0RVBvcnRzKCkuc2l6ZSgpID4gMCkgewotCQkJCUxpc3QgcG9ydHMgPSBzZXJ2aWNlLmdldEVQb3J0cygpOwotCQkJCXBvcnQgPSAoUG9ydCkgcG9ydHMuZ2V0KHBvcnRzLnNpemUoKSAtIDEpOwotCQkJCQotCQkJCWZvcm1hdENoaWxkKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLSAgICB9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBwb3J0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDVjZTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJvdGVjdGVkIEZhdWx0IGZhdWx0OwotCXByb3RlY3RlZCBPYmplY3QgbmV3T2JqZWN0OwotCXByaXZhdGUgaW50IHBhcmFtZXRlclBhdHRlcm4gPSAtMTsKLQkKLQlwdWJsaWMgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IGZhdWx0KSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0ZBVUxULCBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0JCXRoaXMuZmF1bHQgPSBmYXVsdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyUGF0dGVybihpbnQgcGF0dGVybikgewotCQlwYXJhbWV0ZXJQYXR0ZXJuID0gcGF0dGVybjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCS8vIERldGVybWluZSB3aGljaCBQYXR0ZXJuIHdlIHNob3VsZCB1c2UuICBGb3IgZXhhbXBsZSwgQUREQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UCi0JCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuRm9yRmF1bHQob3BlcmF0aW9uLCBmYXVsdCk7Ci0JCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIGZhdWx0KTsKLQkJCWNvbW1hbmQuc2V0U3R5bGUocGFyYW1ldGVyUGF0dGVybik7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJZmF1bHQgPSAoRmF1bHQpIGNvbW1hbmQuZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCQkJbmV3T2JqZWN0ID0gY29tbWFuZC5nZXROZXdseUFkZGVkQ29tcG9uZW50UGFydCgpOwotCQkJCi0JCQlpZiAoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gVHJ5IHRvIGdyYWIgdGhlICJpbm5lciIgWFNERWxlbWVudAotCQkJCW5ld09iamVjdCA9IGdldE5ld1hTREVsZW1lbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gbmV3T2JqZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW1wb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODM1OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbXBvcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkSW1wb3J0Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPYmplY3QgY29tcG9uZW50OwotCQotCXB1YmxpYyBXMTFBZGRJbXBvcnRDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlTdHJpbmcgbmFtZXNwYWNlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBsb2NhdGlvbiA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlBZGRJbXBvcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkSW1wb3J0Q29tbWFuZChkZWZpbml0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlmb3JtYXRDaGlsZChjb21tYW5kLmdldFdTRExFbGVtZW50KCkuZ2V0RWxlbWVudCgpKTsKLQkJCWNvbXBvbmVudCA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gY29tcG9uZW50OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0M2MyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kewotCXByb3RlY3RlZCBPcGVyYXRpb24gb3BlcmF0aW9uOwotCXByaXZhdGUgT2JqZWN0IGlucHV0OwotCXByaXZhdGUgaW50IHBhcmFtZXRlclBhdHRlcm4gPSAtMTsKLQkKLQlwdWJsaWMgVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfSU5QVVQsIG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyUGF0dGVybihpbnQgcGF0dGVybikgewotCQlwYXJhbWV0ZXJQYXR0ZXJuID0gcGF0dGVybjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCS8vIERldGVybWluZSB3aGljaCBQYXR0ZXJuIHdlIHNob3VsZCB1c2UuICBGb3IgZXhhbXBsZSwgQUREQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UCi0JCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uLCB0cnVlKTsKLQkJCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24pOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgcGFyYW1ldGVyUGF0dGVybik7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJaW5wdXQgPSBjb21tYW5kLmdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCk7Ci0JCQkKLQkJCWZvcm1hdENoaWxkKG9wZXJhdGlvbi5nZXRFSW5wdXQoKS5nZXRFbGVtZW50KCkpOwotCQkJaWYgKGNvbW1hbmQuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCS8vIFRyeSB0byBncmFiIHRoZSAiaW5uZXIiIFhTREVsZW1lbnQKLQkJCQlpbnB1dCA9IGdldE5ld1hTREVsZW1lbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0JCQkJZm9ybWF0Q2hpbGQoZ2V0WFNEUGFyZW50KGNvbW1hbmQuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIFhTRENvbmNyZXRlQ29tcG9uZW50IGdldFhTRFBhcmVudChYU0RDb25jcmV0ZUNvbXBvbmVudCB4c2QpIHsKLQkJWFNEQ29uY3JldGVDb21wb25lbnQgcGFyZW50ID0geHNkLmdldFNjaGVtYSgpOwotCQlyZXR1cm4gcGFyZW50OwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBpbnB1dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEludGVyZmFjZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW50ZXJmYWNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2VmN2QwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW50ZXJmYWNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFBvcnRUeXBlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkSW50ZXJmYWNlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBTdHJpbmcgbmV3TmFtZTsKLQlwcml2YXRlIFBvcnRUeXBlIG5ld1BvcnRUeXBlOwotCQotCXB1YmxpYyBXMTFBZGRJbnRlcmZhY2VDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1BPUlRUWVBFLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TmV3UG9ydFR5cGVOYW1lKFN0cmluZyBuZXdOYW1lKSB7Ci0JCXRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0JfQotCQotCXB1YmxpYyBQb3J0VHlwZSBnZXROZXdQb3J0VHlwZSgpIHsKLQkJcmV0dXJuIG5ld1BvcnRUeXBlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJc3VwZXIuZXhlY3V0ZSgpOwotCQkJaWYgKG5ld05hbWUgPT0gbnVsbCB8fCBuZXdOYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCW5ld05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnRUeXBlTmFtZShkZWZpbml0aW9uLCAiTmV3UG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJLy8gQWRkIHRoZSBQb3J0IFR5cGUKLQkJCUFkZFBvcnRUeXBlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFBvcnRUeXBlQ29tbWFuZChkZWZpbml0aW9uLCBuZXdOYW1lLCBmYWxzZSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJCi0JCQluZXdQb3J0VHlwZSA9IChQb3J0VHlwZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJCi0JCQkvLyBBZGQgdGhlIE9wZXJhdGlvbgotCQkJSUludGVyZmFjZSBpSW50ZXJmYWNlID0gKElJbnRlcmZhY2UpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG5ld1BvcnRUeXBlKTsKLQkJCUNvbW1hbmQgYWRkT3BlcmF0aW9uQ29tbWFuZCA9IGlJbnRlcmZhY2UuZ2V0QWRkT3BlcmF0aW9uQ29tbWFuZCgpOwotCQkJYWRkT3BlcmF0aW9uQ29tbWFuZC5leGVjdXRlKCk7Ci0JCQlmb3JtYXRDaGlsZChuZXdQb3J0VHlwZS5nZXRFbGVtZW50KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBuZXdQb3J0VHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE1lc3NhZ2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE1lc3NhZ2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ODQ0ZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRNZXNzYWdlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRNZXNzYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkTWVzc2FnZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotICAgIHByaXZhdGUgU3RyaW5nIG5ld05hbWU7Ci0gICAgcHJpdmF0ZSBNZXNzYWdlIG1lc3NhZ2U7Ci0JCi0gICAgcHVibGljIFcxMUFkZE1lc3NhZ2VDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9NRVNTQUdFLCBkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0TmV3TWVzc2FnZU5hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0KLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotICAgIAl0cnkgewotICAgIAkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotICAgIAkJc3VwZXIuZXhlY3V0ZSgpOwotCQkJaWYgKG5ld05hbWUgPT0gbnVsbCB8fCBuZXdOYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCW5ld05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sICJOZXdNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkKLQkgICAgCUFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQoZGVmaW5pdGlvbiwgbmV3TmFtZSwgdHJ1ZSk7Ci0JICAgICAgICBjb21tYW5kLnJ1bigpOwotCSAgICAgICAgbWVzc2FnZSA9IChNZXNzYWdlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JICAgICAgICBmb3JtYXRDaGlsZChtZXNzYWdlLmdldEVsZW1lbnQoKSk7Ci0gICAgCX0KLSAgICAJZmluYWxseSB7Ci0gICAgCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotICAgIAl9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBNZXNzYWdlIGdldE5ld01lc3NhZ2UoKSB7Ci0gICAgCXJldHVybiBtZXNzYWdlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0gICAgCXJldHVybiBtZXNzYWdlOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE9wZXJhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWUwYWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE9wZXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRPcGVyYXRpb25Db21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFBvcnRUeXBlIHBvcnRUeXBlOwotCXByaXZhdGUgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLQkKLQlwdWJsaWMgVzExQWRkT3BlcmF0aW9uQ29tbWFuZChQb3J0VHlwZSBwb3J0VHlwZSkgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9PUEVSQVRJT04sIHBvcnRUeXBlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMucG9ydFR5cGUgPSBwb3J0VHlwZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKHBvcnRUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCQkKLQkJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuZ2V0T3BlcmF0aW9uTmFtZShwb3J0VHlwZSk7Ci0JCQlBZGRPcGVyYXRpb25Db21tYW5kIG9wZXJhdGlvbkNvbW1hbmQgPSBuZXcgQWRkT3BlcmF0aW9uQ29tbWFuZChwb3J0VHlwZSwgbmFtZSk7Ci0JCQlvcGVyYXRpb25Db21tYW5kLnJ1bigpOwotCQkJb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb3BlcmF0aW9uQ29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQotCQkJY3JlYXRlTWVzc2FnZShvcGVyYXRpb24sIElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpOwotCQkJY3JlYXRlTWVzc2FnZShvcGVyYXRpb24sIElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKTsKLQkKLQkJCWNyZWF0ZVBhcmFtZXRlcihvcGVyYXRpb24sIG51bGwsIElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpOwotCQkJY3JlYXRlUGFyYW1ldGVyKG9wZXJhdGlvbiwgbnVsbCwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpOwotCQotCQkJb3BlcmF0aW9uLnNldFN0eWxlKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSk7Ci0JCQlmb3JtYXRDaGlsZChvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhwb3J0VHlwZS5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG9wZXJhdGlvbjsKLQl9Ci0JCi0JcHJpdmF0ZSBNZXNzYWdlUmVmZXJlbmNlIGNyZWF0ZU1lc3NhZ2UoT3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IG1lc3NhZ2VLaW5kKSB7Ci0JCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IG51bGw7Ci0JCUFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kIG1lc3NhZ2VSZWZDb21tYW5kID0gbnVsbDsKLQkgICAgaWYgKG1lc3NhZ2VLaW5kID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpCi0JICAgIHsKLQkgICAgCW1lc3NhZ2VSZWZDb21tYW5kID0gbmV3IEFkZElucHV0Q29tbWFuZChvcGVyYXRpb24sIG51bGwpOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKG1lc3NhZ2VLaW5kID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKQotCSAgICB7Ci0JICAgIAltZXNzYWdlUmVmQ29tbWFuZCA9IG5ldyBBZGRPdXRwdXRDb21tYW5kKG9wZXJhdGlvbiwgbnVsbCk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAobWVzc2FnZUtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9GQVVMVCkKLQkgICAgewotCSAgICAJbWVzc2FnZVJlZkNvbW1hbmQgPSBuZXcgQWRkRmF1bHRDb21tYW5kKG9wZXJhdGlvbiwgTmFtZVV0aWwuZ2V0RmF1bHROYW1lKG9wZXJhdGlvbikpOwotCSAgICB9Ci0JICAgIG1lc3NhZ2VSZWZDb21tYW5kLnJ1bigpOwotCSAgICBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpIG1lc3NhZ2VSZWZDb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JICAgIAotLy8JICAgIEFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQobWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIE5hbWVVdGlsLmdldE1lc3NhZ2VOYW1lKG1lc3NhZ2VSZWYpKTsKLS8vCSAgICBjb21tYW5kLnJ1bigpOwotLy8JICAgIG1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSk7Ci0JICAgIAotCSAgICByZXR1cm4gbWVzc2FnZVJlZjsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVBhcmFtZXRlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBQYXJ0IHBhcnQsIGludCBraW5kKSB7Ci0JCSAgSVBhcmFtZXRlciBwYXJhbWV0ZXIgPSBudWxsOwotCQkgIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kIGFkZFBhcmFtZXRlckNvbW1hbmQgPSBudWxsOwotCQkgIAotCQkgIGlmIChraW5kID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpIHsKLQkJCSAgaW50IHBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKHBvcnRUeXBlLCB0cnVlKTsKLQkJCSAgaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkgIHBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0JCQkgIH0KLQkJCSAgYWRkUGFyYW1ldGVyQ29tbWFuZCA9IG5ldyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBwYXJhbWV0ZXJQYXR0ZXJuLCB0cnVlKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAoa2luZCA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCQkJICBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ocG9ydFR5cGUsIGZhbHNlKTsKLQkJCSAgaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkgIHBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0JCQkgIH0JCQkgIAotCQkJICBhZGRQYXJhbWV0ZXJDb21tYW5kID0gbmV3IEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBwYXJhbWV0ZXJQYXR0ZXJuKTsKLQkJICB9Ci0JCSAgCi0JCSAgaWYgKHBhcmFtZXRlciA9PSBudWxsICYmIGFkZFBhcmFtZXRlckNvbW1hbmQgIT0gbnVsbCkgewotCQkJICBhZGRQYXJhbWV0ZXJDb21tYW5kLnJ1bigpOwotCQkgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYThkMWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIFcxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByb3RlY3RlZCBPcGVyYXRpb24gb3BlcmF0aW9uOwotCXByaXZhdGUgT2JqZWN0IG91dHB1dDsKLQlwcml2YXRlIGludCBwYXJhbWV0ZXJQYXR0ZXJuID0gLTE7Ci0JCi0JcHVibGljIFcxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9PVVRQVVQsIG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyUGF0dGVybihpbnQgcGF0dGVybikgewotCQlwYXJhbWV0ZXJQYXR0ZXJuID0gcGF0dGVybjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCS8vIERldGVybWluZSB3aGljaCBQYXR0ZXJuIHdlIHNob3VsZCB1c2UuICBGb3IgZXhhbXBsZSwgQUREQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UCi0JCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uLCBmYWxzZSk7Ci0JCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgcGFyYW1ldGVyUGF0dGVybik7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJb3V0cHV0ID0gY29tbWFuZC5nZXROZXdseUFkZGVkQ29tcG9uZW50UGFydCgpOwotCQkJCi0JCQlmb3JtYXRDaGlsZChvcGVyYXRpb24uZ2V0RU91dHB1dCgpLmdldEVsZW1lbnQoKSk7Ci0JCQlpZiAoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gVHJ5IHRvIGdyYWIgdGhlICJpbm5lciIgWFNERWxlbWVudAotCQkJCW91dHB1dCA9IGdldE5ld1hTREVsZW1lbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0JCQkJZm9ybWF0Q2hpbGQoZ2V0WFNEUGFyZW50KGNvbW1hbmQuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIFhTRENvbmNyZXRlQ29tcG9uZW50IGdldFhTRFBhcmVudChYU0RDb25jcmV0ZUNvbXBvbmVudCB4c2QpIHsKLQkJWFNEQ29uY3JldGVDb21wb25lbnQgcGFyZW50ID0geHNkOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHsKLQkJCVhTRENvbmNyZXRlQ29tcG9uZW50IHByZXZpb3VzID0gcGFyZW50OwotCQkJcGFyZW50ID0gcGFyZW50LmdldENvbnRhaW5lcigpOwotCQkJaWYgKHBhcmVudCA9PSBudWxsKSB7Ci0JCQkJcGFyZW50ID0gcHJldmlvdXM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG91dHB1dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFBhcnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFBhcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MDRjZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRQYXJ0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFBhcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRQYXJ0Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0gICAgcHJpdmF0ZSBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgcHJpdmF0ZSBQYXJ0IHBhcnQ7Ci0gICAgCi0gICAgcHVibGljIFcxMUFkZFBhcnRDb21tYW5kKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QQVJULCBtZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0gICAgCXRyeSB7Ci0gICAgCQliZWdpblJlY29yZGluZyhtZXNzYWdlLmdldEVsZW1lbnQoKSk7Ci0KLQkgICAgCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgTmFtZVV0aWwuYnVpbGRVbmlxdWVQYXJ0TmFtZShtZXNzYWdlLCAiTmV3UGFydCIpKTsgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgY29tbWFuZC5ydW4oKTsKLQkgICAgICAgIHBhcnQgPSAoUGFydCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCSAgICAgICAgZm9ybWF0Q2hpbGQocGFydC5nZXRFbGVtZW50KCkpOwotICAgIAl9Ci0gICAgCWZpbmFsbHkgewotICAgIAkJZW5kUmVjb3JkaW5nKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLSAgICAJfQotICAgIH0KLSAgICAKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBwYXJ0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkU2NoZW1hQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTY2hlbWFDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MjYzMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTY2hlbWFDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTRFNjaGVtYUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZFNjaGVtYUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByaXZhdGUgT2JqZWN0IHNjaGVtYTsKLQkKLQlwdWJsaWMgVzExQWRkU2NoZW1hQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9TQ0hFTUEsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJc3VwZXIuZXhlY3V0ZSgpOwotICAgIAotCQkJU3RyaW5nIHRucyA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQlMaXN0IGV4aXN0aW5nTmFtZXNwYWNlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLQkKLQkJCWlmICh0eXBlcyAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgZWVJdCA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChlZUl0Lmhhc05leHQoKSkgewotCQkJCQlPYmplY3QgaXRlbSA9IGVlSXQubmV4dCgpOwotCQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB7Ci0JCQkJCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZW07Ci0JCQkJCQlpZiAoZWVFbGVtZW50LmdldFNjaGVtYSgpICE9IG51bGwpIHsKLQkJCQkJCQlTdHJpbmcgbnMgPSBlZUVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkJCQkJZXhpc3RpbmdOYW1lc3BhY2VzLmFkZChucyk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IAotCQkJfQotCQkJdG5zID0gTmFtZVV0aWwuZ2V0VW5pcXVlTmFtZUhlbHBlcih0bnMsIGV4aXN0aW5nTmFtZXNwYWNlcyk7Ci0JCQkKLQkJCUFkZFhTRFNjaGVtYUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RTY2hlbWFDb21tYW5kKGRlZmluaXRpb24sIHRucyk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJZm9ybWF0Q2hpbGQoY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpLmdldEVsZW1lbnQoKSk7Ci0JCQlzY2hlbWEgPSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIHNjaGVtYTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTZXJ2aWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTZXJ2aWNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWNlMzI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkU2VydmljZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLlBvcnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkU2VydmljZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5DcmVhdGVXU0RMRWxlbWVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuU2VydmljZVBvbGljeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMUFkZFNlcnZpY2VDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFNlcnZpY2Ugc2VydmljZTsKLQkKLQlwdWJsaWMgVzExQWRkU2VydmljZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9TRVJWSUNFLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCVN0cmluZyBuZXdOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVTZXJ2aWNlTmFtZShkZWZpbml0aW9uKTsKLQkJCUFkZFNlcnZpY2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkU2VydmljZUNvbW1hbmQoZGVmaW5pdGlvbiwgbmV3TmFtZSwgZmFsc2UpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCXNlcnZpY2UgPSAoU2VydmljZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJCi0JCQlQb3J0R2VuZXJhdG9yIHBvcnRHZW5lcmF0b3IgPSBuZXcgUG9ydEdlbmVyYXRvcihzZXJ2aWNlKTsKLQkJCQotCQkJLy8gc2V0IHRoZSBkZWZhdWx0IGNvbnRlbnQgZ2VuZXJhdG9yCi0JCQlDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSBudWxsOwotCQkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoZGVmaW5pdGlvbik7Ci0JCQlTdHJpbmcgcHJvdG9jb2wgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldERlZmF1bHRCaW5kaW5nKHByb2plY3QpOwotCQkJaWYgKHByb3RvY29sICE9IG51bGwpIHsKLQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkJCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lc3BhY2UocHJvdG9jb2wpOwotCQkJCWlmIChleHQgIT0gbnVsbCkgewotCQkJCQljb250ZW50R2VuZXJhdG9yID0gQmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKGV4dC5nZXROYW1lc3BhY2UoKSk7Ci0JCQkJICB9Ci0JCQl9Ci0JCQkvLyB1bmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgY29udGVudCBnZW5lcmF0b3IsIHRyeSBhZ2FpbgotCQkJaWYgKGNvbnRlbnRHZW5lcmF0b3IgPT0gbnVsbCkgewotCQkJCS8vIEdldCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbnRlbnQgZ2VuZXJhdG9yCi0JCQkJTGlzdCBwcm90b2NvbHMgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKTsKLQkJCQlpZiAocHJvdG9jb2xzLnNpemUoKSA+PSAxKSB7Ci0JCQkJCXByb3RvY29sID0gKFN0cmluZylwcm90b2NvbHMuZ2V0KDApOwotCQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbCk7Ci0JCQkJCWlmIChleHQgIT0gbnVsbCkgewotCQkJCQkJY29udGVudEdlbmVyYXRvciA9IEJpbmRpbmdHZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcihleHQuZ2V0TmFtZXNwYWNlKCkpOwotCQkJCSAgfQotCQkJCX0KLQkJCX0KLQkJCXBvcnRHZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihjb250ZW50R2VuZXJhdG9yKTsKLQkJCXBvcnRHZW5lcmF0b3Iuc2V0TmFtZShOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnROYW1lKHNlcnZpY2UsICJOZXdQb3J0IikpOyAvLyROT04tTkxTLTEkCi0JCSAgICAvLyBnbyBhaGVhZCBhbmQgYWRkIHJlcXVpcmVkIG5hbWVzcGFjZXMgZmlyc3QgYmVmb3JlIGdlbmVyYXRpbmcgcG9ydAotCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuYWRkUmVxdWlyZWROYW1lc3BhY2VzKGNvbnRlbnRHZW5lcmF0b3IsIGRlZmluaXRpb24pOwotCQkJcG9ydEdlbmVyYXRvci5nZW5lcmF0ZVBvcnQoKTsKLQkJCQotCQkJZm9ybWF0Q2hpbGQoc2VydmljZS5nZXRFbGVtZW50KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBzZXJ2aWNlOwotCX0KLQotCXByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0KLQkJU3RyaW5nIGxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotCQlVUkwgdXJsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkJewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCVVSTCBmaWxlVVJMID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJZmlsZVVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJaWYgKGZpbGVVUkwgIT0gbnVsbCkgewotCQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aChmaWxlVVJMLmdldFBhdGgoKSk7Ci0JCQkJSUZpbGUgZmlsZXNbXSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZEZpbGVzRm9yTG9jYXRpb24ocGF0aCk7Ci0JCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkJaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKLQkJCQkJLy8ganVzdCBnZXQgdGhlIGZpcnN0IGZpbGUKLQkJCQkJZmlsZSA9IGZpbGVzWzBdOwotCQkJCX0KLQkJCQlwcm9qZWN0ID0gZmlsZS5nZXRQcm9qZWN0KCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFEZWxldGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5MjNjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMURlbGV0ZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIG9iamVjdDsKLQkKLQlwdWJsaWMgVzExRGVsZXRlQ29tbWFuZChXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0KSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fREVMRVRFLCBudWxsKTsKLQkJdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0JCWlmIChvYmplY3QuZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJZWxlbWVudCA9ICgoV1NETEVsZW1lbnQpIG9iamVjdC5nZXRUYXJnZXQoKSkuZ2V0RWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdC5nZXRUYXJnZXQoKSBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KSB7Ci0JCQllbGVtZW50ID0gKChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb2JqZWN0LmdldFRhcmdldCgpKS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJCi0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhlbGVtZW50KTsKLQkJCQotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMVNlcnZpY2UpIHsKLQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXNlcnZpY2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVTZXJ2aWNlcygpLnJlbW92ZShzZXJ2aWNlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCQkJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpICgoVzExU2VydmljZSkgKChXMTFFbmRQb2ludCkgb2JqZWN0KS5nZXRPd25lclNlcnZpY2UoKSkuZ2V0VGFyZ2V0KCk7Ci0JCQkJUG9ydCBwb3J0ID0gKFBvcnQpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlzZXJ2aWNlLmdldEVQb3J0cygpLnJlbW92ZShwb3J0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUJpbmRpbmcpIHsKLQkJCQlCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCWJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVCaW5kaW5ncygpLnJlbW92ZShiaW5kaW5nKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkgewotCQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJcG9ydFR5cGUuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVQb3J0VHlwZXMoKS5yZW1vdmUocG9ydFR5cGUpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExT3BlcmF0aW9uKSB7Ci0JCQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpICgoVzExSW50ZXJmYWNlKSAoKFcxMU9wZXJhdGlvbikgb2JqZWN0KS5nZXRPd25lckludGVyZmFjZSgpKS5nZXRUYXJnZXQoKTsKLQkJCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkucmVtb3ZlKG9wZXJhdGlvbik7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJUGFydCBwYXJ0ID0gKFBhcnQpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgcGFydC5lQ29udGFpbmVyKCk7Ci0JCQkJbWVzc2FnZS5nZXRFUGFydHMoKS5yZW1vdmUocGFydCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJSW1wb3J0KSB7Ci0JCQkJSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQl0aGVJbXBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVJbXBvcnRzKCkucmVtb3ZlKHRoZUltcG9ydCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFUeXBlKSB7Ci0JCQkJVzExVHlwZSB3MTFUeXBlID0gKFcxMVR5cGUpIG9iamVjdDsKLQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSkgIHcxMVR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCQkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBzY2hlbWEuZUNvbnRhaW5lcigpOwotCQkJCVR5cGVzIHR5cGUgPSAoVHlwZXMpIGVlRWxlbWVudC5nZXRDb250YWluZXIoKTsKLQkJCQl0eXBlLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUoZWVFbGVtZW50KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbiltZXNzYWdlUmVmLmVDb250YWluZXIoKTsKLQkJCQlpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIElucHV0KSB7Ci0JCQkJCW9wZXJhdGlvbi5zZXRFSW5wdXQobnVsbCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBPdXRwdXQpIHsKLQkJCQkJb3BlcmF0aW9uLnNldEVPdXRwdXQobnVsbCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBGYXVsdCkgewotCQkJCQlvcGVyYXRpb24uZ2V0RUZhdWx0cygpLnJlbW92ZShtZXNzYWdlUmVmKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJTWVzc2FnZSkgewotCQkJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJbWVzc2FnZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RU1lc3NhZ2VzKCkucmVtb3ZlKG1lc3NhZ2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGVsZW1lbnQpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxMjVjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgSVBhcmFtZXRlciBwYXJhbWV0ZXI7Ci0JCi0JcHVibGljIFcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQoSVBhcmFtZXRlciBwYXJhbSkgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0RFTEVURSwgbnVsbCk7Ci0JCXRoaXMucGFyYW1ldGVyID0gcGFyYW07Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCU9iamVjdCBvYmplY3QgPSAoKFdTRExCYXNlQWRhcHRlcikgcGFyYW1ldGVyKS5nZXRUYXJnZXQoKTsKLQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJZWxlbWVudCA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBvYmplY3QpLmdldEVsZW1lbnQoKTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJZWxlbWVudCA9ICgoUGFydCkgb2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJCi0JCWlmIChlbGVtZW50ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYmVnaW5SZWNvcmRpbmcoZWxlbWVudCk7Ci0JCQkJZGVsZXRlKCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQllbmRSZWNvcmRpbmcoZWxlbWVudCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRlbGV0ZSgpIHsKLQkJT2JqZWN0IG9iamVjdCA9ICgoV1NETEJhc2VBZGFwdGVyKSBwYXJhbWV0ZXIpLmdldFRhcmdldCgpOwotCQkKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJWFNEQ29uY3JldGVDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIG9iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0JCQkKLQkJCWlmICh4c2RDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCVhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSB4c2RDb21wb25lbnQ7Ci0JCQkJaWYgKHBhcnRpY2xlLmdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGUuZ2V0Q29udGFpbmVyKCk7Ci0JCQkJCWlmIChtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuc2l6ZSgpID49IDIpIHsKLQkJCQkJCW1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydGljbGUpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJbW9kZWxHcm91cC5nZXRDb250ZW50cygpLnJlbW92ZShwYXJ0aWNsZSk7Ci0JCQkJCQkvLyBUT0RPOiBXZSBuZWVkIHRoZSBsaW5lIGJlbG93IHRvIGRlbGV0ZSB0aGUgTWVzc2FnZSBhbmQgUGFydAotLy8JCQkJCQlyZW1vdmVNZXNzYWdlQW5kUGFydCh3UGFyYW1ldGVyLmdldFBhcnQoKSk7Ci0JCQkJCQkvLyBUT0RPOiBSZW1vdmUgdGhlIFhTRCBjb21wb25lbnRzIGFzIHdlbGwuLi4uLgotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hKXsKLQkJCQkvLyBUT0RPOiBXZSBuZWVkIHRoZSBsaW5lIGJlbG93IHRvIGRlbGV0ZSB0aGUgTWVzc2FnZSBhbmQgUGFydAotLy8JCQkJcmVtb3ZlTWVzc2FnZUFuZFBhcnQod1BhcmFtZXRlci5nZXRQYXJ0KCkpOyAvLyBEZWxldGUgdGhlIHBhcnQgYXMgd2VsbAotCQkJCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSAoWFNEU2NoZW1hKSB4c2RDb21wb25lbnQ7Ci0JCQkJeHNkU2NoZW1hLmdldENvbnRlbnRzKCkucmVtb3ZlKG9iamVjdCk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgUGFydCkgewotCQkJcmVtb3ZlTWVzc2FnZUFuZFBhcnQoKFBhcnQpIG9iamVjdCk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSkgewotCQkJcmVtb3ZlTWVzc2FnZUFuZFBhcnQoKFBhcnQpICgoTWVzc2FnZSkgb2JqZWN0KS5nZXRFUGFydHMoKS5nZXQoMCkpOwotCQl9Ci0JCQotCQkvLyBEbyB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgSW5wdXQvT3V0cHV0L0ZhdWx0IE1lc3NhZ2VSZWZlcmVuY2UgYXMgd2VsbCBpZgotCQkvLyB0aGVyZSBhcmUgbm8gbW9yZSAiaW5wdXRzIj8uLi4uCi0JfQotCQotCXByb3RlY3RlZCB2b2lkIHJlbW92ZU1lc3NhZ2VBbmRQYXJ0KFBhcnQgcGFydCkgewotCQlXMTFNZXNzYWdlUmVmZXJlbmNlICB3TWVzc2FnZSA9IG51bGw7Ci0JCS8qCi0JCWlmIChwYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSB7Ci0JCQl3TWVzc2FnZSA9IChXMTFNZXNzYWdlUmVmZXJlbmNlKSAoKFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHBhcmFtZXRlcikuZ2V0T3duZXIoKTsJCi0JCX0KLQkJZWxzZSAqL2lmIChwYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQl3TWVzc2FnZSA9IChXMTFNZXNzYWdlUmVmZXJlbmNlKSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIHBhcmFtZXRlcikuZ2V0T3duZXIoKTsKLQkJfQotCQkKLQkJTWVzc2FnZSBtZXNzYWdlID0gd01lc3NhZ2UuZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCk7IAotCQltZXNzYWdlLmdldEVQYXJ0cygpLnJlbW92ZShwYXJ0KTsKLQkJCi0JCSgoRGVmaW5pdGlvbikgcGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLmdldEVNZXNzYWdlcygpLnJlbW92ZShtZXNzYWdlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUVkaXROYW1lc3BhY2VzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMzYTFlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUVkaXROYW1lc3BhY2VzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTU5hbWVzcGFjZUluZm9NYW5hZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIExpc3QgbmFtZXNwYWNlc0luZm9MaXN0OwotCXByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLQlwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2VQcmVmaXg7Ci0JCi0JcHVibGljIFcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkgIHN1cGVyKE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVMsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VzSW5mbyhMaXN0IG5hbWVzcGFjZXMpIHsKLQkJbmFtZXNwYWNlc0luZm9MaXN0ID0gbmFtZXNwYWNlczsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VGFyZ2V0TmFtZXNwYWNlKFN0cmluZyB0bnMpIHsKLQkJdGFyZ2V0TmFtZXNwYWNlID0gdG5zOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoU3RyaW5nIHByZWZpeCkgewotCQl0YXJnZXROYW1lc3BhY2VQcmVmaXggPSBwcmVmaXg7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAodGFyZ2V0TmFtZXNwYWNlUHJlZml4ICE9IG51bGwpIHsKLQkJCQlFbGVtZW50IGVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLQotCQkJCS8vIFJlbW92ZSB0aGUgb2xkIHByZWZpeAotCQkJCVN0cmluZyBvbGRQcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJCQllbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgieG1sbnM6IitvbGRQcmVmaXgpOyAgLy8kTk9OLU5MUy0xJAotCi0JCQkJLy8gU2V0IHRoZSBuZXcgcHJlZml4Ci0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyB0YXJnZXROYW1lc3BhY2VQcmVmaXgsIGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgbmV3VmFsdWUgPSB0YXJnZXROYW1lc3BhY2U7Ci0JCQkJU3RyaW5nIHByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQkJCWRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKG5ld1ZhbHVlKTsKLQkJCQlkZWZpbml0aW9uLmdldEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsIG5ld1ZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlpZiAobmFtZXNwYWNlc0luZm9MaXN0ICE9IG51bGwpIHsKLQkJCQlET01OYW1lc3BhY2VJbmZvTWFuYWdlciBuYW1lc3BhY2VJbmZvTWFuYWdlciA9IG5ldyBET01OYW1lc3BhY2VJbmZvTWFuYWdlcigpOwotCi0JCQkJLyoKLQkJICAgICAgTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCA9IG5hbWVzcGFjZUluZm9NYW5hZ2VyLmdldE5hbWVzcGFjZUluZm9MaXN0KGVsZW1lbnQpOwotLy8JCSAgICAgIExpc3Qgb2xkTmFtZXNwYWNlSW5mb0xpc3QgPSBOYW1lc3BhY2VJbmZvLmNsb25lTmFtZXNwYWNlSW5mb0xpc3QobmFtZXNwYWNlSW5mb0xpc3QpOwotCi0JCSAgICAgIC8vIGhlcmUgd2Ugc3RvcmUgYSBjb3B5IG9mIHRoZSBvbGQgaW5mbyBmb3IgZWFjaCBOYW1lc3BhY2VJbmZvCi0JCSAgICAgIC8vIHRoaXMgaW5mbyB3aWxsIGJlIHVzZWQgaW4gY3JlYXRlUHJlZml4TWFwcGluZygpIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHVwZGF0ZSB0aGUgZG9jdW1lbnQgCi0JCSAgICAgIC8vIGluIHJlc3BvbnNlIHRvIHRoZXNlIGNoYW5nZXMKLQkJICAgICAgZm9yIChJdGVyYXRvciBpID0gbmFtZXNwYWNlSW5mb0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkgICAgICB7Ci0JCSAgICAgICAgTmFtZXNwYWNlSW5mbyBpbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotCQkgICAgICAgIE5hbWVzcGFjZUluZm8gb2xkQ29weSA9IG5ldyBOYW1lc3BhY2VJbmZvKGluZm8pOwotCQkgICAgICAgIGluZm8uc2V0UHJvcGVydHkoIm9sZENvcHkiLCBvbGRDb3B5KTsgLy8kTk9OLU5MUy0xJAotCQkgICAgICB9Ci0JCQkJICovCi0KLQkJCQluYW1lc3BhY2VJbmZvTWFuYWdlci5yZW1vdmVOYW1lc3BhY2VJbmZvKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCQluYW1lc3BhY2VJbmZvTWFuYWdlci5hZGROYW1lc3BhY2VJbmZvKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpLCBuYW1lc3BhY2VzSW5mb0xpc3QsIGZhbHNlKTsKLQotCQkJCS8qCi0JICAgICAgICAvLyBzZWUgaWYgd2UgbmVlZCB0byByZW5hbWUgYW55IHByZWZpeGVzCi0JICAgICAgICBNYXAgcHJlZml4TWFwcGluZyA9IGNyZWF0ZVByZWZpeE1hcHBpbmcob2xkTmFtZXNwYWNlSW5mb0xpc3QsIG5hbWVzcGFjZUluZm9MaXN0KTsKLQkgICAgICAgIGlmIChwcmVmaXhNYXBwaW5nLnNpemUoKSA+IDApCi0JICAgICAgICB7Ci0JICAgICAgICAgIC8vbWFuYWdlci5nZXRNb2RlbCgpLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotCSAgICAgICAgICBSZXBsYWNlUHJlZml4QWN0aW9uIHJlcGxhY2VQcmVmaXhBY3Rpb24gPSBuZXcgUmVwbGFjZVByZWZpeEFjdGlvbihlbGVtZW50LCBwcmVmaXhNYXBwaW5nKTsKLQkgICAgICAgICAgcmVwbGFjZVByZWZpeEFjdGlvbi5ydW4oKTsKLQkgICAgICAgICAgLy9tYW5hZ2VyLmdldE1vZGVsKCkuY2hhbmdlZE1vZGVsKCk7Ci0JICAgICAgICB9Ci0JCQkJICovICAgCi0JCQl9Ci0KLQkJCS8qCi0JCSAvLyBDb3VsZCBub3QgbW9kaWZ5IChtb3JlIHNwZWNpZmljYWxseSByZW1vdmUpIG5hbWVzcGFjZXMgdmlhIG1vZGVsLi4uLi4KLQkJIC8vIHNob3VsZCByZXZpc2l0IHRoaXMKLQkJaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsIHx8IHRhcmdldE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKSB7Ci0JCQlNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0JCQlTdHJpbmcgb2xkVGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCVN0cmluZyBvbGRQcmVmaXggPSBudWxsOwotCi0JCQlJdGVyYXRvciBpdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0JCQkJT2JqZWN0IHZhbHVlID0gbWFwLmdldChrZXkpOwotCQkJCWlmICh2YWx1ZSAhPSBudWxsICYmIG9sZFRhcmdldE5hbWVzcGFjZSAhPSBudWxsICYmIHZhbHVlLmVxdWFscyhvbGRUYXJnZXROYW1lc3BhY2UpKSB7Ci0JCQkJCW9sZFByZWZpeCA9IGtleTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAob2xkUHJlZml4ICE9IG51bGwgJiYgIW9sZFByZWZpeC5lcXVhbHModGFyZ2V0TmFtZXNwYWNlUHJlZml4KSkgewotCQkJCW1hcC5yZW1vdmUob2xkUHJlZml4KTsKLQkJCQlkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLQkJCX0KLQotCQkJU3RyaW5nIHRucyA9ICIiOwotCQkJU3RyaW5nIHByZWZpeCA9ICIiOwotCQkJaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQkJdG5zID0gdGFyZ2V0TmFtZXNwYWNlOwotCQkJfQotCQkJaWYgKHRhcmdldE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKSB7Ci0JCQkJcHJlZml4ID0gdGFyZ2V0TmFtZXNwYWNlUHJlZml4OwotCQkJfQotCQkJZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCB0bnMpOwotCQkJZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UodG5zKTsKLS8vCQkJbWFwLnB1dChwcmVmaXgsIHRucyk7Ci0JCX0KLQkJCSAqLwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQkvKgotCXByb3RlY3RlZCBNYXAgY3JlYXRlUHJlZml4TWFwcGluZyhMaXN0IG9sZExpc3QsIExpc3QgbmV3TGlzdCkKLQl7Ci0JCU1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLQkJSGFzaHRhYmxlIG9sZFVSSVRvUHJlZml4VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IG9sZExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQl7Ci0JCQlOYW1lc3BhY2VJbmZvIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0JCQlvbGRVUklUb1ByZWZpeFRhYmxlLnB1dChvbGRJbmZvLnVyaSwgb2xkSW5mbyk7Ci0JCX0KLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBuZXdMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJewotCQkJTmFtZXNwYWNlSW5mbyBuZXdJbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotCQkJTmFtZXNwYWNlSW5mbyBvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIG9sZFVSSVRvUHJlZml4VGFibGUuZ2V0KG5ld0luZm8udXJpICE9IG51bGwgPyBuZXdJbmZvLnVyaSA6ICIiKTsgLy8kTk9OLU5MUy0xJAotCi0JCQkvLyBpZiBvbGRJbmZvIGlzIG5vbiBudWxsIC4uLiB0aGVyZSdzIGEgbWF0Y2hpbmcgVVJJIGluIHRoZSBvbGQgc2V0Ci0JCQkvLyB3ZSBjYW4gdXNlIGl0cyBwcmVmaXggdG8gZGV0ZW1pbmUgb3V0IG1hcHBpbmcKLQkJCS8vCi0JCQkvLyBpZiBvbGRJbmZvIGlzIG51bGwgLi4uICB3ZSB1c2UgdGhlICdvbGRDb3B5JyB3ZSBzdGFzaGVkIGF3YXkgCi0JCQkvLyBhc3N1bWluZyB0aGF0IHRoZSB1c2VyIGNoYW5nZWQgdGhlIFVSSSBhbmQgdGhlIHByZWZpeAotCQkJaWYgKG9sZEluZm8gPT0gbnVsbCkKLQkJCXsKLQkJCQlvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIG5ld0luZm8uZ2V0UHJvcGVydHkoIm9sZENvcHkiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlpZiAob2xkSW5mbyAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyBuZXdQcmVmaXggPSBuZXdJbmZvLnByZWZpeCAhPSBudWxsID8gbmV3SW5mby5wcmVmaXggOiAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCVN0cmluZyBvbGRQcmVmaXggPSBvbGRJbmZvLnByZWZpeCAhPSBudWxsID8gb2xkSW5mby5wcmVmaXggOiAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCWlmICghb2xkUHJlZml4LmVxdWFscyhuZXdQcmVmaXgpKQotCQkJCXsKLQkJCQkJbWFwLnB1dChvbGRQcmVmaXgsIG5ld1ByZWZpeCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBtYXA7Ci0JfQotCSovCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzIxMWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQmluZGluZ1dpemFyZDsKLQotcHVibGljIGNsYXNzIFcxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcm90ZWN0ZWQgQmluZGluZyBiaW5kaW5nOwotCQotCXB1YmxpYyBXMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKEJpbmRpbmcgYmluZGluZykgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfR0VORVJBVEVfQklORElOR19DT05URU5ULCBiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCUJpbmRpbmdXaXphcmQgd2l6YXJkID0gbmV3IEJpbmRpbmdXaXphcmQoYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGJpbmRpbmcsIEJpbmRpbmdXaXphcmQuS0lORF9SRUdFTkVSQVRFX0JJTkRJTkcpOwotCQkJd2l6YXJkLnNldEJpbmRpbmdOYW1lKENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0TmFtZShiaW5kaW5nKSk7Ci0JCQl3aXphcmQuc2V0UG9ydFR5cGVOYW1lKENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0UG9ydFR5cGVSZWZlcmVuY2UoYmluZGluZykpOwotCQkJV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSwgd2l6YXJkKTsKLQkJCXdpemFyZERpYWxvZy5jcmVhdGUoKTsKLQkJCWlmICh3aXphcmREaWFsb2cub3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCWZvcm1hdENoaWxkKGJpbmRpbmcuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW5hbWVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlbmFtZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1OWNhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlbmFtZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucGFydGljaXBhbnRzLlJlbmFtZVJlZmFjdG9yaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlNtYXJ0UmVuYW1lQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuQmluZGluZ1JlbmFtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5NZXNzYWdlUmVuYW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLlBvcnRUeXBlUmVuYW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5QZXJmb3JtVW5zYXZlZFJlZmFjdG9yaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuUmVmYWN0b3JpbmdDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5YTUxSZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5SZW5hbWVDb21wb25lbnRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMVJlbmFtZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIG9iamVjdDsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld05hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIFcxMVJlbmFtZUNvbW1hbmQoV1NETEJhc2VBZGFwdGVyIG9iamVjdCwgU3RyaW5nIG5ld05hbWUpIHsKLQkJc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9SRU5BTUUsIChvYmplY3QuZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgPyAoKFdTRExFbGVtZW50KSBvYmplY3QuZ2V0VGFyZ2V0KCkpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSA6ICBudWxsKTsKLQkJdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0JCXRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCVN0cmluZyBvcmlnTmFtZSA9IG51bGw7Ci0JCQkKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFEZXNjcmlwdGlvbikgewotCQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZC5lbnN1cmVEZWZpbml0aW9uKGRlZmluaXRpb24pOwotCQkJCVN0cmluZyBucyA9IGRlZmluaXRpb24uZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCQlkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShucywgbmV3TmFtZSkpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExU2VydmljZSkgewotCQkJCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJU3RyaW5nIG5zID0gc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCXNlcnZpY2Uuc2V0UU5hbWUobmV3IFFOYW1lKG5zLCBuZXdOYW1lKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotCQkJCVBvcnQgcG9ydCA9IChQb3J0KSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJcG9ydC5zZXROYW1lKG5ld05hbWUpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExQmluZGluZykgewotCQkJCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJb3JpZ05hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFJbnRlcmZhY2UpIHsKLQkJCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCW9yaWdOYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMU9wZXJhdGlvbikgewotCQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJU21hcnRSZW5hbWVBY3Rpb24gYWN0aW9uID0gbmV3IFNtYXJ0UmVuYW1lQWN0aW9uKG9wZXJhdGlvbiwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lT3BlcmF0aW9uSGVscGVyKG9wZXJhdGlvbik7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCVdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQlyZW5hbWVJT0ZIZWxwZXIoZWxlbWVudCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFNZXNzYWdlKSB7Ci0JCQkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpICgoVzExTWVzc2FnZSkgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLS8vCQkJCUl0ZXJhdG9yIHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQkJCW9yaWdOYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQotCQkJCVNtYXJ0UmVuYW1lQWN0aW9uIGFjdGlvbiA9IG5ldyBTbWFydFJlbmFtZUFjdGlvbihtZXNzYWdlLCBuZXdOYW1lKTsKLQkJCQlhY3Rpb24ucnVuKGZhbHNlKTsKLS8vCQkJCXdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpIHsKLS8vCQkJCQlTbWFydFJlbmFtZUFjdGlvbiBhY3Rpb24gPSBuZXcgU21hcnRSZW5hbWVBY3Rpb24ocGFydHMubmV4dCgpLCBuZXdOYW1lKTsKLS8vCQkJCQlhY3Rpb24ucnVuKCk7Ci0vLwkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQkJUGFydCBwYXJ0ID0gKFBhcnQpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQlTbWFydFJlbmFtZUFjdGlvbiBhY3Rpb24gPSBuZXcgU21hcnRSZW5hbWVBY3Rpb24ocGFydCwgbmV3TmFtZSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExQmluZGluZ09wZXJhdGlvbikgewotCQkJCUJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSAoKFcxMUJpbmRpbmdPcGVyYXRpb24pIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5ld05hbWUpOwotCQkJCWJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJLy8gVE9ETzogV2Ugc2hvdWxkIGdvIG9mZiBhbmQgcmVuYW1lIHRoZSBhc3NvY2lhdGVkIFBvcnRUeXBlIE9wZXJhdGlvbgotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlPYmplY3QgYmluZGluZ01lc3NhZ2VSZWYgPSAoKFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJCWlmIChiaW5kaW5nTWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkgewotCQkJCQkoKEJpbmRpbmdJbnB1dCkgYmluZGluZ01lc3NhZ2VSZWYpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCSgoQmluZGluZ0lucHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuZ2V0RUlucHV0KCkuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJLy8gVE9ETzogV2Ugc2hvdWxkIGdvIG9mZiBhbmQgcmVuYW1lIHRoZSBhc3NvY2lhdGVkIFBvcnR0eXBlIE1lc3NhZ2VSZWZlcmVuY2UKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoYmluZGluZ01lc3NhZ2VSZWYgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KSB7Ci0JCQkJCSgoQmluZGluZ091dHB1dCkgYmluZGluZ01lc3NhZ2VSZWYpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCSgoQmluZGluZ091dHB1dCkgYmluZGluZ01lc3NhZ2VSZWYpLmdldEVPdXRwdXQoKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydHR5cGUgT3V0cHV0CQkJCQotCQkJCX0KLQkJCQllbHNlIGlmIChiaW5kaW5nTWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkgewotCQkJCQkoKEJpbmRpbmdGYXVsdCkgYmluZGluZ01lc3NhZ2VSZWYpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCSgoQmluZGluZ0ZhdWx0KSBiaW5kaW5nTWVzc2FnZVJlZikuZ2V0RUZhdWx0KCkuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJLy8gVE9ETzogV2Ugc2hvdWxkIGdvIG9mZiBhbmQgcmVuYW1lIHRoZSBhc3NvY2lhdGVkIFBvcnR0eXBlIEZhdWx0Ci0JCQkJfQotCQkJfQotCQotCQkJT2JqZWN0IHRhcmdldCA9IG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCAmJiBvcmlnTmFtZSAhPSBudWxsKSB7Ci0JCQkJV1NETEVsZW1lbnQgY29tcG9uZW50ID0gKFdTRExFbGVtZW50KSB0YXJnZXQ7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IGNvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCi0JCQkJUmVmYWN0b3JpbmdDb21wb25lbnQgcmVmYWN0b3JpbmdDb21wb25lbnQgPSBuZXcgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQoCi0JCQkJCQljb21wb25lbnQsCi0JCQkJCQkoSURPTUVsZW1lbnQpY29tcG9uZW50LmdldEVsZW1lbnQoKSwgCi0JCQkJCQlvcmlnTmFtZSwKLQkJCQkJCW5hbWVzcGFjZSk7Ci0JCi0JCQkJUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBSZW5hbWVDb21wb25lbnRQcm9jZXNzb3IocmVmYWN0b3JpbmdDb21wb25lbnQsIG5ld05hbWUsIHRydWUpOyAgICAKLQkJCQlSZW5hbWVSZWZhY3RvcmluZyByZWZhY3RvcmluZyA9IG5ldyBSZW5hbWVSZWZhY3RvcmluZyhwcm9jZXNzb3IpOwotCQkJCVBlcmZvcm1VbnNhdmVkUmVmYWN0b3JpbmdPcGVyYXRpb24gcmVmYWN0b3JPcGVyYXRpb24gPSBuZXcgUGVyZm9ybVVuc2F2ZWRSZWZhY3RvcmluZ09wZXJhdGlvbihyZWZhY3RvcmluZyk7Ci0JCQkJcmVmYWN0b3JPcGVyYXRpb24ucnVuKG51bGwpOyAKLQkJCQkKLQkgICAgICAgICAgICAvLyBybWFoIDogZHVlIHRvIHRoZSBvcmRlcmluZyBpbiB3aGljaCByZWZhY3RvcmluZyBpcyBjYWxsZWQKLQkgICAgICAgICAgICAvLyAoaS5lLiB0aGUgcmVmZXJlbmNlIGNoYW5nZXMgYmVmb3JlIHRoZSBkZWNsYXJhdGlvbiBjaGFuZ2VzKSAKLQkgICAgICAgICAgICAvLyBvdXIgbW9kZWwgcmVmZXJlbmNlcyBtYXkgYmUgbWVzc2VkIHVwIGF0IHRoaXMgcG9pbnQuCi0JICAgICAgICAgICAgLy8gVGhlIGxpbmUgb2YgY29kZSBiZWxvdyBnZXRzIHRoZSBtb2RlbCB0byBmaXggdXAgaXRzIHJlZmVyZW5jZXMuICAKLQkJCQkoKERlZmluaXRpb25JbXBsKSBjb21wb25lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQotCS8vIFRPRE86IFdlIHNob3VsZCBsb29rIGF0IHVzaW5nIHRoZSByZWZhY3RvciBtZWNoYW5pc20gdG8gZG8gdGhpcyByZW5hbWluZy4uLi4KLQlwcml2YXRlIHZvaWQgcmVuYW1lT3BlcmF0aW9uSGVscGVyKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsgCi0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKGRlZmluaXRpb24pOwotCQlJdGVyYXRvciBpdCA9IHV0aWwuZ2V0QmluZGluZ09wZXJhdGlvbnMob3BlcmF0aW9uKS5pdGVyYXRvcigpOwotCi0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCUJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBpdC5uZXh0KCk7Ci0JCQlFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoYmluZGluZ09wZXJhdGlvbik7Ci0JCQlpZiAoZWxlbWVudCAhPSBudWxsKQotCQkJeyAKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIG5ld05hbWUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQkvLwkJICAgIFRPRE86IFdlIHNob3VsZCBnbyB0aHJvdWdoIHRoZSBtb2RlbCB0byByZW5hbWUuLi4uIE5vdCB0aGUgRWxlbWVudC4uLgotCQkJLy8JCQliaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUobmV3TmFtZSk7Ci0JCX0KLQl9Ci0KLQkvLyBUT0RPOiBXZSBzaG91bGQgbG9vayBhdCB1c2luZyB0aGUgcmVmYWN0b3IgbWVjaGFuaXNtIHRvIGRvIHRoaXMgcmVuYW1pbmcuLi4uCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZUlPRkhlbHBlcihXU0RMRWxlbWVudCBvYmplY3QpCi0JeyAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb2JqZWN0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsgCi0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKGRlZmluaXRpb24pOwotCQlMaXN0IGxpc3QgPSBudWxsOwotCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJbnB1dCkKLQkJewotCQkJbGlzdCA9IHV0aWwuZ2V0QmluZGluZ0lucHV0cygoSW5wdXQpb2JqZWN0KTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBPdXRwdXQpCi0JCXsKLQkJCWxpc3QgPSB1dGlsLmdldEJpbmRpbmdPdXRwdXRzKChPdXRwdXQpb2JqZWN0KTsKLQkJfQotCQllbHNlIC8vIGZhdWx0Ci0JCXsKLQkJCWxpc3QgPSB1dGlsLmdldEJpbmRpbmdGYXVsdHMoKEZhdWx0KW9iamVjdCk7Ci0JCX0KLQotCQlpZiAobGlzdCAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JCQl7Ci0JCQkJT2JqZWN0IGJpbmRpbmdPYmplY3QgPSBpLm5leHQoKTsKLQkJCQlyZW5hbWVNb2RlbE9iamVjdEhlbHBlcihiaW5kaW5nT2JqZWN0LCBuZXdOYW1lKTsKLQkJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCX0KLQotCQlyZW5hbWVNb2RlbE9iamVjdEhlbHBlcihvYmplY3QsIG5ld05hbWUpOwotCX0KLQotCS8vIFRPRE86IFdlIHNob3VsZCBsb29rIGF0IHVzaW5nIHRoZSByZWZhY3RvciBtZWNoYW5pc20gdG8gZG8gdGhpcyByZW5hbWluZy4uLi4KLQlwcml2YXRlIHZvaWQgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIoT2JqZWN0IG1vZGVsT2JqZWN0LCBTdHJpbmcgdGhlTmV3TmFtZSkKLQl7Ci0JCS8vIFRPRE86IFdlIHNob3VsZCBnbyB0aHJvdWdoIHRoZSBtb2RlbCB0byByZW5hbWUuLi4uIE5vdCB0aGUgRWxlbWVudC4uLgotCQlFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QobW9kZWxPYmplY3QpOwotCQlpZiAoZWxlbWVudCAhPSBudWxsKQotCQl7IAotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCB0aGVOZXdOYW1lKTsgLy8kTk9OLU5MUy0xJAotCQl9ICAgIAotCi0JCWlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpCi0JCXsKLQkJCU1lc3NhZ2VSZW5hbWVyIHJlbmFtZXIgPSBuZXcgTWVzc2FnZVJlbmFtZXIoKE1lc3NhZ2UpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotCQkJcmVuYW1lci52aXNpdEJpbmRpbmdzKCk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLQkJewotCQkJUG9ydFR5cGVSZW5hbWVyIHJlbmFtZXIgPSBuZXcgUG9ydFR5cGVSZW5hbWVyKChQb3J0VHlwZSltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0JCQlyZW5hbWVyLnZpc2l0QmluZGluZ3MoKTsKLQkJfQotCQllbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0JCXsKLQkJCUJpbmRpbmdSZW5hbWVyIHJlbmFtZXIgPSBuZXcgQmluZGluZ1JlbmFtZXIoKEJpbmRpbmcpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotCQkJcmVuYW1lci52aXNpdFNlcnZpY2VzKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2U4MjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcm90ZWN0ZWQgSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYmxpbmc7Ci0JcHJvdGVjdGVkIElNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2libGluZzsKLQlwcm90ZWN0ZWQgSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nUGFyYW1ldGVyOwotCQotCXB1YmxpYyBXMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKElNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ1BhcmFtZXRlcikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1JFT1JERVJfTUVTU0FHRV9SRUZFUkVOQ0UsIG51bGwpOwotCQl0aGlzLmxlZnRTaWJsaW5nID0gbGVmdFNpYmxpbmc7Ci0JCXRoaXMucmlnaHRTaWJsaW5nID0gcmlnaHRTaWJsaW5nOwotCQl0aGlzLm1vdmluZ1BhcmFtZXRlciA9IG1vdmluZ1BhcmFtZXRlcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQlJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdDaGlsZCA9IG51bGw7Ci0JCQotCQlpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJbGVmdFNpYkVsZW1lbnQgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIGxlZnRTaWJsaW5nOyAKLQkJfQotCQlpZiAobW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCW1vdmluZ0NoaWxkID0gKElNZXNzYWdlUmVmZXJlbmNlKSBtb3ZpbmdQYXJhbWV0ZXI7Ci0JCX0KLQkJCi0JCVcxMU9wZXJhdGlvbiB3MTFPcGVyYXRpb24gPSAoVzExT3BlcmF0aW9uKSBtb3ZpbmdDaGlsZC5nZXRPd25lck9wZXJhdGlvbigpOwotCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgdzExT3BlcmF0aW9uLmdldFRhcmdldCgpOwotCQkKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlpZiAobW92aW5nQ2hpbGQuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpIHsKLQkJCQlpZiAobGVmdFNpYkVsZW1lbnQgPT0gbnVsbCkgewotCQkJCQkvLyBJbnB1dC9PdXRwdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIHRydWUpOwotCQkJCX0KLQkJCQllbHNlIGlmIChsZWZ0U2liRWxlbWVudCAhPSBudWxsICYmIGxlZnRTaWJFbGVtZW50LmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKSB7Ci0JCQkJCWlmIChyaWdodFNpYmxpbmcuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JCQkJCQkvLyBJbnB1dC9PdXRwdXQgc3R5bGUKLQkJCQkJCXNldElucHV0T3V0cHV0T3JkZXIob3BlcmF0aW9uLCB0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gT3V0cHV0L0lucHV0IHN0eWxlCi0JCQkJCXNldElucHV0T3V0cHV0T3JkZXIob3BlcmF0aW9uLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobW92aW5nQ2hpbGQuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JCQkJaWYgKGxlZnRTaWJFbGVtZW50ID09IG51bGwpIHsKLQkJCQkJLy8gT3V0cHV0L0lucHV0IHN0eWxlCi0JCQkJCXNldElucHV0T3V0cHV0T3JkZXIob3BlcmF0aW9uLCBmYWxzZSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGxlZnRTaWJFbGVtZW50ICE9IG51bGwgJiYgbGVmdFNpYkVsZW1lbnQuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JCQkJCWlmIChyaWdodFNpYmxpbmcuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpIHsKLQkJCQkJCS8vIE91dHB1dC9JbnB1dCBzdHlsZQotCQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gSW5wdXQvT3V0cHV0IHN0eWxlCi0JCQkJCXNldElucHV0T3V0cHV0T3JkZXIob3BlcmF0aW9uLCB0cnVlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JLy8gYm9vbGVhbiBpbnB1dEZpcnN0ID0gdHJ1ZSBpZiB0aGUgSW5wdXQgaXMgdGhlIGZpcnN0IGluIHRoZSBvcmRlciBvZiBJbnB1dCBhbmQgT3V0cHV0Ci0JcHJpdmF0ZSB2b2lkIHNldElucHV0T3V0cHV0T3JkZXIoT3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbGVhbiBpbnB1dEZpcnN0KSB7Ci0JCS8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIG1vcmUgaW5mbyBiZWZvcmUgd2UgY2FuIHNldCB0aGUgc3R5bGUJCi0JCWlmIChpbnB1dEZpcnN0ICYmIG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQkvLyBDaGVjayBpZiB0aGVyZSBpcyBhbiBPdXRwdXQKLQkJCWlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLQkJCQkvLyBPcmRlciBpczogSW5wdXQsIE91dHB1dAotCQkJCXNldE9wZXJhdGlvblN0eWxlKG9wZXJhdGlvbiwgT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIE9yZGVyIGlzOiBJbnB1dAotCQkJCXNldE9wZXJhdGlvblN0eWxlKG9wZXJhdGlvbiwgT3BlcmF0aW9uVHlwZS5PTkVfV0FZKTsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLQkJCS8vIENoZWNrIGlmIHRoZXJlIGlzIGFuIElucHV0Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQkvLyBPcmRlciBpczogT3V0cHV0LCBJbnB1dAotCQkJCXNldE9wZXJhdGlvblN0eWxlKG9wZXJhdGlvbiwgT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIE9yZGVyIGlzOiBPdXRwdXQKLQkJCQlzZXRPcGVyYXRpb25TdHlsZShvcGVyYXRpb24sIE9wZXJhdGlvblR5cGUuTk9USUZJQ0FUSU9OKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0T3BlcmF0aW9uU3R5bGUoT3BlcmF0aW9uIG9wZXJhdGlvbiwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlKSB7Ci0JCS8vIElmIHRoZXJlIGlzIG5vIHN0eWxlIHRvIGJlZ2luIHdpdGgsIGRvbid0IHNldCBvbmUgbm93Ci0JCWlmIChvcGVyYXRpb24uZ2V0U3R5bGUoKSA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCW9wZXJhdGlvbi5zZXRTdHlsZShvcGVyYXRpb25UeXBlKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNzVlODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLQotcHVibGljIGNsYXNzIFcxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotICAgIHByb3RlY3RlZCBJUGFyYW1ldGVyIGxlZnRTaWJsaW5nOwotICAgIHByb3RlY3RlZCBJUGFyYW1ldGVyIHJpZ2h0U2libGluZzsKLSAgICBwcm90ZWN0ZWQgSVBhcmFtZXRlciBtb3ZpbmdQYXJhbWV0ZXI7Ci0gICAgCi0gICAgcHVibGljIFcxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChJUGFyYW1ldGVyIGxlZnRTaWJsaW5nLCBJUGFyYW1ldGVyIHJpZ2h0U2libGluZywgSVBhcmFtZXRlciBtb3ZpbmdQYXJhbWV0ZXIpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9SRU9SREVSX1BBUlQsIG51bGwpOwotICAgICAgICB0aGlzLmxlZnRTaWJsaW5nID0gbGVmdFNpYmxpbmc7Ci0gICAgICAgIHRoaXMucmlnaHRTaWJsaW5nID0gcmlnaHRTaWJsaW5nOwotICAgICAgICB0aGlzLm1vdmluZ1BhcmFtZXRlciA9IG1vdmluZ1BhcmFtZXRlcjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgICAJaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCB8fAotICAgIAkJcmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCB8fAotICAgIAkJbW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotICAgIAkJZXhlY3V0ZUZvclBhcnQoKTsKLSAgICAJfQotICAgIAllbHNlIGlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQgfHwKLSAgICAgICAgCQkgcmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCB8fAotICAgICAgICAJCSBtb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSB7Ci0gICAgCQlleGVjdXRlRm9yRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgCWVsc2UgaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlIHx8Ci0gICAgICAgCQkgICAgIHJpZ2h0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZSB8fAotICAgIAkJICAgICBtb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUpIHsKLS8vICAgIAkJZXhlY3V0ZUZvckVsZW1lbnQoKTsKLSAgICAJfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZXhlY3V0ZUZvckVsZW1lbnQoKSB7Ci0gICAgCVhTREVsZW1lbnREZWNsYXJhdGlvbiBsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0gICAgCVhTREVsZW1lbnREZWNsYXJhdGlvbiByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotICAgIAlYU0RFbGVtZW50RGVjbGFyYXRpb24gbW92aW5nQ2hpbGQgPSBudWxsOwotICAgIAkKLQkJWFNEUGFydGljbGUgbW92aW5nUGFydGljbGUgPSBudWxsOwotCQlYU0RQYXJ0aWNsZSBsZWZ0UGFydGljbGUgPSBudWxsOwotCQlYU0RQYXJ0aWNsZSByaWdodFBhcnRpY2xlID0gbnVsbDsKLQotCQlpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSB7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pICgoVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgbGVmdFNpYmxpbmcpLmdldFRhcmdldCgpOwotCQkJbGVmdFBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBsZWZ0U2liRWxlbWVudC5lQ29udGFpbmVyKCk7Ci0JCX0KLQkJaWYgKHJpZ2h0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLQkJCXJpZ2h0U2liRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pICgoVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgcmlnaHRTaWJsaW5nKS5nZXRUYXJnZXQoKTsKLQkJCXJpZ2h0UGFydGljbGUgPSAoWFNEUGFydGljbGUpIHJpZ2h0U2liRWxlbWVudC5lQ29udGFpbmVyKCk7Ci0JCX0KLQkJaWYgKG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLQkJCW1vdmluZ0NoaWxkID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgKChXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSBtb3ZpbmdQYXJhbWV0ZXIpLmdldFRhcmdldCgpOwotCQkJbW92aW5nUGFydGljbGUgPSAoWFNEUGFydGljbGUpIG1vdmluZ0NoaWxkLmVDb250YWluZXIoKTsKLQkJfQotCQkKLQkJaWYgKG1vdmluZ0NoaWxkLmVxdWFscyhsZWZ0U2liRWxlbWVudCkgfHwgbW92aW5nQ2hpbGQuZXF1YWxzKHJpZ2h0U2liRWxlbWVudCkpIHsKLQkJCXJldHVybjsKLQkJfQotICAgIAkKLSAgICAJaWYgKG1vdmluZ0NoaWxkICE9IG51bGwpIHsKLSAgICAJCXRyeSB7Ci0gICAgCQkJYmVnaW5SZWNvcmRpbmcobW92aW5nUGFydGljbGUuZ2V0RWxlbWVudCgpKTsKLQotICAgIAkJCVhTRE1vZGVsR3JvdXAgY29udGFpbmVyID0gKFhTRE1vZGVsR3JvdXApIG1vdmluZ1BhcnRpY2xlLmdldENvbnRhaW5lcigpOwotICAgIAkJCUxpc3QgcGFydGljbGVzID0gY29udGFpbmVyLmdldENvbnRlbnRzKCk7Ci0gICAgCQkJCi0gICAgCQkJcGFydGljbGVzLnJlbW92ZShtb3ZpbmdQYXJ0aWNsZSk7Ci0KLSAgICAJCQlpbnQgbGVmdEluZGV4ID0gLTEsIHJpZ2h0SW5kZXggPSAtMTsKLSAgICAJCQlpZiAobGVmdFBhcnRpY2xlICE9IG51bGwpIHsKLSAgICAJCQkJbGVmdEluZGV4ID0gcGFydGljbGVzLmluZGV4T2YobGVmdFBhcnRpY2xlKTsKLSAgICAJCQl9Ci0gICAgCQkJaWYgKHJpZ2h0UGFydGljbGUhPSBudWxsKSB7Ci0gICAgCQkJCXJpZ2h0SW5kZXggPSBwYXJ0aWNsZXMuaW5kZXhPZihyaWdodFBhcnRpY2xlKTsKLSAgICAJCQl9Ci0KLSAgICAJCQlpZiAobGVmdEluZGV4ID09IC0xKSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgdG8gdGhlIGZyb250Ci0gICAgCQkJCXBhcnRpY2xlcy5hZGQoMCwgbW92aW5nUGFydGljbGUpOyAgCQkJCQotICAgIAkJCX0KLSAgICAJCQllbHNlIGlmIChyaWdodEluZGV4ID09IC0xKSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgdG8gdGhlIGVuZAotICAgIAkJCQlwYXJ0aWNsZXMuYWRkKG1vdmluZ1BhcnRpY2xlKTsKLSAgICAJCQl9Ci0gICAgCQkJZWxzZSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgYWZ0ZXIgdGhlIG9jY3VyZW5jZSBvZiB0aGUgbGVmdCBzaWJsaW5nCi0gICAgCQkJCXBhcnRpY2xlcy5hZGQobGVmdEluZGV4ICsgMSwgbW92aW5nUGFydGljbGUpOwotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJCWZpbmFsbHkgewotICAgIAkJCWVuZFJlY29yZGluZyhtb3ZpbmdQYXJ0aWNsZS5nZXRFbGVtZW50KCkpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBleGVjdXRlRm9yUGFydCgpIHsKLQkJUGFydCBsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0JCVBhcnQgcmlnaHRTaWJFbGVtZW50ID0gbnVsbDsKLQkJUGFydCBtb3ZpbmdDaGlsZCA9IG51bGw7Ci0KLQkJaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJbGVmdFNpYkVsZW1lbnQgPSAoUGFydCkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBsZWZ0U2libGluZykuZ2V0VGFyZ2V0KCk7IAotCQl9Ci0JCWlmIChyaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlyaWdodFNpYkVsZW1lbnQgPSAoUGFydCkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSByaWdodFNpYmxpbmcpLmdldFRhcmdldCgpOwotCQl9Ci0JCWlmIChtb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQltb3ZpbmdDaGlsZCA9IChQYXJ0KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIG1vdmluZ1BhcmFtZXRlcikuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCWlmIChtb3ZpbmdDaGlsZC5lcXVhbHMobGVmdFNpYkVsZW1lbnQpIHx8IG1vdmluZ0NoaWxkLmVxdWFscyhyaWdodFNpYkVsZW1lbnQpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLSAgICAJCi0gICAgCWlmIChtb3ZpbmdDaGlsZCAhPSBudWxsKSB7Ci0gICAgCQl0cnkgewotICAgIAkJCWJlZ2luUmVjb3JkaW5nKG1vdmluZ0NoaWxkLmdldEVsZW1lbnQoKSk7Ci0gICAgICAgIAkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1vdmluZ0NoaWxkLmVDb250YWluZXIoKTsKLSAgICAJCQlMaXN0IHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKTsKLQotICAgIAkJCXBhcnRzLnJlbW92ZShtb3ZpbmdDaGlsZCk7Ci0KLSAgICAJCQlpbnQgbGVmdEluZGV4ID0gLTEsIHJpZ2h0SW5kZXggPSAtMTsKLSAgICAJCQlpZiAobGVmdFNpYkVsZW1lbnQgIT0gbnVsbCkgewotICAgIAkJCQlsZWZ0SW5kZXggPSBwYXJ0cy5pbmRleE9mKGxlZnRTaWJFbGVtZW50KTsKLSAgICAJCQl9Ci0gICAgCQkJaWYgKHJpZ2h0U2liRWxlbWVudCAhPSBudWxsKSB7Ci0gICAgCQkJCXJpZ2h0SW5kZXggPSBwYXJ0cy5pbmRleE9mKHJpZ2h0U2liRWxlbWVudCk7Ci0gICAgCQkJfQotCi0gICAgCQkJaWYgKGxlZnRJbmRleCA9PSAtMSkgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIHRvIHRoZSBmcm9udAotICAgIAkJCQlwYXJ0cy5hZGQoMCwgbW92aW5nQ2hpbGQpOyAgCQkJCQotICAgIAkJCX0KLSAgICAJCQllbHNlIGlmIChyaWdodEluZGV4ID09IC0xKSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgdG8gdGhlIGVuZAotICAgIAkJCQlwYXJ0cy5hZGQobW92aW5nQ2hpbGQpOwotICAgIAkJCX0KLSAgICAJCQllbHNlIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCBhZnRlciB0aGUgb2NjdXJlbmNlIG9mIHRoZSBsZWZ0IHNpYmxpbmcKLSAgICAJCQkJcGFydHMuYWRkKGxlZnRJbmRleCArIDEsIG1vdmluZ0NoaWxkKTsKLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCQlmaW5hbGx5IHsKLSAgICAJCQllbmRSZWNvcmRpbmcobW92aW5nQ2hpbGQuZ2V0RWxlbWVudCgpKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEFkZHJlc3NDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEFkZHJlc3NDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODNmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRBZGRyZXNzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkLlcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01Db250ZW50QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NQ29udGVudEJ1aWxkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFcxMVNldEFkZHJlc3NDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBQb3J0IHBvcnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbmV3QWRkcmVzczsKLQkKLQlwdWJsaWMgVzExU2V0QWRkcmVzc0NvbW1hbmQoUG9ydCBwb3J0LCBTdHJpbmcgbmV3QWRkcmVzcykgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0VESVRfUE9SVF9BRERSRVNTLCBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMucG9ydCA9IHBvcnQ7Ci0JCXRoaXMubmV3QWRkcmVzcyA9IG5ld0FkZHJlc3M7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7Ci0KLQkJCS8vIFNob3VsZCB0aGUgYWN0dWFsIHNldCBhZGRyZXNzIGNvZGUgbGl2ZSBpbiBpdCdzICdvd24gc2VwYXJhdGUnIGNvbW1hbmQ/PwotCQkJaWYgKCFzZXRBZGRyZXNzKCkpIHsKLQkJCQljcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCQkJCXNldEFkZHJlc3MoKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIHNldEFkZHJlc3MoKSB7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotCQkKLQkJaWYgKHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGVlSXQgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGVlSXQuaGFzTmV4dCgpKSB7Ci0JCQkJTm90aWZpZXIgbm90aWZpZXIgPSAoTm90aWZpZXIpZWVJdC5uZXh0KCk7Ci0JCQkJQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobm90aWZpZXIpOwotCQkgICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcikgewotCQkgICAgICAgIAkoKFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIpYWRhcHRlcikuc2V0TG9jYXRpb25VUkkobmV3QWRkcmVzcyk7Ci0JCSAgICAgICAgCXN1Y2Nlc3MgPSB0cnVlOwotCQkgICAgICAgIH0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHN1Y2Nlc3M7Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiBybWFoOiBXZSBuZWVkIHRvIGNsZWFuIHRoZSBjb2RlIGJlbG93Li4uLi4KLQkgKiBUaGluZ3Mgc2hvdWxkIGJlIHdyYXBwZWQgdXAgYW5kIHBsYWNlZCBpbiBhIGNvbW1vbiBsb2NhdGlvbi4gIEN1cnJlbnRseSwgdGhpcyBpcwotCSAqIGZyb20gdGhlIEFkZEVFTWVudUFjdGlvbkNvbnRyaXVib3IuamF2YSBjbGFzcwotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudCgpIHsKLQkJTGlzdCBtb2RlbFF1ZXJ5QWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShwb3J0LmdldEVsZW1lbnQoKS5nZXRPd25lckRvY3VtZW50KCkpOwotCSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlZCA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24ocG9ydC5nZXRFbGVtZW50KCkpOwotCSAgICAKLQkgICAgaWYgKGVkICE9IG51bGwpCi0JICAgIHsKLQkgICAgICAgICAgLy8gYWRkIGluc2VydCBjaGlsZCBub2RlIGFjdGlvbnMKLQkgICAgICAgICAgLy8KLQkgICAgICAgICAgaW50IGljID0gTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTOwotCSAgICAgICAgICBpbnQgdmMgPSBNb2RlbFF1ZXJ5LlZBTElESVRZX1NUUklDVDsKLQotCSAgICAgICAgICBtb2RlbFF1ZXJ5LmdldEluc2VydEFjdGlvbnMocG9ydC5nZXRFbGVtZW50KCksIGVkLCAtMSwgaWMsIHZjLCBtb2RlbFF1ZXJ5QWN0aW9uTGlzdCk7Ci0JICAgICB9Ci0JICAgIAotCSAgICBjcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudEhlbHBlcjEobW9kZWxRdWVyeUFjdGlvbkxpc3QpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIxKExpc3QgbW9kZWxRdWVyeUFjdGlvbkxpc3QpCi0JICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgZm9yIChJdGVyYXRvciBpID0gbW9kZWxRdWVyeUFjdGlvbkxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLQkgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAgIE1vZGVsUXVlcnlBY3Rpb24gYWN0aW9uID0gKE1vZGVsUXVlcnlBY3Rpb24paS5uZXh0KCk7Ci0JICAgICAgQ01Ob2RlIGNtbm9kZSA9IGFjdGlvbi5nZXRDTU5vZGUoKTsKLQkgICAgICBpZiAoY21ub2RlICE9IG51bGwpCi0JICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAgICAgYm9vbGVhbiBpc090aGVyTmFtZXNwYWNlID0gZmFsc2U7Ci0JICAgICAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSAoQ01Eb2N1bWVudCljbW5vZGUuZ2V0UHJvcGVydHkoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgaWYgKGNtRG9jdW1lbnQgIT0gbnVsbCkgICAgICAgICAgCi0JICAgICAgICB7ICAgICAgICAgICAgIAotCSAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gKFN0cmluZyljbURvY3VtZW50LmdldFByb3BlcnR5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdGFyZ2V0TmFtZXNwYWNlVVJJIik7ICAvLyROT04tTkxTLTEkCi0JICAgICAgICAgIGlzT3RoZXJOYW1lc3BhY2UgPSBuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiAhbmFtZXNwYWNlVVJJLmVxdWFscyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0JICAgICAgICB9Ci0KLQkgICAgICAgIGlmIChpc090aGVyTmFtZXNwYWNlKQotCSAgICAgICAgewotCSAgICAgICAgICBpbnQgY21Ob2RlVHlwZSA9IGNtbm9kZS5nZXROb2RlVHlwZSgpOwotCSAgICAgICAgICBpZiAoYWN0aW9uLmdldEtpbmQoKSA9PSBNb2RlbFF1ZXJ5QWN0aW9uLklOU0VSVCkKLQkgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICAgICAgICBzd2l0Y2ggKGNtTm9kZVR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICBjYXNlIENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OIDoKLQkgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAJICBjcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudEhlbHBlcjIoKENNRWxlbWVudERlY2xhcmF0aW9uKWNtbm9kZSwgYWN0aW9uLmdldFBhcmVudCgpLCBhY3Rpb24uZ2V0U3RhcnRJbmRleCgpKTsKLQkgICAgICAgICAgICAgICAgcmV0dXJuOwotCSAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgIH0KLQkgICAgICAgICAgfSAgICAgICAgICAgCi0JICAgICAgICB9Ci0JICAgICAgfSAgIAotCSAgICB9Ci0JICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudEhlbHBlcjIoQ01Ob2RlIGNtbm9kZSwgTm9kZSBwYXJlbnQsIGludCBpbmRleCkKLSAgICB7Ci0gICAgICBpZiAoY21ub2RlICE9IG51bGwgJiYgcGFyZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gcGFyZW50LmdldE5vZGVUeXBlKCkgPT0gTm9kZS5ET0NVTUVOVF9OT0RFID8gKERvY3VtZW50KXBhcmVudCA6IHBhcmVudC5nZXRPd25lckRvY3VtZW50KCk7ICAgICAgICAKLQotICAgICAgICBET01Db250ZW50QnVpbGRlciBidWlsZGVyID0gbmV3IERPTUNvbnRlbnRCdWlsZGVySW1wbChkb2N1bWVudCk7IAotICAgICAgICBidWlsZGVyLnNldFByb3BlcnR5KERPTUNvbnRlbnRCdWlsZGVyLlBST1BFUlRZX0JVSUxEX0JMQU5LX1RFWFRfTk9ERVMsIEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGJ1aWxkZXIuc2V0QnVpbGRQb2xpY3koRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT05MWV9SRVFVSVJFRF9DT05URU5UKTsKLSAgICAgICAgYnVpbGRlci5idWlsZChwYXJlbnQsIGNtbm9kZSk7Ci0gICAgICAgIGluc2VydE5vZGVzQXRJbmRleChwYXJlbnQsIGJ1aWxkZXIuZ2V0UmVzdWx0KCksIGluZGV4LCB0cnVlKTsKLSAgICAgIH0KLSAgICB9IAotCi0gICAgcHVibGljIHZvaWQgaW5zZXJ0Tm9kZXNBdEluZGV4KE5vZGUgcGFyZW50LCBMaXN0IGxpc3QsIGludCBpbmRleCwgYm9vbGVhbiBmb3JtYXQpCi0gICAgeyAgICAgICAgICAgICAgICAgICAKLSAgICAgIE5vZGVMaXN0IG5vZGVMaXN0ID0gcGFyZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaW5kZXggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgIH0KLSAgICAgIE5vZGUgcmVmQ2hpbGQgPSAoaW5kZXggPCBub2RlTGlzdC5nZXRMZW5ndGgoKSkgPyBub2RlTGlzdC5pdGVtKGluZGV4KSA6IG51bGw7Ci0gICAgCi0gICAgICAvLyBoZXJlIHdlIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHRoZSBwcmV2aW91cyBub2RlIGlzIGEgJ3doaXRlIHNwYWNlJyBUZXh0IG5vZGUKLSAgICAgIC8vIHdlIHNob3VsZCByZWFsbHkgZG8gdGhlIGluc2VydCBiZWZvcmUgdGhpcyBub2RlCi0gICAgICAvLwotICAgICAgaW50IHByZXZJbmRleCA9IGluZGV4IC0gMTsKLSAgICAgIE5vZGUgcHJldkNoaWxkID0gKHByZXZJbmRleCA8IG5vZGVMaXN0LmdldExlbmd0aCgpKSA/IG5vZGVMaXN0Lml0ZW0ocHJldkluZGV4KSA6IG51bGw7Ci0JICAgIGlmIChpc1doaXRlc3BhY2VUZXh0Tm9kZShwcmV2Q2hpbGQpKSAKLSAgICAgIHsKLQkgIAkgIHJlZkNoaWxkID0gcHJldkNoaWxkOwotCSAgICB9Ci0gICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbmV3Tm9kZSA9IChOb2RlKWkubmV4dCgpOwotICAgIAotICAgICAgICBpZiAobmV3Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuQVRUUklCVVRFX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSAoRWxlbWVudClwYXJlbnQ7Ci0gICAgICAgICAgcGFyZW50RWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlKChBdHRyKW5ld05vZGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmQ2hpbGQpOwotICAgICAgICB9ICAKLSAgICAgIH0KLSAgICAKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuZXdOb2RlID0gKE5vZGUpaS5uZXh0KCk7Ci0gICAgICAgIGlmIChmb3JtYXQpCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCSAgICAgIEZvcm1hdFByb2Nlc3NvclhNTCBmb3JtYXRQcm9jZXNzb3JYTUwgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0JCSAgICAgIGZvcm1hdFByb2Nlc3NvclhNTC5mb3JtYXROb2RlKChJRE9NTm9kZSluZXdOb2RlKTsKLSAgICAgICAgfSAgCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAvL3NldFZpZXdlclNlbGVjdGlvbihsaXN0KTsKLSAgICB9ICAgCi0JCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNXaGl0ZXNwYWNlVGV4dE5vZGUoTm9kZSBub2RlKSAKLSAgICB7Ci0JICAgIHJldHVybiAobm9kZSAhPSBudWxsKSAmJiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuVEVYVF9OT0RFKSAmJiAobm9kZS5nZXROb2RlVmFsdWUoKS50cmltKCkubGVuZ3RoKCkgPT0gMCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRCaW5kaW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTJhZDMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0QmluZGluZ0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIFBvcnQgcG9ydDsKLQlwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLQkKLQlwdWJsaWMgVzExU2V0QmluZGluZ0NvbW1hbmQoUG9ydCBwb3J0LCBCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfQklORElORywgcG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLnBvcnQgPSBwb3J0OwotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcocG9ydC5nZXRFbGVtZW50KCkpOwotCQkJcG9ydC5zZXRFQmluZGluZyhiaW5kaW5nKTsKLQotCQkJdXBkYXRlUG9ydFByb3RvY29sKHBvcnQsIGJpbmRpbmcpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlUG9ydFByb3RvY29sKFBvcnQgcG9ydCwgQmluZGluZyBiaW5kaW5nKSB7Ci0JCVN0cmluZyBiaW5kaW5nUHJvdG9jb2wgPSBnZXRCaW5kaW5nUHJvdG9jb2woYmluZGluZyk7Ci0JCWlmIChiaW5kaW5nUHJvdG9jb2wgIT0gbnVsbCkgewotCSAgICBXMTFFbmRQb2ludCBwb3J0UHJvdG9jb2wgPSBnZXRQb3J0UHJvdG9jb2wocG9ydCk7Ci0JICAgIGlmICgocG9ydFByb3RvY29sID09IG51bGwpIHx8ICEoYmluZGluZ1Byb3RvY29sLmVxdWFscyhwb3J0UHJvdG9jb2wuZ2V0UHJvdG9jb2woKSkpKSB7Ci0gICAgICAgIFN0cmluZyBwb3J0QWRkcmVzcyA9IG51bGw7Ci0JICAgICAgaWYgKHBvcnRQcm90b2NvbCAhPSBudWxsKSB7Ci0JICAgICAgICBwb3J0QWRkcmVzcyA9IHBvcnRQcm90b2NvbC5nZXRBZGRyZXNzKCk7Ci0JICAgICAgfQotCSAgICAgIGlmIChwb3J0QWRkcmVzcyA9PSBudWxsKSB7Ci0JICAgICAgICBwb3J0QWRkcmVzcyA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnIjsgLy8kTk9OLU5MUy0xJAotCSAgICAgIH0KLQkgICAgICAKLSAgICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgICAgIENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IGZhY3RvcnlSZWdpc3RyeS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lKGJpbmRpbmdQcm90b2NvbCk7Ci0gICAgICAgIGlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpIHsKLSAgICAgICAgICBjb250ZW50R2VuZXJhdG9yLnNldEFkZHJlc3NMb2NhdGlvbihwb3J0QWRkcmVzcyk7Ci0gICAgICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KHBvcnQpOwotICAgICAgICB9Ci0JICAgIH0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QmluZGluZ1Byb3RvY29sKEJpbmRpbmcgYmluZGluZykgewotICAgIE5vdGlmaWVyIG5vdGlmaWVyID0gKE5vdGlmaWVyKWJpbmRpbmc7Ci0gICAgQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobm90aWZpZXIpOwotICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgVzExQmluZGluZykgewotICAgICAgcmV0dXJuICgoVzExQmluZGluZylhZGFwdGVyKS5nZXRQcm90b2NvbCgpOwotICAgIH0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBXMTFFbmRQb2ludCBnZXRQb3J0UHJvdG9jb2woUG9ydCBwb3J0KSB7Ci0gICAgTm90aWZpZXIgbm90aWZpZXIgPSAoTm90aWZpZXIpcG9ydDsKLSAgICBBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChub3RpZmllcik7Ci0gICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotICAgICAgcmV0dXJuIChXMTFFbmRQb2ludClhZGFwdGVyOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEVsZW1lbnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNDk4N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRFbGVtZW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXRFbGVtZW50Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgUGFydCBwYXJlbnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgYWN0aW9uOwotCXByaXZhdGUgYm9vbGVhbiBjb250aW51ZUFwcGx5OwotCi0JcHVibGljIFcxMVNldEVsZW1lbnRDb21tYW5kKFBhcnQgcGFyZW50LCBTdHJpbmcgYWN0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX0VMRU1FTlQsIHBhcmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLnBhcmVudCA9IHBhcmVudDsKLQkJdGhpcy5hY3Rpb24gPSBhY3Rpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKQotCXsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJY29udGludWVBcHBseSA9IHRydWU7IAotCQkJaWYgKGFjdGlvbi5lcXVhbHMoSVBhcmFtZXRlci5TRVRfTkVXX0FDVElPTl9JRCkpCi0JCQl7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBuZXdWYWx1ZSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXROZXdEaWFsb2coKSk7Ci0KLQkJCQkvLyBTZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgbmV3IHR5cGUKLQkJCQlpZiAoY29udGludWVBcHBseSkKLQkJCQkJY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmVudCwgbmV3VmFsdWUpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gbmV3VmFsdWUgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbilpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCkpOwotCQkJCWlmIChjb250aW51ZUFwcGx5KQotCQkJCQljb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyZW50LCBuZXdWYWx1ZSk7Ci0JCQl9Ci0JCQlmb3JtYXRDaGlsZChwYXJlbnQuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBPYmplY3QgaW52b2tlRGlhbG9nKElDb21wb25lbnREaWFsb2cgZGlhbG9nKQotCXsKLQkJT2JqZWN0IG5ld1ZhbHVlID0gbnVsbDsKLQkJCi0JCWlmIChkaWFsb2cgPT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJCi0JCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykKLQkJewotCQkJbmV3VmFsdWUgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWNvbnRpbnVlQXBwbHkgPSBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1ZhbHVlOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKQotCXsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVzdWx0ID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpCi0JCXsKLQkJCXJlc3VsdCA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcillZGl0b3IuZ2V0QWRhcHRlcihYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotCQkJCi0JCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotCQkJewotCQkJCUludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgZWRpdG9yOwotCQkJCQotCQkJCUxpc3QgdHlwZXMgPSB3c2RsRWRpdG9yLmdldE1vZGVsKCkuZ2V0VHlwZXMoKTsKLQkJCQlYU0RTY2hlbWFbXSBzY2hlbWFzID0gbmV3IFhTRFNjaGVtYVt0eXBlcy5zaXplKCldOwotCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQkJCXNjaGVtYXNbaW5kZXhdID0gKFhTRFNjaGVtYSkgdHlwZS5nZXRUYXJnZXQoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJKChXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKSByZXN1bHQpLnNldFNjaGVtYXMoc2NoZW1hcyk7Ci0JCQkJCi0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJfSAgCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRJbnRlcmZhY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEludGVyZmFjZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4ODJkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEludGVyZmFjZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXRJbnRlcmZhY2VDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0JcHJpdmF0ZSBQb3J0VHlwZSBwb3J0VHlwZTsKLQkKLQlwdWJsaWMgVzExU2V0SW50ZXJmYWNlQ29tbWFuZChCaW5kaW5nIGJpbmRpbmcsIFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1BPUlRUWVBFLCBiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0JCXRoaXMucG9ydFR5cGUgPSBwb3J0VHlwZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGJpbmRpbmcuZ2V0RWxlbWVudCgpKTsKLQkJCWJpbmRpbmcuc2V0RVBvcnRUeXBlKHBvcnRUeXBlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhiaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRUeXBlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRUeXBlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZThmNjA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0VHlwZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXRUeXBlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgT2JqZWN0IHBhcmVudDsKLQlwcml2YXRlIFN0cmluZyBhY3Rpb247Ci0JcHJpdmF0ZSBib29sZWFuIGNvbnRpbnVlQXBwbHk7Ci0JCi0JcHVibGljIFcxMVNldFR5cGVDb21tYW5kKE9iamVjdCBwYXJlbnQsIFN0cmluZyBhY3Rpb24pIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfVFlQRSwgbnVsbCk7Ci0JCXRoaXMucGFyZW50ID0gcGFyZW50OwotCQl0aGlzLmFjdGlvbiA9IGFjdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0JewotCQl0cnkgewotCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJYmVnaW5SZWNvcmRpbmcoKChXU0RMRWxlbWVudCkgcGFyZW50KS5nZXRFbGVtZW50KCkpOwotCQkJfQotCi0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQljb250aW51ZUFwcGx5ID0gdHJ1ZTsgCi0JCQlpZiAoYWN0aW9uLmVxdWFscyhJUGFyYW1ldGVyLlNFVF9ORVdfQUNUSU9OX0lEKSkKLQkJCXsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIG5ld1ZhbHVlID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24paW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldE5ld0RpYWxvZygpKTsKLQotCQkJCS8vIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZXcgdHlwZQotCQkJCWlmIChjb250aW51ZUFwcGx5KQotCQkJCQljb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyZW50LCBuZXdWYWx1ZSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBuZXdWYWx1ZSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXRCcm93c2VEaWFsb2coKSk7Ci0JCQkJaWYgKGNvbnRpbnVlQXBwbHkpCi0JCQkJCWNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJlbnQsIG5ld1ZhbHVlKTsKLQkJCX0KLQotCQkJLy8gRm9ybWF0Ci0JCQlpZiAocGFyZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlmb3JtYXRDaGlsZCgoKFdTRExFbGVtZW50KSBwYXJlbnQpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkgewotCQkJCWZvcm1hdENoaWxkKCgoWFNEQ29uY3JldGVDb21wb25lbnQpIHBhcmVudCkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJCWVuZFJlY29yZGluZygoKFdTRExFbGVtZW50KSBwYXJlbnQpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBPYmplY3QgaW52b2tlRGlhbG9nKElDb21wb25lbnREaWFsb2cgZGlhbG9nKQotCXsKLQkJT2JqZWN0IG5ld1ZhbHVlID0gbnVsbDsKLQkJCi0JCWlmIChkaWFsb2cgPT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJCi0JCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykKLQkJewotCQkJbmV3VmFsdWUgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWNvbnRpbnVlQXBwbHkgPSBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1ZhbHVlOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKQotCXsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVzdWx0ID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpCi0JCXsKLQkJCXJlc3VsdCA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcillZGl0b3IuZ2V0QWRhcHRlcihYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotCQkJCi0JCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotCQkJewotCQkJCUludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgZWRpdG9yOwotCQkJCQotCQkJCUxpc3QgdHlwZXMgPSB3c2RsRWRpdG9yLmdldE1vZGVsKCkuZ2V0VHlwZXMoKTsKLQkJCQlYU0RTY2hlbWFbXSBzY2hlbWFzID0gbmV3IFhTRFNjaGVtYVt0eXBlcy5zaXplKCldOwotCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQkJCXNjaGVtYXNbaW5kZXhdID0gKFhTRFNjaGVtYSkgdHlwZS5nZXRUYXJnZXQoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJKChXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKSByZXN1bHQpLnNldFNjaGVtYXMoc2NoZW1hcyk7Ci0JCQkJCi0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJfSAgCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVRvcExldmVsRWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2ZTUxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVRvcExldmVsRWxlbWVudENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yLlcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MID0gInhtbCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotICBwdWJsaWMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZChTdHJpbmcgbGFiZWwsIERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHN1cGVyKGxhYmVsKTsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBiZWdpblJlY29yZGluZyhPYmplY3QgZWxlbWVudCkgewotCSAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkgICgoSURPTU5vZGUpIGVsZW1lbnQpLmdldE1vZGVsKCkuYmVnaW5SZWNvcmRpbmcodGhpcywgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkpOwotCSAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBlbmRSZWNvcmRpbmcoT2JqZWN0IGVsZW1lbnQpIHsKLQkgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSURPTU5vZGUpIHsKLQkJICAoKElET01Ob2RlKSBlbGVtZW50KS5nZXRNb2RlbCgpLmVuZFJlY29yZGluZyh0aGlzKTsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKSB7Ci0JICByZXR1cm4gZ2V0TGFiZWwoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZm9ybWF0Q2hpbGQoRWxlbWVudCBjaGlsZCkKLSAgewotICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgIHsKLSAgICAgIElET01Nb2RlbCBtb2RlbCA9ICgoSURPTU5vZGUpY2hpbGQpLmdldE1vZGVsKCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gdGVsbCB0aGUgbW9kZWwgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gbWFrZSBhIGJpZyBtb2RlbCBjaGFuZ2UKLSAgICAgICAgbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0gICAgICAgIAotICAgICAgICBJU3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvciBmb3JtYXRQcm9jZXNzb3IgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0gICAgICAgIGZvcm1hdFByb2Nlc3Nvci5mb3JtYXROb2RlKGNoaWxkKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgLy8gdGVsbCB0aGUgbW9kZWwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBiaWcgbW9kZWwgY2hhbmdlCi0gICAgICAgIG1vZGVsLmNoYW5nZWRNb2RlbCgpOyAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKLSAgewotICAgIGVuc3VyZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gZ2V0TmV3WFNERWxlbWVudChYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCkgeyAKLQkgIFcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IoKTsKLQkgIHJldHVybiB2aXNpdG9yLmdldElubmVyWFNERWxlbWVudCh4c2RFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBlbnN1cmVEZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotCi0gICAgRWxlbWVudCBkZWZpbml0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgIGlmIChkZWZpbml0aW9uc0VsZW1lbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZ2V0RGVmYXVsdE5hbWVzcGFjZShkZWZpbml0aW9uKTsKLSAgICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKG51bGwsIGdldEZpbGVOYW1lKGRlZmluaXRpb24pKSk7Ci0gICAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoIndzZGwiLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotICAgICAgLy8gTW92aW5nIHRoZXNlIGFib3ZlIHVwZGF0ZUVsZW1lbnQoKSBzZWVtcyB0byBjYXVzZSBncmllZiB3aXRoIHRoZSBtb2RlbC4KLSAgICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ0bnMiLCB0YXJnZXROYW1lc3BhY2UpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgieHNkIiwgV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGRlZmluaXRpb25zRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIH0KLQotICAgIGVuc3VyZVhNTERpcmVjdGl2ZShkb2N1bWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGVuc3VyZVhNTERpcmVjdGl2ZShEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIGlmIChoYXNYTUxEaXJlY3RpdmUoZG9jdW1lbnQpKQotICAgIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSBmaXJzdENoaWxkID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiB4bWxEZWNsYXJhdGlvbiA9IGdldFhNTERlY2xhcmF0aW9uKGRvY3VtZW50KTsKLSAgICBkb2N1bWVudC5pbnNlcnRCZWZvcmUoeG1sRGVjbGFyYXRpb24sIGZpcnN0Q2hpbGQpOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc1hNTERpcmVjdGl2ZShEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgIAotICAgIGlmIChmaXJzdENoaWxkID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoZmlyc3RDaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHByb2Nlc3NpbmdJbnN0cnVjdGlvbiAgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKWZpcnN0Q2hpbGQ7Ci0gICAgCi0gICAgaWYgKCFwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uZ2V0VGFyZ2V0KCkuZXF1YWxzKFhNTCkpIAotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZ2V0WE1MRGVjbGFyYXRpb24oRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAgICBTdHJpbmcgY2hhclNldCA9IHByZWZlcmVuY2UuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLSAgICBpZiAoY2hhclNldCA9PSBudWxsIHx8IGNoYXJTZXQudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBjaGFyU2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24geG1sRGVjbGFyYXRpb24gPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oWE1MLCAidmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIiArIGNoYXJTZXQgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgcmV0dXJuIHhtbERlY2xhcmF0aW9uOwotICAgIAotICB9Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKFdTRExFZGl0b3JQbHVnaW4uREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFX0lEKTsKLQotICAgIGlmICghbmFtZXNwYWNlLmVuZHNXaXRoKCIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29uY2F0KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBuYW1lc3BhY2UgKz0gZ2V0RmlsZU5hbWUoZGVmaW5pdGlvbikgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGaWxlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotICAgIElQYXRoIGZpbGVQYXRoID0gbmV3IFBhdGgoZmlsZUxvY2F0aW9uKTsKLSAgICByZXR1cm4gZmlsZVBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFVcGRhdGVJbXBvcnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVVwZGF0ZUltcG9ydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBiZjBmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVVwZGF0ZUltcG9ydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFVwZGF0ZXMgYSBpbXBvcnQncyBwcm9wZXJ0aWVzOiBuYW1lc3BhY2VVUkksIGxvY2F0aW9uVVJJIGFuZCBwb3RlbnRpYWxseSBjcmVhdGVzIGEgdW5pcXVlIHByZWZpeC4KLSAqLwotcHVibGljIGNsYXNzIFcxMVVwZGF0ZUltcG9ydENvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgSW1wb3J0IHRoZUltcG9ydDsKLQotICBwcml2YXRlIFN0cmluZyBwcmVmaXg7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYXRpb25VUkk7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlVVJJOwotCi0gIHB1YmxpYyBXMTFVcGRhdGVJbXBvcnRDb21tYW5kKEltcG9ydCB0aGVJbXBvcnQsIFN0cmluZyBsb2NhdGlvblVSSSwgU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIHByZWZpeCkKLSAgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fVVBEQVRFX0lNUE9SVCwgdGhlSW1wb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgdGhpcy50aGVJbXBvcnQgPSB0aGVJbXBvcnQ7Ci0gICAgdGhpcy5uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7Ci0gICAgdGhpcy5sb2NhdGlvblVSSSA9IGxvY2F0aW9uVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0gIHsKLSAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRPRE8gdmIgUmVmYWN0b3IgYWxsIGNvbW1hbmRzIHRvIHB1c2ggdGhlIGJlZ2luL2VuZCByZWNvcmRpbmcgaW50byB0aGUgYmFzZSBjbGFzcwotICAgICAgLy8gYW5kIGltcGxlbWVudCB0aGUgYmFzZSBjbGFzcycgbWV0aG9kIGFzIGEgdGVtcGxhdGUgbWV0aG9kIGRvRXhlY3V0ZSB0byBkbyBhbGwgdGhlIHdvcmsuCi0KLSAgICAgIGJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb25FbGVtZW50KTsKLQotICAgICAgdGhlSW1wb3J0LnNldExvY2F0aW9uVVJJKGxvY2F0aW9uVVJJKTsKLSAgICAgIAotICAgICAgLy8gVE9ETyB2YiBUaGVyZSdzIGEgbGltaXRhdGlvbiBpbiB0aGUgV1NETCBFTUYgbW9kZWwgd2hlcmUgdGhlIG5hbWVzcGFjZXMgbWFwIGlzIG5vdAotICAgICAgLy8gcHJvcGVybHkgcmVjb25jaWxpbmcgd2l0aCB0aGUgRE9NLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBjb2RlIGhlcmUgdXBkYXRlcyB0aGUgCi0gICAgICAvLyB1bmRlcmx5aW5nIERPTSBkaXJlY3RseS4KLSAgICAgIAotICAgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgcHJlZml4IGlzIG9uIG5vdCBhIHByb3BlcnR5IG9mIHRoZSBpbXBvcnQgb2JqZWN0IGFsc28gY2F1c2VzCi0gICAgICAvLyBzb21lIGlzc3VlcyB3aXRoIGhvdyB0aGUgcHJvcGVydGllcyBpbXBvcnQgc2VjdGlvbiBpcyByZWZyZXNoZWQgb24gdW5kby9yZWRvLiAKLSAgICAgIC8vIEJlY2F1c2Ugb2YgdGhpcywgdGhlIHByZWZpeCB1cGRhdGluZyBpcyBkb25lIGJldHdlZW4gdGhlIGxvY2F0aW9uIGFuZCBuYW1lc3BhY2UgdXBkYXRlLiAKLSAgICAgIAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gdGhlSW1wb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBleGlzdGluZ1ByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgIGlmIChleGlzdGluZ1ByZWZpeCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHVuaXF1ZVByZWZpeCA9IGdldEltcG9ydFByZWZpeCgpOwotICAgICAgICAgIGRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHVuaXF1ZVByZWZpeCwgbmFtZXNwYWNlVVJJKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHRoZUltcG9ydC5zZXROYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKTsKLQotICAgICAgKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBlbmRSZWNvcmRpbmcoZGVmaW5pdGlvbkVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW1wb3J0UHJlZml4KCkKLSAgewotICAgIFN0cmluZyB1bmlxdWVQcmVmaXg7Ci0KLSAgICBpZiAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4LnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgVVJJIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGxvY2F0aW9uVVJJLCBmYWxzZSk7Ci0gICAgICB1bmlxdWVQcmVmaXggPSBnZXRVbmlxdWVQcmVmaXgoZGVmaW5pdGlvbiwgdXJpLmZpbGVFeHRlbnNpb24oKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB1bmlxdWVQcmVmaXggPSBwcmVmaXg7Ci0gICAgfQotICAgIHJldHVybiB1bmlxdWVQcmVmaXg7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRVbmlxdWVQcmVmaXgoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgaW5pdFByZWZpeCkKLSAgewotICAgIFN0cmluZyB1bmlxdWVQcmVmaXg7Ci0gICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCi0gICAgaWYgKGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKGluaXRQcmVmaXgpID09IG51bGwpCi0gICAgewotICAgICAgdW5pcXVlUHJlZml4ID0gaW5pdFByZWZpeDsKLSAgICB9Ci0gICAgZWxzZQotICAgIC8vIGlmIHVzZWQsIHRoZW4gdHJ5IHRvIGNyZWF0ZSBhIHVuaXF1ZSBvbmUKLSAgICB7Ci0gICAgICBTdHJpbmcgdGVtcFByZWZpeCA9IGluaXRQcmVmaXg7Ci0gICAgICBpbnQgaSA9IDE7Ci0gICAgICB3aGlsZSAobWFwLmNvbnRhaW5zS2V5KHRlbXBQcmVmaXggKyBpKSkKLSAgICAgIHsKLSAgICAgICAgaSsrOwotICAgICAgfQotICAgICAgdW5pcXVlUHJlZml4ID0gdGVtcFByZWZpeCArIGk7Ci0gICAgfQotICAgIHJldHVybiB1bmlxdWVQcmVmaXg7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMzZmYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlciBleHRlbmRzIFcxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcgotewotICAvLyBUT0RPLi4uIG1ha2UgdGhpcyBjbGFzcyBhYnN0cmFjdCBhbmQgcHJvdmlkZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgaW4KLSAgLy8gU09BUCBhbmQgSFRUUCBwYWNrYWdlcy4gVGhlIFdTRExBZGFwdGVyRmFjdG9yeSBuZWVkcyB0byBrbm93IHRvIGRlbGVnYXRlIHRvIGV4dGVuc2lvbgotICAvLyBhZGFwdGVycyB0byBzdXBwb3J0IHRoZSBhZGRpdGlvbiBvZiBtb3JlIGV4dGVuc2lvbiBsYW5ndWFnZXMKLSAgLy8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpCi0gIHsKLSAgICBTdHJpbmcgYWRkcmVzcyA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgIHsKLSAgICAgIGFkZHJlc3MgPSAoKFNPQVBBZGRyZXNzKSB0YXJnZXQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgIHsKLSAgICAgIGFkZHJlc3MgPSAoKEhUVFBBZGRyZXNzKSB0YXJnZXQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBhZGRyZXNzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIGFkZHJlc3MpCi0gIHsKLSAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgewotICAgICAgKChTT0FQQWRkcmVzcykgdGFyZ2V0KS5zZXRMb2NhdGlvblVSSShhZGRyZXNzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgewotICAgICAgKChIVFRQQWRkcmVzcykgdGFyZ2V0KS5zZXRMb2NhdGlvblVSSShhZGRyZXNzKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3NwZWNpYWxpemVkL1cxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGQ0ZmI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIKLXsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWE1MjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotCi0vKgotICogQ2xhc3MgdXNlZCB0byBmaW5kIGFuZCByZXR1cm4gdGhlICJpbm5lciIgWFNERWxlbWVudCB3aGVuIGdpdmVuIGFuIFhTREVsZW1lbnQuCi0gKiBUaGlzIGNsYXNzIGV4dGVuZHMgVzExWFNEVmlzaXRvciB3aGljaCByZW1vdmVzIHRoZSBuZWVkIGZvciB0aGlzIGNsYXNzIHRvIHJlaW1wbGVtZW50Ci0gKiB0aGUgYWN0dWFsIHRyYXZlcnNhbCBvZiB0aGUgWFNEIE1vZGVsIHRvIGxvY2F0ZSB0aGUgaW5uZXIgWFNERWxlbWVudC4KLSAqIAotICogQnkgZGVmYXVsdCwgdGhpcyBjbGFzcyB3aWxsIGxvY2F0ZSB0aGUgaW5uZXIgWFNERWxlbWVudCBhdCBkZXB0aCAyLiAgSG93ZXZlciwgdGhpcyBkZXB0aAotICogY2FuIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBzZXRFbGVtZW50RGVwdGgobmV3RGVwdGgpLgotICovCi1wdWJsaWMgY2xhc3MgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgZXh0ZW5kcyBXMTFYU0RWaXNpdG9yIHsKLQkgIHByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudEF0RGVwdGg7Ci0JICBwcm90ZWN0ZWQgaW50IGVsZW1lbnREZXB0aCA9IDI7Ci0JICBwcm90ZWN0ZWQgaW50IGRlcHRoID0gMTsKLQkgIAotCSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRJbm5lclhTREVsZW1lbnQoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsKLQkJICBlbGVtZW50QXREZXB0aCA9IHhzZEVsZW1lbnQ7Ci0JCSAgZGVwdGggPSAxOwotCQkgIHZpc2l0RWxlbWVudERlY2xhcmF0aW9uKHhzZEVsZW1lbnQpOwotCQkgIAotCQkgIHJldHVybiBlbGVtZW50QXREZXB0aDsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpIHsKLQkJICBpZiAoZGVwdGggPT0gZWxlbWVudERlcHRoKSB7Ci0JCQkgIGVsZW1lbnRBdERlcHRoID0gZWxlbWVudDsKLQkJICB9Ci0JCSAgZGVwdGgrKzsKLQkJICAKLQkJICBzdXBlci52aXNpdEVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0RWxlbWVudERlcHRoKGludCBlbGVtZW50RGVwdGgpIHsKLQkJICB0aGlzLmVsZW1lbnREZXB0aCA9IGVsZW1lbnREZXB0aDsgCi0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlOTI0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROb3RhdGlvbkRlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEV2lsZGNhcmQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFYU0RWaXNpdG9yCi17Ci0gIHB1YmxpYyBXMTFYU0RWaXNpdG9yKCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIHNjaGVtYTsKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ciA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSAoWFNEVHlwZURlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0VHlwZURlZmluaXRpb24odHlwZSk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbiBpZGVudGl0eUNvbnN0cmFpbnQgPSAoWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9uKGlkZW50aXR5Q29uc3RyYWludCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0TW9kZWxHcm91cERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdE1vZGVsR3JvdXBEZWZpbml0aW9uKG1vZGVsR3JvdXApOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyaWJ1dGVHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJpYnV0ZUdyb3VwKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXROb3RhdGlvbkRlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNETm90YXRpb25EZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTRE5vdGF0aW9uRGVjbGFyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0Tm90YXRpb25EZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICB9Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpCi0gIHsKLSAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0U2ltcGxlVHlwZURlZmluaXRpb24oKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKXR5cGUpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pdHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpCi0gICAgewotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdFR5cGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb24oWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbiBpZGVudGl0eUNvbnN0cmFpbnQpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwRGVmaW5pdGlvbihYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiBtb2RlbEdyb3VwRGVmKQotICB7Ci0gICAgaWYgKCFtb2RlbEdyb3VwRGVmLmlzTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICB7Ci0gICAgICBpZiAobW9kZWxHcm91cERlZi5nZXRNb2RlbEdyb3VwKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRNb2RlbEdyb3VwKG1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IG1vZGVsR3JvdXBEZWYuZ2V0UmVzb2x2ZWRNb2RlbEdyb3VwRGVmaW5pdGlvbigpLmdldE1vZGVsR3JvdXAoKTsKLSAgICAgIGlmIChtb2RlbEdyb3VwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0cmlidXRlR3JvdXApCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYXR0cmlidXRlR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBPYmplY3QgbyA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVVc2UgYXR0clVzZSA9IChYU0RBdHRyaWJ1dGVVc2UpbzsKLSAgICAgICAgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyVXNlLmdldENvbnRlbnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0ckdyb3VwID0gKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbilvOwotICAgICAgICB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihhdHRyR3JvdXApOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXROb3RhdGlvbkRlY2xhcmF0aW9uKFhTRE5vdGF0aW9uRGVjbGFyYXRpb24gbm90YXRpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRTaW1wbGVUeXBlRGVmaW5pdGlvbihYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgaWYgKHR5cGUuZ2V0Q29udGVudCgpICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhDb250ZW50ID0gdHlwZS5nZXRDb250ZW50KCk7Ci0gICAgICBpZiAoY29tcGxleENvbnRlbnQgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgdmlzaXRTaW1wbGVUeXBlRGVmaW5pdGlvbigoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pY29tcGxleENvbnRlbnQpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY29tcGxleENvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRQYXJ0aWNsZSgoWFNEUGFydGljbGUpIGNvbXBsZXhDb250ZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0UGFydGljbGUoWFNEUGFydGljbGUgcGFydGljbGUpCi0gIHsKLSAgICB2aXNpdFBhcnRpY2xlQ29udGVudChwYXJ0aWNsZS5nZXRDb250ZW50KCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBhcnRpY2xlQ29udGVudChYU0RQYXJ0aWNsZUNvbnRlbnQgcGFydGljbGVDb250ZW50KQotICB7Ci0gICAgaWYgKHBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0TW9kZWxHcm91cERlZmluaXRpb24oKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKSBwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKQotICAgIHsKLSAgICAgIHZpc2l0TW9kZWxHcm91cCgoWFNETW9kZWxHcm91cClwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RXaWxkY2FyZCkKLSAgICB7Ci0gICAgICB2aXNpdFdpbGRjYXJkKChYU0RXaWxkY2FyZClwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCkKLSAgewotICAgIGlmIChtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbW9kZWxHcm91cC5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIHZpc2l0UGFydGljbGUocGFydGljbGUpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRXaWxkY2FyZChYU0RXaWxkY2FyZCB3aWxkY2FyZCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvckZvckZpZWxkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3JGb3JGaWVsZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNmRkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvckZvckZpZWxkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMgZXh0ZW5kcyBXMTFYU0RWaXNpdG9yCi17Ci0gIHB1YmxpYyBXMTFYU0RWaXNpdG9yRm9yRmllbGRzKCkKLSAgewotICB9Ci0KLSAgTGlzdCBjb25jcmV0ZUNvbXBvbmVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIExpc3QgdGhpbmdzV2VOZWVkVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgc3VwZXIudmlzaXRDb21wbGV4VHlwZURlZmluaXRpb24odHlwZSk7Ci0gICAgaWYgKHR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IHR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQgYXR0ckdyb3VwQ29udGVudCA9IChYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQpaXRlci5uZXh0KCk7Ci0gICAgICAgIGlmIChhdHRyR3JvdXBDb250ZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWF0dHJHcm91cENvbnRlbnQ7Ci0gICAgICAgICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChhdHRyVXNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChhdHRyR3JvdXBDb250ZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIGF0dHJHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pYXR0ckdyb3VwQ29udGVudDsKLSAgICAgICAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChhdHRyR3JvdXApOwotICAgICAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJHcm91cCk7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCkKLSAgewotICAgIHN1cGVyLnZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwKTsKLSAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChtb2RlbEdyb3VwKTsgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyaWJ1dGVHcm91cCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBhdHRyaWJ1dGVHcm91cC5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICB7Ci0gICAgICAgIFhTREF0dHJpYnV0ZVVzZSBhdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKW87Ci0gICAgICAgIGNvbmNyZXRlQ29tcG9uZW50TGlzdC5hZGQoYXR0cmlidXRlVXNlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyR3JvdXAgPSAoWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKW87Ci0gICAgICAgIHRoaW5nc1dlTmVlZFRvTGlzdGVuVG8uYWRkKGF0dHJHcm91cCk7Ci0gICAgICAgIGlmIChhdHRyR3JvdXAuaXNBdHRyaWJ1dGVHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICAgICAgewotICAgICAgICAgIGF0dHJHcm91cCA9IGF0dHJHcm91cC5nZXRSZXNvbHZlZEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbigpOwotICAgICAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJHcm91cCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkKLSAgewotICAgIC8vc3VwZXIudmlzaXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0gICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChlbGVtZW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyKQotICB7Ci0gICAgc3VwZXIudmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyKTsKLSAgICBjb25jcmV0ZUNvbXBvbmVudExpc3QuYWRkKGF0dHIpOwotICB9Ci0KLQotICBwdWJsaWMgTGlzdCBnZXRDb25jcmV0ZUNvbXBvbmVudExpc3QoKQotICB7Ci0gICAgcmV0dXJuIGNvbmNyZXRlQ29tcG9uZW50TGlzdDsKLSAgfQotCi0KLSAgcHVibGljIExpc3QgZ2V0VGhpbmdzV2VOZWVkVG9MaXN0ZW5UbygpCi0gIHsKLSAgICByZXR1cm4gdGhpbmdzV2VOZWVkVG9MaXN0ZW5UbzsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q1ODdjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuWFNEQ29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCAgICAgPSAwOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfRUxFTUVOVCAgICAgICAgICAgICAgICAgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfQ09NUExFWFRZUEVfU0VRX0VMRU1FTlQgPSAyOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfQ09NUExFWFRZUEUgICAgICAgICAgICAgPSAzOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfU0lNUExFVFlQRQkJCSAgID0gNDsKLQotCXByb3RlY3RlZCBpbnQgc3R5bGUgPSAwOwotCXByb3RlY3RlZCBPcGVyYXRpb24gb3BlcmF0aW9uOwotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gbmV3WFNERWxlbWVudDsKLQlwcm90ZWN0ZWQgUGFydCBuZXdQYXJ0OwotCQotCXByb3RlY3RlZCBTdHJpbmcgbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWU7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdYU0RFbGVtZW50TmFtZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld1dTRExNZXNzYWdlTmFtZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld1dTRExQYXJ0TmFtZTsKLQkKLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLQlwdWJsaWMgYWJzdHJhY3QgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCi0JcHVibGljIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSkgewotCQl0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQkJdGhpcy5zdHlsZSA9IHN0eWxlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTdHlsZShpbnQgc3R5bGUpIHsKLQkJdGhpcy5zdHlsZSA9IHN0eWxlOwotCX0KLQkKLQlwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpIHsKLQkJcmV0dXJuIG5ld1hTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzUGFydEVsZW1lbnRSZWZlcmVuY2UoKSB7Ci0JCWlmIChzdHlsZSA9PSBQQVJUX0VMRU1FTlQgfHwgc3R5bGUgPT0gUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4oUGFydCBwYXJ0LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCQotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gb3JpZ2luYWxFbGVtZW50ID0gbnVsbDsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGFub25YU0RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCS8vIENyZWF0ZSB0aGUgWFNERWxlbWVudCAoYW5vbnltb3VzKSByZWZlcmVuY2VkIGJ5IHRoZSBQYXJ0IGlmIG5lY2Vzc2FyeQotCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCB8fCBwYXJ0RWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpID09IG51bGwgfHwgcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJYW5vblhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlQW5vbnltb3VzWFNERWxlbWVudERlZmluaXRpb24oZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCksIHBhcnQpOwotLy8JCQlwYXJ0LnNldEVsZW1lbnREZWNsYXJhdGlvbihhbm9uWFNERWxlbWVudCk7Ci0JCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBhbm9uWFNERWxlbWVudCk7Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCXBhcnQuc2V0VHlwZURlZmluaXRpb24obnVsbCk7Ci0JCQkKLQkJCWlmIChwYXJ0RWxlbWVudCAhPSBudWxsICYmIHBhcnRFbGVtZW50LmdldFNjaGVtYSgpICE9IG51bGwpIHsKLQkJCQlvcmlnaW5hbEVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJCQkvLyBSZW1vdmUgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBhcyBhIEdsb2JhbCBFbGVtZW50Ci0JCQkJcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydEVsZW1lbnQpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJYW5vblhTREVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJfQotCQkKLQkJLy8gQWRkIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgaWYgaXQncyB0eXBlIHdhc24ndCBhbm9ueW1vdXMKLQkJaWYgKG9yaWdpbmFsRWxlbWVudCAhPSBudWxsKSB7Ci0JCQlYU0RDb21wb25lbnRIZWxwZXIuYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgb3JpZ2luYWxFbGVtZW50KTsKLQkJfQotCQkKLQkJLy8gQ3JlYXRlIGEgbmV3IFhTREVsZW1lbnQKLQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRE1vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCQkKLQkJLy8gQWRkIHRoZSBuZXdseSBjcmVhdGVkIFhTREVsZW1lbnQgdG8gdGhlIE1vZGVsR3JvdXAKLQkJWFNEQ29tcG9uZW50SGVscGVyLmFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHJldHVybmVkWFNERWxlbWVudCk7Ci0KLQkJZm9ybWF0Q2hpbGQoYW5vblhTREVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLQkJcmV0dXJuIHJldHVybmVkWFNERWxlbWVudDsKLQl9Ci0JCi0JcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVQYXJ0RWxlbWVudFJlZmVyZW5jZUNvbXBvbmVudHMoUGFydCBwYXJ0KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiByZXR1cm5lZFhTREVsZW1lbnQgPSBudWxsOwotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkKLQkJaWYgKHN0eWxlID09IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihwYXJ0LCBwYXJ0RWxlbWVudCk7Ci0JCX0KLQkJZWxzZSBpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UKSB7Ci0JCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCkgewotCQkJCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgcGFydCk7Ci0JCQkJaWYgKHJldHVybmVkWFNERWxlbWVudCAhPSBudWxsICYmICFyZXR1cm5lZFhTREVsZW1lbnQuZXF1YWxzKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkpKSB7Ci0vLwkJCQkJcGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocmV0dXJuZWRYU0RFbGVtZW50KTsKLQkJCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgcmV0dXJuZWRYU0RFbGVtZW50KTsKLQkJCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihwYXJ0LCBwYXJ0RWxlbWVudCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlUGFydENvbXBsZXhUeXBlUmVmZXJlbmNlKFBhcnQgcGFydCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcmV0dXJuZWRYU0RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCWlmIChzdHlsZSA9PSBQQVJUX0NPTVBMRVhUWVBFX1NFUV9FTEVNRU5UKSB7Ci0JCQlYU0RUeXBlRGVmaW5pdGlvbiBvcmlnaW5hbFR5cGUgPSBudWxsOwotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHRvcExldmVsVHlwZSA9IG51bGw7Ci0JCQkKLQkJCS8vIENyZWF0ZSB0aGUgQ29tcGxleFR5cGUgcmVmZXJlbmNlZCBieSB0aGUgUGFydCBpZiBuZWNlc3NhcnkKLQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCB8fCBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNEU2NoZW1hKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCQlTdHJpbmcgdG9wTGV2ZWxOYW1lID0gTmFtZVV0aWwuZ2V0WFNEQ29tcGxleFR5cGVOYW1lKHBhcnQuZ2V0TmFtZSgpLCBzY2hlbWEpOwotCQkJCXRvcExldmVsVHlwZSA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbih0b3BMZXZlbE5hbWUsIHBhcnQpOwotCQkJCQotCQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotCQkJCQlvcmlnaW5hbFR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXsKLQkJCQl0b3BMZXZlbFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQl9CQkJCi0JCQkKLQkJCS8vIENyZWF0ZSBhIG5ldyBYU0RFbGVtZW50Ci0JCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNETW9kZWxHcm91cCh0b3BMZXZlbFR5cGUpOwotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCQkJCi0JCQkvLyBBZGQgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBpZiBpdCdzIHR5cGUgd2Fzbid0IGFub255bW91cwotCQkJaWYgKG9yaWdpbmFsVHlwZSAhPSBudWxsKSB7Ci0JCQkJLy8gQ3JlYXRlIGFub3RoZXIgbmV3IFhTREVsZW1lbnQgdG8gJ2NvbnRhaW4nIHRoZSBvcmlnaW5hbGx5IHJlZmVyZW5jZWQgWFNEU2ltcGxlVHlwZQotCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBvcmlnWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQkJCQlvcmlnWFNERWxlbWVudC5zZXRUeXBlRGVmaW5pdGlvbihvcmlnaW5hbFR5cGUpOwotCQkJfQotCQkJCi0JCQkvLyBDaGFuZ2UgUGFydCByZWZlcmVuY2UKLS8vCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbih0b3BMZXZlbFR5cGUpOwotCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgdG9wTGV2ZWxUeXBlKTsKLQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIHByZWZpeGVkTmFtZSk7Ci0JCQlmb3JtYXRDaGlsZCh0b3BMZXZlbFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQllbHNlIGlmIChzdHlsZSA9PSBQQVJUX0NPTVBMRVhUWVBFKSB7Ci0JCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSBudWxsOwotCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSA9PSBudWxsKSB7Ci0JCQkJLy8gQ3JlYXRlIGEgbmV3IENvbXBsZXhUeXBlCi0JCQkJWFNEU2NoZW1hIHNjaGVtYSA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RTY2hlbWEocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJCVN0cmluZyBjb21wbGV4TmFtZSA9IE5hbWVVdGlsLmdldFhTRENvbXBsZXhUeXBlTmFtZShwYXJ0LmdldE5hbWUoKSwgc2NoZW1hKTsKLQkJCQljb21wbGV4VHlwZSA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbihjb21wbGV4TmFtZSwgcGFydCk7Ci0JCQkJCi0JCQkJLy8gQ3JlYXRlIGFuIFhTREVsZW1lbnQgZm9yIHRoZSBDb21wbGV4VHlwZQotCQkJCVhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RNb2RlbEdyb3VwKGNvbXBsZXhUeXBlKTsKLQkJCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChudWxsLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgeHNkTW9kZWxHcm91cCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBUT0RPOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlLi4uLi4gIFdlIGNhbiBkZWZhdWx0IHRvIHRoZSBQQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQgc3R5bGUKLQkJCQkvLyBzaW5jZSBpdCBoYW5kbGVzICdtdWx0aXBsZScgWFNERWxlbWVudHMuLi4uIE9SIC4uLi4uIHdlIGNhbiAnb3ZlcndyaXRlIGFuZCBzZXQgYSBuZXcKLQkJCQkvLyBYU0RFbGVtZW50Ci0JCQl9Ci0JCQkKLQkJCWlmIChjb21wbGV4VHlwZSAhPSBudWxsICYmICFjb21wbGV4VHlwZS5lcXVhbHMocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpKSkgewotLy8JCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbihjb21wbGV4VHlwZSk7Ci0JCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgY29tcGxleFR5cGUpOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIHByZWZpeGVkTmFtZSk7Ci0JCQkJZm9ybWF0Q2hpbGQoY29tcGxleFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJCX0JCi0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQkKLQkvKgotCSAqIENyZWF0ZSBpZiBuZWNlc3NhcnkgYSBNZXNzYWdlIGFuZCBQYXJ0IGZvciB0aGUgZ2l2ZW4gTWVzc2FnZVJlZmVyZW5jZQotCSAqIGFuZCByZXR1cm4gaXQncyBQYXJ0Ci0JICovCi0JcHJvdGVjdGVkIFBhcnQgY3JlYXRlV1NETENvbXBvbmVudHMoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JCU1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQkJCi0JCWlmIChtZXNzYWdlID09IG51bGwgfHwgbWVzc2FnZS5lQ29udGFpbmVyKCkgPT0gbnVsbCkgewotCQkJLy8gQ3JlYXRlIE1lc3NhZ2UKLQkJCUFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQobWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGdldFdTRExNZXNzYWdlTmFtZSgpKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCW1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UobWVzc2FnZSk7Ci0JCX0KLQkJCi0JCWlmIChtZXNzYWdlLmdldEVQYXJ0cygpLnNpemUoKSA9PSAwKSB7Ci0JCQkvLyBDcmVhdGUgUGFydAotCQkJU3RyaW5nIHBhcnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCQlpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJcGFydE5hbWUgPSBnZXREb2NMaXRXcmFwcGVkUGFydE5hbWUoKTsKLQkJCX0KLQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCXBhcnQgPSAoUGFydCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gdGhlcmUgaXMgYW4gZXhpc3RpbmcgUGFydAotLy8JCQlwYXJ0ID0gKFBhcnQpIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQl9Ci0JCWZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQkJCi0JCXJldHVybiBwYXJ0OwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERvY0xpdFdyYXBwZWRQYXJ0TmFtZSgpIHsKLQkJcmV0dXJuICJwYXJhbWV0ZXJzIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlWFNET2JqZWN0cyhQYXJ0IHBhcnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCWlmIChpc1BhcnRFbGVtZW50UmVmZXJlbmNlKCkpIHsKLQkJCS8vIElzIGEgUGFydCAtLT4gRWxlbWVudCByZWZlcmVuY2UKLQkJCWlmIChwYXJ0ID09IG51bGwgJiYgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpICE9IG51bGwgJiYgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCXBhcnQgPSAoUGFydCkgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQkJfQotCQkJCi0JCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBjcmVhdGVQYXJ0RWxlbWVudFJlZmVyZW5jZUNvbXBvbmVudHMocGFydCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBJcyBhIFBhcnQgLS0+IENvbXBsZXggVHlwZSByZWZlcmVuY2UKLS8vCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydENvbXBsZXhUeXBlUmVmZXJlbmNlKHBhcnQpOwotCQkJCi0JCQkvLyBJZiBpdCdzIGEgUGFydCAtLT4gVHlwZSByZWZlcmVuY2UsIGFkZGluZyBhIG5ldyBwYXJhbWV0ZXIgYWx3YXlzIG1lYW5zIGFkZGluZyBhIG5ldyBQYXJ0Ci0JCQkvLyB3aXRoIGEgc3RyaW5nIHJlZmVyZW5jZS4gIEJlY2F1c2Ugb2YgdGhpcyBjYXNlLCB3ZSBzaG91bGQgcmVhbGx5IHJlbmFtZSB0aGlzIG1ldGhvZCBpbnN0ZWFkCi0JCQkvLyBvZiBjcmVhdGVYU0RPYmplY3RzKCkgc2luY2Ugd2UgbWF5IGVuZCB1cCBjcmVhdGluZyBhIFBhcnQuCi0JCQlpZiAocGFydCA9PSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSAhPSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKS5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQlMaXN0IHBhcnROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlJdGVyYXRvciBpdCA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCVBhcnQgaXRlbSA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0JCQkJCXBhcnROYW1lcy5hZGQoaXRlbS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCQlTdHJpbmcgcGFydE5hbWUgPSBOYW1lVXRpbC5nZXRVbmlxdWVOYW1lSGVscGVyKGdldFdTRExQYXJ0TmFtZSgpLCBwYXJ0TmFtZXMpOwotCQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJbmV3UGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICAJU3RyaW5nIG5hbWUgPSBjb21wb25lbnQuZ2V0TmFtZSgpOwotICAgIAlTdHJpbmcgdG5zID0gY29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBMaXN0IHByZWZpeGVzID0gZ2V0UHJlZml4ZXMoZGVmaW5pdGlvbiwgdG5zKTsKLSAgICAgICAgaWYgKHByZWZpeGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIG5hbWUgPSBwcmVmaXhlcy5nZXQoMCkgKyAiOiIgKyBuYW1lOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlKSB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKHRoZU5hbWVzcGFjZSAhPSBudWxsICYmIHRoZU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBhcmFtZXRlclBhdHRlcm4oV1NETEVsZW1lbnQgZWxlbWVudCkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotICAgIAkKLSAgICAJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKChPcGVyYXRpb24pIGVsZW1lbnQpOwotICAgIAkJCi0JCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgKChPcGVyYXRpb24pIGVsZW1lbnQpLmdldENvbnRhaW5lcigpOwotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgUG9ydFR5cGUKLSAgICAJCQlJdGVyYXRvciBvcEl0ID0gcHQuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCU9wZXJhdGlvbiBpdGVtID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMoZWxlbWVudCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotCi0gICAgCQlpZiAocGF0dGVybiA9PSAtMSkgewotICAgIAkJCS8vIGxldCdzIHRyeSB0byBzZWFyY2ggb3RoZXIgT3BlcmF0aW9ucyBpbiBPVEhFUiBQb3J0VHlwZXMKLSAgICAJCQlJdGVyYXRvciBwdEl0ID0gcHQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIHB0SXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCVBvcnRUeXBlIGl0ZW0gPSAoUG9ydFR5cGUpIHB0SXQubmV4dCgpOwotICAgIAkJCQlpZiAoIWl0ZW0uZXF1YWxzKHB0KSkgewotICAgIAkJCQkJcGF0dGVybiA9IGdldFBhdHRlcm4oaXRlbSk7Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gICAgCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgZWxlbWVudDsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKHB0KTsKLSAgICAJCQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAl9Ci0gICAgCQotICAgIAlpZiAocGF0dGVybiA9PSAtMSkgewotICAgIAkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLSAgICAJfQotCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQYXJhbWV0ZXJQYXR0ZXJuKFdTRExFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gdXNlSW5wdXQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJCi0gICAgCWlmIChlbGVtZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotICAgIAkJaWYgKHVzZUlucHV0ICYmIG9wLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLQkJCWlmICghdXNlSW5wdXQgJiYgb3AuZ2V0RU91dHB1dCgpICE9IG51bGwpewotCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wLmdldEVPdXRwdXQoKS5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLSAgICAJCQotCQkJUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpIG9wLmdldENvbnRhaW5lcigpOwotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgUG9ydFR5cGUKLSAgICAJCQlJdGVyYXRvciBvcEl0ID0gcHQuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCU9wZXJhdGlvbiBpdGVtID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMoZWxlbWVudCkpIHsKLSAgICAJCQkJCWlmICh1c2VJbnB1dCAmJiBpdGVtLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLSAgICAJCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLmdldEVJbnB1dCgpLmdldEVNZXNzYWdlKCkpOwotICAgIAkJCQkJfQotICAgIAkJCQkJaWYgKCF1c2VJbnB1dCAmJiBpdGVtLmdldEVPdXRwdXQoKSAhPSBudWxsKXsKLSAgICAJCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLmdldEVPdXRwdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCQkJCX0KLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0sIHVzZUlucHV0KTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLSAgICAJCVBvcnRUeXBlIHB0ID0gKFBvcnRUeXBlKSBlbGVtZW50OwotICAgIAkJcGF0dGVybiA9IGdldFBhdHRlcm4ocHQsIHVzZUlucHV0KTsKLSAgICAJCQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0sIHVzZUlucHV0KTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCUl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBvcEl0Lm5leHQoKTsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oUG9ydFR5cGUgcG9ydFR5cGUsIGJvb2xlYW4gdXNlSW5wdXQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJSXRlcmF0b3Igb3BJdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAJd2hpbGUgKHBhdHRlcm4gPT0gLTEgJiYgb3BJdC5oYXNOZXh0KCkpIHsKLSAgICAJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgIAkJaWYgKHVzZUlucHV0ICYmIG9wLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLSAgICAJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCX0KLSAgICAJCWlmICghdXNlSW5wdXQgJiYgb3AuZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLSAgICAJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UGF0dGVybihPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0JCWludCBwYXR0ZXJuID0gLTE7Ci0JCQotICAgIAlJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0JCUxpc3QgZmF1bHRzID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKTsKLQkJCi0JCWlmIChpbnB1dCAhPSBudWxsKSB7Ci0JCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpbnB1dC5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJaWYgKHBhdHRlcm4gPT0gLTEgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG91dHB1dC5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJaWYgKHBhdHRlcm4gPT0gLTEgJiYgZmF1bHRzLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGZhdWx0SXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIGZhdWx0SXQuaGFzTmV4dCgpKSB7Ci0JCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGZhdWx0SXQubmV4dCgpOwotCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGZhdWx0LmdldEVNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0JCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJCUl0ZXJhdG9yIHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0cy5uZXh0KCk7Ci0JCQkJaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotCi0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKSkpIHsKLQkJCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7CQotCQkJCQl9CQkJCQkKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0JCQkJCQotCQkJCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRTsKLQkJCQkJCQotCQkJCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJCQlpZiAoaXNTZXF1ZW5jZVBhdHRlcm4oeHNkVHlwZSkpIHsKLQkJCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRV9TRVFfRUxFTUVOVDsgCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NlcXVlbmNlUGF0dGVybihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgCWJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4gPSBmYWxzZTsKLSAgICAJCi0gICAgCWlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlOwotCi0JICAgIAlpZiAoY29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCWlzU2VxdWVuY2VQYXR0ZXJuID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBpc1NlcXVlbmNlUGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZm9ybWF0Q2hpbGQoRWxlbWVudCBjaGlsZCkKLSAgICB7Ci0gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICAgIHsKLSAgICAgICAgSURPTU1vZGVsIG1vZGVsID0gKChJRE9NTm9kZSljaGlsZCkuZ2V0TW9kZWwoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyB0ZWxsIHRoZSBtb2RlbCB0aGF0IHdlIGFyZSBhYm91dCB0byBtYWtlIGEgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICAgIG1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAgIAotICAgICAgICAgIElTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yIGZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgICBmb3JtYXRQcm9jZXNzb3IuZm9ybWF0Tm9kZShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGVsbCB0aGUgbW9kZWwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBiaWcgbW9kZWwgY2hhbmdlCi0gICAgICAgICAgbW9kZWwuY2hhbmdlZE1vZGVsKCk7IAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBQYXJ0IGdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCkgewotICAgIAlyZXR1cm4gbmV3UGFydDsKLSAgICB9Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKTsKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI1MWJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotIAotICBwdWJsaWMgQWRkQmluZGluZ0NvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGJpbmRpbmcgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZygpOwotICAgIGJpbmRpbmcuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgYmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhiaW5kaW5nKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nRmF1bHRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdGYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5OWJiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdGYXVsdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ0ZhdWx0Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0OwotICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIFN0cmluZyBuYW1lOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdGYXVsdENvbW1hbmQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb247Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBiaW5kaW5nRmF1bHQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgYmluZGluZ0ZhdWx0LnNldE5hbWUobmFtZSk7IAotICAgIGJpbmRpbmdGYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGJpbmRpbmdPcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEJpbmRpbmdGYXVsdCgoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODgyNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdJbnB1dENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dDsKLSAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uOwotICBTdHJpbmcgbmFtZTsKLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ0lucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIGJpbmRpbmdJbnB1dC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nSW5wdXQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dCliaW5kaW5nSW5wdXQpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE0NjQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ09wZXJhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGJpbmRpbmdJbnB1dE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFN0cmluZyBiaW5kaW5nT3V0cHV0TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgU3RyaW5nIGJpbmRpbmdGYXVsdE5hbWUgPSIiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUJpbmRpbmdGYXVsdCA9IGZhbHNlOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kKEJpbmRpbmcgYmluZGluZyxTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kCi0gICAgKEJpbmRpbmcgYmluZGluZywgIAotICAgICBTdHJpbmcgbmFtZSwKLSAgICAgYm9vbGVhbiBjcmVhdGVCaW5kaW5nSW5wdXQsCi0gICAgIGJvb2xlYW4gY3JlYXRlQmluZGluZ091dHB1dCwKLSAgICAgYm9vbGVhbiBjcmVhdGVCaW5kaW5nRmF1bHQpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nSW5wdXQgPSBjcmVhdGVCaW5kaW5nSW5wdXQ7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nT3V0cHV0ID0gY3JlYXRlQmluZGluZ091dHB1dDsKLSAgICB0aGlzLmNyZWF0ZUJpbmRpbmdGYXVsdCA9IGNyZWF0ZUJpbmRpbmdGYXVsdDsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ09wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5hbWUpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgV1NETEVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgIGlmIChjcmVhdGVCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgY29tbWFuZCA9IG5ldyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ0lucHV0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLQotICAgIGlmIChjcmVhdGVCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkQmluZGluZ091dHB1dENvbW1hbmQoYmluZGluZ09wZXJhdGlvbixiaW5kaW5nT3V0cHV0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLQotICAgIGlmIChjcmVhdGVCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgY29tbWFuZCA9IG5ldyBBZGRCaW5kaW5nRmF1bHRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ0ZhdWx0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmluZGluZ0lucHV0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ0lucHV0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdPdXRwdXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5iaW5kaW5nT3V0cHV0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdGYXVsdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdGYXVsdE5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MGRhNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ091dHB1dENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0OwotICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIFN0cmluZyBuYW1lOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPdXRwdXRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ091dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgYmluZGluZ091dHB1dC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nT3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dCliaW5kaW5nT3V0cHV0KTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjMDAzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24uY29tbWFuZHMuQWRkRXh0ZW5zaW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBZGRFeHRlbnNpb25FbGVtZW50Q29tbWFuZCBleHRlbmRzIEFkZEV4dGVuc2lvbkNvbW1hbmQKLXsKLSAgRXh0ZW5zaWJsZUVsZW1lbnQgaW5wdXQ7Ci0gIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50OwotICBFbGVtZW50IGFwcEluZm87Ci0gIEVsZW1lbnQgbmV3RWxlbWVudDsKLQotICBwdWJsaWMgQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQoU3RyaW5nIGxhYmVsLCBFeHRlbnNpYmxlRWxlbWVudCBpbnB1dCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpCi0gIHsKLSAgICBzdXBlcihsYWJlbCk7Ci0gICAgdGhpcy5pbnB1dCA9IGlucHV0OwotICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKLSAgewotICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gcGFyZW50RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0gICAgCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhleHRlbnNpb25zU2NoZW1hU3BlYy5nZXROYW1lc3BhY2VVUkkoKSwgZWxlbWVudC5nZXROYW1lKCkpOwotICAgIAotICAgIFN0cmluZyBwcmVmaXggPSBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbklmUmVxdWlyZWQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpLCAicCIsIGV4dGVuc2lvbnNTY2hlbWFTcGVjLmdldE5hbWVzcGFjZVVSSSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIG5ld0VsZW1lbnQuc2V0UHJlZml4KHByZWZpeCk7Ci0gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVuZG8oKQotICB7Ci0gICAgLy8gVE9ETyAoY3MpIGRvIHdlIG5lZWQgdG8gaW1wbGVtZW50PwotICB9Ci0gIHB1YmxpYyBPYmplY3QgZ2V0TmV3T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbklmUmVxdWlyZWQoRWxlbWVudCByb290RWxlbWVudCwgU3RyaW5nIHByZWZpeEhpbnQsIFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsgICAgICAKLSAgICBOYW1lc3BhY2VUYWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBOYW1lc3BhY2VUYWJsZShyb290RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpOwotICAgIG5hbWVzcGFjZVRhYmxlLmFkZEVsZW1lbnQocm9vdEVsZW1lbnQpOwotICAgIHByZWZpeCA9IG5hbWVzcGFjZVRhYmxlLmdldFByZWZpeEZvclVSSShuYW1lc3BhY2UpOwotICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICB7IAotICAgICAgU3RyaW5nIGJhc2VQcmVmaXggPSBwcmVmaXhIaW50OwotICAgICAgcHJlZml4ID0gYmFzZVByZWZpeDsKLSAgICAgIFN0cmluZyB4bWxuc0NvbG9uID0gInhtbG5zOiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0geG1sbnNDb2xvbiArIHByZWZpeDsKLSAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICB3aGlsZSAocm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKQotICAgICAgewotICAgICAgICBjb3VudCsrOwotICAgICAgICBwcmVmaXggPSBiYXNlUHJlZml4ICsgY291bnQ7Ci0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB4bWxuc0NvbG9uICsgcHJlZml4OwotICAgICAgfSAgICAgIAotICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIG5hbWVzcGFjZSk7ICAKLSAgICB9ICAgIAotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRmF1bHRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NTNmMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRGYXVsdENvbW1hbmQgZXh0ZW5kcyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZAotewotICBwcml2YXRlIEZhdWx0IG9yaWdpbmFsRmF1bHQ7Ci0gIAotICBwdWJsaWMgQWRkRmF1bHRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFkZEZhdWx0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUsY3JlYXRlTWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGEgRmF1bHQgYmFzZWQgb24gdGhlIGdpdmVuIEZhdWx0LiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIEZhdWx0LgotICAgKi8KLSAgcHVibGljIEFkZEZhdWx0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBGYXVsdCBvcmlnaW5hbEZhdWx0LCBTdHJpbmcgbmFtZSkgewotICAJc3VwZXIob3BlcmF0aW9uLCBuYW1lLCBmYWxzZSk7Ci0gIAkKLSAgCXRoaXMub3JpZ2luYWxGYXVsdCA9IG9yaWdpbmFsRmF1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBtZXNzYWdlUmVmZXJlbmNlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhdWx0KCk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXROYW1lKG5hbWUpOyAKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24ob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgb3BlcmF0aW9uLmFkZEZhdWx0KChGYXVsdCltZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAKLSAgICAvLyAgVEJEIC0gYWRkIGJpbmRpbmcgZmF1bHQKLQotICAgIGlmIChvcmlnaW5hbEZhdWx0ID09IG51bGwpIHsKLSAgICAJaWYgKGNyZWF0ZU1lc3NhZ2UpCi0gICAgCQljcmVhdGVNZXNzYWdlKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAkvLyBEbyBuZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGZyb20gb3JpZ2luYWwgRmF1bHQgdG8gbmV3IEZhdWx0Ci0gICAgCWlmIChvcmlnaW5hbEZhdWx0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotLy8gICAgCQlTdHJpbmcgb3JpZ2luYWxNc2dOYW1lID0gb3JpZ2luYWxGYXVsdC5nZXRFTWVzc2FnZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0vLyAgICAJCQotLy8gICAgCQlib29sZWFuIGdlbmVkID0gZmFsc2U7Ci0vLyAgICAJCWlmIChvcmlnaW5hbEZhdWx0LmVDb250YWluZXIoKSBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLS8vICAgIAkJCWdlbmVkID0gU21hcnRSZW5hbWVBY3Rpb24uaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvcmlnaW5hbE1zZ05hbWUsICgoT3BlcmF0aW9uKSBvcmlnaW5hbEZhdWx0LmVDb250YWluZXIoKSkuZ2V0TmFtZSgpLCAiIik7Ci0vLyAgICAJCQotLy8gICAgCQlTdHJpbmcgbmV3TXNnTmFtZSA9ICIiOwotLy8gICAgCQlpZiAoZ2VuZWQpIHsKLS8vICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG1lc3NhZ2VSZWZlcmVuY2UpOwotLy8gICAgCQl9Ci0vLyAgICAJCWVsc2UgewotLy8gICAgCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLS8vICAgIAkJCU1lc3NhZ2UgdE1lc3NhZ2UgPSBvcmlnaW5hbEZhdWx0LmdldEVNZXNzYWdlKCk7Ci0vLyAgICAJCQluZXdNc2dOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCB0TWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLS8vICAgIAkJfQotICAgIAkJCi0gICAgCQljcmVhdGVNZXNzYWdlKG9yaWdpbmFsRmF1bHQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbWVzc2FnZVJlZmVyZW5jZSkpOwotICAgIAl9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyYjU2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXByb3RlY3RlZCBGYXVsdCBmYXVsdDsKLQlwcml2YXRlIFN0cmluZyBmYXVsdE5hbWU7Ci0JCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UGFyYW1ldGVyUGF0dGVybkZvckZhdWx0KE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IGZhdWx0KSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCWlmIChmYXVsdCAhPSBudWxsKSB7Ci0gICAgCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihmYXVsdC5nZXRFTWVzc2FnZSgpKTsKLSAgICAJfQotCQlpZiAocGF0dGVybiA9PSAtMSkgewotCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHMubmV4dCgpOwotCQkJCWlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVDsKLQotCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCQkJCWlmIChpc1NlcXVlbmNlUGF0dGVybih4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkpKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwkKLQkJCQkJfQkJCQkJCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQllbHNlIGlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9TSU1QTEVUWVBFOwotCQkJCQkKLQkJCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfQ09NUExFWFRZUEU7Ci0JCQkJCQkKLQkJCQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB4c2RUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZFR5cGUpKSB7Ci0JCQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfQ09NUExFWFRZUEVfU0VRX0VMRU1FTlQ7IAotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4oWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIAlib29sZWFuIGlzU2VxdWVuY2VQYXR0ZXJuID0gZmFsc2U7Ci0gICAgCQotICAgIAlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgIAkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZTsKLQotCSAgICAJaWYgKGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKTsKLQkJCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQlpc1NlcXVlbmNlUGF0dGVybiA9IHRydWU7Ci0JCQkJfQotCQkJfQotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gaXNTZXF1ZW5jZVBhdHRlcm47Ci0gICAgfQotCQotCXB1YmxpYyBBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgRmF1bHQgZmF1bHQpIHsKLQkJc3VwZXIob3BlcmF0aW9uLCBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlQpOwotCQl0aGlzLmZhdWx0ID0gZmF1bHQ7Ci0JfQotCQotCS8qCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZmF1bHQgPT0gbnVsbCkgewotCQkJQWRkRmF1bHRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkRmF1bHRDb21tYW5kKG9wZXJhdGlvbiwgZ2V0RmF1bHROYW1lKCkpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCWZhdWx0ID0gKEZhdWx0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCX0KLQkJCi0JCVBhcnQgcGFydCA9IGNyZWF0ZVdTRExDb21wb25lbnRzKGZhdWx0KTsKLQkJbmV3UGFydCA9IHBhcnQ7Ci0JCQotCQkvLyBDcmVhdGUgbmVjZXNzYXJ5IFhTRCBPYmplY3RzIHN0YXJ0aW5nIHdpdGggdGhlIFBhcnQgcmVmZXJlbmNlCi0JCW5ld1hTREVsZW1lbnQgPSBjcmVhdGVYU0RPYmplY3RzKHBhcnQpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpICsgTmFtZVV0aWwuYnVpbGRGaXJzdENoYXJVcHBlcmNhc2VOYW1lKGZhdWx0TmFtZSk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyBOYW1lVXRpbC5idWlsZEZpcnN0Q2hhclVwcGVyY2FzZU5hbWUoZmF1bHROYW1lKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExNZXNzYWdlTmFtZSgpIHsKLQkJaWYgKG5ld1dTRExNZXNzYWdlTmFtZSA9PSBudWxsKSB7Ci0JCQluZXdXU0RMTWVzc2FnZU5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpICsgTmFtZVV0aWwuYnVpbGRGaXJzdENoYXJVcHBlcmNhc2VOYW1lKGZhdWx0TmFtZSk7Ci0JCQlMaXN0IHVzZWROYW1lcyA9IE5hbWVVdGlsLmdldFVzZWRNZXNzYWdlTmFtZXMob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQluZXdXU0RMTWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5nZXRVbmlxdWVOYW1lSGVscGVyKG5ld1dTRExNZXNzYWdlTmFtZSwgdXNlZE5hbWVzKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExNZXNzYWdlTmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpIHsKLQkJaWYgKG5ld1dTRExQYXJ0TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdXU0RMUGFydE5hbWUgPSBnZXRGYXVsdE5hbWUoKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExQYXJ0TmFtZTsKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RmF1bHROYW1lKCkgewotCQlpZiAoZmF1bHROYW1lID09IG51bGwpIHsKLQkJCWlmIChmYXVsdCAhPSBudWxsKSB7Ci0JCQkJZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZmF1bHROYW1lID0gTmFtZVV0aWwuZ2V0RmF1bHROYW1lKG9wZXJhdGlvbik7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmF1bHROYW1lOwotCX0KLQkKLQlwdWJsaWMgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlyZXR1cm4gZmF1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbXBvcnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEltcG9ydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzOWRiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEltcG9ydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkSW1wb3J0Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlOwotICBwcml2YXRlIFN0cmluZyBsb2NhdGlvbjsKLSAgcHJpdmF0ZSBJbXBvcnQgaW1wb3J0RWxlbWVudDsKLSAgCi0gIHB1YmxpYyBBZGRJbXBvcnRDb21tYW5kCi0gIAkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAgCi0gIAkgU3RyaW5nIG5hbWVzcGFjZSwKLSAgCSBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBpbXBvcnRFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGltcG9ydEVsZW1lbnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW1wb3J0KCk7Ci0gICAgaW1wb3J0RWxlbWVudC5zZXROYW1lc3BhY2VVUkkobmFtZXNwYWNlKTsKLSAgICBpbXBvcnRFbGVtZW50LnNldExvY2F0aW9uVVJJKGxvY2F0aW9uKTsKLSAgICBpbXBvcnRFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRJbXBvcnQoaW1wb3J0RWxlbWVudCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNTc1ZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5TbWFydFJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRJbnB1dENvbW1hbmQgZXh0ZW5kcyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZAotewotICBwcml2YXRlIElucHV0IG9yaWdpbmFsSW5wdXQ7Ci0JCi0gIHB1YmxpYyBBZGRJbnB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQWRkSW5wdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lLCBib29sZWFuIGNyZWF0ZU1lc3NhZ2UpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSxjcmVhdGVNZXNzYWdlKTsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYW4gSW5wdXQgYmFzZWQgb24gdGhlIGdpdmVuIElucHV0LiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIElucHV0LgotICAgKi8KLSAgcHVibGljIEFkZElucHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBJbnB1dCBvcmlnaW5hbElucHV0LCBTdHJpbmcgbmFtZSkgewotICAJc3VwZXIob3BlcmF0aW9uLCBuYW1lLCBmYWxzZSk7Ci0gIAkKLSAgCXRoaXMub3JpZ2luYWxJbnB1dCA9IG9yaWdpbmFsSW5wdXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBtZXNzYWdlUmVmZXJlbmNlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gIC8vICBtZXNzYWdlUmVmZXJlbmNlLnNldE5hbWUobmFtZSk7IAotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoKElucHV0KW1lc3NhZ2VSZWZlcmVuY2UpOwotICAgIAotICAgIC8vIFRCRCAtIGFkZCBiaW5kaW5nIGlucHV0IAotICAgIAotICAgIGlmIChvcmlnaW5hbElucHV0ID09IG51bGwpIHsKLSAgICAJaWYgKGNyZWF0ZU1lc3NhZ2UpCi0gICAgCQljcmVhdGVNZXNzYWdlKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAkvLyBEbyBuZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGZyb20gb3JpZ2luYWwgSW5wdXQgdG8gbmV3IElucHV0Ci0gICAgCWlmIChvcmlnaW5hbElucHV0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotICAgIAkJU3RyaW5nIG9yaWdpbmFsTXNnTmFtZSA9IG9yaWdpbmFsSW5wdXQuZ2V0RU1lc3NhZ2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgIAkJCi0gICAgCQlib29sZWFuIGdlbmVkID0gZmFsc2U7Ci0gICAgCQlpZiAob3JpZ2luYWxJbnB1dC5lQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBPcGVyYXRpb24pCi0gICAgCQkJZ2VuZWQgPSBTbWFydFJlbmFtZUFjdGlvbi5pc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9yaWdpbmFsTXNnTmFtZSwgKChPcGVyYXRpb24pIG9yaWdpbmFsSW5wdXQuZUNvbnRhaW5lcigpKS5nZXROYW1lKCksICJSZXF1ZXN0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAJCQotICAgIAkJU3RyaW5nIG5ld01zZ05hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAgIAkJaWYgKGdlbmVkKSB7Ci0gICAgCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgCQl9Ci0gICAgCQllbHNlIHsKLSAgICAJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIAkJCU1lc3NhZ2UgdE1lc3NhZ2UgPSBvcmlnaW5hbElucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgdE1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgCQl9Ci0KLSAgICAJCWNyZWF0ZU1lc3NhZ2Uob3JpZ2luYWxJbnB1dCwgbmV3TXNnTmFtZSk7Ci0gICAgCX0KLSAgICB9Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3ZDMxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlhTRENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kIHsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBjcmVhdGVYU0RPYmplY3RzID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgYm9vbGVhbiByZXVzZUV4aXN0aW5nTWVzc2FnZSA9IGZhbHNlOwotCXByaXZhdGUgSW5wdXQgaW5wdXQ7Ci0JcHVibGljIEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIob3BlcmF0aW9uLCBzdHlsZSk7Ci0JfQotCi0JcHVibGljIEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgc3R5bGUsIGJvb2xlYW4gcmV1c2VNZXNzYWdlKSB7Ci0JCXN1cGVyKG9wZXJhdGlvbiwgc3R5bGUpOwotCQlyZXVzZUV4aXN0aW5nTWVzc2FnZSA9IHJldXNlTWVzc2FnZTsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVBhcnQgcGFydCA9IG51bGw7Ci0JCWlmIChvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotCQkJaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlBZGRJbnB1dENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRJbnB1dENvbW1hbmQob3BlcmF0aW9uLCBudWxsKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlpbnB1dCA9IChJbnB1dCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCQotCQlpZiAoc3R5bGUgPT0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQlwYXJ0ID0gY3JlYXRlRG9jTGl0V3JhcHBlZFdTRExDb21wb25lbnRzKGlucHV0KTsKLQkJfQotCQllbHNlIHsKLQkJCXBhcnQgPSBjcmVhdGVXU0RMQ29tcG9uZW50cyhpbnB1dCk7Ci0JCX0KLQkJCi0JCW5ld1BhcnQgPSBwYXJ0OwotCQkvLyBDcmVhdGUgbmVjZXNzYXJ5IFhTRCBPYmplY3RzIHN0YXJ0aW5nIHdpdGggdGhlIFBhcnQgcmVmZXJlbmNlCi0JCWlmIChjcmVhdGVYU0RPYmplY3RzKQotCQkJbmV3WFNERWxlbWVudCA9IGNyZWF0ZVhTRE9iamVjdHMocGFydCk7Ci0JfQotCQotCXByb3RlY3RlZCBQYXJ0IGNyZWF0ZURvY0xpdFdyYXBwZWRXU0RMQ29tcG9uZW50cyhNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpIHsKLQkJTWVzc2FnZSBtZXNzYWdlID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpOwotCQlQYXJ0IHBhcnQgPSBudWxsOwotCi0JCWlmIChyZXVzZUV4aXN0aW5nTWVzc2FnZSAmJiBtZXNzYWdlID09IG51bGwpIHsKLQkJCS8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5nIE1lc3NhZ2UKLQkJCU1lc3NhZ2UgZXhpc3RpbmdNZXNzYWdlID0gbnVsbDsKLQkJCVN0cmluZyBtZXNzYWdlTmFtZSA9IGdldElkZWFsTWVzc2FnZU5hbWUobWVzc2FnZVJlZik7Ci0JCQlJdGVyYXRvciBtZXNzYWdlcyA9IG1lc3NhZ2VSZWYuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAobWVzc2FnZXMuaGFzTmV4dCgpKSB7Ci0JCQkJTWVzc2FnZSBpdGVtID0gKE1lc3NhZ2UpIG1lc3NhZ2VzLm5leHQoKTsKLQkJCQlRTmFtZSBpdGVtTmFtZSA9IGl0ZW0uZ2V0UU5hbWUoKTsKLQkJCQlpZiAoaXRlbU5hbWUgIT0gbnVsbCAmJiBpdGVtTmFtZS5nZXRMb2NhbFBhcnQoKSAhPSBudWxsICYmIG1lc3NhZ2VOYW1lLmVxdWFscyhpdGVtTmFtZS5nZXRMb2NhbFBhcnQoKSkpIHsKLQkJCQkJZXhpc3RpbmdNZXNzYWdlID0gaXRlbTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoZXhpc3RpbmdNZXNzYWdlICE9IG51bGwpIHsKLQkJCQlpZiAoZXhpc3RpbmdNZXNzYWdlLmdldEVQYXJ0cygpLnNpemUoKSA+IDApIHsKLQkJCQkJLy8gU2VlIGlmIGV4aXN0aW5nIE1lc3NhZ2UgaGFzIGEgUGFydCByZWZlcmVuY2luZyBhbiBYU0QgRWxlbWVudCB3aXRoIHRoZSBwcm9wZXIgbmFtZQotCQkJCQlQYXJ0IGV4aXN0aW5nUGFydCA9IChQYXJ0KSBleGlzdGluZ01lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQkJCQlpZiAoIShleGlzdGluZ1BhcnQuZ2V0TmFtZSgpLmVxdWFscyhnZXREb2NMaXRXcmFwcGVkUGFydE5hbWUoKSkpKSB7Ci0JCQkJCQltZXNzYWdlID0gbnVsbDsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBleGlzdGluZ0VsZW1lbnQgPSBleGlzdGluZ1BhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCQkJCQlpZiAoZXhpc3RpbmdFbGVtZW50ICE9IG51bGwgJiYgZXhpc3RpbmdFbGVtZW50LmdldE5hbWUoKS5lcXVhbHMob3BlcmF0aW9uLmdldE5hbWUoKSkpIHsKLQkJCQkJCQkvLyBUaGVyZSBpcyBhbiBleGlzdGluZyBYU0QgRWxlbWVudCB3aXRoIHRoZSBwcm9wZXIgbmFtZQotCQkJCQkJCS8vIFNlZSBpZiB0aGUgWFNEIEVsZW1lbnQgaGFzIGFuIGFub255bW91cyB0eXBlIHdpdGggYSBzZXF1ZW5jZSBhbmQgYW4gWFNEIEVsZW1lbnQKLQkJCQkJCQlXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvciB2aXNpdG9yID0gbmV3IFcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yKCk7Ci0JCQkJCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGlubmVyRWxlbWVudCA9IHZpc2l0b3IuZ2V0SW5uZXJYU0RFbGVtZW50KGV4aXN0aW5nRWxlbWVudCk7Ci0JCQkJCQkJaWYgKCFpbm5lckVsZW1lbnQuZXF1YWxzKGV4aXN0aW5nRWxlbWVudCkpIHsKLQkJCQkJCQkJLy8gRm91bmQgYW4gZXhpc3RpbmcgaW5uZXIgWFNEIEVsZW1lbnQKLQkJCQkJCQkJY3JlYXRlWFNET2JqZWN0cyA9IGZhbHNlOwotCi0JCQkJCQkJCS8vIHNldCB0aGUgTWVzc2FnZVJlZmVyZW5jZSAtLT4gTWVzc2FnZSByZWZlcmVuY2UKLQkJCQkJCQkJbWVzc2FnZVJlZi5zZXRFTWVzc2FnZShleGlzdGluZ01lc3NhZ2UpOwotCQkJCQkJCQltZXNzYWdlID0gZXhpc3RpbmdNZXNzYWdlOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChtZXNzYWdlID09IG51bGwgfHwgbWVzc2FnZS5lQ29udGFpbmVyKCkgPT0gbnVsbCkgewotCQkJLy8gQ3JlYXRlIE1lc3NhZ2UKLQkJCUFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQobWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGdldFdTRExNZXNzYWdlTmFtZSgpKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCW1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UobWVzc2FnZSk7Ci0JCX0KLQotCi0JCWlmIChtZXNzYWdlLmdldEVQYXJ0cygpLnNpemUoKSA9PSAwKSB7Ci0JCQkvLyBDcmVhdGUgUGFydAotCQkJU3RyaW5nIHBhcnROYW1lID0gZ2V0RG9jTGl0V3JhcHBlZFBhcnROYW1lKCk7Ci0JCQlBZGRQYXJ0Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIHBhcnROYW1lKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlwYXJ0ID0gKFBhcnQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQllbHNlIHsKLQkJCXBhcnQgPSAoUGFydCkgbWVzc2FnZS5nZXRFUGFydHMoKS5nZXQoMCk7Ci0JCX0KLQkJZm9ybWF0Q2hpbGQobWVzc2FnZS5nZXRFbGVtZW50KCkpOwotCi0JCXJldHVybiBwYXJ0OwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCWlmICh0aGlzLnN0eWxlID09IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJCW5ld0Fub255bW91c1hTREVsZW1lbnROYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCW5ld0Fub255bW91c1hTREVsZW1lbnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdYU0RFbGVtZW50TmFtZSA9ICJpbiI7IC8vJE5PTi1OTFMtMSQKLS8vCQkJbmV3WFNERWxlbWVudE5hbWUgPSBnZXRXU0RMUGFydE5hbWUoKTsKLQkJfQotCi0JCXJldHVybiBuZXdYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMTWVzc2FnZU5hbWUgPT0gbnVsbCkgewotCQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQkJbmV3V1NETE1lc3NhZ2VOYW1lPSBOYW1lVXRpbC5nZXRNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3V1NETE1lc3NhZ2VOYW1lOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETFBhcnROYW1lKCkgewotCQlpZiAobmV3V1NETFBhcnROYW1lID09IG51bGwpIHsKLQkJCW5ld1dTRExQYXJ0TmFtZSAgPSBOYW1lVXRpbC5nZXRQYXJ0TmFtZShvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwkJCQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3V1NETFBhcnROYW1lOwotCX0KLQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihQYXJ0IHBhcnQsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBwYXJ0RWxlbWVudCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcmV0dXJuZWRYU0RFbGVtZW50ID0gbnVsbDsKLQotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gb3JpZ2luYWxFbGVtZW50ID0gbnVsbDsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGFub25YU0RFbGVtZW50ID0gbnVsbDsKLQotCQkvLyBDcmVhdGUgdGhlIFhTREVsZW1lbnQgKGFub255bW91cykgcmVmZXJlbmNlZCBieSB0aGUgUGFydCBpZiBuZWNlc3NhcnkKLQkJaWYgKHBhcnRFbGVtZW50ID09IG51bGwgfHwgcGFydEVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSA9PSBudWxsKSB7Ci0JCQkvL0ZpbmQgYW4gZXhpc3RpbmcgWFNERWxlbWVudCB0byB1c2UgaWYgcG9zc2libGUKLQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBleGlzdGluZ0VsZW1lbnQgPSBudWxsOwotCQkJU3RyaW5nIGlkZWFsRWxlbWVudE5hbWUgPSBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKTsKLQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNEU2NoZW1hKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCWlmIChzY2hlbWEgIT0gbnVsbCkgewotCQkJCUl0ZXJhdG9yIGl0ID0gc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChleGlzdGluZ0VsZW1lbnQgPT0gbnVsbCAmJiBpdC5oYXNOZXh0KCkpIHsKLQkJCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGl0ZW0gPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBpdC5uZXh0KCk7Ci0JCQkJCWlmIChpdGVtLmdldE5hbWUoKS5lcXVhbHMoaWRlYWxFbGVtZW50TmFtZSkpIHsKLQkJCQkJCS8vIGZvdW5kIGFuIGVsZW1lbnQgd2UgY2FuIHVzZS4gIENvbmZpcm0gaXQgaGFzIGEgZG9jLWxpdC13cmFwcGVkIHBhdHRlcm4KLQkJCQkJCS8vIFNlZSBpZiB0aGUgWFNEIEVsZW1lbnQgaGFzIGFuIGFub255bW91cyB0eXBlIHdpdGggYSBzZXF1ZW5jZSBhbmQgYW4gWFNEIEVsZW1lbnQKLQkJCQkJCWV4aXN0aW5nRWxlbWVudCA9IGl0ZW07Ci0KLQkJCQkJCVhTRFR5cGVEZWZpbml0aW9uIHhzZFR5cGUgPSBpdGVtLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0JCQkJCQlpZiAoeHNkVHlwZSAhPSBudWxsKSB7Ci0JCQkJCQkJTGlzdCBjb250ZW50cyA9IHhzZFR5cGUuZUNvbnRlbnRzKCk7Ci0JCQkJCQkJaWYgKGNvbnRlbnRzLnNpemUoKSA+IDAgJiYgY29udGVudHMuZ2V0KDApIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQkJCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIGNvbnRlbnRzLmdldCgwKTsKLQkJCQkJCQkJTGlzdCBwYXJ0aWNsZUNvbnRlbnRzID0gcGFydGljbGUuZUNvbnRlbnRzKCk7Ci0JCQkJCQkJCWlmIChwYXJ0aWNsZUNvbnRlbnRzLnNpemUoKSA+IDAgJiYgcGFydGljbGVDb250ZW50cy5nZXQoMCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCQkJCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGVDb250ZW50cy5nZXQoMCk7Ci0JCQkJCQkJCQlMaXN0IG1vZGVsQ29udGVudHMgPSBtb2RlbEdyb3VwLmVDb250ZW50cygpOwotCQkJCQkJCQkJaWYgKG1vZGVsQ29udGVudHMuc2l6ZSgpID4gMCAmJiBtb2RlbENvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJCQkJCQkJWFNEUGFydGljbGUgaW5uZXJQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgbW9kZWxDb250ZW50cy5nZXQoMCk7Ci0JCQkJCQkJCQkJTGlzdCBpbm5lckNvbnRlbnRzID0gaW5uZXJQYXJ0aWNsZS5lQ29udGVudHMoKTsKLQkJCQkJCQkJCQlpZiAoaW5uZXJDb250ZW50cy5zaXplKCkgPiAwICYmIGlubmVyQ29udGVudHMuZ2V0KDApIGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJCQkJCQkJCS8vIGlubmVyIFhTRCBFbGVtZW50IGV4aXN0cwotCQkJCQkJCQkJCQkvLyByZXVzZSBleGlzdGluZyBlbGVtZW50Ci0JCQkJCQkJCQkJCVN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGV4aXN0aW5nRWxlbWVudCk7Ci0JCQkJCQkJCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBwcmVmaXhlZE5hbWUpOwotCQkJCQkJCQkJCQlyZXR1cm4gZXhpc3RpbmdFbGVtZW50OwotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGV4aXN0aW5nRWxlbWVudCA9PSBudWxsKSB7Ci0JCQkJYW5vblhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlQW5vbnltb3VzWFNERWxlbWVudERlZmluaXRpb24oZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCksIHBhcnQpOwotLy8JCQkJcGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24oYW5vblhTREVsZW1lbnQpOwotCQkJCVN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGFub25YU0RFbGVtZW50KTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCQlwYXJ0LnNldFR5cGVEZWZpbml0aW9uKG51bGwpOwotCi0JCQkJaWYgKHBhcnRFbGVtZW50ICE9IG51bGwgJiYgcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkgIT0gbnVsbCkgewotCQkJCQlvcmlnaW5hbEVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJCQkJLy8gUmVtb3ZlIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgYXMgYSBHbG9iYWwgRWxlbWVudAotCQkJCQlwYXJ0RWxlbWVudC5nZXRTY2hlbWEoKS5nZXRDb250ZW50cygpLnJlbW92ZShwYXJ0RWxlbWVudCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYW5vblhTREVsZW1lbnQgPSBleGlzdGluZ0VsZW1lbnQ7Ci0JCQkJLy8gcmV1c2UgZXhpc3RpbmcgZWxlbWVudAotCQkJCVN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGV4aXN0aW5nRWxlbWVudCk7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhbm9uWFNERWxlbWVudCA9IHBhcnRFbGVtZW50OwotCQl9Ci0KLQkJLy8gQ3JlYXRlIGEgbmV3IFhTREVsZW1lbnQKLQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRE1vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCi0JCS8vIEFkZCB0aGUgbmV3bHkgY3JlYXRlZCBYU0RFbGVtZW50IHRvIHRoZSBNb2RlbEdyb3VwCi0JCVhTRENvbXBvbmVudEhlbHBlci5hZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCByZXR1cm5lZFhTREVsZW1lbnQpOwotCi0JCS8vIEFkZCB0aGUgJ29yaWdpbmFsJyBYU0RFbGVtZW50IGlmIGl0J3MgdHlwZSB3YXNuJ3QgYW5vbnltb3VzCi0JCWlmIChvcmlnaW5hbEVsZW1lbnQgIT0gbnVsbCkgewotCQkJWFNEQ29tcG9uZW50SGVscGVyLmFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIG9yaWdpbmFsRWxlbWVudCk7Ci0JCX0KLQkJZm9ybWF0Q2hpbGQoYW5vblhTREVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLQkJcmV0dXJuIHJldHVybmVkWFNERWxlbWVudDsKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SWRlYWxNZXNzYWdlTmFtZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpIHsJICAgIAotCQlTdHJpbmcgbWVzc2FnZU5hbWUgPSAiTmV3TWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQkJbWVzc2FnZU5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpICsgIlJlcXVlc3QiOyAvLyROT04tTkxTLTEkCi0JCQotCQlyZXR1cm4gbWVzc2FnZU5hbWU7Ci0JfQotCQotCXB1YmxpYyBNZXNzYWdlUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSB7Ci0JCXJldHVybiBpbnB1dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YmRhMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlNtYXJ0UmVuYW1lQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRNZXNzYWdlQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYWxOYW1lOwotICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKLSAgcHJpdmF0ZSBNZXNzYWdlIG9yaWdpbmFsTWVzc2FnZTsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVQYXJ0ID0gZmFsc2U7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfUEFSVF9OQU1FID0gIk5ld1BhcnQiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgQWRkTWVzc2FnZUNvbW1hbmQKLSAgCShEZWZpbml0aW9uIGRlZmluaXRpb24sICAKLSAgCSBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZE1lc3NhZ2VDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sIAotCQkgU3RyaW5nIGxvY2FsTmFtZSwKLQkJIGJvb2xlYW4gY3JlYXRlUGFydCkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JICB0aGlzLmNyZWF0ZVBhcnQgPSBjcmVhdGVQYXJ0OwotCX0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGEgTWVzc2FnZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gTWVzc2FnZS4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBNZXNzYWdlLgotICAgKi8KLSAgcHVibGljIEFkZE1lc3NhZ2VDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTWVzc2FnZSBvcmlnaW5hbE1lc3NhZ2UsIFN0cmluZyBsb2NhbE5hbWUsIGJvb2xlYW4gY29weVBhcnQpIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCXRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCXRoaXMuY3JlYXRlUGFydCA9IGNvcHlQYXJ0OwotICAJdGhpcy5vcmlnaW5hbE1lc3NhZ2UgPSBvcmlnaW5hbE1lc3NhZ2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBtZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLGxvY2FsTmFtZSkpOwotICAgIG1lc3NhZ2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgCi0gICAgaWYgKG9yaWdpbmFsTWVzc2FnZSA9PSBudWxsKSB7Ci0gICAgCWlmIChjcmVhdGVQYXJ0KQotICAgIAl7Ci0gICAgCQlBZGRQYXJ0Q29tbWFuZCBjb21tYW5kID0gCi0gICAgCQkJbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsREVGQVVMVF9QQVJUX05BTUUsV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwic3RyaW5nIix0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAJfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJaWYgKG9yaWdpbmFsTWVzc2FnZS5nZXRFUGFydHMoKSAhPSBudWxsKSB7Ci0gICAgCQlJdGVyYXRvciBpdCA9IG9yaWdpbmFsTWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotICAgIAkJCi0gICAgCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJUGFydCBwYXJ0ID0gKFBhcnQpIGl0Lm5leHQoKTsKLSAgICAJCQlBZGRQYXJ0Q29tbWFuZCBjb21tYW5kOwotICAgIAkJCWlmIChTbWFydFJlbmFtZUFjdGlvbi5pc1BhcnROYW1lR2VuZXJhdGVkKHBhcnQuZ2V0TmFtZSgpLCBvcmlnaW5hbE1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpCi0gICAgCQkJCWNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVQYXJ0TmFtZShtZXNzYWdlLCBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKTsJCi0gICAgCQkJZWxzZQotICAgIAkJCQljb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIHBhcnQsIHBhcnQuZ2V0TmFtZSgpKTsKLSAgICAJCQkKLSAgICAJCQkKLSAgICAJCQljb21tYW5kLnJ1bigpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TG9jYWxOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5sb2NhbE5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5MzlmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci0KLWFic3RyYWN0IHB1YmxpYyBjbGFzcyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0gIHByb3RlY3RlZCBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2U7Ci0gIHByb3RlY3RlZCBPcGVyYXRpb24gb3BlcmF0aW9uOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjcmVhdGVNZXNzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfTUVTU0FHRV9OQU1FID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lLCBib29sZWFuIGNyZWF0ZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMuY3JlYXRlTWVzc2FnZSA9IGNyZWF0ZU1lc3NhZ2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVNZXNzYWdlKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IAotICAgICAgbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZmluaXRpb24sREVGQVVMVF9NRVNTQUdFX05BTUUsY3JlYXRlTWVzc2FnZSk7ICAgICAgCi0gICAgY29tbWFuZC5ydW4oKTsKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVNZXNzYWdlKChNZXNzYWdlKWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIE92ZXJsb2FkZWQgY3JlYXRlTWVzc2FnZShhcmcpIG1ldGhvZC4gIFNpbWlsYXIgdG8gdG8gY3JlYXRlTWVzc2FnZSgpIGJ1dCB0YWtlcyBpbiBhIE1lc3NhZ2VSZWZlcmVuY2UuCi0gICAqIE1ldGhvZCB1c2VkIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIE1lc3NhZ2UgKGNvbnRhaW5lZCBpbiB0aGUgcGFzc2VkIGluIE1lc3NhZ2VSZWZlcmVuY2UpLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlTWVzc2FnZShNZXNzYWdlUmVmZXJlbmNlIG9yaWdpbmFsTVJlZiwgU3RyaW5nIG5ld01lc3NhZ2VSZWZOYW1lKSB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBNZXNzYWdlIHRNZXNzYWdlID0gb3JpZ2luYWxNUmVmLmdldEVNZXNzYWdlKCk7Ci0gICAgQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IAotICAgICAgbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZmluaXRpb24sIHRNZXNzYWdlLCBuZXdNZXNzYWdlUmVmTmFtZSwgdHJ1ZSk7Ci0gICAgY29tbWFuZC5ydW4oKTsKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVNZXNzYWdlKChNZXNzYWdlKWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPcGVyYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjcwZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPcGVyYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRPcGVyYXRpb25Db21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLSAgcHJpdmF0ZSBPcGVyYXRpb24gb3JpZ2luYWxPcGVyYXRpb247Ci0gIHByaXZhdGUgYm9vbGVhbiBjb3B5SW5PdXRGYXVsdDsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlT3V0cHV0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVGYXVsdCA9IGZhbHNlOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9JTlBVVF9OQU1FID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9PVVRQVVRfTkFNRSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfRkFVTFRfTkFNRSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgQWRkT3BlcmF0aW9uQ29tbWFuZAotCQkoUG9ydFR5cGUgcG9ydFR5cGUsICAKLQkJIFN0cmluZyBuYW1lKQotCXsKLQkgIHRoaXMucG9ydFR5cGUgPSBwb3J0VHlwZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JfQotICAKLSAgcHVibGljIEFkZE9wZXJhdGlvbkNvbW1hbmQKLQkJKFBvcnRUeXBlIHBvcnRUeXBlLCAgCi0JCSBTdHJpbmcgbmFtZSwKLQkJIGJvb2xlYW4gY3JlYXRlSW5wdXQsCi0JCSBib29sZWFuIGNyZWF0ZU91dHB1dCwKLQkJIGJvb2xlYW4gY3JlYXRlRmF1bHQpCi0JewotCSAgdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQkgIHRoaXMuY3JlYXRlSW5wdXQgPSBjcmVhdGVJbnB1dDsKLQkgIHRoaXMuY3JlYXRlT3V0cHV0ID0gY3JlYXRlT3V0cHV0OwotCSAgdGhpcy5jcmVhdGVGYXVsdCA9IGNyZWF0ZUZhdWx0OwotCX0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGFuIE9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gT3BlcmF0aW9uLiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIE9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBBZGRPcGVyYXRpb25Db21tYW5kKFBvcnRUeXBlIHBvcnRUeXBlLCBPcGVyYXRpb24gb3JpZ2luYWxPcGVyYXRpb24sIFN0cmluZyBuYW1lLCBib29sZWFuIGNvcHlJbk91dEZhdWx0KSB7Ci0gIAl0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0gIAl0aGlzLm9yaWdpbmFsT3BlcmF0aW9uID0gb3JpZ2luYWxPcGVyYXRpb247Ci0gIAl0aGlzLm5hbWUgPSBuYW1lOwotICAJdGhpcy5jb3B5SW5PdXRGYXVsdCA9IGNvcHlJbk91dEZhdWx0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKG5hbWUpOwotICAgIG9wZXJhdGlvbi5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHBvcnRUeXBlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0KLSAgICBpZiAob3JpZ2luYWxPcGVyYXRpb24gPT0gbnVsbCkgeyAgICAKLSAgICAJV1NETEVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgIAlpZiAoY3JlYXRlSW5wdXQpCi0gICAgCXsKLSAgICAJCWNvbW1hbmQgPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbixERUZBVUxUX0lOUFVUX05BTUUsdHJ1ZSk7Ci0gICAgCQljb21tYW5kLnJ1bigpOwotICAgIAl9Ci0gICAgCi0gICAgCWlmIChjcmVhdGVPdXRwdXQpCi0gICAgCXsKLSAgICAJCWNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sREVGQVVMVF9PVVRQVVRfTkFNRSx0cnVlKTsKLSAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgCX0KLSAgICAKLSAgICAJaWYgKGNyZWF0ZUZhdWx0KQotICAgIAl7Ci0gICAgCQljb21tYW5kID0gbmV3IEFkZEZhdWx0Q29tbWFuZChvcGVyYXRpb24sREVGQVVMVF9GQVVMVF9OQU1FLHRydWUpOwotICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAJfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJLy8gRG8gbmVjZXNzYXJ5IGNvcHlpbmcgb2YgZGF0YSBmcm9tIG9yaWdpbmFsIG9wZXJhdGlvbiB0byBuZXcgb3BlcmF0aW9uCi0gICAgCS8vIFBhcmFtYXRlciBvcmRlcmluZz8gRG9jdW1lbnRhdGlvbj8gIFRoaXMgcGFydCBzdGlsbCBuZWVkcyB0byBiZSB3b3JrZWQgb24gICAgCQotICAgIAkvLyBDb3B5ICdraWRzJyBpZiBuZWNlc3NhcnkKLSAgICAJaWYgKGNvcHlJbk91dEZhdWx0KSB7Ci0gICAgCQlXU0RMRWxlbWVudENvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICAJaWYgKG9yaWdpbmFsT3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICAJewotICAgICAgICAJCU91dHB1dCBvdXRwdXQgPSBvcmlnaW5hbE9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgICAgIAkJY29tbWFuZCA9IG5ldyBBZGRPdXRwdXRDb21tYW5kKG9wZXJhdGlvbiwgb3V0cHV0LCBOYW1lVXRpbC5idWlsZFVuaXF1ZU91dHB1dE5hbWUocG9ydFR5cGUsIG9wZXJhdGlvbi5nZXROYW1lKCksICIiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCQljb21tYW5kLnJ1bigpOwotICAgICAgICAJfQotICAgICAgICAJCi0gICAgICAgIAlpZiAob3JpZ2luYWxPcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgCXsKLSAgICAgICAgCQlJbnB1dCBpbnB1dCA9IG9yaWdpbmFsT3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgICAgICAJCWNvbW1hbmQgPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgaW5wdXQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlSW5wdXROYW1lKHBvcnRUeXBlLCBvcGVyYXRpb24uZ2V0TmFtZSgpLCAiIikpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAgICAgCX0KLSAgICAgICAgCi0gICAgICAgIAlpZiAob3JpZ2luYWxPcGVyYXRpb24uZ2V0RUZhdWx0cygpICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJSXRlcmF0b3IgaXQgPSBvcmlnaW5hbE9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgIAkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpdC5uZXh0KCk7Ci0gICAgICAgIAkJCWNvbW1hbmQgPSBuZXcgQWRkRmF1bHRDb21tYW5kKG9wZXJhdGlvbiwgZmF1bHQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlRmF1bHROYW1lKG9yaWdpbmFsT3BlcmF0aW9uLCBmYXVsdC5nZXROYW1lKCkpKTsKLSAgICAgICAgCQkJY29tbWFuZC5ydW4oKTsKLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgCQkKLSAgICAJfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODgxMWQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5TbWFydFJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRPdXRwdXRDb21tYW5kIGV4dGVuZHMgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQKLXsKLSAgcHJpdmF0ZSBPdXRwdXQgb3JpZ2luYWxPdXRwdXQ7Ci0gIAotICBwdWJsaWMgQWRkT3V0cHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG9wZXJhdGlvbixuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBBZGRPdXRwdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lLCBib29sZWFuIGNyZWF0ZU1lc3NhZ2UpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSxjcmVhdGVNZXNzYWdlKTsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYW4gT3V0cHV0IGJhc2VkIG9uIHRoZSBnaXZlbiBPdXRwdXQuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gT3V0cHV0LgotICAgKi8KLSAgcHVibGljIEFkZE91dHB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgT3V0cHV0IG9yaWdpbmFsT3V0cHV0LCBTdHJpbmcgbmFtZSkgewotICAJc3VwZXIob3BlcmF0aW9uLCBuYW1lLCBmYWxzZSk7Ci0gIAkKLSAgCXRoaXMub3JpZ2luYWxPdXRwdXQgPSBvcmlnaW5hbE91dHB1dDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3V0cHV0KCk7Ci0vLyAgICBtZXNzYWdlUmVmZXJlbmNlLnNldE5hbWUobmFtZSk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQoKE91dHB1dCltZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAKLSAgICAvLyAgVEJEIC0gYWRkIGJpbmRpbmcgb3V0cHV0IAotICAgIAotICAgIGlmIChvcmlnaW5hbE91dHB1dCA9PSBudWxsKSB7Ci0gICAgCWlmIChjcmVhdGVNZXNzYWdlKQotICAgIAkJY3JlYXRlTWVzc2FnZSgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJLy8gRG8gbmVjZXNzYXJ5IGNvcHlpbmcgb2YgZGF0YSBmcm9tIG9yaWdpbmFsIE91dHB1dCB0byBuZXcgT3V0cHV0Ci0gICAgCWlmIChvcmlnaW5hbE91dHB1dC5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLSAgICAJCVN0cmluZyBvcmlnaW5hbE1zZ05hbWUgPSBvcmlnaW5hbE91dHB1dC5nZXRFTWVzc2FnZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQotCQlib29sZWFuIGdlbmVkID0gZmFsc2U7Ci0JCWlmIChvcmlnaW5hbE91dHB1dC5lQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBPcGVyYXRpb24pCi0JCQlnZW5lZCA9IFNtYXJ0UmVuYW1lQWN0aW9uLmlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob3JpZ2luYWxNc2dOYW1lLCAoKE9wZXJhdGlvbikgb3JpZ2luYWxPdXRwdXQuZUNvbnRhaW5lcigpKS5nZXROYW1lKCksICJSZXNwb25zZSIpOyAvLyROT04tTkxTLTEkCi0JCQotCQlTdHJpbmcgbmV3TXNnTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChnZW5lZCkgewotCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbWVzc2FnZVJlZmVyZW5jZSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJTWVzc2FnZSB0TWVzc2FnZSA9IG9yaWdpbmFsT3V0cHV0LmdldEVNZXNzYWdlKCk7Ci0JCQluZXdNc2dOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCB0TWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQkJfQotCQkKLSAgICAJY3JlYXRlTWVzc2FnZShvcmlnaW5hbE91dHB1dCwgbmV3TXNnTmFtZSk7Ci0gICAgCX0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwODViZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kIHsKLQlwcml2YXRlIE91dHB1dCBvdXRwdXQ7Ci0JCi0JcHVibGljIEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKG9wZXJhdGlvbiwgc3R5bGUpOwotCX0KLQkKLQkvKgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQkJaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLQkJCXBhcnQgPSBjcmVhdGVXU0RMQ29tcG9uZW50cyhvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLQkJfQotCQllbHNlIHsKLQkJCUFkZE91dHB1dENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRPdXRwdXRDb21tYW5kKG9wZXJhdGlvbiwgbnVsbCk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJb3V0cHV0ID0gKE91dHB1dCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJcGFydCA9IGNyZWF0ZVdTRExDb21wb25lbnRzKG91dHB1dCk7Ci0JCX0KLQkJCi0JCW5ld1BhcnQgPSBwYXJ0OwotCQkvLyBDcmVhdGUgbmVjZXNzYXJ5IFhTRCBPYmplY3RzIHN0YXJ0aW5nIHdpdGggdGhlIFBhcnQgcmVmZXJlbmNlCi0JCW5ld1hTREVsZW1lbnQgPSBjcmVhdGVYU0RPYmplY3RzKHBhcnQpOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCWlmICh0aGlzLnN0eWxlID09IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJCW5ld0Fub255bW91c1hTREVsZW1lbnROYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJSZXNwb25zZSI7IC8vJE5PTi1OTFMtMSQ7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IGdldFdTRExQYXJ0TmFtZSgpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3WFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJbmV3WFNERWxlbWVudE5hbWUgPSAib3V0IjsgLy8kTk9OLU5MUy0xJAotLy8JCQluZXdYU0RFbGVtZW50TmFtZSA9IGdldFdTRExQYXJ0TmFtZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3WFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETE1lc3NhZ2VOYW1lKCkgewotCQlpZiAobmV3V1NETE1lc3NhZ2VOYW1lID09IG51bGwpIHsKLQkJCWlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLQkJCQluZXdXU0RMTWVzc2FnZU5hbWU9IE5hbWVVdGlsLmdldE1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3V1NETE1lc3NhZ2VOYW1lOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETFBhcnROYW1lKCkgewotCQlpZiAobmV3V1NETFBhcnROYW1lID09IG51bGwpIHsKLQkJCW5ld1dTRExQYXJ0TmFtZSAgPSBOYW1lVXRpbC5nZXRQYXJ0TmFtZShvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsJCQkKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExQYXJ0TmFtZTsKLQl9Ci0JCi0JcHVibGljIE1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJcmV0dXJuIG91dHB1dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBhcnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBhcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTA4YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQYXJ0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRQYXJ0Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgcHJpdmF0ZSBQYXJ0IHBhcnQ7Ci0gIHByaXZhdGUgUGFydCBvcmlnaW5hbFBhcnQ7Ci0gIAotICBwcml2YXRlIFFOYW1lIHR5cGVPckVsZW1lbnROYW1lOwotICBwcml2YXRlIGJvb2xlYW4gdXNlVHlwZSA9IHRydWU7Ci0KLSAgcHVibGljIEFkZFBhcnRDb21tYW5kCi0JCShNZXNzYWdlIG1lc3NhZ2UsCi0JCSBTdHJpbmcgbmFtZSkKLQl7Ci0JICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQl9Ci0gIAotICBwdWJsaWMgQWRkUGFydENvbW1hbmQKLQkJKE1lc3NhZ2UgbWVzc2FnZSwKLQkJIFN0cmluZyBuYW1lLAotCQkgU3RyaW5nIG5hbWVzcGFjZSwKLQkJIFN0cmluZyBsb2NhbE5hbWUsCi0JCSBib29sZWFuIHVzZVR5cGUpCi0JewotCSAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JICB0aGlzLnVzZVR5cGUgPSB1c2VUeXBlOwotCSAgdHlwZU9yRWxlbWVudE5hbWUgPSBuZXcgUU5hbWUobmFtZXNwYWNlLGxvY2FsTmFtZSk7Ci0JfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYSBQYXJ0IGJhc2VkIG9uIHRoZSBnaXZlbiBQYXJ0LiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIFBhcnQuCi0gICAqLwotICBwdWJsaWMgQWRkUGFydENvbW1hbmQKLQkoTWVzc2FnZSBtZXNzYWdlLAotCSBQYXJ0IG9yaWdpbmFsUGFydCwKLQkgU3RyaW5nIG5hbWUpCi0gIHsKLSAgCXRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIAl0aGlzLm5hbWUgPSBuYW1lOwotICAJdGhpcy5vcmlnaW5hbFBhcnQgPSBvcmlnaW5hbFBhcnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIEFkZFBhcnRDb21tYW5kCi0JCShNZXNzYWdlIG1lc3NhZ2UsCi0JCSBTdHJpbmcgbmFtZSwKLQkJIFN0cmluZyBuYW1lc3BhY2UsCi0JCSBTdHJpbmcgbG9jYWxOYW1lKQotCXsKLQkgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCSAgdHlwZU9yRWxlbWVudE5hbWUgPSBuZXcgUU5hbWUobmFtZXNwYWNlLGxvY2FsTmFtZSk7Ci0JfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGlmICh0eXBlT3JFbGVtZW50TmFtZSA9PSBudWxsKQotICAgICAgdHlwZU9yRWxlbWVudE5hbWUgPSBjcmVhdGVEZWZhdWx0VHlwZU5hbWUoKTsKLSAgICAKLSAgICAvLyBBZGQgbmFtZXNwYWNlIHRvIHRoZSBEZWZpbml0aW9ucyBpZiBpdCBpcyBub3QgdGhlcmUgeWV0LgotICAgIGFkZE5hbWVzcGFjZURlY2xhcmF0aW9uKCk7Ci0gICAgCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIAotICAgIGlmIChvcmlnaW5hbFBhcnQgPT0gbnVsbCkgewotICAgIAlpZiAodXNlVHlwZSkKLSAgICAJCXBhcnQuc2V0VHlwZU5hbWUodHlwZU9yRWxlbWVudE5hbWUpOwotICAgIAllbHNlCi0gICAgCQlwYXJ0LnNldEVsZW1lbnROYW1lKHR5cGVPckVsZW1lbnROYW1lKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCWlmIChvcmlnaW5hbFBhcnQuZ2V0VHlwZU5hbWUoKSAhPSBudWxsKQotICAgIAkJcGFydC5zZXRUeXBlTmFtZShvcmlnaW5hbFBhcnQuZ2V0VHlwZU5hbWUoKSk7Ci0KLSAgICAJU3RyaW5nIG5ld0VsZW1lbnROYW1lID0gbnVsbDsKLSAgICAJaWYgKG9yaWdpbmFsUGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwpIHsKLSAgICAJCQotICAgIAkJYm9vbGVhbiBjcmVhdGVOZXdFbGVtZW50ID0gdHJ1ZTsKLSAgICAJCWlmIChvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCAmJiBvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpICE9IG51bGwpIHsKLSAgICAgICAgCQlpZiAoIShvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgSURPTU5vZGUpKSB7Ci0gICAgICAgIAkJCWNyZWF0ZU5ld0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgCQl9ICAgICAgICAJCQotICAgIAkJfQotICAgIAkJCi0gICAgCQlpZiAoY3JlYXRlTmV3RWxlbWVudCkgewotICAgIAkJCW5ld0VsZW1lbnROYW1lID0gZ2V0TmV3TmFtZUhlbHBlcihuYW1lLCBvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBmYWxzZSk7Ci0gICAgCQkJcGFydC5zZXRFbGVtZW50TmFtZShuZXcgUU5hbWUob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIG5ld0VsZW1lbnROYW1lKSk7Ci0JCi0gICAgCQkJaWYgKG9yaWdpbmFsUGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotICAgIAkJCQlpZiAobmV3RWxlbWVudE5hbWUgPT0gbnVsbCkgewotICAgIAkJCQkJbmV3RWxlbWVudE5hbWUgPSBnZXROZXdOYW1lSGVscGVyKG5hbWUsIG9yaWdpbmFsUGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGZhbHNlKTsKLSAgICAJCQkJfQotICAgIAkJCi0gICAgCQkJCUFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgZWxlbWVudEFjdGlvbiA9IG5ldyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG9yaWdpbmFsUGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG5ld0VsZW1lbnROYW1lKTsKLSAgICAJCQkJZWxlbWVudEFjdGlvbi5ydW4oKTsKLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCQllbHNlIHsKLSAgICAJCQlwYXJ0LnNldEVsZW1lbnROYW1lKG5ldyBRTmFtZShvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgb3JpZ2luYWxQYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgICAJCi0gICAgcGFydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAoKFBhcnRJbXBsKXBhcnQpLnJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOyAKLSAgICBtZXNzYWdlLmFkZFBhcnQocGFydCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbigpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBtZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoIWRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpLmNvbnRhaW5zVmFsdWUodHlwZU9yRWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgIHsKLSAgICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJwIix0eXBlT3JFbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7IC8vJE5PTi1OTFMtMSQKLS8vICAgICAgKChXU0RMRWxlbWVudEltcGwpZGVmaW5pdGlvbikudXBkYXRlRWxlbWVudChmYWxzZSk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFFOYW1lIGNyZWF0ZURlZmF1bHRUeXBlTmFtZSgpCi0gIHsKLSAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCJzdHJpbmciKTsgLy8kTk9OLU5MUy0xJAotICAgIHJldHVybiBxbmFtZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TmV3TmFtZUhlbHBlcihTdHJpbmcgYmFzZSwgRGVmaW5pdGlvbiBkZWYsIGJvb2xlYW4gaXNUeXBlKQotICB7IAotICAgIFN0cmluZyBuYW1lID0gYmFzZTsgICAgCi0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIC8vIFVnbHkuLi4uICBSZWRvIHRoaXMuLi4KLSAgICAvLyBHZXQgYSBsaXN0IG9mIEVsZW1lbnRzLi4uCi0gICAgTGlzdCBlbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgaWYgKGRlZi5nZXRFVHlwZXMoKSAhPSBudWxsKSB7Ci0gICAgCUxpc3QgeHNkc0xpc3QgPSBkZWYuZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIAlpZiAoeHNkc0xpc3QgIT0gbnVsbCkgewotICAgIAkJSXRlcmF0b3IgeHNkc0l0ZXJhdG9yID0geHNkc0xpc3QuaXRlcmF0b3IoKTsKLSAgICAJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHhzZHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgCQlYU0RTY2hlbWEgc2NoZW1hID0geHNkRWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICAJCWlmIChzY2hlbWEgIT0gbnVsbCkgewotICAgIAkJCWVsZW1lbnRMaXN0ID0gc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgICAKLSAgICBpZiAoZWxlbWVudExpc3QgIT0gbnVsbCkgewotICAgIAlpbnQgaW5kZXggPSAwOwotICAgIAl3aGlsZSAoaW5kZXggPCBlbGVtZW50TGlzdC5zaXplKCkpIHsKLSAgICAJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbGFyYXRpb24gPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBlbGVtZW50TGlzdC5nZXQoaW5kZXgpOwotICAgIAkJCi0gICAgCQlpZiAobmFtZS5lcXVhbHMoZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKSkpIHsKLSAgICAJCQljb3VudCsrOwotICAgIAkJCW5hbWUgPSBuYW1lICsgY291bnQ7Ci0gICAgCQkJaW5kZXggPSAwOwotICAgIAkJfQotICAgIAkJZWxzZSB7Ci0gICAgCQkJaW5kZXgrKzsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMjY5MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkUG9ydENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2U7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgUG9ydCBwb3J0OwotICAKLSAgcHVibGljIEFkZFBvcnRDb21tYW5kCi0JCShTZXJ2aWNlIHNlcnZpY2UsCi0JCSBTdHJpbmcgbmFtZSkKLQl7Ci0JICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQl9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwb3J0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHBvcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydCgpOwotICAgIHBvcnQuc2V0TmFtZShuYW1lKTsKLSAgICBwb3J0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIHNlcnZpY2UuYWRkUG9ydChwb3J0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0VHlwZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydFR5cGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNmZlYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0VHlwZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRQb3J0VHlwZUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZTsKLSAgcHJpdmF0ZSBQb3J0VHlwZSBwb3J0VHlwZTsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVPcGVyYXRpb24gPSBmYWxzZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9PUEVSQVRJT05fTkFNRSA9ICJOZXdPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIEFkZFBvcnRUeXBlQ29tbWFuZAotCQkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAgCi0JCSBTdHJpbmcgbG9jYWxOYW1lKQotCXsKLQkgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQl9Ci0KLSAgcHVibGljIEFkZFBvcnRUeXBlQ29tbWFuZAotCQkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLQkJIFN0cmluZyBsb2NhbE5hbWUsCi0JCSBib29sZWFuIGNyZWF0ZU9wZXJhdGlvbikKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JICB0aGlzLmNyZWF0ZU9wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbjsKLQl9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLldTRExFbGVtZW50QWN0aW9uI2dldFdTRExFbGVtZW50KCkKLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcG9ydFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSxsb2NhbE5hbWUpKTsKLSAgICBwb3J0VHlwZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkUG9ydFR5cGUocG9ydFR5cGUpOwotICAgIAotICAgIGlmIChjcmVhdGVPcGVyYXRpb24pCi0gICAgewotICAgICAgQWRkT3BlcmF0aW9uQ29tbWFuZCBjb21tYW5kID0gCi0gICAgICAgIG5ldyBBZGRPcGVyYXRpb25Db21tYW5kKHBvcnRUeXBlLERFRkFVTFRfT1BFUkFUSU9OX05BTUUsdHJ1ZSx0cnVlLGZhbHNlKTsKLSAgICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMb2NhbE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBsb2NhbE5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFNlcnZpY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFNlcnZpY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NWNmMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRTZXJ2aWNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkU2VydmljZUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZTsKLSAgcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2U7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlUG9ydCA9IGZhbHNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1BPUlRfTkFNRSA9ICJOZXdQb3J0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBBZGRTZXJ2aWNlQ29tbWFuZAotCQkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAgCi0JCSBTdHJpbmcgbG9jYWxOYW1lKQotCXsKLQkgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQl9Ci0KLQlwdWJsaWMgQWRkU2VydmljZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0JCSBTdHJpbmcgbG9jYWxOYW1lLAotCQkgYm9vbGVhbiBjcmVhdGVQb3J0KQotCXsKLQkgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQkgIHRoaXMuY3JlYXRlUG9ydCA9IGNyZWF0ZVBvcnQ7Ci0JfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBzZXJ2aWNlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNlcnZpY2UoKTsKLSAgICBzZXJ2aWNlLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLGxvY2FsTmFtZSkpOwotICAgIHNlcnZpY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgCi0gICAgaWYgKGNyZWF0ZVBvcnQpCi0gICAgewotICAgICAgQWRkUG9ydENvbW1hbmQgY29tbWFuZCA9IAotICAgICAgICBuZXcgQWRkUG9ydENvbW1hbmQoc2VydmljZSxERUZBVUxUX1BPUlRfTkFNRSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TG9jYWxOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgbG9jYWxOYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRUeXBlc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVHlwZXNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4N2U1OGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRUeXBlc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLS8vIERlZmluaXRpb24gbXVzdCBub3QgaGF2ZSAidHlwZXMiIGVsZW1lbnQgdG8gcnVuIHRoaXMgY29tbWFuZC4KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRUeXBlc0NvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgVHlwZXMgdHlwZXM7Ci0gIAotICBwdWJsaWMgQWRkVHlwZXNDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gIAlpZiAoKHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSkgIT0gbnVsbCkKLSAgICAgIHJldHVybjsgLy8gInR5cGVzIiBhbHJlYWR5IGV4aXN0cy4KLSAgCQotICAgIHR5cGVzID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVR5cGVzKCk7Ci0gICAgdHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLnNldFR5cGVzKHR5cGVzKTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiB0eXBlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0ODdiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZVVSSTsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYWxOYW1lOwotICBwcml2YXRlIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgcHJpdmF0ZSBNYXAgcHJvcGVydGllczsKLSAKLSAgcHVibGljIEFkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQKLSAgICAoRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQsIAotICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLAotICAgICBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgdGhpcy5leHRlbnNpYmxlRWxlbWVudCA9IGV4dGVuc2libGVFbGVtZW50OwotICAgIHRoaXMubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZAotICAgIChFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCwgCi0gICAgIFN0cmluZyBuYW1lc3BhY2VVUkksCi0gICAgIFN0cmluZyBsb2NhbE5hbWUsCi0gICAgIE1hcCBwcm9wZXJ0aWVzKQotICB7Ci0gICAgdGhpcy5leHRlbnNpYmxlRWxlbWVudCA9IGV4dGVuc2libGVFbGVtZW50OwotICAgIHRoaXMubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gIAlleHRlbnNpYmlsaXR5RWxlbWVudCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgCWV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnRUeXBlKG5ldyBRTmFtZShuYW1lc3BhY2VVUkksbG9jYWxOYW1lKSk7Ci0gIAkKLSAgICBpZiAocHJvcGVydGllcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvcGVydGllcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICBNYXAuRW50cnkgZW50cnkgPSBudWxsOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgIAllbnRyeSA9IChNYXAuRW50cnkpaXRlcmF0b3IubmV4dCgpOwotICAgICAgCVN0cmluZyBhdHRyaWJ1dGUgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpZW50cnkuZ2V0VmFsdWUoKTsgICAgICAJCi0gICAgICAJKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gIAlleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGV4dGVuc2libGVFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gIAlleHRlbnNpYmxlRWxlbWVudC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTRlNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotCi0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgWFNERWxlbWVudERlY2xhcmF0aW9uIGluIHRoZSB0YXJnZXROYW1lc3BhY2UuCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotICBwcml2YXRlIFN0cmluZyBlbGVtZW50TmFtZTsKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgc2NoZW1hOwotICBwcml2YXRlIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50OwotICAKLSAgLyoqCi0gICAqIFRPRE86Ci0gICAqIFdlIGhhdmUgYSBwb3RlbnRpYWwgcHJvYmxlbSBoZXJlLi4uLiAgV2hhdCBpZiB0aGUgZGVmaW5pdGlvbiB0YXJnZXRuYW1lc3BhY2UgaXMgbnVsbC4uLi4KLSAgICovCi0gIHB1YmxpYyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGVsZW1lbnROYW1lKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgdGhpcy5lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lOwotICB9Ci0gIAotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICogVXNlIEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUpCi0gICAqLwotICBwdWJsaWMgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZAotICAgIChEZWZpbml0aW9uIGRlZmluaXRpb24sIAotICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCAKLSAgICAgU3RyaW5nIGVsZW1lbnROYW1lKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IHRhcmdldE5hbWVzcGFjZTsKLSAgICB0aGlzLmVsZW1lbnROYW1lID0gZWxlbWVudE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGdldFNjaGVtYSgpOwotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCA9IAotICAgICAgWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgZWxlbWVudERlY2wuc2V0TmFtZShlbGVtZW50TmFtZSk7Ci0gICAgCi0gICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZURlZmluaXRpb24gPSBnZXRYU0RTdHJpbmdUeXBlKHhzZFNjaGVtYSk7Ci0gICAgZWxlbWVudERlY2wuc2V0VHlwZURlZmluaXRpb24oc2ltcGxlVHlwZURlZmluaXRpb24pOyAgICAKLSAgICB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKS5hZGQoZWxlbWVudERlY2wpOwotICAgIAotICAgIHhzZEVsZW1lbnQgPSBlbGVtZW50RGVjbDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKFN0cmluZyBuZXdFbGVtZW50TmFtZSkgewotICAJZWxlbWVudE5hbWUgPSBuZXdFbGVtZW50TmFtZTsKLSAgCXJ1bigpOwotICB9Ci0gIAotICAvKgotICAgKiBTcGVjaWZ5IHdoaWNoIFNjaGVtYSB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgVHlwZS4KLSAgICogQ2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY2FsbGluZyBydW4oKS4gIE90aGVyd2lzZSBpdCB3aWxsIHVzZSB0aGUgZmlyc3QKLSAgICogU2NoZW1hIGl0IGZpbmRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpIHsKLSAgCXRoaXMuc2NoZW1hID0gc2NoZW1hOwotICB9Ci0gIAotICAvKgotICAgKiBSZXR1cm4gdGhlIFNjaGVtYSB1c2VkIHRvIGNyZWF0ZSB0aGUgVHlwZQotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBnZXRTY2hlbWEoKSB7Ci0gIAlpZiAoc2NoZW1hID09IG51bGwpIHsKLSAgCQlyZXR1cm4gZ2V0WFNEU2NoZW1hKHRhcmdldE5hbWVzcGFjZSk7Ci0gIAl9Ci0gIAllbHNlIHsKLSAgCQlyZXR1cm4gc2NoZW1hOwotICAJfQotICB9Ci0gIAotICBwcml2YXRlIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIGdldFhTRFN0cmluZ1R5cGUoWFNEU2NoZW1hIHNjaGVtYSkKLSAgewotICAgIHJldHVybiBzY2hlbWEuZ2V0U2NoZW1hRm9yU2NoZW1hKCkucmVzb2x2ZVNpbXBsZVR5cGVEZWZpbml0aW9uKCJzdHJpbmciKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwcml2YXRlIFhTRFNjaGVtYSBnZXRYU0RTY2hlbWEoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWE7Ci0gICAgCi0gICAgLy8gRG8gd2UgaGF2ZSBhIHNjaGVtYSBhbHJlYWR5PwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0VHlwZXMoKS5nZXRTY2hlbWFzKHRhcmdldE5hbWVzcGFjZSkuaXRlcmF0b3IoKTsKLSAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOyAvLyBHZXQgdGhlIGZpcnN0IG9uZS4KLSAgICAgIHJldHVybiB4c2RTY2hlbWE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7CSAgICAKLSAgICAgIC8vIENyZWF0ZSBhIG5ldyBzY2hlbWEgYmVjYXVzZSB0aGVyZSdzIG5vbmUuCi0gICAgICBBZGRYU0RTY2hlbWFDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEU2NoZW1hQ29tbWFuZChkZWZpbml0aW9uLHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgICAgcmV0dXJuICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKS5nZXRTY2hlbWEoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgVHlwZXMgZ2V0VHlwZXMoKQotICB7Ci0gICAgLy8gVHlwZXMgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdCB5ZXQuCi0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgcmV0dXJuIHR5cGVzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBBZGRUeXBlc0NvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRUeXBlc0NvbW1hbmQoZGVmaW5pdGlvbik7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgICAgcmV0dXJuIChUeXBlcyljb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gZ2V0WFNERWxlbWVudCgpCi0gIHsKLQkgIHJldHVybiB4c2RFbGVtZW50OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RTY2hlbWFDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFNjaGVtYUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3OTE2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFNjaGVtYUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRYU0RTY2hlbWFDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50OwotICBwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0gIAotICBwdWJsaWMgQWRkWFNEU2NoZW1hQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgfQotICAKLSAgcHVibGljIEFkZFhTRFNjaGVtYUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IHRhcmdldE5hbWVzcGFjZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgeyAgICAKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gCi0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNjaGVtYSgpOwotICAgIHhzZFNjaGVtYS5zZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgieHNkIik7IC8vJE5PTi1OTFMtMSQKLSAgICB4c2RTY2hlbWEuc2V0VGFyZ2V0TmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgLy8gQ2hvb3NlIHRoZSBwcmVmaXggQ2hvb3NlIHRoZSBwcmVmaXggdXNlZCBmb3IgdGhpcyBzY2hlbWEncyBuYW1lc3BhY2UgYW5kIHRoZSBzY2hlbWEgZm9yIHNjaGVtYSdzIG5hbWVzcGFjZS4KLSAgICAvLyAgICAKLSAgICBqYXZhLnV0aWwuTWFwIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAgPSB4c2RTY2hlbWEuZ2V0UU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCgpOwotLy8gICAgcU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcC5wdXQoInAiLCB4c2RTY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAucHV0Ci0JICAoeHNkU2NoZW1hLmdldFNjaGVtYUZvclNjaGVtYVFOYW1lUHJlZml4KCksb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRTY2hlbWEoeHNkU2NoZW1hKTsKLSAgICAgICAKLSAgICAvLyBUQkQgLSBDaGVjayBpZiBtdWx0aXBsZSBzY2hlbWFzIHdpdGggdGhlIHNhbWUgdGFyZ2V0TmFtZXNwYWNlIGNhbiBjby1leGlzdC4KLSAgICBUeXBlcyB0eXBlcyA9IGdldFR5cGVzKCk7Ci0gICAgdHlwZXMuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIAotICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpID09IG51bGwpIHsKLSAgICAJZGVmaW5pdGlvbi5zZXRFVHlwZXModHlwZXMpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgVHlwZXMgZ2V0VHlwZXMoKQotICB7Ci0gICAgLy8gVHlwZXMgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAgICBUeXBlcyB0eXBlcyA9IChUeXBlcylkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICByZXR1cm4gdHlwZXM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdHlwZXMgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHlwZXMoKTsKLSAgICAgICAgdHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgcmV0dXJuIHR5cGVzOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZDdjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IFhTRFR5cGVEZWZpbml0aW9uIGluIHRoZSB0YXJnZXROYW1lc3BhY2UuCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0gIHByaXZhdGUgU3RyaW5nIHR5cGVOYW1lOwotICBwcml2YXRlIFhTRFNjaGVtYSBzY2hlbWE7Ci0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24geHNkVHlwZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ29tcGxleFR5cGUgPSB0cnVlOwotICAKLSAgLyoqCi0gICAqIFRPRE86Ci0gICAqIFdlIGhhdmUgYSBwb3RlbnRpYWwgcHJvYmxlbSBoZXJlLi4uLiAgV2hhdCBpZiB0aGUgZGVmaW5pdGlvbiB0YXJnZXRuYW1lc3BhY2UgaXMgbnVsbC4uLi4KLSAgICovCi0gIHB1YmxpYyBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB0aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUsIGJvb2xlYW4gaXNDb21wbGV4VHlwZSkKLSAgewotICAJdGhpcyhkZWZpbml0aW9uLCB0eXBlTmFtZSk7Ci0gIAl0aGlzLmlzQ29tcGxleFR5cGUgPSBpc0NvbXBsZXhUeXBlOwotICB9Ci0gIAotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICogVXNlIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgICovCi0gIHB1YmxpYyBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQKLSAgICAoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLSAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwKLSAgICAgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IHRhcmdldE5hbWVzcGFjZTsKLSAgICB0aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gZ2V0U2NoZW1hKCk7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZjsKLSAgICAKLSAgICBpZiAoaXNDb21wbGV4VHlwZSkgewotICAgIAl0eXBlRGVmID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAl0eXBlRGVmID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2ltcGxlVHlwZURlZmluaXRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgdHlwZURlZi5zZXROYW1lKHR5cGVOYW1lKTsKLSAgICB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKS5hZGQodHlwZURlZik7Ci0gICAgCi0gICAgeHNkVHlwZSA9IHR5cGVEZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bihTdHJpbmcgbmV3VHlwZU5hbWUpIHsKLSAgCXR5cGVOYW1lID0gbmV3VHlwZU5hbWU7Ci0gIAlydW4oKTsKLSAgfQotICAKLSAgLyoKLSAgICogU3BlY2lmaXkgaWYgd2Ugc2hvdWxkIGNyZWF0ZSBhIGNvbXBsZXggb3Igc2ltcGxlIHR5cGUuICBUaGlzIHNob3VsZCBzaG91bGQgYmUKLSAgICogY2FsbGVkIGJlZm9yZSBydW4oKS4KLSAgICogT3ZlcnJpZGVzIHRoZSB2YWx1ZSBzZXQgd2hlbiB0aGUgY29uc3RydWN0b3IKLSAgICogQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lLCBib29sZWFuIGlzQ29tcGxleFR5cGUpCi0gICAqIGlzIHVzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpc0NvbXBsZXhUeXBlKGJvb2xlYW4gaXNDb21wbGV4VHlwZSkgewotICAJdGhpcy5pc0NvbXBsZXhUeXBlID0gaXNDb21wbGV4VHlwZTsKLSAgfQotICAKLSAgLyoKLSAgICogU3BlY2lmeSB3aGljaCBTY2hlbWEgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIFR5cGUuCi0gICAqIENhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGNhbGxpbmcgcnVuKCkuICBPdGhlcndpc2UgaXQgd2lsbCB1c2UgdGhlIGZpcnN0Ci0gICAqIFNjaGVtYSBpdCBmaW5kcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKSB7Ci0gIAl0aGlzLnNjaGVtYSA9IHNjaGVtYTsKLSAgfQotICAKLSAgLyoKLSAgICogUmV0dXJuIHRoZSBTY2hlbWEgdXNlZCB0byBjcmVhdGUgdGhlIFR5cGUKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgZ2V0U2NoZW1hKCkgewotICAJaWYgKHNjaGVtYSA9PSBudWxsKSB7Ci0gIAkJcmV0dXJuIGdldFhTRFNjaGVtYSh0YXJnZXROYW1lc3BhY2UpOwotICAJfQotICAJZWxzZSB7Ci0gIAkJcmV0dXJuIHNjaGVtYTsKLSAgCX0KLSAgfQotCi0gIHByaXZhdGUgWFNEU2NoZW1hIGdldFhTRFNjaGVtYShTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYTsKLSAgICAKLSAgICAvLyBEbyB3ZSBoYXZlIGEgc2NoZW1hIGFscmVhZHk/Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRUeXBlcygpLmdldFNjaGVtYXModGFyZ2V0TmFtZXNwYWNlKS5pdGVyYXRvcigpOwotICAgIGlmIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSlpdGVyYXRvci5uZXh0KCk7IC8vIEdldCB0aGUgZmlyc3Qgb25lLgotICAgICAgcmV0dXJuIHhzZFNjaGVtYTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsJICAgIAotICAgICAgLy8gQ3JlYXRlIGEgbmV3IHNjaGVtYSBiZWNhdXNlIHRoZXJlJ3Mgbm9uZS4KLSAgICAgIEFkZFhTRFNjaGVtYUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RTY2hlbWFDb21tYW5kKGRlZmluaXRpb24sdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgICByZXR1cm4gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCljb21tYW5kLmdldFdTRExFbGVtZW50KCkpLmdldFNjaGVtYSgpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBUeXBlcyBnZXRUeXBlcygpCi0gIHsKLSAgICAvLyBUeXBlcyBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0IHlldC4KLSAgICBUeXBlcyB0eXBlcyA9IChUeXBlcylkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICByZXR1cm4gdHlwZXM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEFkZFR5cGVzQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFR5cGVzQ29tbWFuZChkZWZpbml0aW9uKTsKLSAgICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgICByZXR1cm4gKFR5cGVzKWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTREVsZW1lbnQoKQotICB7Ci0JICByZXR1cm4geHNkVHlwZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvV1NETEVsZW1lbnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL1dTRExFbGVtZW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE4MDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvV1NETEVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwdWJsaWMgYWJzdHJhY3QgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgcnVuKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvQWRkcmVzc1BvcnRPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0FkZHJlc3NQb3J0T3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI4ZmNjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvQWRkcmVzc1BvcnRPcHRpb25zUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuUG9ydEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBBZGRyZXNzUG9ydE9wdGlvbnNQYWdlIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLCBNb2RpZnlMaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgVGV4dCBhZGRyZXNzRmllbGQ7Ci0gIHByb3RlY3RlZCBDb21wb3NpdGUgY29udHJvbDsKLSAgcHJvdGVjdGVkIFBvcnRHZW5lcmF0b3IgZ2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZSB3aXphcmRQYWdlOwotCi0gIHB1YmxpYyB2b2lkIGluaXQoQmFzZUdlbmVyYXRvciBnZW5lcmF0b3IpewotCSAgaWYgKGdlbmVyYXRvciBpbnN0YW5jZW9mIFBvcnRHZW5lcmF0b3IpIHsKLQkJICB0aGlzLmdlbmVyYXRvciA9IChQb3J0R2VuZXJhdG9yKSBnZW5lcmF0b3I7CSAgCi0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdpemFyZFBhZ2UoV2l6YXJkUGFnZSB3aXphcmRQYWdlKSB7Ci0JICB0aGlzLndpemFyZFBhZ2UgPSB3aXphcmRQYWdlOwotICB9Ci0KLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBjb250cm9sID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb250cm9sLnNldExheW91dChsYXlvdXQpOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLSAgICBMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIExhYmVsIGFkZHJlc3NMYWJlbCA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgYWRkcmVzc0xhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0FERFJFU1MgKyAiOiIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkcmVzc0ZpZWxkID0gbmV3IFRleHQoY29udHJvbCwgU1dULkJPUkRFUik7Ci0gICAgYWRkcmVzc0ZpZWxkLnNldFRleHQoQ29udGVudEdlbmVyYXRvci5BRERSRVNTX0xPQ0FUSU9OKTsKLSAgICBhZGRyZXNzRmllbGQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0gICAgYWRkcmVzc0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotCi0gICAgZ2VuZXJhdG9yLnNldEFkZHJlc3NMb2NhdGlvbihhZGRyZXNzRmllbGQuZ2V0VGV4dCgpKTsKLSAgICAKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICBnZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGFkZHJlc3NGaWVsZC5nZXRUZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotICB9Ci0gIAotICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbnRyb2woKSB7Ci0JICByZXR1cm4gY29udHJvbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9CYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTA1NjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9CYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CYXNlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIsIElNZXNzYWdlUHJvdmlkZXIgewotCXByb3RlY3RlZCBDb21wb3NpdGUgY29udHJvbDsKLQlwcm90ZWN0ZWQgQmFzZUdlbmVyYXRvciBnZW5lcmF0b3I7Ci0JcHJvdGVjdGVkIFdpemFyZFBhZ2Ugd2l6YXJkUGFnZTsKLQlwcm90ZWN0ZWQgSUZpbGUgdGFyZ2V0RmlsZTsKLQkKLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQkKLQlwdWJsaWMgQ29tcG9zaXRlIGdldENvbnRyb2woKSB7Ci0JCXJldHVybiBjb250cm9sOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoQmFzZUdlbmVyYXRvciBiYXNlR2VuZXJhdG9yKSB7Ci0JCWdlbmVyYXRvciA9IGJhc2VHZW5lcmF0b3I7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXaXphcmRQYWdlKFdpemFyZFBhZ2Ugd2l6YXJkUGFnZSkgewotCQl0aGlzLndpemFyZFBhZ2UgPSB3aXphcmRQYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0JCXNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRJRmlsZShJRmlsZSB0YXJnZXRGaWxlKSB7Ci0JCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7Ci0JfQotCQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLSAgICAJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRNZXNzYWdlVHlwZSgpIHsKLSAgICAJcmV0dXJuIElNZXNzYWdlUHJvdmlkZXIuTk9ORTsKLSAgICB9Ci0gICAgCi0JcHVibGljIFN0cmluZyBnZXRXU0lQcmVmZXJlbmNlcygpIHsKLQkJSVByb2plY3QgdGFyZ2V0UHJvamVjdCA9IHRhcmdldEZpbGUuZ2V0UHJvamVjdCgpOwotCQlQZXJzaXN0ZW50V1NJQ29udGV4dCBXU0lTU0Jjb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOwotCi0JCWlmIChXU0lTU0Jjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXModGFyZ2V0UHJvamVjdCkpIHsKLQkJCXJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLQkJfSAKLQkJZWxzZSBpZiAoV1NJU1NCY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHRhcmdldFByb2plY3QpKSB7Ci0JCQlyZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSHR0cEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMTViZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSHR0cEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yLkhUVFBDb250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgSHR0cEJpbmRpbmdPcHRpb25zUGFnZSBleHRlbmRzIEJhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgCi17Ci0gIHByb3RlY3RlZCBCdXR0b24gZ2V0QnV0dG9uOwotICBwcm90ZWN0ZWQgQnV0dG9uIHBvc3RCdXR0b247Ci0gIAotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgCi0gICAgc2VwYXJhdG9yLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgTGFiZWwgb3B0aW9uc0hlYWRpbmcgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULk5PTkUpOwotICAgIG9wdGlvbnNIZWFkaW5nLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0hUVFBfQklORElOR19PUFRJT05TKTsgCi0KLSAgICBnZXRCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZ2V0QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0hUVFBfR0VUX1JBRElPKTsgCi0gICAgZ2V0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLQotICAgIHBvc3RCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcG9zdEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9IVFRQX1BPU1RfUkFESU8pOyAKLQotICAgIGlmIChnZW5lcmF0b3IuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGdlbmVyYXRvci5nZXROYW1lKCkpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSk7Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVMaXN0LmdldCgwKTsKLSAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZWUpOwotICAgICAgICAgIFN0cmluZyB2ZXJiID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInZlcmIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGlmICgiUE9TVCIuZXF1YWxzKHZlcmIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgZ2V0QnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICBwb3N0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwb3N0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIGdldEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQkKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgSFRUUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBIVFRQQ29udGVudEdlbmVyYXRvciBodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0JCSAgaWYgKHBvc3RCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfUE9TVCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKGdldEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBodHRwR2VuZXJhdG9yLnNldFZlcmIoSFRUUENvbnRlbnRHZW5lcmF0b3IuVkVSQl9HRVQpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSVNvYXBTdHlsZUluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9JU29hcFN0eWxlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjdhNWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9JU29hcFN0eWxlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNvYXBTdHlsZUluZm8gewotCXB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRMaXRlcmFsUGF0dGVybigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYzE2MTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5TZXJ2aWNlUG9saWN5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5XU0RMTmV3RmlsZU9wdGlvbnNQYWdlOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UgZXh0ZW5kcyBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGltcGxlbWVudHMgSVNvYXBTdHlsZUluZm8KLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBkb2NMaXRlcmFsOwotICBwcm90ZWN0ZWQgQnV0dG9uIHJwY0xpdGVyYWw7Ci0gIHByb3RlY3RlZCBCdXR0b24gcnBjRW5jb2RlZDsKLQotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIExhYmVsIG9wdGlvbnNIZWFkaW5nID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5OT05FKTsKLSAgICBvcHRpb25zSGVhZGluZy5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9TT0FQX0JJTkRJTkdfT1BUSU9OUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGRvY0xpdGVyYWwgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZG9jTGl0ZXJhbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19ET0NVTUVOVF9MSVRFUkFMKTsgLy8kTk9OLU5MUy0xJAotICAgIGRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKHRydWUpOwotCi0gICAgcnBjTGl0ZXJhbCA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBycGNMaXRlcmFsLnNldFRleHQoTWVzc2FnZXMuX1VJX1JBRElPX1JQQ19MSVRFUkFMKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJwY0VuY29kZWQgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcnBjRW5jb2RlZC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19SUENfRU5DT0RFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGlmIChnZW5lcmF0b3IuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGdlbmVyYXRvci5nZXROYW1lKCkpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChlZUxpc3Quc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotCi0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgc3R5bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAotICAgICAgICAgIGlmICgicnBjIi5lcXVhbHMoc3R5bGUpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSBpZiBpdCdzIFJQQyBMaXRlcmFsIG9yIFJQQyBFbmNvZGVkCi0gICAgICAgICAgCVN0cmluZyB1c2UgPSAiZW5jb2RlZCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJTGlzdCBvcGVyYXRpb25zID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICAgICAgICAJaWYgKG9wZXJhdGlvbnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJZWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgCQlCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLmdldCgwKTsKLSAgICAgICAgICAJCWlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwgJiYgb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCU9iamVjdCBvYmplY3QgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvYmplY3QpOwotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJZWxzZSBpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCU9iamVjdCBvYmplY3QgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlCaW5kaW5nRmF1bHQgZmF1bHQgPSAoQmluZGluZ0ZhdWx0KSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJTGlzdCBmYXVsdEVFID0gZmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgCQkJCi0gICAgICAgICAgCQkJaWYgKGZhdWx0RUUuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGZhdWx0RUUuZ2V0KDApKTsKLSAgICAgICAgICAJCQl9Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQkKLSAgICAgICAgICAJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAJCQl1c2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidXNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJfQotICAgICAgICAgIAkKLSAgICAgICAgICAJaWYgKHVzZSAhPSBudWxsICYmICJsaXRlcmFsIi5lcXVhbHModXNlKSkgeyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCQlkb2NMaXRlcmFsLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCQlycGNMaXRlcmFsLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgICAJCXJwY0VuY29kZWQuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJfQotICAgICAgICAgIAllbHNlIHsgICAgICAgICAgCQotICAgICAgICAgIAkJZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjRW5jb2RlZC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgCX0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBkb2NMaXRlcmFsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJwY0xpdGVyYWwuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcnBjRW5jb2RlZC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotCSAgaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBTT0FQQ29udGVudEdlbmVyYXRvcikgewotCQkgIFNPQVBDb250ZW50R2VuZXJhdG9yIHNvYXBHZW5lcmF0b3IgPSAoU09BUENvbnRlbnRHZW5lcmF0b3IpIGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCk7Ci0JCSAgaWYgKGRvY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9ET0NVTUVOVCk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9CSAgCi0JCSAgZWxzZSBpZiAocnBjTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAocnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9FTkNPREVEKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0JCXNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotCi0JCWlmICh3aXphcmRQYWdlICE9IG51bGwpIHsKLQkJCWJvb2xlYW4gaXNDb21wbGV0ZSA9IHdpemFyZFBhZ2UuaXNQYWdlQ29tcGxldGUoKTsKLQkJCWlmICh3aXphcmRQYWdlIGluc3RhbmNlb2YgV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgewotCQkJCS8vIEEgc2VsZWN0aW9uIG1hZGUgYnkgb25lIG9mIHRoZXNlIHdpZGdldHMgbWF5IGltcGFjdCB0aGUKLQkJCQkvLyBjb21wbGV0bmVzcyBvZiBhIFdpemFyZC4KLQkJCQlpc0NvbXBsZXRlID0gKChXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB3aXphcmRQYWdlKQotCQkJCQkJLnZhbGlkYXRlUGFnZSgpOwotCQkJfQotCQkJd2l6YXJkUGFnZS5zZXRQYWdlQ29tcGxldGUoaXNDb21wbGV0ZSk7Ci0JCX0KLQl9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7Ci0JCWlmIChycGNFbmNvZGVkICE9IG51bGwgJiYgcnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJaWYgKHdpemFyZFBhZ2UgaW5zdGFuY2VvZiBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS5nZXRQcm9qZWN0KCk7Ci0JCQkJSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gKChXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB3aXphcmRQYWdlKQotCQkJCQkJLmdldFNlcnZpY2VQb2xpY3koKTsKLQkJCQlpbnQgbWVzc2FnZVR5cGUgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldE1lc3NhZ2VTZXZlcml0eSgKLQkJCQkJCXByb2plY3QsIHBvbGljeSk7Ci0JCQkJaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpIHsKLQkJCQkJbWVzc2FnZSA9IE1lc3NhZ2VzLl9FUlJPUl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc7Ci0JCQkJfSBlbHNlIGlmIChtZXNzYWdlVHlwZSA9PSBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpIHsKLQkJCQkJbWVzc2FnZSA9IE1lc3NhZ2VzLl9XQVJOX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLQkJCW1lc3NhZ2UgPSAiIjsgLy8kTk9OLU5MUy0xJCAKLQkJcmV0dXJuIG1lc3NhZ2U7Ci0JfQotCi0JcHVibGljIGludCBnZXRNZXNzYWdlVHlwZSgpIHsKLQkJaW50IG1lc3NhZ2VUeXBlID0gSU1lc3NhZ2VQcm92aWRlci5OT05FOwotCi0JCWlmIChycGNFbmNvZGVkICE9IG51bGwgJiYgcnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJaWYgKHdpemFyZFBhZ2UgaW5zdGFuY2VvZiBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS5nZXRQcm9qZWN0KCk7Ci0JCQkJSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gKChXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB3aXphcmRQYWdlKQotCQkJCQkJLmdldFNlcnZpY2VQb2xpY3koKTsKLQkJCQltZXNzYWdlVHlwZSA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0TWVzc2FnZVNldmVyaXR5KHByb2plY3QsCi0JCQkJCQlwb2xpY3kpOwotCQkJfQotCQl9Ci0JCXJldHVybiBtZXNzYWdlVHlwZTsKLQl9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50TGl0ZXJhbFBhdHRlcm4oKSB7Ci0JICByZXR1cm4gZG9jTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9FZGl0TmFtZXNwYWNlc0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0VkaXROYW1lc3BhY2VzRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNGViYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0VkaXROYW1lc3BhY2VzRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLm5zZWRpdC5Db21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgRWRpdE5hbWVzcGFjZXNEaWFsb2cgZXh0ZW5kcyBEaWFsb2cKLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBva0J1dHRvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyB0aXRsZTsKLSAgcHJvdGVjdGVkIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0gIHByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0OwotICBwcm90ZWN0ZWQgQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZyBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sOwotICBwcm90ZWN0ZWQgSVBhdGggcmVzb3VyY2VMb2NhdGlvbjsKLSAgLy8gIHByb3RlY3RlZCBMYWJlbCBlcnJvck1lc3NhZ2VMYWJlbDsKLSAgLy8gIHByb3RlY3RlZCBTdHJpbmcgZXJyb3JNZXNzYWdlOyAgCi0KLSAgLy9wcm90ZWN0ZWQgTGFiZWwgZXJyb3JNZXNzYWdlTGFiZWw7Ci0KLSAgcHVibGljIEVkaXROYW1lc3BhY2VzRGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBJUGF0aCByZXNvdXJjZUxvY2F0aW9uLCBTdHJpbmcgdGl0bGUsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIExpc3QgbmFtZXNwYWNlTGlzdCkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsKLSAgICB0aGlzLnJlc291cmNlTG9jYXRpb24gPSByZXNvdXJjZUxvY2F0aW9uOwotICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgIHRoaXMubmFtZXNwYWNlSW5mb0xpc3QgPSBuYW1lc3BhY2VMaXN0OwotICB9Ci0KLSAgcHVibGljIGludCBjcmVhdGVBbmRPcGVuKCkKLSAgewotICAgIGNyZWF0ZSgpOwotICAgIGdldFNoZWxsKCkuc2V0VGV4dCh0aXRsZSk7Ci0gICAgc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0gICAgcmV0dXJuIG9wZW4oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb250cm9sIGNvbnRyb2wgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotICAgIHVwZGF0ZUVycm9yTWVzc2FnZSgpOwotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgb2tCdXR0b24gPSBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELCBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCB0cnVlKTsKLSAgICBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBkaWFsb2dBcmVhID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotICAgIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2wgPSBuZXcgQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZyhkaWFsb2dBcmVhLCByZXNvdXJjZUxvY2F0aW9uKTsKLSAgICBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sLnNldE5hbWVzcGFjZUluZm9MaXN0KG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgcmV0dXJuIGRpYWxvZ0FyZWE7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICB1cGRhdGVFcnJvck1lc3NhZ2UoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZUVycm9yTWVzc2FnZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlKCkKLSAgewotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOwotICAgIC8qCi0gICAgU3RyaW5nIG5hbWUgPSBuYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKLSAgICBpZiAobmFtZS5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgZXJyb3JNZXNzYWdlID0gY29tcHV0ZUVycm9yTWVzc2FnZShuYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIH0qLwotCi0gICAgLy9lcnJvck1lc3NhZ2VMYWJlbC5zZXRUZXh0KGVycm9yTWVzc2FnZSAhPSBudWxsID8gZXJyb3JNZXNzYWdlIDogIiIpOwotICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoZXJyb3JNZXNzYWdlID09IG51bGwpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgYnV0dG9uSWQpCi0gIHsKLSAgICBpZiAoYnV0dG9uSWQgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkKLSAgICB7Ci0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBzdXBlci5idXR0b25QcmVzc2VkKGJ1dHRvbklkKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZUluZm9MaXN0KCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VJbmZvTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9HZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9HZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhNzMxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvR2VuZXJhdGVCaW5kaW5nT25TYXZlRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEdlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX1JFR0VOX0JJTkRJTkRTX09OX1NBVkU7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGlhbG9nTWVzc2FnZSA9IE1lc3NhZ2VzLl9VSV9SRUdFTl9CSU5ESU5HU19PTl9TQVZFX1FVRVNUSU9OTUFSSzsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGJ1dHRvbnMgPSBuZXcgU3RyaW5nW117TWVzc2FnZXMuX1VJX1lFU19MQUJFTCwgTWVzc2FnZXMuX1VJX05PX0xBQkVMLCBNZXNzYWdlcy5fVUlfQ0FOQ0VMX0xBQkVMfTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkKLQlwcml2YXRlIEJ1dHRvbiByZW1lbWJlckRlY2lzaW9uQm94OwotCXByaXZhdGUgYm9vbGVhbiByZW1lbWJlckRlY2lzaW9uID0gZmFsc2U7Ci0JCi0JcHVibGljIEdlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZyhTaGVsbCBzaGVsbCkgewotCQlzdXBlcihzaGVsbCwgZGlhbG9nVGl0bGUsIG51bGwsIGRpYWxvZ01lc3NhZ2UsIE1lc3NhZ2VEaWFsb2cuUVVFU1RJT04sIGJ1dHRvbnMsIDApOwotCX0KLQkKLQkKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDdXN0b21BcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJY29tcC5zZXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKLQkJCi0JCS8vIFNwYWNlcgotCQluZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOwotCQluZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOwotCQkKLQkJcmVtZW1iZXJEZWNpc2lvbkJveCA9IG5ldyBCdXR0b24oY29tcCwgU1dULkNIRUNLKTsKLQkJcmVtZW1iZXJEZWNpc2lvbkJveC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SRU1FTUJFUl9NWV9ERUNJU0lPTl9MQUJFTCk7Ci0JCXJlbWVtYmVyRGVjaXNpb25Cb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0KLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHN0b3JlUHJvbXB0UHJlZmVyZW5jZShpbnQgc3d0VmFsdWUpIHsKLQkJLy8gU3RvcmUgdGhlIG5ldyBwcmVmZXJlbmNlIGZvciBkaXNwbGF5aW5nIHRoaXMgZGlhbG9nLgotCQlpZiAocmVtZW1iZXJEZWNpc2lvbikgewotCQkJV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoV1NETEVkaXRvclBsdWdpbi5QUk9NUFRfUkVHRU5fQklORElOR19PTl9TQVZFX0lELCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCQlTdHJpbmcgZ2VuZXJhdGVJRCA9IFdTRExFZGl0b3JQbHVnaW4uQVVUT19SRUdFTkVSQVRFX0JJTkRJTkdfT05fU0FWRV9JRDsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHN3dFZhbHVlID09IFNXVC5ZRVMpIHsKLQkJCQlXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShnZW5lcmF0ZUlELCB0cnVlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHN3dFZhbHVlID09IFNXVC5OTykgewotCQkJCVdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKGdlbmVyYXRlSUQsIGZhbHNlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgaW50IG9wZW4oKSB7Ci0JCWludCByVmFsdWUgPSBzdXBlci5vcGVuKCk7Ci0JCQotCQlpZiAoclZhbHVlID09MCkgewotCQkJc3RvcmVQcm9tcHRQcmVmZXJlbmNlKFNXVC5ZRVMpOwotCQkJcmV0dXJuIFNXVC5ZRVM7Ci0JCX0KLQkJZWxzZSBpZiAoclZhbHVlID09IDEpIHsKLQkJCXN0b3JlUHJvbXB0UHJlZmVyZW5jZShTV1QuTk8pOwotCQkJcmV0dXJuIFNXVC5OTzsKLQkJfQotCQllbHNlIGlmIChyVmFsdWUgPT0gMikgewotCQkJc3RvcmVQcm9tcHRQcmVmZXJlbmNlKFNXVC5DQU5DRUwpOwotCQkJcmV0dXJuIFNXVC5DQU5DRUw7Ci0JCX0KLQkJCi0JCXJldHVybiByVmFsdWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJaWYgKGUud2lkZ2V0ID09IHJlbWVtYmVyRGVjaXNpb25Cb3gpIHsKLQkJCXJlbWVtYmVyRGVjaXNpb24gPSByZW1lbWJlckRlY2lzaW9uQm94LmdldFNlbGVjdGlvbigpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7fQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL05ld0NvbXBvbmVudERpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL05ld0NvbXBvbmVudERpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTg2ODdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9OZXdDb21wb25lbnREaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotLyoKLSAqIFRPRE86IHJtYWg6IGxvb2sgYXQgcmVtb3ZpbmcgdGhpcyBjbGFzcy4gIERvZXNuJ3QgbG9vayBsaWtlIGl0J3MgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIE5ld0NvbXBvbmVudERpYWxvZyBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBUZXh0IG5hbWVGaWVsZDsgCi0gIHByb3RlY3RlZCBCdXR0b24gb2tCdXR0b247Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlOwotICBwcm90ZWN0ZWQgTGFiZWwgZXJyb3JNZXNzYWdlTGFiZWw7Ci0gIHByb3RlY3RlZCBMaXN0IHVzZWROYW1lczsKLQotICBwdWJsaWMgTmV3Q29tcG9uZW50RGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBkZWZhdWx0TmFtZSkgCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCk7Ci0gICAgc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLSAgICBuYW1lID0gZGVmYXVsdE5hbWU7ICAgICAgCi0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICB9Ci0gIAotICBwdWJsaWMgTmV3Q29tcG9uZW50RGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBkZWZhdWx0TmFtZSwgTGlzdCB1c2VkTmFtZXMpIAotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwpOwotICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0gICAgbmFtZSA9IGRlZmF1bHROYW1lOyAgICAgIAotICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLnVzZWROYW1lcyA9IHVzZWROYW1lczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpCi0gIHsKLSAgICBjcmVhdGUoKTsKLSAgICBnZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotICAgIHNldEJsb2NrT25PcGVuKHRydWUpOwotICAgIHJldHVybiBvcGVuKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSAgCi0gIHsKLSAgICBDb250cm9sIGNvbnRyb2wgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotICAgIG5hbWVGaWVsZC5mb3JjZUZvY3VzKCk7Ci0gICAgbmFtZUZpZWxkLnNlbGVjdEFsbCgpOyAgCi0gICAgdXBkYXRlRXJyb3JNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkgCi0gIHsKLSAgICBva0J1dHRvbiA9IGNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuT0tfSUQsIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsIHRydWUpOwotICAgIGNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lELCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCwgZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlSGVhZGVyQ29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkQ29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIAotICB7Ci0gICAgQ29tcG9zaXRlIGRpYWxvZ0FyZWEgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICAKLSAgICBjcmVhdGVIZWFkZXJDb250ZW50KGRpYWxvZ0FyZWEpOwotCi0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoZGlhbG9nQXJlYSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBnZEZpbGw9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkRmlsbC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGdkRmlsbC52ZXJ0aWNhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2U9IHRydWU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2RGaWxsKTsKLQotICAgIExhYmVsIG5hbWVMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBuYW1lTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG5hbWVGaWVsZCA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgZ2Qud2lkdGhIaW50ID0gMjAwOwotICAgIG5hbWVGaWVsZC5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBuYW1lRmllbGQuc2V0VGV4dChuYW1lKTsKLSAgICBuYW1lRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0KLSAgICBjcmVhdGVFeHRlbmRlZENvbnRlbnQoZGlhbG9nQXJlYSk7Ci0KLSAgICAvLyBlcnJvciBtZXNzYWdlCi0gICAgZXJyb3JNZXNzYWdlTGFiZWwgPSBuZXcgTGFiZWwoZGlhbG9nQXJlYSwgU1dULk5PTkUpOwotICAgIGVycm9yTWVzc2FnZUxhYmVsLnNldFRleHQoIiIpOyAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgR3JpZERhdGEgZ2QyID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QyLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QyLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgZ2QyLndpZHRoSGludCA9IDIwMDsKLSAgICBlcnJvck1lc3NhZ2VMYWJlbC5zZXRMYXlvdXREYXRhKGdkMik7ICAgICAgICAgIAotLy8gICAgQ29sb3IgY29sb3IgPSBuZXcgQ29sb3IoZXJyb3JNZXNzYWdlTGFiZWwuZ2V0RGlzcGxheSgpLCAyMDAsIDAsIDApOwotLy8gICAgZXJyb3JNZXNzYWdlTGFiZWwuc2V0Rm9yZWdyb3VuZChjb2xvcik7Ci0KLSAgICByZXR1cm4gZGlhbG9nQXJlYTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSAKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHVwZGF0ZUVycm9yTWVzc2FnZSgpOwotICB9ICAgICAgICAKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVFcnJvck1lc3NhZ2UoU3RyaW5nIG5hbWUpCi0gIHsKLSAgCWlmICh1c2VkTmFtZXMgPT0gbnVsbCkKLSAgCQlyZXR1cm4gbnVsbDsKLSAgCQotICAJSXRlcmF0b3IgaXRlcmF0b3IgPSB1c2VkTmFtZXMuaXRlcmF0b3IoKTsKLSAgCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgCQlpZiAobmFtZS5lcXVhbHNJZ25vcmVDYXNlKChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKSkpIHsKLSAgCQkJcmV0dXJuIE1lc3NhZ2VzLl9VSV9MQUJFTF9XQVJOSU5HX0RVUExJQ0FURV9OQU1FX0VYSVNUUzsgLy8kTk9OLU5MUy0xJAotICAJCX0KLSAgCX0KLSAgCQotICAJcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFcnJvck1lc3NhZ2UoKQotICB7ICAgICAgICAgICAgICAgICAKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZSA9IG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpOwotICAgIGlmIChuYW1lLmxlbmd0aCgpID4gMCkKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGVycm9yTWVzc2FnZSA9IGNvbXB1dGVFcnJvck1lc3NhZ2UobmFtZSk7Ci0gICAgfSAgIAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlcnJvck1lc3NhZ2UgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAgIH0gIAotICAgIGVycm9yTWVzc2FnZUxhYmVsLnNldFRleHQoZXJyb3JNZXNzYWdlICE9IG51bGwgPyBlcnJvck1lc3NhZ2UgOiAiIik7IC8vJE5PTi1OTFMtMSQKLS8vICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoZXJyb3JNZXNzYWdlID09IG51bGwpOwotICB9Ci0gCi0gIHByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoaW50IGJ1dHRvbklkKSAKLSAgewotICAgIGlmIChidXR0b25JZCA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKQotICAgIHsKLSAgICAgIG5hbWUgPSBuYW1lRmllbGQuZ2V0VGV4dCgpOwotICAgIH0KLSAgICBzdXBlci5idXR0b25QcmVzc2VkKGJ1dHRvbklkKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvUHJvdG9jb2xDb21wb25lbnRDb250cm9sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvUHJvdG9jb2xDb21wb25lbnRDb250cm9sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMGI3ZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1Byb3RvY29sQ29tcG9uZW50Q29udHJvbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5QYWdlQm9vazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciwgTW9kaWZ5TGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCi0gIHByb3RlY3RlZCBUZXh0IGNvbXBvbmVudE5hbWVGaWVsZDsKLSAgcHJvdGVjdGVkIENvbWJvIHJlZk5hbWVDb21ibzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiByZWZCcm93c2VCdXR0b247Ci0gIHByb3RlY3RlZCBDb21ibyBwcm90b2NvbENvbWJvOwotICBwcm90ZWN0ZWQgQnV0dG9uIG92ZXJ3cml0ZUJ1dHRvbjsKLSAgcHJvdGVjdGVkIFBhZ2VCb29rIHBhZ2VCb29rOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGVtcHR5U2V0dGluZ3NQYWdlOwotICBwcm90ZWN0ZWQgTWFwIHBhZ2VNYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZOYW1lOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgVU5TUEVDSUZJRUQgPSBNZXNzYWdlcy5fVUlfVU5TUEVDSUZJRUQ7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgUHJvdG9jb2xDb21wb25lbnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yLCBib29sZWFuIHNob3dPdmVyd3JpdGVCdXR0b24pCi0gIHsKLSAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKLSAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIHNldExheW91dChsYXlvdXQpOwotICAgIHNldExheW91dERhdGEoY3JlYXRlR3JpZERhdGEodHJ1ZSwgMSkpOwotCi0gICAgQ29tcG9zaXRlIGxhYmVsVmFsdWVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLSAgICBsYWJlbFZhbHVlQ29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCBmYWxzZSkpOwotICAgIGxhYmVsVmFsdWVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjcmVhdGVHcmlkRGF0YShmYWxzZSwgMSkpOwotCi0gICAgLy8gcm93IDEKLSAgICAvLwotICAgIExhYmVsIGNvbXBvbmVudE5hbWVMYWJlbCA9IG5ldyBMYWJlbChsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgY29tcG9uZW50TmFtZUxhYmVsLnNldFRleHQoZ2V0Q29tcG9uZW50TmFtZUxhYmVsVGV4dCgpKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgY29tcG9uZW50TmFtZUZpZWxkID0gbmV3IFRleHQobGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgZ2ROYW1lPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZE5hbWUuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZE5hbWUuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBjb21wb25lbnROYW1lRmllbGQuc2V0TGF5b3V0RGF0YShnZE5hbWUpOwotICAgIGNvbXBvbmVudE5hbWVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbXBvbmVudE5hbWVGaWVsZCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1RPQ09MX0NPTVBPTkVOVF9OQU1FX1RFWFQpOwotICAgIC8vY3JlYXRlUGxhY2VIb2xkZXIobGFiZWxWYWx1ZUNvbXBvc2l0ZSk7Ci0gICAgCi0gICAgLy8gcm93IDIKLSAgICAvLwotICAgIExhYmVsIHJlZk5hbWVMYWJlbCA9IG5ldyBMYWJlbChsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgcmVmTmFtZUxhYmVsLnNldFRleHQoZ2V0UmVmTmFtZUxhYmVsVGV4dCgpKTsgLy8kTk9OLU5MUy0xJAkKLSAgICByZWZOYW1lQ29tYm8gPSBuZXcgQ29tYm8obGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7Ci0gICAgR3JpZERhdGEgZ2RSZWZOYW1lPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZFJlZk5hbWUuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZFJlZk5hbWUuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICByZWZOYW1lQ29tYm8uc2V0TGF5b3V0RGF0YShnZFJlZk5hbWUpOwotICAgIHJlZk5hbWVDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJlZk5hbWVDb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1RPQ09MX0NPTVBPTkVOVF9SRUZfQ09NQk8pOwotCi0gICAgLy9yZWZCcm93c2VCdXR0b24gPSBuZXcgQnV0dG9uKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICAvL3JlZkJyb3dzZUJ1dHRvbi5zZXRUZXh0KCIgIC4uLiAgIik7Ci0gICAgLy9HcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOwotICAgIC8vZ2QuaGVpZ2h0SGludCA9IDE3OwotICAgIC8vZ2Qud2lkdGhIaW50ID0gMjQ7Ci0gICAgLy9yZWZCcm93c2VCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgLy9yZWZCcm93c2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgLy9jcmVhdGVQbGFjZUhvbGRlcihsYWJlbFZhbHVlQ29tcG9zaXRlKTsKLQotICAgIC8vIHJvdyAzCi0gICAgLy8KLSAgICBMYWJlbCBwcm90b2NvbExhYmVsID0gbmV3IExhYmVsKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBwcm90b2NvbExhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0wpOyAvLyROT04tTkxTLTEkCi0gICAgcHJvdG9jb2xDb21ibyA9IG5ldyBDb21ibyhsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBHcmlkRGF0YSBnZFByb3RvY29sPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZFByb3RvY29sLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RQcm90b2NvbC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHByb3RvY29sQ29tYm8uc2V0TGF5b3V0RGF0YShnZFByb3RvY29sKTsKLSAgICBwcm90b2NvbENvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJvdG9jb2xDb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1RPQ09MX0NPTVBPTkVOVF9QUk9UT0NPTF9DT01CTyk7Ci0gICAgLy9jcmVhdGVQbGFjZUhvbGRlcihsYWJlbFZhbHVlQ29tcG9zaXRlKTsKLQotICAgIC8vIG9wdGlvbmFsIG92ZXJ3cml0ZSBidXR0b24KLSAgICAvLwotICAgIGlmIChzaG93T3ZlcndyaXRlQnV0dG9uKQotICAgIHsKLSAgICAgIG92ZXJ3cml0ZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULkNIRUNLKTsKLSAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9DSEVDS0JPWF9PVkVSV1JJVEUpOyAvLyROT04tTkxTLTEkCi0gICAgICBvdmVyd3JpdGVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKG92ZXJ3cml0ZUJ1dHRvbiwgQVNERWRpdG9yQ1NIZWxwSWRzLnBST1RPQ09MX0NPTVBPTkVOVF9PVkVSV1JJVEVfQ0hFQ0tCT1gpOwotICAgIH0KLQotICAgIC8vIHByb3RvY29sIHNwZWNpZmljIHNldHRpbmdzCi0gICAgLy8KLSAgICBwYWdlQm9vayA9IG5ldyBQYWdlQm9vayh0aGlzLCBTV1QuTk9ORSk7Ci0gICAgR3JpZERhdGEgZ2RGaWxsPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZEZpbGwuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBnZEZpbGwudmVydGljYWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlPSB0cnVlOwotICAgIHBhZ2VCb29rLnNldExheW91dERhdGEoZ2RGaWxsKTsKLQotICAgIGVtcHR5U2V0dGluZ3NQYWdlID0gbmV3IENvbXBvc2l0ZShwYWdlQm9vaywgU1dULk5PTkUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgIG5ldyBMYWJlbChlbXB0eVNldHRpbmdzUGFnZSwgU1dULk5PTkUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXRGaWVsZHMoKQotICB7Ci0gICAgLy8gcHJpbWUgdGhlIGZpZWxkcwotICAgIC8vCi0gICAgY29tcG9uZW50TmFtZUZpZWxkLnNldFRleHQoZ2V0RGVmYXVsdE5hbWUoKSk7Ci0gICAgdXBkYXRlUmVmTmFtZUNvbWJvKCk7Ci0gICAgdXBkYXRlUHJvdG9jb2xDb21ibygpOwotICAgIHVwZGF0ZVBhZ2VCb29rKHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpKTsKLSAgfQotCi0gIHB1YmxpYyBUZXh0IGdldENvbXBvbmVudE5hbWVGaWVsZCgpCi0gIHsKLSAgICByZXR1cm4gY29tcG9uZW50TmFtZUZpZWxkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lTGFiZWxUZXh0KCkKLSAgewotICAgIHJldHVybiBNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHJpdmF0ZSBHcmlkRGF0YSBjcmVhdGVHcmlkRGF0YShib29sZWFuIGJvdGgsIGludCBzcGFuKQotICB7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoYm90aCA/IEdyaWREYXRhLkZJTExfQk9USCA6IEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSBzcGFuOwotICAgIHJldHVybiBnZDsKLSAgfQotCi0gIC8vIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgLy8KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICAgIGlmIChldmVudC53aWRnZXQgPT0gb3ZlcndyaXRlQnV0dG9uICYmIG92ZXJ3cml0ZUJ1dHRvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGdlbmVyYXRvci5zZXRPdmVyd3JpdGUob3ZlcndyaXRlQnV0dG9uLmdldFNlbGVjdGlvbigpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHJlZk5hbWVDb21ibykKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSByZWZOYW1lQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIFN0cmluZyByZWZOYW1lID0gcmVmTmFtZUNvbWJvLmdldEl0ZW0oaW5kZXgpOwotCSAgaWYgKHJlZk5hbWUuZXF1YWxzKFVOU1BFQ0lGSUVEKSkgewotCSAgICAgIGdlbmVyYXRvci5zZXRSZWZOYW1lKCIiKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgZWxzZSB7Ci0JICAgICAgZ2VuZXJhdG9yLnNldFJlZk5hbWUocmVmTmFtZSk7Ci0JICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LndpZGdldCA9PSBwcm90b2NvbENvbWJvKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gcHJvdG9jb2xDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSAoaW5kZXggIT0gLTEpID8gcHJvdG9jb2xDb21iby5nZXRJdGVtKGluZGV4KSA6IG51bGw7Ci0gICAgICAgIAotICAgICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgICBpZiAoZXh0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgCVN0cmluZyBuYW1lc3BhY2UgPSBleHQuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIAlnZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihCaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IobmFtZXNwYWNlKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICB7Ci0gICAgICAgIAlnZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihudWxsKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElTX09WRVJXUklURV9BUFBMSUNBQkxFID0gIklTX09WRVJXUklURV9BUFBMSUNBQkxFIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQYWdlQm9vayhTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCkKLSAgICB7Ci0JICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KHByb3RvY29sKTsKLSAgICAgIGlmIChwYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhZ2UgPSBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UocHJvdG9jb2wpOwotCi0gICAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwYWdlLmluaXQoZ2VuZXJhdG9yKTsKLSAgICAgICAgICBDb250cm9sIGNvbnRyb2wgPSBwYWdlLmNyZWF0ZUNvbnRyb2wocGFnZUJvb2spOwotICAgICAgICAgIGNvbnRyb2wuc2V0RGF0YShJU19PVkVSV1JJVEVfQVBQTElDQUJMRSwgbmV3IEJvb2xlYW4ocGFnZS5pc092ZXJ3cml0ZUFwcGxpY2FibGUoKSkpOwotICAgICAgICAgIHBhZ2VNYXAucHV0KHByb3RvY29sLCBwYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBib29sZWFuIGVuYWJsZU92ZXJ3cml0ZUJ1dHRvbiA9IHRydWU7Ci0gICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAob3ZlcndyaXRlQnV0dG9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBCb29sZWFuIGRhdGEgPSAoQm9vbGVhbikgcGFnZS5nZXRDb250cm9sKCkuZ2V0RGF0YShJU19PVkVSV1JJVEVfQVBQTElDQUJMRSk7Ci0gICAgICAgICAgZW5hYmxlT3ZlcndyaXRlQnV0dG9uID0gZGF0YSA9PSBudWxsIHx8IGRhdGEuZXF1YWxzKEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFnZUJvb2suc2hvd1BhZ2UocGFnZS5nZXRDb250cm9sKCkpOwotICAgICAgICBwYWdlQm9vay5sYXlvdXQoKTsKLSAgICAgICAgcGFnZUJvb2suZ2V0UGFyZW50KCkubGF5b3V0KCk7Ci0gICAgICAgIAotICAgICAgICAvLyByZXNpemUgdGhlIHdpemFyZCBkaWFsb2cgaWYgbmVjZXNzYXJ5IGZvciB0aGUgdXBkYXRlZCBwYWdlCi0gICAgICAgIFBvaW50IHNpemUgPSBwYWdlQm9vay5nZXRTaGVsbCgpLmdldFNpemUoKTsKLSAgICAgICAgUG9pbnQgbWluU2l6ZSA9IHBhZ2VCb29rLmdldFNoZWxsKCkuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxULCB0cnVlKTsKLSAgICAgICAgaW50IG5ld1ggPSBNYXRoLm1heChzaXplLngsIG1pblNpemUueCk7Ci0gICAgICAgIGludCBuZXdZID0gTWF0aC5tYXgoc2l6ZS55LCBtaW5TaXplLnkpOwotICAgICAgICBwYWdlQm9vay5nZXRTaGVsbCgpLnNldFNpemUobmV3WCwgbmV3WSk7Ci0JCQotCQlwYWdlLnNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwYWdlQm9vay5zaG93UGFnZShlbXB0eVNldHRpbmdzUGFnZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvdmVyd3JpdGVCdXR0b24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVuYWJsZU92ZXJ3cml0ZUJ1dHRvbikKLSAgICAgICAgewotICAgICAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZ2VuZXJhdG9yLmdldE92ZXJ3cml0ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBvdmVyd3JpdGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgb3ZlcndyaXRlQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb3RvY29sQ29tYm8oKQotICB7Ci0gICAgcHJvdG9jb2xDb21iby5yZW1vdmVBbGwoKTsKLSAgICBwcm90b2NvbENvbWJvLmFkZChVTlNQRUNJRklFRCk7Ci0KLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOyAKLSAgICBMaXN0IGJpbmRpbmdOYW1lcyA9IHJlZ2lzdHJ5LmdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpOwotICAgIAotICAgIFN0cmluZyBwcm90b2NvbFRleHQgPSBnZW5lcmF0b3IuZ2V0UHJvdG9jb2woKTsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWUocHJvdG9jb2xUZXh0KTsKLSAgICBpZiAoZXh0dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3RvY29sVGV4dCA9IGV4dHQuZ2V0TGFiZWwoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ05hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvdG9jb2wgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sKTsKLSAgICAgIGlmIChleHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxhYmVsID0gZXh0LmdldExhYmVsKCk7Ci0gICAgICAgIGlmIChsYWJlbCAhPSBudWxsKQotICAgICAgICAgIHByb3RvY29sQ29tYm8uYWRkKGxhYmVsKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvdG9jb2xUZXh0ID09IG51bGwgJiYgcHJvdG9jb2xDb21iby5nZXRJdGVtQ291bnQoKSA+IDApCi0gICAgewotICAgICAgcHJvdG9jb2xUZXh0ID0gcHJvdG9jb2xDb21iby5nZXRJdGVtKDApOwotICAgIH0KLSAgICBwcm90b2NvbENvbWJvLnNldFRleHQocHJvdG9jb2xUZXh0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVJlZk5hbWVDb21ibygpCi0gIHsKLSAgICByZWZOYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0KLSAgICByZWZOYW1lQ29tYm8uYWRkKFVOU1BFQ0lGSUVEKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRSZWZOYW1lcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZWZOYW1lQ29tYm8uYWRkKChTdHJpbmcpIGkubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAocmVmTmFtZUNvbWJvLmdldEl0ZW1Db3VudCgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVmVGV4dCA9IGdlbmVyYXRvci5nZXRSZWZOYW1lKCk7Ci0gICAgICByZWZOYW1lQ29tYm8uc2V0VGV4dChyZWZUZXh0ICE9IG51bGwgPyByZWZUZXh0IDogVU5TUEVDSUZJRUQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGdlbmVyYXRvci5zZXROYW1lKGNvbXBvbmVudE5hbWVGaWVsZC5nZXRUZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IExpc3QgZ2V0UmVmTmFtZXMoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRSZWZOYW1lTGFiZWxUZXh0KCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RGVmYXVsdE5hbWUoKTsKLSAgLy8gVE9ETzogV2UgZG9uJ3QgbmVlZCB0aGUgU3RyaW5nIGFyZ3VtZW50IGZvciBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKSBtZXRob2QuCi0gIC8vIFJlbW92ZSB3aGVuIFdUUCBhbGxvd3MgQVBJIGNoYW5nZXMuCi0gIHB1YmxpYyBhYnN0cmFjdCBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWMxMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMUJyb3dzZUNvbXBvbmVudERpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLlNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nIGltcGxlbWVudHMgSUNvbXBvbmVudERpYWxvZyB7Ci0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWU7Ci0JcHJpdmF0ZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNlbGVjdGlvbjsKLQlwcml2YXRlIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCQotCXB1YmxpYyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lLCBJRmlsZSBpRmlsZSwgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJdGhpcy5xdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldFNlbGVjdGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gc2VsZWN0aW9uOwotCX0KLQotCXB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpIHsKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCQkKLQkgICAgU2hlbGwgc2hlbGwgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkgICAgaW50IHJldHVyblZhbHVlID0gV2luZG93LkNBTkNFTDsKLQkgICAgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZyBkaWFsb2cgPSBudWxsOwotCSAgICBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkKLQkgICAgewotCSAgICAJV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZGVzY3JpcHRpb25Qcm92aWRlciA9IG5ldyBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpOwotCSAgICAJZmluYWwgV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIgc2VhcmNoTGlzdFByb3ZpZGVyID0gbmV3IFdTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyKGRlZmluaXRpb24pOwotCSAgICAJQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbigpOwotCSAgICAJY29uZmlndXJhdGlvbi5zZXRGaWx0ZXJMYWJlbFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX05BTUVfRklMVEVSKTsKLQkgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RGVzY3JpcHRpb25Qcm92aWRlcihkZXNjcmlwdGlvblByb3ZpZGVyKTsKLQkgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0U2VhcmNoTGlzdFByb3ZpZGVyKHNlYXJjaExpc3RQcm92aWRlcik7Ci0JICAgICAgICAKLQkgICAgICAgIFN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGRpYWxvZyA9IG5ldyBTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgY29uZmlndXJhdGlvbik7Ci0JICAgICAgICAKLQkgICAgICAgIElGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCSAgICAgICAgKChTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKSBkaWFsb2cpLnNldEN1cnJlbnRSZXNvdXJjZShmaWxlKTsKLQkgICAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpCi0JICAgIHsKLQkgICAgICBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBkZXNjcmlwdGlvblByb3ZpZGVyID0gbmV3IFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCk7Ci0JICAgICAgZmluYWwgV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlciBzZWFyY2hMaXN0UHJvdmlkZXIgPSBuZXcgV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlcihkZWZpbml0aW9uKTsKLQkgICAgIAotCSAgICAgIENvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24oKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldEZpbHRlckxhYmVsVGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRV9GSUxURVIpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RGVzY3JpcHRpb25Qcm92aWRlcihkZXNjcmlwdGlvblByb3ZpZGVyKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldFNlYXJjaExpc3RQcm92aWRlcihzZWFyY2hMaXN0UHJvdmlkZXIpOwotCSAgICAgIC8vY29uZmlndXJhdGlvbi5zZXROZXdDb21wb25lbnRIYW5kbGVyKG5ldyBOZXdUeXBlQnV0dG9uSGFuZGxlcigpKTsKLQkgICAgICAKLQkgICAgICBTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU1BFQ0lGWV9QT1JUVFlQRTsgLy8kTk9OLU5MUy0xJAotCSAgICAgIGRpYWxvZyA9IG5ldyBTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgY29uZmlndXJhdGlvbik7Ci0JICAgICAgCi0JICAgICAgSUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKLQkgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7Ci0JICAgIAkgICgoU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZykgZGlhbG9nKS5zZXRDdXJyZW50UmVzb3VyY2UoZmlsZSk7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpCi0JICAgIHsKLQkgICAgICBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBkZXNjcmlwdGlvblByb3ZpZGVyID0gbmV3IFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCk7Ci0JICAgICAgZmluYWwgV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIgc2VhcmNoTGlzdFByb3ZpZGVyID0gbmV3IFdTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyKGRlZmluaXRpb24pOwotCSAgICAgCi0JICAgICAgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbigpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmlsdGVyTGFiZWxUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FX0ZJTFRFUik7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXREZXNjcmlwdGlvblByb3ZpZGVyKGRlc2NyaXB0aW9uUHJvdmlkZXIpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0U2VhcmNoTGlzdFByb3ZpZGVyKHNlYXJjaExpc3RQcm92aWRlcik7Ci0JICAgICAgLy9jb25maWd1cmF0aW9uLnNldE5ld0NvbXBvbmVudEhhbmRsZXIobmV3IE5ld1R5cGVCdXR0b25IYW5kbGVyKCkpOwotCSAgICAgIAotCSAgICAgIFN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9USVRMRV9TUEVDSUZZX01FU1NBR0U7IC8vJE5PTi1OTFMtMSQKLQkgICAgICBkaWFsb2cgPSBuZXcgU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGNvbmZpZ3VyYXRpb24pOwotCSAgICAgIAotCSAgICAgIElGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JICAgICAgaWYgKGZpbGUgIT0gbnVsbCkgewotCSAgICAJICAoKFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2cpIGRpYWxvZykuc2V0Q3VycmVudFJlc291cmNlKGZpbGUpOwotCSAgICAgIH0KLQkgICAgfQotCSAgICAKLQkgICAgaWYgKGRpYWxvZyAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgZGlhbG9nLnNldEJsb2NrT25PcGVuKHRydWUpOwotCSAgICAgIGRpYWxvZy5jcmVhdGUoKTsKLQkgICAgICByZXR1cm5WYWx1ZSA9IGRpYWxvZy5vcGVuKCk7Ci0JICAgICAgaWYgKHJldHVyblZhbHVlID09IFdpbmRvdy5PSykKLQkgICAgICB7Ci0JICAgICAgICBzZWxlY3Rpb24gPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgcmV0dXJuIHJldHVyblZhbHVlOwotCX0KLQkKLQlwcml2YXRlIElGaWxlIGdldEZpbGUoKSB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0gICAgICAgIAlmaWxlID0gKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmlsZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFOZXdDb21wb25lbnREaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFOZXdDb21wb25lbnREaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg5ZmE2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExTmV3Q29tcG9uZW50RGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW50ZXJmYWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRNZXNzYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFOZXdDb21wb25lbnREaWFsb2cgaW1wbGVtZW50cyBJQ29tcG9uZW50RGlhbG9nIHsKLQlwcm90ZWN0ZWQgTmV3Q29tcG9uZW50RGlhbG9nIGRpYWxvZzsKLQlwcm90ZWN0ZWQgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lOwotCXByb3RlY3RlZCBJRmlsZSBpRmlsZTsKLQlwcm90ZWN0ZWQgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JcHJvdGVjdGVkIElBU0RPYmplY3QgbmV3T2JqZWN0OwotCQotCXB1YmxpYyBXMTFOZXdDb21wb25lbnREaWFsb2coUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lLCBJRmlsZSBpRmlsZSwgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJdGhpcy5xdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZTsKLQkJdGhpcy5pRmlsZSA9IGlGaWxlOwotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCQotCQlTaGVsbCBzaGVsbCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCk7Ci0JCWlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKSB7Ci0JCQlTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfTEFCRUxfTkVXX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBiYXNlTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZ2V0RGVmaW5pdGlvbigpLCAiTmV3QmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0JCQlMaXN0IHVzZWROYW1lcyA9IE5hbWVVdGlsLmdldFVzZWRCaW5kaW5nTmFtZXMoZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWRpYWxvZyA9IG5ldyBOZXdDb21wb25lbnREaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBiYXNlTmFtZSwgdXNlZE5hbWVzKTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoc2hlbGwsIEFTREVkaXRvckNTSGVscElkcy5ORVdfQklORElOR19ESUFMT0cpOwotCQl9Ci0JCWVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSkgewotCQkJU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX0xBQkVMX05FV19QT1JUVFlQRTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGJhc2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoZ2V0RGVmaW5pdGlvbigpLCAiTmV3UG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJTGlzdCB1c2VkTmFtZXMgPSBOYW1lVXRpbC5nZXRVc2VkUG9ydFR5cGVOYW1lcyhnZXREZWZpbml0aW9uKCkpOwotCQkJZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGJhc2VOYW1lLCB1c2VkTmFtZXMpOwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaGVsbCwgQVNERWRpdG9yQ1NIZWxwSWRzLk5FV19QT1JUVFlQRV9ESUFMT0cpOwotCQl9Ci0JCWVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpIHsKLQkJCVN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9ORVdfTUVTU0FHRTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGJhc2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShnZXREZWZpbml0aW9uKCksICJOZXdNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQkJCUxpc3QgdXNlZE5hbWVzID0gTmFtZVV0aWwuZ2V0VXNlZE1lc3NhZ2VOYW1lcyhnZXREZWZpbml0aW9uKCkpOwotCQkJZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGJhc2VOYW1lLCB1c2VkTmFtZXMpOwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaGVsbCwgQVNERWRpdG9yQ1NIZWxwSWRzLk5FV19NRVNTQUdFX0RJQUxPRyk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0U2VsZWN0ZWRDb21wb25lbnQoKSB7Ci0JCVN0cmluZyBxdWFsaWZpZXIgPSBnZXREZWZpbml0aW9uKCkuZ2V0UHJlZml4KGdldERlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCVN0cmluZyBuYW1lID0gZGlhbG9nLmdldE5hbWUoKTsKLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24ocXVhbGlmaWVyLCBuYW1lLCBpRmlsZSk7Ci0JCXNwZWMuc2V0T2JqZWN0KG5ld09iamVjdCk7Ci0JCXJldHVybiBzcGVjOwotCX0KLQotCXB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpIHsKLQkJaW50IHJWYWx1ZSA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0JCQotCQlpZiAoclZhbHVlID09IFdpbmRvdy5PSykgewotCQkJLy8gQ3JlYXRlIHRoZSBuZXcgT2JqZWN0Ci0JCQlpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkgewotCQkJCVcxMUFkZEJpbmRpbmdDb21tYW5kIGNvbW1hbmQgPSAoVzExQWRkQmluZGluZ0NvbW1hbmQpIGRlc2NyaXB0aW9uLmdldEFkZEJpbmRpbmdDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXROZXdCaW5kaW5nTmFtZShkaWFsb2cuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBleGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIE9iamVjdCBuZXdXU0RMT2JqZWN0ID0gY29tbWFuZC5nZXROZXdCaW5kaW5nKCk7Ci0JCQkgICAgbmV3T2JqZWN0ID0gKElBU0RPYmplY3QpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcikgbmV3V1NETE9iamVjdCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpIHsKLQkJCQlXMTFBZGRJbnRlcmZhY2VDb21tYW5kIGNvbW1hbmQgPSAoVzExQWRkSW50ZXJmYWNlQ29tbWFuZCkgZGVzY3JpcHRpb24uZ2V0QWRkSW50ZXJmYWNlQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0TmV3UG9ydFR5cGVOYW1lKGRpYWxvZy5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgT2JqZWN0IG5ld1dTRExPYmplY3QgPSBjb21tYW5kLmdldE5ld1BvcnRUeXBlKCk7Ci0JCQkgICAgbmV3T2JqZWN0ID0gKElBU0RPYmplY3QpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcikgbmV3V1NETE9iamVjdCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKSB7Ci0JCQkJVzExQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IChXMTFBZGRNZXNzYWdlQ29tbWFuZCkgZGVzY3JpcHRpb24uZ2V0QWRkTWVzc2FnZUNvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldE5ld01lc3NhZ2VOYW1lKGRpYWxvZy5nZXROYW1lKCkpOwotCQkJCWV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgT2JqZWN0IG5ld1dTRExPYmplY3QgPSBjb21tYW5kLmdldE5ld01lc3NhZ2UoKTsKLQkJCSAgICBuZXdPYmplY3QgPSAoSUFTRE9iamVjdCkgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoKE5vdGlmaWVyKSBuZXdXU0RMT2JqZWN0KTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJWYWx1ZTsKLQl9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGUoQ29tbWFuZCBjb21tYW5kKSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotICAgICAgICAgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzJkNGZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFCcm93c2VDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFOZXdDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEltcG9ydE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyIGltcGxlbWVudHMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCXByb3RlY3RlZCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQlwcm90ZWN0ZWQgSUZpbGUgaUZpbGU7Ci0JCi0JcHVibGljIFcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcihXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgSUZpbGUgaUZpbGUpIHsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JfQotCQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldEJyb3dzZURpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0TmV3RGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMU5ld0NvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0JCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgbW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKE9iamVjdCByZWZlcmVuY2luZ09iamVjdCwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiByZWZlcmVuY2VkQ29tcG9uZW50KSB7Ci0JCVcxMUVuZFBvaW50IHcxMUVuZFBvaW50ID0gKFcxMUVuZFBvaW50KSByZWZlcmVuY2luZ09iamVjdDsKLQkJT2JqZWN0IGJpbmRpbmdPYmplY3QgPSByZWZlcmVuY2VkQ29tcG9uZW50LmdldE9iamVjdCgpOwotCQlpZiAoYmluZGluZ09iamVjdCA9PSBudWxsKSB7Ci0JCQkvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIElCaW5kaW5nIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQotCQl9Ci0JCQotCQlpZiAoYmluZGluZ09iamVjdCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCVBvcnQgcG9ydCA9IChQb3J0KSB3MTFFbmRQb2ludC5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChwb3J0LCAiYmluZGluZyIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBiaW5kaW5nT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQlCaW5kaW5nIG5ld0JpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0JCQlXMTFTZXRCaW5kaW5nQ29tbWFuZC51cGRhdGVQb3J0UHJvdG9jb2wocG9ydCwgbmV3QmluZGluZyk7Ci0JCX0JCQotCQllbHNlIGlmIChiaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgSUJpbmRpbmcpewotCQkJSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgYmluZGluZ09iamVjdDsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IHcxMUVuZFBvaW50LmdldFNldEJpbmRpbmdDb21tYW5kKGJpbmRpbmcpOwotCQkJQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCXN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQlXU0RMSW1wb3J0TWFuYWdlci5yZW1vdmVVbnVzZWRJbXBvcnRzKGdldERlZmluaXRpb24oKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZ2V0Q29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotCQlMaXN0IHNwZWNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJSXRlcmF0b3IgYmluZGluZ3MgPSBkZXNjcmlwdGlvbi5nZXRCaW5kaW5ncygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChiaW5kaW5ncy5oYXNOZXh0KCkpIHsKLQkJCUlCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGJpbmRpbmdzLm5leHQoKTsKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIG5hbWUgPSBiaW5kaW5nLmdldE5hbWUoKTsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbihxdWFsaWZpZXIsIG5hbWUsIGZpbGUpOwotCQkJc3BlYy5zZXRPYmplY3QoYmluZGluZyk7Ci0JCQlzcGVjTGlzdC5hZGQoc3BlYyk7Ci0JCX0KLQotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY0FycmF5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bc3BlY0xpc3Quc2l6ZSgpXTsKLQkJc3BlY0xpc3QudG9BcnJheShzcGVjQXJyYXkpOwotCQkKLQkJcmV0dXJuIHNwZWNBcnJheTsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldEhpc3RvcnkoKSB7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bMF07Ci0JCXJldHVybiBoaXN0b3J5OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRvSGlzdG9yeShDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudCkgewotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNiMGEyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMUJyb3dzZUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMU5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMSW1wb3J0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExTZXRDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlciBpbXBsZW1lbnRzIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQlwcm90ZWN0ZWQgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JcHJvdGVjdGVkIElGaWxlIGlGaWxlOwotCQotCXB1YmxpYyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcihXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgSUZpbGUgaUZpbGUpIHsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JfQotCQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldEJyb3dzZURpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXROZXdEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExTmV3Q29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gcmVmZXJlbmNlZENvbXBvbmVudCkgewotCQlXMTFCaW5kaW5nIHcxMUJpbmRpbmcgPSAoVzExQmluZGluZykgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCU9iamVjdCBpbnRlcmZhY2VPYmplY3QgPSByZWZlcmVuY2VkQ29tcG9uZW50LmdldE9iamVjdCgpOwotCQlpZiAoaW50ZXJmYWNlT2JqZWN0ID09IG51bGwpIHsKLQkJCS8vIE5lZWQgdG8gZmlndXJlIG91dCB0aGUgSUludGVyZmFjZSBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uCi0KLQkJfQotCQkKLQkJaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSB3MTFCaW5kaW5nLmdldFRhcmdldCgpOwotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihpRmlsZSwgZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRXU0RMQ29tcG9uZW50KGJpbmRpbmcsICJ0eXBlIiwgKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGludGVyZmFjZU9iamVjdCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBJSW50ZXJmYWNlKXsKLQkJCUlJbnRlcmZhY2UgaW50ZXJmYXplID0gKElJbnRlcmZhY2UpIGludGVyZmFjZU9iamVjdDsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IHcxMUJpbmRpbmcuZ2V0U2V0SW50ZXJmYWNlQ29tbWFuZChpbnRlcmZhemUpOwotCQkJQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCVdTRExJbXBvcnRNYW5hZ2VyLnJlbW92ZVVudXNlZEltcG9ydHMoZ2V0RGVmaW5pdGlvbigpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBnZXRDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0UXVpY2tQaWNrcygpIHsKLQkJTGlzdCBzcGVjTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCUl0ZXJhdG9yIGludGVyZmFjZXMgPSBkZXNjcmlwdGlvbi5nZXRJbnRlcmZhY2VzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGludGVyZmFjZXMuaGFzTmV4dCgpKSB7Ci0JCQlJSW50ZXJmYWNlIGludGVyZmF6ZSA9IChJSW50ZXJmYWNlKSBpbnRlcmZhY2VzLm5leHQoKTsKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIG5hbWUgPSBpbnRlcmZhemUuZ2V0TmFtZSgpOwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKHF1YWxpZmllciwgbmFtZSwgZmlsZSk7Ci0JCQlzcGVjLnNldE9iamVjdChpbnRlcmZhemUpOwotCQkJc3BlY0xpc3QuYWRkKHNwZWMpOwotCQl9Ci0KLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNBcnJheSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW3NwZWNMaXN0LnNpemUoKV07Ci0JCXNwZWNMaXN0LnRvQXJyYXkoc3BlY0FycmF5KTsKLQkJCi0JCXJldHVybiBzcGVjQXJyYXk7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRIaXN0b3J5KCkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uWzBdOwotCQlyZXR1cm4gaGlzdG9yeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUb0hpc3RvcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnQpIHsKLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWM0ODc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMUJyb3dzZUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMU5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIGltcGxlbWVudHMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCXByb3RlY3RlZCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQlwcm90ZWN0ZWQgSUZpbGUgaUZpbGU7Ci0JCi0JcHVibGljIFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcihXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgSUZpbGUgaUZpbGUpIHsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0QnJvd3NlRGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMUJyb3dzZUNvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXROZXdEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExTmV3Q29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQotCXByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBtb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoT2JqZWN0IHJlZmVyZW5jaW5nT2JqZWN0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHJlZmVyZW5jZWRDb21wb25lbnQpIHsKLQkJVzExTWVzc2FnZVJlZmVyZW5jZSB3MTFNZXNzYWdlUmVmID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQlPYmplY3QgbWVzc2FnZU9iamVjdCA9IHJlZmVyZW5jZWRDb21wb25lbnQuZ2V0T2JqZWN0KCk7Ci0JCWlmIChtZXNzYWdlT2JqZWN0ID09IG51bGwpIHsKLQkJCS8vIE5lZWQgdG8gZmlndXJlIG91dCB0aGUgSU1lc3NhZ2UgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbgotCi0JCX0KLQkJCi0JCWlmIChtZXNzYWdlT2JqZWN0IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmPSAoTWVzc2FnZVJlZmVyZW5jZSkgdzExTWVzc2FnZVJlZi5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChtZXNzYWdlUmVmLCAibWVzc2FnZSIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBtZXNzYWdlT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQl9CQkKLQkJZWxzZSBpZiAobWVzc2FnZU9iamVjdCBpbnN0YW5jZW9mIFcxMU1lc3NhZ2UpewotCQkJLy8gQmVsb3cgaXMgYSBsaXR0bGUgY29tcGxleC4uLi4gVGhlIGFsdGVybmF0aXZlIHdhcyB0byBoYXZlIElNZXNzYWdlIGNvbnRhaW4gYQotCQkJLy8gZ2V0U2V0TWVzc2FnZUNvbW1hbmQoKSB3aGljaCB3b3VsZCBoYW5kbGUgYWxsIG9mIHRoaXMgYnV0IGRvZXMgYSBnZXRTZXRNZXNzYWdlQ29tbWFuZCgpCi0JCQkvLyBtYWtlIHNlbnNlIGF0IHRoZSBnZW5lcmljIGxldmVsLi4uLi4KLQkJCVcxMU1lc3NhZ2UgaU1lc3NhZ2UgPSAoVzExTWVzc2FnZSkgbWVzc2FnZU9iamVjdDsKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlY09iamVjdCA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKCk7Ci0JCQlzcGVjT2JqZWN0LnNldE5hbWUoaU1lc3NhZ2UuZ2V0TmFtZSgpKTsKLQkJCXNwZWNPYmplY3Quc2V0TWV0YU5hbWUoSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpOwotCQkJc3BlY09iamVjdC5zZXRRdWFsaWZpZXIoZGVzY3JpcHRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQkJCi0JCQlTdHJpbmcgbG9jYXRpb24gPSAoKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpKS5nZXRMb2NhdGlvbigpOwotCQkJU3RyaW5nIHBsYXRmb3JtUmVzb3VyY2UgPSAicGxhdGZvcm06L3Jlc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24uc3RhcnRzV2l0aChwbGF0Zm9ybVJlc291cmNlKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUGF0aCBwYXRoID0gbmV3IFBhdGgobG9jYXRpb24uc3Vic3RyaW5nKHBsYXRmb3JtUmVzb3VyY2UubGVuZ3RoKCkpKTsKLQkgICAgICAgICAgc3BlY09iamVjdC5zZXRGaWxlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKSk7Ci0JICAgICAgICB9ICAKLQkJCQotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmPSAoTWVzc2FnZVJlZmVyZW5jZSkgdzExTWVzc2FnZVJlZi5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChtZXNzYWdlUmVmLCAibWVzc2FnZSIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBzcGVjT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGdldENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotCQlMaXN0IHNwZWNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJSXRlcmF0b3IgbWVzc2FnZXMgPSBkZXNjcmlwdGlvbi5nZXRNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChtZXNzYWdlcy5oYXNOZXh0KCkpIHsKLQkJCUlNZXNzYWdlIG1lc3NhZ2UgPSAoSU1lc3NhZ2UpIG1lc3NhZ2VzLm5leHQoKTsKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIG5hbWUgPSBtZXNzYWdlLmdldE5hbWUoKTsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbihxdWFsaWZpZXIsIG5hbWUsIGZpbGUpOwotCQkJc3BlYy5zZXRPYmplY3QobWVzc2FnZSk7Ci0JCQlzcGVjTGlzdC5hZGQoc3BlYyk7Ci0JCX0KLQotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY0FycmF5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bc3BlY0xpc3Quc2l6ZSgpXTsKLQkJc3BlY0xpc3QudG9BcnJheShzcGVjQXJyYXkpOwotCQkKLQkJcmV0dXJuIHNwZWNBcnJheTsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldEhpc3RvcnkoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVG9IaXN0b3J5KENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGZlMzQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudFNlYXJjaExpc3RQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyIGltcGxlbWVudHMgSUNvbXBvbmVudFNlYXJjaExpc3RQcm92aWRlciB7Ci0JCi0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhJQ29tcG9uZW50TGlzdCBsaXN0LCBMaXN0IGlucHV0Q29tcG9uZW50cywgUXVhbGlmaWVkTmFtZSBtZXRhTmFtZSkgewotCQlJdGVyYXRvciBpdCA9IGlucHV0Q29tcG9uZW50cy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgaXQubmV4dCgpOwotCQkJU3RyaW5nIG5hbWUgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSB3c2RsRWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKCk7Ci0JCQljb21wb25lbnRTcGVjLnNldE1ldGFOYW1lKG1ldGFOYW1lKTsKLQkJCWNvbXBvbmVudFNwZWMuc2V0TmFtZShuYW1lKTsKLQkJCWNvbXBvbmVudFNwZWMuc2V0UXVhbGlmaWVyKHF1YWxpZmllcik7Ci0JCQkKLQkJCVN0cmluZyBsb2NhdGlvbiA9IHdzZGxFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRMb2NhdGlvbigpOwotCQkJU3RyaW5nIHBsYXRmb3JtUmVzb3VyY2UgPSAicGxhdGZvcm06L3Jlc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24uc3RhcnRzV2l0aChwbGF0Zm9ybVJlc291cmNlKSkgewotCQkJCVBhdGggcGF0aCA9IG5ldyBQYXRoKGxvY2F0aW9uLnN1YnN0cmluZyhwbGF0Zm9ybVJlc291cmNlLmxlbmd0aCgpKSk7Ci0JCQkJSUZpbGUgcmVzdWx0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJCWlmIChyZXN1bHQgIT0gbnVsbCkgewotCQkJCQljb21wb25lbnRTcGVjLnNldEZpbGUocmVzdWx0KTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCWxpc3QuYWRkKGNvbXBvbmVudFNwZWMpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBMaXN0IGdldFdTRExGaWxlSW1wb3J0cyhMaXN0IHdzZGxJbXBvcnRzKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSXRlcmF0b3IgaXQgPSB3c2RsSW1wb3J0cy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlJbXBvcnRJbXBsIGltcG9ydEl0ZW0gPSAoSW1wb3J0SW1wbCkgaXQubmV4dCgpOwotCQkJaW1wb3J0SXRlbS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsgICAgICAgICAgLy8gTG9hZCBpZiBuZWNlc3NhcnkKLQkJCWlmIChpbXBvcnRJdGVtLmdldEVTY2hlbWEoKSA9PSBudWxsKSB7Ci0JCQkJbGlzdC5hZGQoaW1wb3J0SXRlbSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBsaXN0OwotCX0KLQkKLQkvL1RPRE8gKHRydW5nKSBtYWtlIHRoaXMgb25lIGFic3RyYWN0IHdoZW4gd2UgYXJlIGluIGRldmVsb3BtZW50IHBoYXNlIGFnYWluCi0JcHJvdGVjdGVkIExpc3QgZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24pIHsKLQkJcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZ2V0SW1wb3J0ZWRDb21wb25lbnRzKElDb21wb25lbnRMaXN0IGxpc3QsIFF1YWxpZmllZE5hbWUgbWV0YU5hbWUsIEhhc2hNYXAgZXhjbHVzaW9ucykgewkJCi0JCUl0ZXJhdG9yIGltcG9ydHNJdCA9IGdldFdTRExGaWxlSW1wb3J0cyhkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpbXBvcnRzSXQuaGFzTmV4dCgpKSB7Ci0JCQlJbXBvcnQgaW1wb3J0SXRlbSA9IChJbXBvcnQpIGltcG9ydHNJdC5uZXh0KCk7Ci0JCQlTdHJpbmcgbG9jYXRpb24gPSBpbXBvcnRJdGVtLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKTsKLQkJCWV4Y2x1c2lvbnMucHV0KGxvY2F0aW9uLCBCb29sZWFuLlRSVUUgKTsKLQkJCURlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbiA9IGltcG9ydEl0ZW0uZ2V0RURlZmluaXRpb24oKTsKLQkJCWlmIChpbXBvcnREZWZpbml0aW9uICE9IG51bGwpCi0JCQl7Ci0JCSAgCSAgTGlzdCBpbXBvcnRlZENvbXBvbmVudHMgPSBnZXRTZWFyY2hpbmdDb21wb25lbnRzKGltcG9ydERlZmluaXRpb24pOwkJCQotCQkJICBjcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhsaXN0LCBpbXBvcnRlZENvbXBvbmVudHMsIG1ldGFOYW1lKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKElDb21wb25lbnRMaXN0IGxpc3QsIFNlYXJjaFNjb3BlIHNjb3BlLCBRdWFsaWZpZWROYW1lIG1ldGFOYW1lLCBNYXAgZXhjbHVzaW9ucykgewotCQlpZiAoc2NvcGUgIT0gbnVsbCkgewotCQkJV1NETENvbXBvbmVudEZpbmRlciBmaW5kZXIgPSBuZXcgV1NETENvbXBvbmVudEZpbmRlcihtZXRhTmFtZSk7Ci0JCQlJdGVyYXRvciBpdCA9IGZpbmRlci5nZXRXb3JrYmVuY2hSZXNvdXJjZUNvbXBvbmVudHMoc2NvcGUpLml0ZXJhdG9yKCk7IAotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gaXRlbSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpdC5uZXh0KCk7Ci0JCQkJU3RyaW5nIGl0ZW1VUkkgPSBVUklIZWxwZXIuZ2V0UGxhdGZvcm1VUkkoaXRlbS5nZXRGaWxlKCkpOwotCQkJCWlmIChleGNsdXNpb25zLmdldChpdGVtVVJJKSA9PSBudWxsKXsKLQkJCQkJbGlzdC5hZGQoaXRlbSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzYzcxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlciBleHRlbmRzIFdTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyIHsKLQlwdWJsaWMgV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQ29tcG9uZW50TGlzdChJQ29tcG9uZW50TGlzdCBsaXN0LCBTZWFyY2hTY29wZSBzY29wZSwgSVByb2dyZXNzTW9uaXRvciBwbSkgewotCQkvLyBHcmFiIGV4cGxpY3RseSBkZWZpbmVkIGNvbXBvbmVudHMKLQkJY3JlYXRlV1NETENvbXBvbmVudE9iamVjdHMobGlzdCwgZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKSwgSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpOwotCi0JCS8vIEZpbGVzIGV4Y2x1ZGVkIGlmIHdlIHNlYXJjaCB3aXRoIHRoZSBzZWFyY2ggZW5naW5lIGxhdGVyCi0JCUhhc2hNYXAgZXhjbHVzaW9ucyA9IG5ldyBIYXNoTWFwKCk7CQotCQlleGNsdXNpb25zLnB1dChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBCb29sZWFuLlRSVUUpOwkJCi0JCQotCQkvLyBHcmFiIGRpcmVjdGx5IGltcG9ydGVkIGNvbXBvbmVudHMgYW5kIHVwZGF0ZSB0aGUgZXhjbHVzaW9ucyAnbGlzdCcKLQkJZ2V0SW1wb3J0ZWRDb21wb25lbnRzKGxpc3QsIElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQotCQlzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKGxpc3QsIHNjb3BlLCBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24pIHsKLQkJcmV0dXJuIGltcG9ydERlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3Y2JjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciB7Ci0JICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbWFnZSBCSU5ESU5HX0lNQUdFID0gIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZGluZ19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgIHByaXZhdGUgc3RhdGljIGZpbmFsIEltYWdlIFBPUlRUWVBFX0lNQUdFID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wb3J0dHlwZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgIHByaXZhdGUgc3RhdGljIGZpbmFsIEltYWdlIE1FU1NBR0VfSU1BR0UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgYm9vbGVhbiBpc0FwcGxpY2FibGUoT2JqZWN0IGNvbXBvbmVudCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllcihPYmplY3QgY29tcG9uZW50KSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiljb21wb25lbnQpLmdldFF1YWxpZmllcigpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKFdTRExFbGVtZW50KSBjb21wb25lbnQpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsgCi0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBTZWFyY2hNYXRjaCkKLQkgICAgewotCSAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IGdldFF1YWxpZmllZE5hbWVGb3JTZWFyY2hNYXRjaCgoU2VhcmNoTWF0Y2gpY29tcG9uZW50KTsKLQkgICAgICBpZiAocXVhbGlmaWVkTmFtZSAhPSBudWxsKQotCSAgICAgIHsgIAotCSAgICAgICAgcmVzdWx0ID0gcXVhbGlmaWVkTmFtZS5nZXROYW1lc3BhY2UoKTsKLQkgICAgICB9ICAgIAotCSAgICB9ICAKLQkgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoT2JqZWN0IGNvbXBvbmVudCkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pY29tcG9uZW50KS5nZXROYW1lKCk7Ci0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoV1NETEVsZW1lbnQpY29tcG9uZW50KS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBnZXRRdWFsaWZpZWROYW1lRm9yU2VhcmNoTWF0Y2goKFNlYXJjaE1hdGNoKWNvbXBvbmVudCk7Ci0JICAgICAgaWYgKHF1YWxpZmllZE5hbWUgIT0gbnVsbCkKLQkgICAgICB7ICAKLQkgICAgICAgIHJlc3VsdCA9IHF1YWxpZmllZE5hbWUuZ2V0TG9jYWxOYW1lKCk7Ci0JICAgICAgfSAgICAKLQkgICAgfSAgICAgIAotCSAgICByZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRGaWxlSWNvbihPYmplY3QgY29tcG9uZW50KSB7Ci0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3dzZGxfZmlsZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSUZpbGUgZ2V0RmlsZShPYmplY3QgY29tcG9uZW50KSB7Ci0JICAgIElGaWxlIHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWNvbXBvbmVudCkuZ2V0RmlsZSgpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKFNlYXJjaE1hdGNoKWNvbXBvbmVudCkuZ2V0RmlsZSgpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0JICAgIHsKLQkgICAgICBXU0RMRWxlbWVudCBjb25jcmV0ZUNvbXBvbmVudCA9IChXU0RMRWxlbWVudCkgY29tcG9uZW50OwotCSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGNvbmNyZXRlQ29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkgICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotCSAgICAgIHsKLQkgICAgICAgIC8vIFRPRE8gKGNzKSByZXZpc2l0IGFuZCB0ZXN0IG1vcmUKLQkgICAgICAgIC8vCi0JICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0JICAgICAgICBTdHJpbmcgcGxhdGZvcm1SZXNvdXJjZSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCAmJiBsb2NhdGlvbi5zdGFydHNXaXRoKHBsYXRmb3JtUmVzb3VyY2UpKQotCSAgICAgICAgewotCSAgICAgICAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChsb2NhdGlvbi5zdWJzdHJpbmcocGxhdGZvcm1SZXNvdXJjZS5sZW5ndGgoKSkpOwotCSAgICAgICAgICByZXN1bHQgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7Ci0JICAgICAgICB9Ci0JICAgICAgfSAgCi0JICAgIH0KLQkgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgSUxhYmVsUHJvdmlkZXIgZ2V0TGFiZWxQcm92aWRlcigpIHsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCQotCSAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCSAgICBTdHJpbmcgbmFtZSA9IGdldE5hbWUoZWxlbWVudCk7Ci0JICAgIGlmIChuYW1lICE9IG51bGwpIHsKLQkgICAgICByZXN1bHQgKz0gbmFtZTsKLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfSAKLQkgIAotCSAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBjb21wb25lbnQpCi0JICB7Ci0JICAgIEltYWdlIHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKQotCSAgICB7Ci0JICAgIAlRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGNvbXBvbmVudCkuZ2V0TWV0YU5hbWUoKTsKLQkgICAgCWlmICggcXVhbGlmaWVkTmFtZSAhPSBudWxsICl7Ci0JICAgIAkJaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkpCi0JICAgIAkJCXJlc3VsdCA9IEJJTkRJTkdfSU1BR0U7Ci0JICAgIAkJZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpKQotCSAgICAJCQlyZXN1bHQgPSBQT1JUVFlQRV9JTUFHRTsKLQkgICAgCQllbHNlIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpKQotCSAgICAJCQlyZXN1bHQgPSBNRVNTQUdFX0lNQUdFOwotCi0JICAgIAl9Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICBTZWFyY2hNYXRjaCBzZWFyY2hNYXRjaCA9IChTZWFyY2hNYXRjaCljb21wb25lbnQ7Ci0JICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gKFF1YWxpZmllZE5hbWUpc2VhcmNoTWF0Y2gubWFwLmdldCgibWV0YU5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCSAgICAgIGlmICggcXVhbGlmaWVkTmFtZSAhPSBudWxsICl7Ci0JICAgIAkgIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpKQotCSAgICAJCSAgcmVzdWx0ID0gQklORElOR19JTUFHRTsKLQkgICAgCSAgZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpKQotCSAgICAJCSAgcmVzdWx0ID0gUE9SVFRZUEVfSU1BR0U7Ci0JICAgIAkJZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKSkKLQkgICAgCQkJcmVzdWx0ID0gTUVTU0FHRV9JTUFHRTsKLQotCSAgICAgIH0KLQkgICAgfSAgICAgIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotCSAgICAgIHJlc3VsdCA9IEJJTkRJTkdfSU1BR0U7ICAgICAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotCSAgICAgIHJlc3VsdCA9IFBPUlRUWVBFX0lNQUdFOwotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBNZXNzYWdlKQotCQkgICAgICByZXN1bHQgPSBNRVNTQUdFX0lNQUdFOwotCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0JCi0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lIGdldFF1YWxpZmllZE5hbWVGb3JTZWFyY2hNYXRjaChTZWFyY2hNYXRjaCBtYXRjaCkgewotCQlRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBudWxsOwotCQlPYmplY3QgbyA9IG1hdGNoLm1hcC5nZXQoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAobyAhPSBudWxsICYmIG8gaW5zdGFuY2VvZiBRdWFsaWZpZWROYW1lKQotCQl7ICAKLQkJCXF1YWxpZmllZE5hbWUgPSAoUXVhbGlmaWVkTmFtZSlvOwotCQl9ICAgICAgCi0JCXJldHVybiBxdWFsaWZpZWROYW1lOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RmluZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudEZpbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNiMzEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gudXRpbC5Db2xsZWN0aW5nU2VhcmNoUmVxdWVzdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybjsKLQotcHVibGljIGNsYXNzIFdTRExDb21wb25lbnRGaW5kZXIgewotCVF1YWxpZmllZE5hbWUgbWV0YU5hbWU7Ci0gICAgcHVibGljIFdTRExDb21wb25lbnRGaW5kZXIoUXVhbGlmaWVkTmFtZSBtZXRhTmFtZSkgewotICAgIAl0aGlzLm1ldGFOYW1lID0gbWV0YU5hbWU7Ci0gICAgfQotICAgIAotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGZpbmRDb21wb25lbnRzKFNlYXJjaEVuZ2luZSBzZWFyY2hFbmdpbmUsIExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2VhcmNoU2NvcGUpCi0gICAgewotICAgICAgdHJ5IHsKLSAgICAgICAgICBDb2xsZWN0aW5nU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBDb2xsZWN0aW5nU2VhcmNoUmVxdWVzdG9yKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgWE1MQ29tcG9uZW50RGVjbGFyYXRpb25QYXR0ZXJuIHBhdHRlcm4gPSBuZXcgWE1MQ29tcG9uZW50RGVjbGFyYXRpb25QYXR0ZXJuKG5ldyBRdWFsaWZpZWROYW1lKCIqIiwgIioiKSwgbWV0YU5hbWUsIFNlYXJjaFBhdHRlcm4uUl9QQVRURVJOX01BVENIKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gVE9ETyAoY3MpIHJldGhpbmsgdGhlIGNvbW1lbnRlZCBvdXQgY29kZSBiZWxvdy4gIElzIHRoZXJlIHNvbWUgcmVhc29uIGZvciBuYXJyb3dpbmcgdG8gbGlzdCBvZiBzZWFyY2ggcGFydGljcGFudHM/Ci0gICAgICAgICAgLy8gSXQgc2VlbXMgdGhlIG9ubHkgYmVuZWZpdCBtYXkgYmUgdG8gZmlsdGVyIG91ciB4c2QgY29tcG9uZW50IGRlY2xhcmF0aW9ucyB0aGF0IGFyZW4ndCBkZWZpbmVkCi0gICAgICAgICAgLy8gaW4gc3RhbmQgYWxvbmUgd3NkbCBkb2N1bWVudHMuICBQZXJoYXBzIGl0J3MgYmVzdCB0byBkbyB0aGlzIHdpdGggYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBhcmcgb24gdGhlCi0gICAgICAgICAgLy8gZGVjbGFyYXRpb24gcGF0dGVybiBvciBwZXJoYXBzIHNpbXBseSBkb2luZyBzb21lICdwb3N0JyBmaWx0ZXJpbmcuCi0gICAgICAgICAgLy8KLSAgICAgICAgICAvL1N0cmluZyBwYXJ0aWNpcGFudElkID0gbWV0YU5hbWUuZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSA/Ci0gICAgICAgICAgLy8gICAgIm9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiIDoKLSAgICAgICAgICAvLyAgICAib3JnLmVjbGlwc2Uud3N0LnhzZC5zZWFyY2guWFNEU2VhcmNoUGFydGljaXBhbnQiOyAgICAgICAgCQkgIAotICAgICAgICAgIC8vU2VhcmNoUGFydGljaXBhbnQgcGFydGljcGFudCA9IFNlYXJjaFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U2VhcmNoUGFydGljaXBhbnQocGFydGljaXBhbnRJZCk7ICAgICAgICAgCi0gICAgICAgICAgLy9TZWFyY2hQYXJ0aWNpcGFudFtdIHBhcnRpY2lwYW50cyA9IHsgcGFydGljcGFudCB9OyAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gVE9ETyAoY3MpIEknbSBiZXR0aW5nIHdlJ2xsIG5lZWQgdG8gcHJvdmlkZSBzb21lIGhvb2sgaGVyZSB0byBhbGxvdyBleHRlbmRlcnMgdG8gY29uZmlndXJlCi0gICAgICAgICAgLy8gdGhlIHNlYXJjaCBvcHRpb25zLiAgQ3VycmVudGx5IHdlIGp1c3QgcGFzcyBpbiBudWxsLgotICAgICAgICAgIHNlYXJjaEVuZ2luZS5zZWFyY2gocGF0dGVybiwgcmVxdWVzdG9yLCBzZWFyY2hTY29wZSwgbnVsbCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcmVxdWVzdG9yLmdldFJlc3VsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNlYXJjaE1hdGNoIG1hdGNoID0gKFNlYXJjaE1hdGNoKWkubmV4dCgpOwotICAgICAgICAgICAgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24oKTsKLSAgICAgICAgICAgIHNwZWMuc2V0TWV0YU5hbWUobWV0YU5hbWUpOwotICAgICAgICAgICAgc3BlYy5zZXRGaWxlKG1hdGNoLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdCBvID0gbWF0Y2gubWFwLmdldCgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBpZiAobyAhPSBudWxsICYmIG8gaW5zdGFuY2VvZiBRdWFsaWZpZWROYW1lKQotICAgICAgICAgICAgeyAgCi0gICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IChRdWFsaWZpZWROYW1lKW87Ci0gICAgICAgICAgICAgIGlmIChxdWFsaWZpZWROYW1lLmdldExvY2FsTmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcGVjLnNldE5hbWUocXVhbGlmaWVkTmFtZS5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgc3BlYy5zZXRRdWFsaWZpZXIocXVhbGlmaWVkTmFtZS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQoc3BlYyk7Ci0gICAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgfSAgCi0gICAgICAgICAgfSAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAvL3N0YXR1cy5hZGQoZS5nZXRTdGF0dXMoKSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBMaXN0IGdldFdvcmtiZW5jaFJlc291cmNlQ29tcG9uZW50cyhTZWFyY2hTY29wZSBzY29wZSkgewotCi0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgU2VhcmNoRW5naW5lIHNlYXJjaEVuZ2luZSA9IG5ldyBTZWFyY2hFbmdpbmUoKTsKLSAgICAgICAgZmluZENvbXBvbmVudHMoc2VhcmNoRW5naW5lLCBsaXN0LCBzY29wZSk7ICAgIAotICAgICAgICByZXR1cm4gbGlzdDsgICAgICAgCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZTgyNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyIGV4dGVuZHMgV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIgewotCXB1YmxpYyBXU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBwb3B1bGF0ZUNvbXBvbmVudExpc3QoSUNvbXBvbmVudExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2NvcGUsIElQcm9ncmVzc01vbml0b3IgcG0pIHsKLQkJLy8gR3JhYiBleHBsaWN0bHkgZGVmaW5lZCBjb21wb25lbnRzCi0JCWNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKGxpc3QsIGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLCBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKTsKLQotCQkvLyBGaWxlcyBleGNsdWRlZCBpZiB3ZSBzZWFyY2ggd2l0aCB0aGUgc2VhcmNoIGVuZ2luZSBsYXRlcgotCQlIYXNoTWFwIGV4Y2x1c2lvbnMgPSBuZXcgSGFzaE1hcCgpOwkKLQkJZXhjbHVzaW9ucy5wdXQoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgQm9vbGVhbi5UUlVFKTsJCQotCQkKLQkJLy8gR3JhYiBkaXJlY3RseSBpbXBvcnRlZCBjb21wb25lbnRzIGFuZCB1cGRhdGUgdGhlIGV4Y2x1c2lvbnMgJ2xpc3QnCi0JCWdldEltcG9ydGVkQ29tcG9uZW50cyhsaXN0LCBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQotCQlzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKGxpc3QsIHNjb3BlLCBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRTZWFyY2hpbmdDb21wb25lbnRzKERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbikgewotCQlyZXR1cm4gaW1wb3J0RGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGQ0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5TZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIgZXh0ZW5kcyBXU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlciB7Ci0JcHVibGljIFdTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBwb3B1bGF0ZUNvbXBvbmVudExpc3QoSUNvbXBvbmVudExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2NvcGUsIElQcm9ncmVzc01vbml0b3IgcG0pIHsKLQkJLy8gR3JhYiBleHBsaWN0bHkgZGVmaW5lZCBjb21wb25lbnRzCi0JCWNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKGxpc3QsIGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCksIElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKTsKLQotCQkvLyBGaWxlcyBleGNsdWRlZCBpZiB3ZSBzZWFyY2ggd2l0aCB0aGUgc2VhcmNoIGVuZ2luZSBsYXRlcgotCQlIYXNoTWFwIGV4Y2x1c2lvbnMgPSBuZXcgSGFzaE1hcCgpOwkKLQkJZXhjbHVzaW9ucy5wdXQoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgQm9vbGVhbi5UUlVFKTsJCQotCQkKLQkJLy8gR3JhYiBkaXJlY3RseSBpbXBvcnRlZCBjb21wb25lbnRzIGFuZCB1cGRhdGUgdGhlIGV4Y2x1c2lvbnMgJ2xpc3QnCi0JCWdldEltcG9ydGVkQ29tcG9uZW50cyhsaXN0LCBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7CQkKLQkJCi0JCXNlYXJjaE91dHNpZGVDdXJyZW50UmVzb3VyY2UobGlzdCwgc2NvcGUsIElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRTZWFyY2hpbmdDb21wb25lbnRzKERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbikgewotCQlyZXR1cm4gaW1wb3J0RGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKTsKLQl9CQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDgzYmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guSVhTRFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBleHRlbmRzCVhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciB7Ci0JcHVibGljIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoSUZpbGUgY3VycmVudEZpbGUsIFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJc3VwZXIoY3VycmVudEZpbGUsIHNjaGVtYXMpOwotCX0KLQkKLQlwdWJsaWMgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcihJRmlsZSBjdXJyZW50RmlsZSwgWFNEU2NoZW1hW10gc2NoZW1hcywgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGN1cnJlbnRGaWxlLCBudWxsKTsKLQkJaWYgKHNjaGVtYXMgPT0gbnVsbCB8fCBzY2hlbWFzLmxlbmd0aCA9PSAwKSB7Ci0JCQlzZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoZGVzY3JpcHRpb24pKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0JCWlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXIpIHsKLQkJCUFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSByZWZlcmVuY2luZ09iamVjdDsKLQkJCXJlZmVyZW5jaW5nT2JqZWN0ID0gYWRhcHRlci5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgUGFydCkgewotCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQlpZiAoQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJZmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKTsKLQkJCX0KLQkJCQotCQkJaWYgKGNvbXBvbmVudC5pc05ldygpKSB7ICAKLQkJCQlpZiAoY29tcG9uZW50LmdldE1ldGFOYW1lKCkgPT0gSVhTRFNlYXJjaENvbnN0YW50cy5FTEVNRU5UX01FVEFfTkFNRSkgewotCQkJCQlBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgY29tcG9uZW50LmdldE5hbWUoKSk7Ci0JCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJCVN0cmluZyB0bnMgPSBjb21tYW5kLmdldFhTREVsZW1lbnQoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCQkJY29tcG9uZW50LnNldFF1YWxpZmllcih0bnMpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihmaWxlLCBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0WFNERWxlbWVudENvbXBvbmVudChwYXJ0LCBjb21wb25lbnQpOwotCQl9Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotLy8JCUVsZW1lbnRDb21wb25lbnRMaXN0IGxpc3QgPSBuZXcgRWxlbWVudENvbXBvbmVudExpc3QoKTsKLS8vCQkKLS8vCQlpZiAoQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0vLwkJCUlGaWxlIGZpbGUgPSAoKElGaWxlRWRpdG9ySW5wdXQpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCk7Ci0vLwkJCVhTREVsZW1lbnRzU2VhcmNoTGlzdFByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFhTREVsZW1lbnRzU2VhcmNoTGlzdFByb3ZpZGVyKGZpbGUsIHNjaGVtYXMpOwotLy8JCQlwcm92aWRlci5wb3B1bGF0ZUNvbXBvbmVudExpc3QobGlzdCwgbnVsbCwgbnVsbCk7Ci0vLwkJfQotLy8KLS8vCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWNzW10gPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltsaXN0LnNpemUoKV07Ci0vLwkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3Quc2l6ZSgpOyBpbmRleCsrKSB7Ci0vLwkJCXNwZWNzW2luZGV4XSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBsaXN0LmdldChpbmRleCk7Ci0vLwkJfQotCQkKLQkJcmV0dXJuIG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uWzBdOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTY2hlbWFzKFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJdGhpcy5zY2hlbWFzID0gc2NoZW1hczsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0RTY2hlbWFbXSBnZXRJbmxpbmVTY2hlbWFzKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlMaXN0IHR5cGVzID0gZGVzY3JpcHRpb24uZ2V0VHlwZXMoKTsKLQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWFzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjBlNTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLk5ld1R5cGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIGV4dGVuZHMgWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQkKLQlwdWJsaWMgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcihJRmlsZSBjdXJyZW50RmlsZSwgWFNEU2NoZW1hW10gc2NoZW1hcykgewotCQlzdXBlcihjdXJyZW50RmlsZSwgc2NoZW1hcyk7Ci0JfQotCQotCXB1YmxpYyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElGaWxlIGN1cnJlbnRGaWxlLCBYU0RTY2hlbWFbXSBzY2hlbWFzLCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoY3VycmVudEZpbGUsIG51bGwpOwotCQlpZiAoc2NoZW1hcyA9PSBudWxsIHx8IHNjaGVtYXMubGVuZ3RoID09IDApIHsKLQkJCXNldFNjaGVtYXMoZ2V0SW5saW5lU2NoZW1hcyhkZXNjcmlwdGlvbikpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldE5ld0RpYWxvZygpCi0JewotCQlpZiAoc2NoZW1hcy5sZW5ndGggPiAwKSB7Ci0JCQlOZXdUeXBlRGlhbG9nIG5ld1R5cGVEaWFsb2cgPSBuZXcgTmV3VHlwZURpYWxvZyhzY2hlbWFzWzBdKTsKLQkJCW5ld1R5cGVEaWFsb2cuYWxsb3dBbm9ueW1vdXNUeXBlKGZhbHNlKTsKLQkJCXJldHVybiBuZXdUeXBlRGlhbG9nOwotCQl9Ci0JCWVsc2UgewotCQkJTmV3VHlwZURpYWxvZyBuZXdUeXBlRGlhbG9nID0gbmV3IE5ld1R5cGVEaWFsb2coKTsKLQkJCW5ld1R5cGVEaWFsb2cuYWxsb3dBbm9ueW1vdXNUeXBlKGZhbHNlKTsKLQkJCXJldHVybiBuZXdUeXBlRGlhbG9nOwotCQl9Ci0JfQkKLQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0JCWlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXIpIHsKLQkJCUFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSByZWZlcmVuY2luZ09iamVjdDsKLQkJCXJlZmVyZW5jaW5nT2JqZWN0ID0gYWRhcHRlci5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgUGFydCkgewotCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQlpZiAoQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJZmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKTsKLQkJCX0KLQkJCQotCQkJaWYgKGNvbXBvbmVudC5pc05ldygpKSB7ICAKLQkJCQlBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGNvbXBvbmVudC5nZXROYW1lKCkpOwotCQkJCWlmIChjb21wb25lbnQuZ2V0TWV0YU5hbWUoKSA9PSBJWFNEU2VhcmNoQ29uc3RhbnRzLkNPTVBMRVhfVFlQRV9NRVRBX05BTUUpIHsKLQkJCQkJY29tbWFuZC5pc0NvbXBsZXhUeXBlKHRydWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJY29tbWFuZC5pc0NvbXBsZXhUeXBlKGZhbHNlKTsKLQkJCQl9Ci0JCQkJY29tbWFuZC5ydW4oKTsKLQkJCQlTdHJpbmcgdG5zID0gY29tbWFuZC5nZXRYU0RFbGVtZW50KCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkJY29tcG9uZW50LnNldFF1YWxpZmllcih0bnMpOwotCQkJfQotCQkJCi0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGZpbGUsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRYU0RUeXBlQ29tcG9uZW50KHBhcnQsIGNvbXBvbmVudCk7Ci0JCX0KLQkJZWxzZSBpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCXN1cGVyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShyZWZlcmVuY2luZ09iamVjdCwgY29tcG9uZW50KTsKLQkJfQotCQllbHNlIGlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZVVzZSkgewotCQkJCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTY2hlbWFzKFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJdGhpcy5zY2hlbWFzID0gc2NoZW1hczsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0RTY2hlbWFbXSBnZXRJbmxpbmVTY2hlbWFzKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlMaXN0IHR5cGVzID0gZGVzY3JpcHRpb24uZ2V0VHlwZXMoKTsKLQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWFzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQxODBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlclJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZWFkcyB0aGUgcGx1Z2luIG1hbmlmZXN0cyBhbmQgcmVnaXN0ZXJzIGVhY2ggZXh0ZW5zaWJpbGl0eSBpdGVtIHRyZWUgcHJvdmlkZXIKLSAqLwotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyUmVnaXN0cnkgZXh0ZW5kcyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFCRUxfUFJPVklERVJfUFJPUEVSVFkgPSAibGFiZWxQcm92aWRlckNsYXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1BST1ZJREVSX1BST1BFUlRZID0gImNvbnRlbnRQcm92aWRlckNsYXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEFUVF9OQU1FUyA9IHsgImxhYmVsUHJvdmlkZXJDbGFzcyIsICJjb250ZW50UHJvdmlkZXJDbGFzcyIgfTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgcHVibGljIElMYWJlbFByb3ZpZGVyIGdldExhYmVsUHJvdmlkZXIoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiAoSUxhYmVsUHJvdmlkZXIpIGdldFByb3BlcnR5KG5hbWVzcGFjZSwgTEFCRUxfUFJPVklERVJfUFJPUEVSVFkpOwotICB9Ci0KLSAgcHVibGljIElUcmVlQ2hpbGRQcm92aWRlciBnZXRDb250ZW50UHJvdmlkZXIoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiAoSVRyZWVDaGlsZFByb3ZpZGVyKSBnZXRQcm9wZXJ0eShuYW1lc3BhY2UsIENPTlRFTlRfUFJPVklERVJfUFJPUEVSVFkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0Y2JkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlhTRFR5cGVTeXN0ZW1Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlciBpbXBsZW1lbnRzIElUeXBlU3lzdGVtUHJvdmlkZXIKLXsKLSAgcHJvdGVjdGVkIFdTRExFZGl0b3JFeHRlbnNpb25bXSBleHRlbnNpb25zOwotICBwcm90ZWN0ZWQgSVR5cGVTeXN0ZW1Qcm92aWRlcltdIHR5cGVTeXN0ZW1Qcm92aWRlcnM7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBPYmplY3RbXSBFTVBUWV9BUlJBWSA9IHt9OwotCi0gIHB1YmxpYyBFeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyKCkKLSAgewotICAgIHR5cGVTeXN0ZW1Qcm92aWRlcnMgPSBuZXcgSVR5cGVTeXN0ZW1Qcm92aWRlclsxXTsgCi0gICAgdHlwZVN5c3RlbVByb3ZpZGVyc1swXSA9IG5ldyBYU0RUeXBlU3lzdGVtUHJvdmlkZXIoKTsKLSAgfSAgICAgICAgICAKLSAgICAgICAgCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldEF2YWlsYWJsZVR5cGVOYW1lcyhkZWZpbml0aW9uLCB0eXBlTmFtZUNhdGVnb3J5KSk7Ci0gICAgfSAgIAotICAgIHJldHVybiBsaXN0OwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFhTRFNjaGVtYSBzY2hlbWEsIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldEF2YWlsYWJsZVR5cGVzKGRlZmluaXRpb24sIHNjaGVtYSwgdHlwZU5hbWVDYXRlZ29yeSkpOwotICAgIH0gICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGxpc3QuYWRkQWxsKHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKGRlZmluaXRpb24pKTsKLSAgICB9ICAgICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIGludCByZXN1bHQgPSBVTktOT1dOX1RZUEU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShkZWZpbml0aW9uLCB0eXBlTmFtZSk7Ci0gICAgICBpZiAocmVzdWx0ICE9IFVOS05PV05fVFlQRSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0gIAkgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVTeXN0ZW1Qcm92aWRlcnMubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldFByZWZpeGVkTmFtZXMoZGVmaW5pdGlvbiwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpKTsKLSAgICAgfSAgICAgCi0gICAgIHJldHVybiBsaXN0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2YwYWUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3QoT2JqZWN0IHBhcmVudE1vZGVsT2JqZWN0LCBFbGVtZW50W10gZWxlbWVudENoYWluLCBpbnQgc3RhcnQsIGludFtdIGVuZCk7Ci0gIHB1YmxpYyBOb2RlIGdldE5vZGUoT2JqZWN0IG1vZGVsT2JqZWN0KTsgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlUmVjb25jaWxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlUmVjb25jaWxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjkyZDNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZVJlY29uY2lsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBAZGVwcmVhY3RlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElOb2RlUmVjb25jaWxlcgotewotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE9iamVjdCBtb2RlbE9iamVjdCwgRWxlbWVudCBlbGVtZW50LCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBpbmRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVRyZWVDaGlsZFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVRyZWVDaGlsZFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYmY1MzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUcmVlQ2hpbGRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBhbGxvd3MgZXh0ZW5zaW9uIHdyaXRlcnMgdG8gcHJvdmlkZSBzcGVjaWFsaXplIHRyZWUgY29udGVudCBiZWhhdmlvdXIuCi0gKiBJdCBpcyBpbnRlbmRlZCB0byBiZWhhdmUgc2ltaWxhciB0byB0aGUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlci4KLSAqIFRoZSBtYWpvciBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcyBjbGFzcyBpcyBzaW1wbGlmaWVkIHNvIHRoYXQgb25seSBvbmUgbWV0aG9kIGlzIGludm9sdmVkLgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkgIAkKLSAqLwotcHVibGljIGludGVyZmFjZSBJVHJlZUNoaWxkUHJvdmlkZXIKLXsKLQlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNDgyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGludGVyZmFjZSBJVHlwZVN5c3RlbVByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOS05PV05fVFlQRSA9IDB4MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlVJTFRfSU5fVFlQRSA9IDB4MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9ERUZJTkVEX1NJTVBMRV9UWVBFID0gMHgyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX0RFRklORURfQ09NUExFWF9UWVBFID0gMHg0OwotCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIGludCB0eXBlTmFtZUNhdGVnb3J5KTsKLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbik7ICAKLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlVHlwZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYU0RTY2hlbWEgc2NoZW1hLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSk7Ci0gIHB1YmxpYyBpbnQgZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSk7Ci0gIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZGI3OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL05TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIHByb3RlY3RlZCBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fTE9BRElOR19FUlJPUiA9ICJQTFVHSU5fTE9BRElOR19FUlJPUiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBjbGFzc05hbWUsIEJ1bmRsZSBidW5kbGUpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIGlmIChpbmZvID09IG51bGwpCi0gICAgewotICAgICAgaW5mbyA9IG5ldyBTaW5nbGVQcm9wZXJ0eUV4dGVuc2lvbkluZm8oY2xhc3NOYW1lLCBidW5kbGUpOwotICAgICAgbWFwLnB1dChuYW1lc3BhY2VVUkksIGluZm8pOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgbmFtZXNwYWNlVVJJLCBIYXNoTWFwIHByb3BlcnR5VG9DbGFzc05hbWVNYXAsIEJ1bmRsZSBidW5kbGUpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIGlmIChpbmZvID09IG51bGwpCi0gICAgewotICAgICAgaW5mbyA9IG5ldyBNdWx0aVByb3BlcnR5RXh0ZW5zaW9uSW5mbyhwcm9wZXJ0eVRvQ2xhc3NOYW1lTWFwLCBidW5kbGUpOwotICAgICAgbWFwLnB1dChuYW1lc3BhY2VVUkksIGluZm8pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIHJldHVybiBpbmZvICE9IG51bGwgPyBpbmZvLmdldE9iamVjdCgiIikgOiBudWxsOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIEV4dGVuc2lvbkluZm8gaW5mbyA9IChFeHRlbnNpb25JbmZvKSBtYXAuZ2V0KG5hbWVzcGFjZVVSSSk7Ci0gICAgcmV0dXJuIGluZm8gIT0gbnVsbCA/IGluZm8uZ2V0T2JqZWN0KHByb3BlcnR5KSA6IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIGFic3RyYWN0IGNsYXNzIEV4dGVuc2lvbkluZm8KLSAgewotICAgIHByb3RlY3RlZCBCdW5kbGUgYnVuZGxlOwotCi0gICAgcHVibGljIEV4dGVuc2lvbkluZm8oQnVuZGxlIGJ1bmRsZSkKLSAgICB7Ci0gICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGdldE9iamVjdChTdHJpbmcgcHJvcGVydHkpOwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBTaW5nbGVQcm9wZXJ0eUV4dGVuc2lvbkluZm8gZXh0ZW5kcyBFeHRlbnNpb25JbmZvCi0gIHsKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNsYXNzTmFtZTsKLSAgICBwcm90ZWN0ZWQgT2JqZWN0IG9iamVjdDsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcnJvcjsKLQotICAgIHB1YmxpYyBTaW5nbGVQcm9wZXJ0eUV4dGVuc2lvbkluZm8oU3RyaW5nIGNsYXNzTmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgICB7Ci0gICAgICBzdXBlcihidW5kbGUpOwotICAgICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRPYmplY3QoU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBDbGFzcyB0aGVDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgICAgICBvYmplY3QgPSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIG9iamVjdCA9IFBMVUdJTl9MT0FESU5HX0VSUk9SOwotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBvYmplY3QgIT0gUExVR0lOX0xPQURJTkdfRVJST1IgPyBvYmplY3QgOiBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgTXVsdGlQcm9wZXJ0eUV4dGVuc2lvbkluZm8gZXh0ZW5kcyBFeHRlbnNpb25JbmZvCi0gIHsKLSAgICBwcm90ZWN0ZWQgSGFzaE1hcCBwcm9wZXJ0eVRvQ2xhc3NOYW1lVGFibGU7Ci0gICAgcHJvdGVjdGVkIEhhc2hNYXAgcHJvcGVydHlUb09iamVjdFRhYmxlID0gbmV3IEhhc2hNYXAoKTsKLQotICAgIHB1YmxpYyBNdWx0aVByb3BlcnR5RXh0ZW5zaW9uSW5mbyhIYXNoTWFwIHByb3BlcnRUb0NsYXNzTmFtZVRhYmxlLCBCdW5kbGUgYnVuZGxlKQotICAgIHsKLSAgICAgIHN1cGVyKGJ1bmRsZSk7Ci0gICAgICB0aGlzLnByb3BlcnR5VG9DbGFzc05hbWVUYWJsZSA9IHByb3BlcnRUb0NsYXNzTmFtZVRhYmxlOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoU3RyaW5nKSBwcm9wZXJ0eVRvQ2xhc3NOYW1lVGFibGUuZ2V0KHByb3BlcnR5KTsKLSAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcHJvcGVydHlUb09iamVjdFRhYmxlLmdldChwcm9wZXJ0eSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENsYXNzIHRoZUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgICAgICAgcmVzdWx0ID0gdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgIHByb3BlcnR5VG9PYmplY3RUYWJsZS5wdXQocHJvcGVydHksIHJlc3VsdCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRvT2JqZWN0VGFibGUucHV0KHByb3BlcnR5LCBQTFVHSU5fTE9BRElOR19FUlJPUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBQTFVHSU5fTE9BRElOR19FUlJPUjsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0JICByZXR1cm4gcmVzdWx0ICE9IFBMVUdJTl9MT0FESU5HX0VSUk9SID8gcmVzdWx0IDogbnVsbDsgICAgICAKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckNvbmZpZ3VyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yQ29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUwMDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuSVdTRExUb29sYmFyQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24gewotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETEVESVRPUkNPTkZJR1VSQVRJT05FWFRFTlNJT05JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5XU0RMRWRpdG9yRXh0ZW5zaW9uQ29uZmlndXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVSTkFMRURJVE9SQ09ORklHVVJBVElPTl9FWFRFTlNJT05JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbEVkaXRvckNvbmZpZ3VyYXRpb24iOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU05BTUUgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBREFQVEVSRkFDVE9SWSA9ICJhZGFwdGVyRmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xCQVJBQ1RJT04gPSAidG9vbGJhckFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZJR1VSRUZBQ1RPUlkgPSAiZmlndXJlRmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVESVRQQVJURkFDVE9SWSA9ICJlZGl0UGFydEZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0KLQkgIExpc3QgZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID0gbnVsbDsKLQotCSAgcHVibGljIFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCkKLQkgIHsKLQotCSAgfQotCi0JICBwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKQotCSAgewotCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZWFkV1NETENvbmZpZ3VyYXRpb25SZWdpc3RyeSgpOwotCSAgICB9Ci0JICAgIGlmICghZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmlzRW1wdHkoKSkKLQkgICAgewotCSAgICAgIHJldHVybiAoKFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKSBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuZ2V0KDApKS5nZXRBZGFwdGVyRmFjdG9yeSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBudWxsOwotCSAgfQotCi0JICBwdWJsaWMgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpCi0JICB7Ci0JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0JICAgIH0KLQkgICAgaWYgKCFkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuaXNFbXB0eSgpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICgoV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMpIGRlZmluZWRFeHRlbnNpb25zTGlzdC5nZXQoMCkpLmdldEVkaXRQYXJ0RmFjdG9yeSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBudWxsOwotCSAgfQotCi0vLwkgIHB1YmxpYyBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGdldEZpZ3VyZUZhY3RvcnkoKQotLy8JICB7Ci0vLwkgICAgaWYgKGRlZmluZWRFeHRlbnNpb25zTGlzdCA9PSBudWxsKQotLy8JICAgIHsKLS8vCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0vLwkgICAgfQotLy8JICAgIGlmICghZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmlzRW1wdHkoKSkKLS8vCSAgICB7Ci0vLwkgICAgICByZXR1cm4gKChXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcykgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmdldCgwKSkuZ2V0RmlndXJlRmFjdG9yeSgpOwotLy8JICAgIH0KLS8vCSAgICByZXR1cm4gbnVsbDsKLS8vCSAgfQotCi0JICBwdWJsaWMgTGlzdCBnZXRUb29sYmFyQWN0aW9ucygpCi0JICB7Ci0JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0JICAgIH0KLQkgICAgaWYgKCFkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuaXNFbXB0eSgpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICgoV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMpIGRlZmluZWRFeHRlbnNpb25zTGlzdC5nZXQoMCkpLmdldEFjdGlvbkxpc3QoKTsKLQkgICAgfQotCSAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIE9iamVjdCBsb2FkQ2xhc3MoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBjbGFzc1N0cmluZykKLQkgIHsKLQkgICAgU3RyaW5nIHBsdWdpbklkID0gZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKTsKLQotCSAgICB0cnkKLQkgICAgewotCSAgICAgIENsYXNzIHRoZUNsYXNzID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKS5sb2FkQ2xhc3MoY2xhc3NTdHJpbmcpOwotCSAgICAgIE9iamVjdCBpbnN0YW5jZSA9IHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0KLQkgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgICB7Ci0KLQkgICAgfQotCSAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgcmVhZFdTRExDb25maWd1cmF0aW9uUmVnaXN0cnkoKQotCSAgewotCSAgICBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIHVwZGF0ZUxpc3QoSU5URVJOQUxFRElUT1JDT05GSUdVUkFUSU9OX0VYVEVOU0lPTklEKTsKLQkgICAgdXBkYXRlTGlzdChXU0RMRURJVE9SQ09ORklHVVJBVElPTkVYVEVOU0lPTklEKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdXBkYXRlTGlzdChTdHJpbmcgSUQpCi0JICB7Ci0JICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoSUQpOwotCi0JICAgIGJvb2xlYW4gZGVmaW5lZEV4dGVuc2lvbnNFeGlzdCA9ICh3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdCAhPSBudWxsICYmIHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0Lmxlbmd0aCA+IDApOwotCi0JICAgIGRlZmluZWRFeHRlbnNpb25zTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNFeGlzdCkKLQkgICAgewotCSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbEVkaXRvckV4dGVuc2lvbkxpc3QubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcygpOwotCSAgICAgICAgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmFkZChwcm9wZXJ0aWVzKTsKLQotCSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSB3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdFtpXTsKLQkgICAgICAgIFN0cmluZyBhZGFwdGVyRmFjdG9yeUNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQURBUFRFUkZBQ1RPUlkpOwotCSAgICAgICAgaWYgKGFkYXB0ZXJGYWN0b3J5Q2xhc3MgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxvYWRDbGFzcyhlbGVtZW50LCBhZGFwdGVyRmFjdG9yeUNsYXNzKTsKLQkgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXJGYWN0b3J5KQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgcHJvcGVydGllcy5zZXRBZGFwdGVyRmFjdG9yeSgoQWRhcHRlckZhY3RvcnkpIG9iamVjdCk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQotLy8JICAgICAgICBTdHJpbmcgZmlndXJlRmFjdG9yeUNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoRklHVVJFRkFDVE9SWSk7Ci0vLwkgICAgICAgIGlmIChmaWd1cmVGYWN0b3J5Q2xhc3MgIT0gbnVsbCkKLS8vCSAgICAgICAgewotLy8JICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsb2FkQ2xhc3MoZWxlbWVudCwgZmlndXJlRmFjdG9yeUNsYXNzKTsKLS8vCSAgICAgICAgICBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGZpZ3VyZUZhY3RvcnkgPSBudWxsOwotLy8JICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5KQotLy8JICAgICAgICAgIHsKLS8vCSAgICAgICAgICAgIGZpZ3VyZUZhY3RvcnkgPSAoSUV4dGVuZGVkRmlndXJlRmFjdG9yeSkgb2JqZWN0OwotLy8JICAgICAgICAgICAgcHJvcGVydGllcy5zZXRGaWd1cmVGYWN0b3J5TGlzdChmaWd1cmVGYWN0b3J5KTsKLS8vCSAgICAgICAgICB9Ci0vLwkgICAgICAgIH0KLQkgICAgICAgIAotCSAgICAgICAgU3RyaW5nIGVkaXRQYXJ0RmFjdG9yeUNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoRURJVFBBUlRGQUNUT1JZKTsKLQkgICAgICAgIGlmIChlZGl0UGFydEZhY3RvcnlDbGFzcyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gbG9hZENsYXNzKGVsZW1lbnQsIGVkaXRQYXJ0RmFjdG9yeUNsYXNzKTsKLQkgICAgICAgICAgRWRpdFBhcnRGYWN0b3J5IGVkaXRQYXJ0RmFjdG9yeSA9IG51bGw7Ci0JICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFZGl0UGFydEZhY3RvcnkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBlZGl0UGFydEZhY3RvcnkgPSAoRWRpdFBhcnRGYWN0b3J5KSBvYmplY3Q7Ci0JICAgICAgICAgICAgcHJvcGVydGllcy5zZXRFZGl0UGFydEZhY3RvcnlMaXN0KGVkaXRQYXJ0RmFjdG9yeSk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQotCSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gdG9vbGJhckFjdGlvbnMgPSBlbGVtZW50LmdldENoaWxkcmVuKFRPT0xCQVJBQ1RJT04pOwotCSAgICAgICAgTGlzdCBhY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICAgICAgaWYgKHRvb2xiYXJBY3Rpb25zICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdG9vbGJhckFjdGlvbnMubGVuZ3RoOyBqKyspCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgYWN0aW9uRWxlbWVudCA9IHRvb2xiYXJBY3Rpb25zW2pdOwotCSAgICAgICAgICAgIFN0cmluZyBhY3Rpb25DbGFzcyA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKENMQVNTTkFNRSk7Ci0JICAgICAgICAgICAgSVdTRExUb29sYmFyQWN0aW9uIGFjdGlvbiA9IG51bGw7Ci0JICAgICAgICAgICAgaWYgKGFjdGlvbkNsYXNzICE9IG51bGwpCi0JICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxvYWRDbGFzcyhhY3Rpb25FbGVtZW50LCBhY3Rpb25DbGFzcyk7Ci0JICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVdTRExUb29sYmFyQWN0aW9uKQotCSAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICBhY3Rpb24gPSAoSVdTRExUb29sYmFyQWN0aW9uKSBvYmplY3Q7Ci0JICAgICAgICAgICAgICAgIGFjdGlvbkxpc3QuYWRkKGFjdGlvbik7Ci0JICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgICBwcm9wZXJ0aWVzLnNldEFjdGlvbkxpc3QoYWN0aW9uTGlzdCk7Ci0KLQotCi0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYmM5NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgV1NETEVkaXRvckV4dGVuc2lvbgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVVRMSU5FX1RSRUVfQ09OVEVOVF9QUk9WSURFUiA9IDE7ICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VUTElORV9MQUJFTF9QUk9WSURFUiA9IDI7ICAgICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9BQ1RJT05fQ09OVFJJQlVUT1IgPSAzOyAgICAgICAgICAvLyBub2RlCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVEFJTFNfVklFV0VSX1BST1ZJREVSID0gNDsgICAgICAgICAgLy8gbm9kZQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVESVRfUEFSVF9GQUNUT1JZID0gNTsgICAgICAgICAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1NZU1RFTV9QUk9WSURFUiA9IDY7ICAgICAgICAgICAgIC8vIHJlcSdkIGZvciB0eXBlIHN5c3RlbSBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9ERV9SRUNPTkNJTEVSID0gNzsgICAgICAgICAgICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PREVfQVNTT0NJQVRJT05fUFJPVklERVIgPSA4OyAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT0RFTF9RVUVSWV9DT05UUklCVVRPUiA9IDk7ICAgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9TT1VSQ0VfUFJPVklERVIgPSAxMDsgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfU0VDVElPTl9ERVNDUklQVE9SX1BST1ZJREVSID0gMTE7ICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhTRF9ERUxFVEVfQUNUSU9OID0gMTI7Ci0gIAotICBib29sZWFuIGlzRXh0ZW5zaW9uVHlwZVN1cHBvcnRlZChpbnQgdHlwZSk7Ci0gIGJvb2xlYW4gaXNBcHBsaWNhYmxlKE9iamVjdCBtb2RlbE9iamVjdCk7Ci0gIE9iamVjdCBjcmVhdGVFeHRlbnNpb25PYmplY3QoaW50IHR5cGUsIElFZGl0b3JQYXJ0IGVkaXRvcik7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4NDU5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMKLXsKLSAgQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7Ci0vLyAgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBmaWd1cmVGYWN0b3J5OwotICBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5OwotICBMaXN0IGFjdGlvbkxpc3Q7Ci0KLSAgcHVibGljIFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKCkKLSAgewotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25MaXN0KExpc3QgYWN0aW9uTGlzdCkKLSAgewotICAgIHRoaXMuYWN0aW9uTGlzdCA9IGFjdGlvbkxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBZGFwdGVyRmFjdG9yeShBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkKLSAgewotICAgIHRoaXMuYWRhcHRlckZhY3RvcnkgPSBhZGFwdGVyRmFjdG9yeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVkaXRQYXJ0RmFjdG9yeUxpc3QoRWRpdFBhcnRGYWN0b3J5IGVkaXRQYXJ0RmFjdG9yeSkKLSAgewotICAgIHRoaXMuZWRpdFBhcnRGYWN0b3J5ID0gZWRpdFBhcnRGYWN0b3J5OwotICB9Ci0KLS8vICBwdWJsaWMgdm9pZCBzZXRGaWd1cmVGYWN0b3J5TGlzdChJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGZpZ3VyZUZhY3RvcnkpCi0vLyAgewotLy8gICAgdGhpcy5maWd1cmVGYWN0b3J5ID0gZmlndXJlRmFjdG9yeTsKLS8vICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QWN0aW9uTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gYWRhcHRlckZhY3Rvcnk7Ci0gIH0KLQotICBwdWJsaWMgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gZWRpdFBhcnRGYWN0b3J5OwotICB9Ci0KLS8vICBwdWJsaWMgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBnZXRGaWd1cmVGYWN0b3J5KCkKLS8vICB7Ci0vLyAgICByZXR1cm4gZmlndXJlRmFjdG9yeTsKLS8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NjdlOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7ICAgICAgCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RDb21wb25lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFdTRExOb2RlQXNzb2NpYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3QoT2JqZWN0IHBhcmVudE1vZGVsT2JqZWN0LCBFbGVtZW50W10gZWxlbWVudENoYWluLCBpbnQgc3RhcnQsIGludFtdIGVuZCkKLSAgeyAgICAgICAgICAgICAgICAgCi0gICAgT2JqZWN0IGN1cnJlbnRPYmplY3QgPSBwYXJlbnRNb2RlbE9iamVjdDsKLSAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbGVtZW50Q2hhaW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgT2JqZWN0IG8gPSBnZXRNb2RlbE9iamVjdEhlbHBlcihjdXJyZW50T2JqZWN0LCBlbGVtZW50Q2hhaW5baV0pOwotICAgICAgaWYgKG8gPT0gbnVsbCkKLSAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICBlbmRbMF0gPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICAgIGVsc2UKLSAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICBjdXJyZW50T2JqZWN0ID0gbzsKLSAgICAgIH0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIGN1cnJlbnRPYmplY3QgIT0gcGFyZW50TW9kZWxPYmplY3QgPyBjdXJyZW50T2JqZWN0IDogbnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICB9Ci0KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgICAgIHJldHVybiAoKFdTRExFbGVtZW50SW1wbCltb2RlbE9iamVjdCkuZ2V0RWxlbWVudCgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0gICAgICAKLSAgcHJvdGVjdGVkIE9iamVjdCBnZXRNb2RlbE9iamVjdEhlbHBlcihPYmplY3QgcGFyZW50T2JqZWN0LCBFbGVtZW50IGVsZW1lbnROb2RlKQotICB7ICAgICAgICAgIAotCQlPYmplY3QgcmVzdWx0ID0gbnVsbDsKLQkJQ29sbGVjdGlvbiBjaGlsZENvbXBvbmVudExpc3QgPSAoKFdTRExFbGVtZW50SW1wbCkgcGFyZW50T2JqZWN0KS5nZXRXU0RMQ29udGVudHMoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gY2hpbGRDb21wb25lbnRMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJewotCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0KLSAgICAgIGlmIChvICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgZWxlbWVudCA9ICgoV1NETEVsZW1lbnRJbXBsKW8pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQ29tcG9uZW50SW1wbCkKLSAgICAgICAgewotICAgICAgICAgIGVsZW1lbnQgPSAoKFhTRENvbXBvbmVudEltcGwpbykuZ2V0RWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLQkJCWlmIChlbGVtZW50ID09IGVsZW1lbnROb2RlKQotCQkJewotCQkJCXJlc3VsdCA9IG87Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLSAgfQotfSAgICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0Fic3RyYWN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0Fic3RyYWN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlZTUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9BYnN0cmFjdEV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIGltcGxlbWVudHMgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcgotewotCi0gIHB1YmxpYyBBYnN0cmFjdEV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyKCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNXU0RMQmluZGluZ09wZXJhdGlvbihOb2RlIG5vZGUpCi0gIHsKLSAgICBpZiAoISAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgTm9kZSBwYXJlbnROb2RlID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIHBhcmVudE5vZGUgIT0gbnVsbCAmJiBXU0RMQ29uc3RhbnRzLk9QRVJBVElPTl9FTEVNRU5UX1RBRy5lcXVhbHMobm9kZS5nZXRMb2NhbE5hbWUoKSkKLSAgICAgICYmIFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50Tm9kZS5nZXRMb2NhbE5hbWUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0V4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0V4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzMTQ3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9FeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGludGVyZmFjZSBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIAotewotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpOyAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9IdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3NjQ0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9IdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIEh0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGV4dGVuZHMgQWJzdHJhY3RFeHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgoteyAgCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsgICAKLSAgICAKLSAgICBpZiAocGFyZW50RWxlbWVudCAhPSBudWxsICYmIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICB7IAotICAgICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKSkgCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEhUVFBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsgCSAgIAotICAgICAgfQkgIAotICAgICAgZWxzZSBpZiAoaXNXU0RMQmluZGluZ09wZXJhdGlvbihwYXJlbnRFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gSFRUUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSk7IAotICAgICAgfQotICAgICAgZWxzZSBpZiAoaXNXU0RMQmluZGluZ09wZXJhdGlvbihwYXJlbnRFbGVtZW50LmdldFBhcmVudE5vZGUoKSkpIAotICAgICAgewotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5JTlBVVF9FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpKQotICAgICAgICB7CSAgIAkgICAJICAKLSAgICAgICAgICByZXN1bHQgPSBIVFRQQ29uc3RhbnRzLlVSTF9FTkNPREVEX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpIHx8Ci0gICAgICAgICAgSFRUUENvbnN0YW50cy5VUkxfUkVQTEFDRU1FTlRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSk7CSAgCi0gICAgICAgIH0JCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLlBPUlRfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gSFRUUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL01pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9NaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2IzYjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL01pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZXh0ZW5kcyBBYnN0cmFjdEV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyCi17ICAgCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotICAJaWYgKHBhcmVudEVsZW1lbnQgIT0gbnVsbCkKLSAgCXsKLSAgCSAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lc3BhY2UgPSBwYXJlbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIAotICAJICBpZiAoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lc3BhY2UpKQotICAJICB7Ci0gIAkgICAgaWYgKGlzV1NETEJpbmRpbmdPcGVyYXRpb24ocGFyZW50RWxlbWVudC5nZXRQYXJlbnROb2RlKCkpKQotICAJICAgIHsKLSAgCSAgICAgIGlmIChXU0RMQ29uc3RhbnRzLklOUFVUX0VMRU1FTlRfVEFHLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZSkgfHwKLSAgCSAgICAgICAgICBXU0RMQ29uc3RhbnRzLk9VVFBVVF9FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpKQotICAJICAgICAgewotICAJICAgICAgICByZXN1bHQgPSBNSU1FQ29uc3RhbnRzLkNPTlRFTlRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkgfHwKLSAgCSAgICAgICAgTUlNRUNvbnN0YW50cy5NVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSB8fAotICAJICAgICAgICBNSU1FQ29uc3RhbnRzLk1JTUVfWE1MX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpOwotICAJICAgICAgfQotICAJICAgIH0KLSAgCSAgfQotICAJICBlbHNlIGlmIChNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSS5lcXVhbHMocGFyZW50RWxlbWVudE5hbWVzcGFjZSkpCi0gIAkgIHsKLSAgICAgICAgaWYgKE1JTUVDb25zdGFudHMuTVVMVElQQVJUX1JFTEFURURfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChNSU1FQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IE1JTUVDb25zdGFudHMuQ09OVEVOVF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsKLSAgICAgICAgfQotICAJICB9Ci0gIAl9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlODQ3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGV4dGVuZHMgQWJzdHJhY3RFeHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgoteyAgIAotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLSAgCWlmIChwYXJlbnRFbGVtZW50ICE9IG51bGwpCi0gIAl7IAotICAJICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50LmdldExvY2FsTmFtZSgpOyAKLSAgCSAgU3RyaW5nIHBhcmVudE5hbWVzcGFjZVVSSSA9IHBhcmVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgCSAgaWYgKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnROYW1lc3BhY2VVUkkpKQotICAJICB7Ci0gIAkgICAgaWYgKFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpKQotICAJICAgIHsKLSAgCSAgICAgIHJlc3VsdCA9IFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsKLSAgCSAgICB9CSAgCi0gIAkgICAgZWxzZSBpZiAoaXNXU0RMQmluZGluZ09wZXJhdGlvbihwYXJlbnRFbGVtZW50KSkKLSAgCSAgICB7Ci0gIAkgICAgICByZXN1bHQgPSBXU0RMQ29uc3RhbnRzLk9QRVJBVElPTl9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsKLSAgCSAgICB9Ci0gIAkgICAgZWxzZSBpZiAoaXNXU0RMQmluZGluZ09wZXJhdGlvbihwYXJlbnRFbGVtZW50LmdldFBhcmVudE5vZGUoKSkpCi0gIAkgICAgewotICAJICAgICAgaWYgKChXU0RMQ29uc3RhbnRzLklOUFVUX0VMRU1FTlRfVEFHLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZSkgfHwKLSAgCSAgICAgICAgICBXU0RMQ29uc3RhbnRzLk9VVFBVVF9FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpKSkKLSAgCSAgICAgIHsKLSAgCSAgICAgICAgcmVzdWx0ID0gU09BUENvbnN0YW50cy5IRUFERVJfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkgfHwKLSAgCSAgICAgICAgICBTT0FQQ29uc3RhbnRzLkJPRFlfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSk7Ci0gIAkgICAgICB9CQotICAJICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5GQVVMVF9FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpKQotICAJICAgICAgewotICAJICAgICAgICByZXN1bHQgPSBXU0RMQ29uc3RhbnRzLkZBVUxUX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpOwotICAJICAgICAgfQotICAJICAgIH0KLSAgCSAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLlBPUlRfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKSkKLSAgCSAgICB7Ci0gIAkgICAgICByZXN1bHQgPSBTT0FQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSk7Ci0gIAkgICAgfQotICAJICB9Ci0gIAkgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnROYW1lc3BhY2VVUkkpKQotICAJICB7Ci0gIAkgICAgaWYgKFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZSkpCi0gIAkgICAgewotICAJICAgICAgcmVzdWx0ID0gU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSk7Ci0gIAkgICAgfQotICAJICB9Ci0gIAkgIGVsc2UgaWYgKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnROYW1lc3BhY2VVUkkpKQotICAJICB7Ci0gIAkgICAgaWYgKE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpKQotICAJICAgIHsKLSAgCSAgICAgIHJlc3VsdCA9IFNPQVBDb25zdGFudHMuQk9EWV9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsKLSAgCSAgICB9Ci0gIAkgIH0KLSAgCX0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9YU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9YU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNWU0YjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFhTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZXh0ZW5kcyBBYnN0cmFjdEV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyCi17ICAgCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgCWlmIChwYXJlbnRFbGVtZW50ICE9IG51bGwpCi0gIAl7Ci0gIAkgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZXNwYWNlID0gcGFyZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgCSAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLQotICAJICBpZiAoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lc3BhY2UpKQotICAJICB7CQotICAJICAgIGlmIChXU0RMQ29uc3RhbnRzLlRZUEVTX0VMRU1FTlRfVEFHLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZSkpCi0gIAkgICAgewotICAJICAgICAgcmVzdWx0ID0gWFNEQ29uc3RhbnRzLlNDSEVNQV9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKTsKLSAgCSAgICB9CQotICAJICB9Ci0gIAl9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JhY2suZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iYWNrLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkMWEyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JhY2suZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX25vdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX25vdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWM3MzEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9ub3Rfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYWQ5YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTZlMmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5naGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZmZTU0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYnJvd3NlYnV0dG9uLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYnJvd3NlYnV0dG9uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0MDJmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Jyb3dzZWJ1dHRvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2NvbXBsZXh0eXBlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2NvbXBsZXh0eXBlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwN2Y4NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9jb21wbGV4dHlwZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9kZWxldGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZGVsZXRlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTIyYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9kZWxldGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZWxlbWVudF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lbGVtZW50X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDVmMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lbGVtZW50X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Vycm9yX2NvLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZXJyb3JfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTlkY2NjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZXJyb3JfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mYXVsdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mYXVsdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjI4MTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmF1bHRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9maWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYTdhMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZsZHJfZWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mbGRyX2VsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAxYzEzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZsZHJfZWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mb3J3YXJkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZm9yd2FyZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjY5OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mb3J3YXJkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaGlkZWJpbmRpbmcuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9oaWRlYmluZGluZy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NDZjZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9oaWRlYmluZGluZy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBhZGRyZXNzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBhZGRyZXNzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjBjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYWRkcmVzc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYmluZGluZ19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDI4ZWYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGJpbmRpbmdfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cG9wZXJhdGlvbl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNDA0MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxlbmNvZGVkX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxlbmNvZGVkX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTA1MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJsZW5jb2RlZF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJscmVwbGFjZW1lbnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybHJlcGxhY2VtZW50X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MzU4N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJscmVwbGFjZW1lbnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzI3NWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwMGNiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbnB1dF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbnB1dF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTZiMzQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW5wdXRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW5wdXRfb2JqX3J0bC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2lucHV0X29ial9ydGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDU1MzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW5wdXRfb2JqX3J0bC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2Vfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGNlNDgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlaGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhNzExYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTNmMjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZWRlY2xfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlZGVjbF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjc5ZDI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlZGVjbF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uZXdfd3NkbF93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uZXdfd3NkbF93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTAwMTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmV3X3dzZGxfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4YTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbmJpbmRpbmdfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM4NmM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfbm8uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfbm8uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmI5ZjhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X25vLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA5MThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9vYmpfcnRsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29ial9ydGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2VhNzA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29ial9ydGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfeWVzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X3llcy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWNiOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfeWVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFnZV9iYW5uZXIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYWdlX2Jhbm5lci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmMwYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYWdlX2Jhbm5lci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhcnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFydF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE5ZGZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFydF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5NDk4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydF9vYmpfcnRsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydF9vYmpfcnRsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUzMGIyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnRfb2JqX3J0bC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzI1Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZWhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZWhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZjYzAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0Y21wbHhwbHR5cF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRjbXBseHBsdHlwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiODY2NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRjbXBseHBsdHlwX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGVsZW10X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGVsZW10X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MmQxMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRlbGVtdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRzbXBsdHlwX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydHNtcGx0eXBfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZmYzdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydHNtcGx0eXBfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcXVpY2thc3Npc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9xdWlja2Fzc2lzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWUyYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9xdWlja2Fzc2lzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2Vfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE2YjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlaGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2VoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0ODE0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2VoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2ltcGxldHlwZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zaW1wbGV0eXBlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NWRiYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zaW1wbGV0eXBlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDQyNmVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYWRkcmVzc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYWRkcmVzc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgwYmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGFkZHJlc3Nfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGF0dF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYXR0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYjM2NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYXR0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBiaW5kaW5nX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBiaW5kaW5nX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWY2YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYm9keV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYm9keV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmQwMWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJvZHlfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGZhdWx0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBmYXVsdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTZiMWY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGZhdWx0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzJlYTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyZmF1bHRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcmZhdWx0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMGUxOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyZmF1bHRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcG9wZXJhdGlvbl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYzE5MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3R5cGVzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3R5cGVzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZjZmODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy90eXBlc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy92YWxpZGF0ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3ZhbGlkYXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIzNDdhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3ZhbGlkYXRlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvd3NkbF9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIxZjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvd3NkbF9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9maWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZGNmY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2RfZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2Rfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZGNmY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2Rfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL0hUVFBMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9IVFRQTGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzliMjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL0hUVFBMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBIVFRQTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIEhUVFBMYWJlbFByb3ZpZGVyKCkKLSAgeyAgICAgICAgICAgICAgICAgICAgCi0gICAgbWFwLnB1dChIVFRQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcsICJpY29ucy9odHRwYWRkcmVzc19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEhUVFBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRywgImljb25zL2h0dHBiaW5kaW5nX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoSFRUUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcsICJpY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYiKTsgICAgIC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEhUVFBDb25zdGFudHMuVVJMX0VOQ09ERURfRUxFTUVOVF9UQUcsICJpY29ucy9odHRwdXJsZW5jb2RlZF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEhUVFBDb25zdGFudHMuVVJMX1JFUExBQ0VNRU5UX0VMRU1FTlRfVEFHLCAiaWNvbnMvaHR0cHVybHJlcGxhY2VtZW50X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmplY3QpIAotICB7ICAgIAotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICBTdHJpbmcgaW1hZ2VOYW1lID0gKFN0cmluZyltYXAuZ2V0KG5vZGUuZ2V0TG9jYWxOYW1lKCkpOyAgICAgICAKLSAgICByZXR1cm4gaW1hZ2VOYW1lICE9IG51bGwgPyBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoaW1hZ2VOYW1lKSA6IG51bGw7IAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgIAotICB7Ci0gICAgTm9kZSBub2RlID0gKE5vZGUpb2JqZWN0OwotICAgIHJldHVybiBub2RlLmdldE5vZGVOYW1lKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9TT0FQTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvU09BUExhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFkNGVjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9TT0FQTGFiZWxQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmxhYmVsLnByb3ZpZGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgU09BUExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIFNPQVBMYWJlbFByb3ZpZGVyKCkKLSAgewotICAgIG1hcC5wdXQoU09BUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHLCAiaWNvbnMvc29hcGFkZHJlc3Nfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChTT0FQQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcsICJpY29ucy9zb2FwYmluZGluZ19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KFNPQVBDb25zdGFudHMuQk9EWV9FTEVNRU5UX1RBRywgImljb25zL3NvYXBib2R5X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoU09BUENvbnN0YW50cy5GQVVMVF9FTEVNRU5UX1RBRywgImljb25zL3NvYXBmYXVsdF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHLCAiaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KFNPQVBDb25zdGFudHMuSEVBREVSX0ZBVUxUX0VMRU1FTlRfVEFHLCAiaWNvbnMvc29hcGhlYWRlcmZhdWx0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoU09BUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcsICJpY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmplY3QpIAotICB7ICAgIAotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICBTdHJpbmcgaW1hZ2VOYW1lID0gKFN0cmluZyltYXAuZ2V0KG5vZGUuZ2V0TG9jYWxOYW1lKCkpOyAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgcmV0dXJuIGltYWdlTmFtZSAhPSBudWxsID8gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKGltYWdlTmFtZSkgOiBudWxsOyAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpICAKLSAgewotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICByZXR1cm4gbm9kZS5nZXROb2RlTmFtZSgpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTU2YTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUgotX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VEPURlcGVuZGVuY2llcyBDaGFuZ2VkCi1fVUlfREVQRU5ERU5DSUVTX0NIQU5HRURfUkVGUkVTSD1PbmUgb3IgbW9yZSBkZXBlbmRlbmNpZXMgaGF2ZSBjaGFuZ2VkLiAgRG8geW91IHdhbnQgdG8gcmVmcmVzaCB0aGUgZWRpdG9yIHRvIHJlZmxlY3QgdGhlc2UgY2hhbmdlcz8KLV9VSV9FRElUX05BTUVTUEFDRVNfRElBTE9HX1RJVExFPUVkaXQgTmFtZXNwYWNlcwotX1VJX1BSRUZfUEFHRV9DUkVBVElOR19GSUxFUz1DcmVhdGluZyBmaWxlcwotX1VJX1JFTUVNQkVSX01ZX0RFQ0lTSU9OX0xBQkVMPSZSZW1lbWJlciBteSBkZWNpc2lvbgotX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U9RGVmYXVsdCAmVGFyZ2V0IE5hbWVzcGFjZToKLV9VSV9QUkVGX1BBR0VfREVGQVVMVF9QUkVGSVg9RGVmYXVsdCBQcmVmaSZ4OgotX1VJX1BSRUZfR0VORVJBVEVfU0VQQVJBVEVfSU5URVJGQUNFPSZHZW5lcmF0ZSBQb3J0IFR5cGUgaW4gc2VwYXJhdGUgV1NETCBmaWxlCi1fVUlfUFJFRl9QQUdFX0lOVEVSRkFDRV9ERUZBVUxUX1BSRUZJWD1Qb3J0IFR5cGUgJk5hbWVzcGFjZSBQcmVmaXg6IAotX1VJX1BSRUZfUEFHRV9JTlRFUkZBQ0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFPVAmb3J0IFR5cGUgVGFyZ2V0IE5hbWVzcGFjZToKLV9VSV9QUkVGX1BBR0VfSU5URVJGQUNFX0ZJTEVfU1VGRklYPVBvcnQgVHlwZSBXU0RMIEZpbGUgTmFtZSAmU3VmZml4OiAKLV9VSV9SRUdFTl9CSU5ESU5HU19PTl9TQVZFX1FVRVNUSU9OTUFSSz1SZWdlbmVyYXRlIEJpbmRpbmdzIE9uIFNhdmU/Ci1fVUlfTEFCRUxfV0FSTklOR19EVVBMSUNBVEVfTkFNRV9FWElTVFM9V2FybmluZzogZHVwbGljYXRlIG5hbWUgYWxyZWFkeSBleGlzdHMKLV9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRD1OYW1lc3BhY2UgVVJJcyB0byBiZSBpbmNsdWRlZAotX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORz0mUmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmUKLV9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRT1Qcm8mbXB0IFJlZ2VuZXJhdGUgQmluZGluZyBvbiBzYXZlCi1fVUlfTElOS19URVhUX01PRElGWV9ERUZBVUxUX1ZBTFVFU19TRVRUSU5HPU1vZGlmeSBXU0RMIEZpbGVzIHByZWZlcmVuY2VzCi1fVUlfRURJVF9OQU1FU1BBQ0VTPUVkaXQgTmFtZXNwYWNlcy4uLgotX1VJX0FDVElPTl9BRERfSU1QT1JUPUFkZCBJbXBvcnQKLV9VSV9BQ1RJT05fQUREX0JJTkRJTkc9QWRkIEJpbmRpbmcKLV9VSV9BQ1RJT05fQUREX1BBUlQ9QWRkICZQYXJ0Ci1fVUlfQUNUSU9OX0FERF9YTUxfU0NIRU1BX0VMRU1FTlQ9QWRkIFhNTCBTY2hlbWEgRWxlbWVudAotX1VJX0FDVElPTl9SRU9SREVSX1BBUlQ9UmVvcmRlciBQYXJ0Ci1fVUlfQUNUSU9OX1JFT1JERVJfTUVTU0FHRV9SRUZFUkVOQ0U9UmVvcmRlciBNZXNzYWdlIFJlZmVyZW5jZQotX1VJX0FDVElPTl9PUEVOX0lOX05FV19FRElUT1I9Jk9wZW4gSW4gTmV3IEVkaXRvcgotX1VJX0FDVElPTl9FWElTVElOR19NRVNTQUdFPSZFeGlzdGluZyBNZXNzYWdlLi4uCi1fVUlfQUNUSU9OX0VYSVNUSU5HX0VMRU1FTlQ9JkV4aXN0aW5nIEVsZW1lbnQuLi4KLV9VSV9FUlJPUl9OQU1FU1BBQ0VfSU5WQUxJRD1UaGUgdGFyZ2V0IG5hbWVzcGFjZSBpcyBpbnZhbGlkCi1fVUlfRVJST1JfRklMRV9BTFJFQURZX0VYSVNUUz1GaWxlIGFscmVhZHkgZXhpc3RzOiB7MH0KLV9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFPVNwZWNpZnkgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBuZXcgV1NETCBmaWxlLgotX1VJX1JFR0VOX0JJTkRJTkRTX09OX1NBVkU9UmVnZW5lcmF0ZSBCaW5kaW5ncyBPbiBTYXZlCi1fVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTD0mZG9jdW1lbnQgbGl0ZXJhbAotX1VJX1RJVExFX1NQRUNJRllfUE9SVFRZUEU9U3BlY2lmeSBQb3J0IFR5cGUKLV9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MPSZQcm90b2NvbDoKLV9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MX0lOX1BST1BFUlRJRVNfU0VDVElPTj1Qcm90b2NvbDoKLV9VSV9MQUJFTF9JTkxJTkVfU0NIRU1BX09GPUlubGluZSBTY2hlbWEgb2YgCi1fVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRT1UYXJnZXQgJm5hbWVzcGFjZToKLV9VSV9MQUJFTF9QUkVGSVhfV0lUSF9DT0xPTj1QcmVmaSZ4OgotX1VJX0xBQkVMX0NSRUFURV9XU0RMX1NLRUxFVE9OPSZDcmVhdGUgV1NETCBTa2VsZXRvbgotX1VJX0xBQkVMX0NSRUFURV9ORVdfV1NETF9GSUxFPUNyZWF0ZSBhIG5ldyBXU0RMIEZpbGUKLV9VSV9MQUJFTF9TT0FQX0JJTkRJTkdfT1BUSU9OUz1TT0FQIEJpbmRpbmcgT3B0aW9ucwotX1VJX0xBQkVMX0hUVFBfQklORElOR19PUFRJT05TPUhUVFAgQmluZGluZyBPcHRpb25zCi1fVUlfTEFCRUxfQUREX0VYVEVOU0lPTl9FTEVNRU5UPUFkZCBFeHRlbnNpb24gRWxlbWVudAotX1VJX1NQRUNJRllfQklORElOR19ERVRBSUxTX0xBQkVMPVNwZWNpZnkgdGhlIGRldGFpbHMgb2YgdGhlIGJpbmRpbmcgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLV9VSV9TUEVDSUZZX1BPUlRfREVUQUlMU19UT19CRV9DUkVBVEVEPVNwZWNpZnkgdGhlIGRldGFpbHMgb2YgdGhlIHBvcnQgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLV9VSV9MQUJFTF9ORVdfQklORElORz1OZXcgQmluZGluZwotX1VJX0xBQkVMX05FV19QT1JUVFlQRT1OZXcgUG9ydFR5cGUKLV9VSV9MQUJFTF9SRUZFUkVOQ0VfS0lORD1SZWZlcmVuY2UgS2luZDoKLV9VSV9MQUJFTF9ORVdfTUVTU0FHRT1OZXcgTWVzc2FnZQotX1VJX1JBRElPX1JQQ19FTkNPREVEPXJwYyAmZW5jb2RlZAotX1VJX1JBRElPX1JQQ19MSVRFUkFMPSZycGMgbGl0ZXJhbAotX1VJX0FDVElPTl9FWElTVElOR19UWVBFPSZFeGlzdGluZyBUeXBlLi4uCi1fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFM9U3BlY2lmeSBQb3J0IERldGFpbHMKLV9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkc9U3BlY2lmeSBCaW5kaW5nCi1fVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFM9U3BlY2lmeSBCaW5kaW5nIERldGFpbHMKLV9VSV9FUlJPUl9GSUxFX01VU1RfRU5EX1dJVEhfV1NETD1FcnJvcjogRmlsZSBtdXN0IGVuZCB3aXRoIHdzZGwKLV9VSV9USVRMRV9TUEVDSUZZX01FU1NBR0U9U3BlY2lmeSBNZXNzYWdlCi1fVUlfVElUTEVfTkVXX1dTRExfRklMRT1OZXcgV1NETCBGaWxlCi1fVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EPScpCi1fVUlfQUNUSU9OX1JFTkFNRT1SZW5hbWUKLV9VSV9GT0xERVJfVFlQRVM9VHlwZXMKLV9VSV9DQU5DRUxfTEFCRUw9Q2FuY2VsCi1fVUlfQUNUSU9OX05FV19UWVBFPSZOZXcgVHlwZS4uLgotX1VJX0FDVElPTl9TRVRfVFlQRT1TZXQgJlR5cGUKLV9VSV9GT0xERVJfSU1QT1JUUz1JbXBvcnRzCi1fVUlfRk9MREVSX1NFUlZJQ0VTPVNlcnZpY2VzCi1fVUlfRk9MREVSX0JJTkRJTkdTPUJpbmRpbmdzCi1fVUlfRk9MREVSX0lOVEVSRkFDRVM9SW50ZXJmYWNlcwotX1VJX0ZPTERFUl9QT1JUVFlQRVM9UG9ydFR5cGVzCi1fVUlfRk9MREVSX01FU1NBR0VTPU1lc3NhZ2VzCi1fVUlfQUNUSU9OX05FV19NRVNTQUdFPSZOZXcgTWVzc2FnZS4uLgotX1VJX0FDVElPTl9ORVdfRUxFTUVOVD0mTmV3IEVsZW1lbnQuLi4KLV9VSV9BQ1RJT05fU0VUX0VMRU1FTlQ9U2V0ICZFbGVtZW50Ci1fVUlfQUNUSU9OX1NFVF9NRVNTQUdFPSZTZXQgTWVzc2FnZQotX1VJX0FDVElPTl9TRVRfQklORElORz0mU2V0IEJpbmRpbmcKLV9VSV9DSEVDS0JPWF9PVkVSV1JJVEU9Jk92ZXJ3cml0ZSBleGlzdGluZyBiaW5kaW5nIGluZm9ybWF0aW9uCi1fVUlfQUNUSU9OX1NFVF9QT1JUVFlQRT0mU2V0IFBvcnRUeXBlCi1fVUlfQUNUSU9OX0VESVRfUE9SVF9BRERSRVNTPUVkaXQgQWRkcmVzcwotX1VJX0FDVElPTl9BREQ9QWRkCi1fVUlfQUNUSU9OX09QRU5fSU1QT1JUPSZPcGVuIEltcG9ydAotX1VJX1VOU1BFQ0lGSUVEPSh1bnNwZWNpZmllZCkKLV9VSV9MQUJFTF9OQU1FPSZOYW1lCi1fVUlfTEFCRUxfVFlQRT1UeSZwZToKLV9VSV9MQUJFTF9UWVBFX1JBRElPPSZUeXBlCi1fVUlfQlVUVE9OX05FVz0mTmV3Li4uCi1fVUlfTEFCRUxfRUxFTUVOVD1FbGUmbWVudDoKLV9VSV9MQUJFTF9FTEVNRU5UX1JBRElPPSZFbGVtZW50Ci1fVUlfQlVUVE9OX0JST1dTRT0mQnJvd3NlLi4uCi1fVUlfQklORElOR19XSVpBUkQ9QmluZGluZyBXaXphcmQKLV9VSV9CSU5ESU5HPSZCaW5kaW5nCi1fVUlfTEFCRUxfTUVTU0FHRT0mTWVzc2FnZToKLV9VSV9MQUJFTF9SRU1PVkU9UmVtb3ZlCi1fVUlfVElUTEVfU0VMRUNUPVNlbGVjdAotX1VJX1RJVExFX1NFTEVDVF9GSUxFID0gU2VsZWN0IEZpbGUKLV9VSV9ERVNDUklQVElPTl9TRUxFQ1RfV1NETF9PUl9YU0QgPSBTZWxlY3QgYSBXU0RMIG9yIFhTRCBmaWxlIHRvIGltcG9ydC4KLV9VSV9USVRMRV9PUFRJT05TPU9wdGlvbnMKLV9VSV9ZRVNfTEFCRUw9WWVzCi1fVUlfUE9SVF9UWVBFPVBvcnQgJlR5cGUKLUlOVEVSRkFDRV9IRUFERVJfVEVYVD1Qb3J0IFR5cGUKLV9VSV9QT1JUX1dJWkFSRD1Qb3J0IFdpemFyZAotX1VJX05PX0xBQkVMPU5vCi1fVUlfQUREPSZBZGQuLi4KLV9VSV9IRUxQPUhlbHAKLV9VSV9MQUJFTF9OQU1FX0ZJTFRFUj0mTmFtZSAoPyA9IGNoYXJhY3RlciwgKiA9IGFueSBzdHJpbmcpOgotX1dBUk5fTkFNRV9NVVNUX0NPTlRBSU5fQVRfTEVBU1RfT05FX0NIQVI9SVdBWDE0MTVXIE5hbWUgZmllbGQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIKLV9XQVJOX05BTUVfSEFTX1NQQUNFPUlXQVgxNDAyVyBOYW1lIGZpZWxkIGNhbm5vdCBjb250YWluIGEgc3BhY2UKLV9XQVJOX05BTUVfSU5WQUxJRF9GSVJTVD1JV0FYMTQwM1cgRmlyc3QgY2hhcmFjdGVyIGluIG5hbWUgZmllbGQgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAoJ18nLCAnOicsICdsZXR0ZXInKQotX1dBUk5fTkFNRV9JTlZBTElEX0NIQVI9SVdBWDE0MDRXIE5hbWUgZmllbGQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgKCcKLV9XQVJOX1dTSV9DT01QTElBTkNFX1BST1RPQ09MPVdTLUkgY29tcGxpYW5jZSB3YXJuaW5nOiBwcm90b2NvbCBzaG91bGQgYmUgezB9Ci1fRVJST1JfV1NJX0NPTVBMSUFOQ0VfUFJPVE9DT0w9V1MtSSBjb21wbGlhbmNlIGVycm9yOiBwcm90b2NvbCBtdXN0IGJlIHswfQotX1dBUk5fV1NJX0NPTVBMSUFOQ0VfUlBDX0VOQ09ESU5HPVdTLUkgY29tcGxpYW5jZSB3YXJuaW5nOiBiaW5kaW5nIHNob3VsZCBub3QgYmUgcnBjIGVuY29kZWQKLV9FUlJPUl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc9V1MtSSBjb21wbGlhbmNlIGVycm9yOiBiaW5kaW5nIGNhbm5vdCBiZSBycGMgZW5jb2RlZAotX1dTSV9DT01QTElBTkNFX0xJTktfVEVYVD1Nb2RpZnkgcHJvamVjdCBjb21wbGlhbmNlIHNldHRpbmcKLQotX1VJX0xBQkVMX1VOREVGSU5FRF9BUkcxPXswfSB1bmRlZmluZWQKLV9VSV9MQUJFTF9PUl9VTkRFRklORURfQVJHMj17MH0gb3IgezF9IHVuZGVmaW5lZAotX1VJX0xBQkVMX05PX09CSkVDVF9TUEVDSUZJRURfQVJHMT1ubyB7MH0gc3BlY2lmaWVkCi1fVUlfTEFCRUxfTk9fUEFSQU1FVEVSU19TUEVDSUZJRUQ9bm8gcGFyYW1ldGVycyBzcGVjaWZpZWQKLQotX1VJX0xBQkVMX0RFRkFVTFQgPSBkZWZhdWx0Ci0KLV9VSV9FRElUT1JfTkFNRT1XU0RMIEVkaXRvcgotX1VJX1BSRUZfUEFHRV9FTkFCTEVfQVVUT19JTVBPUlRfQ0xFQU5VUD1BJnV0b21hdGljYWxseSByZW1vdmUgdW51c2VkIFdTREwgYW5kIFhTRCBpbXBvcnRzIGFuZCBYTUwgTmFtZXNwYWNlIGVudHJpZXMKLV9VSV9QUkVGX1BBR0VfRU5BQkxFX0FVVE9fT1BFTl9JTVBPUlRfRElBTE9HID0gJlByb21wdCBmb3IgbG9jYXRpb24gd2hlbiBhZGRpbmcgYW4gaW1wb3J0Ci0jIFNUQVJUIE5PTi1UUkFOU0xBVEFCTEUKLV9VSV9MQUJFTF9IVFRQX0dFVF9SQURJTz1IVFRQICZHRVQKLV9VSV9MQUJFTF9IVFRQX1BPU1RfUkFESU89SFRUUCBQTyZTVApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0VkaXRvck1vZGVTZWN0aW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhhNzBkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIKLXsKLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNBcHBsaWNhYmxlKENsYXNzIHNlY3Rpb25DbGFzcywgT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExRXh0ZW5zaW9uc1NlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFFeHRlbnNpb25zU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTE0MTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFFeHRlbnNpb25zU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNzZSBWYWxpYW5lcyAtIFNlbmVjYSBDb2xsZWdlIC0gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIwOTI4OQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5jb21tYW5kcy5BZGRFeHRlbnNpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLmNvbW1hbmRzLlJlbW92ZUV4dGVuc2lvbk5vZGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuQWJzdHJhY3RFeHRlbnNpb25zU2VjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRE9NRXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRE9NRXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLkV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFeHRlbnNpb25zU2VjdGlvbiBleHRlbmRzIEFic3RyYWN0RXh0ZW5zaW9uc1NlY3Rpb24KLXsKLSAgV1NETE1vZGVsQWRhcHRlciBtb2RlbEFkYXB0ZXI7Ci0gIAotICBwdWJsaWMgVzExRXh0ZW5zaW9uc1NlY3Rpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBzZXRFeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlcihuZXcgV1NETEV4dGVuc2lvblRyZWVMYWJlbFByb3ZpZGVyKCkpOwotICAgIHNldEV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXIobmV3IFdTRExFeHRlbnNpb25UcmVlQ29udGVudFByb3ZpZGVyKCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEFkZEV4dGVuc2lvbkNvbW1hbmQgZ2V0QWRkRXh0ZW5zaW9uQ29tbWFuZChPYmplY3QgbykKLSAgewotICAgIEFkZEV4dGVuc2lvbkNvbW1hbmQgYWRkRXh0ZW5zaW9uQ29tbWFuZCA9IG51bGw7Ci0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpZiAobyBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBvOwotICAgICAgICBhZGRFeHRlbnNpb25Db21tYW5kID0gbmV3IEFkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9BRERfRVhURU5TSU9OX0VMRU1FTlQsIGV4dGVuc2libGVFbGVtZW50LCBlbGVtZW50KTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICAvLyBUT0RPIChjcykgbmVlZCB0byBpbXBsZW1lbnQgdGhpcwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYWRkRXh0ZW5zaW9uQ29tbWFuZDsKLSAgfQotCi0gIHByb3RlY3RlZCBDb21tYW5kIGdldFJlbW92ZUV4dGVuc2lvbkNvbW1hbmQoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIE5vZGUpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBSZW1vdmVFeHRlbnNpb25Ob2RlQ29tbWFuZCgicmVtb3ZlIiwgKE5vZGUpbyk7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgCi0gIC8vIFRPRE8gKGNzKSB0aGUgQWJzdHJhY3RFeHRlbnNpb25zU2VjdGlvbiBpcyBwb2xsdXRlZCB3aXRoIFhTRCBzcGVjaWMgc3R1ZmYKLSAgLy8gbmVlZCB0byBjbGVhbiB0aGF0IHVwISEKLSAgLy8gVE9ETyAoY3MpIHdlIHNob3VsZCBhdm9pZCByZWZlcmVuY2luZyBXU0RMIG1vZGVsIG9iamVjdHMgLi4uIGdvIHRocnUgZmFjYWRlIGluc3RlYWQKLSAgcHVibGljIHZvaWQgc2V0SW5wdXQoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsgICAgCi0gICAgc3VwZXIuc2V0SW5wdXQocGFydCwgc2VsZWN0aW9uKTsKLSAgICBpc1JlYWRPbmx5ID0gdHJ1ZTsgICAgCi0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgeyAgICAKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGV4dGVuc2libGVFbGVtZW50LmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEltcGwpCi0gICAgICB7ICAKLSAgICAgICAgaXNSZWFkT25seSA9IGZhbHNlOwotICAgICAgICBtb2RlbEFkYXB0ZXIgPSBXU0RMTW9kZWxBZGFwdGVyLmxvb2t1cE9yQ3JlYXRlTW9kZWxBZGFwdGVyKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICAgICAgbW9kZWxBZGFwdGVyLmdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpLmFkZExpc3RlbmVyKGludGVybmFsTm9kZUFkYXB0ZXIpOwotICAgICAgfSAgICAgICAgIAotICAgIH0gICAgICAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLSAgICBzdXBlci5kaXNwb3NlKCk7Ci0gICAgaWYgKG1vZGVsQWRhcHRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsQWRhcHRlci5nZXRNb2RlbFJlY29uY2lsZUFkYXB0ZXIoKS5yZW1vdmVMaXN0ZW5lcihpbnRlcm5hbE5vZGVBZGFwdGVyKTsKLSAgICB9ICAKLSAgfQotICAKLSAgLy8gVE9ETyAoY3MpIGluIHRoZSBmdXR1cmUgd2UgbmVlZCB0byAnZml4JyB0aGluZ3Mgc28gdGhhdCB3ZSBjYW4gcmlkIG9mIHRoaXMgbWV0aG9kCi0gIC8vIHdlIG5lZWQgYSB3YXkgdG8gZG8gYWxsIG9mIHRoaXMgdmlhIHRoZSBmYWNhZGUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIGFueSBkaXJlY3QgCi0gIC8vIGRlcGVuZGVuY3kgb24gdGhlIFdTREwxLjEgbW9kZWwuLyBTaW1pbGFybHkgdGhpcyBjbGFzcyBzaG91bGRuJ3QgbmVlZCB0byAna25vdycKLSAgLy8gYWJvdXQgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24gdGhpcyBpcyBhbiB1bmRlcmx5aW5nIGRldGFpbCB0aGF0IG5lZWRzIHRvIGJlIGhpZGRlbgotICAvLyAKLSAgcHJpdmF0ZSBzdGF0aWMgRXh0ZW5zaWJsZUVsZW1lbnQgZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKQotICAgIHsgICAgICAgICAKLSAgICAgIG8gPSAoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKW8pLmdldE1vZGVsKCk7Ci0gICAgfSAgCi0gICAgaWYgKG8gaW5zdGFuY2VvZiBBZGFwdGVyKQotICAgIHsKLSAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIGEgd2F5IHRvIGRvIGFsbCBvZiB0aGlzIHZpYSB0aGUgZmFjYWRlCi0gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgYW55IGRpcmVjdCBkZXBlbmRlbmN5IG9uIHRoZSBXU0RMMS4xIG1vZGVsCi0gICAgICAvLyBvZiBjb3Vyc2UgYXQgdGhlIG1vbWVudCB3ZSBjYWxsIHRoaXMgY2xhc3MgdGhlIFcxMUV4dGVuc2lvblNlY3Rpb25zCi0gICAgICAvLyBzbyB0aGF0J3Mgbm90IGEgcHJvYmxlbS4gIEluIHRoZSBmdXR1cmUgdGhvdWdoIHdlJ2xsIHdhbnQgdG8gcmV1c2UgdGhpcyAKLSAgICAgIC8vIGNsYXNzIGZvciBXU0RMIDIuMC4KLSAgICAgIC8vICAgICAgIAotICAgICAgbyA9ICgoQWRhcHRlcilvKS5nZXRUYXJnZXQoKTsKLSAgICB9ICAgICAgCi0gICAgaWYgKG8gaW5zdGFuY2VvZiBFeHRlbnNpYmxlRWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gKEV4dGVuc2libGVFbGVtZW50KW87Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2cgY3JlYXRlQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZygpCi0gIHsgICAgCi0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IG5ldyBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nKGNvbXBvc2l0ZS5nZXRTaGVsbCgpLCBnZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCkpOyAgIAotICAgICAgZGlhbG9nLmFkZEVsZW1lbnRzVGFibGVGaWx0ZXIobmV3IEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2dGaWx0ZXIoZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RWxlbWVudCgpKSk7Ci0gICAgICByZXR1cm4gZGlhbG9nOwotICAgIH0gICAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5IGdldEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlIGdldFByZWZTdG9yZSgpCi0gIHsKLQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotICB9Ci0gCi0gIHN0YXRpYyBjbGFzcyBXU0RMRXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlciBleHRlbmRzIERPTUV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgeyAgICAgICAgIAotICAgICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dEVsZW1lbnQpOwotICAgICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZG9tRWxlbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7ICAgICAKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgICAgLy8gYWRkIHRoZSBET00gZWxlbWVudAotICAgICAgICAgIGRvbUVsZW1lbnRMaXN0LmFkZChlbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnRMaXN0LnRvQXJyYXkoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNULnRvQXJyYXkoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHN0YXRpYyBjbGFzcyBXU0RMRXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBET01FeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHJpdmF0ZSBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKE5vZGUgbm9kZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbm9kZS5nZXROYW1lc3BhY2VVUkkoKTsgICAgICAKLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICBOb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gWFNERWRpdG9yUGx1Z2luLmdldERlZmF1bHQoKS5nZXROb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5KCk7ICAgICAgCi0gICAgICAgIHJldHVybiByZWdpc3RyeS5nZXRMYWJlbFByb3ZpZGVyKG5hbWVzcGFjZSk7Ci0gICAgICB9ICAgICAgICAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkKLSAgICB7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgICBJTGFiZWxQcm92aWRlciBwcm92aWRlciA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7Ci0gICAgICAgIGlmIChwcm92aWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldEltYWdlKGVsZW1lbnQpOwotICAgICAgICB9ICAgICAgICAgIAotICAgICAgfQotICAgICAgcmV0dXJuIHN1cGVyLmdldEltYWdlKG9iamVjdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgICAgSUxhYmVsUHJvdmlkZXIgcHJvdmlkZXIgPSBnZXRMYWJlbFByb3ZpZGVyKGVsZW1lbnQpOwotICAgICAgICBpZiAocHJvdmlkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwcm92aWRlci5nZXRUZXh0KGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOwotICAgIH0gICAgICAgIAotICB9Ci0gIC8qKgotICAgKiBUaGlzIGZpbHRlciBpcyB0byBiZSB1c2VkIGJ5IHRoZSBkaWFsb2cgaW52b2tlZCB3aGVuIGFkZEJ1dHRvbiBpcyBwcmVzc2VkCi0gICAqLwotICBwcml2YXRlIGNsYXNzIEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2dGaWx0ZXIgZXh0ZW5kcyBWaWV3ZXJGaWx0ZXIKLSAgewotICAgIHByaXZhdGUgRWxlbWVudCBob3N0RWxlbWVudDsKLQotICAgIHB1YmxpYyBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nRmlsdGVyKEVsZW1lbnQgaG9zdEVsZW1lbnQpCi0gICAgewotICAgICAgdGhpcy5ob3N0RWxlbWVudCA9IGhvc3RFbGVtZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50RWxlbWVudCwgT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZWxlbWVudCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnQpLmdldE5hbWUoKTsKLSAgICAgICAgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBmaWx0ZXIgPSAoRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcikgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSgpLmdldFByb3BlcnR5KG5hbWVzcGFjZSwgIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBmaWx0ZXIuaXNWYWxpZENvbnRleHQoaG9zdEVsZW1lbnQsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1RyZWVWaWV3ZXJJbnB1dEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgcmV0dXJuIGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwgJiYgZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RWxlbWVudCgpID09IGVsZW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZmI1ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uIGV4dGVuZHMgTmFtZVNlY3Rpb24gewotCXByb3RlY3RlZCBDTGFiZWwgY29tYm9MYWJlbDsgCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlcjsKLQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljcmVhdGVDb250cm9sQXJlYSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sQXJlYSgpCi0JewotCQkKLQkJCi0JCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX01FU1NBR0UpOyAKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCWNvbWJvTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWNvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOwotCQljb21iby5zZXRCYWNrZ3JvdW5kKGNvbXBvc2l0ZS5nZXRCYWNrZ3JvdW5kKCkpOwotICAgICAgICBjb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLSAgICAgICAgY29tYm8uYWRkTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotICAgICAgICBjb21iby5hZGRMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19NRVNTQUdFX1JFRl9NRVNTQUdFX0NPTUJPKTsKLQkJCi0JCWNvbWJvLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCX0KLQkKLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCWlmIChuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJU3RyaW5nIHJlZk5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJY29tYm8ucmVtb3ZlQWxsKCk7Ci0JCWNvbWJvLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJY29tYm8uYWRkKE5FV19TVFJJTkcpOwotCQkKLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7Ci0JCWlmIChtZXNzYWdlUmVmICE9IG51bGwgJiYgbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCXJlZk5hbWUgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJfQotCQkKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkgewotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNwZWNzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWNvbWJvLmFkZCgoU3RyaW5nKSBzcGVjc1tpbmRleF0uZ2V0TmFtZSgpKTsKLQkJCX0KLQkJfQkJCi0JCQotCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCWludCBpbmRleDsKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQlpZiAoaXRlbXNbaW5kZXhdLmVxdWFscyhyZWZOYW1lKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKLQkJCS8vIEZvdW5kIGEgbWF0Y2gKLQkJCWNvbWJvLnNlbGVjdChpbmRleCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljb21iby5zZXRUZXh0KHJlZk5hbWUpOwotCQl9Ci0KLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihjb21ibyk7Ci0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQotCi0vLwkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7Ci0vLwkJSXRlcmF0b3IgaXQgPSBtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotLy8JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLS8vCQkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIGl0Lm5leHQoKTsKLS8vCQkJY29tYm8uYWRkKG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0vLwkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0KLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldE1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoSUFTRE9iamVjdCkgZ2V0TW9kZWwoKSk7Ci0gICAgICAgIAotCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQl9Ci0KLQkKLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSB7Ci0JCQkJaWYgKGV2ZW50LnR5cGUgPT0gU1dULlRyYXZlcnNlKSB7Ci0JCQkJCWlmIChldmVudC5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX0FSUk9XX05FWFQgfHwgZXZlbnQuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUykKLQkJCQkJCWlzVHJhdmVyc2luZyA9IHRydWU7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCQlzdGFydERlbGF5ZWRFdmVudChldmVudCk7Ci0JCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCVN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSAhPSAtMSkgewotCQkJCXZhbHVlID0gY29tYm8uZ2V0SXRlbShjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQkJCX0KLQkJCWlmIChzaG91bGRQZXJmb3JtQ29tYm9TZWxlY3Rpb24oZXZlbnQsIHZhbHVlKSkgewotICAgIAkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG51bGw7Ci0gICAgCQkJaW50IGNvbnRpbnVlQXBwbHkgPSBXaW5kb3cuT0s7Ci0gICAgCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgdGhpcy5nZXRNb2RlbCgpOwotICAgIAkJCQotICAgIAkJCWlmICh2YWx1ZS5lcXVhbHMoTkVXX1NUUklORykpIHsKLSAgICAJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotICAgIAkJCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IGVkaXRNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotICAgIAkJCQljb250aW51ZUFwcGx5ID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLSAgICAJCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotICAgIAkJCX0KLSAgICAJCQllbHNlIGlmICh2YWx1ZS5lcXVhbHMoQlJPV1NFX1NUUklORykpIHsKLSAgICAJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotICAgIAkJCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IGVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotICAgIAkJCQljb250aW51ZUFwcGx5ID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLSAgICAJCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwkJCQkKLSAgICAJCQl9Ci0gICAgCQkJZWxzZSB7Ci0gICAgCQkJCXNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0gICAgCQkJfQotICAgIAkJCQotICAgIAkJCWlmIChjb250aW51ZUFwcGx5ID09IFdpbmRvdy5PSykgewotICAgIAkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0gICAgCQkJCWlmIChzcGVjICE9IG51bGwpIHsKLSAgICAJCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmLCBzcGVjKTsKLSAgICAJCQkJfQotICAgIAkJCX0KLQkgICAgICAgIH0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoU3RyaW5nIHZhbHVlKQotCXsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkJeyAgCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gcXVpY2tQaWNrcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJCWlmIChxdWlja1BpY2tzICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IHF1aWNrUGlja3NbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfSAgICAgICAgICAgICAgICAKLQkJCQl9ICAKLQkJCX0KLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCQkJaWYgKGhpc3RvcnkgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBoaXN0b3J5Lmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gaGlzdG9yeVtpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsgIAotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0KLQkJCQl9ICAKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCQlpZiAoY29tYm8gIT0gbnVsbCAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKQotCQl7Ci0JCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5EZWZhdWx0U2VsZWN0aW9uLCB0aGlzKTsKLQkJCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5UcmF2ZXJzZSwgdGhpcyk7Ci0JCX0KLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb25GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWM1NTZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uRmlsdGVyIGltcGxlbWVudHMgSUZpbHRlciB7Ci0JLy8gcm1haDogd2Ugc2hvdWxkIGNvbnNpZGVyIG90aGVyIHdheXMgb2YgJ2V4dGVuZGluZycgdGhpcyBjYXBhYmlsaXR5Ci0JLy8gcmF0aGVyIHRoYW4gc2ltcGx5IGNoZWNraW5nIGEgdmFyaWFibGUuLi4uCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHNob3dXMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbiA9IHRydWU7Ci0JCi0JcHVibGljIGJvb2xlYW4gc2VsZWN0KE9iamVjdCB0b1Rlc3QpIHsKLQkJaWYgKHRvVGVzdCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlICYmIHNob3dXMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbikgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4Yjg2NDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuUGFyYW1ldGVyU2VjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyU2VjdGlvbiBleHRlbmRzIFBhcmFtZXRlclNlY3Rpb24gewotCXByb3RlY3RlZCBCdXR0b24gdHlwZVJhZGlvOwotCXByb3RlY3RlZCBCdXR0b24gZWxlbWVudFJhZGlvOwotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xBcmVhKCkJewotCQlzdXBlci5jcmVhdGVDb250cm9sQXJlYSgpOwotCQkKLQkJQ0xhYmVsIHJlZmVyZW5jZUtpbmRMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfUkVGRVJFTkNFX0tJTkQpOyAKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCXJlZmVyZW5jZUtpbmRMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJCi0JCUNvbXBvc2l0ZSBjb21wID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNvbXBvc2l0ZShjb21wb3NpdGUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWxheW91dC5tYXJnaW5SaWdodCA9IDU7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCQotCQkKLQkJdHlwZVJhZGlvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wLCBNZXNzYWdlcy5fVUlfTEFCRUxfVFlQRV9SQURJTywgU1dULlJBRElPKTsgCi0JCWVsZW1lbnRSYWRpbyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcCwgTWVzc2FnZXMuX1VJX0xBQkVMX0VMRU1FTlRfUkFESU8sIFNXVC5SQURJTyk7CSAKLQkJdHlwZVJhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQllbGVtZW50UmFkaW8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodHlwZVJhZGlvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QQVJUX1RZUEVfUkFESU8pOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGVsZW1lbnRSYWRpbywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUEFSVF9FTEVNRU5UX1JBRElPKTsKLQkJCi0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb1dpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbWV0ZXIgPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgdGhpcy5nZXRNb2RlbCgpOwotCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFyYW1ldGVyLmdldFRhcmdldCgpOwotCQkKLQkJaWYgKGUud2lkZ2V0ID09IHR5cGVSYWRpbyAmJiB0eXBlUmFkaW8uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfVFlQRSk7IAotCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgdHJ1ZSwgbnVsbCk7Ci0JCQlzdXBlci5yZWZyZXNoQ29tYm8oKTsKLQkJfQotCQllbHNlIGlmIChlLndpZGdldCA9PSBlbGVtZW50UmFkaW8gJiYgZWxlbWVudFJhZGlvLmdldFNlbGVjdGlvbigpKSB7Ci0JCQljb21ib0xhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0VMRU1FTlQpOyAKLQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBudWxsKTsKLQkJCXJlZnJlc2hFbGVtZW50Q29tYm8oKTsKLQkJfQotCQkvLyAiRWxlJm1lbnQ6IiB3aWxsIGJlIHRydW5jYXRlZCBpZiB0aGUgZmlyc3Qgc2VsZWN0aW9uIGlzICJUeSZwZSIgYW5kIHRoZW4gc3dpdGNoZWQgdG8gIkVsZSZtZW50OiIKLQkJLy8gc28gbmVlZCB0byBjYWxsIHRoZSBsYXlvdXQoKSBtZXRob2QgaGVyZS4KLQkJY29tcG9zaXRlLmxheW91dCgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDb21ib1NlbGVjdGlvbigpCi0JewotCQlpZiAoZWxlbWVudFJhZGlvLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkvLyBIYW5kbGUgRWxlbWVudCBzZWxlY3Rpb24KLQkJCVN0cmluZyB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0KLQkJCVcxMVBhcmFtZXRlckZvclBhcnQgcGFyYW1ldGVyID0gKFcxMVBhcmFtZXRlckZvclBhcnQpIHRoaXMuZ2V0TW9kZWwoKTsKLQotCQkJaWYgKHZhbHVlLmVxdWFscyhORVdfU1RSSU5HKSkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRFbGVtZW50Q29tbWFuZChJUGFyYW1ldGVyLlNFVF9ORVdfQUNUSU9OX0lEKTsKLQkJCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHZhbHVlLmVxdWFscyhCUk9XU0VfU1RSSU5HKSkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRFbGVtZW50Q29tbWFuZChJUGFyYW1ldGVyLlNFTEVDVF9FWElTVElOR19BQ1RJT05fSUQpOwotCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRFbGVtZW50Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0JCQkJaWYgKHNwZWMgIT0gbnVsbCkgewotCQkJCQllZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyYW1ldGVyLCBzcGVjKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoaGFuZGxlVHlwZVNjZW5hcmlvKSB7Ci0JCQlzdXBlci5oYW5kbGVDb21ib1NlbGVjdGlvbigpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHJlZnJlc2hFbGVtZW50Q29tYm8oKSB7Ci0JCi0JCQkvLyBSZWZyZXNoIHdpdGggRWxlbWVudHMKLQkJCUlQYXJhbWV0ZXIgcGFyYW0gPSBudWxsOwotCQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCQkKLQkJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlwYXJhbSA9IChJUGFyYW1ldGVyKSBtb2RlbDsKLQkJCX0KLQkJCQotCQkJU3RyaW5nIG5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGVsZW1lbnROYW1lID0gIlBhcmFtZXRlclNlY3Rpb24uamF2YSI7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChwYXJhbSAhPSBudWxsKSB7Ci0JCQkJbmFtZSA9IHBhcmFtLmdldE5hbWUoKTsKLQkJCQllbGVtZW50TmFtZSA9IHBhcmFtLmdldENvbXBvbmVudE5hbWUoKTsKLQkJCX0KLQotCQkJaWYgKCFuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQkJbmFtZVRleHQuc2V0VGV4dChuYW1lKTsKLQkJCX0KLQkJCQotCQkJLy8gUG9wdWxhdGUgdGhlIENvbWJvCi0JCQljb21iby5yZW1vdmVBbGwoKTsKLQkJCWNvbWJvLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJCWNvbWJvLmFkZChORVdfU1RSSU5HKTsKLQkJCQotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRFbGVtZW50Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcGVjcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gRGlzcGxheSB0aGUgZWxlbWVudCBpbiB0aGUgQ29tYm8KLQkJCVN0cmluZ1tdIGl0ZW1zID0gY29tYm8uZ2V0SXRlbXMoKTsKLQkJCWludCBpbmRleDsKLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWlmIChpdGVtc1tpbmRleF0uZXF1YWxzKGVsZW1lbnROYW1lKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCWlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgewotCQkJCS8vIEZvdW5kIGEgbWF0Y2gKLQkJCQljb21iby5zZWxlY3QoaW5kZXgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJY29tYm8uc2V0VGV4dChlbGVtZW50TmFtZSk7Ci0JCQl9Ci0JCQkKLQkJCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQkJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbSA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBtb2RlbDsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJhbS5nZXRUYXJnZXQoKTsKLQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJCXR5cGVSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCQkJZWxlbWVudFJhZGlvLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9UWVBFKTsgCi0JCQkJaGFuZGxlVHlwZVNjZW5hcmlvID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCXR5cGVSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCWVsZW1lbnRSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9FTEVNRU5UKTsgCi0JCQkJaGFuZGxlVHlwZVNjZW5hcmlvID0gZmFsc2U7Ci0JCQkJcmVmcmVzaEVsZW1lbnRDb21ibygpOwkJCQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gTmVpdGhlciBhIFR5cGUgb3IgRWxlbWVudAotCQkJCXR5cGVSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCWVsZW1lbnRSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7CQkJCQotCQkJfQotCQl9Ci0JCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoZWxlbWVudFJhZGlvKTsKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcih0eXBlUmFkaW8pOwotCQkKLQkJc3VwZXIucmVmcmVzaCgpOwotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRFbGVtZW50Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0JCQotCQlyZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsKLQkJCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVkODJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIKLXsKLSAgcHVibGljIGJvb2xlYW4gc2VsZWN0KE9iamVjdCB0b1Rlc3QpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICh0b1Rlc3QgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKQotICAgIHsgIAotICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotICAgICAgICBpZiAobWFuYWdlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIgZmlsdGVyID0gKEVkaXRvck1vZGVTZWN0aW9uRmlsdGVyKSBtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0QWRhcHRlcihFZGl0b3JNb2RlU2VjdGlvbkZpbHRlci5jbGFzcyk7Ci0gICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZpbHRlci5pc0FwcGxpY2FibGUoVzExUGFyYW1ldGVyU2VjdGlvbi5jbGFzcywgdG9UZXN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVjb25jaWxlci9EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWNvbmNpbGVyL0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZjM0M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWNvbmNpbGVyL0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25GcmFtZXdvcms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIHBlcmZvcm1zIHRoZSBhcy15b3UtdHlwZSB2YWxpZGF0aW9uIGZvciBXU0RMIGZpbGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCBleHRlbmRzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElkID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24ud3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIFZhbGlkYXRvciBfdmFsaWRhdG9yOwotCi0gIHB1YmxpYyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCgpCi0gIHsKLSAgfQotCi0gIHByaXZhdGUgVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpCi0gIHsKLSAgICBpZiAoX3ZhbGlkYXRvciA9PSBudWxsKQotICAgICAgX3ZhbGlkYXRvciA9IFZhbGlkYXRpb25GcmFtZXdvcmsuZ2V0RGVmYXVsdCgpLmdldFZhbGlkYXRvcihJZCk7Ci0gICAgcmV0dXJuIF92YWxpZGF0b3I7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVZhbGlkYXRvciBnZXREZWxlZ2F0ZVZhbGlkYXRvcigpCi0gIHsKLSAgICBWYWxpZGF0b3IgdiA9IGdldFZhbGlkYXRvcigpOwotICAgIGlmICh2ID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gdi5hc0lWYWxpZGF0b3IoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzRGVsZWdhdGVWYWxpZGF0b3JFbmFibGVkKElGaWxlIGZpbGUpCi0gIHsKLSAgICBWYWxpZGF0b3IgdiA9IGdldFZhbGlkYXRvcigpOwotICAgIGlmICh2ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2LnNob3VsZFZhbGlkYXRlKGZpbGUsIGZhbHNlLCBmYWxzZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHYuaXNCdWlsZFZhbGlkYXRpb24oKSB8fCB2LmlzTWFudWFsVmFsaWRhdGlvbigpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmsuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYmEyNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmsuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci0KLS8qKgotICogV1NETEh5cGVybGluayBrbm93cyBob3cgdG8gb3BlbiBsaW5rcyBmcm9tIHdzZGwgZmlsZXMuCi0gKiAKLSAqIEBzZWUgV1NETEh5cGVybGlua0RldGVjdG9yCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMSHlwZXJsaW5rIGltcGxlbWVudHMgSUh5cGVybGluawotewotICBwcml2YXRlIElSZWdpb24gZlJlZ2lvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgZlJlc291cmNlOwotICBwcml2YXRlIFN0cmluZyBmU3BlYzsKLQotICBwdWJsaWMgV1NETEh5cGVybGluayhJUmVnaW9uIHJlZ2lvbiwgU3RyaW5nIHJlc291cmNlLCBTdHJpbmcgc3BlYykKLSAgewotICAgIGZSZWdpb24gPSByZWdpb247Ci0gICAgZlJlc291cmNlID0gcmVzb3VyY2U7Ci0gICAgZlNwZWMgPSBzcGVjOwotICB9Ci0KLSAgcHVibGljIElSZWdpb24gZ2V0SHlwZXJsaW5rUmVnaW9uKCkKLSAgewotICAgIHJldHVybiBmUmVnaW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEh5cGVybGlua1RleHQoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBvcGVuKCkKLSAgewotICAgIC8qCi0gICAgICogSVNTVUU6IFRoZXJlIGFyZSBjbGVhbmVyIHdheXMgdG8gZmluZCB0aGUgcmlnaHQgZmlsZSBiYXNlZCBvbiBhIFVSSQotICAgICAqIHN0cmluZyBhbmQgY2xlYW5lciB3YXlzIHRvIGZpbmQgd2hpY2ggZWRpdG9yIHRvIG9wZW4gZm9yIHRoZSBmaWxlLiBTZWUKLSAgICAgKiBvdGhlciBJSHlwZXJsaW5rIGFuZCBJSHlwZXJsaW5rRGV0ZWN0b3IgaW1wbGVtZW50b3JzIGZvciBleGFtcGxlcy4KLSAgICAgKi8KLSAgICBTdHJpbmcgcGF0dGVybiA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0gICAgaWYgKGZSZXNvdXJjZSAhPSBudWxsICYmIGZSZXNvdXJjZS5zdGFydHNXaXRoKHBhdHRlcm4pKQotICAgIHsKLSAgICAgIFBhdGggcGF0aCA9IG5ldyBQYXRoKGZSZXNvdXJjZS5zdWJzdHJpbmcocGF0dGVybi5sZW5ndGgoKSkpOwotICAgICAgSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQotICAgICAgSVdvcmtiZW5jaFBhZ2Ugd29ya2JlbmNoUGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCi0gICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoUGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQotICAgICAgLy8gV2hlbiB1c2luZyB0aGUgY3Vyc29yIG9yIHRoZSBtb3VzZSB0byBtb3ZlIGFyb3VuZCBpbiB0aGUgdGV4dAotICAgICAgLy8gZWRpdG9yLCB0aGUgbG9jYXRpb24gaGlzdG9yeSBpcyBub3QgdXBkYXRlZCwgc28gd2UgbWFrZSBzdXJlIHdlIGtlZXAKLSAgICAgIC8vIGEgcmVmZXJlbmNlIHRvIHdoZXJlIHdlIGFyZS4gSWYgd2UgdXNlIG90aGVyIG5hdmlnYXRpb24gbWVhbnMsIGxpa2UgdGhlCi0gICAgICAvLyBvdXRsaW5lIHZpZXcsIHRoaXMgY2FsbCB3aWxsIG5vdCBhZGQgYSBuZXcgbG9jYXRpb24gaGlzdG9yeSBlbnRyeSwgYXMKLSAgICAgIC8vIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IGxvY2F0aW9uIHNldCB0aHJvdWdoIHRoZSBvdXRsaW5lIGRyaXZlbgotICAgICAgLy8gbmF2aWdhdGlvbi4KLQotICAgICAgYm9vbGVhbiBzYW1lRWRpdG9yID0gZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiAoKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKTsKLQotICAgICAgd29ya2JlbmNoUGFnZS5nZXROYXZpZ2F0aW9uSGlzdG9yeSgpLm1hcmtMb2NhdGlvbihlZGl0b3JQYXJ0KTsKLQotICAgICAgaWYgKCFzYW1lRWRpdG9yKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgaW4gYSBkaWZmZXJlbnQgZmlsZSwgc28gb3BlbiB0aGUgdGFyZ2V0J3MgZW5jbG9zaW5nCi0gICAgICAgICAgLy8gcmVzb3VyY2UgaW4gaXQncyBvd24gZWRpdG9yLiBMZXQgdGhlIHdvcmtiZW5jaCBkZWNpZGUgd2hhdCBlZGl0b3IKLSAgICAgICAgICAvLyB0byBvcGVuIGJhc2VkIG9uIHRoZSBmaWxlJ3MgY29udGVudCB0eXBlLgotCi0gICAgICAgICAgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHdvcmtiZW5jaFBhZ2UsIGZpbGUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0vLyAgICAgICAgICBMb2dnZXIubG9nKExvZ2dlci5XQVJOSU5HX0RFQlVHLCBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIEF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCBlZGl0b3IncyBzZWxlY3Rpb24gbWFuYWdlciBhbmQgdHJ5IHRvCi0gICAgICAvLyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgdGhpbmcgKHNjaGVtYSBjb21wb25lbnQsIHdzZGwgZWxlbWVudCwgZXRjKQotICAgICAgLy8gcG9pbnRlZCB0byBieSBmU3BlYy4KLQotICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0KLSAgICAgIGlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZlNwZWMpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI2MGUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETEh5cGVybGlua0RldGVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREh5cGVybGlua0RldGVjdG9yOwotLyoqCi0gKiBEZXRlY3RzIGh5cGVybGlua3MgZm9yIFdTREwgZmlsZXMuIFVzZWQgYnkgdGhlIFdTREwgdGV4dCBlZGl0b3IgdG8gcHJvdmlkZSBhCi0gKiAiR28gdG8gZGVjbGFyYXRpb24iIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB3aXRoIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIEphdmEKLSAqIGVkaXRvci4KLSAqLwotcHVibGljIGNsYXNzIFdTRExIeXBlcmxpbmtEZXRlY3RvciBleHRlbmRzIFhTREh5cGVybGlua0RldGVjdG9yCi17Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICovCi0gIHByb3RlY3RlZCBJSHlwZXJsaW5rIGNyZWF0ZUh5cGVybGluayhJRG9jdW1lbnQgZG9jdW1lbnQsIElET01Ob2RlIG5vZGUsIElSZWdpb24gcmVnaW9uKQotICB7Ci0gICAgLy8gSGVyZSB3ZSdyZSB0cnlpbmcgdG8gZmluZCB0aGUgdGFyZ2V0IGNvbXBvbmVudCdzIHJlc291cmNlIGFuZCBzcGVjLgotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihkb2N1bWVudCk7Ci0gICAgT3Blbk9uU2VsZWN0aW9uSGVscGVyIGhlbHBlciA9IG5ldyBPcGVuT25TZWxlY3Rpb25IZWxwZXIoZGVmaW5pdGlvbik7Ci0gICAgU3RyaW5nW10gdGFyZ2V0RGF0YSA9IGhlbHBlci5jb21wdXRlU3BlY2lmaWNhdGlvbihub2RlKTsKLQotICAgIGlmICh0YXJnZXREYXRhICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHJlc291cmNlID0gdGFyZ2V0RGF0YVswXTsKLSAgICAgIFN0cmluZyBzcGVjID0gdGFyZ2V0RGF0YVsxXTsKLSAgICAgIHJldHVybiBuZXcgV1NETEh5cGVybGluayhyZWdpb24sIHJlc291cmNlLCBzcGVjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBkZWZpbml0aW9uIGZyb20gZG9jdW1lbnQKLSAgICogCi0gICAqIEBwYXJhbSBkb2N1bWVudAotICAgKiBAcmV0dXJuIERlZmluaXRpb24KLSAgICovCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKElEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0RXhpc3RpbmdNb2RlbEZvclJlYWQoZG9jdW1lbnQpOwotICAgIGlmIChtb2RlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRE9NTW9kZWwpCi0gICAgICAgIHsKLSAgICAgICAgICBJRE9NRG9jdW1lbnQgZG9tRG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotICAgICAgICAgIGlmIChkb21Eb2MgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBXU0RMTW9kZWxBZGFwdGVyIG1vZGVsQWRhcHRlciA9IChXU0RMTW9kZWxBZGFwdGVyKSBkb21Eb2MuZ2V0QWRhcHRlckZvcihXU0RMTW9kZWxBZGFwdGVyLmNsYXNzKTsKLSAgICAgICAgICAgIC8vIElTU1VFOiBpZiBhZGFwdGVyIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIGRvbURvYyBnZXRBZGFwdGVyRm9yCi0gICAgICAgICAgICAvLyB3aWxsIGNyZWF0ZSBvbmUuIFNvIHdoeSBpcyB0aGlzIG51bGwgY2hlY2svY3JlYXRpb24gbmVlZGVkPwotICAgICAgICAgICAgaWYgKG1vZGVsQWRhcHRlciA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtb2RlbEFkYXB0ZXIgPSBuZXcgV1NETE1vZGVsQWRhcHRlcigpOwotICAgICAgICAgICAgICBkb21Eb2MuYWRkQWRhcHRlcihtb2RlbEFkYXB0ZXIpOwotICAgICAgICAgICAgICBtb2RlbEFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb21Eb2MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmaW5pdGlvbiA9IG1vZGVsQWRhcHRlci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIG1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzTGlua2FibGVBdHRyaWJ1dGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBib29sZWFuIGlzTGlua2FibGUgPSBzdXBlci5pc0xpbmthYmxlQXR0cmlidXRlKG5hbWUpfHwKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFKSB8fCAKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKSB8fCAKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKSB8fCAKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsgCi0gICAgcmV0dXJuIGlzTGlua2FibGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDIxZTcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5JUHJvZ3Jlc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5FeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC51dGlsLk1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnV0aWwuWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsQWRhcHRlciBpbXBsZW1lbnRzIElOb2RlQWRhcHRlcgotewotICBwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgTW9kZWxSZWNvbmNpbGVBZGFwdGVyIG1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbEFkYXB0ZXIuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihFbGVtZW50IGVsZW1lbnQsIERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb24oZG9jdW1lbnQpOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihmaW5hbCBEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIElET01Ob2RlIGRvbU5vZGUgPSAoSURPTU5vZGUpIGRvY3VtZW50OwotICAgICAgU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJibGFua1dTREwud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlmIChkb21Ob2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJhc2VMb2NhdGlvbiA9IGRvbU5vZGUuZ2V0TW9kZWwoKS5nZXRCYXNlTG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgICB7Ci0gICAgICAgIElET01Nb2RlbCBkb21Nb2RlbCA9ICgoSURPTU5vZGUpIGRvY3VtZW50KS5nZXRNb2RlbCgpOwotICAgICAgICBiYXNlTG9jYXRpb24gPSBkb21Nb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgICAgLy8gVE9ETy4uIC5yZXZpc3QgdGhlIGJlc3QgYXBwcm9hY2ggdG8gb2J0YWluIGEgVVJJIGZyb20gdGhlIFNTRSBtb2RlbAotICAgICAgLy8KLSAgICAgIFVSSSB1cmkgPSBudWxsOwotICAgICAgaWYgKGJhc2VMb2NhdGlvbi5zdGFydHNXaXRoKCIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoYmFzZUxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGJhc2VMb2NhdGlvbi5zdGFydHNXaXRoKCJodHRwIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZVVSSShiYXNlTG9jYXRpb24pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShiYXNlTG9jYXRpb24pOwotICAgICAgfQotICAgICAgZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgICBkZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSSh1cmkudG9TdHJpbmcoKSk7Ci0gICAgICBkZWZpbml0aW9uLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotICAgICAgV1NETFJlc291cmNlRmFjdG9yeUltcGwgcmVzb3VyY2VGYWN0b3J5ID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCk7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeS5jcmVhdGVSZXNvdXJjZSh1cmkpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuYWRkKHJlc291cmNlKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2V0TW9kaWZpZWQoZmFsc2UpOwotCi0gICAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgc2V0RWxlbWVudE9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIC8vIFVzZSB0aGUgYW5pbWF0ZWQgZmxhdm91ciBhcyB3ZSBkb24ndCBrbm93IGJlZm9yZWhhbmQgaG93IG1hbnkgdGlja3Mgd2UgbmVlZC4KLSAgICAgICAgICAvLyBUaGUgdGFzayBuYW1lIHdpbGwgYmUgZGlzcGxheWVkIGJ5IHRoZSBjb2RlIGluIFdTRExSZXNvdXJjZUltcGwgYW5kIFhTRFJlc291cmNlSW1wbC4KLSAgICAgICAgICAKLSAgICAgICAgICBtb25pdG9yLmJlZ2luVGFzaygiIiwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICAgICAgTWFwIGxvYWRPcHRpb25zID0gcmVzb3VyY2VTZXQuZ2V0TG9hZE9wdGlvbnMoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBsb2FkT3B0aW9ucy5wdXQoV1NETFJlc291cmNlSW1wbC5XU0RMX1BST0dSRVNTX01PTklUT1IsIG1vbml0b3IpOwotICAgICAgICAgIGxvYWRPcHRpb25zLnB1dChYU0RSZXNvdXJjZUltcGwuWFNEX1BST0dSRVNTX01PTklUT1IsIG1vbml0b3IpOwotICAgICAgICAgIAotICAgICAgICAgIGRlZmluaXRpb24uc2V0RWxlbWVudChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0gICAgICAgICAgKChEZWZpbml0aW9uSW1wbCkgZGVmaW5pdGlvbikucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgICAgICAgICAKLSAgICAgICAgICBsb2FkT3B0aW9ucy5yZW1vdmUoV1NETFJlc291cmNlSW1wbC5XU0RMX1BST0dSRVNTX01PTklUT1IpOwotICAgICAgICAgIGxvYWRPcHRpb25zLnJlbW92ZShYU0RSZXNvdXJjZUltcGwuWFNEX1BST0dSRVNTX01PTklUT1IpOwotICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICBJUHJvZ3Jlc3NTZXJ2aWNlIHByb2dyZXNzU2VydmljZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcHJvZ3Jlc3NTZXJ2aWNlLmJ1c3lDdXJzb3JXaGlsZShzZXRFbGVtZW50T3BlcmF0aW9uKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAKLSAgICAgIC8vIGF0dGFjaCBhbiBhZGFwdGVyIHRvIGtlZXAgdGhlIFdTREwgbW9kZWwgYW5kIERPTSBpbiBzeW5jCi0gICAgICAvLwotICAgICAgbW9kZWxSZWNvbmNpbGVBZGFwdGVyID0gbmV3IFdTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIoZG9jdW1lbnQsIGRlZmluaXRpb24pOwotICAgICAgZG9tTm9kZS5nZXRNb2RlbCgpLmFkZE1vZGVsU3RhdGVMaXN0ZW5lcihtb2RlbFJlY29uY2lsZUFkYXB0ZXIpOwotICAgICAgCi0gICAgICAvLyBUT0RPLi4uIENTIDogcmV2aXNpdCB0aGlzIGxpbmUKLSAgICAgIC8vIGN1cnJlbnRseSB0aGlzIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgJ3R5cGUnIHN5c3RlbSB3aXRoIHRoZSBkZWZpbml0aW9uCi0gICAgICAvLyBJIHN1c3BlY3QgdGhhdCB0aGlzIGNvdWxkIGJlIG1hZGUgYSB3aG9sZSBsb3QgbW9yZSBzaW1wbGUKLSAgICAgIC8vCi0gICAgICBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLnNldFR5cGVTeXN0ZW1Qcm92aWRlcihkZWZpbml0aW9uLCBuZXcgRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlcigpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBNb2RlbFJlY29uY2lsZUFkYXB0ZXIgZ2V0TW9kZWxSZWNvbmNpbGVBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBtb2RlbFJlY29uY2lsZUFkYXB0ZXI7Ci0gIH0gIAotICAKLSAgcHVibGljIHN0YXRpYyBXU0RMTW9kZWxBZGFwdGVyIGxvb2t1cE9yQ3JlYXRlTW9kZWxBZGFwdGVyKERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgV1NETE1vZGVsQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKLSAgICBpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJTm9kZU5vdGlmaWVyKQotICAgIHsKLSAgICAgIElOb2RlTm90aWZpZXIgbm90aWZpZXIgPSAoSU5vZGVOb3RpZmllcilkb2N1bWVudDsKLSAgICAgIGFkYXB0ZXIgPSAoV1NETE1vZGVsQWRhcHRlcilub3RpZmllci5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgaWYgKGFkYXB0ZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7ICAgICAgIAotICAgICAgICBub3RpZmllci5hZGRBZGFwdGVyKGFkYXB0ZXIpOyAgICAgICAgCi0gICAgICB9IAotICAgIH0gICAKLSAgICByZXR1cm4gYWRhcHRlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotICAgICAgRG9jdW1lbnQgZG9jID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyBpbnN0YW5jZW9mIElET01Eb2N1bWVudCkgewotICAgICAgICAgIElET01Eb2N1bWVudCBkb21Eb2N1bWVudCA9IChJRE9NRG9jdW1lbnQpZG9jOwotICAgICAgICAgIGRvbURvY3VtZW50LmdldE1vZGVsKCkucmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKGdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpKTsKLSAgICAgICAgICBkb21Eb2N1bWVudC5yZW1vdmVBZGFwdGVyKGdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpKTsKLSAgICAgICAgICBkb21Eb2N1bWVudC5yZW1vdmVBZGFwdGVyKHRoaXMpOyAgICAgICAgCi0gICAgICB9Ci0gICAgICBkZWZpbml0aW9uID0gbnVsbDsKLSAgICB9Ci0gICAgcmVzb3VyY2VTZXQgPSBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTdhOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExNb2RlbExvY2F0b3I7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgcHJvdGVjdGVkIEN1c3RvbVdTRExNb2RlbExvY2F0b3IgY3VzdG9tV1NETE1vZGVsTG9jYXRvciA9IG5ldyBDdXN0b21XU0RMTW9kZWxMb2NhdG9yKCk7Ci0gIAotICBjbGFzcyBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gIHsKLSAgICBwdWJsaWMgU3RyaW5nIHJlc29sdmVVUkkoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICAgIHsKLSAgICAgIHJldHVybiBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICAgIHsKLSAgICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIGN1c3RvbVdTRExNb2RlbExvY2F0b3I7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUXVlcnlFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxRdWVyeUV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2QxNjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxRdWVyeUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudGV4dC5YU0RNb2RlbFF1ZXJ5RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudXRpbC5UeXBlc0hlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsUXVlcnlFeHRlbnNpb24gZXh0ZW5kcyBYU0RNb2RlbFF1ZXJ5RXh0ZW5zaW9uCi17Ci0gIHB1YmxpYyBXU0RMTW9kZWxRdWVyeUV4dGVuc2lvbigpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUGFyZW50RWxlbWVudE1lc3NhZ2VSZWZlcmVuY2UoU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lKQotICB7Ci0gICAgcmV0dXJuIFdTRExDb25zdGFudHMuSU5QVVRfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKSB8fAotICAgICAgICBXU0RMQ29uc3RhbnRzLk9VVFBVVF9FTEVNRU5UX1RBRy5lcXVhbHMocGFyZW50RWxlbWVudE5hbWUpIHx8Ci0gICAgICAgIFdTRExDb25zdGFudHMuRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzTWVzc2FnZVJlZmVyZW5jZShTdHJpbmcgZWxlbWVudE5hbWUpCi0gIHsKLSAgICByZXR1cm4gU09BUENvbnN0YW50cy5CT0RZX0VMRU1FTlRfVEFHLmVxdWFscyhlbGVtZW50TmFtZSkgfHwKLSAgICAgIFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHLmVxdWFscyhlbGVtZW50TmFtZSkgfHwKLSAgICAgIFNPQVBDb25zdGFudHMuRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKGVsZW1lbnROYW1lKSB8fAotICAgICAgSFRUUENvbnN0YW50cy5VUkxfUkVQTEFDRU1FTlRfRUxFTUVOVF9UQUcuZXF1YWxzKGVsZW1lbnROYW1lKSB8fAotICAgICAgSFRUUENvbnN0YW50cy5VUkxfRU5DT0RFRF9FTEVNRU5UX1RBRy5lcXVhbHMoZWxlbWVudE5hbWUpOwotICB9Ci0gIAotICAKLSAgcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlQ2hpbGRFbGVtZW50KE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7ICAgIAotICAgIAotICAgIGlmIChwYXJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIHBhcmVudE5vZGU7Ci0gICAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWVzcGFjZVVSSSA9IHBhcmVudE5vZGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnROb2RlLmdldExvY2FsTmFtZSgpOwotICAgICAgLy8gb25seSBmaWx0ZXIgY2hpbGRyZW4gZm9yICdub24tc2NoZW1hJyBlbGVtZW50cwotICAgICAgLy8gICAKLSAgICAgIGlmICghV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSS5lcXVhbHMocGFyZW50RWxlbWVudE5hbWVzcGFjZVVSSSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsICYmIG5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIG5hbWVzcGFjZSBhcmUgb25lIHRoYXQgYWx3YXlzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGZvciBub3cgdGhpcyBpcyBoYXJkY29kZWQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBleGNsdWRlIHNvYXAtZW5jIGVsZW1lbnRzCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscyhXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gZWNsaXBzZSBhbGwgc2NoZW1hIGVsZW1lbnRzLCBleGNlcHQgZm9yICdzY2hlbWEnIHdpdGhpbiB3c2RsIHR5cGVzIGVsZW1lbnRzIAotICAgICAgICAgICAgICByZXN1bHQgPSBXU0RMQ29uc3RhbnRzLlRZUEVTX0VMRU1FTlRfVEFHLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZSkgJiYgWFNEQ29uc3RhbnRzLlNDSEVNQV9FTEVNRU5UX1RBRy5lcXVhbHMobmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gY3MgOiB0aGUgJ3JlcXVpcmVkJyBhdHRyaWJ1dGUgaXMgYnVybmVkIGludG8gV1NETCBzY2hlbWEgYXMgdGhlICdiYXNlJyBleHRlbnNpYmlsaXR5IGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gdGhlIFdUUCBXU0RMIHZhbGlkYXRvciBjb21wbGFpbnMgd2hlbiB0aGVzZSBhcmUgcHJlc2VudCBzbyB0aGlzIGxpbmUgZmlsdGVycyB0aGVtIG91dAotICAgICAgICAgICAgICAvLyBvZiB0aGUgY29udGVudCBhc3Npc3QgYW5kIGV4dGVuc2lvbiBkZXRhaWxzIHZpZXcuICBBcyBmYXIgYXMgSSBjYW4gdGVsbCBubyBvbmUgYWN0dWFsbHkgdXNlcyAnZW0KLSAgICAgICAgICAgICAgLy8gaW4gcHJhY3Rpc2UgLi4uIHNvIGZpbHRlcmluZyB0aGVtIG91dCBzaG91bGQgYmUgb2suICAKLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgLy8gVE9ETyAoY3MpIGhvdyBjb21lIHRoZSBzY2hlbWEgc2F5cyB0aGVpciBvayBidXQgdGhlIHZhbGlkYXRvciBkb2Vzbid0IGxpa2UgdGhlbT8KLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgcmVzdWx0ID0gIW5hbWUuZXF1YWxzKCJyZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gVE9ETy4uIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZW1vdmluZyB0aGUgIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgIC8vIHNob3VsZG4ndCB0aGlzIGJlIGEgTW9kZWxRdWVyeUV4dGVuc2lvbiBkZWZpbmVkIG9uIHRoZSBleHRlbnNpb24gbGFuZ3VhZ2VzPwotICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGZpbHRlciA9IChFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5KCkuZ2V0UHJvcGVydHkobmFtZXNwYWNlLCAiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmlsdGVyLmlzVmFsaWRDb250ZXh0KGVsZW1lbnQsIG5hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci5pc0FwcGxpY2FibGVDaGlsZEVsZW1lbnQocGFyZW50Tm9kZSwgbmFtZXNwYWNlLCBuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBdHRyaWJ1dGVWYWx1ZXMoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIGlmIChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChsb29rdXBPckNyZWF0ZURlZmluaXRpb24oZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpKTsKLSAgICAgIFN0cmluZyBjdXJyZW50RWxlbWVudE5hbWUgPSBlbGVtZW50LmdldExvY2FsTmFtZSgpOwotICAgICAgaWYgKGNoZWNrTmFtZShuYW1lLCBXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRNZXNzYWdlTmFtZXMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGVja05hbWUobmFtZSwgV1NETENvbnN0YW50cy5CSU5ESU5HX0FUVFJJQlVURSkpCi0gICAgICB7Ci0gICAgICAgIGxpc3QuYWRkQWxsKHV0aWwuZ2V0QmluZGluZ05hbWVzKCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY2hlY2tOYW1lKG5hbWUsIFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpKQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tOYW1lKGN1cnJlbnRFbGVtZW50TmFtZSwgV1NETENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHKSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkQWxsKHV0aWwuZ2V0UG9ydFR5cGVOYW1lcygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaGVja05hbWUoY3VycmVudEVsZW1lbnROYW1lLCBXU0RMQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcpKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRDb21wb25lbnROYW1lTGlzdCh0cnVlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGNoZWNrTmFtZShuYW1lLCBXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoZWNrTmFtZShjdXJyZW50RWxlbWVudE5hbWUsIFdTRExDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRykpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZEFsbCh1dGlsLmdldENvbXBvbmVudE5hbWVMaXN0KGZhbHNlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbbGlzdC5zaXplKCldOwotICAgICAgbGlzdC50b0FycmF5KHJlc3VsdCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIHN1cGVyLmdldEF0dHJpYnV0ZVZhbHVlcyhlbGVtZW50LCBuYW1lc3BhY2UsIG5hbWUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFhTRFNjaGVtYSBsb29rdXBPckNyZWF0ZVNjaGVtYUZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7ICAgICAgIAotICAgIHJldHVybiBsb29rdXBPckNyZWF0ZVNjaGVtYShlbGVtZW50KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgbG9va3VwT3JDcmVhdGVTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICB7ICAgCi0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbG9va3VwT3JDcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICBPYmplY3QgbyA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWZpbml0aW9uLCBlbGVtZW50KTsKLSAgICBpZiAobyBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgIHsKLSAgICAgIHNjaGVtYSA9ICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG8pLmdldFNjaGVtYSgpOwotICAgIH0gCi0gICAgcmV0dXJuIHNjaGVtYTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikKLSAgICB7Ci0gICAgICBJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gKElOb2RlTm90aWZpZXIpIGRvY3VtZW50OwotICAgICAgV1NETE1vZGVsQWRhcHRlciBhZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpIG5vdGlmaWVyLmdldEFkYXB0ZXJGb3IoV1NETE1vZGVsQWRhcHRlci5jbGFzcyk7Ci0gICAgICBpZiAoYWRhcHRlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBhZGFwdGVyID0gbmV3IFdTRExNb2RlbEFkYXB0ZXIoKTsKLSAgICAgICAgbm90aWZpZXIuYWRkQWRhcHRlcihhZGFwdGVyKTsKLSAgICAgICAgYWRhcHRlci5jcmVhdGVEZWZpbml0aW9uKGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICAgIGRlZmluaXRpb24gPSBhZGFwdGVyLmdldERlZmluaXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIAotICBwcm90ZWN0ZWQgVHlwZXNIZWxwZXIgZ2V0VHlwZXNIZWxwZXIoZmluYWwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGxvb2t1cE9yQ3JlYXRlU2NoZW1hKGVsZW1lbnQpOwotICAgIHJldHVybiBuZXcgVHlwZXNIZWxwZXIoc2NoZW1hKQotICAgIHsKLSAgICAgIC8vIFRPRE8uLi4gaXQgc2VlbXMgYXMgdGhvdWdoIHRoZSBtb2RlbCBpcyBub3QgY29ycmVjdGx5Ci0gICAgICAvLyBtYWludGluZyB0aGUgbGlzdCBvZiBwcmVmaXhlcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UKLSAgICAgIC8vIG11c3QgYmUgYSBidWchCi0gICAgICAvLwotICAgICAgcHJvdGVjdGVkIExpc3QgZ2V0UHJlZml4ZXNGb3JOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gc3VwZXIuZ2V0UHJlZml4ZXNGb3JOYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbG9va3VwT3JDcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKG5zICE9IG51bGwgJiYgbnMuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghbGlzdC5jb250YWlucyhwcmVmaXgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQocHJlZml4KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgIH0gICAgICAgCi0gICAgfTsgICAgCi0gIH0gCi0gIAotICAvKiogICAKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDFkNjQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnV0aWwuTW9kZWxSZWNvbmNpbGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1jbGFzcyBXU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyIGV4dGVuZHMgTW9kZWxSZWNvbmNpbGVBZGFwdGVyCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotICBwdWJsaWMgV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlcihEb2N1bWVudCBkb2N1bWVudCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7ICAgICAgICAgICAKLSAgICBzdXBlcihkb2N1bWVudCk7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfSAKLQotICAvLyBUaGlzIG1ldGhvZCBpcyBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCAnYmFkJyBkb2N1bWVudHMgdGhhdCBoYXBwZW4gCi0gIC8vIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSByb290IGVsZW1lbnQuICBJdCBwaWNrcyBvZiB0aGUgZmlyc3QgJ21hdGNoaW5nJyBlbGVtZW50LgotICAvLwotICAvLyBUT0RPIChjcykgd2h5IGFyZW4ndCB3ZSBjYWxsaW5nIHRoaXMgZnJvbSB0aGUgV1NETE1vZGVsQWRhcHRlciB3aGVuIHRoZSBtb2RlbCBpcyBpbml0aWFsaXplZD8KLSAgLy8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldERlZmluaXRpb25FbGVtZW50KERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IG51bGw7ICAgIAotICAgIGZvciAoTm9kZSBub2RlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpbm9kZTsKLSAgICAgICAgaWYgKFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoZWxlbWVudCkgPT0gV1NETENvbnN0YW50cy5ERUZJTklUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uRWxlbWVudDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTm9kZUNoYW5nZWQoTm9kZSBub2RlKQotICB7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgIHsKLSAgICAgIHJlY29uY2lsZU1vZGVsT2JqZWN0Rm9yRWxlbWVudCgoRWxlbWVudClub2RlKTsgICAgICAKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIERvY3VtZW50KQotICAgIHsKLSAgICAgIC8vIFRoZSBkb2N1bWVudCBjaGFuZ2VkIHNvIHdlIG1heSBuZWVkIHRvIGZpeCB1cCB0aGUgCi0gICAgICAvLyBkZWZpbml0aW9uJ3Mgcm9vdCBlbGVtZW50Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IChEb2N1bWVudClub2RlOyAgICAKLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBnZXREZWZpbml0aW9uRWxlbWVudChkb2N1bWVudCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCAmJiBkZWZpbml0aW9uRWxlbWVudCAhPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKSkKLSAgICAgIHsgICAKLSAgICAgICAgLy8gaGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBuZXcgJ2RlZmluaXRpb24nIGVsZW1lbnQgd2FzIGFkZGVkCi0gICAgICAgIC8vKGUuZy4gdGhlIGZpbGUgd2FzIHRvdGFsbHkgYmxhbmsgYW5kIHRoZW4gd2UgdHlwZSBpbiB0aGUgcm9vdCBlbGVtZW50KSAgICAgICAgCi0gICAgICAgIC8vIFNlZSBCdWcgNTM2NgotICAgICAgICAvLwotICAgICAgICBpZiAoZGVmaW5pdGlvbkVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTRExDb25zdGFudHMuREVGSU5JVElPTl9FTEVNRU5UX1RBRykpICAgICAgICAgCi0gICAgICAgIHsgIAotICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqKiogU2V0dGluZyBuZXcgZGVmaW5pdGlvbiIpOwotICAgICAgICAgIGRlZmluaXRpb24uc2V0RWxlbWVudChkZWZpbml0aW9uRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAKLSAgICAgIGVsc2UgaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0gICAgICB7ICAgICAgIAotICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGRlZmluaXRpb24gZWxlbWVudCdzIGNvbnRlbnQgaGFzIGNoYW5nZWQKLSAgICAgICAgLy8gCi0gICAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikuZWxlbWVudENoYW5nZWQoZGVmaW5pdGlvbkVsZW1lbnQpOwotICAgICAgfSAgICAgIAotICAgICAgZWxzZSBpZiAoZGVmaW5pdGlvbkVsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgdGhlcmUncyBubyBkZWZpbml0aW9uIGVsZW1lbnQgY2xlYXIgb3V0IHRoZSBXU0RMCi0gICAgICAgIC8vCi0gICAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikucmVtb3ZlQWxsKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgcmVtb3ZlQWxsKCkgY2FsbCBkb2VzIG5vdCByZW1vdmUgbmFtZXNwYWNlcyBhcyB3ZWxsIGFuZCB0aGUgbW9kZWwKLSAgICAgICAgLy8gZG9lcyBub3QgcmVjb25jaWxlIHdlbGwgaW4gdGhpcyBjYXNlLiBBbHNvIHJlc2V0IHRoZSBkZWZpbml0aW9uIG5hbWUgYW5kIHRhcmdldAotICAgICAgICAvLyBuYW1lc3BhY2UuCi0gICAgICAgIAotICAgICAgICBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgICBkZWZpbml0aW9uLnNldFFOYW1lKG51bGwpOwotICAgICAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZShudWxsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJlc2V0IHRoZSBkb2N1bWVudCBiZWNhdXNlIHJlbW92ZUFsbCgpIHNldHMgdGhlIGRvY3VtZW50IHRvIG51bGwgYXMgd2VsbC4KLSAgICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0gICAgICB9Ci0gICAgfSAgICAgICAgIAotICB9Ci0gICAgICAgCi0gIHByaXZhdGUgdm9pZCByZWNvbmNpbGVNb2RlbE9iamVjdEZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgT2JqZWN0IG1vZGVsT2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KGRlZmluaXRpb24sIGVsZW1lbnQpOyAgCi0gICAgaWYgKG1vZGVsT2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKQotICAgICAgewotICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgZWUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKW1vZGVsT2JqZWN0OwotICAgICAgICAoKFhTRFNjaGVtYUltcGwpZWUuZ2V0U2NoZW1hKCkpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOwotICAgICAgICBlZS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsgICAgICAgICAgICAKLSAgICAgIH0gICAKLSAgICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCltb2RlbE9iamVjdCkuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgICAgewotICAgICAgICAoKFhTRENvbmNyZXRlQ29tcG9uZW50KW1vZGVsT2JqZWN0KS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsgICAgICAgIAotICAgICAgfSAgCi0gICAgfSAgICAgCi0gIH0gIAotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlTW9kZWxPYmplY3RGb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgaW5kZXgpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICByZWNvbmNpbGVNb2RlbE9iamVjdEZvckVsZW1lbnQoZWxlbWVudCk7Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgbW9kZWxEaXJ0eVN0YXRlQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBib29sZWFuIGlzRGlydHkpCi0gIHsKLSAgICBpZiAoIWlzRGlydHkpCi0gICAgeyAgCi0gICAgICAvLyBjcyA6IEF0IHRoaXMgdGltZSAod2hlbiBhIHNhdmUgb2NjdXJzKSBpdCdzIGEgZ29vZCBvcHBvcnR1bml0eQotICAgICAgLy8gdG8gdXBkYXRlIHRoZSBtb2RlbCB0byBlbnN1cmUgaXQncyBpbiBzeW5jIHdpdGggdGhlIHNvdXJjZS4gCi0gICAgICAvLyBUaGF0IHdheSBpZiB0aGUgaW5jcmVtZW50YWwgc3luYyBiZXR3ZWVuIERPTSBhbmQgbW9kZWwgaGFzIGdvdHRlbgotICAgICAgLy8gdGhlIG1vZGVsIG91dCBvZiB3aGFjayB3ZSdsbCBiZSBhYmxlIHRvIHB1dCB0aGluZ3MgcmlnaHQgYXQgdGhpcyBwb2ludC4KLSAgICAgIC8vICAgCi0gICAgICAvLyBUT0RPIChjcykgbmVlZCB0byBkbyBtb3JlIHRvIGVuc3VyZSBtb2RlbCBpcyBzeW5jJ2QgdXAgcHJvcGVybHkKLSAgICAgIAotICAgICAgLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIGEgbm9uIFVJIHRocmVhZCBkdXJpbmcgcmVmYWN0b3JpbmcgYW5kIHRoZSAKLSAgICAgIC8vIG5vdGlmaWNhdGlvbnMgaXQgdHJpZ2dlcnMgdmlhIG1vZGVsIGFkYXB0ZXJzIHRvIGVkaXQgcGFydHMgd2lsbCBjYXVzZSAKLSAgICAgIC8vIGludmFsaWQgdGhyZWFkIGV4Y2VwdGlvbnMuCi0gICAgICAKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgICB7Ci0gICAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Db21wb25lbnRSZWZlcmVuY2VVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDNhYTQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Db21wb25lbnRSZWZlcmVuY2VVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSVR5cGVTeXN0ZW1Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBDb21wb25lbnRSZWZlcmVuY2VVdGlsCi17Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIHJvb3REZWZpbml0aW9uOwotCi0gIHB1YmxpYyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKERlZmluaXRpb24gcm9vdERlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLnJvb3REZWZpbml0aW9uID0gcm9vdERlZmluaXRpb247Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgYSwgU3RyaW5nIGIpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChhICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gYS5lcXVhbHMoYikgfHwgKGEubGVuZ3RoKCkgPT0gMCAmJiBiID09IG51bGwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzdWx0ID0gKGIgPT0gbnVsbCB8fCBiLmxlbmd0aCgpID09IDApOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRXF1YWxJbnB1dE5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbiwgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBJbnB1dCBvcGVyYXRpb25JbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ09wZXJhdGlvbklucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCk7Ci0KLSAgICBpZiAob3BlcmF0aW9uSW5wdXQgIT0gbnVsbCAmJiBiaW5kaW5nT3BlcmF0aW9uSW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpc0VxdWFsKG9wZXJhdGlvbklucHV0LmdldE5hbWUoKSwgYmluZGluZ09wZXJhdGlvbklucHV0LmdldE5hbWUoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG9wZXJhdGlvbklucHV0ID09IG51bGwgJiYgYmluZGluZ09wZXJhdGlvbklucHV0ID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0VxdWFsT3V0cHV0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uLCBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIE91dHB1dCBvcGVyYXRpb25PdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ09wZXJhdGlvbk91dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLQotICAgIGlmIChvcGVyYXRpb25PdXRwdXQgIT0gbnVsbCAmJiBiaW5kaW5nT3BlcmF0aW9uT3V0cHV0ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gaXNFcXVhbChvcGVyYXRpb25PdXRwdXQuZ2V0TmFtZSgpLCBiaW5kaW5nT3BlcmF0aW9uT3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG9wZXJhdGlvbk91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPcGVyYXRpb25PdXRwdXQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzTWF0Y2hpbmdCaW5kaW5nKE9wZXJhdGlvbiBvcGVyYXRpb24sIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIHJldHVybiBpc0VxdWFsKG9wZXJhdGlvbi5nZXROYW1lKCksIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKTsgLyogJiYKLSAgICAJCQkgICBpc0VxdWFsSW5wdXROYW1lKG9wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbikgJiYKLSAgICAJCQkgICBpc0VxdWFsT3V0cHV0TmFtZShvcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24pOyovCi0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQb3J0c0ZvclBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldFNlcnZpY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgai5uZXh0KCk7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiBiaW5kaW5nLmdldEVQb3J0VHlwZSgpID09IHBvcnRUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQocG9ydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQb3J0c0ZvckJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldFNlcnZpY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgai5uZXh0KCk7Ci0gICAgICAgIGlmIChwb3J0LmdldEVCaW5kaW5nKCkgPT0gYmluZGluZykKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKHBvcnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0KLSAgICBpZiAob3BlcmF0aW9uTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gZ2V0RW5jbG9zaW5nUG9ydFR5cGUob3BlcmF0aW9uKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEJpbmRpbmdzKHBvcnRUeXBlKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb24sIGJpbmRpbmcpOwotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24sIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGogPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBqLm5leHQoKTsKLSAgICAgIGlmIChpc01hdGNoaW5nQmluZGluZyhvcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nSW5wdXQgZ2V0QmluZGluZ0lucHV0KElucHV0IGlucHV0LCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKChPcGVyYXRpb24pIGlucHV0LmVDb250YWluZXIoKSwgYmluZGluZyk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCA/IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3V0cHV0IGdldEJpbmRpbmdPdXRwdXQoT3V0cHV0IG91dHB1dCwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbigoT3BlcmF0aW9uKSBvdXRwdXQuZUNvbnRhaW5lcigpLCBiaW5kaW5nKTsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbiAhPSBudWxsID8gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgZ2V0QmluZGluZ0ZhdWx0KEZhdWx0IGZhdWx0LCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgcmVzdWx0ID0gbnVsbDsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKChPcGVyYXRpb24pIGZhdWx0LmVDb250YWluZXIoKSwgYmluZGluZyk7Ci0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoQmluZGluZ0ZhdWx0KSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdChmYXVsdE5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIEVPYmplY3QgZ2V0QmluZGluZ09iamVjdChFT2JqZWN0IGludGVyZmFjZU9iamVjdCwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgRU9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRCaW5kaW5nSW5wdXQoKElucHV0KSBpbnRlcmZhY2VPYmplY3QsIGJpbmRpbmcpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZ2V0QmluZGluZ091dHB1dCgoT3V0cHV0KSBpbnRlcmZhY2VPYmplY3QsIGJpbmRpbmcpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRCaW5kaW5nRmF1bHQoKEZhdWx0KSBpbnRlcmZhY2VPYmplY3QsIGJpbmRpbmcpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBPcGVyYXRpb24pCi0gICAgewotICAgICAgcmVzdWx0ID0gZ2V0QmluZGluZ09wZXJhdGlvbigoT3BlcmF0aW9uKSBpbnRlcmZhY2VPYmplY3QsIGJpbmRpbmcpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBiaW5kaW5nOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ0lucHV0cyhJbnB1dCBpbnB1dCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBMaXN0IG9wZXJhdGlvbnMgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucygoT3BlcmF0aW9uKSBpbnB1dC5lQ29udGFpbmVyKCkpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPdXRwdXRzKE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG91dHB1dC5lQ29udGFpbmVyKCk7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IGdldEJpbmRpbmdPcGVyYXRpb25zKG9wZXJhdGlvbik7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGkubmV4dCgpOwotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdGYXVsdHMoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGZhdWx0LmVDb250YWluZXIoKTsKLSAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gZ2V0QmluZGluZ09wZXJhdGlvbnMob3BlcmF0aW9uKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgaS5uZXh0KCk7Ci0gICAgICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KGZhdWx0TmFtZSk7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdGYXVsdCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIFBvcnRUeXBlIGdldEVuY2xvc2luZ1BvcnRUeXBlKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gKFBvcnRUeXBlKSBvcGVyYXRpb24uZUNvbnRhaW5lcigpOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ3MoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIHJldHVybiBnZXRCaW5kaW5ncyhnZXRFbmNsb3NpbmdQb3J0VHlwZShvcGVyYXRpb24pKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdzKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBqLm5leHQoKTsKLSAgICAgICAgaWYgKHBvcnRUeXBlID09IG51bGwgfHwgYmluZGluZy5nZXRQb3J0VHlwZSgpID09IHBvcnRUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoYmluZGluZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nc1dpdGhvdXRPcGVyYXRpb24oUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBvcGVyYXRpb25OYW1lKQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKG9wZXJhdGlvbk5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IGJpbmRpbmdzID0gZ2V0QmluZGluZ3MocG9ydFR5cGUpOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaS5uZXh0KCk7Ci0gICAgICAgIGJvb2xlYW4gaGFzTmFtZSA9IGZhbHNlOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGoubmV4dCgpOwotICAgICAgICAgIGlmIChvcGVyYXRpb25OYW1lLmVxdWFscyhiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaGFzTmFtZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXNOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0LmFkZChiaW5kaW5nKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdzKChQb3J0VHlwZSkgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nTmFtZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEJpbmRpbmdzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgIGxpc3QuYWRkQWxsKGdldFByZWZpeGVkTmFtZXMoYmluZGluZy5nZXRRTmFtZSgpKSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UG9ydFR5cGVOYW1lcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBqLm5leHQoKTsKLSAgICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhwb3J0VHlwZS5nZXRRTmFtZSgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0U2VydmljZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGxpc3QuYWRkQWxsKGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRUeXBlcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgaWYgKGRlZmluaXRpb24uZ2V0RVR5cGVzKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGQoZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0TWVzc2FnZU5hbWVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgai5uZXh0KCk7Ci0gICAgICAgIGxpc3QuYWRkQWxsKGdldFByZWZpeGVkTmFtZXMobWVzc2FnZS5nZXRRTmFtZSgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGFkZERlZmluaXRpb24ocm9vdERlZmluaXRpb24sIGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkIC0tIHdlIHNob3VsZCBhbHdheXMgdXNlIGdldFByZWZpeGVkTmFtZXMKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4ZWROYW1lKFFOYW1lIHFuYW1lKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwcmVmaXggPSByb290RGVmaW5pdGlvbi5nZXRQcmVmaXgocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgaWYgKHByZWZpeCAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lID0gcHJlZml4ICsgIjoiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQcmVmaXhlZE5hbWVzKFFOYW1lIHFuYW1lKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIE1hcCBtYXAgPSByb290RGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoU3RyaW5nKSBtYXAuZ2V0KHByZWZpeCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCAmJiBuYW1lc3BhY2UuZXF1YWxzKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuYW1lID0gcHJlZml4Lmxlbmd0aCgpID4gMCA/IHByZWZpeCArICI6IiArIHFuYW1lLmdldExvY2FsUGFydCgpIDogIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgICAgIHFuYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgIGxpc3QuYWRkKG5hbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24sIExpc3QgbGlzdCkKLSAgewotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBJbXBvcnRJbXBsIHRoZUltcG9ydCA9IChJbXBvcnRJbXBsKSBpLm5leHQoKTsKLSAgICAgICAgaWYgKHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpICE9IG51bGwgJiYgIXRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpLmVuZHNXaXRoKCJ4c2QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgdGhlSW1wb3J0LmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwkgCi0gICAgICAgICAgRGVmaW5pdGlvbiBpbXBvcnRlZERlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgdGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgICAgICAgaWYgKGltcG9ydGVkRGVmaW5pdGlvbiAhPSBudWxsICYmICFsaXN0LmNvbnRhaW5zKGltcG9ydGVkRGVmaW5pdGlvbikpCi0gICAgICAgICAgewotICAgICAgICAgICAgYWRkRGVmaW5pdGlvbihpbXBvcnRlZERlZmluaXRpb24sIGxpc3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnRUeXBlUmVmZXJlbmNlKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChiaW5kaW5nKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFBvcnRUeXBlUmVmZXJlbmNlKEJpbmRpbmcgYmluZGluZywgU3RyaW5nIHBvcnRUeXBlKQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSwgcG9ydFR5cGUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJpbmRpbmdSZWZlcmVuY2UoUG9ydCBwb3J0KQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBvcnQpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5CSU5ESU5HX0FUVFJJQlVURSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROYW1lKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChiaW5kaW5nKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRQb3J0VHlwZVJlZmVyZW5jZVFOYW1lKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFBvcnRUeXBlUmVmZXJlbmNlKGJpbmRpbmcpOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5jcmVhdGVRTmFtZShkZWZpbml0aW9uLCBwcmVmaXhlZE5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRCaW5kaW5nUmVmZXJlbmNlUU5hbWUoUG9ydCBwb3J0KQotICB7Ci0gICAgUU5hbWUgcmVzdWx0ID0gbnVsbDsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0QmluZGluZ1JlZmVyZW5jZShwb3J0KTsKLSAgICBpZiAocHJlZml4ZWROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gV1NETEVkaXRvclV0aWwuY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgcHJlZml4ZWROYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2UoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihpbnB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlUmVmZXJlbmNlKE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihvdXRwdXQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZVJlZmVyZW5jZShGYXVsdCBmYXVsdCkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKGZhdWx0KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lKElucHV0IGlucHV0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZUhlbHBlcihpbnB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZUhlbHBlcihvdXRwdXQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2VIZWxwZXIoV1NETEVsZW1lbnQgbykKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWVIZWxwZXIoV1NETEVsZW1lbnQgbykKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gby5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldE1lc3NhZ2VSZWZlcmVuY2VIZWxwZXIobyk7Ci0gICAgaWYgKHByZWZpeGVkTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IFdTRExFZGl0b3JVdGlsLmNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlUG9ydFR5cGVSZWZlcmVuY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldFBvcnRUeXBlUmVmZXJlbmNlUU5hbWUoYmluZGluZyk7Ci0KLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKHFuYW1lICE9IG51bGwpID8gKFBvcnRUeXBlKSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHFuYW1lKSA6IG51bGw7Ci0KLSAgICAgIGlmIChiaW5kaW5nLmdldFBvcnRUeXBlKCkgIT0gcG9ydFR5cGUpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuc2V0UG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVCaW5kaW5nUmVmZXJlbmNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgai5uZXh0KCk7Ci0gICAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRCaW5kaW5nUmVmZXJlbmNlUU5hbWUocG9ydCk7Ci0KLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKHFuYW1lICE9IG51bGwpID8gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSkgOiBudWxsOwotCi0gICAgICAgIGlmIChwb3J0LmdldEJpbmRpbmcoKSAhPSBiaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZU1lc3NhZ2VSZWZlcmVuY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIC8vIGZvciBlYWNoIHBvcnQgdHlwZQotICAgIC8vCi0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGkubmV4dCgpOwotCi0gICAgICAvLyBmb3IgZWFjaCBvcGVyYXRpb24KLSAgICAgIC8vCi0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGoubmV4dCgpOwotCi0gICAgICAgIC8vIGhhbmRsZSBJbnB1dAotICAgICAgICAvLwotICAgICAgICBJbnB1dCBpbnB1dCA9IChJbnB1dCkgb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShpbnB1dCk7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKHFuYW1lICE9IG51bGwpID8gKE1lc3NhZ2UpIGRlZmluaXRpb24uZ2V0TWVzc2FnZShxbmFtZSkgOiBudWxsOwotICAgICAgICAgIGlmIChpbnB1dC5nZXRNZXNzYWdlKCkgIT0gbWVzc2FnZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGhhbmRsZSBPdXRwdXQKLSAgICAgICAgLy8KLSAgICAgICAgT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpIG9wZXJhdGlvbi5nZXRPdXRwdXQoKTsKLSAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShvdXRwdXQpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChxbmFtZSAhPSBudWxsKSA/IChNZXNzYWdlKSBkZWZpbml0aW9uLmdldE1lc3NhZ2UocW5hbWUpIDogbnVsbDsKLSAgICAgICAgICBpZiAob3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBtZXNzYWdlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGhhbmRsZSBGYXVsdHMKLSAgICAgICAgLy8KLSAgICAgICAgZm9yIChJdGVyYXRvciBrID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBrLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgay5uZXh0KCk7Ci0KLSAgICAgICAgICBRTmFtZSBxbmFtZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lKGZhdWx0KTsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAocW5hbWUgIT0gbnVsbCkgPyAoTWVzc2FnZSkgZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHFuYW1lKSA6IG51bGw7Ci0gICAgICAgICAgaWYgKGZhdWx0LmdldE1lc3NhZ2UoKSAhPSBtZXNzYWdlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZVNjaGVtYVJlZmVyZW5jZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBqLm5leHQoKTsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpcGFydCkuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbiBnZXRPcGVyYXRpb24oUG9ydFR5cGUgcG9ydFR5cGUsIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgIGlmIChpc01hdGNoaW5nQmluZGluZyhvcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBvcGVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZU9wZXJhdGlvblJlZmVyZW5jZShCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tcHV0ZU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBpZiAob3BlcmF0aW9uICE9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRDb21wb25lbnROYW1lTGlzdChib29sZWFuIGlzVHlwZSkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgICBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlciA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKHJvb3REZWZpbml0aW9uKTsKLSAgICBpZiAodHlwZVN5c3RlbVByb3ZpZGVyICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gaXNUeXBlID8gdHlwZVN5c3RlbVByb3ZpZGVyLmdldEF2YWlsYWJsZVR5cGVOYW1lcyhyb290RGVmaW5pdGlvbiwgMCkgOiB0eXBlU3lzdGVtUHJvdmlkZXIuZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKHJvb3REZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRDb21wb25lbnROYW1lTGlzdChQYXJ0IHBhcnQsIGJvb2xlYW4gaXNUeXBlKQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIElUeXBlU3lzdGVtUHJvdmlkZXIgdHlwZVN5c3RlbVByb3ZpZGVyID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRUeXBlU3lzdGVtUHJvdmlkZXIoZGVmaW5pdGlvbik7Ci0gICAgaWYgKHR5cGVTeXN0ZW1Qcm92aWRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzVHlwZSA/IHR5cGVTeXN0ZW1Qcm92aWRlci5nZXRBdmFpbGFibGVUeXBlTmFtZXMoZGVmaW5pdGlvbiwgMCkgOiB0eXBlU3lzdGVtUHJvdmlkZXIuZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKGRlZmluaXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHlwZShQYXJ0IHBhcnQpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnQoKTsKLSAgICByZXR1cm4gIWVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFydENvbXBvbmVudFJlZmVyZW5jZShQYXJ0IHBhcnQpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldENvbXBvbmVudFJlZmVyZW5jZShQYXJ0IHBhcnQsIGJvb2xlYW4gaXNUeXBlLCBTdHJpbmcgY29tcG9uZW50TmFtZSkKLSAgewotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwYXJ0KTsKLSAgICBTdHJpbmcgbmV3QXR0cmlidXRlID0gaXNUeXBlID8gV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSA6IFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEU7Ci0gICAgU3RyaW5nIG9sZEF0dHJpYnV0ZSA9IGlzVHlwZSA/IFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUgOiBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFOwotICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG9sZEF0dHJpYnV0ZSk7Ci0KLSAgICBTdHJpbmcgdmFsdWUgPSBjb21wb25lbnROYW1lICE9IG51bGwgPyBjb21wb25lbnROYW1lIDogZWxlbWVudC5nZXRBdHRyaWJ1dGUobmV3QXR0cmlidXRlKTsKLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChpc1R5cGUpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB4c2RQcmVmaXggPSBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRQcmVmaXgoV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICAgIHZhbHVlID0gInN0cmluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKHhzZFByZWZpeCAhPSBudWxsICYmIHhzZFByZWZpeC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICB2YWx1ZSA9IHhzZFByZWZpeCArICI6IiArIHZhbHVlOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gZ2V0Q29tcG9uZW50TmFtZUxpc3QocGFydCwgaXNUeXBlKTsKLSAgICAgICAgdmFsdWUgPSBsaXN0LnNpemUoKSA+IDAgPyAoU3RyaW5nKSBsaXN0LmdldCgwKSA6ICJzb21lLWVsZW1lbnQtbmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmV3QXR0cmlidXRlLCB2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbiBjb21wdXRlT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nT3BlcmF0aW9uLmVDb250YWluZXIoKTsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgYmluZGluZy5nZXRQb3J0VHlwZSgpOwotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldE9wZXJhdGlvbihwb3J0VHlwZSwgYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIElucHV0IGNvbXB1dGVJbnB1dChCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0KQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbXB1dGVPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pIGJpbmRpbmdJbnB1dC5lQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBvcGVyYXRpb24gIT0gbnVsbCA/IG9wZXJhdGlvbi5nZXRFSW5wdXQoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIE91dHB1dCBjb21wdXRlT3V0cHV0KEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBjb21wdXRlT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3V0cHV0LmVDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbiAhPSBudWxsID8gb3BlcmF0aW9uLmdldEVPdXRwdXQoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEZhdWx0IGNvbXB1dGVGYXVsdChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICB7Ci0gICAgRmF1bHQgcmVzdWx0ID0gbnVsbDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tcHV0ZU9wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ0ZhdWx0LmVDb250YWluZXIoKSk7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaS5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChmYXVsdE5hbWUgIT0gbnVsbCAmJiBmYXVsdE5hbWUuZXF1YWxzKGJpbmRpbmdGYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhcnRSZWZlcmVuY2VWYWx1ZShQYXJ0IHBhcnQpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocGFydCk7Ci0gICAgU3RyaW5nIHZhbHVlID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKSkKLSAgICAgIHsgICAgICAJCQotICAgICAgICB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSkpCi0gICAgICB7ICAKLSAgICAgICAgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKTsKLSAgICAgIH0gICAgICAgICAKLSAgICB9ICAKLSAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogIiI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbihFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25Db250ZW50KQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgTm9kZSBwYXJlbnQgPSBiaW5kaW5nT3BlcmF0aW9uQ29udGVudC5nZXRQYXJlbnROb2RlKCk7Ci0gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChyb290RGVmaW5pdGlvbiwgKEVsZW1lbnQpIHBhcmVudCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKSBvYmplY3QpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2UgZ2V0QmluZGluZ09wZXJhdGlvbklucHV0TWVzc2FnZShFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25Db250ZW50KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uQ29udGVudCk7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyBNZXNzYWdlIGdldEJpbmRpbmdPcGVyYXRpb25PdXRwdXRNZXNzYWdlKEVsZW1lbnQgYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb25Db250ZW50KTsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBvdXRwdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb21wdXRlUmVsYXRpdmVVUkkoSUZpbGUgcmVmZXJlbmNlZExvY2F0aW9uLCBJRmlsZSBiYXNlTG9jYXRpb24sIGJvb2xlYW4gZW5hYmxlSUVTdHlsZVJlZmVyZW5jZXMpCi0gIHsKLSAgICAvLyBUT0RPLi4uIHdlIG5lZWQgc29tZSBleHRlbnNpb24gdG8gYWxsb3cgSUUgZm9sa3MgdG8gcGx1Z2luIGxvZ2ljIHRvIGNyZWF0ZSBhbiAnSUUnIHN0eWxlIHBhdGgKLSAgICAvLyBUT0RPLi4uIGNvbnNpZGVyIHVzaW5nIFVSSSBjbGFzcyBpbiBFTUYgCi0gICAgcmV0dXJuIFVSSUhlbHBlci5nZXRSZWxhdGl2ZVVSSShyZWZlcmVuY2VkTG9jYXRpb24uZ2V0TG9jYXRpb24oKSwgYmFzZUxvY2F0aW9uLmdldExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb21wdXRlUmVsYXRpdmVVUkkoU3RyaW5nIHJlZmVyZW5jZWRMb2NhdGlvbiwgU3RyaW5nIGJhc2VMb2NhdGlvbiwgYm9vbGVhbiBlbmFibGVJRVN0eWxlUmVmZXJlbmNlcykKLSAgewotICAgIC8vIFRPRE8uLi4gd2UgbmVlZCBzb21lIGV4dGVuc2lvbiB0byBhbGxvdyBJRSBmb2xrcyB0byBwbHVnaW4gbG9naWMgdG8gY3JlYXRlIGFuICdJRScgc3R5bGUgcGF0aAotICAgIC8vIFRPRE8uLi4gY29uc2lkZXIgdXNpbmcgVVJJIGNsYXNzIGluIEVNRiAKLSAgICByZXR1cm4gVVJJSGVscGVyLmdldFJlbGF0aXZlVVJJKHJlZmVyZW5jZWRMb2NhdGlvbiwgYmFzZUxvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NyZWF0ZVdTRExFbGVtZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIzNGZkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRGYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkSW1wb3J0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE1lc3NhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE9wZXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFBhcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFBvcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFBvcnRUeXBlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRTZXJ2aWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuQ01Eb2N1bWVudE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5DTURvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIENyZWF0ZVdTRExFbGVtZW50SGVscGVyIHsKLQkvLyBDb25zdGFudHMgdXNlZCBmb3IgZ2V0dGluZyBQYXJ0IGluZm9ybWF0aW9uCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04gPSAiRUxFTUVOVF9ERUNMQVJBVElPTiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OICAgICA9ICJUWVBFX0RFRklOSVRJT04iOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBzaG91bGQgYmUgc2V0IGlmIGEgbmFtZSBvdGhlciB0aGFuIHRoZSBjb21wdXRlZCBuYW1lIGlzIHRvIGJlIHVzZWQuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2VydmljZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBvcnROYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBiaW5kaW5nTmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgcG9ydFR5cGVOYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBvcGVyYXRpb25OYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBpbnB1dE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG91dHB1dE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZhdWx0TmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgbWVzc2FnZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwb3J0VHlwZU5hbWVzcGFjZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwb3J0VHlwZVByZWZpeDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwb3J0VHlwZUxvY2F0aW9uOwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID0gUEFSVF9JTkZPX1RZUEVfREVGSU5JVElPTjsKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gQ1JFQVRFX0RPV05fVE9fUEFSVCA9IHRydWU7Ci0JcHVibGljIHN0YXRpYyBib29sZWFuIElNUE9SVF9QT1JUX1RZUEVfRlJPTV9BTk9USEVSX0ZJTEUgPSBmYWxzZTsJCi0JCQotCS8qKgotCSAqIEFkZHMgYWRkaXRpb25hbCBuYW1lc3BhY2VzIHJlcXVpcmVkIGJ5IGNvbnRlbnRHZW5lcmF0b3IgdG8gZGVmaW5pdGlvbi4KLQkgKiBBbHNvIHJlbG9hZHMgdGhlIGNvbnRlbnQgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIGRlZmluaXRpb24gaWYgbmVlZGVkCi0JICogYWZ0ZXIgYWRkaW5nIG5ldyBuYW1lc3BhY2VzLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50R2VuZXJhdG9yCi0JICogQHBhcmFtIGRlZmluaXRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkUmVxdWlyZWROYW1lc3BhY2VzKENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCWlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwgJiYgZGVmaW5pdGlvbiAhPSBudWxsKSB7Ci0JCQkvLyBmbGFnIGluZGljYXRpbmcgaWYgY29udGVudCBtb2RlbCBuZWVkcyB0byBiZSByZWxvYWRlZAotCQkJYm9vbGVhbiByZWxvYWRDb250ZW50TW9kZWwgPSBmYWxzZTsKLQotCQkJU3RyaW5nW10gbmFtZXNwYWNlTmFtZXMgPSBjb250ZW50R2VuZXJhdG9yLmdldFJlcXVpcmVkTmFtZXNwYWNlcygpOwotCQkJU3RyaW5nW10gcHJlZmVycmVkUHJlZml4ZXMgPSBuZXcgU3RyaW5nW25hbWVzcGFjZU5hbWVzLmxlbmd0aF07Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJcHJlZmVycmVkUHJlZml4ZXNbaW5kZXhdID0gY29udGVudEdlbmVyYXRvci5nZXRQcmVmZXJyZWROYW1lc3BhY2VQcmVmaXgobmFtZXNwYWNlTmFtZXNbaW5kZXhdKTsKLQkJCX0KLQotCQkJTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzcGFjZU5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IG5hbWVzcGFjZU5hbWVzW2ldOwotCQkJCWlmICghbWFwLmNvbnRhaW5zVmFsdWUobmFtZXNwYWNlKSkgewotCQkJCQlTdHJpbmcgcHJlZml4ID0gKGkgPCBwcmVmZXJyZWRQcmVmaXhlcy5sZW5ndGgpID8gcHJlZmVycmVkUHJlZml4ZXNbaV0gOiAicDAiOyAvLyROT04tTkxTLTEkCi0JCQkJCWlmIChtYXAuY29udGFpbnNLZXkocHJlZml4KSkgewotCQkJCQkJcHJlZml4ID0gY29tcHV0ZVVuaXF1ZVByZWZpeCgicCIsIG1hcCk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShwcmVmaXgsIG5hbWVzcGFjZSk7Ci0KLQkJCQkJLy8gYSBuYW1lc3BhY2Ugd2FzIGFkZGVkIHNvIHVwZGF0ZSByZWxvYWRDb250ZW50TW9kZWwgZmxhZwotCQkJCQlyZWxvYWRDb250ZW50TW9kZWwgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKHJlbG9hZENvbnRlbnRNb2RlbCkgewotCQkJCXJlbG9hZENvbnRlbnRNb2RlbChkZWZpbml0aW9uKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJlbG9hZHMgY29udGVudCBtb2RlbCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGRlZmluaXRpb24KLQkgKiAKLQkgKiBAcGFyYW0gZGVmaW5pdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcmVsb2FkQ29udGVudE1vZGVsKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLQkJaWYgKGRvY3VtZW50ICE9IG51bGwpIHsKLQkJCU1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkoZG9jdW1lbnQpOwotCQkJaWYgKG1vZGVsUXVlcnkgIT0gbnVsbCkgewotCQkJCUNNRG9jdW1lbnRNYW5hZ2VyIG1hbmFnZXIgPSBtb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCQkJaWYgKG1hbmFnZXIgIT0gbnVsbCkgewotCQkJCQkvLyBjaGVjayBpZiBjdXJyZW50bHkgYXN5bmMgbG9hZGluZwotCQkJCQlib29sZWFuIG9sZFZhbHVlID0gbWFuYWdlci5nZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCk7Ci0JCQkJCS8vIGRvIG5vdCBhc3luYyB0byBnZXQgaW1tZWRpYXRlIGRvY3VtZW50IGxvYWRpbmcKLQkJCQkJaWYgKG9sZFZhbHVlKQotCQkJCQkJbWFuYWdlci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwgZmFsc2UpOwotCi0JCQkJCS8vIGxvYWQgY29udGVudCBtb2RlbCBhZ2FpbgotCQkJCQlDTURvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBDTURvY3VtZW50TG9hZGVyKGRvY3VtZW50LCBtb2RlbFF1ZXJ5KTsKLQkJCQkJbG9hZGVyLmxvYWRDTURvY3VtZW50cygpOwotCi0JCQkJCS8vIHJlc2V0IGJhY2sgdG8gb2xkIHZhbHVlIGp1c3QgaW4gY2FzZQotCQkJCQlpZiAob2xkVmFsdWUpCi0JCQkJCQltYW5hZ2VyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBvbGRWYWx1ZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZXMgYSB1bmlxdWUgcHJlZml4IGdpdmVuIHRoZSBsaXN0IG9mIGV4aXN0aW5nIHByZWZpeGVzIGluIHRhYmxlCi0JICogYW5kIHN0YXJ0aW5nIHdpdGggYSBiYXNlIHByZWZpeCBvZiBiYXNlCi0JICogCi0JICogQHBhcmFtIGJhc2UKLQkgKiBAcGFyYW0gdGFibGUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlxdWVQcmVmaXgoU3RyaW5nIGJhc2UsIE1hcCB0YWJsZSkgewotCQlpbnQgaSA9IDA7Ci0JCVN0cmluZyBwcmVmaXggPSBiYXNlOwotCQl3aGlsZSAodHJ1ZSkgewotCQkJaWYgKCF0YWJsZS5jb250YWluc0tleShwcmVmaXgpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwcmVmaXggPSBiYXNlICsgaTsKLQkJCQlpKys7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHByZWZpeDsKLQl9Ci0JCi0vKgotICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGNyZWF0ZXMgdGhlICdzcGVjaWZpZWQnIChieSBjYWxsaW5nIGEgY2VydGFpbiBtZXRob2QpIFdTRExFbGVtZW50Ci0gKiBhbmQgaXQncyAnY2hpbGRyZW4nIGFsbCB0aGUgd2F5IHRvIHRoZSBQb3J0VHlwZSBsZXZlbC4KLSAqLwotCXB1YmxpYyBzdGF0aWMgU2VydmljZSBjcmVhdGVTZXJ2aWNlKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlpZiAoc2VydmljZU5hbWUgPT0gbnVsbCB8fCBzZXJ2aWNlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJc2VydmljZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVNlcnZpY2VOYW1lKGRlZmluaXRpb24pOwkJCi0JCQotCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5wb3J0VHlwZU5hbWUgPSBzZXJ2aWNlTmFtZTsKLQkJCi0JICAgIEFkZFNlcnZpY2VDb21tYW5kIGFkZFNlcnZpY2UgPSBuZXcgQWRkU2VydmljZUNvbW1hbmQoZGVmaW5pdGlvbiwgc2VydmljZU5hbWUsIGZhbHNlKTsKLQkgICAgYWRkU2VydmljZS5ydW4oKTsKLQkgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGFkZFNlcnZpY2UuZ2V0V1NETEVsZW1lbnQoKTsKLQkgICAgQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlUG9ydChzZXJ2aWNlKTsKLSAgCQkKLQkgICAgcmV0dXJuIHNlcnZpY2U7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgUG9ydCBjcmVhdGVQb3J0KFNlcnZpY2Ugc2VydmljZSkgewotCQlpZiAocG9ydE5hbWUgPT0gbnVsbCB8fCBwb3J0TmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJcG9ydE5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnROYW1lKHNlcnZpY2UsIG51bGwpOwotCQkKLQkgICAgQWRkUG9ydENvbW1hbmQgYWRkUG9ydCA9IG5ldyBBZGRQb3J0Q29tbWFuZChzZXJ2aWNlLCBwb3J0TmFtZSk7Ci0JICAgIGFkZFBvcnQucnVuKCk7Ci0JICAgIFBvcnQgcG9ydCA9IChQb3J0KSBhZGRQb3J0LmdldFdTRExFbGVtZW50KCk7Ci0JCUJpbmRpbmcgYmluZGluZyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZUJpbmRpbmcocG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIHBvcnQpOwotCi0JCXBvcnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLQkJCi0JICAgIHJldHVybiBwb3J0OwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIEJpbmRpbmcgY3JlYXRlQmluZGluZyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFBvcnQgcG9ydCkgewotCQliaW5kaW5nTmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotCQlpZiAoYmluZGluZ05hbWUgPT0gbnVsbCB8fCBiaW5kaW5nTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJYmluZGluZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZUJpbmRpbmdOYW1lKGRlZmluaXRpb24sIG51bGwpOwotCQkKLQkJQWRkQmluZGluZ0NvbW1hbmQgYWRkQmluZGluZyA9IG5ldyBBZGRCaW5kaW5nQ29tbWFuZChkZWZpbml0aW9uLCBiaW5kaW5nTmFtZSk7Ci0JCWFkZEJpbmRpbmcucnVuKCk7Ci0JCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBhZGRCaW5kaW5nLmdldFdTRExFbGVtZW50KCk7Ci0JCVBvcnRUeXBlIHBvcnRUeXBlID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlUG9ydFR5cGUoYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCi0JCWJpbmRpbmcuc2V0UG9ydFR5cGUocG9ydFR5cGUpOwotCQkKLQkJcmV0dXJuIGJpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgUG9ydFR5cGUgaW1wb3J0UG9ydFR5cGUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCUFkZEltcG9ydENvbW1hbmQgYWRkSW1wb3J0Q29tbWFuZCA9IG5ldyBBZGRJbXBvcnRDb21tYW5kKGRlZmluaXRpb24sIHBvcnRUeXBlTmFtZXNwYWNlLCBwb3J0VHlwZUxvY2F0aW9uKTsKLQkJYWRkSW1wb3J0Q29tbWFuZC5ydW4oKTsKLQkJV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBhZGRJbXBvcnRDb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCWlmICh3c2RsRWxlbWVudCBpbnN0YW5jZW9mIEltcG9ydEltcGwpIHsKLQkJCUltcG9ydEltcGwgaW1wb3J0SW1wbCA9IChJbXBvcnRJbXBsKSB3c2RsRWxlbWVudDsKLQkJCWltcG9ydEltcGwuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0JCQlEZWZpbml0aW9uIGltcG9ydGVkRGVmaW5pdGlvbiA9IGltcG9ydEltcGwuZ2V0RURlZmluaXRpb24oKTsKLQkJCWlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCkgewotCQkJCWRlZmluaXRpb24uYWRkTmFtZXNwYWNlKHBvcnRUeXBlUHJlZml4LCBwb3J0VHlwZU5hbWVzcGFjZSk7Ci0JCQkJRUxpc3QgcG9ydFR5cGVzID0gaW1wb3J0ZWREZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLQkJCQlpZiAocG9ydFR5cGVzLnNpemUoKSA+IDApIHsKLQkJCQkJcmV0dXJuIChQb3J0VHlwZSkgcG9ydFR5cGVzLmdldCgwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFBvcnRUeXBlIGNyZWF0ZVBvcnRUeXBlKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0JCWlmIChJTVBPUlRfUE9SVF9UWVBFX0ZST01fQU5PVEhFUl9GSUxFKSB7Ci0JCQlwb3J0VHlwZSA9IGltcG9ydFBvcnRUeXBlKGRlZmluaXRpb24pOwotCQl9Ci0JCWVsc2UgewotCQkgIGlmIChwb3J0VHlwZU5hbWUgPT0gbnVsbCB8fCBwb3J0VHlwZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkgICAgcG9ydFR5cGVOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbiwgIlBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJICB9Ci0KLQkJICBBZGRQb3J0VHlwZUNvbW1hbmQgYWRkUG9ydFR5cGVDb21tYW5kID0gbmV3IEFkZFBvcnRUeXBlQ29tbWFuZChkZWZpbml0aW9uLCBwb3J0VHlwZU5hbWUpOwotCQkgIGFkZFBvcnRUeXBlQ29tbWFuZC5ydW4oKTsKLQkJICBwb3J0VHlwZSA9IChQb3J0VHlwZSkgYWRkUG9ydFR5cGVDb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0KLQkJICBpZiAoQ1JFQVRFX0RPV05fVE9fUEFSVCkgewotCQkgICAgQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlT3BlcmF0aW9uKHBvcnRUeXBlKTsKLQkJICB9Ci0JCX0KLQkJCi0JCXJldHVybiBwb3J0VHlwZTsKLQl9Ci0KLQkKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY3JlYXRlcyB0aGUgJ3NwZWNpZmllZCcgKGJ5IGNhbGxpbmcgYSBjZXJ0YWluIG1ldGhvZCkgV1NETEVsZW1lbnQKLSAqIGFuZCBpdCdzICdjaGlsZHJlbicgYWxsIHRoZSB3YXkgdG8gdGhlIFBhcnQgbGV2ZWwuCi0gKi8JCi0gIAlwdWJsaWMgc3RhdGljIE9wZXJhdGlvbiBjcmVhdGVPcGVyYXRpb24oUG9ydFR5cGUgcG9ydFR5cGUpIHsKLSAgCQlpZiAob3BlcmF0aW9uTmFtZSA9PSBudWxsIHx8IG9wZXJhdGlvbk5hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLSAgCQkJb3BlcmF0aW9uTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlT3BlcmF0aW9uTmFtZShwb3J0VHlwZSk7Ci0gIAkJCi0JCUFkZE9wZXJhdGlvbkNvbW1hbmQgYWN0aW9uID0gbmV3IEFkZE9wZXJhdGlvbkNvbW1hbmQocG9ydFR5cGUsIG9wZXJhdGlvbk5hbWUpOwotCQlhY3Rpb24ucnVuKCk7Ci0JCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBhY3Rpb24uZ2V0V1NETEVsZW1lbnQoKTsKLQkJCi0JCWludCBzdHlsZSA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLSAgCQlpZiAoUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPT0gUEFSVF9JTkZPX1RZUEVfREVGSU5JVElPTikgewotICAJCQlzdHlsZSA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfU0lNUExFVFlQRTsKLSAgCQl9Ci0gIAkJZWxzZSBpZiAoUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPT0gUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04pIHsKLSAgCQkJc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0vLyAgCQkJc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlQ7Ci0gIAkJfQotICAJCQotCQlBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgaW5wdXRDb21tYW5kID0gbmV3IEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHN0eWxlKTsKLQkJaW5wdXRDb21tYW5kLnJ1bigpOwotCQlBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIG91dHB1dENvbW1hbmQgPSBuZXcgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHN0eWxlKTsKLQkJb3V0cHV0Q29tbWFuZC5ydW4oKTsKLQkJb3BlcmF0aW9uLnNldFN0eWxlKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSk7Ci0KLQkJcmV0dXJuIG9wZXJhdGlvbjsKLSAgCX0KLQotICAJcHVibGljIHN0YXRpYyBJbnB1dCBjcmVhdGVJbnB1dChQb3J0VHlwZSBwb3J0VHlwZSwgT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIGlucHV0TmFtZSkgewotICAJCWlmIChpbnB1dE5hbWUgPT0gbnVsbCB8fCBpbnB1dE5hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLSAgCSAgCQlpbnB1dE5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZUlucHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpOyAvLyROT04tTkxTLTEkCi0gIAkJCi0gIAkJQWRkSW5wdXRDb21tYW5kIGFjdGlvbiA9IG5ldyBBZGRJbnB1dENvbW1hbmQob3BlcmF0aW9uLCBpbnB1dE5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlJbnB1dCBpbnB1dCA9IChJbnB1dCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7IAotICAJCU1lc3NhZ2UgbWVzcyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZU1lc3NhZ2UoaW5wdXQpOwotICAJCWlucHV0LnNldE1lc3NhZ2UobWVzcyk7Ci0gIAkJCSAgCQkKLSAgCQlyZXR1cm4gaW5wdXQ7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBPdXRwdXQgY3JlYXRlT3V0cHV0KFBvcnRUeXBlIHBvcnRUeXBlLCBPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gIAkJaWYgKG91dHB1dE5hbWUgPT0gbnVsbCB8fCBvdXRwdXROYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkgIAkJb3V0cHV0TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlT3V0cHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpOyAvLyROT04tTkxTLTEkCi0gIAkJCi0gIAkJQWRkT3V0cHV0Q29tbWFuZCBhY3Rpb24gPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG91dHB1dE5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlPdXRwdXQgb3V0cHV0ID0gKE91dHB1dCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAkJTWVzc2FnZSBtZXNzID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlTWVzc2FnZShvdXRwdXQpOwotICAJCW91dHB1dC5zZXRNZXNzYWdlKG1lc3MpOwkKLSAgCQkJICAJCQotICAJCXJldHVybiBvdXRwdXQ7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBGYXVsdCBjcmVhdGVGYXVsdChPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gIAkJaWYgKGZhdWx0TmFtZSA9PSBudWxsIHx8IGZhdWx0TmFtZS50cmltKCkuZXF1YWxzKCIiKSkgIC8vJE5PTi1OTFMtMSQKLQkgIAkJZmF1bHROYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVGYXVsdE5hbWUob3BlcmF0aW9uKTsKLSAgCQkKLSAgCQlBZGRGYXVsdENvbW1hbmQgYWN0aW9uID0gbmV3IEFkZEZhdWx0Q29tbWFuZChvcGVyYXRpb24sIGZhdWx0TmFtZSk7Ci0gIAkJYWN0aW9uLnJ1bigpOwotICAJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBhY3Rpb24uZ2V0V1NETEVsZW1lbnQoKTsKLSAgCQlNZXNzYWdlIG1lc3MgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVNZXNzYWdlKGZhdWx0KTsKLSAgCQlmYXVsdC5zZXRNZXNzYWdlKG1lc3MpOwotICAJCSAJCQotICAJCXJldHVybiBmYXVsdDsKLSAgCX0KLSAgCQkJICAJCi0gIAlwdWJsaWMgc3RhdGljIE1lc3NhZ2UgY3JlYXRlTWVzc2FnZShNZXNzYWdlUmVmZXJlbmNlIGlvZikgewotICAJCWlmIChtZXNzYWdlTmFtZSA9PSBudWxsIHx8IG1lc3NhZ2VOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkgIAkJbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGlvZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGlvZik7Ci0vLwkgIAkJbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZE1lc3NhZ2VOYW1lKGlvZi5nZXROYW1lKCkpOwotICAJCQotICAJCURlZmluaXRpb24gZGVmID0gaW9mLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgCQlBZGRNZXNzYWdlQ29tbWFuZCBhY3Rpb24gPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQoZGVmLCBtZXNzYWdlTmFtZSk7Ci0gIAkJYWN0aW9uLnJ1bigpOwotICAJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBhY3Rpb24uZ2V0V1NETEVsZW1lbnQoKTsKLSAgCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQYXJ0KG1lc3NhZ2UpOwotICAJCUVsZW1lbnQgcGFyZW50Tm9kZSA9IG1lc3NhZ2UuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkgCi0gICAgICB7Ci0JCSAgICAvLyBmb3JtYXQgc2VsZWN0ZWQgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvclhNTCA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKXBhcmVudE5vZGUpOwotICAgICAgfQotICAJCQotICAJCW1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgCQlyZXR1cm4gbWVzc2FnZTsKLSAgCX0KLSAgCQkJICAJCi0gIAlwdWJsaWMgc3RhdGljIFBhcnQgY3JlYXRlUGFydChNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgCQlEZWZpbml0aW9uIGRlZiA9IG1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQYXJ0TmFtZShtZXNzYWdlLCBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAJCUFkZFBhcnRDb21tYW5kIGFjdGlvbiA9IG51bGw7Ci0gIAkJCi0gIAkJaWYgKFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID09IFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT04pIHsKLSAgCQkJYWN0aW9uID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIG5hbWUsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAJCX0KLSAgCQllbHNlIGlmIChQQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9PSBQQVJUX0lORk9fRUxFTUVOVF9ERUNMQVJBVElPTikgeyAgCQkJCi0gIAkJCS8vYWN0aW9uID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIG5hbWUsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciLCB0cnVlKTsKLSAgCQkJU3RyaW5nIGVsZW1lbnROYW1lID0gZ2V0TmV3TmFtZUhlbHBlcihuYW1lLCBkZWYsIGZhbHNlKTsKLSAgCQkJQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZCBlbGVtZW50QWN0aW9uID0gbmV3IEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQoZGVmLCBlbGVtZW50TmFtZSk7Ci0gIAkJCWVsZW1lbnRBY3Rpb24ucnVuKCk7Ci0gIAkJCWFjdGlvbiA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBuYW1lLCBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGVsZW1lbnROYW1lLCBmYWxzZSk7Ci0gIAkJfQotCi0gIAkJYWN0aW9uLnJ1bigpOwotICAJCQotICAJCXJldHVybiAoUGFydCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAl9CQotCi0gIAkvKgotICAJICogVXNlZCB0byBkZXRlcm1pbmUgYSBuYW1lIGZvciBhbiBFbGVtZW50Ci0gIAkgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TmV3TmFtZUhlbHBlcihTdHJpbmcgYmFzZSwgRGVmaW5pdGlvbiBkZWYsIGJvb2xlYW4gaXNUeXBlKQotICAgIHsgCi0gICAgICBTdHJpbmcgbmFtZSA9IGJhc2U7ICAgIAotICAgICAgaW50IGNvdW50ID0gMDsKLQotICAgICAgLy8gVWdseS4uLi4gIFJlZG8gdGhpcy4uLgotICAgICAgLy8gR2V0IGEgbGlzdCBvZiBFbGVtZW50cy4uLgotICAgICAgTGlzdCBlbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgICBpZiAoZGVmLmdldEVUeXBlcygpICE9IG51bGwpIHsKLSAgICAgIAlMaXN0IHhzZHNMaXN0ID0gZGVmLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIAlpZiAoeHNkc0xpc3QgIT0gbnVsbCkgewotICAgICAgCQlJdGVyYXRvciB4c2RzSXRlcmF0b3IgPSB4c2RzTGlzdC5pdGVyYXRvcigpOwotICAgICAgCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB4c2RzSXRlcmF0b3IubmV4dCgpOwotICAgICAgCQlYU0RTY2hlbWEgc2NoZW1hID0geHNkRWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICAgIAkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0gICAgICAJCQllbGVtZW50TGlzdCA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCk7Ci0gICAgICAJCX0KLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChlbGVtZW50TGlzdCAhPSBudWxsKSB7Ci0gICAgICAJaW50IGluZGV4ID0gMDsKLSAgICAgIAl3aGlsZSAoaW5kZXggPCBlbGVtZW50TGlzdC5zaXplKCkpIHsKLSAgICAgIAkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnRMaXN0LmdldChpbmRleCk7Ci0gICAgICAJCQotICAgICAgCQlpZiAobmFtZS5lcXVhbHMoZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKSkpIHsKLSAgICAgIAkJCWNvdW50Kys7Ci0gICAgICAJCQluYW1lID0gbmFtZSArIGNvdW50OwotICAgICAgCQkJaW5kZXggPSAwOwotICAgICAgCQl9Ci0gICAgICAJCWVsc2UgewotICAgICAgCQkJaW5kZXgrKzsKLSAgICAgIAkJfQotICAgICAgCX0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gIAkvKgotICAJICogUmV0dXJuIHRoZSB0eXBlIG9mIFBhcnQgdGhpcyBXU0RMRWxlbWVudCBzaG91bGQgaGF2ZSAoRWxlbWVudCB2cyBUeXBlKS4gIFRvIGRldGVybWluZSB0aGlzLCB3ZSBmaWx0ZXIgdXAgdG8gdGhlICdwYXJlbnQnIFBvcnRUeXBlCi0gIAkgKiBhbmQgZ28gZG93biB0byB0aGUgZmlyc3QgUGFydCB3ZSBlbmNvdW50ZXIgYW5kIGNoZWNrIHRoZSB0eXBlIGl0IGhhcy4gIElmIHRoaXMgZmFpbHMsIGRlZmF1bHQgdG8gVHlwZS4KLSAgCSAqLwotICAJICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0SW5mbyhXU0RMRWxlbWVudCBlbGVtZW50KSB7Ci0gIAkgIAlTdHJpbmcgcGFydEluZm8gPSBudWxsOwotICAJICAJCi0gIAkgIAlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gIAkgIAkJcGFydEluZm8gPSBnZXRQYXJ0SW5mbygoUG9ydFR5cGUpIGVsZW1lbnQpOwotICAJICAJfQotICAJICAJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgewotICAJICAJCXBhcnRJbmZvID0gZ2V0UGFydEluZm8oKChXU0RMRWxlbWVudEltcGwpIGVsZW1lbnQpLmdldENvbnRhaW5lcigpKTsKLSAgCSAgCX0KLSAgCSAgCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBNZXNzYWdlUmVmZXJlbmNlSW1wbCkgewotICAJICAJCXBhcnRJbmZvID0gZ2V0UGFydEluZm8oKChXU0RMRWxlbWVudEltcGwpIGVsZW1lbnQpLmdldENvbnRhaW5lcigpKTsKLSAgCSAgCX0KLQotICAJICAJaWYgKHBhcnRJbmZvID09IG51bGwpIHsKLSAgCSAgCQlwYXJ0SW5mbyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0gIAkgIAl9Ci0gIAkgIAkKLSAgCSAgCXJldHVybiBwYXJ0SW5mbzsgIAkKLSAgCSAgfQotICAJICAKLSAgCSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFBhcnRJbmZvKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gIAkgIAlTdHJpbmcgcGFydEluZm8gPSBudWxsOwotICAJICAJCi0gIAkgIAlpZiAocG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpICE9IG51bGwpIHsKLSAgCSAgCQlJdGVyYXRvciBvcGVyYXRpb25JdCA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAJICAJCXdoaWxlIChvcGVyYXRpb25JdC5oYXNOZXh0KCkpIHsKLSAgCSAgCQkJT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BlcmF0aW9uSXQubmV4dCgpOwotCi0gIAkgIAkJCWlmIChvcC5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IGdldE1lc3NhZ2VSZWZQYXJ0SW5mbygoTWVzc2FnZVJlZmVyZW5jZUltcGwpIG9wLmdldEVJbnB1dCgpKTsKLSAgCSAgCQkJfQotICAJICAJCi0gIAkgIAkJCWlmIChwYXJ0SW5mbyA9PSBudWxsICYmIG9wLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IGdldE1lc3NhZ2VSZWZQYXJ0SW5mbygoTWVzc2FnZVJlZmVyZW5jZUltcGwpIG9wLmdldEVPdXRwdXQoKSk7Ci0gIAkgIAkJCX0KLSAgCSAgCQotICAJICAJCQlpZiAob3AuZ2V0RUZhdWx0cygpICE9IG51bGwpIHsKLSAgCSAgCQkJCUl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgCSAgCQkJCXdoaWxlIChwYXJ0SW5mbyA9PSBudWxsICYmIGZhdWx0SXQuaGFzTmV4dCgpKSB7Ci0gIAkgIAkJCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGZhdWx0SXQubmV4dCgpOwotICAJICAJCQkJCXBhcnRJbmZvID0gZ2V0TWVzc2FnZVJlZlBhcnRJbmZvKChNZXNzYWdlUmVmZXJlbmNlSW1wbCkgZmF1bHQpOwotICAJICAJCQkJfQotICAJICAJCQl9Ci0gIAkgIAkgIAkgIAkKLSAgCSAgCQkJaWYgKHBhcnRJbmZvICE9IG51bGwpCi0gIAkgIAkJCQlicmVhazsKLSAgCSAgCQl9Ci0gIAkgIAl9Ci0KLSAgCSAgCXJldHVybiBwYXJ0SW5mbzsKLSAgCSAgfQotICAJICAKLSAgCSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZQYXJ0SW5mbyhNZXNzYWdlUmVmZXJlbmNlSW1wbCBpb2YpIHsKLSAgCSAgCVN0cmluZyBwYXJ0SW5mbyA9IG51bGw7Ci0gIAkgIAkKLSAgCSAgCWlmIChpb2YuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsICYmIGlvZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpICE9IG51bGwpIHsKLSAgCSAgCQlJdGVyYXRvciBwYXJ0SXQgPSBpb2YuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotICAJICAJCi0gIAkgIAkJd2hpbGUgKHBhcnRJbmZvID09IG51bGwgJiYgcGFydEl0Lmhhc05leHQoKSkgewotICAJICAJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFydEl0Lm5leHQoKTsKLSAgCSAgCQkKLSAgCSAgCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0gIAkgIAkJCX0KLSAgCSAgCQkJZWxzZSBpZiAocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAJICAJCQl9Ci0gIAkgIAkJfQotICAJICAJfQotICAJICAJCi0gIAkgIAlyZXR1cm4gcGFydEluZm87Ci0gIAkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9OYW1lVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05hbWVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYzY1ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05hbWVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lVXRpbAotewotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgZmF1bHQgaW4gdGhlIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlRmF1bHROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgCXJldHVybiBidWlsZFVuaXF1ZUZhdWx0TmFtZShvcGVyYXRpb24sICJOZXdGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlRmF1bHROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBiYXNlTmFtZSkgewotICAJaWYgKGJhc2VOYW1lID09IG51bGwpCi0gIAkJYmFzZU5hbWUgPSAiTmV3RmF1bHQiOyAvLyROT04tTkxTLTEkCi0gIAkKLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkRmF1bHROYW1lcyhvcGVyYXRpb24pOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBpbnB1dCBpbiB0aGUgcG9ydFR5cGUuICBSZXR1cm5lZCBuYW1lIHdpbGwgYmUgb2YgdGhlIGZvcm06Ci0gICAqIDxvcGVyYXRpb25OYW1lPiArIDxlbmRpbmc+IFsrIHVuaXF1ZSBJbnRlZ2VyXQotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVJbnB1dE5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBvcGVyYXRpb25OYW1lLCBTdHJpbmcgZW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIFN0cmluZyBjYW5kaWRhdGUgPSBvcGVyYXRpb25OYW1lICsgZW5kaW5nOwotCi0gICAgaW50IGkgPSAwOwotCi0gICAgLy8gbG9vcCB1bnRpbCB3ZSBmaW5kIGEgdW5pcXVlIG5hbWUgKHRoZSBuYW1lIHdpbGwgY29uc2lzdCBvZiB0aGUgb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGFuIGludGVnZXIpCi0gICAgd2hpbGUgKG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHVuaXF1ZSA9IHRydWU7Ci0KLSAgICAgIC8vIGRldGVybWluZSBpZiB0aGlzIGNvbWJpbmF0aW9uIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcG9ydHR5cGUKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKSAmJiB1bmlxdWU7KQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gY3VycmVudCA9IChPcGVyYXRpb24pIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gVE9ETyA6IHBvcnQgY2hlY2sKLSAgICAgICAgLy8gb2xkICBpZihjdXJyZW50LmlzU2V0RUlucHV0KCkgJiYgY3VycmVudC5nZXRFSW5wdXQoKS5pc1NldE5hbWUoKSkgewotICAgICAgICBpZiAoY3VycmVudC5nZXRFSW5wdXQoKSAhPSBudWxsICYmIGN1cnJlbnQuZ2V0RUlucHV0KCkuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY3VycmVudC5nZXRFSW5wdXQoKS5nZXROYW1lKCkuZXF1YWxzKGNhbmRpZGF0ZSkpCi0gICAgICAgICAgICB1bmlxdWUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHVuaXF1ZSkKLSAgICAgICAgbmFtZSA9IGNhbmRpZGF0ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgY2FuZGlkYXRlID0gb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGk7Ci0gICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIG1lc3NhZ2UgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGJhc2VOYW1lKQotICB7Ci0gICAgaWYgKGJhc2VOYW1lID09IG51bGwpCi0gICAgewotICAgICAgYmFzZU5hbWUgPSAiTmV3TWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZE1lc3NhZ2VOYW1lcyhkZWZpbml0aW9uKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgb3BlcmF0aW9uIGluIHRoZSBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgCXJldHVybiBidWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUocG9ydFR5cGUsICJOZXdPcGVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAJaWYgKGJhc2VOYW1lID09IG51bGwpIHsKLSAgCQliYXNlTmFtZSA9ICJOZXdPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gIAl9Ci0KLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkT3BlcmF0aW9uTmFtZXMocG9ydFR5cGUpOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBvdXRwdXQgaW4gdGhlIHBvcnRUeXBlLiAgUmV0dXJuZWQgbmFtZSB3aWxsIGJlIG9mIHRoZSBmb3JtOgotICAgKiA8b3BlcmF0aW9uTmFtZT4gKyA8ZW5kaW5nPiBbKyB1bmlxdWUgSW50ZWdlcl0KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlT3V0cHV0TmFtZShQb3J0VHlwZSBwb3J0VHlwZSwgU3RyaW5nIG9wZXJhdGlvbk5hbWUsIFN0cmluZyBlbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZSA9IG9wZXJhdGlvbk5hbWUgKyBlbmRpbmc7Ci0KLSAgICBpbnQgaSA9IDA7Ci0KLSAgICAvLyBsb29wIHVudGlsIHdlIGZpbmQgYSB1bmlxdWUgbmFtZSAodGhlIG5hbWUgd2lsbCBjb25zaXN0IG9mIHRoZSBvcGVyYXRpb25OYW1lICsgZW5kaW5nICsgYW4gaW50ZWdlcikKLSAgICB3aGlsZSAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJvb2xlYW4gdW5pcXVlID0gdHJ1ZTsKLQotICAgICAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgY29tYmluYXRpb24gaXMgdW5pcXVlIHdpdGhpbiB0aGUgY3VycmVudCBwb3J0dHlwZQkJCQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpICYmIHVuaXF1ZTspCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBjdXJyZW50ID0gKE9wZXJhdGlvbikgaXQubmV4dCgpOwotICAgICAgICAvLyBUT0RPOiBwb3J0IGNoZWNrCi0gICAgICAgIC8vIG9sZAkJCQlpZihjdXJyZW50LmlzU2V0RU91dHB1dCgpICYmIGN1cnJlbnQuZ2V0RU91dHB1dCgpLmlzU2V0TmFtZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50LmdldEVPdXRwdXQoKSAhPSBudWxsICYmIGN1cnJlbnQuZ2V0RU91dHB1dCgpLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGN1cnJlbnQuZ2V0RU91dHB1dCgpLmdldE5hbWUoKS5lcXVhbHMoY2FuZGlkYXRlKSkKLSAgICAgICAgICAgIHVuaXF1ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAodW5pcXVlKQotICAgICAgICBuYW1lID0gY2FuZGlkYXRlOwotICAgICAgZWxzZQotICAgICAgICBjYW5kaWRhdGUgPSBvcGVyYXRpb25OYW1lICsgZW5kaW5nICsgaTsKLSAgICAgIGkrKzsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgcGFydCBpbiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlUGFydE5hbWUoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZFBhcnROYW1lcyhtZXNzYWdlKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKCJOZXdQYXJ0IiwgbmFtZXMpOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlUGFydE5hbWUoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgCWlmIChiYXNlTmFtZSA9PSBudWxsKQotICAJewotICAJCWJhc2VOYW1lID0gIk5ld1BhcnQiOyAvLyROT04tTkxTLTEkCi0gIAl9Ci0gIAkKLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkUGFydE5hbWVzKG1lc3NhZ2UpOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBwb3J0IHR5cGUgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVBvcnRUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld1BvcnRUeXBlIjsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIExpc3QgbmFtZXMgPSBnZXRVc2VkUG9ydFR5cGVOYW1lcyhkZWZpbml0aW9uKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRVbmlxdWVOYW1lSGVscGVyKFN0cmluZyBiYXNlTmFtZSwgTGlzdCBuYW1lcykKLSAgewotICAgIGludCBpID0gMDsKLQotICAgIFN0cmluZyBuYW1lID0gYmFzZU5hbWU7Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgaWYgKCFuYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpKys7Ci0gICAgICBuYW1lID0gYmFzZU5hbWUgKyBpOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIHNlcnZpY2UgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVNlcnZpY2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAJTGlzdCBuYW1lcyA9IGdldFVzZWRTZXJ2aWNlTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcigiTmV3U2VydmljZSIsIG5hbWVzKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIGJpbmRpbmcgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZUJpbmRpbmdOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGJhc2VOYW1lKQotICB7Ci0gICAgaWYgKGJhc2VOYW1lID09IG51bGwpCi0gICAgewotICAgICAgYmFzZU5hbWUgPSAiTmV3QmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZEJpbmRpbmdOYW1lcyhkZWZpbml0aW9uKTsKLQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVByZWZpeChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlUHJlZml4KQotICB7Ci0gICAgU3RyaW5nIHByZWZpeCA9IGJhc2VQcmVmaXg7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKHByZWZpeCkgIT0gbnVsbDsgaSsrKQotICAgIHsKLSAgICAgIHByZWZpeCA9IGJhc2VQcmVmaXggKyBpOwotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVQb3J0TmFtZShTZXJ2aWNlIHNlcnZpY2UsIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld1BvcnQiOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAKLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZFBvcnROYW1lcyhzZXJ2aWNlKTsKLSAgICAKLQlyZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNZXNzYWdlUmVmZXJlbmNlIG1lc3NSZWYpCi0gIHsgICAKLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgaWYgKG1lc3NSZWYgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBuYW1lID0gY3JlYXRlT3BlcmF0aW9uTmFtZShtZXNzUmVmLCAiUmVxdWVzdCIpOyAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzUmVmIGluc3RhbmNlb2YgT3V0cHV0KQotICAgIHsKLSAgICAgIG5hbWUgPSBjcmVhdGVPcGVyYXRpb25OYW1lKG1lc3NSZWYsICJSZXNwb25zZSIpOyAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzUmVmIGluc3RhbmNlb2YgRmF1bHQpCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBTdHJpbmcgZmF1bHROYW1lID0gKChGYXVsdCkgbWVzc1JlZikuZ2V0TmFtZSgpOwotICAgICAgaWYgKGZhdWx0TmFtZSA9PSBudWxsIHx8IGZhdWx0TmFtZS5sZW5ndGgoKSA9PSAwKQotICAgICAgeyAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBmYXVsdE5hbWUgPSAiRmF1bHQiOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBuYW1lID0gY3JlYXRlT3BlcmF0aW9uTmFtZShtZXNzUmVmLCBmYXVsdE5hbWUpOyAKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICByZXR1cm4gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCBuYW1lKTsKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkRmF1bHROYW1lcyhPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpLm5leHQoKTsKLSAgICAgIG5hbWVzLmFkZChmYXVsdC5nZXROYW1lKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZE9wZXJhdGlvbk5hbWVzKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIGkubmV4dCgpOwotICAgICAgbmFtZXMuYWRkKG9wLmdldE5hbWUoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRQYXJ0TmFtZXMoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgICAgIG5hbWVzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkUG9ydFR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIC8vCQkJaWYgKHBvcnRUeXBlLmlzU2V0UU5hbWUoKSkKLSAgICAgIGlmIChwb3J0VHlwZS5nZXRRTmFtZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzLmFkZChwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICAgIAotICB9Ci0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkU2VydmljZU5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIC8vIEZpcnN0IGJ1aWxkIGEgbGlzdCBvZiBuYW1lcyBhbHJlYWR5IHVzZWQKLSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGkubmV4dCgpOwotICAgICAgLy8gVE9ETzogcG9ydCBjaGVjawotICAgICAgLy8gCQlpZihzZXJ2aWNlLmlzU2V0UU5hbWUoKSkKLSAgICAgIGlmIChzZXJ2aWNlLmdldFFOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgbmFtZXMuYWRkKHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRNZXNzYWdlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbXNnID0gKE1lc3NhZ2UpIGkubmV4dCgpOwotICAgICAgLy8gVE9ETzogcG9ydCBjaGVjawotICAgICAgaWYgKG1zZy5nZXRRTmFtZSgpICE9IG51bGwpCi0gICAgICAgIC8vCQkJaWYobXNnLmlzU2V0UU5hbWUoKSkKLSAgICAgICAgbmFtZXMuYWRkKG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRCaW5kaW5nTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIC8vCQkJaWYgKGJpbmRpbmcuaXNTZXRRTmFtZSgpKQotICAgICAgaWYgKGJpbmRpbmcuZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lcy5hZGQoYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRQb3J0TmFtZXMoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgLy8gRmlyc3QgYnVpbGQgYSBsaXN0IG9mIG5hbWVzIGFscmVhZHkgdXNlZAotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgaS5uZXh0KCk7Ci0KLSAgICAgIGlmIChwb3J0LmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lcy5hZGQocG9ydC5nZXROYW1lKCkpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVPcGVyYXRpb25OYW1lKE9iamVjdCBvYmplY3QsIFN0cmluZyBzdWZmaXgpCi0gIHsgICAgICAgICAgICAgICAKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICBFT2JqZWN0IHBhcmVudCA9ICgoRU9iamVjdClvYmplY3QpLmVDb250YWluZXIoKTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9ICgoT3BlcmF0aW9uKXBhcmVudCkuZ2V0TmFtZSgpOwotICAgICAgfQotICAgIH0gCi0gICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCArPSBzdWZmaXg7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZU5hbWUoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7CSAgICAKLQlTdHJpbmcgbWVzc2FnZU5hbWUgPSAiTmV3TWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQlMaXN0IG1lc3NhZ2VOYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgbWVzc2FnZVJlZi5nZXRDb250YWluZXIoKTsKLQlJdGVyYXRvciBtZXNzYWdlSXQgPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0Jd2hpbGUgKG1lc3NhZ2VJdC5oYXNOZXh0KCkpIHsKLQkJbWVzc2FnZU5hbWVzLmFkZCgoKE1lc3NhZ2UpIG1lc3NhZ2VJdC5uZXh0KCkpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCX0KLQkKLS8vCVN0cmluZyByZXF1ZXN0UmVzcG9uc2VTdHJpbmcgPSBnZXRSZXF1ZXN0T3JSZXNwb25zZShtZXNzYWdlUmVmKSArICJNc2ciOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIHJlcXVlc3RSZXNwb25zZVN0cmluZyA9IGdldFJlcXVlc3RPclJlc3BvbnNlKG1lc3NhZ2VSZWYpOyAvLyROT04tTkxTLTEkCi0JbWVzc2FnZU5hbWUgPSBnZXRVbmlxdWVOYW1lSGVscGVyKG9wZXJhdGlvbi5nZXROYW1lKCkgKyByZXF1ZXN0UmVzcG9uc2VTdHJpbmcsIG1lc3NhZ2VOYW1lcyk7Ci0JCi0JcmV0dXJuIG1lc3NhZ2VOYW1lOwotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0TmFtZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpIHsKLQlTdHJpbmcgcGFydE5hbWUgPSAiTmV3UGFydCI7IC8vJE5PTi1OTFMtMSQKLQlNZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCk7Ci0JCi0JT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG1lc3NhZ2VSZWYuZ2V0Q29udGFpbmVyKCk7Ci0JU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotCVN0cmluZyBhcHBlbmRTdHJpbmcgPSAiIjsgICAgCSAgIC8vJE5PTi1OTFMtMSQKLQlpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIElucHV0KSB7Ci0vLwkJYXBwZW5kU3RyaW5nID0gIlBhcmFtZXRlcnMiOyAvLyROT04tTkxTLTEkCi0JCWFwcGVuZFN0cmluZyA9ICJSZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgT3V0cHV0KSB7Ci0vLwkJYXBwZW5kU3RyaW5nID0gIlJlc3VsdCI7IC8vJE5PTi1OTFMtMSQKLQkJYXBwZW5kU3RyaW5nID0gIlJlc3BvbnNlIjsgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgRmF1bHQpIHsKLS8vCQlhcHBlbmRTdHJpbmcgPSAiRmF1bHQiOyAvLyROT04tTkxTLTEkCi0JCWFwcGVuZFN0cmluZyA9ICJfRmF1bHQiOyAvLyROT04tTkxTLTEkCi0JfQotCXBhcnROYW1lID0gb3BlcmF0aW9uTmFtZSArIGFwcGVuZFN0cmluZzsKLQkKLQlMaXN0IHVzZWRQYXJ0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotCQlwYXJ0TmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJSXRlcmF0b3IgcGFydEl0ID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAocGFydEl0Lmhhc05leHQoKSkgewotCQkJdXNlZFBhcnROYW1lcy5hZGQoKChQYXJ0KSBwYXJ0SXQubmV4dCgpKS5nZXROYW1lKCkpOwotCQl9Ci0JfQotCQotCXBhcnROYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihwYXJ0TmFtZSwgdXNlZFBhcnROYW1lcyk7Ci0JCi0JcmV0dXJuIHBhcnROYW1lOwotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRPcGVyYXRpb25OYW1lKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0JU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCUl0ZXJhdG9yIG9wZXJhdGlvbkl0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCUxpc3QgdXNlZE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCXdoaWxlIChvcGVyYXRpb25JdC5oYXNOZXh0KCkpIHsKLQkJdXNlZE5hbWVzLmFkZCgoKE9wZXJhdGlvbikgb3BlcmF0aW9uSXQubmV4dCgpKS5nZXROYW1lKCkpOwotCX0KLQkKLQlvcGVyYXRpb25OYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcigiTmV3T3BlcmF0aW9uIiwgdXNlZE5hbWVzKTsgLy8kTk9OLU5MUy0xJAotCQotCXJldHVybiBvcGVyYXRpb25OYW1lOwotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXF1ZXN0T3JSZXNwb25zZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpIHsKLQlpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIElucHV0KQotCXsKLQkJcmV0dXJuICJSZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgT3V0cHV0KQotCXsKLQkJcmV0dXJuICJSZXNwb25zZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEZhdWx0KQotCXsKLQkJcmV0dXJuICJfRmF1bHQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGYXVsdE5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotCVN0cmluZyBmYXVsdE5hbWUgPSAiZmF1bHQiOyAvLyROT04tTkxTLTEkCi0JTGlzdCBuYW1lTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQlJdGVyYXRvciBmYXVsdEl0ID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChmYXVsdEl0Lmhhc05leHQoKSkgewotCQluYW1lTGlzdC5hZGQoKChGYXVsdCkgZmF1bHRJdC5uZXh0KCkpLmdldE5hbWUoKSk7Ci0JfQotCQotCWZhdWx0TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoZmF1bHROYW1lLCBuYW1lTGlzdCk7Ci0JCi0JcmV0dXJuIGZhdWx0TmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WFNERWxlbWVudE5hbWUoU3RyaW5nIGJhc2VOYW1lLCBPYmplY3QgcGFyZW50KSB7Ci0JU3RyaW5nIGVsZW1lbnROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlpZiAocGFyZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hKSB7Ci0JCWVsZW1lbnROYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgZ2V0VXNlZEVsZW1lbnROYW1lcygoWFNEU2NoZW1hKSBwYXJlbnQpKTsKLQl9Ci0JZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQlMaXN0IGV4aXN0aW5nTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJlbnQ7Ci0JCUl0ZXJhdG9yIG1vZGVsR3JvdXBJdCA9IG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAobW9kZWxHcm91cEl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBtb2RlbEdyb3VwSXQubmV4dCgpOwotCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCVhTRFBhcnRpY2xlIGV4aXN0aW5nUGFydGljbGUgPSAoWFNEUGFydGljbGUpIGl0ZW07Ci0JCQkJaWYgKGV4aXN0aW5nUGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJCWV4aXN0aW5nTmFtZXMuYWRkKCgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBleGlzdGluZ1BhcnRpY2xlLmdldENvbnRlbnQoKSkuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWVsZW1lbnROYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgZXhpc3RpbmdOYW1lcyk7CQkJCi0JfQotCQotCXJldHVybiBlbGVtZW50TmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WFNEQ29tcGxleFR5cGVOYW1lKFN0cmluZyBiYXNlTmFtZSwgWFNEU2NoZW1hIHNjaGVtYSkgewotCVN0cmluZyB0eXBlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JTGlzdCBleGlzdGluZ05hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCUl0ZXJhdG9yIGl0ID0gc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7Ci0Jd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLQkJCWV4aXN0aW5nTmFtZXMuYWRkKCgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBpdGVtKS5nZXROYW1lKCkpOwotCQl9Ci0JfQotCQotCXR5cGVOYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgZXhpc3RpbmdOYW1lcyk7Ci0JcmV0dXJuIHR5cGVOYW1lOwotfQotCi1wcml2YXRlIHN0YXRpYyBMaXN0IGdldFVzZWRFbGVtZW50TmFtZXMoWFNEU2NoZW1hIHhzZFNjaGVtYSkgewotCUxpc3QgdXNlZE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCUl0ZXJhdG9yIHNjaGVtYUl0ID0geHNkU2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoc2NoZW1hSXQuaGFzTmV4dCgpKSB7Ci0JCU9iamVjdCBpdGVtID0gc2NoZW1hSXQubmV4dCgpOwotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJdXNlZE5hbWVzLmFkZCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgaXRlbSkuZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQlyZXR1cm4gdXNlZE5hbWVzOwotfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCB0aGUgIHRoZSBmaXJzdCBsZXR0ZXIgY29udmVydGVkIHRvIHVwcGVyY2FzZS4KLSAgICogQHBhcmFtIG5hbWUgdGhlIGlucHV0IG5hbWUuIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEByZXR1cm4gYSBhIGNvcHkgb2YgdGhlIGlucHV0IHN0cmluZyB3aXRoIHRoZSAgdGhlIGZpcnN0IGxldHRlciBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRGaXJzdENoYXJVcHBlcmNhc2VOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgaW50IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgY2hhcltdIGJ1ZmZlciA9IG5ldyBjaGFyW2xlbmd0aF07Ci0gICAgYnVmZmVyWzBdID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKG5hbWUuY2hhckF0KDApKTsKLSAgICBuYW1lLmdldENoYXJzKDEsIGxlbmd0aCwgYnVmZmVyLCAxKTsKLSAgICByZXR1cm4gU3RyaW5nLmNvcHlWYWx1ZU9mKGJ1ZmZlcik7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05vZGVBc3NvY2lhdGlvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYzA1MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05vZGVBc3NvY2lhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2QuWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5XU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZGFwdGVycy5DYXRlZ29yeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIKLXsgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgd3NkbFByb3ZpZGVyOwotICBwcm90ZWN0ZWQgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIHhzZFByb3ZpZGVyOwotCi0gIHB1YmxpYyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCkKLSAgeyAgICAgICAgICAgICAKLQkgIHdzZGxQcm92aWRlciA9IG5ldyBXU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIoKTsKLQkgIHhzZFByb3ZpZGVyID0gbmV3IFhTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyKCk7Ci0gIH0gICAgICAgIAotCi0gIHByb3RlY3RlZCBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgZ2V0QXBwaWNhYmxlUHJvdmlkZXIoT2JqZWN0IG9iamVjdCkKLSAgewotCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHx8IAotCSAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50IHx8Ci0JICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnlBZGFwdGVyKSB7Ly8gfHwKLS8vCSAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5KSB7Ci0JCSAgcmV0dXJuIHhzZFByb3ZpZGVyOwotCSAgfQotCSAgCi0JICByZXR1cm4gd3NkbFByb3ZpZGVyOwotICB9Ci0gICAgICAgIAotCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3RGb3JOb2RlKE9iamVjdCByb290T2JqZWN0LCBFbGVtZW50IHRhcmdldE5vZGUpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGlmICh0YXJnZXROb2RlICE9IG51bGwgJiYgdGFyZ2V0Tm9kZS5nZXRQYXJlbnROb2RlKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBUaGUgZWxlbWVudCB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIERPTSwgY29tbW9uIHNjZW5hcmlvIGR1cmluZyB1bmRvLgotICAgICAgLy8gVGhlIHBhcmVudCBlbGVtZW50J3MgcmVjb25jaWxpYXRpb24gd2lsbCB0YWtlIGNhcmUgb2YgcmVjb25jaWxpbmcgaXQuCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgaW50IGN1cnJlbnRJbmRleCA9IDA7Ci0KLSAgICBFbGVtZW50W10gZWxlbWVudENoYWluID0gZ2V0UGFyZW50RWxlbWVudENoYWluKChFbGVtZW50KXRhcmdldE5vZGUpOwotCi0gICAgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIHAgPSBnZXRBcHBpY2FibGVQcm92aWRlcihyb290T2JqZWN0KTsKLSAgICBpZiAocCAhPSBudWxsKQotICAgIHsKLSAgICAgIE5vZGUgcm9vdE9iamVjdE5vZGUgPSBwLmdldE5vZGUocm9vdE9iamVjdCk7Ci0KLSAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBlbGVtZW50Q2hhaW4ubGVuZ3RoKQotICAgICAgewotICAgICAgICBFbGVtZW50IGUgPSBlbGVtZW50Q2hhaW5bY3VycmVudEluZGV4XTsKLSAgICAgICAgaWYgKGUgPT0gcm9vdE9iamVjdE5vZGUpCi0gICAgICAgIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgY3VycmVudEluZGV4Kys7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudEluZGV4Kys7Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgICAgIAotICAgIE9iamVjdCBjdXJyZW50T2JqZWN0ID0gcm9vdE9iamVjdDsgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnQgZW5kW10gPSBuZXcgaW50WzFdOwotCi0gICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IGVsZW1lbnRDaGFpbi5sZW5ndGgpCi0gICAgeyAgICAgICAgICAgICAgIAotICAgICAgcCA9IGdldEFwcGljYWJsZVByb3ZpZGVyKGN1cnJlbnRPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaWYgKHAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZW5kWzBdID0gZWxlbWVudENoYWluLmxlbmd0aDsKLSAgICAgICAgY3VycmVudE9iamVjdCA9IHAuZ2V0TW9kZWxPYmplY3QoY3VycmVudE9iamVjdCwgZWxlbWVudENoYWluLCBjdXJyZW50SW5kZXgsIGVuZCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudE9iamVjdCA9PSBudWxsKQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIC8vIGZhaWx1cmUKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBjdXJyZW50SW5kZXggPSBNYXRoLm1heChlbmRbMF0sIGN1cnJlbnRJbmRleCArIDEpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAgICAgICAgIAotICAgICAgICBicmVhazsKLSAgICAgIH0gCi0gICAgfSAgICAgCi0KLSAgICByZXR1cm4gKGN1cnJlbnRJbmRleCA9PSBlbGVtZW50Q2hhaW4ubGVuZ3RoKSA/IGN1cnJlbnRPYmplY3QgOiBudWxsOwotICB9ICAKLSAgICAgICAgICAgCi0KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsgICAgICAgICAgCi0gICAgTm9kZSByZXN1bHQgPSBudWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTm9kZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoTm9kZSltb2RlbE9iamVjdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlciBwID0gZ2V0QXBwaWNhYmxlUHJvdmlkZXIobW9kZWxPYmplY3QpOyAgICAgICAgICAgICAgIAotICAgICAgaWYgKHAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcC5nZXROb2RlKG1vZGVsT2JqZWN0KTsKLSAgICAgIH0KLSAgICB9ICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgIAotCi0gIHByb3RlY3RlZCBFbGVtZW50W10gZ2V0UGFyZW50RWxlbWVudENoYWluKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3aGlsZSAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QuYWRkKDAsIGVsZW1lbnQpOwotICAgICAgTm9kZSBub2RlID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICBlbGVtZW50ID0gKG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpID8gKEVsZW1lbnQpbm9kZSA6IG51bGw7ICAgIAotICAgIH0gICAgICAgICAgICAgICAgCi0KLSAgICBpbnQgbGlzdFNpemUgPSBsaXN0LnNpemUoKTsKLSAgICBFbGVtZW50W10gcmVzdWx0ID0gbmV3IEVsZW1lbnRbbGlzdFNpemVdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHRbaV0gPSAoRWxlbWVudClsaXN0LmdldChpKTsKLSAgICB9ICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvT3Blbk9uU2VsZWN0aW9uSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvT3Blbk9uU2VsZWN0aW9uSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOGRkN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL09wZW5PblNlbGVjdGlvbkhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExTd2l0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgT3Blbk9uU2VsZWN0aW9uSGVscGVyIGV4dGVuZHMgV1NETFN3aXRjaAotewotICBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIEF0dHIgYXR0ciA9IG51bGw7Ci0gIEVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0KLSAgcHVibGljIE9wZW5PblNlbGVjdGlvbkhlbHBlcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgb3BlbkVkaXRvcihFT2JqZWN0IGVPYmplY3QpCi0gIHsKLSAgICBTdHJpbmdbXSBhcnJheSA9IGNvbXB1dGVTcGVjaWZpY2F0aW9uKGVPYmplY3QpOwotICAgIGlmIChhcnJheSAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wZW5FZGl0b3IoYXJyYXlbMF0sIGFycmF5WzFdKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBvcGVuRWRpdG9yKE5vZGUgbm9kZSkKLSAgewotICAgIFN0cmluZ1tdIGFycmF5ID0gY29tcHV0ZVNwZWNpZmljYXRpb24obm9kZSk7Ci0gICAgaWYgKGFycmF5ICE9IG51bGwpCi0gICAgewotICAgICAgb3BlbkVkaXRvcihhcnJheVswXSwgYXJyYXlbMV0pOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIG9wZW5FZGl0b3IoU3RyaW5nIHJlc291cmNlLCBTdHJpbmcgc3BlYykKLSAgewotICAgIFN0cmluZyBwYXR0ZXJuID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLSAgICBJV29ya2JlbmNoUGFnZSB3b3JrYmVuY2hQYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoUGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBTdHJpbmcgY3VycmVudEVkaXRvcklkID0gZWRpdG9yUGFydC5nZXRFZGl0b3JTaXRlKCkuZ2V0SWQoKTsKLSAgICAKLSAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZS5zdGFydHNXaXRoKHBhdHRlcm4pKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChyZXNvdXJjZS5zdWJzdHJpbmcocGF0dGVybi5sZW5ndGgoKSkpOwotICAgICAgICBJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCi0gICAgICAgIAotICAgICAgICBpZiAoZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJgotICAgICAgICAgICAoKElGaWxlRWRpdG9ySW5wdXQpZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCkuZXF1YWxzKGZpbGUpKQotICAgICAgICB7ICAKLSAgICAgICAgCXdvcmtiZW5jaFBhZ2UuZ2V0TmF2aWdhdGlvbkhpc3RvcnkoKS5tYXJrTG9jYXRpb24oZWRpdG9yUGFydCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogVXNlIGNvbnRlbnQgdHlwZSBhcyBiZWxvdwotICAgICAgICAgICAgaWYgKHJlc291cmNlLmVuZHNXaXRoKCJ4c2QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoUGFnZS5vcGVuRWRpdG9yKG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSksIFdTRExFZGl0b3JQbHVnaW4uWFNEX0VESVRPUl9JRCk7IAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgd3NkbGVkaXRvcgotCQkJICAgICAgICBlZGl0b3JQYXJ0ID0gIHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpLCBlZGl0b3JQYXJ0LmdldEVkaXRvclNpdGUoKS5nZXRJZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0JCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBpbml0RXgpCi0gCQkJCQl7Ci0gCQkJCQl9Ci0gICAgICAgIH0KLQotICAgICAgICBDbGFzcyB0aGVDbGFzcyA9IGVkaXRvclBhcnQuZ2V0Q2xhc3MoKTsKLSAgICAgICAgQ2xhc3NbXSBtZXRob2RBcmdzID0geyBTdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgTWV0aG9kIG1ldGhvZCA9IHRoZUNsYXNzLmdldE1ldGhvZCgib3Blbk9uU2VsZWN0aW9uIiwgbWV0aG9kQXJncyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgT2JqZWN0IGFyZ3NbXSA9IHsgc3BlYyB9OwotICAgICAgICBtZXRob2QuaW52b2tlKGVkaXRvclBhcnQsIGFyZ3MpOwotICAgICAgICB3b3JrYmVuY2hQYWdlLmdldE5hdmlnYXRpb25IaXN0b3J5KCkubWFya0xvY2F0aW9uKGVkaXRvclBhcnQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChyZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlLnN0YXJ0c1dpdGgoImh0dHAiKSkKLSAgICB7Ci0gICAgICBJRWRpdG9yUGFydCBuZXdFZGl0b3JQYXJ0ID0gbnVsbDsKLSAgICAgIGJvb2xlYW4gZG9PcGVuV3NkbEVkaXRvciA9IHRydWU7Ci0gICAgICBpZiAocmVzb3VyY2UuZW5kc1dpdGgoInhzZCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGRvT3BlbldzZGxFZGl0b3IgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRWRpdG9yUmVmZXJlbmNlW10gcmVmcyA9IHdvcmtiZW5jaFBhZ2UuZ2V0RWRpdG9yUmVmZXJlbmNlcygpOwotICAgICAgICBpbnQgbGVuZ3RoID0gcmVmcy5sZW5ndGg7Ci0gICAgICAgIC8vIE5lZWQgdG8gZmluZCBpZiBhbiBlZGl0b3Igb24gdGhhdCBzY2hlbWEgaGFzIGFscmVhZHkgYmVlbiBvcGVuZWQKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHJlZnNbaV0uZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCByZWFkT25seUVkaXRvcklucHV0ID0gKEFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0KSBpbnB1dDsKLSAgICAgICAgICAgIGlmIChyZWFkT25seUVkaXRvcklucHV0LmdldFVybFN0cmluZygpLmVxdWFscyhyZXNvdXJjZSkgJiYgCi0gICAgICAgICAgICAgICAgKCFkb09wZW5Xc2RsRWRpdG9yICYmIHJlYWRPbmx5RWRpdG9ySW5wdXQuZ2V0RWRpdG9ySUQoKS5lcXVhbHMoV1NETEVkaXRvclBsdWdpbi5YU0RfRURJVE9SX0lEKQotICAgICAgICAgICAgICAgIHx8IChkb09wZW5Xc2RsRWRpdG9yICYmIHJlYWRPbmx5RWRpdG9ySW5wdXQuZ2V0RWRpdG9ySUQoKS5lcXVhbHMoV1NETEVkaXRvclBsdWdpbi5XU0RMX0VESVRPUl9JRCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV3RWRpdG9yUGFydCA9IHJlZnNbaV0uZ2V0RWRpdG9yKHRydWUpOwotICAgICAgICAgICAgICB3b3JrYmVuY2hQYWdlLmFjdGl2YXRlKHJlZnNbaV0uZ2V0UGFydCh0cnVlKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobmV3RWRpdG9yUGFydCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQgcmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQgPSBuZXcgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQocmVzb3VyY2UpOwotICAgICAgICAgIElDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IG51bGw7Ci0gICAgICAgICAgSW5wdXRTdHJlYW0gaVN0cmVhbSA9IG51bGw7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaVN0cmVhbSA9IHJlYWRPbmx5U3RvcmFnZUVkaXRvcklucHV0LmdldFN0b3JhZ2UoKS5nZXRDb250ZW50cygpOwotICAgICAgICAgICAgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoaVN0cmVhbSwgcmVzb3VyY2UpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjb3JlRXhjZXB0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBjb250ZW50IHR5cGUgbW9yZSByZWxpYWJsZSBjaGVjawotICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsICYmIGNvbnRlbnRUeXBlLmVxdWFscyhYU0RFZGl0b3JQbHVnaW4uWFNEX0NPTlRFTlRfVFlQRV9JRCkgfHwgcmVzb3VyY2UuZW5kc1dpdGgoInhzZCIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQuc2V0RWRpdG9ySUQoV1NETEVkaXRvclBsdWdpbi5YU0RfRURJVE9SX0lEKTsKLSAgICAgICAgICAgIHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihyZWFkT25seVN0b3JhZ2VFZGl0b3JJbnB1dCwgV1NETEVkaXRvclBsdWdpbi5YU0RfRURJVE9SX0lELCB0cnVlLCAwKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQuc2V0RWRpdG9ySUQoY3VycmVudEVkaXRvcklkKTsKLSAgICAgICAgICAgIHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihyZWFkT25seVN0b3JhZ2VFZGl0b3JJbnB1dCwgY3VycmVudEVkaXRvcklkLCB0cnVlLCAwKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIHBpZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGNvbXB1dGVTcGVjaWZpY2F0aW9uKEVPYmplY3QgZU9iamVjdCkKLSAgewotICAgIFN0cmluZ1tdIHJlc3VsdCA9IG51bGw7Ci0gICAgT2JqZWN0IHJlZmVyZW5jZWRPYmplY3QgPSBkb1N3aXRjaChlT2JqZWN0KTsKLSAgICBpZiAocmVmZXJlbmNlZE9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgRU9iamVjdCByZWZlcmVuY2VkRU9iamVjdCA9IChFT2JqZWN0KXJlZmVyZW5jZWRPYmplY3Q7Ci0gICAgICBpZiAocmVmZXJlbmNlZEVPYmplY3QgIT0gZU9iamVjdCB8fCAKLSAgICAgICAgIHJlZmVyZW5jZWRFT2JqZWN0LmVSZXNvdXJjZSgpICE9IGRlZmluaXRpb24uZVJlc291cmNlKCkpCi0gICAgICB7ICAgICAgICAKLSAgICAgIAotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZWZlcmVuY2VkRU9iamVjdC5lUmVzb3VyY2UoKTsKLSAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgICByZXN1bHRbMF0gPSByZXNvdXJjZS5nZXRVUkkoKS50b1N0cmluZygpOwotICAgICAgICByZXN1bHRbMV0gPSByZXNvdXJjZS5nZXRVUklGcmFnbWVudChyZWZlcmVuY2VkRU9iamVjdCk7Ci0gICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gY29tcHV0ZVNwZWNpZmljYXRpb24oTm9kZSBub2RlKQotICB7Ci0gICAgU3RyaW5nW10gcmVzdWx0ID0gbnVsbDsKLSAgICBzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFIDoKLSAgICAgICAgewotICAgICAgICAgIGVsZW1lbnQgPSAoRWxlbWVudClub2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIE5vZGUuQVRUUklCVVRFX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgYXR0ciA9IChBdHRyKW5vZGU7Ci0gICAgICAgICAgZWxlbWVudCA9IGF0dHIuZ2V0T3duZXJFbGVtZW50KCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgTm9kZS5URVhUX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBwYXJlbnQgPSBub2RlLmdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICBlbGVtZW50ID0gKHBhcmVudCBpbnN0YW5jZW9mIEVsZW1lbnQpID8gKEVsZW1lbnQpcGFyZW50IDogbnVsbDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gY29tcHV0ZVNwZWNpZmljYXRpb24oKEVPYmplY3Qpb2JqZWN0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IGJpbmRpbmc7Ci0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gYmluZGluZy5nZXRFUG9ydFR5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZURlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBwYXJ0OwotICAgIGlmIChhdHRyICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpID09IGRlZmluaXRpb24pCi0gICAgewotICAgICAgcmVzdWx0ID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwgPyAoT2JqZWN0KXBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSA6IChPYmplY3QpcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZVBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHBvcnQ7Ci0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5CSU5ESU5HX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gcG9ydC5nZXRFQmluZGluZygpOwotCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBmYXVsdDsKLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBmYXVsdC5nZXRNZXNzYWdlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBpbnB1dDsKLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpbnB1dC5nZXRNZXNzYWdlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBvdXRwdXQ7Ci0KLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlSW1wb3J0KEltcG9ydCB0aGVJbXBvcnQpCi0gIHsKLQkJT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0JCQotCQkvLyBGb3Igbm93LCBsb29rIGF0IHRoZSBmaWxlIGV4dGVuc2lvbi4gIFdoZW4gYnVnemlsbGEgMTE4MjkzIGlzIGZpeGVkLCBsb29rIGF0Ci0JCS8vIHRoZSBJbXBvcnQncyBlRGVmaW5pdGlvbiBhbmQgZVNjaGVtYSBpbnN0ZWFkLgotCQlQYXRoIGltcG9ydFBhdGggPSBuZXcgUGF0aCh0aGVJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0JCVN0cmluZyBleHRlbnNpb24gPSBpbXBvcnRQYXRoLmdldEZpbGVFeHRlbnNpb24oKTsKLQkJaWYgKGV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ4c2QiKSkgeyAvLyROT04tTkxTLTEkCi0JCQlpZiAodGhlSW1wb3J0LmdldEVTY2hlbWEoKSA9PSBudWxsKSB7Ci0JCQkJKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0JCQl9Ci0JCQkKLQkJCXJlc3VsdCA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0JCX0KLQkJZWxzZSBpZiAoZXh0ZW5zaW9uLmVxdWFsc0lnbm9yZUNhc2UoIndzZGwiKSB8fCBleHRlbnNpb24uZW5kc1dpdGgoIndzZGwiKSkgeyAvLyROT04tTkxTLTEkCi0JCQlpZiAodGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCkgPT0gbnVsbCkgewotCQkJCSgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotCQkJfQotCQkJCi0JCQlyZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLQkJfQotCQkKLQkJCi0vLwkJaWYgKHRoZUltcG9ydC5nZXRFU2NoZW1hKCkgIT0gbnVsbCkgewotLy8JCQlyZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotLy8JCX0KLS8vCQllbHNlIGlmICh0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0vLwkJCXJlc3VsdCA9IHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotLy8JCX0KLS8vCQllbHNlIHsKLS8vCSAgICAgICAgLy8gTmVlZCB0byByZXNvbHZlIGltcG9ydHMgYmVjYXVzZSB0aGUgbW9kZWwgZG9lc24ndCBhdXRvbWF0aWNhbGx5Ci0vLwkgICAgICAgIC8vIGRvIGl0IGZvciB1cwotLy8JICAgICAgICAoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLS8vCSAgICAgICAgcmVzdWx0ID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLS8vCSAgICB9Ci0JCQotCQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNNYXRjaGluZ0F0dHJpYnV0ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICByZXR1cm4gYXR0ciAhPSBudWxsICYmIHZhbHVlLmVxdWFscyhhdHRyLmdldE5hbWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgRUNsYXNzIHRoZUVDbGFzcyA9IG9iamVjdC5lQ2xhc3MoKTsKLSAgICAKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBYU0RQYWNrYWdlLmVJTlNUQU5DRSkKLSAgICB7Ci0gICAgICAvLyBIYW5kbGUgbmF2aWdhdGlvbiBiZXR3ZWVuIGlubGluZSBzY2hlbWEgY29tcG9uZW50cy4KLSAgICAgIAotICAgICAgWFNESHlwZXJsaW5rVGFyZ2V0TG9jYXRvciB4c2RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yID0gbmV3IFhTREh5cGVybGlua1RhcmdldExvY2F0b3IoKTsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0ciAhPSBudWxsID8gYXR0ci5nZXROYW1lKCk6IG51bGw7Ci0gICAgICByZXR1cm4geHNkSHlwZXJsaW5rVGFyZ2V0TG9jYXRvci5sb2NhdGUoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvYmplY3QsIGF0dHJpYnV0ZU5hbWUpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3VwZXIuZGVmYXVsdENhc2Uob2JqZWN0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1JlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxMjBjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyIHsKLQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0QmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuICAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMUVuZFBvaW50KSBhc2RPYmplY3QpLmdldFRhcmdldCgpOyAKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbiwgKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcihJQVNET2JqZWN0IGFzZE9iamVjdCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFcxMUJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMUJpbmRpbmcpIGFzZE9iamVjdCApLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZGVzY3JpcHRpb24sICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0TWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBhc2RPYmplY3QpLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uLCAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIGFzZE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCksIG51bGwsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXU0RMQmFzZUFkYXB0ZXIpIGFzZE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcigoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCksIG51bGwsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9TZXJ2aWNlUG9saWN5SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvU2VydmljZVBvbGljeUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTYxNGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9TZXJ2aWNlUG9saWN5SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci0KLS8qKgotICogQ29udGFpbnMgaGVscGVyIG1ldGhvZHMgZGVhbGluZyB3aXRoIHNlcnZpY2UgcG9saWNpZXMKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lIZWxwZXIKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYWN0aXZlIHBvbGljeSB3aXRoIGFuIGFzc29jaWF0ZWQgZGVmYXVsdCBwcm90b2NvbAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBJU2VydmljZVBvbGljeSBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lzZSBudWxsCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElTZXJ2aWNlUG9saWN5IGdldEFjdGl2ZVBvbGljeVdpdGhQcm90b2NvbChJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgSVNlcnZpY2VQb2xpY3kgdGhlUG9saWN5ID0gbnVsbDsKLQotICAgIElTZXJ2aWNlUG9saWN5W10gcG9saWNpZXMgPSBnZXRBY3RpdmVTZXJ2aWNlUG9saWNpZXMocHJvamVjdCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2xpY2llcy5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBJU2VydmljZVBvbGljeSBwb2xpY3kgPSBwb2xpY2llc1tpXTsKLSAgICAgIC8vIGdldCB0aGUgZGVmYXVsdCBwcm90b2NvbCBmcm9tIHRoZSBwb2xpY3kKLSAgICAgIElQb2xpY3lTdGF0ZSBwb2xpY3lTdGF0ZSA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KTsKLSAgICAgIGlmIChwb2xpY3lTdGF0ZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGVmYXVsdEJpbmRpbmcgPSBwb2xpY3lTdGF0ZS5nZXRWYWx1ZShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wpOwotICAgICAgICBpZiAoKGRlZmF1bHRCaW5kaW5nICE9IG51bGwpICYmIChkZWZhdWx0QmluZGluZy5sZW5ndGgoKSA+IDApKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gcG9saWN5IHdpbGwgYmUgbGFzdCBvbmUgYWN0aXZlCi0gICAgICAgICAgdGhlUG9saWN5ID0gcG9saWN5OwotICAgICAgICAgIElQb2xpY3lTdGF0ZUVudW0gcG9saWN5U3RhdGVFbnVtID0gcG9saWN5LmdldFBvbGljeVN0YXRlRW51bShwcm9qZWN0KTsKLSAgICAgICAgICBTdHJpbmcgZW51bUlkID0gcG9saWN5U3RhdGVFbnVtLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgICAgICAvLyBpZiBmb3VuZCBhIHJlcXVpcmVkIHBvbGljeSwgc3RvcCBhbmQgcmV0dXJuIGl0Ci0gICAgICAgICAgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1SZXF1aXJlLmVxdWFscyhlbnVtSWQpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRoZVBvbGljeTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlZmF1bHQgYmluZGluZyBiYXNlZCBvbiB0aGUgcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBTdHJpbmcgYmluZGluZyBpZCAobmFtZXNwYWNlKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEJpbmRpbmcoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIFN0cmluZyBkZWZhdWx0QmluZGluZyA9IG51bGw7Ci0gICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gZ2V0QWN0aXZlUG9saWN5V2l0aFByb3RvY29sKHByb2plY3QpOwotICAgIGlmIChwb2xpY3kgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWZhdWx0QmluZGluZyA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KS5nZXRWYWx1ZShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wpOwotICAgIH0KLQotICAgIC8vIHN0aWxsIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBiaW5kaW5nIHNvIGp1c3QgaGFyZGNvZGUgYSB2YWx1ZQotICAgIGlmIChkZWZhdWx0QmluZGluZyA9PSBudWxsKQotICAgICAgZGVmYXVsdEJpbmRpbmcgPSBnZXREZWZhdWx0RGVmYXVsdEJpbmRpbmcoKTsKLQotICAgIHJldHVybiBkZWZhdWx0QmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlZmF1bHQgYmluZGluZyBiYXNlZCBvbiBwcm9qZWN0IGFuZCBzZXJ2aWNlIHBvbGljeQotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHBhcmFtIHBvbGljeQotICAgKiBAcmV0dXJuIFN0cmluZyBiaW5kaW5nIGlkIChuYW1lc3BhY2UpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0QmluZGluZyhJUHJvamVjdCBwcm9qZWN0LCBJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBTdHJpbmcgZGVmYXVsdEJpbmRpbmcgPSBudWxsOwotICAgIGlmIChwb2xpY3kgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWZhdWx0QmluZGluZyA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KS5nZXRWYWx1ZShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wpOwotICAgIH0KLQotICAgIC8vIHN0aWxsIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBiaW5kaW5nIHNvIGp1c3QgaGFyZGNvZGUgYSB2YWx1ZQotICAgIGlmIChkZWZhdWx0QmluZGluZyA9PSBudWxsKQotICAgICAgZGVmYXVsdEJpbmRpbmcgPSBnZXREZWZhdWx0RGVmYXVsdEJpbmRpbmcoKTsKLQotICAgIHJldHVybiBkZWZhdWx0QmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIHNldmVyaXR5IHRvIGJlIHVzZWQgd2hlbiB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICogQHJldHVybiBpbnQgKElNZXNzYWdlUHJvdmlkZXIuTk9ORSwgSU1lc3NhZ2VQcm92aWRlci5FUlJPUiwKLSAgICogICAgICAgICBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRNZXNzYWdlU2V2ZXJpdHkoSVByb2plY3QgcHJvamVjdCwgSVNlcnZpY2VQb2xpY3kgcG9saWN5KQotICB7Ci0gICAgaW50IG1lc3NhZ2VTZXZlcml0eSA9IElNZXNzYWdlUHJvdmlkZXIuTk9ORTsKLQotICAgIGlmIChwb2xpY3kgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJUG9saWN5U3RhdGVFbnVtIHBvbGljeVN0YXRlRW51bSA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0ocHJvamVjdCk7Ci0gICAgICBTdHJpbmcgZW51bUlkID0gcG9saWN5U3RhdGVFbnVtLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLQotICAgICAgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1SZXF1aXJlLmVxdWFscyhlbnVtSWQpKQotICAgICAgICBtZXNzYWdlU2V2ZXJpdHkgPSBJTWVzc2FnZVByb3ZpZGVyLkVSUk9SOwotICAgICAgZWxzZSBpZiAoV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLnN0YXRlRW51bVN1Z2dlc3QuZXF1YWxzKGVudW1JZCkpCi0gICAgICAgIG1lc3NhZ2VTZXZlcml0eSA9IElNZXNzYWdlUHJvdmlkZXIuV0FSTklORzsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWVzc2FnZVNldmVyaXR5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZGVmYXVsdCBiaW5kaW5nCi0gICAqIAotICAgKiBAcmV0dXJuIFN0cmluZyBiaW5kaW5nIGlkIChuYW1lc3BhY2UpCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdERlZmF1bHRCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2xfVkFMVUVfU09BUDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWN0aXZlIHNlcnZpY2UgcG9saWNpZXMgYmFzZWQgb24gcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBJU2VydmljZVBvbGljeVtdCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBJU2VydmljZVBvbGljeVtdIGdldEFjdGl2ZVNlcnZpY2VQb2xpY2llcyhJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgTGlzdCBzZXJ2aWNlUG9saWNpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgLy8gRGV0ZXJtaW5lIGRlZmF1bHQgYmluZGluZyB0byB1c2UgYmFzZWQgb24gcHJvamVjdCdzIHdzaSBjb21wbGlhbmNlCi0gICAgLy8gcHJlZmVyZW5jZQotICAgIElTZXJ2aWNlUG9saWN5IHJvb3RQb2xpY3kgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2aWNlUG9saWN5KFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfV1NJUHJvZmlsZVJvb3QpOwotICAgIGlmIChyb290UG9saWN5ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCB3c2lQb2xpY2llcyA9IHJvb3RQb2xpY3kuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB3c2kgcG9saWNpZXMgYW5kIGRldGVybWluZSB3aGljaCBvbmVzIGFyZSBhcHBsaWNhYmxlCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzaVBvbGljaWVzLnNpemUoKTsgKytpKQotICAgICAgewotICAgICAgICBJU2VydmljZVBvbGljeSBwb2xpY3kgPSAoSVNlcnZpY2VQb2xpY3kpIHdzaVBvbGljaWVzLmdldChpKTsKLSAgICAgICAgSVBvbGljeVN0YXRlRW51bSBwb2xpY3lTdGF0ZUVudW0gPSBwb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKHByb2plY3QpOwotICAgICAgICBTdHJpbmcgZW51bUlkID0gcG9saWN5U3RhdGVFbnVtLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgICAgLy8gZm91bmQgYW4gZW5hYmxlZCBwb2xpY3kKLSAgICAgICAgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1SZXF1aXJlLmVxdWFscyhlbnVtSWQpIHx8IFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1TdWdnZXN0LmVxdWFscyhlbnVtSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gc3BlY2lhbCBjaGVjayBmb3IgQVAgMS4wIHBvbGljeSAoaXQgZG9lc250IHJlYWxseSBjb3VudCwgc28gZG9udAotICAgICAgICAgIC8vIGFkZCBpdCkKLSAgICAgICAgICBpZiAoIVdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfQVAxMC5lcXVhbHMocG9saWN5LmdldElkKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcy5hZGQocG9saWN5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChJU2VydmljZVBvbGljeVtdKSBzZXJ2aWNlUG9saWNpZXMudG9BcnJheShuZXcgSVNlcnZpY2VQb2xpY3lbc2VydmljZVBvbGljaWVzLnNpemUoKV0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVmFsaWRhdGVIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9WYWxpZGF0ZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTgyNTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9WYWxpZGF0ZUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlSGVscGVyCi17Ci0gIC8vIFhNTCBMYW5nIGNhbiBoYXZlIG1hbnkgZGlmZmVyZW50IHZhbGlkIGZvcm1hdHMKLSAgLy8gMSkgeHggICAgICBpZS4gZW4sIGZyLCBkZQotICAvLyAyKSB4eC14eCAgIGllLiBlbi1VUywgZW4tRlIKLSAgLy8gMykgSS14eCAgICBpZS4gSS1lbgotICAvLyA0KSBYLXh4ICAgIGllLiBYLWVuCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNoZWNrWE1MTGFuZyhTdHJpbmcgbGFuZykKLSAgewotICAgIGlmIChsYW5nLmxlbmd0aCgpID09IDApIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgaWYgKGxhbmcubGVuZ3RoKCkgPT0gMSkgCi0gICAgewotICAgICAgY2hhciBjaDAgPSBsYW5nLmNoYXJBdCgwKTsKLSAgICAgIGlmICgoY2gwID49ICdhJyAmJiBjaDAgPD0gJ3onKSB8fCAoY2gwID49ICdBJyAmJiBjaDAgPD0gJ1onKSkKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9MQU5HX1RPT19TSE9SVCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoMCArICAvLyROT04tTkxTLTEkCi0gICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7ICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGludCBvZmZzZXQ7Ci0KLSAgICBjaGFyIGNoMCA9IGxhbmcuY2hhckF0KDApOwotICAgIGlmIChsYW5nLmNoYXJBdCgxKSA9PSAnLScpIAotICAgIHsKLSAgICAgIGlmIChjaDAgPT0gJ2knIHx8IGNoMCA9PSAnSScgfHwgY2gwID09ICd4JyB8fCBjaDAgPT0gJ1gnKSAKLSAgICAgICAgb2Zmc2V0ID0gMTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2gwICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2hhciBjaDEgPSBsYW5nLmNoYXJBdCgxKTsKLSAgICAgIGlmICgoY2gwID49ICdhJyAmJiBjaDAgPD0gJ3onKSB8fCAoY2gwID49ICdBJyAmJiBjaDAgPD0gJ1onKSkKLSAgICAgICAgaWYgKChjaDEgPj0gJ2EnICYmIGNoMSA8PSAneicpIHx8IChjaDEgPj0gJ0EnICYmIGNoMSA8PSAnWicpKQotICAgICAgICAgIG9mZnNldCA9IDI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX05BTUVfSU5WQUxJRF9DSEFSIikgKyBjaDEgKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2gwICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIGlmIChsYW5nLmxlbmd0aCgpID4gb2Zmc2V0KSAKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gbGFuZy5jaGFyQXQob2Zmc2V0KyspOwotICAgICAgaWYgKGNoICE9ICctJykgCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fSFlQSEVOX05FRURFRCIpICsgSW50ZWdlci50b1N0cmluZyhvZmZzZXQtMSk7ICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIAotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGNoID09ICctJykgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxhbmcubGVuZ3RoKCkgPT0gb2Zmc2V0KSAKLSAgICAgICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9IWVBIRU5fRU5ESU5HIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2ggPSBsYW5nLmNoYXJBdChvZmZzZXQrKyk7Ci0gICAgICAgICAgICBpZiAoKGNoIDwgJ2EnIHx8IGNoID4gJ3onKSAmJiAoY2ggPCAnQScgfHwgY2ggPiAnWicpKSAKLSAgICAgICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2ggKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsYW5nLmxlbmd0aCgpID09IG9mZnNldCkKLSAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfSAKLSAgICAgICAgICBlbHNlIGlmICgoY2ggPCAnYScgfHwgY2ggPiAneicpICYmIChjaCA8ICdBJyB8fCBjaCA+ICdaJykpIAotICAgICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2ggKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBlbHNlIGlmIChsYW5nLmxlbmd0aCgpID09IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIGNoID0gbGFuZy5jaGFyQXQob2Zmc2V0KyspOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIG1pbiB2YWx1ZSBpcyBjb3JyZWN0LgotICAgKiBBIG1pbmltdW0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIDwgbWF4VmFsdWUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGlzVmFsaWRNaW5WYWx1ZShTdHJpbmcgbWluVmFsdWUsIFN0cmluZyBtYXhWYWx1ZSkKLSAgewotICAgIGludCBtaW47Ci0KLSAgICBpZiAobWluVmFsdWUgPT0gbnVsbCB8fCBtaW5WYWx1ZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgLy8gTm90aGluZyB0byBjaGVjawotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbWluID0gSW50ZWdlci5wYXJzZUludChtaW5WYWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUlOX05PVF9QT1NJVElWRSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgaWYgKG1pbiA8IDApIAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01JTl9OT1RfUE9TSVRJVkUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBtYXggPSBJbnRlZ2VyLnBhcnNlSW50KG1heFZhbHVlKTsKLSAgICAgIGlmIChtaW4gPiBtYXgpIAotICAgICAgewotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NSU5fVkFMVUUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIC8vIE1heCBpcyBub3QgYWNjdXJhdGUuIERvbid0IGNvbXBhcmUgaXQuCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgbWF4IHZhbHVlIGlzIGNvcnJlY3QuCi0gICAqIEEgbWF4aW11bSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgPiBtaW5WYWx1ZQotICAgKgotICAgKiBJdCBjYW4gYWxzbyBiZSBzZXQgdGhlIHN0cmluZyAidW5ib3VuZGVkIgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgaXNWYWxpZE1heFZhbHVlKFN0cmluZyBtYXhWYWx1ZSwgU3RyaW5nIG1pblZhbHVlKQotICB7Ci0gICAgaW50IG1heDsKLQotICAgIGlmIChtYXhWYWx1ZSA9PSBudWxsIHx8IG1heFZhbHVlLmVxdWFscygiIikpICAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgLy8gTm90aGluZyB0byBjaGVjawotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgaWYgKG1heFZhbHVlLmVxdWFscygidW5ib3VuZGVkIikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBtYXggPSBJbnRlZ2VyLnBhcnNlSW50KG1heFZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NQVhfTk9UX1BPU0lUSVZFIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBpZiAobWF4IDwgMCkgCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUFYX05PVF9QT1NJVElWRSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaW50IG1pbiA9IEludGVnZXIucGFyc2VJbnQobWluVmFsdWUpOwotICAgICAgaWYgKG1heCA8IG1pbikgCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01BWF9WQUxVRSIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgLy8gTWluIGlzIG5vdCBhY2N1cmF0ZS4gRG9uJ3QgY29tcGFyZSBpdC4KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIG5hbWUgY29uZm9ybXMgdG8gdGhlIFhNTCBzcGVjCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja1hNTE5hbWUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gYWxsb3dFbnRpdHlSZWYpCi0gIHsKLSAgICBpbnQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBjaGFyIGNoYXJhY3RlcjsKLQotICAgIGlmIChsZW5ndGggPT0gMCkgCi0gICAgewotICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9XQVJOX05BTUVfTVVTVF9DT05UQUlOX0FUX0xFQVNUX09ORV9DSEFSOwotICAgIH0KLSAgICAKLSAgICBpZiAobmFtZS5pbmRleE9mKCIgIikgPj0gMCkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0hBU19TUEFDRTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGlmIChsZW5ndGggPiAwICYmCi0gICAgICAgIG5hbWUuY2hhckF0KDApID09ICclJykKLSAgICB7Ci0gICAgICBpZiAoYWxsb3dFbnRpdHlSZWYpIAotICAgICAgewotICAgICAgICAvLyBza2lwIG92ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciAKLSAgICAgICAgaW5kZXgrKzsKLSAgICAgIH0gLy8gZW5kIG9mIGlmICgpCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0lOVkFMSURfRklSU1Q7Ci0gICAgICB9IC8vIGVuZCBvZiBlbHNlCi0gICAgfQotICAgIAotICAgIGZvcig7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGNoYXJhY3RlciA9IG5hbWUuY2hhckF0KGluZGV4KTsKLQotICAgICAgaWYoaW5kZXggPT0gMCkKLSAgICAgIHsKLSAgICAgICAgaWYoICFpc1hNTE5hbWVTdGFydChjaGFyYWN0ZXIpICkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0lOVkFMSURfRklSU1Q7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYoIWlzWE1MTmFtZUNoYXIoY2hhcmFjdGVyKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoaW5kZXggPT0gbGVuZ3RoIC0gMSkgJiYgLy9jaGVjayBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgYSAnOycKLSAgICAgICAgICAgICAgYWxsb3dFbnRpdHlSZWYgJiYKLSAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICc7JykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBvayB0aGVuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9IC8vIGVuZCBvZiBpZiAoKQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9XQVJOX05BTUVfSU5WQUxJRF9DSEFSICsgY2hhcmFjdGVyICsKLSAgICAgICAgICAgIE1lc3NhZ2VzLl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQ7Ci0gICAgICAgICAgfSAvLyBlbmQgb2YgZWxzZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBuYW1lIGNvbmZvcm1zIHRvIHRoZSBYTUwgc3BlYwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2hlY2tYTUxOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrWE1MTmFtZShuYW1lLCBmYWxzZSk7Ci0gIH0KLQotICAvKioKLSAgICogaXNYTUxOYW1lU3RhcnQKLSAgICoqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MTmFtZVN0YXJ0KGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID09ICdfJyB8fCBjaCA9PSAnOicgfHwgQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSApOwotICB9Ci0KLSAgLyoqCi0gICAqIGlzWE1MTmFtZUNoYXIKLSAgICoqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MTmFtZUNoYXIoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjaCkgfHwgY2ggPT0gJy4nIHx8IGNoID09ICctJyB8fCBjaCA9PSAnXycgfHwgY2ggPT0gJzonKTsKLSAgfQotCi0gIC8qKgotICAgKiBpc1hNTFByZWZpeFN0YXJ0Ci0gICAqKi8KLS8vICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MUHJlZml4U3RhcnQoY2hhciBjaCkKLS8vICB7Ci0vLyAgICByZXR1cm4gKGNoID09ICdfJyB8fCBDaGFyYWN0ZXIuaXNMZXR0ZXIoY2gpICk7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBpc1hNTFByZWZpeENoYXIKLSAgICoqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MUHJlZml4Q2hhcihjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KGNoKSB8fCBjaCA9PSAnLicgfHwgY2ggPT0gJy0nIHx8IGNoID09ICdfJyk7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VFbGVtZW50VGV4dAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VFbGVtZW50VGV4dChTdHJpbmcgdGV4dCkKLSAgewotICAgIGlmICh0ZXh0LmluZGV4T2YoJzwnKSAhPSAtMSB8fCB0ZXh0LmluZGV4T2YoJz4nKSAhPSAtMSkKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0VMRU1FTlRfSU5WQUxJRF9DSEFSIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VBdHRyaWJ1dGVWYWx1ZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VBdHRyaWJ1dGVWYWx1ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUuaW5kZXhPZignIicpICE9IC0xIHx8IHZhbHVlLmluZGV4T2YoJzwnKSAhPSAtMSB8fCB2YWx1ZS5pbmRleE9mKCc+JykgIT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9BVFRSSUJVVEVfSU5WQUxJRF9DSEFSIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBwYXJzZUFEQVRBU2VjdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VDREFUQVNlY3Rpb24oU3RyaW5nIHNlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VjdGlvbi5pbmRleE9mKCJdXT4iKSAhPSAtMSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fQ0RBVEFfSU5WQUxJRF9TVFJJTkciKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlUHJvY2Vzc2lpbmdJbnN0cnVjdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRhKFN0cmluZyBkYXRhKQotICB7Ci0gICAgaWYgKGRhdGEuaW5kZXhPZigiPz4iKSAhPSAtMSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fUFJPQ0VTU0lOR19JTlZBTElEX1NUUklORyIpOyAvLyROT04tTkxTLTEkCi0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25UYXJnZXQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uVGFyZ2V0KFN0cmluZyB0YXJnZXQpCi0gIHsKLSAgICBpZiAodGFyZ2V0Lmxlbmd0aCgpID09IDMgJiYgKHRhcmdldC5pbmRleE9mKCJYTUwiKSAhPSAtMSB8fCB0YXJnZXQuaW5kZXhPZigiWE1sIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoIlhtTCIpICE9IC0xIHx8IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgIHRhcmdldC5pbmRleE9mKCJ4TUwiKSAhPSAtMSB8fCB0YXJnZXQuaW5kZXhPZigiWG1sIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoInhNbCIpICE9IC0xIHx8IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgIHRhcmdldC5pbmRleE9mKCJ4bUwiKSAhPSAtMSB8fCB0YXJnZXQuaW5kZXhPZigieG1sIikgIT0gLTEpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX1BST0NFU1NJTkdfVEFSR0VUX0lOVkFMSURfU1RSSU5HIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIH0KLSAgICByZXR1cm4gY2hlY2tYTUxOYW1lKHRhcmdldCk7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc0NvbW1lbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlQ29tbWVudChTdHJpbmcgY29tbWVudCkKLSAgewotICAgIGlmIChjb21tZW50LmluZGV4T2YoIi0tIikgIT0gLTEpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0NPTU1FTlRfSU5WQUxJRF9TVFJJTkciKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBwcmVmaXggY29uZm9ybXMgdG8gdGhlIFhNTCBzcGVjCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja1hNTFByZWZpeChTdHJpbmcgcHJlZml4KQotICB7Ci0gICAgaW50IGxlbmd0aCA9IHByZWZpeC5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGNoYXIgY2hhcmFjdGVyOwotICAgIAotICAgIGlmIChwcmVmaXguaW5kZXhPZigiICIpID49IDApIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4oVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX1BSRUZJWF9IQVNfU1BBQ0UiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgZm9yKGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGNoYXJhY3RlciA9IHByZWZpeC5jaGFyQXQoaW5kZXgpOwotCi0gICAgICBpZighaXNYTUxQcmVmaXhDaGFyKGNoYXJhY3RlcikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRTdHJpbmcoIl9XQVJOX1BSRUZJWF9JTlZBTElEX0NIQVIiLCBTdHJpbmcudmFsdWVPZihjaGFyYWN0ZXIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0NmE3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLklPcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLlhTREdyYXBoVmlld2VyRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciBpbXBsZW1lbnRzIElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIsIElPcGVuSW5OZXdFZGl0b3IgewotCXByaXZhdGUgT2JqZWN0IG9iamVjdDsKLQlwcml2YXRlIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dDsKLQkKLQlwdWJsaWMgVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkKLQl7Ci0JCXRoaXMuZWRpdG9ySW5wdXQgPSBlZGl0b3JJbnB1dDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG9iamVjdCkgewotCQl0aGlzLm9iamVjdCA9IG9iamVjdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgb3BlbkV4dGVybmFsRWRpdG9yKCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQlPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCU9iamVjdCBvcGVuT25Nb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotCQkJCi0JCQlpZiAob3Blbk9uTW9kZWwgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkgewotCQkJICBYU0RDb25jcmV0ZUNvbXBvbmVudCB4c2RDb21wb25lbnQgPSAoWFNEQ29uY3JldGVDb21wb25lbnQpIG9wZW5Pbk1vZGVsOwotCQkJICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0U2NoZW1hKHhzZENvbXBvbmVudCk7Ci0JCQkgIGlmIChzY2hlbWEgPT0gbnVsbCkgcmV0dXJuOwotCQkJICBpZiAoc2NoZW1hLmVSZXNvdXJjZSgpIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLQkJCSAgewotCQkJICAgIFN0cmluZyBmaWxlTmFtZSA9IHNjaGVtYS5lUmVzb3VyY2UoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOwotCQkJICAgIGlmIChmaWxlTmFtZSA9PSBudWxsKSBmaWxlTmFtZSA9ICJXU0RMIjsgLy8kTk9OLU5MUy0xJAotCQkJICAgIFN0cmluZyBlZGl0b3JOYW1lID0gTWVzc2FnZXMuX1VJX0xBQkVMX0lOTElORV9TQ0hFTUFfT0YgKyBmaWxlTmFtZTsKLQkJICAgICAgWFNER3JhcGhWaWV3ZXJEaWFsb2cub3BlbklubGluZVNjaGVtYShlZGl0b3JJbnB1dCwgeHNkQ29tcG9uZW50LCBzY2hlbWEsIGVkaXRvck5hbWUpOwotCQkJICB9Ci0JCQkgIGVsc2UKLQkJCSAgewotCQkJCSAgWFNER3JhcGhWaWV3ZXJEaWFsb2cub3BlblhTREVkaXRvcihlZGl0b3JJbnB1dCwgeHNkQ29tcG9uZW50LmdldFNjaGVtYSgpLCB4c2RDb21wb25lbnQpOwotCQkJICB9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0gIHB1YmxpYyB2b2lkIG9wZW5YU0RFZGl0b3IoKQotICB7Ci0gICAgb3BlbkV4dGVybmFsRWRpdG9yKCk7ICAKLSAgfQotCi0JcHJvdGVjdGVkIFhTRFNjaGVtYSBnZXRTY2hlbWEoWFNEQ29uY3JldGVDb21wb25lbnQgeHNkQ29tcG9uZW50KSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWEgPSB4c2RDb21wb25lbnQuZ2V0U2NoZW1hKCk7Ci0JCWlmIChzY2hlbWEgPT0gbnVsbCkgewotCQkJT2JqZWN0IG5vdGlmaWVyID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQlpZiAobm90aWZpZXIgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkgewotCQkJCXNjaGVtYSA9ICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG5vdGlmaWVyKS5nZXRTY2hlbWEoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYTsKLQl9Ci0JCQotCXB1YmxpYyBib29sZWFuIGxpbmtBcHBsaWNhYmxlKCkgewotCQlib29sZWFuIGFwcGxpY2FibGUgPSB0cnVlOwotCQkKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCUlQYXJhbWV0ZXIgcGFyYW0gPSAoSVBhcmFtZXRlcikgb2JqZWN0OwotCQkJU3RyaW5nIHByZWZpeCA9IHBhcmFtLmdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKTsKLQkJCWlmIChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXguZXF1YWxzKFhTRENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSkpIHsKLQkJCQlhcHBsaWNhYmxlID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBhcHBsaWNhYmxlOwotCX0KLQkKLQlwcm90ZWN0ZWQgT2JqZWN0IGdldE1vZGVsVG9PcGVuT24oT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBvYmplY3QpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCQlyZXR1cm4geHNkRWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCU9iamVjdCBlbGVtZW50T3JUeXBlID0gKChQYXJ0KSBvYmplY3QpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJaWYgKGVsZW1lbnRPclR5cGUgPT0gbnVsbCkgewotCQkJCWVsZW1lbnRPclR5cGUgPSAoKFBhcnQpIG9iamVjdCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIGVsZW1lbnRPclR5cGU7Ci0JCX0KLQkJCi0JCXJldHVybiBvYmplY3Q7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIGlzSW5saW5lU2NoZW1hKElGaWxlIGZpbGUpIHsKLQkJLy8gU2hvdWxkIHRoZXJlIGJlIGEgYmV0dGVyIHRlc3QgZm9yIHRoaXM/ICBUaGUgSUZpbGVzIGFyZSBkaWZmZXJlbnQgc28gd2UgY2FuJ3QgdXNlIGZpbGUgPT0gd3NkbEZpbGUuCi0JCS8vIHJldHVybiBmaWxlLmdldEZ1bGxQYXRoKCkuZXF1YWxzKHdzZGxGaWxlLmdldEZ1bGxQYXRoKCkpOwotICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KSB7Ci0gICAgICBGaWxlU3RvcmVFZGl0b3JJbnB1dCBmaWxlU3RvcmVFZGl0b3JJbnB1dCA9IChGaWxlU3RvcmVFZGl0b3JJbnB1dCllZGl0b3JJbnB1dDsKLSAgICAgIGZpbGUuZ2V0RnVsbFBhdGgoKS5lcXVhbHMoZmlsZVN0b3JlRWRpdG9ySW5wdXQuZ2V0VVJJKCkuZ2V0UGF0aCgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLSAgICAgIElTdG9yYWdlRWRpdG9ySW5wdXQgc3RvcmFnZSA9IChJU3RvcmFnZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIElQYXRoIHBhdGggPSBzdG9yYWdlLmdldFN0b3JhZ2UoKS5nZXRGdWxsUGF0aCgpOwotICAgICAgICBpZiAocGF0aCAhPSBudWxsICYmIHBhdGguZXF1YWxzKGZpbGUuZ2V0RnVsbFBhdGgoKSkpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLSAgICAgIElGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgcmV0dXJuICBmaWxlLmdldEZ1bGxQYXRoKCkuZXF1YWxzKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgfQotCSAgcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQlPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCU9iamVjdCBvcGVuT25Nb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotCi0JCQkvLyBXZSBjaGVjayB0byBlbnN1cmUgaXQncyBlbGVtZW50ICE9IG51bGwuICBJZiBpdCBkb2VzLCB0aGVuIGl0J3MgYSBzaWduIG9mIGEKLQkJCS8vIGJhZCByZWZlcmVuY2UgKGlzIGludmFsaWQpLgotCQkJaWYgKG9wZW5Pbk1vZGVsIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQgJiYgKChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb3Blbk9uTW9kZWwpLmdldEVsZW1lbnQoKSAhPSBudWxsKSB7Ci0JCQkJWFNEQ29uY3JldGVDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvcGVuT25Nb2RlbDsKLQotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBnZXRTY2hlbWEoeHNkQ29tcG9uZW50KTsKLQkJCQlpZiAoc2NoZW1hICE9IG51bGwpIHsKLSAgICAgICAgICBTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBVUklIZWxwZXIucmVtb3ZlUGxhdGZvcm1SZXNvdXJjZVByb3RvY29sKHNjaGVtYS5nZXRTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICBJUGF0aCBzY2hlbWFQYXRoID0gbmV3IFBhdGgoc2NoZW1hTG9jYXRpb24pOwotICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbi5zdGFydHNXaXRoKCJodHRwIikpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLQkJCQkgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVFZGl0b3JJbnB1dCkgewotCQkgIAkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoc2NoZW1hUGF0aCk7Ci0JCQkgIAkJaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpKSB7Ci0JCQkJICAJCXJldHVybiB0cnVlOwotCQkJCQkgIH0KLQkJCQkgIH0KLQkJCQkgIGVsc2UgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgRmlsZVN0b3JlRWRpdG9ySW5wdXQpIHsKLQkJCQkgICAgcmV0dXJuIHRydWU7Ci0vLyBSZXZpc2l0Ci0vLyAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uID0gc2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0vLyAgICAgICAgICAgIHNjaGVtYVBhdGggPSBuZXcgUGF0aChVUklIZWxwZXIucmVtb3ZlUHJvdG9jb2woc2NoZW1hTG9jYXRpb24pKTsKLS8vCQkgICAgICAgIElGaWxlU3RvcmUgZmlsZVN0b3JlID0gRUZTLmdldExvY2FsRmlsZVN5c3RlbSgpLmdldFN0b3JlKHNjaGVtYVBhdGgpOwotLy8JCSAgICAgICAgaWYgKCFmaWxlU3RvcmUuZmV0Y2hJbmZvKCkuaXNEaXJlY3RvcnkoKSAmJiBmaWxlU3RvcmUuZmV0Y2hJbmZvKCkuZXhpc3RzKCkpCi0vLwkJICAgICAgICB7Ci0vLwkJCQkJICAgIHJldHVybiB0cnVlOwotLy8JCSAgICAgICAgfQotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSVN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkgIHJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzaG93UHJldmlldygpIHsKLSAgICBPYmplY3QgeHNkTW9kZWwgPSBudWxsOwotICAgIFN0cmluZyB0aXRsZSA9ICIiOwotICAgIFN0cmluZyBpbmZvID0gIiI7Ci0KLSAgICBPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLSAgICB4c2RNb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotICAgIGlmICh4c2RNb2RlbCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KQotICAgIHsKLSAgICAgIFhTRE5hbWVkQ29tcG9uZW50IG5hbWVkQ29tcG9uZW50ID0gKFhTRE5hbWVkQ29tcG9uZW50KSB4c2RNb2RlbDsKLSAgICAgIHRpdGxlID0gbmFtZWRDb21wb25lbnQuZ2V0TmFtZSgpOwotICAgICAgaW5mbyA9IG5hbWVkQ29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNWYWxpZCgpICYmIHhzZE1vZGVsICE9IG51bGwpCi0gICAgewotICAJCVhTREdyYXBoVmlld2VyRGlhbG9nIGRpYWxvZyA9IG5ldyBYU0RHcmFwaFZpZXdlckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHRpdGxlLCBpbmZvLCB4c2RNb2RlbCwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByZXZpZXciKTsKLSAgCQlkaWFsb2cuc2V0T3BlbkV4dGVybmFsRWRpdG9yKHRoaXMpOwotICAgICAgZGlhbG9nLm9wZW4oKTsKLSAgICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc0YzI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQWRhcHRlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIgewotCXByaXZhdGUgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlciBpbnN0YW5jZTsKLQkKLQlwcml2YXRlIEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OwotCQotCXB1YmxpYyBzdGF0aWMgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCUFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBnZXRXU0RMQWRhcHRlckZhY3RvcnkoKTsKLQkJcmV0dXJuIGZhY3RvcnkuYWRhcHQodGFyZ2V0LCBmYWN0b3J5KTsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldFdTRExBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKGFkYXB0ZXJGYWN0b3J5ID09IG51bGwpIHsKLQkJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeSgpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V1NETEFkYXB0ZXJGYWN0b3J5KEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkpIHsKLQkJYWRhcHRlckZhY3RvcnkgPSBmYWN0b3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMRWRpdG9yVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExFZGl0b3JVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZTdjMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExFZGl0b3JVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLkV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yVXRpbCBleHRlbmRzIFdTRExDb25zdGFudHMgewotCXByb3RlY3RlZCBzdGF0aWMgV1NETEVkaXRvclV0aWwgaW5zdGFuY2U7Ci0JcHJvdGVjdGVkIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0KLQlwcm90ZWN0ZWQgSGFzaE1hcCBlbGVtZW50TmFtZVRvVHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gMTQ7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRSA9IDE1OwotCi0JcHVibGljIHN0YXRpYyBXU0RMRWRpdG9yVXRpbCBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExFZGl0b3JVdGlsKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQotCXB1YmxpYyBXU0RMRWRpdG9yVXRpbCgpIHsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KEJJTkRJTkdfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKEJJTkRJTkcpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERFRklOSVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERFRklOSVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERPQ1VNRU5UQVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KEZBVUxUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihGQVVMVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoSU1QT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTVBPUlQpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElOUFVUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTlBVVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoTUVTU0FHRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoTUVTU0FHRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoT1BFUkFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihPUEVSQVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9VVFBVVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1VUUFVUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQQVJUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQQVJUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQT1JUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBPUlRfVFlQRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoU0VSVklDRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoU0VSVklDRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoVFlQRVNfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFRZUEVTKSk7Ci0JfQotCi0JcHVibGljIGludCBnZXRXU0RMVHlwZShFbGVtZW50IGVsZW1lbnQpIHsKLQkJaW50IHJlc3VsdCA9IC0xOwotCi0JCUludGVnZXIgaW50ZWdlciA9IChJbnRlZ2VyKSBlbGVtZW50TmFtZVRvVHlwZU1hcC5nZXQoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0JCWlmIChpbnRlZ2VyICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl3aGlsZSAoZWxlbWVudCAhPSBudWxsKSB7Ci0JCQlsaXN0LmFkZCgwLCBlbGVtZW50KTsKLQkJCU5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotCQkJZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KSBub2RlIDogbnVsbDsKLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBFbGVtZW50IHRhcmdldEVsZW1lbnQpIHsKLQkJT2JqZWN0IG8gPSBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE1vZGVsT2JqZWN0Rm9yTm9kZShkZWZpbml0aW9uLCB0YXJnZXRFbGVtZW50KTsKLQkJcmV0dXJuIG87Ci0JfQotCi0JcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudEZvck9iamVjdChPYmplY3QgbykgewotCQlyZXR1cm4gKChvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCkgbykuZ2V0RWxlbWVudCgpOwotCX0KLQotCXB1YmxpYyBOb2RlIGdldE5vZGVGb3JPYmplY3QoT2JqZWN0IG8pIHsKLQkJcmV0dXJuIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsKLQl9Ci0KLQkvLyBQcm92aWRlIGEgbWFwcGluZyBiZXR3ZWVuIERlZmluaXRpb25zIGFuZCBJVHlwZVN5c3RlbVByb3ZpZGVycwotLy8gcHJpdmF0ZSBIYXNodGFibGUgdHlwZVN5c3RlbVByb3ZpZGVycyA9IG5ldyBIYXNodGFibGUoKTsKLQlwcml2YXRlIElUeXBlU3lzdGVtUHJvdmlkZXIgdHlwZVN5c3RlbVByb3ZpZGVyOwotCi0JcHVibGljIElUeXBlU3lzdGVtUHJvdmlkZXIgZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlpZiAodHlwZVN5c3RlbVByb3ZpZGVyID09IG51bGwpIHsKLQkJCXR5cGVTeXN0ZW1Qcm92aWRlciA9IG5ldyBFeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyKCk7Ci0JCX0KLQkJcmV0dXJuIHR5cGVTeXN0ZW1Qcm92aWRlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUeXBlU3lzdGVtUHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlcikgewotCQkvLyB0eXBlU3lzdGVtUHJvdmlkZXJzLnB1dChkZWZpbml0aW9uLHR5cGVTeXN0ZW1Qcm92aWRlcik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUpIHsKLQkJUU5hbWUgcW5hbWUgPSBudWxsOwotCQlpZiAocHJlZml4ZWROYW1lICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IHByZWZpeGVkTmFtZS5pbmRleE9mKCI6Iik7IC8vJE5PTi1OTFMtMSQKLS8vIFN0cmluZyBwcmVmaXggPSAoaW5kZXggPT0gLTEpID8gbnVsbCA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJU3RyaW5nIHByZWZpeCA9IChpbmRleCA9PSAtMSkgPyAiIiA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0JCQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JCQkJCXFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHFuYW1lOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50Tm9kZXMoRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQpIHsKLQkJLy8gRm9yIFR5cGVzLCBJIG5lZWQgdG8gZ2V0IGFsbCB0aGUgc2NoZW1hcwotCQlpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBUeXBlcykgewotCQkJVHlwZXMgeHNkRUUgPSAoVHlwZXMpIGV4dGVuc2libGVFbGVtZW50OwotCQkJcmV0dXJuIHhzZEVFLmdldFNjaGVtYXMoKTsKLQkJfQotCQkvKgotCQkgKiBMaXN0IGNoaWxkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJICogCi0JCSAqIEVsZW1lbnQgcGFyZW50RWxlbWVudCA9IGdldEVsZW1lbnRGb3JPYmplY3QoZXh0ZW5zaWJsZUVsZW1lbnQpOyBpZgotCQkgKiAocGFyZW50RWxlbWVudCAhPSBudWxsKSB7Ci0JCSAqIAotCQkgKiBOb2RlTGlzdCBub2RlTGlzdCA9IHBhcmVudEVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOyBpbnQKLQkJICogbm9kZUxpc3RMZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsgZm9yIChpbnQgaSA9IDA7IGkgPAotCQkgKiBub2RlTGlzdExlbmd0aDsgaSsrKSB7IGNoaWxkTGlzdC5hZGQobm9kZUxpc3QuaXRlbShpKSk7IH0gSGFzaE1hcAotCQkgKiBleHRlbnNpYmxlRWxlbWVudFRhYmxlID0gbmV3IEhhc2hNYXAoKTsgZm9yIChJdGVyYXRvciBpID0KLQkJICogZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCSAqIGkuaGFzTmV4dCgpOykgeyBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9Ci0JCSAqIChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50ICE9IG51bGwpIHsKLQkJICogRWxlbWVudCBlbGVtZW50ID0gZ2V0RWxlbWVudEZvck9iamVjdChleHRlbnNpYmlsaXR5RWxlbWVudCk7IGlmCi0JCSAqIChlbGVtZW50ICE9IG51bGwpIHsgZXh0ZW5zaWJsZUVsZW1lbnRUYWJsZS5wdXQoZWxlbWVudCwgZWxlbWVudCk7IH0gfSB9Ci0JCSAqIAotCQkgKiBmb3IgKEl0ZXJhdG9yIGkgPSBjaGlsZExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7IE9iamVjdCBvID0KLQkJICogaS5uZXh0KCk7IGlmIChleHRlbnNpYmxlRWxlbWVudFRhYmxlLmdldChvKSA9PSBudWxsKSB7IGkucmVtb3ZlKCk7IH0gfSB9Ci0JCSAqIHJldHVybiBjaGlsZExpc3Q7Ci0JCSAqLwotCQlyZXR1cm4gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09yaWVudGF0aW9uUmlnaHRUb0xlZnQoKQotCXsKLQkgIGludCBkZWZhdWx0T3JpZW50YXRpb24gPSBTV1QuTk9ORTsKLQkgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLQkgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkKLQkgIHsKLQkgICAgSVdvcmtiZW5jaFdpbmRvdyBhY3RpdmVXb3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0KLQkgICAgLy8gV2UgY291bGQgbm90IGZpbmQgYW55IGtub3duIEFQSSB0byByZXRyaWV2ZSB0aGUgYWN0aXZlIHdvcmtiZW5jaAotCSAgICAvLyB3aW5kb3cgb3JpZW50YXRpb24gd2l0aG91dCB1c2luZyB0aGUgaW50ZXJuYWwgY2xhc3MuCi0KLQkgICAgaWYgKGFjdGl2ZVdvcmtiZW5jaFdpbmRvdyBpbnN0YW5jZW9mIFdvcmtiZW5jaFdpbmRvdykKLQkgICAgewotCSAgICAgIFdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSAoV29ya2JlbmNoV2luZG93KWFjdGl2ZVdvcmtiZW5jaFdpbmRvdzsKLQkgICAgICBkZWZhdWx0T3JpZW50YXRpb24gPSB3b3JrYmVuY2hXaW5kb3cuZ2V0RGVmYXVsdE9yaWVudGF0aW9uKCk7Ci0JICAgIH0KLQkgIH0gICAgICAKLQkgIGJvb2xlYW4gaXNSaWdodFRvTGVmdCA9IFNXVC5SSUdIVF9UT19MRUZUID09IGRlZmF1bHRPcmllbnRhdGlvbjsKLQkgIHJldHVybiBpc1JpZ2h0VG9MZWZ0OwotCX0KLQotICAvKgotCSAqIFJldHVybnMgYSBsaXN0IG9mICdjaGlsZHJlbicgb2YgdGhlIGdpdmVuIG9iamVjdCBtb2RlbCAoV1NETEVsZW1lbnQpLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRNb2RlbEdyYXBoVmlld0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKLQkJTGlzdCBjaGlsZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0JCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgb2JqZWN0OwotCQkJY2hpbGRMaXN0LmFkZEFsbChwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgewotCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9iamVjdDsKLQotCQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQkJY2hpbGRMaXN0LmFkZChvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwotCQkJfQotCQkJaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCWNoaWxkTGlzdC5hZGQob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCQl9Ci0JCQljaGlsZExpc3QuYWRkQWxsKG9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKSk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpIG9iamVjdDsKLQkJCWNoaWxkTGlzdC5hZGQobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCi0JCXJldHVybiBjaGlsZExpc3Q7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKFN0cmluZyB1cmkpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCh1cmkpOwotCQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCQkJcmVzdWx0ID0gV1NETEVkaXRvclV0aWwuZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKGlucHV0U3RyZWFtKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZVVSSUZvclNjaGVtYShJbnB1dFN0cmVhbSBpbnB1dCkgewotCQlUYXJnZXROYW1lc3BhY2VVUklDb250ZW50SGFuZGxlciBoYW5kbGVyID0gbmV3IFRhcmdldE5hbWVzcGFjZVVSSUNvbnRlbnRIYW5kbGVyKCk7Ci0JCUNsYXNzTG9hZGVyIHByZXZDbGFzc0xvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFdTRExFZGl0b3JVdGlsLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwotCQl0cnkgewotCQkJWE1MUmVhZGVyIHJlYWRlciA9IG9yZy54bWwuc2F4LmhlbHBlcnMuWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIoKTsKLQkJCXJlYWRlci5zZXRDb250ZW50SGFuZGxlcihoYW5kbGVyKTsKLQkJCXJlYWRlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UoaW5wdXQpKTsKLQkJfQotCQljYXRjaCAoU3RvcFBhcnNlRXhjZXB0aW9uIGUpIHsKLQkJCS8vIHRoaXMgaXMgYSBub3JtYWwgZXhjZXB0aW9uIHRvIHN0b3AgcGFyc2luZyBlYXJseSwKLQkJCS8vIHdoZW4gaW5mbyBpcyBmb3VuZCwgc28gd2UgY2FuIHNhZmVseSBpZ25vcmUKLQkJfQotCQljYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCS8vIFRPRE86IHRoZXNlIHNob3VsZCBiZSBsb2dnZWQsIGJ1dCB0aGUgb2J2aW91cyBjaG9pY2UsCi0JCQkvLyBXU0RMRWRpdG9yUGx1Z2luLmxvZ01lc3NhZ2UobWVzc2FnZSkgaXMgYW4gZW1weSBpbXBsZW1lbnRhdGlvbiwKLQkJCS8vIHNvLCBmb3Igbm93LCB3ZSdsbCBhdCBsZWFzdCBwcmludCBvdXQuCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBsb2dnZWQsIGJ1dCB0aGUgb2J2aW91cyBjaG9pY2UsCi0JCQkvLyBXU0RMRWRpdG9yUGx1Z2luLmxvZ01lc3NhZ2UobWVzc2FnZSkgaXMgYW4gZW1weSBpbXBsZW1lbnRhdGlvbiwKLQkJCS8vIHNvLCBmb3Igbm93LCB3ZSdsbCBhdCBsZWFzdCBwcmludCBvdXQuCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIocHJldkNsYXNzTG9hZGVyKTsKLQkJfQotCQlyZXR1cm4gaGFuZGxlci50YXJnZXROYW1lc3BhY2VVUkk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBpcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoYXQgaXMgdXNlZCB0byBzdG9wIHBhcnNpbmcgd2hlbiByZXF1aXJlZAotCSAqIGluZm9ybWF0aW9uIGlzIGZvdW5kLgotCSAqLwotCXN0YXRpYyBjbGFzcyBTdG9wUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gewotCQlzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQkJLyoqCi0JCSAqIENvbnN0cnVjdG9yIFN0b3BQYXJzZUV4Y2VwdGlvbi4KLQkJICovCi0JCVN0b3BQYXJzZUV4Y2VwdGlvbigpIHsKLQkJCXN1cGVyKCJ0YXJnZXRuYW1lc3BhY2UgZm91bmQsIG5vIG5lZWQgdG8gY29udGludWUgdGhlIHBhcnNlIik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFRhcmdldE5hbWVzcGFjZVVSSUNvbnRlbnRIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgewotCi0KLQkJcHVibGljIFN0cmluZyB0YXJnZXROYW1lc3BhY2VVUkk7Ci0KLQkJcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCWlmIChsb2NhbE5hbWUuZXF1YWxzKCJzY2hlbWEiKSB8fCBsb2NhbE5hbWUuZXF1YWxzKCJkZWZpbml0aW9ucyIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXsKLQkJCQlpbnQgbkF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbkF0dHJpYnV0ZXM7IGkrKykgewotCQkJCQlpZiAoYXR0cmlidXRlcy5nZXRMb2NhbE5hbWUoaSkuZXF1YWxzKCJ0YXJnZXROYW1lc3BhY2UiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQl7Ci0JCQkJCQl0YXJnZXROYW1lc3BhY2VVUkkgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKGkpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl0aHJvdyBuZXcgU3RvcFBhcnNlRXhjZXB0aW9uKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETEltcG9ydE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMSW1wb3J0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDcwNzZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMSW1wb3J0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnV0aWwuWFNERGlyZWN0aXZlc01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwZXJmb3JtcyBjbGVhbnVwL3JlbW92YWwgb2YgdW51c2VkIFdTREwgaW1wb3J0cywgdW51c2VkIFhTRCBpbXBvcnRzIGFuZCBpbmNsdWRlcyBmcm9tIAotICogaW5saW5lIFhNTCBTY2hlbWFzLCBhbmQgeG1sbnMgZW50cmllcy4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydE1hbmFnZXIgZXh0ZW5kcyBYU0REaXJlY3RpdmVzTWFuYWdlcgotewotICAvLyBUaGUgZGVmaW5pdGlvbiB0byBtb2RpZnkKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgLy8gTWFwIG9mIGlubGluZSBzY2hlbWFzIGFuZCB0aGVpciB1c2VkIHByZWZpeGVzCi0gIHByb3RlY3RlZCBNYXAgc2NoZW1hVG9Vc2VkUHJlZml4ZXNNYXA7Ci0gIC8vIE1hcCBvZiBpbmxpbmUgc2NoZW1hcyBhbmQgdGhlaXIgdW51c2VkIHByZWZpeGVzCi0gIHByb3RlY3RlZCBNYXAgc2NoZW1hVG9VbnVzZWRQcmVmaXhlc01hcDsKLSAgLy8gU2V0IG9mIHVzZWQgcHJlZml4ZXMgaW4gdGhlIFdTREwgZG9jdW1lbnQncyBYTUwgbmFtZXNwYWNlIHRhYmxlCi0gIHByb3RlY3RlZCBTZXQgdXNlZFdTRExQcmVmaXhlczsKLSAgLy8gU2V0IG9mIHVudXNlZCBwcmVmaXhlcyBpbiB0aGUgV1NETCBkb2N1bWVudCdzIFhNTCBuYW1lc3BhY2UgdGFibGUKLSAgcHJvdGVjdGVkIFNldCB1bnVzZWRXU0RMUHJlZml4ZXM7Ci0gIC8vIExpc3Qgb2YgdXNlZCBkZWZpbml0aW9ucywgY29tcHV0ZWQgZnJvbSB0aGUgY3Jvc3MgcmVmZXJlbmNlcgotICBwcm90ZWN0ZWQgTGlzdCB1c2VkRGVmaW5pdGlvbnM7Ci0gIC8vIExpc3Qgb2YgdW51c2VkIFdTREwgSW1wb3J0cyB0byBiZSByZW1vdmVkCi0gIHByb3RlY3RlZCBMaXN0IHVudXNlZFdTRExJbXBvcnRzOwotCi0gIHB1YmxpYyBXU0RMSW1wb3J0TWFuYWdlcigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlVW51c2VkSW1wb3J0cyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICAvLyBPbmx5IGRvIHRoZSByZW1vdmFsIGlmIHRoZSBwcmVmZXJlbmNlIGlzIHR1cm5lZCBvbgotICAgIGlmIChXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UmVtb3ZlSW1wb3J0U2V0dGluZygpKQotICAgIHsKLSAgICAgIFdTRExJbXBvcnRNYW5hZ2VyIG1nciA9IG5ldyBXU0RMSW1wb3J0TWFuYWdlcigpOwotICAgICAgbWdyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgICAgbWdyLmNsZWFudXAoKTsKLSAgICB9Ci0gIH0KLSAKLSAgLyoqCi0gICAqIE1haW4gbWV0aG9kIHRvIGRvIHRoZSBjbGVhbiB1cC4KLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZW1vdmFsKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgLy8gQ29tcHV0ZSB1bnVzZWQgV1NETCBJbXBvcnRzLCB1bnVzZWQgaW1wb3J0cyBmcm9tIGlubGluZSBzY2hlbWFzLCBhbmQgdW51c2VkIHByZWZpeGVzCi0gICAgY29tcHV0ZVVudXNlZEltcG9ydHMoZGVmaW5pdGlvbik7Ci0gICAgLy8gUmVtb3ZlIHRoZSBpbXBvcnRzCi0gICAgcmVtb3ZlVW51c2VkSW1wb3J0cygpOwotICAgIC8vIFJlbW92ZSB0aGUgcHJlZml4ZXMKLSAgICByZW1vdmVVbnVzZWRQcmVmaXhlcygpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGwgdGhlIHVudXNlZCBkaXJlY3RpdmVzIGZyb20gaW5saW5lIHNjaGVtYXMgdG8gcmVtb3ZlCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0aGUgdW51c2VkIGRpcmVjdGl2ZXMgZnJvbSBpbmxpbmUgc2NoZW1hcyB0byByZW1vdmUKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFVudXNlZEltcG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIHVudXNlZERpcmVjdGl2ZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHRoZSB1bnVzZWQgV1NETCBpbXBvcnRzIHRvIHJlbW92ZQotICAgKiAKLSAgICogQHJldHVybiBsaXN0IG9mIHVudXNlZCBXU0RMIEltcG9ydHMKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFdTRExVbnVzZWRJbXBvcnRzKCkKLSAgewotICAgIHJldHVybiB1bnVzZWRXU0RMSW1wb3J0czsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHVudXNlZCBwcmVmaXhlcyBpbiB0aGUgWE1MIE5hbWVzcGFjZSB0YWJsZSBvZiB0aGUgV1NETCBmaWxlCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgdW51c2VkIHByZWZpeGVzIGluIHRoZSBYTUwgTmFtZXNwYWNlIHRhYmxlIG9mIHRoZSBXU0RMIGZpbGUKLSAgICovCi0gIHB1YmxpYyBTZXQgZ2V0VW51c2VkV1NETFByZWZpeGVzKCkKLSAgewotICAgIHJldHVybiB1bnVzZWRXU0RMUHJlZml4ZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIGNvbXB1dGVzIHRoZSBsaXN0IG9mIHVudXNlZCBpbXBvcnRzIGZvciBhIGRlZmluaXRpb24gYW5kIGl0cyBpbmxpbmUgc2NoZW1hcwotICAgKiBAcGFyYW0gZGVmaW5pdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZVVudXNlZEltcG9ydHMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgTGlzdCB1c2VkU2NoZW1hcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICB1bnVzZWREaXJlY3RpdmVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHVzZWRQcmVmaXhlcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgc2NoZW1hVG9QcmVmaXhNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIAotICAgIHNjaGVtYVRvVXNlZFByZWZpeGVzTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBzY2hlbWFUb1VudXNlZFByZWZpeGVzTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAKLSAgICB1c2VkRGVmaW5pdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgdW51c2VkV1NETEltcG9ydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgdXNlZFdTRExQcmVmaXhlcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgdW51c2VkV1NETFByZWZpeGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAKLSAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIENvbXB1dGUgY3Jvc3MgcmVmZXJlbmNlcwotICAgICAgICBNYXAgeHNkTmFtZWRDb21wb25lbnRVc2FnZSA9IFRvcExldmVsQ29tcG9uZW50Q3Jvc3NSZWZlcmVuY2VyLmZpbmQoZGVmaW5pdGlvbik7Ci0KLSAgICAgICAgLy8gTm93IGZpbmQgdW51c2VkIGltcG9ydHMgZnJvbSBlYWNoIGlubGluZSBzY2hlbWEKLSAgICAgICAgZm9yIChJdGVyYXRvciBzY2hlbWFJdGVyYXRvciA9IHR5cGVzLmdldFNjaGVtYXMoKS5pdGVyYXRvcigpOyBzY2hlbWFJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpIHNjaGVtYUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBuZWVkIHRvIHJlc2V0IHRoaXMgZm9yIGVhY2ggaW5saW5lIHNjaGVtYQotICAgICAgICAgIHVzZWRQcmVmaXhlcy5jbGVhcigpOwotCi0gICAgICAgICAgLy8gU3RlcCBPbmUuICBGaW5kIGFkZGl0aW9uYWwgdW51c2VkIGltcG9ydHMgdXNpbmcgY3Jvc3MgcmVmZXJlbmNlcgotICAgICAgICAgIGRvQ3Jvc3NSZWZlcmVuY2VyKHNjaGVtYSwgdXNlZFNjaGVtYXMsIHhzZE5hbWVkQ29tcG9uZW50VXNhZ2UpOwotCi0gICAgICAgICAgLy8gU3RlcCBUd28uICBVcGRhdGUgdGhlIHVudXNlZEltcG9ydCBsaXN0IGdpdmVuIHRoZSBsaXN0IG9mIHVzZWQgc2NoZW1hcyBvYnRhaW5lZCBmcm9tIGNyb3NzIHJlZmVyZW5jaW5nCi0gICAgICAgICAgYWRkVG9VbnVzZWRJbXBvcnRzKHNjaGVtYSwgdXNlZFNjaGVtYXMpOwotCi0gICAgICAgICAgLy8gU3RlcCBUaHJlZS4gQ29tcHV0ZSB1bnVzZWQgeG1sbnMgZW50cmllcwotICAgICAgICAgIGNvbXB1dGVVbnVzZWRQcmVmaXhlcyhzY2hlbWEpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHVudXNlZERpcmVjdGl2ZXMuY2xlYXIoKTsKLSAgICAgICAgc2NoZW1hVG9QcmVmaXhNYXAuY2xlYXIoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTmV4dCwgY29tcHV0ZSB1bnVzZWQgV1NETCBpbXBvcnRzCi0gICAgY29tcHV0ZVVzZWREZWZpbml0aW9ucyhkZWZpbml0aW9uKTsKLSAgICAKLSAgICAvLyBBbmFseXplIHRoZSBjdXJyZW50IHhtbCBucyB0YWJsZSBmb3IgdGhlIGRlZmluaXRpb24gYW5kIGRldGVybWluZSBsaXN0IG9mIHVzZWQgcHJlZml4ZXMKLSAgICBhbmFseXplRGVmaW5pdGlvblhNTE5TVGFibGUoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgY29tcHV0ZSB0aGUgbGlzdCBvZiB1bnVzZWQgaW1wb3J0cwotICAgIGNvbXB1dGVVbnVzZWRXU0RMSW1wb3J0cyhkZWZpbml0aW9uKTsKLSAgICAKLSAgICAvLyBGaW5hbGx5LCBjb21wdXRlIHVudXNlZCBwcmVmaXhlcyBmb3IgdGhlIGRlZmluaXRpb24KLSAgICB1bnVzZWRXU0RMUHJlZml4ZXMgPSBjb21wdXRlVW51c2VkUHJlZml4ZXMoZGVmaW5pdGlvbik7Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGNvbXB1dGVzIHRoZSBsaXN0IG9mIHVudXNlZCBXU0RMIEltcG9ydHMgYW5kIHVwZGF0ZXMgbGlzdCBvZiB1c2VkIHByZWZpeGVzIAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNvbXB1dGVVc2VkRGVmaW5pdGlvbnMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgLy8gRmluZCBjcm9zcyByZWZlcmVuY2VzCi0gICAgTWFwIHdzZGxOYW1lZENvbXBvbmVudFVzYWdlID0gV1NETE5hbWVkQ29tcG9uZW50Q3Jvc3NSZWZlcmVuY2VyLmZpbmQoZGVmaW5pdGlvbik7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB3c2RsTmFtZWRDb21wb25lbnRVc2FnZS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRGVmaW5pdGlvbiB3c2RsRWxlbWVudERlZiA9IHdzZGxFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIAotICAgICAgaWYgKHdzZGxFbGVtZW50RGVmID09IGRlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQ29sbGVjdGlvbil3c2RsTmFtZWRDb21wb25lbnRVc2FnZS5nZXQod3NkbEVsZW1lbnQpOwotICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gY29sbGVjdGlvbi5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBTZXR0aW5nIHNldHRpbmcgPSAoU2V0dGluZykgaXRlci5uZXh0KCk7Ci0gICAgICAgIE9iamVjdCBvYmogPSBzZXR0aW5nLmdldEVPYmplY3QoKTsKLSAgICAgICAgLy8gSWYgY29tcG9uZW50IGlzIHVzZWQsIHRoZW4gbWFyayBpdHMgZGVmaW5pdGlvbiBhcyB1c2VkIHdoaWNoIHdlIHdpbGwKLSAgICAgICAgLy8gdXNlIGxhdGVyIHRvIGNvbXBhcmUgd2l0aCB0aGUgaW1wb3J0J3MgZGVmaW5pdGlvbgotICAgICAgICBpZiAoaXNDb21wb25lbnRVc2VkKG9iaiwgZGVmaW5pdGlvbiwgd3NkbEVsZW1lbnREZWYpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCF1c2VkRGVmaW5pdGlvbnMuY29udGFpbnMod3NkbEVsZW1lbnREZWYpKQotICAgICAgICAgICAgdXNlZERlZmluaXRpb25zLmFkZCh3c2RsRWxlbWVudERlZik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjb21wdXRlVW51c2VkV1NETEltcG9ydHMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IGl0ZXIubmV4dCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcG9ydCkKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IGltcCA9IChJbXBvcnQpb2JqOwotICAgICAgICBEZWZpbml0aW9uIGRlZiA9IGltcC5nZXRFRGVmaW5pdGlvbigpOwotICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gaW1wLmdldEVTY2hlbWEoKTsKLSAgICAgICAgYm9vbGVhbiBpc1VzZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGRlZiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciB1c2VkRGVmID0gdXNlZERlZmluaXRpb25zLml0ZXJhdG9yKCk7IHVzZWREZWYuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZpbml0aW9uIHVzZWQgPSAoRGVmaW5pdGlvbikgdXNlZERlZi5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAodXNlZCA9PSBkZWYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlzVXNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSBpbXAuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgTWFwIGRlZlByZWZpeE1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICAgIFNldCB3c2RsS2V5cyA9IGRlZlByZWZpeE1hcC5rZXlTZXQoKTsKLSAgICAgICAgICBib29sZWFuIHByZWZpeEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgU3RyaW5nIHByZWYgPSBudWxsOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSB3c2RsS2V5cy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByZWYgPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyBhTlMgPSAoU3RyaW5nKWRlZlByZWZpeE1hcC5nZXQocHJlZik7Ci0gICAgICAgICAgICBpZiAoKGFOUyAhPSBudWxsICYmIGFOUy5lcXVhbHMobnMpKSB8fCAoYU5TID09IG5zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHJlZml4Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHByZWZpeEZvdW5kICYmICh1c2VkUHJlZml4ZXMuY29udGFpbnMocHJlZikgfHwgdXNlZFdTRExQcmVmaXhlcy5jb250YWlucyhwcmVmKSkpCi0gICAgICAgICAgICBpc1VzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghaXNVc2VkKQotICAgICAgICB7Ci0gICAgICAgICAgdW51c2VkV1NETEltcG9ydHMuYWRkKGltcCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSB1bnVzZWQgZGlyZWN0aXZlcyBhbmQgdW51c2VkIFdTREwgaW1wb3J0cwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlVW51c2VkSW1wb3J0cygpCi0gIHsKLSAgICBzdXBlci5yZW1vdmVVbnVzZWRJbXBvcnRzKCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHVudXNlZFdTRExJbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gKEltcG9ydCkgaXRlci5uZXh0KCk7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotICAgICAgCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQotICAgICAgaWYgKGRvYyBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgICAgICAoKElET01Ob2RlKWRvYykuZ2V0TW9kZWwoKS5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghcmVtb3ZlVGV4dE5vZGVzQmV0d2Vlbk5leHRFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVtb3ZlVGV4dE5vZGVCZXR3ZWVuUHJldmlvdXNFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpLnJlbW92ZUNoaWxkKGVsZW1lbnQpOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICBpZiAoZG9jIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgICAgICAoKElET01Ob2RlKWRvYykuZ2V0TW9kZWwoKS5jaGFuZ2VkTW9kZWwoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTWFyayBkZWZpbml0aW9uJ3MgdGFyZ2V0IG5hbWVzcGFjZSBwcmVmaXgsIGFuZCBXU0RMIG5hbWVzcGFjZSBwcmVmaXggYXMgdXNlZC4KLSAgICogQWxzbyBmaW5kIHByZWZpeGVzIHVzZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqLwotICBwcml2YXRlIHZvaWQgYW5hbHl6ZURlZmluaXRpb25YTUxOU1RhYmxlKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFN0cmluZyBwcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICB1c2VkV1NETFByZWZpeGVzLmFkZChwcmVmaXgpOwotICAgIAotICAgIFN0cmluZyB3c2RsUHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOwotICAgIHVzZWRXU0RMUHJlZml4ZXMuYWRkKHdzZGxQcmVmaXgpOwotICAgIAotICAgIEVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIAotICAgIE5vZGVMaXN0IGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbGVuZ3RoID0gY2hpbGRFbGVtZW50cy5nZXRMZW5ndGgoKTsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IGNoaWxkRWxlbWVudHMuaXRlbShpbmRleCk7Ci0gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlRE9NRWxlbWVudCgoRWxlbWVudClub2RlLCBkZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSB1bnVzZWQgcHJlZml4ZXMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSdzIFhNTCBuYW1lc3BhY2UgdGFibGVzIGFzIHdlbGwgYXMgdGhlCi0gICAqIHVudXNlZCBwcmVmaXhlcyBpbiB0aGUgV1NETCdzIG5hbWVzcGFjZSB0YWJsZQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlVW51c2VkUHJlZml4ZXMoKQotICB7Ci0gICAgc3VwZXIucmVtb3ZlVW51c2VkUHJlZml4ZXMoKTsKLQotICAgIE1hcCBkZWZQcmVmaXhNYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICAKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSB1bnVzZWRXU0RMUHJlZml4ZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyaW5nID0gKFN0cmluZylpdGVyLm5leHQoKTsKLSAgICAgIC8vIGJ1Zywga2V5IGlzICIiIG5vdCBudWxsCi0gICAgICBkZWZQcmVmaXhNYXAucmVtb3ZlKHN0cmluZyAhPSBudWxsID8gc3RyaW5nIDogIiIpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoc3RyaW5nICE9IG51bGwpCi0gICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoWE1MTlMgKyAiOiIgKyBzdHJpbmcpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShYTUxOUyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgdW51c2VkIHByZWZpeGVzIAotICAgKiBAcGFyYW0gZGVmaW5pdGlvbgotICAgKiBAcmV0dXJuIHNldCBvZiB1bnVzZWQgcHJlZml4ZXMKLSAgICovCi0gIHByaXZhdGUgU2V0IGNvbXB1dGVVbnVzZWRQcmVmaXhlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBNYXAgZGVmUHJlZml4TWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgU2V0IHdzZGxLZXlzID0gZGVmUHJlZml4TWFwLmtleVNldCgpOwotICAgIAotICAgIFNldCBuZXRTZXQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgVHlwZXMgZVR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICBMaXN0IGV4dEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChlVHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBleHRFbGVtZW50cyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZm9yIChJdGVyYXRvciBlZUl0ZXIgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOyBlZUl0ZXIuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBlZSA9IGVlSXRlci5uZXh0KCk7Ci0gICAgICAgIGlmIChlZSBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRXggPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWU7Ci0gICAgICAgICAgWFNEU2NoZW1hIGlubGluZVhTRCA9IHhzZEV4LmdldFNjaGVtYSgpOwotICAgICAgICAgIHVzZWRXU0RMUHJlZml4ZXMuYWRkKGlubGluZVhTRC5nZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBmb3IgKEl0ZXJhdG9yIHdzZGxJdGVyID0gd3NkbEtleXMuaXRlcmF0b3IoKTsgd3NkbEl0ZXIuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgU3RyaW5nIGFXc2RsUHJlZml4ID0gKFN0cmluZyl3c2RsSXRlci5uZXh0KCk7Ci0gICAgICBpZiAoYVdzZGxQcmVmaXggIT0gbnVsbCAmJiBhV3NkbFByZWZpeC5lcXVhbHMoIiIpKSBhV3NkbFByZWZpeCA9IG51bGw7Ci0KLSAgICAgIFN0cmluZyBuc0ZvcldTRExQcmVmaXggPSAoU3RyaW5nKWRlZlByZWZpeE1hcC5nZXQoYVdzZGxQcmVmaXgpOwotICAgICAgCi0gICAgICAvLyBJZiB0aGUgd3NkbCBwcmVmaXggaXMgbm90IHJlZmVyZW5jZWQgYnkgYW55IHdzZGwgY29tcG9uZW50IG90aGVyIHRoYW4KLSAgICAgIC8vIHRoZSBpbXBvcnQgdGhlbiBjaGVjayBpZiB0aGUgaW5saW5lIHNjaGVtYXMgcmVmZXJlbmNlIHRoYXQgcHJlZml4L25zLgotICAgICAgaWYgKCF1c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKGFXc2RsUHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBjYW5SZW1vdmVXU0RMUHJlZml4ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgZWVJdGVyID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsgZWVJdGVyLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IGVlID0gZWVJdGVyLm5leHQoKTsKLSAgICAgICAgICBpZiAoZWUgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFeCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCllZTsKLSAgICAgICAgICAgIFhTRFNjaGVtYSBpbmxpbmVYU0QgPSB4c2RFeC5nZXRTY2hlbWEoKTsKLSAgICAgICAgICAgIE1hcCBpbmxpbmVYU0RNYXAgPSBpbmxpbmVYU0QuZ2V0UU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCgpOwotCi0gICAgICAgICAgICBTZXQgdXNlZElubGluZVhTRFByZWZpeGVzID0gKFNldClzY2hlbWFUb1VzZWRQcmVmaXhlc01hcC5nZXQoaW5saW5lWFNEKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVzZWRJbmxpbmVYU0RQcmVmaXhlcy5jb250YWlucyhhV3NkbFByZWZpeCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBuc0ZvclhTRFByZWZpeCA9IChTdHJpbmcpaW5saW5lWFNETWFwLmdldChhV3NkbFByZWZpeCk7Ci0gICAgICAgICAgICAgIGlmICgobnNGb3JYU0RQcmVmaXggIT0gbnVsbCAmJiBuc0ZvclhTRFByZWZpeC5lcXVhbHMobnNGb3JXU0RMUHJlZml4KSkgfHwKLSAgICAgICAgICAgICAgICAgIChuc0ZvclhTRFByZWZpeCA9PSBudWxsICYmIG5zRm9yV1NETFByZWZpeCA9PSBudWxsKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhblJlbW92ZVdTRExQcmVmaXggPSBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY2FuUmVtb3ZlV1NETFByZWZpeCkKLSAgICAgICAgICBuZXRTZXQuYWRkKGFXc2RsUHJlZml4KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ldFNldDsKLSAgfQotICAKLSAgLyoqCi0gICAqIE5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgaW5saW5lIHNjaGVtYXMgYW5kIHRoZWlyIHByZWZpeGVzCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkb0FkZGl0aW9uYWxQcm9jZXNzaW5nKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICBzY2hlbWFUb1VzZWRQcmVmaXhlc01hcC5wdXQoc2NoZW1hLCBuZXcgSGFzaFNldCh1c2VkUHJlZml4ZXMpKTsKLSAgICBzY2hlbWFUb1VudXNlZFByZWZpeGVzTWFwLnB1dChzY2hlbWEsIG5ldyBIYXNoU2V0KHVudXNlZFByZWZpeGVzKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGaW5kIHByZWZpeGVzIHRoYXQgYXJlIGluIHRoZSBkb2N1bWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZURPTUVsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmcgcHJlZml4ID0gZWxlbWVudC5nZXRQcmVmaXgoKTsKLSAgICB1c2VkV1NETFByZWZpeGVzLmFkZChwcmVmaXgpOwotICAgIAotICAgIE5hbWVkTm9kZU1hcCBhdHRycyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgIGludCBudW1PZkF0dHJzID0gYXR0cnMuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bU9mQXR0cnM7IGluZGV4KyspCi0gICAgewotICAgICAgTm9kZSBub2RlID0gYXR0cnMuaXRlbShpbmRleCk7Ci0gICAgICBTdHJpbmcgYXR0clByZWZpeCA9IG5vZGUuZ2V0UHJlZml4KCk7Ci0gICAgICBpZiAoYXR0clByZWZpeCAhPSBudWxsICYmICFhdHRyUHJlZml4LmVxdWFscyhYTUxOUykpIC8vIFRoaXMgaXMgdG8gYXZvaWQgYWRkaW5nIHRoZSB4bWxucyBmb3IgdGhlIHNjaGVtYSBhdHRyaWJ1dGVzCi0gICAgICB7Ci0gICAgICAgIHVzZWRXU0RMUHJlZml4ZXMuYWRkKGF0dHJQcmVmaXgpOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmcgYXR0ciA9IG5vZGUuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7Ci0gICAgICAgIGlmIChhdHRyLmVxdWFscyhXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFKSB8fAotICAgICAgICAgICAgYXR0ci5lcXVhbHMoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkgfHwKLSAgICAgICAgICAgIGF0dHIuZXF1YWxzKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpIHx8Ci0gICAgICAgICAgICBhdHRyLmVxdWFscyhXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICAgICAgewotICAgICAgICAgIHVzZWRXU0RMUHJlZml4ZXMuYWRkKGV4dHJhY3RQcmVmaXgodmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBOb2RlTGlzdCBjaGlsZEVsZW1lbnRzID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgaW50IGxlbmd0aCA9IGNoaWxkRWxlbWVudHMuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBjaGlsZEVsZW1lbnRzLml0ZW0oaW5kZXgpOwotICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBpZiAoWFNEQ29uc3RhbnRzLlNDSEVNQV9FTEVNRU5UX1RBRy5lcXVhbHMoKChFbGVtZW50KW5vZGUpLmdldExvY2FsTmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHVzZWRXU0RMUHJlZml4ZXMuYWRkKG5vZGUuZ2V0UHJlZml4KCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRyYXZlcnNlRE9NRWxlbWVudCgoRWxlbWVudClub2RlLCBkZWZpbml0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgdGhlIG9iamVjdCB0byBiZSBhbmFseXplZCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBpbmxpbmUgc2NoZW1hCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NvbXBvbmVudFVzZWQoT2JqZWN0IG9iaiwgWFNEU2NoZW1hIHNjaGVtYSwgWFNEU2NoZW1hIHRhcmdldFNjaGVtYSkKLSAgewotICAgIGlmIChvYmogaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3VwZXIuaXNDb21wb25lbnRVc2VkKG9iaiwgc2NoZW1hLCB0YXJnZXRTY2hlbWEpOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBQYXJ0KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBvYmo7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbSA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgaWYgKGVsZW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyByZWZlcmVuY2UgYmVsb25ncyB0byB0aGUgaW1wb3J0ZWQgc2NoZW1hLCBzbyBpdCBpcyB1c2VkLgotICAgICAgICBpZiAoZWxlbS5nZXRTY2hlbWEoKSA9PSB0YXJnZXRTY2hlbWEpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJ0LmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSk7Ci0gICAgICAgICAgU3RyaW5nIHByZWYgPSBleHRyYWN0UHJlZml4KHZhbHVlKTsKLSAgICAgICAgICB1c2VkUHJlZml4ZXMuYWRkKHByZWYpOwotICAgICAgICAgIHVzZWRXU0RMUHJlZml4ZXMuYWRkKHByZWYpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAodHlwZSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUaGlzIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHRoZSBpbXBvcnRlZCBzY2hlbWEsIHNvIGl0IGlzIHVzZWQuCi0gICAgICAgIGlmICh0eXBlLmdldFNjaGVtYSgpID09IHRhcmdldFNjaGVtYSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnQuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKTsKLSAgICAgICAgICBTdHJpbmcgcHJlZiA9IGV4dHJhY3RQcmVmaXgodmFsdWUpOwotICAgICAgICAgIHVzZWRQcmVmaXhlcy5hZGQocHJlZik7Ci0gICAgICAgICAgdXNlZFdTRExQcmVmaXhlcy5hZGQocHJlZik7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogY2xlYXIgb3V0IG1hcHMKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNsZWFyTWFwcygpCi0gIHsKLSAgICBzdXBlci5jbGVhck1hcHMoKTsKLSAgICBpZiAoc2NoZW1hVG9Vc2VkUHJlZml4ZXNNYXAgIT0gbnVsbCkKLSAgICAgIHNjaGVtYVRvVXNlZFByZWZpeGVzTWFwLmNsZWFyKCk7Ci0gICAgaWYgKHNjaGVtYVRvVW51c2VkUHJlZml4ZXNNYXAgIT0gbnVsbCkKLSAgICAgIHNjaGVtYVRvVW51c2VkUHJlZml4ZXNNYXAuY2xlYXIoKTsKLSAgICBpZiAodXNlZERlZmluaXRpb25zICE9IG51bGwpCi0gICAgICB1c2VkRGVmaW5pdGlvbnMuY2xlYXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBvYmplY3QgdG8gYmUgYW5hbHl6ZWQgaXMgcmVmZXJlbmNlZCBieSB0aGUgZGVmaW5pdGlvbgotICAgKiBAcGFyYW0gb2JqCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqIEBwYXJhbSB0YXJnZXREZWZpbml0aW9uCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQ29tcG9uZW50VXNlZChPYmplY3Qgb2JqLCBEZWZpbml0aW9uIGRlZmluaXRpb24sIERlZmluaXRpb24gdGFyZ2V0RGVmaW5pdGlvbikKLSAgewotICAgIGlmIChvYmogaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCBjb21wb25lbnQgPSAoV1NETEVsZW1lbnQpIG9iajsKLSAgICAgIGlmIChjb21wb25lbnQgPT0gZGVmaW5pdGlvbiB8fCBjb21wb25lbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBjcm9zcyByZWZlcmVuY2VyIGZvciBtb3JlIGRldGFpbHMuIAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIgZXh0ZW5kcyBFY29yZVV0aWwuQ3Jvc3NSZWZlcmVuY2VyCi0gIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAgIHByb3RlY3RlZCBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIoRU9iamVjdCBlT2JqZWN0KQotICAgIHsKLSAgICAgIHN1cGVyKGVPYmplY3QpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIoUmVzb3VyY2UgcmVzb3VyY2UpCi0gICAgewotICAgICAgc3VwZXIocmVzb3VyY2UpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIoUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQpCi0gICAgewotICAgICAgc3VwZXIocmVzb3VyY2VTZXQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIoQ29sbGVjdGlvbiBlbWZPYmplY3RzKQotICAgIHsKLSAgICAgIHN1cGVyKGVtZk9iamVjdHMpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGNvbnRhaW5tZW50KEVPYmplY3QgZU9iamVjdCkKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgc2V0dGluZyBjb2xsZWN0aW9uIGZvciBhbnkgbmFtZWQgY29tcG9uZW50LgotICAgICAgLy8KLSAgICAgIGlmIChpc1dTRExOYW1lZENvbXBvbmVudChlT2JqZWN0KSkKLSAgICAgIHsKLSAgICAgICAgZ2V0Q29sbGVjdGlvbihlT2JqZWN0KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc1dTRExOYW1lZENvbXBvbmVudChFT2JqZWN0IGVPYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuIGVPYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlIHx8IGVPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSB8fCBlT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZyB8fCBlT2JqZWN0IGluc3RhbmNlb2YgUG9ydDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjcm9zc1JlZmVyZW5jZShFT2JqZWN0IGVPYmplY3QsIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSwgRU9iamVjdCBjcm9zc1JlZmVyZW5jZWRFT2JqZWN0KQotICAgIHsKLSAgICAgIC8vIEFkZCBhIHNldHRpbmcgZm9yIGFueSBuYW1lZCBjb21wb25lbnQgaW4gYW4gaW50ZXJlc3RpbmcgcmVmZXJlbmNlLgotICAgICAgLy8KLSAgICAgIHJldHVybiAhZVJlZmVyZW5jZS5pc1ZvbGF0aWxlKCkgJiYgCi0gICAgICBlUmVmZXJlbmNlLmlzQ2hhbmdlYWJsZSgpICYmIAotICAgICAgaXNXU0RMTmFtZWRDb21wb25lbnQoY3Jvc3NSZWZlcmVuY2VkRU9iamVjdCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hcCBvZiBhbGwgWFNETmFtZWRDb21wb25lbnQgY3Jvc3MgcmVmZXJlbmNlcyBpbiB0aGUgY29udGVudAotICAgICAqIHRyZWUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBNYXAgZmluZChFT2JqZWN0IGVPYmplY3QpCi0gICAgewotICAgICAgV1NETE5hbWVkQ29tcG9uZW50Q3Jvc3NSZWZlcmVuY2VyIHJlc3VsdCA9IG5ldyBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIoZU9iamVjdCk7Ci0gICAgICByZXN1bHQuY3Jvc3NSZWZlcmVuY2UoKTsKLSAgICAgIHJlc3VsdC5kb25lKCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXAgb2YgYWxsIFhTRE5hbWVkQ29tcG9uZW50IGNyb3NzIHJlZmVyZW5jZXMgaW4gdGhlIGNvbnRlbnQKLSAgICAgKiB0cmVlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTWFwIGZpbmQoUmVzb3VyY2UgcmVzb3VyY2UpCi0gICAgewotICAgICAgV1NETE5hbWVkQ29tcG9uZW50Q3Jvc3NSZWZlcmVuY2VyIHJlc3VsdCA9IG5ldyBXU0RMTmFtZWRDb21wb25lbnRDcm9zc1JlZmVyZW5jZXIocmVzb3VyY2UpOwotICAgICAgcmVzdWx0LmNyb3NzUmVmZXJlbmNlKCk7Ci0gICAgICByZXN1bHQuZG9uZSgpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWFwIG9mIGFsbCBYU0ROYW1lZENvbXBvbmVudCBjcm9zcyByZWZlcmVuY2VzIGluIHRoZSBjb250ZW50Ci0gICAgICogdHJlZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1hcCBmaW5kKFJlc291cmNlU2V0IHJlc291cmNlU2V0KQotICAgIHsKLSAgICAgIFdTRExOYW1lZENvbXBvbmVudENyb3NzUmVmZXJlbmNlciByZXN1bHQgPSBuZXcgV1NETE5hbWVkQ29tcG9uZW50Q3Jvc3NSZWZlcmVuY2VyKHJlc291cmNlU2V0KTsKLSAgICAgIHJlc3VsdC5jcm9zc1JlZmVyZW5jZSgpOwotICAgICAgcmVzdWx0LmRvbmUoKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExSZXNvdXJjZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4YzE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMTW9kZWxMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYURpcmVjdGl2ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VVdGlsCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZWxvYWREaXJlY3RpdmVzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFJlc291cmNlIHJvb3RSZXNvdXJjZSA9IGRlZmluaXRpb24uZVJlc291cmNlKCk7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSByb290UmVzb3VyY2UuZ2V0UmVzb3VyY2VTZXQoKTsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSkgaS5uZXh0KCk7Ci0gICAgICBpZiAocmVzb3VyY2UgIT0gcm9vdFJlc291cmNlKQotICAgICAgewotICAgICAgICAvLyAgVE9ETy4uLiBjb25zaWRlciB1bmxvYWRpbmcgdGhlIHJlc291cmNlcyAgCQotICAgICAgICAvLyAgcmVzb3VyY2UudW5sb2FkKCk7CQkgICAgICAKLSAgICAgICAgaS5yZW1vdmUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgUmVsb2FkRGlyZWN0aXZlVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlbG9hZERpcmVjdGl2ZVZpc2l0b3IoKTsKLSAgICB2aXNpdG9yLnZpc2l0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHN0YXRpYyBjbGFzcyBSZWxvYWREaXJlY3RpdmVWaXNpdG9yCi0gIHsKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB0aGVJbXBvcnQpCi0gICAgewotICAgICAgLy8gZm9yY2UgdGhlIGltcG9ydCB0byByZWxvYWQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdCh0aGVJbXBvcnQpOwotICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChXU0RMRWxlbWVudEltcGwpdGhlSW1wb3J0KS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdFhTRFNjaGVtYURpcmVjdGl2ZShYU0RTY2hlbWFEaXJlY3RpdmUgZGlyZWN0aXZlKQotICAgIHsKLSAgICAgIC8vIGZvcmNlIHRoZSBzY2hlbWEgZGlyZWN0aXZlIHRvIHJlbG9hZAotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZGlyZWN0aXZlLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRpcmVjdGl2ZS5lbGVtZW50QXR0cmlidXRlc0NoYW5nZWQoZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgdmlzaXRJbXBvcnQoKEltcG9ydCkgaS5uZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICAgIHsKLQotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIG87Ci0gICAgICAgICAgICAgIGlmIChlLmdldFNjaGVtYSgpICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2aXNpdFNjaGVtYShlLmdldFNjaGVtYSgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpID0gc2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFhTRFNjaGVtYURpcmVjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgIHZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKChYU0RTY2hlbWFEaXJlY3RpdmUpIG8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEludGVybmFsVVJJUmVzb2x2ZXIgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gIHsKLSAgICAvL0lkUmVzb2x2ZXIgaWRSZXNvbHZlciA9IG5ldyBJZFJlc29sdmVySW1wbChudWxsLCB0cnVlKTsKLSAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyIHJlc29sdmVyID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLQotICAgIEludGVybmFsVVJJUmVzb2x2ZXIoKQotICAgIHsgIAotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gICAgewotICAgICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSByZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlLCBsb2NhdGlvbik7Ci0KLSAgICAgIC8vIGhlcmUncyBhbiB1Z2x5IGhhY2suLi4gUGxhdGZvcm0ucmVzb2x2ZSgpIHJldHVybnMgV2luZG93cyBmaWxlcyB3aXRoIHRoZSBwYXR0ZXJuICJmaWxlOkQ6L2hlbGxvLnhzZCIKLSAgICAgIC8vIGJ1dCBFTUYncyBVUkkgY2xhc3MgZXhwZWN0cyBhIHBhdHRlcm4gbGlrZSB0aGlzICJmaWxlOi8vL0Q6L2hlbGxvLnhzZCIKLSAgICAgIC8vICAgICAgICAKLSAgICAgIGlmIChyZXNvbHZlZExvY2F0aW9uICE9IG51bGwpCi0gICAgICB7Ci0JCVN0cmluZyBmaWxlUHJvdG9jb2wgPSAiZmlsZToiOyAgICAgIAkgLy8kTk9OLU5MUy0xJAotICAgICAgICBpZiAocmVzb2x2ZWRMb2NhdGlvbi5zdGFydHNXaXRoKGZpbGVQcm90b2NvbCkgJiYgIXJlc29sdmVkTG9jYXRpb24uc3RhcnRzV2l0aChmaWxlUHJvdG9jb2wgKyAiLyIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICByZXNvbHZlZExvY2F0aW9uID0gcmVzb2x2ZWRMb2NhdGlvbi5zdWJzdHJpbmcoZmlsZVByb3RvY29sLmxlbmd0aCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXNvbHZlZExvY2F0aW9uID0gVVJJSGVscGVyLmFkZEltcGxpZWRGaWxlUHJvdG9jb2wocmVzb2x2ZWRMb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgICAvLyBlbmQgdWdseSBoYWNrCi0gICAgICByZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFNldENvbXBvbmVudEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExTZXRDb21wb25lbnRIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNmMmI2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFNldENvbXBvbmVudEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbXBvcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2V0Q29tcG9uZW50SGVscGVyIHsKLSAgICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgICBwcml2YXRlIElGaWxlIGN1cnJlbnRJRmlsZTsKLSAgICAKLSAgICBwdWJsaWMgV1NETFNldENvbXBvbmVudEhlbHBlcihJRmlsZSBpRmlsZSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgICAgIGN1cnJlbnRJRmlsZSA9IGlGaWxlOwotICAgICAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRXU0RMQ29tcG9uZW50KFdTRExFbGVtZW50IGlucHV0RWxlbWVudCwgU3RyaW5nIHByb3BlcnR5LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgYWRkSW1wb3J0SWZOZWNlc3Nhcnkoc3BlYyk7Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0KLSAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCB3c2RsRWxlbWVudCA9IGlucHV0RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIAotICAgICAgICB3c2RsRWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcGVydHksIGNvbXBvbmVudE9iamVjdCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIC8vIFJlbW92ZSBhbnkgdW51c2VkIGltcG9ydHMsIGNvdW50ZXIgdG8gYWRkSW1wb3J0SWZOZWNlc3NhcnkKLSAgICAgICAgV1NETEltcG9ydE1hbmFnZXIucmVtb3ZlVW51c2VkSW1wb3J0cyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0WFNEVHlwZUNvbXBvbmVudChQYXJ0IHBhcnQsIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBpZiAoc3BlYy5nZXROYW1lKCkgIT0gbnVsbCAmJiBzcGVjLmdldFF1YWxpZmllcigpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFkZEltcG9ydElmTmVjZXNzYXJ5KHNwZWMpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0gICAgICAgIAotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZSgoUGFydCkgcGFydCwgdHJ1ZSwgY29tcG9uZW50T2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJlbW92ZSBhbnkgdW51c2VkIGltcG9ydHMsIGNvdW50ZXIgdG8gYWRkSW1wb3J0SWZOZWNlc3NhcnkKLSAgICAgICAgV1NETEltcG9ydE1hbmFnZXIucmVtb3ZlVW51c2VkSW1wb3J0cyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0WFNERWxlbWVudENvbXBvbmVudChQYXJ0IHBhcnQsIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBhZGRJbXBvcnRJZk5lY2Vzc2FyeShzcGVjKTsKLSAgICAgICAgU3RyaW5nIGNvbXBvbmVudE9iamVjdCA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShzcGVjKTsKLSAgICAgICAgCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKChQYXJ0KSBwYXJ0LCBmYWxzZSwgY29tcG9uZW50T2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJlbW92ZSBhbnkgdW51c2VkIGltcG9ydHMsIGNvdW50ZXIgdG8gYWRkSW1wb3J0SWZOZWNlc3NhcnkKLSAgICAgICAgV1NETEltcG9ydE1hbmFnZXIucmVtb3ZlVW51c2VkSW1wb3J0cyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdGhlIHByZWZpeGVkIGNvbXBvbmVudCBuYW1lIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4KLSAgICAgKiBDb21wb25lbnRTcGVjaWZpY2F0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBzcGVjLmdldE5hbWUoKTsKLSAgICAgICAgTGlzdCBwcmVmaXhlcyA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIHNwZWMuZ2V0UXVhbGlmaWVyKCkpOwotICAgICAgICBpZiAocHJlZml4ZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgbmFtZSA9IHByZWZpeGVzLmdldCgwKSArICI6IiArIG5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfSAgICAgICAgIAotICAgICAgICAgIAotICAgIHByaXZhdGUgTGlzdCBnZXRQcmVmaXhlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UpIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0aGVOYW1lc3BhY2UgPSAoU3RyaW5nKSBtYXAuZ2V0KHByZWZpeCk7Ci0gICAgICAgICAgICBpZiAodGhlTmFtZXNwYWNlICE9IG51bGwgJiYgdGhlTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQocHJlZml4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgYWRkSW1wb3J0SWZOZWNlc3NhcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjKSB7Ci0gICAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaXRzZWxmCi0gICAgICAgIFBhdGggY3VycmVudEZpbGVMb2NhdGlvbiA9IG5ldyBQYXRoKGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoc3BlYy5nZXRGaWxlKCkgPT0gbnVsbCB8fCBjdXJyZW50RmlsZUxvY2F0aW9uLmVxdWFscyhzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpKSkgewotICAgICAgICAJLy8gaWYgdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24ncyBnZXRGaWxlKCkgcmV0dXJucyBudWxsLCBmb3JnZXQgYWJvdXQgYWRkaW5nIG5lY2Vzc2FyeSBpbXBvcnRzCi0gICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgcmVndWxhciBJbXBvcnRzCi0gICAgICAgIGlmICghZm91bmRNYXRjaCkgewotICAgICAgICAgICAgSXRlcmF0b3IgaW1wb3J0c0l0ID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlIChpbXBvcnRzSXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydExvY2F0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBJbXBvcnRJbXBsIGltcG9ydEl0ZW0gPSAoSW1wb3J0SW1wbCkgaW1wb3J0c0l0Lm5leHQoKTsKLSAgICAgICAgICAgICAgICBpbXBvcnRJdGVtLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpbXBvcnRJdGVtLmdldEVTY2hlbWEoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBpbXBvcnRJdGVtLmdldEVTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0TG9jYXRpb24gPSBnZXROb3JtYWxpemVkTG9jYXRpb24oc2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uID0gaW1wb3J0SXRlbS5nZXRFRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBpbXBvcnRMb2NhdGlvbiA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihpbXBvcnREZWZpbml0aW9uLmdldExvY2F0aW9uKCkpOyAKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgCi0gICAgICAgICAgICAgICAgaWYgKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkuZXF1YWxzKG5ldyBQYXRoKGltcG9ydExvY2F0aW9uKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaW5saW5lIFNjaGVtYXMKLSAgICAgICAgaWYgKCFmb3VuZE1hdGNoKSB7Ci0gICAgICAgICAgICBMaXN0IGltcG9ydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpICE9IG51bGwpIHsKLQkgICAgICAgICAgICBJdGVyYXRvciBpdCA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgICAgICAgICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLQkgICAgICAgICAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKTsKLQkgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsIHx8IHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKS5lcXVhbHMoIiIpKSB7ICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgY29udGVudHMgPSBzY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotCSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRlbnRzLmhhc05leHQoKSkgewotCSAgICAgICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYUNvbnRlbnQgY29udGVudCA9IChYU0RTY2hlbWFDb250ZW50KSBjb250ZW50cy5uZXh0KCk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RJbXBvcnQpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0cy5hZGQoY29udGVudCk7ICAgICAgICAgICAgIAotCSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSXRlcmF0b3IgaW1wb3J0SXQgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaW1wb3J0SXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgWFNESW1wb3J0IGltcG9ydEl0ZW0gPSAoWFNESW1wb3J0KSBpbXBvcnRJdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgWFNEU2NoZW1hIHJlc29sdmVkU2NoZW1hID0gaW1wb3J0SXRlbS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFN0cmluZyA9IHJlc29sdmVkU2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydExvY2F0aW9uID0gZ2V0Tm9ybWFsaXplZExvY2F0aW9uKHJlc29sdmVkU3RyaW5nKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3BlYy5nZXRGaWxlKCkuZ2V0TG9jYXRpb24oKS5lcXVhbHMobmV3IFBhdGgoaW1wb3J0TG9jYXRpb24pKSkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZvdW5kTWF0Y2gpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gd3NpU3R5bGVJbXBvcnQgPSBpc1hTRFNjaGVtYUZpbGUoc3BlYyk7Ci0gICAgICAgICAgICBpZiAod3NpU3R5bGVJbXBvcnQpIHsKLSAgICAgICAgICAgICAgICBBZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24gYWN0aW9uID0gbmV3IEFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbihkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpLCAieHNkIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gVVJJSGVscGVyLmdldFJlbGF0aXZlVVJJKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCksIGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBBZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24gYWRkSW1wb3J0ID0gbmV3IEFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbihkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgYWRkSW1wb3J0LnJ1bigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1NlbGVjdGVkRmlsZUxvYyA9IHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50RmlsZUxvYyA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihkZWZpbml0aW9uLmdldExvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZWxhdGl2ZUxvYyA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZVJlbGF0aXZlVVJJKG5ld1NlbGVjdGVkRmlsZUxvYywgY3VycmVudEZpbGVMb2MsIHRydWUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHVuaXF1ZVByZWZpeCA9IGdldFVuaXF1ZVByZWZpeChkZWZpbml0aW9uLCBwcmVmaXgpOyAgICAKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc3BlYy5nZXRRdWFsaWZpZXIoKTsKLQotICAgICAgICAgICAgICAgIEFkZEltcG9ydENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRJbXBvcnRDb21tYW5kKGRlZmluaXRpb24sIG5hbWVzcGFjZSwgcmVsYXRpdmVMb2MpOwotICAgICAgICAgICAgICAgIGNvbW1hbmQucnVuKCk7Ci0KLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSh1bmlxdWVQcmVmaXgsIG5hbWVzcGFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoKLSAgICAgKiBUcnkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXNzZWQgaW4gQ29tcG9uZW50U3BlY2lmaWNhdGlvbiByZWZlcnMgdG8KLSAgICAgKiBhbiBYU0Qgb3IgV1NETCBmaWxlLiAgSWYgaXQncyBhbiBYU0QsIHJldHVybiB0cnVlLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc1hTRFNjaGVtYUZpbGUoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlTG9jYXRpb24gPSBzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLSAgICAgICAgaW50IHBlcmlvZEluZGV4ID0gZmlsZUxvY2F0aW9uLmxhc3RJbmRleE9mKCIuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmIChwZXJpb2RJbmRleCA+IDApIHsKLSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBmaWxlTG9jYXRpb24uc3Vic3RyaW5nKHBlcmlvZEluZGV4ICsgMSk7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uLmVxdWFsc0lnbm9yZUNhc2UoInhzZCIpKSB7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0VW5pcXVlUHJlZml4KERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGluaXRQcmVmaXgpIHsKLSAgICAgIFN0cmluZyB1bmlxdWVQcmVmaXg7Ci0gICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0KLSAgICAgIGlmIChkZWZpbml0aW9uLmdldE5hbWVzcGFjZShpbml0UHJlZml4KSA9PSBudWxsKSB7Ci0gICAgICAgIHVuaXF1ZVByZWZpeCA9IGluaXRQcmVmaXg7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsvLyBpZiB1c2VkLCB0aGVuIHRyeSB0byBjcmVhdGUgYSB1bmlxdWUgb25lCi0gICAgICAgIFN0cmluZyB0ZW1wUHJlZml4ID0gaW5pdFByZWZpeDsKLSAgICAgICAgaW50IGkgPSAxOwotICAgICAgICB3aGlsZShtYXAuY29udGFpbnNLZXkodGVtcFByZWZpeCArIGkpKSB7Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIHVuaXF1ZVByZWZpeCA9IHRlbXBQcmVmaXggKyBpOwotICAgICAgfQotICAgICAgcmV0dXJuIHVuaXF1ZVByZWZpeDsKLSAgICB9IAotICAgIAotICAgIHByaXZhdGUgU3RyaW5nIGdldE5vcm1hbGl6ZWRMb2NhdGlvbihTdHJpbmcgbG9jYXRpb24pIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIFVSTCByZXNvbHZlZFVSTCA9IEZpbGVMb2NhdG9yLnJlc29sdmUodXJsKTsKLSAgICAgICAgICAgIGxvY2F0aW9uID0gcmVzb2x2ZWRVUkwuZ2V0UGF0aCgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyAKLSAgICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RDb21wb25lbnRIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RDb21wb25lbnRIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3M2Y4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEQ29tcG9uZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RTY2hlbWFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLmNvbW1hbmRzLkFkZFhTREVsZW1lbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9zaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotLyoqCi0gKiBJbnB1dCBjcmVhdGVJbnB1dChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgc3R5bGUpIC0tLSBjcmVhdGUgZGVmYXVsdCBtZXNzYWdlL3BhcnQvZXRjLgotICogT2JqZWN0IGNyZWF0ZUlucHV0UGFyYW1ldGVyKE9wZXJhdGlvbiBvcGVyYXRpb24sIElucHV0IGlucHV0LCBTdHlsZSBzdHlsZSkgLS0KLSAqIAotICogQ29tbWFuZCBnZXRDcmVhdGVJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgSW5wdXQgaW5wdXQsIFN0eWxlIHN0eWxlKQotICogCi0gKiBNZXNzYWdlL3BhcnQvRWxlbWVudAotICogTWVzc2FnZS9wYXJ0L0VsZW1lbnQvc2VxdWVuY2UvRWxlbWVudAotICogKHgpIE1lc3NhZ2UvcGFydAotICovCi1wdWJsaWMgY2xhc3MgWFNEQ29tcG9uZW50SGVscGVyIHsKLQkvKgotCSAqIENyZWF0ZSBhbiBYU0RFbGVtZW50IHdpdGggdHlwZSBhbm9ueW1vdXMuICBTZXQgdGhlIGdpdmVuIHBhcnQgdG8gcmVmZXJlbmNlIHRoZSBuZXdseSBjcmVhdGVkCi0JICogWFNERWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVBbm9ueW1vdXNYU0RFbGVtZW50RGVmaW5pdGlvbihTdHJpbmcgYmFzZU5hbWUsIFBhcnQgcGFydCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gYW5vbkVsZW1lbnQgPSBjcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBiYXNlTmFtZSwgcGFydCk7Ci0JCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBuZXdBbm9uID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKCk7Ci0JCVhTRFBhcnRpY2xlIG5ld1hTRFBhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJWFNETW9kZWxHcm91cCBuZXdYU0RNb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQluZXdYU0RNb2RlbEdyb3VwLnNldENvbXBvc2l0b3IoWFNEQ29tcG9zaXRvci5TRVFVRU5DRV9MSVRFUkFMKTsKLQkJCi0JCWFub25FbGVtZW50LnNldEFub255bW91c1R5cGVEZWZpbml0aW9uKG5ld0Fub24pOwotCQluZXdYU0RQYXJ0aWNsZS5zZXRDb250ZW50KG5ld1hTRE1vZGVsR3JvdXApOwotCQluZXdBbm9uLnNldENvbnRlbnQobmV3WFNEUGFydGljbGUpOwotCQkKLQkJcmV0dXJuIGFub25FbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGJhc2VOYW1lLCBPYmplY3QgY29udGV4dCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IG51bGw7Ci0JCQotCQlpZiAoY29udGV4dCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCUFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKGRlZmluaXRpb24sICIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQkvLyBGaW5kIGEgdW5pcXVlIG5hbWUKLQkJCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSBjb21tYW5kLmdldFNjaGVtYSgpOwotCQkJU3RyaW5nIG5hbWUgPSBOYW1lVXRpbC5nZXRYU0RFbGVtZW50TmFtZShiYXNlTmFtZSwgeHNkU2NoZW1hKTsKLQkJCWNvbW1hbmQucnVuKG5hbWUpOwotCQkJLy8gVGhlICd3b3JrYXJvdW5kJyBiZWxvdyBpcyBjYXVzaW5nIG1lIHRvIGhhbmcuLi4uLiAgVGhlIGxhdGVzdCBXVFAgaXMgbmVlZGVkLgotLy8JCQl4c2RFbGVtZW50ID0geHNkU2NoZW1hLnJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24obmFtZSk7Ci0JCQl4c2RFbGVtZW50ID0gY29tbWFuZC5nZXRYU0RFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAoY29udGV4dCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBjb250ZXh0OwotCQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJU3RyaW5nIG5hbWUgPSBOYW1lVXRpbC5nZXRYU0RFbGVtZW50TmFtZShiYXNlTmFtZSwgbW9kZWxHcm91cCk7Ci0JCQkKLQkJCUFkZFhTREVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNERWxlbWVudENvbW1hbmQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfWE1MX1NDSEVNQV9FTEVNRU5ULCBtb2RlbEdyb3VwKTsKLQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJeHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGNvbW1hbmQuZ2V0QWRkZWRDb21wb25lbnQoKTsKLQkJCXhzZEVsZW1lbnQuc2V0TmFtZShuYW1lKTsKLQkJCXhzZEVsZW1lbnQuc2V0VHlwZURlZmluaXRpb24oZ2V0WFNEU3RyaW5nVHlwZShtb2RlbEdyb3VwKSk7Ci0JCQkKLQkJCW5ld1BhcnRpY2xlLnNldENvbnRlbnQoeHNkRWxlbWVudCk7Ci0JCQltb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuYWRkKG5ld1BhcnRpY2xlKTsKLQkJfQotCQllbHNlIHsKLQkJCUFkZFhTREVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNERWxlbWVudENvbW1hbmQoKTsKLQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJeHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGNvbW1hbmQuZ2V0QWRkZWRDb21wb25lbnQoKTsKLQkJCXhzZEVsZW1lbnQuc2V0TmFtZShiYXNlTmFtZSk7Ci0JCX0KLQkJCi0JCXJldHVybiB4c2RFbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFyZW50LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY2hpbGQpIHsKLQkJaWYgKHBhcmVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gYW5vblR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJlbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKTsKLQkJCWlmIChhbm9uVHlwZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCVhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBhbm9uVHlwZS5nZXRDb250ZW50KCk7Ci0JCQkJaWYgKHBhcnRpY2xlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCQkJLy8gQ3JlYXRlIFhTRFBhcnRpY2xlCi0JCQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0JCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobW9kZWxHcm91cCwgY2hpbGQpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gQ3JlYXRlIFhTRE1vZGVsR3JvdXAgLS0gWFNEUGFydGljbGUKLQkJCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChwYXJ0aWNsZSwgY2hpbGQpOwotCQkJCX0JCQkJICAKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZSAtLT4gWFNETW9kZWxHcm91cCAtLT4gWFNEUGFydGljbGUKLQkJCQlYU0RQYXJ0aWNsZSBuZXdQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCQkJYW5vblR5cGUuc2V0Q29udGVudChuZXdQYXJ0aWNsZSk7Ci0JCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChuZXdQYXJ0aWNsZSwgY2hpbGQpOwotCQkJfQkJCSAgCi0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBDcmVhdGUgQW5vbnltb3VzIFR5cGUgLS0+IFhTRFBhcnRpY2xlIC0tPiBYU0RNb2RlbEdyb3VwIC0tPiBYU0RQYXJ0aWNsZQotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIG5ld0Fub25UeXBlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKCk7Ci0JCQlwYXJlbnQuc2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24obmV3QW5vblR5cGUpOwotCQkJCi0JCQlYU0RQYXJ0aWNsZSBuZXdQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCQluZXdBbm9uVHlwZS5zZXRDb250ZW50KG5ld1BhcnRpY2xlKTsKLQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobmV3UGFydGljbGUsIGNoaWxkKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChYU0RQYXJ0aWNsZSBwYXJ0aWNsZSwgWFNERWxlbWVudERlY2xhcmF0aW9uIGNoaWxkKSB7Ci0JCVhTRE1vZGVsR3JvdXAgbmV3WFNETW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJbmV3WFNETW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7CQkJCQkgIAotCQlwYXJ0aWNsZS5zZXRDb250ZW50KG5ld1hTRE1vZGVsR3JvdXApOwotCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG5ld1hTRE1vZGVsR3JvdXAsIGNoaWxkKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwLCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY2hpbGQpIHsKLQkJLy8gQ3JlYXRlIFhTRFBhcnRpY2xlCi0JCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJbmV3UGFydGljbGUuc2V0Q29udGVudChjaGlsZCk7Ci0JCW1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5hZGQobmV3UGFydGljbGUpOwotCX0KLQkKLQkvKgotCSAqIFJldHVybiBpdCdzIFhTRE1vZGVsR3JvdXAuICBJZiBvbmUgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBvbmUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRE1vZGVsR3JvdXAgZ2V0WFNETW9kZWxHcm91cChYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IG51bGw7Ci0JCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBhbm9uVHlwZSA9IG51bGw7Ci0JCQotCQlpZiAoeHNkRWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQlhbm9uVHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHhzZEVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKTsKLQkJfQkJICAKLQkJZWxzZSB7Ci0JCQkvLyBDcmVhdGUgQW5vbnltb3VzIFR5cGUKLQkJCWFub25UeXBlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKCk7Ci0JCQlhbm9uVHlwZS5zZXROYW1lKCJOZXdDb21wbGV4VHlwZU5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJZ2V0WFNEU2NoZW1hKGRlZmluaXRpb24pLmdldENvbnRlbnRzKCkuYWRkKGFub25UeXBlKTsKLQkJCXhzZEVsZW1lbnQuc2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oYW5vblR5cGUpOwotCQl9Ci0JCQotCQlpZiAoYW5vblR5cGUgIT0gbnVsbCkgewotCQkJbW9kZWxHcm91cCA9IGdldFhTRE1vZGVsR3JvdXAoYW5vblR5cGUpOwotCQl9Ci0JCQotCQlyZXR1cm4gbW9kZWxHcm91cDsKLQl9Ci0JCi0JLyoKLQkgKiBSZXR1cm4gaXQncyBYU0RNb2RlbEdyb3VwLiAgSWYgb25lIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgb25lCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZENvbXBsZXhUeXBlKSB7Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IG51bGw7Ci0JCVhTRFBhcnRpY2xlIHBhcnRpY2xlID0gbnVsbDsKLQkJLy8gQ2hlY2sgZm9yIFhTRFBhcnRpY2xlCi0JCWlmICh4c2RDb21wbGV4VHlwZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJcGFydGljbGUgPSAoWFNEUGFydGljbGUpIHhzZENvbXBsZXhUeXBlLmdldENvbnRlbnQoKTsKLQkJfQotCQllbHNlIHsKLQkJCXBhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCW1vZGVsR3JvdXAgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RNb2RlbEdyb3VwKCk7Ci0JCQltb2RlbEdyb3VwLnNldENvbXBvc2l0b3IoWFNEQ29tcG9zaXRvci5TRVFVRU5DRV9MSVRFUkFMKTsJCQkgIAotCQkJcGFydGljbGUuc2V0Q29udGVudChtb2RlbEdyb3VwKTsKLQkJCXhzZENvbXBsZXhUeXBlLnNldENvbnRlbnQocGFydGljbGUpOwotCQl9Ci0JCQotCQkvLyBDaGVjayBmb3IgWFNETW9kZWxHcm91cAotCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQltb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQkJbW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7CQkJICAKLQkJCXBhcnRpY2xlLnNldENvbnRlbnQobW9kZWxHcm91cCk7Ci0JCX0KLQkJCi0JCXJldHVybiBtb2RlbEdyb3VwOwotCX0KLQkKLQkvKgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5paW9uKFN0cmluZyBjb21wbGV4VHlwZU5hbWUsIFBhcnQgcGFydCkgewotCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gbmV3Q29tcGxleFR5cGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaXRpb24oKTsKLQkJWFNEUGFydGljbGUgbmV3WFNEUGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQlYU0RNb2RlbEdyb3VwIG5ld1hTRE1vZGVsR3JvdXAgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RNb2RlbEdyb3VwKCk7Ci0JCW5ld1hTRE1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwotCQkKLQkJbmV3Q29tcGxleFR5cGUuc2V0TmFtZShjb21wbGV4VHlwZU5hbWUpOwotCQluZXdDb21wbGV4VHlwZS5zZXRDb250ZW50KG5ld1hTRFBhcnRpY2xlKTsKLQkJbmV3WFNEUGFydGljbGUuc2V0Q29udGVudChuZXdYU0RNb2RlbEdyb3VwKTsKLQkJZ2V0WFNEU2NoZW1hKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKS5nZXRDb250ZW50cygpLmFkZChuZXdDb21wbGV4VHlwZSk7Ci0JCQotCQlyZXR1cm4gbmV3Q29tcGxleFR5cGU7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBwYXJlbnQsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjaGlsZCkgewotCQlpZiAocGFyZW50LmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgcGFyZW50LmdldENvbnRlbnQoKTsKLQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJLy8gQ3JlYXRlIFhTRFBhcnRpY2xlCi0JCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIHBhcnRpY2xlLmdldENvbnRlbnQoKTsKLQkJCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG1vZGVsR3JvdXAsIGNoaWxkKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIENyZWF0ZSBYU0RNb2RlbEdyb3VwIC0tIFhTRFBhcnRpY2xlCi0JCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChwYXJ0aWNsZSwgY2hpbGQpOwotCQkJfQkJCQkgIAotCQl9Ci0JCWVsc2UgewotCQkJLy8gQ3JlYXRlIFhTRFBhcnRpY2xlIC0tPiBYU0RNb2RlbEdyb3VwIC0tPiBYU0RQYXJ0aWNsZQotCQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJcGFyZW50LnNldENvbnRlbnQobmV3UGFydGljbGUpOwotCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChuZXdQYXJ0aWNsZSwgY2hpbGQpOwotCQl9Ci0JfQotCQotCS8qCi0JICogUmV0dXJuIHRoZSBpbmxpbmUgWFNEU2NoZW1hIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFdTREwuCi0JICogTG9vayBmb3IgdGhlIGlubGluZSBYU0RTY2hlbWEgd2l0aCB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIFdTREwuCi0JICogSWYgdGhpcyBpbmxpbmUgWFNEU2NoZW1hIGRvZXMgbm90IGV4aXN0cywgY3JlYXRlIGl0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEU2NoZW1hIGdldFhTRFNjaGVtYShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJWFNEU2NoZW1hIHNjaGVtYSA9IG51bGw7Ci0JCVN0cmluZyB3c2RsVGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCi0JCVR5cGVzIHR5cGVzID0gKFR5cGVzKSBkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0JCWlmICh0eXBlcyAhPSBudWxsKSB7Ci0JCQkKLQkJCUl0ZXJhdG9yIGVlSXQgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGVlSXQuaGFzTmV4dCgpKSB7Ci0JCQkJT2JqZWN0IGVlRWxlbWVudCA9IGVlSXQubmV4dCgpOwotCQkJCWlmIChlZUVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgewotCQkJCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVFbGVtZW50OwotCQkJCQlpZiAoZWUuZ2V0U2NoZW1hKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgIT0gbnVsbCAmJgotCQkJCQkJZWUuZ2V0U2NoZW1hKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKHdzZGxUYXJnZXROYW1lc3BhY2UpKSB7Ci0JCQkJCQlzY2hlbWEgPSBlZS5nZXRTY2hlbWEoKTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlpZiAoc2NoZW1hID09IG51bGwpIHsKLQkJCS8vIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBzY2hlbWEKLQkJCUFkZFhTRFNjaGVtYUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RTY2hlbWFDb21tYW5kKGRlZmluaXRpb24pOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVlRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJc2NoZW1hID0gZWVFbGVtZW50LmdldFNjaGVtYSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gc2NoZW1hOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRYU0RTdHJpbmdUeXBlKFhTRENvbXBvbmVudCBjb21wb25lbnQpIHsKLQkJWFNEU2NoZW1hIHNjaGVtYSA9IGNvbXBvbmVudC5nZXRTY2hlbWEoKTsKLQkJcmV0dXJuIHNjaGVtYS5nZXRTY2hlbWFGb3JTY2hlbWEoKS5yZXNvbHZlU2ltcGxlVHlwZURlZmluaXRpb24oInN0cmluZyIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRFR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRFR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjAwYWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RJbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgWFNEVHlwZVN5c3RlbVByb3ZpZGVyIGltcGxlbWVudHMgSVR5cGVTeXN0ZW1Qcm92aWRlcgotewotICAgIHB1YmxpYyBMaXN0IGdldFByZWZpeGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKHRoZU5hbWVzcGFjZSAhPSBudWxsICYmIHRoZU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZChwcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRQcmVmaXhlcyhkZWZpbml0aW9uLCBuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4Lmxlbmd0aCgpID4gMCkgPyBwcmVmaXggKyAiOiIgKyBsb2NhbE5hbWUgOiBsb2NhbE5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIGxpc3QuYWRkKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZE5hbWVkQ29tcG9uZW50cyhEZWZpbml0aW9uIGRlZmluaXRpb24sIExpc3QgbGlzdCwgTGlzdCBuYW1lZENvbXBvbmVudHMpCi0gICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuYW1lZENvbXBvbmVudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQgPSAoWFNETmFtZWRDb21wb25lbnQpIGkubmV4dCgpOwotICAgICAgICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhkZWZpbml0aW9uLCBjb21wb25lbnQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGNvbXBvbmVudC5nZXROYW1lKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXRXU0lTdHlsZUltcG9ydHMoWFNEU2NoZW1hIHhzZFNjaGVtYSkKLSAgICB7Ci0gICAgICAgIGlmICh4c2RTY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0geHNkU2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhTRFNjaGVtYUNvbnRlbnQgY29udGVudCA9IChYU0RTY2hlbWFDb250ZW50KSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFhTREltcG9ydEltcGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYU0RJbXBvcnRJbXBsIHhzZEltcG9ydCA9IChYU0RJbXBvcnRJbXBsKSBjb250ZW50OwotCQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSl4c2RJbXBvcnQuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsJCQkJCQotCQkJCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQkJCXsKLQkJCQkJCXNjaGVtYSA9IHhzZEltcG9ydC5pbXBvcnRTY2hlbWEoKTsKLQkJCQkJfSAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSkKLSAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0eXBlTmFtZUNhdGVnb3J5ID09IElUeXBlU3lzdGVtUHJvdmlkZXIuQlVJTFRfSU5fVFlQRSkgewotICAgICAgICAJbGlzdCA9IGdldEJ1aWx0SW5UeXBlTmFtZXNMaXN0KGRlZmluaXRpb24pOyAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAJVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgICAgICAJaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgCQl7Ci0gICAgICAgIAkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0gICAgICAgIAkJCWlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgIAkJCXsKLSAgICAgICAgCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBvKS5nZXRTY2hlbWEoKTsKLSAgICAgICAgCQkJCWlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgCQkJCXsKLSAgICAgICAgCQkJCQlpbml0V1NJU3R5bGVJbXBvcnRzKHNjaGVtYSk7Ci0gICAgICAgIAkJCQkJYWRkTmFtZWRDb21wb25lbnRzKGRlZmluaXRpb24sIGxpc3QsIHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIAkJCQl9Ci0gICAgICAgIAkJCX0KLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgIAotICAgICAgICAJZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgCXsKLSAgICAgICAgCQlJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgaS5uZXh0KCk7Ci0gICAgICAgIAkJWFNEU2NoZW1hIHNjaGVtYSA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0gICAgICAgIAkJaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAJCXsKLSAgICAgICAgCQkJYWRkTmFtZWRDb21wb25lbnRzKGRlZmluaXRpb24sIGxpc3QsIHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIAkJfQotICAgICAgICAJfQotICAgICAgICAJbGlzdC5hZGRBbGwoZ2V0QnVpbHRJblR5cGVOYW1lc0xpc3QoZGVmaW5pdGlvbikpOwotICAgICAgICB9Ci0gICAgICAgIAotCQlyZXR1cm4gbGlzdDsgICAgICAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFhTRFNjaGVtYSBzY2hlbWEsIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICAgIHsKLSAgICAgICAgTGlzdCBrZWVwVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIEl0ZXJhdG9yIHR5cGVJdGVyYXRvciA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAvLyBGaWx0ZXIgb3V0IHVud2FudGVkIFR5cGVzCi0gICAgICAgIGlmICh0eXBlTmFtZUNhdGVnb3J5ID09IElUeXBlU3lzdGVtUHJvdmlkZXIuVVNFUl9ERUZJTkVEX0NPTVBMRVhfVFlQRSkgewotICAgICAgICAJd2hpbGUgKHR5cGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgCQlPYmplY3QgdHlwZSA9IHR5cGVJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIAkJaWYgKHR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLSAgICAgICAgCQkJa2VlcFR5cGVzLmFkZCh0eXBlKTsKLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZU5hbWVDYXRlZ29yeSA9PSBJVHlwZVN5c3RlbVByb3ZpZGVyLlVTRVJfREVGSU5FRF9TSU1QTEVfVFlQRSkgewotICAgICAgICAJd2hpbGUgKHR5cGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgCQlPYmplY3QgdHlwZSA9IHR5cGVJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIAkJaWYgKHR5cGUgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotICAgICAgICAJCQlrZWVwVHlwZXMuYWRkKHR5cGUpOwotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9hZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwga2VlcFR5cGVzKTsgICAgICAgIAotICAgICAgICAvL3JldHVybiBsaXN0OwotICAgICAgICByZXR1cm4ga2VlcFR5cGVzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3ZpZGVzIGEgbGlzdCB3aXRoIFhNTCBzY2hlbWEgYnVpbHQgaW4gdHlwZSBuYW1lcy4gVGhlIG5hbWVzIGFyZQotICAgICAqIHByZWZpeGVkIGlmIHRoZSB0aGUgZGVmaW5pdGlvbiBwcm92aWRlcyBhIHByZWZpeCBmb3IgdGhlIFhNTCBzY2hlbWEKLSAgICAgKiBuYW1lc3BhY2UuCi0gICAgICogCi0gICAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICAgKiAgICAgICAgICBhIFdTREwge0BsaW5rIERlZmluaXRpb259LiBNdXN0IG5vdCBiZSBudWxsLgotICAgICAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ30gcmVwcmVzZW50aW5nIHRoZSBYTUwgU2NoZW1hIGJ1aWx0IGluIHR5cGUgbmFtZXMsCi0gICAgICogICAgICAgICBvciBhbiBlbXB0eSBsaXN0IGlmIHRoZSBkZWZpbml0aW9uIGlzIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIExpc3QgZ2V0QnVpbHRJblR5cGVOYW1lc0xpc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgIHsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICAgICAgfQotICAgICAgCi0gICAgICBMaXN0IGJ1aWx0SW5UeXBlTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgIFhTRFNjaGVtYSBzY2hlbWFGb3JTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgICAgTWFwIHNpbXBsZVR5cGVJZE1hcCA9IHNjaGVtYUZvclNjaGVtYS5nZXRTaW1wbGVUeXBlSWRNYXAoKTsKLSAgICAgIENvbGxlY3Rpb24gYnVpbHRJblR5cGVzID0gc2ltcGxlVHlwZUlkTWFwLnZhbHVlcygpOwotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBidWlsdEluVHlwZXMuaXRlcmF0b3IoKTsKLSAgICAgIFN0cmluZyB4c2RQcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotCi0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbiA9IChYU0RUeXBlRGVmaW5pdGlvbikgaXRlcmF0b3IubmV4dCgpOyAgCi0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0eXBlRGVmaW5pdGlvbi5nZXROYW1lKCk7Ci0gICAgICAgIFN0cmluZyBwcmVmaXhlZE5hbWUgPSAoeHNkUHJlZml4ICE9IG51bGwgJiYgeHNkUHJlZml4Lmxlbmd0aCgpID4gMCkgPyB4c2RQcmVmaXggKyAiOiIgKyBsb2NhbE5hbWUgOiBsb2NhbE5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgYnVpbHRJblR5cGVOYW1lcy5hZGQocHJlZml4ZWROYW1lKTsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gYnVpbHRJblR5cGVOYW1lczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgICAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgbykuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotCQkJCQkJaW5pdFdTSVN0eWxlSW1wb3J0cyhzY2hlbWEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTmFtZWRDb21wb25lbnRzKGRlZmluaXRpb24sIGxpc3QsIHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgaS5uZXh0KCk7Ci0gICAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLSAgICAgICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotICAgIHB1YmxpYyBpbnQgZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvQmFzZVJlbmFtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CYXNlUmVuYW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTllYjVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CYXNlUmVuYW1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVJlbmFtZXIgZXh0ZW5kcyBXU0RMVmlzaXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld05hbWU7Ci0gIHByb3RlY3RlZCBXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQ7Ci0gIAotICBwdWJsaWMgQmFzZVJlbmFtZXIoV1NETEVsZW1lbnQgZ2xvYmFsQ29tcG9uZW50LCBTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIHN1cGVyKGdsb2JhbENvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIHRoaXMuZ2xvYmFsQ29tcG9uZW50ID0gZ2xvYmFsQ29tcG9uZW50OwotICAgIHRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmV3UU5hbWUoKQotICB7Ci0gICAgU3RyaW5nIHFOYW1lID0gbnVsbDsKLSAgICBpZiAobmV3TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdsb2JhbENvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBxTmFtZSA9IGRlZmluaXRpb24uZ2V0UHJlZml4KGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgcU5hbWUgKz0gIjoiICsgbmV3TmFtZTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcU5hbWUgPSBuZXdOYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CaW5kaW5nUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0JpbmRpbmdSZW5hbWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMTQ4NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0JpbmRpbmdSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nUmVuYW1lciBleHRlbmRzIEJhc2VSZW5hbWVyCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQmluZGluZ1JlbmFtZXIuCi0gICAqIEBwYXJhbSBnbG9iYWxDb21wb25lbnQKLSAgICogQHBhcmFtIG5ld05hbWUKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nUmVuYW1lcihXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQsIFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgc3VwZXIoZ2xvYmFsQ29tcG9uZW50LCBuZXdOYW1lKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0gICAgaWYgKGdsb2JhbENvbXBvbmVudC5lcXVhbHMoYmluZGluZykpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBvcnQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImJpbmRpbmciLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9NZXNzYWdlUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL01lc3NhZ2VSZW5hbWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NWI5NWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL01lc3NhZ2VSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VSZW5hbWVyIGV4dGVuZHMgQmFzZVJlbmFtZXIKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBNZXNzYWdlUmVuYW1lci4KLSAgICogQHBhcmFtIGdsb2JhbENvbXBvbmVudAotICAgKiBAcGFyYW0gbmV3TmFtZQotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VSZW5hbWVyKFdTRExFbGVtZW50IGdsb2JhbENvbXBvbmVudCwgU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBzdXBlcihnbG9iYWxDb21wb25lbnQsIG5ld05hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIHN1cGVyLnZpc2l0SW5wdXQoaW5wdXQpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKGdsb2JhbENvbXBvbmVudC5lcXVhbHMobWVzc2FnZSkpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGlucHV0KTsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJtZXNzYWdlIiwgZ2V0TmV3UU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE91dHB1dChPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgc3VwZXIudmlzaXRPdXRwdXQob3V0cHV0KTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhvdXRwdXQpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvdXRwdXQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBzdXBlci52aXNpdEZhdWx0KGZhdWx0KTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhmYXVsdCkpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGZhdWx0KTsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJtZXNzYWdlIiwgZ2V0TmV3UU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9Qb3J0VHlwZVJlbmFtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9Qb3J0VHlwZVJlbmFtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1OWM4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvUG9ydFR5cGVSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUG9ydFR5cGVSZW5hbWVyIGV4dGVuZHMgQmFzZVJlbmFtZXIKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBQb3J0VHlwZVJlbmFtZXIuCi0gICAqIEBwYXJhbSBnbG9iYWxDb21wb25lbnQKLSAgICogQHBhcmFtIG5ld05hbWUKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVJlbmFtZXIoV1NETEVsZW1lbnQgZ2xvYmFsQ29tcG9uZW50LCBTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIHN1cGVyKGdsb2JhbENvbXBvbmVudCwgbmV3TmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gYmluZGluZy5nZXRFUG9ydFR5cGUoKTsKLQotICAgIGlmIChnbG9iYWxDb21wb25lbnQuZXF1YWxzKHBvcnRUeXBlKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoYmluZGluZyk7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsIGdldE5ld1FOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvV1NETFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY4Mjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgV1NETFZpc2l0b3IKLXsKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotCi0gIHB1YmxpYyBXU0RMVmlzaXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgdmlzaXREZWZpbml0aW9uKCkKLSAgewotICAgIHZpc2l0QmluZGluZ3MoKTsKLSAgICB2aXNpdE1lc3NhZ2VzKCk7Ci0gICAgdmlzaXRQb3J0VHlwZXMoKTsKLSAgICB2aXNpdFNlcnZpY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEJpbmRpbmdzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE1lc3NhZ2VzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0TWVzc2FnZShtZXNzYWdlKTsgCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBvcnRUeXBlcygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFNlcnZpY2VzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0UG9ydFR5cGUocG9ydFR5cGUpOwotICAgIH0KLQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsgCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0T3BlcmF0aW9uKG9wZXJhdGlvbik7IAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLS8vICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLS8vICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsgICAgICAgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICAKLSAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdElucHV0KGlucHV0KTsKLSAgICB9Ci0gICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0T3V0cHV0KG91dHB1dCk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChmYXVsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICB2aXNpdEZhdWx0KGZhdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpCi0gIHsKLS8vICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRQYXJ0KHBhcnQpOwotICAgIH0KLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXVsdC5nZXRFTWVzc2FnZSgpOwotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0UG9ydChQb3J0IHBvcnQpCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0UG9ydChwb3J0KTsKLSAgICB9Ci0gICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yRm9yUGFyYW1ldGVycy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yRm9yUGFyYW1ldGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk5ZWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvckZvclBhcmFtZXRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFYU0RWaXNpdG9yRm9yRmllbGRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMKLXsKLSAgICBwdWJsaWMgTGlzdCBjb25jcmV0ZUNvbXBvbmVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgcHVibGljIExpc3QgdGhpbmdzVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWVzc2FnZVJlZmVyZW5jZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UpCi0gICAgewotICAgICAgaWYgKG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAvLyBmb3Igbm93IHdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBwYXJ0IGlzIHRoZSBvbmx5IG9uZSB0aGF0Ci0gICAgICAvLyBzaG91bGQgYmUgdXNlZCB0byBkZWR1Y2UgdGhlIHBhcmFtZXRlcnMKLSAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIHRvIHJldmlzdCB0aGlzLCBtdWx0aXBsZSBwYXJ0cyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQKLSAgICAgIC8vCi0gICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKG1lc3NhZ2UpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgeyAKLSAgICAgICAgICAgICAgdmlzaXRQYXJ0KChQYXJ0KWkubmV4dCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgICB7Ci0gICAgICB0aGluZ3NUb0xpc3RlblRvLmFkZChwYXJ0KTsgICAgICAKLSAgICAgIGlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0WFNERWxlbWVudERlY2xhcmF0aW9uKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgLy8gaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBjb25jcmV0ZUNvbXBvbmVudHMuYWRkKHBhcnQpOwotICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdmlzaXRYU0RFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVkKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZWQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIGlmICh0ZCAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIGlmICh0ZC5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbmNyZXRlQ29tcG9uZW50cy5hZGQoZWQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRkIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gd2UncmUgZGVhbGluZyB3aXRoIGFuIGFub255bW91cyBsb2NhbGx5IGRlZmluZWQgdHlwZQotICAgICAgICAgIC8vIHNlIHdlIG5lZWQgdG8gdmlzaXQgaXQncyBjaGlsZHJlbgotICAgICAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKGVkKTsKLSAgICAgICAgICB2aXNpdFhTRENvbXBsZXh0VHlwZURlZmluaXRpb24oKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdGQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFhTRENvbXBsZXh0VHlwZURlZmluaXRpb24oWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHRkKQotICAgIHsKLSAgICAgIC8vIFRPRE8gKGNzKSByZXZpc2l0IHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBmb3IgdGhlIFdTREwgZWRpdG9yIHRvIHJlZGlzcGxheQotICAgICAgLy8gdGhlICdGaWVsZHMnIChpbiBYU0QgZWRpdG9yIGxpbmdvKSBhcyBwYXJhbXRlcnMKLSAgICAgIC8vIHBlcmhhcHMgdGhlIFdTREwgRWRpdG9yIHNob3VsZCBzaW1wbHkgcmV1c2UgdGhlIFhTRCBFZGl0b3IncwotICAgICAgLy8gQ29tcGxleFR5cGUgZWRpdCBwYXJ0IHdoZW4gZGlzcGxheWluZyB0aGVzZSBzZWN0aW9ucz8KLSAgICAgIFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMgZmllbGRWaXNpdG9yID0gbmV3IFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMoKTsKLSAgICAgIGZpZWxkVmlzaXRvci52aXNpdENvbXBsZXhUeXBlRGVmaW5pdGlvbih0ZCk7Ci0gICAgICBjb25jcmV0ZUNvbXBvbmVudHMuYWRkQWxsKGZpZWxkVmlzaXRvci5nZXRDb25jcmV0ZUNvbXBvbmVudExpc3QoKSk7Ci0gICAgICB0aGluZ3NUb0xpc3RlblRvLmFkZEFsbChmaWVsZFZpc2l0b3IuZ2V0VGhpbmdzV2VOZWVkVG9MaXN0ZW5UbygpKTsKLSAgICB9Ci0gIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQmluZGluZ1dpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0JpbmRpbmdXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1YmQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQmluZGluZ1dpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm90b2NvbENvbXBvbmVudENvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1dpemFyZCBleHRlbmRzIFdpemFyZAotewotICBwcm90ZWN0ZWQgQmluZGluZ0dlbmVyYXRvciBiaW5kaW5nR2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgQmluZGluZ1dpemFyZE9wdGlvbnNQYWdlIHNwZWNpZnlCaW5kaW5nUGFnZTsKLQotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0gIHByb3RlY3RlZCBpbnQga2luZDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX05FV19CSU5ESU5HID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9SRUdFTkVSQVRFX0JJTkRJTkcgPSAyOwotCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHdoZW4gYXJlIGNyZWF0aW5nIGEgYnJhbmQgbmV3IEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMoZGVmaW5pdGlvbiwgbnVsbCwgS0lORF9ORVdfQklORElORyk7Ci0gIH0KLQotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHdoZW4gYXJlIGNyZWF0aW5nIGEgYnJhbmQgbmV3IEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbiwgRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICB0aGlzKGRlZmluaXRpb24sIG51bGwsIEtJTkRfTkVXX0JJTkRJTkcpOwotICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB3aGVuIHRoZXJlIGlzIGFuIGV4aXN0aW5nIEJpbmRpbmcgd2Ugd2lzaCB0byBtb2RpZnkvcmVnZW5lcmF0ZQotICAgKi8KLSAgcHVibGljIEJpbmRpbmdXaXphcmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcsIGludCBraW5kKQotICB7Ci0gICAgc3VwZXIoKTsKLQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMua2luZCA9IGtpbmQ7CQotCWJpbmRpbmdHZW5lcmF0b3IgPSBuZXcgQmluZGluZ0dlbmVyYXRvcihkZWZpbml0aW9uLCBiaW5kaW5nKTsKLQotICAgIHNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLl9VSV9CSU5ESU5HX1dJWkFSRCk7IC8vJE5PTi1OTFMtMSQKLSAgICAvL3NldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0RMRWRpdG9yUGx1Z2luLmNsYXNzLCAiaWNvbnMvTmV3WE1MLmdpZiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdOYW1lKFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotLy8gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgYmluZGluZ05hbWUpOwotICAgIGJpbmRpbmdHZW5lcmF0b3Iuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0vKgotIAkvLyBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKHFuYW1lKTsKLQlpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLQkgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZWUpOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0KLSAgICAgICAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgYmluZGluZ0dlbmVyYXRvci5zZXRQcm90b2NvbChleHRlbnNpb24uZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgKi8KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKQotICB7Ci0gICAgYmluZGluZ0dlbmVyYXRvci5zZXRSZWZOYW1lKHBvcnRUeXBlTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ0dlbmVyYXRvciBnZXRCaW5kaW5nR2VuZXJhdG9yKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nR2VuZXJhdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHdpemFyZCBzZXR1cCBpcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHNldHVwKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkUGFnZXMoKQotICB7Ci0gICAgc3BlY2lmeUJpbmRpbmdQYWdlID0gbmV3IEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSgpOwotICAgIGFkZFBhZ2Uoc3BlY2lmeUJpbmRpbmdQYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gIAlib29sZWFuIHJlY29yZGluZ1N0YXJ0ZWQgPSBmYWxzZTsKLSAgCWlmIChkZWZpbml0aW9uLmdldEVsZW1lbnQoKSA9PSBudWxsIHx8IChkb2N1bWVudCAhPSBudWxsICYmIGRvY3VtZW50LmdldENoaWxkTm9kZXMoKS5nZXRMZW5ndGgoKSA9PSAwKSkgewotICAJCXJlY29yZGluZ1N0YXJ0ZWQgPSB0cnVlOwotICAJCWJlZ2luUmVjb3JkaW5nKCk7Ci0gIAkJCi0gIAkJLy8gQ3JlYXRlIHRoZSBEZWZpbml0aW9ucyBlbGVtZW50IHdpdGggcHJvcGVyIG5hbWVzcGFjZQotICAJICAgIFByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotICAJCVN0cmluZyBjaGFyU2V0ID0gcHJlZmVyZW5jZS5nZXRTdHJpbmcoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuT1VUUFVUX0NPREVTRVQpOwotICAJICAgIGlmIChjaGFyU2V0ID09IG51bGwgfHwgY2hhclNldC50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAJICAgIHsKLSAgCSAgICAJY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLSAgCSAgICB9Ci0gIAkgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCJ4bWwiLCAidmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIiArIGNoYXJTZXQgKyAiXCIiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gIAkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgid3NkbDpkZWZpbml0aW9ucyIpOyAgCQkgLy8kTk9OLU5MUy0xJAotICAJCWRvY3VtZW50LmFwcGVuZENoaWxkKHJvb3QpOwotCi0gIAkJLy8gQWRkIHZhcmlvdXMgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgaGVyZS4gCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnNvYXAiLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6dG5zIiwgZ2V0RGVmYXVsdE5hbWVzcGFjZShkZWZpbml0aW9uKSk7IC8vJE5PTi1OTFMtMSQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6d3NkbCIsICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAJCXJvb3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZ2V0RmlsZU5hbWUoZGVmaW5pdGlvbikpOyAvLyROT04tTkxTLTEkCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIsIGdldERlZmF1bHROYW1lc3BhY2UoZGVmaW5pdGlvbikpOyAvLyROT04tTkxTLTEkCi0KLSAgCQlkZWZpbml0aW9uLnNldEVsZW1lbnQocm9vdCk7CQotICAJfQotICAJCi0JLy8gR2VuZXJhdGUvcmUtZ2VuZXJhdGUgdGhlIEJpbmRpbmcKLSAgICB0cnkKLSAgICB7Ci0gICAgICAKLSAgICAJLy8gZ28gYWhlYWQgYW5kIGFkZCByZXF1aXJlZCBuYW1lc3BhY2VzIGZpcnN0IGJlZm9yZSBnZW5lcmF0aW5nIGJpbmRpbmcgY29udGVudAotICAgIAlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5hZGRSZXF1aXJlZE5hbWVzcGFjZXMoYmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCksIGRlZmluaXRpb24pOwotCQlCaW5kaW5nIGJpbmRpbmcgPSBiaW5kaW5nR2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZygpOwotCQkKLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oYmluZGluZykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGZpbmFsbHkgewotICAgIAlpZiAocmVjb3JkaW5nU3RhcnRlZCkKLSAgICAJCWVuZFJlY29yZGluZygpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKFdTRExFZGl0b3JQbHVnaW4uREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFX0lEKTsgCi0gICAgaWYgKCFuYW1lc3BhY2UuZW5kc1dpdGgoIi8iKSkgeyAvLyROT04tTkxTLTEkCi0gICAgCW5hbWVzcGFjZSA9IG5hbWVzcGFjZS5jb25jYXQoIi8iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBuYW1lc3BhY2UgKz0gZ2V0RmlsZU5hbWUoZGVmaW5pdGlvbikgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEZpbGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIFN0cmluZyBmaWxlTG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gIAlJUGF0aCBmaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGVMb2NhdGlvbik7Ci0gIAlyZXR1cm4gZmlsZVBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGJlZ2luUmVjb3JkaW5nKCkgewotICAgIE5vZGUgbm9kZSA9IGRvY3VtZW50OwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgKChJRE9NTm9kZSlub2RlKS5nZXRNb2RlbCgpLmJlZ2luUmVjb3JkaW5nKHRoaXMsIE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0JJTkRJTkcpOyAgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBlbmRSZWNvcmRpbmcoKSB7Ci0gICAgTm9kZSBub2RlID0gZG9jdW1lbnQ7IAotICAgIGlmIChub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgKChJRE9NTm9kZSlub2RlKS5nZXRNb2RlbCgpLmVuZFJlY29yZGluZyh0aGlzKTsgIAotICAgIH0KLSAgfQotCi0gIGNsYXNzIEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UKLSAgewotICAgIHByb3RlY3RlZCBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sOwotCi0gICAgcHVibGljIEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSgpCi0gICAgewotICAgICAgc3VwZXIoIlNwZWNpZnlCaW5kaW5nUGFnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXRUaXRsZShNZXNzYWdlcy5fVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFMpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFNfTEFCRUwpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIEJpbmRpbmdHZW5lcmF0b3IgZ2V0QmluZGluZ0dlbmVyYXRvcigpCi0gICAgewotICAgICAgcmV0dXJuICgoQmluZGluZ1dpemFyZCkgZ2V0V2l6YXJkKCkpLmdldEJpbmRpbmdHZW5lcmF0b3IoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gICAgewotICAgICAgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbCA9IG5ldyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sKHBhcmVudCwgYmluZGluZ0dlbmVyYXRvciwgdHJ1ZSk7Ci0gICAgICBwcm90b2NvbENvbXBvbmVudENvbnRyb2wuaW5pdEZpZWxkcygpOwotICAgICAgc2V0Q29udHJvbChwcm90b2NvbENvbXBvbmVudENvbnRyb2wpOwotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbXBvbmVudENvbnRyb2wsIEFTREVkaXRvckNTSGVscElkcy5CSU5ESU5HX1dJWkFSRCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sIGV4dGVuZHMgUHJvdG9jb2xDb21wb25lbnRDb250cm9sCi0gIHsKLSAgICBwdWJsaWMgQmluZGluZ1Byb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICB7Ci0gICAgICB0aGlzKHBhcmVudCwgZ2VuZXJhdG9yLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ1Byb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvciwgYm9vbGVhbiBzaG93T3ZlcndyaXRlQnV0dG9uKQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCwgZ2VuZXJhdG9yLCBzaG93T3ZlcndyaXRlQnV0dG9uKTsKLQotICAgICAgaWYgKGdlbmVyYXRvci5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY29tcG9uZW50TmFtZUZpZWxkLnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZk5hbWVMYWJlbFRleHQoKQotICAgIHsKLSAgICAgIHJldHVybiBNZXNzYWdlcy5fVUlfUE9SVF9UWVBFOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0UmVmTmFtZXMoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChnZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpKS5nZXRQb3J0VHlwZU5hbWVzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0TmFtZSgpCi0gICAgewotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gZ2VuZXJhdG9yLmdldE5hbWUoKTsKLSAgICAgIHJldHVybiBiaW5kaW5nTmFtZSAhPSBudWxsID8gYmluZGluZ05hbWUgOiBOYW1lVXRpbC5idWlsZFVuaXF1ZUJpbmRpbmdOYW1lKGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCksIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCkKLSAgICB7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gICAgCSAgcmV0dXJuIGV4dGVuc2lvbi5nZXRCaW5kaW5nQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTE2ZTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOyAgCi0gICAgICAgIAotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLQotcHVibGljIGludGVyZmFjZSBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGJhc2VHZW5lcmF0b3IpOyAgICAgICAgICAgICAKLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpOwotICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbnRyb2woKTsKLSAgCi0gIC8vIFRPRE8gY2FuIHRoaXMgZ28gaW50byBpbml0PwotICAvLwotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMmNjNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIdHRwQmluZGluZ09wdGlvbnNQYWdlIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgQnV0dG9uIGdldEJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBwb3N0QnV0dG9uOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbnRyb2w7Ci0gIHByb3RlY3RlZCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcjsKLSAgcHJvdGVjdGVkIEhUVFBDb250ZW50R2VuZXJhdG9yIGh0dHBHZW5lcmF0b3I7Ci0KLSAgcHVibGljIEh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0JaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBIVFRQQ29udGVudEdlbmVyYXRvcikgewotCQlodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfSFRUUF9CSU5ESU5HX09QVElPTlMpOyAKLQotICAgIGdldEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBnZXRCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfSFRUUF9HRVRfUkFESU8pOyAgCi0gICAgZ2V0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLQotICAgIHBvc3RCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcG9zdEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9IVFRQX1BPU1RfUkFESU8pOyAgCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlZUxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlTGlzdC5nZXQoMCk7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgdmVyYiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ2ZXJiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBpZiAoIlBPU1QiLmVxdWFscyh2ZXJiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgICAgcG9zdEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcG9zdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBnZXRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JY29tcHV0ZU9wdGlvbnMoKTsKLQkKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCSAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpCi0gIHsKLSAgCXJldHVybiB0cnVlOwotICB9ICAKLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotCWNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjb21wdXRlT3B0aW9ucygpCi0gIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgSFRUUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBIVFRQQ29udGVudEdlbmVyYXRvciBodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0JCSAgaWYgKHBvc3RCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfUE9TVCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKGdldEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBodHRwR2VuZXJhdG9yLnNldFZlcmIoSFRUUENvbnRlbnRHZW5lcmF0b3IuVkVSQl9HRVQpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotCSAgY29tcHV0ZU9wdGlvbnMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmFtZXNwYWNlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OYW1lc3BhY2VUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQzOGMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OYW1lc3BhY2VUYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DaGVja2JveENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNlbGxNb2RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwudmlld2Vycy5OYXZpZ2FibGVUYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZGlhbG9ncy5FZGl0TmFtZXNwYWNlSW5mb0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuVXBkYXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC51dGlsLlhNTENvbW1vblJlc291cmNlczsKLSAKLXB1YmxpYyBjbGFzcyBOYW1lc3BhY2VUYWJsZSBleHRlbmRzIENvbXBvc2l0ZQotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfTkFNRVNQQUNFX05BTUUiKTsgIC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfUFJFRklYIik7ICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ0xVREUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU0VMRUNUOyAvLyROT04tTkxTLTEkCi0gICAgCi0gIHByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgTGlzdCBjaGVja2VkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyIHRhYmxlVmlld2VyOyAgICAKLSAgcHJvdGVjdGVkIEJ1dHRvbiBhZGRCdXR0b247Ci0KLSAgcHJvdGVjdGVkIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIgcHJvdmlkZXI7Ci0gIHByb3RlY3RlZCBVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lcjsgICAKLSAgcHJvdGVjdGVkIElQYXRoIHJlc291cmNlTG9jYXRpb247ICAKLSAgcHJvdGVjdGVkIGludCB2aXNpYmxlUm93cyA9IC0xOyAgCi0gIHByb3RlY3RlZCBib29sZWFuIGR1bW15Um93c1JlbW92ZWQgPSBmYWxzZTsKLSAgVGFibGUgdGFibGU7Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsgIAotICAgIHRoaXMocGFyZW50LCAtMSwgLTEsIC0xKTsKLSAgfSAgICAKLQotICBwdWJsaWMgTmFtZXNwYWNlVGFibGUoQ29tcG9zaXRlIHBhcmVudCwgaW50IHZpc2libGVSb3dzKQotICB7Ci0gICAgdGhpcyhwYXJlbnQsIC0xLCAtMSwgdmlzaWJsZVJvd3MpOwotICB9Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB3aWR0aEhpbnQsIGludCBoZWlnaHRIaW50KQotICB7Ci0gICAgdGhpcyhwYXJlbnQsIHdpZHRoSGludCwgaGVpZ2h0SGludCwgLTEpOwotICB9Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB3aWR0aEhpbnQsIGludCBoZWlnaHRIaW50LCBpbnQgdmlzaWJsZVJvd3MpCi0gIHsKLSAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBzZXRMYXlvdXQoY3JlYXRlR3JpZExheW91dCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBHcmlkRGF0YSBmaWxsR0Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGZpbGxHRC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGZpbGxHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGZpbGxHRC52ZXJ0aWNhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBmaWxsR0QuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgc2V0TGF5b3V0RGF0YShmaWxsR0QpOyAgICAgICAgICAgICAKLSAgICAKLSAgICBHcm91cCBuYW1lc3BhY2VJbmZvR3JvdXAgPSBuZXcgR3JvdXAodGhpcywgU1dULk5PTkUpOwotICAgIG5hbWVzcGFjZUluZm9Hcm91cC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvR3JvdXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOyAgIAotICAgIEdyaWREYXRhIGdkID0gZmlsbEdEOwotICAgIGlmICh3aWR0aEhpbnQgIT0gLTEpCi0gICAgewotICAgICAgZ2Qud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIH0gICAKLSAgICBpZiAoaGVpZ2h0SGludCAhPSAtMSkKLSAgICB7Ci0gICAgICBnZC5oZWlnaHRIaW50ID0gaGVpZ2h0SGludDsKLSAgICB9Ci0gICAgbmFtZXNwYWNlSW5mb0dyb3VwLnNldExheW91dERhdGEoZ2QpOyAKLSAgICAvL1dvcmtiZW5jaEhlbHAuc2V0SGVscChuYW1lc3BhY2VJbmZvR3JvdXAsIG5ldyBDb250cm9sQ29udGV4dENvbXB1dGVyKG5hbWVzcGFjZUluZm9Hcm91cCwgWE1MQnVpbGRlckNvbnRleHRJZHMuWE1MQ19OQU1FU1BBQ0VfR1JPVVApKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgU3RyaW5nW10gdGl0bGVBcnJheSA9IHtJTkNMVURFLCBQUkVGSVgsIE5BTUVTUEFDRV9VUkl9OwotCi0gICAgdGFibGUgPSBuZXcgVGFibGUobmFtZXNwYWNlSW5mb0dyb3VwLCBTV1QuRlVMTF9TRUxFQ1RJT04pOwotICAgIHRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgCi0gICAgdGFibGUuc2V0TGF5b3V0RGF0YShmaWxsR0QpOwotICAgIHRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLSAgICB0YWJsZS5hZGRNb3VzZUxpc3RlbmVyKG5ldyBNb3VzZUFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpCi0gICAgICB7Ci0gICAgICAgIFRhYmxlSXRlbSBpdGVtID0gdGFibGUuZ2V0SXRlbShuZXcgUG9pbnQoZS54LCBlLnkpKTsKLSAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVtLmdldERhdGEoKTsKLSAgICAgICAgICBpZiAob2JqICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqOwotICAgICAgICAgICAgVGFibGVDb2x1bW4gY29sID0gdGFibGUuZ2V0Q29sdW1uKDApOwotICAgICAgICAgICAgaWYgKGUueCA8IGNvbC5nZXRXaWR0aCgpKSAvLyBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBTZWxlY3QgY29sdW1uIHRoZW4gcGVyZm9ybSBjaGVjay91bmNoZWNrCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50U3RhdGUgPSBob2xkZXIuZ2V0Q2hlY2tlZCgpOwotICAgICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlLmVxdWFscygidHJ1ZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRTdGF0ZS5lcXVhbHMoImZhbHNlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhvbGRlci5zZXRDaGVja2VkKCJ0cnVlIik7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgY2hlY2tlZExpc3Quc2V0KGhvbGRlci5nZXRJbmRleCgpLCAidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotICAgICAgICAgICAgICBpZiAodXBkYXRlTGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHRhYmxlVmlld2VyID0gbmV3IE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyKHRhYmxlKTsKLSAgICBwcm92aWRlciA9IG5ldyBOYW1lc3BhY2VJbmZvVGFibGVMYWJlbFByb3ZpZGVyKCk7Ci0gICAgdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKHByb3ZpZGVyKTsgICAKLSAgICB0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKHByb3ZpZGVyKTsKLSAgICB0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKHRpdGxlQXJyYXkpOwotICAgIHRhYmxlVmlld2VyLnNldENlbGxNb2RpZmllcihuZXcgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllcigpKTsKLQotICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnRbXSB3aWR0aEFycmF5ID0gezEwLCAyMCwgNTB9OwotICAgIFRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOyAgCi0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpdGxlQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgVGFibGVDb2x1bW4gY29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBpKTsKLSAgICAgIGNvbHVtbi5zZXRUZXh0KHRpdGxlQXJyYXlbaV0pOwotICAgICAgY29sdW1uLnNldEFsaWdubWVudChTV1QuTEVGVCk7Ci0gICAgICBsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSh3aWR0aEFycmF5W2ldLCB0cnVlKSk7Ci0gICAgfSAgICAgICAgIAotICAgIHRoaXMudmlzaWJsZVJvd3MgPSB2aXNpYmxlUm93czsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpc2libGVSb3dzOyBpKyspCi0gICAgewotICAgICAgVGFibGVJdGVtIGl0ZW0gPSBuZXcgVGFibGVJdGVtKHRhYmxlLCBTV1QuTk9ORSk7IAotICAgICAgaXRlbS5zZXRUZXh0KCIjIyMjIyMjIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgdGFibGUuc2V0TGF5b3V0KGxheW91dCk7ICAKLSAgICAKLSAgICBDZWxsRWRpdG9yW10gY2VsbEVkaXRvcnMgPSBuZXcgQ2VsbEVkaXRvclt0aXRsZUFycmF5Lmxlbmd0aF07Ci0gICAgY2VsbEVkaXRvcnNbMF0gPSBuZXcgTmFtZXNwYWNlSW5mb0NoZWNrYm94Q2VsbEVkaXRvcih0YWJsZSk7Ci0gICAgY2VsbEVkaXRvcnNbMV0gPSBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotICAgIHRhYmxlVmlld2VyLnNldENlbGxFZGl0b3JzKGNlbGxFZGl0b3JzKTsKLQotLy8gICAgY3JlYXRlQnV0dG9ucyhuYW1lc3BhY2VJbmZvR3JvdXApOyAgICAgICAgICAgIAotCi0gICAgaW5pdGlhbGl6ZSgpOyAgICAKLSAgfSAgICAKLQotICBwdWJsaWMgdm9pZCBzZXRVcGRhdGVMaXN0ZW5lcihVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lcikKLSAgewotICAgIHRoaXMudXBkYXRlTGlzdGVuZXIgPSB1cGRhdGVMaXN0ZW5lcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZUluZm9MaXN0KExpc3QgbmFtZXNwYWNlSW5mb0xpc3QpCi0gIHsgICAgCi0gICAgdGhpcy5uYW1lc3BhY2VJbmZvTGlzdCA9IG5hbWVzcGFjZUluZm9MaXN0OwotICAgIHVwZGF0ZSgpOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAKLQotICBwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VJbmZvTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlSW5mb0xpc3Q7Ci0gIH0gIAotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZUNoZWNrZWRMaXN0KCkKLSAgewotICAgIHJldHVybiBjaGVja2VkTGlzdDsKLSAgfSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUHJlZml4KCkKLSAgewotICAgIHJldHVybiAoKE5hbWVzcGFjZUluZm8pKG5hbWVzcGFjZUluZm9MaXN0LmdldCgwKSkpLnByZWZpeDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlTG9jYXRpb24oSVBhdGggcmVzb3VyY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMucmVzb3VyY2VMb2NhdGlvbiA9IHJlc291cmNlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgR3JpZExheW91dCBjcmVhdGVHcmlkTGF5b3V0KCkKLSAgewotICAgIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ3JpZExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgZ3JpZExheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0gICAgcmV0dXJuIGdyaWRMYXlvdXQ7Ci0gIH0KLSAgICAKLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICAvLyBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4uCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvMSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzEucHJlZml4ID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzEudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvMSk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm8yID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvMi5wcmVmaXggPSAic29hcCI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvMi51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzIpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzMgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm8zLnByZWZpeCA9ICJodHRwIjsgIC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvMy51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzMpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzQgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm80LnByZWZpeCA9ICJtaW1lIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm80LnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNCk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzUucHJlZml4ID0gInNvYXBlbmMiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzUudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNSk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNiA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzYucHJlZml4ID0gInNvYXBlbnYiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzYudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNik7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNyA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzcucHJlZml4ID0gInhzaSI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvNy51cmkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0xpc3QuYWRkKGluZm83KTsKLSAgICBjaGVja2VkTGlzdC5hZGQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm84ID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvOC5wcmVmaXggPSAieHNkIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm84LnVyaSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzgpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgdXBkYXRlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkRGF0YSBoRmlsbEdEID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgaEZpbGxHRC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGhGaWxsR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICAKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShoRmlsbEdEKTsKLSAgICBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ3JpZExheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgQnV0dG9uIGhpZGRlbkJ1dHRvbiA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgaGlkZGVuQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotICAgIGhpZGRlbkJ1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICBoaWRkZW5CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0KLSAgICBTZWxlY3Rpb25MaXN0ZW5lciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgICAgeyAgCi0gICAgICAgIGlmIChlLndpZGdldCA9PSBhZGRCdXR0b24pCi0gICAgICAgIHsKLSAgICAgICAgICBwZXJmb3JtTmV3KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OyAgIAotICAgIAotICAgIC8vIGNyZWF0ZSBhIGNvbXBvc2l0ZSB0byBob2xkIHRoZSB0aHJlZSBidXR0b25zCi0gICAgQ29tcG9zaXRlIGJ1dHRvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLSAgICBidXR0b25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShoRmlsbEdEKTsKLSAgICBHcmlkTGF5b3V0IGJ1dHRvbkdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGJ1dHRvbkdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgYnV0dG9uR3JpZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotICAgIGJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQoYnV0dG9uR3JpZExheW91dCk7Ci0KLSAgICAvLyBhZGQgdGhlIE5ldyBidXR0b24KLSAgICAvLwotICAgIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0KLSAgICBhZGRCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGFkZEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsvL1ZpZXdVdGlsaXR5LmNyZWF0ZUhvcml6b250YWxGaWxsKCkpOwotICAgIGFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzZWxlY3Rpb25MaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwZXJmb3JtTmV3KCkKLSAgewotICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2cgZGlhbG9nID0gaW52b2tlRGlhbG9nKFhNTENvbW1vblJlc291cmNlcy5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX1VJX0xBQkVMX05FV19OQU1FU1BBQ0VfSU5GT1JNQVRJT04iKSwgaW5mbyk7ICAvLyROT04tTkxTLTEkCi0gICAgaWYgKGRpYWxvZy5nZXRSZXR1cm5Db2RlKCkgPT0gRGlhbG9nLk9LKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvKTsKLSAgICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwZXJmb3JtRGVsYXllZFVwZGF0ZSgpOwotICAgIH0KLSAgfSAKLSAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2cgaW52b2tlRGlhbG9nKFN0cmluZyB0aXRsZSwgTmFtZXNwYWNlSW5mbyBpbmZvKQotICB7Ci0gICAgU2hlbGwgc2hlbGwgPSBYTUxDb21tb25SZXNvdXJjZXMuZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotICAgIEVkaXROYW1lc3BhY2VJbmZvRGlhbG9nIGRpYWxvZyA9IG5ldyBFZGl0TmFtZXNwYWNlSW5mb0RpYWxvZyhzaGVsbCwgaW5mbyk7Ci0gICAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotICAgIGRpYWxvZy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLSAgICBkaWFsb2cuc2V0UmVzb3VyY2VMb2NhdGlvbihyZXNvdXJjZUxvY2F0aW9uKTsKLSAgICBkaWFsb2cub3BlbigpOyAgICAgIAotICAgIHJldHVybiBkaWFsb2c7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVsYXllZFVwZGF0ZSgpCi0gIHsKLSAgICBSdW5uYWJsZSBkZWxheWVkVXBkYXRlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICB1cGRhdGUoKTsKLSAgICAgIH0KLSAgICB9OwotICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhkZWxheWVkVXBkYXRlKTsKLQotICAgIGlmICh1cGRhdGVMaXN0ZW5lciAhPSBudWxsKQotICAgIHsKLSAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgTmFtZXNwYWNlSW5mbyBnZXRUYXJnZXROYW1lc3BhY2VJbmZvKCkKLSAgewotICAgIHJldHVybiAobmFtZXNwYWNlSW5mb0xpc3QgIT0gbnVsbCAmJiBuYW1lc3BhY2VJbmZvTGlzdC5zaXplKCkgPiAwKSA/IAotICAgICAgICAgICAoTmFtZXNwYWNlSW5mbyluYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkgOgotICAgICAgICAgICBudWxsOwotICB9ICAgIAotCi0gICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgdm9pZCB1cGRhdGUoKQotICB7Ci0gICAgdXBkYXRlSGVscGVyKG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZUhlbHBlcihMaXN0IG5hbWVzcGFjZUluZm9MaXN0KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAodmlzaWJsZVJvd3MgIT0gLTEgJiYgIWR1bW15Um93c1JlbW92ZWQpCi0gICAgewotLy8gICAgICBkdW1teVJvd3NSZW1vdmVkID0gdHJ1ZTsKLS8vICAgICAgdGFibGVWaWV3ZXIuZ2V0VGFibGUoKS5yZW1vdmVBbGwoKTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLSAgICB0YWJsZVZpZXdlci5zZXRJbnB1dChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgeyAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaWYgKG5hbWVzcGFjZUluZm9MaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihuYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBOYW1lc3BhY2VJbmZvQ2hlY2tib3hDZWxsRWRpdG9yIGV4dGVuZHMgQ2hlY2tib3hDZWxsRWRpdG9yIGltcGxlbWVudHMgTW91c2VMaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIE5hbWVzcGFjZUluZm9DaGVja2JveENlbGxFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCkKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0VmFsdWUoT2JqZWN0IHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gICAgewotICAgICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgICAgZGVhY3RpdmF0ZSgpOwotICAgICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEZvY3VzQ29udHJvbCgpLnJlZHJhdygpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpICAgCi0gICAgeyAgICAgIAotICAgICAgaWYgKHRhYmxlVmlld2VyLmdldFRhYmxlKCkuZ2V0SXRlbShuZXcgUG9pbnQoZS54LCBlLnkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgfQotICAgIH0gICAgCi0gICAgcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGljayhNb3VzZUV2ZW50IGUpIHt9Ci0gICAgcHVibGljIHZvaWQgbW91c2VVcChNb3VzZUV2ZW50IGUpIHt9Ci0KLQotICB9Ci0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllciBpbXBsZW1lbnRzIElDZWxsTW9kaWZpZXIKLSAgewotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvQ2VsbE1vZGlmaWVyKCkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gY2FuTW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7ICAgICAgCi0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIGludCBjb2x1bW4gPSAwOwotICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgIHsKLSAgICAgICAgY29sdW1uID0gMDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmVxdWFscyhQUkVGSVgpKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAxOwotICAgICAgfQotICAgICAgZWxzZSBpZiAocHJvcGVydHkuZXF1YWxzKE5BTUVTUEFDRV9VUkkpKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAyOwotICAgICAgfQotCi0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldENvbHVtblRleHQoZWxlbWVudCwgY29sdW1uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHksIE9iamVjdCB2YWx1ZSkKLSAgICB7Ci0gICAgICBUYWJsZUl0ZW0gaXRlbSA9IChUYWJsZUl0ZW0pZWxlbWVudDsKLSAgICAgIGlmIChpdGVtICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVtLmdldERhdGEoKTsKLSAgICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqOwotICAgICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IGhvbGRlci5nZXROYW1lc3BhY2VJbmZvKCk7Ci0gICAgICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKChCb29sZWFuKXZhbHVlKS5ib29sZWFuVmFsdWUoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhvbGRlci5zZXRDaGVja2VkKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBjaGVja2VkTGlzdC5zZXQoaG9sZGVyLmdldEluZGV4KCksICJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvLnByZWZpeCA9ICgoU3RyaW5nKXZhbHVlKS50cmltKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgUnVubmFibGUgZGVsYXllZFVwZGF0ZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH07Ci0gICAgICAgICAgRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKGRlbGF5ZWRVcGRhdGUpOwotICAgICAgICAgIGlmICh1cGRhdGVMaXN0ZW5lciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICAgIH0KLQotLy8gICAgICAgICAgcGVyZm9ybURlbGF5ZWRVcGRhdGUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSAgICAgICAgICAgICAgICAgICAKLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFbGVtZW50Ci0gIHsKLSAgICBOYW1lc3BhY2VJbmZvIGluZm87Ci0gICAgaW50IGluZGV4OwotICAgIFN0cmluZyBjaGVja2VkID0gInRydWUiOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgVGFibGVFbGVtZW50KE5hbWVzcGFjZUluZm8gaW5mbywgaW50IGluZGV4KQotICAgIHsKLSAgICAgIHRoaXMuaW5mbyA9IGluZm87Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvIGdldE5hbWVzcGFjZUluZm8oKQotICAgIHsKLSAgICAgIHJldHVybiBpbmZvOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgaW50IGdldEluZGV4KCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hlY2tlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGNoZWNrZWQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldENoZWNrZWQoU3RyaW5nIGNoZWNrZWQpCi0gICAgewotICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTmFtZXNwYWNlSW5mb1RhYmxlTGFiZWxQcm92aWRlcgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyLCBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWxldGVkKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKW5hbWVzcGFjZUluZm9MaXN0LmdldChpKTsKLSAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IG5ldyBUYWJsZUVsZW1lbnQoaW5mbywgaSk7Ci0gICAgICAgIGhvbGRlci5zZXRDaGVja2VkKChTdHJpbmcpY2hlY2tlZExpc3QuZ2V0KGkpKTsKLSAgICAgICAgdi5hZGQoaG9sZGVyKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2LnRvQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbikKLSAgICB7Ci0gICAgICBUYWJsZUVsZW1lbnQgaG9sZGVyID0gKFRhYmxlRWxlbWVudClvYmplY3Q7Ci0gICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSBob2xkZXIuZ2V0TmFtZXNwYWNlSW5mbygpOwotICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgICBzd2l0Y2ggKGNvbHVtbikKLSAgICAgIHsKLSAgICAgICAgY2FzZSAxOiB7IHJlc3VsdCA9IGluZm8ucHJlZml4OyBicmVhazsgfQotICAgICAgICBjYXNlIDI6IHsgcmVzdWx0ID0gaW5mby51cmk7IGJyZWFrOyB9Ci0gICAgICB9Ci0gICAgICByZXN1bHQgPSByZXN1bHQgIT0gbnVsbCA/IHJlc3VsdC50cmltKCkgOiAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29sdW1uKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IAotICAgICAgICAgICAgcmVzdWx0ID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTk9fTkFNRVNQQUNFX05BTUUiKTsgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotLy8gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFByZWZpeCgpCi0vLyAgICB7Ci0vLyAgICAgIFN0cmluZyBkZWZhdWx0UHJlZml4ID0gInAiOwotLy8gICAgICBpZiAobmFtZXNwYWNlSW5mb0xpc3QgPT0gbnVsbCkKLS8vICAgICAgICByZXR1cm4gZGVmYXVsdFByZWZpeDsKLS8vCi0vLyAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotLy8gICAgICBmb3IgKGludCBpPTA7IGk8bmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpOyBpKyspCi0vLyAgICAgIHsKLS8vICAgICAgICBOYW1lc3BhY2VJbmZvIG5zaW5mbyA9IChOYW1lc3BhY2VJbmZvKW5hbWVzcGFjZUluZm9MaXN0LmdldChpKTsKLS8vICAgICAgICBpZiAobnNpbmZvLnByZWZpeCAhPSBudWxsKQotLy8gICAgICAgICAgdi5hZGRFbGVtZW50KG5zaW5mby5wcmVmaXgpOwotLy8gICAgICB9Ci0vLwotLy8gICAgICBpZiAodi5jb250YWlucyhkZWZhdWx0UHJlZml4KSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyBzID0gZGVmYXVsdFByZWZpeDsKLS8vICAgICAgICBmb3IgKGludCBqPTA7IHYuY29udGFpbnMocyk7IGorKykKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBzID0gZGVmYXVsdFByZWZpeCArIEludGVnZXIudG9TdHJpbmcoaik7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIHJldHVybiBzOwotLy8gICAgICB9Ci0vLyAgICAgIGVsc2UKLS8vICAgICAgICByZXR1cm4gZGVmYXVsdFByZWZpeDsKLS8vICAgIH0KLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgaWYgKGNvbHVtbkluZGV4ID09IDApICAvLyBPdXRwdXQgQ29sdW1uCi0gICAgICB7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBUYWJsZUVsZW1lbnQgaG9sZGVyID0gKFRhYmxlRWxlbWVudCkgb2JqZWN0OwotICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBob2xkZXIuZ2V0Q2hlY2tlZCgpOwotICAgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKCJ0cnVlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfeWVzLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfbm8uZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3Qgb2JqZWN0LCBPYmplY3QgcHJvcGVydHkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0gIH0KLQotICBjbGFzcyBOYW1lc3BhY2VOYXZpZ2FibGVUYWJsZVZpZXdlciBleHRlbmRzIE5hdmlnYWJsZVRhYmxlVmlld2VyCi0gIHsKLSAgICBwdWJsaWMgTmFtZXNwYWNlTmF2aWdhYmxlVGFibGVWaWV3ZXIoVGFibGUgcGFyZW50KQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3V1NETFdpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1dTRExXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU3OGEwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3V1NETFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDggMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuUHJlZmVyZW5jZXNVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcm9wZXJ0aWVzLlNlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNyZWF0ZVdTRExFbGVtZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuRE9NVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE5ld1dTRExXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9UX1dTREwgPSAiLndzZGwiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBXU0RMTmV3RmlsZVBhZ2UgbmV3RmlsZVBhZ2U7Ci0JcHJpdmF0ZSBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlIG9wdGlvbnNQYWdlOwotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotCXByaXZhdGUgQmluZGluZ0dlbmVyYXRvciBnZW5lcmF0b3I7Ci0JcHJpdmF0ZSBib29sZWFuIGZPcGVuRWRpdG9yV2hlbkZpbmlzaGVkOwotCXByaXZhdGUgSUZpbGUgZk5ld0ZpbGUgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE5ld1dTRExXaXphcmQuCi0JICovCi0JcHVibGljIE5ld1dTRExXaXphcmQoKSB7Ci0JCXN1cGVyKCk7Ci0JCWdlbmVyYXRvciA9IG5ldyBCaW5kaW5nR2VuZXJhdG9yKG51bGwsIG51bGwpOwotCQlmT3BlbkVkaXRvcldoZW5GaW5pc2hlZCA9IHRydWU7Ci0JfQotCQotCXB1YmxpYyBOZXdXU0RMV2l6YXJkKGJvb2xlYW4gb3BlbkVkaXRvcldoZW5GaW5pc2hlZCkgewotCQl0aGlzKCk7Ci0JCWZPcGVuRWRpdG9yV2hlbkZpbmlzaGVkID0gb3BlbkVkaXRvcldoZW5GaW5pc2hlZDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkI3BlcmZvcm1GaW5pc2goKQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7Ci0JCWZOZXdGaWxlID0gbmV3RmlsZVBhZ2UuY3JlYXRlTmV3RmlsZSgpOwotCi0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlTdHJpbmcgY2hhclNldCA9IHByZWZlcmVuY2UuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLQkJaWYgKGNoYXJTZXQgPT0gbnVsbCB8fCBjaGFyU2V0LnRyaW0oKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWNoYXJTZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlTdHJpbmcgd3NkbFByZWZpeCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCQlWZWN0b3IgbmFtZXNwYWNlcyA9IG9wdGlvbnNQYWdlLmdldE5hbWVzcGFjZUluZm8oKTsKLQotCQlTdHJpbmcgcHJlZml4ID0gb3B0aW9uc1BhZ2UuZ2V0UHJlZml4KCk7Ci0JCVN0cmluZyBkZWZpbml0aW9uTmFtZSA9IG9wdGlvbnNQYWdlLmdldERlZmluaXRpb25OYW1lKCk7Ci0KLQkJVVJJIHVyaTIgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmTmV3RmlsZS5nZXRGdWxsUGF0aCgpLnRvT1NTdHJpbmcoKSwgZmFsc2UpOwotCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLQkJV1NETFJlc291cmNlSW1wbCByZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7IC8vJE5PTi1OTFMtMSQKLQkJcmVzb3VyY2Uuc2V0VVJJKHVyaTIpOwotCQkKLQkJV1NETEZhY3RvcnlJbXBsIGZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0JCURlZmluaXRpb25JbXBsIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpIGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLQkJCi0JCWRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKG9wdGlvbnNQYWdlLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJZGVmaW5pdGlvbi5zZXRMb2NhdGlvbihmTmV3RmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotCQlkZWZpbml0aW9uLnNldEVuY29kaW5nKGNoYXJTZXQpOwotCQlkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZSh3c2RsUHJlZml4LCBkZWZpbml0aW9uTmFtZSkpOwotCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShwcmVmaXgsIG9wdGlvbnNQYWdlLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzcGFjZXMuc2l6ZSgpOyBpKyspIHsKLQkJCU5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKSBuYW1lc3BhY2VzLmdldChpKTsKLQotCQkJaWYgKGluZm8ucHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCWRlZmluaXRpb24uYWRkTmFtZXNwYWNlKGluZm8ucHJlZml4LCBpbmZvLnVyaSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShudWxsLCBpbmZvLnVyaSk7Ci0JCQl9Ci0JCX0KLQkJLy8gVE9ETyA6IGNzLi4uIHdoeSBkbyB3ZSBuZWVkIHRoaXM/ICB0aGVzZSBjYWxscyBhcmUgZXZpbCEKLQkJZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KHRydWUpOwotCQl0cnkgewotCQkJaWYgKG9wdGlvbnNQYWdlLmdldENyZWF0ZVNrZWxldG9uQm9vbGVhbigpKSB7Ci0JCQkJaWYgKG9wdGlvbnNQYWdlLmlzU29hcERvY0xpdGVyYWxQcm90b2NvbCgpKSB7Ci0JCQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT047Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0JCQkJfQotCi0JCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuc2VydmljZU5hbWUgPSBkZWZpbml0aW9uTmFtZTsKLQkJCQkKLQkJCQkvLyB1c2UgcHJvdG9jb2wgbmFtZSAoYXMgb3Bwb3NlZCB0byBwcm90b2NvbCBsYWJlbCkgaW4gcG9ydCBuYW1lCi0JCQkJU3RyaW5nIHByb3RvY29sTmFtZSA9IG5ldyBTdHJpbmcoKTsKLQkJCQlTdHJpbmcgcHJvdG9jb2wgPSBvcHRpb25zUGFnZS5nZXRQcm90b2NvbCgpOwotCQkJICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCQkgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLQkJCSAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpIHsKLQkJCQkJcHJvdG9jb2xOYW1lID0gZXh0ZW5zaW9uLmdldE5hbWUoKTsKLQkJCSAgICB9Ci0JCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIucG9ydE5hbWUgPSBkZWZpbml0aW9uTmFtZSArIHByb3RvY29sTmFtZTsKLQkJCSAgICBjcmVhdGVQb3J0VHlwZShkZWZpbml0aW9uTmFtZSwgd3NkbFByZWZpeCwgcHJlZml4LCBjaGFyU2V0LCBmYWN0b3J5KTsKLQkJCSAgICAKLQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVTZXJ2aWNlKGRlZmluaXRpb24pOwotCi0JCQkJLy8gR2VuZXJhdGUgQmluZGluZwotCQkJCUl0ZXJhdG9yIGJpbmRpbmdJdCA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuaXRlcmF0b3IoKTsKLQkJCQlCaW5kaW5nIGJpbmRpbmcgPSBudWxsOwotCQkJCWlmIChiaW5kaW5nSXQuaGFzTmV4dCgpKSB7Ci0JCQkJCWJpbmRpbmcgPSAoQmluZGluZykgYmluZGluZ0l0Lm5leHQoKTsKLQkJCQl9Ci0KLQkJCQlnZW5lcmF0b3Iuc2V0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLQkJCQlnZW5lcmF0b3Iuc2V0QmluZGluZyhiaW5kaW5nKTsKLQkJCQlQb3J0IHBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpLm5leHQoKTsKLQkJCQlnZW5lcmF0b3Iuc2V0TmFtZShDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE5hbWUocG9ydC5nZXRFQmluZGluZygpKSk7Ci0JCQkJZ2VuZXJhdG9yLnNldFJlZk5hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRQb3J0VHlwZVJlZmVyZW5jZShwb3J0LmdldEVCaW5kaW5nKCkpKTsKLQkJCQlnZW5lcmF0b3Iuc2V0T3ZlcndyaXRlKHRydWUpOwotCQkJCWdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmcoKTsKLQkJCQlnZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudCgpOwkKLQkJCX0KLQkJCXJlc291cmNlLnNhdmUobnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuQ291bGQgbm90IHdyaXRlIG5ldyBXU0RMIGZpbGUgaW4gV1NETCBXaXphcmQ6ICIgKyBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJLyoKLQkJICogaWYgKGZpbGUgIT0gbnVsbCkgeyBmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG5ldwotCQkgKiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGZpbGUpOyBpZiAoc2VsZWN0aW9uICE9IG51bGwpIHsgSVdvcmtiZW5jaAotCQkgKiB3b3JrYmVuY2ggPSBVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCk7IGZpbmFsCi0JCSAqIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0KLQkJICogd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOyBmaW5hbCBJV29ya2JlbmNoUGFydAotCQkgKiBmb2N1c1BhcnQgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsgaWYKLQkJICogKGZvY3VzUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKLQkJICogRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjIChuZXcgUnVubmFibGUoKSB7IHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJICogKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWZvY3VzUGFydCkuc2VsZWN0UmV2ZWFsKHNlbGVjdGlvbik7IH0gfSk7IH0gfSB9Ci0JCSAqLwotCQlpZiAoZk9wZW5FZGl0b3JXaGVuRmluaXNoZWQpIHsKLQkJCW9wZW5FZGl0b3IoZk5ld0ZpbGUpOwotCQl9Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVBvcnRUeXBlKFN0cmluZyBkZWZpbml0aW9uTmFtZSwgU3RyaW5nIHdzZGxQcmVmaXgsCi0JCQlTdHJpbmcgcHJlZml4LCBTdHJpbmcgY2hhclNldCwgV1NETEZhY3RvcnlJbXBsIGZhY3RvcnkpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2VTdG9yZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJYm9vbGVhbiBjcmVhdGVQb3J0VHlwZUluU2VwYXJhdGVXU0RMID0gCi0JCQlwcmVmZXJlbmNlU3RvcmUuZ2V0Qm9vbGVhbihXU0RMRWRpdG9yUGx1Z2luLkdFTkVSQVRFX1NFUEFSQVRFX0lOVEVSRkFDRV9QUkVGRVJFTkNFX0lEKTsKLQkJaWYgKGNyZWF0ZVBvcnRUeXBlSW5TZXBhcmF0ZVdTREwpIHsKLQkJCS8vIENyZWF0ZSB0aGUgcG9ydCB0eXBlIGluIGFub3RoZXIgV1NETCBmaWxlCi0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5JTVBPUlRfUE9SVF9UWVBFX0ZST01fQU5PVEhFUl9GSUxFID0gZmFsc2U7Ci0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5wb3J0VHlwZU5hbWUgPSBkZWZpbml0aW9uTmFtZTsKLQkJCQotCQkJSUZpbGUgcG9ydFR5cGVGaWxlID0gZ2V0SW50ZkZpbGUoZk5ld0ZpbGUpOwotCQkJCi0JCQkKLQkJCVVSSSBwb3J0VHlwZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHBvcnRUeXBlRmlsZS5nZXRGdWxsUGF0aCgpLnRvT1NTdHJpbmcoKSwgZmFsc2UpOwotCQkJUmVzb3VyY2VTZXQgcG9ydFR5cGVSZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLQkJCVdTRExSZXNvdXJjZUltcGwgcG9ydFR5cGVSZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKSBwb3J0VHlwZVJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioud3NkbCIpKTsgLy8kTk9OLU5MUy0xJAotCQkJcG9ydFR5cGVSZXNvdXJjZS5zZXRVUkkocG9ydFR5cGVVUkkpOwotCQkJCi0JCQlEZWZpbml0aW9uSW1wbCBwb3J0VHlwZURlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpIGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotCQkJcG9ydFR5cGVSZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChwb3J0VHlwZURlZmluaXRpb24pOwotCQkJCi0JCQlTdHJpbmcgcG9ydFR5cGVOYW1lc3BhY2UgPSBnZXRQb3J0VHlwZURlZmF1bHRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCXBvcnRUeXBlRGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UocG9ydFR5cGVOYW1lc3BhY2UpOwotCQkJcG9ydFR5cGVEZWZpbml0aW9uLnNldExvY2F0aW9uKHBvcnRUeXBlRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotCQkJcG9ydFR5cGVEZWZpbml0aW9uLnNldEVuY29kaW5nKGNoYXJTZXQpOwotCQkJcG9ydFR5cGVEZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZSh3c2RsUHJlZml4LCBkZWZpbml0aW9uTmFtZSArIGdldFBvcnRUeXBlRmlsZVN1ZmZpeCgpKSk7Ci0JCQlwb3J0VHlwZURlZmluaXRpb24uYWRkTmFtZXNwYWNlKHByZWZpeCwgcG9ydFR5cGVOYW1lc3BhY2UpOwotCQkJcG9ydFR5cGVEZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQodHJ1ZSk7Ci0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQb3J0VHlwZShwb3J0VHlwZURlZmluaXRpb24pOwotCQkJcG9ydFR5cGVSZXNvdXJjZS5zYXZlKG51bGwpOwotCQkJCi0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5wb3J0VHlwZU5hbWVzcGFjZSA9IHBvcnRUeXBlRGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnRUeXBlUHJlZml4ID0gZ2V0UG9ydFR5cGVEZWZhdWx0UHJlZml4KCk7Ci0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5wb3J0VHlwZUxvY2F0aW9uID0gcG9ydFR5cGVGaWxlLmdldE5hbWUoKTsJCi0JCQkKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLklNUE9SVF9QT1JUX1RZUEVfRlJPTV9BTk9USEVSX0ZJTEUgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIucG9ydFR5cGVOYW1lID0gbnVsbDsKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnRUeXBlTmFtZXNwYWNlID0gbnVsbDsKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnRUeXBlUHJlZml4ID0gbnVsbDsKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnRUeXBlTG9jYXRpb24gPSBudWxsOwotCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuSU1QT1JUX1BPUlRfVFlQRV9GUk9NX0FOT1RIRVJfRklMRSA9IGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2l6YXJkI2luaXQoSVdvcmtiZW5jaCwKLQkgKiAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQotCQkvLyBOZWVkIG5ldyBpY29uCi0JCXRoaXMuc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvci5jbGFzcywgImljb25zL25ld193c2RsX3dpei5wbmciKSk7IC8vJE5PTi1OTFMtMSQKLQkJdGhpcy5zZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5fVUlfVElUTEVfTkVXX1dTRExfRklMRSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKLQkJbmV3RmlsZVBhZ2UgPSBuZXcgV1NETE5ld0ZpbGVQYWdlKHNlbGVjdGlvbik7Ci0JCW9wdGlvbnNQYWdlID0gbmV3IFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UoTWVzc2FnZXMuX1VJX1RJVExFX09QVElPTlMsIE1lc3NhZ2VzLl9VSV9USVRMRV9PUFRJT05TLCBudWxsLCBuZXdGaWxlUGFnZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlvcHRpb25zUGFnZS5zZXRCaW5kaW5nR2VuZXJhdG9yKGdlbmVyYXRvcik7Ci0JCWFkZFBhZ2UobmV3RmlsZVBhZ2UpOwotCQlhZGRQYWdlKG9wdGlvbnNQYWdlKTsKLQl9Ci0KLQlwdWJsaWMgSVBhdGggZ2V0TmV3RmlsZVBhdGgoKSB7Ci0JCVN0cmluZyBmaWxlTmFtZSA9IG5ld0ZpbGVQYWdlLmdldEZpbGVOYW1lKCk7Ci0JCXJldHVybiBmaWxlTmFtZSAhPSBudWxsID8gbmV3IFBhdGgoZmlsZU5hbWUpIDogbnVsbDsKLQl9Ci0JCi0JcHVibGljIElGaWxlIGdldE5ld0ZpbGUoKSB7Ci0JCXJldHVybiBmTmV3RmlsZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5GaW5pc2goKSB7Ci0JCWlmIChuZXdGaWxlUGFnZS5pc1BhZ2VDb21wbGV0ZSgpICYmIG9wdGlvbnNQYWdlLmlzUGFnZUNvbXBsZXRlKCkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzdGF0aWMgcHVibGljIHZvaWQgb3BlbkVkaXRvcihmaW5hbCBJRmlsZSBpRmlsZSkgewotCQlpZiAoaUZpbGUgIT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCk7Ci0JCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQotCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlTdHJpbmcgZWRpdG9ySWQgPSBudWxsOwotCQkJCQkJSUVkaXRvckRlc2NyaXB0b3IgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IoaUZpbGUuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCksIGlGaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpLmdldENvbnRlbnRUeXBlKCkpOwotCQkJCQkJaWYgKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQkJZWRpdG9ySWQgPSBlZGl0b3IuZ2V0SWQoKTsKLQkJCQkJCX0KLQkJCQkJCXdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkub3BlbkVkaXRvcihuZXcgRmlsZUVkaXRvcklucHV0KGlGaWxlKSwgZWRpdG9ySWQpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleCkgewotCQkJCQkJLy8gQjJCR1VJUGx1Z2luLmdldFBsdWdpbigpLmdldE1zZ0xvZ2dlcigpLndyaXRlKCJFeGNlcHRpb24KLQkJCQkJCS8vIGVuY291bnRlcmVkIHdoZW4gYXR0ZW1wdGluZyB0byBvcGVuIGZpbGU6ICIgKyBpRmlsZQotCQkJCQkJLy8gKyAiXG5cbiIgKyBleCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXgpIHsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQl9Ci0JfQotCi0JcHVibGljIGNsYXNzIEF2YWlsYWJsZUNvbnRlbnRDTVZpc2l0b3IgZXh0ZW5kcyBDTVZpc2l0b3IgewotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNMVURFX0FUVFJJQlVURVMgPSBNb2RlbFF1ZXJ5LklOQ0xVREVfQVRUUklCVVRFUzsKLQkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5DTFVERV9DSElMRF9OT0RFUyA9IE1vZGVsUXVlcnkuSU5DTFVERV9DSElMRF9OT0RFUzsKLQkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5DTFVERV9TRVFVRU5DRV9HUk9VUFMgPSBNb2RlbFF1ZXJ5LklOQ0xVREVfU0VRVUVOQ0VfR1JPVVBTOwotCi0JCXB1YmxpYyBIYXNodGFibGUgY2hpbGROb2RlVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCXB1YmxpYyBIYXNodGFibGUgYXR0cmlidXRlVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCXB1YmxpYyBFbGVtZW50IHJvb3RFbGVtZW50OwotCQlwdWJsaWMgQ01FbGVtZW50RGVjbGFyYXRpb24gcm9vdEVsZW1lbnREZWNsYXJhdGlvbjsKLQkJcHVibGljIGJvb2xlYW4gaXNSb290VmlzaXRlZDsKLQkJcHJvdGVjdGVkIGJvb2xlYW4gaW5jbHVkZVNlcXVlbmNlR3JvdXBzOwotCQlwdWJsaWMgRE9NVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotCQlwdWJsaWMgQXZhaWxhYmxlQ29udGVudENNVmlzaXRvcihFbGVtZW50IHJvb3RFbGVtZW50LCBDTUVsZW1lbnREZWNsYXJhdGlvbiByb290RWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQl0aGlzLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7Ci0JCQl0aGlzLnJvb3RFbGVtZW50RGVjbGFyYXRpb24gPSByb290RWxlbWVudERlY2xhcmF0aW9uOwotCQkJdmFsaWRhdG9yID0gbmV3IERPTVZhbGlkYXRvcigpOwotCQl9Ci0KLQkJcHJvdGVjdGVkIFN0cmluZyBnZXRLZXkoQ01Ob2RlIGNtTm9kZSkgewotCQkJU3RyaW5nIGtleSA9IGNtTm9kZS5nZXROb2RlTmFtZSgpOwotCQkJQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gKENNRG9jdW1lbnQpIGNtTm9kZS5nZXRQcm9wZXJ0eSgiQ01Eb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoY21Eb2N1bWVudCAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZVVSSSA9IChTdHJpbmcpIGNtRG9jdW1lbnQuZ2V0UHJvcGVydHkoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy90YXJnZXROYW1lc3BhY2VVUkkiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCkgewotCQkJCQlrZXkgPSAiWyIgKyBuYW1lc3BhY2VVUkkgKyAiXSIgKyBrZXk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCX0KLQkJCX0KLQkJCXJldHVybiBrZXk7Ci0JCX0KLQotCQlwdWJsaWMgTGlzdCBjb21wdXRlQXZhaWxhYmxlQ29udGVudChpbnQgaW5jbHVkZU9wdGlvbnMpIHsKLQkJCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotCi0JCQlpbnQgY29udGVudFR5cGUgPSByb290RWxlbWVudERlY2xhcmF0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCQlpbmNsdWRlU2VxdWVuY2VHcm91cHMgPSAoKGluY2x1ZGVPcHRpb25zICYgSU5DTFVERV9TRVFVRU5DRV9HUk9VUFMpICE9IDApOwotCQkJdmlzaXRDTU5vZGUocm9vdEVsZW1lbnREZWNsYXJhdGlvbik7Ci0KLQkJCWlmICgoaW5jbHVkZU9wdGlvbnMgJiBJTkNMVURFX0FUVFJJQlVURVMpICE9IDApIHsKLQkJCQl2LmFkZEFsbChhdHRyaWJ1dGVUYWJsZS52YWx1ZXMoKSk7Ci0JCQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBuaWxsYWJsZUF0dHJpYnV0ZSA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSByb290RWxlbWVudERlY2xhcmF0aW9uLmdldFByb3BlcnR5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbmlsbGFibGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChuaWxsYWJsZUF0dHJpYnV0ZSAhPSBudWxsKSB7Ci0JCQkJCXYuYWRkKG5pbGxhYmxlQXR0cmlidXRlKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmICgoaW5jbHVkZU9wdGlvbnMgJiBJTkNMVURFX0NISUxEX05PREVTKSAhPSAwKSB7Ci0JCQkJaWYgKGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLk1JWEVEIHx8IGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLkVMRU1FTlQpIHsKLQkJCQkJdi5hZGRBbGwoY2hpbGROb2RlVGFibGUudmFsdWVzKCkpOwotCQkJCX0KLQkJCQllbHNlIGlmIChjb250ZW50VHlwZSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5BTlkpIHsKLQkJCQkJQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gKENNRG9jdW1lbnQpIHJvb3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0UHJvcGVydHkoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlpZiAoY21Eb2N1bWVudCAhPSBudWxsKSB7Ci0JCQkJCQlDTU5hbWVkTm9kZU1hcCBlbGVtZW50cyA9IGNtRG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLQkJCQkJCWZvciAoSXRlcmF0b3IgaSA9IGVsZW1lbnRzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCQkJCXYuYWRkKChDTUVsZW1lbnREZWNsYXJhdGlvbikgaS5uZXh0KCkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLk1JWEVEIHx8IGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLlBDREFUQSB8fCBjb250ZW50VHlwZSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5BTlkpIHsKLQkJCQkJQ01EYXRhVHlwZSBkYXRhVHlwZSA9IHJvb3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0RGF0YVR5cGUoKTsKLQkJCQkJaWYgKGRhdGFUeXBlICE9IG51bGwpIHsKLQkJCQkJCXYuYWRkKGRhdGFUeXBlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXJldHVybiB2OwotCQl9Ci0KLQkJLyoKLQkJICogcHVibGljIHZvaWQgdmlzaXRDTUFueUVsZW1lbnQoQ01BbnlFbGVtZW50IGFueUVsZW1lbnQpIHsgU3RyaW5nIHVyaSA9Ci0JCSAqIGFueUVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7IExpc3QgbGlzdCA9Ci0JCSAqIGdldENNRG9jdW1lbnRMaXN0KHJvb3RFbGVtZW50LCByb290RWxlbWVudERlY2xhcmF0aW9uLCB1cmkpOyBmb3IKLQkJICogKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7ICkgewotCQkgKiBDTURvY3VtZW50IGNtZG9jdW1lbnQgPSAoQ01Eb2N1bWVudClpdGVyYXRvci5uZXh0KCk7IGlmIChjbWRvY3VtZW50ICE9Ci0JCSAqIG51bGwpIHsgQ01OYW1lZE5vZGVNYXAgbWFwID0gY21kb2N1bWVudC5nZXRFbGVtZW50cygpOyBpbnQgc2l6ZSA9Ci0JCSAqIG1hcC5nZXRMZW5ndGgoKTsgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsgQ01Ob2RlIGVkID0KLQkJICogbWFwLml0ZW0oaSk7Ci0JCSAqIAotCQkgKiBjaGlsZE5vZGVUYWJsZS5wdXQoZ2V0S2V5KGVkKSwgZWQpOyB9IH0gfSB9Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCB2aXNpdENNQXR0cmlidXRlRGVjbGFyYXRpb24oQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhZCkgewotCQkJc3VwZXIudmlzaXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKGFkKTsKLQkJCWF0dHJpYnV0ZVRhYmxlLnB1dChhZC5nZXROb2RlTmFtZSgpLCBhZCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGVkKSB7Ci0JCQlpZiAoZWQgPT0gcm9vdEVsZW1lbnREZWNsYXJhdGlvbiAmJiAhaXNSb290VmlzaXRlZCkgewotCQkJCWlzUm9vdFZpc2l0ZWQgPSB0cnVlOwotCQkJCXN1cGVyLnZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oZWQpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaWYgKCFCb29sZWFuLlRSVUUuZXF1YWxzKGVkLmdldFByb3BlcnR5KCJBYnN0cmFjdCIpKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCWNoaWxkTm9kZVRhYmxlLnB1dChnZXRLZXkoZWQpLCBlZCk7Ci0JCQkJfQotCi0JCQkJQ01Ob2RlTGlzdCBzdWJzdGl0dXRpb25Hcm91cCA9IChDTU5vZGVMaXN0KSBlZC5nZXRQcm9wZXJ0eSgiU3Vic3RpdHV0aW9uR3JvdXAiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChzdWJzdGl0dXRpb25Hcm91cCAhPSBudWxsKSB7Ci0JCQkJCWhhbmRsZVN1YnN0aXR1dGlvbkdyb3VwKHN1YnN0aXR1dGlvbkdyb3VwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTdWJzdGl0dXRpb25Hcm91cChDTU5vZGVMaXN0IHN1YnN0aXR1dGlvbkdyb3VwKSB7Ci0JCQlpbnQgc3Vic3RpdHV0aW9uR3JvdXBMZW5ndGggPSBzdWJzdGl0dXRpb25Hcm91cC5nZXRMZW5ndGgoKTsKLQkJCWlmIChzdWJzdGl0dXRpb25Hcm91cExlbmd0aCA+IDEpIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHN1YnN0aXR1dGlvbkdyb3VwTGVuZ3RoOyBpKyspIHsKLQkJCQkJQ01Ob2RlIGVkID0gc3Vic3RpdHV0aW9uR3JvdXAuaXRlbShpKTsKLQkJCQkJaWYgKCFCb29sZWFuLlRSVUUuZXF1YWxzKGVkLmdldFByb3BlcnR5KCJBYnN0cmFjdCIpKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQljaGlsZE5vZGVUYWJsZS5wdXQoZ2V0S2V5KGVkKSwgZWQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApIHsKLQkJCWlmIChpbmNsdWRlU2VxdWVuY2VHcm91cHMpIHsKLQkJCQlpZiAoZ3JvdXAuZ2V0T3BlcmF0b3IoKSA9PSBDTUdyb3VwLlNFUVVFTkNFICYmIGdyb3VwLmdldENoaWxkTm9kZXMoKS5nZXRMZW5ndGgoKSA+IDEgJiYgaW5jbHVkZXNSZXF1aXJlZENvbnRlbnQoZ3JvdXApKSB7Ci0JCQkJCWNoaWxkTm9kZVRhYmxlLnB1dChncm91cCwgZ3JvdXApOwotCQkJCX0KLQkJCX0KLQkJCXN1cGVyLnZpc2l0Q01Hcm91cChncm91cCk7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpbmNsdWRlc1JlcXVpcmVkQ29udGVudChDTUdyb3VwIGdyb3VwKSB7Ci0JCQlMaXN0IGxpc3QgPSBnZXRWYWxpZGF0b3IoKS5jcmVhdGVDb250ZW50U3BlY2lmaWNhdGlvbkxpc3QoZ3JvdXApOwotCQkJcmV0dXJuIGxpc3Quc2l6ZSgpID4gMTsKLQkJfQotCi0JCXB1YmxpYyBET01WYWxpZGF0b3IgZ2V0VmFsaWRhdG9yKCkgewotCQkJcmV0dXJuIHZhbGlkYXRvcjsKLQkJfQotCX0gLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBoZXJlCi0JCi0JCi0JcHVibGljIHZvaWQgb3BlblByb2plY3RXU0lQcm9wZXJ0aWVzKCkgewotCQlTaGVsbCBzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJSVByb2plY3QgdGFyZ2V0UHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXdGaWxlUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChuZXdGaWxlUGFnZS5nZXRGaWxlTmFtZSgpKSkuZ2V0UHJvamVjdCgpOwotCQkvL1ByZWZlcmVuY2VzVXRpbC5jcmVhdGVQcm9wZXJ0eURpYWxvZ09uKHNoZWxsLHRhcmdldFByb2plY3QsbnVsbCxudWxsLG51bGwpLm9wZW4oKTsKLQotCQlQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJvcGVydHlEaWFsb2dPbihzaGVsbCx0YXJnZXRQcm9qZWN0LFNlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZS5QQUdFX0lEICxuZXcgU3RyaW5nW10ge1NlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZS5QQUdFX0lEfSxudWxsKS5vcGVuKCk7Ci0JfQotCQotCSAgcHVibGljIFN0cmluZyBnZXRXU0lQcmVmZXJlbmNlcygpIHsKLQkJICBJUHJvamVjdCB0YXJnZXRQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ld0ZpbGVQYWdlLmdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKG5ld0ZpbGVQYWdlLmdldEZpbGVOYW1lKCkpKS5nZXRQcm9qZWN0KCk7Ci0JCSAgUGVyc2lzdGVudFdTSUNvbnRleHQgV1NJU1NCY29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLQkJICAKLQkJICAgICBpZiAoV1NJU1NCY29udGV4dC5wcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKHRhcmdldFByb2plY3QpKQotCQkgICAgICB7Ci0JCSAgICAgICAgcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotCQkgICAgICB9IAotCQkgICAgICBlbHNlIGlmIChXU0lTU0Jjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXModGFyZ2V0UHJvamVjdCkpCi0JCSAgICAgIHsKLQkJICAgICAgICByZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0JCSAgICAgIH0KLQkJICAgICAgZWxzZSAKLQkJICAgICAgewotCQkgICAgCXJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQkgICAgICB9Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgSUZpbGUgZ2V0SW50ZkZpbGUoSUZpbGUgZmlsZSkgewotCQkgIFN0cmluZyBiYXNlTmFtZSA9IGZpbGUuZ2V0RnVsbFBhdGgoKS5yZW1vdmVGaWxlRXh0ZW5zaW9uKCkubGFzdFNlZ21lbnQoKTsKLQkJICBTdHJpbmcgc3VmZml4ID0gZ2V0UG9ydFR5cGVGaWxlU3VmZml4KCkgKyBET1RfV1NETDsKLQkJICBTdHJpbmcgZmlsZU5hbWUgPSBiYXNlTmFtZSArIHN1ZmZpeDsKLQkJICBJQ29udGFpbmVyIHBhcmVudCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCSAgSUZpbGUgcmVzdWx0ID0gcGFyZW50LmdldEZpbGUobmV3IFBhdGgoZmlsZU5hbWUpKTsKLQkJICBpZiAoIXJlc3VsdC5leGlzdHMoKSkgewotCQkJICByZXR1cm4gcmVzdWx0OwotCQkgIH0KLQotCQkgIC8vIGNvbXB1dGUgYSB1bmlxdWUgZmlsZW5hbWUgaWYgbmVlZGVkCi0JCSAgZm9yIChpbnQgY291bnQgPSAxOyBjb3VudCA8IDEwMDsgY291bnQrKykgewotCQkJICBmaWxlTmFtZSA9IGJhc2VOYW1lICsgY291bnQgKyBzdWZmaXg7Ci0JCQkgIHJlc3VsdCA9IHBhcmVudC5nZXRGaWxlKG5ldyBQYXRoKGZpbGVOYW1lKSk7Ci0JCQkgIGlmICghcmVzdWx0LmV4aXN0cygpKSB7Ci0JCQkJICBicmVhazsKLQkJCSAgfQotCQkgIH0KLQotCQkgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgU3RyaW5nIGdldFBvcnRUeXBlRmlsZVN1ZmZpeCgpIHsKLQkJICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLgotCQkgIAkJCWdldFN0cmluZyhXU0RMRWRpdG9yUGx1Z2luLklOVEVSRkFDRV9GSUxFX1NVRkZJWF9QUkVGRVJFTkNFX0lEKTsKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UG9ydFR5cGVEZWZhdWx0UHJlZml4KCkgewotCQkgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuCi0JCQlnZXRTdHJpbmcoV1NETEVkaXRvclBsdWdpbi5JTlRFUkZBQ0VfUFJFRklYX1BSRUZFUkVOQ0VfSUQpOwotCSAgfQotCSAgCi0JICBwcml2YXRlIFN0cmluZyBnZXRQb3J0VHlwZURlZmF1bHRUYXJnZXROYW1lc3BhY2UoKSB7Ci0JCSAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS4KLQkJCWdldFN0cmluZyhXU0RMRWRpdG9yUGx1Z2luLklOVEVSRkFDRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfUFJFRkVSRU5DRV9JRCk7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvUG9ydFdpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1BvcnRXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1Mjc3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvUG9ydFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Qb3J0R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuUHJvdG9jb2xDb21wb25lbnRDb250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNyZWF0ZVdTRExFbGVtZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBQb3J0V2l6YXJkIGV4dGVuZHMgV2l6YXJkCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IFNUWUxFX05FV19CSU5ESU5HID0gMTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfRVhJU1RJTkdfQklORElORyA9IDEgPDwgMTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfREVGQVVMVCA9IFNUWUxFX05FV19CSU5ESU5HIHwgU1RZTEVfRVhJU1RJTkdfQklORElORzsKLQotICBwcm90ZWN0ZWQgUG9ydEdlbmVyYXRvciBwb3J0R2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgUG9ydFdpemFyZE9wdGlvbnNQYWdlIHNwZWNpZnlCaW5kaW5nUGFnZTsKLSAgcHJvdGVjdGVkIGludCBzdHlsZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFBvcnRXaXphcmQuCi0gICAqLwotICBwdWJsaWMgUG9ydFdpemFyZChTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICB0aGlzKHNlcnZpY2UsIDApOwotICB9Ci0KLSAgcHVibGljIFBvcnRXaXphcmQoU2VydmljZSBzZXJ2aWNlLCBpbnQgc3R5bGUpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBvcnRHZW5lcmF0b3IgPSBuZXcgUG9ydEdlbmVyYXRvcihzZXJ2aWNlKTsKLSAgICBzZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5fVUlfUE9SVF9XSVpBUkQpOyAvLyROT04tTkxTLTEkCi0gICAgLy9zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NETEVkaXRvclBsdWdpbi5jbGFzcywgImljb25zL05ld1hNTC5naWYiKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgd2l6YXJkIHNldHVwIGlzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gc2V0dXAoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRQYWdlcygpCi0gIHsKLSAgICBzcGVjaWZ5QmluZGluZ1BhZ2UgPSBuZXcgUG9ydFdpemFyZE9wdGlvbnNQYWdlKHN0eWxlKTsKLSAgICBhZGRQYWdlKHNwZWNpZnlCaW5kaW5nUGFnZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotCS8vIGdvIGFoZWFkIGFuZCBhZGQgcmVxdWlyZWQgbmFtZXNwYWNlcyBmaXJzdCBiZWZvcmUgZ2VuZXJhdGluZyBwb3J0Ci0JQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuYWRkUmVxdWlyZWROYW1lc3BhY2VzKHBvcnRHZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpLCBwb3J0R2VuZXJhdG9yLmdldERlZmluaXRpb24oKSk7Ci0gICAgT2JqZWN0IG9iamVjdCA9IHBvcnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAob2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBjbGFzcyBQb3J0V2l6YXJkT3B0aW9uc1BhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlCi0gIHsKLQotICAgIHByb3RlY3RlZCBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sOwotCi0gICAgcHVibGljIFBvcnRXaXphcmRPcHRpb25zUGFnZShpbnQgc3R5bGUpCi0gICAgewotICAgICAgc3VwZXIoIlNwZWNpZnlQb3J0UGFnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXRUaXRsZShNZXNzYWdlcy5fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFMpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFNfVE9fQkVfQ1JFQVRFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwdWJsaWMgUG9ydEdlbmVyYXRvciBnZXRHZW5lcmF0b3IoKQotICAgIHsKLSAgICAgIHJldHVybiBwb3J0R2VuZXJhdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgICB7Ci0gICAgICBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sID0gbmV3IFBvcnRQcm90b2NvbENvbXBvbmVudENvbnRyb2wocGFyZW50LCBwb3J0R2VuZXJhdG9yKTsKLSAgICAgIHByb3RvY29sQ29tcG9uZW50Q29udHJvbC5pbml0RmllbGRzKCk7Ci0gICAgICBzZXRDb250cm9sKHByb3RvY29sQ29tcG9uZW50Q29udHJvbCk7Ci0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tcG9uZW50Q29udHJvbCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBPUlRfV0laQVJEKTsKLSAgICB9Ci0gIH0KLQotICBjbGFzcyBQb3J0UHJvdG9jb2xDb21wb25lbnRDb250cm9sIGV4dGVuZHMgUHJvdG9jb2xDb21wb25lbnRDb250cm9sCi0gIHsKLQotICAgIHB1YmxpYyBQb3J0UHJvdG9jb2xDb21wb25lbnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIFBvcnRHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCwgZ2VuZXJhdG9yLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWZOYW1lTGFiZWxUZXh0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gTWVzc2FnZXMuX1VJX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBnZXRSZWZOYW1lcygpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKHBvcnRHZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpKS5nZXRCaW5kaW5nTmFtZXMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHROYW1lKCkKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBwb3J0R2VuZXJhdG9yLmdldFNlcnZpY2UoKTsKLSAgICAgIHJldHVybiBOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnROYW1lKHNlcnZpY2UsIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCkKLSAgICB7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBleHRlbnNpb24uZ2V0UG9ydENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSgpOwotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvU29hcEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM4MzA5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvU29hcEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmdlbmVyYXRvci5TT0FQQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UgaW1wbGVtZW50cyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBCdXR0b24gZG9jTGl0ZXJhbDsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBycGNMaXRlcmFsOwotICBwcm90ZWN0ZWQgQnV0dG9uIHJwY0VuY29kZWQ7Ci0gIHByb3RlY3RlZCBDb21wb3NpdGUgY29udHJvbDsKLSAgcHJvdGVjdGVkIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCi0gIHB1YmxpYyBTb2FwQmluZGluZ09wdGlvbnNQYWdlKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgewotICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICB9Ci0KLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBjb250cm9sID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb250cm9sLnNldExheW91dChsYXlvdXQpOwotCi0gICAgTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0gICAgR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfU09BUF9CSU5ESU5HX09QVElPTlMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBkb2NMaXRlcmFsID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIGRvY0xpdGVyYWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTCk7IC8vJE5PTi1OTFMtMSQKLSAgICBkb2NMaXRlcmFsLnNldFNlbGVjdGlvbih0cnVlKTsKLQotICAgIHJwY0xpdGVyYWwgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcnBjTGl0ZXJhbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19SUENfTElURVJBTCk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBycGNFbmNvZGVkID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIHJwY0VuY29kZWQuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fUlBDX0VOQ09ERUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotCi0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVMaXN0LmdldCgwKTsKLQotICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChlZSk7Ci0gICAgICAgICAgU3RyaW5nIHN0eWxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoInJwYyIuZXF1YWxzKHN0eWxlKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgaWYgaXQncyBSUEMgTGl0ZXJhbCBvciBSUEMgRW5jb2RlZAotICAgICAgICAgIAlTdHJpbmcgdXNlID0gImVuY29kZWQiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCUxpc3Qgb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgICAgICAgCWlmIChvcGVyYXRpb25zLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCWVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIAkJQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgICAgICAgCQlpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSAhPSBudWxsICYmIG9wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlPYmplY3Qgb2JqZWN0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpICE9IG51bGwgJiYgb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlPYmplY3Qgb2JqZWN0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldCgwKTsKLSAgICAgICAgICAJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQllbHNlIGlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQkJQmluZGluZ0ZhdWx0IGZhdWx0ID0gKEJpbmRpbmdGYXVsdCkgb3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCUxpc3QgZmF1bHRFRSA9IGZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIAkJCQotICAgICAgICAgIAkJCWlmIChmYXVsdEVFLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChmYXVsdEVFLmdldCgwKSk7Ci0gICAgICAgICAgCQkJfQotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJCi0gICAgICAgICAgCQlpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgCQkJdXNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInVzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCX0KLSAgICAgICAgICAJCi0gICAgICAgICAgCWlmICh1c2UgIT0gbnVsbCAmJiAibGl0ZXJhbCIuZXF1YWxzKHVzZSkpIHsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAkJZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjTGl0ZXJhbC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgCQlycGNFbmNvZGVkLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCX0KLSAgICAgICAgICAJZWxzZSB7ICAgICAgICAgIAkKLSAgICAgICAgICAJCWRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0VuY29kZWQuc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICAgIAl9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZG9jTGl0ZXJhbC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBycGNMaXRlcmFsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJwY0VuY29kZWQuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgY29tcHV0ZU9wdGlvbnMoKTsKLQotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCSAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gICAgY29tcHV0ZU9wdGlvbnMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNvbXB1dGVPcHRpb25zKCkKLSAgewotCSAgaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBTT0FQQ29udGVudEdlbmVyYXRvcikgewotCQkgIFNPQVBDb250ZW50R2VuZXJhdG9yIHNvYXBHZW5lcmF0b3IgPSAoU09BUENvbnRlbnRHZW5lcmF0b3IpIGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCk7Ci0JCSAgaWYgKGRvY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9ET0NVTUVOVCk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9CSAgCi0JCSAgZWxzZSBpZiAocnBjTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAocnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9FTkNPREVEKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLQkgIGNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZU9wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODRiYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JTWVzc2FnZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CaW5kaW5nR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkJhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aS5JU29hcFN0eWxlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlNlcnZpY2VQb2xpY3lIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5WYWxpZGF0ZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuVXBkYXRlTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyLCBVcGRhdGVMaXN0ZW5lciwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKLSAgcHJvdGVjdGVkIFRleHQgdGFyZ2V0TmFtZXNwYWNlVGV4dDsKLSAgcHJvdGVjdGVkIFRleHQgcHJlZml4VGV4dDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUG9ydE9wRmllbGRCb29sZWFuID0gdHJ1ZTsKLSAgCi0gIHByb3RlY3RlZCBQYWdlQm9vayBwcm90b2NvbFBhZ2VCb29rOwotICBwcm90ZWN0ZWQgQ29tYm8gcHJvdG9jb2xDb21ibzsKLSAgcHJvdGVjdGVkIExpbmsgV1NJUHJlZmVyZW5jZUxpbms7Ci0gIAotICBwcml2YXRlIEJpbmRpbmdHZW5lcmF0b3IgZ2VuZXJhdG9yOwotICBwcml2YXRlIE1hcCBwYWdlTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSBhY3RpdmVTZXJ2aWNlUG9saWN5OwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NETE5ld0ZpbGVPcHRpb25zUGFnZS4KLSAgICogQHBhcmFtIHBhZ2VOYW1lCi0gICAqLwotICBwdWJsaWMgV1NETE5ld0ZpbGVPcHRpb25zUGFnZShTdHJpbmcgcGFnZU5hbWUpCi0gIHsKLSAgICBzdXBlcihwYWdlTmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdHZW5lcmF0b3IoQmluZGluZ0dlbmVyYXRvciBnZW5lcmF0b3IpIHsKLQkgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UuCi0gICAqIEBwYXJhbSBwYWdlTmFtZQotICAgKiBAcGFyYW0gdGl0bGUKLSAgICogQHBhcmFtIHRpdGxlSW1hZ2UKLSAgICovCi0gIHB1YmxpYyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKFN0cmluZyBwYWdlTmFtZSwgU3RyaW5nIHRpdGxlLCBJbWFnZURlc2NyaXB0b3IgdGl0bGVJbWFnZSkKLSAgewotICAgIHN1cGVyKHBhZ2VOYW1lLCB0aXRsZSwgdGl0bGVJbWFnZSk7Ci0gICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUpOwotICB9Ci0KLSAgcHVibGljIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UoU3RyaW5nIHBhZ2VOYW1lLCBTdHJpbmcgdGl0bGUsIEltYWdlRGVzY3JpcHRvciB0aXRsZUltYWdlLCBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVQYWdlKQotICB7Ci0gICAgc3VwZXIocGFnZU5hbWUsIHRpdGxlLCB0aXRsZUltYWdlKTsKLSAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSk7Ci0gICAgbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ld0ZpbGVQYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nUGFnZSNjcmVhdGVDb250cm9sKENvbXBvc2l0ZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBiYXNlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGJhc2UsIE1lc3NhZ2VzLl9VSV9IRUxQKTsgLy8kTk9OLU5MUy0xJAotICAgIGJhc2Uuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCi0gICAgLy8gIEdyb3VwIHdzZGxHcm91cCA9IFZpZXdVdGlsaXR5LmNyZWF0ZUdyb3VwKGJhc2UsIDIsICJXU0RMIiwgZmFsc2UpOwotICAgIENvbXBvc2l0ZSB3c2RsR3JvdXAgPSBuZXcgQ29tcG9zaXRlKGJhc2UsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIHdzZGxHcm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHdzZGxHcm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIAotICAgIEdyaWREYXRhIGdkID0gKEdyaWREYXRhKXdzZGxHcm91cC5nZXRMYXlvdXREYXRhKCk7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0KLSAgICBMYWJlbCB0YXJnZXROYW1lc3BhY2UgPSBuZXcgTGFiZWwod3NkbEdyb3VwLCBTV1QuTEVGVCk7Ci0gICAgdGFyZ2V0TmFtZXNwYWNlLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgIEdyaWREYXRhIG5zRGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIG5zRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB0YXJnZXROYW1lc3BhY2Uuc2V0TGF5b3V0RGF0YShuc0RhdGEpOwotICAgIAotICAgIHRhcmdldE5hbWVzcGFjZVRleHQgPSBuZXcgVGV4dCh3c2RsR3JvdXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICBHcmlkRGF0YSB0ZXh0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIHRleHREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHRleHREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIHRleHREYXRhLndpZHRoSGludCA9IDEwOwotICAgIHRhcmdldE5hbWVzcGFjZVRleHQuc2V0TGF5b3V0RGF0YSh0ZXh0RGF0YSk7Ci0gICAgCi0gICAgdGFyZ2V0TmFtZXNwYWNlVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhcmdldE5hbWVzcGFjZVRleHQsIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfVE5TX1RFWFQpOwotCi0gICAgTGFiZWwgcHJlZml4ID0gbmV3IExhYmVsKHdzZGxHcm91cCwgU1dULkxFRlQpOwotICAgIHByZWZpeC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9QUkVGSVhfV0lUSF9DT0xPTik7Ci0KLSAgICBHcmlkRGF0YSBwcmVmaXhEYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgcHJlZml4RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBwcmVmaXguc2V0TGF5b3V0RGF0YShwcmVmaXhEYXRhKTsKLSAgICAKLSAgICBwcmVmaXhUZXh0ID0gbmV3IFRleHQod3NkbEdyb3VwLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgcHJlZml4VGV4dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBwcmVmaXhUZXh0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBwcmVmaXhUZXh0RGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBwcmVmaXhUZXh0RGF0YS53aWR0aEhpbnQgPSAxMDsKLSAgICBwcmVmaXhUZXh0LnNldExheW91dERhdGEocHJlZml4VGV4dERhdGEpOwotCi0gICAgcHJlZml4VGV4dC5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByZWZpeFRleHQsIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJFRklYX1RFWFQpOwotICAgIAotICAgIC8vICAgIFhNTENhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENhdGFsb2dSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmxvb2t1cE9yQ3JlYXRlWE1MQ2F0YWxvZygiZGVmYXVsdCIpOwotICAgIC8vICAgIFNlbGVjdFhNTENhdGFsb2dJZFBhbmVsIGNhdGFsb2cgPSBuZXcgU2VsZWN0WE1MQ2F0YWxvZ0lkUGFuZWwoYmFzZSwgeG1sQ2F0YWxvZyk7Ci0KLS8vICBEZXRlcm1pbmUgaWYgdGhlIHVzZXIgd2lzaGVzIHRvIGNyZWF0ZSBhIHNrZWxldG9uIFdTREwuICBJZiB5ZXMsIHByZXNlbnQgdGhlIHVzZXIgd2l0aCBpbnB1dCBmaWVsZHMuCi0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveCA9IG5ldyBCdXR0b24oYmFzZSwgU1dULkNIRUNLKTsKLSAgICBjcmVhdGVTa2VsZXRvbkNoZWNrQm94LnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0NSRUFURV9XU0RMX1NLRUxFVE9OKTsKLSAgICBjcmVhdGVTa2VsZXRvbkNoZWNrQm94LnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3gsIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfQ1JFQVRFX1NLRUxFVE9OX0NIRUNLQk9YKTsKLSAgICAKLSAgICB3c2RsU2tlbGV0b25Hcm91cCA9IG5ldyBDb21wb3NpdGUoYmFzZSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0MiA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Mi5udW1Db2x1bW5zID0gMjsKLSAgICB3c2RsU2tlbGV0b25Hcm91cC5zZXRMYXlvdXQobGF5b3V0Mik7Ci0KLSAgICBHcmlkRGF0YSBkYXRhMiA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEyLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB3c2RsU2tlbGV0b25Hcm91cC5zZXRMYXlvdXREYXRhKGRhdGEyKTsKLQotICAgY3JlYXRlTGFiZWwod3NkbFNrZWxldG9uR3JvdXAsIE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MKTsKLSAgIHByb3RvY29sQ29tYm8gPSBuZXcgQ29tYm8od3NkbFNrZWxldG9uR3JvdXAsIFNXVC5SRUFEX09OTFkpOwotICAgR3JpZERhdGEgZGF0YUMgPSBuZXcgR3JpZERhdGEoKTsKLSAgIGRhdGFDLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgZGF0YUMuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICBwcm90b2NvbENvbWJvLnNldExheW91dERhdGEoZGF0YUMpOwotCi0gICAgSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoKTsKLSAgICBhY3RpdmVTZXJ2aWNlUG9saWN5ID0gU2VydmljZVBvbGljeUhlbHBlci5nZXRBY3RpdmVQb2xpY3lXaXRoUHJvdG9jb2wocHJvamVjdCk7Ci0gICAgU3RyaW5nIGRlZmF1bHRQcm90b2NvbE5TID0gU2VydmljZVBvbGljeUhlbHBlci5nZXREZWZhdWx0QmluZGluZyhwcm9qZWN0LCBhY3RpdmVTZXJ2aWNlUG9saWN5KTsKLSAgICBTdHJpbmcgZGVmYXVsdFByb3RvY29sTGFiZWwgPSBudWxsOwotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShkZWZhdWx0UHJvdG9jb2xOUyk7Ci0gICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKQotICAgICAgZGVmYXVsdFByb3RvY29sTGFiZWwgPSBleHRlbnNpb24uZ2V0TGFiZWwoKTsKLQotICAgIEl0ZXJhdG9yIGl0ID0gcmVnaXN0cnkuZ2V0QmluZGluZ0V4dGVuc2lvbk5hbWVzKCkuaXRlcmF0b3IoKTsKLSAgICBpbnQgZGVmYXVsdEluZGV4ID0gMDsKLSAgICBib29sZWFuIGRlZmF1bHRGb3VuZCA9IGZhbHNlOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIFN0cmluZyBwcm90b2NvbE5hbWUgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJvdG9jb2xMYWJlbCA9IG51bGw7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbE5hbWUpOwotICAgICAgaWYgKGV4dCAhPSBudWxsKSB7Ci0gICAgICAgIFN0cmluZyBsYWJlbCA9IGV4dC5nZXRMYWJlbCgpOwotICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCkgewotICAgICAgICAgIHByb3RvY29sTGFiZWwgPSBsYWJlbDsKLSAgICAgICAgICBwcm90b2NvbENvbWJvLmFkZChwcm90b2NvbExhYmVsKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIWRlZmF1bHRGb3VuZCAmJiBwcm90b2NvbExhYmVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRGb3VuZCA9IHByb3RvY29sTGFiZWwuZXF1YWxzKGRlZmF1bHRQcm90b2NvbExhYmVsKTsKLSAgICAgICAgaWYgKCFkZWZhdWx0Rm91bmQpIHsKLSAgICAgICAgICArK2RlZmF1bHRJbmRleDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoIWRlZmF1bHRGb3VuZCkgeyAgICAJCi0gICAgICBkZWZhdWx0SW5kZXggPSAwOwotICAgIH0KLQotICAgIHByb3RvY29sQ29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1BST1RPQ09MX0NPTUJPKTsKLQotICAgIC8vIENyZWF0ZSBQYWdlQm9vayBhbmQgcGFnZXMvY29udHJvbHMgZm9yIHRoZSBQYWdlQm9vawotICAgIHByb3RvY29sUGFnZUJvb2sgPSBuZXcgUGFnZUJvb2soYmFzZSwgU1dULk5PTkUpOwotICAgIEdyaWREYXRhIGdkRmlsbCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkRmlsbC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZ2RGaWxsLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIHByb3RvY29sUGFnZUJvb2suc2V0TGF5b3V0RGF0YShnZEZpbGwpOwotCi0gICAgaWYgKHByb3RvY29sQ29tYm8uZ2V0SXRlbUNvdW50KCkgPiAwKSB7Ci0gICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwcm90b2NvbENvbWJvLmdldEl0ZW0oZGVmYXVsdEluZGV4KTsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcGFnZSA9IGV4dC5nZXRCaW5kaW5nQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCk7Ci0gICAgICBwYWdlLmluaXQoZ2VuZXJhdG9yKTsKLQotICAgICAgcHJvdG9jb2xQYWdlQm9vay5zaG93UGFnZShwYWdlLmdldENvbnRyb2woKSk7Ci0gICAgICBwcm90b2NvbFBhZ2VCb29rLnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICBwcm90b2NvbENvbWJvLnNlbGVjdChkZWZhdWx0SW5kZXgpOwotICAgICAgdXBkYXRlUGFnZUJvb2socHJvdG9jb2wpOwotICAgIH0KLQotICAgIHdzZGxTa2VsZXRvbkdyb3VwLnNldFZpc2libGUodHJ1ZSk7Ci0KLSAgICBXU0lQcmVmZXJlbmNlTGluayA9IG5ldyBMaW5rKGJhc2UsIFNXVC5OT05FKTsKLSAgICBXU0lQcmVmZXJlbmNlTGluay5zZXRUZXh0KCI8QT4iICsgTWVzc2FnZXMuX1dTSV9DT01QTElBTkNFX0xJTktfVEVYVCArICI8L0E+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIFdTSVByZWZlcmVuY2VMaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgICAgewotICAgICAgICBnZXROZXdXU0RMV2l6YXJkKCkub3BlblByb2plY3RXU0lQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0gICAgICAgIGFjdGl2ZVNlcnZpY2VQb2xpY3kgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldEFjdGl2ZVBvbGljeVdpdGhQcm90b2NvbChwcm9qZWN0KTsKLSAgICAgICAgc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIFdTSVByZWZlcmVuY2VMaW5rLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkdSQUJfVkVSVElDQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9FTkQpKTsKLQotICAgIC8vIE1vZGlmeSBkZWZhdWx0IHZhbHVlcyBzZXR0aW5nIGxpbmsKLQlMaW5rIHByZWZlcmVuY2VzTGluayA9IG5ldyBMaW5rKGJhc2UsIFNXVC5OT05FKTsKLQlwcmVmZXJlbmNlc0xpbmsuc2V0VGV4dCgiPGE+IiArIE1lc3NhZ2VzLl9VSV9MSU5LX1RFWFRfTU9ESUZZX0RFRkFVTFRfVkFMVUVTX1NFVFRJTkcgICsgIjwvYT4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JcHJlZmVyZW5jZXNMaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCl7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IHNlbGVjdGlvbkV2ZW50KSB7Ci0JCQlQcmVmZXJlbmNlRGlhbG9nIHByZWZlcmVuY2VEaWFsb2cgPSBQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJlZmVyZW5jZURpYWxvZ09uKGdldFNoZWxsKCksIFdTRExFZGl0b3JQbHVnaW4uV1NETF9QUkVGRVJFTkNFX1BBR0UsIG5ldyBTdHJpbmdbXXtXU0RMRWRpdG9yUGx1Z2luLldTRExfUFJFRkVSRU5DRV9QQUdFfSwgbnVsbCk7Ci0JCQlpZiAocHJlZmVyZW5jZURpYWxvZyAhPSBudWxsKQotCQkJCXByZWZlcmVuY2VEaWFsb2cub3BlbigpOwotCQl9Ci0JfSk7Ci0gICAgCi0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoYmFzZSwgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfV0laQVJEX09QVElPTlNfUEFHRSk7Ci0KLSAgICBiYXNlLmxheW91dCgpOwotICAgIHNldENvbnRyb2woYmFzZSk7Ci0KLSAgfQotCi0gIHByaXZhdGUgTmV3V1NETFdpemFyZCBnZXROZXdXU0RMV2l6YXJkKCkKLSAgewotICAgIHJldHVybiAoTmV3V1NETFdpemFyZClnZXRXaXphcmQoKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbXB1dGVEZWZhdWx0RGVmaW5pdGlvbk5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSAiRGVmYXVsdE5hbWUiOyAvLyROT04tTkxTLTEkCi0gICAgSVBhdGggcGF0aCA9IGdldE5ld1dTRExXaXphcmQoKS5nZXROZXdGaWxlUGF0aCgpOwotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZSA9IHBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlRGVmYXVsdE5hbWVzcGFjZU5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoV1NETEVkaXRvclBsdWdpbi5ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfSUQpOwotICAgIGlmICghbmFtZXNwYWNlLmVuZHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAotICAgIAluYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29uY2F0KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgSVBhdGggcGF0aCA9IGdldE5ld1dTRExXaXphcmQoKS5nZXROZXdGaWxlUGF0aCgpOwotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlICs9IHBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLnRvU3RyaW5nKCkgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZURlZmF1bHRQcmVmaXgoKSAKLSAgewotCSAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoV1NETEVkaXRvclBsdWdpbi5ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0VfUFJFRklYX1BSRUZFUkVOQ0VfSUQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpCi0gIHsKLSAgICBzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOwotCi0gICAgaWYgKHZpc2libGUpCi0gICAgewotICAgICAgLy8gcHJpbWUgdGhlIGZpZWxkcyAgICAKLSAgICAgIHRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dChjb21wdXRlRGVmYXVsdE5hbWVzcGFjZU5hbWUoKSk7Ci0gICAgICBwcmVmaXhUZXh0LnNldFRleHQoY29tcHV0ZURlZmF1bHRQcmVmaXgoKSk7IAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCkKLSAgewotICAgIHJldHVybiBwcmVmaXhUZXh0LmdldFRleHQoKS50cmltKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmluaXRpb25OYW1lKCkKLSAgewotICAJcmV0dXJuIGNvbXB1dGVEZWZhdWx0RGVmaW5pdGlvbk5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGlmIChlLndpZGdldCA9PSB0YXJnZXROYW1lc3BhY2VUZXh0KQotICAgIHsKLSAgICAgIHN0YXJ0RGVsYXllZEV2ZW50KGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChlLndpZGdldCA9PSBwcmVmaXhUZXh0KQotICAgIHsKLSAgICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IHByb3RvY29sQ29tYm8pCi0gICAgewotICAgICAgU3RyaW5nIHByb3RvY29sID0gcHJvdG9jb2xDb21iby5nZXRUZXh0KCk7Ci0KLSAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgICBnZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihCaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoZXh0LmdldE5hbWVzcGFjZSgpKSk7Ci0gICAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbCk7Ci0gICAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVBhZ2VCb29rKFN0cmluZyBwcm90b2NvbCkKLSAgewotICAgIGlmIChwcm90b2NvbCAhPSBudWxsKQotICAgIHsKLQkgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBwYWdlID0gKENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgcGFnZU1hcC5nZXQocHJvdG9jb2wpOwotICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcGFnZSA9IGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShwcm90b2NvbCk7Ci0KLSAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBhZ2UuaW5pdChnZW5lcmF0b3IpOwotICAgICAgICAgIHBhZ2UuY3JlYXRlQ29udHJvbChwcm90b2NvbFBhZ2VCb29rKTsKLSAgICAgICAgICBwYWdlTWFwLnB1dChwcm90b2NvbCwgcGFnZSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKHBhZ2UgaW5zdGFuY2VvZiBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSB7Ci0gICAgICAgIAkgIC8vIFdlIHNob3VsZCBwdXQgdGhlIHNldFdpemFyZFBhZ2UoKSBtZXRob2QgaW50byB0aGUgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIEludGVyZmFjZQotICAgICAgICAJICAoKEJhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2UpLnNldFdpemFyZFBhZ2UodGhpcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICB7Ci0gICAgCSAgcHJvdG9jb2xQYWdlQm9vay5zaG93UGFnZShwYWdlLmdldENvbnRyb2woKSk7Ci0gICAgCSAgcHJvdG9jb2xQYWdlQm9vay5sYXlvdXQoKTsKLSAgICAJICBwcm90b2NvbFBhZ2VCb29rLmdldFBhcmVudCgpLmxheW91dCgpOwotICAgIAkgIAotICAgIAkgIC8vIHJlc2l6ZSB0aGUgd2l6YXJkIGRpYWxvZyBpZiBuZWNlc3NhcnkgZm9yIHRoZSB1cGRhdGVkIHBhZ2UKLSAgICAJICBQb2ludCBzaXplID0gcHJvdG9jb2xQYWdlQm9vay5nZXRTaGVsbCgpLmdldFNpemUoKTsKLSAgICAJICBQb2ludCBtaW5TaXplID0gcHJvdG9jb2xQYWdlQm9vay5nZXRTaGVsbCgpLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCwgdHJ1ZSk7Ci0gICAgCSAgaW50IG5ld1ggPSBNYXRoLm1heChzaXplLngsIG1pblNpemUueCk7Ci0gICAgCSAgaW50IG5ld1kgPSBNYXRoLm1heChzaXplLnksIG1pblNpemUueSk7Ci0gICAgCSAgcHJvdG9jb2xQYWdlQm9vay5nZXRTaGVsbCgpLnNldFNpemUobmV3WCwgbmV3WSk7Ci0gICAgCSAgCi0gICAgCSAgcGFnZS5zZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2Ugb3B0aW9uc1BhZ2UgPSBudWxsOwotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gIAkgIG9wdGlvbnNQYWdlID0gZXh0ZW5zaW9uLmdldEJpbmRpbmdDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9wdGlvbnNQYWdlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdXBkYXRlT2NjdXJlZChPYmplY3QgYXJnMSwgT2JqZWN0IGFyZzIpCi0gIHsKLSAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkKLSAgewotICAgIGJvb2xlYW4gcmVhZHkgPSB0cnVlOwotCi0gICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgIHNldE1lc3NhZ2UobnVsbCk7Ci0KLSAgICAvLyB0aGlzLnNldE1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSIpLHRoaXMuTk9ORSk7Ci0gICAgLy8gLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gc28gdGhhdCB0aGUgcGFnZSBkb2Vzbid0IGltbWVkaWF0ZWx5IHNob3cgdXAgd2l0aCBhbiBlcnJvcgotICAgIGlmICh0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIGlmIChyZWFkeSkKLSAgICAgIHsKLSAgICAgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlVGV4dC5nZXRUZXh0KCkpKQotICAgIHsKLSAgICAgIHJlYWR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgaWYgKCFkaXNwbGF5RGlhbG9nTWVzc2FnZXMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVhZHkgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMuc2V0TWVzc2FnZShNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSwgTk9ORSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlYWR5OwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGlzcGxheURpYWxvZ01lc3NhZ2VzKCkKLSAgewotICAgIFN0cmluZyBwcm90b2NvbCA9IGdldFByb3RvY29sKCk7Ci0gICAgaWYgKCEocGFnZU1hcC5nZXQocHJvdG9jb2wpIGluc3RhbmNlb2YgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVByb3RvY29sKHByb3RvY29sKSkKLSAgICB7Ci0gICAgICBpZiAoZ2V0TWVzc2FnZVR5cGUoKSA9PSBJTWVzc2FnZVByb3ZpZGVyLkVSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBvcHRpb25zUGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KHByb3RvY29sKTsKLSAgICBJRmlsZSB0YXJnZXRGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQobmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRGaWxlTmFtZSgpKSk7Ci0KLSAgICBpZiAob3B0aW9uc1BhZ2UgaW5zdGFuY2VvZiBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKQotICAgIHsKLSAgICAgICgoQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgb3B0aW9uc1BhZ2UpLnNldFRhcmdldElGaWxlKHRhcmdldEZpbGUpOwotCi0gICAgICBTdHJpbmcgbWVzc2FnZSA9ICgoSU1lc3NhZ2VQcm92aWRlcikgb3B0aW9uc1BhZ2UpLmdldE1lc3NhZ2UoKTsKLSAgICAgIGludCBtZXNzYWdlVHlwZSA9ICgoSU1lc3NhZ2VQcm92aWRlcikgb3B0aW9uc1BhZ2UpLmdldE1lc3NhZ2VUeXBlKCk7Ci0KLSAgICAgIGlmIChtZXNzYWdlVHlwZSA9PSBJTWVzc2FnZVByb3ZpZGVyLk5PTkUpCi0gICAgICB7Ci0gICAgICAgIHNldE1lc3NhZ2UoTWVzc2FnZXMuX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUsIE5PTkUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZXRNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VUeXBlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUHJlZml4KFN0cmluZyBwcmVmaXgpCi0gIHsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gVmFsaWRhdGVIZWxwZXIuY2hlY2tYTUxQcmVmaXgocHJlZml4KTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UgPT0gbnVsbCB8fCBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBwcm90b2NvbCBieSBjaGVja2luZyBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgd3NpIHBvbGljeSByZXF1aXJlcyBvcgotICAgKiBzdWdnZXN0cyBhIGRlZmF1bHQgcHJvdG9jb2wgYW5kIHRoYXQgcHJvdG9jb2wgaXMgbm90IHRoZSBzYW1lIGFzIHRoZQotICAgKiBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvdG9jb2wKLSAgICogCi0gICAqIEBwYXJhbSBwcm90b2NvbAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVQcm90b2NvbChTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBleHRlbnNpb24uZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0gICAgICAgIGlmIChhY3RpdmVTZXJ2aWNlUG9saWN5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBnZXQgZGVmYXVsdCBiaW5kaW5nIGFuZCBjb21wYXJlIGlmIHNhbWUgb3Igbm90Ci0gICAgICAgICAgU3RyaW5nIGRlZmF1bHRCaW5kaW5nID0gU2VydmljZVBvbGljeUhlbHBlci5nZXREZWZhdWx0QmluZGluZyhwcm9qZWN0LCBhY3RpdmVTZXJ2aWNlUG9saWN5KTsKLSAgICAgICAgICBpZiAoIWRlZmF1bHRCaW5kaW5nLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0TWVzc2FnZVNldmVyaXR5KHByb2plY3QsIGFjdGl2ZVNlcnZpY2VQb2xpY3kpOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIGlmIG5vdCBzYW1lLCBzZXQgZXJyb3IgbWVzc2FnZQotICAgICAgICAgICAgICAvLyBwdXQgdXAgYW4gZXJyb3IgbWVzc2FnZQotICAgICAgICAgICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKGRlZmF1bHRCaW5kaW5nKTsKLSAgICAgICAgICAgICAgaWYgKGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG4gPSBleHQuZ2V0TGFiZWwoKTsKLSAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKE5MUy5iaW5kKE1lc3NhZ2VzLl9FUlJPUl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTCwgbmV3IFN0cmluZ1tdIHsgbiB9KSwgSU1lc3NhZ2VQcm92aWRlci5FUlJPUik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobWVzc2FnZVR5cGUgPT0gSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBwdXQgdXAgYSB3YXJuaW5nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShkZWZhdWx0QmluZGluZyk7Ci0gICAgICAgICAgICAgIGlmIChleHQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBuID0gZXh0LmdldExhYmVsKCk7Ci0gICAgICAgICAgICAgICAgc2V0TWVzc2FnZShOTFMuYmluZChNZXNzYWdlcy5fV0FSTl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTCwgbmV3IFN0cmluZ1tdIHsgbiB9KSwgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVYTUxOYW1lKFN0cmluZyB4bWxOYW1lKQotICB7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFZhbGlkYXRlSGVscGVyLmNoZWNrWE1MTmFtZSh4bWxOYW1lKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UgPT0gbnVsbCB8fCBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc2V0RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVUYXJnZXROYW1lc3BhY2UoU3RyaW5nIG5zKQotICB7Ci0gICAgYm9vbGVhbiB0ZXN0ID0gdHJ1ZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgCW5ldyBVUkkobnMpOwotLy8gICAgICBVUkkgdGVzdFVSSSA9IG5ldyBVUkkobnMpOwotICAgICAgLy8gICAgICBpZiAoIXRlc3RVUkkuaXNHZW5lcmljVVJJKCkpCi0gICAgICAvLyAgICAgIHsKLSAgICAgIC8vICAgICAgICBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExTdHJpbmcoIl9VSV9FUlJPUl9OQU1FU1BBQ0VfSU5WQUxJRCIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgLy8gICAgICAgIHRlc3QgPSBmYWxzZTsKLSAgICAgIC8vICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8JCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gVmFsaWRhdGVIZWxwZXIuY2hlY2tYTUxOYW1lKG5zKTsKLSAgICAgIC8vCQkJaWYgKGVycm9yTWVzc2FnZSA9PSBudWxsIHx8IGVycm9yTWVzc2FnZS5sZW5ndGgoKSA9PSAwKQotICAgICAgLy8JCQl7Ci0gICAgICAvLwkJCQl0ZXN0ID0gdHJ1ZTsKLSAgICAgIC8vCQkJfQotICAgICAgLy8JCQllbHNlCi0gICAgICAvLwkJCXsKLSAgICAgIHNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5fVUlfRVJST1JfTkFNRVNQQUNFX0lOVkFMSUQpOyAvLyROT04tTkxTLTEkCi0gICAgICB0ZXN0ID0gZmFsc2U7Ci0gICAgICAvLwkJCX0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGVzdDsKLSAgfQotCi0gIC8qCi0gICAqIHByaXZhdGUgYm9vbGVhbiBhcmVQcmVmaXhlc1VuaXF1ZUFuZFZhbGlkKCkgeyBqYXZhLnV0aWwuTGlzdCBpbmZvTGlzdCA9Ci0gICAqIG5hbWVzcGFjZUluZm8uZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKTsgamF2YS51dGlsLkxpc3QgY2hlY2tlZExpc3QgPQotICAgKiBuYW1lc3BhY2VJbmZvLmdldE5hbWVzcGFjZUNoZWNrZWRMaXN0KCk7Ci0gICAqIAotICAgKiBWZWN0b3IgcHJlZml4TGlzdCA9IG5ldyBWZWN0b3IoKTsgYm9vbGVhbiB0ZXN0ID0gdHJ1ZTsgYm9vbGVhbiBpc09uZUJsYW5rID0KLSAgICogZmFsc2U7Ci0gICAqIAotICAgKiBTdHJpbmcgY3VycmVudFByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpLnRyaW0oKTsgaWYKLSAgICogKGN1cnJlbnRQcmVmaXgubGVuZ3RoKCkgPT0gMCkgeyBpc09uZUJsYW5rID0gdHJ1ZTsgfSBlbHNlIHsgaWYKLSAgICogKHZhbGlkYXRlUHJlZml4KGN1cnJlbnRQcmVmaXgpKSB7IHByZWZpeExpc3QuYWRkKGN1cnJlbnRQcmVmaXgpOyB9IGVsc2UgewotICAgKiBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfUFJFRklYX0lTX0lOVkFMSUQiLAotICAgKiBjdXJyZW50UHJlZml4KSk7IC8vJE5PTi1OTFMtMSQgcmV0dXJuIGZhbHNlOyB9IH0KLSAgICogCi0gICAqIGZvciAoaW50IGkgPSAwOyBpIDwgaW5mb0xpc3Quc2l6ZSgpOyBpKyspIHsgTmFtZXNwYWNlSW5mbyBpbmZvID0KLSAgICogKE5hbWVzcGFjZUluZm8paW5mb0xpc3QuZ2V0KGkpOyBpZgotICAgKiAoKChTdHJpbmcpY2hlY2tlZExpc3QuZ2V0KGkpKS5lcXVhbHMoInRydWUiKSkgLy8kTk9OLU5MUy0xJCB7IFN0cmluZwotICAgKiBhUHJlZml4ID0gaW5mby5wcmVmaXgudHJpbSgpOyBpZiAoYVByZWZpeC5sZW5ndGgoKSA+IDApIHsgaWYKLSAgICogKCFwcmVmaXhMaXN0LmNvbnRhaW5zKGFQcmVmaXgpKSB7IGlmICh2YWxpZGF0ZVByZWZpeChhUHJlZml4KSkgewotICAgKiBwcmVmaXhMaXN0LmFkZChhUHJlZml4KTsgfSBlbHNlIHsKLSAgICogc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX1BSRUZJWF9JU19JTlZBTElEIiwKLSAgICogaW5mby5wcmVmaXgpKTsgLy8kTk9OLU5MUy0xJCB0ZXN0ID0gZmFsc2U7IGJyZWFrOyB9IH0gZWxzZSB7Ci0gICAqIHNldEVycm9yTWVzc2FnZShXU0RMRWRpdG9yUGx1Z2luLmdldFdTRExTdHJpbmcoIl9VSV9FUlJPUl9QUkVGSVhfSVNfQV9EVVBMSUNBVEUiLAotICAgKiBpbmZvLnByZWZpeCkpOyAvLyROT04tTkxTLTEkIHRlc3QgPSBmYWxzZTsgYnJlYWs7IH0gfSBlbHNlIHsgaWYKLSAgICogKCFpc09uZUJsYW5rKSB7IGlzT25lQmxhbmsgPSB0cnVlOyB9IGVsc2UgewotICAgKiBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfTU9SRV9USEFOX09ORV9QUkVGSVhfSVNfQkxBTksiKSk7Ci0gICAqIC8vJE5PTi1OTFMtMSQgdGVzdCA9IGZhbHNlOyBicmVhazsgfSB9IH0gfSByZXR1cm4gdGVzdDsgfQotICAgKi8KLQotICBwcm90ZWN0ZWQgRGVsYXllZEV2ZW50IGRlbGF5ZWRUYXNrOwotCi0gIHByb3RlY3RlZCB2b2lkIHN0YXJ0RGVsYXllZEV2ZW50KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICBpZiAoZGVsYXllZFRhc2sgPT0gbnVsbCB8fCBkZWxheWVkVGFzay5nZXRFdmVudCgpID09IG51bGwpCi0gICAgewotICAgICAgZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0gICAgICBkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsIGRlbGF5ZWRUYXNrKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIE1vZGlmeUV2ZW50IGRlbGF5ZWRFdmVudCA9IGRlbGF5ZWRUYXNrLmdldEV2ZW50KCk7Ci0KLSAgICAgIGlmIChlLndpZGdldCA9PSBkZWxheWVkRXZlbnQud2lkZ2V0KQotICAgICAgewotICAgICAgICAvLyBzYW1lIGV2ZW50LCBqdXN0IGRpZmZlcmVudCBkYXRhLCBkZWxheSBuZXcgZXZlbnQKLSAgICAgICAgZGVsYXllZFRhc2suc2V0RXZlbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBkZWxheWVkVGFzayA9IG5ldyBEZWxheWVkRXZlbnQoKTsKLSAgICAgIGRlbGF5ZWRUYXNrLnNldEV2ZW50KGUpOwotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkudGltZXJFeGVjKDUwMCwgZGVsYXllZFRhc2spOwotICAgIH0KLSAgfQotCi0gIGNsYXNzIERlbGF5ZWRFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0gIHsKLSAgICBwcm90ZWN0ZWQgTW9kaWZ5RXZlbnQgZXZlbnQ7Ci0KLSAgICAvKgotICAgICAqIEBzZWUgUnVubmFibGUjcnVuKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgIHsKLSAgICAgIGlmIChldmVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAgICAgICBldmVudCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE1vZGlmeUV2ZW50IGdldEV2ZW50KCkKLSAgICB7Ci0gICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RXZlbnQoTW9kaWZ5RXZlbnQgZXZlbnQpCi0gICAgewotICAgICAgdGhpcy5ldmVudCA9IGV2ZW50OwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JICBpZiAoZS53aWRnZXQgPT0gY3JlYXRlU2tlbGV0b25DaGVja0JveCkgewotICAJIAlpZiAoY3JlYXRlU2tlbGV0b25DaGVja0JveC5nZXRTZWxlY3Rpb24oKSkgewotICAJIAkJd3NkbFNrZWxldG9uR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKLSAgCSAJCXByb3RvY29sUGFnZUJvb2suc2V0VmlzaWJsZSh0cnVlKTsKLSAgCSAJfQotICAJIAllbHNlIHsKLSAgCSAJCXdzZGxTa2VsZXRvbkdyb3VwLnNldFZpc2libGUoZmFsc2UpOwotICAJIAkJcHJvdG9jb2xQYWdlQm9vay5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgCSAJfQotICAJIAlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAJIH0KLSAgfQotCi0gIENvbXBvc2l0ZSB3c2RsU2tlbGV0b25Hcm91cDsKLQotICBCdXR0b24gY3JlYXRlU2tlbGV0b25DaGVja0JveDsKLQotICBwcml2YXRlIExhYmVsIGNyZWF0ZUxhYmVsKENvbXBvc2l0ZSBjb21wLCBTdHJpbmcgbGFiZWxTdHJpbmcpIHsKLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChsYWJlbFN0cmluZyk7Ci0gICAgR3JpZERhdGEgbnNEYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgbnNEYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGxhYmVsLnNldExheW91dERhdGEobnNEYXRhKTsKLSAgICAKLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGdldE5hbWVzcGFjZUluZm8oKSB7Ci0JCVZlY3RvciBuYW1lc3BhY2VzID0gbmV3IFZlY3RvcigpOwotICAJCQotICAJCS8vIEFkZCBEZWZhdWx0IE5hbWVzcGFjZXMKLQkJTmFtZXNwYWNlSW5mbyBpbmZvMSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0JCWluZm8xLnByZWZpeCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCQlpbmZvMS51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZXMuYWRkRWxlbWVudChpbmZvMSk7Ci0JCQotCQlOYW1lc3BhY2VJbmZvIGluZm84ID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLQkJaW5mbzgucHJlZml4ID0gInhzZCI7IC8vJE5PTi1OTFMtMSQKLQkJaW5mbzgudXJpID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsgLy8kTk9OLU5MUy0xJAotCQluYW1lc3BhY2VzLmFkZEVsZW1lbnQoaW5mbzgpOwotCi0JCXJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3JlYXRlU2tlbGV0b25Cb29sZWFuKCkgewotICAJcmV0dXJuIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotICAJcmV0dXJuIHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTb2FwRG9jTGl0ZXJhbFByb3RvY29sKCkgewotCSAgLy8gV2UgbmVlZCB0byByZXZpc2l0IHRoaXMuLi4uICBDYW4gd2UgbWFrZSB0aGlzIGNvZGUgbW9yZSBnZW5lcmljLi4uCi0JICAvLyBXZWUgbmVlZCB0aGlzIG1ldGhvZCBiZWNhdXNlIHRoZSBOZXdXU0RMV2l6YXJkIG5lZWRzIHRvIGtub3cgaWYgaXQgc2hvdWxkIGNyZWF0ZSB0aGUgbmV3Ci0JICAvLyBXU0RMIHdpdGggYSBkb2MtbGl0ZXJhbCBwYXR0ZXJuIChBIFdTREwgUGFydCByZWZlcmVuY2luZyBhbiBYU0QgRWxlbWVudCkKLQkgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBvcHRpb25zUGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KGdldFByb3RvY29sKCkpOwotCSAgaWYgKG9wdGlvbnNQYWdlIGluc3RhbmNlb2YgSVNvYXBTdHlsZUluZm8pIHsKLQkJICByZXR1cm4gKChJU29hcFN0eWxlSW5mbykgb3B0aW9uc1BhZ2UpLmlzRG9jdW1lbnRMaXRlcmFsUGF0dGVybigpOwotCSAgfQotCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcHJvamVjdCB0aGUgY3VycmVudCBjb250YWluaW5nIHByb2plY3QKLSAgICogCi0gICAqIEByZXR1cm4gSVByb2plY3Qgb2JqZWN0LiBJZiBwYXRoIGlzIDxjb2RlPm51bGw8L2NvZGU+IHRoZSByZXR1cm4gdmFsdWUgaXMKLSAgICogICAgICAgICBhbHNvIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgSVBhdGggcGF0aCA9IG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKTsKLSAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHdvcmtzcGFjZS52YWxpZGF0ZVBhdGgocGF0aC50b1N0cmluZygpLCBJUmVzb3VyY2UuUFJPSkVDVCkuaXNPSygpKQotICAgICAgewotICAgICAgICBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHBhdGgudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByb2plY3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCkuZ2V0UHJvamVjdCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwcm9qZWN0OwotICB9Ci0KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFNlcnZpY2VQb2xpY3koKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNlcnZpY2VQb2xpY3k7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNWZiMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFdTRExOZXdGaWxlUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UKLXsKLSAgcHVibGljIFdTRExOZXdGaWxlUGFnZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICB7Ci0gICAgc3VwZXIoTWVzc2FnZXMuX1VJX1RJVExFX05FV19XU0RMX0ZJTEUsIHNlbGVjdGlvbik7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXRUaXRsZShNZXNzYWdlcy5fVUlfVElUTEVfTkVXX1dTRExfRklMRSk7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEUpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIAotICB7Ci0gICAgLy8gaW5oZXJpdCBkZWZhdWx0IGNvbnRhaW5lciBhbmQgbmFtZSBzcGVjaWZpY2F0aW9uIHdpZGdldHMKLSAgICBzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0gICAgdGhpcy5zZXRGaWxlTmFtZShjb21wdXRlRGVmYXVsdEZpbGVOYW1lKCkpOwotCi0gICAgc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkKLSAgewotICAgIFBhdGggbmV3TmFtZSA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpOwotICAgIFN0cmluZyBmdWxsRmlsZU5hbWUgPSBnZXRGaWxlTmFtZSgpOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBuZXdOYW1lLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICBpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIWV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ3c2RsIikpICAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLl9VSV9FUlJPUl9GSUxFX01VU1RfRU5EX1dJVEhfV1NETCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sgZm9yIGZpbGUgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUKLSAgICBTdHJpbmcgc2FtZU5hbWUgPSBleGlzdHNGaWxlQW55Q2FzZShmdWxsRmlsZU5hbWUpOwotICAgIGlmIChzYW1lTmFtZSAhPSBudWxsKSAKLSAgICB7Ci0vLyAgICAgICBTdHJpbmcgcXVhbGlmaWVkRmlsZU5hbWUgPSBnZXRDb250YWluZXJGdWxsUGF0aCgpLnRvU3RyaW5nKCkgKyAnLycgKyBmdWxsRmlsZU5hbWU7Ci0gICAgICAgc2V0RXJyb3JNZXNzYWdlKE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9FUlJPUl9GSUxFX0FMUkVBRFlfRVhJU1RTLCBzYW1lTmFtZSkpOyAvLyROT04tTkxTLTEkCi0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIAotICAgIHJldHVybiBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZGVmYXVsdE5hbWUgPSAiTmV3V1NETEZpbGUiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBTdHJpbmcgZGVmYXVsdEZpbGVFeHRlbnNpb24gPSAiLndzZGwiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBTdHJpbmdbXSBmaWx0ZXJFeHRlbnNpb25zID0geyAiKi53c2RsIn07IC8vJE5PTi1OTFMtMSQKLQotCi0gIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZURlZmF1bHRGaWxlTmFtZSgpCi0gIHsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIFN0cmluZyBmaWxlTmFtZSA9IGRlZmF1bHROYW1lICsgZGVmYXVsdEZpbGVFeHRlbnNpb247Ci0gICAgSVBhdGggY29udGFpbmVyRnVsbFBhdGggPSBnZXRDb250YWluZXJGdWxsUGF0aCgpOwotICAgIGlmIChjb250YWluZXJGdWxsUGF0aCAhPSBudWxsKQotICAgIHsKLSAgICAgIHdoaWxlICh0cnVlKQotICAgICAgewotICAgICAgICBJUGF0aCBwYXRoID0gY29udGFpbmVyRnVsbFBhdGguYXBwZW5kKGZpbGVOYW1lKTsKLSAgICAgICAgLy8gaWYgKFdvcmtiZW5jaFV0aWxpdHkuZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmV4aXN0cyhwYXRoKSkKLSAgICAgICAgaWYgKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZXhpc3RzKHBhdGgpKQotICAgICAgICB7Ci0gICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICBmaWxlTmFtZSA9IGRlZmF1bHROYW1lICsgY291bnQgKyBkZWZhdWx0RmlsZUV4dGVuc2lvbjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmlsZU5hbWU7Ci0gIH0KLQotICAvLyByZXR1cm5zIHRydWUgaWYgZmlsZSBvZiBzcGVjaWZpZWQgbmFtZSBleGlzdHMgaW4gYW55IGNhc2UgZm9yIHNlbGVjdGVkIGNvbnRhaW5lcgotICBwcm90ZWN0ZWQgU3RyaW5nIGV4aXN0c0ZpbGVBbnlDYXNlKFN0cmluZyBmaWxlTmFtZSkKLSAgewotICAgIGlmICggKGdldENvbnRhaW5lckZ1bGxQYXRoKCkgIT0gbnVsbCkgJiYgKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuaXNFbXB0eSgpID09IGZhbHNlKQotICAgICAgICAgICYmIChmaWxlTmFtZS5jb21wYXJlVG8oIiIpICE9IDApKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgLy9sb29rIHRocm91Z2ggYWxsIHJlc291cmNlcyBhdCB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciAtIGNvbXBhcmUgaW4gdXBwZXIgY2FzZQotICAgICAgSVJlc291cmNlIHBhcmVudCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihnZXRDb250YWluZXJGdWxsUGF0aCgpKTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotICAgICAgewotICAgICAgICBJQ29udGFpbmVyIGNvbnRhaW5lciA9IChJQ29udGFpbmVyKSBwYXJlbnQ7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSVJlc291cmNlW10gbWVtYmVycyA9IGNvbnRhaW5lci5tZW1iZXJzKCk7Ci0gICAgICAgICAgU3RyaW5nIGVudGVyZWRGaWxlVXBwZXIgPSBmaWxlTmFtZS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtZW1iZXJzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZVVwcGVyTmFtZSA9IG1lbWJlcnNbaV0uZ2V0TmFtZSgpLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2VVcHBlck5hbWUuZXF1YWxzKGVudGVyZWRGaWxlVXBwZXIpKQotICAgICAgICAgICAgeyAgCi0gICAgICAgICAgICAgIHJldHVybiBtZW1iZXJzW2ldLmdldE5hbWUoKTsgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3hzZC9YU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC94c2QvWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNiMDU5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3hzZC9YU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkYXB0ZXJzLkNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBYU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3QoT2JqZWN0IHBhcmVudE1vZGVsT2JqZWN0LCBFbGVtZW50W10gZWxlbWVudENoYWluLCBpbnQgc3RhcnQsIGludFtdIGVuZCkKLSAgeyAgIAotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIGlmIChwYXJlbnRNb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXBhcmVudE1vZGVsT2JqZWN0OwotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFNjaGVtYSgpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gZWxlbWVudENoYWluW2VsZW1lbnRDaGFpbi5sZW5ndGggLSAxXTsKLSAgICAgICAgcmVzdWx0ID0gc2NoZW1hLmdldENvcnJlc3BvbmRpbmdDb21wb25lbnQodGFyZ2V0RWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcmVudE1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnlBZGFwdGVyKQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQ2F0ZWdvcnlBZGFwdGVyKXBhcmVudE1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKTsKLSAgICB9Ci0vLyAgICBlbHNlIGlmIChwYXJlbnRNb2RlbE9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5KQotLy8gICAgewotLy8gICAgICByZXN1bHQgPSAoKENhdGVnb3J5KXBhcmVudE1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKTsKLS8vICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXROb2RlKE9iamVjdCBtb2RlbE9iamVjdCkKLSAgeyAgICAgICAgCi0gICAgTm9kZSBub2RlID0gbnVsbDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7ICAgICAgICAgICAKLSAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW1vZGVsT2JqZWN0OwotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFNjaGVtYSgpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgewotICAgICAgICBub2RlID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9ICAgICAgICAKLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgIHsKLSAgICAgIG5vZGUgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KW1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnlBZGFwdGVyKQotICAgIHsKLSAgICAgIG5vZGUgPSAoKENhdGVnb3J5QWRhcHRlciltb2RlbE9iamVjdCkuZ2V0WFNEU2NoZW1hKCkuZ2V0RWxlbWVudCgpOwotICAgIH0KLS8vICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnkpCi0vLyAgICB7Ci0vLyAgICAgIG5vZGUgPSAoKENhdGVnb3J5KW1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKS5nZXRFbGVtZW50KCk7Ci0vLyAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5vZGU7Ci0gIH0gICAgICAKLX0gCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvckNTSGVscElkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JDU0hlbHBJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyMDY2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvckNTSGVscElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0b3JDU0hlbHBJZHMgewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBwbHVnaW5JZCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS4iOyAvLyROT04tTkxTLTEkCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JTmV3IFdTREwgV2l6YXJkIC0gT3B0aW9ucyBwYWdlOgotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfV0laQVJEX09QVElPTlNfUEFHRV9UTlNfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDAwMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJFRklYX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwMDEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX0NSRUFURV9TS0VMRVRPTl9DSEVDS0JPWCA9IHBsdWdpbklkICsgIndzZGx1MDAwMiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJPVE9DT0xfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMDMiOyAvLyROT04tTkxTLTEkCi0KLS8vCVNvYXAgQmluZGluZyBPcHRpb25zCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRE9DX0xJVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBSUENfTElUX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDExIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJQQ19FTkNPREVEX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDEyIjsgLy8kTk9OLU5MUy0xJAotCi0vLwlIVFRQIEJpbmRpbmcgT3B0aW9ucwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEhUVFBfR0VUX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDEzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEhUVFBfUE9TVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxNCI7IC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBEZXNpZ24gVmlldwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVdfU0VSVklDRV9PQkpFQ1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwMjAiOyAgIC8vICBTZXJ2aWNlIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiB3c2RsdTAwMjAgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVdfQklORElOR19PQkpFQ1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwMjEiOyAgIC8vICBCaW5kaW5nIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiB3c2RsdTAwMjEgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVdfUE9SVFRZUEVfT0JKRUNUID0gcGx1Z2luSWQgKyAid3NkbHUwMDIyIjsgICAvLyAgUG9ydFR5cGUgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gd3NkbHUwMDIyIC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBPdXRsaW5lIFZpZXcKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX09VVExJTkVfVklFV19HUk9VUCA9IHBsdWdpbklkICsgIndzZGx1MDAyMyI7ICAgLy8gIEltcG9ydHMsIFR5cGVzLCBTZXJ2aWNlcywgQmluZGluZ3MsIFBvcnQgVHlwZXMsIE1lc3NhZ2VzIChncm91cGVkIHRvZ2V0aGVyKSAgICAgICAgICAgICAtLT4gd3NkbHUwMDIzIC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBQb3J0IFdpemFyZAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEID0gcGx1Z2luSWQgKyAid3NkbHUwMDMwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDAzMSI7ICAgLy8gIG5vdCB1c2VkIC0gZHVwIGJlbG93IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUX1dJWkFSRF9CSU5ESU5HX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDMyIjsgICAvLyAgbm90IHVzZWQgLSBkdXAgYmVsb3cgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEX1BST1RPQ09MX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDMzIjsgICAvLyAgbm90IHVzZWQgLSBkdXAgYmVsb3cgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIEdlbmVyYXRlIEJpbmRpbmcgV2l6YXJkCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQklORElOR19XSVpBUkQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNDAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPVE9DT0xfQ09NUE9ORU5UX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA0MSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9DT01QT05FTlRfUkVGX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDQyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0NPTVBPTkVOVF9QUk9UT0NPTF9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDA0MyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwUk9UT0NPTF9DT01QT05FTlRfT1ZFUldSSVRFX0NIRUNLQk9YID0gcGx1Z2luSWQgKyAid3NkbHUwMDQ0IjsgLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBFZGl0IE5hbWVzcGFjZXMgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA1MCI7ICAgLy8gIEVkaXQgTmFtZXNwYWNlcyBEaWFsb2cgICAgICAgICAgICAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA1MCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfVE5TX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNTEiOyAgIC8vICBUYXJnZXQgTmFtZXNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiICAgICAgICAgIC0tPiB3c2RsdTAwNTEgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HX0RFQ0xBUkFUSU9OU19UQUJMRSA9IHBsdWdpbklkICsgIndzZGx1MDA1MiI7ICAgLy8gIE5hbWVzcGFjZSBEZWNsYXJhdGlvbnMgICAgICAgICAgICAgICAgICAidGFibGUiICAgICAgICAgLS0+IHdzZGx1MDA1MiAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19BRERfQlVUVE9OID0gcGx1Z2luSWQgKyAid3NkbHUwMDUzIjsgICAvLyAgQWRkLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIGJ1dHRvbiIgICAtLT4gd3NkbHUwMDUzIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19FRElUX0JVVFRPTiA9IHBsdWdpbklkICsgIndzZGx1MDA1NCI7ICAgLy8gIEVkaXQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBidXR0b24iICAgLS0+IHdzZGx1MDA1NCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfREVMRVRFX0JVVFRPTiA9IHBsdWdpbklkICsgIndzZGx1MDA1NSI7ICAgLy8gIERlbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBidXR0b24iICAgLS0+IHdzZGx1MDA1NSAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gQWRkIE5hbWVzcGFjZSBEZWNsYXJhdGlvbnMgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTCA9IHBsdWdpbklkICsgIndzZGx1MDA2MCI7ICAgLy8gIEFkZCBOYW1lc3BhY2UgRGVjbGFyYXRpb25zIERpYWxvZyAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA2MCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfU0VMRUNUX1JFR19OU19SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDA2MSI7ICAgLy8gIFNlbGVjdCBGcm9tIFJlZ2lzdGVyZWQgTmFtZXNwYWNlcyAgICAgICAicmFkaW8iICAgICAgICAgLS0+IHdzZGx1MDA2MSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfU1BFQ0lGWV9ORVdfTlNfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwNjIiOyAgIC8vICBTcGVjaWZ5IE5ldyBOYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgInJhZGlvIiAgICAgICAgIC0tPiB3c2RsdTAwNjIgLy8kTk9OLU5MUy0xJAotCi0JLy8gUmVnaXN0ZXJlZCBOYW1lc3BhY2VzOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX1NFTEVDVF9OU19UT19BRERfVEFCTEUgPSBwbHVnaW5JZCArICJ3c2RsdTAwNjMiOyAgIC8vICBTZWxlY3QgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdG8gYWRkICJ0YWJsZSIgICAgICAgIC0tPiB3c2RsdTAwNjMgLy8kTk9OLU5MUy0xJAotCi0JLy8gTmV3IE5hbWVzcGFjZToKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9QUkVGSVhfVEVYVCA9IHBsdWdpbklkICsgIiI7ICAgLy8gIFByZWZpeDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDY0IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9OQU1FU1BBQ0VfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAiIjsgICAvLyAgTmFtZXNwYWNlIE5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiAgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNjUgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX0xPQ0FUSU9OX0hJTlRfVEVYVCA9IHBsdWdpbklkICsgIiI7ICAgLy8gIExvY2F0aW9uIEhpbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDY2IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9CUk9XU0VfQlVUVE9OID0gcGx1Z2luSWQgKyAiIjsgICAvLyAgQnJvd3NlLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIGJ1dHRvbiIgICAtLT4oQ09NTU9OKSB3c2RsdTAwNjcgLy8kTk9OLU5MUy0xJAotCQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gTmV3IE5hbWVzcGFjZSBJbmZvcm1hdGlvbiBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19OQU1FU1BBQ0VfSU5GT19ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwNjgiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBOQU1FU1BBQ0VfTkFNRSA9IHBsdWdpbklkICsgIndzZGx1MDA2NSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGSVggPSAgICAgICAgIHBsdWdpbklkICsgIndzZGx1MDA2NCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMT0NBVElPTl9ISU5UID0gIHBsdWdpbklkICsgIndzZGx1MDA2NiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCUk9XU0UgPSAgICAgICAgIHBsdWdpbklkICsgIndzZGx1MDA2NyI7IC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBOZXcgTWVzc2FnZSBEaWFsb2cKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfTUVTU0FHRV9ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX01FU1NBR0VfRElBTE9HX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA4MSI7ICAvLyBub3QgdXNlZCAtLSB0ZXh0IHdpbGwgdXNlICJkaWFsb2ciIGNvbnRleHQgSWQgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIFNwZWNpZnkgTWVzc2FnZSBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfTUVTU0FHRV9ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODIiOyAvLyAgICAgICAgICAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA4MiAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX0RJQUxPR19OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNzAiOyAvLyAgIE5hbWUgKD8gPSBjaGFyYWN0ZXIsICogPSBhbnkgc3RyaW5nKTogICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDcwIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX0RJQUxPR19DT01QT05FTlRTX0xJU1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwNzEiOyAgLy8gIENvbXBvbmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDcxIC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfRElBTE9HX1NFQVJDSF9TQ09QRSA9IHBsdWdpbklkICsgIndzZGx1MDA3MiI7IC8vICBTZWFyY2ggU2NvcGU6IC8vJE5PTi1OTFMtMSQKLQkvL1dvcmtzcGFjZSwgRW5jbG9zaW5nIFByb2plY3QsIEN1cnJlbnQgUmVzb3VyY2UsIFdvcmtpbmcgU2V0cyAoR3JvdXBlZCkgICAgICAgICAgInJhZGlvIiAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA3MgotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIE5ldyBCaW5kaW5nIERpYWxvZwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19CSU5ESU5HX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4MyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfQklORElOR19ESUFMT0dfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDg0IjsgLy8gbm90IHVzZWQgLS0gdGV4dCB3aWxsIHVzZSAiZGlhbG9nIiBjb250ZXh0IElkIC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gU3BlY2lmeSBCaW5kaW5nIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9CSU5ESU5HX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4NSI7ICAvLyAgU3BlY2lmeSBCaW5kaW5nIERpYWxvZyAgICAgICAgICAgICAgICAgICJkaWFsb2ciICAgICAgICAtLT4gd3NkbHUwMDg1IC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gTmV3IFBvcnRUeXBlIERpYWxvZyAKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfUE9SVFRZUEVfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDg2IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19QT1JUVFlQRV9ESUFMT0dfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDg3IjsgLy8gbm90IHVzZWQgLS0gdGV4dCB3aWxsIHVzZSAiZGlhbG9nIiBjb250ZXh0IElkIC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gU3BlY2lmeSBQb3J0IFR5cGUgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX1BPUlRUWVBFX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4OCI7IC8vICBTcGVjaWZ5IFBvcnQgVHlwZSBEaWFsb2cgICAgICAgICAgICAgICAgImRpYWxvZyIgICAgICAgIC0tPiB3c2RsdTAwODggLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBQcm9wZXJ0aWVzCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JLy9EZWZpbml0aW9uOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTAwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfREVGX1BSRUZJWF9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTAxIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfREVGX1ROU19URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTAyIjsgLy8kTk9OLU5MUy0xJAotCi0JLy9Qb3J0OgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUE9SVF9CSU5ESU5HX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTAzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUE9SVF9BRERSRVNTX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QT1JUX1BST1RPQ09MX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDUiOyAvLyROT04tTkxTLTEkCi0KLQkvL0JpbmRpbmc6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19CSU5ESU5HX1BPUlRUWVBFX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTA2IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQklORElOR19QUk9UT0NPTF9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTA3IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQklORElOR19HRU5fQklORElOR19CVVRUT04gPSBwbHVnaW5JZCArICJ3c2RsdTAxMDgiOyAvLyROT04tTkxTLTEkCi0KLQkvL0lucHV0L091dHB1dC9GYXVsdDoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX01FU1NBR0VfUkVGX01FU1NBR0VfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMDkiOyAvLyROT04tTkxTLTEkCi0KLQkvL1BhcnQ6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX0VMRU1FTlRfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX1RZUEVfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX1RZUEVfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX0VMRU1FTlRfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTMiOyAvLyROT04tTkxTLTEkCi0JCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0RPQ1VNRU5UQVRJT05fVEFCID0gcGx1Z2luSWQgKyAid3NkbHUwMTE0IjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFID0gcGx1Z2luSWQgKyAid3NkbHUwMTIwIjsgIC8vIE5ldyBXU0RMIFdpemFyZCAtIG9wdGlvbnMgcGFnZSAJLS0+IHdzZGx1MDEyMCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9ERVNJR05fVklFVyA9IHBsdWdpbklkICsgIndzZGx1MDEyMSI7IC8vICBEZXNpZ24gVmlldyAJCQkJLS0+IHdzZGx1MDEyMSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9PVVRMSU5FX1ZJRVcgPSBwbHVnaW5JZCArICJ3c2RsdTAxMjIiOyAgLy8gT3V0bGluZSBWaWV3IAkJCQktLT4gd3NkbHUwMTIyIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BST1BFUlRJRVNfVklFVyA9IHBsdWdpbklkICsgIndzZGx1MDEyMyI7IC8vICBQcm9wZXJ0aWVzIFZpZXcJCQkJLS0+IHdzZGx1MDEyMyAvLyROT04tTkxTLTEkCi0KLS8vCVdTREwgUHJlZmVyZW5jZSBQYWdlOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUFJFRl9ERUZBVUxUX1ROUyA9IHBsdWdpbklkICsgIndzZGx1MDIwMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BSRUZfUkVHRU5fT05fU0FWRSA9IHBsdWdpbklkICsgIndzZGx1MDIwMSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BSRUZfUFJPTVBUX1JFR0VOX09OX1NBVkUgPSBwbHVnaW5JZCArICJ3c2RsdTAyMDIiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUFJFRl9FTkFCTEVfQVVUT19JTVBPUlRfQ0xFQU5VUCA9IHBsdWdpbklkICsgIndzZGx1MDIwNSI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2FjMGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEFTREVkaXRvclBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCXB1YmxpYyBzdGF0aWMgaW50IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRCA9IDI7Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBBU0RFZGl0b3JQbHVnaW4gaW5zdGFuY2U7Ci0JICAKLQkgIHB1YmxpYyBBU0RFZGl0b3JQbHVnaW4oKSB7CQkgIAotCSAgfQotCSAgCi0vLwkvKioKLS8vCSAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgotLy8JICovCi0vLwlwdWJsaWMgc3RhdGljIEFTREVkaXRvclBsdWdpbiBnZXRJbnN0YW5jZSgpCi0vLwl7Ci0vLwkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLS8vCQkJaW5zdGFuY2UgPSBuZXcgQVNERWRpdG9yUGx1Z2luKCk7Ci0vLwkJfQotLy8JCXJldHVybiBpbnN0YW5jZTsKLS8vCX0KLS8vCQotLy8JcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyBpY29uTmFtZSkKLS8vCXsKLS8vCQlJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnaXN0cnkgPSBnZXRJbWFnZVJlZ2lzdHJ5KCk7Ci0vLwkJCi0vLwkJaWYgKGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKSAhPSBudWxsKQotLy8JCXsKLS8vCQkJcmV0dXJuIGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKTsKLS8vCQl9Ci0vLwkJZWxzZQotLy8JCXsKLS8vCQkJaW1hZ2VSZWdpc3RyeS5wdXQoaWNvbk5hbWUsIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShnZXRDbGFzcygpLCBpY29uTmFtZSkpOwotLy8JCQlyZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotLy8JCX0KLS8vCX0KLQkKLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKLQkJLy8gV2Ugc2hvdWxkIG5vdCBrbm93IGFib3V0IFdTRExFZGl0b3JQbHVnaW4uamF2YS4gIEV2ZW50dWFsbHksIHdlIHNob3VsZCBtb3ZlIHRoZXNlCi0JCS8vICdnZW5lcmljJywgJ3RvcC1sZXZlbCcgaWNvbnMgdG8gdGhlIEFTRCBsZXZlbC4uLi4uCi0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcihwYXRoKTsKLQl9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oU3RyaW5nIHBhdGgpIHsKLSAgICAvLyBXZSBzaG91bGQgbm90IGtub3cgYWJvdXQgV1NETEVkaXRvclBsdWdpbi5qYXZhLiAgRXZlbnR1YWxseSwgd2Ugc2hvdWxkIG1vdmUgdGhlc2UKLSAgICAvLyAnZ2VuZXJpYycsICd0b3AtbGV2ZWwnIGljb25zIHRvIHRoZSBBU0QgbGV2ZWwuLi4uLgotICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4ocGF0aCk7Ci0gIH0KLQotCXB1YmxpYyBzdGF0aWMgSUVkaXRvclBhcnQgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRExhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEzYmNjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRExhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciB7Ci0JLyoqCi0JICogCi0JICovCi0JcHVibGljIEFTRExhYmVsUHJvdmlkZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCQotICAgIHByaXZhdGUgSUxhYmVsUHJvdmlkZXIgZ2V0RGVsZWdhdGUoKQotICAgIHsKLSAgICAgIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPSBudWxsOyAgIAotICAgICAgSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgICAgSVdvcmtiZW5jaFdpbmRvdyBhY3RpdmVXb3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICBJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gYWN0aXZlV29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgIGlmIChhY3RpdmVQYWdlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IGFjdGl2ZVBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgIEVkaXRvck1vZGVNYW5hZ2VyIG1hbmFnZXIgPSAoRWRpdG9yTW9kZU1hbmFnZXIpIGVkaXRvci5nZXRBZGFwdGVyKEVkaXRvck1vZGVNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgaWYgKG1hbmFnZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxhYmVsUHJvdmlkZXIgPSAoSUxhYmVsUHJvdmlkZXIpIG1hbmFnZXIuZ2V0Q3VycmVudE1vZGUoKS5nZXRBZGFwdGVyKElMYWJlbFByb3ZpZGVyLmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGxhYmVsUHJvdmlkZXI7Ci0gICAgfQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QuZXF1YWxzKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlJbWFnZSByZXN1bHQgPSBudWxsOyAgICAgICAgICAgCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlPYmplY3Qgc2VsZWN0ZWQgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pb2JqZWN0KS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJICAgIElMYWJlbFByb3ZpZGVyIGRlbGVnYXRlID0gZ2V0RGVsZWdhdGUoKTsKLSAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IGRlbGVnYXRlLmdldEltYWdlKHNlbGVjdGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQkJcmVzdWx0ID0gKChJVHJlZUVsZW1lbnQpIHNlbGVjdGVkKS5nZXRJbWFnZSgpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQkKLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QuZXF1YWxzKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpKSB7Ci0JCQlyZXR1cm4gIk5vIGl0ZW1zIHNlbGVjdGVkIjsvLyROT04tTkxTLTEkCi0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCU9iamVjdCBzZWxlY3RlZCA9IG51bGw7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlzZWxlY3RlZCA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgb2JqZWN0KS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQotICAgICAgSUxhYmVsUHJvdmlkZXIgZGVsZWdhdGUgPSBnZXREZWxlZ2F0ZSgpOwotICAgICAgaWYgKGRlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgICAgcmVzdWx0ID0gZGVsZWdhdGUuZ2V0VGV4dChzZWxlY3RlZCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgICAgICAgIHJlc3VsdCA9ICgoSVRyZWVFbGVtZW50KSBzZWxlY3RlZCkuZ2V0VGV4dCgpOwotICAgICAgfQotCi0gICAgICBib29sZWFuIGlzRmlsZVJlYWRPbmx5ID0gZmFsc2U7Ci0gICAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgICBpZiAod29ya2JlbmNoICE9IG51bGwpIHsKLSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICAgIGlmICh3aW5kb3cgIT0gbnVsbCkgewotICAgICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICAgIGlmICghKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCB8fCBlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KSkgewotICAgICAgICAgICAgICAgIGlzRmlsZVJlYWRPbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0JCQlpZiAoc2VsZWN0ZWQgaW5zdGFuY2VvZiBJQVNET2JqZWN0ICYmICgoSUFTRE9iamVjdCkgc2VsZWN0ZWQpLmlzUmVhZE9ubHkoKSB8fCBpc0ZpbGVSZWFkT25seSkgewotCQkJCXJlc3VsdCAgPSByZXN1bHQgKyAiICgiICsgTWVzc2FnZXMuX1VJX0xBQkVMX1JFQURfT05MWSArICIpIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRE11bHRpUGFnZUVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RNdWx0aVBhZ2VFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY2ZjNmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRE11bHRpUGFnZUVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLlpvb21NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5wYXJ0cy5TY3JvbGxpbmdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5jb250ZXh0cy5JQ29udGV4dEFjdGl2YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuY29udGV4dHMuSUNvbnRleHRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5GaWxlU3RvcmVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW5wdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE9wZXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPdXRwdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkUGFyYW1ldGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTZXJ2aWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNET3BlblNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkRpcmVjdEVkaXRTZWxlY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5BU0RDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkNvbW1vbk11bHRpUGFnZUVkaXRvcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFTRE11bHRpUGFnZUVkaXRvciBleHRlbmRzIENvbW1vbk11bHRpUGFnZUVkaXRvcgotewotICAvLyBUT0RPOiBtb3ZlIHRvIGRlc2lnbiB2aWV3ZXIKLSAgcHJvdGVjdGVkIERlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyIG1lbnVQcm92aWRlcjsKLSAgcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBtb2RlbDsKLSAgcHJpdmF0ZSBpbnQgY3VycmVudFBhZ2UgPSAtMTsKLSAgcHJpdmF0ZSBJQ29udGV4dEFjdGl2YXRpb24gY29udGV4dEFjdGl2YXRpb247Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFU0lHTl9WSUVXX0NPTlRFWFQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLmRlc2lnblZpZXciOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNPVVJDRV9WSUVXX0NPTlRFWFQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLnNvdXJjZVZpZXciOyAvLyROT04tTkxTLTEkCi0gIAotICAvKioKLSAgICogQ3JlYXRlcyBhIG11bHRpLXBhZ2UgZWRpdG9yIGV4YW1wbGUuCi0gICAqLwotICBwdWJsaWMgQVNETXVsdGlQYWdlRWRpdG9yKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAKLSAgICBnZXRFZGl0RG9tYWluKCkuc2V0QWN0aXZlVG9vbChuZXcgRGlyZWN0RWRpdFNlbGVjdGlvblRvb2woKSk7Ci0gICAgZ2V0RWRpdERvbWFpbigpLnNldERlZmF1bHRUb29sKG5ldyBEaXJlY3RFZGl0U2VsZWN0aW9uVG9vbCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgSW50ZXJuYWxMYXlvdXQgZXh0ZW5kcyBTdGFja0xheW91dAotICB7Ci0gICAgcHVibGljIEludGVybmFsTGF5b3V0KCkgewotICAgICAgc3VwZXIoKTsgIAotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBsYXlvdXQoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgYm9vbGVhbiBmbHVzaENhY2hlKSB7Ci0gICAgICBDb250cm9sIGNoaWxkcmVuW10gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIFJlY3RhbmdsZSByZWN0ID0gY29tcG9zaXRlLmdldENsaWVudEFyZWEoKTsKLSAgICAgIHJlY3QueCArPSBtYXJnaW5XaWR0aDsKLSAgICAgIHJlY3QueSArPSBtYXJnaW5IZWlnaHQ7Ci0gICAgICByZWN0LndpZHRoIC09IDIgKiBtYXJnaW5XaWR0aDsKLSAgICAgIHJlY3QuaGVpZ2h0IC09IDIgKiBtYXJnaW5IZWlnaHQ7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPT0gMCAmJiBtb2RlQ29tYm8gIT0gbnVsbCkgeyAvLyBGb3IgdGhlIGRyb3AgZG93biB0b29sYmFyCi0gICAgICAgICAgY2hpbGRyZW5baV0uc2V0Qm91bmRzKHJlY3QueCArIHJlY3Qud2lkdGggLSA5MCAtIG1heExlbmd0aCwgcmVjdC55ICsgMTAsIG1heExlbmd0aCArIDYwLCAyNik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ly8gRm9yIHRoZSBtYWluIGdyYXBoIHZpZXdlcgotICAgICAgICAgIGNoaWxkcmVuW2ldLnNldEJvdW5kcyhyZWN0KTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0gICAgICAgCi0gICAgfSAgICAgICAgICAgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZUdyYXBoUGFnZUNvbXBvc2l0ZSgpIHsgICAgCi0gICAgQ29tcG9zaXRlIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoZ2V0Q29udGFpbmVyKCksIFNXVC5GTEFUKTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KG5ldyBJbnRlcm5hbExheW91dCgpKTsKLSAgICBjcmVhdGVWaWV3TW9kZVRvb2xiYXIocGFyZW50KTsKLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgCi0gIHB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKLQkgIGlmICgoZk91dGxpbmVQYWdlID09IG51bGwpIHx8IGZPdXRsaW5lUGFnZS5nZXRDb250cm9sKCkgPT0gbnVsbCB8fCAoZk91dGxpbmVQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpKSB7Ci0JCSAgSUNvbnRlbnRQcm92aWRlciAgcHJvdmlkZXIgPSBnZXRFZGl0b3JNb2RlTWFuYWdlcigpLmdldEN1cnJlbnRNb2RlKCkuZ2V0T3V0bGluZVByb3ZpZGVyKCk7Ci0gICAgICAgICAgCi0gICAgICBBU0RDb250ZW50T3V0bGluZVBhZ2Ugb3V0bGluZVBhZ2UgPSBuZXcgQVNEQ29udGVudE91dGxpbmVQYWdlKHRoaXMsIG1lbnVQcm92aWRlcik7Ci0JCSAgb3V0bGluZVBhZ2Uuc2V0Q29udGVudFByb3ZpZGVyKChJVHJlZUNvbnRlbnRQcm92aWRlcilwcm92aWRlcik7Ci0JCSAgb3V0bGluZVBhZ2Uuc2V0TGFiZWxQcm92aWRlcigoSUxhYmVsUHJvdmlkZXIpcHJvdmlkZXIpOwotCQkgIG91dGxpbmVQYWdlLnNldE1vZGVsKGdldE1vZGVsKCkpOwotCQkgIG91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvdXRsaW5lUGFnZSk7Ci0gICAgICAKLSAgICAgIGZPdXRsaW5lUGFnZSA9IG91dGxpbmVQYWdlOwotCSAgfQotCSAgcmV0dXJuIGZPdXRsaW5lUGFnZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIHBhZ2VzIG9mIHRoZSBtdWx0aS1wYWdlIGVkaXRvci4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVBhZ2VzKCkKLSAgewotICAgIHNlbGVjdGlvblByb3ZpZGVyID0gZ2V0U2VsZWN0aW9uTWFuYWdlcigpOwotICAgIGdldEVkaXRvclNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihzZWxlY3Rpb25Qcm92aWRlcik7Ci0KLSAgICBjcmVhdGVHcmFwaFBhZ2UoKTsKLSAgICBjcmVhdGVTb3VyY2VQYWdlKCk7Ci0KLSAgICBidWlsZEFuZFNldE1vZGVsKCk7Ci0gICAgaW5pdGlhbGl6ZUdyYXBoaWNhbFZpZXdlcigpOwotICAgIHNldEFjdGl2ZVBhZ2UoZ2V0RGVmYXVsdFBhZ2VUeXBlSW5kZXgoKSk7Ci0gICAgCi0gICAgZ2V0U2VsZWN0aW9uTWFuYWdlcigpLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRNb2RlbCgpKSk7Ci0gICAgCi0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChncmFwaGljYWxWaWV3ZXIuZ2V0Q29udHJvbCgpLCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9ERVNJR05fVklFVyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBpbnQgZ2V0RGVmYXVsdFBhZ2VUeXBlSW5kZXgoKSB7Ci0JICBpbnQgcGFnZUluZGV4ID0gU09VUkNFX1BBR0VfSU5ERVg7Ci0JICBpZiAoV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRQYWdlKCkuZXF1YWxzKFdTRExFZGl0b3JQbHVnaW4uREVTSUdOX1BBR0UpKSB7Ci0JCSAgcGFnZUluZGV4ID0gREVTSUdOX1BBR0VfSU5ERVg7Ci0JICB9Ci0KLQkgIHJldHVybiBwYWdlSW5kZXg7Ci0JICB9Ci0gIAotICBwcm90ZWN0ZWQgU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyIGdldEdyYXBoaWNhbFZpZXdlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIodGhpcywgZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYnVpbGRBbmRTZXRNb2RlbCgpIHsKLQkgIG1vZGVsID0gYnVpbGRNb2RlbChnZXRFZGl0b3JJbnB1dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHB1YmxpYyBJRGVzY3JpcHRpb24gYnVpbGRNb2RlbChJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpOwotICAKLSAgcHVibGljIGJvb2xlYW4gaXNGaWxlUmVhZE9ubHkoKSB7Ci0gICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICByZXR1cm4gIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVBY3Rpb25zKCkKLSAgewotICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0QWN0aW9uUmVnaXN0cnkoKTsKLSAgICBCYXNlU2VsZWN0aW9uQWN0aW9uIGFjdGlvbjsKLSAgICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkpCi0gICAgewotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZFNlcnZpY2VBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkSW50ZXJmYWNlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkRW5kUG9pbnRBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRPcGVyYXRpb25BY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRJbnB1dEFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZE91dHB1dEFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZEZhdWx0QWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNERGVsZXRlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3QmluZGluZ0FjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkSW1wb3J0QWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkUGFyYW1ldGVyQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkU2NoZW1hQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIH0KLQotICAgIGFjdGlvbiA9IG5ldyBBU0RPcGVuU2NoZW1hQWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIElEZXNjcmlwdGlvbiBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgdHlwZSkKLSAgewotICAgIGlmICh0eXBlID09IFpvb21NYW5hZ2VyLmNsYXNzKQotICAgICAgcmV0dXJuIGdyYXBoaWNhbFZpZXdlci5nZXRQcm9wZXJ0eShab29tTWFuYWdlci5jbGFzcy50b1N0cmluZygpKTsKLQotICAgIGlmICh0eXBlID09IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKQotICAgIHsKLSAgICAJQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UgcGFnZSA9IG5ldyBBU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSh0aGlzKTsKLSAgICAJcmV0dXJuIHBhZ2U7Ci0gICAgfQotICAgIGlmICh0eXBlID09IEdyYXBoaWNhbFZpZXdlci5jbGFzcykKLSAgICAgIHJldHVybiBncmFwaGljYWxWaWV3ZXI7Ci0gICAgaWYgKHR5cGUgPT0gRWRpdFBhcnQuY2xhc3MgJiYgZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gZ3JhcGhpY2FsVmlld2VyLmdldFJvb3RFZGl0UGFydCgpOwotICAgIGlmICh0eXBlID09IElGaWd1cmUuY2xhc3MgJiYgZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gKChHcmFwaGljYWxFZGl0UGFydCkgZ3JhcGhpY2FsVmlld2VyLmdldFJvb3RFZGl0UGFydCgpKS5nZXRGaWd1cmUoKTsKLSAgICAKLSAgICBpZiAoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcy5lcXVhbHModHlwZSkpCi0gICAgewotICAgICAgcmV0dXJuIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAodHlwZSA9PSBJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpCi0gICAgewotICAgICAgIHJldHVybiBnZXRTZWxlY3Rpb25NYW5hZ2VyKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdXBlci5nZXRBZGFwdGVyKHR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKSB7Ci0gICAgcmV0dXJuIG5ldyBBU0RFZGl0UGFydEZhY3RvcnkoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgc2V0RWRpdFBhcnRGYWN0b3J5KEVkaXRQYXJ0RmFjdG9yeSBmYWN0b3J5KSB7Ci0JICBncmFwaGljYWxWaWV3ZXIuc2V0RWRpdFBhcnRGYWN0b3J5KGZhY3RvcnkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplR3JhcGhpY2FsVmlld2VyKCkKLSAgewotICAgIGdyYXBoaWNhbFZpZXdlci5zZXRDb250ZW50cyhtb2RlbCk7Ci0gICAgbWVudVByb3ZpZGVyID0gbmV3IERlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyKGdyYXBoaWNhbFZpZXdlciwgZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgbmV3UGFnZUluZGV4KSB7Ci0JLy8gTm90ZTogY3JlYXRlUGFnZXMoKSB3aWxsIGNhbGwgdGhpcyBtZXRob2Q7IHNvIHRoZSBmaXJzdCBjb250ZXh0IGlzIGFjdGl2YXRlZCBoZXJlIGluc3RlYWQgYXQgY3JlYXRlUGFnZXMoKS4gIAotCWRlYWN0aXZhdGVDb250ZXh0KGNvbnRleHRBY3RpdmF0aW9uKTsKLSAgICBjdXJyZW50UGFnZSA9IG5ld1BhZ2VJbmRleDsKLSAgICBzdXBlci5wYWdlQ2hhbmdlKG5ld1BhZ2VJbmRleCk7Ci0gICAgCi0gICAgU3RyaW5nIGNvbnRleHQgPSBnZXRDb250ZXh0KGN1cnJlbnRQYWdlKTsKLSAgICBjb250ZXh0QWN0aXZhdGlvbiA9IGFjdGl2YXRlQ29udGV4dChjb250ZXh0KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRDb250ZXh0KGludCBwYWdlSW5kZXgpIHsKLQkgIGlmIChwYWdlSW5kZXggPT0gREVTSUdOX1BBR0VfSU5ERVgpIHsKLQkJICByZXR1cm4gREVTSUdOX1ZJRVdfQ09OVEVYVDsKLQkgIH0gZWxzZSBpZiAocGFnZUluZGV4ID09IFNPVVJDRV9QQUdFX0lOREVYKSB7Ci0JCSAgcmV0dXJuIFNPVVJDRV9WSUVXX0NPTlRFWFQ7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCSAgaWYgKGN1cnJlbnRQYWdlID09IFNPVVJDRV9QQUdFX0lOREVYKSB7Ci0JCSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRQYWdlKFdTRExFZGl0b3JQbHVnaW4uU09VUkNFX1BBR0UpOwotCSAgfQotCSAgZWxzZSB7Ci0JCSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRQYWdlKFdTRExFZGl0b3JQbHVnaW4uREVTSUdOX1BBR0UpOwotCSAgfQotCSAgCi0JICBkZWFjdGl2YXRlQ29udGV4dChjb250ZXh0QWN0aXZhdGlvbik7Ci0KLSAgICAgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHByaXZhdGUgSUNvbnRleHRBY3RpdmF0aW9uIGFjdGl2YXRlQ29udGV4dChTdHJpbmcgY29udGV4dCkgewotCSAgSUNvbnRleHRTZXJ2aWNlIGNvbnRleHRTZXJ2aWNlID0gKElDb250ZXh0U2VydmljZSkgZ2V0U2l0ZSgpLmdldFNlcnZpY2UoSUNvbnRleHRTZXJ2aWNlLmNsYXNzKTsKLQotCSAgaWYgKGNvbnRleHRTZXJ2aWNlICE9IG51bGwgJiYgY29udGV4dCAhPSBudWxsKSB7Ci0JCSAgcmV0dXJuIGNvbnRleHRBY3RpdmF0aW9uID0gY29udGV4dFNlcnZpY2UuYWN0aXZhdGVDb250ZXh0KGNvbnRleHQpOwotCSAgfQotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBkZWFjdGl2YXRlQ29udGV4dChJQ29udGV4dEFjdGl2YXRpb24gY29udGV4dEFjdGl2YXRpb24pIHsKLQkgIElDb250ZXh0U2VydmljZSBjb250ZXh0U2VydmljZSA9IChJQ29udGV4dFNlcnZpY2UpIGdldFNpdGUoKS5nZXRTZXJ2aWNlKElDb250ZXh0U2VydmljZS5jbGFzcyk7Ci0KLQkgIGlmIChjb250ZXh0U2VydmljZSAhPSBudWxsICYmIGNvbnRleHRBY3RpdmF0aW9uICE9IG51bGwpIHsKLQkJICBjb250ZXh0U2VydmljZS5kZWFjdGl2YXRlQ29udGV4dChjb250ZXh0QWN0aXZhdGlvbik7Ci0JICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNEU2VsZWN0aW9uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjN2FjODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VTZWxlY3Rpb25Qcm92aWRlcjsKLQotcHVibGljIGNsYXNzIEFTRFNlbGVjdGlvbk1hbmFnZXIgZXh0ZW5kcyBNdWx0aVBhZ2VTZWxlY3Rpb25Qcm92aWRlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25Qcm92aWRlciwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgotewotCXByb3RlY3RlZCBMaXN0IGxpc3RlbmVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotCXByb3RlY3RlZCBib29sZWFuIGVuYWJsZU5vdGlmeSA9IHRydWU7Ci0JCi0JcHVibGljIEFTRFNlbGVjdGlvbk1hbmFnZXIoTXVsdGlQYWdlRWRpdG9yUGFydCBtdWx0aVBhZ2VFZGl0b3IpCi0JewotCQlzdXBlcihtdWx0aVBhZ2VFZGl0b3IpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2dldFNlbGVjdGlvbigpCi0JICovCi0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQl7Ci0JCXJldHVybiBjdXJyZW50U2VsZWN0aW9uOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJbGlzdGVuZXJMaXN0LnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgdGhpcyk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGVuYWJsZU5vdGlmeSkKLQkJewotCQkJc2V0U2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpLCBldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24sIElTZWxlY3Rpb25Qcm92aWRlciBzb3VyY2UpCi0JeyAgCi0JCWlmIChlbmFibGVOb3RpZnkpCi0JCXsKLQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JCQllbmFibGVOb3RpZnkgPSBmYWxzZTsKLQkJCXRyeQotCQkJewotCQkJCVNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc291cmNlLCBzZWxlY3Rpb24pOwotCQkJCUxpc3QgY29weU9mTGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdChsaXN0ZW5lckxpc3QpOwotCQkJCWZvciAoSXRlcmF0b3IgaSA9IGNvcHlPZkxpc3RlbmVyTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotCQkJCXsKLQkJCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA9IChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKWkubmV4dCgpOwotCQkJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJZW5hYmxlTm90aWZ5ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZWIyMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOyAvLyROT04tTkxTLTEkCi0JfQotCSAgCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RBQl9HUkFQSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVEFCX1NPVVJDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQlVUVE9OX05FVzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVBRF9PTkxZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9MT0NBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQUREUkVTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUFJFRklYOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1NFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9PUEVSQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fVVBEQVRFX0lNUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9PVVRQVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfRkFVTFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0RFTEVURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQlVUVE9OX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VYSVNUSU5HX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0w7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9TQ0hFTUE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfSU5QVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1NFQ1RJT05fQURWQU5DRURfQVRUUklCVVRFUzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRURJVF9OQU1FU1BBQ0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fT1BFTl9TQ0hFTUE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RPT0xUSVBfUkVOQU1FX1JFRkFDVE9SOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1JJR0hUX0NMSUNLX1RPX0lOU0VSVF9DT05URU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0hPV19QUk9QRVJUSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9FUlJPUl9MQUJFTF9QUkVGSVhfRVhJU1RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9CSU5ESU5HX0lOX1BST1BFUlRJRVNfU0VDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkVGQUNUT1JfQ09OVEVYVF9NRU5VOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEJpbmRpbmdBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRCaW5kaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYTU0NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEJpbmRpbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZEJpbmRpbmdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRCaW5kaW5nQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkQmluZGluZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfQklORElORyk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2JpbmRpbmdfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSURlc2NyaXB0aW9uKSBvKS5nZXRBZGRCaW5kaW5nQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkRW5kUG9pbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRFbmRQb2ludEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmE3ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRFbmRQb2ludEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkRW5kUG9pbnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkRW5kUG9pbnRBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRFbmRQb2ludEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUE9SVCk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3BvcnRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCUlTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotCQkJCi0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIElTZXJ2aWNlKSB7Ci0gICAgICAgICAgICAJc2VydmljZSA9IChJU2VydmljZSkgbzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJRW5kUG9pbnQpIHsKLSAgICAgICAgICAgIAlzZXJ2aWNlID0gKChJRW5kUG9pbnQpIG8pLmdldE93bmVyU2VydmljZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQ29tbWFuZCBjb21tYW5kID0gc2VydmljZS5nZXRBZGRFbmRQb2ludENvbW1hbmQoKTsKLSAgICAgICAgICAgICAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotICAgICAgICAgICAgICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0gICAgICAgICAgICAgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3QgZWxlbWVudCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChlbGVtZW50KTsKLQkJCSAgICB9Ci0gICAgICAgICAgICB9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkRmF1bHRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRGYXVsdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzE4ODM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRGYXVsdEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZEZhdWx0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkRmF1bHRBY3Rpb25uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkRmF1bHRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0ZBVUxUKTsgICAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9mYXVsdF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSU9wZXJhdGlvbiBpT3BlcmF0aW9uID0gbnVsbDsKLQkJCU9iamVjdCBwb3NzaWJsZUZhdWx0ID0gbnVsbDsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JCQkJaU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKSBvOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQkJcG9zc2libGVGYXVsdCA9ICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0VGFyZ2V0KCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQkJcG9zc2libGVGYXVsdCA9ICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKS5nZXRUYXJnZXQoKTsKLQkJCX0KLQkJCQotCQkJaWYgKGlPcGVyYXRpb24gIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IGlPcGVyYXRpb24uZ2V0QWRkRmF1bHRDb21tYW5kKHBvc3NpYmxlRmF1bHQpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW1wb3J0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW1wb3J0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjE0NzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEltcG9ydEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGlhbG9ncy5JbXBvcnRTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRJbXBvcnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRJbXBvcnRBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRJbXBvcnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lNUE9SVCk7Ci0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9pbXBvcnRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSURlc2NyaXB0aW9uKSBvKS5nZXRBZGRJbXBvcnRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIElJbXBvcnQgdGhlSW1wb3J0ID0gbnVsbDsKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgICB0aGVJbXBvcnQgPSAoSUltcG9ydCkoKElBU0RBZGRDb21tYW5kKWNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICB9Ci0JCQkgICAgCi0JCQkgICAgYm9vbGVhbiBzZWxlY3RMb2NhdGlvbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBdXRvT3BlbkltcG9ydExvY2F0aW9uRGlhbG9nU2V0dGluZygpOwotCQkJICAgIGlmICh0aGVJbXBvcnQgIT0gbnVsbCAmJiBzZWxlY3RMb2NhdGlvbikgewotCQkgICAgICAgICAgICBJbXBvcnRTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IEltcG9ydFNlbGVjdGlvbkRpYWxvZyhXU0RMRWRpdG9yUGx1Z2luLmdldFNoZWxsKCksIG51bGwsIHRydWUpOwotCQkgICAgICAgICAgICBpbnQgcmMgPSBkaWFsb2cub3BlbigpOwotCQkgICAgICAgICAgICBpZiAoSURpYWxvZ0NvbnN0YW50cy5PS19JRCA9PSByYykgewotCQkgICAgICAgICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGRpYWxvZy5nZXRJbXBvcnRMb2NhdGlvbigpOwotCQkgICAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBkaWFsb2cuZ2V0SW1wb3J0TmFtZXNwYWNlKCk7Ci0JCSAgICAgICAgICAgICAgQ29tbWFuZCB1cGRhdGVJbXBvcnRDb21tYW5kID0gdGhlSW1wb3J0LmdldFVwZGF0ZUNvbW1hbmQobG9jYXRpb25VUkksIG5hbWVzcGFjZVVSSSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCSAgICAgICAgICAgICAgc3RhY2suZXhlY3V0ZSh1cGRhdGVJbXBvcnRDb21tYW5kKTsKLQkJICAgICAgICAgICAgfQotCQkJICAgIH0KLQkJCSAgICAKLQkJCSAgICBpZiAodGhlSW1wb3J0ICE9IG51bGwpIHsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbih0aGVJbXBvcnQpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbnB1dEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZElucHV0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNWY5YWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZElucHV0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZElucHV0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZElucHV0QWN0aW9ubiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZElucHV0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTlBVVCk7ICAgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvaW5wdXRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCUlPcGVyYXRpb24gaU9wZXJhdGlvbiA9IG51bGw7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotCQkJCWlPcGVyYXRpb24gPSAoSU9wZXJhdGlvbikgbzsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAoaU9wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gaU9wZXJhdGlvbi5nZXRBZGRJbnB1dENvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEludGVyZmFjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEludGVyZmFjZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGYxMmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbnRlcmZhY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZEludGVyZmFjZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRJbnRlcmZhY2VBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRJbnRlcmZhY2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1BPUlRUWVBFKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvcG9ydHR5cGVfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSURlc2NyaXB0aW9uKSBvKS5nZXRBZGRJbnRlcmZhY2VDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkTWVzc2FnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE1lc3NhZ2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNkMDdhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkTWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkTWVzc2FnZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZE1lc3NhZ2VBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9NRVNTQUdFKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZE1lc3NhZ2VDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPcGVyYXRpb25BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPcGVyYXRpb25BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UxOTM5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3BlcmF0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRPcGVyYXRpb25BY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkT3BlcmF0aW9uQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkT3BlcmF0aW9uQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9PUEVSQVRJT04pOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9vcGVyYXRpb25fb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCUlJbnRlcmZhY2UgdGhlSW50ZXJmYWNlID0gbnVsbDsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJSW50ZXJmYWNlKSB7Ci0JCQkJdGhlSW50ZXJmYWNlID0gKElJbnRlcmZhY2UpIG87Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotCQkJCXRoZUludGVyZmFjZSA9ICgoSU9wZXJhdGlvbikgbykuZ2V0T3duZXJJbnRlcmZhY2UoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCXRoZUludGVyZmFjZSA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldE93bmVyT3BlcmF0aW9uKCkuZ2V0T3duZXJJbnRlcmZhY2UoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJdGhlSW50ZXJmYWNlID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpLmdldE93bmVySW50ZXJmYWNlKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmICh0aGVJbnRlcmZhY2UgIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IHRoZUludGVyZmFjZS5nZXRBZGRPcGVyYXRpb25Db21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3V0cHV0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3V0cHV0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzZhYmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE91dHB1dEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRPdXRwdXRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkT3V0cHV0QWN0aW9ubiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZE91dHB1dEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfT1VUUFVUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvb3V0cHV0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlJT3BlcmF0aW9uIGlPcGVyYXRpb24gPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkJCQlpT3BlcmF0aW9uID0gKElPcGVyYXRpb24pIG87Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSkuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKGlPcGVyYXRpb24gIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IGlPcGVyYXRpb24uZ2V0QWRkT3V0cHV0Q29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkUGFyYW1ldGVyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkUGFyYW1ldGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTcwYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFBhcmFtZXRlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRQYXJhbWV0ZXJBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkUGFyYW1ldGVyQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBwdWJsaWMgQVNEQWRkUGFyYW1ldGVyQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpICAgewotICAgICAgICBzdXBlcihwYXJ0KTsKLSAgICAgICAgc2V0SWQoSUQpOwotICAgICAgICBzZXRUZXh0KCJBZGQgUGFyYW1ldGVyIik7ICAgLy8kTk9OLU5MUy0xJAotICAgICAgICBzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvaW5wdXRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLSAgICAgICAgICAgIElNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzYWdlUmVmZXJlbmNlID0gKElNZXNzYWdlUmVmZXJlbmNlKW87Ci0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtZXNzYWdlUmVmZXJlbmNlIGluc3RhbmNlb2YgVzExTWVzc2FnZVJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIFcxMU1lc3NhZ2VSZWZlcmVuY2UgdzExTWVzc2FnZVJlZmVyZW5jZSA9IChXMTFNZXNzYWdlUmVmZXJlbmNlKW1lc3NhZ2VSZWZlcmVuY2U7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb21tYW5kIGNvbW1hbmQgPSB3MTFNZXNzYWdlUmVmZXJlbmNlLmdldEFkZFBhcmFtdGVyQ29tbWFuZCgpOwotICAgICAgICAgICAgICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLSAgICAgICAgICAgICAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQob2JqZWN0KTsKLQkJCSAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gIAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTY2hlbWFBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTY2hlbWFBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwNGIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2NoZW1hQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRTY2hlbWFBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRTY2hlbWFBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRTY2hlbWFBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1NDSEVNQSk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3hzZF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZFNjaGVtYUNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNlcnZpY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTZXJ2aWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjM2OGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNlcnZpY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLlNlcnZpY2VFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkU2VydmljZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRTZXJ2aWNlQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkU2VydmljZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfU0VSVklDRSk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSURlc2NyaXB0aW9uKSBvKS5nZXRBZGRTZXJ2aWNlQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBlbGVtZW50ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KGVsZW1lbnQpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotCQotCXByb3RlY3RlZCB2b2lkIGRvRGlyZWN0RWRpdChFZGl0UGFydCBlcCkgewotCQlpZiAoZXAgaW5zdGFuY2VvZiBTZXJ2aWNlRWRpdFBhcnQpIHsKLQkJCSgoU2VydmljZUVkaXRQYXJ0KSBlcCkucGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRENhcHR1cmVTY3JlZW5BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RDYXB0dXJlU2NyZWVuQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ODk0MjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRENhcHR1cmVTY3JlZW5BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmFjdGlvbnMuQ2FwdHVyZVNjcmVlbkFjdGlvbjsKLQotCi0vKioKLSAqIE91ciBzYW1wbGUgYWN0aW9uIGltcGxlbWVudHMgd29ya2JlbmNoIGFjdGlvbiBkZWxlZ2F0ZS4KLSAqIFRoZSBhY3Rpb24gcHJveHkgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSB3b3JrYmVuY2ggYW5kCi0gKiBzaG93biBpbiB0aGUgVUkuIFdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gdXNlIHRoZSBhY3Rpb24sCi0gKiB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgY3JlYXRlZCBhbmQgZXhlY3V0aW9uIHdpbGwgYmUgCi0gKiBkZWxlZ2F0ZWQgdG8gaXQuCi0gKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZQotICovCi1wdWJsaWMgY2xhc3MgQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbiAgZXh0ZW5kcyBBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElFZGl0b3JBY3Rpb25EZWxlZ2F0ZSB7Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBBU0RDYXB0dXJlU2NyZWVuQWN0aW9uKCkgewotCX0KLQotCS8qKgotCSAqIFRoZSBhY3Rpb24gaGFzIGJlZW4gYWN0aXZhdGVkLiBUaGUgYXJndW1lbnQgb2YgdGhlCi0JICogbWV0aG9kIHJlcHJlc2VudHMgdGhlICdyZWFsJyBhY3Rpb24gc2l0dGluZwotCSAqIGluIHRoZSB3b3JrYmVuY2ggVUkuCi0JICogQHNlZSBJV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUjcnVuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7Ci0JCUNhcHR1cmVTY3JlZW5BY3Rpb24gY2FwdHVyZVNjcmVlbkFjdGlvbiA9IG5ldyBDYXB0dXJlU2NyZWVuQWN0aW9uKCk7Ci0JCWNhcHR1cmVTY3JlZW5BY3Rpb24ucnVuKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJQWN0aW9uIGFjdGlvbiwgSUVkaXRvclBhcnQgdGFyZ2V0RWRpdG9yKSB7Ci0gICAgCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGVsZXRlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGVsZXRlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZGYxNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERlbGV0ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgQVNERGVsZXRlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNERGVsZXRlQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNERGVsZXRlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0RFTEVURSk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2RlbGV0ZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJSXRlcmF0b3IgaXQgPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotCQkJQ29tbWFuZCBjb21tYW5kID0gbnVsbDsKLQkJCQotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElBU0RPYmplY3QpIHsKLQkJCQljb21tYW5kID0gKChJQVNET2JqZWN0KSBvYmplY3QpLmdldERlbGV0ZUNvbW1hbmQoKTsKLQkJCX0KLQotCQkJaWYgKGNvbW1hbmQgIT0gbnVsbCkgewotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQotCQkJICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCSAgICAJT2JqZWN0IHRhcmdldCA9ICgoV1NETEJhc2VBZGFwdGVyKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJICAgIAlpZiAodGFyZ2V0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCSAgICAJCXBlcmZvcm1TZWxlY3Rpb24oKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJICAgIAl9Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGlyZWN0RWRpdEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERpcmVjdEVkaXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkNWJkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGlyZWN0RWRpdEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5EaXJlY3RFZGl0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLQotcHVibGljIGNsYXNzIEFTRERpcmVjdEVkaXRBY3Rpb24gZXh0ZW5kcyBEaXJlY3RFZGl0QWN0aW9uIHsKLQlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyOwotCQotCS8qKgotCSAqIFNhbWUgYXMge0BsaW5rICNEaXJlY3RFZGl0QWN0aW9uKElXb3JrYmVuY2hQYXJ0KX0uCi0JICogQHBhcmFtIGVkaXRvciB0aGUgZWRpdG9yCi0JICovCi0JcHVibGljIEFTRERpcmVjdEVkaXRBY3Rpb24oSUVkaXRvclBhcnQgZWRpdG9yKSB7Ci0JCXN1cGVyKChJV29ya2JlbmNoUGFydCllZGl0b3IpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBEaXJlY3RFZGl0QWN0aW9uIHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFydC4KLQkgKiBAcGFyYW0gcGFydCB0aGUgd29ya2JlbmNoIHBhcnQKLQkgKi8KLQlwdWJsaWMgQVNERGlyZWN0RWRpdEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KSB7Ci0JCXN1cGVyKHBhcnQpOwotCX0KLQkKLQkgIC8qIChub24tSmF2YWRvYykKLQkgICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uI2dldFNlbGVjdGlvbigpCi0JICAgKi8KLQkgIHByb3RlY3RlZCBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0JICB7Ci0JCSAgLy8gSWYgd2UncmUgaW4gdGhpcyBhY3Rpb24sIHdlIGFzc3VtZSB0aGUgYWN0aW9uIHdhcyBpbml0aWF0ZWQgdmlhIHRoZSBncmFwaGljYWwgdmlld2VyLgotCQkgIC8vIFdlIHVzZSB0aGUgZ3JhcGhpY2FsIHZpZXcgdG8gb2J0YWluIHRoZSBzZWxlY3RlZCBlZGl0IHBhcnQgYmVjYXVzZSBmb3IgdXMsIG9uZSBtb2RlbAotCQkgIC8vIG1heSBkcml2ZSBtb3JlIHRoYW4gb25lIGVkaXQgcGFydC4gIFNvIHdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3QgZWRpdCBwYXJ0IHdlIHdpc2ggdG8KLQkJICAvLyBkaXJlY3QgZWRpdC4gIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGRldGVybWluaW5nIHRoZSBlZGl0IHBhcnQgd291bGQgaGF2ZSBiZWVuIHRvIGdvCi0JCSAgLy8gdGhyb3VnaCB0aGUgc2VsZWN0aW9uIG1hbmFnZXIsIHRoZW4gdGhyb3VnaCB0aGUgZWRpdCBwYXJ0IHJlZ2lzdHJ5LiAgSG93ZXZlciwgdGhlIHNlbGVjdGlvbgotCQkgIC8vIG1hbmFnZXIgb25seSByZXR1cm5zIHRoZSBtb2RlbCBvYmplY3QgKG5vdCB0aGUgZWRpdCBwYXJ0KS4uLi4gYW5kIHNpbmNlIHRoZSBtb2RlbCBvYmplY3QKLQkJICAvLyBtYXkgZHJpdmUgbW9yZSB0aGFuIG9uZSBlZGl0IHBhcnQsIHRoZSBlZGl0IHBhcnQgcmVnaXN0cnkgbWF5IHJldHVybiB0aGUgIndyb25nIiBlZGl0Ci0JCSAgLy8gcGFydCBmb3IgZGlyZWN0IGVkaXRpbmcuICBUaHVzIHdlIGxvb2sgY2FsbCBHcmFwaGljYWxWaWV3ZXIuZ2V0Rm9jdXNFZGl0UGFydCgpLgotCQkgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkgIE9iamVjdCBvYmplY3QgPSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBHcmFwaGljYWxWaWV3ZXIpIHsKLQkJCSAgT2JqZWN0IHNlbGVjdGlvbiA9ICgoR3JhcGhpY2FsVmlld2VyKSBvYmplY3QpLmdldEZvY3VzRWRpdFBhcnQoKTsKLQkJCSAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0JCSAgfQotCSAgICAKLQkgICAgcmV0dXJuIHN1cGVyLmdldFNlbGVjdGlvbigpOwotCSAgfQotCSAgCi0JICAvKiAobm9uLUphdmFkb2MpCi0JICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlNlbGVjdGlvbkFjdGlvbiNzZXRTZWxlY3Rpb25Qcm92aWRlcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcikKLQkgICAqLwotCSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uUHJvdmlkZXIoSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyKQotCSAgewotCSAgICBzdXBlci5zZXRTZWxlY3Rpb25Qcm92aWRlcihwcm92aWRlcik7Ci0JICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKLQkgIH0KLQkgIAotCSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpIHsKLQkJICBPYmplY3Qgc2VsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkgIAotCQkgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JCQkgIHJldHVybiAgISgoSUFTRE9iamVjdCkgc2VsZWN0aW9uKS5pc1JlYWRPbmx5KCk7Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiB0cnVlOwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5M2M4M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBU0REcmFnQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHJvdGVjdGVkIEdyYXBoaWNhbEVkaXRQYXJ0IG1vdmluZ0NoaWxkRWRpdFBhcnQ7Ci0JcHJvdGVjdGVkIFBvaW50IHBvaW50ZXJMb2NhdGlvbjsKLQkKLQlwdWJsaWMgQVNERHJhZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KSB7Ci0JCXN1cGVyKHBhcnQpOwotCX0KLQkKLQkvKgotCSAqIFN1Yi1jbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXJ1bigpOwotCX0KLQkKLQkvKgotCSAqIFN1Yi1jbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCS8qCi0JICogU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotCSAqLwotCXB1YmxpYyBJRmlndXJlIGdldEZlZWRiYWNrRmlndXJlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ1Jlb3JkZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnUmVvcmRlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzVhM2U5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnUmVvcmRlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5bGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTRERyYWdSZW9yZGVyQWN0aW9uIGV4dGVuZHMgQVNERHJhZ0FjdGlvbiB7Ci0JICBwcm90ZWN0ZWQgSUFTRE9iamVjdCBtb3ZpbmdDaGlsZDsKLQkgIHByb3RlY3RlZCBJQVNET2JqZWN0IG5ld1BhcmVudDsKLQkgIHByb3RlY3RlZCBHcmFwaGljYWxFZGl0UGFydCBsZWZ0U2libGluZ0VkaXRQYXJ0OwotCSAgcHJvdGVjdGVkIEdyYXBoaWNhbEVkaXRQYXJ0IHJpZ2h0U2libGluZ0VkaXRQYXJ0OwotCSAgcHJvdGVjdGVkIElBU0RPYmplY3QgbGVmdFNpYkVsZW1lbnQ7Ci0JICBwcm90ZWN0ZWQgSUFTRE9iamVjdCByaWdodFNpYkVsZW1lbnQ7Ci0JICBwcm90ZWN0ZWQgYm9vbGVhbiBjYW5OZXZlckV4ZWN1dGUgPSBmYWxzZTsKLQkgIAotCSAgcHVibGljIEFTRERyYWdSZW9yZGVyQWN0aW9uKEdyYXBoaWNhbEVkaXRQYXJ0IG1vdmluZ0NoaWxkRWRpdFBhcnQsIEVkaXRQYXJ0IHBvaW50ZXJFZGl0UGFydCwgUG9pbnQgcG9pbnRlckxvY2F0aW9uKSB7Ci0JCSAgc3VwZXIobnVsbCk7Ci0JICAJdGhpcy5tb3ZpbmdDaGlsZEVkaXRQYXJ0ID0gbW92aW5nQ2hpbGRFZGl0UGFydDsKLQkgIAl0aGlzLnBvaW50ZXJMb2NhdGlvbiA9IHBvaW50ZXJMb2NhdGlvbjsKLQotCQlFZGl0UGFydCBwb3NzaWJsZVBhcmVudCA9IGdldFBhcmVudEVkaXRQYXJ0KHBvaW50ZXJFZGl0UGFydCk7Ci0JCQotCQlpZiAoIShwb3NzaWJsZVBhcmVudCBpbnN0YW5jZW9mIEdyYXBoaWNhbEVkaXRQYXJ0KSkgewotCQkJY2FuTmV2ZXJFeGVjdXRlID0gdHJ1ZTsKLQkJCXJldHVybjsKLQkJfQotCSAgCQotCQlHcmFwaGljYWxFZGl0UGFydCB0YXJnZXRQYXJlbnRFZGl0UGFydCA9IChHcmFwaGljYWxFZGl0UGFydCkgcG9zc2libGVQYXJlbnQ7Ci0JCQotCQlpZiAocG9pbnRlckVkaXRQYXJ0LmdldFBhcmVudCgpICE9IG51bGwpIHsKLQkJCS8vIFNvcnQgdGhlIHNpYmxpbmdzIChhbmQgaXRzZWxmKQotCQkJTGlzdCB0YXJnZXRFZGl0UGFydFNpYmxpbmdzID0gcG9pbnRlckVkaXRQYXJ0LmdldFBhcmVudCgpLmdldENoaWxkcmVuKCk7Ci0JCQlDb2xsZWN0aW9ucy5zb3J0KHRhcmdldEVkaXRQYXJ0U2libGluZ3MsIG5ldyBWZXJ0aWNhbEVkaXRQYXJ0Q29tcGFyYXRvcigpKTsKLQkgIAotCQkJLy8gR2V0ICdsZWZ0JyBhbmQgJ3JpZ2h0JyBzaWJsaW5ncwotCQkJbGVmdFNpYmxpbmdFZGl0UGFydCA9IGdldFZlcnRpY2FsTGVmdFNpYmxpbmcodGFyZ2V0RWRpdFBhcnRTaWJsaW5ncywgbW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckxvY2F0aW9uKTsKLQkJCXJpZ2h0U2libGluZ0VkaXRQYXJ0ID0gZ2V0VmVydGljYWxSaWdodFNpYmxpbmcodGFyZ2V0RWRpdFBhcnRTaWJsaW5ncywgbW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckxvY2F0aW9uKTsgICAgICAgICAgIAkKLQotCQkJaWYgKG1vdmluZ0NoaWxkRWRpdFBhcnQgIT0gbnVsbCkKLQkJCQltb3ZpbmdDaGlsZCA9IChJQVNET2JqZWN0KSBtb3ZpbmdDaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQlpZiAobGVmdFNpYmxpbmdFZGl0UGFydCAhPSBudWxsKQotCQkJCWxlZnRTaWJFbGVtZW50ID0gKElBU0RPYmplY3QpIGxlZnRTaWJsaW5nRWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJCWlmIChyaWdodFNpYmxpbmdFZGl0UGFydCAhPSBudWxsKQotCQkJCXJpZ2h0U2liRWxlbWVudCA9IChJQVNET2JqZWN0KSByaWdodFNpYmxpbmdFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJCi0JCQluZXdQYXJlbnQgPSAoSUFTRE9iamVjdCkgdGFyZ2V0UGFyZW50RWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJfQotCQllbHNlIHsKLQkJCW5ld1BhcmVudCA9IChJQVNET2JqZWN0KSB0YXJnZXRQYXJlbnRFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQkJcmlnaHRTaWJFbGVtZW50PSBudWxsOwotCQl9Ci0JICB9Ci0JICAgICAgICAgICAgCi0JICBwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkKLQkgIHsKLQkgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkgICAgCi0JICAgIGlmIChjYW5OZXZlckV4ZWN1dGUgfHwgbmV3UGFyZW50ID09IG51bGwgfHwgbW92aW5nQ2hpbGQgPT0gbnVsbCkgewotCSAgICAJcmV0dXJuIGZhbHNlOwotCSAgICB9Ci0JICAgIAotCSAgICBpZiAobW92aW5nQ2hpbGQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCSAgICAJSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbW92aW5nQ2hpbGQ7Ci0JICAgIAlpZiAobWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCB8fCBtZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCSAgICAJCUlNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJNZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBsZWZ0U2liRWxlbWVudDsKLQotCSAgICAJCXJlc3VsdCA9IHRydWU7Ci0JICAgIAkJaWYgKGxlZnRTaWJNZXNzYWdlUmVmICE9IG51bGwpIHsKLQkgICAgCQkJaWYgKGxlZnRTaWJNZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0ZBVUxUKSB7Ci0JICAgIAkJCQlyZXN1bHQgPSBmYWxzZTsKLQkgICAgCQkJfQotCSAgICAJCX0KLQkgICAgCQlpZiAoIShyZXN1bHQgJiYgbmV3UGFyZW50LmVxdWFscyhtZXNzYWdlUmVmLmdldE93bmVyT3BlcmF0aW9uKCkpKSkgewotCSAgICAJCQlyZXN1bHQgPSBmYWxzZTsKLQkgICAgCQl9Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAobW92aW5nQ2hpbGQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JICAgIAlpZiAobmV3UGFyZW50IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UgJiYgbmV3UGFyZW50LmVxdWFscygoKElQYXJhbWV0ZXIpIG1vdmluZ0NoaWxkKS5nZXRPd25lcigpKSkgewotCSAgICAJCXJlc3VsdCA9IHRydWU7Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9ICAgICAgICAgICAKLQotCSAgLyoKLQkgICAqIEBzZWUgSUFjdGlvbiNydW4oKQotCSAgICovCi0JICBwdWJsaWMgdm9pZCBydW4oKQotCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS8vCSAgICBiZWdpblJlY29yZGluZygpOwotCSAgCWlmIChjYW5FeGVjdXRlKCkpIHsKLQkgIAkJaWYgKG1vdmluZ0NoaWxkIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkgIAkJCU9iamVjdCBtZXNzYWdlUmVmT3duZXIgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBtb3ZpbmdDaGlsZCkuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkgIAkJCWlmIChtZXNzYWdlUmVmT3duZXIgaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYkVsZW1lbnQ7Ci0JICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgcmlnaHRTaWIgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIHJpZ2h0U2liRWxlbWVudDsKLQkgIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdTaWIgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vdmluZ0NoaWxkOwotCSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU9wZXJhdGlvbikgbWVzc2FnZVJlZk93bmVyKS5nZXRSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKGxlZnRTaWIsIHJpZ2h0U2liLCBtb3ZpbmdTaWIpOwotCSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCSAgCQkJfQotCSAgCQl9Ci0JICAJCWVsc2UgaWYgKG1vdmluZ0NoaWxkIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCSAgCQkJT2JqZWN0IHBhcmFtT3duZXIgPSAoKElQYXJhbWV0ZXIpIG1vdmluZ0NoaWxkKS5nZXRPd25lcigpOwotCSAgCQkJaWYgKHBhcmFtT3duZXIgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCSAgCQkJCUlQYXJhbWV0ZXIgbGVmdFNpYiA9IChJUGFyYW1ldGVyKSBsZWZ0U2liRWxlbWVudDsKLQkgIAkJCQlJUGFyYW1ldGVyIHJpZ2h0U2liID0gKElQYXJhbWV0ZXIpIHJpZ2h0U2liRWxlbWVudDsKLQkgIAkJCQlJUGFyYW1ldGVyIG1vdmluZ1NpYiA9IChJUGFyYW1ldGVyKSBtb3ZpbmdDaGlsZDsKLQkgIAkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBwYXJhbU93bmVyKS5nZXRSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQobGVmdFNpYiwgcmlnaHRTaWIsIG1vdmluZ1NpYik7Ci0JICAJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JICAJCQl9Ci0JICAJCX0KLS8vCSAgCQl3c2RsRWRpdG9yLmdldFNlbGVjdGlvbk1hbmFnZXIoKS5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW92aW5nQ2hpbGQpKTsKLQkgIAl9Ci0vLwkgICAgZW5kUmVjb3JkaW5nKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRmlndXJlIGdldEZlZWRiYWNrRmlndXJlKCkgewotCSAgCUlGaWd1cmUgZmVlZGJhY2tGaWd1cmUgPSBudWxsOwotCSAgICBpZiAoZmVlZGJhY2tGaWd1cmUgPT0gbnVsbCAmJiBtb3ZpbmdDaGlsZEVkaXRQYXJ0IGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQpCi0JICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICBmZWVkYmFja0ZpZ3VyZSA9IG5ldyBQb2x5bGluZSgpOwotCSAgICAgICgoUG9seWxpbmUpZmVlZGJhY2tGaWd1cmUpLnNldExpbmVXaWR0aCgyKTsJCi0JICAgICAgZHJhd0xpbmVzKChQb2x5bGluZSkgZmVlZGJhY2tGaWd1cmUpOwotCSAgICB9Ci0JICAgIAotCSAgCXJldHVybiBmZWVkYmFja0ZpZ3VyZTsKLQkgIH0KLQotCSAgLyogUmV0dXJuIGEgUG9pbnRMaXN0IHdoaWNoIHdpbGwgYmUgdXNlZCB0byBhZGQgYSBmZWVkYmFjayBmaWd1cmUuICBUaGUgZmVlZGJhY2sgZmlndXJlIHdpbGwgYmUgYQotCSAgICogUG9seWxpbmUgY29tcG9zZWQgb2YgdGhlIFBvaW50cyBpbiB0aGUgUG9pbnRMaXN0Ci0JICAgKi8KLQkgIHByaXZhdGUgUG9pbnRMaXN0IGRyYXdMaW5lcyhQb2x5bGluZSBwb2x5TGluZSkgewotCSAgICBQb2ludExpc3QgcG9pbnRMaXN0ID0gbmV3IFBvaW50TGlzdCgpOyAKLQkgICAgCi0JICAgIGlmIChsZWZ0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpIHsKLQkgICAgCVJlY3RhbmdsZSBsZWZ0UmVjdGFuZ2xlID0gbGVmdFNpYmxpbmdFZGl0UGFydC5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKTsKLQkJICAgCWludCB4Q29vcmQgPSBsZWZ0UmVjdGFuZ2xlLng7Ci0JCSAgCWludCB5Q29vcmQgPSBsZWZ0UmVjdGFuZ2xlLnk7Ci0JCSAgIAlpbnQgaGVpZ2h0ID0gbGVmdFJlY3RhbmdsZS5oZWlnaHQ7Ci0JCSAgIAlpbnQgd2lkdGggPSBsZWZ0UmVjdGFuZ2xlLndpZHRoOwotCi0JCSAgIAkvLyBEcmF3IGxlZnQgZW5kIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCArIDMsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0IC0gMyk7Ci0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQgKyBoZWlnaHQgLSAzLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCk7Ci0JCSAgIAkKLQkJICAgCS8vIERyYXcgaG9yaXpvbnRhbCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQgKyBoZWlnaHQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyBoZWlnaHQpOwotCQkgICAJCi0JCSAgIAkvLyBEcmF3IHJpZ2h0IGVuZCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIGhlaWdodCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIGhlaWdodCAtIDMpOwotCQkgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIGhlaWdodCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIGhlaWdodCArIDMpOyAgIAkKLQkgICAgfQotCSAgICBlbHNlIGlmIChyaWdodFNpYmxpbmdFZGl0UGFydCAhPSBudWxsKSB7Ci0JICAgIAlSZWN0YW5nbGUgcmlnaHRSZWN0YW5nbGUgPSByaWdodFNpYmxpbmdFZGl0UGFydC5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKTsKLQkgICAgCWludCB4Q29vcmQgPSByaWdodFJlY3RhbmdsZS54OwotCSAgICAJaW50IHlDb29yZCA9IHJpZ2h0UmVjdGFuZ2xlLnk7Ci0JICAgCQlpbnQgd2lkdGggPSByaWdodFJlY3RhbmdsZS53aWR0aDsJCi0KLQkgICAJCS8vIERyYXcgbGVmdCBlbmQgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkICsgMywgeENvb3JkLCB5Q29vcmQgLSAzKTsKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCAtIDMsIHhDb29yZCwgeUNvb3JkKTsKLQkJICAgCQotCQkgICAJLy8gRHJhdyBob3Jpem9udGFsIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCk7Ci0JCSAgIAkKLQkJICAgCS8vIERyYXcgcmlnaHQgZW5kIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkIC0gMyk7Ci0JCSAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgMyk7ICAgCi0JICAgIH0KLQotCSAgICByZXR1cm4gcG9pbnRMaXN0OwotCSAgfSAgICAgICAgICAgICAgICAgICAgCi0JICAKLQkgIHByb3RlY3RlZCBQb2x5bGluZSBhZGRMaW5lVG9Qb2x5bGluZShQb2x5bGluZSBwb2x5bGluZSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKSB7Ci0JCXBvbHlsaW5lLmFkZFBvaW50KG5ldyBQb2ludCh4MSwgeTEpKTsKLQkJcG9seWxpbmUuYWRkUG9pbnQobmV3IFBvaW50KHgyLCB5MikpOwotCi0JCXJldHVybiBwb2x5bGluZTsKLQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgIAotCSAgLyoKLQkgICAqIFByZS1jb25kaXRpb246IFRoZSBMaXN0IHNpYmxpbmdzIHNob3VsZCBiZSBzb3J0ZWQgYnkgaXQncyB5LWNvb3JkaW5hdGUgCi0JICAgKi8KLQkgIHByaXZhdGUgR3JhcGhpY2FsRWRpdFBhcnQgZ2V0VmVydGljYWxSaWdodFNpYmxpbmcoTGlzdCBzaWJsaW5ncywgR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nRWRpdFBhcnQsIFBvaW50IHBvaW50ZXJMb2NhdGlvbikgewotCSAgCUdyYXBoaWNhbEVkaXRQYXJ0IHJpZ2h0U2libGluZyA9IG51bGw7Ci0JICAJaW50IHBvaW50ZXJZTG9jYXRpb24gPSBwb2ludGVyTG9jYXRpb24ueTsKLQotCSAgCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaWJsaW5ncy5zaXplKCk7IGluZGV4KyspIHsKLQkgIAkJR3JhcGhpY2FsRWRpdFBhcnQgc2libGluZyA9IChHcmFwaGljYWxFZGl0UGFydCkgc2libGluZ3MuZ2V0KGluZGV4KTsKLQkgIAkJaW50IHNpYmxpbmdZTG9jYXRpb24gPSBzaWJsaW5nLmdldEZpZ3VyZSgpLmdldEJvdW5kcygpLmdldENlbnRlcigpLnk7Ci0KLQkgIAkJaWYgKHNpYmxpbmdZTG9jYXRpb24gPiBwb2ludGVyWUxvY2F0aW9uKSB7Ci0JICAJCQlyaWdodFNpYmxpbmcgPSBzaWJsaW5nOwotCSAgCQkJYnJlYWs7Ci0JICAJCX0KLQkgIAl9Ci0JICAJCi0JICAJcmV0dXJuIHJpZ2h0U2libGluZzsKLQkgIH0KLQotCSAgLyoKLQkgICAqIFByZS1jb25kaXRpb246IFRoZSBMaXN0IHNpYmxpbmdzIHNob3VsZCBiZSBzb3J0ZWQgYnkgaXQncyB5LWNvb3JkaW5hdGUgCi0JICAgKi8KLQkgIHByaXZhdGUgR3JhcGhpY2FsRWRpdFBhcnQgZ2V0VmVydGljYWxMZWZ0U2libGluZyhMaXN0IHNpYmxpbmdzLCBHcmFwaGljYWxFZGl0UGFydCBtb3ZpbmdFZGl0UGFydCwgUG9pbnQgcG9pbnRlckxvY2F0aW9uKSB7Ci0JICAJR3JhcGhpY2FsRWRpdFBhcnQgbGVmdFNpYmxpbmcgPSBudWxsOwotCSAgCWludCBwb2ludGVyWUxvY2F0aW9uID0gcG9pbnRlckxvY2F0aW9uLnk7Ci0KLQkgIAlpbnQgaW5kZXg7Ci0JICAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2libGluZ3Muc2l6ZSgpOyBpbmRleCsrKSB7Ci0JICAJCUdyYXBoaWNhbEVkaXRQYXJ0IHNpYmxpbmcgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHNpYmxpbmdzLmdldChpbmRleCk7Ci0JICAJCWludCBzaWJsaW5nWUxvY2F0aW9uID0gc2libGluZy5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS5nZXRDZW50ZXIoKS55OwotCSAgCSAgCQotCSAgCQlpZiAoc2libGluZ1lMb2NhdGlvbiA+IHBvaW50ZXJZTG9jYXRpb24pIHsKLQkgIAkJCWlmIChpbmRleCA+IDApIHsKLQkgIAkJCQlsZWZ0U2libGluZyA9IChHcmFwaGljYWxFZGl0UGFydCkgc2libGluZ3MuZ2V0KGluZGV4IC0gMSk7Ci0JICAJCQl9Ci0KLQkgIAkJCWJyZWFrOwotCSAgCQl9Ci0JICAJfQotCi0JICAJaWYgKGluZGV4ID09IHNpYmxpbmdzLnNpemUoKSkgewotCSAgCQlsZWZ0U2libGluZyA9IChHcmFwaGljYWxFZGl0UGFydCkgc2libGluZ3MuZ2V0KGluZGV4IC0gMSk7Ci0JICAJfQotCi0JICAJcmV0dXJuIGxlZnRTaWJsaW5nOwotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgRWRpdFBhcnQgZ2V0UGFyZW50RWRpdFBhcnQoRWRpdFBhcnQgdGFyZ2V0KQotCSAgewotCSAgCXJldHVybiB0YXJnZXQuZ2V0UGFyZW50KCk7Ci0JICB9Ci0KLQkgIHByaXZhdGUgY2xhc3MgVmVydGljYWxFZGl0UGFydENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQkgIAkKLQkgIAlwdWJsaWMgVmVydGljYWxFZGl0UGFydENvbXBhcmF0b3IoKSB7Ci0JICAJfQotCSAgCQotCSAgCXB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgcGFydDEsIE9iamVjdCBwYXJ0MikgewotCSAgCQlpbnQgY29tcGFyZVZhbHVlID0gMDsKLQotCSAgCQlpZiAocGFydDEgaW5zdGFuY2VvZiBHcmFwaGljYWxFZGl0UGFydCAmJiBwYXJ0MiBpbnN0YW5jZW9mIEdyYXBoaWNhbEVkaXRQYXJ0KSB7Ci0JICAJCQlHcmFwaGljYWxFZGl0UGFydCBlZGl0UGFydDEgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHBhcnQxOwotCSAgCQkJR3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQyID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBwYXJ0MjsKLQkgIAkJCQotCSAgCQkJaW50IGVkaXRQYXJ0MVkgPSBlZGl0UGFydDEuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCkueTsKLQkgIAkJCWludCBlZGl0UGFydDJZID0gZWRpdFBhcnQyLmdldEZpZ3VyZSgpLmdldEJvdW5kcygpLmdldENlbnRlcigpLnk7Ci0JICAJCQkKLQkgIAkJCUludGVnZXIgaW50ZWdlclBhcnQxID0gbmV3IEludGVnZXIoZWRpdFBhcnQxWSk7Ci0JICAJCQlJbnRlZ2VyIGludGVnZXJQYXJ0MiA9IG5ldyBJbnRlZ2VyKGVkaXRQYXJ0MlkpOwotCSAgCQkJCi0JICAJCQljb21wYXJlVmFsdWUgPSBpbnRlZ2VyUGFydDEuY29tcGFyZVRvKGludGVnZXJQYXJ0Mik7Ci0JICAJCX0KLQotCSAgCQlyZXR1cm4gY29tcGFyZVZhbHVlOwotCSAgCX0KLQkgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RFZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWI3MjdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RFZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5FZGl0TmFtZXNwYWNlc0RpYWxvZzsKLQotcHVibGljIGNsYXNzIEFTREVkaXROYW1lc3BhY2VzQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXByaXZhdGUgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCQotCXB1YmxpYyBBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0LCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJU3RyaW5nIHRleHQgPSBNZXNzYWdlcy5fVUlfRURJVF9OQU1FU1BBQ0VTOyAvLyROT04tTkxTLTEkCi0JCXNldFRleHQodGV4dCk7Ci0JCQotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJT2JqZWN0IG8gPSBkZXNjcmlwdGlvbjsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCS8vIFRPRE86IFRoZSBjb2RlIGJlbG93IGlzIG5vdCBnZW5lcmljLiAgV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgdG8gZW5zdXJlIGl0IGlzCi0JCQkvLyBnZW5lcmljLiAgSURlc2NyaXB0aW9uIG5lZWRzIGEgZ2V0TmFtZXNwYWNlc0luZm8oKSBhbmQgZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCkuLi4KLQkJCUlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIG87Ci0JCQlXMTFEZXNjcmlwdGlvbiB3MTFEZXNjcmlwdGlvbiA9IChXMTFEZXNjcmlwdGlvbikgbzsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSB3MTFEZXNjcmlwdGlvbi5nZXRUYXJnZXQoKTsKLQkJCQotCQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotCQkJTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCA9IHcxMURlc2NyaXB0aW9uLmdldE5hbWVzcGFjZXNJbmZvKCk7Ci0JCQlTdHJpbmcgdG5zID0gZGVzY3JpcHRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQlFZGl0TmFtZXNwYWNlc0RpYWxvZyBkaWFsb2cgPSBuZXcgRWRpdE5hbWVzcGFjZXNEaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCBwYXRoLCBNZXNzYWdlcy5fVUlfRURJVF9OQU1FU1BBQ0VTX0RJQUxPR19USVRMRSwgdG5zLCBuYW1lc3BhY2VJbmZvTGlzdCk7IC8vJE5PTi1OTFMtMSQKLQkJCWludCByYyA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0JCQlpZiAocmMgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkgewotCQkJCUxpc3QgbmV3SW5mb0xpc3QgPSBkaWFsb2cuZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKTsKLQkJCQlXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQgY29tbWFuZCA9IChXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQpIHcxMURlc2NyaXB0aW9uLmdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0TmFtZXNwYWNlc0luZm8obmV3SW5mb0xpc3QpOwotCQkJCWNvbW1hbmQuc2V0VGFyZ2V0TmFtZXNwYWNlKGRpYWxvZy5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkgICAgfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREdlbmVyYXRlQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREdlbmVyYXRlQmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWEzNTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLQotcHVibGljIGNsYXNzIEFTREdlbmVyYXRlQmluZGluZ0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREdlbmVyYXRlQmluZGluZ0FjdGlvbm4iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQpOyAgIC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2lucHV0X29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLSAJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSUJpbmRpbmcpIG8pLmdldEdlbmVyYXRlQmluZGluZ0NvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQl9Ci0JCQkKLQkJCXBlcmZvcm1TZWxlY3Rpb24obyk7Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RPcGVuU2NoZW1hQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNET3BlblNjaGVtYUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTUxZTFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RPcGVuU2NoZW1hQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RPcGVuU2NoZW1hQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNET3BlblNjaGVtYUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTRE9wZW5TY2hlbWFBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fT1BFTl9TQ0hFTUEpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2JpbmRpbmdfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJVHlwZSkgewotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCU9iamVjdCBoZWxwZXIgPSBlZGl0b3IuZ2V0QWRhcHRlcihJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKTsKLQkJCQlpZiAoaGVscGVyIGluc3RhbmNlb2YgSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcikgewotCQkJCQkoKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIpIGhlbHBlcikuc2V0TW9kZWwobyk7Ci0JCQkJCSgoSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcikgaGVscGVyKS5vcGVuRXh0ZXJuYWxFZGl0b3IoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3ODUyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSUVuZFBvaW50IGVuZFBvaW50OwotCQotCXB1YmxpYyBBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfQklORElORyk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SUVuZFBvaW50KElFbmRQb2ludCBlbmRQb2ludCkgewotCQl0aGlzLmVuZFBvaW50ID0gZW5kUG9pbnQ7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAoZW5kUG9pbnQgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElFbmRQb2ludCkgewotCQkJCQllbmRQb2ludCA9IChJRW5kUG9pbnQpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0QmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKGVuZFBvaW50KTsKLQkJaWYgKGVuZFBvaW50ICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShlbmRQb2ludCwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWVuZFBvaW50ID0gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjA1Y2E4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIEFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElCaW5kaW5nIGJpbmRpbmc7Ci0JCi0JcHVibGljIEFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX1BPUlRUWVBFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJQmluZGluZyhJQmluZGluZyBiaW5kaW5nKSB7Ci0JCXRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAoYmluZGluZyA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSUJpbmRpbmcpIHsKLQkJCQkJYmluZGluZyA9IChJQmluZGluZykgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcihiaW5kaW5nKTsKLSAgICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXRCcm93c2VEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKGJpbmRpbmcsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQliaW5kaW5nID0gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3QmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0JpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkYTk4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3QmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBBU0RTZXROZXdCaW5kaW5nQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3QmluZGluZ0FjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSUVuZFBvaW50IGVuZFBvaW50OwotCQotCXB1YmxpYyBBU0RTZXROZXdCaW5kaW5nQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19CSU5ESU5HKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJRW5kUG9pbnQoSUVuZFBvaW50IGVuZFBvaW50KSB7Ci0JCXRoaXMuZW5kUG9pbnQgPSBlbmRQb2ludDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChlbmRQb2ludCA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0JCQkJCWVuZFBvaW50ID0gKElFbmRQb2ludCkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoZW5kUG9pbnQpOwotICAgICAgICBpZiAoZW5kUG9pbnQgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXROZXdEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKGVuZFBvaW50LCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJZW5kUG9pbnQgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhZWM0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJQmluZGluZyBiaW5kaW5nOwotCQotCXB1YmxpYyBBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fTkVXX1BPUlRUWVBFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJQmluZGluZyhJQmluZGluZyBiaW5kaW5nKSB7Ci0JCXRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAoYmluZGluZyA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSUJpbmRpbmcpIHsKLQkJCQkJYmluZGluZyA9IChJQmluZGluZykgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcihiaW5kaW5nKTsKLQkJaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXROZXdEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKGJpbmRpbmcsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQliaW5kaW5nID0gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQmFzZVNlbGVjdGlvbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0Jhc2VTZWxlY3Rpb25BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjViYzFhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQmFzZVNlbGVjdGlvbkFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5wYXJ0cy5BYnN0cmFjdEVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVNlbGVjdGlvbkFjdGlvbiBleHRlbmRzIFNlbGVjdGlvbkFjdGlvbgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNRU5VX1NUQVJUX0lEID0gIlNVQk1FTlVfU1RBUlRfSUQ6ICI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUVOVV9FTkRfSUQgPSAiU1VCTUVOVV9FTkRfSUQ6ICI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXI7Ci0gIAotICBwdWJsaWMgQmFzZVNlbGVjdGlvbkFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQotICB7Ci0gICAgc3VwZXIocGFydCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb24jZ2V0U2VsZWN0aW9uKCkKLSAgICovCi0gIHByb3RlY3RlZCBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICAvLyBhbHdheXMgZ2V0IHNlbGVjdGlvbiBmcm9tIHNlbGVjdGlvbiBwcm92aWRlciBmaXJzdAotICAgIGlmIChwcm92aWRlciE9bnVsbCkKLSAgICAgIHJldHVybiBwcm92aWRlci5nZXRTZWxlY3Rpb24oKTsKLSAgICAKLSAgICByZXR1cm4gc3VwZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlNlbGVjdGlvbkFjdGlvbiNzZXRTZWxlY3Rpb25Qcm92aWRlcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblByb3ZpZGVyKElTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlcikKLSAgewotICAgIHN1cGVyLnNldFNlbGVjdGlvblByb3ZpZGVyKHByb3ZpZGVyKTsKLSAgICB0aGlzLnByb3ZpZGVyID0gcHJvdmlkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldFNlbGVjdGVkT2JqZWN0cygpCi0gIHsKLQkgIExpc3QgcHJvY2Vzc2VkT2JqZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIExpc3Qgb2JqZWN0cyA9IHN1cGVyLmdldFNlbGVjdGVkT2JqZWN0cygpOwotCSAgSXRlcmF0b3IgaXQgPSBvYmplY3RzLml0ZXJhdG9yKCk7Ci0JICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCSAgT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCSAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgewotCQkJICBwcm9jZXNzZWRPYmplY3RzLmFkZCgoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSBpdGVtKS5nZXRNb2RlbCgpKTsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0JCQkgIHByb2Nlc3NlZE9iamVjdHMuYWRkKGl0ZW0pOwotCQkgIH0KLQkgIH0KLQkgIAotCSAgcmV0dXJuIHByb2Nlc3NlZE9iamVjdHM7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGNhbGN1bGF0ZUVuYWJsZWQoKSB7Ci0JICBPYmplY3Qgc2VsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCSAgCi0JICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkgIHJldHVybiAgISgoSUFTRE9iamVjdCkgc2VsZWN0aW9uKS5pc1JlYWRPbmx5KCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBzZWxlY3RBbmREaXJlY3RFZGl0KGZpbmFsIE9iamVjdCBvKSB7Ci0JICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLQkJICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkgIGlmIChvIGluc3RhbmNlb2YgTm90aWZpZXIpIHsKLQkJCQkgIHBlcmZvcm1TZWxlY3Rpb24obyk7Ci0JCQkJICBhY3RpdmF0ZURpcmVjdEVkaXQoKTsKLQkJCSAgfQotCQkgIH19OwotCQkgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhydW5uYWJsZSk7Ci0gIH0KLQotCXByb3RlY3RlZCB2b2lkIGFjdGl2YXRlRGlyZWN0RWRpdCgpIHsKLQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJaWYgKCEocGFydCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSkgewotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQlPYmplY3QgZ3JhcGhpY2FsVmlld2VyID0gZWRpdG9yLmdldEFkYXB0ZXIoR3JhcGhpY2FsVmlld2VyLmNsYXNzKTsKLQkJCWlmIChncmFwaGljYWxWaWV3ZXIgaW5zdGFuY2VvZiBBYnN0cmFjdEVkaXRQYXJ0Vmlld2VyKSB7Ci0JCQkJQWJzdHJhY3RFZGl0UGFydFZpZXdlciB2aWV3ZXIgPSAoQWJzdHJhY3RFZGl0UGFydFZpZXdlcikgZ3JhcGhpY2FsVmlld2VyOwotCQkJCU9iamVjdCBvYmogPSB2aWV3ZXIuZ2V0U2VsZWN0ZWRFZGl0UGFydHMoKS5nZXQoMCk7Ci0JCQkJLy8gdG9kbzogcm1haDogd2UgbmVlZCB0byBjb21wbGV0ZWx5IHJlbW92ZSBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGRvRGlyZWN0RWRpdCgpLgotCQkJCS8vIFVzZSBwZXJmb3JtUmVxdWVzdCgpIGluc3RlYWQuCi0vLwkJCQlkb0RpcmVjdEVkaXQoKEVkaXRQYXJ0KSBvYmopOwotCQkJCVJlcXVlc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KCk7Ci0JCQkJcmVxdWVzdC5zZXRUeXBlKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKTsKLQkJCQkoKEVkaXRQYXJ0KSBvYmopLnBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOwotCQkJfQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGRvRGlyZWN0RWRpdChFZGl0UGFydCBlcCkgewotCQlSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgpOwotCQlyZXF1ZXN0LnNldFR5cGUoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpOwotCQllcC5wZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybVNlbGVjdGlvbihPYmplY3Qgb2JqZWN0KSB7Ci0gICAgCU9iamVjdCBhZGFwdGVkID0gbnVsbDsKLSAgICAJCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBOb3RpZmllcikgewotCQkJTm90aWZpZXIgZWxlbWVudCA9IChOb3RpZmllcikgb2JqZWN0OwotCQkJLy8gVE9ETzogV2Ugc2hvdWxkbid0IGtub3cgYWJvdXQgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyIGhlcmUuLi4uCi0JCQlhZGFwdGVkID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudCk7CQkJCi0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJYWRhcHRlZCA9IG9iamVjdDsKLQkJfQotCi0JCWlmIChhZGFwdGVkICE9IG51bGwpIHsKLQkgICAgCXRyeSB7Ci0JCSAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCSAgICAgICAgaWYgKGVkaXRvciAhPSBudWxsICYmIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcykgIT0gbnVsbCkgewotCQkgICAgICAgIAlJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3IuZ2V0QWRhcHRlcihJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpOwotCQkgICAgICAgIAlpZiAocHJvdmlkZXIgIT0gbnVsbCkgewotCQkgICAgICAgIAkJcHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGFkYXB0ZWQpKTsKLQkJICAgICAgICAJfQotCQkgICAgICAgIH0KLQkgICAgCX0KLQkgICAgCWNhdGNoIChFeGNlcHRpb24gZSkge30KLQkJfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9JQVNEQWRkQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0lBU0RBZGRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MmVlMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0lBU0RBZGRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUFTREFkZENvbW1hbmQgewotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL1Nob3dQcm9wZXJ0aWVzVmlld0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL1Nob3dQcm9wZXJ0aWVzVmlld0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjQ0N2FjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9TaG93UHJvcGVydGllc1ZpZXdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLQotCi0vKioKLSAqIFNob3cgdGhlIHByb3BlcnRpZXMgdmlldyBpbiB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZS4KLSAqLwotcHVibGljIGNsYXNzIFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24KLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVElFU19WSUVXX0lEID0gIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiOyAvLyROT04tTkxTLTEkCi0JCi0gIHByb3RlY3RlZCBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGVuYWJsZWRJbWFnZSwgZGlzYWJsZWRJbWFnZTsKLQotCXB1YmxpYyBTaG93UHJvcGVydGllc1ZpZXdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0hPV19QUk9QRVJUSUVTKTsKLQkJc2V0VG9vbFRpcFRleHQoZ2V0VGV4dCgpKTsKLSAgICBzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oImljb25zL2VsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmIikgKTsgLy8kTk9OLU5MUy0xJAotCSAgc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oImljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmIikgKTsgLy8kTk9OLU5MUy0xJAotCX0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGNhbGN1bGF0ZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBnZXRXb3JrYmVuY2hQYXJ0KCkuZ2V0U2l0ZSgpLmdldFBhZ2UoKS5zaG93VmlldyhQUk9QRVJUSUVTX1ZJRVdfSUQpOwotICAgIH0KLSAgICBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gcGllKQotICAgIHsKLQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWRhcHRlcmZhY3RvcnkvZXh0ZW5zaW9uL0FkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NzA5MDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIHsKLQlwcml2YXRlIFN0cmluZyBuYW1lc3BhY2U7Ci0JcHJpdmF0ZSBTdHJpbmcgYWRhcHRlckZhY3RvcnlDbGFzc05hbWU7Ci0JcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcjsKLQkKLQlwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb24oU3RyaW5nIG5hbWVzcGFjZSkgewotCQl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0QWRhcHRlckZhY3RvcnlDbGFzc05hbWUoU3RyaW5nIGZhY3RvcnlDbGFzc05hbWUpIHsKLQkJYWRhcHRlckZhY3RvcnlDbGFzc05hbWUgPSBmYWN0b3J5Q2xhc3NOYW1lOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBjbGFzc0xvYWRlcil7Ci0JICAgIHRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKSB7Ci0JCXJldHVybiBuYW1lc3BhY2U7Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKLQkJQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCWlmIChhZGFwdGVyRmFjdG9yeUNsYXNzTmFtZSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUNsYXNzIHRoZUNsYXNzID0gY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhhZGFwdGVyRmFjdG9yeUNsYXNzTmFtZSkgOiBDbGFzcy5mb3JOYW1lKGFkYXB0ZXJGYWN0b3J5Q2xhc3NOYW1lKTsKLQkJCQlmYWN0b3J5ID0gKEFkYXB0ZXJGYWN0b3J5KSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFjdG9yeTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0Yjk5YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSB7Ci0JcHJvdGVjdGVkIExpc3QgcmVnaXN0ZXJlZEFkYXB0ZXJGYWN0b3JpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgdm9pZCBhZGQoQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gZmFjdG9yeSkgewotCQlyZWdpc3RlcmVkQWRhcHRlckZhY3Rvcmllcy5hZGQoZmFjdG9yeSk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldEFkYXB0ZXJGYWN0b3J5TmFtZXNwYWNlcygpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQWRhcHRlckZhY3Rvcmllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbikgaS5uZXh0KCk7Ci0JCQlsaXN0LmFkZChleHRlbnNpb24uZ2V0TmFtZXNwYWNlKCkpOwotCQl9Ci0JCXJldHVybiBsaXN0OwotCX0KLQkKLQlwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpIHsKLQkJQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQWRhcHRlckZhY3Rvcmllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiBleHRlbnNpb24gPSAoQWRhcHRlckZhY3RvcnlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJCWlmIChuYW1lc3BhY2UuZXF1YWxzKGV4dGVuc2lvbi5nZXROYW1lc3BhY2UoKSkpIHsKLQkJCQkJcmVzdWx0ID0gZXh0ZW5zaW9uOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1ODA0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlOwotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIHsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLQlwcml2YXRlIFN0cmluZyBsYWJlbDsKLQlwcml2YXRlIFN0cmluZyBiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgcG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lOwotCQotCXByaXZhdGUgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXI7Ci0JCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWVzcGFjZSkgewotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRCaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWUoU3RyaW5nIGJpbmRpbmdDbGFzc05hbWUpIHsKLQkJYmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lID0gYmluZGluZ0NsYXNzTmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUoU3RyaW5nIHBvcnRDbGFzc05hbWUpIHsKLQkJcG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lID0gcG9ydENsYXNzTmFtZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0Q2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpewotCSAgICB0aGlzLmNsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gbmFtZXNwYWNlOwotCX0KLQkKLQlwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGdldEJpbmRpbmdDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKSB7Ci0JCUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSByZXN1bHQgPSBudWxsOwotCQlpZiAoYmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJQ2xhc3MgdGhlQ2xhc3MgPSBjbGFzc0xvYWRlciAhPSBudWxsID8gY2xhc3NMb2FkZXIubG9hZENsYXNzKGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZSkgOiBDbGFzcy5mb3JOYW1lKGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZSk7Ci0JCQkJcmVzdWx0ID0gKENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBnZXRQb3J0Q29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCkgewotCQlDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKHBvcnRPcHRpb25zUGFnZUNsYXNzTmFtZSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUNsYXNzIHRoZUNsYXNzID0gY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhwb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUpIDogQ2xhc3MuZm9yTmFtZShwb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUpOwotCQkJCXJlc3VsdCA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7Ci0JICByZXR1cm4gbGFiZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldExhYmVsKFN0cmluZyBsYWJlbCkgewotCSAgdGhpcy5sYWJlbCA9IGxhYmVsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiODUzZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgewotCXByb3RlY3RlZCBMaXN0IHJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIHZvaWQgYWRkKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24pIHsKLQkJcmVnaXN0ZXJlZENvbnRlbnRHZW5lcmF0b3JVSUxpc3QuYWRkKGV4dGVuc2lvbik7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0QmluZGluZ0V4dGVuc2lvbk5hbWVzKCkgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJbGlzdC5hZGQoZXh0ZW5zaW9uLmdldE5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBnZXRFeHRlbnNpb25Gb3JOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkgewotCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbikgaS5uZXh0KCk7Ci0JCQkJaWYgKG5hbWVzcGFjZS5lcXVhbHMoZXh0ZW5zaW9uLmdldE5hbWVzcGFjZSgpKSkgewotCQkJCQlyZXN1bHQgPSBleHRlbnNpb247Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBnZXRFeHRlbnNpb25Gb3JOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiByZXN1bHQgPSBudWxsOwotCQlpZiAobmFtZSAhPSBudWxsKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbikgaS5uZXh0KCk7Ci0JCQkJaWYgKG5hbWUuZXF1YWxzKGV4dGVuc2lvbi5nZXROYW1lKCkpKSB7Ci0JCQkJCXJlc3VsdCA9IGV4dGVuc2lvbjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0gIAotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGdldEV4dGVuc2lvbkZvckxhYmVsKFN0cmluZyBsYWJlbCkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiByZXN1bHQgPSBudWxsOwotICAgIGlmIChsYWJlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24pIGkubmV4dCgpOwotICAgICAgICBpZiAobGFiZWwuZXF1YWxzKGV4dGVuc2lvbi5nZXRMYWJlbCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGV4dGVuc2lvbjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmFiMmIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuQ29udGV4dE1lbnVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuQWN0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQ29sdW1uRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLklXU0RMUmVmYWN0b3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkNvbnRleHRNZW51UGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotCi0KLXB1YmxpYyBjbGFzcyBEZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlciBleHRlbmRzIENvbnRleHRNZW51UHJvdmlkZXIKLXsKLSAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgR3JhcGhDb250ZXh0TWVudVByb3ZpZGVyLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvblByb3ZpZGVyCi0gICAqIEBwYXJhbSBlZGl0b3IKLSAgICovCi0gIHB1YmxpYyBEZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlcihFZGl0UGFydFZpZXdlciB2aWV3ZXIsIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcikKLSAgewotICAgIHN1cGVyKHZpZXdlcik7Ci0gICAgdGhpcy5zZWxlY3Rpb25Qcm92aWRlciA9IHNlbGVjdGlvblByb3ZpZGVyOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgT2JqZWN0IGdldEFwcHJvcHJpYXRlU2VsZWN0aW9uKE9iamVjdCBzZWxlY3Rpb24pIHsKLQkgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBDb2x1bW5FZGl0UGFydCkgewotCQkgIHJldHVybiAoKEVkaXRQYXJ0KSBzZWxlY3Rpb24pLmdldFBhcmVudCgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gc2VsZWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLnBhcnRzLkNvbnRleHRNZW51UHJvdmlkZXIjYnVpbGRDb250ZXh0TWVudShvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyLAotICAgKiAgICAgIG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGJ1aWxkQ29udGV4dE1lbnUoSU1lbnVNYW5hZ2VyIG1lbnUpCi0gIHsKLQlJTWVudU1hbmFnZXIgY3VycmVudE1lbnUgPSBtZW51OwotICAgIAotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCUVkaXRvck1vZGVNYW5hZ2VyIG1hbmFnZXIgPSAoRWRpdG9yTW9kZU1hbmFnZXIpZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCUNvbnRleHRNZW51UGFydGljaXBhbnQgY29udGV4dE1lbnVQYXJ0aWNpcGFudCA9IG1hbmFnZXIgIT0gbnVsbCA/IG1hbmFnZXIuZ2V0Q3VycmVudE1vZGUoKS5nZXRDb250ZXh0TWVudVBhcnRpY2lwYW50KCkgOiBudWxsOwotCi0gICAgICAgIAotICAgIGN1cnJlbnRNZW51LmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7Ci0gICAgQWN0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRFZGl0b3JBY3Rpb25SZWdpc3RyeSgpOwotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgCi0gICAgT2JqZWN0IGFjdGl2ZVBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIE9iamVjdCBzZWxlY3RlZE9iamVjdCA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIHNlbGVjdGVkT2JqZWN0ID0gZ2V0QXBwcm9wcmlhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPYmplY3QpOwotCi0gICAgICBpZiAoY29udGV4dE1lbnVQYXJ0aWNpcGFudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBDb252ZXJ0IGVkaXRwYXJ0cyB0byBtb2RlbCBvYmplY3RzIGFzIHNlbGVjdGlvbnMKLSAgICAgICAgT2JqZWN0IG8gPSBzZWxlY3RlZE9iamVjdDsKLSAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBFZGl0UGFydCkKLSAgICAgICAgewotICAgICAgICAgIG8gPSAoKEVkaXRQYXJ0KXNlbGVjdGVkT2JqZWN0KS5nZXRNb2RlbCgpOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgIAotICAgICAgICBjb250ZXh0TWVudVBhcnRpY2lwYW50LmNvbnRyaWJ1dGVBY3Rpb25zKG8sIG1lbnUpOwotICAgICAgfSAgCi0gICAgICAKLSAgICAgIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIElBY3Rpb25Qcm92aWRlcikKLSAgICAgIHsKLSAgICAgICAgSUFjdGlvblByb3ZpZGVyIGFjdGlvblByb3ZpZGVyID0gKElBY3Rpb25Qcm92aWRlcikgc2VsZWN0ZWRPYmplY3Q7Ci0gICAgICAgIFN0cmluZ1tdIGFjdGlvbnMgPSBhY3Rpb25Qcm92aWRlci5nZXRBY3Rpb25zKGFjdGl2ZVBhcnQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgaWQgPSBhY3Rpb25zW2ldOyAgICAgICAgICAKLSAgICAgICAgICBpZiAoY29udGV4dE1lbnVQYXJ0aWNpcGFudCA9PSBudWxsIHx8IGNvbnRleHRNZW51UGFydGljaXBhbnQuaXNBcHBsaWNhYmxlKHNlbGVjdGVkT2JqZWN0LCBpZCkpCi0gICAgICAgICAgeyAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpZC5zdGFydHNXaXRoKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCkpIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBpZC5zdWJzdHJpbmcoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lELmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgSU1lbnVNYW5hZ2VyIHN1Yk1lbnUgPSBuZXcgTWVudU1hbmFnZXIodGV4dCk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRNZW51LmFkZChzdWJNZW51KTsKLSAgICAgICAgICAgICAgY3VycmVudE1lbnUgPSBzdWJNZW51OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaWQuc3RhcnRzV2l0aChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKSkgewotICAgICAgICAgICAgICBjdXJyZW50TWVudSA9IGdldFBhcmVudE1lbnUobWVudSwgY3VycmVudE1lbnUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSUFjdGlvbiBhY3Rpb24gPSByZWdpc3RyeS5nZXRBY3Rpb24oaWQpOwotICAgICAgICAgICAgICBpZiAoYWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhY3Rpb24uaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudE1lbnUuYWRkKGFjdGlvbik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAKLSAgICAgICAgfSAgICAgCi0gICAgICAgIAotICAgICAgICBtZW51LmFkZChyZWdpc3RyeS5nZXRBY3Rpb24oU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLklEKSk7Ci0gICAgICAgIG1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7ICAgICAgIAotICAgICAgICBJTWVudU1hbmFnZXIgc3ViTWVudSA9IG5ldyBNZW51TWFuYWdlcihNZXNzYWdlcy5fVUlfUkVGQUNUT1JfQ09OVEVYVF9NRU5VLCBJV1NETFJlZmFjdG9yQ29uc3RhbnRzLlJFRkFDVE9SX0NPTlRFWFRfTUVOVV9JRCk7Ci0JCW1lbnUuYWRkKHN1Yk1lbnUpOwotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOyAgICAgICAKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigic2VhcmNoX3Nsb3RfdGVtcCIpKTsgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICAgIG1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGdldFBhcmVudE1lbnUoSU1lbnVNYW5hZ2VyIHJvb3QsIElNZW51TWFuYWdlciBjaGlsZCkgewotCSAgSU1lbnVNYW5hZ2VyIHBhcmVudCA9IG51bGw7Ci0JICAKLQkgIElDb250cmlidXRpb25JdGVtW10ga2lkcyA9IHJvb3QuZ2V0SXRlbXMoKTsKLQkgIGludCBpbmRleCA9IDA7Ci0JICB3aGlsZSAoaW5kZXggPCBraWRzLmxlbmd0aCAmJiBwYXJlbnQgPT0gbnVsbCkgewotCQkgIElDb250cmlidXRpb25JdGVtIGl0ZW0gPSBraWRzW2luZGV4XTsKLQkJICBpZiAoaXRlbS5lcXVhbHMoY2hpbGQpKSB7Ci0JCQkgIHBhcmVudCA9IHJvb3Q7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBpZiAoaXRlbSBpbnN0YW5jZW9mIElNZW51TWFuYWdlcikgewotCQkJCSAgcGFyZW50ID0gZ2V0UGFyZW50TWVudSgoSU1lbnVNYW5hZ2VyKSBpdGVtLCBjaGlsZCk7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgaW5kZXgrKzsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHBhcmVudDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFjdGlvblJlZ2lzdHJ5IGdldEVkaXRvckFjdGlvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiAoQWN0aW9uUmVnaXN0cnkpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgfQotICBwcm90ZWN0ZWQgQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjazsKLQotICBwcm90ZWN0ZWQgQ29tbWFuZFN0YWNrIGdldENvbW1hbmRTdGFjaygpCi0gIHsKLSAgICBpZiAoY29tbWFuZFN0YWNrID09IG51bGwpCi0gICAgICBjb21tYW5kU3RhY2sgPSBnZXRWaWV3ZXIoKS5nZXRFZGl0RG9tYWluKCkuZ2V0Q29tbWFuZFN0YWNrKCk7Ci0gICAgcmV0dXJuIGNvbW1hbmRTdGFjazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmUyZGE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuU2VsZWN0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkucGFydHMuU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLkJhc2VHcmFwaGljYWxWaWV3ZXJLZXlIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Db21tb25TZWxlY3Rpb25NYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlciBleHRlbmRzIFNjcm9sbGluZ0dyYXBoaWNhbFZpZXdlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyID0gbmV3IEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpOwotLy9UT0RPIE1ha2UgdGhpcyBnZW5lcmljCi0JICBwdWJsaWMgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcihJRWRpdG9yUGFydCBlZGl0b3IsIENvbW1vblNlbGVjdGlvbk1hbmFnZXIgbWFuYWdlcikKLQkgIHsKLQkgICAgc3VwZXIoKTsKLQotCSAgICBzZXRDb250ZXh0TWVudShuZXcgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIodGhpcywgdGhpcykpOwotCSAgICAKLS8vCSAgICBNZW51TWFuYWdlciBtYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCIjcG9wdXAiKTsKLS8vCSAgICBtYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcihtZW51UHJvdmlkZXIpOwotLy8JICAgIG1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOwotLy8JICAgIE1lbnUgbWVudSA9IG1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUoZ2V0Q29udHJvbCgpKTsKLS8vCSAgICBnZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsgIAotCi0JICAgIGVkaXRvci5nZXRFZGl0b3JTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudSgib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucG9wdXAuZ3JhcGgiLCBnZXRDb250ZXh0TWVudSgpLCBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQotCSAgICAvLyBtYWtlIHRoZSBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyIGxpc3RlbiB0byBncmFwaCB2aWV3IHNlbGVjdGlvbiBjaGFuZ2VzCi0JICAgIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyKTsgICAgCi0JICAgIGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG1hbmFnZXIpOwotCSAgICBtYW5hZ2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsgIAotCi0JICAgIC8vIFdvcmthcm91bmQgYnVnIDIyNzY4NyBBbiBlZGl0IHBhcnQncyBmb2N1cyBzdGF0ZSBpcyBub3QgdXBkYXRlZCBwcm9wZXJseQotCSAgICAvLyBPbmNlIHRoaXMgaXMgYnVnIGlzIGZpeGVkLCB3ZSBjYW4gcmVtb3ZlIGN1c3RvbSBzZWxlY3Rpb24gbWFuYWdlcgotCSAgICBzZXRTZWxlY3Rpb25NYW5hZ2VyKG5ldyBDdXN0b21TZWxlY3Rpb25NYW5hZ2VyKCkpOwotCi0JICAgIHNldEtleUhhbmRsZXIobmV3IEJhc2VHcmFwaGljYWxWaWV3ZXJLZXlIYW5kbGVyKHRoaXMpKTsKLQkgIH0KLQkgIAotCSAgLy8gV29ya2Fyb3VuZCBidWcgMjI3Njg3IEFuIGVkaXQgcGFydCdzIGZvY3VzIHN0YXRlIGlzIG5vdCB1cGRhdGVkIHByb3Blcmx5Ci0JICAvLyBPbmNlIHRoaXMgaXMgYnVnIGlzIGZpeGVkLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2xhc3MKLQkgIHByaXZhdGUgY2xhc3MgQ3VzdG9tU2VsZWN0aW9uTWFuYWdlciBleHRlbmRzIFNlbGVjdGlvbk1hbmFnZXIKLQkgIHsKLQkgICAgcHVibGljIHZvaWQgYXBwZW5kU2VsZWN0aW9uKEVkaXRQYXJ0IGVkaXRwYXJ0KQotCSAgICB7Ci0JICAgICAgaWYgKGVkaXRwYXJ0ICE9IGdldEZvY3VzKCkpCi0JICAgICAgICBnZXRWaWV3ZXIoKS5zZXRGb2N1cyhlZGl0cGFydCk7Ci0JICAgICAgc3VwZXIuYXBwZW5kU2VsZWN0aW9uKGVkaXRwYXJ0KTsKLQkgICAgfQotCSAgfQotCSAgCi0JICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgc2VsZWN0aW9uIG1hbmFnZXIKLQkgIC8vIChlLmcuIGEgc2VsZWN0aW9uIG9jY3VyZWQgZnJvbSBhbm90aGVyIHZpZXcpCi0JICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkgIHsKLQkgICAgT2JqZWN0IHNlbGVjdGVkT2JqZWN0ID0gKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JICAgIGlmIChldmVudC5nZXRTb3VyY2UoKSAhPSBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyKQotCSAgICB7Ci0JICAgIAlFZGl0UGFydCBlZGl0UGFydCA9IGdldEVkaXRQYXJ0KGdldFJvb3RFZGl0UGFydCgpLCBzZWxlY3RlZE9iamVjdCk7Ci0JICAgIAlpZiAoZWRpdFBhcnQgIT0gbnVsbCkKLQkgICAgCXsKLQkgICAgCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdFBhcnQpKTsKLQkgICAgCX0gICAKLQkgICAgfQotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgRWRpdFBhcnQgZ2V0RWRpdFBhcnQoRWRpdFBhcnQgZWRpdFBhcnQsIE9iamVjdCBtb2RlbCkgIAotCSAgeyAgICAgICAgICAgICAgICAgICAgIAotCSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoZWRpdFBhcnQuZ2V0TW9kZWwoKSA9PSBtb2RlbCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9IGVkaXRQYXJ0OyAgICAgIAotCSAgICB9ICAgICAgICAgICAgICAgICAgIAotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICAgICAgewotCSAgICAgICAgcmVzdWx0ID0gZ2V0RWRpdFBhcnQoKEVkaXRQYXJ0KWkubmV4dCgpLCBtb2RlbCk7Ci0JICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfQotCSAgCi0KLSAgICAgIC8qCi0JICAgKiBXZSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBlZGl0IHBhcnQgc2VsZWN0aW9ucyB0byBtb2RlbCBvYmplY3Qgc2VsZWN0aW9ucwotCSAgICovCi0JICBjbGFzcyBBU0RTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uUHJvdmlkZXIsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLQkgIHsKLQkgICAgcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCi0JICAgIHB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCSAgICB7Ci0JICAgICAgbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikKLQkgICAgewotCSAgICAgIGxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCSAgICB9Ci0KLQkgICAgcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQkgICAgewotCSAgICAgIHJldHVybiBzZWxlY3Rpb247Ci0JICAgIH0KLQotCSAgICBwcm90ZWN0ZWQgdm9pZCBub3RpZnlMaXN0ZW5lcnMoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgICB7Ci0JICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgICB7Ci0JICAgICAgICBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyID0gKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpIGkubmV4dCgpOwotCSAgICAgICAgbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JICAgICAgfQotCSAgICB9Ci0KLQkgICAgcHVibGljIFN0cnVjdHVyZWRTZWxlY3Rpb24gY29udmVydFNlbGVjdGlvbkZyb21FZGl0UGFydFRvTW9kZWwoSVNlbGVjdGlvbiBlZGl0UGFydFNlbGVjdGlvbikKLQkgICAgewotCSAgICAgIExpc3Qgc2VsZWN0ZWRNb2RlbE9iamVjdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgICAgaWYgKGVkaXRQYXJ0U2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JICAgICAgewotCSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZWRpdFBhcnRTZWxlY3Rpb24pLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgICAgIHsKLQkgICAgICAgICAgT2JqZWN0IG9iaiA9IGkubmV4dCgpOwotCSAgICAgICAgICBPYmplY3QgbW9kZWwgPSBudWxsOwotCSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRWRpdFBhcnQpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBFZGl0UGFydCBlZGl0UGFydCA9IChFZGl0UGFydCkgb2JqOwotCSAgICAgICAgICAgIG1vZGVsID0gZWRpdFBhcnQuZ2V0TW9kZWwoKTsgICAgICAgICAgCi0JICAgICAgICAgIH0KLQkgICAgICAgICAgaWYgKG1vZGVsICE9IG51bGwpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdC5hZGQobW9kZWwpOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdCk7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JICAgIHsKLQkgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkgICAgfQotCi0JICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgICB7Ci0JICAgICAgSVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBjb252ZXJ0U2VsZWN0aW9uRnJvbUVkaXRQYXJ0VG9Nb2RlbChldmVudC5nZXRTZWxlY3Rpb24oKSk7Ci0JICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247Ci0JICAgICAgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IG5ld0V2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBuZXdTZWxlY3Rpb24pOwotCSAgICAgIG5vdGlmeUxpc3RlbmVycyhuZXdFdmVudCk7Ci0JICAgIH0KLQkgIH0gCi19ICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZWZmMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi0vKioKLSAqIEEgY29sbGVjdGlvbiBvZiBjb2xvciBhbmQgZm9udCByZWxhdGVkIGNvbnN0YW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMgCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGlzSGlnaENvbnRyYXN0ID0gRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0SGlnaENvbnRyYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZ3JvdXBCb3JkZXJDb2xvciAgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgMTE4LCAxMzQsIDE2NCk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZ3JvdXBIZWFkZXJDb2xvciAgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgMjMyLCAyNDAsIDI0OCk7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBlbGVtZW50Qm9yZGVyQ29sb3IgICAgICA9IG5ldyBDb2xvcihudWxsLCAxMjAsIDE1MiwgMTg0KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBlbGVtZW50QmFja2dyb3VuZENvbG9yICA9IG5ldyBDb2xvcihudWxsLCAyMzIsIDI0MCwgMjQ4KTsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGVsZW1lbnRMYWJlbENvbG9yICAgICAgID0gbmV3IENvbG9yKG51bGwsICA4MCwgMTAyLCAxNDQpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5Qm9yZGVyQ29sb3IgICAgID0gbmV3IENvbG9yKG51bGwsIDE2NCwgMTY0LCAxNjQpOyAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWQgICAgICAgICAgICAgICAgICAgICA9IG5ldyBDb2xvcihudWxsLCAyNTUsICAgMCwgICAwKTsgCi0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMjQsIDIzMywgMjQ2KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZU1lc3NhZ2VIZWFkaW5nQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjMwLCAyNDAsIDI0NSk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3Igbm9ybWFsVGFibGVDZWxsU2VsZWN0aW9uQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjM4LCAyMzIsIDE3MCk7IC8vbmV3IENvbG9yKG51bGwsIDI0MCwgMjMwLCAxNDApOyAvLzEsIDE1LCA0Mik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgdGFibGVDZWxsU2VsZWN0aW9uQ29sb3IgPSBpc0hpZ2hDb250cmFzdCA/IERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9USVRMRV9JTkFDVElWRV9CQUNLR1JPVU5EX0dSQURJRU5UKTogbm9ybWFsVGFibGVDZWxsU2VsZWN0aW9uQ29sb3I7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seVRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yID0gbmV3IENvbG9yKG51bGwsIDIzOSwgMjQzLCAyNTUpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyNDUsIDI0NSwgMjQ1KTsKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgcmVhZE9ubHlCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvckNvbnN0YW50cy53aGl0ZTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seUxhYmVsQ29sb3IgPSBDb2xvckNvbnN0YW50cy5ncmF5OwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGxhYmVsQ29sb3IgPSBDb2xvckNvbnN0YW50cy5ibGFjazsKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZGVmYXVsdEZvcmVncm91bmRDb2xvciA9IGlzSGlnaENvbnRyYXN0ID8gRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX1dJREdFVF9GT1JFR1JPVU5EKSA6IENvbG9yQ29uc3RhbnRzLmJsYWNrOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBpc0hpZ2hDb250cmFzdCA/IERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSURHRVRfQkFDS0dST1VORCkgOiBDb2xvckNvbnN0YW50cy53aGl0ZTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIHNtYWxsQm9sZEZvbnQgICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCA4LCBTV1QuQk9MRCk7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBGb250ICBtZWRpdW1Gb250ICAgICAgICAgICAgICA9IG5ldyBGb250KERpc3BsYXkuZ2V0Q3VycmVudCgpLCAiVGFob21hIiwgMTAsIFNXVC5OT05FKTsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIG1lZGl1bUJvbGRGb250ICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCAxMCwgU1dULkJPTEQpOyAgLy8kTk9OLU5MUy0xJAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0YWRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9LZXlib2FyZERyYWdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5JS2V5Ym9hcmREcmFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5lZGl0cG9saWNpZXMuS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeTsKLQotcHVibGljIGNsYXNzIEtleWJvYXJkRHJhZ0ltcGwgZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIGltcGxlbWVudHMgSUtleWJvYXJkRHJhZyB7Ci0KLQlwdWJsaWMgS2V5Ym9hcmREcmFnSW1wbCgpIHsKLQkJc3VwZXIobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBlcmZvcm1LZXlib2FyZERyYWcoR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nRWxlbWVudCwgaW50IGRpcmVjdGlvbikgewotCi0JCUtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kgcG9saWN5ID0gKEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kpbW92aW5nRWxlbWVudC5nZXRFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZKTsKLQkJCi0JCUVkaXRQYXJ0IHJpZ2h0RWxlbWVudCA9IHBvbGljeS5nZXRSZWxhdGl2ZUVkaXRQYXJ0KG1vdmluZ0VsZW1lbnQsIGRpcmVjdGlvbik7Ci0JCXBvbGljeSA9IChLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KXJpZ2h0RWxlbWVudC5nZXRFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZKTsKLQkJRWRpdFBhcnQgbGVmdEVsZW1lbnQgPSAocG9saWN5ICE9IG51bGwpPyBwb2xpY3kuZ2V0UmVsYXRpdmVFZGl0UGFydChyaWdodEVsZW1lbnQsIGRpcmVjdGlvbik6IG51bGw7Ci0JCSAgCi0JCU9iamVjdCBsZWZ0U2liRWxlbWVudCA9IChsZWZ0RWxlbWVudCAhPSBudWxsKT8gbGVmdEVsZW1lbnQuZ2V0TW9kZWwoKSA6IG51bGw7Ci0JCU9iamVjdCByaWdodFNpYkVsZW1lbnQgPSAocmlnaHRFbGVtZW50ICE9IG51bGwpPyByaWdodEVsZW1lbnQuZ2V0TW9kZWwoKSA6IG51bGw7Ci0JCWlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEgpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gcmlnaHRTaWJFbGVtZW50OwotCQkJcmlnaHRTaWJFbGVtZW50ID0gbGVmdFNpYkVsZW1lbnQ7Ci0JCX0gZWxzZSBpZiAoZGlyZWN0aW9uICE9IFBvc2l0aW9uQ29uc3RhbnRzLk5PUlRIKSByZXR1cm47Ci0JCQotCQlPYmplY3Qgc291cmNlID0gbW92aW5nRWxlbWVudC5nZXRNb2RlbCgpOwotCi0JCWlmIChzb3VyY2UgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotICAJCQkKLQkJCWlmKCEobGVmdFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkpIGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCWlmKCEocmlnaHRTaWJFbGVtZW50IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpKSByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotCQkJCi0JCQlPYmplY3QgbWVzc2FnZVJlZk93bmVyID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgc291cmNlKS5nZXRPd25lck9wZXJhdGlvbigpOwotICAJCQlpZiAobWVzc2FnZVJlZk93bmVyIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYkVsZW1lbnQ7Ci0gIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgcmlnaHRTaWJFbGVtZW50OwotICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nU2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBzb3VyY2U7Ci0gIAkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElPcGVyYXRpb24pIG1lc3NhZ2VSZWZPd25lcikuZ2V0UmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotICAJCQkJcGVyZm9ybVNlbGVjdGlvbihzb3VyY2UpOwotICAJCQl9Ci0gIAkJfQotICAJCWVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLSAgCQkJCi0gIAkJCWlmKCEobGVmdFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSkgbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQkJaWYoIShyaWdodFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSkgcmlnaHRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCQotICAJCQlPYmplY3QgcGFyYW1Pd25lciA9ICgoSVBhcmFtZXRlcikgc291cmNlKS5nZXRPd25lcigpOwotICAJCQlpZiAocGFyYW1Pd25lciBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gIAkJCQlJUGFyYW1ldGVyIGxlZnRTaWIgPSAoSVBhcmFtZXRlcikgbGVmdFNpYkVsZW1lbnQ7Ci0gIAkJCQlJUGFyYW1ldGVyIHJpZ2h0U2liID0gKElQYXJhbWV0ZXIpIHJpZ2h0U2liRWxlbWVudDsKLSAgCQkJCUlQYXJhbWV0ZXIgbW92aW5nU2liID0gKElQYXJhbWV0ZXIpIHNvdXJjZTsKLSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIHBhcmFtT3duZXIpLmdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotICAJCQkJcGVyZm9ybVNlbGVjdGlvbihzb3VyY2UpOwotICAJCQl9Ci0gIAkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2Nvbm5lY3Rpb25zL0NlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YzljMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5BYnN0cmFjdENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci0KLXB1YmxpYyBjbGFzcyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IgZXh0ZW5kcyBBYnN0cmFjdENvbm5lY3Rpb25BbmNob3IKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9QID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQk9UVE9NID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVGVCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJR0hUID0gMzsKLSAgCi0gIC8vIFRoZXNlIHR3byBhcmUgY3VzdG9tIGZvciByZWN0YW5nbGVzIHdpdGggaGVhZGVyIGJsb2NrcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIRUFERVJfTEVGVCA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9SSUdIVCA9IDU7Ci0KLSAgcHJpdmF0ZSBpbnQgbG9jYXRpb247Ci0gIHByaXZhdGUgaW50IGluc2V0OwotICBwcml2YXRlIGludCBvZmZzZXQgPSAwOwotICAKLSAgcHVibGljIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihJRmlndXJlIG93bmVyLCBpbnQgbG9jYXRpb24sIGludCBpbnNldCkgewotICAgIHN1cGVyKG93bmVyKTsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgdGhpcy5pbnNldCA9IGluc2V0OwotICB9Ci0gIAotICBwdWJsaWMgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIGludCBsb2NhdGlvbiwgaW50IGluc2V0LCBpbnQgb2Zmc2V0KSB7Ci0gICAgdGhpcyhvd25lciwgbG9jYXRpb24sIGluc2V0KTsKLSAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldExvY2F0aW9uKFBvaW50IHJlZmVyZW5jZSkgewotICAgIFJlY3RhbmdsZSByID0gZ2V0T3duZXIoKS5nZXRCb3VuZHMoKTsKLSAgICBpbnQgeCwgeTsKLSAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7Ci0gICAgICBjYXNlIFRPUDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIHIud2lkdGggLyAyICsgb2Zmc2V0OwotICAgICAgICB5ID0gci55ICsgaW5zZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBCT1RUT006Ci0gICAgICAgIHggPSByLnJpZ2h0KCkgLSByLndpZHRoIC8gMiArIG9mZnNldDsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSBpbnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIExFRlQ6Ci0gICAgICAgIHggPSByLnggKyBpbnNldDsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSByLmhlaWdodCAvIDIgKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBSSUdIVDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIGluc2V0OwotICAgICAgICB5ID0gci5ib3R0b20oKSAtIHIuaGVpZ2h0IC8gMiArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhFQURFUl9MRUZUOgotICAgICAgICB4ID0gci54ICsgaW5zZXQ7Ci0gICAgICAgIHkgPSByLnkgKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIRUFERVJfUklHSFQ6Ci0gICAgICAgIHggPSByLnJpZ2h0KCkgLSBpbnNldDsKLSAgICAgICAgeSA9IHIueSArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAKLSAgICAgICAgCi0gICAgICBkZWZhdWx0OgotICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZy4gQXR0YWNoIHRoZSBhbmNob3IgdG8gdGhlIG1pZGRsZQotICAgICAgICB4ID0gci5yaWdodCgpIC0gci53aWR0aCAvIDI7Ci0gICAgICAgIHkgPSByLmJvdHRvbSgpIC0gci5oZWlnaHQgLyAyOwotICAgIH0KLSAgICBQb2ludCBwID0gbmV3IFBvaW50KHgseSk7Ci0KLSAgICBnZXRPd25lcigpLnRyYW5zbGF0ZVRvQWJzb2x1dGUocCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRSZWZlcmVuY2VQb2ludCgpIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24obnVsbCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2Nvbm5lY3Rpb25zL1RvcExlZnRDb25uZWN0aW9uQW5jaG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MGJkYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmNvbm5lY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUb3BMZWZ0Q29ubmVjdGlvbkFuY2hvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcgoteyAKLSAgSUZpZ3VyZSBsYWJlbDsKLSAgcHVibGljIFRvcExlZnRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIElGaWd1cmUgbGFiZWwpIHsKLSAgICBzdXBlcihvd25lcik7Ci0gICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICB9Ci0gIHB1YmxpYyBQb2ludCBnZXRMb2NhdGlvbihQb2ludCByZWZlcmVuY2UpIHsKLSAgICBpbnQgeCA9IGdldE93bmVyKCkuZ2V0Qm91bmRzKCkueDsKLSAgICBpbnQgeSA9IGxhYmVsLmdldEJvdW5kcygpLnkgKyBsYWJlbC5nZXRCb3VuZHMoKS5oZWlnaHQgLyAyOwotICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoeCx5KTsKLSAgICBnZXRPd25lcigpLnRyYW5zbGF0ZVRvQWJzb2x1dGUocCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRSZWZlcmVuY2VQb2ludCgpIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24obnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENDb21iby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2U4MWM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBQZXRlciBMaXUgLSBTZW5lY2EgQ29sbGVnZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjU2MTg1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BQ0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVUZXh0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlVGV4dEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyOwotCi0vKgotICogcm1haDoKLSAqIFRoaXMgY2xhc3MgaXMgYSBjb3B5IG9mIENDb21iby4gIFdlIGNvcHkgaXQgYmVjYXVzZSB3ZSB3aXNoIHRvIGFsaWduCi0gKiB0aGUgVGV4dCBvZiB0aGUgQ29tYm8gaW4gb3VyIG93biBzcGVjaWFsIHdheS4gIEhvd2V2ZXIgdGhlcmUgaXMgbm8KLSAqIHdheSB0byBhY2Nlc3MgdGhlIFRleHQgb2JqZWN0IHdpdGhpbiBDQ29tYm8uLi4uLgotICogQnVnIGZvciB0aGlzIGlzc3VlIHRvIGJlIG9wZW5lZAotICovCi0KLS8qKgotICogVGhlIENDb21ibyBjbGFzcyByZXByZXNlbnRzIGEgc2VsZWN0YWJsZSB1c2VyIGludGVyZmFjZSBvYmplY3QKLSAqIHRoYXQgY29tYmluZXMgYSB0ZXh0IGZpZWxkIGFuZCBhIGxpc3QgYW5kIGlzc3VlcyBub3RpZmljYXRpb24KLSAqIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBmcm9tIHRoZSBsaXN0LgotICogPHA+Ci0gKiBOb3RlIHRoYXQgYWx0aG91Z2ggdGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDxjb2RlPkNvbXBvc2l0ZTwvY29kZT4sCi0gKiBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGFkZCBjaGlsZHJlbiB0byBpdCwgb3Igc2V0IGEgbGF5b3V0IG9uIGl0LgotICogPC9wPgotICogPGRsPgotICogPGR0PjxiPlN0eWxlczo8L2I+Ci0gKiA8ZGQ+Qk9SREVSLCBSRUFEX09OTFksIEZMQVQ8L2RkPgotICogPGR0PjxiPkV2ZW50czo8L2I+Ci0gKiA8ZGQ+U2VsZWN0aW9uPC9kZD4KLSAqIDwvZGw+Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBU0RDQ29tYm8gZXh0ZW5kcyBDb21wb3NpdGUgewotCi0JVGV4dCB0ZXh0OwotCUxpc3QgbGlzdDsKLQlpbnQgdmlzaWJsZUl0ZW1Db3VudCA9IDU7Ci0JU2hlbGwgcG9wdXA7Ci0JQnV0dG9uIGFycm93OwotCWJvb2xlYW4gaGFzRm9jdXM7Ci0JTGlzdGVuZXIgbGlzdGVuZXIsIGZpbHRlcjsKLQlDb2xvciBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kOwotCUZvbnQgZm9udDsKLQlwcml2YXRlIGludCB0ZXh0SW5kZW50ID0gNTsKLQkKLS8qKgotICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGdpdmVuIGl0cyBwYXJlbnQKLSAqIGFuZCBhIHN0eWxlIHZhbHVlIGRlc2NyaWJpbmcgaXRzIGJlaGF2aW9yIGFuZCBhcHBlYXJhbmNlLgotICogPHA+Ci0gKiBUaGUgc3R5bGUgdmFsdWUgaXMgZWl0aGVyIG9uZSBvZiB0aGUgc3R5bGUgY29uc3RhbnRzIGRlZmluZWQgaW4KLSAqIGNsYXNzIDxjb2RlPlNXVDwvY29kZT4gd2hpY2ggaXMgYXBwbGljYWJsZSB0byBpbnN0YW5jZXMgb2YgdGhpcwotICogY2xhc3MsIG9yIG11c3QgYmUgYnVpbHQgYnkgPGVtPmJpdHdpc2UgT1I8L2VtPidpbmcgdG9nZXRoZXIgCi0gKiAodGhhdCBpcywgdXNpbmcgdGhlIDxjb2RlPmludDwvY29kZT4gInwiIG9wZXJhdG9yKSB0d28gb3IgbW9yZQotICogb2YgdGhvc2UgPGNvZGU+U1dUPC9jb2RlPiBzdHlsZSBjb25zdGFudHMuIFRoZSBjbGFzcyBkZXNjcmlwdGlvbgotICogbGlzdHMgdGhlIHN0eWxlIGNvbnN0YW50cyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBjbGFzcy4KLSAqIFN0eWxlIGJpdHMgYXJlIGFsc28gaW5oZXJpdGVkIGZyb20gc3VwZXJjbGFzc2VzLgotICogPC9wPgotICoKLSAqIEBwYXJhbSBwYXJlbnQgYSB3aWRnZXQgd2hpY2ggd2lsbCBiZSB0aGUgcGFyZW50IG9mIHRoZSBuZXcgaW5zdGFuY2UgKGNhbm5vdCBiZSBudWxsKQotICogQHBhcmFtIHN0eWxlIHRoZSBzdHlsZSBvZiB3aWRnZXQgdG8gY29uc3RydWN0Ci0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgcGFyZW50IGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSBwYXJlbnQ8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlIFNXVCNCT1JERVIKLSAqIEBzZWUgU1dUI1JFQURfT05MWQotICogQHNlZSBTV1QjRkxBVAotICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZ2V0U3R5bGUoKQotICovCi1wdWJsaWMgQVNEQ0NvbWJvIChDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUpIHsKLQlzdXBlciAocGFyZW50LCBzdHlsZSA9IGNoZWNrU3R5bGUgKHN0eWxlKSk7Ci0JCi0JaW50IHRleHRTdHlsZSA9IFNXVC5TSU5HTEU7Ci0JaWYgKChzdHlsZSAmIFNXVC5SRUFEX09OTFkpICE9IDApIHRleHRTdHlsZSB8PSBTV1QuUkVBRF9PTkxZOwotCWlmICgoc3R5bGUgJiBTV1QuRkxBVCkgIT0gMCkgdGV4dFN0eWxlIHw9IFNXVC5GTEFUOwotCXRleHQgPSBuZXcgVGV4dCAodGhpcywgdGV4dFN0eWxlKTsKLQlpbnQgYXJyb3dTdHlsZSA9IFNXVC5BUlJPVyB8IFNXVC5ET1dOOwotCWlmICgoc3R5bGUgJiBTV1QuRkxBVCkgIT0gMCkgYXJyb3dTdHlsZSB8PSBTV1QuRkxBVDsKLQlhcnJvdyA9IG5ldyBCdXR0b24gKHRoaXMsIGFycm93U3R5bGUpOwotCi0JbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIgKCkgewotCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudCAoRXZlbnQgZXZlbnQpIHsKLQkJCWlmIChwb3B1cCA9PSBldmVudC53aWRnZXQpIHsKLQkJCQlwb3B1cEV2ZW50IChldmVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKHRleHQgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJdGV4dEV2ZW50IChldmVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKGxpc3QgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJbGlzdEV2ZW50IChldmVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKGFycm93ID09IGV2ZW50LndpZGdldCkgewotCQkJCWFycm93RXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoQVNEQ0NvbWJvLnRoaXMgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJY29tYm9FdmVudCAoZXZlbnQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChnZXRTaGVsbCAoKSA9PSBldmVudC53aWRnZXQpIHsKLQkJCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzT3V0KTsKLQkJCX0KLQkJfQotCX07Ci0JZmlsdGVyID0gbmV3IExpc3RlbmVyKCkgewotCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgewotCQkJU2hlbGwgc2hlbGwgPSAoKENvbnRyb2wpZXZlbnQud2lkZ2V0KS5nZXRTaGVsbCAoKTsKLQkJCWlmIChzaGVsbCA9PSBBU0RDQ29tYm8udGhpcy5nZXRTaGVsbCAoKSkgewotCQkJCWhhbmRsZUZvY3VzIChTV1QuRm9jdXNPdXQpOwotCQkJfQotCQl9Ci0JfTsKLQkKLQlpbnQgW10gY29tYm9FdmVudHMgPSB7U1dULkRpc3Bvc2UsIFNXVC5Nb3ZlLCBTV1QuUmVzaXplfTsKLQlmb3IgKGludCBpPTA7IGk8Y29tYm9FdmVudHMubGVuZ3RoOyBpKyspIHRoaXMuYWRkTGlzdGVuZXIgKGNvbWJvRXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQotCWludCBbXSB0ZXh0RXZlbnRzID0ge1NXVC5LZXlEb3duLCBTV1QuS2V5VXAsIFNXVC5NZW51RGV0ZWN0LCBTV1QuTW9kaWZ5LCBTV1QuTW91c2VEb3duLCBTV1QuTW91c2VVcCwgU1dULlRyYXZlcnNlLCBTV1QuRm9jdXNJbn07Ci0JZm9yIChpbnQgaT0wOyBpPHRleHRFdmVudHMubGVuZ3RoOyBpKyspIHRleHQuYWRkTGlzdGVuZXIgKHRleHRFdmVudHMgW2ldLCBsaXN0ZW5lcik7Ci0JCi0JaW50IFtdIGFycm93RXZlbnRzID0ge1NXVC5TZWxlY3Rpb24sIFNXVC5Gb2N1c0lufTsKLQlmb3IgKGludCBpPTA7IGk8YXJyb3dFdmVudHMubGVuZ3RoOyBpKyspIGFycm93LmFkZExpc3RlbmVyIChhcnJvd0V2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkKLQljcmVhdGVQb3B1cChudWxsLCAtMSk7Ci0JaW5pdEFjY2Vzc2libGUoKTsKLX0KLXN0YXRpYyBpbnQgY2hlY2tTdHlsZSAoaW50IHN0eWxlKSB7Ci0JaW50IG1hc2sgPSBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSB8IFNXVC5GTEFUIHwgU1dULkxFRlRfVE9fUklHSFQgfCBTV1QuUklHSFRfVE9fTEVGVDsKLQlyZXR1cm4gc3R5bGUgJiBtYXNrOwotfQotLyoqCi0gKiBBZGRzIHRoZSBhcmd1bWVudCB0byB0aGUgZW5kIG9mIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHBhcmFtIHN0cmluZyB0aGUgbmV3IGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlICNhZGQoU3RyaW5nLGludCkKLSAqLwotcHVibGljIHZvaWQgYWRkIChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWxpc3QuYWRkIChzdHJpbmcpOwotfQotLyoqCi0gKiBBZGRzIHRoZSBhcmd1bWVudCB0byB0aGUgcmVjZWl2ZXIncyBsaXN0IGF0IHRoZSBnaXZlbgotICogemVyby1yZWxhdGl2ZSBpbmRleC4KLSAqIDxwPgotICogTm90ZTogVG8gYWRkIGFuIGl0ZW0gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwgdXNlIHRoZQotICogcmVzdWx0IG9mIGNhbGxpbmcgPGNvZGU+Z2V0SXRlbUNvdW50KCk8L2NvZGU+IGFzIHRoZQotICogaW5kZXggb3IgdXNlIDxjb2RlPmFkZChTdHJpbmcpPC9jb2RlPi4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgaXRlbQotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBmb3IgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbnVsbDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IChpbmNsdXNpdmUpPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgI2FkZChTdHJpbmcpCi0gKi8KLXB1YmxpYyB2b2lkIGFkZCAoU3RyaW5nIHN0cmluZywgaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWxpc3QuYWRkIChzdHJpbmcsIGluZGV4KTsKLX0KLS8qKgotICogQWRkcyB0aGUgbGlzdGVuZXIgdG8gdGhlIGNvbGxlY3Rpb24gb2YgbGlzdGVuZXJzIHdobyB3aWxsCi0gKiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWNlaXZlcidzIHRleHQgaXMgbW9kaWZpZWQsIGJ5IHNlbmRpbmcKLSAqIGl0IG9uZSBvZiB0aGUgbWVzc2FnZXMgZGVmaW5lZCBpbiB0aGUgPGNvZGU+TW9kaWZ5TGlzdGVuZXI8L2NvZGU+Ci0gKiBpbnRlcmZhY2UuCi0gKgotICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB3aGljaCBzaG91bGQgYmUgbm90aWZpZWQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBsaXN0ZW5lciBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgTW9kaWZ5TGlzdGVuZXIKLSAqIEBzZWUgI3JlbW92ZU1vZGlmeUxpc3RlbmVyCi0gKi8KLXB1YmxpYyB2b2lkIGFkZE1vZGlmeUxpc3RlbmVyIChNb2RpZnlMaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCVR5cGVkTGlzdGVuZXIgdHlwZWRMaXN0ZW5lciA9IG5ldyBUeXBlZExpc3RlbmVyIChsaXN0ZW5lcik7Ci0JYWRkTGlzdGVuZXIgKFNXVC5Nb2RpZnksIHR5cGVkTGlzdGVuZXIpOwotfQotLyoqCi0gKiBBZGRzIHRoZSBsaXN0ZW5lciB0byB0aGUgY29sbGVjdGlvbiBvZiBsaXN0ZW5lcnMgd2hvIHdpbGwKLSAqIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHJlY2VpdmVyJ3Mgc2VsZWN0aW9uIGNoYW5nZXMsIGJ5IHNlbmRpbmcKLSAqIGl0IG9uZSBvZiB0aGUgbWVzc2FnZXMgZGVmaW5lZCBpbiB0aGUgPGNvZGU+U2VsZWN0aW9uTGlzdGVuZXI8L2NvZGU+Ci0gKiBpbnRlcmZhY2UuCi0gKiA8cD4KLSAqIDxjb2RlPndpZGdldFNlbGVjdGVkPC9jb2RlPiBpcyBjYWxsZWQgd2hlbiB0aGUgY29tYm8ncyBsaXN0IHNlbGVjdGlvbiBjaGFuZ2VzLgotICogPGNvZGU+d2lkZ2V0RGVmYXVsdFNlbGVjdGVkPC9jb2RlPiBpcyB0eXBpY2FsbHkgY2FsbGVkIHdoZW4gRU5URVIgaXMgcHJlc3NlZCB0aGUgY29tYm8ncyB0ZXh0IGFyZWEuCi0gKiA8L3A+Ci0gKgotICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB3aGljaCBzaG91bGQgYmUgbm90aWZpZWQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBsaXN0ZW5lciBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgU2VsZWN0aW9uTGlzdGVuZXIKLSAqIEBzZWUgI3JlbW92ZVNlbGVjdGlvbkxpc3RlbmVyCi0gKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQKLSAqLwotcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uTGlzdGVuZXIoU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChsaXN0ZW5lciA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlUeXBlZExpc3RlbmVyIHR5cGVkTGlzdGVuZXIgPSBuZXcgVHlwZWRMaXN0ZW5lciAobGlzdGVuZXIpOwotCWFkZExpc3RlbmVyIChTV1QuU2VsZWN0aW9uLHR5cGVkTGlzdGVuZXIpOwotCWFkZExpc3RlbmVyIChTV1QuRGVmYXVsdFNlbGVjdGlvbix0eXBlZExpc3RlbmVyKTsKLX0KLXZvaWQgYXJyb3dFdmVudCAoRXZlbnQgZXZlbnQpIHsKLQlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKLQkJY2FzZSBTV1QuRm9jdXNJbjogewotCQkJaGFuZGxlRm9jdXMgKFNXVC5Gb2N1c0luKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULlNlbGVjdGlvbjogewotCQkJZHJvcERvd24gKCFpc0Ryb3BwZWQgKCkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0vKioKLSAqIFNldHMgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkIHRvIGFuIGVtcHR5Ci0gKiBzZWxlY3Rpb24gc3RhcnRpbmcganVzdCBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3Rlci4gSWYgdGhlCi0gKiB0ZXh0IGZpZWxkIGlzIGVkaXRhYmxlLCB0aGlzIGhhcyB0aGUgZWZmZWN0IG9mIHBsYWNpbmcgdGhlCi0gKiBpLWJlYW0gYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LgotICogPHA+Ci0gKiBOb3RlOiBUbyBjbGVhciB0aGUgc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdCwgCi0gKiB1c2UgPGNvZGU+ZGVzZWxlY3RBbGwoKTwvY29kZT4uCi0gKiA8L3A+Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlICNkZXNlbGVjdEFsbAotICovCi1wdWJsaWMgdm9pZCBjbGVhclNlbGVjdGlvbiAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JdGV4dC5jbGVhclNlbGVjdGlvbiAoKTsKLQlsaXN0LmRlc2VsZWN0QWxsICgpOwotfQotdm9pZCBjb21ib0V2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5EaXNwb3NlOgotCQkJaWYgKHBvcHVwICE9IG51bGwgJiYgIXBvcHVwLmlzRGlzcG9zZWQgKCkpIHsKLQkJCQlsaXN0LnJlbW92ZUxpc3RlbmVyIChTV1QuRGlzcG9zZSwgbGlzdGVuZXIpOwotCQkJCXBvcHVwLmRpc3Bvc2UgKCk7Ci0JCQl9Ci0JCQlTaGVsbCBzaGVsbCA9IGdldFNoZWxsICgpOwotCQkJc2hlbGwucmVtb3ZlTGlzdGVuZXIgKFNXVC5EZWFjdGl2YXRlLCBsaXN0ZW5lcik7Ci0JCQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCQkJZGlzcGxheS5yZW1vdmVGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJcG9wdXAgPSBudWxsOyAgCi0JCQl0ZXh0ID0gbnVsbDsgIAotCQkJbGlzdCA9IG51bGw7ICAKLQkJCWFycm93ID0gbnVsbDsKLQkJCWJyZWFrOwotCQljYXNlIFNXVC5Nb3ZlOgotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCQljYXNlIFNXVC5SZXNpemU6Ci0JCQlpbnRlcm5hbExheW91dCAoZmFsc2UpOwotCQkJYnJlYWs7Ci0JfQotfQotCi1wdWJsaWMgUG9pbnQgY29tcHV0ZVNpemUgKGludCB3SGludCwgaW50IGhIaW50LCBib29sZWFuIGNoYW5nZWQpIHsKLQljaGVja1dpZGdldCAoKTsKLQlpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotCVN0cmluZ1tdIGl0ZW1zID0gbGlzdC5nZXRJdGVtcyAoKTsKLQlpbnQgdGV4dFdpZHRoID0gMDsKLQlHQyBnYyA9IG5ldyBHQyAodGV4dCk7Ci0JaW50IHNwYWNlciA9IGdjLnN0cmluZ0V4dGVudCAoIiAiKS54OyAvLyROT04tTkxTLTEkCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgewotCQl0ZXh0V2lkdGggPSBNYXRoLm1heCAoZ2Muc3RyaW5nRXh0ZW50IChpdGVtc1tpXSkueCwgdGV4dFdpZHRoKTsKLQl9Ci0JZ2MuZGlzcG9zZSgpOwotCVBvaW50IHRleHRTaXplID0gdGV4dC5jb21wdXRlU2l6ZSAoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxULCBjaGFuZ2VkKTsKLQlQb2ludCBhcnJvd1NpemUgPSBhcnJvdy5jb21wdXRlU2l6ZSAoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxULCBjaGFuZ2VkKTsKLQlQb2ludCBsaXN0U2l6ZSA9IGxpc3QuY29tcHV0ZVNpemUgKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCwgY2hhbmdlZCk7Ci0JaW50IGJvcmRlcldpZHRoID0gZ2V0Qm9yZGVyV2lkdGggKCk7Ci0JCi0JaGVpZ2h0ID0gTWF0aC5tYXggKHRleHRTaXplLnksIGFycm93U2l6ZS55KTsKLQl3aWR0aCA9IE1hdGgubWF4ICh0ZXh0V2lkdGggKyAyKnNwYWNlciArIGFycm93U2l6ZS54ICsgMipib3JkZXJXaWR0aCwgbGlzdFNpemUueCk7Ci0JaWYgKHdIaW50ICE9IFNXVC5ERUZBVUxUKSB3aWR0aCA9IHdIaW50OwotCWlmIChoSGludCAhPSBTV1QuREVGQVVMVCkgaGVpZ2h0ID0gaEhpbnQ7Ci0JcmV0dXJuIG5ldyBQb2ludCAod2lkdGggKyAyKmJvcmRlcldpZHRoLCBoZWlnaHQgKyAyKmJvcmRlcldpZHRoKTsKLX0KLXZvaWQgY3JlYXRlUG9wdXAoU3RyaW5nW10gaXRlbXMsIGludCBzZWxlY3Rpb25JbmRleCkgewkJCi0JCS8vIGNyZWF0ZSBzaGVsbCBhbmQgbGlzdAotCQlwb3B1cCA9IG5ldyBTaGVsbCAoZ2V0U2hlbGwgKCksIFNXVC5OT19UUklNIHwgU1dULk9OX1RPUCk7Ci0JCWludCBzdHlsZSA9IGdldFN0eWxlICgpOwotCQlpbnQgbGlzdFN0eWxlID0gU1dULlNJTkdMRSB8IFNXVC5WX1NDUk9MTDsKLQkJaWYgKChzdHlsZSAmIFNXVC5GTEFUKSAhPSAwKSBsaXN0U3R5bGUgfD0gU1dULkZMQVQ7Ci0JCWlmICgoc3R5bGUgJiBTV1QuUklHSFRfVE9fTEVGVCkgIT0gMCkgbGlzdFN0eWxlIHw9IFNXVC5SSUdIVF9UT19MRUZUOwotCQlpZiAoKHN0eWxlICYgU1dULkxFRlRfVE9fUklHSFQpICE9IDApIGxpc3RTdHlsZSB8PSBTV1QuTEVGVF9UT19SSUdIVDsKLQkJbGlzdCA9IG5ldyBMaXN0IChwb3B1cCwgbGlzdFN0eWxlKTsKLQkJaWYgKGZvbnQgIT0gbnVsbCkgbGlzdC5zZXRGb250IChmb250KTsKLQkJaWYgKGZvcmVncm91bmQgIT0gbnVsbCkgbGlzdC5zZXRGb3JlZ3JvdW5kIChmb3JlZ3JvdW5kKTsKLQkJaWYgKGJhY2tncm91bmQgIT0gbnVsbCkgbGlzdC5zZXRCYWNrZ3JvdW5kIChiYWNrZ3JvdW5kKTsKLQkJCi0JCWludCBbXSBwb3B1cEV2ZW50cyA9IHtTV1QuQ2xvc2UsIFNXVC5QYWludCwgU1dULkRlYWN0aXZhdGV9OwotCQlmb3IgKGludCBpPTA7IGk8cG9wdXBFdmVudHMubGVuZ3RoOyBpKyspIHBvcHVwLmFkZExpc3RlbmVyIChwb3B1cEV2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkJaW50IFtdIGxpc3RFdmVudHMgPSB7U1dULk1vdXNlVXAsIFNXVC5TZWxlY3Rpb24sIFNXVC5UcmF2ZXJzZSwgU1dULktleURvd24sIFNXVC5LZXlVcCwgU1dULkZvY3VzSW4sIFNXVC5EaXNwb3NlfTsKLQkJZm9yIChpbnQgaT0wOyBpPGxpc3RFdmVudHMubGVuZ3RoOyBpKyspIGxpc3QuYWRkTGlzdGVuZXIgKGxpc3RFdmVudHMgW2ldLCBsaXN0ZW5lcik7Ci0JCQotCQlpZiAoaXRlbXMgIT0gbnVsbCkgbGlzdC5zZXRJdGVtcyAoaXRlbXMpOwotCQlpZiAoc2VsZWN0aW9uSW5kZXggIT0gLTEpIGxpc3Quc2V0U2VsZWN0aW9uIChzZWxlY3Rpb25JbmRleCk7Ci19Ci0vKioKLSAqIERlc2VsZWN0cyB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gemVyby1yZWxhdGl2ZSBpbmRleCBpbiB0aGUgcmVjZWl2ZXIncyAKLSAqIGxpc3QuICBJZiB0aGUgaXRlbSBhdCB0aGUgaW5kZXggd2FzIGFscmVhZHkgZGVzZWxlY3RlZCwgaXQgcmVtYWlucwotICogZGVzZWxlY3RlZC4gSW5kaWNlcyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgYXJlIGlnbm9yZWQuCi0gKgotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBkZXNlbGVjdAotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIGRlc2VsZWN0IChpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlsaXN0LmRlc2VsZWN0IChpbmRleCk7Ci19Ci0vKioKLSAqIERlc2VsZWN0cyBhbGwgc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqIDxwPgotICogTm90ZTogVG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkLAotICogdXNlIDxjb2RlPmNsZWFyU2VsZWN0aW9uKCk8L2NvZGU+LgotICogPC9wPgotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSAjY2xlYXJTZWxlY3Rpb24KLSAqLwotcHVibGljIHZvaWQgZGVzZWxlY3RBbGwgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci19Ci12b2lkIGRyb3BEb3duIChib29sZWFuIGRyb3ApIHsKLQlpZiAoZHJvcCA9PSBpc0Ryb3BwZWQgKCkpIHJldHVybjsKLQlpZiAoIWRyb3AgJiYgIWlzRGlzcG9zZWQoKSkgewotCQlwb3B1cC5zZXRWaXNpYmxlIChmYWxzZSk7Ci0KLQkJaWYgKHRleHQgIT0gbnVsbCkgewotCQkgIHRleHQuc2VsZWN0QWxsKCk7Ci0JCX0KLQotCQlpZiAoIWlzRGlzcG9zZWQgKCkmJiBhcnJvdy5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQl0ZXh0LnNldEZvY3VzKCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmIChnZXRTaGVsbCgpICE9IHBvcHVwLmdldFBhcmVudCAoKSkgewotCQlTdHJpbmdbXSBpdGVtcyA9IGxpc3QuZ2V0SXRlbXMgKCk7Ci0JCWludCBzZWxlY3Rpb25JbmRleCA9IGxpc3QuZ2V0U2VsZWN0aW9uSW5kZXggKCk7Ci0JCWxpc3QucmVtb3ZlTGlzdGVuZXIgKFNXVC5EaXNwb3NlLCBsaXN0ZW5lcik7Ci0JCXBvcHVwLmRpc3Bvc2UoKTsKLQkJcG9wdXAgPSBudWxsOwotCQlsaXN0ID0gbnVsbDsKLQkJY3JlYXRlUG9wdXAgKGl0ZW1zLCBzZWxlY3Rpb25JbmRleCk7Ci0JfQotCQotCVBvaW50IHNpemUgPSBnZXRTaXplICgpOwotCWludCBpdGVtQ291bnQgPSBsaXN0LmdldEl0ZW1Db3VudCAoKTsKLQlpdGVtQ291bnQgPSAoaXRlbUNvdW50ID09IDApID8gdmlzaWJsZUl0ZW1Db3VudCA6IE1hdGgubWluKHZpc2libGVJdGVtQ291bnQsIGl0ZW1Db3VudCk7Ci0JaW50IGl0ZW1IZWlnaHQgPSBsaXN0LmdldEl0ZW1IZWlnaHQgKCkgKiBpdGVtQ291bnQ7Ci0JUG9pbnQgbGlzdFNpemUgPSBsaXN0LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgaXRlbUhlaWdodCwgZmFsc2UpOwotCWxpc3Quc2V0Qm91bmRzICgxLCAxLCBNYXRoLm1heCAoc2l6ZS54IC0gMiwgbGlzdFNpemUueCksIGxpc3RTaXplLnkpOwotCQotCWludCBpbmRleCA9IGxpc3QuZ2V0U2VsZWN0aW9uSW5kZXggKCk7Ci0JaWYgKGluZGV4ICE9IC0xKSBsaXN0LnNldFRvcEluZGV4IChpbmRleCk7Ci0JRGlzcGxheSBkaXNwbGF5ID0gZ2V0RGlzcGxheSAoKTsKLQlSZWN0YW5nbGUgbGlzdFJlY3QgPSBsaXN0LmdldEJvdW5kcyAoKTsKLQlSZWN0YW5nbGUgcGFyZW50UmVjdCA9IGRpc3BsYXkubWFwIChnZXRQYXJlbnQgKCksIG51bGwsIGdldEJvdW5kcyAoKSk7Ci0JUG9pbnQgY29tYm9TaXplID0gZ2V0U2l6ZSAoKTsKLQlSZWN0YW5nbGUgZGlzcGxheVJlY3QgPSBnZXRNb25pdG9yICgpLmdldENsaWVudEFyZWEgKCk7Ci0JaW50IHdpZHRoID0gTWF0aC5tYXggKGNvbWJvU2l6ZS54LCBsaXN0UmVjdC53aWR0aCArIDIpOwotCWludCBoZWlnaHQgPSBsaXN0UmVjdC5oZWlnaHQgKyAyOwotCWludCB4ID0gcGFyZW50UmVjdC54OwotCWludCB5ID0gcGFyZW50UmVjdC55ICsgY29tYm9TaXplLnk7Ci0JaWYgKHkgKyBoZWlnaHQgPiBkaXNwbGF5UmVjdC55ICsgZGlzcGxheVJlY3QuaGVpZ2h0KSB5ID0gcGFyZW50UmVjdC55IC0gaGVpZ2h0OwotCWlmICh4ICsgd2lkdGggPiBkaXNwbGF5UmVjdC54ICsgZGlzcGxheVJlY3Qud2lkdGgpIHggPSBkaXNwbGF5UmVjdC54ICsgZGlzcGxheVJlY3Qud2lkdGggLSBsaXN0UmVjdC53aWR0aDsKLQlwb3B1cC5zZXRCb3VuZHMgKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCXBvcHVwLnNldFZpc2libGUgKHRydWUpOwotCWxpc3Quc2V0Rm9jdXMgKCk7Ci19Ci0vKgotICogUmV0dXJuIHRoZSBsb3dlcmNhc2Ugb2YgdGhlIGZpcnN0IG5vbi0nJicgY2hhcmFjdGVyIGZvbGxvd2luZwotICogYW4gJyYnIGNoYXJhY3RlciBpbiB0aGUgZ2l2ZW4gc3RyaW5nLiBJZiB0aGVyZSBhcmUgbm8gJyYnCi0gKiBjaGFyYWN0ZXJzIGluIHRoZSBnaXZlbiBzdHJpbmcsIHJldHVybiAnXDAnLgotICovCi1jaGFyIF9maW5kTW5lbW9uaWMgKFN0cmluZyBzdHJpbmcpIHsKLQlpZiAoc3RyaW5nID09IG51bGwpIHJldHVybiAnXDAnOwotCWludCBpbmRleCA9IDA7Ci0JaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGggKCk7Ci0JZG8gewotCQl3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykgaW5kZXgrKzsKLQkJaWYgKCsraW5kZXggPj0gbGVuZ3RoKSByZXR1cm4gJ1wwJzsKLQkJaWYgKHN0cmluZy5jaGFyQXQgKGluZGV4KSAhPSAnJicpIHJldHVybiBDaGFyYWN0ZXIudG9Mb3dlckNhc2UgKHN0cmluZy5jaGFyQXQgKGluZGV4KSk7Ci0JCWluZGV4Kys7Ci0JfSB3aGlsZSAoaW5kZXggPCBsZW5ndGgpOwotIAlyZXR1cm4gJ1wwJzsKLX0KLS8qIAotICogUmV0dXJuIHRoZSBMYWJlbCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIHJlY2VpdmVyIGluIHRoZSB6LW9yZGVyLCAKLSAqIG9yIG51bGwgaWYgbm9uZS4gCi0gKi8KLUxhYmVsIGdldEFzc29jaWF0ZWRMYWJlbCAoKSB7Ci0JQ29udHJvbFtdIHNpYmxpbmdzID0gZ2V0UGFyZW50ICgpLmdldENoaWxkcmVuICgpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspIHsKLQkJaWYgKHNpYmxpbmdzIFtpXSA9PSB0aGlzKSB7Ci0JCQlpZiAoaSA+IDAgJiYgc2libGluZ3MgW2ktMV0gaW5zdGFuY2VvZiBMYWJlbCkgewotCQkJCXJldHVybiAoTGFiZWwpIHNpYmxpbmdzIFtpLTFdOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBudWxsOwotfQotcHVibGljIENvbnRyb2wgW10gZ2V0Q2hpbGRyZW4gKCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JcmV0dXJuIG5ldyBDb250cm9sIFswXTsKLX0KLS8qKgotICogR2V0cyB0aGUgZWRpdGFibGUgc3RhdGUuCi0gKgotICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgcmVjZWl2ZXIgaXMgZWRpdGFibGUKLSAqIAotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqIAotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgYm9vbGVhbiBnZXRFZGl0YWJsZSAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0RWRpdGFibGUoKTsKLX0KLS8qKgotICogUmV0dXJucyB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4sIHplcm8tcmVsYXRpdmUgaW5kZXggaW4gdGhlCi0gKiByZWNlaXZlcidzIGxpc3QuIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGluZGV4IGlzIG91dAotICogb2YgcmFuZ2UuCi0gKgotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXR1cm4KLSAqIEByZXR1cm4gdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4Ci0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiB0aGUgaW5kZXggaXMgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgU3RyaW5nIGdldEl0ZW0gKGludCBpbmRleCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JcmV0dXJuIGxpc3QuZ2V0SXRlbSAoaW5kZXgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgY29udGFpbmVkIGluIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBnZXRJdGVtQ291bnQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiBsaXN0LmdldEl0ZW1Db3VudCAoKTsKLX0KLS8qKgotICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBhcmVhIHdoaWNoIHdvdWxkIGJlIHVzZWQgdG8KLSAqIGRpc3BsYXkgPGVtPm9uZTwvZW0+IG9mIHRoZSBpdGVtcyBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LgotICoKLSAqIEByZXR1cm4gdGhlIGhlaWdodCBvZiBvbmUgaXRlbQotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgZ2V0SXRlbUhlaWdodCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIGxpc3QuZ2V0SXRlbUhlaWdodCAoKTsKLX0KLS8qKgotICogUmV0dXJucyBhbiBhcnJheSBvZiA8Y29kZT5TdHJpbmc8L2NvZGU+cyB3aGljaCBhcmUgdGhlIGl0ZW1zCi0gKiBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LiAKLSAqIDxwPgotICogTm90ZTogVGhpcyBpcyBub3QgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIKLSAqIHRvIG1haW50YWluIGl0cyBsaXN0IG9mIGl0ZW1zLCBzbyBtb2RpZnlpbmcgdGhlIGFycmF5IHdpbGwKLSAqIG5vdCBhZmZlY3QgdGhlIHJlY2VpdmVyLiAKLSAqIDwvcD4KLSAqCi0gKiBAcmV0dXJuIHRoZSBpdGVtcyBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIFN0cmluZyBbXSBnZXRJdGVtcyAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIGxpc3QuZ2V0SXRlbXMgKCk7Ci19Ci1wdWJsaWMgTWVudSBnZXRNZW51KCkgewotCXJldHVybiB0ZXh0LmdldE1lbnUoKTsKLX0KLS8qKgotICogUmV0dXJucyBhIDxjb2RlPlBvaW50PC9jb2RlPiB3aG9zZSB4IGNvb3JkaW5hdGUgaXMgdGhlIHN0YXJ0Ci0gKiBvZiB0aGUgc2VsZWN0aW9uIGluIHRoZSByZWNlaXZlcidzIHRleHQgZmllbGQsIGFuZCB3aG9zZSB5Ci0gKiBjb29yZGluYXRlIGlzIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi4gVGhlIHJldHVybmVkIHZhbHVlcwotICogYXJlIHplcm8tcmVsYXRpdmUuIEFuICJlbXB0eSIgc2VsZWN0aW9uIGFzIGluZGljYXRlZCBieQotICogdGhlIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGhhdmluZyB0aGUgc2FtZSB2YWx1ZS4KLSAqCi0gKiBAcmV0dXJuIGEgcG9pbnQgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3Rpb24gc3RhcnQgYW5kIGVuZAotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBQb2ludCBnZXRTZWxlY3Rpb24gKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB0ZXh0LmdldFNlbGVjdGlvbiAoKTsKLX0KLS8qKgotICogUmV0dXJucyB0aGUgemVyby1yZWxhdGl2ZSBpbmRleCBvZiB0aGUgaXRlbSB3aGljaCBpcyBjdXJyZW50bHkKLSAqIHNlbGVjdGVkIGluIHRoZSByZWNlaXZlcidzIGxpc3QsIG9yIC0xIGlmIG5vIGl0ZW0gaXMgc2VsZWN0ZWQuCi0gKgotICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldFNlbGVjdGlvbkluZGV4ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLX0KLXB1YmxpYyBpbnQgZ2V0U3R5bGUgKCkgewotCWludCBzdHlsZSA9IHN1cGVyLmdldFN0eWxlICgpOwotCXN0eWxlICY9IH5TV1QuUkVBRF9PTkxZOwotCWlmICghdGV4dC5nZXRFZGl0YWJsZSgpKSBzdHlsZSB8PSBTV1QuUkVBRF9PTkxZOyAKLQlyZXR1cm4gc3R5bGU7Ci19Ci0vKioKLSAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBhIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZQotICogcmVjZWl2ZXIncyB0ZXh0IGZpZWxkLgotICoKLSAqIEByZXR1cm4gdGhlIHJlY2VpdmVyJ3MgdGV4dAotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0VGV4dCAoKTsKLX0KLS8qKgotICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSByZWNlaXZlcnMncyB0ZXh0IGZpZWxkLgotICoKLSAqIEByZXR1cm4gdGhlIHRleHQgaGVpZ2h0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBnZXRUZXh0SGVpZ2h0ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRMaW5lSGVpZ2h0ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlIHJlY2VpdmVyJ3MKLSAqIHRleHQgZmllbGQgaXMgY2FwYWJsZSBvZiBob2xkaW5nLiBJZiB0aGlzIGhhcyBub3QgYmVlbiBjaGFuZ2VkCi0gKiBieSA8Y29kZT5zZXRUZXh0TGltaXQoKTwvY29kZT4sIGl0IHdpbGwgYmUgdGhlIGNvbnN0YW50Ci0gKiA8Y29kZT5Db21iby5MSU1JVDwvY29kZT4uCi0gKiAKLSAqIEByZXR1cm4gdGhlIHRleHQgbGltaXQKLSAqIAotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBnZXRUZXh0TGltaXQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB0ZXh0LmdldFRleHRMaW1pdCAoKTsKLX0KLS8qKgotICogR2V0cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIHZpc2libGUgaW4gdGhlIGRyb3AKLSAqIGRvd24gcG9ydGlvbiBvZiB0aGUgcmVjZWl2ZXIncyBsaXN0LgotICoKLSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSB2aXNpYmxlCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqIAotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgaW50IGdldFZpc2libGVJdGVtQ291bnQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB2aXNpYmxlSXRlbUNvdW50OwotfQotdm9pZCBoYW5kbGVGb2N1cyAoaW50IHR5cGUpIHsKLQlpZiAoaXNEaXNwb3NlZCAoKSkgcmV0dXJuOwotCXN3aXRjaCAodHlwZSkgewotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQlpZiAoaGFzRm9jdXMpIHJldHVybjsKLS8vCQkJaWYgKGdldEVkaXRhYmxlICgpKSB0ZXh0LnNlbGVjdEFsbCAoKTsKLQkJCWhhc0ZvY3VzID0gdHJ1ZTsKLQkJCVNoZWxsIHNoZWxsID0gZ2V0U2hlbGwgKCk7Ci0JCQlzaGVsbC5yZW1vdmVMaXN0ZW5lciAoU1dULkRlYWN0aXZhdGUsIGxpc3RlbmVyKTsKLQkJCXNoZWxsLmFkZExpc3RlbmVyIChTV1QuRGVhY3RpdmF0ZSwgbGlzdGVuZXIpOwotCQkJRGlzcGxheSBkaXNwbGF5ID0gZ2V0RGlzcGxheSAoKTsKLQkJCWRpc3BsYXkucmVtb3ZlRmlsdGVyIChTV1QuRm9jdXNJbiwgZmlsdGVyKTsKLQkJCWRpc3BsYXkuYWRkRmlsdGVyIChTV1QuRm9jdXNJbiwgZmlsdGVyKTsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5Gb2N1c0luLCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULkZvY3VzT3V0OiB7Ci0JCQlpZiAoIWhhc0ZvY3VzKSByZXR1cm47Ci0JCQlDb250cm9sIGZvY3VzQ29udHJvbCA9IGdldERpc3BsYXkgKCkuZ2V0Rm9jdXNDb250cm9sICgpOwotCQkJaWYgKGZvY3VzQ29udHJvbCA9PSBhcnJvdyB8fCBmb2N1c0NvbnRyb2wgPT0gbGlzdCB8fCBmb2N1c0NvbnRyb2wgPT0gdGV4dCkgcmV0dXJuOwotCQkJaGFzRm9jdXMgPSBmYWxzZTsKLQkJCVNoZWxsIHNoZWxsID0gZ2V0U2hlbGwgKCk7Ci0JCQlzaGVsbC5yZW1vdmVMaXN0ZW5lcihTV1QuRGVhY3RpdmF0ZSwgbGlzdGVuZXIpOwotCQkJRGlzcGxheSBkaXNwbGF5ID0gZ2V0RGlzcGxheSAoKTsKLQkJCWRpc3BsYXkucmVtb3ZlRmlsdGVyIChTV1QuRm9jdXNJbiwgZmlsdGVyKTsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5Gb2N1c091dCwgZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLS8qKgotICogU2VhcmNoZXMgdGhlIHJlY2VpdmVyJ3MgbGlzdCBzdGFydGluZyBhdCB0aGUgZmlyc3QgaXRlbQotICogKGluZGV4IDApIHVudGlsIGFuIGl0ZW0gaXMgZm91bmQgdGhhdCBpcyBlcXVhbCB0byB0aGUgCi0gKiBhcmd1bWVudCwgYW5kIHJldHVybnMgdGhlIGluZGV4IG9mIHRoYXQgaXRlbS4gSWYgbm8gaXRlbQotICogaXMgZm91bmQsIHJldHVybnMgLTEuCi0gKgotICogQHBhcmFtIHN0cmluZyB0aGUgc2VhcmNoIGl0ZW0KLSAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgaW5kZXhPZiAoU3RyaW5nIHN0cmluZykgewotCWNoZWNrV2lkZ2V0ICgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JcmV0dXJuIGxpc3QuaW5kZXhPZiAoc3RyaW5nKTsKLX0KLS8qKgotICogU2VhcmNoZXMgdGhlIHJlY2VpdmVyJ3MgbGlzdCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4sIAotICogemVyby1yZWxhdGl2ZSBpbmRleCB1bnRpbCBhbiBpdGVtIGlzIGZvdW5kIHRoYXQgaXMgZXF1YWwKLSAqIHRvIHRoZSBhcmd1bWVudCwgYW5kIHJldHVybnMgdGhlIGluZGV4IG9mIHRoYXQgaXRlbS4gSWYKLSAqIG5vIGl0ZW0gaXMgZm91bmQgb3IgdGhlIHN0YXJ0aW5nIGluZGV4IGlzIG91dCBvZiByYW5nZSwKLSAqIHJldHVybnMgLTEuCi0gKgotICogQHBhcmFtIHN0cmluZyB0aGUgc2VhcmNoIGl0ZW0KLSAqIEBwYXJhbSBzdGFydCB0aGUgemVyby1yZWxhdGl2ZSBpbmRleCBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCi0gKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGluZGV4T2YgKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JcmV0dXJuIGxpc3QuaW5kZXhPZiAoc3RyaW5nLCBzdGFydCk7Ci19Ci0KLXZvaWQgaW5pdEFjY2Vzc2libGUoKSB7Ci0JQWNjZXNzaWJsZUFkYXB0ZXIgYWNjZXNzaWJsZUFkYXB0ZXIgPSBuZXcgQWNjZXNzaWJsZUFkYXB0ZXIgKCkgewotCQlwdWJsaWMgdm9pZCBnZXROYW1lIChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJU3RyaW5nIG5hbWUgPSBudWxsOwotCQkJTGFiZWwgbGFiZWwgPSBnZXRBc3NvY2lhdGVkTGFiZWwgKCk7Ci0JCQlpZiAobGFiZWwgIT0gbnVsbCkgewotCQkJCW5hbWUgPSBzdHJpcE1uZW1vbmljIChsYWJlbC5nZXRUZXh0KCkpOwotCQkJfQotCQkJZS5yZXN1bHQgPSBuYW1lOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldEtleWJvYXJkU2hvcnRjdXQoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCVN0cmluZyBzaG9ydGN1dCA9IG51bGw7Ci0JCQlMYWJlbCBsYWJlbCA9IGdldEFzc29jaWF0ZWRMYWJlbCAoKTsKLQkJCWlmIChsYWJlbCAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIHRleHQgPSBsYWJlbC5nZXRUZXh0ICgpOwotCQkJCWlmICh0ZXh0ICE9IG51bGwpIHsKLQkJCQkJY2hhciBtbmVtb25pYyA9IF9maW5kTW5lbW9uaWMgKHRleHQpOwotCQkJCQlpZiAobW5lbW9uaWMgIT0gJ1wwJykgewotCQkJCQkJc2hvcnRjdXQgPSAiQWx0KyIrbW5lbW9uaWM7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWUucmVzdWx0ID0gc2hvcnRjdXQ7Ci0JCX0KLQkJcHVibGljIHZvaWQgZ2V0SGVscCAoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gZ2V0VG9vbFRpcFRleHQgKCk7Ci0JCX0KLQl9OwotCWdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyIChhY2Nlc3NpYmxlQWRhcHRlcik7Ci0JdGV4dC5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVMaXN0ZW5lciAoYWNjZXNzaWJsZUFkYXB0ZXIpOwotCWxpc3QuZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIgKGFjY2Vzc2libGVBZGFwdGVyKTsKLQkKLQlhcnJvdy5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVMaXN0ZW5lciAobmV3IEFjY2Vzc2libGVBZGFwdGVyKCkgewotCQlwdWJsaWMgdm9pZCBnZXROYW1lIChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBpc0Ryb3BwZWQgKCkgPyBTV1QuZ2V0TWVzc2FnZSAoIlNXVF9DbG9zZSIpIDogU1dULmdldE1lc3NhZ2UgKCJTV1RfT3BlbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRLZXlib2FyZFNob3J0Y3V0IChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSAiQWx0K0Rvd24gQXJyb3ciOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcHVibGljIHZvaWQgZ2V0SGVscCAoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gZ2V0VG9vbFRpcFRleHQgKCk7Ci0JCX0KLQl9KTsKLQotCWdldEFjY2Vzc2libGUoKS5hZGRBY2Nlc3NpYmxlVGV4dExpc3RlbmVyIChuZXcgQWNjZXNzaWJsZVRleHRBZGFwdGVyKCkgewotCQlwdWJsaWMgdm9pZCBnZXRDYXJldE9mZnNldCAoQWNjZXNzaWJsZVRleHRFdmVudCBlKSB7Ci0JCQllLm9mZnNldCA9IHRleHQuZ2V0Q2FyZXRQb3NpdGlvbiAoKTsKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRTZWxlY3Rpb25SYW5nZShBY2Nlc3NpYmxlVGV4dEV2ZW50IGUpIHsKLQkJCVBvaW50IHNlbCA9IHRleHQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQllLm9mZnNldCA9IHNlbC54OwotCQkJZS5sZW5ndGggPSBzZWwueSAtIHNlbC54OwotCQl9Ci0JfSk7Ci0JCi0JZ2V0QWNjZXNzaWJsZSgpLmFkZEFjY2Vzc2libGVDb250cm9sTGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldENoaWxkQXRQb2ludCAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQlQb2ludCB0ZXN0UG9pbnQgPSB0b0NvbnRyb2wgKGUueCwgZS55KTsKLQkJCWlmIChnZXRCb3VuZHMgKCkuY29udGFpbnMgKHRlc3RQb2ludCkpIHsKLQkJCQllLmNoaWxkSUQgPSBBQ0MuQ0hJTERJRF9TRUxGOwotCQkJfQotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBnZXRMb2NhdGlvbiAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQlSZWN0YW5nbGUgbG9jYXRpb24gPSBnZXRCb3VuZHMgKCk7Ci0JCQlQb2ludCBwdCA9IHRvRGlzcGxheSAobG9jYXRpb24ueCwgbG9jYXRpb24ueSk7Ci0JCQllLnggPSBwdC54OwotCQkJZS55ID0gcHQueTsKLQkJCWUud2lkdGggPSBsb2NhdGlvbi53aWR0aDsKLQkJCWUuaGVpZ2h0ID0gbG9jYXRpb24uaGVpZ2h0OwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBnZXRDaGlsZENvdW50IChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gMDsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgZ2V0Um9sZSAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQllLmRldGFpbCA9IEFDQy5ST0xFX0NPTUJPQk9YOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBnZXRTdGF0ZSAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQllLmRldGFpbCA9IEFDQy5TVEFURV9OT1JNQUw7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBnZXRWYWx1ZSAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9IGdldFRleHQgKCk7Ci0JCX0KLQl9KTsKLQotCXRleHQuZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyIChuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyICgpIHsKLQkJcHVibGljIHZvaWQgZ2V0Um9sZSAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQllLmRldGFpbCA9IHRleHQuZ2V0RWRpdGFibGUgKCkgPyBBQ0MuUk9MRV9URVhUIDogQUNDLlJPTEVfTEFCRUw7Ci0JCX0KLQl9KTsKLQotCWFycm93LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lciAobmV3IEFjY2Vzc2libGVDb250cm9sQWRhcHRlcigpIHsKLQkJcHVibGljIHZvaWQgZ2V0RGVmYXVsdEFjdGlvbiAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9IGlzRHJvcHBlZCAoKSA/IFNXVC5nZXRNZXNzYWdlICgiU1dUX0Nsb3NlIikgOiBTV1QuZ2V0TWVzc2FnZSAoIlNXVF9PcGVuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JfSk7Ci19Ci1ib29sZWFuIGlzRHJvcHBlZCAoKSB7Ci0JcmV0dXJuIHBvcHVwLmdldFZpc2libGUgKCk7Ci19Ci1wdWJsaWMgYm9vbGVhbiBpc0ZvY3VzQ29udHJvbCAoKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAodGV4dC5pc0ZvY3VzQ29udHJvbCAoKSB8fCBhcnJvdy5pc0ZvY3VzQ29udHJvbCAoKSB8fCBsaXN0LmlzRm9jdXNDb250cm9sICgpIHx8IHBvcHVwLmlzRm9jdXNDb250cm9sICgpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0gCi0JcmV0dXJuIHN1cGVyLmlzRm9jdXNDb250cm9sICgpOwotfQotCi1wdWJsaWMgdm9pZCBzZXRUZXh0SW5kZW50KGludCBpbmRlbnQpIHsKLQl0ZXh0SW5kZW50ID0gaW5kZW50OwotfQotCi12b2lkIGludGVybmFsTGF5b3V0IChib29sZWFuIGNoYW5nZWQpIHsKLQlpZiAoaXNEcm9wcGVkICgpKSBkcm9wRG93biAoZmFsc2UpOwotCVJlY3RhbmdsZSByZWN0ID0gZ2V0Q2xpZW50QXJlYSAoKTsKLQlpbnQgd2lkdGggPSByZWN0LndpZHRoOwotCWludCBoZWlnaHQgPSByZWN0LmhlaWdodDsKLQlQb2ludCBhcnJvd1NpemUgPSBhcnJvdy5jb21wdXRlU2l6ZSAoU1dULkRFRkFVTFQsIGhlaWdodCwgY2hhbmdlZCk7Ci0KLQl0ZXh0LnBhY2soKTsKLQlpbnQgdGV4dEhlaWdodCA9IHRleHQuZ2V0Qm91bmRzKCkuaGVpZ2h0OwotCWludCB0ZXh0WCA9IHRleHRJbmRlbnQ7Ci0JaW50IHRleHRZID0gKGhlaWdodCAtIHRleHRIZWlnaHQpIC8gMjsKLQl0ZXh0LnNldExvY2F0aW9uKHRleHRYLCB0ZXh0WSk7Ci0JCi0JYXJyb3cuc2V0Qm91bmRzICh3aWR0aCAtIGFycm93U2l6ZS54LCAwLCBhcnJvd1NpemUueCwgYXJyb3dTaXplLnkpOwotfQotdm9pZCBsaXN0RXZlbnQgKEV2ZW50IGV2ZW50KSB7Ci0Jc3dpdGNoIChldmVudC50eXBlKSB7Ci0JCWNhc2UgU1dULkRpc3Bvc2U6Ci0JCQlpZiAoZ2V0U2hlbGwgKCkgIT0gcG9wdXAuZ2V0UGFyZW50ICgpKSB7Ci0JCQkJU3RyaW5nW10gaXRlbXMgPSBsaXN0LmdldEl0ZW1zICgpOwotCQkJCWludCBzZWxlY3Rpb25JbmRleCA9IGxpc3QuZ2V0U2VsZWN0aW9uSW5kZXggKCk7Ci0JCQkJcG9wdXAgPSBudWxsOwotCQkJCWxpc3QgPSBudWxsOwotCQkJCWNyZWF0ZVBvcHVwIChpdGVtcywgc2VsZWN0aW9uSW5kZXgpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULkZvY3VzSW46IHsKLQkJCWhhbmRsZUZvY3VzIChTV1QuRm9jdXNJbik7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb3VzZVVwOiB7Ci0JCQlpZiAoZXZlbnQuYnV0dG9uICE9IDEpIHJldHVybjsKLQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5TZWxlY3Rpb246IHsKLQkJCWludCBpbmRleCA9IGxpc3QuZ2V0U2VsZWN0aW9uSW5kZXggKCk7Ci0JCQlpZiAoaW5kZXggPT0gLTEpIHJldHVybjsKLQkJCXRleHQuc2V0VGV4dCAobGlzdC5nZXRJdGVtIChpbmRleCkpOwotLy8JCQl0ZXh0LnNlbGVjdEFsbCAoKTsKLQkJCWxpc3Quc2V0U2VsZWN0aW9uIChpbmRleCk7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJZS5kb2l0ID0gZXZlbnQuZG9pdDsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlNlbGVjdGlvbiwgZSk7Ci0JCQlldmVudC5kb2l0ID0gZS5kb2l0OwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuVHJhdmVyc2U6IHsKLQkJCXN3aXRjaCAoZXZlbnQuZGV0YWlsKSB7Ci0JCQkJY2FzZSBTV1QuVFJBVkVSU0VfUkVUVVJOOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0VTQ0FQRToKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUzoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUOgotCQkJCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmRldGFpbCA9IGV2ZW50LmRldGFpbDsKLQkJCWUuZG9pdCA9IGV2ZW50LmRvaXQ7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5UcmF2ZXJzZSwgZSk7Ci0JCQlldmVudC5kb2l0ID0gZS5kb2l0OwotCQkJZXZlbnQuZGV0YWlsID0gZS5kZXRhaWw7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlVcDogewkJCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCi0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5LZXlVcCwgZSk7Ci0JCQkKLQkJCQotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuS2V5RG93bjogewotCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuRVNDKSB7IAotCQkJCS8vIEVzY2FwZSBrZXkgY2FuY2VscyBwb3B1cCBsaXN0Ci0JCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCX0KLQkJCWlmICgoZXZlbnQuc3RhdGVNYXNrICYgU1dULkFMVCkgIT0gMCAmJiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVAgfHwgZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfRE9XTikpIHsKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5DUikgewotCQkJCS8vIEVudGVyIGNhdXNlcyBkZWZhdWx0IHNlbGVjdGlvbgotCQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkRlZmF1bHRTZWxlY3Rpb24sIGUpOwotCQkJfQotCQkJLy8gQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkvLyBJZiBzbywgZG8gbm90IGNvbnRpbnVlLgotCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJbm90aWZ5TGlzdGVuZXJzKFNXVC5LZXlEb3duLCBlKTsKLQkJCWJyZWFrOwotCQkJCi0JCX0KLQl9Ci19Ci0KLXZvaWQgcG9wdXBFdmVudChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5QYWludDoKLQkJCS8vIGRyYXcgYmxhY2sgcmVjdGFuZ2xlIGFyb3VuZCBsaXN0Ci0JCQlSZWN0YW5nbGUgbGlzdFJlY3QgPSBsaXN0LmdldEJvdW5kcygpOwotCQkJQ29sb3IgYmxhY2sgPSBnZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKTsKLQkJCWV2ZW50LmdjLnNldEZvcmVncm91bmQoYmxhY2spOwotCQkJZXZlbnQuZ2MuZHJhd1JlY3RhbmdsZSgwLCAwLCBsaXN0UmVjdC53aWR0aCArIDEsIGxpc3RSZWN0LmhlaWdodCArIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULkNsb3NlOgotCQkJZXZlbnQuZG9pdCA9IGZhbHNlOwotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCQljYXNlIFNXVC5EZWFjdGl2YXRlOgotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCX0KLX0KLXB1YmxpYyB2b2lkIHJlZHJhdyAoKSB7Ci0Jc3VwZXIucmVkcmF3KCk7Ci0JdGV4dC5yZWRyYXcoKTsKLQlhcnJvdy5yZWRyYXcoKTsKLQlpZiAocG9wdXAuaXNWaXNpYmxlKCkpIGxpc3QucmVkcmF3KCk7Ci19Ci1wdWJsaWMgdm9pZCByZWRyYXcgKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGFsbCkgewotCXN1cGVyLnJlZHJhdyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLX0KLQotLyoqCi0gKiBSZW1vdmVzIHRoZSBpdGVtIGZyb20gdGhlIHJlY2VpdmVyJ3MgbGlzdCBhdCB0aGUgZ2l2ZW4KLSAqIHplcm8tcmVsYXRpdmUgaW5kZXguCi0gKgotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBmb3IgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZSAoaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlsaXN0LnJlbW92ZSAoaW5kZXgpOwotfQotLyoqCi0gKiBSZW1vdmVzIHRoZSBpdGVtcyBmcm9tIHRoZSByZWNlaXZlcidzIGxpc3Qgd2hpY2ggYXJlCi0gKiBiZXR3ZWVuIHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIHN0YXJ0IGFuZCBlbmQgCi0gKiBpbmRpY2VzIChpbmNsdXNpdmUpLgotICoKLSAqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlCi0gKiBAcGFyYW0gZW5kIHRoZSBlbmQgb2YgdGhlIHJhbmdlCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiBlaXRoZXIgdGhlIHN0YXJ0IG9yIGVuZCBhcmUgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCByZW1vdmUgKGludCBzdGFydCwgaW50IGVuZCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JbGlzdC5yZW1vdmUgKHN0YXJ0LCBlbmQpOwotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBpdGVtCi0gKiB1bnRpbCBhbiBpdGVtIGlzIGZvdW5kIHRoYXQgaXMgZXF1YWwgdG8gdGhlIGFyZ3VtZW50LCAKLSAqIGFuZCByZW1vdmVzIHRoYXQgaXRlbSBmcm9tIHRoZSBsaXN0LgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIGl0ZW0gdG8gcmVtb3ZlCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG5vdCBmb3VuZCBpbiB0aGUgbGlzdDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlIChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWxpc3QucmVtb3ZlIChzdHJpbmcpOwotfQotLyoqCi0gKiBSZW1vdmVzIGFsbCBvZiB0aGUgaXRlbXMgZnJvbSB0aGUgcmVjZWl2ZXIncyBsaXN0IGFuZCBjbGVhciB0aGUKLSAqIGNvbnRlbnRzIG9mIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZC4KLSAqIDxwPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlQWxsICgpIHsKLQljaGVja1dpZGdldCgpOwotCXRleHQuc2V0VGV4dCAoIiIpOyAvLyROT04tTkxTLTEkCi0JbGlzdC5yZW1vdmVBbGwgKCk7Ci19Ci0vKioKLSAqIFJlbW92ZXMgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgbGlzdGVuZXJzIHdobyB3aWxsCi0gKiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWNlaXZlcidzIHRleHQgaXMgbW9kaWZpZWQuCi0gKgotICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB3aGljaCBzaG91bGQgbm8gbG9uZ2VyIGJlIG5vdGlmaWVkCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgbGlzdGVuZXIgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlIE1vZGlmeUxpc3RlbmVyCi0gKiBAc2VlICNhZGRNb2RpZnlMaXN0ZW5lcgotICovCi1wdWJsaWMgdm9pZCByZW1vdmVNb2RpZnlMaXN0ZW5lciAoTW9kaWZ5TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChsaXN0ZW5lciA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCBsaXN0ZW5lcik7CQotfQotLyoqCi0gKiBSZW1vdmVzIHRoZSBsaXN0ZW5lciBmcm9tIHRoZSBjb2xsZWN0aW9uIG9mIGxpc3RlbmVycyB3aG8gd2lsbAotICogYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVjZWl2ZXIncyBzZWxlY3Rpb24gY2hhbmdlcy4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBubyBsb25nZXIgYmUgbm90aWZpZWQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBsaXN0ZW5lciBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgU2VsZWN0aW9uTGlzdGVuZXIKLSAqIEBzZWUgI2FkZFNlbGVjdGlvbkxpc3RlbmVyCi0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkxpc3RlbmVyIChTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCXJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLQlyZW1vdmVMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbixsaXN0ZW5lcik7CQotfQotLyoqCi0gKiBTZWxlY3RzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIGluZGV4IGluIHRoZSByZWNlaXZlcidzIAotICogbGlzdC4gIElmIHRoZSBpdGVtIGF0IHRoZSBpbmRleCB3YXMgYWxyZWFkeSBzZWxlY3RlZCwgaXQgcmVtYWlucwotICogc2VsZWN0ZWQuIEluZGljZXMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIGFyZSBpZ25vcmVkLgotICoKLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gc2VsZWN0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2VsZWN0IChpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChpbmRleCA9PSAtMSkgewotCQlsaXN0LmRlc2VsZWN0QWxsICgpOwotCQl0ZXh0LnNldFRleHQgKCIiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm47Ci0JfQotCWlmICgwIDw9IGluZGV4ICYmIGluZGV4IDwgbGlzdC5nZXRJdGVtQ291bnQoKSkgewotCQlpZiAoaW5kZXggIT0gZ2V0U2VsZWN0aW9uSW5kZXgoKSkgewotCQkJdGV4dC5zZXRUZXh0IChsaXN0LmdldEl0ZW0gKGluZGV4KSk7Ci0vLwkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJbGlzdC5zZWxlY3QgKGluZGV4KTsKLQkJCWxpc3Quc2hvd1NlbGVjdGlvbiAoKTsKLQkJfQotCX0KLX0KLXB1YmxpYyB2b2lkIHNldEJhY2tncm91bmQgKENvbG9yIGNvbG9yKSB7Ci0Jc3VwZXIuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JYmFja2dyb3VuZCA9IGNvbG9yOwotCWlmICh0ZXh0ICE9IG51bGwpIHRleHQuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JaWYgKGxpc3QgIT0gbnVsbCkgbGlzdC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQlpZiAoYXJyb3cgIT0gbnVsbCkgYXJyb3cuc2V0QmFja2dyb3VuZChjb2xvcik7Ci19Ci0vKioKLSAqIFNldHMgdGhlIGVkaXRhYmxlIHN0YXRlLgotICoKLSAqIEBwYXJhbSBlZGl0YWJsZSB0aGUgbmV3IGVkaXRhYmxlIHN0YXRlCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqIAotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgdm9pZCBzZXRFZGl0YWJsZSAoYm9vbGVhbiBlZGl0YWJsZSkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXRleHQuc2V0RWRpdGFibGUoZWRpdGFibGUpOwotfQotcHVibGljIHZvaWQgc2V0RW5hYmxlZCAoYm9vbGVhbiBlbmFibGVkKSB7Ci0Jc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLQlpZiAocG9wdXAgIT0gbnVsbCkgcG9wdXAuc2V0VmlzaWJsZSAoZmFsc2UpOwotCWlmICh0ZXh0ICE9IG51bGwpIHRleHQuc2V0RW5hYmxlZChlbmFibGVkKTsKLQlpZiAoYXJyb3cgIT0gbnVsbCkgYXJyb3cuc2V0RW5hYmxlZChlbmFibGVkKTsKLX0KLXB1YmxpYyBib29sZWFuIHNldEZvY3VzICgpIHsKLQljaGVja1dpZGdldCgpOwotCXJldHVybiB0ZXh0LnNldEZvY3VzICgpOwotfQotcHVibGljIHZvaWQgc2V0Rm9udCAoRm9udCBmb250KSB7Ci0Jc3VwZXIuc2V0Rm9udCAoZm9udCk7Ci0JdGhpcy5mb250ID0gZm9udDsKLQl0ZXh0LnNldEZvbnQgKGZvbnQpOwotCWxpc3Quc2V0Rm9udCAoZm9udCk7Ci0JaW50ZXJuYWxMYXlvdXQgKHRydWUpOwotfQotcHVibGljIHZvaWQgc2V0Rm9yZWdyb3VuZCAoQ29sb3IgY29sb3IpIHsKLQlzdXBlci5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQlmb3JlZ3JvdW5kID0gY29sb3I7Ci0JaWYgKHRleHQgIT0gbnVsbCkgdGV4dC5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQlpZiAobGlzdCAhPSBudWxsKSBsaXN0LnNldEZvcmVncm91bmQoY29sb3IpOwotCWlmIChhcnJvdyAhPSBudWxsKSBhcnJvdy5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLX0KLS8qKgotICogU2V0cyB0aGUgdGV4dCBvZiB0aGUgaXRlbSBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0IGF0IHRoZSBnaXZlbgotICogemVyby1yZWxhdGl2ZSBpbmRleCB0byB0aGUgc3RyaW5nIGFyZ3VtZW50LiBUaGlzIGlzIGVxdWl2YWxlbnQKLSAqIHRvIDxjb2RlPnJlbW92ZTwvY29kZT4naW5nIHRoZSBvbGQgaXRlbSBhdCB0aGUgaW5kZXgsIGFuZCB0aGVuCi0gKiA8Y29kZT5hZGQ8L2NvZGU+J2luZyB0aGUgbmV3IGl0ZW0gYXQgdGhhdCBpbmRleC4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciB0aGUgaXRlbQotICogQHBhcmFtIHN0cmluZyB0aGUgbmV3IHRleHQgZm9yIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiB0aGUgaW5kZXggaXMgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRJdGVtIChpbnQgaW5kZXgsIFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWxpc3Quc2V0SXRlbSAoaW5kZXgsIHN0cmluZyk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIHJlY2VpdmVyJ3MgbGlzdCB0byBiZSB0aGUgZ2l2ZW4gYXJyYXkgb2YgaXRlbXMuCi0gKgotICogQHBhcmFtIGl0ZW1zIHRoZSBhcnJheSBvZiBpdGVtcwotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGl0ZW1zIGFycmF5IGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfQVJHVU1FTlQgLSBpZiBhbiBpdGVtIGluIHRoZSBpdGVtcyBhcnJheSBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRJdGVtcyAoU3RyaW5nIFtdIGl0ZW1zKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JbGlzdC5zZXRJdGVtcyAoaXRlbXMpOwotCWlmICghdGV4dC5nZXRFZGl0YWJsZSAoKSkgdGV4dC5zZXRUZXh0ICgiIik7IC8vJE5PTi1OTFMtMSQKLX0KLS8qKgotICogU2V0cyB0aGUgbGF5b3V0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVjZWl2ZXIgdG8gYmUKLSAqIHRoZSBhcmd1bWVudCB3aGljaCBtYXkgYmUgbnVsbC4KLSAqIDxwPgotICogTm90ZTogTm8gTGF5b3V0IGNhbiBiZSBzZXQgb24gdGhpcyBDb250cm9sIGJlY2F1c2UgaXQgYWxyZWFkeQotICogbWFuYWdlcyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgaXRzIGNoaWxkcmVuLgotICogPC9wPgotICoKLSAqIEBwYXJhbSBsYXlvdXQgdGhlIHJlY2VpdmVyJ3MgbmV3IGxheW91dCBvciBudWxsCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0TGF5b3V0IChMYXlvdXQgbGF5b3V0KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuOwotfQotcHVibGljIHZvaWQgc2V0TWVudShNZW51IG1lbnUpIHsKLQl0ZXh0LnNldE1lbnUobWVudSk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkIHRvIHRoZQotICogcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCB3aG9zZSB4IGNvb3JkaW5hdGUgaXMgdGhlCi0gKiBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGFuZCB3aG9zZSB5IGNvb3JkaW5hdGUgaXMgdGhlIGVuZAotICogb2YgdGhlIHNlbGVjdGlvbi4gCi0gKgotICogQHBhcmFtIHNlbGVjdGlvbiBhIHBvaW50IHJlcHJlc2VudGluZyB0aGUgbmV3IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgcG9pbnQgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uIChQb2ludCBzZWxlY3Rpb24pIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JdGV4dC5zZXRTZWxlY3Rpb24gKHNlbGVjdGlvbi54LCBzZWxlY3Rpb24ueSk7Ci19Ci0KLS8qKgotICogU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCB0byB0aGUKLSAqIGdpdmVuIHN0cmluZy4KLSAqIDxwPgotICogTm90ZTogVGhlIHRleHQgZmllbGQgaW4gYSA8Y29kZT5Db21ibzwvY29kZT4gaXMgdHlwaWNhbGx5Ci0gKiBvbmx5IGNhcGFibGUgb2YgZGlzcGxheWluZyBhIHNpbmdsZSBsaW5lIG9mIHRleHQuIFRodXMsCi0gKiBzZXR0aW5nIHRoZSB0ZXh0IHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgbGluZSBicmVha3Mgb3IKLSAqIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyB3aWxsIHByb2JhYmx5IGNhdXNlIGl0IHRvIAotICogZGlzcGxheSBpbmNvcnJlY3RseS4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgdGV4dAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRUZXh0IChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWludCBpbmRleCA9IGxpc3QuaW5kZXhPZiAoc3RyaW5nKTsKLQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJbGlzdC5kZXNlbGVjdEFsbCAoKTsKLQkJdGV4dC5zZXRUZXh0IChzdHJpbmcpOwotCQlyZXR1cm47Ci0JfQotCXRleHQuc2V0VGV4dCAoc3RyaW5nKTsKLS8vCXRleHQuc2VsZWN0QWxsICgpOwotCWxpc3Quc2V0U2VsZWN0aW9uIChpbmRleCk7Ci0JbGlzdC5zaG93U2VsZWN0aW9uICgpOwotfQotLyoqCi0gKiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlIHJlY2VpdmVyJ3MKLSAqIHRleHQgZmllbGQgaXMgY2FwYWJsZSBvZiBob2xkaW5nIHRvIGJlIHRoZSBhcmd1bWVudC4KLSAqCi0gKiBAcGFyYW0gbGltaXQgbmV3IHRleHQgbGltaXQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfQ0FOTk9UX0JFX1pFUk8gLSBpZiB0aGUgbGltaXQgaXMgemVybzwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0VGV4dExpbWl0IChpbnQgbGltaXQpIHsKLQljaGVja1dpZGdldCgpOwotCXRleHQuc2V0VGV4dExpbWl0IChsaW1pdCk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFRvb2xUaXBUZXh0IChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlzdXBlci5zZXRUb29sVGlwVGV4dChzdHJpbmcpOwotCWFycm93LnNldFRvb2xUaXBUZXh0IChzdHJpbmcpOwotCXRleHQuc2V0VG9vbFRpcFRleHQgKHN0cmluZyk7CQkKLX0KLQotcHVibGljIHZvaWQgc2V0VmlzaWJsZSAoYm9vbGVhbiB2aXNpYmxlKSB7Ci0Jc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKLQlpZiAoIXZpc2libGUpIHBvcHVwLnNldFZpc2libGUoZmFsc2UpOwotfQotLyoqCi0gKiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgZHJvcAotICogZG93biBwb3J0aW9uIG9mIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBuZXcgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIHZpc2libGUKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyB2b2lkIHNldFZpc2libGVJdGVtQ291bnQgKGludCBjb3VudCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWlmIChjb3VudCA8IDApIHJldHVybjsKLQl2aXNpYmxlSXRlbUNvdW50ID0gY291bnQ7Ci19Ci1TdHJpbmcgc3RyaXBNbmVtb25pYyAoU3RyaW5nIHN0cmluZykgewotCWludCBpbmRleCA9IDA7Ci0JaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGggKCk7Ci0JZG8gewotCQl3aGlsZSAoKGluZGV4IDwgbGVuZ3RoKSAmJiAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykpIGluZGV4Kys7Ci0JCWlmICgrK2luZGV4ID49IGxlbmd0aCkgcmV0dXJuIHN0cmluZzsKLQkJaWYgKHN0cmluZy5jaGFyQXQgKGluZGV4KSAhPSAnJicpIHsKLQkJCXJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4LTEpICsgc3RyaW5nLnN1YnN0cmluZyhpbmRleCwgbGVuZ3RoKTsKLQkJfQotCQlpbmRleCsrOwotCX0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKLSAJcmV0dXJuIHN0cmluZzsKLX0KLXZvaWQgdGV4dEV2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzSW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuS2V5RG93bjogewotCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuQ1IpIHsKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5EZWZhdWx0U2VsZWN0aW9uLCBlKTsKLQkJCX0KLQkJCS8vQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkvLyBJZiBzbywgZG8gbm90IGNvbnRpbnVlLgotCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJCi0JCQlpZiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVAgfHwgZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfRE9XTikgewotCQkJCWV2ZW50LmRvaXQgPSBmYWxzZTsKLQkJCQlpZiAoKGV2ZW50LnN0YXRlTWFzayAmIFNXVC5BTFQpICE9IDApIHsKLQkJCQkJYm9vbGVhbiBkcm9wcGVkID0gaXNEcm9wcGVkICgpOwotLy8JCQkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJCQlpZiAoIWRyb3BwZWQpIHNldEZvY3VzICgpOwotCQkJCQlkcm9wRG93biAoIWRyb3BwZWQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpbnQgb2xkSW5kZXggPSBnZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCQlpZiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVApIHsKLQkJCQkJc2VsZWN0IChNYXRoLm1heCAob2xkSW5kZXggLSAxLCAwKSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2VsZWN0IChNYXRoLm1pbiAob2xkSW5kZXggKyAxLCBnZXRJdGVtQ291bnQgKCkgLSAxKSk7Ci0JCQkJfQotCQkJCWlmIChvbGRJbmRleCAhPSBnZXRTZWxlY3Rpb25JbmRleCAoKSkgewotCQkJCQlFdmVudCBlID0gbmV3IEV2ZW50KCk7Ci0JCQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5TZWxlY3Rpb24sIGUpOwotCQkJCX0KLQkJCQkvL0F0IHRoaXMgcG9pbnQgdGhlIHdpZGdldCBtYXkgaGF2ZSBiZWVuIGRpc3Bvc2VkLgotCQkJCS8vIElmIHNvLCBkbyBub3QgY29udGludWUuCi0JCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJfQotCQkJCi0JCQkvLyBGdXJ0aGVyIHdvcmsgOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBzZWFyY2ggaW4gCi0JCQkvLyBwb3AgdXAgbGlzdCBhcyBjaGFyYWN0ZXJzIHR5cGVkIGluIHRleHQgd2lkZ2V0Ci0JCQkKLQotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCS8vbm90aWZ5TGlzdGVuZXJzIChTV1QuS2V5RG93biwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlVcDogewotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULktleVVwLCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1lbnVEZXRlY3Q6IHsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuTWVudURldGVjdCwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb2RpZnk6IHsKLQkJCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULk1vZGlmeSwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb3VzZURvd246IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJaWYgKHRleHQuZ2V0RWRpdGFibGUgKCkpIHJldHVybjsKLQkJCWJvb2xlYW4gZHJvcHBlZCA9IGlzRHJvcHBlZCAoKTsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlpZiAoIWRyb3BwZWQpIHNldEZvY3VzICgpOwotCQkJZHJvcERvd24gKCFkcm9wcGVkKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vdXNlVXA6IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJaWYgKHRleHQuZ2V0RWRpdGFibGUgKCkpIHJldHVybjsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5UcmF2ZXJzZTogewkJCi0JCQlzd2l0Y2ggKGV2ZW50LmRldGFpbCkgewotCQkJCWNhc2UgU1dULlRSQVZFUlNFX1JFVFVSTjoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUzoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUOgotCQkJCQkvLyBUaGUgZW50ZXIgY2F1c2VzIGRlZmF1bHQgc2VsZWN0aW9uIGFuZAotCQkJCQkvLyB0aGUgYXJyb3cga2V5cyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBsaXN0IGNvbnRlbnRzIHNvCi0JCQkJCS8vIGRvIG5vdCB1c2UgdGhlbSBmb3IgdHJhdmVyc2FsLgotCQkJCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuZGV0YWlsID0gZXZlbnQuZGV0YWlsOwotCQkJZS5kb2l0ID0gZXZlbnQuZG9pdDsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlRyYXZlcnNlLCBlKTsKLQkJCWV2ZW50LmRvaXQgPSBlLmRvaXQ7Ci0JCQlldmVudC5kZXRhaWwgPSBlLmRldGFpbDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ29tYm9Cb3hDZWxsRWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NzRlZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0FkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotLyoKLSAqIFRoaXMgaXMgYSBjb3B5IG9mIENvbWJvQm94Q2VsbEVkaXRvci4KLSAqIFdlIG5lZWQgdG8gYXBwbHkgYW5kIGRlYWN0aXZhdGUgdGhlIGNvbWJvIG9uIGEgc2luZ2xlIGNsaWNrIChub3Qgb24gYSBkb3VibGUgY2xpY2sgbGlrZQotICogdGhlIENvbWJvQm94Q2VsbEVkaXRvcikuCi0gKi8KLXB1YmxpYyBjbGFzcyBBU0RDb21ib0JveENlbGxFZGl0b3IgZXh0ZW5kcyBDZWxsRWRpdG9yIHsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHByZXNlbnQgaW4gdGhlIGNvbWJvIGJveC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIGl0ZW1zOwotCi0gICAgLyoqCi0gICAgICogVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uCi0gICAgICovCi0gICAgaW50IHNlbGVjdGlvbjsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXN0b20gY29tYm8gYm94IGNvbnRyb2wuCi0gICAgICovCi0gICAgQVNEQ0NvbWJvIGNvbWJvQm94OwotICAgIHByaXZhdGUgT2JqZWN0IHNlbGVjdGVkVmFsdWU7Ci0gICAgcHJpdmF0ZSBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLSAgICBwcml2YXRlIGludCB0ZXh0SW5kZW50ID0gNTsKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNUcmF2ZXJzaW5nID0gZmFsc2U7Ci0gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgY2VsbCBlZGl0b3IgZnJvbSBiZWluZyBkZWFjdGl2YXRlZCB3aGlsZSBoYW5kbGluZyB0aGUgTmV3IG9yIEJyb3dzZSBzZWxlY3Rpb24uCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzSGFuZGxpbmdTZWxlY3Rpb24gPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgQ29tYm9Cb3hDZWxsRWRpdG9yIHN0eWxlCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGRlZmF1bHRTdHlsZSA9IFNXVC5OT05FOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjZWxsIGVkaXRvciB3aXRoIGEgY29tYm8gY29udGFpbmluZyB0aGUgZ2l2ZW4gCi0gICAgICogbGlzdCBvZiBjaG9pY2VzIGFuZCBwYXJlbnRlZCB1bmRlciB0aGUgZ2l2ZW4gY29udHJvbC4gVGhlIGNlbGwKLSAgICAgKiBlZGl0b3IgdmFsdWUgaXMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uCi0gICAgICogSW5pdGlhbGx5LCB0aGUgY2VsbCBlZGl0b3IgaGFzIG5vIGNlbGwgdmFsaWRhdG9yIGFuZAotICAgICAqIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIHNlbGVjdGVkLiAKLSAgICAgKgotICAgICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250cm9sCi0gICAgICogQHBhcmFtIGl0ZW1zIHRoZSBsaXN0IG9mIHN0cmluZ3MgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKi8KLSAgICBwdWJsaWMgQVNEQ29tYm9Cb3hDZWxsRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZ1tdIGl0ZW1zLCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlcikgewotICAgICAgICBzdXBlcihwYXJlbnQsIGRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIHNldEl0ZW1zKGl0ZW1zKTsKLSAgICAgICAgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgPSBlZGl0TWFuYWdlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciB0aGUgY29tYm8gYm94Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaXRlbXMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEl0ZW1zKFN0cmluZ1tdIGl0ZW1zKSB7Ci0gICAgICAgIEFzc2VydC5pc05vdE51bGwoaXRlbXMpOwotICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7Ci0gICAgICAgIHBvcHVsYXRlQ29tYm9Cb3hJdGVtcygpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0SW5kZW50KGludCBpbmRlbnQpIHsKLSAgICAJdGV4dEluZGVudCA9IGluZGVudDsKLSAgICAJY29tYm9Cb3guc2V0VGV4dEluZGVudChpbmRlbnQpOwotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBNZXRob2QgZGVjbGFyZWQgb24gQ2VsbEVkaXRvci4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLSAgICAgICAgY29tYm9Cb3ggPSBuZXcgQVNEQ0NvbWJvKHBhcmVudCwgZ2V0U3R5bGUoKSk7Ci0gICAgICAgIGNvbWJvQm94LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0gICAgICAgIGNvbWJvQm94LnNldFRleHRJbmRlbnQodGV4dEluZGVudCk7Ci0gICAgICAgIAotICAgICAgICBjb21ib0JveC5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5QWRhcHRlcigpIHsKLSAgICAgICAgICAgIC8vIGhvb2sga2V5IHByZXNzZWQgLSBzZWUgUFIgMTQyMDEgIAotICAgICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7Ci0gICAgICAgICAgICAgICAga2V5UmVsZWFzZU9jY3VyZWQoZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbWJvQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uTWFkZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICAgICAgCXNlbGVjdGlvbk1hZGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tYm9Cb3guYWRkVHJhdmVyc2VMaXN0ZW5lcihuZXcgVHJhdmVyc2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVRyYXZlcnNlZChUcmF2ZXJzZUV2ZW50IGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX0VTQ0FQRQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1JFVFVSTikgewotICAgICAgICAgICAgICAgICAgICBlLmRvaXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUIHx8IGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpc1RyYXZlcnNpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tYm9Cb3guYWRkRm9jdXNMaXN0ZW5lcihuZXcgRm9jdXNBZGFwdGVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkgewotICAgICAgICAgICAgICAgIEFTRENvbWJvQm94Q2VsbEVkaXRvci50aGlzLmZvY3VzTG9zdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGNvbWJvQm94OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIE9iamVjdCBpbnZva2VEaWFsb2coSUNvbXBvbmVudERpYWxvZyBkaWFsb2cpIHsKLSAgCSAgT2JqZWN0IG5ld1ZhbHVlID0gbnVsbDsKLSAgCSAgCi0gIAkgIGlmIChkaWFsb2cgPT0gbnVsbCkgewotICAJCSAgcmV0dXJuIG51bGw7Ci0gIAkgIH0KLSAgCSAgCi0gIAkgIGlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotICAJCSAgbmV3VmFsdWUgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLSAgCSAgfQotCi0gIAkgIHJldHVybiBuZXdWYWx1ZTsKLSAgICB9ICAKLQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT5Db21ib0JveENlbGxFZGl0b3I8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mCi0gICAgICogdGhpcyA8Y29kZT5DZWxsRWRpdG9yPC9jb2RlPiBmcmFtZXdvcmsgbWV0aG9kIHJldHVybnMKLSAgICAgKiB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3cmFwcGVkCi0gICAgICogIGFzIGFuIDxjb2RlPkludGVnZXI8L2NvZGU+Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIE9iamVjdCBkb0dldFZhbHVlKCkgewotICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoc2VsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogTWV0aG9kIGRlY2xhcmVkIG9uIENlbGxFZGl0b3IuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9TZXRGb2N1cygpIHsKLSAgICAgICAgY29tYm9Cb3guc2V0Rm9jdXMoKTsKLSAgICAgICAgY29tYm9Cb3guZHJvcERvd24odHJ1ZSk7Ci0vLyAgICAgICAgU3RyaW5nIGNvbWJvVGV4dCA9IGNvbWJvQm94LmdldFRleHQoKTsKLS8vICAgICAgICBjb21ib0JveC5zZXRUZXh0KCIgICAgICAgICAiICsgY29tYm9UZXh0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+Q29tYm9Cb3hDZWxsRWRpdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIHRoaXMgPGNvZGU+Q2VsbEVkaXRvcjwvY29kZT4gZnJhbWV3b3JrIG1ldGhvZCBzZXRzIHRoZSAKLSAgICAgKiBtaW5pbXVtIHdpZHRoIG9mIHRoZSBjZWxsLiAgVGhlIG1pbmltdW0gd2lkdGggaXMgMTAgY2hhcmFjdGVycwotICAgICAqIGlmIDxjb2RlPmNvbWJvQm94PC9jb2RlPiBpcyBub3QgPGNvZGU+bnVsbDwvY29kZT4gb3IgPGNvZGU+ZGlzcG9zZWQ8L2NvZGU+Ci0gICAgICogZWxlcyBpdCBpcyA2MCBwaXhlbHMgdG8gbWFrZSBzdXJlIHRoZSBhcnJvdyBidXR0b24gYW5kIHNvbWUgdGV4dCBpcyB2aXNpYmxlLgotICAgICAqIFRoZSBsaXN0IG9mIENDb21ibyB3aWxsIGJlIHdpZGUgZW5vdWdoIHRvIHNob3cgaXRzIGxvbmdlc3QgaXRlbS4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGF5b3V0RGF0YSBnZXRMYXlvdXREYXRhKCkgewotICAgICAgICBMYXlvdXREYXRhIGxheW91dERhdGEgPSBzdXBlci5nZXRMYXlvdXREYXRhKCk7Ci0gICAgICAgIGlmICgoY29tYm9Cb3ggPT0gbnVsbCkgfHwgY29tYm9Cb3guaXNEaXNwb3NlZCgpKQotICAgICAgICAgICAgbGF5b3V0RGF0YS5taW5pbXVtV2lkdGggPSA2MDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBtYWtlIHRoZSBjb21ib0JveCAxMCBjaGFyYWN0ZXJzIHdpZGUKLSAgICAgICAgICAgIEdDIGdjID0gbmV3IEdDKGNvbWJvQm94KTsKLSAgICAgICAgICAgIGxheW91dERhdGEubWluaW11bVdpZHRoID0gKGdjLmdldEZvbnRNZXRyaWNzKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldEF2ZXJhZ2VDaGFyV2lkdGgoKSAqIDEwKSArIDEwOwotICAgICAgICAgICAgZ2MuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsYXlvdXREYXRhOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT5Db21ib0JveENlbGxFZGl0b3I8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mCi0gICAgICogdGhpcyA8Y29kZT5DZWxsRWRpdG9yPC9jb2RlPiBmcmFtZXdvcmsgbWV0aG9kCi0gICAgICogYWNjZXB0cyBhIHplcm8tYmFzZWQgaW5kZXggb2YgYSBzZWxlY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGlvbiB3cmFwcGVkCi0gICAgICogICBhcyBhbiA8Y29kZT5JbnRlZ2VyPC9jb2RlPgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0VmFsdWUoT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIEFzc2VydC5pc1RydWUoY29tYm9Cb3ggIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBJbnRlZ2VyKSk7Ci0gICAgICAgIHNlbGVjdGlvbiA9ICgoSW50ZWdlcikgdmFsdWUpLmludFZhbHVlKCk7Ci0gICAgICAgIGNvbWJvQm94LnNlbGVjdChzZWxlY3Rpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveCBmb3IgdGhlIGN1cnJlbnQgY29udHJvbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcG9wdWxhdGVDb21ib0JveEl0ZW1zKCkgewotICAgICAgICBpZiAoY29tYm9Cb3ggIT0gbnVsbCAmJiBpdGVtcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjb21ib0JveC5yZW1vdmVBbGwoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgY29tYm9Cb3guYWRkKGl0ZW1zW2ldLCBpKTsKLQotICAgICAgICAgICAgc2V0VmFsdWVWYWxpZCh0cnVlKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbiA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWUgYW5kIGRlYWN0aWF2YXRlcyB0aGUgY2VsbCBlZGl0b3IKLSAgICAgKi8KLSAgICB2b2lkIGFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCkgewotICAgICAgICAvLwltdXN0IHNldCB0aGUgc2VsZWN0aW9uIGJlZm9yZSBnZXR0aW5nIHZhbHVlCi0gICAgICAgIHNlbGVjdGlvbiA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICAgIE9iamVjdCBuZXdWYWx1ZSA9IGRvR2V0VmFsdWUoKTsKLSAgICAgICAgbWFya0RpcnR5KCk7Ci0gICAgICAgIGJvb2xlYW4gaXNWYWxpZCA9IGlzQ29ycmVjdChuZXdWYWx1ZSk7Ci0gICAgICAgIHNldFZhbHVlVmFsaWQoaXNWYWxpZCk7Ci0gICAgICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICAgICAgLy8gdHJ5IHRvIGluc2VydCB0aGUgY3VycmVudCB2YWx1ZSBpbnRvIHRoZSBlcnJvciBtZXNzYWdlLgotICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldEVycm9yTWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBpdGVtc1tzZWxlY3Rpb25dIH0pKTsKLSAgICAgICAgfQotICAgICAgICBmaXJlQXBwbHlFZGl0b3JWYWx1ZSgpOwotICAgICAgICBkZWFjdGl2YXRlKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAgKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yI2ZvY3VzTG9zdCgpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZm9jdXNMb3N0KCkgewotICAgICAgICBpZiAoaXNBY3RpdmF0ZWQoKSAmJiAhaXNIYW5kbGluZ1NlbGVjdGlvbikgewotICAgICAgICAgICAgYXBwbHlFZGl0b3JWYWx1ZUFuZERlYWN0aXZhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvciNrZXlSZWxlYXNlT2NjdXJlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50KQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGtleVJlbGVhc2VPY2N1cmVkKEtleUV2ZW50IGtleUV2ZW50KSB7Ci0gICAgICAgIGlmIChrZXlFdmVudC5jaGFyYWN0ZXIgPT0gJ1x1MDAxYicpIHsgLy8gRXNjYXBlIGNoYXJhY3RlcgotICAgICAgICAgICAgZmlyZUNhbmNlbEVkaXRvcigpOwotICAgICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmNoYXJhY3RlciA9PSAnXHQnKSB7IC8vIHRhYiBrZXkKLSAgICAgICAgICAgIGFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCk7Ci0gICAgICAgIH0gCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0U2VsZWN0ZWRWYWx1ZSgpIHsKLSAgICAJcmV0dXJuIHNlbGVjdGVkVmFsdWU7Ci0gICAgfQotICAgIAotICAgIAotICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbk1hZGUoKSB7Ci0gICAgICAgIGlzSGFuZGxpbmdTZWxlY3Rpb24gPSB0cnVlOwotICAgIAlPYmplY3QgbmV3VmFsdWUgPSBudWxsOwotICAgIAl0cnkgewotCSAgICAJc2VsZWN0aW9uID0gY29tYm9Cb3guZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkgICAgICAgIGlmIChpc1RyYXZlcnNpbmcpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGlzVHJhdmVyc2luZyA9IGZhbHNlOwotCSAgICAgICAgICByZXR1cm47Ci0JICAgICAgICB9Ci0JICAgIAlTdHJpbmcgc3RyaW5nU2VsZWN0aW9uID0gaXRlbXNbc2VsZWN0aW9uXTsKLQkgICAgCQotCSAgICAJaWYgKHN0cmluZ1NlbGVjdGlvbi5lcXVhbHMoTWVzc2FnZXMuX1VJX0JVVFRPTl9CUk9XU0UpKSB7IC8vJE5PTi1OTFMtMSQKLQkgICAgCQluZXdWYWx1ZSA9IGludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXRCcm93c2VEaWFsb2coKSk7Ci0JICAgIAl9Ci0JICAgIAllbHNlIGlmIChzdHJpbmdTZWxlY3Rpb24uZXF1YWxzKE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXKSkgeyAvLyROT04tTkxTLTEkCi0JICAgIAkJbmV3VmFsdWUgPSBpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOwotCSAgICAJfQotICAgIAl9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgIGlzSGFuZGxpbmdTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIAlpZiAobmV3VmFsdWUgPT0gbnVsbCkgewotICAgIAkJaW50IGluZGV4ID0gY29tYm9Cb3guZ2V0U2VsZWN0aW9uSW5kZXgoKTsgICAgICAgICAgICAgIAotICAgIAkJaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgCQkJc2VsZWN0ZWRWYWx1ZSA9IGNvbWJvQm94LmdldEl0ZW0oaW5kZXgpOwotICAgIAkJfQotICAgIAl9Ci0gICAgCWVsc2UgewotICAgIAkJc2VsZWN0ZWRWYWx1ZSA9IG5ld1ZhbHVlOwotICAgIAl9Ci0gICAJCWFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCk7Ci0gICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0NvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDlhYzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkNlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db21ib0JveENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ2VsbEVkaXRvckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlciBleHRlbmRzIERpcmVjdEVkaXRNYW5hZ2VyCi17Ci0gIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLQotICBwdWJsaWMgQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlcihHcmFwaGljYWxFZGl0UGFydCBzb3VyY2UsIExhYmVsIGxhYmVsKQotICB7Ci0JICBzdXBlcihzb3VyY2UsIENvbWJvQm94Q2VsbEVkaXRvci5jbGFzcywgbmV3IEludGVybmFsQ2VsbEVkaXRvckxvY2F0b3IobGFiZWwpKTsKLSAgICB0aGlzLmxhYmVsID0gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0Q2VsbEVkaXRvcigpIAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIAlTdHJpbmcgaW5pdGlhbExhYmVsVGV4dCA9IGxhYmVsLmdldFRleHQoKTsgICAKLQotICAgIEFTRENDb21ibyBjb21ibyA9IChBU0RDQ29tYm8pZ2V0Q2VsbEVkaXRvcigpLmdldENvbnRyb2woKTsKLSAgIAljb21iby5zZXRGb250KGxhYmVsLmdldEZvbnQoKSk7Ci0gICAgY29tYm8uc2V0Rm9yZWdyb3VuZChsYWJlbC5nZXRGb3JlZ3JvdW5kQ29sb3IoKSk7Ci0gICAgY29tYm8uc2V0QmFja2dyb3VuZChsYWJlbC5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgY29tYm8uc2V0VmlzaWJsZUl0ZW1Db3VudCgyMCk7Ci0gICAgY29tYm8uc2V0RWRpdGFibGUoZmFsc2UpOwotCi0gIElDZWxsRWRpdG9yTGlzdGVuZXIgY2VsbEVkaXRvckxpc3RlbmVyID0gbmV3IElDZWxsRWRpdG9yTGlzdGVuZXIoKQotICB7Ci0gICAgcHVibGljIHZvaWQgY2FuY2VsRWRpdG9yKCkKLSAgICB7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFwcGx5RWRpdG9yVmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgZWRpdG9yVmFsdWVDaGFuZ2VkKGJvb2xlYW4gb2xkLCBib29sZWFuIG5ld1N0YXRlKQotICAgIHsKLSAgICB9Ci0gIH07Ci0gIGdldENlbGxFZGl0b3IoKS5hZGRMaXN0ZW5lcihjZWxsRWRpdG9yTGlzdGVuZXIpOwotCi0gICAgU3RyaW5nW10gaXRlbSA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpdGVtW2ldLmVxdWFscyhpbml0aWFsTGFiZWxUZXh0KSkKLSAgICAgIHsKLQkgICAgICBnZXRDZWxsRWRpdG9yKCkuc2V0VmFsdWUobmV3IEludGVnZXIoaSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IAkKLSAgfQkgCi0gICAgICAgICAKLSAgLy8gaGFjay4uLiBmb3Igc29tZSByZWFzb24gdGhlIENvbWJvQm94Q2VsbEVkaXRvciBkb2VzJ3QgZmlyZSBhbiBlZGl0b3JWYWx1ZUNoYW5nZWQgdG8gc2V0IHRoZSBkaXJ0eSBmbGFnCi0gIC8vIHVubGVzcyB3ZSBvdmVyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybiB0cnVlLCB0aGUgbWFuYWdlciBpcyBub3Qgbm90aWZpZWQgb2YgY2hhbmdlcyBtYWRlIGluIHRoZSBjZWxsIGVkaXRvcgotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0RpcnR5KCkKLSAgewotCSAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ2VsbEVkaXRvciBjcmVhdGVDZWxsRWRpdG9yT24oQ29tcG9zaXRlIGNvbXBvc2l0ZSkKLSAgeyAKLSAgICBib29sZWFuIGlzTGFiZWxUZXh0SW5MaXN0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgTGlzdCBsaXN0ID0gY29tcHV0ZUNvbWJvQ29udGVudCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyaW5nID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgIGlmIChzdHJpbmcuZXF1YWxzKGxhYmVsLmdldFRleHQoKSkpCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgaXNMYWJlbFRleHRJbkxpc3QgPSB0cnVlOwotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSAKLSAgICAgICAgIAotICAgIGlmICghaXNMYWJlbFRleHRJbkxpc3QpCi0gICAgewotICAgICAgbGlzdC5hZGQobGFiZWwuZ2V0VGV4dCgpKTsKLSAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIExpc3Qgc29ydGVkTGlzdCA9IGNvbXB1dGVTb3J0ZWRMaXN0KGxpc3QpOwotICAgIFN0cmluZ1tdIHN0cmluZ0FycmF5ID0gbmV3IFN0cmluZ1tzb3J0ZWRMaXN0LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdBcnJheS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBzdHJpbmdBcnJheVtpXSA9IChTdHJpbmcpc29ydGVkTGlzdC5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBjcmVhdGVDZWxsRWRpdG9yKGNvbXBvc2l0ZSwgc3RyaW5nQXJyYXkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ2VsbEVkaXRvciBjcmVhdGVDZWxsRWRpdG9yKENvbXBvc2l0ZSBjb21wb3NpdGUsIFN0cmluZ1tdIHN0cmluZ0FycmF5KQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21ib0JveENlbGxFZGl0b3IoY29tcG9zaXRlLCBzdHJpbmdBcnJheSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgY29tcHV0ZVNvcnRlZExpc3QoTGlzdCBsaXN0KQotICB7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgTGlzdCBjb21wdXRlQ29tYm9Db250ZW50KCk7IAotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHBlcmZvcm1Nb2RpZnkoT2JqZWN0IHZhbHVlKTsKLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEludGVybmFsQ2VsbEVkaXRvckxvY2F0b3IgaW1wbGVtZW50cyBDZWxsRWRpdG9yTG9jYXRvcgotICB7Ci0gICAgcHJvdGVjdGVkIExhYmVsIGxhYmVsOwotCi0gICAgcHVibGljIEludGVybmFsQ2VsbEVkaXRvckxvY2F0b3IoTGFiZWwgbGFiZWwpCi0gICAgewotICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICAgIH0gICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCByZWxvY2F0ZShDZWxsRWRpdG9yIGNlbGxlZGl0b3IpIAotICAgIHsKLSAgICAgICAgQVNEQ0NvbWJvIGNvbWJvID0gKEFTRENDb21ibyljZWxsZWRpdG9yLmdldENvbnRyb2woKTsgIAotCSAgICBSZWN0YW5nbGUgbGFiZWxQYXJlbnRCb3VuZHMgPSBsYWJlbC5nZXRQYXJlbnQoKS5nZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0JICAgIGxhYmVsLnRyYW5zbGF0ZVRvQWJzb2x1dGUobGFiZWxQYXJlbnRCb3VuZHMpOwotCSAgICAKLQkgICAgaW50IHggPSBsYWJlbFBhcmVudEJvdW5kcy54OwotCSAgICBpbnQgeSA9IGxhYmVsUGFyZW50Qm91bmRzLnk7Ci0JICAgIGludCB3aWR0aEsgPSBsYWJlbFBhcmVudEJvdW5kcy53aWR0aDsKLQkgICAgaW50IGhlaWdodCA9IGxhYmVsUGFyZW50Qm91bmRzLmhlaWdodDsKLQkgICAgY29tYm8uc2V0Qm91bmRzKHgsIHkgKyAxLCB3aWR0aEssIGhlaWdodCAtIDIpOwotICAgIH0KLSAgfSAKLSAgIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtRWRpdChDZWxsRWRpdG9yIGNlbGxFZGl0b3IpCi0gIHsKLQkgIEFTRENvbWJvQm94Q2VsbEVkaXRvciBjb21ib0NlbGxFZGl0b3IgPSAoQVNEQ29tYm9Cb3hDZWxsRWRpdG9yKSBjZWxsRWRpdG9yOwotCSAgQVNEQ0NvbWJvIGNvbWJvID0gKEFTRENDb21ibylnZXRDZWxsRWRpdG9yKCkuZ2V0Q29udHJvbCgpOwotCSAgaW50IGluZGV4ID0gY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsgICAgICAgICAgICAgIAotCSAgaWYgKGluZGV4ICE9IC0xKQotCSAgewotCQkgIE9iamVjdCB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oaW5kZXgpOwotCQkgIGlmIChjb21ib0NlbGxFZGl0b3IuZ2V0U2VsZWN0ZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCSAgdmFsdWUgPSBjb21ib0NlbGxFZGl0b3IuZ2V0U2VsZWN0ZWRWYWx1ZSgpOwotCQkgIH0KLQkJICAKLQkJICBwZXJmb3JtTW9kaWZ5KHZhbHVlKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkJICBTdHJpbmcgdHlwZWRWYWx1ZSA9IGNvbWJvLmdldFRleHQoKTsJCi0JCSAgaWYgKGNvbWJvLmluZGV4T2YodHlwZWRWYWx1ZSkgIT0gLTEpCi0JCSAgewkgICAgICAKLQkJCSAgcGVyZm9ybU1vZGlmeSh0eXBlZFZhbHVlKTsKLQkJICB9ICAgICAgCQotCQkgIGVsc2UKLQkJICB7Ci0JCQkgIFN0cmluZyBjbG9zZU1hdGNoID0gZ2V0Q2xvc2VNYXRjaCh0eXBlZFZhbHVlLCBjb21iby5nZXRJdGVtcygpKTsKLQkJCSAgaWYgKGNsb3NlTWF0Y2ggIT0gbnVsbCkKLQkJCSAgewotCQkJCSAgcGVyZm9ybU1vZGlmeShjbG9zZU1hdGNoKTsgICAgICAJCi0JCQkgIH0KLQkJCSAgZWxzZQotCQkJICB7ICAgICAgCQotCQkJCSAgRGlzcGxheS5nZXRDdXJyZW50KCkuYmVlcCgpOwotCQkJICB9Ci0JCSAgfQotCSAgfSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q2xvc2VNYXRjaChTdHJpbmcgdmFsdWUsIFN0cmluZ1tdIGl0ZW1zKQotICB7Ci0gICAgaW50IG1hdGNoSW5kZXggPSAtMTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgIAlTdHJpbmcgaXRlbSA9IGl0ZW1zW2ldOwotICAgIAlTdHJpbmcgYSA9IGdldExvY2FsTmFtZSh2YWx1ZSk7Ci0gICAgCVN0cmluZyBiID0gZ2V0TG9jYWxOYW1lKGl0ZW0pOwotCQkgIGlmIChhLmVxdWFsc0lnbm9yZUNhc2UoYikpCi0JCSAgeyAKLQkJCSAgbWF0Y2hJbmRleCA9IGk7Ci0JCQkgIGJyZWFrOwkJCQkKLQkJICB9CSAgICAJICAgICAKLSAgICB9ICAKLSAgICByZXR1cm4gbWF0Y2hJbmRleCAhPSAtMSA/IGl0ZW1zW21hdGNoSW5kZXhdIDogbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMb2NhbE5hbWUoU3RyaW5nIHN0cmluZykKLSAgewotCQlpbnQgaW5kZXggPSBzdHJpbmcuaW5kZXhPZigiOiIpOyAvLyROT04tTkxTLTEkCi0JICByZXR1cm4gKGluZGV4ICE9IC0xKSA/IHN0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKSA6IHN0cmluZzsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0RpcmVjdEVkaXRTZWxlY3Rpb25Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0RpcmVjdEVkaXRTZWxlY3Rpb25Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGZkMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmVDYW52YXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLlNlbGVjdGlvblJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLlNlbGVjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLklOYW1lZEVkaXRQYXJ0OwotCi0vKioKLSAqIEV4dGVuZHMgdGhlIGRlZmF1bHQgR0VGIHNlbGVjdGlvbiB0b29scyB0byBzZW5kIHRoZQotICogbW91c2UgZXZlbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXJlY3RFZGl0U2VsZWN0aW9uVG9vbCBleHRlbmRzIFNlbGVjdGlvblRvb2wgewotCQotCXByb3RlY3RlZCBJTmFtZWRFZGl0UGFydCBnZXRTZWxlY3RlZFBhcnQoKSB7Ci0JCWlmKGdldEN1cnJlbnRWaWV3ZXIoKSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCUVkaXRQYXJ0IGVwID0gZ2V0Q3VycmVudFZpZXdlcigpLmdldEZvY3VzRWRpdFBhcnQoKTsKLQkJaWYoZXAgaW5zdGFuY2VvZiBJTmFtZWRFZGl0UGFydCAmJiBlcC5pc0FjdGl2ZSgpKQotCQkJcmV0dXJuIChJTmFtZWRFZGl0UGFydCllcDsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZUJ1dHRvbkRvd24oaW50IGJ1dHRvbikgewotCQlzdXBlci5oYW5kbGVCdXR0b25Eb3duKGJ1dHRvbik7Ci0JCUlOYW1lZEVkaXRQYXJ0IHNlbGVjdGVkUGFydCA9IGdldFNlbGVjdGVkUGFydCgpOwotCQkKLQkJaWYoc2VsZWN0ZWRQYXJ0ICE9IG51bGwgJiYgYnV0dG9uID09IDEpIHsKLQkJCUlucHV0IGkgPSBnZXRDdXJyZW50SW5wdXQoKTsKLQkJCVBvaW50IGwgPSB0cmFuc2xhdGVMb2NhdGlvbihpLmdldE1vdXNlTG9jYXRpb24oKSk7Ci0JCQkKLQkJCUlGaWd1cmUgZiA9ICgoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgc2VsZWN0ZWRQYXJ0KS5nZXRGaWd1cmUoKTsKLQkJCVJlY3RhbmdsZSBib3VuZHMgPSBmLmdldEJvdW5kcygpOwotCQkJaWYoYm91bmRzLmNvbnRhaW5zKGwueCxsLnkpKSB7Ci0JCQkJc2VsZWN0ZWRQYXJ0LnBlcmZvcm1EaXJlY3RFZGl0KHRyYW5zbGF0ZUxvY2F0aW9uKG5ldyBQb2ludChsLngsIGwueSkpKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFBvaW50IHRyYW5zbGF0ZUxvY2F0aW9uKFBvaW50IG1vdXNlTG9jYXRpb24pIHsKLQkJRmlndXJlQ2FudmFzIGNhbnZhcyA9IChGaWd1cmVDYW52YXMpZ2V0Q3VycmVudFZpZXdlcigpLmdldENvbnRyb2woKTsKLQkJUG9pbnQgdmlld0xvY2F0aW9uID0gY2FudmFzLmdldFZpZXdwb3J0KCkuZ2V0Vmlld0xvY2F0aW9uKCk7Ci0JCXJldHVybiBuZXcgUG9pbnQobW91c2VMb2NhdGlvbi54ICsgdmlld0xvY2F0aW9uLngsbW91c2VMb2NhdGlvbi55ICsgdmlld0xvY2F0aW9uLnkpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZUtleVVwKEtleUV2ZW50IGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdXBlci5oYW5kbGVLZXlVcChlKTsKLQkJCi0JCUVkaXRQYXJ0Vmlld2VyIGN1cnJlbnRWaWV3ZXIgPSBnZXRDdXJyZW50Vmlld2VyKCk7Ci0JCWlmKChlLmtleUNvZGUgPT0gU1dULkNSIHx8IGUua2V5Q29kZSA9PSBTV1QuS0VZUEFEX0NSKSAmJiBjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKLQkJCUVkaXRQYXJ0IGVkaXRQYXJ0ID0gY3VycmVudFZpZXdlci5nZXRGb2N1c0VkaXRQYXJ0KCk7Ci0JCQlpZiAoZWRpdFBhcnQgPT0gbnVsbCkKLQkJCXsKLQkJCSAgcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCQotCQkJU2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFNlbGVjdGlvblJlcXVlc3QoKTsKLQkJCXJlcXVlc3Quc2V0TG9jYXRpb24oZ2V0TG9jYXRpb24oKSk7Ci0JCQlyZXF1ZXN0LnNldFR5cGUoUmVxdWVzdENvbnN0YW50cy5SRVFfT1BFTik7Ci0JCQllZGl0UGFydC5wZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxDZWxsRWRpdG9yTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTE2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5DZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExhYmVsQ2VsbEVkaXRvckxvY2F0b3IgaW1wbGVtZW50cyBDZWxsRWRpdG9yTG9jYXRvciB7Ci0JcHJpdmF0ZSBJTmFtZWRFZGl0UGFydCBuYW1lZEVkaXRQYXJ0OwotCXByaXZhdGUgUG9pbnQgY3Vyc29yTG9jYXRpb247Ci0KLQlwdWJsaWMgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcihJTmFtZWRFZGl0UGFydCBuYW1lZEVkaXRQYXJ0LCBQb2ludCBjdXJzb3JMb2NhdGlvbikgewotCQl0aGlzLm5hbWVkRWRpdFBhcnQgPSBuYW1lZEVkaXRQYXJ0OwotCQl0aGlzLmN1cnNvckxvY2F0aW9uID0gY3Vyc29yTG9jYXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlbG9jYXRlKENlbGxFZGl0b3IgY2VsbGVkaXRvcikgewotCQlUZXh0IHRleHQgPSAoVGV4dCljZWxsZWRpdG9yLmdldENvbnRyb2woKTsKLQkJaWYgKHRleHQuZ2V0Qm91bmRzKCkueCA8PSAwICYmIG5hbWVkRWRpdFBhcnQuZ2V0TGFiZWxGaWd1cmUoKSAhPSBudWxsKSB7Ci0JCQlMYWJlbCBsYWJlbCA9IG5hbWVkRWRpdFBhcnQuZ2V0TGFiZWxGaWd1cmUoKTsKLQkJCVJlY3RhbmdsZSBib3VuZGluZ1JlY3QgPSBsYWJlbC5nZXRUZXh0Qm91bmRzKCk7Ci0KLQkJCS8vIFJlZHVjZSB0aGUgd2lkdGggYnkgdGhlIGFtb3VudCB3ZSBzaGlmdGVkIGFsb25nIHRoZSB4LWF4aXMKLQkJCWludCBkZWx0YSA9IE1hdGguYWJzKGJvdW5kaW5nUmVjdC54IC0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkueCk7Ci0vLwkJCWJvdW5kaW5nUmVjdC53aWR0aCA9IHRhYmxlQ2VsbEZpZ3VyZS5nZXRQcmVmZXJyZWRTaXplKCkud2lkdGggLSBkZWx0YTsKLQkJCQotCQkJbGFiZWwuZ2V0UGFyZW50KCkudHJhbnNsYXRlVG9BYnNvbHV0ZShib3VuZGluZ1JlY3QpOwotCQkJb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSB0cmltID0gdGV4dC5jb21wdXRlVHJpbSgwLCAwLCAwLCAwKTsKLQkJCWJvdW5kaW5nUmVjdC50cmFuc2xhdGUodHJpbS54LCB0cmltLnkpOwotLy8JCQlib3VuZGluZ1JlY3Qud2lkdGggPSBib3VuZGluZ1JlY3Qud2lkdGggLSB0cmltLng7Ci0JCQlib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYm91bmRpbmdSZWN0LmhlaWdodCAtIHRyaW0ueTsKLQkJCQotCQkJYm91bmRpbmdSZWN0LndpZHRoID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLSBkZWx0YTsKLQkJCXRleHQuc2V0Qm91bmRzKGJvdW5kaW5nUmVjdC54LCBib3VuZGluZ1JlY3QueSwgYm91bmRpbmdSZWN0LndpZHRoLCBib3VuZGluZ1JlY3QuaGVpZ2h0KTsKLQkJCQotCQkJaWYgKGN1cnNvckxvY2F0aW9uICE9IG51bGwpIHsKLQkJCQkvLyBUcmFuc2xhdGUgcG9pbnQKLQkJCQlQb2ludCB0cmFuc2xhdGVkUG9pbnQgPSBuZXcgUG9pbnQoY3Vyc29yTG9jYXRpb24ueCAtIGJvdW5kaW5nUmVjdC54LGN1cnNvckxvY2F0aW9uLnkgLSBib3VuZGluZ1JlY3QueSk7Ci0KLQkJCQkvLyBDYWxjdWxhdGUgdGV4dCBvZmZzZXQgY29ycmVzcG9uZGluZyB0byB0aGUgdHJhbnNsYXRlZCBwb2ludAotCQkJCXRleHQuc2V0U2VsZWN0aW9uKDAsIDApOwotCQkJCWludCB4Q2FyZXQgPSB0ZXh0LmdldENhcmV0TG9jYXRpb24oKS54OwotCQkJCWludCBvZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24oKTsKLQkJCQl3aGlsZSAoeENhcmV0IDwgdHJhbnNsYXRlZFBvaW50LngpIHsKLQkJCQkJdGV4dC5zZXRTZWxlY3Rpb24ob2Zmc2V0ICsgMSwgb2Zmc2V0ICsgMSk7CQkJCi0JCQkJCXhDYXJldCA9IHRleHQuZ2V0Q2FyZXRMb2NhdGlvbigpLng7Ci0JCQkJCWludCBuZXdPZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24oKTsKLQkJCQkJaWYgKG5ld09mZnNldCA9PSBvZmZzZXQpIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCW9mZnNldCsrOwotCQkJCX0KLQkJCQl0ZXh0LnNldFNlbGVjdGlvbihvZmZzZXQsIG9mZnNldCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0xhYmVsRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTI3NzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkNlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UZXh0Q2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuQ2VsbEVkaXRvckFjdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExhYmVsRWRpdE1hbmFnZXIgZXh0ZW5kcyBEaXJlY3RFZGl0TWFuYWdlciB7Ci0KLQlwcml2YXRlIElBY3Rpb25CYXJzIGFjdGlvbkJhcnM7Ci0JcHJpdmF0ZSBDZWxsRWRpdG9yQWN0aW9uSGFuZGxlciBhY3Rpb25IYW5kbGVyOwotCXByaXZhdGUgSUFjdGlvbiBjb3B5LCBjdXQsIHBhc3RlLCB1bmRvLCByZWRvLCBmaW5kLCBzZWxlY3RBbGwsIGRlbGV0ZTsKLQlwcml2YXRlIEZvbnQgc2NhbGVkRm9udDsKLQotCXB1YmxpYyBMYWJlbEVkaXRNYW5hZ2VyKEdyYXBoaWNhbEVkaXRQYXJ0IHNvdXJjZSwgQ2VsbEVkaXRvckxvY2F0b3IgbG9jYXRvcikgewotCQlzdXBlcihzb3VyY2UsIG51bGwsIGxvY2F0b3IpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyI2JyaW5nRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgYnJpbmdEb3duKCkgewotCQlpZiAoYWN0aW9uSGFuZGxlciAhPSBudWxsKSB7Ci0JCQlhY3Rpb25IYW5kbGVyLmRpc3Bvc2UoKTsKLQkJCWFjdGlvbkhhbmRsZXIgPSBudWxsOwotCQl9Ci0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCXJlc3RvcmVTYXZlZEFjdGlvbnMoYWN0aW9uQmFycyk7Ci0JCQlhY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLQkJCWFjdGlvbkJhcnMgPSBudWxsOwotCQl9Ci0KLQkJRm9udCBkaXNwb3NlRm9udCA9IHNjYWxlZEZvbnQ7Ci0JCXNjYWxlZEZvbnQgPSBudWxsOwotCQlzdXBlci5icmluZ0Rvd24oKTsKLQkJaWYgKGRpc3Bvc2VGb250ICE9IG51bGwpCi0JCQlkaXNwb3NlRm9udC5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNob3dGZWVkYmFjaygpIHsKLQkJZ2V0RWRpdFBhcnQoKS5zaG93U291cmNlRmVlZGJhY2soZ2V0RGlyZWN0RWRpdFJlcXVlc3QoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKLQkJcmV0dXJuIG5ldyBUZXh0Q2VsbEVkaXRvcihjb21wb3NpdGUsIFNXVC5TSU5HTEUgfCBTV1QuV1JBUCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaW5pdENlbGxFZGl0b3IoKSB7Ci0JCVRleHQgdGV4dCA9IChUZXh0KWdldENlbGxFZGl0b3IoKS5nZXRDb250cm9sKCk7Ci0JCUxhYmVsIGxhYmVsID0gKChJTmFtZWRFZGl0UGFydCkgZ2V0RWRpdFBhcnQoKSkuZ2V0TGFiZWxGaWd1cmUoKTsKLQkJCi0JCWlmIChsYWJlbCAhPSBudWxsKSB7Ci0JCQlzY2FsZWRGb250ID0gbGFiZWwuZ2V0Rm9udCgpOwotCQkJCi0JCQkvLyBUT0RPOiBybWFoOiAgaGFjayBoZXJlIHRvIHNldCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUKLQkJCS8vIGRpcmVjdCBlZGl0IFRleHQuICBTb2x1dGlvbiBpcyB0byBtYWtlIHRoZSBUZXh0IHRyYW5zcGFyZW50Li4uCi0JCQlDb2xvciBjb2xvciA9IGxhYmVsLmdldEJhY2tncm91bmRDb2xvcigpOwotCQkJaWYgKGNvbG9yLmVxdWFscyhEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpKSB7Ci0JCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQkJCX0KLQkJCWVsc2UgewotLy8JCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKENvbG9yQ29uc3RhbnRzLmxpZ2h0Qmx1ZSk7Ci0JCQkgICAgdGV4dC5zZXRCYWNrZ3JvdW5kKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0QmFja2dyb3VuZENvbG9yKTsKLQkJCX0KLQkJCQotCQkJU3RyaW5nIGluaXRpYWxMYWJlbFRleHQgPSBsYWJlbC5nZXRUZXh0KCk7Ci0JCQlnZXRDZWxsRWRpdG9yKCkuc2V0VmFsdWUoaW5pdGlhbExhYmVsVGV4dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzY2FsZWRGb250ID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Rm9udCgpOwotCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKGxhYmVsLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLQkJfQotCQkKLQkJRm9udERhdGEgZGF0YSA9IHNjYWxlZEZvbnQuZ2V0Rm9udERhdGEoKVswXTsKLQkJRGltZW5zaW9uIGZvbnRTaXplID0gbmV3IERpbWVuc2lvbigwLCBkYXRhLmdldEhlaWdodCgpKTsKLQkJbGFiZWwuZ2V0UGFyZW50KCkudHJhbnNsYXRlVG9BYnNvbHV0ZShmb250U2l6ZSk7Ci0JCWRhdGEuc2V0SGVpZ2h0KGZvbnRTaXplLmhlaWdodCk7Ci0JCXNjYWxlZEZvbnQgPSBuZXcgRm9udChudWxsLCBkYXRhKTsKLQkJCi0JCXRleHQuc2V0Rm9udChzY2FsZWRGb250KTsKLS8vCQl0ZXh0LnNlbGVjdEFsbCgpOwotCi0JCS8vIEhvb2sgdGhlIGNlbGwgZWRpdG9yJ3MgY29weS9wYXN0ZSBhY3Rpb25zIHRvIHRoZSBhY3Rpb25CYXJzIHNvIHRoYXQgdGhleSBjYW4KLQkJLy8gYmUgaW52b2tlZCB2aWEga2V5Ym9hcmQgc2hvcnRjdXRzLgotCQlhY3Rpb25CYXJzID0gQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJzKCk7Ci0JCXNhdmVDdXJyZW50QWN0aW9ucyhhY3Rpb25CYXJzKTsKLQkJYWN0aW9uSGFuZGxlciA9IG5ldyBDZWxsRWRpdG9yQWN0aW9uSGFuZGxlcihhY3Rpb25CYXJzKTsKLQkJYWN0aW9uSGFuZGxlci5hZGRDZWxsRWRpdG9yKGdldENlbGxFZGl0b3IoKSk7Ci0JCWFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXN0b3JlU2F2ZWRBY3Rpb25zKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpewotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DT1BZLmdldElkKCksIGNvcHkpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5QQVNURS5nZXRJZCgpLCBwYXN0ZSk7Ci0JCWFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkRFTEVURS5nZXRJZCgpLCBkZWxldGUpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmdldElkKCksIHNlbGVjdEFsbCk7Ci0JCWFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkNVVC5nZXRJZCgpLCBjdXQpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5GSU5ELmdldElkKCksIGZpbmQpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5VTkRPLmdldElkKCksIHVuZG8pOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5SRURPLmdldElkKCksIHJlZG8pOwotCX0KLQotCXByaXZhdGUgdm9pZCBzYXZlQ3VycmVudEFjdGlvbnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQljb3B5ID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuQ09QWS5nZXRJZCgpKTsKLQkJcGFzdGUgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5QQVNURS5nZXRJZCgpKTsKLQkJZGVsZXRlID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuREVMRVRFLmdldElkKCkpOwotCQlzZWxlY3RBbGwgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmdldElkKCkpOwotCQljdXQgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DVVQuZ2V0SWQoKSk7Ci0JCWZpbmQgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5GSU5ELmdldElkKCkpOwotCQl1bmRvID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuVU5ETy5nZXRJZCgpKTsKLQkJcmVkbyA9IGFjdGlvbkJhcnMuZ2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LlJFRE8uZ2V0SWQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZmE5OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJUeXBlRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBleHRlbmRzIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIKLXsKLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBJUGFyYW1ldGVyIHNldE9iamVjdDsKLSAgCi0gIHB1YmxpYyBUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIoSVBhcmFtZXRlciBwYXJhbWV0ZXIsIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgc291cmNlLCBMYWJlbCBsYWJlbCkKLSAgewotICAgIHN1cGVyKHNvdXJjZSwgbGFiZWwpOwotICAgIGVkaXRQYXJ0ID0gc291cmNlOwotICAgIHNldE9iamVjdCA9IHBhcmFtZXRlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpCi0gIHsKLQkgIHJldHVybiBzdXBlci5jcmVhdGVDZWxsRWRpdG9yT24oY29tcG9zaXRlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGNvbXB1dGVDb21ib0NvbnRlbnQoKQotICB7Ci0JICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCSAgICBpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkgICAgewotCSAgICAgICBsaXN0LmFkZChNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRSk7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgbGlzdC5hZGQoTWVzc2FnZXMuX1VJX0JVVFRPTl9ORVcpOyAvLyROT04tTkxTLTEkCi0JICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCSAgICAgICBpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkgICAgICAgICB7Ci0JICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCSAgICAgICAgICAgbGlzdC5hZGQoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpOwotCSAgICAgICAgIH0gIAotCSAgICAgICB9Ci0JICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCSAgICAgICBpZiAoaGlzdG9yeSAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkgICAgICAgICB7Ci0JICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCSAgICAgICAgICAgbGlzdC5hZGQoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpOwotCSAgICAgICAgIH0gIAotCSAgICAgICB9Ci0JICAgIH0gCi0JICAgIHJldHVybiBsaXN0OyAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1Nb2RpZnkoT2JqZWN0IHZhbHVlKQotICB7Ci0JICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkgICAgaWYgKGVkaXRNYW5hZ2VyID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZXR1cm47Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vIG91ciBjcnVkZSBjb21ibyBib3ggY2FuIG9ubHkgd29yayB3aXRoICdTdHJpbmcnIG9iamVjdHMKLQkgICAgLy8gaWYgd2UgZ2V0IGEgU3RyaW5nIGJhY2sgd2UgbmVlZCB0byBkbyBzb21lIGNsZXZlciBtYXBwaW5nIHRvIGdldCB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiAKLQkgICAgLy8gICAgCi0JICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKLQkgICAgewotCSAgICAgIHZhbHVlID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOyAgICAgCi0JICAgIH0gIAotCSAgICAvLyB3ZSBhc3N1bWUgdGhlIHNlbGVjdGVkIHZhbHVlIGlzIGFsd2F5cyBvZiB0aGUgZm9ybSBvZiBhIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQkgICAgLy8gCi0JICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pICAgICAgCi0JICAgIHsKLQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShnZXRFZGl0UGFydCgpLmdldE1vZGVsKCksIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB2YWx1ZSk7Ci0JICAgIH0KLSAgfSAKLQotICBwcm90ZWN0ZWQgTGlzdCBjb21wdXRlU29ydGVkTGlzdChMaXN0IGxpc3QpCi0gIHsKLS8vICAgIHJldHVybiBUeXBlc0hlbHBlci5zb3J0TGlzdChsaXN0KTsKLQkgIHJldHVybiBsaXN0OwotICB9Ci0gIAotICBwcml2YXRlIGludCBnZXRUZXh0SW5kZW50KCkgewotCSAgaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSB7Ci0JCSAgUmVjdGFuZ2xlIGJvdW5kcyA9ICgoUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSBlZGl0UGFydCkuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCk7Ci0JCSAgaW50IHRleHRYID0gKChQYXJhbWV0ZXJUeXBlRWRpdFBhcnQpIGVkaXRQYXJ0KS5nZXRMYWJlbEZpZ3VyZSgpLmdldFRleHRCb3VuZHMoKS54OyAKLQkJICByZXR1cm4gdGV4dFggLSBib3VuZHMueDsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIDU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBDZWxsRWRpdG9yIGNyZWF0ZUNlbGxFZGl0b3IoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgU3RyaW5nW10gc3RyaW5nQXJyYXkpCi0gIHsKLSAgICBBU0RDb21ib0JveENlbGxFZGl0b3IgY2VsbEVkaXRvciA9IG5ldyBBU0RDb21ib0JveENlbGxFZGl0b3IoY29tcG9zaXRlLCBzdHJpbmdBcnJheSwgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSk7Ci0gICAgY2VsbEVkaXRvci5zZXRUZXh0SW5kZW50KGdldFRleHRJbmRlbnQoKSk7Ci0gICAgLy8oKEFEVENvbWJvQm94Q2VsbEVkaXRvcikgY2VsbEVkaXRvcikuc2V0T2JqZWN0VG9Nb2RpZnkoc2V0T2JqZWN0KTsKLSAgICAKLSAgICByZXR1cm4gY2VsbEVkaXRvcjsKLSAgfQotCi0JcHVibGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IG51bGw7Ci0JCWJvb2xlYW4gaXNUeXBlID0gdHJ1ZTsKLQkJCi0JCS8vIFRPRE86IFdlJ3JlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbmQgdXNpbmcgV1NETDExIEltcGwgY2xhc3Nlcy4uLi4gV2Ugc2hvdWxkCi0JCS8vIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gc2VlIGlmIHdlIGNhbiBhdm9pZCBrbm93aW5nIGFib3V0IFdTREwxMSBJbXBsIGNsYXNzZXMuCi0JCWlmIChzZXRPYmplY3QgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlpc1R5cGUgPSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIHNldE9iamVjdCkuaXNUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmIChpc1R5cGUpIHsgCi0JCQllZGl0TWFuYWdlciA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHNldE9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQllZGl0TWFuYWdlciA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKHNldE9iamVjdCk7Ci0JCX0KLQotCQlyZXR1cm4gZWRpdE1hbmFnZXI7IAotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiBUaGlzIGNvZGUgc2hvdWxkIGxpdmUgaW4gYSBjb21tb24gcGxhY2UuLi4uLiBUaGlzIGNvZGUgaXMgYWxzbyB1c2VkIGluIG90aGVyIFVJIHNjZW5hcmlvcyB3aGVuCi0JLy8gYSBzaW1pbGFyIGNvbWJvIGJveCBpcyB1c2VkLiAgRm9yIGV4YW1wbGUgaW4gdGhlIHByb3BlcnRpZXMuLi4oUGFyYW1ldGVyU2VjdGlvbikgIEFsc28gdXNlZCBpbiB0aGUgWFNERWRpdG9yLi4uCi0JcHJvdGVjdGVkIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKFN0cmluZyB2YWx1ZSkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpCi0JCXsgIAotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHF1aWNrUGlja3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IHF1aWNrUGlja3MubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0gICAgICAgICAgICAgICAgCi0JCQkJfSAgCi0JCQl9Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkJCWlmIChoaXN0b3J5ICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IGhpc3RvcnlbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7ICAKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9Ci0JCQkJfSAgCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTREVkaXRQYXJ0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTREVkaXRQYXJ0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjY2YjkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BU0RFZGl0UGFydEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0UGFydEZhY3RvcnkgaW1wbGVtZW50cyBFZGl0UGFydEZhY3RvcnkKLXsKLSAgcHVibGljIEVkaXRQYXJ0IGNyZWF0ZUVkaXRQYXJ0KEVkaXRQYXJ0IGNvbnRleHQsIE9iamVjdCBtb2RlbCkKLSAgewotICAgIEVkaXRQYXJ0IGNoaWxkID0gbnVsbDsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgRGVmaW5pdGlvbnNFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKQotICAgIHsKLSAgICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pbW9kZWw7Ci0gICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW4pCi0gICAgICB7Ci0gICAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdDb2x1bW5FZGl0UGFydCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgCi0gICAgICAgIGNoaWxkID0gbmV3IENvbHVtbkVkaXRQYXJ0KCk7Ci0gICAgICB9ICAKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRW5kUG9pbnQpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgRW5kUG9pbnRFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElTZXJ2aWNlKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IFNlcnZpY2VFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nT3BlcmF0aW9uIHx8Ci0gICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UgfHwKLSAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgQmluZGluZ0NvbnRlbnRFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElJbnRlcmZhY2UpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgSW50ZXJmYWNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBNZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IE9wZXJhdGlvbkVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBjb250ZXh0IGluc3RhbmNlb2YgUGFyYW1ldGVyRWRpdFBhcnQpIHsKLSAgICAJY2hpbGQgPSBuZXcgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBjb250ZXh0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0KQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IFBhcmFtZXRlckVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGlmIChjaGlsZCA9PSBudWxsKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5Db3VsZCBub3QgY3JlYXRlIGVkaXRwYXJ0IGZvciBtb2RlbDogIiArIG1vZGVsKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVGhyZWFkLmR1bXBTdGFjaygpOwotICAgIH0KLSAgICBBc3NlcnQuaXNOb3ROdWxsKGNoaWxkKTsKLSAgICBjaGlsZC5zZXRNb2RlbChtb2RlbCk7Ci0gICAgcmV0dXJuIGNoaWxkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNEUm9vdEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNEUm9vdEVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOTQzYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTRFJvb3RFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkJlbmRwb2ludENvbm5lY3Rpb25Sb3V0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25MYXllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5TY2FsYWJsZVJvb3RFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIEFTRFJvb3RFZGl0UGFydCBleHRlbmRzIFNjYWxhYmxlUm9vdEVkaXRQYXJ0IGltcGxlbWVudHMgb3JnLmVjbGlwc2UuZ2VmLlJvb3RFZGl0UGFydAoteyAgCi0gIHB1YmxpYyB2b2lkIGFjdGl2YXRlKCkKLSAgewotICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgLy8gU2V0IHVwIENvbm5lY3Rpb24gbGF5ZXIgd2l0aCBhIHJvdXRlciwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGhhdmUgb25lCi0gICAgQ29ubmVjdGlvbkxheWVyIGNvbm5lY3Rpb25MYXllciA9IChDb25uZWN0aW9uTGF5ZXIpIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpOwotICAgIGlmIChjb25uZWN0aW9uTGF5ZXIgIT0gbnVsbCkKLSAgICB7ICAKLS8vICAgICAgY29ubmVjdGlvbkxheWVyLnNldENvbm5lY3Rpb25Sb3V0ZXIobmV3IE1hbmhhdHRhbkNvbm5lY3Rpb25Sb3V0ZXIoKSk7Ci0gICAgICBjb25uZWN0aW9uTGF5ZXIuc2V0Q29ubmVjdGlvblJvdXRlcihuZXcgQmVuZHBvaW50Q29ubmVjdGlvblJvdXRlcigpKTsKLSAgICB9Ci0gICAgcmVmcmVzaCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQWJzdHJhY3RCb3h0RWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BYnN0cmFjdEJveHRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1YjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BYnN0cmFjdEJveHRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGluZUJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJveENvbXBvbmVudEZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQ29sdW1uRGF0YTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Qm94dEVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSU5hbWVkRWRpdFBhcnQKLXsKLSAgcHJvdGVjdGVkIENvbHVtbkRhdGEgY29sdW1uRGF0YSA9IG5ldyBDb2x1bW5EYXRhKCk7Ci0gIHByb3RlY3RlZCBCb3hDb21wb25lbnRGaWd1cmUgZmlndXJlOwotICAKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIGZpZ3VyZSA9IG5ldyBCb3hDb21wb25lbnRGaWd1cmUoKTsKLSAgICBmaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDEpKTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCgpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICAvLyB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQk9UVE9NUklHSFQpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIC8vIGlmKGlzU2Nyb2xsYWJsZSgpKQotICAgIC8vIGZpZ3VyZS5zZXRTY3JvbGxpbmdBY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotCi0gIHByaXZhdGUgRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlcjsKLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKXsKLQkgIGlmICghaXNGaWxlUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCAgaGl0VGVzdEZpZ3VyZShmaWd1cmUuZ2V0SGVhZGluZ0ZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgIWlzUmVhZE9ubHkoKSkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmICgoaGl0VGVzdChmaWd1cmUuZ2V0TGFiZWwoKSwgY3Vyc29yTG9jYXRpb24pIHx8Ci0gICAgICAgIGhpdFRlc3RGaWd1cmUoZmlndXJlLmdldEhlYWRpbmdGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pKSAmJiBpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGRvT3Blbk5ld0VkaXRvcigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJICBQb2ludCBsb2NhdGlvbiA9IG51bGw7Ci0JCSAgaWYgKHJlcSBpbnN0YW5jZW9mIERpcmVjdEVkaXRSZXF1ZXN0KSB7Ci0JCQkgIGxvY2F0aW9uID0gKChEaXJlY3RFZGl0UmVxdWVzdCkgcmVxKS5nZXRMb2NhdGlvbigpOwkJCSAgCi0JCSAgfQotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KGxvY2F0aW9uKTsKLQkgIH0KLSAgfQotICAKLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkgewotCSAgcmV0dXJuIGZpZ3VyZS5nZXRMYWJlbCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaENoaWxkcmVuKCkKLSAgewotICAgIHN1cGVyLnJlZnJlc2hDaGlsZHJlbigpOwotICAgIC8vIGdldEZpZ3VyZSgpLmludmFsaWRhdGVUcmVlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICAgIFdTRExCYXNlQWRhcHRlciBib3ggPSAoV1NETEJhc2VBZGFwdGVyKSBnZXRNb2RlbCgpOwotICAgIGZpZ3VyZS5oZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoYm94LmlzUmVhZE9ubHkoKSk7Ci0gICAgZmlndXJlLmdldExhYmVsKCkuc2V0VGV4dChib3guZ2V0TmFtZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMik7Ci0vLwkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMuZGFya0JsdWUpOwotCSAgZmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLQkgIGZpZ3VyZS5zZXRTZWxlY3RlZChmYWxzZSk7Ci0JICBmaWd1cmUucmVwYWludCgpOwotICB9Ci0KLSAgcHVibGljIENvbHVtbkRhdGEgZ2V0Q29sdW1uRGF0YSgpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGF0YTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VDb25uZWN0ZWRFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VDb25uZWN0ZWRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTE3OWNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CYXNlQ29ubmVjdGVkRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uOwotCi1hYnN0cmFjdCBwdWJsaWMgY2xhc3MgQmFzZUNvbm5lY3RlZEVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0Ci17Ci0gIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNvbm5lY3Rpb25GaWd1cmU7Ci0gIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZTsKLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKTsKLQotICBwdWJsaWMgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjcmVhdGVDb25uZWN0aW9uRmlndXJlKCkKLSAgewotICAgIGlmIChjb25uZWN0aW9uRmlndXJlID09IG51bGwgJiYgc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCk7Ci0gICAgICBpZiAocmVmZXJlbmNlVHlwZVBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZSA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKCk7Ci0gICAgICAgIHJlZnJlc2hDb25uZWN0aW9ucygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY29ubmVjdGlvbkZpZ3VyZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3VsZERyYXdDb25uZWN0aW9uKCkKLSAgewotICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKTsKLSAgICByZXR1cm4gKHJlZmVyZW5jZVR5cGVQYXJ0ICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuYWN0aXZhdGUoKTsKLSAgICBhY3RpdmF0ZUNvbm5lY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuZGVhY3RpdmF0ZSgpOwotICAgIGRlYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgaWYgKGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBkZWFjdGl2YXRlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLnJlbW92ZShjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gICAgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKQotICB7Ci0gICAgLy8gcmVtb3ZlIGFueSBwcmVleGlzdGluZyBjb25uZWN0aW9uIGZlZWRiYWNrIGZpZ3VyZXMgZmlyc3QKLSAgICByZW1vdmVDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKLQotICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKCk7Ci0gICAgY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlLnNldFNvdXJjZUFuY2hvcihjb25uZWN0aW9uRmlndXJlLmdldFNvdXJjZUFuY2hvcigpKTsKLSAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUuc2V0VGFyZ2V0QW5jaG9yKGNvbm5lY3Rpb25GaWd1cmUuZ2V0VGFyZ2V0QW5jaG9yKCkpOwotICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZS5zZXRIaWdobGlnaHQodHJ1ZSk7Ci0gICAgZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpLmFkZChjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCkKLSAgewotICAgIGlmIChjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKS5yZW1vdmUoY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKTsKLSAgICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSA9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKQotICB7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCAmJiBjb25uZWN0aW9uRmlndXJlLmlzVmlzaWJsZSgpKQotICAgIHsKLSAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KHRydWUpOwotICAgICAgYWRkQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKQotICB7Ci0gICAgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWQ4ZDgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CYXNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkFjY2Vzc2libGVFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5kZXNpZ24uZWRpdHBvbGljaWVzLktleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3k7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlRWRpdFBhcnQgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGltcGxlbWVudHMgSUFjdGlvblByb3ZpZGVyLCBJQVNET2JqZWN0TGlzdGVuZXIsIElGZWVkYmFja0hhbmRsZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9BQ1RJT05fQVJSQVkgPSB7fTsKLSAgcHJvdGVjdGVkIEFjY2Vzc2libGVHcmFwaGljYWxFZGl0UGFydCBhY2Nlc3NpYmxlUGFydDsKLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElBY3Rpb25Qcm92aWRlcikKLSAgICB7Ci0gICAgICByZXR1cm4gKChJQWN0aW9uUHJvdmlkZXIpbW9kZWwpLmdldEFjdGlvbnMob2JqZWN0KTsKLSAgICB9ICAKLSAgICByZXR1cm4gRU1QVFlfQUNUSU9OX0FSUkFZOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zVG9MaXN0KExpc3QgbGlzdCwgU3RyaW5nW10gYWN0aW9ucykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZChhY3Rpb25zW2ldKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuYWN0aXZhdGUoKTsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOyAgICAKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKQotICB7Ci0gICAgT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgIH0gICAKLSAgICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJwcm9wZXJ0eUNoYW5nZWQgIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJlZnJlc2goKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaENvbm5lY3Rpb25zKCkgewotCSAgSXRlcmF0b3Iga2lkcyA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChraWRzLmhhc05leHQoKSkgewotCQkgIE9iamVjdCBpdGVtID0ga2lkcy5uZXh0KCk7Ci0JCSAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCYXNlRWRpdFBhcnQpIHsKLQkJCSAgKChCYXNlRWRpdFBhcnQpIGl0ZW0pLnJlZnJlc2hDb25uZWN0aW9ucygpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaXRUZXN0KFJlY3RhbmdsZSByZWN0YW5nbGUsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICByZXR1cm4gcmVjdGFuZ2xlLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGl0VGVzdChMYWJlbCB0YXJnZXQsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQkgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQotCSAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotCSAgaW50IG5ld1ggPSBvcmlnQi54ICsgTWF0aC5hYnModHJhbnNCLnggLSBvcmlnQi54KTsKLQkgIGludCBuZXdZID0gb3JpZ0IueSArIE1hdGguYWJzKHRyYW5zQi55IC0gb3JpZ0IueSk7CSAgCi0JICBSZWN0YW5nbGUgZmluYWxCID0gbmV3IFJlY3RhbmdsZShuZXdYLCBuZXdZLCBvcmlnQi53aWR0aCwgb3JpZ0IuaGVpZ2h0KTsKLQotCSAgcmV0dXJuIGZpbmFsQi5jb250YWlucyhsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGhpdFRlc3RGaWd1cmUoRmlndXJlIHRhcmdldCwgUG9pbnQgbG9jYXRpb24pIHsKLSAgICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotCi0gICAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotICAgIGludCBuZXdYID0gb3JpZ0IueCArIE1hdGguYWJzKHRyYW5zQi54IC0gb3JpZ0IueCk7Ci0gICAgaW50IG5ld1kgPSBvcmlnQi55ICsgTWF0aC5hYnModHJhbnNCLnkgLSBvcmlnQi55KTsgICAgCi0gICAgUmVjdGFuZ2xlIGZpbmFsQiA9IG5ldyBSZWN0YW5nbGUobmV3WCwgbmV3WSwgb3JpZ0Iud2lkdGgsIG9yaWdCLmhlaWdodCk7Ci0KLSAgICByZXR1cm4gZmluYWxCLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCSAgaWYgKG1vZGVsIGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkgIHJldHVybiAoKElBU0RPYmplY3QpIG1vZGVsKS5pc1JlYWRPbmx5KCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZG9PcGVuTmV3RWRpdG9yKCkKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IChBY3Rpb25SZWdpc3RyeSkgZWRpdG9yUGFydC5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgICBpZiAocmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQWN0aW9uIGFjdGlvbiA9IHJlZ2lzdHJ5LmdldEFjdGlvbihPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7ICAgICAgCi0gICAgS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeSBuYXZpZ2F0aW9uRWRpdFBvbGljeSA9IG5ldyBLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KCkKLSAgICB7ICAgICAgICAgICAKLSAgICAgIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEVkaXRQYXJ0IGVkaXRQYXJ0LCBpbnQgZGlyZWN0aW9uKQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIEJhc2VFZGl0UGFydC50aGlzLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsgICAgICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9OwotICAgIGluc3RhbGxFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZLCBuYXZpZ2F0aW9uRWRpdFBvbGljeSk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFJlbGF0aXZlRWRpdFBhcnQodGhpcywgZGlyZWN0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzRmlsZVJlYWRPbmx5KCkKLSAgewotICAgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICBpZiAod29ya2JlbmNoICE9IG51bGwpCi0gICAgewotICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICBpZiAod29ya2JlbmNoV2luZG93ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHBhaW50Rm9jdXNDdXJzb3IoUmVjdGFuZ2xlIHIsIEdyYXBoaWNzIGdyYXBoaWNzKQotICB7Ci0gICAgaWYgKGhhc0ZvY3VzKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGdyYXBoaWNzLnB1c2hTdGF0ZSgpOwotICAgICAgICBncmFwaGljcy5kcmF3Rm9jdXMoci54LCByLnkgKyAxLCByLndpZHRoIC0gMSwgci5oZWlnaHQgLSAyKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgZ3JhcGhpY3MucG9wU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgQWNjZXNzaWJsZUVkaXRQYXJ0IGdldEFjY2Vzc2libGVFZGl0UGFydCgpIHsKLQotCSAgaWYgKGFjY2Vzc2libGVQYXJ0ID09IG51bGwpCi0JICB7Ci0JCSAgYWNjZXNzaWJsZVBhcnQgPSBuZXcgQWNjZXNzaWJsZUdyYXBoaWNhbEVkaXRQYXJ0KCl7Ci0KLQkJCSAgcHVibGljIHZvaWQgZ2V0TmFtZShBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJCSAgZS5yZXN1bHQgPSBnZXRBY2Nlc3NpYmxlTmFtZSgpOwotCQkJICB9Ci0JCSAgfTsKLQkgIH0KLQkgIHJldHVybiBhY2Nlc3NpYmxlUGFydDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY2Nlc3NpYmxlTmFtZSgpIHsKLSAgICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb2x1bW5FZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb2x1bW5FZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmRkNzNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29sdW1uRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYXlvdXRBbmltYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLkJpbmRpbmdDb2x1bW5MYXlvdXQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29sdW1uRWRpdFBhcnQgZXh0ZW5kcyBDb2x1bW5FZGl0UGFydAotewotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICAvL2ZpZ3VyZS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgLy9maWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnllbGxvdyk7Ci0gICAgLy8gY3VzdG9tIGxheW91dCB0aGF0IGNhbiBkbyBhbmltYXRpb24KLSAgICAvLwotICAgIEJpbmRpbmdDb2x1bW5MYXlvdXQgbGF5b3V0ID0gbmV3IEJpbmRpbmdDb2x1bW5MYXlvdXQodGhpcyk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9ICAKLSAKLSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlcigpCi0gIHsKLSAgICBzdXBlci5yZWdpc3RlcigpOwotICAgIGdldEZpZ3VyZSgpLmFkZExheW91dExpc3RlbmVyKExheW91dEFuaW1hdG9yLmdldERlZmF1bHQoKSk7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCB1bnJlZ2lzdGVyKCkKLSAgewotICAgIGdldEZpZ3VyZSgpLnJlbW92ZUxheW91dExpc3RlbmVyKExheW91dEFuaW1hdG9yLmdldERlZmF1bHQoKSk7ICAgCi0gICAgc3VwZXIudW5yZWdpc3RlcigpOwotICB9Ci0gIAotICAvLyB0aGlzIG1ldGhvZCB3aWxsIGV4cGFuZCB0aGUgYmluZGluZyBlZGl0IHBhcnQKLSAgLy8gYW5kIGNvbGxhcHNlIGFueSBvdGhlciBiaW5kaW5ncyBhcyBhcHByb3ByaWF0ZQotICAvL3B1YmxpYyB2b2lkIGV4cGFuZChCaWRpbmdFZGl0UGFydCBiaW5kaW5nRWRpdFBhcnQpCi0gIC8veyAgICAKLSAgLy99Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoQmluZGluZ0VkaXRQYXJ0cygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRWRpdFBhcnQgZWRpdFBhcnQgPSAoRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICBlZGl0UGFydC5yZWZyZXNoKCk7ICAgICAgIAotICAgIH0KLSAgICBnZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOyAgICAgICAgICAgCi0gICAgZ2V0RmlndXJlKCkucmV2YWxpZGF0ZSgpOyAgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29udGVudEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0NvbnRlbnRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTJlODNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29udGVudEVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIEJpbmRpbmdPcGVyYXRpb24sIEJpbmRpbmdJbnB1dCwgQmluZGluZ091dHB1dCBhbmQgQmluZGluZ0ZhdWx0Ci0vLwotcHVibGljIGNsYXNzIEJpbmRpbmdDb250ZW50RWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQKLXsgIAotICBMYWJlbCBsYWJlbDsKLSAgcHJvdGVjdGVkIEFTRFNlbGVjdGlvbkVkaXRQb2xpY3kgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kgPSBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpOwotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKSB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKTsKLSAgICAgICAgLy8gYnVnMTQ2OTMyCi0gICAgICAgIHBhaW50Rm9jdXNDdXJzb3IobmV3IFJlY3RhbmdsZShyLngsIHIueSwgci53aWR0aCwgci5oZWlnaHQpLCBncmFwaGljcyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBmaWd1cmUuc2V0T3BhcXVlKHRydWUpOwotICAgIGZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMudG9vbHRpcEJhY2tncm91bmQpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KHRydWUpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLSAgICBsYWJlbCA9IG5ldyBMYWJlbCgpOwotICAgIGxhYmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDUsIDUsIDIsIDIpKTsKLSAgICBmaWd1cmUuYWRkKGxhYmVsKTsKLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLQkgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUJpbmRpbmdPcGVyYXRpb24pCi0JICB7ICAKLQkJICBJQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKElCaW5kaW5nT3BlcmF0aW9uKSBnZXRNb2RlbCgpOwotCi0JCSAgaWYgKGJpbmRpbmdPcGVyYXRpb24gaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCSAgbGFiZWwuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgYmluZGluZ09wZXJhdGlvbikuZ2V0SW1hZ2UoKSk7Ci0JCSAgfQotLy8JCSAgbGFiZWwuc2V0VGV4dChiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0JICB9Ci0JICBlbHNlIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKQotCSAgewotCQkgIGxhYmVsLnNldEljb24oV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLS8vCQkgIGxhYmVsLnNldEljb24obWVzc2FnZVJlZi5nZXRJbWFnZSgpKTsKLS8vCQkgIGxhYmVsLnNldFRleHQobWVzc2FnZVJlZi5nZXROYW1lKCkpOwotCSAgfQotCSAgZWxzZSBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpIHsKLQkJICBsYWJlbC5zZXRJY29uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZF9hc2N0X3ZhbF9ub3Rfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCi0JICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgICAKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKSB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgbGFiZWwuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLSAgfQotCi0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY2Nlc3NpYmxlTmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgYWNjZXNzaWJsZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KQotICAgIHsgIAotICAgICAgICBJTmFtZWRPYmplY3QgbmFtZWRPYmplY3QgPSAoSU5hbWVkT2JqZWN0KSBnZXRNb2RlbCgpOwotICAgICAgICBhY2Nlc3NpYmxlTmFtZSA9IG5hbWVkT2JqZWN0LmdldE5hbWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjY2Vzc2libGVOYW1lOwotICB9Ci0KLQotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKSB7Ci0JICBFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLQkgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEggJiYgKGVkaXRQYXJ0ID09IG51bGwgfHwgZWRpdFBhcnQgPT0gdGhpcykpCi0JICB7Ci0JCSAgZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0U2libGluZyhnZXRQYXJlbnQoKSk7ICAgICAgICAgICAKLQkgIH0gICAgICAgCi0JICByZXR1cm4gZWRpdFBhcnQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0VkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0VkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4N2M5MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxheW91dE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxpbmVCb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9ucy5DZW50ZXJlZENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQm94Q29tcG9uZW50RmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5CaW5kaW5nQ29sdW1uTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5CaW5kaW5nQ29udGVudExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQmluZGluZ0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdFZGl0UGFydCBleHRlbmRzIEJhc2VDb25uZWN0ZWRFZGl0UGFydAotewotICBwcm90ZWN0ZWQgQm94Q29tcG9uZW50RmlndXJlIGZpZ3VyZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFeHBhbmRlZCA9IGZhbHNlOwotICBwcml2YXRlIExhYmVsIGhvdmVySGVscExhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBmaWd1cmUgPSBuZXcgQm94Q29tcG9uZW50RmlndXJlKCk7Ci0gICAgZmlndXJlLmdldExhYmVsKCkuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMiwgMiwgMSwgMikpOwotICAgIGZpZ3VyZS5zZXRCb3JkZXIobmV3IExpbmVCb3JkZXIoMCkpOwotICAgIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpLnNldExheW91dE1hbmFnZXIobmV3IEJpbmRpbmdDb250ZW50TGF5b3V0KHRoaXMpKTsKLSAgICBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgZmlndXJlLmdldENvbnRlbnRQYW5lKCkuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnllbGxvdyk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobmV3IEJpbmRpbmdMYXlvdXQodGhpcykpOwotICAgIC8vIGlmKGlzU2Nyb2xsYWJsZSgpKQotICAgIC8vIGZpZ3VyZS5zZXRTY3JvbGxpbmdBY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOyAgCi0gICAgcmV0dXJuIGlzRXhwYW5kZWQgPyBiaW5kaW5nLmdldEJpbmRpbmdDb250ZW50TGlzdCgpIDogQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotICAgIExpbmVCb3JkZXIgYm94RmlndXJlTGluZUJvcmRlciA9IChMaW5lQm9yZGVyKSBmaWd1cmUuZ2V0Qm9yZGVyKCk7Ci0gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRXaWR0aCgyKTsKLS8vICAgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMuZGFya0JsdWUpOwotICAgIGZpZ3VyZS5zZXRTZWxlY3RlZCh0cnVlKTsKLSAgICBmaWd1cmUucmVwYWludCgpOwotICAgIAotICAgIHN1cGVyLmFkZEZlZWRiYWNrKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpCi0gIHsKLSAgICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotICAgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0gICAgZmlndXJlLnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICBmaWd1cmUucmVwYWludCgpOwotICAgIAotICAgIHN1cGVyLnJlbW92ZUZlZWRiYWNrKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGREcmF3Q29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoaXNFeHBhbmRlZCkKLSAgICB7ICAKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLnNob3VsZERyYXdDb25uZWN0aW9uKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgewotICAgIHJlZnJlc2hDb25uZWN0aW9ucygpOwotICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUJpbmRpbmcpCi0gICAgeyAgCi0gICAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotICAgICAgKChCb3hDb21wb25lbnRGaWd1cmUpIGdldEZpZ3VyZSgpKS5oZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoKChJQmluZGluZykgZ2V0TW9kZWwoKSkuaXNSZWFkT25seSgpKTsKLSAgICAgIAotICAgICAgaWYgKGJpbmRpbmcgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJICBmaWd1cmUuZ2V0TGFiZWwoKS5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBiaW5kaW5nKS5nZXRJbWFnZSgpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gU2hvdyB0aGUgbmFtZSBvZiB0aGUgSUJpbmRpbmcgd2l0aCBob3ZlciBoZWxwCi0gICAgICBTdHJpbmcgcHJlcGVuZFN0cmluZyA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HOwotICAgICAgaG92ZXJIZWxwTGFiZWwuc2V0VGV4dCgiICIgKyBwcmVwZW5kU3RyaW5nICsgIiA6ICIgKyBiaW5kaW5nLmdldE5hbWUoKSArICIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICBmaWd1cmUuc2V0VG9vbFRpcChob3ZlckhlbHBMYWJlbCk7Ci0gICAgfQotCi0gICAgLy9nZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkucHV0KExheS5jbGFzcywgY29udHJvbGxlcik7Ci0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGdldENvbm5lY3Rpb25UYXJnZXRFZGl0UGFydCgpCi0gIHsKLSAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlUGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hDb25uZWN0aW9ucygpCi0gIHsKLSAgICBpZiAoc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkKLSAgICB7Ci0gICAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCk7Ci0gICAgICAgIElGaWd1cmUgcmVmRmlndXJlPSByZWZlcmVuY2VUeXBlUGFydC5nZXRGaWd1cmUoKTsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRTb3VyY2VBbmNob3IobmV3IENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihnZXRGaWd1cmUoKSwgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLlJJR0hULCAwKSk7Ci0gICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VGFyZ2V0QW5jaG9yKG5ldyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IocmVmRmlndXJlLCBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuSEVBREVSX0xFRlQsIDAsIDExKSk7Ci0gICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKHRydWUpOwotCi0gICAgICAgIGlmIChjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUgIT0gbnVsbCkKLSAgICAgICAgICBhZGRDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmlndXJlLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsgICAgCi0gICAgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNFeHBhbmRlZCgpCi0gIHsKLSAgICByZXR1cm4gaXNFeHBhbmRlZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4cGFuZGVkKGJvb2xlYW4gaXNFeHBhbmRlZCkKLSAgewotICAgIHRoaXMuaXNFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxdWVzdCkKLSAgeyAgCi0gICAgaWYgKHJlcXVlc3QuZ2V0VHlwZSgpID09IFJlcXVlc3RDb25zdGFudHMuUkVRX09QRU4pCi0gICAgeyAgICAgICAgICAgICAgICAgICAgCi0gICAgICBMYXlvdXRNYW5hZ2VyIGxheW91dE1hbmFnZXIgPSBnZXRGaWd1cmUoKS5nZXRQYXJlbnQoKS5nZXRMYXlvdXRNYW5hZ2VyKCk7Ci0gICAgICBpZiAobGF5b3V0TWFuYWdlciBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW5MYXlvdXQpCi0gICAgICB7ICAgICAgICAgICAgIAotICAgICAgICBCaW5kaW5nQ29sdW1uTGF5b3V0IGJpbmRpbmdDb2x1bW5MYXlvdXQgPSAoQmluZGluZ0NvbHVtbkxheW91dClsYXlvdXRNYW5hZ2VyOwotICAgICAgICBiaW5kaW5nQ29sdW1uTGF5b3V0LnNldEV4cGFuZGVkKHRoaXMsICFpc0V4cGFuZGVkKTsKLSAgICAgICAgKChCaW5kaW5nQ29sdW1uRWRpdFBhcnQpZ2V0UGFyZW50KCkpLnJlZnJlc2hCaW5kaW5nRWRpdFBhcnRzKCk7Ci0gICAgICB9ICAKLSAgICB9Ci0gIH0gCi0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5FQVNUKQotICAgIHsKLSAgICAgIC8vIG5hdmlnYXRlIGZvcndhcmQgYWxvbmcgdGhlIGNvbm5lY3Rpb24gKHRvIHRoZSByaWdodCkKLSAgICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAJICAvLyBvciB0byB0aGUgZmlyc3QgdW5jb25uZWN0ZWQgaW50ZXJmYWNlCi0gICAgCSAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldEZpcnN0SW50ZXJmYWNlKHRoaXMpOwotICAgICAgfQotICAgIH0gIAotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIC8vIG5hdmlnYXRlIGJhY2t3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgbGVmdCkgb3IgdG8gdGhlIGZpcnN0IHVuY29ubmVjdGVkIHNlcnZpY2UKLSAgICAJRWRpdFBhcnQgY29ubmVjdGVkU2VydmljZSA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFNvdXJjZUNvbm5lY3Rpb25FZGl0UGFydCh0aGlzKTsKLSAgICAJaWYgKGNvbm5lY3RlZFNlcnZpY2UgIT0gbnVsbCkgewotICAgIAkJcmV0dXJuIGNvbm5lY3RlZFNlcnZpY2U7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCQlyZXR1cm4gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0Rmlyc3RTZXJ2aWNlKHRoaXMpOwotICAgIAl9Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5OT1JUSCkgewotICAgIAlyZXR1cm4gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0UHJldlNpYmxpbmcodGhpcyk7Ci0gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEggJiYgIWlzRXhwYW5kZWQoKSkgewotICAgIAlFZGl0UGFydCBuZXh0U2libGluZyA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRTaWJsaW5nKHRoaXMpOwotICAgIAlpZiAobmV4dFNpYmxpbmcgIT0gbnVsbCkgewotICAgIAkJcmV0dXJuIG5leHRTaWJsaW5nOwotICAgIAl9IGVsc2UgewotICAgIAkJcmV0dXJuIHRoaXM7IAotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjY2Vzc2libGVOYW1lKCkgewotICAgICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZylnZXRNb2RlbCgpOwotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gYmluZGluZyAhPSBudWxsICYmIGJpbmRpbmcuZ2V0TmFtZSgpICE9IG51bGwgPyBiaW5kaW5nLmdldE5hbWUoKSA6ICIiOyAvLyROT04tTkxTLTEkIAotCSAgcmV0dXJuIGJpbmRpbmdOYW1lOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0NvbHVtbkVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQ29sdW1uRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0YmYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQ29sdW1uRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQ29sdW1uRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQKLXsgICAKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgbGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXMoZmFsc2UpOwotICAgIGxheW91dC5zZXRTcGFjaW5nKDIwKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihsYXlvdXQpOwotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIChJRGVzY3JpcHRpb24pZ2V0TW9kZWwoKTsgICAKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0Jc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7IAotICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pZ2V0TW9kZWwoKTsKLSAgICBPYmplY3QgY2hpbGRyZW5bXSA9IGNvbGxlY3Rpb24uZ2V0Q2hpbGRyZW4oKTsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykgewotICAgIAlsaXN0LmFkZChjaGlsZHJlbltpbmRleF0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0RlZmluaXRpb25zRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9EZWZpbml0aW9uc0VkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTI0NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0RlZmluaXRpb25zRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGF5b3V0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5JbnRlcmZhY2VDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuU2VydmljZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIERlZmluaXRpb25zRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgewotCSAgTGlzdCBjb2xsZWN0aW9ucyA9IG51bGw7Ci0JICBGaWd1cmUgY29udGVudFBhbmU7Ci0gICAgICBMYWJlbCBtZXNzYWdlTGFiZWw7IAotICAgICAgSW50ZXJuYWxMYXlvdXRMaXN0ZW5lciBpbnRlcm5hbExheW91dExpc3RlbmVyID0gbmV3IEludGVybmFsTGF5b3V0TGlzdGVuZXIoKTsKLQkgIAotCSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLQkgIHsgICAgCi0JICAgIFBhbmVsIHBhbmVsID0gbmV3IFBhbmVsKCk7ICAgIAotICAgICAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKTsKLSAgICAgICAgcGFuZWwuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLSAgICAgICAgcGFuZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNjAsIDMwLCAzMCwgMzApKTsKLQkgICAgY29udGVudFBhbmUgPSBuZXcgRmlndXJlKCk7Ci0JICAgIHBhbmVsLmFkZChjb250ZW50UGFuZSk7Ci0KLSAgICAgICAgbWVzc2FnZUxhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBjb250ZW50UGFuZS5hZGQobWVzc2FnZUxhYmVsKTsKLSAgICAgIAotCSAgICBUb29sYmFyTGF5b3V0IGxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KHRydWUpOwotCSAgICBsYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLQkgICAgbGF5b3V0LnNldFNwYWNpbmcoMCk7Ci0JICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLQkgICAgcmV0dXJuIHBhbmVsOwotCSAgfQotCSAgCi0gICAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBoZXJlIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBiaW5kaW5nIGNvbHVtbiBpcyBsaXN0ZW5pbmcKLSAgICAgICAgLy8gdG8gdGhlIGludGVyZmFjZSBjb2x1bW4gc28gdGhhdCBpdCBjYW4gcmUtbGF5b3V0IHdoZW4gCi0gICAgICAgIC8vIHRoZSBpbnRlcmZhY2UgY2hhbmdlcwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNoaWxkID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGNoaWxkLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBJbnRlcmZhY2VDb2x1bW4pCi0gICAgICAgICAgewotICAgICAgICAgICAgY2hpbGQuZ2V0RmlndXJlKCkuYWRkTGF5b3V0TGlzdGVuZXIoaW50ZXJuYWxMYXlvdXRMaXN0ZW5lcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9ICAKLSAgICAgICAgfSAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICAgICAgICAgICAgCi0JICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQkgIHN1cGVyLnJlZnJlc2goKTsKLQkJICAKLQkJICAvLyBSZWZyZXNoIHRoZSBjb25uZWN0aW5nIGxpbmVzCi0JCSAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLQkgIHsKLQkgICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotCSAgfQotCSAgCi0KLQkgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0JICB7Ci0JICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICB9Ci0JICAKLSAgICAgIHB1YmxpYyB2b2lkIHNldE1vZGVsQ2hpbGRyZW4oTGlzdCBsaXN0KQotICAgICAgewotICAgICAgICBjb2xsZWN0aW9ucyA9IGxpc3Q7Ci0gICAgICB9Ci0gICAgICAKLQkgIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotCSAgeyAKLQkgICAgaWYgKGNvbGxlY3Rpb25zID09IG51bGwpCi0JICAgIHsKLQkgICAgICBjb2xsZWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgICAKLQkgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpOwotCSAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotCSAgICAgIHsgIAotCSAgICAgICAgY29sbGVjdGlvbnMuYWRkKG5ldyBTZXJ2aWNlQ29sdW1uKGRlc2NyaXB0aW9uKSk7Ci0JICAgICAgICBjb2xsZWN0aW9ucy5hZGQobmV3IEJpbmRpbmdDb2x1bW4oZGVzY3JpcHRpb24pKTsKLQkgICAgICAgIGNvbGxlY3Rpb25zLmFkZChuZXcgSW50ZXJmYWNlQ29sdW1uKGRlc2NyaXB0aW9uKSk7Ci0JICAgICAgfQotCSAgICB9Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gaGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGNvbGxlY3Rpb25zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbHVtbiA9IChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbilpLm5leHQoKTsKLSAgICAgICAgaWYgKGNvbHVtbi5oYXNDaGlsZHJlbigpKQotICAgICAgICB7Ci0gICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChoYXNDaGlsZHJlbikKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUxhYmVsLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmIChjb250ZW50UGFuZS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKG1lc3NhZ2VMYWJlbCkpCi0gICAgICAgICAgY29udGVudFBhbmUucmVtb3ZlKG1lc3NhZ2VMYWJlbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9SSUdIVF9DTElDS19UT19JTlNFUlRfQ09OVEVOVCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKCFjb250ZW50UGFuZS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKG1lc3NhZ2VMYWJlbCkpCi0gICAgICAgICAgY29udGVudFBhbmUuYWRkKG1lc3NhZ2VMYWJlbCk7Ci0gICAgICB9Ci0gICAgICAKLQotCSAgICByZXR1cm4gY29sbGVjdGlvbnM7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldElucHV0KE9iamVjdCBvYmplY3QpCi0JICB7ICAgIAotCSAgfQkgCi0gICAgICAKLSAgICAgIHByaXZhdGUgY2xhc3MgSW50ZXJuYWxMYXlvdXRMaXN0ZW5lciBleHRlbmRzIExheW91dExpc3RlbmVyLlN0dWIKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgcG9zdExheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgICAgICAgewotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFZGl0UGFydCBjaGlsZCA9IChFZGl0UGFydClpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW5FZGl0UGFydCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgKChCaW5kaW5nQ29sdW1uRWRpdFBhcnQpY2hpbGQpLnJlZnJlc2hCaW5kaW5nRWRpdFBhcnRzKCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgIH0gICAKLSAgICAgIH0gICAgICAgIAotCi0KLSAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWNjZXNzaWJsZU5hbWUoKQotICAgICAgewotICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpOwotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25OYW1lID0gZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBkZXNjcmlwdGlvbi5nZXROYW1lKCkgIT0gbnVsbCA/IGRlc2NyaXB0aW9uLmdldE5hbWUoKSA6ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbk5hbWU7Ci0gICAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjM1N2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkxheWVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5Sb290RWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuTGF5ZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkludGVyZmFjZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5TZXJ2aWNlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uOwotCi0KLWNsYXNzIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsCi17Ci0gIHN0YXRpYyBHcmFwaGljYWxFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEdyYXBoaWNhbEVkaXRQYXJ0IGZvY3VzRWRpdFBhcnQsIGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICAvLyB0aGVzZSAnZGVsdGEnIHZhbHVlcyBuZWVkIHRvIGJlIHNldCB0byBzb21lIHZhbHVlIHRoYXQncyBsYXJnZSBlbm91Z2ggdG8gY3Jvc3MgdGhlIGdhcAotICAgIC8vIGJldHdlZW4gYWRqYWNlbnQgZWRpdCBwYXJ0cyAoc2luY2Ugc29tZSBsYXlvdXRzIG1heSBzcGFjZSB0aGUgZWRpdCBwYXJ0cyBvdXQgYSBiaXQpCi0gICAgaW50IGR4ID0gNTsKLSAgICBpbnQgZHkgPSA1OwotICAgICAgICAKLSAgICBJRmlndXJlIGNvbnRlbnRQYW5lID0gZm9jdXNFZGl0UGFydC5nZXRDb250ZW50UGFuZSgpOwotICAgIAotICAgIC8vIHdlIGF0dGVtcHQgdG8gY29tcHV0ZSBhIHJlY3RhbmdsZSB0aGF0IHJlcHJlc2VudHMgb3VyIGN1cnJlbnQgbG9jYXRpb24KLSAgICBSZWN0YW5nbGUgciA9IGZvY3VzRWRpdFBhcnQuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIGZvY3VzRWRpdFBhcnQuZ2V0RmlndXJlKCkudHJhbnNsYXRlVG9BYnNvbHV0ZShyKTsKLSAgICBpZiAoY29udGVudFBhbmUgIT0gZm9jdXNFZGl0UGFydC5nZXRGaWd1cmUoKSkKLSAgICB7Ci0gICAgICAvLyBpZiB0aGUgRWRpdFBhcnQgaGFzIGEgY29udGVudFBhbmUgKHRoYXQncyBubyB0aGUgZmlndXJlKSB0aGVuIHdlIGFzc3VtZQotICAgICAgLy8gZWZmZWN0aXZlIHJlY3RhbmdsZSBpcyBvbmx5IHRoZSBoZWFkZXIgcG9ydGlvbiBvZiB0aGUgZmlndXJlCi0gICAgICAvLwotICAgICAgUmVjdGFuZ2xlIGNvbnRlbnRQYW5lQm91bmRzID0gY29udGVudFBhbmUuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgICAgY29udGVudFBhbmUudHJhbnNsYXRlVG9BYnNvbHV0ZShjb250ZW50UGFuZUJvdW5kcyk7Ci0gICAgICAKLSAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHdoZW4gdGhlIGVkaXRwYXJ0J3MgZmlndXJlIGFuZCBjb250ZW50UGFuZSBhcmUgZGlmZmVyZW50Ci0gICAgICAvLyB0aGF0IHBvcnRpb24gb2YgdGhlICdoaXR0YWJsZScgcG9ydGlvbiBvZiBlZGl0cGFydCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGNvbnRlbnRQYW5lCi0gICAgICBpZiAoY29udGVudFBhbmVCb3VuZHMueSA+IHIueSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgdGhlIGNvbnRlbnRQYW5lIGlzIGxvd2VyIHRoYW4gdGhlIGZpZ3VyZSB3ZSBvbmx5IHdhbnQgdGhlIHJlY3RhbmdsZQotICAgICAgICAvLyBhYm92ZSB0aGUgY29udGVudFBhbmUKLSAgICAgICAgci5oZWlnaHQgPSBjb250ZW50UGFuZUJvdW5kcy55IC0gci55OwotICAgICAgICAvLyB3ZSBhZGp1c3QgdGhlIHJlY3RhbmdsZSB0aGUgcmlnaHQgc2xpZ2h0bHkgc2luY2UgdGhlIGNvbnRlbnQgaXMgbmVzdGVkIGEgYml0ICAgICAKLSAgICAgICAgci54ID0gY29udGVudFBhbmVCb3VuZHMueDsKLSAgICAgIH0KLSAgICAgIGlmIChjb250ZW50UGFuZUJvdW5kcy54ID4gci54KQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgY29udGVudFBhbmUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmaWd1cmUgd2Ugb25seSB3YW50IHRoZSByZWN0YW5nbGUKLSAgICAgICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGNvbnRlbnQgcGFuZQotICAgICAgICByLndpZHRoID0gY29udGVudFBhbmVCb3VuZHMueCAtIHIueDsKLSAgICAgIH0KLSAgICB9Ci0gICAgUG9pbnQgcCA9IG51bGw7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5OT1JUSCkKLSAgICB7Ci0gICAgICBwID0gci5nZXRUb3BMZWZ0KCk7Ci0gICAgICBwLnkgLT0gZHk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCkKLSAgICB7Ci0gICAgICBwID0gci5nZXRCb3R0b21MZWZ0KCk7Ci0gICAgICBwLnggKz0gZHg7Ci0gICAgICBwLnkgKz0gZHk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5FQVNUKQotICAgIHsKLSAgICAgIHAgPSByLmdldFRvcFJpZ2h0KCk7Ci0gICAgICBwLnggKz0gZHg7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIHAgPSByLmdldExlZnQoKTsKLSAgICAgIHAueCAtPSBkeDsKLSAgICB9ICAKLSAgICBFZGl0UGFydCB0ID0gZm9jdXNFZGl0UGFydC5nZXRWaWV3ZXIoKS5maW5kT2JqZWN0QXQocCk7Ci0gICAgICAgIAotICAgIGlmICh0IGluc3RhbmNlb2YgQ29sdW1uRWRpdFBhcnQgfHwgdCBpbnN0YW5jZW9mIERlZmluaXRpb25zRWRpdFBhcnQpCi0gICAgewotICAgICAgdCA9IGZvY3VzRWRpdFBhcnQ7Ci0gICAgICB3aGlsZSAoKHQgaW5zdGFuY2VvZiBDb2x1bW5FZGl0UGFydCB8fCB0IGluc3RhbmNlb2YgRGVmaW5pdGlvbnNFZGl0UGFydCkgJiYgdC5nZXRDaGlsZHJlbigpLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgCSAgdCA9IChFZGl0UGFydCkgdC5nZXRDaGlsZHJlbigpLmdldCgwKTsKLSAgICAgIH0KLSAgICB9ICAgICAgCi0gICAgcmV0dXJuIChHcmFwaGljYWxFZGl0UGFydCl0OwotICB9Ci0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dFNpYmxpbmcoRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsgICAgCi0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsgICAgCi0gICAgRWRpdFBhcnQgcGFyZW50ID0gZWRpdFBhcnQuZ2V0UGFyZW50KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgICAgaW50IGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihlZGl0UGFydCk7Ci0gICAgICBpZiAoaW5kZXggKyAxIDwgY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoRWRpdFBhcnQpY2hpbGRyZW4uZ2V0KGluZGV4ICsgMSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHN0YXRpYyBFZGl0UGFydCBnZXRQcmV2U2libGluZyhFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAgICAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIEVkaXRQYXJ0IHBhcmVudCA9IGVkaXRQYXJ0LmdldFBhcmVudCgpOwotICAgIGlmIChwYXJlbnQgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIExpc3QgY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIGludCBpbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoZWRpdFBhcnQpOwotICAgICAgaWYgKGluZGV4IC0gMSA+PSAwKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGlsZAotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IChFZGl0UGFydCljaGlsZHJlbi5nZXQoaW5kZXggLSAxKTsKLSAgICAgIH0gCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gCi0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dEludGVyZmFjZShFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoRWRpdFBhcnQgZSA9IGVkaXRQYXJ0OyBlICE9IG51bGw7IGUgPSBlLmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7Ci0gICAgICAgIEludGVyZmFjZUVkaXRQYXJ0IGllID0gKEludGVyZmFjZUVkaXRQYXJ0KWU7Ci0gICAgICAgIHJlc3VsdCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRTaWJsaW5nKGllKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAKLSAgICB9ICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAgICAgIAotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldE5leHRTZXJ2aWNlKEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEVkaXRQYXJ0IGUgPSBlZGl0UGFydDsgZSAhPSBudWxsOyBlID0gZS5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcnZpY2VFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUVkaXRQYXJ0IGllID0gKFNlcnZpY2VFZGl0UGFydCllOwotICAgICAgICByZXN1bHQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0U2libGluZyhpZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgCi0gICAgfSAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldEZpcnN0QmluZGluZyhFZGl0UGFydCBlZGl0UGFydCkgCi0gIHsKLQkgIGlmIChlZGl0UGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgUm9vdEVkaXRQYXJ0IHJvb3RFZGl0UGFydCA9IGVkaXRQYXJ0LmdldFJvb3QoKTsKLQkgIGlmIChyb290RWRpdFBhcnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JICAKLQkgIExpc3Qgcm9vdEVkaXRQYXJ0Q2hpbGRyZW4gPSByb290RWRpdFBhcnQuZ2V0Q2hpbGRyZW4oKTsKLQkgIGlmIChyb290RWRpdFBhcnRDaGlsZHJlbiA9PSBudWxsIHx8IHJvb3RFZGl0UGFydENoaWxkcmVuLnNpemUoKSAhPSAxKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgT2JqZWN0IGRlZmluaXRpb25PYmplY3QgPSByb290RWRpdFBhcnRDaGlsZHJlbi5nZXQoMCk7Ci0JICBpZiAoISAoZGVmaW5pdGlvbk9iamVjdCBpbnN0YW5jZW9mIERlZmluaXRpb25zRWRpdFBhcnQpKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgRGVmaW5pdGlvbnNFZGl0UGFydCBkZWZpbml0aW9uc0VkaXRQYXJ0ID0gKERlZmluaXRpb25zRWRpdFBhcnQpIGRlZmluaXRpb25PYmplY3Q7Ci0JICAKLQkgIExpc3QgY2hpbGRyZW4gPSBkZWZpbml0aW9uc0VkaXRQYXJ0LmdldENoaWxkcmVuKCk7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0JCSAgaWYgKGNoaWxkcmVuLmdldChpKSBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW5FZGl0UGFydCkgewotCQkJICBMaXN0IGJpbmRpbmdzID0gKChCaW5kaW5nQ29sdW1uRWRpdFBhcnQpIGNoaWxkcmVuLmdldChpKSkuZ2V0Q2hpbGRyZW4oKTsKLQkJCSAgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgYmluZGluZ3Muc2l6ZSgpID4gMCAmJiBiaW5kaW5ncy5nZXQoMCkgaW5zdGFuY2VvZiBCaW5kaW5nRWRpdFBhcnQpIAotCQkJCSAgcmV0dXJuIChCaW5kaW5nRWRpdFBhcnQpIGJpbmRpbmdzLmdldCgwKTsKLQkJICB9Ci0JICB9Ci0JICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldEZpcnN0U2VydmljZShFZGl0UGFydCBlZGl0UGFydCkgCi0gIHsKLQkgIGlmIChlZGl0UGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgUm9vdEVkaXRQYXJ0IHJvb3RFZGl0UGFydCA9IGVkaXRQYXJ0LmdldFJvb3QoKTsKLQkgIGlmIChyb290RWRpdFBhcnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JICAKLQkgIExpc3Qgcm9vdEVkaXRQYXJ0Q2hpbGRyZW4gPSByb290RWRpdFBhcnQuZ2V0Q2hpbGRyZW4oKTsKLQkgIGlmIChyb290RWRpdFBhcnRDaGlsZHJlbiA9PSBudWxsIHx8IHJvb3RFZGl0UGFydENoaWxkcmVuLnNpemUoKSAhPSAxKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgT2JqZWN0IGRlZmluaXRpb25PYmplY3QgPSByb290RWRpdFBhcnRDaGlsZHJlbi5nZXQoMCk7Ci0JICBpZiAoISAoZGVmaW5pdGlvbk9iamVjdCBpbnN0YW5jZW9mIERlZmluaXRpb25zRWRpdFBhcnQpKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgRGVmaW5pdGlvbnNFZGl0UGFydCBkZWZpbml0aW9uc0VkaXRQYXJ0ID0gKERlZmluaXRpb25zRWRpdFBhcnQpIGRlZmluaXRpb25PYmplY3Q7Ci0JICAKLQkgIExpc3QgY2hpbGRyZW4gPSBkZWZpbml0aW9uc0VkaXRQYXJ0LmdldENoaWxkcmVuKCk7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0JCSAgT2JqZWN0IGNoaWxkID0gY2hpbGRyZW4uZ2V0KGkpOwotCQkgIGlmIChjaGlsZCBpbnN0YW5jZW9mIENvbHVtbkVkaXRQYXJ0KSB7Ci0JCQkgIENvbHVtbkVkaXRQYXJ0IGNvbHVtbiA9IChDb2x1bW5FZGl0UGFydCkgY2hpbGQ7Ci0JCQkgIE9iamVjdCBtb2RlbCA9IGNvbHVtbi5nZXRNb2RlbCgpOwotCQkJICAKLQkJCSAgaWYgKG1vZGVsIGluc3RhbmNlb2YgU2VydmljZUNvbHVtbikgewotCQkJCSAgTGlzdCBzZXJ2aWNlcyA9IGNvbHVtbi5nZXRDaGlsZHJlbigpOwotCQkJCSAgaWYgKHNlcnZpY2VzICE9IG51bGwgJiYgc2VydmljZXMuc2l6ZSgpID4gMCAmJiBzZXJ2aWNlcy5nZXQoMCkgaW5zdGFuY2VvZiBTZXJ2aWNlRWRpdFBhcnQpIHsKLQkJCQkJICByZXR1cm4gKFNlcnZpY2VFZGl0UGFydCkgc2VydmljZXMuZ2V0KDApOwotCQkJCSAgfQotCQkJICB9Ci0JCSAgfQotCSAgfQotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHN0YXRpYyBFZGl0UGFydCBnZXRGaXJzdEludGVyZmFjZShFZGl0UGFydCBlZGl0UGFydCkgCi0gIHsKLQkgIGlmIChlZGl0UGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgUm9vdEVkaXRQYXJ0IHJvb3RFZGl0UGFydCA9IGVkaXRQYXJ0LmdldFJvb3QoKTsKLQkgIGlmIChyb290RWRpdFBhcnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JICAKLQkgIExpc3Qgcm9vdEVkaXRQYXJ0Q2hpbGRyZW4gPSByb290RWRpdFBhcnQuZ2V0Q2hpbGRyZW4oKTsKLQkgIGlmIChyb290RWRpdFBhcnRDaGlsZHJlbiA9PSBudWxsIHx8IHJvb3RFZGl0UGFydENoaWxkcmVuLnNpemUoKSAhPSAxKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgT2JqZWN0IGRlZmluaXRpb25PYmplY3QgPSByb290RWRpdFBhcnRDaGlsZHJlbi5nZXQoMCk7Ci0JICBpZiAoISAoZGVmaW5pdGlvbk9iamVjdCBpbnN0YW5jZW9mIERlZmluaXRpb25zRWRpdFBhcnQpKSByZXR1cm4gbnVsbDsKLQkgIAotCSAgRGVmaW5pdGlvbnNFZGl0UGFydCBkZWZpbml0aW9uc0VkaXRQYXJ0ID0gKERlZmluaXRpb25zRWRpdFBhcnQpIGRlZmluaXRpb25PYmplY3Q7Ci0JICAKLQkgIExpc3QgY2hpbGRyZW4gPSBkZWZpbml0aW9uc0VkaXRQYXJ0LmdldENoaWxkcmVuKCk7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0JCSAgT2JqZWN0IGNoaWxkID0gY2hpbGRyZW4uZ2V0KGkpOwotCQkgIGlmIChjaGlsZCBpbnN0YW5jZW9mIENvbHVtbkVkaXRQYXJ0KSB7Ci0JCQkgIENvbHVtbkVkaXRQYXJ0IGNvbHVtbiA9IChDb2x1bW5FZGl0UGFydCkgY2hpbGQ7Ci0JCQkgIE9iamVjdCBtb2RlbCA9IGNvbHVtbi5nZXRNb2RlbCgpOwotCQkJICAKLQkJCSAgaWYgKG1vZGVsIGluc3RhbmNlb2YgSW50ZXJmYWNlQ29sdW1uKSB7Ci0JCQkJICBMaXN0IGludGVyZmFjZXMgPSBjb2x1bW4uZ2V0Q2hpbGRyZW4oKTsKLQkJCQkgIGlmIChpbnRlcmZhY2VzICE9IG51bGwgJiYgaW50ZXJmYWNlcy5zaXplKCkgPiAwICYmIGludGVyZmFjZXMuZ2V0KDApIGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpIHsKLQkJCQkJICByZXR1cm4gKEludGVyZmFjZUVkaXRQYXJ0KSBpbnRlcmZhY2VzLmdldCgwKTsKLQkJCQkgIH0KLQkJCSAgfQotCQkgIH0KLQkgIH0KLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotCi0gIHN0YXRpYyBFZGl0UGFydCBnZXRTb3VyY2VDb25uZWN0aW9uRWRpdFBhcnQoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBlZGl0UGFydCkKLSAgewotICAgIC8vIGZpbmQgdGhlIGZpcnN0IGNvbm5lY3Rpb24gdGhhdCB0YXJnZXRzIHRoaXMgZWRpdFBhcnQKLSAgICAvLyBuYXZpZ2F0ZSBiYWNrd2FyZCBhbG9uZyB0aGUgY29ubmVjdGlvbiAodG8gdGhlIGxlZnQpIHRvIGZpbmQgdGhlIHNvdXJjIGVkaXQgcGFydAotICAgIEVkaXRQYXJ0IHJlc3VsdCA9IG51bGw7Ci0gICAgRWRpdFBhcnRWaWV3ZXIgdmlld2VyID0gZWRpdFBhcnQuZ2V0Vmlld2VyKCk7Ci0gICAgTGF5ZXJNYW5hZ2VyIG1hbmFnZXIgPSAoTGF5ZXJNYW5hZ2VyKWVkaXRQYXJ0LmdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQoTGF5ZXJNYW5hZ2VyLklEKTsKLSAgICBJRmlndXJlIGxheWVyID0gbWFuYWdlci5nZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKTsgICAgCi0gICAgZm9yIChJdGVyYXRvciBpID0gbGF5ZXIuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEZpZ3VyZSBmaWd1cmUgPSAoRmlndXJlKWkubmV4dCgpOwotICAgICAgaWYgKGZpZ3VyZSBpbnN0YW5jZW9mIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24pCi0gICAgICB7Ci0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiA9IChDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKWZpZ3VyZTsKLSAgICAgICAgQ29ubmVjdGlvbkFuY2hvciB0YXJnZXRBbmNob3IgPSBjb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmdldFRhcmdldEFuY2hvcigpOwotICAgICAgICBpZiAodGFyZ2V0QW5jaG9yLmdldE93bmVyKCkgPT0gZWRpdFBhcnQuZ2V0RmlndXJlKCkpCi0gICAgICAgIHsgIAotICAgICAgICAgIENvbm5lY3Rpb25BbmNob3Igc291cmNlQW5jaG9yID0gY29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbi5nZXRTb3VyY2VBbmNob3IoKTsKLSAgICAgICAgICBJRmlndXJlIHNvdXJjZUZpZ3VyZSA9IHNvdXJjZUFuY2hvci5nZXRPd25lcigpOyAgICAgICAgICAKLSAgICAgICAgICBFZGl0UGFydCBwYXJ0ID0gbnVsbDsKLSAgICAgICAgICB3aGlsZSAocGFydCA9PSBudWxsICYmIHNvdXJjZUZpZ3VyZSAhPSBudWxsKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0ID0gKEVkaXRQYXJ0KXZpZXdlci5nZXRWaXN1YWxQYXJ0TWFwKCkuZ2V0KHNvdXJjZUZpZ3VyZSk7Ci0gICAgICAgICAgICBzb3VyY2VGaWd1cmUgPSBzb3VyY2VGaWd1cmUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgICByZXN1bHQgPSBwYXJ0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9ICAKLSAgICAgIH0gICAgICAgICAgICAgICAgCi0gICAgfSAgICAKLSAgICByZXR1cm4gcmVzdWx0OyAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VuZFBvaW50RWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FbmRQb2ludEVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNDk0OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VuZFBvaW50RWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5SZWN0YW5nbGVGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9ucy5DZW50ZXJlZENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRW5kUG9pbnRFZGl0UGFydCBleHRlbmRzIEJhc2VDb25uZWN0ZWRFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIsIElOYW1lZEVkaXRQYXJ0Ci17Ci0gIHByb3RlY3RlZCBMYWJlbCBuYW1lTGFiZWw7Ci0gIHByb3RlY3RlZCBMYWJlbCBhZGRyZXNzTGFiZWw7Ci0gIHByaXZhdGUgTGFiZWwgaG92ZXJIZWxwTGFiZWwgPSBuZXcgTGFiZWwoIiIpOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBGaWd1cmUgYWRkcmVzc0JveEZpZ3VyZTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgTUFYX0FERFJFU1NfV0lEVEggPSAxNTA7Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIGZpZ3VyZSA9IG5ldyBQYW5lbCgpIHsKLSAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKSB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKTsKLSAgICAgICAgLy8gYnVnMTQ2OTMyCi0gICAgICAgIHBhaW50Rm9jdXNDdXJzb3IobmV3IFJlY3RhbmdsZShyLngsIHIueSArIDEsIHIud2lkdGgsIHIuaGVpZ2h0IC0gMSksIGdyYXBoaWNzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIGZpZ3VyZS5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcig0KSk7Ci0gICAgVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgLy8gbGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fVE9QTEVGVCk7Ci0gICAgbGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICBuYW1lTGFiZWwgPSBuZXcgTGFiZWwoKTsKLQotICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCW5hbWVMYWJlbC5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBnZXRNb2RlbCgpKS5nZXRJbWFnZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgbmFtZUxhYmVsLnNldExhYmVsQWxpZ25tZW50KExhYmVsLkxFRlQpOwotICAgIC8vIG5hbWVMYWJlbC5zZXRUZXh0UGxhY2VtZW50KFBvc2l0aW9uQ29uc3RhbnRzLldFU1QpOwotICAgIGZpZ3VyZS5hZGQobmFtZUxhYmVsKTsKLSAgICBGaWd1cmUgZjEgPSBuZXcgRmlndXJlKCk7Ci0gICAgZjEuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMCwgMjAsIDAsIDApKTsKLSAgICBmMS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KCkpOwotICAgIGZpZ3VyZS5hZGQoZjEpOwotICAgIGFkZHJlc3NCb3hGaWd1cmUgPSBuZXcgUmVjdGFuZ2xlRmlndXJlKCk7Ci0gICAgYWRkcmVzc0JveEZpZ3VyZS5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLSAgICBhZGRyZXNzQm94RmlndXJlLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQoKQotICAgIHsKLSAgICAgIC8vIGhlcmUnIHdlIHR3ZWFrIHRoZSBsYXlvdXQgc28gdGhhdCBhZGRyZXNzIGxhYmVscyBhcmVuJ3Qgc2l6ZWQgdG9vIHdpZGUKLSAgICAgIC8vIHRoZSBMYWJlbCBjbGFzcyBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGFkZGl0aW9uIG9mIHRoZSAnLi4uJyAKLSAgICAgIC8vCi0gICAgICBwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KQotICAgICAgewotICAgICAgICBEaW1lbnNpb24gZCA9IHN1cGVyLmNhbGN1bGF0ZVByZWZlcnJlZFNpemUoY29udGFpbmVyLCB3SGludCwgaEhpbnQpOwotICAgICAgICBkLndpZHRoID0gTWF0aC5taW4oZC53aWR0aCwgTUFYX0FERFJFU1NfV0lEVEgpOwotICAgICAgICByZXR1cm4gZDsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBmMS5hZGQoYWRkcmVzc0JveEZpZ3VyZSk7Ci0gICAgYWRkcmVzc0xhYmVsID0gbmV3IExhYmVsKCk7Ci0KLSAgICBhZGRyZXNzTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLSAgICBhZGRyZXNzTGFiZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMiwgNiwgMiwgNikpOwotICAgIGFkZHJlc3NMYWJlbC5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICBhZGRyZXNzQm94RmlndXJlLmFkZChhZGRyZXNzTGFiZWwpOwotICAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgeyAgCi0gICAgICBuYW1lTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotICAgICAgYWRkcmVzc0xhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICBuYW1lTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLSAgICAgIGFkZHJlc3NMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotICAgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgbmV3IEFTRExhYmVsRGlyZWN0RWRpdFBvbGljeSgpKTsKLSAgICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotICBwcml2YXRlIERpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXI7Ci0gIHByaXZhdGUgUG9pbnQgY3Vyc29yTG9jYXRpb247Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmN1cnNvckxvY2F0aW9uID0gY3Vyc29yTG9jYXRpb247Ci0gICAgaWYgKCFpc1JlYWRPbmx5KCkgJiYgIWlzRmlsZVJlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgaGl0VGVzdChnZXRMYWJlbEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikpKSB7Ci0gICAgCW1hbmFnZXIgPSBuZXcgTGFiZWxFZGl0TWFuYWdlcih0aGlzLCBuZXcgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcih0aGlzLCBjdXJzb3JMb2NhdGlvbikpOwotICAgIAltYW5hZ2VyLnNob3coKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaGl0VGVzdChnZXRGaWd1cmUoKS5nZXRCb3VuZHMoKSwgY3Vyc29yTG9jYXRpb24pICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0KLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkKLSAgewotICAgIGlmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IHRyYW5zbGF0ZUJvdW5kcyhuYW1lTGFiZWwuZ2V0Qm91bmRzKCkpLmNvbnRhaW5zKGN1cnNvckxvY2F0aW9uKSkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZUxhYmVsOwotICAgIH0KLSAgICBlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMoYWRkcmVzc0xhYmVsLmdldEJvdW5kcygpKS5jb250YWlucyhjdXJzb3JMb2NhdGlvbikpCi0gICAgewotICAgICAgcmV0dXJuIGFkZHJlc3NMYWJlbDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBSZWN0YW5nbGUgdHJhbnNsYXRlQm91bmRzKFJlY3RhbmdsZSBib3VuZHMpIHsKLQkgIAotCQlBU0RNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yID0gKEFTRE11bHRpUGFnZUVkaXRvcikgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpOwotCQlGaWd1cmVDYW52YXMgY2FudmFzID0gKEZpZ3VyZUNhbnZhcykgKChFZGl0UGFydFZpZXdlcikgZWRpdG9yLmdldEFkYXB0ZXIoR3JhcGhpY2FsVmlld2VyLmNsYXNzKSkuZ2V0Q29udHJvbCgpOwotCQlQb2ludCB2aWV3TG9jYXRpb24gPSBjYW52YXMuZ2V0Vmlld3BvcnQoKS5nZXRWaWV3TG9jYXRpb24oKTsKLQkJCi0JCXJldHVybiBuZXcgUmVjdGFuZ2xlKGJvdW5kcy54ICsgdmlld0xvY2F0aW9uLngsIGJvdW5kcy55ICsgdmlld0xvY2F0aW9uLnksIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgT2JqZWN0IGdldFJlZmVyZW5jZWRNb2RlbCgpCi0gIHsKLSAgICBJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotICAgIHJldHVybiBlbmRQb2ludC5nZXRCaW5kaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICBJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotICAgIG5hbWVMYWJlbC5zZXRUZXh0KGVuZFBvaW50LmdldE5hbWUoKSk7Ci0gICAgYWRkcmVzc0xhYmVsLnNldFRleHQoZW5kUG9pbnQuZ2V0QWRkcmVzcygpKTsKLSAgICAKLSAgICBSZWN0YW5nbGUgdGV4dEJvdW5kcyA9IGFkZHJlc3NMYWJlbC5nZXRUZXh0Qm91bmRzKCk7Ci0gICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGFkZHJlc3NMYWJlbC5nZXRCb3VuZHMoKTsKLSAgICBpbnQgdGV4dFBsYWNlbWVudCA9IGFkZHJlc3NMYWJlbC5nZXRUZXh0UGxhY2VtZW50KCk7Ci0gICAgaW50IHhEZWx0YSA9IHRleHRCb3VuZHMueCAtIGJvdW5kcy54OwotICAgIGludCB4VGV4dEluY3JlYXNlID0gdGV4dFBsYWNlbWVudCAtIHhEZWx0YTsKLSAgICBpbnQgdGV4dFNpemUgPSB0ZXh0Qm91bmRzLndpZHRoICsgeFRleHRJbmNyZWFzZTsKLSAgICBpbnQgYm91bmRTaXplID0gYm91bmRzLndpZHRoOwotCi0gICAgaWYgKHRleHRTaXplID4gYm91bmRTaXplKSB7Ci0gICAgCWhvdmVySGVscExhYmVsLnNldFRleHQoIiAiICsgZW5kUG9pbnQuZ2V0QWRkcmVzcygpICArICIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICBhZGRyZXNzTGFiZWwuc2V0VG9vbFRpcChob3ZlckhlbHBMYWJlbCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBhZGRyZXNzTGFiZWwuc2V0VG9vbFRpcChudWxsKTsKLSAgICB9Ci0KLSAgICByZWZyZXNoQ29ubmVjdGlvbnMoKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCkKLSAgewotICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBnZXRSZWZlcmVuY2VkTW9kZWwoKTsKLSAgICBpZiAodHlwZUJlaW5nUmVmICE9IG51bGwpCi0gICAgewotICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0gICAgICByZXR1cm4gcmVmZXJlbmNlVHlwZVBhcnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoQ29ubmVjdGlvbnMoKSB7Ci0JICBpZiAoc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkgewotCQkgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpIHsKLQkJCSAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IGdldENvbm5lY3Rpb25UYXJnZXRFZGl0UGFydCgpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFNvdXJjZUFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKGFkZHJlc3NCb3hGaWd1cmUsIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5SSUdIVCwgMCwgMCkpOwotCSAgICAgICAgICBJRmlndXJlIHRhcmdldEZpZ3VyZSA9IHJlZmVyZW5jZVR5cGVQYXJ0LmdldEZpZ3VyZSgpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFRhcmdldEFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKHRhcmdldEZpZ3VyZSwgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLkhFQURFUl9MRUZULCAwLCAxMCkpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7Ci0JICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZSh0cnVlKTsKLQkgICAgICAgICAgCi0JICAgICAgICAgIGlmIChjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUgIT0gbnVsbCkKLQkgICAgICAgICAgICBhZGRDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0JCQkgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotCQkgIH0KLQkgIH0KLQkgIGVsc2UgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCl7Ci0JCSAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgIHJlbW92ZUNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSgpOwotCSAgfQotICB9Ci0KLSAgcHJpdmF0ZSBJRmlndXJlIGdldEZpZ3VyZUZvckZlZWRiYWNrKCkKLSAgewotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpCi0gIHsKLSAgICBJRmlndXJlIGZpZ3VyZSA9IGdldEZpZ3VyZUZvckZlZWRiYWNrKCk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICAgIAotICAgIHN1cGVyLmFkZEZlZWRiYWNrKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpCi0gIHsKLSAgICBJRmlndXJlIGZpZ3VyZSA9IGdldEZpZ3VyZUZvckZlZWRiYWNrKCk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihmaWd1cmUuZ2V0UGFyZW50KCkuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotCi0gICAgc3VwZXIucmVtb3ZlRmVlZGJhY2soKTsKLSAgfQotCi0gIC8vIFRPRE86IHJtYWg6IFZFUlkgVUdMWSBIQUNLLi4uLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgd2F5IHRvIHNvbHZlIHRoaXMKLSAgLy8gaXNzdWUgYXQgdGhpcyB0aW1lLgotICAvLyBFbmRQb2ludEVkaXRQYXJ0IGNvbnRhaW5zIHR3byBsYWJlbHMgd2hpY2ggY2FuIGJlIGRpcmVjdCBlZGl0ZWQuIFRoZSBmYWNhZGUKLSAgLy8gZHJpdmluZyBFbmRQb2ludEVkaXRQYXJ0Ci0gIC8vIGNvbnRhaW5zIGEgZ2V0U2V0TmFtZUNvbW1hbmQoKSBhbmQgYSBnZXRTZXRBZGRyZXNzQ29tbWFuZCgpLi4uIGhvd2V2ZXIsCi0gIC8vIHRoaXMgY2xhc3MgKExhYmVsRGlyZWN0RWRpdFBvbGljeSkKLSAgLy8gb25seSBrbm93cyBhYm91dCBnZXRTZXROYW1lQ29tbWFuZCgpLi4uLi4gVGhpcyBpcyB0aGUgcHJvYmxlbSB3ZSBmYWNlIHdoZW4KLSAgLy8gY29tYmluaW5nIHR3byBsYWJlbHMgaW50bwotICAvLyBvbmUgRWRpdFBhcnQuLi4uLgotICAvLyBTZWUgTGFiZWxEaXJlY3RFZGl0UG9saWN5LmdldERpcmVjdEVkaXRDb21tYW5kKERpcmVjdEVkaXRSZXF1ZXN0KQotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXRQcm9wZXJMYWJlbENvbW1hbmQoU3RyaW5nIG5ld1ZhbHVlKQotICB7Ci0gICAgLy8gVE9ETzogcm1haDogV2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHBvaW50Li4uCi0gICAgaWYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgdHJhbnNsYXRlQm91bmRzKG5hbWVMYWJlbC5nZXRCb3VuZHMoKSkuY29udGFpbnMoY3Vyc29yTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHJldHVybiAoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0U2V0TmFtZUNvbW1hbmQobmV3VmFsdWUpOwotICAgIH0KLSAgICBlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMoYWRkcmVzc0xhYmVsLmdldEJvdW5kcygpKS5jb250YWlucyhjdXJzb3JMb2NhdGlvbikpCi0gICAgewotICAgICAgcmV0dXJuICgoSUVuZFBvaW50KSBnZXRNb2RlbCgpKS5nZXRTZXRBZGRyZXNzQ29tbWFuZChuZXdWYWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5FQVNUKQotICAgIHsgICAgICAKLSAgICAgIC8vIG5hdmlnYXRlIGZvcndhcmQgYWxvbmcgdGhlIGNvbm5lY3Rpb24gKHRvIHRoZSByaWdodCkKLSAgICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAJICAvLyBvciB0byB0aGUgZmlyc3QgdW5jb25uZWN0ZWQgYmluZGluZwotICAgICAgICAgIHJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRGaXJzdEJpbmRpbmcodGhpcyk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEgpCi0gICAgewotICAgIAlyZXR1cm4gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0TmV4dFNlcnZpY2UodGhpcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgfSAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldEFjY2Vzc2libGVOYW1lKCkgewotCSAgaWYgKG5hbWVMYWJlbCAhPSBudWxsICYmIGFkZHJlc3NMYWJlbCAhPSBudWxsKSB7Ci0JCSAgcmV0dXJuIG5hbWVMYWJlbC5nZXRUZXh0KCkgKyAiICIgKyBhZGRyZXNzTGFiZWwuZ2V0VGV4dCgpOyAvLyROT04tTkxTLTEkCi0JICB9Ci0JICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSUZlZWRiYWNrSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lGZWVkYmFja0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwNTM2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSUZlZWRiYWNrSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGZWVkYmFja0hhbmRsZXIgewotCXB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCk7Ci0JcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JTmFtZWRFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lOYW1lZEVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNmRlM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lOYW1lZEVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZEVkaXRQYXJ0IHsKLQlwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKTsKLQlwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSW50ZXJmYWNlRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JbnRlcmZhY2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzFlYTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JbnRlcmZhY2VFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGluZUJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlJlY3RhbmdsZUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQm94Q29tcG9uZW50RmlndXJlOwotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJhc2VMaW5rSWNvbkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnRlcmZhY2VFZGl0UGFydCBleHRlbmRzIEFic3RyYWN0Qm94dEVkaXRQYXJ0IGltcGxlbWVudHMgSUZlZWRiYWNrSGFuZGxlcgotewotCXByaXZhdGUgUmVjdGFuZ2xlRmlndXJlIGxpbmtJY29uQ29sdW1uOwotCXByb3RlY3RlZCBCb3hDb21wb25lbnRGaWd1cmUgYm94RmlndXJlOwotICBwdWJsaWMgSW50ZXJmYWNlRWRpdFBhcnQoKQotICB7Ci0gICAgY29sdW1uRGF0YS5zZXRDb2x1bW5XZWlnaHQoIk1lc3NhZ2VMYWJlbCIsIDApOyAvLyROT04tTkxTLTEkCi0gICAgY29sdW1uRGF0YS5zZXRDb2x1bW5XZWlnaHQoIk1lc3NhZ2VDb250ZW50UGFuZSIsIDEwMCk7IC8vJE5PTi1OTFMtMSQKLSAgICBjb2x1bW5EYXRhLnNldENvbHVtbldlaWdodCgicGFyYW1ldGVyTmFtZSIsIDUwKTsgLy8kTk9OLU5MUy0xJAotICAgIGNvbHVtbkRhdGEuc2V0Q29sdW1uV2VpZ2h0KCJwYXJhbWV0ZXJUeXBlIiwgNTApOyAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotCQlJRmlndXJlIG91dGVyID0gbmV3IEZpZ3VyZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHZhbGlkYXRlKCkgewotCQkJCXN1cGVyLnZhbGlkYXRlKCk7Ci0JCQkJLy8gSWYgd2UgZG9uJ3QgbGF5b3V0IG91ciBMaW5rIEljb24gQ29sdW1uIGF0IHRoaXMgcG9pbnQsIHRoZSBsaW5rIGljb25zCi0JCQkJLy8gd2lsbCBub3QgYmUgcHJvcGVybHkgdXBkYXRlZCBpbiB0aGUgc2NlbmFyaW8gd2hlcmUgYSBwb3J0dHlwZSBpcyBhZGRlZAotCQkJCS8vIG9yIHJlbW92ZWQuICBUaGUgbGluayBpY29ucyBvZiB0aGUgZXhpc3RpbmcgcG9ydHR5cGVzIHdpbGwgbm90IGJlIHVwZGF0ZWQuCi0JCQkJZ2V0TGlua0ljb25Db2x1bW4oKS5nZXRMYXlvdXRNYW5hZ2VyKCkubGF5b3V0KGdldExpbmtJY29uQ29sdW1uKCkpOwotCQkJfQotCQl9OwotCQkKLQkJb3V0ZXIuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCh0cnVlKSk7Ci0JICAgIGJveEZpZ3VyZSA9IChCb3hDb21wb25lbnRGaWd1cmUpIHN1cGVyLmNyZWF0ZUZpZ3VyZSgpOwotCSAgICAKLQkgICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkgICAgCWJveEZpZ3VyZS5nZXRMYWJlbCgpLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGdldE1vZGVsKCkpLmdldEltYWdlKCkpOwkKLQkgICAgfQotCSAgICAKLQkgICAgYm94RmlndXJlLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5vcmFuZ2UpOwotCSAgICBib3hGaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDEpKTsKLQkgICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotCSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0JICAgIGJveEZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotCSAgICBvdXRlci5hZGQoYm94RmlndXJlKTsKLQkgICAgbGlua0ljb25Db2x1bW4gPSBuZXcgUmVjdGFuZ2xlRmlndXJlKCk7Ci0JICAgIGxpbmtJY29uQ29sdW1uLnNldE91dGxpbmUoZmFsc2UpOwotCSAgICBsaW5rSWNvbkNvbHVtbi5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KCkgewotCQkJcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgcGFyZW50KSB7Ci0JCQkJc3VwZXIubGF5b3V0KHBhcmVudCk7Ci0JCQkJCi0JCQkJLy8gV2UgbmVlZCB0byBsYXlvdXQgb24gdGhlIHktYXhpcwotCQkJCUl0ZXJhdG9yIGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoY2hpbGRyZW4uaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBpdGVtID0gY2hpbGRyZW4ubmV4dCgpOwotCQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIElGaWd1cmUpIHsKLQkJCQkJCUlGaWd1cmUgZmlndXJlID0gKElGaWd1cmUpIGl0ZW07Ci0JCQkJCQlmaWd1cmUuZ2V0TGF5b3V0TWFuYWdlcigpLmxheW91dChmaWd1cmUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KSB7Ci0JCQkJRGltZW5zaW9uIGRpbWVuc2lvbiA9IHN1cGVyLmNhbGN1bGF0ZVByZWZlcnJlZFNpemUoY29udGFpbmVyLCB3SGludCwgaEhpbnQpOwotCQkJCQotCQkJCS8vIENhbGN1bGF0ZSB0aGUgaGVpZ2h0Ci0JCQkJSXRlcmF0b3IgaXQgPSBjb250YWluZXIuZ2V0UGFyZW50KCkuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkJCWlmIChpdGVtIGluc3RhbmNlb2YgQm94Q29tcG9uZW50RmlndXJlKSB7Ci0JCQkJCQlkaW1lbnNpb24uaGVpZ2h0ID0gKChJRmlndXJlKSBpdGVtKS5nZXRQcmVmZXJyZWRTaXplKCkuaGVpZ2h0OwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlyZXR1cm4gZGltZW5zaW9uOwotCQkJfQotCSAgICB9KTsKLQkgICAgCi0JICAgIG91dGVyLmFkZChsaW5rSWNvbkNvbHVtbik7Ci0JICAgIAotCSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotCSAgICAvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotCSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotCSAgICBpZiAoaXNSZWFkT25seSgpKSAKLQkgICAgewotCSAgICAJZmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCSAgICAJZmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIG91dGVyOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgYXR0YWNoVG9JbnRlcmZhY2VFZGl0UGFydChFZGl0UGFydCBlZGl0UGFydCwgUm93TGF5b3V0IHJvd0xheW91dCkKLSAgewotICAgIGZvciAoRWRpdFBhcnQgcGFyZW50ID0gZWRpdFBhcnQuZ2V0UGFyZW50KCk7IHBhcmVudCAhPSBudWxsOyBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCkpCi0gICAgewotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEludGVyZmFjZUVkaXRQYXJ0KQotICAgICAgewotICAgICAgICBJbnRlcmZhY2VFZGl0UGFydCBpbnRlcmZhY2VFZGl0UGFydCA9IChJbnRlcmZhY2VFZGl0UGFydClwYXJlbnQ7Ci0gICAgICAgIHJvd0xheW91dC5zZXRDb2x1bW5EYXRhKGludGVyZmFjZUVkaXRQYXJ0LmNvbHVtbkRhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gIAotICAgIH0gICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hDaGlsZHJlbigpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoQ2hpbGRyZW4oKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSUludGVyZmFjZSB0aGVJbnRlcmZhY2UgPSAoSUludGVyZmFjZSlnZXRNb2RlbCgpOwotICAgIHJldHVybiB0aGVJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpOyAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIHN1cGVyLmFkZEZlZWRiYWNrKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIHN1cGVyLnJlbW92ZUZlZWRiYWNrKCk7Ci0gIH0KLQotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0JICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLldFU1QpCi0JICB7Ci0JCSAgRWRpdFBhcnQgY29ubmVjdGVkQmluZGluZyA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFNvdXJjZUNvbm5lY3Rpb25FZGl0UGFydCh0aGlzKTsKLQkJICBpZiAoY29ubmVjdGVkQmluZGluZyAhPSBudWxsKSB7Ci0JCQkgIHJldHVybiBjb25uZWN0ZWRCaW5kaW5nOwotCQkgIH0gZWxzZSB7Ci0JCQkgIHJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRGaXJzdEJpbmRpbmcodGhpcyk7IAotCQkgIH0KLQkgIH0gIAotCi0JICBFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLQkgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuTk9SVEggJiYgKGVkaXRQYXJ0ID09IG51bGwgfHwgZWRpdFBhcnQgPT0gdGhpcykpCi0JICB7Ci0JCSAgZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRQcmV2U2libGluZyh0aGlzKTsKLQkgIH0gICAgICAgIAotCSAgcmV0dXJuIGVkaXRQYXJ0OwotICB9Ci0gIAotICBwdWJsaWMgSUZpZ3VyZSBnZXRMaW5rSWNvbkNvbHVtbigpIHsKLQkgIHJldHVybiBsaW5rSWNvbkNvbHVtbjsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWNjZXNzaWJsZU5hbWUoKQotICB7Ci0gICAgTGFiZWwgbGFiZWxGaWd1cmUgPSBnZXRMYWJlbEZpZ3VyZSgpOwotICAgIGlmIChsYWJlbEZpZ3VyZSAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gbGFiZWxGaWd1cmUuZ2V0VGV4dCgpOwotICAgIH0KLSAgICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL01lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL01lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2E2NTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9NZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkRyYWdUcmFja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTREdyYXBoTm9kZURyYWdUcmFja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkxpc3RGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLk1vZGVsRGlhZ25vc3RpY0luZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLlJvd0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIKLXsgICAKLSAgcHJvdGVjdGVkIEZpZ3VyZSBjb250ZW50UGFuZTsgIAotICBwcm90ZWN0ZWQgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBSb3dMYXlvdXQgcm93TGF5b3V0OwotICAKLSAgcHJpdmF0ZSBGaWd1cmUgbWVzc2FnZUxhYmVsV3JhcHBlcjsKLSAgcHJpdmF0ZSBMYWJlbCBtZXNzYWdlTGFiZWw7Ci0gIAotICBwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSA9IG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCk7Ci0gIAotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgTGlzdEZpZ3VyZSBmaWd1cmUgPSBuZXcgTGlzdEZpZ3VyZSh0cnVlKTsKLSAgICBmaWd1cmUuc2V0T3BhcXVlKHRydWUpOwotICAgIGZpZ3VyZS5zZXRQYWludEZpcnN0TGluZShmYWxzZSk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy50b29sdGlwQmFja2dyb3VuZCk7Ci0KLSAgICByb3dMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIocm93TGF5b3V0KTsgCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKQotICAgICAgewotICAgICAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0gICAgICAgIC8vIGJ1ZzE0NjkzMgotICAgICAgICBwYWludEZvY3VzQ3Vyc29yKGdldEJvdW5kcygpLCBncmFwaGljcyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBsYWJlbC5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICAvL2xhYmVsLnNldEZvbnQoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLm1lZGl1bUZvbnQpOyAKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigyLCAxNiwgMiAsMTApKTsKLSAgICBmaWd1cmUuYWRkKGxhYmVsKTsgIAotICAgIAotICAgIGNvbnRlbnRQYW5lID0gbmV3IExpc3RGaWd1cmUoKTsKLSAgICAoKExpc3RGaWd1cmUpY29udGVudFBhbmUpLnNldE9wYXF1ZSh0cnVlKTsKLSAgICBjb250ZW50UGFuZS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlzdEJhY2tncm91bmQpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICAKLSAgICAvKgotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKQotICAgIHsKLSAgICAgICAvLyBUT0RPIChjcykgY29uc2lkZXIgbWlub3IgdHdlYWsgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgcm93IGZpbGxzIHVwIHRoZSBhdmFpbGFibGUgc3BhY2UgICAgICAgICAgICAgCi0gICAgICAgLy8gdmVydGljYWxseS4uLiB3aXRob3V0IHRoaXMgYSBiaXQgb2YgdHJpbSBpcyB2aXNpYmxlIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QKLSAgICAgICAvLyB3aGVuIHRoZSBwYXJhbSBsYWJlbHMgYXJlIGdpdmVuIGEgbWFyZ2luIHdpZHRoIHRvcCBhbmQgYm90dG9tIDwgICc0JyAKLSAgICAgICBwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpCi0gICAgICAgewotICAgICAgICAgc3VwZXIubGF5b3V0KHBhcmVudCk7Ci0gICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBGaWd1cmUgY2hpbGQgPSAoRmlndXJlKWNoaWxkcmVuLmdldCgwKTsKLSAgICAgICAgICAgIC8vY2hpbGQuZ2V0Qm91bmRzKCkuaGVpZ2h0ID0gcGFyZW50LmdldENsaWVudEFyZWEoKS5oZWlnaHQ7Ci0gICAgICAgICB9ICAKLSAgICAgICB9Ci0gICAgfTsgICAgIAotICAgICAqLwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIGZpZ3VyZS5hZGQoY29udGVudFBhbmUpOwotICAgIAotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KGxhYmVsLCAiTWVzc2FnZUxhYmVsIik7IC8vJE5PTi1OTFMtMSQKLSAgICByb3dMYXlvdXQuc2V0Q29uc3RyYWludChjb250ZW50UGFuZSwgIk1lc3NhZ2VDb250ZW50UGFuZSIpOyAvLyROT04tTkxTLTEkCi0gICAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSAKLSAgICB7Ci0gICAgICBsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotICAgICAgbGFiZWwuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7ICAKLQkgIGlmICghaXNSZWFkT25seSgpICYmICFpc0ZpbGVSZWFkT25seSgpKSB7Ci0JCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5QUklNQVJZX0RSQUdfUk9MRSwgbmV3IEFTRERyYWdBbmREcm9wRWRpdFBvbGljeShnZXRWaWV3ZXIoKSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpKTsKLQkgIH0KLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KTsKLSAgfQotICAKLSAgcHVibGljIERyYWdUcmFja2VyIGdldERyYWdUcmFja2VyKFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiBuZXcgQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIoKEVkaXRQYXJ0KXRoaXMpOwotICB9Ci0gIAotICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAgIAotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZSA9IChJTWVzc2FnZVJlZmVyZW5jZSlnZXRNb2RlbCgpOwotICAgIAotICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCWxhYmVsLnNldFRleHQoKChJVHJlZUVsZW1lbnQpIG1lc3NhZ2UpLmdldFRleHQoKSk7Ci0gICAgCWxhYmVsLnNldEljb24oKChJVHJlZUVsZW1lbnQpIG1lc3NhZ2UpLmdldEltYWdlKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXNpemUgY29sdW1uIHdpZHRocy4gIFNpemVzIG1heSBoYXZlIHNocnVuay4KLSAgICByb3dMYXlvdXQuZ2V0Q29sdW1uRGF0YSgpLmNsZWFyQ29sdW1uV2lkdGhzKCk7Ci0gICAgZm9yIChFZGl0UGFydCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsgcGFyZW50ICE9IG51bGw7IHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7IAotICAgICAgICAoKEdyYXBoaWNhbEVkaXRQYXJ0KXBhcmVudCkuZ2V0RmlndXJlKCkuaW52YWxpZGF0ZVRyZWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoQ2hpbGRyZW4oKSB7Ci0JICBzdXBlci5yZWZyZXNoQ2hpbGRyZW4oKTsKLSAgICAgIHJlZnJlc2hNZXNzYWdlKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hNZXNzYWdlKCkgewotCSAgaWYgKGdldE1vZGVsQ2hpbGRyZW4oKS5zaXplKCkgPiAwKSB7Ci0JCSAgaWYgKG1lc3NhZ2VMYWJlbFdyYXBwZXIgIT0gbnVsbCkgewotCQkJICBjb250ZW50UGFuZS5yZW1vdmUobWVzc2FnZUxhYmVsV3JhcHBlcik7Ci0JCQkgIG1lc3NhZ2VMYWJlbFdyYXBwZXIgPSBudWxsOwotCQkgIH0KLQkgIH0KLQkgIGVsc2UgewotCQkgIGlmIChtZXNzYWdlTGFiZWxXcmFwcGVyID09IG51bGwpIHsKLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlciA9IG5ldyBGaWd1cmUoKTsKLQkJCSAgbWVzc2FnZUxhYmVsID0gbmV3IExhYmVsKCk7Ci0JCQkgIAotCQkJICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSkKLQkJCSAgICB7Ci0JCQkJICAvLyBXZSB3YW50IHRvIGNlbnRlciB0aGUgdGV4dAotCQkJICAgICAgIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIHBhcmVudCkKLQkJCSAgICAgICB7Ci0JCQkgICAgICAgICBzdXBlci5sYXlvdXQocGFyZW50KTsKLQotCQkJICAgICAgICAgaWYgKHBhcmVudC5nZXRDaGlsZHJlbigpLnNpemUoKSA9PSAxICYmIHBhcmVudC5nZXRDaGlsZHJlbigpLmdldCgwKSBpbnN0YW5jZW9mIExhYmVsKQotCQkJICAgICAgICAgewotCQkJICAgICAgICAgICAgcGFyZW50LnNldFNpemUocGFyZW50LmdldFNpemUoKS53aWR0aCwgcGFyZW50LmdldFNpemUoKS5oZWlnaHQgKyAzKTsKLQkJCSAgICAgICAgICAgIExhYmVsIGNoaWxkID0gKExhYmVsKSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKS5nZXQoMCk7Ci0JCQkgICAgICAgICAgICBpbnQgbmV3WEFtb3VudCA9IChwYXJlbnQuZ2V0U2l6ZSgpLndpZHRoIC0gY2hpbGQuZ2V0U2l6ZSgpLndpZHRoKSAvIDI7Ci0JCQkgICAgICAgICAgICBQb2ludCBwID0gY2hpbGQuZ2V0TG9jYXRpb24oKTsKLQkJCSAgICAgICAgICAgIGNoaWxkLnNldExvY2F0aW9uKG5ldyBQb2ludChwLnggKyBuZXdYQW1vdW50LCBwLnkgKyAzKSk7Ci0JCQkgICAgICAgICB9ICAKLQkJCSAgICAgICB9Ci0JCQkgICAgfTsgICAgIAotCi0JCQkgIG1lc3NhZ2VMYWJlbFdyYXBwZXIuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlci5hZGQobWVzc2FnZUxhYmVsKTsKLQkJCSAgY29udGVudFBhbmUuYWRkKG1lc3NhZ2VMYWJlbFdyYXBwZXIpOwotCQkgIH0KLQkJICAKLQkJICBMaXN0IGVycm9yTGlzdCA9IGdldEVycm9ycygpOwotCQkgIExpc3Qgd2Fybkxpc3QgPSBnZXRXYXJuaW5ncygpOwotCi0JCSAgaWYgKGVycm9yTGlzdC5zaXplKCkgPiAwKSB7Ci0JCQkgIE1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBlcnJvckxpc3QuZ2V0KDApOwotCQkJICBtZXNzYWdlTGFiZWwuc2V0VGV4dCgiICAiICsgaW5mby5nZXREZXNjcmlwdGlvblRleHQoKSArICIgICIpOyAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoaW5mby5nZXREZXNjcmlwdGlvblRleHRDb2xvcigpKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAod2Fybkxpc3Quc2l6ZSgpID4gMCl7Ci0JCQkgIE1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IChNb2RlbERpYWdub3N0aWNJbmZvKSB3YXJuTGlzdC5nZXQoMCk7Ci0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIgICIgKyBpbmZvLmdldERlc2NyaXB0aW9uVGV4dCgpICsgIiAgIik7ICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCSAgbWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihpbmZvLmdldERlc2NyaXB0aW9uVGV4dENvbG9yKCkpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgbWVzc2FnZUxhYmVsLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0RXJyb3JzKCkgewotCSAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKTsKLQkgIHJldHVybiBnZXREaWFnbm9zdGljTWVzc2FnZVR5cGUobWVzc2FnZVJlZi5nZXREaWFnbm9zdGljTWVzc2FnZXMoKSwgTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0V2FybmluZ3MoKSB7Ci0JICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBnZXRNb2RlbCgpOwotCSAgcmV0dXJuIGdldERpYWdub3N0aWNNZXNzYWdlVHlwZShtZXNzYWdlUmVmLmdldERpYWdub3N0aWNNZXNzYWdlcygpLCBNb2RlbERpYWdub3N0aWNJbmZvLldBUk5JTkdfVFlQRSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlVHlwZShMaXN0IGRpYWdub3N0aWNJbmZvLCBpbnQgdHlwZSkgewotCSAgTGlzdCBsaXN0VHlwZSA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBkaWFnbm9zdGljSW5mby5zaXplKCk7IGluZGV4KyspIHsKLQkJICBNb2RlbERpYWdub3N0aWNJbmZvIGluZm8gPSAoTW9kZWxEaWFnbm9zdGljSW5mbykgZGlhZ25vc3RpY0luZm8uZ2V0KGluZGV4KTsKLQkJICBpZiAoaW5mby5nZXRUeXBlKCkgPT0gdHlwZSkgewotCQkJICBsaXN0VHlwZS5hZGQoaW5mbyk7Ci0JCSAgfQotCSAgfQotCSAgCi0JICByZXR1cm4gbGlzdFR5cGU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotICAgIElNZXNzYWdlUmVmZXJlbmNlIHRoZU1lc3NhZ2UgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gdGhlTWVzc2FnZS5nZXRQYXJhbWV0ZXJzKCk7ICAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGROb3RpZnkoKQotICB7Ci0gICAgSW50ZXJmYWNlRWRpdFBhcnQuYXR0YWNoVG9JbnRlcmZhY2VFZGl0UGFydCh0aGlzLCByb3dMYXlvdXQpOwotICAgIHN1cGVyLmFkZE5vdGlmeSgpOyAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgaWYgKGlzUmVhZE9ubHkoKSkgewotCSAgICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvcik7Ci0JICB9Ci0JICBlbHNlIHsKLQkJICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMudG9vbHRpcEJhY2tncm91bmQpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7ICAKLSAgICBFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIICYmIChlZGl0UGFydCA9PSBudWxsIHx8IGVkaXRQYXJ0ID09IHRoaXMpKQotICAgIHsKLSAgICAgIGVkaXRQYXJ0ID0gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0TmV4dEludGVyZmFjZSh0aGlzKTsKLSAgICB9ICAgICAgICAKLSAgICByZXR1cm4gZWRpdFBhcnQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjY2Vzc2libGVOYW1lKCkgewotCSAgaWYgKGxhYmVsICE9IG51bGwpIHsKLQkJICByZXR1cm4gbGFiZWwuZ2V0VGV4dCgpOwotCSAgfQotCSAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9PcGVyYXRpb25FZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL09wZXJhdGlvbkVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YTY2OGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL09wZXJhdGlvbkVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkxpc3RGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJTmFtZWRFZGl0UGFydAoteyAKLSAgcHJvdGVjdGVkIEZpZ3VyZSBjb250ZW50UGFuZTsKLSAgcHJvdGVjdGVkIExhYmVsIGxhYmVsOwotICBwcml2YXRlIENvbG9yIHVuc2VsZWN0ZWRDb2xvcjsKLSAgcHJpdmF0ZSBGaWd1cmUgbGFiZWxIb2xkZXI7Ci0gIAotICBwdWJsaWMgT3BlcmF0aW9uRWRpdFBhcnQoKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOyAgIAotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsgICAKLSAgICB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fVE9QTEVGVCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgCi0gICAgbGFiZWxIb2xkZXIgPSBuZXcgUGFuZWwoKSB7Ci0gICAgICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBncmFwaGljcykgewotICAgICAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0gICAgICAgIFJlY3RhbmdsZSByID0gZ2V0Qm91bmRzKCk7Ci0gICAgICAgIC8vIGJ1ZzE0NjkzMgotICAgICAgICBwYWludEZvY3VzQ3Vyc29yKG5ldyBSZWN0YW5nbGUoci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0KSwgZ3JhcGhpY3MpOwotICAgICAgfQotICAgIH07Ci0gICAgbGFiZWxIb2xkZXIuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgbGFiZWxIb2xkZXIuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCh0cnVlKSk7Ci0gICAgZmlndXJlLmFkZChsYWJlbEhvbGRlcik7Ci0gICAgCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoIk9wZXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0vLyAgICBsYWJlbC5zZXRGb250KERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5zbWFsbEJvbGRGb250KTsKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigyLCAyLDIsMikpOwotICAgIGxhYmVsLnNldFRleHRBbGlnbm1lbnQoTGFiZWwuTEVGVCk7ICAKLSAgICBsYWJlbEhvbGRlci5hZGQobGFiZWwpOwotICAgIAotICAgIAotICAgIGNvbnRlbnRQYW5lID0gbmV3IExpc3RGaWd1cmUoKTsgIAotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dDIgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgdG9vbGJhckxheW91dDIuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQyKTsKLSAgICBmaWd1cmUuYWRkKGNvbnRlbnRQYW5lKTsKLSAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgCWxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgIAkgICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlUYWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAJICAgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlUYWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAlsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotIAkgICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgCSAgICBsYWJlbEhvbGRlci5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICBwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbil7Ci0JICBSZWN0YW5nbGUgdGV4dEFyZWEgPSBnZXRMYWJlbEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCSAgdGV4dEFyZWEud2lkdGggPSBnZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS53aWR0aDsKLQkgIGlmICghaXNGaWxlUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCBoaXRUZXN0KHRleHRBcmVhLCBjdXJzb3JMb2NhdGlvbikgJiYgIWlzUmVhZE9ubHkoKSkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmIChnZXRGaWd1cmUoKSBpbnN0YW5jZW9mIEZpZ3VyZSAmJiBoaXRUZXN0RmlndXJlKChGaWd1cmUpIGdldEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsgICAgCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JICByZXR1cm4gbGFiZWw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAgIAotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gICAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoSU9wZXJhdGlvbilnZXRNb2RlbCgpOwotICAgIGxhYmVsLnNldFRleHQob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgCi0gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAlsYWJlbC5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBvcGVyYXRpb24pLmdldEltYWdlKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJT3BlcmF0aW9uIHRoZU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKWdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIHRoZU9wZXJhdGlvbi5nZXRNZXNzYWdlcygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIHVuc2VsZWN0ZWRDb2xvciA9IGxhYmVsSG9sZGVyLmdldEJhY2tncm91bmRDb2xvcigpOwotLy8JICBnZXRGaWd1cmUoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLQkgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIGlmICh1bnNlbGVjdGVkQ29sb3IgIT0gbnVsbCkgewotCQkgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcih1bnNlbGVjdGVkQ29sb3IpOwotCSAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY2Nlc3NpYmxlTmFtZSgpCi0gIHsKLSAgICBMYWJlbCBsYWJlbEZpZ3VyZSA9IGdldExhYmVsRmlndXJlKCk7Ci0gICAgaWYgKGxhYmVsRmlndXJlICE9IG51bGwpIHsKLSAgICAgIHJldHVybiBsYWJlbEZpZ3VyZS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODI3OGMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRERyYWdBbmREcm9wRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RHcmFwaE5vZGVEcmFnVHJhY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIsIElOYW1lZEVkaXRQYXJ0Ci17ICAgCi0gIHByb3RlY3RlZCBGaWd1cmUgY29udGVudFBhbmU7Ci0gIHByb3RlY3RlZCBMYWJlbCBwYXJhbWV0ZXJOYW1lOwotICBwcm90ZWN0ZWQgUm93TGF5b3V0IHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKLSAgcHJvdGVjdGVkIEltYWdlIGxhYmVsSW1hZ2U7Ci0gIAotICBwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSA9IG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCk7Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIElGaWd1cmUgZmlndXJlID0gbmV3IEZpZ3VyZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgZ3JhcGhpY3MucHVzaFN0YXRlKCk7Ci0gICAgICAgIC8vIHRoaXMgYml0IG9mIGNvZGUgaXMgdXNlZCB0byBkcmF3IHRoZSBkaXZpZGluZyBsaW5lIGJldHdlZW4KLSAgICAgICAgLy8gdGhlIHBhcmFtZXRlciBuYW1lIGFuZCB0aGUgcGFyYW1ldGVyIHR5cGUKLSAgICAgICAgLy8gd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBtb3ZpbmcgdGhpcyBsaW5lIGRyYXdpbmcgaW50byB0aGUgCi0gICAgICAgIC8vIG1lc3NhZ2UgcmVmZXJlbmNlJ3MgZmlndXJlIHdoZXJlIHRoZSBob3Jpem9udGFsIGxpbmVzIGFyZSBkb3duJ3MKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBwYXJhbWV0ZXJOYW1lLmdldEJvdW5kcygpOwotICAgICAgICBpbnQgeD0gci54ICsgIHIud2lkdGggLTE7Ci0gICAgICAgIGdyYXBoaWNzLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotICAgICAgICBncmFwaGljcy5kcmF3TGluZSh4LCByLnksIHgsIHIueSArIHIuaGVpZ2h0KTsKLSAgICAgICAgZ3JhcGhpY3MucG9wU3RhdGUoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGJ1ZzE0NjkzMgotICAgICAgICBwYWludEZvY3VzQ3Vyc29yKG5ldyBSZWN0YW5nbGUoci54ICsgMSwgci55LCByLndpZHRoIC0gMiwgci5oZWlnaHQpLCBncmFwaGljcyk7Ci0gICAgICB9Ci0gICAgfTsgICAgICAgIAotICAgIC8vdG9vbGJhckxheW91dC5zZXRNaW5vckFsaWdubWVudChUb29sYmFyTGF5b3V0LkFMSUdOX0NFTlRFUik7Ci0gICAgZmlndXJlLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIocm93TGF5b3V0KTsgCi0gICAgLyoKLSAgICBTdHJpbmcgeCA9ICIiOwotICAgIGludCBzaXplID0gKGludCkoTWF0aC5yYW5kb20oKSo1MCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgeCArPSAieCI7Ci0gICAgfSAgCi0gICAgU3RyaW5nIHkgPSAiIjsKLSAgICBpbnQgc2l6ZXkgPSAoaW50KShNYXRoLnJhbmRvbSgpKjUwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemV5OyBpKyspCi0gICAgewotICAgICAgeSArPSAieSI7Ci0gICAgfSAqLwotICAgIAotICAgIGNvbnRlbnRQYW5lID0gbmV3IEZpZ3VyZSgpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dDIgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgdG9vbGJhckxheW91dDIuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsgICAKLSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQyKTsKLQotICAgIElGaWd1cmUgcGFyYW1ldGVyTmFtZVBhbmUgPSBuZXcgUGFuZWwoKTsKLSAgICB0b29sYmFyTGF5b3V0MiA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsgIAotICAgIHRvb2xiYXJMYXlvdXQyLnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7ICAgCi0gICAgcGFyYW1ldGVyTmFtZVBhbmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0Mik7Ci0gICAgCi0gICAgcGFyYW1ldGVyTmFtZSA9IG5ldyBMYWJlbCgpOwotICAgIHBhcmFtZXRlck5hbWUuc2V0TGFiZWxBbGlnbm1lbnQoTGFiZWwuTEVGVCk7Ci0gICAgcGFyYW1ldGVyTmFtZS5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcig0LDEwLDQsMTApKTsKLSAgICAKLSAgICBwYXJhbWV0ZXJOYW1lUGFuZS5hZGQocGFyYW1ldGVyTmFtZSk7Ci0gICAgZmlndXJlLmFkZChwYXJhbWV0ZXJOYW1lUGFuZSk7Ci0gICAgZmlndXJlLmFkZChjb250ZW50UGFuZSk7Ci0gICAgcm93TGF5b3V0LnNldENvbnN0cmFpbnQocGFyYW1ldGVyTmFtZVBhbmUsICJwYXJhbWV0ZXJOYW1lIik7IC8vJE5PTi1OTFMtMSQKLSAgICByb3dMYXlvdXQuc2V0Q29uc3RyYWludChjb250ZW50UGFuZSwgInBhcmFtZXRlclR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCWxhYmVsSW1hZ2UgPSAoKElUcmVlRWxlbWVudCkgZ2V0TW9kZWwoKSkuZ2V0SW1hZ2UoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLSAgICAvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotICAgIC8vIEVkaXRQYXJ0IGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAgaWYgKGlzUmVhZE9ubHkoKSkgCi0gICAgewotICAgICAgcGFyYW1ldGVyTmFtZS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwYXJhbWV0ZXJOYW1lLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZE5vdGlmeSgpCi0gIHsKLSAgICBJbnRlcmZhY2VFZGl0UGFydC5hdHRhY2hUb0ludGVyZmFjZUVkaXRQYXJ0KHRoaXMsIHJvd0xheW91dCk7Ci0gICAgc3VwZXIuYWRkTm90aWZ5KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlcjsKLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKXsKLQkgIGlmICghaXNGaWxlUmVhZE9ubHkoKSAmJiAhaXNSZWFkT25seSgpICYmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IGhpdFRlc3QoZ2V0TGFiZWxGaWd1cmUoKS5nZXRCb3VuZHMoKSwgY3Vyc29yTG9jYXRpb24pKSkgewotCQltYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJbWFuYWdlci5zaG93KCk7Ci0JICB9Ci0gICAgZWxzZSBpZiAoZ2V0RmlndXJlKCkgaW5zdGFuY2VvZiBGaWd1cmUgJiYgaGl0VGVzdEZpZ3VyZSgoRmlndXJlKSBnZXRGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgbmV3IEFTRExhYmVsRGlyZWN0RWRpdFBvbGljeSgpKTsKLQkgIGlmICghaXNSZWFkT25seSgpICYmICFpc0ZpbGVSZWFkT25seSgpKSB7Ci0JCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5QUklNQVJZX0RSQUdfUk9MRSwgbmV3IEFTRERyYWdBbmREcm9wRWRpdFBvbGljeShnZXRWaWV3ZXIoKSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpKTsKLQkgIH0KLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KTsKLSAgfQotICAKLSAgcHVibGljIERyYWdUcmFja2VyIGdldERyYWdUcmFja2VyKFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiBuZXcgQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIoKEVkaXRQYXJ0KXRoaXMpOwotICB9Ci0gIAotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JICByZXR1cm4gcGFyYW1ldGVyTmFtZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7ICAgCi0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgICBJUGFyYW1ldGVyIHBhcmFtZXRlciA9IChJUGFyYW1ldGVyKWdldE1vZGVsKCk7Ci0gICAgcGFyYW1ldGVyTmFtZS5zZXRUZXh0KHBhcmFtZXRlci5nZXROYW1lKCkpOwotICAgIGlmIChsYWJlbEltYWdlICE9IG51bGwpIHsKLSAgICAJcGFyYW1ldGVyTmFtZS5zZXRJY29uKGxhYmVsSW1hZ2UpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXNpemUgY29sdW1uIHdpZHRocy4gIFNpemVzIG1heSBoYXZlIHNocnVuay4KLSAgICByb3dMYXlvdXQuZ2V0Q29sdW1uRGF0YSgpLmNsZWFyQ29sdW1uV2lkdGhzKCk7Ci0gICAgZm9yIChFZGl0UGFydCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsgcGFyZW50ICE9IG51bGw7IHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7IAotICAgICAgICAoKEdyYXBoaWNhbEVkaXRQYXJ0KXBhcmVudCkuZ2V0RmlndXJlKCkuaW52YWxpZGF0ZVRyZWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotCSAgLy8gT24gdGhlIGZhY2FkZSBsZXZlbCwgb25lIElQYXJhbWV0ZXIgd2lsbCBoYXZlIHR3byBlZGl0YWJsZSB2YWx1ZXMuCi0JICAvLyBBIG5hbWUgYW5kIGEgdHlwZSByZWZlcmVuY2UuICBUbyBtYWtlIGRpcmVjdCBlZGl0aW5nIGFuZCBzZWxlY3Rpb24KLQkgIC8vIGZlZWRiYWNrIGVhc2llciwgd2Ugc2hvdyB0aGlzIG9uZSBmYWNhZGUgb2JqZWN0IGFzIHR3byBlZGl0IHBhcnRzLgotCSAgLy8gVGhlIGFwcHJvYWNoIGlzIHRvIHRoZSBzYW1lIGZhY2FkZSBtb2RlbCwgdG8gZHJpdmUgdGhlIHNlY29uZCAoY2hpbGQKLQkgIC8vIEVkaXRQYXJ0LgotCi0gICAgICAvLyBUT0RPIChjcykgUmljaCBjb25zaWRlciBjcmVhdGluZyAyIGhhcmQgY29kZSBlZGl0IHBhcnRzCi0gICAgICAvLyB0aGUgZmlyc3QgZm9yIHRoZSBwYXJhbWV0ZXIgbmFtZQotICAgICAgLy8gdGhlIHNlY29uZCBmb3IgdGhlIHBhcmFtdGVyIHR5cGUKLQkgIExpc3Qga2lkcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGtpZHMuYWRkKGdldE1vZGVsKCkpOwotCSAgcmV0dXJuIGtpZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBjb250ZW50UGFuZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7CQotCSAgcGFyYW1ldGVyTmFtZS5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotICAgICAgcGFyYW1ldGVyTmFtZS5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoZmlndXJlLmdldEJhY2tncm91bmRDb2xvcigpKTsKLSAgfQotICAKLSAgcHVibGljIEVkaXRQYXJ0IGdldFJlbGF0aXZlRWRpdFBhcnQoaW50IGRpcmVjdGlvbikKLSAgeyAgCi0gICAgRWRpdFBhcnQgZWRpdFBhcnQgPSBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCAmJiAoZWRpdFBhcnQgPT0gbnVsbCB8fCBlZGl0UGFydCA9PSB0aGlzKSkKLSAgICB7Ci0gICAgICBlZGl0UGFydCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRJbnRlcmZhY2UodGhpcyk7ICAgICAgICAgICAKLSAgICB9ICAgICAgIAotICAgIHJldHVybiBlZGl0UGFydDsKLSAgfSAgCi0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY2Nlc3NpYmxlTmFtZSgpCi0gIHsKLSAgICBMYWJlbCBsYWJlbEZpZ3VyZSA9IGdldExhYmVsRmlndXJlKCk7Ci0gICAgaWYgKGxhYmVsRmlndXJlICE9IG51bGwpIHsKLSAgICAgIHJldHVybiBsYWJlbEZpZ3VyZS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyVHlwZUVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyVHlwZUVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxODQ3YmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlclR5cGVFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Nb3VzZU1vdGlvbkxpc3RlbmVyLlN0dWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5MYXllckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLkRpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5BU0RDQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LlR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5CYXNlTGlua0ljb25GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLk1vZGVsRGlhZ25vc3RpY0luZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLlJvd0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJUeXBlRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJRmVlZGJhY2tIYW5kbGVyLCBJTmFtZWRFZGl0UGFydAoteyAgIAotCXByb3RlY3RlZCBTaW1wbGVEaXJlY3RFZGl0UG9saWN5IHNpbXBsZURpcmVjdEVkaXRQb2xpY3kgPSBuZXcgU2ltcGxlRGlyZWN0RWRpdFBvbGljeSgpOwotCXByb3RlY3RlZCBMYWJlbCBwYXJhbWV0ZXJUeXBlOwotCXByb3RlY3RlZCBSb3dMYXlvdXQgcm93TGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOwotCi0JICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCSAgfQotCQkgIAotCQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9PUEVOKSkgewotCQkJICBzaG93UHJldmlld0RpYWxvZyhudWxsKTsKLQkJICB9Ci0JICB9Ci0JICAKLQlwcm90ZWN0ZWQgTXlNb3VzZUV2ZW50TGlzdGVuZXIgbW91c2VFdmVudExpc3RlbmVyOwotCXByaXZhdGUgQmFzZUxpbmtJY29uRmlndXJlIGxpbmtJY29uRmlndXJlOwotCXByaXZhdGUgRWRpdFBhcnRMaXN0ZW5lciBlZGl0UGFydExpc3RlbmVyOwotCi0JcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLQl7Ci0JCUlGaWd1cmUgZmlndXJlID0gbmV3IFBhbmVsKCkgewotCQkJcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpIHsKLQkJCQlzdXBlci5wYWludChncmFwaGljcyk7Ci0JCQkJUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKTsKLQkJCQkvLyBidWcxNDY5MzIKLQkJCQlwYWludEZvY3VzQ3Vyc29yKG5ldyBSZWN0YW5nbGUoci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0KSwgZ3JhcGhpY3MpOwotCQkJfQotCQl9OwotCQlmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLQotCQlwYXJhbWV0ZXJUeXBlID0gbmV3IExhYmVsKCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0TGFiZWxBbGlnbm1lbnQoTGFiZWwuTEVGVCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNCwxMiw0LDIwKSk7Ci0JCWZpZ3VyZS5hZGQocGFyYW1ldGVyVHlwZSk7Ci0KLQkJLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLQkJLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLQkJLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLQkJaWYgKGlzUmVhZE9ubHkoKSkgCi0JCXsKLQkJCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotCQl9Ci0KLQkJcmV0dXJuIGZpZ3VyZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0JeyAgIAotCQlzdXBlci5yZWZyZXNoVmlzdWFscygpOwotCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIGdldE1vZGVsKCk7Ci0JCVN0cmluZyBuYW1lID0gcGFyYW0uZ2V0Q29tcG9uZW50TmFtZSgpOwotCQlwYXJhbWV0ZXJUeXBlLnNldFRleHQobmFtZSk7Ci0KLQkJSW1hZ2UgaW1hZ2UgPSAoKElUcmVlRWxlbWVudClnZXRNb2RlbCgpKS5nZXRTZWNvbmRhcnlJbWFnZSgpOwotCQlpZiAoaW1hZ2UgIT0gbnVsbCkKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRJY29uKGltYWdlKTsKLQkJfQotCi0JCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLQotCQlMaXN0IGRpYWdub3N0aWNNZXNzYWdlcyA9IHBhcmFtLmdldERpYWdub3N0aWNNZXNzYWdlcygpOwotCQlJdGVyYXRvciBpdCA9IGRpYWdub3N0aWNNZXNzYWdlcy5pdGVyYXRvcigpOwotCQlNb2RlbERpYWdub3N0aWNJbmZvIGVycm9ySW5mbyA9IG51bGw7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgZXJyb3JJbmZvID09IG51bGwpIHsKLQkJCU1vZGVsRGlhZ25vc3RpY0luZm8gdGVtcCA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBpdC5uZXh0KCk7Ci0JCQlpZiAodGVtcC5nZXRUeXBlKCkgPT0gTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFKSB7Ci0JCQkJZXJyb3JJbmZvID0gdGVtcDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChlcnJvckluZm8gIT0gbnVsbCkgewotCQkJcGFyYW1ldGVyVHlwZS5zZXRUZXh0KGVycm9ySW5mby5nZXREZXNjcmlwdGlvblRleHQoKSk7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEZvcmVncm91bmRDb2xvcihlcnJvckluZm8uZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSk7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEljb24obnVsbCk7Ci0JCX0KLQotCQkvLyBGb3JjZSB0aGUgTGlua0ljb25Db2x1bW4gdG8gcmVzaXplIGFuZCByZWxheW91dCBpdHNlbGYuCi0JCWlmIChnZXRJbnRlcmZhY2VFZGl0UGFydCgpICE9IG51bGwpIHsKLQkJCSgoRmlndXJlKSBnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkpLmludmFsaWRhdGUoKTsKLQkJCXJlZnJlc2hMaW5rRmlndXJlKG5ldyBQb2ludCgtMSwgLTEpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSW50ZXJmYWNlRWRpdFBhcnQgZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKSB7Ci0JCUVkaXRQYXJ0IGVwID0gZ2V0UGFyZW50KCk7Ci0JCXdoaWxlIChlcCAhPSBudWxsICYmICEoZXAgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkpIHsKLQkJCWVwID0gZXAuZ2V0UGFyZW50KCk7Ci0JCX0KLQotCQlpZiAoZXAgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkgewotCQkJcmV0dXJuIChJbnRlcmZhY2VFZGl0UGFydCkgZXA7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsJIAkJICAgICAgICAgIAotCQlmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JCWZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoZmlndXJlLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLQl9Ci0KLQlwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JCXJldHVybiBwYXJhbWV0ZXJUeXBlOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0JewotCQlzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkJaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0JCWluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgc2ltcGxlRGlyZWN0RWRpdFBvbGljeSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pIHsKLQkJaWYgKCFpc0ZpbGVSZWFkT25seSgpICYmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IChoaXRUZXN0KHBhcmFtZXRlclR5cGUsIGN1cnNvckxvY2F0aW9uKSAmJiAhaXNSZWFkT25seSgpKSkpIHsgCi0JCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIGdldE1vZGVsKCk7Ci0KLQkJCVR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyID0gbmV3IFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlcihwYXJhbSwgdGhpcywgcGFyYW1ldGVyVHlwZSk7ICAgCi0JCQlzaW1wbGVEaXJlY3RFZGl0UG9saWN5LnNldERlbGVnYXRlKG1hbmFnZXIpOwotCQkJbWFuYWdlci5zaG93KCk7Ci0KLQotCQl9Ci0JCWVsc2UgaWYgKHBhcmFtZXRlclR5cGUuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBGaWd1cmUgJiYKLQkJCQkgaGl0VGVzdEZpZ3VyZSgoRmlndXJlKSBwYXJhbWV0ZXJUeXBlLmdldFBhcmVudCgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0JCQlkb09wZW5OZXdFZGl0b3IoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGFjdGl2YXRlKCkgewotCQlzdXBlci5hY3RpdmF0ZSgpOwotCi0JCUlGaWd1cmUgcHJpbWFyeUxheWVyID0gZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuUFJJTUFSWV9MQVlFUik7Ci0JCW1vdXNlRXZlbnRMaXN0ZW5lciA9IG5ldyBNeU1vdXNlRXZlbnRMaXN0ZW5lcigpOwotCQlwcmltYXJ5TGF5ZXIuYWRkTW91c2VNb3Rpb25MaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCQlwcmltYXJ5TGF5ZXIuYWRkTW91c2VMaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCQkKLQkJZWRpdFBhcnRMaXN0ZW5lciA9IG5ldyBFZGl0UGFydExpc3RlbmVyKCkgewotCi0JCQlwdWJsaWMgdm9pZCBjaGlsZEFkZGVkKEVkaXRQYXJ0IGNoaWxkLCBpbnQgaW5kZXgpIHsKLQkJCQkvLyBkbyBub3RoaW5nCi0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoRWRpdFBhcnQgZWRpdHBhcnQpIHsKLQkJCQkvLyBkbyBub3RoaW5nCi0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChFZGl0UGFydCBlZGl0cGFydCkgewotCQkJCS8vIGRvIG5vdGhpbmcKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgcmVtb3ZpbmdDaGlsZChFZGl0UGFydCBjaGlsZCwgaW50IGluZGV4KSB7Ci0JCQkJLy8gZG8gbm90aGluZwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBzZWxlY3RlZFN0YXRlQ2hhbmdlZChFZGl0UGFydCBlZGl0cGFydCkgewotCQkJCUlPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgb3BlbkhlbHBlciA9IGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCk7Ci0JCQkJaWYgKG9wZW5IZWxwZXIgIT0gbnVsbCAmJiBvcGVuSGVscGVyLmxpbmtBcHBsaWNhYmxlKCkpIHsKLQkJCQkJaWYgKCFmaWd1cmVDb250YWluc0xpbmtGaWd1cmUoZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpKSkgewotCQkJCQkJbGlua0ljb25GaWd1cmUgPSBuZXcgQmFzZUxpbmtJY29uRmlndXJlKFBhcmFtZXRlclR5cGVFZGl0UGFydC50aGlzKTsKLQkJCQkJCWdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKS5hZGQobGlua0ljb25GaWd1cmUpOwotCQkJCQl9Ci0KLQkJCQkJaWYgKG9wZW5IZWxwZXIuaXNWYWxpZCgpKSB7Ci0JCQkJCQlsaW5rSWNvbkZpZ3VyZS5zZXRMaW5rSWNvblN0eWxlKEJhc2VMaW5rSWNvbkZpZ3VyZS5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSk7Ci0JCQkJCQlpZiAoZWRpdHBhcnQuZ2V0U2VsZWN0ZWQoKSA9PSBFZGl0UGFydC5TRUxFQ1RFRF9OT05FKQotCQkJCQkJCXVuZW1waGFzaXplTGlua0ZpZ3VyZSgpOwotCQkJCQkJZWxzZQotCQkJCQkJCWVtcGhhc2l6ZUxpbmtGaWd1cmUoKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWxpbmtJY29uRmlndXJlLnNldExpbmtJY29uU3R5bGUoQmFzZUxpbmtJY29uRmlndXJlLklOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlpZiAoY29udGFpbnNMaW5rRmlndXJlKCkpIHsKLQkJCQkJCWdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKS5yZW1vdmUobGlua0ljb25GaWd1cmUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfX07Ci0JCQkKLQkJYWRkRWRpdFBhcnRMaXN0ZW5lcihlZGl0UGFydExpc3RlbmVyKTsJCQotCX0KLQotCXB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKSB7Ci0JCWlmIChtb3VzZUV2ZW50TGlzdGVuZXIgIT0gbnVsbCkgewotCQkJSUZpZ3VyZSBwcmltYXJ5TGF5ZXIgPSBnZXRMYXllcihMYXllckNvbnN0YW50cy5QUklNQVJZX0xBWUVSKTsKLQkJCXByaW1hcnlMYXllci5yZW1vdmVNb3VzZU1vdGlvbkxpc3RlbmVyKG1vdXNlRXZlbnRMaXN0ZW5lcik7Ci0JCQlwcmltYXJ5TGF5ZXIucmVtb3ZlTW91c2VMaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCQl9Ci0KLQkJaWYgKGVkaXRQYXJ0TGlzdGVuZXIgIT0gbnVsbCkgewotCQkJcmVtb3ZlRWRpdFBhcnRMaXN0ZW5lcihlZGl0UGFydExpc3RlbmVyKTsKLQkJfQotCQkKLQkJSW50ZXJmYWNlRWRpdFBhcnQgZXAgPSBnZXRJbnRlcmZhY2VFZGl0UGFydCgpOwotCQlpZiAoZXAgIT0gbnVsbCAmJiBsaW5rSWNvbkZpZ3VyZSAhPSBudWxsKSB7Ci0JCQlJRmlndXJlIGZpZyA9IGVwLmdldExpbmtJY29uQ29sdW1uKCk7Ci0JCQlpZiAoZmlnLmdldENoaWxkcmVuKCkuY29udGFpbnMobGlua0ljb25GaWd1cmUpKSB7Ci0JCQkJZXAuZ2V0TGlua0ljb25Db2x1bW4oKS5yZW1vdmUobGlua0ljb25GaWd1cmUpOwotCQkJfQotCQl9Ci0JfQotCi0KLQlwcml2YXRlIGNsYXNzIFNpbXBsZURpcmVjdEVkaXRQb2xpY3kgZXh0ZW5kcyBEaXJlY3RFZGl0UG9saWN5IAotCXsKLQkJcHJvdGVjdGVkIFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBkZWxlZ2F0ZTsKLQotCQlwdWJsaWMgdm9pZCBzZXREZWxlZ2F0ZShUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIgZGVsZWdhdGUpCi0JCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQl0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQgZ2V0RGlyZWN0RWRpdENvbW1hbmQoZmluYWwgRGlyZWN0RWRpdFJlcXVlc3QgcmVxdWVzdCkgCi0JCXsgCi0JCQlyZXR1cm4gbmV3IENvbW1hbmQoKSAvL0Fic3RyYWN0Q29tbWFuZCgpCi0JCQl7Ci0JCQkJcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0JCQkJeyAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkJCWlmIChkZWxlZ2F0ZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlkZWxlZ2F0ZS5wZXJmb3JtRWRpdChyZXF1ZXN0LmdldENlbGxFZGl0b3IoKSk7Ci0JCQkJCX0gIAotCQkJCX0gICAgIAotCi0JCQkJcHVibGljIHZvaWQgcmVkbygpCi0JCQkJewotCQkJCX0gIAotCi0JCQkJcHVibGljIHZvaWQgdW5kbygpCi0JCQkJewotCQkJCX0gICAgIAotCi0JCQkJcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpCi0JCQkJewotICAgICAgICAgICAgICAgICAgLy8gZG9udCBleGVjdXRlIGlmIG5hbWUgaXMgbm90IGNoYW5naW5nCi0gICAgICAgICAgICAgICAgICBJUGFyYW1ldGVyIHBhcmFtZXRlciA9IChJUGFyYW1ldGVyKWdldE1vZGVsKCk7Ci0gICAgICAgICAgICAgICAgICBPYmplY3QgbmV3VmFsdWUgPSAoKEFTRENDb21ibylyZXF1ZXN0LmdldENlbGxFZGl0b3IoKS5nZXRDb250cm9sKCkpLmdldFRleHQoKTsKLSAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW5ld1ZhbHVlLmVxdWFscyhwYXJhbWV0ZXIuZ2V0Q29tcG9uZW50TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCQkJICAgIH0KLQkJCX07Ci0JCX0KLQotCQlwcm90ZWN0ZWQgdm9pZCBzaG93Q3VycmVudEVkaXRWYWx1ZShEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSAKLQkJeyAgICAgIAotCQkJLy9oYWNrIHRvIHByZXZlbnQgYXN5bmMgbGF5b3V0IGZyb20gcGxhY2luZyB0aGUgY2VsbCBlZGl0b3IgdHdpY2UuCi0JCQlnZXRIb3N0RmlndXJlKCkuZ2V0VXBkYXRlTWFuYWdlcigpLnBlcmZvcm1VcGRhdGUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0JeyAgICAgICAgIAotCQlFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLQkJaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCAmJiAoZWRpdFBhcnQgPT0gbnVsbCB8fCBlZGl0UGFydCA9PSB0aGlzKSkKLQkJewotCQkJZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0SW50ZXJmYWNlKHRoaXMpOwotCQl9ICAgCi0JCXJldHVybiBlZGl0UGFydDsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIE15TW91c2VFdmVudExpc3RlbmVyIGV4dGVuZHMgU3R1YiBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBtb3VzZVJlbGVhc2VkKE1vdXNlRXZlbnQgbWUpIHsgfQotCQlwdWJsaWMgdm9pZCBtb3VzZURvdWJsZUNsaWNrZWQoTW91c2VFdmVudCBtZSkgeyB9Ci0KLQkJcHVibGljIHZvaWQgbW91c2VNb3ZlZChNb3VzZUV2ZW50IG1lKSB7Ci0JCQlQb2ludCBwb2ludGVyID0gbWUuZ2V0TG9jYXRpb24oKTsKLQkJCXJlZnJlc2hMaW5rRmlndXJlKHBvaW50ZXIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbW91c2VQcmVzc2VkKE1vdXNlRXZlbnQgbWUpIHsKLQkJCVBvaW50IHBvaW50ZXIgPSBtZS5nZXRMb2NhdGlvbigpOwotCQkJb3BlbkV4dGVybmFsRWRpdG9yKHBvaW50ZXIpOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBtb3VzZUhvdmVyKE1vdXNlRXZlbnQgbWUpIHsKLQkJCVBvaW50IHBvaW50ZXIgPSBtZS5nZXRMb2NhdGlvbigpOwotCQkJc2hvd1ByZXZpZXdEaWFsb2cocG9pbnRlcik7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNob3dQcmV2aWV3RGlhbG9nKFBvaW50IHBvaW50KSB7Ci0JCVJlY3RhbmdsZSBsaW5rRmlnQm91bmRzID0gZ2V0TGlua0ZpZ3VyZUJvdW5kcygpOwotCQlpZiAobGlua0ZpZ0JvdW5kcyA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlSZWN0YW5nbGUgdGVzdGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUobGlua0ZpZ0JvdW5kcy54LCBsaW5rRmlnQm91bmRzLnksIDAsIGxpbmtGaWdCb3VuZHMuaGVpZ2h0KTsKLQotCQlpZiAocG9pbnRlckluUmFuZ2UodGVzdGJvdW5kcywgcG9pbnQpKSB7Ci0JCQlJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIGhlbHBlciA9IGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCk7Ci0JCQloZWxwZXIuc2hvd1ByZXZpZXcoKTsKLQkJfQotCX0KLQotCS8vIE1ldGhvZHMgYmVsb3cgaGFuZGxlIHRoZSBMaW5rIEZpZ3VyZS4uLi4uCi0JcHJpdmF0ZSB2b2lkIGVtcGhhc2l6ZUxpbmtGaWd1cmUoKSB7Ci0JCWxpbmtJY29uRmlndXJlLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmJsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCB1bmVtcGhhc2l6ZUxpbmtGaWd1cmUoKSB7Ci0JCWxpbmtJY29uRmlndXJlLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIHBvaW50ZXJJblJhbmdlKFJlY3RhbmdsZSBmaWdCb3VuZHMsIFBvaW50IHBvaW50ZXIpIHsKLQkJaWYgKHBvaW50ZXIgPT0gbnVsbCkgewotCQkgIHJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlSZWN0YW5nbGUgbGlua0JvdW5kcyA9IGdldExpbmtGaWd1cmVCb3VuZHMoKTsKLQotCQlpbnQgZW50aXJlWCA9IGZpZ0JvdW5kcy54OwotCQlpbnQgZW50aXJlWSA9IGZpZ0JvdW5kcy55OwotCQlpbnQgZW50aXJlV2lkdGggPSBmaWdCb3VuZHMud2lkdGggKyBsaW5rQm91bmRzLndpZHRoOwotCQlpbnQgZW50aXJlSGVpZ2h0ID0gZmlnQm91bmRzLmhlaWdodDsKLQkJUmVjdGFuZ2xlIGVudGlyZUJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoZW50aXJlWCwgZW50aXJlWSwgZW50aXJlV2lkdGgsIGVudGlyZUhlaWdodCk7Ci0KLQkJcmV0dXJuIGVudGlyZUJvdW5kcy5jb250YWlucyhwb2ludGVyKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMaW5rRmlndXJlKCkgewotCQlJdGVyYXRvciBpdCA9IGdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKS5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJaWYgKGl0ZW0uZXF1YWxzKGxpbmtJY29uRmlndXJlKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgUmVjdGFuZ2xlIGdldExpbmtGaWd1cmVCb3VuZHMoKSB7Ci0JCWlmIChjb250YWluc0xpbmtGaWd1cmUoKSkgewotCQkJcmV0dXJuIGxpbmtJY29uRmlndXJlLmdldEJvdW5kcygpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0gCi0JcHJpdmF0ZSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCkgewotCQlJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIG9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciA9IG51bGw7Ci0JCQlpZiAoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkgIT0gbnVsbCkgewotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKSAhPSBudWxsKSB7Ci0JCQkJCU9iamVjdCBhZGFwdGVkID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuY2xhc3MpOwotCQkJCQlpZiAoYWRhcHRlZCBpbnN0YW5jZW9mIElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIpIHsKLQkJCQkJCW9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciA9IChJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSBhZGFwdGVkOwotCQkJCQkJb3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLnNldE1vZGVsKGdldE1vZGVsKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCXJldHVybiBvcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlZnJlc2hMaW5rRmlndXJlKFBvaW50IHBvaW50KSB7Ci0JCVJlY3RhbmdsZSBmaWdCb3VuZHMgPSBnZXRGaWd1cmUoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRCb3VuZHMoKTsKLQotCQlJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIG9wZW5IZWxwZXIgPSBnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpOwotCQlpZiAob3BlbkhlbHBlciAhPSBudWxsICYmIG9wZW5IZWxwZXIubGlua0FwcGxpY2FibGUoKSkgewotCQkJaWYgKCFmaWd1cmVDb250YWluc0xpbmtGaWd1cmUoZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpKSkgewotCQkJCWxpbmtJY29uRmlndXJlID0gbmV3IEJhc2VMaW5rSWNvbkZpZ3VyZSh0aGlzKTsKLQkJCQlnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkuYWRkKGxpbmtJY29uRmlndXJlKTsKLQkJCX0KLQotCQkJaWYgKG9wZW5IZWxwZXIuaXNWYWxpZCgpKSB7Ci0JCQkJbGlua0ljb25GaWd1cmUuc2V0TGlua0ljb25TdHlsZShCYXNlTGlua0ljb25GaWd1cmUuVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpOwotCi0JCQkJaWYgKHBvaW50ZXJJblJhbmdlKGZpZ0JvdW5kcywgcG9pbnQpKSB7Ci0JCQkJCWVtcGhhc2l6ZUxpbmtGaWd1cmUoKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCXVuZW1waGFzaXplTGlua0ZpZ3VyZSgpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCWxpbmtJY29uRmlndXJlLnNldExpbmtJY29uU3R5bGUoQmFzZUxpbmtJY29uRmlndXJlLklOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGNvbnRhaW5zTGlua0ZpZ3VyZSgpKSB7Ci0JCQkJZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpLnJlbW92ZShsaW5rSWNvbkZpZ3VyZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZmlndXJlQ29udGFpbnNMaW5rRmlndXJlKElGaWd1cmUgcGFyZW50KSB7Ci0JCUl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJaWYgKGl0Lm5leHQoKS5lcXVhbHMobGlua0ljb25GaWd1cmUpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIG9wZW5FeHRlcm5hbEVkaXRvcihQb2ludCBwb2ludCkgewotCQlSZWN0YW5nbGUgbGlua0ZpZ0JvdW5kcyA9IGdldExpbmtGaWd1cmVCb3VuZHMoKTsKLQkJaWYgKGxpbmtGaWdCb3VuZHMgPT0gbnVsbCB8fCBnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCVJlY3RhbmdsZSB0ZXN0Ym91bmRzID0gbmV3IFJlY3RhbmdsZShsaW5rRmlnQm91bmRzLngsIGxpbmtGaWdCb3VuZHMueSwgMCwgbGlua0ZpZ0JvdW5kcy5oZWlnaHQpOwotCi0JCWlmIChnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpLmxpbmtBcHBsaWNhYmxlKCkgJiYgcG9pbnRlckluUmFuZ2UodGVzdGJvdW5kcywgcG9pbnQpKSB7Ci0JCQkvLyBPcGVuIGluIFhTRCBFZGl0b3IKLQkJCWdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCkub3BlbkV4dGVybmFsRWRpdG9yKCk7CQkJCSAgCi0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEFjY2Vzc2libGVOYW1lKCkKLQl7Ci0JICBMYWJlbCBsYWJlbEZpZ3VyZSA9IGdldExhYmVsRmlndXJlKCk7Ci0JICBpZiAobGFiZWxGaWd1cmUgIT0gbnVsbCkgewotCSAgICByZXR1cm4gbGFiZWxGaWd1cmUuZ2V0VGV4dCgpOwotCSAgfQotCSAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1NlcnZpY2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1NlcnZpY2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDM4NjJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9TZXJ2aWNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MaW5lQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRExhYmVsRGlyZWN0RWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5IZWFkaW5nRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSU5hbWVkRWRpdFBhcnQKLXsKLSAgSUZpZ3VyZSBjb250ZW50UGFuZTsKLSAgSGVhZGluZ0ZpZ3VyZSBoZWFkaW5nRmlndXJlOwotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKQotICB7Ci0JICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRXaWR0aCgyKTsKLS8vCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5kYXJrQmx1ZSk7Ci0JICBoZWFkaW5nRmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwkgIAotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKQotICB7Ci0JICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRXaWR0aCgxKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotCSAgaGVhZGluZ0ZpZ3VyZS5zZXRTZWxlY3RlZChmYWxzZSk7Ci0JICBmaWd1cmUucmVwYWludCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgZmlndXJlLnNldEJvcmRlcihuZXcgTGluZUJvcmRlcigxKSk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsgICAgCi0gICAgaGVhZGluZ0ZpZ3VyZSA9IG5ldyBIZWFkaW5nRmlndXJlKCk7Ci0gICAgCi0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGdldE1vZGVsKCkpLmdldEltYWdlKCkpOwkKLSAgICB9Ci0gICAJCi0gICAJZmlndXJlLmFkZChoZWFkaW5nRmlndXJlKTsKLSAgICAgICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgRmlndXJlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBncmFwaGljcykgCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgIGJvb2xlYW4gaXNGaXJzdCA9IGZhbHNlOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBGaWd1cmUgZmlndXJlID0gKEZpZ3VyZSlpLm5leHQoKTsgICAgICAgICAgICAgIAotICAgICAgICBpZiAoaXNGaXJzdCkKLSAgICAgICAgewotICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgICAgfSAgCi0gICAgICAgIGVsc2UKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVjdGFuZ2xlIHIgPSBmaWd1cmUuZ2V0Qm91bmRzKCk7ICAgICAgICAgICAgICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSArMSwgci54ICsgci53aWR0aCwgci55ICsgMSk7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgICAgfQotICAgIH07Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0MiA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0Mi5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOyAgIAotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dDIpOwotICAgIGZpZ3VyZS5hZGQoY29udGVudFBhbmUpOwotICAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpIAotICAgIHsKLSAgICAgIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBoZWFkaW5nRmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pewotCSAgaWYgKCFpc0ZpbGVSZWFkT25seSgpICYmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IGhpdFRlc3QoaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLCBjdXJzb3JMb2NhdGlvbikgJiYgIWlzUmVhZE9ubHkoKSkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGhpdFRlc3QoaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLCBjdXJzb3JMb2NhdGlvbikgfHwKLSAgICAgICAgICAgICAgaGl0VGVzdEZpZ3VyZShoZWFkaW5nRmlndXJlLCBjdXJzb3JMb2NhdGlvbikpICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkgIHJldHVybiBoZWFkaW5nRmlndXJlLmdldExhYmVsKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotICAgIElTZXJ2aWNlIHNlcnZpY2UgPSAoSVNlcnZpY2UpZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gc2VydmljZS5nZXRFbmRQb2ludHMoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7IAotICAgIElTZXJ2aWNlIHNlcnZpY2UgPSAoSVNlcnZpY2UpZ2V0TW9kZWwoKTsKLSAgICBoZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoc2VydmljZS5pc1JlYWRPbmx5KCkpOwotICAgIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRUZXh0KHNlcnZpY2UuZ2V0TmFtZSgpKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjY2Vzc2libGVOYW1lKCkKLSAgewotICAgIExhYmVsIGxhYmVsRmlndXJlID0gZ2V0TGFiZWxGaWd1cmUoKTsKLSAgICBpZiAobGFiZWxGaWd1cmUgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIGxhYmVsRmlndXJlLmdldFRleHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKSB7Ci0JICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLk5PUlRIICkKLQkgIHsKLQkJICByZXR1cm4gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0UHJldlNpYmxpbmcodGhpcyk7Ci0JICB9ICAgIAotCi0JICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLkVBU1QgKQotCSAgewotCQkgIHJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRGaXJzdEJpbmRpbmcodGhpcyk7Ci0JICB9Ci0KLQkgIHJldHVybiBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0Fic3RyYWN0TW9kZWxDb2xsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYTNlOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0Fic3RyYWN0TW9kZWxDb2xsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBpbXBsZW1lbnRzIElBU0RPYmplY3QsIElUcmVlRWxlbWVudAotewotICBJQVNET2JqZWN0IG1vZGVsOwotICBTdHJpbmcga2luZDsKLSAgCi0gIHB1YmxpYyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbihJQVNET2JqZWN0IG1vZGVsLCBTdHJpbmcga2luZCkKLSAgewotICAgIHRoaXMubW9kZWwgPSBtb2RlbDsKLSAgICB0aGlzLmtpbmQgPSBraW5kOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNb2RlbChJQVNET2JqZWN0IG1vZGVsKQotICB7Ci0gICAgdGhpcy5tb2RlbCA9IG1vZGVsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRLaW5kKCkKLSAgewotICAgIHJldHVybiBraW5kOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0S2luZChTdHJpbmcga2luZCkKLSAgewotICAgIHRoaXMua2luZCA9IGtpbmQ7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgewotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIG1vZGVsLnJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKQotICB7Ci0gICAgbW9kZWwudW5yZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgfQotCi0gIHB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbHVtbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhOWZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ0NvbHVtbiBleHRlbmRzIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIHsKLQkgIHB1YmxpYyBCaW5kaW5nQ29sdW1uKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCSAgICBzdXBlcihkZXNjcmlwdGlvbiwgIkJpbmRpbmdDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCQlMaXN0IGJpbmRpbmdzID0gKChJRGVzY3JpcHRpb24pbW9kZWwpLmdldEJpbmRpbmdzKCk7Ci0JCQlDb2xsZWN0aW9ucy5zb3J0KGJpbmRpbmdzLCBuZXcgQmluZGluZ0NvbXBhcmF0b3IoKSk7Ci0JCQlPYmplY3QgYXJyYXlbXSA9IGJpbmRpbmdzLnRvQXJyYXkoKTsKLQkJCQotCQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJdHJlZUVsZW1lbnRbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgYXJyYXlbaW5kZXhdOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gdHJlZUVsZW1lbnQ7Ci0JICB9Ci0KLQkgIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQkgIElUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gZ2V0Q2hpbGRyZW4oKTsKLQkJICBpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJICByZXR1cm4gdHJ1ZTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCSAgcmV0dXJuICJkZWZpbml0aW9uIjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICBwcml2YXRlIGNsYXNzIEJpbmRpbmdDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvciB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCQlpZiAobzEgaW5zdGFuY2VvZiBJQmluZGluZyAmJiBvMiBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMSA9ICgoSUJpbmRpbmcpIG8xKS5nZXRJbnRlcmZhY2UoKTsKLQkJCQkJSUludGVyZmFjZSBpbnRlcmZhY2UyID0gKChJQmluZGluZykgbzIpLmdldEludGVyZmFjZSgpOwotCQkJCQkKLQkJCQkJaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBuYW1lMSA9ICgoSU5hbWVkT2JqZWN0KSBpbnRlcmZhY2UxKS5nZXROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgbmFtZTIgPSAoKElOYW1lZE9iamVjdCkgaW50ZXJmYWNlMikuZ2V0TmFtZSgpOwotCQkJCQkJcmV0dXJuIG5hbWUxLmNvbXBhcmVUbyhuYW1lMik7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoaW50ZXJmYWNlMSAhPSBudWxsICYmIGludGVyZmFjZTIgPT0gbnVsbCkgewotCQkJCQkJcmV0dXJuIC0xOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGludGVyZmFjZTEgPT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJCXJldHVybiAxOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCXJldHVybiAwOwotCQkJfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjNkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgewotCXByaXZhdGUgT2JqZWN0IG1vZGVsOwotCQotCXB1YmxpYyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKE9iamVjdCBtb2RlbCkgewotCQl0aGlzLm1vZGVsID0gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSUFjdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSUFjdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMzcxNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0lBY3Rpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1wdWJsaWMgaW50ZXJmYWNlIElBY3Rpb25Qcm92aWRlcgotewotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JbnRlcmZhY2VDb2x1bW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JbnRlcmZhY2VDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkMGYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSW50ZXJmYWNlQ29sdW1uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnRlcmZhY2VDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JcHVibGljIEludGVyZmFjZUNvbHVtbihJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoZGVzY3JpcHRpb24sICJJbnRlcmZhY2VDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgaW50ZXJmYWNlcyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRJbnRlcmZhY2VzKCk7CQkKLQkJQ29tcGFyYXRvciBjb21wYXJlID0gbmV3IE5hbWVkT2JqZWN0Q29tcGFyYXRvcigpOwotCQlDb2xsZWN0aW9ucy5zb3J0KGludGVyZmFjZXMsIGNvbXBhcmUpOwotCQlPYmplY3QgYXJyYXlbXSA9IGludGVyZmFjZXMudG9BcnJheSgpOwotCQkKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlJVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnRbXSA9IGdldENoaWxkcmVuKCk7Ci0JCWlmICh0cmVlRWxlbWVudC5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAiZGVmaW5pdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBOYW1lZE9iamVjdENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yewotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCWlmIChvMSBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCAmJiBvMiBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJCVN0cmluZyBuYW1lMSA9ICgoSU5hbWVkT2JqZWN0KSBvMSkuZ2V0TmFtZSgpOwotCQkJCVN0cmluZyBuYW1lMiA9ICgoSU5hbWVkT2JqZWN0KSBvMikuZ2V0TmFtZSgpOwotCQkJCXJldHVybiBuYW1lMS5jb21wYXJlVG8obmFtZTIpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvU2VydmljZUNvbHVtbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL1NlcnZpY2VDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2NTk3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvU2VydmljZUNvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLkVuZFBvaW50Q29tcGFyYXRvcjsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JcHVibGljIFNlcnZpY2VDb2x1bW4oSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGRlc2NyaXB0aW9uLCAiU2VydmljZUNvbHVtbiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBzZXJ2aWNlcyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRTZXJ2aWNlcygpOwotCQlDb2xsZWN0aW9ucy5zb3J0KHNlcnZpY2VzLCBuZXcgU2VydmljZUNvbXBhcmF0b3IoKSk7Ci0JCU9iamVjdCBhcnJheVtdID0gc2VydmljZXMudG9BcnJheSgpOwotCQkKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBnZXRDaGlsZHJlbigpOwotCQlpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gImRlZmluaXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgY2xhc3MgU2VydmljZUNvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlpZiAobzEgaW5zdGFuY2VvZiBJU2VydmljZSAmJiBvMiBpbnN0YW5jZW9mIElTZXJ2aWNlKSB7Ci0JCQkJSUVuZFBvaW50IGVuZFBvaW50MSA9IGdldEZpcnN0QXNzb2NpYXRlZEVuZFBvaW50KChJU2VydmljZSkgbzEpOwotCQkJCUlFbmRQb2ludCBlbmRQb2ludDIgPSBnZXRGaXJzdEFzc29jaWF0ZWRFbmRQb2ludCgoSVNlcnZpY2UpIG8yKTsKLQkJCQkKLQkJCQlFbmRQb2ludENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBFbmRQb2ludENvbXBhcmF0b3IoKTsKLQkJCQlyZXR1cm4gY29tcGFyYXRvci5jb21wYXJlKGVuZFBvaW50MSwgZW5kUG9pbnQyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJCi0JCXByaXZhdGUgSUVuZFBvaW50IGdldEZpcnN0QXNzb2NpYXRlZEVuZFBvaW50KElTZXJ2aWNlIHNlcnZpY2UpIHsKLQkJCUl0ZXJhdG9yIGVuZFBvaW50cz0gc2VydmljZS5nZXRFbmRQb2ludHMoKS5pdGVyYXRvcigpOwotCQkJCi0JCQl3aGlsZSAoZW5kUG9pbnRzLmhhc05leHQoKSkgewotCQkJCUlFbmRQb2ludCB0ZW1wRW5kUG9pbnQgPSAoSUVuZFBvaW50KSBlbmRQb2ludHMubmV4dCgpOwotCQkJCWlmICh0ZW1wRW5kUG9pbnQuZ2V0QmluZGluZygpICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIHRlbXBFbmRQb2ludDsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBudWxsOwotCQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzMDFkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYucmVxdWVzdHMuQ2hhbmdlQm91bmRzUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REcmFnQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERyYWdSZW9yZGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLk1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTRERyYWdBbmREcm9wQ29tbWFuZCBleHRlbmRzIENvbW1hbmQgewotCSAgcHJvdGVjdGVkIEVkaXRQYXJ0Vmlld2VyIHZpZXdlcjsgICAgCi0JICBwcm90ZWN0ZWQgQ2hhbmdlQm91bmRzUmVxdWVzdCByZXF1ZXN0OwotCSAgcHJvdGVjdGVkIFBvaW50IGxvY2F0aW9uOwotCSAgcHJvdGVjdGVkIEFTRERyYWdBY3Rpb24gZHJhZ0FjdGlvbjsgICAgCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBjYW5FeGVjdXRlID0gZmFsc2U7Ci0KLQkgIHB1YmxpYyBBU0REcmFnQW5kRHJvcENvbW1hbmQoRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAgIHRoaXMudmlld2VyID0gdmlld2VyOwotCSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotCi0JICAgIGxvY2F0aW9uID0gcmVxdWVzdC5nZXRMb2NhdGlvbigpOyAgIAotCSAgICBFZGl0UGFydCB0YXJnZXRFZGl0UGFydCA9IHZpZXdlci5maW5kT2JqZWN0QXQobG9jYXRpb24pOyAKLQotCSAgICBpZiAodGFyZ2V0RWRpdFBhcnQgaW5zdGFuY2VvZiBQYXJhbWV0ZXJFZGl0UGFydCB8fCB0YXJnZXRFZGl0UGFydCBpbnN0YW5jZW9mIE1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydCkgewotCSAgICAJKChHcmFwaGljYWxFZGl0UGFydCl2aWV3ZXIuZ2V0Um9vdEVkaXRQYXJ0KCkpLmdldEZpZ3VyZSgpLnRyYW5zbGF0ZVRvUmVsYXRpdmUobG9jYXRpb24pOwotCSAgICAJR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydDsKLQkgICAgCVZlY3RvciBkcmFnQWN0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLQkgICAgCWlmIChyZXF1ZXN0LmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfQUREKSkgeyAvLyBUaGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgUkVRX0FERC4uLi4KLQkgICAgCQlMaXN0IGxpc3QgPSByZXF1ZXN0LmdldEVkaXRQYXJ0cygpOwotCSAgICAJCWlmIChsaXN0LnNpemUoKSA8PSAwKSB7Ci0JICAgIAkJCWNhbkV4ZWN1dGUgPSBmYWxzZTsKLQkgICAgCQkJcmV0dXJuOwotCSAgICAJCX0KLQkgICAgCQkKLQkgICAgCQkvLyBHcmFiYmluZyB0aGUgZmlzdCBzZWxlY3Rpb24KLQkgICAgCQltb3ZpbmdDaGlsZEVkaXRQYXJ0ID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBsaXN0LmdldCgwKTsKLQkgICAgCQlPYmplY3QgbW9kZWwgPSBtb3ZpbmdDaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JICAgIAkJRWRpdFBhcnQgcG9pbnRlckVkaXRQYXJ0ID0gdmlld2VyLmZpbmRPYmplY3RBdChsb2NhdGlvbik7Ci0JICAgIAkJCi0JICAgIAkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCSAgICAJCQlkcmFnQWN0aW9ucy5hZGQobmV3IEFTRERyYWdSZW9yZGVyQWN0aW9uKG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJFZGl0UGFydCwgZ2V0UG9pbnRlckxvY2F0aW9uKGxvY2F0aW9uKSkpOwotCSAgICAJCX0KLQkgICAgCQllbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAgIAkJCUlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vZGVsOwotCSAgICAJCQlpZiAobWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCB8fCBtZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCSAgICAJCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBBU0REcmFnUmVvcmRlckFjdGlvbihtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyRWRpdFBhcnQsIGdldFBvaW50ZXJMb2NhdGlvbihsb2NhdGlvbikpKTsKLS8vCSAgICAJCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBXU0RMRHJhZ1NldE1lc3NhZ2VBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBsb2NhdGlvbikpOwotCSAgICAJCQl9Ci0JICAgIAkJfQotCSAgICAJCQotLy8JICAgIAkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBGYXVsdCkgewotLy8JICAgIAkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBXU0RMRHJhZ1NldE1lc3NhZ2VBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBsb2NhdGlvbikpOwotLy8JICAgIAkJfSAgICAgICAgICAgIAotCSAgICAJfQotLy8JICAgIAllbHNlIGlmIChyZXF1ZXN0LmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfQ0xPTkUpKSB7Ci0vLwkgICAgCUxpc3QgbGlzdCA9IHJlcXVlc3QuZ2V0RWRpdFBhcnRzKCk7Ci0vLwkgICAgCWlmIChsaXN0LnNpemUoKSA+IDApCi0vLwkgICAgCXsKLS8vCSAgICAJLy8gR3JhYmJpbmcgdGhlIGZpc3Qgc2VsZWN0aW9uCi0vLwkgICAgCW1vdmluZ0NoaWxkRWRpdFBhcnQgPSAoV1NETFRyZWVOb2RlRWRpdFBhcnQpIGxpc3QuZ2V0KDApOwotLy8JICAgIAkKLS8vCSAgICAJZHJhZ0FjdGlvbnMuYWRkKG5ldyBDb3B5V1NETEVsZW1lbnRBY3Rpb24odmlld2VyLAotLy8JICAgIAkoV1NETEVsZW1lbnQpIG1vdmluZ0NoaWxkRWRpdFBhcnQuZ2V0TW9kZWwoKSwKLS8vCSAgICAJKFdTRExFbGVtZW50KSB0YXJnZXRFZGl0UGFydC5nZXRNb2RlbCgpLAotLy8JICAgIAludWxsKSk7Ci0vLwkgICAgCX0KLS8vCSAgICAJfQotCSAgICAJCi0JICAgIAlJdGVyYXRvciBpdCA9IGRyYWdBY3Rpb25zLml0ZXJhdG9yKCk7Ci0JICAgIAl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JICAgIAkJZHJhZ0FjdGlvbiA9IChBU0REcmFnQWN0aW9uKSBpdC5uZXh0KCk7Ci0JICAgIAkJY2FuRXhlY3V0ZSA9IGRyYWdBY3Rpb24uY2FuRXhlY3V0ZSgpOwotCSAgICAJCWlmIChjYW5FeGVjdXRlKQotCSAgICAJCQlicmVhazsKLQkgICAgCX0KLQkgICAgfQotCSAgfQotCSAgCi0JICBwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkKLQkgIHsgCi0JICAgIHJldHVybiBjYW5FeGVjdXRlOwotCSAgfSAgICAgCi0JICAKLQkgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JICAgIGlmIChjYW5FeGVjdXRlKQotCSAgICB7IAotCSAgICAgIGRyYWdBY3Rpb24ucnVuKCk7IAotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRmlndXJlIGdldEZlZWRiYWNrRmlndXJlKCkgewotCSAgCWlmIChkcmFnQWN0aW9uICE9IG51bGwpIHsKLQkgIAkJcmV0dXJuIGRyYWdBY3Rpb24uZ2V0RmVlZGJhY2tGaWd1cmUoKTsKLQkgIAl9Ci0JICAJZWxzZSB7Ci0JICAJCXJldHVybiBudWxsOwotCSAgCX0KLQkgIH0KLQkgIAotCSAgLyoKLQkgICAqIFRoaXMgbWV0aG9kIGNvbXBlbnNhdGVzIGZvciB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24KLQkgICAqLwotCSAgcHJpdmF0ZSBQb2ludCBnZXRQb2ludGVyTG9jYXRpb24oUG9pbnQgb3JpZ1BvaW50ZXJMb2NhdGlvbikgewotCSAgCSBQb2ludCBjb21wZW5zYXRlZExvY2F0aW9uID0gb3JpZ1BvaW50ZXJMb2NhdGlvbjsKLQkgIAkgRmlndXJlQ2FudmFzIGZpZ3VyZUNhbnZhcyA9IChGaWd1cmVDYW52YXMpIHZpZXdlci5nZXRDb250cm9sKCk7Ci0JICAgICBpbnQgeU9mZnNldCA9IGZpZ3VyZUNhbnZhcy5nZXRWaWV3cG9ydCgpLmdldFZlcnRpY2FsUmFuZ2VNb2RlbCgpLmdldFZhbHVlKCk7Ci0JICAgICBjb21wZW5zYXRlZExvY2F0aW9uLnkgPSBjb21wZW5zYXRlZExvY2F0aW9uLnkgKyB5T2Zmc2V0OwotCSAgICAgCi0JICAgICByZXR1cm4gY29tcGVuc2F0ZWRMb2NhdGlvbjsKLQkgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMjNlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRERyYWdBbmREcm9wRWRpdFBvbGljeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5DaGFuZ2VCb3VuZHNSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5IGV4dGVuZHMgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5HcmFwaGljYWxFZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgRWRpdFBhcnRWaWV3ZXIgdmlld2VyOwotCXByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5OwotCQotCXB1YmxpYyBBU0REcmFnQW5kRHJvcEVkaXRQb2xpY3koRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KSB7Ci0JCXRoaXMudmlld2VyID0gdmlld2VyOwotCQl0aGlzLnNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3k7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdW5kZXJzdGFuZHNSZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JCXJldHVybiB0cnVlOwotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotCXB1YmxpYyBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZCBnZXRDb21tYW5kKFJlcXVlc3QgcmVxdWVzdCkgeyAgICAgICAgICAgICAKLQkJQVNERHJhZ0FuZERyb3BDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotCQlpZiAocmVxdWVzdCBpbnN0YW5jZW9mIENoYW5nZUJvdW5kc1JlcXVlc3QpIHsKLQkJCWNvbW1hbmQgPSBuZXcgQVNERHJhZ0FuZERyb3BDb21tYW5kKHZpZXdlciwgKENoYW5nZUJvdW5kc1JlcXVlc3QpcmVxdWVzdCk7Ci0JCQlzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeS5zZXREcmFnQW5kRHJvcENvbW1hbmQoY29tbWFuZCk7Ci0JCX0gCi0JCXJldHVybiBjb21tYW5kOyAgICAgICAgICAgICAKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RHcmFwaE5vZGVEcmFnVHJhY2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTlmNmM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RHcmFwaE5vZGVEcmFnVHJhY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnRWRpdFBhcnRzVHJhY2tlcjsKLQotcHVibGljIGNsYXNzIEFTREdyYXBoTm9kZURyYWdUcmFja2VyIGV4dGVuZHMgRHJhZ0VkaXRQYXJ0c1RyYWNrZXIgIHsKLQlwcm90ZWN0ZWQgRWRpdFBhcnQgZWRpdFBhcnQ7IAotCQotCXB1YmxpYyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcihFZGl0UGFydCBlZGl0UGFydCkgewotCQlzdXBlcihlZGl0UGFydCk7Ci0JCXRoaXMuZWRpdFBhcnQgPSBlZGl0UGFydDsKLQl9IAotCQotCXByb3RlY3RlZCBDb21tYW5kIGdldENvbW1hbmQoKSB7IAotCQlSZXF1ZXN0IHJlcXVlc3QgPSBnZXRUYXJnZXRSZXF1ZXN0KCk7Ci0JCXJldHVybiBlZGl0UGFydC5nZXRDb21tYW5kKHJlcXVlc3QpOyAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRExhYmVsRGlyZWN0RWRpdFBvbGljeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRExhYmVsRGlyZWN0RWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTRiNmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLkRpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkVuZFBvaW50RWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kgZXh0ZW5kcyBEaXJlY3RFZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgQ29tbWFuZCBnZXREaXJlY3RFZGl0Q29tbWFuZChEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSB7Ci0JCUNvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0JCVN0cmluZyBsYWJlbFRleHQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldENlbGxFZGl0b3IoKS5nZXRWYWx1ZSgpOwotCQlFZGl0UGFydCBlZGl0UGFydD0gZ2V0SG9zdCgpOwotCi0JCS8vIFRPRE86IHJtYWg6ICBTdGFydCBWRVJZIFVHTFkgSEFDSy4uLi4gIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcyBpc3N1ZSBhdCB0aGlzIHRpbWUuCi0JCS8vIEVuZFBvaW50RWRpdFBhcnQgY29udGFpbnMgdHdvIGxhYmVscyB3aGljaCBjYW4gYmUgZGlyZWN0IGVkaXRlZC4gIFRoZSBmYWNhZGUgZHJpdmluZyBFbmRQb2ludEVkaXRQYXJ0Ci0JCS8vIGNvbnRhaW5zIGEgZ2V0U2V0TmFtZUNvbW1hbmQoKSBhbmQgYSBnZXRTZXRBZGRyZXNzQ29tbWFuZCgpLi4uIGhvd2V2ZXIsIHRoaXMgY2xhc3MgKExhYmVsRGlyZWN0RWRpdFBvbGljeSkKLQkJLy8gb25seSBrbm93cyBhYm91dCBnZXRTZXROYW1lQ29tbWFuZCgpLi4uLi4gIFRoaXMgaXMgdGhlIHByb2JsZW0gd2UgZmFjZSB3aGVuIGNvbWJpbmluZyB0d28gbGFiZWxzIGludG8KLQkJLy8gb25lIEVkaXRQYXJ0Li4uLi4KLQkJaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgRW5kUG9pbnRFZGl0UGFydCkgewotCQkJY29tbWFuZCA9ICgoRW5kUG9pbnRFZGl0UGFydCkgZWRpdFBhcnQpLmdldFNldFByb3BlckxhYmVsQ29tbWFuZChsYWJlbFRleHQpOwotCQl9Ci0JCS8vIEVuZCBWRVJZIFVHTFkgSEFDSwotCQllbHNlIGlmIChlZGl0UGFydC5nZXRNb2RlbCgpIGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KSB7Ci0JCQljb21tYW5kID0gKChJTmFtZWRPYmplY3QpIGVkaXRQYXJ0LmdldE1vZGVsKCkpLmdldFNldE5hbWVDb21tYW5kKGxhYmVsVGV4dCk7Ci0JCX0KLQotCQlyZXR1cm4gY29tbWFuZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzaG93Q3VycmVudEVkaXRWYWx1ZShEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSB7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RTZWxlY3Rpb25FZGl0UG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNEU2VsZWN0aW9uRWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2FmZmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RTZWxlY3Rpb25FZGl0UG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLlNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkNoYW5nZUJvdW5kc1JlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuSUZlZWRiYWNrSGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEFTRFNlbGVjdGlvbkVkaXRQb2xpY3kgZXh0ZW5kcyBTZWxlY3Rpb25FZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgQVNERHJhZ0FuZERyb3BDb21tYW5kIGRyYWdBbmREcm9wQ29tbWFuZDsKLQlwcm90ZWN0ZWQgSUZpZ3VyZSBmZWVkYmFjazsKLQotCSAgcHVibGljIHZvaWQgc2V0RHJhZ0FuZERyb3BDb21tYW5kKEFTRERyYWdBbmREcm9wQ29tbWFuZCBkcmFnQW5kRHJvcENvbW1hbmQpIHsKLQkgICAgdGhpcy5kcmFnQW5kRHJvcENvbW1hbmQgPSBkcmFnQW5kRHJvcENvbW1hbmQ7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNob3dTb3VyY2VGZWVkYmFjayhSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAJZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjayhudWxsKTsKLQkgIAkKLQkgIAlpZiAoZHJhZ0FuZERyb3BDb21tYW5kICE9IG51bGwgJiYgZHJhZ0FuZERyb3BDb21tYW5kLmNhbkV4ZWN1dGUoKSkgewotCQkgIGlmIChSRVFfTU9WRS5lcXVhbHMocmVxdWVzdC5nZXRUeXBlKCkpIHx8IFJFUV9BREQuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkgewotCQkJICBzaG93TW92ZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKChDaGFuZ2VCb3VuZHNSZXF1ZXN0KSByZXF1ZXN0KTsKLQkJICB9Ci0vLwkJICBlbHNlIGlmIChSRVFfQ0xPTkUuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkgewotLy8JCSAgCSAgc2hvd0NvcHlDaGFuZ2VCb3VuZHNGZWVkYmFjaygoQ2hhbmdlQm91bmRzUmVxdWVzdCkgcmVxdWVzdCk7Ci0vLwkJICB9Ci0JICAJfQotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIEVyYXNlIGZlZWRiYWNrIGluZGljYXRpbmcgdGhhdCB0aGUgcmVjZWl2ZXIgb2JqZWN0IGlzIAotCSAgICogYmVpbmcgZHJhZ2dlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgZHJhZyBpcwotCSAgICogY29tcGxldGVkIG9yIGNhbmNlbGxlZCBvbiB0aGUgcmVjZWl2ZXIgb2JqZWN0LgotCSAgICogQHBhcmFtIGRyYWdUcmFja2VyIG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnVHJhY2tlciBUaGUgZHJhZyB0cmFja2VyIG9mIHRoZSB0b29sIHBlcmZvcm1pbmcgdGhlIGRyYWcuCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIGVyYXNlU291cmNlRmVlZGJhY2soUmVxdWVzdCByZXF1ZXN0KSAKLQkgIHsKLQkgICAgaWYgKFJFUV9NT1ZFLmVxdWFscyhyZXF1ZXN0LmdldFR5cGUoKSkgfHwgIFJFUV9BREQuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkKLQkgICAgewotCQkJICBlcmFzZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKChDaGFuZ2VCb3VuZHNSZXF1ZXN0KXJlcXVlc3QpOwotCSAgICB9Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogRXJhc2UgZmVlZGJhY2sgaW5kaWNhdGluZyB0aGF0IHRoZSByZWNlaXZlciBvYmplY3QgaXMgCi0JICAgKiBiZWluZyBkcmFnZ2VkLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBkcmFnIGlzCi0JICAgKiBjb21wbGV0ZWQgb3IgY2FuY2VsbGVkIG9uIHRoZSByZWNlaXZlciBvYmplY3QuCi0JICAgKiBAcGFyYW0gZHJhZ1RyYWNrZXIgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRyYWdUcmFja2VyIFRoZSBkcmFnIHRyYWNrZXIgb2YgdGhlIHRvb2wgcGVyZm9ybWluZyB0aGUgZHJhZy4KLQkgICAqLwotCSAgcHJvdGVjdGVkIHZvaWQgZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjayhDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpIAotCSAgewotCQkgIGlmIChmZWVkYmFjayAhPSBudWxsKSAKLQkgICAgewkJICAgICAgCi0JCQkgIHJlbW92ZUZlZWRiYWNrKGZlZWRiYWNrKTsKLQkJICB9Ci0JCSAgZmVlZGJhY2sgPSBudWxsOwotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgdm9pZCBzaG93TW92ZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKENoYW5nZUJvdW5kc1JlcXVlc3QgcmVxdWVzdCkKLQkgIHsKLQkgIAlpZiAoZHJhZ0FuZERyb3BDb21tYW5kICE9IG51bGwgJiYgZHJhZ0FuZERyb3BDb21tYW5kLmdldEZlZWRiYWNrRmlndXJlKCkgIT0gbnVsbCkgewotCSAgCQlmZWVkYmFjayA9IGRyYWdBbmREcm9wQ29tbWFuZC5nZXRGZWVkYmFja0ZpZ3VyZSgpOwotCSAgCQlhZGRGZWVkYmFjayhmZWVkYmFjayk7Ci0JICAJfQotCSAgfSAKLQkgIAotCXByb3RlY3RlZCB2b2lkIGhpZGVTZWxlY3Rpb24oKSB7Ci0JCWlmIChnZXRIb3N0KCkgaW5zdGFuY2VvZiBJRmVlZGJhY2tIYW5kbGVyKSB7Ci0JCQkJKChJRmVlZGJhY2tIYW5kbGVyKSBnZXRIb3N0KCkpLnJlbW92ZUZlZWRiYWNrKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzaG93U2VsZWN0aW9uKCkgewotCQlpZiAoZ2V0SG9zdCgpIGluc3RhbmNlb2YgSUZlZWRiYWNrSGFuZGxlcikgewotCQkJKChJRmVlZGJhY2tIYW5kbGVyKSBnZXRIb3N0KCkpLmFkZEZlZWRiYWNrKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9CYXNlTGlua0ljb25GaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQmFzZUxpbmtJY29uRmlndXJlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NTNlMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9CYXNlTGlua0ljb25GaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIEJhc2VMaW5rSWNvbkZpZ3VyZSBleHRlbmRzIEZpZ3VyZSB7Ci0JcHVibGljIHN0YXRpYyBpbnQgVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IElOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgPSAyOwotCi0JcHJpdmF0ZSBpbnQgbGlua0ljb25TdHlsZSA9IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFOwkKLQlwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7Ci0JcHJpdmF0ZSBMaXN0IGNoaWxkRmlndXJlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwdWJsaWMgaW50IGZpZ3VyZVNwYWNpbmcgPSA3OwotCi0JcHVibGljIEJhc2VMaW5rSWNvbkZpZ3VyZShBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwKSB7Ci0JCWVkaXRQYXJ0ID0gZXA7Ci0KLQkJVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKSB7Ci0JCQlwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpIHsKLQkJCQlzdXBlci5sYXlvdXQocGFyZW50KTsKLQotCQkJCUFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZXAgPSBnZXRBc3NvY2lhdGVkRWRpdFBhcnQoKTsKLQkJCQlJRmlndXJlIGFzc29jaWF0ZWRGaWd1cmUgPSBlcC5nZXRGaWd1cmUoKTsKLQkJCQlpZiAoYXNzb2NpYXRlZEZpZ3VyZSAhPSBudWxsKSB7Ci0JCQkJCS8vIFVwZGF0ZSB0aGUgYm91bmRzCi0JCQkJCVJlY3RhbmdsZSBhc3NvY2lhdGVkQm91bmRzID0gYXNzb2NpYXRlZEZpZ3VyZS5nZXRCb3VuZHMoKTsKLQkJCQkJaW50IHggPSBhc3NvY2lhdGVkQm91bmRzLnggKyBhc3NvY2lhdGVkQm91bmRzLndpZHRoOwotCQkJCQlpbnQgeSA9IGFzc29jaWF0ZWRCb3VuZHMueTsKLQkJCQkJaW50IHdpZHRoID0gZ2V0U2l6ZSgpLndpZHRoOwotCQkJCQlpbnQgaGVpZ2h0ID0gYXNzb2NpYXRlZEJvdW5kcy5oZWlnaHQ7Ci0KLQkJCQkJUmVjdGFuZ2xlIG5ld0ZpZ0JvdW5kcyA9IG5ldyBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0JCQkJCS8vIFNldCBteSBib3VuZHMgYmFzZWQgb24gbXkgYXNzb2NpYXRlZCBlZGl0cGFydAotCQkJCQlzZXRCb3VuZHMobmV3RmlnQm91bmRzKTsKLQotCQkJCQkvLyBMYXlvdXQgdGhlIGNoaWxkcmVuCi0JCQkJCUl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCQkJSUZpZ3VyZSBmaWcgPSAoSUZpZ3VyZSkgaXQubmV4dCgpOwotCQkJCQkJUG9pbnQgbmV3UG9pbnQgPSBuZXcgUG9pbnQoeCwgeSk7Ci0KLQkJCQkJCS8vIEluZGVudCB0aGUgZmlndXJlIHRvIHRoZSByaWdodCB0byBzaG93IHRoZSAiYnJva2VuIiBzY2hlbWEgbGluayBmaWd1cmUKLQkJCQkJCWlmIChmaWcgaW5zdGFuY2VvZiBSaWdodEludmFsaWRJY29uRmlndXJlKSB7Ci0JCQkJCQkJbmV3UG9pbnQueCA9IG5ld1BvaW50LnggKyBmaWd1cmVTcGFjaW5nOwotCQkJCQkJfQotCi0JCQkJCQlmaWcuc2V0TG9jYXRpb24obmV3UG9pbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9OwotCQlzZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0KLQkJLy8gRGVmYXVsdCB0byBhIFZhbGlkTGlua0ljb25GaWd1cmUKLQkJbGlua0ljb25TdHlsZSA9IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFOwotCQlhZGRDaGlsZEZpZ3VyZShuZXcgVmFsaWRMaW5rSWNvbkZpZ3VyZSgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlQ2hpbGRGaWd1cmVzKCkgewotCQlJdGVyYXRvciBpdCA9IGNoaWxkRmlndXJlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlyZW1vdmUoKElGaWd1cmUpIGl0Lm5leHQoKSk7Ci0JCX0KLQotCQljaGlsZEZpZ3VyZXMuY2xlYXIoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkQ2hpbGRGaWd1cmUoSUZpZ3VyZSBmaWcpIHsKLQkJY2hpbGRGaWd1cmVzLmFkZChmaWcpOwotCQlhZGQoZmlnKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRMaW5rSWNvblN0eWxlKGludCBzdHlsZSkgewotCQlpZiAoc3R5bGUgPT0gVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgJiYgbGlua0ljb25TdHlsZSAhPSBWQUxJRF9TQ0hFTUFfTElOS19TVFlMRSkgewotCQkJcmVtb3ZlQ2hpbGRGaWd1cmVzKCk7Ci0JCQlhZGRDaGlsZEZpZ3VyZShuZXcgVmFsaWRMaW5rSWNvbkZpZ3VyZSgpKTsKLQkJfQotCQllbHNlIGlmIChzdHlsZSA9PSBJTlZBTElEX1NDSEVNQV9MSU5LX1NUWUxFICYmIGxpbmtJY29uU3R5bGUgIT0gSU5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSkgewotCQkJcmVtb3ZlQ2hpbGRGaWd1cmVzKCk7Ci0JCQlhZGRDaGlsZEZpZ3VyZShuZXcgTGVmdEludmFsaWRJY29uRmlndXJlKCkpOwotCQkJYWRkQ2hpbGRGaWd1cmUobmV3IFJpZ2h0SW52YWxpZEljb25GaWd1cmUoKSk7Ci0JCX0KLQotCQlsaW5rSWNvblN0eWxlID0gc3R5bGU7Ci0JfQotCi0JcHVibGljIGludCBnZXRMaW5rSWNvblN0eWxlKCkgewotCQlyZXR1cm4gbGlua0ljb25TdHlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb2xvcihDb2xvciBjb2xvcikgewotCQlJdGVyYXRvciBpdCA9IGNoaWxkRmlndXJlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7Ci0JCQlmaWcuc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKLQkJCWZpZy5zZXRGb3JlZ3JvdW5kQ29sb3IoY29sb3IpOwotCQl9Ci0JfQotCi0JcHVibGljIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0QXNzb2NpYXRlZEVkaXRQYXJ0KCkgewotCQlyZXR1cm4gZWRpdFBhcnQ7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBMZWZ0SW52YWxpZEljb25GaWd1cmUgZXh0ZW5kcyBMaW5rSWNvbkZpZ3VyZSB7Ci0JCXB1YmxpYyBMZWZ0SW52YWxpZEljb25GaWd1cmUoKSB7Ci0JCQlzdXBlcihudWxsKTsKLQkJCVBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCQkKLQkJCS8vIERyYXcgdGhlIGFycm93Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDUsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA3LCAwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gdG9wIHNsYXNoCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDIsIDEwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gYm90dG9tIHNsYXNoCi0KLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDQsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEZpbGwodHJ1ZSk7Ci0JCQlzZXRQb2ludHMocG9pbnRzKTsKLQkJfQotCi0JCS8vIFdlIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSB3aWR0aCBiZWNhdXNlIHdlIGluZGVudCB0aGUgZmlndXJlIHRvd2FyZHMgdGhlIHJpZ2h0LgotCQkvLyBTbyB3ZSBpbmRlbnQgYnkgdGhhdCBzYW1lIGFtb3VudCBzdG9yZWQgaW4gaG9yaXpvbnRhbEJ1ZmZlcgotCQlwdWJsaWMgRGltZW5zaW9uIGdldFByZWZlcnJlZFNpemUoaW50IHdIaW50LCBpbnQgaEhpbnQpIHsKLQkJCURpbWVuc2lvbiBkaW1lbnNpb24gPSBzdXBlci5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ci0JCQlkaW1lbnNpb24ud2lkdGggPSBkaW1lbnNpb24ud2lkdGggKyBob3Jpem9udGFsQnVmZmVyOwotCi0JCQlyZXR1cm4gZGltZW5zaW9uOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oUG9pbnQgcG9pbnQpIHsKLQkJCXN1cGVyLnNldExvY2F0aW9uKHBvaW50KTsKLQkJCS8vIFVwZGF0ZSB0aGUgcG9pbnRzIHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2QgY2FsbAotCQkJc2V0RmlndXJlTG9jYXRpb24ocG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBSaWdodEludmFsaWRJY29uRmlndXJlIGV4dGVuZHMgTGlua0ljb25GaWd1cmUgewotCQlwdWJsaWMgUmlnaHRJbnZhbGlkSWNvbkZpZ3VyZSgpIHsKLQkJCXN1cGVyKG51bGwpOwotCQkJUG9pbnRMaXN0IHBvaW50cyA9IG5ldyBQb2ludExpc3QoKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA3LCAwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gdG9wIHNsYXNoCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTAsIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDUgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTAsIDEwICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyLCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7CS8vIGJvdHRvbSBzbGFzaAotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCQkJc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRGaWxsKHRydWUpOwotCQkJc2V0UG9pbnRzKHBvaW50cyk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihQb2ludCBwb2ludCkgewotCQkJc3VwZXIuc2V0TG9jYXRpb24ocG9pbnQpOwotCQkJc2V0RmlndXJlTG9jYXRpb24ocG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBWYWxpZExpbmtJY29uRmlndXJlIGV4dGVuZHMgTGVmdEludmFsaWRJY29uRmlndXJlIHsKLQkJcHVibGljIFZhbGlkTGlua0ljb25GaWd1cmUoKSB7Ci0JCQlQb2ludExpc3QgcG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCi0JCQkvLyBEcmF3IHRoZSBhcnJvdwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyMCwgNSArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgMTAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEZpbGwodHJ1ZSk7Ci0JCQlzZXRQb2ludHMocG9pbnRzKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQm94Q29tcG9uZW50RmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0JveENvbXBvbmVudEZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2RiYzI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQm94Q29tcG9uZW50RmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci0KLXB1YmxpYyBjbGFzcyBCb3hDb21wb25lbnRGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgcHVibGljIEhlYWRpbmdGaWd1cmUgaGVhZGluZ0ZpZ3VyZTsKLSAgRmlndXJlIGNvbnRlbnRQYW5lOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLQotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZChib29sZWFuIGlzU2VsZWN0ZWQpCi0gIHsKLSAgICBoZWFkaW5nRmlndXJlLnNldFNlbGVjdGVkKGlzU2VsZWN0ZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SXNSZWFkT25seShib29sZWFuIGlzUmVhZE9ubHkpCi0gIHsKLSAgICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5OwotICB9Ci0KLSAgcHVibGljIEJveENvbXBvbmVudEZpZ3VyZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGhlYWRpbmdGaWd1cmUgPSBuZXcgSGVhZGluZ0ZpZ3VyZSgpOwotICAgIGFkZChoZWFkaW5nRmlndXJlKTsKLSAgICBjb250ZW50UGFuZSA9IG5ldyBMaXN0RmlndXJlKCk7Ci0gICAgY29udGVudFBhbmUuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCgpKTsKLSAgICBhZGQoY29udGVudFBhbmUpOwotICB9Ci0KLSAgcHVibGljIEZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKTsKLSAgfQotICAKLSAgcHVibGljIEZpZ3VyZSBnZXRIZWFkaW5nRmlndXJlKCkKLSAgewotICAgIHJldHVybiBoZWFkaW5nRmlndXJlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0NvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY5Yjg3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0NvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25Sb3V0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvbHlnb25EZWNvcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5bGluZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBleHRlbmRzIFBvbHlsaW5lQ29ubmVjdGlvbgotewotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaWdobGlnaHQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBDb2xvciBhY3RpdmVDb25uZWN0aW9uID0gQ29sb3JDb25zdGFudHMuYmxhY2s7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3IgaW5hY3RpdmVDb25uZWN0aW9uID0gbmV3IENvbG9yKG51bGwsIDE5OCwgMTk1LCAxOTgpOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHNldFRhcmdldERlY29yYXRpb24obmV3IFBvbHlnb25EZWNvcmF0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblJvdXRlcihDb25uZWN0aW9uUm91dGVyIGNyKQotICB7Ci0gICAgaWYgKGNyICE9IG51bGwgJiYgZ2V0Q29ubmVjdGlvblJvdXRlcigpICE9IG51bGwpLy8gVE9ETzouLi4uICYmICEoZ2V0Q29ubmVjdGlvblJvdXRlcigpIGluc3RhbmNlb2YgQk9NYW5oYXR0YW5Db25uZWN0aW9uUm91dGVyKSkKLSAgICAgIHN1cGVyLnNldENvbm5lY3Rpb25Sb3V0ZXIoY3IpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBoaWdobGlnaHQgc3RhdHVzLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNIaWdobGlnaHRlZCgpCi0gIHsKLSAgICByZXR1cm4gaGlnaGxpZ2h0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBoaWdobGlnaHQKLSAgICogICAgICAgICAgVGhlIGhpZ2hsaWdodCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIaWdobGlnaHQoYm9vbGVhbiBoaWdobGlnaHQpCi0gIHsKLSAgICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKLSAgICBzZXRGb3JlZ3JvdW5kQ29sb3IoaGlnaGxpZ2h0ID8gRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IgOiBpbmFjdGl2ZUNvbm5lY3Rpb24pOwotICAgIHNldE9wYXF1ZShoaWdobGlnaHQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0hlYWRpbmdGaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQ1YmE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIEhlYWRpbmdGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBDb2xvciBoZWFkZXJDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMjQsIDIzMywgMjQ2KTsKLSAgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBDb2xvcltdIGdyYWRpZW50Q29sb3IgPSB7Q29sb3JDb25zdGFudHMud2hpdGUsICAKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSwKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmxpZ2h0Qmx1ZSwKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmdyYXl9OwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLSAgCi0gIHB1YmxpYyBIZWFkaW5nRmlndXJlKCkKLSAgewotICAgIGxhYmVsID0gbmV3IExhYmVsKCk7Ci0gICAgbGFiZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMikpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQ0VOVEVSKTsKLSAgICBzZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIGFkZChsYWJlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKGJvb2xlYW4gaXNTZWxlY3RlZCkKLSAgewotICAgIHRoaXMuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzUmVhZE9ubHkoYm9vbGVhbiBpc1JlYWRPbmx5KQotICB7Ci0gICAgdGhpcy5pc1JlYWRPbmx5ID0gaXNSZWFkT25seTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gIHsKLSAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0vLyAgICBDb2xvciBvbGRGb3JlZ3JvdW5kID0gIGdyYXBoaWNzLmdldEZvcmVncm91bmRDb2xvcigpOwotICAgIC8vIEZpbGwgZm9yIHRoZSBoZWFkZXIgc2VjdGlvbgotICAgIC8vCi0gICAgUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0gICAgZ3JhcGhpY3Muc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0gICAgLy9ncmFwaGljcy5maWxsUmVjdGFuZ2xlKHIueCsxLCByLnkrMSwgci53aWR0aC0xLCBiYXJZY29vcmRpbmF0ZSAtIHIueSAtIDEpOwotICAgIENvbG9yIGdyYWRpZW50MSA9IGlzUmVhZE9ubHkgPyBncmFkaWVudENvbG9yWzFdIDogaGVhZGVyQ29sb3I7Ci0gICAgaWYgKGlzU2VsZWN0ZWQgJiYgaXNSZWFkT25seSkgZ3JhZGllbnQxID0gZ3JhZGllbnRDb2xvclszXTsKLSAgICBlbHNlIGlmIChpc1NlbGVjdGVkICYmICFpc1JlYWRPbmx5KSBncmFkaWVudDEgPSBncmFkaWVudENvbG9yWzJdOwotICAgIENvbG9yIGdyYWRpZW50MiA9IGdyYWRpZW50Q29sb3JbMF07Ci0gICAgZ3JhcGhpY3Muc2V0Rm9yZWdyb3VuZENvbG9yKGdyYWRpZW50MSk7Ci0gICAgZ3JhcGhpY3Muc2V0QmFja2dyb3VuZENvbG9yKGdyYWRpZW50Mik7Ci0gICAgUmVjdGFuZ2xlIGxhYmVsQm91bmRzID0gbGFiZWwuZ2V0Qm91bmRzKCk7Ci0gICAgZ3JhcGhpY3MuZmlsbEdyYWRpZW50KHIueCsxLCByLnkrMSwgci53aWR0aC0yLCBsYWJlbEJvdW5kcy5oZWlnaHQgLCB0cnVlKTsKLSAgICBncmFwaGljcy5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuZGFya0dyYXkpOwotICAgIGxhYmVsLnBhaW50KGdyYXBoaWNzKTsgICAgCi0gICAgZ3JhcGhpY3Muc2V0Rm9yZWdyb3VuZENvbG9yKGlzU2VsZWN0ZWQgPyBncmFkaWVudENvbG9yWzFdIDogZ3JhZGllbnRDb2xvclszXSk7Ci0gICAgLy9ncmFwaGljcy5kcmF3TGluZShyLngrMSwgci55ICsgMTUsIHIueCArIHIud2lkdGgsIHIueSArIDE1KTsKLSAgICAvL2dyYXBoaWNzLmRyYXdMaW5lKHIueCsxLCByLnkgKyBsYWJlbEJvdW5kcy5oZWlnaHQsIHIueCArIHIud2lkdGgsIHIueSArIGxhYmVsQm91bmRzLmhlaWdodCk7Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwN2EzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpbmtJY29uRmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5Z29uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExpbmtJY29uRmlndXJlIGV4dGVuZHMgUG9seWdvbiB7Ci0JcHJpdmF0ZSBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0OwotCXByaXZhdGUgUG9pbnQgZmlnTG9jYXRpb247Ci0JICBwcml2YXRlIFBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JICBwdWJsaWMgaW50IGhvcml6b250YWxCdWZmZXIgPSA1OwotCSAgcHVibGljIGludCB2ZXJ0aWNhbEJ1ZmZlciA9IDc7Ci0KLQkgIHB1YmxpYyBMaW5rSWNvbkZpZ3VyZShBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwKSB7Ci0JCSAgZWRpdFBhcnQgPSBlcDsKLQkJICAKLQkJICAvLyBEcmF3IHRoZSBhcnJvdwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDAsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDE0LCA1ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICBwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA5LCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgOSwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgCi0JCSAgc2V0RmlsbCh0cnVlKTsJICAKLQkJICBzZXRQb2ludHMocG9pbnRzKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgcGFpbnRGaWd1cmUoR3JhcGhpY3MgZ3JhcGhpY3MpIHsKLQkJICBzdXBlci5wYWludEZpZ3VyZShncmFwaGljcyk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEZpZ3VyZUxvY2F0aW9uKFBvaW50IG5ld1N0YXJ0aW5nTG9jYXRpb24pIHsKLQkJICBpbnQgZHkgPSBuZXdTdGFydGluZ0xvY2F0aW9uLnk7Ci0KLQkJICBpZiAoZmlnTG9jYXRpb24gIT0gbnVsbCkgewotCQkJICBkeSA9IG5ld1N0YXJ0aW5nTG9jYXRpb24ueSAtIGZpZ0xvY2F0aW9uLnk7Ci0JCSAgfQotCi0JCSAgLy8gVXBkYXRlIHRoZSBwb2ludHMKLQkJICBQb2ludExpc3QgbmV3UG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCQkgIFBvaW50TGlzdCBwTGlzdCA9IGdldFBvaW50cygpOwotCQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwTGlzdC5zaXplKCk7IGluZGV4KyspIHsKLQkJCSAgUG9pbnQgcG9pbnQgPSBwTGlzdC5nZXRQb2ludChpbmRleCk7Ci0JCQkgIC8vIEFkZCA1IGZvciB0aGUgcGFkZGluZwotCQkJICBQb2ludCBuZXdQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgaG9yaXpvbnRhbEJ1ZmZlciwgcG9pbnQueSArIGR5KTsKLQkJCSAgbmV3UG9pbnRzLmFkZFBvaW50KG5ld1BvaW50KTsKLQkJICB9Ci0JCSAgc2V0UG9pbnRzKG5ld1BvaW50cyk7Ci0KLQkJICBmaWdMb2NhdGlvbiA9IG5ld1N0YXJ0aW5nTG9jYXRpb247Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHByaW1UcmFuc2xhdGUoaW50IGR4LCBpbnQgZHkpIHsKLQkJCWJvdW5kcy54ICs9IGR4OwotCQkJYm91bmRzLnkgKz0gZHk7Ci0JCQkKLQkJCVBvaW50TGlzdCBwTGlzdCA9IGdldFBvaW50cygpOwotCQkJUG9pbnRMaXN0IG5ld0xpc3QgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgcExpc3Quc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJUG9pbnQgcG9pbnQgPSBwTGlzdC5nZXRQb2ludChpbmRleCk7Ci0JCQkJUG9pbnQgbmV3UG9pbnQgPSBuZXcgUG9pbnQocG9pbnQueCArIGR4LCBwb2ludC55KTsKLQkJCQluZXdMaXN0LmFkZFBvaW50KG5ld1BvaW50KTsKLQkJCX0KLQkJCXNldFBvaW50cyhuZXdMaXN0KTsKLQkJCQotCQkJaWYgKHVzZUxvY2FsQ29vcmRpbmF0ZXMoKSkgewotCQkJCWZpcmVDb29yZGluYXRlU3lzdGVtQ2hhbmdlZCgpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCSAgCi0JICBwdWJsaWMgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBnZXRBc3NvY2lhdGVkRWRpdFBhcnQoKSB7Ci0JCSAgcmV0dXJuIGVkaXRQYXJ0OwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9MaXN0RmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4NTYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLQotcHVibGljIGNsYXNzIExpc3RGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgYm9vbGVhbiBpc09wYXF1ZSA9IGZhbHNlOwotICBib29sZWFuIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwotICBib29sZWFuIHBhaW50Rmlyc3RMaW5lID0gdHJ1ZTsKLSAgCi0gIHB1YmxpYyBMaXN0RmlndXJlKGJvb2xlYW4gaXNIb3Jpem9udGFsKQotICB7Ci0gICAgdGhpcy5pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IAotICB9Ci0gIAotICBwdWJsaWMgTGlzdEZpZ3VyZSgpCi0gIHsKLSAgICB0aGlzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKQotICB7Ci0gICAgc3VwZXIucGFpbnQoZ3JhcGhpY3MpOwotICAgIGJvb2xlYW4gaXNGaXJzdCA9IHRydWU7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRmlndXJlIGZpZ3VyZSA9IChGaWd1cmUpIGkubmV4dCgpOwotICAgICAgaWYgKGlzRmlyc3QgJiYgIXBhaW50Rmlyc3RMaW5lKQotICAgICAgewotICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSByID0gZmlndXJlLmdldEJvdW5kcygpOwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICB7ICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSwgci54LCByLnkgKyByLmhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7ICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSwgci54ICsgci53aWR0aCwgci55KTsKLSAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzT3BhcXVlKCkKLSAgewotICAgIHJldHVybiBpc09wYXF1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wYXF1ZShib29sZWFuIGlzT3BhcXVlKQotICB7Ci0gICAgdGhpcy5pc09wYXF1ZSA9IGlzT3BhcXVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQYWludEZpcnN0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gcGFpbnRGaXJzdExpbmU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYWludEZpcnN0TGluZShib29sZWFuIHBhaW50Rmlyc3RMaW5lKQotICB7Ci0gICAgdGhpcy5wYWludEZpcnN0TGluZSA9IHBhaW50Rmlyc3RMaW5lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL01vZGVsRGlhZ25vc3RpY0luZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmRkOGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci0KLS8qCi0gKiBBIE1vZGVsRGlhZ25vc3RpY0luZm8gb2JqZWN0IGNvbnRhaW5zICJhZGRpdGlvbmFsIiBpbmZvcm1hdGlvbiBhYm91dCBhIG1vZGVsIG9iamVjdC4KLSAqIEl0IGlzIHBhc3NlZCBmcm9tIGEgbW9kZWwgKGZhY2FkZSkgb2JqZWN0IHRvIGFuIEVkaXRQYXJ0LiAgVGhlIEVkaXRQYXJ0IHVzZXMgdGhlIE1vZGVsRGlhZ25vc3RpY0luZm8KLSAqIG9iamVjdCB0byBkaXNwbGF5IGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSAoZm9yIGV4YW1wbGUsIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgbW9kZWwKLSAqIG9iamVjdCBpcyBpbiBzb21lIHdheSBpbnZhbGlkLgotICovCi1wdWJsaWMgY2xhc3MgTW9kZWxEaWFnbm9zdGljSW5mbyB7Ci0JcHVibGljIHN0YXRpYyBpbnQgSU5GT1JNQVRJT05BTF9UWVBFID0gMDsKLQlwdWJsaWMgc3RhdGljIGludCBFUlJPUl9UWVBFID0gMTsKLQlwdWJsaWMgc3RhdGljIGludCBXQVJOSU5HX1RZUEUgPSAyOwotCQotCXByaXZhdGUgaW50IHR5cGUgPSAxOwotCXByaXZhdGUgU3RyaW5nIHRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgQ29sb3IgdGV4dENvbG9yOwotCQotCXB1YmxpYyBNb2RlbERpYWdub3N0aWNJbmZvKFN0cmluZyB0eHQsIGludCBpbmZvVHlwZSwgQ29sb3IgY29sb3IpIHsKLQkJdGV4dCA9IHR4dDsKLQkJdHlwZSA9IGluZm9UeXBlOwotCQl0ZXh0Q29sb3IgPSBjb2xvcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25UZXh0KFN0cmluZyB0eHQpIHsKLQkJdGV4dCA9IHR4dDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoQ29sb3IgY29sb3IpIHsKLQkJdGV4dENvbG9yID0gY29sb3I7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFR5cGUoaW50IGluZm9UeXBlKSB7Ci0JCXR5cGUgPSBpbmZvVHlwZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvblRleHQoKSB7Ci0JCXJldHVybiB0ZXh0OwotCX0KLQkKLQlwdWJsaWMgaW50IGdldFR5cGUoKSB7Ci0JCXJldHVybiB0eXBlOwotCX0KLQkKLQlwdWJsaWMgQ29sb3IgZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSB7Ci0JCWlmICh0ZXh0Q29sb3IgIT0gbnVsbCkgewotCQkJcmV0dXJuIHRleHRDb2xvcjsKLQkJfQotCQkKLQkJaWYgKHR5cGUgPT0gRVJST1JfVFlQRSkgewotCQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLnJlZDsKLQkJfQotCQllbHNlIGlmICh0eXBlID09IFdBUk5JTkdfVFlQRSkgewotCQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheTsKLQkJfQotCQkKLQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLmJsYWNrOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0NvbHVtbkxheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MGFjNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5CaW5kaW5nRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29sdW1uTGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgRWRpdFBhcnQgYmluZGluZ0NvbHVtbkVkaXRQYXJ0OwotICAKLSAgcHVibGljIEJpbmRpbmdDb2x1bW5MYXlvdXQoRWRpdFBhcnQgYmluZGluZ0NvbHVtbkVkaXRQYXJ0KQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmJpbmRpbmdDb2x1bW5FZGl0UGFydCA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydDsKLSAgfQotCi0gIHByb3RlY3RlZCBEaW1lbnNpb24gY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShJRmlndXJlIGNvbnRhaW5lciwgaW50IHdIaW50LCBpbnQgaEhpbnQpCi0gIHsKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgRGltZW5zaW9uIGQgPSBjYWxjdWxhdGVDaGlsZHJlblNpemUoY29udGFpbmVyLmdldENoaWxkcmVuKCksIHdIaW50LCBoSGludCk7Ci0gICAgZC5oZWlnaHQgPSBNYXRoLm1heChkLmhlaWdodCwgY2xpZW50QXJlYS5oZWlnaHQpOwotICAgIHJldHVybiBkOwotICB9Ci0KLSAgcHJpdmF0ZSBEaW1lbnNpb24gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKExpc3QgY2hpbGRyZW4sIGludCB3SGludCwgaW50IGhIaW50KQotICB7Ci0gICAgRGltZW5zaW9uIGNoaWxkU2l6ZTsKLSAgICBJRmlndXJlIGNoaWxkOwotICAgIGludCBoZWlnaHQgPSAwLCB3aWR0aCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ci0gICAgICBoZWlnaHQgKz0gY2hpbGRTaXplLmhlaWdodDsKLSAgICAgIGhlaWdodCArPSA4MDsKLSAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGNoaWxkU2l6ZS53aWR0aCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgRGltZW5zaW9uKE1hdGgubWF4KHdpZHRoLCAxNTApLCBoZWlnaHQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgY29udGFpbmVyKQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJpbmRpbmdDb2x1bW5MYXlvdXQubGF5b3V0KCkiICsgY29udGFpbmVyLmdldENoaWxkcmVuKCkuc2l6ZSgpKTsKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgUmVjdGFuZ2xlIHIgPSBuZXcgUmVjdGFuZ2xlKCk7Ci0gICAgci54ID0gY2xpZW50QXJlYS54ICsgNTA7Ci0gICAgci55ID0gY2xpZW50QXJlYS55OwotICAgIGludCB1c2VkID0gMDsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IGNvbnRhaW5lci5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGaWd1cmUgY2hpbGQgPSAoRmlndXJlKSBpLm5leHQoKTsKLSAgICAgIERpbWVuc2lvbiBkID0gY2hpbGQuZ2V0UHJlZmVycmVkU2l6ZSgtMSwgLTEpOwotICAgICAgci53aWR0aCA9IGQud2lkdGg7Ci0gICAgICByLmhlaWdodCA9IGQuaGVpZ2h0OwotICAgICAgCi0gICAgICBjaGlsZC5zZXRCb3VuZHMocik7Ci0gICAgICB1c2VkICs9IDMwOwotICAgICAgdXNlZCArPSByLmhlaWdodDsKLSAgICAgIAotICAgICAgSUZpZ3VyZSBpbnRlZmFjZUZpZ3VyZSA9IGdldEludGVyZmFjZUZpZ3VyZUZvckV4cGFuZGVkRWRpdFBhcnRGaWd1cmUoY2hpbGQpOwotICAgICAgaWYgKGludGVmYWNlRmlndXJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSBiID0gaW50ZWZhY2VGaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGludCB3aWR0aCA9IDMwOwotICAgICAgICBjaGlsZC5zZXRCb3VuZHMobmV3IFJlY3RhbmdsZShiLnggLSB3aWR0aCwgYi55LCB3aWR0aCwgYi5oZWlnaHQpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgci55ICs9IGQuaGVpZ2h0OwotICAgICAgci55ICs9IDgwOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXhwYW5kZWQoQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCwgYm9vbGVhbiBpc0V4cGFuZGVkKQotICB7Ci0gICAgLy8gRmlyc3QgcnVuIHRocm91Z2ggYWxsIG9mIHRoZSBiaW5kaW5ncyBhcmUgYXJlIGV4cGFuZGVkCi0gICAgLy8gdG8gZW5zdXJlIGF0IG1vc3Qgb25lIGJpbmRpbmcgaXMgZXhwYW5kZWQgZm9yIGVhY2ggaW50ZXJmYWNlIHNpbmNlCi0gICAgLy8gd2UgbWF5IG5lZWQgdG8gY29sbGFwc2UgYSBiaW5kaW5nIGluIG9yZGVyIHRvIGV4cGFuZCB0aGlzIG9uZS4KLSAgICAvLwotICAgIElJbnRlcmZhY2UgaW50ZXJmYXplID0gZ2V0SW50ZXJmYWNlKGJpbmRpbmdFZGl0UGFydCk7ICAgIAotICAgIGlmIChpbnRlcmZhemUgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGJpbmRpbmdFZGl0UGFydC5zZXRFeHBhbmRlZChpc0V4cGFuZGVkKTsKLSAgICAgIGlmIChpc0V4cGFuZGVkKQotICAgICAgeyAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nRWRpdFBhcnQgb3RoZXJCaW5kaW5nRWRpdFBhcnQgPSAoQmluZGluZ0VkaXRQYXJ0KWkubmV4dCgpOwotICAgICAgICAgIGlmIChvdGhlckJpbmRpbmdFZGl0UGFydCAhPSBiaW5kaW5nRWRpdFBhcnQgJiYKLSAgICAgICAgICAgICAgaW50ZXJmYXplID09IGdldEludGVyZmFjZShvdGhlckJpbmRpbmdFZGl0UGFydCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3RoZXJCaW5kaW5nRWRpdFBhcnQuc2V0RXhwYW5kZWQoZmFsc2UpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSUZpZ3VyZSBnZXRJbnRlcmZhY2VGaWd1cmVGb3JFeHBhbmRlZEVkaXRQYXJ0RmlndXJlKEZpZ3VyZSBlZGl0UGFydEZpZ3VyZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCA9IChCaW5kaW5nRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoYmluZGluZ0VkaXRQYXJ0LmlzRXhwYW5kZWQoKSAmJiBiaW5kaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCkgPT0gZWRpdFBhcnRGaWd1cmUpCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgaW50ZXJmYWNlRWRpdFBhcnQgPSBnZXRNYXRjaGluZ0VkaXRQYXJ0KGdldEludGVyZmFjZShiaW5kaW5nRWRpdFBhcnQpKTsKLSAgICAgICAgaWYgKGludGVyZmFjZUVkaXRQYXJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlRWRpdFBhcnQuZ2V0RmlndXJlKCk7Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICB9ICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSUludGVyZmFjZSBnZXRJbnRlcmZhY2UoQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZyllZGl0UGFydC5nZXRNb2RlbCgpOwotICAgIHJldHVybiBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICB9Ci0gIAotICBwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0TWF0Y2hpbmdFZGl0UGFydChJSW50ZXJmYWNlIGludGVyZmF6ZSkKLSAgewotICAgIHJldHVybihBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KGludGVyZmF6ZSk7ICAgIAotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDFiMzhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0NvbnRlbnRMYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkJpbmRpbmdFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGxheW91dCB0aGUgY29udGVudHMgb2YgdGhlIGJpbmRpbmcgJ3J1bGVyJyBkaXNwbGF5ZWQKLSAqIHRvIHRoZSBsZWZ0IHNpZGUgb2YgYW4gaW50ZXJmYWNlLiBUaGUgY29udGVudHMgYXJlIGFsaWduZWQgd2l0aCB0aGUgaW50ZXJmYWNlCi0gKiBmaWd1cmVzIHNvIHRoYXQgY29ycmVzcG9kaW5nIGJpbmRpbmcgYW5kIGludGVyZmFjZSBjb25zdHJ1Y3RzIGFyZSBzaWRlIGJ5IHNpZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29udGVudExheW91dCBleHRlbmRzIEFic3RyYWN0TGF5b3V0Ci17Ci0gIEJpbmRpbmdFZGl0UGFydCBiaW5kaW5nRWRpdFBhcnQ7Ci0gIAotICBwdWJsaWMgQmluZGluZ0NvbnRlbnRMYXlvdXQoQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCkKLSAgewotICAgIHRoaXMuYmluZGluZ0VkaXRQYXJ0ID0gYmluZGluZ0VkaXRQYXJ0OwotICB9Ci0KLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIGlmIChiaW5kaW5nRWRpdFBhcnQuaXNFeHBhbmRlZCgpKQotICAgIHsgIAotICAgICAgUmVjdGFuZ2xlIGNsaWVudEFyZWEgPSBjb250YWluZXIuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oY2xpZW50QXJlYS53aWR0aCwgY2xpZW50QXJlYS5oZWlnaHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwwKTsKLSAgICB9ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgeyAgICAgCi0gICAgUmVjdGFuZ2xlIGNsaWVudEFyZWEgPSBjb250YWluZXIuZ2V0Q2xpZW50QXJlYSgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdFZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNoaWxkRWRpdFBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgaS5uZXh0KCk7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IG51bGw7Ci0gICAgICBPYmplY3QgbW9kZWwgPSBjaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0gICAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoKElCaW5kaW5nT3BlcmF0aW9uKW1vZGVsKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgY29ycmVzcG9uZGluZ0VkaXRQYXJ0ID0gZ2V0RWRpdFBhcnQob3BlcmF0aW9uKTsgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkKLSAgICAgIHsKLSAgICAgICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9ICgoSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKW1vZGVsKS5nZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0gICAgICAgIGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IGdldEVkaXRQYXJ0KG1lc3NhZ2VSZWZlcmVuY2UpOyAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcikgewotICAgIAkgIE9iamVjdCBjb3JyZXNwb25kaW5nTW9kZWwgPSAoKEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpIG1vZGVsKS5nZXRNb2RlbCgpOwotICAgIAkgIGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IGdldEVkaXRQYXJ0KGNvcnJlc3BvbmRpbmdNb2RlbCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChjb3JyZXNwb25kaW5nRWRpdFBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSUZpZ3VyZSBmaWd1cmUgPSBjb3JyZXNwb25kaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCk7ICAgICAgIAotICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0VkaXRQYXJ0IGluc3RhbmNlb2YgSU5hbWVkRWRpdFBhcnQpCi0gICAgICAgIHsKLSAgICAgICAgICBmaWd1cmUgPSAoKElOYW1lZEVkaXRQYXJ0KWNvcnJlc3BvbmRpbmdFZGl0UGFydCkuZ2V0TGFiZWxGaWd1cmUoKTsgICAgICAgICAgICAKLSAgICAgICAgfSAgCi0gICAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBmaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIFJlY3RhbmdsZSBuZXdCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKGNsaWVudEFyZWEueCwgYm91bmRzLnksIGNsaWVudEFyZWEud2lkdGgsIGJvdW5kcy5oZWlnaHQpOwotICAgICAgICBjaGlsZEVkaXRQYXJ0LmdldEZpZ3VyZSgpLnNldEJvdW5kcyhuZXdCb3VuZHMpOwotICAgICAgfSAgCi0gICAgfQotICB9ICAKLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGdldEVkaXRQYXJ0KE9iamVjdCBtb2RlbCkKLSAgewotICAgIGlmIChtb2RlbCAhPSBudWxsKQotICAgIHsgIAotICAgICAgRWRpdFBhcnQgZWRpdFBhcnQgPSAoRWRpdFBhcnQpYmluZGluZ0VkaXRQYXJ0LmdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQobW9kZWwpOwotICAgICAgaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWVkaXRQYXJ0OyAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0xheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDhlNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQmluZGluZ0VkaXRQYXJ0OwotCi0vLyBqdXN0IGEgdG9vbGJhciBsYXlvdXQgd2l0aCBhIG1pbm9yIHR3ZWFrIHRvIGVuc3VyZSB0aGUgbGFzdCBmaWd1cmUgZmlsbHMKLS8vIHRoZSBlbnRpcmUgYXZhaWxhYmxlIHNwYWNlCi1wdWJsaWMgY2xhc3MgQmluZGluZ0xheW91dCBleHRlbmRzIFRvb2xiYXJMYXlvdXQKLXsKLSAgQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0OwotICAKLSAgcHVibGljIEJpbmRpbmdMYXlvdXQoQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgdGhpcy5lZGl0UGFydCA9IGVkaXRQYXJ0OyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIERpbWVuc2lvbiBkID0gc3VwZXIuY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShjb250YWluZXIsIHdIaW50LCBoSGludCk7Ci0gICAgLy9SZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgLy9kLndpZHRoID0gTWF0aC5tYXgoZC53aWR0aCwgY2xpZW50QXJlYS53aWR0aCk7Ci0gICAgLy9kLmhlaWdodCA9IE1hdGgubWF4KGQuaGVpZ2h0LCBjbGllbnRBcmVhLmhlaWdodCk7Ci0gICAgcmV0dXJuIGQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgewotICAgIHN1cGVyLmxheW91dChjb250YWluZXIpOwotICAgIGlmIChlZGl0UGFydC5pc0V4cGFuZGVkKCkpCi0gICAgeyAgCi0gICAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7ICAgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IGNvbnRhaW5lci5nZXRDaGlsZHJlbigpOwotICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIEZpZ3VyZSBoZWFkZXIgPSAoRmlndXJlKWNoaWxkcmVuLmdldCgwKTsgICAgICAgIAotICAgICAgICBGaWd1cmUgY29udGVudFBhbmUgPSAoRmlndXJlKWNoaWxkcmVuLmdldChjaGlsZHJlbi5zaXplKCkgLSAxKTsKLSAgICAgICAgaWYgKGNvbnRlbnRQYW5lLmdldENoaWxkcmVuKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGNvbnRlbnRQYW5lLmdldEJvdW5kcygpOwotICAgICAgICAgIGJvdW5kcy5oZWlnaHQgPSBjbGllbnRBcmVhLmhlaWdodCAtIGhlYWRlci5nZXRCb3VuZHMoKS5oZWlnaHQ7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9Db2x1bW5EYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhNTg4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDb2x1bW5EYXRhCi17Ci0gIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCi0gIGNsYXNzIEVudHJ5Ci0gIHsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCB3ZWlnaHQgPSAxOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhckNvbHVtbldpZHRocygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KWkubmV4dCgpOwotICAgICAgZW50cnkud2lkdGggPSAwOwotICAgIH0gIAotICB9ICAKLSAgCi0gIHByaXZhdGUgRW50cnkgbG9va3VwT3JDcmVhdGVDb2x1bW5FbnRyeShTdHJpbmcgaWRlbnRpZmllcikKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KW1hcC5nZXQoaWRlbnRpZmllcik7Ci0gICAgaWYgKGVudHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgRW50cnkoKTsKLSAgICAgIG1hcC5wdXQoaWRlbnRpZmllciwgZW50cnkpOwotICAgIH0gIAotICAgcmV0dXJuIGVudHJ5OyAKLSAgfSAgCi0gIAotICB2b2lkIHN0cmV0Y2hDb2x1bW5XaWR0aElmTmVlZGVkKFN0cmluZyBpZGVudGlmaWVyLCBpbnQgd2lkdGgpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IGxvb2t1cE9yQ3JlYXRlQ29sdW1uRW50cnkoaWRlbnRpZmllcik7Ci0gICAgZW50cnkud2lkdGggPSBNYXRoLm1heChlbnRyeS53aWR0aCwgd2lkdGgpOwotICB9Ci0gIAotICBpbnQgZ2V0Q29sdW1uV2lkdGgoU3RyaW5nIGlkZW50aWZpZXIpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltYXAuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChlbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbnRyeS53aWR0aDsKLSAgICB9ICAKLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIDA7Ly9obW0gc2hvdWxkIHdlIHJldHVybiAtMSA/Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGludCBnZXRDb2x1bW5XZWlnaHQoU3RyaW5nIGlkZW50aWZpZXIpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltYXAuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChlbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbnRyeS53ZWlnaHQ7Ci0gICAgfSAgCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0gIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb2x1bW5XZWlnaHQoU3RyaW5nIGlkZW50aWZpZXIsIGludCB3ZWlnaHQpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IGxvb2t1cE9yQ3JlYXRlQ29sdW1uRW50cnkoaWRlbnRpZmllcik7Ci0gICAgZW50cnkud2VpZ2h0ID0gd2VpZ2h0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9Sb3dMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjNzQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotCi1wdWJsaWMgY2xhc3MgUm93TGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgLy8gbGF5b3V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcmVudCBjb250ZXh0Ci0gIC8vIGFueSBsYXlvdXQgbWFuYWdlciB1bmRlciB0aGUgcGFyZW50IGNvbnRleHQgaXMgY29ubmVjdGVkCi0gIC8vIGNvbHVtbiByb3dzIGFyZSBtYWludGFpbmVkIGFjY3Jvc3MgY29udGFpbmVyIGJvdW5kYXJpZXMgIAotICBwcm90ZWN0ZWQgQ29sdW1uRGF0YSBjb2x1bW5EYXRhOwotICBwcm90ZWN0ZWQgSGFzaE1hcCBmaWd1cmVUb0NvbnRzdHJhaW50TWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCi0gIHB1YmxpYyBSb3dMYXlvdXQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLQotICAvLyB0aGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIHRvIGRpc3BsYXkgdGhlIGZpZ3VyZXMKLSAgLy8KLSAgcHJpdmF0ZSBEaW1lbnNpb24gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKElGaWd1cmUgY29udGFpbmVyLCBMaXN0IGNoaWxkcmVuLCBpbnQgd0hpbnQsIGludCBoSGludCwgYm9vbGVhbiBwcmVmZXJyZWQpCi0gIHsKLSAgICBEaW1lbnNpb24gY2hpbGRTaXplOwotICAgIElGaWd1cmUgY2hpbGQ7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICAKLSAgICAvL0lSb3dGaWd1cmUgZmlndXJlID0gKElSb3dGaWd1cmUpY29udGFpbmVyOwotICAgIAotICAgIC8vIGZvciBlYWNoIGNlbGwgaW4gdGhlIHJvdwotICAgIC8vCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICBTdHJpbmcgY29sdW1uSWRlbmlmaWVyID0gKFN0cmluZylnZXRDb25zdHJhaW50KGNoaWxkKTsKLSAgICAgICAgICAgICAKLSAgICAgIC8vIGZpcnN0IHdlIGNvbXB1dGUgdGhlIGNoaWxkIHNpemUgd2l0aG91dCByZWdhcmQgZm9yIGNvbHVtbkRhdGEKLSAgICAgIC8vCi0gICAgICBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ly8gOiBjaGlsZC5nZXRNaW5pbXVtU2l6ZSh3SGludCwgaEhpbnQpOwotICAgICAgICAKLSAgICAgIC8vIG5vdyB0aGF0IHRoZSBjb2x1bW5EYXRhIGhhcyBiZWVuIHBvcHVsYXRlZCB3ZSBjYW4gY29uc2lkZXIgaWYgdGhlIHJvdyBuZWVkcyB0byBiZSBsYXJnZXIKLSAgICAgIC8vCi0gICAgICBpbnQgZWZmZWN0aXZlV2lkdGggPSBjaGlsZFNpemUud2lkdGg7Ci0gICAgICBpZiAoY29sdW1uSWRlbmlmaWVyICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgY29sdW1uRGF0YS5zdHJldGNoQ29sdW1uV2lkdGhJZk5lZWRlZChjb2x1bW5JZGVuaWZpZXIsIGNoaWxkU2l6ZS53aWR0aCk7Ci0gICAgICAgIGVmZmVjdGl2ZVdpZHRoID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JZGVuaWZpZXIpOwotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBoZWlnaHQgPSBNYXRoLm1heChjaGlsZFNpemUuaGVpZ2h0LCBoZWlnaHQpOwotICAgICAgd2lkdGggKz0gZWZmZWN0aXZlV2lkdGg7Ci0gICAgfSAgCi0gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24od2lkdGgsIGhlaWdodCk7Ci0gIH0KLSAgCi0gIAotICAKLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgeyAgICAKLSAgICBMaXN0IGNoaWxkcmVuID0gY29udGFpbmVyLmdldENoaWxkcmVuKCk7Ci0gICAgRGltZW5zaW9uIHByZWZTaXplID0gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKGNvbnRhaW5lciwgY2hpbGRyZW4sIHdIaW50LCBoSGludCwgdHJ1ZSk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInByZWZlcnJlZFNpemU9IiArIHByZWZTaXplKTsKLSAgICByZXR1cm4gcHJlZlNpemU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBsYXlvdXQgYSB0YWJsZSB3aXRoIHRoZSBjb2x1bW5zIGFsaWduZWQgICAgICAKLSAgICAvL0lSb3dGaWd1cmUgcm93RmlndXJlID0gKElSb3dGaWd1cmUpcGFyZW50OyAgICAKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IHBhcmVudC5nZXRDbGllbnRBcmVhKCk7ICAgCi0gICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgIFJlY3RhbmdsZSByID0gbmV3IFJlY3RhbmdsZSgpOwotICAgIHIueCA9IGNsaWVudEFyZWEueDsKLSAgICByLnkgPSBjbGllbnRBcmVhLnk7Ci0gICAgci5oZWlnaHQgPSBjbGllbnRBcmVhLmhlaWdodDsKLSAgICAKLSAgICBpbnQgY2hpbGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIFJlY3RhbmdsZVtdIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGVbY2hpbGRyZW5TaXplXTsKLSAgICAKLSAgICAvLyBmb3IgZWFjaCBjZWxsIGluIHRoZSByb3cKLSAgICAvLwotICAgIGludCByZXF1aXJlZFdpZHRoID0gMDsKLSAgICBpbnQgdG90YWxDb2x1bW5XZWlnaHQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyBpKyspCi0gICAgewotICAgICAgSUZpZ3VyZSBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICAvL1N0cmluZyBjb2x1bW5JZGVuaWZpZXIgPSBmaWd1cmUuZ2V0Q29sdW1uSWRlbnRpZmllcihjaGlsZCk7ICAgICAgICAgICAgIAotICAgICAgLy8gZmlyc3Qgd2UgY29tcHV0ZSB0aGUgY2hpbGQgc2l6ZSB3aXRob3V0IHJlZ2FyZCBmb3IgY29sdW1uRGF0YQotICAgICAgLy8KLSAgICAgIERpbWVuc2lvbiBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKC0xLCAtMSk7Ci0gICAgICAKLSAgICAgIGludCBjb2x1bW5XaWR0aCA9IC0xOwotICAgICAgLy9TdHJpbmcgY29sdW1uSWRlbnRpZmllciA9IHJvd0ZpZ3VyZS5nZXRDb2x1bW5JZGVudGlmaWVyKGNoaWxkKTsKLSAgICAgIFN0cmluZyBjb2x1bW5JZGVudGlmaWVyID0gKFN0cmluZylnZXRDb25zdHJhaW50KGNoaWxkKTsKLSAgICAgIGlmIChjb2x1bW5JZGVudGlmaWVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vY29sdW1uRGF0YS5zdHJldGNoQ29sdW1uV2lkdGhJZk5lZWRlZChjb2x1bW5JZGVudGlmaWVyLCBjaGlsZFNpemUud2lkdGgpOyAgICAgICAgCi0gICAgICAgIGNvbHVtbldpZHRoID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgdG90YWxDb2x1bW5XZWlnaHQgKz0gY29sdW1uRGF0YS5nZXRDb2x1bW5XZWlnaHQoY29sdW1uSWRlbnRpZmllcik7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5XaWR0aCgiICsgY29sdW1uSWRlbnRpZmllciArICIpPSIgKyBjb2x1bW5XaWR0aCk7ICAgICAgICAKLSAgICAgIH0gIAotICAgICAgci53aWR0aCA9IE1hdGgubWF4KGNoaWxkU2l6ZS53aWR0aCwgY29sdW1uV2lkdGgpOwotICAgICAgcmVxdWlyZWRXaWR0aCArPSByLndpZHRoOwotICAgICAgYm91bmRzW2ldID0gbmV3IFJlY3RhbmdsZShyKTsgICAgICAKLSAgICAgIHIueCArPSByLndpZHRoOwotICAgIH0gICAgICAgICAgCi0gICAgaWYgKHRvdGFsQ29sdW1uV2VpZ2h0IDwgMSkKLSAgICB7Ci0gICAgICB0b3RhbENvbHVtbldlaWdodCA9IDE7Ci0gICAgfQotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjbGllbnRBcmVhLndpZHRoPSIgKyBjbGllbnRBcmVhLndpZHRoICsgIiwgIiArIHIueCk7Ci0gICAgaW50IGV4dHJhV2lkdGggPSBNYXRoLm1heChjbGllbnRBcmVhLndpZHRoIC0gcmVxdWlyZWRXaWR0aCwgMCk7ICAgIAotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleHRyYVdpZHRoPSIgKyBleHRyYVdpZHRoICsgIiB0b3RhbENvbHVtbldlaWdodD0iICsgdG90YWxDb2x1bW5XZWlnaHQpOyAgCi0gICAgaW50IGV4dHJhV2lkdGhBbGxvY2F0ZWQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyBpKyspCi0gICAgewotICAgICAgSUZpZ3VyZSBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7ICAgICAgCi0gICAgICBSZWN0YW5nbGUgYiA9IGJvdW5kc1tpXTsgICAgCi0gICAgICBpZiAoZXh0cmFXaWR0aCA+IDApCi0gICAgICB7ICAKLSAgICAgICAgU3RyaW5nIGNvbHVtbklkZW50aWZpZXIgPSAoU3RyaW5nKWdldENvbnN0cmFpbnQoY2hpbGQpOwotICAgICAgICBpZiAoY29sdW1uSWRlbnRpZmllciAhPSBudWxsKQotICAgICAgICB7ICAgICAgICAKLSAgICAgICAgICBpbnQgd2VpZ2h0ID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XZWlnaHQoY29sdW1uSWRlbnRpZmllcik7Ci0gICAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSAoZmxvYXQpd2VpZ2h0IC8gKGZsb2F0KXRvdGFsQ29sdW1uV2VpZ2h0OwotICAgICAgICAgIGludCBleHRyYVdpZHRoRm9yQ2hpbGQgPSAoaW50KShleHRyYVdpZHRoICogZnJhY3Rpb24pOwotICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleHRyYVdpZHRoRm9yQ2hpbGQoIiArIGZyYWN0aW9uICsgIik9IiArIGV4dHJhV2lkdGhGb3JDaGlsZCk7ICAgICAgICAKLSAgICAgICAgICBiLndpZHRoICs9IGV4dHJhV2lkdGhGb3JDaGlsZDsgICAgICAgIAotICAgICAgICAgIGIueCArPSBleHRyYVdpZHRoQWxsb2NhdGVkOwotICAgICAgICAgIGV4dHJhV2lkdGhBbGxvY2F0ZWQgKz0gZXh0cmFXaWR0aEZvckNoaWxkOwotICAgICAgICB9ICAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYi54ICs9IGV4dHJhV2lkdGhBbGxvY2F0ZWQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNoaWxkLnNldEJvdW5kcyhuZXcgUmVjdGFuZ2xlKGIpKTsgIAotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIENvbHVtbkRhdGEgZ2V0Q29sdW1uRGF0YSgpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGF0YTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbHVtbkRhdGEoQ29sdW1uRGF0YSBjb2x1bW5EYXRhKQotICB7Ci0gICAgdGhpcy5jb2x1bW5EYXRhID0gY29sdW1uRGF0YTsKLSAgfSAgICAKLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0Q29uc3RyYWludChJRmlndXJlIGNoaWxkKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAuZ2V0KGNoaWxkKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29uc3RyYWludChJRmlndXJlIGNoaWxkLCBPYmplY3QgY29uc3RyYWludCkKLSAgewotICAgIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAucHV0KGNoaWxkLCBjb25zdHJhaW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpCi0gIHsKLSAgICAvL2ZpZ3VyZVRvQ29udHN0cmFpbnRNYXAuY2xlYXIoKTsKLSAgICAvL3RoaXMuY29sdW1uRGF0YS5jbGVhckNvbHVtbldpZHRocygpOwotICAgIHN1cGVyLmludmFsaWRhdGUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiaW52YWxpZGF0ZSIpOyAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kaWFsb2dzL0ltcG9ydFNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kaWFsb2dzL0ltcG9ydFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjViZjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGlhbG9ncy9JbXBvcnRTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRpYWxvZ3M7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNlbGVjdFNpbmdsZUZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB1c2VkIHRvIHNlbGVjdCBhIHdzZGwgb3IgeHNkIGZpbGUgbG9jYXRpb24uIFByb3ZpZGVzIHRoZSBjb21wdXRlZAotICogcmVsYXRpdmUgbG9jYXRpb24gb2YgdGhlIGltcG9ydGVkIGZpbGUgdG8gdGhlIGN1cnJlbnRseSBlZGl0ZWQgZmlsZSwgYXMgd2VsbCBhcyAKLSAqIHRoZSBpbXBvcnRlZCBkZWZpbml0aW9uJ3MgdGFyZ2V0IG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIEltcG9ydFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIFNlbGVjdFNpbmdsZUZpbGVEaWFsb2cKLXsKLSAgcHJpdmF0ZSBJRmlsZSBjdXJyZW50V1NETEZpbGU7Ci0KLSAgcHVibGljIEltcG9ydFNlbGVjdGlvbkRpYWxvZyhTaGVsbCBwYXJlbnRTaGVsbCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLCBib29sZWFuIGlzRmlsZU1hbmRhdG9yeSkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsLCBzZWxlY3Rpb24sIGlzRmlsZU1hbmRhdG9yeSk7Ci0KLSAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyBhY3RpdmVXb3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgSVdvcmtiZW5jaFBhZ2UgYWN0aXZlUGFnZSA9IGFjdGl2ZVdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgSUVkaXRvclBhcnQgZWRpdG9yID0gYWN0aXZlUGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKTsKLQotICAgIC8vIFRPRE8gdmIgVXNlIHRoZSBleHRlbnNpb25zIGRlY2xhcmVkIGZvciB0aGUgV1NETCBhbmQgWFNEIGNvbnRlbnQgdHlwZXMgCi0gICAgLy8gaW5zdGVhZCBvZiBoYXJkY29kZWQgZmlsZSBleHRlbnNpb25zLgotCi0gICAgU3RyaW5nW10gZmlsdGVycyA9IHsgInhzZCIsICJ3c2RsIiB9OyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgewotICAgICAgY3VycmVudFdTRExGaWxlID0gKChJRmlsZUVkaXRvcklucHV0KWVkaXRvcklucHV0KS5nZXRGaWxlKCk7Ci0gICAgICBJRmlsZVtdIGV4Y2x1ZGVkRmlsZXMgPSB7IGN1cnJlbnRXU0RMRmlsZSB9OwotICAgICAgYWRkRmlsdGVyRXh0ZW5zaW9ucyhmaWx0ZXJzLCBleGNsdWRlZEZpbGVzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIElGaWxlW10gZXhjbHVkZWRGaWxlcyA9IHt9OwotICAgICAgYWRkRmlsdGVyRXh0ZW5zaW9ucyhmaWx0ZXJzLCBleGNsdWRlZEZpbGVzKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGUoKQotICB7Ci0gICAgc3VwZXIuY3JlYXRlKCk7Ci0gICAgZ2V0U2hlbGwoKS5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9USVRMRV9TRUxFQ1QpOwotICAgIHNldFRpdGxlKE1lc3NhZ2VzLl9VSV9USVRMRV9TRUxFQ1RfRklMRSk7Ci0gICAgc2V0TWVzc2FnZShNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fU0VMRUNUX1dTRExfT1JfWFNEKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlcyB0aGUgaW1wb3J0IGxvY2F0aW9uLCByZWxhdGl2ZSB0byB0aGUgZmlsZSBjdXJyZW50bHkgZWRpdGVkIGluIHRoZSBlZGl0b3IuCi0gICAqIEByZXR1cm4gYSBTdHJpbmcgd2l0aCB0aGUgcmVsYXRpdmUgbG9jYXRpb24gVVJJIG9mIHRoZSBpbXBvcnRlZCBkZWZpbml0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbXBvcnRMb2NhdGlvbigpCi0gIHsKLSAgICBJRmlsZSBzZWxlY3RlZEZpbGUgPSBnZXRGaWxlKCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9uID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlUmVsYXRpdmVVUkkoc2VsZWN0ZWRGaWxlLCBjdXJyZW50V1NETEZpbGUsIHRydWUpOwotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlcyB0aGUgaW1wb3J0ZWQgZGVmaW5pdGlvbidzIHRhcmdldCBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gYSBTdHJpbmcgd2l0aCB0aGUgdGFyZ2UgbmFtZXNwYWNlIG9mIHRoZSBpbXBvcnRlZCBkZWZpbml0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbXBvcnROYW1lc3BhY2UoKQotICB7Ci0gICAgSUZpbGUgc2VsZWN0ZWRGaWxlID0gZ2V0RmlsZSgpOwotICAgIElQYXRoIGZ1bGxQYXRoID0gc2VsZWN0ZWRGaWxlLmdldEZ1bGxQYXRoKCk7Ci0gICAgVVJJIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZ1bGxQYXRoLnRvU3RyaW5nKCksIGZhbHNlKTsKLQotICAgIC8vIFRPRE8gcm0gTm90ZSB0aGF0IHRoZSBnZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEgd29ya3MgZm9yIGJvdGggc2NoZW1hIGFuZCB3c2RsIGZpbGVzCi0gICAgLy8gSSBzaG91bGQgY2hhbmdlIHRoZSBuYW1lIG9mIHRoaXMgY29udmVuaWVuY2UgbWV0aG9kCi0gICAgU3RyaW5nIGltcG9ydFRhcmdldE5hbWVzcGFjZSA9IFdTRExFZGl0b3JVdGlsLmdldFRhcmdldE5hbWVzcGFjZVVSSUZvclNjaGVtYSh1cmkudG9TdHJpbmcoKSk7Ci0KLSAgICByZXR1cm4gaW1wb3J0VGFyZ2V0TmFtZXNwYWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YTNmODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSUFTRE9iamVjdAotewotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKTsKLSAgICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKTsKLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCk7Ci0gICAgcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0TGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyOGMzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmY2JjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElCaW5kaW5nIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIElJbnRlcmZhY2UgZ2V0SW50ZXJmYWNlKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQlwdWJsaWMgTGlzdCBnZXRCaW5kaW5nQ29udGVudExpc3QoKTsKLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCk7Ci0JcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpOyAgCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldEludGVyZmFjZUNvbW1hbmQoSUludGVyZmFjZSBuZXdJbnRlcmZhY2UpOwotCXB1YmxpYyBDb21tYW5kIGdldEdlbmVyYXRlQmluZGluZ0NvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYmM5NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBJTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOGI5OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUJpbmRpbmdPcGVyYXRpb24gZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgSU9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKTsKLQlwdWJsaWMgTGlzdCBnZXRCaW5kaW5nTWVzc2FnZXMoKTsKLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCk7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lEZXNjcmlwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSURlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjdjNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSURlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLQotcHVibGljIGludGVyZmFjZSBJRGVzY3JpcHRpb24gZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0vLwlwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VzSW5mbygpOwkvLyBUT0RPOiBBZGQgdGhpcyBtZXRob2QgaW4gdGhlIGZ1dHVyZQotCQotCXB1YmxpYyBMaXN0IGdldEltcG9ydHMoKTsKLQlwdWJsaWMgTGlzdCBnZXRUeXBlcygpOwotCXB1YmxpYyBMaXN0IGdldFNlcnZpY2VzKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ3MoKTsKLQlwdWJsaWMgTGlzdCBnZXRJbnRlcmZhY2VzKCk7Ci0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW1wb3J0Q29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZFNjaGVtYUNvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRTZXJ2aWNlQ29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZEJpbmRpbmdDb21tYW5kKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW50ZXJmYWNlQ29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZE1lc3NhZ2VDb21tYW5kKCk7Ci0vLwlwdWJsaWMgQ29tbWFuZCBnZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKTsJLy8gVE9ETzogQWRkIHRoaXMgbWV0aG9kIGluIHRoZSBmdXR1cmUKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lFbmRQb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUVuZFBvaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOGZiMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUVuZFBvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElFbmRQb2ludCBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBJU2VydmljZSBnZXRPd25lclNlcnZpY2UoKTsKLQlwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MoKTsKLQlwdWJsaWMgSUJpbmRpbmcgZ2V0QmluZGluZygpOwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0QmluZGluZ0NvbW1hbmQoSUJpbmRpbmcgYmluZGluZyk7Ci0JcHVibGljIENvbW1hbmQgZ2V0U2V0QWRkcmVzc0NvbW1hbmQoU3RyaW5nIG5ld0FkZHJlc3MpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUltcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODlhZWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUltcG9ydCBleHRlbmRzIElOYW1lZE9iamVjdCB7Ci0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKTsKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVByZWZpeCgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQkKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKTsKLQotCXB1YmxpYyBDb21tYW5kIGdldFVwZGF0ZUNvbW1hbmQoU3RyaW5nIGxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgcHJlZml4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbnRlcmZhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmNGRlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElJbnRlcmZhY2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QgewotICBwdWJsaWMgTGlzdCBnZXRPcGVyYXRpb25zKCk7Ci0gIC8qCi0gICAqIEBkZXByZWNhdGVkLiAgVGhlIG1ldGhvZCBnZXRJbWFnZSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUKLSAgICovCi0gIHB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpOwotICBwdWJsaWMgQ29tbWFuZCBnZXRBZGRPcGVyYXRpb25Db21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4NmM1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElNZXNzYWdlIGV4dGVuZHMgSU5hbWVkT2JqZWN0IHsKLQkgIHB1YmxpYyBMaXN0IGdldFBhcnRzKCk7Ci0JICAKLQkgIHB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCSAgCi0JICBwdWJsaWMgQ29tbWFuZCBnZXRBZGRQYXJ0Q29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDBlOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2VSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotLy8gdGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uIG9mIGFuIGlucHV0LCBvdXRwdXQgb3IgZmF1bHQgb2JqZWN0Ci0vLyAob3IgYW55IG90aGVyIGtpbmQgb2Ygb2JqZWN0IGZ1dHVyZSBzcGVjcyBtaWdodCBjb29rIHVwKQotcHVibGljIGludGVyZmFjZSBJTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIElOYW1lZE9iamVjdAoteyAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEtJTkRfSU5QVVQgID0gMTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgS0lORF9PVVRQVVQgPSAyOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBLSU5EX0ZBVUxUID0gMzsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0S2luZCgpOwotICBwdWJsaWMgTGlzdCBnZXRQYXJhbWV0ZXJzKCk7ICAgCi0gIHB1YmxpYyBJT3BlcmF0aW9uIGdldE93bmVyT3BlcmF0aW9uKCk7Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQoSVBhcmFtZXRlciBsZWZ0U2libGluZywgSVBhcmFtZXRlciByaWdodFNpYmxpbmcsIElQYXJhbWV0ZXIgbW92aW5nUGFyYW1ldGVyKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lOYW1lZE9iamVjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU5hbWVkT2JqZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDM3M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU5hbWVkT2JqZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZE9iamVjdCBleHRlbmRzIElBU0RPYmplY3QKLXsgIAotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICAKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXROYW1lQ29tbWFuZChTdHJpbmcgbmV3TmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzI4Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElPcGVyYXRpb24gZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpOwotCXB1YmxpYyBJSW50ZXJmYWNlIGdldE93bmVySW50ZXJmYWNlKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldEFkZElucHV0Q29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZE91dHB1dENvbW1hbmQoKTsKLSAgLy8gVE9ETzogcm1haDogV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgKFNlbmRpbmcgaW4gYW4gZXhpc3RpbmcgRmF1bHRJbXBsIHdoZW4gd2Ugd2FudCB0bwotICAvLyBhZGQgYSBGYXVsdCBQYXJhbWV0ZXIuICBXaGF0IGRvIHdlIHJlYWxseSB3YW50IHRvIGRvIHdoZW4gd2UgYWRkIGEKLSAgLy8gJ25ldyBGYXVsdCcuLi4uIFRoaXMgYWxzbyByZWxhdGVzIHRvIHdoYXQgd2UgcmVhbGx5IHdhbnQgdG8gZG8gd2hlbiB3ZSBkZWxldGUgYSBGYXVsdC4uLgotCXB1YmxpYyBDb21tYW5kIGdldEFkZEZhdWx0Q29tbWFuZChPYmplY3QgZmF1bHQpOwotCXB1YmxpYyBDb21tYW5kIGdldFJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQoSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nTWVzc2FnZVJlZik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JUGFyYW1ldGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwY2U4YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVBhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotCi0vLyB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gZGVzY3JpYmUgaW4gc2ltcGxpZmllZCBkZXNjcml0cGlvbiBvZiB0aGUgaW5wdXQvb3V0cHV0L2ZhdWx0IHN0cnVjdHVyZQotLy8gaW4gdGhlIGZhbWlsaWFyIHN0eWxlIG9mIGEgdHlwaWNhbCBwcm9ncmFtbWluZyBsYW5ndWFnZSBwYXJhbWV0ZXIgZS5nLiAiU3RyaW5nW10gZm9vIgotLy8gCi0vLyBvZnRlbiB0aGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzaW1wbGlmaWNhdGlvbiBvZiBhIG1vcmUgY29tcGxleCBzZXJ2aWNlIGRlc2NyaXB0aW9uIG9yIHNjaGVtYQotLy8gdGhpcyBjbGFzcyBzZXJ2ZXMgY29tbW9uIGRlbm9taW5hdG9yIHRvIGRyaXZlIGEgc2ltcGxlIHZpZXcgb2YgYW4gb3BlcmF0aW9uJ3MgbWVzc2FnZSBzdHJ1Y3R1cmUKLS8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGVkaXRvcnMgY2FuIGNob29zZSB0byBwcm92aWRlICdhZHZhbmNlZCcgdmlld3MgdGhhdCBkZWx2ZSBpbnRvIGFkZGl0aW9uIGRldGFpbHMKLS8vIG9mIGEgTWVzc2FnZSBzdHJ1Y3R1cmUKLXB1YmxpYyBpbnRlcmZhY2UgSVBhcmFtZXRlciBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKTsKLS8vICBTdHJpbmcgZ2V0S2luZCgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZVF1YWxpZmllcigpOwotCQotCS8vIFRPRE86IHJtYWg6IERvIHRoZXNlIHN0cmluZ3MgYmVsb25nIGhlcmU/Pz8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfTkVXX0FDVElPTl9JRCA9ICJTZXRUeXBlQWN0aW9uX0FkZFR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUX0VYSVNUSU5HX0FDVElPTl9JRCA9ICJTZXRUeXBlQWN0aW9uX0V4aXN0aW5nVHlwZSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0VHlwZUNvbW1hbmQoU3RyaW5nIGFjdGlvbklkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTQ4N2RiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElTZXJ2aWNlIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17ICAKLQlwdWJsaWMgTGlzdCBnZXRFbmRQb2ludHMoKTsKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRFbmRQb2ludENvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTk3MzAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElUeXBlIGV4dGVuZHMgSU5hbWVkT2JqZWN0IHsKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjODc1ZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotX1VJX1RBQl9HUkFQSD1EZXNpZ24KLV9VSV9UQUJfU09VUkNFPVNvdXJjZQotX1VJX0JVVFRPTl9ORVc9TmV3Li4uCi1fVUlfTEFCRUxfUkVBRF9PTkxZPXJlYWQtb25seQotX1VJX0xBQkVMX05BTUVTUEFDRT0mTmFtZXNwYWNlOgotX1VJX0xBQkVMX1BPUlRUWVBFPVBvcnQmVHlwZToKLV9VSV9MQUJFTF9MT0NBVElPTj0mTG9jYXRpb246Ci1fVUlfTEFCRUxfQUREUkVTUz0mQWRkcmVzcwotX1VJX0xBQkVMX0JJTkRJTkc9QmluZGluZwotX1VJX0xBQkVMX0JJTkRJTkdfSU5fUFJPUEVSVElFU19TRUNUSU9OPSZCaW5kaW5nOgotX1VJX0xBQkVMX1BSRUZJWD1QcmVmaSZ4OgotX1VJX0xBQkVMX05BTUU9Jk5hbWU6Ci1fVUlfTEFCRUxfVFlQRT0mVHlwZToKLV9VSV9BQ1RJT05fQUREX1NFUlZJQ0U9QWRkICZTZXJ2aWNlCi1fVUlfQUNUSU9OX0FERF9NRVNTQUdFPUFkZCAmTWVzc2FnZQotX1VJX0FDVElPTl9BRERfT1BFUkFUSU9OPUFkZCBPcCZlcmF0aW9uCi1fVUlfQUNUSU9OX0FERF9JTVBPUlQ9QWRkIEkmbXBvcnQKLV9VSV9BQ1RJT05fVVBEQVRFX0lNUE9SVD0mVXBkYXRlIEltcG9ydAotX1VJX0FDVElPTl9BRERfT1VUUFVUPUFkZCBPJnV0cHV0Ci1fVUlfQUNUSU9OX0FERF9GQVVMVD1BZGQgJkZhdWx0Ci1fVUlfQUNUSU9OX0FERF9QT1JUPUFkZCAmUG9ydAotX1VJX0FDVElPTl9BRERfUE9SVFRZUEU9QWRkIFBvcnQmVHlwZQotX1VJX0FDVElPTl9ERUxFVEU9JkRlbGV0ZQotX1VJX0JVVFRPTl9CUk9XU0U9QnJvd3NlLi4uCi1fVUlfQUNUSU9OX05FV19QT1JUVFlQRT0mTmV3IFBvcnRUeXBlLi4uCi1fVUlfQUNUSU9OX05FV19CSU5ESU5HPSZOZXcgQmluZGluZy4uLgotX1VJX0FDVElPTl9FWElTVElOR19QT1JUVFlQRT0mRXhpc3RpbmcgUG9ydFR5cGUuLi4KLV9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQ9JkdlbmVyYXRlIEJpbmRpbmcgQ29udGVudC4uLgotX1VJX0FDVElPTl9FWElTVElOR19CSU5ESU5HPSZFeGlzdGluZyBCaW5kaW5nLi4uCi1fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTD0mUHJvdG9jb2wKLV9VSV9MQUJFTF9UQVJHRVRfTkFNRVNQQUNFPSZUYXJnZXQgbmFtZXNwYWNlOgotX1VJX0FDVElPTl9BRERfQklORElORz1BZGQgJkJpbmRpbmcKLV9VSV9BQ1RJT05fQUREX1NDSEVNQT1BZGQgJlNjaGVtYQotX1VJX0FDVElPTl9BRERfSU5QVVQ9QWRkICZJbnB1dAotX1VJX1NFQ1RJT05fQURWQU5DRURfQVRUUklCVVRFUz0mQWR2YW5jZWQKLQotX1VJX0FDVElPTl9FRElUX05BTUVTUEFDRVMgPSBFZGl0IE5hbWVzcGFjZXMuLi4KLV9VSV9BQ1RJT05fT1BFTl9TQ0hFTUE9Jk9wZW4gU2NoZW1hCi1fVUlfVE9PTFRJUF9SRU5BTUVfUkVGQUNUT1I9Q2xpY2sgaGVyZSB0byBpbnZva2UgdGhlIFJlbmFtZSByZWZhY3RvcmluZy4KLQotX1VJX0xBQkVMX1JJR0hUX0NMSUNLX1RPX0lOU0VSVF9DT05URU5UPVJpZ2h0IG1vdXNlIGNsaWNrIGhlcmUgdG8gaW5zZXJ0IGNvbnRlbnQKLV9VSV9BQ1RJT05fU0hPV19QUk9QRVJUSUVTPVNobyZ3IHByb3BlcnRpZXMKLV9FUlJPUl9MQUJFTF9QUkVGSVhfRVhJU1RTPVByZWZpeCBhbHJlYWR5IGV4aXN0cwotX1VJX1JFRkFDVE9SX0NPTlRFWFRfTUVOVT1SZWZhYyZ0b3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NTUwMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0FTRENvbnRlbnRPdXRsaW5lUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIEFTRENvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7Ci0JcHJvdGVjdGVkIEFTRE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yOwotCXByb3RlY3RlZCBJRGVzY3JpcHRpb24gbW9kZWw7Ci0JcHJvdGVjdGVkIElUcmVlQ29udGVudFByb3ZpZGVyIGNvbnRlbnRQcm92aWRlcjsKLQlwcm90ZWN0ZWQgSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcjsKLQlwcm90ZWN0ZWQgSU1lbnVMaXN0ZW5lciBtZW51TGlzdGVuZXI7Ci0JCi0JcHVibGljIEFTRENvbnRlbnRPdXRsaW5lUGFnZShBU0RNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yLCBJTWVudUxpc3RlbmVyIG1lbnVMaXN0ZW5lcikgewotCQl3c2RsRWRpdG9yID0gZWRpdG9yOwotCQl0aGlzLm1lbnVMaXN0ZW5lciA9IG1lbnVMaXN0ZW5lcjsKLQl9Ci0JCi0JcHVibGljIFRyZWVWaWV3ZXIgZ2V0VHJlZVZpZXdlcigpIHsKLQkJcmV0dXJuIHN1cGVyLmdldFRyZWVWaWV3ZXIoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0Q29udGVudFByb3ZpZGVyKElUcmVlQ29udGVudFByb3ZpZGVyIGNvbnRlbnRQcm92aWRlcikgewotCQl0aGlzLmNvbnRlbnRQcm92aWRlciA9IGNvbnRlbnRQcm92aWRlcjsKLQl9CQotCQotCXB1YmxpYyB2b2lkIHNldExhYmVsUHJvdmlkZXIoSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcikgewotCQl0aGlzLmxhYmVsUHJvdmlkZXIgPSBsYWJlbFByb3ZpZGVyOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRNb2RlbChJRGVzY3JpcHRpb24gbW9kZWwpIHsKLQkJdGhpcy5tb2RlbCA9IG1vZGVsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsgICAgICAgICAgICAgICAgIAotCQkKLQkJZ2V0VHJlZVZpZXdlcigpLnNldENvbnRlbnRQcm92aWRlcihjb250ZW50UHJvdmlkZXIpOwotCQlnZXRUcmVlVmlld2VyKCkuc2V0TGFiZWxQcm92aWRlcihsYWJlbFByb3ZpZGVyKTsKLQkJZ2V0VHJlZVZpZXdlcigpLnNldElucHV0KG1vZGVsKTsKLQkJZ2V0VHJlZVZpZXdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJCi0JCU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCIjcG9wdXAiKTsvLyROT04tTkxTLTEkCi0JCW1lbnVNYW5hZ2VyLnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKLQkJTWVudSBtZW51ID0gbWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUoZ2V0VHJlZVZpZXdlcigpLmdldENvbnRyb2woKSk7Ci0JCWdldFRyZWVWaWV3ZXIoKS5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKLQkJbWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyKG1lbnVMaXN0ZW5lcik7Ci0JCQotCSAgICBnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudSgib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucG9wdXAub3V0bGluZSIsIG1lbnVNYW5hZ2VyLCB3c2RsRWRpdG9yLmdldFNlbGVjdGlvbk1hbmFnZXIoKSk7IC8vJE5PTi1OTFMtMSQKLQkJICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldENvbnRyb2woKSxBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9PVVRMSU5FX1ZJRVcpOyAKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc2luZ1NlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOwotCQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCWlmICghcHJvY2Vzc2luZ1NlbGVjdGlvbkNoYW5nZSkgewotCQkJcHJvY2Vzc2luZ1NlbGVjdGlvbkNoYW5nZSA9IHRydWU7Ci0JCQlzdXBlci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKLQkJCU9iamVjdCBzZWxlY3Rpb24gPSBudWxsOwotCQkJCi0JCQlpZiAoKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpIGluc3RhbmNlb2YgRWRpdFBhcnQpewotCQkJCUVkaXRQYXJ0IG5ld0VkaXRQYXJ0ID0gKEVkaXRQYXJ0KSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJc2VsZWN0aW9uID0gbmV3RWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNlbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCX0KLQkKLQkJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCkgewotCQkJCXNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb24pKTsKLQkJCX0KLQkJCXByb2Nlc3NpbmdTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0FTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkOTMwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLQotcHVibGljIGNsYXNzIEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIgaW1wbGVtZW50cyBJVHJlZUNvbnRlbnRQcm92aWRlciwgSUxhYmVsUHJvdmlkZXIsIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0JcHJvdGVjdGVkIFZpZXdlciB2aWV3ZXI7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQKLSAgICAgKi8KLQlwcm90ZWN0ZWQgQVNETXVsdGlQYWdlRWRpdG9yIGVkaXRvcjsKLQlwcm90ZWN0ZWQgTGlzdCBsaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQKLSAgICAgKi8gICAgCi0JcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQotICAgIHB1YmxpYyBBU0RDb250ZW50T3V0bGluZVByb3ZpZGVyKCkKLSAgICB7ICAgICAgCi0gICAgfQotICAgIAotCXB1YmxpYyBBU0RDb250ZW50T3V0bGluZVByb3ZpZGVyKEFTRE11bHRpUGFnZUVkaXRvciBlZGl0b3IsIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCSAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7Ci0gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JfQotCQotCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkgewotCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotCQkJSVRyZWVFbGVtZW50W10ga2lkcyA9ICgoSVRyZWVFbGVtZW50KSBwYXJlbnRFbGVtZW50KS5nZXRDaGlsZHJlbigpOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGtpZHMubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJYXR0YWNoTGlzdGVuZXIoa2lkc1tpbmRleF0pOwotCQkJfQotCQkJCi0JCQlyZXR1cm4ga2lkczsKLQkJfQotCi0JCXJldHVybiBuZXcgT2JqZWN0WzBdOyAKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotCQkJcmV0dXJuICgoSVRyZWVFbGVtZW50KSBlbGVtZW50KS5nZXRQYXJlbnQoKTsKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGdldENoaWxkcmVuKGVsZW1lbnQpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCXJldHVybiBnZXRDaGlsZHJlbihpbnB1dEVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXVuYXR0YWNoQWxsTGlzdGVuZXJzKCk7Ci0JCXZpZXdlciA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JCXRoaXMudmlld2VyID0gdmlld2VyOwotCQl1bmF0dGFjaEFsbExpc3RlbmVycygpOwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotCQkJcmV0dXJuICgoSVRyZWVFbGVtZW50KSBlbGVtZW50KS5nZXRJbWFnZSgpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotICAgIAotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgewotCQlTdHJpbmcgdGV4dCA9IG51bGw7Ci0gICAgICAgICAKLSAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsgCi0JCQl0ZXh0ID0gICgoSU5hbWVkT2JqZWN0KSBlbGVtZW50KS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotCQkJdGV4dCA9ICgoSVRyZWVFbGVtZW50KSBlbGVtZW50KS5nZXRUZXh0KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0ZXh0ID0gZWxlbWVudC50b1N0cmluZygpOwotCQl9Ci0JCQotCQlpZiAodGV4dCA9PSBudWxsKSB7Ci0JCQl0ZXh0ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQkKLQkJcmV0dXJuIHRleHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCi0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGF0dGFjaExpc3RlbmVyKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElBU0RPYmplY3QgJiYgIWxpc3RlbmVycy5jb250YWlucyhvYmplY3QpKSB7Ci0JCQkoKElBU0RPYmplY3QpIG9iamVjdCkucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJCWxpc3RlbmVycy5hZGQob2JqZWN0KTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB1bmF0dGFjaEFsbExpc3RlbmVycygpIHsKLQkJSXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkoKElBU0RPYmplY3QpIGl0ZW0pLnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpIHsgICAgICAgICAgICAgCi0JCWlmICh2aWV3ZXIgaW5zdGFuY2VvZiBUcmVlVmlld2VyKSB7Ci0JCQlUcmVlVmlld2VyIHRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcikgdmlld2VyOwotCQkJdHJlZVZpZXdlci5yZWZyZXNoKG9iamVjdCk7Ci0JCQl0cmVlVmlld2VyLnJldmVhbChvYmplY3QpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JQ2F0ZWdvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvSUNhdGVnb3J5QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDNkODI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JQ2F0ZWdvcnlBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBJQ2F0ZWdvcnlBZGFwdGVyIHsKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JVHJlZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JVHJlZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhMmQ3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvSVRyZWVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVRyZWVFbGVtZW50IHsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBJVHJlZUVsZW1lbnRbXSBFTVBUWV9MSVNUID0ge307Ci0gIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCk7Ci0gIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKTsKLSAgYm9vbGVhbiBoYXNDaGlsZHJlbigpOwotICBTdHJpbmcgZ2V0VGV4dCgpOwotICBJbWFnZSBnZXRJbWFnZSgpOwotICBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTREFic3RyYWN0U2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTREFic3RyYWN0U2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDgwMGU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RBYnN0cmFjdFNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJTdGF0dXNMaW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTaGFyZWRJbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5GaWxlU3RvcmVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLkFic3RyYWN0UHJvcGVydHlTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdExpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWJzdHJhY3RTZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RQcm9wZXJ0eVNlY3Rpb24gaW1wbGVtZW50cyBJU2VjdGlvbiwgSUFTRE9iamVjdExpc3RlbmVyLCBMaXN0ZW5lciwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLQlwcml2YXRlIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3Rvcnk7Ci0JcHJpdmF0ZSBPYmplY3QgZWxlbWVudE1vZGVsOwotCXByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbXBvc2l0ZTsKLQlwcm90ZWN0ZWQgaW50IHJpZ2h0TWFyZ2luU3BhY2U7Ci0JcHJvdGVjdGVkIGludCB0YWJsZU1pbmltdW1XaWR0aCA9IDUwOwotCXByb3RlY3RlZCBDdXN0b21MaXN0ZW5lciBjdXN0b21MaXN0ZW5lciA9IG5ldyBDdXN0b21MaXN0ZW5lcigpOwotCXByaXZhdGUgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmU7Ci0JCi0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBJbWFnZSBJQ09OX0VSUk9SID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfRVJST1JfVFNLKTsKLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSkKLQl7Ci0JCWNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgdGFiYmVkUHJvcGVydHlTaGVldFBhZ2UuZ2V0V2lkZ2V0RmFjdG9yeSgpKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGFGYWN0b3J5KQotCXsKLQkJdGhpcy5mYWN0b3J5ID0gYUZhY3Rvcnk7Ci0JCUdDIGdjID0gbmV3IEdDKHBhcmVudCk7Ci0JCVBvaW50IGV4dGVudCA9IGdjLnRleHRFeHRlbnQoIiAgLi4uICAiKTsgLy8kTk9OLU5MUy0xJAotCQlyaWdodE1hcmdpblNwYWNlID0gZXh0ZW50Lng7Ci0JCWdjLmRpc3Bvc2UoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI3NldElucHV0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5wdXQoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCSAgc3VwZXIuc2V0SW5wdXQocGFydCwgc2VsZWN0aW9uKTsKLQkgIEFzc2VydC5pc1RydWUoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pOwotCSAgT2JqZWN0IGlucHV0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotCSAgZWxlbWVudE1vZGVsID0gaW5wdXQ7Ci0JICBhdHRhY2hMaXN0ZW5lcihlbGVtZW50TW9kZWwpOwotCi0JICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JICAgIGlzUmVhZE9ubHkgPSAoKElBU0RPYmplY3QpIGlucHV0KS5pc1JlYWRPbmx5KCk7Ci0JICB9Ci0KLQkgIElFZGl0b3JQYXJ0IG93bmluZ0VkaXRvciA9IG51bGw7Ci0JICBpZiAocGFydCE9bnVsbCkgewotCSAgICBpZiAocGFydCBpbnN0YW5jZW9mIElFZGl0b3JQYXJ0KSB7Ci0JICAgICAgb3duaW5nRWRpdG9yID0gKElFZGl0b3JQYXJ0KXBhcnQ7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCSAgICAgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkgewotCSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JICAgICAgICBpZiAod2luZG93ICE9IG51bGwpIHsKLQkgICAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JICAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKLQkgICAgICAgICAgICBvd25pbmdFZGl0b3IgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JICBpZiAob3duaW5nRWRpdG9yICE9IG51bGwpIHsKLQkgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gb3duaW5nRWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0JICAgIGlmICghKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCB8fCBlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KSkgewotCSAgICAgIGlzUmVhZE9ubHkgPSB0cnVlOwotCSAgICB9Ci0JICB9Ci0JICByZWZyZXNoKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNhYm91dFRvQmVTaG93bigpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlU2hvd24oKQotCXsKLQkJcmVmcmVzaCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jYWJvdXRUb0JlSGlkZGVuKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhYm91dFRvQmVIaWRkZW4oKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQkJdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2dldE1pbmltdW1IZWlnaHQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TWluaW11bUhlaWdodCgpCi0JewotCQlyZXR1cm4gU1dULkRFRkFVTFQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpCi0JewotCQlpZiAoIWNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpCi0JCXsKLQkJCWlmIChpc1JlYWRPbmx5KQotCQkJewotCQkJCWNvbXBvc2l0ZS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQljb21wb3NpdGUuc2V0RW5hYmxlZCh0cnVlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdpZGdldCBmYWN0b3J5LgotCSAqIEByZXR1cm4gdGhlIHdpZGdldCBmYWN0b3J5LgotCSAqLwotCXB1YmxpYyBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBnZXRXaWRnZXRGYWN0b3J5KCkgewotCQlyZXR1cm4gZmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLQl7Ci0JCXJlZnJlc2goKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7fQotCQotCXB1YmxpYyB2b2lkIGRvV2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7fQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJewotCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCWRvV2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGUpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0KLQkJCi0JfQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCXsKLQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgCi0JCXsKLQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQlkb1dpZGdldFNlbGVjdGVkKGUpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0KLQkJCi0JfQotCQotCWJvb2xlYW4gbGlzdGVuZXJFbmFibGVkID0gdHJ1ZTsKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKiBAcmV0dXJuIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0xpc3RlbmVyRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGxpc3RlbmVyRW5hYmxlZDsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgYXBwbHlUZXh0TGlzdGVuZXJzKENvbnRyb2wgY29udHJvbCkKLSAgICB7Ci0gICAgICBjb250cm9sLmFkZExpc3RlbmVyKFNXVC5Gb2N1c091dCwgY3VzdG9tTGlzdGVuZXIpOwotICAgICAgY29udHJvbC5hZGRMaXN0ZW5lcihTV1QuS2V5RG93biwgY3VzdG9tTGlzdGVuZXIpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcnMoQ29udHJvbCBjb250cm9sKQotICAgIHsKLSAgICAgIGNvbnRyb2wucmVtb3ZlTGlzdGVuZXIoU1dULkZvY3VzT3V0LCBjdXN0b21MaXN0ZW5lcik7Ci0gICAgICBjb250cm9sLnJlbW92ZUxpc3RlbmVyKFNXVC5LZXlEb3duLCBjdXN0b21MaXN0ZW5lcik7Ci0gICAgfQotCQotCS8qKgotCSAqIFNldCB0aGUgdmFsdWUgb2YgbGlzdGVuZXJFbmFibGVkLgotCSAqIEBwYXJhbSB2ICBWYWx1ZSB0byBhc3NpZ24gdG8gbGlzdGVuZXJFbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldExpc3RlbmVyRW5hYmxlZChib29sZWFuICB2KSAKLQl7Ci0JCXRoaXMubGlzdGVuZXJFbmFibGVkID0gdjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJewotCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLS8vCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJfSAvLyBlbmQgb2YgaWYgKCkKLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCQotCX0KLQkKLQlwcm90ZWN0ZWQgRGVsYXllZEV2ZW50IGRlbGF5ZWRUYXNrOwotCQotCXByb3RlY3RlZCB2b2lkIHN0YXJ0RGVsYXllZEV2ZW50KEV2ZW50IGUpCi0JewotCQlpZiAoZGVsYXllZFRhc2sgPT0gbnVsbCB8fAotCQkJCWRlbGF5ZWRUYXNrLmdldEV2ZW50KCkgPT0gbnVsbCkKLQkJewotCQkJZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0JCQlkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsZGVsYXllZFRhc2spOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJRXZlbnQgZGVsYXllZEV2ZW50ID0gZGVsYXllZFRhc2suZ2V0RXZlbnQoKTsKLQkJCQotCQkJaWYgKGUud2lkZ2V0ID09IGRlbGF5ZWRFdmVudC53aWRnZXQgJiYKLQkJCQkJZS50eXBlID09IGRlbGF5ZWRFdmVudC50eXBlKQotCQkJewotCQkJCS8vIHNhbWUgZXZlbnQsIGp1c3QgZGlmZmVyZW50IGRhdGEsIGRlbGF5IG5ldyBldmVudAotCQkJCWRlbGF5ZWRUYXNrLnNldEV2ZW50KG51bGwpOwotCQkJfQotCQkJZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0JCQlkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsZGVsYXllZFRhc2spOwotCQl9Ci0JfQotCQotCWNsYXNzIERlbGF5ZWRFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0JewotCQlwcm90ZWN0ZWQgRXZlbnQgZXZlbnQ7Ci0JCQotCQkvKgotCQkgKiBAc2VlIFJ1bm5hYmxlI3J1bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBydW4oKQotCQl7Ci0JCQlpZiAoZXZlbnQgIT0gbnVsbCkKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCWRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJCWV2ZW50ID0gbnVsbDsKLQkJCX0KLQkJfQotCQkKLQkJLyoqCi0JCSAqIEdldHMgdGhlIGV2ZW50LgotCQkgKiBAcmV0dXJuIFJldHVybnMgYSBFdmVudAotCQkgKi8KLQkJcHVibGljIEV2ZW50IGdldEV2ZW50KCkKLQkJewotCQkJcmV0dXJuIGV2ZW50OwotCQl9Ci0JCQotCQkvKioKLQkJICogU2V0cyB0aGUgZXZlbnQuCi0JCSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2V0Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRFdmVudChFdmVudCBldmVudCkKLQkJewotCQkJdGhpcy5ldmVudCA9IGV2ZW50OwotCQl9Ci0JCQotCX0KLQkgICAKLSAgICBjbGFzcyBDdXN0b21MaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyCi0gICAgewotICAgICAgYm9vbGVhbiBpc0hhbmRsaW5nRXZlbnQgPSBmYWxzZTsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNSZWFkT25seSkgCi0gICAgICAgIHsKLSAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTV1QuS2V5RG93biA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkNSKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0hhbmRsaW5nRXZlbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIGRvSGFuZGxlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTV1QuRm9jdXNPdXQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWlzSGFuZGxpbmdFdmVudCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlzSGFuZGxpbmdFdmVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZG9IYW5kbGVFdmVudChldmVudCk7Ci0gICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzSW5Eb0hhbmRsZTsKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIGlzSW5Eb0hhbmRsZS4KLQkgKiBAcmV0dXJuIHZhbHVlIG9mIGlzSW5Eb0hhbmRsZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0luRG9IYW5kbGUoKSAKLQl7Ci0JCXJldHVybiBpc0luRG9IYW5kbGU7Ci0JfQotCQotCXN0YXRpYyBwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGdldFN0YXR1c0xpbmVNYW5hZ2VyKElFZGl0b3JQYXJ0IGVkaXRvclBhcnQpCi0JeyAKLQkJSVN0YXR1c0xpbmVNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeQotCQl7ICAgICAgICAgICAgICAgICAgICAgICAKLQkJCUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yID0gKEVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yKWVkaXRvclBhcnQuZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7Ci0JCQlyZXN1bHQgPSBjb250cmlidXRvci5nZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJfSAgCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBlbGVtZW50TW9kZWw7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGF0dGFjaExpc3RlbmVyKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElBU0RPYmplY3QgJiYgIWxpc3RlbmVycy5jb250YWlucyhvYmplY3QpKSB7Ci0JCQkoKElBU0RPYmplY3QpIG9iamVjdCkucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJCWxpc3RlbmVycy5hZGQob2JqZWN0KTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB1bmF0dGFjaEFsbExpc3RlbmVycygpIHsKLQkJSXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkoKElBU0RPYmplY3QpIGl0ZW0pLnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKENvbnRyb2wgY29udHJvbCkgewotCQlpZiAoY29udHJvbCAhPSBudWxsKSB7Ci0JCQlpZiAoaXNSZWFkT25seSkgewotCQkJCWNvbnRyb2wuc2V0Rm9yZWdyb3VuZChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWNvbnRyb2wuc2V0Rm9yZWdyb3VuZChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZUNvbW1hbmQoQ29tbWFuZCBjb21tYW5kKSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpICE9IG51bGwgJiYgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIHN0YXR1cyBsaW5lLgotICAgICAqIENhbGwgc2V0RXJyb3JNZXNzYWdlKG51bGwpIHRvIGNsZWFyIHRoZSBzdGF0dXMgbGluZS4KLSAgICAgKiBAcGFyYW0gdGV4dCAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nIHRleHQpCi0gICAgewotICAgICAgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmUgPSBnZXRTdGF0dXNMaW5lTWFuYWdlcigpOwotCi0gICAgICBpZiAoc3RhdHVzTGluZSE9bnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRleHQ9PW51bGwgfHwgdGV4dC5sZW5ndGgoKTwxKQotICAgICAgICAgIHN0YXR1c0xpbmUuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdHVzTGluZS5zZXRFcnJvck1lc3NhZ2UoSUNPTl9FUlJPUiwgdGV4dCk7Ci0KLSAgICAgICAgLy8gZW5zdXJlIG91ciBtZXNzYWdlIGdldHMgZGlzcGxheWVkCi0gICAgICAgIGlmIChzdGF0dXNMaW5lIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uTWFuYWdlcikKLSAgICAgICAgICAoKFN1YkNvbnRyaWJ1dGlvbk1hbmFnZXIpc3RhdHVzTGluZSkuc2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXR1c0xpbmUudXBkYXRlKHRydWUpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnRlbmRlZCB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2VzLgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwcml2YXRlIElTdGF0dXNMaW5lTWFuYWdlciBnZXRTdGF0dXNMaW5lTWFuYWdlcigpCi0gICAgewotICAgICAgaWYgKHN0YXR1c0xpbmU9PW51bGwgJiYgZ2V0UGFydCgpIT1udWxsKQotICAgICAgewotICAgICAgICBpZihnZXRQYXJ0KCkuZ2V0U2l0ZSgpIGluc3RhbmNlb2YgSUVkaXRvclNpdGUpCi0gICAgICAgICAgc3RhdHVzTGluZSA9ICgoSUVkaXRvclNpdGUpZ2V0UGFydCgpLmdldFNpdGUoKSkuZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7Ci0gICAgICAgIGVsc2UgaWYgKGdldFBhcnQoKS5nZXRTaXRlKCkgaW5zdGFuY2VvZiBJVmlld1NpdGUpCi0gICAgICAgICAgc3RhdHVzTGluZSA9ICgoSVZpZXdTaXRlKWdldFBhcnQoKS5nZXRTaXRlKCkpLmdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOwotICAgICAgICAKLSAgICAgICAgLyogCi0gICAgICAgICAqIFdlIG11c3QgbWFudWFsbHkgc2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzdGF0dXMgbGluZSBzaW5jZSB0aGUgYWN0aW9uIGJhcnMgYXJlIGZyb20gdGhlIGVkaXRvcgotICAgICAgICAgKiB3aGljaCBtZWFucyB0aGUgc3RhdHVzIGxpbmUgb25seSBzaG93cyB1cCB3aGVuIHRoZSBlZGl0b3IgaXMgaW4gZm9jdXMgKGJ5IGRlZmF1bHQpLgotICAgICAgICAgKiBOb3RlIG9ubHkgYSBTdWJTdGF0dXNMaW5lTWFuYWdlciBjYW4gc2V0IHRoZSB2aXNpYmlsaXR5LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0YXR1c0xpbmUgaW5zdGFuY2VvZiBTdWJTdGF0dXNMaW5lTWFuYWdlcikKLSAgICAgICAgICAoKFN1YlN0YXR1c0xpbmVNYW5hZ2VyKXN0YXR1c0xpbmUpLnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBzdGF0dXNMaW5lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZjY1ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRQYWdlOwotCi1wdWJsaWMgY2xhc3MgQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UgZXh0ZW5kcyBUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIvLywgSUVsZW1lbnRMaXN0ZW5lcgotewotICAvKioKLSAgICogQHBhcmFtIHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3IKLSAgICovCi0gIHB1YmxpYyBBU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZShJVGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvciB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yKQotICB7Ci0gICAgc3VwZXIodGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcik7Ci0vLyAgICB0YWJDb250cmlidXRvciA9IHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3I7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotICAJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOwotICB9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSkgewotCQkJc2VsZWN0aW9uQ2hhbmdlZChnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKSwgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOwotCQkgICAgLy9zdXBlci5zZWxlY3Rpb25DaGFuZ2VkKGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpLCBldmVudC5nZXRTZWxlY3Rpb24oKSk7Ci0JCX0KLQl9Ci0gIAotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0JpbmRpbmdTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQmluZGluZ1NlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3ZmQ2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQmluZGluZ1NlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nU2VjdGlvbiBleHRlbmRzIFJlZmVyZW5jZVNlY3Rpb24gaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7Ci0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXI7Ci0JcHJpdmF0ZSBDTGFiZWwgcHJvdG9jb2xWYWx1ZTsKLS8vCXByaXZhdGUgQ0xhYmVsIG9wdGlvbnNWYWx1ZTsKLQlwcml2YXRlIEJ1dHRvbiByZWdlbkJpbmRpbmdCdXR0b247Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkgewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljb21ib0xhYmVsLnNldFRleHQob3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzLl9VSV9MQUJFTF9QT1JUVFlQRSk7Ci0JCQotCQlDTGFiZWwgcHJvdG9jb2xMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTF9JTl9QUk9QRVJUSUVTX1NFQ1RJT04pOwotCQlwcm90b2NvbFZhbHVlPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCQotCQkvLyBMYXlvdXQgcHJvdG9jb2xMYWJlbAotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HOwotCSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLQkJcHJvdG9jb2xMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJLy8gTGF5b3V0IHByb3RvY29sVmFsdWUKLQkJcHJvdG9jb2xWYWx1ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJCi0JCS8qCi0JCUNMYWJlbCBvcHRpb25zTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfVElUTEVfT1BUSU9OUyIpICsgIjoiKTsKLQkJb3B0aW9uc1ZhbHVlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICIiKTsKLQkJCi0JCS8vIExheW91dCBvcHRpb25zTGFiZWwKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc1ZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG9wdGlvbnNWYWx1ZSwgMCwgU1dULkNFTlRFUik7Ci0JCW9wdGlvbnNMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJLy8gTGF5b3V0IG9wdGlvbnNWYWx1ZQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xWYWx1ZSwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotLy8JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sVmFsdWUsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJb3B0aW9uc1ZhbHVlLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlTdHJpbmcgYnV0dG9uTGFiZWwgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfR0VORVJBVEVfQklORElOR19DT05URU5UIik7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCBidXR0b25MYWJlbCwgU1dULlBVU0gpOwotCi0JCS8vIExheW91dCBidXR0b24KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChvcHRpb25zVmFsdWUsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc0xhYmVsLCAwKTsKLQkJcmVnZW5CaW5kaW5nQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0JCSovCi0KLQkJU3RyaW5nIGJ1dHRvbkxhYmVsID0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzLl9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQ7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCBidXR0b25MYWJlbCwgU1dULlBVU0gpOwotCi0JCS8vIExheW91dCBidXR0b24KLQkJZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMjsKLQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuQkVHSU5OSU5HOwotCQlyZWdlbkJpbmRpbmdCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlyZWdlbkJpbmRpbmdCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sVmFsdWUsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfUFJPVE9DT0xfVEVYVCk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVnZW5CaW5kaW5nQnV0dG9uLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19CSU5ESU5HX0dFTl9CSU5ESU5HX0JVVFRPTik7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfUE9SVFRZUEVfQ09NQk8pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCUlCaW5kaW5nIGJpbmRpbmcgPSBnZXRJQmluZGluZygpOwotCQlTdHJpbmcgcHJvdG9jb2wgPSBiaW5kaW5nLmdldFByb3RvY29sKCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sKTsKLQkJaWYgKGV4dCAhPSBudWxsKSB7Ci0JCSAgcHJvdG9jb2wgPSBleHQuZ2V0TGFiZWwoKTsKLQkJfQotCi0JCWlmIChwcm90b2NvbCA9PSBudWxsIHx8IHByb3RvY29sLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJcHJvdG9jb2wgPSAiLS0tLSI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlwcm90b2NvbFZhbHVlLnNldFRleHQocHJvdG9jb2wpOwotCi0vLwkJb3B0aW9uc1ZhbHVlLnNldFRleHQoIiIpOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0KLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsKLQkJCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldENvbWJvSXRlbXMoKSB7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkKLQkJTGlzdCBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaXRlbXMuYWRkKEJST1dTRV9TVFJJTkcpOwotCQlpdGVtcy5hZGQoTkVXX1NUUklORyk7Ci0KLQkJaWYgKG1hbmFnZXIgIT0gbnVsbCkgewotICAJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBjb21ib0l0ZW1zID0gbWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tYm9JdGVtcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGl0ZW1zLmFkZChjb21ib0l0ZW1zW2luZGV4XSk7Ci0gICAgICB9Ci0JCX0KLQkJcmV0dXJuIGl0ZW1zOwotCX0KLQotCXByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpIHsKLQkJSUJpbmRpbmcgYmluZGluZyA9IGdldElCaW5kaW5nKCk7Ci0JCXJldHVybiBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0Q29tYm9JdGVtTmFtZShPYmplY3QgaXRlbSkgewotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChpdGVtIGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJbmFtZSA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJSW50ZXJmYWNlKSB7Ci0JCQluYW1lID0gKChJSW50ZXJmYWNlKSBpdGVtKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJbmFtZSA9IChTdHJpbmcpIGl0ZW07Ci0JCX0KLQkJCi0JCXJldHVybiBuYW1lOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1Db21ib1NlbGVjdGlvbihPYmplY3QgaXRlbSkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBudWxsOwotCQkKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlzcGVjID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGl0ZW07Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBtYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCW1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKChJQmluZGluZykgZ2V0TW9kZWwoKSwgc3BlYyk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJaWYgKGl0ZW0uZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24ocGFydCk7Ci0JCQkJYWN0aW9uLnNldElCaW5kaW5nKChJQmluZGluZykgZ2V0TW9kZWwoKSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQkJZWxzZSBpZiAoaXRlbS5lcXVhbHMoTkVXX1NUUklORykpIHsKLQkJCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQkJCUFTRFNldE5ld0ludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJQmluZGluZygoSUJpbmRpbmcpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJfQotCi0JCXJlZnJlc2goKTsKLQl9Ci0KLQlwcml2YXRlIElCaW5kaW5nIGdldElCaW5kaW5nKCkgewotCQlyZXR1cm4gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCWlmIChlLndpZGdldCA9PSByZWdlbkJpbmRpbmdCdXR0b24pIHsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IGdldElCaW5kaW5nKCkuZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpOwotCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9Eb2N1bWVudGF0aW9uU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0RvY3VtZW50YXRpb25TZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYjlhZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0RvY3VtZW50YXRpb25TZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkRWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBEb2N1bWVudGF0aW9uU2VjdGlvbiBleHRlbmRzIEFTREFic3RyYWN0U2VjdGlvbiB7Ci0JVGV4dCBkb2NUZXh0OwotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJY29tcG9zaXRlID0JZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCQotCQlkb2NUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIiwgU1dULk1VTFRJIHwgU1dULk5PTkUgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOyAvLyROT04tTkxTLTEkCi0JCWRvY1RleHQuYWRkTGlzdGVuZXIoU1dULktleURvd24sIHRoaXMpOwotCQlkb2NUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLCB0cnVlLCB0cnVlKSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZG9jVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfRE9DVU1FTlRBVElPTl9UQUIpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCS8qCi0JICogVE9ETzogdGhlIGRvSGFuZGxlRXZlbnQoKSBhbmQgcmVmcmVzaCgpIG1ldGhvZHMgYm90aCB1c2UgV1NETDExIHNwZWNpZmljCi0JICoga25vd2xlZGdlLiAgVGhpcyBjbGFzcyAoRG9jdW1lbnRhdGlvblNlY3Rpb24pIHNob3VsZCBiZSBnZW5lcmljLiAgSW4gUG9zdCAxLjUsCi0JICogd2UgbmVlZCB0byBhZGQgZG9jdW1lbnRhdGlvbiBzdXBwb3J0IG1ldGhvZHMgdG8gb3VyIGZhY2FkZSBzbyB3ZSBkb24ndCBuZWVkCi0JICogdG8ga25vdyBXU0RMIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uLi4uLiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkKLQl7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKGRvY1RleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCWRvY1RleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdldE1vZGVsKCkgIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgIT0gbnVsbCkKLQkJewotCQkJRWxlbWVudCBkb2NOb2RlID0gZ2V0RWxlbWVudCgpLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0JCQlpZiAoZG9jTm9kZSAhPSBudWxsKQotCQkJewotCQkJCU5vZGUgdGV4dE5vZGUgPSBkb2NOb2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJCQlpZiAodGV4dE5vZGUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCVN0cmluZyBkb2NWYWx1ZSA9IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpOwotCQkJCQlpZiAoZG9jVmFsdWUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJZG9jVGV4dC5zZXRUZXh0KGRvY1ZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiB0aGUgZG9IYW5kbGVFdmVudCgpIGFuZCByZWZyZXNoKCkgbWV0aG9kcyBib3RoIHVzZSBXU0RMMTEgc3BlY2lmaWMKLQkgKiBrbm93bGVkZ2UuICBUaGlzIGNsYXNzIChEb2N1bWVudGF0aW9uU2VjdGlvbikgc2hvdWxkIGJlIGdlbmVyaWMuICBJbiBQb3N0IDEuNSwKLQkgKiB3ZSBuZWVkIHRvIGFkZCBkb2N1bWVudGF0aW9uIHN1cHBvcnQgbWV0aG9kcyB0byBvdXIgZmFjYWRlIHNvIHdlIGRvbid0IG5lZWQKLQkgKiB0byBrbm93IFdTREwgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uLi4uLi4uIAotCSAqLwotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGRvY1RleHQpCi0JCXsKLQkJCVN0cmluZyB2YWx1ZSA9IGRvY1RleHQuZ2V0VGV4dCgpOwotCQkJaWYgKGdldE1vZGVsKCkgIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlFbGVtZW50IGRvY05vZGUgPSBnZXRFbGVtZW50KCkuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLQkJCQlpZiAoZG9jTm9kZSAhPSBudWxsKQotCQkJCXsKLQkJCQkJTm9kZSB0ZXh0Tm9kZSA9IGRvY05vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJCQlpZiAodGV4dE5vZGUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJdGV4dE5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCWlmICh2YWx1ZS5sZW5ndGgoKSA+IDApCi0JCQkJCQl7Ci0JCQkJCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2NOb2RlLmdldE93bmVyRG9jdW1lbnQoKTsKLQkJCQkJCQlvcmcudzNjLmRvbS5UZXh0IG5ld1RleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotCQkJCQkJCWRvY05vZGUuYXBwZW5kQ2hpbGQobmV3VGV4dE5vZGUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCUVsZW1lbnQgZWxlbWVudCA9IGdldEVsZW1lbnQoKS5nZXRFbGVtZW50KCk7Ci0JCQkJCUFkZEVsZW1lbnRBY3Rpb24gYWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oZWxlbWVudCwgZWxlbWVudC5nZXRQcmVmaXgoKSwgImRvY3VtZW50YXRpb24iLCBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJYWN0aW9uLnJ1bigpOwotCQkJCQlFbGVtZW50IG5ld0RvY3VtZW50YXRpb24gPSBhY3Rpb24uZ2V0TmV3RWxlbWVudCgpOwotCi0JCQkJCURvY3VtZW50IGRvY3VtZW50ID0gbmV3RG9jdW1lbnRhdGlvbi5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQkJCW9yZy53M2MuZG9tLlRleHQgbmV3VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7Ci0JCQkJCW5ld0RvY3VtZW50YXRpb24uYXBwZW5kQ2hpbGQobmV3VGV4dE5vZGUpOwotCQkJCQlnZXRFbGVtZW50KCkuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQobmV3RG9jdW1lbnRhdGlvbik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBXU0RMRWxlbWVudCBnZXRFbGVtZW50KCkgewotCQlXU0RMRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgewotCQkJbW9kZWwgPSAoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSBtb2RlbCkuZ2V0TW9kZWwoKTsKLQkJfQotCQkKLQkJLy8gVE9ETzogU2hvdWxkIHdlIGJlIGhhbmRsaW5nIHRoZSBYTUwgU2NoZW1hIGNhc2UgaGVyZSBhcyB3ZWxsPwotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCU9iamVjdCB0YXJnZXQgPSAoKFdTRExCYXNlQWRhcHRlcikgbW9kZWwpLmdldFRhcmdldCgpOwotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZWxlbWVudCA9IChXU0RMRWxlbWVudCkgdGFyZ2V0OwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyMWMwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludFNlY3Rpb24gZXh0ZW5kcyBSZWZlcmVuY2VTZWN0aW9uIHsKLQlwcm90ZWN0ZWQgVGV4dCBhZGRyZXNzVGV4dDsKLQlwcm90ZWN0ZWQgQ0NvbWJvIHByb3RvY29sQ29tYm87Ci0JCi0JcHJvdGVjdGVkIExpc3QgYmluZGluZ3NJbkNvbWJvID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCQotCQkvLyBBZGRyZXNzIHJvdwotCQlDTGFiZWwgYWRkcmVzc0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9BRERSRVNTICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWFkZHJlc3NUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkc7Ci0JICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOwotCQlhZGRyZXNzTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWFkZHJlc3NUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGFkZHJlc3NUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX0FERFJFU1NfVEVYVCk7Ci0KLQkJLy8gUHJvdG9jb2wgUm93Ci0JCUNMYWJlbCBwcm90b2NvbExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXByb3RvY29sQ29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7IC8vJE5PTi1OTFMtMSQKLQotCQlkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HOwotCSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLQkJcHJvdG9jb2xMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJcHJvdG9jb2xDb21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJcHJvdG9jb2xDb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX1BST1RPQ09MX1RFWFQpOwotCi0JCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19JTl9QUk9QRVJUSUVTX1NFQ1RJT04pOyAKLQkJCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BPUlRfQklORElOR19DT01CTyk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC52aWV3LklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJcmVtb3ZlTGlzdGVuZXJzKGFkZHJlc3NUZXh0KTsKLQkJcHJvdG9jb2xDb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQotCQlzdXBlci5yZWZyZXNoKCk7Ci0KLQkJSUVuZFBvaW50IGVuZFBvaW50ID0gKElFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLQkJaWYgKGVuZFBvaW50LmdldEFkZHJlc3MoKSAhPSBudWxsKSB7Ci0JCQlpZiAoIWVuZFBvaW50LmdldEFkZHJlc3MoKS5lcXVhbHMoYWRkcmVzc1RleHQuZ2V0VGV4dCgpKSkgewotCQkJCWFkZHJlc3NUZXh0LnNldFRleHQoZW5kUG9pbnQuZ2V0QWRkcmVzcygpKTsKLQkJCX0KLQkJfQotCi0JCXByb3RvY29sQ29tYm8ucmVtb3ZlQWxsKCk7Ci0JCWlmIChlbmRQb2ludCBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCQlTdHJpbmcgcHJvdG9jb2xWYWx1ZSA9ICgoVzExRW5kUG9pbnQpIGVuZFBvaW50KS5nZXRQcm90b2NvbCgpOwotCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHR0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbFZhbHVlKTsKLQkJCWlmIChleHR0ICE9IG51bGwpIHsKLQkJCQlwcm90b2NvbFZhbHVlID0gZXh0dC5nZXRMYWJlbCgpOwotCQkJfQotCQkJTGlzdCBwcm90b2NvbHMgPSAoKFcxMUVuZFBvaW50KSBnZXRNb2RlbCgpKS5nZXRBcHBsaWNhYmxlUHJvdG9jb2woKTsKLQkJCUl0ZXJhdG9yIGl0ID0gcHJvdG9jb2xzLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkgIFN0cmluZyBwcm90b2NvbCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLQkJCSAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWUocHJvdG9jb2wpOwotCQkJICBpZiAoZXh0ICE9IG51bGwpIHsKLQkJCQkgIFN0cmluZyBsYWJlbCA9IGV4dC5nZXRMYWJlbCgpOwotCQkJCSAgaWYgKGxhYmVsICE9IG51bGwpIHsKLQkJCQkJICBwcm90b2NvbENvbWJvLmFkZChsYWJlbCk7Ci0JCQkJICB9Ci0JCQkgIH0KLQkJCX0KLQkJCi0JCQlwcm90b2NvbENvbWJvLnNldFRleHQocHJvdG9jb2xWYWx1ZSk7Ci0JCX0KLQkJCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoYWRkcmVzc1RleHQpOwotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKHByb3RvY29sQ29tYm8pOwotCQlhcHBseVRleHRMaXN0ZW5lcnMoYWRkcmVzc1RleHQpOwotCQlwcm90b2NvbENvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0KLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcigoSUFTRE9iamVjdCkgZ2V0TW9kZWwoKSk7IAotCQkKLQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0Q29tYm9JdGVtcygpIHsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgbWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQotCQlMaXN0IGl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOwotCQlpdGVtcy5hZGQoQlJPV1NFX1NUUklORyk7Ci0JCWl0ZW1zLmFkZChORVdfU1RSSU5HKTsKLQotCQlpZiAobWFuYWdlciAhPSBudWxsKSB7Ci0JCSAgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGNvbWJvSXRlbXMgPSBtYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tYm9JdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJICAJaXRlbXMuYWRkKGNvbWJvSXRlbXNbaW5kZXhdKTsKLQkJICB9Ci0JCX0KLQkJcmV0dXJuIGl0ZW1zOwotCX0KLQkKLQlwcm90ZWN0ZWQgT2JqZWN0IGdldEN1cnJlbnRDb21ib0l0ZW0oKSB7Ci0JCUlFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCXJldHVybiBlbmRQb2ludC5nZXRCaW5kaW5nKCk7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0Q29tYm9JdGVtTmFtZShPYmplY3QgaXRlbSkgewotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChpdGVtIGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJbmFtZSA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJbmFtZSA9ICgoSUJpbmRpbmcpIGl0ZW0pLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0JCQluYW1lID0gKFN0cmluZykgaXRlbTsKLQkJfQotCQkKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1Db21ib1NlbGVjdGlvbihPYmplY3QgaXRlbSkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBudWxsOwotCQkKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlzcGVjID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGl0ZW07Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBtYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCW1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKChJRW5kUG9pbnQpIGdldE1vZGVsKCksIHNwZWMpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCWlmIChpdGVtLmVxdWFscyhCUk9XU0VfU1RSSU5HKSkgewotCQkJCUlXb3JrYmVuY2hQYXJ0IHBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0JCQkJQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24ocGFydCk7Ci0JCQkJYWN0aW9uLnNldElFbmRQb2ludCgoSUVuZFBvaW50KSBnZXRNb2RlbCgpKTsKLQkJCQlhY3Rpb24ucnVuKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChpdGVtLmVxdWFscyhORVdfU1RSSU5HKSkgewotCQkJCUlXb3JrYmVuY2hQYXJ0IHBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0JCQkJQVNEU2V0TmV3QmluZGluZ0FjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3QmluZGluZ0FjdGlvbihwYXJ0KTsKLQkJCQlhY3Rpb24uc2V0SUVuZFBvaW50KChJRW5kUG9pbnQpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJfQotCQkKLQkJcmVmcmVzaCgpOwotCX0KLQkKLSAgcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICB7Ci0JICBpZiAoZXZlbnQud2lkZ2V0ID09IGFkZHJlc3NUZXh0ICYmICFhZGRyZXNzVGV4dC5pc0Rpc3Bvc2VkKCkpIHsKLQkJICBTdHJpbmcgbmV3QWRkcmVzcyA9IGFkZHJlc3NUZXh0LmdldFRleHQoKTsKLQkJICBpZiAobmV3QWRkcmVzcyA9PSBudWxsKSB7Ci0JCQkgIG5ld0FkZHJlc3MgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkgIH0KLQkJICAKLQkJICBTdHJpbmcgb2xkQWRkcmVzcyA9IGdldE9sZEFkZHJlc3MoKTsKLQkJICBpZiAob2xkQWRkcmVzcy5lcXVhbHMobmV3QWRkcmVzcykpCi0JCQkgIHJldHVybjsKLQkJICAKLQkJICBJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotCQkgIENvbW1hbmQgY29tbWFuZCA9IGVuZFBvaW50LmdldFNldEFkZHJlc3NDb21tYW5kKG5ld0FkZHJlc3MpOwotCQkgIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpOwotCSAgfQotCSAgZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHByb3RvY29sQ29tYm8gJiYgIXByb3RvY29sQ29tYm8uaXNEaXNwb3NlZCgpKSB7Ci0JCSAgU3RyaW5nIG5ld1Byb3RvY29sID0gcHJvdG9jb2xDb21iby5nZXRUZXh0KCk7Ci0JCSAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwobmV3UHJvdG9jb2wpOwotCQkgIGlmIChleHQgIT0gbnVsbCkKLQkJICB7Ci0JCSAgICBuZXdQcm90b2NvbCA9IGV4dC5nZXROYW1lKCk7Ci0JCSAgfQotCQkgIGlmIChuZXdQcm90b2NvbCAhPSBudWxsICYmIGdldE1vZGVsKCkgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotCQkgICAgVzExRW5kUG9pbnQgZW5kUG9pbnQgPSAoVzExRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCSAgICAKLQkJICAgIC8vIERvbid0IHVwZGF0ZSB0aGUgcHJvdG9jb2wgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZQotCQkgICAgCi0JCSAgICBTdHJpbmcgb2xkUHJvdG9jb2wgPSBnZXRPbGRQcm90b2NvbChlbmRQb2ludCk7Ci0JCSAgICBpZiAob2xkUHJvdG9jb2wuZXF1YWxzKG5ld1Byb3RvY29sKSkKLQkJICAgIAlyZXR1cm47Ci0KLQkJICAgIGVuZFBvaW50LnNldFByb3RvY29sKG5ld1Byb3RvY29sKTsKLQkJICB9Ci0JICB9Ci0JICBlbHNlIHsKLQkJICBzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldE9sZEFkZHJlc3MoKSB7Ci0JICBTdHJpbmcgdmFsdWUgPSBudWxsOwotCSAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotCQkgIHZhbHVlID0gKChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0QWRkcmVzcygpOwotCSAgfQotCi0JICBpZiAodmFsdWUgPT0gbnVsbCkgewotCQkgIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIHJldHVybiB2YWx1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0T2xkUHJvdG9jb2woVzExRW5kUG9pbnQgZW5kUG9pbnQpIHsKLSAgICBTdHJpbmcgdmFsdWUgPSBudWxsOwotICAgIHZhbHVlID0gZW5kUG9pbnQuZ2V0UHJvdG9jb2woKTsKLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0ltcG9ydFNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9JbXBvcnRTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0Y2NkOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0ltcG9ydFNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFVcGRhdGVJbXBvcnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kaWFsb2dzLkltcG9ydFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEltcG9ydFNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24KLXsKLQlwcm90ZWN0ZWQgVGV4dCBuYW1lc3BhY2VUZXh0LCBwcmVmaXhUZXh0LCBsb2NhdGlvblRleHQ7Ci0JcHJpdmF0ZSBTdHJpbmcgb2xkUHJlZml4VmFsdWU7Ci0JQnV0dG9uIGJ1dHRvbjsKLQkvKioKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQ7Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDM7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7Ci0JCQotCQlDTGFiZWwgbmFtZXNwYWNlTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX05BTUVTUEFDRSk7IC8vJE5PTi1OTFMtMSQKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCW5hbWVzcGFjZUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJbmFtZXNwYWNlVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQluYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCQkKLQkJLy8gZmlsbCB0aGUgM3JkIGNvbHVtbgotCQlnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlTGFiZWwoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQotCQlDTGFiZWwgcHJlZml4TGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWCk7IC8vJE5PTi1OTFMtMSQKLQkJZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCXByZWZpeExhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlwcmVmaXhUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKHByZWZpeFRleHQpOwotCQlwcmVmaXhUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCQkKLQkJLy8gZmlsbCB0aGUgM3JkIGNvbHVtbgotCQlnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlTGFiZWwoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQotCQlDTGFiZWwgbG9jYXRpb25MYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTE9DQVRJT04pOyAvLyROT04tTkxTLTEkCi0JCWRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkc7Ci0JICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOwotCQlsb2NhdGlvbkxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlsb2NhdGlvblRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlsb2NhdGlvblRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlsb2NhdGlvblRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQkJYnV0dG9uID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wb3NpdGUsICIiLCBTV1QuUFVTSCk7IC8vJE5PTi1OTFMtMSQKLQkJYnV0dG9uLnNldEltYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYnJvd3NlYnV0dG9uLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCi0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOwotCi0JCQotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKQotCXsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsgIAotCQlPYmplY3Qgb2JqID0gZ2V0TW9kZWwoKTsKLQkJYm9vbGVhbiByZWZyZXNoUHJlZml4VGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaExvY2F0aW9uVGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaE5hbWVzcGFjZVRleHQgPSB0cnVlOwotCQlpZiAocHJlZml4VGV4dC5pc0ZvY3VzQ29udHJvbCgpKQotCQl7Ci0JCQlyZWZyZXNoUHJlZml4VGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChsb2NhdGlvblRleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmVmcmVzaExvY2F0aW9uVGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChuYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkpCi0JCXsKLQkJCXJlZnJlc2hOYW1lc3BhY2VUZXh0ID0gZmFsc2U7Ci0JCX0KLQotCQlpZiAocmVmcmVzaFByZWZpeFRleHQpCi0JCXsKLQkJCXByZWZpeFRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlpZiAocmVmcmVzaExvY2F0aW9uVGV4dCkKLQkJewotCQkJbG9jYXRpb25UZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQl7Ci0JCQluYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKG9iaiBpbnN0YW5jZW9mIElJbXBvcnQpCi0JCXsKLQkJCUlJbXBvcnQgdGhlSW1wb3J0ID0gKElJbXBvcnQpIG9iajsKLQkJCWlmIChyZWZyZXNoTG9jYXRpb25UZXh0KQotCQkJewotCQkJCVN0cmluZyBsb2NhdGlvblZhbHVlID0gdGhlSW1wb3J0LmdldExvY2F0aW9uKCk7IAotCQkJCWxvY2F0aW9uVGV4dC5zZXRUZXh0KGxvY2F0aW9uVmFsdWUgIT0gbnVsbCA/IGxvY2F0aW9uVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJU3RyaW5nIG5hbWVzcGFjZVZhbHVlID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZSgpOwotCQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQkJewotCQkJCW5hbWVzcGFjZVRleHQuc2V0VGV4dChuYW1lc3BhY2VWYWx1ZSAhPSBudWxsID8gbmFtZXNwYWNlVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKHJlZnJlc2hQcmVmaXhUZXh0KQotCQkJewotCQkJCVN0cmluZyBwcmVmaXggPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0JCQkJcHJlZml4VGV4dC5zZXRUZXh0KHByZWZpeCAhPSBudWxsID8gcHJlZml4IDogIiIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkJLy8gVE9ETzogV2UgaGF2ZSBzb21lIFdTREwxMSBJbXBsIHNwZWNpZmljIGtub3dsZWRnZSBiZWxvdy4uLiBXZSBzaG91bGQgdHJ5IHRvIHJlbW92ZSB0aGlzLi4uCi0JICAgIHNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBwcmVmaXhUZXh0ICYmIGxvY2F0aW9uVGV4dC5nZXRUZXh0KCkubGVuZ3RoKCkgPiAwICYmIG5hbWVzcGFjZVRleHQuZ2V0VGV4dCgpLmxlbmd0aCgpID4gMCAmJiBnZXRNb2RlbCgpIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCSAgU3RyaW5nIG5ld1ByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpOwotCQkgIGlmIChvbGRQcmVmaXhWYWx1ZS5lcXVhbHMobmV3UHJlZml4KSkgewotCQkgICAgcmV0dXJuOwotCQkgIH0KLQkJCQotCQkgIFcxMUltcG9ydCB3MTFJbXBvcnQgPSAoVzExSW1wb3J0KSBnZXRNb2RlbCgpOwotCQkgIEltcG9ydCBpbXBvcnRPYmogPSAoSW1wb3J0KSB3MTFJbXBvcnQuZ2V0VGFyZ2V0KCk7Ci0JCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJICBNYXAgbmFtZXNwYWNlc01hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCi0JCSAgaWYgKG5hbWVzcGFjZXNNYXAuY29udGFpbnNLZXkobmV3UHJlZml4KSkgewotCQkgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLl9FUlJPUl9MQUJFTF9QUkVGSVhfRVhJU1RTKTsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0gICAgICAgICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICAgICAgICBkZWZpbml0aW9uRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInhtbG5zOiIrb2xkUHJlZml4VmFsdWUpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBuZXdQcmVmaXgsIG5hbWVzcGFjZVRleHQuZ2V0VGV4dCgpKTsgLy8kTk9OLU5MUy0xJAotCQkgICAgb2xkUHJlZml4VmFsdWUgPSBuZXdQcmVmaXg7Ci0JCSAgfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7Ci0JICAvLyBUT0RPOiBXZSBoYXZlIHNvbWUgV1NETDExIEltcGwgc3BlY2lmaWMga25vd2xlZGdlIGJlbG93Li4uIFdlIHNob3VsZCB0cnkgdG8gcmVtb3ZlIHRoaXMuLi4KLQkgIGlmIChlLndpZGdldCA9PSBidXR0b24gJiYgZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUltcG9ydCkKLQkgIHsKLQkgICAgVzExSW1wb3J0IHcxMUltcG9ydCA9IChXMTFJbXBvcnQpIGdldE1vZGVsKCk7Ci0JICAgIEltcG9ydCBpbXBvcnRPYmogPSAoSW1wb3J0KSB3MTFJbXBvcnQuZ2V0VGFyZ2V0KCk7Ci0KLQkgICAgSW1wb3J0U2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IG5ldyBJbXBvcnRTZWxlY3Rpb25EaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCBudWxsLCB0cnVlKTsKLQkgICAgZGlhbG9nLmNyZWF0ZSgpOwotCSAgICBpbnQgcmMgPSBkaWFsb2cub3BlbigpOwotCSAgICBpZiAoSURpYWxvZ0NvbnN0YW50cy5PS19JRCA9PSByYykKLQkgICAgewotCSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGRpYWxvZy5nZXRJbXBvcnRMb2NhdGlvbigpOwotCSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBkaWFsb2cuZ2V0SW1wb3J0TmFtZXNwYWNlKCk7Ci0KLQkgICAgICBTdHJpbmcgcHJlZml4ID0gcHJlZml4VGV4dC5nZXRUZXh0KCk7ICAgICAgICAgICAKLQkgICAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCSAgICAgIFcxMVVwZGF0ZUltcG9ydENvbW1hbmQgdXBkYXRlSW1wb3J0Q29tbWFuZCA9IG5ldyBXMTFVcGRhdGVJbXBvcnRDb21tYW5kKGltcG9ydE9iaiwgbG9jYXRpb25VUkksIG5hbWVzcGFjZVVSSSwgcHJlZml4KTsKLQkgICAgICBzdGFjay5leGVjdXRlKHVwZGF0ZUltcG9ydENvbW1hbmQpOwotCi0JICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkgICAgICBTdHJpbmcgYWN0dWFsUHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgobmFtZXNwYWNlVVJJKTsKLQkgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQobmFtZXNwYWNlVVJJKTsKLQkgICAgICBsb2NhdGlvblRleHQuc2V0VGV4dChsb2NhdGlvblVSSSk7Ci0JICAgICAgcHJlZml4VGV4dC5zZXRUZXh0KGFjdHVhbFByZWZpeCk7Ci0JICAgIH0KLQkgICAgcmVmcmVzaCgpOwotCSAgfQotCX0KLQotCS8qKgotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RWRpdG9yUGFydChJRWRpdG9yUGFydCBlZGl0b3JQYXJ0KQotCXsKLQkJdGhpcy5lZGl0b3JQYXJ0ID0gZWRpdG9yUGFydDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZVNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzEzZDg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5IeXBlcmxpbmtFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSUh5cGVybGlua0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLndpZGdldHMuSW1hZ2VIeXBlcmxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JU2VsZWN0aW9uTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5oYW5kbGVycy5SZW5hbWVIYW5kbGVyOwotCi1wdWJsaWMgY2xhc3MgTmFtZVNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24gaW1wbGVtZW50cyBJSHlwZXJsaW5rTGlzdGVuZXIgewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV19TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX05FVzsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEJST1dTRV9TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRTsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBib29sZWFuIGlzVHJhdmVyc2luZyA9IGZhbHNlOwotCUNMYWJlbCBuYW1lTGFiZWw7Ci0JcHJvdGVjdGVkIFRleHQgbmFtZVRleHQ7Ci0gIC8qKgotICAgKiBDbGlja2luZyBvbiBpdCBpbnZva2VzIHRoZSByZWZhY3Rvci0+cmVuYW1lIGFjdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZUh5cGVybGluayByZW5hbWVIeXBlcmxpbms7Ci0gIHByaXZhdGUgQ29tcG9zaXRlIGxpZ2h0QnVsYkNvbXBvc2l0ZTsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgdG9wQ29tcG9zaXRlOwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCQotCQl0b3BDb21wb3NpdGUgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlRmxhdEZvcm1Db21wb3NpdGUocGFyZW50KTsKLQkJR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMjsKLQkJdG9wQ29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsKLQotCQljb21wb3NpdGUgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ29tcG9zaXRlKHRvcENvbXBvc2l0ZSk7Ci0JCWdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCi0JCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7Ci0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CQotCi0JCW5hbWVMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRSk7IAotCQlkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HOwotCSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLQkJbmFtZUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQluYW1lVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCW5hbWVUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKG5hbWVUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19OQU1FX1RFWFQpOwotCQkKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKG5hbWVUZXh0KTsKLQl9Ci0JCi0gIHByaXZhdGUgdm9pZCBzaG93UmVmYWN0b3JCdXR0b24oKSB7Ci0gICAgaWYgKGlzUmVhZE9ubHkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAobGlnaHRCdWxiQ29tcG9zaXRlID09IG51bGwpIHsKLSAgICAJbGlnaHRCdWxiQ29tcG9zaXRlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNvbXBvc2l0ZSh0b3BDb21wb3NpdGUpOwotCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlncmlkTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJbGlnaHRCdWxiQ29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsKLQkJbGlnaHRCdWxiQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORywgR3JpZERhdGEuQkVHSU5OSU5HLCBmYWxzZSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJlbmFtZUh5cGVybGluayA9PSBudWxsKSB7Ci0gICAgICByZW5hbWVIeXBlcmxpbmsgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlSW1hZ2VIeXBlcmxpbmsobGlnaHRCdWxiQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLSAgICAgIHJlbmFtZUh5cGVybGluay5zZXRJbWFnZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3F1aWNrYXNzaXN0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmVuYW1lSHlwZXJsaW5rLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLl9VSV9UT09MVElQX1JFTkFNRV9SRUZBQ1RPUik7Ci0gICAgICByZW5hbWVIeXBlcmxpbmsuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLCBHcmlkRGF0YS5CRUdJTk5JTkcsIGZhbHNlLCBmYWxzZSkpOwotICAgICAgcmVuYW1lSHlwZXJsaW5rLmFkZEh5cGVybGlua0xpc3RlbmVyKHRoaXMpOwotICAgIH0KLQotICAgIHJlbmFtZUh5cGVybGluay5zZXRWaXNpYmxlKHRydWUpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGlkZVJlZmFjdG9yQnV0dG9uKCkgewotICAgIGlmIChpc1JlYWRPbmx5KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHJlbmFtZUh5cGVybGluayA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVuYW1lSHlwZXJsaW5rLnNldFZpc2libGUoZmFsc2UpOwotICB9Ci0gIAotICAKLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCWlmIChuYW1lVGV4dC5pc0Rpc3Bvc2VkKCkgfHwgbmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQlTdHJpbmcgbmFtZSA9IG51bGw7Ci0JCWlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KSB7Ci0JCQluYW1lID0gKChJTmFtZWRPYmplY3QpIGdldE1vZGVsKCkpLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgRWRpdFBhcnQpIHsKLQkJCU9iamVjdCBtb2RlbCA9ICgoRWRpdFBhcnQpIGdldE1vZGVsKCkpLmdldE1vZGVsKCk7IAotCQkJbmFtZSA9ICgoSU5hbWVkT2JqZWN0KSBtb2RlbCkuZ2V0TmFtZSgpOwotCQl9Ci0JCQotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQkKLQkJbmFtZVRleHQuc2V0VGV4dChuYW1lKTsKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihuYW1lVGV4dCk7Ci0gICAgCi0gICAgaWYgKGNhblJlZmFjdG9yKCkpIHsKLSAgICAgIHNob3dSZWZhY3RvckJ1dHRvbigpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGhpZGVSZWZhY3RvckJ1dHRvbigpOwotICAgIH0KLSAgICBzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIHNob3VsZFVzZUV4dHJhU3BhY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBuYW1lVGV4dCAmJiAhbmFtZVRleHQuaXNEaXNwb3NlZCgpKSB7Ci0JCQlTdHJpbmcgbmV3VmFsdWUgPSBuYW1lVGV4dC5nZXRUZXh0KCk7Ci0JCQlPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQkJSU5hbWVkT2JqZWN0IG5hbWVkT2JqZWN0ID0gbnVsbDsKLQkJCQotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KSB7Ci0JCQkJbmFtZWRPYmplY3QgPSAoSU5hbWVkT2JqZWN0KSBtb2RlbDsKLQkJCX0KLQkJCQotCQkJaWYgKG5hbWVkT2JqZWN0ICE9IG51bGwpIHsKLQkJCQlpZiAoICFuZXdWYWx1ZS5lcXVhbHMoIG5hbWVkT2JqZWN0LmdldE5hbWUoKSApICl7Ci0JCQkJICBDb21tYW5kIGNvbW1hbmQgPSBuYW1lZE9iamVjdC5nZXRTZXROYW1lQ29tbWFuZChuZXdWYWx1ZSk7Ci0JCQkJICBleGVjdXRlQ29tbWFuZChjb21tYW5kKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgaW52b2tlUmVuYW1lUmVmYWN0b3JpbmcoKSB7Ci0gICAgSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZWRpdG9yLmdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgSVNlbGVjdGlvbk1hcHBlciBtYXBwZXIgPSAoSVNlbGVjdGlvbk1hcHBlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvbk1hcHBlci5jbGFzcyk7Ci0gICAgc2VsZWN0aW9uID0gbWFwcGVyICE9IG51bGwgPyBtYXBwZXIubWFwU2VsZWN0aW9uKHNlbGVjdGlvbikgOiBzZWxlY3Rpb247Ci0gICAgUmVuYW1lSGFuZGxlciByZW5hbWVIYW5kbGVyID0gbmV3IFJlbmFtZUhhbmRsZXIoKTsKLSAgICByZW5hbWVIYW5kbGVyLmV4ZWN1dGUoZGVmaW5pdGlvbiwgc2VsZWN0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IGdldFJlYWxNb2RlbCgpIHsKLSAgICBPYmplY3QgcmVhbE1vZGVsID0gZ2V0TW9kZWwoKTsKLSAgICAKLSAgICBpZiAocmVhbE1vZGVsIGluc3RhbmNlb2YgRWRpdFBhcnQpIHsKLSAgICAgIHJlYWxNb2RlbCA9ICgoRWRpdFBhcnQpIGdldE1vZGVsKCkpLmdldE1vZGVsKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZWFsTW9kZWw7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbW9kZWwgb2JqZWN0J3MgbmFtZSBjYW4gYmUgcmVmYWN0b3JlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtb2RlbCBvYmplY3QgY2FuIGJlIHJlZmFjdG9yZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjYW5SZWZhY3RvcigpIHsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRSZWFsTW9kZWwoKTsKLQotICAgIGJvb2xlYW4gY2FuUmVmYWN0b3IgPSBtb2RlbCBpbnN0YW5jZW9mIElNZXNzYWdlIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIElJbnRlcmZhY2U7Ci0gICAgcmV0dXJuIGNhblJlZmFjdG9yOwotICB9Ci0gIAotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXIjbGlua0FjdGl2YXRlZChvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsaW5rQWN0aXZhdGVkKEh5cGVybGlua0V2ZW50IGUpCi0gIHsKLSAgICBpbnZva2VSZW5hbWVSZWZhY3RvcmluZygpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSUh5cGVybGlua0xpc3RlbmVyI2xpbmtFbnRlcmVkKG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5IeXBlcmxpbmtFdmVudCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lciNsaW5rRXhpdGVkKG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5IeXBlcmxpbmtFdmVudCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRQZXJmb3JtQ29tYm9TZWxlY3Rpb24oRXZlbnQgZXZlbnQsIE9iamVjdCBzZWxlY3RlZEl0ZW0pCi0gIHsKLSAgICAvLyBpZiB0cmF2ZXJzaW5nIHRocm91Z2ggY29tYm9ib3gsIGRvbid0IGF1dG9tYXRpY2FsbHkgcG9wIHVwCi0gICAgLy8gdGhlIGJyb3dzZSBhbmQgbmV3IGRpYWxvZyBib3hlcwotICAgIGJvb2xlYW4gd2FzVHJhdmVyc2luZyA9IGlzVHJhdmVyc2luZzsKLSAgICBpZiAoaXNUcmF2ZXJzaW5nKQotICAgICAgaXNUcmF2ZXJzaW5nID0gZmFsc2U7Ci0gICAgICAKLSAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgZGVmYXVsdCBzZWxlY3RpbmcgKGhpdHRpbmcgZW50ZXIgaW4gY29tYm9ib3gpCi0gICAgLy8gZm9yIGJyb3dzZS4uIGFuZCBuZXcuLgotICAgIGlmIChldmVudC50eXBlID09IFNXVC5EZWZhdWx0U2VsZWN0aW9uKQotICAgIHsKLSAgICAgIGlmICghKHNlbGVjdGVkSXRlbSBpbnN0YW5jZW9mIFN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghKEJST1dTRV9TVFJJTkcuZXF1YWxzKHNlbGVjdGVkSXRlbSkgfHwgTkVXX1NUUklORy5lcXVhbHMoc2VsZWN0ZWRJdGVtKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHdhc1RyYXZlcnNpbmcgJiYgc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgU3RyaW5nKQotICAgIHsKLSAgICAgIGlmIChCUk9XU0VfU1RSSU5HLmVxdWFscyhzZWxlY3RlZEl0ZW0pIHx8IE5FV19TVFJJTkcuZXF1YWxzKHNlbGVjdGVkSXRlbSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lc3BhY2VTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZXNwYWNlU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjljMTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lc3BhY2VTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREVkaXROYW1lc3BhY2VzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5uc2VkaXQuQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLm5zZWRpdC5Db21tb25OYW1lc3BhY2VJbmZvVGFibGU7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lc3BhY2VTZWN0aW9uIGV4dGVuZHMgQVNEQWJzdHJhY3RTZWN0aW9uIHsKLQlwcm90ZWN0ZWQgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLQlwcm90ZWN0ZWQgTGlzdCBuYW1lc3BhY2VJbmZvTGlzdDsKLQlwcm90ZWN0ZWQgQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZyBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sOwotCXByb3RlY3RlZCBCdXR0b24gYnV0dG9uOwotCQotCVRleHQgbmFtZVRleHQ7Ci0JVGV4dCBwcmVmaXhUZXh0OwotCVRleHQgdGFyZ2V0TmFtZXNwYWNlVGV4dDsKLQlwcm90ZWN0ZWQgQ29tbW9uTmFtZXNwYWNlSW5mb1RhYmxlIHRhYmxlVmlld2VyOwotCXByaXZhdGUgYm9vbGVhbiBoYW5kbGluZ0V2ZW50OwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCWNvbXBvc2l0ZSA9CWdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVGbGF0Rm9ybUNvbXBvc2l0ZShwYXJlbnQpOwotCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlncmlkTGF5b3V0Lm1hcmdpblJpZ2h0ID0gMTA7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7CQkKLQkJCi0JCVN0cmluZyBuYW1lU3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX05BTUU7IAotCQlTdHJpbmcgcHJlZml4U3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWDsgCi0JCVN0cmluZyBuYW1lc3BhY2VTdHJpbmcgPSBNZXNzYWdlcy5fVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRTsgCi0JCQotCQkvLyBuYW1lCi0JCUNMYWJlbCBuYW1lTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgbmFtZVN0cmluZyk7IC8vJE5PTi1OTFMtMSQKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JICAgIG5hbWVMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJbmFtZVRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlhcHBseVRleHRMaXN0ZW5lcnMobmFtZVRleHQpOwotCSAgICBuYW1lVGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChuYW1lVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfTkFNRV9URVhUKTsKLQkJCi0JCS8vIHByZWZpeAotCQlDTGFiZWwgcHJlZml4TGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgcHJlZml4U3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQlkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HOwotCSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLQkgICAgcHJlZml4TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkgICAgCi0JCXByZWZpeFRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlhcHBseVRleHRMaXN0ZW5lcnMocHJlZml4VGV4dCk7Ci0JCXByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJlZml4VGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfREVGX1BSRUZJWF9URVhUKTsKLQkJCi0JCS8vIHRhcmdldG5hbWVzcGFjZQotCQlDTGFiZWwgdGFyZ2V0TmFtZXNwYWNlTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgbmFtZXNwYWNlU3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQlkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HOwotCSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLQkgICAgdGFyZ2V0TmFtZXNwYWNlTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkgICAgCi0JCXRhcmdldE5hbWVzcGFjZVRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlhcHBseVRleHRMaXN0ZW5lcnModGFyZ2V0TmFtZXNwYWNlVGV4dCk7Ci0JCXRhcmdldE5hbWVzcGFjZVRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFyZ2V0TmFtZXNwYWNlVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfREVGX1ROU19URVhUKTsKLQkJCi0JCS8vIEFkdmFuY2VkIGJ1dHRvbgotCQlidXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX1NFQ1RJT05fQURWQU5DRURfQVRUUklCVVRFUyArICIuLi4iLCBTV1QuUFVTSCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCWRhdGEgPSBuZXcgR3JpZERhdGEoU1dULlJJR0hULCBTV1QuRU5ELCBmYWxzZSwgZmFsc2UpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMjsKLQkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQloYW5kbGluZ0V2ZW50ID0gdHJ1ZTsKLQkJT2JqZWN0IG9iaiA9IGdldERlc2NyaXB0aW9uKCk7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCUlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIG9iajsKLQotCQkJaWYgKGV2ZW50LndpZGdldCA9PSBuYW1lVGV4dCkgewotCQkJCVN0cmluZyBuZXdOYW1lID0gbmFtZVRleHQuZ2V0VGV4dCgpOwotCQkJCWlmICghbmV3TmFtZS5lcXVhbHMoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKSkgewotCQkJCQlDb21tYW5kIGNvbW1hbmQgPSBkZXNjcmlwdGlvbi5nZXRTZXROYW1lQ29tbWFuZChuZXdOYW1lKTsKLQkJCQkJZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHByZWZpeFRleHQgfHwgZXZlbnQud2lkZ2V0ID09IHRhcmdldE5hbWVzcGFjZVRleHQpIHsKLQkJCQlTdHJpbmcgbmV3VGFyZ2V0TlMgPSB0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKTsJCQkJCi0JCQkJU3RyaW5nIG5ld1ByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpOwotCQkJCQotCQkJCWJvb2xlYW4gdGFyZ2V0TlNkaWZmID0gIW5ld1RhcmdldE5TLmVxdWFscyhkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJYm9vbGVhbiBwcmVmaXhEaWZmID0gIW5ld1ByZWZpeC5lcXVhbHMoZGVzY3JpcHRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KCkpOwotCQkJCWlmICh0YXJnZXROU2RpZmYgfHwgcHJlZml4RGlmZiApIHsKLQkJCQkJLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgaXMgbm90IGdlbmVyaWMuICBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyB0byBlbnN1cmUgaXQgaXMKLQkJCQkJLy8gZ2VuZXJpYy4gIElEZXNjcmlwdGlvbiBuZWVkcyBhIGdldE5hbWVzcGFjZXNJbmZvKCkgYW5kIGdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpLi4uCi0JCQkJCVcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBjb21tYW5kID0gCi0JCQkJCQkoVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7Ci0JCQkJCWlmICh0YXJnZXROU2RpZmYpCi0JCQkJCSAgY29tbWFuZC5zZXRUYXJnZXROYW1lc3BhY2UobmV3VGFyZ2V0TlMpOwotCQkJCQlpZiAocHJlZml4RGlmZikKLQkJCQkJICBjb21tYW5kLnNldFRhcmdldE5hbWVzcGFjZVByZWZpeChuZXdQcmVmaXgpOwotCQkJCQlleGVjdXRlQ29tbWFuZChjb21tYW5kKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQloYW5kbGluZ0V2ZW50ID0gZmFsc2U7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIE9iamVjdCBnZXREZXNjcmlwdGlvbigpIHsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIHsKLQkJCW1vZGVsID0gKChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgbW9kZWwpLmdldE1vZGVsKCk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgbW9kZWw7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQlyZXR1cm4gKChJQ2F0ZWdvcnlBZGFwdGVyKSBtb2RlbCkuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkKLQl7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJCi0JCS8vIFNldCBuYW1lVGV4dAotCQlpZiAobmFtZVRleHQgPT0gbnVsbCB8fCBuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJbmFtZVRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdldERlc2NyaXB0aW9uKCkgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCW5hbWVUZXh0LnNldFRleHQoKChJTmFtZWRPYmplY3QpIGdldERlc2NyaXB0aW9uKCkpLmdldE5hbWUoKSk7Ci0JCX0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JCQotCQkKLQkJLy8gU2V0IHRhcmdldE5hbWVzcGFjZVRleHQgYW5kIHByZWZpeFRleHQKLQkJaWYgKHRhcmdldE5hbWVzcGFjZVRleHQgPT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkgfHwgaGFuZGxpbmdFdmVudCkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCU9iamVjdCBvYmogPSBnZXREZXNjcmlwdGlvbigpOwotCQlpZiAob2JqIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKQotCQl7Ci0JCQlJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBvYmo7Ci0JCQlTdHJpbmcgdGFyZ2V0TlMgPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCVN0cmluZyBuZXdQcmVmaXggPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoKTsgICAgICAgICAgICAKLQkJCXByZWZpeFRleHQuc2V0VGV4dChuZXdQcmVmaXggIT0gbnVsbCA/IG5ld1ByZWZpeCA6ICIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQkvLyBzZXQgdGFyZ2V0bmFtZXNwYWNlIGZpZWxkIGFuZCBwcmVmaXggZmllbGQKLQkJCWlmICh0YXJnZXROUyAhPSBudWxsKQotCQkJewotCQkJCXRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dCh0YXJnZXROUyk7Ci0JCQl9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQkJCWlmIChuZXdQcmVmaXggIT0gbnVsbCkKLQkJCXsKLQkJCQlwcmVmaXhUZXh0LnNldFRleHQobmV3UHJlZml4KTsKLQkJCX0KLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlpZiAoZS53aWRnZXQgPT0gYnV0dG9uKQl7Ci0JCQlPYmplY3Qgb2JqID0gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQkJCUFTREVkaXROYW1lc3BhY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbihwYXJ0LCAoSURlc2NyaXB0aW9uKSBvYmopOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCQlyZWZyZXNoKCk7Ci0JICAgICAgICB9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1BhcmFtZXRlclNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY0ZmYyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJTZWN0aW9uIGV4dGVuZHMgTmFtZVNlY3Rpb24gewotCXByb3RlY3RlZCBDTGFiZWwgY29tYm9MYWJlbDsgCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVUeXBlU2NlbmFyaW8gPSB0cnVlOwotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBwYXJhbWV0ZXJSZWZNYW5hZ2VyOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljcmVhdGVDb250cm9sQXJlYSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sQXJlYSgpCi0JewkJCi0JCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUpOyAKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCWNvbWJvTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWNvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOwotCQljb21iby5zZXRCYWNrZ3JvdW5kKGNvbXBvc2l0ZS5nZXRCYWNrZ3JvdW5kKCkpOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8uYWRkTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCQljb21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQl9Ci0JCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC52aWV3LklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJc3VwZXIucmVmcmVzaCgpOwotCQlpZiAobmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUEFSVF9FTEVNRU5UX0NPTUJPKTsKLQotCQlpZiAoaGFuZGxlVHlwZVNjZW5hcmlvKSB7Ci0JCQlyZWZyZXNoQ29tYm8oKTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BBUlRfVFlQRV9DT01CTyk7Ci0JCX0KLQkJCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoY29tYm8pOwotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoQ29tYm8oKSB7Ci0JCUlQYXJhbWV0ZXIgcGFyYW0gPSBudWxsOwotCQlPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJcGFyYW0gPSAoSVBhcmFtZXRlcikgbW9kZWw7Ci0JCX0KLQkJCi0JCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHR5cGVOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHBhcmFtICE9IG51bGwpIHsKLQkJCW5hbWUgPSBwYXJhbS5nZXROYW1lKCk7Ci0JCQl0eXBlTmFtZSA9IHBhcmFtLmdldENvbXBvbmVudE5hbWUoKTsKLQkJfQotCQkKLQkJaWYgKCFuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQluYW1lVGV4dC5zZXRUZXh0KG5hbWUpOwotCQl9Ci0JCQotCQkvLyBQb3B1bGF0ZSB0aGUgdHlwZSBDb21ibwotCQljb21iby5yZW1vdmVBbGwoKTsKLQkJY29tYm8uYWRkKEJST1dTRV9TVFJJTkcpOwotCQljb21iby5hZGQoTkVXX1NUUklORyk7Ci0JCQotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKSB7Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc3BlY3MubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJfQotCQkJCi0JCQlzcGVjcyA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcGVjcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQljb21iby5hZGQoKFN0cmluZykgc3BlY3NbaW5kZXhdLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX0JCQotCQkKLQkJLy8gRGlzcGxheSB0aGUgdHlwZSBpbiB0aGUgQ29tYm8KLQkJU3RyaW5nW10gaXRlbXMgPSBjb21iby5nZXRJdGVtcygpOwotCQlpbnQgaW5kZXg7Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKGl0ZW1zW2luZGV4XS5lcXVhbHModHlwZU5hbWUpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgewotCQkJLy8gRm91bmQgYSBtYXRjaAotCQkJY29tYm8uc2VsZWN0KGluZGV4KTsKLQkJfQotCQllbHNlIHsKLQkJCWNvbWJvLnNldFRleHQodHlwZU5hbWUpOwotCQl9Ci0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIHNob3VsZFVzZUV4dHJhU3BhY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCWlmIChpc0xpc3RlbmVyRW5hYmxlZCgpICYmICFpc0luRG9IYW5kbGUpIAotCQkJewotCQkJCWlmIChldmVudC50eXBlID09IFNXVC5UcmF2ZXJzZSkgewotCQkJCQlpZiAoZXZlbnQuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUIHx8IGV2ZW50LmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfQVJST1dfUFJFVklPVVMpIHsKLQkJCQkJCWlzVHJhdmVyc2luZyA9IHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibyAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKSB7Ci0JCQlTdHJpbmcgc2VsZWN0ZWRJdGVtID0gY29tYm8uZ2V0SXRlbShjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQkJCWlmIChzaG91bGRQZXJmb3JtQ29tYm9TZWxlY3Rpb24oZXZlbnQsIHNlbGVjdGVkSXRlbSkpCi0JCQl7Ci0JCQkJaGFuZGxlQ29tYm9TZWxlY3Rpb24oKTsKLQkJCQlyZWZyZXNoKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ29tYm9TZWxlY3Rpb24oKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0JCQotCQlJUGFyYW1ldGVyIHBhcmFtZXRlciA9IChJUGFyYW1ldGVyKSB0aGlzLmdldE1vZGVsKCk7Ci0JCQotCQlpZiAodmFsdWUuZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBwYXJhbWV0ZXIuZ2V0U2V0VHlwZUNvbW1hbmQoSVBhcmFtZXRlci5TRVRfTkVXX0FDVElPTl9JRCk7Ci0JCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJfQotCQllbHNlIGlmICh2YWx1ZS5lcXVhbHMoQlJPV1NFX1NUUklORykpIHsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRUeXBlQ29tbWFuZChJUGFyYW1ldGVyLlNFTEVDVF9FWElTVElOR19BQ1RJT05fSUQpOwotCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0JCQlpZiAoc3BlYyAhPSBudWxsKSB7Ci0JCQkJZWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmFtZXRlciwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlpZiAocGFyYW1ldGVyUmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gcGFyYW1ldGVyUmVmTWFuYWdlcjsKLQkJfQkJCi0gICAgICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLSAgICAgICAgeyAgCi0JCSAgcGFyYW1ldGVyUmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcigoSUFTRE9iamVjdCkgZ2V0TW9kZWwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtb2RlbCIgKyBnZXRNb2RlbCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9ICAKLQkJcmV0dXJuIHBhcmFtZXRlclJlZk1hbmFnZXI7Ci0JfQotCQotCS8vIFRPRE86IHJtYWg6IFRoaXMgY29kZSBzaG91bGQgbGl2ZSBpbiBhIGNvbW1vbiBwbGFjZS4uLi4uIFRoaXMgY29kZSBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgVUkgc2NlbmFyaW9zIHdoZW4KLQkvLyBhIHNpbWlsYXIgY29tYm8gYm94IGlzIHVzZWQuICBGb3IgZXhhbXBsZSBpbiBEaXJlY3QgRWRpdC4uLihUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIpICBBbHNvIHVzZWQgaW4gdGhlIFhTREVkaXRvci4uLgotCXByb3RlY3RlZCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZShTdHJpbmcgdmFsdWUpCi0JewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKQotCQl7ICAKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJaWYgKHF1aWNrUGlja3MgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBxdWlja1BpY2tzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gcXVpY2tQaWNrc1tpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9ICAgICAgICAgICAgICAgIAotCQkJCX0gIAotCQkJfQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGhpc3RvcnkgPSBlZGl0TWFuYWdlci5nZXRIaXN0b3J5KCk7Ci0JCQlpZiAoaGlzdG9yeSAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IGhpc3RvcnkubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJeyAgCi0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfQotCQkJCX0gIAotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCWlmIChjb21ibyAhPSBudWxsICYmICFjb21iby5pc0Rpc3Bvc2VkKCkpCi0JCXsKLQkJCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULlRyYXZlcnNlLCB0aGlzKTsKLQkJfQotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1JlZmVyZW5jZVNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9SZWZlcmVuY2VTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMDhjM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1JlZmVyZW5jZVNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNDb21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlZmVyZW5jZVNlY3Rpb24gZXh0ZW5kcyBOYW1lU2VjdGlvbiB7Ci0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgQ0xhYmVsIGNvbWJvTGFiZWw7Ci0JCi0JcHJvdGVjdGVkIExpc3QgaXRlbXNJbkNvbWJvID0gbmV3IEFycmF5TGlzdCgpOwotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJCi0JCS8vIENyZWF0ZSBDb21ibyByb3cgb2Ygd2lkZ2V0cwotCQljb21ib0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICJSZWZlcmVuY2UiKTsgLy8kTk9OLU5MUy0xJAotCQljb21ibyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDQ29tYm8oY29tcG9zaXRlKTsKLQkJY29tYm8uc2V0QmFja2dyb3VuZChjb21wb3NpdGUuZ2V0QmFja2dyb3VuZCgpKTsKLQotCQkvLyBMYXlvdXQgQ29tYm8gTGFiZWwKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORzsKLQkgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCWNvbWJvTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCS8vIExheW91dCBDb21ibwotCQljb21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJCi0gICAgICAgIGNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotICAgICAgICBjb21iby5hZGRMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgICAgIGNvbWJvLmFkZExpc3RlbmVyKFNXVC5UcmF2ZXJzZSwgdGhpcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibykgewotCQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgewotCQkJCWlmIChldmVudC50eXBlID09IFNXVC5UcmF2ZXJzZSkgewotCQkJCQlpZiAoZXZlbnQuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUIHx8IGV2ZW50LmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfQVJST1dfUFJFVklPVVMpCi0JCQkJCQlpc1RyYXZlcnNpbmcgPSB0cnVlOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzdXBlci5oYW5kbGVFdmVudChldmVudCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCQkKLQkJc3VwZXIucmVmcmVzaCgpOwotCQkKLQkJTGlzdCBjb21ib0l0ZW1zID0gZ2V0Q29tYm9JdGVtcygpOwotCQlpZiAoY29tYm9JdGVtcy5zaXplKCkgPiAwKSB7Ci0JCQljb21iby5yZW1vdmVBbGwoKTsKLQkJCWl0ZW1zSW5Db21iby5jbGVhcigpOwotCi0JCQkvLyBXZSBuZWVkIHRvIHBvcHVsYXRlIHRoaXMgY29tYm8gd2l0aCB0aGUgYXZhaWxhYmxlIHJlZmVyZW5jZXMKLQkJCS8vIFRPRE86IHJtYWg6IFdlIHNob3VsZCBpbmNsdWRlIHRoZSBwcmVmaXggYXMgd2VsbAotCQkJU3RyaW5nIGN1cnJlbnRDb21ib0l0ZW1OYW1lID0gZ2V0Q29tYm9JdGVtTmFtZShnZXRDdXJyZW50Q29tYm9JdGVtKCkpOwotCQkJaW50IGN1cnJlbnRCaW5kaW5nSW5kZXggPSAtMTsKLQkJCQotCQkJTGlzdCBpdGVtcyA9IGdldENvbWJvSXRlbXMoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCQlPYmplY3QgaXRlbSA9IGl0ZW1zLmdldChpbmRleCk7Ci0JCQkJU3RyaW5nIGl0ZW1OYW1lID0gZ2V0Q29tYm9JdGVtTmFtZShpdGVtKTsKLQkJCQljb21iby5hZGQoaXRlbU5hbWUpOwotCQkJCWl0ZW1zSW5Db21iby5hZGQoaXRlbSk7Ci0KLQkJCQlpZiAoaXRlbU5hbWUuZXF1YWxzKGN1cnJlbnRDb21ib0l0ZW1OYW1lKSkgewotCQkJCQljdXJyZW50QmluZGluZ0luZGV4ID0gaW5kZXg7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoY3VycmVudEJpbmRpbmdJbmRleCAhPSAtMSkgewotCQkJCWNvbWJvLnNlbGVjdChjdXJyZW50QmluZGluZ0luZGV4KTsJCi0JCQl9Ci0JCX0KLQkJCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoY29tYm8pOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8uYWRkTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCX0KLQkKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgTGlzdCBnZXRDb21ib0l0ZW1zKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IE9iamVjdCBnZXRDdXJyZW50Q29tYm9JdGVtKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRDb21ib0l0ZW1OYW1lKE9iamVjdCBpdGVtKTsKLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBwZXJmb3JtQ29tYm9TZWxlY3Rpb24oT2JqZWN0IGl0ZW0pOwotCQotICBwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLQkgIHN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCSAgaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibyAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKSB7Ci0JCSAgaW50IHNlbGVjdGlvbkluZGV4ID0gY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkJICBPYmplY3Qgc2VsZWN0ZWRJdGVtID0gaXRlbXNJbkNvbWJvLmdldChzZWxlY3Rpb25JbmRleCk7Ci0JCSAgCi0JCSAgaWYgKHNob3VsZFBlcmZvcm1Db21ib1NlbGVjdGlvbihldmVudCwgc2VsZWN0ZWRJdGVtKSkKLQkJICB7Ci0JCSAgICBwZXJmb3JtQ29tYm9TZWxlY3Rpb24oc2VsZWN0ZWRJdGVtKTsKLQkJICAgIHJlZnJlc2goKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gIAlpZiAoY29tYm8gIT0gbnVsbCAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKQotICAJewotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCX0KLQlzdXBlci5kaXNwb3NlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5YjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLQotLyoqCi0gKiBAZGVwcmFjYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBBU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIgaW5zdGFuY2U7Ci0JCi0JcHJpdmF0ZSBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5OwotCQotCXB1YmxpYyBzdGF0aWMgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JcHVibGljIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKSB7Ci0JCWlmIChlZGl0UGFydEZhY3RvcnkgPT0gbnVsbCkgewotCQkJZWRpdFBhcnRGYWN0b3J5ID0gbmV3IEFTREVkaXRQYXJ0RmFjdG9yeSgpOwotCQl9Ci0JCXJldHVybiBlZGl0UGFydEZhY3Rvcnk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEVkaXRQYXJ0RmFjdG9yeShFZGl0UGFydEZhY3RvcnkgZmFjdG9yeSkgewotCQllZGl0UGFydEZhY3RvcnkgPSBmYWN0b3J5OwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJT2JqZWN0IGFkYXB0ZXIgPSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpOwotCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIpIHsKLQkJCSgoRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcikgYWRhcHRlcikuc2V0RWRpdFBhcnRGYWN0b3J5KGZhY3RvcnkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjlhM2FiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9FbmRQb2ludENvbXBhcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJaWYgKG8xIGluc3RhbmNlb2YgSUVuZFBvaW50ICYmIG8yIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0JCQlJQmluZGluZyBiaW5kaW5nMSA9ICgoSUVuZFBvaW50KSBvMSkuZ2V0QmluZGluZygpOwotCQkJSUJpbmRpbmcgYmluZGluZzIgPSAoKElFbmRQb2ludCkgbzIpLmdldEJpbmRpbmcoKTsKLQotCQkJaWYgKGJpbmRpbmcxICE9IG51bGwgJiYgYmluZGluZzIgIT0gbnVsbCkgewotCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMSA9IGJpbmRpbmcxLmdldEludGVyZmFjZSgpOwotCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMiA9IGJpbmRpbmcyLmdldEludGVyZmFjZSgpOwotCi0JCQkJaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIG5hbWUxID0gaW50ZXJmYWNlMS5nZXROYW1lKCk7Ci0JCQkJCVN0cmluZyBuYW1lMiA9IGludGVyZmFjZTIuZ2V0TmFtZSgpOwotCQkJCQlyZXR1cm4gbmFtZTEuY29tcGFyZVRvKG5hbWUyKTsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4gZG9OdWxsQ29tcGFyaXNvbihpbnRlcmZhY2UxLCBpbnRlcmZhY2UyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIGRvTnVsbENvbXBhcmlzb24oYmluZGluZzEsIGJpbmRpbmcyKTsKLQkJfQotCi0JCXJldHVybiBkb051bGxDb21wYXJpc29uKG8xLCBvMik7Ci0JfQotCQotCXByaXZhdGUgaW50IGRvTnVsbENvbXBhcmlzb24oT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJaWYgKG8xICE9IG51bGwgJiYgbzIgPT0gbnVsbCkgewotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWVsc2UgaWYgKG8xID09IG51bGwgJiYgbzIgIT0gbnVsbCkgewotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJCi0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmEzZGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciB7Ci0JcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG9iamVjdCk7Ci0JcHVibGljIHZvaWQgb3BlbkV4dGVybmFsRWRpdG9yKCk7Ci0JcHVibGljIGJvb2xlYW4gbGlua0FwcGxpY2FibGUoKTsKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCk7Ci0JcHVibGljIHZvaWQgc2hvd1ByZXZpZXcoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL0lXU0RMUmVmYWN0b3JDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL0lXU0RMUmVmYWN0b3JDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1MzM3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9JV1NETFJlZmFjdG9yQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3I7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdTRExSZWZhY3RvckNvbnN0YW50cyB7Ci0JU3RyaW5nIFJFRkFDVE9SX0NPTlRFWFRfTUVOVV9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvck1lbnVJZCI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL1JlbmFtZUVuYWJsZW1lbnRUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL1JlbmFtZUVuYWJsZW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5ZjAxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9SZW5hbWVFbmFibGVtZW50VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUmVuYW1lRW5hYmxlbWVudFRlc3RlciBleHRlbmRzIFByb3BlcnR5VGVzdGVyIHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRU5BTUVfRU5BQkxFRCA9ICJyZW5hbWVFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBib29sZWFuIHRlc3QoT2JqZWN0IHJlY2VpdmVyLCBTdHJpbmcgcHJvcGVydHksIE9iamVjdFtdIGFyZ3MsCi0JCQlPYmplY3QgZXhwZWN0ZWRWYWx1ZSkgewotCQlpZiAoIVJFTkFNRV9FTkFCTEVELmVxdWFscyhwcm9wZXJ0eSkpIHJldHVybiBmYWxzZTsKLQkJCi0JCUlXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJaWYgKHdpbmRvdyA9PSBudWxsKSByZXR1cm4gZmFsc2U7IAotCi0JCUlXb3JrYmVuY2hQYWdlIGFjdGl2ZVBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOyAKLQkJaWYgKGFjdGl2ZVBhZ2UgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotCi0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGFjdGl2ZVBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7CQotCQlpZiAoZWRpdG9yID09IG51bGwpIHJldHVybiBmYWxzZTsKLQotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgZWRpdG9yLmdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7Ci0JCWlmIChkZWZpbml0aW9uID09IG51bGwpIHJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gY2FuRW5hYmxlKGRlZmluaXRpb24sIHJlY2VpdmVyKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gY2FuRW5hYmxlKERlZmluaXRpb24gZGVmaW5pdGlvbiwgT2JqZWN0IHNlbGVjdGVkT2JqZWN0KSB7Ci0JCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBmU3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0ZWRPYmplY3Q7Ci0JCQlzZWxlY3RlZE9iamVjdCA9IGZTdHJ1Y3R1cmVkU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCi0JCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCQlXU0RMQmFzZUFkYXB0ZXIgd3NkbE9iamVjdCA9IChXU0RMQmFzZUFkYXB0ZXIpIHNlbGVjdGVkT2JqZWN0OwotCQkJCQotCQkJCS8vIGRvIG5vdCBlbmFibGUgZm9yIHJlYWQtb25seSBvYmplY3RzCi0JCQkJaWYgKHdzZGxPYmplY3QuaXNSZWFkT25seSgpKSB7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQkJCi0JCQkJc2VsZWN0ZWRPYmplY3QgPSB3c2RsT2JqZWN0LmdldFRhcmdldCgpOwotCQkJfQotCi0JCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCkgewotCQkJCXJldHVybiBkb0NhbkVuYWJsZVhTRFNlbGVjdGlvbigoWFNETmFtZWRDb21wb25lbnQpIHNlbGVjdGVkT2JqZWN0KTsKLQkJCX0gZWxzZSBpZihzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50SW1wbCl7Ci0JCQkJcmV0dXJuIGRvQ2FuRW5hYmxlV1NETFNlbGVjdGlvbigoV1NETEVsZW1lbnRJbXBsKSBzZWxlY3RlZE9iamVjdCk7Ci0JCQl9Ci0JCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQkJRWxlbWVudCBub2RlID0gKEVsZW1lbnQpIHNlbGVjdGVkT2JqZWN0OwotCQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCQkJLy8gaXNzdWUgKGViKSAgZGVwZW5kZW5jeSBvbiB1dGlsaXR5IGNsYXNzIHRvIGdldCBjb21wb25lbnQgZnJvbSB0aGUgbW9kZWwgYmFzZWQgb24gZWxlbWVudAotCQkJCQlPYmplY3QgY29uY3JldGVDb21wb25lbnQgPSAJKG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCkpLmdldE1vZGVsT2JqZWN0Rm9yTm9kZShkZWZpbml0aW9uLCBub2RlKTsKLQkJCQkJcmV0dXJuIGNhbkVuYWJsZShkZWZpbml0aW9uLCBjb25jcmV0ZUNvbXBvbmVudCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZG9DYW5FbmFibGVYU0RTZWxlY3Rpb24oWFNETmFtZWRDb21wb25lbnQgc2VsZWN0ZWRPYmplY3QpIHsKLQkJaWYgKCAhKHNlbGVjdGVkT2JqZWN0LmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIElET01FbGVtZW50KSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJLy8gaWYgaXQncyBlbGVtZW50IHJlZmVyZW5jZSwgdGhlbiB0aGlzIGFjdGlvbiBpcyBub3QgYXBwcm9wcmlhdGUKLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIHNlbGVjdGVkT2JqZWN0OwotCQkJaWYgKGVsZW1lbnQuaXNFbGVtZW50RGVjbGFyYXRpb25SZWZlcmVuY2UoKSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQotCi0JCWlmKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pewotCQkJWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IChYU0RUeXBlRGVmaW5pdGlvbikgc2VsZWN0ZWRPYmplY3Q7Ci0JCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB0eXBlLmdldENvbnRhaW5lcigpOwotCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgcGFyZW50OwotCQkJCWlmKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKS5lcXVhbHModHlwZSkpewotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZihwYXJlbnQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgewotCQkJCVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pIHBhcmVudDsKLQkJCQlpZihlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkuZXF1YWxzKHR5cGUpKXsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBkb0NhbkVuYWJsZVdTRExTZWxlY3Rpb24oV1NETEVsZW1lbnQgc2VsZWN0ZWRPYmplY3QpIHsKLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZyB8fAotCQkJCXNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgUG9ydFR5cGUgfHwKLQkJCQlzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9XU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL1dTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2ZjNzNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL1dTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5yZW5hbWUuQ29tcG9uZW50UmVuYW1lQXJndW1lbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IucmVuYW1lLlhNTENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLQotLyoqCi0gKiBUaGlzIHBhcnRpY2lwYW50IHRha2VzIGNhc2Ugb2YgcmVuYW1pbmcgbWF0Y2hlcyB0aGF0IGFyZSBYU0QgY29tcG9uZW50cwotICovCi1wdWJsaWMgY2xhc3MgV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50IGV4dGVuZHMgWE1MQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQgewotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaW5pdGlhbGl6ZShPYmplY3QgZWxlbWVudCkgewotCi0JCWlmKGVsZW1lbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCB8fCBlbGVtZW50IGluc3RhbmNlb2YgWFNETmFtZWRDb21wb25lbnQpewotCQkJaWYoZ2V0QXJndW1lbnRzKCkgaW5zdGFuY2VvZiBDb21wb25lbnRSZW5hbWVBcmd1bWVudHMpewotCQkJCW1hdGNoZXMgPSAoTGlzdCkoKENvbXBvbmVudFJlbmFtZUFyZ3VtZW50cylnZXRBcmd1bWVudHMoKSkuZ2V0TWF0Y2hlcygpLmdldChJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRSk7Ci0JCQl9Ci0JCQlpZihtYXRjaGVzICE9IG51bGwpewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCQotCQlyZXR1cm4gIldTREwgY29tcG9uZW50IHJlbmFtZSBwYXJ0aWNpcGFudCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1JlbmFtZUNvbXBvbmVudEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9SZW5hbWVDb21wb25lbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc2ZGIyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1JlbmFtZUNvbXBvbmVudEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnBhcnRpY2lwYW50cy5SZW5hbWVSZWZhY3RvcmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcuUmVmYWN0b3JpbmdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLlJlZmFjdG9yaW5nV2l6YXJkT3Blbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuR2xvYmFsQnVpbGRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNhdmVEaXJ0eUZpbGVzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5oYW5kbGVycy5SZW5hbWVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5SZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlJlZmFjdG9yaW5nTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5YTUxSZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5SZW5hbWVDb21wb25lbnRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVuYW1lUmVmYWN0b3JpbmdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqIAotICogQGRlcHJlY2F0ZWQgVGhpcyBjbGFzcyBpcyByZXBsYWNlZCBieSB7QGxpbmsgUmVuYW1lSGFuZGxlcn0uIAotICovCi1wdWJsaWMgY2xhc3MgUmVuYW1lQ29tcG9uZW50QWN0aW9uIGV4dGVuZHMgV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uIHsKLQotCXByaXZhdGUgUmVmYWN0b3JpbmdDb21wb25lbnQgc2VsZWN0ZWRDb21wb25lbnQ7Ci0KLQlwdWJsaWMgUmVuYW1lQ29tcG9uZW50QWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uLAotCQkJRGVmaW5pdGlvbiBtb2RlbCkgewotCQlzdXBlcihzZWxlY3Rpb24pOwotCQlzZXRNb2RlbChtb2RlbCk7Ci0JfQotIAotCXByb3RlY3RlZCBib29sZWFuIGRvQ2FuRW5hYmxlWFNEU2VsZWN0aW9uKFhTRE5hbWVkQ29tcG9uZW50IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQlpZiAoc2VsZWN0ZWRPYmplY3QgIT0gbnVsbCkgewotCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBuZXcgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQoCi0JCQkJCXNlbGVjdGVkT2JqZWN0LAotCQkJCQkoSURPTUVsZW1lbnQpc2VsZWN0ZWRPYmplY3QuZ2V0RWxlbWVudCgpLCAKLQkJCQkJc2VsZWN0ZWRPYmplY3QuZ2V0TmFtZSgpLAotCQkJCQlzZWxlY3RlZE9iamVjdC5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCi0JCQkvLyBpZiBpdCdzIGVsZW1lbnQgcmVmZXJlbmNlLCB0aGVuIHRoaXMgYWN0aW9uIGlzIG5vdCBhcHByb3ByaWF0ZQotCQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBzZWxlY3RlZE9iamVjdDsKLQkJCQlpZiAoZWxlbWVudC5pc0VsZW1lbnREZWNsYXJhdGlvblJlZmVyZW5jZSgpKSB7Ci0JCQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCQlpZihzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKXsKLQkJCQlYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gKFhTRFR5cGVEZWZpbml0aW9uKSBzZWxlY3RlZE9iamVjdDsKLQkJCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB0eXBlLmdldENvbnRhaW5lcigpOwotCQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBwYXJlbnQ7Ci0JCQkJCWlmKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKS5lcXVhbHModHlwZSkpewotCQkJCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgaWYocGFyZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pIHsKLQkJCQkJWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgcGFyZW50OwotCQkJCQlpZihlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkuZXF1YWxzKHR5cGUpKXsKLQkJCQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBjYW5SdW4oKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gZG9DYW5FbmFibGVXU0RMU2VsZWN0aW9uKFdTRExFbGVtZW50IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQlTdHJpbmcgbG9jYWxOYW1lID0gbnVsbDsKLQkJU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7IAotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nKXsKLQkJCWxvY2FsTmFtZSA9ICgoQmluZGluZylzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCW5hbWVzcGFjZSA9ICgoQmluZGluZylzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKXsKLQkJCWxvY2FsTmFtZSA9ICgoUG9ydFR5cGUpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKFBvcnRUeXBlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQl9Ci0JCWVsc2UgaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSl7Ci0JCQlsb2NhbE5hbWUgPSAoKE1lc3NhZ2Upc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKE1lc3NhZ2Upc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCX0KLQkJaWYobG9jYWxOYW1lICE9IG51bGwpewotCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBuZXcgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQoCi0JCQkJCXNlbGVjdGVkT2JqZWN0LAotCQkJCQkoSURPTUVsZW1lbnQpc2VsZWN0ZWRPYmplY3QuZ2V0RWxlbWVudCgpLCAKLQkJCQkJbG9jYWxOYW1lLAotCQkJCQluYW1lc3BhY2UpOwotCQl9Ci0JCQotCQotCQlyZXR1cm4gY2FuUnVuKCk7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2FuRW5hYmxlKE9iamVjdCBzZWxlY3RlZE9iamVjdCkgewotCi0JCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KSB7Ci0JCQlyZXR1cm4gZG9DYW5FbmFibGVYU0RTZWxlY3Rpb24oKFhTRE5hbWVkQ29tcG9uZW50KSBzZWxlY3RlZE9iamVjdCk7Ci0JCX0gZWxzZSBpZihzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50SW1wbCl7Ci0JCQlyZXR1cm4gZG9DYW5FbmFibGVXU0RMU2VsZWN0aW9uKChXU0RMRWxlbWVudEltcGwpIHNlbGVjdGVkT2JqZWN0KTsKLQkJfQotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQlFbGVtZW50IG5vZGUgPSAoRWxlbWVudCkgc2VsZWN0ZWRPYmplY3Q7Ci0JCQlpZiAoZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpIHsKLQkJCQkvLyBpc3N1ZSAoZWIpICBkZXBlbmRlbmN5IG9uIHV0aWxpdHkgY2xhc3MgdG8gZ2V0IGNvbXBvbmVudCBmcm9tIHRoZSBtb2RlbCBiYXNlZCBvbiBlbGVtZW50Ci0JCQkJT2JqZWN0IGNvbmNyZXRlQ29tcG9uZW50ID0gCShuZXcgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpKS5nZXRNb2RlbE9iamVjdEZvck5vZGUoZ2V0RGVmaW5pdGlvbigpLCBub2RlKTsKLQkJCQlyZXR1cm4gY2FuRW5hYmxlKGNvbmNyZXRlQ29tcG9uZW50KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5SdW4oKSB7Ci0KLQkJcmV0dXJuIHNlbGVjdGVkQ29tcG9uZW50ICE9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCi0gICAgICAgIGJvb2xlYW4gcmMgPSBTYXZlRGlydHlGaWxlc0RpYWxvZy5zYXZlRGlydHlGaWxlcygpOwotICAgICAgICBpZiAoIXJjKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9ICAKLQkJUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBSZW5hbWVDb21wb25lbnRQcm9jZXNzb3Ioc2VsZWN0ZWRDb21wb25lbnQsIHNlbGVjdGVkQ29tcG9uZW50LmdldE5hbWUoKSk7Ci0JCVJlbmFtZVJlZmFjdG9yaW5nIHJlZmFjdG9yaW5nID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nKHByb2Nlc3Nvcik7Ci0JCXRyeSB7Ci0JCQlSZWZhY3RvcmluZ1dpemFyZCB3aXphcmQgPSBuZXcgUmVuYW1lUmVmYWN0b3JpbmdXaXphcmQoCi0JCQkJCXJlZmFjdG9yaW5nLAotCQkJCQlSZWZhY3RvcmluZ01lc3NhZ2VzCi0JCQkJCS5nZXRTdHJpbmcoIlJlbmFtZUNvbXBvbmVudFdpemFyZC5kZWZhdWx0UGFnZVRpdGxlIiksIC8vJE5PTi1OTFMtMSQgVE9ETzogcHJvdmlkZSBjb3JyZWN0IHN0cmluZ3MKLQkJCQkJUmVmYWN0b3JpbmdNZXNzYWdlcwotCQkJCQkuZ2V0U3RyaW5nKCJSZW5hbWVDb21wb25lbnRXaXphcmQuaW5wdXRQYWdlLmRlc2NyaXB0aW9uIiksIC8vJE5PTi1OTFMtMSQKLQkJCQkJbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmMgPSBzdXBlci5wZXJmb3JtRmluaXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLygoRGVmaW5pdGlvbkltcGwpZ2V0RGVmaW5pdGlvbigpKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIH07ICAgICAgICAKLQkJCVJlZmFjdG9yaW5nV2l6YXJkT3Blbk9wZXJhdGlvbiBvcCA9IG5ldyBSZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb24oCi0JCQkJCXdpemFyZCk7Ci0JCQlvcC5ydW4oV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCB3aXphcmQKLQkJCQkJLmdldERlZmF1bHRQYWdlVGl0bGUoKSk7Ci0JCQl0cmlnZ2VyQnVpbGQoKTsKLSAgICAgICAgICAgIAotCQkJRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpCi0JCQl7CQkJICAKLQkJCSAgcHVibGljIHZvaWQgcnVuKCkKLQkJCSAgewotCQkJICAgICgoRGVmaW5pdGlvbkltcGwpZ2V0RGVmaW5pdGlvbigpKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotCQkJICB9Ci0JCQl9KTsgIAotICAgICAgICAgICAgCi0JCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcuIFVzZXIgYWN0aW9uIGdvdCBjYW5jZWxsZWQKLQkJfQotCQkKLQkJaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBEZWZpbml0aW9uSW1wbCkgewotCQkJKChEZWZpbml0aW9uSW1wbCkgZ2V0TW9kZWwoKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmlnZ2VyQnVpbGQoKSB7Ci0JCWlmIChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0RGVzY3JpcHRpb24oKS5pc0F1dG9CdWlsZGluZygpKSB7Ci0JCQluZXcgR2xvYmFsQnVpbGRBY3Rpb24oV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpCi0JCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKSwKLQkJCQkJSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCkucnVuKCk7Ci0JCX0KLQl9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIxM2E0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3RvckFjdGlvbkdyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5oYW5kbGVycy5SZW5hbWVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5SZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVmYWN0b3JBY3Rpb25Hcm91cDsKLQotLyoqIAotICogQGRlcHJlY2F0ZWQgVGhpcyBjbGFzcyBpcyByZXBsYWNlZCBieSB7QGxpbmsgUmVuYW1lSGFuZGxlcn0uIAotICovCi1wdWJsaWMgY2xhc3MgV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAgZXh0ZW5kcyBSZWZhY3RvckFjdGlvbkdyb3VwIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTkFNRV9FTEVNRU5UID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0JCi0JcHVibGljIFdTRExSZWZhY3RvckFjdGlvbkdyb3VwKElTZWxlY3Rpb24gc2VsZWN0aW9uLAotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCQotCQlzdXBlcihzZWxlY3Rpb24pOyAKLQkgIAlpZiggZGVmaW5pdGlvbiAhPSBudWxsKXsKLQkJCWZFZGl0b3JBY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJUmVuYW1lQ29tcG9uZW50QWN0aW9uIGFjdGlvbiA9IG5ldyBSZW5hbWVDb21wb25lbnRBY3Rpb24oc2VsZWN0aW9uLCBkZWZpbml0aW9uKTsKLQkJCWZSZW5hbWVBY3Rpb24gPSBuZXcgUmVuYW1lQWN0aW9uKHNlbGVjdGlvbik7Ci0JCQlmUmVuYW1lQWN0aW9uLnNldFJlbmFtZUNvbXBvbmVudEFjdGlvbihhY3Rpb24pOwotCQkJZlJlbmFtZUFjdGlvbi5zZXRBY3Rpb25EZWZpbml0aW9uSWQoUkVOQU1FX0VMRU1FTlQpOwotCQkJZkVkaXRvckFjdGlvbnMuYWRkKGZSZW5hbWVBY3Rpb24pOwotCQkJaW5pdEFjdGlvbihmUmVuYW1lQWN0aW9uLCBzZWxlY3Rpb24pOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJLy9kaXNwb3NlQWN0aW9uKGZSZW5hbWVBY3Rpb24sIGZTZWxlY3Rpb25Qcm92aWRlcik7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTEzNmIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLkZpbGVTdG9yZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSVNlbGVjdGlvbk1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5oYW5kbGVycy5SZW5hbWVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3Iud2l6YXJkLlJlZmFjdG9yQWN0aW9uR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3Iud2l6YXJkLlJlZmFjdG9yR3JvdXBTdWJNZW51OwotCi0KLS8qKiAKLSAqIEBkZXByZWNhdGVkIFRoaXMgY2xhc3MgaXMgcmVwbGFjZWQgYnkge0BsaW5rIFJlbmFtZUhhbmRsZXJ9LiAKLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZSBleHRlbmRzIFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZQotewotICBwdWJsaWMgV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIC8qKgotICAgKiBGaWxscyB0aGUgbWVudSB3aXRoIGFwcGxpY2FibGUgcmVmYWN0b3Igc3ViLW1lbnVlcwotICAgKiAKLSAgICogQHBhcmFtIG1lbnUKLSAgICogICAgICAgICAgVGhlIG1lbnUgdG8gZmlsbAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZmlsbE1lbnUoTWVudSBtZW51KQotICB7Ci0gICAgaWYgKGZTZWxlY3Rpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh3b3JrYmVuY2hQYXJ0ICE9IG51bGwpCi0gICAgewotICAgICAgSVdvcmtiZW5jaFBhcnRTaXRlIHNpdGUgPSB3b3JrYmVuY2hQYXJ0LmdldFNpdGUoKTsKLSAgICAgIGlmIChzaXRlID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLSAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IHNpdGUuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICBib29sZWFuIHNob3VsZEZpbGxNZW51ID0gZWRpdG9yICE9IG51bGwgJiYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCB8fCBlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KTsKLSAgICAgIGlmIChzaG91bGRGaWxsTWVudSkKLSAgICAgIHsKLSAgICAgICAgSVNlbGVjdGlvbk1hcHBlciBtYXBwZXIgPSAoSVNlbGVjdGlvbk1hcHBlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvbk1hcHBlci5jbGFzcyk7Ci0gICAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gbWFwcGVyICE9IG51bGwgPyBtYXBwZXIubWFwU2VsZWN0aW9uKGZTZWxlY3Rpb24pIDogZlNlbGVjdGlvbjsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGVkaXRvci5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgICB7ICAKLSAgICAgICAgICBSZWZhY3RvckFjdGlvbkdyb3VwIHJlZmFjdG9yTWVudUdyb3VwID0gbmV3IFdTRExSZWZhY3RvckFjdGlvbkdyb3VwKHNlbGVjdGlvbiwgZGVmaW5pdGlvbik7Ci0gICAgICAgICAgUmVmYWN0b3JHcm91cFN1Yk1lbnUgc3ViTWVudSA9IG5ldyBSZWZhY3Rvckdyb3VwU3ViTWVudShyZWZhY3Rvck1lbnVHcm91cCk7Ci0gICAgICAgICAgc3ViTWVudS5maWxsKG1lbnUsIC0xKTsKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9XU0RMU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MGY2MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9XU0RMU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLlNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24gZXh0ZW5kcyBTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTkFNRV9FTEVNRU5UID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIFdTRExTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCXN1cGVyKHNlbGVjdGlvbik7Ci0JfQotCQotCXByb3RlY3RlZCBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKXsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJaWYobW9kZWwgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotCQl7Ci0JCQlyZXR1cm4gKERlZmluaXRpb24pIG1vZGVsOwotCQl9Ci0JCi0JCXJldHVybiBudWxsOwotCX0KLQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9oYW5kbGVycy9SZW5hbWVIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9oYW5kbGVycy9SZW5hbWVIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNGEwZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvaGFuZGxlcnMvUmVuYW1lSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5oYW5kbGVyczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wYXJ0aWNpcGFudHMuUmVuYW1lUmVmYWN0b3Jpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLlJlZmFjdG9yaW5nV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuR2xvYmFsQnVpbGRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNhdmVEaXJ0eUZpbGVzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlJlZmFjdG9yaW5nTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5YTUxSZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5SZW5hbWVDb21wb25lbnRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVuYW1lUmVmYWN0b3JpbmdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlbmFtZUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciB7CQotCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KGV2ZW50KTsKLQkJaWYgKHdvcmtiZW5jaFdpbmRvdyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJaWYgKGFjdGl2ZVBhZ2UgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0KLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gYWN0aXZlUGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkJCi0JCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3IuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLQkJaWYgKGRlZmluaXRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JCQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGFjdGl2ZVBhZ2UuZ2V0U2VsZWN0aW9uKCk7CQotCQlyZXR1cm4gZXhlY3V0ZShkZWZpbml0aW9uLCBzZWxlY3Rpb24pOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShEZWZpbml0aW9uIGRlZmluaXRpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWlmICggISAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pKSByZXR1cm4gbnVsbDsKLQkJCi0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjdHVyZWRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQkJT2JqZWN0IGVsZW1lbnQgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwkKLQkJaWYgKCAhIChlbGVtZW50IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkpIHJldHVybiBudWxsOwotCQkKLQotCQkKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCS8vIGNvbnZlcnQgdGhlIFdTRExCYXNlQWRhcHRlciAoRU1GKSB0byBXU0RMRWxlbWVudAotCQkJZWxlbWVudCA9ICgoV1NETEJhc2VBZGFwdGVyKSBlbGVtZW50KS5nZXRUYXJnZXQoKTsKLQkJfSAKLQkJWE1MUmVmYWN0b3JpbmdDb21wb25lbnQgc2VsZWN0ZWRDb21wb25lbnQgPSBnZXRSZWZhY3RvcmluZ0NvbXBvbmVudChkZWZpbml0aW9uLCBlbGVtZW50KTsKLQkJaWYgKHNlbGVjdGVkQ29tcG9uZW50ICE9IG51bGwpIHsKLQkJCXJ1bihkZWZpbml0aW9uLCBzZWxlY3RlZENvbXBvbmVudCk7Ci0JCX0KLQkJCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50IGdldFhTRFJlZmFjdG9yaW5nQ29tcG9uZW50KFhTRE5hbWVkQ29tcG9uZW50IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJWE1MUmVmYWN0b3JpbmdDb21wb25lbnQgc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQlpZiAoIHNlbGVjdGVkT2JqZWN0LmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIElET01FbGVtZW50KSB7Ci0JCQlzZWxlY3RlZENvbXBvbmVudCA9IG5ldyBYTUxSZWZhY3RvcmluZ0NvbXBvbmVudCgKLQkJCQkJc2VsZWN0ZWRPYmplY3QsCi0JCQkJCShJRE9NRWxlbWVudClzZWxlY3RlZE9iamVjdC5nZXRFbGVtZW50KCksIAotCQkJCQlzZWxlY3RlZE9iamVjdC5nZXROYW1lKCksCi0JCQkJCXNlbGVjdGVkT2JqZWN0LmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkKLQkJCS8vIGlmIGl0J3MgZWxlbWVudCByZWZlcmVuY2UsIHRoZW4gdGhpcyBhY3Rpb24gaXMgbm90IGFwcHJvcHJpYXRlCi0JCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIHNlbGVjdGVkT2JqZWN0OwotCQkJCWlmIChlbGVtZW50LmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpIHsKLQkJCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQkJCX0KLQkJCX0KLQkJCWlmKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pewotCQkJCVhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSAoWFNEVHlwZURlZmluaXRpb24pIHNlbGVjdGVkT2JqZWN0OwotCQkJCVhTRENvbmNyZXRlQ29tcG9uZW50IHBhcmVudCA9IHR5cGUuZ2V0Q29udGFpbmVyKCk7Ci0JCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIHBhcmVudDsKLQkJCQkJaWYoZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpLmVxdWFscyh0eXBlKSl7Ci0JCQkJCQlzZWxlY3RlZENvbXBvbmVudCA9IG51bGw7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSBpZihwYXJlbnQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgewotCQkJCQlYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKSBwYXJlbnQ7Ci0JCQkJCWlmKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKS5lcXVhbHModHlwZSkpewotCQkJCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHNlbGVjdGVkQ29tcG9uZW50OwotCX0KLQkKLQlwcm90ZWN0ZWQgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQgZ2V0V1NETFJlZmFjdG9yaW5nQ29tcG9uZW50KFdTRExFbGVtZW50IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJWE1MUmVmYWN0b3JpbmdDb21wb25lbnQgc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQlTdHJpbmcgbG9jYWxOYW1lID0gbnVsbDsKLQkJU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7IAotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nKXsKLQkJCWxvY2FsTmFtZSA9ICgoQmluZGluZylzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCW5hbWVzcGFjZSA9ICgoQmluZGluZylzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKXsKLQkJCWxvY2FsTmFtZSA9ICgoUG9ydFR5cGUpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKFBvcnRUeXBlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQl9Ci0JCWVsc2UgaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSl7Ci0JCQlsb2NhbE5hbWUgPSAoKE1lc3NhZ2Upc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKE1lc3NhZ2Upc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCX0KLQkJaWYobG9jYWxOYW1lICE9IG51bGwpewotCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBuZXcgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQoCi0JCQkJCXNlbGVjdGVkT2JqZWN0LAotCQkJCQkoSURPTUVsZW1lbnQpc2VsZWN0ZWRPYmplY3QuZ2V0RWxlbWVudCgpLCAKLQkJCQkJbG9jYWxOYW1lLAotCQkJCQluYW1lc3BhY2UpOwotCQl9Ci0JCQotCQlyZXR1cm4gc2VsZWN0ZWRDb21wb25lbnQ7Ci0JfQotCi0JcHJvdGVjdGVkIFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50IGdldFJlZmFjdG9yaW5nQ29tcG9uZW50KERlZmluaXRpb24gZGVmaW5pdGlvbiwgT2JqZWN0IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgWFNETmFtZWRDb21wb25lbnQpIHsKLQkJCXJldHVybiBnZXRYU0RSZWZhY3RvcmluZ0NvbXBvbmVudCgoWFNETmFtZWRDb21wb25lbnQpIHNlbGVjdGVkT2JqZWN0KTsKLQkJfSBlbHNlIGlmKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKXsKLQkJCXJldHVybiBnZXRXU0RMUmVmYWN0b3JpbmdDb21wb25lbnQoKFdTRExFbGVtZW50SW1wbCkgc2VsZWN0ZWRPYmplY3QpOwotCQl9Ci0JCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKLQkJCUVsZW1lbnQgbm9kZSA9IChFbGVtZW50KSBzZWxlY3RlZE9iamVjdDsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCQkvLyBpc3N1ZSAoZWIpICBkZXBlbmRlbmN5IG9uIHV0aWxpdHkgY2xhc3MgdG8gZ2V0IGNvbXBvbmVudCBmcm9tIHRoZSBtb2RlbCBiYXNlZCBvbiBlbGVtZW50Ci0JCQkJT2JqZWN0IGNvbmNyZXRlQ29tcG9uZW50ID0gCShuZXcgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpKS5nZXRNb2RlbE9iamVjdEZvck5vZGUoZGVmaW5pdGlvbiwgbm9kZSk7Ci0JCQkJcmV0dXJuIGdldFJlZmFjdG9yaW5nQ29tcG9uZW50KGRlZmluaXRpb24sIGNvbmNyZXRlQ29tcG9uZW50KTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBydW4oZmluYWwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYTUxSZWZhY3RvcmluZ0NvbXBvbmVudCBzZWxlY3RlZENvbXBvbmVudCkgewotCQotICAgICAgICBib29sZWFuIHJjID0gU2F2ZURpcnR5RmlsZXNEaWFsb2cuc2F2ZURpcnR5RmlsZXMoKTsKLSAgICAgICAgaWYgKCFyYykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSAgCi0JCVJlbmFtZUNvbXBvbmVudFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yKHNlbGVjdGVkQ29tcG9uZW50LCBzZWxlY3RlZENvbXBvbmVudC5nZXROYW1lKCkpOwotCQlSZW5hbWVSZWZhY3RvcmluZyByZWZhY3RvcmluZyA9IG5ldyBSZW5hbWVSZWZhY3RvcmluZyhwcm9jZXNzb3IpOwotCQl0cnkgewotCQkJUmVmYWN0b3JpbmdXaXphcmQgd2l6YXJkID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nV2l6YXJkKAotCQkJCQlyZWZhY3RvcmluZywKLQkJCQkJUmVmYWN0b3JpbmdNZXNzYWdlcwotCQkJCQkuZ2V0U3RyaW5nKCJSZW5hbWVDb21wb25lbnRXaXphcmQuZGVmYXVsdFBhZ2VUaXRsZSIpLCAvLyROT04tTkxTLTEkIFRPRE86IHByb3ZpZGUgY29ycmVjdCBzdHJpbmdzCi0JCQkJCVJlZmFjdG9yaW5nTWVzc2FnZXMKLQkJCQkJLmdldFN0cmluZygiUmVuYW1lQ29tcG9uZW50V2l6YXJkLmlucHV0UGFnZS5kZXNjcmlwdGlvbiIpLCAvLyROT04tTkxTLTEkCi0JCQkJCW51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJjID0gc3VwZXIucGVyZm9ybUZpbmlzaCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8oKERlZmluaXRpb25JbXBsKWdldERlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgCi0JCQlSZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb24gb3BlcmF0aW9uID0gbmV3IFJlZmFjdG9yaW5nV2l6YXJkT3Blbk9wZXJhdGlvbigKLQkJCQkJd2l6YXJkKTsKLQkJCW9wZXJhdGlvbi5ydW4oV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCB3aXphcmQKLQkJCQkJLmdldERlZmF1bHRQYWdlVGl0bGUoKSk7Ci0JCQl0cmlnZ2VyQnVpbGQoKTsKLSAgICAgICAgICAgIAotCQkJRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpCi0JCQl7CQkJICAKLQkJCSAgcHVibGljIHZvaWQgcnVuKCkKLQkJCSAgewotCQkJICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLQkJCSAgfQotCQkJfSk7ICAKLSAgICAgICAgICAgIAotCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLiBVc2VyIGFjdGlvbiBnb3QgY2FuY2VsbGVkCi0JCX0KLQkJCi0JCWlmIChkZWZpbml0aW9uIGluc3RhbmNlb2YgRGVmaW5pdGlvbkltcGwpIHsKLQkJCSgoRGVmaW5pdGlvbkltcGwpIGRlZmluaXRpb24pLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJpZ2dlckJ1aWxkKCkgewotCQlpZiAoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldERlc2NyaXB0aW9uKCkuaXNBdXRvQnVpbGRpbmcoKSkgewotCQkJbmV3IEdsb2JhbEJ1aWxkQWN0aW9uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKQotCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCksCi0JCQkJCUluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQpLnJ1bigpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL0lXU0RMU2VhcmNoQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2YzVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2g7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMU2VhcmNoQ29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTFNDSEVNQV9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBNRVNTQUdFX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBQT1JUX1RZUEVfTUVUQV9OQU1FID0gbmV3IFF1YWxpZmllZE5hbWUoCi0JCQlXU0RMX05BTUVTUEFDRSwgInBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBCSU5ESU5HX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJiaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDIzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL1dTRExTZWFyY2hDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLkNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5JWFNEU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaENvbnRyaWJ1dG9yIGV4dGVuZHMgQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgewotCi0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVjbGFyYXRpb25zKCkgewotCi0JCWRlY2xhcmF0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0JCVN0cmluZyBucyA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFOwotCi0JCVNlYXJjaFBhdHRlcm4gcGF0dGVybiA9IG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAibWVzc2FnZSIsICJuYW1lIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlkZWNsYXJhdGlvbnMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicG9ydFR5cGUiLCAibmFtZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGVjbGFyYXRpb25zLnB1dChJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJiaW5kaW5nIiwgIm5hbWUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRlY2xhcmF0aW9ucy5wdXQoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIHBhdHRlcm4pOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgIGluaXRpYWxpemVSZWZlcmVuY2VzKCkgewotCi0JCXJlZmVyZW5jZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlTdHJpbmcgbnMgPSBJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRTsKLQotCQlMaXN0IHBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicGFydCIsICJlbGVtZW50IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5FTEVNRU5UX01FVEFfTkFNRSwgcGF0dGVybnMpOwotCi0JCXBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJwYXJ0IiwgInR5cGUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlyZWZlcmVuY2VzLnB1dChJWFNEU2VhcmNoQ29uc3RhbnRzLkNPTVBMRVhfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAicGFydCIsICJ0eXBlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5TSU1QTEVfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiaW5wdXQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgIm91dHB1dCIsICJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiZmF1bHQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0KLQkJcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgImJpbmRpbmciLCAidHlwZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKCBucywgInBvcnQiLCAiYmluZGluZyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROYW1lc3BhY2VzKCkgewotCQluYW1lc3BhY2VzID0gbmV3IFN0cmluZ1tdeyBJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UsIElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFfTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhNjlhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaFBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5Db21wb25lbnRTZWFyY2hDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxDb21wb25lbnRTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VhcmNoUGFydGljaXBhbnQgZXh0ZW5kcyBYTUxTZWFyY2hQYXJ0aWNpcGFudCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFhTRF9QQVJUSUNJUEFOTlRfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC5zZWFyY2guWFNEU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0KLQkKLQlwdWJsaWMgV1NETFNlYXJjaFBhcnRpY2lwYW50KCkKLQl7Ci0JICBzdXBlcigpOwotICAgICAgaWQgPSBJRDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldFN1cHBvcnRlZENvbnRlbnRUeXBlcygpCi0JewotCSAgU3RyaW5nW10gcmVzdWx0ID0geyAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgfTsgLy8kTk9OLU5MUy0xJAotCSAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlKFNlYXJjaFBhdHRlcm4gcGF0dGVybiwgTWFwIHNlYXJjaE9wdGlvbnMpCi0JewotCQlpZihwYXR0ZXJuIGluc3RhbmNlb2YgWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiApewotCQkJWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiBjb21wb25lbnRQYXR0ZXJuID0gKFhNTENvbXBvbmVudFNlYXJjaFBhdHRlcm4pcGF0dGVybjsKLQkJCVN0cmluZyBuYW1lc3BhY2UgPSBjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCk7Ci0JCQlpZihJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRS5lcXVhbHMobmFtZXNwYWNlKSB8fAotCQkJCQlJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKG5hbWVzcGFjZSkpewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9CQotCQotCXB1YmxpYyBDb21wb25lbnRTZWFyY2hDb250cmlidXRvciBnZXRTZWFyY2hDb250cmlidXRvcigpIHsKLQotCQlyZXR1cm4gbmV3IFdTRExTZWFyY2hDb250cmlidXRvcigpOwotCX0KLQkKLSAgcHVibGljIHZvaWQgYmVnaW5TZWFyY2hpbmcoU2VhcmNoUGF0dGVybiBwYXR0ZXJuLCBNYXAgc2VhcmNoT3B0aW9ucykgewotCQkKLQkJc3VwZXIuYmVnaW5TZWFyY2hpbmcocGF0dGVybiwgc2VhcmNoT3B0aW9ucyk7Ci0JCUxpc3QgcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pewotCQkJCi0JCQlYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pcGF0dGVybjsKLQkJCWlmKElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFLmVxdWFscyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCkpKXsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJaWYoY2hpbGRQYXR0ZXJuICE9IG51bGwpewotCQkJCQljaGlsZFBhdHRlcm4uc2V0U2VhcmNoTmFtZShjb21wb25lbnRQYXR0ZXJuLmdldE5hbWUoKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCSAgICAgCQkJcGF0dGVybnMuYWRkKGNoaWxkUGF0dGVybik7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZihJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKS5nZXROYW1lc3BhY2UoKSkpewotCQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCQlpZih4c2RQYXJ0aWNpcGFudCBpbnN0YW5jZW9mIFhNTFNlYXJjaFBhcnRpY2lwYW50KXsKLQkJCQkJQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgeHNkQ29udHJpYnV0b3IgPSAoKFhNTFNlYXJjaFBhcnRpY2lwYW50KXhzZFBhcnRpY2lwYW50KS5nZXRTZWFyY2hDb250cmlidXRvcigpOwotCQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0geHNkQ29udHJpYnV0b3IuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJCQlpZihjaGlsZFBhdHRlcm4gIT0gbnVsbCl7Ci0JCQkJCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCQkJICAgICAJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uYWRkQ2hpbGRyZW4odGhpcywgKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQllbHNlIGlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXsKLQkJCVhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXBhdHRlcm47Ci0JCQlYTUxTZWFyY2hQYXR0ZXJuW10gY2hpbGRQYXR0ZXJucyA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0UmVmZXJlbmNlc1BhdHRlcm5zKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGNoaWxkUGF0dGVybnNbaV07Ci0JCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkKLQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCX0KLQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCWlmKHhzZFBhcnRpY2lwYW50IGluc3RhbmNlb2YgWE1MU2VhcmNoUGFydGljaXBhbnQpewotCQkJCUNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yIHhzZENvbnRyaWJ1dG9yID0gKChYTUxTZWFyY2hQYXJ0aWNpcGFudCl4c2RQYXJ0aWNpcGFudCkuZ2V0U2VhcmNoQ29udHJpYnV0b3IoKTsKLQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJY2hpbGRQYXR0ZXJucyA9IHhzZENvbnRyaWJ1dG9yLmdldFJlZmVyZW5jZXNQYXR0ZXJucyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0gY2hpbGRQYXR0ZXJuc1tpXTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lKGNvbXBvbmVudFBhdHRlcm4uZ2V0TmFtZSgpLmdldExvY2FsTmFtZSgpKTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkJCi0JCQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uYWRkQ2hpbGRyZW4odGhpcywgKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQkKLQl9Ci0KLSAgCi0gIAotCQotCQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MWM3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExGaW5kUmVmZXJlbmNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3Jrc3BhY2VTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLklTZWxlY3Rpb25NYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guWFNEU2VhcmNoUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9ucy5GaW5kQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotCXByaXZhdGUgV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudDsKLQlwcml2YXRlIElGaWxlIGZpbGU7Ci0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lW10gbmFtZXM7Ci0KLSAgcHVibGljIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbihJRWRpdG9yUGFydCBlZGl0b3IpCi0gIHsKLSAgICBzdXBlcihlZGl0b3IpOwotICAgIGluaXQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXQoKSB7Ci0JY29tcG9uZW50ID0gZ2V0V1NETE5hbWVkQ29tcG9uZW50KCk7Ci0JZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JbmFtZXMgPSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShjb21wb25lbnQpOwotCWlmIChmaWxlID09IG51bGwgfHwgY29tcG9uZW50ID09IG51bGwgfHwgbmFtZXMgPT0gbnVsbCkKLQkgIHNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EZWZpbml0aW9uSWQoU3RyaW5nIHN0cmluZykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFRvIGJlIHVzZWQgYnkgc3ViY2xhc3MgaW4gaXRzIHJ1bigpIFJldHVybnMgdGhlIGZpbGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBvZgotICAgKiBhIGNvbXBvbmVudCAoZnJvbSB0aGUgdXNlcikgb2NjdXJzIGllLiBSZXR1cm5zIHRoZSBmaWxlIHRoYXQgdGhlIHVzZXIgaXMKLSAgICogY3VycmVudGx5IHdvcmtpbmcgb24uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBJRmlsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB3b3JraW5nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSUZpbGUgZ2V0Q3VycmVudEZpbGUoKQotICB7Ci0gICAgaWYgKGVkaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQ7Ci0gICAgICAgIHJldHVybiBmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUbyBiZSB1c2VkIGJ5IHN1YmNsYXNzIGluIGl0cyBydW4oKS4uIERldGVybWluZXMgdGhlIG1ldGFOYW1lIG9mIHRoZSBXU0RMCi0gICAqIGNvbXBvbmVudCBnaXZlbiB0byB0aGlzIG1ldGhvZC4KLSAgICogCi0gICAqIEBwYXJhbSBjb21wb25lbnQKLSAgICogICAgICAgICAgVGhlIGNvbXBvbmVudCBvZiB3aGljaCB3ZSB3YW50IHRvIGRldGVybWluZSB0aGUgbmFtZQotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGZpcnN0IG9uZSBpcyBmb3IgTWV0YU5hbWUvVHlwZSwgc2Vjb25kIGZvciBFbGVtZW50UXVhbGlmaWVkTmFtZQotICAgKi8KLSAgcHJvdGVjdGVkIFF1YWxpZmllZE5hbWVbXSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShXU0RMQmFzZUFkYXB0ZXIgY29tcG9uZW50KQotICB7Ci0gICAgUXVhbGlmaWVkTmFtZSBuYW1lc1tdID0gbnVsbDsKLSAgICBRTmFtZSBxTmFtZTsKLQlpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExTWVzc2FnZSApCi0gICAgewotCQluYW1lcyA9IG5ldyBRdWFsaWZpZWROYW1lWzJdOwotICAgIAluYW1lc1swXSA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FOwotICAgIAlxTmFtZSA9ICgoTWVzc2FnZSkgY29tcG9uZW50LmdldFRhcmdldCgpKS5nZXRRTmFtZSgpOwotICAgIAluYW1lc1sxXSA9IG5ldyBRdWFsaWZpZWROYW1lKHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRTsKLSAgICAJcU5hbWUgPSAoKFBvcnRUeXBlKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExQmluZGluZykKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUU7Ci0gICAgCXFOYW1lID0gKChCaW5kaW5nKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIGdldFdTRExOYW1lZENvbXBvbmVudCgpCi0gIHsKLSAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgewotICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gcHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChtYXBwZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbiA9IG1hcHBlci5tYXBTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICAgICAgT2JqZWN0IG8gPSBzLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICAgIGlmIChvICE9IG51bGwgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFdTRExCYXNlQWRhcHRlcikgbzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gVGhlIGV4cGVjdGVkIGNvbXBvbmVudCB3ZSBnZXQgZnJvbSB0aGUgZWRpdG9yIGRvZXMgbm90IG1lZXQKLSAgICAvLyBvdXIgZXhwZWN0YXRpb24KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgU2VhcmNoU2NvcGUgc2NvcGUgPSBuZXcgV29ya3NwYWNlU2VhcmNoU2NvcGUoKTsKLSAgICAgIFN0cmluZyBzY29wZURlc2NyaXB0aW9uID0gIldvcmtzcGFjZSI7Ci0gICAgICBYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0gICAgCQkgIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0gICAgICBOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLSAgICAgIE5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4NDBmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuUHJvamVjdFNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luUHJvamVjdEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikKLQl7Ci0JCXN1cGVyKGVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCVN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudCA9IGdldFdTRExOYW1lZENvbXBvbmVudCgpOwotCQlJRmlsZSBmaWxlID0gZ2V0Q3VycmVudEZpbGUoKTsKLQkJUXVhbGlmaWVkTmFtZVtdIG5hbWVzID0gZGV0ZXJtaW5lTWV0YUFuZFF1YWxpZmllZE5hbWUoY29tcG9uZW50KTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBjb21wb25lbnQgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotCQl7Ci0JCQlJUGF0aCBmdWxsUGF0aCA9IGZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJCVByb2plY3RTZWFyY2hTY29wZSBzY29wZSA9IG5ldyBQcm9qZWN0U2VhcmNoU2NvcGUoZnVsbFBhdGgpOwotCQkJU3RyaW5nIHNjb3BlRGVzY3JpcHRpb24gPSAiUHJvamVjdCI7Ci0JCQlYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0JCQkJCW5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0JCQlOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLQkJCU5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5M2Q3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnNlYXJjaC51aS5OZXdTZWFyY2hVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2luZ1NldDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3JraW5nU2V0U2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQkKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlzdXBlcihlZGl0b3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKXsKLQkJSVdvcmtpbmdTZXRbXSB3b3JraW5nU2V0cyA9IHF1ZXJ5V29ya2luZ1NldHMoKTsKLQkJaWYgKCB3b3JraW5nU2V0cyA9PSBudWxsIHx8IHdvcmtpbmdTZXRzLmxlbmd0aCA9PSAwKQotCQkJLy8gVGhlIHVzZXIgY2hvb3NlcyBub3RoaW5nLCBubyBwb2ludCB0byBjb250aW51ZS4KLQkJCXJldHVybjsKLQkJU3RyaW5nIHBhdHRlcm4gPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCVdTRExCYXNlQWRhcHRlciBjb21wb25lbnQgPSBnZXRXU0RMTmFtZWRDb21wb25lbnQoKTsKLQkJSUZpbGUgZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JCVF1YWxpZmllZE5hbWVbXSBuYW1lcyA9IGRldGVybWluZU1ldGFBbmRRdWFsaWZpZWROYW1lKGNvbXBvbmVudCk7Ci0JCWlmICggZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsKXsKLQkJCS8vIENyZWF0ZSBhIHNjb3BlIGZyb20gdGhlIHNlbGVjdGVkIHdvcmtpbmcgc2V0cwotCQkJV29ya2luZ1NldFNlYXJjaFNjb3BlIHNjb3BlID0gbmV3IFdvcmtpbmdTZXRTZWFyY2hTY29wZSgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JraW5nU2V0cy5sZW5ndGg7IGkrKyl7Ci0JCQkJSUFkYXB0YWJsZVtdIGVsZW1lbnRzID0gd29ya2luZ1NldHNbaV0uZ2V0RWxlbWVudHMoKTsKLQkJCQlzY29wZS5hZGRBV29ya2luZ1NldFRvU2NvcGUoZWxlbWVudHMpOwotCQkJfQotCi0JCQlTdHJpbmcgc2NvcGVEZXNjcmlwdGlvbiA9ICJXb3JraW5nIFNldCI7ICAgIAotCQkJWFNEU2VhcmNoUXVlcnkgc2VhcmNoUXVlcnkgPSAKLQkJCQluZXcgWFNEU2VhcmNoUXVlcnkocGF0dGVybiwgZmlsZSwgbmFtZXNbMV0sIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7ICAgIAotCQkJTmV3U2VhcmNoVUkuYWN0aXZhdGVTZWFyY2hSZXN1bHRWaWV3KCk7Ci0JCQlOZXdTZWFyY2hVSS5ydW5RdWVyeUluQmFja2dyb3VuZChzZWFyY2hRdWVyeSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyBhIGRpYWxvZyBhc2tpbmcgdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSB3b3JraW5nIFNldHMgaGUgd2FudHMKLQkgKiB0byBkbyB0aGUgc2VhcmNoIG9uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtpbmdTZXRbXSBxdWVyeVdvcmtpbmdTZXRzKCl7Ci0JCVNoZWxsIHNoZWxsPSBYU0RFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKTsKLQkJaWYgKHNoZWxsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0KLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0V29ya2luZ1NldE1hbmFnZXIoKS5jcmVhdGVXb3JraW5nU2V0U2VsZWN0aW9uRGlhbG9nKHNoZWxsLCB0cnVlKTsKLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlJV29ya2luZ1NldFtdIHdvcmtpbmdTZXRzPSBkaWFsb2cuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlpZiAod29ya2luZ1NldHMubGVuZ3RoID4gMCkKLQkJCQlyZXR1cm4gd29ya2luZ1NldHM7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMUmVmZXJlbmNlc1NlYXJjaEdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZjZmZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLlNlYXJjaE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuUmVmZXJlbmNlc1NlYXJjaEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCBleHRlbmRzIFJlZmVyZW5jZXNTZWFyY2hHcm91cCAgewotICAgIC8qKgotICAgICAqIE5vdGU6IFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBDbGllbnRzIHNob3VsZCBub3QgY2FsbCB0aGlzIGNvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBlZGl0b3IKLSAgICAgKi8KLSAgICBwdWJsaWMgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChJRWRpdG9yUGFydCBlZGl0b3IpIHsKLSAgICAJc3VwZXIoZWRpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLS8vICAgICAgZkdyb3VwSWQ9IElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLkdST1VQX0ZJTkQ7Ci0gICAgCQotICAgIAlmRmluZFJlZmVyZW5jZXNBY3Rpb249IG5ldyBXU0RMRmluZFJlZmVyZW5jZXNBY3Rpb24oZkVkaXRvcik7Ci0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0FjdGlvbi5zZXRUZXh0KFNlYXJjaE1lc3NhZ2VzLlNlYXJjaF9GaW5kRGVjbGFyYXRpb25BY3Rpb25fbGFiZWwpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCJTRUFSQ0hfUkVGRVJFTkNFU19JTl9XT1JLU1BBQ0UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3Jrc3BhY2UiLCBmRmluZFJlZmVyZW5jZXNBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uPSBuZXcgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKGZFZGl0b3IpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uc2V0VGV4dChTZWFyY2hNZXNzYWdlcy5TZWFyY2hfRmluZERlY2xhcmF0aW9uc0luUHJvamVjdEFjdGlvbl9sYWJlbCk7ICAgICAgICAKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLnNldEFjdGlvbkRlZmluaXRpb25JZCgiU0VBUkNIX1JFRkVSRU5DRVNfSU5fUFJPSkVDVCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vZkVkaXRvci5zZXRBY3Rpb24oIlNlYXJjaFJlZmVyZW5jZXNJblByb2plY3QiLCBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbj0gbmV3IFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbihmRWRpdG9yKTsKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLnNldFRleHQoU2VhcmNoTWVzc2FnZXMuU2VhcmNoX0ZpbmREZWNsYXJhdGlvbnNJbldvcmtpbmdTZXRBY3Rpb25fbGFiZWwpOyAgICAgICAgIAotICAgICAgICBmRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCIuU0VBUkNIX1JFRkVSRU5DRVNfSU5fV09SS0lOR19TRVQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3JraW5nU2V0IiwgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmYzIwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5hY3Rpb25zLkJhc2VHcm91cEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuWFNEU2VhcmNoR3JvdXBTdWJNZW51OwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQmFzZUdyb3VwQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudShNZW51IG1lbnUpIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAoZlNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdvcmtiZW5jaFBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotCQkgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd29ya2JlbmNoUGFydC5nZXRTaXRlKCk7Ci0JCQlpZiAoc2l0ZSA9PSBudWxsKQotCQkJICByZXR1cm47Ci0JCi0JCSAgSUVkaXRvclBhcnQgZWRpdG9yID0gc2l0ZS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgaWYgKCBlZGl0b3IgIT0gbnVsbCApewotICAgICAgICAgICAgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCByZWZlcmVuY2VzR3JvdXAgPSBuZXcgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChlZGl0b3IpOwotICAgICAgICAgICAgWFNEU2VhcmNoR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgWFNEU2VhcmNoR3JvdXBTdWJNZW51KHJlZmVyZW5jZXNHcm91cCk7Ci0gICAgICAgICAgICBzdWJNZW51LmZpbGwobWVudSwgLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzFjMjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuY3VzdG9taXphdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfU1BFQ0lGWV9QQVJUU19ESUFMT0dfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfUEFSVFNfQlVUVE9OOwotCi0Jc3RhdGljIHsKLQkJLy8gbG9hZCBtZXNzYWdlIHZhbHVlcyBmcm9tIGJ1bmRsZSBmaWxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCQkvLyBjYW5ub3QgY3JlYXRlIG5ldyBpbnN0YW5jZQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvU09BUE5vZGVFZGl0b3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY2OTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLkRpYWxvZ05vZGVFZGl0b3JDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5jdXN0b20uTm9kZUVkaXRvckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlRWRpdG9yUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgYSBOb2RlRWRpdG9yUHJvdmlkZXIgY2FuIHV0aWxpemUgdGhlIFdTREwgbW9kZWwgaWYgcmVxdWlyZWQKLSAqIChhbmQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIERPTSBtb2RlbCkuICBJdCdzIGhvcGUgdGhhdCBwb3RlbnRpYWwgYWRvcHRlcnMgY2FuIHByb3ZpZGUgZmVlZGJhY2sgYW5kIG9wZW4KLSAqIGJ1Z3Mgd2hlcmUgdGhleSBmaW5kIHN1cHBvcnQgaXMgbGFja2luZyBvciBpbmNvbnZlbmllbnQuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUE5vZGVFZGl0b3JQcm92aWRlciBleHRlbmRzIE5vZGVFZGl0b3JQcm92aWRlcgotewotICBwdWJsaWMgTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24gZ2V0Tm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBub2RlTmFtZSkKLSAgewotICAgIC8vIFRPRE8gKGNzKSB0aGlzIGV4dGVuc2lvbiBpcyBvbmx5IGRlc2lnbmVkIHRvIHdvcmsgd2hlbiB1c2VkIHZpYSB0aGUgV1NETCBFZGl0b3IgY29udGV4dC4KLSAgICAvLyBSZXVzZSBmcm9tIG90aGVyIGNvbnRleHQgaXMgcG9zc2libGUgdG9vIGlmIHRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGFwcHJvcHJpYXRlICdnZXRBZGFwdGVyJyBiZWhhdmlvdXIuCi0gICAgLy8gV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgYW5kIGdldCBtb3JlIGZlZWRiYWNrIGZyb20gYWRvcHRlcnMgdG8gc2VlIGlmIGRpZmZlcmVudCBhcHByb2FjaCBpcyByZXF1aXJlZCAKLSAgICAvLyBpbiBvcmRlciB0byBvYnRhaW4gYSBXU0RMIG1vZGVsLgotLy8gICAgLwotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgIGZpbmFsIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVkaXRvci5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpZiAocGFyZW50TmFtZS5lcXVhbHMoImJvZHkiKSAmJiBub2RlTmFtZS5lcXVhbHMoInBhcnRzIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgewotICAgICAgICAvLyBnZWUuLi4gdGhpcyBjYXNlIHNvdW5kcyBzb3J0YSBtb3JiaWQgZWg/Ci0gICAgICAgIC8vCi0gICAgICAgIHJldHVybiBuZXcgRGlhbG9nTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oKQotICAgICAgICB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZURpYWxvZygpCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICAgIHsgICAgICAgICAgIAotICAgICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClnZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAvLyBUT0RPIChjcykgSSB0aGluayB3ZSBzaG91bGQgcHVzaCB0aGlzIGZ1bmN0aW9uIGRvd24gdG8gdGhlIFdTREwgbW9kZWwgKGFsYSBYU0QgbW9kZWwpCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgIE9iamVjdCBvID0gbm9kZUFzc29jaWF0aW9uTWFuYWdlci5nZXRNb2RlbE9iamVjdEZvck5vZGUoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBkaWFsb2cgPSBuZXcgU09BUFNlbGVjdFBhcnRzRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCksIGRlZmluaXRpb24sIChTT0FQQm9keSlvKTsKLSAgICAgICAgICAgICAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dChNZXNzYWdlcy5VSV9TUEVDSUZZX1BBUlRTX0RJQUxPR19USVRMRSk7ICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgaW50IHJjID0gZGlhbG9nLm9wZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gRGlhbG9nLk9LKQotICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICBQYXJ0W10gcGFydHMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRQYXJ0cygpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSBwYXJ0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gcGFydC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIHRvIHByb3ZpZGUgJ2NvbW1hbmQnIHN1cHBvcnQgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHVuZG8gcHJvcGVybHkKLSAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInBhcnRzIiwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgcHVibGljIFN0cmluZyBnZXRCdXRvblRleHQoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5VSV9QQVJUU19CVVRUT047IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWRlMGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQU2VsZWN0UGFydHNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNoZWNrYm94VHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLQotcHVibGljIGNsYXNzIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBleHRlbmRzIERpYWxvZwoteyAgCi0gIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgU09BUEJvZHkgYm9keTsKLSAgQ2hlY2tib3hUcmVlVmlld2VyIGNoZWNrTGlzdDsKLSAgUGFydFtdIHNlbGVjdGVkUGFydHMgPSB7fTsKLSAgCi0gIHB1YmxpYyBTT0FQU2VsZWN0UGFydHNEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgU09BUEJvZHkgYm9keSkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsgIAotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBjaGVja0xpc3QgPSBuZXcgQ2hlY2tib3hUcmVlVmlld2VyKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ3JpZERhdGEuaGVpZ2h0SGludCA9IDEwMDsKLSAgICBncmlkRGF0YS53aWR0aEhpbnQgPSAyMDA7Ci0gICAgY2hlY2tMaXN0LmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLSAgICBjaGVja0xpc3Quc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJbnRlcm5hbFRyZWVDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgY2hlY2tMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEludGVybmFsTGFiZWxQcm92aWRlcigpKTsKLSAgICBjaGVja0xpc3Quc2V0SW5wdXQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgTGlzdCBsaXN0ID0gYm9keS5nZXRQYXJ0cygpOwotICAgIGNoZWNrTGlzdC5zZXRDaGVja2VkRWxlbWVudHMobGlzdC50b0FycmF5KCkpOyAgICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLSAgewotICAgIE9iamVjdFtdIGNoZWNrZWQgPSBjaGVja0xpc3QuZ2V0Q2hlY2tlZEVsZW1lbnRzKCk7Ci0gICAgc2VsZWN0ZWRQYXJ0cyA9IG5ldyBQYXJ0W2NoZWNrZWQubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrZWQubGVuZ3RoOyBpKyspCi0gICAgeyAgCi0gICAgICBzZWxlY3RlZFBhcnRzW2ldID0gKFBhcnQpY2hlY2tlZFtpXTsKLSAgICB9IAotICAgIHN1cGVyLm9rUHJlc3NlZCgpOyAgICAKLSAgfQotICAKLSAKLSAgY2xhc3MgSW50ZXJuYWxMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWVsZW1lbnQ7Ci0gICAgICByZXR1cm4gcGFydC5nZXROYW1lKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wYXJ0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgY2xhc3MgSW50ZXJuYWxUcmVlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIKLSAgeyAgCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgeyAgICAKLSAgICAgIEVPYmplY3QgY29udGFpbmVyID0gYm9keS5lQ29udGFpbmVyKCk7Ci0gICAgICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZUlucHV0KChCaW5kaW5nSW5wdXQpY29udGFpbmVyKTsgCi0gICAgICB9IAotICAgICAgZWxzZSBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU91dHB1dCgoQmluZGluZ091dHB1dCljb250YWluZXIpOyAgICAgICAgIAotICAgICAgfSAgCi0gICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZSAhPSBudWxsICYmIG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLnRvQXJyYXkoKTsKLSAgICAgIH0gIAotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QudG9BcnJheSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVC50b0FycmF5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0gICAgewotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBQYXJ0W10gZ2V0U2VsZWN0ZWRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzZmE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVVJX1NQRUNJRllfUEFSVFNfRElBTE9HX1RJVExFPVNwZWNpZnkgUGFydHMKLVVJX1BBUlRTX0JVVFRPTj0uLi4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODdhZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkgZXhjbHVkaW5nPSJ3c2RsdmFsaWRhdGV1aS98d3NkbHZhbGlkYXRlLyIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9kZWxlZ2F0ZXMvRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDMyZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZS5qYXIKLXdzZGx2YWxpZGF0ZXVpLmphcgotd3NkbHZhbGlkYXRlc3JjLnppcAotd3NkbHZhbGlkYXRldWlzcmMuemlwCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTBjMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZmNhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1Y2VjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2NlZGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS41MDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdGVXU0RMUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZzt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNi41LDIuMC4wKSI7cmVzb2x1dGlvbjo9b3B0aW9uYWwsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjUuMCwxLjYuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMy4wLjApIjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGJkMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZXhzZC8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL2V4dHZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZThkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9ImV4dHZhbGlkYXRvciIgbmFtZT0iV1NETCBFeHRlbnNpb24gVmFsaWRhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIGNvbnRyaWJ1dGUgYSB2YWxpZGF0b3IgdGhhdCBwcm92aWRlcyBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYyBmb3IgV1NETCAxLjEgZG9jdW1lbnRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJleHR2YWxpZGF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHR2YWxpZGF0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvciIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgV1NETCBuYW1lc3BhY2UgZm9yIHdoaWNoIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBydW4uIEN1cnJlbnRseSB0aGUgb25seSBhY2NlcHRlZCB2YWx1ZSBpcyBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFdTREwgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgaWQ9JnF1b3Q7d3NkbFdTSVZhbGlkYXRvciZxdW90OwotICAgICAgICAgbmFtZT0mcXVvdDtXU0RMIFdTLUkgVmFsaWRhdG9yJnF1b3Q7Ci0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmV4dHZhbGlkYXRvciZxdW90OyZndDsKLSAgICAgICZsdDtleHR2YWxpZGF0b3IKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsLldTRExWYWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7L2V4dHZhbGlkYXRvciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbC5XU0RMVmFsaWRhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyBXUy1JIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8uCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL3dzZGwxMXZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjYwZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9IndzZGwxMXZhbGlkYXRvciIgbmFtZT0iV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gY29udHJpYnV0ZSBhIHZhbGlkYXRvciBmb3IgYSBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gV1NETCAxLjEgdmFsaWRhdGlvbi4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idmFsaWRhdG9yIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idmFsaWRhdG9yIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIHZhbGlkYXRvciB3aWxsIHZhbGlkYXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsMTF2YWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7dmFsaWRhdG9yCi0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3ImcXVvdDsKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvJnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtjb2RlJmd0Owotb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsZGlhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgbmFtZXNwYWNlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8uCi0mbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWUuTUlNRVZhbGRpYXRvcgotJmx0Oy9jb2RlJmd0OwotQ29udHJpYnV0ZXMgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIG5hbWVzcGFjZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvLgotJmx0O2NvZGUmZ3Q7Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwLlNPQVBWYWxkaWF0b3IKLSZsdDsvY29kZSZndDsKLUNvbnRyaWJ1dGVzIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkyZjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NWEzOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24KLSEtLSBUb29sIE5hbWUKLQotX1BMVUdJTl9OQU1FICAgICAgID0gV1NETCBWYWxpZGF0b3IKLV9QUk9WSURFUl9OQU1FICAgICA9IEVjbGlwc2Uub3JnCi0KLV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFID0gV1NETDRKLWJhc2VkIFdTREwgVmFsaWRhdG9yCi1fVUlfV1NETF9WQUxJREFUT1IgPSBXU0RMIFZhbGlkYXRvcgotX1VJX1dTRExfVkFMSURBVE9SX01BUktFUiA9IFdTREwgUHJvYmxlbQotCi0hLS0gRXh0ZW5zaW9uIHBvaW50cwotX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FICAgPSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IKLV9XU0RMMTFfVkFMSURBVE9SX05BTUUgPSBXU0RMIDEuMSBWYWxpZGF0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTExNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZXh0dmFsaWRhdG9yIiBuYW1lPSIlX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2QvZXh0dmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NkbDExdmFsaWRhdG9yIiBuYW1lPSIlV1NETDExX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotCTxleHRlbnNpb24KLSAgICAJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvckRlbGVnYXRlcyI+Ci0gICAgICAgIDxkZWxlZ2F0ZQotICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciIKLSAgICAgICAgICAgICAgbmFtZT0iJV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFIgotICAgICAgICAgICAgICB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotICAgICA8L2V4dGVuc2lvbj4JCi0KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLSBBbiBleHRlbnNpb24gZm9yIGFkZGluZyB0aGUgV1NETCB2YWxpZGF0b3IgdG8gdGhlICAgICAgLS0+Ci0gICA8IS0tIHZhbGlkYXRpb24gZnJhbWV3b3JrLiAJCQkJCQkgICAgICAgICAgIC0tPgkJCQkJCQkJCQkgICAtLT4KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfVkFMSURBVE9SIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvciI+Ci0gICAgICA8dmFsaWRhdG9yPgotICAgICAgICAgPGZpbHRlcgotICAgICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiCi0gICAgICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiPgotICAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgICA8aGVscGVyCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5IZWxwZXIiPgotICAgICAgICAgPC9oZWxwZXI+Ci0gICAgICAgICA8cnVuCi0gICAgICAgICAgICAgICBhc3luYz0idHJ1ZSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICAgICBlbmFibGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgZnVsbEJ1aWxkPSJ0cnVlIgotICAgICAgICAgICAgICAgaW5jcmVtZW50YWw9InRydWUiPgotICAgICAgICAgPC9ydW4+Ci0gICAgICAgICA8bWFya2VySWQgbWFya2VySWRWYWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIi8+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgLS0+Ci0gICAKLSAgIDxleHRlbnNpb24gaWQ9IndzZGwiIG5hbWU9IiVfVUlfV1NETF9WQUxJREFUT1IiIHBvaW50PSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0b3JWMiI+Ci0gICAgICA8dmFsaWRhdG9yCi0gICAgICAgICAgICBidWlsZD0idHJ1ZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICBtYW51YWw9InRydWUiCi0gICAgICAgICAgICBzb3VyY2VpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCIKLSAgICAgICAgICAgIHZlcnNpb249IjIiCi0gICAgICAgICAgICBtYXJrZXJJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIj4KLSAgICAgICAgIDxpbmNsdWRlPgotICAgICAgICAgICAgPHJ1bGVzPgotICAgICAgICAgICAgICAgPGZpbGVleHQgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiIGV4dD0id3NkbCI+PC9maWxlZXh0PgotICAgICAgICAgICAgPC9ydWxlcz4KLSAgICAgICAgIDwvaW5jbHVkZT4KLSAgICAgIDwvdmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ2YWxpZGF0aW9uTWFya2VyIgotICAgICAgICAgbmFtZT0iJV9VSV9XU0RMX1ZBTElEQVRPUl9NQVJLRVIiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFya2VycyI+Ci0gICAgICA8c3VwZXIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJvYmxlbW1hcmtlciIvPgotICAgICAgPHBlcnNpc3RlbnQgdmFsdWU9InRydWUiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdjYTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSBob2xkcyBhIHZhbGlkYXRvcidzIGluZm9ybWF0aW9uIGFuZCBjYW4gaW5zdGFudGlhdGUgaXQKLSAqIHdoZW4gcmVxdWVzdGVkIHRvLgotICovCi1wdWJsaWMgY2xhc3MgQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lKQotICB7Ci0gICAgdGhpcy52YWxpZGF0b3JDbGFzc25hbWUgPSB2YWxpZGF0b3JDbGFzc25hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYSBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gY2xhc3NMb2FkZXIgVGhlIGNsYXNzIGxvYWRlciB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKQotICB7Ci0gICAgdGhpcyh2YWxpZGF0b3JDbGFzc25hbWUpOwotICAgIHRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETFZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gICAgaWYoY2xhc3NMb2FkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPQotICAgICAgY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyh2YWxpZGF0b3JDbGFzc25hbWUpIDogQ2xhc3MuZm9yTmFtZSh2YWxpZGF0b3JDbGFzc25hbWUpOwotCi0gICAgICB2YWxpZGF0b3IgPSAoSVdTRExWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goVGhyb3dhYmxlIHQpCi0gICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yRGVsZWdhdGUjZ2V0VmFsaWRhdG9yTmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRvck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjYzZjJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0vKioKLSAqIFNldCBjb25zdGFudHMgdGhhdCB0aGUgdmFsaWRhdG9yIG1ha2VzIHVzZSBvZi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgcHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9WQUxJREFUT1JfUFJPUEVSVElFU19GSUxFID0gInZhbGlkYXRld3NkbCI7Ci0KLSAgLyoqCi0gICAqIFRoZSBTT0FQIDEuMSBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19TT0FQMTEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBIVFRQIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX0hUVFAgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBNSU1FIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX01JTUUgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7Ci0gIAotICAvKioKLSAgICogVGhlIFdTREwgc2NoZW1hIGNhY2hlIGF0dHJpYnV0ZSBhbGxvd3MgYW4gWE1MR3JhbW1hclBvb2wgb2JqZWN0IHRvIGJlIHNldCBmb3IgdXNlIGluIAotICAgKiBpbmxpbmUgc2NoZW1hIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBYTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3NkbC9zY2hlbWFjYWNoZSI7Ci0gIAotICAvKioKLSAgICogVGhlIFdTREwgc2NoZW1hIGNhY2hlIGF0dHJpYnV0ZSBhbGxvd3MgYW4gWE1MR3JhbW1hclBvb2wgb2JqZWN0IHRvIGJlIHNldCBmb3IgdXNlIGluIAotICAgKiBYTUwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhNTF9DQUNIRV9BVFRSSUJVVEUgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c2RsL3htbGNhY2hlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzMGE4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ29udHJvbGxlclZhbGlkYXRpb25JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgdGhlIHZhbGlkYXRpb24gaW5mbyB0aGF0IGFsbG93cyBmb3Igc3RhcnRpbmcgYW5kCi0gKiBjb21wbGV0aW5nIFdTREwgYW5kIFdTLUkgdmFsaWRhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gZXh0ZW5kcyBJVmFsaWRhdGlvbkluZm8KLXsKLSAgCi0gIC8qKgotICAgKiBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gY29tcGxldGUgV1NETCB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGVXU0RMVmFsaWRhdGlvbigpOwotICAKLS8vICAvKioKLS8vICAgKiBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gY29tcGxldGUgV1MtSSBXU0RMIHZhbGlkYXRpb24uCi0vLyAgICovCi0vLyAgcHVibGljIHZvaWQgY29tcGxldGVXU0lWYWxpZGF0aW9uKCk7Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjk0ZTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotCi0vKioKLSAqIEFuIGludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBtZWFudCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElWYWxpZGF0aW9uSW5mbyBleHRlbmRzIElWYWxpZGF0aW9uUmVwb3J0Ci17Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgZmlsZS4gKFVzZXMgdGhlIFVSSSBmcm9tIHRoaXMgdmFsaWRhdGlvbiBpbmZvIG9iamVjdC4pCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pOwotICAKLSAgLyoqCi0gICAqIEFkZCBhbiBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgZm9yIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEFkZCBhIHdhcm5pbmcgbWVzc2FnZSBmb3IgdGhpcyBmaWxlLiAoVXNlcyB0aGUgVVJJIGZyb20gdGhpcyB2YWxpZGF0aW9uIGluZm8gb2JqZWN0LikKLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGZvciB0aGUgd2FybmluZy4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgd2FybmluZyBpbiB0aGUgZmlsZS4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBlcnJvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciBpbiB1c2UgZm9yIHRoaXMgdmFsaWRhdGlvbi4gVGhlIFVSSSByZXNvbHZlcgotICAgKiByZXR1cm5lZCBpcyBhY3R1YWxseSBhIFVSSSByZXNvbHZlciBoYW5kbGVyIHRoYXQgd2lsbCAKLSAgICogaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcmVnaXN0ZXJlZCBVUkkgcmVzb2x2ZXJzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIGhhbmRsZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiBJZiB0aGUgYXR0cmlidXRlCi0gICAqIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVxdWVzdGVkLgotICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUgdmFsdWUgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgYmVlbiByZWdpc3RlcmVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmY2M0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25NZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIHZhbGlkYXRpb24gbWVzc2FnZS4gQSB2YWxpZGF0aW9uIG1lc3NhZ2UgY29udGFpbnMgaW5mb3JtYXRpb24KLSAqIGZvciB0aGUgbWVzc2FnZSwgaXRzIHNldmVyaXR5IGFuZCB3aGVyZSBpdCdzIGxvY2F0ZWQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25NZXNzYWdlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBFUlJPUl9NRVNTQUdFX01BUF9RVUFMSUZJRURfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKCJvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlIiwgImVycm9yTWVzc2FnZU1hcCIpOwotICAvKioKLSAgICogU2V2ZXJpdHkgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVZfRVJST1IgPSAwOwotICAvKioKLSAgICogU2V2ZXJpdHkgd2FybmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVl9XQVJOSU5HID0gMTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBVUkkgZm9yIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG1lc3NhZ2UgZm9yIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHNldmVyaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V2ZXJpdHkgb2YgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFNldmVyaXR5KCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBsaW5lIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGNvbHVtbiB3aGVyZSB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29sdW1uIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXROZXN0ZWRNZXNzYWdlcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3Mjk5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIFdTREwgdmFsaWRhdGlvbiByZXBvcnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25SZXBvcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhlIHJlcG9ydCByZWZlcnMgdG8uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgZm9yIHRoZSBmaWxlIHRoZSByZXBvcnQgcmVmZXJzIHRvLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIFdTREwgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETFZhbGlkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBJVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGVycm9ycywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGFyZSBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpOwotICAKLSAgcHVibGljIEhhc2hNYXAgZ2V0TmVzdGVkTWVzc2FnZXMoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lXU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5MDJlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb24uVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgYSBXU0RMIHZhbGlkYXRvci4gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBhIHRvcCBsZXZlbCB2YWxpZGF0b3IgCi0gKiBjb21wb25lbnQgc3VjaCBhcyBhIFdTREwgMS4xIHZhbGlkYXRvciwgV1NETCAxLjIgdmFsaWRhdG9yIG9yIFdTLUkgQmFzaWMgUHJvZmlsZSB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVdTRExWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAqIAotICAgKiBAcGFyYW0gZG9tTW9kZWwgQSBET00gbW9kZWwgb2YgdGhlIGZpbGUgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSB2YWxpZGF0aW9uIHRoYXQgaXMgYmVpbmcgcGVyZm9ybWVkLgotICAgKiBAdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25Db250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwZGZmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuWE1MRXJyb3JSZXBvcnRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbi5WYWxpZGF0ZVdTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5EZWZhdWx0WE1MVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuTGluZU51bWJlckRPTVBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnlwb2ludCB0byB0aGUgV1NETCBWYWxpZGF0b3IuIFRoZSBjb250cm9sbGVyIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgcmVhZGVyLCB0aGUgWE1MIGNvbmZvcm1hbmNlIGNoZWNrLCB0aGUgV1NETAotICogdmFsaWRhdGlvbiBhbmQgdGhlIFdTLUkgdmFsaWRhdGlvbiBpZiBzZWxlY3RlZC4gVGhlIGNvbnRyb2xsZXIgY29udGFpbnMgYW55Ci0gKiBlcnJvcnMgYW5kIHdhcm5pbmdzIGdlbmVyYXRlZCBhcyB3ZWxsLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbkNvbnRyb2xsZXIKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiA9ICJfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1dTRExfVkFMSURBVE9SID0gIl9FUlJPUl9OT19XU0RMX1ZBTElEQVRPUiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX1BST0JMRU1fRVhUX1ZBTElEQVRPUiA9ICJfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfRE9DVU1FTlRfTE9DQVRJT04gPSAiX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OIjsKLQotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkgdmVyOwotICBwcm90ZWN0ZWQgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VidW5kbGU7Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBVUklSZXNvbHZlciB1cmlSZXNvbHZlcjsKLQotICAvL3Byb3RlY3RlZCBTdHJpbmcgd3NkbE5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBSZXNvdXJjZUJ1bmRsZSBuZWVkcyB0byBiZSBzZXQgc28gaXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgcmVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIHJiCi0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhpcyB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbkNvbnRyb2xsZXIoUmVzb3VyY2VCdW5kbGUgcmIsIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gICAgcmVzb3VyY2VidW5kbGUgPSByYjsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmVzb3VyY2VidW5kbGUpOwotICAgIHRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLQotICAgIHZlciA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlIHdpdGggdGhlIHN0cmVhbS4gVGhpcyBtZXRob2Qgd2lsbCBydW4gdGhlIGNoZWNrIG9mIHRoZSAKLSAgICogV1NETCBkb2N1bWVudC4gVGhlIHZhbGlkYXRpb24gaXMgYnJva2VuIHVwIGludG8gdGhyZWUgc3RhZ2VzOiBYTUwgY29uZm9ybWFuY2UsCi0gICAqIFdTREwgc2VtYW50aWMsIGFuZCBwb3N0IHZhbGlkYXRpb24uCi0gICAqIAotICogQHBhcmFtIHVyaSAKLSAqIAkJCVRoZSBVUkkgb2YgdGhlIFdTREwgZG9jdW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICogQHBhcmFtIGlucHV0U3RyZWFtIAotICogCQkJVGhlIGNvbnRlbnRzIG9mIHRoZSBXU0RMIGRvY3VtZW50IHRvIGJlIHZhbGlkYXRlZC4KLSAqIEBwYXJhbSBjb25maWd1cmF0aW9uCi0gKiAJCQlUaGUgV1NETCB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCB3aGlsZSB2YWxpZGF0aW5nIHRoaXMgVVJJLgotICogQHJldHVybiBBIHZhbGlkYXRpb24gcmVwb3J0IHdpdGggdGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhlIGZpbGUuCi0gKi8KLSAgcHVibGljIElWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlKFN0cmluZyB1cmksIElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgewotICAgIAotICAgIElucHV0U3RyZWFtIHhtbFZhbGlkYXRlU3RyZWFtID0gbnVsbDsKLSAgICBJbnB1dFN0cmVhbSB3c2RsVmFsaWRhdGVTdHJlYW0gPSBudWxsOwotICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgIHsgLy9jb3B5IHRoZSBpbnB1dFN0cmVhbSBzbyB3ZSBjYW4gdXNlIGl0IG1vcmUgdGhhbiBvbmNlCi0gICAgICBTdHJpbmcgY29udGVudHMgPSBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0gICAgICB4bWxWYWxpZGF0ZVN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygpKTsKLSAgICAgIHdzZGxWYWxpZGF0ZVN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygpKTsKLSAgICB9Ci0gICAgCi0gICAgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8gPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKHVyaSwgbWVzc2FnZWdlbmVyYXRvcik7Ci0gICAgKChWYWxpZGF0aW9uSW5mb0ltcGwpdmFsSW5mbykuc2V0VVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotICAgICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbEluZm8pLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Ci0KLSAgICBpZiAodmFsaWRhdGVYTUwodmFsSW5mbywgeG1sVmFsaWRhdGVTdHJlYW0pKQotICAgIHsKLSAgICAgIERvY3VtZW50IHdzZGxkb2MgPSBnZXREb2N1bWVudCh1cmksIHdzZGxWYWxpZGF0ZVN0cmVhbSwgdmFsSW5mbyk7Ci0KLSAgICAgIGlmKCF2YWxJbmZvLmhhc0Vycm9ycygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NkbG5zID0gZ2V0V1NETE5hbWVzcGFjZSh3c2RsZG9jKTsKLSAgICAgICAgaWYod3NkbG5zICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAodmFsaWRhdGVXU0RMKHdzZGxkb2MsIHZhbEluZm8sIHdzZGxucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpb25WYWxpZGF0b3JzKHdzZGxkb2MsIHZhbEluZm8sIHdzZGxucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGZvciBYTUwgY29uZm9ybWFuY2UuCi0JICogQHBhcmFtIHZhbEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbGlkYXRpb24KLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIHRoZSBpbnB1dFN0cmVhbSB0byB2YWxpZGF0ZQotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgY29uZm9ybWFudCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVYTUwoQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgSVhNTFZhbGlkYXRvciB4bWxWYWxpZGF0b3IgPSBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldFhNTFZhbGlkYXRvcigpOwotICAgIHhtbFZhbGlkYXRvci5zZXRVUklSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0gICAgeG1sVmFsaWRhdG9yLnNldEZpbGUodmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgIGlmICh4bWxWYWxpZGF0b3IgaW5zdGFuY2VvZiBEZWZhdWx0WE1MVmFsaWRhdG9yKQotICAgIHsKLSAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0SW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl2YWxJbmZvLmdldEF0dHJpYnV0ZShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSk7Ci0gICAgICAgIGlmKGdyYW1tYXJQb29sICE9IG51bGwpCi0gICAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotICAgIH0KLSAgICAvL3htbFZhbGlkYXRvci5zZXRWYWxpZGF0aW9uSW5mbyh2YWxJbmZvKTsKLSAgICB4bWxWYWxpZGF0b3IucnVuKCk7Ci0gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHhtbCBjb25mb3JtYW5jZSBwcm9ibGVtcyBnbyBvbiB0byBjaGVjayB0aGUgd3NkbCBzdHVmZgotICAgIGlmICh4bWxWYWxpZGF0b3IuaGFzRXJyb3JzKCkpCi0gICAgewotICAgICAgLy8gdGVtcCBoYW5kbGluZyBvZiBYTUwgZXJyb3JzIHVudGlsIHZhbGlkYXRvciBpcyB1cGRhdGVkLgotICAgICAgTGlzdCBlcnJvcnMgPSB4bWxWYWxpZGF0b3IuZ2V0RXJyb3JzKCk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnNJdGVyID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElWYWxpZGF0aW9uTWVzc2FnZSB2YWxNZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlKWVycm9yc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZhbE1lcyBpbnN0YW5jZW9mIFZhbGlkYXRpb25NZXNzYWdlSW1wbCAmJiB2YWxJbmZvIGluc3RhbmNlb2YgVmFsaWRhdGlvbkluZm9JbXBsKQotICAgICAgICB7ICAgU3RyaW5nIGVycm9yS2V5ID0gKChWYWxpZGF0aW9uTWVzc2FnZUltcGwpdmFsTWVzKS5nZXRFcnJvcktleSgpOwotICAgICAgICAgICAgT2JqZWN0W10gbWVzc2FnZUFyZ3MgPSAoKFZhbGlkYXRpb25NZXNzYWdlSW1wbCl2YWxNZXMpLmdldE1lc3NhZ2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbEluZm8pLmFkZEVycm9yKHZhbE1lcy5nZXRNZXNzYWdlKCksIHZhbE1lcy5nZXRMaW5lKCksIHZhbE1lcy5nZXRDb2x1bW4oKSwgdmFsTWVzLmdldFVSSSgpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcih2YWxNZXMuZ2V0TWVzc2FnZSgpLCB2YWxNZXMuZ2V0TGluZSgpLCB2YWxNZXMuZ2V0Q29sdW1uKCksIHZhbE1lcy5nZXRVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy93c2RsTmFtZXNwYWNlID0geG1sVmFsaWRhdG9yLmdldFdTRExOYW1lc3BhY2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGZvciBYTUwgY29uZm9ybWFuY2UuCi0JICogQHBhcmFtIHZhbEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbGlkYXRpb24KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIGNvbmZvcm1hbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlWE1MKENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7IHJldHVybiB2YWxpZGF0ZVhNTCh2YWxJbmZvLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlLiBTZXQgdGhlIGVycm9ycyBhbmQgd2FybmluZyBhcHByb3ByaWF0ZWx5LgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxkb2MgQSBXM0MgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTmFtZXNwYWNlIFRoZSBXU0RMIG5hbWVzcGFjZSB0byB2YWxpZGF0ZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVdTREwoRG9jdW1lbnQgd3NkbGRvYywgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIFN0cmluZyB3c2RsTmFtZXNwYWNlKQotICB7Ci0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlW10gd3NkbFZhbHMgPSB2ZXIucXVlcnlWYWxpZGF0b3JSZWdpc3RyeSh3c2RsTmFtZXNwYWNlLCBWYWxpZGF0b3JSZWdpc3RyeS5XU0RMX1ZBTElEQVRPUik7Ci0gICAgaWYgKHdzZGxWYWxzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsVmFscy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIHdzZGx2YWxkZWwgPSB3c2RsVmFsc1tpXTsKLSAgICAgICAgSVdTRExWYWxpZGF0b3Igd3NkbFZhbCA9IHdzZGx2YWxkZWwuZ2V0VmFsaWRhdG9yKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGwgdmFsaWRhdG9yIGlzbid0IG51bGwsIHZhbGlkYXRlLgotICAgICAgICBpZiAod3NkbFZhbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbFZhbC52YWxpZGF0ZSh3c2RsZG9jLCB2YWxJbmZvKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFZhbGlkYXRlV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX1BST0JMRU1fV1NETF9WQUxJREFUT1IsIHdzZGxOYW1lc3BhY2UpLCAxLCAxLCB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSB2YWxpZGF0b3IgaXMgbnVsbCBhbmQgdGhlIG5hbWVzcGFjZSBpc24ndCBjcmVhdGUgYW4gZXJyb3IuCi0gICAgICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCB0aGUgZmlsZSBpcyBlbXB0eSAoYW5kIHRoZSBYTUwgdmFsaWRhdG9yCi0gICAgICAgIC8vIGhhcyBsZXQgaXQgZ28pCi0gICAgICAgIC8vIHNvIGl0IGlzIHZhbGlkIGJ1dCBkb2VzIG5vdCBuZWVkIHRvIGJlIHZhbGlkYXRlZC4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19XU0RMX1ZBTElEQVRPUiwgd3NkbE5hbWVzcGFjZSksCi0gICAgICAgICAgICAxLAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBObyB2YWxpZGF0b3JzIHJlZ2lzdGVyZWQuCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1dTRExfVkFMSURBVE9SLCB3c2RsTmFtZXNwYWNlKSwgMSwgMSwgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgIH0KLSAgICB2YWxJbmZvLmNvbXBsZXRlV1NETFZhbGlkYXRpb24oKTsKLQotICAgIHJldHVybiB2YWxJbmZvLmlzV1NETFZhbGlkKCk7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSB3aXRoIHRoZSBleHRlbnNpb24gdmFsaWRhdG9yLiBTZXQgdGhlIGVycm9ycyBhbmQgd2FybmluZyBhcHByb3ByaWF0ZWx5LgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxkb2MgQSBXM0MgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTmFtZXNwYWNlIFRoZSBXU0RMIG5hbWVzcGFjZSB0byB2YWxpZGF0ZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUV4dGVuc2lvblZhbGlkYXRvcnMoRG9jdW1lbnQgd3NkbGRvYywgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIFN0cmluZyB3c2RsTmFtZXNwYWNlKQotICB7Ci0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlW10gZXh0VmFscyA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KHdzZGxOYW1lc3BhY2UsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpOwotICAgIGlmKGV4dFZhbHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtdmFscyA9IGV4dFZhbHMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bXZhbHM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIGV4dHZhbGRlbCA9IGV4dFZhbHNbaV07Ci0gICAgICAgIElXU0RMVmFsaWRhdG9yIGV4dHZhbCA9IGV4dHZhbGRlbC5nZXRWYWxpZGF0b3IoKTsKLSAgICAgICAgaWYoZXh0dmFsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZXh0dmFsLnZhbGlkYXRlKHdzZGxkb2MsIHZhbEluZm8pOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaChUaHJvd2FibGUgIHQpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9QUk9CTEVNX0VYVF9WQUxJREFUT1IsICBleHR2YWxkZWwuZ2V0VmFsaWRhdG9yTmFtZSgpLCB3c2RsTmFtZXNwYWNlKSwgMSwgMSwgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgICAgICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZyhtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SLCAgZXh0dmFsZGVsLmdldFZhbGlkYXRvck5hbWUoKSwgd3NkbE5hbWVzcGFjZSksIElMb2dnZXIuU0VWX0VSUk9SLCB0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBWYWxpZGF0b3JNYW5hZ2VyLgotICAgKiAKLSAgICogQHBhcmFtIHJiCi0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlIGJ1bmRsZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJlc291cmNlQnVuZGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBWYWxpZGF0aW9uQ29udHJvbGxlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlc291cmNlIGJ1bmRsZSBzZXQgZm9yIHRoaXMgVmFsaWRhdGlvbkNvbnRyb2xsZXIuCi0gICAqIEBzZWUgI3NldFJlc291cmNlQnVuZGxlCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlYnVuZGxlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgRE9NIGRvY3VtZW50IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHVyaSAKLSAgICogCQlUaGUgdXJpIG9mIHRoZSBmaWxlIHRvIHJlYWQKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqIAkJQW4gb3B0aW9uYWwgSW5wdXRTdHJlYW0gdG8gcmVhZCB0aGUgZG9jdW1lbnQgZnJvbS4KLSAgICogQHBhcmFtIHZhbGluZm8KLSAgICogCQlBIHZhbGlkYXRpb24gaW5mbyBvYmplY3QgdXNlZCBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIFRoZSBET00gbW9kZWwgb2YgdGhlIFdTREwgZG9jdW1lbnQgb3IgbnVsbCBpZiB0aGUgZG9jdW1lbnQgY2FuJ3QgYmUgcmVhZC4KLSAgICovCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ2F0Y2ggYSBwcmVtYXR1cmUgRU9GIGVycm9yIHRvIGFsbG93IGVtcHR5IFdTREwgZmlsZXMgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4KLSAgICAgIFN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbigpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBYTUxFcnJvclJlcG9ydGVyIGNyZWF0ZUVycm9yUmVwb3J0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBYTUxFcnJvclJlcG9ydGVyKCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMsIHNob3J0IHNldmVyaXR5KSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJvb2xlYW4gcmVwb3J0RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICBpZiAoa2V5LmVxdWFscygiUHJlbWF0dXJlRU9GIikpCi0gICAgICAgICAgICAgIHsgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJvciA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKHJlcG9ydEVycm9yKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIucmVwb3J0RXJyb3IoZG9tYWluLCBrZXksIGFyZ3VtZW50cywgc2V2ZXJpdHkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBudWxsOwotICAgICAgaWYgKGlucHV0U3RyZWFtICE9IG51bGwpCi0gICAgICB7IC8vdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBhIERPTSBmcm9tIHRoZSBpbnB1dHN0cmVhbQotICAgICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHVyaSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIERPTVBhcnNlciBidWlsZGVyID0gbmV3IExpbmVOdW1iZXJET01QYXJzZXIoY29uZmlndXJhdGlvbik7Ci0gICAgICBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICAgIERvY3VtZW50IGRvYyA9IGJ1aWxkZXIuZ2V0RG9jdW1lbnQoKTsKLQotICAgICAgcmV0dXJuIGRvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgdmFsaWRhdG9yIHdpbGwgZmFpbCB3aXRoIGFuIHVuZXhwbGFpbmVkIGVycm9yIG1lc3NhZ2UKLSAgICAgIC8vIGFib3V0IGEgbnVsbCBXU0RMIG5hbWVzcGFjZS4gVGhpcyBlcnJvciBzaG91bGQgYmUgYWRkcmVzc2VkIGFzIHdlbGwuCi0gICAgIHZhbGluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OLCB1cmkpLCAwLCAwLCB1cmkpOwotICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXU0RMTmFtZXNwYWNlKERvY3VtZW50IGRvYykKLSAgewotICAgIFN0cmluZyB3c2RsbnMgPSBudWxsOwotICAgIGlmKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdGRvYyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlmKHJvb3Rkb2MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd3NkbG5zID0gcm9vdGRvYy5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxuczsKLSAgfQotICAKLSAgCi0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIC8vIEhlcmUgd2UgYXJlIHJlYWRpbmcgdGhlIGZpbGUgYW5kIHN0b3JpbmcgdG8gYSBzdHJpbmdidWZmZXIuCi0gICAgU3RyaW5nQnVmZmVyIGZpbGVTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0pOwotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlucHV0UmVhZGVyKTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyWzEwMjRdOwotICAgICAgaW50IG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB3aGlsZSAobnVtYmVyUmVhZCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgZmlsZVN0cmluZy5hcHBlbmQoY2hhcnMsIDAsIG51bWJlclJlYWQpOwotICAgICAgICBudW1iZXJSZWFkID0gcmVhZGVyLnJlYWQoY2hhcnMpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9UT0RPOiBsb2cgZXJyb3IgbWVzc2FnZQotICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZVN0cmluZy50b1N0cmluZygpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWNkMjc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uSW5mb0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHZhbGlkYXRpb24gaW5mbyBpbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uSW5mb0ltcGwgaW1wbGVtZW50cyBJVmFsaWRhdGlvblJlcG9ydCwgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCA9IHRydWU7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX05PX1ZBTERJQVRPUiA9ICJfV0FSTl9OT19WQUxESUFUT1IiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSA9ICJfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSI7Ci0gIHByaXZhdGUgU3RyaW5nIHZhbGlkYXRpbmdfZmlsZV91cmkgPSBudWxsOwotICBwcml2YXRlIFVSTCB2YWxpZGF0aW5nX2ZpbGVfdXJsID0gbnVsbDsKLSAgcHJpdmF0ZSBib29sZWFuIHdzZGxWYWxpZCA9IGZhbHNlOwotICBwcml2YXRlIExpc3QgbWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIC8vcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgTGlzdCBuc05vVmFscyA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaGFzZXJyb3JzID0gZmFsc2U7Ci0gIHByaXZhdGUgSGFzaE1hcCBuZXN0ZWRNZXNzYWdlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIgPSBudWxsOwotICBwcml2YXRlIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkKLSAgICogICAgICAgICAgICBUaGUgVVJJIG9mIHRoZSBmaWxlIGZvciB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uSW5mb0ltcGwoU3RyaW5nIHVyaSwgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy52YWxpZGF0aW5nX2ZpbGVfdXJpID0gdXJpOwotICAgIGlmKHVyaSAhPSBudWxsKQotICAgIHsKLSAgICAgIHVyaSA9IHVyaS5yZXBsYWNlQWxsKCIlMjAiLCIgIik7Ci0gICAgICB0aGlzLnZhbGlkYXRpbmdfZmlsZV91cmkgPSB1cmk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdGhpcy52YWxpZGF0aW5nX2ZpbGVfdXJsID0gbmV3IFVSTCh1cmkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHRoaXMubWVzc2FnZWdlbmVyYXRvciA9IG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNnZXRGaWxlVVJJKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdGluZ19maWxlX3VyaTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQjaXNXU0RMVmFsaWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMVmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxWYWxpZDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICBhZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHZhbGlkYXRpbmdfZmlsZV91cmkpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYoYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9FUlJPUikpCi0gICAgewotICAgICAgaGFzZXJyb3JzID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIGlmKGFkZE1lc3NhZ2UobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIFZhbGlkYXRpb25NZXNzYWdlSW1wbC5TRVZfRVJST1IsIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKSkKLSAgICB7Ci0gICAgICBoYXNlcnJvcnMgPSB0cnVlOwotICAgIH0KLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKQotICB7Ci0gICAgYWRkV2FybmluZyhtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHZhbGlkYXRpbmdfZmlsZV91cmkpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9XQVJOSU5HKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIGxpc3QuIEEgbWVzc2FnZSBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGluIAotICAgKiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB3aGVuIHRoZSBVUkkgaXMgaW52YWxpZCBvciB0aGUgbWVzc2FnZSAKLSAgICogaXMgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgYWJsZSB0byBiZSBhZGRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIHNldmVyaXR5LCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIGxpc3QuIEEgbWVzc2FnZSBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGluIAotICAgKiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB3aGVuIHRoZSBVUkkgaXMgaW52YWxpZCBvciB0aGUgbWVzc2FnZSAKLSAgICogaXMgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlcnJvcktleSBUaGUgWGVyY2VzIEVycm9yIEtleQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgWGVyY2VzIGFyZ3VtZW50cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIG1lc3NhZ2Ugd2FzIGFibGUgdG8gYmUgYWRkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGRNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSwgaW50IHNldmVyaXR5LCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHN1Y2Nlc3NmdWxseUFkZGVkID0gZmFsc2U7Ci0gICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbnVsbCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydC4KLSAgICBpZihtZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHN1Y2Nlc3NmdWxseUFkZGVkOwotICAgIH0KLSAgICBTdHJpbmcgZXJyb3JVUkkgPSB1cmk7Ci0gICAgVVJMIGVycm9yVVJMID0gbnVsbDsKLSAgICBpZiAoZXJyb3JVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JVUkkgPSBlcnJvclVSSS5yZXBsYWNlQWxsKCIlMjAiLCAiICIpOwotICAgICAgICBlcnJvclVSTCA9IG5ldyBVUkwoZXJyb3JVUkkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICAvL2Vycm9yVVJJID0gbm9ybWFsaXplVVJJKGVycm9yVVJJKTsKLSAgICB9Ci0vLyAgICBlbHNlCi0vLyAgICB7Ci0vLyAgICAgIGVycm9yVVJJID0gdmFsaWRhdGluZ19maWxlX3VyaTsKLS8vICAgICAgZXJyb3JVUkwgPSB2YWxpZGF0aW5nX2ZpbGVfdXJsOwotLy8gICAgfQotICAgIC8vYm9vbGVhbiBkb0RpYWxvZyA9IHRydWU7Ci0gICAgaWYgKGVycm9yVVJMICE9IG51bGwpCi0gICAgewotICAgICAgc3VjY2Vzc2Z1bGx5QWRkZWQgPSB0cnVlOwotICAgICAgLy8gQWRkIHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0IGlmIG5lc3RlZCBlcnJvciBzdXBwb3J0IGlzIG9mZiBvcgotICAgICAgLy8gdGhpcyBtZXNzYWdlIGlzIGZvciB0aGUgY3VycmVudCBmaWxlLgotICAgICAgaWYgKCFXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCB8fCB2YWxpZGF0aW5nX2ZpbGVfdXJsLnNhbWVGaWxlKGVycm9yVVJMKSkKLSAgICAgIHsKLQotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZUltcGwgdmFsbWVzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlLCBsaW5lLAotICAgICAgICAgICAgY29sdW1uLCBzZXZlcml0eSwgdXJpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3VtZW50cyk7Ci0gICAgICAgIG1lc3NhZ2VzLmFkZCh2YWxtZXMpOwotICAgICAgfQotICAgICAgLy8gSWYgbmVzdGVkIGVycm9yIHN1cHBvcnQgaXMgZW5hYmxlZCBjcmVhdGUgYSBuZXN0ZWQgZXJyb3IuCi0gICAgICBlbHNlIGlmIChXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5lc3RlZHVyaSA9IGVycm9yVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlSW1wbCBuZXN0ZWRtZXNzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlLCBsaW5lLAotICAgICAgICAgICAgY29sdW1uLCBzZXZlcml0eSwgbmVzdGVkdXJpKTsKLQotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZUltcGwgY29udGFpbmVyID0gKFZhbGlkYXRpb25NZXNzYWdlSW1wbCkgbmVzdGVkTWVzc2FnZXMuZ2V0KG5lc3RlZHVyaSk7Ci0gICAgICAgIGlmKGNvbnRhaW5lciA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSW5pdGlhbGx5IHNldCB0aGUgbmVzdGVkIGVycm9yIHRvIGEgd2FybmluZy4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2hhbmdlZAotICAgICAgICAgIC8vIHRvIGFuIGVycm9yIGlmIGEgbmVzdGVkIG1lc3NhZ2UgaGFzIGEgc2V2ZXJpdHkgb2YgZXJyb3IuCi0gICAgICAgICAgY29udGFpbmVyID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSwgbmVzdGVkdXJpKSwgMSwgMCwgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HLCBuZXN0ZWR1cmkpOwotICAgICAgICAgIG5lc3RlZE1lc3NhZ2VzLnB1dChuZXN0ZWR1cmksIGNvbnRhaW5lcik7Ci0gICAgICAgICAgbWVzc2FnZXMuYWRkKGNvbnRhaW5lcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGFpbmVyLmFkZE5lc3RlZE1lc3NhZ2UobmVzdGVkbWVzcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3NmdWxseUFkZGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKQotICAgKi8KLSAgcHVibGljIElWYWxpZGF0aW9uTWVzc2FnZVtdIGdldFZhbGlkYXRpb25NZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gKElWYWxpZGF0aW9uTWVzc2FnZVtdKW1lc3NhZ2VzLnRvQXJyYXkobmV3IElWYWxpZGF0aW9uTWVzc2FnZVttZXNzYWdlcy5zaXplKCldKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICAvLyBJZiB0aGUgbGlzdCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiB0aGlzIG5hbWVzcGFjZSwgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgLy8gYW5kIGNyZWF0ZSBhIHdhcm5pbmcgbWVzc2FnZS4KLSAgICBpZiAoIW5zTm9WYWxzLmNvbnRhaW5zKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgbnNOb1ZhbHMuYWRkKG5hbWVzcGFjZSk7Ci0gICAgICBhZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX05PX1ZBTERJQVRPUiwgbmFtZXNwYWNlKSwgMSwgMCk7Ci0KLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29udHJvbGxlclZhbGlkYXRpb25JbmZvI2NvbXBsZXRlV1NETFZhbGlkYXRpb24oKQotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGVXU0RMVmFsaWRhdGlvbigpCi0gIHsKLSAgICBpZiAoaGFzZXJyb3JzKQotICAgIHsKLSAgICAgIHdzZGxWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NkbFZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0I2hhc0Vycm9ycygpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGhhc2Vycm9yczsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuVmFsaWRhdGlvblJlcG9ydCNnZXROZXN0ZWRNZXNzYWdlcygpCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXROZXN0ZWRNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gbmVzdGVkTWVzc2FnZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gIAl0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLSAgCXJldHVybiB1cmlSZXNvbHZlcjsKLSAgfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5WYWxpZGF0aW9uSW5mbyNnZXRBdHRyaWJ1dGUoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldEF0dHJpYnV0ZShTdHJpbmcgbmFtZSkgCi0JewotCQlpZihjb25maWd1cmF0aW9uID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBjb25maWd1cmF0aW9uLmdldFByb3BlcnR5KG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb25maWd1cmF0aW9uKFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKLQl9Ci0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLQkJcmV0dXJuICFoYXNFcnJvcnMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZmQ2NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25NZXNzYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotLyoqCi0gKiBBIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBjcmVhdGVkIHdoZW4gdGhlcmUgaXMgaW5mb3JtYXRpb24gdG8gcmVwb3J0IGZyb20KLSAqIHZhbGlkYXRpbmcgYSBXU0RMIGRvY3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIGltcGxlbWVudHMgSVZhbGlkYXRpb25NZXNzYWdlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJvdGVjdGVkIGludCBsaW5lTnVtYmVyOwotICBwcm90ZWN0ZWQgaW50IGNvbHVtbk51bWJlcjsKLSAgcHJvdGVjdGVkIFN0cmluZyB1cmk7Ci0gIHByb3RlY3RlZCBpbnQgc2V2ZXJpdHkgPSBTRVZfRVJST1I7Ci0gIHByb3RlY3RlZCBMaXN0IG5lc3RlZEVycm9yczsKLSAgcHJvdGVjdGVkIFN0cmluZyBlcnJvcktleSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiBAcGFyYW0gbGluZU51bWJlciBUaGUgbGluZSB3aGVyZSB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiBAcGFyYW0gY29sdW1uTnVtYmVyIFRoZSBjb2x1bW4gd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQGRlcHJlY2F0ZWQgVXNlIGNvbnRydWN0b3Igd2l0aCBVUkkgcGFyYW1ldGVyLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSkKLSAgewotICAgIHRoaXMobWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzZXZlcml0eSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEFsbG93cyBzcGVjaWZ5aW5nIGEgdXJpIGZvciB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgVGhlIGxpbmUgd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciBUaGUgY29sdW1uIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSwgU3RyaW5nIHVyaSkKLSAgewotICAgICAgdGhpcyhtZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNldmVyaXR5LCB1cmksIG51bGwsIG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEFsbG93cyBzcGVjaWZ5aW5nIGEgdXJpIGZvciB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgVGhlIGxpbmUgd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciBUaGUgY29sdW1uIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZXJyb3JLZXkgVGhlIFhlcmNlcyBFcnJvciBrZXkKLSAgICogQHBhcmFtIG1lc3NhZ2VBcmd1bWVudHMgVGhlIHZhbHVlcyB1c2VkIHRvICJmaWxsIGluIHRoZSBibGFua3MiIG9mIGEgWGVyY2VzIGVycm9yIE1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBpbnQgc2V2ZXJpdHksIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgdGhpcy5lcnJvcktleSA9IGVycm9yS2V5OwotICAgIHRoaXMubWVzc2FnZUFyZ3VtZW50cyA9IG1lc3NhZ2VBcmd1bWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgbnVtYmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZU51bWJlcjsKLSAgfQotCi0gIC8qKgotICAgKiByZXR1cm5zIHRoZSB1cmkgb2YgdGhlIHJlZmVyZW5jZSBmaWxlIGZvciB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdXJpIG9mIHRoZSByZXNvdXJjZSB0aGF0IHRoZSBtZXNzYWdlIHJlZmVycyB0by4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmk7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2UjZ2V0U2V2ZXJpdHkoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRTZXZlcml0eSgpCi0gIHsKLSAgICByZXR1cm4gc2V2ZXJpdHk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KGludCBzZXZlcml0eSkKLSAgewotICAgIGlmKHNldmVyaXR5ID09IFNFVl9FUlJPUiB8fCBzZXZlcml0eSA9PSBTRVZfV0FSTklORykKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZSB0byB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uTWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlIHRvIGFkZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmVzdGVkTWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UpCi0gIHsKLSAgICBpZiAobmVzdGVkRXJyb3JzID09IG51bGwpCi0gICAgewotICAgICAgbmVzdGVkRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIH0KLSAgICBuZXN0ZWRFcnJvcnMuYWRkKHZhbGlkYXRpb25NZXNzYWdlKTsKLSAgICBpbnQgdmFsaWRhaXRvbm1lc3NhZ2VTZXZlcml0eSA9IHZhbGlkYXRpb25NZXNzYWdlLmdldFNldmVyaXR5KCk7Ci0gICAgaWYodmFsaWRhaXRvbm1lc3NhZ2VTZXZlcml0eSA9PSBTRVZfRVJST1IpCi0gICAgewotICAgICAgc2V0U2V2ZXJpdHkoU0VWX0VSUk9SKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsaXN0IG9mIG5lc3RlZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE5lc3RlZE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBuZXN0ZWRFcnJvcnMgIT0gbnVsbCA/IG5lc3RlZEVycm9ycyA6IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gdGhlIGVycm9yIGtleQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvcktleSgpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JLZXk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZXJyb3JLZXkgdGhlIGVycm9yIGtleSB0byBzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yS2V5KFN0cmluZyBlcnJvcktleSkKLSAgewotICAgIHRoaXMuZXJyb3JLZXkgPSBlcnJvcktleTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiB0aGUgWGVyY2VzIG1lc3NhZ2UgYXJndW1lbnRzIHVzZWQgdG8gImZpbGwgaW4gdGhlIGJsYW5rcyIgb2YgdGhlIG1lc3NhZ2VzCi0gICAqLwotICBwdWJsaWMgT2JqZWN0W10gZ2V0TWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUFyZ3VtZW50czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIzMDVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotCi0vKioKLSAqIEEgcmVnaXN0cnkgb2YgSVdTRExWYWxpZGF0b3IgdmFsaWRhdG9ycy4gVGhpcyBob2xkcyB0aGUgdG9wIGxldmVsIFdTREwgYW5kIFdTLUkgdmFsaWRhdG9ycy4KLSAqIFZhbGlkYXRvcnMgYXJlIHJlZ2lzdGVyZWQgYnkgdGhlIG5hbWVzcGFjZSB0aGV5IHZhbGlkYXRlLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yUmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIFRoZSBXU0RMIHZhbGlkYXRvciB0eXBlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBJbnRlZ2VyIFdTRExfVkFMSURBVE9SID0gbmV3IEludGVnZXIoMCk7Ci0gIC8qKgotICAgKiBUaGUgV1MtSSB2YWxpZGF0b3IgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgSW50ZWdlciBFWFRfVkFMSURBVE9SID0gbmV3IEludGVnZXIoMSk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgVmFsaWRhdG9yUmVnaXN0cnkgdmVySW5zdGFuY2U7Ci0gIC8qCi0gICAgVGhpcyBpcyBhIE1hcCBvZiBNYXBzLiBUaGUgdG9wLWxldmVsIE1hcCBpcyBrZXllZCBieSAoQ2xhc3MpcGFyZW50VHlwZSwKLSAgICBhbmQgdGhlIGlubmVyIE1hcHMgYXJlIGtleWVkIGJ5IChRTmFtZSllbGVtZW50VHlwZS4KLSAgICBUaGlzIGlkZWEgaXMgdGhlIHNhbWUgYXMgaXMgZG9uZSBpbiBXU0RMNEoKLSAgKi8KLSAgcHJvdGVjdGVkIE1hcCB2YWxpZGF0b3JSZWcgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgcHJvdGVjdGVkIEl0ZXJhdG9yIGRlZmF1bHRWYWxpZGF0b3JJdGVyYXRvcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdHJ5LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBWYWxpZGF0b3JSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAodmVySW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB2ZXJJbnN0YW5jZSA9IG5ldyBWYWxpZGF0b3JSZWdpc3RyeSgpOwotICAgIH0KLSAgICByZXR1cm4gdmVySW5zdGFuY2U7Ci0gIH0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoaXMgdmFsaWRhdG9yIG9mIHRoZSBnaXZlbiB0eXBlIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIHZhbGlkYXRlcy4KLSAgICogQHBhcmFtIHZhbERlbGVnYXRlIFRoZSB2YWxpZGF0b3IgZGVsZWdhdGUgdG8gcmVnaXN0ZXIuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UsIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSB2YWxEZWxlZ2F0ZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgLy8gYWxsb3cgdGhlIG51bGwgbmFtZXNwYWNlIGJ1dCBtYWtlIGl0IHRoZSBlbXB0eSBzdHJpbmcKLSAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gIiI7Ci0gICAgfQotCi0gICAgLy8gZ2V0IHRoZSBoYXN0YWJsZSBmb3IgdGhlIHR5cGUgb2YgdmFsaWRhdG9yIHdlIHdhbnQKLSAgICBIYXNodGFibGUgdHlwZVZhbGlkYXRvclJlZyA9IChIYXNodGFibGUpdmFsaWRhdG9yUmVnLmdldCh0eXBlKTsKLSAgICAvLyBpZiBpdCdzIG51bGwgaWYgbWVhbnMgd2UgaGF2ZW4ndCBkZWZpbmVkIHRoaXMgdHlwZSBvZiB2YWxpZGF0b3IgeWV0Ci0gICAgaWYgKHR5cGVWYWxpZGF0b3JSZWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0eXBlVmFsaWRhdG9yUmVnID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgdmFsaWRhdG9yUmVnLnB1dCh0eXBlLCB0eXBlVmFsaWRhdG9yUmVnKTsKLSAgICB9Ci0gICAgCi0gICAgICBMaXN0IG5hbWVzcGFjZXZhbHMgPSAoTGlzdCl0eXBlVmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpOwotICAgICAgaWYobmFtZXNwYWNldmFscyA9PSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2V2YWxzID0gbmV3IFZlY3RvcigpOwotICAgICAgICB0eXBlVmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIG5hbWVzcGFjZXZhbHMpOwotICAgICAgfQotICAgICAgbmFtZXNwYWNldmFscy5hZGQodmFsRGVsZWdhdGUpOwotCi0gIH0KLSAgLyoqCi0gICAqIEFzayBmb3IgdGhlIHZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UuIElmIG5vbmUgaXMgZm91bmQKLSAgICogcmV0dXJuIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSB2YWxpZGF0b3IgdGhhdCBpcyBiZWluZyByZXF1ZXN0ZWQuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRvciB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiB2YWxpZGF0b3IgZGVsZWdhdGVzIGlmIGF0IGxlYXN0IG9uZSBpcyByZWdpc3RlcmVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbXSBxdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KFN0cmluZyBuYW1lc3BhY2UsIEludGVnZXIgdHlwZSkKLSAgewotICAgIC8vIGlmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCBhbGxvdyBpdCBhbmQgdHJlYXQgaXQgYXMgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0gICAgSGFzaHRhYmxlIHR5cGVWYWxpZGF0b3JSZWcgPSAoSGFzaHRhYmxlKXZhbGlkYXRvclJlZy5nZXQodHlwZSk7Ci0gICAgaWYgKHR5cGVWYWxpZGF0b3JSZWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIH0KLQotICAgIExpc3QgdmFsZGVscyA9IChMaXN0KXR5cGVWYWxpZGF0b3JSZWcuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgaWYodmFsZGVscyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoV1NETFZhbGlkYXRvckRlbGVnYXRlW10pdmFsZGVscy50b0FycmF5KG5ldyBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbdmFsZGVscy5zaXplKCldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgcmVnaXN0ZXJlZCBvZiB0aGUgZ2l2ZW4gdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgaWYgKHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlLCB0eXBlKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiODAyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0vKioKLSAqIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHZhbGlkYXRpb24gb2YgYSBzcGVjaWZpYwotICogZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiAKLXsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgLyoqCi0gICAqIFNldCBhbiBhdHRyaWJ1dGUgb24gdGhlIHZhbGlkYXRvci4gQW4gYXR0cmlidXRlIGlzCi0gICAqIGRlZmluZWQgYnkgYSBuYW1lIGFuZCBhIHZhbHVlIHBhaXIuIEFuIGF0dHJpYnV0ZSBtYXkKLSAgICogYmUgZGVmaW5lZCBmb3IgYW55IHZhbGlkYXRvciwgYnVpbHQgaW4gb3IgYW4gZXh0ZW5zaW9uLgotICAgKiBFeHRlbnNpb24gdmFsaWRhdG9ycyBjYW4gcHJvYmUgdGhlIGF0dHJpYnV0ZXMgc2V0IG9uCi0gICAqIHRoZSBXU0RMIHZhbGlkYXRvciB0byBjdXN0b21pemUgdGhlIHdheSBpbiB3aGljaCB0aGV5Ci0gICAqIHZhbGlkYXRlLiBBIG51bGwgdmFsdWUgd2lsbCB1bnNldCBhbiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIGlkZW50aWZpZXIuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIGl0c2VsZi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpCi0gIHsKLQlpZih2YWx1ZSA9PSBudWxsKQotCXsKLQkgIHByb3BlcnRpZXMucmVtb3ZlKG5hbWUpOwotCX0KLQllbHNlCi0JewotICAJICBwcm9wZXJ0aWVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2YWx1ZSBzZXQgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBuYW1lKQotICB7Ci0JaWYobmFtZSAhPSBudWxsKQotCSAgcmV0dXJuIHByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCXJldHVybiBudWxsOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDMyYjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLkNsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExQmFzaWNWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExVmFsaWRhdG9yQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEubWltZS5NSU1FVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnNvYXAuU09BUFZhbGlkYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogQW4gbWFpbiBXU0RMIHZhbGlkYXRvciBjbGFzcy4gVGhlIFdTREwgdmFsaWRhdG9yIHZhbGlkYXRlcyBXU0RMIGRvY3VtZW50cy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEUgPSAidmFsaWRhdGV3c2RsIjsKLSAgcHJpdmF0ZSBWYWxpZGF0aW9uQ29udHJvbGxlciB2YWxpZGF0aW9uQ29udHJvbGxlcjsKLSAgcHJvdGVjdGVkIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IoKQotICB7Ci0gICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRSk7Ci0gICAgdXJpUmVzb2x2ZXIgPSBuZXcgVVJJUmVzb2x2ZXIoKTsKLSAgICB2YWxpZGF0aW9uQ29udHJvbGxlciA9IG5ldyBWYWxpZGF0aW9uQ29udHJvbGxlcihyYiwgdXJpUmVzb2x2ZXIpOwotICAgIAotICAgIC8vUmVnaXN0ZXIgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycy4KLSAgICBWYWxpZGF0b3JSZWdpc3RyeSByZWdpc3RyeSA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgLy8gUmVnaXN0ZXIgdGhlIFdTREwgMS4xIHZhbGlkYXRvciBjb250cm9sbGVyIGFuZCB2YWxpZGF0b3JzLgotICAgIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZShXU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlclZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1dTREwsIGRlbGVnYXRlLCBWYWxpZGF0b3JSZWdpc3RyeS5XU0RMX1ZBTElEQVRPUik7Ci0gICAgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUxID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoV1NETDExQmFzaWNWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfV1NETCwgZGVsZWdhdGUxKTsKLSAgICBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShIVFRQVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5OU19IVFRQLCBkZWxlZ2F0ZTEpOwotICAgIGRlbGVnYXRlMSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFNPQVBWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLk5TX1NPQVAxMSwgZGVsZWdhdGUxKTsKLSAgICBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShNSU1FVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5OU19NSU1FLCBkZWxlZ2F0ZTEpOwotICAgCi0gICAgLy8gVGhlIFdTREwgMS4xIHNjaGVtYSB2YWxpZGF0b3IgaXMgYSBzcGVjaWFsIGNhc2UgYXMgaXQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhyZWUgbmFtZXNwYWNlcy4KLS8vICAgIGRlbGVnYXRlMSA9IG5ldyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShJbmxpbmVTY2hlbWFWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotLy8gICAgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgZGVsZWdhdGUxKTsKLS8vICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIGRlbGVnYXRlMSk7Ci0vLyAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCBkZWxlZ2F0ZTEpOwotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIFRoZSBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAcmV0dXJuIEEgdmFsaWRhdGlvbiByZXBvcnQgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSkKLSAgewotICAgcmV0dXJuIHZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBWYWxpZGF0ZSB0aGUgaW5wdXRTdHJlYW0KLSAgICogQHBhcmFtIHVyaSBUaGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZmlsZSBiZWluZyB2YWxpZGF0ZWQKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIFRoZSBzdHJlYW0gdG8gdmFsaWRhdGUKLSAgICogQHJldHVybiBBIFZhbGlkYXRpb24gcmVwb3J0IHN1bW1hcml6aW5nIHRoZSByZXN1bHRzIG9mIHRoZSB2YWxpZGF0aW9uCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICB7Ci0gICAgaWYodXJpID09IG51bGwpIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgaWYoY29uZmlndXJhdGlvbiA9PSBudWxsKQotICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbkNvbnRyb2xsZXIudmFsaWRhdGUodXJpLCBpbnB1dFN0cmVhbSwgY29uZmlndXJhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBVUkkgcmVzb2x2ZXIgdG8gdGhlIFdTREwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHVyaVJlc29sdmVyIFRoZSBVUkkgcmVzb2x2ZXIgdG8gYWRkIHRvIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFVSSVJlc29sdmVyKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgCXRoaXMudXJpUmVzb2x2ZXIuYWRkVVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVnaXN0ZXIgYW4gZXh0ZW5zaW9uIFdTREwgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhpcyB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciB2YWxpZGF0ZXMgZm9yLiBUaGlzIGlzIHRoZSBXU0RMIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGRlbGVnYXRlIFRoZSBkZWxlZ2F0ZSB0aGF0IGhvbGRzIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldTRExFeHRlbnNpb25WYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotICB7Ci0gICAgVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlclZhbGlkYXRvcihuYW1lc3BhY2UsIGRlbGVnYXRlLCBWYWxpZGF0b3JSZWdpc3RyeS5FWFRfVkFMSURBVE9SKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlZ2lzdGVyIGEgV1NETCAxLjEgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhpcyB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciB2YWxpZGF0ZXMgZm9yLgotICAgKiBAcGFyYW0gZGVsZWdhdGUgVGhlIGRlbGVnYXRlIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UsIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotICB7Ci0gICAgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlclZhbGlkYXRvcihuYW1lc3BhY2UsIGRlbGVnYXRlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFlMDI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0vKioKLSAqIEEgV1NETFZhbGlkYXRvckRlbGVnYXRlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgV1NETCB2YWxpZGF0b3IuCi0gKiBBIGRlbGVnYXRlIGlzIHVzZWQgdG8gbGF6eSBsb2FkIGV4dGVuc2lvbiB2YWxpZGF0b3JzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETFZhbGlkYXRvckRlbGVnYXRlIAotewotICBwcml2YXRlIElXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2YWxpZGF0b3Igc3BlY2lmaWVkIGluIHRoaXMgZGVsZWdhdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBXU0RMIHZhbGlkYXRvciBzcGVjaWZpZWQgYnkgdGhpcyBkZWxlZ2F0ZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETFZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKQotICB7Ci0gICAgaWYgKHZhbGlkYXRvciA9PSBudWxsKQotICAgIHsKLSAgICAgIHZhbGlkYXRvciA9IGxvYWRWYWxpZGF0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIExvYWQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgaW4gdGhpcyBkZWxlZ2F0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgdmFsaWRhdG9yIHNwZWNpZmllZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IElXU0RMVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHZhbGlkYXRvciBuYW1lLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRWYWxpZGF0b3JOYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkODJmNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZUxvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgd2lsbCBsb2cgdG8gdGhlIGxvZyBmaWxlIGluIHRoZSBFY2xpcHNlIG1ldGFkYXRhIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyCi17Ci0KLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSkgCi0gIHsKLSAgICBsb2cobWVzc2FnZSwgc2V2ZXJpdHksIG51bGwpOwkKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLQkvLyBEb24ndCBsb2cgdmVyYm9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgRWNsaXBzZSBsb2cuCi0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQl7Ci0JICByZXR1cm47Ci0JfQotCWludCBzdGF0dXMgPSBJU3RhdHVzLklORk87Ci0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQl7Ci0JICBzdGF0dXMgPSBJU3RhdHVzLldBUk5JTkc7Ci0JfQotCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JewotCSAgc3RhdHVzID0gSVN0YXR1cy5FUlJPUjsKLQl9Ci0gICAgVmFsaWRhdGVXU0RMUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0dXMoc3RhdHVzLCBWYWxpZGF0ZVdTRExQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgbWVzc2FnZSwgdGhyb3dhYmxlKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWI2YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGV4dGVuZHMgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYSBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUgdG8gdXNlIHRvIGxvYWQgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExVmFsaWRhdG9yRGVsZWdhdGUjbG9hZFZhbGlkYXRvcigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVdTREwxMVZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMMTFWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQlpZihidW5kbGUgIT0gbnVsbCkKLQl7Ci0JICB0cnkKLQkgIHsKLSAgICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKHZhbGlkYXRvckNsYXNzbmFtZSk7Ci0KLSAgICAgICAgdmFsaWRhdG9yID0gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIAotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgfQotCX0KLQlyZXR1cm4gdmFsaWRhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZTE4MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi0vKioKLSAqIEEgZGVsZWdhdGUgaG9sZHMgYSB2YWxpZGF0b3IncyBpbmZvcm1hdGlvbiBhbmQgY2FuIGluc3RhbnRpYXRlIGl0Ci0gKiB3aGVuIHJlcXVlc3RlZCB0by4KLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYW4gT1NHSSBidW5kbGUgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBPU0dJIGJ1bmRsZSB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQWJzdHJhY3RXU0RMVmFsaWRhdG9yRGVsZWdhdGUjbG9hZFZhbGlkYXRvcigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVdTRExWYWxpZGF0b3IgbG9hZFZhbGlkYXRvcigpCi0gIHsKLQlJV1NETFZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotICAgIGlmKGJ1bmRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgIAlDbGFzcyB2YWxpZGF0b3JDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgICB2YWxpZGF0b3IgPSAoSVdTRExWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFRocm93YWJsZSB0KQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5BYnN0cmFjdFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSNnZXRWYWxpZGF0b3JOYW1lKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdG9yTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4OWJiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5HcmFtbWFyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyRGVzY3JpcHRpb247Ci0KLS8qKgotICogQSBncmFtbWFyIHBvb2wgZm9yIGlubGluZSBzY2hlbWFzLiBUaGlzIGdyYW1tYXIgcG9vbCByZXN0cmljdHMgaW5saW5lIHNjaGVtYXMKLSAqIGZyb20gYmVpbmcgY2FjaGVkLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwgZXh0ZW5kcyBYTUxHcmFtbWFyUG9vbEltcGwgCi17Ci0gIHB1YmxpYyB2b2lkIHB1dEdyYW1tYXIoR3JhbW1hciBncmFtbWFyKSAKLSAgewotCWlmIChncmFtbWFyID09IG51bGwpCi0JICByZXR1cm47Ci0JLy8gd2Ugb3ZlcmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3JtICdzZWxlY3RpdmUnIGNhY2hpbmcgb2Ygc2NoZW1hcwotCVhNTEdyYW1tYXJEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IGdyYW1tYXIuZ2V0R3JhbW1hckRlc2NyaXB0aW9uKCk7Ci0JaWYgKCFmUG9vbElzTG9ja2VkICYmICFjb250YWluc0dyYW1tYXIoZ3JhbW1hci5nZXRHcmFtbWFyRGVzY3JpcHRpb24oKSkpIAotCXsKLQkgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGNhY2hpbmcgdGhlIGlubGluZSBzY2hlbWFzCi0JICAvLyB3ZSBlbnN1cmUgdGhlIGxpdGVyYWwgc3lzdGVtIGlkIGRvZXMgbm90IGVuZCB3aXRoIHdzZGwKLQkgIC8vIGJlZm9yZSB3ZSBhdHRlbXB0IHRvICdwdXQnIHRoZSBncmFtbWFyCi0JICBTdHJpbmcgbGl0U3lzSWQgPSBkZXNjcmlwdGlvbi5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLQkgIFN0cmluZyBiYXNTeXNJZCA9IGRlc2NyaXB0aW9uLmdldEJhc2VTeXN0ZW1JZCgpOwotCSAgaWYgKGxpdFN5c0lkICE9IG51bGwgJiYgbGl0U3lzSWQuZW5kc1dpdGgoInhzZCIpCi0JCQkmJiBiYXNTeXNJZCAhPSBudWxsICYmIGJhc1N5c0lkLmVuZHNXaXRoKCJ3c2RsIikpIAotCSAgewotCQkJCS8qCi0JCQkJICogU3lzdGVtLm91dC5wcmludGxuKCJwdXRHcmFtYW1yIDogIiArCi0JCQkJICogc2NoZW1hRGVzY3JpcHRpb24uZ2V0TmFtZXNwYWNlKCkgKyAiLCAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXRFeHBhbmRlZFN5c3RlbUlkKCkgKyAiLCAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXRCYXNlU3lzdGVtSWQoKSk7Ci0JCQkJICovCi0JICAgIHN1cGVyLnB1dEdyYW1tYXIoZ3JhbW1hcik7Ci0JICB9Ci0JfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVVJJUmVzb2x2ZXJXcmFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhNmJiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFuIHdyYXBwZXIgVVJJIHJlc29sdmVyIHRoYXQgd3JhcHMgdGhlIFdlYiBTdGFuZGFyZCBUb29scyBVUkkgcmVzb2x2ZXIKLSAqIGluIGEgV1NETCB2YWxpZGF0b3IgVVJJIHJlc29sdmVyLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXJXcmFwcGVyIGltcGxlbWVudHMgSUV4dGVuc2libGVVUklSZXNvbHZlcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXJXcmFwcGVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JRXh0ZW5zaWJsZVVSSVJlc29sdmVyI3Jlc29sdmUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCkKLSAgewotICAgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLSAgICBTdHJpbmcgcmVzb2x2ZWRTeXN0ZW1JZCA9IHJlc29sdmVQbGF0Zm9ybVVSTChzeXN0ZW1JZCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLSAgICBpZiAocHVibGljSWQgIT0gbnVsbCB8fCByZXNvbHZlZFN5c3RlbUlkICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBsb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgcmVzb2x2ZWRTeXN0ZW1JZCk7Ci0gICAgfSAgCi0gICAgCi0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgeyAgICAgICAKLSAgICAgIHJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24obG9jYXRpb24pOwotICAgICAgU3RyaW5nIHBoeXNpY2FsID0gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgbG9jYXRpb24pOwotICAgICAgaWYocGh5c2ljYWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0LnNldFBoeXNpY2FsTG9jYXRpb24ocGh5c2ljYWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihsb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUmVzb2x2ZSBwbGF0Zm9ybSBVUkxzIHRvIHN0YW5kYXJkIFVSTHMuIFRoaXMgbWV0aG9kIGhhcyB0aGUKLSAgICogcHJhY3RpY2FsIGVmZmVjdCBvZiB0cmFuc2Zvcm1pbmcgYSBVUkwgc3VjaCBhcwotICAgKiBwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdC90ZXN0LndzZGwKLSAgICogaW50bwotICAgKiBmaWxlOi9jOi93dHAvd29ya3NwYWNlL3Rlc3QvdGVzdC53c2RsCi0gICAqIAotICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCBtYXkgY29udGFpbiB0aGUgcGxhdGZvcm0gc2NoZW1lLgotICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgVVJMIHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgcGxhdGZvcm0gc2NoZW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXNvbHZlUGxhdGZvcm1VUkwoU3RyaW5nIHVybCkKLSAgewotCSAgU3RyaW5nIHJlc3VsdCA9IHVybDsKLQkgIGlmKHVybCAhPSBudWxsICYmIHVybC5zdGFydHNXaXRoKCJwbGF0Zm9ybToiKSkKLSAgICAgIHsKLSAgICAJICB0cnkKLSAgICAJICB7Ci0gICAgCQkgIFVSTCBmaWxlVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKG5ldyBVUkwodXJsKSk7Ci0gICAgCQkgIHJlc3VsdCA9IGZpbGVVUkwudG9FeHRlcm5hbEZvcm0oKTsKLSAgICAJICB9Ci0gICAgCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgCSAgewotICAgIAkJICAvLyBDYW4ndCByZXNvbHZlIHVzaW5nIHRoZSBGaWxlTG9jYXRvciBpbiB0aGlzCi0gICAgCQkgIC8vIGNhc2Ugc28gZG8gbm90aGluZy4KLSAgICAJICB9Ci0gICAgICB9Ci0JICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0ZVdTRExQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNkMWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHJlcXVpcmVkIGZvciBlY2xpcHNlLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUFJPUEVSVElFU19GSUxFID0gInZhbGlkYXRld3NkbHVpIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBWYWxpZGF0ZVdTRExQbHVnaW4gaW5zdGFuY2U7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZVdTRExQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChjb250ZXh0KTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gICAgd3NkbFZhbGlkYXRvclJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKENvbnN0YW50cy5XU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEUpOwotICAgIHJlc291cmNlYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BFUlRJRVNfRklMRSk7Ci0gICAgCi0gICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihuZXcgRWNsaXBzZUxvZ2dlcigpKTsKLQotICAgIG5ldyBXU0RMVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoCi0gICAgICAiZXh0dmFsaWRhdG9yIiwKLSAgICAgICJleHR2YWxpZGF0b3IiLAotICAgICAgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyLkVYVF9WQUxJREFUT1IpCi0gICAgICAucmVhZFJlZ2lzdHJ5KCk7Ci0KLSAgICAvLyByZWdpc3RlciBhbnkgV1NETCAxLjEgdmFsaWRhdG9ycyBkZWZpbmVkCi0gICAgbmV3IFdTREwxMVZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyKCJ3c2RsMTF2YWxpZGF0b3IiLCAidmFsaWRhdG9yIikucmVhZFJlZ2lzdHJ5KCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICAgIFhNTENhdGFsb2cucmVzZXQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4gb2JqZWN0LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4gb2JqZWN0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFZhbGlkYXRlV1NETFBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUoZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKiBSZXNvdXJjZUJ1bmRsZSBoZWxwZXIgbWV0aG9kcwotICAgKiAKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgcmVzb3VyY2UgYnVuZGxlIGZvciB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiByZXNvdXJjZWJ1bmRsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhlIFdTREwgdmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0V1NETFZhbGlkYXRvclJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gaWQuCi0gICAqIAotICAgKiBAcGFyYW0gc3RyaW5nSUQgLSB0aGUgaWQgZm9yIHRoZSBzdHJpbmcKLSAgICogQHJldHVybiB0aGUgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gaWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBzdHJpbmdJRCkKLSAgewotICAgIHJldHVybiBnZXRSZXNvdXJjZUJ1bmRsZSgpLmdldFN0cmluZyhzdHJpbmdJRCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlYWRzIHRoZSBwbHVnaW4gbWFuaWZlc3RzIGFuZCByZWdpc3RlcnMgZWFjaCBXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yCi0gKi8KLWNsYXNzIFdTRExWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9WQUxJREFUT1IgPSAwOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBFWFRfVkFMSURBVE9SID0gMTsKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0gIHByb3RlY3RlZCBpbnQgdmFsaWRhdG9yVHlwZTsKLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgaW50IHZhbGlkYXRvclR5cGUpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2lvblBvaW50SWQgPSBleHRlbnNpb25Qb2ludElkOwotICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7Ci0gICAgdGhpcy52YWxpZGF0b3JUeXBlID0gdmFsaWRhdG9yVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcGx1Z2luUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCBwb2ludCA9IHBsdWdpblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgZXh0ZW5zaW9uUG9pbnRJZCk7Ci0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKSAtIHBhcnNlIGFuZCBkZWFsIHdpdGggYW4gZXh0ZW5zaW9uIGxpa2U6Ci0gICAqCi0gICAqIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnZhbGlkYXRlLndzZGwuV1NETEV4dGVuc2lvblZhbGlkYXRvciIKLSAgICogICAgICAgICAgICBpZD0ic29hcFZhbGlkYXRvciIKLSAgICogICAgICAgICAgICBuYW1lPSJTT0FQIFZhbGlkYXRvciI+PgotICAgKiAgIDx2YWxpZGF0b3I+Ci0gICAqICAgICAgICA8cnVuIGNsYXNzPSIgb3JnLmVjbGlwc2UudmFsaWRhdGUud3NkbC5zb2FwLlNPQVBWYWxpZGF0b3IiLz4KLSAgICogICA8L3ZhbGlkYXRvcj4KLSAgICogICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLz4KLSAgICogPC9leHRlbnNpb24+Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIHZhbGlkYXRvckNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKHZhbGlkYXRvckNsYXNzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gICAgICAgICAgQ2xhc3NMb2FkZXIgcGx1Z2luTG9hZGVyID0KLSAgICAgICAgICAvLyAgICAgICAgICAgIGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0RGVjbGFyaW5nUGx1Z2luRGVzY3JpcHRvcigpLmdldFBsdWdpbigpLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgICAvLwkJCQltb2RpZmllZCB0byByZXNvbHZlIGNlcnRhaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcGx1Z2luIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZAotCi0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAodmFsaWRhdG9yVHlwZSA9PSBFWFRfVkFMSURBVE9SKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICBFY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MsIHBsdWdpbkJ1bmRsZSk7Ci0gICAgICAgICAgICBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCkucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIFJlYWQgV1NEbCAxLjEgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gKiAKLSAqICA8ZXh0ZW5zaW9uCi0gKiAgICAgcG9pbnQ9ImNvbS5pYm0uZXRvb2xzLnZhbGlkYXRpb24udmFsaWRhdG9yIgotICogICAgIGlkPSJ3c2RsVmFsaWRhdG9yIgotICogICAgIG5hbWU9IiVfVUlfV1NETF9WQUxJREFUT1IiPgotICogICAgPHdzZGwxMXZhbGlkYXRvcgotICogICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICogICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuc29hcC53c2RsMTEuU09BUFZhbGlkYXRvciIKLSAqICAgICAgIHJlc291cmNlYnVuZGxlPSJ2YWxpZGF0ZXdzZGxzb2FwIi8+Ci0gKiAgIDwvZXh0ZW5zaW9uPgotICogIAotICovCi1jbGFzcyBXU0RMMTFWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGV4dGVuc2lvblBvaW50SWQgLSB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludAotICAgKiBAcGFyYW0gdGFnTmFtZSAtIHRoZSB0YWcgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50Ci0gICAqLwotICBwdWJsaWMgV1NETDExVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lKQotICB7Ci0gICAgdGhpcy5leHRlbnNpb25Qb2ludElkID0gZXh0ZW5zaW9uUG9pbnRJZDsKLSAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIGhhbmRsZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cyB0aGF0IG1hdGNoCi0gICAqIHRoZSBzcGVkaWZpZWQgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBwbHVnaW5SZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQTFVHSU5fSUQsIGV4dGVuc2lvblBvaW50SWQpOwotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGFuZCBkZWFsIHdpdGggdGhlIGV4dGVuc2lvbiBwb2ludHMuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZXh0ZW5zaW9uIHBvaW50IGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIHZhbGlkYXRvckNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKHZhbGlkYXRvckNsYXNzICE9IG51bGwgJiYgbmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MsIHBsdWdpbkJ1bmRsZSk7Ci0gICAgICAgICAgV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDU3NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIEEgV1NETCB2YWxpZGF0b3IgdG8gY29udHJpYnV0ZSB0byB0aGUgV1RQIHZhbGlkYXRpb24gZnJhbWV3b3JrLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3IgCi17Ci0gIHByb3RlY3RlZCBIYXNoTWFwIHhzZEdyYW1tYXJQb29scyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByb3RlY3RlZCBIYXNoTWFwIHhtbEdyYW1tYXJQb29scyA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgdHdvIGdyYW1tYXIgcG9vbHMgZm9yIHRoaXMgV1NETCB2YWxpZGF0aW9uIGNvbnRleHQuCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3Ijc2V0dXBWYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldHVwVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotICAgIAotCVhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gbmV3IElubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsKCk7Ci0JWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCk7Ci0JCi0JeHNkR3JhbW1hclBvb2xzLnB1dChjb250ZXh0LCB4c2RHcmFtbWFyUG9vbCk7Ci0JeG1sR3JhbW1hclBvb2xzLnB1dChjb250ZXh0LCB4bWxHcmFtbWFyUG9vbCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIHR3byBncmFtbWFyIHBvb2xzIGZvciB0aGlzIFdTREwgdmFsaWRhdGlvbiBjb250ZXh0LgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yI3RlYXJkb3duVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyZG93blZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotICAgIFhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5yZW1vdmUoY29udGV4dCk7Ci0gICAgaWYoeHNkR3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgIHhzZEdyYW1tYXJQb29sLmNsZWFyKCk7Ci0gICAgWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLnJlbW92ZShjb250ZXh0KTsKLSAgICBpZih4bWxHcmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgeG1sR3JhbW1hclBvb2wuY2xlYXIoKTsKLSAgICAKLSAgICBzdXBlci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBJbnB1dFN0cmVhbSBpbnB1dHN0cmVhbSwgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCVhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0JWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLQkKLQlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkKLQlXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLQljb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFLCB4c2RHcmFtbWFyUG9vbCk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSwgeG1sR3JhbW1hclBvb2wpOwotCi0JSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gbnVsbDsKLQlpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLQl7Ci0JICB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpbnB1dHN0cmVhbSwgY29uZmlndXJhdGlvbik7Ci0JfQotCWVsc2UKLQl7Ci0JICB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQl9Ci0JCQkgICAgICAgIAotCXJldHVybiBjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQodmFscmVwb3J0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnQgYSBXU0RMIElWYWxpZGF0aW9uUmVwb3J0IHRvIGFuIFhNTCBWYWxpZGF0aW9uIFJlcG9ydC4KLSAgICogCi0gICAqIEBwYXJhbSByZXBvcnQgCi0gICAqIAkJVGhlIFdTREwgSVZhbGlkYXRpb25SZXBvcnQgdG8gY29udmVydC4KLSAgICogQHJldHVybiAKLSAgICogCQlBbiBYTUwgVmFsaWRhdGlvbiBSZXBvcnQgcmVwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIElWYWxpZGF0aW9uUmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25SZXBvcnQgY29udmVydFJlcG9ydFRvWE1MUmVwb3J0KElWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkKLSAgewotCVZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCA9IG5ldyBWYWxpZGF0aW9uSW5mbyhyZXBvcnQuZ2V0RmlsZVVSSSgpKTsKLQlJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcyA9IHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQlpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0JZm9yKGludCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyBpKyspCi0JewotCSAgY29udmVydE1lc3NhZ2UobWVzc2FnZXNbaV0sIGNvbnZlcnRlZFJlcG9ydCk7Ci0JfQotCi0JcmV0dXJuIGNvbnZlcnRlZFJlcG9ydDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnQgYSBXU0RMIElWYWxpZGF0aW9uTWVzc2FnZSBieSByZXBvcnRpbmcgaXQgaW4gdGhlIFZhbGlkYXRpb25JbmZvIG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIAkJVGhlIElWYWxpZGF0aW9uTWVzc2FnZSB0byBjb252ZXJ0LgotICAgKiBAcGFyYW0gY29udmVydGVkUmVwb3J0Ci0gICAqIAkJVGhlIFZhbGlkYXRpb25JbmZvIG9iamVjdCByZXByZXN0aW5nIHRoZSBjb252ZXJ0ZWQgcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29udmVydE1lc3NhZ2UoSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UsIFZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCkKLSAgewotCUxpc3QgbmVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlLmdldE5lc3RlZE1lc3NhZ2VzKCk7Ci0JaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotCXsKLQkgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlKG1lc3NhZ2VJdGVyLmhhc05leHQoKSkKLQkgIHsKLQkJY29udmVydE1lc3NhZ2UoKElWYWxpZGF0aW9uTWVzc2FnZSltZXNzYWdlSXRlci5uZXh0KCksIGNvbnZlcnRlZFJlcG9ydCk7Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotCSAgICBjb252ZXJ0ZWRSZXBvcnQuYWRkV2FybmluZyhtZXNzYWdlLmdldE1lc3NhZ2UoKSwgbWVzc2FnZS5nZXRMaW5lKCksIG1lc3NhZ2UuZ2V0Q29sdW1uKCksIG1lc3NhZ2UuZ2V0VVJJKCkpOwotCSAgZWxzZQotCQljb252ZXJ0ZWRSZXBvcnQuYWRkRXJyb3IobWVzc2FnZS5nZXRNZXNzYWdlKCksIG1lc3NhZ2UuZ2V0TGluZSgpLCBtZXNzYWdlLmdldENvbHVtbigpLCBtZXNzYWdlLmdldFVSSSgpKTsKLQl9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciNnZXRWYWxpZGF0b3JJRCgpCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbGlkYXRvcklEKCkKLSAgewotICAgIC8vIEJlY2F1c2UgdGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVsZWdhdGUsIHJldHVybiB0aGUgaWQgb2YgdGhlIHZhbGlkYXRvcgotICAgIC8vIHdoaWNoIGRlbGVnYXRlcyB0byB0aGlzIGNsYXNzLgotIAotICAgIHJldHVybiBXU0RMRGVsZWdhdGluZ1ZhbGlkYXRvci5jbGFzcy5nZXROYW1lKCk7IC8vJE5PTi1OTFMtMSQKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExEZWxlZ2F0aW5nVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMjBkNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuZGVsZWdhdGVzLkRlbGVnYXRpbmdWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBuYW1lIChjbGFzcyBuYW1lKSB3aGljaCB0aGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsKLSAqIHdpbGwgdXNlIHRvIGlkZW50aWZ5IHRoZSBXU0RMIHZhbGlkYXRvci4gVGhlIGFjdHVhbCBkZWxlZ2F0aW5nIHZhbGlkYXRvcgotICogZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSB0aGUgYmFzZSBjbGFzcy4gVGhlIGFjdHVhbCB2YWxpZGF0aW9uCi0gKiBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSBkZWxlZ2F0ZXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgY2xhc3MgYXMKLSAqIHRoZWlyIHRhcmdldC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExEZWxlZ2F0aW5nVmFsaWRhdG9yIGV4dGVuZHMgRGVsZWdhdGluZ1ZhbGlkYXRvcgotewotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMRGVsZWdhdGluZ1ZhbGlkYXRvcigpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM1YjZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLQotCi0vKioKLSAqIEFuIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuIFRoaXMgdmFsaWRhdG9yIGlzIHRoZSBkZWZhdWx0IHZhbGlkYXRvcgotICogdXNlZCBpbiB0aGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsuIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YKLSAqIHRoaXMgdmFsaWRhdG9yLiBXaGVuIGNyZWF0ZWQsIHRoaXMgdmFsaWRhdG9yIHJlZ2lzdGVycyBhbGwgZXh0ZW5zaW9uCi0gKiBVUkkgcmVzb2x2ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvciBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcgotewotCXByaXZhdGUgc3RhdGljIFdTRExWYWxpZGF0b3IgaW5zdGFuY2UgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yIHJlZ2lzdGVycyBhbGwgb2YgdGhlIFVSSSByZXNvbHZlcnMgZGVmaW5lZCB2aWEgdGhlCi0JICogV1NETCBVUkkgcmVzb2x2ZXIgZXh0ZW5zaW9uIHBvaW50IHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLiAKLQkgKiAKLQkgKi8KLQlwcm90ZWN0ZWQgV1NETFZhbGlkYXRvcigpCi0JewotICAgICAgc3VwZXIoKTsKLSAgICAgIFVSSVJlc29sdmVyV3JhcHBlciByZXNvbHZlciA9IG5ldyBVUklSZXNvbHZlcldyYXBwZXIoKTsKLSAgICAgIGFkZFVSSVJlc29sdmVyKHJlc29sdmVyKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyBFY2xpcHNlIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGlzIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBXU0RMVmFsaWRhdG9yIGdldEluc3RhbmNlKCkKLQl7Ci0JCWlmKGluc3RhbmNlID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2V4Y2VwdGlvbi9WYWxpZGF0ZVdTRExFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkMWI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb247Ci0KLS8qKgotICogQ3VzdG9tIGV4Y2VwdGlvbiBmb3IgV1NETCB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0JLyoqCi0gICAqIFJlcXVpcmVkIHNlcmlhbCB2ZXJzaW9uIHVpZC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NETEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkKLQl7Ci0JICBzdXBlcihtZXNzYWdlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YWU4OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvSUxvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmc7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgYSBzdGFuZGFyZCBsb2dnZXIgZm9yIHRoZSBXU0RMIHZhbGlkYXRvci4gCi0gKiBBbGxvd3MgZm9yIGxvZ2dpbmcgZXJyb3JzIGFuZCB3YXJuaW5ncy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJTG9nZ2VyCi17Ci0gIC8qKgotICAgKiBTZXZlcml0eSBlcnJvciBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9FUlJPUiA9IDA7Ci0gIAotICAvKioKLSAgICogU2V2ZXJpdHkgd2FybmluZyBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9XQVJOSU5HID0gMTsKLSAgCi0gIC8qKgotICAgKiBTZXZlcml0eSBpbmZvIGZvciBsb2dnaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgU0VWX0lORk8gPSAyOwotICAKLSAgLyoqCi0gICAqIFNldmVyaXR5IHZlcmJvc2UgZm9yIGxvZ2dpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBTRVZfVkVSQk9TRSA9IDM7Ci0gIAotICAvKioKLSAgICogTG9nIGEgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIAotICAgKiAJCVRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICogQHBhcmFtIHNldmVyaXR5Ci0gICAqIAkJVGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KTsKLSAgCi0gIC8qKgotICAgKiBMb2cgYSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgCi0gICAqIAkJVGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gc2V2ZXJpdHkKLSAgICogCQlUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlIAotICAgKiAJCVRoZSBleGNlcHRpb24gdG8gbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2E5ZDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL0xvZ2dlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nOwotCi0vKioKLSAqIFRoZSBsb2dnZXIgZmFjdG9yeSBhbGxvd3MgZm9yIHNpbXBsZSB1c2Ugb2Ygd2hhdGV2ZXIgbG9nZ2luZyBtZWNoYW5pc20gaXMgaW4KLSAqIHBsYWNlLiBUaGUgdG9vbCBjYW4gc3BlY2lmeSBhIGN1c3RvbSBJTG9nZ2VyLiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCByZXF1ZXN0IHRoZQotICogbG9nZ2VyIGZyb20gdGhpcyBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlckZhY3RvcnkKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLSAgcHJpdmF0ZSBJTG9nZ2VyIGxvZ2dlciAgPSBudWxsOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGUgbG9nZ2VyIGZhY3RvcnkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2Ugb2YgdGhlIGxvZ2dlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTG9nZ2VyRmFjdG9yeSBnZXRJbnN0YW5jZSgpCi0gIHsKLQlpZihmYWN0b3J5ID09IG51bGwpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBMb2dnZXJGYWN0b3J5KCk7Ci0JfQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBsb2dnZXIgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dnZXIKLSAgICogICAgICAgICAgICBUaGUgSUxvZ2dlciB0byB1c2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dnZXIoSUxvZ2dlciBsb2dnZXIpCi0gIHsKLSAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9nZ2VyLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBsb2dnZXIuCi0gICAqLwotICBwdWJsaWMgSUxvZ2dlciBnZXRMb2dnZXIoKQotICB7Ci0JaWYobG9nZ2VyID09IG51bGwpCi0JewotCSAgbG9nZ2VyID0gbmV3IFN0YW5kYXJkTG9nZ2VyKCk7Ci0JfQotCXJldHVybiBsb2dnZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9TdGFuZGFyZExvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGMxYjIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nOwotCi1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotLyoqCi0gKiBBIGxvZ2dlciB0aGF0IHdpbGwgcHJpbnQgbG9nIGluZm8gdG8gc3RhbmRhcmQgc3lzdGVtIG91dHB1dHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFuZGFyZExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIKLXsgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpIAotICB7ICAKLQlQcmludFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBTeXN0ZW0ub3V0OwotCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCXsKLQkgIG91dHB1dFN0cmVhbSA9IFN5c3RlbS5lcnI7Ci0JfQotICAgIG91dHB1dFN0cmVhbS5wcmludGxuKG1lc3NhZ2UpOwotICB9Ci0KLS8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBlcnJvciwgaW50IHNldmVyaXR5LCBUaHJvd2FibGUgdGhyb3dhYmxlKQotICB7Ci0JbG9nKGVycm9yLCBzZXZlcml0eSk7Ci0JbG9nKHRocm93YWJsZS50b1N0cmluZygpLCBzZXZlcml0eSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvSUV4dGVuc2libGVVUklSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjlmZGY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIHRoZSBXU0RMIHZhbGlkYXRvcidzIFVSSSByZXNvbHZlciBtZWNoYW5pc20uIFRoZSBVUkkgcmVzb2x2ZXIKLSAqIGlzIHVzZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgYW4gZW50aXR5LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIKLXsKLSAvKioKLSAgKiBSZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZW50aXR5IGRlc2NyaWJlZCBieSB0aGUgcHVibGljSWQgYW5kIHN5c3RlbUlkLgotICAqIAotICAqIEBwYXJhbSBiYXNlTG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSB1cmkuCi0gICogQHBhcmFtIHB1YmxpY0lkIEFuIG9wdGlvbmFsIHB1YmxpYyBpZGVudGlmaWVyIChpLmUuIG5hbWVzcGFjZSBuYW1lKSwgb3IgbnVsbCBpZiBub25lLgotICAqIEBwYXJhbSBzeXN0ZW1JZCBBbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkksIG9yIG51bGwgaWYgbm9uZS4KLSAgKiBAcGFyYW0gcmVzdWx0IFRoZSByZXN1bHQgb2YgdGhlIHJlc29sdXRpb24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvSVVSSVJlc29sdXRpb25SZXN1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmJmODZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhIFVSSSByZXNvbHV0aW9uIHJlc3VsdC4gVGhpcyBpbnRlcmZhY2UgaXMgbm90IG1lYW50IHRvCi0gKiBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJVVJJUmVzb2x1dGlvblJlc3VsdCAKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9naWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9naWNhbExvY2F0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dpY2FsTG9jYXRpb24gVGhlIGxvZ2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9naWNhbExvY2F0aW9uKFN0cmluZyBsb2dpY2FsTG9jYXRpb24pOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQaHlzaWNhbExvY2F0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcGFyYW0gcGh5c2ljYWxMb2NhdGlvbiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGh5c2ljYWxMb2NhdGlvbihTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdXRpb25SZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4ODk0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaG9sZHMgdGhlIFVSSSByZXNvbHV0aW9uIHJlc3VsdHMuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x1dGlvblJlc3VsdCBpbXBsZW1lbnRzIElVUklSZXNvbHV0aW9uUmVzdWx0Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24gPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdXRpb25SZXN1bHQoKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjZ2V0TG9naWNhbExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9naWNhbExvY2F0aW9uKCkKLSAgewotCXJldHVybiBsb2dpY2FsTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjc2V0TG9naWNhbExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dpY2FsTG9jYXRpb24oU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbikKLSAgewotCXRoaXMubG9naWNhbExvY2F0aW9uID0gbG9naWNhbExvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0I2dldFBoeXNpY2FsTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQaHlzaWNhbExvY2F0aW9uKCkKLSAgewotCXJldHVybiBwaHlzaWNhbExvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0I3NldFBoeXNpY2FsTG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBoeXNpY2FsTG9jYXRpb24oU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24pCi0gIHsKLQl0aGlzLnBoeXNpY2FsTG9jYXRpb24gPSBwaHlzaWNhbExvY2F0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZjM2MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTGF6eVVSTElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2c7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgbWFpbiBVUkkgcmVzb2x2ZXIgdGhhdCBjYWxscyBvdXQgdG8gYWxsIG9mIHRoZSByZWdpc3RlcmVkCi0gKiBleHRlcm5hbCBVUkkgcmVzb2x2ZXJzIHRvIGxvY2F0ZSBhbiBlbnRpdHkuIElmIG5vbmUgb2YgdGhlIGV4dGVybmFsIHJlc29sdmVycwotICogY2FuIGxvY2F0ZSB0aGUgZW50aXR5IHRoZSByZXNvbHZlciB3aWxsIGFzayB0aGUgaW50ZXJuYWwgV1NETCB2YWxpZGF0b3IgWE1MCi0gKiBjYXRhbG9nIHRvIHJlc29sdmUgdGhlIGxvY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXIgaW1wbGVtZW50cyBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyLCBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwcml2YXRlIExpc3QgZXh0VVJJUmVzb2x2ZXJzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuIAotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyKCkKLSAgewotICB9Ci0KLQotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpUmVzb2x2ZXIKLSAgICogICAgICAgICAgVGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRVUklSZXNvbHZlcihJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gICAgZXh0VVJJUmVzb2x2ZXJzTGlzdC5hZGQodXJpUmVzb2x2ZXIpOwotICB9Ci0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlciNyZXNvbHZlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXNvbHZlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkLCBJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQpCi0gIHsKLSAgICBJdGVyYXRvciByZXNvbHZlckl0ZXIgPSBleHRVUklSZXNvbHZlcnNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHJlc29sdmVyID0gKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIpcmVzb2x2ZXJJdGVyLm5leHQoKTsKLSAgICAgIGlmIChyZXNvbHZlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgc3lzdGVtSWQsIHJlc3VsdCk7Ci0gICAgICBpZiAocmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpICE9IG51bGwgJiYgIXJlc3VsdC5nZXRQaHlzaWNhbExvY2F0aW9uKCkuZXF1YWxzKHN5c3RlbUlkKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gbG9jYXRlIHRoZSByZXN1bHQgeWV0IGFzayB0aGUgaW50ZXJuYWwgWE1MCi0gICAgLy8gY2F0YWxvZy4KLSAgICBpZiAocmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpID09IG51bGwgJiYgKHB1YmxpY0lkICE9IG51bGwgfHwgc3lzdGVtSWQgIT0gbnVsbCkpCi0gICAgewotICAgICAgU3RyaW5nIHRlbXByZXN1bHQgPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgICBpZih0ZW1wcmVzdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgCXJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24odGVtcHJlc3VsdCk7Ci0gICAgCXJlc3VsdC5zZXRQaHlzaWNhbExvY2F0aW9uKHRlbXByZXN1bHQpOwotICAgICAgfQotICAgIH0KLSAgICBpZihyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQuc2V0TG9naWNhbExvY2F0aW9uKG5vcm1hbGl6ZShiYXNlTG9jYXRpb24sIHN5c3RlbUlkKSk7Ci0gICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLQlJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQ9IG5ldyBVUklSZXNvbHV0aW9uUmVzdWx0KCk7Ci0JcmVzb2x2ZShiYXNlTG9jYXRpb24sIHB1YmxpY0lkLCBzeXN0ZW1JZCwgcmVzdWx0KTsKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciByZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TGl0ZXJhbFN5c3RlbUlkKCk7Ci0gICAgaWYgKHB1YmxpY0lkID09IG51bGwgfHwgcHVibGljSWQuZXF1YWxzKCIiKSkKLSAgICB7Ci0gICAgICBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgSVVSSVJlc29sdXRpb25SZXN1bHQgcmVzdWx0ID0gcmVzb2x2ZShyZXNvdXJjZUlkZW50aWZpZXIuZ2V0QmFzZVN5c3RlbUlkKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgWE1MSW5wdXRTb3VyY2UgeG1sSW5wdXRTb3VyY2UgPSBudWxsOwotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMYXp5VVJMSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHJlc3VsdC5nZXRQaHlzaWNhbExvY2F0aW9uKCkpOwotICAgICAgeG1sSW5wdXRTb3VyY2UgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHJlc3VsdC5nZXRMb2dpY2FsTG9jYXRpb24oKSwgcmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpLCBpcywgbnVsbCk7Ci0gICAgfQotICAgIHJldHVybiB4bWxJbnB1dFNvdXJjZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE5vcm1hbGl6ZSB0aGUgc3lzdGVtSWQuIE1ha2UgaXQgYWJzb2x1dGUgd2l0aCByZXNwZWN0IHRvIHRoZQotICAgKiBiYXNlTG9jYXRpb24gaWYgbmVjZXNzYXJ5LgotICAgKiAKLSAgICogQHBhcmFtIGJhc2VMb2NhdGlvbiBUaGUgYmFzZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4KLSAgICogQHBhcmFtIHN5c3RlbUlkIFRoZSBzeXN0ZW0gaWQgb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHN5c3RlbSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAJaWYoc3lzdGVtSWQgPT0gbnVsbCkKLSAgCXsKLSAgCSAgcmV0dXJuIHN5c3RlbUlkOwotICAJfQotICAJLy8gVHJ5IHRvIGZpbmQgYSBzY2hlbWUgaW4gdGhlIHN5c3RlbUlkLgotICAJaW50IHNjaGVtYUxvYyA9IHN5c3RlbUlkLmluZGV4T2YoJzonKTsKLSAgCWlmKHNjaGVtYUxvYyAhPSAtMSAmJiBzeXN0ZW1JZC5jaGFyQXQoc2NoZW1hTG9jKzEpID09ICcvJykKLSAgCXsKLSAgCSAgLy8gQSBzY2hlbWUgaGFzIGJlZW4gZm91bmQuIFRoZSBzeXN0ZW1JZCBpcyBhbgotICAJICAvLyBhYnNvbHV0ZSBsb2NhdGlvbiBzbyByZXR1cm4gaXQuCi0gIAkgIHJldHVybiBzeXN0ZW1JZDsKLSAgCX0KLSAgCWlmKGJhc2VMb2NhdGlvbiA9PSBudWxsKQotICAJewotICAJICByZXR1cm4gYmFzZUxvY2F0aW9uOwotICAJfQotICAJCi0gIAlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gIAkKLSAgCS8vIEVuc3VyZSBhbGwgc2xhc2hlcyBpbiB0aGUgbG9jYXRpb25zIGFyZSAvLgotICAJYmFzZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uLnJlcGxhY2UoJ1xcJywnLycpOwotICAJc3lzdGVtSWQgPSBzeXN0ZW1JZC5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgCQotICAJLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBzZWN0aW9uIG9mIHRoZSBiYXNlTG9jYXRpb24uCi0JaW50IGxhc3RTbGFzaCA9IGJhc2VMb2NhdGlvbi5sYXN0SW5kZXhPZignLycpOwotICAJU3RyaW5nIHRlbXByZXN1bHQgPSBiYXNlTG9jYXRpb24uc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCsxKTsKLSAgCQotICAJaWYoc3lzdGVtSWQuc3RhcnRzV2l0aCgiLyIpKQotICAJewotICAJICBzeXN0ZW1JZCA9IHN5c3RlbUlkLnN1YnN0cmluZygxKTsKLSAgCX0KLSAgCQotICAJLy8gSm9pbiB0aGUgYmFzZSBsb2NhdGlvbiB3aXRoIHRoZSBzeXN0ZW1pZAotICAJdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQgKyBzeXN0ZW1JZDsKLSAgCQotICAJLy8gV2hpbGUgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIGEgLi4vIG9yIC4vIGNoYW5nZQotICAJLy8gdGhlIHJlc3VsdCBhbmQgdGhlIHJlbGF0aXZlIGxvY2F0aW9uLgotICAJaW50IGxvYzsKLSAgCXdoaWxlKChsb2MgPSB0ZW1wcmVzdWx0Lmxhc3RJbmRleE9mKCIuLyIpKSAhPSAtMSkKLSAgCXsKLSAgCSAgcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcobG9jICsgMikgKyByZXN1bHQ7Ci0gIAkgIGlmKHRlbXByZXN1bHQuY2hhckF0KGxvYyAtIDEpID09ICcuJykKLSAgCSAgewotICAJICAJaWYodGVtcHJlc3VsdC5jaGFyQXQobG9jIC0gMikgPT0gJy8nKQotICAJICAJewotICAJICAJICBTdHJpbmcgdGVtcCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYyAtIDIpOwotICAJICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLSAgCSAgCSAgaWYobG9jMiA9PSAtMSkKLSAgCSAgCSAgewotICAJICAJICAJLy8gSWYgdGhlcmUgaXMgbm8gb3RoZXIgLyBiZWZvcmUgdGhpcyB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBzY2hlbWU6Ly4uLwotICAJICAJICAJcmVzdWx0ID0gIi4uLyIgKyByZXN1bHQ7Ci0gIAkgIAkgIAl0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0gIAkgIAkgIH0KLSAgCSAgCSAgZWxzZQotICAJICAJICB7Ci0gIAkgIAkgIAkvLyBSZW1vdmUgdGhlIHNlY3Rpb24gdGhhdCBjb21lcyBiZWZvcmUgdGhpcyBvbmUgZnJvbSB0ZW1wcmVzdWx0IHVubGVzcyBpdCdzIC4uLy4KLSAgCSAgCSAgICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0gIAkgIAkgICAgaW50IG51bVNlY3RzVG9SZW1vdmUgPSAxOwotICAJICAJICAgIAotICAJICAJICAgIHdoaWxlKHRlbXByZXN1bHQuZW5kc1dpdGgoIi4vIikpCi0gIAkgIAkgICAgewotICAJICAJICAgICAgaW50IHRlbXByZXNsZW4gPSB0ZW1wcmVzdWx0Lmxlbmd0aCgpOwotICAJICAJICAgICAgaWYodGVtcHJlc2xlbiA+IDIgJiYgdGVtcHJlc3VsdC5jaGFyQXQodGVtcHJlc2xlbiAtMykgPT0gJy4nKQotICAJICAJICAgICAgewotICAJICAJICAgICAgCWlmKHRlbXByZXNsZW4gPiAzICYmIHRlbXByZXN1bHQuY2hhckF0KHRlbXByZXNsZW4gLSA0KSA9PSAnLycpCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgbnVtU2VjdHNUb1JlbW92ZSsrOwotICAJICAJICAgICAgCSAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIHRlbXByZXN1bHQubGVuZ3RoKCkgLTMpOwotICAJICAJICAgICAgICB9Ci0gIAkgIAkgICAgICAJZWxzZQotICAJICAJICAgICAgCXsKLSAgCSAgCSAgICAgIAkgIGJyZWFrOwotICAJICAJICAgICAgCX0KLSAgCSAgCSAgICAgIH0KLSAgCSAgCSAgICAgIGVsc2UKLSAgCSAgCSAgICAgIHsKLSAgCSAgCSAgICAgIAlpZih0ZW1wcmVzdWx0LmNoYXJBdCh0ZW1wcmVzdWx0Lmxlbmd0aCgpIC0yKSA9PSAnLycpCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIHRlbXByZXN1bHQubGVuZ3RoKCkgLTIpOwotICAJICAJICAgICAgCX0KLSAgCSAgCSAgICAgIAllbHNlCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgYnJlYWs7Ci0gIAkgIAkgICAgICAJfQotICAJICAJICAgICAgfQotICAJICAJICAgIH0KLSAgCSAgCSAgICAvLyBSZW1vdmUgdGhlIHNlY3Rpb25zLgotICAJICAJICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1TZWN0c1RvUmVtb3ZlOyBpKyspCi0gIAkgIAkgICAgewotICAJICAJICAgICAgU3RyaW5nIHRlbXAyID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCx0ZW1wcmVzdWx0Lmxlbmd0aCgpLTEpOwotICAJICAJICAgICAgaW50IGxvYzMgPSB0ZW1wMi5sYXN0SW5kZXhPZignLycpOwotICAJICAJICAgICAgaWYobG9jMyA9PSAtMSkKLSAgCSAgCSAgICAgIHsKLSAgCSAgCSAgICAgIAlicmVhazsKLSAgCSAgCSAgICAgIH0KLSAgCSAgCSAgICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MzKzEpOwotICAJICAJICAgIH0KLSAgCSAgCSAgfSAKLSAgCSAgCX0KLSAgCSAgCWVsc2UKLSAgCSAgCXsKLSAgCSAgCSAgLy8gVGhlIFVSSSBpcyBvZiB0aGUgZm9ybSBmaWxlOi8vc29tZWRpci4uLyBzbyBjb3B5IGl0IGFzIGlzCi0gIAkgIAkgIFN0cmluZyB0ZW1wID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0JICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLQkgIAkgIGlmKGxvYzIgPT0gLTEpCi0JICAJICB7Ci0JICAJICAJLy8gVGhlIFVSSSBtdXN0IGxvb2sgbGlrZSBmaWxlOi4uLyBvciAuLi8gc28gY29weSBvdmVyIHRoZSB3aG9sZSB0ZW1wcmVzdWx0LgotCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsbG9jKzIpICsgcmVzdWx0OwotCSAgCSAgCXRlbXByZXN1bHQgPSAiIjsKLQkgIAkgIH0KLQkgIAkgIGVsc2UKLQkgIAkgIHsKLQkgIAkgIAkvLyBDb3B5IG92ZXIgdGhlIHdob2xlIHNvbWVkaXIuLi8KLQkgIAkgIAlyZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZyhsb2MyICsgMSwgdGVtcHJlc3VsdC5sZW5ndGgoKSk7Ci0JICAJICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MyKzEpOwotCSAgCSAgfQotICAJICAJfQotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgewotICAJICAgIGlmKHRlbXByZXN1bHQuY2hhckF0KGxvYyAtMSApID09ICcvJykKLQkgIAl7Ci0gIAkgIAkgIC8vIFJlc3VsdCBpcyBvZiB0aGUgZm9ybSBmaWxlOi8vc29tZXRoaW5nLy4vc29tZXRoaW5nIHNvIHJlbW92ZSB0aGUgLi8KLSAgCSAgICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLGxvYyk7Ci0JICAJfQotICAJICAgIGVsc2UKLSAgCSAgICB7Ci0gIAkgICAgICAvLyBSZXN1bHQgVVJJIGlzIG9mIGZvcm0gZmlsZTovL3NvbWVkaXIuLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHNlY3Rpb24uCi0gICAgCSAgU3RyaW5nIHRlbXAgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MgLSAxKTsKLSAgCSAgCSAgaW50IGxvYzIgPSB0ZW1wLmxhc3RJbmRleE9mKCcvJyk7Ci0gIAkgIAkgIGlmKGxvYzIgPT0gLTEpCi0gIAkgIAkgIHsKLSAgCSAgCSAgCS8vIFRoZSBVUkkgbXVzdCBsb29rIGxpa2UgZmlsZTouLyBvciAuLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHRlbXByZXN1bHQuCi0gIAkgIAkgIAlyZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MpICsgcmVzdWx0OwotICAJICAJICAJdGVtcHJlc3VsdCA9ICIiOwotICAJICAJICB9Ci0gIAkgIAkgIGVsc2UKLSAgCSAgCSAgewotICAJICAJICAJLy8gQ29weSBvdmVyIHRoZSB3aG9sZSBzb21lZGlyLi8KLSAgCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKGxvYzIgKyAxLCB0ZW1wcmVzdWx0Lmxlbmd0aCgpKTsKLSAgCSAgCSAgICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jMisxKTsKLSAgCSAgCSAgfQotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJcmVzdWx0ID0gdGVtcHJlc3VsdCArIHJlc3VsdDsKLSAgCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjY2YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHZlckRlbGVnYXRlCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzbmFtZTsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcjsKLSAgcHJpdmF0ZSBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHJlc29sdmVyID0gbnVsbDsKLSAgCi0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gY2xhc3NuYW1lIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBVUkkgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBjbGFzc2xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShTdHJpbmcgY2xhc3NuYW1lLCBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikKLSAgewotICAgIHRoaXMuY2xhc3NuYW1lID0gY2xhc3NuYW1lOwotICAgIHRoaXMuY2xhc3Nsb2FkZXIgPSBjbGFzc2xvYWRlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGRlc2NyaWJlZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIGRlc2NyaWJlZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHVibGljIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0gICAgaWYocmVzb2x2ZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlciljbGFzc2xvYWRlci5sb2FkQ2xhc3MoY2xhc3NuYW1lKS5uZXdJbnN0YW5jZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlcilnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGNsYXNzbmFtZSkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZTIpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODRmN2M2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgbG9ncyB1c2luZyBBbnQncyBsb2cgbWV0aG9kLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciAKLXsKLSAgcHJpdmF0ZSBUYXNrIHRhc2sgPSBudWxsOwotCQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYW50VGFzawotICAgKiAJCVRoZSBBbnQgdGFzayB0aGlzIGxvZ2dlciB3aWxsIGFjdCBmb3IuCi0gICAqLwotICBwdWJsaWMgQW50TG9nZ2VyKFRhc2sgYW50VGFzaykKLSAgewotICAgIHRhc2sgPSBhbnRUYXNrOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotICAgIGludCBtc2dMZXZlbCA9IFByb2plY3QuTVNHX0VSUjsKLSAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9XQVJOSU5HKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfV0FSTjsKLSAgICB9Ci0gICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9JTkZPKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfSU5GTzsKLSAgICB9Ci0gICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfVkVSQk9TRTsKLSAgICB9Ci0gICAgdGFzay5sb2cobWVzc2FnZSwgbXNnTGV2ZWwpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0gIHsKLQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCWxvZyh0aHJvd2FibGUudG9TdHJpbmcoKSwgc2V2ZXJpdHkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0V4dGVuc2lvblZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ5NDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLS8qKgotICogQW4gZXh0ZW5zaW9uIEFudCBXU0RMIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIEV4dGVuc2lvblZhbGlkYXRvcgotewotICBwcml2YXRlIFN0cmluZyBjbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xhc3MoU3RyaW5nIGNsYXNzbmFtZSkKLSAgewotICAgIHRoaXMuY2xhc3NuYW1lID0gY2xhc3NuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jbGFzc25hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjA2NTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHByb3BlcnR5IHNldCBvbiB0aGUgV1NETCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eSBleHRlbmRzIFRhc2sgCi17Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqIAkJVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogCQlUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkKLSAgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQ0YTdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvVVJJUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogVGhlIFVSSVJlc29sdmVyIHRhc2sgYWxsb3dzIHNwZWNpZnlpbmcgYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlciB3aXRoCi0gKiB0aGUgV1NETFZhbGlkYXRlIEFudCB0YXNrLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXIgZXh0ZW5kcyBUYXNrCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXp6ID0gbnVsbDsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXp6KQotICB7Ci0gICAgdGhpcy5jbGF6eiA9IGNsYXp6OwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBleHRlbnNpb24gVVJJIHJlc29sdmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIHJldHVybiBjbGF6ejsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NGY3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuRGlyZWN0b3J5U2Nhbm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRFRETG9jYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRmlsZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5QYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlhNTENhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLQotLyoqCi0gKiBBbiBBbnQgdGFzayB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uIGEgZmlsZSBvciBhIHNldCBvZiBmaWxlcy4KLSAqIAotICogT3B0aW9ucwotICogLSBmaWxlIC0gdGhlIGZpbGUgdG8gcnVuIHZhbGlkYXRpb24gb24gKG9wdGlvbmFsIGlmIGZpbGVzZXQgaXMgdXNlZCkKLSAqIC0gZmFpbG9uZXJyb3IgLSBmYWlsIHRoZSBidWlsZCBwcm9jZXNzIG9uIHRoZSBmaXJzdCBmaWxlIHdpdGggYW4gZXJyb3IKLSAqIAotICogU3VwcG9ydGVkIE5lc3RlZCBFbGVtZW50cwotICogLSB4bWxjYXRhbG9nIC0gYW4geG1sIGNhdGFsb2cKLSAqIC0gZHRkICAgICAgICAtIGEgZHRkIHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gc2NoZW1hICAgICAtIGEgc2NoZW1hIHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gZW50aXR5ICAgICAtIGFuIGVudGl0eSBzcGVjaWZpY2F0aW9uIGFzIHdvdWxkIGFwcGVhciBpbiBhbiB4bWxjYXRhbG9nCi0gKiAtIGZpbGVzZXQgICAgLSBhIHNldCBvZiBmaWxlcyB0byB2YWxpZGF0ZQotICogLSB3c2RsMTF2YWxpZGF0b3IgLSBhbiBleHRlbnNpb24gV1NETCAxLjEgdmFsaWRhdG9yCi0gKiAtIHVyaXJlc29sdmVyIC0gYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlcgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGUgZXh0ZW5kcyBUYXNrCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVUlfUFJPUEVSVElFUyA9ICJ2YWxpZGF0ZXdzZGx1aSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX1BST1BFUlRJRVMgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5XU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEU7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0ZJTEVfU1BFQ0lGSUVEID0gIl9FUlJPUl9OT19GSUxFX1NQRUNJRklFRCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9ICJfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfQUNUSU9OX1ZBTElEQVRJTkdfRklMRSA9ICJfVUlfQUNUSU9OX1ZBTElEQVRJTkdfRklMRSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1VJX0VSUk9SX01BUktFUiA9ICJfVUlfRVJST1JfTUFSS0VSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfV0FSTklOR19NQVJLRVIgPSAiX1VJX1dBUk5JTkdfTUFSS0VSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfVkFMSUQgPSAiX1VJX1ZBTElEIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfSU5WQUxJRCA9ICJfVUlfSU5WQUxJRCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfRklMRSA9ICJfRVhDX1VOQUJMRV9UT19WQUxJREFURV9GSUxFIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1dTRExfRkFJTF9PTl9FUlJPUiA9ICJfRVhDX1dTRExfRkFJTF9PTl9FUlJPUiI7Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOwotCi0gIC8vIEdsb2JhbCBWYXJzCi0gIHByb3RlY3RlZCBMaXN0IGZpbGVzZXRzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgUGF0aCBjbGFzc3BhdGg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgeHNkRGlyZWN0b3J5ID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZmFpbE9uRXJyb3IgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFhNTENhdGFsb2cgZ2xvYmFsWE1MQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nKCk7Ci0gIHByb3RlY3RlZCBMaXN0IHdzZGwxMXZhbGlkYXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IGV4dHZhbGlkYXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IGV4dFVSSVJlc29sdmVycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgcHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdGUoKQotICB7Ci0JTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihuZXcgQW50TG9nZ2VyKHRoaXMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZWxscyB0aGUgV1NETCB2YWxpZGF0ZSB0YXNrIHRvIGZhaWwgdGhlIGJ1aWxkIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgotICAgKiAKLSAgICogQHBhcmFtIGZhaWxPbkVycm9yIFdoZXRoZXIgdG8gZmFpbCBvbiBlcnJvciBvciBub3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsT25FcnJvcihib29sZWFuIGZhaWxPbkVycm9yKQotICB7Ci0gICAgdGhpcy5mYWlsT25FcnJvciA9IGZhaWxPbkVycm9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBiYXNlIHNjaGVtYSBmaWxlcyBmb3IgdGhlIGNhdGFsb2cgYXJlIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZGlyIC0gdGhlIGRpcmVjdG9yeSBvZiB0aGUgYmFzZSBzY2hlbWEgZmlsZXMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYURpcihTdHJpbmcgZGlyKQotICB7Ci0gICAgeHNkRGlyZWN0b3J5ID0gZGlyOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBhIGZpbGUgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlIC0gYSBmaWxlIHRvIHJ1biB2YWxpZGF0aW9uIG9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGaWxlKFN0cmluZyBmaWxlKQotICB7Ci0gICAgdGhpcy5maWxlID0gZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBzZXQgb2YgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIEZpbGVTZXQgb2YgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbgotICAgKi8KLSAgcHVibGljIEZpbGVTZXQgY3JlYXRlRmlsZXNldCgpCi0gIHsKLSAgICBGaWxlU2V0IGZpbGVzZXQgPSBuZXcgRmlsZVNldCgpOwotICAgIGZpbGVzZXRzLmFkZChmaWxlc2V0KTsKLSAgICByZXR1cm4gZmlsZXNldDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gWE1MIGNhdGFsb2cgdG8gdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nIC0gdGhlIGNhdGFsb2cgdG8gYWRkIHRvIHRoZSB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRYTUxDYXRhbG9nKFhNTENhdGFsb2cgY2F0YWxvZykKLSAgewotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkQ29uZmlndXJlZFhNTENhdGFsb2coY2F0YWxvZyk7Ci0gIH0KLSAgLyoqCi0gICAqIEFkZCBhbiBleHRlbnNpb24gdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGV4dFZhbCBUaGUgZXh0ZW5zaW9uIHZhbGlkYXRvciB0byBhZGQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25maWd1cmVkRXh0ZW5zaW9uVmFsaWRhdG9yKEV4dGVuc2lvblZhbGlkYXRvciBleHRWYWwpCi0gIHsKLSAgICBleHR2YWxpZGF0b3JzLmFkZChleHRWYWwpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiBXU0RMIDEuMSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZXh0VmFsIFRoZSBleHRlbnNpb24gV1NETCAxLjEgdmFsaWRhdG9yIHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRXU0RMMTFWYWxpZGF0b3IoRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCkKLSAgewotICAgIHdzZGwxMXZhbGlkYXRvcnMuYWRkKGV4dFZhbCk7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBhbiBlbnRpdHkgb3V0c2lkZSBvZiBhbiBYTUxDYXRhbG9nLgotICAgKiAKLSAgICogQHJldHVybiBhIERURExvY2F0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBlbnRpdHkKLSAgICoqLwotICBwdWJsaWMgRFRETG9jYXRpb24gY3JlYXRlRW50aXR5KCkKLSAgewotICAgIERURExvY2F0aW9uIGR0ZExvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkRW50aXR5KGR0ZExvYyk7Ci0gICAgcmV0dXJuIGR0ZExvYzsKLSAgfQotCi0gIC8qKgotICAgKiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIGEgRFREIG91dHNpZGUgb2YgYW4gWE1MQ2F0YWxvZy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBEVERMb2NhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgRFRECi0gICAqKi8KLSAgcHVibGljIERURExvY2F0aW9uIGNyZWF0ZURURCgpCi0gIHsKLSAgICBEVERMb2NhdGlvbiBkdGRMb2MgPSBuZXcgRFRETG9jYXRpb24oKTsKLSAgICBnbG9iYWxYTUxDYXRhbG9nLmFkZEVudGl0eShkdGRMb2MpOwotICAgIHJldHVybiBkdGRMb2M7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBVUklSZXNvbHZlciBleHRlbnNpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIEEgVVJJUmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgY3JlYXRlVVJJUmVzb2x2ZXIoKQotICB7Ci0gICAgVVJJUmVzb2x2ZXIgdXJpcmVzID0gbmV3IFVSSVJlc29sdmVyKCk7Ci0gICAgZXh0VVJJUmVzb2x2ZXJzLmFkZCh1cmlyZXMuZ2V0Q2xhc3NOYW1lKCkpOwotICAgIHJldHVybiB1cmlyZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgV1NETCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvcGVydHkgCi0gICAqIAkJVGhlIHByb3BlcnR5IHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRQcm9wZXJ0eShQcm9wZXJ0eSBwcm9wZXJ0eSkKLSAgewotICAgIHByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4gVGFrZXMgdGhlIGZpbGUgYW5kIGZpbGVzZXQKLSAgICogYW5kIGNyZWF0ZXMgdGhlIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHZhbGlkYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0RmlsZUxpc3QoKQotICB7Ci0gICAgTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIGlmIGEgc3BlY2lmaWMgZmlsZSB3YXMgc3BlY2lmaWVkIGFkZCBpdCB0byB0aGUgbGlzdAotICAgIGlmIChmaWxlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGZpbGUpOwotICAgICAgICBmaWxlcy5hZGQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIEZpbGUgdGhlRmlsZSA9IG5ldyBGaWxlKGZpbGUpOwotICAgICAgICBpZighdGhlRmlsZS5pc0Fic29sdXRlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVGaWxlID0gbmV3IEZpbGUoZ2V0UHJvamVjdCgpLmdldEJhc2VEaXIoKSwgZmlsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGFic0ZpbGUgPSB0aGVGaWxlLnRvU3RyaW5nKCk7IAotICAgICAgICBpZighYWJzRmlsZS5zdGFydHNXaXRoKCJmaWxlOiIpKQotICAgICAgICB7Ci0gICAgICAgICAgYWJzRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBhYnNGaWxlOwotICAgICAgICB9Ci0gICAgICAgIGFic0ZpbGUgPSBhYnNGaWxlLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICBmaWxlcy5hZGQoYWJzRmlsZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gZ28gdGhyb3VnaCBhbGwgZmlsZXNldHMgc3BlY2lmaWVkIGFuZCBhZGQgYWxsIHRoZSBmaWxlcyB0byB0aGUgbGlzdAotICAgIEl0ZXJhdG9yIGZzSXRlciA9IGZpbGVzZXRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGZzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRmlsZVNldCBmaWxlc2V0ID0gKEZpbGVTZXQpZnNJdGVyLm5leHQoKTsKLSAgICAgIERpcmVjdG9yeVNjYW5uZXIgZHMgPSBmaWxlc2V0LmdldERpcmVjdG9yeVNjYW5uZXIoZmlsZXNldC5nZXRQcm9qZWN0KCkpOwotICAgICAgU3RyaW5nIGJhc2VkaXIgPSBkcy5nZXRCYXNlZGlyKCkudG9TdHJpbmcoKSArIEZpbGUuc2VwYXJhdG9yOwotCi0gICAgICBTdHJpbmdbXSBmaWxlbGlzdCA9IGRzLmdldEluY2x1ZGVkRmlsZXMoKTsKLSAgICAgIGludCBudW1GaWxlcyA9IGZpbGVsaXN0Lmxlbmd0aDsKLSAgICAgIGlmIChmaWxlcyAhPSBudWxsICYmIG51bUZpbGVzID4gMCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GaWxlczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGFic0ZpbGUgPSBGSUxFX1BST1RPQ09MICsgYmFzZWRpciArIGZpbGVsaXN0W2ldOwotICAgICAgICAgIGFic0ZpbGUgPSBhYnNGaWxlLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICAgIGZpbGVzLmFkZChhYnNGaWxlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmlsZXM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNleGVjdXRlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB0aHJvd3MgQnVpbGRFeGNlcHRpb24KLSAgewotICAgIC8vIHRoZSByZXNvdXJjZSBidW5kbGVzIGZvciB0aGUgdWkgYW5kIHZhbGlkYXRvciBhcmUgbmVlZGVkCi0gICAgTWVzc2FnZUdlbmVyYXRvciBtZXNzR2VuID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBSZXNvdXJjZUJ1bmRsZSB1aVJCID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFVJX1BST1BFUlRJRVMpOwotICAgICAgbWVzc0dlbiA9IG5ldyBNZXNzYWdlR2VuZXJhdG9yKHVpUkIpOwotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gaWYgdGhlIHJlc291cmNlIGJ1bmRsZXMgY2FuJ3QgYmUgb3BlbmVkIHdlIGNhbid0IHJlcG9ydCBlcnJvciBzbyB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiVW5hYmxlIHRvIG9wZW4gcmVzb3VyY2UgYnVuZGxlLiAiICsgZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBYTUwgY2F0YWxvZy4KLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLnNldEV4dGVuc2lvblhNTENhdGFsb2coWE1MQ2F0YWxvZ0ltcGwuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIFhNTENhdGFsb2dJbXBsIHhtbENhdGFsb2cgPSAoWE1MQ2F0YWxvZ0ltcGwpb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZy5nZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKTsKLSAgICB4bWxDYXRhbG9nLmFkZFhNTENhdGFsb2coZ2xvYmFsWE1MQ2F0YWxvZyk7Ci0gICAgCi0gICAgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICAvLyBTZXQgdGhlIHByb3BlcnRpZXMuCi0gICAgSXRlcmF0b3IgcHJvcGVydHlJdGVyID0gcHJvcGVydGllcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKHByb3BlcnR5SXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSAoUHJvcGVydHkpcHJvcGVydHlJdGVyLm5leHQoKTsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkocHJvcGVydHkuZ2V0TmFtZSgpLCBwcm9wZXJ0eS5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgCQotICAgIC8vIFNldCB0aGUgZXh0ZW5zaW9uIFVSSVJlc29sdmVycy4KLSAgICBJdGVyYXRvciByZXNvbHZlcnNJdGVyID0gZXh0VVJJUmVzb2x2ZXJzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocmVzb2x2ZXJzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU3RyaW5nIHJlc29sdmVyQ2xhc3MgPSAoU3RyaW5nKXJlc29sdmVyc0l0ZXIubmV4dCgpOwotICAgICAgd3NkbFZhbGlkYXRvci5hZGRVUklSZXNvbHZlcihuZXcgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShyZXNvbHZlckNsYXNzLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmdldFVSSVJlc29sdmVyKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gdmFsaWRhdGUuCi0gICAgTGlzdCBmaWxlcyA9IGdldEZpbGVMaXN0KCk7Ci0gICAgCi0gICAgLy8gUmVnaXN0ZXIgdGhlIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3JzLgotICAgIEl0ZXJhdG9yIHdzZGwxMWV4dEl0ZXIgPSB3c2RsMTF2YWxpZGF0b3JzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUod3NkbDExZXh0SXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCA9IChFeHRlbnNpb25WYWxpZGF0b3Ipd3NkbDExZXh0SXRlci5uZXh0KCk7Ci0gICAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKGV4dFZhbC5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKGV4dFZhbC5nZXROYW1lc3BhY2UoKSwgZGVsZWdhdGUpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZWdpc3RlciB0aGUgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gICAgSXRlcmF0b3IgZXh0SXRlciA9IGV4dHZhbGlkYXRvcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShleHRJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpb25WYWxpZGF0b3IgZXh0VmFsID0gKEV4dGVuc2lvblZhbGlkYXRvcilleHRJdGVyLm5leHQoKTsKLSAgICAgIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKGV4dFZhbC5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETEV4dGVuc2lvblZhbGlkYXRvcihleHRWYWwuZ2V0TmFtZXNwYWNlKCksIGRlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkgZmlsZXMgdG8gdmFsaWRhdGUuCi0gICAgaWYgKGZpbGVzID09IG51bGwgfHwgZmlsZXMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGxvZyhtZXNzR2VuLmdldFN0cmluZyhfRVJST1JfTk9fRklMRV9TUEVDSUZJRUQpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh4c2REaXJlY3RvcnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLmFkZFNjaGVtYURpcih4c2REaXJlY3RvcnkpOwotICAgIH0KLQotICAgIC8vIFZhbGlkYXRlIGFsbCB0aGUgZmlsZXMgc3BlY2lmaWVkLgotICAgIEl0ZXJhdG9yIGlGaWxlcyA9IGZpbGVzLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDb21tb24gc3RyaW5ncyBuZWVkZWQgaW4gdmFsaWRhdGlvbiBvdXRwdXQuCi0gICAgU3RyaW5nIGluZm9EZWxpbSA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIpOwotICAgIFN0cmluZyB2YWxpZCA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9WQUxJRCk7Ci0gICAgU3RyaW5nIGludmFsaWQgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfSU5WQUxJRCk7Ci0gICAgU3RyaW5nIGVycm9ybWFya2VyID0gbWVzc0dlbi5nZXRTdHJpbmcoX1VJX0VSUk9SX01BUktFUik7Ci0gICAgU3RyaW5nIHdhcm5pbmdtYXJrZXIgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfV0FSTklOR19NQVJLRVIpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG51bGw7Ci0gICAgYm9vbGVhbiBub3R2YWxpZCA9IHRydWU7Ci0gICAgd2hpbGUgKGlGaWxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgbm90dmFsaWQgPSBmYWxzZTsKLSAgICAgIFN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpaUZpbGVzLm5leHQoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXN1bHQuYXBwZW5kKGluZm9EZWxpbSkuYXBwZW5kKCJcbiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFLCBmaWxlbmFtZSkpLmFwcGVuZCgiIC0gIik7Ci0KLSAgICAgICAgSVZhbGlkYXRpb25SZXBvcnQgdmFsUmVwb3J0ID0gd3NkbFZhbGlkYXRvci52YWxpZGF0ZShmaWxlbmFtZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0KLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMgPSB2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0KLSAgICAgICAgaWYgKCF2YWxSZXBvcnQuaGFzRXJyb3JzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYXBwZW5kKHZhbGlkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYXBwZW5kKGludmFsaWQpOwotICAgICAgICAgIG5vdHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpLmFwcGVuZChpbmZvRGVsaW0pLmFwcGVuZCgiXG4iKTsKLQotICAgICAgICByZXN1bHQuYXBwZW5kKHJlcG9ydE1lc3NhZ2VzKG1lc3NhZ2VzLCBlcnJvcm1hcmtlciwgd2FybmluZ21hcmtlcikpOwotCi0gICAgICAgIGlmKG5vdHZhbGlkKQotICAgICAgICB7Ci0gICAgICAgICAgbG9nKHJlc3VsdC50b1N0cmluZygpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGxvZyhyZXN1bHQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgbG9nKG1lc3NHZW4uZ2V0U3RyaW5nKF9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX0ZJTEUsIGZpbGVuYW1lLCBlKSwgUHJvamVjdC5NU0dfRVJSKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5vdHZhbGlkICYmIGZhaWxPbkVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVG8gZmFpbCBvbiBlcnJvciwgdGhyb3cgYSBidWlsZCBleGNlcHRpb24uCi0gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKG1lc3NHZW4uZ2V0U3RyaW5nKF9FWENfV1NETF9GQUlMX09OX0VSUk9SKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLnJlc2V0KCk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBzdHJpbmcgd2l0aCBmb3JtYXR0ZWQgb3V0cHV0IGZvciB0aGUgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIGVycm9ybWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciBlcnJvciBtZXNzYWdlcy4KLSAgICogQHBhcmFtIHdhcm5pbmdtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgd2l0aCB0aGUgZm9ybWF0dGVkIG91dHB1dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVwb3J0TWVzc2FnZXMoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMsIFN0cmluZyBlcnJvcm1hcmtlciwgU3RyaW5nIHdhcm5pbmdtYXJrZXIpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgcmV0dXJuQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgaWYgKG1lc3NhZ2VzID09IG51bGwpCi0gICAgICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyBpKyspCi0gICAgewotICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLQotICAgICAgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH1pZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGVycm9ybWFya2VyOwotICAgICAgfQotICAgICAgZWxzZSBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gd2FybmluZ21hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9ICIiOwotICAgICAgfWlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gZXJyb3JtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSB3YXJuaW5nbWFya2VyOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gIiI7Ci0gICAgICB9aWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH0KLSAgICAgIHJldHVybkJ1ZmZlcgotICAgICAgICAuYXBwZW5kKHByZWZpeCkKLSAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRMaW5lKCkpCi0gICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0Q29sdW1uKCkpCi0gICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKQotICAgICAgICAuYXBwZW5kKCJcbiIpOwotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmY2JkZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9YTUxDYXRhbG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRFRETG9jYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZzsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV1NETCBWYWxpZGF0b3IncyBYTUwgQ2F0YWxvZyB0aGF0IHVzZXMgdGhlIFhNTCBDYXRhbG9nCi0gKiBmcm9tIGFudC4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZwotewotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZyB4bWxDYXRhbG9nID0gbmV3IFhNTENhdGFsb2coKTsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nI2FkZEVudHJ5VG9DYXRhbG9nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAgIERURExvY2F0aW9uIHJlc0xvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIHJlc0xvYy5zZXRMb2NhdGlvbihzeXN0ZW1JZCk7Ci0gICAgcmVzTG9jLnNldFB1YmxpY0lkKHB1YmxpY0lkKTsKLSAgICB4bWxDYXRhbG9nLmFkZEVudGl0eShyZXNMb2MpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkSWQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTb3VyY2UgaXMgPSB4bWxDYXRhbG9nLnJlc29sdmVFbnRpdHkocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXNvbHZlZElkID0gaXMuZ2V0U3lzdGVtSWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIHJlc291cmNlIGNhbid0IGJlIHJlc29sdmVkLgotICAgIH0KLSAgICAvLyBuZWVkcyB0byByZXR1cm4gbnVsbCBpZiBpdCBjYW4ndCByZXNvbHZlIHRoZSBpZAotICAgIGlmIChyZXNvbHZlZElkICE9IG51bGwgJiYgcmVzb2x2ZWRJZC5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIHJlc29sdmVkSWQgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZWRJZDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYSBjb25maWd1cmVkIFhNTCBDYXRhbG9nIHRvIHRoaXMgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nIEEgY29uZmlndXJlZCBYTUwgY2F0YWxvZyB0byBhZGQgdG8gdGhpcyBjYXRhbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkWE1MQ2F0YWxvZyhYTUxDYXRhbG9nIGNhdGFsb2cpCi0gIHsKLSAgICB4bWxDYXRhbG9nLmFkZENvbmZpZ3VyZWRYTUxDYXRhbG9nKGNhdGFsb2cpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9Mb2c0akxvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGEyMjRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgY3VzdG9tIFdTREwgdmFsaWRhdG9yIGxvZ2dlciB0aGF0IHBhc3NlcyBsb2dnaW5nIGV2ZW50cyB0byBsb2c0ai4KLSAqLwotcHVibGljIGNsYXNzIExvZzRqTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciAKLXsKLSAgLy8gVGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCB1c2luZyByZWZsZWN0aW9uIHRvIGF2b2lkIGEgY29taWxhdGlvbiBkZXBlbmRlbmN5Ci0gIC8vIG9uIGxvZzRqLgotICBwcm90ZWN0ZWQgT2JqZWN0IGxvZ2dlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZXJyb3IxID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCB3YXJuMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgaW5mbzEgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIGRlYnVnMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZXJyb3IyID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCB3YXJuMiA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgaW5mbzIgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIGRlYnVnMiA9IG51bGw7Ci0gIAotICBwdWJsaWMgTG9nNGpMb2dnZXIoKQotICB7Ci0JdHJ5Ci0gICAgewotCSAgQ2xhc3MgbG9nZ2VyQ2xhc3MgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKCJvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlciIpOwotCSAgQ2xhc3MgY2F0ZWdvcnlDbGFzcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoIm9yZy5hcGFjaGUubG9nNGouQ2F0ZWdvcnkiKTsKLQkgIE1ldGhvZCBnZXRMb2dnZXIgPSBsb2dnZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZ2V0TG9nZ2VyIiAsIG5ldyBDbGFzc1tde0NsYXNzLmNsYXNzfSk7Ci0JICBsb2dnZXIgPSBnZXRMb2dnZXIuaW52b2tlKGxvZ2dlckNsYXNzLCBuZXcgT2JqZWN0W117V1NETFZhbGlkYXRlLmNsYXNzfSk7Ci0JICBlcnJvcjEgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJlcnJvciIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIHdhcm4xID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgid2FybiIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIGluZm8xID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiaW5mbyIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIGRlYnVnMSA9IGNhdGVnb3J5Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlYnVnIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzc30pOwotCSAgZXJyb3IyID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZXJyb3IiICwgbmV3IENsYXNzW117T2JqZWN0LmNsYXNzLCBUaHJvd2FibGUuY2xhc3N9KTsKLQkgIHdhcm4yID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgid2FybiIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCSAgaW5mbzIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJpbmZvIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzcywgVGhyb3dhYmxlLmNsYXNzfSk7Ci0JICBkZWJ1ZzIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJkZWJ1ZyIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCX0KLQljYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpCi0JewotCSAgU3lzdGVtLmVyci5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIExvZzRqIExvZ2dlci4gRW5zdXJlIExvZzRKIGlzIG9uIHRoZSBjbGFzc3BhdGguIik7IAotCX0KLQljYXRjaChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkKLQl7Ci0JCQotCX0KLQljYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpCi0JewotCQkKLQl9Ci0JY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCXsKLQkJCi0JfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotCWlmKGxvZ2dlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIGVycm9yMS5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZX0pOwotCQl9Ci0gICAgICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLSAgICAgICAgewotICAgICAgICAgIHdhcm4xLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlfSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9JTkZPKQotICAgICAgICB7Ci0gICAgICAgICAgaW5mbzEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX1ZFUkJPU0UpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWJ1ZzEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgfQotICAgICAgY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLiAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0gIHsKLQlpZihsb2dnZXIgIT0gbnVsbCkKLQl7Ci0JICB0cnkKLQkgIHsKLQkgICAgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JICAgIHsKLQkJICBlcnJvcjIuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2UsIHRocm93YWJsZX0pOwotCSAgICB9Ci0JICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkgICAgewotCQkgIHdhcm4yLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0lORk8pCi0JICAgIHsKLQkJICBpbmZvMi5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZSwgdGhyb3dhYmxlfSk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotCSAgICB7Ci0JICAgICAgZGVidWcyLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgfQotCSAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBEbyBub3RoaW5nLgotCSAgfQotCSAgY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBEbyBub3RoaW5nLiAgCi0JICB9Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTU3YmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2dFbnRpdHlIb2xkZXI7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLQotLyoqCi0gKiBBIGNvbW1hbmRlIGxpbmUgdG9vbCB0byBydW4gV1NETCBWYWxpZGF0aW9uIG9uIGEgc2luZ2xlIG9yIG11bHRpcGxlIGZpbGVzLgotICogCi0gKiBPcHRpb25zCi0gKiAtc2NoZW1hRGlyIGRpcmVjdG9yeSAgICAgICA6IGEgZGlyZWN0b3J5IG9mIHNjaGVtYXMgdG8gbG9hZCBpbnRvIHRoZSBjYXRhbG9nCi0gKiAtc2NoZW1hIG5hbWVzcGFjZSBsb2NhdGlvbiA6IGEgc2NoZW1hIHRvIGxvYWQgaW50byB0aGUgcmVnaXN0cnkKLSAqIC13c2RsMTF2IGNsYXNzbmFtZSBuYW1lc3BhY2UgcmVzb3VyY2VidW5kbGUgOiByZWdpc3RlciBhIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbG9hZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZSB3aXRoIHRoZSBnaXZlbiByZXNvdXJjZWJ1bmRsZQotICogLXdzaXYgdmFsaWRhdG9yQ2xhc3MgbmFtZXNwYWNlIHByb3BlcnRpZXNmaWxlIDogcmVnaXN0ZXIgYSBXUy1JIHZhbGlkYXRvcgotICogLXVyaXJlc29sdmVyIFVSSVJlc29sdmVyQ2xhc3MgOiByZWdpc3RlciBhbiBleHRlbnNpb24gVVJJIHJlc29sdmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGUKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZTovLy8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX1BST1BFUlRJRVMgPQotICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLldTRExfVkFMSURBVE9SX1BST1BFUlRJRVNfRklMRTsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1dTREwxMVZBTCA9ICItd3NkbDExdiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX0VYVFZBTCA9ICItZXh0diI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1NDSEVNQURJUiA9ICItc2NoZW1hRGlyIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fU0NIRU1BID0gIi1zY2hlbWEiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9VUklSRVNPTFZFUiA9ICItdXJpcmVzb2x2ZXIiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9MT0dHRVIgPSAiLWxvZ2dlciI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1BST1BFUlRZID0gIi1EIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fVkVSQk9TRSA9ICItdmVyYm9zZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1ZFUkJPU0VfU0hPUlQgPSAiLXYiOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklOR19FTVBUWSA9ICIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX1NQQUNFID0gIiAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX0RBU0ggPSAiLSI7Ci0gIAotICBTdHJpbmcgd29ya2luZ2RpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsKLSAgCi0gIC8vcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdG9yIHdzZGxWYWxpZGF0b3IgPSBudWxsOwotICBwcm90ZWN0ZWQgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCB3c2RsRmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHZhbGlkYXRvclJCID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdGUoKQotICB7Ci0gIAl3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLSAgCWNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIAkKLSAgICB0cnkKLSAgICB7Ci0gICAgICB2YWxpZGF0b3JSQiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUFJPUEVSVElFUyk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJWYWxpZGF0aW9uIGZhaWxlZDogVW5hYmxlIHRvIGxvYWQgdGhlIFdTREwgdmFsaWRhdG9yIHByb3BlcnRpZXMgZmlsZS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGVzIHNwZWNpZmllZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlKCkKLSAgewotCUlMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQotCWludCBudW1JbnZhbGlkID0gMDsKLQotCUl0ZXJhdG9yIGZpbGVzSXRlciA9IHdzZGxGaWxlcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlc0l0ZXIuaGFzTmV4dCgpKQotCXsKLQkgIFN0cmluZyB3c2RsRmlsZSA9IChTdHJpbmcpZmlsZXNJdGVyLm5leHQoKTsKLQkgIElWYWxpZGF0aW9uUmVwb3J0IHZhbFJlcG9ydCA9IHZhbGlkYXRlRmlsZSh3c2RsRmlsZSk7Ci0KLQkgIGlmKHZhbFJlcG9ydC5oYXNFcnJvcnMoKSkKLQkgIHsKLQkgICAgbnVtSW52YWxpZCsrOwotCSAgICBsb2dnZXIubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9GSUxFX0lOVkFMSUQsIG5ldyBPYmplY3RbXXt3c2RsRmlsZX0pLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkgICAgLy9sb2dnZXIubG9nKFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIsIElMb2dnZXIuU0VWX0VSUk9SKTsKLQkgICAgbG9nZ2VyLmxvZyhnZXRNZXNzYWdlcyh2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkpLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkgIH0KLQkgIGVsc2UgaWYodmVyYm9zZSkKLQkgIHsKLQkgICAgbG9nZ2VyLmxvZyhNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfRklMRV9WQUxJRCwgbmV3IE9iamVjdFtde3dzZGxGaWxlfSksIElMb2dnZXIuU0VWX1ZFUkJPU0UpOwotCSAgfQotCX0KLSAgICAKLSAgICAvLyBMb2cgdGhlIHN1bW1hcnkuCi0gICAgbG9nZ2VyLmxvZyhNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIod3NkbEZpbGVzLnNpemUoKSksIG5ldyBJbnRlZ2VyKG51bUludmFsaWQpfSksIElMb2dnZXIuU0VWX0lORk8pOwotICB9Ci0KLSAgLyoqCi0gICAqIFJ1biBXU0RMIHZhbGlkYXRpb24gb24gYSBnaXZlbiBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIAotICAgKiAJCVRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIElWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlRmlsZShTdHJpbmcgZmlsZW5hbWUpCi0gIHsJCi0gICAgLy8gUmVzb2x2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIGZpbGVVUkwgPSBTdHJpbmdVdGlscy5nZXRVUkwobmV3IFVSTChGSUxFX1BSRUZJWCArIHdvcmtpbmdkaXIgKyAiLyIpLCBmaWxlbmFtZSk7Ci0gICAgICBmaWxlbG9jYXRpb24gPSBmaWxlVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBEbyBub3RoaW5nLiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCBoYW5kbGUgdGhlIGVycm9yLgotICAgICAgLy9Mb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFLCBuZXcgT2JqZWN0W117ZmlsZW5hbWV9KSwgSUxvZ2dlci5TRVZfRVJST1IpOwotICAgIH0KLSAgICAKLSAgICAvLyBSdW4gdmFsaWRhdGlvbiBvbiB0aGUgZmlsZS4KLSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxSZXBvcnQgPSB3c2RsVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGVsb2NhdGlvbiwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIHZhbFJlcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgU3RyaW5nIHdpdGggZm9ybWF0dGVkIG91dHB1dCBmb3IgYSBsaXN0IG9mIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VzIAotICAgKiAJCVRoZSBtZXNzYWdlcyB0byBnZXQuCi0gICAqIEByZXR1cm4gCi0gICAqIAkJQSBzdHJpbmcgd2l0aCBhIGZvcm1hdHRlZCBsaXN0IG9mIHRoZSBtZXNzYWdlcy4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TWVzc2FnZXMoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgb3V0cHV0QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgbWVzc2FnZXMgdGhhdCBsb29rcyBsaWtlCi0gICAgICAvLyBFUlJPUiAxOjEgRXJyb3IgbWVzc2FnZSBjb250ZW50Ci0gICAgICBpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0gICAgICBTdHJpbmcgbWFya2VyID0gbnVsbDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLSAgICAgICAgaW50IHNldmVyaXR5ID0gbWVzc2FnZS5nZXRTZXZlcml0eSgpOwotICAgICAgICBpZiAoc2V2ZXJpdHkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIG1hcmtlciA9IFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgICB7Ci0gICAgICAgICAgbWFya2VyID0gV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1hcmtlciA9IFNUUklOR19FTVBUWTsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXRCdWZmZXIKLSAgICAgICAgICAuYXBwZW5kKG1hcmtlcikKLSAgICAgICAgICAuYXBwZW5kKFNUUklOR19TUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TGluZSgpKQotICAgICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRDb2x1bW4oKSkKLSAgICAgICAgICAuYXBwZW5kKFNUUklOR19TUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgaWYoaSAhPSBudW1NZXNzYWdlcyAtMSkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dEJ1ZmZlci5hcHBlbmQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG91dHB1dEJ1ZmZlci50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtYWluIGVudHJ5IHBvaW50IGludG8gdGhlIGNvbW1hbmQgbGluZSB0b29sLiAKLSAgICogQ2hlY2tzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCByZWdpc3RlcnMgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycyBhbmQgcnVucyB2YWxpZGF0aW9uIG9uIHRoZQotICAgKiBsaXN0IG9mIGZpbGVzLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MgLSB0aGUgYXJndW1lbnRzIHRvIHRoZSB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICAvLyBObyBhcmd1bWVudHMgc3BlY2lmaWVkLiBQcmludCB1c2FnZS4KLQlpZiAoYXJncy5sZW5ndGggPCAxKQotICAgIHsKLQkgIFN5c3RlbS5lcnIucHJpbnRsbihXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fRVJST1JfV1JPTkdfQVJHVU1FTlRTKTsKLQkgIFN5c3RlbS5leGl0KDApOwotCX0KLQkKLQlXU0RMVmFsaWRhdGUgd3NkbFZhbGlkYXRlID0gbmV3IFdTRExWYWxpZGF0ZSgpOwotCXdzZGxWYWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl3c2RsVmFsaWRhdGUudmFsaWRhdGUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGZvciB0aGlzIFdTRExWYWxpZGF0ZSB0YXNrIGFuZAotICAgKiBjb25maWd1cmUgdmFsaWRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqIAkJVGhlIGFyZ3VtZW50cyBzcGVjaWZpZWQgZm9yIHRoaXMgdGFzay4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBhcnNlQXJndW1lbnRzKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLQlpbnQgbnVtYXJncyA9IGFyZ3MubGVuZ3RoOwotCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1hcmdzOyBpKyspCi0JewotCSAgU3RyaW5nIHBhcmFtID0gYXJnc1tpXTsKLQotCSAgLy8gUmVnaXN0ZXJpbmcgYW4gZXh0ZW5zaW9uIHZhbGlkYXRvciBvciBXU0RMIDEuMSBleHRlbnNpb24gdmFsaWRhdG9yLgotCSAgaWYgKHBhcmFtLmVxdWFscyhXU0RMVmFsaWRhdGUuUEFSQU1fV1NETDExVkFMKSAKLQkJCSAgfHwgcGFyYW0uZXF1YWxzKFdTRExWYWxpZGF0ZS5QQVJBTV9FWFRWQUwpKQotCSAgewotCSAgICBTdHJpbmcgbmFtZXNwYWNlID0gYXJnc1srK2ldOwotCSAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKFdTRExWYWxpZGF0ZS5TVFJJTkdfREFTSCkpCi0JICAgIHsKLQkgICAgICBTdHJpbmcgdmFsaWRhdG9yQ2xhc3MgPSBhcmdzWysraV07Ci0KLQkgICAgICBpZiAoIXZhbGlkYXRvckNsYXNzLnN0YXJ0c1dpdGgoV1NETFZhbGlkYXRlLlNUUklOR19EQVNIKSkKLQkgICAgICB7Ci0JICAgICAgICBpZihwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9XU0RMMTFWQUwpKQotCSAgICAgICAgeyAgCi0JICAgICAgICAgIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MpOwotCSAgICAgICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZihwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9FWFRWQUwpKQotCSAgICAgICAgewotCSAgICAgICAgICBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSh2YWxpZGF0b3JDbGFzcyk7Ci0JICAgICAgICAgIHdzZGxWYWxpZGF0b3IucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgICBlbHNlCi0JICAgICAgewotCSAgICAgICAgaS0tOwotCSAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBpLS07Ci0JICAgIH0gIAotCSAgfQotCSAgLy8gUmVnaXN0ZXIgYSBkaXJlY3Rvcnkgd2l0aCBzY2hlbWFzLgotCSAgZWxzZSBpZiAocGFyYW0uZXF1YWxzSWdub3JlQ2FzZShXU0RMVmFsaWRhdGUuUEFSQU1fU0NIRU1BRElSKSkKLQkgIHsKLQkgICAgU3RyaW5nIHhzZERpciA9IGFyZ3NbKytpXTsKLQkgICAgWE1MQ2F0YWxvZy5hZGRTY2hlbWFEaXIoeHNkRGlyKTsKLQkgIH0KLQkgIC8vIFJlZ2lzdGVyIGEgc2NoZW1hLgotCSAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIHdpdGggYW4gWE1MIGNhdGFsb2cuCi0JICBlbHNlIGlmIChwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9TQ0hFTUEpKQotCSAgewotCSAgICBTdHJpbmcgcHVibGljaWQgPSBhcmdzWysraV07Ci0JICAgIFN0cmluZyBzeXN0ZW1pZCA9IGFyZ3NbKytpXTsKLQkgICAgWE1MQ2F0YWxvZy5hZGRFbnRpdHkobmV3IFhNTENhdGFsb2dFbnRpdHlIb2xkZXIocHVibGljaWQsIHN5c3RlbWlkKSk7Ci0JICB9Ci0JICAvLyBSZWdpc3RlciBhIFVSSSByZXNvbHZlci4gCi0JICAvLyBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHRleHQgVUkuCi0JICBlbHNlIGlmKHBhcmFtLmVxdWFsc0lnbm9yZUNhc2UoUEFSQU1fVVJJUkVTT0xWRVIpKQotCSAgewotCSAgICBTdHJpbmcgcmVzb2x2ZXJDbGFzcyA9IGFyZ3NbKytpXTsKLQkgICAgd3NkbFZhbGlkYXRvci5hZGRVUklSZXNvbHZlcihuZXcgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShyZXNvbHZlckNsYXNzLCBudWxsKS5nZXRVUklSZXNvbHZlcigpKTsKLQkgIH0KLQkgIC8vIENvbmZpZ3VyZSB0aGUgbG9nZ2VyLgotCSAgZWxzZSBpZihwYXJhbS5lcXVhbHMoUEFSQU1fTE9HR0VSKSkKLQkgIHsKLQkgICAgU3RyaW5nIGxvZ2dlckNsYXNzU3RyaW5nID0gYXJnc1srK2ldOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIENsYXNzIGxvZ2dlckNsYXNzID0gV1NETFZhbGlkYXRlLmNsYXNzLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGxvZ2dlckNsYXNzU3RyaW5nKTsKLQkgICAgICBJTG9nZ2VyIGxvZ2dlciA9IChJTG9nZ2VyKWxvZ2dlckNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgICB9Ci0JICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgICAgU3lzdGVtLmVyci5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9MT0FESU5HX0xPR0dFUiwgbmV3IE9iamVjdFtde2xvZ2dlckNsYXNzU3RyaW5nfSkpOwotCSAgICB9Ci0JICB9Ci0JICAvLyBTZXQgcHJvcGVydGllcy4KLQkgIGVsc2UgaWYocGFyYW0uc3RhcnRzV2l0aChQQVJBTV9QUk9QRVJUWSkpCi0JICB7Ci0JICAgIGludCBzZXBhcmF0b3IgPSBwYXJhbS5pbmRleE9mKCc9Jyk7Ci0JICAgIFN0cmluZyBuYW1lID0gcGFyYW0uc3Vic3RyaW5nKDIsIHNlcGFyYXRvcik7Ci0JICAgIFN0cmluZyB2YWx1ZSA9IHBhcmFtLnN1YnN0cmluZyhzZXBhcmF0b3IrMSk7Ci0JICAgIGNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCSAgfQotCSAgLy8gU2V0IHZlcmJvc2U7Ci0JICBlbHNlIGlmKHBhcmFtLmVxdWFscyhQQVJBTV9WRVJCT1NFKSB8fCBwYXJhbS5lcXVhbHMoIFBBUkFNX1ZFUkJPU0VfU0hPUlQpKQotCSAgewotCQl2ZXJib3NlID0gdHJ1ZTsKLQkgIH0KLQkgIC8vIGEgZmlsZSB0byB2YWxpZGF0ZQotCSAgZWxzZQotCSAgewotCSAgICBpZighcGFyYW0uc3RhcnRzV2l0aChXU0RMVmFsaWRhdGUuU1RSSU5HX0RBU0gpKQotCSAgICB7ICAKLQkgICAgICB3c2RsRmlsZXMuYWRkKHBhcmFtKTsKLQkgICAgfQotCSAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YWM4ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8qKgotICogU3RyaW5ncyB1c2VkIGJ5IHRoZSBXU0RMVmFsaWRhdGUgdGV4dCBVSS4KLSAqIFRoaXMgY2xhc3MgbWltaWNzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIE9TR0kgTkxTIGNsYXNzIGZvciBjb252ZW5pZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC53c2RsdmFsaWRhdGV0ZXh0dWkiOy8vJE5PTi1OTFMtMSQKLQotCS8vIEVycm9yIG1lc3NhZ2VzLgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9FUlJPUl9XUk9OR19BUkdVTUVOVFMgPSAiX0VSUk9SX1dST05HX0FSR1VNRU5UUyI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX0xPQURJTkdfTE9HR0VSID0gIl9FUlJPUl9MT0FESU5HX0xPR0dFUiI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUgPSAiX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUiOwotCQotCS8vIFZhbGlkYXRpb24gbWVzc2FnZXMuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9ICJfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRklMRV9WQUxJRCA9ICJfVUlfRklMRV9WQUxJRCI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZJTEVfSU5WQUxJRCA9ICJfVUlfRklMRV9JTlZBTElEIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfTUFSS0VSID0gIl9VSV9FUlJPUl9NQVJLRVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9XQVJOSU5HX01BUktFUiA9ICJfVUlfV0FSTklOR19NQVJLRVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9WQUxJREFUSU9OX1NVTU1BUlkgPSAiX1VJX1ZBTElEQVRJT05fU1VNTUFSWSI7Ci0KLQlzdGF0aWMgCi0JewotCQkvLyBsb2FkIG1lc3NhZ2UgdmFsdWVzIGZyb20gYnVuZGxlIGZpbGUKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQkJX0VSUk9SX1dST05HX0FSR1VNRU5UUyA9IGJ1bmRsZS5nZXRTdHJpbmcoU3RyaW5nLnZhbHVlT2YoX0VSUk9SX1dST05HX0FSR1VNRU5UUykpOwotCQlfRVJST1JfTE9BRElOR19MT0dHRVIgPSBidW5kbGUuZ2V0U3RyaW5nKF9FUlJPUl9MT0FESU5HX0xPR0dFUik7Ci0JCV9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFID0gYnVuZGxlLmdldFN0cmluZyhfRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSk7Ci0JCV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgPSBidW5kbGUuZ2V0U3RyaW5nKF9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIpOwotCQlfVUlfRklMRV9WQUxJRCA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0ZJTEVfVkFMSUQpOwotCQlfVUlfRklMRV9JTlZBTElEID0gYnVuZGxlLmdldFN0cmluZyhfVUlfRklMRV9JTlZBTElEKTsKLQkJX1VJX0VSUk9SX01BUktFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0VSUk9SX01BUktFUik7Ci0JCV9VSV9XQVJOSU5HX01BUktFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX1dBUk5JTkdfTUFSS0VSKTsKLQkJX1VJX1ZBTElEQVRJT05fU1VNTUFSWSA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX1ZBTElEQVRJT05fU1VNTUFSWSk7Ci0JfQotCi0JcHJpdmF0ZSBXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcygpIAotCXsKLQkJLy8gY2Fubm90IGNyZWF0ZSBuZXcgaW5zdGFuY2UKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC93c2RsdmFsaWRhdGV0ZXh0dWkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGVkODJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBNZXNzYWdlcyBmb3IgdGhlIFdTRExWYWxpZGF0ZSB0ZXh0IFVJIGludGVyZmFjZS4KLQotIyBFcnJvciBtZXNzYWdlcwotX0VSUk9SX1dST05HX0FSR1VNRU5UUyAgICAgPSBVc2FnZTogV1NETFZhbGlkYXRlIFstd3NkbDExdiBuYW1lc3BhY2UgY2xhc3NuYW1lXSBbLWV4dHYgbmFtZXNwYWNlIGNsYXNzbmFtZV0gWy1EbmFtZT12YWx1ZV0gZmlsZW5hbWVcblwKLVwgIC13c2RsMTF2XHRSZWdpc3RlciB0aGUgV1NETCAxLjEgdmFsaWRhdG9yIHNwZWNpZmllZCBieSBjbGFzc25hbWVcblwKLVx0XHRmb3IgbmFtZXNwYWNlLlxuXAotXCAgLWV4dHZcdFx0UmVnaXN0ZXIgdGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciBzcGVjaWZpZWQgYnlcblwKLVx0XHRjbGFzc25hbWUgZm9yIG5hbWVzcGFjZS5cblwKLVwgIC12ZXJib3NlLCAtdlx0UHJpbnQgb3V0IHZlcmJvc2UgaW5mb3JtYXRpb24uXG5cCi1cICAtbG9nZ2VyXHRTcGVjaWZ5IGFuIGFsdGVybmF0ZSBsb2dnZXIgdGhhdCBpbXBsZW1lbnRzXG5cCi1cdFx0b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXJcblwKLVwgIC1EXHRcdFNwZWNpZnkgYSBwcm9wZXJ0eSB3aXRoIG5hbWUgYW5kIHZhbHVlLiAgCi1fRVJST1JfTE9BRElOR19MT0dHRVIgICAgICA9IFVuYWJsZSB0byBsb2FkIGxvZ2dlciBjbGFzcyB7MH0uCi1fRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSA9IFVuYWJsZSB0byByZWFkIGZpbGUgezB9LgotCi0jIFZhbGlkYXRpb24gbWVzc2FnZXMKLV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1fVUlfRklMRV9JTlZBTElEICAgICAgICAgICA9IHswfSAtIE5vdCB2YWxpZAotX1VJX0ZJTEVfVkFMSUQgICAgICAgICAgICAgPSB7MH0gLSBWYWxpZAotX1VJX0VSUk9SX01BUktFUiAgICAgICAgICAgPSBFUlJPUgotX1VJX1dBUk5JTkdfTUFSS0VSICAgICAgICAgPSBXQVJOSU5HCi1fVUlfVkFMSURBVElPTl9TVU1NQVJZICAgICA9IHswfSBmaWxlcyB2YWxpZGF0ZWQuIHsxfSBmaWxlcyByZXBvcnRlZCBlcnJvcnMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvRXJyb3JNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhMTRiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gaG9sZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLiBJbiB0aGlzIGNhc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBhIGdlbmVyaWMKLSAqIHRlcm0gZm9yIGFueSBraW5kIG9mIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yTWVzc2FnZQotewotICBwcml2YXRlIGludCBlcnJvckxpbmUsIGVycm9yQ29sdW1uLCBzZXZlcml0eTsKLSAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JTdHJpbmcsIHVyaTsKLSAgcHJpdmF0ZSBpbnQgc3RhcnRPZmZzZXQgPSAtMTsKLSAgcHJpdmF0ZSBpbnQgZW5kT2Zmc2V0ID0gLTE7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yTWVzc2FnZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBtZXNzYWdlIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0RXJyb3JNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nIGVycm9yKQotICB7Ci0gICAgZXJyb3JTdHJpbmcgPSBlcnJvcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBzZWUgI2dldFNldmVyaXR5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdXNpbmcgc3RyaW5nIG5hbWVzIGZvciB0aGUgc2V2ZXJpdHkuCi0gICAqIAotICAgKiBAcGFyYW0gc2V2ZXJpdHkgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2V2ZXJpdHkuCi0gICAqIEBzZWUgI2dldFNldmVyaXR5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShTdHJpbmcgc2V2ZXJpdHkpCi0gIHsKLSAgICBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJ3YXJuaW5nIikpCi0gICAgewotICAgICAgdGhpcy5zZXZlcml0eSA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNldmVyaXR5LmVxdWFscygiZXJyb3IiKSkKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJmYXRhbCIpKQotICAgIHsKLSAgICAgIHRoaXMuc2V2ZXJpdHkgPSAyOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBpcyBsb2NhdGVkLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIEBzZWUgI2dldEVycm9yTGluZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JMaW5lKGludCBsaW5lKQotICB7Ci0gICAgZXJyb3JMaW5lID0gbGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIEBzZWUgI2dldEVycm9yQ29sdW1uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckNvbHVtbihpbnQgY29sdW1uKQotICB7Ci0gICAgZXJyb3JDb2x1bW4gPSBjb2x1bW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIEBzZWUgI3NldEVycm9yTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNldmVyaXR5IG9mIHRoZSBlcnJvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNldmVyaXR5IG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0U2V2ZXJpdHkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U2V2ZXJpdHkoKQotICB7Ci0gICAgcmV0dXJuIHNldmVyaXR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIEBzZWUgI3NldEVycm9yTGluZQotICAgKi8KLSAgcHVibGljIGludCBnZXRFcnJvckxpbmUoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0RXJyb3JDb2x1bW4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGVycm9yQ29sdW1uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHN0YXJ0IG9mZnNldC4KLSAgICogCi0gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgb2Zmc2V0LgotICAgKiBAc2VlICNnZXRFcnJvclN0YXJ0T2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvclN0YXJ0T2Zmc2V0KGludCBzdGFydCkKLSAgewotICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3Igc3RhcnQgb2Zmc2V0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3Igc3RhcnQgb2Zmc2V0LgotICAgKiBAc2VlICNzZXRFcnJvclN0YXJ0T2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldEVycm9yU3RhcnRPZmZzZXQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0T2Zmc2V0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGVuZCBvZmZzZXQuCi0gICAqIAotICAgKiBAcGFyYW0gZW5kIFRoZSBlbmQgb2Zmc2V0LgotICAgKiBAc2VlICNnZXRFcnJvckVuZE9mZnNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JFbmRPZmZzZXQoaW50IGVuZCkKLSAgewotICAgIGVuZE9mZnNldCA9IGVuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlcnJvciBlbmQgb2Zmc2V0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3IgZW5kIG9mZnNldC4KLSAgICogQHNlZSAjc2V0RXJyb3JFbmRPZmZzZXQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JFbmRPZmZzZXQoKQotICB7Ci0gICAgcmV0dXJuIGVuZE9mZnNldDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgbmV3IGxpbmUgb3QgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmV3TGluZSBUaGUgbmV3IGxpbmUgdG8gYWRkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmV3RXJyb3JNZXNzYWdlTGluZShTdHJpbmcgbmV3TGluZSkKLSAgewotICAgIGVycm9yU3RyaW5nICs9ICJcbiIgKyBuZXdMaW5lOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBVUkkgb2YgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgdG8gc2V0LgotICAgKi8KLSAKLSAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIG9mIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIG9mIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvTGF6eVVSTElucHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2MGFmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgYWxsb3dzIElucHV0U3RyZWFtcyB0byBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZCB0byB4ZXJjZXMgd2l0aG91dAotICogYWN0dWFsbHkgb3BlbmluZyBmaWxlIGhhbmRsZXMgb3IgbmV0d29yayBjb25uZWN0aW9ucyB1bnRpbCBpdCBpcyBhYnNvbHV0ZWx5Ci0gKiBuZWNjZXNzYXJ5LgotICovCi1wdWJsaWMgY2xhc3MgTGF6eVVSTElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0KLXsgIAotICBwcml2YXRlIHN0YXRpYyBpbnQgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCA9IDA7IAotICBwcm90ZWN0ZWQgSW5wdXRTdHJlYW0gaW5uZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdXJsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBlcnJvcjsKLSAgYm9vbGVhbiBoYXNNYXJrczsKLSAgYm9vbGVhbiBwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuOwotCi0gIHB1YmxpYyBMYXp5VVJMSW5wdXRTdHJlYW0oU3RyaW5nIHVybCkKLSAgewotICAgIHRoaXMudXJsID0gdXJsOwotCWlubmVyID0gbnVsbDsKLQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoaW5uZXIgPT0gbnVsbCAmJiAhZXJyb3IpCi0gICAgewotICAgICAgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCsrOwotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0cmVhbSAoIiArIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgKyAiKS0tICIgKyB1cmwpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlubmVyID0gbmV3IFVSTCh1cmwpLm9wZW5TdHJlYW0oKTsKLQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotCQloYXNNYXJrcyA9IGZhbHNlOwotICAgICAgfQotICAgICAgZmluYWxseSAKLSAgICAgIHsKLSAgICAgICAgaWYgKGlubmVyID09IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0JcHJvdGVjdGVkIHZvaWQgY2xvc2VTdHJlYW0oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoaW5uZXIgIT0gbnVsbCAmJiAhcHJldGVuZEZpbGVJc1N0aWxsT3BlbikgewotCQkJaW5uZXIuY2xvc2UoKTsKLQkJCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSB0cnVlOwotCQl9Ci0gIAl9Ci0KLSAgcHVibGljIGludCBhdmFpbGFibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gMDsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCXJldHVybiBpbm5lci5hdmFpbGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgewotCQkvLyBTdG9wIGJlaGF2aW5nIGFzIGlmIHRoZSBzdHJlYW0gd2VyZSBzdGlsbCBvcGVuLgotCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKGlubmVyICE9IG51bGwpIHsKLQkJCWRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQtLTsKLQkJICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNsb3Npbmcgc3RyZWFtICgiICsgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCArICIpIC0tICIgKyB1cmwpOwotCQkJaW5uZXIuY2xvc2UoKTsKLQkJfQotCX0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkKLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JaGFzTWFya3MgPSB0cnVlOwotCXRyeSB7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpbm5lci5tYXJrKHJlYWRsaW1pdCk7Ci0JfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCSAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiVGhlIGZvbGxvd2luZyBJT0V4Y2VwdGlvbiBvY2N1cnJlZCBpbiB0aGUgV1NETCB2YWxpZGF0b3IncyBMYXp5VVJMSW5wdXRTdHJlYW0uIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiBmYWxzZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaWYgKGlubmVyID09IG51bGwpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGlubmVyLm1hcmtTdXBwb3J0ZWQoKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgZm9sbG93aW5nIElPRXhjZXB0aW9uIG9jY3VycmVkIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzIExhenlVUkxJbnB1dFN0cmVhbS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0JfQotCXJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKCk7Ci0JaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JcmV0dXJuIGJ5dGVzUmVhZDsKLSAgfQotCi0KLQlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gLTE7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCQlpbnQgYnl0ZXNSZWFkID0gaW5uZXIucmVhZChiKTsKLQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JCXJldHVybiBieXRlc1JlYWQ7Ci0JfQotCi0gIHB1YmxpYyBpbnQgcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIsIG9mZiwgbGVuKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlpbm5lci5yZXNldCgpOwotICB9Ci0KLSAgcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7ICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAwOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JcmV0dXJuIGlubmVyLnNraXAobik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyMzQ3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9NZXNzYWdlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotCi0vKioKLSAqIEEgY29udmVuaWVuY2UgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCByZXNvdXJjZXMgaW4gYSByZXNvdXJjZSBidW5kbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlR2VuZXJhdG9yCi17Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcmIgVGhlIHJlc291cmNlIGJ1bmRsZSB0byB3b3JrIHdpdGguCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUdlbmVyYXRvcihSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgKiBTZXQgdGhlIHJlc291cmNlYnVuZGxlIHRvIHRoZSBvbmUgc3BlY2lmaWVkLgotICAqIAotICAqIEBwYXJhbSByYiBUaGUgcmVzb3VyY2UgYnVuZGxlIHRvIHNldC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0UmVzb3VyY2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUgcmIpCi0gIHsKLSAgICByZXNvdXJjZWJ1bmRsZSA9IHJiOwotICB9Ci0KLSAgLyoqCi0gICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5LgotICAqIAotICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHJlc291cmNlLgotICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gcmVzb3VyY2VidW5kbGUuZ2V0U3RyaW5nKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIG9uZSBzdWJzdGl0dXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRTdHJpbmcoa2V5KSwgbmV3IE9iamVjdFtdIHsgczEgfSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIHR3byBzdWJzdGl0dXRpb25zLgotICAgKiAKLSAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB0aGUgcmVzb3VyY2UuCi0gICAqIEBwYXJhbSBzMSBUaGUgZmlyc3Qgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEBwYXJhbSBzMiBUaGUgc2Vjb25kIHN1YnN0aXR1dGlvbiB0byBwZXJmb3JtLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxLCBPYmplY3QgczIpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIG5ldyBPYmplY3RbXSB7IHMxLCBzMiB9KTsKLSAgfQotCi0gIC8qKgotICAgKiAgR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIHRocmVlIHN1YnN0aXR1dGlvbnMuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBmaXJzdCBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHBhcmFtIHMyIFRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEBwYXJhbSBzMyBUaGUgdGhpcmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEsIE9iamVjdCBzMiwgT2JqZWN0IHMzKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBuZXcgT2JqZWN0W10geyBzMSwgczIsIHMzIH0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0NsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmI3ZjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlIGV4dGVuZHMgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUpCi0gIHsKLQl0aGlzLnZhbGlkYXRvckNsYXNzbmFtZSA9IHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWxlZ2F0ZSBmb3IgYSB2YWxpZGF0b3IgYnkgaXRzIGNsYXNzIG5hbWUgYW5kIAotICAgKiBhIGNsYXNzIGxvYWRlciB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yQ2xhc3NuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgY2xhc3MuCi0gICAqIEBwYXJhbSBjbGFzc0xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikKLSAgewotICAgIHRoaXModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLSAgICB0aGlzLmNsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETDExVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKQotICB7Ci0JSVdTREwxMVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCWlmKGNsYXNzTG9hZGVyID09IG51bGwpCi0JewotCSAgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0JfQotCXRyeQotCXsKLSAgICAgIENsYXNzIHZhbGlkYXRvckNsYXNzID0KLSAgICAgIGNsYXNzTG9hZGVyICE9IG51bGwgPyBjbGFzc0xvYWRlci5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKSA6IENsYXNzLmZvck5hbWUodmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgdmFsaWRhdG9yID0gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlVuYWJsZSB0byBsb2FkIHZhbGlkYXRvciAiICsgdmFsaWRhdG9yQ2xhc3NuYW1lLCBJTG9nZ2VyLlNFVl9FUlJPUiwgdCk7Ci0gICAgfQotCXJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0lXU0RMMTFWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGE2OTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBXU0RMIDEuMSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLiBVc2VzIGFuIGV4aXN0aW5nCi0gKiB2YWxpZGF0aW9uIGluZm8gb2JqZWN0IGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIHNldCBhbmQgcmV0cmlldmUKLSAqIHNjaGVtYXMgYW5kIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHNldHRpbmcgZXJyb3JzIHdpdGggb2JqZWN0cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJV1NETDExVmFsaWRhdGlvbkluZm8KLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBvZiB0aGUgZmlsZSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgb2YgdGhlIGZpbGUgYmVpbmcgdmFsaWRhdGVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgc2NoZW1hIHRvIHRoZSBsaXN0IG9mIHNjaGVtYXMgYXZhaWxhYmxlIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0geHNNb2RlbCBUaGUgc2NoZW1hIHRvIGFkZCB0byB0aGUgbGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYShYU01vZGVsIHhzTW9kZWwpOwotICAKLSAgLyoqCi0gICAqIEdldCBhbiBhcnJheSBvZiBhbGwgdGhlIHNjaGVtYXMgYXZhaWxhYmxlIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGFsbCB0aGUgc2NoZW1hcyBhdmFpbGFibGUgZm9yIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBYU01vZGVsW10gZ2V0U2NoZW1hcygpOwotICAKLSAgLyoqCi0gICAqIENsZWFyIGFsbCB0aGUgc3RvcmVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhclNjaGVtYXMoKTsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50TG9jYXRpb25zIFRoZSBoYXNodGFibGUgdG8gc2V0IHdpdGggdGhlIGVsZW1lbnQgbG9jYXRpb25zLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9ucyhIYXNodGFibGUgZWxlbWVudExvY2F0aW9ucyk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICogQHBhcmFtIGVycm9yS2V5IFRoZSBlcnJvciBrZXkgZm9yIHRoaXMgbWVzc2FnZQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgc3RyaW5ncyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZSBhdCB0aGUgZ2l2ZW4gbGluZSBhbmQgY29sdW1uLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gdXJpIFRoZSB1cmkgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgd2FybmluZyBmb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgd2FybmluZyBtZXNzYWdlIGF0IHRoZSBnaXZlbiBsaW5lIGFuZCBjb2x1bW4uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyB0byBhZGQuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSB3YXJuaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGluIHVzZSBmb3IgdGhpcyB2YWxpZGF0aW9uLiBUaGUgVVJJIHJlc29sdmVyCi0gICAqIHJldHVybmVkIGlzIGFjdHVhbGx5IGEgVVJJIHJlc29sdmVyIGhhbmRsZXIgdGhhdCB3aWxsIAotICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSByZWdpc3RlcmVkIFVSSSByZXNvbHZlcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgc2NoZW1hIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzY2hlbWEgY2FjaGUgaWYgb25lIGlzIHNwZWNpZmllZCwgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0U2NoZW1hQ2FjaGUoKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFhNTCBjYWNoZSBpZiBvbmUgaXMgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWE1MIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhNTENhY2hlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYWJjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGEgdmFsaWRhdG9yIHBsdWdnZWQgaW50byB0aGUgV1NETCAxLjEgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBnaXZlbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoaXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0ltcG9ydEhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDViZTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuRXJyb3JNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5YU0RWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuRGVmYXVsdFhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5JWE1MVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2dSZXNvbHZlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLlN0cmluZ1V0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuUU5hbWVVdGlsczsKLQotLyoqCi0gKiBBIGNsYXNzIHRvIGhvbGQgYW5kIHBhcnNlIGFuIGltcG9ydCBlbGVtZW50LgotICovCi1wdWJsaWMgY2xhc3MgSW1wb3J0SG9sZGVyIGltcGxlbWVudHMgQ29tcGFyYWJsZQotewotICBwcml2YXRlIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLSAgCi0gIHByaXZhdGUgV1NETERvY3VtZW50IGltcG9ydGluZ1dTRExEb2MgPSBudWxsOwotICBwcml2YXRlIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotICBwcml2YXRlIERlZmluaXRpb24gaW1wb3J0aW5nRGVmID0gbnVsbDsKLSAgcHJpdmF0ZSBFbGVtZW50IGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBsb2NhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzcGF0aFVSSSA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbnRleHRVUkkgPSBudWxsOwotICBwcml2YXRlIGludCBkZXB0aDsKLSAgcHJpdmF0ZSBFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotICBwcml2YXRlIExpc3Qgc2NoZW1hcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzV1NETEZpbGVJbXBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gaW1wb3J0SW52YWxpZCA9IGZhbHNlOwotICBwcml2YXRlIEltcG9ydCBpbXBvcnREZWYgPSBudWxsOwotICBwcml2YXRlIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxpbmZvOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBpbXBvcnQuCi0gICAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGltcG9ydC4KLSAgICogQHBhcmFtIGNvbnRleHRVUkkgVGhlIGNvbnRleHQgVVJJIGZvciByZXNvbHZpbmcgdGhlIGltcG9ydCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxEb2MgVGhlIFdTRExEb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSBpbXBvcnQuCi0gICAqIEBwYXJhbSBkZXB0aCBUaGUgZGVwdGggb2YgdGhlIGltcG9ydC4KLSAgICogQHBhcmFtIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQgVGhlIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBpbXBvcnQgaW4gdGhlIGVuY2Fwc3VsYXRpbmcgV1NETERvY3VtZW50LgotICAgKiBAcGFyYW0gbWVzc2FnZWdlbmVyYXRvciBBIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIG9idGFpbmluZyBzdHJpbmdzLgotICAgKiBAcGFyYW0gdmFsaW5mbyBUaGUgV1NETDExVmFsaWRhdGlvbkluZm8gZm9yIHJlcG9ydGluZyBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBJbXBvcnRIb2xkZXIoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uLCBTdHJpbmcgY29udGV4dFVSSSwgV1NETERvY3VtZW50IGltcG9ydGluZ1dTRExEb2MsIGludCBkZXB0aCwgRWxlbWVudCBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKQotICB7Ci0gICAgdGhpcy5tZXNzYWdlZ2VuZXJhdG9yID0gbWVzc2FnZWdlbmVyYXRvcjsKLSAgICB0aGlzLnZhbGluZm8gPSB2YWxpbmZvOwotICAgIHRoaXMuaW1wb3J0aW5nV1NETERvYyA9IGltcG9ydGluZ1dTRExEb2M7Ci0gICAgaWYoaW1wb3J0aW5nV1NETERvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIHRoaXMuaW1wb3J0aW5nRGVmID0gaW1wb3J0aW5nV1NETERvYy5nZXREZWZpbml0aW9uKCk7Ci0gICAgfQotICAgIHRoaXMuaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCA9IGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQ7Ci0gICAgdGhpcy5kZXB0aCA9IGRlcHRoOwotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAKLSAgICAvLyAgQWxsb3cgV1NETCBpbXBvcnRzIHRvIGhhdmUgbm8gbG9jYXRpb24gYXR0cmlidXRlIGV2ZW4gdGhvdWdoIGl0IGlzIHJlcXVpcmVkLgotICAgIC8vIFNjaGVtYSB3aWxsIG5vcm1hbGx5IGNhdGNoIHRoZSBwcm9ibGVtIGJ1dCB0aGlzIGFsbG93cyB1c2VycyB0byBvdmVycmlkZSB0aGUKLSAgICAvLyBzY2hlbWEgYW5kIGhhdmUgdGhlIHZhbGlkYXRvciBydW4uCi0gICAgaWYgKHRoaXMubG9jYXRpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aGlzLmxvY2F0aW9uID0gbmFtZXNwYWNlOwotICAgIH0KLSAgICB0aGlzLmNvbnRleHRVUkkgPSBjb250ZXh0VVJJOwotICAgIAotICAgIHRoaXMubG9jYXRpb24gPSB0aGlzLmxvY2F0aW9uLnJlcGxhY2UoJ1xcJywnLycpOwotICAgIElVUklSZXNvbHV0aW9uUmVzdWx0IGNsYXNzcGF0aFVSSSA9IHZhbGluZm8uZ2V0VVJJUmVzb2x2ZXIoKS5yZXNvbHZlKHRoaXMuY29udGV4dFVSSSwgdGhpcy5uYW1lc3BhY2UsIHRoaXMubG9jYXRpb24pOwotICAgIGlmKGNsYXNzcGF0aFVSSS5nZXRMb2dpY2FsTG9jYXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRoaXMubG9jYXRpb24gPSBjbGFzc3BhdGhVUkkuZ2V0TG9naWNhbExvY2F0aW9uKCk7Ci0gICAgfQotICAgIGlmKGNsYXNzcGF0aFVSSS5nZXRQaHlzaWNhbExvY2F0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aGlzLmNsYXNzcGF0aFVSSSA9IGNsYXNzcGF0aFVSSS5nZXRQaHlzaWNhbExvY2F0aW9uKCk7Ci0gICAgICB0aGlzLmNvbnRleHRVUkkgPSBudWxsOwotICAgIH0gCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKQotICB7Ci0gICAgRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGRvY3VtZW50RWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICB9Ci0gICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgaWYoZG9jdW1lbnRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAJICAvLyBIYW5kbGUgV1NETCBpbXBvcnRzLgotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RFRklOSVRJT05TLCBkb2N1bWVudEVsZW1lbnQpKQotICAgICAgewotICAgICAgICBpZihpc1hNTFZhbGlkKHRoaXMuY2xhc3NwYXRoVVJJKSkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQodGhpcy5sb2NhdGlvbiwgZG9jdW1lbnRFbGVtZW50LCB0aGlzLmRlcHRoLCB0aGlzLm1lc3NhZ2VnZW5lcmF0b3IsIHRoaXMudmFsaW5mbyk7Ci0gICAgICAgICAgICBjcmVhdGVXU0RMSW1wb3J0KHdzZGxEb2N1bWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2YWxpbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfVU5BQkxFX1RPX0lNUE9SVF9CQURfTE9DQVRJT04iLCAiJyIgKyBpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKSArICInIiksIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSGFuZGxlIHNjaGVtYSBpbXBvcnRzLgotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKFNjaGVtYUNvbnN0YW50cy5RX0VMRU1fWFNEXzIwMDEsIGRvY3VtZW50RWxlbWVudCkpCi0gICAgICB7Ci0gICAgICAgIGNyZWF0ZVhTREltcG9ydCgpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNYTUxWYWxpZChTdHJpbmcgdXJpKQotICB7Ci0gICAgSVhNTFZhbGlkYXRvciB4bWxWYWxpZGF0b3IgPSBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldFhNTFZhbGlkYXRvcigpOwotICAgIHhtbFZhbGlkYXRvci5zZXRGaWxlKHVyaSk7Ci0gICAgeG1sVmFsaWRhdG9yLnNldFVSSVJlc29sdmVyKHZhbGluZm8uZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gICAgLy94bWxWYWxpZGF0b3Iuc2V0VmFsaWRhdGlvbkluZm8odmFsSW5mbyk7Ci0gICAgaWYoeG1sVmFsaWRhdG9yIGluc3RhbmNlb2YgRGVmYXVsdFhNTFZhbGlkYXRvcikKLSAgICB7Ci0gICAgCVhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sID0gdmFsaW5mby5nZXRYTUxDYWNoZSgpOwotICAgICAgICBpZihncmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgICAgICgoRGVmYXVsdFhNTFZhbGlkYXRvcil4bWxWYWxpZGF0b3IpLnNldEdyYW1tYXJQb29sKGdyYW1tYXJQb29sKTsKLSAgICB9Ci0gICAgeG1sVmFsaWRhdG9yLnJ1bigpOwotICAgIC8vIGlmIHRoZXJlIGFyZSBubyB4bWwgY29uZm9ybWFuY2UgcHJvYmxlbXMgZ28gb24gdG8gY2hlY2sgdGhlIHdzZGwgc3R1ZmYKLSAgICBpZiAoeG1sVmFsaWRhdG9yLmhhc0Vycm9ycygpKQotICAgIHsKLSAgICAgIC8vIHRlbXAgaGFuZGxpbmcgb2YgWE1MIGVycm9ycyB1bnRpbCB2YWxpZGF0b3IgaXMgdXBkYXRlZC4KLSAgICAgIExpc3QgZXJyb3JzID0geG1sVmFsaWRhdG9yLmdldEVycm9ycygpOwotICAgICAgSXRlcmF0b3IgZXJyb3JzSXRlciA9IGVycm9ycy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGVycm9yc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgdmFsTWVzID0gKElWYWxpZGF0aW9uTWVzc2FnZSllcnJvcnNJdGVyLm5leHQoKTsKLSAgICAgICAgdmFsaW5mby5hZGRFcnJvcih2YWxNZXMuZ2V0TWVzc2FnZSgpLCB2YWxNZXMuZ2V0TGluZSgpLCB2YWxNZXMuZ2V0Q29sdW1uKCksIHZhbE1lcy5nZXRVUkkoKSk7Ci0gICAgICB9Ci0gICAgICBpbXBvcnRJbnZhbGlkID0gdHJ1ZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGltcG9ydGluZyBXU0RMRG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbXBvcnRpbmcgV1NETERvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRJbXBvcnRpbmdEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0aW5nV1NETERvYzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgV1NETCBkb2N1bWVudCB0aGlzIGltcG9ydCByZXByZXNlbnRzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgV1NETCBkb2N1bWVudCB0aGlzIGltcG9ydCByZXByZXNlbnRzLgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9jYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjb250ZXh0IFVSSS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGNvbnRleHQgVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb250ZXh0VVJJKCkKLSAgewotICAgIHJldHVybiBjb250ZXh0VVJJOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBkZXB0aCBpbiB0aGUgV1NETCB0cmVlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZGVwdGggaW4gdGhlIFdTREwgdHJlZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RGVwdGgoKQotICB7Ci0gICAgcmV0dXJuIGRlcHRoOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjb250YWluaW5nIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGNvbnRhaW5pbmcgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldEltcG9ydGluZ0RlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydGluZ0RlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBmb3IgdGhpcyBpbXBvcnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlbGVtZW50IGZvciB0aGlzIGltcG9ydC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIGlmKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gbG9jYXRpb247Ci0gICAgLy9JbXBvcnQgaW1wb3J0RGVmID0gaW1wb3J0aW5nRGVmLmNyZWF0ZUltcG9ydCgpOwotICAgIAotICAgIC8vICBBbGxvdyBsb2NhdGluZyBXU0RMIGRvY3VtZW50cyB1c2luZyBhbnkgcmVnaXN0ZXJlZCBVUkkgcmVzb2x2ZXIuCi0gICAgLy9TdHJpbmcgY2xhc3NwYXRoVVJJID0gVVJJUmVzb2x2ZXIuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlKGNvbnRleHRVUkksIG5hbWVzcGFjZVVSSSwgbG9jYXRpb25VUkkpOwotLy8gICAgaWYgKCFjbGFzc3BhdGhVUkkuZXF1YWxzKGxvY2F0aW9uVVJJKSkKLS8vICAgIHsKLS8vICAgICAgbG9jYXRpb25VUkkgPSBjbGFzc3BhdGhVUkk7Ci0vLyAgICAgIGNvbnRleHRVUkkgPSBudWxsOwotLy8gICAgfQotICAgIElucHV0U3RyZWFtIHJlYWRlciA9IG51bGw7Ci0gICAgaWYgKGxvY2F0aW9uVVJJICE9IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vU3RyaW5nIGNvbnRleHRVUkkgPSBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgLy9EZWZpbml0aW9uIGltcG9ydGVkRGVmID0gbnVsbDsKLSAgICAgICAgICAKLSAgICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgVVJMIHVybCA9IG51bGw7Ci0KLSAgICAgICAgICAKLSAgICAgICAgICAgIFVSTCBjb250ZXh0VVJMID0gKGNvbnRleHRVUkkgIT0gbnVsbCkgPyBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgY29udGV4dFVSSSkgOiBudWxsOwotCi0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwoY29udGV4dFVSTCwgbG9jYXRpb25VUkkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBIYW5kbGUgZmlsZTovLyB1cmxzLiBUaGUgY29ycmVjdCBmb3JtYXQgc2hvdWxkIGJlIGZpbGU6Ly8vIG9yIGZpbGU6Ly4KLSAgICAgICAgICAgIFN0cmluZyB1cmxBdXRob3JpdHkgPSB1cmwuZ2V0QXV0aG9yaXR5KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgICAgICAgIGlmKHVybEF1dGhvcml0eSAhPW51bGwgJiYgdXJsUHJvdG9jb2wuZXF1YWxzSWdub3JlQ2FzZSgiZmlsZSIpICYmICF1cmxBdXRob3JpdHkuZXF1YWxzKCIiKSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwodXJsUHJvdG9jb2wsIiIsIi8iICsgdXJsQXV0aG9yaXR5ICsgdXJsLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwudG9TdHJpbmcoKTsKLQkJCS8vIFRlc3QgZm9yIGNhc2Ugc2Vuc2l0aXZpdHkgb24gbG9jYWwgZmlsZXMuCi0JCQlpZih1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZToiKSkKLQkJCXsKLQkJCSAgRmlsZSB0ZXN0ZmlsZSA9IG5ldyBGaWxlKHVybC5nZXRGaWxlKCkpOwotCQkJICBTdHJpbmcgdGVzdGZpbGVTdHJpbmcgPSB0ZXN0ZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCSAgU3RyaW5nIGNhbm9uaWNhbGZpbGVTdHJpbmcgPSB0ZXN0ZmlsZS5nZXRDYW5vbmljYWxQYXRoKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKCF0ZXN0ZmlsZVN0cmluZy5lcXVhbHMoY2Fub25pY2FsZmlsZVN0cmluZykpCi0gICAgICAgICAgICAgIHsKLQkJCQlpZiAoIVN0cmluZy52YWx1ZU9mKHRlc3RmaWxlU3RyaW5nLmNoYXJBdCgwKSkuZXF1YWxzSWdub3JlQ2FzZQotCQkJCSAgICAoU3RyaW5nLnZhbHVlT2YoY2Fub25pY2FsZmlsZVN0cmluZy5jaGFyQXQoMCkpKQotCQkJCSAgICB8fCAhdGVzdGZpbGVTdHJpbmcuc3Vic3RyaW5nKDEsdGVzdGZpbGVTdHJpbmcubGVuZ3RoKCkpLmVxdWFscwotCQkJCQkoY2Fub25pY2FsZmlsZVN0cmluZy5zdWJzdHJpbmcoMSxjYW5vbmljYWxmaWxlU3RyaW5nLmxlbmd0aCgpKSkpCi0JCQkJewotICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICAgICAgICB1cmwgPSBudWxsOwotCQkJCX0KLSAgICAgICAgICAgICAgfQotCQkJfQotCQkJaWYodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkgIHRyeQotCQkJICB7Ci0gICAgICAgICAgICAgICAgcmVhZGVyID0gU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzSW5wdXRTdHJlYW0odXJsKTsKLQkJCSAgfQotCQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkJICB7Ci0JCQkgICAgLy8gTm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLiBUaGUgZXJyb3Igd2lsbCBiZSBoYW5kbGVkIGJlbG93LgotCQkJICB9Ci0JCQl9Ci0gICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0gICAgICAgICAgICAgIGlmKGNsYXNzcGF0aFVSSSAhPSBudWxsICYmICFjbGFzc3BhdGhVUkkuZXF1YWxzKGxvY2F0aW9uKSkKLSAgCQkJICB7Ci0gIAkJCSAgICBpbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtKG5ldyBVUkwoY2xhc3NwYXRoVVJJKS5vcGVuU3RyZWFtKCkpOwotICAJCQkgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlucHV0U291cmNlID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIGxvY2F0aW9uIGZyb20gdGhlIGVsZW1lbnQuCi0gICAgICAgICAgICAgIFN0cmluZyBhY3R1YWxMb2NhdGlvbiA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LCBDb25zdGFudHMuQVRUUl9MT0NBVElPTik7Ci0gICAgICAgICAgICAgIGlmKGFjdHVhbExvY2F0aW9uID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCWFjdHVhbExvY2F0aW9uID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsICJzY2hlbWFMb2NhdGlvbiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmKGFjdHVhbExvY2F0aW9uID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCWFjdHVhbExvY2F0aW9uID0gbmFtZXNwYWNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkUmVhZGVyV2FybmluZygKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RlZiwKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1VOQUJMRV9UT19JTVBPUlRfQkFEX0xPQ0FUSU9OIiwgIiciICsgYWN0dWFsTG9jYXRpb24gKyAiJyIpKTsKLSAgICAgICAgICAgICAgaW1wb3J0SW52YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgLy8gVE9ETzogbW9kaWZ5IHRoZSByZWFkZXIgZXJyb3IgdG8gc2hvdyBpbiBhbGwgdGhlIGNvcnJlY3QgbG9jYXRpb25zLgotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICBXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLAotICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGltcG9ydGVkIGRvY3VtZW50ICIKLSAgICAgICAgICAgICAgICAgICsgImF0ICciCi0gICAgICAgICAgICAgICAgICArIGxvY2F0aW9uVVJJCi0gICAgICAgICAgICAgICAgICArICInIgotICAgICAgICAgICAgICAgICAgKyAoY29udGV4dFVSSSA9PSBudWxsID8gIi4iIDogIiwgcmVsYXRpdmUgdG8gJyIgKyBjb250ZXh0VVJJICsgIicuIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkb2MgPSBXU0RMUmVhZGVySW1wbC5nZXREb2N1bWVudChpbnB1dFNvdXJjZSwgbG9jYXRpb25VUkkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBUaGUgRmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcmVhZC4gCi0gICAgICAgICAgICAgIC8vIFBlcmZvcm0gWE1MIHZhbGlkYXRpb24uCi0gICAgICAgICAgICAgIGlzWE1MVmFsaWQobG9jYXRpb25VUkkpOwotLy8gICAgICAgICAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkUmVhZGVyRXJyb3IoCi0vLyAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RlZiwKLS8vICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwKLS8vICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0lOVkFMSUQiLCAiJyIgKyBsb2NhdGlvbiArICInIikpOwotICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmKCFRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ERUZJTklUSU9OUywgZWxlbWVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlzV1NETEZpbGVJbXBvcnQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpbXBvcnRlZCBkb2N1bWVudCBoYXMgdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBpbXBvcnQgZWxlbWVudCBzdGF0ZXMuCi0gICAgICAgICAgICBTdHJpbmcgaW1wb3J0VGFyZ2V0TlMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgIGlmKCFpbXBvcnRUYXJnZXROUy5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW1wb3J0aW5nV1NETERvYy5hZGRSZWFkZXJXYXJuaW5nKAotICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nRGVmLAotICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfV0FSTl9XUk9OR19OU19PTl9JTVBPUlQiLCAiJyIgKyBuYW1lc3BhY2UgKyAiJyIsICInIiArIGltcG9ydFRhcmdldE5TICsgIiciKSk7Ci0gICAgICAgICAgICAgIGVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICBpbXBvcnRJbnZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgIGlmKHJlYWRlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgCi0gICAgfQotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFuIGltcG9ydCBlbGVtZW50IGZvciBhIFdTREwgaW1wb3J0IG9mIGEgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgVGhlIGRvY3VtZW50IG9mIHRoZSBpbXBvcnQuCi0gICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgaW1wb3J0IGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGNyZWF0ZVdTRExJbXBvcnQoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotICAgIGlmKGltcG9ydERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBpbXBvcnREZWY7Ci0gICAgfQotICAgIGltcG9ydERlZiA9IGdldE5ld0ltcG9ydCgpOwotICAKLSAgICBpZiAoaW1wb3J0RGVmICE9IG51bGwpCi0gICAgewotICAgICAgaW1wb3J0RGVmLnNldERlZmluaXRpb24od3NkbERvY3VtZW50LmdldERlZmluaXRpb24oKSk7Ci0gICAgICBzY2hlbWFzLmFkZEFsbCh3c2RsRG9jdW1lbnQuZ2V0U2NoZW1hcygpKTsKLSAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkU2NoZW1hcyhzY2hlbWFzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFuIGltcG9ydCBlbGVtZW50IGZvciBhIFdTREwgaW1wb3J0IG9mIGEgc2NoZW1hIGltcG9ydCBvZiBhIHNjaGVtYSBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgaW1wb3J0IGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGNyZWF0ZVhTREltcG9ydCgpCi0gIHsKLSAgICBpZihpbXBvcnREZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1wb3J0RGVmOwotICAgIH0KLSAgICBpbXBvcnREZWYgPSBnZXROZXdJbXBvcnQoKTsKLSAgICBYU0RWYWxpZGF0b3IgeHNkdmFsaWRhdG9yID0gbmV3IFhTRFZhbGlkYXRvcigpOwotCi0gICAgeHNkdmFsaWRhdG9yLnZhbGlkYXRlKGxvY2F0aW9uLCBYTUxDYXRhbG9nUmVzb2x2ZXIuZ2V0SW5zdGFuY2UoKSwgdmFsaW5mby5nZXRTY2hlbWFDYWNoZSgpKTsKLSAgICBpZiAoeHNkdmFsaWRhdG9yLmlzVmFsaWQoKSkKLSAgICB7Ci0gICAgICBYU01vZGVsIHNjaGVtYSA9IHhzZHZhbGlkYXRvci5nZXRYU01vZGVsKCk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgIC8vIGFkZFJlYWRlcldhcm5pbmcoCi0vLyAgICAgICAgZGVmLAotLy8gICAgICAgIGltcG9ydERlZiwKLS8vICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1VOQUJMRV9UT19JTVBPUlRfSU5WQUxJRCIsICInIiArIGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpICsgIiciKSk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnMgPSB4c2R2YWxpZGF0b3IuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlcnJvcnMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFcnJvck1lc3NhZ2UgZXJyID0gKEVycm9yTWVzc2FnZSkgZXJyb3JzLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHVyaSA9IGVyci5nZXRVUkkoKTsKLSAgICAgICAgaW50IGxpbmUgPSBlcnIuZ2V0RXJyb3JMaW5lKCk7Ci0gICAgICAgIFN0cmluZyBlcnJtZXNzID0gZXJyLmdldEVycm9yTWVzc2FnZSgpOwotICAgICAgICB2YWxpbmZvLmFkZEVycm9yKGVycm1lc3MsIGxpbmUsIGVyci5nZXRFcnJvckNvbHVtbigpLCB1cmkpOwotICAgICAgfQotICAgIH0KLSAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFNjaGVtYXMoc2NoZW1hcyk7Ci0gICAgcmV0dXJuIGltcG9ydERlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW1wb3J0IGVsZW1lbnQgaWYgaXQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGltcG9ydCBlbGVtZW50IGlmIGl0IGhhcyBiZWVuIGNyZWF0ZWQgb3IgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBJbXBvcnQgZ2V0SW1wb3J0KCkKLSAgewotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYSBuZXcgaW1wb3J0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbmV3IGltcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBJbXBvcnQgZ2V0TmV3SW1wb3J0KCkKLSAgewotICAgIGlmKGltcG9ydEludmFsaWQpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIEltcG9ydCBpbXBvcnREZWYgPSBpbXBvcnRpbmdEZWYuY3JlYXRlSW1wb3J0KCk7IAotICAgIAotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbXBvcnREZWYuc2V0TmFtZXNwYWNlVVJJKG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgaW1wb3J0RGVmLnNldExvY2F0aW9uVVJJKGxvY2F0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoZWxlbWVudCk7Ci0KLSAgICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbXBvcnREZWYuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIHNjaGVtYXMgY29ycmVzcG9uZGluZyB0byB0aGlzIGltcG9ydC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNjaGVtYXMgY29ycmVzcG9uZGluZyB0byB0aGlzIGltcG9ydC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbXBvcnQgaW1wb3J0cyBhIFdTREwgZG9jdW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGltcG9ydCBpbXBvcnRzIGEgV1NETCBkb2N1bWVudCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMRmlsZUltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaXNXU0RMRmlsZUltcG9ydDsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLSAgewotICAgIGlmKG9iai5nZXRDbGFzcygpID09IEltcG9ydEhvbGRlci5jbGFzcykKLSAgICB7Ci0gICAgICBJbXBvcnRIb2xkZXIgb3RoZXJJbXBvcnQgPSAoSW1wb3J0SG9sZGVyKW9iajsKLSAgICAgIAotICAgICAgaWYoZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKG90aGVySW1wb3J0LmdldE5hbWVzcGFjZSgpKSAmJiBnZXRMb2NhdGlvbigpLmVxdWFscyhvdGhlckltcG9ydC5nZXRMb2NhdGlvbigpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IG9iaikKLSAgewotICAgIGlmKG9iaiA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOwotICAgIH0KLSAgICAKLSAgICBJbXBvcnRIb2xkZXIgb3RoZXJJbXBvcnQgPSAoSW1wb3J0SG9sZGVyKW9iajsKLSAgICAgIAotICAgIHJldHVybiAoZ2V0TmFtZXNwYWNlKCkrZ2V0TG9jYXRpb24oKSkuY29tcGFyZVRvKChvdGhlckltcG9ydC5nZXROYW1lc3BhY2UoKStvdGhlckltcG9ydC5nZXRMb2NhdGlvbigpKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSBpbXBvcnQgaG9sZGVyLgotICAgKiAKLSAgICogQHBhcmFtIG1nIFRoZSBtZXNzYWdlIGdlbmVyYXRvciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWcpCi0gIHsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbWc7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW1wb3J0IGlzIGludmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGlzIGludmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzSW1wb3J0SW52YWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0SW52YWxpZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9Mb2NhdGlvbkhvbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9Mb2NhdGlvbkhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmVjY2M5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvTG9jYXRpb25Ib2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotLyoqCi0gKiBIb2xkcyB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIExvY2F0aW9uSG9sZGVyCi17Ci0gIHByaXZhdGUgaW50IGxpbmU7Ci0gIHByaXZhdGUgaW50IGNvbHVtbjsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJpOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbnVtYmVyLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbnVtYmVyLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIExvY2F0aW9uSG9sZGVyKGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbGluZSBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIG51bWJlci4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgY29sdW1uIG51bWJlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGNvbHVtbiBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBmaWxlIFVSSS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGZpbGUgVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9SZWFkZXJFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9SZWFkZXJFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWZlNzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvUmVhZGVyRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotLyoqCi0gKiBIb2xkcyBhbiBlcnJvciBjcmVhdGVkIHdoZW4gcmVhZGluZyBhIFdTREwgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWFkZXJFcnJvcgotewotICBwcm90ZWN0ZWQgT2JqZWN0IHBhcmVudE9iamVjdDsgLy8gdGhlIG9iamVjdCBvZiB0aGUgcGFyZW50IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgcHJvdGVjdGVkIE9iamVjdCBvYmplY3Q7IC8vIHRoZSBvYmplY3QgdGhlIGVycm9yIGlzIGFzc29jaWF0ZWQgd2l0aAotICBwcm90ZWN0ZWQgU3RyaW5nIGVycm9yOyAvLyB0aGUgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgCi0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudE9iamVjdCB0aGUgcGFyZW50IG9iamVjdCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yCi0gICAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvcgotICAgKiBAcGFyYW0gZXJyb3IgdGhlIGVycm9yCi0gICAqLwotICBwdWJsaWMgUmVhZGVyRXJyb3IoT2JqZWN0IHBhcmVudE9iamVjdCwgT2JqZWN0IG9iamVjdCwgU3RyaW5nIGVycm9yKQotICB7Ci0gICAgdGhpcy5wYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3Q7Ci0gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0gICAgdGhpcy5lcnJvciA9IGVycm9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvcgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRQYXJlbnRPYmplY3QoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudE9iamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBvYmplY3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3IoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YzZjY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLQotLyoqCi0gKiBBIHJlZ2lzdHJ5IHRvIGhvbGQgYWxsIHRoZSBXU0RMIDEuMSB2YWxpZGF0b3JzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yUmVnaXN0cnkKLXsKLQotICBwcm90ZWN0ZWQgc3RhdGljIFZhbGlkYXRvclJlZ2lzdHJ5IHZlckluc3RhbmNlOwotCi0gIHByb3RlY3RlZCBNYXAgdmFsaWRhdG9yUmVnID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0b3JSZWdpc3RyeSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHJlZ2lzdHJ5LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhpcyByZWdpc3RyeS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmFsaWRhdG9yUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKHZlckluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgdmVySW5zdGFuY2UgPSBuZXcgVmFsaWRhdG9yUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZlckluc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoaXMgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIGlzIGFzc29jaWF0ZWQgd2l0aC4KLSAgICogQHBhcmFtIHZhbERlbGVnYXRlIFRoZSB2YWxpZGF0b3IgZGVsZWdhdGUgdG8gcmVnaXN0ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlclZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlLCBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSB2YWxEZWxlZ2F0ZSkKLSAgewotICAgIC8vIGFsbG93IHRoZSBudWxsIG5hbWVzcGFjZSBidXQgbWFrZSBpdCB0aGUgZW1wdHkgc3RyaW5nCi0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgdmFsaWRhdG9yIHRvIHRoZSBoYXNodGFibGUKLSAgICBpZighdmFsaWRhdG9yUmVnLmNvbnRhaW5zS2V5KG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgdmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIG5ldyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZUNvbnRhaW5lcigpKTsKLSAgICB9Ci0gICAgKChXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZUNvbnRhaW5lcil2YWxpZGF0b3JSZWcuZ2V0KG5hbWVzcGFjZSkpLmFkZFZhbGlkYXRvcih2YWxEZWxlZ2F0ZSk7Ci0gICAgLy92YWxpZGF0b3JSZWcucHV0KG5hbWVzcGFjZSwgdmFsRGVsZWdhdGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFzayBmb3IgdGhlIHZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UuIElmIG5vbmUgaXMgZm91bmQKLSAgICogcmV0dXJuIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBUaGUgV1NETCAxLjEgdmFsaWRhdG9yIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIElXU0RMMTFWYWxpZGF0b3IgcXVlcnlWYWxpZGF0b3JSZWdpc3RyeShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgLy8gaWYgdGhlIG5hbWVzcGFjZSBpcyBudWxsIGFsbG93IGl0IGFuZCB0cmVhdCBpdCBhcyB0aGUgZW1wdHkgc3RyaW5nCi0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHRlbGxzIHdoZXRoZXIgYSB2YWxpZGF0b3IgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlIGlzIHJlZ2lzdGVyZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gY2hlY2suCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGVyZSBpcyBhIHZhbGlkYXRvciByZWdpc3RlcmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNSZWdpc3RlcmVkVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBpZiAocXVlcnlWYWxpZGF0b3JSZWdpc3RyeShuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGNsYXNzIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlQ29udGFpbmVyIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotICB7Ci0JcHJpdmF0ZSBMaXN0IHZhbGlkYXRvckRlbGVnYXRlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQlwdWJsaWMgdm9pZCBhZGRWYWxpZGF0b3IoV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUpCi0JewotCSAgdmFsaWRhdG9yRGVsZWdhdGVzLmFkZChkZWxlZ2F0ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UmVzb3VyY2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUgcmIpIHsKLQkJLy9Ob3RoaW5nIHRvIGRvCi0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB7Ci0JCUl0ZXJhdG9yIHZhbERlbEl0ZXIgPSB2YWxpZGF0b3JEZWxlZ2F0ZXMuaXRlcmF0b3IoKTsKLQkJd2hpbGUodmFsRGVsSXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IChXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSl2YWxEZWxJdGVyLm5leHQoKTsKLQkJICBkZWxlZ2F0ZS5nZXRWYWxpZGF0b3IoKS52YWxpZGF0ZShlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLQkJfQotCQkKLQl9Ci0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFCYXNpY1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFCYXNpY1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM2YTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExQmFzaWNWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5TY2hlbWFBdHRyaWJ1dGVUYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYUNvbnN0YW50czsKLS8qKgotICogVmFsaWRhdGUgdGhlIGVsZW1lbnRzIGRlZmluZWQgaW4gYSBXU0RMIDEuMSBEb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIFdTREwxMUJhc2ljVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbCI7Ci0JCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFU19GRUFUVVJFX0lEID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBWQUxJREFUSU9OX0ZFQVRVUkVfSUQgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkVfSUQgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFX0lEID0KLSAgICAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hLWZ1bGwtY2hlY2tpbmciOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIENPTlRJTlVFX0FGVEVSX0ZBVEFMX0VSUk9SX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9jb250aW51ZS1hZnRlci1mYXRhbC1lcnJvciI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU09BUF9FTkNPRElOR19VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICAKLSAgLy8gRXJyb3IgYW5kIFdhcm5pbmcgS2V5cwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUE9SVF9OQU1FX05PVF9VTklRVUUgPSAiX1BPUlRfTkFNRV9OT1RfVU5JUVVFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX05PX0JJTkRJTkdfRk9SX1BPUlQgPSAiX05PX0JJTkRJTkdfRk9SX1BPUlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTk9fQUREUkVTU19QT1JUID0gIl9OT19BRERSRVNTX1BPUlQiOwotLy8gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9NT1JFX1RIRU5fT05FX0FERFJFU1NfUE9SVCA9ICJfTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQiOyAvL1RPRE8gc2hvdWxkIGJlIF9NT1JFX1RIQU5fT05FX0FERFJFU1NfUE9SVCwgbm90IFRIRU4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORyA9ICJfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFID0gIl9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVUID0gIl9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0lOUFVUX05BTUVfTk9UX1VOSVFVRSA9ICJfSU5QVVRfTkFNRV9OT1RfVU5JUVVFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCA9ICJfTUVTU0FHRV9VTkRFRklORURfRk9SX0lOUFVUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX09VVFBVVF9OQU1FX05PVF9VTklRVUUgPSAiX09VVFBVVF9OQU1FX05PVF9VTklRVUUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCA9ICJfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQgPSAiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9GQVVMVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSA9ICJfUEFSVF9OT19FTEVNRU5UX09SX1RZUEUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUEFSVF9CT1RIX0VMRU1FTlRfQU5EX1RZUEUgPSAiX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BBUlRfSU5WQUxJRF9FTEVNRU5UID0gIl9QQVJUX0lOVkFMSURfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QQVJUX0lOVkFMSURfVFlQRSA9ICJfUEFSVF9JTlZBTElEX1RZUEUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfV0FSTl9TT0FQRU5DX0lNUE9SVEVEX1BBUlQgPSAiX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9QQVJUIjsKLQotICBwcml2YXRlIGZpbmFsIGludCBFTEVNRU5UID0gMDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgVFlQRSA9IDE7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRVFVRVNUID0gIlJlcXVlc3QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRVNQT05TRSA9ICJSZXNwb25zZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLSAgCi0KLSAgLy9wcm90ZWN0ZWQgV1NETDExVmFsaWRhdG9yQ29udHJvbGxlciB2YWxpZGF0b3Jjb250cm9sbGVyOwotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotCi0gIHB1YmxpYyBXU0RMMTFCYXNpY1ZhbGlkYXRvcigpCi0gIHsKLQlSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uID0gKERlZmluaXRpb24pZWxlbWVudDsKLSAgICB2YWxpZGF0ZVR5cGVzKHdzZGxEZWZpbml0aW9uLCB2YWxJbmZvKTsKLSAgICB2YWxpZGF0ZVNlcnZpY2VzKHdzZGxEZWZpbml0aW9uLCB2YWxJbmZvKTsKLSAgICB2YWxpZGF0ZUJpbmRpbmdzKHdzZGxEZWZpbml0aW9uLCB2YWxJbmZvKTsKLSAgICB2YWxpZGF0ZVBvcnRUeXBlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVNZXNzYWdlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0KLSAgICAvLyBUaGUgcGFyZW50cyBsaXN0IGlzIGV4cGVjdGVkIHRvIGJlIGVtcHR5IGhlcmUsIHNvIHNpbXBseSBhZGQgdGhlIGRlZmluaXRpb24gCi0gICAgLy8gYmVpbmcgdmFsaWRhdGVkIHRvIHRoZSBwYXJlbnRzIGxpc3QsIHZhbGlkYXRlIGl0cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLCAKLSAgICAvLyB0aGVuIHJlbW92ZSBpdC4KLSAgICAKLSAgICBwYXJlbnRzLmFkZCh3c2RsRGVmaW5pdGlvbik7Ci0gICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgd3NkbERlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgIHBhcmVudHMucmVtb3ZlKDApOwotICB9Ci0KLSAgLyoqCi0gICAqIFRha2VzIGEgbGlzdCBvZiBFeHRlbnNpYmlsaXR5RWxlbWVudHMgYW5kIGNoZWNrcyBpZiB0aGVyZSdzIGEgdmFsaWRhdG9yIAotICAgKiBhc3NvY2lhdGVkIHdpdGggZWFjaCBlbGVtZW50IGFuZCBpZiBzbyBjYWxscyB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRlbnNpYmlsaXR5RWxlbWVudHMgVGhlIGxpc3Qgb2YgZWxlbWVudHMgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSB2YWxpZGF0b3Jjb250cm9sbGVyIFRoZSB2YWxpZGF0b3IgY29udHJvbGxlci4KLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBkZWZuaW50aW9ucyBlbGVtZW50IGZvciB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QoCi0gICAgTGlzdCBwYXJlbnRzLAotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLAotICAgIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgVmFsaWRhdG9yUmVnaXN0cnkgdmVyID0gVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBJdGVyYXRvciBleHRFbGVtcyA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRFbGVtcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5uZXh0KCk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgSVdTREwxMVZhbGlkYXRvciB2YWwgPSB2ZXIucXVlcnlWYWxpZGF0b3JSZWdpc3RyeShuYW1lc3BhY2UpOwotICAgICAgaWYgKHZhbCAhPSBudWxsKQotICAgICAgIHsKLSAgICAgICAgdmFsLnZhbGlkYXRlKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotLy8gICAgICBlbHNlCi0vLyAgICAgICB7Ci0vLyAgICAgICAgdmFsSW5mby5hZGROYW1lc3BhY2VXaXRoTm9WYWxpZGF0b3IobmFtZXNwYWNlKTsKLS8vICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBFbnN1cmUgdGhhdCB0aGUgVHlwZXMgZWxlbWVudCBpcyBjb3JyZWN0LiAKLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmcm9tIHRoZSBjdXJyZW50IGRvY3VtZW50LgotICAgKi8KLQotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVR5cGVzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgVHlwZXMgdHlwZXMgPSB3c2RsRGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIC8vIGVuc3VyZSB0aGF0IHR5cGVzIGlzIGRlZmluZWQKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IHBhcmVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBwYXJlbnRzLmFkZCh3c2RsRGVmaW5pdGlvbik7Ci0gICAgICBwYXJlbnRzLmFkZCgwLCB0eXBlcyk7Ci0gICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIGFsbCBvZiB0aGUgZGVjbGFyZWQgc2VydmljZXMgZm9yIHRoZSBkZWZpbml0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVNlcnZpY2VzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgaWYgKHdzZGxEZWZpbml0aW9uLmdldFNlcnZpY2VzKCkgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBPYmplY3Qgc2VydmljZXNbXSA9IHdzZGxEZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkudG9BcnJheSgpOwotICAgIExpc3QgcGFyZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBwYXJlbnRzLmFkZCh3c2RsRGVmaW5pdGlvbik7Ci0gICAgSGFzaHRhYmxlIGFsbFBvcnRzID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgLy9UT0RPOiBjaGVjayB0aGF0IHBvcnRzIGluIG90aGVyIGltcG9ydGVkIGZpbGVzIGRvbid0IGNvbmZsaWN0IHdpdGggcG9ydHMgaW4gdGhpcyBvbmUKLSAgICAvLyAgICAvLyByZWdpc3RlciBhbGwgb2YgdGhlIGltcG9ydGVkIHBvcnRzCi0gICAgLy8gICAgSXRlcmF0b3IgaW1wb3J0cyA9IHdzZGxEZWZpbml0aW9uLmdldEltcG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIC8vICAgIHdoaWxlKGltcG9ydHMuaGFzTmV4dCgpKQotICAgIC8vICAgIHsKLSAgICAvLyAgICAgIEl0ZXJhdG9yIGltcHNlcnZpY2VzID0gKChJbXBvcnQpaW1wb3J0cy5uZXh0KCkpLmdldERlZmluaXRpb24oKS5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gICAgICB3aGlsZShpbXBzZXJ2aWNlcy5oYXNOZXh0KCkpCi0gICAgLy8gICAgICB7Ci0gICAgLy8gICAgICAgIEl0ZXJhdG9yIGltcHBvcnRzID0gKChTZXJ2aWNlKWltcHNlcnZpY2VzLm5leHQoKSkuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIC8vICAgICAgICB3aGlsZShpbXBwb3J0cy5oYXNOZXh0KCkpCi0gICAgLy8gICAgICAgIHsKLSAgICAvLyAgICAgICAgICBQb3J0IHRlbXBQID0gKFBvcnQpaW1wcG9ydHMubmV4dCgpOwotICAgIC8vICAgICAgICAgIGFsbFBvcnRzLnB1dCh0ZW1wUC5nZXROYW1lKCksdGVtcFApOwkKLSAgICAvLyAgICAgICAgfQotICAgIC8vICAgICAgfQotICAgIC8vICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNlcnZpY2UgcyA9IChTZXJ2aWNlKXNlcnZpY2VzW2ldOwotICAgICAgcGFyZW50cy5hZGQoMCwgcyk7Ci0gICAgICBPYmplY3QgcG9ydHNbXSA9IHMuZ2V0UG9ydHMoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBvcnRzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBQb3J0IHAgPSAoUG9ydClwb3J0c1tqXTsKLSAgICAgICAgcGFyZW50cy5hZGQoMCwgcCk7Ci0gICAgICAgIC8vIGEgUG9ydCBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIFdEU0wgZG9jdW1lbnQKLSAgICAgICAgaWYgKGFsbFBvcnRzLmNvbnRhaW5zKHAuZ2V0TmFtZSgpKSkKLSAgICAgICAgeyAgU3RyaW5nW10gYXJncyA9IHtwLmdldE5hbWUoKX07Ci0gICAgICAgICAgCi0gICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUE9SVF9OQU1FX05PVF9VTklRVUUsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBfUE9SVF9OQU1FX05PVF9VTklRVUUsIGFyZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGFsbFBvcnRzLnB1dChwLmdldE5hbWUoKSwgcCk7Ci0KLSAgICAgICAgICAvLyBnZXQgdGhlIGJpbmRpbmcgZm9yIHRoaXMgcG9ydCBhbmQgc2VlIGlmIHRoZSBQb3J0VHlwZSBmb3IgdGhlIGJpbmRpbmcKLSAgICAgICAgICAvLyBpcyBkZWZpbmVkCi0gICAgICAgICAgaWYgKHAuZ2V0QmluZGluZygpID09IG51bGwgfHwgcC5nZXRCaW5kaW5nKCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgICAgICBpZiAocC5nZXRCaW5kaW5nKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYmluZGluZ05hbWUgPSBwLmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGFyZ3NbXSA9IHtwLmdldE5hbWUoKX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfTk9fQklORElOR19GT1JfUE9SVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsIFFVT1RFICsgYmluZGluZ05hbWUgKyBRVU9URSksCi0gICAgICAgICAgICAgIHAsIF9OT19CSU5ESU5HX0ZPUl9QT1JULCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIHRoYXQgdGhlIG91dHB1dCBvZiBvbmUgcG9ydCBpc24ndCB0aGUgaW5wdXQgb2YgYW5vdGhlciBhbmQgdmljZSB2ZXJzYQotICAgICAgICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGUgcG9ydAotICAgICAgICAgICAgLy8gdGhlcmUgY2FuIG9ubHkgYmUgb25lIGFuZCBtdXN0IGJlIG9uZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgZGVmaW5lZCBmb3IgYSBwb3J0Ci0gICAgICAgICAgICAvLyBUT0RPOiBSZXZpc2l0LiBUaGVyZSBpcyBubyBzdGFuZGFyZCB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgICAgICAgICAgLy8gc3BlY2lmaWVzIHRoZSBhZGRyZXNzLiBFdmVuIHdoZW4gdGhlIHBvcnQgaGFzIGF0IGxlYXN0IG9uZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQsCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyB3YXkgdG8gZW5zdXJlIHRoYXQgaXMgInRoZSIgYWRkcmVzcyBvbmUuCi0gICAgICAgICAgICBMaXN0IGV4dGVsZW1zID0gcC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICAgIGlmIChleHRlbGVtcy5zaXplKCkgPCAxKQotICAgICAgICAgICAgeyBTdHJpbmcgYXJnc1tdPSB7cC5nZXROYW1lKCl9OwotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9OT19BRERSRVNTX1BPUlQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9OT19BRERSRVNTX1BPUlQsIGFyZ3MpOwotICAgICAgICAgICAgfQotLy8gU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzM4NTQgICAgICAgICAgICAKLS8vIFRoZSBXUy1JIGJhc2ljIHByb2ZpbGUgaGFzIHJlbGF4ZWQgdGhlIG51bWJlciBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGFsbG93ZWQgZm9yIHBvcnRzLgotLy8gQSBudW1iZXIgb2YgV1Mgc3BlY2lmaWNhdGlvbnMgbGlrZSBKQVgtV1MgYW5kIFdTIFBvbGljeSBkZWZpbmUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgcG9ydHMuCi0vLyBUaGlzIGNvZGUgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIGl0IGlzIHRvbyByZXN0cmljdGl2ZSBhbmQgZ2VuZXJhdGVzIGVycm9ycyB0aGF0IGFwcGVhciBpbnZhbGlkLiAgICAgICAgICAgIAotLy8gICAgICAgICAgICBlbHNlIGlmIChleHRlbGVtcy5zaXplKCkgPiAxKQotLy8gICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDE7IGsgPCBleHRlbGVtcy5zaXplKCk7IGsrKykKLS8vICAgICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpfTsKLS8vICAgICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0vLyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9NT1JFX1RIRU5fT05FX0FERFJFU1NfUE9SVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotLy8gICAgICAgICAgICAgICAgICBleHRlbGVtcy5nZXQoayksIF9NT1JFX1RIRU5fT05FX0FERFJFU1NfUE9SVCwgYXJncyk7Ci0vLyAgICAgICAgICAgICAgfQotLy8gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgIH0KLSAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIHRoZSBzZXJ2aWNlCi0gICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCBzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhhdCB0aGUgYmluZGluZ3MgcmVmZXIgdG8gdmFsaWQgUG9ydFR5cGVzIGFuZCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMKLSAgLy8gaW4gYSBnaXZlbiBiaW5kaW5nIHJlZmVyIHRvIGEgZGVmaW5lZCBvcGVyYXRpb24gd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nCi0gIC8vIFBvcnRUeXBlLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUJpbmRpbmdzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgaWYgKHdzZGxEZWZpbml0aW9uLmdldEJpbmRpbmdzKCkgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBPYmplY3QgYmluZGluZ3NbXSA9IHdzZGxEZWZpbml0aW9uLmdldEJpbmRpbmdzKCkudmFsdWVzKCkudG9BcnJheSgpOwotICAgIExpc3QgcGFyZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBwYXJlbnRzLmFkZCh3c2RsRGVmaW5pdGlvbik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBCaW5kaW5nIGIgPSAoQmluZGluZyliaW5kaW5nc1tpXTsKLSAgICAgIHBhcmVudHMuYWRkKDAsIGIpOwotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiLmdldFBvcnRUeXBlKCk7Ci0KLSAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIHRoZSBQb3J0VHlwZSBpcyBub3QgZGVmaW5lZCBzbyBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIG9wZXJhdGlvbnMKLSAgICAgIGlmIChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKQotICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3BvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIGIuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICBfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HLAotICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgYiwgX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORywgYXJncyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHRoZSBQb3J0VHlwZSBpcyBkZWZpbmVkIHNvIG5vdyB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQKLSAgICAgICAgT2JqZWN0IGJpbmRpbmdPcGVyYXRpb25zW10gPSBiLmdldEJpbmRpbmdPcGVyYXRpb25zKCkudG9BcnJheSgpOwotCi0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBvcGVyYXRpb24gaXMgZGVmaW5lZCBmb3IgZWFjaCBCaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYmluZGluZ09wZXJhdGlvbnMubGVuZ3RoOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNba107Ci0gICAgICAgICAgcGFyZW50cy5hZGQoMCwgYm8pOwotICAgICAgICAgIGlmIChiby5nZXRPcGVyYXRpb24oKSA9PSBudWxsIHx8IGJvLmdldE9wZXJhdGlvbigpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHtiLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCl9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgYm8sIF9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSwgYXJncyk7Ci0gICAgICAgICAgICAvLyBuaWNlIGlkZWEgdG8gYWRkIHN1Z2dlc3Rpb25zIHRvIG90aGVyIGVsZW1lbnRzIHRvIGZpeCB0aGUgZXJyb3IKLSAgICAgICAgICAgIC8vIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBtdWx0aXBlIGZpbGVzIGxpa2UgdGhpcwotICAgICAgICAgICAgLy9hZGRWYWxpZGF0aW9uTWVzc2FnZSh3YXJuaW5nTGlzdCxwb3J0VHlwZSxwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIkRlZmluZSBhbiBvcGVyYXRpb24gaGVyZSB0byBjb3JyZXNwb25kIHdpdGggdGhlIG9wZXJhdGlvbiBpbjogIiArIGJvLmdldE5hbWUoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIHRha2UgY2FyZSBvZiBhbGwgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgb3BlcmF0aW9uLCBiaW5kaW5nIGlucHV0cywgb3V0cHV0cyBhbmQgZmF1bHRzCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmRpbmdJbnB1dCBiaW5wdXQgPSBiby5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChiaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFyZW50cy5hZGQoMCwgYmlucHV0KTsKLSAgICAgICAgICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgYmluZGluZyBvcGVyYXRpb24gaW5wdXQKLSAgICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QoCi0gICAgICAgICAgICAgICAgcGFyZW50cywKLSAgICAgICAgICAgICAgICBiby5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgICAgICB2YWxJbmZvKTsKLSAgICAgICAgICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBCaW5kaW5nT3V0cHV0IGJvdXRwdXQgPSBiby5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAoYm91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJlbnRzLmFkZCgwLCBib3V0cHV0KTsKLSAgICAgICAgICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgYmluZGluZyBvcGVyYXRpb24gb3V0cHV0Ci0gICAgICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KAotICAgICAgICAgICAgICAgIHBhcmVudHMsCi0gICAgICAgICAgICAgICAgYm8uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgICAgIHZhbEluZm8pOwotICAgICAgICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIG5vIGlucHV0IG9yIG91dHB1dCBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGUgb3BlcmF0aW9uCi0gICAgICAgICAgICBpZiAoYmlucHV0ID09IG51bGwgJiYgYm91dHB1dCA9PSBudWxsKQotICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0geyBiby5nZXROYW1lKCkgfTsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgIGJvLCBfT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBlYWNoIGJpbmRpbmcgb3BlcmF0aW9uIGZhdWx0Ci0gICAgICAgICAgICBJdGVyYXRvciBmYXVsdHMgPSBiby5nZXRCaW5kaW5nRmF1bHRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChmYXVsdHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nRmF1bHQgYmYgPSAoQmluZGluZ0ZhdWx0KWZhdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgIHBhcmVudHMuYWRkKDAsIGJmKTsKLSAgICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgYmYuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgYmluZGluZyBvcGVyYXRpb24KLSAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCBiby5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCBiLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRoYXQgYWxsIG9mIHRoZSBQb3J0VHlwZXMgaGF2ZSB2YWxpZCBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlaXIKLSAgLy8gb3BlcmF0aW9uIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IHR5cGVzLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVBvcnRUeXBlcyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIGlmICh3c2RsRGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE9iamVjdCBwb3J0dHlwZXNbXSA9IHdzZGxEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLnRvQXJyYXkoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHR5cGVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHAgPSAoUG9ydFR5cGUpcG9ydHR5cGVzW2ldOwotICAgICAgT2JqZWN0IG9wZXJhdGlvbnNbXSA9IHAuZ2V0T3BlcmF0aW9ucygpLnRvQXJyYXkoKTsKLSAgICAgIExpc3QgaW5BbmRPdXROYW1lcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3BlcmF0aW9ucy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG8gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnNbal07Ci0gICAgICAgIGlmIChvID09IG51bGwgfHwgby5pc1VuZGVmaW5lZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBtZXNzYWdlcyBhcmUgZGVmaW5lZCBmb3IgdGhlIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0cwotICAgICAgICBNZXNzYWdlIG07Ci0gICAgICAgIElucHV0IGlucHV0ID0gby5nZXRJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBpbnB1dE5hbWUgPSBpbnB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgLy8gaWYgdGhlIG5hbWUgaXNuJ3QgZGVmaW5lZCBpdCBkZWZhdWx0cyB0byB0aGlzCi0gICAgICAgICAgaWYgKGlucHV0TmFtZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0TmFtZSA9IG8uZ2V0TmFtZSgpICsgUkVRVUVTVDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGluQW5kT3V0TmFtZXMuY29udGFpbnMoaW5wdXROYW1lKSkKLSAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7aW5wdXROYW1lLCBwLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIF9JTlBVVF9OQU1FX05PVF9VTklRVUUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgICAgICBpbnB1dCwgX0lOUFVUX05BTUVfTk9UX1VOSVFVRSwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbkFuZE91dE5hbWVzLmFkZChpbnB1dE5hbWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG0gPSBpbnB1dC5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgaWYgKG0gIT0gbnVsbCAmJiBtLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NOYW1lID0gRU1QVFlfU1RSSU5HOwotICAgICAgICAgICAgUU5hbWUgbWVzc1FOYW1lID0gbS5nZXRRTmFtZSgpOwotICAgICAgICAgICAgaWYgKG1lc3NRTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzTmFtZSA9IG1lc3NRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7bWVzc05hbWV9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfTUVTU0FHRV9VTkRFRklORURfRk9SX0lOUFVULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgaW5wdXQsIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBPdXRwdXQgb3V0cHV0ID0gby5nZXRPdXRwdXQoKTsKLSAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG91dHB1dE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIC8vIGlmIHRoZSBuYW1lIGlzbid0IGRlZmluZWQgaXQgZGVmYXVsdHMgdG8gdGhpcwotICAgICAgICAgIGlmIChvdXRwdXROYW1lID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0TmFtZSA9IG8uZ2V0TmFtZSgpICsgUkVTUE9OU0U7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKGluQW5kT3V0TmFtZXMuY29udGFpbnMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHtvdXRwdXROYW1lLCBwLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCl9OwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBfT1VUUFVUX05BTUVfTk9UX1VOSVFVRSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgIG91dHB1dCwgX09VVFBVVF9OQU1FX05PVF9VTklRVUUsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5BbmRPdXROYW1lcy5hZGQob3V0cHV0TmFtZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbSA9IG91dHB1dC5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgaWYgKG0gIT0gbnVsbCAmJiBtLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NOYW1lID0gRU1QVFlfU1RSSU5HOwotICAgICAgICAgICAgUU5hbWUgbWVzc1FOYW1lID0gbS5nZXRRTmFtZSgpOwotICAgICAgICAgICAgaWYgKG1lc3NRTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzTmFtZSA9IG1lc3NRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7bWVzc05hbWV9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgIG91dHB1dCwgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIE9iamVjdCBmYXVsdHNbXSA9IG8uZ2V0RmF1bHRzKCkudmFsdWVzKCkudG9BcnJheSgpOwotCi0gICAgICAgIC8vTGlzdCBmYXVsdE5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGZhdWx0cy5sZW5ndGg7IGsrKykKLSAgICAgICAgewotICAgICAgICAgIEZhdWx0IGYgPSAoRmF1bHQpZmF1bHRzW2tdOwotICAgICAgICAgIG0gPSBmLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc05hbWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgICAgICBRTmFtZSBtZXNzUU5hbWUgPSBtLmdldFFOYW1lKCk7Ci0gICAgICAgICAgICBpZiAobWVzc1FOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NOYW1lID0gbWVzc1FOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGFyZ3NbXSA9IHttZXNzTmFtZX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICBmLCBfTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxULCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIG1lc3NhZ2VzIGRlZmluZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQgYXJlIHZhbGlkLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU1lc3NhZ2VzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgaWYgKHdzZGxEZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBJdGVyYXRvciBtZXNzYWdlcyA9IHdzZGxEZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChtZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgTWVzc2FnZSBtID0gKE1lc3NhZ2UpbWVzc2FnZXMubmV4dCgpOwotICAgICAgaWYgKCFtLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHRoZSBtZXNzYWdlIGhhcyBhIHBhcnQgKGFuZCBpdCBkb2Vzbid0IGhhdmUgdG8pCi0gICAgICAgIC8vIGVuc3VyZSBlYWNoIG1lc3NhZ2UgcGFydCBoYXMgZWl0aGVyIGFuIGVsZW1lbnQgb3IgYSB0eXBlCi0gICAgICAgIGlmICghbS5nZXRQYXJ0cygpLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIHBhcnRzID0gbS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQYXJ0IHAgPSAoUGFydClwYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAgICBRTmFtZSBlbGVtZW50TmFtZSA9IHAuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGVOYW1lID0gcC5nZXRUeXBlTmFtZSgpOwotICAgICAgICAgICAgTWFwIGV4dEF0dHMgPSBwLmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIC8vIFRPRE86VGhpcyB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWQgYXMgcGFydHMgY2FuIGhhdmUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgLy9lbnN1cmUgdGhlIHBhcnQgaGFzIGEgdHlwZSBvciBhbiBlbGVtZW50IGRlZmluZWQKLSAgICAgICAgICAgIGlmIChlbGVtZW50TmFtZSA9PSBudWxsICYmIHR5cGVOYW1lID09IG51bGwgJiYgKGV4dEF0dHMgPT0gbnVsbCB8fCBleHRBdHRzLmlzRW1wdHkoKSkpCi0gICAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7IHAuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUEFSVF9OT19FTEVNRU5UX09SX1RZUEUsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL2hlcmUgdGhlIHBhcnQgaGFzIGJvdGggdGhlIGVsZW1lbnQgYW5kIHR5cGUgZGVmaW5lZCBhbmQgaXQgY2FuIG9ubHkgaGF2ZSBvbmUgZGVmaW5lZAkKLSAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnROYW1lICE9IG51bGwgJiYgdHlwZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHtwLmdldE5hbWUoKX07Ci0gICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFLCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICBwLCBfUEFSVF9CT1RIX0VMRU1FTlRfQU5EX1RZUEUsIGFyZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFjaGVja1BhcnRDb25zdGl0dWVudChlbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgICAgICBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKSwKLSAgICAgICAgICAgICAgICBFTEVNRU5ULAotICAgICAgICAgICAgICAgIHAsCi0gICAgICAgICAgICAgICAgdmFsSW5mbykpCi0gICAgICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHtwLmdldE5hbWUoKSwgZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCl9OwotICAgICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgX1BBUlRfSU5WQUxJRF9FTEVNRU5ULAotICAgICAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX1BBUlRfSU5WQUxJRF9FTEVNRU5ULCBhcmdzKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgdHlwZSBpdHNlbGYgaXMgZGVmaW5lZCBwcm9wZXJseQotICAgICAgICAgICAgICBpZiAoIWNoZWNrUGFydENvbnN0aXR1ZW50KHR5cGVOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCB0eXBlTmFtZS5nZXRMb2NhbFBhcnQoKSwgVFlQRSwgcCwgdmFsSW5mbykpCi0gICAgICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHtwLmdldE5hbWUoKSwgdHlwZU5hbWUuZ2V0TG9jYWxQYXJ0KCkgfTsgCi0gICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICBfUEFSVF9JTlZBTElEX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICBwLCBfUEFSVF9JTlZBTElEX1RZUEUsIGFyZ3MpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBuYW1lIGlzIGRlZmluZWQgaW4gdGhlIG5hbWVzcGFjZSBmb3IgdGhlIHBhcnQuICBBIHBhcnQgaXMgYW4KLSAgICogRUxFTUVOVCBvciBhIFRZUEUuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gY2hlY2suCi0gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRvIGNoZWNrLgotICAgKiBAcGFyYW0gcGFydCBUaGUgcGFydCB0byBjaGVjaywgZWl0aGVyIEVMRU1FTlQgb3IgVFlQRS4KLSAgICogQHBhcmFtIHBhcnRPYmplY3QgVGhlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHBhcnQuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcGFydCBlbGVtZW50IG9mIHR5cGUgaXMgZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tQYXJ0Q29uc3RpdHVlbnQoCi0gICAgU3RyaW5nIG5hbWVzcGFjZSwKLSAgICBTdHJpbmcgbmFtZSwKLSAgICBpbnQgcGFydCwKLSAgICBQYXJ0IHBhcnRPYmplY3QsCi0gICAgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLQotICAgIGJvb2xlYW4gcGFydHZhbGlkID0gZmFsc2U7Ci0gICAgLy8gRmlyc3QgdGFrZSBjYXJlIG9mIHRoZSBzaXR1YXRpb24gd2hlcmUgaXQncyBmcm9tIHRoZSBzY2hlbWEgbmFtZXNwYWNlLgotICAgIC8vIFRoZSAxOTk5LCAyMDAwIGFuZCAyMDAxIHNjaGVtYSBuYW1lc3BhY2VzIGFyZSBhbGwgYWNjZXB0ZWQuCi0gICAgaWYgKG5hbWVzcGFjZS5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSkKLSAgICAgIHx8IG5hbWVzcGFjZS5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkKLSAgICAgIHx8IG5hbWVzcGFjZS5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgewotICAgICAgU2NoZW1hQXR0cmlidXRlVGFibGUgeHNkVGFibGUgPSBuZXcgU2NoZW1hQXR0cmlidXRlVGFibGUoKTsKLSAgICAgIGlmICh4c2RUYWJsZS5jb250YWluc1N5bWJvbChuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2hlY2sgaW5saW5lIGFuZCBpbXBvcnRlZCBzY2hlbWEKLSAgICBlbHNlCi0gICAgewotICAgICAgWFNNb2RlbFtdIHNjaGVtYXMgPSB2YWxJbmZvLmdldFNjaGVtYXMoKTsKLSAgICAgIGludCBudW1TY2hlbWFzID0gc2NoZW1hcy5sZW5ndGg7Ci0gICAgICAvL0l0ZXJhdG9yIHNjaGVtYXNJdGVyID0gc2NoZW1hcy5pdGVyYXRvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TY2hlbWFzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFhTTW9kZWwgc2NoZW1hID0gc2NoZW1hc1tpXTsKLSAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHBhcnQgPT0gRUxFTUVOVCAmJiBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9uKG5hbWUsIG5hbWVzcGFjZSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0dmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKHBhcnQgPT0gVFlQRSAmJiBzY2hlbWEuZ2V0VHlwZURlZmluaXRpb24obmFtZSwgbmFtZXNwYWNlKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnR2YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gSWYgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgaW1wb3J0ZWQgZG8gc28KLQkvLyBub3cuCi0gICAgLy8gQWxsb3cgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIHRvIGJlIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgYnV0IG1hcmsKLQkvLyBpdCBhcyBhIHdhcm5pbmcuCi0gICAgaWYgKCFwYXJ0dmFsaWQgJiYgbmFtZXNwYWNlLmVxdWFscyhTT0FQX0VOQ09ESU5HX1VSSSkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFhTRFZhbGlkYXRvciB4c2RWYWwgPSBuZXcgWFNEVmFsaWRhdG9yKCk7Ci0gICAgICAgIFN0cmluZyBzb2FwRW5jID0gdmFsSW5mby5nZXRVUklSZXNvbHZlcigpLnJlc29sdmUoIiIsIFNPQVBfRU5DT0RJTkdfVVJJLCBudWxsKS5nZXRQaHlzaWNhbExvY2F0aW9uKCk7Ci0gICAgICAgIGlmKHNvYXBFbmMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHhzZFZhbC52YWxpZGF0ZShzb2FwRW5jLCBudWxsLCB2YWxJbmZvLmdldFNjaGVtYUNhY2hlKCkpOwotICAgICAgICAgIC8vIHNhbml0eSBjaGVjayBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nCi0gICAgICAgICAgaWYgKHhzZFZhbC5pc1ZhbGlkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNNb2RlbCB4c01vZGVsID0geHNkVmFsLmdldFhTTW9kZWwoKTsKLQotICAgICAgICAgICAgaWYgKHBhcnQgPT0gRUxFTUVOVCAmJiB4c01vZGVsLmdldEVsZW1lbnREZWNsYXJhdGlvbihuYW1lLCBuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcnR2YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChwYXJ0ID09IFRZUEUgJiYgeHNNb2RlbC5nZXRUeXBlRGVmaW5pdGlvbihuYW1lLCBuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcnR2YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9QQVJULCBRVU9URSArIG5hbWUgKyBRVU9URSksIHBhcnRPYmplY3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcGVyZm9ybWluZyBXU0RMIHZhbGlkYXRpb24gb2YgYSBwYXJ0IHdpdGggdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHBhcnR2YWxpZDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRpb25JbmZvSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzNGE0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbkluZm9JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogQW4gaW1wbGVtZW5hdGlvbiBvZiBXU0RMMTFWYWxpZGF0aW9uSW5mby4KLSAqLwotcHVibGljIGNsYXNzIFdTREwxMVZhbGlkYXRpb25JbmZvSW1wbCBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0aW9uSW5mbwotewotICBwcml2YXRlIElWYWxpZGF0aW9uSW5mbyB2YWxpbmZvID0gbnVsbDsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZWxlbWVudGxvY2F0aW9ucyA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdCBzY2hlbWFzID0gbmV3IFZlY3RvcigpOwotICAKLSAgcHVibGljIFdTREwxMVZhbGlkYXRpb25JbmZvSW1wbChJVmFsaWRhdGlvbkluZm8gdmFsaW5mbykKLSAgewotICAgIHRoaXMudmFsaW5mbyA9IHZhbGluZm87Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2dldEZpbGVVUkkoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCkKLSAgewotICAgIHJldHVybiB2YWxpbmZvLmdldEZpbGVVUkkoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRTY2hlbWEob3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYShYU01vZGVsIHhzTW9kZWwpCi0gIHsKLSAgICBpZiAoeHNNb2RlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIHNjaGVtYXMuYWRkKHhzTW9kZWwpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2dldFNjaGVtYXMoKQotICAgKi8KLSAgcHVibGljIFhTTW9kZWxbXSBnZXRTY2hlbWFzKCkKLSAgewotICAgIHJldHVybiAoWFNNb2RlbFtdKXNjaGVtYXMudG9BcnJheShuZXcgWFNNb2RlbFtzY2hlbWFzLnNpemUoKV0pOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvI2NsZWFyZFNjaGVtYXMoKQotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYXJTY2hlbWFzKCkKLSAgewotICAgIHNjaGVtYXMuY2xlYXIoKTsKLSAgfQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jc2V0RWxlbWVudExvY2F0aW9ucyhqYXZhLnV0aWwuSGFzaHRhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9ucyhIYXNodGFibGUgZWxlbWVudExvY2F0aW9ucykKLSAgewotICAgIHRoaXMuZWxlbWVudGxvY2F0aW9ucyA9IGVsZW1lbnRMb2NhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCkKLSAgewotICAgIGFkZEVycm9yKG1lc3NhZ2UsIGVsZW1lbnQsIG51bGwsIG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdFtdKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50LCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsKLSAgICBMb2NhdGlvbkhvbGRlciBsb2NhdGlvbjsKLSAgICBpZiAoZWxlbWVudGxvY2F0aW9ucy5jb250YWluc0tleShlbGVtZW50KSkKLSAgICB7Ci0gICAgICBsb2NhdGlvbiA9IChMb2NhdGlvbkhvbGRlcillbGVtZW50bG9jYXRpb25zLmdldChlbGVtZW50KTsKLSAgICAgIGFkZEVycm9yKG1lc3NhZ2UsIGxvY2F0aW9uLmdldExpbmUoKSwgbG9jYXRpb24uZ2V0Q29sdW1uKCksIGxvY2F0aW9uLmdldFVSSSgpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3VtZW50cyk7Ci0gICAgfQotICAgIC8vIGlmIHdlIGdpdmUgaXQgYW4gZWxlbWVudCB0aGF0IGhhc24ndCBiZWVuIGRlZmluZWQgd2UnbGwgc2V0IHRoZSBsb2NhdGlvbgotICAgIC8vIGF0ICgwLDApIHNvIHRoZSBlcnJvciBzaG93cyB1cCBidXQgbm8gbGluZSBtYXJrZXIgaW4gdGhlIGVkaXRvcgotICAgIGVsc2UKLSAgICB7Ci0gICAgICBhZGRFcnJvcihtZXNzYWdlLCAwLCAxLCBnZXRGaWxlVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRXYXJuaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCkKLSAgewotICAgIExvY2F0aW9uSG9sZGVyIGxvY2F0aW9uOwotICAgIGlmIChlbGVtZW50bG9jYXRpb25zLmNvbnRhaW5zS2V5KGVsZW1lbnQpKQotICAgIHsKLSAgICAgIGxvY2F0aW9uID0gKExvY2F0aW9uSG9sZGVyKWVsZW1lbnRsb2NhdGlvbnMuZ2V0KGVsZW1lbnQpOwotICAgICAgYWRkV2FybmluZyhtZXNzYWdlLCBsb2NhdGlvbi5nZXRMaW5lKCksIGxvY2F0aW9uLmdldENvbHVtbigpLCBsb2NhdGlvbi5nZXRVUkkoKSk7Ci0gICAgfQotICAgIC8vIGlmIHdlIGdpdmUgaXQgYW4gZWxlbWVudCB0aGF0IGhhc24ndCBiZWVuIGRlZmluZWQgd2UnbGwgc2V0IHRoZSBsb2NhdGlvbgotICAgIC8vIGF0ICgwLDApIHNvIHRoZSBlcnJvciBzaG93cyB1cCBidXQgbm8gbGluZSBtYXJrZXIgaW4gdGhlIGVkaXRvcgotICAgIGVsc2UKLSAgICB7Ci0gICAgICBhZGRXYXJuaW5nKG1lc3NhZ2UsIDAsIDEsIGdldEZpbGVVUkkoKSk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLndzZGwxMS5XU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGROYW1lc3BhY2VXaXRoTm9WYWxpZGF0b3IoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0vLyAgewotLy8gICAgdmFsaW5mby5hZGROYW1lc3BhY2VXaXRoTm9WYWxpZGF0b3IobmFtZXNwYWNlKTsKLS8vCi0vLyAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSkKLSAgewotICAgIGFkZEVycm9yKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpLCBudWxsLCBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKQotICB7IAotICAgIHRyeQotICAgIHsgKChWYWxpZGF0aW9uSW5mb0ltcGwpdmFsaW5mbykuYWRkRXJyb3IobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKTsKLSAgICB9Ci0gICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHZhbGluZm8uYWRkRXJyb3IobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmkpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSkKLSAgewotICAgIHZhbGluZm8uYWRkV2FybmluZyhtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0VVJJUmVzb2x2ZXIoKQotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkgCi0gIHsKLQlyZXR1cm4gdmFsaW5mby5nZXRVUklSZXNvbHZlcigpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2dldFNjaGVtYUNhY2hlKCkKLSAgICovCi0gIHB1YmxpYyBYTUxHcmFtbWFyUG9vbCBnZXRTY2hlbWFDYWNoZSgpIAotICB7Ci0JWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpdmFsaW5mby5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLlhNTFNDSEVNQV9DQUNIRV9BVFRSSUJVVEUpOwotCXJldHVybiBncmFtbWFyUG9vbDsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNnZXRYTUxDYWNoZSgpCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0WE1MQ2FjaGUoKSAKLSAgewotCVhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXZhbGluZm8uZ2V0QXR0cmlidXRlKENvbnN0YW50cy5YTUxfQ0FDSEVfQVRUUklCVVRFKTsKLQlyZXR1cm4gZ3JhbW1hclBvb2w7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODk3MTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbi5WYWxpZGF0ZVdTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSB2YWxpZGF0b3IgY29udHJvbGxlciBpcyB0aGUgaGVhZCBvZiB2YWxpZGF0aW9uLiAKLSAqLwotcHVibGljIGNsYXNzIFdTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIgaW1wbGVtZW50cyBJV1NETFZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1dBUk5fTk9fVkFMRElBVE9SID0gIl9XQVJOX05PX1ZBTERJQVRPUiI7Ci0vLyAgcHJvdGVjdGVkIGZpbmFsIGludCBFUlJPUl9NRVNTQUdFID0gMDsKLS8vICBwcm90ZWN0ZWQgZmluYWwgaW50IFdBUk5JTkdfTUVTU0FHRSA9IDE7Ci0vLyAgcHJvdGVjdGVkIFN0cmluZyBmaWxlVVJJOwotLy8gIHByb3RlY3RlZCBMaXN0IHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0vLyAgcHJvdGVjdGVkIERlZmluaXRpb24gd3NkbERlZmluaXRpb247Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICAvL3Byb3RlY3RlZCBWYWxpZGF0aW9uQ29udHJvbGxlciB2YWxpZGF0aW9uQ29udHJvbGxlcjsKLSAgcHJvdGVjdGVkIFZhbGlkYXRvclJlZ2lzdHJ5IHZlciA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIoKQotICB7Ci0gICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRV9OQU1FLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5JV1NETFZhbGlkYXRvciN2YWxpZGF0ZShvcmcudzNjLmRvbS5Eb2N1bWVudCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5WYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKERvY3VtZW50IGRvbU1vZGVsLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbykgdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gcmVzZXQgdGhlIHZhcmlhYmxlcwotLy8gICAgcmVzZXQoKTsKLS8vICAgIGZpbGVVUkkgPSB2YWxJbmZvLmdldEZpbGVVUkkoKTsKLSAgICAvL3RoaXMudmFsaWRhdGlvbkNvbnRyb2xsZXIgPSB2YWxpZGF0aW9uY29udHJvbGxlcjsKLQotICAgIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB3c2RsdmFsaW5mbyA9IG5ldyBXU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGwodmFsSW5mbyk7Ci0gICAgV1NETERvY3VtZW50W10gd3NkbERvY3MgPSByZWFkV1NETERvY3VtZW50KGRvbU1vZGVsLCB2YWxJbmZvLmdldEZpbGVVUkkoKSwgZ2V0TWVzc2FnZUdlbmVyYXRvcigpLCB3c2RsdmFsaW5mbyk7Ci0gICAgLy8gRG9uJ3QgdmFsaWRhdGUgYW4gbnVsbCBkZWZpbml0aW9ucyBlbGVtZW50LiBFaXRoZXIgdGhlIGZpbGUgaXMgZW10cHkgYW5kIHZhbGlkIG9yCi0gICAgLy8gaGFkIGFuIGVycm9yIHdoZW4gcmVhZGluZy4KLSAgICBpZih3c2RsRG9jcyAhPSBudWxsKQotICAgIHsgIAotICAgICAgaW50IG51bVdTRExEb2NzID0gd3NkbERvY3MubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVdTRExEb2NzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCB0ZW1wRG9jID0gd3NkbERvY3NbaV07Ci0gICAgICAgIERlZmluaXRpb24gd3NkbERlZmluaXRpb24gPSB0ZW1wRG9jLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHNjaGVtYXMuCi0gICAgICAgIExpc3QgeHNkTGlzdCA9IHRlbXBEb2MuZ2V0U2NoZW1hcygpOwotICAgICAgICBJdGVyYXRvciB4c2RJdGVyID0geHNkTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoeHNkSXRlci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsdmFsaW5mby5hZGRTY2hlbWEoKFhTTW9kZWwpeHNkSXRlci5uZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNldCB0aGUgZWxlbWVudCBsb2NhdGlvbnMgdGFibGUuCi0gICAgICAgIHdzZGx2YWxpbmZvLnNldEVsZW1lbnRMb2NhdGlvbnModGVtcERvYy5nZXRFbGVtZW50TG9jYXRpb25zKCkpOwotICAgICAgICAvLyBTZXQgYW55IHJlYWRlciBlcnJvcnMuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgZWxlbWVudCBsb2NhdGlvbnMgdGFibGUgaXMgc2V0LgotICAgICAgICBMaXN0IHJlYWRlckVycm9ycyA9IHRlbXBEb2MuZ2V0UmVhZGVyRXJyb3JzKCk7Ci0gICAgICAgIGlmIChyZWFkZXJFcnJvcnMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIHJlYWRlckVycm9yc0kgPSByZWFkZXJFcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAocmVhZGVyRXJyb3JzSS5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUmVhZGVyRXJyb3IgcmUgPSAoUmVhZGVyRXJyb3IpcmVhZGVyRXJyb3JzSS5uZXh0KCk7Ci0gICAgICAgICAgICB3c2RsdmFsaW5mby5hZGRFcnJvcihyZS5nZXRFcnJvcigpLCByZS5nZXRPYmplY3QoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIExpc3QgcmVhZGVyV2FybmluZ3MgPSB0ZW1wRG9jLmdldFJlYWRlcldhcm5pbmdzKCk7Ci0gICAgICAgIGlmIChyZWFkZXJXYXJuaW5ncyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgcmVhZGVyV2FybmluZ3NJID0gcmVhZGVyV2FybmluZ3MuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAocmVhZGVyV2FybmluZ3NJLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBSZWFkZXJFcnJvciByZSA9IChSZWFkZXJFcnJvcilyZWFkZXJXYXJuaW5nc0kubmV4dCgpOwotICAgICAgICAgICAgd3NkbHZhbGluZm8uYWRkV2FybmluZyhyZS5nZXRFcnJvcigpLCByZS5nZXRPYmplY3QoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZhbGlkYXRlV1NETEVsZW1lbnQoQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCB3c2RsRGVmaW5pdGlvbiwgbmV3IFZlY3RvcigpLCB3c2RsdmFsaW5mbyk7Ci0gICAgICAgIHdzZGx2YWxpbmZvLmNsZWFyU2NoZW1hcygpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlYWQgaW4gdGhlIFdTREwgZG9jdW1lbnQgYW5kIHNldCB0aGUgbW9kZWwgYW5kIGltcG9ydGVkIHNjaGVtYXMuCi0gICAqIAotICAgKiBAcGFyYW0gZG9tTW9kZWwgQSBET00gbW9kZWwgb2YgdGhlIGRvY3VtZW50IHRvIGJlIHJlYWQuCi0gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIHJlYWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlZ2VuZXJhdG9yIFRoZSBtZXNzYWdlZ2VuZXJhdG9yIHRoZSByZWFkZXIgc2hvdWxkIHVzZSBmb3IgYW55IG1lc3NhZ2VzIHByb2R1Y2VkLgotICAgKiBAcGFyYW0gd3NkbHZhbGluZm8gVGhlIHZhbGlkYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IHZhbGlkYXRpb24uCi0gICAqIEByZXR1cm4gVGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMRG9jdW1lbnQoRG9jdW1lbnQgZG9tTW9kZWwsIFN0cmluZyBmaWxlLCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB3c2RsdmFsaW5mbykgdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgV1NETERvY3VtZW50W10gd3NkbERvY3MgPSBudWxsOwotICAgIHRyeQotICAgIHsKLQotICAgICAgV1NETFJlYWRlckltcGwgd3NkbFJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCh3c2RsdmFsaW5mbyk7Ci0gICAgICB3c2RsUmVhZGVyLnNldE1lc3NhZ2VHZW5lcmF0b3IobWVzc2FnZWdlbmVyYXRvcik7Ci0gICAgICBpZihkb21Nb2RlbCAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2RsRG9jcyA9IHdzZGxSZWFkZXIucmVhZFdTREwoZmlsZSwgZG9tTW9kZWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgCi0gICAgICAgIHdzZGxEb2NzID0gd3NkbFJlYWRlci5yZWFkV1NETChmaWxlKTsKLSAgICAgIH0KLSAgICAgIC8vd3NkbHZhbGluZm8uc2V0RWxlbWVudExvY2F0aW9ucyh3c2RsUmVhZGVyLmdldEVsZW1lbnRMb2NhdGlvbnNIYXNodGFibGUoKSk7Ci0vLyAgICAgIExpc3QgcmVhZGVyRXJyb3JzID0gd3NkbFJlYWRlci5nZXRSZWFkZXJFcnJvcnMoKTsKLS8vICAgICAgaWYgKHJlYWRlckVycm9ycyAhPSBudWxsKQotLy8gICAgICAgewotLy8gICAgICAgIEl0ZXJhdG9yIHJlYWRlckVycm9yc0kgPSByZWFkZXJFcnJvcnMuaXRlcmF0b3IoKTsKLS8vICAgICAgICB3aGlsZSAocmVhZGVyRXJyb3JzSS5oYXNOZXh0KCkpCi0vLyAgICAgICAgIHsKLS8vICAgICAgICAgIFJlYWRlckVycm9yIHJlID0gKFJlYWRlckVycm9yKXJlYWRlckVycm9yc0kubmV4dCgpOwotLy8gICAgICAgICAgd3NkbHZhbGluZm8uYWRkRXJyb3IocmUuZ2V0RXJyb3IoKSwgcmUuZ2V0T2JqZWN0KCkpOwotLy8gICAgICAgIH0KLS8vICAgICAgfQotLy8gICAgICBpZiAod3NkbFJlYWRlci5oYXNJbXBvcnRTY2hlbWFzKCkpCi0vLyAgICAgIHsKLS8vICAgICAgICBMaXN0IHhzZExpc3QgPSB3c2RsUmVhZGVyLmdldEltcG9ydFNjaGVtYXMoKTsKLS8vICAgICAgICBJdGVyYXRvciB4c2RJdGVyID0geHNkTGlzdC5pdGVyYXRvcigpOwotLy8gICAgICAgIHdoaWxlICh4c2RJdGVyLmhhc05leHQoKSkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICB3c2RsdmFsaW5mby5hZGRTY2hlbWEoKFhTTW9kZWwpeHNkSXRlci5uZXh0KCkpOwotLy8gICAgICAgIH0KLS8vCi0vLyAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBWYWxpZGF0ZVdTRExFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkgKyAiICIgKyBlLmdldEZhdWx0Q29kZSgpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFZhbGlkYXRlV1NETEV4Y2VwdGlvbigidW5hYmxlIHRvIHJlYWQgZmlsZSIgKyBlLmdldE1lc3NhZ2UoKSArICIgIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsRG9jczsKLSAgfQotCi0gIC8qKgotICAgKiBHaXZlbiBhIFdTREwgZWxlbWVudCwgY2FsbCBWYWxpZGF0ZUVsZW1lbnQgZm9yIGl0LgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBmb3IgdGhpcyBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVXU0RMRWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm8pCi0gIHsKLSAgICBJV1NETDExVmFsaWRhdG9yIHZhbCA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KG5hbWVzcGFjZSk7Ci0gICAgaWYgKHZhbCAhPSBudWxsKQotICAgIHsKLSAgICAgIHZhbC52YWxpZGF0ZShlbGVtZW50LCBwYXJlbnRzLCB3c2RsdmFsaW5mbyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JICAvL1RPRE86IEFkZCB0aGlzIGFzIGEgcHJlZmVyZW5jZS4KLSAgICAgIC8vd3NkbHZhbGluZm8uYWRkV2FybmluZyhtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfV0FSTl9OT19WQUxESUFUT1IsIG5hbWVzcGFjZSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgbWVzc2FnZSBnZW5lcmF0b3IgZm9yIHRoaXMgY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNnZW4gVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHRvIHNldCBmb3IgdGhpcyBjb250cm9sbGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUdlbmVyYXRvcihNZXNzYWdlR2VuZXJhdG9yIG1lc2dlbikKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNnZW47Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtZXNzYWdlIGdlbmVyYXRvciByZWdpc3RlcmVkIGZvciB0aGlzIGNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIGdlbmVyYXRvciByZWdpc3RlcmVkIGZvciB0aGlzIGNvbnRyb2xsZXIuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUdlbmVyYXRvciBnZXRNZXNzYWdlR2VuZXJhdG9yKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlZ2VuZXJhdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxlIGN1cnJlbnRseSBiZWluZyB2YWxpZGF0ZWQuIFNvbWUgdmFsaWRhdG9ycyByZXF1aXJlIHRoaXMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBmaWxlbmFtZSBmb3IgdGhlIGZpbGUgYmVpbmcgdmFsaWRhdGVkLgotICAgKi8KLS8vICBwdWJsaWMgU3RyaW5nIGdldEZpbGVuYW1lKCkKLS8vICB7Ci0vLyAgICByZXR1cm4gZmlsZVVSSTsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCBlcnJvciBtZXNzYWdlcy4KLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciB0byBhZGQuCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIGFkZEVycm9yTWVzc2FnZShPYmplY3Qgb2JqZWN0LCBTdHJpbmcgZXJyb3IpCi0vLyAgewotLy8gICAgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoRVJST1JfTUVTU0FHRSwgb2JqZWN0LCBlcnJvcik7Ci0vLyAgICBlcnJvcnMgPSB0cnVlOwotLy8gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzIHdoZW4gdGhleSBrbm93Ci0gICAqIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIHdoZXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IgbWVzc2FnZS4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkRXJyb3JNZXNzYWdlKGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgZXJyb3IpCi0vLyAgewotLy8gICAgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoRVJST1JfTUVTU0FHRSwgbGluZSwgY29sdW1uLCBlcnJvcik7Ci0vLyAgICBlcnJvcnMgPSB0cnVlOwotLy8gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkIHRoZSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSB3YXJuaW5nIFRoZSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmdNZXNzYWdlKE9iamVjdCBvYmplY3QsIFN0cmluZyB3YXJuaW5nKQotLy8gIHsKLS8vICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlKFdBUk5JTkdfTUVTU0FHRSwgb2JqZWN0LCB3YXJuaW5nKTsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gdGhleSBrbm93Ci0gICAqIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIHdoZXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIEBwYXJhbSB3YXJuaW5nIFRoZSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmdNZXNzYWdlKGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgd2FybmluZykKLS8vICB7Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZShXQVJOSU5HX01FU1NBR0UsIGxpbmUsIGNvbHVtbiwgd2FybmluZyk7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBJZiB5b3UgaGF2ZSBhbiBvYmplY3QgcmVhZCBpbiBieSB0aGUgcmVhZGVyIGZvciB0aGlzCi0gICAqIHZhbGlkYXRvcmNvbnRyb2xsZXIgdGhlIG9iamVjdCBjYW4gYmUgcGFzc2VkIGluIGhlcmUgYW5kIHRoZSBsaW5lIGFuZCBjb2x1bW4KLSAgICogaW5mb3JtYXRpb24gd2lsbCBiZSBhYnN0cmFjdGVkIGZyb20gaXQuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIG8gVGhlIG9iamVjdCB0aGF0IGhhcyB0aGUgZXJyb3IgKHVzZWQgdG8gZ2V0IHRoZSBsb2NhdGlvbikuCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICovCi0vLyAgcHJvdGVjdGVkIHZvaWQgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoaW50IHR5cGUsIE9iamVjdCBvLCBTdHJpbmcgbWVzc2FnZSkKLS8vICB7Ci0vLyAgICBpbnRbXSBsb2NhdGlvbjsKLS8vICAgIGlmIChlbGVtZW50TG9jYXRpb25zLmNvbnRhaW5zS2V5KG8pKQotLy8gICAgewotLy8gICAgICBsb2NhdGlvbiA9IChpbnRbXSllbGVtZW50TG9jYXRpb25zLmdldChvKTsKLS8vICAgIH0KLS8vICAgIC8vIGlmIHdlIGdpdmUgaXQgYW4gZWxlbWVudCB0aGF0IGhhc24ndCBiZWVuIGRlZmluZWQgd2UnbGwgc2V0IHRoZSBsb2NhdGlvbgotLy8gICAgLy8gYXQgKDAsMCkgc28gdGhlIGVycm9yIHNob3dzIHVwIGJ1dCBubyBsaW5lIG1hcmtlciBpbiB0aGUgZWRpdG9yCi0vLyAgICBlbHNlCi0vLyAgICB7Ci0vLyAgICAgIGxvY2F0aW9uID0gbmV3IGludFtdIHsgMCwgMCB9OwotLy8gICAgfQotLy8gICAgYWRkVmFsaWRhdGlvbk1lc3NhZ2UodHlwZSwgbG9jYXRpb25bMF0sIGxvY2F0aW9uWzFdLCBtZXNzYWdlKTsKLS8vICB9Ci0KLSAgLyoqCi0gICAgKiBDcmVhdGVzIGEgdmFsaWRhdGlvbiBtZXNzYWdlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4KLSAgICAqIAotICAJKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2UgdG8gYWRkLgotICAJKiBAcGFyYW0gbGluZSBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAJKiBAcGFyYW0gY29sdW1uIFRoZSBsaW5lIHdoZXJlIHRoZSBjb2x1bW4gbWVzc2FnZSBpcyBsb2NhdGVkLgotICAJKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBhZGQuCi0gIAkqLwotLy8gIHByb3RlY3RlZCB2b2lkIGFkZFZhbGlkYXRpb25NZXNzYWdlKGludCB0eXBlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIG1lc3NhZ2UpCi0vLyAgewotLy8gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLS8vICAgIHsKLS8vICAgICAgaWYgKHR5cGUgPT0gRVJST1JfTUVTU0FHRSkKLS8vICAgICAgewotLy8gICAgICAgIHZhbGlkYXRpb25Db250cm9sbGVyLmFkZEVycm9yTWVzc2FnZShsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwotLy8gICAgICB9Ci0vLyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gV0FSTklOR19NRVNTQUdFKQotLy8gICAgICB7Ci0vLyAgICAgICAgdmFsaWRhdGlvbkNvbnRyb2xsZXIuYWRkV2FybmluZ01lc3NhZ2UobGluZSwgY29sdW1uLCBtZXNzYWdlKTsKLS8vICAgICAgfQotLy8gICAgfQotLy8gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLmNvbnRyb2xsZXIuSVdTRExWYWxpZGF0b3IjaXNWYWxpZCgpCi0gICAqLwotLy8gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQotLy8gIHsKLS8vICAgIHJldHVybiAhZXJyb3JzOwotLy8gIH0KLQotICAvKioKLSAgICogUmVzZXQgdGhlIHZhbGlkYXRvciBjb250cm9sbGVyLgotICAgKi8KLS8vICBwcm90ZWN0ZWQgdm9pZCByZXNldCgpCi0vLyAgewotLy8gICAgc2NoZW1hcyA9IG5ldyBWZWN0b3IoKTsKLS8vICAgIGZpbGVVUkkgPSAiIjsKLS8vICAgIHdzZGxEZWZpbml0aW9uID0gbnVsbDsKLS8vICAgIGVsZW1lbnRMb2NhdGlvbnMgPSBudWxsOwotLy8gICAgcmVzb3VyY2VidW5kbGUgPSBudWxsOwotLy8gICAgLy92YWxpZGF0aW9uQ29udHJvbGxlciA9IG51bGw7Ci0vLyAgICBlcnJvcnMgPSBmYWxzZTsKLS8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTM1ZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi0vKioKLSAqIFRoZSBXU0RMIDEuMSB2YWxpZGF0b3IgZGVsZWdhdGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSB2YWxpZGF0b3IgdG8gYmUgaW5zdGFudGlhdGVkIGF0Ci0gKiBhIGxhdGVyIHBvaW50LgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJV1NETDExVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0KLQotICAvKioKLSAgICogR2V0IHRoZSB2YWxpZGF0b3Igc3BlY2lmaWVkIGluIHRoaXMgZGVsZWdhdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBXU0RMIDEuMSB2YWxpZGF0b3Igc3BlY2lmaWVkIGJ5IHRoaXMgZGVsZWdhdGUuCi0gICAqLwotICBwdWJsaWMgSVdTREwxMVZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKQotICB7Ci0gICAgaWYgKHZhbGlkYXRvciA9PSBudWxsKQotICAgIHsKLSAgICAgIHZhbGlkYXRvciA9IGxvYWRWYWxpZGF0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGFic3RyYWN0IElXU0RMMTFWYWxpZGF0b3IgbG9hZFZhbGlkYXRvcigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMRG9jdW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETERvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTQ1ZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMRG9jdW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25EZXNlcmlhbGl6ZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkVsZW1lbnROU0ltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkVsZW1lbnRMb2NhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLlN0cmluZ1V0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuUU5hbWVVdGlsczsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuWFBhdGhVdGlsczsKLQotLyoqCi0gKiBBIFdTREwgZG9jdW1lbnQgdGhhdCBrbm93cyBob3cgdG8gcGFyc2UgaXRzZWxmLgotICovCi1wdWJsaWMgY2xhc3MgV1NETERvY3VtZW50Ci17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3QgU1RZTEVfT05FX1dBWSA9IEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgQ29uc3RhbnRzLkVMRU1fSU5QVVQgfSk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3QgU1RZTEVfUkVRVUVTVF9SRVNQT05TRSA9Ci0gICAgQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyBDb25zdGFudHMuRUxFTV9JTlBVVCwgQ29uc3RhbnRzLkVMRU1fT1VUUFVUIH0pOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0IFNUWUxFX1NPTElDSVRfUkVTUE9OU0UgPQotICAgIEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgQ29uc3RhbnRzLkVMRU1fT1VUUFVULCBDb25zdGFudHMuRUxFTV9JTlBVVCB9KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBTVFlMRV9OT1RJRklDQVRJT04gPSBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7IENvbnN0YW50cy5FTEVNX09VVFBVVCB9KTsKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfRVJST1JfTVVMVElQTEVfVFlQRVNfREVGSU5FRCA9ICJfRVJST1JfTVVMVElQTEVfVFlQRVNfREVGSU5FRCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfVU5BQkxFX1RPX0lNUE9SVF9OT19MT0NBVElPTiA9ICJfVU5BQkxFX1RPX0lNUE9SVF9OT19MT0NBVElPTiI7Ci0KLSAgcHJvdGVjdGVkIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dFJlZyA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgZmFjdG9yeUltcGxOYW1lID0gbnVsbDsKLQotICAvLyBzdG9yZSB0aGUgZWxlbWVudCBsb2NhdGlvbnMgd2l0aGluIHRoZSBmaWxlIC0gbGluZSBhbmQgY29sdW1uIG51bWJlcnMKLSAgLy8gdGhlIGxvY2F0aW9uIGluZm8gaXMgc3RvcmVkIGFzIGFuIGludCBhcnJheSBvZiBsZW5ndGggMiB7bGluZW51bWJlciwgY29sbnVtYmVyfQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGVsZW1lbnRMb2NhdGlvbnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICAvLyBob2xkIHRoZSByZWFkZXIgZXJyb3JzCi0gIHByb3RlY3RlZCBMaXN0IHJlYWRlckVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgcmVhZGVyV2FybmluZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIAotICBwcml2YXRlIERlZmluaXRpb24gZGVmID0gbnVsbDsKLSAgcHJpdmF0ZSBTZXQgaW1wb3J0ZWREZWZzID0gbmV3IFRyZWVTZXQoKTsKLSAgcHJpdmF0ZSBFbGVtZW50IHR5cGVzRWwgPSBudWxsOwotICBwcml2YXRlIExpc3QgbWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBwb3J0dHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBiaW5kaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBMaXN0IHNlcnZpY2VzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIExpc3QgZXh0ZWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgaW50IGRlcHRoOwotICAvLyBIb2xkIHRoZSBzY2hlbWFzIHRoYXQgYXJlIGltcG9ydGVkIG9yIGRlY2xhcmVkIGlubGluZSBpbiB0aGlzIHdzZGwgZG9jdW1lbnQuCi0gIHByaXZhdGUgTGlzdCBzY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxpbmZvOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLiBQZXJmb3JtcyBhIHByZXBhcnNlIG9mIHRoZSBkb2N1bWVudCBhbmQgaGFuZGxlcyBpbXBvcnRzIGFuZCB0eXBlcy4KLSAgICogCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIFVSSSBvZiB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkZWZFbCBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlcHRoIFRoZSBkZXB0aCBvZiB0aGlzIGRvY3VtZW50IGluIGEgZG9jdW1lbnQgdHJlZS4KLSAgICogQHBhcmFtIG1lc3NhZ2VnZW5lcmF0b3IgQSBtZXNzYWdlZ2VuZXJhdG9yIHVzZWQgZm9yIHJldHJpZXZpbmcgc3RyaW5ncy4KLSAgICogQHBhcmFtIHZhbGluZm8gQSBXU0RMMTFWYWxpZGF0aW9uSW5mbyBvYmplY3QgZm9yIHJlcG9ydGluZyBtZXNzYWdlcy4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50KFN0cmluZyBkb2N1bWVudEJhc2VVUkksIEVsZW1lbnQgZGVmRWwsIGludCBkZXB0aCwgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsaW5mbykgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRoaXMubWVzc2FnZWdlbmVyYXRvciA9IG1lc3NhZ2VnZW5lcmF0b3I7Ci0gICAgdGhpcy52YWxpbmZvID0gdmFsaW5mbzsKLSAgICB0aGlzLmRlcHRoID0gZGVwdGg7Ci0gICAgCi0gICAgY2hlY2tFbGVtZW50TmFtZShkZWZFbCwgQ29uc3RhbnRzLlFfRUxFTV9ERUZJTklUSU9OUyk7Ci0gICAgCi0gICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9Ci0gICAgICAoZmFjdG9yeUltcGxOYW1lICE9IG51bGwpID8gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoZmFjdG9yeUltcGxOYW1lKSA6IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgZGVmID0gZmFjdG9yeS5uZXdEZWZpbml0aW9uKCk7Ci0gICAgLy8gRml4IGZvciBXU0RMNEogYWRkaW5nIGRlZmF1bHQgV1NETCBuYW1lc3BhY2Ugd2hlbiBubyBkZWZhdWx0Ci0gICAgLy8gbmFtZXNwYWNlIGhhcyBiZWVuIGRlY2xhcmVkLgotICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGZpeCBvbmNlIGZpeGVkIGluIFdTREw0Si4KLSAgICBpZihkZWYuZ2V0TmFtZXNwYWNlKCIiKSAhPSBudWxsKQotICAgIAlkZWYuZ2V0TmFtZXNwYWNlcygpLnJlbW92ZSgiIik7Ci0KLSAgICBpZiAoZXh0UmVnICE9IG51bGwpCi0gICAgewotICAgICAgZGVmLnNldEV4dGVuc2lvblJlZ2lzdHJ5KGV4dFJlZyk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZGVmRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZGVmRWwsIENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgIE5hbWVkTm9kZU1hcCBhdHRycyA9IGRlZkVsLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChkb2N1bWVudEJhc2VVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWYuc2V0RG9jdW1lbnRCYXNlVVJJKGRvY3VtZW50QmFzZVVSSSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWYuc2V0UU5hbWUobmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbmFtZSkpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWYuc2V0VGFyZ2V0TmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgaW50IHNpemUgPSBhdHRycy5nZXRMZW5ndGgoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgIHsKLSAgICAgIEF0dHIgYXR0ciA9IChBdHRyKWF0dHJzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gYXR0ci5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBhdHRyLmdldExvY2FsTmFtZSgpOwotICAgICAgU3RyaW5nIHZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwgJiYgbmFtZXNwYWNlVVJJLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hNTE5TKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGxvY2FsUGFydCAhPSBudWxsICYmICFsb2NhbFBhcnQuZXF1YWxzKENvbnN0YW50cy5BVFRSX1hNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIGRlZi5hZGROYW1lc3BhY2UobG9jYWxQYXJ0LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZGVmLmFkZE5hbWVzcGFjZShudWxsLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBhcmUgcHJvYmxlbXMgd2hlbiB0aGUgbW9kZWwgaXMgY3JlYXRlZCBhbmQgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGlzIG5vdAotICAgIC8vIEltcG9ydCAtIFR5cGVzIC0gTWVzc2FnZSAtIFBvcnRUeXBlIC0gQmluZGluZyAtIFNlcnZpY2Ugc28gd2UgbmVlZCB0byByZWFkIHRoZW0KLSAgICAvLyBpbnRvIHRoZSBtb2RlbCBpbiB0aGF0IG9yZGVyCi0gICAgLy8gUGVyZm9ybWFuY2Ugd2lzZSB0aGlzIHNob3VsZCBiZSBtb2RpZmllZCBhcyB3ZSBoYXZlIHRvIG1ha2UgNSBleHRyYSBsb29wcyB0aHJvdWdoCi0gICAgLy8gYWxsIG9mIHRoZSBlbGVtZW50cyBhcyBhIHJlc3VsdAotCi0gICAgLy8gdGFrZSBjYXJlIG9mIEltcG9ydHMsIFR5cGVzLCBEb2N1bWVudGF0aW9uIGFuZCBleHRlbnNpYmxlZWxlbWVudHMgdG9nZXRoZXIgLSBzYXZlcyBhIHBhc3MgZm9yIERvY3VtZW50YXRpb24gCi0gICAgLy8gbGF0ZXIgYW5kIERvY3MgZG9uJ3QgZWZmZWN0IGFueXRoaW5nIGVsc2UgLSBJbXBvcnRzIGFuZCBUeXBlcyBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgdGhpbmcKLSAgICAvLyBubyBwcmVjb25jZWl2ZWQgaWRlYXMgYWJvdXQgZXh0ZW5zaWJsZSBlbGVtZW50cwotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoZGVmRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLQotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lNUE9SVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZSh0ZW1wRWwsIENvbnN0YW50cy5BVFRSX05BTUVTUEFDRSk7Ci0gICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZSh0ZW1wRWwsIENvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKTsKLSAgICAgICAgaWYobG9jYXRpb25VUkkgPT0gbnVsbCB8fCBsb2NhdGlvblVSSS5lcXVhbHMoIiIpKQotICAgICAgICB7Ci0gICAgICAgICAgYWRkUmVhZGVyRXJyb3IoZGVmLCB0ZW1wRWwsIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgSW1wb3J0SG9sZGVyIGloID0gbmV3IEltcG9ydEhvbGRlcihuYW1lc3BhY2VVUkksIGxvY2F0aW9uVVJJLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCksIHRoaXMsIGRlcHRoKzEsIHRlbXBFbCwgbWVzc2FnZWdlbmVyYXRvciwgdmFsaW5mbyk7Ci0gICAgICAgICAgLy8gT25seSBhZGQgdGhlIGltcG9ydCB0byB0aGUgbGlzdCBpZiBpdCBpcyBub3QgYW4gaW1wb3J0IGZvciB0aGlzIGRvY3VtZW50LgotICAgICAgICAgIGlmKCFkb2N1bWVudEJhc2VVUkkuZXF1YWxzKGloLmdldExvY2F0aW9uKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydGVkRGVmcy5hZGQoaWgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzZXRMb2NhdGlvbih0ZW1wRWwsIHRlbXBFbCk7Ci0vLyAgICAgICAgaWYgKGltcG9ydGVkRGVmcyA9PSBudWxsKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIGltcG9ydGVkRGVmcyA9IG5ldyBIYXNodGFibGUoKTsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgaWYgKGRvY3VtZW50QmFzZVVSSSAhPSBudWxsKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIGltcG9ydGVkRGVmcy5wdXQoZG9jdW1lbnRCYXNlVVJJLCBkZWYpOwotLy8gICAgICAgIH0KLS8vICAgICAgICBkZWYuYWRkSW1wb3J0KHBhcnNlSW1wb3J0KHRlbXBFbCwgZGVmLCBpbXBvcnRlZERlZnMpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGRlZi5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fVFlQRVMsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGlmKHR5cGVzRWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNldExvY2F0aW9uKHRlbXBFbCwgdGVtcEVsKTsKLSAgICAgICAgICBhZGRSZWFkZXJFcnJvcihkZWYsIHRlbXBFbCwgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX01VTFRJUExFX1RZUEVTX0RFRklORUQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0eXBlc0VsID0gdGVtcEVsOwotICAgICAgICAgIHBhcnNlVHlwZXMoKTsKLSAgICAgICAgfQotLy8gICAgICAgIGRlZi5zZXRUeXBlcyhwYXJzZVR5cGVzKHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9NRVNTQUdFLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBtZXNzYWdlcy5hZGQodGVtcEVsKTsKLSAgICAgICAgLy9kZWYuYWRkTWVzc2FnZShwYXJzZU1lc3NhZ2UodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1BPUlRfVFlQRSwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcG9ydHR5cGVzLmFkZCh0ZW1wRWwpOwotICAgICAgICAvLyAgICAgICAgICAgICBQb3J0VHlwZSBwdCA9IHBhcnNlUG9ydFR5cGUodGVtcEVsLCBkZWYpOwotICAgICAgICAvLyAgICAgICAgICAgICBpZihwdCAhPSBudWxsKQotICAgICAgICAvLyAgICAgICAgICAgICB7Ci0gICAgICAgIC8vICAgICAgICAgIGRlZi5hZGRQb3J0VHlwZShwdCk7Ci0gICAgICAgIC8vICAgICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0JJTkRJTkcsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdzLmFkZCh0ZW1wRWwpOwotICAgICAgICAvL2RlZi5hZGRCaW5kaW5nKHBhcnNlQmluZGluZyh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fU0VSVklDRSwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZXMuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vZGVmLmFkZFNlcnZpY2UocGFyc2VTZXJ2aWNlKHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGV4dGVsZW1lbnRzLmFkZCh0ZW1wRWwpOwotICAgICAgICAvLyAgICAgICAgZGVmLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgICAgICAvLyAgICAgICAgICBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KERlZmluaXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYSBzZXQgb2YgdGhlIGltcG9ydHMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gQSBzZXQgb2YgdGhlIGltcG9ydHMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBTZXQgZ2V0SW1wb3J0cygpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0ZWREZWZzOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBkZWYKLSAgICogQHBhcmFtIGRvYwotICAgKiBAcGFyYW0gbmFtZXNwYWNlCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBzZXRJbXBvcnQoRGVmaW5pdGlvbiBkZWYsIEVsZW1lbnQgZG9jLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0vLyAgewotLy8gICAgaWYobG9jYXRpb24gPT0gbnVsbCB8fCBsb2NhdGlvbi5lcXVhbHMoIiIpKQotLy8gICAgewotLy8gICAgICB2YWxpbmZvLmFkZEVycm9yKClfVU5BQkxFX1RPX0lNUE9SVF9OT19MT0NBVElPTiAKLS8vICAgIH0KLS8vICAgIEltcG9ydCBpbXAgPSBkZWYuY3JlYXRlSW1wb3J0KCk7Ci0vLyAgICBpbXAuc2V0RGVmaW5pdGlvbihkZWYpOwotLy8gICAgaW1wLnNldERvY3VtZW50YXRpb25FbGVtZW50KGRvYyk7Ci0vLyAgICBpbXAuc2V0TmFtZXNwYWNlVVJJKG5hbWVzcGFjZSk7Ci0vLyAgICBpbXAuc2V0TG9jYXRpb25VUkkobG9jYXRpb24pOwotLy8gICAgZGVmLmFkZEltcG9ydChpbXApOwotLy8gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgdHlwZXMgaW4gdGhlIFdTREwgZG9jdW1lbnQuIEhhbmRsZXMgZG9jdW1lbnRhdGlvbiwgaW1wb3J0IGFuZCBzY2hlbWEKLSAgICogZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZVR5cGVzKCkKLSAgewotICAgIFR5cGVzIHR5cGVzID0gZGVmLmNyZWF0ZVR5cGVzKCk7Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KHR5cGVzRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICB0eXBlcy5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodGVtcEVsLmdldExvY2FsTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImltcG9ydCIpKQotICAgICAgICAvL2Vsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lNUE9SVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgLy8gdGhpcyBzaG91bGRuJ3QgcmVhbGx5IGJlIHVzZWQgaGVyZSBidXQgYSBsaXR0bGUgaGFjayB3aWxsIG1ha2UKLSAgICAgICAgLy8gbGlmZSBlYXNpZXIKLSAgICAgICAgLy9wYXJzZUltcG9ydCh0ZW1wRWwsIGRlZiwgKE1hcCluZXcgSGFzaHRhYmxlKCkpOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHRlbXBFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRVNQQUNFKTsKLSAgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHRlbXBFbCwgInNjaGVtYUxvY2F0aW9uIik7Ci0gICAgICAgIGltcG9ydGVkRGVmcy5hZGQobmV3IEltcG9ydEhvbGRlcihuYW1lc3BhY2VVUkksIGxvY2F0aW9uVVJJLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCksIHRoaXMsIGRlcHRoKzEsIHRlbXBFbCwgbWVzc2FnZWdlbmVyYXRvciwgdmFsaW5mbykpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoVHlwZXMuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChUeXBlcy5jbGFzcywgdGVtcEVsLCBkZWYpOwotICAgICAgICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dEVsZW0pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLSAgICBkZWYuc2V0VHlwZXModHlwZXMpOwotICAgIAotICAgIHZhbGluZm8uc2V0RWxlbWVudExvY2F0aW9ucyhlbGVtZW50TG9jYXRpb25zKTsKLSAgICBMaXN0IHR5cGVzRWxlbXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZih0eXBlc0VsZW1zICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgdHlwZXNFbGVtc0l0ZXIgPSB0eXBlc0VsZW1zLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSh0eXBlc0VsZW1zSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IHR5cGVFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KXR5cGVzRWxlbXNJdGVyLm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIElubGluZVNjaGVtYVZhbGlkYXRvciB4c2RWYWwgPSBuZXcgSW5saW5lU2NoZW1hVmFsaWRhdG9yKCk7Ci0gICAgICAgIHhzZFZhbC5zZXRNZXNzYWdlR2VuZXJhdG9yKG1lc3NhZ2VnZW5lcmF0b3IpOwotICAgIAotICAgICAgICBMaXN0IHBhcmVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHBhcmVudHMuYWRkKGRlZik7Ci0gICAgICAgIHBhcmVudHMuYWRkKDAsdHlwZXMpOwotICAgICAgICB4c2RWYWwudmFsaWRhdGUodHlwZUVsZW1lbnQsIHBhcmVudHMsdmFsaW5mbyk7Ci0gICAgICAgIFhTTW9kZWxbXSB0eXBlc1NjaGVtYXMgPSB2YWxpbmZvLmdldFNjaGVtYXMoKTsKLSAgICAgICAgTGlzdCB0eXBlc1NjaGVtYUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0eXBlc1NjaGVtYXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsgIAotICAgICAgICAgIHR5cGVzU2NoZW1hTGlzdC5hZGQodHlwZXNTY2hlbWFzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBzY2hlbWFzLmFkZEFsbCh0eXBlc1NjaGVtYUxpc3QpOwotICAgICAgICB2YWxpbmZvLmNsZWFyU2NoZW1hcygpOwotICAgICAgfQotICAgIH0KLSAgICB2YWxpbmZvLnNldEVsZW1lbnRMb2NhdGlvbnMobnVsbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgbWVzc2FnZXMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlTWVzc2FnZXMoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmLmFkZE1lc3NhZ2UocGFyc2VNZXNzYWdlKChFbGVtZW50KW1lc3NhZ2VzLmdldChpKSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7fQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBwb3J0VHlwZXMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlUG9ydHR5cGVzKCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHR5cGVzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQb3J0VHlwZSBwdCA9IHBhcnNlUG9ydFR5cGUoKEVsZW1lbnQpcG9ydHR5cGVzLmdldChpKSwgZGVmKTsKLSAgICAgICAgaWYgKHB0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWYuYWRkUG9ydFR5cGUocHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7fQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBiaW5kaW5ncyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VCaW5kaW5ncygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRpbmdzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWYuYWRkQmluZGluZyhwYXJzZUJpbmRpbmcoKEVsZW1lbnQpYmluZGluZ3MuZ2V0KGkpLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIHNlcnZpY2VzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZVNlcnZpY2VzKCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZi5hZGRTZXJ2aWNlKHBhcnNlU2VydmljZSgoRWxlbWVudClzZXJ2aWNlcy5nZXQoaSksIGRlZikpOwotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRGVmaW5pdGlvbi5jbGFzcywgKEVsZW1lbnQpZXh0ZWxlbWVudHMuZ2V0KGkpLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQWRkIHRoZSBnaXZlbiBsaXN0IG9mIHNjaGVtYXMgdG8gdGhlIHNjaGVtYXMgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gc2NoZW1hcyBUaGUgbGlzdCBvZiBzY2hlbWFzIHRvIGFkZCB0byB0aGlzIGRvY3VtZW50J3Mgc2NoZW1hcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYXMoTGlzdCBzY2hlbWFzKQotICB7Ci0gICAgdGhpcy5zY2hlbWFzLmFkZEFsbChzY2hlbWFzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNjaGVtYXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTY2hlbWFzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIHNwZWNpZmllZCBiaW5kaW5nLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdFbCBUaGUgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmcgcGFyc2VCaW5kaW5nKEVsZW1lbnQgYmluZGluZ0VsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ0VsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLSAgICBRTmFtZSBwb3J0VHlwZU5hbWU7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcG9ydFR5cGVOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUoYmluZGluZ0VsLCBDb25zdGFudHMuQVRUUl9UWVBFLCBDb25zdGFudHMuRUxFTV9CSU5ESU5HLCBmYWxzZSwgZGVmKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgcG9ydFR5cGVOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShiaW5kaW5nRWwsICJ0eXBlIikpOwotICAgIH0KLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gbnVsbDsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgYmluZGluZ05hbWUgPSBuZXcgUU5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lKTsKLQotICAgICAgYmluZGluZyA9IGRlZi5nZXRCaW5kaW5nKGJpbmRpbmdOYW1lKTsKLQotICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgICAgIGJpbmRpbmcuc2V0UU5hbWUoYmluZGluZ05hbWUpOwotICAgICAgfQotICAgICAgLy8gcmVwb3J0IGFuIGVycm9yIGlmIGEgYmluZGluZyB3aXRoIHRoaXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQKLSAgICAgIGVsc2UgaWYgKCFiaW5kaW5nLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7Ci0gICAgICAgIC8vYWRkUmVhZGVyRXJyb3IoZGVmLGJpbmRpbmdFbCwgIl9CSU5ESU5HX05BTUVfQUxSRUFEWV9ERUZJTkVEIik7ICAgICAgIAotICAgICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgICBkZWYsCi0gICAgICAgICAgYmluZGluZ0VsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfQklORElOR19OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICInIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gV2hldGhlciBpdCB3YXMgcmV0cmlldmVkIG9yIGNyZWF0ZWQsIHRoZSBkZWZpbml0aW9uIGhhcyBiZWVuIGZvdW5kLgotICAgIGJpbmRpbmcuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIGlmIChwb3J0VHlwZU5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwb3J0VHlwZSA9IGRlZi5nZXRQb3J0VHlwZShwb3J0VHlwZU5hbWUpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGVOYW1lKTsKLSAgICAgICAgZGVmLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PUEVSQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihwYXJzZUJpbmRpbmdPcGVyYXRpb24odGVtcEVsLCBwb3J0VHlwZSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nLmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKGJpbmRpbmcsIGJpbmRpbmdFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdPcGVyYXRpb25FbCBUaGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBvcnRUeXBlIFRoZSBwb3J0VHlwZSB0aGUgYmluZGluZyByZWZlcmVuY2VzLgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nT3BlcmF0aW9uIHBhcnNlQmluZGluZ09wZXJhdGlvbihFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25FbCwgUG9ydFR5cGUgcG9ydFR5cGUsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBkZWYuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb25FbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChwYXJzZUJpbmRpbmdJbnB1dCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQocGFyc2VCaW5kaW5nT3V0cHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQocGFyc2VCaW5kaW5nRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAvL1N0cmluZyBpbnB1dE5hbWUgPSAoYmluZGluZ0lucHV0ICE9IG51bGwgPyBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0gICAgICAvL1N0cmluZyBvdXRwdXROYW1lID0gKGJpbmRpbmdPdXRwdXQgIT0gbnVsbCA/IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0KLSAgICAgIC8vIGhhY2sgY29kZSB0byBnZXQgYXQgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50Ci0gICAgICAvLyBpbnB1dHMgYW5kIG91dHB1dHMgCi0gICAgICBPcGVyYXRpb24gb3AgPSBudWxsOwotICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgLy8gZ2V0IGEgbGlzdCBvZiBhbGwgb3BlcmF0aW9ucyB3aXRoIG1hdGNoaW5nIG5hbWVzCi0gICAgICBMaXN0IG1hdGNoaW5nT3BlcmF0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEl0ZXJhdG9yIGlPcGVyYXRpb25zID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlPcGVyYXRpb25zLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXIgPSAoT3BlcmF0aW9uKWlPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgaWYgKG9wZXIuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgbWF0Y2hpbmdPcGVyYXRpb25zLmFkZChvcGVyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb25zICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgbWF0Y2hpbmcgb3BlcmF0aW9uIHRoaXMgaXMgd2hhdCB3ZSdyZSByZWZlcnJpbmcgdG8uCi0gICAgICAgIC8vIE9ubHkgbWF0Y2hpbmcgaWYgYmluZGluZyBvcGVyYXRpb24gaW5wdXQgbmFtZSBhbmQgb3V0cHV0IG5hbWUgYXJlCi0gICAgICAgIC8vIGJvdGggbnVsbCBvciB0aGUgc2FtZSBhcyB0aGUgcG9ydFR5cGUgb3BlcmF0aW9uIGlucHV0IGFuZCBvdXRwdXQgbmFtZXMuCi0gICAgICAgIC8vIHRoZSBwb3J0VHlwZSBvcGVyYXRpb24gbmFtZQotICAgICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb25zLnNpemUoKSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gb25seSBzYXkgdGhlIHNpbmdsZSBvcGVyYXRpb24gaXMgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvciBpZiB0aGUgbmFtZXMKLSAgICAgICAgICAvLyBvZiB0aGUgYmluZGluZyBpbnB1dCBhbmQgb3V0cHV0IGFyZSBub3Qgc3BlY2lmaWVkCi0gICAgICAgICAgT3BlcmF0aW9uIHRlbXBPcCA9IChPcGVyYXRpb24pbWF0Y2hpbmdPcGVyYXRpb25zLmdldCgwKTsKLSAgICAgICAgICBib29sZWFuIGlucHV0T0sgPSBmYWxzZTsKLSAgICAgICAgICBib29sZWFuIG91dHB1dE9LID0gZmFsc2U7Ci0gICAgICAgICAgSW5wdXQgdGVtcElucHV0ID0gdGVtcE9wLmdldElucHV0KCk7Ci0gICAgICAgICAgT3V0cHV0IHRlbXBPdXRwdXQgPSB0ZW1wT3AuZ2V0T3V0cHV0KCk7Ci0KLSAgICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgaW4gdGhlc2UgY29uZGl0aW9ucy4gY29uZGl0aW9uIDIgbXVzdCBmYWlsIGZvciAzIHRvIHdvcmsKLSAgICAgICAgICAvLyBjaGVjayB0aGUgaW5wdXQKLSAgICAgICAgICBpZiAodGVtcElucHV0ID09IG51bGwgJiYgYmluZGluZ0lucHV0ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGJpbmRpbmdJbnB1dCA9PSBudWxsIHx8IGJpbmRpbmdJbnB1dC5nZXROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodGVtcElucHV0ICE9IG51bGwgJiYgYmluZGluZ0lucHV0LmdldE5hbWUoKS5lcXVhbHModGVtcElucHV0LmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGNoZWNrIHRoZSBvdXRwdXQKLSAgICAgICAgICBpZiAodGVtcE91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGJpbmRpbmdPdXRwdXQgPT0gbnVsbCB8fCBiaW5kaW5nT3V0cHV0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodGVtcE91dHB1dCAhPSBudWxsICYmIGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpLmVxdWFscyh0ZW1wT3V0cHV0LmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0T0sgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5wdXRPSyAmJiBvdXRwdXRPSykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvcCA9IHRlbXBPcDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gICAgICAgICAgb3AgPSAoT3BlcmF0aW9uKSBtYXRjaGluZ09wZXJhdGlvbnMuZ2V0KDApOwotICAgICAgICB9Ci0gICAgICAgIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lLCBpbnB1dG5hbWUsIG91dHB1dG5hbWUgc2lnbmF0dXJlCi0gICAgICAgIGlmIChtYXRjaGluZ09wZXJhdGlvbnMgIT0gbnVsbCAmJiBvcCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaU1hdGNoaW5nT3BlcmF0aW9ucyA9IG1hdGNoaW5nT3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpTWF0Y2hpbmdPcGVyYXRpb25zLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gaW5wdXROYW1lc0VxdWFsID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sZWFuIG91dHB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyID0gKE9wZXJhdGlvbilpTWF0Y2hpbmdPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgICAgIC8vICAgICAgICAgIGlmIChvcGVyLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIC8vICAgICAgICAgIHsKLSAgICAgICAgICAgIElucHV0IG9wSW5wdXQgPSBvcGVyLmdldElucHV0KCk7Ci0gICAgICAgICAgICBpZiAob3BJbnB1dCAhPSBudWxsICYmIGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgb3BJbnB1dE5hbWUgPSBvcElucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdJbnB1dE5hbWUgPSBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgIT0gbnVsbCAmJiBvcElucHV0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKGJpbmRpbmdJbnB1dE5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChvcElucHV0TmFtZSA9PSBudWxsICYmIGJpbmRpbmdJbnB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXQgPT0gbnVsbCAmJiBiaW5kaW5nSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE91dHB1dCBvcE91dHB1dCA9IG9wZXIuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAob3BPdXRwdXQgIT0gbnVsbCAmJiBiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvcE91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nT3V0cHV0TmFtZSA9IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpZiAob3BPdXRwdXROYW1lICE9IG51bGwgJiYgb3BPdXRwdXROYW1lLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ091dHB1dE5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BPdXRwdXROYW1lID09IG51bGwgJiYgYmluZGluZ091dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChvcE91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5wdXROYW1lc0VxdWFsICYmIG91dHB1dE5hbWVzRXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG9wID0gb3BlcjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL30KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vT3BlcmF0aW9uIG9wID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG5hbWUsIGlucHV0TmFtZSwgb3V0cHV0TmFtZSk7Ci0KLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3Auc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3ApOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ09wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbkVsKTsKLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIGlucHV0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0RWwgVGhlIGJpbmRpbmcgaW5wdXQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBpbnB1dCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nSW5wdXQgcGFyc2VCaW5kaW5nSW5wdXQoRWxlbWVudCBiaW5kaW5nSW5wdXRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gZGVmLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdJbnB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ0lucHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nSW5wdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nSW5wdXQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ0lucHV0LCBiaW5kaW5nSW5wdXRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ0lucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgYmluZGluZyBvdXRwdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nT3V0cHV0RWwgVGhlIGJpbmRpbmcgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGJpbmRpbmcgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KEVsZW1lbnQgYmluZGluZ091dHB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGRlZi5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ091dHB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ091dHB1dC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoYmluZGluZ091dHB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ091dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoQmluZGluZ091dHB1dC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihiaW5kaW5nT3V0cHV0LCBiaW5kaW5nT3V0cHV0RWwpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIGZhdWx0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0RWwgVGhlIGJpbmRpbmcgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBmYXVsdCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHQgcGFyc2VCaW5kaW5nRmF1bHQoRWxlbWVudCBiaW5kaW5nRmF1bHRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gZGVmLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdGYXVsdEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ0ZhdWx0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nRmF1bHRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nRmF1bHQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nRmF1bHQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ0ZhdWx0LCBiaW5kaW5nRmF1bHRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgbWVzc2FnZSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG1zZ0VsIFRoZSBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBwYXJzZU1lc3NhZ2UoRWxlbWVudCBtc2dFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUobXNnRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBtc2cgPSBkZWYuZ2V0TWVzc2FnZShtZXNzYWdlTmFtZSk7Ci0KLSAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbXNnID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbXNnLnNldFFOYW1lKG1lc3NhZ2VOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFtc2cuaXNVbmRlZmluZWQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGFzIGEgbWVzc2FnZSB3aXRoIHRoaXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQKLSAgICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgICAgZGVmLAotICAgICAgICAgIG1zZ0VsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfTUVTU0FHRV9OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtc2cgPSBkZWYuY3JlYXRlTWVzc2FnZSgpOwotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgaXQgd2FzIHJldHJpZXZlZCBvciBjcmVhdGVkLCB0aGUgZGVmaW5pdGlvbiBoYXMgYmVlbiBmb3VuZC4KLSAgICBtc2cuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQobXNnRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBtc2cuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1BBUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG1zZy5hZGRQYXJ0KHBhcnNlUGFydCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBtZXNzYWdlIGFsbG93cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIG1zZy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KE1lc3NhZ2UuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24obXNnLCBtc2dFbCk7Ci0KLSAgICByZXR1cm4gbXNnOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgcGFydCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRFbCBUaGUgcGFydCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBwYXJ0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIFFOYW1lIGVsZW1lbnROYW1lOwotICAgIHRyeQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocGFydEVsLCBDb25zdGFudHMuQVRUUl9FTEVNRU5ULCBDb25zdGFudHMuRUxFTV9NRVNTQUdFLCBmYWxzZSwgZGVmKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIGVsZW1lbnQgbmFtZQotICAgICAgZWxlbWVudE5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCkpOwotICAgIH0KLQotICAgIFFOYW1lIHR5cGVOYW1lOwotICAgIHRyeQotICAgIHsKLSAgICAgIHR5cGVOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocGFydEVsLCBDb25zdGFudHMuQVRUUl9UWVBFLAotICAgICAgICAvLyBDb3JyZWN0ZWQgLSB3YXMgQVRUUl9FTEVNRU5UCi0gIENvbnN0YW50cy5FTEVNX01FU1NBR0UsIGZhbHNlLCBkZWYpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgZWxlbWVudCBhdHRyaWJ1dGUKLSAgICAgIHR5cGVOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsIENvbnN0YW50cy5BVFRSX1RZUEUpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoZWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwYXJ0LnNldEVsZW1lbnROYW1lKGVsZW1lbnROYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAodHlwZU5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwYXJ0LnNldFR5cGVOYW1lKHR5cGVOYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KHBhcnRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHBhcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gWE1MIFZhbGlkYXRpb24gd2lsbCBjYXRjaCB0aGlzCi0gICAgICAgIERPTVV0aWxzLnRocm93V1NETEV4Y2VwdGlvbih0ZW1wRWwpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICBNYXAgZXh0ZW5zaW9uQXR0cmlidXRlcyA9IHBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpOwotCi0gICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5wdXRBbGwoZ2V0UGFydEF0dHJpYnV0ZXMocGFydEVsLCBkZWYpKTsKLQotICAgIC8vIE5lZWQgdG8gZG8gc29tZXRoaW5nIGhlcmUgdG8gbG9jYXRlIHBhcnQgZGVmaW5pdGlvbi4KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ocGFydCwgcGFydEVsKTsKLQotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIG1hcCBvZiB0aGUgcGFydCBhdHRyaWJ1dGVzLgotICAgKiAKLSAgICogQHBhcmFtIGVsIFRoZSBwYXJ0IGF0dHJpYnV0ZXMgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgbWFwIGNvbnRhaW5pbmcgdGhlIHBhcnQgYXR0cmlidXRlcy4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgTWFwIGdldFBhcnRBdHRyaWJ1dGVzKEVsZW1lbnQgZWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgTWFwIGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gZWwuZ2V0QXR0cmlidXRlcygpOwotICAgIGludCBhdHRzID0gbm9kZU1hcC5nZXRMZW5ndGgoKTsKLQotICAgIGZvciAoaW50IGEgPSAwOyBhIDwgYXR0czsgYSsrKQotICAgIHsKLSAgICAgIEF0dHIgYXR0cmlidXRlID0gKEF0dHIpbm9kZU1hcC5pdGVtKGEpOwotICAgICAgU3RyaW5nIGxOYW1lID0gYXR0cmlidXRlLmdldExvY2FsTmFtZSgpOwotICAgICAgU3RyaW5nIG5TcGFjZSA9IGF0dHJpYnV0ZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSBhdHRyaWJ1dGUuZ2V0UHJlZml4KCk7Ci0gICAgICBRTmFtZSBuYW1lID0gbmV3IFFOYW1lKG5TcGFjZSwgbE5hbWUpOwotCi0gICAgICBpZiAoblNwYWNlICE9IG51bGwgJiYgIW5TcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFuU3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHN0clZhbHVlID0gYXR0cmlidXRlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgUU5hbWUgcVZhbHVlID0gbnVsbDsKLQotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHFWYWx1ZSA9IERPTVV0aWxzLmdldFFOYW1lKHN0clZhbHVlLCBlbCwgZGVmKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBxVmFsdWUgPSBuZXcgUU5hbWUoc3RyVmFsdWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHFWYWx1ZSk7Ci0KLSAgICAgICAgICBTdHJpbmcgdGVtcE5TVXJpID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotCi0gICAgICAgICAgd2hpbGUgKHRlbXBOU1VyaSAhPSBudWxsICYmICF0ZW1wTlNVcmkuZXF1YWxzKG5TcGFjZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ICs9ICJfIjsKLSAgICAgICAgICAgIHRlbXBOU1VyaSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBkZWYuYWRkTmFtZXNwYWNlKHByZWZpeCwgblNwYWNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgICFsTmFtZS5lcXVhbHMoQ29uc3RhbnRzLkFUVFJfTkFNRSkKLSAgICAgICAgICAmJiAhbE5hbWUuZXF1YWxzKENvbnN0YW50cy5BVFRSX0VMRU1FTlQpCi0gICAgICAgICAgJiYgIWxOYW1lLmVxdWFscyhDb25zdGFudHMuQVRUUl9UWVBFKSkKLSAgICAgIHsKLSAgICAgICAgV1NETEV4Y2VwdGlvbiB3c2RsRXhjID0KLSAgICAgICAgICBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgIFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLAotICAgICAgICAgICAgIkVuY291bnRlcmVkIGlsbGVnYWwgIgotICAgICAgICAgICAgICArICJwYXJ0IGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICsgImF0dHJpYnV0ZSAnIgotICAgICAgICAgICAgICArIG5hbWUKLSAgICAgICAgICAgICAgKyAiJy4gRXh0ZW5zaW9uICIKLSAgICAgICAgICAgICAgKyAiYXR0cmlidXRlcyBtdXN0IGJlIGluICIKLSAgICAgICAgICAgICAgKyAiYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbiAiCi0gICAgICAgICAgICAgICsgIldTREwncy4iKTsKLQotICAgICAgICB3c2RsRXhjLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLSAgICAgICAgLy90aHJvdyB3c2RsRXhjOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYXR0cmlidXRlcywgZWwpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBwb3J0VHlwZSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBvcnRUeXBlRWwgVGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgcG9ydFR5cGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgcGFyc2VQb3J0VHlwZShFbGVtZW50IHBvcnRUeXBlRWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocG9ydFR5cGVFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIHBvcnRUeXBlTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBwb3J0VHlwZSA9IGRlZi5nZXRQb3J0VHlwZShwb3J0VHlwZU5hbWUpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGVOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgUG9ydFR5cGUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIHByb2R1Y2UgYW4gZXJyb3IgYW5kIHJldHVybiBudWxsCi0gICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgIGRlZiwKLSAgICAgICAgICBwb3J0VHlwZUVsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfUE9SVFRZUEVfTkFNRV9BTFJFQURZX0RFRklORUQiLCAiJyIgKyBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIGl0IHdhcyByZXRyaWV2ZWQgb3IgY3JlYXRlZCwgdGhlIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQuCi0gICAgcG9ydFR5cGUuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocG9ydFR5cGVFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHBvcnRUeXBlLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PUEVSQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG1vZGlmaWVkIHNvIGR1cGxpY2F0ZSBvcGVyYXRpb25zIHdpbGwgbm90IGJlIGFkZGVkIHRvIHBvcnR0eXBlIAotICAgICAgICBPcGVyYXRpb24gb3AgPSBwYXJzZU9wZXJhdGlvbih0ZW1wRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wb3J0VHlwZS5hZGRPcGVyYXRpb24ocGFyc2VPcGVyYXRpb24odGVtcEVsLCBwb3J0VHlwZSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHNvbWV0aGluZyBlbHNlIHRoYXQgc2hvdWxkbid0IGJlIGhlcmUKLSAgICAgICAgLy8gTkVFRCBUTyBBREQgVE8gRVJST1IgTElTVAotICAgICAgICAvL0RPTVV0aWxzLnRocm93V1NETEV4Y2VwdGlvbih0ZW1wRWwpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKHBvcnRUeXBlLCBwb3J0VHlwZUVsKTsKLQotICAgIHJldHVybiBwb3J0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG9wRWwgVGhlIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgVGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb24gcGFyc2VPcGVyYXRpb24oRWxlbWVudCBvcEVsLCBQb3J0VHlwZSBwb3J0VHlwZSwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBPcGVyYXRpb24gb3AgPSBudWxsOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKG9wRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFN0cmluZyBwYXJhbWV0ZXJPcmRlclN0ciA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShvcEVsLCBDb25zdGFudHMuQVRUUl9QQVJBTUVURVJfT1JERVIpOwotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQob3BFbCk7Ci0gICAgTGlzdCBtZXNzYWdlT3JkZXIgPSBuZXcgVmVjdG9yKCk7Ci0gICAgRWxlbWVudCBkb2NFbCA9IG51bGw7Ci0gICAgSW5wdXQgaW5wdXQgPSBudWxsOwotICAgIE91dHB1dCBvdXRwdXQgPSBudWxsOwotICAgIExpc3QgZmF1bHRzID0gbmV3IFZlY3RvcigpOwotICAgIExpc3QgZXh0RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGRvY0VsID0gdGVtcEVsOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU5QVVQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0ID0gcGFyc2VJbnB1dCh0ZW1wRWwsIGRlZik7Ci0gICAgICAgIG1lc3NhZ2VPcmRlci5hZGQoQ29uc3RhbnRzLkVMRU1fSU5QVVQpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBvdXRwdXQgPSBwYXJzZU91dHB1dCh0ZW1wRWwsIGRlZik7Ci0gICAgICAgIG1lc3NhZ2VPcmRlci5hZGQoQ29uc3RhbnRzLkVMRU1fT1VUUFVUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0ZBVUxULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBmYXVsdHMuYWRkKHBhcnNlRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gb3BlcmF0aW9uIGFsbG93cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGV4dEVsZW1lbnRzLmFkZChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KE9wZXJhdGlvbi5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW5wdXROYW1lID0gKGlucHV0ICE9IG51bGwgPyBpbnB1dC5nZXROYW1lKCkgOiBudWxsKTsKLSAgICAgIFN0cmluZyBvdXRwdXROYW1lID0gKG91dHB1dCAhPSBudWxsID8gb3V0cHV0LmdldE5hbWUoKSA6IG51bGwpOwotCi0gICAgICBib29sZWFuIG9wRGVmaW5lZCA9IGZhbHNlOwotCi0gICAgICB0cnkKLSAgICAgIHsKLQotICAgICAgICAvL29wID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG5hbWUsIGlucHV0TmFtZSwgb3V0cHV0TmFtZSk7Ci0KLSAgICAgICAgLy9PcGVyYXRpb24gb3AgPSBudWxsOwotICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmIChvcGVyYXRpb25zICE9IG51bGwpCi0gICAgICAgIHsKLQotICAgICAgICAgIEl0ZXJhdG9yIGlPcGVyYXRpb25zID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpT3BlcmF0aW9ucy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpbnB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gb3V0cHV0TmFtZXNFcXVhbCA9IGZhbHNlOwotICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXIgPSAoT3BlcmF0aW9uKWlPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvcGVyLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElucHV0IG9wSW5wdXQgPSBvcGVyLmdldElucHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwgJiYgaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBvcElucHV0TmFtZSA9IG9wSW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChvcElucHV0TmFtZSAhPSBudWxsICYmIGlucHV0TmFtZSAhPSBudWxsICYmIG9wSW5wdXROYW1lLmVxdWFscyhpbnB1dE5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXROYW1lID09IG51bGwgJiYgaW5wdXROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BJbnB1dCA9PSBudWxsICYmIGlucHV0ID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIE91dHB1dCBvcE91dHB1dCA9IG9wZXIuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcE91dHB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9wT3V0cHV0TmFtZSA9IG9wT3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAob3BPdXRwdXROYW1lICE9IG51bGwgJiYgb3V0cHV0TmFtZSAhPSBudWxsICYmIG9wT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wT3V0cHV0TmFtZSA9PSBudWxsICYmIG91dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBvdXRwdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BPdXRwdXQgPT0gbnVsbCAmJiBvdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChpbnB1dE5hbWVzRXF1YWwgJiYgb3V0cHV0TmFtZXNFcXVhbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wID0gb3BlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBvcERlZmluZWQgPSB0cnVlOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAvKiYmICFvcC5pc1VuZGVmaW5lZCgpKi8KLSAgICAgICAgKQotICAgICAgewotICAgICAgICAvL29wID0gbnVsbDsKLSAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLQotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiAhb3BEZWZpbmVkKQotICAgICAgewotICAgICAgICBpZiAoaW5wdXROYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJbnB1dCB0ZW1wSW4gPSBvcC5nZXRJbnB1dCgpOwotCi0gICAgICAgICAgaWYgKHRlbXBJbiAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZW1wSW4uZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vb3AgPSBudWxsOwotICAgICAgICAgICAgICBvcERlZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiAhb3BEZWZpbmVkKQotICAgICAgewotICAgICAgICBpZiAob3V0cHV0TmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgT3V0cHV0IHRlbXBPdXQgPSBvcC5nZXRPdXRwdXQoKTsKLQotICAgICAgICAgIGlmICh0ZW1wT3V0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRlbXBPdXQuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vb3AgPSBudWxsOwotICAgICAgICAgICAgICBvcERlZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BEZWZpbmVkKQotICAgICAgewotICAgICAgICAvLyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWUgd2UncmUgZ29pbmcgdG8gcmV0dXJuIG51bGwuCi0gICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgV1NETCAxLjIgd29ya2luZyBkcmFmdCBvcGVyYXRpb24gb3ZlcmxvYWRpbmcgaXMgbm8gbG9uZ2VyIGFsbG93ZWQuCi0gICAgICAgIC8vIEdvaW5nIHRvIHVzZSB0aGF0IGhlcmUgdG8gc2F2ZSBhIGxvdCBvZiB3b3JrCi0gICAgICAgIHNldExvY2F0aW9uKG9wLCBvcEVsKTsKLSAgICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgb3AsCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAiX0RVUExJQ0FURV9PUEVSQVRJT05fRk9SX1BPUlRUWVBFIiwKLSAgICAgICAgICAgICInIiArIG9wLmdldE5hbWUoKSArICInIiwKLSAgICAgICAgICAgICInIiArIHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiJyIpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBpZiAob3AgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3AgPSBkZWYuY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgICAgIG9wLnNldE5hbWUobmFtZSk7Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG9wID0gZGVmLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgaXQgd2FzIHJldHJpZXZlZCBvciBjcmVhdGVkLCB0aGUgZGVmaW5pdGlvbiBoYXMgYmVlbiBmb3VuZC4KLSAgICBvcC5zZXRVbmRlZmluZWQoZmFsc2UpOwotCi0gICAgaWYgKHBhcmFtZXRlck9yZGVyU3RyICE9IG51bGwpCi0gICAgewotICAgICAgb3Auc2V0UGFyYW1ldGVyT3JkZXJpbmcoU3RyaW5nVXRpbHMucGFyc2VOTVRva2VucyhwYXJhbWV0ZXJPcmRlclN0cikpOwotICAgIH0KLQotICAgIGlmIChkb2NFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wLnNldERvY3VtZW50YXRpb25FbGVtZW50KGRvY0VsKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXRJbnB1dChpbnB1dCk7Ci0gICAgfQotCi0gICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wLnNldE91dHB1dChvdXRwdXQpOwotICAgIH0KLQotICAgIGlmIChmYXVsdHMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBmYXVsdEl0ZXJhdG9yID0gZmF1bHRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChmYXVsdEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZiA9IChGYXVsdClmYXVsdEl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgLy8gaWYgdGhlIGZhdWx0IGlzbid0IGRlZmluZWQgeWV0Ci0gICAgICAgIGlmIChvcC5nZXRGYXVsdChmLmdldE5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG9wLmFkZEZhdWx0KGYpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgICAgb3AsCi0gICAgICAgICAgICBmLAotICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9EVVBMSUNBVEVfRkFVTFRfTkFNRSIsICInIiArIGYuZ2V0TmFtZSgpICsgIiciLCAiJyIgKyBvcC5nZXROYW1lKCkgKyAiJyIpKTsKLSAgICAgICAgICAvL2ZhdWx0RXJyb3JzLmFkZChuZXcgT2JqZWN0W117ZiwiRHVwbGljYXRlIE5hbWUiLG9wfSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGV4dEVsZW1lbnRzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgZXh0RWxlbWVudHNJdGVyYXRvciA9IGV4dEVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXh0RWxlbWVudHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgICAgb3AuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1lbnRzSXRlcmF0b3IubmV4dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBPcGVyYXRpb25UeXBlIHN0eWxlID0gbnVsbDsKLQotICAgIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX09ORV9XQVkpKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5PTkVfV0FZOwotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX1JFUVVFU1RfUkVTUE9OU0UpKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFOwotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX1NPTElDSVRfUkVTUE9OU0UpKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFOwotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX05PVElGSUNBVElPTikpCi0gICAgewotICAgICAgc3R5bGUgPSBPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXRTdHlsZShzdHlsZSk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihvcCwgb3BFbCk7Ci0KLSAgICAvLyBtb2RpZmllZCB0byByZW1vdmUgZHVwbGljYXRlIG9wZXJhdGlvbnMKLSAgICAvLyAgICBpZihvcERlZmluZWQpCi0gICAgLy8gICAgewotICAgIC8vICAgICAgYWRkUmVhZGVyRXJyb3IocG9ydFR5cGUsb3AsVmFsaWRhdGVXU0RMUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfRFVQTElDQVRFX09QRVJBVElPTl9GT1JfUE9SVFRZUEUiLCInIitvcC5nZXROYW1lKCkrIiciLCInIitwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKyInIikpOwotICAgIC8vICAgICAgcmV0dXJuIG51bGw7Ci0gICAgLy8gICAgfQotICAgIHJldHVybiBvcDsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIHNlcnZpY2UgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBzZXJ2aWNlRWwgVGhlIHNlcnZpY2UgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFNlcnZpY2UgcGFyc2VTZXJ2aWNlKEVsZW1lbnQgc2VydmljZUVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFNlcnZpY2Ugc2VydmljZSA9IGRlZi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoc2VydmljZUVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lKSk7Ci0gICAgfQotICAgIFNlcnZpY2UgczsKLSAgICAvLyBhIHNlcnZpY2Ugd2l0aCB0aGlzIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkCi0gICAgaWYgKChzID0gZGVmLmdldFNlcnZpY2Uoc2VydmljZS5nZXRRTmFtZSgpKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgZGVmLAotICAgICAgICBzZXJ2aWNlRWwsCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfU0VSVklDRV9OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIHMuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICInIikpOwotICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoc2VydmljZUVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZS5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fUE9SVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZS5hZGRQb3J0KHBhcnNlUG9ydCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZXJ2aWNlLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU2VydmljZS5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihzZXJ2aWNlLCBzZXJ2aWNlRWwpOwotCi0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIHBvcnQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBwb3J0RWwgVGhlIHBvcnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgcG9ydCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBQb3J0IHBhcnNlUG9ydChFbGVtZW50IHBvcnRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0IHBvcnQgPSBkZWYuY3JlYXRlUG9ydCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBvcnRFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgYmluZGluZ1N0cjsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBiaW5kaW5nU3RyID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocG9ydEVsLCBDb25zdGFudHMuQVRUUl9CSU5ESU5HLCBDb25zdGFudHMuRUxFTV9QT1JULCBmYWxzZSwgZGVmKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgYmluZGluZ1N0ciA9IG5ldyBRTmFtZShudWxsLCBET01VdGlscy5nZXRBdHRyaWJ1dGUocG9ydEVsLCAiYmluZGluZyIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBvcnQuc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoYmluZGluZ1N0ciAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IGRlZi5nZXRCaW5kaW5nKGJpbmRpbmdTdHIpOwotCi0gICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgewotICAgICAgICBiaW5kaW5nID0gZGVmLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICAgICAgYmluZGluZy5zZXRRTmFtZShiaW5kaW5nU3RyKTsKLSAgICAgICAgZGVmLmFkZEJpbmRpbmcoYmluZGluZyk7Ci0gICAgICB9Ci0KLSAgICAgIHBvcnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KHBvcnRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KFBvcnQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ocG9ydCwgcG9ydEVsKTsKLQotICAgIHJldHVybiBwb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFR5cGUgVGhlIHBhcmVudCB0eXBlIG9mIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBlbCBUaGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEV4dGVuc2liaWxpdHlFbGVtZW50IHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoQ2xhc3MgcGFyZW50VHlwZSwgRWxlbWVudCBlbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFFOYW1lIGVsZW1lbnRUeXBlID0gUU5hbWVVdGlscy5uZXdRTmFtZShlbCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBFeHRlbnNpb25SZWdpc3RyeSBleHRSZWcgPSBkZWYuZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQotICAgICAgaWYgKGV4dFJlZyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICBXU0RMRXhjZXB0aW9uLkNPTkZJR1VSQVRJT05fRVJST1IsCi0gICAgICAgICAgIk5vIEV4dGVuc2lvblJlZ2lzdHJ5IHNldCBmb3IgdGhpcyAiCi0gICAgICAgICAgICArICJEZWZpbml0aW9uLCBzbyB1bmFibGUgdG8gZGVzZXJpYWxpemUgIgotICAgICAgICAgICAgKyAiYSAnIgotICAgICAgICAgICAgKyBlbGVtZW50VHlwZQotICAgICAgICAgICAgKyAiJyBlbGVtZW50IGluIHRoZSAiCi0gICAgICAgICAgICArICJjb250ZXh0IG9mIGEgJyIKLSAgICAgICAgICAgICsgcGFyZW50VHlwZS5nZXROYW1lKCkKLSAgICAgICAgICAgICsgIicuIik7Ci0gICAgICB9Ci0KLSAgICAgIEV4dGVuc2lvbkRlc2VyaWFsaXplciBleHREUyA9IGV4dFJlZy5xdWVyeURlc2VyaWFsaXplcihwYXJlbnRUeXBlLCBlbGVtZW50VHlwZSk7Ci0KLSAgICAgIC8vIGFzaWduIHRoZSBFeHRlbnNpYmlsaXR5RWxlbWVudCB0byBhIHZhciBzbyB3ZSBjYW4gYWRkIGl0IHRvIHRoZSBsb2NhdGlvbnMKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSBleHREUy51bm1hcnNoYWxsKHBhcmVudFR5cGUsIGVsZW1lbnRUeXBlLCBlbCwgZGVmLCBleHRSZWcpOwotICAgICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICAgIC8vIHRoaXMgbWlnaHQgbm90IHdvcmsgcHJvcGVybHkKLSAgICAgIHNldExvY2F0aW9uKGV4dEVsZW0sIGVsKTsKLQotICAgICAgLy8gcmVnaXN0ZXIgYWxsIG9mIHRoZSBjaGlsZCBFbGVtZW50cyBzbyB3ZSBjYW4gZmluZCB0aGVtIGxhdGVyCi0gICAgICAvLyB1c2VkIGZvciBpbmxpbmUgc2NoZW1hIHZhbGlkYXRpb24KLSAgICAgIHJlZ2lzdGVyQ2hpbGRFbGVtZW50cyhleHRFbGVtKTsKLQotICAgICAgcmV0dXJuIGV4dEVsZW07Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGUuZ2V0TG9jYXRpb24oKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLSAgICAgIH0KLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgaW5wdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dEVsIFRoZSBpbnB1dCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbnRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGlucHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IHBhcnNlSW5wdXQoRWxlbWVudCBpbnB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotCi0gICAgSW5wdXQgaW5wdXQgPSBkZWYuY3JlYXRlSW5wdXQoKTsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbnB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLSAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbWVzc2FnZU5hbWUgPSBET01VdGlscy5nZXRRdWFsaWZpZWRBdHRyaWJ1dGVWYWx1ZShpbnB1dEVsLCBDb25zdGFudHMuQVRUUl9NRVNTQUdFLCBDb25zdGFudHMuRUxFTV9JTlBVVCwgZmFsc2UsIGRlZik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBtZXNzYWdlIG5hbWUKLSAgICAgIG1lc3NhZ2VOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbnB1dEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlucHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBpbnB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoaW5wdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihpbnB1dCwgaW5wdXRFbCk7Ci0KLSAgICByZXR1cm4gaW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBvdXRwdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBvdXRwdXRFbCBUaGUgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBwYXJzZU91dHB1dChFbGVtZW50IG91dHB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIE91dHB1dCBvdXRwdXQgPSBkZWYuY3JlYXRlT3V0cHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUob3V0cHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKG91dHB1dEVsLCBDb25zdGFudHMuQVRUUl9NRVNTQUdFLCBDb25zdGFudHMuRUxFTV9PVVRQVVQsIGZhbHNlLCBkZWYpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgbWVzc2FnZSBuYW1lCi0gICAgICBtZXNzYWdlTmFtZSA9IG5ldyBRTmFtZShudWxsLCBET01VdGlscy5nZXRBdHRyaWJ1dGUob3V0cHV0RWwsICJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgb3V0cHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBvdXRwdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KG91dHB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihvdXRwdXQsIG91dHB1dEVsKTsKLQotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBmYXVsdCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGZhdWx0RWwgVGhlIGZhdWx0IGVsZW1lbnQgdG8gcGFyc2UuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGZhdWx0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IHBhcnNlRmF1bHQoRWxlbWVudCBmYXVsdEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEZhdWx0IGZhdWx0ID0gZGVmLmNyZWF0ZUZhdWx0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZmF1bHRFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgbWVzc2FnZU5hbWUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1lc3NhZ2VOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUoZmF1bHRFbCwgQ29uc3RhbnRzLkFUVFJfTUVTU0FHRSwgQ29uc3RhbnRzLkVMRU1fSU5QVVQsIGZhbHNlLCBkZWYpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgbWVzc2FnZSBuYW1lCi0gICAgICBtZXNzYWdlTmFtZSA9IG5ldyBRTmFtZShudWxsLCBET01VdGlscy5nZXRBdHRyaWJ1dGUoZmF1bHRFbCwgIm1lc3NhZ2UiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYXVsdC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGRlZi5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLQotICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGRlZi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZU5hbWUpOwotICAgICAgICBkZWYuYWRkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgIH0KLQotICAgICAgZmF1bHQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGZhdWx0RWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBmYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oZmF1bHQsIGZhdWx0RWwpOwotCi0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBtZXNzYWdlZ2VuZXJhdG9yIGZvciB0aGUgcmVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIG1nIFRoZSBtZXNzYWdlIGdlbmVyYXRvciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWcpCi0gIHsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbWc7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHRoZSByZWZPYmplY3QgdG8gdGhlIGVsZW1lbnRMb2NhdGlvbiBoYXNodGFibGUgd2l0aCB0aGUgbG9jYXRpb24gZGVmaW5lZCBpbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHJlZk9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRMb2NhdGlvbihPYmplY3QgcmVmT2JqZWN0LCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBFbGVtZW50SW1wbCBlbGVtZW50SW1wbCA9IChFbGVtZW50SW1wbCllbGVtZW50OwotICAgICAgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IChFbGVtZW50TG9jYXRpb24pZWxlbWVudEltcGwuZ2V0VXNlckRhdGEoKTsKLSAgICAgIGlmIChlbGVtZW50TG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLQotICAgICAgICBlbGVtZW50TG9jYXRpb25zLnB1dCgKLSAgICAgICAgICByZWZPYmplY3QsCi0gICAgICAgICAgbmV3IExvY2F0aW9uSG9sZGVyKGVsZW1lbnRMb2NhdGlvbi5nZXRMaW5lTnVtYmVyKCksIGVsZW1lbnRMb2NhdGlvbi5nZXRDb2x1bW5OdW1iZXIoKSwgZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBBZGQgYSByZWFkZXIgZXJyb3IgdG8gdGhlIGxpc3QuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50b2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkUmVhZGVyRXJyb3IoT2JqZWN0IHBhcmVudG9iamVjdCwgT2JqZWN0IG9iamVjdCwgU3RyaW5nIGVycm9yKQotICB7Ci0gICAgcmVhZGVyRXJyb3JzLmFkZChuZXcgUmVhZGVyRXJyb3IocGFyZW50b2JqZWN0LCBvYmplY3QsIGVycm9yKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSByZWFkZXIgd2FybmluZyB0byB0aGUgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiBAcGFyYW0gd2FybmluZyBUaGUgd2FybmluZyBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkUmVhZGVyV2FybmluZyhPYmplY3QgcGFyZW50b2JqZWN0LCBPYmplY3Qgb2JqZWN0LCBTdHJpbmcgd2FybmluZykKLSAgewotICAgIHJlYWRlcldhcm5pbmdzLmFkZChuZXcgUmVhZGVyRXJyb3IocGFyZW50b2JqZWN0LCBvYmplY3QsIHdhcm5pbmcpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlZ2lzdGVyIGFsbCBvZiB0aGUgbG9jYXRpb25zIG9mIHRoZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgZXh0ZW5zaWJpbGl0eQotICAgKiBlbGVtZW50IGdpdmVuLgotICAgKiAKLSAgICogQHBhcmFtIGV4dEVsZW0gVGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudCB3aG9zZSBjaGlsZCBlbGVtZW50cyB3aWxsIGJlIHJlZ2lzdGVyZWQuCi0gICAqLwotCi0gIHByb3RlY3RlZCB2b2lkIHJlZ2lzdGVyQ2hpbGRFbGVtZW50cyhFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtKQotICB7Ci0gICAgLy8gb25seSBhZGQgdGhvc2UgdGhhdCBhcmUgb2YgdHlwZSB1bmtub3duLiBpZiB0aGV5J3JlIGtub3duIHRoZXkgCi0gICAgLy8gd2lsbCB0YWtlIGNhcmUgb2YgdGhlbXNlbHZlcwotICAgIGlmIChleHRFbGVtIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbSA9ICgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgIHJlZ2lzdGVyQ2hpbGRFbGVtZW50c1JlY3Vyc2l2ZWx5KGVsZW0pOwotICAgIH0gZWxzZSBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFNjaGVtYSkKLSAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWxlbSA9ICgoU2NoZW1hKWV4dEVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoZSBsb2NhdGlvbiBvZiBhbGwgb2YgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIGVsZW0uCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgZWxlbWVudCB3aG9zZSBjaGlsZCBlbGVtZW50cyB3aWxsIGJlIHJlZ2lzdGVyZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAoZWxlbSBpbnN0YW5jZW9mIEVsZW1lbnROU0ltcGwpCi0gICAgewotICAgICAgc2V0TG9jYXRpb24oZWxlbSwgZWxlbSk7Ci0KLSAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgICByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIENoZWNrIHRoYXQgYW4gZWxlbWVudCBuYW1lIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5hbWUuCi0gICAqIAotICAgKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgd2l0aCB0aGUgbmFtZSB0byBjaGVjay4KLSAgICogQHBhcmFtIHFuYW1lIFRoZSBuYW1lIHRvIGNoZWNrIGFnYWluc3QuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0VsZW1lbnROYW1lKEVsZW1lbnQgZWwsIFFOYW1lIHFuYW1lKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFRTmFtZVV0aWxzLm1hdGNoZXMocW5hbWUsIGVsKSkKLSAgICB7Ci0gICAgICBXU0RMRXhjZXB0aW9uIHdzZGxFeGMgPSBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLklOVkFMSURfV1NETCwgIkV4cGVjdGVkIGVsZW1lbnQgJyIgKyBxbmFtZSArICInLiIpOwotCi0gICAgICB3c2RsRXhjLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLQotICAgICAgdGhyb3cgd3NkbEV4YzsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICovCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0RWxlbWVudExvY2F0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudExvY2F0aW9uczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgcmVhZGVyIGVycm9ycy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlYWRlciBlcnJvcnMuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRSZWFkZXJFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIHJlYWRlckVycm9yczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCByZWFkZXIgd2FybmluZ3MuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSByZWFkZXIgd2FybmluZ3MuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRSZWFkZXJXYXJuaW5ncygpCi0gIHsKLSAgICByZXR1cm4gcmVhZGVyV2FybmluZ3M7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NzA3MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5Tb3J0ZWRTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLlhNTEVycm9yUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5MaW5lTnVtYmVyRE9NUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLQotLyoqCi0gKiBBIFdTREwgcmVhZGVyIHRoYXQgc3VwcG9ydHMgY3ljbGljIFdTREwgaW1wb3J0cywgc2NoZW1hIGltcG9ydHMgYW5kIGlubGluZSBzY2hlbWFzLgotICogVGhpcyByZWFkZXIgaXMgYmFzZWQgb24gdGhlIFdTRExSZWFkZXJJbXBsIGZyb20gV1NETDRKLiAKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWFkZXJJbXBsCi17Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbHZhbGluZm8gVGhlIFdTREwgMS4xIHZhbGlkYXRpb24gaW5mbyBvYmplY3QgdG8gdXNlLgotICAgKi8KLSAgcHVibGljIFdTRExSZWFkZXJJbXBsKElXU0RMMTFWYWxpZGF0aW9uSW5mbyB3c2RsdmFsaW5mbykKLSAgewotICAgIHRoaXMud3NkbHZhbGluZm8gPSB3c2RsdmFsaW5mbzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSByb290IGRvY3VtZW50LiBUaGlzIG1ldGhvZCB3aWxsIGZpbmQgYWxsIGltcG9ydHMgYW5kIHBhcnNlIHRoZW0gYXMgCi0gICAqIHdlbGwgY3JlYXRpbmcgYSBXU0RMRG9jdW1lbnQgZm9yIGVhY2ggdW5pcXVlIFdTREwgZmlsZS4gVGhpcyBtZXRob2Qgc3VwcG9ydHMKLSAgICogY3ljbGljIFdTREwgaW1wb3J0IHN0YXRlbWVudHMgc3VjaCB0aGF0IGZpbGUgQSBjYW4gaW1wb3J0IGZpbGUgQiBhbmQgZmlsZSBCCi0gICAqIGNhbiBpbXBvcnQgZmlsZSBBLgotICAgKiAKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSBUaGUgYmFzZSBVUkkgb2YgdGhlIHJvb3QgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkZWZFbCBUaGUgZGVmaW5pdGlvbiBlbGVtZW50IG9mIHRoZSByb290IGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMgY29udGFpbmluZyBhbGwgb2YgdGhlIHVuaXF1ZSBmaWxlcyBpbiB0aGUgZGVzY3JpcHRpb24uCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudFtdIHBhcnNlRG9jdW1lbnQoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRWxlbWVudCBkZWZFbCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIGludCBpbml0aWFsSW1wb3J0QXJyYXlTaXplID0gMjA7Ci0gICAgTGlzdFtdIGZpbGVzQXREZXB0aCA9IG5ldyBBcnJheUxpc3RbaW5pdGlhbEltcG9ydEFycmF5U2l6ZV07Ci0gICAgTWFwIGZpbGVzSW1wb3J0aW5nID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFNvcnRlZFNldCBwYXJzZWRJbXBvcnRzID0gbmV3IFRyZWVTZXQoKTsKLSAgICBTb3J0ZWRTZXQgaW1wb3J0c1RvUGFyc2UgPSBuZXcgVHJlZVNldCgpOwotICAgIGludCBtYXhkZXB0aCA9IDA7Ci0KLSAgICBXU0RMRG9jdW1lbnQgcm9vdGRvYyA9IG5ldyBXU0RMRG9jdW1lbnQoZG9jdW1lbnRCYXNlVVJJLCBkZWZFbCwgMCwgbWVzc2FnZWdlbmVyYXRvciwgd3NkbHZhbGluZm8pOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSByb290ZG9jLmdldERlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICBJbXBvcnRIb2xkZXIgcm9vdEltcG9ydCA9IG5ldyBJbXBvcnRIb2xkZXIodGFyZ2V0TmFtZXNwYWNlLCBkb2N1bWVudEJhc2VVUkksIGRvY3VtZW50QmFzZVVSSSwgcm9vdGRvYywgMCwgbnVsbCwgbWVzc2FnZWdlbmVyYXRvciwgd3NkbHZhbGluZm8pOwotICAgIHJvb3RJbXBvcnQuY3JlYXRlV1NETEltcG9ydChyb290ZG9jKTsKLSAgICBwYXJzZWRJbXBvcnRzLmFkZChyb290SW1wb3J0KTsKLSAgICBMaXN0IHJvb3RMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZpbGVzSW1wb3J0aW5nLnB1dChyb290SW1wb3J0LmdldExvY2F0aW9uKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgcm9vdExpc3QuYWRkKHJvb3Rkb2MpOwotICAgIGZpbGVzQXREZXB0aFswXSA9IHJvb3RMaXN0OwotICAgIGltcG9ydHNUb1BhcnNlLmFkZEFsbChyb290ZG9jLmdldEltcG9ydHMoKSk7Ci0gICAgU2V0IGltcHMgPSByb290ZG9jLmdldEltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpbXBJdGVyID0gaW1wcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGltcEl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydEhvbGRlciBpbXAgPSAoSW1wb3J0SG9sZGVyKWltcEl0ZXIubmV4dCgpOwotICAgICAgTGlzdCB0ZW1wTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIHRlbXBMaXN0LmFkZChpbXAuZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKSk7Ci0gICAgICBmaWxlc0ltcG9ydGluZy5wdXQoaW1wLmdldExvY2F0aW9uKCksIHRlbXBMaXN0KTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUoIWltcG9ydHNUb1BhcnNlLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJbXBvcnRIb2xkZXIgaW1wID0gKEltcG9ydEhvbGRlcilpbXBvcnRzVG9QYXJzZS5maXJzdCgpOwotICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gaW5pdGlhbGl6ZSB0aGUgaW1wb3J0IGhlcmUgc28gZWFjaCBpbXBvcnQKLSAgICAgIC8vIGlzIG9ubHkgY3JlYXRlZCBvbmNlLiBJbiB0aGUgY2FzZSBvZiByZWNpcHJpY2FsIGltcG9ydHMgdGhpcwotICAgICAgLy8gYXZvaWRzIGFuIGluZmluaXRlIGxvb3AuCi0gICAgICBpbXAuaW5pdGlhbGl6ZSgpOwotICAgICAgV1NETERvY3VtZW50IGltcERvYyA9IGltcC5nZXRXU0RMRG9jdW1lbnQoKTsKLSAgICAgIAotICAgICAgaW1wb3J0c1RvUGFyc2UucmVtb3ZlKGltcCk7Ci0gICAgICAKLSAgICAgIHBhcnNlZEltcG9ydHMuYWRkKGltcCk7Ci0gICAgICAKLSAgICAgIC8vIEFkZCBuZXcgaW1wb3J0cyB0byB0aGUgbGlzdCBvZiBpbXBvcnRzIHRvIHBhcnNlLgotICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgaW1wb3J0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZC4KLSAgICAgIGlmKGltcERvYyAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJbmNyZWF0ZSBpbXBvcnQgYXJyYXkgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZihpbXAuZ2V0RGVwdGgoKSA+PSBpbml0aWFsSW1wb3J0QXJyYXlTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdFtdIHRlbXBBcnJheSA9IG5ldyBMaXN0W2ZpbGVzQXREZXB0aC5sZW5ndGggKyBpbml0aWFsSW1wb3J0QXJyYXlTaXplXTsKLSAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZpbGVzQXREZXB0aCwgMCwgdGVtcEFycmF5LCAwLCBmaWxlc0F0RGVwdGgubGVuZ3RoKTsKLSAgICAgICAgICBmaWxlc0F0RGVwdGggPSB0ZW1wQXJyYXk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IGZvciB0aGUgZGVwdGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpbnQgaW1wRGVwdGggPSBpbXAuZ2V0RGVwdGgoKTsKLSAgICAgICAgaWYoZmlsZXNBdERlcHRoW2ltcERlcHRoXSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYobWF4ZGVwdGggPCBpbXBEZXB0aCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtYXhkZXB0aCA9IGltcERlcHRoOwotICAgICAgICAgIH0KLSAgICAgICAgICBmaWxlc0F0RGVwdGhbaW1wRGVwdGhdID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB9Ci0gICAgICAgIGZpbGVzQXREZXB0aFtpbXAuZ2V0RGVwdGgoKV0uYWRkKGltcERvYyk7Ci0gICAgICAgIAotICAgICAgICBTZXQgaW1wb3J0cyA9IGltcERvYy5nZXRJbXBvcnRzKCk7Ci0gICAgICAgIEltcG9ydEhvbGRlcltdIGltcG9ydHNBcnJheSA9IChJbXBvcnRIb2xkZXJbXSlpbXBvcnRzLnRvQXJyYXkobmV3IEltcG9ydEhvbGRlcltpbXBvcnRzLnNpemUoKV0pOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgaW1wb3J0c0FycmF5Lmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgSW1wb3J0SG9sZGVyIGloID0gaW1wb3J0c0FycmF5W2ldOwotICAgICAgICAgIC8vIElmIGFscmVhZHkgcGFyc2VkLCBhZGQgdGhlIGRlZmluaXRpb24gaW1wb3J0aW5nIHRoaXMgZmlsZSB0byB0aGUgbGlzdC4KLSAgICAgICAgICBpZihmaWxlc0ltcG9ydGluZy5jb250YWluc0tleShpaC5nZXRMb2NhdGlvbigpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAoKExpc3QpZmlsZXNJbXBvcnRpbmcuZ2V0KGloLmdldExvY2F0aW9uKCkpKS5hZGQoaWguZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaXQgdG8gdGhlIGxpc3QgdG8gcGFyc2UuCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGlzIGltcG9ydCB0byB0aGUgbGlzdCBvZiBmaWxlcyBpbXBvcnRpbmcgbGlzdC4KLSAgICAgICAgICAgIExpc3QgdGVtcExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICB0ZW1wTGlzdC5hZGQoaWguZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBmaWxlc0ltcG9ydGluZy5wdXQoaWguZ2V0TG9jYXRpb24oKSwgdGVtcExpc3QpOwotICAgICAgICAgICAgaW1wb3J0c1RvUGFyc2UuYWRkKGloKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIGFsbCBvZiB0aGUgaW1wb3J0cyB0byB0aGUgcmVzcGVjdGl2ZSBkb2N1bWVudHMuCi0gICAgSXRlcmF0b3IgaW1wb3J0RWxlbWVudHNJdGVyID0gcGFyc2VkSW1wb3J0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGltcG9ydEVsZW1lbnRzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0SG9sZGVyIGltcCA9IChJbXBvcnRIb2xkZXIpaW1wb3J0RWxlbWVudHNJdGVyLm5leHQoKTsKLSAgICAgIExpc3QgZmlsZXMgPSAoTGlzdClmaWxlc0ltcG9ydGluZy5nZXQoaW1wLmdldExvY2F0aW9uKCkpOwotICAgICAgSXRlcmF0b3IgZmlsZXNJdGVyID0gZmlsZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGZpbGVzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWZpbGVzSXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBEZWZpbml0aW9uSW1wbCBkZWYgPSAoRGVmaW5pdGlvbkltcGwpZG9jLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgSW1wb3J0IGltcEVsZW0gPSBpbXAuZ2V0SW1wb3J0KCk7Ci0gICAgICAgIGlmKGltcEVsZW0gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGRlZi5hZGRJbXBvcnQoaW1wRWxlbSk7Ci0gICAgICAgICAgaWYoIWltcC5pc1dTRExGaWxlSW1wb3J0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZG9jLmFkZFNjaGVtYXMoaW1wLmdldFNjaGVtYXMoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBQYXJzZSB0aGUgV1NETCBkb2N1bWVudHMuCi0gICAgLy8gUGFyc2UgdGhlIE1lc3NhZ2VzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZU1lc3NhZ2VzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFBhcnNlIHRoZSBQb3J0dHlwZXMuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlUG9ydHR5cGVzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFBhcnNlIHRoZSBCaW5kaW5ncy4KLSAgICBmb3IoaW50IGkgPSBtYXhkZXB0aDsgaSA+PTA7IGktLSkKLSAgICB7Ci0gICAgICBMaXN0IGRvY3MgPSBmaWxlc0F0RGVwdGhbaV07Ci0gICAgICBJdGVyYXRvciBkb2NzSXRlciA9IGRvY3MuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGRvY3NJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IGRvYyA9IChXU0RMRG9jdW1lbnQpZG9jc0l0ZXIubmV4dCgpOwotICAgICAgICBkb2MucGFyc2VCaW5kaW5ncygpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBQYXJzZSB0aGUgU2VydmljZXMuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlU2VydmljZXMoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUGFyc2UgdGhlIEV4dGVuc2liaWxpdHkgRWxlbWVudHMuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIExpc3Qgd3NkbERvY3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgd3NkbERvY3MuYWRkKGRvYyk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoV1NETERvY3VtZW50W10pd3NkbERvY3MudG9BcnJheShuZXcgV1NETERvY3VtZW50W3dzZGxEb2NzLnNpemUoKV0pOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0U291cmNlIFRoZSBzb3VyY2Ugb2YgdGhlIGRvY3VtZW50IGJlaW5nIHJldHJpZXZlZC4KLSAgICogQHBhcmFtIGRlc2MgVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyByZXRyaWV2ZWQuCi0gICAqIEByZXR1cm4gVGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBEb2N1bWVudCBnZXREb2N1bWVudChJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIGRlc2MpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBTdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb24oKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgWE1MRXJyb3JSZXBvcnRlciBjcmVhdGVFcnJvclJlcG9ydGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXcgWE1MRXJyb3JSZXBvcnRlcigpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgT2JqZWN0W10gYXJndW1lbnRzLCBzaG9ydCBzZXZlcml0eSkgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICAgICAgICAgICAgewotICAgICAgICAgICAgICBib29sZWFuIHJlcG9ydEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgaWYgKGtleS5lcXVhbHMoIlByZW1hdHVyZUVPRiIpKQotICAgICAgICAgICAgICAgeyAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAocmVwb3J0RXJyb3IpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIucmVwb3J0RXJyb3IoZG9tYWluLCBrZXksIGFyZ3VtZW50cywgc2V2ZXJpdHkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBFcnJvckhhbmRsZXIoKQotICAgICAgewotICAgICAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyI2Vycm9yKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAgICAgICAqLwotICAgICAgICAgIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgICAgICAgIH0KLSAgICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjZmF0YWxFcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgICAgICAgIH0KLSAgICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjd2FybmluZyhvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgICAgICAgIH0KLSAgICAgIH07Ci0KLSAgICAgIERPTVBhcnNlciBidWlsZGVyID0gbmV3IExpbmVOdW1iZXJET01QYXJzZXIoY29uZmlndXJhdGlvbik7Ci0gICAgICBidWlsZGVyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotICAgICAgYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLmdldERvY3VtZW50KCk7Ci0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLlBBUlNFUl9FUlJPUiwgIlByb2JsZW0gcGFyc2luZyAnIiArIGRlc2MgKyAiJy4iLCB0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBhIFdTREwgZG9jdW1lbnQgdXNpbmcgYSBjb250ZXh0IFVSSSBhbmQgZmlsZSBVUkkuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dFVSSSBUaGUgY29udGV4dCBVUkkgdG8gdXNlLgotICAgKiBAcGFyYW0gd3NkbFVSSSBUaGUgV1NETCBVUkkgdG8gdXNlLgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMKFN0cmluZyBjb250ZXh0VVJJLCBTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTCBjb250ZXh0VVJMID0gKGNvbnRleHRVUkkgIT0gbnVsbCkgPyBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgY29udGV4dFVSSSkgOiBudWxsOwotICAgICAgVVJMIHVybCA9IFN0cmluZ1V0aWxzLmdldFVSTChjb250ZXh0VVJMLCB3c2RsVVJJKTsKLSAgICAgIElucHV0U3RyZWFtIHJlYWRlciA9IFN0cmluZ1V0aWxzLmdldENvbnRlbnRBc0lucHV0U3RyZWFtKHVybCk7Ci0gICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOwotICAgICAgRG9jdW1lbnQgZG9jID0gZ2V0RG9jdW1lbnQoaW5wdXRTb3VyY2UsIHdzZGxVUkkpOwotICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IG51bGw7Ci0gICAgICAvLyBvbmx5IHBhcnNlIHRoZSBkb2N1bWVudCBpZiBpdCBpc24ndCBlbXB0eQotICAgICAgaWYoZG9jLmdldERvY3VtZW50RWxlbWVudCgpICE9IG51bGwpCi0gICAgICAgeyAgICAgIAotICAgICAgICB3c2RsRG9jcyA9IHJlYWRXU0RMKHVybC50b1N0cmluZygpLCBkb2MpOwotICAgICAgfQotICAgICAgcmV0dXJuIHdzZGxEb2NzOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwKLSAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgd3NkbFVSSSArICInLiIsCi0gICAgICAgIHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSByZWFkZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbWcgVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZykKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlYWQgdGhlIFdTREwgZG9jdW1lbnQgYWNjZXNzaWJsZSB2aWEgdGhlIHNwZWNpZmllZAotICAgKiBVUkkgaW50byBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxVUkkgQSBVUkkgcG9pbnRpbmcgdG8gYSBXU0RMIGZpbGUuCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgV1NETERvY3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnRbXSByZWFkV1NETChTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkV1NETChudWxsLCB3c2RsVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBXU0RMIGRvY3VtZW50IGRlc2NyaWJlZCBieSBhIFVSSSBhbmQgaXRzIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIFRoZSBVUkkgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uc0VsZW1lbnQgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMKFN0cmluZyBkb2N1bWVudEJhc2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbnNFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcGFyc2VEb2N1bWVudChkb2N1bWVudEJhc2VVUkksIGRlZmluaXRpb25zRWxlbWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB0aGUgc3BlY2lmaWVkIFdTREwgZG9jdW1lbnQuCi0gICAqCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIGRvY3VtZW50IGJhc2UgVVJJLgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50W10gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcmVhZFdTREwoZG9jdW1lbnRCYXNlVVJJLCB3c2RsRG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotICB9Ci0gIAotICAKLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL2h0dHAvSFRUUFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTM0ZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLmh0dHA7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nSW5wdXRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuUG9ydEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzc0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZ0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudEltcGw7Ci0KLS8qKgotICogVGhlIEhUVFAgdmFsaWRhdG9yIGlzIGFuIGV4dGVuc2lvbiBXU0RMIHZhbGlkYXRvciB0aGF0IHZhbGlkYXRlcyBhbGwgZWxlbWVudHMgaW4gdGhlIEhUVFAKLSAqIG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIEhUVFBWYWxpZGF0b3IgaW1wbGVtZW50cyBJV1NETDExVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBIVFRQX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbGh0dHAiOwotCQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfSU5QVVRfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9IVFRQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OID0gIl9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9BRERSRVNTID0gIl9FUlJPUl9OT19IVFRQQklORElOR19GT1JfQUREUkVTUyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVkVSQiA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1ZFUkIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9MT0NBVElPTl9VUkkgPSAiX0VSUk9SX0lOVkFMSURfTE9DQVRJT05fVVJJIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gPSAiX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9UX09OTFlfRUxFTUVOVF9ERUZJTkVEID0gIl9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fSFRUUE9QRVJBVElPTl9GT1JfVVJMID0gIl9FUlJPUl9OT19IVFRQT1BFUkFUSU9OX0ZPUl9VUkwiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEdFVCA9ICJHRVQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQT1NUID0gIlBPU1QiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcml2YXRlIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBIVFRQVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEhUVFBfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy8gUG9ydCBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBtYWtlIHN1cmUgZXZlcnkgcG9ydCBoYXMgb25seSBvbmUgYWRkcmVzcyBlbGVtZW50IGRlZmluZWQKLSAgICAvLyBpZiBpdCBpcyBhbiBhZGRyZXNzIGVsZW1lbnQsIHZhbGlkYXRlIGl0Ci0gICAgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gUG9ydEltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQQWRkcmVzc0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgICAgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQmluZGluZyBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBBIEhUVFAgQmluZGluZyBtdXN0IGhhdmUgYSB2ZXJiIG9mIEdFVCBvciBQT1NUCi0gICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IEhUVFBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVCaW5kaW5nKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQmluZGluZyBPcGVyYXRpb24gSFRUUCBkZWZpbml0aW9uCi0gICAgLy8gQSBIVFRQIE9wZXJhdGlvbiBoYXMgYSBsb2NhdGlvbiB1cmkgZGVmaW5lZAotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ09wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQT3BlcmF0aW9uSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVPcGVyYXRpb24oZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQsCi0gICAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MpCi0gICAgewotICAgICAgLy8gdmFsaWRhdGUgdGhlIEhUVFAgdXJsRW5jb2RlZCBhbmQgdXJsUmVwbGFjZW1lbnQKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybEVuY29kZWRJbXBsLmNsYXNzIHx8IGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUh0dHBVcmwoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICAgIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBoYXMgYmVlbiBhIEhUVFAgZWxlbWVudCBkZWZpbmVkIHRoYXQgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcG9pbnQgaW4gdGhlIEhUVFAgbmFtZXNwYWNlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04sCi0gICAgICAgICAgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgIGVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBIVFRQIGFkZHJlc3MgaGFzIGEgdmFsdWUgc3BlY2lmaWVkIGZvciBpdCdzIHVyaSBhbmQgdGhhdCB0aGVyZSBpcyBhIEhUVFAgQmluZGluZyBkZWZpbmVkCi0gICAqIGZvciB0aGUgQmluZGluZyBzcGVjaWZpZWQgaW4gdGhlIHBvcnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBhZGRyZXNzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUFkZHJlc3MoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBIVFRQQWRkcmVzc0ltcGwgaGEgPSAoSFRUUEFkZHJlc3NJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXJpID0gaGEuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICBpZiAodXJpID09IG51bGwgfHwgdXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyksIGhhKTsKLSAgICB9Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClwYXJlbnRzLmdldCgwKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCi0gICAgaWYgKCFoYXNIdHRwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICBfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX0FERFJFU1MsCi0gICAgICAgICAgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSwKLSAgICAgICAgICBRVU9URSArIHBvcnQuZ2V0TmFtZSgpICsgUVVPVEUpLAotICAgICAgICBoYSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGUgSFRUUCBCaW5kaW5nIGRlZmluZWQgaXMgdmFsaWQuIEEgSFRUUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHZlcmIgb2YgR0VUIG9yIFBPU1QuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUJpbmRpbmcoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBIVFRQQmluZGluZ0ltcGwgaGIgPSAoSFRUUEJpbmRpbmdJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdmVyYiA9IGhiLmdldFZlcmIoKTsKLQotICAgIGlmICh2ZXJiICE9IG51bGwgJiYgIXZlcmIuZXF1YWxzKEdFVCkgJiYgIXZlcmIuZXF1YWxzKFBPU1QpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19WRVJCLCBRVU9URSArIHZlcmIgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBvcGVyYXRpb24gbXVzdCBoYXZlIGEgbG9jYXRpb24gZGVmaW5lZC4gQSBIVFRQIEJpbmRpbmcgbXVzdCBiZSBzcGVjaWZpZWQgdG8gdXNlIGFuIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVFRQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBIVFRQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU9wZXJhdGlvbihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIEhUVFBPcGVyYXRpb24gaG8gPSAoSFRUUE9wZXJhdGlvbillbGVtZW50OwotCi0gICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gaG8uZ2V0TG9jYXRpb25VUkkoKTsKLQotICAgIGlmIChsb2NhdGlvblVSSSAhPSBudWxsICYmIGxvY2F0aW9uVVJJLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0xPQ0FUSU9OX1VSSSksIGVsZW1lbnQpOwotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDEpOwotICAgIGlmICghaGFzSHR0cEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04sIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICBobyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBIVFRQIHVybFJlcGxhY2VtZW50IG9yIHVybEVuY29kZWQuIEVuc3VyZSB0aGUgSFRUUCBvcGVyYXRpb24gaGFzIGJlZW4gZGVmaW5lZC4gCi0gICAqIEVuc3VyZSB0aGF0IGVpdGhlciBlbGVtZW50IGlzIHRoZSBvbmx5IGVsZW1lbnQgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIEhUVFAgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgSFRUUCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUh0dHBVcmwoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXBhcmVudHMuZ2V0KDEpOwotCi0gICAgU3RyaW5nIGVsZW1lbnROYW1lOwotICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybEVuY29kZWRJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gInVybEVuY29kZWQiOwotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybFJlcGxhY2VtZW50SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9ICJ1cmxSZXBsYWNlbWVudCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICB9Ci0KLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSAoQmluZGluZ0lucHV0KXBhcmVudHMuZ2V0KDApOwotICAgIGlmIChpbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgIT0gMSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQsIGVsZW1lbnROYW1lKSwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFoYXNIdHRwT3BlcmF0aW9uKG9wZXJhdGlvbikpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0hUVFBPUEVSQVRJT05fRk9SX1VSTCwgUVVPVEUgKyBvcGVyYXRpb24uZ2V0TmFtZSgpICsgUVVPVEUsIGVsZW1lbnROYW1lKSwKLSAgICAgICAgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgQmluZGluZ09wZXJhdGlvbiB0ZWxscyB3aGV0aGVyIGl0IGhhcyBhIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGl0LgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgVGhlIEhUVFAgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGFuIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc0h0dHBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IG9wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRlbGVtcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpZXh0ZWxlbXMgPSBleHRlbGVtcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaWV4dGVsZW1zLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpZXh0ZWxlbXMubmV4dCgpLmdldENsYXNzKCkgPT0gSFRUUE9wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHaXZlbiBhIGJpbmRpbmcgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBhIEhUVFAgYmluZGluZyBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgVGhlIGJpbmRpbmcgdG8gY2hlY2suCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGVyZSBpcyBhbiBIVFRQIGJpbmRpbmcgZGVmaW5lZC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc0h0dHBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0ZWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaWV4dGVsZW1zID0gZXh0ZWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGlleHRlbGVtcy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaWV4dGVsZW1zLm5leHQoKS5nZXRDbGFzcygpID09IEhUVFBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9taW1lL01JTUVWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyYTNiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotCi0vKioKLSAqIFRoZSBNSU1FIHZhbGlkYXRvciBwbHVncyBpbnRvIHRoZSBXU0RMIHZhbGlkYXRvciB0byBwcm92aWRlCi0gKiB2YWxpZGF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gYSBXU0RMIGRvY3VtZW50IHdpdGhpbiB0aGUgTUlNRSBuYW1lc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUlNRV9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGxtaW1lIjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICBwdWJsaWMgTUlNRVZhbGlkYXRvcigpCi0gIHsKLQlSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShNSU1FX1JFU09VUkNFX0JVTkRMRV9OQU1FLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvc29hcC9TT0FQVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Zjg1NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuc29hcDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdGYXVsdEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nSW5wdXRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuQmluZGluZ091dHB1dEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLlBvcnRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3NJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHlJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVySW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb25JbXBsOwotCi0vKioKLSAqIFRoZSBTT0FQIHZhbGlkYXRvciBwbHVncyBpbnRvIHRoZSBXU0RMIHZhbGlkYXRvciB0byBwcm92aWRlCi0gKiB2YWxpZGF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gYSBXU0RMIGRvY3VtZW50IHdpdGhpbiB0aGUgU09BUCBuYW1lc3BhY2UuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU09BUFZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFNPQVBfUkVTT1VSQ0VfQlVORExFX05BTUUgPSAidmFsaWRhdGV3c2Rsc29hcCI7Ci0JICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9IRUFERVJfQk9EWV9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0ZBVUxUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9TT0FQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OID0gIl9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9BRERSRVNTID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQUREUkVTUyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OX1NUWUxFID0gIl9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfT1BFUkFUSU9OID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfT1BFUkFUSU9OIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9FTkNPRElOR19TVFlMRSA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX0VOQ09ESU5HX1NUWUxFIjsKLSAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CT0RZX05BTUVTUEFDRV9GT1JfRU5DT0RFRCA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX05BTUVTUEFDRV9GT1JfRU5DT0RFRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfVVNFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfVVNFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9OT1RfVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQgPSAiX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSA9ICJfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0JPRFkiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX01FU1NBR0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfTUVTU0FHRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX1BBUlRfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX1VTRV9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUl9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUl9OQU1FU1BBQ0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfTkFNRVNQQUNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9NRVNTQUdFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfUEFSVF9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUUgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfTkFNRSI7Ci0gIC8vcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfRkFVTFRfRU5DT0RJTkdfU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfRU5DT0RJTkdfU1RZTEUiOwotICAvL3ByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUVTUEFDRV9GT1JfRU5DT0RFRCA9ICJfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FU1BBQ0VfRk9SX0VOQ09ERUQiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU5DT0RFRCA9ICJlbmNvZGVkIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTElURVJBTCA9ICJsaXRlcmFsIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlBDID0gInJwYyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPQ1VNRU5UID0gImRvY3VtZW50IjsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotIAotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBTT0FQVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFNPQVBfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy8gUG9ydCBTT0FQIGRlZmluaXRpb24KLSAgICAvLyBtYWtlIHN1cmUgZXZlcnkgcG9ydCBoYXMgb25seSBvbmUgYWRkcmVzcyBlbGVtZW50IGRlZmluZWQKLSAgICAvLyBpZiBpdCBpcyBhbiBhZGRyZXNzIGVsZW1lbnQsIHZhbGlkYXRlIGl0Ci0gICAgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gUG9ydEltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQQWRkcmVzc0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEJpbmRpbmcgU09BUCBkZWZpbml0aW9uCi0gICAgLy8gQSBTT0FQIEJpbmRpbmcgbXVzdCBoYXZlIGEgc3R5bGUgb3IgcnBjIG9yIGRvY3VtZW50IG9yIG5vIHN0eWxlIGRlZmluZWQgLSBkZWZhdWx0cyB0byBkb2N1bWVudAotICAgIC8vIE11c3QgaGF2ZSBhIHRyYW5zcG9ydCB1cmkgZGVmaW5lZCAtIGNoZWNrIGlmIHRoZSB1cmkgaXMgZW1wdHkKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUEJpbmRpbmdJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUJpbmRpbmcoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQmluZGluZyBPcGVyYXRpb24gU09BUCBkZWZpbml0aW9uCi0gICAgLy8gQSBTT0FQIE9wZXJhdGlvbiBtYXkgaGF2ZSBhIHN0eWxlIGRlZmluZWQgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGRvY3VtZW50IG9yIHJwYwotICAgIC8vIGFuZCBtYXkgaGF2ZSBhIHNvYXBBY3Rpb24gdXJpIGRlZmluZWQKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdPcGVyYXRpb25JbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUE9wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlT3BlcmF0aW9uKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQsCi0gICAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MgfHwgcGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3V0cHV0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICAvLyB2YWxpZGF0ZSB0aGUgU09BUCBib2R5Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBCb2R5SW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVCb2R5KGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgLy8gdmFsaWF0ZSB0aGUgU09BUCBoZWFkZXIKLSAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQSGVhZGVySW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVIZWFkZXIoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9IRUFERVJfQk9EWV9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ0ZhdWx0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBGYXVsdEltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlRmF1bHQoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBoYXMgYmVlbiBhIFNPQVAgZWxlbWVudCBkZWZpbmVkIHRoYXQgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcG9pbnQgaW4gdGhlIFNPQVAgbmFtZXNwYWNlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04sCi0gICAgICAgICAgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBTT0FQIGFkZHJlc3MgaGFzIGEgdmFsdWUgc3BlY2lmaWVkIGZvciBpdCdzIHVyaSBhbmQgdGhhdCB0aGUgYmluZGluZyBoYXMgYSBTT0FQCi0gICAqIEJpbmRpbmcgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGFkZHJlc3MgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUFkZHJlc3MoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQQWRkcmVzc0ltcGwgc2EgPSAoU09BUEFkZHJlc3NJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXJpID0gc2EuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICBpZiAodXJpID09IG51bGwgfHwgdXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyksIHNhKTsKLSAgICB9Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClwYXJlbnRzLmdldCgwKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCi0gICAgaWYgKCFoYXNTb2FwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICBfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0FERFJFU1MsCi0gICAgICAgICAgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSwKLSAgICAgICAgICBRVU9URSArIHBvcnQuZ2V0TmFtZSgpICsgUVVPVEUpLCBzYSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGUgU09BUCBCaW5kaW5nIGRlZmluZWQgaXMgdmFsaWQuIEEgU09BUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHN0eWxlIG9mIHJwYyBvciBkb2N1bWVudAotICAgKiBvciBubyBzdHlsZSBkZWZpbmVkIChkZWZhdWx0cyB0byBkb2N1bWVudC4pICBBIHZhbGlkIChub24gZW1wdHkpIFVSSSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBBIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgU09BUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQmluZGluZyhPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBCaW5kaW5nSW1wbCBzYiA9IChTT0FQQmluZGluZ0ltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyBzdHlsZSA9IHNiLmdldFN0eWxlKCk7Ci0gICAgU3RyaW5nIHVyaSA9IHNiLmdldFRyYW5zcG9ydFVSSSgpOwotCi0gICAgaWYgKHN0eWxlICE9IG51bGwgJiYgIXN0eWxlLmVxdWFsc0lnbm9yZUNhc2UoUlBDKSAmJiAhc3R5bGUuZXF1YWxzSWdub3JlQ2FzZShET0NVTUVOVCkpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSwgUVVPVEUgKyBzYi5nZXRTdHlsZSgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICB9Ci0gICAgaWYgKHVyaS5lcXVhbHNJZ25vcmVDYXNlKEVNUFRZX1NUUklORykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1VSSSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBvcGVyYXRpb24gbWF5IGhhdmUgYSBzdHlsZSBkZWZpbmVkLiBJZiBpdCBpcyBkZWZpbmVkIGl0IG11c3QgYmUgcnBjIG9yIGRvY3VtZW50LiBJdCBtYXkgYWxzbyBoYXZlIGEKLSAgICogdXJpIGRlZmluZWQgd2hpY2ggbXVzdCBiZSBub24gZW1wdHkuICBJdCBtYXkgaGF2ZSBhIHNvYXBBY3Rpb24gZGVmaW5lZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU9wZXJhdGlvbihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBPcGVyYXRpb24gc28gPSAoU09BUE9wZXJhdGlvbillbGVtZW50OwotCi0gICAgU3RyaW5nIHNvYXBTdHlsZSA9IHNvLmdldFN0eWxlKCk7Ci0KLSAgICBpZiAoc29hcFN0eWxlICE9IG51bGwgJiYgIXNvYXBTdHlsZS5lcXVhbHNJZ25vcmVDYXNlKFJQQykgJiYgIXNvYXBTdHlsZS5lcXVhbHNJZ25vcmVDYXNlKERPQ1VNRU5UKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSksIGVsZW1lbnQpOwotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDEpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04sIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzbyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBTT0FQIGJvZHkuIElmIGVuY29kZWQgYSBib2R5IG11c3QgaGF2ZSBhbiBlbmNvZGluZ1N0eWxlLiBBbHNvLAotICAgKiBpZiBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgcGFydHMgbGlzdGVkIG11c3QgYmUgZGVmaW5lZCBwYXJ0cyBhbmQgaW4gdGhlIGVuY29kaW5nIHVzZSBjYXNlLCB0aGUgcGFydHMKLSAgICogbXVzdCBoYXZlIHR5cGVzIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBib2R5IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGJvZHkgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhpcyB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVCb2R5KE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgU09BUEJvZHlJbXBsIHNiID0gKFNPQVBCb2R5SW1wbCllbGVtZW50OwotCi0gICAgU3RyaW5nIHVzZSA9IHNiLmdldFVzZSgpOwotCi0gICAgLy8gaWYgdGhlIHVzZSA9IGVuY29kZWQgdGhlbiB0aGVyZSBtdXN0IGJlIGVuY29kaW5nU3R5bGVzLgotICAgIGlmICh1c2UgIT0gbnVsbCAmJiB1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nU3R5bGVzID0gc2IuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGlmIChlbmNvZGluZ1N0eWxlcyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGVzLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfRU5DT0RJTkdfU1RZTEUpLCBzYik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfVVNFLCBRVU9URSArIHVzZSArIFFVT1RFKSwgc2IpOwotICAgIH0KLQotICAgIC8vQ2hlY2sgdGhhdCB0aGUgcGFydHMgYXJlIHZhbGlkCi0gICAgLy8gcGFydHMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBtZXNzYWdlIHNwZWNpZmllZCBmb3IgdGhlIG9wZXJhdGlvbgotICAgIExpc3QgcGFydHMgPSBzYi5nZXRQYXJ0cygpOwotCi0gICAgaWYgKHBhcnRzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZylwYXJ0c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKXBhcmVudHMuZ2V0KDEpOwotICAgICAgICBPcGVyYXRpb24gbyA9IGJvLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAgIGlmIChvICE9IG51bGwgJiYgIW8uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBpbnB1dCBvciBvdXRwdXQgaWYgaXQgZXhpc3RzCi0gICAgICAgICAgTWVzc2FnZSBtZXNzID0gbnVsbDsKLSAgICAgICAgICBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nSW5wdXRJbXBsLmNsYXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElucHV0IGlucHV0ID0gby5nZXRJbnB1dCgpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzcyA9IGlucHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3V0cHV0SW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPdXRwdXQgb3V0cHV0ID0gby5nZXRPdXRwdXQoKTsKLQotICAgICAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzID0gb3V0cHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobWVzcyAhPSBudWxsICYmICFtZXNzLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwID0gbWVzcy5nZXRQYXJ0KHBhcnQpOwotCi0gICAgICAgICAgICBpZiAocCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIHBhcnRzIG11c3QgYWxsIGhhdmUgYSB0eXBlIGRlZmluZWQKLSAgICAgICAgICAgICAgaWYgKHVzZSAhPSBudWxsICYmIHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHAuZ2V0VHlwZU5hbWUoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIHBhcnQgZXJyb3IgLSBwYXJ0IG5lZWRzIHRvIGJlIHR5cGUgYW5kIGlzbid0CQotICAgICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFLCBRVU9URSArIHBhcnQgKyBRVU9URSksIHNiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9wYXJ0IGVycm9yIC0gcGFydCBpc24ndCBkZWZpbmVkCQotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQsIFFVT1RFICsgcGFydCArIFFVT1RFKSwgc2IpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9wYXJ0IGVycm9yIC0gaW5wdXQgaXNuJ3QgZGVmaW5lZAotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIHBhcnRzIGVycm9yIC0gb3BlcmF0aW9uIGlzbid0IGRlZmluZWQKLSAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylwYXJlbnRzLmdldCgyKTsKLSAgICBpZiAoIWhhc1NvYXBCaW5kaW5nKGJpbmRpbmcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSwgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNiKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQSBTT0FQIGhlYWRlciBtdXN0IGhhdmUgYSBtZXNzYWdlLCBwYXJ0IGFuZCB1c2UgZGVmaW5lZC4gSWYgdGhlIHVzZSBpcyBlbmNvZGVkLCBtdXN0Ci0gICAqIGFsc28gaGF2ZSBhIG5vbi1lbXB0eSBlbmNvZGluZ1N0eWxlIGFuZCBuYW1lc3BhY2UgZGVmaW5lZC4KLSAgICogQSBTT0FQIGhlYWRlciBtYXkgaGF2ZSBoZWFkZXJmYXVsdHMgZGVmaW5lZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgaGVhZGVyIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGhlYWRlciBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUhlYWRlcihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBIZWFkZXJJbXBsIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlckltcGwpZWxlbWVudDsKLQotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9ICgoRGVmaW5pdGlvbilwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpKS5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9NRVNTQUdFX1VOREVGSU5FRCwgUVVPVEUgKyBtZXNzYWdlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNvYXBIZWFkZXIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHBhcnRuYW1lID0gc29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydG5hbWUpOwotICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gcGFydCB1bmRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQsCi0gICAgICAgICAgICBRVU9URSArIHBhcnRuYW1lICsgUVVPVEUsCi0gICAgICAgICAgICBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVzZSA9IHNvYXBIZWFkZXIuZ2V0VXNlKCk7Ci0gICAgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSAmJiAhdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgLy8gdXNlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVELCBRVU9URSArIHVzZSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgfQotCi0gICAgaWYgKHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdTdHlsZXMgPSBzb2FwSGVhZGVyLmdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBpZiAoZW5jb2RpbmdTdHlsZXMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGVuY29kaW5nU3R5bGUgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHNvYXBIZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSX05BTUVTUEFDRV9VTkRFRklORUQpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgIGlmIChoZWFkZXJGYXVsdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpaGVhZGVyRmF1bHRzID0gaGVhZGVyRmF1bHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaWhlYWRlckZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlSGVhZGVyRmF1bHQoaWhlYWRlckZhdWx0cy5uZXh0KCksIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDIpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIsIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBIFNPQVAgaGVhZGVyZmF1bHQgbXVzdCBoYXZlIGEgbWVzc2FnZSwgcGFydCBhbmQgdXNlIGRlZmluZWQuIElmIHRoZSB1c2UgaXMgZW5jb2RlZCwgbXVzdAotICAgKiBhbHNvIGhhdmUgYSBub24tZW1wdHkgZW5jb2RpbmdTdHlsZSBhbmQgbmFtZXNwYWNlIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlSGVhZGVyRmF1bHQoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHRJbXBsIHNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHRJbXBsKWVsZW1lbnQ7Ci0KLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0TWVzc2FnZSgpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9ICgoRGVmaW5pdGlvbilwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpKS5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVELCBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlckZhdWx0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0bmFtZSA9IHNvYXBIZWFkZXJGYXVsdC5nZXRQYXJ0KCk7Ci0gICAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydG5hbWUpOwotICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gcGFydCB1bmRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCwKLSAgICAgICAgICAgIFFVT1RFICsgcGFydG5hbWUgKyBRVU9URSwKLSAgICAgICAgICAgIFFVT1RFICsgbWVzc2FnZVFOYW1lLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyB1c2UgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0VXNlKCk7Ci0gICAgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSAmJiAhdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgLy8gdXNlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX1VTRV9VTkRFRklORUQsIFFVT1RFICsgdXNlICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgIH0KLQotICAgIGlmICh1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nU3R5bGVzID0gc29hcEhlYWRlckZhdWx0LmdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBpZiAoZW5jb2RpbmdTdHlsZXMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGVuY29kaW5nU3R5bGUgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogVmFsaWRhdGUgdGhlIFNPQVAgZmF1bHQuIEEgU09BUCBmYXVsdCBtdXN0IGhhdmUgYSBuYW1lIGRlZmluZWQgdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBuYW1lCi0gICogc3BlY2lmaWVkIGluIHRoZSBwb3J0VHlwZS4gIElmIGVuY29kZWQgYSBmYXVsdCBtdXN0IGhhdmUgYW4gZW5jb2RpbmdTdHlsZSBhbmQgYSBuYW1lc3BhY2VVUkkuIAotICAqIAotICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlRmF1bHQoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQRmF1bHRJbXBsIGZhdWx0ID0gKFNPQVBGYXVsdEltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyBuYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotCi0gICAgU3RyaW5nIHBhcmVudE5hbWUgPSAoKEJpbmRpbmdGYXVsdClwYXJlbnRzLmdldCgwKSkuZ2V0TmFtZSgpOwotCi0gICAgaWYgKCFuYW1lLmVxdWFscyhwYXJlbnROYW1lKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FLCBRVU9URSArIG5hbWUgKyBRVU9URSwgUVVPVEUgKyBwYXJlbnROYW1lICsgUVVPVEUpLCBmYXVsdCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGhhc1NvYXBCaW5kaW5nLiAtIGhlbHBlciBNZXRob2QKLSAgICogR2l2ZW4gYSBiaW5kaW5nIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gdGhlIFNPQVAgYmluZGluZyB0byBjaGVjawotICAgKiBAcmV0dXJuIHRydWUgaWYgYSBiaW5kaW5nIGhhcyBhIFNPQVAgYmluZGluZyBkZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc1NvYXBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0ZWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaWV4dGVsZW1zID0gZXh0ZWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGlleHRlbGVtcy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaWV4dGVsZW1zLm5leHQoKS5nZXRDbGFzcygpID09IFNPQVBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvRE9NRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5YjExMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHNpZ25pZnkgZXJyb3IgbGV2ZWxzIHRoYXQgYXJlIHRoZSByZXN1bHQgb2YKLSAqIFhNTFBhcnNlRXhjZXB0aW9uLiBUaGV5IGNvbmNlcHR1YWxseSBjb3JyZXNwb25kIHRvIG9yZy53M2MuZG9tLkRPTUVycm9yIGJ1dAotICogd2UgdXNlIG91ciBvd24gaW50ZXJmYWNlLCBzaW5jZSBET01FcnJvciBpcyBub3QgaW4gSmF2YSAxLjQsIGFuZCBpdHMKLSAqIHBhY2thZ2UgY2hhbmdlcyBmcm9tIFhlcmNlcyAyLjYuMiBhbmQgWGVyY2VzIDIuNy4wLgotICovCi0KLXB1YmxpYyBpbnRlcmZhY2UgRE9NRXJyb3IgewotCWludCBTRVZFUklUWV9XQVJOSU5HID0gMTsKLQlpbnQgU0VWRVJJVFlfRVJST1IgPSAyOwotCWludCBTRVZFUklUWV9GQVRBTF9FUlJPUiA9IDM7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9GaWxlRW50aXR5UmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjUzOTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkxhenlVUkxJbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlLmdldE5hbWVzcGFjZSgpOwotICAgIFN0cmluZyB1cmwgPSBudWxsOwotICAgIGlmKHN5c3RlbUlkICE9IG51bGwpCi0gICAgewotICAgICAgdXJsID0gc3lzdGVtSWQ7Ci0gICAgfQotICAgIGVsc2UgaWYocHVibGljSWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBwdWJsaWNJZDsKLSAgICB9Ci0gICAgZWxzZSBpZihuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBuYW1lc3BhY2U7Ci0gICAgfQotICAgIGlmKHVybCAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IExhenlVUkxJbnB1dFN0cmVhbSh1cmwpOwotICAgICAgcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVzb3VyY2UuZ2V0RXhwYW5kZWRTeXN0ZW1JZCgpLCByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCksIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNhMTkzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWFDb25zdGFudHM7Ci0KLS8qKgotICogR2VuZXJhdGUgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEgZm9yIGFuIGlubGluZSBzY2hlbWEuIFdpbGwgYWRkIGltcG9ydHMgZm9yIHVucmVzb2x2ZWQKLSAqIG5hbWVzcGFjZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IKLXsKLSAgLyoqCi0gICAqIEdlbmVyYXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgZm9yIGlubGluZSBzY2hlbWEgcmVmZXJlbmNlcyBpcyAKLSAgICogaW52YWxpZCBhY2NvcmRpbmcgdG8gdGhlIFdTREwgc3BlYy4gQXMgc29tZSBvbGRlciBjbGllbnRzIChXU1ZUKSBtYXkKLSAgICogZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGUgb3B0aW9uIHRvIGFsbG93IHRoaXMgaXMgbGVmdAotICAgKiBpbi4gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBwb3N0IDEuNS4KLSAgICogVE9ETzogUmV2aWV3IHJlbW92aW5nIHRoaXMgcHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBHRU5FUkFURV9JTkxJTkVfSU1QT1JUUyA9IGZhbHNlOwotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTkNPRElOR19VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOi8vLyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUTkFNRVNQQUNFID0gInRhcmdldE5hbWVzcGFjZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DTFVERSA9ICJpbmNsdWRlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQUxPQ0FUSU9OID0gInNjaGVtYUxvY2F0aW9uIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBpZ25vcmVOYW1lc3BhY2VzID0KLSAgICB7IFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzE5OTksIFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEgfTsKLQotICBwcm90ZWN0ZWQgc3RhdGljIElubGluZVNjaGVtYUdlbmVyYXRvciBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIElubGluZVNjaGVtYUdlbmVyYXRvcigpCi0gIHsKLQlTdHJpbmcgZ2VuSW5saW5lSW1wb3J0cyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3NkbC5yZXF1aXJlLmlubGluZS5pbXBvcnRzIik7Ci0JaWYoZ2VuSW5saW5lSW1wb3J0cyAhPSBudWxsICYmIGdlbklubGluZUltcG9ydHMuZXF1YWxzKCJmYWxzZSIpKQotCXsKLQkgIEdFTkVSQVRFX0lOTElORV9JTVBPUlRTID0gdHJ1ZTsKLQl9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YW5jZSBvZiB0aGUgSW5saW5lU2NoZW1hR2VuZXJhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEgZ2VuZXJhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYSBmcm9tIHRoZSBlbGVtZW50IHByb3ZpZGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2NoZW1hIGluIG9yZGVyLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gdmFsaWRJbXBvcnROU3MgQSBzZXQgb2YgbmFtZXNwYWNlcyBmb3Igd2hpY2ggaXQncyB2YWxpZCB0byBjcmVhdGUgaW1wb3J0IHN0YXRlbWVudHMuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uLCBTZXQgdmFsaWRJbXBvcnROU3MpCi0gIHsKLQkgIHJldHVybiBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nKGVsZW1lbnQsIGVsZW1lbnRzLCBmaWxlbG9jYXRpb24sIG5ldyBIYXNodGFibGUoKSwgdmFsaWRJbXBvcnROU3MpOwotICB9Ci0gIAotICAvKioKLSAgCSogQ3JlYXRlcyBhIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNjaGVtYSBtb2RlbCB3aXRoIHRoZSByb290IGVsZW1lbnQgb2YKLSAgCSogZXh0RWxlbS4gQ2FsbHMgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgdG8gdGFrZSBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBTdHJpbmcKLSAgCSogYWZ0ZXIgaXQgb2J0YWlucyB0aGUgRWxlbWVudCBmcm9tIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0gIAkqIAotICAJKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gIAkqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gY29udGFpbiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgCSogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhlIHNjaGVtYSBpcyBsb2NhdGVkIGluLgotICAJKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHBhcmVudCBuYW1lc3BhY2VzIHRvIHVzZWQgdG8gcmVzb2x2ZSBwcmVmaXhlcy4KLSAgCSogQHBhcmFtIHZhbGlkSW1wb3J0TlNzIEEgc2V0IG9mIG5hbWVzcGFjZXMgZm9yIHdoaWNoIGl0J3MgdmFsaWQgdG8gY3JlYXRlIGltcG9ydCBzdGF0ZW1lbnRzLgotICAJKiBAcmV0dXJuIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2hlbWEgd2l0aCB0aGUgcm9vdCBlbGVtZW50ICdlbGVtZW50Jy4KLSAgCSovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MsIFNldCB2YWxpZEltcG9ydE5TcykKLSAgewotCVNldCBpbXBvcnROU3MgPSBuZXcgVHJlZVNldCgpOyAKLSAgICBpbXBvcnROU3MuYWRkQWxsKHZhbGlkSW1wb3J0TlNzKTsgCi0gICAgaW1wb3J0TlNzLmFkZChTT0FQX0VOQ09ESU5HX1VSSSk7IAotCi0gICAgSW5saW5lU2NoZW1hR2VuZXJhdG9yIHNjaGVtYUdlbmVyYXRvciA9IElubGluZVNjaGVtYUdlbmVyYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gc2NoZW1hR2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIoZWxlbWVudCk7Ci0gICAgTGlzdCByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhlbGVtZW50KTsKLSAgICBIYXNodGFibGUgcmVxTlNEZWNsID0gc2NoZW1hR2VuZXJhdG9yLnJlc29sdmVOYW1lc3BhY2VzKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIC8vSGFzaHRhYmxlIHJlcU5TRGVjbCA9IHNjaGVtYUdlbmVyYXRvci5nZXRSZXF1aXJlZE5TRGVjbGFyYXRpb25zKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIGlmKEdFTkVSQVRFX0lOTElORV9JTVBPUlRTKQotICAgIHsKLSAgICAgIExpc3QgaW1wb3J0TlMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0SW1wb3J0TmFtZXNwYWNlcyhlbGVtZW50KTsKLSAgICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0JICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZXN0cmljdEltcG9ydHMocmVxbnMsIHZhbGlkSW1wb3J0TlNzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlcW5zLmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoZWxlbWVudCwgZWxlbWVudHMsIHJlcW5zLCByZXFOU0RlY2wsIGZpbGVsb2NhdGlvbik7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgYnV0IG5vdCBpbXBvcnRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHRoZSBwYXJlbnQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzb2FwIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc29hcEVuY29kaW5nUmVxdWlyZWROb3RJbXBvcnRlZChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MpCi0gIHsKLSAgICBJbmxpbmVTY2hlbWFHZW5lcmF0b3Igc2NoZW1hR2VuZXJhdG9yID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihlbGVtZW50KTsKLSAgICBMaXN0IHJlcW5zID0gbnVsbDsKLQotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKGVsZW1lbnQpOwotICAgIHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL3NjaGVtYUdlbmVyYXRvci5yZXNvbHZlVW5kZWNsYXJlZE5hbWVzcGFjZXMocmVxbnMsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChyZXFucyk7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIHVuZGVjbGFyZWQgbmFtZXNwYWNlcy4KLSAgICogCi0gICAqIEBwYXJhbSB1bnJlc29sdmVkTlNzIEEgbGlzdCBvZiB1bnJlc29sdmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBuYW1lc3BhY2UgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiBAcmV0dXJuIEEgaGFzaHRhYmxlIG9mIHByZWZpeGVzIGFuZCBuYW1lc3BhY2VzLgotICAgKi8KLS8vICBwcm90ZWN0ZWQgSGFzaHRhYmxlIHJlc29sdmVVbmRlY2xhcmVkTmFtZXNwYWNlcyhMaXN0IHVucmVzb2x2ZWROU3MsIEhhc2h0YWJsZSBuc1Jlc29sdmVyKQotLy8gIHsKLS8vICAgIEhhc2h0YWJsZSBuYW1lc3BhY2VzID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gICAgaWYgKHVucmVzb2x2ZWROU3MgIT0gbnVsbCAmJiAhdW5yZXNvbHZlZE5Tcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotLy8gICAgewotLy8gICAgICBmb3IgKGludCBpID0gdW5yZXNvbHZlZE5Tcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpdW5yZXNvbHZlZE5Tcy5nZXQoaSk7Ci0vLyAgICAgICAgaWYgKG5zLmVxdWFscygiIikpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgbnMgPSBYTUxOUzsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgZWxzZQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIG5zID0gWE1MTlMgKyAiOiIgKyBuczsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgaWYgKG5zUmVzb2x2ZXIuY29udGFpbnNLZXkobnMpKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIC8vbmFtZXNwYWNlcy5yZW1vdmUoaSk7Ci0vLyAgICAgICAgICAvL25hbWVzcGFjZXMuYWRkKGksIG5zUmVzb2x2ZXIuZ2V0KG5zKSk7Ci0vLyAgICAgICAgICBuYW1lc3BhY2VzLnB1dChucywgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICAgIHVucmVzb2x2ZWROU3MucmVtb3ZlKGkpOwotLy8gICAgICAgICAgdW5yZXNvbHZlZE5Tcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICB9Ci0vLyAgICAgIH0KLS8vICAgIH0KLS8vICAgIHJldHVybiBuYW1lc3BhY2VzOwotLy8gIH0KLQotICAvKioKLSAgICogVGhpcyByZWN1cnNpdmUgbWV0aG9kIGNyZWF0ZXMgdGhlIHNjaGVtYSBTdHJpbmcgZnJvbSB0aGUgcm9vdCBFbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IHRvIGJlIGNyZWF0ZWQgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gICAqIEBwYXJhbSByZXF1aXJlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSByZXFOU0RlY2wgQSBoYXNodGFibGUgb2YgcmVxdWlyZWQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzY2hlbWEuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KAotICAgIEVsZW1lbnQgZWxlbSwKLSAgICBMaXN0IGVsZW1lbnRzLAotICAgIExpc3QgcmVxdWlyZWROYW1lc3BhY2VzLAotICAgIEhhc2h0YWJsZSByZXFOU0RlY2wsCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbikKLSAgewotICAgIGlmIChlbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gIiI7IC8vIGp1c3QgaW4gY2FzZQotCi0gICAgZWxlbWVudHMuYWRkKGVsZW0pOwotCi0gICAgU3RyaW5nQnVmZmVyIHhzZFN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBlbGVtLmdldFRhZ05hbWUoKTsKLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI8IikuYXBwZW5kKGVsZW1lbnROYW1lKTsKLQotICAgIFN0cmluZyBuYW1lUHJlZml4ID0gIiI7IC8vIHRoZSB4bWxucyBwcmVmaXggdXNlZCBmb3IgdGhlIGVsZW1lbnRzCi0gICAgLy8gR2V0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyBlbGVtZW50IGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgeHNkU3RyaW5nCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKG4uZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKTsKLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFNDSEVNQUxPQ0FUSU9OKSAmJiBmaWxlbG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQocmVsYXRpdmVQYXRoKS5hcHBlbmQoIlwiIik7ICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAvLyBnZXQgdGhlIG5hbWUgcHJlZml4IGZvciB0aGlzIHNjaGVtYSB0byB1c2UgaW4gZ2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cwotICAgICAgICBpZiAobm9kZU5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEpCi0gICAgICAgIHsKLQotICAgICAgICAgIGlmIChub2RlVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShlbGVtLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lUHJlZml4ID0gbm9kZU5hbWU7Ci0gICAgICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFtZVByZWZpeCA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNikgKyAiOiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFJlcGxhY2Ugb2xkIHNjaGVtYSBuYW1lc3BhY2VzIHdpdGggdGhlIG5ldyBzY2hlbWEgbmFtZXNwYWNlLgotICAgICAgICBpZihub2RlVmFsdWUuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5vZGVWYWx1ZS5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgbm9kZVZhbHVlID0gU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAgICAgICAgfQotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKG5vZGVWYWx1ZSkuYXBwZW5kKCJcIiIpOwotICAgICAgfQotICAgIH0KLS8vICAgIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSAmJiAhZm91bmRTY2hlbWFMb2NhdGlvbikKLS8vICAgIHsKLS8vICAgICAgeHNkU3RyaW5nLmFwcGVuZCgiICIpLmFwcGVuZChTQ0hFTUFMT0NBVElPTikuYXBwZW5kKCI9XCIiKS5hcHBlbmQobmFtZXNwYWNlKS5hcHBlbmQoIlwiIik7Ci0vLyAgICB9Ci0gICAgLy8gYWRkIGluIGFueSByZXF1aXJlZCBOUyBkZWNsYXJhdGlvbnMgZnJvbSBwYXJlbnQgZWxlbWVudHMKLSAgICBpZiAocmVxTlNEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHJlcU5TRGVjbC5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBTdHJpbmcgZGVjbE5TID0gKFN0cmluZylyZXFOU0RlY2wuZ2V0KGtleSk7Ci0gICAgICAgIGlmKGRlY2xOUy5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgZGVjbE5TLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBkZWNsTlMgPSBTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZChkZWNsTlMpLmFwcGVuZCgiXCIiKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI+Iik7Ci0gICAgaWYgKHJlcXVpcmVkTmFtZXNwYWNlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlSZXF1aXJlZE5hbWVzcGFjZXMgPSByZXF1aXJlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpUmVxdWlyZWROYW1lc3BhY2VzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpUmVxdWlyZWROYW1lc3BhY2VzLm5leHQoKTsKLQotICAgICAgICB4c2RTdHJpbmcKLSAgICAgICAgICAuYXBwZW5kKCI8IikKLSAgICAgICAgICAuYXBwZW5kKG5hbWVQcmVmaXgpCi0gICAgICAgICAgLmFwcGVuZChJTVBPUlQpCi0gICAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgICAgLmFwcGVuZChOQU1FU1BBQ0UpCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiICIpCi0gICAgICAgICAgLmFwcGVuZChTQ0hFTUFMT0NBVElPTikKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIvPiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIlxuIik7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShjaGlsZCwgZWxlbWVudHMsIG51bGwsIG51bGwsIGZpbGVsb2NhdGlvbikpOwotICAgICAgfQotICAgIH0KLQotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwvIikuYXBwZW5kKGVsZW0uZ2V0VGFnTmFtZSgpKS5hcHBlbmQoIj4iKTsKLQotICAgIHJldHVybiB4c2RTdHJpbmcudG9TdHJpbmcoKTsKLQotICB9Ci0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlIHByZWZpeGVzIHRoYXQgYXJlIHVzZWQgZm9yIGVsZW1lbnRzIG9yIHR5cGVzIGluIHRoZSBzY2hlbWEuCi0gICAqICAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hIHRvIGNoZWNrIGZvciBuYW1lc3BhY2UgcHJlZml4ZXMuCi0gICAqIEByZXR1cm4gQSBsaXN0IG9mIG5hbWVzcGFjZSBwcmVmaXhlcyBmb3IgdGhlIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXROYW1lc3BhY2VQcmVmaXhlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldE5hbWVzcGFjZVByZWZpeGVzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIAotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQWRkIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGN1cnJlbnQgZWxlbWVudAotICAgIFN0cmluZyBlbGVtTlMgPSBlbGVtLmdldFByZWZpeCgpOwotICAgIC8vIGlmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBwcmVmaXggc2V0IGl0IHRvIHRoZSBlbXB0eSBwcmVmaXguCi0gICAgaWYoZWxlbU5TID09IG51bGwpCi0gICAgewotICAgICAgZWxlbU5TID0gIiI7Ci0gICAgfQotICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKGVsZW1OUykpCi0gICAgIHsKLSAgICAgIG5hbWVzcGFjZS5hZGQoZWxlbU5TKTsKLSAgICB9Ci0gICAgLy8gbm93IGFkZCBhbGwgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCdzIG5hbWVzcGFjZXMKLSAgICAvLyBkb24ndCBpbmNsdWRlIGltcG9ydCBhbmQgc2NoZW1hIGVsZW1lbnRzCi0gICAgU3RyaW5nIGxvY2FsbmFtZSA9IGVsZW0uZ2V0TG9jYWxOYW1lKCk7Ci0gICAgaWYgKCFsb2NhbG5hbWUuZXF1YWxzKElNUE9SVCkgJiYgIWxvY2FsbmFtZS5lcXVhbHMoSU5DTFVERSkgJiYgIWxvY2FsbmFtZS5lcXVhbHMoU0NIRU1BKSkKLSAgICB7Ci0gICAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBuLmdldE5vZGVOYW1lKCk7Ci0gICAgICAgIC8vIHJlbW92ZWQgcmVzdHJpY3Rpb24gdGhhdCB3ZSdyZSBvbmx5IGxvb2tpbmcgYXQgdHlwZXMKLSAgICAgICAgLy8JCWlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFRZUEUpKQotICAgICAgICAvLwkJewotICAgICAgICAvLyBkb24ndCB0YWtlIG5hbWVzcGFjZSBpbmZvIGZyb20gYXR0cmlidXRlcyBkZWZpbmluZyBuYW1lc3BhY2VzLgotICAgICAgICAvLyB0aGF0IGluY2x1ZGVzIHhtbG5zLCB0YXJnZXROYW1lc3BhY2UKLSAgICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xIHx8IG5vZGVOYW1lLmVxdWFscyhUQVJHRVROQU1FU1BBQ0UpIHx8IG5vZGVOYW1lLmVxdWFscyhOQU1FKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEdyYWIgbmFtZXNwYWNlIHByZWZpeGVzIGZyb20gYXR0cmlidXRlcy4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaW50IGNvbG9uSW5kZXggPSBub2RlTmFtZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgaWYoY29sb25JbmRleCAhPSAtMSAmJiAoY29sb25JbmRleCArIDEgPCBub2RlTmFtZS5sZW5ndGgoKSAmJiBub2RlTmFtZS5jaGFyQXQoY29sb25JbmRleCArIDEpICE9ICcvJykpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IG5vZGVOYW1lLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTsKLSAgICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKHByZWZpeCkpCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChwcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpbnQgY29sb25JbmRleCA9IG5vZGVWYWx1ZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgIC8vIERvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBhdHRyaWJ1dGVzIHdpdGggdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCB0aGF0IGlzIGF0dHJpYnV0ZXMKLSAgICAgICAgLy8gdGhhdCBhcmUgbm90IHByZWZpeGVkLiAoY29sb25JbmRleCA9PSAtMSkKLSAgICAgICAgLy8gSWYgdGhlIGNvbG9uSW5kZXggaXMgZm9sbG93ZWQgYnkgYSAvIHRoZW4gaXQgaXMgYSBVUkkgYW5kIG5vdAotICAgICAgICAvLyBuYW1lc3BhY2UgcXVhbGlmaWVkLgotCQlpZiAoY29sb25JbmRleCA9PSAtMSB8fCAoY29sb25JbmRleCArIDEgPCBub2RlVmFsdWUubGVuZ3RoKCkgJiYgbm9kZVZhbHVlLmNoYXJBdChjb2xvbkluZGV4ICsgMSkgPT0gJy8nKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhlcmUgd2UgaGF2ZSBmb3VuZCBhIGNvbG9uIGRlbGltaXRlciBzbyB3ZSBuZWVkIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBoZXJlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBhbiBpbXBvcnQgc3RhdGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgaW1wb3J0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRJbXBvcnROYW1lc3BhY2VzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRJbXBvcnROYW1lc3BhY2VzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaWYgdGhpcyBpcyBhbiBpbXBvcnQgZWxlbWVudCBnZXQgdGhlIG5hbWVzcGFjZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShJTVBPUlQpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZSkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIEhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcyBrZXlzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgbWFwcGVkIHRvIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5TUmVzb2x2ZXIoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLQotICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNik7Ci0gICAgICAgIH0KLSAgICAgICAgbnNSZXNvbHZlci5wdXQobmFtZVByZWZpeCwgbm9kZVZhbHVlKTsKLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNSZXNvbHZlcjsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMgbGlzdCB3aXRoIHRoZSB0d28gbmFtZXNwYWNlCi0gICAqIHJlc29sdmVyIGhhc2h0YWJsZXMgcHJvdmlkZWQuIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgdGhhdCBuZWVkCi0gICAqIHRvIGJlIGRlY2xhcmVkLgotICAgKiBGaXJzdCByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZXMgd2l0aCBuc1Jlc29sdmVyLgotICAgKiBOZXh0IHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSB3aXRoIHBhcmVudE5TUmVzb2x2ZXIuCi0gICAqIEEgc2lkZSBhZmZlY3Qgb2YgdGhpcyBtZXRob2QgaXMgdGhlIG5hbWVzcGFjZXMgbGlzdCBpcyBsZWZ0IHdpdGggb25seSB0aG9zZSAKLSAgICogbmFtZXNwYWNlcyB0aGF0IGFyZSByZXNvbHZlZCBhbmQgdGhlIHJlc29sdmVkIGVudGl0aWVzIGFyZSBwbGFjZWQgaW4gdGhlIAotICAgKiBsaXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGVudHJpZXMuCi0gICAqIEZvciBleC4gSWYgeW91IHByb3ZpZGUgYSBsaXN0IHN1Y2ggYXMge3hzZCwgaW50Zn0gYW5kIG9ubHkgeHNkIGNhbiBiZSByZXNvbHZlZAotICAgKiB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgbGlzdCB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9Ci0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIHJlc29sdmUuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgbG9jYWwgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBwYXJlbnROU1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICogQHJldHVybiBBIEhhc2h0YWJsZSBvZiBuYW1lc3BhY2VzIHRoYXQgbXVzdCBiZSBkZWNsYXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpCi0gIHsKLSAgCUhhc2h0YWJsZSByZXFOU0RlY2wgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhbmFtZXNwYWNlcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSBuYW1lc3BhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KGkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSBsaXN0LgotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpKTsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IG5zUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTmV4dCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChucy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TICsgIjoiICsgbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyZW50TlNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gcGFyZW50TlNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gU3RpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBuYW1lc3BhY2UgdGhvdWdoLgotICAgICAgICAgICAgICByZXFOU0RlY2wucHV0KG5zLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXFOU0RlY2w7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBuYW1lc3BhY2UgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IGlmIGl0IGlzIGluIHRoZSBpbXBvcnQgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBuYW1lc3BhY2VzIGxpc3QuCi0gICAqIEBwYXJhbSBpbXBvcnRlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IHRoZSBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlSW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIExpc3QgaW1wb3J0ZWROYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBpbXBvcnRlZE5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhaW1wb3J0ZWROYW1lc3BhY2VzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpSW1wb3J0ZWROUyA9IGltcG9ydGVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlJbXBvcnRlZE5TLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlOUyA9IChTdHJpbmcpaUltcG9ydGVkTlMubmV4dCgpOwotCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGlOUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NoZW1hIGFuZCB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhlIGlnbm9yZU5hbWVzcGFjZXMKLSAgICogbGlzdCBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBsb2NhbCBuYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRoIHRoZSBsb2NhbCBuYW1lc3BhY2VzIHJlbW92ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSBlbGVtLmdldEF0dHJpYnV0ZShUQVJHRVROQU1FU1BBQ0UpOwotICAgICAgbmFtZXNwYWNlcy5yZW1vdmUobnMpOwotCi0gICAgICBmb3IgKGludCBpID0gaWdub3JlTmFtZXNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy8ga2VlcCByZW1vdmluZyB0aGUgbmFtZXNwYWNlIHVudGlsIGl0IGlzIG5vdCBpbiB0aGUgbGlzdAotICAgICAgICBpZiAobmFtZXNwYWNlcy5yZW1vdmUoaWdub3JlTmFtZXNwYWNlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICogUmVtb3ZlIGFsbCB0aGUgbmFtZXNwYWNlcyBpbiB0aGUgbmFtZXNwYWNlcyBsaXN0IHRoYXQgYXJlbid0IGNvbnRhaW5lZCBpbiB0aGUgCi0gICAqIHZhbGlkSW1wb3J0TlNzIHNldC4gCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBBIGxpc3Qgb2YgbmFtZXNwYWNlcy4gCi0gICAqIEBwYXJhbSB2YWxpZEltcG9ydE5TcyBBIHNldCBvZiB2YWxpZCBuYW1lc3BhY2VzLiAKLSAgICogQHJldHVybiBBIGxpc3Qgb2YgbmFtZXNwYWNlcyB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IG1lbWJlcnMgd2hpY2ggYXJlbid0IGluIHRoZSB2YWxpZEltcG9ydE5TcyBzZXQuIAotICAgKi8gCi0gIHByb3RlY3RlZCBMaXN0IHJlc3RyaWN0SW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIFNldCB2YWxpZEltcG9ydE5TcykgCi0gIHsgCi0gICAgICAgIEl0ZXJhdG9yIG5zSXRlciA9IG5hbWVzcGFjZXMuaXRlcmF0b3IoKTsgCi0gICAgICAgIHdoaWxlKG5zSXRlci5oYXNOZXh0KCkpIAotICAgICAgICB7IAotICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpbnNJdGVyLm5leHQoKTsgCi0gICAgICAgICAgaWYoIXZhbGlkSW1wb3J0TlNzLmNvbnRhaW5zKG5zKSkgCi0gICAgICAgICAgeyAKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShucyk7IAotCQkJCW5zSXRlciA9IG5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB9IAotICAgICAgICB9IAotICAgICAgICByZXR1cm4gbmFtZXNwYWNlczsgCi0gIH0gCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgaW4gdGhlIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcywKLSAgICogZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHBhcmFtIHJlcW5zIFRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gY2hlY2sgZm9yIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZXMgaXMgaW4gdGhlIGxpc3QsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoTGlzdCByZXFucykKLSAgewotICAgIGlmIChyZXFucy5jb250YWlucyhTT0FQX0VOQ09ESU5HX1VSSSkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlhNzc4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuRXJyb3JNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWFDb25zdGFudHM7Ci0KLS8qKgotICogUGx1Z2luIHZhbGlkYXRvciBmb3IgdGhlIFdTREwgVmFsaWRhdGlvbiBmcmFtZXdvcmsuIFZhbGlkYXRlcyBpbmxpbmUgc2NoZW1hIGZvdW5kIGluIGEgV1NETCBkb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYVZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFByb3BlcnR5IHRvIGFsbG93IHRoZSBXU0RMIHZhbGlkYXRvciB0byB1c2UgdGhlIHRhcmdldCBuYW1lc3BhY2UKLSAgICogZGVmaW5lZCBvbiB0aGUgV1NETCBkb2N1bWVudCBmb3Igc2NoZW1hcyB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gICAqIFRoaXMgcHJvcGVydHkgd2lsbCBhbGxvdyBjbGllbnRzIHdobyBkZXBlbmQgb24gdGhpcyBmdW5jdGlvbmFsaXR5Ci0gICAqIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgcG9zdCAxLjUuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gVVNFX1dTRExfVEFSR0VUTkFNRVNQQUNFID0gZmFsc2U7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSA9ICJfV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BID0gIl9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICAKLSAgcHVibGljIElubGluZVNjaGVtYVZhbGlkYXRvcigpCi0gIHsKLQlTdHJpbmcgdXNlTlMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZS53c2RsLnRhcmdldG5hbWVzcGFjZSIpOwotCWlmKHVzZU5TICE9IG51bGwgJiYgdXNlTlMuZXF1YWxzKCJ0cnVlIikpCi0JewotCSAgVVNFX1dTRExfVEFSR0VUTkFNRVNQQUNFID0gdHJ1ZTsKLQl9Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAJTGlzdCBlbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCVNjaGVtYSBlbGVtID0gKFNjaGVtYSkgZWxlbWVudDsKLSAgICBEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uID0gKERlZmluaXRpb24pIHBhcmVudHMuZ2V0KHBhcmVudHMuc2l6ZSgpIC0gMSk7Ci0gICAgU3RyaW5nIGJhc2VMb2NhdGlvbiA9IHdzZGxEZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIC8vIEFkZCBpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGluIHRoZSBkb2MgYWxyZWFkeSB0aGF0IGFyZW4ndCBkZWZpbmVkIGxvY2FsbHkgaW4gdGhpcyBzY2hlbWEuCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgbmFtZXNwYWNlcyBvdGhlciB0aGVuIGluIHRoZSBkZWZpbnRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhcwotICAgIC8vIGlubGluZSBzY2hlbWEgY2FuIG5vdCBoYXZlIGFueSBvdGhlciBwYXJlbnRzIGFuZCBtdXN0IGhhdmUgdGhlcmUgdHdvIHBhcmVudHMuCi0gICAgLy8gRmlyc3QgdGFrZSBjYXJlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0gICAgCi0gICAgLy8gY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCUVsZW1lbnQgdzNjZWxlbWVudCA9IGVsZW0uZ2V0RWxlbWVudCgpOwotCUhhc2h0YWJsZSBwYXJlbnRuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sdzNjZWxlbWVudCk7Ci0JU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IHczY2VsZW1lbnQuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotCS8vIGlmIHRoZSB0YXJnZXROYW1lc3BhY2UgaGFzbid0IGJlZW4gZGVmaW5lZCBmb3IgdGhlIHNjaGVtYSB1c2UgdGhlIAotCS8vIHRhcmdldE5hbWVzcGFjZSBvZiB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudAotCWlmKFVTRV9XU0RMX1RBUkdFVE5BTUVTUEFDRSAmJiAodGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlLmVxdWFscyhFTVBUWV9TVFJJTkcpKSkKLQkgewotCSAgdGFyZ2V0TmFtZXNwYWNlID0gd3NkbERlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JICB3M2NlbGVtZW50LnNldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFLHRhcmdldE5hbWVzcGFjZSk7Ci0JfQotCQotICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgZ2l2ZW4gaXMgb25lIG9mIHRoZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgcHJvZHVjZSBhIHdhcm5pbmcuCi0JU3RyaW5nIG5hbWVzcGFjZSA9IHczY2VsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JaWYobmFtZXNwYWNlLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCBuYW1lc3BhY2UuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKQotCSB7Ci0JICB2YWxJbmZvLmFkZFdhcm5pbmcoCi0JICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fT0xEX1NDSEVNQV9OQU1FU1BBQ0UsIFFVT1RFICsgU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSArIFFVT1RFKSwgZWxlbWVudCk7Ci0JfQotCQotICAgIC8vIG5vdyBjcmVhdGUgYW5kIGNhbGwgdGhlIHZhbGlkYXRvciBmb3IgdGhlIGlubGluZSBzY2hlbWEKLSAgICBYU0RWYWxpZGF0b3Igc2NoZW1hdiA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLSAgICAKLSAgICAvL1N0cmluZyBmaWxlTG9jYXRpb24gPSBuZXcgVVJMKHZhbGlkYXRvcm1hbmFnZXIuZ2V0RmlsZW5hbWUoKSkuZ2V0UGF0aCgpOwotICAgIElubGluZVhTRFJlc29sdmVyIGlubGluZUVudGl0eVJlc29sdmVyID0KLSAgICAgIGdldEVudGl0eVJlc29sdmVyKHdzZGxEZWZpbml0aW9uLCAoVHlwZXMpIHBhcmVudHMuZ2V0KDApLCBiYXNlTG9jYXRpb24sIHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgLy8JYWRkIGluIHRoZSBleHRlcm5hbCBYU0QgQ2F0YWxvZyB0byByZXNvbHZlIHNjaGVtYXMgb2ZmbGluZQotICAgIFhNTEVudGl0eVJlc29sdmVyQ2hhaW4gZW50aXR5UmVzb2x2ZXJDaGFpbiA9IG5ldyBYTUxFbnRpdHlSZXNvbHZlckNoYWluKCk7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihpbmxpbmVFbnRpdHlSZXNvbHZlcik7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcih2YWxJbmZvLmdldFVSSVJlc29sdmVyKCkpOwotICAgIC8vZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihYTUxDYXRhbG9nUmVzb2x2ZXIuZ2V0SW5zdGFuY2UoKSk7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihuZXcgRmlsZUVudGl0eVJlc29sdmVyKCkpOwotCQotICAgIC8vCSBDcmVhdGUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5saW5lIHNjaGVtYS4gCi0gICAgU3RyaW5nIHhzZCA9IElubGluZVNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmcodzNjZWxlbWVudCwgZWxlbWVudHMsIGJhc2VMb2NhdGlvbiwgcGFyZW50bmFtZXNwYWNlcywgaW5saW5lRW50aXR5UmVzb2x2ZXIuZ2V0SW5saW5lU2NoZW1hTlNzKCkpOyAKLQotCQotICAgIHNjaGVtYXYudmFsaWRhdGVJbmxpbmVTY2hlbWEoeHNkLCB0YXJnZXROYW1lc3BhY2UsIGJhc2VMb2NhdGlvbiwgZW50aXR5UmVzb2x2ZXJDaGFpbiwgaW5saW5lRW50aXR5UmVzb2x2ZXIsIHZhbEluZm8uZ2V0U2NoZW1hQ2FjaGUoKSk7Ci0gICAgCi0vLwljaGVjayBpZiB0aGUgU09BUCBFbmNvZGluZyBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgYnV0IG5vdCBpbXBvcnRlZAotCQkgaWYgKElubGluZVNjaGVtYUdlbmVyYXRvci5zb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKGVsZW0uZ2V0RWxlbWVudCgpLCBiYXNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMpKQotCQkgewotCQkgICB2YWxJbmZvLmFkZFdhcm5pbmcobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9TQ0hFTUEpLCBlbGVtZW50KTsKLQkJIH0KLQotICAgIC8vIElmIHRoZSBzY2hlbWEgaXNuJ3QgdmFsaWQgYWRkIHRoZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCB0byB2YWxpbmZvLgotICAgIC8vIERvbid0IGFkZCB0aGUgZXJyb3JzIGlmIHRoZXkgYXJlIGxvY2F0ZWQgb24gYW5vdGhlciBpbmxpbmUgc2NoZW1hLiBUaGVzZQotCS8vIHdpbGwgYmUgcmVwb3J0ZWQgd2hlbiB0aGUgb3RoZXIgc2NoZW1hIGlzIHZhbGlkYXRlZC4KLQkJIAotICAgIGlmICghc2NoZW1hdi5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgSXRlcmF0b3IgZXJyb3JzID0gc2NoZW1hdi5nZXRFcnJvcnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGVycm9ycy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEVycm9yTWVzc2FnZSBlcnIgPSAoRXJyb3JNZXNzYWdlKSBlcnJvcnMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdXJpID0gZXJyLmdldFVSSSgpOwotICAgICAgICBpbnQgbGluZSA9IGVyci5nZXRFcnJvckxpbmUoKTsKLSAgICAgICAgU3RyaW5nIGVycm1lc3MgPSBlcnIuZ2V0RXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgIGVycm1lc3MgPSByZXBsYWNlTmFtZXNwYWNlKGVycm1lc3MsIG5hbWVzcGFjZSk7Ci0gICAgICAgIGludCBzZXZlcml0eSA9IGVyci5nZXRTZXZlcml0eSgpOwotICAgICAgICBpZihsaW5lID4gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmKHVyaSA9PSBudWxsIHx8IHVyaS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvYmplY3RBdExpbmUgPSBnZXRPYmplY3RBdExpbmUobGluZSAtIDEsIGVsZW1lbnRzKTsKLSAgICAgICAgICAgIGlmIChzZXZlcml0eSA9PSBET01FcnJvci5TRVZFUklUWV9XQVJOSU5HKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcoZXJybWVzcywgb2JqZWN0QXRMaW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCBvYmplY3RBdExpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQkJICBlbHNlIGlmKCFpbmxpbmVFbnRpdHlSZXNvbHZlci5pc0lubGluZVNjaGVtYSh1cmkpICYmICF1cmkuZXF1YWxzKHZhbEluZm8uZ2V0RmlsZVVSSSgpICsgSW5saW5lWFNEUmVzb2x2ZXIuSU5MSU5FX1NDSEVNQV9JRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW50IGVycm9yQ29sdW1uID0gZXJyLmdldEVycm9yQ29sdW1uKCk7Ci0gICAgICAgICAgICBpZiAoc2V2ZXJpdHkgPT0gRE9NRXJyb3IuU0VWRVJJVFlfV0FSTklORykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRXYXJuaW5nKGVycm1lc3MsIGxpbmUsIGVycm9yQ29sdW1uLCB1cmkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKGVycm1lc3MsIGxpbmUsIGVycm9yQ29sdW1uLCB1cmkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCQllbHNlIGlmKHVyaSAhPSBudWxsICYmICFpbmxpbmVFbnRpdHlSZXNvbHZlci5pc0lubGluZVNjaGVtYSh1cmkpICYmICF1cmkuZXF1YWxzKHZhbEluZm8uZ2V0RmlsZVVSSSgpICsgSW5saW5lWFNEUmVzb2x2ZXIuSU5MSU5FX1NDSEVNQV9JRCkpCi0gICAgICAgIHsKLQkJICBpZiAoc2V2ZXJpdHkgPT0gRE9NRXJyb3IuU0VWRVJJVFlfV0FSTklORykKLQkJICB7Ci0JICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcoZXJybWVzcywgMCwwLCB1cmkpOwotCQkgIH0KLQkJICBlbHNlCi0JCSAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCAwLDAsIHVyaSk7Ci0JCSAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIElmIHRoZSBwYXJzZXIgd2FzIGFibGUgdG8gY3JlYXRlIGEgc2NoZW1hIG1vZGVsIGFzc2lnbiBpdCBmb3IgdXNlLiAKLSAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGludmFsaWQgd2Ugc3RpbGwgd2FudCB0byBtYWtlIHVzZSBvZiB0aGUgbW9kZWwKLSAgICAvLyB3aGVyZSBwb3NzaWJsZSB0byBhdm9pZCBjYXNjYWRpbmcgZXJyb3IgbWVzc2FnZXMgdG8gbWVzc2FnZSBwYXJ0cy4KLSAgICBYU01vZGVsIHhzTW9kZWwgPSBzY2hlbWF2LmdldFhTTW9kZWwoKTsKLSAgICBpZih4c01vZGVsICE9IG51bGwpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRTY2hlbWEoeHNNb2RlbCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbiBlbnRpdHkgcmVzb2x2ZXIgdGhhdCB3aWxsIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuICBFdmVyeSBpbmxpbmUgc2NoZW1hIGlzIHByZXJlZ2lzdGVyZWQgd2l0aAotICAgKiB0aGUgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIHR5cGVzIFRoZSB0eXBlcyBlbGVtZW50LgotICAgKiBAcGFyYW0gcmVmZXJlbmNlTG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldE5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEFuIGVudGl0eSByZXNvbHZlciB0aGF0IGNhbiByZXNvbHZlIGlubGluZSBzY2hlbWFzLgotICAgKi8KLSAgcHJvdGVjdGVkIElubGluZVhTRFJlc29sdmVyIGdldEVudGl0eVJlc29sdmVyKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIFR5cGVzIHR5cGVzLCBTdHJpbmcgcmVmZXJlbmNlTG9jYXRpb24sIFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICBJbmxpbmVYU0RSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IG5ldyBJbmxpbmVYU0RSZXNvbHZlcigpOwotLy8gICAgZW50aXR5UmVzb2x2ZXIuc2V0UmVmZXJlbmNlTG9jYXRpb24ocmVmZXJlbmNlTG9jYXRpb24pOwotICAgIExpc3Qgc2NoZW1hcyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChzY2hlbWFzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaVNjaGVtYXMgPSBzY2hlbWFzLml0ZXJhdG9yKCk7Ci0JICBTZXQgbmFtZXNwYWNlcyA9IG5ldyBUcmVlU2V0KCk7IAotICAgICAgd2hpbGUgKGlTY2hlbWFzLmhhc05leHQoKSkgCi0gICAgICB7IAotICAgICAgICBTY2hlbWEgZXh0RWxlbSA9IChTY2hlbWEpIGlTY2hlbWFzLm5leHQoKTsgCi0gICAgICAgIFN0cmluZyB0aGlzTmFtZXNwYWNlID0gZXh0RWxlbS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOyAKLSAgICAgICAgaWYodGhpc05hbWVzcGFjZSAhPSBudWxsKSAKLSAgICAgICAgeyAKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFkZCh0aGlzTmFtZXNwYWNlKTsgCi0gICAgICAgIH0gCi0gICAgICB9IAotICAgICAgaVNjaGVtYXMgPSBzY2hlbWFzLml0ZXJhdG9yKCk7IAotCi0gICAgICB3aGlsZSAoaVNjaGVtYXMuaGFzTmV4dCgpKQotICAgICAgewotICAgIAkgIFNjaGVtYSBleHRFbGVtID0gKFNjaGVtYSkgaVNjaGVtYXMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCAmJiAhdGhpc05hbWVzcGFjZS5lcXVhbHNJZ25vcmVDYXNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgCQotICAgICAgICAJRWxlbWVudCBlbGVtZW50ID0gZXh0RWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkKLS8vCQkJY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCQkJIC8vRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkgSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLQkJCSBTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBuZXcgQXJyYXlMaXN0KCksIHJlZmVyZW5jZUxvY2F0aW9uLCBwYXJlbnRuYW1lc3BhY2VzLCBuYW1lc3BhY2VzKTsKLSAgICAgICAgCS8vYWRkTmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sZWxlbWVudCk7Ci0gICAgICAgICAgZW50aXR5UmVzb2x2ZXIuYWRkKHRoaXNOYW1lc3BhY2UsIHhzZCk7Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW50aXR5UmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnZhbGlkYXRvci5JV1NETDExVmFsaWRhdG9yI3NldFJlc291cmNlQnVuZGxlKGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKQotICB7Ci0gIAltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2dlbikKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNzZ2VuOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcyBpbiB0aGUgZm9ybSAKLSAgICogeG1sbnM9InNvbWVuYW1lc3BhY2UiCi0gICAqIGZyb20gdGhlIGRlZmluaXRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNjaGVtYSBlbGVtZW50IHNvIHRoZSBzY2hlbWEgCi0gICAqIHZhbGlkYXRvciB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCB0aGUgbmFtZXNwYWNlIGVsZW1lbnRzIGZyb20gdGhlIGVsZW1lbnRzIHByb3ZpZGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgCUhhc2h0YWJsZSBuc3MgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSXRlcmF0b3IgbmFtZVNwYWNlcyA9IHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgU3RyaW5nIFhNTE5TID0gQ29uc3RhbnRzLkFUVFJfWE1MTlM7Ci0gICAgCi0gICAgd2hpbGUgKG5hbWVTcGFjZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc3ByZWZpeCA9IFhNTE5TOwotICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbmFtZVNwYWNlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW5zLmVxdWFsc0lnbm9yZUNhc2UoIiIpKQotICAgICAgewotICAgICAgICBuc3ByZWZpeCArPSAiOiI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5zcHJlZml4ICsgbnMpKQotICAgICAgewotICAgICAgCW5zcy5wdXQobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0vLyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgLy8gTmV4dCBoYW5kbGUgdGhlIHBhcmVudCB0eXBlcyBlbGVtZW50Ci0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHNsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0c2xlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgdGVtcG5vZGUgPSBhdHRzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbm9kZW5hbWUgPSB0ZW1wbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgLy8gaWYgdGhpcyBpcyBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUKLSAgICAgIGlmIChub2RlbmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLQkJbnNzLnB1dChub2RlbmFtZSwgIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgLy9lbGVtZW50LnNldEF0dHJpYnV0ZShub2RlbmFtZSwgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNzOwotICB9Ci0gIAotICAvKioKLSAgICogR2l2ZW4gYSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYSByZXR1cm5zIHRoZSBlbGVtZW50IGZvdW5kIG9uIHRoYXQgbGluZS4gCi0gICAqIFVzZWZ1bCBmb3Igb2J0YWluaW5nIGVsZW1lbnRzIGZyb20gc2NoZW1hIFN0cmluZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBUaGUgbGlzdCBvZiBlbGVtZW50cyB0byBjaGVjay4KLSAgICogQHJldHVybiBUaGUgb2JqZWN0IGxvY2F0ZWQgYXQgdGhlIGxpbmUgb3IgYXQgbGluZSAwIGlmIHRoZSBsaW5lIGlzIGludmFsaWQuCi0gICAqLwotICAgcHJvdGVjdGVkIE9iamVjdCBnZXRPYmplY3RBdExpbmUoaW50IGxpbmUsIExpc3QgZWxlbWVudHMpCi0gICB7Ci0gICAJaWYobGluZSA8IDAgfHwgbGluZSA+PSBlbGVtZW50cy5zaXplKCkpCi0gICAJewotICAgCSAgbGluZSA9IDA7Ci0gICAJfQotCXJldHVybiBlbGVtZW50cy5nZXQobGluZSk7Ci0gICB9Ci0gICAKLSAgLyoqCi0gICAqIFJlcGxhY2UgYW55IGluc3RhbmNlIG9mIHRoZSAyMDAxIHNjaGVtYSBuYW1lc3BhY2UgaW4gdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aAotICAgKiB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gcmVwbGFjZSB0aGUgbmFtZXNwYWNlIGluLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgcmVwbGFjZW1lbnQuCi0gICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugd2l0aCB0aGUgMjAwMSBzY2hlbWEgbmFtZXNwYWNlIHJlcGxhY2VkIGJ5IHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyByZXBsYWNlTmFtZXNwYWNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgbmFtZXNwYWNlKQotICAgewotICAgICBTdHJpbmcgeHNkMjAwMSA9IFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDE7Ci0gICAgIGludCBzdGFydCA9IG1lc3NhZ2UuaW5kZXhPZih4c2QyMDAxKTsKLSAgICAgaW50IGVuZCA9IHN0YXJ0ICsgeHNkMjAwMS5sZW5ndGgoKTsKLSAgICAgaWYoc3RhcnQgPCAwKQotICAgICB7Ci0gICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgIH0KLSAgICAgU3RyaW5nIHN0YXJ0U3RyaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcoMCxzdGFydCk7Ci0gICAgIFN0cmluZyBlbmRTdHJpbmcgPSBtZXNzYWdlLnN1YnN0cmluZyhlbmQsbWVzc2FnZS5sZW5ndGgoKSk7Ci0gICAgIHJldHVybiBzdGFydFN0cmluZyArIG5hbWVzcGFjZSArIGVuZFN0cmluZzsKLSAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q1MzY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBYTUxFbnRpdHlSZXNvbHZlciB0aGF0IGFsbG93cyBpbmxpbmUgc2NoZW1hcyB0byByZXNvbHZlIGVhY2ggb3RoZXIgdGhyb3VnaCBpbXBvcnRzLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lWFNEUmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkxJTkVfU0NIRU1BX0lEID0gIiNpbmxpbmVzY2hlbWEiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZJTEVfUFJFRklYID0gImZpbGU6IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBYTUxOUyA9ICJ4bWxucyI7Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgZW50aXRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0vLyAgcHJvdGVjdGVkIFN0cmluZyByZWZMb2NhdGlvbiA9IG51bGw7Ci0gIHByb3RlY3RlZCBYTUxFbnRpdHlSZXNvbHZlciBleHRlcm5hbFJlc29sdmVyID0gbnVsbDsKLSAgcHJvdGVjdGVkIFhNTElucHV0U291cmNlIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqLwotICBwdWJsaWMgSW5saW5lWFNEUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKQotCQkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7CSAKLQlTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsJCi0JU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JU3RyaW5nIHNjaGVtYSA9IG51bGw7Ci0JaWYgKHN5c3RlbUlkID09IG51bGwpCi0JewotCSAgaWYocHVibGljSWQgPT0gbnVsbCkKLQkgIHsKLQkgIAlpZihuYW1lc3BhY2UgPT0gbnVsbCkKLQkgIAl7CQotCSAgICAgIHJldHVybiBudWxsOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotCSAgCQlzeXN0ZW1JZCA9IG5hbWVzcGFjZTsKLQkgIAl9Ci0JICB9Ci0JICBlbHNlCi0JICB7CQotCSAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotCSAgfQotCX0KLQkgIAotCWlmKHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSAhPSBudWxsICYmIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZS5lcXVhbHMoc3lzdGVtSWQpKQotCXsKLQkJaWYocmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UhPW51bGwpCi0JCXsKLQkJCXJldHVybiByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZTsKLQkJfQotCX0KLQllbHNlIGlmICgoc2NoZW1hID0gKFN0cmluZykgZW50aXRpZXMuZ2V0KHN5c3RlbUlkKSkgIT0gbnVsbCAmJiAhc2NoZW1hLmVxdWFscygiIikpCi0JewotCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UuZ2V0U3lzdGVtSWQoKSArIElOTElORV9TQ0hFTUFfSUQsIG51bGwsIG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKSxudWxsKTsKLQl9Ci0JCi0gICAgLy9pZihpcyA9PSBudWxsKQotICAgIC8vewotICAgIC8vCXRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgIC8vfQotCXJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgLSB0aGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hCi0gICAqIEBwYXJhbSBzY2hlbWEgLSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYSkKLSAgewotICAgIGVudGl0aWVzLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZmVycmluZyBpbmxpbmUgc2NoZW1hLiAKLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFJlZmVycmluZ1NjaGVtYShYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7Ci0gICAgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBjb3JyZXNwb25kcyB0byBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBuYW1lc3BhY2UgY29ycmVzcG9uZHMgdG8gYW4gaW5saW5lIHNjaGVtYSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNJbmxpbmVTY2hlbWEoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiBlbnRpdGllcy5jb250YWluc0tleShuYW1lc3BhY2UpOwotICB9Ci0gIAotICAvKiogCi0gICAqIEdldCB0aGUgc2V0IG9mIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZXMuIAotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V0IG9mIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZXMuIAotICAgKi8gCi0gIHB1YmxpYyBTZXQgZ2V0SW5saW5lU2NoZW1hTlNzKCkgCi0gIHsgCi0gICAgICAgIHJldHVybiBlbnRpdGllcy5rZXlTZXQoKTsgCi0gIH0gCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9TY2hlbWFBdHRyaWJ1dGVUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODgxMTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwueHMuU2NoZW1hU3ltYm9sczsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlN5bWJvbFRhYmxlOwotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgYWxsb3cgdGhlIGNhbGxpbmcgY29kZSB0byBzZWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIHNjaGVtYS4KLSAqIFRoaXMgc2VydmVzIGFzIHNjaGVtYSBmb3Igc2NoZW1hLgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hQXR0cmlidXRlVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZQotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSgpCi0gIHsKLSAgICAvLyBhZGQgYWxsIG9mIHRoZSBzeWJvbHMgdG8gdGhlIHRhYmxlLiBTY2hlbWFTeW1ib2xzIHByb2JhYmx5IHNob3VsZCBoYXZlCi0gICAgLy8gYSBTeW1ib2xUYWJsZSBmb3IgdGhlc2UgYnV0IGl0IGRvZXNuJ3QKLQotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VOREFOWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5ETE9DQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORE9USEVSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRUQVJHRVROUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BPVU5EQUxMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkFMU0VfMCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RSVUVfMSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVNJTVBMRVRZUEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllUWVBFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZVVJJKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQkFTRTY0QklOQVJZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQk9PTEVBTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JZVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9DT0xMQVBTRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVRFVElNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RFQ0lNQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ET1VCTEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EVVJBVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VOVElUWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VOVElUSUVTKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRVhURU5TSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkFMU0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GTE9BVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0hFWEJJTkFSWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSURSRUYpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRFJFRlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JTlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTEFOR1VBR0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MQVgpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MSVNUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTE9ORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ORUdBVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9NT05USCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX01PTlRIREFZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkNOQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk1UT0tFTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05NVE9LRU5TKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9OTkVHQVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9OUE9TSVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9STUFMSVpFRFNUUklORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PVEFUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfT1BUSU9OQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QT1NJVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QUkVTRVJWRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BST0hJQklURUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9RTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1FVQUxJRklFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFUExBQ0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVFVSVJFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFU1RSSUNUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU0hPUlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TS0lQKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1RSSUNUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1RSSU5HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1VCU1RJVFVUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVElNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RPS0VOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFJVRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOQk9VTkRFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5RVUFMSUZJRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FREJZVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRElOVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVETE9ORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVEU0hPUlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ZRUFSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfWUVBUk1PTlRIKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MmRjNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5FcnJvck1lc3NhZ2U7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgWE1MRXJyb3JIYW5kbGVyIHRoYXQgY2FwdHVyZXMgZXJyb3IgZnJvbSBYZXJjZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUVycm9ySGFuZGxlciBpbXBsZW1lbnRzIFhNTEVycm9ySGFuZGxlcgotewotICBBcnJheUxpc3QgZXJyb3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIAotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZXMgY3JlYXRlZCBieSBYZXJjZXMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlcnJvcnMgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9yTWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgZXhjZXB0aW9uIGFuZCBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkgVGhlIFhlcmNlcyBlcnJvciBrZXkuCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkuCi0gICAqIEByZXR1cm4gQW4gZXJyb3IgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCBFcnJvck1lc3NhZ2UgY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXJyb3IsIGludCBzZXZlcml0eSkKLSAgewotICAgIFN0cmluZyB1cmkgPSBlcnJvci5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLSAgICBpZih1cmkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmkgPSBlcnJvci5nZXRQdWJsaWNJZCgpOwotICAgIH0KLSAgICBFcnJvck1lc3NhZ2UgZXJyb3JNZXNzYWdlID0gbmV3IEVycm9yTWVzc2FnZSgpOwotICAgIGVycm9yTWVzc2FnZS5zZXRFcnJvckxpbmUoZXJyb3IuZ2V0TGluZU51bWJlcigpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldEVycm9yQ29sdW1uKGVycm9yLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0VVJJKHVyaSk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldFNldmVyaXR5KHNldmVyaXR5KTsKLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVycm9yKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZChjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihrZXksIGV4Y2VwdGlvbiwgRE9NRXJyb3IuU0VWRVJJVFlfRVJST1IpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI2ZhdGFsRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKGtleSwgZXhjZXB0aW9uLCBET01FcnJvci5TRVZFUklUWV9GQVRBTF9FUlJPUikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjd2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgd2FybmluZyhTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oa2V5LCBleGNlcHRpb24sIERPTUVycm9yLlNFVkVSSVRZX1dBUk5JTkcpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWViODU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBIYW5kbGUgYSBjaGFpbiBvZiBlbnRpdHkgcmVzb2x2ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbiBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByaXZhdGUgTGlzdCBlbnRpdHlSZXNvbHZlcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciB4bWxSZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgCi0gICAgLy8gVE9ETzogVGhpcyBmaXggc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGlzIHByb2JsZW0gaXMgZml4ZWQgaW4gWGVyY2VzLgotICAgIC8vIFhlcmNlcyBjdXJyZW50bHkgKHZlcnNpb24gMi43KSBoYXMgYSBwcm9ibGVtIHdoZW4gdGhlIGhvbm91ciBhbGwgc2NoZW1hIGxvY2F0aW9ucwotICAgIC8vIHByb3BlcnR5IGlzIHNldCBhbmQgdGhlIHNhbWUgc2NoZW1hIGlzIGltcG9ydGVkIGJ5IHR3byBkaWZmZXJlbnQgZmlsZXMgYW5kIG9uZQotICAgIC8vIG9mIHRoZSBpbXBvcnRzIHVzZXMgXCBhbmQgYW5vdGhlciB1c2VzIC8gaW4gcGFydCBvZiB0aGUgbG9jYXRpb24uCi0gICAgaWYoeG1sUmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpICE9IG51bGwpCi0gICAgCXhtbFJlc291cmNlSWRlbnRpZmllci5zZXRMaXRlcmFsU3lzdGVtSWQoeG1sUmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpLnJlcGxhY2UoJ1xcJywnLycpKTsKLSAgICAKLSAgICBJdGVyYXRvciBlbnRpdHlSZXNvbHZlckl0ZXIgPSBlbnRpdHlSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50aXR5UmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IChYTUxFbnRpdHlSZXNvbHZlcillbnRpdHlSZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlzID0gZW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eSh4bWxSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFhOSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRocm93IGFuZCBJT0V4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpc24ndCBmb3VuZAotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlIik7Ci0gICAgfQotICAgIHJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHJlc29sdmVyIHRvIHRoaXMgY2hhaW4uCi0gICAqIAotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZCB0byB0aGUgY2hhaW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRpdHlSZXNvbHZlcihYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGVudGl0eVJlc29sdmVycy5hZGQoZW50aXR5UmVzb2x2ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9YU0RWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjcwYTNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC54cy5YU0REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlhNTEdyYW1tYXJQcmVwYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLkdyYW1tYXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhTR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuU3RyaW5nTGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotCi0KLS8qKgotICogVmFsaWRhdGUgc2NoZW1hcyBmcm9tIGZpbGVzIG9yIFN0cmluZy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OU19GRUFUVVJFX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ob25vdXItYWxsLXNjaGVtYUxvY2F0aW9ucyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBUQVJHRVROQU1FU1BBQ0UgPSAidGFyZ2V0TmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFMT0NBVElPTiA9ICJzY2hlbWFMb2NhdGlvbiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIiB9OwotCi0gIHByb3RlY3RlZCBYU01vZGVsIHhzTW9kZWw7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRYU0Q7Ci0gIHByb3RlY3RlZCBMaXN0IGVycm9yczsKLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcigpCi0gIHsKLSAgICB4c01vZGVsID0gbnVsbDsKLSAgICBpc1ZhbGlkWFNEID0gZmFsc2U7Ci0gICAgZXJyb3JzID0gbnVsbDsKLSAgfQotICAvKioKLSAgICogVmFsaWRhdGUgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgQSBzY2hlbWEgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2MgVGhlIHVyaSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYShTdHJpbmcgc2NoZW1hLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBTdHJpbmcgZmlsZWxvYykKLSAgewotICAgIHZhbGlkYXRlSW5saW5lU2NoZW1hKHNjaGVtYSwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbG9jLCBudWxsLCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFuIGlubGluZSBzY2hlbWEgYW5kIHNwZWNpZnkgYW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGlzIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlckNoYWluIFRoZSBlbnRpdHkgcmVzb2x2ZXIgY2hhaW4uCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIHJlc29sdmVyIGZvciB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYSgKLSAgICBTdHJpbmcgc2NoZW1hLAotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsCi0gICAgU3RyaW5nIGZpbGVsb2MsCi0gICAgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXJDaGFpbiwKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciwKLSAgICBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCkKLSAgewotICAgIGZpbGVsb2NhdGlvbiA9IGZpbGVsb2M7Ci0gICAgCi0gICAgdmFsaWRhdGVYU0Qoc2NoZW1hLCB0cnVlLCBlbnRpdHlSZXNvbHZlckNoYWluLHRhcmdldE5hbWVzcGFjZSwgaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIsIGdyYW1tYXJQb29sKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZSBsb2NhdGVkIGF0IHRoZSB1cmkgc3BlY2lmaWVkIHdpdGggdGhlIGdpdmVuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgQW4gYWJzb2x1dGUgdXJpIGZvciB0aGUgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIGJlIHVzZWQuCi0gICAqIEBwYXJhbSBncmFtbWFyUG9vbCBBIFhlcmNlcyBYTUxHcmFtbWFyUG9vbCB0aGF0IGhvbGRzIHByZWNhY2hlZCBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0gICAgdmFsaWRhdGVYU0QodXJpLCBmYWxzZSwgZW50aXR5UmVzb2x2ZXIsIG51bGwsIG51bGwsIGdyYW1tYXJQb29sKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBzY2hlbWEuCi0gICAqIAotICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBzY2hlbWEgb3IgaXQncyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGlubGluZVhTRCBUcnVlIGlmIGFuIGlubGluZSBzY2hlbWEsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogQHBhcmFtIGVudGl0eVJlc29sdmVyIEFuIGVudGl0eSByZXNvbHZlciB0byB1c2UuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIGVudGl0eSByZXNvbHZlci4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVhTRChTdHJpbmcgc2NoZW1hLCBib29sZWFuIGlubGluZVhTRCwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyLCBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCkKLSAgewotCVZhbGlkYXRlRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBWYWxpZGF0ZUVycm9ySGFuZGxlcigpOwotCS8vZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKS5jbGVhcigpOwotCXRyeQotCXsKLQkgIFhNTEdyYW1tYXJQcmVwYXJzZXIgZ3JhbW1hclByZXBhcnNlciA9IG5ldyBYTUxHcmFtbWFyUHJlcGFyc2VyKCk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnJlZ2lzdGVyUHJlcGFyc2VyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLG51bGwvKnNjaGVtYUxvYWRlciovKTsKLQkJCi0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9GRUFUVVJFLCBmYWxzZSk7Ci0gICAgICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5OQU1FU1BBQ0VTX0ZFQVRVUkUsIHRydWUpOwotICAgICAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuTkFNRVNQQUNFX1BSRUZJWEVTX0ZFQVRVUkUsIHRydWUpOwotCSAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLlNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUsIHRydWUpOwotICAgICAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuU0NIRU1BX0ZVTExfQ0hFQ0tJTkcsIGZhbHNlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLkVYVEVSTkFMX0dFTkVSQUxfRU5USVRJRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRJRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5XQVJOX09OX0RVUExJQ0FURV9BVFRERUZfRkVBVFVSRSwgdHJ1ZSk7Ci0JICAgICAgCi0JICB0cnkKLQkgIHsKLQkJZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OU19GRUFUVVJFX0lELCB0cnVlKTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgIHsKLQkgICAgLy8gQ2F0Y2ggdGhlIGV4Y2VwdGlvbiBhbmQgaWdub3JlIGlmIHdlIGNhbid0IHNldCB0aGlzIGZlYXR1cmUuCi0JICB9Ci0KLQkgIC8vIGNzIDogdG9nZ2xlIHRoZSBjb21tZW50cyBvbiB0aGVzZSAyIGxpbmVzIHRvIGVhc2lseSBkaXNhYmxlIGNhY2hpbmcKLSAgICAgIC8vIGdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2wobmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpKTsgCQkKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wgIT0gbnVsbCA/IGdyYW1tYXJQb29sIDogbmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpKTsgCi0JICBncmFtbWFyUHJlcGFyc2VyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotCSAgaWYgKGVudGl0eVJlc29sdmVyICE9IG51bGwpCi0JICB7Ci0JICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIoZW50aXR5UmVzb2x2ZXIpOwotCSAgfQotCi0JICB0cnkKLQkgIHsKLQkgICAgWE1MSW5wdXRTb3VyY2UgaXMgPSBudWxsOwotCSAgICBMaXN0IG9sZEdyYW1tYXJzID0gbnVsbDsKLQkgICAgWE1MR3JhbW1hclBvb2xJbXBsIHBvb2wgPSBudWxsOwotCSAgICAvLyBUaGlzIGFsbG93cyBzdXBwb3J0IGZvciB0aGUgaW5saW5lIHNjaGVtYSBpbiBXU0RMIGRvY3VtZW50cy4KLQkgICAgaWYgKGlubGluZVhTRCkKLQkgICAgeyAgICAgICAKLQkgICAgICBSZWFkZXIgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzY2hlbWEpOwotCQkgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsZmlsZWxvY2F0aW9uLGZpbGVsb2NhdGlvbixyZWFkZXIsbnVsbCk7Ci0JCQkJCi0JCSAgKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuYWRkUmVmZXJyaW5nU2NoZW1hKGlzLHRhcmdldE5hbWVzcGFjZSk7Ci0JCSAgLy8gSW4gdGhlIGNhc2UgdGhhdCAnc2hhcmVkJyBncmFtbWFyIHBvb2wgaXMgdXNlZCB3ZSBuZWVkIHRvIGNvbnNpZGVyCi0JCSAgLy8gdGhhdCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgYWRkZWQgYSBzY2hlbWEgdG8gdGhlIHBvb2wgd2l0aCB0aGUgc2FtZSB0YXJnZXQgbmFtZXNwYWNlCi0JCSAgLy8gYXMgdGhlIGlubGluZSBzY2hlbWEgd2UncmUgaG9waW5nIHRvIGNvbnN0cnVjdC4gIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHJlbW92ZQotCQkgIC8vIHRoZSBzY2hlbWEgZnJvbSB0aGUgcG9vbCBiZWZvcmUgY29uc3RydWN0aW5nIG91ciBpbmxpbmUgc2NoZW1hLiAgV2UgY2FuIGFkZCBpdCAKLQkJICAvLyBiYWNrIHdoZW4gd2UncmUgYWxsIGRvbmUuCi0JCSAgcG9vbCA9IChYTUxHcmFtbWFyUG9vbEltcGwpZ3JhbW1hclByZXBhcnNlci5nZXRHcmFtbWFyUG9vbCgpOyAgICAgICAgCSAgICAgIAotCQkgIG9sZEdyYW1tYXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkgIC8vIFJlbW92ZSB0aGUgaW5saW5lIHNjaGVtYSBuYW1lc3BhY2UgaWYgaXQgaXMgbGlzdGVkIGRpcmVjdGx5Ci0JCSAgLy8gaW4gdGhlIHBvb2wuIElmIGl0IGlzIGluZGlyZWN0bHkgbGlzdGVkIGFzIGFuIGltcG9ydCBvZiBhIGdyYW1tYXIgbGlzdGVkCi0JCSAgLy8gZGlyZWN0bHkgaW4gdGhlIHBvb2wgaGlkZSB0aGUgZ3JhbW1hciB0byBjb250aW51ZSB0byBnZXQgY2FjaGluZyBiZW5lZml0cwotCQkgIC8vIGZyb20gdGhlIGNhY2hlZCBncmFtbWFyLgotCQkgIEdyYW1tYXJbXSBncmFtbWFycyA9IHBvb2wucmV0cmlldmVJbml0aWFsR3JhbW1hclNldChYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSk7Ci0JCSAgaW50IG51bUdyYW1tYXJzID0gZ3JhbW1hcnMubGVuZ3RoOwotCQkgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1HcmFtbWFyczsgaSsrKQotCQkgIHsKLQkJICAgIFhNTEdyYW1tYXJEZXNjcmlwdGlvbiBkZXNjID0gZ3JhbW1hcnNbaV0uZ2V0R3JhbW1hckRlc2NyaXB0aW9uKCk7Ci0JCSAgICBpZih0YXJnZXROYW1lc3BhY2UuZXF1YWxzKGRlc2MuZ2V0TmFtZXNwYWNlKCkpKQotCQkgICAgewotCQkgICAgICBvbGRHcmFtbWFycy5hZGQocG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpKTsKLQkJICAgIH0KLQkJICAgIGVsc2UKLQkJICAgIHsKLQkJICAgICAgaWYoZ3JhbW1hcnNbaV0gaW5zdGFuY2VvZiBYU0dyYW1tYXIpCi0JCSAgICAgIHsKLQkJICAgIAlYU0dyYW1tYXIgZ3JhbW1hciA9IChYU0dyYW1tYXIpZ3JhbW1hcnNbaV07Ci0JCSAgICAJICAJICAKLQkJICAgIAlTdHJpbmdMaXN0IG5hbWVzcGFjZXMgPSBncmFtbWFyLnRvWFNNb2RlbCgpLmdldE5hbWVzcGFjZXMoKTsKLQkJICAgIAlpZihuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0JCSAgICAJewotCQkgICAgCSAgb2xkR3JhbW1hcnMuYWRkKHBvb2wucmVtb3ZlR3JhbW1hcihkZXNjKSk7Ci0JCSAgICAJICAJICAgIC8vcG9vbC5wdXRHcmFtbWFyKG5ldyBYU0dyYW1tYXJIaWRlcihncmFtbWFyLCB0YXJnZXROYW1lc3BhY2UpKTsKLQkJICAgIAl9Ci0JCSAgICAgIH0KLQkJICAgIH0KLQkJICB9Ci0JCSAgICAJCi0JCSAgU2V0IGlubGluZU5TcyA9ICgoSW5saW5lWFNEUmVzb2x2ZXIpaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIpLmdldElubGluZVNjaGVtYU5TcygpOwotCQkgIEl0ZXJhdG9yIG5zaXRlciA9IGlubGluZU5Tcy5pdGVyYXRvcigpOwotCQkgIHdoaWxlKG5zaXRlci5oYXNOZXh0KCkpCi0JCSAgewotCQkgICAgWFNERGVzY3JpcHRpb24gZGVzYyA9IG5ldyBYU0REZXNjcmlwdGlvbigpOwotCQkgICAgZGVzYy5zZXROYW1lc3BhY2UoKFN0cmluZyluc2l0ZXIubmV4dCgpKTsgICAgICAKLQkJICAgIEdyYW1tYXIgb2xkR3JhbW1hciA9IHBvb2wucmVtb3ZlR3JhbW1hcihkZXNjKTsKLQkJICAgIGlmKG9sZEdyYW1tYXIgIT0gbnVsbCkKLQkJICAgICAgb2xkR3JhbW1hcnMuYWRkKG9sZEdyYW1tYXIpOwotCQkgIH0KLQotCSAgICB9Ci0JICAgIC8vIGdldCB0aGUgaW5wdXQgc291cmNlIGZvciBhbiBleHRlcm5hbCBzY2hlbWEgZmlsZQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShudWxsLHNjaGVtYSxzY2hlbWEpOwotCSAgICB9Ci0KLQkgICAgWFNHcmFtbWFyIGdyYW1tYXIgPSAoWFNHcmFtbWFyKWdyYW1tYXJQcmVwYXJzZXIucHJlcGFyc2VHcmFtbWFyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLGlzKTsKLQkgICAgeHNNb2RlbCA9IGdyYW1tYXIudG9YU01vZGVsKCk7Ci0JCQkKLQkgICAgLy8gSGVyZSB3ZSBhZGQgdGhlIHRlbXBvcmlsaXkgcmVtb3ZlZCBzY2hlbWEgYmFjay4KLQkJaWYgKGlubGluZVhTRCAmJiBvbGRHcmFtbWFycyAhPSBudWxsKQotCQl7Ci0JCSAgWFNERGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBuZXcgWFNERGVzY3JpcHRpb24oKTsKLQkJICBkZXNjcmlwdGlvbi5zZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsgCi0JCSAgcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2NyaXB0aW9uKTsKLQkJCQkKLQkJICBTZXQgaW5saW5lTlNzID0gKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuZ2V0SW5saW5lU2NoZW1hTlNzKCk7Ci0JCSAgSXRlcmF0b3IgbnNpdGVyID0gaW5saW5lTlNzLml0ZXJhdG9yKCk7Ci0JCSAgd2hpbGUobnNpdGVyLmhhc05leHQoKSkKLQkJICB7Ci0JCQlYU0REZXNjcmlwdGlvbiBkZXNjID0gbmV3IFhTRERlc2NyaXB0aW9uKCk7Ci0JCSAgICBkZXNjLnNldE5hbWVzcGFjZSgoU3RyaW5nKW5zaXRlci5uZXh0KCkpOyAgIAotCQkgICAgcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpOwotCQkgIH0KLQkJICAKLQkJICBJdGVyYXRvciBvbGRHSXRlciA9IG9sZEdyYW1tYXJzLml0ZXJhdG9yKCk7Ci0JICAgICAgd2hpbGUob2xkR0l0ZXIuaGFzTmV4dCgpKQotCQkgIHsKLQkJCSBHcmFtbWFyIG9sZEdyYW1tYXIgPSAoR3JhbW1hcilvbGRHSXRlci5uZXh0KCk7Ci0JCQkgaWYob2xkR3JhbW1hciAhPSBudWxsKQotCQkJICAgcG9vbC5wdXRHcmFtbWFyKG9sZEdyYW1tYXIpOwotCQkgIH0KLQkJfSAgCi0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7Ci0JICAgICAgICAvLyBQYXJzZXIgd2lsbCByZXR1cm4gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiBpZiB0aGUgZG9jdW1lbnQgaXMgc3RydWN0dXJhbGx5IGludmFsaWQuCi0JICAgICAgCS8vIEluIHRoaXMgY2FzZSB3ZSBzaW1wbHkgaWdub3JlIHRoZSBlcnJvci4KLQkgICAgICAJLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JICB9Ci0JICBlcnJvcnMgPSBlcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpOwotCX0KLQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCSAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotCX0KLQlpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLQl7Ci0JICBpc1ZhbGlkWFNEID0gdHJ1ZTsKLQl9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKi8KLQotICBwdWJsaWMgWFNNb2RlbCBnZXRYU01vZGVsKCkKLSAgewotICAJcmV0dXJuIHhzTW9kZWw7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZFhTRDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGVycm9yIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBlcnJvciBmcm9tIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTk5ZWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBGYWN0b3J5IGZvciBnZW5lcmF0aW5nIG9iamVjdHMgbmVlZGVkIGZvciBYTUwgQ29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5Ci17Ci0gIHByb3RlY3RlZCBzdGF0aWMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkgaW5zdGFuY2U7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IERlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBmYWN0b3J5IHRvIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBmYWN0b3J5IC0gdGhlIGltcGxlbWVudGF0aW9uIHRoaXMgZmFjdG9yeSB3aWxsIHVzZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEltcGxlbWVudGF0aW9uKEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGZhY3RvcnkpCi0gIHsKLSAgICBpbnN0YW5jZSA9IGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gYW4gWE1MIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gWE1MIHZhbGlkYXRvcgotICAgKi8KLSAgYWJzdHJhY3QgcHVibGljIElYTUxWYWxpZGF0b3IgZ2V0WE1MVmFsaWRhdG9yKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgwZmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0KLS8qKgotICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5I2dldFhNTFZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgSVhNTFZhbGlkYXRvciBnZXRYTUxWYWxpZGF0b3IoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBEZWZhdWx0WE1MVmFsaWRhdG9yKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9EZWZhdWx0WE1MVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNmNWE4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbk1lc3NhZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWFDb25zdGFudHM7Ci0KLS8qKgotICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSVhNTFZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRYTUxWYWxpZGF0b3IgaW1wbGVtZW50cyBJWE1MVmFsaWRhdG9yCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgdXJpOwotICBwcm90ZWN0ZWQgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIC8vcHJvdGVjdGVkIFN0cmluZ0J1ZmZlciBzY2hlbWFMb2NhdGlvblN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgcHJvdGVjdGVkIExpc3QgaWdub3JlZE5hbWVzcGFjZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICBwcm90ZWN0ZWQgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBjdXJyZW50RXJyb3JLZXkgPSBudWxsOwotICBwcm90ZWN0ZWQgT2JqZWN0W10gY3VycmVudE1lc3NhZ2VBcmd1bWVudHMgPSBudWxsOwotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDaGlsZE9mRG9jID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IG51bGw7IAotICAKLSAgLyoqCi0gICAqIEEgc3RhY2sgb2Ygc3RhcnQgdGFnIGxvY2F0aW9ucywgdXNlZCB0byBtb3ZlIGVycm9ycwotICAgKiByZXBvcnRlZCBhdCB0aGUgY2xvc2UgdGFnIHRvIGJlIHJlcG9ydGVkIGF0IHRoZSBzdGFydCB0YWcuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RhY2sgc3RhcnRFbGVtZW50TG9jYXRpb25zID0gbmV3IFN0YWNrKCk7Ci0gIHByb3RlY3RlZCBTZXQgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldCA9IG5ldyBUcmVlU2V0KCk7Ci0KLS8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0WE1MVmFsaWRhdG9yKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgCi0gICAgaWdub3JlZE5hbWVzcGFjZUxpc3QuYWRkKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpOwotICAgIGlnbm9yZWROYW1lc3BhY2VMaXN0LmFkZChTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKTsKLSAgICBpZ25vcmVkTmFtZXNwYWNlTGlzdC5hZGQoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0gICAgCi0gICAgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldC5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiKTsKLSAgICBhZGp1c3RMb2NhdGlvbkVycm9yS2V5U2V0LmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjMiKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5JWE1MVmFsaWRhdG9yI3NldEZpbGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZpbGUoU3RyaW5nIHVyaSkKLSAgewotICAgIHRoaXMudXJpID0gdXJpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNzZXRVUklSZXNvbHZlcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VVJJUmVzb2x2ZXIoVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgCXRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBncmFtbWFyUG9vbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R3JhbW1hclBvb2woWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wpCi0gIHsKLQl0aGlzLmdyYW1tYXJQb29sID0gZ3JhbW1hclBvb2w7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNydW4oKQotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIC8vIFZhbGlkYXRlIHRoZSBYTUwgZmlsZS4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBSZWFkZXIgcmVhZGVyMSA9IG51bGw7IC8vIFVzZWQgZm9yIHZhbGlkYXRpb24gcGFyc2UuCi0gICAgICAKLSAgICAgIElucHV0U291cmNlIHZhbGlkYXRlSW5wdXRTb3VyY2U7IAotICAgICAKLSAgICAgIHZhbGlkYXRlSW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UodXJpKTsKLSAgICAgIGlmICh0aGlzLmlucHV0U3RyZWFtICE9IG51bGwpCi0gICAgICB7ICAgIAotICAgICAgICBTdHJpbmcgc3RyaW5nID0gY3JlYXRlU3RyaW5nRm9ySW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICByZWFkZXIxID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcpOwotICAgICAgICAgIAotICAgICAgICB2YWxpZGF0ZUlucHV0U291cmNlLnNldEJ5dGVTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICB2YWxpZGF0ZUlucHV0U291cmNlLnNldENoYXJhY3RlclN0cmVhbShyZWFkZXIxKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgWE1MUmVhZGVyIHJlYWRlciA9IGNyZWF0ZVhNTFJlYWRlcigpOwotICAgICAgcmVhZGVyLnBhcnNlKHZhbGlkYXRlSW5wdXRTb3VyY2UpOwotICAgIH0KLSAgICBjYXRjaCAoU0FYUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBObyBuZWVkIHRvIGFkZCBhbiBlcnJvciBoZXJlLiBTQVhQYXJzZUV4Y2VwdGlvbnMgYXJlIHJlcG9ydGVkIGJ5IHRoZSBlcnJvciByZXBvcnRlci4KLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gTm8gbmVlZCB0byBsb2cgdGhpcyBlcnJvci4gVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciB3aGVuIGNyZWF0aW5nIHRoZSBkb20gbW9kZWwuCi0gICAgICAvL0xvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlRoZSBXU0RMIHZhbGlkYXRvciB3YXMgdW5hYmxlIHRvIHJlYWQgZmlsZSAiICsgdXJpICsgIi4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcGVyZm9ybWluZyBXU0RMIFhNTCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZvciBmaWxlICIgKyB1cmkgKyAiLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0KLSAgICogQHJldHVybgotICAgKi8KLSAgZmluYWwgU3RyaW5nIGNyZWF0ZVN0cmluZ0ZvcklucHV0U3RyZWFtKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgLy8gSGVyZSB3ZSBhcmUgcmVhZGluZyB0aGUgZmlsZSBhbmQgc3RvcmluZyB0byBhIHN0cmluZ2J1ZmZlci4KLSAgICBTdHJpbmdCdWZmZXIgZmlsZVN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbnB1dFJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSk7Ci0gICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoaW5wdXRSZWFkZXIpOwotICAgICAgY2hhcltdIGNoYXJzID0gbmV3IGNoYXJbMTAyNF07Ci0gICAgICBpbnQgbnVtYmVyUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJzKTsKLSAgICAgIHdoaWxlIChudW1iZXJSZWFkICE9IC0xKQotICAgICAgewotICAgICAgICBmaWxlU3RyaW5nLmFwcGVuZChjaGFycywgMCwgbnVtYmVyUmVhZCk7Ci0gICAgICAgIG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgV1NETCB2YWxkaWF0b3Igd2FzIHVuYWJsZSB0byBjcmVhdGUgdG8gY3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIGlucHV0IHN0cmVhbS4gV1NETCBYTUwgdmFsaWRhdGlvbiBtYXkgbm90IGhhdmUgcnVuIGNvcnJlY3RseS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICAgIHJldHVybiBmaWxlU3RyaW5nLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNoYXNFcnJvcnMoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzKCkKLSAgewotICAgIHJldHVybiAhZXJyb3JzLmlzRW1wdHkoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5JWE1MVmFsaWRhdG9yI2dldEVycm9ycygpCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIEBwYXJhbSBsaW5lCi0gICAqIEBwYXJhbSBjb2x1bW4KLSAgICogQHBhcmFtIHVyaQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0JLy8gRm9yIHRoZSBmb2xsb3dpbmcgZXJyb3JzIHRoZSBsaW5lIG51bWJlciB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGF0IG9mIHRoZSBzdGFydAotICAJLy8gdGFnIGluc3RlYWQgb2YgdGhlIGVuZCB0YWcuCi0gIAlpZiAoY3VycmVudEVycm9yS2V5ICE9IG51bGwgJiYgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldC5jb250YWlucyhjdXJyZW50RXJyb3JLZXkpKSAgCi0gIAl7Ci0gIAkgIExvY2F0aW9uQ29vcmRpbmF0ZSBhZGp1c3RlZENvb3JkaW5hdGVzID0gKExvY2F0aW9uQ29vcmRpbmF0ZSlzdGFydEVsZW1lbnRMb2NhdGlvbnMucGVlaygpOwotICAJICBsaW5lID0gYWRqdXN0ZWRDb29yZGluYXRlcy5nZXRMaW5lTnVtYmVyKCk7Ci0gIAkgIGNvbHVtbiA9IGFkanVzdGVkQ29vcmRpbmF0ZXMuZ2V0Q29sdW1uTnVtbmVyKCk7Ci0gIAl9Ci0gIAkKLQllcnJvcnMuYWRkKG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwobWVzc2FnZSwgbGluZSwgY29sdW1uLCBWYWxpZGF0aW9uTWVzc2FnZUltcGwuU0VWX1dBUk5JTkcsIHVyaSwgY3VycmVudEVycm9yS2V5LCBjdXJyZW50TWVzc2FnZUFyZ3VtZW50cykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBoYW5kbGVyIGZvciB0aGUgU0FYIHBhcnNlci4gVGhpcyBoYW5kbGVyIHdpbGwgb2J0YWluIHRoZSBXU0RMCi0gICAqIG5hbWVzcGFjZSwgaGFuZGxlIGVycm9ycyBhbmQgcmVzb2x2ZSBlbnRpdGllcy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBYTUxDb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIKLSAgewotCXByaXZhdGUgTG9jYXRvciBsb2NhdG9yID0gbnVsbDsKLQkKLSAgICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudExvY2F0b3IoTG9jYXRvciBsb2NhdG9yKSAKLSAgICB7Ci0JCXRoaXMubG9jYXRvciA9IGxvY2F0b3I7Ci0JCXN1cGVyLnNldERvY3VtZW50TG9jYXRvcihsb2NhdG9yKTsKLQl9Ci0KLQkvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciNlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBhcmcwKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgewotICAgICBTdHJpbmcgdGVtcFVSSSA9IGFyZzAuZ2V0U3lzdGVtSWQoKTsKLSAgICAgaWYgKGlucHV0U3RyZWFtIT0gbnVsbCAmJiBhcmcwLmdldFN5c3RlbUlkKCkgPT0gbnVsbCkKLSAgICAgewotICAgICAgIC8vbWg6IEluIHRoaXMgY2FzZSB3ZSBhcmUgdmFsaWRhdGluZyBhIHN0cmVhbSBzbyB0aGUgVVJJIG1heSBiZSBudWxsIGluIHRoaXMgZXhjZXB0aW9uCi0gICAgICAgdGVtcFVSSSA9IHVyaTsgICAgICAgCi0gICAgIH0KLSAgICAgYWRkRXJyb3IoYXJnMC5nZXRNZXNzYWdlKCksIGFyZzAuZ2V0TGluZU51bWJlcigpLCBhcmcwLmdldENvbHVtbk51bWJlcigpLCB0ZW1wVVJJKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciNmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gYXJnMCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIGFkZEVycm9yKGFyZzAuZ2V0TWVzc2FnZSgpLCBhcmcwLmdldExpbmVOdW1iZXIoKSwgYXJnMC5nZXRDb2x1bW5OdW1iZXIoKSwgYXJnMC5nZXRTeXN0ZW1JZCgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciN3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gYXJnMCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIGFkZEVycm9yKGFyZzAuZ2V0TWVzc2FnZSgpLCBhcmcwLmdldExpbmVOdW1iZXIoKSwgYXJnMC5nZXRDb2x1bW5OdW1iZXIoKSwgYXJnMC5nZXRTeXN0ZW1JZCgpKTsKLSAgICB9Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNlbmRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgZW5kRWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUpCi0JCQl0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJaWYobG9jYWxOYW1lLmVxdWFscygiZG9jdW1lbnRhdGlvbiIpICYmICh1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfV1NETCkgfHwgdXJpLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKXx8IHVyaS5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgdXJpLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkpCi0JCXsKLQkJICBpc0NoaWxkT2ZEb2MgPSBmYWxzZTsKLQkJfQotCQlzdXBlci5lbmRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSk7Ci0JCXN0YXJ0RWxlbWVudExvY2F0aW9ucy5wb3AoKTsKLQl9Ci0JLyoqCi0JICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLAotCQkJQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJc3RhcnRFbGVtZW50TG9jYXRpb25zLnB1c2gobmV3IExvY2F0aW9uQ29vcmRpbmF0ZShsb2NhdG9yLmdldExpbmVOdW1iZXIoKSwgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSkpOwotCQlpZihsb2NhbE5hbWUuZXF1YWxzKCJkb2N1bWVudGF0aW9uIikgJiYgKHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSB8fCB1cmkuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpfHwgdXJpLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCB1cmkuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKSkKLQkJewotCQkgIGlzQ2hpbGRPZkRvYyA9IHRydWU7Ci0JCX0KLQkJc3VwZXIuc3RhcnRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgYXR0cyk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIC0gc2V0IHRoZSBpbnB1dFN0cmVhbSB0byB2YWxpZGF0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5wdXRTdHJlYW0oSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCi0gIHsKLSAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSBpbnB1dFN0cmVhbTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGNsYXNzIFhNTFZhbGlkYXRvclBhcnNlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb24KLSAgewotCS8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRFREQ29uZmlndXJhdGlvbiNjcmVhdGVFcnJvclJlcG9ydGVyKCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgWE1MRXJyb3JSZXBvcnRlciBjcmVhdGVFcnJvclJlcG9ydGVyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFhNTEVycm9yUmVwb3J0ZXIoKQotICAgICAgewotICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyI3JlcG9ydEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3RbXSwgc2hvcnQpCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMsCi0gICAgICAgICAgICBzaG9ydCBzZXZlcml0eSkgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgY3VycmVudEVycm9yS2V5ID0ga2V5OwotICAgICAgICAgIGN1cnJlbnRNZXNzYWdlQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICAgIHN1cGVyLnJlcG9ydEVycm9yKGRvbWFpbiwga2V5LCBhcmd1bWVudHMsIHNldmVyaXR5KTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gWE1MIFJlYWRlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgWE1MIHJlYWRlciBvciBudWxsIGlmIHVuc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBYTUxSZWFkZXIgY3JlYXRlWE1MUmVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7ICAgICAKLSAgICBTQVhQYXJzZXIgcmVhZGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZWFkZXIgPSBuZXcgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TQVhQYXJzZXIobmV3IFhNTFZhbGlkYXRvclBhcnNlckNvbmZpZ3VyYXRpb24oKSk7Ci0gICAgICAKLSAgICAgIFhNTENvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIgY29uZm9ybWFuY2VEZWZhdWx0SGFuZGxlciA9IG5ldyBYTUxDb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyKCk7Ci0gICAgICByZWFkZXIuc2V0RXJyb3JIYW5kbGVyKGNvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIpOwotICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGNvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIpOwotICAgICAgCi0gICAgICAvLyBPbGRlciBYZXJjZXMgdmVyc2lvbnMgd2lsbCB0aHJvd24gYSBOUEUgaWYgYSBudWxsIGdyYW1tYXIgcG9vbCBpcyBzZXQuCi0gICAgICBpZihncmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZWFkZXIuc2V0UHJvcGVydHkob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuWEVSQ0VTX1BST1BFUlRZX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhNTEdSQU1NQVJfUE9PTF9QUk9QRVJUWSwgZ3JhbW1hclBvb2wpOwotICAgICAgfQotICAgICAgcmVhZGVyLnNldFByb3BlcnR5KG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhFUkNFU19QUk9QRVJUWV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5FTlRJVFlfUkVTT0xWRVJfUFJPUEVSVFksIG5ldyBNeUVudGl0eVJlc29sdmVyKHVyaVJlc29sdmVyKSk7Ci0gICAgICByZWFkZXIuc2V0RmVhdHVyZShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9GRUFUVVJFLCBmYWxzZSk7Ci0gICAgICByZWFkZXIuc2V0RmVhdHVyZShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5TQVhfRkVBVFVSRV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5OQU1FU1BBQ0VTX0ZFQVRVUkUsIHRydWUpOwotICAgICAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuTkFNRVNQQUNFX1BSRUZJWEVTX0ZFQVRVUkUsIHRydWUpOwotCSAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLQkgIHJlYWRlci5zZXRGZWF0dXJlKG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUsIHRydWUpOwotICAgIH0gCi0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgeyAKLSAgICAgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIkVycm9yIGNyZWF0aW5nIFhNTCByZWFkZXIgZm9yIFdTREwgWE1MIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24uIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgIH0KLSAgICByZXR1cm4gcmVhZGVyOwotICB9IAotICAKLSAgLyoqCi0gICAqIEEgY3VzdG9tIGVudGl0eSByZXNvbHZlciB0aGF0IHVzZXMgdGhlIFVSSSByZXNvbHZlciBzcGVjaWZpZWQgdG8gcmVzb2x2ZSBlbnRpdGllcy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBNeUVudGl0eVJlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIgCi0gIHsKLSAgICBwcml2YXRlIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLgotICAgICAqIAotICAgICAqIEBwYXJhbSB1cmlSZXNvbHZlciBUaGUgVVJJIHJlc29sdmVyIHRvIHVzZSB3aXRoIHRoaXMgZW50aXR5IHJlc29sdmVyLgotICAgICAqLwotICAgIHB1YmxpYyBNeUVudGl0eVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICAgIHsKLSAgICAgIHRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgICovCi0gICAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJpZCkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgZXhhbWluaW5nIGEgc3ViZWxlbWVudCBvZiB0aGUgCi0JICAvLyBXU0RMIG9yIHNjaGVtYSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2UgZG9uJ3Qgd2FudCB0byByZXNvbHZlIGl0Ci0JICAvLyBhcyBhbnl0aGluZyBpcyBhbGxvd2VkIGFzIGEgY2hpbGQgb2YgZG9jdW1lbnRhdGlvbi4KLQkgIGlmKGlzQ2hpbGRPZkRvYykKLQkgIHsKLQkgICAgcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShyaWQpOwotCSAgfQotCSAgCi0JICBib29sZWFuIG5zVXNlZCA9IGZhbHNlOwotCSAgCi0JICBTdHJpbmcgbnMgPSByaWQuZ2V0TmFtZXNwYWNlKCk7Ci0JICBpZihucyAhPSBudWxsICYmIGlnbm9yZWROYW1lc3BhY2VMaXN0LmNvbnRhaW5zKG5zKSkKLQkgIHsKLQkJcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShyaWQpOwotCSAgfQotCSAgCi0JICBTdHJpbmcgc3lzdGVtSWQgPSByaWQuZ2V0TGl0ZXJhbFN5c3RlbUlkKCk7Ci0JICBpZihzeXN0ZW1JZCA9PSBudWxsKQotCSAgewotCQlzeXN0ZW1JZCA9IG5zOwotCQluc1VzZWQgPSB0cnVlOwotCSAgfQotCSAgU3RyaW5nIHB1YmxpY0lkID0gcmlkLmdldFB1YmxpY0lkKCk7Ci0gICAgICBpZihwdWJsaWNJZCA9PSBudWxsKQotICAgICAgewotICAgICAgICBwdWJsaWNJZCA9IHN5c3RlbUlkOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBYZXJjZXMgdGVuZHMgdG8gdHJ5IHRvIHJlc29sdmUgbG9jYXRpb25zIHdpdGggbm8gaW5mb3JtYXRpb24uCi0gICAgICAvLyBObyBuZWVkIHRvIGRvIGFueSBwcm9jZXNzaW5nIGlmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICBpZihwdWJsaWNJZCAhPSBudWxsIHx8IHN5c3RlbUlkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCA9IHVyaVJlc29sdmVyLnJlc29sdmUoIiIsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgICAgIFN0cmluZyB1cmkgPSByZXN1bHQuZ2V0UGh5c2ljYWxMb2NhdGlvbigpOwotICAgICAgICBpZiAodXJpICE9IG51bGwgJiYgIXVyaS5lcXVhbHMoIiIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlIG5hbWVzcGFjZSB3YXMgdXNlZCB0byByZXNvbHZlIHRoaXMgcmVmZXJlbmNlIGVuc3VyZSBhIHNjaGVtYQotICAgICAgICAgIC8vIGhhcyBiZWVuIHJldHVybmVkLiBOYW1lc3BhY2VzIHRlbmQgdG8gcG9pbnQgdG8gV2ViIHJlc291cmNlcyB0aGF0Ci0gICAgICAgICAgLy8gbWF5IG9yIG1heSBub3QgYmUgc2NoZW1hcy4KLSAgICAgICAgICBib29sZWFuIGNyZWF0ZUVudGl0eVJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgaWYobnNVc2VkKQotICAgICAgICAgIHsKLSAgICAgICAgCVhTRFZhbGlkYXRvciB4c2RWYWwgPSBuZXcgWFNEVmFsaWRhdG9yKCk7Ci0gICAgICAgIAl4c2RWYWwudmFsaWRhdGUodXJpLCB1cmlSZXNvbHZlciwgbnVsbCk7Ci0gICAgICAgIAlpZigheHNkVmFsLmlzVmFsaWQoKSkKLSAgICAgICAgCSAgY3JlYXRlRW50aXR5UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmKGNyZWF0ZUVudGl0eVJlc3VsdCkKLSAgICAgICAgICB7Ci0JICAgICAgICB0cnkKLQkgICAgICAgIHsKLQkJICAgICAgVVJMIGVudGl0eVVSTCA9IG5ldyBVUkwodXJpKTsKLSAgICAgICAgICAgICAgWE1MSW5wdXRTb3VyY2UgaXMgPSBuZXcgWE1MSW5wdXRTb3VyY2UocmlkLmdldFB1YmxpY0lkKCksIHN5c3RlbUlkLCByZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotCQkgICAgICBpcy5zZXRCeXRlU3RyZWFtKGVudGl0eVVSTC5vcGVuU3RyZWFtKCkpOwotICAgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBpczsKLSAgICAgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICAgICAgICB7Ci0JCSAgICAgIC8vIE5vIG5lZWQgdG8gcmVwb3J0IHRoaXMgZXJyb3IuIFNpbXBseSBjb250aW51ZSBiZWxvdy4KLQkgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfSAgCi0gIAotICAvKiogCi0gICAqIEEgbGluZSBhbmQgY29sdW1uIG51bWJlciBjb29yZGluYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIExvY2F0aW9uQ29vcmRpbmF0ZQotICB7CQotCXByaXZhdGUgaW50IGxpbmVObyA9IC0xOwotICAgIHByaXZhdGUgaW50IGNvbHVtbk5vID0gLTE7Ci0gICAgCi0gICAgcHVibGljIExvY2F0aW9uQ29vcmRpbmF0ZShpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICB0aGlzLmxpbmVObyA9IGxpbmVOdW1iZXI7Ci0gICAgICB0aGlzLmNvbHVtbk5vID0gY29sdW1uTnVtYmVyOwotICAgIH0KLSAgICAJCi0gICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgICB7IAotICAgICAgcmV0dXJuIHRoaXMubGluZU5vOwotICAgIH0KLSAgICAJCi0gICAgcHVibGljIGludCBnZXRDb2x1bW5OdW1uZXIoKQotICAgIHsgCi0gICAgICByZXR1cm4gdGhpcy5jb2x1bW5ObzsKLSAgICB9IAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0VsZW1lbnRMb2NhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9FbGVtZW50TG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5Mzk0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0VsZW1lbnRMb2NhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEhvbGRzIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYW4gZWxlbWVudCBpbiB0aGUgbW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50TG9jYXRpb24KLXsgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJsb2NhdGlvbiI7Ci0gIHByb3RlY3RlZCBpbnQgbGluZTsKLSAgcHJvdGVjdGVkIGludCBjb2x1bW47Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIC0gdGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVsZW1lbnQKLSAgICogQHBhcmFtIGNvbHVtbiAtIHRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24oaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBsaW5lIG51bWJlciBmb3IgdGhpcyBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgbGluZSBudW1iZXIgZm9yIHRoaXMgZWxlbWVudAotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgewotICAJcmV0dXJuIGxpbmU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgZm9yIHRoaXMgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgZm9yIHRoaXMgZWxlbWVudAotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW5OdW1iZXIoKQotICB7Ci0gIAlyZXR1cm4gY29sdW1uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxDYXRhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxDYXRhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwY2JmODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MQ2F0YWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgYW4gWE1MIGNhdGFsb2cuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVhNTENhdGFsb2cKLXsKLQotICAvKioKLSAgICogQWRkIGEgcHVibGljIGlkIGFuZCBhIGxvY2F0aW9uIHRvIHRoZSBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIHB1YmxpY0lkIC0KLSAgICogICAgICAgICAgdGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50cnkKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0KLSAgICogICAgICAgICAgdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50cnkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGFkZEVudHJ5VG9DYXRhbG9nKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLQotICAvKioKLSAgICogUmVzb2x2ZSB0aGUgbG9jYXRpb24gb2YgYW4gZW50aXR5IGdpdmVuIHB1YmxpYyBhbmQgc3lzdGVtIGlkcy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtCi0gICAqICAgICAgICAgIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudGl0eSB0byBiZSByZXNvbHZlZAotICAgKiBAcGFyYW0gc3lzdGVtSWQgLQotICAgKiAgICAgICAgICB0aGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGVudGl0eQotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyByZXNvbHZlRW50aXR5TG9jYXRpb24oU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwNDE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIGFuIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVhNTFZhbGlkYXRvcgotewotICAvKioKLSAgICogU2V0IHRoZSBmaWxlIHRvIGJlIHZhbGlkYXRlZC4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgLSB0aGUgdXJpIG9mIHRoZSBmaWxlIHRvIGJlIHZhbGlkYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmlsZShTdHJpbmcgdXJpKTsKLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBlcnJvcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGVycm9ycwotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JzKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiAKLSAgICogQHBhcmFtIHVyaVJlc29sdmVyIFRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VVJJUmVzb2x2ZXIoVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9MaW5lTnVtYmVyRE9NUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0xpbmVOdW1iZXJET01QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmOGI2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0xpbmVOdW1iZXJET01QYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5TeW1ib2xUYWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuTmFtZXNwYWNlQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTEF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hQ29uc3RhbnRzOwotCi0vKioKLSAqIEEgRE9NIHBhcnNlciB0aGF0IHdpbGwgcmVnaXN0ZXIgbG9jYXRpb24gaW5mb3JtYXRpb24gd2l0aCB0aGUgZWxlbWVudHMgaW4gdGhlIG1vZGVsLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckRPTVBhcnNlciBleHRlbmRzIERPTVBhcnNlcgotewotICBYTUxMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBMaW5lTnVtYmVyRE9NUGFyc2VyKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc2V0RmVhdHVyZShERUZFUl9OT0RFX0VYUEFOU0lPTiwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgICBjYXRjaCAoU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBhcmcwIFRoZSBwYXJzZXIgY29uZmlndXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBMaW5lTnVtYmVyRE9NUGFyc2VyKFhNTFBhcnNlckNvbmZpZ3VyYXRpb24gYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNldEZlYXR1cmUoREVGRVJfTk9ERV9FWFBBTlNJT04sIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFyZzAgQSBzeW1ib2wgdGFibGUgZm9yIHRoZSBwYXJzZXIuCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcihTeW1ib2xUYWJsZSBhcmcwKQotICB7Ci0gICAgc3VwZXIoYXJnMCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYXJnMCBBIHN5bWJvbCB0YWJsZSBmb3IgdGhlIHBhcnNlci4KLSAgICogQHBhcmFtIGFyZzEgQSBncmFtbWFyIHBvb2wgZm9yIHRoZSBwYXJzZXIuCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcihTeW1ib2xUYWJsZSBhcmcwLCBYTUxHcmFtbWFyUG9vbCBhcmcxKQotICB7Ci0gICAgc3VwZXIoYXJnMCwgYXJnMSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RWxlbWVudChvcmcuYXBhY2hlLnhlcmNlcy54bmkuUU5hbWUsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChRTmFtZSBhcmcwLCBYTUxBdHRyaWJ1dGVzIGFyZzEsIEF1Z21lbnRhdGlvbnMgYXJnMikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50OwotICAgIC8vIEZvciBlbGVtZW50cyBmcm9tIHRoZSBTY2hlbWEgbmFtZXNwYWNlIHdlIHdhbnQgdG8gcHJlc2VydmUgdGhlbQotICAgIC8vIHRoZSB3YXkgdGhleSB3ZXJlIGVudGVyZWQuIFJldmVydCB0aGUgdmFsdWVzIHRvIHRoZSBub24tbm9ybWFsaXplZCB2YWx1ZXMuCi0gICAgU3RyaW5nIG5zID0gYXJnMC51cmk7Ci0gICAgaWYobnMgIT0gbnVsbCAmJiAobnMuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpIHx8IG5zLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCBucy5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpKQotICAgIHsKLSAgICAgIGludCBudW1hdHRzID0gYXJnMS5nZXRMZW5ndGgoKTsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1hdHRzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub25Ob3JtYWxpemVkVmFsdWUgPSBhcmcxLmdldE5vbk5vcm1hbGl6ZWRWYWx1ZShpKTsKLSAgICAgICAgYXJnMS5zZXRWYWx1ZShpLCBub25Ob3JtYWxpemVkVmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5zdGFydEVsZW1lbnQoYXJnMCwgYXJnMSwgYXJnMik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZWxlbWVudCA9IChFbGVtZW50KWdldFByb3BlcnR5KENVUlJFTlRfRUxFTUVOVF9OT0RFKTsKLSAgICAgIEVsZW1lbnRJbXBsIGVsZW1lbnRJbXBsID0gKEVsZW1lbnRJbXBsKWVsZW1lbnQ7Ci0gICAgICAvLyBTZXR0aW5nIHRoZSB1c2VyIGRhdGEgd2l0aCBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgRWxlbWVudExvY2F0aW9uLktFWV9OQU1FCi0gICAgICAvLyBtYXkgYmUgYSBsb25nIHRlcm0gZ29vZCBpZGVhLiBUaGUgc2V0VXNlckRhdGEgbWV0aG9kIHdpdGggbm8gaWQgaXMgdXNlZCAKLSAgICAgIC8vIHRvIHN1cHBvcnQgSlZNcyB3aXRoIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiBYZXJjZXMuCi0gICAgICBlbGVtZW50SW1wbC5zZXRVc2VyRGF0YShuZXcgRWxlbWVudExvY2F0aW9uKGxvY2F0b3IuZ2V0TGluZU51bWJlcigpLCBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKSk7Ci0gICAgfQotICAgIC8vIGNhdGNoIFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gYW5kIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBpZiBjYW4ndCBnZXQgZWxlbWVudAotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxEb2N1bWVudEhhbmRsZXIjc3RhcnREb2N1bWVudChvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MTG9jYXRvciwgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5BdWdtZW50YXRpb25zKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnREb2N1bWVudChYTUxMb2NhdG9yIGFyZzAsIFN0cmluZyBhcmcxLCBOYW1lc3BhY2VDb250ZXh0IGFyZzIsIEF1Z21lbnRhdGlvbnMgYXJnMykKLSAgICB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBsb2NhdG9yID0gYXJnMDsKLSAgICBzdXBlci5zdGFydERvY3VtZW50KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWM2MzEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmpheHAuU0FYUGFyc2VyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBYTUxDYXRhbG9nIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIsIG9idGFpbiBhbmQgZGVsZXRlIGFuIGluc3RhbmNlCi0gKiBvZiBhbiBYTUwgY2F0YWxvZy4gTWV0aG9kIGRlZmluaXRpb25zIGFyZSBwcm92aWRlZCBmb3IgdGhlIGNhdGFsb2cgdG8gc2V0IGEKLSAqIGxvY2F0aW9uIGluIHRoZSBjYXRhbG9nIGFuZCByZXNvbHZlIGFuIGVudGl0eSBmcm9tIHRoZSBjYXRhbG9nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZyBpbXBsZW1lbnRzIElYTUxDYXRhbG9nCi17Ci0gIC8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIF9BUEFDSEVfRkVBVFVSRV9DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUiA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvY29udGludWUtYWZ0ZXItZmF0YWwtZXJyb3IiOwotCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiOwotCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0KLSAgLy9wcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgX0FQQUNIRV9GRUFUVVJFX1ZBTElEQVRJT04gPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iOwotCi0gIC8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIF9BUEFDSEVfRkVBVFVSRV9WQUxJREFUSU9OX1NDSEVNQSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOwotCi0gIHByaXZhdGUgc3RhdGljIElYTUxDYXRhbG9nIGluc3RhbmNlID0gbnVsbDsKLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXh0eG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLQotICBwcml2YXRlIHN0YXRpYyBDbGFzc0xvYWRlciBleHRjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgSVhNTENhdGFsb2cgZXh0WE1MQ2F0YWxvZ0luc3RhbmNlID0gbnVsbDsKLQotICBwcml2YXRlIHN0YXRpYyBMaXN0IHNjaGVtYWRpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBlbnRpdGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQSBoYXNodGFibGUgdG8gaG9sZCB0aGUgWE1MIGNhdGFsb2cgZW50cmllcy4KLSAgICovCi0gIHByb3RlY3RlZCBNYXAgY2F0YWxvZyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4gQXNzaWducyBhbGwgcmVnaXN0ZXJlZCBzY2hlbWFzIHRvCi0gICAqIHRoZSBYTUwgY2F0YWxvZy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVhNTENhdGFsb2cgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgWE1MQ2F0YWxvZygpOwotCi0gICAgICAvLyBBZGQgdGhlIHJlZ2lzdGVyZWQgZW50aXRpZXMgdG8gdGhlIGNhdGFsb2cuCi0gICAgICBJdGVyYXRvciBlbnRpdHlJdGVyID0gZW50aXRpZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlbnRpdHlJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlciBlbnRpdHkgPSAoWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcikgZW50aXR5SXRlci5uZXh0KCk7Ci0gICAgICAgIGluc3RhbmNlLmFkZEVudHJ5VG9DYXRhbG9nKGVudGl0eS5nZXRQdWJsaWNJZCgpLCBlbnRpdHkuZ2V0U3lzdGVtSWQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFkZCB0aGUgc2NoZW1hcyBpbiB0aGUgc2NoZW1hIGRpcmVjdG9yaWVzIHRvIHRoZSBjYXRhbG9nLgotICAgICAgaWYgKHNjaGVtYWRpcnMuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgU0FYUGFyc2VyIHNheFBhcnNlciA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgU0FYUGFyc2VyRmFjdG9yeSBwYXJzZXJmYWN0b3J5ID0gbmV3IFNBWFBhcnNlckZhY3RvcnlJbXBsKCk7Ci0gICAgICAgICAgcGFyc2VyZmFjdG9yeS5zZXRGZWF0dXJlKF9BUEFDSEVfRkVBVFVSRV9OQU1FU1BBQ0VfUFJFRklYRVMsIHRydWUpOwotICAgICAgICAgIHBhcnNlcmZhY3Rvcnkuc2V0RmVhdHVyZShfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0gICAgICAgICAgc2F4UGFyc2VyID0gcGFyc2VyZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBJdGVyYXRvciBzY2hlbWFkaXJJdGVyID0gc2NoZW1hZGlycy5pdGVyYXRvcigpOwotICAgICAgICBTY2hlbWFOYW1lc3BhY2VIYW5kbGVyIGhhbmRsZXIgPSAoKFhNTENhdGFsb2cpIGluc3RhbmNlKS5uZXcgU2NoZW1hTmFtZXNwYWNlSGFuZGxlcigpOwotICAgICAgICB3aGlsZSAoc2NoZW1hZGlySXRlci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc2NoZW1hZGlyID0gKFN0cmluZykgc2NoZW1hZGlySXRlci5uZXh0KCk7Ci0gICAgICAgICAgcmVnaXN0ZXJTY2hlbWFzRm9yRGlyKGluc3RhbmNlLCBzY2hlbWFkaXIsIHNheFBhcnNlciwgaGFuZGxlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoZSBzY2hlbWFzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkgYW5kIGFsbCBzdWJkaXJlY3RvcmllcyB3aXRoIHRoZQotICAgKiBYTUwgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nCi0gICAqICAgICAgICAgIFRoZSBjYXRhbG9nIHRvIHJlZ2lzdGVyIHRoZSBzY2hlbWFzIHdpdGguCi0gICAqIEBwYXJhbSBzY2hlbWFkaXIKLSAgICogICAgICAgICAgVGhlIHNjaGVtYSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBzY2hlbWEgZmlsZXMuCi0gICAqIEBwYXJhbSBwYXJzZXIKLSAgICogICAgICAgICAgVGhlIFNBWFBhcnNlciB0byB1c2UgdG8gcGFyc2UgdGhlIHNjaGVtYXMgZm9yIHRoZWlyCi0gICAqICAgICAgICAgIHRhcmdldE5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGhhbmRsZXIKLSAgICogICAgICAgICAgVGhlIGhhbmRsZXIgdG8gdXNlIHRvIGdldCB0aGUgdGFyZ2V0TmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWdpc3RlclNjaGVtYXNGb3JEaXIoSVhNTENhdGFsb2cgY2F0YWxvZywgU3RyaW5nIHNjaGVtYWRpciwgU0FYUGFyc2VyIHBhcnNlciwKLSAgICAgIFNjaGVtYU5hbWVzcGFjZUhhbmRsZXIgaGFuZGxlcikKLSAgewotICAgIC8vIFJlbW92ZSBmaWxlOiBhbmQgZmlsZTovIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUgbG9jYXRpb24gaWYgdGhleSBhcmUgcHJlc2VudC4KLSAgICBpZihzY2hlbWFkaXIuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgICB7Ci0gICAgICBzY2hlbWFkaXIgPSBzY2hlbWFkaXIuc3Vic3RyaW5nKDUpOwotICAgIH0KLSAgICB3aGlsZShzY2hlbWFkaXIuc3RhcnRzV2l0aCgiLy8iKSkKLSAgICB7Ci0gICAgICBzY2hlbWFkaXIgPSBzY2hlbWFkaXIuc3Vic3RyaW5nKDEpOwotICAgIH0KLSAgICAKLSAgICBGaWxlIGRpciA9IG5ldyBGaWxlKHNjaGVtYWRpcik7Ci0gICAgaWYgKGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIEZpbGVbXSBmaWxlcyA9IGRpci5saXN0RmlsZXMoKTsKLSAgICAgIGludCBudW1maWxlcyA9IGZpbGVzLmxlbmd0aDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtZmlsZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRmlsZSB0ZW1wZmlsZSA9IGZpbGVzW2ldOwotICAgICAgICBTdHJpbmcgdGVtcGZpbGVwYXRoID0gdGVtcGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgIHRlbXBmaWxlcGF0aCA9IHRlbXBmaWxlcGF0aC5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgd2hpbGUodGVtcGZpbGVwYXRoLnN0YXJ0c1dpdGgoIi8iKSkKLSAgICAgICAgewotICAgICAgICAgIHRlbXBmaWxlcGF0aCA9IHRlbXBmaWxlcGF0aC5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGZpbGVwYXRoID0gRklMRV9QUk9UT0NPTCArIHRlbXBmaWxlcGF0aDsKLSAgICAgICAgaWYgKHRlbXBmaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZWdpc3RlclNjaGVtYXNGb3JEaXIoY2F0YWxvZywgdGVtcGZpbGVwYXRoLCBwYXJzZXIsIGhhbmRsZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZXIucmVzZXQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXIucGFyc2UodGVtcGZpbGVwYXRoLCBoYW5kbGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IGxvZyBlcnJvci4KLSAgICAgICAgICB9Ci0gICAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGhhbmRsZXIuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhdGFsb2cuYWRkRW50cnlUb0NhdGFsb2codGFyZ2V0TmFtZXNwYWNlLCB0ZW1wZmlsZXBhdGgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoZSBleHRlbnNpb24gWE1MIGNhdGFsb2cuIFJldHVybnMgdGhlIGluc3RhbmNlIGlmIG9uZQotICAgKiBpcyByZWdpc3RlcmVkIGFuZCBjYW4gYmUgY3JlYXRlZCwgbnVsbCBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgZXh0ZW5zaW9uIFhNTCBjYXRhbG9nIGlmIG9uZSBpcyByZWdpc3RlcmVkLAotICAgKiAgICAgICAgIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJWE1MQ2F0YWxvZyBnZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGV4dFhNTENhdGFsb2dJbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChleHR4bWxjYXRhbG9nY2xhc3MgIT0gbnVsbCAmJiBleHRjbGFzc0xvYWRlciAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIENsYXNzIGNhdGFsb2dDbGFzcyA9IGV4dGNsYXNzTG9hZGVyICE9IG51bGwgPyBleHRjbGFzc0xvYWRlci5sb2FkQ2xhc3MoZXh0eG1sY2F0YWxvZ2NsYXNzKSA6IENsYXNzCi0gICAgICAgICAgICAgIC5mb3JOYW1lKGV4dHhtbGNhdGFsb2djbGFzcyk7Ci0gICAgICAgICAgZXh0WE1MQ2F0YWxvZ0luc3RhbmNlID0gKElYTUxDYXRhbG9nKSBjYXRhbG9nQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvL1RPRE86IExvZyBlcnJvcgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBleHRYTUxDYXRhbG9nSW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBjbGFzcyBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gYmUgdXNlZC4KLSAgICogCi0gICAqIEBwYXJhbSB4bWxjYXRhbG9nCi0gICAqICAgICAgICAgIFRoZSBjbGFzcyBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gYmUgdXNlZC4KLSAgICogQHBhcmFtIGNsYXNzbG9hZGVyCi0gICAqICAgICAgICAgIFRoZSBjbGFzc2xvYWRlciB0byB1c2UgdG8gbG9hZCB0aGUgY2F0YWxvZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFeHRlbnNpb25YTUxDYXRhbG9nKFN0cmluZyB4bWxjYXRhbG9nLCBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikKLSAgewotICAgIGV4dHhtbGNhdGFsb2djbGFzcyA9IHhtbGNhdGFsb2c7Ci0gICAgZXh0Y2xhc3NMb2FkZXIgPSBjbGFzc2xvYWRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBudWxsLiBGb3IgZGVsZXRpbmcgdGhlIGNhdGFsb2cgaWYKLSAgICogbmVjZXNzYXJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICBleHR4bWxjYXRhbG9nY2xhc3MgPSBudWxsOwotICAgIGV4dGNsYXNzTG9hZGVyID0gbnVsbDsKLSAgICBleHRYTUxDYXRhbG9nSW5zdGFuY2UgPSBudWxsOwotICAgIGVudGl0aWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHNjaGVtYWRpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGEgc2NoZW1hIGRpcmVjdG9yeSB0byBiZSBjaGVja2VkIGZvciBzY2hlbWFzIHRvIHJlZ2lzdGVyIGluIHRoZQotICAgKiBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYWRpcgotICAgKiAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRvIGNoZWNrIGZvciBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGFkZFNjaGVtYURpcihTdHJpbmcgc2NoZW1hZGlyKQotICB7Ci0gICAgc2NoZW1hZGlycy5hZGQoc2NoZW1hZGlyKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHRvIHRoZSBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIGVudGl0eQotICAgKiAgICAgICAgICBUaGUgZW50aXR5IHRvIGFkZCB0byB0aGUgY2F0YWxvZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRFbnRpdHkoWE1MQ2F0YWxvZ0VudGl0eUhvbGRlciBlbnRpdHkpCi0gIHsKLSAgICBlbnRpdGllcy5hZGQoZW50aXR5KTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5pbnRlcm5hbC54bWwuSVhNTENhdGFsb2cjYWRkRW50cnlUb0NhdGFsb2coamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnlUb0NhdGFsb2coU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBjYXRhbG9nLnB1dChwdWJsaWNJZCwgc3lzdGVtSWQpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLmludGVybmFsLnhtbC5JWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyByZXNvbHZlRW50aXR5TG9jYXRpb24oU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBTdHJpbmcgcmVzb2x2ZWRsb2NhdGlvbiA9IG51bGw7Ci0gICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgdXNpbmcgdGhlIGV4dCBjYXRhbG9nLgotICAgIElYTUxDYXRhbG9nIGV4dGNhdGFsb2cgPSBnZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKTsKLSAgICBpZiAoZXh0Y2F0YWxvZyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc29sdmVkbG9jYXRpb24gPSBleHRjYXRhbG9nLnJlc29sdmVFbnRpdHlMb2NhdGlvbihwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgIH0KLSAgICBpZiAocmVzb2x2ZWRsb2NhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc3lzdGVtIGlkIHVzZSB0aGUgcHVibGljIGlkCi0gICAgICBpZiAoc3lzdGVtSWQgPT0gbnVsbCB8fCBzeXN0ZW1JZC5lcXVhbHMoIiIpKQotICAgICAgewotICAgICAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotICAgICAgfQotICAgICAgcmVzb2x2ZWRsb2NhdGlvbiA9IChTdHJpbmcpIGNhdGFsb2cuZ2V0KHN5c3RlbUlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc29sdmVkbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQSBoYW5kbGVyIHVzZWQgaW4gcGFyc2luZyB0byBnZXQgdGhlIHRhcmdldE5hbWVzcGFjZSBzdHJpbmcgb2YgYSBzY2hlbWEuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgU2NoZW1hTmFtZXNwYWNlSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi0gIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBUQVJHRVRfTkFNRVNQQUNFID0gInRhcmdldE5hbWVzcGFjZSI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBTQ0hFTUEgPSAic2NoZW1hIjsKLQotICAgIHByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI3N0YXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAotICAgICAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsbmFtZSwgU3RyaW5nIGFyZzIsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIGlmIChsb2NhbG5hbWUuZXF1YWxzKFNDSEVNQSkpCi0gICAgICB7Ci0KLSAgICAgICAgaW50IG51bUF0dHMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dHM7IGkrKykKLSAgICAgICAgewotCi0gICAgICAgICAgU3RyaW5nIGF0dG5hbWUgPSBhdHRyaWJ1dGVzLmdldFFOYW1lKGkpOwotICAgICAgICAgIGlmIChhdHRuYW1lLmVxdWFscyhUQVJHRVRfTkFNRVNQQUNFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKGkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICBzdXBlci5zdGFydEVsZW1lbnQodXJpLCBsb2NhbG5hbWUsIGFyZzIsIGF0dHJpYnV0ZXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgdGFyZ2V0TmFtZXNwYWNlIGZvdW5kIGJ5IHBhcnNpbmcgdGhlIGZpbGUuCi0gICAgICogCi0gICAgICogQHJldHVybiBUaGUgdGFyZ2V0TmFtZXNwYWNlIGZvdW5kIGJ5IHBhcnNpbmcgdGhlIGZpbGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgIHsKLSAgICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBoYW5kbGVyIHNvIGl0IGNhbiBiZSByZXVzZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgIHRhcmdldE5hbWVzcGFjZSA9IG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dFbnRpdHlIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ0VudGl0eUhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWY5NmQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ0VudGl0eUhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEEgY29udGFpbmVyIHRvIGhvbGQgdGhlIGVudGl0eSBpbmZvcm1hdGlvbiB1bnRpbCBhbiBYTUwgY2F0YWxvZyBpcwotICogdG8gYmUgaW5pdGlhbGl6ZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDYXRhbG9nRW50aXR5SG9sZGVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHB1YmxpY0lkOwotICBwcml2YXRlIFN0cmluZyBzeXN0ZW1JZDsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCBUaGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqIEBwYXJhbSBzeXN0ZW1JZCBUaGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqLwotICBwdWJsaWMgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcihTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAgIHRoaXMucHVibGljSWQgPSBwdWJsaWNJZDsKLSAgICB0aGlzLnN5c3RlbUlkID0gc3lzdGVtSWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudGl0eS4KLSAgICogQHJldHVybiBUaGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFB1YmxpY0lkKCkKLSAgewotICAgIHJldHVybiBwdWJsaWNJZDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5LgotICAgKiBAcmV0dXJuIFRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudGl0eS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3lzdGVtSWQoKQotICB7Ci0gICAgcmV0dXJuIHN5c3RlbUlkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FkMGU2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkxhenlVUkxJbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBBIHJlc29sdmVyIHRvIHJlc29sdmVyIGVudGl0aWVzIGZyb20gdGhlIFhNTCBjYXRhbG9nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ1Jlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBYTUxDYXRhbG9nUmVzb2x2ZXIgeG1sQ2F0YWxvZzsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZ1Jlc29sdmVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZXNvbHZlci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh4bWxDYXRhbG9nID09IG51bGwpCi0gICAgewotICAgICAgeG1sQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhtbENhdGFsb2c7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0gICAgaWYocHVibGljSWQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgU3RyaW5nIHN5c3RlbUlkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpOwotICAgIFN0cmluZyBsb2NhdGlvbiA9IFhNTENhdGFsb2cuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlRW50aXR5TG9jYXRpb24ocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMYXp5VVJMSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKGxvY2F0aW9uKTsKLSAgICAgIFhNTElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIGlzLCBudWxsKTsKLSAgICAgIHJldHVybiBpbnB1dFNvdXJjZTsKLSAgICB9Ci0gICAgLy8gb3RoZXJ3aXNlIHJldHVybiBudWxsIHRvIHRlbGwgdGhlIHBhcnNlciB0byBsb2NhdGUgdGhlIHN5c3RlbUlkIGFzIGEgVVJJCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MTWVzc2FnZUluZm9IZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MTWVzc2FnZUluZm9IZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQzYWI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTE1lc3NhZ2VJbmZvSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1wdWJsaWMgY2xhc3MgWE1MTWVzc2FnZUluZm9IZWxwZXIKLXsKLSAgCi0gIC8vc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkucmVjb25jaWxlLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3IKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMX0FUVFJJQlVURVMgPSAiQUxMX0FUVFJJQlVURVMiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTkFNRSA9IkFUVFJJQlVURV9OQU1FIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX1ZBTFVFID0gIkFUVFJJQlVURV9WQUxVRSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVJUX1RBRyA9ICJTVEFSVF9UQUciOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUID0gIlRFWFQiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGSVJTVF9OT05fV0hJVEVTUEFDRV9URVhUID0gIkZJUlNUX05PTl9XSElURVNQQUNFX1RFWFQiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUX0VOVElUWV9SRUZFUkVOQ0UgPSAiVEVYVF9FTlRJVFlfUkVGRVJFTkNFIjsgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX09GX0FUVFJJQlVURV9XSVRIX0dJVkVOX1ZBTFVFID0gIlZBTFVFX09GX0FUVFJJQlVURV9XSVRIX0dJVkVOX1ZBTFVFIjsKLSAgCi0gIAotICBwdWJsaWMgWE1MTWVzc2FnZUluZm9IZWxwZXIoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiAgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgc2hvdWxkIGJlIHVuZGVybGluZWQgd2l0aCB0aGUgcmVkICJzcXVpZ2dsZXMiCi0gICAqICB1c2luZyB0aGUgZXJyb3JLZXksIGFuZCB0aGUgbWVzc2FnZUFyZ3VtZW50cwotICAgKiAgPGJyPlBvc2l0aW9uIDAgb2YgdGhlIGFycmF5IHJldHVybmVkIGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24gU3RyYXRlZ3ksb3Igd2hhdCBET00gRWxlbWVudCB0byB1bmRlcmxpbmUuICAKLSAgICogIEZvciBleGFtcGxlICJBVFRSSUJVVEVfTkFNRSIgIAotICAgKiAgPGJyPlBvc2l0aW9uIDEgY29udGFpbnMgdGhlIG5hbWUgb3IgdmFsdWUgdG8gc3F1aWdnbGUuCi0gICAqICA8cD5Gb3IgZXhhbXBsZSwgaWYgd2Ugd2FudGVkIHRvIHNxdWlnZ2xlIHRoZSBhdHRyaWJ1dGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgbmFtZQotICAgKiAgZm9vIHRoaXMgbWV0aG9kIHdvdWxkIHJldHVybiB7IkFUVFJJQlVURV9OQU1FIiwgImZvbyJ9Ci0gICAqICA8L3A+Ci0gICAqICBAcGFyYW0gZXJyb3JLZXkgdGhlIGVycm9yIGtleSBnaXZlbiBieSB0aGUgWGVyY2VzIHBhcnNlcgotICAgKiAgQHBhcmFtIG1lc3NhZ2VBcmd1bWVudHMgdGhlIGFyZ3VtZW50cyB1c2VkIGJ5IFhlcmNlcyB0byAiZmlsbCBpbiB0aGUgYmxhbmtzIiBvZiB0aGVpciBtZXNzYWdlcwotICAgKiAgQHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzcXVpZ2dsZSBpbmZvcm1hdGlvbgotICAgKiAgQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnJlY29uY2lsZS5EZWxlZ2F0aW5nUmVjb25jaWxlVmFsaWRhdG9yCi0gICAqICAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBjcmVhdGVNZXNzYWdlSW5mbyhTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsgCi0gICAgU3RyaW5nIHNlbGVjdGlvblN0cmF0ZWd5ID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZU9yVmFsdWUgPSBudWxsOwotCi0gICAgLy9YTUwgRXJyb3JzCi0gICAgaWYgKGVycm9yS2V5LmVxdWFscygiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYSIpIHx8IGVycm9yS2V5LmVxdWFscygiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuZCIpIHx8IGVycm9yS2V5LmVxdWFscygiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIpIHx8IGVycm9yS2V5LmVxdWFscygiTVNHX0NPTlRFTlRfSU5WQUxJRCIpCi0gICAgICAgIHwgZXJyb3JLZXkuZXF1YWxzKCJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFIikgfHwgZXJyb3JLZXkuZXF1YWxzKCJNU0dfUkVRVUlSRURfQVRUUklCVVRFX05PVF9TUEVDSUZJRUQiKSB8fCBlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuNCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5ID0gU1RBUlRfVEFHOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy10eXBlLjMuMS4zIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3kgPSBURVhUOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi4zIikpCi0gICAgewotICAgIAlzZWxlY3Rpb25TdHJhdGVneSA9IEZJUlNUX05PTl9XSElURVNQQUNFX1RFWFQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiY3ZjLXR5cGUuMy4xLjEiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneSA9IEFMTF9BVFRSSUJVVEVTOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMy4yLjIiKSB8fCBlcnJvcktleS5lcXVhbHMoIk1TR19BVFRSSUJVVEVfTk9UX0RFQ0xBUkVEIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3kgPSBBVFRSSUJVVEVfTkFNRTsKLQkgIC8vaW4gdGhpcyBjYXNlIHdlIG5lZWQgbmFtZU9yVmFsdWUgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byB1bmRlcmxpbmUKLQkgIG5hbWVPclZhbHVlID0gKFN0cmluZyltZXNzYWdlQXJndW1lbnRzWzFdOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1hdHRyaWJ1dGUuMyIpIHx8IGVycm9yS2V5LmVxdWFscygiTVNHX0FUVFJJQlVURV9WQUxVRV9OT1RfSU5fTElTVCIpKQotICAgIHsJCi0gICAgCXNlbGVjdGlvblN0cmF0ZWd5ID0gQVRUUklCVVRFX1ZBTFVFOyAgCi0JCS8vaW4gdGhpcyBjYXNlIHdlIG5lZWQgbmFtZU9yVmFsdWUgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIEF0dHJpYnV0ZQotICAgIAlpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtYXR0cmlidXRlLjMiKSkKLSAgICAJeyBuYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1sxXTsKLSAgICAJfQotICAgIAllbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIk1TR19BVFRSSUJVVEVfVkFMVUVfTk9UX0lOX0xJU1QiKSkKLSAgICAJewluYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1swXTsKLSAgICAJfQotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1lbHQuNC4yIikpCi0gICAgewlzZWxlY3Rpb25TdHJhdGVneT1WQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRTsKLQkJLy9pbiB0aGlzIGNhc2Ugd2UgbmVlZCBuYW1lT3JWYWx1ZSB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB3ZSB3YW50IHRvIHVuZXJsaW5lCi0gICAgCW5hbWVPclZhbHVlID0gKFN0cmluZyltZXNzYWdlQXJndW1lbnRzWzFdOwkKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJFbnRpdHlOb3REZWNsYXJlZCIpKQotICAgIHsgIAlzZWxlY3Rpb25TdHJhdGVneT1URVhUX0VOVElUWV9SRUZFUkVOQ0U7Ci0gICAgfQotICAgIAotICAgIAotICAgIC8vV1NETCBFcnJvcnMKLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVUIikgfHwKLSAgICAgICAgICAgICAgIGVycm9yS2V5LmVxdWFscygiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCIpIHx8Ci0gICAgICAgICAgICAgICBlcnJvcktleS5lcXVhbHMoIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0gIm1lc3NhZ2UiOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkciKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0idHlwZSI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3k9QVRUUklCVVRFX1ZBTFVFOwotICAgICAgbmFtZU9yVmFsdWU9Im5hbWUiOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9QQVJUX0lOVkFMSURfRUxFTUVOVCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5PUFUVFJJQlVURV9WQUxVRTsKLSAgICAgIG5hbWVPclZhbHVlPSJlbGVtZW50IjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfTk9fQklORElOR19GT1JfUE9SVCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5PUFUVFJJQlVURV9WQUxVRTsKLSAgICAgIG5hbWVPclZhbHVlPSJiaW5kaW5nIjsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIG1lc3NhZ2VJbmZvW10gPSBuZXcgU3RyaW5nWzJdOwotICAgIG1lc3NhZ2VJbmZvWzBdID0gc2VsZWN0aW9uU3RyYXRlZ3k7Ci0gICAgbWVzc2FnZUluZm9bMV0gPSBuYW1lT3JWYWx1ZTsKLSAgICByZXR1cm4gbWVzc2FnZUluZm87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFjYTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIENvbnN0YW50cyBmb3Igc3RyaW5ncyAgCi0KLSEtLSBFcnJvciB3aXRoIGRvY3VtZW50IGxvY2F0aW9uCi1fRVJST1JfRE9DVU1FTlRfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgPSBUaGUgV1NETCBkb2N1bWVudCB7MH0gY291bGQgbm90IGJlIHJlYWQuCi0hLS0gV2FybmluZyBNZXNzYWdlcwotX1dBUk5fTk9fVkFMRElBVE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gVGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm9yIHRoZSBuYW1lc3BhY2UgezB9LgotCi1fRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiAgICAgICAgICAgICAgPSBBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgcnVubmluZyB0aGUgV1NETCB2YWxpZGF0b3IgZm9yIG5hbWVzcGFjZSB7MH0uCi1fRVJST1JfTk9fV1NETF9WQUxJREFUT1IgICAgICAgICAgICAgICAgICAgPSBUaGUgbmFtZXNwYWNlIHswfSBzcGVjaWZpZWQgaXMgbm90IGEgdmFsaWQgV1NETCBuYW1lc3BhY2UuCi1fRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SICAgICAgICAgICAgICAgPSBBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgcnVubmluZyB0aGUgRXh0ZW5zaW9uIHZhbGlkYXRvciB7MH0gZm9yIG5hbWVzcGFjZSB7MX0uCi0KLSEtLSBTdHJpbmdzIGZvciBXU0RMIDEuMSB2YWxpZGF0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLV9VTkFCTEVfVE9fSU1QT1JUX0JBRF9MT0NBVElPTiAgICAgICAgICAgICA9IFRoZSB7MH0gZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkLiBDaGVjayB0aGF0IHRoZSBkb2N1bWVudCBleGlzdHMgYW5kIHRoYXQgdGhlIGxvY2F0aW9uIGlzIGNvcnJlY3QuCi1fVU5BQkxFX1RPX0lNUE9SVF9OT19MT0NBVElPTiAgICAgICAgICAgICAgPSBUaGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGVtcHR5LiBBIGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlLgotX1VOQUJMRV9UT19JTVBPUlRfSU5WQUxJRCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW1wb3J0ZWQgYmVjYXVzZSBpdCBpcyBub3QgdmFsaWQuIFRoZSBkb2N1bWVudCBtdXN0IGJlIGNvcnJlY3RlZCBiZWZvcmUgaXQgY2FuIGJlIGltcG9ydGVkLgotX05PX0JJTkRJTkdfRk9SX1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBwb3J0IGhhcyBhbiBpbnZhbGlkIGJpbmRpbmcgLSB7MX0uIENoZWNrIHRoYXQgdGhlIHsxfSBiaW5kaW5nIGlzIGRlZmluZWQuCi1fUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HICAgICAgICAgICAgPSBUaGUgezB9IHBvcnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSB7MX0gYmluZGluZyBpcyB1bmRlZmluZWQuIENoZWNrIHRoZSB7MH0gcG9ydCB0eXBlIG5hbWUgYW5kIGVuc3VyZSBpdCBpcyBkZWZpbmVkLgotX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFICAgICAgICAgID0gVGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSB7MH0gYmluZGluZyBpcyBub3QgZGVmaW5lZCBmb3IgcG9ydCB0eXBlIHsxfS4gQWxsIG9wZXJhdGlvbnMgc3BlY2lmaWVkIGluIHRoaXMgYmluZGluZyBtdXN0IGJlIGRlZmluZWQgaW4gcG9ydCB0eXBlIHsxfS4KLV9JTlBVVF9OQU1FX05PVF9VTklRVUUgICAgICAgICAgICAgICAgICAgICA9IFRoZSBuYW1lIHswfSBzcGVjaWZpZWQgZm9yIHRoaXMgaW5wdXQgZWxlbWVudCBpcyBub3QgdW5pcXVlLiBUaGUgbmFtZSBvZiBhbiBpbnB1dCBlbGVtZW50IG11c3QgYmUgdW5pcXVlIGZyb20gdGhlIG5hbWVzIG9mIGFsbCBvdGhlciBpbnB1dCBhbmQgb3V0cHV0IGVsZW1lbnRzIGRlZmluZWQgaW4gdGhlIHsxfSBwb3J0IHR5cGUuCi1fT1VUUFVUX05BTUVfTk9UX1VOSVFVRSAgICAgICAgICAgICAgICAgICAgPSBUaGUgbmFtZSB7MH0gc3BlY2lmaWVkIGZvciB0aGlzIG91dHB1dCBlbGVtZW50IGlzIG5vdCB1bmlxdWUuIFRoZSBuYW1lIG9mIGFuIG91dHB1dCBlbGVtZW50IG11c3QgYmUgdW5pcXVlIGZyb20gdGhlIG5hbWVzIG9mIGFsbCBvdGhlciBpbnB1dHMgYW5kIG91dHB1dCBlbGVtZW50cyBkZWZpbmVkIGluIHRoZSB7MX0gcG9ydCB0eXBlLgotX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCAgICAgICAgICAgICAgID0gVGhlIGlucHV0IGVsZW1lbnQgaXMgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVkIG1lc3NhZ2UgezB9LiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBkZWZpbmVkLgotX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQgICAgICAgICAgICAgID0gVGhlIG91dHB1dCBlbGVtZW50IGlzIHJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBtZXNzYWdlIHswfS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4KLV9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQgICAgICAgICAgICAgICA9IFRoZSBmYXVsdCBlbGVtZW50IGlzIHJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBtZXNzYWdlIHswfS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4KLV9EVVBMSUNBVEVfRkFVTFRfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IEEgZmF1bHQgd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGZvciB0aGUgezF9IDBwZXJhdGlvbi4gQ2hlY2sgdGhhdCBldmVyeSBmYXVsdCBkZWZpbmVkIGZvciB0aGlzIG9wZXJhdGlvbiBoYXMgYSB1bmlxdWUgbmFtZS4KLV9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSAgICAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSBkb2VzIG5vdCBoYXZlIGEgdHlwZSBkZWZpbmVkLiBFdmVyeSBwYXJ0IG11c3Qgc3BlY2lmeSBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiBUaGUgdHlwZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBidWlsdCBpbiAiZWxlbWVudCIgb3IgInR5cGUiIGF0dHJpYnV0ZXMgb3IgbWF5IGJlIHNwZWNpZmllZCB1c2luZyBhbiBleHRlbnNpb24gYXR0cmlidXRlLgotX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFICAgICAgICAgICAgICAgID0gVGhlIHBhcnQgezB9IGhhcyBib3RoIGFuIGVsZW1lbnQgYW5kIGEgdHlwZSBkZWZpbmVkLiBFdmVyeSBwYXJ0IG11c3Qgb25seSBoYXZlIGFuIGVsZW1lbnQgb3IgYSB0eXBlIGRlZmluZWQuCi1fUEFSVF9JTlZBTElEX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgcGFydCB7MH0gaGFzIGFuIGludmFsaWQgdmFsdWUgezF9IGRlZmluZWQgZm9yIGl0cyBlbGVtZW50LiBFbGVtZW50IGRlY2xhcmF0aW9ucyBtdXN0IHJlZmVyIHRvIHZhbGlkIHZhbHVlcyBkZWZpbmVkIGluIGEgc2NoZW1hLgotX1BBUlRfSU5WQUxJRF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHBhcnQgezB9IGhhcyBhbiBpbnZhbGlkIHZhbHVlIHsxfSBkZWZpbmVkIGZvciBpdHMgdHlwZS4gVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4KLV9EVVBMSUNBVEVfT1BFUkFUSU9OX0ZPUl9QT1JUVFlQRSAgICAgICAgICA9IEFuIG9wZXJhdGlvbiB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgZm9yIHRoZSB7MX0gcG9ydCB0eXBlLiBFdmVyeSBvcGVyYXRpb24gZGVmaW5lZCBmb3IgYSBwb3J0IHR5cGUgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuIAotX1NFUlZJQ0VfTkFNRV9BTFJFQURZX0RFRklORUQgICAgICAgICAgICAgID0gQSBTZXJ2aWNlIHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgc2VydmljZSBpbiB0aGUgV1NETCBkb2N1bWVudCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4KLV9CSU5ESU5HX05BTUVfQUxSRUFEWV9ERUZJTkVEICAgICAgICAgICAgICA9IEEgYmluZGluZyB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEV2ZXJ5IGJpbmRpbmcgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fTUVTU0FHRV9OQU1FX0FMUkVBRFlfREVGSU5FRCAgICAgICAgICAgICAgPSBBIG1lc3NhZ2Ugd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBFdmVyeSBtZXNzYWdlIGluIHRoZSBXU0RMIGRvY3VtZW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLgotX1BPUlRUWVBFX05BTUVfQUxSRUFEWV9ERUZJTkVEICAgICAgICAgICAgID0gQSBwb3J0IHR5cGUgd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBFdmVyeSBwb3J0IHR5cGUgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQgICAgICAgICAgICAgICAgPSBBbiBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBmb3IgcG9ydCB7MH0uIEVhY2ggcG9ydCBjYW4gaGF2ZSBvbmx5IG9uZSBhZGRyZXNzIGRlZmluZWQuCi1fTk9fQUREUkVTU19QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgcG9ydCB7MH0gaGFzIG5vIGFkZHJlc3MgZGVmaW5lZC4gRWFjaCBwb3J0IG11c3QgZGVmaW5lIG9uZSBhZGRyZXNzLgotX1BPUlRfTkFNRV9OT1RfVU5JUVVFICAgICAgICAgICAgICAgICAgICAgID0gQSBwb3J0IHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgcG9ydCBpbiB0aGUgV1NETCBkb2N1bWVudCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4KLV9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVUICAgICAgICAgICAgICA9IE5vIGlucHV0IG9yIG91dHB1dCBlbGVtZW50IGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoZSB7MH0gb3BlcmF0aW9uLiBBbiBpbnB1dCBlbGVtZW50LCBhbiBvdXRwdXQgZWxlbWVudCwgb3IgYm90aCBtdXN0IGJlIGRlZmluZWQgZm9yIGV2ZXJ5IG9wZXJhdGlvbi4KLV9XQVJOX1NPQVBFTkNfSU1QT1JURURfUEFSVCAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSB1c2VzIGFuIGVsZW1lbnQgb3IgdHlwZSBmcm9tIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBidXQgdGhlIG5hbWVzcGFjZSBoYXMgbm90IGJlZW4gaW1wb3J0ZWQuIFRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBzaG91bGQgYmUgaW1wb3J0ZWQgd2l0aCBhbiBpbXBvcnQgc3RhdGVtZW50IGJlZm9yZSBpdCBpcyB1c2VkLgotX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9TQ0hFTUEgICAgICAgICAgICAgID0gVGhlIGlubGluZSBzY2hlbWEgdXNlcyBhbiBlbGVtZW50IG9yIHR5cGUgZnJvbSB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiBUaGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2Ugc2hvdWxkIGJlIGltcG9ydGVkIHdpdGggYW4gaW1wb3J0IHN0YXRlbWVudCBiZWZvcmUgaXQgaXMgdXNlZC4KLV9SRUZFUkVOQ0VEX0ZJTEVfQ09OVEFJTlNfRVJST1JTICAgICAgICAgICA9IFJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHswfSkuCi1fV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgPSBBbiBvbGQgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIG5hbWVzcGFjZSBoYXMgYmVlbiBzcGVjaWZpZWQuIHswfSBpcyB0aGUgc2NoZW1hIG5hbWVzcGFjZSB0aGF0IHNob3VsZCBiZSB1c2VkLgotX0VSUk9SX01VTFRJUExFX1RZUEVTX0RFRklORUQgICAgICAgICAgICAgID0gQSB0eXBlcyBzZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gT25seSBvbmUgdHlwZXMgZWxlbWVudCBpcyBhbGxvd2VkLgotX1dBUk5fV1JPTkdfTlNfT05fSU1QT1JUICAgICAgICAgICAgICAgICAgID0gVGhlIGZpbGUgY2Fubm90IGJlIGltcG9ydGVkIGJlY2F1c2UgdGhlIG5hbWVzcGFjZSB7MH0gZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgezF9IG9mIHRoZSBpbXBvcnRlZCBkb2N1bWVudC4KLSEtLSBSZWZlcmVuY2VkIGZpbGUgZXJyb3IKLSEtLSBOb3RlIHRvIHRyYW5zbGF0b3IgLSBfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSBuZWVkcyBhIHRyYWlsaW5nIHNwYWNlIGFzIGFub3RoZXIgbWVzc2FnZSBtYXkgZm9sbG93LgotX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLiAKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbGh0dHAucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsaHR0cC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzkzOTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsaHR0cC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTICAgICAgICAgICAgICAgICAgID0gTm8gbG9jYXRpb24gaGFzIGJlZW4gc3BlY2lmaWVkIGZvciB0aGlzIGFkZHJlc3MuIEV2ZXJ5IGFkZHJlc3MgbXVzdCBoYXZlIGEgdmFsaWQgbG9jYXRpb24gc3BlY2lmaWVkLgotX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBIVFRQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYWRkcmVzcyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIEhUVFAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJiaW5kaW5nIi4KLV9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgSFRUUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgIm9wZXJhdGlvbiIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQgICAgICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIEhUVFAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50cyBhcmUgInVybFJlcGxhY2VtZW50IiBhbmQgInVybEVuY29kZWQiLgotX0VSUk9SX0lOVkFMSURfSFRUUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZS4gVGhpcyBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBIVFRQIG5hbWVzcGFjZSBmb3IgdXNlIGF0IHRoaXMgcG9pbnQuCi1fRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX0FERFJFU1MgICAgICAgICAgICAgICAgPSBBbiBIVFRQIGFkZHJlc3MgY2Fubm90IGJlIHNwZWNpZmllZCBoZXJlIGFzIHRoZSB7MH0gYmluZGluZyB0aGF0IHRoZSB7MX0gcG9ydCByZWZlcnMgdG8gZG9lcyBub3QgaGF2ZSBhbiBIVFRQIGJpbmRpbmcgZWxlbWVudCBkZWZpbmVkLiBUaGVyZSBtdXN0IGJlIGFuIEhUVFAgYmluZGluZyBlbGVtZW50IGRlZmluZWQgaW4gb3JkZXIgdG8gc3BlY2lmeSBhbiBIVFRQIGFkZHJlc3MgZm9yIGEgYmluZGluZy4KLV9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVkVSQiAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdmVyYiBkZWZpbmVkIGZvciB0aGUgSFRUUCBiaW5kaW5nIGlzIGludmFsaWQuIFRoZSBIVFRQIGJpbmRpbmcgdmVyYiBtdXN0IGJlICJHRVQiIG9yICJQT1NUIiBhbmQgaXMgY2FzZSBzZW5zaXRpdmUuCi1fRVJST1JfSU5WQUxJRF9MT0NBVElPTl9VUkkgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgbG9jYXRpb24gVVJJIGlzIGludmFsaWQgZm9yIHRoZSBIVFRQIG9wZXJhdGlvbi4gWW91IG11c3Qgc3BlY2lmeSBhIHZhbGlkIGxvY2F0aW9uIFVSSSBmb3IgZXZlcnkgSFRUUCBPcGVyYXRpb24uCi1fRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX09QRVJBVElPTiAgICAgICAgICAgICAgPSBUaGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgSFRUUCBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGFuIEhUVFAgYmluZGluZyBkZWZpbmVkLiBBbiBIVFRQIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhbiBIVFRQIG9wZXJhdGlvbiBoZXJlLgotX0VSUk9SX05PX0hUVFBPUEVSQVRJT05fRk9SX1VSTCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBvcGVyYXRpb24gdGhhdCB0aGUgezF9IEhUVFAgZWxlbWVudCBpcyBzcGVjaWZpZWQgZm9yIGRvZXMgbm90IGhhdmUgYW4gSFRUUCBvcGVyYXRpb24gZGVmaW5lZC4gQSBIVFRQIG9wZXJhdGlvbiBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGEgezF9IEhUVFAgZWxlbWVudCBoZXJlLgotX0VSUk9SX05PVF9PTkxZX0VMRU1FTlRfREVGSU5FRCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBIVFRQIGVsZW1lbnQgZGVmaW5lZCBpcyBub3QgdGhlIG9ubHkgZWxlbWVudCBkZWZpbmVkIGZvciB0aGUgaW5wdXQgZWxlbWVudC4gV2hlbiB7MH0gaXMgZGVmaW5lZCBpdCBtdXN0IGJlIHRoZSBvbmx5IGNoaWxkIGVsZW1lbnQgZGVmaW5lZCBmb3IgdGhlIGlucHV0IGVsZW1lbnQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbG1pbWUucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsbWltZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzNlN2JmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsbWltZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHNvYXAucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2Rsc29hcC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWYwM2Q3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2Rsc29hcC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1fRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgICAgICAgICAgICAgICAgICAgPSBObyBsb2NhdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWQgZm9yIHRoaXMgYWRkcmVzcy4gRXZlcnkgYWRkcmVzcyBtdXN0IGhhdmUgYSB2YWxpZCBsb2NhdGlvbiBzcGVjaWZpZWQuCi1fRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYWRkcmVzcyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX1NUWUxFICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IHN0eWxlIGRlZmluZWQgZm9yIHRoZSBTT0FQIGJpbmRpbmcgaW4gaW52YWxpZC4gVGhlIFNPQVAgYmluZGluZyBzdHlsZSBtdXN0IGJlICJycGMiIG9yICJkb2N1bWVudCIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX1VSSSAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgdHJhbnNwb3J0IFVSSSBoYXMgbm90IGJlZW4gZGVmaW5lZCBmb3IgdGhlIFNPQVAgYmluZGluZy4gWW91IG11c3Qgc3BlY2lmeSBhIHRyYW5zcG9ydCBVUkkgZm9yIGV2ZXJ5IFNPQVAgYmluZGluZy4KLV9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSAgICAgICAgICAgICAgICAgICA9IFRoZSBzdHlsZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIG9wZXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgU09BUCBvcGVyYXRpb24gc3R5bGUgbXVzdCBiZSAicnBjIiBvciAiZG9jdW1lbnQiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYmluZGluZyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIFNPQVAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJvcGVyYXRpb24iLgotX0VSUk9SX0lOVkFMSURfSEVBREVSX0JPRFlfRUxFTUVOVCAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudHMgYXJlICJib2R5IiwgImhlYWRlciIgYW5kICJoZWFkZXJmYXVsdCIuCi1fRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIFNPQVAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJmYXVsdCIuCi0KLSEtLSBBIFNPQVAgYm9keSBlbGVtZW50IGluIGEgV1NETCBkb2N1bWVudCBjYW4gaGF2ZSBhbiBhdHRyaWJ1dGUgInVzZSIgZGVmaW5lZCB0byBiZSBlaXRoZXIgbGl0ZXJhbCBvciBlbmNvZGVkLiAtLQotIS0tIFRoaXMgc3RyaW5nIGlzIHVzZWQgaW4gYW4gZXJyb3IgdGFzayBpbiBXU0FEIGlmIHRoZSBkb2N1bWVudCBzcGVjaWZpZXMgYSB1c2Ugb3RoZXIgdGhlbiBsaXRlcmFsIG9yIGVuY29kZWQuIC0tIAotIS0tIEZvciBleGFtcGxlLCBpZiB0aGUgZG9jdW1lbnQgc3BlY2lmaWVzIHRoZSB1c2Ugb2YgdGhlIFNPQVAgYm9keSBhcyAic2ltcGxlIiB0aGUgb3V0cHV0IHN0cmluZyBzaG91bGQgYmU6ICAgIC0tCi0hLS0gVGhlICdzaW1wbGUnIHVzZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGJvZHkgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gICAgICAgICAgICAgICAgLS0KLV9FUlJPUl9JTlZBTElEX0JPRFlfVVNFICAgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdXNlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgYm9keSBpcyBpbnZhbGlkLiBUaGUgdXNlIG11c3QgYmUgbGl0ZXJhbCBvciBlbmNvZGVkLgotX0VSUk9SX0lOVkFMSURfQk9EWV9FTkNPRElOR19TVFlMRSAgICAgICAgICAgICAgID0gVGhlcmUgaXMgbm8gZW5jb2Rpbmcgc3R5bGUgVVJJIGRlZmluZWQgZm9yIHRoZSBTT0FQIGJvZHkuIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIFVSSSBmb3IgdGhlIGVuY29kaW5nIHN0eWxlIHdoZW4gdGhlIHVzZSBpcyBlbmNvZGVkLgotX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCAgICAgICAgICAgICAgID0gVGhlIHswfSBwYXJ0IHNwZWNpZmllZCBhcyBhIHBhcnQgZm9yIHRoZSBTT0FQIGJvZHkgaXMgdW5kZWZpbmVkLiAgWW91IGNhbiBvbmx5IHNwZWNpZnkgZGVmaW5lZCBwYXJ0cy4KLV9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9OT1RfVFlQRSAgICAgICAgICAgICAgICA9IFRoZSB7MH0gcGFydCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBkZWZpbmVkIGFuZCBoYXMgYmVlbiBzcGVjaWZpZWQgZm9yIGEgU09BUCBib2R5IHdpdGggaXRzIHVzZSBlbmNvZGVkLiBXaGVuIHVzZSBpcyBlbmNvZGVkIG9uIGEgU09BUCBib2R5LCBhbGwgcGFydHMgZGVmaW5lZCBtdXN0IG9ubHkgY29udGFpbiBhIHZhbGlkIHR5cGUuCi1fRVJST1JfSU5WQUxJRF9TT0FQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgY2Fubm90IGJlIHNwZWNpZmllZCBoZXJlLiBUaGlzIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gdGhlIFNPQVAgbmFtZXNwYWNlIGZvciB1c2UgYXQgdGhpcyBwb2ludC4KLV9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQUREUkVTUyAgICAgICAgICAgICAgICA9IEEgU09BUCBhZGRyZXNzIGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZSBhcyB0aGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgezF9IHBvcnQgcmVmZXJzIHRvIGRvZXMgbm90IGhhdmUgYSBTT0FQIGJpbmRpbmcgZWxlbWVudCBkZWZpbmVkLiBUaGVyZSBtdXN0IGJlIGEgU09BUCBiaW5kaW5nIGVsZW1lbnQgZGVmaW5lZCBpbiBvcmRlciB0byBzcGVjaWZ5IGEgU09BUCBhZGRyZXNzIGZvciBhIGJpbmRpbmcuCi1fRVJST1JfSEVBREVSX01FU1NBR0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IG1lc3NhZ2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgdW5kZWZpbmVkLiBUaGUgbWVzc2FnZSBzcGVjaWZpZWQgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LgotX0VSUk9SX0hFQURFUl9QQVJUX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBwYXJ0IHNwZWNpZmllZCBpbiBtZXNzYWdlIHsxfSBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIHVuZGVmaW5lZC4gRW5zdXJlIHRoZSBwYXJ0IGlzIGRlZmluZWQgaW4gdGhlIHsxfSBtZXNzYWdlLgotX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSB1c2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhcyBsaXRlcmFsIG9yIGVuY29kZWQuCi1fRVJST1JfSEVBREVSX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEICAgICAgICAgICAgPSBUaGUgZW5jb2Rpbmcgc3R5bGUgZm9yIHRoZSBTT0FQIGhlYWRlciBpcyBub3Qgc3BlY2lmaWVkLiBXaGVuIHRoZSB1c2UgaXMgZW5jb2RlZCB0aGUgZW5jb2Rpbmcgc3R5bGUgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBVUkkuCi1fRVJST1JfSEVBREVSX05BTUVTUEFDRV9VTkRFRklORUQgICAgICAgICAgICAgICAgPSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgYSBuYW1lc3BhY2UgVVJJIG11c3QgYmUgZGVmaW5lZC4KLV9FUlJPUl9IRUFERVJGQVVMVF9NRVNTQUdFX1VOREVGSU5FRCAgICAgICAgICAgICA9IFRoZSB7MH0gbWVzc2FnZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGhlYWRlciBmYXVsdCBpcyB1bmRlZmluZWQuIFRoZSBtZXNzYWdlIHNwZWNpZmllZCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQuCi1fRVJST1JfSEVBREVSRkFVTFRfUEFSVF9VTkRFRklORUQgICAgICAgICAgICAgICAgPSBUaGUgezB9IHBhcnQgc3BlY2lmaWVkIGluIG1lc3NhZ2UgezF9IGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgdW5kZWZpbmVkLiBFbnN1cmUgdGhlIHBhcnQgaXMgZGVmaW5lZCBpbiB0aGUgezF9IG1lc3NhZ2UuIAotX0VSUk9SX0hFQURFUkZBVUxUX1VTRV9VTkRFRklORUQgICAgICAgICAgICAgICAgID0gVGhlIHswfSB1c2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhcyBsaXRlcmFsIG9yIGVuY29kZWQuCi1fRVJST1JfSEVBREVSRkFVTFRfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQgICAgICAgPSBUaGUgZW5jb2Rpbmcgc3R5bGUgZm9yIHRoZSBTT0FQIGhlYWRlciBmYXVsdCBpcyBub3Qgc3BlY2lmaWVkLiBXaGVuIHRoZSB1c2UgaXMgZW5jb2RlZCB0aGUgZW5jb2Rpbmcgc3R5bGUgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBVUkkuCi1fRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCAgICAgICAgICAgPSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgYSBuYW1lc3BhY2UgVVJJIG11c3QgYmUgZGVmaW5lZC4KLV9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUUgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gbmFtZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGZhdWx0IGlzIGludmFsaWQuIFRoZSBuYW1lIHNwZWNpZmllZCBtdXN0IGJlIHsxfSwgdGhlIG5hbWUgZnJvbSB0aGUgZmF1bHQgcGFyZW50IGVsZW1lbnQuCi1fRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX09QRVJBVElPTiAgICAgICAgICAgICAgPSBUaGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgU09BUCBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGEgU09BUCBiaW5kaW5nIGRlZmluZWQuIEEgU09BUCBiaW5kaW5nIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBkZWZpbmUgYSBTT0FQIG9wZXJhdGlvbiBoZXJlLgotX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9CT0RZICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIFNPQVAgYm9keSBpcyBzcGVjaWZpZWQgZm9yIGRvZXMgbm90IGhhdmUgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4gQSBTT0FQIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhIFNPQVAgYm9keSBoZXJlLgotX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIgICAgICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIFNPQVAgaGVhZGVyIGlzIHNwZWNpZmllZCBmb3IgZG9lcyBub3QgaGF2ZSBhIFNPQVAgYmluZGluZyBkZWZpbmVkLiBBIFNPQVAgYmluZGluZyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGEgU09BUCBoZWFkZXIgaGVyZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHVpLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHVpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMjIzNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGx1aS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIS0tIEFudCBVSQotX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiAgICAgICAgICAgICAgICAgID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1fVUlfRVJST1JfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBFUlJPUiAgCi1fVUlfV0FSTklOR19NQVJLRVIgICAgICAgICAgICAgICAgICAgICAgICAgPSBXQVJOSU5HCi1fVUlfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBWQUxJRAotX1VJX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gSU5WQUxJRAotX1VJX0FDVElPTl9WQUxJREFUSU5HX0ZJTEUgICAgICAgICAgICAgICAgID0gVmFsaWRhdGluZyB7MH0KLQotX0VSUk9SX05PX0ZJTEVfU1BFQ0lGSUVEICAgICAgICAgICAgICAgICAgID0gVW5hYmxlIHRvIHJ1biBXU0RMIFZhbGlkYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGZpbGUuCi0KLV9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX0ZJTEUgICAgICAgICAgICAgICA9IFVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgV1NETCBmaWxlIHswfS4gezF9Ci1fRVhDX1dTRExfRkFJTF9PTl9FUlJPUiAgICAgICAgICAgICAgICAgICAgPSBUaGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZC4gKEZhaWwgT24gRXJyb3IgaXMgZW5hYmxlZC4pCi0KLV9FUlJPUl9VTkFCTEVfVE9fTE9BRF9FWFRfVkFMSURBVE9SICAgICAgICA9IFVuYWJsZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IgZm9yIG5hbWVzcGFjZSB7MH0uIHsxfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODc3NWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy13c2RsIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLWh0dHAiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtbWltZSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1zb2FwIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy93M2MvZG9tLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2YyOTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluCi13c2RsLmphcgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotb3JnLmVjbGlwc2Uud3N0LndzZGxfMS4wLjAuamFyCi1vcmcuZWNsaXBzZS53c3Qud3NkbC5wYXRjaAotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzUzYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZWU2NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotI01vbiBNYXIgMDUgMDg6NTc6MTkgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9lbnVtX2NvbnN0YW50PTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZXhwbGljaXRfY29uc3RydWN0b3JfY2FsbD01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX21ldGhvZF9pbnZvY2F0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fcXVhbGlmaWVkX2FsbG9jYXRpb25fZXhwcmVzc2lvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXNzaWdubWVudD0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0yMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0yMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29uZGl0aW9uYWxfZXhwcmVzc2lvbj0zNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZXhwcmVzc2lvbnNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0zNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTY4Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTg0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj04NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZV9zaGlmdGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPWVuZF9vZl9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9jb25zdGFudD1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9zd2l0Y2g9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfbGluZV9jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Vsc2VfaW5faWZfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X21ldGhvZF9ib2R5PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2Vsc2Vfc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZW1wdHlfYXJyYXlfaW5pdGlhbGl6ZXJfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2ltcGxlX2lmX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF90aGVuX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5saW5lU3BsaXQ9MTQwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2VtcHR5X2xpbmVzX3RvX3ByZXNlcnZlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5wdXRfZW1wdHlfc3RhdGVtZW50X29uX25ld19saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXNwYWNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5zaXplPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTQ2ZDc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBNYXIgMDUgMDg6NTc6MjAgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1mb3JtYXR0ZXJfcHJvZmlsZT1fRU1GQ29kZUZvcm1hdHRlci5wcm9maWxlCi1mb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOTgzZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4yLjEwMS5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbgotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmdlbmVyYXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5leHRlbnNpYmlsaXR5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ajt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMy4wLjApIgotSW1wb3J0LVBhY2thZ2U6IGNvbS5pYm0uaWN1LnV0aWw7IHZlcnNpb249IjMuOCIgCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZGRlYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIG1vZGVsLwotamFycy5jb21waWxlLm9yZGVyID0gLgotc291cmNlLi4gPSBzcmMtaHR0cC8sXAotICAgICAgICAgICAgICAgICAgc3JjLW1pbWUvLFwKLSAgICAgICAgICAgICAgICAgIHNyYy1zb2FwLyxcCi0gICAgICAgICAgICAgICAgICBzcmMtd3NkbC8KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbCxcCi0gICAgICAgICAgICAgICBzY2hlbWEvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2NvbXBvbmVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NjE5YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIKLQluYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+Ci0JPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+PC9jb21wb25lbnQtZGVwZW5kcz4KLQk8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgZnJhZ21lbnQ9ImZhbHNlIiAvPgotCTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBmcmFnbWVudD0iZmFsc2UiIC8+Ci0JPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgZnJhZ21lbnQ9ImZhbHNlIiAvPgotCTxwbHVnaW4gaWQ9Im9yZy53c2RsNGoiIGZyYWdtZW50PSJmYWxzZSIgLz4KLQk8cGFja2FnZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgYXBpPSJmYWxzZSI+Ci0JCTx0eXBlIG5hbWU9IkJpbmRpbmciICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkKLQkJPHR5cGUgbmFtZT0iQmluZGluZ0ZhdWx0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iQmluZGluZ0lucHV0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iQmluZGluZ09wZXJhdGlvbiIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQkKLQkJPHR5cGUgbmFtZT0iQmluZGluZ091dHB1dCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkRlZmluaXRpb24iICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotICAgIAk8dHlwZSBuYW1lPSJFeHRlbnNpYmlsaXR5RWxlbWVudCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkV4dGVuc2libGVFbGVtZW50IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iRmF1bHQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJJbXBvcnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCQotCQk8dHlwZSBuYW1lPSJJbnB1dCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQkJCi0JCTx0eXBlIG5hbWU9Ik1lc3NhZ2UiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJNZXNzYWdlUmVmZXJlbmNlIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQotCQk8dHlwZSBuYW1lPSJOYW1lc3BhY2UiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCi0JCTx0eXBlIG5hbWU9Ik9wZXJhdGlvbiIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQotICAgIAk8dHlwZSBuYW1lPSJPdXRwdXQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCQotICAgICAJPHR5cGUgbmFtZT0iUGFydCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQkJCi0JCTx0eXBlIG5hbWU9IlBvcnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCi0JCTx0eXBlIG5hbWU9IlBvcnRUeXBlIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iU2VydmljZSIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IlR5cGVzIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iV1NETEVsZW1lbnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJXU0RMRmFjdG9yeSIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQotPCEtLQk8dHlwZSBuYW1lPSJXU0RMUGx1Z2luIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4tLT4KLQkJPHR5cGUgbmFtZT0iWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkKLQk8L3BhY2thZ2U+Ci0JPHBhY2thZ2UgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCIgYXBpPSJmYWxzZSI+Ci0JCTx0eXBlIG5hbWU9IldTRExDb25zdGFudHMiIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci08IS0tCTx0eXBlIG5hbWU9IkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4gLS0+CQkKLTwhLS0JPHR5cGUgbmFtZT0iRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkiIC8+LS0+CQotPCEtLQk8dHlwZSBuYW1lPSJXU0RMUmVzb3VyY2VJbXBsIiBzdWJjbGFzcz0iZmFsc2UiLz4tLT4KLQk8L3BhY2thZ2U+Ci0JCi08IS0tIHRoZXNlIHBsdWdpbidzIHRvIGJlIHByb3ZpZGVkIHdpdGggbm9uIEFQSSBkaXNjbGFpbWVycyAtLT4KLTwhLS0JCi0JPHBhY2thZ2UgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiBhcGk9ImZhbHNlIj4KLQkJPHR5cGUgbmFtZT0iU09BUEJvZHkiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBIZWFkZXJGYXVsdCIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUEFkZHJlc3MiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBGYWN0b3J5IiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQSGVhZGVyIiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQQmluZGluZyIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUEhlYWRlckJhc2UiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBGYXVsdCIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUE9wZXJhdGlvbiIgLz4KLQk8L3BhY2thZ2U+Ci0KLQk8cGFja2FnZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPgotCQk8dHlwZSBuYW1lPSJNSU1FQ29udGVudCIgLz4KLQkJPHR5cGUgbmFtZT0iTUlNRVBhY2thZ2UiIC8+Ci0JCTx0eXBlIG5hbWU9Ik1JTUVNdWx0aXBhcnRSZWxhdGVkIiAvPgotCQk8dHlwZSBuYW1lPSJNSU1FUGFydCIgLz4KLQkJPHR5cGUgbmFtZT0iTUlNRU1pbWVYbWwiIC8+Ci0JCTx0eXBlIG5hbWU9Ik1JTUVGYWN0b3J5IiAvPgotCTwvcGFja2FnZT4KLQotCTxwYWNrYWdlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+Ci0JCTx0eXBlIG5hbWU9IkhUVFBGYWN0b3J5IiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQT3BlcmF0aW9uIiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQVXJsRW5jb2RlZCIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUFBhY2thZ2UiIC8+Ci0JCTx0eXBlIG5hbWU9IkhUVFBBZGRyZXNzIiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQVXJsUmVwbGFjZW1lbnQiIC8+Ci0JCTx0eXBlIG5hbWU9IkhUVFBCaW5kaW5nIiAvPgotCTwvcGFja2FnZT4KLS0tPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2dyYWJqYXJzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvZ3JhYmphcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDZlZGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvZ3JhYmphcnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHByb2plY3QgZGVmYXVsdD0iY29weUphcnMiIGJhc2VkaXI9Ii4iPgotCi0JPHByb3BlcnR5IG5hbWU9InBsdWdpbk5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIvPgotCTxwcm9wZXJ0eSBuYW1lPSJ2ZXJzaW9uIiB2YWx1ZT0iIi8+Ci0KLQk8dGFyZ2V0IG5hbWU9ImNvcHlKYXJzIiBpZj0iZG93bmxvYWRQYXRoIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb3B5SmFyczIiLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNvcHlKYXJzMiIgaWY9InBsdWdpbnNQYXRoIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb3B5SmFyczMiLz4KLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0iY29weUphcnMzIiBpZj0icGx1Z2luTmFtZSI+Ci0JCTxjb3B5IHRvZGlyPSIke3BsdWdpbnNQYXRofS8ke3BsdWdpbk5hbWV9JHt2ZXJzaW9ufS9saWIiIG92ZXJ3cml0ZT0idHJ1ZSI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZG93bmxvYWRQYXRofS8ke3BsdWdpbk5hbWV9JHt2ZXJzaW9ufSI+Ci0JCQkJPGZpbGVuYW1lIG5hbWU9IiouamFyIi8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvY29weT4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXBKYXJzIiBpZj0icGx1Z2luc1BhdGgiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFudXBKYXJzMiIvPgotCTwvdGFyZ2V0PgotCi0JPHRhcmdldCBuYW1lPSJjbGVhbnVwSmFyczIiIGlmPSJwbHVnaW5OYW1lIj4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iJHtwbHVnaW5zUGF0aH0vJHtwbHVnaW5OYW1lfSR7dmVyc2lvbn0vbGliIj4KLQkJCQk8ZmlsZW5hbWUgbmFtZT0iKi5qYXIiLz4KLQkJCTwvZmlsZXNldD4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbGliLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkyZjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbGliLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0qLmphcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWM0YWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5lY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Imh0dHAiCi0gICAgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL0hUVFAiIG5zUHJlZml4PSJodHRwIj4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQQmluZGluZyIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JSFRUUEJpbmRpbmciPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZXJiIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkhUVFBPcGVyYXRpb24iIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSUhUVFBPcGVyYXRpb24iPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQVXJsUmVwbGFjZW1lbnQiIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSUhUVFBVcmxSZXBsYWNlbWVudCIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkhUVFBVcmxFbmNvZGVkIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lIVFRQVXJsRW5jb2RlZCIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkhUVFBBZGRyZXNzIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lIVFRQQWRkcmVzcyI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxvY2F0aW9uVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklIVFRQQWRkcmVzcyIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklIVFRQQmluZGluZyIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklIVFRQT3BlcmF0aW9uIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUFVybEVuY29kZWQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUFVybFJlcGxhY2VtZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5nZW5tb2RlbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMyNmY5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZ2VubW9kZWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cCIKLSAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMiCi0gICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIG1vZGVsTmFtZT0iSFRUUCIgZWRpdFBsdWdpbkNsYXNzPSIiIGVkaXRvclBsdWdpbkNsYXNzPSIiCi0gICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0iV1NETC5nZW5tb2RlbCMvL3dzZGwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5IVFRQLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJIVFRQIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIgotICAgICAgdXRpbGl0eVBhY2thZ2VTdWZmaXg9ImludGVybmFsLnV0aWwiIGVjb3JlUGFja2FnZT0iSFRUUC5lY29yZSMvIj4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSFRUUEJpbmRpbmciPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIEhUVFAuZWNvcmUjLy9IVFRQQmluZGluZy92ZXJiIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9IVFRQT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBIVFRQLmVjb3JlIy8vSFRUUE9wZXJhdGlvbi9sb2NhdGlvblVSSSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSFRUUFVybFJlcGxhY2VtZW50Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0hUVFBVcmxFbmNvZGVkIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0hUVFBBZGRyZXNzIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBIVFRQLmVjb3JlIy8vSFRUUEFkZHJlc3MvbG9jYXRpb25VUkkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0lIVFRQQWRkcmVzcyIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9JSFRUUEJpbmRpbmciLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSUhUVFBPcGVyYXRpb24iLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSUhUVFBVcmxFbmNvZGVkIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0lIVFRQVXJsUmVwbGFjZW1lbnQiLz4KLSAgPC9nZW5QYWNrYWdlcz4KLTwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAubWRsIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLm1kbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2MzBmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAubWRsCisrKyAvZGV2L251bGwKQEAgLTEsNTQ3MSArMCwwIEBACi0KLShvYmplY3QgUGV0YWwKLSAgICB2ZXJzaW9uICAgIAk0MgotICAgIF93cml0dGVuICAgCSJSb3NlIDQuNS44MTYzLjMiCi0gICAgY2hhclNldCAgICAJMCkKLQotKG9iamVjdCBEZXNpZ24gIkxvZ2ljYWwgVmlldyIKLSAgICBpc191bml0ICAgIAlUUlVFCi0gICAgaXNfbG9hZGVkICAJVFJVRQotICAgIGRlZmF1bHRzICAgCShvYmplY3QgZGVmYXVsdHMKLQlyaWdodE1hcmdpbiAJMC4yNTAwMDAKLQlsZWZ0TWFyZ2luIAkwLjI1MDAwMAotCXRvcE1hcmdpbiAgCTAuMjUwMDAwCi0JYm90dG9tTWFyZ2luIAkwLjUwMDAwMAotCXBhZ2VPdmVybGFwIAkwLjI1MDAwMAotCWNsaXBJY29uTGFiZWxzIAlUUlVFCi0JYXV0b1Jlc2l6ZSAJVFJVRQotCXNuYXBUb0dyaWQgCVRSVUUKLQlncmlkWCAgICAgIAkxNgotCWdyaWRZICAgICAgCTE2Ci0JZGVmYXVsdEZvbnQgCShvYmplY3QgRm9udAotCSAgICBzaXplICAgICAgIAkxMAotCSAgICBmYWNlICAgICAgIAkiQXJpYWwiCi0JICAgIGJvbGQgICAgICAgCUZBTFNFCi0JICAgIGl0YWxpY3MgICAgCUZBTFNFCi0JICAgIHVuZGVybGluZSAgCUZBTFNFCi0JICAgIHN0cmlrZSAgICAgCUZBTFNFCi0JICAgIGNvbG9yICAgICAgCTAKLQkgICAgZGVmYXVsdF9jb2xvciAJVFJVRSkKLQlzaG93TWVzc2FnZU51bSAJMQotCXNob3dDbGFzc09mT2JqZWN0IAlUUlVFCi0Jbm90YXRpb24gICAJIlVuaWZpZWQiKQotICAgIHJvb3RfdXNlY2FzZV9wYWNrYWdlIAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJVc2UgQ2FzZSBWaWV3IgotCXF1aWQgICAgICAgCSIzQUJGRDlBNzAxNTEiCi0JZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQlnbG9iYWwgICAgIAlUUlVFCi0JbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgVXNlQ2FzZURpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzQUJGRDlBNzAxOEMiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHJvb3RfY2F0ZWdvcnkgCShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIkxvZ2ljYWwgVmlldyIKLQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTUwIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCXN1YnN5c3RlbSAgCSJDb21wb25lbnQgVmlldyIKLQlxdWlkdSAgICAgIAkiM0FCRkQ5QTcwMTUyIgotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgImh0dHAiCi0JCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkibnNQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiaHR0cCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL0hUVFAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicHJlZml4IgotCQkJdmFsdWUgICAgICAJIkhUVFAiKSkKLQkJcXVpZCAgICAgICAJIjNBQkZEOUFEMDFGOCIKLQkJZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkJICAgIChvYmplY3QgQ2xhc3MgIkhUVFBCaW5kaW5nIgotCQkJcXVpZCAgICAgICAJIjNBQkZFNTdDMDEzNiIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUU1RkYxRDAwMTkiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQzRjEwM0MwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQQmluZGluZyIKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQzQTcwMkVCIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInZlcmIiCi0JCQkJcXVpZCAgICAgICAJIjNBQkZFNjBEMDBEQiIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJIVFRQT3BlcmF0aW9uIgotCQkJcXVpZCAgICAgICAJIjNBQkZFNkFFMDA1MCIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUU1RkY0QjAzN0MiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0NDYwMkNDIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQT3BlcmF0aW9uIgotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDNGRjAyQkIiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibG9jYXRpb25VUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBQkZFNzBEMDE0NyIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJIVFRQVXJsUmVwbGFjZW1lbnQiCi0JCQlxdWlkICAgICAgIAkiM0FCRkVBMUEwMTdDIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTcyOEI4MDJDMyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MDk4NDREMjAyQzUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBVcmxSZXBsYWNlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQ0OTYwMEQ4IikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJIVFRQVXJsRW5jb2RlZCIKLQkJCXF1aWQgICAgICAgCSIzQUJGRUE2RDAyOTQiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFNzI4RDUwMDk0IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0NDkxMDAwOSIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUFVybEVuY29kZWQiCi0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDU3MDA2MyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUEFkZHJlc3MiCi0JCQlxdWlkICAgICAgIAkiM0FDM0JGMjUwMEY1IgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTVGRUE5MDFCNyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MDk4NDBEODAwQzQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBBZGRyZXNzIgotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDA4OTAxQTEiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibG9jYXRpb25VUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBQzNCRkE3MDEyRSIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJSFRUUEFkZHJlc3MiCi0JCQlxdWlkICAgICAgIAkiNDA5ODQwODkwMUExIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MiCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0MEE0MDEzQSIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJSFRUUEJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiNDA5ODQzQTcwMkVCIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmciCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0M0NBMDE3NyIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJSFRUUE9wZXJhdGlvbiIKLQkJCXF1aWQgICAgICAgCSI0MDk4NDNGRjAyQkIiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDQxMzAyMDQiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBVcmxFbmNvZGVkIgotCQkJcXVpZCAgICAgICAJIjQwOTg0NDU3MDA2MyIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDQ2RDAyMUMiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBVcmxSZXBsYWNlbWVudCIKLQkJCXF1aWQgICAgICAgCSI0MDk4NDQ5NjAwRDgiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQiCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0NEFDMDFBQiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpKQotCQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkJICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJQb3J0IgotCQkJcXVpZCAgICAgICAJIjNBQzExRTUyMDFGQiIKLQkJCXRpdGxlICAgICAgCSJQb3J0IgotCQkJem9vbSAgICAgICAJMTAwCi0JCQltYXhfaGVpZ2h0IAkyODM1MAotCQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJCW9yaWdpbl94ICAgCTAKLQkJCW9yaWdpbl95ICAgCTAKLQkJCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQQWRkcmVzcyIgQDEKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDY3MiwgNzg0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDcxLCA3MDMpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDAyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBBZGRyZXNzIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDM0JGMjUwMEY1IgotCQkJCXdpZHRoICAgICAgCTQyMAotCQkJCWhlaWdodCAgICAgCTE4NgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBBZGRyZXNzIiBAMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNjcyLCAyODgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMzgsIDIyOSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDY4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklIVFRQQWRkcmVzcyIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMzgsIDE3OSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDY4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDA4OTAxQTEiCi0JCQkJd2lkdGggICAgICAJMTA4NgotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDMKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDBEODAwQzQiCi0JCQkJY2xpZW50ICAgICAJQDEKLQkJCQlzdXBwbGllciAgIAlAMgotCQkJCWxpbmVfc3R5bGUgCTApKSkKLQkJICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJFeHRlbnNpYmlsaXR5IgotCQkJcXVpZCAgICAgICAJIjNBRTVGRTNCMDM3QiIKLQkJCXRpdGxlICAgICAgCSJFeHRlbnNpYmlsaXR5IgotCQkJem9vbSAgICAgICAJMTAwCi0JCQltYXhfaGVpZ2h0IAkyODM1MAotCQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJCW9yaWdpbl94ICAgCTAKLQkJCW9yaWdpbl95ICAgCTAKLQkJCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDQKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDI3MiwgMTI4KQotCQkJCWZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJCSAgICBpdGFsaWNzICAgIAlUUlVFKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNzAsIDUzKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQwNAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJFeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkJCQl3aWR0aCAgICAgIAk0MjIKLQkJCQloZWlnaHQgICAgIAkxNzQKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBBZGRyZXNzIiBANQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyNzIsIDQ4MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDUKLQkJCQkgICAgbG9jYXRpb24gICAJKDEyOCwgNDI4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQQWRkcmVzcyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzNCRjI1MDBGNSIKLQkJCQl3aWR0aCAgICAgIAkzMDYKLQkJCQloZWlnaHQgICAgIAkxMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBCaW5kaW5nIiBANgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg0ODAsIDY0MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDYKLQkJCQkgICAgbG9jYXRpb24gICAJKDM0NCwgNTg4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI3MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQQmluZGluZyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNTdDMDEzNiIKLQkJCQl3aWR0aCAgICAgIAkyOTAKLQkJCQloZWlnaHQgICAgIAkxMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRUcmVlVmlldyAiIiBANwotCQkJCWxvY2F0aW9uICAgCSgyNzIsIDMwNSkKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSAgICAoMjcyLCAzMDUpCi0JCQkJICAgICgyNzIsIDIxNSkpKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDgKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUU1RkVBOTAxQjciCi0JCQkJY2xpZW50ICAgICAJQDUKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDI3MiwgNDE2KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNzIsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUU1RkYxRDAwMTkiCi0JCQkJY2xpZW50ICAgICAJQDYKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDQ3NSwgNTc2KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0NzUsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUE9wZXJhdGlvbiIgQDEwCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDY3MiwgODE2KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCQkgICAgbG9jYXRpb24gICAJKDUxOCwgNzY0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTMwOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQT3BlcmF0aW9uIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkU2QUUwMDUwIgotCQkJCXdpZHRoICAgICAgCTMyNgotCQkJCWhlaWdodCAgICAgCTEyOAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDExCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNUZGNEIwMzdDIgotCQkJCWNsaWVudCAgICAgCUAxMAotCQkJCXN1cHBsaWVyICAgCUA0Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoNjU2LCA3NTIpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDY1NiwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDcpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQVXJsUmVwbGFjZW1lbnQiIEAxMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg4MTYsIDk5MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEyCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2MDUsIDk0MSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MjIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUFVybFJlcGxhY2VtZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkVBMUEwMTdDIgotCQkJCXdpZHRoICAgICAgCTQ0MAotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDEzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNzI4QjgwMkMzIgotCQkJCWNsaWVudCAgICAgCUAxMgotCQkJCXN1cHBsaWVyICAgCUA0Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoODY5LCA5MjkpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDg2OSwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDcpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQVXJsRW5jb2RlZCIgQDE0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDEwNzIsIDExNjgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoOTAwLCAxMTE3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM0NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQVXJsRW5jb2RlZCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFQTZEMDI5NCIKLQkJCQl3aWR0aCAgICAgIAkzNjIKLQkJCQloZWlnaHQgICAgIAkxMjYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTcyOEQ1MDA5NCIKLQkJCQljbGllbnQgICAgIAlAMTQKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDExMDMsIDExMDUpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDExMDMsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KSkpCi0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiQmluZGluZyIKLQkJCXF1aWQgICAgICAgCSIzQUU3MkE3MDAwQTkiCi0JCQl0aXRsZSAgICAgIAkiQmluZGluZyIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUEJpbmRpbmciIEAxNgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNTc2LCA1OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDQwLCA1NDApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjcyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBCaW5kaW5nIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkU1N0MwMTM2IgotCQkJCXdpZHRoICAgICAgCTI5MAotCQkJCWhlaWdodCAgICAgCTEyOAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUE9wZXJhdGlvbiIgQDE3Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjk2LCA2MDgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNwotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTQ5NSwgNTI3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQwMgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQT3BlcmF0aW9uIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkU2QUUwMDUwIgotCQkJCXdpZHRoICAgICAgCTQyMAotCQkJCWhlaWdodCAgICAgCTE4NgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUFVybFJlcGxhY2VtZW50IiBAMTgKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE2MTYsIDE4MDgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTQwNSwgMTc1NykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MjIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUFVybFJlcGxhY2VtZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkVBMUEwMTdDIgotCQkJCXdpZHRoICAgICAgCTQ0MAotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUFVybEVuY29kZWQiIEAxOQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNjA4LCAxNTIwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTkKLQkJCQkgICAgbG9jYXRpb24gICAJKDQzNiwgMTQ2OSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUFVybEVuY29kZWQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUJGRUE2RDAyOTQiCi0JCQkJd2lkdGggICAgICAJMzYyCi0JCQkJaGVpZ2h0ICAgICAJMTI2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUEJpbmRpbmciIEAyMAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNTc2LCAxNjApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNTAsIDEwMSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDUyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklIVFRQQmluZGluZyIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNTAsIDUxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwNTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0M0E3MDJFQiIKLQkJCQl3aWR0aCAgICAgIAkxMDcwCi0JCQkJaGVpZ2h0ICAgICAJMjQyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjEKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDNGMTAzQzAiCi0JCQkJY2xpZW50ICAgICAJQDE2Ci0JCQkJc3VwcGxpZXIgICAJQDIwCi0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQT3BlcmF0aW9uIiBAMjIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE2OTYsIDE2MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMTUwLCAxMDEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA5MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUE9wZXJhdGlvbiIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTE1MCwgNTEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA5MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQzRkYwMkJCIgotCQkJCXdpZHRoICAgICAgCTExMTAKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDQ2MDJDQyIKLQkJCQljbGllbnQgICAgIAlAMTcKLQkJCQlzdXBwbGllciAgIAlAMjIKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBVcmxFbmNvZGVkIiBAMjQKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDYwOCwgMTEwNCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0NCwgMTA0NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMTI4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklIVFRQVXJsRW5jb2RlZCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDQsIDk5NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMTI4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ1NzAwNjMiCi0JCQkJd2lkdGggICAgICAJMTE0NgotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI1Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQ0OTEwMDA5IgotCQkJCWNsaWVudCAgICAgCUAxOQotCQkJCXN1cHBsaWVyICAgCUAyNAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUFVybFJlcGxhY2VtZW50IiBAMjYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE1ODQsIDEzNzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoOTgxLCAxMzE3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEyMDYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSUhUVFBVcmxSZXBsYWNlbWVudCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoOTgxLCAxMjY3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEyMDYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDk2MDBEOCIKLQkJCQl3aWR0aCAgICAgIAkxMjI0Ci0JCQkJaGVpZ2h0ICAgICAJMjQyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjcKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDREMjAyQzUiCi0JCQkJY2xpZW50ICAgICAJQDE4Ci0JCQkJc3VwcGxpZXIgICAJQDI2Ci0JCQkJbGluZV9zdHlsZSAJMCkpKSkpCi0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIndzZGwiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS53c3Qud3NkbFxcbW9kZWxcXG9yZy5lY2xpcHNlLndzdC5XU0RMLmNhdCIKLQkJcXVpZCAgICAgICAJIjNBREZCOEU1MDIxRSIpCi0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgInhzZCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLnhzZFxcbW9kZWxcXG9yZy5lY2xpcHNlLlhTRC5jYXQiCi0JCXF1aWQgICAgICAgCSIzOUFCREM2RjAxQUEiKSkKLQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzQUJGRDlBNzAxNjMiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3OjpodHRwIiBAMjgKLQkJCWxvY2F0aW9uICAgCSgzMzYsIDIyNCkKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyOAotCQkJICAgIGxvY2F0aW9uICAgCSgxOTIsIDE0MCkKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJImh0dHAiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjNBQkZEOUFEMDFGOCIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKQotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6d3NkbCIgQDI5Ci0JCQlsb2NhdGlvbiAgIAkoNzg0LCAyMjQpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlAMjkKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjQwLCAxNDApCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ3c2RsIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQURGQjhFNTAyMUUiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OnhzZCIgQDMwCi0JCQlsb2NhdGlvbiAgIAkoMTIzMiwgMjI0KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMwCi0JCQkgICAgbG9jYXRpb24gICAJKDEwODgsIDE0MCkKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJInhzZCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiMzlBQkRDNkYwMUFBIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApKSkpKQotICAgIHJvb3Rfc3Vic3lzdGVtIAkob2JqZWN0IFN1YlN5c3RlbSAiQ29tcG9uZW50IFZpZXciCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1MiIKLQlwaHlzaWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QpCi0JcGh5c2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IE1vZHVsZV9EaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMThCIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9jZXNzX3N0cnVjdHVyZSAJKG9iamVjdCBQcm9jZXNzZXMKLQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTUzIgotCVByb2NzTkRldnMgCShsaXN0Ci0JICAgIChvYmplY3QgUHJvY2Vzc19EaWFncmFtICJEZXBsb3ltZW50IFZpZXciCi0JCXF1aWQgICAgICAgCSIzQUJGRDlBNzAxNTUiCi0JCXRpdGxlICAgICAgCSJEZXBsb3ltZW50IFZpZXciCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcHJvcGVydGllcyAJKG9iamVjdCBQcm9wZXJ0aWVzCi0JYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhQmFzZSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YUJhc2VTZXQiIDgwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhQmFzZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIkFOU0kiCi0JCQkJdmFsdWUgICAgICAJODAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiT3JhY2xlIgotCQkJCXZhbHVlICAgICAgCTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlNRTFNlcnZlciIKLQkJCQl2YWx1ZSAgICAgIAk4MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJTeWJhc2UiCi0JCQkJdmFsdWUgICAgICAJODAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiV2F0Y29tIgotCQkJCXZhbHVlICAgICAgCTgwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiSWQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUpIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lIgotCQkJdmFsdWUgICAgICAJIlZfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJUXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJJbmhlcml0U3VmZml4IgotCQkJdmFsdWUgICAgICAJIl9WIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRyb3BDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkJhc2VWaWV3cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRERMU2NyaXB0RmlsZW5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiRERMMS5TUUwiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiVkFSQ0hBUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIk51bGxzT0siCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDb21wb3NpdGVVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImZyYW1ld29yayIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcmVzZXJ2ZVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETEVsZW1lbnQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY2lmaWNhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIklETFNwZWNTZXQiIDIyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETFNwZWNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJdmFsdWUgICAgICAJMjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJUeXBlZGVmIgotCQkJCXZhbHVlICAgICAgCTU0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiRW51bWVyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiRXhjZXB0aW9uIgotCQkJCXZhbHVlICAgICAgCTYxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU3RydWN0IgotCQkJCXZhbHVlICAgICAgCTUxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiVW5pb24iCi0JCQkJdmFsdWUgICAgICAJODEpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5odHRwL3NyYy9yb3NlL2h0dHBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJRExNb2R1bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcuaHR0cC9zcmMvcm9zZS9odHRwYmluZGluZ01kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc09uZVdheSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29udGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSXNDb25zdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEhhc1JlbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkhhc1JlbFR5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1N1YnN5c3RlbSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VQcmVmaXhlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlVmFyaWFibGVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkibV8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNsYXNzVmFyaWFibGVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkic18iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRBdHRyaWJ1dGVEYXRhVHlwZSIKLQkJCXZhbHVlICAgICAgCSJpbnQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRPcGVyYXRpb25SZXR1cm5UeXBlIgotCQkJdmFsdWUgICAgICAJInZvaWQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJvb3REaXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBdXRvU3luYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNob3dDb2RlZ2VuRGxnIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRBdXRob3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jRGVmYXVsdFZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jRGVmYXVsdFNpbmNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY051bUFzdGVyaXNrcyIKLQkJCXZhbHVlICAgICAgCTApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWF4TnVtQ2hhcnMiCi0JCQl2YWx1ZSAgICAgIAk4MCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkVkaXRvclR5cGUiIDEwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVk0iCi0JCQl2YWx1ZSAgICAgIAkoIlZNVHlwZSIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1BhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0SW4iCi0JCQkJdmFsdWUgICAgICAJMTAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIldpbmRvd3NTaGVsbCIKLQkJCQl2YWx1ZSAgICAgIAkxMDEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWTVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3VuIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJNaWNyb3NvZnQiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIklCTSIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJOb0NsYXNzQ3VzdG9tRGxnIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2xvYmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJPcGVuQnJhY2VDbGFzc1N0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJPcGVuQnJhY2VNZXRob2RTdHlsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlVGFicyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVNwYWNlcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3BhY2luZ0l0ZW1zIgotCQkJdmFsdWUgICAgICAJMykKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSb3NlRGVmYXVsdENvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQXN0ZXJpc2tDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhQ29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0F1dGhvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NTaW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb2RlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNhYmxlQXV0b1N5bmMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZXh0UmVmIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSXNTaW5nbGVUaHJlYWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SXNTZWN1cmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckluY2x1ZGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVyRm9yd2FyZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldGdldEluZm8iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlc05hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdEF0dHJpYnV0ZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0UGFyYW1ldGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JIZWFkZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEludEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXREYXRlSGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvb2tpZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckNvb2tpZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZW50VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSFRNTCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlX1hNTF9ERCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ21wRmllbGQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJFbnZpcm9ubWVudFByb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbnhGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVmZXJlbmNlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJOYW1lSW5KQVIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCU2Vzc2lvblR5cGVfU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlbGVzcyIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVmdWwiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IiAyMTEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIxMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIxMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIgMjIwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMjApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIyMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZW50cmFudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJNUF9FeHRlbmRfQ01QIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk5hdGl2ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN5bmNocm9uaXplZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlRyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUHJvcGVydHlUeXBlIgotCQkJdmFsdWUgICAgICAJKCJCZWFuUHJvcGVydHlfU2V0IiA3MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQmVhblByb3BlcnR5X1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJOb3QgQSBQcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJNzIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQm91bmQiCi0JCQkJdmFsdWUgICAgICAJNzMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RyYWluZWQiCi0JCQkJdmFsdWUgICAgICAJNzQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbmRpdmlkdWFsQ2hhbmdlTWd0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZSIKLQkJCXZhbHVlICAgICAgCSgiUmVhZC9Xcml0ZV9TZXQiIDgxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkICYgV3JpdGUiCi0JCQkJdmFsdWUgICAgICAJODEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIldyaXRlIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZ1bGx5UXVhbGlmaWVkVHlwZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlByb3BlcnR5VHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQmVhblByb3BlcnR5X1NldCIgNzEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJlYW5Qcm9wZXJ0eV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTm90IEEgUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTcyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJvdW5kIgotCQkJCXZhbHVlICAgICAgCTczKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cmFpbmVkIgotCQkJCXZhbHVlICAgICAgCTc0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5kaXZpZHVhbENoYW5nZU1ndCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGUiCi0JCQl2YWx1ZSAgICAgIAkoIlJlYWQvV3JpdGVfU2V0IiA4MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCAmIFdyaXRlIgotCQkJCXZhbHVlICAgICAgCTgxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXcml0ZSBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGdWxseVF1YWxpZmllZFR5cGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSXNOYXZpZ2FibGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjM2MDAwMDAwMiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiX0lEIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSwwKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTmVzdGVkVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTmVzdGVkVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT2JqZWN0VGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT2JqZWN0VGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2NoZW1hIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9JRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIldoZXJlQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uT2ZSRUZTIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RLaW5kIgotCQkJdmFsdWUgICAgICAJKCJNZXRob2RLaW5kU2V0IiAxOTAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPdmVybG9hZElEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vUHJvY2Vzc1N0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNXcml0ZU5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNXcml0ZU5vUHJvY2Vzc1N0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTZWxmaXNoIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJUeXBlU2V0IiAxODAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnQiCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJFdmVudFNldCIgMTYwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyUmVmZXJlbmNpbmdOYW1lcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJGb3JFYWNoIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRm9yRWFjaFNldCIgMTcwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlcldoZW5DbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk1hcE1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9yZGVyTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTkwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJQcm9jZWR1cmUiCi0JCQkJdmFsdWUgICAgICAJMTkwNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcGVyYXRvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlRyaWdnZXIiCi0JCQkJdmFsdWUgICAgICAJMTkwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDYWxjdWxhdGVkIgotCQkJCXZhbHVlICAgICAgCTE5MDkpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJBRlRFUiIKLQkJCQl2YWx1ZSAgICAgIAkxODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkJFRk9SRSIKLQkJCQl2YWx1ZSAgICAgIAkxODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU1RFQUQgT0YiCi0JCQkJdmFsdWUgICAgICAJMTgwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJGb3JFYWNoU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlJPVyIKLQkJCQl2YWx1ZSAgICAgIAkxNzAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlNUQVRFTUVOVCIKLQkJCQl2YWx1ZSAgICAgIAkxNzAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCIKLQkJCQl2YWx1ZSAgICAgIAkxNjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk51bGxzQWxsb3dlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIjIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjYWxlIgotCQkJdmFsdWUgICAgICAJIjYiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzSW5kZXgiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1ByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb21wb3NpdGVVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVc2VNU1ZDIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVCYWNrdXBFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgjIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3BwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVCYWNrdXBFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3B+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3AjIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXJyb3JMaW1pdCIKLQkJCXZhbHVlICAgICAgCTMwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiJFJPU0VDUFBfU09VUkNFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUGF0aFNlcGFyYXRvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSIxMjh2eF9iIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9vbGVhblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dUZW1wbGF0ZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4cGxpY2l0SW5zdGFudGlhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1Byb3RlY3RlZEluaGVyaXRhbmNlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29tbWVudFdpZHRoIgotCQkJdmFsdWUgICAgICAJNjApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25hbEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiT3B0aW9uYWxCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25hbEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRml4ZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzc1skbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkRml4ZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzc1skbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRml4ZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKlskbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkRml4ZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKlskbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZExpc3RCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZExpc3RCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZExpc3RCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZExpc3RCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQXNzb2NpYXRpb25CeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQXNzb2NpYXRpb25CeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcmVzZXJ2ZVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbGFzc0tleSIKLQkJCXZhbHVlICAgICAgCSJjbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUHV0Qm9kaWVzSW5TcGVjIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdENvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXREZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdENvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc2lnbm1lbnRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc2lnbm1lbnRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFcXVhbGl0eU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVFcXVhbGl0eU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSZWxhdGlvbmFsVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSZWxhdGlvbmFsS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RvcmFnZU1nbXRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0UmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXJlZmVyZW5jZU9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZXJlZmVyZW5jZU9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluZGlyZWN0aW9uT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvbktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25SZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUluZGlyZWN0aW9uT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdHJlYW1WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVGhyZWVLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIktpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRnJpZW5kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZUFuZERlZmluZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVPbmx5IgotCQkJCXZhbHVlICAgICAgCTIwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRG9Ob3REZWNsYXJlIgotCQkJCXZhbHVlICAgICAgCTIwNikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcuaHR0cC9zcmMvcm9zZS9odHRwYmluZGluZ01kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXh0ZW5zaW9ubGVzc0ZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAKLXwvLyAkcGFja2FnZQotfCNpbmNsdWRlICIkZmlsZSIKLXwKLQkJCSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZVByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVPcmRlciIKLQkJCXZhbHVlICAgICAgCSJBTUlSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlIgotCQkJdmFsdWUgICAgICAJKCJJbmxpbmluZ1N0eWxlU2V0IiAyMDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbkNsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGb2xsb3dpbmdDbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwNykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUeXBlc0RlZmluZWQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVDbG9zdXJlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcuaHR0cC9zcmMvcm9zZS9odHRwYmluZGluZ01kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXh0ZW5zaW9ubGVzc0ZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAKLXwvLyAkcGFja2FnZQotfCNpbmNsdWRlICIkZmlsZSIKLXwKLQkJCSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZVByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIk9wZXJhdGlvbktpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbktpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNDb25zdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0V4cGxpY2l0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4aXRDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvZHlBbm5vdGF0aW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc09uZVdheSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcmRlcmVkIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0UmVsYXRpb25zaGlwVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlckZpZWxkU2l6ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNlbGVjdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Bc3NvY2lhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZUFyZ3VtZW50cyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kdGFyZ2V0Q2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0UmVsYXRpb25zaGlwVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlckZpZWxkU2l6ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckdldCIKLQkJCXZhbHVlICAgICAgCSIkZGF0YS5nZXQoJGtleXMpIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyU2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLnNldCgka2V5cywkdmFsdWUpIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHN1cHBsaWVyICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJKCJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZVNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVF1YWxpZmllZEdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZEdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZFNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVRdWFsaWZpZWRTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0UmVsYXRpb25zaGlwVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NvY0NsYXNzR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc1NldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0QXR0cmlidXRlVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlckZpZWxkU2l6ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keVJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5SXNPblNlYXJjaExpc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc05hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRlbnQiCi0JCQl2YWx1ZSAgICAgIAkyKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCSI1LjAiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQ2xhc3NUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQ2xhc3NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZV9QYXJ0IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29ubmVjdGlvbl9QYXJ0IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ2xhc3NfRmFjdG9yeSIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09iamVjdEZ1bmN0aW9uYWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluYW1pYyIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkR5bmNyZWF0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlNlcmlhbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPdmVycmlkZUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfREFUQV9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmllbGRHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9GSUVMRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTWVzc2FnZUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkoIk9MRUZhY3RvcnlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUZhY3RvcnlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0X2luIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTGljZW5zZWQiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDbGFzc0lEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ3RsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT0xFVHlwZUxpYiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVR5cGVMaWJJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVR5cGVMaWJNYWpvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVR5cGVMaWJNaW5vciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcFBhZ2VJRHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BhdGNoTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja0Z1bmN0aW9ucyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaERlZlZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEaXNwSWRFbnVtIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BfSURfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUludGVyZmFjZU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIklOVEVSRkFDRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJbml0SW50ZXJmYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFdmVudE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja0V2ZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50U2lua01hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQcm9wTm90aWZ5U2lua3MiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09OTkVDVElPTl9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uUG9pbnRJSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJbmhlcml0YW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNvbW1hbmRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1GQ0RlY2xhcmVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1GQ0ltcGxlbWVudHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQVRMX0RlY2xhcmVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ09NTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09NX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29ubmVjdGlvblBvaW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09OTkVDVElPTl9QT0lOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1zZ01hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByb3BlcnR5TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUFJPUEVSVFlfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDT3BlcmF0aW9uVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ09wZXJhdGlvblR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbF9PdmVycmlkZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lc3NhZ2VfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJFdmVudF9GaXJpbmdfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJFdmVudF9TaW5rX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdGRfT0xFX01ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAk2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNvbW1hbmRfUGFyc2VyIgotCQkJCXZhbHVlICAgICAgCTcpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiUHJvcGVydHlfR2V0X0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiUHJvcGVydHlfU2V0X0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiUHJvcGVydHlfTm90aWZ5X0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTEwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1hY3JvX0dlbmVyYXRlZF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9NU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUVTU0FHRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJCb2R5SW1hZ2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lbWJlcl9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkdldF9TZXRfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaWFsb2dfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkZpZWxkX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdG9ja19Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUG9pbnRlckJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydHlJbXBsZW1lbnRhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lbWJlcl9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkdldF9TZXRfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaWFsb2dfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkZpZWxkX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdG9ja19Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUG9pbnRlckJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydHlJbXBsZW1lbnRhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lbWJlcl9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkdldF9TZXRfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaWFsb2dfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkZpZWxkX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdG9ja19Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUG9pbnRlckJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydHlJbXBsZW1lbnRhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluY2x1ZGVzR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfSU5DTFVERVNfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc2VydExvY2F0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlNDQyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVHlwZUxpYkltcG9ydGVyIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiNzgzNjA2Mzc4IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGFibGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpY05vdENyZWF0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsU2luZ2xlVXNlIgotCQkJCXZhbHVlICAgICAgCTIxNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk11bHRpVXNlIgotCQkJCXZhbHVlICAgICAgCTIxOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkdsb2JhbE11bHRpVXNlIgotCQkJCXZhbHVlICAgICAgCTIyMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQmFzZSIKLQkJCXZhbHVlICAgICAgCSIwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkV4cGxpY2l0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkNvbXBhcmUiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbXBhcmVTZXQiIDIwMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGFibGUiCi0JCQl2YWx1ZSAgICAgIAkoIkNyZWF0YWJsZVNldCIgMjIxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5pdGlhbGl6YXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlVGVybWluYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25DbGFzcyIKLQkJCXZhbHVlICAgICAgCSJDb2xsZWN0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNvbXBhcmVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkJpbmFyeSIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJUZXh0IgotCQkJCXZhbHVlICAgICAgCTIwNCkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJG9wZXJhdGlvbiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJMaWJyYXJ5TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQWxpYXNOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc1N0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRW50cnlDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSXNDb25zdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmV3IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJXaXRoRXZlbnRzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGUkc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUxldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0luaGVyaXQiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudHNEZWxlZ2F0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlByb2plY3RGaWxlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsU3R1ZGlvIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkVkaXRvciIKLQkJCXZhbHVlICAgICAgCSgiRWRpdG9yVHlwZSIgMTAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZVBhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdEluIgotCQkJCXZhbHVlICAgICAgCTEwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiV2luZG93c1NoZWxsIgotCQkJCXZhbHVlICAgICAgCTEwMSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAlUSUgJVolICVXJSIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICVRJSAlWiUgJVclIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29udGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc09uZVdheSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBcnJheURpbWVuc2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9yZGVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBcnJheURpbWVuc2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJPcmRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiRGVmYXVsdF9TZXJ2bGV0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXROYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRleHRSZWYiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc1NpbmdsZVRocmVhZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJc1NlY3VyZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclBhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVySW5jbHVkZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJGb3J3YXJkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Z2V0SW5mbyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJIdHRwX1NlcnZsZXRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZXNOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RBdHRyaWJ1dGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdFBhcmFtZXRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9ySGVhZGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbnRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0RGF0ZUhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb29raWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JDb29raWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGVudFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUhUTUwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiRGVmYXVsdF9FSkJfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVfWE1MX0REIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbXBGaWVsZCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkVudmlyb25tZW50UHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNueEZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWZlcmVuY2VzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQk5hbWVJbkpBUiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJTZXNzaW9uVHlwZV9TZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVsZXNzIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWZ1bCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiIDIxMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjExKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjEyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IiAyMjApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIyMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjIyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVlbnRyYW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQk1QX0V4dGVuZF9DTVAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSMkVkaXRvciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUm9zZSBNb2RlbCBJbnRlZ3JhdG9yIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSb3NlIFdlYiBQdWJsaXNoZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZlcnNpb24gQ29udHJvbCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUmVwb3NpdG9yeSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY5IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2F0ZWdvcnkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicGFja2FnZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkibnNQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkibnNVUkkiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYmFzZVBhY2thZ2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJjbGFzc2lmaWVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJjb25zdHJhaW50cyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbENvbnRlbnRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJDb250ZW50S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkNvbnRlbnRLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbXB0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTWl4ZWQiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRWxlbWVudE9ubHkiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm9wZXJhdGlvbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImF0dHJpYnV0ZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc0NoYW5nZWFibGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Vuc2V0dGFibGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc0lEIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC1vbmx5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC1vbmx5IHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lc3BhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sRmVhdHVyZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZlYXR1cmVLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiRmVhdHVyZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJBdHRyaWJ1dGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRWxlbWVudCIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInJlZmVyZW5jZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc0NoYW5nZWFibGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Vuc2V0dGFibGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNSZXNvbHZlUHJveGllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC1vbmx5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC1vbmx5IHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lc3BhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sRmVhdHVyZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZlYXR1cmVLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiRmVhdHVyZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJBdHRyaWJ1dGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRWxlbWVudCIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKSkKLQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTU0IikpCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZWNvcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMjE3YmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ibWltZSIKLSAgICBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvTUlNRSIgbnNQcmVmaXg9Im1pbWUiPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1JTUVDb250ZW50IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lNSU1FQ29udGVudCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFBhcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InR5cGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBhcnQiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL1BhcnQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTUlNRVBhcnQiIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSU1JTUVQYXJ0Ij4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImV4dGVuc2liaWxpdHlFbGVtZW50IiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiIGVUeXBlPSIjLy9MaXN0Ii8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTUlNRU11bHRpcGFydFJlbGF0ZWQiIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSU1JTUVNdWx0aXBhcnRSZWxhdGVkIj4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkTUlNRVBhcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im1pbWVQYXJ0IiBlVHlwZT0iIy8vSU1JTUVQYXJ0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0TUlNRVBhcnRzIiBlVHlwZT0iIy8vTGlzdCIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlTUlNRVBhcnQiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTUlNRVBhcnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1JTUVNaW1lWG1sIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lNSU1FTWltZVhtbCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFBhcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0IiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklNSU1FUGFydCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklNSU1FQ29udGVudCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklNSU1FTWltZVhtbCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9Ikxpc3QiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuTGlzdCIvPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvTUlNRS5nZW5tb2RlbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvTUlNRS5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiY2UwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZ2VubW9kZWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZSIKLSAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMiCi0gICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIG1vZGVsTmFtZT0iTUlNRSIgZWRpdFBsdWdpbkNsYXNzPSIiIGVkaXRvclBsdWdpbkNsYXNzPSIiCi0gICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0iV1NETC5nZW5tb2RlbCMvL3dzZGwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5NSU1FLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJNSU1FIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKLSAgICAgIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgdXRpbGl0eVBhY2thZ2VTdWZmaXg9ImludGVybmFsLnV0aWwiIGVjb3JlUGFja2FnZT0iTUlNRS5lY29yZSMvIj4KLSAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9Ik1JTUUuZWNvcmUjLy9MaXN0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iTUlNRS5lY29yZSMvL01JTUVDb250ZW50Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvdHlwZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIE1JTUUuZWNvcmUjLy9NSU1FQ29udGVudC9lUGFydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Ik1JTUUuZWNvcmUjLy9NSU1FQ29udGVudC9zZXRQYXJ0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Ik1JTUUuZWNvcmUjLy9NSU1FQ29udGVudC9zZXRQYXJ0L3BhcnQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvZ2V0UGFydCIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vTUlNRVBhcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRVBhcnQvZUV4dGVuc2liaWxpdHlFbGVtZW50cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Ik1JTUUuZWNvcmUjLy9NSU1FUGFydC9hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJNSU1FLmVjb3JlIy8vTUlNRVBhcnQvYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQvZXh0ZW5zaWJpbGl0eUVsZW1lbnQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRVBhcnQvZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIE1JTUUuZWNvcmUjLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZC9lTUlNRVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRU11bHRpcGFydFJlbGF0ZWQvYWRkTUlNRVBhcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iTUlNRS5lY29yZSMvL01JTUVNdWx0aXBhcnRSZWxhdGVkL2FkZE1JTUVQYXJ0L21pbWVQYXJ0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVNdWx0aXBhcnRSZWxhdGVkL2dldE1JTUVQYXJ0cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwiPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIE1JTUUuZWNvcmUjLy9NSU1FTWltZVhtbC9lUGFydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Ik1JTUUuZWNvcmUjLy9NSU1FTWltZVhtbC9zZXRQYXJ0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Ik1JTUUuZWNvcmUjLy9NSU1FTWltZVhtbC9zZXRQYXJ0L3BhcnQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvZ2V0UGFydCIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9JTUlNRVBhcnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9JTUlNRU11bHRpcGFydFJlbGF0ZWQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9JTUlNRUNvbnRlbnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9JTUlNRU1pbWVYbWwiLz4KLSAgPC9nZW5QYWNrYWdlcz4KLTwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUubWRsIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLm1kbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlODUyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUubWRsCisrKyAvZGV2L251bGwKQEAgLTEsNTgxOCArMCwwIEBACi0KLShvYmplY3QgUGV0YWwKLSAgICB2ZXJzaW9uICAgIAk0MgotICAgIF93cml0dGVuICAgCSJSb3NlIDQuNS44MTYzLjMiCi0gICAgY2hhclNldCAgICAJMCkKLQotKG9iamVjdCBEZXNpZ24gIkxvZ2ljYWwgVmlldyIKLSAgICBpc191bml0ICAgIAlUUlVFCi0gICAgaXNfbG9hZGVkICAJVFJVRQotICAgIGRlZmF1bHRzICAgCShvYmplY3QgZGVmYXVsdHMKLQlyaWdodE1hcmdpbiAJMC4yNTAwMDAKLQlsZWZ0TWFyZ2luIAkwLjI1MDAwMAotCXRvcE1hcmdpbiAgCTAuMjUwMDAwCi0JYm90dG9tTWFyZ2luIAkwLjUwMDAwMAotCXBhZ2VPdmVybGFwIAkwLjI1MDAwMAotCWNsaXBJY29uTGFiZWxzIAlUUlVFCi0JYXV0b1Jlc2l6ZSAJVFJVRQotCXNuYXBUb0dyaWQgCVRSVUUKLQlncmlkWCAgICAgIAkxNgotCWdyaWRZICAgICAgCTE2Ci0JZGVmYXVsdEZvbnQgCShvYmplY3QgRm9udAotCSAgICBzaXplICAgICAgIAkxMAotCSAgICBmYWNlICAgICAgIAkiQXJpYWwiCi0JICAgIGJvbGQgICAgICAgCUZBTFNFCi0JICAgIGl0YWxpY3MgICAgCUZBTFNFCi0JICAgIHVuZGVybGluZSAgCUZBTFNFCi0JICAgIHN0cmlrZSAgICAgCUZBTFNFCi0JICAgIGNvbG9yICAgICAgCTAKLQkgICAgZGVmYXVsdF9jb2xvciAJVFJVRSkKLQlzaG93TWVzc2FnZU51bSAJMQotCXNob3dDbGFzc09mT2JqZWN0IAlUUlVFCi0Jbm90YXRpb24gICAJIlVuaWZpZWQiKQotICAgIHJvb3RfdXNlY2FzZV9wYWNrYWdlIAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJVc2UgQ2FzZSBWaWV3IgotCXF1aWQgICAgICAgCSIzQUM5MTA1MTAzMUUiCi0JZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQlnbG9iYWwgICAgIAlUUlVFCi0JbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgVXNlQ2FzZURpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzQUM5MTA1MjAwMUIiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHJvb3RfY2F0ZWdvcnkgCShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIkxvZ2ljYWwgVmlldyIKLQlxdWlkICAgICAgIAkiM0FDOTEwNTEwMzFEIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCXN1YnN5c3RlbSAgCSJDb21wb25lbnQgVmlldyIKLQlxdWlkdSAgICAgIAkiM0FDOTEwNTEwMzFGIgotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIm1pbWUiCi0JCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkibnNQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkibWltZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicHJlZml4IgotCQkJdmFsdWUgICAgICAJIk1JTUUiKSkKLQkJcXVpZCAgICAgICAJIjNBQzkxMjdDMDI2NiIKLQkJZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkJICAgIChvYmplY3QgQ2xhc3MgIk1JTUVDb250ZW50IgotCQkJcXVpZCAgICAgICAJIjNBQzkxMzVCMDNBNyIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUVGMTFDQTAzOEUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA2QTMwMTY4IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6OklNSU1FQ29udGVudCIKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTA1RTAwMUNDIikpCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gInNldFBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNjZGMDAyMyIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJwYXJ0IgotCQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQkJcmVzdWx0ICAgICAJInZvaWQiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJnZXRQYXJ0IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDY3RDAyQ0MiCi0JCQkJcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJ0eXBlIgotCQkJCXF1aWQgICAgICAgCSIzQUM5MTk3MTAzNkIiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiTUlNRVBhcnQiCi0JCQlxdWlkICAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwQTBGREVGMDMyMiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MEExMDJDRDAxNzUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSI0MEExMDI1RDAxQTYiKSkKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNDY0MDFBMiIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJleHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQkJdHlwZSAgICAgICAJIklFeHRlbnNpYmlsaXR5RWxlbWVudCIpKQotCQkJCXJlc3VsdCAgICAgCSJ2b2lkIgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXF1aWQgICAgICAgCSI0MEExMDQ4NDAyN0IiCi0JCQkJcmVzdWx0ICAgICAJIkxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIk1JTUVNdWx0aXBhcnRSZWxhdGVkIgotCQkJcXVpZCAgICAgICAJIjNBQzkxM0ZBMDI1QiIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUVGMTFENTAzMzAiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAzQUQwMzFDIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6OklNSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAzM0IwMEREIikpCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImFkZE1JTUVQYXJ0IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDNGNjAxNzIiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAibWltZVBhcnQiCi0JCQkJCXR5cGUgICAgICAgCSJJTUlNRVBhcnQiKSkKLQkJCQlyZXN1bHQgICAgIAkidm9pZCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldE1JTUVQYXJ0cyIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA0MDMwMzhEIgotCQkJCXJlc3VsdCAgICAgCSJMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJNSU1FTWltZVhtbCIKLQkJCXF1aWQgICAgICAgCSIzQUM5MTQ1QTAxRkYiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFRjExREQwMzhCIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNzQ3MDM0RSIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRU1pbWVYbWwiCi0JCQkJcXVpZHUgICAgICAJIjQwQTEwNkVGMDA4QiIpKQotCQkJb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRQYXJ0IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDZENDAxRUIiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAicGFydCIKLQkJCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJCXJlc3VsdCAgICAgCSJ2b2lkIgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA2RTEwMDk1IgotCQkJCXJlc3VsdCAgICAgCSJTdHJpbmciCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklNSU1FUGFydCIKLQkJCXF1aWQgICAgICAgCSI0MEExMDI1RDAxQTYiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAyOUQwM0Q5IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklNSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCXF1aWQgICAgICAgCSI0MEExMDMzQjAwREQiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAzNzgwMThGIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklNSU1FQ29udGVudCIKLQkJCXF1aWQgICAgICAgCSI0MEExMDVFMDAxQ0MiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA1RjUwMjI2IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklNSU1FTWltZVhtbCIKLQkJCXF1aWQgICAgICAgCSI0MEExMDZFRjAwOEIiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA3MUUwM0I0IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIkxpc3QiCi0JCQlxdWlkICAgICAgIAkiNDBBMTBCRkEwMTA5IgotCQkJc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLnV0aWwuTGlzdCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTBDMDkwMkE2IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDAiCi0JCQlxdWlkICAgICAgIAkiM0FFNzNCM0MwMzU2IgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxIgotCQkJCXF1aWQgICAgICAgCSIzQUU3M0IzRDAwOTAiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRUNvbnRlbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBQzkxMzVCMDNBNyIpCi0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FFNzNCM0QwMDlBIgotCQkJCWxhYmVsICAgICAgCSJlUGFydCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkpKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMiIKLQkJCXF1aWQgICAgICAgCSIzQUU3M0JCOTAwRDUiCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgImVQYXJ0IgotCQkJCXF1aWQgICAgICAgCSIzQUU3M0JCOTAzQ0UiCi0JCQkJbGFiZWwgICAgICAJImVQYXJ0IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkMyIKLQkJCQlxdWlkICAgICAgIAkiM0FFNzNCQjkwM0UyIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNaW1lWG1sIgotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTQ1QTAxRkYiKSkpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0IgotCQkJcXVpZCAgICAgICAJIjNBRUYxMkZFMDM4NyIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkNSIKLQkJCQlxdWlkICAgICAgIAkiM0FFRjEzMDAwMEQ3IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNdWx0aXBhcnRSZWxhdGVkIgotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTNGQTAyNUIiCi0JCQkJaXNfYWdncmVnYXRlIAlUUlVFKQotCQkJICAgIChvYmplY3QgUm9sZSAiZU1JTUVQYXJ0IgotCQkJCXF1aWQgICAgICAgCSIzQUVGMTMwMDAwRTEiCi0JCQkJbGFiZWwgICAgICAJImVNSU1FUGFydCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FUGFydCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJCQlDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCQkJQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDYiCi0JCQlxdWlkICAgICAgIAkiNDY4NzM3OUEwMDhDIgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXF1aWQgICAgICAgCSI0Njg3Mzc5QjAyODAiCi0JCQkJbGFiZWwgICAgICAJImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkJCUNvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkNyIKLQkJCQlxdWlkICAgICAgIAkiNDY4NzM3OUIwMjkwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTNFRTAwRUIiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkJCWlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKSkKLQkJbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiQmluZGluZ3MiCi0JCQlxdWlkICAgICAgIAkiM0FDOTEyOEIwMUY5IgotCQkJdGl0bGUgICAgICAJIkJpbmRpbmdzIgotCQkJem9vbSAgICAgICAJMTAwCi0JCQltYXhfaGVpZ2h0IAkyODM1MAotCQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJCW9yaWdpbl94ICAgCTAKLQkJCW9yaWdpbl95ICAgCTAKLQkJCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FQ29udGVudCIgQDEKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE2MzIsIDg0OCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0OTAsIDcxNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiTUlNRUNvbnRlbnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTM1QjAzQTciCi0JCQkJd2lkdGggICAgICAJMzAyCi0JCQkJaGVpZ2h0ICAgICAJMjg2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJCQlTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgMTIwMCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDIKLQkJCQkgICAgbG9jYXRpb24gICAJKDE1NTEsIDExNTApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTYyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlBhcnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJaGVpZ2h0ICAgICAJMTI0Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDAiIEAzCi0JCQkJbG9jYXRpb24gICAJKDE2MzIsIDEwNjQpCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCM0MwMzU2IgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQxIiBANAotCQkJCQlQYXJlbnRfVmlldyAJQDMKLQkJCQkJbG9jYXRpb24gICAJKC00MTYsIC0xNjgpCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCM0QwMDkwIgotCQkJCQljbGllbnQgICAgIAlAMwotCQkJCQlzdXBwbGllciAgIAlAMQotCQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlUGFydCIgQDUKLQkJCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQkJCWxvY2F0aW9uICAgCSgtNDE2LCAtMTY4KQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA2Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDUKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNTE1LCAxMTAyKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTIwCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VQYXJ0IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC41MzkzMjYKLQkJCQkJICAgIGhlaWdodCAgICAgCTExOAotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCM0QwMDlBIgotCQkJCQljbGllbnQgICAgIAlAMwotCQkJCQlzdXBwbGllciAgIAlAMgotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDcKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANQotCQkJCQkgICAgbG9jYXRpb24gICAJKDE2ODEsIDEwOTcpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjQ0OTEwMwotCQkJCQkgICAgaGVpZ2h0ICAgICAJNDkKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkpKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRU1pbWVYbWwiIEA4Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCAxNTA0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAOAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTQ3OCwgMTM5OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiTUlNRU1pbWVYbWwiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTQ1QTAxRkYiCi0JCQkJd2lkdGggICAgICAJMzI2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDIiIEA5Ci0JCQkJbG9jYXRpb24gICAJKDE2MzIsIDEzMjMpCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCQjkwMEQ1IgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlUGFydCIgQDEwCi0JCQkJCVBhcmVudF9WaWV3IAlAOQotCQkJCQlsb2NhdGlvbiAgIAkoMTQ0LCAtMzI1KQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxMAotCQkJCQkgICAgbG9jYXRpb24gICAJKDE1MDYsIDEyOTMpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxMjAKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIrZVBhcnQiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjQ4OTU4MwotCQkJCQkgICAgaGVpZ2h0ICAgICAJMTI3Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUU3M0JCOTAzQ0UiCi0JCQkJCWNsaWVudCAgICAgCUA5Ci0JCQkJCXN1cHBsaWVyICAgCUAyCi0JCQkJCWxpbmVfc3R5bGUgCTAKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTIKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNzA4LCAxMjg0KQotCQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTUKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIwLi4xIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC42NTIyNzAKLQkJCQkJICAgIGhlaWdodCAgICAgCTc2Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkpCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDMiIEAxMwotCQkJCQlQYXJlbnRfVmlldyAJQDkKLQkJCQkJbG9jYXRpb24gICAJKDE0NCwgLTMyNSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUU3M0JCOTAzRTIiCi0JCQkJCWNsaWVudCAgICAgCUA5Ci0JCQkJCXN1cHBsaWVyICAgCUA4Ci0JCQkJCWxpbmVfc3R5bGUgCTApKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNdWx0aXBhcnRSZWxhdGVkIiBAMTQKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU2MCwgNTkyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTQKLQkJCQkgICAgbG9jYXRpb24gICAJKDM0MSwgNDg2KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQzOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0ZBMDI1QiIKLQkJCQl3aWR0aCAgICAgIAk0NTYKLQkJCQloZWlnaHQgICAgIAkyMzYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVQYXJ0IiBAMTUKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU2MCwgMTA0MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE1Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgyOTYsIDkzNCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk1MjgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiTUlNRVBhcnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTNFRTAwRUIiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjk2LCA5OTQpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTMKLQkJCQkgICAgbWF4X3dpZHRoICAJMCkKLQkJCQl3aWR0aCAgICAgIAk1NDYKLQkJCQloZWlnaHQgICAgIAkyMzYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNCIgQDE2Ci0JCQkJbG9jYXRpb24gICAJKDU2MCwgODE1KQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRUYxMkZFMDM4NyIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNSIgQDE3Ci0JCQkJCVBhcmVudF9WaWV3IAlAMTYKLQkJCQkJbG9jYXRpb24gICAJKDMyLCAxMTEpCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFRjEzMDAwMEQ3IgotCQkJCQljbGllbnQgICAgIAlAMTYKLQkJCQkJc3VwcGxpZXIgICAJQDE0Ci0JCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgImVNSU1FUGFydCIgQDE4Ci0JCQkJCVBhcmVudF9WaWV3IAlAMTYKLQkJCQkJbG9jYXRpb24gICAJKDMyLCAxMTEpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoNzQ0LCA4OTApCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkyMjgKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIrZU1JTUVQYXJ0IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC43MDk0MDIKLQkJCQkJICAgIGhlaWdodCAgICAgCTE4NAotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFRjEzMDAwMEUxIgotCQkJCQljbGllbnQgICAgIAlAMTYKLQkJCQkJc3VwcGxpZXIgICAJQDE1Ci0JCQkJCWxpbmVfc3R5bGUgCTAKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjAKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTgKLQkJCQkJICAgIGxvY2F0aW9uICAgCSg1MDMsIDg5OCkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNzk0MTE4Ci0JCQkJCSAgICBoZWlnaHQgICAgIAk1OAotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMzY0LCA4OTApCi0JCQkJCSAgICBhbmNob3IgICAgIAkzCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNTkKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjcwOTQwMgotCQkJCQkgICAgaGVpZ2h0ICAgICAJMTk3Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkpKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6OklNSU1FUGFydCIgQDIyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDcyMCwgMTQ1NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgyMDUsIDE0MjIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTAzMAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJTUlNRVBhcnQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjIKLQkJCQkgICAgbG9jYXRpb24gICAJKDIwNSwgMTM3MikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDMwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MEExMDI1RDAxQTYiCi0JCQkJd2lkdGggICAgICAJMTA0OAotCQkJCWhlaWdodCAgICAgCTE5MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDIzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAyQ0QwMTc1IgotCQkJCWNsaWVudCAgICAgCUAxNQotCQkJCXN1cHBsaWVyICAgCUAyMgotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRU11bHRpcGFydFJlbGF0ZWQiIEAyNAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3NjgsIDE3NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxNDMsIDE0MikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMjUwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklNSU1FTXVsdGlwYXJ0UmVsYXRlZCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTQzLCA5MikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMjUwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MEExMDMzQjAwREQiCi0JCQkJd2lkdGggICAgICAJMTI2OAotCQkJCWhlaWdodCAgICAgCTE5MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI1Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAzQUQwMzFDIgotCQkJCWNsaWVudCAgICAgCUAxNAotCQkJCXN1cHBsaWVyICAgCUAyNAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRUNvbnRlbnQiIEAyNgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCA0MzIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTA4NCwgMzk4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSU1JTUVDb250ZW50IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMDg0LCAzNDgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA5NgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTA1RTAwMUNDIgotCQkJCXdpZHRoICAgICAgCTExMTQKLQkJCQloZWlnaHQgICAgIAkxOTIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwNkEzMDE2OCIKLQkJCQljbGllbnQgICAgIAlAMQotCQkJCXN1cHBsaWVyICAgCUAyNgotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRU1pbWVYbWwiIEAyOAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjE2LCAxOTA0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjgKLQkJCQkgICAgbG9jYXRpb24gICAJKDEwNTUsIDE4NzApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTEyMgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJTUlNRU1pbWVYbWwiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjgKLQkJCQkgICAgbG9jYXRpb24gICAJKDEwNTUsIDE4MjApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTEyMgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTA2RUYwMDhCIgotCQkJCXdpZHRoICAgICAgCTExNDAKLQkJCQloZWlnaHQgICAgIAkxOTIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyOQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwNzQ3MDM0RSIKLQkJCQljbGllbnQgICAgIAlAOAotCQkJCXN1cHBsaWVyICAgCUAyOAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpMaXN0IiBAMzAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDQ0OCwgMTc2MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMwCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNzYsIDE3MDEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNTQ0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkxpc3QiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzAKLQkJCQkgICAgbG9jYXRpb24gICAJKDE3NiwgMTY1MSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk1NDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxkYXRhdHlwZT4+IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTBCRkEwMTA5IgotCQkJCXdpZHRoICAgICAgCTU2MgotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKSkpCi0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiRXh0ZW5zaWJpbGl0eSIKLQkJCXF1aWQgICAgICAgCSIzQUU3M0FBMzAzMkUiCi0JCQl0aXRsZSAgICAgIAkiRXh0ZW5zaWJpbGl0eSIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRU1pbWVYbWwiIEAzMQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTMyOCwgNzUyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzEKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNzQsIDY0NikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiTUlNRU1pbWVYbWwiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTQ1QTAxRkYiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTE3NCwgNzA2KQotCQkJCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQkgICAgZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCSAgICBubGluZXMgICAgIAkzCi0JCQkJICAgIG1heF93aWR0aCAgCTIxNSkKLQkJCQl3aWR0aCAgICAgIAkzMjYKLQkJCQloZWlnaHQgICAgIAkyMzYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNdWx0aXBhcnRSZWxhdGVkIiBAMzIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDc1MiwgMTEzNikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMyCi0JCQkJICAgIGxvY2F0aW9uICAgCSg1MzMsIDEwMzApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDM4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVNdWx0aXBhcnRSZWxhdGVkIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRkEwMjVCIgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzIKLQkJCQkgICAgbG9jYXRpb24gICAJKDUzMywgMTA5MCkKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJMwotCQkJCSAgICBtYXhfd2lkdGggIAkzNDMpCi0JCQkJd2lkdGggICAgICAJNDU2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FQ29udGVudCIgQDMzCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE3OTIsIDc1MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMzCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNjUwLCA2NDYpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVDb250ZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzNUIwM0E3IgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzMKLQkJCQkgICAgbG9jYXRpb24gICAJKDE2NTAsIDcwNikKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJMwotCQkJCSAgICBtYXhfd2lkdGggIAkyMTUpCi0JCQkJd2lkdGggICAgICAJMzAyCi0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FUGFydCIgQDM0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDMwNCwgNzY4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzQKLQkJCQkgICAgbG9jYXRpb24gICAJKDQwLCA2NjIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNTI4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVQYXJ0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzQKLQkJCQkgICAgbG9jYXRpb24gICAJKDQwLCA3MjIpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTMKLQkJCQkgICAgbWF4X3dpZHRoICAJNTM0KQotCQkJCXdpZHRoICAgICAgCTU0NgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAzNQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg5NzYsIDE5MikKLQkJCQlmb250ICAgICAgIAkob2JqZWN0IEZvbnQKLQkJCQkgICAgaXRhbGljcyAgICAJVFJVRSkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM1Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg3NDcsIDg3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQ1OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJFeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM1Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg3NDcsIDE5NSkKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJMgotCQkJCSAgICBtYXhfd2lkdGggIAk0NjUpCi0JCQkJd2lkdGggICAgICAJNDc2Ci0JCQkJaGVpZ2h0ICAgICAJMjM0Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDM2Ci0JCQkJbG9jYXRpb24gICAJKDk3NiwgNTI2KQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSAgICAoOTc2LCA1MjYpCi0JCQkJICAgICg5NzYsIDMwOSkpKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM3Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFRjExREQwMzhCIgotCQkJCWNsaWVudCAgICAgCUAzMQotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDEzNTYsIDYzNCkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1NiwgNTI2KQotCQkJCWRyYXdTdXBwbGllciAJQDM2KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM4Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFRjExRDUwMzMwIgotCQkJCWNsaWVudCAgICAgCUAzMgotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDg0NCwgMTAxOCkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoODQ0LCA1MjYpCi0JCQkJZHJhd1N1cHBsaWVyIAlAMzYpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUVGMTFDQTAzOEUiCi0JCQkJY2xpZW50ICAgICAJQDMzCi0JCQkJc3VwcGxpZXIgICAJQDM1Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTc3OCwgNjM0KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzc4LCA1MjYpCi0JCQkJZHJhd1N1cHBsaWVyIAlAMzYpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDAKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MEEwRkRFRjAzMjIiCi0JCQkJY2xpZW50ICAgICAJQDM0Ci0JCQkJc3VwcGxpZXIgICAJQDM1Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMjU2LCA2NTApCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDI1NiwgNTI2KQotCQkJCWRyYXdTdXBwbGllciAJQDM2KQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ2IiBANDEKLQkJCQlsb2NhdGlvbiAgIAkoMzAzLCAyNTEpCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDY4NzM3OUEwMDhDIgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiBANDIKLQkJCQkJUGFyZW50X1ZpZXcgCUA0MQotCQkJCQlsb2NhdGlvbiAgIAkoLTEsIC01MTcpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQzCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDQyCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoNDYyLCAxMzEpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAk0NDQKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIrZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNDQzMzIwCi0JCQkJCSAgICBoZWlnaHQgICAgIAk2MAotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiNDY4NzM3OUIwMjgwIgotCQkJCQljbGllbnQgICAgIAlANDEKLQkJCQkJc3VwcGxpZXIgICAJQDM1Ci0JCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCQkgICAgKDMwMywgMjUxKQotCQkJCQkgICAgKDMwMywgMTkxKQotCQkJCQkgICAgKDczNywgMTkxKSkKLQkJCQkJbGluZV9zdHlsZSAJMAotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA0NAotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJCQkgICAgbG9jYXRpb24gICAJKDYyMiwgMjI4KQotCQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTUKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIwLi4qIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC43NjcyMDYKLQkJCQkJICAgIGhlaWdodCAgICAgCTM3Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANDUKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCQkJICAgIGxvY2F0aW9uICAgCSg1NzUsIDI4NCkKLQkJCQkJICAgIGFuY2hvciAgICAgCTMKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1OQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNjcyMDY1Ci0JCQkJCSAgICBoZWlnaHQgICAgIAk5MwotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ3IiBANDYKLQkJCQkJUGFyZW50X1ZpZXcgCUA0MQotCQkJCQlsb2NhdGlvbiAgIAkoLTEsIC01MTcpCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiNDY4NzM3OUIwMjkwIgotCQkJCQljbGllbnQgICAgIAlANDEKLQkJCQkJc3VwcGxpZXIgICAJQDM0Ci0JCQkJCWxpbmVfc3R5bGUgCTAKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANDcKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANDYKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgzNTcsIDYwOSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuOTAwMDAwCi0JCQkJCSAgICBoZWlnaHQgICAgIAk1NAotCQkJCQkgICAgb3JpZW50YXRpb24gCTApKSkpKSkpKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ3c2RsIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2Uud3N0LndzZGxcXG1vZGVsXFxvcmcuZWNsaXBzZS53c3QuV1NETC5jYXQiCi0JCXF1aWQgICAgICAgCSIzQURGQjhFNTAyMUUiKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ4c2QiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS54c2RcXG1vZGVsXFxvcmcuZWNsaXBzZS5YU0QuY2F0IgotCQlxdWlkICAgICAgIAkiMzlBQkRDNkYwMUFBIikpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FDOTEwNTEwM0IyIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6bWltZSIgQDQ4Ci0JCQlsb2NhdGlvbiAgIAkoNDAwLCAyNDApCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlANDgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMjU2LCAxNTYpCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJtaW1lIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQUM5MTI3QzAyNjYiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OndzZGwiIEA0OQotCQkJbG9jYXRpb24gICAJKDg4MCwgMjQwKQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDQ5Ci0JCQkgICAgbG9jYXRpb24gICAJKDczNiwgMTU2KQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkid3NkbCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FERkI4RTUwMjFFIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp4c2QiIEA1MAotCQkJbG9jYXRpb24gICAJKDEzNzYsIDI0MCkKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA1MAotCQkJICAgIGxvY2F0aW9uICAgCSgxMjMyLCAxNTYpCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ4c2QiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjM5QUJEQzZGMDFBQSIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKSkpKSkKLSAgICByb290X3N1YnN5c3RlbSAJKG9iamVjdCBTdWJTeXN0ZW0gIkNvbXBvbmVudCBWaWV3IgotCXF1aWQgICAgICAgCSIzQUM5MTA1MTAzMUYiCi0JcGh5c2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCXBoeXNpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBNb2R1bGVfRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjNBQzkxMDUyMDAxQSIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcHJvY2Vzc19zdHJ1Y3R1cmUgCShvYmplY3QgUHJvY2Vzc2VzCi0JcXVpZCAgICAgICAJIjNBQzkxMDUxMDMyNiIKLQlQcm9jc05EZXZzIAkobGlzdAotCSAgICAob2JqZWN0IFByb2Nlc3NfRGlhZ3JhbSAiRGVwbG95bWVudCBWaWV3IgotCQlxdWlkICAgICAgIAkiM0FDOTEwNTEwMzI4IgotCQl0aXRsZSAgICAgIAkiRGVwbG95bWVudCBWaWV3IgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb3BlcnRpZXMgCShvYmplY3QgUHJvcGVydGllcwotCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2UiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFCYXNlU2V0IiA4MDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJBTlNJIgotCQkJCXZhbHVlICAgICAgCTgwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIk9yYWNsZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJTUUxTZXJ2ZXIiCi0JCQkJdmFsdWUgICAgICAJODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU3liYXNlIgotCQkJCXZhbHVlICAgICAgCTgwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIldhdGNvbSIKLQkJCQl2YWx1ZSAgICAgIAk4MDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIklkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1KSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZSIKLQkJCXZhbHVlICAgICAgCSJWXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVF8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdFN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSJfViIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJCYXNlVmlld3MiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIlZBUkNIQVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc09LIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJmcmFtZXdvcmsiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExFbGVtZW50IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETFNwZWNpZmljYXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJJRExTcGVjU2V0IiAyMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCXZhbHVlICAgICAgCTIyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiVHlwZWRlZiIKLQkJCQl2YWx1ZSAgICAgIAk1NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkVudW1lcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkV4Y2VwdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk2MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlN0cnVjdCIKLQkJCQl2YWx1ZSAgICAgIAk1MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlVuaW9uIgotCQkJCXZhbHVlICAgICAgCTgxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcubWltZS9zcmMvcm9zZS9taW1lYmluZGluZ01ETC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSURMTW9kdWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLm1pbWUvc3JjL3Jvc2UvbWltZWJpbmRpbmdNREwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlUHJlZml4ZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZVZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1fIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1ZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0QXR0cmlidXRlRGF0YVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0T3BlcmF0aW9uUmV0dXJuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJ2b2lkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSb290RGlyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQXV0b1N5bmMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTaG93Q29kZWdlbkRsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0QXV0aG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRTaW5jZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NOdW1Bc3Rlcmlza3MiCi0JCQl2YWx1ZSAgICAgIAkwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1heE51bUNoYXJzIgotCQkJdmFsdWUgICAgICAJODApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNIgotCQkJdmFsdWUgICAgICAJKCJWTVR5cGUiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdEluIgotCQkJCXZhbHVlICAgICAgCTEwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVk1UeXBlIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN1biIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTWljcm9zb2Z0IgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJJQk0iCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTm9DbGFzc0N1c3RvbURsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdsb2JhbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlQ2xhc3NTdHlsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlTWV0aG9kU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVRhYnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VTcGFjZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNwYWNpbmdJdGVtcyIKLQkJCXZhbHVlICAgICAgCTMpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9zZURlZmF1bHRDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFzdGVyaXNrQ29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YUNvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NBdXRob3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jU2luY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jVmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29kZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzYWJsZUF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZXNOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RBdHRyaWJ1dGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdFBhcmFtZXRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9ySGVhZGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbnRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0RGF0ZUhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb29raWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JDb29raWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGVudFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUhUTUwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJOYXRpdmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTeW5jaHJvbml6ZWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlByb3BlcnR5VHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQmVhblByb3BlcnR5X1NldCIgNzEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJlYW5Qcm9wZXJ0eV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTm90IEEgUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTcyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJvdW5kIgotCQkJCXZhbHVlICAgICAgCTczKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cmFpbmVkIgotCQkJCXZhbHVlICAgICAgCTc0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5kaXZpZHVhbENoYW5nZU1ndCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGUiCi0JCQl2YWx1ZSAgICAgIAkoIlJlYWQvV3JpdGVfU2V0IiA4MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCAmIFdyaXRlIgotCQkJCXZhbHVlICAgICAgCTgxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXcml0ZSBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGdWxseVF1YWxpZmllZFR5cGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzTmF2aWdhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSIzNjAwMDAwMDIiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIl9JRCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUsMCkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NjaGVtYSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJXaGVyZUNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVNjYWxlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbk9mUkVGUyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZCIKLQkJCXZhbHVlICAgICAgCSgiTWV0aG9kS2luZFNldCIgMTkwMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3ZlcmxvYWRJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2VsZmlzaCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyVHlwZVNldCIgMTgwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50IgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRXZlbnRTZXQiIDE2MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclJlZmVyZW5jaW5nTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckZvckVhY2hTZXQiIDE3MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJXaGVuQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJNYXBNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcmRlck1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkZ1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTE5MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUHJvY2VkdXJlIgotCQkJCXZhbHVlICAgICAgCTE5MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3BlcmF0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyIgotCQkJCXZhbHVlICAgICAgCTE5MDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ2FsY3VsYXRlZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTA5KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQUZURVIiCi0JCQkJdmFsdWUgICAgICAJMTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJCRUZPUkUiCi0JCQkJdmFsdWUgICAgICAJMTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNURUFEIE9GIgotCQkJCXZhbHVlICAgICAgCTE4MDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJST1ciCi0JCQkJdmFsdWUgICAgICAJMTcwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJTVEFURU1FTlQiCi0JCQkJdmFsdWUgICAgICAJMTcwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQiCi0JCQkJdmFsdWUgICAgICAJMTYwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc0FsbG93ZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2FsZSIKLQkJCXZhbHVlICAgICAgCSI2IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc0luZGV4IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVXNlTVNWQyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImh+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwfiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVycm9yTGltaXQiCi0JCQl2YWx1ZSAgICAgIAkzMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiRST1NFQ1BQX1NPVVJDRSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlBhdGhTZXBhcmF0b3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkiMTI4dnhfYiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvb2xlYW5UeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93VGVtcGxhdGVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHBsaWNpdEluc3RhbnRpYXRpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dQcm90ZWN0ZWRJbmhlcml0YW5jZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbW1lbnRXaWR0aCIKLQkJCXZhbHVlICAgICAgCTYwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIk9wdGlvbmFsQnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2xhc3NLZXkiCi0JCQl2YWx1ZSAgICAgIAkiY2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlB1dEJvZGllc0luU3BlYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0RGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weUNvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXRDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvcktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3JhZ2VNZ210VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RyZWFtVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlRocmVlS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZyaWVuZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVBbmREZWZpbmUiCi0JCQkJdmFsdWUgICAgICAJMTk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlT25seSIKLQkJCQl2YWx1ZSAgICAgIAkyMDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRvTm90RGVjbGFyZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDYpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLm1pbWUvc3JjL3Jvc2UvbWltZWJpbmRpbmdNREwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLm1pbWUvc3JjL3Jvc2UvbWltZWJpbmRpbmdNREwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVPcmRlciIKLQkJCXZhbHVlICAgICAgCSJBTUlSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlIgotCQkJdmFsdWUgICAgICAJKCJJbmxpbmluZ1N0eWxlU2V0IiAyMDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbkNsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGb2xsb3dpbmdDbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwNykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUeXBlc0RlZmluZWQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVDbG9zdXJlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJPcGVyYXRpb25LaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNFeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRW50cnlDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5QW5ub3RhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3JkZXJlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNlbGVjdG9yTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3RvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEhhc1JlbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkhhc1JlbFR5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXNzb2NpYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kdGFyZ2V0Q2xhc3MiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0luaGVyaXQiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VBcmd1bWVudHMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJHZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuZ2V0KCRrZXlzKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lclNldCIKLQkJCXZhbHVlICAgICAgCSIkZGF0YS5zZXQoJGtleXMsJHZhbHVlKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZENvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiRzdXBwbGllciAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0luaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCSgiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0dldFNldEJ5UmVmZXJlbmNlIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVRdWFsaWZpZWRHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVF1YWxpZmllZFNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZFNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc0dldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc1NldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc1NldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NvY0NsYXNzU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0ZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdEF0dHJpYnV0ZVZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvZHlSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1N1YnN5c3RlbSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeUlzT25TZWFyY2hMaXN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2F0ZWdvcnkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNOYW1lc3BhY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kZW50IgotCQkJdmFsdWUgICAgICAJMikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiNS4wIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0NsYXNzVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0NsYXNzVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJJbnRlcmZhY2VfUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25fUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNsYXNzX0ZhY3RvcnkiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5IgotCQkJdmFsdWUgICAgICAJKCJDT2JqZWN0RnVuY3Rpb25hbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkR5bmFtaWMiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5jcmVhdGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTZXJpYWwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT3ZlcnJpZGVHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RBVEFfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpZWxkR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRklFTERfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTWVzc2FnZU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9NU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUVTU0FHRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJKCJPTEVGYWN0b3J5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdF9pbiIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkxpY2Vuc2VkIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ2xhc3NJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT0xFQ3RsVHlwZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRVR5cGVMaWIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWFqb3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWlub3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFUHJvcFBhZ2VJRHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEaXNwYXRjaE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tGdW5jdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hEZWZWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcElkRW51bSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQX0lEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnRlcmZhY2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJTlRFUkZBQ0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5pdEludGVyZmFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFdmVudFNpbmtNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUHJvcE5vdGlmeVNpbmtzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29ubmVjdGlvbk1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ29ubmVjdGlvblBvaW50SUlEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdGFuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDb21tYW5kcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNEZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNJbXBsZW1lbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFUTF9EZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNPTU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fUE9JTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNc2dNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wZXJ0eU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBST1BFUlRZX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ09wZXJhdGlvblR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNPcGVyYXRpb25UeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWxfT3ZlcnJpZGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZXNzYWdlX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaF9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfRmlyaW5nX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfU2lua19IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RkX09MRV9NZXRob2QiCi0JCQkJdmFsdWUgICAgICAJNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb21tYW5kX1BhcnNlciIKLQkJCQl2YWx1ZSAgICAgIAk3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X0dldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X1NldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X05vdGlmeV9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNYWNyb19HZW5lcmF0ZWRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQm9keUltYWdlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluY2x1ZGVzR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfSU5DTFVERVNfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc2VydExvY2F0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJTQ0MiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlR5cGVMaWJJbXBvcnRlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjc4MzYwNjM3OCIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWNOb3RDcmVhdGFibGUiCi0JCQkJdmFsdWUgICAgICAJMjEzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiU2luZ2xlVXNlIgotCQkJCXZhbHVlICAgICAgCTIxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkdsb2JhbFNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiMCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25FeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25Db21wYXJlIgotCQkJdmFsdWUgICAgICAJKCJDb21wYXJlU2V0IiAyMDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlIgotCQkJdmFsdWUgICAgICAJKCJDcmVhdGFibGVTZXQiIDIyMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluaXRpYWxpemF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVRlcm1pbmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiQ29sbGVjdGlvbiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb21wYXJlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJCaW5hcnkiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiVGV4dCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiRvcGVyYXRpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTGlicmFyeU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkFsaWFzTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSXNTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkV4aXRDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmV3IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJXaXRoRXZlbnRzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGUkc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUxldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRzRGVsZWdhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJQcm9qZWN0RmlsZSIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbFN0dWRpbyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkVkaXRvclR5cGUiIDEwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIldpbmRvd3NTaGVsbCIKLQkJCQl2YWx1ZSAgICAgIAkxMDEpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBcnJheURpbWVuc2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAlUSUgJVolICVXJSIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJPcmRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZXh0UmVmIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSXNTaW5nbGVUaHJlYWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SXNTZWN1cmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckluY2x1ZGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVyRm9yd2FyZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldGdldEluZm8iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSHR0cF9TZXJ2bGV0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfRUpCX19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlX1hNTF9ERCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ21wRmllbGQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJFbnZpcm9ubWVudFByb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbnhGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVmZXJlbmNlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJOYW1lSW5KQVIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCU2Vzc2lvblR5cGVfU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlbGVzcyIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVmdWwiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IiAyMTEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIxMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIxMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIgMjIwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMjApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIyMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZW50cmFudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJNUF9FeHRlbmRfQ01QIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUjJFZGl0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgTW9kZWwgSW50ZWdyYXRvciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUm9zZSBXZWIgUHVibGlzaGVyIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWZXJzaW9uIENvbnRyb2wiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJlcG9zaXRvcnkiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2OSIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInBhY2thZ2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY2xhc3NpZmllck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY29uc3RyYWludHMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiQ29udGVudEtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRW1wdHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk1peGVkIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnRPbmx5IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJvcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhdHRyaWJ1dGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNJRCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJyZWZlcmVuY2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzUmVzb2x2ZVByb3hpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkpCi0JcXVpZCAgICAgICAJIjNBQzkxMDUxMDMyNyIpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9TT0FQLmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9TT0FQLmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjIxYWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5lY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InNvYXAiCi0gICAgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiIG5zUHJlZml4PSJzb2FwIj4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTT0FQQmluZGluZyIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JU09BUEJpbmRpbmciPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0cmFuc3BvcnRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3R5bGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEJvZHkiIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSVNPQVBCb2R5Ij4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlRW5jb2RpbmdTdHlsZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlUGFydHMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBIZWFkZXJCYXNlIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RW5jb2RpbmdTdHlsZXMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldEVuY29kaW5nU3R5bGVzIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJlbmNvZGluZ1N0eWxlcyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1c2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZXNwYWNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVFbmNvZGluZ1N0eWxlcyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9JU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1lc3NhZ2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgV1NETC5lY29yZSMvL1FOYW1lIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBhcnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU1lc3NhZ2UiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL01lc3NhZ2UiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBhcnQiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL1BhcnQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEZhdWx0IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lTT0FQRmF1bHQiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1c2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZXNwYWNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVFbmNvZGluZ1N0eWxlcyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9JU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJzdXBwcmVzc2VkR2V0VmlzaWJpbGl0eSIgdmFsdWU9InRydWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTT0FQT3BlcmF0aW9uIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lTT0FQT3BlcmF0aW9uIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic29hcEFjdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdHlsZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTT0FQQWRkcmVzcyIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JU09BUEFkZHJlc3MiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTT0FQSGVhZGVyRmF1bHQiIGVTdXBlclR5cGVzPSIjLy9TT0FQSGVhZGVyQmFzZSAjLy9JU09BUEhlYWRlckZhdWx0Ii8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEhlYWRlciIgZVN1cGVyVHlwZXM9IiMvL1NPQVBIZWFkZXJCYXNlICMvL0lTT0FQSGVhZGVyIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaGVhZGVyRmF1bHRzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL1NPQVBIZWFkZXJGYXVsdCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iSVN0cmluZyIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubGFuZy5TdHJpbmciLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJU09BUEJpbmRpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJU09BUEFkZHJlc3MiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJU09BUEJvZHkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRFbmNvZGluZ1N0eWxlcyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RW5jb2RpbmdTdHlsZXMiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImVuY29kaW5nU3R5bGVzIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBhcnRzIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJ0cyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icGFydHMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBGYXVsdCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJU09BUE9wZXJhdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBIZWFkZXJGYXVsdCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJU09BUEhlYWRlciIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0U09BUEhlYWRlckZhdWx0cyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkU09BUEhlYWRlckZhdWx0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJzb2FwSGVhZGVyRmF1bHQiIGVUeXBlPSIjLy9JU09BUEhlYWRlckZhdWx0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci08L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9TT0FQLmdlbm1vZGVsIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9TT0FQLmdlbm1vZGVsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODYyM2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5nZW5tb2RlbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgotICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwIgotICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYyIKLSAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgbW9kZWxOYW1lPSJTT0FQIiBlZGl0UGx1Z2luQ2xhc3M9IiIgZWRpdG9yUGx1Z2luQ2xhc3M9IiIKLSAgICBub25OTFNNYXJrZXJzPSJ0cnVlIiBjb2RlRm9ybWF0dGluZz0idHJ1ZSIgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLnJvc2UiCi0gICAgdXNlZEdlblBhY2thZ2VzPSJXU0RMLmdlbm1vZGVsIy8vd3NkbCBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZ2VubW9kZWwjLy94c2QiPgotICA8Zm9yZWlnbk1vZGVsPlNPQVAubWRsPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+VkFCQVNFX1BMVUdJTlNfUEFUSDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPi4uLy4uLy4uPC9mb3JlaWduTW9kZWw+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlNPQVAiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgotICAgICAgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiB1dGlsaXR5UGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwudXRpbCIgZWNvcmVQYWNrYWdlPSJTT0FQLmVjb3JlIy8iPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iU09BUC5lY29yZSMvL0lTdHJpbmciLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUEJpbmRpbmciPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQQmluZGluZy90cmFuc3BvcnRVUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEJpbmRpbmcvc3R5bGUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL1NPQVBCb2R5Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEJvZHkvdXNlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBCb2R5L25hbWVzcGFjZVVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQQm9keS9lRW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBTT0FQLmVjb3JlIy8vU09BUEJvZHkvZVBhcnRzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL3VzZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZUVuY29kaW5nU3R5bGVzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL21lc3NhZ2UiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvcGFydCIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9lTWVzc2FnZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9lUGFydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9nZXRFbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9zZXRFbmNvZGluZ1N0eWxlcyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2Uvc2V0RW5jb2RpbmdTdHlsZXMvZW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL1NPQVBGYXVsdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBGYXVsdC91c2UiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEZhdWx0L25hbWVzcGFjZVVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQRmF1bHQvZUVuY29kaW5nU3R5bGVzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBGYXVsdC9uYW1lIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUE9wZXJhdGlvbi9zb2FwQWN0aW9uVVJJIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBPcGVyYXRpb24vc3R5bGUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL1NPQVBBZGRyZXNzIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEFkZHJlc3MvbG9jYXRpb25VUkkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL1NPQVBIZWFkZXJGYXVsdCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgU09BUC5lY29yZSMvL1NPQVBIZWFkZXIvaGVhZGVyRmF1bHRzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQQmluZGluZyIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQQWRkcmVzcyIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQQm9keSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iU09BUC5lY29yZSMvL0lTT0FQQm9keS9nZXRFbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvc2V0RW5jb2RpbmdTdHlsZXMiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU09BUC5lY29yZSMvL0lTT0FQQm9keS9zZXRFbmNvZGluZ1N0eWxlcy9lbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvZ2V0UGFydHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L3NldFBhcnRzIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvc2V0UGFydHMvcGFydHMiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vSVNPQVBGYXVsdCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQT3BlcmF0aW9uIi8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vSVNPQVBIZWFkZXJGYXVsdCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQSGVhZGVyIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBIZWFkZXIvZ2V0U09BUEhlYWRlckZhdWx0cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9JU09BUEhlYWRlci9hZGRTT0FQSGVhZGVyRmF1bHQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU09BUC5lY29yZSMvL0lTT0FQSGVhZGVyL2FkZFNPQVBIZWFkZXJGYXVsdC9zb2FwSGVhZGVyRmF1bHQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9TT0FQLm1kbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5tZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjBmMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9TT0FQLm1kbAorKysgL2Rldi9udWxsCkBAIC0xLDYyMzMgKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgRGVzaWduICJMb2dpY2FsIFZpZXciCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBkZWZhdWx0cyAgIAkob2JqZWN0IGRlZmF1bHRzCi0JcmlnaHRNYXJnaW4gCTAuMjUwMDAwCi0JbGVmdE1hcmdpbiAJMC4yNTAwMDAKLQl0b3BNYXJnaW4gIAkwLjI1MDAwMAotCWJvdHRvbU1hcmdpbiAJMC41MDAwMDAKLQlwYWdlT3ZlcmxhcCAJMC4yNTAwMDAKLQljbGlwSWNvbkxhYmVscyAJVFJVRQotCWF1dG9SZXNpemUgCVRSVUUKLQlzbmFwVG9HcmlkIAlUUlVFCi0JZ3JpZFggICAgICAJMTYKLQlncmlkWSAgICAgIAkxNgotCWRlZmF1bHRGb250IAkob2JqZWN0IEZvbnQKLQkgICAgc2l6ZSAgICAgICAJMTAKLQkgICAgZmFjZSAgICAgICAJIkFyaWFsIgotCSAgICBib2xkICAgICAgIAlGQUxTRQotCSAgICBpdGFsaWNzICAgIAlGQUxTRQotCSAgICB1bmRlcmxpbmUgIAlGQUxTRQotCSAgICBzdHJpa2UgICAgIAlGQUxTRQotCSAgICBjb2xvciAgICAgIAkwCi0JICAgIGRlZmF1bHRfY29sb3IgCVRSVUUpCi0Jc2hvd01lc3NhZ2VOdW0gCTEKLQlzaG93Q2xhc3NPZk9iamVjdCAJVFJVRQotCW5vdGF0aW9uICAgCSJVbmlmaWVkIikKLSAgICByb290X3VzZWNhc2VfcGFja2FnZSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiVXNlIENhc2UgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY0IgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IFVzZUNhc2VEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDc4IgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICByb290X2NhdGVnb3J5IAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJMb2dpY2FsIFZpZXciCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2MyIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlzdWJzeXN0ZW0gIAkiQ29tcG9uZW50IFZpZXciCi0JcXVpZHUgICAgICAJIjM5RTI3RjA4MDA2NSIKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ3c2RsIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2Uud3N0LndzZGxcXG1vZGVsXFxvcmcuZWNsaXBzZS53c3QuV1NETC5jYXQiCi0JCXF1aWQgICAgICAgCSIzQURGQjhFNTAyMUUiKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJzb2FwIgotCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNvYXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9TT0FQIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYmFzZVBhY2thZ2UiCi0JCQl2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJTT0FQIikpCi0JCXF1aWQgICAgICAgCSIzQTAxQ0YwQzAxQTIiCi0JCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQQmluZGluZyIKLQkJCXF1aWQgICAgICAgCSIzQTAxRDNCOTAxQUQiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFMDlBMzgwMUFCIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OTU1MDJCRiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEJpbmRpbmciCi0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4NUEyMDAxRiIpKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJ0cmFuc3BvcnRVUkkiCi0JCQkJYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldCkKLQkJCQlxdWlkICAgICAgIAkiM0EwMUQzREYwMUU0IgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInN0eWxlIgotCQkJCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQpCi0JCQkJcXVpZCAgICAgICAJIjNBMDFEM0YxMDI5RSIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQQm9keSIKLQkJCXF1aWQgICAgICAgCSIzQTAxREVENTAzMUYiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFMDlBNDUwMDQxIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4QTVCMDBCQiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEJvZHkiCi0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4ODRCMDExOSIpKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1c2UiCi0JCQkJcXVpZCAgICAgICAJIjNBMDFFMkQ1MDFBNSIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lc3BhY2VVUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBOTM0NzdDMDFCMiIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJlRW5jb2RpbmdTdHlsZXMiCi0JCQkJYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldCkKLQkJCQlxdWlkICAgICAgIAkiNDVFQzk4QTYwMjcxIgotCQkJCXN0ZXJlb3R5cGUgCSIwLi4qIgotCQkJCXR5cGUgICAgICAgCSJJU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQSGVhZGVyQmFzZSIKLQkJCXF1aWQgICAgICAgCSIzQTAxREVFNzAzNEQiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFMDlBM0UwMzI2IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKSkKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RW5jb2RpbmdTdHlsZXMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwNEMyMDBFQSIKLQkJCQlyZXN1bHQgICAgIAkiSUxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRFbmNvZGluZ1N0eWxlcyIKLQkJCQlxdWlkICAgICAgIAkiNDVFRDA1NzMwMjIyIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgImVuY29kaW5nU3R5bGVzIgotCQkJCQl0eXBlICAgICAgIAkiSUxpc3QiKSkKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1c2UiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyRTlDMDA1NiIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lc3BhY2VVUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyRUEyMDI1RCIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJlRW5jb2RpbmdTdHlsZXMiCi0JCQkJcXVpZCAgICAgICAJIjNFRTRBNThGMDFBRSIKLQkJCQlzdGVyZW90eXBlIAkiMC4uKiIKLQkJCQl0eXBlICAgICAgIAkiSVN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibWVzc2FnZSIKLQkJCQlxdWlkICAgICAgIAkiNDVGMDZFMzYwMTg2IgotCQkJCXR5cGUgICAgICAgCSJRTmFtZSIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAicGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDVGMDZFNkMwMTk2IgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIlNPQVBGYXVsdCIKLQkJCXF1aWQgICAgICAgCSIzQTA2RDlGQTAwRjciCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFMDlBNEEwMDIwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4QTA4MDMyQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEZhdWx0IgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODg4NzAxMTkiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidXNlIgotCQkJCXF1aWQgICAgICAgCSIzQTA5ODIxQTAxMkIiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZXNwYWNlVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MjA0ODAzQUUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZUVuY29kaW5nU3R5bGVzIgotCQkJCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMSkpKQotCQkJCXF1aWQgICAgICAgCSIzRUU0QTU2MzAzQUYiCi0JCQkJc3RlcmVvdHlwZSAJIjAuLioiCi0JCQkJdHlwZSAgICAgICAJIklTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWUiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjA3OUQxMDM5OSIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQT3BlcmF0aW9uIgotCQkJcXVpZCAgICAgICAJIjNBMEFENDU1MDBFOCIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUUwOUE0RTAzMUYiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg5N0YwMDdEIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQT3BlcmF0aW9uIgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODhBNTAxMjgiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAic29hcEFjdGlvblVSSSIKLQkJCQlxdWlkICAgICAgIAkiM0EwQUQ0NjQwMDRBIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInN0eWxlIgotCQkJCXF1aWQgICAgICAgCSIzQTBBRDQ2QzAxOEMiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEFkZHJlc3MiCi0JCQlxdWlkICAgICAgIAkiM0FEMUZGNzUwMjg3IgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5NTM1MDA5OCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0OEE3RTAxMDkiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBBZGRyZXNzIgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODdFNzAwRUEiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibG9jYXRpb25VUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBRDIxMUM5MDI1QyIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQSGVhZGVyRmF1bHQiCi0JCQlxdWlkICAgICAgIAkiM0FENjMyQjgwM0REIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRDYzMzM0MDAzOCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyQmFzZSIKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRTcwMzREIikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUVEMDc4QzAyRkQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBIZWFkZXJGYXVsdCIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4QkQwM0E5IikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQSGVhZGVyIgotCQkJcXVpZCAgICAgICAJIjNBRDYzMzA5MDE2RCIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzMDAxN0QiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUU3MDM0RCIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg5QkMwMzFDIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQSGVhZGVyIgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODhFNzAwOEMiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTdHJpbmciCi0JCQlxdWlkICAgICAgIAkiM0I4REQ5MEMwMjIwIgotCQkJc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLmxhbmcuU3RyaW5nIgotCQkJCXF1aWQgICAgICAgCSIzQjhERDkzMjAzODMiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQQmluZGluZyIKLQkJCXF1aWQgICAgICAgCSI0NUU0ODVBMjAwMUYiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg2MzcwMUQ0IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQQWRkcmVzcyIKLQkJCXF1aWQgICAgICAgCSI0NUU0ODdFNzAwRUEiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg3RjYwMzNDIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQQm9keSIKLQkJCXF1aWQgICAgICAgCSI0NUU0ODg0QjAxMTkiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJnZXRFbmNvZGluZ1N0eWxlcyIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDhFOEQwMjIyIgotCQkJCXJlc3VsdCAgICAgCSJJTGlzdCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gInNldEVuY29kaW5nU3R5bGVzIgotCQkJCXF1aWQgICAgICAgCSI0NUY2RDY4MjAyMDMiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAiZW5jb2RpbmdTdHlsZXMiCi0JCQkJCXR5cGUgICAgICAgCSJJTGlzdCIpKQotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUM1OEEzMDMxQyIKLQkJCQlyZXN1bHQgICAgIAkiSUxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRQYXJ0cyIKLQkJCQlxdWlkICAgICAgIAkiNDVGNkQ2NUEwMjAzIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgInBhcnRzIgotCQkJCQl0eXBlICAgICAgIAkiSUxpc3QiKSkKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4NTYwMjEzIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQRmF1bHQiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg4ODcwMTE5IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IgotCQkJCXF1aWQgICAgICAgCSI0NUU0ODg5NzAzQTkiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIKLQkJCQl0eXBlICAgICAgIAkidHlwZSIKLQkJCQlpbml0diAgICAgIAkiaW5pdHZhbCIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSVNPQVBPcGVyYXRpb24iCi0JCQlxdWlkICAgICAgIAkiNDVFNDg4QTUwMTI4IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4QUYwMEFCIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQSGVhZGVyRmF1bHQiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg4QkQwM0E5IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IgotCQkJCXF1aWQgICAgICAgCSI0NUU0ODhDRTAyOUYiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIKLQkJCQl0eXBlICAgICAgIAkidHlwZSIKLQkJCQlpbml0diAgICAgIAkiaW5pdHZhbCIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSVNPQVBIZWFkZXIiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg4RTcwMDhDIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0U09BUEhlYWRlckZhdWx0cyIKLQkJCQlxdWlkICAgICAgIAkiNDVFRDAzMDIwMDhDIgotCQkJCXJlc3VsdCAgICAgCSJJTGlzdCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImFkZFNPQVBIZWFkZXJGYXVsdCIKLQkJCQlxdWlkICAgICAgIAkiNDVFRDAzOTcwMkJGIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgInNvYXBIZWFkZXJGYXVsdCIKLQkJCQkJdHlwZSAgICAgICAJIklTT0FQSGVhZGVyRmF1bHQiKSkKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIgotCQkJCXF1aWQgICAgICAgCSI0NUU0ODhGMTAwQkIiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIKLQkJCQl0eXBlICAgICAgIAkidHlwZSIKLQkJCQlpbml0diAgICAgIAkiaW5pdHZhbCIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMCIKLQkJCXF1aWQgICAgICAgCSIzQTA2RTBCNTAwMzYiCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDEiCi0JCQkJcXVpZCAgICAgICAJIjNBMDZFMEI2MDBDNCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQQm9keSIKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRDUwMzFGIikKLQkJCSAgICAob2JqZWN0IFJvbGUgImVQYXJ0cyIKLQkJCQlxdWlkICAgICAgIAkiM0EwNkUwQjYwMEM1IgotCQkJCWxhYmVsICAgICAgCSJlUGFydHMiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJCQlDb250YWlubWVudCAJIkJ5IFJlZmVyZW5jZSIKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDIiCi0JCQlxdWlkICAgICAgIAkiM0FENjJERTYwMTMwIgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICJlTWVzc2FnZSIKLQkJCQlxdWlkICAgICAgIAkiM0FENjJERTcwMDRCIgotCQkJCWxhYmVsICAgICAgCSJlTWVzc2FnZSIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDMiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyREU3MDA1NSIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyQmFzZSIKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRTcwMzREIikpKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNCIKLQkJCXF1aWQgICAgICAgCSIzQUQ2MkRGODAyRDEiCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgImVQYXJ0IgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkRGQTAwMDIiCi0JCQkJbGFiZWwgICAgICAJImVQYXJ0IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkNSIKLQkJCQlxdWlkICAgICAgIAkiM0FENjJERkEwMDAzIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXJCYXNlIgotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVFNzAzNEQiKSkpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ2IgotCQkJcXVpZCAgICAgICAJIjNBRDYzMzM3MDFDRCIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkNyIKLQkJCQlxdWlkICAgICAgIAkiM0FENjMzMzcwMzcyIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXIiCi0JCQkJcXVpZHUgICAgICAJIjNBRDYzMzA5MDE2RCIKLQkJCQlpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBSb2xlICJoZWFkZXJGYXVsdHMiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYzMzM3MDM3MyIKLQkJCQlsYWJlbCAgICAgIAkiaGVhZGVyRmF1bHRzIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXJGYXVsdCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMyQjgwM0REIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJCQlDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCQkJQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpKSkpCi0JCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiM0EwMUNGMjMwMjlGIgotCQkJdGl0bGUgICAgICAJIkJpbmRpbmciCi0JCQl6b29tICAgICAgIAk4NwotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJpbmRpbmciIEAxCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3MDQsIDQ4MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ4NywgMzcyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQzNAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQQmluZGluZyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDFEM0I5MDFBRCIKLQkJCQl3aWR0aCAgICAgIAk0NTIKLQkJCQloZWlnaHQgICAgIAkyNDAKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBPcGVyYXRpb24iIEAyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNDcyLCA0ODApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjM1LCAzNzIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDc0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBPcGVyYXRpb24iKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTBBRDQ1NTAwRTgiCi0JCQkJd2lkdGggICAgICAJNDkyCi0JCQkJaGVpZ2h0ICAgICAJMjQwCi0JCQkJYW5ub3RhdGlvbiAJOCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXIiIEAzCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3NTIsIDE1NTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2MTIsIDE1MDQpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjgwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBIZWFkZXIiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMwOTAxNkQiCi0JCQkJd2lkdGggICAgICAJMjk4Ci0JCQkJaGVpZ2h0ICAgICAJMTIwCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyRmF1bHQiIEA0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxOTg0LCAxNTIwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTc5NywgMTQ3MikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNzQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEhlYWRlckZhdWx0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMyQjgwM0REIgotCQkJCXdpZHRoICAgICAgCTM5MgotCQkJCWhlaWdodCAgICAgCTEyMAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ2IiBANQotCQkJCWxvY2F0aW9uICAgCSgxMzQ0LCAxNTU5KQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDYzMzM3MDFDRCIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNyIgQDYKLQkJCQkJUGFyZW50X1ZpZXcgCUA1Ci0JCQkJCWxvY2F0aW9uICAgCSg2ODgsIDU1KQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRDYzMzM3MDM3MiIKLQkJCQkJY2xpZW50ICAgICAJQDUKLQkJCQkJc3VwcGxpZXIgICAJQDMKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDEzNDQsIDE1NTkpCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg5MDEsIDE1NTkpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJoZWFkZXJGYXVsdHMiIEA3Ci0JCQkJCVBhcmVudF9WaWV3IAlANQotCQkJCQlsb2NhdGlvbiAgIAkoNjg4LCA1NSkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOAotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA3Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTMzMSwgMTUxOSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTM0NgotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIitoZWFkZXJGYXVsdHMiCi0JCQkJCSAgICBwY3REaXN0ICAgIAktMC4wMzA3MDIKLQkJCQkJICAgIGhlaWdodCAgICAgCTQxCi0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMzNzAzNzMiCi0JCQkJCWNsaWVudCAgICAgCUA1Ci0JCQkJCXN1cHBsaWVyICAgCUA0Ci0JCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzQ0LCAxNTU5KQotCQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc4OCwgMTU1OSkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA3Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTY3MSwgMTUyMikKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNzM2ODQyCi0JCQkJCSAgICBoZWlnaHQgICAgIAkzOAotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEwCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDcKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNjE3LCAxNTk3KQotCQkJCQkgICAgYW5jaG9yICAgICAJMwotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTUxCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC42MTQwMzUKLQkJCQkJICAgIGhlaWdodCAgICAgCTM4Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkpKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiIEAxMQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDI3MzYsIDc4NCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDExCi0JCQkJICAgIGxvY2F0aW9uICAgCSgyNjEzLCA3MDcpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjQ2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1lc3NhZ2UiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCQkJd2lkdGggICAgICAJMjY0Ci0JCQkJaGVpZ2h0ICAgICAJMTc4Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyQmFzZSIgQDEyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNDcyLCA5MjgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTE1MSwgNjY1KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTY0MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQSGVhZGVyQmFzZSIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDFERUU3MDM0RCIKLQkJCQl3aWR0aCAgICAgIAk2NjAKLQkJCQloZWlnaHQgICAgIAk1NTAKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMiIgQDEzCi0JCQkJbG9jYXRpb24gICAJKDIyMDMsIDg1OCkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRFNjAxMzAiCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgImVNZXNzYWdlIiBAMTQKLQkJCQkJUGFyZW50X1ZpZXcgCUAxMwotCQkJCQlsb2NhdGlvbiAgIAkoMTA1MSwgLTMxMCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTUKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTQKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgyMzY3LCA4ODgpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkyMTYKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIrZU1lc3NhZ2UiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjQxMjMyMgotCQkJCQkgICAgaGVpZ2h0ICAgICAJMzAKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRDYyREU3MDA0QiIKLQkJCQkJY2xpZW50ICAgICAJQDEzCi0JCQkJCXN1cHBsaWVyICAgCUAxMQotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMjIwMywgODU4KQotCQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjYwNCwgODU4KQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNgotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNAotCQkJCQkgICAgbG9jYXRpb24gICAJKDI0NzksIDgyMSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNjg3MjA0Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkzOAotCQkJCQkgICAgb3JpZW50YXRpb24gCTApKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzIiBAMTcKLQkJCQkJUGFyZW50X1ZpZXcgCUAxMwotCQkJCQlsb2NhdGlvbiAgIAkoMTA1MSwgLTMxMCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTgKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTcKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgyMDU1LCA4OTgpCi0JCQkJCSAgICBoaWRkZW4gICAgIAlUUlVFCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxOTIKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjM3MjI1NAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNDAKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRDYyREU3MDA1NSIKLQkJCQkJY2xpZW50ICAgICAJQDEzCi0JCQkJCXN1cHBsaWVyICAgCUAxMgotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMjIwMywgODU4KQotCQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgwMiwgODU4KSkpKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJvZHkiIEAxOQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTQ3MiwgMjI0MCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE5Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjI2LCAyMTMyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQ5MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQQm9keSIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDFERUQ1MDMxRiIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE5Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjI2LCAyMTkyKQotCQkJCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQkgICAgZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCSAgICBubGluZXMgICAgIAk0Ci0JCQkJICAgIG1heF93aWR0aCAgCTApCi0JCQkJd2lkdGggICAgICAJNTEwCi0JCQkJaGVpZ2h0ICAgICAJMjQwCi0JCQkJYW5ub3RhdGlvbiAJOCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiIEAyMAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDIzNTIsIDIwODApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjIzNiwgMTg2NikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyMzMKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiUGFydCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJCQl3aWR0aCAgICAgIAkyNTEKLQkJCQloZWlnaHQgICAgIAk0NTIKLQkJCQlhbm5vdGF0aW9uIAk4KQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ0IiBAMjEKLQkJCQlsb2NhdGlvbiAgIAkoMjI5MCwgMTIzMCkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRGODAyRDEiCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgImVQYXJ0IiBAMjIKLQkJCQkJUGFyZW50X1ZpZXcgCUAyMQotCQkJCQlsb2NhdGlvbiAgIAkoMTEzOCwgNjIpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjM4MCwgMTc3OSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTEyMAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIitlUGFydCIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODgxNDY1Ci0JCQkJCSAgICBoZWlnaHQgICAgIAk5MAotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FENjJERkEwMDAyIgotCQkJCQljbGllbnQgICAgIAlAMjEKLQkJCQkJc3VwcGxpZXIgICAJQDIwCi0JCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgyMjkwLCAxMjMwKQotCQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjI5MCwgMTg1NCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMjIKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgyMjM3LCAxNzc5KQotCQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTUKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIxLi4xIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC44ODE0NjUKLQkJCQkJICAgIGhlaWdodCAgICAgCTU0Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkpCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDUiIEAyNQotCQkJCQlQYXJlbnRfVmlldyAJQDIxCi0JCQkJCWxvY2F0aW9uICAgCSgxMTM4LCA2MikKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjYKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMjUKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxOTI4LCAxMTM3KQotCQkJCQkgICAgaGlkZGVuICAgICAJVFJVRQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTIwCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQkJICAgIGhlaWdodCAgICAgCTQyCi0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRGQTAwMDMiCi0JCQkJCWNsaWVudCAgICAgCUAyMQotCQkJCQlzdXBwbGllciAgIAlAMTIKLQkJCQkJdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJCSAgICAoMjI5MCwgMTIzMCkKLQkJCQkJICAgICgyMjkwLCAxMDk1KQotCQkJCQkgICAgKDE4MDIsIDEwOTUpKQotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMjI5MCwgMTIzMCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDE4MDIsIDEwOTUpKSkpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDAiIEAyNwotCQkJCWxvY2F0aW9uICAgCSgxOTc3LCAyMjkxKQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDZFMEI1MDAzNiIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMSIgQDI4Ci0JCQkJCVBhcmVudF9WaWV3IAlAMjcKLQkJCQkJbG9jYXRpb24gICAJKDc0NSwgLTEzKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBMDZFMEI2MDBDNCIKLQkJCQkJY2xpZW50ICAgICAJQDI3Ci0JCQkJCXN1cHBsaWVyICAgCUAxOQotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTk3NywgMjI5MSkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDE3MjcsIDIyOTEpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlUGFydHMiIEAyOQotCQkJCQlQYXJlbnRfVmlldyAJQDI3Ci0JCQkJCWxvY2F0aW9uICAgCSg3NDUsIC0xMykKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzAKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMjkKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgyMTg1LCAyMzk1KQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTQ0Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VQYXJ0cyIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODMzODU2Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkxMDQKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBMDZFMEI2MDBDNSIKLQkJCQkJY2xpZW50ICAgICAJQDI3Ci0JCQkJCXN1cHBsaWVyICAgCUAyMAotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTk3NywgMjI5MSkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDIyMjcsIDIyOTEpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMxCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDI5Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjE4NSwgMjI0NSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODMzODU2Ci0JCQkJCSAgICBoZWlnaHQgICAgIAk0NwotCQkJCQkgICAgb3JpZW50YXRpb24gCTApKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQRmF1bHQiIEAzMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNTkyLCAyMjU2KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzIKLQkJCQkgICAgbG9jYXRpb24gICAJKDM0NiwgMjE0OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0OTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEZhdWx0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwNkQ5RkEwMEY3IgotCQkJCXdpZHRoICAgICAgCTUxMAotCQkJCWhlaWdodCAgICAgCTI0MAotCQkJCWFubm90YXRpb24gCTgpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU3RyaW5nIiBAMzMKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMjg4LCAxMzc2KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzMKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNCwgMTM0OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVN0cmluZyIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMwotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTE0LCAxMjk4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM0OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PGRhdGF0eXBlPj4iKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQjhERDkwQzAyMjAiCi0JCQkJd2lkdGggICAgICAJMzY2Ci0JCQkJaGVpZ2h0ICAgICAJMTgwCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDM0Ci0JCQkJbG9jYXRpb24gICAJKDE0NzIsIDE0MTgpCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJc3VwcGxpZXIgICAJQDEyCi0JCQkJdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJICAgICgxNDcyLCAxNDE4KQotCQkJCSAgICAoMTQ3MiwgMTIwMykpKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM1Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMzAwMTdEIgotCQkJCWNsaWVudCAgICAgCUAzCi0JCQkJc3VwcGxpZXIgICAJQDEyCi0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoODM2LCAxNDkyKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4MzYsIDE0MTgpCi0JCQkJZHJhd1N1cHBsaWVyIAlAMzQpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEJpbmRpbmciIEAzNgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3MDQsIDk2KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzYKLQkJCQkgICAgbG9jYXRpb24gICAJKDU1NywgNzIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjk0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQQmluZGluZyIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoNTU3LCAyMikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyOTQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4NUEyMDAxRiIKLQkJCQl3aWR0aCAgICAgIAkzMTIKLQkJCQloZWlnaHQgICAgIAkxNzIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OTU1MDJCRiIKLQkJCQljbGllbnQgICAgIAlAMQotCQkJCXN1cHBsaWVyICAgCUAzNgotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUE9wZXJhdGlvbiIgQDM4Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE0NzIsIDExMikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMzAzLCA4OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBPcGVyYXRpb24iKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzgKLQkJCQkgICAgbG9jYXRpb24gICAJKDEzMDMsIDM4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTMzOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4QTUwMTI4IgotCQkJCXdpZHRoICAgICAgCTM1NgotCQkJCWhlaWdodCAgICAgCTE3MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM5Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg5N0YwMDdEIgotCQkJCWNsaWVudCAgICAgCUAyCi0JCQkJc3VwcGxpZXIgICAJQDM4Ci0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQSGVhZGVyIiBANDAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3NTIsIDg2NCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2MTAsIDg0MCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBIZWFkZXIiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANDAKLQkJCQkgICAgbG9jYXRpb24gICAJKDYxMCwgNzkwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI4NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4RTcwMDhDIgotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTE3MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQxCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg5QkMwMzFDIgotCQkJCWNsaWVudCAgICAgCUAzCi0JCQkJc3VwcGxpZXIgICAJQDQwCi0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQSGVhZGVyRmF1bHQiIEA0MgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxOTg0LCAzNjgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTc5NSwgMzQ0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM3OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJU09BUEhlYWRlckZhdWx0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNzk1LCAyOTQpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzc4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODhCRDAzQTkiCi0JCQkJd2lkdGggICAgICAJMzk2Ci0JCQkJaGVpZ2h0ICAgICAJMTcyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDMKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMzNDAwMzgiCi0JCQkJY2xpZW50ICAgICAJQDQKLQkJCQlzdXBwbGllciAgIAlAMTIKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxOTIxLCAxNDYwKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxOTIxLCAxNDE4KQotCQkJCWRyYXdTdXBwbGllciAJQDM0KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBGYXVsdCIgQDQ0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU5MiwgMTc5MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0NjksIDE3NjgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjQ2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQRmF1bHQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANDQKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ2OSwgMTcxOCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyNDYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4ODg3MDExOSIKLQkJCQl3aWR0aCAgICAgIAkyNjQKLQkJCQloZWlnaHQgICAgIAkxNzIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0NQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4QTA4MDMyQyIKLQkJCQljbGllbnQgICAgIAlAMzIKLQkJCQlzdXBwbGllciAgIAlANDQKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCb2R5IiBANDYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTQ3MiwgMTc3NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjczLCAxNzI0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM5OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJU09BUEJvZHkiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANDYKLQkJCQkgICAgbG9jYXRpb24gICAJKDEyNzMsIDE2NzQpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzk4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODg0QjAxMTkiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0NgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTI3MywgMTc4NCkKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJNAotCQkJCSAgICBtYXhfd2lkdGggIAkwKQotCQkJCXdpZHRoICAgICAgCTQxNgotCQkJCWhlaWdodCAgICAgCTIyOAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQ3Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDhBNUIwMEJCIgotCQkJCWNsaWVudCAgICAgCUAxOQotCQkJCXN1cHBsaWVyICAgCUA0NgotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDgKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUVEMDc4QzAyRkQiCi0JCQkJY2xpZW50ICAgICAJQDQKLQkJCQlzdXBwbGllciAgIAlANDIKLQkJCQlsaW5lX3N0eWxlIAkwKSkpCi0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiUG9ydCIKLQkJCXF1aWQgICAgICAgCSIzQTA4NUUzMDAzNUMiCi0JCQl0aXRsZSAgICAgIAkiUG9ydCIKLQkJCXpvb20gICAgICAgCTkwCi0JCQltYXhfaGVpZ2h0IAkyODM1MAotCQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJCW9yaWdpbl94ICAgCTAKLQkJCW9yaWdpbl95ICAgCTAKLQkJCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQQWRkcmVzcyIgQDQ5Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg4NDgsIDgzMikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ5Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg2NDcsIDc1MSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MDIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEFkZHJlc3MiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQxRkY3NTAyODciCi0JCQkJd2lkdGggICAgICAJNDIwCi0JCQkJaGVpZ2h0ICAgICAJMTg2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEFkZHJlc3MiIEA1MAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg4NDgsIDI1NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDUwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2OTYsIDIzNSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBBZGRyZXNzIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDUwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2OTYsIDE4NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4N0U3MDBFQSIKLQkJCQl3aWR0aCAgICAgIAkzMjIKLQkJCQloZWlnaHQgICAgIAkxNjYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA1MQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4QTdFMDEwOSIKLQkJCQljbGllbnQgICAgIAlANDkKLQkJCQlzdXBwbGllciAgIAlANTAKLQkJCQlsaW5lX3N0eWxlIAkwKSkpCi0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiRXh0ZW5zaWJpbGl0eSIKLQkJCXF1aWQgICAgICAgCSIzQUUwOTlCMTAxNjEiCi0JCQl0aXRsZSAgICAgIAkiRXh0ZW5zaWJpbGl0eSIKLQkJCXpvb20gICAgICAgCTkwCi0JCQltYXhfaGVpZ2h0IAkyODM1MAotCQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJCW9yaWdpbl94ICAgCTAKLQkJCW9yaWdpbl95ICAgCTAKLQkJCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQQWRkcmVzcyIgQDUyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE1MjAsIDU3NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDUyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMzcxLCA1MjcpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjk4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBBZGRyZXNzIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FEMUZGNzUwMjg3IgotCQkJCXdpZHRoICAgICAgCTMxNgotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJpbmRpbmciIEA1MwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgzMDQsIDU5MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDUzCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNjIsIDU0MykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJpbmRpbmciKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxRDNCOTAxQUQiCi0JCQkJd2lkdGggICAgICAJMzAyCi0JCQkJaGVpZ2h0ICAgICAJMTIyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQQm9keSIgQDU0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDEwNzIsIDExMDQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1NAotCQkJCSAgICBsb2NhdGlvbiAgIAkoOTUwLCAxMDU1KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI0NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQQm9keSIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDFERUQ1MDMxRiIKLQkJCQl3aWR0aCAgICAgIAkyNjIKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBGYXVsdCIgQDU1Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDEyMzIsIDEyNjQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1NQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTExMiwgMTIxNSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyNDAKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEZhdWx0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwNkQ5RkEwMEY3IgotCQkJCXdpZHRoICAgICAgCTI1OAotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUE9wZXJhdGlvbiIgQDU2Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDUxMiwgNzUyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTYKLQkJCQkgICAgbG9jYXRpb24gICAJKDM0NCwgNzAzKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTMzNgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQT3BlcmF0aW9uIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwQUQ0NTUwMEU4IgotCQkJCXdpZHRoICAgICAgCTM1NAotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiIEA1NwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg4MTYsIDkyOCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDU3Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg2MjcsIDg3OSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEhlYWRlckJhc2UiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVFNzAzNEQiCi0JCQkJd2lkdGggICAgICAJMzk2Ci0JCQkJaGVpZ2h0ICAgICAJMTIyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDU4Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNjA4LCAxMjgpCi0JCQkJZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQkJICAgIGl0YWxpY3MgICAgCVRSVUUpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1OAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDA4LCA1MykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MDAKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJd2lkdGggICAgICAJNDE4Ci0JCQkJaGVpZ2h0ICAgICAJMTc0Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDU5Ci0JCQkJbG9jYXRpb24gICAJKDYwOCwgMzA1KQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSAgICAoNjA4LCAzMDUpCi0JCQkJICAgICg2MDgsIDIxNSkpKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDYwCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFMDlBMzgwMUFCIgotCQkJCWNsaWVudCAgICAgCUA1MwotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDM0NCwgNTMxKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzNDQsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA1OSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA2MQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTA5QTNFMDMyNiIKLQkJCQljbGllbnQgICAgIAlANTcKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg4MTUsIDg2NykKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoODE1LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANjIKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUUwOUE0NTAwNDEiCi0JCQkJY2xpZW50ICAgICAJQDU0Ci0JCQkJc3VwcGxpZXIgICAJQDU4Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTA2OCwgMTA0MykKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTA2OCwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDYzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFMDlBNEUwMzFGIgotCQkJCWNsaWVudCAgICAgCUA1NgotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDUwNiwgNjkxKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg1MDYsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA1OSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA2NAotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTA5QTRBMDAyMCIKLQkJCQljbGllbnQgICAgIAlANTUKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjMxLCAxMjAzKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjMxLCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANjUKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUUwOTUzNTAwOTgiCi0JCQkJY2xpZW50ICAgICAJQDUyCi0JCQkJc3VwcGxpZXIgICAJQDU4Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTUyMCwgNTE1KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNTIwLCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpKSkpKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ4c2QiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS54c2RcXG1vZGVsXFxvcmcuZWNsaXBzZS5YU0QuY2F0IgotCQlxdWlkICAgICAgIAkiMzlBQkRDNkYwMUFBIikpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDc2IgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6d3NkbCIgQDY2Ci0JCQlsb2NhdGlvbiAgIAkoMjcyLCAyNTYpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlANjYKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTI4LCAxNzIpCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ3c2RsIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQURGQjhFNTAyMUUiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OnNvYXAiIEA2NwotCQkJbG9jYXRpb24gICAJKDcwNCwgMjU2KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDY3Ci0JCQkgICAgbG9jYXRpb24gICAJKDU2MCwgMTcyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkic29hcCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0EwMUNGMEMwMUEyIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp4c2QiIEA2OAotCQkJbG9jYXRpb24gICAJKDExNTIsIDI1NikKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA2OAotCQkJICAgIGxvY2F0aW9uICAgCSgxMDA4LCAxNzIpCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ4c2QiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjM5QUJEQzZGMDFBQSIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKSkpKSkKLSAgICByb290X3N1YnN5c3RlbSAJKG9iamVjdCBTdWJTeXN0ZW0gIkNvbXBvbmVudCBWaWV3IgotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjUiCi0JcGh5c2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCXBoeXNpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBNb2R1bGVfRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA3NyIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcHJvY2Vzc19zdHJ1Y3R1cmUgCShvYmplY3QgUHJvY2Vzc2VzCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NiIKLQlQcm9jc05EZXZzIAkobGlzdAotCSAgICAob2JqZWN0IFByb2Nlc3NfRGlhZ3JhbSAiRGVwbG95bWVudCBWaWV3IgotCQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY4IgotCQl0aXRsZSAgICAgIAkiRGVwbG95bWVudCBWaWV3IgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb3BlcnRpZXMgCShvYmplY3QgUHJvcGVydGllcwotCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2UiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFCYXNlU2V0IiA4MDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJBTlNJIgotCQkJCXZhbHVlICAgICAgCTgwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIk9yYWNsZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJTUUxTZXJ2ZXIiCi0JCQkJdmFsdWUgICAgICAJODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU3liYXNlIgotCQkJCXZhbHVlICAgICAgCTgwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIldhdGNvbSIKLQkJCQl2YWx1ZSAgICAgIAk4MDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIklkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1KSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZSIKLQkJCXZhbHVlICAgICAgCSJWXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVF8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdFN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSJfViIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJCYXNlVmlld3MiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIlZBUkNIQVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc09LIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJmcmFtZXdvcmsiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExFbGVtZW50IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETFNwZWNpZmljYXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJJRExTcGVjU2V0IiAyMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCXZhbHVlICAgICAgCTIyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiVHlwZWRlZiIKLQkJCQl2YWx1ZSAgICAgIAk1NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkVudW1lcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkV4Y2VwdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk2MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlN0cnVjdCIKLQkJCQl2YWx1ZSAgICAgIAk1MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlVuaW9uIgotCQkJCXZhbHVlICAgICAgCTgxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcuc29hcC9zcmMvcm9zZS9zb2FwYmluZGluZ01kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSURMTW9kdWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLnNvYXAvc3JjL3Jvc2Uvc29hcGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlUHJlZml4ZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZVZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1fIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1ZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0QXR0cmlidXRlRGF0YVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0T3BlcmF0aW9uUmV0dXJuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJ2b2lkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSb290RGlyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQXV0b1N5bmMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTaG93Q29kZWdlbkRsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0QXV0aG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRTaW5jZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NOdW1Bc3Rlcmlza3MiCi0JCQl2YWx1ZSAgICAgIAkwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1heE51bUNoYXJzIgotCQkJdmFsdWUgICAgICAJODApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNIgotCQkJdmFsdWUgICAgICAJKCJWTVR5cGUiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdEluIgotCQkJCXZhbHVlICAgICAgCTEwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVk1UeXBlIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN1biIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTWljcm9zb2Z0IgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJJQk0iCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTm9DbGFzc0N1c3RvbURsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdsb2JhbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlQ2xhc3NTdHlsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlTWV0aG9kU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVRhYnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VTcGFjZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNwYWNpbmdJdGVtcyIKLQkJCXZhbHVlICAgICAgCTMpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9zZURlZmF1bHRDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFzdGVyaXNrQ29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YUNvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NBdXRob3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jU2luY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jVmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29kZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzYWJsZUF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZXNOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RBdHRyaWJ1dGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdFBhcmFtZXRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9ySGVhZGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbnRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0RGF0ZUhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb29raWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JDb29raWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGVudFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUhUTUwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJOYXRpdmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTeW5jaHJvbml6ZWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlByb3BlcnR5VHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQmVhblByb3BlcnR5X1NldCIgNzEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJlYW5Qcm9wZXJ0eV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTm90IEEgUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTcyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJvdW5kIgotCQkJCXZhbHVlICAgICAgCTczKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cmFpbmVkIgotCQkJCXZhbHVlICAgICAgCTc0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5kaXZpZHVhbENoYW5nZU1ndCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGUiCi0JCQl2YWx1ZSAgICAgIAkoIlJlYWQvV3JpdGVfU2V0IiA4MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCAmIFdyaXRlIgotCQkJCXZhbHVlICAgICAgCTgxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXcml0ZSBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGdWxseVF1YWxpZmllZFR5cGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzTmF2aWdhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSIzNjAwMDAwMDIiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIl9JRCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUsMCkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NjaGVtYSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJXaGVyZUNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVNjYWxlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbk9mUkVGUyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZCIKLQkJCXZhbHVlICAgICAgCSgiTWV0aG9kS2luZFNldCIgMTkwMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3ZlcmxvYWRJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2VsZmlzaCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyVHlwZVNldCIgMTgwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50IgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRXZlbnRTZXQiIDE2MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclJlZmVyZW5jaW5nTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckZvckVhY2hTZXQiIDE3MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJXaGVuQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJNYXBNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcmRlck1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkZ1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTE5MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUHJvY2VkdXJlIgotCQkJCXZhbHVlICAgICAgCTE5MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3BlcmF0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyIgotCQkJCXZhbHVlICAgICAgCTE5MDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ2FsY3VsYXRlZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTA5KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQUZURVIiCi0JCQkJdmFsdWUgICAgICAJMTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJCRUZPUkUiCi0JCQkJdmFsdWUgICAgICAJMTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNURUFEIE9GIgotCQkJCXZhbHVlICAgICAgCTE4MDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJST1ciCi0JCQkJdmFsdWUgICAgICAJMTcwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJTVEFURU1FTlQiCi0JCQkJdmFsdWUgICAgICAJMTcwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQiCi0JCQkJdmFsdWUgICAgICAJMTYwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc0FsbG93ZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2FsZSIKLQkJCXZhbHVlICAgICAgCSI2IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc0luZGV4IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJlcG9zaXRvcnkiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVXNlTVNWQyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImh+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwfiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVycm9yTGltaXQiCi0JCQl2YWx1ZSAgICAgIAkzMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiRST1NFQ1BQX1NPVVJDRSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlBhdGhTZXBhcmF0b3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkiMTI4dnhfYiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvb2xlYW5UeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93VGVtcGxhdGVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHBsaWNpdEluc3RhbnRpYXRpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dQcm90ZWN0ZWRJbmhlcml0YW5jZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbW1lbnRXaWR0aCIKLQkJCXZhbHVlICAgICAgCTYwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIk9wdGlvbmFsQnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2xhc3NLZXkiCi0JCQl2YWx1ZSAgICAgIAkiY2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlB1dEJvZGllc0luU3BlYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0RGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weUNvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXRDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvcktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3JhZ2VNZ210VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RyZWFtVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlRocmVlS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZyaWVuZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVBbmREZWZpbmUiCi0JCQkJdmFsdWUgICAgICAJMTk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlT25seSIKLQkJCQl2YWx1ZSAgICAgIAkyMDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRvTm90RGVjbGFyZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDYpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLnNvYXAvc3JjL3Jvc2Uvc29hcGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLnNvYXAvc3JjL3Jvc2Uvc29hcGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVPcmRlciIKLQkJCXZhbHVlICAgICAgCSJBTUlSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlIgotCQkJdmFsdWUgICAgICAJKCJJbmxpbmluZ1N0eWxlU2V0IiAyMDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbkNsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGb2xsb3dpbmdDbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwNykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUeXBlc0RlZmluZWQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVDbG9zdXJlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJPcGVyYXRpb25LaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNFeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRW50cnlDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5QW5ub3RhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3JkZXJlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNlbGVjdG9yTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3RvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEhhc1JlbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkhhc1JlbFR5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXNzb2NpYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kdGFyZ2V0Q2xhc3MiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0luaGVyaXQiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VBcmd1bWVudHMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJHZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuZ2V0KCRrZXlzKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lclNldCIKLQkJCXZhbHVlICAgICAgCSIkZGF0YS5zZXQoJGtleXMsJHZhbHVlKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZENvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiRzdXBwbGllciAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0luaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCSgiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0dldFNldEJ5UmVmZXJlbmNlIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVRdWFsaWZpZWRHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVF1YWxpZmllZFNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZFNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc0dldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc1NldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc1NldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NvY0NsYXNzU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0ZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdEF0dHJpYnV0ZVZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvZHlSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1N1YnN5c3RlbSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeUlzT25TZWFyY2hMaXN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2F0ZWdvcnkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNOYW1lc3BhY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kZW50IgotCQkJdmFsdWUgICAgICAJMikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiNS4wIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0NsYXNzVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0NsYXNzVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJJbnRlcmZhY2VfUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25fUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNsYXNzX0ZhY3RvcnkiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5IgotCQkJdmFsdWUgICAgICAJKCJDT2JqZWN0RnVuY3Rpb25hbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkR5bmFtaWMiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5jcmVhdGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTZXJpYWwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT3ZlcnJpZGVHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RBVEFfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpZWxkR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRklFTERfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTWVzc2FnZU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9NU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUVTU0FHRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJKCJPTEVGYWN0b3J5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdF9pbiIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkxpY2Vuc2VkIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ2xhc3NJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT0xFQ3RsVHlwZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRVR5cGVMaWIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWFqb3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWlub3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFUHJvcFBhZ2VJRHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEaXNwYXRjaE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tGdW5jdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hEZWZWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcElkRW51bSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQX0lEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnRlcmZhY2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJTlRFUkZBQ0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5pdEludGVyZmFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFdmVudFNpbmtNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUHJvcE5vdGlmeVNpbmtzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29ubmVjdGlvbk1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ29ubmVjdGlvblBvaW50SUlEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdGFuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDb21tYW5kcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNEZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNJbXBsZW1lbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFUTF9EZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNPTU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fUE9JTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNc2dNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wZXJ0eU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBST1BFUlRZX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ09wZXJhdGlvblR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNPcGVyYXRpb25UeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWxfT3ZlcnJpZGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZXNzYWdlX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaF9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfRmlyaW5nX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfU2lua19IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RkX09MRV9NZXRob2QiCi0JCQkJdmFsdWUgICAgICAJNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb21tYW5kX1BhcnNlciIKLQkJCQl2YWx1ZSAgICAgIAk3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X0dldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X1NldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X05vdGlmeV9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNYWNyb19HZW5lcmF0ZWRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQm9keUltYWdlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluY2x1ZGVzR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfSU5DTFVERVNfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc2VydExvY2F0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJTQ0MiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlR5cGVMaWJJbXBvcnRlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjc4MzYwNjM3OCIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWNOb3RDcmVhdGFibGUiCi0JCQkJdmFsdWUgICAgICAJMjEzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiU2luZ2xlVXNlIgotCQkJCXZhbHVlICAgICAgCTIxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkdsb2JhbFNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiMCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25FeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25Db21wYXJlIgotCQkJdmFsdWUgICAgICAJKCJDb21wYXJlU2V0IiAyMDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlIgotCQkJdmFsdWUgICAgICAJKCJDcmVhdGFibGVTZXQiIDIyMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluaXRpYWxpemF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVRlcm1pbmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiQ29sbGVjdGlvbiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb21wYXJlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJCaW5hcnkiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiVGV4dCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiRvcGVyYXRpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTGlicmFyeU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkFsaWFzTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSXNTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkV4aXRDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmV3IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJXaXRoRXZlbnRzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGUkc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUxldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRzRGVsZWdhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJQcm9qZWN0RmlsZSIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbFN0dWRpbyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkVkaXRvclR5cGUiIDEwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIldpbmRvd3NTaGVsbCIKLQkJCQl2YWx1ZSAgICAgIAkxMDEpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBcnJheURpbWVuc2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAlUSUgJVolICVXJSIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJPcmRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZXh0UmVmIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSXNTaW5nbGVUaHJlYWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SXNTZWN1cmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckluY2x1ZGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVyRm9yd2FyZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldGdldEluZm8iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSHR0cF9TZXJ2bGV0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfRUpCX19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlX1hNTF9ERCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ21wRmllbGQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJFbnZpcm9ubWVudFByb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbnhGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVmZXJlbmNlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJOYW1lSW5KQVIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCU2Vzc2lvblR5cGVfU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlbGVzcyIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVmdWwiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IiAyMTEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIxMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIxMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIgMjIwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMjApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIyMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZW50cmFudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJNUF9FeHRlbmRfQ01QIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUjJFZGl0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgTW9kZWwgSW50ZWdyYXRvciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUm9zZSBXZWIgUHVibGlzaGVyIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWZXJzaW9uIENvbnRyb2wiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2OSIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInBhY2thZ2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY2xhc3NpZmllck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY29uc3RyYWludHMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiQ29udGVudEtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRW1wdHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk1peGVkIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnRPbmx5IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJvcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhdHRyaWJ1dGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNJRCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJyZWZlcmVuY2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzUmVzb2x2ZVByb3hpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkpCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NyIpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk3ZjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvV1NETC5lY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDYwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJ3c2RsIgotICAgIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIiBuc1ByZWZpeD0id3NkbCI+Ci0gIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGUgV1NETCBtb2RlbCBjb250YWlucyBjbGFzc2VzIGZvciB0aGUgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKS4mI3hEOyYjeEE7JiN4RDsmI3hBO1dTREwgZGVzY3JpYmVzIG5ldHdvcmsgc2VydmljZXMgYXMgc2V0cyBvZiBlbmRwb2ludHMgb3BlcmF0aW5nIG9uIG1lc3NhZ2VzLiBUaGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgYXJlIGRlc2NyaWJlZCBhYnN0cmFjdGx5LCBhbmQgdGhlbiBib3VuZCB0byBhIGNvbmNyZXRlIG5ldHdvcmsgcHJvdG9jb2wgYW5kIG1lc3NhZ2UgZm9ybWF0IHRvIGRlZmluZSBhbiBlbmRwb2ludC4mI3hEOyYjeEE7JiN4RDsmI3hBO1dTREwgZGVzY3JpYmVzIHRoZSBmb3JtYXRzIG9mIHRoZSBtZXNzYWdlcyBleGNoYW5nZWQgYnkgdGhlIHNlcnZpY2VzLCBhbmQgc3VwcG9ydHMgdGhlIFhNTCBTY2hlbWFzIHNwZWNpZmljYXRpb24gYXMgaXRzIGNhbm9uaWNhbCB0eXBlIHN5c3RlbS4gVGhpcyBwYWNrYWdlIHVzZXMgYW4gWE1MIFNjaGVtYSBJbmZvc2V0IG1vZGVsIHBhY2thZ2UgKHNlZSB0aGUgWFNEIHBhY2thZ2UpIHRvIGRlc2NyaWJlIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdHMuJiN4RDsmI3hBOyYjeEQ7JiN4QTtUaGUgbW9kZWwgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkaWFncmFtcywgbmFtZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcHRlcnMgaW4gdGhlIFdTREwgMS4xIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvTk9URS13c2RsLTIwMDEwMzE1KSYjeEQ7JiN4QTstIDIuMSBEZWZpbml0aW9uLCBzaG93cyB0aGUgV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgYW5kIHRoZSBXU0RMIGRvY3VtZW50IHN0cnVjdHVyZSYjeEQ7JiN4QTstIDIuMS4xIE5hbWluZyBhbmQgTGlua2luZywgc2hvd3MgdGhlIG5hbWVzcGFjZSBhbmQgaW1wb3J0IG1lY2hhbmlzbSYjeEQ7JiN4QTstIDIuMS4zIEV4dGVuc2liaWxpdHksIHNob3dzIHRoZSBXU0RMIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtJiN4RDsmI3hBOy0gMi4yIFR5cGVzLCBzaG93cyB0aGUgdXNlIG9mIFhNTCBTY2hlbWEgdHlwZXMgaW4gV1NETCYjeEQ7JiN4QTstIDIuMyBNZXNzYWdlcywgMi40IFBvcnRUeXBlcywgMi41IEJpbmRpbmdzIGFuZCAyLjcgU2VydmljZXMsIHNob3cgdGhlIG1ham9yIFdTREwgZWxlbWVudHMgYW5kIHRoZWlyIHJlbGF0aW9ucy4mI3hEOyYjeEE7JiN4RDsmI3hBO1RoZSBXU0RMIGNsYXNzZXMgZXh0ZW5kIHRoZSBqYXZheC53c2RsIGludGVyZmFjZXMgZGVmaW5lZCBieSBKU1IgMTEwLiBDbGFzc2VzIHdpdGggaW50ZXJmYWNlIGFuZCBkYXRhdHlwZSBzdGVyZW90eXBlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlc2Ugbm9uLU1PRiBpbnRlcmZhY2VzLiIvPgotICA8L2VBbm5vdGF0aW9ucz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJXU0RMRWxlbWVudCIgYWJzdHJhY3Q9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgbGFuZ3VhZ2UgZWxlbWVudC4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIgZVR5cGU9IiMvL0RlZmluaXRpb24iLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RW5jbG9zaW5nRGVmaW5pdGlvbiI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZGVmaW5pdGlvbiIgZVR5cGU9IiMvL0RlZmluaXRpb24iLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkb2N1bWVudGF0aW9uRWxlbWVudCIgZVR5cGU9IiMvL0RPTUVsZW1lbnQiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZWxlbWVudCIgZVR5cGU9IiMvL0RPTUVsZW1lbnQiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3J0VHlwZSIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lQb3J0VHlwZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb3J0VHlwZSBlbGVtZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjEgYW5kIGFuIEludGVyZmFjZSBjb21wb25lbnQgb2YgdGhlIFdTREwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMi4gQSBwb3J0IHR5cGUgb3IgSW50ZXJmYWNlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPcGVyYXRpb25zIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL09wZXJhdGlvbiIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iT3BlcmF0aW9uIiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSU9wZXJhdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudC4gQSBXU0RMIG9wZXJhdGlvbiBpcyBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbiBvZiBhbiBhY3Rpb24gc3VwcG9ydGVkIGJ5IGEgc2VydmljZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3R5bGUiIGVUeXBlPSIjLy9PcGVyYXRpb25UeXBlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idW5kZWZpbmVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlSW5wdXQiIGVUeXBlPSIjLy9JbnB1dCIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU91dHB1dCIgZVR5cGU9IiMvL091dHB1dCIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUZhdWx0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9GYXVsdCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBhcmFtZXRlck9yZGVyaW5nIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL1BhcnQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWVzc2FnZSIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lNZXNzYWdlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG1lc3NhZ2UgZWxlbWVudC4gQSBXU0RMIG1lc3NhZ2UgaXMgYW4gYWJzdHJhY3QsIHR5cGVkIGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgY29tbXVuaWNhdGVkLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJxTmFtZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVuZGVmaW5lZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBhcnRzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL1BhcnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBhcnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JUGFydCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwYXJ0IGVsZW1lbnQuIFBhcnRzIGRlc2NyaWJlIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBFYWNoIHBhcnQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdHlwZSBmcm9tIHNvbWUgdHlwZSBzeXN0ZW0uICIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVsZW1lbnROYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idHlwZU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0eXBlRGVmaW5pdGlvbiIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZWNvcmUjLy9YU0RUeXBlRGVmaW5pdGlvbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlbGVtZW50RGVjbGFyYXRpb24iIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmVjb3JlIy8vWFNERWxlbWVudERlY2xhcmF0aW9uIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVNZXNzYWdlIiBlVHlwZT0iIy8vTWVzc2FnZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCaW5kaW5nIiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmciPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgYmluZGluZyBlbGVtZW50LiBBIGJpbmRpbmcgZGVmaW5lcyBtZXNzYWdlIGZvcm1hdCBhbmQgcHJvdG9jb2wgZGV0YWlscyBmb3Igb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydFR5cGUuIFRoZXJlIG1heSBiZSBhbnkgbnVtYmVyIG9mIGJpbmRpbmdzIGZvciBhIGdpdmVuIHBvcnRUeXBlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJxTmFtZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVuZGVmaW5lZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBvcnRUeXBlIiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iIy8vUG9ydFR5cGUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmdPcGVyYXRpb25zIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL0JpbmRpbmdPcGVyYXRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJpbmRpbmdPcGVyYXRpb24iIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSB3aXRoaW4gdGhlIGJpbmRpbmcncyBwb3J0VHlwZS4gIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU9wZXJhdGlvbiIgbG93ZXJCb3VuZD0iMSIKLSAgICAgICAgZVR5cGU9IiMvL09wZXJhdGlvbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlQmluZGluZ0lucHV0IiBlVHlwZT0iIy8vQmluZGluZ0lucHV0IgotICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlQmluZGluZ091dHB1dCIgZVR5cGU9IiMvL0JpbmRpbmdPdXRwdXQiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVCaW5kaW5nRmF1bHRzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL0JpbmRpbmdGYXVsdCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2VydmljZSIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lTZXJ2aWNlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gQSBzZXJ2aWNlIGdyb3VwcyBhIHNldCBvZiByZWxhdGVkIHBvcnRzIHRvZ2V0aGVyLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJxTmFtZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVuZGVmaW5lZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBvcnRzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL1BvcnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JUG9ydCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb3J0IGVsZW1lbnQuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzIGZvciBhIGJpbmRpbmciLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlQmluZGluZyIgbG93ZXJCb3VuZD0iMSIKLSAgICAgICAgZVR5cGU9IiMvL0JpbmRpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGVTdXBlclR5cGVzPSIjLy9XU0RMRWxlbWVudCAjLy9JRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiBXU0RMIGFsbG93cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlcXVpcmVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbGVtZW50VHlwZSIgZVR5cGU9IiMvL1FOYW1lIgotICAgICAgICB0cmFuc2llbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVmaW5pdGlvbiIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lEZWZpbml0aW9uIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQgaXMgdGhlIHJvb3QgZWxlbWVudCBvZiBhIFdTREwgZG9jdW1lbnQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldERvY3VtZW50IiBlVHlwZT0iIy8vRE9NRG9jdW1lbnQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RG9jdW1lbnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRvY3VtZW50IiBlVHlwZT0iIy8vRE9NRG9jdW1lbnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXROYW1lc3BhY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbmNvZGluZyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlSW1wb3J0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9JbXBvcnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVUeXBlcyIgZVR5cGU9IiMvL1R5cGVzIgotICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlTWVzc2FnZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTWVzc2FnZSIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBvcnRUeXBlcyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9Qb3J0VHlwZSIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmdzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL0JpbmRpbmciIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVTZXJ2aWNlcyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9TZXJ2aWNlIiBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlTmFtZXNwYWNlcyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lc3BhY2UiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkltcG9ydCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lJbXBvcnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBXU0RMIGltcG9ydCBlbGVtZW50LiBXU0RMIGFsbG93cyBhc3NvY2lhdGluZyBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24gdXNpbmcgYW4gaW1wb3J0IGVsZW1lbnQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFNjaGVtYSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZWNvcmUjLy9YU0RTY2hlbWEiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0U2NoZW1hIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJzY2hlbWEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmVjb3JlIy8vWFNEU2NoZW1hIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZXNwYWNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxvY2F0aW9uVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVEZWZpbml0aW9uIiBlVHlwZT0iIy8vRGVmaW5pdGlvbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlU2NoZW1hIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5lY29yZSMvL1hTRFNjaGVtYSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFeHRlbnNpYmxlRWxlbWVudCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9XU0RMRWxlbWVudCAjLy9JRWxlbWVudEV4dGVuc2libGUgIy8vSUF0dHJpYnV0ZUV4dGVuc2libGUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiBXU0RMIGFsbG93cyBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IChyZWZlcnJlZCB0byBoZXJlIGFzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMpIHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvaW50IG9mIGV4dGVuc2liaWxpdHkuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklucHV0IiBlU3VwZXJUeXBlcz0iIy8vTWVzc2FnZVJlZmVyZW5jZSAjLy9JSW5wdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudC4gQW4gaW5wdXQgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0IGZvciB0aGUgaW5wdXQgb2YgdGhlIG9wZXJhdGlvbi4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iT3V0cHV0IiBlU3VwZXJUeXBlcz0iIy8vTWVzc2FnZVJlZmVyZW5jZSAjLy9JT3V0cHV0Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50LiBBbiBvdXRwdXQgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0IGZvciB0aGUgb3V0cHV0IG9mIHRoZSBvcGVyYXRpb24uIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkZhdWx0IiBlU3VwZXJUeXBlcz0iIy8vTWVzc2FnZVJlZmVyZW5jZSAjLy9JRmF1bHQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZmF1bHQgZWxlbWVudC4gRmF1bHQgZWxlbWVudHMgc3BlY2lmeSB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIGFueSBlcnJvciBtZXNzYWdlcyB0aGF0IG1heSBiZSBvdXRwdXQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uICIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCaW5kaW5nSW5wdXQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JQmluZGluZ0lucHV0Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIGlucHV0IGVsZW1lbnQgd2l0aGluIGFuIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgaW5wdXQgb2YgdGhlIG9wZXJhdGlvbi4gIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldElucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldElucHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpbnB1dCIgZVR5cGU9IiMvL0lJbnB1dCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUlucHV0IiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iIy8vSW5wdXQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQmluZGluZ091dHB1dCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lCaW5kaW5nT3V0cHV0Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvdXRwdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4gIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3V0cHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvdXRwdXQiIGVUeXBlPSIjLy9JT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlT3V0cHV0IiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iIy8vT3V0cHV0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJpbmRpbmdGYXVsdCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lCaW5kaW5nRmF1bHQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZmF1bHQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQSBmYXVsdCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZhdWx0IHdpdGggdGhlIHNhbWUgbmFtZS4gIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEZhdWx0IiBlVHlwZT0iIy8vSUZhdWx0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldEZhdWx0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJmYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUZhdWx0IiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iIy8vRmF1bHQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iUU5hbWUiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUU5hbWUgY2xhc3MuIEEgUU5hbWUgaXMgYSBmdWxseSBxdWFsaWZpZWQgbmFtZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTmFtZXNwYWNlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWVzcGFjZSBwcmVmaXggdXNlZCBpbiBhIFdTREwgZG9jdW1lbnQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwcmVmaXgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iT3BlcmF0aW9uVHlwZSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuT3BlcmF0aW9uVHlwZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iT05FX1dBWT0xJiN4RDsmI3hBO1JFUVVFU1RfUkVTUE9OU0U9MiYjeEQ7JiN4QTtTT0xJQ0lUX1JFU1BPTlNFPTMmI3hEOyYjeEE7Tk9USUZJQ0FUSU9OPTQiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVBvcnRUeXBlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5Qb3J0VHlwZSIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnRUeXBlIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRPcGVyYXRpb24iPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im9wZXJhdGlvbiIgZVR5cGU9IiMvL0lPcGVyYXRpb24iLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRPcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iaW5wdXROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3V0cHV0TmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE9wZXJhdGlvbnMiIGVUeXBlPSIjLy9JTGlzdCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJT3BlcmF0aW9uIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5PcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vSUVsZW1lbnRFeHRlbnNpYmxlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3BlcmF0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZmF1bHQiIGVUeXBlPSIjLy9JRmF1bHQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRGYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEZhdWx0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFyYW1ldGVyT3JkZXJpbmciIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJhbWV0ZXJPcmRlcmluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icGFyYW1ldGVyT3JkZXIiIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldElucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldElucHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpbnB1dCIgZVR5cGU9IiMvL0lJbnB1dCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3V0cHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvdXRwdXQiIGVUeXBlPSIjLy9JT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUlucHV0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5JbnB1dCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLklucHV0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSU91dHB1dCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuT3V0cHV0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0lBdHRyaWJ1dGVFeHRlbnNpYmxlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3V0cHV0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUZhdWx0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5GYXVsdCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkZhdWx0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSU1lc3NhZ2UiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLk1lc3NhZ2UiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vSUVsZW1lbnRFeHRlbnNpYmxlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuTWVzc2FnZSBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iIy8vSVBhcnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0IiBlVHlwZT0iIy8vSVBhcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0T3JkZXJlZFBhcnRzIiBlVHlwZT0iIy8vSUxpc3QiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnRPcmRlciIgZVR5cGU9IiMvL0lMaXN0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVBhcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLlBhcnQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vSUF0dHJpYnV0ZUV4dGVuc2libGUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5QYXJ0IG5vbi1NT0YgaW50ZXJmYWNlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTZXJ2aWNlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5TZXJ2aWNlIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0lFbGVtZW50RXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlNlcnZpY2Ugbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcnQiIGVUeXBlPSIjLy9JUG9ydCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcnRzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQb3J0IiBlVHlwZT0iIy8vSVBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJUG9ydCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuUG9ydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JRWxlbWVudEV4dGVuc2libGUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5Qb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0QmluZGluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZyIgZVR5cGU9IiMvL0lCaW5kaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmciCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vSUVsZW1lbnRFeHRlbnNpYmxlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZyBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iaW5wdXROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3V0cHV0TmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEJpbmRpbmdPcGVyYXRpb25zIiBlVHlwZT0iIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UG9ydFR5cGUiIGVUeXBlPSIjLy9JUG9ydFR5cGUiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0UG9ydFR5cGUiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdPcGVyYXRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vSUVsZW1lbnRFeHRlbnNpYmxlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkQmluZGluZ0ZhdWx0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJiaW5kaW5nRmF1bHQiIGVUeXBlPSIjLy9JQmluZGluZ0ZhdWx0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ0ZhdWx0IiBlVHlwZT0iIy8vSUJpbmRpbmdGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEJpbmRpbmdGYXVsdHMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE9wZXJhdGlvbiIgZVR5cGU9IiMvL0lPcGVyYXRpb24iLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ0lucHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdJbnB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRCaW5kaW5nSW5wdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImJpbmRpbmdJbnB1dCIgZVR5cGU9IiMvL0lCaW5kaW5nSW5wdXQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5nT3V0cHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0QmluZGluZ091dHB1dCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZ091dHB1dCIgZVR5cGU9IiMvL0lCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdJbnB1dCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuQmluZGluZ0lucHV0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0lFbGVtZW50RXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdPdXRwdXQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vSUVsZW1lbnRFeHRlbnNpYmxlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdGYXVsdCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0lFbGVtZW50RXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iRE9NRWxlbWVudCIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy53M2MuZG9tLkVsZW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUV4dGVuc2liaWxpdHlFbGVtZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRGVmaW5pdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuRGVmaW5pdGlvbiIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JRWxlbWVudEV4dGVuc2libGUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5EZWZpbml0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRCaW5kaW5nIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJiaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRJbXBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImltcG9ydERlZiIgZVR5cGU9IiMvL0lJbXBvcnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRNZXNzYWdlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGROYW1lc3BhY2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwb3J0VHlwZSIgZVR5cGU9IiMvL0lQb3J0VHlwZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFNlcnZpY2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InNlcnZpY2UiIGVUeXBlPSIjLy9JU2VydmljZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUJpbmRpbmdGYXVsdCIgZVR5cGU9IiMvL0lCaW5kaW5nRmF1bHQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlQmluZGluZ0lucHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdJbnB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVCaW5kaW5nT3V0cHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlQmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUJpbmRpbmciIGVUeXBlPSIjLy9JQmluZGluZyIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVGYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVJbXBvcnQiIGVUeXBlPSIjLy9JSW1wb3J0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUlucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZU1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVPcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZU91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlUGFydCIgZVR5cGU9IiMvL0lQYXJ0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZVBvcnQiIGVUeXBlPSIjLy9JUG9ydCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVQb3J0VHlwZSIgZVR5cGU9IiMvL0lQb3J0VHlwZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVTZXJ2aWNlIiBlVHlwZT0iIy8vSVNlcnZpY2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZyIgZVR5cGU9IiMvL0lCaW5kaW5nIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5ncyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW1wb3J0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW1wb3J0cyIgZVR5cGU9IiMvL0lMaXN0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1lc3NhZ2VzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROYW1lc3BhY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE5hbWVzcGFjZXMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQb3J0VHlwZXMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZXNwYWNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0U2VydmljZSIgZVR5cGU9IiMvL0lTZXJ2aWNlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTZXJ2aWNlcyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uUmVnaXN0cnkiIGVUeXBlPSIjLy9JRXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RXh0ZW5zaW9uUmVnaXN0cnkiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImV4dGVuc2lvblJlZ2lzdHJ5IiBlVHlwZT0iIy8vSUV4dGVuc2lvblJlZ2lzdHJ5Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RG9jdW1lbnRCYXNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldERvY3VtZW50QmFzZVVSSSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZG9jdW1lbnRCYXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlVHlwZXMiIGVUeXBlPSIjLy9JVHlwZXMiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVtb3ZlU2VydmljZSIgZVR5cGU9IiMvL0lTZXJ2aWNlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZW1vdmVCaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InJlbW92ZVBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZW1vdmVNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFR5cGVzIiBlVHlwZT0iIy8vSVR5cGVzIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFR5cGVzIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0eXBlcyIgZVR5cGU9IiMvL0lUeXBlcyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklJbXBvcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkltcG9ydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkltcG9ydCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUxpc3QiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuTGlzdCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuTGlzdCBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklNYXAiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuTWFwIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmEudXRpbC5NYXAgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJVVJMIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS5uZXQuVVJMIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmEubmV0LlVSTCBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklFeHRlbnNpb25SZWdpc3RyeSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUeXBlcyIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lUeXBlcyI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCB0eXBlcyBlbGVtZW50LiBUaGUgdHlwZXMgZWxlbWVudCBlbmNsb3NlcyBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIHRoZSBleGNoYW5nZWQgbWVzc2FnZXMuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFNjaGVtYXMiIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTY2hlbWFzIiBlVHlwZT0iIy8vSUxpc3QiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklJdGVyYXRvciIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEudXRpbC5JdGVyYXRvciIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuSXRlcmF0b3IgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJXU0RMRXhjZXB0aW9uIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuRXhjZXB0aW9uIGNsYXNzLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJVHlwZXMiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLlR5cGVzIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlR5cGVzIG5vbi1NT0YgaW50ZXJmYWNlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY2hpbGRyZW4iIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lTY2hlbWEiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkb2N1bWVudEJhc2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic2NoZW1hIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5lY29yZSMvL1hTRFNjaGVtYSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iRE9NRG9jdW1lbnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJvcmcudzNjLmRvbS5Eb2N1bWVudCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBvcmcudzNjLmRvbS5Eb2N1bWVudCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWVzc2FnZVJlZmVyZW5jZSIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU1lc3NhZ2UiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9NZXNzYWdlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklFbGVtZW50RXh0ZW5zaWJsZSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FbGVtZW50RXh0ZW5zaWJsZSIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRFeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZXh0RWxlbWVudCIgZVR5cGU9IiMvL0lFeHRlbnNpYmlsaXR5RWxlbWVudCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklBdHRyaWJ1dGVFeHRlbnNpYmxlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGUiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uQXR0cmlidXRlIiBlVHlwZT0iIy8vSU9iamVjdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RXh0ZW5zaW9uQXR0cmlidXRlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0lPYmplY3QiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRFeHRlbnNpb25BdHRyaWJ1dGVzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROYXRpdmVBdHRyaWJ1dGVOYW1lcyIgZVR5cGU9IiMvL0lMaXN0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklPYmplY3QiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuT2JqZWN0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTY2hlbWEiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYSIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Y2ZiNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsMzkxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgotICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsIgotICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC5lZGl0L3NyYyIgZWRpdG9yRGlyZWN0b3J5PSJvcmcuZWNsaXBzZS53c3Qud3NkbC5lZGl0b3Ivc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9IldTREwiIG1vZGVsUGx1Z2luQ2xhc3M9IiIgZWRpdFBsdWdpbkNsYXNzPSIiCi0gICAgZWRpdG9yUGx1Z2luQ2xhc3M9IiIgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5XU0RMLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJXU0RMIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0IiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgotICAgICAgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiB1dGlsaXR5UGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwudXRpbCIgZWNvcmVQYWNrYWdlPSJXU0RMLmVjb3JlIy8iPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iV1NETC5lY29yZSMvL1FOYW1lIi8+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJXU0RMLmVjb3JlIy8vT3BlcmF0aW9uVHlwZSIvPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iV1NETC5lY29yZSMvL0RPTUVsZW1lbnQiLz4KLSAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IldTREwuZWNvcmUjLy9XU0RMRXhjZXB0aW9uIi8+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJXU0RMLmVjb3JlIy8vRE9NRG9jdW1lbnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL1dTRExFbGVtZW50L2RvY3VtZW50YXRpb25FbGVtZW50Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL1dTRExFbGVtZW50L2VsZW1lbnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vV1NETEVsZW1lbnQvZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudC9zZXRFbmNsb3NpbmdEZWZpbml0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudC9zZXRFbmNsb3NpbmdEZWZpbml0aW9uL2RlZmluaXRpb24iLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BvcnRUeXBlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUG9ydFR5cGUvcU5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUG9ydFR5cGUvdW5kZWZpbmVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9Qb3J0VHlwZS9lT3BlcmF0aW9ucyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vT3BlcmF0aW9uL3N0eWxlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL09wZXJhdGlvbi9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL09wZXJhdGlvbi91bmRlZmluZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL09wZXJhdGlvbi9lSW5wdXQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL09wZXJhdGlvbi9lT3V0cHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9PcGVyYXRpb24vZUZhdWx0cyIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9PcGVyYXRpb24vZVBhcmFtZXRlck9yZGVyaW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9NZXNzYWdlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vTWVzc2FnZS9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9NZXNzYWdlL3VuZGVmaW5lZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vTWVzc2FnZS9lUGFydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BhcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9QYXJ0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUGFydC9lbGVtZW50TmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9QYXJ0L3R5cGVOYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL1BhcnQvdHlwZURlZmluaXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUGFydC9lbGVtZW50RGVjbGFyYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUGFydC9lTWVzc2FnZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0JpbmRpbmcvcU5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZy91bmRlZmluZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZy9lUG9ydFR5cGUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmcvZUJpbmRpbmdPcGVyYXRpb25zIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZ09wZXJhdGlvbi9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmdPcGVyYXRpb24vZU9wZXJhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZ09wZXJhdGlvbi9lQmluZGluZ0lucHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uL2VCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uL2VCaW5kaW5nRmF1bHRzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9TZXJ2aWNlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vU2VydmljZS9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9TZXJ2aWNlL3VuZGVmaW5lZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vU2VydmljZS9lUG9ydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BvcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9Qb3J0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUG9ydC9lQmluZGluZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudC9yZXF1aXJlZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudC9lbGVtZW50VHlwZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0RlZmluaXRpb24vdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0RlZmluaXRpb24vbG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VuY29kaW5nIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VJbXBvcnRzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VUeXBlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9lTWVzc2FnZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0RlZmluaXRpb24vZVBvcnRUeXBlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9lQmluZGluZ3MiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0RlZmluaXRpb24vZVNlcnZpY2VzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VOYW1lc3BhY2VzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0RlZmluaXRpb24vZ2V0RG9jdW1lbnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9zZXREb2N1bWVudCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9zZXREb2N1bWVudC9kb2N1bWVudCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSW1wb3J0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vSW1wb3J0L25hbWVzcGFjZVVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9JbXBvcnQvbG9jYXRpb25VUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vSW1wb3J0L2VEZWZpbml0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0ltcG9ydC9lU2NoZW1hIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0ltcG9ydC9nZXRTY2hlbWEiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSW1wb3J0L3NldFNjaGVtYSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSW1wb3J0L3NldFNjaGVtYS9zY2hlbWEiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQvZUV4dGVuc2liaWxpdHlFbGVtZW50cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSW5wdXQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vT3V0cHV0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0ZhdWx0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9lSW5wdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ0lucHV0L2dldElucHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9zZXRJbnB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vQmluZGluZ0lucHV0L3NldElucHV0L2lucHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nT3V0cHV0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmdPdXRwdXQvZU91dHB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nT3V0cHV0L2dldE91dHB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nT3V0cHV0L3NldE91dHB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dC9zZXRPdXRwdXQvb3V0cHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvZUZhdWx0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0JpbmRpbmdGYXVsdC9nZXRGYXVsdCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvc2V0RmF1bHQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0JpbmRpbmdGYXVsdC9zZXRGYXVsdC9mYXVsdCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vTmFtZXNwYWNlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vTmFtZXNwYWNlL1VSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9OYW1lc3BhY2UvcHJlZml4Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lQb3J0VHlwZSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9hZGRPcGVyYXRpb24iPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9hZGRPcGVyYXRpb24vb3BlcmF0aW9uIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9nZXRPcGVyYXRpb24iPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9nZXRPcGVyYXRpb24vbmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9nZXRPcGVyYXRpb24vaW5wdXROYW1lIi8+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSVBvcnRUeXBlL2dldE9wZXJhdGlvbi9vdXRwdXROYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9nZXRPcGVyYXRpb25zIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24iPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2FkZEZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2FkZEZhdWx0L2ZhdWx0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vZ2V0RmF1bHQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vZ2V0RmF1bHQvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldEZhdWx0cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldFBhcmFtZXRlck9yZGVyaW5nIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vc2V0UGFyYW1ldGVyT3JkZXJpbmciPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vc2V0UGFyYW1ldGVyT3JkZXJpbmcvcGFyYW1ldGVyT3JkZXIiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9nZXRJbnB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldElucHV0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldElucHV0L2lucHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vZ2V0T3V0cHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vc2V0T3V0cHV0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldE91dHB1dC9vdXRwdXQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUlucHV0Ij4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUlucHV0L2dldE1lc3NhZ2UiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUlucHV0L3NldE1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lJbnB1dC9zZXRNZXNzYWdlL21lc3NhZ2UiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSU91dHB1dCI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPdXRwdXQvZ2V0TWVzc2FnZSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3V0cHV0L3NldE1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lPdXRwdXQvc2V0TWVzc2FnZS9tZXNzYWdlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lGYXVsdCI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lGYXVsdC9nZXRNZXNzYWdlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lGYXVsdC9zZXRNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRmF1bHQvc2V0TWVzc2FnZS9tZXNzYWdlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lNZXNzYWdlIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU1lc3NhZ2UvYWRkUGFydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU1lc3NhZ2UvYWRkUGFydC9wYXJ0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2dldFBhcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2dldFBhcnQvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRQYXJ0cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRPcmRlcmVkUGFydHMiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2dldE9yZGVyZWRQYXJ0cy9wYXJ0T3JkZXIiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSVBhcnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JU2VydmljZSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2FkZFBvcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2FkZFBvcnQvcG9ydCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JU2VydmljZS9nZXRQb3J0cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JU2VydmljZS9nZXRQb3J0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JU2VydmljZS9nZXRQb3J0L25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSVBvcnQiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydC9nZXRCaW5kaW5nIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lQb3J0L3NldEJpbmRpbmciPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQb3J0L3NldEJpbmRpbmcvYmluZGluZyIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZyI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2FkZEJpbmRpbmdPcGVyYXRpb24iPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2FkZEJpbmRpbmdPcGVyYXRpb24vYmluZGluZ09wZXJhdGlvbiIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZy9nZXRCaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZy9nZXRCaW5kaW5nT3BlcmF0aW9uL25hbWUiLz4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZy9nZXRCaW5kaW5nT3BlcmF0aW9uL2lucHV0TmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24vb3V0cHV0TmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZy9nZXRCaW5kaW5nT3BlcmF0aW9ucyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZy9nZXRQb3J0VHlwZSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZy9zZXRQb3J0VHlwZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvc2V0UG9ydFR5cGUvcG9ydFR5cGUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24iPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9hZGRCaW5kaW5nRmF1bHQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2FkZEJpbmRpbmdGYXVsdC9iaW5kaW5nRmF1bHQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vZ2V0QmluZGluZ0ZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nRmF1bHQvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nRmF1bHRzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldE9wZXJhdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9zZXRPcGVyYXRpb24iPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL3NldE9wZXJhdGlvbi9vcGVyYXRpb24iLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vZ2V0QmluZGluZ0lucHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL3NldEJpbmRpbmdJbnB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ0lucHV0L2JpbmRpbmdJbnB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL3NldEJpbmRpbmdPdXRwdXQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL3NldEJpbmRpbmdPdXRwdXQvYmluZGluZ091dHB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZ0lucHV0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZ0ZhdWx0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24iPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRCaW5kaW5nIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRCaW5kaW5nL2JpbmRpbmciLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkSW1wb3J0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRJbXBvcnQvaW1wb3J0RGVmIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE1lc3NhZ2UvbWVzc2FnZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGROYW1lc3BhY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE5hbWVzcGFjZS9wcmVmaXgiLz4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGROYW1lc3BhY2UvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFBvcnRUeXBlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRQb3J0VHlwZS9wb3J0VHlwZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRTZXJ2aWNlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRTZXJ2aWNlL3NlcnZpY2UiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlQmluZGluZ0ZhdWx0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUJpbmRpbmdJbnB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUJpbmRpbmdPcGVyYXRpb24iLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlQmluZGluZyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVGYXVsdCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVJbXBvcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlSW5wdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlTWVzc2FnZSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVPcGVyYXRpb24iLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlT3V0cHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlUG9ydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVQb3J0VHlwZSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVTZXJ2aWNlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEJpbmRpbmciPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEJpbmRpbmcvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRCaW5kaW5ncyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRJbXBvcnRzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEltcG9ydHMuMSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0SW1wb3J0cy4xL25hbWVzcGFjZVVSSSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRNZXNzYWdlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0TWVzc2FnZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0TmFtZXNwYWNlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXROYW1lc3BhY2UvcHJlZml4Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE5hbWVzcGFjZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UG9ydFR5cGUiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldFBvcnRUeXBlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UG9ydFR5cGVzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldFByZWZpeCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UHJlZml4L25hbWVzcGFjZVVSSSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRTZXJ2aWNlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRTZXJ2aWNlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0U2VydmljZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0RXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0RXh0ZW5zaW9uUmVnaXN0cnkiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3NldEV4dGVuc2lvblJlZ2lzdHJ5L2V4dGVuc2lvblJlZ2lzdHJ5Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldERvY3VtZW50QmFzZVVSSSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9zZXREb2N1bWVudEJhc2VVUkkiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3NldERvY3VtZW50QmFzZVVSSS9kb2N1bWVudEJhc2UiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlVHlwZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlU2VydmljZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlU2VydmljZS9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZUJpbmRpbmciPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZUJpbmRpbmcvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVQb3J0VHlwZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlUG9ydFR5cGUvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVNZXNzYWdlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0VHlwZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0VHlwZXMiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3NldFR5cGVzL3R5cGVzIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lJbXBvcnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lNYXAiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JVVJMIi8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUV4dGVuc2lvblJlZ2lzdHJ5Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1R5cGVzIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vVHlwZXMvZ2V0U2NoZW1hcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9UeXBlcy9nZXRTY2hlbWFzLjEiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL1R5cGVzL2dldFNjaGVtYXMuMS9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUl0ZXJhdG9yIi8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSVR5cGVzIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQvY2hpbGRyZW4iLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQvZG9jdW1lbnRCYXNlVVJJIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC9zY2hlbWEiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vTWVzc2FnZVJlZmVyZW5jZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL01lc3NhZ2VSZWZlcmVuY2UvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9NZXNzYWdlUmVmZXJlbmNlL2VNZXNzYWdlIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lFbGVtZW50RXh0ZW5zaWJsZSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lFbGVtZW50RXh0ZW5zaWJsZS9nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUVsZW1lbnRFeHRlbnNpYmxlL2FkZEV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRWxlbWVudEV4dGVuc2libGUvYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQvZXh0RWxlbWVudCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lBdHRyaWJ1dGVFeHRlbnNpYmxlL2dldEV4dGVuc2lvbkF0dHJpYnV0ZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUF0dHJpYnV0ZUV4dGVuc2libGUvZ2V0RXh0ZW5zaW9uQXR0cmlidXRlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUF0dHJpYnV0ZUV4dGVuc2libGUvc2V0RXh0ZW5zaW9uQXR0cmlidXRlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZS9zZXRFeHRlbnNpb25BdHRyaWJ1dGUvbmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lBdHRyaWJ1dGVFeHRlbnNpYmxlL3NldEV4dGVuc2lvbkF0dHJpYnV0ZS92YWx1ZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQXR0cmlidXRlRXh0ZW5zaWJsZS9nZXRFeHRlbnNpb25BdHRyaWJ1dGVzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lBdHRyaWJ1dGVFeHRlbnNpYmxlL2dldE5hdGl2ZUF0dHJpYnV0ZU5hbWVzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lPYmplY3QiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JU2NoZW1hIi8+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLm1kbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvV1NETC5tZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NmYwNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLm1kbAorKysgL2Rldi9udWxsCkBAIC0xLDM4NTAgKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgRGVzaWduICJMb2dpY2FsIFZpZXciCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBkZWZhdWx0cyAgIAkob2JqZWN0IGRlZmF1bHRzCi0JcmlnaHRNYXJnaW4gCTAuMjUwMDAwCi0JbGVmdE1hcmdpbiAJMC4yNTAwMDAKLQl0b3BNYXJnaW4gIAkwLjI1MDAwMAotCWJvdHRvbU1hcmdpbiAJMC41MDAwMDAKLQlwYWdlT3ZlcmxhcCAJMC4yNTAwMDAKLQljbGlwSWNvbkxhYmVscyAJVFJVRQotCWF1dG9SZXNpemUgCVRSVUUKLQlzbmFwVG9HcmlkIAlUUlVFCi0JZ3JpZFggICAgICAJMTYKLQlncmlkWSAgICAgIAkxNgotCWRlZmF1bHRGb250IAkob2JqZWN0IEZvbnQKLQkgICAgc2l6ZSAgICAgICAJMTAKLQkgICAgZmFjZSAgICAgICAJIkFyaWFsIgotCSAgICBib2xkICAgICAgIAlGQUxTRQotCSAgICBpdGFsaWNzICAgIAlGQUxTRQotCSAgICB1bmRlcmxpbmUgIAlGQUxTRQotCSAgICBzdHJpa2UgICAgIAlGQUxTRQotCSAgICBjb2xvciAgICAgIAkwCi0JICAgIGRlZmF1bHRfY29sb3IgCVRSVUUpCi0Jc2hvd01lc3NhZ2VOdW0gCTEKLQlzaG93Q2xhc3NPZk9iamVjdCAJVFJVRQotCW5vdGF0aW9uICAgCSJVbmlmaWVkIikKLSAgICByb290X3VzZWNhc2VfcGFja2FnZSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiVXNlIENhc2UgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY0IgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IFVzZUNhc2VEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDc4IgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICByb290X2NhdGVnb3J5IAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJMb2dpY2FsIFZpZXciCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2MyIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlzdWJzeXN0ZW0gIAkiQ29tcG9uZW50IFZpZXciCi0JcXVpZHUgICAgICAJIjM5RTI3RjA4MDA2NSIKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ3c2RsIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2Uud3N0LndzZGxcXG1vZGVsXFxvcmcuZWNsaXBzZS53c3QuV1NETC5jYXQiCi0JCXF1aWQgICAgICAgCSIzQURGQjhFNTAyMUUiKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ4c2QiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS54c2RcXG1vZGVsXFxvcmcuZWNsaXBzZS5YU0QuY2F0IgotCQlxdWlkICAgICAgIAkiMzlBQkRDNkYwMUFBIikpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDc2IgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6d3NkbCIgQDEKLQkJCWxvY2F0aW9uICAgCSgyNzIsIDI1NikKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxCi0JCQkgICAgbG9jYXRpb24gICAJKDEyOCwgMTcyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkid3NkbCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FERkI4RTUwMjFFIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp4c2QiIEAyCi0JCQlsb2NhdGlvbiAgIAkoMjcyLCA1NzYpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJICAgIGxvY2F0aW9uICAgCSgxMjgsIDQ5MikKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJInhzZCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiMzlBQkRDNkYwMUFBIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApKSkpKQotICAgIHJvb3Rfc3Vic3lzdGVtIAkob2JqZWN0IFN1YlN5c3RlbSAiQ29tcG9uZW50IFZpZXciCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NSIKLQlwaHlzaWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QpCi0JcGh5c2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IE1vZHVsZV9EaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDc3IgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9jZXNzX3N0cnVjdHVyZSAJKG9iamVjdCBQcm9jZXNzZXMKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY2IgotCVByb2NzTkRldnMgCShsaXN0Ci0JICAgIChvYmplY3QgUHJvY2Vzc19EaWFncmFtICJEZXBsb3ltZW50IFZpZXciCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjgiCi0JCXRpdGxlICAgICAgCSJEZXBsb3ltZW50IFZpZXciCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcHJvcGVydGllcyAJKG9iamVjdCBQcm9wZXJ0aWVzCi0JYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhQmFzZSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YUJhc2VTZXQiIDgwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhQmFzZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIkFOU0kiCi0JCQkJdmFsdWUgICAgICAJODAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiT3JhY2xlIgotCQkJCXZhbHVlICAgICAgCTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlNRTFNlcnZlciIKLQkJCQl2YWx1ZSAgICAgIAk4MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJTeWJhc2UiCi0JCQkJdmFsdWUgICAgICAJODAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiV2F0Y29tIgotCQkJCXZhbHVlICAgICAgCTgwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiSWQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUpIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lIgotCQkJdmFsdWUgICAgICAJIlZfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJUXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJJbmhlcml0U3VmZml4IgotCQkJdmFsdWUgICAgICAJIl9WIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRyb3BDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkJhc2VWaWV3cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRERMU2NyaXB0RmlsZW5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiRERMMS5TUUwiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiVkFSQ0hBUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIk51bGxzT0siCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDb21wb3NpdGVVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImZyYW1ld29yayIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcmVzZXJ2ZVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETEVsZW1lbnQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY2lmaWNhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIklETFNwZWNTZXQiIDIyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETFNwZWNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJdmFsdWUgICAgICAJMjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJUeXBlZGVmIgotCQkJCXZhbHVlICAgICAgCTU0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiRW51bWVyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiRXhjZXB0aW9uIgotCQkJCXZhbHVlICAgICAgCTYxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU3RydWN0IgotCQkJCXZhbHVlICAgICAgCTUxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiVW5pb24iCi0JCQkJdmFsdWUgICAgICAJODEpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuc2VydmljZXMvc3JjL3Jvc2Uvd3NkbE1kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSURMTW9kdWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5zZXJ2aWNlcy9zcmMvcm9zZS93c2RsTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVByZWZpeGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJtXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdEF0dHJpYnV0ZURhdGFUeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdE9wZXJhdGlvblJldHVyblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkidm9pZCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk5hdGl2ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN5bmNocm9uaXplZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlRyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSIzNjAwMDAwMDIiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIl9JRCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUsMCkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NjaGVtYSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJXaGVyZUNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVNjYWxlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbk9mUkVGUyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZCIKLQkJCXZhbHVlICAgICAgCSgiTWV0aG9kS2luZFNldCIgMTkwMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3ZlcmxvYWRJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2VsZmlzaCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyVHlwZVNldCIgMTgwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50IgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRXZlbnRTZXQiIDE2MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclJlZmVyZW5jaW5nTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckZvckVhY2hTZXQiIDE3MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJXaGVuQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJNYXBNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcmRlck1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkZ1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTE5MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUHJvY2VkdXJlIgotCQkJCXZhbHVlICAgICAgCTE5MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3BlcmF0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyIgotCQkJCXZhbHVlICAgICAgCTE5MDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ2FsY3VsYXRlZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTA5KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQUZURVIiCi0JCQkJdmFsdWUgICAgICAJMTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJCRUZPUkUiCi0JCQkJdmFsdWUgICAgICAJMTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNURUFEIE9GIgotCQkJCXZhbHVlICAgICAgCTE4MDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJST1ciCi0JCQkJdmFsdWUgICAgICAJMTcwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJTVEFURU1FTlQiCi0JCQkJdmFsdWUgICAgICAJMTcwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQiCi0JCQkJdmFsdWUgICAgICAJMTYwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc0FsbG93ZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2FsZSIKLQkJCXZhbHVlICAgICAgCSI2IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc0luZGV4IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJlcG9zaXRvcnkiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVXNlTVNWQyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImh+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwfiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVycm9yTGltaXQiCi0JCQl2YWx1ZSAgICAgIAkzMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiRST1NFQ1BQX1NPVVJDRSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlBhdGhTZXBhcmF0b3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkiMTI4dnhfYiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvb2xlYW5UeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93VGVtcGxhdGVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHBsaWNpdEluc3RhbnRpYXRpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dQcm90ZWN0ZWRJbmhlcml0YW5jZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbW1lbnRXaWR0aCIKLQkJCXZhbHVlICAgICAgCTYwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIk9wdGlvbmFsQnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2xhc3NLZXkiCi0JCQl2YWx1ZSAgICAgIAkiY2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlB1dEJvZGllc0luU3BlYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0RGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weUNvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXRDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvcktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3JhZ2VNZ210VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RyZWFtVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlRocmVlS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZyaWVuZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVBbmREZWZpbmUiCi0JCQkJdmFsdWUgICAgICAJMTk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlT25seSIKLQkJCQl2YWx1ZSAgICAgIAkyMDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRvTm90RGVjbGFyZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDYpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5zZXJ2aWNlcy9zcmMvcm9zZS93c2RsTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuc2VydmljZXMvc3JjL3Jvc2Uvd3NkbE1kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXh0ZW5zaW9ubGVzc0ZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAKLXwvLyAkcGFja2FnZQotfCNpbmNsdWRlICIkZmlsZSIKLXwKLQkJCSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZVByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIk9wZXJhdGlvbktpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbktpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNDb25zdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0V4cGxpY2l0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4aXRDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvZHlBbm5vdGF0aW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc09uZVdheSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcmRlcmVkIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0UmVsYXRpb25zaGlwVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlckZpZWxkU2l6ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNlbGVjdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Bc3NvY2lhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZUFyZ3VtZW50cyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kdGFyZ2V0Q2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0UmVsYXRpb25zaGlwVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlckZpZWxkU2l6ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckdldCIKLQkJCXZhbHVlICAgICAgCSIkZGF0YS5nZXQoJGtleXMpIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyU2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLnNldCgka2V5cywkdmFsdWUpIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHN1cHBsaWVyICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJKCJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZVNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVF1YWxpZmllZEdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZEdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZFNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVRdWFsaWZpZWRTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0UmVsYXRpb25zaGlwVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NvY0NsYXNzR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc1NldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IiAxNCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkF0QXR0cmlidXRlVmlzaWJpbGl0eSIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlckZpZWxkU2l6ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keVJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5SXNPblNlYXJjaExpc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc05hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRlbnQiCi0JCQl2YWx1ZSAgICAgIAkyKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCSI1LjAiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQ2xhc3NUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQ2xhc3NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZV9QYXJ0IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29ubmVjdGlvbl9QYXJ0IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ2xhc3NfRmFjdG9yeSIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09iamVjdEZ1bmN0aW9uYWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluYW1pYyIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkR5bmNyZWF0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlNlcmlhbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPdmVycmlkZUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfREFUQV9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmllbGRHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9GSUVMRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTWVzc2FnZUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkoIk9MRUZhY3RvcnlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUZhY3RvcnlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0X2luIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTGljZW5zZWQiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDbGFzc0lEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ3RsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT0xFVHlwZUxpYiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVR5cGVMaWJJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVR5cGVMaWJNYWpvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVR5cGVMaWJNaW5vciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcFBhZ2VJRHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BhdGNoTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja0Z1bmN0aW9ucyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaERlZlZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEaXNwSWRFbnVtIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BfSURfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUludGVyZmFjZU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIklOVEVSRkFDRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJbml0SW50ZXJmYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFdmVudE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja0V2ZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50U2lua01hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQcm9wTm90aWZ5U2lua3MiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09OTkVDVElPTl9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uUG9pbnRJSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJbmhlcml0YW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNvbW1hbmRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1GQ0RlY2xhcmVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1GQ0ltcGxlbWVudHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQVRMX0RlY2xhcmVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ09NTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09NX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29ubmVjdGlvblBvaW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09OTkVDVElPTl9QT0lOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1zZ01hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByb3BlcnR5TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUFJPUEVSVFlfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDT3BlcmF0aW9uVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ09wZXJhdGlvblR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbF9PdmVycmlkZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lc3NhZ2VfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJFdmVudF9GaXJpbmdfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJFdmVudF9TaW5rX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdGRfT0xFX01ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAk2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNvbW1hbmRfUGFyc2VyIgotCQkJCXZhbHVlICAgICAgCTcpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiUHJvcGVydHlfR2V0X0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiUHJvcGVydHlfU2V0X0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiUHJvcGVydHlfTm90aWZ5X0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTEwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1hY3JvX0dlbmVyYXRlZF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9NU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUVTU0FHRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJCb2R5SW1hZ2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lbWJlcl9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkdldF9TZXRfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaWFsb2dfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkZpZWxkX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdG9ja19Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUG9pbnRlckJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydHlJbXBsZW1lbnRhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lbWJlcl9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkdldF9TZXRfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaWFsb2dfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkZpZWxkX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdG9ja19Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUG9pbnRlckJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydHlJbXBsZW1lbnRhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk1lbWJlcl9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkdldF9TZXRfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaWFsb2dfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkZpZWxkX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTdG9ja19Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUG9pbnRlckJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrUHJvcGVydHlJbXBsZW1lbnRhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluY2x1ZGVzR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfSU5DTFVERVNfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc2VydExvY2F0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlNDQyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVHlwZUxpYkltcG9ydGVyIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiNzgzNjA2Mzc4IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGFibGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpY05vdENyZWF0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsU2luZ2xlVXNlIgotCQkJCXZhbHVlICAgICAgCTIxNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk11bHRpVXNlIgotCQkJCXZhbHVlICAgICAgCTIxOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkdsb2JhbE11bHRpVXNlIgotCQkJCXZhbHVlICAgICAgCTIyMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQmFzZSIKLQkJCXZhbHVlICAgICAgCSIwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkV4cGxpY2l0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkNvbXBhcmUiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbXBhcmVTZXQiIDIwMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGFibGUiCi0JCQl2YWx1ZSAgICAgIAkoIkNyZWF0YWJsZVNldCIgMjIxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5pdGlhbGl6YXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlVGVybWluYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25DbGFzcyIKLQkJCXZhbHVlICAgICAgCSJDb2xsZWN0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNvbXBhcmVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkJpbmFyeSIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJUZXh0IgotCQkJCXZhbHVlICAgICAgCTIwNCkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJG9wZXJhdGlvbiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJMaWJyYXJ5TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQWxpYXNOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc1N0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRW50cnlDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSXNDb25zdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmV3IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJXaXRoRXZlbnRzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGUkc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUxldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0luaGVyaXQiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudHNEZWxlZ2F0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlByb2plY3RGaWxlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsU3R1ZGlvIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjkiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwYWNrYWdlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNsYXNzaWZpZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNvbnN0cmFpbnRzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbnRlbnRLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVtcHR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJNaXhlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50T25seSIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkib3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYXR0cmlidXRlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzSUQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicmVmZXJlbmNlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Jlc29sdmVQcm94aWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpKQotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjciKSkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvb3JnLmVjbGlwc2Uud3N0LldTREwuY2F0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9vcmcuZWNsaXBzZS53c3QuV1NETC5jYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzOWM0NTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9vcmcuZWNsaXBzZS53c3QuV1NETC5jYXQKKysrIC9kZXYvbnVsbApAQCAtMSw4NjMyICswLDAgQEAKLQotKG9iamVjdCBQZXRhbAotICAgIHZlcnNpb24gICAgCTQyCi0gICAgX3dyaXR0ZW4gICAJIlJvc2UgNC41LjgxNjMuMyIKLSAgICBjaGFyU2V0ICAgIAkwKQotCi0ob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ3c2RsIgotICAgIGlzX3VuaXQgICAgCVRSVUUKLSAgICBpc19sb2FkZWQgIAlUUlVFCi0gICAgYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCShvYmplY3QgQXR0cmlidXRlCi0JICAgIHRvb2wgICAgICAgCSJFY29yZSIKLQkgICAgbmFtZSAgICAgICAJIm5zUHJlZml4IgotCSAgICB2YWx1ZSAgICAgIAkid3NkbCIpCi0JKG9iamVjdCBBdHRyaWJ1dGUKLQkgICAgdG9vbCAgICAgICAJIkVjb3JlIgotCSAgICBuYW1lICAgICAgIAkibnNVUkkiCi0JICAgIHZhbHVlICAgICAgCSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIikKLQkob2JqZWN0IEF0dHJpYnV0ZQotCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JICAgIG5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkgICAgdmFsdWUgICAgICAJIm9yZy5lY2xpcHNlLndzdCIpCi0JKG9iamVjdCBBdHRyaWJ1dGUKLQkgICAgdG9vbCAgICAgICAJIkVjb3JlIgotCSAgICBuYW1lICAgICAgIAkicHJlZml4IgotCSAgICB2YWx1ZSAgICAgIAkiV1NETCIpKQotICAgIHF1aWQgICAgICAgCSIzQURGQjhFNTAyMUUiCi0gICAgZG9jdW1lbnRhdGlvbiAJCi18VGhlIFdTREwgbW9kZWwgY29udGFpbnMgY2xhc3NlcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkuCi18Ci18V1NETCBkZXNjcmliZXMgbmV0d29yayBzZXJ2aWNlcyBhcyBzZXRzIG9mIGVuZHBvaW50cyBvcGVyYXRpbmcgb24gbWVzc2FnZXMuIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBhcmUgZGVzY3JpYmVkIGFic3RyYWN0bHksIGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbCBhbmQgbWVzc2FnZSBmb3JtYXQgdG8gZGVmaW5lIGFuIGVuZHBvaW50LgotfAotfFdTREwgZGVzY3JpYmVzIHRoZSBmb3JtYXRzIG9mIHRoZSBtZXNzYWdlcyBleGNoYW5nZWQgYnkgdGhlIHNlcnZpY2VzLCBhbmQgc3VwcG9ydHMgdGhlIFhNTCBTY2hlbWFzIHNwZWNpZmljYXRpb24gYXMgaXRzIGNhbm9uaWNhbCB0eXBlIHN5c3RlbS4gVGhpcyBwYWNrYWdlIHVzZXMgYW4gWE1MIFNjaGVtYSBJbmZvc2V0IG1vZGVsIHBhY2thZ2UgKHNlZSB0aGUgWFNEIHBhY2thZ2UpIHRvIGRlc2NyaWJlIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdHMuCi18Ci18VGhlIG1vZGVsIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbXMsIG5hbWVkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGNoYXB0ZXJzIGluIHRoZSBXU0RMIDEuMSBzcGVjaWZpY2F0aW9uIChodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL05PVEUtd3NkbC0yMDAxMDMxNSkKLXwtIDIuMSBEZWZpbml0aW9uLCBzaG93cyB0aGUgV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgYW5kIHRoZSBXU0RMIGRvY3VtZW50IHN0cnVjdHVyZQotfC0gMi4xLjEgTmFtaW5nIGFuZCBMaW5raW5nLCBzaG93cyB0aGUgbmFtZXNwYWNlIGFuZCBpbXBvcnQgbWVjaGFuaXNtCi18LSAyLjEuMyBFeHRlbnNpYmlsaXR5LCBzaG93cyB0aGUgV1NETCBleHRlbnNpYmlsaXR5IG1lY2hhbmlzbQotfC0gMi4yIFR5cGVzLCBzaG93cyB0aGUgdXNlIG9mIFhNTCBTY2hlbWEgdHlwZXMgaW4gV1NETAotfC0gMi4zIE1lc3NhZ2VzLCAyLjQgUG9ydFR5cGVzLCAyLjUgQmluZGluZ3MgYW5kIDIuNyBTZXJ2aWNlcywgc2hvdyB0aGUgbWFqb3IgV1NETCBlbGVtZW50cyBhbmQgdGhlaXIgcmVsYXRpb25zLgotfAotfFRoZSBXU0RMIGNsYXNzZXMgZXh0ZW5kIHRoZSBqYXZheC53c2RsIGludGVyZmFjZXMgZGVmaW5lZCBieSBKU1IgMTEwLiBDbGFzc2VzIHdpdGggaW50ZXJmYWNlIGFuZCBkYXRhdHlwZSBzdGVyZW90eXBlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlc2Ugbm9uLU1PRiBpbnRlcmZhY2VzLgotICAgIAotICAgIGV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0gICAgbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkob2JqZWN0IENsYXNzICJXU0RMRWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVDNkEzMDJERCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgbGFuZ3VhZ2UgZWxlbWVudC4iCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEVuY2xvc2luZ0RlZmluaXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0NEMTUyOTYwMEM4IgotCQkgICAgcmVzdWx0ICAgICAJIkRlZmluaXRpb24iCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0QxNTJCODAzNDciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZGVmaW5pdGlvbiIKLQkJCSAgICB0eXBlICAgICAgIAkiRGVmaW5pdGlvbiIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImRvY3VtZW50YXRpb25FbGVtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNDQ0U0NDM2MDJBMyIKLQkJICAgIHR5cGUgICAgICAgCSJET01FbGVtZW50IikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZWxlbWVudCIKLQkJICAgIGF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCShvYmplY3QgQXR0cmlidXRlCi0JCQkgICAgdG9vbCAgICAgICAJIkVjb3JlIgotCQkJICAgIG5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCSAgICB2YWx1ZSAgICAgIAlUUlVFKSkKLQkJICAgIHF1aWQgICAgICAgCSIzRjk3REJEMzAyMDciCi0JCSAgICB0eXBlICAgICAgIAkiRE9NRWxlbWVudCIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIKLQkgICAgYWJzdHJhY3QgICAJVFJVRSkKLQkob2JqZWN0IENsYXNzICJQb3J0VHlwZSIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVDN0YwMDFBNSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydFR5cGUgZWxlbWVudCBvZiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gMS4xIGFuZCBhbiBJbnRlcmZhY2UgY29tcG9uZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjIuIEEgcG9ydCB0eXBlIG9yIEludGVyZmFjZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUM5QjcwMTUwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzRjZGMUZEODAxOUYiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydFR5cGUiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE1QkUwMzMxIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInFOYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0ODhFMDAyMyIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVuZGVmaW5lZCIKLQkJICAgIHF1aWQgICAgICAgCSIzQkRERjFFMzAxRTUiCi0JCSAgICB0eXBlICAgICAgIAkiYm9vbGVhbiIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiT3BlcmF0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0FENUM4MEQwM0NFIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudC4gQSBXU0RMIG9wZXJhdGlvbiBpcyBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbiBvZiBhbiBhY3Rpb24gc3VwcG9ydGVkIGJ5IGEgc2VydmljZS4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUU5REU5ODAwM0MiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYxRkUyMDE3MSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE3NzYwMEQxIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInN0eWxlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0NzI2MDFBQyIKLQkJICAgIHR5cGUgICAgICAgCSJPcGVyYXRpb25UeXBlIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQkREOTY0MzAwNEMiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidW5kZWZpbmVkIgotCQkgICAgcXVpZCAgICAgICAJIjNCRERGMjM1MDAzRSIKLQkJICAgIHR5cGUgICAgICAgCSJib29sZWFuIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJNZXNzYWdlIgotCSAgICBxdWlkICAgICAgIAkiM0FENUM5NTkwMDc4IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBtZXNzYWdlIGVsZW1lbnQuIEEgV1NETCBtZXNzYWdlIGlzIGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIGNvbW11bmljYXRlZC4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDA1NTAxQzQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODRBOEQxMDJCQSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklNZXNzYWdlIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOEFGMDA0RiIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJxTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVCNDg3QzAxRkUiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1bmRlZmluZWQiCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREYxRDIwMjI2IgotCQkgICAgdHlwZSAgICAgICAJImJvb2xlYW4iKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIlBhcnQiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBhcnQgZWxlbWVudC4gUGFydHMgZGVzY3JpYmUgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIEVhY2ggcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggYSB0eXBlIGZyb20gc29tZSB0eXBlIHN5c3RlbS4gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE5NkQwMkYxIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE5M0YwMUJFIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5N0UyMzAyMzciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQkNFNzBCNzAzQzgiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZWxlbWVudE5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIwODcwM0RCIgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidHlwZU5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0JDRTcwQzMwM0M1IgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJCaW5kaW5nIgotCSAgICBxdWlkICAgICAgIAkiM0FENUQyODYwMjYxIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBiaW5kaW5nIGVsZW1lbnQuIEEgYmluZGluZyBkZWZpbmVzIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbCBkZXRhaWxzIGZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0VHlwZS4gVGhlcmUgbWF5IGJlIGFueSBudW1iZXIgb2YgYmluZGluZ3MgZm9yIGEgZ2l2ZW4gcG9ydFR5cGUuIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUZBMEYwMkYwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1OTU0MTAxMjkiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUJDNjAyMTkiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAicU5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ4OTkwMTRCIgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidW5kZWZpbmVkIgotCQkgICAgcXVpZCAgICAgICAJIjNCRERGMUY0MDFBMyIKLQkJICAgIHR5cGUgICAgICAgCSJib29sZWFuIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJCaW5kaW5nT3BlcmF0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0FENUQzQ0IwMTQ1IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSB3aXRoaW4gdGhlIGJpbmRpbmcncyBwb3J0VHlwZS4gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENjAwOTIwMkY3IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QURFNDAxREMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QURDMDAwNzIiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5QzRDQjAxOTkiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJTZXJ2aWNlIgotCSAgICBxdWlkICAgICAgIAkiM0FENUQ4RjAwMkY4IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIEEgc2VydmljZSBncm91cHMgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkEyMDAyNUUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODU5NTRFMDFCNCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklTZXJ2aWNlIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQjQ5MDI4NyIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJxTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVCNDhBNDAxNTEiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1bmRlZmluZWQiCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREYyMEQwMjAzIgotCQkgICAgdHlwZSAgICAgICAJImJvb2xlYW4iKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIlBvcnQiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDkxNzAyODYiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvcnQgZWxlbWVudC4gQSBwb3J0IGRlZmluZXMgYW4gaW5kaXZpZHVhbCBlbmRwb2ludCBieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MgZm9yIGEgYmluZGluZyIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDYwMENCMDBBQSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NTk1NDUwMkM5IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVBvcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFCODAwMzI2IikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ5QTAwMzkxIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudC4gV1NETCBhbGxvd3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODRCMTQ5MDNEMCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QjEyNDAyQUIiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCRERGNTM1MDJDMyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OldTRExFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDNkEzMDJERCIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJyZXF1aXJlZCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUY5NTQzQzAwNzMiCi0JCSAgICB0eXBlICAgICAgIAkiYm9vbGVhbiIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImVsZW1lbnRUeXBlIgotCQkgICAgYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJKG9iamVjdCBBdHRyaWJ1dGUKLQkJCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JCQkgICAgbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJICAgIHZhbHVlICAgICAgCVRSVUUpKQotCQkgICAgcXVpZCAgICAgICAJIjNCODVCMjFBMDI3MSIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiRGVmaW5pdGlvbiIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudCBpcyB0aGUgcm9vdCBlbGVtZW50IG9mIGEgV1NETCBkb2N1bWVudC4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkRCODAzRDQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODRCMUY4MDM4MiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklEZWZpbml0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMUQ5MDE0MiIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXREb2N1bWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0QxNEZDMjAxMkIiCi0JCSAgICByZXN1bHQgICAgIAkiRE9NRG9jdW1lbnQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RG9jdW1lbnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0NEMTUwREUwMUU3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImRvY3VtZW50IgotCQkJICAgIHR5cGUgICAgICAgCSJET01Eb2N1bWVudCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInRhcmdldE5hbWVzcGFjZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTQ3NDAwNEUiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibG9jYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiNDAzNTJCN0MwMzk2IgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInFOYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0ODU3MDJGNSIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImVuY29kaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNDQUREMDBEMDAwRCIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkltcG9ydCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVFNEY5MDNERSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBXU0RMIGltcG9ydCBlbGVtZW50LiBXU0RMIGFsbG93cyBhc3NvY2lhdGluZyBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24gdXNpbmcgYW4gaW1wb3J0IGVsZW1lbnQuIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUVFNTgwMzdBIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzRjZGMjAwRDAzNDAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJSW1wb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMjAyMDExOSIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTY2hlbWEiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjcyQzEwMzc5IgotCQkgICAgcmVzdWx0ICAgICAJIlhTRFNjaGVtYSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRTY2hlbWEiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjcyQzEwMzk3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInNjaGVtYSIKLQkJCSAgICB0eXBlICAgICAgIAkiWFNEU2NoZW1hIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZXNwYWNlVVJJIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNTBBMDAzNiIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJsb2NhdGlvblVSSSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTUxNDAyMTEiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJFeHRlbnNpYmxlRWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVGQ0ZBMDMzQSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIiBXU0RMIGFsbG93cyBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IChyZWZlcnJlZCB0byBoZXJlIGFzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMpIHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvaW50IG9mIGV4dGVuc2liaWxpdHkuIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUZFM0MwM0Q0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6V1NETEVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM2QTMwMkREIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMDVDMjAyOTAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRWxlbWVudEV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA0QjAwMERBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTY1N0YwNjAwN0QiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQXR0cmlidXRlRXh0ZW5zaWJsZSIKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDYzRjAyQUYiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiCi0JICAgIGFic3RyYWN0ICAgCVRSVUUpCi0JKG9iamVjdCBDbGFzcyAiSW5wdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwNzg5RjAwNTkiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQuIEFuIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgdGhlIGlucHV0IG9mIHRoZSBvcGVyYXRpb24uIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzcyMjgwMkU3IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYxRkVFMDMxRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklJbnB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTdFRTAwMTUiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIk91dHB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA3OEI2MDIzMiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQuIEFuIG91dHB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzRjY3NzIzNTAwREQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlUmVmZXJlbmNlIgotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MURCMDJEQyIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2RjFGRjgwMUNEIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU91dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTgyOTAyN0QiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkZhdWx0IgotCSAgICBxdWlkICAgICAgIAkiM0FFMDc4QkUwMTA4IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50LiBGYXVsdCBlbGVtZW50cyBzcGVjaWZ5IHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG91dHB1dCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzcyM0QwMzE5IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYyMDAyMDAyRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTg2MTAzMUQiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA4QTgyMDJENCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQW4gaW5wdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUUxQjAxMTMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ0lucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREVCMDEwMCIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUI1OUIwMDcyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldElucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1M0E0MDIwMyIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0SW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUzQjUwM0EyIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJSW5wdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCODVDMUVBMDIwRSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdPdXRwdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvdXRwdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNDMwMkFCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFMjEwMTExIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QjVBNDAyN0UiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1M0Q5MDBGMSIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTNGMTAzMjYiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAib3V0cHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJT3V0cHV0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzIwMjAwQkUiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJCaW5kaW5nRmF1bHQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOEE5RTAzQTYiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGZhdWx0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEEgZmF1bHQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBmYXVsdCB3aXRoIHRoZSBzYW1lIG5hbWUuICIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRTA5Mzg2MDJDOSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNzEwMzMzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU0RjAwQkQiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU0MTMwMzdGIgotCQkgICAgcmVzdWx0ICAgICAJIklGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTQyMTAxMDkiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZmF1bHQiCi0JCQkgICAgdHlwZSAgICAgICAJIklGYXVsdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUJGOUUwMTRBIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUU5hbWUiCi0JICAgIHF1aWQgICAgICAgCSIzQUU4RUQyMjAxNDAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUU5hbWUgY2xhc3MuIEEgUU5hbWUgaXMgYSBmdWxseSBxdWFsaWZpZWQgbmFtZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0OURBOTAwM0QiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJOYW1lc3BhY2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWVzcGFjZSBwcmVmaXggdXNlZCBpbiBhIFdTREwgZG9jdW1lbnQuIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNEMjkwMUIxIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInByZWZpeCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVBM0QzMjAyMzYiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJPcGVyYXRpb25UeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0FFQjQ3ODIwMjRGIgotCSAgICBkb2N1bWVudGF0aW9uIAkKLXxPTkVfV0FZPTEKLXxSRVFVRVNUX1JFU1BPTlNFPTIKLXxTT0xJQ0lUX1JFU1BPTlNFPTMKLXxOT1RJRklDQVRJT049NAotCSAgICAKLQkgICAgc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk9wZXJhdGlvblR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUMzNTMwM0UzIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiSVBvcnRUeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE1QkUwMzMxIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnRUeXBlIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUyMTlGMDE4NiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklBdHRyaWJ1dGVFeHRlbnNpYmxlIgotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNjNGMDJBRiIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZBQzEwMUNBIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm9wZXJhdGlvbiIKLQkJCSAgICB0eXBlICAgICAgIAkiSU9wZXJhdGlvbiIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkJBRjAxQTQiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCShvYmplY3QgUGFyYW1ldGVyICJpbnB1dE5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAib3V0cHV0TmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSU9wZXJhdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRPcGVyYXRpb25zIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QkY3MDMxQSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBNjMyMDAwRCIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSU9wZXJhdGlvbiIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBNzc2MDBEMSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5PcGVyYXRpb24gbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTIzRDUwMjlGIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUVsZW1lbnRFeHRlbnNpYmxlIgotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNEIwMDBEQSIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM0MjAwNjUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZmF1bHQiCi0JCQkgICAgdHlwZSAgICAgICAJIklGYXVsdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QzU5MDI4RiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJRmF1bHQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RmF1bHRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QzcxMDJCMSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBhcmFtZXRlck9yZGVyaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QzgxMDFCMCIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRQYXJhbWV0ZXJPcmRlcmluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM5OTAzMUQiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicGFyYW1ldGVyT3JkZXIiCi0JCQkgICAgdHlwZSAgICAgICAJIklMaXN0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0SW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU0RTUwMThEIgotCQkgICAgcmVzdWx0ICAgICAJIklJbnB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjJDNDAxMDciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiaW5wdXQiCi0JCQkgICAgdHlwZSAgICAgICAJIklJbnB1dCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjJFNDAwOTQiCi0JCSAgICByZXN1bHQgICAgIAkiSU91dHB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYyRjAwMUQyIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm91dHB1dCIKLQkJCSAgICB0eXBlICAgICAgIAkiSU91dHB1dCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBNzk5MDEyQiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUlucHV0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE3RUUwMDE1IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLklucHV0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUyMjM1MDJBRiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklBdHRyaWJ1dGVFeHRlbnNpYmxlIgotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNjNGMDJBRiIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY2MzMxMDBFRiIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWVzc2FnZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY2MzQ3MDI3NyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJtZXNzYWdlIgotCQkJICAgIHR5cGUgICAgICAgCSJJTWVzc2FnZSIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE4MDAwMDM5IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJT3V0cHV0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE4MjkwMjdEIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLk91dHB1dCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMjIzOTAxNTciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQXR0cmlidXRlRXh0ZW5zaWJsZSIKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDYzRjAyQUYiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQzQTAzNUQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQ0NTAxQzgiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibWVzc2FnZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSU1lc3NhZ2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTgzOTAxRDUiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklGYXVsdCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBODYxMDMxRCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5GYXVsdCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMjI0MTAwOEMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQXR0cmlidXRlRXh0ZW5zaWJsZSIKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDYzRjAyQUYiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQ2QTAwQkQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQ3NTAxMzEiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibWVzc2FnZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSU1lc3NhZ2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLkZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBODcxMDIwOCIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSU1lc3NhZ2UiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QThBRjAwNEYiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuTWVzc2FnZSBub24tTU9GIGludGVyZmFjZSIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUyM0RBMDMwRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklFbGVtZW50RXh0ZW5zaWJsZSIKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDRCMDAwREEiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkUGFydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NzIyNDAyNzMiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicGFydCIKLQkJCSAgICB0eXBlICAgICAgIAkiSVBhcnQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQYXJ0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk3MjNEMDIzMyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJUGFydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQYXJ0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NzI1NDAyNUUiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRPcmRlcmVkUGFydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTcyNjEwMjBEIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInBhcnRPcmRlciIKLQkJCSAgICB0eXBlICAgICAgIAkiSUxpc3QiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE4QkMwMjYwIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJUGFydCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBOTNGMDFCRSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5QYXJ0IG5vbi1NT0YgaW50ZXJmYWNlIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTIzNjcwMjQyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUF0dHJpYnV0ZUV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA2M0YwMkFGIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuUGFydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTk1MDAyMzEiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklTZXJ2aWNlIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFCNDkwMjg3IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlNlcnZpY2Ugbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTIzRTUwMkJGIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUVsZW1lbnRFeHRlbnNpYmxlIgotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNEIwMDBEQSIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRQb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1RDU2MDFEMSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwb3J0IgotCQkJICAgIHR5cGUgICAgICAgCSJJUG9ydCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBvcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1REEyMDAzNiIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTVEQjAwMUJDIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklQb3J0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuU2VydmljZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUI1QjAwM0UiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklQb3J0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFCODAwMzI2IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTIzRUEwMTE5IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUVsZW1lbnRFeHRlbnNpYmxlIgotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNEIwMDBEQSIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1MUYzMDJCNSIKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRCaW5kaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1MjYzMDJGMiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJiaW5kaW5nIgotCQkJICAgIHR5cGUgICAgICAgCSJJQmluZGluZyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuUG9ydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUI4QzAwMTYiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklCaW5kaW5nIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFCQzYwMjE5IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmcgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTIzRUUwMEJCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUVsZW1lbnRFeHRlbnNpYmxlIgotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNEIwMDBEQSIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1RjE2MDE1MyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJiaW5kaW5nT3BlcmF0aW9uIgotCQkJICAgIHR5cGUgICAgICAgCSJJQmluZGluZ09wZXJhdGlvbiIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTVGNTAwMDY2IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiaW5wdXROYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm91dHB1dE5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdPcGVyYXRpb25zIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1RkE0MDFDNSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTJBOTAyODQiCi0JCSAgICByZXN1bHQgICAgIAkiSVBvcnRUeXBlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldFBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1MkJFMDFBOCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwb3J0VHlwZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSVBvcnRUeXBlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5CaW5kaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBQkNGMDMwMiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUJpbmRpbmdPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QURDMDAwNzIiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMjNGMzAxNzciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRWxlbWVudEV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA0QjAwMERBIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZEJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NjBCQzAwNDEiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZ0ZhdWx0IgotCQkJICAgIHR5cGUgICAgICAgCSJJQmluZGluZ0ZhdWx0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2MEQ5MDA5RCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZ0ZhdWx0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdGYXVsdHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTYwRkMwMDYxIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1MzJEMDAxNyIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3BlcmF0aW9uIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTMzRjAzN0IiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAib3BlcmF0aW9uIgotCQkJICAgIHR5cGUgICAgICAgCSJJT3BlcmF0aW9uIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZ0lucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1NTA5MDBEQSIKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZ0lucHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldEJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTUxRDAwN0YiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZ0lucHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJQmluZGluZ0lucHV0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZ091dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTUzNDAzNDkiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdPdXRwdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0QmluZGluZ091dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTU0NzAyQTYiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZ091dHB1dCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdPdXRwdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFEQ0IwMjFDIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJQmluZGluZ0lucHV0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFERUIwMTAwIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMjNGNzAyMzIiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRWxlbWVudEV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA0QjAwMERBIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuQmluZGluZ0lucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBREZFMDAwRCIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUJpbmRpbmdPdXRwdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QUUyMTAxMTEiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMjNGQjAwQ0IiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRWxlbWVudEV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA0QjAwMERBIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuQmluZGluZ091dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUUyRDAwNTAiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklCaW5kaW5nRmF1bHQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QUU0RjAwQkQiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUyNDA1MDE2NyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklFbGVtZW50RXh0ZW5zaWJsZSIKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDRCMDAwREEiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5CaW5kaW5nRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNUYwMDJBIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJET01FbGVtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFGMzIwM0RCIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBvcmcudzNjLmRvbS5FbGVtZW50IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJvcmcudzNjLmRvbS5FbGVtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRjU2MDI5MiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUV4dGVuc2liaWxpdHlFbGVtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEIxMjQwMkFCIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRCMTM1MDNEMSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSURlZmluaXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QjFEOTAxNDIiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuRGVmaW5pdGlvbiBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMjNEMjAyODAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRWxlbWVudEV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA0QjAwMERBIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZEJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTg4RjEwMzlEIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmciCi0JCQkgICAgdHlwZSAgICAgICAJIklCaW5kaW5nIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkSW1wb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OTQ5MDI1OSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJpbXBvcnREZWYiCi0JCQkgICAgdHlwZSAgICAgICAJIklJbXBvcnQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OTZFMDA1RSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJtZXNzYWdlIgotCQkJICAgIHR5cGUgICAgICAgCSJJTWVzc2FnZSIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZE5hbWVzcGFjZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODk4NDAwNEIiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicHJlZml4IgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWVzcGFjZVVSSSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkUG9ydFR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTg5QzUwMDQ1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInBvcnRUeXBlIgotCQkJICAgIHR5cGUgICAgICAgCSJJUG9ydFR5cGUiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRTZXJ2aWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OUU0MDFFRSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJzZXJ2aWNlIgotCQkJICAgIHR5cGUgICAgICAgCSJJU2VydmljZSIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEExNzAzOEMiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVCaW5kaW5nSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBMzIwMjg2IgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlQmluZGluZ091dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEE0NjAxM0IiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdPdXRwdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlQmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEE1QzAwQjAiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlQmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODlGRTAzN0MiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBNzUwMkU3IgotCQkgICAgcmVzdWx0ICAgICAJIklGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVJbXBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBODMwMTRDIgotCQkgICAgcmVzdWx0ICAgICAJIklJbXBvcnQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBOUQwMzNFIgotCQkgICAgcmVzdWx0ICAgICAJIklJbnB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QUFGMDI1NCIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWVzc2FnZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBQzIwM0M0IgotCQkgICAgcmVzdWx0ICAgICAJIklPcGVyYXRpb24iCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlT3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QUU4MDBFRCIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZVBhcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBRjgwMjZEIgotCQkgICAgcmVzdWx0ICAgICAJIklQYXJ0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZVBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCMDgwMURBIgotCQkgICAgcmVzdWx0ICAgICAJIklQb3J0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZVBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QjE1MDM5QiIKLQkJICAgIHJlc3VsdCAgICAgCSJJUG9ydFR5cGUiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlU2VydmljZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEIzMjAxM0EiCi0JCSAgICByZXN1bHQgICAgIAkiSVNlcnZpY2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEI0MjAwNzUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5ncyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEI5MjAzNDEiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRJbXBvcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QkNEMDA2MCIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEltcG9ydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCRTcwMTQ0IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWVzcGFjZVVSSSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEMxNzAxMDciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJTWVzc2FnZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRNZXNzYWdlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEMzRTAwMUQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXROYW1lc3BhY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDNjIwMTRCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInByZWZpeCIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiU3RyaW5nIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE5hbWVzcGFjZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDNzQwMTE1IgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UG9ydFR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDQkUwMDcxIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVBvcnRUeXBlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBvcnRUeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OENEQTAxQzYiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQcmVmaXgiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDRkQwMDE3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWVzcGFjZVVSSSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiU3RyaW5nIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFNlcnZpY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThEMjMwMEE4IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVNlcnZpY2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0U2VydmljZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThEM0IwM0NFIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1QjgwMTJCIgotCQkgICAgcmVzdWx0ICAgICAJIklFeHRlbnNpb25SZWdpc3RyeSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRFeHRlbnNpb25SZWdpc3RyeSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5RDVENzAzQkIiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZXh0ZW5zaW9uUmVnaXN0cnkiCi0JCQkgICAgdHlwZSAgICAgICAJIklFeHRlbnNpb25SZWdpc3RyeSIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldERvY3VtZW50QmFzZVVSSSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5RDVGRTAyMDgiCi0JCSAgICByZXN1bHQgICAgIAkiU3RyaW5nIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldERvY3VtZW50QmFzZVVSSSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5RDYxODAzMjgiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZG9jdW1lbnRCYXNlIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVUeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FERDA1NjAwODAiCi0JCSAgICByZXN1bHQgICAgIAkiSVR5cGVzIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInJlbW92ZVNlcnZpY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwN0UwMDRDIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVNlcnZpY2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAicmVtb3ZlQmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FERDBCQTAzNTUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJyZW1vdmVQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FERDBEODAyOUEiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJUG9ydFR5cGUiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAicmVtb3ZlTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FERDBGQTAzMDciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJTWVzc2FnZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRUeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzA2RjAzMUIiCi0JCSAgICByZXN1bHQgICAgIAkiSVR5cGVzIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldFR5cGVzIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY3MDk1MDBFRSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJ0eXBlcyIKLQkJCSAgICB0eXBlICAgICAgIAkiSVR5cGVzIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5EZWZpbml0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRCMUU3MDJBMSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUltcG9ydCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRCMjAyMDExOSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbXBvcnQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTIyNEUwMkNFIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUF0dHJpYnV0ZUV4dGVuc2libGUiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA2M0YwMkFGIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuSW1wb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRCMjBDMDJFQSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUxpc3QiCi0JICAgIHF1aWQgICAgICAgCSIzQjg1QzBBMjAzQzUiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLkxpc3QgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS51dGlsLkxpc3QiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUMwQUYwMjk3IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJTWFwIgotCSAgICBxdWlkICAgICAgIAkiM0I4OTZCMDMwMEQ0IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmEudXRpbC5NYXAgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS51dGlsLk1hcCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkIxMTAyQjUiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklVUkwiCi0JICAgIHF1aWQgICAgICAgCSIzQjg5RDU2MzAyNzQiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS5uZXQuVVJMIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmEubmV0LlVSTCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5RDU2RTAzRTIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklFeHRlbnNpb25SZWdpc3RyeSIKLQkgICAgcXVpZCAgICAgICAJIjNCODlENTkzMDJBNSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IgotCQkgICAgcXVpZCAgICAgICAJIjNCODlENTlGMDJFOCIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiVHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQjhCRTlBNjAzQTgiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHR5cGVzIGVsZW1lbnQuIFRoZSB0eXBlcyBlbGVtZW50IGVuY2xvc2VzIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSByZWxldmFudCBmb3IgdGhlIGV4Y2hhbmdlZCBtZXNzYWdlcy4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCRUIwMTAzMTEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNDQURDRDNCMDM4MCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklUeXBlcyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0FEQ0JCMjAwNTAiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0U2NoZW1hcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FEQ0YzODAzRTYiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0U2NoZW1hcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FEQ0Y3RTAzMDEiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZXNwYWNlVVJJIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKSkKLQkob2JqZWN0IENsYXNzICJJSXRlcmF0b3IiCi0JICAgIHF1aWQgICAgICAgCSIzQzQ2ODdEQTAxNjciCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLkl0ZXJhdG9yIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmEudXRpbC5JdGVyYXRvciIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2ODgwODAwQjkiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIldTRExFeGNlcHRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQzQ2ODk2NTAzMTMiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuRXhjZXB0aW9uIGNsYXNzLiIKLQkgICAgc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLldTRExFeGNlcHRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0M0Njg5NzQwMzE1IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJVHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQ0FEQ0JCMjAwNTAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuVHlwZXMgbm9uLU1PRiBpbnRlcmZhY2UiCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuVHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBRENCRjEwMTczIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JICAgIHF1aWQgICAgICAgCSIzQ0IyNEFDMDAyQUUiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQ0IyNEFFQzAxQ0IiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKSkpCi0JKG9iamVjdCBDbGFzcyAiWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JICAgIHF1aWQgICAgICAgCSIzQ0MzNjBENzAzOUMiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQ0MzNjI3RjAwQjciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjQ5NjU2ODlEMDEyOCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklTY2hlbWEiCi0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTcxQzYwMDZEIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImRvY3VtZW50QmFzZVVSSSIKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFODA2OTAwRUEiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpKQotCShvYmplY3QgQ2xhc3MgIkRPTURvY3VtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0NEMTUwMkMwMjNCIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBvcmcudzNjLmRvbS5Eb2N1bWVudCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAib3JnLnczYy5kb20uRG9jdW1lbnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0NEMTUwNjAwMTgyIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJNZXNzYWdlUmVmZXJlbmNlIgotCSAgICBxdWlkICAgICAgIAkiM0Y2NzcxREIwMkRDIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y3NjJBNkEwMzA4IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzgwQTAwMUFCIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIKLQkJICAgIGV4cG9ydENvbnRyb2wgCSJQcm90ZWN0ZWQiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiCi0JICAgIGFic3RyYWN0ICAgCVRSVUUpCi0JKG9iamVjdCBDbGFzcyAiSUVsZW1lbnRFeHRlbnNpYmxlIgotCSAgICBxdWlkICAgICAgIAkiNDkwRTA0QjAwMERBIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUMxMkMwM0NEIgotCQkgICAgcmVzdWx0ICAgICAJIklMaXN0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZEV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNCODVDMTQ3MDI5NSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJleHRFbGVtZW50IgotCQkJICAgIHR5cGUgICAgICAgCSJJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuRWxlbWVudEV4dGVuc2libGUiCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTA0RTkwMkVFIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIKLQkJICAgIHR5cGUgICAgICAgCSJ0eXBlIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJJQXR0cmlidXRlRXh0ZW5zaWJsZSIKLQkgICAgcXVpZCAgICAgICAJIjQ5MEUwNjNGMDJBRiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RXh0ZW5zaW9uQXR0cmlidXRlIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4QTJEMDJENSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklPYmplY3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RXh0ZW5zaW9uQXR0cmlidXRlIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4ODQ1MDA1MiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAidmFsdWUiCi0JCQkgICAgdHlwZSAgICAgICAJIklPYmplY3QiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRFeHRlbnNpb25BdHRyaWJ1dGVzIgotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUxNTNCMDBDQiIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE5hdGl2ZUF0dHJpYnV0ZU5hbWVzIgotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUwOTlGMDEwOSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuQXR0cmlidXRlRXh0ZW5zaWJsZSIKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFMTNDMjAwMEYiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJJT2JqZWN0IgotCSAgICBxdWlkICAgICAgIAkiNDkwRTEzQjMwMTE5IgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLmxhbmcuT2JqZWN0IgotCQkgICAgcXVpZCAgICAgICAJIjQ5MEUxM0UzMDBBQiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCSAgICB0eXBlICAgICAgIAkidHlwZSIKLQkJICAgIGluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJJU2NoZW1hIgotCSAgICBxdWlkICAgICAgIAkiNDkwRTcxQzYwMDZEIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiNDkwRTc3N0YwMzJDIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMTI0MDJBQiIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSI0OTBFNzFGRTAzMEQiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQwIgotCSAgICBxdWlkICAgICAgIAkiM0FENUM4MjQwMThDIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJwb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1QzgyNzAxQzMiCi0JCSAgICBsYWJlbCAgICAgIAkicG9ydFR5cGUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVPcGVyYXRpb25zIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVDODI3MDFDRCIKLQkJICAgIGxhYmVsICAgICAgCSJlT3BlcmF0aW9ucyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMSIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVDRUJFMDBFMiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1Q0VCRjAwNTciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJlUGFydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUNFQkYwMDYxIgotCQkgICAgbGFiZWwgICAgICAJImVQYXJ0cyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDMiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDM1MjAxMEYiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDM1NDAxNzYiCi0JCSAgICBsYWJlbCAgICAgIAkiZVBvcnRUeXBlIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydFR5cGUiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM3RjAwMUE1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQzNTQwMTgwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDI4NjAyNjEiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNSIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEM0UxMDE3OSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDNFMjAyMjUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJlQmluZGluZ09wZXJhdGlvbnMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQzRTIwMjM5IgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5nT3BlcmF0aW9ucyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQzQ0IwMTQ1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDciCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDQyNTAzOEEiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ0MjYwMkY1IgotCQkgICAgbGFiZWwgICAgICAJImVPcGVyYXRpb24iCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDgiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ0MjYwMkZGIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkOSIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEOTQwMDM5MyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZVBvcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEOTQxMDMxQyIKLQkJICAgIGxhYmVsICAgICAgCSJlUG9ydHMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOTE3MDI4NiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMTAiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ5NDEwMzFEIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6U2VydmljZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDhGMDAyRjgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxMSIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEOUI4MDExRiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ5QjkwMjREIgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5nIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDI4NjAyNjEiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMTIiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ5QjkwMjYxIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDkxNzAyODYiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMTMiCi0JICAgIHF1aWQgICAgICAgCSIzQzg2NERGRjAyRUMiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVJbXBvcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNDODY0REZGMDJFRCIKLQkJICAgIGxhYmVsICAgICAgCSJlSW1wb3J0cyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDE0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY0REZGMDJFRSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMTUiCi0JICAgIHF1aWQgICAgICAgCSIzQjhCRUEyNzAyOUYiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDE2IgotCQkgICAgcXVpZCAgICAgICAJIjNCOEJFQTI5MDM1NiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVUeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCRUEyOTAzNkEiCi0JCSAgICBsYWJlbCAgICAgIAkiZVR5cGVzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6VHlwZXMiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkU5QTYwM0E4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDE3IgotCSAgICBxdWlkICAgICAgIAkiM0FENUU2MDMwMUUyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxOCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTYwNDAwQjciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpEZWZpbml0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJlTWVzc2FnZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU2MDQwMEMxIgotCQkgICAgbGFiZWwgICAgICAJImVNZXNzYWdlcyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDE5IgotCSAgICBxdWlkICAgICAgIAkiM0FENUU2NzEwMTA0IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQyMCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3MjAzNEEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpEZWZpbml0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJlUG9ydFR5cGVzIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjcyMDM1NCIKLQkJICAgIGxhYmVsICAgICAgCSJlUG9ydFR5cGVzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydFR5cGUiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM3RjAwMUE1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDIxIgotCSAgICBxdWlkICAgICAgIAkiM0FENUU2NzcwMDk1IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQyMiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3ODAzNzEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpEZWZpbml0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJlQmluZGluZ3MiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU2NzgwMzdCIgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5ncyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDIzIgotCSAgICBxdWlkICAgICAgIAkiM0FENUU2N0IwMzExIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQyNCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3RDAwN0YiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpEZWZpbml0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJlU2VydmljZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU2N0QwMDg5IgotCQkgICAgbGFiZWwgICAgICAJImVTZXJ2aWNlcyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlNlcnZpY2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQ4RjAwMkY4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDI1IgotCSAgICBxdWlkICAgICAgIAkiM0FENUZEMTMwMDc5IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGRDE0MDE5RCIKLQkJICAgIGxhYmVsICAgICAgCSJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQyNiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkQxNDAxOUUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQyNyIKLQkgICAgcXVpZCAgICAgICAJIjNBREYyRTY0MDFGNSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkU2NTAyNTEiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmdJbnB1dCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4MjAyRDQiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDI4IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRTY1MDI1MiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQzQ0IwMTQ1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjkiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMkVCMzAxNjMiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVCaW5kaW5nT3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRUI0MDEzQyIKLQkJICAgIGxhYmVsICAgICAgCSJlQmluZGluZ091dHB1dCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBOEYwMjhDIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzMCIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkVCNDAxM0QiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0NCMDE0NSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDMxIgotCSAgICBxdWlkICAgICAgIAkiM0FERjJGOTQwMjREIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJGOTUwMTkwIgotCQkgICAgbGFiZWwgICAgICAJImVJbnB1dCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMzIiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJGOTUwMTlBIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDMzIgotCSAgICBxdWlkICAgICAgIAkiM0FERjJGQjgwMkY5IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlT3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRkI5MDIwQSIKLQkJICAgIGxhYmVsICAgICAgCSJlT3V0cHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3V0cHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3OEI2MDIzMiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMzQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJGQjkwMjBCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDM1IgotCSAgICBxdWlkICAgICAgIAkiM0FERjMzMTYwMUE0IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlRmF1bHRzIgotCQkgICAgcXVpZCAgICAgICAJIjNBREYzMzE4MDM4NyIKLQkJICAgIGxhYmVsICAgICAgCSJlRmF1bHRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RmF1bHQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QkUwMTA4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzNiIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMzMxODAzODgiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzciCi0JICAgIHF1aWQgICAgICAgCSIzQURGMzQwMDAzRTUiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVCaW5kaW5nRmF1bHRzIgotCQkgICAgcXVpZCAgICAgICAJIjNBREYzNDAxMDNBQSIKLQkJICAgIGxhYmVsICAgICAgCSJlQmluZGluZ0ZhdWx0cyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE5RTAzQTYiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDM4IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYzNDAxMDNBQiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQzQ0IwMTQ1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzkiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOTFGNDAyRjMiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUUwOTFGODAxRkUiCi0JCSAgICBsYWJlbCAgICAgIAkiZUZhdWx0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RmF1bHQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QkUwMTA4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDQwIgotCQkgICAgcXVpZCAgICAgICAJIjNBRTA5MUY4MDFGRiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE5RTAzQTYiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNDEiCi0JICAgIHF1aWQgICAgICAgCSIzQUVBM0Q1NTAwMkQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDQyIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUEzRDU2MDMyOCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVOYW1lc3BhY2VzIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUEzRDU2MDMzMiIKLQkJICAgIGxhYmVsICAgICAgCSJlTmFtZXNwYWNlcyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok5hbWVzcGFjZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNDMiCi0JICAgIHF1aWQgICAgICAgCSIzQUVBM0UzQTAwMkQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVEZWZpbml0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUEzRTNDMDFFOCIKLQkJICAgIGxhYmVsICAgICAgCSJlRGVmaW5pdGlvbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDQ0IgotCQkgICAgcXVpZCAgICAgICAJIjNBRUEzRTNDMDFGMiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNDUiCi0JICAgIHF1aWQgICAgICAgCSIzQUVBNDEyRjAwMzUiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVQYXJhbWV0ZXJPcmRlcmluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVBNDEzMTAyNTUiCi0JCSAgICBsYWJlbCAgICAgIAkiZVBhcmFtZXRlck9yZGVyaW5nIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDYiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTQxMzEwMjVGIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0NyIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBRDI0MDBCRCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUlucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRDI1MDA4MyIKLQkJICAgIGxhYmVsICAgICAgCSJlSW5wdXQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbnB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzg5RjAwNTkiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDgiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFEMjUwMDg0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0lucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0OSIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBRDc5MDBGMiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZU91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUQ3QTAxNEQiCi0JCSAgICBsYWJlbCAgICAgIAkiZU91dHB1dCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok91dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNTAiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFEN0EwMTRFIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4RjAyOEMiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNTEiCi0JICAgIHF1aWQgICAgICAgCSIzQjhCMUJFOTAwQzQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgInR5cGVEZWZpbml0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxQkU5MDMyNyIKLQkJICAgIGxhYmVsICAgICAgCSJ0eXBlRGVmaW5pdGlvbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnhzZDo6WFNEVHlwZURlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0I2NkVDRDMwMkE5IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDUyIgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxQkU5MDMzMSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDUzIgotCSAgICBxdWlkICAgICAgIAkiM0I4QjFDMTIwM0IyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlbGVtZW50RGVjbGFyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QjFDMTQwMDFDIgotCQkgICAgbGFiZWwgICAgICAJImVsZW1lbnREZWNsYXJhdGlvbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnhzZDo6WFNERWxlbWVudERlY2xhcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNCNjZFRDU4MDIxNCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ1NCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCMUMxNDAwMjYiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ1NSIKLQkgICAgcXVpZCAgICAgICAJIjNCOEIxRENDMDJFNSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZVNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCMURDRTAyNzAiCi0JCSAgICBsYWJlbCAgICAgIAkiZVNjaGVtYSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnhzZDo6WFNEU2NoZW1hIgotCQkgICAgcXVpZHUgICAgICAJIjM3NEIxODI1MDBCQiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ1NiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCMURDRTAyN0EiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbXBvcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0RjkwM0RFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDU3IgotCSAgICBxdWlkICAgICAgIAkiM0M0NjgyOTMwM0U1IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2ODI5NjAxMEUiCi0JCSAgICBsYWJlbCAgICAgIAkiZU1lc3NhZ2UiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ1OCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2ODI5NjAxMTgiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ1OSIKLQkgICAgcXVpZCAgICAgICAJIjNDQzM2MTQ1MDBGMiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNjAiCi0JCSAgICBxdWlkICAgICAgIAkiM0NDMzYxNDYwMjNEIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0NDMzYwRDcwMzlDIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgInNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0MzNjE0NjAyM0UiCi0JCSAgICBsYWJlbCAgICAgIAkic2NoZW1hIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RTY2hlbWEiCi0JCSAgICBxdWlkdSAgICAgIAkiMzc0QjE4MjUwMEJCIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDYxIgotCSAgICBxdWlkICAgICAgIAkiM0Y3NEU3ODQwMUIxIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzRjc0RTc4NjAwMEYiCi0JCSAgICBsYWJlbCAgICAgIAkiZU1lc3NhZ2UiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2MiIKLQkJICAgIHF1aWQgICAgICAgCSIzRjc0RTc4NjAwMjMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlUmVmZXJlbmNlIgotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MURCMDJEQyIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ2MyIKLQkgICAgcXVpZCAgICAgICAJIjNGNzg5NkEyMDI2RSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNjQiCi0JCSAgICBxdWlkICAgICAgIAkiM0Y3ODk2QTcwMTJCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNDQjI0QUMwMDJBRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICJjaGlsZHJlbiIKLQkJICAgIHF1aWQgICAgICAgCSIzRjc4OTZBNzAxMkMiCi0JCSAgICBsYWJlbCAgICAgIAkiY2hpbGRyZW4iCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0NCMjRBQzAwMkFFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkpKSkKLSAgICBsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi43IFNlcnZpY2VzIgotCSAgICBxdWlkICAgICAgIAkiMzlBRDNFRjYwMTI3IgotCSAgICB0aXRsZSAgICAgIAkiMi43IFNlcnZpY2VzIgotCSAgICB6b29tICAgICAgIAk5MAotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZyIgQDEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4MDgsIDEzOTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxCi0JCQlsb2NhdGlvbiAgIAkoMTU1NywgMTI1MikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZyIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxCi0JCQlsb2NhdGlvbiAgIAkoMTU1NywgMTIwMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTAyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUJDNjAyMTkiCi0JCSAgICB3aWR0aCAgICAgIAk1MjAKLQkJICAgIGhlaWdodCAgICAgCTQwNAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydCIgQDIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEyMDAsIDExMjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyCi0JCQlsb2NhdGlvbiAgIAkoMTA3MCwgMTA3MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNjAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJUG9ydCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyCi0JCQlsb2NhdGlvbiAgIAkoMTA3MCwgMTAyMykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUI4MDAzMjYiCi0JCSAgICB3aWR0aCAgICAgIAkyNzgKLQkJICAgIGhlaWdodCAgICAgCTIxOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJU2VydmljZSIgQDMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDYyNCwgNzUyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMwotCQkJbG9jYXRpb24gICAJKDUxMCwgNjgyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIyOAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklTZXJ2aWNlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDMKLQkJCWxvY2F0aW9uICAgCSg1MTAsIDYzMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjI4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUI0OTAyODciCi0JCSAgICB3aWR0aCAgICAgIAkyNDYKLQkJICAgIGhlaWdodCAgICAgCTI2NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIiBANAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg2MjQsIDExMjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0Ci0JCQlsb2NhdGlvbiAgIAkoNDI4LCAxMDI1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIHdpZHRoICAgICAgCTQxMAotCQkgICAgaGVpZ2h0ICAgICAJMjE0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA1Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NEUwMUI0IgotCQkgICAgY2xpZW50ICAgICAJQDQKLQkJICAgIHN1cHBsaWVyICAgCUAzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDYyNCwgMTAxMykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2MjQsIDg4NCkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZyIgQDYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTgyNCwgMTg1NikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDYKLQkJCWxvY2F0aW9uICAgCSgxNjI4LCAxNzYxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmciKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIHdpZHRoICAgICAgCTQxMAotCQkgICAgaGVpZ2h0ICAgICAJMjE0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA3Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NDEwMTI5IgotCQkgICAgY2xpZW50ICAgICAJQDYKLQkJICAgIHN1cHBsaWVyICAgCUAxCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE4MTQsIDE3NDkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgxNCwgMTU5NCkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydCIgQDgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTIwMCwgMTUwNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDgKLQkJCWxvY2F0aW9uICAgCSgxMDU5LCAxNDMyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI4MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOTE3MDI4NiIKLQkJICAgIHdpZHRoICAgICAgCTMwMAotCQkgICAgaGVpZ2h0ICAgICAJMTY4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA5Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NDUwMkM5IgotCQkgICAgY2xpZW50ICAgICAJQDgKLQkJICAgIHN1cHBsaWVyICAgCUAyCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExOTMsIDE0MjApCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTE5MywgMTIyOSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ5IiBAMTAKLQkJICAgIGxvY2F0aW9uICAgCSg3MDUsIDE1MDgpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5NDAwMzkzIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlUG9ydHMiIEAxMQotCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoMjQxLCAxMjM2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEyCi0JCQkJUGFyZW50X1ZpZXcgCUAxMQotCQkJCWxvY2F0aW9uICAgCSg3ODEsIDE1MzcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTkyCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBvcnRzIgotCQkJCXBjdERpc3QgICAgCTAuMjE4OTc4Ci0JCQkJaGVpZ2h0ICAgICAJMjkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDk0MTAzMUMiCi0JCQkgICAgY2xpZW50ICAgICAJQDEwCi0JCQkgICAgc3VwcGxpZXIgICAJQDgKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3MDUsIDE1MDgpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEwNTAsIDE1MDgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTMKLQkJCQlQYXJlbnRfVmlldyAJQDExCi0JCQkJbG9jYXRpb24gICAJKDkxNCwgMTQ3MikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC42MDgwMDAKLQkJCQloZWlnaHQgICAgIAkzNwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMQotCQkJCWxvY2F0aW9uICAgCSg4MTcsIDE1ODIpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC4zMjg0NjcKLQkJCQloZWlnaHQgICAgIAk3NAotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDEwIiBAMTUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEwCi0JCQkgICAgbG9jYXRpb24gICAJKDI0MSwgMTIzNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNgotCQkJCVBhcmVudF9WaWV3IAlAMTUKLQkJCQlsb2NhdGlvbiAgIAkoNjAwLCAxMjk2KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDk0MTAzMUQiCi0JCQkgICAgY2xpZW50ICAgICAJQDEwCi0JCQkgICAgc3VwcGxpZXIgICAJQDQKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNzA1LCAxNTA4KQotCQkJCSg2NDEsIDE1MDgpCi0JCQkJKDY0MSwgMTIyNykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzA1LCAxNTA4KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2NDEsIDEyMjcpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTcKLQkJCQlQYXJlbnRfVmlldyAJQDE1Ci0JCQkJbG9jYXRpb24gICAJKDY4NSwgMTM1MikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjYzNzA5NwotCQkJCWhlaWdodCAgICAgCTQ0Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxMSIgQDE4Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTI3MSwgMTg2MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDlCODAxMUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nIiBAMTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkgICAgbG9jYXRpb24gICAJKDQyMywgMTAxNCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMAotCQkJCVBhcmVudF9WaWV3IAlAMTkKLQkJCQlsb2NhdGlvbiAgIAkoMTQ5NiwgMTgyNykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxODAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZyIKLQkJCQlwY3REaXN0ICAgIAkwLjY0ODU3MQotCQkJCWhlaWdodCAgICAgCTM2Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5QjkwMjREIgotCQkJICAgIGNsaWVudCAgICAgCUAxOAotCQkJICAgIHN1cHBsaWVyICAgCUA2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI3MSwgMTg2MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTYxOSwgMTg2MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMQotCQkJCVBhcmVudF9WaWV3IAlAMTkKLQkJCQlsb2NhdGlvbiAgIAkoMTU1NCwgMTkwNSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgxNDI4NgotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTIiIEAyMgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTgKLQkJCSAgICBsb2NhdGlvbiAgIAkoNDIzLCAxMDE0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzCi0JCQkJUGFyZW50X1ZpZXcgCUAyMgotCQkJCWxvY2F0aW9uICAgCSgxMjM2LCAxNjk4KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjY4Nzk0MwotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5QjkwMjYxIgotCQkJICAgIGNsaWVudCAgICAgCUAxOAotCQkJICAgIHN1cHBsaWVyICAgCUA4Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDEyNzEsIDE4NjIpCi0JCQkJKDExOTYsIDE4NjIpCi0JCQkJKDExOTYsIDE1ODgpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyNzEsIDE4NjIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDExOTYsIDE1ODgpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUVsZW1lbnRFeHRlbnNpYmxlIiBAMjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTE4NCwgMTYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjQKLQkJCWxvY2F0aW9uICAgCSg5NDIsIDkwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ4NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklFbGVtZW50RXh0ZW5zaWJsZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNAotCQkJbG9jYXRpb24gICAJKDk0MiwgNDApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ4NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA0QjAwMERBIgotCQkgICAgd2lkdGggICAgICAJNTAyCi0JCSAgICBoZWlnaHQgICAgIAkyNjQKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUF0dHJpYnV0ZUV4dGVuc2libGUiIEAyNQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNzYwLCAxOTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNQotCQkJbG9jYXRpb24gICAJKDE0ODksIDc3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU0MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklBdHRyaWJ1dGVFeHRlbnNpYmxlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI1Ci0JCQlsb2NhdGlvbiAgIAkoMTQ4OSwgMjcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU0MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTA2M0YwMkFGIgotCQkgICAgd2lkdGggICAgICAJNTYwCi0JCSAgICBoZWlnaHQgICAgIAkzNTQKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi41IEJpbmRpbmdzIgotCSAgICBxdWlkICAgICAgIAkiMzlBRDUxMjcwMjUyIgotCSAgICB0aXRsZSAgICAgIAkiMi41IEJpbmRpbmdzIgotCSAgICB6b29tICAgICAgIAk4NQotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZyIgQDI2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzMDQsIDI0MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI2Ci0JCQlsb2NhdGlvbiAgIAkoNzMsIDExNCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZyIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNgotCQkJbG9jYXRpb24gICAJKDczLCA2NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUJDNjAyMTkiCi0JCSAgICB3aWR0aCAgICAgIAk0ODAKLQkJICAgIGhlaWdodCAgICAgCTM3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ09wZXJhdGlvbiIgQDI3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg5NzYsIDM1MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI3Ci0JCQlsb2NhdGlvbiAgIAkoNzgwLCAxMzApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzkyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUJpbmRpbmdPcGVyYXRpb24iKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjcKLQkJCWxvY2F0aW9uICAgCSg3ODAsIDgwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzOTIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREMwMDA3MiIKLQkJICAgIHdpZHRoICAgICAgCTQxMAotCQkgICAgaGVpZ2h0ICAgICAJNTY4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nSW5wdXQiIEAyOAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTkyLCAxMzYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgKLQkJCWxvY2F0aW9uICAgCSg2MiwgMTMzNCkKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNjAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZ0lucHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI4Ci0JCQlsb2NhdGlvbiAgIAkoNjIsIDEyODQpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI2MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFERUIwMTAwIgotCQkgICAgd2lkdGggICAgICAJMjc4Ci0JCSAgICBoZWlnaHQgICAgIAkxNzYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdPdXRwdXQiIEAyOQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjA4LCAxNjY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjkKLQkJCWxvY2F0aW9uICAgCSg2MSwgMTYzOCkKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZ091dHB1dCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyOQotCQkJbG9jYXRpb24gICAJKDYxLCAxNTg4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRTIxMDExMSIKLQkJICAgIHdpZHRoICAgICAgCTMxMgotCQkgICAgaGVpZ2h0ICAgICAJMTc2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nRmF1bHQiIEAzMAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjA4LCAxOTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzAKLQkJCWxvY2F0aW9uICAgCSg3MiwgMTk1OCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNzIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZ0ZhdWx0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDMwCi0JCQlsb2NhdGlvbiAgIAkoNzIsIDE5MDgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI3MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFNEYwMEJEIgotCQkgICAgd2lkdGggICAgICAJMjkwCi0JCSAgICBoZWlnaHQgICAgIAkxNzYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydFR5cGUiIEAzMQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxOTA0LCA2MjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMQotCQkJbG9jYXRpb24gICAJKDE2OTcsIDUyMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0MTQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQb3J0VHlwZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM3RjAwMUE1IgotCQkgICAgd2lkdGggICAgICAJNDMyCi0JCSAgICBoZWlnaHQgICAgIAkyMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW5wdXQiIEAzMgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxOTA0LCAxMzYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzIKLQkJCWxvY2F0aW9uICAgCSgxNzU2LCAxMjgzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklucHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzg5RjAwNTkiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTE3OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPdXRwdXQiIEAzMwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxOTA0LCAxNjY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzMKLQkJCWxvY2F0aW9uICAgCSgxNzU2LCAxNTg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk91dHB1dCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QjYwMjMyIgotCQkgICAgd2lkdGggICAgICAJMzE0Ci0JCSAgICBoZWlnaHQgICAgIAkxNzgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZyIgQDM0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMwNCwgNjg4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzQKLQkJCWxvY2F0aW9uICAgCSg5NywgNTg2KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmciKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIHdpZHRoICAgICAgCTQzMgotCQkgICAgaGVpZ2h0ICAgICAJMjI4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODU5NTQxMDEyOSIKLQkJICAgIGNsaWVudCAgICAgCUAzNAotCQkgICAgc3VwcGxpZXIgICAJQDI2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI3OSwgNTc0KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI3OSwgNDI4KSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMiIEAzNgotCQkgICAgbG9jYXRpb24gICAJKDExMDQsIDc0MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDM1MjAxMEYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQb3J0VHlwZSIgQDM3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNgotCQkJICAgIGxvY2F0aW9uICAgCSg2NDAsIDU5OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzOAotCQkJCVBhcmVudF9WaWV3IAlAMzcKLQkJCQlsb2NhdGlvbiAgIAkoMTU2NSwgNzgxKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTIxNgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VQb3J0VHlwZSIKLQkJCQlwY3REaXN0ICAgIAkwLjc4OTI5MgotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQzNTQwMTc2IgotCQkJICAgIGNsaWVudCAgICAgCUAzNgotCQkJICAgIHN1cHBsaWVyICAgCUAzMQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExMDQsIDc0MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTY4OCwgNzQyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM5Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNwotCQkJCWxvY2F0aW9uICAgCSgxNjEzLCA3MTYpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NzIxOTMKLQkJCQloZWlnaHQgICAgIAkyNwotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDQiIEA0MAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzYKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjQwLCA1OTgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANDEKLQkJCQlQYXJlbnRfVmlldyAJQDQwCi0JCQkJbG9jYXRpb24gICAJKDgwNiwgNjk3KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxMDgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjUwOTQ0OQotCQkJCWhlaWdodCAgICAgCTQ2Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQzNTQwMTgwIgotCQkJICAgIGNsaWVudCAgICAgCUAzNgotCQkJICAgIHN1cHBsaWVyICAgCUAzNAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExMDQsIDc0MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNTIwLCA3NDIpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIiBANDIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTg4OCwgMTAyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQyCi0JCQlsb2NhdGlvbiAgIAkoMTY3MiwgODk4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQzMgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk9wZXJhdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgd2lkdGggICAgICAJNDUwCi0JCSAgICBoZWlnaHQgICAgIAkyNzYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0lucHV0IiBANDMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNjI0LCAxNDA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDMKLQkJCWxvY2F0aW9uICAgCSg0NzYsIDEyODMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZ0lucHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4MjAyRDQiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTI3NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQ3IiBANDQKLQkJICAgIGxvY2F0aW9uICAgCSgxMjY0LCAxMzU5KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDI0MDBCRCIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZUlucHV0IiBANDUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDQ0Ci0JCQkgICAgbG9jYXRpb24gICAJKDk2LCAyODcpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANDYKLQkJCQlQYXJlbnRfVmlldyAJQDQ1Ci0JCQkJbG9jYXRpb24gICAJKDE2MzcsIDEzMTYpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTMyCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUlucHV0IgotCQkJCXBjdERpc3QgICAgCTAuNzc1MTQ4Ci0JCQkJaGVpZ2h0ICAgICAJNDQKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUQyNTAwODMiCi0JCQkgICAgY2xpZW50ICAgICAJQDQ0Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMyCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI2NCwgMTM1OSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc0NywgMTM1OSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA0NwotCQkJCVBhcmVudF9WaWV3IAlANDUKLQkJCQlsb2NhdGlvbiAgIAkoMTY5NCwgMTM5OCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg4OTU0NgotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNDgiIEA0OAotCQkJICAgIFBhcmVudF9WaWV3IAlANDQKLQkJCSAgICBsb2NhdGlvbiAgIAkoOTYsIDI4NykKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUQyNTAwODQiCi0JCQkgICAgY2xpZW50ICAgICAJQDQ0Ci0JCQkgICAgc3VwcGxpZXIgICAJQDQzCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI2NCwgMTM1OSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNzgxLCAxMzU5KSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPdXRwdXQiIEA0OQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg5NjAsIDE2NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0OQotCQkJbG9jYXRpb24gICAJKDgxMiwgMTUzOSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTI3NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQ5IiBANTAKLQkJICAgIGxvY2F0aW9uICAgCSgxNDMyLCAxNjU0KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDc5MDBGMiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZU91dHB1dCIgQDUxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA1MAotCQkJICAgIGxvY2F0aW9uICAgCSgtMTIwLCAzNzQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANTIKLQkJCQlQYXJlbnRfVmlldyAJQDUxCi0JCQkJbG9jYXRpb24gICAJKDE2NDUsIDE2MTIpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZU91dHB1dCIKLQkJCQlwY3REaXN0ICAgIAkwLjY3NDc3MgotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4NEFEN0EwMTREIgotCQkJICAgIGNsaWVudCAgICAgCUA1MAotCQkJICAgIHN1cHBsaWVyICAgCUAzMwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0MzIsIDE2NTQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE3NDcsIDE2NTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANTMKLQkJCQlQYXJlbnRfVmlldyAJQDUxCi0JCQkJbG9jYXRpb24gICAJKDE2ODEsIDE2OTcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43OTAyNzQKLQkJCQloZWlnaHQgICAgIAk0MwotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDUwIiBANTQKLQkJCSAgICBQYXJlbnRfVmlldyAJQDUwCi0JCQkgICAgbG9jYXRpb24gICAJKC0xMjAsIDM3NCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUQ3QTAxNEUiCi0JCQkgICAgY2xpZW50ICAgICAJQDUwCi0JCQkgICAgc3VwcGxpZXIgICAJQDQ5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQzMiwgMTY1NCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTExNywgMTY1NCkpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3BlcmF0aW9uIiBANTUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoOTkyLCAxMDA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANTUKLQkJCWxvY2F0aW9uICAgCSg4MTksIDkzMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNDYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nT3BlcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICB3aWR0aCAgICAgIAkzNjQKLQkJICAgIGhlaWdodCAgICAgCTE3OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBANTYKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QURFNDAxREMiCi0JCSAgICBjbGllbnQgICAgIAlANTUKLQkJICAgIHN1cHBsaWVyICAgCUAyNwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg5NjYsIDkxOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg5NjYsIDYzNikpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1IiBANTcKLQkJICAgIGxvY2F0aW9uICAgCSg0MzMsIDEwMjIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQzRTEwMTc5IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ2IiBANTgKLQkJCSAgICBQYXJlbnRfVmlldyAJQDU3Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xMzQzLCA0OTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANTkKLQkJCQlQYXJlbnRfVmlldyAJQDU4Ci0JCQkJbG9jYXRpb24gICAJKDIzNSwgODc3KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNFMjAyMjUiCi0JCQkgICAgY2xpZW50ICAgICAJQDU3Ci0JCQkgICAgc3VwcGxpZXIgICAJQDM0Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDQzMywgMTAyMikKLQkJCQkoMjc2LCAxMDIyKQotCQkJCSgyNzYsIDgwMikpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNDMzLCAxMDIyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNzYsIDgwMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA2MAotCQkJCVBhcmVudF9WaWV3IAlANTgKLQkJCQlsb2NhdGlvbiAgIAkoMzMwLCA4NDEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC45MDAwMDAKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nT3BlcmF0aW9ucyIgQDYxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA1NwotCQkJICAgIGxvY2F0aW9uICAgCSgtMTM0MywgNDk0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDYyCi0JCQkJUGFyZW50X1ZpZXcgCUA2MQotCQkJCWxvY2F0aW9uICAgCSg1MTMsIDk3NykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkzODQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZ09wZXJhdGlvbnMiCi0JCQkJcGN0RGlzdCAgICAJMC4yMTE2OTkKLQkJCQloZWlnaHQgICAgIAk0NgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0UyMDIzOSIKLQkJCSAgICBjbGllbnQgICAgIAlANTcKLQkJCSAgICBzdXBwbGllciAgIAlANTUKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg0MzMsIDEwMjIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDgxMCwgMTAyMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA2MwotCQkJCVBhcmVudF9WaWV3IAlANjEKLQkJCQlsb2NhdGlvbiAgIAkoNzY2LCA5ODApCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC44ODQ5NTYKLQkJCQloZWlnaHQgICAgIAk0MwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDY0Ci0JCQkJUGFyZW50X1ZpZXcgCUA2MQotCQkJCWxvY2F0aW9uICAgCSg3MDYsIDEwNjcpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC43Mjc1NjQKLQkJCQloZWlnaHQgICAgIAk0NQotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNyIgQDY1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTQxOCwgMTA0MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDQyNTAzOEEiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPcGVyYXRpb24iIEA2NgotCQkJICAgIFBhcmVudF9WaWV3IAlANjUKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTM1OCwgNDY0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDY3Ci0JCQkJUGFyZW50X1ZpZXcgCUA2NgotCQkJCWxvY2F0aW9uICAgCSgxNTIwLCAxMDc5KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTIyOAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VPcGVyYXRpb24iCi0JCQkJcGN0RGlzdCAgICAJMC40MjA2MDEKLQkJCQloZWlnaHQgICAgIAkzOQotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVENDI2MDJGNSIKLQkJCSAgICBjbGllbnQgICAgIAlANjUKLQkJCSAgICBzdXBwbGllciAgIAlANDIKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDE4LCAxMDQwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjYzLCAxMDQwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDY4Ci0JCQkJUGFyZW50X1ZpZXcgCUA2NgotCQkJCWxvY2F0aW9uICAgCSgxNTg5LCAxMDA1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjk2NzIxCi0JCQkJaGVpZ2h0ICAgICAJMzYKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ4IiBANjkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDY1Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zNTgsIDQ2NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3MAotCQkJCVBhcmVudF9WaWV3IAlANjkKLQkJCQlsb2NhdGlvbiAgIAkoMTI3MywgMTA3MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTkyCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC41OTU0MjAKLQkJCQloZWlnaHQgICAgIAkzMAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVENDI2MDJGRiIKLQkJCSAgICBjbGllbnQgICAgIAlANjUKLQkJCSAgICBzdXBwbGllciAgIAlANTUKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDE4LCAxMDQwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTc0LCAxMDQwKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjciIEA3MQotCQkgICAgbG9jYXRpb24gICAJKDc4NywgMTE5MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkU2NDAxRjUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nSW5wdXQiIEA3MgotCQkJICAgIFBhcmVudF9WaWV3IAlANzEKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTM4MSwgNDU0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDczCi0JCQkJUGFyZW50X1ZpZXcgCUA3MgotCQkJCWxvY2F0aW9uICAgCSg2NjksIDExNTIpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjc2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUJpbmRpbmdJbnB1dCIKLQkJCQlwY3REaXN0ICAgIAkwLjUxMTkwNQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjJFNjUwMjUxIgotCQkJICAgIGNsaWVudCAgICAgCUA3MQotCQkJICAgIHN1cHBsaWVyICAgCUA0MwotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSg3ODcsIDExOTApCi0JCQkJKDYzNiwgMTE5MCkKLQkJCQkoNjM2LCAxMjcxKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3ODcsIDExOTApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDYzNiwgMTI3MSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3NAotCQkJCVBhcmVudF9WaWV3IAlANzIKLQkJCQlsb2NhdGlvbiAgIAkoNjg1LCAxMjIyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNDQwNDc2Ci0JCQkJaGVpZ2h0ICAgICAJMzIKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQyOCIgQDc1Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA3MQotCQkJICAgIGxvY2F0aW9uICAgCSgtMzgxLCA0NTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANzYKLQkJCQlQYXJlbnRfVmlldyAJQDc1Ci0JCQkJbG9jYXRpb24gICAJKDg4NSwgMTE0NCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjJFNjUwMjUyIgotCQkJICAgIGNsaWVudCAgICAgCUA3MQotCQkJICAgIHN1cHBsaWVyICAgCUA1NQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSg3ODcsIDExOTApCi0JCQkJKDkyNiwgMTE5MCkKLQkJCQkoOTI2LCAxMDk3KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3ODcsIDExOTApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDkyNiwgMTA5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3NwotCQkJCVBhcmVudF9WaWV3IAlANzUKLQkJCQlsb2NhdGlvbiAgIAkoODcxLCAxMTM2KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODM3NzU4Ci0JCQkJaGVpZ2h0ICAgICAJNTYKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDI5IiBANzgKLQkJICAgIGxvY2F0aW9uICAgCSgxMDI0LCAxMzEyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBREYyRUIzMDE2MyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZUJpbmRpbmdPdXRwdXQiIEA3OQotCQkJICAgIFBhcmVudF9WaWV3IAlANzgKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTE1MCwgNTc4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDgwCi0JCQkJUGFyZW50X1ZpZXcgCUA3OQotCQkJCWxvY2F0aW9uICAgCSgxMDEyLCAxNDI5KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTMwNgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VCaW5kaW5nT3V0cHV0IgotCQkJCXBjdERpc3QgICAgCTAuNTQ1MDgyCi0JCQkJaGVpZ2h0ICAgICAJMTMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkVCNDAxM0MiCi0JCQkgICAgY2xpZW50ICAgICAJQDc4Ci0JCQkgICAgc3VwcGxpZXIgICAJQDQ5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyNCwgMTMxMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTAyNCwgMTUyNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4MQotCQkJCVBhcmVudF9WaWV3IAlANzkKLQkJCQlsb2NhdGlvbiAgIAkoOTY3LCAxNDc5KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzc0NTkwCi0JCQkJaGVpZ2h0ICAgICAJNTgKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzMCIgQDgyCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA3OAotCQkJICAgIGxvY2F0aW9uICAgCSgtMTUwLCA1NzgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAODMKLQkJCQlQYXJlbnRfVmlldyAJQDgyCi0JCQkJbG9jYXRpb24gICAJKDk4MywgMTE0MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjJFQjQwMTNEIgotCQkJICAgIGNsaWVudCAgICAgCUA3OAotCQkJICAgIHN1cHBsaWVyICAgCUA1NQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEwMjQsIDEzMTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEwMjQsIDEwOTcpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAODQKLQkJCQlQYXJlbnRfVmlldyAJQDgyCi0JCQkJbG9jYXRpb24gICAJKDEwMzEsIDExODYpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC41OTAxNjQKLQkJCQloZWlnaHQgICAgIAk3Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RmF1bHQiIEA4NQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxOTIwLCAxOTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAODUKLQkJCWxvY2F0aW9uICAgCSgxNzcyLCAxOTA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTE3OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nRmF1bHQiIEA4NgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMzYwLCAxOTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAODYKLQkJCWxvY2F0aW9uICAgCSgxMjEyLCAxODU5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdGYXVsdCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBOUUwM0E2IgotCQkgICAgd2lkdGggICAgICAJMzE0Ci0JCSAgICBoZWlnaHQgICAgIAkyNzQKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDg3Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFNzEwMzMzIgotCQkgICAgY2xpZW50ICAgICAJQDg2Ci0JCSAgICBzdXBwbGllciAgIAlAMzAKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIwMywgMjAwNykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzNTMsIDIwMDcpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMzciIEA4OAotCQkgICAgbG9jYXRpb24gICAJKDEzNTYsIDEzNTIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FERjM0MDAwM0U1IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlQmluZGluZ0ZhdWx0cyIgQDg5Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA4OAotCQkJICAgIGxvY2F0aW9uICAgCSgxODgsIDYxNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5MAotCQkJCVBhcmVudF9WaWV3IAlAODkKLQkJCQlsb2NhdGlvbiAgIAkoMTM4MiwgMTc1MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkzMDAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZ0ZhdWx0cyIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMzE1MAotCQkJCWhlaWdodCAgICAgCTI2Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjM0MDEwM0FBIgotCQkJICAgIGNsaWVudCAgICAgCUA4OAotCQkJICAgIHN1cHBsaWVyICAgCUA4NgotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEzNTYsIDEzNTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEzNTYsIDE4NDcpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOTEKLQkJCQlQYXJlbnRfVmlldyAJQDg5Ci0JCQkJbG9jYXRpb24gICAJKDE0MDksIDE3OTcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC44OTkxOTQKLQkJCQloZWlnaHQgICAgIAk1MwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDkyCi0JCQkJUGFyZW50X1ZpZXcgCUA4OQotCQkJCWxvY2F0aW9uICAgCSgxMjU2LCAxODA2KQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuOTE5MjkxCi0JCQkJaGVpZ2h0ICAgICAJMTAxCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMzgiIEA5MwotCQkJICAgIFBhcmVudF9WaWV3IAlAODgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTg4LCA2MTYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOTQKLQkJCQlQYXJlbnRfVmlldyAJQDkzCi0JCQkJbG9jYXRpb24gICAJKDEwNzYsIDExOTcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBREYzNDAxMDNBQiIKLQkJCSAgICBjbGllbnQgICAgIAlAODgKLQkJCSAgICBzdXBwbGllciAgIAlANTUKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTM1NiwgMTM1MikKLQkJCQkoMTM1NiwgMTIxNykKLQkJCQkoMTExNywgMTIxNykKLQkJCQkoMTExNywgMTA5NykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTM1NiwgMTM1MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTExNywgMTA5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5NQotCQkJCVBhcmVudF9WaWV3IAlAOTMKLQkJCQlsb2NhdGlvbiAgIAkoMTE1MiwgMTE2NCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY4NzAwOAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQzOSIgQDk2Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTY0MCwgMTk3MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOTFGNDAyRjMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVGYXVsdCIgQDk3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA5NgotCQkJICAgIGxvY2F0aW9uICAgCSgtMzQ0LCA4MTgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOTgKLQkJCQlQYXJlbnRfVmlldyAJQDk3Ci0JCQkJbG9jYXRpb24gICAJKDE2NzQsIDE5MTUpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUZhdWx0IgotCQkJCXBjdERpc3QgICAgCTAuMjc2NDIzCi0JCQkJaGVpZ2h0ICAgICAJNTYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOTFGODAxRkUiCi0JCQkgICAgY2xpZW50ICAgICAJQDk2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDg1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTY0MCwgMTk3MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc2MywgMTk3MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5OQotCQkJCVBhcmVudF9WaWV3IAlAOTcKLQkJCQlsb2NhdGlvbiAgIAkoMTcxOCwgMjAxMikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY0MjI3NgotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNDAiIEAxMDAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDk2Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zNDQsIDgxOCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOTFGODAxRkYiCi0JCQkgICAgY2xpZW50ICAgICAJQDk2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDg2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTY0MCwgMTk3MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTUxNywgMTk3MCkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMTAxCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFNDMwMkFCIgotCQkgICAgY2xpZW50ICAgICAJQDQ5Ci0JCSAgICBzdXBwbGllciAgIAlAMjkKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoODAzLCAxNjU2KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM2NCwgMTY1NikpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDEwMgotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRTFCMDExMyIKLQkJICAgIGNsaWVudCAgICAgCUA0MwotCQkgICAgc3VwcGxpZXIgICAJQDI4Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQ2NywgMTM4NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMzEsIDEzODUpKSkpCi0JKG9iamVjdCBDbGFzc0RpYWdyYW0gIjIuNCBQb3J0VHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDFDNDAzNjYiCi0JICAgIHRpdGxlICAgICAgCSIyLjQgUG9ydFR5cGVzIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmEudXRpbC5JdGVyYXRvciBpbnRlcmZhY2UuIgotCSAgICB6b29tICAgICAgIAk4MAotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydFR5cGUiIEAxMDMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQ5NiwgMjA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTAzCi0JCQlsb2NhdGlvbiAgIAkoMTQ2LCAxNzIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzAwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSVBvcnRUeXBlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMwotCQkJbG9jYXRpb24gICAJKDE0NiwgMTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3MDAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBNUJFMDMzMSIKLQkJICAgIHdpZHRoICAgICAgCTcxOAotCQkgICAgaGVpZ2h0ICAgICAJMTk2Ci0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklPcGVyYXRpb24iIEAxMDQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE1NTIsIDIwOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNAotCQkJbG9jYXRpb24gICAJKDExMTYsIDE3NikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk4NzMKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3BlcmF0aW9uIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNAotCQkJbG9jYXRpb24gICAJKDExMTYsIDEyNikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJODczCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTc3NjAwRDEiCi0JCSAgICB3aWR0aCAgICAgIAk4OTEKLQkJICAgIGhlaWdodCAgICAgCTE4OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJSW5wdXQiIEAxMDUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDM2OCwgMTQ3MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNQotCQkJbG9jYXRpb24gICAJKDU1LCAxNDM3KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYyNgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbnB1dCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDUKLQkJCWxvY2F0aW9uICAgCSg1NSwgMTM4NykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjI2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTdFRTAwMTUiCi0JCSAgICB3aWR0aCAgICAgIAk2NDQKLQkJICAgIGhlaWdodCAgICAgCTE5NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJT3V0cHV0IiBAMTA2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzODQsIDE3OTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDYKLQkJCWxvY2F0aW9uICAgCSg1NiwgMTc1NykKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3V0cHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNgotCQkJbG9jYXRpb24gICAJKDU2LCAxNzA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODI5MDI3RCIKLQkJICAgIHdpZHRoICAgICAgCTY3NAotCQkgICAgaGVpZ2h0ICAgICAJMTk0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklGYXVsdCIgQDEwNwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzY4LCAyMTEyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTA3Ci0JCQlsb2NhdGlvbiAgIAkoNTUsIDIwNzYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjI2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUZhdWx0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNwotCQkJbG9jYXRpb24gICAJKDU1LCAyMDI2KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MjYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODYxMDMxRCIKLQkJICAgIHdpZHRoICAgICAgCTY0NAotCQkgICAgaGVpZ2h0ICAgICAJMTk2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnRUeXBlIiBAMTA4Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0OTYsIDgwMCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwOAotCQkJbG9jYXRpb24gICAJKDE1OCwgNjcyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY3NwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAk2OTUKLQkJICAgIGhlaWdodCAgICAgCTI4MQotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMTA5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNTc2LCA4MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDkKLQkJCWxvY2F0aW9uICAgCSgyMzI1LCA2OTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTAyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUGFydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkgICAgd2lkdGggICAgICAJNTIwCi0JCSAgICBoZWlnaHQgICAgIAkyNDAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RmF1bHQiIEAxMTAKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE3MjgsIDIxMTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMTAKLQkJCWxvY2F0aW9uICAgCSgxNjQ3LCAyMDYwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBoZWlnaHQgICAgIAkxMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW5wdXQiIEAxMTEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwNTYsIDE0NzIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMTEKLQkJCWxvY2F0aW9uICAgCSg4NzAsIDE0MjIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIHdpZHRoICAgICAgCTM5MAotCQkgICAgaGVpZ2h0ICAgICAJMTI1Ci0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok91dHB1dCIgQDExMgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTM2MCwgMTc5MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDExMgotCQkJbG9jYXRpb24gICAJKDEyMzIsIDE3NDIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjU2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICB3aWR0aCAgICAgIAkyNzQKLQkJICAgIGhlaWdodCAgICAgCTEyNQotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iIEAxMTMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE1NTIsIDc4NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDExMwotCQkJbG9jYXRpb24gICAJKDEyMTQsIDYyMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NzcKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJPcGVyYXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIHdpZHRoICAgICAgCTY5NQotCQkgICAgaGVpZ2h0ICAgICAJMzUyCi0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMCIgQDExNAotCQkgICAgbG9jYXRpb24gICAJKDEwMjQsIDc5NykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgyNDAxOEMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPcGVyYXRpb25zIiBAMTE1Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMTQKLQkJCSAgICBsb2NhdGlvbiAgIAkoNTkyLCAyNjkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTE2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMTUKLQkJCQlsb2NhdGlvbiAgIAkoMTA4OCwgNzQ4KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI0OQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VPcGVyYXRpb25zIgotCQkJCXBjdERpc3QgICAgCTAuMzU5NjQ5Ci0JCQkJaGVpZ2h0ICAgICAJNTAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgyNzAxQ0QiCi0JCQkgICAgY2xpZW50ICAgICAJQDExNAotCQkJICAgIHN1cHBsaWVyICAgCUAxMTMKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDI0LCA3OTcpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyMDUsIDc5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMTcKLQkJCQlQYXJlbnRfVmlldyAJQDExNQotCQkJCWxvY2F0aW9uICAgCSgxMTc2LCA4NjEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC44NDAzOTEKLQkJCQloZWlnaHQgICAgIAk2NAotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDExOAotCQkJCVBhcmVudF9WaWV3IAlAMTE1Ci0JCQkJbG9jYXRpb24gICAJKDEwNzQsIDkyMykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjI3NjI0MwotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgInBvcnRUeXBlIiBAMTE5Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMTQKLQkJCSAgICBsb2NhdGlvbiAgIAkoNTkyLCAyNjkpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MjcwMUMzIgotCQkJICAgIGNsaWVudCAgICAgCUAxMTQKLQkJCSAgICBzdXBwbGllciAgIAlAMTA4Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyNCwgNzk3KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4NDMsIDc5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjAKLQkJCQlQYXJlbnRfVmlldyAJQDExOQotCQkJCWxvY2F0aW9uICAgCSg4ODgsIDc1NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc1MzQ4OAotCQkJCWhlaWdodCAgICAgCTQxCi0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ0NSIgQDEyMQotCQkgICAgbG9jYXRpb24gICAJKDIxMDcsIDc3MykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBNDEyRjAwMzUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQYXJhbWV0ZXJPcmRlcmluZyIgQDEyMgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTIxCi0JCQkgICAgbG9jYXRpb24gICAJKDE4MTksIDEwMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjMKLQkJCQlQYXJlbnRfVmlldyAJQDEyMgotCQkJCWxvY2F0aW9uICAgCSgyMTQ1LCA2NDcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMzk2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBhcmFtZXRlck9yZGVyaW5nIgotCQkJCXBjdERpc3QgICAgCTAuMTgzMzMzCi0JCQkJaGVpZ2h0ICAgICAJMTI3Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTQxMzEwMjU1IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjEKLQkJCSAgICBzdXBwbGllciAgIAlAMTA5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjEwNywgNzczKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMzE2LCA3NzMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTI0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMjIKLQkJCQlsb2NhdGlvbiAgIAkoMjI3MiwgODIyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzk2NjEwCi0JCQkJaGVpZ2h0ICAgICAJNDkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjUKLQkJCQlQYXJlbnRfVmlldyAJQDEyMgotCQkJCWxvY2F0aW9uICAgCSgyMTcxLCA4ODgpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC4zMDYyMjAKLQkJCQloZWlnaHQgICAgIAkxMTUKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0NiIgQDEyNgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTIxCi0JCQkgICAgbG9jYXRpb24gICAJKDE4MTksIDEwMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBNDEzMTAyNUYiCi0JCQkgICAgY2xpZW50ICAgICAJQDEyMQotCQkJICAgIHN1cHBsaWVyICAgCUAxMTMKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMTA3LCA3NzMpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4OTksIDc3MykpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDM1IiBAMTI3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTcwMiwgMTUwNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzMxNjAxQTQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVGYXVsdHMiIEAxMjgKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEyNwotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE0LCA4MzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTI5Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMjgKLQkJCQlsb2NhdGlvbiAgIAkoMTgxNSwgMTk4MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRmF1bHRzIgotCQkJCXBjdERpc3QgICAgCTAuODc4OTkyCi0JCQkJaGVpZ2h0ICAgICAJMTEzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjMzMTgwMzg3IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjcKLQkJCSAgICBzdXBwbGllciAgIAlAMTEwCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTcwMiwgMTUwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTcwMiwgMjA0OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzAKLQkJCQlQYXJlbnRfVmlldyAJQDEyOAotCQkJCWxvY2F0aW9uICAgCSgxNjQ0LCAyMDIwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuOTQ5NTgwCi0JCQkJaGVpZ2h0ICAgICAJNTkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzEKLQkJCQlQYXJlbnRfVmlldyAJQDEyOAotCQkJCWxvY2F0aW9uICAgCSgxNTkzLCAxOTYzKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE2NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODQ1Mzc4Ci0JCQkJaGVpZ2h0ICAgICAJMTEwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMzYiIEAxMzIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEyNwotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE0LCA4MzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTMzCi0JCQkJUGFyZW50X1ZpZXcgCUAxMzIKLQkJCQlsb2NhdGlvbiAgIAkoMTY2MSwgMTA2OSkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjMzMTgwMzg4IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjcKLQkJCSAgICBzdXBwbGllciAgIAlAMTEzCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTcwMiwgMTUwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTcwMiwgOTYwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzNAotCQkJCVBhcmVudF9WaWV3IAlAMTMyCi0JCQkJbG9jYXRpb24gICAJKDE4MjEsIDEwMzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NTczNjIKLQkJCQloZWlnaHQgICAgIAkxMTkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMxIiBAMTM1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTE3OCwgMTIzNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkY5NDAyNEQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVJbnB1dCIgQDEzNgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTM1Ci0JCQkgICAgbG9jYXRpb24gICAJKDg5MCwgNTYyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzNwotCQkJCVBhcmVudF9WaWV3IAlAMTM2Ci0JCQkJbG9jYXRpb24gICAJKDg3OCwgMTM0MykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxMzIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW5wdXQiCi0JCQkJcGN0RGlzdCAgICAJMC44MTk4MjAKLQkJCQloZWlnaHQgICAgIAkxMDMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkY5NTAxOTAiCi0JCQkgICAgY2xpZW50ICAgICAJQDEzNQotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTE3OCwgMTIzNCkKLQkJCQkoOTgwLCAxMjM0KQotCQkJCSg5ODAsIDE0MTApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExNzgsIDEyMzQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk4MCwgMTQxMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzgKLQkJCQlQYXJlbnRfVmlldyAJQDEzNgotCQkJCWxvY2F0aW9uICAgCSgxMDQ2LCAxMzY0KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODc3NjYwCi0JCQkJaGVpZ2h0ICAgICAJNjYKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzMiIgQDEzOQotCQkJICAgIFBhcmVudF9WaWV3IAlAMTM1Ci0JCQkgICAgbG9jYXRpb24gICAJKDg5MCwgNTYyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE0MAotCQkJCVBhcmVudF9WaWV3IAlAMTM5Ci0JCQkJbG9jYXRpb24gICAJKDEyMzYsIDEwMzYpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBREYyRjk1MDE5QSIKLQkJCSAgICBjbGllbnQgICAgIAlAMTM1Ci0JCQkgICAgc3VwcGxpZXIgICAJQDExMwotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMTc4LCAxMjM0KQotCQkJCSgxMjc3LCAxMjM0KQotCQkJCSgxMjc3LCA5NjApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExNzgsIDEyMzQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyNzcsIDk2MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDEKLQkJCQlQYXJlbnRfVmlldyAJQDEzOQotCQkJCWxvY2F0aW9uICAgCSgxMTk3LCAxMDU4KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzM2NDEzCi0JCQkJaGVpZ2h0ICAgICAJODEKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMzIiBAMTQyCi0JCSAgICBsb2NhdGlvbiAgIAkoMTQ2OCwgMTM0NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkZCODAyRjkiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPdXRwdXQiIEAxNDMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE0MgotCQkJICAgIGxvY2F0aW9uICAgCSgxMTgwLCA2NzMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTQ0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNDMKLQkJCQlsb2NhdGlvbiAgIAkoMTM2MiwgMTY2OSkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlT3V0cHV0IgotCQkJCXBjdERpc3QgICAgCTAuODQwOTA5Ci0JCQkJaGVpZ2h0ICAgICAJMTA3Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjJGQjkwMjBBIgotCQkJICAgIGNsaWVudCAgICAgCUAxNDIKLQkJCSAgICBzdXBwbGllciAgIAlAMTEyCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ2OCwgMTM0NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ2OCwgMTczMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDUKLQkJCQlQYXJlbnRfVmlldyAJQDE0MwotCQkJCWxvY2F0aW9uICAgCSgxNTQ2LCAxNjc2KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODYzNjM2Ci0JCQkJaGVpZ2h0ICAgICAJNzgKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzNCIgQDE0NgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTQyCi0JCQkgICAgbG9jYXRpb24gICAJKDExODAsIDY3MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDcKLQkJCQlQYXJlbnRfVmlldyAJQDE0NgotCQkJCWxvY2F0aW9uICAgCSgxNDI3LCAxMDM3KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkZCOTAyMEIiCi0JCQkgICAgY2xpZW50ICAgICAJQDE0MgotCQkJICAgIHN1cHBsaWVyICAgCUAxMTMKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDY4LCAxMzQ1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDY4LCA5NjApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTQ4Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNDYKLQkJCQlsb2NhdGlvbiAgIAkoMTUyMywgMTA4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY5MDM0MQotCQkJCWhlaWdodCAgICAgCTU1Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkQ4MDE5RiIKLQkJICAgIGNsaWVudCAgICAgCUAxMDgKLQkJICAgIHN1cHBsaWVyICAgCUAxMDMKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkUyMDE3MSIKLQkJICAgIGNsaWVudCAgICAgCUAxMTMKLQkJICAgIHN1cHBsaWVyICAgCUAxMDQKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkVFMDMxRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMTEKLQkJICAgIHN1cHBsaWVyICAgCUAxMDUKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MgotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkY4MDFDRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMTIKLQkJICAgIHN1cHBsaWVyICAgCUAxMDYKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYyMDAyMDAyRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMTAKLQkJICAgIHN1cHBsaWVyICAgCUAxMDcKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDE1NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjIyNCwgMTQ1NikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE1NAotCQkJbG9jYXRpb24gICAJKDE5MzcsIDEzMTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTc1Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgd2lkdGggICAgICAJNTkzCi0JCSAgICBoZWlnaHQgICAgIAkzMTIKLQkJICAgIGFubm90YXRpb24gCTgpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIgQDE1NQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTUyMCwgMjU0NCkKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE1NQotCQkJbG9jYXRpb24gICAJKDExOTMsIDI0NjYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjU0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZVJlZmVyZW5jZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcxREIwMkRDIgotCQkgICAgd2lkdGggICAgICAJNjcyCi0JCSAgICBoZWlnaHQgICAgIAkxODAKLQkJICAgIGFubm90YXRpb24gCTgpCi0JCShvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAxNTYKLQkJICAgIGxvY2F0aW9uICAgCSgxNTI0LCAyMjc1KQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHN1cHBsaWVyICAgCUAxNTUKLQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJKDE1MjQsIDIyNzUpCi0JCQkoMTUyNCwgMjQ1NCkpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxNTcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzIzRDAzMTkiCi0JCSAgICBjbGllbnQgICAgIAlAMTEwCi0JCSAgICBzdXBwbGllciAgIAlAMTU1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE3NzYsIDIxNzYpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc3NiwgMjI3NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDE1NikKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMTU4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcyMzUwMEREIgotCQkgICAgY2xpZW50ICAgICAJQDExMgotCQkgICAgc3VwcGxpZXIgICAJQDE1NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzcxLCAxODU0KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEzNzEsIDIyNzUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAxNTYpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MjI4MDJFNyIKLQkJICAgIGNsaWVudCAgICAgCUAxMTEKLQkJICAgIHN1cHBsaWVyICAgCUAxNTUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoOTgwLCAxNTM0KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk4MCwgMjI3NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDE1NikKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDYxIiBAMTYwCi0JCSAgICBsb2NhdGlvbiAgIAkoMjIwNiwgMjI1OSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjc0RTc4NDAxQjEiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVNZXNzYWdlIiBAMTYxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNjAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNzM0LCAtMjg1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE2MgotCQkJCVBhcmVudF9WaWV3IAlAMTYxCi0JCQkJbG9jYXRpb24gICAJKDIwNjgsIDE2NzApCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjE2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZU1lc3NhZ2UiCi0JCQkJcGN0RGlzdCAgICAJMC45MTIyMzAKLQkJCQloZWlnaHQgICAgIAkxMzkKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzRjc0RTc4NjAwMEYiCi0JCQkgICAgY2xpZW50ICAgICAJQDE2MAotCQkJICAgIHN1cHBsaWVyICAgCUAxNTQKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMjA2LCAyMjU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMjA2LCAxNjEyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE2MwotCQkJCVBhcmVudF9WaWV3IAlAMTYxCi0JCQkJbG9jYXRpb24gICAJKDIyNjAsIDE2NzgpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEiCi0JCQkJcGN0RGlzdCAgICAJMC45MDAwMDAKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDYyIiBAMTY0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNjAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNzM0LCAtMjg1KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNGNzRFNzg2MDAyMyIKLQkJCSAgICBjbGllbnQgICAgIAlAMTYwCi0JCQkgICAgc3VwcGxpZXIgICAJQDE1NQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgyMjA2LCAyMjU5KQotCQkJCSgyMjA2LCAyNTU2KQotCQkJCSgxODU2LCAyNTU2KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMjA2LCAyMjU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxODU2LCAyNTU2KSkpKSkpCi0JKG9iamVjdCBDbGFzc0RpYWdyYW0gIjIuMSBEZWZpbml0aW9ucyIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVFNDhBMDI2MiIKLQkgICAgdGl0bGUgICAgICAJIjIuMSBEZWZpbml0aW9ucyIKLQkgICAgem9vbSAgICAgICAJODMKLQkgICAgbWF4X2hlaWdodCAJMjgzNTAKLQkgICAgbWF4X3dpZHRoICAJMjE2MDAKLQkgICAgb3JpZ2luX3ggICAJMAotCSAgICBvcmlnaW5feSAgIAkwCi0JICAgIGl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SURlZmluaXRpb24iIEAxNjUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQzMiwgMTkyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTY1Ci0JCQlsb2NhdGlvbiAgIAkoODgsIDE2MSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2ODgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJRGVmaW5pdGlvbiIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjUKLQkJCWxvY2F0aW9uICAgCSg4OCwgMTExKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2ODgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMUQ5MDE0MiIKLQkJICAgIHdpZHRoICAgICAgCTcwNgotCQkgICAgaGVpZ2h0ICAgICAJMTg2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlR5cGVzIiBAMTY2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODI0LCA5NDQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjYKLQkJCWxvY2F0aW9uICAgCSgxNjg2LCA4OTYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjc2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiVHlwZXMiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCOEJFOUE2MDNBOCIKLQkJICAgIHdpZHRoICAgICAgCTI5NAotCQkgICAgaGVpZ2h0ICAgICAJMTIwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIgQDE2NwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjE0NCwgNjI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTY3Ci0JCQlsb2NhdGlvbiAgIAkoMTkxMCwgNTQ1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ2OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkltcG9ydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0RjkwM0RFIgotCQkgICAgd2lkdGggICAgICAJNDg2Ci0JCSAgICBoZWlnaHQgICAgIAkxODIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDE2OAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjExMiwgMTE4NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2OAotCQkJbG9jYXRpb24gICAJKDE5MDAsIDExMDUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDI0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgd2lkdGggICAgICAJNDQyCi0JCSAgICBoZWlnaHQgICAgIAkxODIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydFR5cGUiIEAxNjkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4MDgsIDE0ODgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjkKLQkJCWxvY2F0aW9uICAgCSgxNTk2LCAxNDA5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQyNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAk0NDIKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIiBAMTcwCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMzM2LCAxNzI4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTcwCi0JCQlsb2NhdGlvbiAgIAkoMjEyNCwgMTY0OSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0MjQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDI4NjAyNjEiCi0JCSAgICB3aWR0aCAgICAgIAk0NDIKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpEZWZpbml0aW9uIiBAMTcxCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzMjgsIDI0MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE3MQotCQkJbG9jYXRpb24gICAJKDEwNzMsIDM5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTUxMAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkRlZmluaXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIHdpZHRoICAgICAgCTUyOAotCQkgICAgaGVpZ2h0ICAgICAJNDI2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTUiIEAxNzIKLQkJICAgIGxvY2F0aW9uICAgCSgxMzU4LCA4NjApCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkVBMjcwMjlGIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQxNiIgQDE3MwotCQkJICAgIFBhcmVudF9WaWV3IAlAMTcyCi0JCQkgICAgbG9jYXRpb24gICAJKDYyLCAtMzYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTc0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNzMKLQkJCQlsb2NhdGlvbiAgIAkoMTMxNywgNTM1KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyOTAzNTYiCi0JCQkgICAgY2xpZW50ICAgICAJQDE3MgotCQkJICAgIHN1cHBsaWVyICAgCUAxNzEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzU4LCA4NjApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEzNTgsIDQ1MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNzUKLQkJCQlQYXJlbnRfVmlldyAJQDE3MwotCQkJCWxvY2F0aW9uICAgCSgxNDAzLCA1MTEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NTY2NDkKLQkJCQloZWlnaHQgICAgIAk0NQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVUeXBlcyIgQDE3NgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTcyCi0JCQkgICAgbG9jYXRpb24gICAJKDYyLCAtMzYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTc3Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNzYKLQkJCQlsb2NhdGlvbiAgIAkoMTU4NiwgOTA5KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1NgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VUeXBlcyIKLQkJCQlwY3REaXN0ICAgIAkwLjc3OTA5NwotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QkVBMjkwMzZBIgotCQkJICAgIGNsaWVudCAgICAgCUAxNzIKLQkJCSAgICBzdXBwbGllciAgIAlAMTY2Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDEzNTgsIDg2MCkKLQkJCQkoMTM1OCwgOTQ4KQotCQkJCSgxNjc3LCA5NDgpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEzNTgsIDg2MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTY3NywgOTQ4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE3OAotCQkJCVBhcmVudF9WaWV3IAlAMTc2Ci0JCQkJbG9jYXRpb24gICAJKDE2MzIsIDk4NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg5MjY1NQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxMyIgQDE3OQotCQkgICAgbG9jYXRpb24gICAJKDE2MTIsIDU5NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQzg2NERGRjAyRUMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDE0IiBAMTgwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNzkKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTIsIDIyNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODEKLQkJCQlQYXJlbnRfVmlldyAJQDE4MAotCQkJCWxvY2F0aW9uICAgCSgxNDIzLCA1MTIpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFRSIKLQkJCSAgICBjbGllbnQgICAgIAlAMTc5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE3MQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxNjEyLCA1OTUpCi0JCQkJKDE0NjQsIDU5NSkKLQkJCQkoMTQ2NCwgNDUzKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNjEyLCA1OTUpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE0NjQsIDQ1MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODIKLQkJCQlQYXJlbnRfVmlldyAJQDE4MAotCQkJCWxvY2F0aW9uICAgCSgxNTI0LCA0OTUpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NTg2NjcKLQkJCQloZWlnaHQgICAgIAk2MAotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVJbXBvcnRzIiBAMTgzCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNzkKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTIsIDIyNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODQKLQkJCQlQYXJlbnRfVmlldyAJQDE4MwotCQkJCWxvY2F0aW9uICAgCSgxNjkyLCA1NTcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjA0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUltcG9ydHMiCi0JCQkJcGN0RGlzdCAgICAJMC4yODAzMzUKLQkJCQloZWlnaHQgICAgIAkzOQotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFRCIKLQkJCSAgICBjbGllbnQgICAgIAlAMTc5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE2NwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE2MTIsIDU5NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTkwMSwgNTk1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4NQotCQkJCVBhcmVudF9WaWV3IAlAMTgzCi0JCQkJbG9jYXRpb24gICAJKDE4NTQsIDY1MikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg0MTAwNAotCQkJCWhlaWdodCAgICAgCTU3Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTg2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxODMKLQkJCQlsb2NhdGlvbiAgIAkoMTY3NiwgNjQ2KQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuMjI1OTQxCi0JCQkJaGVpZ2h0ICAgICAJNTEKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDE3IiBAMTg3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTI3OSwgMTEzNikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTYwMzAxRTIiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDE4IiBAMTg4Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxODcKLQkJCSAgICBsb2NhdGlvbiAgIAkoMjcxLCAyNzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTg5Ci0JCQkJUGFyZW50X1ZpZXcgCUAxODgKLQkJCQlsb2NhdGlvbiAgIAkoMTIzOCwgNTkxKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTYwNDAwQjciCi0JCQkgICAgY2xpZW50ICAgICAJQDE4NwotCQkJICAgIHN1cHBsaWVyICAgCUAxNzEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjc5LCAxMTM2KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjc5LCA0NTMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTkwCi0JCQkJUGFyZW50X1ZpZXcgCUAxODgKLQkJCQlsb2NhdGlvbiAgIAkoMTMyMCwgNTg3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODA0OTc0Ci0JCQkJaGVpZ2h0ICAgICAJNDEKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlTWVzc2FnZXMiIEAxOTEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE4NwotCQkJICAgIGxvY2F0aW9uICAgCSgyNzEsIDI3MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTIKLQkJCQlQYXJlbnRfVmlldyAJQDE5MQotCQkJCWxvY2F0aW9uICAgCSgxNjQ3LCAxMTcxKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI0MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VNZXNzYWdlcyIKLQkJCQlwY3REaXN0ICAgIAkwLjY0MzEzNwotCQkJCWhlaWdodCAgICAgCTM4Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2MDQwMEMxIgotCQkJICAgIGNsaWVudCAgICAgCUAxODcKLQkJCSAgICBzdXBwbGllciAgIAlAMTY4Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDEyNzksIDExMzYpCi0JCQkJKDEyNzksIDEyMDgpCi0JCQkJKDE4OTEsIDEyMDgpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyNzksIDExMzYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4OTEsIDEyMDgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTkzCi0JCQkJUGFyZW50X1ZpZXcgCUAxOTEKLQkJCQlsb2NhdGlvbiAgIAkoMTgyMSwgMTE3MSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg5OTM0NgotCQkJCWhlaWdodCAgICAgCTM4Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTk0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxOTEKLQkJCQlsb2NhdGlvbiAgIAkoMTc5NywgMTI0NCkKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjg2NDQwNwotCQkJCWhlaWdodCAgICAgCTM2Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxOSIgQDE5NQotCQkgICAgbG9jYXRpb24gICAJKDEyMTIsIDExNTkpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU2NzEwMTA0IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQyMCIgQDE5NgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTk1Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zMjQsIDIxNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTcKLQkJCQlQYXJlbnRfVmlldyAJQDE5NgotCQkJCWxvY2F0aW9uICAgCSgxMTcxLCA1OTQpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjcyMDM0QSIKLQkJCSAgICBjbGllbnQgICAgIAlAMTk1Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE3MQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyMTIsIDExNTkpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyMTIsIDQ1MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTgKLQkJCQlQYXJlbnRfVmlldyAJQDE5NgotCQkJCWxvY2F0aW9uICAgCSgxMjUxLCA2MjQpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43NTc5NjIKLQkJCQloZWlnaHQgICAgIAkzOQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQb3J0VHlwZXMiIEAxOTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE5NQotCQkJICAgIGxvY2F0aW9uICAgCSgtMzI0LCAyMTUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjAwCi0JCQkJUGFyZW50X1ZpZXcgCUAxOTkKLQkJCQlsb2NhdGlvbiAgIAkoMTM5MSwgMTQ1MSkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyNDAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlUG9ydFR5cGVzIgotCQkJCXBjdERpc3QgICAgCTAuNzIzNjk4Ci0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3MjAzNTQiCi0JCQkgICAgY2xpZW50ICAgICAJQDE5NQotCQkJICAgIHN1cHBsaWVyICAgCUAxNjkKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTIxMiwgMTE1OSkKLQkJCQkoMTIxMiwgMTQ5MCkKLQkJCQkoMTU4NywgMTQ5MCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIxMiwgMTE1OSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTU4NywgMTQ5MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMDEKLQkJCQlQYXJlbnRfVmlldyAJQDE5OQotCQkJCWxvY2F0aW9uICAgCSgxNTMzLCAxNDUxKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuOTI1NjExCi0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMDIKLQkJCQlQYXJlbnRfVmlldyAJQDE5OQotCQkJCWxvY2F0aW9uICAgCSgxNTEyLCAxNTQwKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODk1ODU1Ci0JCQkJaGVpZ2h0ICAgICAJNTAKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDIxIiBAMjAzCi0JCSAgICBsb2NhdGlvbiAgIAkoMTExNCwgMTU4NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3NzAwOTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDIyIiBAMjA0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyMDMKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTQwNiwgMjQxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwNQotCQkJCVBhcmVudF9WaWV3IAlAMjA0Ci0JCQkJbG9jYXRpb24gICAJKDEwNzMsIDY4MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2NzgwMzcxIgotCQkJICAgIGNsaWVudCAgICAgCUAyMDMKLQkJCSAgICBzdXBwbGllciAgIAlAMTcxCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTExNCwgMTU4NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTExNCwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwNgotCQkJCVBhcmVudF9WaWV3IAlAMjA0Ci0JCQkJbG9jYXRpb24gICAJKDExNTUsIDc1MikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjczNjcwNAotCQkJCWhlaWdodCAgICAgCTQxCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUJpbmRpbmdzIiBAMjA3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyMDMKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTQwNiwgMjQxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwOAotCQkJCVBhcmVudF9WaWV3IAlAMjA3Ci0JCQkJbG9jYXRpb24gICAJKDE4NTEsIDE2NzQpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjA0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUJpbmRpbmdzIgotCQkJCXBjdERpc3QgICAgCTAuNzY2MzQ3Ci0JCQkJaGVpZ2h0ICAgICAJNDMKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3ODAzN0IiCi0JCQkgICAgY2xpZW50ICAgICAJQDIwMwotCQkJICAgIHN1cHBsaWVyICAgCUAxNzAKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTExNCwgMTU4NSkKLQkJCQkoMTExNCwgMTcxNikKLQkJCQkoMjExNSwgMTcxNikpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTExNCwgMTU4NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjExNSwgMTcxNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMDkKLQkJCQlQYXJlbnRfVmlldyAJQDIwNwotCQkJCWxvY2F0aW9uICAgCSgyMDUzLCAxNjc3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuOTQ1MDc0Ci0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMTAKLQkJCQlQYXJlbnRfVmlldyAJQDIwNwotCQkJCWxvY2F0aW9uICAgCSgyMDE0LCAxNzU0KQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuOTExMDcyCi0JCQkJaGVpZ2h0ICAgICAJMzgKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIiBAMjExCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODQwLCAyMDQ4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjExCi0JCQlsb2NhdGlvbiAgIAkoMTYyOCwgMTk2OSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0MjQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJTZXJ2aWNlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDhGMDAyRjgiCi0JCSAgICB3aWR0aCAgICAgIAk0NDIKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDIzIiBAMjEyCi0JCSAgICBsb2NhdGlvbiAgIAkoMTA2NiwgMTUzMikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3QjAzMTEiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDI0IiBAMjEzCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyMTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTUyMSwgLTExMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMTQKLQkJCQlQYXJlbnRfVmlldyAJQDIxMwotCQkJCWxvY2F0aW9uICAgCSgxMDI1LCA2NzApCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjdEMDA3RiIKLQkJCSAgICBjbGllbnQgICAgIAlAMjEyCi0JCQkgICAgc3VwcGxpZXIgICAJQDE3MQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEwNjYsIDE1MzIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEwNjYsIDQ1MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMTUKLQkJCQlQYXJlbnRfVmlldyAJQDIxMwotCQkJCWxvY2F0aW9uICAgCSgxMTA5LCA3NTYpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43MTk2OTcKLQkJCQloZWlnaHQgICAgIAk0MwotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVTZXJ2aWNlcyIgQDIxNgotCQkJICAgIFBhcmVudF9WaWV3IAlAMjEyCi0JCQkgICAgbG9jYXRpb24gICAJKC01MjEsIC0xMTIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjE3Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMTYKLQkJCQlsb2NhdGlvbiAgIAkoMTM5MywgMjAyOCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlU2VydmljZXMiCi0JCQkJcGN0RGlzdCAgICAJMC43OTE4MjQKLQkJCQloZWlnaHQgICAgIAkzMgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjdEMDA4OSIKLQkJCSAgICBjbGllbnQgICAgIAlAMjEyCi0JCQkgICAgc3VwcGxpZXIgICAJQDIxMQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMDY2LCAxNTMyKQotCQkJCSgxMDY2LCAyMDU5KQotCQkJCSgxNjE5LCAyMDU5KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDY2LCAxNTMyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjE5LCAyMDU5KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxOAotCQkJCVBhcmVudF9WaWV3IAlAMjE2Ci0JCQkJbG9jYXRpb24gICAJKDE1NTQsIDIwMzEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45NDAxOTcKLQkJCQloZWlnaHQgICAgIAkyOQotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxOQotCQkJCVBhcmVudF9WaWV3IAlAMjE2Ci0JCQkJbG9jYXRpb24gICAJKDE1MzIsIDIxMTMpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC45MjA1MTUKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMjAKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QjFGODAzODIiCi0JCSAgICBjbGllbnQgICAgIAlAMTcxCi0JCSAgICBzdXBwbGllciAgIAlAMTY1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEwNjQsIDI2MykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3ODUsIDI2MykpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi4xLjMgRXh0ZW5zaWJpbGl0eSIKLQkgICAgcXVpZCAgICAgICAJIjNBRDYwQzUxMDE5MiIKLQkgICAgdGl0bGUgICAgICAJIjIuMS4zIEV4dGVuc2liaWxpdHkiCi0JICAgIHpvb20gICAgICAgCTY1Ci0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnQiIEAyMjEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDEyOCwgMzEwNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMQotCQkJbG9jYXRpb24gICAJKDQwNDcsIDMwNTEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUG9ydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5MTcwMjg2IgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlNlcnZpY2UiIEAyMjIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzkzNiwgMjkyOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMgotCQkJbG9jYXRpb24gICAJKDM4NTUsIDI4NzUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiU2VydmljZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQ4RjAwMkY4IgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDIyMwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzU1MiwgOTQ0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjIzCi0JCQlsb2NhdGlvbiAgIAkoMzE1OSwgOTIwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTc4NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklFeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMjMKLQkJCWxvY2F0aW9uICAgCSgzMTU5LCA4NzApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTc4NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIxMjQwMkFCIgotCQkgICAgd2lkdGggICAgICAJODA0Ci0JCSAgICBoZWlnaHQgICAgIAkxNzIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VHlwZXMiIEAyMjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTI5NiwgMzAwOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyNAotCQkJbG9jYXRpb24gICAJKDEyMTUsIDI5NTYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiVHlwZXMiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCOEJFOUE2MDNBOCIKLQkJICAgIGhlaWdodCAgICAgCTEyOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIgQDIyNQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjY0LCAxNDU2KQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjI1Ci0JCQlsb2NhdGlvbiAgIAkoMTQ4MCwgMTQwNCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNjgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJFeHRlbnNpYmxlRWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIgotCQkgICAgd2lkdGggICAgICAJMzg2Ci0JCSAgICBoZWlnaHQgICAgIAkxMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAyMjYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzU2OCwgMTQ3MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyNgotCQkJbG9jYXRpb24gICAJKDMzMjUsIDEzNjQpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDg2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkJICAgIGNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQlQYXJlbnRfVmlldyAJQDIyNgotCQkJbG9jYXRpb24gICAJKDMzMjUsIDE0MjIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk0NjUpCi0JCSAgICB3aWR0aCAgICAgIAk1MDQKLQkJICAgIGhlaWdodCAgICAgCTI0MAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDI1IiBAMjI3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMjU4NiwgMTQ0MykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkQxMzAwNzkiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDI2IiBAMjI4Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyMjcKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTQxOCwgMTMzMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMjkKLQkJCQlQYXJlbnRfVmlldyAJQDIyOAotCQkJCWxvY2F0aW9uICAgCSgyMDAzLCAxNDAyKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkQxNDAxOUUiCi0JCQkgICAgY2xpZW50ICAgICAJQDIyNwotCQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyNTg2LCAxNDQzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxODU3LCAxNDQzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzMAotCQkJCVBhcmVudF9WaWV3IAlAMjI4Ci0JCQkJbG9jYXRpb24gICAJKDE5NzUsIDEzOTkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44Mzk2OTUKLQkJCQloZWlnaHQgICAgIAk0NQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiIEAyMzEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIyNwotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE4LCAxMzMxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzMgotCQkJCVBhcmVudF9WaWV3IAlAMjMxCi0JCQkJbG9jYXRpb24gICAJKDI4NjIsIDEyOTMpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNDUwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQlwY3REaXN0ICAgIAkwLjM3OTA3MAotCQkJCWhlaWdodCAgICAgCTE1MQotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDE0MDE5RCIKLQkJCSAgICBjbGllbnQgICAgIAlAMjI3Ci0JCQkgICAgc3VwcGxpZXIgICAJQDIyNgotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI1ODYsIDE0NDMpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDMzMTYsIDE0NDMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjMzCi0JCQkJUGFyZW50X1ZpZXcgCUAyMzEKLQkJCQlsb2NhdGlvbiAgIAkoMzEwNCwgMTM5OCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjcwOTQwMgotCQkJCWhlaWdodCAgICAgCTQ2Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjM0Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMzEKLQkJCQlsb2NhdGlvbiAgIAkoMzA0NywgMTUzNSkKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjYzMjQ3OQotCQkJCWhlaWdodCAgICAgCTkyCi0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6V1NETEVsZW1lbnQiIEAyMzUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjQ5NiwgOTkyKQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjM1Ci0JCQlsb2NhdGlvbiAgIAkoMjEwNCwgODg0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTc4NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIldTRExFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzZBMzAyREQiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyMzUKLQkJCWxvY2F0aW9uICAgCSgyMTA0LCA5NDcpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk3NTYpCi0JCSAgICB3aWR0aCAgICAgIAk4MDIKLQkJICAgIGhlaWdodCAgICAgCTI0MAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDIzNgotCQkgICAgbG9jYXRpb24gICAJKDI0OTQsIDEyMDYpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDIzNQotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMjQ5NCwgMTIwNikKLQkJCSgyNDk0LCAxMTEyKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDIzNwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMTQ5MDNEMCIKLQkJICAgIGNsaWVudCAgICAgCUAyMjYKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzY3NiwgMTM1MikKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzNjc2LCAxMDMwKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjM4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0JEREY1MzUwMkMzIgotCQkgICAgY2xpZW50ICAgICAJQDIyNgotCQkgICAgc3VwcGxpZXIgICAJQDIzNQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzNDI1LCAxMzUyKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM0MjUsIDEyMDYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMzYpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiBAMjM5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDM4NTYsIDIwMzIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMzkKLQkJCWxvY2F0aW9uICAgCSgzNTcxLCAxOTgwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU3MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NCMjRBQzAwMkFFIgotCQkgICAgd2lkdGggICAgICAJNTg4Ci0JCSAgICBoZWlnaHQgICAgIAkxMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI0MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDQjI0QUVDMDFDQiIKLQkJICAgIGNsaWVudCAgICAgCUAyMzkKLQkJICAgIHN1cHBsaWVyICAgCUAyMjYKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzcwNSwgMTk2OCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzNzA1LCAxNTkyKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDYzIiBAMjQxCi0JCSAgICBsb2NhdGlvbiAgIAkoNDM2NiwgMjM1OCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjc4OTZBMjAyNkUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDY0IiBAMjQyCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyNDEKLQkJCSAgICBsb2NhdGlvbiAgIAkoMjMzNCwgOTY2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0MwotCQkJCVBhcmVudF9WaWV3IAlAMjQyCi0JCQkJbG9jYXRpb24gICAJKDQzMDYsIDIwMDQpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNGNzg5NkE3MDEyQiIKLQkJCSAgICBjbGllbnQgICAgIAlAMjQxCi0JCQkgICAgc3VwcGxpZXIgICAJQDIzOQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSg0MzY2LCAyMzU4KQotCQkJCSg0NDg4LCAyMzU4KQotCQkJCSg0NDg4LCAyMDQ1KQotCQkJCSg0MTUwLCAyMDQ1KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg0MzY2LCAyMzU4KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0MTUwLCAyMDQ1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0NAotCQkJCVBhcmVudF9WaWV3IAlAMjQyCi0JCQkJbG9jYXRpb24gICAJKDQyMjcsIDIwOTkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEiCi0JCQkJcGN0RGlzdCAgICAJMC45MDAwMDAKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImNoaWxkcmVuIiBAMjQ1Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyNDEKLQkJCSAgICBsb2NhdGlvbiAgIAkoMjMzNCwgOTY2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0NgotCQkJCVBhcmVudF9WaWV3IAlAMjQ1Ci0JCQkJbG9jYXRpb24gICAJKDM3MzgsIDIyNTMpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrY2hpbGRyZW4iCi0JCQkJcGN0RGlzdCAgICAJMC43OTg1NjEKLQkJCQloZWlnaHQgICAgIAkxMTgKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzRjc4OTZBNzAxMkMiCi0JCQkgICAgY2xpZW50ICAgICAJQDI0MQotCQkJICAgIHN1cHBsaWVyICAgCUAyMzkKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNDM2NiwgMjM1OCkKLQkJCQkoMzg1NSwgMjM1OCkKLQkJCQkoMzg1NSwgMjA5NikpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNDM2NiwgMjM1OCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzg1NSwgMjA5NikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyNDcKLQkJCQlQYXJlbnRfVmlldyAJQDI0NQotCQkJCWxvY2F0aW9uICAgCSgzOTA5LCAyMTc0KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuOTAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIiBAMjQ4Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI3NjgsIDI5OTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNDgKLQkJCWxvY2F0aW9uICAgCSgyNjg2LCAyOTM5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmciKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIHdpZHRoICAgICAgCTE4MgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnRUeXBlIiBAMjQ5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4ODgsIDMwMDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNDkKLQkJCWxvY2F0aW9uICAgCSgxNzkwLCAyOTU1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAkyMTQKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3BlcmF0aW9uIiBAMjUwCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI4ODAsIDMyNjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTAKLQkJCWxvY2F0aW9uICAgCSgyNzA3LCAzMjExKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM0NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdPcGVyYXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0NCMDE0NSIKLQkJICAgIHdpZHRoICAgICAgCTM2NAotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkZhdWx0IiBAMjUxCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI2NzIsIDM4NDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTEKLQkJCWxvY2F0aW9uICAgCSgyNTkxLCAzNzg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0ZhdWx0IiBAMjUyCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDM3NzYsIDM0NDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTIKLQkJCWxvY2F0aW9uICAgCSgzNjQ4LCAzMzg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI1NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdGYXVsdCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBOUUwM0E2IgotCQkgICAgd2lkdGggICAgICAJMjc0Ci0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IiBAMjUzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwODgsIDMwMDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTMKLQkJCWxvY2F0aW9uICAgCSgxMDA3LCAyOTU1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkltcG9ydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0RjkwM0RFIgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAyNTQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoOTEyLCAyODAwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU0Ci0JCQlsb2NhdGlvbiAgIAkoODEyLCAyNzQ3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIwMAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkRlZmluaXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIHdpZHRoICAgICAgCTIxOAotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklucHV0IiBAMjU1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDIyNTYsIDM4NDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTUKLQkJCWxvY2F0aW9uICAgCSgyMTc1LCAzNzg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklucHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzg5RjAwNTkiCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0lucHV0IiBAMjU2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMxMDQsIDM0NDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTYKLQkJCWxvY2F0aW9uICAgCSgyOTc2LCAzMzg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI1NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdJbnB1dCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBODIwMkQ0IgotCQkgICAgd2lkdGggICAgICAJMjc0Ci0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3V0cHV0IiBAMjU3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI0NjQsIDM4NDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTcKLQkJCWxvY2F0aW9uICAgCSgyMzgzLCAzNzg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk91dHB1dCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QjYwMjMyIgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPdXRwdXQiIEAyNTgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzQ0MCwgMzQ0MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI1OAotCQkJbG9jYXRpb24gICAJKDMyOTUsIDMzODcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjkwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZ091dHB1dCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBOEYwMjhDIgotCQkgICAgd2lkdGggICAgICAJMzA4Ci0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIiBAMjU5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDIwMzIsIDMyNjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTkKLQkJCWxvY2F0aW9uICAgCSgxOTI2LCAzMjExKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIxMgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk9wZXJhdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgd2lkdGggICAgICAJMjMwCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIgQDI2MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjgwLCAzMjY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYwCi0JCQlsb2NhdGlvbiAgIAkoMTU5OSwgMzIxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQYXJ0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDI2MQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNTM2LCAzMDA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYxCi0JCQlsb2NhdGlvbiAgIAkoMTQzNywgMjk1NSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxOTgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJNZXNzYWdlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCSAgICB3aWR0aCAgICAgIAkyMTYKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlUmVmZXJlbmNlIiBAMjYyCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI0MzIsIDMyMzIpCi0JCSAgICBmb250ICAgICAgIAkob2JqZWN0IEZvbnQKLQkJCWl0YWxpY3MgICAgCVRSVUUpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNjIKLQkJCWxvY2F0aW9uICAgCSgyMjQwLCAzMTUwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM4NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk1lc3NhZ2VSZWZlcmVuY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MURCMDJEQyIKLQkJICAgIHdpZHRoICAgICAgCTQwMgotCQkgICAgaGVpZ2h0ICAgICAJMTg4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRUcmVlVmlldyAiIiBAMjYzCi0JCSAgICBsb2NhdGlvbiAgIAkoMjUwNSwgMzQxOCkKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBzdXBwbGllciAgIAlAMjYyCi0JCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCSgyNTA1LCAzNDE4KQotCQkJKDI1MDUsIDMzMjYpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjY0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcyMjgwMkU3IgotCQkgICAgY2xpZW50ICAgICAJQDI1NQotCQkgICAgc3VwcGxpZXIgICAJQDI2MgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMjM1LCAzNzc1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDIyMzUsIDM0MTgpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNjMpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI2NQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MjNEMDMxOSIKLQkJICAgIGNsaWVudCAgICAgCUAyNTEKLQkJICAgIHN1cHBsaWVyICAgCUAyNjIKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjY1MywgMzc3NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjUzLCAzNDE4KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjYzKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklFbGVtZW50RXh0ZW5zaWJsZSIgQDI2NgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjY0LCAzMzYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNjYKLQkJCWxvY2F0aW9uICAgCSgxMjEzLCAyNjEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJOTAzCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUVsZW1lbnRFeHRlbnNpYmxlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI2NgotCQkJbG9jYXRpb24gICAJKDEyMTMsIDIxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJOTAzCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDRCMDAwREEiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyNjYKLQkJCWxvY2F0aW9uICAgCSgxMjEzLCAzMTkpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk1MzQpCi0JCSAgICB3aWR0aCAgICAgIAk5MjEKLQkJICAgIGhlaWdodCAgICAgCTI3NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDI2NwotCQkgICAgbG9jYXRpb24gICAJKDE2NjIsIDI1OTUpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDIyNQotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMTY2MiwgMjU5NSkKLQkJCSgxNjYyLCAxNTIwKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI2OAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQjAxMDMxMSIKLQkJICAgIGNsaWVudCAgICAgCUAyMjQKLQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIzNSwgMjk0NCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjM1LCAyNTk1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjY3KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNjkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkEwRjAyRjAiCi0JCSAgICBjbGllbnQgICAgIAlAMjQ4Ci0JCSAgICBzdXBwbGllciAgIAlAMjI1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI3NTgsIDI5MjcpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjc1OCwgMjU5NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI2NykKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjcwCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDkzODYwMkM5IgotCQkgICAgY2xpZW50ICAgICAJQDI1MgotCQkgICAgc3VwcGxpZXIgICAJQDIyNQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzNzcxLCAzMzc1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM3NzEsIDI1OTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNjcpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3MQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODVCNTlCMDA3MiIKLQkJICAgIGNsaWVudCAgICAgCUAyNTYKLQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzA5OSwgMzM3NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMDk5LCAyNTk1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjY3KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNzIKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg1QjVBNDAyN0UiCi0JCSAgICBjbGllbnQgICAgIAlAMjU4Ci0JCSAgICBzdXBwbGllciAgIAlAMjI1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDM0MzUsIDMzNzUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzQzNSwgMjU5NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI2NykKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjczCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFOURFOTgwMDNDIgotCQkgICAgY2xpZW50ICAgICAJQDI1OQotCQkgICAgc3VwcGxpZXIgICAJQDIyNQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMDI3LCAzMTk5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDIwMjcsIDI1OTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNjcpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3NAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGREI4MDNENCIKLQkJICAgIGNsaWVudCAgICAgCUAyNTQKLQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoOTcxLCAyNzM1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk3MSwgMjU5NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI2NykKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjc1Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENjAwOTIwMkY3IgotCQkgICAgY2xpZW50ICAgICAJQDI1MAotCQkgICAgc3VwcGxpZXIgICAJQDIyNQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyODY3LCAzMTk5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI4NjcsIDI1OTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNjcpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3NgotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQTIwMDI1RSIKLQkJICAgIGNsaWVudCAgICAgCUAyMjIKLQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzkxMywgMjg2MykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzOTEzLCAyNTk1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjY3KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNzcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ2MDBDQjAwQUEiCi0JCSAgICBjbGllbnQgICAgIAlAMjIxCi0JCSAgICBzdXBwbGllciAgIAlAMjI1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQxMDUsIDMwMzkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNDEwNSwgMjU5NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI2NykKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjc4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQwNTUwMUM0IgotCQkgICAgY2xpZW50ICAgICAJQDI2MQotCQkgICAgc3VwcGxpZXIgICAJQDIyNQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDc3LCAyOTQzKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE0NzcsIDI1OTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNjcpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFRTU4MDM3QSIKLQkJICAgIGNsaWVudCAgICAgCUAyNTMKLQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyOCwgMjk0MykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDI4LCAyNTk1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjY3KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyODAKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg5N0UyMzAyMzciCi0JCSAgICBjbGllbnQgICAgIAlAMjYwCi0JCSAgICBzdXBwbGllciAgIAlAMjI1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE2NjgsIDMxOTkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTY2OCwgMjU5NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI2NykKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjgxCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5QjcwMTUwIgotCQkgICAgY2xpZW50ICAgICAJQDI0OQotCQkgICAgc3VwcGxpZXIgICAJQDIyNQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxODcyLCAyOTQzKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4NzIsIDI1OTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNjcpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI4MgotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzYyQTZBMDMwOCIKLQkJICAgIGNsaWVudCAgICAgCUAyNjIKLQkJICAgIHN1cHBsaWVyICAgCUAyMjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjQwOCwgMzEzOCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNDA4LCAyNTk1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjY3KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklBdHRyaWJ1dGVFeHRlbnNpYmxlIiBAMjgzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDk0NCwgNzY4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgzCi0JCQlsb2NhdGlvbiAgIAkoNDAxLCA2MDUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTA4NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklBdHRyaWJ1dGVFeHRlbnNpYmxlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI4MwotCQkJbG9jYXRpb24gICAJKDQwMSwgNTU1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxMDg2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDYzRjAyQUYiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyODMKLQkJCWxvY2F0aW9uICAgCSg0MDEsIDY2MykKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTYKLQkJCW1heF93aWR0aCAgCTEwODcpCi0JCSAgICB3aWR0aCAgICAgIAkxMTA0Ci0JCSAgICBoZWlnaHQgICAgIAk0NTAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI4NAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRTNDMDNENCIKLQkJICAgIGNsaWVudCAgICAgCUAyMjUKLQkJICAgIHN1cHBsaWVyICAgCUAyMzUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTc3NCwgMTM5MikKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzc0LCAxMjA2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjM2KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyODUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMDVDMjAyOTAiCi0JCSAgICBjbGllbnQgICAgIAlAMjI1Ci0JCSAgICBzdXBwbGllciAgIAlAMjY2Ci0JCSAgICBsaW5lX3N0eWxlIAkwKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyODYKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTY1N0YwNjAwN0QiCi0JCSAgICBjbGllbnQgICAgIAlAMjI1Ci0JCSAgICBzdXBwbGllciAgIAlAMjgzCi0JCSAgICBsaW5lX3N0eWxlIAkwKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyODcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzIzNTAwREQiCi0JCSAgICBjbGllbnQgICAgIAlAMjU3Ci0JCSAgICBzdXBwbGllciAgIAlAMjYyCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI0NDcsIDM3NzUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjQ0NywgMzQxOCkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI2MykpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmciCi0JICAgIHF1aWQgICAgICAgCSIzQUU4RUQ3MjAxQkQiCi0JICAgIHRpdGxlICAgICAgCSIyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmciCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklJbXBvcnQiIEAyODgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTcxMiwgMjI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjg4Ci0JCQlsb2NhdGlvbiAgIAkoMTQyMiwgMTc3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU4MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbXBvcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjg4Ci0JCQlsb2NhdGlvbiAgIAkoMTQyMiwgMTI3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1ODAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMjAyMDExOSIKLQkJICAgIHdpZHRoICAgICAgCTU5OAotCQkgICAgaGVpZ2h0ICAgICAJMjE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok5hbWVzcGFjZSIgQDI4OQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0MzIsIDExMzYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyODkKLQkJCWxvY2F0aW9uICAgCSgyMDIsIDEwNDEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDYxCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTmFtZXNwYWNlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JCSAgICB3aWR0aCAgICAgIAk0NzkKLQkJICAgIGhlaWdodCAgICAgCTIxNQotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFNjaGVtYSIgQDI5MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjMyLCAxMjE2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjkwCi0JCQlsb2NhdGlvbiAgIAkoMTI5NCwgMTE0MikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NzYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJYU0RTY2hlbWEiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjM3NEIxODI1MDBCQiIKLQkJICAgIHdpZHRoICAgICAgCTY5NAotCQkgICAgaGVpZ2h0ICAgICAJMTczCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAyOTEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDAwLCAzODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyOTEKLQkJCWxvY2F0aW9uICAgCSgxNjQsIDIzNikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NzIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICB3aWR0aCAgICAgIAk0OTAKLQkJICAgIGhlaWdodCAgICAgCTMyMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQxIiBAMjkyCi0JCSAgICBsb2NhdGlvbiAgIAkoMzA5LCA3ODYpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFQTNENTUwMDJEIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlTmFtZXNwYWNlcyIgQDI5MwotCQkJICAgIFBhcmVudF9WaWV3IAlAMjkyCi0JCQkgICAgbG9jYXRpb24gICAJKC05MSwgMjU4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI5NAotCQkJCVBhcmVudF9WaWV3IAlAMjkzCi0JCQkJbG9jYXRpb24gICAJKDQ2MSwgOTU2KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI4OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VOYW1lc3BhY2VzIgotCQkJCXBjdERpc3QgICAgCTAuNjk4ODQyCi0JCQkJaGVpZ2h0ICAgICAJMTUyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTNENTYwMzMyIgotCQkJICAgIGNsaWVudCAgICAgCUAyOTIKLQkJCSAgICBzdXBwbGllciAgIAlAMjg5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzA5LCA3ODYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDMwOSwgMTAyOSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyOTUKLQkJCQlQYXJlbnRfVmlldyAJQDI5MwotCQkJCWxvY2F0aW9uICAgCSgyNDgsIDk3MykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjc2ODcwNwotCQkJCWhlaWdodCAgICAgCTYyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTMKLQkJCQlsb2NhdGlvbiAgIAkoMjI4LCA5MTMpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC41MjUwOTcKLQkJCQloZWlnaHQgICAgIAk4MgotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDQyIiBAMjk3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyOTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTkxLCAyNTgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk4Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTcKLQkJCQlsb2NhdGlvbiAgIAkoMjY4LCA1OTIpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE5MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0Q1NjAzMjgiCi0JCQkgICAgY2xpZW50ICAgICAJQDI5MgotCQkJICAgIHN1cHBsaWVyICAgCUAyOTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzMDksIDc4NikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzA5LCA1NDQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk5Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTcKLQkJCQlsb2NhdGlvbiAgIAkoMjM5LCA1ODMpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NDQ5NjEKLQkJCQloZWlnaHQgICAgIAk3MQotCQkJCW9yaWVudGF0aW9uIAkwKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIgQDMwMAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDcyLCA3MjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMDAKLQkJCWxvY2F0aW9uICAgCSgxMjU1LCA1ODApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDM0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW1wb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiCi0JCSAgICB3aWR0aCAgICAgIAk0NTIKLQkJICAgIGhlaWdodCAgICAgCTMwNAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDU1IiBAMzAxCi0JCSAgICBsb2NhdGlvbiAgIAkoMTQ4NiwgMTAwMSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMURDQzAyRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVTY2hlbWEiIEAzMDIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMwMQotCQkJICAgIGxvY2F0aW9uICAgCSg1MTAsIC0xMDMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzAzCi0JCQkJUGFyZW50X1ZpZXcgCUAzMDIKLQkJCQlsb2NhdGlvbiAgIAkoMTczNywgMTAxOCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlU2NoZW1hIgotCQkJCXBjdERpc3QgICAgCTAuNTkyNTkzCi0JCQkJaGVpZ2h0ICAgICAJMTA1Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFEQ0UwMjcwIgotCQkJICAgIGNsaWVudCAgICAgCUAzMDEKLQkJCSAgICBzdXBwbGllciAgIAlAMjkwCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDE0ODYsIDEwMDEpCi0JCQkJKDE2MzIsIDEwMDEpCi0JCQkJKDE2MzIsIDExMzApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0ODYsIDEwMDEpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2MzIsIDExMzApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzA0Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMDIKLQkJCQlsb2NhdGlvbiAgIAkoMTU2MywgMTAxOCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjU5MjU5MwotCQkJCWhlaWdodCAgICAgCTcwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTYiIEAzMDUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMwMQotCQkJICAgIGxvY2F0aW9uICAgCSg1MTAsIC0xMDMpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFEQ0UwMjdBIgotCQkJICAgIGNsaWVudCAgICAgCUAzMDEKLQkJCSAgICBzdXBwbGllciAgIAlAMzAwCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ4NiwgMTAwMCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ4NiwgODcyKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNDMiIEAzMDYKLQkJICAgIGxvY2F0aW9uICAgCSgxMDg3LCA0MDMpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFQTNFM0EwMDJEIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0NCIgQDMwNwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzA2Ci0JCQkgICAgbG9jYXRpb24gICAJKDY4NywgLTEyNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMDgKLQkJCQlQYXJlbnRfVmlldyAJQDMwNwotCQkJCWxvY2F0aW9uICAgCSgxNDA2LCA0ODApCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTQ1MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0UzQzAxRjIiCi0JCQkgICAgY2xpZW50ICAgICAJQDMwNgotCQkJICAgIHN1cHBsaWVyICAgCUAzMDAKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTA4NywgNDAzKQotCQkJCSgxMzY0LCA0MDMpCi0JCQkJKDEzNjQsIDU2OCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA4NywgNDAzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMzY0LCA1NjgpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZURlZmluaXRpb24iIEAzMDkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMwNgotCQkJICAgIGxvY2F0aW9uICAgCSg2ODcsIC0xMjUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzEwCi0JCQkJUGFyZW50X1ZpZXcgCUAzMDkKLQkJCQlsb2NhdGlvbiAgIAkoODA1LCAzNjMpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjE2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZURlZmluaXRpb24iCi0JCQkJcGN0RGlzdCAgICAJMC42Mzc1MzIKLQkJCQloZWlnaHQgICAgIAk0MQotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRUEzRTNDMDFFOCIKLQkJCSAgICBjbGllbnQgICAgIAlAMzA2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDI5MQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEwODcsIDQwMykKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNjQ1LCA0MDMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzExCi0JCQkJUGFyZW50X1ZpZXcgCUAzMDkKLQkJCQlsb2NhdGlvbiAgIAkoNzI3LCA0NTYpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44MTQ5MTAKLQkJCQloZWlnaHQgICAgIAk1MwotCQkJCW9yaWVudGF0aW9uIAkwKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTMiIEAzMTIKLQkJICAgIGxvY2F0aW9uICAgCSg3MzcsIDgyNikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQzg2NERGRjAyRUMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDE0IiBAMzEzCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTY3MSwgMTA2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMxNAotCQkJCVBhcmVudF9WaWV3IAlAMzEzCi0JCQkJbG9jYXRpb24gICAJKDU1MiwgNjQ3KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk0NTAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M4NjRERkYwMkVFIgotCQkJICAgIGNsaWVudCAgICAgCUAzMTIKLQkJCSAgICBzdXBwbGllciAgIAlAMjkxCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDczNywgODI2KQotCQkJCSg1MTAsIDgyNikKLQkJCQkoNTEwLCA1NDQpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDczNywgODI2KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg1MTAsIDU0NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMTUKLQkJCQlQYXJlbnRfVmlldyAJQDMxMwotCQkJCWxvY2F0aW9uICAgCSg0NTcsIDU5NSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUltcG9ydHMiIEAzMTYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMxMgotCQkJICAgIGxvY2F0aW9uICAgCSgtNjcxLCAxMDYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzE3Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMTYKLQkJCQlsb2NhdGlvbiAgIAkoMTE0NCwgNzczKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE4MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VJbXBvcnRzIgotCQkJCXBjdERpc3QgICAgCTAuNzk5MTg5Ci0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQzg2NERGRjAyRUQiCi0JCQkgICAgY2xpZW50ICAgICAJQDMxMgotCQkJICAgIHN1cHBsaWVyICAgCUAzMDAKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3MzcsIDgyNikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTI0NiwgODI2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMxOAotCQkJCVBhcmVudF9WaWV3IAlAMzE2Ci0JCQkJbG9jYXRpb24gICAJKDExODAsIDg3OSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg3MjIxMQotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzE5Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMTYKLQkJCQlsb2NhdGlvbiAgIAkoMTE2MiwgOTMzKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE0NgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODM3NzI4Ci0JCQkJaGVpZ2h0ICAgICAJMTA3Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDMyMAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYyMDBEMDM0MCIKLQkJICAgIGNsaWVudCAgICAgCUAzMDAKLQkJICAgIHN1cHBsaWVyICAgCUAyODgKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTU1NSwgNTY4KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE1NTUsIDMzMykpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi4yIFR5cGVzIgotCSAgICBxdWlkICAgICAgIAkiM0I4NUFFNTkwMzdFIgotCSAgICB0aXRsZSAgICAgIAkiMi4yIFR5cGVzIgotCSAgICB6b29tICAgICAgIAk5MAotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTgxCi0JICAgIGl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RUeXBlRGVmaW5pdGlvbiIgQDMyMQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMTM2LCAxMjMyKQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzIxCi0JCQlsb2NhdGlvbiAgIAkoODk1LCAxMTU3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ4MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlhTRFR5cGVEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjY2RUNEMzAyQTkiCi0JCSAgICB3aWR0aCAgICAgIAk1MDAKLQkJICAgIGhlaWdodCAgICAgCTE3NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTREVsZW1lbnREZWNsYXJhdGlvbiIgQDMyMgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMTM2LCAxNjAwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzIyCi0JCQlsb2NhdGlvbiAgIAkoOTA2LCAxNTMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ2MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlhTREVsZW1lbnREZWNsYXJhdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I2NkVENTgwMjE0IgotCQkgICAgd2lkdGggICAgICAJNDc4Ci0JCSAgICBoZWlnaHQgICAgIAkxNjIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDMyMwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMjgwLCAxOTY4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzIzCi0JCQlsb2NhdGlvbiAgIAkoMTAyMiwgMTgyOCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1MTcKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJNZXNzYWdlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAzMjMKLQkJCWxvY2F0aW9uICAgCSgxMDIyLCAxODgzKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMwotCQkJbWF4X3dpZHRoICAJNDA5KQotCQkgICAgd2lkdGggICAgICAJNTM1Ci0JCSAgICBoZWlnaHQgICAgIAkzMDUKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIgQDMyNAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzNTIsIDExODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMjQKLQkJCWxvY2F0aW9uICAgCSgxMjgsIDEwNjcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDQ4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUGFydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlAMzI0Ci0JCQlsb2NhdGlvbiAgIAkoMTI4LCAxMTIyKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJNAotCQkJbWF4X3dpZHRoICAJNDg0KQotCQkgICAgd2lkdGggICAgICAJNDY2Ci0JCSAgICBoZWlnaHQgICAgIAkyNTgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1MSIgQDMyNQotCQkgICAgbG9jYXRpb24gICAJKDczNSwgMTE3MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMUJFOTAwQzQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgInR5cGVEZWZpbml0aW9uIiBAMzI2Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMjUKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTQzLCA2NzYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzI3Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMjYKLQkJCQlsb2NhdGlvbiAgIAkoNzc1LCAxMTMzKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI3NgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK3R5cGVEZWZpbml0aW9uIgotCQkJCXBjdERpc3QgICAgCTAuMjY5MDA2Ci0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMUJFOTAzMjciCi0JCQkgICAgY2xpZW50ICAgICAJQDMyNQotCQkJICAgIHN1cHBsaWVyICAgCUAzMjEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3MzUsIDExNzIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDg4NiwgMTE3MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMjgKLQkJCQlQYXJlbnRfVmlldyAJQDMyNgotCQkJCWxvY2F0aW9uICAgCSg4MzksIDEyMDcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC42ODg3MDUKLQkJCQloZWlnaHQgICAgIAkzNQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDUyIiBAMzI5Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMjUKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTQzLCA2NzYpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFCRTkwMzMxIgotCQkJICAgIGNsaWVudCAgICAgCUAzMjUKLQkJCSAgICBzdXBwbGllciAgIAlAMzI0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzM1LCAxMTcyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg1ODUsIDExNzIpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1MyIgQDMzMAotCQkgICAgbG9jYXRpb24gICAJKDUyNywgMTU5MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMUMxMjAzQjIiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVsZW1lbnREZWNsYXJhdGlvbiIgQDMzMQotCQkJICAgIFBhcmVudF9WaWV3IAlAMzMwCi0JCQkgICAgbG9jYXRpb24gICAJKC02NSwgMTA5NikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMzIKLQkJCQlQYXJlbnRfVmlldyAJQDMzMQotCQkJCWxvY2F0aW9uICAgCSg2NjYsIDE1NTQpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMzcyCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZWxlbWVudERlY2xhcmF0aW9uIgotCQkJCXBjdERpc3QgICAgCTAuMzc1Mzk0Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMUMxNDAwMUMiCi0JCQkgICAgY2xpZW50ICAgICAJQDMzMAotCQkJICAgIHN1cHBsaWVyICAgCUAzMjIKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg1MjcsIDE1OTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDg5NywgMTU5MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMzMKLQkJCQlQYXJlbnRfVmlldyAJQDMzMQotCQkJCWxvY2F0aW9uICAgCSg4MDcsIDE2NDUpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43NTU4NzcKLQkJCQloZWlnaHQgICAgIAk1MwotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDU0IiBAMzM0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMzAKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTY1LCAxMDk2KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEIxQzE0MDAyNiIKLQkJCSAgICBjbGllbnQgICAgIAlAMzMwCi0JCQkgICAgc3VwcGxpZXIgICAJQDMyNAotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSg1MjcsIDE1OTIpCi0JCQkJKDQzNywgMTU5MikKLQkJCQkoNDM3LCAxMzEzKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg1MjcsIDE1OTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDQzNywgMTMxMykpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDU3IiBAMzM1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMzIyLCAxOTExKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDNDY4MjkzMDNFNSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZU1lc3NhZ2UiIEAzMzYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMzNQotCQkJICAgIGxvY2F0aW9uICAgCSgtMTQsIDExOTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzM3Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMzYKLQkJCQlsb2NhdGlvbiAgIAkoODM4LCAxODcyKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTIxNgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VNZXNzYWdlIgotCQkJCXBjdERpc3QgICAgCTAuNzQ4NTYwCi0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQzQ2ODI5NjAxMEUiCi0JCQkgICAgY2xpZW50ICAgICAJQDMzNQotCQkJICAgIHN1cHBsaWVyICAgCUAzMjMKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzMjIsIDE5MTEpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEwMTMsIDE5MTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzM4Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMzYKLQkJCQlsb2NhdGlvbiAgIAkoOTQzLCAxOTY1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuOTAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1OCIgQDMzOQotCQkJICAgIFBhcmVudF9WaWV3IAlAMzM1Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xNCwgMTE5MSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQzQ2ODI5NjAxMTgiCi0JCQkgICAgY2xpZW50ICAgICAJQDMzNQotCQkJICAgIHN1cHBsaWVyICAgCUAzMjQKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMzIyLCAxOTExKQotCQkJCSgyMjksIDE5MTEpCi0JCQkJKDIyOSwgMTMxMykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzIyLCAxOTExKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMjksIDEzMTMpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VHlwZXMiIEAzNDAKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoODAwLCA2MDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDAKLQkJCWxvY2F0aW9uICAgCSg2MTUsIDUxMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNzEKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJUeXBlcyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkU5QTYwM0E4IgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlAMzQwCi0JCQlsb2NhdGlvbiAgIAkoNjE1LCA1NjcpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAkzMTIpCi0JCSAgICB3aWR0aCAgICAgIAkzODkKLQkJICAgIGhlaWdodCAgICAgCTIxNgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpEZWZpbml0aW9uIiBAMzQxCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE3NiwgMTYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzQxCi0JCQlsb2NhdGlvbiAgIAkoNzQsIDEwNykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyMDQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICB3aWR0aCAgICAgIAkyMjIKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDE1IiBAMzQyCi0JCSAgICBsb2NhdGlvbiAgIAkoMjM0LCA2MDQpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkVBMjcwMjlGIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlVHlwZXMiIEAzNDMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM0MgotCQkJICAgIGxvY2F0aW9uICAgCSgtMTUwLCAzOTYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQ0Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNDMKLQkJCQlsb2NhdGlvbiAgIAkoNDgwLCA2NDApCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjA3Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVR5cGVzIgotCQkJCXBjdERpc3QgICAgCTAuNjYxMDE3Ci0JCQkJaGVpZ2h0ICAgICAJMzYKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyOTAzNkEiCi0JCQkgICAgY2xpZW50ICAgICAJQDM0MgotCQkJICAgIHN1cHBsaWVyICAgCUAzNDAKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMzQsIDYwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNjA2LCA2MDQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQ1Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNDMKLQkJCQlsb2NhdGlvbiAgIAkoNTI2LCA1NjkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43ODM4ODMKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDE2IiBAMzQ2Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNDIKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTE1MCwgMzk2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM0NwotCQkJCVBhcmVudF9WaWV3IAlAMzQ2Ci0JCQkJbG9jYXRpb24gICAJKDEzMywgMzEzKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyOTAzNTYiCi0JCQkgICAgY2xpZW50ICAgICAJQDM0MgotCQkJICAgIHN1cHBsaWVyICAgCUAzNDEKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMjM0LCA2MDQpCi0JCQkJKDE3NCwgNjA0KQotCQkJCSgxNzQsIDIyNSkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjM0LCA2MDQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE3NCwgMjI1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM0OAotCQkJCVBhcmVudF9WaWV3IAlAMzQ2Ci0JCQkJbG9jYXRpb24gICAJKDIyOCwgMjcxKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODk3NzI5Ci0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJVHlwZXMiIEAzNDkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNjQwLCAyMjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDkKLQkJCWxvY2F0aW9uICAgCSg1MjUsIDIwMykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyMzAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJVHlwZXMiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzQ5Ci0JCQlsb2NhdGlvbiAgIAkoNTI1LCAxNTMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIzMAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NBRENCQjIwMDUwIgotCQkgICAgd2lkdGggICAgICAJMjQ4Ci0JCSAgICBoZWlnaHQgICAgIAkxNjYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAzNTAKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTcyOCwgODAwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzUwCi0JCQlsb2NhdGlvbiAgIAkoMTM1OSwgNzUzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTczOQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjBENzAzOUMiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAzNTAKLQkJCWxvY2F0aW9uICAgCSgxMzU5LCA4MDgpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkyCi0JCQltYXhfd2lkdGggIAk1NDApCi0JCSAgICB3aWR0aCAgICAgIAk3NTcKLQkJICAgIGhlaWdodCAgICAgCTExOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFNjaGVtYSIgQDM1MQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODU2LCAxMjE2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzUxCi0JCQlsb2NhdGlvbiAgIAkoMTUyOSwgMTEwMykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTUKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJYU0RTY2hlbWEiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjM3NEIxODI1MDBCQiIKLQkJICAgIHdpZHRoICAgICAgCTY3MwotCQkgICAgaGVpZ2h0ICAgICAJMjUwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNTkiIEAzNTIKLQkJICAgIGxvY2F0aW9uICAgCSgxODI2LCA5NzUpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NDMzYxNDUwMEYyIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ2MCIgQDM1MwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzUyCi0JCQkgICAgbG9jYXRpb24gICAJKDMwNiwgNDQ3KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDQzM2MTQ2MDIzRCIKLQkJCSAgICBjbGllbnQgICAgIAlAMzUyCi0JCQkgICAgc3VwcGxpZXIgICAJQDM1MAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE4MjYsIDk3NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgyNiwgODU5KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM1NAotCQkJCVBhcmVudF9WaWV3IAlAMzUzCi0JCQkJbG9jYXRpb24gICAJKDE3NzQsIDkwMCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY1NjQ4OQotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAic2NoZW1hIiBAMzU1Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoMzA2LCA0NDcpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzU2Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNTUKLQkJCQlsb2NhdGlvbiAgIAkoMjAwNiwgMTAzMykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitzY2hlbWEiCi0JCQkJcGN0RGlzdCAgICAJMC41MDc1NzYKLQkJCQloZWlnaHQgICAgIAkxODAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjE0NjAyM0UiCi0JCQkgICAgY2xpZW50ICAgICAJQDM1MgotCQkJICAgIHN1cHBsaWVyICAgCUAzNTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxODI2LCA5NzUpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4MjYsIDEwOTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzU3Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNTUKLQkJCQlsb2NhdGlvbiAgIAkoMTc4OCwgMTA1MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY1MTUxNQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM1OAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDQURDRDNCMDM4MCIKLQkJICAgIGNsaWVudCAgICAgCUAzNDAKLQkJICAgIHN1cHBsaWVyICAgCUAzNDkKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzA1LCA1MDApCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNzA1LCAzMDcpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IiBAMzU5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwNTYsIDIyNCkKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM1OQotCQkJbG9jYXRpb24gICAJKDgxNSwgMTMwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ4MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkV4dGVuc2libGVFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiCi0JCSAgICB3aWR0aCAgICAgIAk1MDAKLQkJICAgIGhlaWdodCAgICAgCTIxMgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzYwCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkVCMDEwMzExIgotCQkgICAgY2xpZW50ICAgICAJQDM0MAotCQkgICAgc3VwcGxpZXIgICAJQDM1OQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg4NTQsIDUwMCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4NTQsIDMzMCkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAzNjEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTgyNCwgNDY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzYxCi0JCQlsb2NhdGlvbiAgIAkoMTQ5MCwgMzY4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY2OQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAzNjEKLQkJCWxvY2F0aW9uICAgCSgxNDkwLCA0MjMpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk0NjUpCi0JCSAgICB3aWR0aCAgICAgIAk2ODcKLQkJICAgIGhlaWdodCAgICAgCTIxNgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDI1IiBAMzYyCi0JCSAgICBsb2NhdGlvbiAgIAkoMTIwNiwgNDkzKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDEzMDA3OSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjYiIEAzNjMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM2MgotCQkJICAgIGxvY2F0aW9uICAgCSgtNTg2LCAyMzcpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzY0Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNjMKLQkJCQlsb2NhdGlvbiAgIAkoMTEzNiwgMzg2KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk0NTAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTQwMTlFIgotCQkJICAgIGNsaWVudCAgICAgCUAzNjIKLQkJCSAgICBzdXBwbGllciAgIAlAMzU5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDEyMDYsIDQ5MykKLQkJCQkoMTA5NCwgNDkzKQotCQkJCSgxMDk0LCAzMzApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyMDYsIDQ5MykKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTA5NCwgMzMwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM2NQotCQkJCVBhcmVudF9WaWV3IAlAMzYzCi0JCQkJbG9jYXRpb24gICAJKDEwNDIsIDM3NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgyODMyNgotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIgQDM2NgotCQkJICAgIFBhcmVudF9WaWV3IAlAMzYyCi0JCQkgICAgbG9jYXRpb24gICAJKC01ODYsIDIzNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNjcKLQkJCQlQYXJlbnRfVmlldyAJQDM2NgotCQkJCWxvY2F0aW9uICAgCSgxMTk2LCA0NTQpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNDQ0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQlwY3REaXN0ICAgIAktMC4wMzk3MTEKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDE0MDE5RCIKLQkJCSAgICBjbGllbnQgICAgIAlAMzYyCi0JCQkgICAgc3VwcGxpZXIgICAJQDM2MQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyMDYsIDQ5MykKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ4MSwgNDkzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM2OAotCQkJCVBhcmVudF9WaWV3IAlAMzY2Ci0JCQkJbG9jYXRpb24gICAJKDE0MTUsIDU0NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjc2NDk1NwotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzY5Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNjYKLQkJCQlsb2NhdGlvbiAgIAkoMTM5NiwgMzkyKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE0NgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuNjk0OTE1Ci0JCQkJaGVpZ2h0ICAgICAJMTAyCi0JCQkJb3JpZW50YXRpb24gCTApKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM3MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDQzM2MjdGMDBCNyIKLQkJICAgIGNsaWVudCAgICAgCUAzNTAKLQkJICAgIHN1cHBsaWVyICAgCUAzNjEKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTgxMiwgNzQxKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4MTIsIDU3MikpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi4zIE1lc3NhZ2VzIgotCSAgICBxdWlkICAgICAgIAkiM0JDRTg1M0QwMkM4IgotCSAgICB0aXRsZSAgICAgIAkiMi4zIE1lc3NhZ2VzIgotCSAgICB6b29tICAgICAgIAk4NQotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJTWVzc2FnZSIgQDM3MQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDQ4LCAyMjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNzEKLQkJCWxvY2F0aW9uICAgCSgyNjcsIDEyMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJTWVzc2FnZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNzEKLQkJCWxvY2F0aW9uICAgCSgyNjcsIDcyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOEFGMDA0RiIKLQkJICAgIHdpZHRoICAgICAgCTM4MAotCQkgICAgaGVpZ2h0ICAgICAJMzI4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklQYXJ0IiBAMzcyCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMzI4LCAyMjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNzIKLQkJCWxvY2F0aW9uICAgCSgxMDI5LCAxMjQpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTk5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSVBhcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzcyCi0JCQlsb2NhdGlvbiAgIAkoMTAyOSwgNzQpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU5OQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE5M0YwMUJFIgotCQkgICAgd2lkdGggICAgICAJNjE3Ci0JCSAgICBoZWlnaHQgICAgIAkzMjQKLQkJICAgIGFubm90YXRpb24gCTgpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIgQDM3MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMzEyLCA4MTYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNzMKLQkJCWxvY2F0aW9uICAgCSgxMDc1LCA2OTApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDc0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUGFydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkgICAgd2lkdGggICAgICAJNDkyCi0JCSAgICBoZWlnaHQgICAgIAkyNzYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM3NAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOTZEMDJGMSIKLQkJICAgIGNsaWVudCAgICAgCUAzNzMKLQkJICAgIHN1cHBsaWVyICAgCUAzNzIKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTMwNCwgNjc4KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEzMDQsIDM4NikpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDM3NQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0NDgsIDY1NikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM3NQotCQkJbG9jYXRpb24gICAJKDI0MSwgNTA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk1lc3NhZ2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIHdpZHRoICAgICAgCTQzMgotCQkgICAgaGVpZ2h0ICAgICAJMzIyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNzYKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QThEMTAyQkEiCi0JCSAgICBjbGllbnQgICAgIAlAMzc1Ci0JCSAgICBzdXBwbGllciAgIAlAMzcxCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQ0NSwgNDk1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDQ0NSwgMzg4KSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDEiIEAzNzcKLQkJICAgIGxvY2F0aW9uICAgCSg2ODgsIDk1MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0VCRTAwRTIiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQYXJ0cyIgQDM3OAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzc3Ci0JCQkgICAgbG9jYXRpb24gICAJKDE3NiwgMzI4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3OQotCQkJCVBhcmVudF9WaWV3IAlAMzc4Ci0JCQkJbG9jYXRpb24gICAJKDk1MiwgODk3KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE0NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VQYXJ0cyIKLQkJCQlwY3REaXN0ICAgIAkwLjY5NzQ1MgotCQkJCWhlaWdodCAgICAgCTU2Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUNFQkYwMDYxIgotCQkJICAgIGNsaWVudCAgICAgCUAzNzcKLQkJCSAgICBzdXBwbGllciAgIAlAMzczCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNjg4LCA5NTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEwNjYsIDk1MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzODAKLQkJCQlQYXJlbnRfVmlldyAJQDM3OAotCQkJCWxvY2F0aW9uICAgCSg5ODcsIDEwMDUpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC43ODk4MDkKLQkJCQloZWlnaHQgICAgIAk1MwotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM4MQotCQkJCVBhcmVudF9WaWV3IAlAMzc4Ci0JCQkJbG9jYXRpb24gICAJKDk2NywgMTA2MSkKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjc0MjAzOAotCQkJCWhlaWdodCAgICAgCTEwOQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDIiIEAzODIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM3NwotCQkJICAgIGxvY2F0aW9uICAgCSgxNzYsIDMyOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzODMKLQkJCQlQYXJlbnRfVmlldyAJQDM4MgotCQkJCWxvY2F0aW9uICAgCSg0MDQsIDg5MykKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUNFQkYwMDU3IgotCQkJICAgIGNsaWVudCAgICAgCUAzNzcKLQkJCSAgICBzdXBwbGllciAgIAlAMzc1Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDY4OCwgOTUyKQotCQkJCSg0NDUsIDk1MikKLQkJCQkoNDQ1LCA4MTcpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDY4OCwgOTUyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0NDUsIDgxNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzODQKLQkJCQlQYXJlbnRfVmlldyAJQDM4MgotCQkJCWxvY2F0aW9uICAgCSgzOTMsIDkxMikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc0NzYwNAotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApKSkpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiSldTREwiCi0JICAgIHF1aWQgICAgICAgCSI0OTBFMjE1RTAxMDkiCi0JICAgIHRpdGxlICAgICAgCSJKV1NETCIKLQkgICAgem9vbSAgICAgICAJODAKLQkgICAgbWF4X2hlaWdodCAJMjgzNTAKLQkgICAgbWF4X3dpZHRoICAJMjE2MDAKLQkgICAgb3JpZ2luX3ggICAJMTU3MAotCSAgICBvcmlnaW5feSAgIAkxODYyCi0JICAgIGl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUVsZW1lbnRFeHRlbnNpYmxlIiBAMzg1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzNDQsIDE5MDQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzODUKLQkJCWxvY2F0aW9uICAgCSg3NDgsIDE3OTUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTE5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklFbGVtZW50RXh0ZW5zaWJsZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzODUKLQkJCWxvY2F0aW9uICAgCSg3NDgsIDE3NDUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTExOTIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNEIwMDBEQSIKLQkJICAgIGNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQlQYXJlbnRfVmlldyAJQDM4NQotCQkJbG9jYXRpb24gICAJKDc0OCwgMTg1NikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTQKLQkJCW1heF93aWR0aCAgCTEyMDApCi0JCSAgICB3aWR0aCAgICAgIAkxMjEwCi0JCSAgICBoZWlnaHQgICAgIAkzNDIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUF0dHJpYnV0ZUV4dGVuc2libGUiIEAzODYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjI0MCwgNTI4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzg2Ci0JCQlsb2NhdGlvbiAgIAkoMTcwMCwgMzY5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTEwODAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQXR0cmlidXRlRXh0ZW5zaWJsZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzODYKLQkJCWxvY2F0aW9uICAgCSgxNzAwLCAzMTkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTEwODAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUwNjNGMDJBRiIKLQkJICAgIHdpZHRoICAgICAgCTEwOTgKLQkJICAgIGhlaWdodCAgICAgCTQ0MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJSW5wdXQiIEAzODcKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjA2NCwgMTM0NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM4NwotCQkJbG9jYXRpb24gICAJKDE3NTcsIDEyMzUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjE0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUlucHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM4NwotCQkJbG9jYXRpb24gICAJKDE3NTcsIDExODUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE3RUUwMDE1IgotCQkgICAgd2lkdGggICAgICAJNjMyCi0JCSAgICBoZWlnaHQgICAgIAkzNDIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU91dHB1dCIgQDM4OAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNzY4LCAxMzQ0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzg4Ci0JCQlsb2NhdGlvbiAgIAkoMjQ0NCwgMTIzNSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NDgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3V0cHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM4OAotCQkJbG9jYXRpb24gICAJKDI0NDQsIDExODUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY0OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE4MjkwMjdEIgotCQkgICAgd2lkdGggICAgICAJNjY2Ci0JCSAgICBoZWlnaHQgICAgIAkzNDIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUZhdWx0IiBAMzg5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDM0NzIsIDEzNDQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzODkKLQkJCWxvY2F0aW9uICAgCSgzMTYzLCAxMjM1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYxOAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklGYXVsdCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzODkKLQkJCWxvY2F0aW9uICAgCSgzMTYzLCAxMTg1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MTgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODYxMDMxRCIKLQkJICAgIHdpZHRoICAgICAgCTYzNgotCQkgICAgaGVpZ2h0ICAgICAJMzQyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklQb3J0VHlwZSIgQDM5MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMjY0LCAxMzkyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzkwCi0JCQlsb2NhdGlvbiAgIAkoOTIwLCAxMjU4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY4OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklQb3J0VHlwZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzOTAKLQkJCWxvY2F0aW9uICAgCSg5MjAsIDEyMDgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY4OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE1QkUwMzMxIgotCQkgICAgd2lkdGggICAgICAJNzA2Ci0JCSAgICBoZWlnaHQgICAgIAkzOTIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAzOTEKLQkJICAgIGxvY2F0aW9uICAgCSgyMjQwLCA4NjQpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDM4NgotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMjI0MCwgODY0KQotCQkJKDIyNDAsIDc0OSkpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOTIKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjE5RjAxODYiCi0JCSAgICBjbGllbnQgICAgIAlAMzkwCi0JCSAgICBzdXBwbGllciAgIAlAMzg2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyNjQsIDExOTYpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTI2NCwgODY0KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMzkxKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOTMKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjIzNTAyQUYiCi0JCSAgICBjbGllbnQgICAgIAlAMzg3Ci0JCSAgICBzdXBwbGllciAgIAlAMzg2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIwNjQsIDExNzMpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjA2NCwgODY0KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMzkxKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOTQKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjIzOTAxNTciCi0JCSAgICBjbGllbnQgICAgIAlAMzg4Ci0JCSAgICBzdXBwbGllciAgIAlAMzg2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI3NjgsIDExNzMpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjc2OCwgODY0KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMzkxKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOTUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjI0MTAwOEMiCi0JCSAgICBjbGllbnQgICAgIAlAMzg5Ci0JCSAgICBzdXBwbGllciAgIAlAMzg2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMyMzEsIDExNzMpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzIzMSwgODY0KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMzkxKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklJbXBvcnQiIEAzOTYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNTEyLCAxMzEyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzk2Ci0JCQlsb2NhdGlvbiAgIAkoMTkzLCAxMjUzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYzOAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbXBvcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzk2Ci0JCQlsb2NhdGlvbiAgIAkoMTkzLCAxMjAzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MzgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMjAyMDExOSIKLQkJICAgIHdpZHRoICAgICAgCTY1NgotCQkgICAgaGVpZ2h0ICAgICAJMjQyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOTcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjI0RTAyQ0UiCi0JCSAgICBjbGllbnQgICAgIAlAMzk2Ci0JCSAgICBzdXBwbGllciAgIAlAMzg2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDUxMiwgMTE5MSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg1MTIsIDg2NCkKLQkJICAgIGRyYXdTdXBwbGllciAJQDM5MSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRGVmaW5pdGlvbiIgQDM5OAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzNTIsIDI1NDQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzOTgKLQkJCWxvY2F0aW9uICAgCSg2LCAyNDg1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklEZWZpbml0aW9uIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM5OAotCQkJbG9jYXRpb24gICAJKDYsIDI0MzUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIxRDkwMTQyIgotCQkgICAgd2lkdGggICAgICAJNzEwCi0JCSAgICBoZWlnaHQgICAgIAkyNDIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU9wZXJhdGlvbiIgQDM5OQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxMjE2LCAyNzUyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzk5Ci0JCQlsb2NhdGlvbiAgIAkoODY1LCAyNDY4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTcwMgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklPcGVyYXRpb24iKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzk5Ci0JCQlsb2NhdGlvbiAgIAkoODY1LCAyNDE4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBNzc2MDBEMSIKLQkJICAgIGNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQlQYXJlbnRfVmlldyAJQDM5OQotCQkJbG9jYXRpb24gICAJKDg2NSwgMjUyOSkKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTExCi0JCQltYXhfd2lkdGggIAk3MDkpCi0JCSAgICB3aWR0aCAgICAgIAk3MjAKLQkJICAgIGhlaWdodCAgICAgCTY5MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJTWVzc2FnZSIgQDQwMAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMDMyLCAyNjQwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDAwCi0JCQlsb2NhdGlvbiAgIAkoMTY4NiwgMjQ4MSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2OTIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJTWVzc2FnZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDAKLQkJCWxvY2F0aW9uICAgCSgxNjg2LCAyNDMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2OTIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOEFGMDA0RiIKLQkJICAgIGNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQlQYXJlbnRfVmlldyAJQDQwMAotCQkJbG9jYXRpb24gICAJKDE2ODYsIDI1NDIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAk2Ci0JCQltYXhfd2lkdGggIAk3MDApCi0JCSAgICB3aWR0aCAgICAgIAk3MTAKLQkJICAgIGhlaWdodCAgICAgCTQ0MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUGFydCIgQDQwMQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0MTc2LCAxMjk2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDAxCi0JCQlsb2NhdGlvbiAgIAkoMzg3NSwgMTIzNykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJUGFydCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDEKLQkJCWxvY2F0aW9uICAgCSgzODc1LCAxMTg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOTNGMDFCRSIKLQkJICAgIHdpZHRoICAgICAgCTYyMAotCQkgICAgaGVpZ2h0ICAgICAJMjQyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0MDIKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjM2NzAyNDIiCi0JCSAgICBjbGllbnQgICAgIAlANDAxCi0JCSAgICBzdXBwbGllciAgIAlAMzg2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQxNzUsIDExNzUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNDE3NSwgODY0KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMzkxKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklTZXJ2aWNlIiBANDAzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI4NjQsIDI2MjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDMKLQkJCWxvY2F0aW9uICAgCSgyNTI4LCAyNDg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY3MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklTZXJ2aWNlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQwMwotCQkJbG9jYXRpb24gICAJKDI1MjgsIDI0MzcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY3MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFCNDkwMjg3IgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlANDAzCi0JCQlsb2NhdGlvbiAgIAkoMjUyOCwgMjU0OCkKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTUKLQkJCW1heF93aWR0aCAgCTY2NSkKLQkJICAgIHdpZHRoICAgICAgCTY5MAotCQkgICAgaGVpZ2h0ICAgICAJMzk4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklQb3J0IiBANDA0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDczNiwgMzM2MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQwNAotCQkJbG9jYXRpb24gICAJKDQzMiwgMzI0OCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MDgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJUG9ydCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDQKLQkJCWxvY2F0aW9uICAgCSg0MzIsIDMxOTgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYwOAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFCODAwMzI2IgotCQkgICAgd2lkdGggICAgICAJNjI2Ci0JCSAgICBoZWlnaHQgICAgIAkzNDgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmciIEA0MDUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTY0OCwgMzU2OCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQwNQotCQkJbG9jYXRpb24gICAJKDEzMDksIDMzODApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjc4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUJpbmRpbmciKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDA1Ci0JCQlsb2NhdGlvbiAgIAkoMTMwOSwgMzMzMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjc4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUJDNjAyMTkiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MDUKLQkJCWxvY2F0aW9uICAgCSgxMzA5LCAzNDQxKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJNwotCQkJbWF4X3dpZHRoICAJNjY4KQotCQkgICAgd2lkdGggICAgICAJNjk2Ci0JCSAgICBoZWlnaHQgICAgIAk1MDAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdPcGVyYXRpb24iIEA0MDYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjQ4MCwgNDI0MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQwNgotCQkJbG9jYXRpb24gICAJKDIwNDksIDM5NTApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJODYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUJpbmRpbmdPcGVyYXRpb24iKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDA2Ci0JCQlsb2NhdGlvbiAgIAkoMjA0OSwgMzkwMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJODYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QURDMDAwNzIiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MDYKLQkJCWxvY2F0aW9uICAgCSgyMDQ5LCA0MDExKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMTEKLQkJCW1heF93aWR0aCAgCTg0MykKLQkJICAgIHdpZHRoICAgICAgCTg4MAotCQkgICAgaGVpZ2h0ICAgICAJNzA0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nSW5wdXQiIEA0MDcKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzI5NiwgMzA3MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQwNwotCQkJbG9jYXRpb24gICAJKDI5MTAsIDMwMTEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUJpbmRpbmdJbnB1dCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDcKLQkJCWxvY2F0aW9uICAgCSgyOTEwLCAyOTYxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3NzIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREVCMDEwMCIKLQkJICAgIGNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQlQYXJlbnRfVmlldyAJQDQwNwotCQkJbG9jYXRpb24gICAJKDI5MTAsIDMwNzIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkyCi0JCQltYXhfd2lkdGggIAk3NTYpCi0JCSAgICB3aWR0aCAgICAgIAk3OTAKLQkJICAgIGhlaWdodCAgICAgCTI0NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ091dHB1dCIgQDQwOAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzNzYwLCAzNDI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDA4Ci0JCQlsb2NhdGlvbiAgIAkoMzM1OCwgMzM2MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk4MDQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZ091dHB1dCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDgKLQkJCWxvY2F0aW9uICAgCSgzMzU4LCAzMzEzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk4MDQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRTIxMDExMSIKLQkJICAgIGNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQlQYXJlbnRfVmlldyAJQDQwOAotCQkJbG9jYXRpb24gICAJKDMzNTgsIDM0MjQpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkyCi0JCQltYXhfd2lkdGggIAk3OTApCi0JCSAgICB3aWR0aCAgICAgIAk4MjIKLQkJICAgIGhlaWdodCAgICAgCTI0NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ0ZhdWx0IiBANDA5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQ0MDAsIDM4MDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MDkKLQkJCWxvY2F0aW9uICAgCSg0MDE0LCAzNzQ3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTc3MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nRmF1bHQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDA5Ci0JCQlsb2NhdGlvbiAgIAkoNDAxNCwgMzY5NykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU0RjAwQkQiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MDkKLQkJCWxvY2F0aW9uICAgCSg0MDE0LCAzODA4KQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMgotCQkJbWF4X3dpZHRoICAJNzU5KQotCQkgICAgd2lkdGggICAgICAJNzkwCi0JCSAgICBoZWlnaHQgICAgIAkyNDYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEA0MTAKLQkJICAgIGxvY2F0aW9uICAgCSgxMzE4LCAyMTY1KQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHN1cHBsaWVyICAgCUAzODUKLQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJKDEzMTgsIDIxNjUpCi0JCQkoMTMxOCwgMjA3NSkpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0MTEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjNENTAyOUYiCi0JCSAgICBjbGllbnQgICAgIAlAMzk5Ci0JCSAgICBzdXBwbGllciAgIAlAMzg1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyNjgsIDI0MDYpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTI2OCwgMjE2NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDQxMCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDEyCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTIzREEwMzBEIgotCQkgICAgY2xpZW50ICAgICAJQDQwMAotCQkgICAgc3VwcGxpZXIgICAJQDM4NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMDMxLCAyNDE5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDIwMzEsIDIxNjUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUA0MTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQxMwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUyM0QyMDI4MCIKLQkJICAgIGNsaWVudCAgICAgCUAzOTgKLQkJICAgIHN1cHBsaWVyICAgCUAzODUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzUyLCAyNDIzKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM1MiwgMjE2NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDQxMCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDE0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTIzRTUwMkJGIgotCQkgICAgY2xpZW50ICAgICAJQDQwMwotCQkgICAgc3VwcGxpZXIgICAJQDM4NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyODYyLCAyNDI1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI4NjIsIDIxNjUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUA0MTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQxNQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUyM0VBMDExOSIKLQkJICAgIGNsaWVudCAgICAgCUA0MDQKLQkJICAgIHN1cHBsaWVyICAgCUAzODUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzM4LCAzMTg2KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDczOCwgMjE2NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDQxMCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDE2Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTIzRUUwMEJCIgotCQkgICAgY2xpZW50ICAgICAJQDQwNQotCQkgICAgc3VwcGxpZXIgICAJQDM4NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNjQwLCAzMzE4KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2NDAsIDIxNjUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUA0MTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQxNwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUyM0YzMDE3NyIKLQkJICAgIGNsaWVudCAgICAgCUA0MDYKLQkJICAgIHN1cHBsaWVyICAgCUAzODUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjQ4NCwgMzg4OCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNDg0LCAyMTY1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlANDEwKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0MTgKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFMjNGNzAyMzIiCi0JCSAgICBjbGllbnQgICAgIAlANDA3Ci0JCSAgICBzdXBwbGllciAgIAlAMzg1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMyOTYsIDI5NDkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzI5NiwgMjE2NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDQxMCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDE5Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiNDkwRTIzRkIwMENCIgotCQkgICAgY2xpZW50ICAgICAJQDQwOAotCQkgICAgc3VwcGxpZXIgICAJQDM4NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzNzQ5LCAzMzAxKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM3NDksIDIxNjUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUA0MTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQyMAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEUyNDA1MDE2NyIKLQkJICAgIGNsaWVudCAgICAgCUA0MDkKLQkJICAgIHN1cHBsaWVyICAgCUAzODUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNDM4NiwgMzY4NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0Mzg2LCAyMTY1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlANDEwKSkpCi0JKG9iamVjdCBDbGFzc0RpYWdyYW0gIlNjaGVtYSIKLQkgICAgcXVpZCAgICAgICAJIjQ5MEU2RkZCMDJFRSIKLQkgICAgdGl0bGUgICAgICAJIlNjaGVtYSIKLQkgICAgem9vbSAgICAgICAJMTAwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IiBANDIxCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDY1NiwgMTI4MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQyMQotCQkJbG9jYXRpb24gICAJKDMzOSwgOTc0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYzNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjBENzAzOUMiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MjEKLQkJCWxvY2F0aW9uICAgCSgzMzksIDEwMzQpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkyCi0JCQltYXhfd2lkdGggIAk1NDApCi0JCSAgICB3aWR0aCAgICAgIAk2NTIKLQkJICAgIGhlaWdodCAgICAgCTYzNgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJU2NoZW1hIiBANDIyCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEyOTYsIDQ5NikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQyMgotCQkJbG9jYXRpb24gICAJKDc3NSwgNDM3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTEwNDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJU2NoZW1hIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQyMgotCQkJbG9jYXRpb24gICAJKDc3NSwgMzg3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxMDQyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFNzFDNjAwNkQiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MjIKLQkJCWxvY2F0aW9uICAgCSg3NzUsIDQ5NykKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTIKLQkJCW1heF93aWR0aCAgCTEwNTApCi0JCSAgICB3aWR0aCAgICAgIAkxMDYwCi0JCSAgICBoZWlnaHQgICAgIAkyNDIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQyMwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjQ5NjU2ODlEMDEyOCIKLQkJICAgIGNsaWVudCAgICAgCUA0MjEKLQkJICAgIHN1cHBsaWVyICAgCUA0MjIKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEA0MjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNjU2LCAyMDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MjQKLQkJCWxvY2F0aW9uICAgCSg0MjcsIDEwMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NTgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJFeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlANDI0Ci0JCQlsb2NhdGlvbiAgIAkoNDI3LCAxNjIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk0NjUpCi0JCSAgICB3aWR0aCAgICAgIAk0NzYKLQkJICAgIGhlaWdodCAgICAgCTIzNgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDI1Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NDMzYyN0YwMEI3IgotCQkgICAgY2xpZW50ICAgICAJQDQyMQotCQkgICAgc3VwcGxpZXIgICAJQDQyNAotCQkgICAgbGluZV9zdHlsZSAJMCkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICJKV1NETCIKLQkgICAgcXVpZCAgICAgICAJIjQ5MEU3MUYxMDFENCIKLQkgICAgdGl0bGUgICAgICAJIkpXU0RMIgotCSAgICB6b29tICAgICAgIAkxMDAKLQkgICAgbWF4X2hlaWdodCAJMjgzNTAKLQkgICAgbWF4X3dpZHRoICAJMjE2MDAKLQkgICAgb3JpZ2luX3ggICAJMAotCSAgICBvcmlnaW5feSAgIAkwCi0JICAgIGl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVNjaGVtYSIgQDQyNgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg5NjAsIDgwMCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQyNgotCQkJbG9jYXRpb24gICAJKDQzOSwgNzQxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTEwNDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJU2NoZW1hIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQyNgotCQkJbG9jYXRpb24gICAJKDQzOSwgNjkxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxMDQyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSI0OTBFNzFDNjAwNkQiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MjYKLQkJCWxvY2F0aW9uICAgCSg0MzksIDgwMSkKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTIKLQkJCW1heF93aWR0aCAgCTEwNTApCi0JCSAgICB3aWR0aCAgICAgIAkxMDYwCi0JCSAgICBoZWlnaHQgICAgIAkyNDIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUV4dGVuc2liaWxpdHlFbGVtZW50IiBANDI3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDk2MCwgMjI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDI3Ci0JCQlsb2NhdGlvbiAgIAkoNDA2LCAxNDIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTEwOAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklFeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MjcKLQkJCWxvY2F0aW9uICAgCSg0MDYsIDkyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxMTA4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QjEyNDAyQUIiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUA0MjcKLQkJCWxvY2F0aW9uICAgCSg0MDYsIDIwMikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTIKLQkJCW1heF93aWR0aCAgCTExMTUpCi0JCSAgICB3aWR0aCAgICAgIAkxMTI2Ci0JCSAgICBoZWlnaHQgICAgIAkyODgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQyOAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjQ5MEU3NzdGMDMyQyIKLQkJICAgIGNsaWVudCAgICAgCUA0MjYKLQkJICAgIHN1cHBsaWVyICAgCUA0MjcKLQkJICAgIGxpbmVfc3R5bGUgCTApKSkpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyODM3NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lID0gV1NETCBNb2RlbAotcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKLQoteHBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllcyA9IFdTREwgRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZhY3RvcmllcwoteHBQb3J0QW5kQmluZGluZ0NvbnRlbnRHZW5lcmF0b3JzID0gUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMKLXhwV1NETENvbnRlbnRUeXBlID0gV1NETCBDb250ZW50IFR5cGUKLQotX0VSUk9SX0lOVkFMSURfV1NETCA9IFRoZSBpbnB1dCBzb3VyY2UgaXMgbm90IGEgdmFsaWQgV1NETCBkb2N1bWVudC4KLV9VSV9JT0Vycm9yX21lc3NhZ2UgPSBJTzogezB9Ci1fVUlfUGFyc2VyRXJyb3JfbWVzc2FnZSA9IERPTTogezB9Ci0KLV9VSV9SZXNvdXJjZUxvYWRfcHJvZ3Jlc3MgPSBMb2FkaW5nIFdTREwgZG9jdW1lbnRzIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjczZGU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24tcG9pbnQKLQkJaWQ9ImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIgotCQluYW1lPSIleHBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllcyIgCi0JCXNjaGVtYT0ic2NoZW1hL2V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzLmV4c2QiLz4KLQk8ZXh0ZW5zaW9uLXBvaW50Ci0JCWlkPSJjb250ZW50R2VuZXJhdG9ycyIKLQkJbmFtZT0iJXhwUG9ydEFuZEJpbmRpbmdDb250ZW50R2VuZXJhdG9ycyIgCi0JCXNjaGVtYT0ic2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JzLmV4c2QiLz4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSIKLSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1dTREwuZ2VubW9kZWwiCi0gICAgICAgIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvV1NETCI+Ci0JCTwvcGFja2FnZT4KLQk8L2V4dGVuc2lvbj4KLQotCTwhLS0gCi0JCVRoaXMgZXh0ZW5zaW9uIGlzIGR1cGxpY2F0ZWQgaGVyZSB0byBwcm92aWRlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotCQlUaGUgbmFtZXNwYWNlIFVSSSB3YXMgcmVuYW1lZCBmcm9tIGh0dHA6Ly93d3cuaWJtLmNvbS93c2RsLzIwMDMvV1NETCB0bwotCQlodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMLiAKLQkgLS0+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgotCQk8cGFja2FnZQotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UiCi0gICAgICAgIGdlbk1vZGVsPSJtb2RlbC9XU0RMLmdlbm1vZGVsIgotICAgICAgICB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS93c2RsLzIwMDMvV1NETCI+Ci0JCTwvcGFja2FnZT4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5leHRlbnNpb25fcGFyc2VyIj4KLQkJPHBhcnNlcgotCQkJdHlwZT0id3NkbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsIj4KLQkJPC9wYXJzZXI+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgotCQk8cGFja2FnZQotCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL0hUVFAuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSAKLQkJVGhpcyBleHRlbnNpb24gaXMgZHVwbGljYXRlZCBoZXJlIHRvIHByb3ZpZGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0JCVRoZSBuYW1lc3BhY2UgVVJJIHdhcyByZW5hbWVkIGZyb20gaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9IVFRQIHRvCi0JCWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL0hUVFAuIAotCSAtLT4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS93c2RsLzIwMDMvSFRUUCIKLQkgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9IVFRQLmdlbm1vZGVsIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSI+Ci0JCTwvcGFja2FnZT4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiIC8+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgotCQk8cGFja2FnZQotCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9NSU1FIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL01JTUUuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSAKLQkJVGhpcyBleHRlbnNpb24gaXMgZHVwbGljYXRlZCBoZXJlIHRvIHByb3ZpZGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0JCVRoZSBuYW1lc3BhY2UgVVJJIHdhcyByZW5hbWVkIGZyb20gaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9NSU1FIHRvCi0JCWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUuIAotCSAtLT4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS93c2RsLzIwMDMvTUlNRSIKLQkgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9NSU1FLmdlbm1vZGVsIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSI+Ci0JCTwvcGFja2FnZT4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsLk1JTUVFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiIC8+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgotCQk8cGFja2FnZQotCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9TT0FQIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1NPQVAuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSAKLQkJVGhpcyBleHRlbnNpb24gaXMgZHVwbGljYXRlZCBoZXJlIHRvIHByb3ZpZGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0JCVRoZSBuYW1lc3BhY2UgVVJJIHdhcyByZW5hbWVkIGZyb20gaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9TT0FQIHRvCi0JCWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAuIAotCSAtLT4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS93c2RsLzIwMDMvU09BUCIKLQkgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9TT0FQLmdlbm1vZGVsIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSI+Ci0JCTwvcGFja2FnZT4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiIC8+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC5jb250ZW50R2VuZXJhdG9ycyI+Ci0JCTxjb250ZW50R2VuZXJhdG9yCi0JCQluYW1lPSJTT0FQIgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3IiPgotCQk8L2NvbnRlbnRHZW5lcmF0b3I+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC5jb250ZW50R2VuZXJhdG9ycyI+Ci0JCTxjb250ZW50R2VuZXJhdG9yCi0JCQluYW1lPSJIVFRQIgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3IiPgotCQk8L2NvbnRlbnRHZW5lcmF0b3I+Ci0JPC9leHRlbnNpb24+Ci0KLQotCi0JPCEtLSBkZWZpbmUgYSB3c2RsIGNvbnRlbnQgdHlwZSAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmNvbnRlbnR0eXBlLmNvbnRlbnRUeXBlcyI+Ci0JCTxjb250ZW50LXR5cGUKLQkJCXByaW9yaXR5PSJoaWdoIgotCQkJbmFtZT0iJXhwV1NETENvbnRlbnRUeXBlIgotCQkJaWQ9IndzZGxzb3VyY2UiCi0JCQliYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0JCQlkZWZhdWx0LWNoYXJzZXQ9IlVURi04IgotCQkJZmlsZS1leHRlbnNpb25zPSJ3c2RsIiAvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9jb250ZW50R2VuZXJhdG9ycy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUyYTQ0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9jb250ZW50R2VuZXJhdG9ycy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgaWQ9ImNvbnRlbnRHZW5lcmF0b3JzIiBuYW1lPSJQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIGN1c3RvbSBnZW5lcmF0b3JzIGZvciBQb3J0cyBhbmQgQmluZGluZ3MuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIFBvcnQgYW5kIEJpbmRpbmcgQ29udGVudCBHZW5lcmF0b3JzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBjdXN0b20gY29udGVudCBnZW5lcmF0b3JzIGZvciBXU0RMIFBvcnRzIGFuZCBCaW5kaW5ncy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY29udGVudEdlbmVyYXRvciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iY29udGVudEdlbmVyYXRvciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgTmFtZSB1c2VkIGZvciB0aGlzIHBhcnRpY3VsYXIgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvciZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjb250ZW50IGdlbmVyYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwuY29udGVudEdlbmVyYXRvcnMmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7Y29udGVudEdlbmVyYXRvcgotICAgICAgICAgICAgbmFtZT0mcXVvdDtTT0FQJnF1b3Q7Ci0gICAgICAgICAgICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmdlbmVyYXRvci5TT0FQQ29udGVudEdlbmVyYXRvciZxdW90Oy8mZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc2NoZW1hL2V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjQ1NTdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc2NoZW1hL2V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsIiBpZD0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiIG5hbWU9IldTREwgRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZhY3RvcmllcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgV1NETCBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmFjdG9yaWVzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBmYWN0b3JpZXMgZm9yIGNyZWF0aW5nIGN1c3RvbSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGZhY3RvcnkgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzJnF1b3Q7Jmd0OwotICAgICAgJmx0O2V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotICAgICAgICAgICAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgICAgIGNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkmcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkmbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4ZGEyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3MjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBBZGRyZXNzKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSUhUVFBBZGRyZXNzIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEhUVFBBZGRyZXNzIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TG9jYXRpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgdmFsdWUpOwotCi19IC8vIEhUVFBBZGRyZXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTllOTM2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcjZ2V0VmVyYiA8ZW0+VmVyYjwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBCaW5kaW5nKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSUhUVFBCaW5kaW5nIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEhUVFBCaW5kaW5nIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZXJiPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZXJiPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZXJiPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VmVyYihTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBCaW5kaW5nX1ZlcmIoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFZlcmIoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nI2dldFZlcmIgPGVtPlZlcmI8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlcmI8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRWZXJiKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRWZXJiKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gSFRUUEJpbmRpbmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTgyOGRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEZhY3RvcnlJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQQmluZGluZyBjcmVhdGVIVFRQQmluZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQT3BlcmF0aW9uIGNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUFVybFJlcGxhY2VtZW50IGNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVybCBFbmNvZGVkPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUFVybEVuY29kZWQgY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQQWRkcmVzcyBjcmVhdGVIVFRQQWRkcmVzcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBQYWNrYWdlIGdldEhUVFBQYWNrYWdlKCk7Ci0KLX0gLy9IVFRQRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTdiMGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UjZ2V0SFRUUE9wZXJhdGlvbigpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLklIVFRQT3BlcmF0aW9uIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEhUVFBPcGVyYXRpb24gZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbgotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UjZ2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24jZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gSFRUUE9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Y2NhOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQRmFjdG9yeQotICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZQotewotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTkFNRSA9ICJodHRwIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvSFRUUCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1BSRUZJWCA9ICJodHRwIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQmluZGluZ0ltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SFRUUEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkdfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQklORElOR19fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZXJiPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HX19WRVJCID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQT3BlcmF0aW9uSW1wbCA8ZW0+T3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUE9wZXJhdGlvbkltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SFRUUE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX09QRVJBVElPTiA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9PUEVSQVRJT05fX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybFJlcGxhY2VtZW50SW1wbCA8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybFJlcGxhY2VtZW50SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlQgPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybEVuY29kZWRJbXBsIDxlbT5VcmwgRW5jb2RlZDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBVcmxFbmNvZGVkSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQVXJsRW5jb2RlZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9FTkNPREVEID0gMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX0VOQ09ERURfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbCA8ZW0+QWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQQWRkcmVzcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1MgPSA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1NfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTU19fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9BRERSRVNTX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QWRkcmVzczwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyA8ZW0+SUhUVFAgQWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQQWRkcmVzcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJSFRUUF9BRERSRVNTID0gNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIEFkZHJlc3M8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyA8ZW0+SUhUVFAgQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJSFRUUF9CSU5ESU5HID0gNjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIDxlbT5JSFRUUCBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX09QRVJBVElPTiA9IDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUhUVFBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQVXJsRW5jb2RlZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJSFRUUF9VUkxfRU5DT0RFRCA9IDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQgPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRJSFRUUFVybFJlcGxhY2VtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX1VSTF9SRVBMQUNFTUVOVCA9IDk7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcgPGVtPkJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEhUVFBCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nI2dldFZlcmIgPGVtPlZlcmI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZXJiPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZyNnZXRWZXJiKCkKLSAgICogQHNlZSAjZ2V0SFRUUEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEhUVFBCaW5kaW5nX1ZlcmIoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPk9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEhUVFBPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uI2dldExvY2F0aW9uVVJJKCkKLSAgICogQHNlZSAjZ2V0SFRUUE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEhUVFBVcmxSZXBsYWNlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybEVuY29kZWQgPGVtPlVybCBFbmNvZGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVybCBFbmNvZGVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUFVybEVuY29kZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzIDxlbT5BZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRIVFRQQWRkcmVzcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcyNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcyNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBzZWUgI2dldEhUVFBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyA8ZW0+SUhUVFAgQWRkcmVzczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBBZGRyZXNzPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElIVFRQQWRkcmVzcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyA8ZW0+SUhUVFAgQmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElIVFRQQmluZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIDxlbT5JSFRUUCBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJSFRUUE9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCA8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBVcmxFbmNvZGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUEZhY3RvcnkgZ2V0SFRUUEZhY3RvcnkoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotICAgKiA8dWw+Ci0gICAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnRlcmZhY2UgTGl0ZXJhbHMKLSAgewotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQmluZGluZ0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQQmluZGluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBIVFRQX0JJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0SFRUUEJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZXJiPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEhUVFBfQklORElOR19fVkVSQiA9IGVJTlNUQU5DRS5nZXRIVFRQQmluZGluZ19WZXJiKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUE9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBPcGVyYXRpb25JbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SFRUUE9wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBIVFRQX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRIVFRQT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBVcmxSZXBsYWNlbWVudEltcGwgPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBVcmxSZXBsYWNlbWVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSFRUUF9VUkxfUkVQTEFDRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0SFRUUFVybFJlcGxhY2VtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybEVuY29kZWRJbXBsIDxlbT5VcmwgRW5jb2RlZDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBVcmxFbmNvZGVkSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxFbmNvZGVkKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfVVJMX0VOQ09ERUQgPSBlSU5TVEFOQ0UuZ2V0SFRUUFVybEVuY29kZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQWRkcmVzc0ltcGwgPGVtPkFkZHJlc3M8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQWRkcmVzc0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQQWRkcmVzcygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBIVFRQX0FERFJFU1MgPSBlSU5TVEFOQ0UuZ2V0SFRUUEFkZHJlc3MoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyA8ZW0+SUhUVFAgQWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBBZGRyZXNzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX0FERFJFU1MgPSBlSU5TVEFOQ0UuZ2V0SUhUVFBBZGRyZXNzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgPGVtPklIVFRQIEJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZwotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQQmluZGluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSFRUUF9CSU5ESU5HID0gZUlOU1RBTkNFLmdldElIVFRQQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRJSFRUUE9wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSFRUUF9PUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0SUhUVFBPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCA8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQVXJsRW5jb2RlZCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSFRUUF9VUkxfRU5DT0RFRCA9IGVJTlNUQU5DRS5nZXRJSFRUUFVybEVuY29kZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQgPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQVXJsUmVwbGFjZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUhUVFBfVVJMX1JFUExBQ0VNRU5UID0gZUlOU1RBTkNFLmdldElIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLQotICB9Ci0KLX0gLy9IVFRQUGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYzZiMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBFbmNvZGVkPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQVXJsRW5jb2RlZCgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLklIVFRQVXJsRW5jb2RlZCIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQVXJsRW5jb2RlZCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZAotewotfSAvLyBIVFRQVXJsRW5jb2RlZApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxOGJjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UjZ2V0SFRUUFVybFJlcGxhY2VtZW50KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSUhUVFBVcmxSZXBsYWNlbWVudCIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQVXJsUmVwbGFjZW1lbnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci17Ci19IC8vIEhUVFBVcmxSZXBsYWNlbWVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvZ2VuZXJhdG9yL0hUVFBDb250ZW50R2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9nZW5lcmF0b3IvSFRUUENvbnRlbnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhYTUxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9nZW5lcmF0b3IvSFRUUENvbnRlbnRHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIEhUVFBDb250ZW50R2VuZXJhdG9yIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWRVJCX1BPU1QgPSAwOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZFUkJfR0VUID0gMTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWRVJCX05PVF9TRVQgPSAtMTsKLQotICBwcml2YXRlIGludCB2ZXJiT3B0aW9uID0gVkVSQl9OT1RfU0VUOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgYWRkcmVzc0xvY2F0aW9uID0gQ29udGVudEdlbmVyYXRvci5BRERSRVNTX0xPQ0FUSU9OOwotCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nW10gcmVxdWlyZWROYW1lc3BhY2VzID0geyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIsICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiB9OwotCi0gIHB1YmxpYyB2b2lkIHNldFZlcmIoaW50IHZlcmIpCi0gIHsKLSAgICB2ZXJiT3B0aW9uID0gdmVyYjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFkZHJlc3NMb2NhdGlvbihTdHJpbmcgYWRkcmVzc0xvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5hZGRyZXNzTG9jYXRpb24gPSBhZGRyZXNzTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UmVxdWlyZWROYW1lc3BhY2VzKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlZE5hbWVzcGFjZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZS5lcXVhbHMoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iKSkKLSAgICB7Ci0gICAgICByZXR1cm4gIm1pbWUiOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIikpCi0gICAgewotICAgICAgcmV0dXJuICJodHRwIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVBvcnRDb250ZW50KFBvcnQgcG9ydCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBBZGRyZXNzKCk7Ci0gICAgaHR0cEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoYWRkcmVzc0xvY2F0aW9uKTsKLSAgICBwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0NvbnRlbnQoQmluZGluZyBiaW5kaW5nLCBQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIEhUVFBCaW5kaW5nIGh0dHBCaW5kaW5nID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBCaW5kaW5nKCk7Ci0gICAgaHR0cEJpbmRpbmcuc2V0VmVyYihnZXRWZXJiT3B0aW9uKGJpbmRpbmcpID09IFZFUkJfUE9TVCA/ICJQT1NUIiA6ICJHRVQiKTsKLQotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uQ29udGVudChCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhiaW5kaW5nT3BlcmF0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBIVFRQT3BlcmF0aW9uIGh0dHBPcGVyYXRpb24gPSBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUE9wZXJhdGlvbigpOwotICAgIGh0dHBPcGVyYXRpb24uc2V0TG9jYXRpb25VUkkoIi8iICsgb3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0lucHV0Q29udGVudChCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0LCBJbnB1dCBpbnB1dCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nSW5wdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgIC8vIGhhY2s6IHdlJ3JlIGJlaW5nIHNuZWFreSBoZXJlLiBTZXQgdGhlICd2ZXJiJyBvcHRpb25zIG5vdy4KLSAgICBpbnQgb3B0aW9uID0gZ2V0VmVyYk9wdGlvbihiaW5kaW5nSW5wdXQpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhiaW5kaW5nSW5wdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIGlmIChvcHRpb24gPT0gVkVSQl9QT1NUKQotICAgIHsKLSAgICAgIC8vIFRPRE86IElzIHRoZXJlIGFuIGVxdWl2YWxlbnQgSFRUUCBNb2RlbCBPYmplY3QgZm9yIHRoaXM/Li4uLgotICAgICAgRWxlbWVudCBlbGVtZW50ID0gY3JlYXRlRWxlbWVudChiaW5kaW5nSW5wdXQuZ2V0RWxlbWVudCgpLCAibWltZSIsICJjb250ZW50Iik7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEhUVFBVcmxFbmNvZGVkIHVybEVuY29kZWQgPSBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLSAgICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCh1cmxFbmNvZGVkKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPdXRwdXRDb250ZW50KEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCwgT3V0cHV0IG91dHB1dCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nT3V0cHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAvLyBoYWNrOiB3ZSdyZSBiZWluZyBzbmVha3kgaGVyZS4gU2V0IHRoZSAndmVyYicgb3B0aW9ucyBub3cuCi0gICAgZ2V0VmVyYk9wdGlvbihiaW5kaW5nT3V0cHV0KTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ091dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgLy8gVE9ETzogSXMgdGhlcmUgYW4gZXF1aXZhbGVudCBIVFRQIE1vZGVsIE9iamVjdCBmb3IgdGhpcz8uLi4uCi0gICAgRWxlbWVudCBiaW5kaW5nT3V0cHV0RWxlbWVudCA9IGJpbmRpbmdPdXRwdXQuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoYmluZGluZ091dHB1dEVsZW1lbnQsICJtaW1lIiwgImNvbnRlbnQiKTsKLSAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L3htbCIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nRmF1bHRDb250ZW50KEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQsIEZhdWx0IGZhdWx0KQotICB7Ci0gICAgLy9UT0RPISEKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgZWxlbWVudE5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHByZWZpeCAhPSBudWxsID8gKHByZWZpeCArICI6IiArIGVsZW1lbnROYW1lKSA6IGVsZW1lbnROYW1lOwotICAgIEVsZW1lbnQgcmVzdWx0ID0gcGFyZW50RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkuY3JlYXRlRWxlbWVudChuYW1lKTsKLSAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShyZXN1bHQsIHBhcmVudEVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAvLyAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgCi0gIHByaXZhdGUgaW50IGdldFZlcmJPcHRpb24oT2JqZWN0IGdlbmVyaWNCaW5kaW5nT2JqZWN0KQotICB7Ci0gICAgaWYgKHZlcmJPcHRpb24gPT0gVkVSQl9OT1RfU0VUICYmIGdlbmVyaWNCaW5kaW5nT2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gaW5pdCgpIHdhcyBuZXZlciBjYWxsZWQsIHRyeSB0byBkZXRlcm1pbmUgdGhlICd2ZXJiJyBiYXNlZCBvbiB3aGF0IHdlIGhhdmUva25vdwotICAgICAgQmluZGluZyBiaW5kaW5nID0gZ2V0QmluZGluZ09iamVjdChnZW5lcmljQmluZGluZ09iamVjdCk7Ci0KLSAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHZlcmIgZnJvbSB0aGUgQmluZGluZyBPYmplY3QKLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBJdGVyYXRvciB2YWx1ZXNJdCA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50QXR0cmlidXRlVmFsdWUobGlzdCwgInZlcmIiKS5pdGVyYXRvcigpOwotCi0gICAgICAgIHdoaWxlICh2YWx1ZXNJdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdmVyYiA9IChTdHJpbmcpdmFsdWVzSXQubmV4dCgpOwotCi0gICAgICAgICAgaWYgKHZlcmIuZXF1YWxzKCJQT1NUIikpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmVyYk9wdGlvbiA9IFZFUkJfUE9TVDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodmVyYi5lcXVhbHMoIkdFVCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZlcmJPcHRpb24gPSBWRVJCX0dFVDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAodmVyYk9wdGlvbiAhPSBWRVJCX05PVF9TRVQpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZlcmJPcHRpb24gPT0gVkVSQl9OT1RfU0VUKQotICAgIHsKLSAgICAgIHZlcmJPcHRpb24gPSBWRVJCX0dFVDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmVyYk9wdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKExpc3QgZWVMaXN0LCBTdHJpbmcgYXR0cmlidXRlS2V5KQotICB7Ci0gICAgTGlzdCB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgZWVFbGVtZW50c0l0ID0gZWVMaXN0Lml0ZXJhdG9yKCk7Ci0KLSAgICB3aGlsZSAoZWVFbGVtZW50c0l0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWVFbGVtZW50c0l0Lm5leHQoKTsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGVlRWxlbWVudC5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZUtleSk7Ci0gICAgICBpZiAoYXR0cmlidXRlVmFsdWUgIT0gbnVsbCAmJiAhYXR0cmlidXRlVmFsdWUuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgdmFsdWVzLmFkZChhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlczsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZyBnZXRCaW5kaW5nT2JqZWN0KE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIE9iamVjdCBwYXJlbnQgPSBnZW5lcmljQmluZGluZ09iamVjdDsKLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsICYmIGluZGV4IDwgNSkKLSAgICB7Ci0gICAgICBwYXJlbnQgPSBnZXRHZW5lcmljQmluZGluZ09iamVjdFBhcmVudChwYXJlbnQpOwotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpID8gKEJpbmRpbmcpcGFyZW50IDogbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IGdldEdlbmVyaWNCaW5kaW5nT2JqZWN0UGFyZW50KE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIE9iamVjdCBwYXJlbnQgPSBudWxsOwotCi0gICAgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nT3BlcmF0aW9uKWdlbmVyaWNCaW5kaW5nT2JqZWN0KS5nZXRDb250YWluZXIoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgewotICAgICAgICBwYXJlbnQgPSAoKEJpbmRpbmdJbnB1dClnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ091dHB1dClnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nRmF1bHQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKExpc3Qgb3JpZ2luYWxMaXN0LCBMaXN0IHJlbW92ZUxpc3QpCi0gIHsKLSAgICBJdGVyYXRvciByZW1vdmVJdCA9IHJlbW92ZUxpc3QuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAocmVtb3ZlSXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIG9yaWdpbmFsTGlzdC5yZW1vdmUocmVtb3ZlSXQubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkKLSAgewotICAgIHJldHVybiAiSFRUUCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEFkZHJlc3NJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBBZGRyZXNzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjY0ODQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEFkZHJlc3NJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbCNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUEFkZHJlc3NJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgSFRUUEFkZHJlc3MKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb25VUkkgPSBMT0NBVElPTl9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUEFkZHJlc3NJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX0FERFJFU1M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbmV3TG9jYXRpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb25VUkkgPSBsb2NhdGlvblVSSTsKLSAgICBsb2NhdGlvblVSSSA9IG5ld0xvY2F0aW9uVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJLCBvbGRMb2NhdGlvblVSSSwgbG9jYXRpb25VUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TG9jYXRpb25VUkkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSShMT0NBVElPTl9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb25VUkkgIT0gbnVsbCA6ICFMT0NBVElPTl9VUklfRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uVVJJKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKGxvY2F0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobG9jYXRpb25VUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TG9jYXRpb25VUkkoSFRUUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIEhUVFBDb25zdGFudHMuTE9DQVRJT05fVVJJX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIEhUVFBDb25zdGFudHMuTE9DQVRJT05fVVJJX0FUVFJJQlVURSwgZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoSFRUUENvbnN0YW50cy5IVFRQX05BTUVTUEFDRV9VUkksIEhUVFBDb25zdGFudHMuQUREUkVTU19FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci19IC8vSFRUUEFkZHJlc3NJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBCaW5kaW5nSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQmluZGluZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZlOTAyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBCaW5kaW5nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQmluZGluZ0ltcGwjZ2V0VmVyYiA8ZW0+VmVyYjwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBCaW5kaW5nSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEhUVFBCaW5kaW5nCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVyYigpIDxlbT5WZXJiPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRWZXJiKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQl9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlcmIoKSA8ZW0+VmVyYjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VmVyYigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdmVyYiA9IFZFUkJfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUEJpbmRpbmdJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX0JJTkRJTkc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmVyYigpCi0gIHsKLSAgICByZXR1cm4gdmVyYjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYihTdHJpbmcgbmV3VmVyYikKLSAgewotICAgIFN0cmluZyBvbGRWZXJiID0gdmVyYjsKLSAgICB2ZXJiID0gbmV3VmVyYjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBIVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX1ZFUkIsIG9sZFZlcmIsIHZlcmIpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCOgotICAgICAgcmV0dXJuIGdldFZlcmIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX1ZFUkI6Ci0gICAgICBzZXRWZXJiKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCOgotICAgICAgc2V0VmVyYihWRVJCX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX1ZFUkI6Ci0gICAgICByZXR1cm4gVkVSQl9FREVGQVVMVCA9PSBudWxsID8gdmVyYiAhPSBudWxsIDogIVZFUkJfRURFRkFVTFQuZXF1YWxzKHZlcmIpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAodmVyYjogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHZlcmIpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0VmVyYihIVFRQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgSFRUUENvbnN0YW50cy5WRVJCX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfQklORElOR19fVkVSQikKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBIVFRQQ29uc3RhbnRzLlZFUkJfQVRUUklCVVRFLCBnZXRWZXJiKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLCBIVFRQQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vSFRUUEJpbmRpbmdJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyN2QzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLio7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBIVFRQRmFjdG9yeQotewotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIVFRQRmFjdG9yeSBpbml0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEhUVFBGYWN0b3J5IHRoZUhUVFBGYWN0b3J5ID0gKEhUVFBGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIik7IC8vJE5PTi1OTFMtMSQgCi0gICAgICBpZiAodGhlSFRUUEZhY3RvcnkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZUhUVFBGYWN0b3J5OwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBIVFRQRmFjdG9yeUltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykKLSAgewotICAgIHN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HOgotICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBCaW5kaW5nKCk7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OOgotICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9VUkxfUkVQTEFDRU1FTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50KCk7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfVVJMX0VOQ09ERUQ6Ci0gICAgICByZXR1cm4gY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTOgotICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBBZGRyZXNzKCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUEJpbmRpbmcgY3JlYXRlSFRUUEJpbmRpbmcoKQotICB7Ci0gICAgSFRUUEJpbmRpbmdJbXBsIGh0dHBCaW5kaW5nID0gbmV3IEhUVFBCaW5kaW5nSW1wbCgpOwotICAgIHJldHVybiBodHRwQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBPcGVyYXRpb24gY3JlYXRlSFRUUE9wZXJhdGlvbigpCi0gIHsKLSAgICBIVFRQT3BlcmF0aW9uSW1wbCBodHRwT3BlcmF0aW9uID0gbmV3IEhUVFBPcGVyYXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIGh0dHBPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQVXJsUmVwbGFjZW1lbnQgY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50KCkKLSAgewotICAgIEhUVFBVcmxSZXBsYWNlbWVudEltcGwgaHR0cFVybFJlcGxhY2VtZW50ID0gbmV3IEhUVFBVcmxSZXBsYWNlbWVudEltcGwoKTsKLSAgICByZXR1cm4gaHR0cFVybFJlcGxhY2VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUFVybEVuY29kZWQgY3JlYXRlSFRUUFVybEVuY29kZWQoKQotICB7Ci0gICAgSFRUUFVybEVuY29kZWRJbXBsIGh0dHBVcmxFbmNvZGVkID0gbmV3IEhUVFBVcmxFbmNvZGVkSW1wbCgpOwotICAgIHJldHVybiBodHRwVXJsRW5jb2RlZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBBZGRyZXNzIGNyZWF0ZUhUVFBBZGRyZXNzKCkKLSAgewotICAgIEhUVFBBZGRyZXNzSW1wbCBodHRwQWRkcmVzcyA9IG5ldyBIVFRQQWRkcmVzc0ltcGwoKTsKLSAgICByZXR1cm4gaHR0cEFkZHJlc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQUGFja2FnZSBnZXRIVFRQUGFja2FnZSgpCi0gIHsKLSAgICByZXR1cm4gKEhUVFBQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBkZXByZWNhdGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSFRUUFBhY2thZ2UgZ2V0UGFja2FnZSgpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuZUlOU1RBTkNFOwotICB9Ci19IC8vSFRUUEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWQwNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUE9wZXJhdGlvbkltcGwjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBPcGVyYXRpb25JbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgSFRUUE9wZXJhdGlvbgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvblVSSSA9IExPQ0FUSU9OX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBIVFRQT3BlcmF0aW9uSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9PUEVSQVRJT047Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbmV3TG9jYXRpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb25VUkkgPSBsb2NhdGlvblVSSTsKLSAgICBsb2NhdGlvblVSSSA9IG5ld0xvY2F0aW9uVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkksIG9sZExvY2F0aW9uVVJJLCBsb2NhdGlvblVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKExPQ0FUSU9OX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBMT0NBVElPTl9VUklfRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uVVJJICE9IG51bGwgOiAhTE9DQVRJT05fVVJJX0VERUZBVUxULmVxdWFscyhsb2NhdGlvblVSSSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChsb2NhdGlvblVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldExvY2F0aW9uVVJJKEhUVFBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBIVFRQQ29uc3RhbnRzLkxPQ0FUSU9OX1VSSV9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIEhUVFBDb25zdGFudHMuTE9DQVRJT05fVVJJX0FUVFJJQlVURSwgZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoSFRUUENvbnN0YW50cy5IVFRQX05BTUVTUEFDRV9VUkksIEhUVFBDb25zdGFudHMuT1BFUkFUSU9OX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL0hUVFBPcGVyYXRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQUGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY1NWYzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybEVuY29kZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEhUVFBQYWNrYWdlCi17Ci0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaHR0cEJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaHR0cE9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaHR0cFVybEVuY29kZWRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaHR0cEFkZHJlc3NFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaWh0dHBBZGRyZXNzRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlodHRwQmluZGluZ0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpaHR0cE9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpaHR0cFVybEVuY29kZWRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaWh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLSAgICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLSAgICogcGFja2FnZSBVUkkgdmFsdWUuCi0gICAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLSAgICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLSAgICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLSAgICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UjZU5TX1VSSQotICAgKiBAc2VlICNpbml0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBIVFRQUGFja2FnZUltcGwoKQotICB7Ci0gICAgc3VwZXIoZU5TX1VSSSwgSFRUUEZhY3RvcnkuZUlOU1RBTkNFKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLSAgICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLSAgICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLSAgICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0gICAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLSAgICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLSAgICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotICAgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLSAgICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotICAgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotICAgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotICAgKiB0aG9zZSBvZiBhbm90aGVyLgotICAgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0gICAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2VOU19VUkkKLSAgICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSFRUUFBhY2thZ2UgaW5pdCgpCi0gIHsKLSAgICBpZiAoaXNJbml0ZWQpCi0gICAgICByZXR1cm4gKEhUVFBQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEhUVFBQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotICAgIEhUVFBQYWNrYWdlSW1wbCB0aGVIVFRQUGFja2FnZSA9IChIVFRQUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgSFRUUFBhY2thZ2VJbXBsCi0gICAgICA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IEhUVFBQYWNrYWdlSW1wbCgpKTsKLQotICAgIGlzSW5pdGVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotICAgIFdTRExQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKLQotICAgIC8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0gICAgdGhlSFRUUFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0gICAgdGhlSFRUUFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotICAgIHRoZUhUVFBQYWNrYWdlLmZyZWV6ZSgpOwotCi0gICAgcmV0dXJuIHRoZUhUVFBQYWNrYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEhUVFBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBodHRwQmluZGluZ0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0SFRUUEJpbmRpbmdfVmVyYigpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpaHR0cEJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRIVFRQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBodHRwT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlodHRwT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SFRUUFVybFJlcGxhY2VtZW50KCkKLSAgewotICAgIHJldHVybiBodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SFRUUFVybEVuY29kZWQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBVcmxFbmNvZGVkRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEhUVFBBZGRyZXNzKCkKLSAgewotICAgIHJldHVybiBodHRwQWRkcmVzc0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWh0dHBBZGRyZXNzRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUhUVFBBZGRyZXNzKCkKLSAgewotICAgIHJldHVybiBpaHR0cEFkZHJlc3NFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUhUVFBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBpaHR0cEJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUhUVFBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlodHRwT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElIVFRQVXJsRW5jb2RlZCgpCi0gIHsKLSAgICByZXR1cm4gaWh0dHBVcmxFbmNvZGVkRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElIVFRQVXJsUmVwbGFjZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGlodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQRmFjdG9yeSBnZXRIVFRQRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gKEhUVFBGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLSAgICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0NyZWF0ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLQotICAgIC8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotICAgIGh0dHBCaW5kaW5nRUNsYXNzID0gY3JlYXRlRUNsYXNzKEhUVFBfQklORElORyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShodHRwQmluZGluZ0VDbGFzcywgSFRUUF9CSU5ESU5HX19WRVJCKTsKLQotICAgIGh0dHBPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSFRUUF9PUEVSQVRJT04pOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoaHR0cE9wZXJhdGlvbkVDbGFzcywgSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICBodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSFRUUF9VUkxfUkVQTEFDRU1FTlQpOwotCi0gICAgaHR0cFVybEVuY29kZWRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSFRUUF9VUkxfRU5DT0RFRCk7Ci0KLSAgICBodHRwQWRkcmVzc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhIVFRQX0FERFJFU1MpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoaHR0cEFkZHJlc3NFQ2xhc3MsIEhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJKTsKLQotICAgIGlodHRwQWRkcmVzc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSFRUUF9BRERSRVNTKTsKLQotICAgIGlodHRwQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSFRUUF9CSU5ESU5HKTsKLQotICAgIGlodHRwT3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKElIVFRQX09QRVJBVElPTik7Ci0KLSAgICBpaHR0cFVybEVuY29kZWRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUhUVFBfVVJMX0VOQ09ERUQpOwotCi0gICAgaWh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSFRUUF9VUkxfUkVQTEFDRU1FTlQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotICAgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgIHJldHVybjsKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgcGFja2FnZQotICAgIHNldE5hbWUoZU5BTUUpOwotICAgIHNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotICAgIHNldE5zVVJJKGVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotICAgIFdTRExQYWNrYWdlIHRoZVdTRExQYWNrYWdlID0gKFdTRExQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFdTRExQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotICAgIGh0dHBCaW5kaW5nRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGh0dHBCaW5kaW5nRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUhUVFBCaW5kaW5nKCkpOwotICAgIGh0dHBPcGVyYXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgaHR0cE9wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElIVFRQT3BlcmF0aW9uKCkpOwotICAgIGh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJSFRUUFVybFJlcGxhY2VtZW50KCkpOwotICAgIGh0dHBVcmxFbmNvZGVkRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGh0dHBVcmxFbmNvZGVkRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUhUVFBVcmxFbmNvZGVkKCkpOwotICAgIGh0dHBBZGRyZXNzRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGh0dHBBZGRyZXNzRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUhUVFBBZGRyZXNzKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLSAgICBpbml0RUNsYXNzKGh0dHBCaW5kaW5nRUNsYXNzLCBIVFRQQmluZGluZy5jbGFzcywgIkhUVFBCaW5kaW5nIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRIVFRQQmluZGluZ19WZXJiKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInZlcmIiLCBudWxsLCAwLCAxLCBIVFRQQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhodHRwT3BlcmF0aW9uRUNsYXNzLCBIVFRQT3BlcmF0aW9uLmNsYXNzLCAiSFRUUE9wZXJhdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJsb2NhdGlvblVSSSIsIG51bGwsIDAsIDEsIEhUVFBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MsCi0gICAgICBIVFRQVXJsUmVwbGFjZW1lbnQuY2xhc3MsCi0gICAgICAiSFRUUFVybFJlcGxhY2VtZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGh0dHBVcmxFbmNvZGVkRUNsYXNzLCBIVFRQVXJsRW5jb2RlZC5jbGFzcywgIkhUVFBVcmxFbmNvZGVkIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGh0dHBBZGRyZXNzRUNsYXNzLCBIVFRQQWRkcmVzcy5jbGFzcywgIkhUVFBBZGRyZXNzIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJsb2NhdGlvblVSSSIsIG51bGwsIDAsIDEsIEhUVFBBZGRyZXNzLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaWh0dHBBZGRyZXNzRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MuY2xhc3MsCi0gICAgICAiSUhUVFBBZGRyZXNzIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpaHR0cEJpbmRpbmdFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZy5jbGFzcywKLSAgICAgICJJSFRUUEJpbmRpbmciLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlodHRwT3BlcmF0aW9uRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbi5jbGFzcywKLSAgICAgICJJSFRUUE9wZXJhdGlvbiIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaWh0dHBVcmxFbmNvZGVkRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQuY2xhc3MsCi0gICAgICAiSUhUVFBVcmxFbmNvZGVkIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50LmNsYXNzLAotICAgICAgIklIVFRQVXJsUmVwbGFjZW1lbnQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlCi0gICAgY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0gIH0KLX0gLy9IVFRQUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFVybEVuY29kZWRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBVcmxFbmNvZGVkSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTc3N2JlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFVybEVuY29kZWRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybEVuY29kZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VXJsIEVuY29kZWQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQVXJsRW5jb2RlZEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBIVFRQVXJsRW5jb2RlZAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBIVFRQVXJsRW5jb2RlZEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfVVJMX0VOQ09ERUQ7Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShIVFRQQ29uc3RhbnRzLkhUVFBfTkFNRVNQQUNFX1VSSSwgSFRUUENvbnN0YW50cy5VUkxfRU5DT0RFRF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9IVFRQVXJsRW5jb2RlZEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFVybFJlcGxhY2VtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTY0Y2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBVcmxSZXBsYWNlbWVudEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBIVFRQVXJsUmVwbGFjZW1lbnQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUFVybFJlcGxhY2VtZW50SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9VUkxfUkVQTEFDRU1FTlQ7Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShIVFRQQ29uc3RhbnRzLkhUVFBfTkFNRVNQQUNFX1VSSSwgSFRUUENvbnN0YW50cy5VUkxfUkVQTEFDRU1FTlRfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vSFRUUFVybFJlcGxhY2VtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDExNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLio7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIEhUVFBQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBBZGFwdGVyRmFjdG9yeSgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gSFRUUFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUFN3aXRjaCBtb2RlbFN3aXRjaCA9IG5ldyBIVFRQU3dpdGNoKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQQmluZGluZyhIVFRQQmluZGluZyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVIVFRQQmluZGluZ0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSFRUUE9wZXJhdGlvbihIVFRQT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBVcmxSZXBsYWNlbWVudChIVFRQVXJsUmVwbGFjZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsRW5jb2RlZChIVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVIVFRQVXJsRW5jb2RlZEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSFRUUEFkZHJlc3MoSFRUUEFkZHJlc3Mgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSFRUUEFkZHJlc3NBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQQWRkcmVzcyhqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUEFkZHJlc3NBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQQmluZGluZyhqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUEJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQT3BlcmF0aW9uKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUhUVFBPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsRW5jb2RlZChqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUFVybEVuY29kZWRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsUmVwbGFjZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlIVFRQVXJsUmVwbGFjZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVdTRExFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLSAgICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KQotICB7Ci0gICAgcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcgPGVtPkJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUhUVFBCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uIDxlbT5PcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSFRUUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5VcmwgRW5jb2RlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybEVuY29kZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSFRUUFVybEVuY29kZWRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzIDxlbT5BZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVIVFRQQWRkcmVzc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyA8ZW0+SUhUVFAgQWRkcmVzczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSFRUUEFkZHJlc3NBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgPGVtPklIVFRQIEJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUhUVFBCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlIVFRQT3BlcmF0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSFRUUFVybEVuY29kZWRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlIVFRQVXJsUmVwbGFjZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9IVFRQQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTFmZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEhUVFBDb25zdGFudHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREUkVTU19FTEVNRU5UX1RBRyA9ICJhZGRyZXNzIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkdfRUxFTUVOVF9UQUcgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05fRUxFTUVOVF9UQUcgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSTF9FTkNPREVEX0VMRU1FTlRfVEFHID0gInVybEVuY29kZWQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJMX1JFUExBQ0VNRU5UX0VMRU1FTlRfVEFHID0gInVybFJlcGxhY2VtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfTkFNRVNQQUNFX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9BVFRSSUJVVEUgPSAibG9jYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQl9BVFRSSUJVVEUgPSAidmVyYiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIDogbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5N2Y5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotCi0KLXB1YmxpYyBjbGFzcyBIVFRQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci17Ci0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgaWYgKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGlmIChIVFRQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUEFkZHJlc3MoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKEhUVFBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoSFRUUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUE9wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoSFRUUENvbnN0YW50cy5VUkxfRU5DT0RFRF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQVXJsRW5jb2RlZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoSFRUUENvbnN0YW50cy5VUkxfUkVQTEFDRU1FTlRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbG9jYWxOYW1lOiAiICsgbG9jYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuIFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbmFtZXNwYWNlOiAiICsgbmFtZXNwYWNlKTsKLSAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUFN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUyZDFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgSFRUUFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUFN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gSFRUUFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElORzoKLSAgICAgIHsKLSAgICAgICAgSFRUUEJpbmRpbmcgaHR0cEJpbmRpbmcgPSAoSFRUUEJpbmRpbmcpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VIVFRQQmluZGluZyhodHRwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlIVFRQQmluZGluZyhodHRwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT046Ci0gICAgICB7Ci0gICAgICAgIEhUVFBPcGVyYXRpb24gaHR0cE9wZXJhdGlvbiA9IChIVFRQT3BlcmF0aW9uKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUE9wZXJhdGlvbihodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUE9wZXJhdGlvbihodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9VUkxfUkVQTEFDRU1FTlQ6Ci0gICAgICB7Ci0gICAgICAgIEhUVFBVcmxSZXBsYWNlbWVudCBodHRwVXJsUmVwbGFjZW1lbnQgPSAoSFRUUFVybFJlcGxhY2VtZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUFVybFJlcGxhY2VtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVybFJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUFVybFJlcGxhY2VtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaHR0cFVybFJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVybFJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEOgotICAgICAgewotICAgICAgICBIVFRQVXJsRW5jb2RlZCBodHRwVXJsRW5jb2RlZCA9IChIVFRQVXJsRW5jb2RlZCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUhUVFBVcmxFbmNvZGVkKGh0dHBVcmxFbmNvZGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUhUVFBVcmxFbmNvZGVkKGh0dHBVcmxFbmNvZGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBVcmxFbmNvZGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1M6Ci0gICAgICB7Ci0gICAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUEFkZHJlc3MoaHR0cEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUEFkZHJlc3MoaHR0cEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBCaW5kaW5nKEhUVFBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBPcGVyYXRpb24oSFRUUE9wZXJhdGlvbiBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsUmVwbGFjZW1lbnQoSFRUUFVybFJlcGxhY2VtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVybCBFbmNvZGVkPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsRW5jb2RlZChIVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBBZGRyZXNzKEhUVFBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIEFkZHJlc3M8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBBZGRyZXNzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUhUVFBBZGRyZXNzKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUhUVFBCaW5kaW5nKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQT3BlcmF0aW9uKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsRW5jb2RlZChqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUFVybFJlcGxhY2VtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19IC8vSFRUUFN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOGVhMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbnRlbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldFR5cGUgPGVtPlR5cGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FQ29udGVudCgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLklNSU1FQ29udGVudCIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FQ29udGVudCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFR5cGUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FQ29udGVudF9UeXBlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VHlwZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVBhcnQoUGFydCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUGFydCBnZXRFUGFydCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFUGFydChQYXJ0IHZhbHVlKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFBhcnQoU3RyaW5nIHBhcnQpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFBhcnQoKTsKLQotfSAvLyBNSU1FQ29udGVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYzRhODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1JTUVGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FRmFjdG9yeUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVDb250ZW50IGNyZWF0ZU1JTUVDb250ZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRVBhcnQgY3JlYXRlTUlNRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVNdWx0aXBhcnRSZWxhdGVkIGNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWltZSBYbWw8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pbWUgWG1sPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FTWltZVhtbCBjcmVhdGVNSU1FTWltZVhtbCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVQYWNrYWdlIGdldE1JTUVQYWNrYWdlKCk7Ci0KLX0gLy9NSU1FRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YTBlZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWltZSBYbWw8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVNaW1lWG1sKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuSU1JTUVNaW1lWG1sIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1JTUVNaW1lWG1sIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVBhcnQoUGFydCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUGFydCBnZXRFUGFydCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFUGFydChQYXJ0IHZhbHVlKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFBhcnQoU3RyaW5nIHBhcnQpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFBhcnQoKTsKLQotfSAvLyBNSU1FTWltZVhtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmZlNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkI2dldEVNSU1FUGFydCA8ZW0+RU1JTUUgUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuSU1JTUVNdWx0aXBhcnRSZWxhdGVkIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1JTUVNdWx0aXBhcnRSZWxhdGVkIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTUlNRSBQYXJ0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTUlNRSBQYXJ0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVNSU1FIFBhcnQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkX0VNSU1FUGFydCgpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFTUlNRVBhcnQoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBtaW1lUGFydFR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5JTUlNRVBhcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgYWRkTUlNRVBhcnQoTUlNRVBhcnQgbWltZVBhcnQpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5MaXN0IiBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRNSU1FUGFydHMoKTsKLQotfSAvLyBNSU1FTXVsdGlwYXJ0UmVsYXRlZApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MzcyZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5Ci0gKiBAbW9kZWwga2luZD0icGFja2FnZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlCi17Ci0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOQU1FID0gIm1pbWUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9NSU1FIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfUFJFRklYID0gIm1pbWUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVDb250ZW50SW1wbCA8ZW0+Q29udGVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVDb250ZW50SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FQ29udGVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlRfX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9fRVBBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Db250ZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbCA8ZW0+UGFydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlQgPSAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfUEFSVF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9QQVJUX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwgPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE1JTUVfTVVMVElQQVJUX1JFTEFURUQgPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTUlNRSBQYXJ0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNaW1lWG1sSW1wbCA8ZW0+TWltZSBYbWw8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTWltZVhtbEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TUlNRU1pbWVYbWwoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgTUlNRV9NSU1FX1hNTCA9IDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NSU1FX1hNTF9fRVBBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaW1lIFhtbDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgPGVtPklNSU1FIFBhcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1JTUVfUEFSVCA9IDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBQYXJ0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNSU1FX01VTFRJUEFSVF9SRUxBVEVEID0gNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IDxlbT5JTUlNRSBDb250ZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNSU1FX0NPTlRFTlQgPSA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1JTUUgQ29udGVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIDxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FTWltZVhtbCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTUlNRV9NSU1FX1hNTCA9IDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5MaXN0PC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TGlzdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBMSVNUID0gODsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50IDxlbT5Db250ZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNSU1FQ29udGVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0VHlwZSgpCi0gICAqIEBzZWUgI2dldE1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRNSU1FQ29udGVudF9UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVQYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRFUGFydCgpCi0gICAqIEBzZWUgI2dldE1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRNSU1FQ29udGVudF9FUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQgPGVtPlBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE1JTUVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQHNlZSAjZ2V0TUlNRVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIDxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQjZ2V0RU1JTUVQYXJ0IDxlbT5FTUlNRSBQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FTUlNRSBQYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCNnZXRFTUlNRVBhcnQoKQotICAgKiBAc2VlICNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCA8ZW0+TWltZSBYbWw8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWltZSBYbWw8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNSU1FTWltZVhtbCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FUGFydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwjZ2V0RVBhcnQoKQotICAgKiBAc2VlICNnZXRNSU1FTWltZVhtbCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgPGVtPklNSU1FIFBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgUGFydDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJTUlNRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCA8ZW0+SU1JTUUgQ29udGVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNSU1FQ29udGVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCA8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU1JTUVNaW1lWG1sKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZhLnV0aWwuTGlzdCA8ZW0+TGlzdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+TGlzdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLnV0aWwuTGlzdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS51dGlsLkxpc3QiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVGYWN0b3J5IGdldE1JTUVGYWN0b3J5KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKLSAgICogPHVsPgotICAgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gICAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gICAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICAgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICAgKiA8L3VsPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50ZXJmYWNlIExpdGVyYWxzCi0gIHsKLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsIDxlbT5Db250ZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TUlNRUNvbnRlbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgTUlNRV9DT05URU5UID0gZUlOU1RBTkNFLmdldE1JTUVDb250ZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBNSU1FX0NPTlRFTlRfX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnRfVHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfQ09OVEVOVF9fRVBBUlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFydEltcGwgPGVtPlBhcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFydEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FUGFydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNSU1FX1BBUlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBlSU5TVEFOQ0UuZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCA8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNSU1FX01VTFRJUEFSVF9SRUxBVEVEID0gZUlOU1RBTkNFLmdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1JTUUgUGFydDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsIDxlbT5NaW1lIFhtbDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNaW1lWG1sSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVNaW1lWG1sKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1JTUVfTUlNRV9YTUwgPSBlSU5TVEFOQ0UuZ2V0TUlNRU1pbWVYbWwoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBNSU1FX01JTUVfWE1MX19FUEFSVCA9IGVJTlNUQU5DRS5nZXRNSU1FTWltZVhtbF9FUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IDxlbT5JTUlNRSBQYXJ0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRVBhcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1JTUVfUEFSVCA9IGVJTlNUQU5DRS5nZXRJTUlNRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCA8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCA9IGVJTlNUQU5DRS5nZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCA8ZW0+SU1JTUUgQ29udGVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVDb250ZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElNSU1FX0NPTlRFTlQgPSBlSU5TVEFOQ0UuZ2V0SU1JTUVDb250ZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwgPGVtPklNSU1FIE1pbWUgWG1sPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRU1pbWVYbWwoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1JTUVfTUlNRV9YTUwgPSBlSU5TVEFOQ0UuZ2V0SU1JTUVNaW1lWG1sKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+TGlzdDwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TGlzdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBMSVNUID0gZUlOU1RBTkNFLmdldExpc3QoKTsKLQotICB9Ci0KLX0gLy9NSU1FUGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MjRhYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0I2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRVBhcnQoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5JTUlNRVBhcnQiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTUlNRVBhcnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGV4dGVuc2liaWxpdHlFbGVtZW50VHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUV4dGVuc2liaWxpdHlFbGVtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLkxpc3QiIG1hbnk9ImZhbHNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi19IC8vIE1JTUVQYXJ0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVDb250ZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FQ29udGVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U2Mjk5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVDb250ZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29udGVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsI2dldFR5cGUgPGVtPlR5cGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVDb250ZW50SW1wbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQ29udGVudEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBNSU1FQ29udGVudAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlKCkgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHR5cGUgPSBUWVBFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFydCgpIDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydCBlUGFydDsKLQotICBwcml2YXRlIFN0cmluZyBwYXJ0OyAvLyBUQkQKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNSU1FQ29udGVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfQ09OVEVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyBuZXdUeXBlKQotICB7Ci0gICAgU3RyaW5nIG9sZFR5cGUgPSB0eXBlOwotICAgIHR5cGUgPSBuZXdUeXBlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRSwgb2xkVHlwZSwgdHlwZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUGFydCBnZXRFUGFydCgpCi0gIHsKLSAgICBpZiAoZVBhcnQgIT0gbnVsbCAmJiBlUGFydC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFUGFydCA9IChJbnRlcm5hbEVPYmplY3QpZVBhcnQ7Ci0gICAgICBlUGFydCA9IChQYXJ0KWVSZXNvbHZlUHJveHkob2xkRVBhcnQpOwotICAgICAgaWYgKGVQYXJ0ICE9IG9sZEVQYXJ0KQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGJhc2ljR2V0RVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFUGFydChQYXJ0IG5ld0VQYXJ0KQotICB7Ci0gICAgUGFydCBvbGRFUGFydCA9IGVQYXJ0OwotICAgIGVQYXJ0ID0gbmV3RVBhcnQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJ0KFN0cmluZyBwYXJ0KQotICB7Ci0gICAgdGhpcy5wYXJ0ID0gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19UWVBFOgotICAgICAgcmV0dXJuIGdldFR5cGUoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVBhcnQoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVQYXJ0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19UWVBFOgotICAgICAgc2V0VHlwZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVDoKLSAgICAgIHNldEVQYXJ0KChQYXJ0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRToKLSAgICAgIHNldFR5cGUoVFlQRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX1RZUEU6Ci0gICAgICByZXR1cm4gVFlQRV9FREVGQVVMVCA9PSBudWxsID8gdHlwZSAhPSBudWxsIDogIVRZUEVfRURFRkFVTFQuZXF1YWxzKHR5cGUpOwotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX0VQQVJUOgotICAgICAgcmV0dXJuIGVQYXJ0ICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh0eXBlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzOiBET00gLT4gTW9kZWwKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRQYXJ0KE1JTUVDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBNSU1FQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFKSk7Ci0gICAgc2V0VHlwZShNSU1FQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgTUlNRUNvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfQ09OVEVOVF9fRVBBUlQpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgTUlNRUNvbnN0YW50cy5QQVJUX0FUVFJJQlVURSwgZ2V0UGFydCgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBNSU1FUGFja2FnZS5MaXRlcmFscy5NSU1FX0NPTlRFTlRfX1RZUEUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgTUlNRUNvbnN0YW50cy5UWVBFX0FUVFJJQlVURSwgZ2V0VHlwZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL01JTUVDb250ZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWJjYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE1JTUVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1JTUVGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTUlNRUZhY3RvcnkgdGhlTUlNRUZhY3RvcnkgPSAoTUlNRUZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVNSU1FRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlTUlNRUZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IE1JTUVGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlTUlNRUNvbnRlbnQoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUOgotICAgICAgcmV0dXJuIGNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURUQ6Ci0gICAgICByZXR1cm4gY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTDoKLSAgICAgIHJldHVybiBjcmVhdGVNSU1FTWltZVhtbCgpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLkxJU1Q6Ci0gICAgICByZXR1cm4gY3JlYXRlTGlzdEZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLkxJU1Q6Ci0gICAgICByZXR1cm4gY29udmVydExpc3RUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVDb250ZW50IGNyZWF0ZU1JTUVDb250ZW50KCkKLSAgewotICAgIE1JTUVDb250ZW50SW1wbCBtaW1lQ29udGVudCA9IG5ldyBNSU1FQ29udGVudEltcGwoKTsKLSAgICByZXR1cm4gbWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNSU1FUGFydCBjcmVhdGVNSU1FUGFydCgpCi0gIHsKLSAgICBNSU1FUGFydEltcGwgbWltZVBhcnQgPSBuZXcgTUlNRVBhcnRJbXBsKCk7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRU11bHRpcGFydFJlbGF0ZWQgY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICB7Ci0gICAgTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsIG1pbWVNdWx0aXBhcnRSZWxhdGVkID0gbmV3IE1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCgpOwotICAgIHJldHVybiBtaW1lTXVsdGlwYXJ0UmVsYXRlZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVNaW1lWG1sIGNyZWF0ZU1JTUVNaW1lWG1sKCkKLSAgewotICAgIE1JTUVNaW1lWG1sSW1wbCBtaW1lTWltZVhtbCA9IG5ldyBNSU1FTWltZVhtbEltcGwoKTsKLSAgICByZXR1cm4gbWltZU1pbWVYbWw7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBMaXN0IGNyZWF0ZUxpc3RGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKExpc3Qpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydExpc3RUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVQYWNrYWdlIGdldE1JTUVQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoTUlNRVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBNSU1FUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBNSU1FUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLX0gLy9NSU1FRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU1pbWVYbWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVNaW1lWG1sSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjJmY2NmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU1pbWVYbWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVNaW1lWG1sSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1JTUVNaW1lWG1sCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFydCgpIDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydCBlUGFydDsKLQotICBwcml2YXRlIFN0cmluZyBwYXJ0OwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1JTUVNaW1lWG1sSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gTUlNRVBhY2thZ2UuTGl0ZXJhbHMuTUlNRV9NSU1FX1hNTDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgZ2V0RVBhcnQoKQotICB7Ci0gICAgaWYgKGVQYXJ0ICE9IG51bGwgJiYgZVBhcnQuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVBhcnQgPSAoSW50ZXJuYWxFT2JqZWN0KWVQYXJ0OwotICAgICAgZVBhcnQgPSAoUGFydCllUmVzb2x2ZVByb3h5KG9sZEVQYXJ0KTsKLSAgICAgIGlmIChlUGFydCAhPSBvbGRFUGFydCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlUGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgYmFzaWNHZXRFUGFydCgpCi0gIHsKLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVQYXJ0KFBhcnQgbmV3RVBhcnQpCi0gIHsKLSAgICBQYXJ0IG9sZEVQYXJ0ID0gZVBhcnQ7Ci0gICAgZVBhcnQgPSBuZXdFUGFydDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJ0KFN0cmluZyBwYXJ0KQotICB7Ci0gICAgdGhpcy5wYXJ0ID0gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQ6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVQYXJ0KCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFUGFydCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUOgotICAgICAgc2V0RVBhcnQoKFBhcnQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MX19FUEFSVDoKLSAgICAgIHJldHVybiBlUGFydCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0UGFydChNSU1FQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgTUlNRUNvbnN0YW50cy5QQVJUX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfQ09OVEVOVF9fRVBBUlQpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgTUlNRUNvbnN0YW50cy5QQVJUX0FUVFJJQlVURSwgZ2V0UGFydCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5NSU1FX1hNTF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci19IC8vTUlNRU1pbWVYbWxJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg1NGYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aXBhcnQgUmVsYXRlZDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsI2dldEVNSU1FUGFydCA8ZW0+RU1JTUUgUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1JTUVNdWx0aXBhcnRSZWxhdGVkCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTUlNRVBhcnQoKSA8ZW0+RU1JTUUgUGFydDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFTUlNRVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZU1JTUVQYXJ0OwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gTUlNRVBhY2thZ2UuTGl0ZXJhbHMuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVNSU1FUGFydCgpCi0gIHsKLSAgICBpZiAoZU1JTUVQYXJ0ID09IG51bGwpCi0gICAgewotICAgICAgZU1JTUVQYXJ0ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE1JTUVQYXJ0LmNsYXNzLCB0aGlzLCBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVNSU1FUGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE1JTUVQYXJ0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IG1pbWVQYXJ0KQotICB7Ci0gICAgZ2V0RU1JTUVQYXJ0KCkuYWRkKG1pbWVQYXJ0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE1JTUVQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RU1JTUVQYXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVNSU1FUGFydCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDoKLSAgICAgIHJldHVybiBnZXRFTUlNRVBhcnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUOgotICAgICAgZ2V0RU1JTUVQYXJ0KCkuY2xlYXIoKTsKLSAgICAgIGdldEVNSU1FUGFydCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUOgotICAgICAgZ2V0RU1JTUVQYXJ0KCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUOgotICAgICAgcmV0dXJuIGVNSU1FUGFydCAhPSBudWxsICYmICFlTUlNRVBhcnQuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgaWYgKE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRy5lcXVhbHMoY2hpbGQuZ2V0TG9jYWxOYW1lKCkpKQotICAgIHsKLSAgICAgIE1JTUVQYXJ0IG1pbWVQYXJ0ID0gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICBtaW1lUGFydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICBtaW1lUGFydC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgIGFkZE1JTUVQYXJ0KG1pbWVQYXJ0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5NVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2NyZWF0ZUVsZW1lbnQoKQotICAgKi8KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBzdXBlci5jcmVhdGVFbGVtZW50KCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldE1JTUVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1JTUVQYXJ0KQotICAgICAgewotICAgICAgICBNSU1FUGFydCBtaW1lUGFydCA9IChNSU1FUGFydClvYmo7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKE1JTUVQYXJ0SW1wbCltaW1lUGFydCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRVBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjVlNDI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTUlNRVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgTUlNRVBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBtaW1lQ29udGVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBtaW1lUGFydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBtaW1lTWltZVhtbEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpbWltZVBhcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaW1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGltaW1lQ29udGVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpbWltZU1pbWVYbWxFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgbGlzdEVEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLSAgICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLSAgICogcGFja2FnZSBVUkkgdmFsdWUuCi0gICAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLSAgICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLSAgICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLSAgICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZU5TX1VSSQotICAgKiBAc2VlICNpbml0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBNSU1FUGFja2FnZUltcGwoKQotICB7Ci0gICAgc3VwZXIoZU5TX1VSSSwgTUlNRUZhY3RvcnkuZUlOU1RBTkNFKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLSAgICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLSAgICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLSAgICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0gICAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLSAgICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLSAgICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotICAgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLSAgICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotICAgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotICAgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotICAgKiB0aG9zZSBvZiBhbm90aGVyLgotICAgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0gICAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2VOU19VUkkKLSAgICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTUlNRVBhY2thZ2UgaW5pdCgpCi0gIHsKLSAgICBpZiAoaXNJbml0ZWQpCi0gICAgICByZXR1cm4gKE1JTUVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1JTUVQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotICAgIE1JTUVQYWNrYWdlSW1wbCB0aGVNSU1FUGFja2FnZSA9IChNSU1FUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgTUlNRVBhY2thZ2VJbXBsCi0gICAgICA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IE1JTUVQYWNrYWdlSW1wbCgpKTsKLQotICAgIGlzSW5pdGVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotICAgIFdTRExQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKLQotICAgIC8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0gICAgdGhlTUlNRVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0gICAgdGhlTUlNRVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotICAgIHRoZU1JTUVQYWNrYWdlLmZyZWV6ZSgpOwotCi0gICAgcmV0dXJuIHRoZU1JTUVQYWNrYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1JTUVDb250ZW50KCkKLSAgewotICAgIHJldHVybiBtaW1lQ29udGVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TUlNRUNvbnRlbnRfVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbWltZUNvbnRlbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1pbWVDb250ZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TUlNRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSltaW1lUGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgewotICAgIHJldHVybiBtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSltaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1JTUVNaW1lWG1sKCkKLSAgewotICAgIHJldHVybiBtaW1lTWltZVhtbEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1pbWVNaW1lWG1sRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU1JTUVQYXJ0KCkKLSAgewotICAgIHJldHVybiBpbWltZVBhcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgewotICAgIHJldHVybiBpbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU1JTUVDb250ZW50KCkKLSAgewotICAgIHJldHVybiBpbWltZUNvbnRlbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU1JTUVNaW1lWG1sKCkKLSAgewotICAgIHJldHVybiBpbWltZU1pbWVYbWxFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFRGF0YVR5cGUgZ2V0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbGlzdEVEYXRhVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVGYWN0b3J5IGdldE1JTUVGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiAoTUlNRUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotICAgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzQ3JlYXRlZCkKLSAgICAgIHJldHVybjsKLSAgICBpc0NyZWF0ZWQgPSB0cnVlOwotCi0gICAgLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0gICAgbWltZUNvbnRlbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUlNRV9DT05URU5UKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG1pbWVDb250ZW50RUNsYXNzLCBNSU1FX0NPTlRFTlRfX1RZUEUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UobWltZUNvbnRlbnRFQ2xhc3MsIE1JTUVfQ09OVEVOVF9fRVBBUlQpOwotCi0gICAgbWltZVBhcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUlNRV9QQVJUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG1pbWVQYXJ0RUNsYXNzLCBNSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTKTsKLQotICAgIG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JTUVfTVVMVElQQVJUX1JFTEFURUQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UobWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MsIE1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQpOwotCi0gICAgbWltZU1pbWVYbWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUlNRV9NSU1FX1hNTCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtaW1lTWltZVhtbEVDbGFzcywgTUlNRV9NSU1FX1hNTF9fRVBBUlQpOwotCi0gICAgaW1pbWVQYXJ0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElNSU1FX1BBUlQpOwotCi0gICAgaW1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzID0gY3JlYXRlRUNsYXNzKElNSU1FX01VTFRJUEFSVF9SRUxBVEVEKTsKLQotICAgIGltaW1lQ29udGVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTUlNRV9DT05URU5UKTsKLQotICAgIGltaW1lTWltZVhtbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTUlNRV9NSU1FX1hNTCk7Ci0KLSAgICAvLyBDcmVhdGUgZGF0YSB0eXBlcwotICAgIGxpc3RFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoTElTVCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0gICAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgcmV0dXJuOwotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0gICAgc2V0TmFtZShlTkFNRSk7Ci0gICAgc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0gICAgc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0gICAgV1NETFBhY2thZ2UgdGhlV1NETFBhY2thZ2UgPSAoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0gICAgbWltZUNvbnRlbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgbWltZUNvbnRlbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJTUlNRUNvbnRlbnQoKSk7Ci0gICAgbWltZVBhcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgbWltZVBhcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJTUlNRVBhcnQoKSk7Ci0gICAgbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQoKSk7Ci0gICAgbWltZU1pbWVYbWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgbWltZU1pbWVYbWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJTUlNRU1pbWVYbWwoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotICAgIGluaXRFQ2xhc3MobWltZUNvbnRlbnRFQ2xhc3MsIE1JTUVDb250ZW50LmNsYXNzLCAiTUlNRUNvbnRlbnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE1JTUVDb250ZW50X1R5cGUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidHlwZSIsIG51bGwsIDAsIDEsIE1JTUVDb250ZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRNSU1FQ29udGVudF9FUGFydCgpLAotICAgICAgdGhlV1NETFBhY2thZ2UuZ2V0UGFydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUGFydCIsIG51bGwsIDAsIDEsIE1JTUVDb250ZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihtaW1lQ29udGVudEVDbGFzcywgbnVsbCwgInNldFBhcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24obWltZUNvbnRlbnRFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXRQYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MobWltZVBhcnRFQ2xhc3MsIE1JTUVQYXJ0LmNsYXNzLCAiTUlNRVBhcnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCksCi0gICAgICBudWxsLAotICAgICAgImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiLCBudWxsLCAwLCAtMSwgTUlNRVBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihtaW1lUGFydEVDbGFzcywgbnVsbCwgImFkZEV4dGVuc2liaWxpdHlFbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGVXU0RMUGFja2FnZS5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSwgImV4dGVuc2liaWxpdHlFbGVtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24obWltZVBhcnRFQ2xhc3MsIHRoaXMuZ2V0TGlzdCgpLCAiZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcywKLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkLmNsYXNzLAotICAgICAgIk1JTUVNdWx0aXBhcnRSZWxhdGVkIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKSwKLSAgICAgIHRoaXMuZ2V0TUlNRVBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU1JTUVQYXJ0IiwgbnVsbCwgMCwgLTEsIE1JTUVNdWx0aXBhcnRSZWxhdGVkLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24obWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MsIG51bGwsICJhZGRNSU1FUGFydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTUlNRVBhcnQoKSwgIm1pbWVQYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24obWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MsIHRoaXMuZ2V0TGlzdCgpLCAiZ2V0TUlNRVBhcnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MobWltZU1pbWVYbWxFQ2xhc3MsIE1JTUVNaW1lWG1sLmNsYXNzLCAiTUlNRU1pbWVYbWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1JTUVNaW1lWG1sX0VQYXJ0KCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0IiwgbnVsbCwgMCwgMSwgTUlNRU1pbWVYbWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihtaW1lTWltZVhtbEVDbGFzcywgbnVsbCwgInNldFBhcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24obWltZU1pbWVYbWxFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXRQYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpbWltZVBhcnRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydC5jbGFzcywKLSAgICAgICJJTUlNRVBhcnQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGltaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkLmNsYXNzLAotICAgICAgIklNSU1FTXVsdGlwYXJ0UmVsYXRlZCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaW1pbWVDb250ZW50RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQuY2xhc3MsCi0gICAgICAiSU1JTUVDb250ZW50IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpbWltZU1pbWVYbWxFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbC5jbGFzcywKLSAgICAgICJJTUlNRU1pbWVYbWwiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCi0gICAgaW5pdEVEYXRhVHlwZShsaXN0RURhdGFUeXBlLCBMaXN0LmNsYXNzLCAiTGlzdCIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZQotICAgIGNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotICB9Ci19IC8vTUlNRVBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVQYXJ0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FUGFydEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhYWZjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVQYXJ0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVQYXJ0SW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1JTUVQYXJ0Ci17Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzOwotCi0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1JTUVQYXJ0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gTUlNRVBhY2thZ2UuTGl0ZXJhbHMuTUlNRV9QQVJUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICBpZiAoZUV4dGVuc2liaWxpdHlFbGVtZW50cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsIHRoaXMsIE1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMpOwotICAgIH0KLSAgICByZXR1cm4gZUV4dGVuc2liaWxpdHlFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KQotICB7Ci0gICAgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuYWRkKGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgcmV0dXJuIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM6Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgcmV0dXJuIGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgIT0gbnVsbCAmJiAhZUV4dGVuc2liaWxpdHlFbGVtZW50cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsaWF0aW9uOiBET00gLT4gTU9ERUwKLSAgLy8KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGlmICghV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSkpCi0gICAgewotICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB1c2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICAgICAgICA/ICgoV1NETEZhY3RvcnlJbXBsKVdTRExGYWN0b3J5LmVJTlNUQU5DRSkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZ2V0TmFtZXNwYWNlKGNoaWxkKSwgZ2V0TG9jYWxOYW1lKGNoaWxkKSkKLSAgICAgICAgOiAoKFdTRExGYWN0b3J5SW1wbClXU0RMRmFjdG9yeS5lSU5TVEFOQ0UpLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKCkKLSAgewotICAgIC8vIFVzZSBleHRlbnNpb24gZmFjdG9yaWVzIGJ5IGRlZmF1bHQuCi0gICAgcmV0dXJuIGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSA9PSBudWxsID8gdHJ1ZSA6ICgoRGVmaW5pdGlvbkltcGwpZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKS5nZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBNSU1FQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCNjcmVhdGVFbGVtZW50KCkKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gc3VwZXIuY3JlYXRlRWxlbWVudCgpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL01JTUVQYXJ0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlM2I3YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLio7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTUlNRUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIE1JTUVQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVBZGFwdGVyRmFjdG9yeSgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gTUlNRVBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTUlNRVN3aXRjaCBtb2RlbFN3aXRjaCA9IG5ldyBNSU1FU3dpdGNoKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FQ29udGVudChNSU1FQ29udGVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNSU1FQ29udGVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlTUlNRVBhcnQoTUlNRVBhcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTUlNRVBhcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU1JTUVNdWx0aXBhcnRSZWxhdGVkKE1JTUVNdWx0aXBhcnRSZWxhdGVkIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FTWltZVhtbChNSU1FTWltZVhtbCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNSU1FTWltZVhtbEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVQYXJ0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FUGFydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVNdWx0aXBhcnRSZWxhdGVkKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVDb250ZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FQ29udGVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVNaW1lWG1sKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FTWltZVhtbEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLSAgICAgIH0KLSAgICB9OwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotICAgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLSAgICByZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCA8ZW0+Q29udGVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTUlNRUNvbnRlbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0IDxlbT5QYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNSU1FUGFydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwgPGVtPk1pbWUgWG1sPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNSU1FTWltZVhtbEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCA8ZW0+SU1JTUUgUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTUlNRVBhcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCA8ZW0+SU1JTUUgQ29udGVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTUlNRUNvbnRlbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwgPGVtPklNSU1FIE1pbWUgWG1sPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlNSU1FTWltZVhtbEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL01JTUVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MzI3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgTUlNRUNvbnN0YW50cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX0VMRU1FTlRfVEFHID0gImNvbnRlbnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9YTUxfRUxFTUVOVF9UQUcgPSAibWltZVhtbCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRyA9ICJtdWx0aXBhcnRSZWxhdGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRfRUxFTUVOVF9UQUcgPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0FUVFJJQlVURSA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfQVRUUklCVVRFID0gInR5cGUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgPyBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA6IG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2I4YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotewotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIGlmIChNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBpZiAoTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVDb250ZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChNSU1FQ29uc3RhbnRzLk1JTUVfWE1MX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChNSU1FQ29uc3RhbnRzLk1VTFRJUEFSVF9SRUxBVEVEX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0gICAgICB9Ci0gICAgICAvKiBUT0RPIC0gZml4IHRoZSByb3NlIG1vZGVsCi0gICAgICAgZWxzZSBpZiAoInBhcnQiLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgIHsKLSAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICAgfQotICAgICAgICovCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbG9jYWxOYW1lOiAiICsgbG9jYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuIFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbmFtZXNwYWNlOiAiICsgbmFtZXNwYWNlKTsKLSAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRVN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTcxOGIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRVN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgTUlNRVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRVN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gTUlNRVBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVDoKLSAgICAgIHsKLSAgICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSAoTUlNRUNvbnRlbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNSU1FQ29udGVudChtaW1lQ29udGVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlNSU1FQ29udGVudChtaW1lQ29udGVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lQ29udGVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUOgotICAgICAgewotICAgICAgICBNSU1FUGFydCBtaW1lUGFydCA9IChNSU1FUGFydCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1JTUVQYXJ0KG1pbWVQYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1JTUVQYXJ0KG1pbWVQYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVQYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEOgotICAgICAgewotICAgICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lTXVsdGlwYXJ0UmVsYXRlZCA9IChNSU1FTXVsdGlwYXJ0UmVsYXRlZCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1JTUVNdWx0aXBhcnRSZWxhdGVkKG1pbWVNdWx0aXBhcnRSZWxhdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1JTUVNdWx0aXBhcnRSZWxhdGVkKG1pbWVNdWx0aXBhcnRSZWxhdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVNdWx0aXBhcnRSZWxhdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MOgotICAgICAgewotICAgICAgICBNSU1FTWltZVhtbCBtaW1lTWltZVhtbCA9IChNSU1FTWltZVhtbCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1JTUVNaW1lWG1sKG1pbWVNaW1lWG1sKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1JTUVNaW1lWG1sKG1pbWVNaW1lWG1sKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVNaW1lWG1sKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29udGVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FQ29udGVudChNSU1FQ29udGVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU1JTUVQYXJ0KE1JTUVQYXJ0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FTXVsdGlwYXJ0UmVsYXRlZChNSU1FTXVsdGlwYXJ0UmVsYXRlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pbWUgWG1sPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlTUlNRU1pbWVYbWwoTUlNRU1pbWVYbWwgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgUGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIFBhcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJTUlNRVBhcnQoamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgQ29udGVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FQ29udGVudChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIE1pbWUgWG1sPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVNaW1lWG1sKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9NSU1FU3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRkOWQxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBBZGRyZXNzKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVNPQVBBZGRyZXNzIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBBZGRyZXNzIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi17Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRMb2NhdGlvblVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gU09BUEFkZHJlc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDJhZmUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQmluZGluZygpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLklTT0FQQmluZGluZyIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQQmluZGluZyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotewotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VHJhbnNwb3J0VVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRUcmFuc3BvcnRVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nI2dldFRyYW5zcG9ydFVSSSA8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFRyYW5zcG9ydFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VHJhbnNwb3J0VVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRTdHlsZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCaW5kaW5nX1N0eWxlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRTdHlsZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRTdHlsZShTdHJpbmcgdmFsdWUpOwotfSAvLyBTT0FQQmluZGluZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZWU3MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9keTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCb2R5KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVNPQVBCb2R5IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBCb2R5IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5Ci17Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVc2UoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQm9keV9Vc2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVzZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VXNlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2VVUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQm9keV9OYW1lc3BhY2VVUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVN0cmluZyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0czwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydHM8L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCb2R5X0VQYXJ0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFUGFydHMoKTsKLX0gLy8gU09BUEJvZHkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBlMzY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeQotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYWN0b3J5SW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEJpbmRpbmcgY3JlYXRlU09BUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Cb2R5PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Cb2R5PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQQm9keSBjcmVhdGVTT0FQQm9keSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBCYXNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgQmFzZTwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEhlYWRlckJhc2UgY3JlYXRlU09BUEhlYWRlckJhc2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBGYXVsdCBjcmVhdGVTT0FQRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUE9wZXJhdGlvbiBjcmVhdGVTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEFkZHJlc3MgY3JlYXRlU09BUEFkZHJlc3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEhlYWRlckZhdWx0IGNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQSGVhZGVyIGNyZWF0ZVNPQVBIZWFkZXIoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQUGFja2FnZSBnZXRTT0FQUGFja2FnZSgpOwotfSAvL1NPQVBGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWVlN2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQRmF1bHQoKQotICogQG1vZGVsIGZlYXR1cmVzPSJlRW5jb2RpbmdTdHlsZXMiIAotICogICAgICAgIGVFbmNvZGluZ1N0eWxlc0RhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVN0cmluZyIgZUVuY29kaW5nU3R5bGVzTWFueT0idHJ1ZSIgZUVuY29kaW5nU3R5bGVzU3VwcHJlc3NlZEdldFZpc2liaWxpdHk9InRydWUiIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5JU09BUEZhdWx0IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBGYXVsdCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLXsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVzZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBGYXVsdF9Vc2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVzZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldFVzZSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVzZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEZhdWx0X05hbWVzcGFjZVVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQRmF1bHRfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gU09BUEZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZTY1NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciNnZXRIZWFkZXJGYXVsdHMgPGVtPkhlYWRlciBGYXVsdHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLklTT0FQSGVhZGVyIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBIZWFkZXIgZXh0ZW5kcyBTT0FQSGVhZGVyQmFzZSwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SGVhZGVyIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhlYWRlciBGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SGVhZGVyIEZhdWx0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEhlYWRlckZhdWx0cygpOwotCi19IC8vIFNPQVBIZWFkZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmNmNzFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgQmFzZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRNZXNzYWdlIDxlbT5NZXNzYWdlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0UGFydCA8ZW0+UGFydDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBIZWFkZXJCYXNlIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVc2UoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVzZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VXNlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2VVUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVN0cmluZyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFTWVzc2FnZShNZXNzYWdlKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTWVzc2FnZSBnZXRFTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVQYXJ0KFBhcnQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQYXJ0IGdldEVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVQYXJ0KFBhcnQgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NZXNzYWdlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TWVzc2FnZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckJhc2VfTWVzc2FnZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldE1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldE1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1lc3NhZ2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRNZXNzYWdlKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFBhcnQoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRQYXJ0IDxlbT5QYXJ0PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UGFydChTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUxpc3QiIG1hbnk9ImZhbHNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBMaXN0IGdldEVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwgZW5jb2RpbmdTdHlsZXNUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JTGlzdCIgZW5jb2RpbmdTdHlsZXNNYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbmNvZGluZ1N0eWxlcyhMaXN0IGVuY29kaW5nU3R5bGVzKTsKLQotfSAvLyBTT0FQSGVhZGVyQmFzZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlOGNiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEZhdWx0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyRmF1bHQoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVNPQVBIZWFkZXJGYXVsdCIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQSGVhZGVyRmF1bHQgZXh0ZW5kcyBTT0FQSGVhZGVyQmFzZSwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0Ci17Ci19IC8vIFNPQVBIZWFkZXJGYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2ExMmJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTb2FwQWN0aW9uVVJJIDxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBPcGVyYXRpb24oKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5JU09BUE9wZXJhdGlvbiIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQT3BlcmF0aW9uIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24KLXsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFNvYXBBY3Rpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFNvYXBBY3Rpb25VUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24jZ2V0U29hcEFjdGlvblVSSSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRTb2FwQWN0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRTb2FwQWN0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRTdHlsZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBPcGVyYXRpb25fU3R5bGUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFN0eWxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHZhbHVlKTsKLX0gLy8gU09BUE9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNzNhYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeQotICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZQotewotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTkFNRSA9ICJzb2FwIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvU09BUCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1BSRUZJWCA9ICJzb2FwIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQmluZGluZ0ltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElOR19fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfX1NUWUxFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwgPGVtPkJvZHk8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEJvZHkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZID0gMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX1VTRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVMgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRVBBUlRTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Qm9keTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwgPGVtPkhlYWRlciBCYXNlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0UgPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19VU0UgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVMgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19QQVJUID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRVBBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXIgQmFzZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUID0gMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9GQVVMVF9fVVNFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX05BTUUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUE9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT04gPSA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX09QRVJBVElPTl9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX1NUWUxFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEFkZHJlc3NJbXBsIDxlbT5BZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEFkZHJlc3NJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTUyA9IDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTU19fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9BRERSRVNTX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZGRyZXNzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJGYXVsdEltcGwgPGVtPkhlYWRlciBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJGYXVsdEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUID0gNjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBTT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlQgPSBTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fUkVRVUlSRUQgPSBTT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUgPSBTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fVVNFID0gU09BUF9IRUFERVJfQkFTRV9fVVNFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19OQU1FU1BBQ0VfVVJJID0gU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTID0gU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fTUVTU0FHRSA9IFNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX1BBUlQgPSBTT0FQX0hFQURFUl9CQVNFX19QQVJUOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fRU1FU1NBR0UgPSBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX0VQQVJUID0gU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IFNPQVBfSEVBREVSX0JBU0VfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckltcGwgPGVtPkhlYWRlcjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXIoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVIgPSA3OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFNPQVBfSEVBREVSX0JBU0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fRUxFTUVOVCA9IFNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19SRVFVSVJFRCA9IFNPQVBfSEVBREVSX0JBU0VfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0VMRU1FTlRfVFlQRSA9IFNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19VU0UgPSBTT0FQX0hFQURFUl9CQVNFX19VU0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX05BTUVTUEFDRV9VUkkgPSBTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVMgPSBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19NRVNTQUdFID0gU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fUEFSVCA9IFNPQVBfSEVBREVSX0JBU0VfX1BBUlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19FTUVTU0FHRSA9IFNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fRVBBUlQgPSBTT0FQX0hFQURFUl9CQVNFX19FUEFSVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhlYWRlciBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTID0gU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlcjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UID0gU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyA8ZW0+SVNPQVAgQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9CSU5ESU5HID0gODsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyA8ZW0+SVNPQVAgQWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQWRkcmVzcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9BRERSRVNTID0gOTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSA8ZW0+SVNPQVAgQm9keTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9CT0RZID0gMTA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBCb2R5PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IDxlbT5JU09BUCBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX0ZBVUxUID0gMTE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBGYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5JU09BUCBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX09QRVJBVElPTiA9IDEyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEhlYWRlckZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUl9GQVVMVCA9IDEzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIDxlbT5JU09BUCBIZWFkZXI8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQSGVhZGVyKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUiA9IDE0OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5JU3RyaW5nPC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS5sYW5nLlN0cmluZwotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU3RyaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTVFJJTkcgPSAxNTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5CaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQQmluZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0eWxlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRTdHlsZSgpCi0gICAqIEBzZWUgI2dldFNPQVBCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQmluZGluZ19TdHlsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkgPGVtPkJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Qm9keTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBCb2R5KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldFVzZSA8ZW0+VXNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRVc2UoKQotICAgKiBAc2VlICNnZXRTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfVXNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBzZWUgI2dldFNPQVBCb2R5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9OYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldEVFbmNvZGluZ1N0eWxlcygpCi0gICAqIEBzZWUgI2dldFNPQVBCb2R5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBhcnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFUGFydHMoKQotICAgKiBAc2VlICNnZXRTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U09BUEJvZHlfRVBhcnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSA8ZW0+SGVhZGVyIEJhc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQSGVhZGVyQmFzZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRVc2UgPGVtPlVzZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX1VzZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldE1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5NZXNzYWdlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRNZXNzYWdlKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0UGFydCA8ZW0+UGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldFBhcnQoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FTWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RU1lc3NhZ2UoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVQYXJ0KCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQgPGVtPkZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXRVc2UoKQotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9Vc2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdAotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldFNPQVBGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEZhdWx0X05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24gPGVtPk9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTb2FwQWN0aW9uVVJJIDxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24jZ2V0U29hcEFjdGlvblVSSSgpCi0gICAqIEBzZWUgI2dldFNPQVBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0eWxlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlKCkKLSAgICogQHNlZSAjZ2V0U09BUE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MgPGVtPkFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzI2dldExvY2F0aW9uVVJJKCkKLSAgICogQHNlZSAjZ2V0U09BUEFkZHJlc3MoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPkhlYWRlciBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0U09BUEhlYWRlckZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyIDxlbT5IZWFkZXI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQSGVhZGVyKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciNnZXRIZWFkZXJGYXVsdHMgPGVtPkhlYWRlciBGYXVsdHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkhlYWRlciBGYXVsdHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIjZ2V0SGVhZGVyRmF1bHRzKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlcigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgPGVtPklTT0FQIEJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmciCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgPGVtPklTT0FQIEFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEFkZHJlc3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgPGVtPklTT0FQIEJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQm9keTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEJvZHkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IDxlbT5JU09BUCBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU09BUCBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElTT0FQRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiA8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBIZWFkZXJGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIDxlbT5JU09BUCBIZWFkZXI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEhlYWRlcigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YS5sYW5nLlN0cmluZyA8ZW0+SVN0cmluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+SVN0cmluZzwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0SVN0cmluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQRmFjdG9yeSBnZXRTT0FQRmFjdG9yeSgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gICAqIDx1bD4KLSAgICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAgICogPC91bD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludGVyZmFjZSBMaXRlcmFscwotICB7Ci0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCaW5kaW5nSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfQklORElORyA9IGVJTlNUQU5DRS5nZXRTT0FQQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQklORElOR19fU1RZTEUgPSBlSU5TVEFOQ0UuZ2V0U09BUEJpbmRpbmdfU3R5bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwgPGVtPkJvZHk8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQQm9keSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0JPRFkgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9CT0RZX19VU0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHlfVXNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUyA9IGVJTlNUQU5DRS5nZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0JPRFlfX0VQQVJUUyA9IGVJTlNUQU5DRS5nZXRTT0FQQm9keV9FUGFydHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwgPGVtPkhlYWRlciBCYXNlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9IRUFERVJfQkFTRSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19VU0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfVXNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19QQVJUID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFNPQVBfSEVBREVSX0JBU0VfX0VQQVJUID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0U09BUEZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfRkFVTFRfX1VTRSA9IGVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfVXNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyA9IGVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0ZBVUxUX19OQU1FID0gZUlOU1RBTkNFLmdldFNPQVBGYXVsdF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUE9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUE9wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0U09BUE9wZXJhdGlvbl9Tb2FwQWN0aW9uVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9PUEVSQVRJT05fX1NUWUxFID0gZUlOU1RBTkNFLmdldFNPQVBPcGVyYXRpb25fU3R5bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQWRkcmVzc0ltcGwgPGVtPkFkZHJlc3M8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQWRkcmVzc0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQQWRkcmVzcygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0FERFJFU1MgPSBlSU5TVEFOQ0UuZ2V0U09BUEFkZHJlc3MoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyRmF1bHRJbXBsIDxlbT5IZWFkZXIgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyRmF1bHRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfSEVBREVSX0ZBVUxUID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJJbXBsIDxlbT5IZWFkZXI8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVySW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXIoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9IRUFERVIgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhlYWRlciBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUyA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5JU09BUCBCaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEJpbmRpbmcoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNPQVBfQklORElORyA9IGVJTlNUQU5DRS5nZXRJU09BUEJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyA8ZW0+SVNPQVAgQWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBBZGRyZXNzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0FERFJFU1MgPSBlSU5TVEFOQ0UuZ2V0SVNPQVBBZGRyZXNzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgPGVtPklTT0FQIEJvZHk8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQm9keSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU09BUF9CT0RZID0gZUlOU1RBTkNFLmdldElTT0FQQm9keSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCA8ZW0+SVNPQVAgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0ZBVUxUID0gZUlOU1RBTkNFLmdldElTT0FQRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5JU09BUCBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNPQVBfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldElTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEhlYWRlckZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0hFQURFUl9GQVVMVCA9IGVJTlNUQU5DRS5nZXRJU09BUEhlYWRlckZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciA8ZW0+SVNPQVAgSGVhZGVyPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQSGVhZGVyKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0hFQURFUiA9IGVJTlNUQU5DRS5nZXRJU09BUEhlYWRlcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPklTdHJpbmc8L2VtPicgZGF0YSB0eXBlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVN0cmluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBJU1RSSU5HID0gZUlOU1RBTkNFLmdldElTdHJpbmcoKTsKLQotICB9Ci0KLX0gLy9TT0FQUGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvZ2VuZXJhdG9yL1NPQVBDb250ZW50R2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9nZW5lcmF0b3IvU09BUENvbnRlbnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE5MTkwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9nZW5lcmF0b3IvU09BUENvbnRlbnRHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci0KLQotcHVibGljIGNsYXNzIFNPQVBDb250ZW50R2VuZXJhdG9yIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUFRJT05fTk9UX1NFVCA9IC0xOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0RPQ1VNRU5UID0gMTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9SUEMgPSAyOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRV9MSVRFUkFMID0gMTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VfRU5DT0RFRCA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgc3R5bGVPcHRpb24gPSBPUFRJT05fTk9UX1NFVDsKLQotICBwcml2YXRlIGludCB1c2VPcHRpb24gPSBPUFRJT05fTk9UX1NFVDsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZVZhbHVlID0gIiI7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBhZGRyZXNzTG9jYXRpb24gPSBDb250ZW50R2VuZXJhdG9yLkFERFJFU1NfTE9DQVRJT047Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSByZXF1aXJlZE5hbWVzcGFjZXMgPSB7ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB9OwotCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nW10gcHJlZmVycmVkTmFtZXNwYWNlUHJlZml4ZXMgPSB7ICJzb2FwIiB9OwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXF1aXJlZE5hbWVzcGFjZXMoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVkTmFtZXNwYWNlczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZmVycmVkTmFtZXNwYWNlUHJlZml4KFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIpKQotICAgIHsKLSAgICAgIHJldHVybiAic29hcCI7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoaW50IHN0eWxlKQotICB7Ci0gICAgc3R5bGVPcHRpb24gPSBzdHlsZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVzZShpbnQgdXNlKQotICB7Ci0gICAgdXNlT3B0aW9uID0gdXNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWRkcmVzc0xvY2F0aW9uKFN0cmluZyBhZGRyZXNzTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmFkZHJlc3NMb2NhdGlvbiA9IGFkZHJlc3NMb2NhdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlUG9ydENvbnRlbnQoUG9ydCBwb3J0KQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMocG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICBzb2FwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShhZGRyZXNzTG9jYXRpb24pOwotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nQ29udGVudChCaW5kaW5nIGJpbmRpbmcsIFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBzb2FwRmFjdG9yeS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgIHNvYXBCaW5kaW5nLnNldFN0eWxlKChnZXRTdHlsZU9wdGlvbihiaW5kaW5nKSA9PSBTVFlMRV9ET0NVTUVOVCkgPyAiZG9jdW1lbnQiIDogInJwYyIpOwotICAgIHNvYXBCaW5kaW5nLnNldFRyYW5zcG9ydFVSSSgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIik7Ci0KLSAgICBiaW5kaW5nLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCaW5kaW5nKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmdPcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLQotICAgIFN0cmluZyBzb2FwQWN0aW9uVmFsdWUgPSBnZXROYW1lc3BhY2UoYmluZGluZ09wZXJhdGlvbik7Ci0gICAgaWYgKCFzb2FwQWN0aW9uVmFsdWUuZW5kc1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBzb2FwQWN0aW9uVmFsdWUgKz0gIi8iOwotICAgIH0KLSAgICBzb2FwQWN0aW9uVmFsdWUgKz0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShzb2FwQWN0aW9uVmFsdWUpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0lucHV0Q29udGVudChCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0LCBJbnB1dCBpbnB1dCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nSW5wdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBTT0FQRmFjdG9yeSBzb2FwRmFjdG9yeSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRTsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKChnZXRVc2VPcHRpb24obnVsbCkgPT0gVVNFX0VOQ09ERUQpID8gImVuY29kZWQiIDogImxpdGVyYWwiKTsKLSAgICBpZiAoZ2V0VXNlT3B0aW9uKGJpbmRpbmdJbnB1dCkgPT0gVVNFX0VOQ09ERUQgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ0lucHV0KSA9PSBTVFlMRV9SUEMpCi0gICAgewotICAgICAgTGlzdCBlbmNvZGluZ0xpc3QgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgICAgZW5jb2RpbmdMaXN0LmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICAgIHNvYXBCb2R5LnNldEVuY29kaW5nU3R5bGVzKGVuY29kaW5nTGlzdCk7Ci0gICAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoZ2V0TmFtZXNwYWNlKGJpbmRpbmdJbnB1dCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ0lucHV0KSA9PSBVU0VfTElURVJBTCAmJiBnZXRTdHlsZU9wdGlvbihiaW5kaW5nSW5wdXQpID09IFNUWUxFX1JQQykKLSAgICB7Ci0gICAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoZ2V0TmFtZXNwYWNlKGJpbmRpbmdJbnB1dCkpOwotICAgIH0KLQotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPdXRwdXRDb250ZW50KEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCwgT3V0cHV0IG91dHB1dCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nT3V0cHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPdXRwdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFOwotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEZhY3RvcnkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoKGdldFVzZU9wdGlvbihiaW5kaW5nT3V0cHV0KSA9PSBVU0VfRU5DT0RFRCkgPyAiZW5jb2RlZCIgOiAibGl0ZXJhbCIpOwotICAgIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ091dHB1dCkgPT0gVVNFX0VOQ09ERUQgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ091dHB1dCkgPT0gU1RZTEVfUlBDKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdMaXN0ID0gbmV3IEJhc2ljRUxpc3QoKTsKLSAgICAgIGVuY29kaW5nTGlzdC5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgICBzb2FwQm9keS5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ0xpc3QpOwotICAgICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nT3V0cHV0KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldFVzZU9wdGlvbihiaW5kaW5nT3V0cHV0KSA9PSBVU0VfTElURVJBTCAmJiBnZXRTdHlsZU9wdGlvbihiaW5kaW5nT3V0cHV0KSA9PSBTVFlMRV9SUEMpCi0gICAgewotICAgICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nT3V0cHV0KSk7Ci0gICAgfQotCi0gICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCwgRmF1bHQgZmF1bHQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ0ZhdWx0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdGYXVsdC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgIHNvYXBGYXVsdC5zZXRVc2UoKGdldFVzZU9wdGlvbihiaW5kaW5nRmF1bHQpID09IFVTRV9FTkNPREVEKSA/ICJlbmNvZGVkIiA6ICJsaXRlcmFsIik7Ci0gICAgc29hcEZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICAvLwlzb2FwRmF1bHQuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nRmF1bHQpKTsKLQotICAgIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ0ZhdWx0KSA9PSBVU0VfRU5DT0RFRCAmJiBnZXRTdHlsZU9wdGlvbihiaW5kaW5nRmF1bHQpID09IFNUWUxFX1JQQykKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nTGlzdCA9IG5ldyBCYXNpY0VMaXN0KCk7Ci0gICAgICBlbmNvZGluZ0xpc3QuYWRkKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIpOwotICAgICAgc29hcEZhdWx0LnNldEVuY29kaW5nU3R5bGVzKGVuY29kaW5nTGlzdCk7Ci0gICAgfQotCi0gICAgYmluZGluZ0ZhdWx0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBGYXVsdCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXROYW1lc3BhY2UoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlVmFsdWUuZXF1YWxzKCIiKSAmJiB3c2RsRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZVZhbHVlID0gd3NkbEVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBpZiAobmFtZXNwYWNlVmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2VWYWx1ZSA9ICIiOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lc3BhY2VWYWx1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoTGlzdCBvcmlnaW5hbExpc3QsIExpc3QgcmVtb3ZlTGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIHJlbW92ZUl0ID0gcmVtb3ZlTGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChyZW1vdmVJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgb3JpZ2luYWxMaXN0LnJlbW92ZShyZW1vdmVJdC5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgQmluZGluZyBnZXRCaW5kaW5nT2JqZWN0KE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIE9iamVjdCBwYXJlbnQgPSBnZW5lcmljQmluZGluZ09iamVjdDsKLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsICYmIGluZGV4IDwgNSkKLSAgICB7Ci0gICAgICBwYXJlbnQgPSBnZXRHZW5lcmljQmluZGluZ09iamVjdFBhcmVudChwYXJlbnQpOwotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpID8gKEJpbmRpbmcpcGFyZW50IDogbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IGdldEdlbmVyaWNCaW5kaW5nT2JqZWN0UGFyZW50KE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIE9iamVjdCBwYXJlbnQgPSBudWxsOwotCi0gICAgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nT3BlcmF0aW9uKWdlbmVyaWNCaW5kaW5nT2JqZWN0KS5nZXRDb250YWluZXIoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgewotICAgICAgICBwYXJlbnQgPSAoKEJpbmRpbmdJbnB1dClnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ091dHB1dClnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nRmF1bHQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRTdHlsZU9wdGlvbihPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBpZiAoc3R5bGVPcHRpb24gPT0gT1BUSU9OX05PVF9TRVQgJiYgZ2VuZXJpY0JpbmRpbmdPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBpbml0KCkgd2FzIG5ldmVyIGNhbGxlZCwgdHJ5IHRvIGRldGVybWluZSB0aGUgJ3N0eWxlJyBiYXNlZCBvbiB3aGF0IHdlIGhhdmUva25vdwotICAgICAgQmluZGluZyBiaW5kaW5nID0gZ2V0QmluZGluZ09iamVjdChnZW5lcmljQmluZGluZ09iamVjdCk7Ci0KLSAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHN0eWxlIGZyb20gdGhlIEJpbmRpbmcgT2JqZWN0Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgdmFsdWVzSXQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJzdHlsZSIpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgd2hpbGUgKHZhbHVlc0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzdHlsZSA9IChTdHJpbmcpdmFsdWVzSXQubmV4dCgpOwotCi0gICAgICAgICAgaWYgKHN0eWxlLmVxdWFscygiZG9jdW1lbnQiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzdHlsZU9wdGlvbiA9IFNUWUxFX0RPQ1VNRU5UOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChzdHlsZS5lcXVhbHMoInJwYyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0eWxlT3B0aW9uID0gU1RZTEVfUlBDOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChzdHlsZU9wdGlvbiAhPSBPUFRJT05fTk9UX1NFVCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3R5bGVPcHRpb24gPT0gT1BUSU9OX05PVF9TRVQpCi0gICAgewotICAgICAgc3R5bGVPcHRpb24gPSBTVFlMRV9ET0NVTUVOVDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVPcHRpb247Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRVc2VPcHRpb24oT2JqZWN0IGdlbmVyaWNCaW5kaW5nT2JqZWN0KQotICB7Ci0gICAgaWYgKHVzZU9wdGlvbiA9PSBPUFRJT05fTk9UX1NFVCkKLSAgICB7Ci0gICAgICAvLyBpbml0KCkgd2FzIG5ldmVyIGNhbGxlZCwgdHJ5IHRvIGRldGVybWluZSB0aGUgJ3VzZScgYmFzZWQgb24gd2hhdCB3ZSBoYXZlL2tub3cKLSAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VSZWZJdCA9IGdldE1lc3NhZ2VSZWZlcmVuY2VCaW5kaW5nT2JqZWN0cyhnZW5lcmljQmluZGluZ09iamVjdCkuaXRlcmF0b3IoKTsKLQotICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgdXNlIGZyb20gdGhlIGxpc3Qgb2YgQmluZGluZ0lucHV0cywgQmluZGluZ091dHB1dHMsIGFuZCBCaW5kaW5nRmF1bHRzCi0gICAgICB3aGlsZSAobWVzc2FnZVJlZkl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG1lc3NhZ2VSZWYgPSBtZXNzYWdlUmVmSXQubmV4dCgpOwotICAgICAgICBMaXN0IHZhbHVlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgbGlzdCA9ICgoQmluZGluZ0lucHV0KW1lc3NhZ2VSZWYpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICB2YWx1ZXMgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJ1c2UiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgbGlzdCA9ICgoQmluZGluZ091dHB1dCltZXNzYWdlUmVmKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgdmFsdWVzID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShsaXN0LCAidXNlIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgbGlzdCA9ICgoQmluZGluZ0ZhdWx0KW1lc3NhZ2VSZWYpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICB2YWx1ZXMgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJ1c2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEl0ZXJhdG9yIHZhbHVlc0l0ID0gdmFsdWVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlICh2YWx1ZXNJdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdXNlID0gKFN0cmluZyl2YWx1ZXNJdC5uZXh0KCk7Ci0KLSAgICAgICAgICBpZiAodXNlLmVxdWFscygibGl0ZXJhbCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVzZU9wdGlvbiA9IFVTRV9MSVRFUkFMOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICh1c2UuZXF1YWxzKCJlbmNvZGVkIikpCi0gICAgICAgICAgewotICAgICAgICAgICAgdXNlT3B0aW9uID0gVVNFX0VOQ09ERUQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZU9wdGlvbiAhPSBPUFRJT05fTk9UX1NFVCkKLSAgICAgICAgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHVzZU9wdGlvbiA9PSBPUFRJT05fTk9UX1NFVCkKLSAgICB7Ci0gICAgICB1c2VPcHRpb24gPSBVU0VfTElURVJBTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXNlT3B0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldE1lc3NhZ2VSZWZlcmVuY2VCaW5kaW5nT2JqZWN0cyhPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gZ2V0QmluZGluZ09iamVjdChnZW5lcmljQmluZGluZ09iamVjdCk7Ci0KLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIG9wZXJhdGlvbnNJdCA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG9wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gb3AgPSAoQmluZGluZ09wZXJhdGlvbilvcGVyYXRpb25zSXQubmV4dCgpOwotICAgICAgICBsaXN0LmFkZChvcC5nZXRFQmluZGluZ0lucHV0KCkpOwotICAgICAgICBsaXN0LmFkZChvcC5nZXRFQmluZGluZ091dHB1dCgpKTsKLSAgICAgICAgbGlzdC5hZGRBbGwob3AuZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShMaXN0IGVlTGlzdCwgU3RyaW5nIGF0dHJpYnV0ZUtleSkKLSAgewotICAgIExpc3QgdmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGVlRWxlbWVudHNJdCA9IGVlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGVlRWxlbWVudHNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVlRWxlbWVudHNJdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBlZUVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVLZXkpOwotICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwgJiYgIWF0dHJpYnV0ZVZhbHVlLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIHZhbHVlcy5hZGQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkKLSAgewotICAgIHJldHVybiAiU09BUCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEFkZHJlc3NJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBBZGRyZXNzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTdhMWVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEFkZHJlc3NJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBBZGRyZXNzSW1wbCNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEFkZHJlc3NJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU09BUEFkZHJlc3MKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb25VUkkgPSBMT0NBVElPTl9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEFkZHJlc3NJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0FERFJFU1M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbmV3TG9jYXRpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb25VUkkgPSBsb2NhdGlvblVSSTsKLSAgICBsb2NhdGlvblVSSSA9IG5ld0xvY2F0aW9uVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJLCBvbGRMb2NhdGlvblVSSSwgbG9jYXRpb25VUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TG9jYXRpb25VUkkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSShMT0NBVElPTl9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb25VUkkgIT0gbnVsbCA6ICFMT0NBVElPTl9VUklfRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uVVJJKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKGxvY2F0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobG9jYXRpb25VUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TG9jYXRpb25VUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFKSk7Ci0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5MT0NBVElPTl9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL1NPQVBBZGRyZXNzSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQmluZGluZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJpbmRpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OGE0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQmluZGluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJpbmRpbmdJbXBsI2dldFRyYW5zcG9ydFVSSSA8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJpbmRpbmdJbXBsI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBCaW5kaW5nSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBCaW5kaW5nCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNwb3J0VVJJKCkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFRyYW5zcG9ydFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc3BvcnRVUkkoKSA8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VHJhbnNwb3J0VVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0cmFuc3BvcnRVUkkgPSBUUkFOU1BPUlRfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHlsZSgpIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlID0gU1RZTEVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJpbmRpbmdJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JJTkRJTkc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNwb3J0VVJJKCkKLSAgewotICAgIHJldHVybiB0cmFuc3BvcnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRyYW5zcG9ydFVSSShTdHJpbmcgbmV3VHJhbnNwb3J0VVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZFRyYW5zcG9ydFVSSSA9IHRyYW5zcG9ydFVSSTsKLSAgICB0cmFuc3BvcnRVUkkgPSBuZXdUcmFuc3BvcnRVUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJLCBvbGRUcmFuc3BvcnRVUkksIHRyYW5zcG9ydFVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0eWxlKCkKLSAgewotICAgIHJldHVybiBzdHlsZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIG5ld1N0eWxlKQotICB7Ci0gICAgU3RyaW5nIG9sZFN0eWxlID0gc3R5bGU7Ci0gICAgc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFLCBvbGRTdHlsZSwgc3R5bGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgcmV0dXJuIGdldFRyYW5zcG9ydFVSSSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFOgotICAgICAgcmV0dXJuIGdldFN0eWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgc2V0VHJhbnNwb3J0VVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFOgotICAgICAgc2V0U3R5bGUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkk6Ci0gICAgICBzZXRUcmFuc3BvcnRVUkkoVFJBTlNQT1JUX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fU1RZTEU6Ci0gICAgICBzZXRTdHlsZShTVFlMRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgcmV0dXJuIFRSQU5TUE9SVF9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHRyYW5zcG9ydFVSSSAhPSBudWxsIDogIVRSQU5TUE9SVF9VUklfRURFRkFVTFQuZXF1YWxzKHRyYW5zcG9ydFVSSSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fU1RZTEU6Ci0gICAgICByZXR1cm4gU1RZTEVfRURFRkFVTFQgPT0gbnVsbCA/IHN0eWxlICE9IG51bGwgOiAhU1RZTEVfRURFRkFVTFQuZXF1YWxzKHN0eWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHRyYW5zcG9ydFVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHRyYW5zcG9ydFVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBzdHlsZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHN0eWxlKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRTdHlsZShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUpKTsKLSAgICBzZXRUcmFuc3BvcnRVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuVFJBTlNQT1JUX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQklORElOR19fU1RZTEUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIGdldFN0eWxlKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlRSQU5TUE9SVF9BVFRSSUJVVEUsIGdldFRyYW5zcG9ydFVSSSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLX0gLy9TT0FQQmluZGluZ0ltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJvZHlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBCb2R5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWE5MDc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJvZHlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJvZHk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCb2R5SW1wbCNnZXRVc2UgPGVtPlVzZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldEVFbmNvZGluZ1N0eWxlcyA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldEVQYXJ0cyA8ZW0+RVBhcnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEJvZHlJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU09BUEJvZHkKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVc2UoKSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVc2UoKSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVzZSA9IFVTRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWVzcGFjZVVSSSgpIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlVVJJID0gTkFNRVNQQUNFX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUVuY29kaW5nU3R5bGVzKCkgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUVuY29kaW5nU3R5bGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVFbmNvZGluZ1N0eWxlczsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVBhcnRzKCkgPGVtPkVQYXJ0czwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFydHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZVBhcnRzOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQYXJ0cygpIDxlbT5QYXJ0czwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRQYXJ0cygpCi0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBwYXJ0czsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQQm9keUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQk9EWTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVc2UoKQotICB7Ci0gICAgcmV0dXJuIHVzZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXNlKFN0cmluZyBuZXdVc2UpCi0gIHsKLSAgICBTdHJpbmcgb2xkVXNlID0gdXNlOwotICAgIHVzZSA9IG5ld1VzZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRSwgb2xkVXNlLCB1c2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyBuZXdOYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIG5hbWVzcGFjZVVSSSA9IG5ld05hbWVzcGFjZVVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkksIG9sZE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgaWYgKGVFbmNvZGluZ1N0eWxlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFbmNvZGluZ1N0eWxlcyA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdChTdHJpbmcuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgfQotICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFUGFydHMoKQotICB7Ci0gICAgaWYgKGVQYXJ0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVQYXJ0cyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3QoUGFydC5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFMpOwotICAgIH0KLSAgICByZXR1cm4gZVBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5jb2RpbmdTdHlsZXMoTGlzdCBsaXN0KQotICB7Ci0gICAgZUVuY29kaW5nU3R5bGVzID0gKEVMaXN0KWxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJ0cyhMaXN0IGxpc3QpCi0gIHsKLSAgICBwYXJ0cyA9IGxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRQYXJ0cygpCi0gIHsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwYXJ0cyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3QoUGFydC5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFMpOwotICAgICAgcmV0dXJuIGdldEltcGxpY2l0UGFydHMoKTsKLSAgICB9Ci0KLSAgICBpZiAocGFydHMuc2l6ZSgpID09IDApCi0gICAgewotICAgICAgcmV0dXJuIGdldEltcGxpY2l0UGFydHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fVVNFOgotICAgICAgcmV0dXJuIGdldFVzZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFM6Ci0gICAgICByZXR1cm4gZ2V0RVBhcnRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19VU0U6Ci0gICAgICBzZXRVc2UoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRVBBUlRTOgotICAgICAgZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVQYXJ0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRToKLSAgICAgIHNldFVzZShVU0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoTkFNRVNQQUNFX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRVBBUlRTOgotICAgICAgZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRToKLSAgICAgIHJldHVybiBVU0VfRURFRkFVTFQgPT0gbnVsbCA/IHVzZSAhPSBudWxsIDogIVVTRV9FREVGQVVMVC5lcXVhbHModXNlKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJOgotICAgICAgcmV0dXJuIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWVzcGFjZVVSSSAhPSBudWxsIDogIU5BTUVTUEFDRV9VUklfRURFRkFVTFQuZXF1YWxzKG5hbWVzcGFjZVVSSSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXMgIT0gbnVsbCAmJiAhZUVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFM6Ci0gICAgICByZXR1cm4gZVBhcnRzICE9IG51bGwgJiYgIWVQYXJ0cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh1c2U6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1c2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZXNwYWNlVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZXNwYWNlVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVFbmNvZGluZ1N0eWxlczogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVFbmNvZGluZ1N0eWxlcyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0VXNlKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUpKTsKLSAgICBzZXROYW1lc3BhY2VVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5FTkNPRElOR19TVFlMRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIFN0cmluZyBlbmNvZGluZ1N0eWxlcyA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihlbmNvZGluZ1N0eWxlcyk7Ci0gICAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgZ2V0RW5jb2RpbmdTdHlsZXMoKS5hZGQodG9rZW5pemVyLm5leHRUb2tlbigpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGdldEVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSkpCi0gICAgLy8gU3luY2hyb25pemUgJ3BhcnRzJyB2YXJpYWJsZSBmcm9tIGVsZW1lbnQncyBhdHRyaWJ1dGUuCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0TWVzc2FnZSgpOwotICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBTdHJpbmcgcGFydE5hbWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5QQVJUU19BVFRSSUJVVEUpOwotICAgICAgU3RyaW5nVG9rZW5pemVyIHBhcnNlciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGFydE5hbWVzLCAiICIpOwotICAgICAgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLSAgICAgIFBhcnQgbmV3UGFydCA9IG51bGw7Ci0gICAgICBnZXRQYXJ0cygpLmNsZWFyKCk7Ci0gICAgICB3aGlsZSAocGFyc2VyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcGFydE5hbWUgPSBwYXJzZXIubmV4dFRva2VuKCk7Ci0gICAgICAgIG5ld1BhcnQgPSAobWVzc2FnZSAhPSBudWxsKSA/IChQYXJ0KW1lc3NhZ2UuZ2V0UGFydChwYXJ0TmFtZSkgOiBudWxsOwotICAgICAgICBpZiAobmV3UGFydCAhPSBudWxsKQotICAgICAgICAgIC8vIERvIG5vdCB1c2UgZ2V0UGFydHMoKSBoZXJlIHNpbmNlIGl0IHdpbGwgcmV0dXJuIGEgbGlzdCBvZgotICAgICAgICAgIC8vIGltcGxpY2l0bHkgY29sbGVjdGVkIHBhcnRzLgotICAgICAgICAgIHBhcnRzLmFkZChuZXdQYXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX1VTRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIGdldFVzZSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTKQotICAgICAgewotICAgICAgICBMaXN0IGVuY29kaW5nU3R5bGVMaXN0ID0gZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gIiI7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZW5jb2RpbmdTdHlsZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChlbmNvZGluZ1N0eWxlcy5lcXVhbHMoIiIpKSAvLyBmaXJzdCBpdGVyYXRpb24KLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9ICIgIiArIChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFLCBlbmNvZGluZ1N0eWxlcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIC8vCi0gICAgLy8gVXBkYXRlIHRoZSBlbGVtZW50J3MgInBhcnRzIiBhdHRyaWJ1dGUgdmFsdWUuCi0gICAgLy8KLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CT0RZX19FUEFSVFMpCi0gICAgICB7Ci0gICAgICAgIC8vIFVzZWQgdG8gYmUgQnVnemlsbGEgMTA4MTc2LCBub3cgaXQgaXMgQnVnemlsbGEgMTM3OTkwCi0KLSAgICAgICAgU3RyaW5nIHBhcnRzQXR0cmlidXRlVmFsdWUgPSBudWxsOwotCi0gICAgICAgIC8vIERvIG5vdCB1c2UgZ2V0UGFydHMoKSBhcyBpdCB3aWxsIHJldHVybiB0aGUgbGlzdCBvZiBpbXBsaWNpdCBtZXNzYWdlCi0gICAgICAgIC8vIHBhcnRzLgotCi0gICAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmICFwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcGFydE5hbWVzQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGFydHMuaXRlcmF0b3IoKTsKLQotICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgIHBhcnROYW1lc0J1ZmZlci5hcHBlbmQocGFydE5hbWUpOwotCi0gICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJ0TmFtZXNCdWZmZXIuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBwYXJ0c0F0dHJpYnV0ZVZhbHVlID0gcGFydE5hbWVzQnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFLCBwYXJ0c0F0dHJpYnV0ZVZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5CT0RZX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW1wbGljaXRQYXJ0cygpCi0gIHsKLSAgICBMaXN0IGltcGxpY2l0UGFydHMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGdldE1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBpbXBsaWNpdFBhcnRzLmFkZEFsbChtZXNzYWdlLmdldEVQYXJ0cygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGltcGxpY2l0UGFydHM7Ci0gIH0KLQotICBwcml2YXRlIE1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCi0gICAgaWYgKGVDb250YWluZXIoKSBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBpZiAoKChCaW5kaW5nSW5wdXQpZUNvbnRhaW5lcigpKS5nZXRFSW5wdXQoKSAhPSBudWxsKQotICAgICAgICBtZXNzYWdlID0gKChCaW5kaW5nSW5wdXQpZUNvbnRhaW5lcigpKS5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICBpZiAoZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICBpZiAoKChCaW5kaW5nT3V0cHV0KWVDb250YWluZXIoKSkuZ2V0RU91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2UgPSAoKEJpbmRpbmdPdXRwdXQpZUNvbnRhaW5lcigpKS5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgaWYgKGVDb250YWluZXIoKSBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICB7Ci0gICAgICBpZiAoKChCaW5kaW5nRmF1bHQpZUNvbnRhaW5lcigpKS5nZXRFRmF1bHQoKSAhPSBudWxsKQotICAgICAgICBtZXNzYWdlID0gKChCaW5kaW5nRmF1bHQpZUNvbnRhaW5lcigpKS5nZXRFRmF1bHQoKS5nZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi19IC8vU09BUEJvZHlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlhMmU5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFNPQVBGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU09BUEZhY3RvcnkgdGhlU09BUEZhY3RvcnkgPSAoU09BUEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVTT0FQRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlU09BUEZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFNPQVBGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkc6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEJpbmRpbmcoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0U6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckJhc2UoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVDoKLSAgICAgIHJldHVybiBjcmVhdGVTT0FQRmF1bHQoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1M6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFQ6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckZhdWx0KCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBIZWFkZXIoKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5JU1RSSU5HOgotICAgICAgcmV0dXJuIGNyZWF0ZUlTdHJpbmdGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5JU1RSSU5HOgotICAgICAgcmV0dXJuIGNvbnZlcnRJU3RyaW5nVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQQmluZGluZyBjcmVhdGVTT0FQQmluZGluZygpCi0gIHsKLSAgICBTT0FQQmluZGluZ0ltcGwgc29hcEJpbmRpbmcgPSBuZXcgU09BUEJpbmRpbmdJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBCaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgY3JlYXRlU09BUEJvZHkoKQotICB7Ci0gICAgU09BUEJvZHlJbXBsIHNvYXBCb2R5ID0gbmV3IFNPQVBCb2R5SW1wbCgpOwotICAgIHJldHVybiBzb2FwQm9keTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXJCYXNlIGNyZWF0ZVNPQVBIZWFkZXJCYXNlKCkKLSAgewotICAgIFNPQVBIZWFkZXJCYXNlSW1wbCBzb2FwSGVhZGVyQmFzZSA9IG5ldyBTT0FQSGVhZGVyQmFzZUltcGwoKTsKLSAgICByZXR1cm4gc29hcEhlYWRlckJhc2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQRmF1bHQgY3JlYXRlU09BUEZhdWx0KCkKLSAgewotICAgIFNPQVBGYXVsdEltcGwgc29hcEZhdWx0ID0gbmV3IFNPQVBGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gc29hcEZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUE9wZXJhdGlvbiBjcmVhdGVTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIFNPQVBPcGVyYXRpb25JbXBsIHNvYXBPcGVyYXRpb24gPSBuZXcgU09BUE9wZXJhdGlvbkltcGwoKTsKLSAgICByZXR1cm4gc29hcE9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBBZGRyZXNzIGNyZWF0ZVNPQVBBZGRyZXNzKCkKLSAgewotICAgIFNPQVBBZGRyZXNzSW1wbCBzb2FwQWRkcmVzcyA9IG5ldyBTT0FQQWRkcmVzc0ltcGwoKTsKLSAgICByZXR1cm4gc29hcEFkZHJlc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyRmF1bHQgY3JlYXRlU09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIFNPQVBIZWFkZXJGYXVsdEltcGwgc29hcEhlYWRlckZhdWx0ID0gbmV3IFNPQVBIZWFkZXJGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gc29hcEhlYWRlckZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEhlYWRlciBjcmVhdGVTT0FQSGVhZGVyKCkKLSAgewotICAgIFNPQVBIZWFkZXJJbXBsIHNvYXBIZWFkZXIgPSBuZXcgU09BUEhlYWRlckltcGwoKTsKLSAgICByZXR1cm4gc29hcEhlYWRlcjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJU3RyaW5nRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydElTdHJpbmdUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBQYWNrYWdlIGdldFNPQVBQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoU09BUFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLX0gLy9TT0FQRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEZhdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmF1bHRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Y2FhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmF1bHRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsI2dldEVFbmNvZGluZ1N0eWxlcyA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEZhdWx0SW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBGYXVsdAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXNlID0gVVNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRW5jb2RpbmdTdHlsZXMoKSA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUVuY29kaW5nU3R5bGVzOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVc2UoKQotICB7Ci0gICAgcmV0dXJuIHVzZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXNlKFN0cmluZyBuZXdVc2UpCi0gIHsKLSAgICBTdHJpbmcgb2xkVXNlID0gdXNlOwotICAgIHVzZSA9IG5ld1VzZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19VU0UsIG9sZFVzZSwgdXNlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgbmV3TmFtZXNwYWNlVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICBuYW1lc3BhY2VVUkkgPSBuZXdOYW1lc3BhY2VVUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSwgb2xkTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VVUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICBpZiAoZUVuY29kaW5nU3R5bGVzID09IG51bGwpCi0gICAgewotICAgICAgZUVuY29kaW5nU3R5bGVzID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0KFN0cmluZy5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgfQotICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0I2dldEVuY29kaW5nU3R5bGVzKCkKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fVVNFOgotICAgICAgcmV0dXJuIGdldFVzZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgcmV0dXJuIGdldEVFbmNvZGluZ1N0eWxlcygpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FOgotICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19VU0U6Ci0gICAgICBzZXRVc2UoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19VU0U6Ci0gICAgICBzZXRVc2UoVVNFX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSShOQU1FU1BBQ0VfVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX1VTRToKLSAgICAgIHJldHVybiBVU0VfRURFRkFVTFQgPT0gbnVsbCA/IHVzZSAhPSBudWxsIDogIVVTRV9FREVGQVVMVC5lcXVhbHModXNlKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID09IG51bGwgPyBuYW1lc3BhY2VVUkkgIT0gbnVsbCA6ICFOQU1FU1BBQ0VfVVJJX0VERUZBVUxULmVxdWFscyhuYW1lc3BhY2VVUkkpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgcmV0dXJuIGVFbmNvZGluZ1N0eWxlcyAhPSBudWxsICYmICFlRW5jb2RpbmdTdHlsZXMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5jb2RpbmdTdHlsZXMoTGlzdCBsaXN0KQotICB7Ci0gICAgZUVuY29kaW5nU3R5bGVzID0gKEVMaXN0KWxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAodXNlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodXNlKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIG5hbWVzcGFjZVVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWVzcGFjZVVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBlRW5jb2RpbmdTdHlsZXM6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlRW5jb2RpbmdTdHlsZXMpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TmFtZShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpOwotICAgIHNldE5hbWVzcGFjZVVSSShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFKSk7Ci0gICAgc2V0VXNlKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUpKTsKLQotICAgIC8vIFRCRCAtIGhhbmRsZSBlbmNvZGluZ1N0eWxlcwotCi0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUsIGdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0ZBVUxUX19VU0UpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5VU0VfQVRUUklCVVRFLCBnZXRVc2UoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUykKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlbmNvZGluZ1N0eWxlTGlzdCA9IGdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICAgIFN0cmluZyBlbmNvZGluZ1N0eWxlcyA9ICIiOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGVuY29kaW5nU3R5bGVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkgLy8gZmlyc3QgaXRlcmF0aW9uCi0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlcyArPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlcyArPSAiICIgKyAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVuY29kaW5nU3R5bGVzLmVxdWFscygiIikpCi0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSwgZW5jb2RpbmdTdHlsZXMpOwotICAgICAgfSAvLyBUQkQgLSBJcyB0aGlzIHRoZSBwcm9wZXIgd2F5IHRvIGhhbmRsZSBlbmNvZGluZ1N0eWxlcwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9TT0FQRmF1bHRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJCYXNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyQmFzZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY4M2VhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJCYXNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBCYXNlPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXRNZXNzYWdlIDxlbT5NZXNzYWdlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0UGFydCA8ZW0+UGFydDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBIZWFkZXJCYXNlSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBIZWFkZXJCYXNlCi17Ci0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VXNlKCkgPGVtPlVzZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VXNlKCkgPGVtPlVzZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB1c2UgPSBVU0VfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWVzcGFjZVVSSSgpIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IE5BTUVTUEFDRV9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVFbmNvZGluZ1N0eWxlcygpIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVFbmNvZGluZ1N0eWxlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlRW5jb2RpbmdTdHlsZXM7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNZXNzYWdlKCkgPGVtPk1lc3NhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIE1FU1NBR0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNZXNzYWdlKCkgPGVtPk1lc3NhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgbWVzc2FnZSA9IE1FU1NBR0VfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQYXJ0KCkgPGVtPlBhcnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UGFydCgpIDxlbT5QYXJ0PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJ0ID0gUEFSVF9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU1lc3NhZ2UoKSA8ZW0+RU1lc3NhZ2U8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgZU1lc3NhZ2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0KCkgPGVtPkVQYXJ0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBQYXJ0IGVQYXJ0OwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJCYXNlSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVc2UoKQotICB7Ci0gICAgcmV0dXJuIHVzZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXNlKFN0cmluZyBuZXdVc2UpCi0gIHsKLSAgICBTdHJpbmcgb2xkVXNlID0gdXNlOwotICAgIHVzZSA9IG5ld1VzZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0UsIG9sZFVzZSwgdXNlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgbmV3TmFtZXNwYWNlVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICBuYW1lc3BhY2VVUkkgPSBuZXdOYW1lc3BhY2VVUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSwgb2xkTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VVUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICBpZiAoZUVuY29kaW5nU3R5bGVzID09IG51bGwpCi0gICAgewotICAgICAgZUVuY29kaW5nU3R5bGVzID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0KFN0cmluZy5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgfQotICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGdldEVNZXNzYWdlKCkKLSAgewotICAgIGlmIChlTWVzc2FnZSAhPSBudWxsICYmIGVNZXNzYWdlLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVNZXNzYWdlID0gKEludGVybmFsRU9iamVjdCllTWVzc2FnZTsKLSAgICAgIGVNZXNzYWdlID0gKE1lc3NhZ2UpZVJlc29sdmVQcm94eShvbGRFTWVzc2FnZSk7Ci0gICAgICBpZiAoZU1lc3NhZ2UgIT0gb2xkRU1lc3NhZ2UpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGJhc2ljR2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIG5ld0VNZXNzYWdlKQotICB7Ci0gICAgTWVzc2FnZSBvbGRFTWVzc2FnZSA9IGVNZXNzYWdlOwotICAgIGVNZXNzYWdlID0gbmV3RU1lc3NhZ2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUGFydCBnZXRFUGFydCgpCi0gIHsKLSAgICBpZiAoZVBhcnQgIT0gbnVsbCAmJiBlUGFydC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFUGFydCA9IChJbnRlcm5hbEVPYmplY3QpZVBhcnQ7Ci0gICAgICBlUGFydCA9IChQYXJ0KWVSZXNvbHZlUHJveHkob2xkRVBhcnQpOwotICAgICAgaWYgKGVQYXJ0ICE9IG9sZEVQYXJ0KQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VQQVJULCBvbGRFUGFydCwgZVBhcnQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUGFydCBiYXNpY0dldEVQYXJ0KCkKLSAgewotICAgIHJldHVybiBlUGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RVBhcnQoUGFydCBuZXdFUGFydCkKLSAgewotICAgIFBhcnQgb2xkRVBhcnQgPSBlUGFydDsKLSAgICBlUGFydCA9IG5ld0VQYXJ0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VQQVJULCBvbGRFUGFydCwgZVBhcnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoUU5hbWUgbmV3TWVzc2FnZSkKLSAgewotICAgIFFOYW1lIG9sZE1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIG1lc3NhZ2UgPSBuZXdNZXNzYWdlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UsIG9sZE1lc3NhZ2UsIG1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJ0KCkKLSAgewotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJ0KFN0cmluZyBuZXdQYXJ0KQotICB7Ci0gICAgU3RyaW5nIG9sZFBhcnQgPSBwYXJ0OwotICAgIHBhcnQgPSBuZXdQYXJ0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQsIG9sZFBhcnQsIHBhcnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuY29kaW5nU3R5bGVzKExpc3QgZW5jb2RpbmdTdHlsZXMpCi0gIHsKLSAgICBlRW5jb2RpbmdTdHlsZXMgPSAoRUxpc3QpZW5jb2RpbmdTdHlsZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1VTRToKLSAgICAgIHJldHVybiBnZXRVc2UoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBnZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRToKLSAgICAgIHJldHVybiBnZXRNZXNzYWdlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ6Ci0gICAgICByZXR1cm4gZ2V0UGFydCgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRToKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RU1lc3NhZ2UoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVNZXNzYWdlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VQQVJUOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFUGFydCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RVBhcnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICBzZXRVc2UoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRToKLSAgICAgIHNldE1lc3NhZ2UoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fUEFSVDoKLSAgICAgIHNldFBhcnQoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFOgotICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDoKLSAgICAgIHNldEVQYXJ0KChQYXJ0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1VTRToKLSAgICAgIHNldFVzZShVU0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKE5BTUVTUEFDRV9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRToKLSAgICAgIHNldE1lc3NhZ2UoTUVTU0FHRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ6Ci0gICAgICBzZXRQYXJ0KFBBUlRfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRToKLSAgICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDoKLSAgICAgIHNldEVQYXJ0KChQYXJ0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1VTRToKLSAgICAgIHJldHVybiBVU0VfRURFRkFVTFQgPT0gbnVsbCA/IHVzZSAhPSBudWxsIDogIVVTRV9FREVGQVVMVC5lcXVhbHModXNlKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID09IG51bGwgPyBuYW1lc3BhY2VVUkkgIT0gbnVsbCA6ICFOQU1FU1BBQ0VfVVJJX0VERUZBVUxULmVxdWFscyhuYW1lc3BhY2VVUkkpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgcmV0dXJuIGVFbmNvZGluZ1N0eWxlcyAhPSBudWxsICYmICFlRW5jb2RpbmdTdHlsZXMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFOgotICAgICAgcmV0dXJuIE1FU1NBR0VfRURFRkFVTFQgPT0gbnVsbCA/IG1lc3NhZ2UgIT0gbnVsbCA6ICFNRVNTQUdFX0VERUZBVUxULmVxdWFscyhtZXNzYWdlKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fUEFSVDoKLSAgICAgIHJldHVybiBQQVJUX0VERUZBVUxUID09IG51bGwgPyBwYXJ0ICE9IG51bGwgOiAhUEFSVF9FREVGQVVMVC5lcXVhbHMocGFydCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFOgotICAgICAgcmV0dXJuIGVNZXNzYWdlICE9IG51bGw7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VQQVJUOgotICAgICAgcmV0dXJuIGVQYXJ0ICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh1c2U6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1c2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZXNwYWNlVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZXNwYWNlVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVFbmNvZGluZ1N0eWxlczogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVFbmNvZGluZ1N0eWxlcyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBtZXNzYWdlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobWVzc2FnZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBwYXJ0OiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocGFydCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzOiBET00gLT4gTW9kZWwKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRVc2UoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuVVNFX0FUVFJJQlVURSkpOwotICAgIHNldE5hbWVzcGFjZVVSSShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFKSk7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbilnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSksIGNoYW5nZWRFbGVtZW50KTsKLSAgICAgIHNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldE1lc3NhZ2UobnVsbCk7Ci0gICAgfQotICAgIHNldFBhcnQoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUpKTsKLSAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaGFzQXR0cmlidXRlKFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgZW5jb2RpbmdTdHlsZXMgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5FTkNPRElOR19TVFlMRV9BVFRSSUJVVEUpOwotICAgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZW5jb2RpbmdTdHlsZXMpOwotICAgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmFkZCh0b2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbilnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAodGhpcy5tZXNzYWdlICE9IG51bGwpID8gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHRoaXMubWVzc2FnZSkgOiBudWxsOwotICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlICE9IGdldEVNZXNzYWdlKCkpCi0gICAgICB7Ci0gICAgICAgIHNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCi0gICAgICAgIFBhcnQgbmV3UGFydCA9IChQYXJ0KW1lc3NhZ2UuZ2V0UGFydChwYXJ0KTsKLSAgICAgICAgaWYgKG5ld1BhcnQgIT0gbnVsbCAmJiBuZXdQYXJ0ICE9IGdldEVQYXJ0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRFUGFydChuZXdQYXJ0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0VfX1VTRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIGdldFVzZSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSwgZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5QQVJUX0FUVFJJQlVURSwgZ2V0UGFydCgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFKQotICAgICAgewotICAgICAgICBTdHJpbmcgdXJpTGlzdCA9IG1lc3NhZ2UgIT0gbnVsbCA/IG1lc3NhZ2UuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIgKyBtZXNzYWdlLmdldExvY2FsUGFydCgpIDogbnVsbDsKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUsIHVyaUxpc3QpOwotICAgICAgfQotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVMpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZW5jb2RpbmdTdHlsZUxpc3QgPSBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gIiI7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZW5jb2RpbmdTdHlsZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChlbmNvZGluZ1N0eWxlcy5lcXVhbHMoIiIpKSAvLyBmaXJzdCBpdGVyYXRpb24KLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9ICIgIiArIChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFLCBlbmNvZGluZ1N0eWxlcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0RU1lc3NhZ2UoKTsKLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFOYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFLCBxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIjIiArIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fRVBBUlQpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IGdldEVQYXJ0KCk7Ci0gICAgICAgIGlmIChwYXJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBwYXJ0LmdldE5hbWUoKTsKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUsIHBhcnROYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfSAvL1NPQVBIZWFkZXJCYXNlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyRmF1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJGYXVsdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0NDgzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJGYXVsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEZhdWx0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEhlYWRlckZhdWx0SW1wbCBleHRlbmRzIFNPQVBIZWFkZXJCYXNlSW1wbCBpbXBsZW1lbnRzIFNPQVBIZWFkZXJGYXVsdAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyRmF1bHRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9GQVVMVDsKLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9TT0FQSGVhZGVyRmF1bHRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MTVjNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXI8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJJbXBsI2dldEhlYWRlckZhdWx0cyA8ZW0+SGVhZGVyIEZhdWx0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBIZWFkZXJJbXBsIGV4dGVuZHMgU09BUEhlYWRlckJhc2VJbXBsIGltcGxlbWVudHMgU09BUEhlYWRlcgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SGVhZGVyRmF1bHRzKCkgPGVtPkhlYWRlciBGYXVsdHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0SGVhZGVyRmF1bHRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGhlYWRlckZhdWx0czsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVySW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVI7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRIZWFkZXJGYXVsdHMoKQotICB7Ci0gICAgaWYgKGhlYWRlckZhdWx0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGhlYWRlckZhdWx0cyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChTT0FQSGVhZGVyRmF1bHQuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhlYWRlckZhdWx0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNPQVBIZWFkZXJGYXVsdHMoKQotICB7Ci0gICAgcmV0dXJuIGdldEhlYWRlckZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU09BUEhlYWRlckZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQpCi0gIHsKLSAgICBFTGlzdCBoZWFkZXJGYXVsdHMgPSBnZXRIZWFkZXJGYXVsdHMoKTsKLSAgICBoZWFkZXJGYXVsdHMuYWRkKHNvYXBIZWFkZXJGYXVsdCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRIZWFkZXJGYXVsdHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgcmV0dXJuIGdldEhlYWRlckZhdWx0cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgZ2V0SGVhZGVyRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEhlYWRlckZhdWx0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzoKLSAgICAgIGdldEhlYWRlckZhdWx0cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFM6Ci0gICAgICByZXR1cm4gaGVhZGVyRmF1bHRzICE9IG51bGwgJiYgIWhlYWRlckZhdWx0cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBpZiAoU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKGNoaWxkLmdldExvY2FsTmFtZSgpKSkKLSAgICB7Ci0gICAgICBTT0FQSGVhZGVyRmF1bHQgZmF1bHQgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlckZhdWx0KCk7Ci0gICAgICBmYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICBmYXVsdC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgIGdldEhlYWRlckZhdWx0cygpLmFkZChmYXVsdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIFNPQVBIZWFkZXIgaGVhZGVyID0gKFNPQVBIZWFkZXIpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFNPQVBIZWFkZXJGYXVsdCkKLSAgICB7Ci0gICAgICBoZWFkZXIuZ2V0SGVhZGVyRmF1bHRzKCkucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5IRUFERVJfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL1NPQVBIZWFkZXJJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4N2UzZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUE9wZXJhdGlvbkltcGwjZ2V0U29hcEFjdGlvblVSSSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQT3BlcmF0aW9uSW1wbCNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQT3BlcmF0aW9uSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBPcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTb2FwQWN0aW9uVVJJKCkgPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U29hcEFjdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQUNUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNvYXBBY3Rpb25VUkkoKSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTb2FwQWN0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzb2FwQWN0aW9uVVJJID0gU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHlsZSgpIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlID0gU1RZTEVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUE9wZXJhdGlvbkltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfT1BFUkFUSU9OOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBBY3Rpb25VUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNvYXBBY3Rpb25VUkkoU3RyaW5nIG5ld1NvYXBBY3Rpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkU29hcEFjdGlvblVSSSA9IHNvYXBBY3Rpb25VUkk7Ci0gICAgc29hcEFjdGlvblVSSSA9IG5ld1NvYXBBY3Rpb25VUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSSwgb2xkU29hcEFjdGlvblVSSSwgc29hcEFjdGlvblVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0eWxlKCkKLSAgewotICAgIHJldHVybiBzdHlsZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIG5ld1N0eWxlKQotICB7Ci0gICAgU3RyaW5nIG9sZFN0eWxlID0gc3R5bGU7Ci0gICAgc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU1RZTEUsIG9sZFN0eWxlLCBzdHlsZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJOgotICAgICAgcmV0dXJuIGdldFNvYXBBY3Rpb25VUkkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgcmV0dXJuIGdldFN0eWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSToKLSAgICAgIHNldFNvYXBBY3Rpb25VUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TVFlMRToKLSAgICAgIHNldFN0eWxlKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSToKLSAgICAgIHNldFNvYXBBY3Rpb25VUkkoU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgc2V0U3R5bGUoU1RZTEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk6Ci0gICAgICByZXR1cm4gU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUID09IG51bGwgPyBzb2FwQWN0aW9uVVJJICE9IG51bGwgOiAhU09BUF9BQ1RJT05fVVJJX0VERUZBVUxULmVxdWFscyhzb2FwQWN0aW9uVVJJKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgcmV0dXJuIFNUWUxFX0VERUZBVUxUID09IG51bGwgPyBzdHlsZSAhPSBudWxsIDogIVNUWUxFX0VERUZBVUxULmVxdWFscyhzdHlsZSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChzb2FwQWN0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoc29hcEFjdGlvblVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBzdHlsZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHN0eWxlKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldFNvYXBBY3Rpb25VUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuU09BUF9BQ1RJT05fQVRUUklCVVRFKSk7Ci0gICAgc2V0U3R5bGUoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuU1RZTEVfQVRUUklCVVRFKSk7Ci0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlNPQVBfQUNUSU9OX0FUVFJJQlVURSwgZ2V0U29hcEFjdGlvblVSSSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX09QRVJBVElPTl9fU1RZTEUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIGdldFN0eWxlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLk9QRVJBVElPTl9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9TT0FQT3BlcmF0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQUGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YTZkZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQUGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFNPQVBQYWNrYWdlCi17Ci0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEJvZHlFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEhlYWRlckJhc2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHNvYXBPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEFkZHJlc3NFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEhlYWRlckZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHNvYXBIZWFkZXJFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXNvYXBCaW5kaW5nRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwQWRkcmVzc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcEJvZHlFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXNvYXBGYXVsdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcE9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcEhlYWRlckZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwSGVhZGVyRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRURhdGFUeXBlIGlTdHJpbmdFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0gICAqIHBhY2thZ2UgVVJJIHZhbHVlLgotICAgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0gICAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0gICAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0gICAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2VOU19VUkkKLSAgICogQHNlZSAjaW5pdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgU09BUFBhY2thZ2VJbXBsKCkKLSAgewotICAgIHN1cGVyKGVOU19VUkksIFNPQVBGYWN0b3J5LmVJTlNUQU5DRSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0gICAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0gICAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0gICAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotICAgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0gICAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0gICAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLSAgICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0gICAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLSAgICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLSAgICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLSAgICogdGhvc2Ugb2YgYW5vdGhlci4KLSAgICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotICAgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNlTlNfVVJJCi0gICAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBQYWNrYWdlIGluaXQoKQotICB7Ci0gICAgaWYgKGlzSW5pdGVkKQotICAgICAgcmV0dXJuIChTT0FQUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTT0FQUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLSAgICBTT0FQUGFja2FnZUltcGwgdGhlU09BUFBhY2thZ2UgPSAoU09BUFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFNPQVBQYWNrYWdlSW1wbAotICAgICAgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBTT0FQUGFja2FnZUltcGwoKSk7Ci0KLSAgICBpc0luaXRlZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLSAgICBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0KLSAgICAvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotICAgIHRoZVNPQVBQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotICAgIHRoZVNPQVBQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLSAgICB0aGVTT0FQUGFja2FnZS5mcmVlemUoKTsKLQotICAgIHJldHVybiB0aGVTT0FQUGFja2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gc29hcEJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEJpbmRpbmdfU3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBCaW5kaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBCb2R5RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9Vc2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBCb2R5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBCb2R5X05hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEJvZHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwQm9keUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRTT0FQQm9keV9FUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNvYXBCb2R5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEhlYWRlckJhc2UoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXJCYXNlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEZhdWx0KCkKLSAgewotICAgIHJldHVybiBzb2FwRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9Vc2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEZhdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBzb2FwT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcE9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFNPQVBBZGRyZXNzKCkKLSAgewotICAgIHJldHVybiBzb2FwQWRkcmVzc0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBBZGRyZXNzRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBzb2FwSGVhZGVyRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gc29hcEhlYWRlckVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNvYXBIZWFkZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwQmluZGluZ0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEFkZHJlc3MoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwQWRkcmVzc0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwQm9keUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEZhdWx0KCkKLSAgewotICAgIHJldHVybiBpc29hcEZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBpc29hcE9wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBpc29hcEhlYWRlckZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQSGVhZGVyKCkKLSAgewotICAgIHJldHVybiBpc29hcEhlYWRlckVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRJU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBpU3RyaW5nRURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEZhY3RvcnkgZ2V0U09BUEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIChTT0FQRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0gICAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNDcmVhdGVkKQotICAgICAgcmV0dXJuOwotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLSAgICBzb2FwQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0JJTkRJTkcpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJpbmRpbmdFQ2xhc3MsIFNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwQmluZGluZ0VDbGFzcywgU09BUF9CSU5ESU5HX19TVFlMRSk7Ci0KLSAgICBzb2FwQm9keUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0JPRFkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJvZHlFQ2xhc3MsIFNPQVBfQk9EWV9fVVNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBCb2R5RUNsYXNzLCBTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJvZHlFQ2xhc3MsIFNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShzb2FwQm9keUVDbGFzcywgU09BUF9CT0RZX19FUEFSVFMpOwotCi0gICAgc29hcEhlYWRlckJhc2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU09BUF9IRUFERVJfQkFTRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwSGVhZGVyQmFzZUVDbGFzcywgU09BUF9IRUFERVJfQkFTRV9fVVNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19QQVJUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShzb2FwSGVhZGVyQmFzZUVDbGFzcywgU09BUF9IRUFERVJfQkFTRV9fRVBBUlQpOwotCi0gICAgc29hcEZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfRkFVTFQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEZhdWx0RUNsYXNzLCBTT0FQX0ZBVUxUX19VU0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEZhdWx0RUNsYXNzLCBTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBGYXVsdEVDbGFzcywgU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwRmF1bHRFQ2xhc3MsIFNPQVBfRkFVTFRfX05BTUUpOwotCi0gICAgc29hcE9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX09QRVJBVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwT3BlcmF0aW9uRUNsYXNzLCBTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBPcGVyYXRpb25FQ2xhc3MsIFNPQVBfT1BFUkFUSU9OX19TVFlMRSk7Ci0KLSAgICBzb2FwQWRkcmVzc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0FERFJFU1MpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEFkZHJlc3NFQ2xhc3MsIFNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJKTsKLQotICAgIHNvYXBIZWFkZXJGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0hFQURFUl9GQVVMVCk7Ci0KLSAgICBzb2FwSGVhZGVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfSEVBREVSKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNvYXBIZWFkZXJFQ2xhc3MsIFNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTKTsKLQotICAgIGlzb2FwQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9CSU5ESU5HKTsKLQotICAgIGlzb2FwQWRkcmVzc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9BRERSRVNTKTsKLQotICAgIGlzb2FwQm9keUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9CT0RZKTsKLQotICAgIGlzb2FwRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfRkFVTFQpOwotCi0gICAgaXNvYXBPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfT1BFUkFUSU9OKTsKLQotICAgIGlzb2FwSGVhZGVyRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfSEVBREVSX0ZBVUxUKTsKLQotICAgIGlzb2FwSGVhZGVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKElTT0FQX0hFQURFUik7Ci0KLSAgICAvLyBDcmVhdGUgZGF0YSB0eXBlcwotICAgIGlTdHJpbmdFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoSVNUUklORyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0gICAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgcmV0dXJuOwotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0gICAgc2V0TmFtZShlTkFNRSk7Ci0gICAgc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0gICAgc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0gICAgV1NETFBhY2thZ2UgdGhlV1NETFBhY2thZ2UgPSAoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0gICAgc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEJpbmRpbmcoKSk7Ci0gICAgc29hcEJvZHlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEJvZHlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEJvZHkoKSk7Ci0gICAgc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIHNvYXBGYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQRmF1bHQoKSk7Ci0gICAgc29hcE9wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBzb2FwT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNPQVBPcGVyYXRpb24oKSk7Ci0gICAgc29hcEFkZHJlc3NFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEFkZHJlc3NFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEFkZHJlc3MoKSk7Ci0gICAgc29hcEhlYWRlckZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U09BUEhlYWRlckJhc2UoKSk7Ci0gICAgc29hcEhlYWRlckZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNPQVBIZWFkZXJGYXVsdCgpKTsKLSAgICBzb2FwSGVhZGVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U09BUEhlYWRlckJhc2UoKSk7Ci0gICAgc29hcEhlYWRlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQSGVhZGVyKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLSAgICBpbml0RUNsYXNzKHNvYXBCaW5kaW5nRUNsYXNzLCBTT0FQQmluZGluZy5jbGFzcywgIlNPQVBCaW5kaW5nIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQQmluZGluZ19UcmFuc3BvcnRVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidHJhbnNwb3J0VVJJIiwgbnVsbCwgMCwgMSwgU09BUEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBCaW5kaW5nX1N0eWxlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInN0eWxlIiwgbnVsbCwgMCwgMSwgU09BUEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcEJvZHlFQ2xhc3MsIFNPQVBCb2R5LmNsYXNzLCAiU09BUEJvZHkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBCb2R5X1VzZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ1c2UiLCBudWxsLCAwLCAxLCBTT0FQQm9keS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWVzcGFjZVVSSSIsIG51bGwsIDAsIDEsIFNPQVBCb2R5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKSwKLSAgICAgIHRoaXMuZ2V0SVN0cmluZygpLAotICAgICAgImVFbmNvZGluZ1N0eWxlcyIsIG51bGwsIDAsIC0xLCBTT0FQQm9keS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0U09BUEJvZHlfRVBhcnRzKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0cyIsIG51bGwsIDAsIC0xLCBTT0FQQm9keS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwSGVhZGVyQmFzZUVDbGFzcywgU09BUEhlYWRlckJhc2UuY2xhc3MsICJTT0FQSGVhZGVyQmFzZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfVXNlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInVzZSIsIG51bGwsIDAsIDEsIFNPQVBIZWFkZXJCYXNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZXNwYWNlVVJJIiwgbnVsbCwgMCwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlcygpLAotICAgICAgdGhpcy5nZXRJU3RyaW5nKCksCi0gICAgICAiZUVuY29kaW5nU3R5bGVzIiwgbnVsbCwgMCwgLTEsIFNPQVBIZWFkZXJCYXNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRRTmFtZSgpLAotICAgICAgIm1lc3NhZ2UiLCBudWxsLCAwLCAxLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfUGFydCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJwYXJ0IiwgbnVsbCwgMCwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRNZXNzYWdlKCksCi0gICAgICBudWxsLAotICAgICAgImVNZXNzYWdlIiwgbnVsbCwgMSwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0IiwgbnVsbCwgMSwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oc29hcEhlYWRlckJhc2VFQ2xhc3MsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJnZXRFbmNvZGluZ1N0eWxlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihzb2FwSGVhZGVyQmFzZUVDbGFzcywgbnVsbCwgInNldEVuY29kaW5nU3R5bGVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZW5jb2RpbmdTdHlsZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwRmF1bHRFQ2xhc3MsIFNPQVBGYXVsdC5jbGFzcywgIlNPQVBGYXVsdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEZhdWx0X1VzZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ1c2UiLCBudWxsLCAwLCAxLCBTT0FQRmF1bHQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZXNwYWNlVVJJIiwgbnVsbCwgMCwgMSwgU09BUEZhdWx0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCksCi0gICAgICB0aGlzLmdldElTdHJpbmcoKSwKLSAgICAgICJlRW5jb2RpbmdTdHlsZXMiLCBudWxsLCAwLCAtMSwgU09BUEZhdWx0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQRmF1bHRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgU09BUEZhdWx0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNvYXBPcGVyYXRpb25FQ2xhc3MsIFNPQVBPcGVyYXRpb24uY2xhc3MsICJTT0FQT3BlcmF0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAic29hcEFjdGlvblVSSSIsIG51bGwsIDAsIDEsIFNPQVBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBPcGVyYXRpb25fU3R5bGUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAic3R5bGUiLCBudWxsLCAwLCAxLCBTT0FQT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNvYXBBZGRyZXNzRUNsYXNzLCBTT0FQQWRkcmVzcy5jbGFzcywgIlNPQVBBZGRyZXNzIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJsb2NhdGlvblVSSSIsIG51bGwsIDAsIDEsIFNPQVBBZGRyZXNzLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNvYXBIZWFkZXJGYXVsdEVDbGFzcywgU09BUEhlYWRlckZhdWx0LmNsYXNzLCAiU09BUEhlYWRlckZhdWx0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNvYXBIZWFkZXJFQ2xhc3MsIFNPQVBIZWFkZXIuY2xhc3MsICJTT0FQSGVhZGVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0cygpLAotICAgICAgdGhpcy5nZXRTT0FQSGVhZGVyRmF1bHQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiaGVhZGVyRmF1bHRzIiwgbnVsbCwgMCwgLTEsIFNPQVBIZWFkZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcEJpbmRpbmdFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZy5jbGFzcywKLSAgICAgICJJU09BUEJpbmRpbmciLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlzb2FwQWRkcmVzc0VDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzLmNsYXNzLAotICAgICAgIklTT0FQQWRkcmVzcyIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBCb2R5RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkuY2xhc3MsCi0gICAgICAiSVNPQVBCb2R5IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaXNvYXBCb2R5RUNsYXNzLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZ2V0RW5jb2RpbmdTdHlsZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlzb2FwQm9keUVDbGFzcywgbnVsbCwgInNldEVuY29kaW5nU3R5bGVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZW5jb2RpbmdTdHlsZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpc29hcEJvZHlFQ2xhc3MsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJnZXRQYXJ0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaXNvYXBCb2R5RUNsYXNzLCBudWxsLCAic2V0UGFydHMiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJwYXJ0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBGYXVsdEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdC5jbGFzcywKLSAgICAgICJJU09BUEZhdWx0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcE9wZXJhdGlvbkVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24uY2xhc3MsCi0gICAgICAiSVNPQVBPcGVyYXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlzb2FwSGVhZGVyRmF1bHRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQuY2xhc3MsCi0gICAgICAiSVNPQVBIZWFkZXJGYXVsdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBIZWFkZXJFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyLmNsYXNzLAotICAgICAgIklTT0FQSGVhZGVyIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaXNvYXBIZWFkZXJFQ2xhc3MsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJnZXRTT0FQSGVhZGVyRmF1bHRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpc29hcEhlYWRlckVDbGFzcywgbnVsbCwgImFkZFNPQVBIZWFkZXJGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJU09BUEhlYWRlckZhdWx0KCksICJzb2FwSGVhZGVyRmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCi0gICAgaW5pdEVEYXRhVHlwZShpU3RyaW5nRURhdGFUeXBlLCBTdHJpbmcuY2xhc3MsICJJU3RyaW5nIiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlCi0gICAgY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0gIH0KLX0gLy9TT0FQUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGE3MjlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBTT0FQUGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQQWRhcHRlckZhY3RvcnkoKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IFNPQVBQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBTd2l0Y2ggbW9kZWxTd2l0Y2ggPSBuZXcgU09BUFN3aXRjaCgpCi0gICAgewotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEJpbmRpbmcoU09BUEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBCb2R5KFNPQVBCb2R5IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBCb2R5QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQSGVhZGVyQmFzZShTT0FQSGVhZGVyQmFzZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyQmFzZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEZhdWx0KFNPQVBGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQQWRkcmVzc0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEhlYWRlckZhdWx0KFNPQVBIZWFkZXJGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXIoU09BUEhlYWRlciBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEJpbmRpbmcoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBCaW5kaW5nQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEFkZHJlc3MoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3Mgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBBZGRyZXNzQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEJvZHkoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBCb2R5QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU09BUEZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUE9wZXJhdGlvbihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEhlYWRlckZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU09BUEhlYWRlckZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEhlYWRlcihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQSGVhZGVyQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotICAgICAgfQotICAgIH07Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0gICAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5CaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkgPGVtPkJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBCb2R5QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSA8ZW0+SGVhZGVyIEJhc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBIZWFkZXJCYXNlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQgPGVtPkZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlU09BUEZhdWx0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5PcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlU09BUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MgPGVtPkFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBBZGRyZXNzQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPkhlYWRlciBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBIZWFkZXJGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciA8ZW0+SGVhZGVyPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBIZWFkZXJBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgPGVtPklTT0FQIEJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIDxlbT5JU09BUCBBZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlTT0FQQWRkcmVzc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSA8ZW0+SVNPQVAgQm9keTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUEJvZHlBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IDxlbT5JU09BUCBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5JU09BUCBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBIZWFkZXJGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIDxlbT5JU09BUCBIZWFkZXI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUEhlYWRlckFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL1NPQVBBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY2YWE1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgU09BUENvbnN0YW50cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBRERSRVNTX0VMRU1FTlRfVEFHID0gImFkZHJlc3MiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElOR19FTEVNRU5UX1RBRyA9ICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPRFlfRUxFTUVOVF9UQUcgPSAiYm9keSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQVVMVF9FTEVNRU5UX1RBRyA9ICJmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRUxFTUVOVF9UQUcgPSAiaGVhZGVyIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyA9ICJoZWFkZXJmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05fRUxFTUVOVF9UQUcgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfTkFNRVNQQUNFX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQUNUSU9OX0FUVFJJQlVURSA9ICJzb2FwQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0FUVFJJQlVURSA9ICJzdHlsZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9BVFRSSUJVVEUgPSAibG9jYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX0FUVFJJQlVURSA9ICJ0cmFuc3BvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0FUVFJJQlVURSA9ICJ1c2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX0FUVFJJQlVURSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VSSV9BVFRSSUJVVEUgPSAibmFtZXNwYWNlVVJJIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfQVRUUklCVVRFID0gIm5hbWUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFID0gImVuY29kaW5nU3R5bGUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9BVFRSSUJVVEUgPSAibWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0FUVFJJQlVURSA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRTX0FUVFJJQlVURSA9ICJwYXJ0cyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIDogbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0MmIwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotCi0KLXB1YmxpYyBjbGFzcyBTT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci17Ci0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgaWYgKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGlmIChTT0FQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5CT0RZX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChTT0FQQ29uc3RhbnRzLkZBVUxUX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5IRUFERVJfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlckZhdWx0KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbG9jYWxOYW1lOiAiICsgbG9jYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuIFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbmFtZXNwYWNlOiAiICsgbmFtZXNwYWNlKTsKLSAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUFN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2E2ZWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgU09BUFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUFN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gU09BUFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElORzoKLSAgICAgIHsKLSAgICAgICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQQmluZGluZyhzb2FwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQQmluZGluZyhzb2FwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZOgotICAgICAgewotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IChTT0FQQm9keSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBCb2R5KHNvYXBCb2R5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBCb2R5KHNvYXBCb2R5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFOgotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyQmFzZSBzb2FwSGVhZGVyQmFzZSA9IChTT0FQSGVhZGVyQmFzZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXJCYXNlKHNvYXBIZWFkZXJCYXNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyQmFzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEhlYWRlckJhc2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyQmFzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVDoKLSAgICAgIHsKLSAgICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IChTT0FQRmF1bHQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQRmF1bHQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQRmF1bHQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzb2FwRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OOgotICAgICAgewotICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBPcGVyYXRpb24oc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBPcGVyYXRpb24oc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTUzoKLSAgICAgIHsKLSAgICAgICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSAoU09BUEFkZHJlc3MpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQQWRkcmVzcyhzb2FwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQQWRkcmVzcyhzb2FwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIFNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQgPSAoU09BUEhlYWRlckZhdWx0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlU09BUEhlYWRlckJhc2Uoc29hcEhlYWRlckZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlckZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSOgotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXIoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlU09BUEhlYWRlckJhc2Uoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBIZWFkZXIoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvZHk8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Cb2R5PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlU09BUEJvZHkoU09BUEJvZHkgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5IZWFkZXIgQmFzZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXJCYXNlKFNPQVBIZWFkZXJCYXNlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQRmF1bHQoU09BUEZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBBZGRyZXNzKFNPQVBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXJGYXVsdChTT0FQSGVhZGVyRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlU09BUEhlYWRlcihTT0FQSGVhZGVyIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBCaW5kaW5nKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBBZGRyZXNzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBBZGRyZXNzKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEJvZHk8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBCb2R5PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBCb2R5KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBPcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUE9wZXJhdGlvbihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTT0FQSGVhZGVyRmF1bHQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlcjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTT0FQSGVhZGVyKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL1NPQVBTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1NDM0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uLy9hcGlzdHlsZXMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08dGl0bGU+V1NETCBNb2RlbCBTT0FQIEJpbmRpbmcgRXh0ZW5zaW9uIEFQSSBPdmVydmlldzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvcD4KLTx0YWJsZSB3aWR0aD0iNTAwIj4KLTx0cj4KLTx0ZD4KLTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJjYjkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08aHRtbD4KLQk8aGVhZD4KLQkJPG1ldGEKLQkJCW5hbWU9InJvb3QiCi0JCi0JCQljb250ZW50PSIuLi8uLi8uLi8uLi8uLi8uLi8iIC8+Ci0JCTx0aXRsZT5XU0RMIE1vZGVsIFNPQVAgQmluZGluZyBFeHRlbnNpb24gQVBJIE92ZXJ2aWV3PC90aXRsZT4KLQk8L2hlYWQ+Ci0KLQk8Ym9keT4KLQkJPGFic3RyYWN0PgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvYWJzdHJhY3Q+Ci0JCTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPiAKLQk8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWVmODFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBiaW5kaW5nIGVsZW1lbnQuIEEgYmluZGluZyBkZWZpbmVzIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbCBkZXRhaWxzIGZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0VHlwZS4gVGhlcmUgbWF5IGJlIGFueSBudW1iZXIgb2YgYmluZGluZ3MgZm9yIGEgZ2l2ZW4gcG9ydFR5cGUuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFUG9ydFR5cGUgPGVtPkVQb3J0IFR5cGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0RUJpbmRpbmdPcGVyYXRpb25zIDxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JQmluZGluZyIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBCaW5kaW5nIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuQmluZGluZwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFFOYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdfUU5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UU5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VW5kZWZpbmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ19VbmRlZmluZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFUG9ydFR5cGUoUG9ydFR5cGUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ19FUG9ydFR5cGUoKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFBvcnRUeXBlIGdldEVQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVQb3J0VHlwZSA8ZW0+RVBvcnQgVHlwZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVBvcnQgVHlwZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVQb3J0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RVBvcnRUeXBlKFBvcnRUeXBlIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9ufS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLX0gLy8gQmluZGluZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjY2E0ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBGYXVsdDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZmF1bHQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQSBmYXVsdCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZhdWx0IHdpdGggdGhlIHNhbWUgbmFtZS4gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXRFRmF1bHQgPGVtPkVGYXVsdDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ0ZhdWx0KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JQmluZGluZ0ZhdWx0IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdGYXVsdCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdGYXVsdF9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUZhdWx0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUZhdWx0KEZhdWx0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdGYXVsdF9FRmF1bHQoKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEZhdWx0IGdldEVGYXVsdCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0RUZhdWx0IDxlbT5FRmF1bHQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RUZhdWx0KEZhdWx0IHZhbHVlKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFRmF1bHQoKSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi0gICAqIEBzZWUgI2dldEVGYXVsdCgpCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLklGYXVsdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgamF2YXgud3NkbC5GYXVsdCBnZXRGYXVsdCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVGYXVsdChGYXVsdCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNzZXRFRmF1bHQoRmF1bHQpCi0gICAqIEBwYXJhbSBmYXVsdCB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBmYXVsdFR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLklGYXVsdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRGYXVsdChqYXZheC53c2RsLkZhdWx0IGZhdWx0KTsKLQotfSAvLyBCaW5kaW5nRmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGRiNjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIGlucHV0IGVsZW1lbnQgd2l0aGluIGFuIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgaW5wdXQgb2YgdGhlIG9wZXJhdGlvbi4gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ0lucHV0KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JQmluZGluZ0lucHV0IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdJbnB1dCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdJbnB1dF9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUlucHV0KElucHV0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdJbnB1dF9FSW5wdXQoKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIElucHV0IGdldEVJbnB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RUlucHV0KElucHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFSW5wdXQoKSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi0gICAqIEBzZWUgI2dldEVJbnB1dCgpCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLklJbnB1dCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgamF2YXgud3NkbC5JbnB1dCBnZXRJbnB1dCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVJbnB1dChJbnB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNzZXRFSW5wdXQoSW5wdXQpCi0gICAqIEBwYXJhbSBpbnB1dCB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBpbnB1dFR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLklJbnB1dCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRJbnB1dChqYXZheC53c2RsLklucHV0IGlucHV0KTsKLQotfSAvLyBCaW5kaW5nSW5wdXQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwODM0YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPcGVyYXRpb248L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50IHdpdGhpbiBhIGJpbmRpbmcuIEFuIG9wZXJhdGlvbiBlbGVtZW50IHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lIHdpdGhpbiB0aGUgYmluZGluZydzIHBvcnRUeXBlLiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RU9wZXJhdGlvbiA8ZW0+RU9wZXJhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0lucHV0IDxlbT5FQmluZGluZyBJbnB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ091dHB1dCA8ZW0+RUJpbmRpbmcgT3V0cHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nRmF1bHRzIDxlbT5FQmluZGluZyBGYXVsdHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLklCaW5kaW5nT3BlcmF0aW9uIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdPcGVyYXRpb24gZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbl9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVPcGVyYXRpb24oT3BlcmF0aW9uKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgT3BlcmF0aW9uIGdldEVPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFT3BlcmF0aW9uIDxlbT5FT3BlcmF0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FT3BlcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RU9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RU9wZXJhdGlvbihPcGVyYXRpb24gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0KCkKLSAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nSW5wdXQgZ2V0RUJpbmRpbmdJbnB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nSW5wdXQgPGVtPkVCaW5kaW5nIElucHV0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpCi0gICAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgQmluZGluZ091dHB1dCBnZXRFQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nT3V0cHV0IDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUJpbmRpbmdGYXVsdHMoKTsKLQotfSAvLyBCaW5kaW5nT3BlcmF0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzAxM2I4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE91dHB1dDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG91dHB1dCBvZiB0aGUgb3BlcmF0aW9uLiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ091dHB1dCgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSUJpbmRpbmdPdXRwdXQiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmluZGluZ091dHB1dCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nT3V0cHV0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RU91dHB1dChPdXRwdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPdXRwdXQgZ2V0RU91dHB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldEVPdXRwdXQgPGVtPkVPdXRwdXQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFT3V0cHV0KE91dHB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RU91dHB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLSAgICogQHNlZSAjZ2V0RU91dHB1dCgpCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JT3V0cHV0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBqYXZheC53c2RsLk91dHB1dCBnZXRPdXRwdXQoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFT3V0cHV0KE91dHB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNzZXRFT3V0cHV0KE91dHB1dCkKLSAgICogQHBhcmFtIG91dHB1dCB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwgb3V0cHV0VHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSU91dHB1dCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQgb3V0cHV0KTsKLQotfSAvLyBCaW5kaW5nT3V0cHV0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg5ZDM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZWZpbml0aW9uPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBXU0RMIGRvY3VtZW50LgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RW5jb2RpbmcgPGVtPkVuY29kaW5nPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVJbXBvcnRzIDxlbT5FSW1wb3J0czwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFVHlwZXMgPGVtPkVUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTWVzc2FnZXMgPGVtPkVNZXNzYWdlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFUG9ydFR5cGVzIDxlbT5FUG9ydCBUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFQmluZGluZ3MgPGVtPkVCaW5kaW5nczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFU2VydmljZXMgPGVtPkVTZXJ2aWNlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTmFtZXNwYWNlcyA8ZW0+RU5hbWVzcGFjZXM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb24oKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLklEZWZpbml0aW9uIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERlZmluaXRpb24gZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXJnZXQgTmFtZXNwYWNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VGFyZ2V0TmFtZXNwYWNlKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX1RhcmdldE5hbWVzcGFjZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0xvY2F0aW9uKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFFOYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fUU5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UU5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbmNvZGluZzwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RW5jb2Rpbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVuY29kaW5nPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RW5jb2RpbmcoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRW5jb2RpbmcoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldEVuY29kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RW5jb2RpbmcgPGVtPkVuY29kaW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmNvZGluZzwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldEVuY29kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZX0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTWVzc2FnZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRU1lc3NhZ2VzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFTWVzc2FnZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGV9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBvcnQgVHlwZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBvcnQgVHlwZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVBvcnRUeXBlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ30uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZ3M8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmdzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRUJpbmRpbmdzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmciIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFQmluZGluZ3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVNlcnZpY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2V9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVNlcnZpY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVTZXJ2aWNlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVNlcnZpY2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZX0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTmFtZXNwYWNlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTmFtZXNwYWNlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVOYW1lc3BhY2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FVHlwZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFVHlwZXMoVHlwZXMpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKQotICAgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFR5cGVzIGdldEVUeXBlcygpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVUeXBlcyA8ZW0+RVR5cGVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FVHlwZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFVHlwZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVUeXBlcyhUeXBlcyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbXBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FSW1wb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FSW1wb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VJbXBvcnRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVJbXBvcnRzKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFJldHVybnMgYSBXM0MgRE9NIERvY3VtZW50IGJ1aWx0IGZyb20gdGhlIGlucHV0IFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gVzNDIERPTSBEb2N1bWVudC4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkRPTURvY3VtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBEb2N1bWVudCBnZXREb2N1bWVudCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXRzIGEgVzNDIERPTSBEb2N1bWVudCB0byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgdXAgYSBET00gRWxlbWVudCB0cmVlIGZvciB0aGUgV1NETCBtb2RlbC4KLSAgICogQHBhcmFtIGRvY3VtZW50IFczQyBET00gRG9jdW1lbnQuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBkb2N1bWVudERhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5ET01Eb2N1bWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCBkb2N1bWVudCk7Ci0KLX0gLy8gRGVmaW5pdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U3MTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudC4gV1NETCBhbGxvd3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2lzUmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRFbGVtZW50VHlwZSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSUV4dGVuc2liaWxpdHlFbGVtZW50IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuZHMgV1NETEVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlcXVpcmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZXF1aXJlZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFJlcXVpcmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfUmVxdWlyZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1JlcXVpcmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2lzUmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZXF1aXJlZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzUmVxdWlyZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFJlcXVpcmVkKGJvb2xlYW4gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBUeXBlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RWxlbWVudFR5cGUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfRWxlbWVudFR5cGUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIiB0cmFuc2llbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldEVsZW1lbnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2dldEVsZW1lbnRUeXBlIDxlbT5FbGVtZW50IFR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbGVtZW50VHlwZShRTmFtZSB2YWx1ZSk7Ci0KLX0gLy8gRXh0ZW5zaWJpbGl0eUVsZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVhNmRjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5BdHRyaWJ1dGVFeHRlbnNpYmxlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FbGVtZW50RXh0ZW5zaWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmxlIEVsZW1lbnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAgV1NETCBhbGxvd3MgZWxlbWVudHMgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgdGVjaG5vbG9neSAocmVmZXJyZWQgdG8gaGVyZSBhcyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzKSB1bmRlciB2YXJpb3VzIGVsZW1lbnRzIGRlZmluZWQgYnkgV1NETC4gVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb2ludCBvZiBleHRlbnNpYmlsaXR5LgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50I2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRFeHRlbnNpYmxlRWxlbWVudCgpCi0gKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLklFbGVtZW50RXh0ZW5zaWJsZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JQXR0cmlidXRlRXh0ZW5zaWJsZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBFeHRlbnNpYmxlRWxlbWVudCBleHRlbmRzIFdTRExFbGVtZW50LCBFbGVtZW50RXh0ZW5zaWJsZSwgQXR0cmlidXRlRXh0ZW5zaWJsZQotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotfSAvLyBFeHRlbnNpYmxlRWxlbWVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWMxOGUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZmF1bHQgZWxlbWVudC4gRmF1bHQgZWxlbWVudHMgc3BlY2lmeSB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIGFueSBlcnJvciBtZXNzYWdlcyB0aGF0IG1heSBiZSBvdXRwdXQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEZhdWx0KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53c2RsLklGYXVsdCIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBGYXVsdCBleHRlbmRzIE1lc3NhZ2VSZWZlcmVuY2UsIGphdmF4LndzZGwuRmF1bHQKLXsKLX0gLy8gRmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTg1MzczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkltcG9ydDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBXU0RMIGltcG9ydCBlbGVtZW50LiBXU0RMIGFsbG93cyBhc3NvY2lhdGluZyBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24gdXNpbmcgYW4gaW1wb3J0IGVsZW1lbnQuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRJbXBvcnQoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLklJbXBvcnQiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSW1wb3J0IGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuSW1wb3J0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRMb2NhdGlvblVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RURlZmluaXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFRGVmaW5pdGlvbihEZWZpbml0aW9uKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEltcG9ydF9FRGVmaW5pdGlvbigpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBEZWZpbml0aW9uIGdldEVEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RURlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVEZWZpbml0aW9uKERlZmluaXRpb24gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVNjaGVtYShYU0RTY2hlbWEpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW1wb3J0X0VTY2hlbWEoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgWFNEU2NoZW1hIGdldEVTY2hlbWEoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldEVTY2hlbWEgPGVtPkVTY2hlbWE8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFU2NoZW1hKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFU2NoZW1hKFhTRFNjaGVtYSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RVNjaGVtYSgpLgotICAgKiBAc2VlICNnZXRFU2NoZW1hKCkKLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVNjaGVtYTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFNjaGVtYSBnZXRTY2hlbWEoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFU2NoZW1hKFhTRFNjaGVtYSkuCi0gICAqIEBzZWUgI3NldEVTY2hlbWEoWFNEU2NoZW1hKQotICAgKiBAcGFyYW0gc2NoZW1hIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVNjaGVtYTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKTsKLQotfSAvLyBJbXBvcnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3YTYyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5wdXQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQuIEFuIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgdGhlIGlucHV0IG9mIHRoZSBvcGVyYXRpb24uCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW5wdXQoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuSUlucHV0IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElucHV0IGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZSwgamF2YXgud3NkbC5JbnB1dAotewotfSAvLyBJbnB1dApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhNzM3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgbWVzc2FnZSBlbGVtZW50LiBBIFdTREwgbWVzc2FnZSBpcyBhbiBhYnN0cmFjdCwgdHlwZWQgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZSgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSU1lc3NhZ2UiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZSBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLk1lc3NhZ2UKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRRTmFtZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlX1FOYW1lKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFFOYW1lKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVuZGVmaW5lZChib29sZWFuKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE1lc3NhZ2VfVW5kZWZpbmVkKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGJvb2xlYW4gaXNVbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUGFydHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE1lc3NhZ2VfRVBhcnRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFUGFydHMoKTsKLQotfSAvLyBNZXNzYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgwMGI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1lc3NhZ2UgUmVmZXJlbmNlPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE1lc3NhZ2VSZWZlcmVuY2UoKQotICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWZlcmVuY2UgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE1lc3NhZ2VSZWZlcmVuY2VfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFTWVzc2FnZShNZXNzYWdlKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1lc3NhZ2UgZ2V0RU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVNZXNzYWdlKE1lc3NhZ2UgdmFsdWUpOwotCi19IC8vIE1lc3NhZ2VSZWZlcmVuY2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJiYWI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWVzcGFjZTwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG5hbWVzcGFjZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXNwYWNlIHByZWZpeCB1c2VkIGluIGEgV1NETCBkb2N1bWVudC4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0VVJJIDxlbT5VUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRQcmVmaXggPGVtPlByZWZpeDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TmFtZXNwYWNlKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hbWVzcGFjZSBleHRlbmRzIEVPYmplY3QKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE5hbWVzcGFjZV9VUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0VVJJIDxlbT5VUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHJlZml4PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QcmVmaXg8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRQcmVmaXgoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE5hbWVzcGFjZV9QcmVmaXgoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFByZWZpeCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0UHJlZml4IDxlbT5QcmVmaXg8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZWZpeDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFByZWZpeCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UHJlZml4KFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gTmFtZXNwYWNlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEzYTQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQuIEEgV1NETCBvcGVyYXRpb24gaXMgYW4gYWJzdHJhY3QgZGVzY3JpcHRpb24gb2YgYW4gYWN0aW9uIHN1cHBvcnRlZCBieSBhIHNlcnZpY2UuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUZhdWx0cyA8ZW0+RUZhdWx0czwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVQYXJhbWV0ZXJPcmRlcmluZyA8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uKCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JT3BlcmF0aW9uIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE9wZXJhdGlvbiBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLk9wZXJhdGlvbgotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFN0eWxlKE9wZXJhdGlvblR5cGUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX1N0eWxlKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb25UeXBlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPcGVyYXRpb25UeXBlIGdldFN0eWxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFN0eWxlKE9wZXJhdGlvblR5cGUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVbmRlZmluZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fVW5kZWZpbmVkKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGJvb2xlYW4gaXNVbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFSW5wdXQoSW5wdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX0VJbnB1dCgpCi0gICAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSW5wdXQgZ2V0RUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RUlucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFSW5wdXQoSW5wdXQgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RU91dHB1dChPdXRwdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKQotICAgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE91dHB1dCBnZXRFT3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RU91dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RU91dHB1dChPdXRwdXQgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUZhdWx0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fRUZhdWx0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVGYXVsdHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcmFtZXRlciBPcmRlcmluZzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+JyByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVQYXJhbWV0ZXJPcmRlcmluZygpOwotCi19IC8vIE9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNjAyYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PdXRwdXQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50LiBBbiBvdXRwdXQgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0IGZvciB0aGUgb3V0cHV0IG9mIHRoZSBvcGVyYXRpb24uCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3V0cHV0KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53c2RsLklPdXRwdXQiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgT3V0cHV0IGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZSwgamF2YXgud3NkbC5PdXRwdXQKLXsKLX0gLy8gT3V0cHV0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzg4OThmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBhcnQgZWxlbWVudC4gUGFydHMgZGVzY3JpYmUgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIEVhY2ggcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggYSB0eXBlIGZyb20gc29tZSB0eXBlIHN5c3RlbS4gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnROYW1lIDxlbT5FbGVtZW50IE5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0VHlwZU5hbWUgPGVtPlR5cGUgTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlRGVmaW5pdGlvbiA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnREZWNsYXJhdGlvbiA8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnQoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLklQYXJ0IgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFBhcnQgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5QYXJ0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydF9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWxlbWVudCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FbGVtZW50IE5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldEVsZW1lbnROYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnRfRWxlbWVudE5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRFbGVtZW50TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnROYW1lIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldEVsZW1lbnROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbGVtZW50TmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlIE5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRUeXBlTmFtZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQYXJ0X1R5cGVOYW1lKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0VHlwZU5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlTmFtZSA8ZW0+VHlwZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlIE5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRUeXBlTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VHlwZU5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0VHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydF9UeXBlRGVmaW5pdGlvbigpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBYU0RUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVEZWZpbml0aW9uIDxlbT5UeXBlIERlZmluaXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFR5cGVEZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQgRGVjbGFyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50RGVjbGFyYXRpb24gPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFbGVtZW50RGVjbGFyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RU1lc3NhZ2UoTWVzc2FnZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQYXJ0X0VNZXNzYWdlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1lc3NhZ2UgZ2V0RU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVNZXNzYWdlKE1lc3NhZ2UgdmFsdWUpOwotCi19IC8vIFBhcnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNDY4NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydCBlbGVtZW50LiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldEVCaW5kaW5nIDxlbT5FQmluZGluZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydCgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSVBvcnQiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUG9ydCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLlBvcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZzwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmc8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUJpbmRpbmcoQmluZGluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0X0VCaW5kaW5nKCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nIGdldEVCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0RUJpbmRpbmcgPGVtPkVCaW5kaW5nPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZzwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFQmluZGluZyhCaW5kaW5nIHZhbHVlKTsKLQotfSAvLyBQb3J0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOWQzZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0IFR5cGU8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvcnRUeXBlIGVsZW1lbnQgb2YgdGhlIFdTREwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMSBhbmQgYW4gSW50ZXJmYWNlIGNvbXBvbmVudCBvZiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gMS4yLiBBIHBvcnQgdHlwZSBvciBJbnRlcmZhY2UgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjZ2V0RU9wZXJhdGlvbnMgPGVtPkVPcGVyYXRpb25zPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0VHlwZSgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSVBvcnRUeXBlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFBvcnRUeXBlIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuUG9ydFR5cGUKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRRTmFtZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0VHlwZV9RTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UU5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VW5kZWZpbmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGJvb2xlYW4gaXNVbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9ufS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVPcGVyYXRpb25zPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPcGVyYXRpb25zPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBvcnRUeXBlX0VPcGVyYXRpb25zKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVPcGVyYXRpb25zKCk7Ci0KLX0gLy8gUG9ydFR5cGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTI2ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gQSBzZXJ2aWNlIGdyb3VwcyBhIHNldCBvZiByZWxhdGVkIHBvcnRzIHRvZ2V0aGVyLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0RVBvcnRzIDxlbT5FUG9ydHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFNlcnZpY2UoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLklTZXJ2aWNlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNlcnZpY2UgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5TZXJ2aWNlCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0U2VydmljZV9RTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRRTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVbmRlZmluZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBvcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRTZXJ2aWNlX0VQb3J0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVBvcnRzKCk7Ci0KLX0gLy8gU2VydmljZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzEwMzk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHlwZXM8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHR5cGVzIGVsZW1lbnQuIFRoZSB0eXBlcyBlbGVtZW50IGVuY2xvc2VzIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSByZWxldmFudCBmb3IgdGhlIGV4Y2hhbmdlZCBtZXNzYWdlcy4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRUeXBlcygpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSVR5cGVzIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFR5cGVzIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuVHlwZXMKLXsKLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFJldHVybnMgYSBMaXN0IG9mIGlubGluZSBYU0RTY2hlbWEgaW5zdGFuY2VzIGluIHRoaXMgVHlwZXMuIAotICAgKiBAcmV0dXJuIExpc3Qgb2YgWFNEU2NoZW1hIGluc3RhbmNlcy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLklMaXN0IiBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRTY2hlbWFzKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFJldHVybnMgYSBMaXN0IG9mIGlubGluZSBYU0RTY2hlbWEgaW5zdGFuY2VzIGluIHRoaXMgVHlwZXMuIFRoZSB0YXJnZXROYW1lc3BhY2Ugb2YKLSAgICogdGhlIHNjaGVtYXMgYXJlIHRoZSBzYW1lIGFzIG5hbWVzcGFjZVVSSSBhcmd1bWVudCB2YWx1ZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYXMgdG8gYmUgc2VhcmNoZWQgZm9yLgotICAgKiBAcmV0dXJuIExpc3Qgb2YgWFNEU2NoZW1hIGluc3RhbmNlcy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JTGlzdCIgbWFueT0iZmFsc2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIExpc3QgZ2V0U2NoZW1hcyhTdHJpbmcgbmFtZXNwYWNlVVJJKTsKLQotfSAvLyBUeXBlcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNDQ4NjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRDaGlsZHJlbiA8ZW0+Q2hpbGRyZW48L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2hpbGRyZW48L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNoaWxkcmVuPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNoaWxkcmVuPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRDaGlsZHJlbigpOwotCi19IC8vIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmEzZGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgbGFuZ3VhZ2UgZWxlbWVudC4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXRFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRXU0RMRWxlbWVudCgpCi0gKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETEVsZW1lbnQgZXh0ZW5kcyBFT2JqZWN0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRE9NRWxlbWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRWxlbWVudCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIFRoaXMgaXMgdGhlIHVuZGVybHlpbmcgRE9NIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50LCAKLSAgICogaS5lLiwgdGhlIHtAbGluayAjdXBkYXRlRWxlbWVudCgpIHNlcmlhbGl6YXRpb259IG9mIHRoaXMgY29tcG9uZW50LgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RWxlbWVudChFbGVtZW50KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFdTRExFbGVtZW50X0VsZW1lbnQoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkRPTUVsZW1lbnQiIHRyYW5zaWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRWxlbWVudCBnZXRFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBSZXR1cm5zIHRoZSBEZWZpbml0aW9uIHRoYXQgY29udGFpbnMgdGhpcyBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIERlZmluaXRpb24gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXRzIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbiBvZiB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZmluaXRpb24gdGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVuY2xvc2luZ0RlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKTsKLQotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIERPTSB7QGxpbmsgI2dldEVsZW1lbnQgZWxlbWVudH0gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSAgICogaS5lLiwgaXQgc2VyaWFsaXplcyB0aGUgY29tcG9uZW50IGFuZCBtYWludGFpbnMgYW4gYXNzb2NpYXRpb24gd2l0aCB0aGF0IHNlcmlhbGl6YXRpb24uCi0gICAqIEBzZWUgI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikKLSAgICogQHNlZSAjZ2V0RWxlbWVudAotICAgKi8KLSAgdm9pZCB1cGRhdGVFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIEVuc3VyZXMgdGhhdCB0aGUgdW5kZXJseWluZyBET00ge0BsaW5rICNnZXRFbGVtZW50IGVsZW1lbnR9IGJvdGggZXhpc3RzIGFuZCBpcyB1cC10by1kYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kZWwsCi0gICAqIGkuZS4sIGl0IHNlcmlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhbmQgbWFpbnRhaW5zIGFuIGFzc29jaWF0aW9uIHdpdGggdGhhdCBzZXJpYWxpemF0aW9uLgotICAgKiBGb3IgPGNvZGU+ZGVlcCA9PSB0cnVlPC9jb2RlPiwgCi0gICAqIG9yIHdoZW4gPGNvZGU+e0BsaW5rICNnZXRFbGVtZW50IGdldEVsZW1lbnQoKX0gPT0gbnVsbDwvY29kZT4sIAotICAgKiB0aGlzIGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMge0BsaW5rICN1cGRhdGVFbGVtZW50KCl9OwotICAgKiBvdGhlcndpc2UsIGl0IHVwZGF0ZXMganVzdCB0aGUgRE9NIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50IHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUuCi0gICAqIEBzZWUgI3VwZGF0ZUVsZW1lbnQoKQotICAgKiBAc2VlICNnZXRFbGVtZW50Ci0gICAqLwotICB2b2lkIHVwZGF0ZUVsZW1lbnQoYm9vbGVhbiBkZWVwKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgY29uY3JldGUgY29udGFpbmVyIG9mIHRoaXMgY29tcG9uZW50LCAKLSAgICogaS5lLiwgdGhlIGludmVyc2Ugb2YgdGhlIGJsYWNrIGRpYW1vbmQgcmVsYXRpb25zIGluIHRoZSBVTUwgbW9kZWwuCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvbnRhaW5lcjwvZW0+JyByZWZlcmVuY2UuCi0gICAqLwotICBXU0RMRWxlbWVudCBnZXRDb250YWluZXIoKTsKLQotICAvKioKLSAgICogQ2FsbGVkIHRvIGluZGljYXRlIHRoYXQgdGhlIGdpdmVuIGVsZW1lbnQgaGFzIGNoYW5nZWQ7Ci0gICAqIHRoZSBlbGVtZW50IHNob3VsZCB0eXBpY2FsbHkgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCB7QGxpbmsgI2dldEVsZW1lbnR9LgotICAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IGNsaWVudHMgd2lsbCBub3QgY2FsbCB0aGlzIHRoZW1zZWx2ZXMgCi0gICAqIHNpbmNlIHRoZSBET00gZXZlbnQgbGlzdGVuZXJzIGF0dGFjaGVkIHRvIHRoZSB1bmRlcmx5aW5nIERPTSB3aWxsIGludm9rZSB0aGVzZSBhdXRvbWF0aWNhbGx5LgotICAgKiBAcGFyYW0gY2hhbmdlZEVsZW1lbnQgdGhlIERPTSBlbGVtZW50IGNoYW5nZWQgZm9yIHRoaXMgaW5zdGFuY2UuCi0gICAqLwotICB2b2lkIGVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpOwotCi19IC8vIFdTRExFbGVtZW50CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOGUwNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgV1NETEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRmFjdG9yeUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQgVHlwZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydCBUeXBlPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQb3J0VHlwZSBjcmVhdGVQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPcGVyYXRpb24gY3JlYXRlT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTWVzc2FnZSBjcmVhdGVNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUGFydCBjcmVhdGVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgQmluZGluZyBjcmVhdGVCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nT3BlcmF0aW9uIGNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQb3J0IGNyZWF0ZVBvcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbXBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkltcG9ydDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSW1wb3J0IGNyZWF0ZUltcG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSW5wdXQgY3JlYXRlSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk91dHB1dDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgT3V0cHV0IGNyZWF0ZU91dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRmF1bHQgY3JlYXRlRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nSW5wdXQgY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nT3V0cHV0IGNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nRmF1bHQgY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZXNwYWNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lc3BhY2U8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE5hbWVzcGFjZSBjcmVhdGVOYW1lc3BhY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHlwZXM8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFR5cGVzIGNyZWF0ZVR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFdTRExQYWNrYWdlIGdldFdTRExQYWNrYWdlKCk7Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgLy9XU0RMUGFja2FnZSBnZXRXU0RMUGFja2FnZSgpOwotfSAvL1dTRExGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZTI0NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGUgV1NETCBtb2RlbCBjb250YWlucyBjbGFzc2VzIGZvciB0aGUgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKS4KLSAqIAotICogV1NETCBkZXNjcmliZXMgbmV0d29yayBzZXJ2aWNlcyBhcyBzZXRzIG9mIGVuZHBvaW50cyBvcGVyYXRpbmcgb24gbWVzc2FnZXMuIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBhcmUgZGVzY3JpYmVkIGFic3RyYWN0bHksIGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbCBhbmQgbWVzc2FnZSBmb3JtYXQgdG8gZGVmaW5lIGFuIGVuZHBvaW50LgotICogCi0gKiBXU0RMIGRlc2NyaWJlcyB0aGUgZm9ybWF0cyBvZiB0aGUgbWVzc2FnZXMgZXhjaGFuZ2VkIGJ5IHRoZSBzZXJ2aWNlcywgYW5kIHN1cHBvcnRzIHRoZSBYTUwgU2NoZW1hcyBzcGVjaWZpY2F0aW9uIGFzIGl0cyBjYW5vbmljYWwgdHlwZSBzeXN0ZW0uIFRoaXMgcGFja2FnZSB1c2VzIGFuIFhNTCBTY2hlbWEgSW5mb3NldCBtb2RlbCBwYWNrYWdlIChzZWUgdGhlIFhTRCBwYWNrYWdlKSB0byBkZXNjcmliZSB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXRzLgotICogCi0gKiBUaGUgbW9kZWwgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkaWFncmFtcywgbmFtZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcHRlcnMgaW4gdGhlIFdTREwgMS4xIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvTk9URS13c2RsLTIwMDEwMzE1KQotICogLSAyLjEgRGVmaW5pdGlvbiwgc2hvd3MgdGhlIFdTREwgZGVmaW5pdGlvbiBlbGVtZW50IGFuZCB0aGUgV1NETCBkb2N1bWVudCBzdHJ1Y3R1cmUKLSAqIC0gMi4xLjEgTmFtaW5nIGFuZCBMaW5raW5nLCBzaG93cyB0aGUgbmFtZXNwYWNlIGFuZCBpbXBvcnQgbWVjaGFuaXNtCi0gKiAtIDIuMS4zIEV4dGVuc2liaWxpdHksIHNob3dzIHRoZSBXU0RMIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtCi0gKiAtIDIuMiBUeXBlcywgc2hvd3MgdGhlIHVzZSBvZiBYTUwgU2NoZW1hIHR5cGVzIGluIFdTREwKLSAqIC0gMi4zIE1lc3NhZ2VzLCAyLjQgUG9ydFR5cGVzLCAyLjUgQmluZGluZ3MgYW5kIDIuNyBTZXJ2aWNlcywgc2hvdyB0aGUgbWFqb3IgV1NETCBlbGVtZW50cyBhbmQgdGhlaXIgcmVsYXRpb25zLgotICogCi0gKiBUaGUgV1NETCBjbGFzc2VzIGV4dGVuZCB0aGUgamF2YXgud3NkbCBpbnRlcmZhY2VzIGRlZmluZWQgYnkgSlNSIDExMC4gQ2xhc3NlcyB3aXRoIGludGVyZmFjZSBhbmQgZGF0YXR5cGUgc3RlcmVvdHlwZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIG5vbi1NT0YgaW50ZXJmYWNlcy4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3RvcnkKLSAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5BTUUgPSAid3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19QUkVGSVggPSAid3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFdTRExQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbCA8ZW0+RWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgV1NETF9FTEVNRU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBXU0RMX0VMRU1FTlRfX0VMRU1FTlQgPSAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmxlRWxlbWVudEltcGwgPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJsZUVsZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgRVhURU5TSUJMRV9FTEVNRU5UID0gMTI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVCA9IFdTRExfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsIDxlbT5Qb3J0IFR5cGU8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRSA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX1RZUEVfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX1RZUEVfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fRU9QRVJBVElPTlMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3J0IFR5cGU8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OID0gMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX1NUWUxFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FSU5QVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FT1VUUFVUID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FRkFVTFRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcmFtZXRlciBPcmRlcmluZzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA3OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwgPGVtPk1lc3NhZ2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNRVNTQUdFID0gMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX1VOREVGSU5FRCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fRVBBUlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWVzc2FnZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCA8ZW0+UGFydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFBBUlQgPSA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX0VMRU1FTlRfTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX1RZUEVfTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX1RZUEVfREVGSU5JVElPTiA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgRGVjbGFyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FTUVTU0FHRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBCSU5ESU5HID0gNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX1VOREVGSU5FRCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX19FUE9SVF9UWVBFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwgPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT04gPSA2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04gPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwgPGVtPlNlcnZpY2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0U2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTRVJWSUNFID0gNzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTRVJWSUNFX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX1VOREVGSU5FRCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fRVBPUlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2VydmljZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTRVJWSUNFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCA8ZW0+UG9ydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFBPUlQgPSA4OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fRUJJTkRJTkcgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3J0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlQgPSA5OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQgPSBXU0RMX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQgPSBXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSA9IFdTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCA9IFdTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsIDxlbT5EZWZpbml0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTiA9IDEwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgTmFtZXNwYWNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fTE9DQVRJT04gPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX1FOQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FTkNPRElORyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVJbXBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FSU1QT1JUUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VUWVBFUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRU1FU1NBR0VTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VQT1JUX1RZUEVTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA3OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmdzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FQklORElOR1MgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VTRVJWSUNFUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgOTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FTkFNRVNQQUNFUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZWZpbml0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsIDxlbT5JbXBvcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1QT1JUID0gMTE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX05BTUVTUEFDRV9VUkkgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0xPQ0FUSU9OX1VSSSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1QT1JUX19FREVGSU5JVElPTiA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0VTQ0hFTUEgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbXBvcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1QT1JUX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNRVNTQUdFX1JFRkVSRU5DRSA9IDQ2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbnB1dEltcGwgPGVtPklucHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbnB1dEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTlBVVCA9IDEzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX0VMRU1FTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX05BTUUgPSBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX0VNRVNTQUdFID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW5wdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfRkVBVFVSRV9DT1VOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3V0cHV0SW1wbCA8ZW0+T3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PdXRwdXRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0T3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE9VVFBVVCA9IDE0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9VVFBVVF9fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19OQU1FID0gTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9VVFBVVF9fRU1FU1NBR0UgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PdXRwdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX0ZFQVRVUkVfQ09VTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkZhdWx0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEZBVUxUID0gMTU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IE1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fTkFNRSA9IE1FU1NBR0VfUkVGRVJFTkNFX19OQU1FOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fRU1FU1NBR0UgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9GRUFUVVJFX0NPVU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsIDxlbT5CaW5kaW5nIElucHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ0lucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVQgPSAxNjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0lOUFVUX19FSU5QVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsIDxlbT5CaW5kaW5nIE91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUID0gMTc7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PVVRQVVRfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsIDxlbT5CaW5kaW5nIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ0ZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFQgPSAxODsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0ZBVUxUX19FRkFVTFQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwgPGVtPk5hbWVzcGFjZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBOQU1FU1BBQ0UgPSAxOTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE5BTUVTUEFDRV9fVVJJID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE5BTUVTUEFDRV9fUFJFRklYID0gMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5hbWVzcGFjZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBOQU1FU1BBQ0VfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGUgPGVtPklBdHRyaWJ1dGUgRXh0ZW5zaWJsZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5BdHRyaWJ1dGVFeHRlbnNpYmxlCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUF0dHJpYnV0ZUV4dGVuc2libGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUFUVFJJQlVURV9FWFRFTlNJQkxFID0gNDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQXR0cmlidXRlIEV4dGVuc2libGU8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUFUVFJJQlVURV9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUG9ydFR5cGUgPGVtPklQb3J0IFR5cGU8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLlBvcnRUeXBlCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElQT1JUX1RZUEUgPSAyMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQb3J0IFR5cGU8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UID0gSUFUVFJJQlVURV9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FbGVtZW50RXh0ZW5zaWJsZSA8ZW0+SUVsZW1lbnQgRXh0ZW5zaWJsZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FbGVtZW50RXh0ZW5zaWJsZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElFbGVtZW50RXh0ZW5zaWJsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJRUxFTUVOVF9FWFRFTlNJQkxFID0gNDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRWxlbWVudCBFeHRlbnNpYmxlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElFTEVNRU5UX0VYVEVOU0lCTEVfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb24gPGVtPklPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvbgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU9QRVJBVElPTiA9IDIxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSBJRUxFTUVOVF9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuSW5wdXQgPGVtPklJbnB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuSW5wdXQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUlOUFVUID0gMjI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSW5wdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUlOUFVUX0ZFQVRVUkVfQ09VTlQgPSBJQVRUUklCVVRFX0VYVEVOU0lCTEVfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5PdXRwdXQgPGVtPklPdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLk91dHB1dAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU9VVFBVVCA9IDIzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU91dHB1dDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJT1VUUFVUX0ZFQVRVUkVfQ09VTlQgPSBJQVRUUklCVVRFX0VYVEVOU0lCTEVfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5GYXVsdCA8ZW0+SUZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5GYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJRkFVTFQgPSAyNDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklGYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJRkFVTFRfRkVBVFVSRV9DT1VOVCA9IElBVFRSSUJVVEVfRVhURU5TSUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLk1lc3NhZ2UgPGVtPklNZXNzYWdlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5NZXNzYWdlCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1FU1NBR0UgPSAyNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNZXNzYWdlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNRVNTQUdFX0ZFQVRVUkVfQ09VTlQgPSBJRUxFTUVOVF9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUGFydCA8ZW0+SVBhcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLlBhcnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJUEFSVCA9IDI2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBhcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVBBUlRfRkVBVFVSRV9DT1VOVCA9IElBVFRSSUJVVEVfRVhURU5TSUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlNlcnZpY2UgPGVtPklTZXJ2aWNlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5TZXJ2aWNlCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVNlcnZpY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVNFUlZJQ0UgPSAyNzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTZXJ2aWNlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTRVJWSUNFX0ZFQVRVUkVfQ09VTlQgPSBJRUxFTUVOVF9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUG9ydCA8ZW0+SVBvcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLlBvcnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUG9ydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJUE9SVCA9IDI4OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBvcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVBPUlRfRkVBVFVSRV9DT1VOVCA9IElFTEVNRU5UX0VYVEVOU0lCTEVfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nIDxlbT5JQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZwotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElCSU5ESU5HID0gMjk7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJQklORElOR19GRUFUVVJFX0NPVU5UID0gSUVMRU1FTlRfRVhURU5TSUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX09QRVJBVElPTiA9IDMwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gSUVMRU1FTlRfRVhURU5TSUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCA8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfSU5QVVQgPSAzMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIElucHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQgPSBJRUxFTUVOVF9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ091dHB1dCA8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfT1VUUFVUID0gMzI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfT1VUUFVUX0ZFQVRVUkVfQ09VTlQgPSBJRUxFTUVOVF9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IDxlbT5JQmluZGluZyBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJQklORElOR19GQVVMVCA9IDMzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IElFTEVNRU5UX0VYVEVOU0lCTEVfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElFWFRFTlNJQklMSVRZX0VMRU1FTlQgPSAzNDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkRlZmluaXRpb24gPGVtPklEZWZpbml0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5EZWZpbml0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SURlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSURFRklOSVRJT04gPSAzNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklEZWZpbml0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQgPSBJRUxFTUVOVF9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuSW1wb3J0IDxlbT5JSW1wb3J0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5JbXBvcnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSW1wb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElJTVBPUlQgPSAzNjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklJbXBvcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUlNUE9SVF9GRUFUVVJFX0NPVU5UID0gSUFUVFJJQlVURV9FWFRFTlNJQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5MaXN0IDxlbT5JTGlzdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUxpc3QoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUxJU1QgPSAzNzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklMaXN0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElMSVNUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5NYXAgPGVtPklNYXA8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZhLnV0aWwuTWFwCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU1hcCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTUFQID0gMzg7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTWFwPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNQVBfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS5uZXQuVVJMIDxlbT5JVVJMPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS5uZXQuVVJMCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVVSTCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJVVJMID0gMzk7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JVVJMPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElVUkxfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IDxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElFWFRFTlNJT05fUkVHSVNUUlkgPSA0MDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUVYVEVOU0lPTl9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlR5cGVzSW1wbCA8ZW0+VHlwZXM8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlR5cGVzSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFR5cGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFRZUEVTID0gNDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBUWVBFU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVFlQRVNfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVFlQRVNfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlR5cGVzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFRZUEVTX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLkl0ZXJhdG9yIDxlbT5JSXRlcmF0b3I8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZhLnV0aWwuSXRlcmF0b3IKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSXRlcmF0b3IoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUlURVJBVE9SID0gNDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSXRlcmF0b3I8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUlURVJBVE9SX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuVHlwZXMgPGVtPklUeXBlczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuVHlwZXMKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJVHlwZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVRZUEVTID0gNDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JVHlwZXM8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVRZUEVTX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQgPSA0NDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoaWxkcmVuPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4gPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQgPSA0NTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50IEJhc2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UX0JBU0VfVVJJID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLk9iamVjdCA8ZW0+SU9iamVjdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJT2JqZWN0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElPQkpFQ1QgPSA0OTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklPYmplY3Q8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU9CSkVDVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYSA8ZW0+SVNjaGVtYTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU0NIRU1BID0gNTA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU2NoZW1hPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTQ0hFTUFfRkVBVFVSRV9DT1VOVCA9IElFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgUU5BTUUgPSA1MTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE9wZXJhdGlvblR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX1RZUEUgPSA1MjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5ET00gRWxlbWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy53M2MuZG9tLkVsZW1lbnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRET01FbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IERPTV9FTEVNRU5UID0gNTM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RXhjZXB0aW9uPC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEV4Y2VwdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBXU0RMX0VYQ0VQVElPTiA9IDU0OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy53M2MuZG9tLkRvY3VtZW50Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RE9NRG9jdW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgRE9NX0RPQ1VNRU5UID0gNTU7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFdTRExFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQgPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQoKQotICAgKiBAc2VlICNnZXRXU0RMRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSA8ZW0+UG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0UG9ydFR5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRRTmFtZSgpCi0gICAqIEBzZWUgI2dldFBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQb3J0VHlwZV9RTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbmRlZmluZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRQb3J0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRFT3BlcmF0aW9ucyA8ZW0+RU9wZXJhdGlvbnM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVPcGVyYXRpb25zPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2dldEVPcGVyYXRpb25zKCkKLSAgICogQHNlZSAjZ2V0UG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdHlsZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0U3R5bGUoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9TdHlsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0T3BlcmF0aW9uX05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9VbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5FSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVJbnB1dCgpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RU91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RU91dHB1dCgpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFRmF1bHRzIDxlbT5FRmF1bHRzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FRmF1bHRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFRmF1bHRzKCkKLSAgICogQHNlZSAjZ2V0T3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRUZhdWx0cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVQYXJhbWV0ZXJPcmRlcmluZyA8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkKLSAgICogQHNlZSAjZ2V0T3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldFFOYW1lKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9RTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2lzVW5kZWZpbmVkKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9VbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjZ2V0RVBhcnRzIDxlbT5FUGFydHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVQYXJ0czwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldEVQYXJ0cygpCi0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE1lc3NhZ2VfRVBhcnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQgPGVtPlBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQYXJ0X05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnROYW1lIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbGVtZW50IE5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50TmFtZSgpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBhcnRfRWxlbWVudE5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVOYW1lIDxlbT5UeXBlIE5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlIE5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlTmFtZSgpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBhcnRfVHlwZU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVEZWZpbml0aW9uIDxlbT5UeXBlIERlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5UeXBlIERlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlRGVmaW5pdGlvbigpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBhcnRfVHlwZURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnREZWNsYXJhdGlvbiA8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50RGVjbGFyYXRpb24oKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFTWVzc2FnZSgpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBhcnRfRU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0UU5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nX1FOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nX1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0RVBvcnRUeXBlIDxlbT5FUG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVBvcnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVQb3J0VHlwZSgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdfRVBvcnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVCaW5kaW5nT3BlcmF0aW9ucyA8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAqIEBzZWUgI2dldEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RU9wZXJhdGlvbiA8ZW0+RU9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFT3BlcmF0aW9uKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0lucHV0IDxlbT5FQmluZGluZyBJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdJbnB1dCgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdPdXRwdXQgPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nT3V0cHV0KCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0ZhdWx0cyA8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FQmluZGluZyBGYXVsdHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0ZhdWx0cygpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSA8ZW0+U2VydmljZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNlcnZpY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0UU5hbWUoKQotICAgKiBAc2VlICNnZXRTZXJ2aWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTZXJ2aWNlX1FOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRTZXJ2aWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNnZXRFUG9ydHMgPGVtPkVQb3J0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBvcnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0RVBvcnRzKCkKLSAgICogQHNlZSAjZ2V0U2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U2VydmljZV9FUG9ydHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCA8ZW0+UG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFBvcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldFBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBvcnRfTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0RUJpbmRpbmcgPGVtPkVCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXRFQmluZGluZygpCi0gICAqIEBzZWUgI2dldFBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBvcnRfRUJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjaXNSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZXF1aXJlZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCNpc1JlcXVpcmVkKCkKLSAgICogQHNlZSAjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RWxlbWVudFR5cGUgPGVtPkVsZW1lbnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRFbGVtZW50VHlwZSgpCi0gICAqIEBzZWUgI2dldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uIDxlbT5EZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0RGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFRhcmdldE5hbWVzcGFjZSgpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldExvY2F0aW9uKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UU5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRRTmFtZSgpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldERlZmluaXRpb25fUU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVuY29kaW5nIDxlbT5FbmNvZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuY29kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RW5jb2RpbmcoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX0VuY29kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVJbXBvcnRzIDxlbT5FSW1wb3J0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUltcG9ydHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFSW1wb3J0cygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRUltcG9ydHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVUeXBlcyA8ZW0+RVR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RVR5cGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RVR5cGVzKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RU1lc3NhZ2VzIDxlbT5FTWVzc2FnZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVNZXNzYWdlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVNZXNzYWdlcygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRU1lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVQb3J0VHlwZXMgPGVtPkVQb3J0IFR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FUG9ydCBUeXBlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVQb3J0VHlwZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RUJpbmRpbmdzIDxlbT5FQmluZGluZ3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVCaW5kaW5nczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVCaW5kaW5ncygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRUJpbmRpbmdzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVTZXJ2aWNlcyA8ZW0+RVNlcnZpY2VzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FU2VydmljZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFU2VydmljZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTmFtZXNwYWNlcyA8ZW0+RU5hbWVzcGFjZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVOYW1lc3BhY2VzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RU5hbWVzcGFjZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCA8ZW0+SW1wb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkltcG9ydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEltcG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEltcG9ydF9OYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEltcG9ydF9Mb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FRGVmaW5pdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RURlZmluaXRpb24oKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEltcG9ydF9FRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVNjaGVtYTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RVNjaGVtYSgpCi0gICAqIEBzZWUgI2dldEltcG9ydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0SW1wb3J0X0VTY2hlbWEoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEV4dGVuc2libGVFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAqIEBzZWUgI2dldEV4dGVuc2libGVFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0IDxlbT5JbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0IDxlbT5PdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0T3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0IDxlbT5GYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0RmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0IDxlbT5CaW5kaW5nIElucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdJbnB1dF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUlucHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXRFSW5wdXQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCA8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0QmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ091dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ091dHB1dF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldEVPdXRwdXQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0IDxlbT5CaW5kaW5nIEZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRCaW5kaW5nRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdGYXVsdF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldEVGYXVsdCA8ZW0+RUZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUZhdWx0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXRFRmF1bHQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlIDxlbT5OYW1lc3BhY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZXNwYWNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFVSSSA8ZW0+VVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRVUkkoKQotICAgKiBAc2VlICNnZXROYW1lc3BhY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE5hbWVzcGFjZV9VUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0UHJlZml4IDxlbT5QcmVmaXg8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5QcmVmaXg8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFByZWZpeCgpCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TmFtZXNwYWNlX1ByZWZpeCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBvcnRUeXBlIDxlbT5JUG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0VHlwZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5Qb3J0VHlwZSIgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUF0dHJpYnV0ZUV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJUG9ydFR5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb24gPGVtPklPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5PcGVyYXRpb24iIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLklFbGVtZW50RXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5JbnB1dCA8ZW0+SUlucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLklucHV0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLklucHV0IiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JQXR0cmlidXRlRXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLk91dHB1dCA8ZW0+SU91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuT3V0cHV0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLk91dHB1dCIgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUF0dHJpYnV0ZUV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJT3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuRmF1bHQgPGVtPklGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5GYXVsdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5GYXVsdCIgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUF0dHJpYnV0ZUV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5NZXNzYWdlIDxlbT5JTWVzc2FnZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLk1lc3NhZ2UKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuTWVzc2FnZSIgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUVsZW1lbnRFeHRlbnNpYmxlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5QYXJ0IDxlbT5JUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JUGFydDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLlBhcnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuUGFydCIgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUF0dHJpYnV0ZUV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlNlcnZpY2UgPGVtPklTZXJ2aWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTZXJ2aWNlPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuU2VydmljZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5TZXJ2aWNlIiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JRWxlbWVudEV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU2VydmljZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBvcnQgPGVtPklQb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQb3J0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5Qb3J0IiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JRWxlbWVudEV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJUG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmcgPGVtPklCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5CaW5kaW5nIiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JRWxlbWVudEV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQmluZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLklFbGVtZW50RXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0lucHV0IDxlbT5JQmluZGluZyBJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JQmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5CaW5kaW5nSW5wdXQiIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLklFbGVtZW50RXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IDxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JRWxlbWVudEV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JRWxlbWVudEV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQmluZGluZ0ZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuRGVmaW5pdGlvbiA8ZW0+SURlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SURlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5EZWZpbml0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkRlZmluaXRpb24iIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLklFbGVtZW50RXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuSW1wb3J0IDxlbT5JSW1wb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklJbXBvcnQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5JbXBvcnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuSW1wb3J0IiBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JQXR0cmlidXRlRXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElJbXBvcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLkxpc3QgPGVtPklMaXN0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklMaXN0PC9lbT4nLgotICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLnV0aWwuTGlzdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAgPGVtPklNYXA8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1hcDwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLnV0aWwuTWFwCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLnV0aWwuTWFwIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU1hcCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLm5ldC5VUkwgPGVtPklVUkw8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVVSTDwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLm5ldC5VUkwKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEubmV0LlVSTCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElVUkwoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IDxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMgPGVtPlR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlR5cGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRUeXBlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuSXRlcmF0b3IgPGVtPklJdGVyYXRvcjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSXRlcmF0b3I8L2VtPicuCi0gICAqIEBzZWUgamF2YS51dGlsLkl0ZXJhdG9yCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLnV0aWwuSXRlcmF0b3IiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJSXRlcmF0b3IoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5UeXBlcyA8ZW0+SVR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklUeXBlczwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLlR5cGVzCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLlR5cGVzIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRDaGlsZHJlbiA8ZW0+Q2hpbGRyZW48L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkNoaWxkcmVuPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRDaGlsZHJlbigpCi0gICAqIEBzZWUgI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50X0NoaWxkcmVuKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCNnZXREb2N1bWVudEJhc2VVUkkgPGVtPkRvY3VtZW50IEJhc2UgVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RG9jdW1lbnQgQmFzZSBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgICogQHNlZSAjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X0RvY3VtZW50QmFzZVVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50I2dldFNjaGVtYSA8ZW0+U2NoZW1hPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+U2NoZW1hPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50I2dldFNjaGVtYSgpCi0gICAqIEBzZWUgI2dldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FTWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldEVNZXNzYWdlKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZV9FTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRWxlbWVudEV4dGVuc2libGUgPGVtPklFbGVtZW50IEV4dGVuc2libGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUVsZW1lbnQgRXh0ZW5zaWJsZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRWxlbWVudEV4dGVuc2libGUKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FbGVtZW50RXh0ZW5zaWJsZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElFbGVtZW50RXh0ZW5zaWJsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuQXR0cmlidXRlRXh0ZW5zaWJsZSA8ZW0+SUF0dHJpYnV0ZSBFeHRlbnNpYmxlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklBdHRyaWJ1dGUgRXh0ZW5zaWJsZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuQXR0cmlidXRlRXh0ZW5zaWJsZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQXR0cmlidXRlRXh0ZW5zaWJsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuT2JqZWN0IDxlbT5JT2JqZWN0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklPYmplY3Q8L2VtPicuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS5sYW5nLk9iamVjdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElPYmplY3QoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWEgPGVtPklTY2hlbWE8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNjaGVtYTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWEiIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLklFeHRlbnNpYmlsaXR5RWxlbWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElTY2hlbWEoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgPGVtPlFOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZSA8ZW0+T3BlcmF0aW9uIFR5cGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5PcGVyYXRpb25UeXBlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgb3JnLnczYy5kb20uRWxlbWVudCA8ZW0+RE9NIEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkRPTSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy53M2MuZG9tLkVsZW1lbnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9Im9yZy53M2MuZG9tLkVsZW1lbnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRET01FbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZheC53c2RsLldTRExFeGNlcHRpb24gPGVtPkV4Y2VwdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RXhjZXB0aW9uPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0V1NETEV4Y2VwdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgb3JnLnczYy5kb20uRG9jdW1lbnQgPGVtPkRPTSBEb2N1bWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy53M2MuZG9tLkRvY3VtZW50Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcudzNjLmRvbS5Eb2N1bWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldERPTURvY3VtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFdTRExGYWN0b3J5IGdldFdTRExGYWN0b3J5KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKLSAgICogPHVsPgotICAgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gICAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gICAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICAgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICAgKiA8L3VsPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50ZXJmYWNlIExpdGVyYWxzCi0gIHsKLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGwgPGVtPkVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgV1NETF9FTEVNRU5UID0gZUlOU1RBTkNFLmdldFdTRExFbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gZUlOU1RBTkNFLmdldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBXU0RMX0VMRU1FTlRfX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsIDxlbT5Qb3J0IFR5cGU8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UG9ydFR5cGUoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgUE9SVF9UWVBFID0gZUlOU1RBTkNFLmdldFBvcnRUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgUE9SVF9UWVBFX19RTkFNRSA9IGVJTlNUQU5DRS5nZXRQb3J0VHlwZV9RTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBQT1JUX1RZUEVfX1VOREVGSU5FRCA9IGVJTlNUQU5DRS5nZXRQb3J0VHlwZV9VbmRlZmluZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFBPUlRfVFlQRV9fRU9QRVJBVElPTlMgPSBlSU5TVEFOQ0UuZ2V0UG9ydFR5cGVfRU9wZXJhdGlvbnMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0T3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE9QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBPUEVSQVRJT05fX1NUWUxFID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9TdHlsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgT1BFUkFUSU9OX19OQU1FID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE9QRVJBVElPTl9fVU5ERUZJTkVEID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9VbmRlZmluZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgT1BFUkFUSU9OX19FSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX0VJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgT1BFUkFUSU9OX19FT1VUUFVUID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9FT3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE9QRVJBVElPTl9fRUZBVUxUUyA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fRUZhdWx0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkcgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwgPGVtPk1lc3NhZ2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRNZXNzYWdlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1FU1NBR0UgPSBlSU5TVEFOQ0UuZ2V0TWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE1FU1NBR0VfX1FOQU1FID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VfUU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgTUVTU0FHRV9fVU5ERUZJTkVEID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VfVW5kZWZpbmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgTUVTU0FHRV9fRVBBUlRTID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VfRVBhcnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCA8ZW0+UGFydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBhcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgUEFSVCA9IGVJTlNUQU5DRS5nZXRQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBQQVJUX19OQU1FID0gZUlOU1RBTkNFLmdldFBhcnRfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBQQVJUX19FTEVNRU5UX05BTUUgPSBlSU5TVEFOQ0UuZ2V0UGFydF9FbGVtZW50TmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBQQVJUX19UWVBFX05BTUUgPSBlSU5TVEFOQ0UuZ2V0UGFydF9UeXBlTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGUgRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBQQVJUX19UWVBFX0RFRklOSVRJT04gPSBlSU5TVEFOQ0UuZ2V0UGFydF9UeXBlRGVmaW5pdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgRGVjbGFyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTiA9IGVJTlNUQU5DRS5nZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFBBUlRfX0VNRVNTQUdFID0gZUlOU1RBTkNFLmdldFBhcnRfRU1lc3NhZ2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsIDxlbT5CaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBCSU5ESU5HID0gZUlOU1RBTkNFLmdldEJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBCSU5ESU5HX19RTkFNRSA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nX1FOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEJJTkRJTkdfX1VOREVGSU5FRCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nX1VuZGVmaW5lZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19fRVBPUlRfVFlQRSA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nX0VQb3J0VHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TID0gZUlOU1RBTkNFLmdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCA8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEJJTkRJTkdfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEJJTkRJTkdfT1BFUkFUSU9OX19OQU1FID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsIDxlbT5TZXJ2aWNlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0U2VydmljZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTRVJWSUNFID0gZUlOU1RBTkNFLmdldFNlcnZpY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTRVJWSUNFX19RTkFNRSA9IGVJTlNUQU5DRS5nZXRTZXJ2aWNlX1FOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNFUlZJQ0VfX1VOREVGSU5FRCA9IGVJTlNUQU5DRS5nZXRTZXJ2aWNlX1VuZGVmaW5lZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFNFUlZJQ0VfX0VQT1JUUyA9IGVJTlNUQU5DRS5nZXRTZXJ2aWNlX0VQb3J0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwgPGVtPlBvcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQb3J0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFBPUlQgPSBlSU5TVEFOQ0UuZ2V0UG9ydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgUE9SVF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRQb3J0X05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZzwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBQT1JUX19FQklORElORyA9IGVJTlNUQU5DRS5nZXRQb3J0X0VCaW5kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBFWFRFTlNJQklMSVRZX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEID0gZUlOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFID0gZUlOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCA8ZW0+RGVmaW5pdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERlZmluaXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgREVGSU5JVElPTiA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgREVGSU5JVElPTl9fTE9DQVRJT04gPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIERFRklOSVRJT05fX1FOQU1FID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fUU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbmNvZGluZzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBERUZJTklUSU9OX19FTkNPRElORyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VuY29kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUltcG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FSU1QT1JUUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VJbXBvcnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VUWVBFUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VUeXBlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VNRVNTQUdFUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VNZXNzYWdlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRVBPUlRfVFlQRVMgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmdzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRUJJTkRJTkdTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRUJpbmRpbmdzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVNlcnZpY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRVNFUlZJQ0VTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVNlcnZpY2VzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU5hbWVzcGFjZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FTkFNRVNQQUNFUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsIDxlbT5JbXBvcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEltcG9ydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTVBPUlQgPSBlSU5TVEFOQ0UuZ2V0SW1wb3J0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBJTVBPUlRfX05BTUVTUEFDRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0SW1wb3J0X05hbWVzcGFjZVVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBJTVBPUlRfX0xPQ0FUSU9OX1VSSSA9IGVJTlNUQU5DRS5nZXRJbXBvcnRfTG9jYXRpb25VUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBJTVBPUlRfX0VERUZJTklUSU9OID0gZUlOU1RBTkNFLmdldEltcG9ydF9FRGVmaW5pdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgSU1QT1JUX19FU0NIRU1BID0gZUlOU1RBTkNFLmdldEltcG9ydF9FU2NoZW1hKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmxlRWxlbWVudEltcGwgPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJsZUVsZW1lbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRFeHRlbnNpYmxlRWxlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBFWFRFTlNJQkxFX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBlSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW5wdXRJbXBsIDxlbT5JbnB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW5wdXRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJbnB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTlBVVCA9IGVJTlNUQU5DRS5nZXRJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3V0cHV0SW1wbCA8ZW0+T3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PdXRwdXRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPdXRwdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgT1VUUFVUID0gZUlOU1RBTkNFLmdldE91dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRmF1bHRJbXBsIDxlbT5GYXVsdDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRmF1bHRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBGQVVMVCA9IGVJTlNUQU5DRS5nZXRGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0lucHV0SW1wbCA8ZW0+QmluZGluZyBJbnB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0lucHV0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ0lucHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEJJTkRJTkdfSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0lucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBCSU5ESU5HX0lOUFVUX19OQU1FID0gZUlOU1RBTkNFLmdldEJpbmRpbmdJbnB1dF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfSU5QVVRfX0VJTlBVVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nSW5wdXRfRUlucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3V0cHV0SW1wbCA8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nT3V0cHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEJJTkRJTkdfT1VUUFVUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEJJTkRJTkdfT1VUUFVUX19OQU1FID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPdXRwdXRfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19PVVRQVVRfX0VPVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsIDxlbT5CaW5kaW5nIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nRmF1bHQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgQklORElOR19GQVVMVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEJJTkRJTkdfRkFVTFRfX05BTUUgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0ZhdWx0X05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19GQVVMVF9fRUZBVUxUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwgPGVtPk5hbWVzcGFjZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TmFtZXNwYWNlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE5BTUVTUEFDRSA9IGVJTlNUQU5DRS5nZXROYW1lc3BhY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgTkFNRVNQQUNFX19VUkkgPSBlSU5TVEFOQ0UuZ2V0TmFtZXNwYWNlX1VSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBOQU1FU1BBQ0VfX1BSRUZJWCA9IGVJTlNUQU5DRS5nZXROYW1lc3BhY2VfUHJlZml4KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0VHlwZSA8ZW0+SVBvcnQgVHlwZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydFR5cGUKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElQb3J0VHlwZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJUE9SVF9UWVBFID0gZUlOU1RBTkNFLmdldElQb3J0VHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuT3BlcmF0aW9uIDxlbT5JT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5PcGVyYXRpb24KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU9QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRJT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5JbnB1dCA8ZW0+SUlucHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5JbnB1dAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUlucHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElJTlBVVCA9IGVJTlNUQU5DRS5nZXRJSW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLk91dHB1dCA8ZW0+SU91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuT3V0cHV0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJT3V0cHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElPVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0SU91dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuRmF1bHQgPGVtPklGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuRmF1bHQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0SUZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5NZXNzYWdlIDxlbT5JTWVzc2FnZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuTWVzc2FnZQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU1lc3NhZ2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1FU1NBR0UgPSBlSU5TVEFOQ0UuZ2V0SU1lc3NhZ2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlBhcnQgPGVtPklQYXJ0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5QYXJ0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUGFydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJUEFSVCA9IGVJTlNUQU5DRS5nZXRJUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuU2VydmljZSA8ZW0+SVNlcnZpY2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLlNlcnZpY2UKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElTZXJ2aWNlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTRVJWSUNFID0gZUlOU1RBTkNFLmdldElTZXJ2aWNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0IDxlbT5JUG9ydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVBvcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVBPUlQgPSBlSU5TVEFOQ0UuZ2V0SVBvcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmcgPGVtPklCaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJQklORElORyA9IGVJTlNUQU5DRS5nZXRJQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiA8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ09wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJQklORElOR19PUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCA8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdJbnB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJQklORElOR19JTlBVVCA9IGVJTlNUQU5DRS5nZXRJQmluZGluZ0lucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IDxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nT3V0cHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElCSU5ESU5HX09VVFBVVCA9IGVJTlNUQU5DRS5nZXRJQmluZGluZ091dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IDxlbT5JQmluZGluZyBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ0ZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElCSU5ESU5HX0ZBVUxUID0gZUlOU1RBTkNFLmdldElCaW5kaW5nRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJRVhURU5TSUJJTElUWV9FTEVNRU5UID0gZUlOU1RBTkNFLmdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuRGVmaW5pdGlvbiA8ZW0+SURlZmluaXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkRlZmluaXRpb24KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElEZWZpbml0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElERUZJTklUSU9OID0gZUlOU1RBTkNFLmdldElEZWZpbml0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5JbXBvcnQgPGVtPklJbXBvcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkltcG9ydAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUltcG9ydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSU1QT1JUID0gZUlOU1RBTkNFLmdldElJbXBvcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZhLnV0aWwuTGlzdCA8ZW0+SUxpc3Q8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLnV0aWwuTGlzdAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUxpc3QoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUxJU1QgPSBlSU5TVEFOQ0UuZ2V0SUxpc3QoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZhLnV0aWwuTWFwIDxlbT5JTWFwPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YS51dGlsLk1hcAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU1hcCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTUFQID0gZUlOU1RBTkNFLmdldElNYXAoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZhLm5ldC5VUkwgPGVtPklVUkw8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLm5ldC5VUkwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElVUkwoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVVSTCA9IGVJTlNUQU5DRS5nZXRJVVJMKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IDxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUVYVEVOU0lPTl9SRUdJU1RSWSA9IGVJTlNUQU5DRS5nZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlR5cGVzSW1wbCA8ZW0+VHlwZXM8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlR5cGVzSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0VHlwZXMoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgVFlQRVMgPSBlSU5TVEFOQ0UuZ2V0VHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZhLnV0aWwuSXRlcmF0b3IgPGVtPklJdGVyYXRvcjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmEudXRpbC5JdGVyYXRvcgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUl0ZXJhdG9yKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElJVEVSQVRPUiA9IGVJTlNUQU5DRS5nZXRJSXRlcmF0b3IoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlR5cGVzIDxlbT5JVHlwZXM8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLlR5cGVzCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJVHlwZXMoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVRZUEVTID0gZUlOU1RBTkNFLmdldElUeXBlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTiA9IGVJTlNUQU5DRS5nZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudCBCYXNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRfQkFTRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfRG9jdW1lbnRCYXNlVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEgPSBlSU5TVEFOQ0UuZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1FU1NBR0VfUkVGRVJFTkNFID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VSZWZlcmVuY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE1FU1NBR0VfUkVGRVJFTkNFX19OQU1FID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VSZWZlcmVuY2VfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkVsZW1lbnRFeHRlbnNpYmxlIDxlbT5JRWxlbWVudCBFeHRlbnNpYmxlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkVsZW1lbnRFeHRlbnNpYmxlCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRWxlbWVudEV4dGVuc2libGUoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUVMRU1FTlRfRVhURU5TSUJMRSA9IGVJTlNUQU5DRS5nZXRJRWxlbWVudEV4dGVuc2libGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuQXR0cmlidXRlRXh0ZW5zaWJsZSA8ZW0+SUF0dHJpYnV0ZSBFeHRlbnNpYmxlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGUKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElBdHRyaWJ1dGVFeHRlbnNpYmxlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElBVFRSSUJVVEVfRVhURU5TSUJMRSA9IGVJTlNUQU5DRS5nZXRJQXR0cmlidXRlRXh0ZW5zaWJsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmEubGFuZy5PYmplY3QgPGVtPklPYmplY3Q8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJT2JqZWN0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElPQkpFQ1QgPSBlSU5TVEFOQ0UuZ2V0SU9iamVjdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hIDxlbT5JU2NoZW1hPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWEKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElTY2hlbWEoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNDSEVNQSA9IGVJTlNUQU5DRS5nZXRJU2NoZW1hKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRRTmFtZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBRTkFNRSA9IGVJTlNUQU5DRS5nZXRRTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPcGVyYXRpb25UeXBlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRURhdGFUeXBlIE9QRVJBVElPTl9UWVBFID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvblR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5ET00gRWxlbWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy53M2MuZG9tLkVsZW1lbnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERPTUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFRGF0YVR5cGUgRE9NX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0RE9NRWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkV4Y2VwdGlvbjwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEV4Y2VwdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBXU0RMX0VYQ0VQVElPTiA9IGVJTlNUQU5DRS5nZXRXU0RMRXhjZXB0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLnczYy5kb20uRG9jdW1lbnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERPTURvY3VtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRURhdGFUeXBlIERPTV9ET0NVTUVOVCA9IGVJTlNUQU5DRS5nZXRET01Eb2N1bWVudCgpOwotCi0gIH0KLQotfSAvL1dTRExQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWY3NjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5leHRlbnNpYmlsaXR5LkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5leHRlbnNpYmlsaXR5LkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0KLS8qKgotICogVGhlIDxiPlBsdWdpbjwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIFRoZSBXU0RMIG1vZGVsIG5lZWRzIHRvIGJlIGFibGUgdG8gcnVuIHdpdGhpbiBhbiBFY2xpcHNlIHdvcmtiZW5jaCwKLSAqIHdpdGhpbiBhIGhlYWRsZXNzIEVjbGlwc2Ugd29ya3NwYWNlLCBvciBqdXN0IHN0YW5kLWFsb25lIGFzIHBhcnQgCi0gKiBvZiBzb21lIG90aGVyIGFwcGxpY2F0aW9uLgotICogVG8gc3VwcG9ydCB0aGlzLCBhbGwgYWNjZXNzIGlzIGRpcmVjdGVkIHRvIHRoZSBzdGF0aWMgbWV0aG9kcywKLSAqIHdoaWNoIGNhbiByZWRpcmVjdCB0aGUgc2VydmljZSBhcyBhcHBvcHJpYXRlIHRvIHRoZSBydW50aW1lLgotICogRHVyaW5nIHN0YW5kLWFsb25lIGludm9jYXRpb24gbm8gcGx1Z2luIGluaXRpYWxpemF0aW9uIHRha2VzIHBsYWNlLgotICogSW4gdGhpcyBjYXNlIHlvdSB3aWxsIG5lZWQgdGhlIHJlc291cmNlcyBqYXIgb24gdGhlIGNsYXNzIHBhdGguCi0gKiBAc2VlICNnZXRCYXNlVVJMCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gKiBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSAqIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuCi0gKiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogPC9wPgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbgotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGx1Z2luLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMUGx1Z2luIElOU1RBTkNFID0gbmV3IFdTRExQbHVnaW4oKTsKLQotICAvKioKLSAgICogVGhlIG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAgKi8KLSAgc3RhdGljIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbiBwbHVnaW47Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KLSAgICovCi0gIHByaXZhdGUgV1NETFBsdWdpbigpCi0gIHsKLSAgICBzdXBlcihuZXcgUmVzb3VyY2VMb2NhdG9yIFtde30pOwotICB9Ci0KLSAgLyoKLSAgICogSmF2YWRvYyBjb3BpZWQgZnJvbSBiYXNlIGNsYXNzLgotICAgKi8KLSAgcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgotICAgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIHByaXZhdGUgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGludGVybmFsR2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkoKQotICB7Ci0gICAgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkgPSBuZXcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsKCk7Ci0gICAgICBpZiAocGx1Z2luICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlcihleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSkucmVhZFJlZ2lzdHJ5KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICByZXR1cm4gaW50ZXJuYWxHZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShuYW1lc3BhY2UpOwotICB9Ci0KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5IGdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBpbnRlcm5hbEdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gIH0KLQotICBwdWJsaWMgV1NETEZhY3RvcnkgY3JlYXRlV1NETDRKRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiNmViNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbi5FY2xpcHNlUGx1Z2luOwotCi0KLS8qKgotICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotICogY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotICogKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4KLXsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgV1NETFBsdWdpbkltcGxlbWVudGF0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICAvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgotICAgIC8vCi0gICAgV1NETFBsdWdpbi5wbHVnaW4gPSB0aGlzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTJmMjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RG9jdW1lbnRCYXNlVVJJIDxlbT5Eb2N1bWVudCBCYXNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0U2NoZW1hIDxlbT5TY2hlbWE8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAqIEBtb2RlbCBzdXBlclR5cGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JU2NoZW1hIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIFNjaGVtYQotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RG9jdW1lbnQgQmFzZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRvY3VtZW50IEJhc2UgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Eb2N1bWVudCBCYXNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldERvY3VtZW50QmFzZVVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfRG9jdW1lbnRCYXNlVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXREb2N1bWVudEJhc2VVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RG9jdW1lbnRCYXNlVVJJIDxlbT5Eb2N1bWVudCBCYXNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RG9jdW1lbnQgQmFzZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXREb2N1bWVudEJhc2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldERvY3VtZW50QmFzZVVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TY2hlbWE8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNjaGVtYTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2NoZW1hPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0U2NoZW1hKFhTRFNjaGVtYSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKQotICAgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFNjaGVtYSBnZXRTY2hlbWEoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0U2NoZW1hIDxlbT5TY2hlbWE8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNjaGVtYTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U2NoZW1hKFhTRFNjaGVtYSB2YWx1ZSk7Ci0KLX0gLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTcyOTg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmV4dGVuc2liaWxpdHk7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIENMQVNTX0xPQURJTkdfRVJST1IgPSAiQ0xBU1NfTE9BRElOR19FUlJPUiI7Ci0KLSAgcHJvdGVjdGVkIEJ1bmRsZSBidW5kbGU7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjbGFzc05hbWU7Ci0KLSAgcHJvdGVjdGVkIE9iamVjdCBmYWN0b3J5OwotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBuYW1lc3BhY2UsIEJ1bmRsZSBidW5kbGUpCi0gIHsKLSAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgfQotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZhY3RvcnkoKQotICB7Ci0gICAgaWYgKGZhY3RvcnkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgIGZhY3RvcnkgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhY3RvcnkgPSBDTEFTU19MT0FESU5HX0VSUk9SOwotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFjdG9yeSAhPSBDTEFTU19MT0FESU5HX0VSUk9SID8gKEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSlmYWN0b3J5IDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2libGl0eUVsZW1lbnRGYWN0b3J5KEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5KQotICB7Ci0gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjYzZmIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eTsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeQotewotICBwcm90ZWN0ZWQgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgbmFtZXNwYWNlLCBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gIHsKLSAgICBtYXAucHV0KG5hbWVzcGFjZSwgZGVzY3JpcHRvcik7Ci0gIH0KLQotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IHJlc3VsdCA9IG51bGw7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gKEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IpbWFwLmdldChuYW1lc3BhY2UpOwotICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVzY3JpcHRvci5nZXRFeHRlbnNpYmxpdHlFbGVtZW50RmFjdG9yeSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJGYWN0b3J5KFN0cmluZyBuYW1lc3BhY2UsIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5KQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbmV3IEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IobnVsbCwgbmFtZXNwYWNlLCBudWxsKTsKLSAgICBkZXNjcmlwdG9yLnNldEV4dGVuc2libGl0eUVsZW1lbnRGYWN0b3J5KGZhY3RvcnkpOwotICAgIG1hcC5wdXQobmFtZXNwYWNlLCBkZXNjcmlwdG9yKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ4YjRkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eTsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IFdTRExQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX05BTUUgPSAiZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsKLQotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlcihFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBwbHVnaW5SZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQTFVHSU5fSUQsIEVYVEVOU0lPTl9QT0lOVF9JRCk7Ci0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHJlc29sdmUoVVJMIHBsYXRmb3JtVVJMLCBTdHJpbmcgcmVsYXRpdmVQYXRoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHBsYXRmb3JtVVJMKTsKLSAgICByZXR1cm4gcmVzb2x2ZWRVUkwudG9TdHJpbmcoKSArIHJlbGF0aXZlUGF0aDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhFTEVNRU5UX05BTUUpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGRFbGVtZW50ID0gKElDb25maWd1cmF0aW9uRWxlbWVudCllbGVtZW50OwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCBwbHVnaW5CdW5kbGUpOwotICAgICAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LnB1dChuYW1lc3BhY2UsIGRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CYXNlR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CYXNlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYzZmZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmFzZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VHZW5lcmF0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQotICBwcml2YXRlIFN0cmluZyByZWZOYW1lOwotCi0gIHByaXZhdGUgYm9vbGVhbiBvdmVyd3JpdGU7Ci0KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotICBwcm90ZWN0ZWQgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yOwotCi0gIHB1YmxpYyB2b2lkIHNldENvbnRlbnRHZW5lcmF0b3IoQ29udGVudEdlbmVyYXRvciBnZW5lcmF0b3IpCi0gIHsKLSAgICBjb250ZW50R2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICB9Ci0KLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3IgZ2V0Q29udGVudEdlbmVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gY29udGVudEdlbmVyYXRvcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZShib29sZWFuIG92ZXJ3cml0ZSkKLSAgewotICAgIHRoaXMub3ZlcndyaXRlID0gb3ZlcndyaXRlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0T3ZlcndyaXRlKCkKLSAgewotICAgIHJldHVybiBvdmVyd3JpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlZk5hbWUoU3RyaW5nIHJlZk5hbWUpCi0gIHsKLSAgICB0aGlzLnJlZk5hbWUgPSByZWZOYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWZOYW1lKCkKLSAgewotICAgIHJldHVybiByZWZOYW1lOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKQotICB7Ci0gICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udGVudEdlbmVyYXRvci5nZXRQcm90b2NvbCgpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CaW5kaW5nR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CaW5kaW5nR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNWY4MDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmluZGluZ0dlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci0KLQotLyoKLSAqIENsYXNzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEJpbmRpbmcgYW5kIGl0J3MgY29udGVudC4gIFdlIGxvb2sgaW4gdGhlIHJlZ2lzdHJ5IGZvcgotICogYXBwcm9wcmlhdGUgQ29udGVudEdlbmVyYXRvciBjbGFzc2VzIGJhc2VkIG9uIHRoZSBleGlzdGluZyBCaW5kaW5nIENvbnRlbnQncyBuYW1lc3BhY2UuCi0gKiBBbHRlcm5hdGl2ZWx5LCB1c2VycyBjYW4gcGFzcyBpbiBhIG5hbWVzcGFjZSB0aHJvdWdoIHRoZSBjb25zdHJ1Y3RvciB0byBzcGVjaWZ5IHdoaWNoCi0gKiBuYW1lc3BhY2UgdG8gdXNlIHdoZW4gc2VhcmNoaW5nIHRoZSByZWdpc3RyeS4KLSAqIAotICogVGhlIENvbnRlbnRHZW5lcmF0b3IgbWF5IGFsc28gYmUgc2V0IG1hbnVhbGx5IGJ5IGNhbGxpbmcKLSAqIHNldENvbnRlbnRHZW5lcmF0b3IoQ29udGVudEdlbmVyYXRvcikuCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nR2VuZXJhdG9yIGV4dGVuZHMgQmFzZUdlbmVyYXRvcgotewotICBwcml2YXRlIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0KLSAgLyoKLSAgICogV2hlbiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCwgYXV0b21hdGljYWxseSBhdHRlbXB0IHRvIHJldHJpZXZlIGEgcHJvcGVyCi0gICAqIENvbnRlbnRHZW5lcmF0b3IgYmFzZWQgb24gdGhlIEJpbmRpbmcgZ2l2ZW4uICBUaGUgQ29udGVudEdlbmVyYXRvciBtYXkKLSAgICogYmUgcmVwbGFjZWQgYnkgY2FsbGluZyBzZXRDb250ZW50R2VuZXJhdG9yKENvbnRlbnRHZW5lcmF0b3IpLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdHZW5lcmF0b3IoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgY29udGVudEdlbmVyYXRvciA9IGdldENvbnRlbnRHZW5lcmF0b3IoYmluZGluZyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICB9Ci0KLSAgLyoKLSAgICogV2hlbiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCwgYXV0b21hdGljYWxseSBhdHRlbXB0IHRvIHJldHJpZXZlIGEgcHJvcGVyCi0gICAqIENvbnRlbnRHZW5lcmF0b3IgYmFzZWQgb24gdGhlIG5hbWVzcGFjZSBnaXZlbi4gIFRoZSBDb250ZW50R2VuZXJhdG9yIG1heQotICAgKiBiZSByZXBsYWNlZCBieSBjYWxsaW5nIHNldENvbnRlbnRHZW5lcmF0b3IoQ29udGVudEdlbmVyYXRvcikuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0dlbmVyYXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24sIEJpbmRpbmcgYmluZGluZywgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLSAgICBjb250ZW50R2VuZXJhdG9yID0gZ2V0Q29udGVudEdlbmVyYXRvcihuYW1lc3BhY2UpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yIGdldENvbnRlbnRHZW5lcmF0b3IoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIEZpbmQgdGhlIHJlZ2Vpc3RlcmVkIENvbnRlbnQgR2VuZXJhdG9yIGZvciB0aGUgQmluZGluZwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLy8gR2V0IEJpbmRpbmdDb250ZW50IG5hbWVzcGFjZQotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVlTGlzdC5nZXQoMCk7Ci0gICAgICAvLyBUT0RPOiBRTmFtZSBxTmFtZSA9IGVlLmdldEVsZW1lbnRUeXBlKCk7IGdvIGdldCB0aGUgbmFtZXNwYWNlIGluc3RlYWQ/Ci0gICAgICBuYW1lc3BhY2UgPSBlZS5nZXRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICByZXR1cm4gZ2V0Q29udGVudEdlbmVyYXRvcihuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yIGdldENvbnRlbnRHZW5lcmF0b3IoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbiA9IG51bGw7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAgY29udGVudEdlbiA9IGZhY3RvcnlSZWdpc3RyeS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGVudEdlbjsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZyBjcmVhdGVFbXB0eUJpbmRpbmcoU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIEJpbmRpbmcgbmV3QmluZGluZyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgbmV3QmluZGluZy5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbG9jYWxOYW1lKSk7Ci0gICAgbmV3QmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhuZXdCaW5kaW5nKTsKLQotICAgIHJldHVybiBuZXdCaW5kaW5nOwotICB9Ci0KLSAgLyoKLSAgICogVE9ETzogU2NlbmFyaW86Ci0gICAqIDEpb3ZlcndyaXRlID09IGZhbHNlCi0gICAqIDIpQmluZGluZ09wZXJhdGlvbiB3aXRoIDEgaW5wdXQKLSAgICogMylDb3JyZXNwb25kaW5nIE9wZXJhdGlvbiAod2l0aCBzYW1lIG5hbWUpIHdpdGggMSBpbnB1dCBhbmQgMSBvdXRwdXQKLSAgICogSWYgd2UgZ2VuZXJhdGUgd2l0aCBvdmVyd3JpdGUgPT0gZmFsc2UsIG5vdGhpbmcgaXMgZG9uZS4gIFRodXMsICBhbgotICAgKiBvdXRwdXQgaXMgbm90IGdlbmVyYXRlZCBvbiB0aGUgQmluZGluZ09wZXJhdGlvbi4gIFRoaXMgaXMgYmVjYXVzZSB3ZQotICAgKiBzZWFyY2ggZm9yIGV4aXN0aW5nIEVsZW1lbnRzIG9ubHkgYXQgdGhlIGxldmVsIG9mIEJpbmRpbmdPcGVyYXRpb25zLgotICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIEJpbmRpbmdPcGVyYXRpb24gd2l0aCB0aGUgc2FtZQotICAgKiBuYW1lIGFzIG91ciBPcGVyYXRpb24sIGxlYXZlIGl0IGFsb25lLi4uLiBidXQgc2luY2UgdGhlcmUgaXMgYWxyZWFkeQotICAgKiBhIEJpbmRpbmdPcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lLCB3ZSBkb24ndCBjcmVhdGUgYSBuZXcgQmluZGluZ09wZXJhdGlvbi4KLSAgICogCi0gICAqIFRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIGlzIHJlZHVjZSB0aGlzIGdyYW51bGFyaXR5IHRvIHRoZSBNZXNzYWdlUmVmZXJlbmNlCi0gICAqIGxldmVsLiAgVGhlIGNvZGUgaXMgYWxtb3N0IHRoZXJlIGV4Y2VwdCBmb3IgaG93IHdlIGdlbmVyYXRlIHRoZSBCaW5kaW5nIGVsZW1lbnQKLSAgICogY29udGVudC4gIExvb2sgYXQgQmluZGluZ0dlbnJhdG9yLmdlbmVyYXRlQmluZGluZ09wZXJhdGlvbigpIGFuZAotICAgKiBTT0FQQ29udGVudEdlbmVyYXRvci5qYXZhIGFuZCBpdCdzIGNvbnRlbnQgZ2VuZXJhdGlvbiBtZXRob2QKLSAgICogZm9yIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KLSAgICogCi0gICAqIEZvciB3dHAgUkMxLCBXZSBzaGFsbCBvbmx5IGxvb2sgYXQgdGhlIE9wZXJhdGlvbiBsZXZlbCAoYXMgd2UgZG8gaW4gdGhlIHByZXZpb3VzCi0gICAqIHZlcnNpb24pLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmcgZ2VuZXJhdGVCaW5kaW5nKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIEJpbmRpbmcgaXMgbnVsbCAoTm8gQmluZGluZyB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yKSwgd2UgY3JlYXRlIGFuIGVtcHR5IEJpbmRpbmcgZmlyc3QuCi0gICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgewotICAgICAgICBiaW5kaW5nID0gY3JlYXRlRW1wdHlCaW5kaW5nKGdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZ2V0TmFtZSgpICE9IG51bGwgJiYgIWJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZy5zZXRRTmFtZShuZXcgUU5hbWUoYmluZGluZy5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBnZXROYW1lKCkpKTsKLSAgICAgIH0KLSAgICAgIGlmIChnZXRSZWZOYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBnZXRQb3J0VHlwZSgpOwotICAgICAgICBiaW5kaW5nLnNldEVQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy9UaGUgbW9kZWwgZG9lc24ndCByZWNvbmlsZSB3aXRoIGl0J3MgRWxlbWVudCBwcm9wZXJseSB3aGVuIHdlJ3JlIHNldHRpbmcgYSBudWxsIGZvciBpdCdzIFBvcnRUeXBlCi0gICAgICAgICAgYmluZGluZy5nZXRFbGVtZW50KCkuc2V0QXR0cmlidXRlKCJ0eXBlIiwgIiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnMgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotCi0gICAgICBpZiAoIWdldE92ZXJ3cml0ZSgpKQotICAgICAgewotICAgICAgICAvLyBEb24ndCBPdmVyd3JpdGUKLSAgICAgICAgaWYgKHBvcnRUeXBlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0KLSAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAqIERldGVybWluZSB3aGljaCBPcGVyYXRpb25zIHJlcXVpcmUgbmV3IGEgbmV3IGNvcnJlc3BvbmRpbmcgQmluZGluZ09wZXJhdGlvbnMKLSAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICBMaXN0IG5ld0JpbmRpbmdPcHNOZWVkZWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpbmRleCsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBJdGVyYXRvciBiaW5kaW5nT3BlcmF0aW9uc0l0ID0gYmluZGluZ09wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChiaW5kaW5nT3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCksIG9wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmb3VuZE1hdGNoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuZXdCaW5kaW5nT3BzTmVlZGVkLmFkZChvcGVyYXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBuZXdCaW5kaW5nT3BzTmVlZGVkIGlzIHRoZSBMaXN0IG9mIE9wZXJhdGlvbnMgbmVlZGluZyBuZXcgY29ycmVzcG9uZGluZwotICAgICAgICAgIC8vIEJpbmRpbmdPcGVyYXRpb24ncwotICAgICAgICAgIExpc3QgbmV3QmluZGluZ09wcyA9IGNyZWF0ZU5ld0JpbmRpbmdPcGVyYXRpb25zKG5ld0JpbmRpbmdPcHNOZWVkZWQpOwotCi0gICAgICAgICAgLy8gZG9uJ3QgYWRkIHJlcXVpcmVkIG5hbWVzcGFjZSBpZiBub3RoaW5nIGlzIHJlYWxseSBiZWluZyBhZGRlZAotICAgICAgICAgIGlmICghbmV3QmluZGluZ09wcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFkZFJlcXVpcmVkTmFtZXNwYWNlcyhiaW5kaW5nKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgQmluZGluZ09wZXJhdGlvbidzCi0gICAgICAgICAgSXRlcmF0b3IgbmV3QmluZGluZ09wc0l0ID0gbmV3QmluZGluZ09wcy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChuZXdCaW5kaW5nT3BzSXQuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gbmV3QmluZGluZ09wID0gKEJpbmRpbmdPcGVyYXRpb24pbmV3QmluZGluZ09wc0l0Lm5leHQoKTsKLSAgICAgICAgICAgIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbihuZXdCaW5kaW5nT3ApOwotICAgICAgICAgICAgZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uQ29udGVudChuZXdCaW5kaW5nT3ApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE92ZXJ3cml0ZQotICAgICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYmxvdyBhd2F5IGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIEJpbmRpbmcuICBObyBQb3J0VHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBCaW5kaW5nCi0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoYmluZGluZyk7Ci0gICAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotCi0gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAqIENvbXBhcmUgdGhlIE9wZXJhdGlvbnMKLSAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgIC8vIFJlbW92ZSBhbnkgQmluZGluZ09wZXJhdGlvbnMgd2hpY2ggYXJlIG5vIGxvbmdlciB1c2VkCi0gICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGJpbmRpbmdPcGVyYXRpb25zLnNpemUoKTsgaW5kZXgrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9ucy5nZXQoaW5kZXgpOwotCi0gICAgICAgICAgICBib29sZWFuIGZvdW5kTWF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgIEl0ZXJhdG9yIG9wZXJhdGlvbnNJdCA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChvcGVyYXRpb25zSXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVyYXRpb25zSXQubmV4dCgpOwotCi0gICAgICAgICAgICAgIGlmIChuYW1lc0VxdWFsKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhpcyBCaW5kaW5nRmF1bHQgZnJvbSB0aGUgYmluZGluZ0ZhdWx0cyBMaXN0Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb25zLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gUmVtb3ZlIGFueSBPcGVyYXRpb25zIHdoaWNoIGFscmVhZHkgZXhpc3RzIGluIGJpbmRpbmdPcGVyYXRpb25zLiAgV2hhdCB3ZQotICAgICAgICAgIC8vIGhhdmUgbGVmdCBhcmUgdGhlIE9wZXJhdGlvbnMgd2hpY2ggbmVlZHMgbmV3bHkgY3JlYXRlZCBCaW5kaW5nT3BlcmF0aW9ucwotICAgICAgICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnNOZWVkZWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpbmRleCsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBJdGVyYXRvciBiaW5kaW5nT3BlcmF0aW9uc0l0ID0gYmluZGluZ09wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChiaW5kaW5nT3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCksIG9wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmb3VuZE1hdGNoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIEJpbmRpbmdGYXVsdCBmcm9tIHRoZSBiaW5kaW5nRmF1bHRzIExpc3QKLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNOZWVkZWQuYWRkKG9wZXJhdGlvbik7IC8vIFN0b3JlIHRoZSBhY3R1YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gQ3JlYXRlIHJlcXVpcmVkIEJpbmRpbmdPcGVyYXRpb25zCi0gICAgICAgICAgY3JlYXRlTmV3QmluZGluZ09wZXJhdGlvbnMoYmluZGluZ09wZXJhdGlvbnNOZWVkZWQpOwotCi0gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAqIFByb2Nlc3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBPcGVyYXRpb25zCi0gICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICBJdGVyYXRvciBiaW5kaW5nT3BlcmF0aW9uc0l0ID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChiaW5kaW5nT3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZyk7Ci0KLSAgICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgY3JlYXRlTmV3QmluZGluZ09wZXJhdGlvbnMoTGlzdCBvcGVyYXRpb25zKQotICB7Ci0gICAgTGlzdCBuZXdCaW5kaW5nT3BzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgSXRlcmF0b3IgbmVlZGVkQmluZGluZ09wZXJhdGlvbnNJdCA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAobmVlZGVkQmluZGluZ09wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pbmVlZGVkQmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCk7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG5ld0JpbmRpbmdPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgIG5ld0JpbmRpbmdPcGVyYXRpb24uc2V0RU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgbmV3QmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKG5ld0JpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICBuZXdCaW5kaW5nT3BzLmFkZChuZXdCaW5kaW5nT3BlcmF0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3QmluZGluZ09wczsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgICBMaXN0IGJpbmRpbmdGYXVsdHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgTGlzdCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIE9wZXJhdGlvbiBuYW1lcwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKCFuYW1lc0VxdWFsKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgfQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIE91dHB1dAotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKG91dHB1dCA9PSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBCaW5kaW5nT3V0cHV0IGlmIG5lY2Vzc2FyeQotICAgICAgaWYgKGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ091dHB1dCBuZXdCaW5kaW5nT3V0cHV0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIG5ld0JpbmRpbmdPdXRwdXQuc2V0RU91dHB1dChvdXRwdXQpOwotICAgICAgICBuZXdCaW5kaW5nT3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChuZXdCaW5kaW5nT3V0cHV0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ29tcGFyZSB0aGUgT3V0cHV0IG5hbWVzCi0gICAgICAgIGlmICghbmFtZXNFcXVhbChiaW5kaW5nT3V0cHV0LmdldE5hbWUoKSwgb3V0cHV0LmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIElucHV0Ci0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICBpZiAoaW5wdXQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBCaW5kaW5nSW5wdXQgaWYgbmVjZXNzYXJ5Ci0gICAgICBpZiAoYmluZGluZ0lucHV0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdJbnB1dCBuZXdCaW5kaW5nSW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBuZXdCaW5kaW5nSW5wdXQuc2V0RUlucHV0KGlucHV0KTsKLSAgICAgICAgbmV3QmluZGluZ0lucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQobmV3QmluZGluZ0lucHV0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ29tcGFyZSB0aGUgSW5wdXQgbmFtZXMKLSAgICAgICAgaWYgKCFuYW1lc0VxdWFsKGJpbmRpbmdJbnB1dC5nZXROYW1lKCksIGlucHV0LmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBiaW5kaW5nSW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdlbmVyYXRlQmluZGluZ0lucHV0Q29udGVudChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSk7Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogQ29tcGFyZSB0aGUgRmF1bHRzCi0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvLyBSZW1vdmUgYW55IEJpbmRpbmdGYXVsdHMgd2hpY2ggYXJlIG5vIGxvbmdlciB1c2VkCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGJpbmRpbmdGYXVsdHMuc2l6ZSgpOyBpbmRleCsrKQotICAgIHsKLSAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdHMuZ2V0KGluZGV4KTsKLQotICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICBJdGVyYXRvciBmYXVsdHNJdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGZhdWx0c0l0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpZmF1bHRzSXQubmV4dCgpOwotICAgICAgICBpZiAobmFtZXNFcXVhbChiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpLCBmYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFmb3VuZE1hdGNoKQotICAgICAgewotICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIEJpbmRpbmdGYXVsdCBmcm9tIHRoZSBiaW5kaW5nRmF1bHRzIExpc3QKLSAgICAgICAgYmluZGluZ0ZhdWx0cy5yZW1vdmUoaW5kZXgpOwotICAgICAgICBpbmRleC0tOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlbW92ZSBhbnkgRmF1bHRzIHdoaWNoIGFscmVhZHkgZXhpc3RzIGluIGJpbmRpbmdGYXVsdHMuICBXaGF0IHdlCi0gICAgLy8gaGF2ZSBsZWZ0IGFyZSB0aGUgRmF1bHRzIHdoaWNoIG5lZWRzIG5ld2x5IGNyZWF0ZWQgQmluZGluZ0ZhdWx0cwotICAgIExpc3QgYmluZGluZ0ZhdWx0c05lZWRlZCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZmF1bHRzLnNpemUoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClmYXVsdHMuZ2V0KGluZGV4KTsKLQotICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICBJdGVyYXRvciBiaW5kaW5nRmF1bHRzSXQgPSBiaW5kaW5nRmF1bHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoYmluZGluZ0ZhdWx0c0l0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ0ZhdWx0c0l0Lm5leHQoKTsKLSAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ0ZhdWx0LmdldE5hbWUoKSwgZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhpcyBCaW5kaW5nRmF1bHQgZnJvbSB0aGUgYmluZGluZ0ZhdWx0cyBMaXN0Ci0gICAgICAgIGJpbmRpbmdGYXVsdHNOZWVkZWQuYWRkKGZhdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBiaW5kaW5nRmF1bHRzTmVlZGVkIGNvbnRhaW5zIHRoZSBuZWVkZWQgQmluZGluZ0ZhdWx0J3Mgd2UgbmVlZCB0byBjcmVhdGUKLSAgICBJdGVyYXRvciBuZWVkZWRCaW5kaW5nRmF1bHRzSXQgPSBiaW5kaW5nRmF1bHRzTmVlZGVkLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG5lZWRlZEJpbmRpbmdGYXVsdHNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpbmVlZGVkQmluZGluZ0ZhdWx0c0l0Lm5leHQoKTsKLSAgICAgIEJpbmRpbmdGYXVsdCBuZXdCaW5kaW5nRmF1bHQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgICAgbmV3QmluZGluZ0ZhdWx0LnNldEVGYXVsdChmYXVsdCk7Ci0gICAgICBuZXdCaW5kaW5nRmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQobmV3QmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgdGhlIGNvbnRlbnRzIGZvciBlYWNoIEJpbmRpbmdGYXVsdAotICAgIEl0ZXJhdG9yIGZhdWx0Q29udGVudEl0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGZhdWx0Q29udGVudEl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdClmYXVsdENvbnRlbnRJdC5uZXh0KCk7Ci0gICAgICBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KGJpbmRpbmdPcGVyYXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG5hbWVzRXF1YWwoU3RyaW5nIG5hbWUxLCBTdHJpbmcgbmFtZTIpCi0gIHsKLSAgICBib29sZWFuIG1hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAobmFtZTEgIT0gbnVsbCBeIG5hbWUyICE9IG51bGwpCi0gICAgewotICAgICAgLy8gb25lIGlzIG51bGwKLSAgICAgIG1hdGNoID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUxICE9IG51bGwgJiYgbmFtZTIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBuZWl0aGVyIGlzIG51bGwKLSAgICAgIG1hdGNoID0gbmFtZTEuZXF1YWxzKG5hbWUyKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGJvdGggYXJlIG51bGwKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGdldE92ZXJ3cml0ZSgpIHx8IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgKFBvcnRUeXBlKWJpbmRpbmcuZ2V0RVBvcnRUeXBlKCkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmcpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KGJpbmRpbmdPcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZUV4dGVuc2liaWxpdHlFbGVtZW50cyhiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIGlmIChiaW5kaW5nSW5wdXQgIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoYmluZGluZ0lucHV0LCBiaW5kaW5nSW5wdXQuZ2V0RUlucHV0KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdJbnB1dCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBpZiAoYmluZGluZ091dHB1dCAhPSBudWxsICYmIGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ091dHB1dENvbnRlbnQoYmluZGluZ091dHB1dCwgYmluZGluZ091dHB1dC5nZXRFT3V0cHV0KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPdXRwdXQpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGdlbmVyYXRlQmluZGluZ0ZhdWx0Q29udGVudChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICB7Ci0gICAgaWYgKGJpbmRpbmdGYXVsdCAhPSBudWxsICYmIGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0ZhdWx0Q29udGVudChiaW5kaW5nRmF1bHQsIGJpbmRpbmdGYXVsdC5nZXRFRmF1bHQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVFeHRlbnNpYmlsaXR5RWxlbWVudHMoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKEV4dGVuc2libGVFbGVtZW50IGVlKQotICB7Ci0gICAgaWYgKGVlICE9IG51bGwpCi0gICAgewotICAgICAgZWUuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogR2VuZXJhdGUgUG9ydCBDb250ZW50IGZvciBhbGwgUG9ydHMgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgQmluZGluZwotICAgKiB3aGljaCB3YXMgcGFzc2VkIGluIHRocm91Z2ggdGhlIGNvbnN0cnVjdG9yIChvciBhIHJlZmVyZW5jZSB0byB0aGUKLSAgICogbmV3bHkgY3JlYXRlZCBCaW5kaW5nKS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlUG9ydENvbnRlbnQoKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwb3J0c1RvVXBkYXRlID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICBJdGVyYXRvciBzZXJ2aWNlc0l0ID0gYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVNlcnZpY2VzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChzZXJ2aWNlc0l0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXNJdC5uZXh0KCk7Ci0gICAgICAgIEl0ZXJhdG9yIHBvcnRzSXQgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwb3J0c0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXBvcnRzSXQubmV4dCgpOwotICAgICAgICAgIGlmIChiaW5kaW5nLmVxdWFscyhwb3J0LmdldEVCaW5kaW5nKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIGEgbWF0Y2gKLSAgICAgICAgICAgIHBvcnRzVG9VcGRhdGUuYWRkKHBvcnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBwb3J0c1RvVXBkYXRlSXQgPSBwb3J0c1RvVXBkYXRlLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocG9ydHNUb1VwZGF0ZUl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KChQb3J0KXBvcnRzVG9VcGRhdGVJdC5uZXh0KCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIG1ldGhvZHMgYWRkUmVxdWlyZWROYW1lc3BhY2VzKCkgYW5kIGNvbXB1dGVVbmlxdWVQcmVmaXgoKSBhcmUgdXNlZCB0byBhZGQgbmVjZXNzYXJ5Ci0gICAqIG5hbWVzcGFjZXMgCi0gICAqIAotICAgKiBUT0RPOgotICAgKiBEb2VzIHRoaXMgYmVsb25nIGhlcmU/ICBUaGlzIGlzIGNvcGllZCBmcm9tIHdzZGwudWkuICBDYW4gd2Ugc3luYyB1cCBpbiBzb21lIHdheT8KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFJlcXVpcmVkTmFtZXNwYWNlcyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIG5hbWVzcGFjZU5hbWVzID0gY29udGVudEdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLSAgICAgIFN0cmluZ1tdIHByZWZlcnJlZFByZWZpeGVzID0gbmV3IFN0cmluZyBbbmFtZXNwYWNlTmFtZXMubGVuZ3RoXTsKLSAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFByZWZpeGVzW2luZGV4XSA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJlZmVycmVkTmFtZXNwYWNlUHJlZml4KG5hbWVzcGFjZU5hbWVzW2luZGV4XSk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBtYXAgPSBiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXROYW1lc3BhY2VzKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBuYW1lc3BhY2VOYW1lc1tpXTsKLSAgICAgICAgaWYgKCFtYXAuY29udGFpbnNWYWx1ZShuYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChpIDwgcHJlZmVycmVkUHJlZml4ZXMubGVuZ3RoKSA/IHByZWZlcnJlZFByZWZpeGVzW2ldIDogInAwIjsKLSAgICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KHByZWZpeCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ID0gY29tcHV0ZVVuaXF1ZVByZWZpeCgicCIsIG1hcCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmFkZE5hbWVzcGFjZShwcmVmaXgsIG5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlVW5pcXVlUHJlZml4KFN0cmluZyBiYXNlLCBNYXAgdGFibGUpCi0gIHsKLSAgICBpbnQgaSA9IDA7Ci0gICAgU3RyaW5nIHByZWZpeCA9IGJhc2U7Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgaWYgKCF0YWJsZS5jb250YWluc0tleShwcmVmaXgpKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gYmFzZSArIGk7Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByZWZpeDsKLSAgfQotCi0gIHByaXZhdGUgUG9ydFR5cGUgZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgaWYgKGdldFJlZk5hbWUoKS5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIC8vIE1lYW5zIHdlIHNob3VsZCBzZXQgdGhlIFBvcnRUeXBlIHRvIFVuc3BlY2lmaWVkCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0UmVmTmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgcG9ydFR5cGVJdCA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChwb3J0VHlwZUl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpcG9ydFR5cGVJdC5uZXh0KCk7Ci0gICAgICAgIExpc3QgcHJlZml4ZWROYW1lcyA9IGdldFByZWZpeGVkTmFtZXMocHQpOwotICAgICAgICBpZiAocHJlZml4ZWROYW1lcy5jb250YWlucyhnZXRSZWZOYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHB0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIExpc3QgcHJlZml4ZWROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmcgY3VycmVudFBvcnRUeXBlTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIGN1cnJlbnROYW1lc3BhY2UgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgTWFwIG5hbWVzcGFjZU1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgIEl0ZXJhdG9yIGtleXMgPSBuYW1lc3BhY2VNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoa2V5cy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGtleXMubmV4dCgpOwotICAgICAgT2JqZWN0IHZhbHVlID0gbmFtZXNwYWNlTWFwLmdldChrZXkpOwotCi0gICAgICBpZiAoY3VycmVudE5hbWVzcGFjZS5lcXVhbHModmFsdWUpKQotICAgICAgewotICAgICAgICAvLyBGb3VuZCBhIG1hdGNoLiAgQWRkIHRvIG91ciBsaXN0Ci0gICAgICAgIHByZWZpeGVkTmFtZXMuYWRkKGtleSArICI6IiArIGN1cnJlbnRQb3J0VHlwZU5hbWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwcmVmaXhlZE5hbWVzOwotCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL0NvbnRlbnRHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL0NvbnRlbnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZiOTMwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Db250ZW50R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvcjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci0KLQotcHVibGljIGludGVyZmFjZSBDb250ZW50R2VuZXJhdG9yCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERFJFU1NfTE9DQVRJT04gPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLQotICBwdWJsaWMgU3RyaW5nIGdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChTdHJpbmcgbmFtZXNwYWNlKTsKLQotICAvLyBnZW5lcmF0ZXMgdGhlICdhZGRyZXNzJyBleHRlbnNpYmxpdHkgZWxlbWVudCBmb3IgYSBwb3J0Ci0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlUG9ydENvbnRlbnQoUG9ydCBwb3J0KTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KEJpbmRpbmcgYmluZGluZywgUG9ydFR5cGUgcG9ydFR5cGUpOwotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBPcGVyYXRpb24gb3BlcmF0aW9uKTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCwgSW5wdXQgaW5wdXQpOwotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ091dHB1dENvbnRlbnQoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0LCBPdXRwdXQgb3V0cHV0KTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCwgRmF1bHQgZmF1bHQpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEFkZHJlc3NMb2NhdGlvbihTdHJpbmcgYWRkcmVzc0xvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL1BvcnRHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL1BvcnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiODU4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Qb3J0R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgUG9ydEdlbmVyYXRvciBleHRlbmRzIEJhc2VHZW5lcmF0b3IKLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2U7Ci0gIHByaXZhdGUgU3RyaW5nIGFkZHJlc3NMb2NhdGlvbiA9IENvbnRlbnRHZW5lcmF0b3IuQUREUkVTU19MT0NBVElPTjsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHBvcnQgZ2VuZXJhdG9yIGdpdmVuIHRoZSB0YXJnZXQgc2VydmljZS4KLSAgICogQHBhcmFtIHNlcnZpY2UgdGhlIHRhcmdldCBTZXJ2aWNlLCBtdXN0IG5vdCBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIFBvcnRHZW5lcmF0b3IoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKLSAgICBkZWZpbml0aW9uID0gc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEFkZHJlc3NMb2NhdGlvbihTdHJpbmcgbG9jYXRpb24pIHsKLSAgICBhZGRyZXNzTG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZXMgYSBzZXJ2aWNlIHBvcnQgZ2l2ZW4gaXQncyBuYW1lIGFuZCBiaW5kaW5nIG5hbWUuCi0gICAqIFRoZSBwb3J0IGlzIHRoZW4gYWRkZWQgdG8gdGhlIHNlcnZpY2UgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICogQHJldHVybiB0aGUgUG9ydCBpbnN0YW5jZQotICAgKi8KLSAgcHVibGljIFBvcnQgZ2VuZXJhdGVQb3J0KCkKLSAgewotICAgIFN0cmluZyBwb3J0TmFtZSA9IGdldE5hbWUoKTsKLSAgICBTdHJpbmcgYmluZGluZ05hbWUgPSBnZXRSZWZOYW1lKCk7Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBnZXRCaW5kaW5nKGJpbmRpbmdOYW1lKTsKLQotICAgIFBvcnQgcG9ydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcG9ydC5zZXROYW1lKHBvcnROYW1lKTsKLSAgICBwb3J0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgc2VydmljZS5hZGRQb3J0KHBvcnQpOwotCi0gICAgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0gICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL3d0cCBidWcgMjIxMDI0IC0gbmFtZXNwYWNlIGFuZCBwcmVmaXhlcyBhcmUgbm90IGFkZGVkIHdoZW4gYWRkIG5ldyBwb3J0Ci0gICAgICBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgY29udGVudEdlbmVyYXRvci5zZXRBZGRyZXNzTG9jYXRpb24oYWRkcmVzc0xvY2F0aW9uKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudChwb3J0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qCi0gICAqIG1ldGhvZHMgYWRkUmVxdWlyZWROYW1lc3BhY2VzKCkgYW5kIGNvbXB1dGVVbmlxdWVQcmVmaXgoKSBhcmUgdXNlZCB0byBhZGQgbmVjZXNzYXJ5Ci0gICAqIG5hbWVzcGFjZXMgCi0gICAqIAotICAgKiBUT0RPOgotICAgKiBEb2VzIHRoaXMgYmVsb25nIGhlcmU/ICBUaGlzIGlzIGNvcGllZCBmcm9tIHdzZGwudWkuICBDYW4gd2Ugc3luYyB1cCBpbiBzb21lIHdheT8KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFJlcXVpcmVkTmFtZXNwYWNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIG5hbWVzcGFjZU5hbWVzID0gY29udGVudEdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLSAgICAgIFN0cmluZ1tdIHByZWZlcnJlZFByZWZpeGVzID0gbmV3IFN0cmluZyBbbmFtZXNwYWNlTmFtZXMubGVuZ3RoXTsKLSAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFByZWZpeGVzW2luZGV4XSA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJlZmVycmVkTmFtZXNwYWNlUHJlZml4KG5hbWVzcGFjZU5hbWVzW2luZGV4XSk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG5hbWVzcGFjZU5hbWVzW2ldOwotICAgICAgICBpZiAoIW1hcC5jb250YWluc1ZhbHVlKG5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKGkgPCBwcmVmZXJyZWRQcmVmaXhlcy5sZW5ndGgpID8gcHJlZmVycmVkUHJlZml4ZXNbaV0gOiAicDAiOwotICAgICAgICAgIGlmIChtYXAuY29udGFpbnNLZXkocHJlZml4KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmaXggPSBjb21wdXRlVW5pcXVlUHJlZml4KCJwIiwgbWFwKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZVVuaXF1ZVByZWZpeChTdHJpbmcgYmFzZSwgTWFwIHRhYmxlKQotICB7Ci0gICAgaW50IGkgPSAwOwotICAgIFN0cmluZyBwcmVmaXggPSBiYXNlOwotICAgIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGlmICghdGFibGUuY29udGFpbnNLZXkocHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGJhc2UgKyBpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0KLQotICAvKioKLSAgICogTG9jYXRlcyBhIGJpbmRpbmcgZ2l2ZW4gaXRzIHByZWZpeGVkIG5hbWUgKHNvbWVOU1ByZWZpeDpzb21lQmluZGluZ05hbWUpLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdOYW1lIHRoZSBxbmFtZSBvZiB0aGUgZGVzaXJlZCBiaW5kaW5nLgotICAgKiBAcmV0dXJuIGEgQmluZGluZyB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG9uZSBpcyBub3QgZm91bmQuCi0gICAqLwotICBwcml2YXRlIEJpbmRpbmcgZ2V0QmluZGluZyhTdHJpbmcgYmluZGluZ05hbWUpCi0gIHsKLSAgICBMaXN0IGFsbEJpbmRpbmdzID0gZ2V0QWxsQmluZGluZ3MoKTsKLSAgICBJdGVyYXRvciBiaW5kaW5nSXRlcmF0b3IgPSBhbGxCaW5kaW5ncy5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGJpbmRpbmdJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpYmluZGluZ0l0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgTGlzdCBwcmVmaXhlZE5hbWVzID0gZ2V0UHJlZml4ZWROYW1lcyhiaW5kaW5nKTsKLQotICAgICAgaWYgKHByZWZpeGVkTmFtZXMuY29udGFpbnMoYmluZGluZ05hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBMb2NhdGVzIGFsbCB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIHRoaXMgZGVmaW5pdGlvbiBhbmQgYWxsIGl0cwotICAgKiBpbXBvcnRlZCBkZWZpbml0aW9ucy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBMaXN0IHdpdGggYWxsIGF2YWlsYWJsZSBiaW5kaW5ncy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEFsbEJpbmRpbmdzKCkKLSAgewotICAgIExpc3QgYWxsQmluZGluZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBhbGxEZWZpbml0aW9ucyA9IGdldEFsbERlZmluaXRpb25zKCk7Ci0KLSAgICBJdGVyYXRvciBkZWZzSXRlcmF0b3IgPSBhbGxEZWZpbml0aW9ucy5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGRlZnNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZGVmc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIE1hcCBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKTsKLQotICAgICAgLy8gSVNTVUUgQSBwb3NzaWJsZSBwcm9ibGVtIGhlcmUgaWYgc29tZWhvdyBhIGJpbmRpbmcgaXMgZHVwbGljYXRlZCBpbiBvbmUgb2YgdGhlIGltcG9ydHM/Ci0gICAgICAvLyBJbiB0aGF0IGNhc2Ugd2Ugc2hvdWxkIGl0ZXJhdGUgb3ZlciBhbmQgY2hlY2sgdGhlbSBvbmUgYnkgb25lLgotCi0gICAgICBhbGxCaW5kaW5ncy5hZGRBbGwoYmluZGluZ3MudmFsdWVzKCkpOwotICAgIH0KLQotICAgIHJldHVybiBhbGxCaW5kaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiBBdHRlbXB0cyB0byBsb2NhdGUgYW5kIGFkZCB0byB0aGUgbGlzdCBhbGwgdGhlIGRlZmluaXRpb25zIGltcG9ydGVkIGJ5IHRoZQotICAgKiBkZWZpbml0aW9uIHBhc3NlZCBpbi4gUmVjdXJzaXZlbHkgdHJpZXMgdG8gbG9jYXRlIGFsbCBkZWZpbml0aW9ucy4KLSAgICogCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIHRoZSBzdGFydCBEZWZpbml0aW9uLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gbGlzdCB1c2VkIHRvIGNvbGxlY3QgYWxsIHRoZSBpbXBvcnRlZCBkZWZpbml0aW9ucy4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTGlzdCBsaXN0KQotICB7Ci0gICAgbGlzdC5hZGQoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBpbXBvcnRzID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpOwotICAgIEl0ZXJhdG9yIGltcG9ydHNJdGVyYXRvciA9IGltcG9ydHMuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChpbXBvcnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWltcG9ydHNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIFN0cmluZyBpbXBvcnRMb2NhdGlvblVSSSA9IHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgaWYgKGltcG9ydExvY2F0aW9uVVJJICE9IG51bGwgJiYKLSAgICAgIC8vIElTU1VFIFRoaXMgYXNzdW1wdGlvbiBzZWVtcyBhIGJpdCB3ZWFrLgotICAgICAgICBpbXBvcnRMb2NhdGlvblVSSS5lbmRzV2l0aCgid3NkbCIpKQotICAgICAgewotICAgICAgICBEZWZpbml0aW9uIGltcG9ydGVkRGVmaW5pdGlvbiA9IHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotCi0gICAgICAgIGlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCAmJiAhbGlzdC5jb250YWlucyhpbXBvcnRlZERlZmluaXRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdHJ5IHRvIGxvY2F0ZSBhbGwgZGVmaW5pdGlvbnMuCi0KLSAgICAgICAgICBhZGREZWZpbml0aW9uKGltcG9ydGVkRGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQXR0ZW1wdHMgdG8gbG9jYXRlIGFsbCBkZWZpbml0aW9ucyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBkZWZpbml0aW9uIGFuZAotICAgKiBhbGwgdGhlaXIgaW1wb3J0cyBpbiB0dXJuLiAKLSAgICogCi0gICAqIEByZXR1cm4gYSBMaXN0IHdpdGggYWxsIGRlZmluaXRpb25zIGltcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGRlZmluaXRpb24uCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0QWxsRGVmaW5pdGlvbnMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGFkZERlZmluaXRpb24oZGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBMaXN0IHByZWZpeGVkTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgU3RyaW5nIGN1cnJlbnRCaW5kaW5nTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICBTdHJpbmcgY3VycmVudE5hbWVzcGFjZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIE1hcCBuYW1lc3BhY2VNYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICBJdGVyYXRvciBrZXlzID0gbmFtZXNwYWNlTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGtleXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBrZXlzLm5leHQoKTsKLSAgICAgIE9iamVjdCB2YWx1ZSA9IG5hbWVzcGFjZU1hcC5nZXQoa2V5KTsKLQotICAgICAgaWYgKGN1cnJlbnROYW1lc3BhY2UuZXF1YWxzKHZhbHVlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gRm91bmQgYSBtYXRjaC4gIEFkZCB0byBvdXIgbGlzdAotICAgICAgICBwcmVmaXhlZE5hbWVzLmFkZChrZXkgKyAiOiIgKyBjdXJyZW50QmluZGluZ05hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHByZWZpeGVkTmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDFiZmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0KLS8qCi0gKiBDbGFzcyB3aGljaCBhY3RzIGFzIGEgY29udGFpbmVyIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4dGVuc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yCi17Ci0gIHByb3RlY3RlZCBCdW5kbGUgYnVuZGxlOwotCi0gIHByb3RlY3RlZCBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3I7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgY2xhc3NOYW1lOwotCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvcihCdW5kbGUgYnVuZGxlLCBTdHJpbmcgY2xhc3NTdHJpbmcsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5idW5kbGUgPSBidW5kbGU7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzU3RyaW5nOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIENsYXNzIHRoZUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgY29udGVudEdlbmVyYXRvciA9IChDb250ZW50R2VuZXJhdG9yKXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIHJldHVybiBjb250ZW50R2VuZXJhdG9yOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNWMxMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb247Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeQotewotICBwcm90ZWN0ZWQgTWFwIG1hcDsKLQotICBwcm90ZWN0ZWQgc3RhdGljIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgaW5zdGFuY2U7Ci0KLSAgcHVibGljIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkoKTsKLQotICAgICAgLy8gVE9ETy4uLiBkb24ndCByZWFkIHRoZSByZWdpc3RyeSB1bnRpbCBhbiAnZ2V0J29jY3VycwotICAgICAgLy8KLSAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlciByZWFkZXIgPSBuZXcgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKGluc3RhbmNlKTsKLSAgICAgIHJlYWRlci5yZWFkUmVnaXN0cnkoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSgpCi0gIHsKLSAgICBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lLCBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBuYW1lc3BhY2UvbmFtZSBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgTWFwCi0gICAgTGlzdCBmb3VuZEtleSA9IGZpbmRFeGlzdGluZ0tleShuYW1lc3BhY2UsIG5hbWUpOwotCi0gICAgLy8gRGlkIHdlIGZpbmQgYW4gZXhpc3Rpbmcga2V5IHdpdGggdGhlIHNhbWUgbmFtZXNwYWNlL2tleSBwYWlyaW5nPwotICAgIGlmIChmb3VuZEtleSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIFNpbXBseSBhZGQgdGhlIGRlc2NyaXB0b3IgdG8gdGhlIGxpc3Qgb2YgZGVzY3JpcHRvcnMgYXNzb2NpYXRlZAotICAgICAgLy8gd2l0aCB0aGlzIG5hbWVzcGFjZS9uYW1lIGtleQotICAgICAgTGlzdCBkZXNjcmlwdG9yTGlzdCA9IChMaXN0KW1hcC5nZXQoZm91bmRLZXkpOwotICAgICAgZGVzY3JpcHRvckxpc3QuYWRkKGRlc2NyaXB0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgZW50cnkgaW4gdGhlIE1hcCBmb3IgdGhpcyBuYW1lc3BhY2UvbmFtZSBrZXkKLSAgICAgIExpc3QgbmV3S2V5ID0gbmV3IEFycmF5TGlzdCgyKTsKLSAgICAgIG5ld0tleS5hZGQobmFtZXNwYWNlKTsKLSAgICAgIG5ld0tleS5hZGQobmFtZSk7Ci0KLSAgICAgIExpc3QgbmV3RGVzY3JpcHRvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBuZXdEZXNjcmlwdG9yTGlzdC5hZGQoZGVzY3JpcHRvcik7Ci0KLSAgICAgIG1hcC5wdXQobmV3S2V5LCBuZXdEZXNjcmlwdG9yTGlzdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBmb3IgdGhpcyBleHRlbnNpb24uCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgSXRlcmF0b3Iga2V5SXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBMaXN0IGtleSA9IG51bGw7Ci0gICAgd2hpbGUgKGtleUl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBrZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZChrZXkuZ2V0KDEpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybiB0aGUgY2xhc3Mgc3BlY2lmaWVkIGZvciB0aGlzIGV4dGVuc2lvbiBiYXNlZCBvbiB0aGUgbmFtZXNwYWNlCi0gICAqIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yIGdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgQ29udGVudEdlbmVyYXRvciBnZW5lcmF0b3JDbGFzcyA9IG51bGw7Ci0gICAgTGlzdCBrZXkgPSBmaW5kRXhpc3RpbmdLZXlGcm9tTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0KLSAgICBpZiAoa2V5ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBkZXNjcmlwdG9ycyA9IChMaXN0KW1hcC5nZXQoa2V5KTsKLQotICAgICAgLy8gR3JhYiB0aGUgZmlyc3QgZGVzY3JpcHRvciBhdmFpbGFibGUKLSAgICAgIGlmIChkZXNjcmlwdG9ycy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBleHRlbnNpb25EZXNjcmlwdG9yID0gKENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yKWRlc2NyaXB0b3JzLmdldCgwKTsKLSAgICAgICAgZ2VuZXJhdG9yQ2xhc3MgPSAoQ29udGVudEdlbmVyYXRvcilleHRlbnNpb25EZXNjcmlwdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2VuZXJhdG9yQ2xhc3M7Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm4gdGhlIGNsYXNzIHNwZWNpZmllZCBmb3IgdGhpcyBleHRlbnNpb24gYmFzZWQgb24gdGhlIG5hbWUKLSAgICogYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3IgZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3IgZ2VuZXJhdG9yQ2xhc3MgPSBudWxsOwotICAgIExpc3Qga2V5ID0gZmluZEV4aXN0aW5nS2V5RnJvbU5hbWUobmFtZSk7Ci0KLSAgICBpZiAoa2V5ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBkZXNjcmlwdG9ycyA9IChMaXN0KW1hcC5nZXQoa2V5KTsKLQotICAgICAgLy8gR3JhYiB0aGUgZmlyc3QgZGVzY3JpcHRvciBhdmFpbGFibGUKLSAgICAgIGlmIChkZXNjcmlwdG9ycy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBleHRlbnNpb25EZXNjcmlwdG9yID0gKENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yKWRlc2NyaXB0b3JzLmdldCgwKTsKLSAgICAgICAgZ2VuZXJhdG9yQ2xhc3MgPSAoQ29udGVudEdlbmVyYXRvcilleHRlbnNpb25EZXNjcmlwdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2VuZXJhdG9yQ2xhc3M7Ci0gIH0KLQotICAvLyBUT0RPOiBXZSBuZWVkIHRvIGNvbW1vbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgdXAuLi4uLi4uCi0gIHByaXZhdGUgTGlzdCBmaW5kRXhpc3RpbmdLZXlGcm9tTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBJdGVyYXRvciBrZXlJdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIExpc3QgZm91bmRLZXkgPSBudWxsOwotICAgIHdoaWxlIChrZXlJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZm91bmRLZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBpZiAobmFtZXNwYWNlLmVxdWFscyhmb3VuZEtleS5nZXQoMCkpKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGZvdW5kS2V5ID0gbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZm91bmRLZXk7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZmluZEV4aXN0aW5nS2V5RnJvbU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBJdGVyYXRvciBrZXlJdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIExpc3QgZm91bmRLZXkgPSBudWxsOwotICAgIHdoaWxlIChrZXlJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZm91bmRLZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMoZm91bmRLZXkuZ2V0KDEpKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBmb3VuZEtleSA9IG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kS2V5OwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGZpbmRFeGlzdGluZ0tleShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIEl0ZXJhdG9yIGtleUl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgTGlzdCBmb3VuZEtleSA9IG51bGw7Ci0gICAgd2hpbGUgKGtleUl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBmb3VuZEtleSA9IChMaXN0KWtleUl0Lm5leHQoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKGZvdW5kS2V5LmdldCgwKSkgJiYgbmFtZS5lcXVhbHMoZm91bmRLZXkuZ2V0KDEpKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBmb3VuZEtleSA9IG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kS2V5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzAyYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uOwotCi0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IFdTRExQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImNvbnRlbnRHZW5lcmF0b3JzIjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX05BTUUgPSAiY29udGVudEdlbmVyYXRvciI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FID0gIm5hbWUiOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0KLSAgcHJvdGVjdGVkIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgY29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLQotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZ2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5ID0gZ2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSBwbHVnaW5SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IHBvaW50ID0gcGx1Z2luUmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUExVR0lOX0lELCBFWFRFTlNJT05fUE9JTlRfSUQpOwotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyByZXNvbHZlKFVSTCBwbGF0Zm9ybVVSTCwgU3RyaW5nIHJlbGF0aXZlUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgVVJMIHJlc29sdmVkVVJMID0gRmlsZUxvY2F0b3IucmVzb2x2ZShwbGF0Zm9ybVVSTCk7Ci0gICAgcmV0dXJuIHJlc29sdmVkVVJMLnRvU3RyaW5nKCkgKyByZWxhdGl2ZVBhdGg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoRUxFTUVOVF9OQU1FKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkRWxlbWVudCA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUVTUEFDRSk7Ci0KLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotICAgICAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBuZXcgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IocGx1Z2luQnVuZGxlLCBjbGFzc05hbWUsIG5hbWVzcGFjZSwgbmFtZSk7Ci0gICAgICAgICAgY29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5wdXQobmFtZXNwYWNlLCBuYW1lLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdGYXVsdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nRmF1bHRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTg5MmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdGYXVsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBGYXVsdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCNnZXRFRmF1bHQgPGVtPkVGYXVsdDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdGYXVsdEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nRmF1bHQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUZhdWx0KCkgPGVtPkVGYXVsdDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IGVGYXVsdDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX0ZBVUxUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRmF1bHQgZ2V0RUZhdWx0KCkKLSAgewotICAgIGlmIChlRmF1bHQgIT0gbnVsbCAmJiBlRmF1bHQuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRUZhdWx0ID0gKEludGVybmFsRU9iamVjdCllRmF1bHQ7Ci0gICAgICBlRmF1bHQgPSAoRmF1bHQpZVJlc29sdmVQcm94eShvbGRFRmF1bHQpOwotICAgICAgaWYgKGVGYXVsdCAhPSBvbGRFRmF1bHQpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxULCBvbGRFRmF1bHQsIGVGYXVsdCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZUZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRmF1bHQgYmFzaWNHZXRFRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGVGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RUZhdWx0KEZhdWx0IG5ld0VGYXVsdCkKLSAgewotICAgIEZhdWx0IG9sZEVGYXVsdCA9IGVGYXVsdDsKLSAgICBlRmF1bHQgPSBuZXdFRmF1bHQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxULCBvbGRFRmF1bHQsIGVGYXVsdCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuRmF1bHQgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVGYXVsdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmF1bHQoamF2YXgud3NkbC5GYXVsdCBmYXVsdCkKLSAgewotICAgIHNldEVGYXVsdCgoRmF1bHQpZmF1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19OQU1FOgotICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxUOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFRmF1bHQoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVGYXVsdCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX05BTUU6Ci0gICAgICBzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQ6Ci0gICAgICBzZXRFRmF1bHQoKEZhdWx0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQ6Ci0gICAgICBzZXRFRmF1bHQoKEZhdWx0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX05BTUU6Ci0gICAgICByZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQ6Ci0gICAgICByZXR1cm4gZUZhdWx0ICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChuYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNldE5hbWUobmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWNvbXBvbmVudDsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ0ZhdWx0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19GQVVMVF9fTkFNRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXROYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLkZBVUxUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIC8vIFJlc29sdmUgdGhlIHJlZmVyZW5jZSB0byBGYXVsdAotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pZ2V0Q29udGFpbmVyKCk7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICBTdHJpbmcgZmF1bHROYW1lID0gZ2V0TmFtZSgpOwotCi0gICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwgJiYgZmF1bHROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuRmF1bHQgZmF1bHQgPSBvcGVyYXRpb24uZ2V0RmF1bHQoZmF1bHROYW1lKTsKLQotICAgICAgICBpZiAoZmF1bHQgIT0gZ2V0RmF1bHQoKSkKLSAgICAgICAgewotICAgICAgICAgIHNldEZhdWx0KGZhdWx0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vQmluZGluZ0ZhdWx0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5OTc1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsI2dldEVQb3J0VHlwZSA8ZW0+RVBvcnQgVHlwZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCNnZXRFQmluZGluZ09wZXJhdGlvbnMgPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEJpbmRpbmcKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIHFOYW1lID0gUU5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VuZGVmaW5lZCgpIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVOREVGSU5FRF9FREVGQVVMVCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VuZGVmaW5lZCgpIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kZWZpbmVkID0gVU5ERUZJTkVEX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUG9ydFR5cGUoKSA8ZW0+RVBvcnQgVHlwZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFBvcnRUeXBlIGVQb3J0VHlwZTsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkgPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVCaW5kaW5nT3BlcmF0aW9uczsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElORzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UU5hbWUoUU5hbWUgbmV3UU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRRTmFtZSA9IHFOYW1lOwotICAgIHFOYW1lID0gbmV3UU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19fUU5BTUUsIG9sZFFOYW1lLCBxTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gdW5kZWZpbmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiBuZXdVbmRlZmluZWQpCi0gIHsKLSAgICBib29sZWFuIG9sZFVuZGVmaW5lZCA9IHVuZGVmaW5lZDsKLSAgICB1bmRlZmluZWQgPSBuZXdVbmRlZmluZWQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19fVU5ERUZJTkVELCBvbGRVbmRlZmluZWQsIHVuZGVmaW5lZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUG9ydFR5cGUgZ2V0RVBvcnRUeXBlKCkKLSAgewotICAgIGlmIChlUG9ydFR5cGUgIT0gbnVsbCAmJiBlUG9ydFR5cGUuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVBvcnRUeXBlID0gKEludGVybmFsRU9iamVjdCllUG9ydFR5cGU7Ci0gICAgICBlUG9ydFR5cGUgPSAoUG9ydFR5cGUpZVJlc29sdmVQcm94eShvbGRFUG9ydFR5cGUpOwotICAgICAgaWYgKGVQb3J0VHlwZSAhPSBvbGRFUG9ydFR5cGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRSwgb2xkRVBvcnRUeXBlLCBlUG9ydFR5cGUpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVQb3J0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGJhc2ljR2V0RVBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBlUG9ydFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVQb3J0VHlwZShQb3J0VHlwZSBuZXdFUG9ydFR5cGUpCi0gIHsKLSAgICBQb3J0VHlwZSBvbGRFUG9ydFR5cGUgPSBlUG9ydFR5cGU7Ci0gICAgZVBvcnRUeXBlID0gbmV3RVBvcnRUeXBlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEUsIG9sZEVQb3J0VHlwZSwgZVBvcnRUeXBlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFQmluZGluZ09wZXJhdGlvbnMoKQotICB7Ci0gICAgaWYgKGVCaW5kaW5nT3BlcmF0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5nT3BlcmF0aW9ucyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVCaW5kaW5nT3BlcmF0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYW4gb3BlcmF0aW9uIGJpbmRpbmcgdG8gYmluZGluZy4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRCaW5kaW5nT3BlcmF0aW9uKGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5hZGQoYmluZGluZ09wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGJpbmRpbmcuIE5vdGUgdGhhdCBvcGVyYXRpb24gbmFtZXMgY2FuCi0gICAqIGJlIG92ZXJsb2FkZWQgd2l0aGluIGEgUG9ydFR5cGUuIEluIGNhc2Ugb2Ygb3ZlcmxvYWRpbmcsIHRoZQotICAgKiBuYW1lcyBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcyBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyCi0gICAqIHJlZmluZSB0aGUgc2VhcmNoLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBvcGVyYXRpb24gYmluZGluZy4KLSAgICogQHBhcmFtIGlucHV0TmFtZSB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgbWVzc2FnZTsgaWYgdGhpcyBpcyBudWxsCi0gICAqIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIG91dHB1dE5hbWUgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBtZXNzYWdlOyBpZiB0aGlzIGlzIG51bGwKLSAgICogaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBiaW5kaW5nLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgb3BlcmF0aW9uIGJpbmRpbmcKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBpbnB1dE5hbWUsIFN0cmluZyBvdXRwdXROYW1lKQotICB7Ci0gICAgSXRlcmF0b3Igb3BCaW5kaW5nSXRlcmF0b3IgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG9wQmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gb3AgPSAoamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uKW9wQmluZGluZ0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgb3BOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICghbmFtZS5lcXVhbHMob3BOYW1lKSkKLSAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChuYW1lICE9IG51bGwgfHwgb3BOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgaW5wdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuQmluZGluZ0lucHV0IGlucHV0ID0gb3AuZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG9wSW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIGlmIChvcElucHV0TmFtZSA9PSBudWxsIHx8ICFvcElucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiBvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBvdXRwdXQgPSBvcC5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIGlmIChvcE91dHB1dE5hbWUgPT0gbnVsbCB8fCAhb3BPdXRwdXROYW1lLmVxdWFscyhvdXRwdXROYW1lKSkKLSAgICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG9wOwotICAgIH0gLy8gZW5kIHdoaWxlCi0gICAgcmV0dXJuIG51bGw7IC8vIGJpbmRpbmcgb3BlcmF0aW9uIG5vdCBmb3VuZAotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIG9wZXJhdGlvbiBiaW5kaW5ncyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuUG9ydFR5cGUgZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldEVQb3J0VHlwZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydFR5cGUoamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIHNldEVQb3J0VHlwZSgoUG9ydFR5cGUpcG9ydFR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFQmluZGluZ09wZXJhdGlvbnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRToKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVBvcnRUeXBlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFUG9ydFR5cGUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiBnZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHNldFFOYW1lKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZCgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRToKLSAgICAgIHNldEVQb3J0VHlwZSgoUG9ydFR5cGUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TOgotICAgICAgZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuY2xlYXIoKTsKLSAgICAgIGdldEVCaW5kaW5nT3BlcmF0aW9ucygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHNldFFOYW1lKFFOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKFVOREVGSU5FRF9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEU6Ci0gICAgICBzZXRFUG9ydFR5cGUoKFBvcnRUeXBlKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TOgotICAgICAgZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRToKLSAgICAgIHJldHVybiBlUG9ydFR5cGUgIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiBlQmluZGluZ09wZXJhdGlvbnMgIT0gbnVsbCAmJiAhZUJpbmRpbmdPcGVyYXRpb25zLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHFOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocU5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgdW5kZWZpbmVkOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodW5kZWZpbmVkKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSk7Ci0gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSk7Ci0gICAgc2V0UU5hbWUocW5hbWUpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZyljb21wb25lbnQ7Ci0KLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN3aXRjaCAoV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShjaGlsZCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk9QRVJBVElPTjoKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICBvcGVyYXRpb24uc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICBhZGRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBnZXRMaXN0KGNvbXBvbmVudCwgbW9kZWxPYmplY3QpOwotICAgIGlmIChsaXN0ICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRMaXN0KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gbnVsbDsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZyljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkdfX1FOQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZVJlZmVyZW5jZShFUmVmZXJlbmNlIGVSZWZlcmVuY2UpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19fRVBPUlRfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBnZXRFUG9ydFR5cGUoKTsKLSAgICAgICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBRTmFtZSBxTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUsIHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpICsgIiMiICsgcU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuQklORElORyk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgaXRlcmF0b3IgPSBnZXRFQmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbilpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChCaW5kaW5nT3BlcmF0aW9uSW1wbClvcGVyYXRpb24pLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKSwgZWxlbWVudCk7Ci0gICAgICBQb3J0VHlwZSBuZXdQb3J0VHlwZSA9IHBvcnRUeXBlUU5hbWUgIT0gbnVsbCA/IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpIDogbnVsbDsKLSAgICAgIGlmIChuZXdQb3J0VHlwZSAhPSBnZXRFUG9ydFR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0RVBvcnRUeXBlKG5ld1BvcnRUeXBlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotfSAvL0JpbmRpbmdJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0lucHV0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdJbnB1dEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFlNDllMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0lucHV0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIElucHV0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbnB1dEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsI2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ0lucHV0SW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEJpbmRpbmdJbnB1dAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFSW5wdXQoKSA8ZW0+RUlucHV0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgSW5wdXQgZUlucHV0OwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdJbnB1dEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkdfSU5QVVQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRFSW5wdXQoKQotICB7Ci0gICAgaWYgKGVJbnB1dCAhPSBudWxsICYmIGVJbnB1dC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFSW5wdXQgPSAoSW50ZXJuYWxFT2JqZWN0KWVJbnB1dDsKLSAgICAgIGVJbnB1dCA9IChJbnB1dCllUmVzb2x2ZVByb3h5KG9sZEVJbnB1dCk7Ci0gICAgICBpZiAoZUlucHV0ICE9IG9sZEVJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQsIG9sZEVJbnB1dCwgZUlucHV0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBiYXNpY0dldEVJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gZUlucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFSW5wdXQoSW5wdXQgbmV3RUlucHV0KQotICB7Ci0gICAgSW5wdXQgb2xkRUlucHV0ID0gZUlucHV0OwotICAgIGVJbnB1dCA9IG5ld0VJbnB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQsIG9sZEVJbnB1dCwgZUlucHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5JbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUlucHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChqYXZheC53c2RsLklucHV0IGlucHV0KQotICB7Ci0gICAgc2V0RUlucHV0KChJbnB1dClpbnB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQ6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVJbnB1dCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RUlucHV0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIHNldEVJbnB1dCgoSW5wdXQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIHNldEVJbnB1dCgoSW5wdXQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIHJldHVybiBlSW5wdXQgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxpYXRpb24gbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSk7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXROYW1lKG5hbWUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICB9Ci0KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gKEJpbmRpbmdJbnB1dCljb21wb25lbnQ7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGxpc3QuYWRkQWxsKGJpbmRpbmdJbnB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkdfSU5QVVRfX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5JTlBVVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICAvLyBSZXNvbHZlIHRoZSByZWZlcmVuY2UgdG8gSW5wdXQKLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYm9wID0gKEJpbmRpbmdPcGVyYXRpb24pZ2V0Q29udGFpbmVyKCk7Ci0gICAgICBPcGVyYXRpb24gb3AgPSBib3AuZ2V0RU9wZXJhdGlvbigpOwotICAgICAgaWYgKG9wICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldElucHV0KG9wLmdldEVJbnB1dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotfSAvL0JpbmRpbmdJbnB1dEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nT3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMTE3ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPcGVyYXRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPcGVyYXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCNnZXRFT3BlcmF0aW9uIDxlbT5FT3BlcmF0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsI2dldEVCaW5kaW5nSW5wdXQgPGVtPkVCaW5kaW5nIElucHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsI2dldEVCaW5kaW5nT3V0cHV0IDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwjZ2V0RUJpbmRpbmdGYXVsdHMgPGVtPkVCaW5kaW5nIEZhdWx0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdPcGVyYXRpb25JbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgQmluZGluZ09wZXJhdGlvbgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFT3BlcmF0aW9uKCkgPGVtPkVPcGVyYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uIGVPcGVyYXRpb247Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5nSW5wdXQoKSA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IGVCaW5kaW5nSW5wdXQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5nT3V0cHV0KCkgPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ091dHB1dCBlQmluZGluZ091dHB1dDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUJpbmRpbmdGYXVsdHMoKSA8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nRmF1bHRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVCaW5kaW5nRmF1bHRzOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPcGVyYXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX09QRVJBVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0RU9wZXJhdGlvbigpCi0gIHsKLSAgICBpZiAoZU9wZXJhdGlvbiAhPSBudWxsICYmIGVPcGVyYXRpb24uZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU9wZXJhdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpZU9wZXJhdGlvbjsKLSAgICAgIGVPcGVyYXRpb24gPSAoT3BlcmF0aW9uKWVSZXNvbHZlUHJveHkob2xkRU9wZXJhdGlvbik7Ci0gICAgICBpZiAoZU9wZXJhdGlvbiAhPSBvbGRFT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OLCBvbGRFT3BlcmF0aW9uLCBlT3BlcmF0aW9uKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uIGJhc2ljR2V0RU9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZU9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU9wZXJhdGlvbihPcGVyYXRpb24gbmV3RU9wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiBvbGRFT3BlcmF0aW9uID0gZU9wZXJhdGlvbjsKLSAgICBlT3BlcmF0aW9uID0gbmV3RU9wZXJhdGlvbjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiwgb2xkRU9wZXJhdGlvbiwgZU9wZXJhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEVCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGVCaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IG5ld0VCaW5kaW5nSW5wdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgb2xkRUJpbmRpbmdJbnB1dCA9IGVCaW5kaW5nSW5wdXQ7Ci0gICAgZUJpbmRpbmdJbnB1dCA9IG5ld0VCaW5kaW5nSW5wdXQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgdGhpcywKLSAgICAgICAgTm90aWZpY2F0aW9uLlNFVCwKLSAgICAgICAgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVULAotICAgICAgICBvbGRFQmluZGluZ0lucHV0LAotICAgICAgICBuZXdFQmluZGluZ0lucHV0KTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBuZXdFQmluZGluZ0lucHV0KQotICB7Ci0gICAgaWYgKG5ld0VCaW5kaW5nSW5wdXQgIT0gZUJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLSAgICAgIGlmIChlQmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllQmluZGluZ0lucHV0KS5lSW52ZXJzZVJlbW92ZSgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIGlmIChuZXdFQmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFQmluZGluZ0lucHV0KS5lSW52ZXJzZUFkZCgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVCaW5kaW5nSW5wdXQobmV3RUJpbmRpbmdJbnB1dCwgbXNncyk7Ci0gICAgICBpZiAobXNncyAhPSBudWxsKQotICAgICAgICBtc2dzLmRpc3BhdGNoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwoCi0gICAgICAgIHRoaXMsCi0gICAgICAgIE5vdGlmaWNhdGlvbi5TRVQsCi0gICAgICAgIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCwKLSAgICAgICAgbmV3RUJpbmRpbmdJbnB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdJbnB1dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRFQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZUJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgbmV3RUJpbmRpbmdPdXRwdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IG9sZEVCaW5kaW5nT3V0cHV0ID0gZUJpbmRpbmdPdXRwdXQ7Ci0gICAgZUJpbmRpbmdPdXRwdXQgPSBuZXdFQmluZGluZ091dHB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgewotICAgICAgRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULAotICAgICAgICBvbGRFQmluZGluZ091dHB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdPdXRwdXQpOwotICAgICAgaWYgKG1zZ3MgPT0gbnVsbCkKLSAgICAgICAgbXNncyA9IG5vdGlmaWNhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1zZ3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgbmV3RUJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBpZiAobmV3RUJpbmRpbmdPdXRwdXQgIT0gZUJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZUJpbmRpbmdPdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWVCaW5kaW5nT3V0cHV0KS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFCi0gICAgICAgICAgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIGlmIChuZXdFQmluZGluZ091dHB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RUJpbmRpbmdPdXRwdXQpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UKLSAgICAgICAgICAtIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQsIG51bGwsIG1zZ3MpOwotICAgICAgbXNncyA9IGJhc2ljU2V0RUJpbmRpbmdPdXRwdXQobmV3RUJpbmRpbmdPdXRwdXQsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULAotICAgICAgICBuZXdFQmluZGluZ091dHB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdPdXRwdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIGlmIChlQmluZGluZ0ZhdWx0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5nRmF1bHRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KEJpbmRpbmdGYXVsdC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyk7Ci0gICAgfQotICAgIHJldHVybiBlQmluZGluZ0ZhdWx0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBmYXVsdCBiaW5kaW5nLgotICAgKiBAcGFyYW0gZmF1bHQgdGhlIG5ldyBmYXVsdCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQmluZGluZ0ZhdWx0KGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuYWRkKChCaW5kaW5nRmF1bHQpYmluZGluZ0ZhdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBmYXVsdCBiaW5kaW5nLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBmYXVsdCBiaW5kaW5nLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGZhdWx0IGJpbmRpbmcsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBmYXVsdCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGdldEJpbmRpbmdGYXVsdChTdHJpbmcgbmFtZSkKLSAgewotICAgIEJpbmRpbmdGYXVsdCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVCaW5kaW5nRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmdGYXVsdCBmYXVsdCA9IChCaW5kaW5nRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMoZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIGZhdWx0IGJpbmRpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nLgotICAgKiBAcmV0dXJuIG5hbWVzIG9mIGZhdWx0IGJpbmRpbmdzCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUJpbmRpbmdGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBoYXNoTWFwLnB1dChiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpLCBiaW5kaW5nRmF1bHQpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVPcGVyYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBzZXRFT3BlcmF0aW9uKChPcGVyYXRpb24pb3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBnZXRCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVCaW5kaW5nSW5wdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIGlucHV0IG9mIHRoaXMgb3BlcmF0aW9uIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBpbnB1dCB0aGUgZGVzaXJlZCBpbnB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdJbnB1dChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBzZXRFQmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpYmluZGluZ0lucHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgZ2V0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdPdXRwdXQoamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBzZXRFQmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dCliaW5kaW5nT3V0cHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUOgotICAgICAgcmV0dXJuIGJhc2ljU2V0RUJpbmRpbmdJbnB1dChudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHJldHVybiBiYXNpY1NldEVCaW5kaW5nT3V0cHV0KG51bGwsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFQmluZGluZ0ZhdWx0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RU9wZXJhdGlvbigpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RU9wZXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdGYXVsdHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OOgotICAgICAgc2V0RU9wZXJhdGlvbigoT3BlcmF0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUOgotICAgICAgc2V0RUJpbmRpbmdJbnB1dCgoQmluZGluZ0lucHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHNldEVCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUzoKLSAgICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT046Ci0gICAgICBzZXRFT3BlcmF0aW9uKChPcGVyYXRpb24pbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVDoKLSAgICAgIHNldEVCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHNldEVCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTOgotICAgICAgZ2V0RUJpbmRpbmdGYXVsdHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT046Ci0gICAgICByZXR1cm4gZU9wZXJhdGlvbiAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdJbnB1dCAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGVCaW5kaW5nT3V0cHV0ICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdGYXVsdHMgIT0gbnVsbCAmJiAhZUJpbmRpbmdGYXVsdHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXROYW1lKG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5JTlBVVDoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0lucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBpbnB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBpbnB1dC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgc2V0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuT1VUUFVUOgotICAgICAgewotICAgICAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIG91dHB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBvdXRwdXQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIHNldEJpbmRpbmdPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdGYXVsdCBmYXVsdCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICAgICAgZmF1bHQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgZmF1bHQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWNvbXBvbmVudDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRFQmluZGluZ0lucHV0KG51bGwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRFQmluZGluZ091dHB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pY29tcG9uZW50OwotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkpOwotICAgIH0KLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkpOwotICAgIH0KLQotICAgIGxpc3QuYWRkQWxsKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19PUEVSQVRJT05fX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5PUEVSQVRJT04pOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIEJpbmRpbmdJbnB1dCBpbnB1dCA9IGdldEVCaW5kaW5nSW5wdXQoKTsKLSAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChCaW5kaW5nSW5wdXRJbXBsKWlucHV0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEJpbmRpbmdPdXRwdXRJbXBsKW91dHB1dCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgaXRlcmF0b3IgPSBnZXRFQmluZGluZ0ZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nRmF1bHQgZmF1bHQgPSAoQmluZGluZ0ZhdWx0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEJpbmRpbmdGYXVsdEltcGwpZmF1bHQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLy8gUmVzb2x2ZSB0aGUgcmVmZXJlbmNlIHRvIE9wZXJhdGlvbgotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZ2V0Q29udGFpbmVyKCk7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0lucHV0IGlucHV0ID0gZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0ICE9IG51bGwgPyBpbnB1dC5nZXROYW1lKCkgOiBudWxsOwotICAgICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IG91dHB1dCAhPSBudWxsID8gb3V0cHV0LmdldE5hbWUoKSA6IG51bGw7Ci0KLSAgICAgICAgc2V0T3BlcmF0aW9uKHBvcnRUeXBlLmdldE9wZXJhdGlvbihnZXROYW1lKCksIGlucHV0TmFtZSwgb3V0cHV0TmFtZSkpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vQmluZGluZ09wZXJhdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nT3V0cHV0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPdXRwdXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMDA0Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPdXRwdXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3V0cHV0SW1wbCNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ091dHB1dEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nT3V0cHV0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPdXRwdXQoKSA8ZW0+RU91dHB1dDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU91dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBPdXRwdXQgZU91dHB1dDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nT3V0cHV0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19PVVRQVVQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGdldEVPdXRwdXQoKQotICB7Ci0gICAgaWYgKGVPdXRwdXQgIT0gbnVsbCAmJiBlT3V0cHV0LmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVPdXRwdXQgPSAoSW50ZXJuYWxFT2JqZWN0KWVPdXRwdXQ7Ci0gICAgICBlT3V0cHV0ID0gKE91dHB1dCllUmVzb2x2ZVByb3h5KG9sZEVPdXRwdXQpOwotICAgICAgaWYgKGVPdXRwdXQgIT0gb2xkRU91dHB1dCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVCwgb2xkRU91dHB1dCwgZU91dHB1dCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZU91dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE91dHB1dCBiYXNpY0dldEVPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGVPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVPdXRwdXQoT3V0cHV0IG5ld0VPdXRwdXQpCi0gIHsKLSAgICBPdXRwdXQgb2xkRU91dHB1dCA9IGVPdXRwdXQ7Ci0gICAgZU91dHB1dCA9IG5ld0VPdXRwdXQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQsIG9sZEVPdXRwdXQsIGVPdXRwdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk91dHB1dCBnZXRPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVPdXRwdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE91dHB1dChqYXZheC53c2RsLk91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBzZXRFT3V0cHV0KChPdXRwdXQpb3V0cHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RU91dHB1dCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RU91dHB1dCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQ6Ci0gICAgICBzZXRFT3V0cHV0KChPdXRwdXQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVDoKLSAgICAgIHNldEVPdXRwdXQoKE91dHB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVUOgotICAgICAgcmV0dXJuIGVPdXRwdXQgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gKEJpbmRpbmdPdXRwdXQpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nT3V0cHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19PVVRQVVRfX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5PVVRQVVQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLy8gUmVzb2x2ZSB0aGUgcmVmZXJlbmNlIHRvIE91dHB1dAotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBib3AgPSAoQmluZGluZ09wZXJhdGlvbilnZXRDb250YWluZXIoKTsKLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJvcC5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0T3V0cHV0KG9wLmdldEVPdXRwdXQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLX0gLy9CaW5kaW5nT3V0cHV0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0RlZmluaXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRGVmaW5pdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI3YjEwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRGVmaW5pdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTREltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLmV2ZW50cy5FdmVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5ldmVudHMuRXZlbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcudzNjLmRvbS5ldmVudHMuRXZlbnRUYXJnZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uZXZlbnRzLk11dGF0aW9uRXZlbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlZmluaXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwjZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwjZ2V0RW5jb2RpbmcgPGVtPkVuY29kaW5nPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVJbXBvcnRzIDxlbT5FSW1wb3J0czwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFVHlwZXMgPGVtPkVUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFTWVzc2FnZXMgPGVtPkVNZXNzYWdlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFUG9ydFR5cGVzIDxlbT5FUG9ydCBUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFQmluZGluZ3MgPGVtPkVCaW5kaW5nczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFU2VydmljZXMgPGVtPkVTZXJ2aWNlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFTmFtZXNwYWNlcyA8ZW0+RU5hbWVzcGFjZXM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZpbml0aW9uSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIERlZmluaXRpb24KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFRhcmdldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9OQU1FU1BBQ0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXROYW1lc3BhY2UoKSA8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBUQVJHRVRfTkFNRVNQQUNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIHFOYW1lID0gUU5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmNvZGluZygpIDxlbT5FbmNvZGluZzwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RW5jb2RpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElOR19FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVuY29kaW5nKCkgPGVtPkVuY29kaW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbmNvZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZW5jb2RpbmcgPSBFTkNPRElOR19FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUltcG9ydHMoKSA8ZW0+RUltcG9ydHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUltcG9ydHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUltcG9ydHM7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVUeXBlcygpIDxlbT5FVHlwZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVUeXBlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlcyBlVHlwZXM7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVNZXNzYWdlcygpIDxlbT5FTWVzc2FnZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2VzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVNZXNzYWdlczsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVBvcnRUeXBlcygpIDxlbT5FUG9ydCBUeXBlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUG9ydFR5cGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQb3J0VHlwZXM7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5ncygpIDxlbT5FQmluZGluZ3M8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVCaW5kaW5nczsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVNlcnZpY2VzKCkgPGVtPkVTZXJ2aWNlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFU2VydmljZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZVNlcnZpY2VzOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTmFtZXNwYWNlcygpIDxlbT5FTmFtZXNwYWNlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFTmFtZXNwYWNlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlTmFtZXNwYWNlczsKLQotICBwcml2YXRlIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5OwotCi0gIHByaXZhdGUgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0KLSAgcHJpdmF0ZSBIYXNoTWFwIG5hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5ERUZJTklUSU9OOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0TmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nIG5ld1RhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIFN0cmluZyBvbGRUYXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGFyZ2V0TmFtZXNwYWNlID0gbmV3VGFyZ2V0TmFtZXNwYWNlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UsIG9sZFRhcmdldE5hbWVzcGFjZSwgdGFyZ2V0TmFtZXNwYWNlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbmV3TG9jYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICBsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OLCBvbGRMb2NhdGlvbiwgbG9jYXRpb24pKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UU5hbWUoUU5hbWUgbmV3UU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRRTmFtZSA9IHFOYW1lOwotICAgIHFOYW1lID0gbmV3UU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUUsIG9sZFFOYW1lLCBxTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkKLSAgewotICAgIHJldHVybiBlbmNvZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5jb2RpbmcoU3RyaW5nIG5ld0VuY29kaW5nKQotICB7Ci0gICAgU3RyaW5nIG9sZEVuY29kaW5nID0gZW5jb2Rpbmc7Ci0gICAgZW5jb2RpbmcgPSBuZXdFbmNvZGluZzsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkNPRElORywgb2xkRW5jb2RpbmcsIGVuY29kaW5nKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFTWVzc2FnZXMoKQotICB7Ci0gICAgaWYgKGVNZXNzYWdlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVNZXNzYWdlcyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChNZXNzYWdlLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTUVTU0FHRVMpOwotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RVBvcnRUeXBlcygpCi0gIHsKLSAgICBpZiAoZVBvcnRUeXBlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVQb3J0VHlwZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoUG9ydFR5cGUuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVQb3J0VHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFQmluZGluZ3MoKQotICB7Ci0gICAgaWYgKGVCaW5kaW5ncyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5ncyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChCaW5kaW5nLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FQklORElOR1MpOwotICAgIH0KLSAgICByZXR1cm4gZUJpbmRpbmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RVNlcnZpY2VzKCkKLSAgewotICAgIGlmIChlU2VydmljZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlU2VydmljZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoU2VydmljZS5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVTZXJ2aWNlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBAZGVwcmVjYXRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVOYW1lc3BhY2VzKCkKLSAgewotICAgIGlmIChlTmFtZXNwYWNlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVOYW1lc3BhY2VzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWVzcGFjZS5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5BTUVTUEFDRVMpOwotICAgIH0KLSAgICByZXR1cm4gZU5hbWVzcGFjZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBUeXBlcyBnZXRFVHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIGVUeXBlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RVR5cGVzKFR5cGVzIG5ld0VUeXBlcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIFR5cGVzIG9sZEVUeXBlcyA9IGVUeXBlczsKLSAgICBlVHlwZXMgPSBuZXdFVHlwZXM7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMsIG9sZEVUeXBlcywgbmV3RVR5cGVzKTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFVHlwZXMoVHlwZXMgbmV3RVR5cGVzKQotICB7Ci0gICAgaWYgKG5ld0VUeXBlcyAhPSBlVHlwZXMpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZVR5cGVzICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllVHlwZXMpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMsIG51bGwsIG1zZ3MpOwotICAgICAgaWYgKG5ld0VUeXBlcyAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RVR5cGVzKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTLCBudWxsLCBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVUeXBlcyhuZXdFVHlwZXMsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUywgbmV3RVR5cGVzLCBuZXdFVHlwZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVOb3RpZnkoTm90aWZpY2F0aW9uIG1zZykKLSAgewotICAgIHN1cGVyLmVOb3RpZnkobXNnKTsKLQotICAgIC8vIGNzLi4gaWYgd2UndmUgYWRkZWQgYSBUeXBlcyBlbGVtZW50LCBhbmQgdGhpcyBkZWZpbml0aW9uIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSByZXNvdXJjZQotICAgIC8vIHdlIG5lZWQgdG8gc2V0IHRoZSBzY2hlbWFMb2NhdGlvbnMgZm9yIGFueSBpbmxpbmUgc2NoZW1hTG9jYXRpb25zLgotICAgIC8vIElmIG5vdCB5ZXQgYXR0YWNoZWQgdG8gYSByZXNvdXJjZSwgdGhlIHNjaGVtYUxvY2F0aW9uJ3Mgd2lsbCBiZSBzZXQgdmlhIFdTRExSZXNvdXJjZUltcGwuYXR0YWNoZWQoRU9iamVjdCBvKQotICAgIC8vCi0gICAgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuREVGSU5JVElPTl9fRVRZUEVTICYmIG1zZy5nZXRFdmVudFR5cGUoKSA9PSBOb3RpZmljYXRpb24uU0VUKQotICAgIHsKLSAgICAgIGlmIChlUmVzb3VyY2UoKSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwgJiYgZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldElubGluZVNjaGVtYUxvY2F0aW9ucyhlUmVzb3VyY2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUltcG9ydHMoKQotICB7Ci0gICAgaWYgKGVJbXBvcnRzID09IG51bGwpCi0gICAgewotICAgICAgZUltcG9ydHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoSW1wb3J0LmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FSU1QT1JUUyk7Ci0gICAgfQotICAgIHJldHVybiBlSW1wb3J0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBiaW5kaW5nIHRvIHRoaXMgV1NETCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgdGhlIGJpbmRpbmcgdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRCaW5kaW5nKGphdmF4LndzZGwuQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgZ2V0RUJpbmRpbmdzKCkuYWRkKChCaW5kaW5nKWJpbmRpbmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhbiBpbXBvcnQgdG8gdGhpcyBXU0RMIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gaW1wb3J0RGVmIHRoZSBpbXBvcnQgdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRJbXBvcnQoamF2YXgud3NkbC5JbXBvcnQgaW1wb3J0RGVmKQotICB7Ci0gICAgZ2V0RUltcG9ydHMoKS5hZGQoKEltcG9ydClpbXBvcnREZWYpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhpcyBXU0RMIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBnZXRFTWVzc2FnZXMoKS5hZGQoKE1lc3NhZ2UpbWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpcyBhIHdheSB0byBhZGQgYSBuYW1lc3BhY2UgYXNzb2NpYXRpb24gdG8gYSBkZWZpbml0aW9uLgotICAgKiBJdCBpcyBzaW1pbGFyIHRvIGFkZGluZyBhIG5hbWVzcGFjZSBwcmVmaXggZGVjbGFyYXRpb24gdG8gdGhlCi0gICAqIHRvcCBvZiBhICZsdDt3c2RsOmRlZmluaXRpb24mZ3Q7IGVsZW1lbnQuIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8KLSAgICogd2l0aCB0aGUgJmx0O3dzZGw6aW1wb3J0Jmd0OyBlbGVtZW50OyB0aGVyZSBhcmUgc2VwYXJhdGUgbWV0aG9kcyBmb3IKLSAgICogZGVhbGluZyB3aXRoIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBieSAmbHQ7d3NkbDppbXBvcnQmZ3Q7IGVsZW1lbnRzLgotICAgKiBUaGVyZSBpcyBhIGRlZmF1bHQgbmFtZXNwYWNlIGFzc29jaWF0aW9uICh3aGljaCBjYW4gYmUKLSAgICogb3ZlcnJpZGRlbikgYmV0d2VlbiB0aGUgbnVsbCBwcmVmaXggYW5kCi0gICAqIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvLgotICAgKiBAcGFyYW0gcHJlZml4IHRoZSBwcmVmaXggdG8gdXNlIGZvciB0aGlzIG5hbWVzcGFjZSAod2hlbgotICAgKiByZW5kZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiBhcyBYTUwpLiBVc2UgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcKLSAgICogdG8gZGVzY3JpYmUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIChpLmUuIHhtbG5zPSIuLi4iKS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSB0aGUgbmFtZXNwYWNlIFVSSSB0byBhc3NvY2lhdGUgdGhlIHByZWZpeAotICAgKiB3aXRoLiBJZiB5b3UgdXNlIG51bGwsIHRoZSBuYW1lc3BhY2UgYXNzb2NpYXRpb24gd2lsbCBiZSByZW1vdmVkLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE5hbWVzcGFjZShTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gICAgaWYgKHByZWZpeCA9PSBudWxsKQotICAgICAgcHJlZml4ID0gIiI7Ci0KLSAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwpCi0gICAgewotICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHRoZXJlIGlzIHRoaXMgbmFtZXNwYWNlIGFscmVhZHkuCi0gICAgICBTdHJpbmcgZXhpc3RpbmdQcmVmaXggPSBnZXRQcmVmaXgobmFtZXNwYWNlVVJJKTsKLSAgICAgIGlmIChleGlzdGluZ1ByZWZpeCAhPSBudWxsKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcHJlZml4IGlzIG5vdCBhbHJlYWR5IHVzZWQgZm9yIGEgZGlmZmVyZW50IG5hbWVzcGFjZQotICAgICAgTWFwIG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VzKCk7Ci0gICAgICBTdHJpbmcgZXhpc3RpbmdOYW1lc3BhY2UgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KHByZWZpeCk7Ci0gICAgICBpZiAoZXhpc3RpbmdOYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXNwYWNlcy5wdXQocHJlZml4LCBuYW1lc3BhY2VVUkkpOwotCi0gICAgICAgIC8vIFN1cHBvcnQgZm9yIE5hbWVzcGFjZQotICAgICAgICBOYW1lc3BhY2UgZW5zID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5hbWVzcGFjZSgpOwotICAgICAgICBlbnMuc2V0UHJlZml4KHByZWZpeCk7Ci0gICAgICAgIGVucy5zZXRVUkkobmFtZXNwYWNlVVJJKTsKLSAgICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5hZGQoZW5zKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoZSBwcmVmaXggaXMgdGFrZW4gYWxyZWFkeS4gTWFrZSBhIHVuaXF1ZSBwcmVmaXgKLSAgICAgIGlmIChwcmVmaXguZW5kc1dpdGgoIjEiKSkKLSAgICAgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKCkgLSAxKTsKLQotICAgICAgZm9yIChpbnQgaSA9IDI7OyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuZXdQcmVmaXggPSBwcmVmaXggKyBpOwotICAgICAgICBpZiAoIW5hbWVzcGFjZXMuY29udGFpbnNLZXkobmV3UHJlZml4KSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVzcGFjZXMucHV0KG5ld1ByZWZpeCwgbmFtZXNwYWNlVVJJKTsKLQotICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIE5hbWVzcGFjZQotICAgICAgICAgIE5hbWVzcGFjZSBlbnMgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTmFtZXNwYWNlKCk7Ci0gICAgICAgICAgZW5zLnNldFByZWZpeChwcmVmaXgpOwotICAgICAgICAgIGVucy5zZXRVUkkobmFtZXNwYWNlVVJJKTsKLSAgICAgICAgICBnZXRFTmFtZXNwYWNlcygpLmFkZChlbnMpOwotCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAvLyBlbmQgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsKQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBnZXROYW1lc3BhY2VzKCkucmVtb3ZlKHByZWZpeCk7Ci0KLSAgICAgIC8vIFN1cHBvcnQgZm9yIE5hbWVzcGFjZQotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5yZW1vdmUocHJlZml4KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgcG9ydFR5cGUgdG8gdGhpcyBXU0RMIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgdGhlIHBvcnRUeXBlIHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUG9ydFR5cGUoamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGdldEVQb3J0VHlwZXMoKS5hZGQoKFBvcnRUeXBlKXBvcnRUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBzZXJ2aWNlIHRvIHRoaXMgV1NETCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2UgdGhlIHNlcnZpY2UgdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRTZXJ2aWNlKGphdmF4LndzZGwuU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgZ2V0RVNlcnZpY2VzKCkuYWRkKChTZXJ2aWNlKXNlcnZpY2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBiaW5kaW5nIGZhdWx0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGJpbmRpbmcgZmF1bHQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0ZhdWx0IGNyZWF0ZUJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGJpbmRpbmcgaW5wdXQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgYmluZGluZyBpbnB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nSW5wdXQgY3JlYXRlQmluZGluZ0lucHV0KCkKLSAgewotICAgIGphdmF4LndzZGwuQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgYmluZGluZyBvdXRwdXQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgYmluZGluZyBvdXRwdXQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBjcmVhdGVCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGJpbmRpbmcgb3BlcmF0aW9uCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gY3JlYXRlQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBiaW5kaW5nLgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGJpbmRpbmcKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5CaW5kaW5nIGNyZWF0ZUJpbmRpbmcoKQotICB7Ci0gICAgamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBiaW5kaW5nLnNldFVuZGVmaW5lZCh0cnVlKTsKLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgZmF1bHQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgRmF1bHQgY3JlYXRlRmF1bHQoKQotICB7Ci0gICAgamF2YXgud3NkbC5GYXVsdCBmYXVsdCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlRmF1bHQoKTsKLSAgICByZXR1cm4gZmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGltcG9ydC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBpbXBvcnQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5JbXBvcnQgY3JlYXRlSW1wb3J0KCkKLSAgewotICAgIGphdmF4LndzZGwuSW1wb3J0IGltcG9ydERlZiA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlSW1wb3J0KCk7Ci0gICAgcmV0dXJuIGltcG9ydERlZjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgaW5wdXQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgaW5wdXQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgSW5wdXQgY3JlYXRlSW5wdXQoKQotICB7Ci0gICAgamF2YXgud3NkbC5JbnB1dCBpbnB1dCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlSW5wdXQoKTsKLSAgICByZXR1cm4gaW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgbWVzc2FnZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk1lc3NhZ2UgY3JlYXRlTWVzc2FnZSgpCi0gIHsKLSAgICBqYXZheC53c2RsLk1lc3NhZ2UgbWVzc2FnZSA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG1lc3NhZ2Uuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgb3BlcmF0aW9uCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvbiBjcmVhdGVPcGVyYXRpb24oKQotICB7Ci0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBvcGVyYXRpb24uc2V0VW5kZWZpbmVkKHRydWUpOwotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IG91dHB1dC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBvdXRwdXQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGNyZWF0ZU91dHB1dCgpCi0gIHsKLSAgICBqYXZheC53c2RsLk91dHB1dCBvdXRwdXQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZU91dHB1dCgpOwotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IHBhcnQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgcGFydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGNyZWF0ZVBhcnQoKQotICB7Ci0gICAgamF2YXgud3NkbC5QYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgcG9ydC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBwb3J0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFBvcnQgY3JlYXRlUG9ydCgpCi0gIHsKLSAgICBqYXZheC53c2RsLlBvcnQgcG9ydCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlUG9ydCgpOwotICAgIHJldHVybiBwb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgcG9ydCB0eXBlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuUG9ydFR5cGUgY3JlYXRlUG9ydFR5cGUoKQotICB7Ci0gICAgamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgcmV0dXJuIHBvcnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBzZXJ2aWNlLgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIHNlcnZpY2UKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5TZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoKQotICB7Ci0gICAgamF2YXgud3NkbC5TZXJ2aWNlIHNlcnZpY2UgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVNlcnZpY2UoKTsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBiaW5kaW5nLiBBbHNvIGNoZWNrcyBpbXBvcnRlZCBkb2N1bWVudHMuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZywgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIGJpbmRpbmcKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5CaW5kaW5nIGdldEJpbmRpbmcoUU5hbWUgbmFtZSkKLSAgewotICAgIHJldHVybiAoamF2YXgud3NkbC5CaW5kaW5nKXJlc29sdmVXU0RMRWxlbWVudChXU0RMQ29uc3RhbnRzLkJJTkRJTkcsIG5hbWUsIHRoaXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIGJpbmRpbmdzIGRlZmluZWQgaGVyZS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldEJpbmRpbmdzKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVNYXAoV1NETENvbnN0YW50cy5CSU5ESU5HLCBnZXRFQmluZGluZ3MoKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGEgbWFwIG9mIGxpc3RzIGNvbnRhaW5pbmcgYWxsIHRoZSBpbXBvcnRzIGRlZmluZWQgaGVyZS4KLSAgICogVGhlIG1hcCdzIGtleXMgYXJlIHRoZSBuYW1lc3BhY2VVUklzLCBhbmQgdGhlIG1hcCdzIHZhbHVlcwotICAgKiBhcmUgbGlzdHMuIFRoZXJlIGlzIG9uZSBsaXN0IGZvciBlYWNoIG5hbWVzcGFjZVVSSSBmb3Igd2hpY2gKLSAgICogaW1wb3J0cyBoYXZlIGJlZW4gZGVmaW5lZC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldEltcG9ydHMoKQotICB7Ci0gICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWkubmV4dCgpOwotICAgICAgU3RyaW5nIGtleSA9IHRoZUltcG9ydC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChrZXkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAga2V5ID0gIiI7Ci0gICAgICB9Ci0KLSAgICAgIExpc3QgbGlzdCA9IG51bGw7Ci0gICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KGtleSkpCi0gICAgICB7Ci0gICAgICAgIGxpc3QgPSAoTGlzdCltYXAuZ2V0KGtleSk7Ci0gICAgICAgIGxpc3QuYWRkKHRoZUltcG9ydCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGxpc3QuYWRkKHRoZUltcG9ydCk7Ci0gICAgICB9Ci0gICAgICBtYXAucHV0KGtleSwgbGlzdCk7Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBsaXN0IG9mIGltcG9ydHMgZm9yIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlVVJJLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIHRoZSBuYW1lc3BhY2VVUkkgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgKiBkZXNpcmVkIGltcG9ydHMuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydHMKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRJbXBvcnRzKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKG5hbWVzcGFjZVVSSSwgdGhlSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGQodGhlSW1wb3J0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgbWVzc2FnZS4gQWxzbyBjaGVja3MgaW1wb3J0ZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBtZXNzYWdlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBnZXRNZXNzYWdlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuTWVzc2FnZSlyZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5NRVNTQUdFLCBuYW1lLCB0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTWFwKFdTRExDb25zdGFudHMuTUVTU0FHRSwgZ2V0RU1lc3NhZ2VzKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgbmFtZXNwYWNlIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcmVmaXguIE9yIG51bGwgaWYKLSAgICogdGhlcmUgaXMgbm8gbmFtZXNwYWNlIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcmVmaXguIFRoaXMgaXMKLSAgICogdW5yZWxhdGVkIHRvIHRoZSAmbHQ7d3NkbDppbXBvcnQmZ3Q7IGVsZW1lbnQuCi0gICAqIEBzZWUgI2FkZE5hbWVzcGFjZShTdHJpbmcsIFN0cmluZykKLSAgICogQHNlZSAjZ2V0UHJlZml4KFN0cmluZykKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZShTdHJpbmcgcHJlZml4KQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpZ2V0TmFtZXNwYWNlcygpLmdldChwcmVmaXgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgbmFtZXNwYWNlIGFzc29jaWF0aW9ucyBpbiB0aGlzIGRlZmluaXRpb24uIFRoZSBrZXlzIGFyZQotICAgKiB0aGUgcHJlZml4ZXMsIGFuZCB0aGUgbmFtZXNwYWNlIFVSSXMgYXJlIHRoZSB2YWx1ZXMuIFRoaXMgaXMKLSAgICogdW5yZWxhdGVkIHRvIHRoZSAmbHQ7d3NkbDppbXBvcnQmZ3Q7IGVsZW1lbnQuCi0gICAqIEBzZWUgI2FkZE5hbWVzcGFjZShTdHJpbmcsIFN0cmluZykKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldE5hbWVzcGFjZXMoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgcG9ydFR5cGUuIEFsc28gY2hlY2tzIGltcG9ydGVkIGRvY3VtZW50cy4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgcG9ydFR5cGUuCi0gICAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcG9ydFR5cGUsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBwb3J0VHlwZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnRUeXBlIGdldFBvcnRUeXBlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuUG9ydFR5cGUpcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuUE9SVF9UWVBFLCBuYW1lLCB0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBwb3J0VHlwZXMgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0UG9ydFR5cGVzKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVNYXAoV1NETENvbnN0YW50cy5QT1JUX1RZUEUsIGdldEVQb3J0VHlwZXMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGEgcHJlZml4IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hbWVzcGFjZSBVUkkuIE9yIG51bGwgaWYKLSAgICogdGhlcmUgYXJlIG5vIHByZWZpeGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hbWVzcGFjZSBVUkkuIFRoaXMgaXMKLSAgICogdW5yZWxhdGVkIHRvIHRoZSAmbHQ7d3NkbDppbXBvcnQmZ3Q7IGVsZW1lbnQuCi0gICAqIEBzZWUgI2FkZE5hbWVzcGFjZShTdHJpbmcsIFN0cmluZykKLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlKFN0cmluZykKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeChTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBJdGVyYXRvciBlbnRyeUl0ZXJhdG9yID0gZ2V0TmFtZXNwYWNlcygpLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50cnlJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSllbnRyeUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgU3RyaW5nIGFzc29jTmFtZXNwYWNlVVJJID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlVVJJLmVxdWFscyhhc3NvY05hbWVzcGFjZVVSSSkgJiYgcHJlZml4ICE9ICIiKSAvLyBkZWZhdWx0IG5hbWVzcGFjZQotICAgICAgICByZXR1cm4gcHJlZml4OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBzZXJ2aWNlLiBBbHNvIGNoZWNrcyBpbXBvcnRlZCBkb2N1bWVudHMuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIHNlcnZpY2UuCi0gICAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgc2VydmljZSwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIHNlcnZpY2UKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5TZXJ2aWNlIGdldFNlcnZpY2UoUU5hbWUgbmFtZSkKLSAgewotICAgIHJldHVybiAoamF2YXgud3NkbC5TZXJ2aWNlKXJlc29sdmVXU0RMRWxlbWVudChXU0RMQ29uc3RhbnRzLlNFUlZJQ0UsIG5hbWUsIHRoaXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIHNlcnZpY2VzIGRlZmluZWQgaGVyZS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVNYXAoV1NETENvbnN0YW50cy5TRVJWSUNFLCBnZXRFU2VydmljZXMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbnNpb25SZWdpc3RyeSBmb3IgdGhpcyBEZWZpbml0aW9uLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBFeHRlbnNpb25SZWdpc3RyeSBnZXRFeHRlbnNpb25SZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaW9uUmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogU2V0IHRoZSBFeHRlbnNpb25SZWdpc3RyeSBmb3IgdGhpcyBEZWZpbml0aW9uLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvblJlZ2lzdHJ5KEV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5leHRlbnNpb25SZWdpc3RyeSA9IGV4dGVuc2lvblJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREb2N1bWVudEJhc2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEJhc2VVUkkoU3RyaW5nIGRvY3VtZW50QmFzZSkKLSAgewotICAgIHNldExvY2F0aW9uKGRvY3VtZW50QmFzZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5UeXBlcyBjcmVhdGVUeXBlcygpCi0gIHsKLSAgICBqYXZheC53c2RsLlR5cGVzIHR5cGVzID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVUeXBlcygpOwotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlNlcnZpY2UgcmVtb3ZlU2VydmljZShRTmFtZSBuYW1lKQotICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSByZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5TRVJWSUNFLCBuYW1lKTsKLSAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlKQotICAgICAgcmVtb3ZlZCA9IGdldEVTZXJ2aWNlcygpLnJlbW92ZSh3c2RsRWxlbWVudCk7Ci0gICAgaWYgKCFyZW1vdmVkKQotICAgICAgd3NkbEVsZW1lbnQgPSBudWxsOwotICAgIHJldHVybiAoU2VydmljZSl3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmcgcmVtb3ZlQmluZGluZyhRTmFtZSBuYW1lKQotICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSByZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5CSU5ESU5HLCBuYW1lKTsKLSAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotICAgICAgcmVtb3ZlZCA9IGdldEVCaW5kaW5ncygpLnJlbW92ZSh3c2RsRWxlbWVudCk7Ci0gICAgaWYgKCFyZW1vdmVkKQotICAgICAgd3NkbEVsZW1lbnQgPSBudWxsOwotICAgIHJldHVybiAoQmluZGluZyl3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnRUeXBlIHJlbW92ZVBvcnRUeXBlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IHJlc29sdmVXU0RMRWxlbWVudChXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRSwgbmFtZSk7Ci0gICAgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHdzZGxFbGVtZW50IGluc3RhbmNlb2YgUG9ydFR5cGUpCi0gICAgICByZW1vdmVkID0gZ2V0RVBvcnRUeXBlcygpLnJlbW92ZSh3c2RsRWxlbWVudCk7Ci0gICAgaWYgKCFyZW1vdmVkKQotICAgICAgd3NkbEVsZW1lbnQgPSBudWxsOwotICAgIHJldHVybiAoUG9ydFR5cGUpd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIHJlbW92ZU1lc3NhZ2UoUU5hbWUgbmFtZSkKLSAgewotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuTUVTU0FHRSwgbmFtZSk7Ci0gICAgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHdzZGxFbGVtZW50IGluc3RhbmNlb2YgTWVzc2FnZSkKLSAgICAgIHJlbW92ZWQgPSBnZXRFTWVzc2FnZXMoKS5yZW1vdmUod3NkbEVsZW1lbnQpOwotICAgIGlmICghcmVtb3ZlZCkKLSAgICAgIHdzZGxFbGVtZW50ID0gbnVsbDsKLSAgICByZXR1cm4gKE1lc3NhZ2Upd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5UeXBlcyBnZXRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RVR5cGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlcyhqYXZheC53c2RsLlR5cGVzIHR5cGVzKQotICB7Ci0gICAgc2V0RVR5cGVzKChUeXBlcyl0eXBlcyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VJTVBPUlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFSW1wb3J0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHJldHVybiBiYXNpY1NldEVUeXBlcyhudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFTWVzc2FnZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RVBvcnRUeXBlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUJpbmRpbmdzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFU2VydmljZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkFNRVNQQUNFUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RU5hbWVzcGFjZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U6Ci0gICAgICByZXR1cm4gZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQ09ESU5HOgotICAgICAgcmV0dXJuIGdldEVuY29kaW5nKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VJTVBPUlRTOgotICAgICAgcmV0dXJuIGdldEVJbXBvcnRzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHJldHVybiBnZXRFVHlwZXMoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTOgotICAgICAgcmV0dXJuIGdldEVNZXNzYWdlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUzoKLSAgICAgIHJldHVybiBnZXRFUG9ydFR5cGVzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIHJldHVybiBnZXRFQmluZGluZ3MoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgcmV0dXJuIGdldEVTZXJ2aWNlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkFNRVNQQUNFUzoKLSAgICAgIHJldHVybiBnZXRFTmFtZXNwYWNlcygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U6Ci0gICAgICBzZXRUYXJnZXROYW1lc3BhY2UoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OOgotICAgICAgc2V0TG9jYXRpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkc6Ci0gICAgICBzZXRFbmNvZGluZygoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICBnZXRFSW1wb3J0cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFSW1wb3J0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHNldEVUeXBlcygoVHlwZXMpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTUVTU0FHRVM6Ci0gICAgICBnZXRFTWVzc2FnZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RU1lc3NhZ2VzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVBPUlRfVFlQRVM6Ci0gICAgICBnZXRFUG9ydFR5cGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVQb3J0VHlwZXMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FQklORElOR1M6Ci0gICAgICBnZXRFQmluZGluZ3MoKS5jbGVhcigpOwotICAgICAgZ2V0RUJpbmRpbmdzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgZ2V0RVNlcnZpY2VzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVTZXJ2aWNlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRToKLSAgICAgIHNldFRhcmdldE5hbWVzcGFjZShUQVJHRVRfTkFNRVNQQUNFX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT046Ci0gICAgICBzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkNPRElORzoKLSAgICAgIHNldEVuY29kaW5nKEVOQ09ESU5HX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICBnZXRFSW1wb3J0cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHNldEVUeXBlcygoVHlwZXMpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VNRVNTQUdFUzoKLSAgICAgIGdldEVNZXNzYWdlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTOgotICAgICAgZ2V0RVBvcnRUeXBlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIGdldEVCaW5kaW5ncygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VTRVJWSUNFUzoKLSAgICAgIGdldEVTZXJ2aWNlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U6Ci0gICAgICByZXR1cm4gVEFSR0VUX05BTUVTUEFDRV9FREVGQVVMVCA9PSBudWxsID8gdGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgOiAhVEFSR0VUX05BTUVTUEFDRV9FREVGQVVMVC5lcXVhbHModGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT046Ci0gICAgICByZXR1cm4gTE9DQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uICE9IG51bGwgOiAhTE9DQVRJT05fRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUU6Ci0gICAgICByZXR1cm4gUU5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHFOYW1lICE9IG51bGwgOiAhUU5BTUVfRURFRkFVTFQuZXF1YWxzKHFOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkc6Ci0gICAgICByZXR1cm4gRU5DT0RJTkdfRURFRkFVTFQgPT0gbnVsbCA/IGVuY29kaW5nICE9IG51bGwgOiAhRU5DT0RJTkdfRURFRkFVTFQuZXF1YWxzKGVuY29kaW5nKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICByZXR1cm4gZUltcG9ydHMgIT0gbnVsbCAmJiAhZUltcG9ydHMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVM6Ci0gICAgICByZXR1cm4gZVR5cGVzICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VNRVNTQUdFUzoKLSAgICAgIHJldHVybiBlTWVzc2FnZXMgIT0gbnVsbCAmJiAhZU1lc3NhZ2VzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVBPUlRfVFlQRVM6Ci0gICAgICByZXR1cm4gZVBvcnRUeXBlcyAhPSBudWxsICYmICFlUG9ydFR5cGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTOgotICAgICAgcmV0dXJuIGVCaW5kaW5ncyAhPSBudWxsICYmICFlQmluZGluZ3MuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FU0VSVklDRVM6Ci0gICAgICByZXR1cm4gZVNlcnZpY2VzICE9IG51bGwgJiYgIWVTZXJ2aWNlcy5pc0VtcHR5KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgcmV0dXJuIGVOYW1lc3BhY2VzICE9IG51bGwgJiYgIWVOYW1lc3BhY2VzLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBkb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXRzIHRoZSBvd25lciBkb2N1bWVudC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh0YXJnZXROYW1lc3BhY2U6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh0YXJnZXROYW1lc3BhY2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbG9jYXRpb246ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBxTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHFOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVuY29kaW5nOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZW5jb2RpbmcpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBIYW5kLWNvZGVkIG1ldGhvZHMKLSAgLy8KLQotICBwcm90ZWN0ZWQgc3RhdGljIFJlc291cmNlU2V0IGdsb2JhbFJlc291cmNlU2V0OwotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFJlc291cmNlU2V0IGdldEdsb2JhbFJlc291cmNlU2V0KCkKLSAgewotICAgIGlmIChnbG9iYWxSZXNvdXJjZVNldCA9PSBudWxsKQotICAgIHsKLSAgICAgIGdsb2JhbFJlc291cmNlU2V0ID0gY3JlYXRlUmVzb3VyY2VTZXQoKTsKLSAgICAgIC8vU3RyaW5nIGJhc2VVUkwgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEJhc2VVUkwoKS50b1N0cmluZygpOwotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJhc2UgVVJMIGlzOiAiICsgYmFzZVVSTCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdsb2JhbFJlc291cmNlU2V0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBSZXNvdXJjZVNldCBjcmVhdGVSZXNvdXJjZVNldCgpCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXN1bHQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzdWx0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCJ3c2RsIiwgbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRGVmaW5pdGlvbiBjcmVhdGVEZWZpbml0aW9uKE5vZGUgbm9kZSkKLSAgewotICAgIHJldHVybiBjcmVhdGVEZWZpbml0aW9uKG5vZGUsIG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oTm9kZSBub2RlLCBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlRGVmaW5pdGlvbihub2RlLCBsb2NhdGlvbiwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihOb2RlIG5vZGUsIFN0cmluZyBsb2NhdGlvbiwgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikuc2V0VXNlRXh0ZW5zaW9uRmFjdG9yaWVzKHVzZUV4dGVuc2lvbkZhY3Rvcmllcyk7Ci0gICAgZGVmaW5pdGlvbi5zZXRFbGVtZW50KChFbGVtZW50KW5vZGUpOwotICAgIGRlZmluaXRpb24uc2V0RG9jdW1lbnRCYXNlVVJJKGxvY2F0aW9uKTsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgV1NETEVsZW1lbnQgcmVzb2x2ZVdTRExFbGVtZW50KGludCB0eXBlLCBMaXN0IGxpc3QsIFFOYW1lIHFuYW1lKQotICB7Ci0gICAgV1NETEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgIFFOYW1lIHRoZVFOYW1lID0gZ2V0UU5hbWVGb3JXU0RMRWxlbWVudCh0eXBlLCB3c2RsRWxlbWVudCk7Ci0gICAgICAgIGlmIChxbmFtZS5lcXVhbHModGhlUU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gd3NkbEVsZW1lbnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgSGFzaE1hcCBjcmVhdGVNYXAoaW50IHR5cGUsIExpc3QgbGlzdCkKLSAgewotICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClpLm5leHQoKTsKLSAgICAgIFFOYW1lIHRoZVFOYW1lID0gZ2V0UU5hbWVGb3JXU0RMRWxlbWVudCh0eXBlLCB3c2RsRWxlbWVudCk7Ci0gICAgICBpZiAodGhlUU5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWFwLnB1dCh0aGVRTmFtZSwgd3NkbEVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLSAgcHJpdmF0ZSBRTmFtZSBnZXRRTmFtZUZvcldTRExFbGVtZW50KGludCB0eXBlLCBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgcmVzdWx0ID0gKChNZXNzYWdlKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5QT1JUX1RZUEU6Ci0gICAgICByZXN1bHQgPSAoKFBvcnRUeXBlKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5CSU5ESU5HOgotICAgICAgcmVzdWx0ID0gKChCaW5kaW5nKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5TRVJWSUNFOgotICAgICAgcmVzdWx0ID0gKChTZXJ2aWNlKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNvbHZlcyB0aGUgZWxlbWVudCBkZXNjcmliZWQgYnkgdHlwZSBhbmQgcW5hbWUgaW4gdGhlIGNvbnRleHQgb2YgdGhlCi0gICAqIGdpdmVuIGRlZmluaXRpb24uIFRoZSBkZWZpbml0aW9uJ3MgaW1wb3J0ZWQgZGVmaW5pdGlvbnMgYXJlIGNoZWNrZWQgYXMgd2VsbC4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlIHRoZSBlbGVtZW50IHR5cGUuCi0gICAqIEBwYXJhbSBxbmFtZSB0aGUgZWxlbWVudCdzIFFOYW1lLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiB0aGUgY29udGV4dCBkZWZpbml0aW9uLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcmV0dXJuIHRoZSByZXNvbHZlZCBXU0RMRWxlbWVudCBvciBudWxsIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIFFOYW1lIHFuYW1lLCBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uKQotICB7Ci0gICAgaWYgKHFuYW1lID09IG51bGwgfHwgcW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBMaXN0IGRlZmluaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGRlZmluaXRpb25zLmFkZChkZWZpbml0aW9uKTsKLSAgICBXU0RMRWxlbWVudCByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgcW5hbWUsIGRlZmluaXRpb25zLCBuZXcgQXJyYXlMaXN0KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNvbHZlcyB0aGUgZWxlbWVudCBkZXNjcmliZWQgYnkgdHlwZSBhbmQgcW5hbWUgaW4gdGhlIGNvbnRleHQgb2YgdGhlCi0gICAqIGdpdmVuIGRlZmluaXRpb25zLiBUaGUgZGVmaW5pdGlvbnMgaW1wb3J0ZWQgZGVmaW5pdGlvbnMgYXJlIGNoZWNrZWQgYXMgd2VsbC4KLSAgICogCi0gICAqIElNUE9SVEFOVCEgVGhpcyBtZXRob2QgaXMgcmVjdXJzaXZlLiBJdCBjaGVja3MgdGhlIGRlZmluaXRpb25zIGFuZCBhbGwgdGhlaXIKLSAgICogaW1wb3J0ZWQgZGVmaW5pdGlvbnMuIEl0IGFsc28gaXMgY29kZWQgc3VjaCB0aGF0IGl0IGF2b2lkcyBhIGN5Y2xpYyBpbXBvcnQKLSAgICogc2hvdWxkIG9uZSBiZSBlbmNvdW50ZXJlZC4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlIHRoZSBlbGVtZW50IHR5cGUuCi0gICAqIEBwYXJhbSBxbmFtZSB0aGUgZWxlbWVudCdzIHFOYW1lLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbnMgdGhlIGNvbnRleHQgZGVmaW5pdGlvbnMKLSAgICogQHBhcmFtIHZpc2l0ZWREZWZpbml0aW9ucyBhIGxpc3Qgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWxyZWFkeSB2aXNpdGVkLgotICAgKiBAcmV0dXJuIHRoZSByZXNvbHZlZCBXU0RMRWxlbWVudCBvciBudWxsIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIFFOYW1lIHFuYW1lLCBMaXN0IGRlZmluaXRpb25zLCBMaXN0IHZpc2l0ZWREZWZpbml0aW9ucykKLSAgewotICAgIFdTRExFbGVtZW50IHJlc3VsdCA9IG51bGw7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gSW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIG9sZCBiZWhhdmlvdXIgd2hpY2ggdXNlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbgotICAgIC8vIGFuZCBhbGwgZmlyc3QgbGV2ZWwgaW1wb3J0cywgY2hlY2sgdGhlIGVudGlyZSBsaXN0IG9mIGRlZmluaXRpb25zIHBhc3NlZAotICAgIC8vIGluIGZpcnN0LgotCi0gICAgSXRlcmF0b3IgZGVmaW5pdGlvbnNJdGVyYXRvciA9IGRlZmluaXRpb25zLml0ZXJhdG9yKCk7Ci0KLSAgICB3aGlsZSAoZGVmaW5pdGlvbnNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uc0l0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5yZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgcW5hbWUpOwotCi0gICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmUtaXRlcmF0ZSBvdmVyIHRoZSBkZWZpbml0aW9ucyBhbmQgcmVjdXJzZSBpbnRvIHRoZWlyIGltcG9ydHMuCi0KLSAgICBkZWZpbml0aW9uc0l0ZXJhdG9yID0gZGVmaW5pdGlvbnMuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChkZWZpbml0aW9uc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKWRlZmluaXRpb25zSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICBpZiAodmlzaXRlZERlZmluaXRpb25zLmNvbnRhaW5zKGRlZmluaXRpb24pKQotICAgICAgewotICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB3ZSBoYXZlIGEgY2FzZSBvZiBjeWNsaWMgaW1wb3J0cy4gU2luY2Ugd2UKLSAgICAgICAgLy8gYWxyZWFkeSBsb29rZWQgaW4gaXQsIHdlIGNhbiBhbmQgc2hvdWxkIHNraXAgaXQuCi0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIHZpc2l0ZWREZWZpbml0aW9ucy5hZGQoZGVmaW5pdGlvbik7Ci0KLSAgICAgIExpc3QgaW1wb3J0ZWREZWZpbml0aW9ucyA9IGRlZmluaXRpb24uZ2V0SW1wb3J0ZWREZWZpbml0aW9ucyhxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICAgIHJlc3VsdCA9IHJlc29sdmVXU0RMRWxlbWVudCh0eXBlLCBxbmFtZSwgaW1wb3J0ZWREZWZpbml0aW9ucywgdmlzaXRlZERlZmluaXRpb25zKTsKLQotICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIFFOYW1lIHFuYW1lKQotICB7Ci0gICAgV1NETEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgICByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgZ2V0RU1lc3NhZ2VzKCksIHFuYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRToKLSAgICAgICAgcmVzdWx0ID0gcmVzb2x2ZVdTRExFbGVtZW50KHR5cGUsIGdldEVQb3J0VHlwZXMoKSwgcW5hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdTRExDb25zdGFudHMuQklORElORzoKLSAgICAgICAgcmVzdWx0ID0gcmVzb2x2ZVdTRExFbGVtZW50KHR5cGUsIGdldEVCaW5kaW5ncygpLCBxbmFtZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV1NETENvbnN0YW50cy5TRVJWSUNFOgotICAgICAgICByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgZ2V0RVNlcnZpY2VzKCksIHFuYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsaWF0aW9uIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIEVsZW1lbnQgb2xkRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAob2xkRWxlbWVudCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KQotICAgIHsKLSAgICAgIEV2ZW50VGFyZ2V0IG9sZEV2ZW50VGFyZ2V0ID0gKChFdmVudFRhcmdldClvbGRFbGVtZW50KTsKLSAgICAgIG9sZEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIGdldEV2ZW50TGlzdGVuZXIoKSwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIG9sZEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgb2xkRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQXR0ck1vZGlmaWVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBzdXBlci5zZXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpCi0gICAgewotICAgICAgRXZlbnRUYXJnZXQgZXZlbnRUYXJnZXQgPSAoKEV2ZW50VGFyZ2V0KWVsZW1lbnQpOwotICAgICAgZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgZG9jdW1lbnQgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzdXBlci5yZWNvbmNpbGVBdHRyaWJ1dGVzKGNoYW5nZWRFbGVtZW50KTsKLQotICAgIGlmIChjaGFuZ2VkRWxlbWVudCA9PSBnZXRFbGVtZW50KCkpCi0gICAgewotICAgICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRBUkdFVE5BTUVTUEFDRV9BVFRSSUJVVEUpKQotICAgICAgICBzZXRUYXJnZXROYW1lc3BhY2UoY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKSkKLSAgICAgICAgc2V0UU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpKTsKLSAgICAgIGdldEVOYW1lc3BhY2VzKCkuY2xlYXIoKTsKLSAgICAgIGdldE5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgLy9nZXROYW1lc3BhY2VzKCkucHV0KCIiLCBudWxsKTsKLQotICAgICAgTmFtZWROb2RlTWFwIG1hcCA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGludCBtYXBMZW5ndGggPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcExlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0ciltYXAuaXRlbShpKTsKLSAgICAgICAgU3RyaW5nIG5zUHJlZml4ID0gbnVsbDsKLSAgICAgICAgaWYgKFhNTE5TLmVxdWFscyhhdHRyLmdldFByZWZpeCgpKSkKLSAgICAgICAgewotICAgICAgICAgIG5zUHJlZml4ID0gYXR0ci5nZXRMb2NhbE5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChYTUxOUy5lcXVhbHMoYXR0ci5nZXROb2RlTmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIG5zUHJlZml4ID0gIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobnNQcmVmaXggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGdldE5hbWVzcGFjZXMoKS5wdXQobnNQcmVmaXgsIGF0dHIuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3dpdGNoIChXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGNoaWxkKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuQklORElORzoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICAgICAgYmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBiaW5kaW5nLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBhZGRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OOgotICAgICAgewotICAgICAgICAvLyBDUzogd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB1bnNldCB0aGlzIGVsZW1lbnQgd2hlbiBpdHMgcmVtb3ZlZAotICAgICAgICAvL2RlZmluaXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoY2hpbGQpOyAgCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLklNUE9SVDoKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IGkgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW1wb3J0KCk7Ci0gICAgICAgIGkuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgaS5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkSW1wb3J0KGkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24odGhpcyk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRToKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuU0VSVklDRToKLSAgICAgIHsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgICAgIHNlcnZpY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgc2VydmljZS5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuVFlQRVM6Ci0gICAgICB7Ci0gICAgICAgIGlmIChnZXRFVHlwZXMoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgVHlwZXMgdHlwZXMgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVR5cGVzKCk7Ci0gICAgICAgICAgdHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgICB0eXBlcy5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgICBzZXRFVHlwZXModHlwZXMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBnZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICAgICAgICAgID8gKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChnZXROYW1lc3BhY2UoY2hpbGQpLCBnZXRMb2NhbE5hbWUoY2hpbGQpKQotICAgICAgICAgIDogKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgICAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFR5cGVzKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpID09IG1vZGVsT2JqZWN0KQotICAgICAgewotICAgICAgICBkZWZpbml0aW9uLnNldEVUeXBlcyhudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIExpc3QgbGlzdCA9IGdldExpc3QoY29tcG9uZW50LCBtb2RlbE9iamVjdCk7Ci0gICAgICBpZiAobGlzdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaXN0LnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldExpc3QoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbXBvbmVudDsKLQotICAgIC8vIHRvZG8uLi4gdXNlIFdTRExTd2l0Y2gKLSAgICAvLwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBJbXBvcnQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbiljb21wb25lbnQ7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpKTsKLSAgICBsaXN0LmFkZChkZWZpbml0aW9uLmdldEVUeXBlcygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKSk7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwdWJsaWMgRG9jdW1lbnQgdXBkYXRlRG9jdW1lbnQoKQotICB7Ci0gICAgZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwotICAgIHJldHVybiBkb2N1bWVudDsKLSAgfQotCi0gIHByaXZhdGUgRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLSAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jdW1lbnRCdWlsZGVyID0gZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIHJldHVybiBkb2N1bWVudEJ1aWxkZXIubmV3RG9jdW1lbnQoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIFdTRExQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5ERUZJTklUSU9OKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RUltcG9ydHMoKSk7Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGdldEVUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKFR5cGVzSW1wbCl0eXBlcykuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFTWVzc2FnZXMoKSk7Ci0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFUG9ydFR5cGVzKCkpOwotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RUJpbmRpbmdzKCkpOwotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RVNlcnZpY2VzKCkpOwotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRDaGlsZEVsZW1lbnRzKEVsZW1lbnQgcGFyZW50LCBMaXN0IGMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gYy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFdTRExFbGVtZW50SW1wbCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudEltcGwpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9IHdzZGxFbGVtZW50LmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIC8vIEFkZCBuYW1lc3BhY2UgcHJlZml4IGluZm8KLSAgICAvLyBUQkQgLSBOZWVkIHRvIHJldmlzaXQuCi0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgJiYgdGhlRWxlbWVudCAhPSBudWxsKQotICAgIC8vIFdlIGFyZSB1cGRhdGluZyB0aGUgRGVmaW5pdGlvbiBlbGVtZW50LgotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0TmFtZXNwYWNlcygpLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgICAgU3RyaW5nIHVyaSA9IG51bGw7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgcHJlZml4ID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgdXJpID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAocHJlZml4ICE9ICIiKQotICAgICAgICAgIHRoZUVsZW1lbnQuc2V0QXR0cmlidXRlTlMoWFNEQ29uc3RhbnRzLlhNTE5TX1VSSV8yMDAwLCAieG1sbnM6IiArIHByZWZpeCwgdXJpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBlbHNlIGlmICh1cmkgIT0gbnVsbCkKLSAgICAgICAgICAvLyBIYW5kbGUgZGVmYXVsdCBuYW1lc3BhY2UsIGUuZy4geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotICAgICAgICAgIHRoZUVsZW1lbnQuc2V0QXR0cmlidXRlTlMoWFNEQ29uc3RhbnRzLlhNTE5TX1VSSV8yMDAwLCBYTUxOUywgdXJpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgLy9pZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRW5jb2RpbmcoKSkKLSAgICAgIC8vICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuRU5DT0RJTkdfQVRUUklCVVRFLCBnZXRFbmNvZGluZygpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5ERUZJTklUSU9OX19RTkFNRSkKLSAgICAgICAgaWYgKGdldFFOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UpCi0gICAgICB7Ci0gICAgICAgIGlmIChnZXRUYXJnZXROYW1lc3BhY2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRBUkdFVE5BTUVTUEFDRV9BVFRSSUJVVEUsIGdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBpZiAoZUF0dHJpYnV0ZSAhPSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhdGNoVGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEltcG9ydGVkRGVmaW5pdGlvbnMoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEltcG9ydHMobmFtZXNwYWNlKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaS5uZXh0KCk7Ci0gICAgICAoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLSAgICAgIERlZmluaXRpb24gaW1wb3J0ZWREZWZpbml0aW9uID0gdGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoaW1wb3J0ZWREZWZpbml0aW9uICE9IG51bGwgJiYgV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKG5hbWVzcGFjZSwgaW1wb3J0ZWREZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGQoaW1wb3J0ZWREZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvblVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCIjIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24odXJpLnN1YnN0cmluZygwLCBpbmRleCksIHVyaS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNDb21wb25lbnREZWZpbmVkKFhTRENvbmNyZXRlQ29tcG9uZW50IGNvbXBvbmVudCkKLSAgewotICAgIC8vIG5vdGUgdGhlIGdldENvbnRhaW5lcigpIHRlc3QgdG8gZWxpbWluYXRlICdzeW50aGV0aWMnIHR5cGVzCi0gICAgLy8gdGhhdCBhcmUgY3JlYXRlZCBieSB0aGUgWE1MU2NoZW1hIG1vZGVsIHdoZW4gcmVzb2x1dGlvbiBmYWlscyAgIAotICAgIHJldHVybiBjb21wb25lbnQgIT0gbnVsbCAmJiBjb21wb25lbnQuZ2V0Q29udGFpbmVyKCkgIT0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb2x2ZVNjaGVtYShuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICAgIGlmIChpc0NvbXBvbmVudERlZmluZWQocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBDb3VsZCBub3QgcmVzb2x2ZS4gVHJ5IGFnYWluc3QgYWxsIDxpbXBvcnQ+ZWQgYW5kIGlubGluZWQgc2NoZW1hcy4KLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRJbXBvcnRlZE9ySW5saW5lZFNjaGVtYXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpaS5uZXh0KCk7Ci0gICAgICByZXN1bHQgPSBzY2hlbWEucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gICAgICBpZiAoaXNDb21wb25lbnREZWZpbmVkKHJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlVHlwZURlZmluaXRpb25VUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCIjIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHJlc29sdmVUeXBlRGVmaW5pdGlvbih1cmkuc3Vic3RyaW5nKDAsIGluZGV4KSwgdXJpLnN1YnN0cmluZyhpbmRleCArIDEpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlVHlwZURlZmluaXRpb24oU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb2x2ZVNjaGVtYShuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlVHlwZURlZmluaXRpb24obmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5lZChyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIENvdWxkIG5vdCByZXNvbHZlLiBUcnkgYWdhaW5zdCBhbGwgPGltcG9ydD5lZCBhbmQgaW5saW5lZCBzY2hlbWFzLgotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlVHlwZURlZmluaXRpb24obmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5lZChyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7IC8vIEZhaWxlZCB0byByZXNvbHZlLgotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgcmV0dXJucyBzZXQgb2Ygc2NoZW1hcyB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYXMgaXQncyB0YXJnZXQgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gcmVzb2x2ZVNjaGVtYShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKCIiLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9IG51bGw7Ci0gICAgfQotCi0gICAgaWYgKFhTRENvbnN0YW50cy5pc1NjaGVtYUZvclNjaGVtYU5hbWVzcGFjZShuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b24oWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEobmFtZXNwYWNlKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKFhTRENvbnN0YW50cy5pc1NjaGVtYUluc3RhbmNlTmFtZXNwYWNlKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnNpbmdsZXRvbihYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUluc3RhbmNlKG5hbWVzcGFjZSkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcyhuYW1lc3BhY2UpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcyhTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLQotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBjb2xsZWN0SW1wb3J0ZWRTY2hlbWFzKG5hbWVzcGFjZSwgbGlzdCk7Ci0gICAgY29sbGVjdElubGluZWRTY2hlbWFzKG5hbWVzcGFjZSwgbGlzdCk7Ci0gICAgY29sbGVjdElubGluZWRTY2hlbWFzT2ZJbXBvcnRlZERlZmluaXRpb25zKG5hbWVzcGFjZSwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW1wb3J0ZWRPcklubGluZWRTY2hlbWFzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpLm5leHQoKTsKLSAgICAgICgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIGxpc3QuYWRkKHNjaGVtYSk7Ci0gICAgfQotCi0gICAgaWYgKGdldEVUeXBlcygpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGRBbGwoZ2V0RVR5cGVzKCkuZ2V0U2NoZW1hcygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRXZlbnRMaXN0ZW5lciBldmVudExpc3RlbmVyOwotCi0gIHByb3RlY3RlZCBOb2RlIGRlbGV0aW9uTm9kZTsKLQotICBwdWJsaWMgTm9kZSBnZXREZWxldGlvbk5vZGUoKQotICB7Ci0gICAgcmV0dXJuIGRlbGV0aW9uTm9kZTsKLSAgfQotCi0gIHByb3RlY3RlZCBFdmVudExpc3RlbmVyIGdldEV2ZW50TGlzdGVuZXIoKQotICB7Ci0gICAgaWYgKGV2ZW50TGlzdGVuZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBldmVudExpc3RlbmVyID0gbmV3IEV2ZW50TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTXV0YXRpb25FdmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTXV0YXRpb25FdmVudCBtdXRhdGlvbkV2ZW50ID0gKE11dGF0aW9uRXZlbnQpZXZlbnQ7Ci0gICAgICAgICAgICAgIGlmIChtdXRhdGlvbkV2ZW50LmdldFRhcmdldCgpIGluc3RhbmNlb2YgTm9kZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE5vZGUgbm9kZSA9IChOb2RlKW11dGF0aW9uRXZlbnQuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbkV2ZW50LmdldEF0dHJDaGFuZ2UoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFdTRExFbGVtZW50SW1wbCBsaXN0ZW5lciA9IChXU0RMRWxlbWVudEltcGwpZ2V0Q29ycmVzcG9uZGluZ0NvbXBvbmVudChub2RlLmdldFBhcmVudE5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldFR5cGUoKS5lcXVhbHMoIkRPTU5vZGVSZW1vdmVkIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGRlbGV0aW9uTm9kZSA9IChOb2RlKWV2ZW50LmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmVsZW1lbnRDb250ZW50c0NoYW5nZWQoKEVsZW1lbnQpbm9kZS5nZXRQYXJlbnROb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBkZWxldGlvbk5vZGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgV1NETEVsZW1lbnRJbXBsIGxpc3RlbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb3JyZXNwb25kaW5nQ29tcG9uZW50KG5vZGUpOwotICAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmVsZW1lbnRBdHRyaWJ1dGVzQ2hhbmdlZCgoRWxlbWVudClub2RlKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotICAgIHJldHVybiBldmVudExpc3RlbmVyOwotICB9Ci0KLSAgcHVibGljIFdTRExFbGVtZW50IGdldENvcnJlc3BvbmRpbmdDb21wb25lbnQoTm9kZSBub2RlKQotICB7Ci0gICAgLy8gV2UgY29uc2lkZXIgYWxsIHBhcmVudHMgc28gdGhhdCB0aGV5IGNhbiBoYW5kbGUgb3RoZXIgY29udGFpbmVkIG5vZGVzIHRoYXQgb3RoZXJ3aXNlIGRvbid0IGNvcnJlc3BvbmQgdG8gYSBjb21wb25lbnQuCi0gICAgLy8KLSAgICBMaXN0IHBhcmVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuQVRUUklCVVRFX05PREUpCi0gICAgewotICAgICAgbm9kZSA9ICgoQXR0cilub2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFNraXAgYWhlYWQgdG8gYW4gZWxlbWVudC4KLSAgICAgIC8vCi0gICAgICBmb3IgKE5vZGUgc2Nhbk5vZGUgPSBub2RlOyBzY2FuTm9kZSAhPSBudWxsOyBzY2FuTm9kZSA9IHNjYW5Ob2RlLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzY2FuTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgbm9kZSA9IHNjYW5Ob2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNraXAgYmFjayB0byBhbiBlbGVtZW50LgotICAgICAgLy8KLSAgICAgIGZvciAoTm9kZSBzY2FuTm9kZSA9IG5vZGU7IHNjYW5Ob2RlICE9IG51bGw7IHNjYW5Ob2RlID0gc2Nhbk5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzY2FuTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgbm9kZSA9IHNjYW5Ob2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTmF2aWdhdGUgb3V0IHRocm91Z2ggdGhlIGVsZW1lbnRzLgotICAgIC8vCi0gICAgZm9yIChOb2RlIHBhcmVudCA9IG5vZGU7IHBhcmVudCAhPSBudWxsOyBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50Tm9kZSgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50cy5hZGQocGFyZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBXU0RMRWxlbWVudCBiZXN0V1NETEVsZW1lbnQgPSBnZXRCZXN0V1NETEVsZW1lbnQocGFyZW50cyk7Ci0gICAgcmV0dXJuIGJlc3RXU0RMRWxlbWVudDsKLSAgfQotCi0gIC8vCi0gIC8vCi0gIC8vCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMgPSB0cnVlOwotCi0gIHB1YmxpYyB2b2lkIHNldFVzZUV4dGVuc2lvbkZhY3Rvcmllcyhib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdXNlRXh0ZW5zaW9uRmFjdG9yaWVzID0gdmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICB7Ci0gICAgcmV0dXJuIHVzZUV4dGVuc2lvbkZhY3RvcmllczsKLSAgfQotCi0gIC8vIFNlZSBCdWcgNTM2NgotICBwdWJsaWMgdm9pZCByZW1vdmVBbGwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICBkb2N1bWVudCA9IG51bGw7Ci0gICAgICBlbGVtZW50ID0gbnVsbDsKLSAgICAgIGdldEVTZXJ2aWNlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFQmluZGluZ3MoKS5jbGVhcigpOwotICAgICAgZ2V0RVBvcnRUeXBlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFTWVzc2FnZXMoKS5jbGVhcigpOwotICAgICAgc2V0RVR5cGVzKG51bGwpOwotICAgICAgZ2V0RUltcG9ydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0KLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbmxpbmVTY2hlbWFMb2NhdGlvbnMoUmVzb3VyY2UgcmVzb3VyY2UpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgc2NoZW1hcyBsb2NhdGlvbiAKLSAgICBUeXBlcyB0eXBlcyA9IHRoaXMuZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgaWYgKCEoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGVsLmdldFNjaGVtYSgpOwotICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBuZWVkIHRoaXMgdHJ5LWNhdGNoIGJsb2NrIGluIGNhc2Ugd2UgZW5jb3VudGVyIGFuIGV4Y2VwdGlvbiB3aGlsZSBhdHRlbXB0aW5nCi0gICAgICAgICAgLy8gdG8gcmVzb2x2ZSB0aGUgc2NoZW1hLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIFdTREwgRWRpdG9yLCB3ZSBnZXQgYQotICAgICAgICAgIC8vICdjYW5ub3QgY3JlYXRlIHBhcnQgZXhjZXB0aW9uJy4uLi4uLlNlZSBlY2xpcHNlIGJ1Z3ppbGxhIGJ1ZyA4OTg1NQotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNjaGVtYS5zZXRTY2hlbWFMb2NhdGlvbihyZXNvdXJjZS5nZXRVUkkoKS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKiAKLSAgICogIFRoaXMgbWV0aG9kIHdpbGwgY29sbGVjdCB0aGUgc2NoZW1hcyBtYXRjaGluZyB0aGUgbmFtZXNwYWNlCi0gICAqICB0aGF0IGFyZSBpbmxpbmVkIGRpcmVjdGx5IHdpdGhpbiB0aGlzIGRlZmluaXRpb24uCi0gICAqICAKLSAgICogIEBwYXJhbSBuYW1lc3BhY2UgdGhlIG5hbWVzcGFjZSB0byBtYXRjaC4KLSAgICogIEBwYXJhbSBsaXN0IGFsbCBpbmxpbmUgc2NoZW1hcyB0aGF0IG1hdGNoIHRoZSBuYW1lc3BhY2Ugd2lsbCBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0SW5saW5lZFNjaGVtYXMoU3RyaW5nIG5hbWVzcGFjZSwgTGlzdCBsaXN0KQotICB7Ci0gICAgVHlwZXMgdHlwZXMgPSBnZXRFVHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IHNjaGVtYXMgPSB0eXBlcy5nZXRTY2hlbWFzKCk7Ci0gICAgICBJdGVyYXRvciBzY2hlbWFzSXRlcmF0b3IgPSBzY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoc2NoZW1hc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpc2NoZW1hc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKG5hbWVzcGFjZSwgdGFyZ2V0TmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKHNjaGVtYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBFTGlzdCBzY2hlbWFDb250ZW50cyA9IHNjaGVtYS5nZXRDb250ZW50cygpOwotICAgICAgICBJdGVyYXRvciBzY2hlbWFDb250ZW50c0l0ZXJhdG9yID0gc2NoZW1hQ29udGVudHMuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAoc2NoZW1hQ29udGVudHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgY29tcG9uZW50ID0gc2NoZW1hQ29udGVudHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTREltcG9ydCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU0RJbXBvcnQgdGhlSW1wb3J0ID0gKFhTREltcG9ydCljb21wb25lbnQ7Ci0gICAgICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZXNwYWNlID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgaWYgKFdTRExDb25zdGFudHMuaXNNYXRjaGluZ05hbWVzcGFjZShuYW1lc3BhY2UsIGltcG9ydE5hbWVzcGFjZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICgoWFNESW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydFNjaGVtYSgpOwotICAgICAgICAgICAgICBYU0RTY2hlbWEgaW1wb3J0ZWRTY2hlbWEgPSB0aGVJbXBvcnQuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsKLSAgICAgICAgICAgICAgaWYgKGltcG9ydGVkU2NoZW1hICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZChpbXBvcnRlZFNjaGVtYSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqICBUaGlzIG1ldGhvZCB3aWxsIGNvbGxlY3QgYW55IHNjaGVtYSBtYXRjaGluZyB0aGUgZ2l2ZW4gbmFtZXNwYWNlIHRoYXQgYXJlCi0gICAqICBpbXBvcnRlZCBkaXJlY3RseSB2aWEgYSB3c2RsIGltcG9ydCAoZS5nLiAmbHQ7d3NkbDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkZvby54c2QiLi4uKQotICAgKiAgCi0gICAqICBAcGFyYW0gbmFtZXNwYWNlIHRoZSBuYW1lc3BhY2UgdG8gbWF0Y2gKLSAgICogIEBwYXJhbSBsaXN0IGFsbCBpbXBvcnRlZCBzY2hlbWFzIHRoYXQgbWF0Y2ggdGhlIG5hbWVzcGFjZSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbGxlY3RJbXBvcnRlZFNjaGVtYXMoU3RyaW5nIG5hbWVzcGFjZSwgTGlzdCBsaXN0KQotICB7Ci0gICAgRUxpc3QgaW1wb3J0cyA9IGdldEVJbXBvcnRzKCk7Ci0gICAgSXRlcmF0b3IgaW1wb3J0c0l0ZXJhdG9yID0gaW1wb3J0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpbXBvcnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWltcG9ydHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBTdHJpbmcgaW1wb3J0TmFtZXNwYWNlVVJJID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAoV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKGltcG9ydE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlKSkKLSAgICAgIHsKLSAgICAgICAgKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0gICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotCi0gICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCAmJiBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2Uoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoc2NoZW1hKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKiAKLSAgICogIFRoaXMgbWV0aG9kIHdpbGwgdmlzaXQgYW55IGltcG9ydGVkIHdzZGwncyBhbmQgY29sbGVjdCBhbnkgY29udGFpbmVkIGlubGluZWQgc2NoZW1hcyB0aGF0IG1hdGNoCi0gICAqICB0aGUgZ2l2ZW4gbmFtZXNwYWNlLiAKLSAgICogIAotICAgKiAgQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIG1hdGNoCi0gICAqICBAcGFyYW0gbGlzdCBhbGwgaW5saW5lZCBzY2hlbWFzIG9mIGltcG9ydGVkIGRlZmluaXRpb25zIHRoYXQgbWF0Y2ggdGhlIG5hbWVzcGFjZSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbGxlY3RJbmxpbmVkU2NoZW1hc09mSW1wb3J0ZWREZWZpbml0aW9ucyhTdHJpbmcgbmFtZXNwYWNlLCBMaXN0IGxpc3QpCi0gIHsKLSAgICBFTGlzdCBpbXBvcnRzID0gZ2V0RUltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpbXBvcnRzSXRlcmF0b3IgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGltcG9ydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaW1wb3J0c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIERlZmluaXRpb25JbXBsIGltcG9ydGVkRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbCl0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLSAgICAgIGlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW1wb3J0ZWREZWZpbml0aW9uLmNvbGxlY3RJbmxpbmVkU2NoZW1hcyhuYW1lc3BhY2UsIGxpc3QpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9wYWdhdGVzIHRoZSBjaGFuZ2UgaW4gdGhlIHRhcmdldCBuYW1lc3BhY2UgdG8gYWxsIHRoZSB0b3AgbGV2ZWwgbmFtZWQgY29tcG9uZW50cy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXRjaFRhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICBFTGlzdCBtZXNzYWdlcyA9IGdldEVNZXNzYWdlcygpOwotICAgIHBhdGNoVGFyZ2V0TmFtZXNwYWNlKG1lc3NhZ2VzLCBXU0RMQ29uc3RhbnRzLk1FU1NBR0UpOwotCi0gICAgRUxpc3QgcG9ydFR5cGVzID0gZ2V0RVBvcnRUeXBlcygpOwotICAgIHBhdGNoVGFyZ2V0TmFtZXNwYWNlKHBvcnRUeXBlcywgV1NETENvbnN0YW50cy5QT1JUX1RZUEUpOwotCi0gICAgRUxpc3QgYmluZGluZ3MgPSBnZXRFQmluZGluZ3MoKTsKLSAgICBwYXRjaFRhcmdldE5hbWVzcGFjZShiaW5kaW5ncywgV1NETENvbnN0YW50cy5CSU5ESU5HKTsKLQotICAgIEVMaXN0IHNlcnZpY2VzID0gZ2V0RVNlcnZpY2VzKCk7Ci0gICAgcGF0Y2hUYXJnZXROYW1lc3BhY2Uoc2VydmljZXMsIFdTRExDb25zdGFudHMuU0VSVklDRSk7Ci0gIH0KLQotICAvKioKLSAgICogSXRlcmF0ZXMgb3ZlciB0aGUgV1NETCBjb21wb25lbnRzIGluIHRoZSBsaXN0IGFuZCB1cGRhdGVzIHRoZWlyIFFOYW1lLiBVc2VzCi0gICAqIHRoZSBjb21wb25lbnQgdHlwZSB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIG9mIG9iamVjdCBpcyBpbiB0aGUgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBjb21wb25lbnRzTGlzdCBhIGxpc3Qgd2l0aCBXU0RMRWxlbWVudHM6IG1lc3NhZ2VzLCBwb3J0IHR5cGVzLCBiaW5kaW5ncyBvciBwb3J0IHR5cGVzLgotICAgKiBAcGFyYW0gY29tcG9uZW50VHlwZSB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgdHlwZSBhcyBkZWZpbmVkIGluIHtAbGluayBXU0RMQ29uc3RhbnRzfQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhdGNoVGFyZ2V0TmFtZXNwYWNlKEVMaXN0IGNvbXBvbmVudHNMaXN0LCBpbnQgY29tcG9uZW50VHlwZSkKLSAgewotICAgIEl0ZXJhdG9yIGNvbXBvbmVudHNJdGVyYXRvciA9IGNvbXBvbmVudHNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGNvbXBvbmVudHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpY29tcG9uZW50c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIERlZmluaXRpb24gZW5jbG9zaW5nRGVmaW5pdGlvbiA9IHdzZGxFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIGlmIChlbmNsb3NpbmdEZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBlbmNsb3NpbmdEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCi0gICAgICAgIFFOYW1lIGNvbXBvbmVudFFOYW1lID0gZ2V0UU5hbWVGb3JXU0RMRWxlbWVudChjb21wb25lbnRUeXBlLCB3c2RsRWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKGNvbXBvbmVudFFOYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gY29tcG9uZW50UU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgUU5hbWUgbmV3Q29tcG9uZW50UU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBsb2NhbFBhcnQpOwotICAgICAgICAgIHNldFFOYW1lRm9yV1NETEVsZW1lbnQoY29tcG9uZW50VHlwZSwgd3NkbEVsZW1lbnQsIG5ld0NvbXBvbmVudFFOYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBVcGRhdGVzIHRoZSBRTmFtZSBmb3IgdGhlIGdpdmVuIGNvbXBvbmVudCBhbmQgY29tcG9uZW50IHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlIHRoZSBjb21wb25lbnQgdHlwZS4gU2VlIHtAbGluayBXU0RMQ29uc3RhbnRzfS4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50IHRoZSB0YXJnZXQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gcU5hbWUgdGhlIG5ldyBjb21wb25lbnQge0BsaW5rIFFOYW1lfS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRRTmFtZUZvcldTRExFbGVtZW50KGludCB0eXBlLCBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCwgUU5hbWUgcU5hbWUpCi0gIHsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk1FU1NBR0U6Ci0gICAgICAoKE1lc3NhZ2Upd3NkbEVsZW1lbnQpLnNldFFOYW1lKHFOYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuUE9SVF9UWVBFOgotICAgICAgKChQb3J0VHlwZSl3c2RsRWxlbWVudCkuc2V0UU5hbWUocU5hbWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5CSU5ESU5HOgotICAgICAgKChCaW5kaW5nKXdzZGxFbGVtZW50KS5zZXRRTmFtZShxTmFtZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlNFUlZJQ0U6Ci0gICAgICAoKFNlcnZpY2Upd3NkbEVsZW1lbnQpLnNldFFOYW1lKHFOYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19IC8vRGVmaW5pdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE3M2ZmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEuYmVhbnMuQmVhbkluZm87Ci1pbXBvcnQgamF2YS5iZWFucy5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuYmVhbnMuSW50cm9zcGVjdG9yOwotaW1wb3J0IGphdmEuYmVhbnMuUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2lzUmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCNnZXRFbGVtZW50VHlwZSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGV4dGVuZHMgV1NETEVsZW1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1JlcXVpcmVkKCkgPGVtPlJlcXVpcmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1JlcXVpcmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFJFUVVJUkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzUmVxdWlyZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiByZXF1aXJlZCA9IFJFUVVJUkVEX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudFR5cGUoKSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbGVtZW50VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgRUxFTUVOVF9UWVBFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudFR5cGUoKSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbGVtZW50VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBlbGVtZW50VHlwZSA9IEVMRU1FTlRfVFlQRV9FREVGQVVMVDsKLQotICBwcml2YXRlIEhhc2hNYXAgYmVhblByb3BlcnR5RGVzY3JpcHRvcnM7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5FWFRFTlNJQklMSVRZX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUmVxdWlyZWQoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZChib29sZWFuIG5ld1JlcXVpcmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRSZXF1aXJlZCA9IHJlcXVpcmVkOwotICAgIHJlcXVpcmVkID0gbmV3UmVxdWlyZWQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCwgb2xkUmVxdWlyZWQsIHJlcXVpcmVkKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShlQ2xhc3MoKS5nZXRFUGFja2FnZSgpLmdldE5zVVJJKCksIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0KLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRUeXBlKFFOYW1lIG5ld0VsZW1lbnRUeXBlKQotICB7Ci0gICAgUU5hbWUgb2xkRWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZTsKLSAgICBlbGVtZW50VHlwZSA9IG5ld0VsZW1lbnRUeXBlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFLCBvbGRFbGVtZW50VHlwZSwgZWxlbWVudFR5cGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDoKLSAgICAgIHJldHVybiBpc1JlcXVpcmVkKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRToKLSAgICAgIHJldHVybiBnZXRFbGVtZW50VHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ6Ci0gICAgICBzZXRSZXF1aXJlZCgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU6Ci0gICAgICBzZXRFbGVtZW50VHlwZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDoKLSAgICAgIHNldFJlcXVpcmVkKFJFUVVJUkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU6Ci0gICAgICBzZXRFbGVtZW50VHlwZShFTEVNRU5UX1RZUEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ6Ci0gICAgICByZXR1cm4gcmVxdWlyZWQgIT0gUkVRVUlSRURfRURFRkFVTFQ7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOgotICAgICAgcmV0dXJuIEVMRU1FTlRfVFlQRV9FREVGQVVMVCA9PSBudWxsID8gZWxlbWVudFR5cGUgIT0gbnVsbCA6ICFFTEVNRU5UX1RZUEVfRURFRkFVTFQuZXF1YWxzKGVsZW1lbnRUeXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHJlcXVpcmVkOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocmVxdWlyZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZWxlbWVudFR5cGU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlbGVtZW50VHlwZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRSZXF1aXJlZCgpCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRSZXF1aXJlZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oaXNSZXF1aXJlZCgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCNzZXRSZXF1aXJlZChCb29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWQoQm9vbGVhbiByZXF1aXJlZCkKLSAgewotICAgIHNldFJlcXVpcmVkKHJlcXVpcmVkLmJvb2xlYW5WYWx1ZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgYSBnaXZlbiBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBqYXZhLnV0aWwuTWFwIGdldFByb3BlcnR5RGVzY3JpcHRvcnMoamF2YS5sYW5nLkNsYXNzIGNsYXp6KQotICB7Ci0gICAgLy8gTG9va3VwIHByb3BlcnRpZXMgY2FjaGUKLSAgICBNYXAgcHJvcGVydGllcyA9IG51bGw7Ci0gICAgaWYgKGJlYW5Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpCi0gICAgICBiZWFuUHJvcGVydHlEZXNjcmlwdG9ycyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZWxzZQotICAgICAgcHJvcGVydGllcyA9IChNYXApYmVhblByb3BlcnR5RGVzY3JpcHRvcnMuZ2V0KGNsYXp6KTsKLQotICAgIGlmIChwcm9wZXJ0aWVzID09IG51bGwpCi0gICAgewotICAgICAgLy8gSW50cm9zcGVjdCB0aGUgYmVhbgotICAgICAgQXJyYXlMaXN0IGJpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBCZWFuSW5mbyBiaW5mbyA9IEludHJvc3BlY3Rvci5nZXRCZWFuSW5mbyhjbGF6eik7Ci0gICAgICAgIGlmIChiaW5mbyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgYmluZm9zLmFkZChiaW5mbyk7Ci0gICAgICAgICAgQmVhbkluZm9bXSBhYmluZm8gPSBiaW5mby5nZXRBZGRpdGlvbmFsQmVhbkluZm8oKTsKLSAgICAgICAgICBpZiAoYWJpbmZvICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCBhYmluZm8ubGVuZ3RoOyBiKyspCi0gICAgICAgICAgICAgIGJpbmZvcy5hZGQoYWJpbmZvW2JdKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRCRCAtIGhhbmRsZSBleGNlcHRpb24KLSAgICAgIH0KLQotICAgICAgcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGIgPSBiaW5mb3MuaXRlcmF0b3IoKTsgYi5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCZWFuSW5mbyBiaW5mbyA9IChCZWFuSW5mbyliLm5leHQoKTsKLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yW10gcGRlc2MgPSBiaW5mby5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCk7Ci0gICAgICAgIGlmIChwZGVzYyA9PSBudWxsKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IHBkZXNjLmxlbmd0aDsgcCsrKQotICAgICAgICAgIHByb3BlcnRpZXMucHV0KHBkZXNjW3BdLmdldE5hbWUoKSwgcGRlc2NbcF0pOwotICAgICAgfQotICAgICAgYmVhblByb3BlcnR5RGVzY3JpcHRvcnMucHV0KGNsYXp6LCBwcm9wZXJ0aWVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCAmJiAhaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudCgpOiBQcmVzZXJ2aW5nIG9sZCBlbGVtZW50Iik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRFbGVtZW50R2VuKGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHN1cGVyLnJlY29uY2lsZUF0dHJpYnV0ZXMoY2hhbmdlZEVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVJlY29uY2lsaWF0aW9uKHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IEVNRiAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKSAvLyBUaGlzIGlzIGFuIG9sZCBlbGVtZW50LgotICAgIHsKLSAgICAgIG5ld0VsZW1lbnQgPSAoRWxlbWVudClkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsIHRydWUpOwotICAgICAgZWxlbWVudCA9IG5ld0VsZW1lbnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBxdWFsaWZpZXIgPSBkZWZpbml0aW9uLmdldFByZWZpeChuYW1lc3BhY2UpOwotICAgICAgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIChxdWFsaWZpZXIgPT0gbnVsbCA/ICIiIDogcXVhbGlmaWVyICsgIjoiKSArIGdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgZWxlbWVudCA9IG5ld0VsZW1lbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmxlRWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmxlRWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjMDVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRXh0ZW5zaWJsZUVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJsZSBFbGVtZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2libGVFbGVtZW50SW1wbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEV4dGVuc2libGVFbGVtZW50SW1wbCBleHRlbmRzIFdTRExFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEV4dGVuc2libGVFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUV4dGVuc2liaWxpdHlFbGVtZW50czsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFeHRlbnNpYmxlRWxlbWVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkVYVEVOU0lCTEVfRUxFTUVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgaWYgKGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KAotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywKLSAgICAgICAgdGhpcywKLSAgICAgICAgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyk7Ci0gICAgfQotICAgIHJldHVybiBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHJldHVybiBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCkKLSAgewotICAgIGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRFbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5jbGVhcigpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzICE9IG51bGwgJiYgIWVFeHRlbnNpYmlsaXR5RWxlbWVudHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvLwotICAvLwotICAvLwotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgaWYgKCFXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCksIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IHVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gICAgICAgID8gKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChnZXROYW1lc3BhY2UoY2hpbGQpLCBnZXRMb2NhbE5hbWUoY2hpbGQpKQotICAgICAgICA6ICgoV1NETEZhY3RvcnlJbXBsKVdTRExGYWN0b3J5LmVJTlNUQU5DRSkuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRFeHRlbnNpb25BdHRyaWJ1dGUoUU5hbWUgbmFtZSkKLSAgewotICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAotICAgIC8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCi0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25BdHRyaWJ1dGUoUU5hbWUgbmFtZSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi0gICAgLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpCi0gIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICAvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0TmF0aXZlQXR0cmlidXRlTmFtZXMoKQotICB7Ci0gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi0gICAgLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICB7Ci0gICAgLy8gVXNlIGV4dGVuc2lvbiBmYWN0b3JpZXMgYnkgZGVmYXVsdC4KLSAgICByZXR1cm4gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpID09IG51bGwgPyB0cnVlIDogKChEZWZpbml0aW9uSW1wbClnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLmdldFVzZUV4dGVuc2lvbkZhY3RvcmllcygpOwotICB9Ci0KLSAgLyoqCi0gICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSByZW1haW5pbmdNb2RlbE9iamVjdHMgY29udGFpbiBlbGVtZW50cyB0aGF0IGFyZSBub3Qgb25seSBFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVSZWNvbmNpbGlhdGlvbihyZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7Ci0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBtb2RlbE9iamVjdCA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KSAKLSAgICAgIHsKLSAgICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0gLy9FeHRlbnNpYmxlRWxlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9GYXVsdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9GYXVsdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmNGUyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRmF1bHRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBGYXVsdEltcGwgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlSW1wbCBpbXBsZW1lbnRzIEZhdWx0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuRkFVTFQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIHNldEVNZXNzYWdlKChvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKW1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuRkFVTFQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9GYXVsdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbXBvcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW1wb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTdiNTk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbXBvcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExNb2RlbExvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLlhNTFJlYWRlckZhY3Rvcnk7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkltcG9ydDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsI2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSW1wb3J0SW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEltcG9ydAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiByZXNvbHZlZDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWVzcGFjZVVSSSgpIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlVVJJID0gTkFNRVNQQUNFX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvblVSSSA9IExPQ0FUSU9OX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RURlZmluaXRpb24oKSA8ZW0+RURlZmluaXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVEZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZURlZmluaXRpb247Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVTY2hlbWEoKSA8ZW0+RVNjaGVtYTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgZVNjaGVtYTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBJbXBvcnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5JTVBPUlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgbmV3TmFtZXNwYWNlVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICBuYW1lc3BhY2VVUkkgPSBuZXdOYW1lc3BhY2VVUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuSU1QT1JUX19OQU1FU1BBQ0VfVVJJLCBvbGROYW1lc3BhY2VVUkksIG5hbWVzcGFjZVVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIG5ld0xvY2F0aW9uVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZExvY2F0aW9uVVJJID0gbG9jYXRpb25VUkk7Ci0gICAgbG9jYXRpb25VUkkgPSBuZXdMb2NhdGlvblVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5JTVBPUlRfX0xPQ0FUSU9OX1VSSSwgb2xkTG9jYXRpb25VUkksIGxvY2F0aW9uVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldEVEZWZpbml0aW9uKCkKLSAgewotICAgIGlmIChlRGVmaW5pdGlvbiAhPSBudWxsICYmIGVEZWZpbml0aW9uLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVEZWZpbml0aW9uID0gKEludGVybmFsRU9iamVjdCllRGVmaW5pdGlvbjsKLSAgICAgIGVEZWZpbml0aW9uID0gKERlZmluaXRpb24pZVJlc29sdmVQcm94eShvbGRFRGVmaW5pdGlvbik7Ci0gICAgICBpZiAoZURlZmluaXRpb24gIT0gb2xkRURlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuSU1QT1JUX19FREVGSU5JVElPTiwgb2xkRURlZmluaXRpb24sIGVEZWZpbml0aW9uKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlRGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gYmFzaWNHZXRFRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZURlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVEZWZpbml0aW9uKERlZmluaXRpb24gbmV3RURlZmluaXRpb24pCi0gIHsKLSAgICBEZWZpbml0aW9uIG9sZEVEZWZpbml0aW9uID0gZURlZmluaXRpb247Ci0gICAgZURlZmluaXRpb24gPSBuZXdFRGVmaW5pdGlvbjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OLCBvbGRFRGVmaW5pdGlvbiwgZURlZmluaXRpb24pKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBnZXRFU2NoZW1hKCkKLSAgewotICAgIGlmIChlU2NoZW1hICE9IG51bGwgJiYgZVNjaGVtYS5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFU2NoZW1hID0gKEludGVybmFsRU9iamVjdCllU2NoZW1hOwotICAgICAgZVNjaGVtYSA9IChYU0RTY2hlbWEpZVJlc29sdmVQcm94eShvbGRFU2NoZW1hKTsKLSAgICAgIGlmIChlU2NoZW1hICE9IG9sZEVTY2hlbWEpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BLCBvbGRFU2NoZW1hLCBlU2NoZW1hKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlU2NoZW1hOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGJhc2ljR2V0RVNjaGVtYSgpCi0gIHsKLSAgICByZXR1cm4gZVNjaGVtYTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RVNjaGVtYShYU0RTY2hlbWEgbmV3RVNjaGVtYSkKLSAgewotICAgIFhTRFNjaGVtYSBvbGRFU2NoZW1hID0gZVNjaGVtYTsKLSAgICBlU2NoZW1hID0gbmV3RVNjaGVtYTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUEsIG9sZEVTY2hlbWEsIGVTY2hlbWEpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgZ2V0U2NoZW1hKCkKLSAgewotICAgIHJldHVybiBnZXRFU2NoZW1hKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkKLSAgewotICAgIHNldEVTY2hlbWEoc2NoZW1hKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBnZXRMb2NhdGlvblVSSSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFRGVmaW5pdGlvbigpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RURlZmluaXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFU2NoZW1hKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFU2NoZW1hKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OOgotICAgICAgc2V0RURlZmluaXRpb24oKERlZmluaXRpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUE6Ci0gICAgICBzZXRFU2NoZW1hKChYU0RTY2hlbWEpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKE5BTUVTUEFDRV9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKExPQ0FUSU9OX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT046Ci0gICAgICBzZXRFRGVmaW5pdGlvbigoRGVmaW5pdGlvbiludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BOgotICAgICAgc2V0RVNjaGVtYSgoWFNEU2NoZW1hKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID09IG51bGwgPyBuYW1lc3BhY2VVUkkgIT0gbnVsbCA6ICFOQU1FU1BBQ0VfVVJJX0VERUZBVUxULmVxdWFscyhuYW1lc3BhY2VVUkkpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBMT0NBVElPTl9VUklfRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uVVJJICE9IG51bGwgOiAhTE9DQVRJT05fVVJJX0VERUZBVUxULmVxdWFscyhsb2NhdGlvblVSSSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT046Ci0gICAgICByZXR1cm4gZURlZmluaXRpb24gIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BOgotICAgICAgcmV0dXJuIGVTY2hlbWEgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWVzcGFjZVVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWVzcGFjZVVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBsb2NhdGlvblVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSW1wb3J0I2dldERlZmluaXRpb24oKQotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRFRGVmaW5pdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSW1wb3J0I3NldERlZmluaXRpb24oRGVmaW5pdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oamF2YXgud3NkbC5EZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzZXRFRGVmaW5pdGlvbigob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbilkZWZpbml0aW9uKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldE5hbWVzcGFjZVVSSShXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFKSk7Ci0gICAgc2V0TG9jYXRpb25VUkkoV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFdTRExDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFKSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBib29sZWFuIHRvIGZhbHNlIGJlY2F1c2UgdGhlIEltcG9ydCBtYXkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uCi0gICAgLy8gU28gd2UgbmVlZCB3ZSBzaG91bGQgdmlldyB0aGlzIGltcG9ydCBhcyB1bnJlc29sdmVkLgotICAgIHJlc29sdmVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuSU1QT1JUX19OQU1FU1BBQ0VfVVJJKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSwgZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuSU1QT1JUX19MT0NBVElPTl9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5MT0NBVElPTl9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLklNUE9SVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGltcG9ydERlZmluaXRpb25PclNjaGVtYSgpCi0gIHsKLSAgICByZXNvbHZlKGdldE5hbWVzcGFjZVVSSSgpLCBnZXRMb2NhdGlvblVSSSgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlc29sdmUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgaWYgKCFyZXNvbHZlZCkKLSAgICB7Ci0gICAgICAvLyBLQjogYnVnemlsbGEgMTE4MjkzCi0gICAgICAvLyBJZiBhIHVzZXIgY2hhbmdlcyA8d3NkbDppbXBvcnQ+IGZyb20gYSBXU0RMIGZpbGUgdG8gYW4gWE1MIFNjaGVtYSBmaWxlCi0gICAgICAvLyBvciB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgd2Ugc2hvdWxkIHNldCB0aGUgdmFyaWFibGUgZm9yIHRoZSBmaXJzdAotICAgICAgLy8gPHdzZGw6aW1wb3J0PiBzb3VyY2UgdG8gbnVsbC4gSGVyZSBJIGFtIHNpbXBseSBzZXR0aW5nIGJvdGggdmFyaWFibGVzIHRvIG51bGwsCi0gICAgICAvLyB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0LgotICAgICAgZURlZmluaXRpb24gPSBudWxsOwotICAgICAgZVNjaGVtYSA9IG51bGw7Ci0KLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IGRlZmluaXRpb24uZVJlc291cmNlKCk7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSByZXNvdXJjZS5nZXRSZXNvdXJjZVNldCgpOwotICAgICAgICAgIGlmIChyZXNvdXJjZVNldCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSByZXNvbHZlTG9jYXRpb24oZGVmaW5pdGlvbiwgbmFtZXNwYWNlLCBsb2NhdGlvbik7Ci0KLSAgICAgICAgICAgIGlmIChyZXNvbHZlZExvY2F0aW9uID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkocmVzb2x2ZWRMb2NhdGlvbik7Ci0gICAgICAgICAgICBSZXNvdXJjZSByZXNvbHZlZFJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZWRSZXNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gcmVzb3VyY2VTZXQuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0odXJpKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlZFJlc291cmNlID0gZ2V0UmVzb3VyY2UodXJpLCByZXNvdXJjZVNldCk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXNvdXJjZS5sb2FkKGlucHV0U3RyZWFtLCByZXNvdXJjZVNldC5nZXRMb2FkT3B0aW9ucygpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbiBlcnJvciB0byBmYWlsIHRvIHJlc29sdmUuCi0gICAgICAgICAgICAgICAgLy8gSWYgYSByZXNvdXJjZSBpcyBhY3R1YWxseSBjcmVhdGVkLCAKLSAgICAgICAgICAgICAgICAvLyB3aGljaCBoYXBwZW5zIG9ubHkgd2hlbiB3ZSBjYW4gY3JlYXRlIGFuIGlucHV0IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAvLyB0aGVuIGl0J3MgYW4gZXJyb3IgaWYgaXQncyBub3QgYSBnb29kIHdzZGwgb3Igc2NoZW1hCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZURlZmluaXRpb24gPSAoKFdTRExSZXNvdXJjZUltcGwpcmVzb2x2ZWRSZXNvdXJjZSkuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHJlc29sdmVkUmVzb3VyY2UgaW5zdGFuY2VvZiBYU0RSZXNvdXJjZUltcGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlU2NoZW1hID0gKChYU0RSZXNvdXJjZUltcGwpcmVzb2x2ZWRSZXNvdXJjZSkuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZURlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNvbHZlZCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyByZXNvbHZlTG9jYXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgc2NoZW1hTG9jYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBXU0RMTW9kZWxMb2NhdG9yIGxvY2F0b3IgPSAoV1NETE1vZGVsTG9jYXRvcilFY29yZVV0aWwuZ2V0UmVnaXN0ZXJlZEFkYXB0ZXIoZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSwgV1NETE1vZGVsTG9jYXRvci5jbGFzcyk7Ci0gICAgaWYgKGxvY2F0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBsb2NhdG9yLnJlc29sdmVVUkkoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbmFtZXNwYWNlLCBzY2hlbWFMb2NhdGlvbik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUT0RPLi4uIHRoZXJlJ3Mgc29tZSBkZWZhdWx0IHJlc29sdmluZyB3ZSdsbCBuZWVkIHRvIGRvIGhlcmUKLSAgICAgIC8vIHNlZSBYU0RTY2hlbWFEaXJlY3RpdmUKLSAgICAgIFVSSSBiYXNlTG9jYXRpb25VUkkgPSBjcmVhdGVVUkkoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICBVUkkgbG9jYXRpb25VUkkgPSBVUkkuY3JlYXRlVVJJKHNjaGVtYUxvY2F0aW9uKTsKLSAgICAgIHJldHVybiBsb2NhdGlvblVSSS5yZXNvbHZlKGJhc2VMb2NhdGlvblVSSSkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vVE9ETy4uLiBwdXNoIGRvd24gdG8gRU1GCi0gIHByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVVUkkoU3RyaW5nIHVyaVN0cmluZykKLSAgewotICAgIGlmIChoYXNQcm90b2NvbCh1cmlTdHJpbmcpKQotICAgICAgcmV0dXJuIFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gVVJJLmNyZWF0ZUZpbGVVUkkodXJpU3RyaW5nKTsKLSAgfQotCi0gIC8vVE9ETy4uLiBwdXNoIGRvd24gdG8gRU1GICAKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNQcm90b2NvbChTdHJpbmcgdXJpKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAodXJpICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gdXJpLmluZGV4T2YoIjoiKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSAmJiBpbmRleCA+IDIpIC8vIGFzc3VtZSBwcm90b2NvbCB3aXRoIGJlIGxlbmd0aCAzIHNvIHRoYXQgdGhlJ0MnIGluICdDOi8nIGlzIG5vdCBpbnRlcnByZXRlZCBhcyBhIHByb3RvY29sCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRSb290RWxlbWVudE5hbWUoU3RyaW5nIHVyaSkKLSAgewotICAgIFJvb3RFbGVtZW50TmFtZUNvbnRlbnRIYW5kbGVyIGhhbmRsZXIgPSBuZXcgUm9vdEVsZW1lbnROYW1lQ29udGVudEhhbmRsZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBYTUxSZWFkZXIgcmVhZGVyID0gWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIoKTsKLSAgICAgIHJlYWRlci5zZXRDb250ZW50SGFuZGxlcihoYW5kbGVyKTsKLSAgICAgIHJlYWRlci5wYXJzZSh1cmkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRXhwbGljaXRseSBpZ25vcmUgYW55IGV4Y2VwdGlvbnMuCi0gICAgfQotCi0gICAgcmV0dXJuIGhhbmRsZXIucm9vdEVsZW1lbnROYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUm9vdEVsZW1lbnROYW1lQ29udGVudEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHVibGljIFN0cmluZyByb290RWxlbWVudE5hbWU7Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICByb290RWxlbWVudE5hbWUgPSBsb2NhbE5hbWU7Ci0KLSAgICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbiB0byBtYWtlIHRoZSBTQVggUGFyc2VyIHRvIHN0b3AgcGFyc2luZwotICAgICAgdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbigiU0FYUGFyc2VyIGludGVudGlvbmFsbHkgc3RvcHBlZCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgWFNEX1VSSSA9IFVSSS5jcmVhdGVVUkkoIioueHNkIik7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFdTRExfVVJJID0gVVJJLmNyZWF0ZVVSSSgiKi53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByaXZhdGUgc3RhdGljIFJlc291cmNlIGdldFJlc291cmNlKFVSSSB1cmksIFJlc291cmNlU2V0IHJlc291cmNlU2V0KQotICB7Ci0gICAgLy8gQWxsb3cgdGhlIHJlc291cmNlIHNldCB0aGUgZmlyc3QgY2hhbmNlIHRvIGNyZWF0ZSB0aGUgcmVzb3VyY2UgYmFzZWQgb24KLSAgICAvLyB0aGUgcmVnaXN0ZXJlZCByZXNvdXJjZSBmYWN0b3JpZXMuCi0gICAgCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZSh1cmkpOwotICAgIAotICAgIGJvb2xlYW4gaXNXc2RsT3JYc2RSZXNvdXJjZSA9IHJlc291cmNlIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCB8fCByZXNvdXJjZSBpbnN0YW5jZW9mIFhTRFJlc291cmNlSW1wbDsKLSAgICAKLSAgICBpZiAoIWlzV3NkbE9yWHNkUmVzb3VyY2UpCi0gICAgewotICAgICAgLy8gVGhlIFVSSSB3YXMgbm90IG1hcHBlZCB0byBhIFdTREwgb3IgWFNEIHJlc291cmNlLgotICAgICAgLy8gVHJ5IHRvIHBlZWsgaW5zaWRlIHRoZSByZXNvdXJjZSB0byBkZXRlcm1pbmUgaWYgaXRzIGFuIFhTRCBvciBXU0RMIGRvY3VtZW50LiAKLSAgICAgIAotICAgICAgU3RyaW5nIHJvb3RFbGVtZW50TmFtZSA9IGdldFJvb3RFbGVtZW50TmFtZSh1cmkudG9TdHJpbmcoKSk7Ci0gICAgICAKLSAgICAgIGlmIChyb290RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVVJJIHJlc291cmNlVVJJID0gbnVsbDsKLQotICAgICAgICBpZiAoWFNEQ29uc3RhbnRzLlNDSEVNQV9FTEVNRU5UX1RBRy5lcXVhbHMocm9vdEVsZW1lbnROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc291cmNlVVJJID0gWFNEX1VSSTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLkRFRklOSVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKHJvb3RFbGVtZW50TmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXNvdXJjZVVSSSA9IFdTRExfVVJJOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzb3VyY2VVUkkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UocmVzb3VyY2VVUkkpOwotICAgICAgICAgIHJlc291cmNlLnNldFVSSSh1cmkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXNvdXJjZTsKLSAgfQotfSAvL0ltcG9ydEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbnB1dEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbnB1dEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYxMzJkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW5wdXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5wdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEltcGwgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlSW1wbCBpbXBsZW1lbnRzIElucHV0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuSU5QVVQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIHNldEVNZXNzYWdlKChvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKW1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuSU5QVVQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9JbnB1dEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL01lc3NhZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExODQwYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL01lc3NhZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbCNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgTWVzc2FnZQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0cygpIDxlbT5FUGFydHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQYXJ0czsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuTUVTU0FHRTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UU5hbWUoUU5hbWUgbmV3UU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRRTmFtZSA9IHFOYW1lOwotICAgIHFOYW1lID0gbmV3UU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9fUU5BTUUsIG9sZFFOYW1lLCBxTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gdW5kZWZpbmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiBuZXdVbmRlZmluZWQpCi0gIHsKLSAgICBib29sZWFuIG9sZFVuZGVmaW5lZCA9IHVuZGVmaW5lZDsKLSAgICB1bmRlZmluZWQgPSBuZXdVbmRlZmluZWQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9fVU5ERUZJTkVELCBvbGRVbmRlZmluZWQsIHVuZGVmaW5lZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RVBhcnRzKCkKLSAgewotICAgIGlmIChlUGFydHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlUGFydHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoUGFydC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVQYXJ0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBwYXJ0IHRvIHRoaXMgbWVzc2FnZS4KLSAgICogQHBhcmFtIHBhcnQgdGhlIHBhcnQgdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KGphdmF4LndzZGwuUGFydCBwYXJ0KQotICB7Ci0gICAgZ2V0RVBhcnRzKCkuYWRkKChQYXJ0KXBhcnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIHBhcnQuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIHBhcnQuCi0gICAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcGFydCwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIHBhcnQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5QYXJ0IGdldFBhcnQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBQYXJ0IHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWkubmV4dCgpOwotICAgICAgaWYgKG5hbWUuZXF1YWxzKHBhcnQuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcGFydDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCB0aGUgcGFydHMgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0UGFydHMoKQotICB7Ci0gICAgSGFzaE1hcCBoYXNoTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFUGFydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaS5uZXh0KCk7Ci0gICAgICBoYXNoTWFwLnB1dChwYXJ0LmdldE5hbWUoKSwgcGFydCk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoTWFwOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0T3JkZXJlZFBhcnRzKExpc3QgcGFydE9yZGVyKQotICB7Ci0gICAgTGlzdCBvcmRlcmVkUGFydHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKHBhcnRPcmRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIG9yZGVyZWRQYXJ0cy5hZGRBbGwoZ2V0RVBhcnRzKCkpOwotICAgICAgcmV0dXJuIG9yZGVyZWRQYXJ0czsKLSAgICB9Ci0KLSAgICBJdGVyYXRvciBwYXJ0TmFtZUl0ZXJhdG9yID0gcGFydE9yZGVyLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHBhcnROYW1lSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IChTdHJpbmcpcGFydE5hbWVJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBqYXZheC53c2RsLlBhcnQgcGFydCA9IGdldFBhcnQocGFydE5hbWUpOwotICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgb3JkZXJlZFBhcnRzLmFkZChwYXJ0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3JkZXJlZFBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19FUEFSVFM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVQYXJ0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fUU5BTUU6Ci0gICAgICByZXR1cm4gZ2V0UU5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19FUEFSVFM6Ci0gICAgICByZXR1cm4gZ2V0RVBhcnRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fUU5BTUU6Ci0gICAgICBzZXRRTmFtZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoKChCb29sZWFuKW5ld1ZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX0VQQVJUUzoKLSAgICAgIGdldEVQYXJ0cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFUGFydHMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fUU5BTUU6Ci0gICAgICBzZXRRTmFtZShRTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZChVTkRFRklORURfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19FUEFSVFM6Ci0gICAgICBnZXRFUGFydHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1FOQU1FOgotICAgICAgcmV0dXJuIFFOQU1FX0VERUZBVUxUID09IG51bGwgPyBxTmFtZSAhPSBudWxsIDogIVFOQU1FX0VERUZBVUxULmVxdWFscyhxTmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiB1bmRlZmluZWQgIT0gVU5ERUZJTkVEX0VERUZBVUxUOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19FUEFSVFM6Ci0gICAgICByZXR1cm4gZVBhcnRzICE9IG51bGwgJiYgIWVQYXJ0cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChxTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHFOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHVuZGVmaW5lZDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVuZGVmaW5lZCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotICAgIHNldFFOYW1lKHFuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5QQVJUOgotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoKFdTRExQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFdTRExQYWNrYWdlLmVOU19VUkkpKS5nZXRXU0RMRmFjdG9yeSgpLmNyZWF0ZVBhcnQoKTsKLSAgICAgICAgcGFydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHBhcnQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGdldEVQYXJ0cygpLmFkZChwYXJ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0TGlzdChjb21wb25lbnQsIG1vZGVsT2JqZWN0KTsKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9ICAgIAotICB9Ci0gIAotICBwcml2YXRlIExpc3QgZ2V0TGlzdChPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG51bGw7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBhcnQpCi0gICAgewotICAgICAgcmVzdWx0ID0gbWVzc2FnZS5nZXRFUGFydHMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgCi0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfX1FOQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLk1FU1NBR0UpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFBhcnQpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KW9iajsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9ICgoUGFydEltcGwpcGFydCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9NZXNzYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL01lc3NhZ2VSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTWVzc2FnZVJlZmVyZW5jZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ0MDBiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTWVzc2FnZVJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZSBSZWZlcmVuY2U8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZVJlZmVyZW5jZUltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNZXNzYWdlUmVmZXJlbmNlSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1lc3NhZ2VSZWZlcmVuY2UKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU1lc3NhZ2UoKSA8ZW0+RU1lc3NhZ2U8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgZU1lc3NhZ2U7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZVJlZmVyZW5jZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfUkVGRVJFTkNFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgaWYgKGVNZXNzYWdlICE9IG51bGwgJiYgZU1lc3NhZ2UuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU1lc3NhZ2UgPSAoSW50ZXJuYWxFT2JqZWN0KWVNZXNzYWdlOwotICAgICAgZU1lc3NhZ2UgPSAoTWVzc2FnZSllUmVzb2x2ZVByb3h5KG9sZEVNZXNzYWdlKTsKLSAgICAgIGlmIChlTWVzc2FnZSAhPSBvbGRFTWVzc2FnZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGJhc2ljR2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIG5ld0VNZXNzYWdlKQotICB7Ci0gICAgTWVzc2FnZSBvbGRFTWVzc2FnZSA9IGVNZXNzYWdlOwotICAgIGVNZXNzYWdlID0gbmV3RU1lc3NhZ2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFOgotICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRToKLSAgICAgIHJldHVybiBlTWVzc2FnZSAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGlhdGlvbiBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TmFtZShXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VSZWZlcmVuY2UoZVJlZmVyZW5jZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0RU1lc3NhZ2UoKTsKLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFOYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFLCBxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIjIiArIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSwgZWxlbWVudCk7Ci0gICAgICBNZXNzYWdlIG5ld01lc3NhZ2UgPSBtZXNzYWdlUU5hbWUgIT0gbnVsbCA/IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpIDogbnVsbDsKLSAgICAgIGlmIChuZXdNZXNzYWdlICE9IGdldEVNZXNzYWdlKCkpCi0gICAgICB7Ci0gICAgICAgIHNldEVNZXNzYWdlKG5ld01lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vTWVzc2FnZVJlZmVyZW5jZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9OYW1lc3BhY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTmFtZXNwYWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2QzMzI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9OYW1lc3BhY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZXNwYWNlPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwjZ2V0VVJJIDxlbT5VUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbCNnZXRQcmVmaXggPGVtPlByZWZpeDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE5hbWVzcGFjZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWVzcGFjZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVSSSgpIDxlbT5VUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVSSSgpIDxlbT5VUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXJpID0gVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZml4KCkgPGVtPlByZWZpeDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UHJlZml4KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZml4KCkgPGVtPlByZWZpeDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UHJlZml4KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwcmVmaXggPSBQUkVGSVhfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTmFtZXNwYWNlSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuTkFNRVNQQUNFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdXJpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIG5ld1VSSSkKLSAgewotICAgIFN0cmluZyBvbGRVUkkgPSB1cmk7Ci0gICAgdXJpID0gbmV3VVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fVVJJLCBvbGRVUkksIHVyaSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpCi0gIHsKLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIG5ld1ByZWZpeCkKLSAgewotICAgIFN0cmluZyBvbGRQcmVmaXggPSBwcmVmaXg7Ci0gICAgcHJlZml4ID0gbmV3UHJlZml4OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYLCBvbGRQcmVmaXgsIHByZWZpeCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1VSSToKLSAgICAgIHJldHVybiBnZXRVUkkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19QUkVGSVg6Ci0gICAgICByZXR1cm4gZ2V0UHJlZml4KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkk6Ci0gICAgICBzZXRVUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYOgotICAgICAgc2V0UHJlZml4KChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkk6Ci0gICAgICBzZXRVUkkoVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19QUkVGSVg6Ci0gICAgICBzZXRQcmVmaXgoUFJFRklYX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1VSSToKLSAgICAgIHJldHVybiBVUklfRURFRkFVTFQgPT0gbnVsbCA/IHVyaSAhPSBudWxsIDogIVVSSV9FREVGQVVMVC5lcXVhbHModXJpKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19QUkVGSVg6Ci0gICAgICByZXR1cm4gUFJFRklYX0VERUZBVUxUID09IG51bGwgPyBwcmVmaXggIT0gbnVsbCA6ICFQUkVGSVhfRURFRkFVTFQuZXF1YWxzKHByZWZpeCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChVUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1cmkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgcHJlZml4OiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLX0gLy9OYW1lc3BhY2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL09wZXJhdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhOGIzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsI2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsI2dldEVGYXVsdHMgPGVtPkVGYXVsdHM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXRFUGFyYW1ldGVyT3JkZXJpbmcgPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBPcGVyYXRpb25JbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBPcGVyYXRpb25UeXBlIFNUWUxFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvblR5cGUgc3R5bGUgPSBTVFlMRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBVTkRFRklORURfRURFRkFVTFQgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHVuZGVmaW5lZCA9IFVOREVGSU5FRF9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUlucHV0KCkgPGVtPkVJbnB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUlucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IGVJbnB1dDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU91dHB1dCgpIDxlbT5FT3V0cHV0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBlT3V0cHV0OwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRmF1bHRzKCkgPGVtPkVGYXVsdHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUZhdWx0cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlRmF1bHRzOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKSA8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZVBhcmFtZXRlck9yZGVyaW5nOyAvLyBhIGxpc3Qgb2YgcGFydHMgKEVNRikKLQotICBwcml2YXRlIExpc3QgcGFyYW1ldGVyT3JkZXJpbmcgPSBudWxsOyAvLyBhIGxpc3Qgb2YgcGFydCBuYW1lcyAoV1NETDRKKQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvbkltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLk9QRVJBVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25UeXBlIGdldFN0eWxlKCkKLSAgewotICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgc3R5bGUgPSBkZWR1Y2VPcGVyYXRpb25UeXBlKGdldEVsZW1lbnQoKSk7Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2Ygc3R5bGUgaXMgdXBkYXRlZCB3aGVuCi0gICAgLy8gMSkgdGhlIFdTREwgaXMgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZSwKLSAgICAvLyAyKSB0aGUgc2V0U3R5bGUoKSBtZXRob2QgaXMgY2FsbGVkLCBhbmQKLSAgICAvLyAzKSB0aGUgY2hpbGRyZW4gb2YgdGhlIE9wZXJhdGlvbiAoRE9NKSBlbGVtZW50IGFyZSBtYW5pcHVsYXRlZC4KLSAgICByZXR1cm4gc3R5bGU7Ci0gIH0KLQotICBwcml2YXRlIE9wZXJhdGlvblR5cGUgZGVkdWNlT3BlcmF0aW9uVHlwZShFbGVtZW50IG9wZXJhdGlvbikKLSAgewotICAgIGlmIChvcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgaW50IHN0YXRlID0gMDsKLSAgICBpbnQgbWVzc2FnZVJlZlR5cGUgPSAtMTsKLSAgICBOb2RlIGNoaWxkID0gbnVsbDsKLSAgICBOb2RlTGlzdCBjaGlsZHJlbiA9IG9wZXJhdGlvbi5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgY2hpbGQgPSBjaGlsZHJlbi5pdGVtKGkpOwotICAgICAgaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBTdHJpbmcgbnNVUkkgPSBjaGlsZC5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgaWYgKCFXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMobnNVUkkpKQotICAgICAgewotICAgICAgICAvLyBTa2lwIG92ZXIgYW55IG5vbi1XU0RMIGVsZW1lbnRzLiBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCBuZXcgV1NETCAKLSAgICAgICAgLy8gdXNlIGNhc2VzIHdlIGhhdmUgdG8gdG9sZXJhdGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhdCB0aGUgb3BlcmF0aW9uIGxldmVsLgotCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBtZXNzYWdlUmVmVHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpY2hpbGQpOwotCi0gICAgICBzd2l0Y2ggKHN0YXRlKQotICAgICAgewotICAgICAgICBjYXNlIDA6IC8vIGluaXRpYWwgc3RhdGUgICAgIAotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5JTlBVVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKFdTRExDb25zdGFudHMuT1VUUFVUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMjsKLSAgICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOiAvLyBvbmUtd2F5IG9yIHJlcXVlc3QtcmVzcG9uc2UKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuRkFVTFQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAxMTsgLy8gb25lLXdheQotICAgICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLk9VVFBVVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDM7IC8vIHJlcXVlc3QtcmVzcG9uc2UKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxMTogLy8gb25lLXdheQotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5GQVVMVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDExOyAvLyBvbmUtd2F5Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjogLy8gc29saWNpdC1yZXNwb25zZSBvciBub3RpZmljYXRpb24KLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuSU5QVVQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSA0OyAvLyBzb2xpY2l0LXJlc3BvbnNlCi0gICAgICAgIGVsc2UgaWYgKFdTRExDb25zdGFudHMuRkFVTFQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAyMTsgLy8gbm90aWZpY2F0aW9uCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjE6IC8vIG5vdGlmaWNhdGlvbgotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5GQVVMVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDIxOyAvLyBub3RpZmljYXRpb24KLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOiAvLyByZXF1ZXN0LXJlc3BvbnNlIAotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5GQVVMVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDogLy8gc29saWNpdC1yZXNwb25zZQotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5GQVVMVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IC8vIGNhbm5vdCBoYXBwZW4gKC0xKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBPcGVyYXRpb25UeXBlIG9wVHlwZSA9IG51bGw7Ci0gIHN3aXRjaCAoc3RhdGUpCi0gIHsKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAxMToKLSAgICBvcFR5cGUgPSBPcGVyYXRpb25UeXBlLk9ORV9XQVk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAyMToKLSAgICBvcFR5cGUgPSBPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICBvcFR5cGUgPSBPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgb3BUeXBlID0gT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogLy8gaW52YWxpZAotICAgIGJyZWFrOwotfQotcmV0dXJuIG9wVHlwZTsKLX0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0eWxlKE9wZXJhdGlvblR5cGUgbmV3U3R5bGUpCi0gIHsKLSAgICBPcGVyYXRpb25UeXBlIG9sZFN0eWxlID0gc3R5bGU7Ci0gICAgc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1NUWUxFLCBvbGRTdHlsZSwgc3R5bGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gdW5kZWZpbmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiBuZXdVbmRlZmluZWQpCi0gIHsKLSAgICBib29sZWFuIG9sZFVuZGVmaW5lZCA9IHVuZGVmaW5lZDsKLSAgICB1bmRlZmluZWQgPSBuZXdVbmRlZmluZWQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19VTkRFRklORUQsIG9sZFVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRFSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGVJbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RUlucHV0KElucHV0IG5ld0VJbnB1dCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIElucHV0IG9sZEVJbnB1dCA9IGVJbnB1dDsKLSAgICBlSW5wdXQgPSBuZXdFSW5wdXQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVCwgb2xkRUlucHV0LCBuZXdFSW5wdXQpOwotICAgICAgaWYgKG1zZ3MgPT0gbnVsbCkKLSAgICAgICAgbXNncyA9IG5vdGlmaWNhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1zZ3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVJbnB1dChJbnB1dCBuZXdFSW5wdXQpCi0gIHsKLSAgICBpZiAobmV3RUlucHV0ICE9IGVJbnB1dCkKLSAgICB7Ci0gICAgICBOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLSAgICAgIGlmIChlSW5wdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWVJbnB1dCkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIGlmIChuZXdFSW5wdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0VJbnB1dCkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVJbnB1dChuZXdFSW5wdXQsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVULCBuZXdFSW5wdXQsIG5ld0VJbnB1dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGdldEVPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGVPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVPdXRwdXQoT3V0cHV0IG5ld0VPdXRwdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBPdXRwdXQgb2xkRU91dHB1dCA9IGVPdXRwdXQ7Ci0gICAgZU91dHB1dCA9IG5ld0VPdXRwdXQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQsIG9sZEVPdXRwdXQsIG5ld0VPdXRwdXQpOwotICAgICAgaWYgKG1zZ3MgPT0gbnVsbCkKLSAgICAgICAgbXNncyA9IG5vdGlmaWNhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1zZ3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVPdXRwdXQoT3V0cHV0IG5ld0VPdXRwdXQpCi0gIHsKLSAgICBpZiAobmV3RU91dHB1dCAhPSBlT3V0cHV0KQotICAgIHsKLSAgICAgIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOwotICAgICAgaWYgKGVPdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWVPdXRwdXQpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQsIG51bGwsIG1zZ3MpOwotICAgICAgaWYgKG5ld0VPdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0VPdXRwdXQpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQsIG51bGwsIG1zZ3MpOwotICAgICAgbXNncyA9IGJhc2ljU2V0RU91dHB1dChuZXdFT3V0cHV0LCBtc2dzKTsKLSAgICAgIGlmIChtc2dzICE9IG51bGwpCi0gICAgICAgIG1zZ3MuZGlzcGF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQsIG5ld0VPdXRwdXQsIG5ld0VPdXRwdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVGYXVsdHMoKQotICB7Ci0gICAgaWYgKGVGYXVsdHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlRmF1bHRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KEZhdWx0LmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFMpOwotICAgIH0KLSAgICByZXR1cm4gZUZhdWx0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQYXJhbWV0ZXJPcmRlcmluZygpCi0gIHsKLSAgICBpZiAoZVBhcmFtZXRlck9yZGVyaW5nID09IG51bGwpCi0gICAgewotICAgICAgZVBhcmFtZXRlck9yZGVyaW5nID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdChQYXJ0LmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkcpOwotICAgIH0KLSAgICByZXR1cm4gZVBhcmFtZXRlck9yZGVyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhIGZhdWx0IG1lc3NhZ2UgdGhhdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAqIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIGZhdWx0IHRoZSBuZXcgZmF1bHQgbWVzc2FnZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEZhdWx0KGphdmF4LndzZGwuRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBnZXRFRmF1bHRzKCkuYWRkKChGYXVsdClmYXVsdCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgZmF1bHQgbWVzc2FnZS4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBmYXVsdCBtZXNzYWdlLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgbWVzc2FnZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkZhdWx0IGdldEZhdWx0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgRmF1bHQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KWkubmV4dCgpOwotICAgICAgaWYgKG5hbWUuZXF1YWxzKGZhdWx0LmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGZhdWx0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBmYXVsdCBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gbmFtZXMgb2YgZmF1bHQgbWVzc2FnZXMKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldEZhdWx0cygpCi0gIHsKLSAgICBIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBoYXNoTWFwLnB1dChmYXVsdC5nZXROYW1lKCksIGZhdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hNYXA7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgUGFydCBuYW1lcy4gTm90ZSB0aGF0IAotICAgKiBnZXRQYXJhbWV0ZXJFT3JkZXJpbmcoKSByZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBQYXJ0cy4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRQYXJhbWV0ZXJPcmRlcmluZygpCi0gIHsKLSAgICBwYXJhbWV0ZXJPcmRlcmluZyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWkubmV4dCgpOwotICAgICAgICBwYXJhbWV0ZXJPcmRlcmluZy5hZGQocGFydC5nZXROYW1lKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBUQkQgLSBoYW5kbGUgZXhjZXB0aW9uCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJhbWV0ZXJPcmRlcmluZy5pc0VtcHR5KCkgPyBudWxsIDogcGFyYW1ldGVyT3JkZXJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJPcmRlcmluZyhMaXN0IHBhcmFtZXRlck9yZGVyKQotICB7Ci0gICAgcGFyYW1ldGVyT3JkZXJpbmcgPSBwYXJhbWV0ZXJPcmRlcjsKLSAgICBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5jbGVhcigpOwotICAgIGlmIChwYXJhbWV0ZXJPcmRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHBhcmFtZXRlck9yZGVyLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgLy8gS0I6IFdlIHNob3VsZCBiZSByZXNvbHZpbmcgcGFydHMgYmFzZWQgb24gdGhlIHBhcnQgbmFtZXMgaW4gcGFyYW1ldGVyT3JkZXIuCi0gICAgICAgIFBhcnQgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgICAgIHBhcnQuc2V0TmFtZSgoU3RyaW5nKWkubmV4dCgpKTsKLSAgICAgICAgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkuYWRkKHBhcnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLklucHV0IGdldElucHV0KCkKLSAgewotICAgIHJldHVybiBnZXRFSW5wdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElucHV0KGphdmF4LndzZGwuSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBzZXRFSW5wdXQoKElucHV0KWlucHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk91dHB1dCBnZXRPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVPdXRwdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE91dHB1dChqYXZheC53c2RsLk91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBzZXRFT3V0cHV0KChPdXRwdXQpb3V0cHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQ6Ci0gICAgICByZXR1cm4gYmFzaWNTZXRFSW5wdXQobnVsbCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVDoKLSAgICAgIHJldHVybiBiYXNpY1NldEVPdXRwdXQobnVsbCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUZhdWx0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19TVFlMRToKLSAgICAgIHJldHVybiBnZXRTdHlsZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQ6Ci0gICAgICByZXR1cm4gZ2V0RUlucHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVDoKLSAgICAgIHJldHVybiBnZXRFT3V0cHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUzoKLSAgICAgIHJldHVybiBnZXRFRmF1bHRzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzoKLSAgICAgIHJldHVybiBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1NUWUxFOgotICAgICAgc2V0U3R5bGUoKE9wZXJhdGlvblR5cGUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX05BTUU6Ci0gICAgICBzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZCgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQ6Ci0gICAgICBzZXRFSW5wdXQoKElucHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVUOgotICAgICAgc2V0RU91dHB1dCgoT3V0cHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRkFVTFRTOgotICAgICAgZ2V0RUZhdWx0cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFRmF1bHRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HOgotICAgICAgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkuY2xlYXIoKTsKLSAgICAgIGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1NUWUxFOgotICAgICAgc2V0U3R5bGUoU1RZTEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZChVTkRFRklORURfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVDoKLSAgICAgIHNldEVJbnB1dCgoSW5wdXQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVDoKLSAgICAgIHNldEVPdXRwdXQoKE91dHB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRkFVTFRTOgotICAgICAgZ2V0RUZhdWx0cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzoKLSAgICAgIGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19TVFlMRToKLSAgICAgIHJldHVybiBTVFlMRV9FREVGQVVMVCA9PSBudWxsID8gc3R5bGUgIT0gbnVsbCA6ICFTVFlMRV9FREVGQVVMVC5lcXVhbHMoc3R5bGUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX05BTUU6Ci0gICAgICByZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiB1bmRlZmluZWQgIT0gVU5ERUZJTkVEX0VERUZBVUxUOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVDoKLSAgICAgIHJldHVybiBlSW5wdXQgIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVUOgotICAgICAgcmV0dXJuIGVPdXRwdXQgIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRkFVTFRTOgotICAgICAgcmV0dXJuIGVGYXVsdHMgIT0gbnVsbCAmJiAhZUZhdWx0cy5pc0VtcHR5KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzoKLSAgICAgIHJldHVybiBlUGFyYW1ldGVyT3JkZXJpbmcgIT0gbnVsbCAmJiAhZVBhcmFtZXRlck9yZGVyaW5nLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHN0eWxlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoc3R5bGUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgdW5kZWZpbmVkOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodW5kZWZpbmVkKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldE5hbWUobmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlBBUkFNRVRFUl9PUkRFUl9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJhbWV0ZXJPcmRlciA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlBBUkFNRVRFUl9PUkRFUl9BVFRSSUJVVEUpOwotICAgICAgaWYgKHBhcmFtZXRlck9yZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIGFycmF5ID0gcGFyYW1ldGVyT3JkZXIuc3BsaXQoIiAiKTsKLSAgICAgICAgTGlzdCBsID0gQXJyYXlzLmFzTGlzdChhcnJheSk7Ci0gICAgICAgIHNldFBhcmFtZXRlck9yZGVyaW5nKGwpOwotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHZvaWQgZWxlbWVudENoYW5nZWQoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHN0eWxlID0gZGVkdWNlT3BlcmF0aW9uVHlwZShjaGFuZ2VkRWxlbWVudCk7Ci0gICAgc3VwZXIuZWxlbWVudENoYW5nZWQoY2hhbmdlZEVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQotICAgIHN3aXRjaCAoV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShjaGlsZCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLklOUFVUOgotICAgICAgewotICAgICAgICBJbnB1dCBpbnB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAgICAgICBpbnB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBpbnB1dC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgc2V0SW5wdXQoaW5wdXQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5PVVRQVVQ6Ci0gICAgICB7Ci0gICAgICAgIE91dHB1dCBvdXRwdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3V0cHV0KCk7Ci0gICAgICAgIG91dHB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBvdXRwdXQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIHNldE91dHB1dChvdXRwdXQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5GQVVMVDoKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZmF1bHQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmF1bHQoKTsKLSAgICAgICAgZmF1bHQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgZmF1bHQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZEZhdWx0KGZhdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIElucHV0KQotICAgIHsKLSAgICAgIG9wZXJhdGlvbi5zZXRFSW5wdXQobnVsbCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgT3V0cHV0KQotICAgIHsKLSAgICAgIG9wZXJhdGlvbi5zZXRFT3V0cHV0KG51bGwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEZhdWx0KQotICAgIHsKLSAgICAgIG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkgCi0gICAgewotICAgICAgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWNvbXBvbmVudDsKLQotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwotICAgIH0KLQotICAgIGlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0gICAgfQotCi0gICAgbGlzdC5hZGRBbGwob3BlcmF0aW9uLmdldEVGYXVsdHMoKSk7Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5PUEVSQVRJT05fX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLk9QRVJBVElPTl9fU1RZTEUpCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvblR5cGUgdGFyZ2V0VHlwZSA9IGdldFN0eWxlKCk7Ci0gICAgICAgIE9wZXJhdGlvblR5cGUgY3VycmVudFR5cGUgPSBkZWR1Y2VPcGVyYXRpb25UeXBlKHRoZUVsZW1lbnQpOwotICAgICAgICBpZiAodGFyZ2V0VHlwZS5lcXVhbHMoY3VycmVudFR5cGUpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZWxzZSBpZiAoKHRhcmdldFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkgfHwgdGFyZ2V0VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSkKLSAgICAgICAgICAmJiAoY3VycmVudFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkgfHwgY3VycmVudFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuU09MSUNJVF9SRVNQT05TRSkpKQotICAgICAgICAgIHJlb3JkZXJDaGlsZHJlbigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3R5bGUgPSBkZWR1Y2VPcGVyYXRpb25UeXBlKHRoZUVsZW1lbnQpOyAvLyBzd2l0Y2ggYmFjay4gbm8gc3VwcG9ydCBmb3IgdGhlIG90aGVyIHR5cGVzCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkcpCi0gICAgICB7Ci0gICAgICAgIC8vIEJ1aWxkIHVwIGEgc3RyaW5nIG9mIGNvbmNhdGVuYXRlZCBwYXJ0IG5hbWVzIChwYXJhbWV0ZXJPcmRlcikgZnJvbSBlUGFyYW1ldGVyT3JkZXJpbmcuCi0KLSAgICAgICAgSXRlcmF0b3IgcGFydHMgPSBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5pdGVyYXRvcigpOwotICAgICAgICBQYXJ0IHBhcnQgPSBudWxsOwotICAgICAgICBTdHJpbmcgcGFydE5hbWVzID0gIiI7Ci0gICAgICAgIHdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0ID0gKFBhcnQpcGFydHMubmV4dCgpOwotICAgICAgICAgIHBhcnROYW1lcyA9IHBhcnROYW1lcyArIHBhcnQuZ2V0TmFtZSgpICsgIiAiOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChwYXJ0TmFtZXMgPSBwYXJ0TmFtZXMudHJpbSgpKS5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZWxlbWVudCdzIGF0dHJ1YnV0ZQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFLCBwYXJ0TmFtZXMpOwotICAgICAgfQotICAgIH0KLSAgICAvLwotICB9Ci0KLSAgLy8gU3dpdGNoIDxpbnB1dD4gYW5kIDxvdXRwdXQ+Ci0gIHByaXZhdGUgdm9pZCByZW9yZGVyQ2hpbGRyZW4oKQotICB7Ci0gICAgLy8gRmluZCBvdXQgdGhlIHBvc2l0aW9ucyBvZiA8aW5wdXQ+IGFuZCA8b3V0cHV0PgotICAgIE5vZGUgaW5wdXQgPSBudWxsOwotICAgIE5vZGUgb3V0cHV0ID0gbnVsbDsKLSAgICBOb2RlIHJlZmVyZW5jZSA9IG51bGw7Ci0gICAgZm9yIChOb2RlIGN1cnJlbnQgPSBnZXRFbGVtZW50KCkuZ2V0Rmlyc3RDaGlsZCgpOyBjdXJyZW50ICE9IG51bGw7IGN1cnJlbnQgPSBjdXJyZW50LmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgaWYgKGN1cnJlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuSU5QVVQgPT0gV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZSgoRWxlbWVudCljdXJyZW50KSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0ID0gY3VycmVudDsKLSAgICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gY3MuLiBmb3Igc2FmZXR5IHVzZSBjdXJyZW50LmdldE5leHRTaWJsaW5nKCkgaW5zdGVhZCBvZiBub2RlTGlzdC5pdGVtKGkrMSkgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlZmVyZW5jZSA9IGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5PVVRQVVQgPT0gV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZSgoRWxlbWVudCljdXJyZW50KSkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dCA9IGN1cnJlbnQ7Ci0gICAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gY3MuLiBmb3Igc2FmZXR5IHVzZSBjdXJyZW50LmdldE5leHRTaWJsaW5nKCkgaW5zdGVhZCBvZiBub2RlTGlzdC5pdGVtKGkrMSkgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlZmVyZW5jZSA9IGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IC8vIGVuZCBmb3IKLQotICAgIGlmIChpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcGFyZW50ID0gZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGdldFN0eWxlKCkuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkpCi0gICAgICB7Ci0gICAgICAgIC8vIGN1cnJlbnQgb3JkZXI6IDxvdXRwdXQ+IDxpbnB1dD4KLSAgICAgICAgc3dpdGNoQ2hpbGRyZW4ocGFyZW50LCBvdXRwdXQsIGlucHV0LCByZWZlcmVuY2UpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2V0U3R5bGUoKS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gY3VycmVudCBvcmRlcjogPGlucHV0PiA8b3V0cHV0PgotICAgICAgICBzd2l0Y2hDaGlsZHJlbihwYXJlbnQsIGlucHV0LCBvdXRwdXQsIHJlZmVyZW5jZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN3aXRjaENoaWxkcmVuKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkMSwgTm9kZSBjaGlsZDIsIE5vZGUgbmV4dE9mQ2hpbGQyKQotICB7Ci0gICAgLy8gY3VycmVudCBub2RlIHNlcXVlbmNlOiA8Y2hpbGQxPiA8Y2hpbGQyPiA8bmV4dE9mQ2hpbGQyPgotICAgIG5pY2VSZW1vdmVDaGlsZChwYXJlbnQsIGNoaWxkMik7Ci0gICAgbmljZUluc2VydEJlZm9yZShwYXJlbnQsIGNoaWxkMiwgY2hpbGQxKTsKLSAgICBuaWNlUmVtb3ZlQ2hpbGQocGFyZW50LCBjaGlsZDEpOwotICAgIG5pY2VJbnNlcnRCZWZvcmUocGFyZW50LCBjaGlsZDEsIG5leHRPZkNoaWxkMik7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5PUEVSQVRJT04pOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJbnB1dCBpbnB1dCA9IGdldEVJbnB1dCgpOwotICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKElucHV0SW1wbClpbnB1dCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgT3V0cHV0IG91dHB1dCA9IGdldEVPdXRwdXQoKTsKLSAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoT3V0cHV0SW1wbClvdXRwdXQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChGYXVsdEltcGwpZmF1bHQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLX0gLy9PcGVyYXRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3V0cHV0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL091dHB1dEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhYzgxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3V0cHV0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PdXRwdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBPdXRwdXRJbXBsIGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZUltcGwgaW1wbGVtZW50cyBPdXRwdXQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgT3V0cHV0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuT1VUUFVUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRFTWVzc2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBzZXRFTWVzc2FnZSgob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSltZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLk9VVFBVVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL091dHB1dEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9QYXJ0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BhcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNTFkNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BhcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXRFbGVtZW50TmFtZSA8ZW0+RWxlbWVudCBOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsI2dldFR5cGVOYW1lIDxlbT5UeXBlIE5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0VHlwZURlZmluaXRpb24gPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXRFbGVtZW50RGVjbGFyYXRpb24gPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUGFydEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBQYXJ0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50TmFtZSgpIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBRTmFtZSBFTEVNRU5UX05BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50TmFtZSgpIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIGVsZW1lbnROYW1lID0gRUxFTUVOVF9OQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZU5hbWUoKSA8ZW0+VHlwZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgVFlQRV9OQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZU5hbWUoKSA8ZW0+VHlwZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSB0eXBlTmFtZSA9IFRZUEVfTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZURlZmluaXRpb24oKSA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlRGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbjsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnREZWNsYXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTWVzc2FnZSgpIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBlTWVzc2FnZTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfUEFSVF9FWFRFTlNJT05TID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvcGFydC1leHRlbnNpb25zLyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NRVNTQUdFID0gIm1lc3NhZ2UiOwotCi0gIHByaXZhdGUgTWFwIGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBuZXcgRXh0ZW5zaW9uQXR0cmlidXRlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QQVJUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnROYW1lKFFOYW1lIG5ld0VsZW1lbnROYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkRWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTsKLSAgICBlbGVtZW50TmFtZSA9IG5ld0VsZW1lbnROYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfTkFNRSwgb2xkRWxlbWVudE5hbWUsIGVsZW1lbnROYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVOYW1lKFFOYW1lIG5ld1R5cGVOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkVHlwZU5hbWUgPSB0eXBlTmFtZTsKLSAgICB0eXBlTmFtZSA9IG5ld1R5cGVOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRSwgb2xkVHlwZU5hbWUsIHR5cGVOYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpCi0gIHsKLSAgICBpZiAodHlwZURlZmluaXRpb24gIT0gbnVsbCAmJiB0eXBlRGVmaW5pdGlvbi5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRUeXBlRGVmaW5pdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpdHlwZURlZmluaXRpb247Ci0gICAgICB0eXBlRGVmaW5pdGlvbiA9IChYU0RUeXBlRGVmaW5pdGlvbillUmVzb2x2ZVByb3h5KG9sZFR5cGVEZWZpbml0aW9uKTsKLSAgICAgIGlmICh0eXBlRGVmaW5pdGlvbiAhPSBvbGRUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT04sIG9sZFR5cGVEZWZpbml0aW9uLCB0eXBlRGVmaW5pdGlvbikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHlwZURlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBiYXNpY0dldFR5cGVEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiB0eXBlRGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gbmV3VHlwZURlZmluaXRpb24pCi0gIHsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBvbGRUeXBlRGVmaW5pdGlvbiA9IHR5cGVEZWZpbml0aW9uOwotICAgIHR5cGVEZWZpbml0aW9uID0gbmV3VHlwZURlZmluaXRpb247Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OLCBvbGRUeXBlRGVmaW5pdGlvbiwgdHlwZURlZmluaXRpb24pKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRFbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsICYmIGVsZW1lbnREZWNsYXJhdGlvbi5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFbGVtZW50RGVjbGFyYXRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KWVsZW1lbnREZWNsYXJhdGlvbjsKLSAgICAgIGVsZW1lbnREZWNsYXJhdGlvbiA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pZVJlc29sdmVQcm94eShvbGRFbGVtZW50RGVjbGFyYXRpb24pOwotICAgICAgaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBvbGRFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgICBOb3RpZmljYXRpb24uUkVTT0xWRSwKLSAgICAgICAgICAgIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04sCi0gICAgICAgICAgICBvbGRFbGVtZW50RGVjbGFyYXRpb24sCi0gICAgICAgICAgICBlbGVtZW50RGVjbGFyYXRpb24pKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnREZWNsYXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBiYXNpY0dldEVsZW1lbnREZWNsYXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudERlY2xhcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIG5ld0VsZW1lbnREZWNsYXJhdGlvbikKLSAgewotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBvbGRFbGVtZW50RGVjbGFyYXRpb24gPSBlbGVtZW50RGVjbGFyYXRpb247Ci0gICAgZWxlbWVudERlY2xhcmF0aW9uID0gbmV3RWxlbWVudERlY2xhcmF0aW9uOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OLAotICAgICAgICBvbGRFbGVtZW50RGVjbGFyYXRpb24sCi0gICAgICAgIGVsZW1lbnREZWNsYXJhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBnZXRFTWVzc2FnZSgpCi0gIHsKLSAgICBpZiAoZU1lc3NhZ2UgIT0gbnVsbCAmJiBlTWVzc2FnZS5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFTWVzc2FnZSA9IChJbnRlcm5hbEVPYmplY3QpZU1lc3NhZ2U7Ci0gICAgICBlTWVzc2FnZSA9IChNZXNzYWdlKWVSZXNvbHZlUHJveHkob2xkRU1lc3NhZ2UpOwotICAgICAgaWYgKGVNZXNzYWdlICE9IG9sZEVNZXNzYWdlKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBiYXNpY0dldEVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU1lc3NhZ2UoTWVzc2FnZSBuZXdFTWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2Ugb2xkRU1lc3NhZ2UgPSBlTWVzc2FnZTsKLSAgICBlTWVzc2FnZSA9IG5ld0VNZXNzYWdlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvbkF0dHJpYnV0ZShRTmFtZSBuYW1lLCBRTmFtZSB2YWx1ZSkKLSAgewotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBuYW1lLmdldExvY2FsUGFydCgpOwotICAgIGlmIChsb2NhbE5hbWUgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5yZW1vdmUobmFtZSk7Ci0gICAgZWxzZQotICAgICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5wdXQobmFtZSwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEl0ZXJhdG9yIGdldEV4dGVuc2lvbkF0dHJpYnV0ZU5hbWVzKCkKLSAgewotICAgIE1hcCBtYXAgPSBuZXcgSGFzaE1hcChleHRlbnNpb25BdHRyaWJ1dGVzKTsKLQotICAgIC8vIEFkanVzdCBtZXNzYWdlTmFtZSBhdHRyaWJ1dGUKLSAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IGdldE1lc3NhZ2UoKSAhPSBudWxsID8gZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkgOiBudWxsOwotICAgIGlmIChtZXNzYWdlTmFtZSAhPSBudWxsKQotICAgICAgbWFwLnB1dChuZXcgUU5hbWUoTlNfVVJJX1BBUlRfRVhURU5TSU9OUywgQVRUUl9NRVNTQUdFKSwgbWVzc2FnZU5hbWUpOwotICAgIGVsc2UKLSAgICAgIG1hcC5yZW1vdmUobmV3IFFOYW1lKE5TX1VSSV9QQVJUX0VYVEVOU0lPTlMsIEFUVFJfTUVTU0FHRSkpOwotCi0gICAgcmV0dXJuIG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRFeHRlbnNpb25BdHRyaWJ1dGUoUU5hbWUgbmFtZSkKLSAgewotICAgIGlmIChuYW1lLmVxdWFscyhuZXcgUU5hbWUoTlNfVVJJX1BBUlRfRVhURU5TSU9OUywgQVRUUl9NRVNTQUdFKSkpCi0gICAgICByZXR1cm4gZ2V0TWVzc2FnZSgpICE9IG51bGwgPyBnZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSA6IG51bGw7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIChRTmFtZSlleHRlbnNpb25BdHRyaWJ1dGVzLmdldChuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfTkFNRToKLSAgICAgIHJldHVybiBnZXRFbGVtZW50TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0VHlwZU5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRU1FU1NBR0U6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX05BTUU6Ci0gICAgICBzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX05BTUU6Ci0gICAgICBzZXRFbGVtZW50TmFtZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX05BTUU6Ci0gICAgICBzZXRUeXBlTmFtZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT046Ci0gICAgICBzZXRUeXBlRGVmaW5pdGlvbigoWFNEVHlwZURlZmluaXRpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OOgotICAgICAgc2V0RWxlbWVudERlY2xhcmF0aW9uKChYU0RFbGVtZW50RGVjbGFyYXRpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTUVTU0FHRToKLSAgICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX05BTUU6Ci0gICAgICBzZXRFbGVtZW50TmFtZShFTEVNRU5UX05BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX05BTUU6Ci0gICAgICBzZXRUeXBlTmFtZShUWVBFX05BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT046Ci0gICAgICBzZXRUeXBlRGVmaW5pdGlvbigoWFNEVHlwZURlZmluaXRpb24pbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT046Ci0gICAgICBzZXRFbGVtZW50RGVjbGFyYXRpb24oKFhTREVsZW1lbnREZWNsYXJhdGlvbiludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FOgotICAgICAgcmV0dXJuIEVMRU1FTlRfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gZWxlbWVudE5hbWUgIT0gbnVsbCA6ICFFTEVNRU5UX05BTUVfRURFRkFVTFQuZXF1YWxzKGVsZW1lbnROYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9OQU1FOgotICAgICAgcmV0dXJuIFRZUEVfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gdHlwZU5hbWUgIT0gbnVsbCA6ICFUWVBFX05BTUVfRURFRkFVTFQuZXF1YWxzKHR5cGVOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OOgotICAgICAgcmV0dXJuIHR5cGVEZWZpbml0aW9uICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT046Ci0gICAgICByZXR1cm4gZWxlbWVudERlY2xhcmF0aW9uICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFOgotICAgICAgcmV0dXJuIGVNZXNzYWdlICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSltZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RU1lc3NhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChuYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBlbGVtZW50TmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnROYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHR5cGVOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodHlwZU5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgTWFwIGdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuc2lvbkF0dHJpYnV0ZXM7Ci0gIH0KLQotICBjbGFzcyBFeHRlbnNpb25BdHRyaWJ1dGVNYXAgZXh0ZW5kcyBIYXNoTWFwCi0gIHsKLSAgICAvKioKLSAgICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBFeHRlbnNpb25BdHRyaWJ1dGVNYXAoKQotICAgIHsKLSAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBwdXQoT2JqZWN0IGtleSwgT2JqZWN0IHZhbCkKLSAgICB7Ci0gICAgICBRTmFtZSBuYW1lID0gKFFOYW1lKWtleTsKLSAgICAgIFFOYW1lIHZhbHVlID0gKFFOYW1lKXZhbDsKLSAgICAgIFN0cmluZyBsTmFtZSA9IG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICBTdHJpbmcgblNwYWNlID0gbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgaWYgKE5TX1VSSV9QQVJUX0VYVEVOU0lPTlMuZXF1YWxzKG5TcGFjZSkgJiYgQVRUUl9NRVNTQUdFLmVxdWFscyhsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlUHJveHkgPSBuZXcgTWVzc2FnZUltcGwoKTsKLSAgICAgICAgbWVzc2FnZVByb3h5LnNldFFOYW1lKHZhbHVlKTsKLSAgICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbWVzc2FnZVByb3h5KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzdXBlci5wdXQoa2V5LCB2YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCi0gICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGVsZW1lbnRBdHRyID0gV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpOwotICAgIHNldEVsZW1lbnROYW1lKGVsZW1lbnRBdHRyICE9IG51bGwgPyBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50QXR0ciwgZWxlbWVudCwgdHJ1ZSkgOiBudWxsKTsKLQotICAgIFN0cmluZyB0eXBlQXR0ciA9IFdTRExDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKTsKLSAgICBzZXRUeXBlTmFtZSh0eXBlQXR0ciAhPSBudWxsID8gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgdHlwZUF0dHIsIGVsZW1lbnQsIHRydWUpIDogbnVsbCk7Ci0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgLy9zdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlRfX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLQotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlRfX1RZUEVfTkFNRSkKLSAgICAgICAgaWYgKGdldFR5cGVOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSwgZ2V0VHlwZU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSArICIjIgotICAgICAgICAgICAgKyBnZXRUeXBlTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlRfX0VMRU1FTlRfTkFNRSkKLSAgICAgICAgaWYgKGdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSwgZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSArICIjIgotICAgICAgICAgICAgKyBnZXRFbGVtZW50TmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZVJlZmVyZW5jZShFUmVmZXJlbmNlIGVSZWZlcmVuY2UpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuUEFSVF9fVFlQRV9ERUZJTklUSU9OKQotICAgICAgewotICAgICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbiA9IGdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUsIHR5cGVEZWZpbml0aW9uLmdldFVSSSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04pCi0gICAgICB7Ci0gICAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCA9IGdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgICBpZiAoZWxlbWVudERlY2wgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFLCBlbGVtZW50RGVjbC5nZXRVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5QQVJUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gbmV3RWxlbWVudERlY2xhcmF0aW9uID0gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50TmFtZSk7Ci0gICAgaWYgKG5ld0VsZW1lbnREZWNsYXJhdGlvbiAhPSBlbGVtZW50RGVjbGFyYXRpb24pCi0gICAgewotICAgICAgc2V0RWxlbWVudERlY2xhcmF0aW9uKG5ld0VsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgfQotCi0gICAgWFNEVHlwZURlZmluaXRpb24gbmV3VHlwZURlZmluaXRpb24gPSByZXNvbHZlVHlwZURlZmluaXRpb24odHlwZU5hbWUpOwotICAgIGlmIChuZXdUeXBlRGVmaW5pdGlvbiAhPSB0eXBlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICBzZXRUeXBlRGVmaW5pdGlvbihuZXdUeXBlRGVmaW5pdGlvbik7Ci0gICAgfQotCi0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotCi0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24oUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKWdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRlZmluaXRpb24ucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSwgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlVHlwZURlZmluaXRpb24oUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiByZXN1bHQgPSBudWxsOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb25JbXBsIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5yZXNvbHZlVHlwZURlZmluaXRpb24ocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfSAvL1BhcnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Qb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTVlYjYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Qb3J0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwjZ2V0RUJpbmRpbmcgPGVtPkVCaW5kaW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUG9ydEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBQb3J0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5nKCkgPGVtPkVCaW5kaW5nPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nIGVCaW5kaW5nOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFBvcnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5QT1JUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUE9SVF9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZyBnZXRFQmluZGluZygpCi0gIHsKLSAgICBpZiAoZUJpbmRpbmcgIT0gbnVsbCAmJiBlQmluZGluZy5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFQmluZGluZyA9IChJbnRlcm5hbEVPYmplY3QpZUJpbmRpbmc7Ci0gICAgICBlQmluZGluZyA9IChCaW5kaW5nKWVSZXNvbHZlUHJveHkob2xkRUJpbmRpbmcpOwotICAgICAgaWYgKGVCaW5kaW5nICE9IG9sZEVCaW5kaW5nKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HLCBvbGRFQmluZGluZywgZUJpbmRpbmcpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVCaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZyBiYXNpY0dldEVCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBlQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RUJpbmRpbmcoQmluZGluZyBuZXdFQmluZGluZykKLSAgewotICAgIEJpbmRpbmcgb2xkRUJpbmRpbmcgPSBlQmluZGluZzsKLSAgICBlQmluZGluZyA9IG5ld0VCaW5kaW5nOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HLCBvbGRFQmluZGluZywgZUJpbmRpbmcpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmcgZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUJpbmRpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmcoamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzZXRFQmluZGluZygoQmluZGluZyliaW5kaW5nKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFQmluZGluZygpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RUJpbmRpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICBzZXRFQmluZGluZygoQmluZGluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICBzZXRFQmluZGluZygoQmluZGluZyludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICByZXR1cm4gZUJpbmRpbmcgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXROYW1lKGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICB9Ci0KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICBQb3J0IHBvcnQgPSAoUG9ydCljb21wb25lbnQ7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGxpc3QuYWRkQWxsKHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QT1JUX19OQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QT1JUX19FQklORElORykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gZ2V0RUJpbmRpbmcoKTsKLSAgICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFLCBxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIjIiArIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlBPUlQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFKSwgZWxlbWVudCk7Ci0gICAgICBCaW5kaW5nIG5ld0JpbmRpbmcgPSAoYmluZGluZ1FOYW1lICE9IG51bGwpID8gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSkgOiBudWxsOwotICAgICAgaWYgKG5ld0JpbmRpbmcgIT0gZ2V0RUJpbmRpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0RUJpbmRpbmcobmV3QmluZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLQotfSAvL1BvcnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydFR5cGVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydFR5cGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZWNiMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BvcnRUeXBlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcnQgVHlwZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0VHlwZUltcGwjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCNnZXRFT3BlcmF0aW9ucyA8ZW0+RU9wZXJhdGlvbnM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBQb3J0VHlwZUltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBQb3J0VHlwZQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPcGVyYXRpb25zKCkgPGVtPkVPcGVyYXRpb25zPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVPcGVyYXRpb25zKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVPcGVyYXRpb25zOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFBvcnRUeXBlSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuUE9SVF9UWVBFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHFOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRRTmFtZShRTmFtZSBuZXdRTmFtZSkKLSAgewotICAgIFFOYW1lIG9sZFFOYW1lID0gcU5hbWU7Ci0gICAgcU5hbWUgPSBuZXdRTmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fVU5ERUZJTkVELCBvbGRVbmRlZmluZWQsIHVuZGVmaW5lZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RU9wZXJhdGlvbnMoKQotICB7Ci0gICAgaWYgKGVPcGVyYXRpb25zID09IG51bGwpCi0gICAgewotICAgICAgZU9wZXJhdGlvbnMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoT3BlcmF0aW9uLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVPcGVyYXRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhbiBvcGVyYXRpb24gdG8gdGhpcyBwb3J0IHR5cGUuCi0gICAqIEBwYXJhbSBvcGVyYXRpb24gdGhlIG9wZXJhdGlvbiB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBpZiAoIW9wZXJhdGlvbi5pc1VuZGVmaW5lZCgpKQotICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5hZGQob3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24uIE5vdGUgdGhhdCBvcGVyYXRpb24gbmFtZXMgY2FuCi0gICAqIGJlIG92ZXJsb2FkZWQgd2l0aGluIGEgUG9ydFR5cGUuIEluIGNhc2Ugb2Ygb3ZlcmxvYWRpbmcsIHRoZQotICAgKiBuYW1lcyBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcyBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyCi0gICAqIHJlZmluZSB0aGUgc2VhcmNoLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBpbnB1dE5hbWUgdGhlIG5hbWUgb2YgdGhlIGlucHV0IG1lc3NhZ2U7IGlmIHRoaXMgaXMgbnVsbAotICAgKiAgICAgICAgaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcGFyYW0gb3V0cHV0TmFtZSB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IG1lc3NhZ2U7IGlmIHRoaXMgaXMgbnVsbAotICAgKiAgICAgICAgaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogICAgICAgICBhbnkgbWF0Y2hpbmcgb3BlcmF0aW9uCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuT3BlcmF0aW9uIGdldE9wZXJhdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIGlucHV0TmFtZSwgU3RyaW5nIG91dHB1dE5hbWUpCi0gIHsKLSAgICBJdGVyYXRvciBvcEl0ZXJhdG9yID0gZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG9wSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIG9wID0gKGphdmF4LndzZGwuT3BlcmF0aW9uKW9wSXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBTdHJpbmcgb3BOYW1lID0gb3AuZ2V0TmFtZSgpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBvcE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFuYW1lLmVxdWFscyhvcE5hbWUpKQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG5hbWUgIT0gbnVsbCB8fCBvcE5hbWUgIT0gbnVsbCkKLSAgICAgICAgb3AgPSBudWxsOwotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiBpbnB1dE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YXgud3NkbC5JbnB1dCBpbnB1dCA9IG9wLmdldElucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG9wSW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIGlmIChvcElucHV0TmFtZSA9PSBudWxsIHx8ICFvcElucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiBvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuT3V0cHV0IG91dHB1dCA9IG9wLmdldE91dHB1dCgpOwotICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgb3BPdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAob3BPdXRwdXROYW1lID09IG51bGwgfHwgIW9wT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwpCi0gICAgICAgIHJldHVybiBvcDsKLSAgICB9IC8vIGVuZCB3aGlsZQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgaWYgKCFpc1VuZGVmaW5lZCgpKQotICAgICAgcmV0dXJuIGdldEVPcGVyYXRpb25zKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RU9wZXJhdGlvbnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fUU5BTUU6Ci0gICAgICByZXR1cm4gZ2V0UU5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fRU9QRVJBVElPTlM6Ci0gICAgICByZXR1cm4gZ2V0RU9wZXJhdGlvbnMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoKChCb29sZWFuKW5ld1ZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fRU9QRVJBVElPTlM6Ci0gICAgICBnZXRFT3BlcmF0aW9ucygpLmNsZWFyKCk7Ci0gICAgICBnZXRFT3BlcmF0aW9ucygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZChVTkRFRklORURfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TOgotICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fUU5BTUU6Ci0gICAgICByZXR1cm4gUU5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHFOYW1lICE9IG51bGwgOiAhUU5BTUVfRURFRkFVTFQuZXF1YWxzKHFOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiBlT3BlcmF0aW9ucyAhPSBudWxsICYmICFlT3BlcmF0aW9ucy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChxTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHFOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHVuZGVmaW5lZDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVuZGVmaW5lZCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotICAgIHNldFFOYW1lKHFuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5PUEVSQVRJT046Ci0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5hZGQob3BlcmF0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0TGlzdChjb21wb25lbnQsIG1vZGVsT2JqZWN0KTsKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0TGlzdChPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG51bGw7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSljb21wb25lbnQ7Ci0KLSAgICBMaXN0IGxpc3QgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlBPUlRfVFlQRV9fUU5BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuUE9SVF9UWVBFKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChPcGVyYXRpb25JbXBsKW9wZXJhdGlvbikuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9Qb3J0VHlwZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9TZXJ2aWNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1NlcnZpY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYzU1OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1NlcnZpY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwjZ2V0RVBvcnRzIDxlbT5FUG9ydHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNlcnZpY2UKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIHFOYW1lID0gUU5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VuZGVmaW5lZCgpIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVOREVGSU5FRF9FREVGQVVMVCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VuZGVmaW5lZCgpIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kZWZpbmVkID0gVU5ERUZJTkVEX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUG9ydHMoKSA8ZW0+RVBvcnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVQb3J0cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlUG9ydHM7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU2VydmljZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlNFUlZJQ0U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFFOYW1lKFFOYW1lIG5ld1FOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkUU5hbWUgPSBxTmFtZTsKLSAgICBxTmFtZSA9IG5ld1FOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQb3J0cygpCi0gIHsKLSAgICBpZiAoZVBvcnRzID09IG51bGwpCi0gICAgewotICAgICAgZVBvcnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFBvcnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX0VQT1JUUyk7Ci0gICAgfQotICAgIHJldHVybiBlUG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgcG9ydCB0byB0aGlzIHNlcnZpY2UuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0IHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUG9ydChqYXZheC53c2RsLlBvcnQgcG9ydCkKLSAgewotICAgIGdldEVQb3J0cygpLmFkZCgoUG9ydClwb3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBwb3J0cyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRQb3J0cygpCi0gIHsKLSAgICBIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClpLm5leHQoKTsKLSAgICAgIGhhc2hNYXAucHV0KHBvcnQuZ2V0TmFtZSgpLCBwb3J0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hNYXA7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgcG9ydC4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgcG9ydC4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwb3J0LCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgcG9ydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnQgZ2V0UG9ydChTdHJpbmcgbmFtZSkKLSAgewotICAgIFBvcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMocG9ydC5nZXROYW1lKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwb3J0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFUG9ydHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuIGdldEVQb3J0cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19FUE9SVFM6Ci0gICAgICBnZXRFUG9ydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RVBvcnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoVU5ERUZJTkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgZ2V0RVBvcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuIGVQb3J0cyAhPSBudWxsICYmICFlUG9ydHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAocU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChxTmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB1bmRlZmluZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1bmRlZmluZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lKTsKLSAgICBzZXRRTmFtZShxbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3dpdGNoIChXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGNoaWxkKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuUE9SVDoKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpKChXU0RMUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShXU0RMUGFja2FnZS5lTlNfVVJJKSkuZ2V0V1NETEZhY3RvcnkoKS5jcmVhdGVQb3J0KCk7Ci0gICAgICAgIHBvcnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICBnZXRFUG9ydHMoKS5hZGQocG9ydCk7Ci0gICAgICAgIHBvcnQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT046Ci0gICAgICB7Ci0gICAgICAgIHNldERvY3VtZW50YXRpb25FbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlKE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIExpc3QgbGlzdCA9IGdldExpc3QobW9kZWxPYmplY3QpOwotICAgIGlmIChsaXN0ICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRMaXN0KE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBQb3J0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEVQb3J0cygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlNFUlZJQ0VfX1FOQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlNFUlZJQ0UpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKFBvcnRJbXBsKXBvcnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLX0gLy9TZXJ2aWNlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1R5cGVzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1R5cGVzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWVhZDJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9UeXBlc0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHlwZXM8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUeXBlc0ltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBUeXBlcwotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlc0ltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlRZUEVTOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0U2NoZW1hcygpCi0gIHsKLSAgICBMaXN0IGFycmF5TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgaWYgKCEoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkpCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkZWUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gICAgICBpZiAoeHNkZWUuZ2V0U2NoZW1hKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYXJyYXlMaXN0LmFkZCh4c2RlZS5nZXRTY2hlbWEoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhcnJheUxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTY2hlbWFzKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBMaXN0IHNjaGVtYXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCAmJiBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsICYmIG5hbWVzcGFjZVVSSS5lcXVhbHMoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgIHsKLSAgICAgICAgc2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlTm90aWZ5KE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBzdXBlci5lTm90aWZ5KG1zZyk7Ci0KLSAgICAvLyBjcy4uIGlmIHdlJ3ZlIGFkZGVkIGFuIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBhbmQgdGhlIFR5cGVzIG9iamVjdCBpcyBhbHJlYWR5IGF0dGFjaGVkIAotICAgIC8vIHRvIGEgcmVzb3VyY2Ugd2UgbmVlZCB0byBzZXQgdGhlIHNjaGVtYUxvY2F0aW9uIGZvciB0aGUgaW5saW5lIHNjaGVtYS4KLSAgICAvLyBJZiBub3QgeWV0IGF0dGFjaGVkIHRvIGEgcmVzb3VyY2UsIHRoZSBzY2hlbWFMb2NhdGlvbidzIHdpbGwgYmUgc2V0IHZpYSBXU0RMUmVzb3VyY2VJbXBsLmF0dGFjaGVkKEVPYmplY3QgbykKLSAgICAvLyAgICAgCi0gICAgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyAmJiBtc2cuZ2V0RXZlbnRUeXBlKCkgPT0gTm90aWZpY2F0aW9uLkFERCkKLSAgICB7Ci0gICAgICBpZiAobXNnLmdldE5ld1ZhbHVlKCkgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpbXNnLmdldE5ld1ZhbHVlKCk7Ci0gICAgICAgIGlmIChlZS5nZXRTY2hlbWEoKSAhPSBudWxsICYmIGVlLmdldFNjaGVtYSgpLmVSZXNvdXJjZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBlZS5nZXRTY2hlbWEoKS5zZXRTY2hlbWFMb2NhdGlvbihlZS5nZXRTY2hlbWEoKS5lUmVzb3VyY2UoKS5nZXRVUkkoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgaWYgKFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcuZXF1YWxzKGNoaWxkLmdldExvY2FsTmFtZSgpKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkZWUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgICAgeHNkZWUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICB4c2RlZS5zZXRFbGVtZW50KGNoaWxkKTsgLy8gY3MgOiB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgY3JlYXRpbmcgdGhlIGlubGluZSBzY2hlbWEgICAgICAgICAgICAgICAKLSAgICAgICAgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoeHNkZWUpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVJlY29uY2lsaWF0aW9uKHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgKChEZWZpbml0aW9uSW1wbClnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKWNvbXBvbmVudDsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwodHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlRZUEVTKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgLy8gQWRkIGNoaWxkcmVuCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3RWxlbWVudDsKLQotICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyID0gZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgRWxlbWVudCBlbCA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHkgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlci5uZXh0KCk7Ci0gICAgICBlbCA9IGV4dGVuc2liaWxpdHkuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCByZVBhcmVudGVkID0gKEVsZW1lbnQpZG9jdW1lbnQuaW1wb3J0Tm9kZShlbCwgdHJ1ZSk7Ci0gICAgICAgICAgZXh0ZW5zaWJpbGl0eS5zZXRFbGVtZW50KHJlUGFyZW50ZWQpOyAvLyByZXBsYWNlIHdpdGggdGhlIG5ldyBvbmUKLSAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKHJlUGFyZW50ZWQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChET01FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHkpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9UeXBlc0ltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZmOWIyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCNnZXRDaGlsZHJlbiA8ZW0+Q2hpbGRyZW48L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDaGlsZHJlbigpIDxlbT5DaGlsZHJlbjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRDaGlsZHJlbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBjaGlsZHJlbjsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldENoaWxkcmVuKCkKLSAgewotICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKQotICAgIHsKLSAgICAgIGNoaWxkcmVuID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoaWxkcmVuOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldENoaWxkcmVuKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICByZXR1cm4gZ2V0Q2hpbGRyZW4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICBnZXRDaGlsZHJlbigpLmNsZWFyKCk7Ci0gICAgICBnZXRDaGlsZHJlbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICBnZXRDaGlsZHJlbigpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOOgotICAgICAgcmV0dXJuIGNoaWxkcmVuICE9IG51bGwgJiYgIWNoaWxkcmVuLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLy8gCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KCk6IFByZXNlcnZpbmcgb2xkIGVsZW1lbnQiKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEVsZW1lbnRHZW4oZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwucmVjb25jaWxlQXR0cmlidXRlcygpIik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudCgpIik7Ci0gICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KGNoaWxkKTsKLQotICAgIC8vIFRPRE8uLiAgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjaGlsZCBzaG91bGQgZ28gaW4gdGhlIGluIGN1cnJlbnQgbGlzdAotICAgIC8vIHNvIHRoYXQgaXQgZG9lc24ndCBhbHdheXMgZW5kIHVwIGdvaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgCi0gICAgLy8gKHNpbmNlIGEgbmV3IGVsZW1lbnQgbWlnaHQgYmUgYWRkZWQgYXQgdGhlIHN0YXJ0KQotICAgIGdldENoaWxkcmVuKCkuYWRkKGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdWVlID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIHVlZS5nZXRDaGlsZHJlbigpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICAgICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRG9jdW1lbnQoKTsKLQotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgLy8gVGhpcyBpcyBhbiBvbGQgZWxlbWVudC4KLSAgICB7Ci0gICAgICBuZXdFbGVtZW50ID0gKEVsZW1lbnQpZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTsKLSAgICAgIGVsZW1lbnQgPSBuZXdFbGVtZW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgcXVhbGlmaWVyID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgobmFtZXNwYWNlKTsKLSAgICAgIG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCAocXVhbGlmaWVyID09IG51bGwgPyAiIiA6IHF1YWxpZmllciArICI6IikgKyBnZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgIGVsZW1lbnQgPSBuZXdFbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBqYXZhLnV0aWwuTWFwIHByb3BlcnRpZXMgPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKLQotICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgcHJvcGVydGllcy5wdXQoa2V5LCB2YWx1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9wZXJ0aWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIGphdmEudXRpbC5NYXAuRW50cnkgZW50cnkgPSBudWxsOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZW50cnkgPSAoamF2YS51dGlsLk1hcC5FbnRyeSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1dGUgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19IC8vVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmRlNDNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRzRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsI2dldERvY3VtZW50YXRpb25FbGVtZW50IDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsI2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRWxlbWVudEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFdTRExFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRWxlbWVudCBET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVsZW1lbnQgZG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50KCkgPGVtPkVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIEVsZW1lbnQgRUxFTUVOVF9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVsZW1lbnQoKSA8ZW0+RWxlbWVudDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFbGVtZW50IGVsZW1lbnQgPSBFTEVNRU5UX0VERUZBVUxUOwotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGluZ0RPTSA9IGZhbHNlOwotCi0gIHByb3RlY3RlZCBFTGlzdCB3c2RsQ29udGVudHM7Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGVuY2xvc2luZ0RlZmluaXRpb247Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETEVsZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5XU0RMX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldERvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgewotICAgIHJldHVybiBkb2N1bWVudGF0aW9uRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCBuZXdEb2N1bWVudGF0aW9uRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnQgb2xkRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBkb2N1bWVudGF0aW9uRWxlbWVudDsKLSAgICBkb2N1bWVudGF0aW9uRWxlbWVudCA9IG5ld0RvY3VtZW50YXRpb25FbGVtZW50OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCwKLSAgICAgICAgb2xkRG9jdW1lbnRhdGlvbkVsZW1lbnQsCi0gICAgICAgIGRvY3VtZW50YXRpb25FbGVtZW50KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRHZW4oRWxlbWVudCBuZXdFbGVtZW50KQotICB7Ci0gICAgRWxlbWVudCBvbGRFbGVtZW50ID0gZWxlbWVudDsKLSAgICBlbGVtZW50ID0gbmV3RWxlbWVudDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQsIG9sZEVsZW1lbnQsIGVsZW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuY2xvc2luZ0RlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZW5jbG9zaW5nRGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOgotICAgICAgcmV0dXJuIGdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRUxFTUVOVDoKLSAgICAgIHJldHVybiBnZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ6Ci0gICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudCgoRWxlbWVudCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRUxFTUVOVDoKLSAgICAgIHNldEVsZW1lbnQoKEVsZW1lbnQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ6Ci0gICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudChET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQ6Ci0gICAgICBzZXRFbGVtZW50KEVMRU1FTlRfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOgotICAgICAgcmV0dXJuIERPQ1VNRU5UQVRJT05fRUxFTUVOVF9FREVGQVVMVCA9PSBudWxsCi0gICAgICAgID8gZG9jdW1lbnRhdGlvbkVsZW1lbnQgIT0gbnVsbCA6ICFET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQuZXF1YWxzKGRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19FTEVNRU5UOgotICAgICAgcmV0dXJuIEVMRU1FTlRfRURFRkFVTFQgPT0gbnVsbCA/IGVsZW1lbnQgIT0gbnVsbCA6ICFFTEVNRU5UX0VERUZBVUxULmVxdWFscyhlbGVtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKGRvY3VtZW50YXRpb25FbGVtZW50OiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZWxlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGF0aW9uIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgV1NETENvbnRlbnRzRUxpc3QgZXh0ZW5kcyBFQ29udGVudHNFTGlzdAotICB7Ci0gICAgV1NETENvbnRlbnRzRUxpc3QoRU9iamVjdCBlT2JqZWN0LCBFU3RydWN0dXJhbEZlYXR1cmVbXSBlU3RydWN0dXJhbEZlYXR1cmVzKQotICAgIHsKLSAgICAgIHN1cGVyKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBMaXN0SXRlcmF0b3IgbmV3TGlzdEl0ZXJhdG9yKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IEZlYXR1cmVJdGVyYXRvckltcGwoZU9iamVjdCwgZVN0cnVjdHVyYWxGZWF0dXJlcyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbmNsdWRlZChFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlKQotICAgIHsKLSAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWVTdHJ1Y3R1cmFsRmVhdHVyZTsKLSAgICAgIHJldHVybiAhZVJlZmVyZW5jZS5pc1RyYW5zaWVudCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGJhc2ljTGlzdCgpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBXU0RMQ29udGVudHNFTGlzdChlT2JqZWN0LCBlU3RydWN0dXJhbEZlYXR1cmVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgYmFzaWNJdGVyYXRvcigpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSXRlcmF0b3JJbXBsKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRmVhdHVyZUl0ZXJhdG9ySW1wbCBleHRlbmRzIEVDb250ZW50c0VMaXN0LkZlYXR1cmVJdGVyYXRvckltcGwKLSAgICB7Ci0gICAgICBwdWJsaWMgRmVhdHVyZUl0ZXJhdG9ySW1wbChFT2JqZWN0IGVPYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyKGVPYmplY3QsIChFU3RydWN0dXJhbEZlYXR1cmVbXSkoKEJhc2ljRUxpc3QpZU9iamVjdC5lQ2xhc3MoKS5nZXRFQWxsUmVmZXJlbmNlcygpKS5kYXRhKCkpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgRmVhdHVyZUl0ZXJhdG9ySW1wbChFT2JqZWN0IGVPYmplY3QsIEVTdHJ1Y3R1cmFsRmVhdHVyZVtdIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgICAgfQotCi0gICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luY2x1ZGVkKEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUpCi0gICAgICB7Ci0gICAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWVTdHJ1Y3R1cmFsRmVhdHVyZTsKLSAgICAgICAgcmV0dXJuICFlUmVmZXJlbmNlLmlzVHJhbnNpZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVMaXN0IGdldFdTRExDb250ZW50cygpCi0gIHsKLSAgICBpZiAod3NkbENvbnRlbnRzID09IG51bGwpCi0gICAgewotICAgICAgd3NkbENvbnRlbnRzID0gbmV3IFdTRExDb250ZW50c0VMaXN0KHRoaXMsIChFU3RydWN0dXJhbEZlYXR1cmVbXSkoKEJhc2ljRUxpc3QpZUNsYXNzKCkuZ2V0RUFsbENvbnRhaW5tZW50cygpKS5kYXRhKCkpOwotICAgIH0KLQotICAgIHJldHVybiB3c2RsQ29udGVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50ID09IG51bGwpCi0gICAgewotICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICBzZXRFbGVtZW50R2VuKG51bGwpOwotICAgICAgZm9yIChJdGVyYXRvciBjb250ZW50cyA9IGdldFdTRExDb250ZW50cygpLml0ZXJhdG9yKCk7IGNvbnRlbnRzLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBjb250ZW50cy5uZXh0KCk7Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMRWxlbWVudEltcGwgY29udGVudCA9IChXU0RMRWxlbWVudEltcGwpb2JqOwotICAgICAgICAgIGNvbnRlbnQuc2V0RWxlbWVudChudWxsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RWxlbWVudEdlbihlbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBlTm90aWZpY2F0aW9uUmVxdWlyZWQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlTm90aWZ5KE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBpbnQgZXZlbnRUeXBlID0gbXNnLmdldEV2ZW50VHlwZSgpOwotICAgIE9iamVjdCBmZWF0dXJlID0gbXNnLmdldEZlYXR1cmUoKTsKLSAgICBPYmplY3Qgb2xkVmFsdWUgPSBtc2cuZ2V0T2xkVmFsdWUoKTsKLSAgICBPYmplY3QgbmV3VmFsdWUgPSBtc2cuZ2V0TmV3VmFsdWUoKTsKLQotICAgIGlmIChlQ2xhc3MoKS5nZXRFQWxsUmVmZXJlbmNlcygpLmNvbnRhaW5zKGZlYXR1cmUpKQotICAgIHsKLSAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWZlYXR1cmU7Ci0gICAgICBpZiAoZVJlZmVyZW5jZS5pc0NvbnRhaW5tZW50KCkgJiYgIWVSZWZlcmVuY2UuaXNUcmFuc2llbnQoKSkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChldmVudFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BREQ6Ci0gICAgICAgICAgewotICAgICAgICAgICAgYWRvcHRDb250ZW50KGVSZWZlcmVuY2UsIG5ld1ZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BRERfTUFOWToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIG5ld1ZhbHVlcyA9ICgoQ29sbGVjdGlvbiluZXdWYWx1ZSkuaXRlcmF0b3IoKTsgbmV3VmFsdWVzLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW5ld1ZhbHVlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgIGFkb3B0Q29udGVudChlUmVmZXJlbmNlLCB3c2RsRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uUkVNT1ZFOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBvcnBoYW5Db250ZW50KGVSZWZlcmVuY2UsIC8qKFdTRExFbGVtZW50KSovb2xkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlJFTU9WRV9NQU5ZOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3Igb2xkVmFsdWVzID0gKChDb2xsZWN0aW9uKW9sZFZhbHVlKS5pdGVyYXRvcigpOyBvbGRWYWx1ZXMuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRU9iamVjdCBvYmplY3QgPSAoRU9iamVjdClvbGRWYWx1ZXMubmV4dCgpOwotICAgICAgICAgICAgICBvcnBoYW5Db250ZW50KGVSZWZlcmVuY2UsIG9iamVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uTU9WRToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtb3ZlQ29udGVudChlUmVmZXJlbmNlLCAoV1NETEVsZW1lbnQpbmV3VmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlNFVDoKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5VTlNFVDoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3JwaGFuQ29udGVudChlUmVmZXJlbmNlLCBvbGRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYWRvcHRDb250ZW50KGVSZWZlcmVuY2UsIG5ld1ZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLkFERDoKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BRERfTUFOWToKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5SRU1PVkU6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uUkVNT1ZFX01BTlk6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uTU9WRToKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5TRVQ6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uVU5TRVQ6Ci0gICAgICAgICAgewotICAgICAgICAgICAgY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCkuY29udGFpbnMoZmVhdHVyZSkpCi0gICAgewotICAgICAgRUF0dHJpYnV0ZSBlQXR0cmlidXRlID0gKEVBdHRyaWJ1dGUpZmVhdHVyZTsKLSAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKQotICAgICAgewotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BREQ6Ci0gICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLkFERF9NQU5ZOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5SRU1PVkU6Ci0gICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlJFTU9WRV9NQU5ZOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5NT1ZFOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5TRVQ6Ci0gICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlVOU0VUOgotICAgICAgICB7Ci0gICAgICAgICAgY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLmVOb3RpZnkobXNnKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIG9ycGhhbkNvbnRlbnQoRVJlZmVyZW5jZSBlUmVmZXJlbmNlLCBPYmplY3Qgb2JqKQotICB7Ci0gICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcGFyZW50ID0gZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmIG9iaiAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotICAgICAgewotICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClvYmo7Ci0gICAgICAgIEVsZW1lbnQgY29udGVudEVsZW1lbnQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChjb250ZW50RWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIG5pY2VSZW1vdmVDaGlsZChjb250ZW50RWxlbWVudC5nZXRQYXJlbnROb2RlKCksIGNvbnRlbnRFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgOy8vU3lzdGVtLm91dC5wcmludGxuKCJXU0RMRWxlbWVudC5vcnBoYW5Db250ZW50KCksIE9iamVjdCBpczogIiArIG9iaik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbmljZVJlbW92ZUNoaWxkKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgewotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBkb20gd3JpdGViYWNrIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvcmNlTmljZVJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZm9yY2VOaWNlUmVtb3ZlQ2hpbGQoTm9kZSBwYXJlbnQsIE5vZGUgY2hpbGQpCi0gIHsKLSAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0KLSAgICBib29sZWFuIGRvbmUgPSBmYWxzZTsKLQotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiPyoiKTsKLSAgICBOb2RlIHByZXZpb3VzID0gY2hpbGQuZ2V0UHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKHByZXZpb3VzICE9IG51bGwgJiYgcHJldmlvdXMuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICB7Ci0gICAgICBUZXh0IHRleHQgPSAoVGV4dClwcmV2aW91czsKLSAgICAgIFN0cmluZyBkYXRhID0gdGV4dC5nZXREYXRhKCk7Ci0gICAgICBpbnQgaW5kZXggPSBkYXRhLmxhc3RJbmRleE9mKCdcbicpOwotICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgewotICAgICAgICBpZiAoaW5kZXggLSAxID4gMCAmJiBkYXRhLmNoYXJBdChpbmRleCAtIDEpID09ICdccicpCi0gICAgICAgIHsKLSAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiMSoiKTsKLSAgICAgICAgICB0ZXh0LmRlbGV0ZURhdGEoaW5kZXggLSAxLCBkYXRhLmxlbmd0aCgpIC0gaW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiMioiKTsKLSAgICAgICAgICB0ZXh0LmRlbGV0ZURhdGEoaW5kZXgsIGRhdGEubGVuZ3RoKCkgLSBpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJObyByZXR1cm4gYmVmb3JlISIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJObyB0ZXh0IG5vZGUgYmVmb3JlISIpOwotICAgIH0KLQotICAgIGlmICghZG9uZSkKLSAgICB7Ci0gICAgICBmb3IgKE5vZGUgbmV4dCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7IG5leHQgIT0gbnVsbDsgbmV4dCA9IG5leHQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5leHQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIFRleHQgdGV4dCA9IChUZXh0KW5leHQ7Ci0gICAgICAgICAgU3RyaW5nIGRhdGEgPSB0ZXh0LmdldERhdGEoKTsKLSAgICAgICAgICAvKgotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJ4eCAiICsgZGF0YS5sZW5ndGgoKSArICI6OiAiKTsKLSAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpZGF0YS5jaGFyQXQoaSkpKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgKi8KLQotICAgICAgICAgIGludCBpbmRleCA9IGRhdGEuaW5kZXhPZignXG4nKTsKLSAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGRhdGEubGVuZ3RoKCkgJiYgZGF0YS5jaGFyQXQoaW5kZXggKyAxKSA9PSAnXHInKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIjMqIik7Ci0gICAgICAgICAgICAgIHRleHQuZGVsZXRlRGF0YSgwLCBpbmRleCArIDIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiNCoiKTsKLSAgICAgICAgICAgICAgdGV4dC5kZWxldGVEYXRhKDAsIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gcmV0dXJuIGFmdGVyISIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXh0LmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmcgZnJvbS0tLS0tLS0tXG4gICAgICIgKyBwYXJlbnQpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmctLS0tLS0tLVxuICAgICAiICsgY2hpbGQpOwotICAgIGlmIChwYXJlbnQgIT0gbnVsbCkKLSAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7Ci0KLSAgICB1cGRhdGluZ0RPTSA9IGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbW92ZUNvbnRlbnQoRVJlZmVyZW5jZSBlUmVmZXJlbmNlLCBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgZG9tIHdyaXRlYmFjayBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibW92aW5nICIgKyB4c2RDb25jcmV0ZUNvbXBvbmVudCk7Ci0gICAgTm9kZSBwYXJlbnQgPSBnZXRBZG9wdGlvblBhcmVudE5vZGUoZVJlZmVyZW5jZSk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBjb250ZW50cyA9IGdldFdTRExDb250ZW50cygpOwotICAgICAgICBpbnQgaW5kZXggPSBjb250ZW50cy5pbmRleE9mKHdzZGxFbGVtZW50KTsKLSAgICAgICAgbmljZVJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpOwotICAgICAgICBuaWNlSW5zZXJ0QmVmb3JlKHBhcmVudCwgY2hpbGQsICsraW5kZXggPT0gY29udGVudHMuc2l6ZSgpID8gbnVsbCA6ICgoV1NETEVsZW1lbnQpY29udGVudHMuZ2V0KGluZGV4KSkuZ2V0RWxlbWVudCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm1vdmVkICIgKyB4c2RDb25jcmV0ZUNvbXBvbmVudCk7Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkb3B0Q29udGVudChFUmVmZXJlbmNlIGVSZWZlcmVuY2UsIE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0gICAgewotICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpb2JqZWN0OwotICAgICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIGlmICh3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS5lbGVtZW50Q2hhbmdlZCh3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGRFbGVtZW50ID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgICBpZiAoZ2V0RWxlbWVudCgpICE9IG51bGwgJiYgKGNoaWxkRWxlbWVudCA9PSBudWxsIHx8IGNoaWxkRWxlbWVudC5nZXRQYXJlbnROb2RlKCkgPT0gbnVsbCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwgJiYgY2hpbGRFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSAhPSBnZXRFbGVtZW50KCkuZ2V0T3duZXJEb2N1bWVudCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxFbGVtZW50LnNldEVsZW1lbnQobnVsbCk7Ci0gICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGhhbmRsZUVsZW1lbnRGb3JBZG9wdChlUmVmZXJlbmNlLCB3c2RsRWxlbWVudCk7Ci0gICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuYWRvcHRCeShkZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTmFtZXNwYWNlKQotICAgIHsKLSAgICAgIC8vIEFkZCBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUgdG8gdGhlIERlZmluaXRpb25zIGVsZW1lbnQuCi0gICAgICBOYW1lc3BhY2UgbnMgPSAoTmFtZXNwYWNlKW9iamVjdDsKLSAgICAgIE5vZGUgYWRvcHRpb25QYXJlbnQgPSBnZXRBZG9wdGlvblBhcmVudE5vZGUoZVJlZmVyZW5jZSk7IC8vIERlZmluaXRpb25zIG5vZGUKLSAgICAgIC8vIEtCOiBBc3N1bXB0aW9uIC0gVGhlIHByZWZpeCBpcyB1bmlxdWUgaWYgd2UgYXJlIGhlcmUgKGJ5IHRoZSBEZWZpbml0aW9ucyBtb2RlbCkuIAotICAgICAgaWYgKGFkb3B0aW9uUGFyZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgICgoRWxlbWVudClhZG9wdGlvblBhcmVudCkuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgbnMuZ2V0UHJlZml4KCksIG5zLmdldFVSSSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgTm9kZSBnZXRBZG9wdGlvblBhcmVudE5vZGUoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUVsZW1lbnRGb3JBZG9wdChFUmVmZXJlbmNlIGVSZWZlcmVuY2UsIFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgLy8gRXN0YWJsaXNoIERPTSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwCi0KLSAgICBOb2RlIGFkb3B0aW9uUGFyZW50ID0gZ2V0QWRvcHRpb25QYXJlbnROb2RlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgY2hpbGRFbGVtZW50ID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgcmVmZXJlbmNlZEVsZW1lbnQgPSBudWxsOwotCi0gICAgZm9yIChJdGVyYXRvciBjb250ZW50cyA9IGdldFdTRExDb250ZW50cygpLml0ZXJhdG9yKCk7IGNvbnRlbnRzLmhhc05leHQoKTspCi0gICAgewotICAgICAgaWYgKGNvbnRlbnRzLm5leHQoKSA9PSB3c2RsRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNvbnRlbnRzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBuZXh0ID0gY29udGVudHMubmV4dCgpOwotICAgICAgICAgIGlmIChuZXh0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSAoKFdTRExFbGVtZW50KW5leHQpLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHdoaWxlIChyZWZlcmVuY2VkRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlIHBhcmVudCA9IHJlZmVyZW5jZWRFbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudCA9PSBhZG9wdGlvblBhcmVudCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSAoRWxlbWVudClwYXJlbnQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNoaWxkRWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS5pc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgIGNoaWxkRWxlbWVudCA9ICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgaWYgKGNoaWxkRWxlbWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibm90IGNyZWF0ZWQhICIgKyB3c2RsRWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sZWFuIGlzQXR0YWNoZWQgPSBmYWxzZTsKLSAgICBmb3IgKE5vZGUgcm9vdERvY3VtZW50ID0gY2hpbGRFbGVtZW50OyByb290RG9jdW1lbnQgIT0gbnVsbDsgcm9vdERvY3VtZW50ID0gcm9vdERvY3VtZW50LmdldFBhcmVudE5vZGUoKSkKLSAgICB7Ci0gICAgICBpZiAoV1NETENvbnN0YW50cy5ub2RlVHlwZShyb290RG9jdW1lbnQpID09IFdTRExDb25zdGFudHMuREVGSU5JVElPTikKLSAgICAgIHsKLSAgICAgICAgaXNBdHRhY2hlZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNBdHRhY2hlZCkKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2UgbmVlZCB0byBwdXQgaXQgZmlyc3QgaW4gdGhlIGxpc3QKLQotICAgICAgaWYgKHJlZmVyZW5jZWRFbGVtZW50ID09IG51bGwgJiYgV1NETENvbnN0YW50cy5ub2RlVHlwZShjaGlsZEVsZW1lbnQpID09IFdTRExDb25zdGFudHMuRE9DVU1FTlRBVElPTiAmJiAhZVJlZmVyZW5jZS5pc01hbnkoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSGVyZSB3ZSBmaW5kIHRoZSBmaXJzdCBlbGVtZW50IG5vZGUgaW4gdGhlIGxpc3QsIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgbmVlZHMgdG8gZ28gYmVmb3JlIHRoaXMgZWxlbWVudAotCi0gICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGFkb3B0aW9uUGFyZW50LmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSAoRWxlbWVudCljaGlsZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy9yZWZlcmVuY2VkRWxlbWVudCA9IGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKGFkb3B0aW9uUGFyZW50LGNoaWxkRWxlbWVudCk7ICAgICAKLSAgICAgIG5pY2VJbnNlcnRCZWZvcmUoYWRvcHRpb25QYXJlbnQsIGNoaWxkRWxlbWVudCwgcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG5pY2VJbnNlcnRCZWZvcmUoTm9kZSBwYXJlbnQsIE5vZGUgbmV3Q2hpbGQsIE5vZGUgcmVmZXJlbmNlQ2hpbGQpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGRvbSB3cml0ZWJhY2sgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3JjZU5pY2VJbnNlcnRCZWZvcmUocGFyZW50LCBuZXdDaGlsZCwgcmVmZXJlbmNlQ2hpbGQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZm9yY2VOaWNlSW5zZXJ0QmVmb3JlKE5vZGUgcGFyZW50LCBOb2RlIG5ld0NoaWxkLCBOb2RlIHJlZmVyZW5jZUNoaWxkKQotICB7Ci0gICAgdXBkYXRpbmdET00gPSB0cnVlOwotCi0gICAgTE9PUDogZm9yIChOb2RlIGNoaWxkID0gcmVmZXJlbmNlQ2hpbGQgPT0gbnVsbCA/IHBhcmVudC5nZXRMYXN0Q2hpbGQoKSA6IHJlZmVyZW5jZUNoaWxkLmdldFByZXZpb3VzU2libGluZygpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldFByZXZpb3VzU2libGluZygpKQotICAgIHsKLSAgICAgIHN3aXRjaCAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAgewotICAgICAgICAgIFRleHQgdGV4dCA9IChUZXh0KWNoaWxkOwotICAgICAgICAgIFN0cmluZyBkYXRhID0gdGV4dC5nZXREYXRhKCk7Ci0KLSAgICAgICAgICAvKgotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJ4eCAiICsgZGF0YS5sZW5ndGgoKSArICI6OiAiKTsKLSAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpZGF0YS5jaGFyQXQoaSkpKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgKi8KLQotICAgICAgICAgIGludCBpbmRleCA9IGRhdGEubGFzdEluZGV4T2YoJ1xuJyk7Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gaGVyZSIpOwotCi0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgaW5kZW50ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgZm9yIChOb2RlIGFuY2VzdG9yID0gcGFyZW50LmdldFBhcmVudE5vZGUoKTsgYW5jZXN0b3IgIT0gbnVsbCAmJiBhbmNlc3Rvci5nZXROb2RlVHlwZSgpICE9IE5vZGUuRE9DVU1FTlRfTk9ERTsgYW5jZXN0b3IgPSBhbmNlc3Rvci5nZXRQYXJlbnROb2RlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGluZGVudC5hcHBlbmQoIiAgICAiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGRhdGEubGVuZ3RoKCkgJiYgZGF0YS5jaGFyQXQoaW5kZXggKyAxKSA9PSAnXHInKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGV4dC5yZXBsYWNlRGF0YShpbmRleCArIDEsIGRhdGEubGVuZ3RoKCkgLSBpbmRleCAtIDEsIGluZGVudCArICIgICAgIik7Ci0KLSAgICAgICAgICAgIC8vIHNldENvcnJlY3RJbmRlbnRhdGlvbihpbmRlbnQsIG5ld1RleHQpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZUNoaWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGluZGVudC5hcHBlbmQoIiAgICAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRleHQgbmV3VGV4dCA9IHBhcmVudC5nZXRPd25lckRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoIlxuIiArIGluZGVudCk7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkluc2VydGVkLi4uIiArIG5ld1RleHQpOwotICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdUZXh0LCByZWZlcmVuY2VDaGlsZCk7Ci0gICAgICAgICAgICByZWZlcmVuY2VDaGlsZCA9IG5ld1RleHQ7Ci0gICAgICAgICAgICBicmVhayBMT09QOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6Ci0gICAgICAgIHsKLSAgICAgICAgICBicmVhayBMT09QOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJJbnNlcnRlZC4uLiIgKyBuZXdDaGlsZCk7Ci0gICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgcmVmZXJlbmNlQ2hpbGQpOwotCi0gICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKE5vZGUgcGFyZW50Tm9kZSwgTm9kZSBub2RlVG9BZGQpCi0gIHsKLSAgICBFbGVtZW50IHJlc3VsdCA9IG51bGw7Ci0gICAgaW50IGEgPSBnZXRQcmVjZWRlbmNlKG5vZGVUb0FkZCk7Ci0KLSAgICBmb3IgKE5vZGUgbm9kZSA9IHBhcmVudE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgaW50IGIgPSBnZXRQcmVjZWRlbmNlKG5vZGUpOwotICAgICAgICBpZiAoYiA+PSBhKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKEVsZW1lbnQpbm9kZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBIYXNoTWFwIHByZWNlZGVuY2VNYXAgPSBjcmVhdGVQcmVjZWRlbmNlTWFwKCk7Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0UHJlY2VkZW5jZShOb2RlIG5vZGUpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gMjsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gbm9kZS5nZXRMb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgSW50ZWdlciBpbnRlZ2VyID0gKEludGVnZXIpcHJlY2VkZW5jZU1hcC5nZXQobG9jYWxOYW1lKTsKLSAgICAgIGlmIChpbnRlZ2VyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgSGFzaE1hcCBjcmVhdGVQcmVjZWRlbmNlTWFwKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcigxKSk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5JTVBPUlRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDMpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlRZUEVTX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig0KSk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5NRVNTQUdFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig1KSk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5QT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDYpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDcpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlNFUlZJQ0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDgpKTsKLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkb3B0QnkoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBjb21wb25lbnRzID0gZ2V0V1NETENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgY29tcG9uZW50cy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBjaGlsZCA9IGNvbXBvbmVudHMubmV4dCgpOwotICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCljaGlsZCkuYWRvcHRCeShkZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1VwZGF0aW5nRE9NKCkKLSAgewotICAgIHJldHVybiB1cGRhdGluZ0RPTTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoIWlzVXBkYXRpbmdET00oKSkKLSAgICB7Ci0gICAgICBpZiAoIWlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGNoYW5nZUZvciAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICAgIHJlY29uY2lsZShjaGFuZ2VkRWxlbWVudCk7Ci0KLSAgICAgICAgV1NETEVsZW1lbnQgdGhlQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICh0aGVDb250YWluZXIgIT0gbnVsbCAmJiB0aGVDb250YWluZXIuZ2V0RWxlbWVudCgpID09IGNoYW5nZWRFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpdGhlQ29udGFpbmVyKS5lbGVtZW50Q2hhbmdlZChjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgIHRyYXZlcnNlVG9Sb290Rm9yUGF0Y2hpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgOyAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgaW50ZXJuYWwgcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICA7IC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBET00gcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKiBUT0RPLi4uIHJlbW92ZSB0aGlzIG1ldGhvZCEKLSAgICovCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgcmV0dXJuIGdldFdTRExDb250ZW50cygpOwotICB9Ci0KLSAgLyoKLSAgIHByb3RlY3RlZCBFbGVtZW50IGdldEVsZW1lbnRGb3JNb2RlbE9iamVjdChPYmplY3QgbW9kZWxPYmplY3QpCi0gICB7Ci0gICBFbGVtZW50IHJlc3VsdCA9IG51bGw7Ci0gICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgewotICAgcmVzdWx0ID0gKEVsZW1lbnQpIG1vZGVsT2JqZWN0OwotICAgfQotICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgIHsKLSAgIHJlc3VsdCA9ICgoV1NETEVsZW1lbnQpIG1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0gICB9Ci0gICByZXR1cm4gcmVzdWx0OwotICAgfQotICAgKi8KLQotICBwcml2YXRlIENvbGxlY3Rpb24gZ2V0Q29udGVudE5vZGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKE5vZGUgY2hpbGQgPSBjaGFuZ2VkRWxlbWVudC5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0LmFkZChjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBTb21lIHN1YmNsYXNzZXMgdXNlIHRoaXMgbWV0aG9kCi0gIHByb3RlY3RlZCBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUpCi0gIHsKLSAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmV3IGZvcm0gdG8gcHJlc2VydmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjYXNlIHNvbWVvbmUKLSAgICAvLyBlbHNlIGNhbGxzIHRoaXMgbWV0aG9kLgotCi0gICAgcmV0dXJuIGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIFFOYW1lIGZyb20gYSBwcmVmaXhlZCBuYW1lLiBUYWtlcyBpbnRvIGFjY291bnQgbG9jYWxseSBkZWZpbmVkCi0gICAqIG5hbWVzcGFjZSBwcmVmaXhlcy4KLSAgICogCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbi4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIHByZWZpeGVkTmFtZQotICAgKiAgICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSB0byBjb252ZXJ0IHRvIFFOYW1lCi0gICAqIEBwYXJhbSBlbGVtZW50Ci0gICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZWxlbWVudC4gTWF5IGJlIG51bGwgaW4gd2hpY2ggY2FzZSB0aGUgcHJlZml4IGlzCi0gICAqICAgICAgICAgIG9ubHkgbG9va2VkIHVwIGFtb25nIHRoZSBvbmVzIGRlZmluZWQgYXQgdGhlIGRlZmluaXRpb24gbGV2ZWwuCi0gICAqIEByZXR1cm4gdGhlIFFOYW1lIGVxdWl2YWxlbnQgZm9yIHRoZSBnaXZlbiBwcmVmaXhlZCBuYW1lLCBvciBudWxsIGlmIGEKLSAgICogICAgICAgICBuYW1lc3BhY2UgcHJlZml4IGNhbm5vdCBiZSBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZSBVUkkgb3IgaWYKLSAgICogICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIGNyZWF0ZVFOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHByZWZpeGVkTmFtZSwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSwgZWxlbWVudCwgZmFsc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBRTmFtZSBmcm9tIGEgcHJlZml4ZWQgbmFtZS4gVGFrZXMgaW50byBhY2NvdW50IGxvY2FsbHkgZGVmaW5lZAotICAgKiBuYW1lc3BhY2UgcHJlZml4ZXMuIFNlbGVjdGl2ZWx5IGFsbG93cyBudWxsIG5hbWVzcGFjZSBVUklzLgotICAgKiAKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICogICAgICAgICAgdGhlIGVuY2xvc2luZyBkZWZpbml0aW9uLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gcHJlZml4ZWROYW1lCi0gICAqICAgICAgICAgIHRoZSBwcmVmaXhlZCBuYW1lIHRvIGNvbnZlcnQgdG8gUU5hbWUKLSAgICogQHBhcmFtIGVsZW1lbnQKLSAgICogICAgICAgICAgdGhlIGVuY2xvc2luZyBlbGVtZW50LiBNYXkgYmUgbnVsbCBpbiB3aGljaCBjYXNlIHRoZSBwcmVmaXggaXMKLSAgICogICAgICAgICAgb25seSBsb29rZWQgdXAgYW1vbmcgdGhlIG9uZXMgZGVmaW5lZCBhdCB0aGUgZGVmaW5pdGlvbiBsZXZlbC4KLSAgICogQHBhcmFtIGFsbG93TnVsbE5hbWVzcGFjZVVSSSBpZiB0cnVlIGFuZCB0aGUgcHJlZml4ZWQgbmFtZSBkb2VzIG5vdCBoYXZlIAotICAgKiAgICAgICAgICBhIHByZWZpeCBhIFFOYW1lIGlzIGNvbnN0cnVjdGVkIGFuZCByZXR1cm5lZCB1c2luZyAKLSAgICogICAgICAgICAge0BsaW5rIFhNTENvbnN0YW50cyNOVUxMX05TX1VSSX0gZm9yIHRoZSBuYW1lc3BhY2UgVVJJICAgICAgICAgIAotICAgKiBAcmV0dXJuIHRoZSBRTmFtZSBlcXVpdmFsZW50IGZvciB0aGUgZ2l2ZW4gcHJlZml4ZWQgbmFtZSwgb3IgbnVsbCBpZiBhCi0gICAqICAgICAgICAgbmFtZXNwYWNlIHByZWZpeCBjYW5ub3QgYmUgZm91bmQgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UgVVJJIG9yIGlmCi0gICAqICAgICAgICAgdGhlIHByZWZpeGVkIG5hbWUgaXMgbnVsbC4gCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgY3JlYXRlUU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgcHJlZml4ZWROYW1lLCBFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gYWxsb3dOdWxsTmFtZXNwYWNlVVJJKQotICB7Ci0gICAgUU5hbWUgcW5hbWUgPSBudWxsOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBwcmVmaXhlZE5hbWUuaW5kZXhPZigiOiIpOyAvLy8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyBwcmVmaXggPSAoaW5kZXggPT0gLTEpID8gIiIgOiBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCAmJiBlbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBmaW5kIGEgbG9jYWxseSBkZWZpbmVkIG5hbWVzcGFjZSBwcmVmaXguCi0KLSAgICAgICAgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlVVJJRnJvbVByZWZpeChlbGVtZW50LCBwcmVmaXgpOwotICAgICAgfQotCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgfHwgKGFsbG93TnVsbE5hbWVzcGFjZVVSSSAmJiBwcmVmaXgubGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIHFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHFuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgcHJlZml4IGFuZCBhIG5vZGUsIGZpbmRzIHRoZSBuYW1lc3BhY2UgVVJJIHBvaW50ZWQgdG8gYnkgdGhlCi0gICAqIHByZWZpeC4gV2Fsa3MgdGhlIGVsZW1lbnQgY29udGFpbm1lbnQgaGllcmFyY2h5IHVudGlsIGl0IGZpbmRzIG9uZSBvciBpdAotICAgKiByZWFjaGVzIHRoZSBkb2N1bWVudCByb290LgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgdGhlIHN0YXJ0aW5nIG5vZGUKLSAgICogQHBhcmFtIHByZWZpeAotICAgKiAgICAgICAgICB0aGUgcHJlZml4IHRvIGZpbmQgYW4geG1sbnM6cHJlZml4PXVyaSBmb3IKLSAgICogCi0gICAqIEByZXR1cm4gdGhlIG5hbWVzcGFjZSBVUkkgb3IgbnVsbCBpZiBub3QgZm91bmQKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXROYW1lc3BhY2VVUklGcm9tUHJlZml4KE5vZGUgbm9kZSwgU3RyaW5nIHByZWZpeCkKLSAgewotICAgIGlmIChub2RlID09IG51bGwgfHwgcHJlZml4ID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgTm9kZSBjdXJyZW50Tm9kZSA9IG5vZGU7Ci0KLSAgICB3aGlsZSAoY3VycmVudE5vZGUgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBnZXRBdHRyaWJ1dGVOUygoRWxlbWVudCljdXJyZW50Tm9kZSwgWFNEQ29uc3RhbnRzLlhNTE5TX1VSSV8yMDAwLCBwcmVmaXgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHJpZXZlcyBhbiBhdHRyaWJ1dGUncyB2YWx1ZS4KLSAgICogQHBhcmFtIGVsZW1lbnQgdGhlIGNvbnRhaW5pbmcgZWxlbWVudC4KLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSB0aGUgbmFtZXNwYWNlIFVSSS4KLSAgICogQHBhcmFtIGxvY2FsUGFydCB0aGUgbG9jYWwgbmFtZS4KLSAgICogQHJldHVybiB0aGUgYXR0cmlidXRlJ3MgdmFsdWUgaWYgcHJlc2VudCwgb3IgbnVsbCBpZiBub3QuIAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZU5TKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsUGFydCkKLSAgewotICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IG51bGw7Ci0gICAgQXR0ciBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsUGFydCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlICE9IG51bGwpCi0gICAgewotICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUuZ2V0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZUVsZW1lbnQoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGRlZXAgfHwgZ2V0RWxlbWVudCgpID09IG51bGwpCi0gICAgewotICAgICAgdXBkYXRlRWxlbWVudCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2hhbmdlQXR0cmlidXRlKG51bGwpOwotICAgICAgY2hhbmdlUmVmZXJlbmNlKG51bGwpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZUVsZW1lbnQoKQotICB7Ci0gICAgaWYgKGdldEVsZW1lbnQoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgY3JlYXRlRWxlbWVudCgpOwotICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgIH0KLQotICAgIGNoYW5nZUF0dHJpYnV0ZShudWxsKTsKLSAgICBjaGFuZ2VSZWZlcmVuY2UobnVsbCk7Ci0KLSAgICBPYmplY3Qgb2JqID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGNvbnRhaW5tZW50cyA9IGVDbGFzcygpLmdldEVBbGxDb250YWlubWVudHMoKS5pdGVyYXRvcigpOyBjb250YWlubWVudHMuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFUmVmZXJlbmNlIGVSZWZlcmVuY2UgPSAoRVJlZmVyZW5jZSljb250YWlubWVudHMubmV4dCgpOwotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEJEIC0gVGhpcyBpcyBhbiBpbnN0YW5jZSBvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBhbmQKLSAgICAgICAgLy8gZVJlZmVybmNlIGlzIFhTRFNjaGVtYS4gV2hhdCBkbyB3ZSB3YW50IHRvIGRvIGZvciB1cGRhdGU/Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghZVJlZmVyZW5jZS5pc1RyYW5zaWVudCgpKQotICAgICAgewotICAgICAgICBpZiAoZVJlZmVyZW5jZS5pc01hbnkoKSkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoSXRlcmF0b3Igb2JqZWN0cyA9ICgoQ29sbGVjdGlvbillR2V0KGVSZWZlcmVuY2UpKS5pdGVyYXRvcigpOyBvYmplY3RzLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgb2JqID0gb2JqZWN0cy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgfHwgb2JqID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIFNraXAgaXQuIFByb2JhYmx5IHRoaXMgaXMgTmFtZXNwYWNlLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClvYmo7Ci0gICAgICAgICAgICAgIC8vaGFuZGxlRWxlbWVudEZvckFkb3B0KGVSZWZlcmVuY2UsIHdzZGxFbGVtZW50KTsKLSAgICAgICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpZUdldChlUmVmZXJlbmNlKTsKLSAgICAgICAgICBpZiAod3NkbEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2hhbmRsZUVsZW1lbnRGb3JBZG9wdChlUmVmZXJlbmNlLCAgd3NkbEVsZW1lbnQpOwotICAgICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gZW5kIGVsc2UgaWYKLSAgICB9IC8vIGVuZCBmb3IKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5XU0RMX0VMRU1FTlRfX0VMRU1FTlQpCi0gICAgewotICAgICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCAmJiAhaXNSZWNvbmNpbGluZykKLSAgICAgIHsKLSAgICAgICAgZm9yIChOb2RlIHJvb3REb2N1bWVudCA9IHRoZUVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOyByb290RG9jdW1lbnQgIT0gbnVsbDsgcm9vdERvY3VtZW50ID0gcm9vdERvY3VtZW50LmdldFBhcmVudE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChyb290RG9jdW1lbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX05PREUpCi0gICAgICAgICAgewotICAgICAgICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlY29uY2lsZUF0dHJpYnV0ZXMoZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZWNvbmNpbGUoZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgICAgICAgICB0cmF2ZXJzZVRvUm9vdEZvclBhdGNoaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVG9Sb290Rm9yUGF0Y2hpbmcoKQotICB7Ci0gICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIFdTRExFbGVtZW50SW1wbCBjb250YWluZXIgPSAoV1NETEVsZW1lbnRJbXBsKWdldENvbnRhaW5lcigpOwotICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKQotICAgICAgewotICAgICAgICBjb250YWluZXIudHJhdmVyc2VUb1Jvb3RGb3JQYXRjaGluZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlY29uY2lsZShFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgcmVjb25jaWxlQXR0cmlidXRlcyhjaGFuZ2VkRWxlbWVudCk7Ci0gICAgcmVjb25jaWxlQ29udGVudHMoY2hhbmdlZEVsZW1lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVDb250ZW50cyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgTGlzdCByZW1haW5pbmdNb2RlbE9iamVjdHMgPSBuZXcgQXJyYXlMaXN0KGdldFdTRExDb250ZW50cygpKTsKLQotICAgIENvbGxlY3Rpb24gY29udGVudE5vZGVzID0gZ2V0Q29udGVudE5vZGVzKGNoYW5nZWRFbGVtZW50KTsKLQotICAgIEVsZW1lbnQgdGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBudWxsOwotCi0gICAgLy8gZm9yIGVhY2ggYXBwbGljYWJsZSBjaGlsZCBub2RlIG9mIGNoYW5nZWRFbGVtZW50Ci0gICAgTE9PUDogZm9yIChJdGVyYXRvciBpID0gY29udGVudE5vZGVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAvLyBTZXQgRG9jdW1lbnRhdGlvbiBlbGVtZW50IGlmIGV4aXN0cwotICAgICAgaWYgKFdTRExDb25zdGFudHMuRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRy5lcXVhbHMoY2hpbGQuZ2V0TG9jYWxOYW1lKCkpCi0gICAgICAgICYmIFdTRExDb25zdGFudHMuaXNNYXRjaGluZ05hbWVzcGFjZShjaGlsZC5nZXROYW1lc3BhY2VVUkkoKSwgV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpKQotICAgICAgewotICAgICAgICAvLyBhc3N1bWUgdGhlIGZpcnN0ICdkb2N1bWVudGF0aW9uJyBlbGVtZW50IGlzICd0aGUnIGRvY3VtZW50YXRpb24gZWxlbWVudAotICAgICAgICAvLyAndGhlcmUgY2FuIGJlIG9ubHkgb25lIScKLSAgICAgICAgaWYgKHRoZURvY3VtZW50YXRpb25FbGVtZW50ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVEb2N1bWVudGF0aW9uRWxlbWVudCA9IGNoaWxkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBnbyB0aHJ1IHRoZSBtb2RlbCBvYmplY3RzIHRvIGNvbGxlY3QgbWF0Y2hpbmcgb2JqZWN0IGZvciByZXVzZQotICAgICAgZm9yIChJdGVyYXRvciBjb250ZW50cyA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBjb250ZW50cy5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgbW9kZWxPYmplY3QgPSAoT2JqZWN0KWNvbnRlbnRzLm5leHQoKTsKLQotICAgICAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoKFdTRExFbGVtZW50KW1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCkgPT0gY2hpbGQpCi0gICAgICAgICAgewotICAgICAgICAgICAgY29udGVudHMucmVtb3ZlKCk7IC8vIHJlbW92ZXMgdGhlICdjaGlsZCcgTm9kZSBmcm9tIHRoZSByZW1haW5pbmdNb2RlbE9iamVjdHMgbGlzdAotICAgICAgICAgICAgY29udGludWUgTE9PUDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gaWYgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBoYXMgY2hhbmdlZC4uLiB1cGRhdGUgaXQKLSAgICAgIC8vCi0gICAgICBpZiAodGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQgIT0gZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyB3ZSBoYXZlbid0IGZvdW5kIGEgbWF0Y2hpbmcgbW9kZWwgb2JqZWN0IGZvciB0aGUgTm9kZSwgc2Ugd2UgbWF5IG5lZWQgdG8KLSAgICAgIC8vIGNyZWF0ZSBhIG5ldyBtb2RlbCBvYmplY3QKLSAgICAgIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgfQotCi0gICAgLy8gbm93IHdlIGNhbiByZW1vdmUgdGhlIHJlbWFpbmluZyBtb2RlbCBvYmplY3RzCi0gICAgaGFuZGxlUmVjb25jaWxpYXRpb24ocmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpCi0gIHsKLSAgICBpZiAoZW5jbG9zaW5nRGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgcmV0dXJuIGVuY2xvc2luZ0RlZmluaXRpb247Ci0KLSAgICAvLyBUQkQgLSBSZXZpc2l0Ci0gICAgLy9FT2JqZWN0IGMgPSBlQ29udGFpZXIoKTsgYyAhPSBudWxsOyBjID0gYy5lQ29udGFpbnRlcigpKQotICAgIC8vewotCi0gICAgZm9yIChXU0RMRWxlbWVudCBjb250YWluZXIgPSB0aGlzOyBjb250YWluZXIgIT0gbnVsbDsgY29udGFpbmVyID0gKChXU0RMRWxlbWVudEltcGwpY29udGFpbmVyKS5nZXRDb250YWluZXIoKSkKLSAgICB7Ci0gICAgICBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgZW5jbG9zaW5nRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbnRhaW5lcjsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0RlZmluaXRpb247Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKgotICAgcHVibGljIERlZmluaXRpb24gZ2V0Um9vdEVuY2xvc2luZ0RlZmluaXRpb24oKQotICAgewotICAgaWYgKGVuY2xvc2luZ0RlZmluaXRpb24gPT0gbnVsbCkKLSAgIHsKLSAgIFJlc291cmNlIHJlc291cmNlID0gZVJlc291cmNlKCk7Ci0gICBMaXN0IGNvbnRlbnRzID0gcmVzb3VyY2UuZ2V0Q29udGVudHMoKTsKLSAgIGlmIChjb250ZW50cy5zaXplKCkgPT0gMSAKLSAgICYmIGNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIERlZmluaXRpb24pCi0gICBlbmNsb3NpbmdEZWZpbml0aW9uID0gKERlZmluaXRpb24pY29udGVudHMuZ2V0KDApOwotICAgfSAKLSAgIHJldHVybiBlbmNsb3NpbmdEZWZpbml0aW9uOwotICAgfQotICAgKi8KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiBlQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCA/IChXU0RMRWxlbWVudCllQ29udGFpbmVyKCkgOiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbmljZVNldEF0dHJpYnV0ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGUsIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBkb20gYXR0cmlidXRlIHdyaXRlYmFjayBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSkpCi0gICAgICB7Ci0gICAgICAgIHVwZGF0aW5nRE9NID0gdHJ1ZTsKLSAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAgICAgICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlTlMobnVsbCwgYXR0cmlidXRlKSB8fCAhZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUpLmVxdWFscyh2YWx1ZSkpCi0gICAgewotICAgICAgdXBkYXRpbmdET00gPSB0cnVlOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLSAgICAgIHVwZGF0aW5nRE9NID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuaWNlQ3JlYXRlTmFtZXNwYWNlQXR0cmlidXRlKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIHVuaXF1ZSBwcmVmaXggZm9yICJuYW1lc3BhY2UuIgotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZSwgU3RyaW5nIHVyaUxpc3QpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGRvbSBhdHRyaWJ1dGUgd3JpdGViYWNrIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHVyaUxpc3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciB2YWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodXJpTGlzdCwgIiAiKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpOykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHVyaSA9IHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1cmk7Ci0gICAgICAgIGludCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZigiIyIpOwotICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaW5kZXggPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZSA9IHVyaS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBsb2NhbE5hbWUgPSB1cmkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHF1YWxpZmllciA9IFhTRENvbnN0YW50cy5sb29rdXBRdWFsaWZpZXIoZWxlbWVudCwgbmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcXVhbGlmaWVyID0gbmljZUNyZWF0ZU5hbWVzcGFjZUF0dHJpYnV0ZShuYW1lc3BhY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHFOYW1lID0gcXVhbGlmaWVyID09IG51bGwgfHwgcXVhbGlmaWVyLmxlbmd0aCgpID09IDAgPyBsb2NhbE5hbWUgOiBxdWFsaWZpZXIgKyAiOiIgKyBsb2NhbE5hbWU7Ci0KLSAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICB2YWx1ZS5hcHBlbmQoJyAnKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS5hcHBlbmQocU5hbWUpOwotICAgICAgfQotCi0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlTlMobnVsbCwgYXR0cmlidXRlKSB8fCAhZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUpLmVxdWFscyh2YWx1ZS50b1N0cmluZygpKSkKLSAgICAgIHsKLSAgICAgICAgdXBkYXRpbmdET00gPSB0cnVlOwotICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSwgdmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHVwZGF0aW5nRE9NID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpIC8vIFNob3VsZCBJIG1ha2UgdGhpcyBhYnN0cmFjdD8KLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIEVsZW1lbnQgY3JlYXRlRWxlbWVudChpbnQgbm9kZVR5cGUpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLSAgICAgIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbil0aGlzOwotICAgIGVsc2UKLSAgICAgIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIG5hbWVzcGFjZSBwcmVmaXggZm9yIHRoZSBXU0RMIG5hbWVzcGFjZQotICAgIFN0cmluZyB3c2RsTmFtZXNwYWNlID0gV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkk7Ci0gICAgU3RyaW5nIHF1YWxpZmllciA9IGRlZmluaXRpb24uZ2V0UHJlZml4KHdzZGxOYW1lc3BhY2UpOwotCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHdzZGxOYW1lc3BhY2UsIChxdWFsaWZpZXIgPT0gbnVsbCA/ICIiIDogcXVhbGlmaWVyICsgIjoiKQotICAgICAgKyBXU0RMQ29uc3RhbnRzLmdldEVsZW1lbnRUYWcobm9kZVR5cGUpKTsKLQotICAgIGlmIChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSA9PSBudWxsKQotICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7Ci0KLSAgICBpZiAoZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSAhPSBudWxsKQotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5pbXBvcnROb2RlKGdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHRydWUpKTsKLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZGVlcCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGNvbnRlbnRzID0gZ2V0V1NETENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgY29udGVudHMuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGNvbnRlbnQgPSBjb250ZW50cy5uZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEVsZW1lbnRJbXBsIGVsZW1lbnQgPSAoV1NETEVsZW1lbnRJbXBsKWNvbnRlbnQ7Ci0gICAgICAgICAgZWxlbWVudC5pc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgICAgICBlbGVtZW50LnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gICAgICAgICAgZWxlbWVudC5pc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0QmVzdFdTRExFbGVtZW50KExpc3QgZWxlbWVudFBhdGgpCi0gIHsKLSAgICBXU0RMRWxlbWVudCByZXN1bHQgPSB0aGlzOwotICAgIGZvciAoSXRlcmF0b3IgY29tcG9uZW50cyA9IGdldFdTRExDb250ZW50cygpLml0ZXJhdG9yKCk7IGNvbXBvbmVudHMuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gY29tcG9uZW50cy5uZXh0KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgewotICAgICAgICBXU0RMRWxlbWVudEltcGwgY2hpbGRXU0RMRWxlbWVudCA9IChXU0RMRWxlbWVudEltcGwpb2JqZWN0OwotCi0gICAgICAgIGlmIChlbGVtZW50UGF0aC5jb250YWlucyhjaGlsZFdTRExFbGVtZW50LmdldEVsZW1lbnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBjaGlsZFdTRExFbGVtZW50OwotICAgICAgICAgIFdTRExFbGVtZW50IGJldHRlcldTRExFbGVtZW50ID0gY2hpbGRXU0RMRWxlbWVudC5nZXRCZXN0V1NETEVsZW1lbnQoZWxlbWVudFBhdGgpOwotICAgICAgICAgIGlmIChiZXR0ZXJXU0RMRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGJldHRlcldTRExFbGVtZW50OwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghY29uc2lkZXJBbGxDb250YWluc0ZvckJlc3RXU0RMRWxlbWVudCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25zaWRlckFsbENvbnRhaW5zRm9yQmVzdFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVsZW1lbnRBdHRyaWJ1dGVzQ2hhbmdlZChFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKCFpc1VwZGF0aW5nRE9NKCkpCi0gICAgewotICAgICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgICAgewotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY2hhbmdlRm9yICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgICByZWNvbmNpbGVBdHRyaWJ1dGVzKGNoYW5nZWRFbGVtZW50KTsKLQotICAgICAgICBXU0RMRWxlbWVudEltcGwgdGhlQ29udGFpbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKHRoZUNvbnRhaW5lciAhPSBudWxsICYmIHRoZUNvbnRhaW5lci5nZXRFbGVtZW50KCkgPT0gY2hhbmdlZEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVDb250YWluZXIuZWxlbWVudEF0dHJpYnV0ZXNDaGFuZ2VkKGNoYW5nZWRFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgICAgdHJhdmVyc2VUb1Jvb3RGb3JQYXRjaGluZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGludGVybmFsIHJlY29uY2lsZSBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBET00gcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZWxlbWVudENvbnRlbnRzQ2hhbmdlZChFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKCFpc1VwZGF0aW5nRE9NKCkpCi0gICAgewotICAgICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgICAgewotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY2hhbmdlRm9yICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgICByZWNvbmNpbGVDb250ZW50cyhjaGFuZ2VkRWxlbWVudCk7Ci0KLSAgICAgICAgV1NETEVsZW1lbnRJbXBsIHRoZUNvbnRhaW5lciA9IChXU0RMRWxlbWVudEltcGwpZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICh0aGVDb250YWluZXIgIT0gbnVsbCAmJiB0aGVDb250YWluZXIuZ2V0RWxlbWVudCgpID09IGNoYW5nZWRFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgdGhlQ29udGFpbmVyLmVsZW1lbnRDb250ZW50c0NoYW5nZWQoY2hhbmdlZEVsZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgICB0cmF2ZXJzZVRvUm9vdEZvclBhdGNoaW5nKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgaW50ZXJuYWwgcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIERPTSByZWNvbmNpbGUgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcmVmaXgoTm9kZSBub2RlLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgb2xkUHJlZml4LCBTdHJpbmcgbmV3UHJlZml4KQotICB7Ci0gICAgaWYgKChuYW1lc3BhY2UgPT0gbnVsbCA/IG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCA6IG5hbWVzcGFjZS5lcXVhbHMobm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAmJiAob2xkUHJlZml4ID09IG51bGwgPyBub2RlLmdldFByZWZpeCgpID09IG51bGwgOiBvbGRQcmVmaXguZXF1YWxzKG5vZGUuZ2V0UHJlZml4KCkpKSkKLSAgICB7Ci0gICAgICBub2RlLnNldFByZWZpeChuZXdQcmVmaXgpOwotICAgIH0KLQotICAgIGZvciAoTm9kZSBjaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgdXBkYXRlUHJlZml4KGNoaWxkLCBuYW1lc3BhY2UsIG9sZFByZWZpeCwgbmV3UHJlZml4KTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldE5hbWVzcGFjZShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0VGFnTmFtZSgpOwotICAgIGludCBpbmRleCA9IG5hbWUuaW5kZXhPZigiOiIpOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIG5zUHJlZml4ID0gbnVsbDsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgbnNQcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBuc1ByZWZpeCA9ICJ4bWxucyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gbnVsbDsKLQotICAgIC8vIEZpcnN0IHRyeSB0byBsb2NhdGUgdGhlIG5hbWVzcGFjZSBVUkkgaW4gdGhlIGRlZmluaXRpb24ncyBwcmVmaXggdG8gbmFtZXNwYWNlIG1hcC4KLSAgICAvLyBUaGlzIHdpbGwgcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBleGlzdGluZyBjbGllbnRzLgotCi0gICAgRGVmaW5pdGlvbiBlbmNsb3NpbmdEZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChlbmNsb3NpbmdEZWZpbml0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlVVJJID0gZW5jbG9zaW5nRGVmaW5pdGlvbi5nZXROYW1lc3BhY2UobnNQcmVmaXgpOwotICAgIH0KLQotICAgIC8vIFdlIGRpZCBub3QgZmluZCBpdCBhdCB0aGUgdG9wIGxldmVsLCB0cnkgdG8gZmluZCBhIGxvY2FsbHkgZGVmaW5lZCBuYW1lc3BhY2UgcHJlZml4LgotCi0gICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZVVSSSA9IGdldE5hbWVzcGFjZVVSSUZyb21QcmVmaXgoZWxlbWVudCwgbnNQcmVmaXgpOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldExvY2FsTmFtZShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0VGFnTmFtZSgpOwotICAgIGludCBpbmRleCA9IG5hbWUuaW5kZXhPZigiOiIpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIHJldHVybiBuYW1lOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotICB9Ci0KLX0gLy9XU0RMRWxlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0MDlmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBXU0RMRmFjdG9yeQotewotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMRmFjdG9yeSBpbml0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExGYWN0b3J5IHRoZVdTRExGYWN0b3J5ID0gKFdTRExGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIik7IC8vJE5PTi1OTFMtMSQgCi0gICAgICBpZiAodGhlV1NETEZhY3RvcnkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZVdTRExGYWN0b3J5OwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykKLSAgewotICAgIHN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFOgotICAgICAgcmV0dXJuIGNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTjoKLSAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRToKLSAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlUGFydCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HOgotICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmcoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFOgotICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZpY2UoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVDoKLSAgICAgIHJldHVybiBjcmVhdGVQb3J0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OOgotICAgICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUOgotICAgICAgcmV0dXJuIGNyZWF0ZUltcG9ydCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTlBVVDoKLSAgICAgIHJldHVybiBjcmVhdGVJbnB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PVVRQVVQ6Ci0gICAgICByZXR1cm4gY3JlYXRlT3V0cHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkZBVUxUOgotICAgICAgcmV0dXJuIGNyZWF0ZUZhdWx0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVDoKLSAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFOgotICAgICAgcmV0dXJuIGNyZWF0ZU5hbWVzcGFjZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5UWVBFUzoKLSAgICAgIHJldHVybiBjcmVhdGVUeXBlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5RTkFNRToKLSAgICAgIHJldHVybiBjcmVhdGVRTmFtZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fVFlQRToKLSAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb25UeXBlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRPTV9FTEVNRU5UOgotICAgICAgcmV0dXJuIGNyZWF0ZURPTUVsZW1lbnRGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FWENFUFRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlV1NETEV4Y2VwdGlvbkZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ET01fRE9DVU1FTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlRE9NRG9jdW1lbnRGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5RTkFNRToKLSAgICAgIHJldHVybiBjb252ZXJ0UU5hbWVUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fVFlQRToKLSAgICAgIHJldHVybiBjb252ZXJ0T3BlcmF0aW9uVHlwZVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRPTV9FTEVNRU5UOgotICAgICAgcmV0dXJuIGNvbnZlcnRET01FbGVtZW50VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FWENFUFRJT046Ci0gICAgICByZXR1cm4gY29udmVydFdTRExFeGNlcHRpb25Ub1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ET01fRE9DVU1FTlQ6Ci0gICAgICByZXR1cm4gY29udmVydERPTURvY3VtZW50VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZSBjcmVhdGVQb3J0VHlwZSgpCi0gIHsKLSAgICBQb3J0VHlwZUltcGwgcG9ydFR5cGUgPSBuZXcgUG9ydFR5cGVJbXBsKCk7Ci0gICAgcmV0dXJuIHBvcnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uIGNyZWF0ZU9wZXJhdGlvbigpCi0gIHsKLSAgICBPcGVyYXRpb25JbXBsIG9wZXJhdGlvbiA9IG5ldyBPcGVyYXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgY3JlYXRlTWVzc2FnZSgpCi0gIHsKLSAgICBNZXNzYWdlSW1wbCBtZXNzYWdlID0gbmV3IE1lc3NhZ2VJbXBsKCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGNyZWF0ZVBhcnQoKQotICB7Ci0gICAgUGFydEltcGwgcGFydCA9IG5ldyBQYXJ0SW1wbCgpOwotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZyBjcmVhdGVCaW5kaW5nKCkKLSAgewotICAgIEJpbmRpbmdJbXBsIGJpbmRpbmcgPSBuZXcgQmluZGluZ0ltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gY3JlYXRlQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uSW1wbCBiaW5kaW5nT3BlcmF0aW9uID0gbmV3IEJpbmRpbmdPcGVyYXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoKQotICB7Ci0gICAgU2VydmljZUltcGwgc2VydmljZSA9IG5ldyBTZXJ2aWNlSW1wbCgpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUG9ydCBjcmVhdGVQb3J0KCkKLSAgewotICAgIFBvcnRJbXBsIHBvcnQgPSBuZXcgUG9ydEltcGwoKTsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwoKTsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uSW1wbCgpOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGNyZWF0ZUltcG9ydCgpCi0gIHsKLSAgICBJbXBvcnRJbXBsIGltcG9ydF8gPSBuZXcgSW1wb3J0SW1wbCgpOwotICAgIHJldHVybiBpbXBvcnRfOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSW5wdXQgY3JlYXRlSW5wdXQoKQotICB7Ci0gICAgSW5wdXRJbXBsIGlucHV0ID0gbmV3IElucHV0SW1wbCgpOwotICAgIHJldHVybiBpbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE91dHB1dCBjcmVhdGVPdXRwdXQoKQotICB7Ci0gICAgT3V0cHV0SW1wbCBvdXRwdXQgPSBuZXcgT3V0cHV0SW1wbCgpOwotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBGYXVsdCBjcmVhdGVGYXVsdCgpCi0gIHsKLSAgICBGYXVsdEltcGwgZmF1bHQgPSBuZXcgRmF1bHRJbXBsKCk7Ci0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGNyZWF0ZUJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXRJbXBsIGJpbmRpbmdJbnB1dCA9IG5ldyBCaW5kaW5nSW5wdXRJbXBsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPdXRwdXQgY3JlYXRlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0SW1wbCBiaW5kaW5nT3V0cHV0ID0gbmV3IEJpbmRpbmdPdXRwdXRJbXBsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgY3JlYXRlQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIEJpbmRpbmdGYXVsdEltcGwgYmluZGluZ0ZhdWx0ID0gbmV3IEJpbmRpbmdGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTmFtZXNwYWNlIGNyZWF0ZU5hbWVzcGFjZSgpCi0gIHsKLSAgICBOYW1lc3BhY2VJbXBsIG5hbWVzcGFjZSA9IG5ldyBOYW1lc3BhY2VJbXBsKCk7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFR5cGVzIGNyZWF0ZVR5cGVzKCkKLSAgewotICAgIFR5cGVzSW1wbCB0eXBlcyA9IG5ldyBUeXBlc0ltcGwoKTsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50ID0gbmV3IFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwoKTsKLSAgICByZXR1cm4gdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50ID0gbmV3IFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpOwotICAgIHJldHVybiB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGNyZWF0ZVFOYW1lRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChRTmFtZSlzdXBlci5jcmVhdGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0UU5hbWVUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25UeXBlIGNyZWF0ZU9wZXJhdGlvblR5cGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICBpZiAoIlJFUVVFU1RfUkVTUE9OU0UiLmVxdWFscyhpbml0aWFsVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0U7Ci0gICAgfQotICAgIGVsc2UgaWYgKCJPTkVfV0FZIi5lcXVhbHMoaW5pdGlhbFZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT3BlcmF0aW9uVHlwZS5PTkVfV0FZOwotICAgIH0KLSAgICBlbHNlIGlmICgiTk9USUZJQ0FUSU9OIi5lcXVhbHMoaW5pdGlhbFZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT047Ci0gICAgfQotICAgIGVsc2UgaWYgKCJTT0xJQ0lUX1JFU1BPTlNFIi5lcXVhbHMoaW5pdGlhbFZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0T3BlcmF0aW9uVHlwZVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVET01FbGVtZW50RnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChFbGVtZW50KXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRET01FbGVtZW50VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMRXhjZXB0aW9uIGNyZWF0ZVdTRExFeGNlcHRpb25Gcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKFdTRExFeGNlcHRpb24pc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydFdTRExFeGNlcHRpb25Ub1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGNyZWF0ZURPTURvY3VtZW50RnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChEb2N1bWVudClzdXBlci5jcmVhdGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0RE9NRG9jdW1lbnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExQYWNrYWdlIGdldFdTRExQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoV1NETFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLQotICAvLwotICAvLwotICAvLwotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkobmFtZXNwYWNlKTsKLSAgICBpZiAoZmFjdG9yeSAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IGNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgLy8gUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0KLSAgICAgIFFOYW1lIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnRUeXBlKGVsZW1lbnRUeXBlKTsKLSAgICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgcHVibGljIHZvaWQgc2V0QWx3YXlzVXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KGJvb2xlYW4gdmFsdWUpCi0gICB7Ci0gICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcHJlY2F0ZWQ6IFdTRExGYWN0b3J5SW1wbC5zZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMiKTsKLSAgIH0KLSAgICovCi19IC8vV1NETEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETFBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjIzOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuQXR0cmlidXRlRXh0ZW5zaWJsZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRWxlbWVudEV4dGVuc2libGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhY2thZ2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFdTRExQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFdTRExQYWNrYWdlCi17Ci0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgd3NkbEVsZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgcG9ydFR5cGVFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgb3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG1lc3NhZ2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgcGFydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBiaW5kaW5nRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc2VydmljZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBwb3J0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGRlZmluaXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaW1wb3J0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGV4dGVuc2libGVFbGVtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlucHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG91dHB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBmYXVsdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBiaW5kaW5nSW5wdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgYmluZGluZ091dHB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBiaW5kaW5nRmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbmFtZXNwYWNlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlQb3J0VHlwZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpT3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlJbnB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpT3V0cHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlGYXVsdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpTWVzc2FnZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpUGFydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpU2VydmljZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpUG9ydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpQmluZGluZ0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpQmluZGluZ09wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpQmluZGluZ0lucHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlCaW5kaW5nT3V0cHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlCaW5kaW5nRmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlEZWZpbml0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlJbXBvcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUxpc3RFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaU1hcEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpdXJsRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlFeHRlbnNpb25SZWdpc3RyeUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyB0eXBlc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpSXRlcmF0b3JFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaVR5cGVzRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBtZXNzYWdlUmVmZXJlbmNlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlFbGVtZW50RXh0ZW5zaWJsZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpQXR0cmlidXRlRXh0ZW5zaWJsZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpT2JqZWN0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlTY2hlbWFFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgcU5hbWVFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgb3BlcmF0aW9uVHlwZUVEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVEYXRhVHlwZSBkb21FbGVtZW50RURhdGFUeXBlID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRURhdGFUeXBlIHdzZGxFeGNlcHRpb25FRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgZG9tRG9jdW1lbnRFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0gICAqIHBhY2thZ2UgVVJJIHZhbHVlLgotICAgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0gICAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0gICAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0gICAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZU5TX1VSSQotICAgKiBAc2VlICNpbml0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBXU0RMUGFja2FnZUltcGwoKQotICB7Ci0gICAgc3VwZXIoZU5TX1VSSSwgV1NETEZhY3RvcnkuZUlOU1RBTkNFKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLSAgICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLSAgICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLSAgICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0gICAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLSAgICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLSAgICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotICAgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLSAgICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotICAgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotICAgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotICAgKiB0aG9zZSBvZiBhbm90aGVyLgotICAgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0gICAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2VOU19VUkkKLSAgICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETFBhY2thZ2UgaW5pdCgpCi0gIHsKLSAgICBpZiAoaXNJbml0ZWQpCi0gICAgICByZXR1cm4gKFdTRExQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFdTRExQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotICAgIFdTRExQYWNrYWdlSW1wbCB0aGVXU0RMUGFja2FnZSA9IChXU0RMUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgV1NETFBhY2thZ2VJbXBsCi0gICAgICA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFdTRExQYWNrYWdlSW1wbCgpKTsKLQotICAgIGlzSW5pdGVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotICAgIFhTRFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOwotCi0gICAgLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLSAgICB0aGVXU0RMUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLSAgICB0aGVXU0RMUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0gICAgdGhlV1NETFBhY2thZ2UuZnJlZXplKCk7Ci0KLSAgICByZXR1cm4gdGhlV1NETFBhY2thZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpd3NkbEVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpd3NkbEVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRQb3J0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gcG9ydFR5cGVFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFBvcnRUeXBlX1FOYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwb3J0VHlwZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3J0VHlwZV9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBvcnRUeXBlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlwb3J0VHlwZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRPcGVyYXRpb25fU3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRPcGVyYXRpb25fTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRUlucHV0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlvcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRUZhdWx0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE1lc3NhZ2VfUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW1lc3NhZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW1lc3NhZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0TWVzc2FnZV9FUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1lc3NhZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRQYXJ0KCkKLSAgewotICAgIHJldHVybiBwYXJ0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYXJ0X05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGFydF9FbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYXJ0X1R5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwYXJ0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFBhcnRfVHlwZURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UGFydF9FTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEJpbmRpbmdfUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ19VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ19FUG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXJ2aWNlX1FOYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzZXJ2aWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNlcnZpY2VfVW5kZWZpbmVkKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzZXJ2aWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFNlcnZpY2VfRVBvcnRzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlzZXJ2aWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0UG9ydCgpCi0gIHsKLSAgICByZXR1cm4gcG9ydEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9ydF9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFBvcnRfRUJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX1RhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldERlZmluaXRpb25fUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlpbXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlpbXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0SW1wb3J0X0VEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlpbXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0SW1wb3J0X0VTY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWltcG9ydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEV4dGVuc2libGVFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBleHRlbnNpYmxlRWxlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gaW5wdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0T3V0cHV0KCkKLSAgewotICAgIHJldHVybiBvdXRwdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0lucHV0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nSW5wdXRfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdJbnB1dEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEJpbmRpbmdPdXRwdXRfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ091dHB1dEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdPdXRwdXRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRCaW5kaW5nRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdGYXVsdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ0ZhdWx0X05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZXNwYWNlX1VSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZXNwYWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVzcGFjZV9QcmVmaXgoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW5hbWVzcGFjZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElQb3J0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gaVBvcnRUeXBlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlPcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUlucHV0KCkKLSAgewotICAgIHJldHVybiBpSW5wdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gaU91dHB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlGYXVsdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gaU1lc3NhZ2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGlQYXJ0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBpU2VydmljZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaVBvcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGlCaW5kaW5nRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ09wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ0lucHV0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ091dHB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ0ZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gaUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBpRGVmaW5pdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSW1wb3J0KCkKLSAgewotICAgIHJldHVybiBpSW1wb3J0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElMaXN0KCkKLSAgewotICAgIHJldHVybiBpTGlzdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTWFwKCkKLSAgewotICAgIHJldHVybiBpTWFwRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElVUkwoKQotICB7Ci0gICAgcmV0dXJuIGl1cmxFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBpRXh0ZW5zaW9uUmVnaXN0cnlFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIHR5cGVzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElJdGVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gaUl0ZXJhdG9yRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gaVR5cGVzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfRG9jdW1lbnRCYXNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSl4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSltZXNzYWdlUmVmZXJlbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJRWxlbWVudEV4dGVuc2libGUoKQotICB7Ci0gICAgcmV0dXJuIGlFbGVtZW50RXh0ZW5zaWJsZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJQXR0cmlidXRlRXh0ZW5zaWJsZSgpCi0gIHsKLSAgICByZXR1cm4gaUF0dHJpYnV0ZUV4dGVuc2libGVFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gaU9iamVjdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU2NoZW1hKCkKLSAgewotICAgIHJldHVybiBpU2NoZW1hRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZUVEYXRhVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25UeXBlRURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldERPTUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGRvbUVsZW1lbnRFRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFRGF0YVR5cGUgZ2V0V1NETEV4Y2VwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gd3NkbEV4Y2VwdGlvbkVEYXRhVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRET01Eb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gZG9tRG9jdW1lbnRFRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMRmFjdG9yeSBnZXRXU0RMRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gKFdTRExGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLSAgICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0NyZWF0ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLQotICAgIC8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotICAgIHdzZGxFbGVtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKFdTRExfRUxFTUVOVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZSh3c2RsRWxlbWVudEVDbGFzcywgV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUod3NkbEVsZW1lbnRFQ2xhc3MsIFdTRExfRUxFTUVOVF9fRUxFTUVOVCk7Ci0KLSAgICBwb3J0VHlwZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1JUX1RZUEUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUocG9ydFR5cGVFQ2xhc3MsIFBPUlRfVFlQRV9fUU5BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUocG9ydFR5cGVFQ2xhc3MsIFBPUlRfVFlQRV9fVU5ERUZJTkVEKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHBvcnRUeXBlRUNsYXNzLCBQT1JUX1RZUEVfX0VPUEVSQVRJT05TKTsKLQotICAgIG9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhPUEVSQVRJT04pOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX1NUWUxFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19OQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19VTkRFRklORUQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX0VJTlBVVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fRU9VVFBVVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fRUZBVUxUUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORyk7Ci0KLSAgICBtZXNzYWdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1FU1NBR0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUobWVzc2FnZUVDbGFzcywgTUVTU0FHRV9fUU5BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUobWVzc2FnZUVDbGFzcywgTUVTU0FHRV9fVU5ERUZJTkVEKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG1lc3NhZ2VFQ2xhc3MsIE1FU1NBR0VfX0VQQVJUUyk7Ci0KLSAgICBwYXJ0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFBBUlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUocGFydEVDbGFzcywgUEFSVF9fTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShwYXJ0RUNsYXNzLCBQQVJUX19FTEVNRU5UX05BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUocGFydEVDbGFzcywgUEFSVF9fVFlQRV9OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHBhcnRFQ2xhc3MsIFBBUlRfX1RZUEVfREVGSU5JVElPTik7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShwYXJ0RUNsYXNzLCBQQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHBhcnRFQ2xhc3MsIFBBUlRfX0VNRVNTQUdFKTsKLQotICAgIGJpbmRpbmdFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQklORElORyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShiaW5kaW5nRUNsYXNzLCBCSU5ESU5HX19RTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShiaW5kaW5nRUNsYXNzLCBCSU5ESU5HX19VTkRFRklORUQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ0VDbGFzcywgQklORElOR19fRVBPUlRfVFlQRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nRUNsYXNzLCBCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TKTsKLQotICAgIGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQklORElOR19PUEVSQVRJT04pOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoYmluZGluZ09wZXJhdGlvbkVDbGFzcywgQklORElOR19PUEVSQVRJT05fX05BTUUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ09wZXJhdGlvbkVDbGFzcywgQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04pOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ09wZXJhdGlvbkVDbGFzcywgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ09wZXJhdGlvbkVDbGFzcywgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyk7Ci0KLSAgICBzZXJ2aWNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNFUlZJQ0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc2VydmljZUVDbGFzcywgU0VSVklDRV9fUU5BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc2VydmljZUVDbGFzcywgU0VSVklDRV9fVU5ERUZJTkVEKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNlcnZpY2VFQ2xhc3MsIFNFUlZJQ0VfX0VQT1JUUyk7Ci0KLSAgICBwb3J0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFBPUlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUocG9ydEVDbGFzcywgUE9SVF9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShwb3J0RUNsYXNzLCBQT1JUX19FQklORElORyk7Ci0KLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFWFRFTlNJQklMSVRZX0VMRU1FTlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsIEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsIEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFKTsKLQotICAgIGRlZmluaXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVGSU5JVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0xPQ0FUSU9OKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX1FOQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VOQ09ESU5HKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VJTVBPUlRTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VUWVBFUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FTUVTU0FHRVMpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRVBPUlRfVFlQRVMpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRUJJTkRJTkdTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VTRVJWSUNFUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FTkFNRVNQQUNFUyk7Ci0KLSAgICBpbXBvcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1QT1JUKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGltcG9ydEVDbGFzcywgSU1QT1JUX19OQU1FU1BBQ0VfVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGltcG9ydEVDbGFzcywgSU1QT1JUX19MT0NBVElPTl9VUkkpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoaW1wb3J0RUNsYXNzLCBJTVBPUlRfX0VERUZJTklUSU9OKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGltcG9ydEVDbGFzcywgSU1QT1JUX19FU0NIRU1BKTsKLQotICAgIGV4dGVuc2libGVFbGVtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYVEVOU0lCTEVfRUxFTUVOVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShleHRlbnNpYmxlRWxlbWVudEVDbGFzcywgRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyk7Ci0KLSAgICBpbnB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlBVVCk7Ci0KLSAgICBvdXRwdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoT1VUUFVUKTsKLQotICAgIGZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKEZBVUxUKTsKLQotICAgIGJpbmRpbmdJbnB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhCSU5ESU5HX0lOUFVUKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGJpbmRpbmdJbnB1dEVDbGFzcywgQklORElOR19JTlBVVF9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nSW5wdXRFQ2xhc3MsIEJJTkRJTkdfSU5QVVRfX0VJTlBVVCk7Ci0KLSAgICBiaW5kaW5nT3V0cHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKEJJTkRJTkdfT1VUUFVUKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGJpbmRpbmdPdXRwdXRFQ2xhc3MsIEJJTkRJTkdfT1VUUFVUX19OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdPdXRwdXRFQ2xhc3MsIEJJTkRJTkdfT1VUUFVUX19FT1VUUFVUKTsKLQotICAgIGJpbmRpbmdGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhCSU5ESU5HX0ZBVUxUKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGJpbmRpbmdGYXVsdEVDbGFzcywgQklORElOR19GQVVMVF9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nRmF1bHRFQ2xhc3MsIEJJTkRJTkdfRkFVTFRfX0VGQVVMVCk7Ci0KLSAgICBuYW1lc3BhY2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTkFNRVNQQUNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG5hbWVzcGFjZUVDbGFzcywgTkFNRVNQQUNFX19VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUobmFtZXNwYWNlRUNsYXNzLCBOQU1FU1BBQ0VfX1BSRUZJWCk7Ci0KLSAgICBpUG9ydFR5cGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVBPUlRfVFlQRSk7Ci0KLSAgICBpT3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKElPUEVSQVRJT04pOwotCi0gICAgaUlucHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElJTlBVVCk7Ci0KLSAgICBpT3V0cHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElPVVRQVVQpOwotCi0gICAgaUZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElGQVVMVCk7Ci0KLSAgICBpTWVzc2FnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTUVTU0FHRSk7Ci0KLSAgICBpUGFydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJUEFSVCk7Ci0KLSAgICBpU2VydmljZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU0VSVklDRSk7Ci0KLSAgICBpUG9ydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJUE9SVCk7Ci0KLSAgICBpQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJQklORElORyk7Ci0KLSAgICBpQmluZGluZ09wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJQklORElOR19PUEVSQVRJT04pOwotCi0gICAgaUJpbmRpbmdJbnB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJQklORElOR19JTlBVVCk7Ci0KLSAgICBpQmluZGluZ091dHB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJQklORElOR19PVVRQVVQpOwotCi0gICAgaUJpbmRpbmdGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJQklORElOR19GQVVMVCk7Ci0KLSAgICBpRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUVYVEVOU0lCSUxJVFlfRUxFTUVOVCk7Ci0KLSAgICBpRGVmaW5pdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJREVGSU5JVElPTik7Ci0KLSAgICBpSW1wb3J0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElJTVBPUlQpOwotCi0gICAgaUxpc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUxJU1QpOwotCi0gICAgaU1hcEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTUFQKTsKLQotICAgIGl1cmxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVVSTCk7Ci0KLSAgICBpRXh0ZW5zaW9uUmVnaXN0cnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUVYVEVOU0lPTl9SRUdJU1RSWSk7Ci0KLSAgICB0eXBlc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUWVBFUyk7Ci0KLSAgICBpSXRlcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUlURVJBVE9SKTsKLQotICAgIGlUeXBlc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJVFlQRVMpOwotCi0gICAgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOKTsKLQotICAgIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLCBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRfQkFTRV9VUkkpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsIFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEpOwotCi0gICAgbWVzc2FnZVJlZmVyZW5jZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNRVNTQUdFX1JFRkVSRU5DRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLCBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLCBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UpOwotCi0gICAgaUVsZW1lbnRFeHRlbnNpYmxlRUNsYXNzID0gY3JlYXRlRUNsYXNzKElFTEVNRU5UX0VYVEVOU0lCTEUpOwotCi0gICAgaUF0dHJpYnV0ZUV4dGVuc2libGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUFUVFJJQlVURV9FWFRFTlNJQkxFKTsKLQotICAgIGlPYmplY3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU9CSkVDVCk7Ci0KLSAgICBpU2NoZW1hRUNsYXNzID0gY3JlYXRlRUNsYXNzKElTQ0hFTUEpOwotCi0gICAgLy8gQ3JlYXRlIGRhdGEgdHlwZXMKLSAgICBxTmFtZUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShRTkFNRSk7Ci0gICAgb3BlcmF0aW9uVHlwZUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShPUEVSQVRJT05fVFlQRSk7Ci0gICAgZG9tRWxlbWVudEVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShET01fRUxFTUVOVCk7Ci0gICAgd3NkbEV4Y2VwdGlvbkVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShXU0RMX0VYQ0VQVElPTik7Ci0gICAgZG9tRG9jdW1lbnRFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoRE9NX0RPQ1VNRU5UKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLSAgICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHBhY2thZ2UKLSAgICBzZXROYW1lKGVOQU1FKTsKLSAgICBzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLSAgICBzZXROc1VSSShlTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLSAgICBYU0RQYWNrYWdlIHRoZVhTRFBhY2thZ2UgPSAoWFNEUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYU0RQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotICAgIHBvcnRUeXBlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgcG9ydFR5cGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJUG9ydFR5cGUoKSk7Ci0gICAgb3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgb3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU9wZXJhdGlvbigpKTsKLSAgICBtZXNzYWdlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgbWVzc2FnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElNZXNzYWdlKCkpOwotICAgIHBhcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBwYXJ0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVBhcnQoKSk7Ci0gICAgYmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJQmluZGluZygpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nT3BlcmF0aW9uKCkpOwotICAgIHNlcnZpY2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBzZXJ2aWNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNlcnZpY2UoKSk7Ci0gICAgcG9ydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIHBvcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJUG9ydCgpKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFdTRExFbGVtZW50KCkpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGRlZmluaXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBkZWZpbml0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SURlZmluaXRpb24oKSk7Ci0gICAgaW1wb3J0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgaW1wb3J0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUltcG9ydCgpKTsKLSAgICBleHRlbnNpYmxlRWxlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFdTRExFbGVtZW50KCkpOwotICAgIGV4dGVuc2libGVFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUVsZW1lbnRFeHRlbnNpYmxlKCkpOwotICAgIGV4dGVuc2libGVFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUF0dHJpYnV0ZUV4dGVuc2libGUoKSk7Ci0gICAgaW5wdXRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRNZXNzYWdlUmVmZXJlbmNlKCkpOwotICAgIGlucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUlucHV0KCkpOwotICAgIG91dHB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7Ci0gICAgb3V0cHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU91dHB1dCgpKTsKLSAgICBmYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7Ci0gICAgZmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRmF1bHQoKSk7Ci0gICAgYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUJpbmRpbmdJbnB1dCgpKTsKLSAgICBiaW5kaW5nT3V0cHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ091dHB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nT3V0cHV0KCkpOwotICAgIGJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nRmF1bHQoKSk7Ci0gICAgaVBvcnRUeXBlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUF0dHJpYnV0ZUV4dGVuc2libGUoKSk7Ci0gICAgaU9wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElFbGVtZW50RXh0ZW5zaWJsZSgpKTsKLSAgICBpSW5wdXRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJQXR0cmlidXRlRXh0ZW5zaWJsZSgpKTsKLSAgICBpT3V0cHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUF0dHJpYnV0ZUV4dGVuc2libGUoKSk7Ci0gICAgaUZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUF0dHJpYnV0ZUV4dGVuc2libGUoKSk7Ci0gICAgaU1lc3NhZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRWxlbWVudEV4dGVuc2libGUoKSk7Ci0gICAgaVBhcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJQXR0cmlidXRlRXh0ZW5zaWJsZSgpKTsKLSAgICBpU2VydmljZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElFbGVtZW50RXh0ZW5zaWJsZSgpKTsKLSAgICBpUG9ydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElFbGVtZW50RXh0ZW5zaWJsZSgpKTsKLSAgICBpQmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElFbGVtZW50RXh0ZW5zaWJsZSgpKTsKLSAgICBpQmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElFbGVtZW50RXh0ZW5zaWJsZSgpKTsKLSAgICBpQmluZGluZ0lucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUVsZW1lbnRFeHRlbnNpYmxlKCkpOwotICAgIGlCaW5kaW5nT3V0cHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUVsZW1lbnRFeHRlbnNpYmxlKCkpOwotICAgIGlCaW5kaW5nRmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRWxlbWVudEV4dGVuc2libGUoKSk7Ci0gICAgaURlZmluaXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRWxlbWVudEV4dGVuc2libGUoKSk7Ci0gICAgaUltcG9ydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElBdHRyaWJ1dGVFeHRlbnNpYmxlKCkpOwotICAgIHR5cGVzRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgdHlwZXNFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJVHlwZXMoKSk7Ci0gICAgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTY2hlbWEoKSk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGlTY2hlbWFFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotICAgIGluaXRFQ2xhc3Mod3NkbEVsZW1lbnRFQ2xhc3MsIFdTRExFbGVtZW50LmNsYXNzLCAiV1NETEVsZW1lbnQiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0V1NETEVsZW1lbnRfRG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwKLSAgICAgIHRoaXMuZ2V0RE9NRWxlbWVudCgpLAotICAgICAgImRvY3VtZW50YXRpb25FbGVtZW50IiwgbnVsbCwgMCwgMSwgV1NETEVsZW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFdTRExFbGVtZW50X0VsZW1lbnQoKSwKLSAgICAgIHRoaXMuZ2V0RE9NRWxlbWVudCgpLAotICAgICAgImVsZW1lbnQiLCBudWxsLCAwLCAxLCBXU0RMRWxlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKHdzZGxFbGVtZW50RUNsYXNzLCB0aGlzLmdldERlZmluaXRpb24oKSwgImdldEVuY2xvc2luZ0RlZmluaXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRU9wZXJhdGlvbiBvcCA9IGFkZEVPcGVyYXRpb24od3NkbEVsZW1lbnRFQ2xhc3MsIG51bGwsICJzZXRFbmNsb3NpbmdEZWZpbml0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldERlZmluaXRpb24oKSwgImRlZmluaXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhwb3J0VHlwZUVDbGFzcywgUG9ydFR5cGUuY2xhc3MsICJQb3J0VHlwZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0UG9ydFR5cGVfUU5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJxTmFtZSIsIG51bGwsIDAsIDEsIFBvcnRUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRQb3J0VHlwZV9VbmRlZmluZWQoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLAotICAgICAgInVuZGVmaW5lZCIsIG51bGwsIDAsIDEsIFBvcnRUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpLAotICAgICAgdGhpcy5nZXRPcGVyYXRpb24oKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU9wZXJhdGlvbnMiLCBudWxsLCAwLCAtMSwgUG9ydFR5cGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Mob3BlcmF0aW9uRUNsYXNzLCBPcGVyYXRpb24uY2xhc3MsICJPcGVyYXRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE9wZXJhdGlvbl9TdHlsZSgpLAotICAgICAgdGhpcy5nZXRPcGVyYXRpb25UeXBlKCksCi0gICAgICAic3R5bGUiLCBudWxsLCAwLCAxLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE9wZXJhdGlvbl9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE9wZXJhdGlvbl9VbmRlZmluZWQoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLAotICAgICAgInVuZGVmaW5lZCIsIG51bGwsIDAsIDEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0T3BlcmF0aW9uX0VJbnB1dCgpLAotICAgICAgdGhpcy5nZXRJbnB1dCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlSW5wdXQiLCBudWxsLCAwLCAxLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE9wZXJhdGlvbl9FT3V0cHV0KCksCi0gICAgICB0aGlzLmdldE91dHB1dCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlT3V0cHV0IiwgbnVsbCwgMCwgMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRPcGVyYXRpb25fRUZhdWx0cygpLAotICAgICAgdGhpcy5nZXRGYXVsdCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlRmF1bHRzIiwgbnVsbCwgMCwgLTEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpLAotICAgICAgdGhpcy5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJhbWV0ZXJPcmRlcmluZyIsIG51bGwsIDAsIC0xLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MobWVzc2FnZUVDbGFzcywgTWVzc2FnZS5jbGFzcywgIk1lc3NhZ2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE1lc3NhZ2VfUU5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJxTmFtZSIsIG51bGwsIDAsIDEsIE1lc3NhZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE1lc3NhZ2VfVW5kZWZpbmVkKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwKLSAgICAgICJ1bmRlZmluZWQiLCBudWxsLCAwLCAxLCBNZXNzYWdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRNZXNzYWdlX0VQYXJ0cygpLAotICAgICAgdGhpcy5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0cyIsIG51bGwsIDAsIC0xLCBNZXNzYWdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHBhcnRFQ2xhc3MsIFBhcnQuY2xhc3MsICJQYXJ0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRQYXJ0X05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIFBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFBhcnRfRWxlbWVudE5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJlbGVtZW50TmFtZSIsIG51bGwsIDAsIDEsIFBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFBhcnRfVHlwZU5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJ0eXBlTmFtZSIsIG51bGwsIDAsIDEsIFBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFBhcnRfVHlwZURlZmluaXRpb24oKSwKLSAgICAgIHRoZVhTRFBhY2thZ2UuZ2V0WFNEVHlwZURlZmluaXRpb24oKSwKLSAgICAgIG51bGwsCi0gICAgICAidHlwZURlZmluaXRpb24iLCBudWxsLCAwLCAxLCBQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpLAotICAgICAgdGhlWFNEUGFja2FnZS5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSwKLSAgICAgIG51bGwsCi0gICAgICAiZWxlbWVudERlY2xhcmF0aW9uIiwgbnVsbCwgMCwgMSwgUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0UGFydF9FTWVzc2FnZSgpLAotICAgICAgdGhpcy5nZXRNZXNzYWdlKCksCi0gICAgICBudWxsLAotICAgICAgImVNZXNzYWdlIiwgbnVsbCwgMCwgMSwgUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhiaW5kaW5nRUNsYXNzLCBCaW5kaW5nLmNsYXNzLCAiQmluZGluZyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0QmluZGluZ19RTmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgInFOYW1lIiwgbnVsbCwgMCwgMSwgQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0QmluZGluZ19VbmRlZmluZWQoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLAotICAgICAgInVuZGVmaW5lZCIsIG51bGwsIDAsIDEsIEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdfRVBvcnRUeXBlKCksCi0gICAgICB0aGlzLmdldFBvcnRUeXBlKCksCi0gICAgICBudWxsLAotICAgICAgImVQb3J0VHlwZSIsIG51bGwsIDEsIDEsIEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCksCi0gICAgICB0aGlzLmdldEJpbmRpbmdPcGVyYXRpb24oKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUJpbmRpbmdPcGVyYXRpb25zIiwgbnVsbCwgMCwgLTEsIEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ09wZXJhdGlvbkVDbGFzcywgQmluZGluZ09wZXJhdGlvbi5jbGFzcywgIkJpbmRpbmdPcGVyYXRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgQmluZGluZ09wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCksCi0gICAgICB0aGlzLmdldE9wZXJhdGlvbigpLAotICAgICAgbnVsbCwKLSAgICAgICJlT3BlcmF0aW9uIiwgbnVsbCwgMSwgMSwgQmluZGluZ09wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0KCksCi0gICAgICB0aGlzLmdldEJpbmRpbmdJbnB1dCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlQmluZGluZ0lucHV0IiwgbnVsbCwgMCwgMSwgQmluZGluZ09wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpLAotICAgICAgdGhpcy5nZXRCaW5kaW5nT3V0cHV0KCksCi0gICAgICBudWxsLAotICAgICAgImVCaW5kaW5nT3V0cHV0IiwgbnVsbCwgMCwgMSwgQmluZGluZ09wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0ZhdWx0cygpLAotICAgICAgdGhpcy5nZXRCaW5kaW5nRmF1bHQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUJpbmRpbmdGYXVsdHMiLCBudWxsLCAwLCAtMSwgQmluZGluZ09wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzZXJ2aWNlRUNsYXNzLCBTZXJ2aWNlLmNsYXNzLCAiU2VydmljZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U2VydmljZV9RTmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgInFOYW1lIiwgbnVsbCwgMCwgMSwgU2VydmljZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U2VydmljZV9VbmRlZmluZWQoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLAotICAgICAgInVuZGVmaW5lZCIsIG51bGwsIDAsIDEsIFNlcnZpY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFNlcnZpY2VfRVBvcnRzKCksCi0gICAgICB0aGlzLmdldFBvcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBvcnRzIiwgbnVsbCwgMCwgLTEsIFNlcnZpY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MocG9ydEVDbGFzcywgUG9ydC5jbGFzcywgIlBvcnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFBvcnRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgUG9ydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0UG9ydF9FQmluZGluZygpLAotICAgICAgdGhpcy5nZXRCaW5kaW5nKCksCi0gICAgICBudWxsLAotICAgICAgImVCaW5kaW5nIiwgbnVsbCwgMSwgMSwgUG9ydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLAotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsCi0gICAgICAiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwKLSAgICAgICJyZXF1aXJlZCIsIG51bGwsIDAsIDEsIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgImVsZW1lbnRUeXBlIiwgbnVsbCwgMCwgMSwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhkZWZpbml0aW9uRUNsYXNzLCBEZWZpbml0aW9uLmNsYXNzLCAiRGVmaW5pdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidGFyZ2V0TmFtZXNwYWNlIiwgbnVsbCwgMCwgMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbigpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJsb2NhdGlvbiIsIG51bGwsIDAsIDEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldERlZmluaXRpb25fUU5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJxTmFtZSIsIG51bGwsIDAsIDEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldERlZmluaXRpb25fRW5jb2RpbmcoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAiZW5jb2RpbmciLCBudWxsLCAwLCAxLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VJbXBvcnRzKCksCi0gICAgICB0aGlzLmdldEltcG9ydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlSW1wb3J0cyIsIG51bGwsIDAsIC0xLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VUeXBlcygpLAotICAgICAgdGhpcy5nZXRUeXBlcygpLAotICAgICAgbnVsbCwKLSAgICAgICJlVHlwZXMiLCBudWxsLCAwLCAxLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VNZXNzYWdlcygpLAotICAgICAgdGhpcy5nZXRNZXNzYWdlKCksCi0gICAgICBudWxsLAotICAgICAgImVNZXNzYWdlcyIsIG51bGwsIDAsIC0xLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKSwKLSAgICAgIHRoaXMuZ2V0UG9ydFR5cGUoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBvcnRUeXBlcyIsIG51bGwsIDAsIC0xLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VCaW5kaW5ncygpLAotICAgICAgdGhpcy5nZXRCaW5kaW5nKCksCi0gICAgICBudWxsLAotICAgICAgImVCaW5kaW5ncyIsIG51bGwsIDAsIC0xLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpLAotICAgICAgdGhpcy5nZXRTZXJ2aWNlKCksCi0gICAgICBudWxsLAotICAgICAgImVTZXJ2aWNlcyIsIG51bGwsIDAsIC0xLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCksCi0gICAgICB0aGlzLmdldE5hbWVzcGFjZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlTmFtZXNwYWNlcyIsIG51bGwsIDAsIC0xLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGRlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0RE9NRG9jdW1lbnQoKSwgImdldERvY3VtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihkZWZpbml0aW9uRUNsYXNzLCBudWxsLCAic2V0RG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0RE9NRG9jdW1lbnQoKSwgImRvY3VtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaW1wb3J0RUNsYXNzLCBJbXBvcnQuY2xhc3MsICJJbXBvcnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEltcG9ydF9OYW1lc3BhY2VVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZXNwYWNlVVJJIiwgbnVsbCwgMCwgMSwgSW1wb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRJbXBvcnRfTG9jYXRpb25VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibG9jYXRpb25VUkkiLCBudWxsLCAwLCAxLCBJbXBvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEltcG9ydF9FRGVmaW5pdGlvbigpLAotICAgICAgdGhpcy5nZXREZWZpbml0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgImVEZWZpbml0aW9uIiwgbnVsbCwgMCwgMSwgSW1wb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRJbXBvcnRfRVNjaGVtYSgpLAotICAgICAgdGhlWFNEUGFja2FnZS5nZXRYU0RTY2hlbWEoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVNjaGVtYSIsIG51bGwsIDAsIDEsIEltcG9ydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpbXBvcnRFQ2xhc3MsIHRoZVhTRFBhY2thZ2UuZ2V0WFNEU2NoZW1hKCksICJnZXRTY2hlbWEiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGltcG9ydEVDbGFzcywgbnVsbCwgInNldFNjaGVtYSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhlWFNEUGFja2FnZS5nZXRYU0RTY2hlbWEoKSwgInNjaGVtYSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MsCi0gICAgICBFeHRlbnNpYmxlRWxlbWVudC5jbGFzcywKLSAgICAgICJFeHRlbnNpYmxlRWxlbWVudCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksCi0gICAgICB0aGlzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCksCi0gICAgICBudWxsLAotICAgICAgImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiLCBudWxsLCAwLCAtMSwgRXh0ZW5zaWJsZUVsZW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaW5wdXRFQ2xhc3MsIElucHV0LmNsYXNzLCAiSW5wdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Mob3V0cHV0RUNsYXNzLCBPdXRwdXQuY2xhc3MsICJPdXRwdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoZmF1bHRFQ2xhc3MsIEZhdWx0LmNsYXNzLCAiRmF1bHQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ0lucHV0RUNsYXNzLCBCaW5kaW5nSW5wdXQuY2xhc3MsICJCaW5kaW5nSW5wdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdJbnB1dF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBCaW5kaW5nSW5wdXQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKSwKLSAgICAgIHRoaXMuZ2V0SW5wdXQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUlucHV0IiwgbnVsbCwgMSwgMSwgQmluZGluZ0lucHV0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGJpbmRpbmdJbnB1dEVDbGFzcywgdGhpcy5nZXRJSW5wdXQoKSwgImdldElucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihiaW5kaW5nSW5wdXRFQ2xhc3MsIG51bGwsICJzZXRJbnB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJSW5wdXQoKSwgImlucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ091dHB1dEVDbGFzcywgQmluZGluZ091dHB1dC5jbGFzcywgIkJpbmRpbmdPdXRwdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdPdXRwdXRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgQmluZGluZ091dHB1dC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCksCi0gICAgICB0aGlzLmdldE91dHB1dCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlT3V0cHV0IiwgbnVsbCwgMSwgMSwgQmluZGluZ091dHB1dC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihiaW5kaW5nT3V0cHV0RUNsYXNzLCB0aGlzLmdldElPdXRwdXQoKSwgImdldE91dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oYmluZGluZ091dHB1dEVDbGFzcywgbnVsbCwgInNldE91dHB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJT3V0cHV0KCksICJvdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhiaW5kaW5nRmF1bHRFQ2xhc3MsIEJpbmRpbmdGYXVsdC5jbGFzcywgIkJpbmRpbmdGYXVsdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0QmluZGluZ0ZhdWx0X05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIEJpbmRpbmdGYXVsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ0ZhdWx0X0VGYXVsdCgpLAotICAgICAgdGhpcy5nZXRGYXVsdCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlRmF1bHQiLCBudWxsLCAxLCAxLCBCaW5kaW5nRmF1bHQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oYmluZGluZ0ZhdWx0RUNsYXNzLCB0aGlzLmdldElGYXVsdCgpLCAiZ2V0RmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdGYXVsdEVDbGFzcywgbnVsbCwgInNldEZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElGYXVsdCgpLCAiZmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhuYW1lc3BhY2VFQ2xhc3MsIE5hbWVzcGFjZS5jbGFzcywgIk5hbWVzcGFjZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0TmFtZXNwYWNlX1VSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJVUkkiLCBudWxsLCAwLCAxLCBOYW1lc3BhY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE5hbWVzcGFjZV9QcmVmaXgoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAicHJlZml4IiwgbnVsbCwgMCwgMSwgTmFtZXNwYWNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlQb3J0VHlwZUVDbGFzcywgamF2YXgud3NkbC5Qb3J0VHlwZS5jbGFzcywgIklQb3J0VHlwZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRUeXBlRUNsYXNzLCBudWxsLCAiYWRkT3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElPcGVyYXRpb24oKSwgIm9wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRUeXBlRUNsYXNzLCB0aGlzLmdldElPcGVyYXRpb24oKSwgImdldE9wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJpbnB1dE5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJvdXRwdXROYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaVBvcnRUeXBlRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRPcGVyYXRpb25zIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaU9wZXJhdGlvbkVDbGFzcywgamF2YXgud3NkbC5PcGVyYXRpb24uY2xhc3MsICJJT3BlcmF0aW9uIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAiYWRkRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUZhdWx0KCksICJmYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJRmF1bHQoKSwgImdldEZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0RmF1bHRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0UGFyYW1ldGVyT3JkZXJpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRQYXJhbWV0ZXJPcmRlcmluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTGlzdCgpLCAicGFyYW1ldGVyT3JkZXIiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElJbnB1dCgpLCAiZ2V0SW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRJbnB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJSW5wdXQoKSwgImlucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJT3V0cHV0KCksICJnZXRPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRPdXRwdXQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU91dHB1dCgpLCAib3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUlucHV0RUNsYXNzLCBqYXZheC53c2RsLklucHV0LmNsYXNzLCAiSUlucHV0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaUlucHV0RUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJnZXRNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpSW5wdXRFQ2xhc3MsIG51bGwsICJzZXRNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElNZXNzYWdlKCksICJtZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaU91dHB1dEVDbGFzcywgamF2YXgud3NkbC5PdXRwdXQuY2xhc3MsICJJT3V0cHV0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaU91dHB1dEVDbGFzcywgdGhpcy5nZXRJTWVzc2FnZSgpLCAiZ2V0TWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU91dHB1dEVDbGFzcywgbnVsbCwgInNldE1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgIm1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpRmF1bHRFQ2xhc3MsIGphdmF4LndzZGwuRmF1bHQuY2xhc3MsICJJRmF1bHQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRmF1bHRFQ2xhc3MsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgImdldE1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlGYXVsdEVDbGFzcywgbnVsbCwgInNldE1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgIm1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpTWVzc2FnZUVDbGFzcywgamF2YXgud3NkbC5NZXNzYWdlLmNsYXNzLCAiSU1lc3NhZ2UiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlNZXNzYWdlRUNsYXNzLCBudWxsLCAiYWRkUGFydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJUGFydCgpLCAicGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU1lc3NhZ2VFQ2xhc3MsIHRoaXMuZ2V0SVBhcnQoKSwgImdldFBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaU1lc3NhZ2VFQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0UGFydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlNZXNzYWdlRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRPcmRlcmVkUGFydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUxpc3QoKSwgInBhcnRPcmRlciIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlQYXJ0RUNsYXNzLCBqYXZheC53c2RsLlBhcnQuY2xhc3MsICJJUGFydCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlTZXJ2aWNlRUNsYXNzLCBqYXZheC53c2RsLlNlcnZpY2UuY2xhc3MsICJJU2VydmljZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVNlcnZpY2VFQ2xhc3MsIG51bGwsICJhZGRQb3J0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElQb3J0KCksICJwb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaVNlcnZpY2VFQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0UG9ydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlTZXJ2aWNlRUNsYXNzLCB0aGlzLmdldElQb3J0KCksICJnZXRQb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlQb3J0RUNsYXNzLCBqYXZheC53c2RsLlBvcnQuY2xhc3MsICJJUG9ydCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlQb3J0RUNsYXNzLCB0aGlzLmdldElCaW5kaW5nKCksICJnZXRCaW5kaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpUG9ydEVDbGFzcywgbnVsbCwgInNldEJpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmcoKSwgImJpbmRpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpQmluZGluZ0VDbGFzcywgamF2YXgud3NkbC5CaW5kaW5nLmNsYXNzLCAiSUJpbmRpbmciLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCBudWxsLCAiYWRkQmluZGluZ09wZXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJQmluZGluZ09wZXJhdGlvbigpLCAiYmluZGluZ09wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdFQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKSwgImdldEJpbmRpbmdPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaW5wdXROYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAib3V0cHV0TmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRCaW5kaW5nT3BlcmF0aW9ucyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCB0aGlzLmdldElQb3J0VHlwZSgpLCAiZ2V0UG9ydFR5cGUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCBudWxsLCAic2V0UG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJwb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24uY2xhc3MsCi0gICAgICAiSUJpbmRpbmdPcGVyYXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAiYWRkQmluZGluZ0ZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElCaW5kaW5nRmF1bHQoKSwgImJpbmRpbmdGYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdGYXVsdCgpLCAiZ2V0QmluZGluZ0ZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldEJpbmRpbmdGYXVsdHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJnZXRPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAic2V0T3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElPcGVyYXRpb24oKSwgIm9wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nSW5wdXQoKSwgImdldEJpbmRpbmdJbnB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRCaW5kaW5nSW5wdXQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmdJbnB1dCgpLCAiYmluZGluZ0lucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdPdXRwdXQoKSwgImdldEJpbmRpbmdPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAic2V0QmluZGluZ091dHB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJQmluZGluZ091dHB1dCgpLCAiYmluZGluZ091dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlCaW5kaW5nSW5wdXRFQ2xhc3MsIGphdmF4LndzZGwuQmluZGluZ0lucHV0LmNsYXNzLCAiSUJpbmRpbmdJbnB1dCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaUJpbmRpbmdPdXRwdXRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQuY2xhc3MsCi0gICAgICAiSUJpbmRpbmdPdXRwdXQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpQmluZGluZ0ZhdWx0RUNsYXNzLCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdC5jbGFzcywgIklCaW5kaW5nRmF1bHQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywKLSAgICAgICJJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpRGVmaW5pdGlvbkVDbGFzcywgamF2YXgud3NkbC5EZWZpbml0aW9uLmNsYXNzLCAiSURlZmluaXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAiYWRkQmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJQmluZGluZygpLCAiYmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJhZGRJbXBvcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUltcG9ydCgpLCAiaW1wb3J0RGVmIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgImFkZE1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgIm1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAiYWRkTmFtZXNwYWNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicHJlZml4IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZXNwYWNlVVJJIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgImFkZFBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElQb3J0VHlwZSgpLCAicG9ydFR5cGUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAiYWRkU2VydmljZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJU2VydmljZSgpLCAic2VydmljZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nRmF1bHQoKSwgImNyZWF0ZUJpbmRpbmdGYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nSW5wdXQoKSwgImNyZWF0ZUJpbmRpbmdJbnB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nT3V0cHV0KCksICJjcmVhdGVCaW5kaW5nT3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKSwgImNyZWF0ZUJpbmRpbmdPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZygpLCAiY3JlYXRlQmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElGYXVsdCgpLCAiY3JlYXRlRmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJSW1wb3J0KCksICJjcmVhdGVJbXBvcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJSW5wdXQoKSwgImNyZWF0ZUlucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgImNyZWF0ZU1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJjcmVhdGVPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJT3V0cHV0KCksICJjcmVhdGVPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJUGFydCgpLCAiY3JlYXRlUGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElQb3J0KCksICJjcmVhdGVQb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJjcmVhdGVQb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElTZXJ2aWNlKCksICJjcmVhdGVTZXJ2aWNlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZygpLCAiZ2V0QmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldEJpbmRpbmdzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0SW1wb3J0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldEltcG9ydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJnZXRNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0TWVzc2FnZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZ2V0TmFtZXNwYWNlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicHJlZml4IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0TmFtZXNwYWNlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJnZXRQb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldFBvcnRUeXBlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXRQcmVmaXgiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElTZXJ2aWNlKCksICJnZXRTZXJ2aWNlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0U2VydmljZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKSwgImdldEV4dGVuc2lvblJlZ2lzdHJ5IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgInNldEV4dGVuc2lvblJlZ2lzdHJ5Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElFeHRlbnNpb25SZWdpc3RyeSgpLCAiZXh0ZW5zaW9uUmVnaXN0cnkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImdldERvY3VtZW50QmFzZVVSSSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJzZXREb2N1bWVudEJhc2VVUkkiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkb2N1bWVudEJhc2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJVHlwZXMoKSwgImNyZWF0ZVR5cGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJU2VydmljZSgpLCAicmVtb3ZlU2VydmljZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmcoKSwgInJlbW92ZUJpbmRpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElQb3J0VHlwZSgpLCAicmVtb3ZlUG9ydFR5cGUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJyZW1vdmVNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVR5cGVzKCksICJnZXRUeXBlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJzZXRUeXBlcyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJVHlwZXMoKSwgInR5cGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUltcG9ydEVDbGFzcywgamF2YXgud3NkbC5JbXBvcnQuY2xhc3MsICJJSW1wb3J0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUxpc3RFQ2xhc3MsIExpc3QuY2xhc3MsICJJTGlzdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlNYXBFQ2xhc3MsIE1hcC5jbGFzcywgIklNYXAiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpdXJsRUNsYXNzLCBVUkwuY2xhc3MsICJJVVJMIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpRXh0ZW5zaW9uUmVnaXN0cnlFQ2xhc3MsCi0gICAgICBFeHRlbnNpb25SZWdpc3RyeS5jbGFzcywKLSAgICAgICJJRXh0ZW5zaW9uUmVnaXN0cnkiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyh0eXBlc0VDbGFzcywgVHlwZXMuY2xhc3MsICJUeXBlcyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbih0eXBlc0VDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0U2NoZW1hcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24odHlwZXNFQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldFNjaGVtYXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpSXRlcmF0b3JFQ2xhc3MsIEl0ZXJhdG9yLmNsYXNzLCAiSUl0ZXJhdG9yIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaVR5cGVzRUNsYXNzLCBqYXZheC53c2RsLlR5cGVzLmNsYXNzLCAiSVR5cGVzIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsCi0gICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsCi0gICAgICAiVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKSwKLSAgICAgIHRoaXMuZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCksCi0gICAgICBudWxsLAotICAgICAgImNoaWxkcmVuIiwgbnVsbCwgMCwgLTEsIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLAotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsCi0gICAgICAiWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X0RvY3VtZW50QmFzZVVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJkb2N1bWVudEJhc2VVUkkiLCBudWxsLCAwLCAxLCBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCksCi0gICAgICB0aGVYU0RQYWNrYWdlLmdldFhTRFNjaGVtYSgpLAotICAgICAgbnVsbCwKLSAgICAgICJzY2hlbWEiLCBudWxsLCAwLCAxLCBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLCBNZXNzYWdlUmVmZXJlbmNlLmNsYXNzLCAiTWVzc2FnZVJlZmVyZW5jZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIE1lc3NhZ2VSZWZlcmVuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKSwKLSAgICAgIHRoaXMuZ2V0TWVzc2FnZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlTWVzc2FnZSIsIG51bGwsIDEsIDEsIE1lc3NhZ2VSZWZlcmVuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpRWxlbWVudEV4dGVuc2libGVFQ2xhc3MsCi0gICAgICBFbGVtZW50RXh0ZW5zaWJsZS5jbGFzcywKLSAgICAgICJJRWxlbWVudEV4dGVuc2libGUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpRWxlbWVudEV4dGVuc2libGVFQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldEV4dGVuc2liaWxpdHlFbGVtZW50cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUVsZW1lbnRFeHRlbnNpYmxlRUNsYXNzLCBudWxsLCAiYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCksICJleHRFbGVtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpQXR0cmlidXRlRXh0ZW5zaWJsZUVDbGFzcywKLSAgICAgIEF0dHJpYnV0ZUV4dGVuc2libGUuY2xhc3MsCi0gICAgICAiSUF0dHJpYnV0ZUV4dGVuc2libGUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlBdHRyaWJ1dGVFeHRlbnNpYmxlRUNsYXNzLCB0aGlzLmdldElPYmplY3QoKSwgImdldEV4dGVuc2lvbkF0dHJpYnV0ZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUF0dHJpYnV0ZUV4dGVuc2libGVFQ2xhc3MsIG51bGwsICJzZXRFeHRlbnNpb25BdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU9iamVjdCgpLCAidmFsdWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihpQXR0cmlidXRlRXh0ZW5zaWJsZUVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRFeHRlbnNpb25BdHRyaWJ1dGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGFkZEVPcGVyYXRpb24oaUF0dHJpYnV0ZUV4dGVuc2libGVFQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldE5hdGl2ZUF0dHJpYnV0ZU5hbWVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaU9iamVjdEVDbGFzcywgT2JqZWN0LmNsYXNzLCAiSU9iamVjdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlTY2hlbWFFQ2xhc3MsIFNjaGVtYS5jbGFzcywgIklTY2hlbWEiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCi0gICAgaW5pdEVEYXRhVHlwZShxTmFtZUVEYXRhVHlwZSwgUU5hbWUuY2xhc3MsICJRTmFtZSIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RURhdGFUeXBlKG9wZXJhdGlvblR5cGVFRGF0YVR5cGUsIE9wZXJhdGlvblR5cGUuY2xhc3MsICJPcGVyYXRpb25UeXBlIiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFRGF0YVR5cGUoZG9tRWxlbWVudEVEYXRhVHlwZSwgRWxlbWVudC5jbGFzcywgIkRPTUVsZW1lbnQiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVEYXRhVHlwZSh3c2RsRXhjZXB0aW9uRURhdGFUeXBlLCBXU0RMRXhjZXB0aW9uLmNsYXNzLCAiV1NETEV4Y2VwdGlvbiIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RURhdGFUeXBlKGRvbURvY3VtZW50RURhdGFUeXBlLCBEb2N1bWVudC5jbGFzcywgIkRPTURvY3VtZW50IiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlCi0gICAgY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0gIH0KLQotfSAvL1dTRExQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmMxZDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hUmVmZXJlbmNlOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwjZ2V0RG9jdW1lbnRCYXNlVVJJIDxlbT5Eb2N1bWVudCBCYXNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwjZ2V0U2NoZW1hIDxlbT5TY2hlbWE8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERvY3VtZW50QmFzZVVSSSgpIDxlbT5Eb2N1bWVudCBCYXNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVU1FTlRfQkFTRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREb2N1bWVudEJhc2VVUkkoKSA8ZW0+RG9jdW1lbnQgQmFzZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldERvY3VtZW50QmFzZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZG9jdW1lbnRCYXNlVVJJID0gRE9DVU1FTlRfQkFTRV9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjaGVtYSgpIDxlbT5TY2hlbWE8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgc2NoZW1hOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgewotICAgIHJldHVybiBkb2N1bWVudEJhc2VVUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50QmFzZVVSSShTdHJpbmcgbmV3RG9jdW1lbnRCYXNlVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZERvY3VtZW50QmFzZVVSSSA9IGRvY3VtZW50QmFzZVVSSTsKLSAgICBkb2N1bWVudEJhc2VVUkkgPSBuZXdEb2N1bWVudEJhc2VVUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwoCi0gICAgICAgIHRoaXMsCi0gICAgICAgIE5vdGlmaWNhdGlvbi5TRVQsCi0gICAgICAgIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVF9CQVNFX1VSSSwKLSAgICAgICAgb2xkRG9jdW1lbnRCYXNlVVJJLAotICAgICAgICBkb2N1bWVudEJhc2VVUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBnZXRTY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0U2NoZW1hKFhTRFNjaGVtYSBuZXdTY2hlbWEsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBYU0RTY2hlbWEgb2xkU2NoZW1hID0gc2NoZW1hOwotICAgIHNjaGVtYSA9IG5ld1NjaGVtYTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgewotICAgICAgRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BLAotICAgICAgICBvbGRTY2hlbWEsCi0gICAgICAgIG5ld1NjaGVtYSk7Ci0gICAgICBpZiAobXNncyA9PSBudWxsKQotICAgICAgICBtc2dzID0gbm90aWZpY2F0aW9uOwotICAgICAgZWxzZQotICAgICAgICBtc2dzLmFkZChub3RpZmljYXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbXNnczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFhTRFNjaGVtYSBuZXdTY2hlbWEpCi0gIHsKLSAgICBpZiAobmV3U2NoZW1hICE9IHNjaGVtYSkKLSAgICB7Ci0gICAgICBOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXNjaGVtYSkuZUludmVyc2VSZW1vdmUoCi0gICAgICAgICAgdGhpcywKLSAgICAgICAgICBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSwKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIG1zZ3MpOwotICAgICAgaWYgKG5ld1NjaGVtYSAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3U2NoZW1hKS5lSW52ZXJzZUFkZCgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BLAotICAgICAgICAgIG51bGwsCi0gICAgICAgICAgbXNncyk7Ci0gICAgICBtc2dzID0gYmFzaWNTZXRTY2hlbWEobmV3U2NoZW1hLCBtc2dzKTsKLSAgICAgIGlmIChtc2dzICE9IG51bGwpCi0gICAgICAgIG1zZ3MuZGlzcGF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BLCBuZXdTY2hlbWEsIG5ld1NjaGVtYSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkSW1wb3J0KFNjaGVtYUltcG9ydCBpbXBvcnRTY2hlbWEpCi0gIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICAvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkSW5jbHVkZShTY2hlbWFSZWZlcmVuY2UgaW5jbHVkZVNjaGVtYSkKLSAgewotICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAotICAgIC8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCi0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSZWRlZmluZShTY2hlbWFSZWZlcmVuY2UgcmVkZWZpbmVTY2hlbWEpCi0gIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICAvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFNjaGVtYUltcG9ydCBjcmVhdGVJbXBvcnQoKQotICB7Ci0gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi0gICAgLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTY2hlbWFSZWZlcmVuY2UgY3JlYXRlSW5jbHVkZSgpCi0gIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICAvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFNjaGVtYVJlZmVyZW5jZSBjcmVhdGVSZWRlZmluZSgpCi0gIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICAvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SW5jbHVkZXMoKQotICB7Ci0gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi0gICAgLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFJlZGVmaW5lcygpCi0gIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICAvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRJbXBvcnRzKCkKLSAgewotICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAotICAgIC8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCi0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUE6Ci0gICAgICByZXR1cm4gYmFzaWNTZXRTY2hlbWEobnVsbCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UX0JBU0VfVVJJOgotICAgICAgcmV0dXJuIGdldERvY3VtZW50QmFzZVVSSSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BOgotICAgICAgcmV0dXJuIGdldFNjaGVtYSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVF9CQVNFX1VSSToKLSAgICAgIHNldERvY3VtZW50QmFzZVVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQToKLSAgICAgIHNldFNjaGVtYSgoWFNEU2NoZW1hKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVF9CQVNFX1VSSToKLSAgICAgIHNldERvY3VtZW50QmFzZVVSSShET0NVTUVOVF9CQVNFX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUE6Ci0gICAgICBzZXRTY2hlbWEoKFhTRFNjaGVtYSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRfQkFTRV9VUkk6Ci0gICAgICByZXR1cm4gRE9DVU1FTlRfQkFTRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IGRvY3VtZW50QmFzZVVSSSAhPSBudWxsIDogIURPQ1VNRU5UX0JBU0VfVVJJX0VERUZBVUxULmVxdWFscyhkb2N1bWVudEJhc2VVUkkpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BOgotICAgICAgcmV0dXJuIHNjaGVtYSAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAoZG9jdW1lbnRCYXNlVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRCYXNlVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsI3JlY29uY2lsZShvcmcudzNjLmRvbS5FbGVtZW50KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBlbGVtZW50ID0gY2hhbmdlZEVsZW1lbnQ7IC8vIFRoaXMgbGluZSBtYXkgbm90IG5lZWRlZC4gICAgCi0gICAgaWYgKHNjaGVtYSA9PSBudWxsKQotICAgIHsKLSAgICAgIFhTRFNjaGVtYSBuZXdTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICBzZXRTY2hlbWEobmV3U2NoZW1hKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgWFNEU2NoZW1hIGNyZWF0ZVNjaGVtYShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoInNjaGVtYSIpICYmIFhTRENvbnN0YW50cy5pc1NjaGVtYUZvclNjaGVtYU5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hKCk7Ci0gICAgICB4c2RTY2hlbWEuc2V0RWxlbWVudChlbGVtZW50KTsKLSAgICAgIHJldHVybiB4c2RTY2hlbWE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICBlbHNlIGlmIChnZXRTY2hlbWEoKSAhPSBudWxsKQotICAgICAgZWxlbWVudCA9IGdldFNjaGVtYSgpLmdldEVsZW1lbnQoKTsKLQotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudChFbGVtZW50IG5ld0VsZW1lbnQpCi0gIHsKLSAgICBpZiAobmV3RWxlbWVudCA9PSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIGVsZW1lbnQgPSBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RWxlbWVudEdlbihuZXdFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsIFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcpOwotCi0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudFR5cGUoUU5hbWUgbmV3RWxlbWVudFR5cGUpCi0gIHsKLSAgICAvLyBTaG91bGQgbm90IGRvIGFueXRoaW5nLgotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc3VwZXIucmVjb25jaWxlQXR0cmlidXRlcyhjaGFuZ2VkRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIGlmIChzY2hlbWEgPT0gbnVsbCkgLy8ga2IgTm90ZTogVGhpcyBjYXNlIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4uCi0gICAgewotICAgICAgLy8gY3MgLi4uIHdoeSBkbyB3ZSBkbyB0aGlzIGlmIGl0cyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuPwotICAgICAgLy8gSXMgdGhlcmUgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGlzIGEgdXNlZnVsbCBmYWxsYmFjaz8KLSAgICAgIC8vIFVuZGVyIHdoYXQgY29uZGl0aW9ucyBkb2VzIHRoaXMgY29kZSBnZXQgZXhlY3V0ZWQgKGkuZS4gd2h5IHdvdWxkIHNjaGVtYSA9PSBudWxsKT8KLSAgICAgIHNjaGVtYSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNjaGVtYSgpOwotICAgICAgc2NoZW1hLnNldFNjaGVtYUZvclNjaGVtYVFOYW1lUHJlZml4KCJ4c2QiKTsKLSAgICAgIHNjaGVtYS5zZXRUYXJnZXROYW1lc3BhY2UoImh0dHA6Ly90ZW1wdXJpLm9yZy8iKTsKLSAgICAgIGphdmEudXRpbC5NYXAgcU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCA9IHNjaGVtYS5nZXRRTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwKCk7Ci0gICAgICBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwLnB1dCgiIiwgc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICAgIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAucHV0KHNjaGVtYS5nZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgpLCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgICAgYWRvcHQoc2NoZW1hKTsKLSAgICAgIHNjaGVtYS51cGRhdGVFbGVtZW50KHRydWUpOwotICAgICAgcmV0dXJuIHNjaGVtYS5nZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkb3B0KHNjaGVtYSk7Ci0gICAgICAgIHNjaGVtYS51cGRhdGVFbGVtZW50KHRydWUpOwotICAgICAgICBlbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZG9wdChYU0RTY2hlbWEgeHNkU2NoZW1hKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotCi0gICAgaWYgKHhzZFNjaGVtYS5nZXREb2N1bWVudCgpICE9IG51bGwpCi0gICAgICB4c2RTY2hlbWEuc2V0RG9jdW1lbnQobnVsbCk7Ci0KLSAgICB4c2RTY2hlbWEuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotICB9Ci0KLSAgLyoKLSAgIHByaXZhdGUgRWxlbWVudCBhZG9wdChFbGVtZW50IGVsZW1lbnQpCi0gICB7Ci0gICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpIGRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0gICAKLSAgIHJldHVybiAoRWxlbWVudClkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsdHJ1ZSk7Ci0gICB9Ci0gICAqLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIC8vIFRPRE8uLi4gcmV2aXN0IHRoaXMgYmxvY2sgb2YgY29kZQotICAgIC8vCi0gICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEpCi0gICAgewotICAgICAgLy8gV2UgZ290IGEgbmV3IHNjaGVtYSBzbyByZS1wYXJlbnQgaXQuCi0gICAgICAvLyBjcy4uLiBhcmUgd2UgcmVhbGx5IGRvaW5nIHRoZSByaWdodCB0aGluZyBoZXJlPyAgdGhpcyBzZWVtcyBzdHJhbmdlCi0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICgoc2NoZW1hLmdldEVsZW1lbnQoKSA9PSBudWxsICYmIGdldEVsZW1lbnQoKSA9PSBudWxsKSB8fCAoc2NoZW1hLmdldEVsZW1lbnQoKSAhPSBnZXRFbGVtZW50KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgc2NoZW1hLnNldERvY3VtZW50KG51bGwpOwotICAgICAgICAgIHNjaGVtYS5zZXRFbGVtZW50KG51bGwpOwotICAgICAgICAgIGFkb3B0KHNjaGVtYSk7Ci0gICAgICAgICAgc2NoZW1hLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLldTRExfRUxFTUVOVF9fRUxFTUVOVCkKLSAgICB7Ci0gICAgICBzZXRTY2hlbWEoY3JlYXRlU2NoZW1hKGVsZW1lbnQpKTsgLy8gZWxlbWVudCBpcyBub3QgbnVsbAotICAgIH0KLSAgfQotfSAvL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDZhNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGo7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETEZhY3RvcnlJbXBsIGV4dGVuZHMgV1NETEZhY3RvcnkKLXsKLQotICAvL3B1YmxpYyBzdGF0aWMgV1NETEZhY3RvcnkgbmV3SW5zdGFuY2UoKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAvL3sKLSAgLy8gIHJldHVybiBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0gIC8vfQotCi0gIHB1YmxpYyBXU0RMRmFjdG9yeUltcGwoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBuZXdEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICB9Ci0KLSAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5IG5ld1BvcHVsYXRlZEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFdTRExSZWFkZXIgbmV3V1NETFJlYWRlcigpCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotICAgIHJlYWRlci5zZXRGYWN0b3J5SW1wbE5hbWUoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJldHVybiByZWFkZXI7Ci0gIH0KLQotICBwdWJsaWMgV1NETFdyaXRlciBuZXdXU0RMV3JpdGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgV1NETFdyaXRlckltcGwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMUmVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjk2M2Y2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFJlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMTG9jYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIFdTRExSZWFkZXJJbXBsIGltcGxlbWVudHMgV1NETFJlYWRlcgotewotICBwcml2YXRlIFN0cmluZyBmYWN0b3J5SW1wbE5hbWU7Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpb25SZWdpc3RyeSBleHRSZWc7Ci0KLSAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5IGdldEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBleHRSZWc7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25SZWdpc3RyeShFeHRlbnNpb25SZWdpc3RyeSBleHRSZWcpCi0gIHsKLSAgICB0aGlzLmV4dFJlZyA9IGV4dFJlZzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeUltcGxOYW1lKCkKLSAgewotICAgIHJldHVybiBmYWN0b3J5SW1wbE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGYWN0b3J5SW1wbE5hbWUoU3RyaW5nIGZhY3RvcnlJbXBsTmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLmZhY3RvcnlJbXBsTmFtZSA9IGZhY3RvcnlJbXBsTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEZlYXR1cmUoU3RyaW5nIG5hbWUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIFdTREwgZG9jdW1lbnQgYWNjZXNzaWJsZSB2aWEgdGhlIHNwZWNpZmllZAotICAgKiBVUkkgaW50byBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxVUkkgYSBVUkkgKGNhbiBiZSBhIGZpbGVuYW1lIG9yIFVSTCkgcG9pbnRpbmcgdG8gYQotICAgKiBXU0RMIFhNTCBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBkZWZpbml0aW9uLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBVUkkgdXJpOwotICAgIGlmIChoYXNQcm90b2NvbCh3c2RsVVJJKSkKLSAgICAgIHVyaSA9IFVSSS5jcmVhdGVVUkkod3NkbFVSSSk7Ci0gICAgZWxzZQotICAgICAgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkod3NkbFVSSSk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQsIGNyZWF0ZSBhIHdzZGwgcmVzb3VyY2UsIGFuZCBsb2FkIHRoZSBtYWluIHdzZGwgZmlsZSBpbnRvIGl0LgotCi0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIndzZGwiLCBuZXcgV1NETFJlc291cmNlRmFjdG9yeUltcGwoKSk7Ci0KLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0gICAgd3NkbE1haW5SZXNvdXJjZS5zZXRVUkkodXJpKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gcmVzb3VyY2VTZXQuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0odXJpKTsKLSAgICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChpbnB1dFN0cmVhbSwgcmVzb3VyY2VTZXQuZ2V0TG9hZE9wdGlvbnMoKSk7Ci0gICAgICAvL3dzZGxNYWluUmVzb3VyY2UubG9hZChyZXNvdXJjZVNldC5nZXRMb2FkT3B0aW9ucygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5JTlZBTElEX1dTREwsICJXU0RMIFVSSTogIiArIHdzZGxVUkksIGUpOwotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIG1haW4gcmVzb3VyY2UuCi0gICAgcmV0dXJuIHdzZGxNYWluUmVzb3VyY2UuZ2V0RGVmaW5pdGlvbigpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGhhc1Byb3RvY29sKFN0cmluZyB1cmkpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICh1cmkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSB1cmkuaW5kZXhPZigiOiIpOwotICAgICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ID4gMikgLy8gYXNzdW1lIHByb3RvY29sIHdpdGggYmUgbGVuZ3RoIDMgc28gdGhhdCB0aGUnQycgaW4gJ0M6LycgaXMgbm90IGludGVycHJldGVkIGFzIGEgcHJvdG9jb2wKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBXU0RMIGRvY3VtZW50IGFjY2Vzc2libGUgdmlhIHRoZSBzcGVjaWZpZWQKLSAgICogVVJJIGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBjb250ZXh0VVJJIHRoZSBjb250ZXh0IGluIHdoaWNoIHRvIHJlc29sdmUgdGhlCi0gICAqIHdzZGxVUkksIGlmIHRoZSB3c2RsVVJJIGlzIHJlbGF0aXZlLiBDYW4gYmUgbnVsbCwgaW4gd2hpY2gKLSAgICogY2FzZSBpdCB3aWxsIGJlIGlnbm9yZWQuCi0gICAqIEBwYXJhbSB3c2RsVVJJIGEgVVJJIChjYW4gYmUgYSBmaWxlbmFtZSBvciBVUkwpIHBvaW50aW5nIHRvIGEKLSAgICogV1NETCBYTUwgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIHJlYWRXU0RMKFN0cmluZyBjb250ZXh0VVJJLCBTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBzcGVjaWZpZWQgJmx0O3dzZGw6ZGVmaW5pdGlvbnMmZ3Q7IGVsZW1lbnQgaW50byBhIFdTREwKLSAgICogZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSB0aGUgZG9jdW1lbnQgYmFzZSBVUkkgb2YgdGhlIFdTREwgZGVmaW5pdGlvbgotICAgKiBkZXNjcmliZWQgYnkgdGhlIGVsZW1lbnQuIFdpbGwgYmUgc2V0IGFzIHRoZSBkb2N1bWVudEJhc2VVUkkKLSAgICogb2YgdGhlIHJldHVybmVkIERlZmluaXRpb24uIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGl0Ci0gICAqIHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIGRlZmluaXRpb25zRWxlbWVudCB0aGUgJmx0O3dzZGw6ZGVmaW5pdGlvbnMmZ3Q7IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgYnkgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiByZWFkV1NETChTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLCBFbGVtZW50IGRlZmluaXRpb25zRWxlbWVudCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBzcGVjaWZpZWQgV1NETCBkb2N1bWVudCBpbnRvIGEgV1NETCBkZWZpbml0aW9uLgotICAgKgotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIHRoZSBkb2N1bWVudCBiYXNlIFVSSSBvZiB0aGUgV1NETCBkZWZpbml0aW9uCi0gICAqIGRlc2NyaWJlZCBieSB0aGUgZG9jdW1lbnQuIFdpbGwgYmUgc2V0IGFzIHRoZSBkb2N1bWVudEJhc2VVUkkKLSAgICogb2YgdGhlIHJldHVybmVkIERlZmluaXRpb24uIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGl0Ci0gICAqIHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCB0aGUgV1NETCBkb2N1bWVudCwgYW4gWE1MIAotICAgKiBkb2N1bWVudCBvYmV5aW5nIHRoZSBXU0RMIHNjaGVtYS4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRG9jdW1lbnQgd3NkbERvY3VtZW50KSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwgIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBXU0RMIGRvY3VtZW50IGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGRvY3VtZW50IGJhc2UgVVJJIG9mIHRoZSBXU0RMIGRlZmluaXRpb24KLSAgICogZGVzY3JpYmVkIGJ5IHRoZSBkb2N1bWVudC4gV2lsbCBiZSBzZXQgYXMgdGhlIGRvY3VtZW50QmFzZVVSSQotICAgKiBvZiB0aGUgcmV0dXJuZWQgRGVmaW5pdGlvbi4gQ2FuIGJlIG51bGwsIGluIHdoaWNoIGNhc2UgaXQKLSAgICogd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgYW4gSW5wdXRTb3VyY2UgcG9pbnRpbmcgdG8gdGhlCi0gICAqIFdTREwgZG9jdW1lbnQsIGFuIFhNTCBkb2N1bWVudCBvYmV5aW5nIHRoZSBXU0RMIHNjaGVtYS4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50IHBvaW50ZWQgdG8KLSAgICogYnkgdGhlIElucHV0U291cmNlLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgid3NkbCIsIG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoZG9jdW1lbnRCYXNlVVJJICE9IG51bGwpCi0gICAgICAgIHdzZGxNYWluUmVzb3VyY2Uuc2V0VVJJKGNyZWF0ZVVSSShkb2N1bWVudEJhc2VVUkkpKTsKLSAgICAgIHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCkucHV0KFdTRExSZXNvdXJjZUltcGwuQ09OVElOVUVfT05fTE9BRF9FUlJPUiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKLSAgICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChpbnB1dFNvdXJjZS5nZXRCeXRlU3RyZWFtKCksIHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCkpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLCAiIiwgaW9lKTsKLSAgICB9Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsTWFpblJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkoZG9jdW1lbnRCYXNlVVJJKTsKLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBXU0RMIGRvY3VtZW50IGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBsb2NhdG9yIEEgV1NETExvY2F0b3Igb2JqZWN0IHVzZWQgdG8gcHJvdmlkZSBJbnB1dFNvdXJjZXMKLSAgICogcG9pbnRpbmcgdG8gdGhlIHdzZGwgZmlsZS4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiByZWFkV1NETChXU0RMTG9jYXRvciBsb2NhdG9yKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwgIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgcHJpdmF0ZSBVUkkgY3JlYXRlVVJJKFN0cmluZyB1cmlTdHJpbmcpCi0gIHsKLSAgICBpZiAoaGFzUHJvdG9jb2wodXJpU3RyaW5nKSkKLSAgICAgIHJldHVybiBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFVSSS5jcmVhdGVGaWxlVVJJKHVyaVN0cmluZyk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMV3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMV3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY5ZjZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU0RMV3JpdGVySW1wbCBpbXBsZW1lbnRzIFdTRExXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFNldHMgdGhlIHNwZWNpZmllZCBmZWF0dXJlIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCi0gICAqIDxwPgotICAgKiBUaGVyZSBhcmUgbm8gbWluaW11bSBmZWF0dXJlcyB0aGF0IG11c3QgYmUgc3VwcG9ydGVkLgotICAgKiA8cD4KLSAgICogQWxsIGZlYXR1cmUgbmFtZXMgbXVzdCBiZSBmdWxseS1xdWFsaWZpZWQsIEphdmEgcGFja2FnZSBzdHlsZS4gQWxsCi0gICAqIG5hbWVzIHN0YXJ0aW5nIHdpdGggamF2YXgud3NkbC4gYXJlIHJlc2VydmVkIGZvciBmZWF0dXJlcyBkZWZpbmVkCi0gICAqIGJ5IHRoZSBKV1NETCBzcGVjaWZpY2F0aW9uLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9uLQotICAgKiBzcGVjaWZpYyBmZWF0dXJlcyBiZSBmdWxseS1xdWFsaWZpZWQgdG8gbWF0Y2ggdGhlIHBhY2thZ2UgbmFtZQotICAgKiBvZiB0aGF0IGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZTogY29tLmFiYy5mZWF0dXJlTmFtZQotICAgKgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBiZSBzZXQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0IHRoZSBmZWF0dXJlIHRvLgotICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZmVhdHVyZSBuYW1lIGlzIG5vdCByZWNvZ25pemVkLgotICAgKiBAc2VlICNnZXRGZWF0dXJlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmVhdHVyZS4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gZ2V0IHRoZSB2YWx1ZSBvZi4KLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGZlYXR1cmUgbmFtZSBpcyBub3QgcmVjb2duaXplZC4KLSAgICogQHNlZSAjc2V0RmVhdHVyZShTdHJpbmcsIGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBkb2N1bWVudCBnZW5lcmF0ZWQgZnJvbSB0aGUgc3BlY2lmaWVkIFdTREwgbW9kZWwuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoRGVmaW5pdGlvbiB3c2RsRGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuICgoRGVmaW5pdGlvbkltcGwpd3NkbERlZikuZ2V0RG9jdW1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgc3BlY2lmaWVkIFdTREwgZGVmaW5pdGlvbiB0byB0aGUgc3BlY2lmaWVkIFdyaXRlci4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxEZWYgdGhlIFdTREwgZGVmaW5pdGlvbiB0byBiZSB3cml0dGVuLgotICAgKiBAcGFyYW0gc2luayB0aGUgV3JpdGVyIHRvIHdyaXRlIHRoZSB4bWwgdG8uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVdTREwoRGVmaW5pdGlvbiB3c2RsRGVmLCBXcml0ZXIgc2luaykgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBlbmNvZGluZyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVHJhbnNmb3JtZXJGYWN0b3J5IHRyYW5zZm9ybWVyRmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lckZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKLQotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuTUVUSE9ELCAieG1sIik7Ci0KLSAgICAgIC8vIFVubGVzcyBhIHdpZHRoIGlzIHNldCwgdGhlcmUgd2lsbCBiZSBvbmx5IGxpbmUgYnJlYWtzIGJ1dCBubyBpbmRlbnRhdGlvbi4KLSAgICAgIC8vIFRoZSBJQk0gSkRLIGFuZCB0aGUgU3VuIEpESyBkb24ndCBhZ3JlZSBvbiB0aGUgcHJvcGVydHkgbmFtZSwKLSAgICAgIC8vIHNvIHdlIHNldCB0aGVtIGJvdGguCi0gICAgICAvLwotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW59aW5kZW50LWFtb3VudCIsICIyIik7Ci0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIGVuY29kaW5nKTsKLSAgICAgIH0KLQotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKXdzZGxEZWYpLmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbCl3c2RsRGVmKS51cGRhdGVFbGVtZW50KHRydWUpOwotICAgICAgICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpd3NkbERlZikuZ2V0RG9jdW1lbnQoKTsKLSAgICAgIH0KLQotICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpLCBuZXcgU3RyZWFtUmVzdWx0KHNpbmspKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLCAiRmFpbGVkIHRvIHNhdmUgRGVmaW5pdGlvbnMuIiwgZXhjZXB0aW9uKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgc3BlY2lmaWVkIFdTREwgZGVmaW5pdGlvbiB0byB0aGUgc3BlY2lmaWVkIE91dHB1dFN0cmVhbS4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxEZWYgdGhlIFdTREwgZGVmaW5pdGlvbiB0byBiZSB3cml0dGVuLgotICAgKiBAcGFyYW0gc2luayB0aGUgT3V0cHV0U3RyZWFtIHRvIHdyaXRlIHRoZSB4bWwgdG8uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVdTREwoRGVmaW5pdGlvbiB3c2RsRGVmLCBPdXRwdXRTdHJlYW0gc2luaykgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSAoKERlZmluaXRpb25JbXBsKXdzZGxEZWYpLmVSZXNvdXJjZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHJlc291cmNlLnNhdmUoc2luaywgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJGYWlsZWQgdG8gc2F2ZSBEZWZpbml0aW9ucy4iLCBlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9SZWNvbmNpbGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9SZWNvbmNpbGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3OGI2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvUmVjb25jaWxhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vLyBUT0RPLi4uIHdoeSBkbyB3ZSBuZWVkIHRoaXM/Ci0vLyAKLXB1YmxpYyBpbnRlcmZhY2UgUmVjb25jaWxhYmxlCi17Ci0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLQotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCk7Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KTsKLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZTY0MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkVsZW1lbnRFeHRlbnNpYmxlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFdTRExBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBXU0RMUGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMQWRhcHRlckZhY3RvcnkoKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IFdTRExQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExTd2l0Y2ggbW9kZWxTd2l0Y2ggPSBuZXcgV1NETFN3aXRjaCgpCi0gICAgewotICAgICAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVBvcnRUeXBlKFBvcnRUeXBlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVBvcnRUeXBlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VPcGVyYXRpb24oT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlTWVzc2FnZShNZXNzYWdlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVBhcnQoUGFydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVQYXJ0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nKEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQmluZGluZ0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNlcnZpY2UoU2VydmljZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTZXJ2aWNlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0KFBvcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlUG9ydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZURlZmluaXRpb24oRGVmaW5pdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVEZWZpbml0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJbXBvcnQoSW1wb3J0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUltcG9ydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRXh0ZW5zaWJsZUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlucHV0KElucHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlucHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VPdXRwdXQoT3V0cHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU91dHB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRmF1bHQoRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQmluZGluZ0lucHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQmluZGluZ091dHB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU5hbWVzcGFjZShOYW1lc3BhY2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTmFtZXNwYWNlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJUG9ydFR5cGUoamF2YXgud3NkbC5Qb3J0VHlwZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJUG9ydFR5cGVBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlPcGVyYXRpb24oamF2YXgud3NkbC5PcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSU9wZXJhdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUlucHV0KGphdmF4LndzZGwuSW5wdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUlucHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJT3V0cHV0KGphdmF4LndzZGwuT3V0cHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlPdXRwdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlGYXVsdChqYXZheC53c2RsLkZhdWx0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlGYXVsdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1lc3NhZ2UoamF2YXgud3NkbC5NZXNzYWdlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNZXNzYWdlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJUGFydChqYXZheC53c2RsLlBhcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVBhcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlTZXJ2aWNlKGphdmF4LndzZGwuU2VydmljZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU2VydmljZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVBvcnQoamF2YXgud3NkbC5Qb3J0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlQb3J0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZyhqYXZheC53c2RsLkJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nT3BlcmF0aW9uKGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJQmluZGluZ09wZXJhdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdJbnB1dChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJQmluZGluZ0lucHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ091dHB1dChqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUJpbmRpbmdPdXRwdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nRmF1bHQoamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUJpbmRpbmdGYXVsdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlEZWZpbml0aW9uKGphdmF4LndzZGwuRGVmaW5pdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRGVmaW5pdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUltcG9ydChqYXZheC53c2RsLkltcG9ydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSW1wb3J0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJTGlzdChMaXN0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlMaXN0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJTWFwKE1hcCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTWFwQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJVVJMKFVSTCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJVVJMQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaW9uUmVnaXN0cnkoRXh0ZW5zaW9uUmVnaXN0cnkgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUV4dGVuc2lvblJlZ2lzdHJ5QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VUeXBlcyhUeXBlcyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlc0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUl0ZXJhdG9yKEl0ZXJhdG9yIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlJdGVyYXRvckFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVR5cGVzKGphdmF4LndzZGwuVHlwZXMgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVR5cGVzQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU1lc3NhZ2VSZWZlcmVuY2UoTWVzc2FnZVJlZmVyZW5jZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlUmVmZXJlbmNlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRWxlbWVudEV4dGVuc2libGUoRWxlbWVudEV4dGVuc2libGUgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUVsZW1lbnRFeHRlbnNpYmxlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShBdHRyaWJ1dGVFeHRlbnNpYmxlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlBdHRyaWJ1dGVFeHRlbnNpYmxlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJT2JqZWN0KE9iamVjdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJT2JqZWN0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU2NoZW1hKFNjaGVtYSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU2NoZW1hQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLSAgICAgIH0KLSAgICB9OwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotICAgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLSAgICByZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVdTRExFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlIDxlbT5Qb3J0IFR5cGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9ydFR5cGVBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uIDxlbT5PcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlIDxlbT5NZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTWVzc2FnZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0IDxlbT5QYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlUGFydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nIDxlbT5CaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uIDxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJpbmRpbmdPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSA8ZW0+U2VydmljZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNlcnZpY2VBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCA8ZW0+UG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uIDxlbT5EZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVmaW5pdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQgPGVtPkltcG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSW1wb3J0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IDxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRXh0ZW5zaWJsZUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQgPGVtPklucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlucHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCA8ZW0+T3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVPdXRwdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQgPGVtPkZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUZhdWx0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCA8ZW0+QmluZGluZyBJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQmluZGluZ0lucHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQgPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQmluZGluZ091dHB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQgPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJpbmRpbmdGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UgPGVtPk5hbWVzcGFjZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTmFtZXNwYWNlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuUG9ydFR5cGUgPGVtPklQb3J0IFR5cGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0VHlwZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJUG9ydFR5cGVBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb24gPGVtPklPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5PcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSU9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLklucHV0IDxlbT5JSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5JbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSW5wdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5PdXRwdXQgPGVtPklPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5PdXRwdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSU91dHB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkZhdWx0IDxlbT5JRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5GYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5NZXNzYWdlIDxlbT5JTWVzc2FnZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLk1lc3NhZ2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSU1lc3NhZ2VBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5QYXJ0IDxlbT5JUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLlBhcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVBhcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5TZXJ2aWNlIDxlbT5JU2VydmljZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLlNlcnZpY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNlcnZpY2VBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0IDxlbT5JUG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLlBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVBvcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nIDxlbT5JQmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUJpbmRpbmdBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIDxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlCaW5kaW5nT3BlcmF0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0lucHV0IDxlbT5JQmluZGluZyBJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJQmluZGluZ0lucHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ091dHB1dCA8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJQmluZGluZ091dHB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUJpbmRpbmdGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkRlZmluaXRpb24gPGVtPklEZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuRGVmaW5pdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRGVmaW5pdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkltcG9ydCA8ZW0+SUltcG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkltcG9ydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSW1wb3J0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5MaXN0IDxlbT5JTGlzdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZhLnV0aWwuTGlzdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTGlzdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwIDxlbT5JTWFwPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmEudXRpbC5NYXAKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSU1hcEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLm5ldC5VUkwgPGVtPklVUkw8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YS5uZXQuVVJMCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlVUkxBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IDxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRXh0ZW5zaW9uUmVnaXN0cnlBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMgPGVtPlR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVR5cGVzQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5JdGVyYXRvciA8ZW0+SUl0ZXJhdG9yPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmEudXRpbC5JdGVyYXRvcgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSXRlcmF0b3JBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5UeXBlcyA8ZW0+SVR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuVHlwZXMKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVR5cGVzQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNZXNzYWdlUmVmZXJlbmNlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FbGVtZW50RXh0ZW5zaWJsZSA8ZW0+SUVsZW1lbnQgRXh0ZW5zaWJsZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRWxlbWVudEV4dGVuc2libGUKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUVsZW1lbnRFeHRlbnNpYmxlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5BdHRyaWJ1dGVFeHRlbnNpYmxlIDxlbT5JQXR0cmlidXRlIEV4dGVuc2libGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGUKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUF0dHJpYnV0ZUV4dGVuc2libGVBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLk9iamVjdCA8ZW0+SU9iamVjdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWEgPGVtPklTY2hlbWE8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWEKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNjaGVtYUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9XU0RMQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMRGVmaW5pdGlvbkZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMRGVmaW5pdGlvbkZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhNWIyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETERlZmluaXRpb25GYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGw7Ci0KLQotcHVibGljIGNsYXNzIFdTRExEZWZpbml0aW9uRmFjdG9yeSBleHRlbmRzIGNvbS5pYm0ud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5SW1wbAotewotCi0gIHByaXZhdGUgc3RhdGljIFdTRExEZWZpbml0aW9uRmFjdG9yeSBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgcHVibGljIFdTRExEZWZpbml0aW9uRmFjdG9yeSgpCi0gIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIFdTREwgcGFja2FnZSBpcyBpbml0aWFsaXplZC4KLSAgICBXU0RMUGFja2FnZUltcGwuaW5pdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBEZWZpbml0aW9uLgotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuRGVmaW5pdGlvbiBuZXdEZWZpbml0aW9uKCkKLSAgewotICAgIGphdmF4LndzZGwuRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGZhY3RvcnkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5IGdldEluc3RhbmNlKCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgICAgaW5zdGFuY2UgPSBuZXcgV1NETERlZmluaXRpb25GYWN0b3J5KCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBXU0RMUmVhZGVyLgotICAgKi8KLSAgcHVibGljIFdTRExSZWFkZXIgbmV3V1NETFJlYWRlcigpCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotICAgIHJlYWRlci5zZXRGYWN0b3J5SW1wbE5hbWUoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJldHVybiByZWFkZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExNb2RlbExvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMTW9kZWxMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZGFhZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExNb2RlbExvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsOwotCi0KLS8qKgotICogQW4gYWRhcHRlciBpbnRlcmZhY2UgdXNlZCBieSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0SW1wbCB0byBmaW5kIHJlZmVyZW5jZWQgcmVzb3VyY2VzLgotICogV2hlbiB0aGUgcmVzb3VyY2UgcmVmZXJlbmNlZCBieSBhIHdzZGwgaW1wb3J0IG5lZWRzIHRvIGJlIGRldGVybWluZWQsIAotICogdGhlIGNvbnRhaW5pbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZX0KLSAqIHdpbGwgYmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbCNnZXRSZWdpc3RlcmVkQWRhcHRlcihvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UsT2JqZWN0KSBpbnNwZWN0ZWR9IAotICogZm9yIGFuIGFkYXB0ZXIgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgotICogQXMgc3VjaCwgeW91IGNhbiByZWdpc3RlciBhbiBhZGFwdGVyIGZhY3RvcnkgbGlrZSB0aGlzIHRvIHRhaWxvciB0aGUgYWxnb3JpdGhtIHVzZWQgdG8gbG9jYXRlIHRoZSByZXNvdXJjZSA6Ci0gKjxwcmU+Ci0gKiAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gKiAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZAotICogICAgKG5ldyBBZGFwdGVyRmFjdG9yeUltcGwoKQotICogICAgIHsKLSAqICAgICAgIGNsYXNzIEN1c3RvbVVSSVJlc29sdmVyIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gKiAgICAgICB7Ci0gKiAgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pOwotICogICAgICAgICB7Ci0gKiAgICAgICAgICAgcmV0dXJuIG51bGw7ICAvLyBBZGRpdGlvbmFsIGxvZ2ljLi4uCi0gKiAgICAgICAgIH0KLSAqCi0gKiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gKiAgICAgICAgIHsKLSAqICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzOwotICogICAgICAgICB9Ci0gKiAgICAgICB9Ci0gKgotICogICAgICAgcHJvdGVjdGVkIEN1c3RvbVVSSVJlc29sdmVyIGN1c3RvbVVSSVJlc29sdmVyID0gbmV3IEN1c3RvbVVSSVJlc29sdmVyKCk7Ci0gKgotICogICAgICAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAqICAgICAgIHsKLSAqICAgICAgICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAqICAgICAgIH0KLSAqCi0gKiAgICAgICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICogICAgICAgewotICogICAgICAgICByZXR1cm4gY3VzdG9tVVJJUmVzb2x2ZXI7Ci0gKiAgICAgICB9Ci0gKiAgICAgfSk7Ci0gKjwvcHJlPgotICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWwjZ2V0UmVnaXN0ZXJlZEFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlLE9iamVjdCkKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMTW9kZWxMb2NhdG9yCi17Ci0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiYzE4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgV1NETFJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlJbXBsCi17Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkKLSAgewotICAgIFJlc291cmNlIHJlc3VsdCA9IG5ldyBXU0RMUmVzb3VyY2VJbXBsKHVyaSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfSAvL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzNmFmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkF0dHJpYnV0ZUV4dGVuc2libGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkVsZW1lbnRFeHRlbnNpYmxlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaCBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgV1NETFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgV1NETFN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVDoKLSAgICAgIHsKLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFOgotICAgICAgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OOgotICAgICAgewotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUF0dHJpYnV0ZUV4dGVuc2libGUob3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFOgotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKG1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlBdHRyaWJ1dGVFeHRlbnNpYmxlKG1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlQ6Ci0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlUGFydChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJUGFydChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRWxlbWVudEV4dGVuc2libGUocGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUF0dHJpYnV0ZUV4dGVuc2libGUocGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElORzoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShiaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShiaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTjoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFOgotICAgICAgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKHNlcnZpY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlBdHRyaWJ1dGVFeHRlbnNpYmxlKHNlcnZpY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlQ6Ci0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlUG9ydChwb3J0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChwb3J0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJUG9ydChwb3J0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChwb3J0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRWxlbWVudEV4dGVuc2libGUocG9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUF0dHJpYnV0ZUV4dGVuc2libGUocG9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UOgotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OOgotICAgICAgewotICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKGRlZmluaXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlBdHRyaWJ1dGVFeHRlbnNpYmxlKGRlZmluaXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVDoKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IGltcG9ydF8gPSAoSW1wb3J0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSW1wb3J0KGltcG9ydF8pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGltcG9ydF8pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlJbXBvcnQoaW1wb3J0Xyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaW1wb3J0Xyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKGltcG9ydF8pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlBdHRyaWJ1dGVFeHRlbnNpYmxlKGltcG9ydF8pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVDoKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSAoRXh0ZW5zaWJsZUVsZW1lbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChleHRlbnNpYmxlRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoZXh0ZW5zaWJsZUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShleHRlbnNpYmxlRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUF0dHJpYnV0ZUV4dGVuc2libGUoZXh0ZW5zaWJsZUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklOUFVUOgotICAgICAgewotICAgICAgICBJbnB1dCBpbnB1dCA9IChJbnB1dCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUlucHV0KGlucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VNZXNzYWdlUmVmZXJlbmNlKGlucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSW5wdXQoaW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGlucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1VUUFVUOgotICAgICAgewotICAgICAgICBPdXRwdXQgb3V0cHV0ID0gKE91dHB1dCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU91dHB1dChvdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZU1lc3NhZ2VSZWZlcmVuY2Uob3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJT3V0cHV0KG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQob3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShvdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlRmF1bHQoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZU1lc3NhZ2VSZWZlcmVuY2UoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlGYXVsdChmYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlBdHRyaWJ1dGVFeHRlbnNpYmxlKGZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChmYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKGZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUOgotICAgICAgewotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gKEJpbmRpbmdJbnB1dCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUF0dHJpYnV0ZUV4dGVuc2libGUoYmluZGluZ0lucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVDoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gKEJpbmRpbmdPdXRwdXQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShiaW5kaW5nT3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShiaW5kaW5nT3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUOgotICAgICAgewotICAgICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUVsZW1lbnRFeHRlbnNpYmxlKGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUF0dHJpYnV0ZUV4dGVuc2libGUoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0U6Ci0gICAgICB7Ci0gICAgICAgIE5hbWVzcGFjZSBuYW1lc3BhY2UgPSAoTmFtZXNwYWNlKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVFlQRVM6Ci0gICAgICB7Ci0gICAgICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlVHlwZXModHlwZXMpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJVHlwZXModHlwZXMpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRWxlbWVudEV4dGVuc2libGUodHlwZXMpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlBdHRyaWJ1dGVFeHRlbnNpYmxlKHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHsKLSAgICAgICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQodW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudCh1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ6Ci0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU2NoZW1hKHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudCh4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRToKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNZXNzYWdlUmVmZXJlbmNlKG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShtZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShtZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3J0IFR5cGU8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0VHlwZShQb3J0VHlwZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VPcGVyYXRpb24oT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1lc3NhZ2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NZXNzYWdlPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlTWVzc2FnZShNZXNzYWdlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlUGFydChQYXJ0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZyhCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2VydmljZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNlcnZpY2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTZXJ2aWNlKFNlcnZpY2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9ydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0KFBvcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVmaW5pdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VEZWZpbml0aW9uKERlZmluaXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW1wb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW1wb3J0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSW1wb3J0KEltcG9ydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmxlRWxlbWVudChFeHRlbnNpYmxlRWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklucHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSW5wdXQoSW5wdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3V0cHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3V0cHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlT3V0cHV0KE91dHB1dCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRmF1bHQoRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU5hbWVzcGFjZShOYW1lc3BhY2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVBvcnQgVHlwZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJUG9ydFR5cGUoamF2YXgud3NkbC5Qb3J0VHlwZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JT3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlPcGVyYXRpb24oamF2YXgud3NkbC5PcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUlucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUlucHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUlucHV0KGphdmF4LndzZGwuSW5wdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU91dHB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJT3V0cHV0KGphdmF4LndzZGwuT3V0cHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlGYXVsdChqYXZheC53c2RsLkZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNZXNzYWdlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJTWVzc2FnZShqYXZheC53c2RsLk1lc3NhZ2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVBhcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JUGFydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlQYXJ0KGphdmF4LndzZGwuUGFydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU2VydmljZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTZXJ2aWNlPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNlcnZpY2UoamF2YXgud3NkbC5TZXJ2aWNlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVBvcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJUG9ydChqYXZheC53c2RsLlBvcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nKGphdmF4LndzZGwuQmluZGluZyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ09wZXJhdGlvbihqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nSW5wdXQoamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdPdXRwdXQoamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ0ZhdWx0KGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRGVmaW5pdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklEZWZpbml0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSURlZmluaXRpb24oamF2YXgud3NkbC5EZWZpbml0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJbXBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSW1wb3J0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUltcG9ydChqYXZheC53c2RsLkltcG9ydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTGlzdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklMaXN0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUxpc3QoTGlzdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTWFwPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1hcDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNYXAoTWFwIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklVUkw8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JVVJMPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVVSTChVUkwgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaW9uUmVnaXN0cnkoRXh0ZW5zaW9uUmVnaXN0cnkgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHlwZXM8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVR5cGVzKFR5cGVzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJdGVyYXRvcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJdGVyYXRvcjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlJdGVyYXRvcihJdGVyYXRvciBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JVHlwZXM8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JVHlwZXM8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJVHlwZXMoamF2YXgud3NkbC5UeXBlcyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU1lc3NhZ2VSZWZlcmVuY2UoTWVzc2FnZVJlZmVyZW5jZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRWxlbWVudCBFeHRlbnNpYmxlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUVsZW1lbnQgRXh0ZW5zaWJsZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlFbGVtZW50RXh0ZW5zaWJsZShFbGVtZW50RXh0ZW5zaWJsZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQXR0cmlidXRlIEV4dGVuc2libGU8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQXR0cmlidXRlIEV4dGVuc2libGU8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJQXR0cmlidXRlRXh0ZW5zaWJsZShBdHRyaWJ1dGVFeHRlbnNpYmxlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklPYmplY3Q8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JT2JqZWN0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU9iamVjdChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNjaGVtYTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTY2hlbWE8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU2NoZW1hKFNjaGVtYSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL1dTRExTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZTAwZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFV0aWwgZXh0ZW5kcyBXU0RMQ29uc3RhbnRzCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgV1NETFV0aWwgaW5zdGFuY2U7Ci0KLSAgLy8gIHByb3RlY3RlZCBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgPSBuZXcgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpOwotCi0gIHByb3RlY3RlZCBIYXNoTWFwIGVsZW1lbnROYW1lVG9UeXBlTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICBwdWJsaWMgc3RhdGljIFdTRExVdGlsIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFdTRExVdGlsKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMVXRpbCgpCi0gIHsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoQklORElOR19FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoQklORElORykpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChERUZJTklUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihERUZJTklUSU9OKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERPQ1VNRU5UQVRJT04pKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoRkFVTFRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKEZBVUxUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElNUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoSU1QT1JUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElOUFVUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTlBVVCkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChNRVNTQUdFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihNRVNTQUdFKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9QRVJBVElPTl9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1BFUkFUSU9OKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9VVFBVVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1VUUFVUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFBBUlRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBBUlQpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoUE9SVCkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBPUlRfVFlQRSkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChTRVJWSUNFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihTRVJWSUNFKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFRZUEVTX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihUWVBFUykpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRXU0RMVHlwZShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gLTE7Ci0KLSAgICBpZiAoV1NETENvbnN0YW50cy5pc1dTRExOYW1lc3BhY2UoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgewotICAgICAgSW50ZWdlciBpbnRlZ2VyID0gKEludGVnZXIpIGVsZW1lbnROYW1lVG9UeXBlTWFwLmdldChlbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICAgIGlmIChpbnRlZ2VyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZCgwLCBlbGVtZW50KTsKLSAgICAgIE5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KW5vZGUgOiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qCi0gICBwdWJsaWMgT2JqZWN0IGZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBFbGVtZW50IHRhcmdldEVsZW1lbnQpCi0gICB7ICAgCi0gICBPYmplY3QgbyA9IG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0TW9kZWxPYmplY3RGb3JOb2RlKGRlZmluaXRpb24sIHRhcmdldEVsZW1lbnQpOwotICAgcmV0dXJuIG87Ci0gICB9Ci0gICAKLSAgIAotICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudEZvck9iamVjdChPYmplY3QgbykKLSAgIHsgICAgICAKLSAgIE5vZGUgbm9kZSA9IG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsgIAotICAgcmV0dXJuIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KW5vZGUgOiBudWxsOyAgICAgICAgICAgICAgICAgIAotICAgfQotICAgCi0gICBwdWJsaWMgTm9kZSBnZXROb2RlRm9yT2JqZWN0KE9iamVjdCBvKQotICAgeyAgICAgIAotICAgcmV0dXJuIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsgICAgICAgICAgICAgICAgICAgICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBJVHlwZVN5c3RlbVByb3ZpZGVyIGdldFR5cGVTeXN0ZW1Qcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gICB7ICAgICAgCi0gICByZXR1cm4gV1NETFRvRE9NRWxlbWVudFV0aWwuZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKGRlZmluaXRpb24pOyAgICAgICAgICAgICAgICAgICAgCi0gICB9Ci0gICAKLSAgIAotICAgcHVibGljIHZvaWQgc2V0VHlwZVN5c3RlbVByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbiwgSVR5cGVTeXN0ZW1Qcm92aWRlciB0eXBlU3lzdGVtUHJvdmlkZXIpCi0gICB7ICAgICAgCi0gICBXU0RMVG9ET01FbGVtZW50VXRpbC5zZXRUeXBlU3lzdGVtUHJvdmlkZXIoZGVmaW5pdGlvbiwgdHlwZVN5c3RlbVByb3ZpZGVyKTsgICAgICAgICAgICAgICAgICAgICAgCi0gICB9ICAgCi0gICAqLwotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgY3JlYXRlUU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgcHJlZml4ZWROYW1lKQotICB7Ci0gICAgUU5hbWUgcW5hbWUgPSBudWxsOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBwcmVmaXhlZE5hbWUuaW5kZXhPZigiOiIpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IChpbmRleCA9PSAtMSkgPyBudWxsIDogcHJlZml4ZWROYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICBpZiAocHJlZml4ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gcHJlZml4ZWROYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICAgIHFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcW5hbWU7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudE5vZGVzKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50KQotICB7Ci0gICAgTGlzdCBjaGlsZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGlsZExpc3QuYWRkKGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaGlsZExpc3Q7Ci0gICAgLy9yZXR1cm4gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMGFiNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBYU0RTY2hlbWFMb2NhdG9ySW1wbCBzY2hlbWFMb2NhdG9yID0gbmV3IFhTRFNjaGVtYUxvY2F0b3JJbXBsKCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFhTRFNjaGVtYUxvY2F0b3IuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYUxvY2F0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9YU0RTY2hlbWFMb2NhdG9ySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MDI2YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgWFNEU2NoZW1hTG9jYXRvckltcGwgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFhTRFNjaGVtYUxvY2F0b3IKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvciNsb2NhdGVTY2hlbWEob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSwKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBsb2NhdGVTY2hlbWEoWFNEU2NoZW1hIHhzZFNjaGVtYSwgU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIHJhd1NjaGVtYUxvY2F0aW9uVVJJLCBTdHJpbmcgcmVzb2x2ZWRTY2hlbWFMb2NhdGlvblVSSSkKLSAgewotICAgIFhTRFNjaGVtYSByZXNvbHZlZFNjaGVtYSA9IG51bGw7Ci0KLSAgICAvLyBCdWd6aWxsYSAxMjI2MjQ6ICBXU0RMIG1vZGVsIGRvZXMgbm90IHJlc29sdmUgPGltcG9ydD4gb2YgaW5saW5lIHNjaGVtYSB3aXRoIG5vIG5hbWVzcGFjZS4KLSAgICAvLyBLQjogV2UgYXJlIG5vdCByZXNvbHZpbmcgPGltcG9ydD5lZCBvciA8aW5jbHVkZT5kIHNjaGVtYXMgZnJvbSB0aGUgcm9vdCBpbmxpbmUgc2NoZW1hcy4KLSAgICAvLyBJbiBvdGhlciB3b3Jkcywgc2luY2Ugd2UgYXJlIHJlc29sdmluZyBvbmx5IGJldHdlZW4gbXVsdGlwbGUgcm9vdCBpbmxpbmUgc2NoZW1hcywKLSAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byByZXNvbHZlIGlmICJyYXdTY2hlbWFMb2NhdGlvblVSSSIgaXMgbm90IG51bGwuIAotICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiByYXdTY2hlbWFMb2NhdGlvblVSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICAgIGZvciAoRU9iamVjdCBwYXJlbnQgPSB4c2RTY2hlbWEuZUNvbnRhaW5lcigpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmVDb250YWluZXIoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIERlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZpbml0aW9uID0gKERlZmluaXRpb24pcGFyZW50OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9ICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbykuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwgJiYgbmFtZXNwYWNlVVJJLmVxdWFscyhzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXNvbHZlZFNjaGVtYSA9IHNjaGVtYTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZFNjaGVtYTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBYU0RTY2hlbWFMb2NhdG9yLmNsYXNzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTIyZGUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi8vYXBpc3R5bGVzLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPHRhYmxlIHdpZHRoPSI1MDAiPgotPHRyPgotPHRkPgotPHA+VGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+Ci08L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhNWJhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxodG1sPgotCTxoZWFkPgotCQk8bWV0YQotCQkJbmFtZT0icm9vdCIKLQkKLQkJCWNvbnRlbnQ9Ii4uLy4uLy4uLy4uLy4uLy4uLyIgLz4KLQkJPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLQk8L2hlYWQ+Ci0KLQk8Ym9keT4KLQkJPGFic3RyYWN0PgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvYWJzdHJhY3Q+Ci0JCTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPiAKLQk8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMWViN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci17Ci0gIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyMGI4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi0vKioKLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkKLXsKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJGYWN0b3J5KFN0cmluZyBuYW1lc3BhY2UsIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzY0NWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGRlZmluZXMgY29uc3RhbnRzIGZvciBXU0RMIGVsZW1lbnQgdGFncyBhbmQgcmVsZXZhbnQgbmFtZXNwYWNlcy4KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFdTRExDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCSU5ESU5HID0gMDsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkZWZpbml0aW9ucyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZJTklUSU9OID0gMTsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkb2N1bWVudGF0aW9uIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPQ1VNRU5UQVRJT04gPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImZhdWx0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBVUxUID0gMzsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbXBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUID0gNDsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbnB1dCI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlBVVCA9IDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFID0gNjsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvcGVyYXRpb24iPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OID0gNzsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvdXRwdXQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VUUFVUID0gODsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwYXJ0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlQgPSA5OwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVCA9IDEwOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnRUeXBlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlRfVFlQRSA9IDExOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InNlcnZpY2UiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRSA9IDEyOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InR5cGVzIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVTID0gMTM7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkdfRUxFTUVOVF9UQUcgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkZWZpbml0aW9ucyI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRklOSVRJT05fRUxFTUVOVF9UQUcgPSAiZGVmaW5pdGlvbnMiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZG9jdW1lbnRhdGlvbiI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcgPSAiZG9jdW1lbnRhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJmYXVsdCI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVUxUX0VMRU1FTlRfVEFHID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImltcG9ydCI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNUE9SVF9FTEVNRU5UX1RBRyA9ICJpbXBvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW5wdXQiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlBVVF9FTEVNRU5UX1RBRyA9ICJpbnB1dCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJtZXNzYWdlIjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9FTEVNRU5UX1RBRyA9ICJtZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im9wZXJhdGlvbiI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTl9FTEVNRU5UX1RBRyA9ICJvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3V0cHV0IjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUUFVUX0VMRU1FTlRfVEFHID0gIm91dHB1dCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwYXJ0IjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9FTEVNRU5UX1RBRyA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUX0VMRU1FTlRfVEFHID0gInBvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydFR5cGUiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUX1RZUEVfRUxFTUVOVF9UQUcgPSAicG9ydFR5cGUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ic2VydmljZSI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRUxFTUVOVF9UQUcgPSAic2VydmljZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJ0eXBlcyI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVTX0VMRU1FTlRfVEFHID0gInR5cGVzIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIGNvbW1vbgotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FUVFJJQlVURSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJtZXNzYWdlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFX0FUVFJJQlVURSA9ICJtZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJiaW5kaW5nIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0FUVFJJQlVURSA9ICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0eXBlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0FUVFJJQlVURSA9ICJ0eXBlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIGRlZmluaXRpb25zCi0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImVuY29kaW5nIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBFTkNPRElOR19BVFRSSUJVVEUgPSAiZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InRhcmdldE5hbWVzcGFjZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSA9ICJ0YXJnZXROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gYmluZGluZwotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJyZXNvdXJjZVVSSSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVTT1VSQ0VfVVJJX0FUVFJJQlVURSA9ICJyZXNvdXJjZVVSSSI7IC8vJE5PTi1OTFMtMSQKLQotICAvLyBwYXJ0Ci0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImVsZW1lbnQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEVMRU1FTlRfQVRUUklCVVRFID0gImVsZW1lbnQiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gaW1wb3J0Ci0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImxvY2F0aW9uIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMT0NBVElPTl9BVFRSSUJVVEUgPSAibG9jYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gb3BlcmF0aW9uCi0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InBhcmFtZXRlck9yZGVyIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQQVJBTUVURVJfT1JERVJfQVRUUklCVVRFID0gInBhcmFtZXRlck9yZGVyIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+Im5hbWVzcGFjZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX0FUVFJJQlVURSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPC9jb2RlPi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfTkFNRVNQQUNFX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNEX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEiPC9jb2RlPi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9GT1JfU0NIRU1BX1VSSV8xOTk5ID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMTAvWE1MU2NoZW1hIjwvY29kZT4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRUxFTUVOVF9UQUdTID0gbmV3IFN0cmluZyBbXXsKLSAgICBCSU5ESU5HX0VMRU1FTlRfVEFHLAotICAgIERFRklOSVRJT05fRUxFTUVOVF9UQUcsCi0gICAgRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRywKLSAgICBGQVVMVF9FTEVNRU5UX1RBRywKLSAgICBJTVBPUlRfRUxFTUVOVF9UQUcsCi0gICAgSU5QVVRfRUxFTUVOVF9UQUcsCi0gICAgTUVTU0FHRV9FTEVNRU5UX1RBRywKLSAgICBPUEVSQVRJT05fRUxFTUVOVF9UQUcsCi0gICAgT1VUUFVUX0VMRU1FTlRfVEFHLAotICAgIFBBUlRfRUxFTUVOVF9UQUcsCi0gICAgUE9SVF9FTEVNRU5UX1RBRywKLSAgICBQT1JUX1RZUEVfRUxFTUVOVF9UQUcsCi0gICAgU0VSVklDRV9FTEVNRU5UX1RBRywKLSAgICBUWVBFU19FTEVNRU5UX1RBRyB9OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgU3RyaW5nIG5hbWUgb2YgZWxlbWVudCB0YWcgZ2l2ZW4gdGhlIG5vZGVUeXBlLgotICAgKiBAcGFyYW0gbm9kZVR5cGUgYSBjb25zdGFudCBkZWZpbmVkIGluIFdTRExDb25zdGFudHMuCi0gICAqIEByZXR1cm4gZWxlbWVudCB0YWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRFbGVtZW50VGFnKGludCBub2RlVHlwZSkKLSAgewotICAgIHJldHVybiBFTEVNRU5UX1RBR1Nbbm9kZVR5cGVdOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBub2RlIHR5cGUgZ2l2ZW4gdGhlIFN0cmluZyBuYW1lIG9mIGVsZW1lbnQgdGFnLgotICAgKiBAcGFyYW0gbG9jYWxOYW1lIHRoZSBsb2NhbCBuYW1lIG9mIGVsZW1lbnQgdGFnLgotICAgKiBAcmV0dXJuIGEgbm9kZSB0eXBlIGRlZmluZWQgaW4gV1NETENvbnN0YW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IG5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEVMRU1FTlRfVEFHUy5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhFTEVNRU5UX1RBR1NbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBub2RlIHR5cGUgZGVmaW5lZCBpbiBXU0RMQ29uc3RhbnRzIGdpdmVuIHRoZSBET00gbm9kZS4KLSAgICogQHBhcmFtIG5vZGUgYSBET00gbm9kZS4KLSAgICogQHJldHVybiBhIG5vZGUgdHlwZSBkZWZpbmVkIGluIFdTRExDb25zdGFudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBub2RlVHlwZShOb2RlIG5vZGUpCi0gIHsKLSAgICByZXR1cm4gaXNXU0RMTmFtZXNwYWNlKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpID8gbm9kZVR5cGUobm9kZS5nZXRMb2NhbE5hbWUoKSkgOiAtMTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWVzcGFjZSBpcyB0aGUgV1NETCBuYW1lc3BhY2Ugb3Igbm90LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIGEgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWVzcGFjZSBpcyB0aGUgV1NETCBuYW1lc3BhY2Ugb3Igbm90LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzV1NETE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmV0dXJuIFdTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgbmFtZXNwYWNlMSBlcXVhbHMgdG8gbmFtZXNwYWNlMi4KLSAgICogQHBhcmFtIG5hbWVzcGFjZTEgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UyIGEgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlMSBlcXVhbHMgdG8gbmFtZXNwYWNlMi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc01hdGNoaW5nTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UxLCBTdHJpbmcgbmFtZXNwYWNlMikKLSAgewotICAgIHJldHVybiAobmFtZXNwYWNlMSA9PSBudWxsID8gbmFtZXNwYWNlMiA9PSBudWxsIDogbmFtZXNwYWNlMS5lcXVhbHMobmFtZXNwYWNlMikpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXR0cmlidXRlIHZhbHVlIGdpdmVuIHRoZSBhdHRyaWJ1dGVOYW1lIGluIHRoZSBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBhIERPTSBlbGVtZW50IHRvIHNlYXJjaCBmb3IgdGhlIGF0dHJpYnV0ZSBmcm9tLgotICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBhbiBhdHRyaWJ1dGUgdG8gZmluZCBmcm9tIHRoZSBlbGVtZW50LgotICAgKiBAcmV0dXJuIGFuIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgOiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTNiMjA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBHZW5lcmF0ZWQgYnkgdGhlIFdTREwgbW9kZWwgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBtZWNoYW5pc21zLgotICogCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjYW5kaWRhdGUgdG8gYmVjb21pbmcgYSBmaXJzdCBjbGFzcyBXU0RMIG1vZGVsIG9iamVjdC4KLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRGlhZ25vc3RpYyBleHRlbmRzIFJlc291cmNlLkRpYWdub3N0aWMKLXsKLSAgLyoqCi0gICAqIFByb3ZpZGVzIHRoaXMgZGlhZ25vc3RpYydzIHNldmVyaXR5LgotICAgKiAKLSAgICogQHJldHVybiBhbiBYU0REaWFnbm9zdGljU2V2ZXJpdHkKLSAgICovCi0gIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0U2V2ZXJpdHkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGlzIGRpYWdub3N0aWMncyBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eQotICAgKiAgICAgICAgICB0aGUgbmV3IGRpYWdub3N0aWMgc2V2ZXJpdHkuCi0gICAqLwotICB2b2lkIHNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgc2V2ZXJpdHkpOwotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGtleS4KLSAgICogCi0gICAqIEByZXR1cm4gYSBTdHJpbmcgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi0gICAqLwotICBTdHJpbmcgZ2V0S2V5KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyBtZXNzYWdlIGtleSB2YWx1ZS4KLSAgICovCi0gIHZvaWQgc2V0S2V5KFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIERPTSBOb2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLSAgICogCi0gICAqIEByZXR1cm4gVGhlIERPTSBub2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLSAgICovCi0gIE5vZGUgZ2V0Tm9kZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqIEBwYXJhbSBub2RlCi0gICAqLwotICB2b2lkIHNldE5vZGUoTm9kZSBub2RlKTsKLQotICAvKioKLSAgICogcmV0dXJucyB0aGUgRWxlbWVudCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqIEByZXR1cm4gLSBPYmplY3Qgb2YgdHlwZSBYU0RDb25jcmV0ZUNvbXBvbmVudCBpZiB0aGUgZXJyb3IKLSAgICogCQkJY29tZXMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSBvZiBhIHdzZGwgZmlsZQotICAgKiAJCSAtIG9iamVjdCBvZiB0eXBlIFdTRExFbGVtZW50IGlmIHRoZSBlcnJvciBjb21lcyBmcm9tCi0gICAqIAkJCW90aGVyIHBhcnQgb2YgdGhlIHdzZGwgZmlsZQotICAgKi8KLSAgT2JqZWN0IGdldENvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBDb250YWluZXIgb2YgdGhlIGVycm9yCi0gICAqIEBwYXJhbSBjb250YWluZXIKLSAgICogCQkJYW4gT2JqZWN0IG9mIGVpdGhlciBYU0RDb25jcmV0ZUNvbXBvbmVudCBvciBXU0RMRWxlbWVudCAKLSAgICovCi0gIHZvaWQgc2V0Q29udGFpbmVyKE9iamVjdCBjb250YWluZXIpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHBhcmFtZXRlcnMgYXMgU3RyaW5ncy4KLSAgICogQHJldHVybiAgYSBsaXN0IHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycyBhcyBTdHJpbmdzLgotICAgKi8KLSAgRUxpc3QgZ2V0U3Vic3RpdHV0aW9ucygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmUwZjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpYzsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpY1NldmVyaXR5OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBXU0RMRGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgY2xhc3MgaXMgYmFzZWQKLSAqIG9uIFhTRERpYWdub3N0aWNJbXBsCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIFdTRExEaWFnbm9zdGljSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgV1NETERpYWdub3N0aWMKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb2x1bW4oKSA8ZW0+Q29sdW1uPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRDb2x1bW4oKQotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQ09MVU1OX0VERUZBVUxUID0gMTsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpbmUoKSA8ZW0+TGluZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiAKLSAgICogCi0gICAqIEBzZWUgI2dldExpbmUoKQotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTElORV9FREVGQVVMVCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nCi0gICAqIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIAotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWVzc2FnZSgpIDxlbT5NZXNzYWdlPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2V2ZXJpdHkoKSA8ZW0+U2V2ZXJpdHk8L2VtPn0nCi0gICAqIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIEBzZWUgI2dldFNldmVyaXR5KCkKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgV1NETERpYWdub3N0aWNTZXZlcml0eSBTRVZFUklUWV9FREVGQVVMVCA9IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29sdW1uKCkgPGVtPkNvbHVtbjwvZW0+fScgYXR0cmlidXRlLgotICAgKiAKLSAgICogCi0gICAqIEBzZWUgI2dldENvbHVtbigpCi0gICAqIAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIGludCBjb2x1bW4gPSBDT0xVTU5fRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpbmUoKSA8ZW0+TGluZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiAKLSAgICogCi0gICAqIEBzZWUgI2dldExpbmUoKQotICAgKi8KLSAgcHJvdGVjdGVkIGludCBsaW5lID0gTElORV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiAKLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvblVSSSA9IExPQ0FUSU9OX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWVzc2FnZSgpIDxlbT5NZXNzYWdlPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZSA9IE1FU1NBR0VfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNldmVyaXR5KCkgPGVtPlNldmVyaXR5PC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRTZXZlcml0eSgpCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETERpYWdub3N0aWNTZXZlcml0eSBzZXZlcml0eSA9IFNFVkVSSVRZX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGtleTsKLQotICAvKioKLSAgICogVGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycy4KLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBzdWJzdGl0dXRpb25zOwotCi0gIC8qKgotICAgKiBUaGUgTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqLwotICBwcm90ZWN0ZWQgTm9kZSBub2RlOwotCi0gIC8qKgotICAgKiBUaGUgV1NETEVsZW1lbnQgb3IgWFNEQ29uY3JldGVDb21wb25lbnQgb2JqZWN0IHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgY29udGFpbmVyOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExEaWFnbm9zdGljSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyYXBzIGFuIFhTRCBkaWFnbm9zdGljIGludG8gYSBXU0RMIGRpYWdub3N0aWMuIFVzZWQgdG8gcmVwb3J0IHByb2JsZW1zIGluCi0gICAqIGlubGluZSBzY2hlbWFzLgotICAgKiAKLSAgICogQHBhcmFtIHhzZERpYWdub3N0aWMKLSAgICogICAgICAgICAgdGhlIFhTRCBkaWFnbm9zdGljIG9iamVjdCB0byB3cmFwLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIFdTRExEaWFnbm9zdGljSW1wbChYU0REaWFnbm9zdGljIHhzZERpYWdub3N0aWMpCi0gIHsKLSAgICB0aGlzKCk7Ci0gICAgc2V0TWVzc2FnZSh4c2REaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7Ci0gICAgc2V0U2V2ZXJpdHkoZ2V0U2V2ZXJpdHkoeHNkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpKSk7Ci0gICAgc2V0TGluZSh4c2REaWFnbm9zdGljLmdldExpbmUoKSk7Ci0gICAgc2V0Q29sdW1uKHhzZERpYWdub3N0aWMuZ2V0Q29sdW1uKCkpOwotICAgIHNldE5vZGUoeHNkRGlhZ25vc3RpYy5nZXROb2RlKCkpOwotICAgIHNldENvbnRhaW5lcih4c2REaWFnbm9zdGljLmdldENvbnRhaW5lcigpKTsKLSAgICBzZXRMb2NhdGlvbih4c2REaWFnbm9zdGljLmdldExvY2F0aW9uKCkpOwotICAgIHNldEtleSh4c2REaWFnbm9zdGljLmdldEtleSgpKTsKLSAgICBnZXRTdWJzdGl0dXRpb25zKCkuYWRkQWxsKHhzZERpYWdub3N0aWMuZ2V0U3Vic3RpdHV0aW9ucygpKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlJERpYWdub3N0aWMjZ2V0Q29sdW1uKCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uKCkKLSAgewotICAgIHJldHVybiBjb2x1bW47Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZSREaWFnbm9zdGljI2dldExpbmUoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lKCkKLSAgewotICAgIHJldHVybiBsaW5lOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UkRGlhZ25vc3RpYyNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlJERpYWdub3N0aWMjZ2V0TWVzc2FnZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNnZXRTZXZlcml0eSgpCi0gICAqLwotICBwdWJsaWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXRTZXZlcml0eSgpCi0gIHsKLSAgICByZXR1cm4gc2V2ZXJpdHk7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydHMgYW4gWFNEIGRpYWdub3N0aWMgc2V2ZXJpdHkgbGV2ZWwgaW50byBhIFdTREwgZGlhZ25vc3RpYyBzZXZlcml0eQotICAgKiBsZXZlbC4KLSAgICogCi0gICAqIEBwYXJhbSB4c2REaWFnbm9zdGljU2V2ZXJpdHkKLSAgICogICAgICAgICAgdGhlIHNvdXJjZSBYU0QgZGlhZ25vc3RpYyBzZXZlcml0eS4KLSAgICogQHJldHVybiB0aGUgZXF1aXZhbGVudCBXU0RMIGRpYWdub3N0aWMgc2V2ZXJpdHkuCi0gICAqLwotICBwcml2YXRlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0U2V2ZXJpdHkoWFNERGlhZ25vc3RpY1NldmVyaXR5IHhzZERpYWdub3N0aWNTZXZlcml0eSkKLSAgewotICAgIHN3aXRjaCAoeHNkRGlhZ25vc3RpY1NldmVyaXR5LmdldFZhbHVlKCkpCi0gICAgewotICAgICAgY2FzZSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUw6Ci0gICAgICByZXR1cm4gV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTF9MSVRFUkFMOwotICAgICAgY2FzZSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuRVJST1I6Ci0gICAgICByZXR1cm4gV1NETERpYWdub3N0aWNTZXZlcml0eS5FUlJPUl9MSVRFUkFMOwotICAgICAgY2FzZSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuV0FSTklORzoKLSAgICAgIHJldHVybiBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LldBUk5JTkdfTElURVJBTDsKLSAgICAgIGNhc2UgWFNERGlhZ25vc3RpY1NldmVyaXR5LklORk9STUFUSU9OOgotICAgICAgcmV0dXJuIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuSU5GT1JNQVRJT05fTElURVJBTDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gU0VWRVJJVFlfRURFRkFVTFQ7Ci19Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY29sdW1uIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIEBwYXJhbSBuZXdDb2x1bW4KLSAgICogICAgICAgICAgdGhlIG5ldyBjb2x1bW4gdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb2x1bW4oaW50IG5ld0NvbHVtbikKLSAgewotICAgIGNvbHVtbiA9IG5ld0NvbHVtbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExpbmUoaW50IG5ld0xpbmUpCi0gIHsKLSAgICBsaW5lID0gbmV3TGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbG9hY3Rpb24gYXR0cmlidXRlLgotICAgKiAKLSAgICogQHBhcmFtIGxvY2F0aW9uCi0gICAqICAgICAgICAgIGEgU3RyaW5nIHdpdGggdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgbG9jYXRpb25VUkkgPSBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIGEgbmV3IHZhbHVlIGZvciB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAcGFyYW0gbmV3TWVzc2FnZQotICAgKiAgICAgICAgICBhIFN0cmluZyB3aXRoIHRoZSBuZXcgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG5ld01lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlID0gbmV3TWVzc2FnZTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI3NldFNldmVyaXR5KG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgbmV3U2V2ZXJpdHkpCi0gIHsKLSAgICBzZXZlcml0eSA9IG5ld1NldmVyaXR5ID09IG51bGwgPyBTRVZFUklUWV9FREVGQVVMVCA6IG5ld1NldmVyaXR5OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI2dldEtleSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCi0gIHsKLSAgICByZXR1cm4ga2V5OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjc2V0S2V5KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAga2V5ID0gdmFsdWU7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNnZXRTdWJzdGl0dXRpb25zKCkKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRTdWJzdGl0dXRpb25zKCkKLSAgewotICAgIGlmIChzdWJzdGl0dXRpb25zID09IG51bGwpCi0gICAgewotICAgICAgc3Vic3RpdHV0aW9ucyA9IG5ldyBCYXNpY0VMaXN0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdWJzdGl0dXRpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjZ2V0Tm9kZSgpCi0gICAqLwotICBwdWJsaWMgTm9kZSBnZXROb2RlKCkKLSAgewotICAgIHJldHVybiBub2RlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjc2V0Tm9kZShvcmcudzNjLmRvbS5Ob2RlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Tm9kZShOb2RlIG5vZGUpCi0gIHsKLSAgICB0aGlzLm5vZGUgPSBub2RlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjZ2V0Q29udGFpbmVyKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiBjb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNzZXRDb250YWluZXIoamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRhaW5lcihPYmplY3QgY29udGFpbmVyKQotICB7Ci0gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDJmODA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5BYnN0cmFjdEVudW1lcmF0b3I7Ci0KLQotLyoqCi0gKiBXU0RMIGRpYWdub3N0aWMgc2V2ZXJpdHkgbGV2ZWxzIHR5cGUgc2FmZSBlbnVtZXJhdGlvbi4gVGhpcyBjbGFzcyBpcyBzaW1pbGFyCi0gKiB0byBYU0REaWFnbm9zdGljU2V2ZXJpdHkuCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZXh0ZW5kcyBBYnN0cmFjdEVudW1lcmF0b3IKLXsKLSAgLyoqCi0gICAqIFRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIHJlYWxseSBiYWQgYW5kIHRoYXQgZnVydGhlcgotICAgKiBwcm9jZXNzaW5nIGlzIGxpa2VseSBub3QgcG9zc2libGUuCi0gICAqIAotICAgKiBAc2VlICNGQVRBTF9MSVRFUkFMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQVRBTCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIGJhZCBhbmQgdGhhdCB0aGUgc2NoZW1hIGlzCi0gICAqIGxpa2VseSBub3Qgc3VpdGFibGUgZm9yIHVzZS4KLSAgICogCi0gICAqIEBzZWUgI0VSUk9SX0xJVEVSQUwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gMTsKLQotICAvKioKLSAgICogVGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgbm90IHRvbyBiYWQgYW5kIHRoYXQgdGhlCi0gICAqIGRlZmluaXRpb24gaXMgbGlrZWx5IHN1aXRhYmxlIGZvciB1c2UuCi0gICAqIAotICAgKiBAc2VlICNXQVJOSU5HX0xJVEVSQUwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSAyOwotCi0gIC8qKgotICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvYmxlbSBpcyBvbmx5IHBvdGVudGlhbCBhbmQgdGhhdCB0aGUKLSAgICogZGVmaW5pdGlvbiBpcyB2ZXJ5IGxpa2VseSBzdWl0YWJsZSBmb3IgdXNlLgotICAgKiAKLSAgICogQHNlZSAjSU5GT1JNQVRJT05fTElURVJBTAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT1JNQVRJT04gPSAzOwotCi0gIC8qKgotICAgKiBUaGUgJzxlbT48Yj5GYXRhbDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNGQVRBTAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IEZBVEFMX0xJVEVSQUwgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eShGQVRBTCwgImZhdGFsIiwgImZhdGFsIik7Ci0KLSAgLyoqCi0gICAqIFRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KLSAgICogCi0gICAqIEBzZWUgI0VSUk9SCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgRVJST1JfTElURVJBTCA9IG5ldyBXU0RMRGlhZ25vc3RpY1NldmVyaXR5KEVSUk9SLCAiZXJyb3IiLCAiZXJyb3IiKTsKLQotICAvKioKLSAgICogVGhlICc8ZW0+PGI+V2FybmluZzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNXQVJOSU5HCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgV0FSTklOR19MSVRFUkFMID0gbmV3IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkoV0FSTklORywgIndhcm5pbmciLCAid2FybmluZyIpOwotCi0gIC8qKgotICAgKiBUaGUgJzxlbT48Yj5JbmZvcm1hdGlvbjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNJTkZPUk1BVElPTgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IElORk9STUFUSU9OX0xJVEVSQUwgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eShJTkZPUk1BVElPTiwgImluZm9ybWF0aW9uIiwgImluZm9ybWF0aW9uIik7Ci0KLSAgLyoqCi0gICAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHlbXSBWQUxVRVNfQVJSQVkgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eSBbXXsKLSAgICBGQVRBTF9MSVRFUkFMLAotICAgIEVSUk9SX0xJVEVSQUwsCi0gICAgV0FSTklOR19MSVRFUkFMLAotICAgIElORk9STUFUSU9OX0xJVEVSQUwsIH07Ci0KLSAgLyoqCi0gICAqIEEgcHVibGljIHJlYWQtb25seSBsaXN0IG9mIGFsbCB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JwotICAgKiBlbnVtZXJhdG9ycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdCBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotICAgKiBzcGVjaWZpZWQgbGl0ZXJhbCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXQoU3RyaW5nIGxpdGVyYWwpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKLSAgICAgIGlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobGl0ZXJhbCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotICAgKiBzcGVjaWZpZWQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKLSAgICAgIGlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gICAqIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IGdldChpbnQgdmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKHZhbHVlKQotICAgIHsKLSAgICAgIGNhc2UgRkFUQUw6Ci0gICAgICByZXR1cm4gRkFUQUxfTElURVJBTDsKLSAgICAgIGNhc2UgRVJST1I6Ci0gICAgICByZXR1cm4gRVJST1JfTElURVJBTDsKLSAgICAgIGNhc2UgV0FSTklORzoKLSAgICAgIHJldHVybiBXQVJOSU5HX0xJVEVSQUw7Ci0gICAgICBjYXNlIElORk9STUFUSU9OOgotICAgICAgcmV0dXJuIElORk9STUFUSU9OX0xJVEVSQUw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KLSAgICovCi0gIHByaXZhdGUgV1NETERpYWdub3N0aWNTZXZlcml0eShpbnQgdmFsdWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgbGl0ZXJhbCkKLSAgewotICAgIHN1cGVyKHZhbHVlLCBuYW1lLCBsaXRlcmFsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOWJmMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TWFwOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci1pbXBvcnQgamF2YS51dGlsLldlYWtIYXNoTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuRGVmYXVsdEpBWFBDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLkpBWFBDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLkpBWFBQb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotCi0vKioKLSAqIFRoZSA8Yj5TQVggUGFyc2VyPC9iPiBmb3IgdGhlIFdTREwgbW9kZWwuIFRoaXMgY2xhc3MnIG1haW4gcmVzcG9uc2liaWxpdHkgaXMKLSAqIHRvIGNvbXB1dGUgbGluZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIGFsbCBlbGVtZW50cyBpbiB0aGUgc291cmNlIFhNTAotICogZG9jdW1lbnQuIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGEgbWFwIG9mIGVhY2ggbm9kZSB0byBpdHMgdXNlciBkYXRhLgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMKLSAqIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiAKLSAqIFtJU1NVRV0gTW9zdCBvZiB0aGlzIGNsYXNzJyBpbXBsZW1lbnRhdGlvbiBpcyBhIGNsb25lIG9mIFhTRFBhcnNlci4gVGhlcmUgYXJlCi0gKiBwbGFucyB0byB3b3JrIG9uIGNsb3NlbHkgaW50ZWdyYXRpbmcgdGhpcyBjbGFzcyBhbmQgWFNEUGFyc2VyIHRvIHByb3ZpZGUgZm9yCi0gKiB0aGUgbW9zdCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiBpbmxpbmUgc2NoZW1hcy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExQYXJzZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciBpbXBsZW1lbnRzIExleGljYWxIYW5kbGVyCi17Ci0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBkYXRhIHBhcnQgaG9sZGluZyBlbmQgY29sdW1uIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX0NPTFVNTiA9ICJlbmRDb2x1bW4iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGRhdGEgcGFydCBob2xkaW5nIGVuZCBsaW5lIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX0xJTkUgPSAiZW5kTGluZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIHVzZXIgZGF0YSBwYXJ0IGhvbGRpbmcgc3RhcnQgY29sdW1uIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfQ09MVU1OID0gInN0YXJ0Q29sdW1uIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBkYXRhIHBhcnQgaG9sZGluZyBzdGFydCBsaW5lIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfTElORSA9ICJzdGFydExpbmUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIEFjY3VtdWxhdGVzIHRleHQgY29udGVudC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmdCdWZmZXIgY2RhdGE7Ci0KLSAgLyoqCi0gICAqIEN1cnJlbnQgQ0RBVEEgc2VjdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBDREFUQVNlY3Rpb24gY2RhdGFTZWN0aW9uOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgTG9jYXRpb25NYXAgZXh0ZW5kcyBBYnN0cmFjdE1hcAotICB7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgVU5TRVQgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICBwcm90ZWN0ZWQgTWFwIGRlbGVnYXRlTWFwOwotICAgIHByaXZhdGUgaW50IHN0YXJ0TGluZSA9IFVOU0VUOwotICAgIHByaXZhdGUgaW50IHN0YXJ0Q29sdW1uID0gVU5TRVQ7Ci0gICAgcHJpdmF0ZSBpbnQgZW5kTGluZSA9IFVOU0VUOwotICAgIHByaXZhdGUgaW50IGVuZENvbHVtbiA9IFVOU0VUOwotCi0gICAgcHVibGljIFNldCBlbnRyeVNldCgpCi0gICAgewotICAgICAgcmV0dXJuIGdldERlbGVnYXRlTWFwKCkuZW50cnlTZXQoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgTWFwIGdldERlbGVnYXRlTWFwKCkKLSAgICB7Ci0gICAgICBpZiAoZGVsZWdhdGVNYXAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVsZWdhdGVNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBpZiAoc3RhcnRMaW5lICE9IFVOU0VUKQotICAgICAgICB7Ci0gICAgICAgICAgZGVsZWdhdGVNYXAucHV0KFNUQVJUX0xJTkUsIG5ldyBJbnRlZ2VyKHN0YXJ0TGluZSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdGFydENvbHVtbiAhPSBVTlNFVCkKLSAgICAgICAgewotICAgICAgICAgIGRlbGVnYXRlTWFwLnB1dChTVEFSVF9DT0xVTU4sIG5ldyBJbnRlZ2VyKHN0YXJ0Q29sdW1uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVuZExpbmUgIT0gVU5TRVQpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWxlZ2F0ZU1hcC5wdXQoRU5EX0xJTkUsIG5ldyBJbnRlZ2VyKGVuZExpbmUpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5kQ29sdW1uICE9IFVOU0VUKQotICAgICAgICB7Ci0gICAgICAgICAgZGVsZWdhdGVNYXAucHV0KEVORF9DT0xVTU4sIG5ldyBJbnRlZ2VyKGVuZENvbHVtbikpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZGVsZWdhdGVNYXA7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGludCBvYmplY3RUb0ludChPYmplY3QgdmFsdWUpCi0gICAgewotICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBVTlNFVCA6ICgoSW50ZWdlcil2YWx1ZSkuaW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgT2JqZWN0IGludFRvT2JqZWN0KGludCB2YWx1ZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdmFsdWUgPT0gVU5TRVQgPyBudWxsIDogbmV3IEludGVnZXIodmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgcHV0KE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSkKLSAgICB7Ci0gICAgICBPYmplY3QgcmVzdWx0OwotICAgICAgaWYgKGRlbGVnYXRlTWFwID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChTVEFSVF9MSU5FLmVxdWFscyhrZXkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gaW50VG9PYmplY3Qoc3RhcnRMaW5lKTsKLSAgICAgICAgICBzdGFydExpbmUgID0gb2JqZWN0VG9JbnQodmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKEVORF9MSU5FLmVxdWFscyhrZXkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gaW50VG9PYmplY3QoZW5kTGluZSk7Ci0gICAgICAgICAgZW5kTGluZSAgPSBvYmplY3RUb0ludCh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoU1RBUlRfQ09MVU1OLmVxdWFscyhrZXkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gaW50VG9PYmplY3Qoc3RhcnRDb2x1bW4pOwotICAgICAgICAgIHN0YXJ0Q29sdW1uICA9IG9iamVjdFRvSW50KHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChFTkRfQ09MVU1OLmVxdWFscyhrZXkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gaW50VG9PYmplY3QoZW5kQ29sdW1uKTsKLSAgICAgICAgICBlbmRDb2x1bW4gID0gb2JqZWN0VG9JbnQodmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGdldERlbGVnYXRlTWFwKCkucHV0KGtleSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGdldERlbGVnYXRlTWFwKCkucHV0KGtleSwgdmFsdWUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFN0YXJ0TGluZSgpCi0gICAgewotICAgICAgcmV0dXJuIGRlbGVnYXRlTWFwID09IG51bGwgPyBzdGFydExpbmUgOiBvYmplY3RUb0ludChkZWxlZ2F0ZU1hcC5nZXQoU1RBUlRfTElORSkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0TGluZShpbnQgc3RhcnRMaW5lKQotICAgIHsKLSAgICAgIGlmIChkZWxlZ2F0ZU1hcCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZGVsZWdhdGVNYXAucHV0KFNUQVJUX0xJTkUsIG5ldyBJbnRlZ2VyKHN0YXJ0TGluZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0U3RhcnRDb2x1bW4oKQotICAgIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZU1hcCA9PSBudWxsID8gc3RhcnRDb2x1bW4gOiBvYmplY3RUb0ludChkZWxlZ2F0ZU1hcC5nZXQoU1RBUlRfQ09MVU1OKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U3RhcnRDb2x1bW4oaW50IHN0YXJ0Q29sdW1uKQotICAgIHsKLSAgICAgIGlmIChkZWxlZ2F0ZU1hcCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aGlzLnN0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRlbGVnYXRlTWFwLnB1dChTVEFSVF9DT0xVTU4sIG5ldyBJbnRlZ2VyKHN0YXJ0Q29sdW1uKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRFbmRMaW5lKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZGVsZWdhdGVNYXAgPT0gbnVsbCA/IGVuZExpbmUgOiBvYmplY3RUb0ludChkZWxlZ2F0ZU1hcC5nZXQoRU5EX0xJTkUpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbmRMaW5lKGludCBlbmRMaW5lKQotICAgIHsKLSAgICAgIGlmIChkZWxlZ2F0ZU1hcCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aGlzLmVuZExpbmUgPSBlbmRMaW5lOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkZWxlZ2F0ZU1hcC5wdXQoRU5EX0xJTkUsIG5ldyBJbnRlZ2VyKGVuZExpbmUpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEVuZENvbHVtbigpCi0gICAgewotICAgICAgcmV0dXJuIGRlbGVnYXRlTWFwID09IG51bGwgPyBlbmRDb2x1bW4gOiBvYmplY3RUb0ludChkZWxlZ2F0ZU1hcC5nZXQoImVuZENvbHVtbiIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbmRDb2x1bW4oaW50IGVuZENvbHVtbikKLSAgICB7Ci0gICAgICBpZiAoZGVsZWdhdGVNYXAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRlbGVnYXRlTWFwLnB1dChFTkRfQ09MVU1OLCBuZXcgSW50ZWdlcihlbmRDb2x1bW4pKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSG9sZHMgcGFpcnMgTm9kZSAtPiBNYXAgd2l0aCB1c2VyIGRhdGEuCi0gICAqIAotICAgKiBAc2VlICNFTkRfQ09MVU1OCi0gICAqIEBzZWUgI0VORF9MSU5FCi0gICAqIEBzZWUgI1NUQVJUX0NPTFVNTgotICAgKiBAc2VlICNTVEFSVF9MSU5FCi0gICAqIAotICAgKiBBIFdlYWtIYXNoTWFwIGlzIHVzZWQgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhpcyBtYXAncyBtYWludGVuYW5jZS4gQXMgbm9kZXMKLSAgICogYXJlIGdhcmJhZ2UgY29sbGVjdGVkIHdoZW4gbm90IG5lZWRlZCBhbnltb3JlLCB0aGUgSlZNIHdpbGwgdGFrZSBjYXJlIG9mCi0gICAqIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGlzIG1hcC4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgTWFwIHVzZXJEYXRhTWFwID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBXZWFrSGFzaE1hcCgpKTsKLQotICBwcml2YXRlIHN0YXRpYyBMb2NhdGlvbk1hcCBnZXRMb2NhdGlvbk1hcChOb2RlIG5vZGUpCi0gIHsKLSAgICBMb2NhdGlvbk1hcCByZXN1bHQgPSAoTG9jYXRpb25NYXApdXNlckRhdGFNYXAuZ2V0KG5vZGUpOwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgTG9jYXRpb25NYXAoKTsKLSAgICAgIHVzZXJEYXRhTWFwLnB1dChub2RlLCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgdGhlIG5vZGUgdG8gcXVlcnkuCi0gICAqIEByZXR1cm4gdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0RW5kQ29sdW1uKE5vZGUgbm9kZSkKLSAgewotICAgIGludCByZXN1bHQgPSBnZXRMb2NhdGlvbk1hcChub2RlKS5nZXRFbmRDb2x1bW4oKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IExvY2F0aW9uTWFwLlVOU0VUID8gMSA6IHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsaW5lIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgbm9kZSB0byBxdWVyeS4KLSAgICogQHJldHVybiB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0RW5kTGluZShOb2RlIG5vZGUpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gZ2V0TG9jYXRpb25NYXAobm9kZSkuZ2V0RW5kTGluZSgpOwotICAgIHJldHVybiByZXN1bHQgPT0gTG9jYXRpb25NYXAuVU5TRVQgPyAxIDogcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgbm9kZSB0byBxdWVyeS4KLSAgICogQHJldHVybiB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIHN0YXJ0cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFN0YXJ0Q29sdW1uKE5vZGUgbm9kZSkKLSAgewotICAgIGludCByZXN1bHQgPSBnZXRMb2NhdGlvbk1hcChub2RlKS5nZXRTdGFydENvbHVtbigpOwotICAgIHJldHVybiByZXN1bHQgPT0gTG9jYXRpb25NYXAuVU5TRVQgPyAxIDogcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgdGhlIG5vZGUgdG8gcXVlcnkuCi0gICAqIEByZXR1cm4gdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3RhcnRMaW5lKE5vZGUgbm9kZSkKLSAgewotICAgIGludCByZXN1bHQgPSBnZXRMb2NhdGlvbk1hcChub2RlKS5nZXRTdGFydExpbmUoKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IExvY2F0aW9uTWFwLlVOU0VUID8gMSA6IHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLiBJZiB0aGUgbm9kZSBoYXMgbm8gdXNlcgotICAgKiBkYXRhLCBhIG5ldyBlbXB0eSBtYXAgaXMgY3JlYXRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBub2RlCi0gICAqICAgICAgICAgIHRoZSBub2RlIHRvIHF1ZXJ5LgotICAgKiBAcmV0dXJuIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBNYXAgZ2V0VXNlckRhdGEoTm9kZSBub2RlKQotICB7Ci0gICAgcmV0dXJuIGdldExvY2F0aW9uTWFwKG5vZGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGludCBjb2x1bW47Ci0KLSAgTGlzdCBkaWFnbm9zdGljcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgZWxlbWVudDsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGVuY29kaW5nOwotCi0gIHByb3RlY3RlZCBib29sZWFuIGluU2NoZW1hOwotCi0gIHByb3RlY3RlZCBpbnQgbGluZTsKLQotICBwcm90ZWN0ZWQgTG9jYXRvciBsb2NhdG9yOwotCi0gIHByb3RlY3RlZCBTQVhQYXJzZXIgc2F4UGFyc2VyOwotCi0gIHByb3RlY3RlZCBTdGFjayBzdGFjayA9IG5ldyBTdGFjaygpOwotCi0gIHByb3RlY3RlZCBKQVhQUG9vbCBqYXhwUG9vbDsKLSAgICAKLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETFBhcnNlcigpCi0gIHsKLSAgICB0aGlzKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgV1NETCBwYXJzZXIgZ2l2ZW4gYSBzZXQgb2YgcGFyc2luZyBvcHRpb25zLgotICAgKiAKLSAgICogQHBhcmFtIG9wdGlvbnMgYSBNYXAgb2YgU3RyaW5nIHRvIE9iamVjdCwgcGFzc2VkIGFsb25nIHRocm91Z2ggdGhlIFJlc291cmNlU2V0IGFuZCBSZXNvdXJjZS4gCi0gICAqLwotICBwdWJsaWMgV1NETFBhcnNlcihNYXAgb3B0aW9ucykKLSAgewotICAgIEpBWFBDb25maWd1cmF0aW9uIGNvbmZpZyA9IG51bGw7Ci0gICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBqYXhwUG9vbCA9IChKQVhQUG9vbClvcHRpb25zLmdldChXU0RMUmVzb3VyY2VJbXBsLldTRExfSkFYUF9QT09MKTsKLSAgICAgIGNvbmZpZyA9IChKQVhQQ29uZmlndXJhdGlvbilvcHRpb25zLmdldChXU0RMUmVzb3VyY2VJbXBsLldTRExfSkFYUF9DT05GSUcpOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoamF4cFBvb2wgPT0gbnVsbCkKLSAgICAgIHsgICAgICAKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2F4UGFyc2VyID0gY29uZmlnLmNyZWF0ZVNBWFBhcnNlcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzYXhQYXJzZXIgPSBuZXcgRGVmYXVsdEpBWFBDb25maWd1cmF0aW9uKCkuY3JlYXRlU0FYUGFyc2VyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNheFBhcnNlciA9IGpheHBQb29sLmdldFNBWFBhcnNlcih0aGlzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXJbXSBjaGFyYWN0ZXJzLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgewotICAgIGlmIChjZGF0YSAhPSBudWxsKQotICAgIHsKLSAgICAgIGNkYXRhLmFwcGVuZChjaGFyYWN0ZXJzLCBzdGFydCwgbGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGludCBsaW5lRmVlZCA9IDA7Ci0gICAgICBpbnQgY2FycmlhZ2VSZXR1cm4gPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgIHsKLSAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW3N0YXJ0ICsgaV07Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xuJykKLSAgICAgICAgewotICAgICAgICAgICsrbGluZUZlZWQ7Ci0gICAgICAgICAgY29sdW1uID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJ1xyJykKLSAgICAgICAgewotICAgICAgICAgICsrY2FycmlhZ2VSZXR1cm47Ci0gICAgICAgICAgY29sdW1uID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJyAnICYmIGNoYXJhY3RlciA9PSAnXHQnKQotICAgICAgICB7Ci0gICAgICAgICAgKytjb2x1bW47Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUHV0IHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgaW4gaXRzIG93biB0ZXh0IG5vZGUuCi0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3IFN0cmluZyhjaGFyYWN0ZXJzLCBzdGFydCwgaSkpOwotICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vIENyZWF0ZSBhIG5leHQgbm9kZSB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBub24td2hpdGVzcGFjZS4KLSAgICAgICAgICAvLwotICAgICAgICAgIGxpbmUgKz0gTWF0aC5tYXgobGluZUZlZWQsIGNhcnJpYWdlUmV0dXJuKTsKLSAgICAgICAgICBUZXh0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3IFN0cmluZyhjaGFyYWN0ZXJzLCBzdGFydCArIGksIGxlbmd0aCAtIGkpKTsKLSAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAgICAgICAgICBMb2NhdGlvbk1hcCBleHRlbmRlZEF0dHJpYnV0ZXMgPSBnZXRMb2NhdGlvbk1hcCh0ZXh0Tm9kZSk7Ci0gICAgICAgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzLnNldFN0YXJ0TGluZShsaW5lKTsKLSAgICAgICAgICBleHRlbmRlZEF0dHJpYnV0ZXMuc2V0U3RhcnRDb2x1bW4oY29sdW1uKTsKLSAgICAgICAgICBzYXZlTG9jYXRpb24oKTsKLSAgICAgICAgICBleHRlbmRlZEF0dHJpYnV0ZXMuc2V0RW5kTGluZShsaW5lKTsKLSAgICAgICAgICBleHRlbmRlZEF0dHJpYnV0ZXMuc2V0RW5kQ29sdW1uKGNvbHVtbik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBUZXh0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3IFN0cmluZyhjaGFyYWN0ZXJzLCBzdGFydCwgbGVuZ3RoKSk7Ci0gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAgICAgIHNhdmVMb2NhdGlvbigpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2NvbW1lbnQoY2hhcltdLCBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNvbW1lbnQoY2hhcltdIGNoYXJhY3RlcnMsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgQ29tbWVudCBjb21tZW50Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQobmV3IFN0cmluZyhjaGFyYWN0ZXJzLCBzdGFydCwgbGVuZ3RoKSk7Ci0gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBkb2N1bWVudC5hcHBlbmRDaGlsZChjb21tZW50Tm9kZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbW1lbnROb2RlKTsKLSAgICB9Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlbXB0eSBET00gRG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIGFuIGVtcHR5IERPTSBEb2N1bWVudCBvciBudWxsIGlzIGEgSkFYUCBtaXNjb25maWd1cmF0aW9uIGVycm9yCi0gICAqICAgICAgICAgb2NjdXJzLgotICAgKi8KLSAgcHJpdmF0ZSBEb2N1bWVudCBjcmVhdGVEb2N1bWVudCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY3VtZW50QnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLSAgICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgcmV0dXJuIGRvY3VtZW50QnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgV1NETFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2VuZENEQVRBKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZENEQVRBKCkKLSAgewotICAgIGNkYXRhU2VjdGlvbi5zZXREYXRhKGNkYXRhLnRvU3RyaW5nKCkpOwotICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2RhdGFTZWN0aW9uKTsKLSAgICBMb2NhdGlvbk1hcCBleHRlbmRlZEF0dHJpYnV0ZXMgPSBnZXRMb2NhdGlvbk1hcChjZGF0YVNlY3Rpb24pOwotICAgIGNkYXRhID0gbnVsbDsKLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMuc2V0RW5kTGluZShsaW5lKTsKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMuc2V0RW5kQ29sdW1uKGNvbHVtbik7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRG9jdW1lbnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQoKQotICB7Ci0gICAgZWxlbWVudCA9IG51bGw7Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0gICAgdGhpcy5sb2NhdG9yID0gbnVsbDsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2VuZERURCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmREVEQoKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoaW5TY2hlbWEpCi0gICAgewotICAgICAgTWFwIHVzZXJEYXRhID0gWFNEUGFyc2VyLmdldFVzZXJEYXRhKGVsZW1lbnQpOwotICAgICAgdXNlckRhdGEucHV0KEVORF9MSU5FLCBuZXcgSW50ZWdlcihsaW5lKSk7Ci0gICAgICB1c2VyRGF0YS5wdXQoRU5EX0NPTFVNTiwgbmV3IEludGVnZXIoY29sdW1uKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMb2NhdGlvbk1hcCBsb2NhdGlvbk1hcCA9IGdldExvY2F0aW9uTWFwKGVsZW1lbnQpOwotICAgICAgbG9jYXRpb25NYXAuc2V0RW5kTGluZShsaW5lKTsKLSAgICAgIGxvY2F0aW9uTWFwLnNldEVuZENvbHVtbihjb2x1bW4pOwotICAgIH0KLQotCi0gICAgaWYgKGlzU2NoZW1hRWxlbWVudCh1cmksIGxvY2FsTmFtZSkpCi0gICAgewotICAgICAgaW5TY2hlbWEgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbGVtZW50ID0gKEVsZW1lbnQpc3RhY2sucG9wKCk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEVudGl0eShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkVSUk9SX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZShXU0RMUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0lPRXJyb3JfbWVzc2FnZSIsIG5ldyBPYmplY3QgW117IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkgfSkpOyAvLyROT04tTkxTLTEkCi0gICAgZGlhZ25vc3RpYy5zZXRMaW5lKGV4Y2VwdGlvbi5nZXRMaW5lTnVtYmVyKCkpOwotICAgIGRpYWdub3N0aWMuc2V0Q29sdW1uKGV4Y2VwdGlvbi5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0gICAgZGlhZ25vc3RpY3MuYWRkKGRpYWdub3N0aWMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZmF0YWxFcnJvcihJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gIHsKLSAgICBXU0RMRGlhZ25vc3RpY0ltcGwgZGlhZ25vc3RpYyA9IG5ldyBXU0RMRGlhZ25vc3RpY0ltcGwoKTsKLSAgICBkaWFnbm9zdGljLnNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRNZXNzYWdlKFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfSU9FcnJvcl9tZXNzYWdlIiwgbmV3IE9iamVjdCBbXXsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSB9KSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBmYXRhbEVycm9yKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZShXU0RMUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1BhcnNlckVycm9yX21lc3NhZ2UiLCBuZXcgT2JqZWN0IFtdeyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpIH0pKTsgLy8kTk9OLU5MUy0xJAotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTF9MSVRFUkFMKTsKLSAgICBkaWFnbm9zdGljLnNldE1lc3NhZ2UoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9QYXJzZXJFcnJvcl9tZXNzYWdlIiwgbmV3IE9iamVjdCBbXXsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSB9KSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTF9MSVRFUkFMKTsKLSAgICBkaWFnbm9zdGljLnNldE1lc3NhZ2UoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9QYXJzZXJFcnJvcl9tZXNzYWdlIiwgbmV3IE9iamVjdCBbXXsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSB9KSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkaWFnbm9zdGljLnNldExpbmUoZXhjZXB0aW9uLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgZGlhZ25vc3RpYy5zZXRDb2x1bW4oZXhjZXB0aW9uLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICAvKioKLSAgICogUHJvdmlkZXMgYSBjb2xsZWN0aW9uIHdpdGggdGhlIGRpYWdub3N0aWNzIGdlbmVyYXRlZCBkdXJpbmcgcGFyc2luZy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBDb2xsZWN0aW9uIG9mIHtAbGluayBXU0RMRGlhZ25vc3RpY30gb2JqZWN0cy4KLSAgICovCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldERpYWdub3N0aWNzKCkKLSAgewotICAgIHJldHVybiBkaWFnbm9zdGljczsKLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlcyB0aGUgRE9NIGRvY3VtZW50IGNyZWF0ZWQgYnkgcGFyc2luZyB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdGluZyBET00gZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgYW4gZWxlbWVudCBpcyB0aGUgcm9vdCBYTUwgc2NoZW1hIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpCi0gICAqICAgICAgICAgIHRoZSBVUkkgdG8gdGVzdC4KLSAgICogQHBhcmFtIGxvY2FsTmFtZQotICAgKiAgICAgICAgICB0aGUgZWxlbWVudCdzIGxvY2FsIG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyB0aGUgcm9vdCBYTUwgc2NoZW1hIGVsZW1lbnQsIGZhbHNlCi0gICAqICAgICAgICAgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzU2NoZW1hRWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgaWYgKHVyaS5lcXVhbHMoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKSAmJiBsb2NhbE5hbWUuZXF1YWxzKFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXJzZShJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHNheFBhcnNlci5wYXJzZShpbnB1dFNvdXJjZSwgdGhpcyk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBpZiAoZGlhZ25vc3RpY3MuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBpZiAoamF4cFBvb2wgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF4cFBvb2wucmVsZWFzZVNBWFBhcnNlcihzYXhQYXJzZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZXMgdGhlIFhNTCBjb250ZW50IHJlYWQgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFtLgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqICAgICAgICAgIHRoZSBzb3VyY2UgaW5wdXQgc3RyZWFtLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2UoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzYXhQYXJzZXIucGFyc2UobmV3IElucHV0U291cmNlKGlucHV0U3RyZWFtKSwgdGhpcyk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBpZiAoZGlhZ25vc3RpY3MuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBpZiAoamF4cFBvb2wgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF4cFBvb2wucmVsZWFzZVNBWFBhcnNlcihzYXhQYXJzZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKFN0cmluZyB0YXJnZXQsIFN0cmluZyBkYXRhKQotICB7Ci0gICAgTm9kZSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKLQotICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2U7Ci0gICAgaWYgKCItLy9XM0MvL0RURCBYTUxTQ0hFTUEgMjAwMTAyLy9FTiIuZXF1YWxzSWdub3JlQ2FzZShwdWJsaWNJZCkpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShYU0RQbHVnaW4uSU5TVEFOQ0UuZ2V0QmFzZVVSTCgpICsgImNhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEuZHRkIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlucHV0U291cmNlLnNldFB1YmxpY0lkKHB1YmxpY0lkKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3lzdGVtSWQgIT0gbnVsbCAmJiBzeXN0ZW1JZC5zdGFydHNXaXRoKCJmaWxlOi8vYnVuZGxlZW50cnk6IikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShzeXN0ZW1JZC5zdWJzdHJpbmcoNykpOwotICAgICAgaW5wdXRTb3VyY2Uuc2V0UHVibGljSWQocHVibGljSWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlucHV0U291cmNlID0gc3VwZXIucmVzb2x2ZUVudGl0eShwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbnB1dFNvdXJjZTsKLSAgfQotCi0gIC8qKgotICAgKiBTYXZlcyB0aGUgY3VycmVudCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNhdmVMb2NhdGlvbigpCi0gIHsKLSAgICBpZiAobG9jYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpbmUgPSBsb2NhdG9yLmdldExpbmVOdW1iZXIoKTsKLSAgICAgIGNvbHVtbiA9IGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAKLSAgICAgIC8vIFRoZSBjcmltc29uIHBhcnNlciBzZWVtcyB0byBnaXZlIHBvb3IgY29vcmRpbmF0ZXMgYW5kIGlzIDAtYmFzZWQgZm9yIGxpbmUKLSAgICAgIC8vIGNvdW50LgotCi0gICAgICBpZiAoY29sdW1uID09IC0xKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAxOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzZXREb2N1bWVudExvY2F0b3Iob3JnLnhtbC5zYXguTG9jYXRvcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50TG9jYXRvcihMb2NhdG9yIGxvY2F0b3IpCi0gIHsKLSAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotICAgIHN1cGVyLnNldERvY3VtZW50TG9jYXRvcihsb2NhdG9yKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI3N0YXJ0Q0RBVEEoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRDREFUQSgpCi0gIHsKLSAgICBjZGF0YSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBjZGF0YVNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVDREFUQVNlY3Rpb24oIiIpOyAvLyROT04tTkxTLTEkCi0gICAgTG9jYXRpb25NYXAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0gZ2V0TG9jYXRpb25NYXAoY2RhdGFTZWN0aW9uKTsKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMuc2V0U3RhcnRMaW5lKGxpbmUpOwotICAgIGV4dGVuZGVkQXR0cmlidXRlcy5zZXRTdGFydENvbHVtbihjb2x1bW4pOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI3N0YXJ0RG9jdW1lbnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnREb2N1bWVudCgpCi0gIHsKLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgICBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNzdGFydERURChqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydERURChTdHJpbmcgbmFtZSwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoIWluU2NoZW1hKQotICAgIHsKLSAgICAgIGluU2NoZW1hID0gaXNTY2hlbWFFbGVtZW50KHVyaSwgbG9jYWxOYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBxTmFtZSk7Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDAsIGNvdW50ID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlVVJJID0gYXR0cmlidXRlcy5nZXRVUkkoaW5kZXgpOwotICAgICAgU3RyaW5nIGF0dHJpYnV0ZVFOYW1lID0gYXR0cmlidXRlcy5nZXRRTmFtZShpbmRleCk7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKGluZGV4KTsKLQotICAgICAgaWYgKGF0dHJpYnV0ZVFOYW1lLmVxdWFscygieG1sbnMiKSB8fCBhdHRyaWJ1dGVRTmFtZS5zdGFydHNXaXRoKCJ4bWxuczoiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB7Ci0gICAgICAgIGF0dHJpYnV0ZVVSSSA9IFhTRENvbnN0YW50cy5YTUxOU19VUklfMjAwMDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCIiLmVxdWFscyhhdHRyaWJ1dGVVUkkpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGF0dHJpYnV0ZVVSSSA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlVVJJLCBhdHRyaWJ1dGVRTmFtZSwgYXR0cmlidXRlVmFsdWUpOwotICAgIH0KLQotICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpOwotICAgIH0KLQotICAgIHN0YWNrLnB1c2goZWxlbWVudCk7Ci0gICAgZWxlbWVudCA9IG5ld0VsZW1lbnQ7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2UgbG9jYXRpb24gYXR0cmlidXRlcyBlbmQgdXAgaW4gdGhlIFhTRFBhcnNlcidzIHVzZXIgZGF0YSBpZgotICAgIC8vIHdlIGFyZSBpbnNpZGUgYW4gaW5saW5lIHNjaGVtYS4gSWYgbm90LCB0aGV5IHNob3VsZCBnbyBpbiB0aGUKLSAgICAvLyBXU0RMUGFyc2VyJ3MgdXNlciBkYXRhLgotCi0gICAgaWYgKGluU2NoZW1hKQotICAgIHsKLSAgICAgIE1hcCB1c2VyRGF0YSA9IFhTRFBhcnNlci5nZXRVc2VyRGF0YShlbGVtZW50KTsKLSAgICAgIHVzZXJEYXRhLnB1dChTVEFSVF9MSU5FLCBuZXcgSW50ZWdlcihsaW5lKSk7Ci0gICAgICB1c2VyRGF0YS5wdXQoU1RBUlRfQ09MVU1OLCBuZXcgSW50ZWdlcihjb2x1bW4pKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIExvY2F0aW9uTWFwIGxvY2F0aW9uTWFwID0gZ2V0TG9jYXRpb25NYXAoZWxlbWVudCk7Ci0gICAgICBsb2NhdGlvbk1hcC5zZXRTdGFydExpbmUobGluZSk7Ci0gICAgICBsb2NhdGlvbk1hcC5zZXRTdGFydENvbHVtbihjb2x1bW4pOwotICAgIH0KLQotICAgIHNhdmVMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjc3RhcnRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RW50aXR5KFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjd2FybmluZyhvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LldBUk5JTkdfTElURVJBTCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRNZXNzYWdlKCJET006IiArIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOyAgLy8kTk9OLU5MUy0xJAotICAgIGRpYWdub3N0aWMuc2V0TGluZShleGNlcHRpb24uZ2V0TGluZU51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljLnNldENvbHVtbihleGNlcHRpb24uZ2V0Q29sdW1uTnVtYmVyKCkpOwotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKQotICB7Ci0gICAgaWYgKGxvY2F0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkgCi0gICAgICB7Ci0gICAgICAgIE1ldGhvZCBnZXRFbmNvZGluZ01ldGhvZCA9IGxvY2F0b3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImdldEVuY29kaW5nIiwgbmV3IENsYXNzW117fSk7Ci0gICAgICAgIGlmIChnZXRFbmNvZGluZ01ldGhvZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZW5jb2RpbmcgPSAoU3RyaW5nKWdldEVuY29kaW5nTWV0aG9kLmludm9rZShsb2NhdG9yLCBuZXcgT2JqZWN0W10ge30pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIAotICAgICAgewotICAgICAgICAvLyBJZiB3ZSBjYW4ndCBmaW5kIGl0LCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLi4uCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVuY29kaW5nOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjk1MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZS5GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLlhNTFJlYWRlckZhY3Rvcnk7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBsb2FkaW5nIG9mIFdTREwgb3IgWFNEIHJlc291cmNlIGZyb20KLSAqIFVSSSdzIHRoYXQgZG9uJ3QgZW5kIHdpdGggLnhzZCBvciAud3NkbCBleHRlbnNpb25zLgotICogCi0gKiBUaGVzZSBVUkkncyBmb2lsIEVNRidzIHN0YW5kYXJkIHJlc291cmNlIGxvYWRpbmcgbWVjaGFuaXNtIHdpY2ggYXNzdW1lcyB0aGF0Ci0gKiBhIHJlc291cmNlIHR5cGUgY2FuIGFsd2F5cyBiZSBkZWR1Y2VkIGZyb20gdGhlIGZpbGUgZXh0ZW5zaW9uLgotICogCi0gKiAgQ29kZSBFeGFtcGxlOgotICogICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gKiAgICBXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkgcmVnaXN0cnkgPSBuZXcgV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UpOwotICogICAgcmVzb3VyY2VTZXQuc2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkocmVnaXN0cnkpOwotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotICogY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotICogKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSBleHRlbmRzIFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5SW1wbAotewotICBwcm90ZWN0ZWQgUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeSBwYXJlbnQ7Ci0KLSAgcHVibGljIFdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5IHBhcmVudCkKLSAgewotICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICB9Ci0KLSAgcHVibGljIE1hcCBnZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudC5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKTsKLSAgfQotCi0gIHB1YmxpYyBNYXAgZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudC5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpOwotICB9Ci0KLSAgcHVibGljIEZhY3RvcnkgZ2V0RmFjdG9yeShVUkkgdXJpKQotICB7Ci0gICAgcmV0dXJuIGdldEZhY3RvcnkodXJpLCBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZS5GYWN0b3J5IGdldEZhY3RvcnkoVVJJIHVyaSwgU3RyaW5nIGNvbnRlbnRUeXBlKQotICB7Ci0gICAgU3RyaW5nIHVyaVN0cmluZyA9IHVyaS50b1N0cmluZygpOwotCi0gICAgRmFjdG9yeSBmYWN0b3J5ID0gcGFyZW50LmdldEZhY3RvcnkodXJpLCBjb250ZW50VHlwZSk7Ci0gICAgRmFjdG9yeSBkZWZhdWx0RmFjdG9yeSA9IChGYWN0b3J5KUlOU1RBTkNFLmdldEZhY3RvcnkoVVJJLmNyZWF0ZVVSSShERUZBVUxUX0VYVEVOU0lPTiksIGNvbnRlbnRUeXBlKTsKLQotICAgIC8vIGdpdmUgdGhlIHBhcmVudCB0aGUgZmlyc3QgY3JhY2sgYXQgZ2V0dGluZyB0aGUgZmFjdG9yeQotICAgIC8vIGlmIHRoZSBmYWN0b3J5IGlzIG51bGwgb3IgdGhlIGtub3duICdkZWZhdWx0JyBmYWN0b3J5IHRoZW4gd2UnbGwKLSAgICAvLyB0cnkgdG8gY29tcHV0ZSB0aGUgZmFjdG9yeSBvdXJzZWx2ZXMKLSAgICBpZiAoZmFjdG9yeSA9PSBudWxsIHx8IGZhY3RvcnkgPT0gZGVmYXVsdEZhY3RvcnkpCi0gICAgewotICAgICAgaWYgKHVyaVN0cmluZy5lbmRzV2l0aCgid3NkbCIpIHx8IHVyaVN0cmluZy5lbmRzV2l0aCgiV1NETCIpKQotICAgICAgewotICAgICAgICAvLyBoYW5kbGUgY2FzZXMgbGlrZSAiaHR0cDovL3h4eC9EaXN0YW5jZS5qd3M/d3NkbCIKLSAgICAgICAgLy8gICAgICAgICAgCQotICAgICAgICBmYWN0b3J5ID0gcGFyZW50LmdldEZhY3RvcnkoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIiksIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHVyaVN0cmluZy5lbmRzV2l0aCgieHNkIikgfHwgdXJpU3RyaW5nLmVuZHNXaXRoKCJYU0QiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaGFuZGxlIGNhc2VzIGxpa2UgImh0dHA6Ly94eHgvRGlzdGFuY2UuandzP3hzZCIKLSAgICAgICAgLy8gICAgICAgIAkKLSAgICAgICAgZmFjdG9yeSA9IHBhcmVudC5nZXRGYWN0b3J5KFVSSS5jcmVhdGVVUkkoIioueHNkIiksIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIC8vaWYgKHVyaS5maWxlRXh0ZW5zaW9uKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gaGFuZGxlIGNhc2VzIGxpa2UgImh0dHA6Ly94eHgvZXhhbXBsZT9nZXRRdW90ZSIKLSAgICAgICAgLy8gICAgICAgICAgICAgIAkKLSAgICAgICAgLy8gZmluYWxseSB3ZSBtdXN0IHJlc29ydCB0byBvcGVuaW5nIHRoZSB1cmkncyBzdHJlYW0gYW5kCi0gICAgICAgIC8vIHBlZWtpbmcgYXQgdGhlIGNvbnRlbnQgdG8gZGV0ZXJtaW5lIGlmIGl0cyBhbiB4c2Qgb3Igd3NkbAotICAgICAgICAvLyAgICAgICAgIAkKLSAgICAgICAgU3RyaW5nIHJvb3RFbGVtZW50TmFtZSA9IGdldFJvb3RFbGVtZW50TmFtZSh1cmlTdHJpbmcpOwotICAgICAgICBpZiAocm9vdEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocm9vdEVsZW1lbnROYW1lLmVxdWFscygic2NoZW1hIikpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFjdG9yeSA9IHBhcmVudC5nZXRGYWN0b3J5KFVSSS5jcmVhdGVVUkkoIioueHNkIiksIGNvbnRlbnRUeXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocm9vdEVsZW1lbnROYW1lLmVxdWFscygiZGVmaW5pdGlvbnMiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYWN0b3J5ID0gcGFyZW50LmdldEZhY3RvcnkoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIiksIGNvbnRlbnRUeXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLQotICAvLyB0aGlzIG1ldGhvZCB1c2VzIGEgU0FYIFBhcnNlciB0byBwYXJzZXIgYSBzdHJlYW0gYW5kIGRldGVybWluZSB0aGUgcm9vdCBlbGVtZW50IG5hbWUKLSAgLy8gb2YgYW55IHhtbCBjb250ZW50Ci0gIHByaXZhdGUgU3RyaW5nIGdldFJvb3RFbGVtZW50TmFtZShTdHJpbmcgdXJpKQotICB7Ci0gICAgUm9vdEVsZW1lbnROYW1lQ29udGVudEhhbmRsZXIgaGFuZGxlciA9IG5ldyBSb290RWxlbWVudE5hbWVDb250ZW50SGFuZGxlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFhNTFJlYWRlciByZWFkZXIgPSBYTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcigpOwotICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGhhbmRsZXIpOwotICAgICAgcmVhZGVyLnBhcnNlKHVyaSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhbmRsZXIucm9vdEVsZW1lbnROYW1lOwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBSb290RWxlbWVudE5hbWVDb250ZW50SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi0gIHsKLSAgICBwdWJsaWMgU3RyaW5nIHJvb3RFbGVtZW50TmFtZTsKLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIHJvb3RFbGVtZW50TmFtZSA9IGxvY2FsTmFtZTsKLQotICAgICAgLy8gaGVyZSBJIHRocm93IGFuIGV4Y2VwdGlvbiB0byBtYWtlIHRoZSBTQVggUGFyc2VyIHRvIHN0b3AgcGFyc2luZwotICAgICAgdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbigiU0FYUGFyc2VyIGludGVudG9uYWxseSBzdG9wcGVkIik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5YjU1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuVVJJQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLlhTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLkRlZmF1bHRKQVhQQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5KQVhQQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5KQVhQUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2U8L2I+IGltcGxlbWVudGF0aW9uIGZvciB0aGUgbW9kZWwuCi0gKiBUaGlzIHNwZWNpYWxpemVkIHJlc291cmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGl0J3Mgb3duIHdheSBvZiBtYWtpbmcga2V5cyBhbmQgCi0gKiBocmVmcywgYW5kIGl0J3Mgb3duIHNlcmlhbGl6YXRpb24uIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBzdWJjbGFzc2luZyAKLSAqIG91dHNpZGUgb2YgdGhlIG1vZGVsIGltcGxlbWVudGF0aW9uOyBpdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGlzIHdpdGggdGhlIAotICogUmVzb3VyY2UgZnJhbWV3b3JrLgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotICogY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotICogKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VJbXBsIGV4dGVuZHMgUmVzb3VyY2VJbXBsCi17Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcyA9IHRydWU7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRpbnVlT25Mb2FkRXJyb3IgPSB0cnVlOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FWFRFTlNJT05fRkFDVE9SSUVTID0gIlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRJTlVFX09OX0xPQURfRVJST1IgPSAiQ09OVElOVUVfT05fTE9BRF9FUlJPUiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VOQ09ESU5HID0gIldTRExfRU5DT0RJTkciOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9QUk9HUkVTU19NT05JVE9SID0gIldTRExfUFJPR1JFU1NfTU9OSVRPUiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogQWRkIHRoaXMgb3B0aW9uIHdpdGggYSB2YWx1ZSBvZiBCb29sZWFuLlRSVUUgdG8gdGhlIG9wdGlvbnMgbWFwIHdoZW4KLSAgICogbG9hZGluZyBhIHJlc291cmNlIHRvIGluc3RydWN0IHRoZSBsb2FkZXIgdG8gdHJhY2sgc291cmNlIGNvZGUgbG9jYXRpb24gZm9yCi0gICAqIGVhY2ggbm9kZSBpbiB0aGUgc291cmNlIGRvY3VtZW50LgotICAgKiAKLSAgICogQHNlZSBXU0RMUGFyc2VyI2dldFVzZXJEYXRhKG9yZy53M2MuZG9tLk5vZGUpCi0gICAqIEBzZWUgV1NETFBhcnNlciNnZXRTdGFydENvbHVtbihvcmcudzNjLmRvbS5Ob2RlKQotICAgKiBAc2VlIFdTRExQYXJzZXIjZ2V0RW5kQ29sdW1uKG9yZy53M2MuZG9tLk5vZGUpCi0gICAqIEBzZWUgV1NETFBhcnNlciNnZXRTdGFydExpbmUob3JnLnczYy5kb20uTm9kZSkKLSAgICogQHNlZSBXU0RMUGFyc2VyI2dldEVuZExpbmUob3JnLnczYy5kb20uTm9kZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNLX0xPQ0FUSU9OID0gIlRSQUNLX0xPQ0FUSU9OIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gb24gUmVzb3VyY2UjbG9hZCBtZXRob2RzIHRvIHNwZWNpZnkgSkFYUCBwb29sIHRvIGJlIHVzZWQKLSAgICogZm9yIGxvYWRpbmcgYW5kIHNlcmlhbGl6aW5nIFhNTCBTY2hlbWFzLgotICAgKiBAc2VlIFJlc291cmNlI2xvYWQoSW5wdXRTdHJlYW0sIE1hcCkKLSAgICogQHNlZSBSZXNvdXJjZSNsb2FkKE1hcCkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfSkFYUF9QT09MID0gIldTRExfSkFYUF9QT09MIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgLyoqCi0gICAqIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGFzIGFuIG9wdGlvbiBvbiBSZXNvdXJjZSNsb2FkIG1ldGhvZHMgdG8gc3BlY2lmeSBKQVhQIGNvbmZpZ3VyYXRpb24KLSAgICogdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIFNBWCwgRE9NIHBhcnNlcnMgYW5kIFRyYW5zZm9ybWVyLgotICAgKiBAc2VlIFJlc291cmNlI2xvYWQoSW5wdXRTdHJlYW0sIE1hcCkKLSAgICogQHNlZSBSZXNvdXJjZSNsb2FkKE1hcCkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfSkFYUF9DT05GSUcgPSAiV1NETF9KQVhQX0NPTkZJRyI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4gCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLiAKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExSZXNvdXJjZUltcGwoVVJJIHVyaSkKLSAgewotICAgIHN1cGVyKHVyaSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBkb1NhdmUoT3V0cHV0U3RyZWFtIG9zLCBNYXAgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0gICAgICAgIGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgICAgfQotCi0gICAgICBpZiAoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVFbGVtZW50KCk7Ci0gICAgICB9Ci0KLSAgICAgIGRvU2VyaWFsaXplKG9zLCBkb2N1bWVudCwgb3B0aW9ucyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc291cmNlJ3MgRGVmaW5pdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldENvbnRlbnRzKCkuc2l6ZSgpID09IDEgJiYgZ2V0Q29udGVudHMoKS5nZXQoMCkgaW5zdGFuY2VvZiBEZWZpbml0aW9uID8gKERlZmluaXRpb24pZ2V0Q29udGVudHMoKS5nZXQoMCkgOiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1NlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBEb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBuZXcgRGVmYXVsdEpBWFBDb25maWd1cmF0aW9uKCkuY3JlYXRlVHJhbnNmb3JtZXIoZW5jb2RpbmcpOwotICAgICAgLy8gQmUgc3VyZSB0byB1c2UgYWN0dWFsIGVuY29kaW5nIG9mIHRoZSB0cmFuc2Zvcm1lciB3aGljaCBtaWdodCBiZSBub24tbnVsbCBldmVuIGlmIGVuY29kaW5nIHN0YXJ0ZWQgYXMgbnVsbC4KLSAgICAgIGVuY29kaW5nID0gdHJhbnNmb3JtZXIuZ2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORyk7Ci0gICAgICBXcml0ZXIgd3JpdGVyID0gZW5jb2RpbmcgPT0gbnVsbCA/IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtKSA6IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtLCBlbmNvZGluZyk7Ci0gICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0obmV3IERPTVNvdXJjZShkb2N1bWVudCksIG5ldyBTdHJlYW1SZXN1bHQod3JpdGVyKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIFdTRExQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvU2VyaWFsaXplKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIERvY3VtZW50IGRvY3VtZW50LCBNYXAgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBKQVhQUG9vbCBqYXhwUG9vbCA9IG51bGw7Ci0gICAgSkFYUENvbmZpZ3VyYXRpb24gY29uZmlnID0gbnVsbDsKLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBudWxsOwotICAgIAotICAgIGlmIChvcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgamF4cFBvb2wgPSAoSkFYUFBvb2wpb3B0aW9ucy5nZXQoV1NETF9KQVhQX1BPT0wpOwotICAgICAgY29uZmlnID0gKEpBWFBDb25maWd1cmF0aW9uKW9wdGlvbnMuZ2V0KFdTRExfSkFYUF9DT05GSUcpOwotICAgICAgZW5jb2RpbmcgPSAoU3RyaW5nKW9wdGlvbnMuZ2V0KFdTRExfRU5DT0RJTkcpOwotICAgIH0KLSAgICAKLSAgICBpZiAoamF4cFBvb2wgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoY29uZmlnID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRvU2VyaWFsaXplKG91dHB1dFN0cmVhbSwgZG9jdW1lbnQsIGVuY29kaW5nKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IGNvbmZpZy5jcmVhdGVUcmFuc2Zvcm1lcihlbmNvZGluZyk7Ci0gICAgICAgICAgLy8gQmUgc3VyZSB0byB1c2UgYWN0dWFsIGVuY29kaW5nIG9mIHRoZSB0cmFuc2Zvcm1lciB3aGljaCBtaWdodCBiZSBub24tbnVsbCBldmVuIGlmIGVuY29kaW5nIHN0YXJ0ZWQgYXMgbnVsbC4KLSAgICAgICAgICBlbmNvZGluZyA9IHRyYW5zZm9ybWVyLmdldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcpOwotICAgICAgICAgIFdyaXRlciB3cml0ZXIgPSBlbmNvZGluZyA9PSBudWxsID8gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXRwdXRTdHJlYW0pIDogbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXRwdXRTdHJlYW0sIGVuY29kaW5nKTsKLSAgICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0obmV3IERPTVNvdXJjZShkb2N1bWVudCksIG5ldyBTdHJlYW1SZXN1bHQod3JpdGVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFdTRExQbHVnaW4uZ2V0UGx1Z2luKCkubG9nKGV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0cmFuc2Zvcm1lciA9IGpheHBQb29sLmdldFRyYW5zZm9ybWVyKGVuY29kaW5nKTsKLSAgICAgICAgV3JpdGVyIHdyaXRlciA9IGVuY29kaW5nID09IG51bGwgPyBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSkgOiBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSwgZW5jb2RpbmcpOwotICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0obmV3IERPTVNvdXJjZShkb2N1bWVudCksIG5ldyBTdHJlYW1SZXN1bHQod3JpdGVyKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgewotICAgICAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICBqYXhwUG9vbC5yZWxlYXNlVHJhbnNmb3JtZXIodHJhbnNmb3JtZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBMb2FkcyBhIG5ldyB7QGxpbmsgV1NETFJlc291cmNlSW1wbH0gaW50byB0aGUgcmVzb3VyY2Ugc2V0LgotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgcmVzb3VyY2UuCi0gICAqIEBwYXJhbSBvcHRpb25zIGFueSBvcHRpb25zIHRvIGluZmx1ZW5jZSBsb2FkaW5nIGJlaGF2aW9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZG9Mb2FkKElucHV0U291cmNlIGlucHV0U291cmNlLCBNYXAgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUaGlzIHBhdHRlcm4gYXZvaWRzIGxvYWRpbmcgdGhlIElQcm9ncmVzc01vbml0b3IgY2xhc3Mgd2hlbiB0aGVyZSBpcyBubyBwcm9ncmVzcyBtb25pdG9yLgotICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzdGFuZC1hbG9uZSBleGVjdXRpb24gdG8gd29yayBjb3JyZWN0bHkuCi0gICAgLy8KLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9IG51bGw7Ci0gICAgT2JqZWN0IG1vbml0b3IgPSBvcHRpb25zID09IG51bGwgPyBudWxsIDogb3B0aW9ucy5nZXQoV1NETF9QUk9HUkVTU19NT05JVE9SKTsKLSAgICBpZiAobW9uaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb2dyZXNzTW9uaXRvciA9IChJUHJvZ3Jlc3NNb25pdG9yKW1vbml0b3I7Ci0gICAgICBwcm9ncmVzc01vbml0b3Iuc2V0VGFza05hbWUoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZXNvdXJjZUxvYWRfcHJvZ3Jlc3MiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb2dyZXNzTW9uaXRvci5zdWJUYXNrKGdldFVSSSgpLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIE9iamVjdCBiaW5kaW5ncyA9IG9wdGlvbnMgPT0gbnVsbCA/IG51bGwgOiBvcHRpb25zLmdldChVU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyk7Ci0gICAgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgYmluZGluZ3MgaW5zdGFuY2VvZiBCb29sZWFuKQotICAgICAgLy8gdHJ1ZSBieSBkZWZhdWx0Ci0gICAgICB1c2VFeHRlbnNpb25GYWN0b3JpZXMgPSAoKEJvb2xlYW4pYmluZGluZ3MpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgT2JqZWN0IGNvbnRpbnVlT25FcnJvciA9IG9wdGlvbnMgPT0gbnVsbCA/IG51bGwgOiBvcHRpb25zLmdldChDT05USU5VRV9PTl9MT0FEX0VSUk9SKTsKLSAgICBpZiAoY29udGludWVPbkVycm9yICE9IG51bGwgJiYgY29udGludWVPbkVycm9yIGluc3RhbmNlb2YgQm9vbGVhbikKLSAgICAgIC8vIHRydWUgYnkgZGVmYXVsdAotICAgICAgY29udGludWVPbkxvYWRFcnJvciA9ICgoQm9vbGVhbiljb250aW51ZU9uRXJyb3IpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgRG9jdW1lbnQgZG9jID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHRyYWNrTG9jYXRpb24gPSBvcHRpb25zICE9IG51bGwgJiYgQm9vbGVhbi5UUlVFLmVxdWFscyhvcHRpb25zLmdldChUUkFDS19MT0NBVElPTikpOwotCi0gICAgICBpZiAodHJhY2tMb2NhdGlvbikKLSAgICAgIHsKLSAgICAgICAgZG9jID0gZ2V0RG9jdW1lbnRVc2luZ1NBWChpbnB1dFNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIERPTSBkb2N1bWVudAotICAgICAgICBkb2MgPSBnZXREb2N1bWVudChpbnB1dFNvdXJjZSwgbmV3IEludGVybmFsRXJyb3JIYW5kbGVyKCksIG9wdGlvbnMpOwotICAgICAgfQotCi0gICAgICBpZiAoZG9jICE9IG51bGwgJiYgZG9jLmdldERvY3VtZW50RWxlbWVudCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICghZmluZERlZmluaXRpb24oZG9jLmdldERvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChjb250aW51ZU9uTG9hZEVycm9yKQotICAgICAgICAgICAgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oV1NETFBsdWdpbi5nZXRQbHVnaW4oKS5nZXRTdHJpbmcoIl9FUlJPUl9JTlZBTElEX1dTREwiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoYW5kbGVEZWZpbml0aW9uRWxlbWVudChudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBpZiAoY29udGludWVPbkxvYWRFcnJvcikKLSAgICAgIHsKLSAgICAgICAgV1NETFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICAgICAgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IGV4Y2VwdGlvbjsKLSAgICB9Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWkubmV4dCgpOwotCi0gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgc2NoZW1hcyBsb2NhdGlvbiAKLSAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IG51bGw7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClqLm5leHQoKTsKLSAgICAgICAgICBpZiAoIShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgZWwgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBlbC5nZXRTY2hlbWEoKTsKLSAgICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgICAgICBzY2hlbWEuc2V0U2NoZW1hTG9jYXRpb24oZ2V0VVJJKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvZ3Jlc3NNb25pdG9yICE9IG51bGwpCi0gICAgewotICAgICAgcHJvZ3Jlc3NNb25pdG9yLndvcmtlZCgxKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTG9hZHMgYSBuZXcge0BsaW5rIFdTRExSZXNvdXJjZUltcGx9IGludG8gdGhlIHJlc291cmNlIHNldC4KLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlc291cmNlLgotICAgKiBAcGFyYW0gb3B0aW9ucyBhbnkgb3B0aW9ucyB0byBpbmZsdWVuY2UgbG9hZGluZyBiZWhhdmlvci4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRvTG9hZChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgTWFwIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBpbnB1dFN0cmVhbSBpbnN0YW5jZW9mIFVSSUNvbnZlcnRlci5SZWFkYWJsZUlucHV0U3RyZWFtID8gbmV3IElucHV0U291cmNlKAotICAgICAgKChVUklDb252ZXJ0ZXIuUmVhZGFibGVJbnB1dFN0cmVhbSlpbnB1dFN0cmVhbSkuYXNSZWFkZXIoKSkgOiBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOwotCi0gICAgaWYgKGdldFVSSSgpICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gZ2V0VVJJKCkudG9TdHJpbmcoKTsKLSAgICAgIGlucHV0U291cmNlLnNldFB1YmxpY0lkKGlkKTsKLSAgICAgIGlucHV0U291cmNlLnNldFN5c3RlbUlkKGlkKTsKLSAgICB9Ci0gICAgZG9Mb2FkKGlucHV0U291cmNlLCBvcHRpb25zKTsKLSAgfQotCi0gIC8qKgotICAgKiBVc2UgYSBjdXN0b20gU0FYIHBhcnNlciB0byBhbGxvdyB1cyB0byB0cmFjayB0aGUgc291cmNlIGxvY2F0aW9uIG9mIAotICAgKiBlYWNoIG5vZGUgaW4gdGhlIHNvdXJjZSBYTUwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSB0aGUgcGFyc2luZyBzb3VyY2UuIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSBvcHRpb25zIHRoZSBsb2FkaW5nIG9wdGlvbnMuIAotICAgKiBAcmV0dXJuIHRoZSBET00gZG9jdW1lbnQgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSBpbnB1dCBzdHJlYW0uIAotICAgKi8KLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudFVzaW5nU0FYKElucHV0U291cmNlIGlucHV0U291cmNlLCBNYXAgb3B0aW9ucykKLSAgewotICAgIFdTRExQYXJzZXIgd3NkbFBhcnNlciA9IG5ldyBXU0RMUGFyc2VyKG9wdGlvbnMpOwotICAgIHdzZGxQYXJzZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotCi0gICAgQ29sbGVjdGlvbiBlcnJvcnMgPSB3c2RsUGFyc2VyLmdldERpYWdub3N0aWNzKCk7Ci0KLSAgICBpZiAoZXJyb3JzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBlcnJvcnMuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgV1NETERpYWdub3N0aWMgd3NkbERpYWdub3N0aWMgPSAoV1NETERpYWdub3N0aWMpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBzd2l0Y2ggKHdzZGxEaWFnbm9zdGljLmdldFNldmVyaXR5KCkuZ2V0VmFsdWUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTDoKLSAgICAgICAgICBjYXNlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRVJST1I6Ci0gICAgICAgICAgewotICAgICAgICAgICAgZ2V0RXJyb3JzKCkuYWRkKHdzZGxEaWFnbm9zdGljKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuV0FSTklORzoKLSAgICAgICAgICBjYXNlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuSU5GT1JNQVRJT046Ci0gICAgICAgICAgewotICAgICAgICAgICAgZ2V0V2FybmluZ3MoKS5hZGQod3NkbERpYWdub3N0aWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgRG9jdW1lbnQgZG9jID0gd3NkbFBhcnNlci5nZXREb2N1bWVudCgpOwotICAgIAotICAgIGlmICh3c2RsUGFyc2VyLmdldEVuY29kaW5nKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoV1NETF9FTkNPRElORywgd3NkbFBhcnNlci5nZXRFbmNvZGluZygpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGRvYzsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZHMgYSBkb2N1bWVudCB1c2luZyBYZXJjZXMuCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSB0aGUgY29udGVudHMgdG8gcGFyc2UuCi0gICAqIEBwYXJhbSBlcnJvckhhbmRsZXIgdGhlIGhhbmRsZWQgdXNlZCBieSB0aGUgcGFyc2VyLgotICAgKiBAcmV0dXJuIGEgZG9jdW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBEb2N1bWVudCBnZXREb2N1bWVudChJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlcikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBDbGFzc0xvYWRlciBwcmV2aW91c0NsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKLQotICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLSAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBVc2luZyBhIGRlZmVycmVkIERPTSBkb2N1bWVudCBpbiB0aGUgV1NETCBtb2RlbCBtYXkgY2F1c2UgYQotICAgICAgICAvLyBwZXJmb3JtYW5jZSBwcm9ibGVtIGluIHRlcm1zIG9mIG1lbW9yeSBjb25zdW1wdGlvbiBpbiBwYXJ0aWN1bGFyLgotICAgICAgICAvLyBXZSdyZSBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgZmVhdHVyZSB3aGljaCBpbnN0cnVjdHMgdGhlIFhlcmNlcyBwYXJzZXIKLSAgICAgICAgLy8gdG8gbm90IHVzZSBkZWZlcnJlZCBET00gdHJlZXMuCi0gICAgICAgIC8vIFRPRE8gQ29udmVydCB0byB1c2Ugc2V0RmVhdHVyZSB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlLiBUaGUgWGVyY2VzCi0gICAgICAgIC8vIHZlcnNpb25zIDwgMi43LjEgZG8gbm90IGZ1bGx5IHN1cHBvcnQgc2V0RmVhdHVyZSwgc28gd2UgaGF2ZSB0byB1c2UKLSAgICAgICAgLy8gc2V0QXR0cmlidXRlLgotICAgICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldEF0dHJpYnV0ZSgiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL2RvbS9kZWZlci1ub2RlLWV4cGFuc2lvbiIsIEJvb2xlYW4uRkFMU0UpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIElnbm9yZSwgYXMgdGhlIGNvZGUgd2lsbCBoYXZlIHRvIHJ1biB3aXRoIHBhcnNlcnMgb3RoZXIgdGhhbiBYZXJjZXMuCi0gICAgICB9Ci0KLSAgICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCi0gICAgICAvLyBUQkQgLSBSZXZpc2l0Ci0gICAgICAvL0VudGl0eVJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gY3JlYXRlRW50aXR5UmVzb2x2ZXIoKTsKLSAgICAgIC8vZG9jdW1lbnRCdWlsZGVyLnNldEVudGl0eVJlc29sdmVyKGVudGl0eVJlc29sdmVyKTsKLQotICAgICAgZG9jdW1lbnRCdWlsZGVyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotCi0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRvY3VtZW50QnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSU9XcmFwcGVkRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT1dyYXBwZWRFeGNlcHRpb24oZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKHByZXZpb3VzQ2xhc3NMb2FkZXIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEJ1aWxkcyBET00gZG9jdW1lbnQgdXNpbmcgSkFYUCBEb2N1bWVudEJ1aWxkZXIKLSAgICogQHNlZSAjV1NETF9KQVhQX1BPT0wKLSAgICogQHNlZSAjV1NETF9KQVhQX0NPTkZJRwotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgdGhlIGNvbnRlbnQgdG8gcGFyc2VyCi0gICAqIEBwYXJhbSBlcnJvckhhbmRsZXIgZXJyb3IgaGFuZGxlciBmb3IgcmVjb3JkaW5nIGFueSBsb2FkaW5nIGVycm9ycwotICAgKiBAcGFyYW0gb3B0aW9ucyBsb2FkaW5nIG9wdGlvbnMKLSAgICogQHJldHVybiBkb2N1bWVudCBET00gZG9jdW1lbnQKLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIEVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIsIE1hcCBvcHRpb25zKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIEpBWFBQb29sIGpheHBQb29sID0gbnVsbDsKLSAgICBKQVhQQ29uZmlndXJhdGlvbiBjb25maWcgPSBudWxsOwotICAgIGlmIChvcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgamF4cFBvb2wgPSAoSkFYUFBvb2wpb3B0aW9ucy5nZXQoV1NETF9KQVhQX1BPT0wpOwotICAgICAgY29uZmlnID0gKEpBWFBDb25maWd1cmF0aW9uKW9wdGlvbnMuZ2V0KFdTRExfSkFYUF9DT05GSUcpOwotICAgIH0KLQotICAgIGlmIChqYXhwUG9vbCA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChjb25maWcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGdldERvY3VtZW50KGlucHV0U291cmNlLCBlcnJvckhhbmRsZXIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBjb25maWcuY3JlYXRlRG9jdW1lbnRCdWlsZGVyKGVycm9ySGFuZGxlcik7Ci0gICAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2N1bWVudEJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotICAgICAgICAgIHJldHVybiBkb2N1bWVudDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSU9XcmFwcGVkRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSU9XcmFwcGVkRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50QnVpbGRlciA9IGpheHBQb29sLmdldERvY3VtZW50QnVpbGRlcihlcnJvckhhbmRsZXIpOwotICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRvY3VtZW50QnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBkb2N1bWVudDsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElPV3JhcHBlZEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgICAgfQotICAgICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJT1dyYXBwZWRFeGNlcHRpb24oZXhjZXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgamF4cFBvb2wucmVsZWFzZURvY3VtZW50QnVpbGRlcihkb2N1bWVudEJ1aWxkZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBmaW5kRGVmaW5pdGlvbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoV1NETENvbnN0YW50cy5ub2RlVHlwZShlbGVtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pCi0gICAgewotICAgICAgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAvKgotICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgewotICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgewotICAgICAgIGlmIChmaW5kRGVmaW5pdGlvbigoRWxlbWVudCkgY2hpbGQpKQotICAgICAgIHsKLSAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgfQotICAgICAgICovCi0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVEZWZpbml0aW9uRWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIGlmIChlbGVtZW50ID09IG51bGwpCi0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnNldFVzZUV4dGVuc2lvbkZhY3Rvcmllcyh1c2VFeHRlbnNpb25GYWN0b3JpZXMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25JbXBsLmNyZWF0ZURlZmluaXRpb24oZWxlbWVudCwgZ2V0VVJJKCkudG9TdHJpbmcoKSwgdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKTsKLSAgICB9Ci0gICAgZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0gICAgLy8gRG8gd2UgbmVlZCB0aGUgbmV4dCBsaW5lPwotICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBzZXJpYWxpemUob3V0cHV0U3RyZWFtLCBkb2N1bWVudCwgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIERvY3VtZW50IGRvY3VtZW50LCBTdHJpbmcgZW5jb2RpbmcpCi0gIHsKLSAgICBkb1NlcmlhbGl6ZShvdXRwdXRTdHJlYW0sIGRvY3VtZW50LCBlbmNvZGluZyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIHNlcmlhbGl6ZShvdXRwdXRTdHJlYW0sIGVsZW1lbnQsIG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGRvU2VyaWFsaXplKG91dHB1dFN0cmVhbSwgZWxlbWVudCwgZW5jb2RpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1NlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBlbmNvZGluZykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBUcmFuc2Zvcm1lckZhY3RvcnkgdHJhbnNmb3JtZXJGYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyRmFjdG9yeS5uZXdUcmFuc2Zvcm1lcigpOwotCi0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOyAvLyROT04tTkxTLTEkCi0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk1FVEhPRCwgInhtbCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgZW5jb2RpbmcpOwotICAgICAgfQotCi0gICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0obmV3IERPTVNvdXJjZShlbGVtZW50KSwgbmV3IFN0cmVhbVJlc3VsdChvdXRwdXRTdHJlYW0pKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgSW50ZXJuYWxFcnJvckhhbmRsZXIgaW1wbGVtZW50cyBFcnJvckhhbmRsZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXU0RMIFBBUlNFIEVSUk9SOiAiICsgZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV1NETCBQQVJTRSBGQVRBTCBFUlJPUjogIiArIGUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldTREwgUEFSU0UgV0FSTklORzogIiArIGUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGF0dGFjaGVkKEVPYmplY3QgZU9iamVjdCkKLSAgewotICAgIHN1cGVyLmF0dGFjaGVkKGVPYmplY3QpOwotCi0gICAgLy8gd2UgbmVlZCB0byBhdHRhY2ggYSBYU0RTY2hlbWFMb2NhdG9yIGluIG9yZGVyIHRvIHJlc29sdmUgaW5saW5lIHNjaGVtYSBsb2NhdGlvbnMKLSAgICAvLyBpZiB0aGVyZSdzIG5vdCBhbHJlYWR5IG9uZSBhdHRhY2hlZAotICAgIFhTRFNjaGVtYUxvY2F0b3IgeHNkU2NoZW1hTG9jYXRvciA9IChYU0RTY2hlbWFMb2NhdG9yKUVjb3JlVXRpbC5nZXRSZWdpc3RlcmVkQWRhcHRlcih0aGlzLCBYU0RTY2hlbWFMb2NhdG9yLmNsYXNzKTsKLSAgICBpZiAoeHNkU2NoZW1hTG9jYXRvciA9PSBudWxsKQotICAgIHsKLSAgICAgIGdldFJlc291cmNlU2V0KCkuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgIH0KLQotICAgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgRGVmaW5pdGlvbkltcGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbCllT2JqZWN0OwotICAgICAgZGVmaW5pdGlvbi5zZXRJbmxpbmVTY2hlbWFMb2NhdGlvbnModGhpcyk7Ci0gICAgfQotICB9Ci0gIC8qCi0gICBwdWJsaWMgdm9pZCBzZXRJbmxpbmVTY2hlbWFMb2NhdGlvbnMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgewotICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW5saW5lIHNjaGVtYXMgbG9jYXRpb24gCi0gICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgIHsKLSAgIGZvciAoSXRlcmF0b3IgaiA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICB7Ci0gICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgai5uZXh0KCk7Ci0gICBYU0RTY2hlbWEgc2NoZW1hID0gZWwuZ2V0U2NoZW1hKCk7Ci0gICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICB7ICAKLSAgIHNjaGVtYS5zZXRTY2hlbWFMb2NhdGlvbihnZXRVUkkoKS50b1N0cmluZygpKTsKLSAgIH0gIAotICAgfSAgICAgICAgCi0gICB9ICAgICAgCi0gICB9Ki8KLQotICBwdWJsaWMgTWFwIGdldERlZmF1bHRTYXZlT3B0aW9ucygpCi0gIHsKLSAgICBpZiAoZGVmYXVsdFNhdmVPcHRpb25zID09IG51bGwpCi0gICAgewotICAgICAgZGVmYXVsdFNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmYXVsdFNhdmVPcHRpb25zOwotICB9Ci19IC8vV1NETFJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDRlYjc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uLy9hcGlzdHlsZXMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08dGl0bGU+V1NETCBNb2RlbCBBUEkgT3ZlcnZpZXc8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08cD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+Ci08dGFibGUgd2lkdGg9IjUwMCI+Ci08dHI+Ci08dGQ+Ci08cD4KLQkJVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+Ci08L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNWEwZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxodG1sPgotCTxoZWFkPgotCQk8bWV0YQotCQkJbmFtZT0icm9vdCIKLQkKLQkJCWNvbnRlbnQ9Ii4uLy4uLy4uLy4uLy4uLy4uLyIgLz4KLQkJPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLQk8L2hlYWQ+Ci0KLQk8Ym9keT4KLQkJPGFic3RyYWN0PgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvYWJzdHJhY3Q+Ci0JCTxwPgotCQlUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gbG9hZCwgbW9kaWZ5LCBhbmQgc2F2ZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvcD4gCi0JPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5MTU5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkNTFlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi10ZW1wLmZvbGRlcgotd3NpdWkuamFyCi1idWlsZC54bWwKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxMTEwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y0ZmZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODo1OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI5ZDNjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6NTcgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAxYzA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC41MDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmljb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7IGJ1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtyZXNvbHV0aW9uOj1vcHRpb25hbDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQ7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS52aWV3cztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3I7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNS4wLDEuNi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDU0ZDA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UuLiA9IHNyYy8KLWphcnMuY29tcGlsZS5vcmRlciA9IC4KLW91dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL2Z1bGwvb2JqMTYvdmFsaWRhdGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL2Z1bGwvb2JqMTYvdmFsaWRhdGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGViMTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9pY29ucy9mdWxsL29iajE2L3ZhbGlkYXRlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9pY29ucy93c2lfbG9nZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL3dzaV9sb2dmaWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YjExMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL3dzaV9sb2dmaWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDQyZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0hLS0gQ29uc3RhbnRzIGZvciBzdHJpbmdzICAKLQotX1BMVUdJTl9OQU1FICAgICAgICAgICAgICAgICAgPSBTb2FwIE1vbml0b3IKLV9QUk9WSURFUl9OQU1FICAgICAgICAgICAgICAgID0gRWNsaXBzZS5vcmcKLV9VSV9XU0lfVkFMSURBVE9SICAgICAgICAgICAgID0gV1MtSSBNZXNzYWdlIFZhbGlkYXRvcgotX1VJX0FDVElPTl9WQUxJREFURSAgICAgICAgICAgPSBWYWxpZGF0ZSBXUy1JIExvZyBGaWxlCi1fVUlfV0laQVJEX1ZBTElEQVRFX0xPR19USVRMRSA9IFZhbGlkYXRlIFdTLUkgTWVzc2FnZSBMb2cgRmlsZQotX1VJX0xPR19FRElUT1IgICAgICAgICAgICAgICAgPSBYTUwgRWRpdG9yCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWE5YzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLS0+IAotCi08cGx1Z2luPgotCi0gICAgCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFB1cnBvc2U6IEFkZCB2YWxpZGF0b3IgYWN0aW9uIHRvIFRDUElQIG1vbml0b3IuICAgICAgICAgLS0+Ci08IS0tIEV4dGVuc2lvbiBwb2ludDogb3JnLmVjbGlwc2UudWkudmlld0FjdGlvbnMgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld0FjdGlvbnMiPgotICAgICAgPHZpZXdDb250cmlidXRpb24KLSAgICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci52aWV3IgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVpLmFydGljbGVzLmFjdGlvbi5jb250cmlidXRpb24udmlldyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iV1MtSSBQcm9maWxlIFZhbGlkYXRvciIKLSAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvdmFsaWRhdGUuZ2lmIgotICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9XSVpBUkRfVkFMSURBVEVfTE9HX1RJVExFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgICAgICB0b29sYmFyUGF0aD0iZ3JvdXAxIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L3ZpZXdDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBQdXJwb3NlOiBUbyByZWdpc3RlciBXUy1JIG1lc3NhZ2UgdmFsaWRhdG9yLiAgICAgICAgICAgIC0tPgotPCEtLSBFeHRlbnNpb24gcG9pbnQ6IG9yZy5lY2xpcHNlLnVpLnZpZXdBY3Rpb25zICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8ZXh0ZW5zaW9uCi0gICAgICAgICBpZD0id3NpVmFsaWRhdG9yIgotICAgICAgICAgbmFtZT0iJV9VSV9XU0lfVkFMSURBVE9SIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvciI+Ci0gICAgICA8dmFsaWRhdG9yPgotICAgICAgICAgPGZpbHRlcgotICAgICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiCi0gICAgICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzaW1zZyI+Ci0gICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgIDxoZWxwZXIgICAgICAKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkhlbHBlciI+Ci0gICAgICAgICA8L2hlbHBlcj4KLSAgICAgICAgIDxydW4KLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSU1lc3NhZ2VWYWxpZGF0b3IiPgotICAgICAgICAgPC9ydW4+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICA8IS0tIEV4dGVuc2lvbiBwb2ludDogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnRUeXBlcyAgLS0+IAotICAgPCEtLSBQdXJwb3NlOiBTcGVjaWZ5IGZpbGUgYXNzb2NpYXRpb24gZm9yIHdzaW1zZy4gICAgICAgICAgIC0tPgotICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnRUeXBlcyI+IAotICAgICAgPGZpbGUtYXNzb2NpYXRpb24gCi0gICAgICAgY29udGVudC10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotICAgICAgIGZpbGUtZXh0ZW5zaW9ucz0id3NpbXNnIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIEFkZCB2YWxpZGF0ZSBhY3Rpb24gIHRvIC53c2ltc2cgZmlsZSAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2ltc2ciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc29hcC52YWxpZGF0ZS53c2kuYWN0aW9uIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0FDVElPTl9WQUxJREFURSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzLlZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlIgotICAgICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzLlZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotIDwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxM2ZkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotIAotLyoqCi0gKiBUcmFuc2xhdGVkIG1lc3NhZ2VzLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgCi17Ci0gICAgLy8tLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVkFMSURBVElPTl9XSVpBUkRfVElUTEU7Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAoV1NETCBwYWdlKSAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfRklMRV9TSEVMTF9URVhUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9GSUxFX1RJVExFIDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfRklMRV9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfU0VMRUNUX1dTRExfRklMRU5BTUVfSEVBRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfU0VMRUNUX1dTRExfRklMRU5BTUVfRVhQTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfSU5DTFVERV9XU0RMX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfSU5DTFVERV9XU0RMX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9WQUxJRF9XU0RMX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9XT1JLQkVOQ0hfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9CUk9XU0VfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9TRUFSQ0hfVURESV9CVVRUT047Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAoV1NETCBjb250ZW50IHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1NFTEVDVF9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1NFTEVDVF9FWFBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19PUEVSQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfUkFESU9fTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9QQVJFTlQ7Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAoTG9nIHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfSEVBRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0VYUEw7Ci0KLQkvLyBBY3Rpb25zCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUNUSU9OX1dTSV9WQUxJREFUT1I7Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLSBFcnJvcnMgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfVU5BQkxFX1RPX1ZBTElEQVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX1ZBTElEQVRJT05fRkFJTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX1RIRV9XU0lNU0dfRklMRV9JU19OT1RfVkFMSUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfUFJPQkxFTVNfUkVBRElOR19XU0lNU0dfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9JTlZBTElEX0xPR19GSUxFX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQVJOSU5HX1ZBTElEQVRJT05fV0FSTklOR1NfREVURUNURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTklOR19GSUxFX0FMUkVBRFlfRVhJU1RTOwotCi0JLy8tLS0tLS0tLS0tLS0tLS0gSW5mb3JtYXRpb25hbCBtZXNzYWdlcyAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJTkZPX1ZBTElEQVRJT05fU1VDRUVERUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSU5GT19USEVfV1NJTVNHX0ZJTEVfSVNfVkFMSUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSU5GT19OT19NRVNTQUdFU19UT19WQUxJREFURTsKLQotICBzdGF0aWMgCi0gIHsKLQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKFdTSVVJUGx1Z2luLlBMVUdJTl9JRCArICIuaW50ZXJuYWwuTWVzc2FnZXMiLCBNZXNzYWdlcy5jbGFzcyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NGIzNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0jIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotIyAtLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgLS0tLS0tLS0tLS0tLS0tCi1WQUxJREFUSU9OX1dJWkFSRF9USVRMRSAgICAgICAgICAgICAgICA9IFZhbGlkYXRlIFdTLUkgTWVzc2FnZSBMb2cgRmlsZQotCi0jIC0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAoV1NETCBwYWdlKSAtLS0tLS0tLS0tLS0tLS0KLVdTRExfUEFHRV9GSUxFX1NIRUxMX1RFWFQgICAgICAgICAgICAgID0gU2VsZWN0IEZpbGUKLVdTRExfUEFHRV9GSUxFX1RJVExFICAgICAgICAgICAgICAgICAgID0gU2VsZWN0IGEgRmlsZQotV1NETF9QQUdFX0ZJTEVfREVTQ1JJUFRJT04gICAgICAgICAgICAgPSBTZWxlY3QgYSBmaWxlIGZyb20gdGhlIHdvcmtiZW5jaC4KLVdTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9IRUFESU5HID0gSW5jbHVkZSBXU0RMIEZpbGUKLVdTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9FWFBMICAgID0gT3B0aW9uYWxseSBzZWxlY3QgYSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZQotV1NETF9QQUdFX0lOQ0xVREVfV1NETF9CVVRUT04gICAgICAgICAgPSBJbmNsdWRlIFdTREwgZG9jdW1lbnQgZm9yIFdlYiBzZXJ2aWNlCi1XU0RMX1BBR0VfSU5DTFVERV9XU0RMX0xBQkVMICAgICAgICAgICA9IEVudGVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgV1NETCBkb2N1bWVudCBmb3IgdGhlIFdlYiBzZXJ2aWNlCi1XU0RMX1BBR0VfVkFMSURfV1NETF9MQUJFTCAgICAgICAgICAgICA9ICpOb3RlOiBZb3UgY2FuIG9ubHkgc2VsZWN0IHRoZSBOZXh0IGJ1dHRvbiBpZiB0aGUgV1NETCBkb2N1bWVudCBpcyB2YWxpZC4KLVdTRExfUEFHRV9XT1JLQkVOQ0hfQlVUVE9OICAgICAgICAgICAgID0gV29ya2JlbmNoLi4uCi1XU0RMX1BBR0VfQlJPV1NFX0JVVFRPTiAgICAgICAgICAgICAgICA9IEJyb3dzZS4uLgotV1NETF9QQUdFX1NFQVJDSF9VRERJX0JVVFRPTiAgICAgICAgICAgPSBTZWFyY2ggVURESS4uLgotCi0jIC0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAoV1NETCBjb250ZW50IHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0hFQURJTkcgICAgICAgPSBTcGVjaWZ5IHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgQW5hbHl6ZWQKLVdTRExfQ09OVEVOVF9QQUdFX1NFTEVDVF9FWFBMICAgICAgICAgID0gSW5kaWNhdGUgdGhlIG5hbWUsIHR5cGUsIGFuZCBuYW1lc3BhY2Ugb2YgdGhlIFdTREwgZWxlbWVudCB0byBiZSBhbmFseXplZAotV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9FTEVNRU5UICAgPSBUaGUgV1NETCBlbGVtZW50Ci1XU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX1RZUEUgICAgICA9IHR5cGUKLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlQgICAgICAgICAgID0gcG9ydAotV1NETF9DT05URU5UX1BBR0VfUkFESU9fQklORElORyAgICAgICAgPSBiaW5kaW5nCi1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUX1RZUEUgICAgICA9IHBvcnRUeXBlCi1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19PUEVSQVRJT04gICAgICA9IG9wZXJhdGlvbgotV1NETF9DT05URU5UX1BBR0VfUkFESU9fTUVTU0FHRSAgICAgICAgPSBtZXNzYWdlCi1XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FICAgICAgICAgICA9IG5hbWU6Ci1XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FU1BBQ0UgICAgICA9IG5hbWVzcGFjZToKLVdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX1BBUkVOVCAgICAgICAgID0gcGFyZW50OgotCi0jIC0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAoTG9nIHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9IRUFESU5HICAgPSBTcGVjaWZ5IHRoZSBXUy1JIE1lc3NhZ2UgTG9nIEZpbGUgTmFtZQotTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9FWFBMICAgICAgPSBTZWxlY3QgYSBmb2xkZXIgYW5kIHNwZWNpZnkgYSBtZXNzYWdlIGxvZyBmaWxlIG5hbWUKLQotIyBBY3Rpb25zCi1BQ1RJT05fV1NJX1ZBTElEQVRPUiAgICAgICAgICAgICAgICAgICA9IFdTLUkgTWVzc2FnZSBWYWxpZGF0b3IKLQotIyAtLS0tLS0tLS0tLS0tLS0gRXJyb3JzIC0tLS0tLS0tLS0tLS0tLQotRVJST1JfVU5BQkxFX1RPX1ZBTElEQVRFICAgICAgICAgICAgICAgPSBVbmFibGUgdG8gVmFsaWRhdGUKLUVSUk9SX1ZBTElEQVRJT05fRkFJTEVEICAgICAgICAgICAgICAgID0gVmFsaWRhdGlvbiBGYWlsZWQKLUVSUk9SX1RIRV9XU0lNU0dfRklMRV9JU19OT1RfVkFMSUQgICAgID0gVGhlIFdTLUkgTWVzc2FnZSBMb2cgZmlsZSBpcyBub3QgdmFsaWQuICBTZWUgdGhlIFByb2JsZW1zIHZpZXcgZm9yIGEgbGlzdCBvZiB0aGUgdmFsaWRhdGlvbiBlcnJvcnMuCi1FUlJPUl9QUk9CTEVNU19SRUFESU5HX1dTSU1TR19GSUxFICAgICA9IFByb2JsZW1zIHJlYWRpbmcgdGhlIFdTLUkgTWVzc2FnZSBMb2cgZmlsZS4gIFNlZSB0aGUgUHJvYmxlbXMgdmlldyBmb3IgYSBsaXN0IG9mIGVycm9ycy4KLUVSUk9SX0lOVkFMSURfTE9HX0ZJTEVfRVhURU5TSU9OICAgICAgID0gVGhlIGZpbGUgbmFtZSBleHRlbnNpb24gY2FuIG9ubHkgYmUgIi53c2ltc2ciLgotV0FSTklOR19WQUxJREFUSU9OX1dBUk5JTkdTX0RFVEVDVEVEICAgPSBIb3dldmVyIHdhcm5pbmdzIGhhdmUgYmVlbiBpc3N1ZWQuIFNlZSB0aGUgUHJvYmxlbXMgdmlldyBmb3IgYSBsaXN0IG9mIHRoZSB2YWxpZGF0aW9uIHdhcm5pbmdzLgotV0FSTklOR19GSUxFX0FMUkVBRFlfRVhJU1RTICAgICAgICAgICAgPSBXYXJuaW5nOiBUaGUgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgd2lsbCBiZSBvdmVyd3JpdHRlbi4gCi0KLSMgLS0tLS0tLS0tLS0tLS0tIEluZm9ybWF0aW9uYWwgbWVzc2FnZXMgLS0tLS0tLS0tLS0tLS0tCi1JTkZPX1ZBTElEQVRJT05fU1VDRUVERUQgICAgICAgICAgICAgICA9IFZhbGlkYXRpb24gU3VjY2VlZGVkCi1JTkZPX1RIRV9XU0lNU0dfRklMRV9JU19WQUxJRCAgICAgICAgICA9IFRoZSBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgaXMgdmFsaWQuCi1JTkZPX05PX01FU1NBR0VTX1RPX1ZBTElEQVRFICAgICAgICAgICA9IE5vIE1lc3NhZ2VzIHRvIFZhbGlkYXRlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGFmMWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotLyoqCi0gKiBHSUYgY29uc3RhbnRzCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotcHVibGljIGludGVyZmFjZSBSZXNvdXJjZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFURV9XU0lfTE9HRklMRV9XSVogPSAiYWN0aW9ucy9pY29ucy93c2lfbG9nZmlsZV93aXoucG5nIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMDIyNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlc291cmNlRmlsdGVyIGV4dGVuZHMgVmlld2VyRmlsdGVyIAotewotICBwcm90ZWN0ZWQgU3RyaW5nW10gZkV4dGVuc2lvbnM7Ci0gIHByb3RlY3RlZCBJRmlsZVtdIGZFeGNsdWRlZEZpbGVzOwotICBwcm90ZWN0ZWQgQ29sbGVjdGlvbiBmRXhjbHVkZXM7Ci0JCi0gIHB1YmxpYyBSZXNvdXJjZUZpbHRlcihTdHJpbmdbXSBleHRlbnNpb25zLCBDb2xsZWN0aW9uIGV4Y2x1ZGUpIAotICB7Ci0gICAgZkV4dGVuc2lvbnM9IGV4dGVuc2lvbnM7Ci0gICAgZkV4Y2x1ZGVzPSBleGNsdWRlOwotICAgIGZFeGNsdWRlZEZpbGVzID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUZpbHRlcihTdHJpbmdbXSBleHRlbnNpb25zLCBJRmlsZVtdIGV4Y2x1ZGVkRmlsZXMsIENvbGxlY3Rpb24gZXhjbHVkZSkgCi0gIHsKLSAgICBmRXh0ZW5zaW9ucz0gZXh0ZW5zaW9uczsKLSAgICBmRXhjbHVkZXM9IGV4Y2x1ZGU7Ci0gICAgZkV4Y2x1ZGVkRmlsZXMgPSBleGNsdWRlZEZpbGVzOwotICB9Ci0JCi0gIHB1YmxpYyBib29sZWFuIGlzRmlsdGVyUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIE9iamVjdCBwcm9wZXJ0eSkgCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQkKLSAgcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnQsIE9iamVjdCBlbGVtZW50KSAKLSAgewotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpIAotICAgIHsKLSAgICAgIGlmIChmRXhjbHVkZXMgIT0gbnVsbCAmJiBmRXhjbHVkZXMuY29udGFpbnMoZWxlbWVudCkpIAotICAgICAgewotCXJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIFN0cmluZyBuYW1lPSAoKElGaWxlKWVsZW1lbnQpLmdldE5hbWUoKTsKLSAgICAgIGlmIChmRXhjbHVkZWRGaWxlcyAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaj0gMDsgaiA8IGZFeGNsdWRlZEZpbGVzLmxlbmd0aDsgaisrKSAKLSAgICAgICAgewotICAgICAgICAgIGlmICggKChJRmlsZSllbGVtZW50KS5nZXRMb2NhdGlvbigpLgotICAgICAgICAgICAgICAgdG9TdHJpbmcoKS5jb21wYXJlVG8oKChJRmlsZSlmRXhjbHVkZWRGaWxlc1tqXSkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKSA9PSAwICkKLSAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgfQotICAgICAgaWYgKGZFeHRlbnNpb25zLmxlbmd0aCA9PSAwKSAKLSAgICAgIHsKLSAgICAgICAgLy8gYXNzdW1lIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBmaWx0ZXIgYW55IGZpbGVzIGJhc2VkIG9uIAotICAgICAgICAvLyBleHRlbnNpb24KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBpPSAwOyBpIDwgZkV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIAotICAgICAgewotICAgICAgICBpZiAobmFtZS5lbmRzV2l0aChmRXh0ZW5zaW9uc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfSAKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IAotICAgIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKSAKLSAgICB7IC8vIElQcm9qZWN0LCBJRm9sZGVyCi0gICAgICB0cnkgCi0gICAgICB7Ci0gICAgICAJSVJlc291cmNlW10gcmVzb3VyY2VzPSAoKElDb250YWluZXIpZWxlbWVudCkubWVtYmVycygpOwotCWZvciAoaW50IGk9IDA7IGkgPCByZXNvdXJjZXMubGVuZ3RoOyBpKyspIAotICAgICAgICB7Ci0JICAvLyByZWN1cnNpdmUhCi0JICBpZiAoc2VsZWN0KHZpZXdlciwgcGFyZW50LCByZXNvdXJjZXNbaV0pKSAKLSAgICAgICAgICB7Ci0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCX0KLSAgICAgIH0gCi0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSAKLSAgICAgIHsKLSAgICAgIH0JCQkJCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSU1lc3NhZ2VWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lNZXNzYWdlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Y2U3ZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSU1lc3NhZ2VWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuV1NJVmFsaWRhdGVBY3Rpb247Ci0vL2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRGVmYXVsdFJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuSGVscGVyOwotCi0vKioKLSAqIEEgVmFsaWRhdG9yIHRoYXQgcGVyZm9ybXMgdmFsaWRhdGlvbiBvbiBhIFdTLUkgTWVzc2FnZSBMb2cgZmlsZS4gCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFdTSU1lc3NhZ2VWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yCi17Ci0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTSV9NRVNTQUdFX1ZBTElEQVRPUl9JRCA9ICJ3c2ltZXNzYWdldmFsaWRhdG9yIi5pbnRlcm4oKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudmFsaWRhdGUuSVZhbGlkYXRvciN2YWxpZGF0ZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKElGaWxlIGZpbGUpCi0gIHsgIAotICAgIFdTSVZhbGlkYXRlQWN0aW9uIHZhbGlkYXRlQWN0aW9uID0gbmV3IFdTSVZhbGlkYXRlQWN0aW9uKGZpbGUsIGZhbHNlKTsKLSAgICB2YWxpZGF0ZUFjdGlvbi5zZXRWYWxpZGF0b3IodGhpcyk7Ci0gICAgLy92YWxpZGF0ZUFjdGlvbi5zZXRSZXBvcnRlcihnZXRSZXBvcnRlcigpKTsKLSAgICB2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnZhbGlkYXRlLklWYWxpZGF0b3Ijc2V0UmVwb3J0ZXIob3JnLmVjbGlwc2UudmFsaWRhdGUuSVJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVwb3J0ZXIoSVJlcG9ydGVyIHJlcG9ydGVyKQotICB7Ci0gIAl0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7Ci0gIH0KLQotcHVibGljIHZvaWQgY2xlYW51cChJUmVwb3J0ZXIgcmVwb3J0ZXIpIHsKLQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCi19Ci0KLXB1YmxpYyB2b2lkIHZhbGlkYXRlKElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIsIElSZXBvcnRlciByZXBvcnRlcikgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLSB7Ci0JSGVscGVyIGhlbCA9IChIZWxwZXIpaGVscGVyOwotCVN0cmluZ1tdIHVyaXMgPSBoZWwuZ2V0VVJJcygpOwotCWZvcihpbnQgaSA9IDA7aSA8IHVyaXMubGVuZ3RoO2krKyl7Ci0JCUlGaWxlIGZpbGUgPSBoZWwuZ2V0RmlsZSh1cmlzW2ldKTsKLQkJaWYoZmlsZSAhPSBudWxsICYmIGZpbGUuZXhpc3RzKCkpCi0JCQl2YWxpZGF0ZShmaWxlKTsKLQl9Ci0gfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lVSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYWM2OGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVVJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0vKioKLSAqIFdTSVZhbGlkYXRlUGx1Z2luIGlzIGEgcGx1Z2luIHRoYXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBFY2xpcHNlIHBsYXRmb3JtIFVJLiAKLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi0KLXB1YmxpYyBjbGFzcyBXU0lVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24uCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFdTSVVJUGx1Z2luIGluc3RhbmNlOyAgICAgICAgICAgICAgICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2kudWkiOwotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NJVUlQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0gICAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbi4gKEJhc2VkIG9uIHRoZSBTaW5nbGV0b24gUGF0dGVybikuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVVJUGx1Z2luIGdldEluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHByb3RlY3RlZCBJbWFnZVJlZ2lzdHJ5IGNyZWF0ZUltYWdlUmVnaXN0cnkoKSAKLSAgewotCQlJbWFnZVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gc3VwZXIuY3JlYXRlSW1hZ2VSZWdpc3RyeSgpOwotCQlyZWdpc3RlckltYWdlKHJlZ2lzdHJ5LCBSZXNvdXJjZS5WQUxJREFURV9XU0lfTE9HRklMRV9XSVopOwotCQlyZXR1cm4gcmVnaXN0cnk7Ci0gIH0KLQotCS8qKgotCSAqIFJlZ2lzdGVyIGFuIGltYWdlIHdpdGggdGhlIHJlZ2lzdHJ5LgotCSAqIAotCSAqIEBwYXJhbSBrZXkgdGhlIGtleQotCSAqLwotCXByaXZhdGUgdm9pZCByZWdpc3RlckltYWdlKEltYWdlUmVnaXN0cnkgcmVnaXN0cnksIFN0cmluZyBrZXkpCi0JewotICAJICB0cnkgCi0gIAkgIHsKLQkJSW1hZ2VEZXNjcmlwdG9yIGlkID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKFdTSVVJUGx1Z2luLmNsYXNzLCBrZXkpOwotCQlyZWdpc3RyeS5wdXQoa2V5LCBpZCk7Ci0JICB9IGNhdGNoIChFeGNlcHRpb24gZSkgCi0JICB7Ci0gICAgICB9Ci0JfQotCi0gIC8qKgotICAgKiBDb252aWVuY2UgQVBJLiAgCi0gICAqIEZpbmRzIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugc3RvcmVkIGluIHRoaXMgcGx1Zy1pbidzIGltYWdlIHJlZ2lzdHJ5LgotICAgKiBAcGFyYW0gaWNvbk5hbWU6IHRoZSBuYW1lIG9mIHRoZSBpbWFnZS4KLSAgICogQHJldHVybiB0aGUgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbWFnZSBnZXRSZXNvdXJjZUltYWdlKFN0cmluZyBpY29uTmFtZSkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KGljb25OYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGI2NDQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuV1NJVmFsaWRhdGVBY3Rpb247Ci0KLS8qKgotICogQSBzaW1wbGUgaW50ZXJmYWNlIHRvIHRoZSBXUy1JIG1lc3NhZ2UgbG9nIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgV1NJVmFsaWRhdG9yIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBXU0lWYWxpZGF0b3IoKQotCXsKLQl9Ci0JCi0JLyoqCi0JICogVmFsaWRhdGUgdGhlIGdpdmVuIGxvZyBmaWxlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIFRoZSBsb2cgZmlsZSB0byB2YWxpZGF0ZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShJRmlsZSBmaWxlKQotCXsKLQkJV1NJTWVzc2FnZVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IFdTSU1lc3NhZ2VWYWxpZGF0b3IoKTsKLQkJV1NJVmFsaWRhdGVBY3Rpb24gdmFsaWRhdGVBY3Rpb24gPSBuZXcgV1NJVmFsaWRhdGVBY3Rpb24oZmlsZSwgdHJ1ZSk7Ci0JCXZhbGlkYXRlQWN0aW9uLnNldFZhbGlkYXRvcihtZXNzYWdlVmFsaWRhdG9yKTsKLQkJdmFsaWRhdGVBY3Rpb24ucnVuKCk7Ci0JfQotCQotCS8qKgotCSAqIFZhbGlkYXRlIHRoZSBnaXZlbiBsb2cgZmlsZSB3aXRoIGEgV1NETCBkb2N1bWVudCBzcGVjaWZpZWQuCi0JICogCi0JICogQHBhcmFtIGZpbGUgVGhlIGxvZyBmaWxlIHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSB3c2RsZmlsZSBUaGUgV1NETCBmaWxlIHRvIHVzZSBmb3IgdmFsaWRhdGlvbi4KLQkgKiBAcGFyYW0gZWxlbWVudG5hbWUgVGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gcGFyZW50bmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0JICovCi0JLyoqCi0JICogVmFsaWRhdGUgdGhlIGdpdmVuIGxvZyBmaWxlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIFRoZSBsb2cgZmlsZSB0byB2YWxpZGF0ZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShJRmlsZSBmaWxlLCBTdHJpbmcgd3NkbGZpbGUsIFN0cmluZyBlbGVtZW50bmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudG5hbWUsIFN0cmluZyB0eXBlKQotCXsKLQkJV1NJTWVzc2FnZVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IFdTSU1lc3NhZ2VWYWxpZGF0b3IoKTsKLQkJV1NJVmFsaWRhdGVBY3Rpb24gdmFsaWRhdGVBY3Rpb24gPSBuZXcgV1NJVmFsaWRhdGVBY3Rpb24oZmlsZSwgdHJ1ZSwgd3NkbGZpbGUsIGVsZW1lbnRuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUpOwotCQl2YWxpZGF0ZUFjdGlvbi5zZXRWYWxpZGF0b3IobWVzc2FnZVZhbGlkYXRvcik7Ci0JCXZhbGlkYXRlQWN0aW9uLnJ1bigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1ZhbGlkYXRlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9WYWxpZGF0ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWZjZWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1ZhbGlkYXRlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLkxvY2FsaXplZE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5Xb3JrYmVuY2hSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25VSU1lc3NhZ2VzOwotCi0vKioKLSAqIEEgZ2VuZXJhbCB2YWxpZGF0ZSBhY3Rpb24gY2xhc3MgdGhhdCBjYW4gYmUgZXh0ZW5kZWQgYnkgdmFsaWRhdG9ycy4gVGhpcyBjbGFzcwotICogcHJvdmlkZXMgbWV0aG9kcyB0byBydW4gdGhlIGFjdGlvbiwgYWRkIG1hcmtlcnMgdG8gYSBmaWxlIGFuZCB3aWxsIGhhbmRsZQotICogc2hvd2luZyBhIGRpYWxvZyB3aXRoIHRoZSByZXN1bHRzIG9mIHZhbGlkYXRpb24gKGlmIHJlcXVlc3RlZCkgYW5kIHByb21wdCB0bwotICogc2F2ZSBkaXJ0eSBmaWxlcyAoaWYgcmVxdWVzdGVkLikKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFZhbGlkYXRlQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIC8vIExvY2FsbHkgdXNlZCwgbm9uLVVJIHN0cmluZ3MuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VEX0ZJTEVfRVJST1JfT1BFTiA9ICJyZWZlcmVuY2VkRmlsZUVycm9yKCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFRF9GSUxFX0VSUk9SX0NMT1NFID0gIikiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRURfRklMRV9FUlJPUiA9ICJyZWZlcmVuY2VkRmlsZUVycm9yIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHUk9VUF9OQU1FID0gImdyb3VwTmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BST1RPQ09MX05PX1NMQVNIID0gImZpbGU6IjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gImNvbHVtbk51bWJlciI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICJzcXVpZ2dsZVNlbGVjdGlvblN0cmF0ZWd5IjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICJzcXVpZ2dsZU5hbWVPclZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dEaWFsb2cgPSB0cnVlOwotCi0gIHByb3RlY3RlZCBJRmlsZSBmaWxlID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgSVJlcG9ydGVyIHJlcG9ydGVyOwotCi0gIHByb3RlY3RlZCBJVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZQotICAgKiAgICAgICAgICBUaGUgZmlsZSB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHNob3dEaWFsb2cKLSAgICogICAgICAgICAgV2hldGhlciBvciBub3QgdG8gc2hvdyBhIGRpYWxvZyB3aGVuIHZhbGlkYXRpb24gaXMgY29tcGxldGUuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGVBY3Rpb24oSUZpbGUgZmlsZSwgYm9vbGVhbiBzaG93RGlhbG9nKQotICB7Ci0gICAgdGhpcy5zaG93RGlhbG9nID0gc2hvd0RpYWxvZzsKLSAgICB0aGlzLmZpbGUgPSBmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgZmlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlCi0gICAqICAgICAgICAgIFRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmFsaWRhdGUoZmluYWwgSUZpbGUgZmlsZSk7Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkSW5mb1RvTWVzc2FnZSAoVmFsaWRhdGlvbk1lc3NhZ2UgdiwgSU1lc3NhZ2UgbSkKLSAgeyAvLyBUaGlzIG1ldGhvZCBpcyBvdmVyaWRkZW4gYnkgc3ViY2xhc3NlcwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIG1hcmtlcnMgZm9yIHRoZSB2YWxpYXRpb24gbWVzc2FnZXMgZ2VuZXJhdGVkIGZyb20gdGhlIHZhbGlkYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gaUZpbGUKLSAgICogICAgICAgICAgVGhlIHJlc291cmNlIHRvIGNyZWF0ZSB0aGUgbWFya2VycyBvbi4KLSAgICogQHBhcmFtIHZhbG1lc3NhZ2VzCi0gICAqICAgICAgICAgIFRoZSBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlTWFya2VycyhJRmlsZSBpRmlsZSwgVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxtZXNzYWdlcykKLSAgewotICAgIGlmICghZmlsZUlzT0soaUZpbGUpKQotICAgIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtbWVzc2FnZXM7IGkrKykKLSAgICB7Ci0gICAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IHZhbG1lc3NhZ2VzW2ldOwotICAgICAgU3RyaW5nIHVyaSA9IHZhbGlkYXRpb25NZXNzYWdlLmdldFVyaSgpOwotCi0gICAgICBMb2NhbGl6ZWRNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gbmV3IExvY2FsaXplZE1lc3NhZ2UoZ2V0VmFsaWRhdGlvbkZyYW1ld29ya1NldmVyaXR5KElNYXJrZXIuU0VWRVJJVFlfV0FSTklORyksIHZhbGlkYXRpb25NZXNzYWdlCi0gICAgICAgICAgICAuZ2V0TWVzc2FnZSgpLCBpRmlsZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IAotICAgICAgICBtZXNzYWdlID0gbmV3IExvY2FsaXplZE1lc3NhZ2UoZ2V0VmFsaWRhdGlvbkZyYW1ld29ya1NldmVyaXR5KElNYXJrZXIuU0VWRVJJVFlfRVJST1IpLCB2YWxpZGF0aW9uTWVzc2FnZS5nZXRNZXNzYWdlKCksIGlGaWxlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgbWVzc2FnZS5zZXRMaW5lTm8odmFsaWRhdGlvbk1lc3NhZ2UuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgIGFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotICAgICAgCi0gICAgICBMaXN0IG5lc3RlZGVycm9ycyA9IHZhbGlkYXRpb25NZXNzYWdlLmdldE5lc3RlZE1lc3NhZ2VzKCk7Ci0gICAgICBpZiAobmVzdGVkZXJyb3JzICE9IG51bGwgJiYgIW5lc3RlZGVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKFJFRkVSRU5DRURfRklMRV9FUlJPUl9PUEVOICsgdXJpICsgUkVGRVJFTkNFRF9GSUxFX0VSUk9SX0NMT1NFKTsKLSAgICAgIH0KLQotICAgICAgZ2V0T3JDcmVhdGVSZXBvcnRlcigpLmFkZE1lc3NhZ2UoZ2V0VmFsaWRhdG9yKCksIG1lc3NhZ2UpOwotCi0gICAgICAKLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSU1hcmtlcltdIG1hcmtlcnMgPSBpRmlsZS5maW5kTWFya2VycyhudWxsLCB0cnVlLCBJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBJTWFya2VyIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAgIFN0cmluZyBncm91cE5hbWUgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGdyb3VwTmFtZSA9IChTdHJpbmcpIG1hcmtlci5nZXRBdHRyaWJ1dGUoR1JPVVBfTkFNRSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ3JvdXBOYW1lICE9IG51bGwgJiYgZ3JvdXBOYW1lLnN0YXJ0c1dpdGgoUkVGRVJFTkNFRF9GSUxFX0VSUk9SKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbWFya2VyLnNldEF0dHJpYnV0ZShJTWFya2VyLkRPTkUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsZWFyTWFya2VycyhJRmlsZSBpRmlsZSkKLSAgewotICAgIGlmIChmaWxlSXNPSyhpRmlsZSkpCi0gICAgewotICAgICAgZ2V0T3JDcmVhdGVSZXBvcnRlcigpLnJlbW92ZUFsbE1lc3NhZ2VzKGdldFZhbGlkYXRvcigpLCBpRmlsZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAJdHJ5Ci0gIAl7Ci0gIAkJLy8gQ1MuLi4gYSB0ZW1wb3JhcnkgdGVzdCB0byBhdm9pZCBwZXJmb3JtaW5nIHZhbGlkYXRpb24gaW4gdGhlIGFic2VuY2Ugb2YgeGVyY2VzIAotICAJCS8vCi0gIAkJLy9kdyBDbGFzcyB0aGVDbGFzcyA9IAotICAJCUNsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VyQ29uZmlndXJhdGlvbiIsIHRydWUsIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsgLy8kTk9OLU5MUy0xJAotICAJCSAgCQkKLSAgCQlpZiAoZmlsZUlzT0soZmlsZSkpCi0gIAkJewotICAJCQkvLyBDaGVjayBpZiB0aGUgZWRpdG9yIGlzIGRpcnR5IGZvciB0aGlzIGZpbGUuIElmIHNvLCBwcm9tcHQgdGhlIHVzZXIgdG8KLSAgCQkJLy8gc2F2ZSBiZWZvcmUgdmFsaWRhdGluZy4KLSAgCQkJaWYoc2hvd0RpYWxvZykKLSAgCQkJewotICAJCQkJY2hlY2tJZkZpbGVEaXJ0eShmaWxlKTsKLSAgCQkJfQotICAJCQl0cnkKLSAgCQkJewotICAJCQkJdmFsaWRhdGUoZmlsZSk7Ci0gIAkJCX0KLSAgCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAJCQl7Ci0gIAkJCQlJTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VySW5zdGFuY2UoKTsKLSAgCQkJCWxvZ2dlci5sb2dFcnJvcigiIiwgZSk7IC8vJE5PTi1OTFMtMSQKLSAgCQkJCS8vICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgCQkJfQotICAJCX0KLSAgCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSkKLSAgCXsJCQotICAJfQotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qgd2hldGhlciB0aGUgZmlsZSBnaXZlbiBpcyBPSyB0byB1c2UuIEEgZmlsZSBpcyBPSyB0byB1c2UgaWYgMS4gSXQgaXMKLSAgICogbm90IG51bGwgMi4gSXQgZXhpc3RzLiAzLiBUaGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBmaWxlIGlzIGFjY2Vzc2libGUuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBjaGVjay4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIE9LIHRvIHVzZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZmlsZUlzT0soSUZpbGUgZmlsZSkKLSAgewotICAgIGlmIChmaWxlICE9IG51bGwgJiYgZmlsZS5leGlzdHMoKSAmJiBmaWxlLmdldFByb2plY3QoKS5pc0FjY2Vzc2libGUoKSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZSBmaWxlIGlzIGRpcnR5LiBBIGZpbGUgaXMgZGlydHkgaWYgdGhlcmUgaXMgYW4gb3BlbiBlZGl0b3IgZm9yCi0gICAqIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgY2hhbmdlcyB0aGF0IGhhdmVuJ3QgYmVlbiBzYXZlZC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBkaXJ0eS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNoZWNrSWZGaWxlRGlydHkoSUZpbGUgZmlsZSkKLSAgewotICAgIElFZGl0b3JQYXJ0W10gZGlydHlFZGl0b3JzID0gV1NJVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKQotICAgICAgICAuZ2V0QWN0aXZlUGFnZSgpLmdldERpcnR5RWRpdG9ycygpOwotICAgIGludCBudW1lZGl0b3JzID0gZGlydHlFZGl0b3JzLmxlbmd0aDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWVkaXRvcnM7IGkrKykKLSAgICB7Ci0gICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBkaXJ0eUVkaXRvcnNbaV0uZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVFZGl0b3JJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICBpZiAoZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKS5lcXVhbHMoZmlsZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IFhNTFZhbGlkYXRpb25VSU1lc3NhZ2VzLl9VSV9TQVZFX0RJUlRZX0ZJTEVfTUVTU0FHRTsKLSAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBYTUxWYWxpZGF0aW9uVUlNZXNzYWdlcy5fVUlfU0FWRV9ESVJUWV9GSUxFX1RJVExFOwotICAgICAgICAgIGlmIChNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZGlydHlFZGl0b3JzW2ldLmRvU2F2ZShudWxsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIG9wZW4gZWRpdG9yL2ZpbGUgc28gd2UgY2FuIGJyZWFrLgotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIHJlcG9ydGVyLgotICAgKiAKLSAgICogQHJldHVybiBSZXR1cm5zIGEgSVJlcG9ydGVyCi0gICAqLwotICBwdWJsaWMgSVJlcG9ydGVyIGdldFJlcG9ydGVyKCkKLSAgewotICAgIHJldHVybiByZXBvcnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByZXBvcnRlci4KLSAgICogCi0gICAqIEBwYXJhbSByZXBvcnRlcgotICAgKiAgICAgICAgICBUaGUgcmVwb3J0ZXIgdG8gc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRlcihJUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gIHsKLSAgICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBSZXR1cm5zIGEgSVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIElWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yKCkKLSAgewotICAgIHJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvcgotICAgKiAgICAgICAgICBUaGUgdmFsaWRhdG9yIHRvIHNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsaWRhdG9yKElWYWxpZGF0b3IgdmFsaWRhdG9yKQotICB7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVJlcG9ydGVyIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKQotICB7Ci0gICAgaWYgKHJlcG9ydGVyID09IG51bGwpCi0gICAgeyAKLSAgICAgIHJlcG9ydGVyID0gbmV3IFdvcmtiZW5jaFJlcG9ydGVyKGZpbGUuZ2V0UHJvamVjdCgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcG9ydGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIE9yaWdpbmFsbHkgZnJvbSAqdmFsaWRhdGlvbi5IZWxwZXIKLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eQotICAgKiAgICAgICAgICBUaGUgc2V2ZXJpdHkgZ2l2ZW4uCi0gICAqIEByZXR1cm4gVGhlIHZhbGlkYXRpb24gZnJhbWV3b3JrIHNldmVyaXR5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVycm9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBnZXRWYWxpZGF0aW9uRnJhbWV3b3JrU2V2ZXJpdHkoaW50IHNldmVyaXR5KQotICB7Ci0gICAgc3dpdGNoIChzZXZlcml0eSkgewotICAgIGNhc2UgSU1hcmtlci5TRVZFUklUWV9FUlJPUjoKLSAgICAgIHJldHVybiBJTWVzc2FnZS5ISUdIX1NFVkVSSVRZOwotICAgIGNhc2UgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HOgotICAgICAgcmV0dXJuIElNZXNzYWdlLk5PUk1BTF9TRVZFUklUWTsKLSAgICBjYXNlIElNYXJrZXIuU0VWRVJJVFlfSU5GTzoKLSAgICAgIHJldHVybiBJTWVzc2FnZS5MT1dfU0VWRVJJVFk7Ci0gICAgfQotICAgIHJldHVybiBJTWVzc2FnZS5MT1dfU0VWRVJJVFk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBPcGVuIGFuIGVycm9yIGRpYWxvZyB3aXRoIHRoZSBnaXZlbiB0aXRsZSBhbmQgbWVzc2FnZS4gU2hvdyB0aGUgcHJvYmxlbXMgdmlldwotICAgKiBpZiBpdCBpcyBub3QgYWxyZWFkeSB2aXNpYmxlLgotICAgKiAKLSAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgZXJyb3IgZGlhbG9nLgotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBpbiB0aGUgZXJyb3IgZGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb3BlbkVycm9yRGlhbG9nKFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBzaG93UHJvYmxlbXNWaWV3KCk7Ci0gICAgTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICB9Ci0gIAotICAvKioKLSAgICogT3BlbiBhbiB3YXJuaW5nIGRpYWxvZyB3aXRoIHRoZSBnaXZlbiB0aXRsZSBhbmQgbWVzc2FnZS4gU2hvdyB0aGUgcHJvYmxlbXMgdmlldwotICAgKiBpZiBpdCBpcyBub3QgYWxyZWFkeSB2aXNpYmxlLgotICAgKiAKLSAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgd2FybmluZyBkaWFsb2cuCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGluIHRoZSB3YXJuaW5nIGRpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIG9wZW5XYXJuaW5nRGlhbG9nKFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBzaG93UHJvYmxlbXNWaWV3KCk7Ci0gICAgTWVzc2FnZURpYWxvZy5vcGVuV2FybmluZyhEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBPcGVuIGEgdmFsaWQgZGlhbG9nIHdpdGggdGhlIGdpdmVuIHRpdGxlIGFuZCBtZXNzYWdlLiAKLSAgICogCi0gICAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgb2YgdGhlIHZhbGlkIGRpYWxvZy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgaW4gdGhlIHZhbGlkIGRpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIG9wZW5WYWxpZERpYWxvZyhTdHJpbmcgdGl0bGUsIFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICB9Ci0gIAotICAvKioKLSAgICogU2hvdyB0aGUgcHJvYmxlbXMgdmlldyBpZiBpdCBpcyBub3QgYWxyZWFkeSB2aXNpYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2hvd1Byb2JsZW1zVmlldygpCi0gIHsKLSAgICBJV29ya2JlbmNoV2luZG93IGR3ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gZHcuZ2V0QWN0aXZlUGFnZSgpOwotICAgIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBwYWdlLnNob3dWaWV3KElQYWdlTGF5b3V0LklEX1BST0JMRU1fVklFVyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLSAgICB9Ci0gICAgcGFnZS5hY3RpdmF0ZShhY3RpdmVQYXJ0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEZvcm1hdCBhIGZpbGUgbmFtZSBpbnRvIGEgY29ycmVjdCBVUkkuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZW5hbWUgVGhlIGZpbGUgbmFtZSB0byBmb3JtYXQuCi0gICAqIEByZXR1cm4gVGhlIGZvcm1hdHRlZCBVUkkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVVSSUZvckZpbGVQYXRoKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAJaWYoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoRklMRV9QUk9UT0NPTF9OT19TTEFTSCkpCi0gICAgewotICAgICAgd2hpbGUoZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDEpOwotICAgICAgfQotICAgICAgZmlsZW5hbWUgPSBGSUxFX1BST1RPQ09MICsgZmlsZW5hbWU7Ci0gICAgfQotICAJcmV0dXJuIGZpbGVuYW1lOwotICB9Ci0gIAotICAvKioKLSAgICogVGhlIHZhbGlkYXRpb24gb3V0Y29tZSBjbGFzcyBob2xkcyB0aGUgcmVzdWx0cyBmcm9tIHZhbGlkYXRpbmcKLSAgICogYSBmaWxlLgotICAgKiAKLSAgICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIFZhbGlkYXRpb25PdXRjb21lCi0gIHsKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkID0gdHJ1ZTsKLQotICAgIHB1YmxpYyBib29sZWFuIGhhc01lc3NhZ2VzID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgVmFsaWRhdGlvbk91dGNvbWUoKQotICAgIHsKLSAgICB9Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YWFiODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLklNZXNzYWdlQWNjZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuTWVzc2FnZUxpbWl0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXIuTWVzc2FnZUFuYWx5emVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXIuV1NJQW5hbHl6ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5Bc3NlcnRpb25FcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci0KLS8qKgotICogQWN0aW9uIGZvciBydW5uaW5nIHRoZSB2YWxpZGF0b3IuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFdTSVZhbGlkYXRlQWN0aW9uIGV4dGVuZHMgVmFsaWRhdGVBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIElWYWxpZGF0b3IgdmFsaWRhdG9yOwotICAKLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsZmlsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudG5hbWUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcGFyZW50bmFtZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHdzZGxzcGVjaWZpZWQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhjZXB0aW9uQ2F1Z2h0ID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGYgVGhlIGZpbGUgdG8gdmFsaWRhdGUKLSAgICogQHBhcmFtIHNob3dEaWFsb2cgV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHN0YXR1cyBkaWFsb2cgYWZ0ZXIgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBXU0lWYWxpZGF0ZUFjdGlvbihJRmlsZSBmLCBib29sZWFuIHNob3dEaWFsb2cpCi0gIHsKLSAgCXN1cGVyKGYsIHNob3dEaWFsb2cpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCBXU0RMIGVsZW1lbnQgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGYgVGhlIGZpbGUgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBzaG93RGlhbG9nIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgYSBzdGF0dXMgZGlhbG9nIGFmdGVyIHZhbGlkYXRpb24uCi0gICAqIEBwYXJhbSBmaWxlIFRoZSBXU0RMIGZpbGUgdG8gdXNlIGZvciB2YWxpZGF0aW9uLgotICAgKiBAcGFyYW0gZWxlbWVudG5hbWUgVGhlIG5hbWUgb2YgdGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBXU0RMIGVsZW1lbnQgdG8gdmFsaWRhdGUKLSAgICogQHBhcmFtIHBhcmVudG5hbWUgVGhlIHBhcmVudCBuYW1lIG9mIHRoZSBXU0RMIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwdWJsaWMgV1NJVmFsaWRhdGVBY3Rpb24oSUZpbGUgZiwgYm9vbGVhbiBzaG93RGlhbG9nLCBTdHJpbmcgZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgCXRoaXMoZiwgc2hvd0RpYWxvZyk7Ci0gIAlpZiAoZmlsZSAhPSBudWxsKQotICAJewotICAJICB3c2RsZmlsZSA9IGZpbGUucmVwbGFjZSgnXFwnLCAnLycpOwotICAJICBpZiAoKCF3c2RsZmlsZS5zdGFydHNXaXRoKFdTSUNvbnN0YW50cy5GSUxFX1BSRUZJWCkpICYmIAotICAJCSAgKCF3c2RsZmlsZS5zdGFydHNXaXRoKFdTSUNvbnN0YW50cy5IVFRQX1BSRUZJWCkpKQotICAgICAgewotICAJICAgIHdzZGxmaWxlID0gV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyB3c2RsZmlsZTsgIAotICAJICB9Ci0gIAl9Ci0gIAl0aGlzLmVsZW1lbnRuYW1lID0gZWxlbWVudG5hbWU7Ci0gIAl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgCXRoaXMucGFyZW50bmFtZSA9IHBhcmVudG5hbWU7Ci0gIAl0aGlzLnR5cGUgPSB0eXBlOwotICAJdGhpcy53c2Rsc3BlY2lmaWVkID0gdHJ1ZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS52YWxpZGF0ZS5WYWxpZGF0ZUFjdGlvbiN2YWxpZGF0ZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlKGZpbmFsIElGaWxlIGZpbGUxKQotICB7Ci0gIAlmaW5hbCBNZXNzYWdlQW5hbHl6ZXIgbWVzc2FnZWFuYWx5emVyOwotICAJCi0gIAlpZih3c2Rsc3BlY2lmaWVkKQotICAJewotICAJICBtZXNzYWdlYW5hbHl6ZXIgPSBuZXcgTWVzc2FnZUFuYWx5emVyKFdTSUNvbnN0YW50cy5GSUxFX1BST1RPQ09MICsgZmlsZTEuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpLCB3c2RsZmlsZSwgZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZSk7CQotICAJfQotICAJZWxzZQotICAJewkKLSAgCSAgbWVzc2FnZWFuYWx5emVyID0gbmV3IE1lc3NhZ2VBbmFseXplcihXU0lDb25zdGFudHMuRklMRV9QUk9UT0NPTCArIGZpbGUxLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0gIAl9Ci0gIAkKLSAgCUlXb3Jrc3BhY2VSdW5uYWJsZSBvcCA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSAKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIAotICAgICAgeyAgICAgICAgCi0gICAgICAgIGNsZWFyTWFya2VycyhmaWxlMSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZWFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1NJQW5hbHl6ZXJFeGNlcHRpb24gYWUpCi0gICAgICAgIHsKLSAgICAgICAgCWV4Y2VwdGlvbkNhdWdodCA9IHRydWU7Ci0gICAgICAgIAlpZiAoYWUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkgaW5zdGFuY2VvZiBTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgCXsKLSAgICAgICAgCSAgY3JlYXRlTWFya2VycyhmaWxlMSwgbmV3IFZhbGlkYXRpb25NZXNzYWdlW117Y3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oKFNBWFBhcnNlRXhjZXB0aW9uKWFlLmdldFRhcmdldEV4Y2VwdGlvbigpLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMKX0pOwotICAgICAgICAJfQotICAgICAgICAJZWxzZQotICAgICAgICAJewotICAgICAgICAgCSAgY3JlYXRlTWFya2VycyhmaWxlMSwgbmV3IFZhbGlkYXRpb25NZXNzYWdlW117Y3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oYWUsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwpfSk7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBjcmVhdGVNYXJrZXJzKGZpbGUxLCBjb252ZXJ0VmFsaWRhdGlvbk1lc3NhZ2VzKG1lc3NhZ2VhbmFseXplci5nZXRBc3NlcnRpb25XYXJuaW5ncygpLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKSk7Ci0gICAgICAgIGNyZWF0ZU1hcmtlcnMoZmlsZTEsIGNvbnZlcnRWYWxpZGF0aW9uTWVzc2FnZXMobWVzc2FnZWFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMKSk7Ci0gICAgICAgIGZpbGUuc2V0U2Vzc2lvblByb3BlcnR5KFZhbGlkYXRpb25NZXNzYWdlLkVSUk9SX01FU1NBR0VfTUFQX1FVQUxJRklFRF9OQU1FLCBnZXRPckNyZWF0ZVJlcG9ydGVyKCkuZ2V0TWVzc2FnZXMoKSk7Ci0JCX0KLSAgICB9OwotICAgCi0gICAgCi0gICAgIHRyeQotICAgIHsKLSAgICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ob3AsIG51bGwpOwotICAgICBpZiAoc2hvd0RpYWxvZykKLSAgICAgIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbkNhdWdodCkKLSAgICAgICAgewotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIAotICAgICAgICAgIAkJTWVzc2FnZXMuRVJST1JfVU5BQkxFX1RPX1ZBTElEQVRFLCAKLSAgICAgICAgICAJCU1lc3NhZ2VzLkVSUk9SX1BST0JMRU1TX1JFQURJTkdfV1NJTVNHX0ZJTEUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2VhbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKS5zaXplKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIAotICAgICAgICAgIAkJTWVzc2FnZXMuRVJST1JfVkFMSURBVElPTl9GQUlMRUQsIAotICAgICAgICAgIAkJTWVzc2FnZXMuRVJST1JfVEhFX1dTSU1TR19GSUxFX0lTX05PVF9WQUxJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWVzc2FnZWFuYWx5emVyLmdldEFzc2VydGlvbldhcm5pbmdzKCkuc2l6ZSgpICE9IDApCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIFN0cmluZyB0aXRsZSA9IE1lc3NhZ2VzLklORk9fVkFMSURBVElPTl9TVUNFRURFRDsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IE1lc3NhZ2VzLldBUk5JTkdfVkFMSURBVElPTl9XQVJOSU5HU19ERVRFQ1RFRDsKLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuSU5GT19WQUxJREFUSU9OX1NVQ0VFREVEOwotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuSU5GT19USEVfV1NJTVNHX0ZJTEVfSVNfVkFMSUQ7Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXt9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgZXhjZXB0aW9uIGFuZCBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkuCi0gICAqIEByZXR1cm4gQW4gZXJyb3IgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0aW9uTWVzc2FnZSBjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihTQVhQYXJzZUV4Y2VwdGlvbiBlcnJvciwgaW50IHNldmVyaXR5KQotICB7Ci0gICAgU3RyaW5nIHVyaSA9IGVycm9yLmdldFN5c3RlbUlkKCk7Ci0gICAgaWYodXJpID09IG51bGwpCi0gICAgewotICAgICAgdXJpID0gZXJyb3IuZ2V0UHVibGljSWQoKTsKLSAgICB9Ci0gICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpLCBlcnJvci5nZXRMaW5lTnVtYmVyKCksIGVycm9yLmdldENvbHVtbk51bWJlcigpLCB1cmkpOwotICAgIHZhbGlkYXRpb25NZXNzYWdlLnNldFNldmVyaXR5KHNldmVyaXR5KTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2U7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgZXhjZXB0aW9uIGFuZCBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkuCi0gICAqIEByZXR1cm4gQW4gZXJyb3IgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0aW9uTWVzc2FnZSBjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihXU0lBbmFseXplckV4Y2VwdGlvbiBlcnJvciwgaW50IHNldmVyaXR5KQotICB7Ci0gICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpLCAwLCAwKTsKLSAgICB2YWxpZGF0aW9uTWVzc2FnZS5zZXRTZXZlcml0eShzZXZlcml0eSk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlOwotICB9Ci0gCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVtdICBjb252ZXJ0VmFsaWRhdGlvbk1lc3NhZ2VzKExpc3QgbGlzdCwgaW50IG1hcmtlcikKLSAgewotCWlmIChsaXN0ICE9IG51bGwpCi0JewotCSAgaW50IHNpemUgPSBsaXN0LnNpemUoKTsKLQkgIFZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2Vbc2l6ZV07Ci0JIAotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEFzc2VydGlvbkVycm9yIGFzc2VydGlvbkVycm9yID0gKEFzc2VydGlvbkVycm9yKSBsaXN0LmdldChpKTsKLQotICAgICAgICBpbnQgbiA9IGFzc2VydGlvbkVycm9yLmdldExpbmUoKTsKLSAgICAgICAgaW50IGMgPSBhc3NlcnRpb25FcnJvci5nZXRDb2x1bW4oKTsKLSAgICAgICAgU3RyaW5nIG0gPSBXU0lDb25zdGFudHMuV1NJX1BSRUZJWCArICIoIiArIGFzc2VydGlvbkVycm9yLmdldEFzc2VydGlvbklEKCkrICIpICIgKyBhc3NlcnRpb25FcnJvci5nZXRFcnJvck1lc3NhZ2UoKTsKLSAgICAgIAotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZSBtZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKG0sbiwgYyk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0U2V2ZXJpdHkobWFya2VyKTsKLSAgICAgICAgbWVzc2FnZXNbaV0gPSBtZXNzYWdlOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VzOwotICAgIH0KLQlyZXR1cm4gbmV3IFZhbGlkYXRpb25NZXNzYWdlWzBdOwotICB9Ci0KLSAvKioKLSAgcHJvdGVjdGVkIElSZXBvcnRlciBnZXRPckNyZWF0ZVJlcG9ydGVyKCkKLSAgewotICAgIGlmIChyZXBvcnRlciA9PSBudWxsKQotICAgIHsgCi0gICAgICByZXBvcnRlciA9IG5ldyBSZXBvcnRlcigpOwotICAgIH0KLSAgICByZXR1cm4gcmVwb3J0ZXI7Ci0gIH0KLSAgKi8KLSAgLy8gTXkgSW1wbGVtZW50YXRpb24gb2YgSVJlcG9ydGVyCi0gIGNsYXNzIFJlcG9ydGVyIGltcGxlbWVudHMgSVJlcG9ydGVyIAotICB7Ci0JTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIFJlcG9ydGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBJTWVzc2FnZUFjY2VzcyBnZXRNZXNzYWdlQWNjZXNzKCkgewotCQlyZXR1cm4gbnVsbDsgLy8gZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7Ci0JCXJldHVybiBmYWxzZTsgLy8gZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4sIE9iamVjdCBvYmplY3QpIHsgLy8gZG8KLQkJCQkJCQkJCQkJCQkJCQkJCS8vIG5vdAotCQkJCQkJCQkJCQkJCQkJCQkJLy8gbmVlZAotCQkJCQkJCQkJCQkJCQkJCQkJLy8gdG8KLQkJCQkJCQkJCQkJCQkJCQkJCS8vIGltcGxlbWVudAotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luKSB7Ly8gZG8gbm90IG5lZWQgdG8KLQkJCQkJCQkJCQkJCQkJLy8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTWVzc2FnZVN1YnNldChJVmFsaWRhdG9yIHZhbGlkYXRvciwgT2JqZWN0IG9iaiwgU3RyaW5nIGdyb3VwTmFtZSkgey8vIGRvCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIG5vdAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBuZWVkCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHRvCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIGltcGxlbWVudAotCX0KLQotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQlyZXR1cm4gbGlzdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRNZXNzYWdlKElWYWxpZGF0b3Igb3JpZ2luLCBJTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgTWVzc2FnZUxpbWl0RXhjZXB0aW9uIAotCXsKLQkJbGlzdC5hZGQobWVzc2FnZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcGxheVN1YnRhc2soSVZhbGlkYXRvciB2YWxpZGF0b3IsIElNZXNzYWdlIG1lc3NhZ2UpIAotCXsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0aW9uVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDFhMmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRpb25VSU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFN0cmluZ3MgdXNlZCBieSBYTUwgVmFsaWRhdGlvbgotICovCi1wdWJsaWMgY2xhc3MgV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMud3NpdmFsaWRhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMoKSB7Ci0JCS8vIGNhbm5vdCBjcmVhdGUgbmV3IGluc3RhbmNlCi0JfQotCi0Jc3RhdGljIHsKLQkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU0FWRV9ESVJUWV9GSUxFX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1NBVkVfRElSVFlfRklMRV9USVRMRTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9SZXF1ZXN0SGFuZGxlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9SZXF1ZXN0SGFuZGxlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI1ZjYwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvUmVxdWVzdEhhbmRsZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlcjsKLQotLyoqCi0gKiBJbXBsZW1lbnRzIHRoZSBSZXF1ZXN0SGFuZGxlciBpbnRlcmZhY2Ugd2hpY2ggcmVwcmVzZW50cyBhIFRDUC9JUAotICogcmVxdWVzdCBtYWRlIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci4gRWFjaCByZXF1ZXN0IAotICogcmVwcmVzZW50cyBhIHJlcXVlc3QtcmVzcG9uc2UgcGFpciwgd2hlcmUgdGhlIHJlcXVlc3QgaXMgZnJvbSAKLSAqIGNsaWVudCAtPiBzZXJ2ZXIsIGFuZCB0aGUgcmVzcG9uc2UgaXMgZnJvbSBzZXJ2ZXIgLT4gY2xpZW50LgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIFJlcXVlc3RIYW5kbGVySW1wbCBpbXBsZW1lbnRzIFJlcXVlc3RIYW5kbGVyIAotewotCS8qKgotCSAqIFRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVxdWVzdCBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwcm90ZWN0ZWQgYnl0ZVtdIHJlcXVlc3RIZWFkZXI7Ci0JCi0JLyoqCi0JICogVGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwcm90ZWN0ZWQgYnl0ZVtdIHJlc3BvbnNlSGVhZGVyOwotCi0JLyoqCi0JICogVGhlIEhUVFAgYm9keSBvZiB0aGUgcmVxdWVzdCBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwcm90ZWN0ZWQgYnl0ZVtdIHJlcXVlc3RDb250ZW50OwotCi0JLyoqCi0JICogVGhlIEhUVFAgYm9keSBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHJvdGVjdGVkIGJ5dGVbXSByZXNwb25zZUNvbnRlbnQ7Ci0KLQkvKioKLQkgKiBUaGUgdGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUuCi0JICovCi0JcHJvdGVjdGVkIERhdGUgZGF0ZSA9IG51bGw7Ci0JCi0JLyoqCi0JICogVGhlIGxvY2FsIChjbGllbnQpIHBvcnQuCi0JICovCi0JcHJvdGVjdGVkIGludCBsb2NhbFBvcnQgPSAwOwotCi0JLyoqCi0JICogVGhlIHJlbW90ZSAoc2VydmVyKSBwb3J0LgotCSAqLwotCXByb3RlY3RlZCBpbnQgcmVtb3RlUG9ydCA9IDA7Ci0JCi0JLyoqCi0JICogVGhlIHJlbW90ZSAoc2VydmVyKSBob3N0LgotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgcmVtb3RlSG9zdCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqLwotCXByb3RlY3RlZCBsb25nIHJlc3BvbnNlVGltZSA9IDA7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogQHBhcmFtIHJlcXVlc3QgYSBUQ1AvSVAgcmVxdWVzdAotCSAqLwotCVJlcXVlc3RIYW5kbGVySW1wbChSZXF1ZXN0IHJlcXVlc3QpCi0JewotCSAgaWYgKHJlcXVlc3QgIT0gbnVsbCkKLQkgIHsKLQkJdGhpcy5yZXF1ZXN0SGVhZGVyID0gcmVxdWVzdC5nZXRSZXF1ZXN0KFJlcXVlc3QuVFJBTlNQT1JUKTsKLQkJdGhpcy5yZXF1ZXN0Q29udGVudCA9IHJlcXVlc3QuZ2V0UmVxdWVzdChSZXF1ZXN0LkNPTlRFTlQpOwotCQl0aGlzLnJlc3BvbnNlSGVhZGVyID0gcmVxdWVzdC5nZXRSZXNwb25zZShSZXF1ZXN0LlRSQU5TUE9SVCk7Ci0JCXRoaXMucmVzcG9uc2VDb250ZW50ID0gcmVxdWVzdC5nZXRSZXNwb25zZShSZXF1ZXN0LkNPTlRFTlQpOwotCQl0aGlzLmRhdGUgPSByZXF1ZXN0LmdldERhdGUoKTsKLQkJdGhpcy5sb2NhbFBvcnQgPSByZXF1ZXN0LmdldExvY2FsUG9ydCgpOwotCQl0aGlzLnJlbW90ZVBvcnQgPSByZXF1ZXN0LmdldFJlbW90ZVBvcnQoKTsKLQkJdGhpcy5yZW1vdGVIb3N0ID0gcmVxdWVzdC5nZXRSZW1vdGVIb3N0KCk7Ci0JCXRoaXMucmVzcG9uc2VUaW1lID0gcmVxdWVzdC5nZXRSZXNwb25zZVRpbWUoKTsKLQkgIH0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZXF1ZXN0SGVhZGVyKCkKLQkgKi8KLQlwdWJsaWMgYnl0ZVtdIGdldFJlcXVlc3RIZWFkZXIoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZXF1ZXN0SGVhZGVyKGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0SGVhZGVyKGJ5dGVbXSByZXF1ZXN0SGVhZGVyKSAKLQl7Ci0JCXRoaXMucmVxdWVzdEhlYWRlciA9IHJlcXVlc3RIZWFkZXI7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZXNwb25zZUhlYWRlcigpCi0JICovCi0JcHVibGljIGJ5dGVbXSBnZXRSZXNwb25zZUhlYWRlcigpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVzcG9uc2VIZWFkZXI7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZXNwb25zZUhlYWRlcihieXRlW10pCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVzcG9uc2VIZWFkZXIoYnl0ZVtdIHJlc3BvbnNlSGVhZGVyKSAKLQl7Ci0JCXRoaXMucmVzcG9uc2VIZWFkZXIgPSByZXNwb25zZUhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlcXVlc3RDb250ZW50KCkKLQkgKi8KLQlwdWJsaWMgYnl0ZVtdIGdldFJlcXVlc3RDb250ZW50KCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZXF1ZXN0Q29udGVudDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlc3BvbnNlQ29udGVudChieXRlW10pCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVzcG9uc2VDb250ZW50KGJ5dGVbXSByZXNwb25zZUNvbnRlbnQpIAotCXsKLQkJdGhpcy5yZXNwb25zZUNvbnRlbnQgPSByZXNwb25zZUNvbnRlbnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZXNwb25zZUNvbnRlbnQoKQotCSAqLwotCXB1YmxpYyBieXRlW10gZ2V0UmVzcG9uc2VDb250ZW50KCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZXNwb25zZUNvbnRlbnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZXF1ZXN0Q29udGVudChieXRlW10pCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVxdWVzdENvbnRlbnQoYnl0ZVtdIHJlcXVlc3RDb250ZW50KSAKLQl7Ci0JCXRoaXMucmVxdWVzdENvbnRlbnQgPSByZXF1ZXN0Q29udGVudDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldERhdGUoKQotCSAqLwotCXB1YmxpYyBEYXRlIGdldERhdGUoKSAKLQl7Ci0JCXJldHVybiB0aGlzLmRhdGU7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXREYXRlKGphdmEudXRpbC5EYXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKSAKLQl7Ci0JCXRoaXMuZGF0ZSA9IGRhdGU7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRMb2NhbFBvcnQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TG9jYWxQb3J0KCkgCi0JewotCQlyZXR1cm4gdGhpcy5sb2NhbFBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRMb2NhbFBvcnQoaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldExvY2FsUG9ydChpbnQgbG9jYWxQb3J0KSAKLQl7Ci0JCXRoaXMubG9jYWxQb3J0ID0gbG9jYWxQb3J0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVtb3RlUG9ydCgpCi0JICovCi0JcHVibGljIGludCBnZXRSZW1vdGVQb3J0KCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZW1vdGVQb3J0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVtb3RlUG9ydChpbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVtb3RlUG9ydChpbnQgcmVtb3RlUG9ydCkgCi0JewotCQl0aGlzLnJlbW90ZVBvcnQgPSByZW1vdGVQb3J0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVtb3RlSG9zdCgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRSZW1vdGVIb3N0KCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZW1vdGVIb3N0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVtb3RlSG9zdChqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlbW90ZUhvc3QoU3RyaW5nIHJlbW90ZUhvc3QpIAotCXsKLQkJdGhpcy5yZW1vdGVIb3N0ID0gcmVtb3RlSG9zdDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlc3BvbnNlVGltZSgpCi0JICovCi0JcHVibGljIGxvbmcgZ2V0UmVzcG9uc2VUaW1lKCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZXNwb25zZVRpbWU7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZXNwb25zZVRpbWUobG9uZykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNwb25zZVRpbWUobG9uZyByZXNwb25zZVRpbWUpIAotCXsKLQkJdGhpcy5yZXNwb25zZVRpbWUgPSByZXNwb25zZVRpbWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M0MTBlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLldTSVZhbGlkYXRlQWN0aW9uOwotCi0KLS8qKgotICogQWN0aW9uIGRlbGVnYXRlIGZvciB2YWxpZGF0aW5nIGEgV1MtSSBsb2cgZmlsZS4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgLyoqCi0gICAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi0gICAqLwotICBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgICAgewotICAgICAgICBPYmplY3QgIG9iaiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgICB7Ci0gICAgICAgICAgSUZpbGUgZmlsZSA9IChJRmlsZSlvYmo7Ci0gICAgICAgICAgV1NJTWVzc2FnZVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IFdTSU1lc3NhZ2VWYWxpZGF0b3IoKTsKLSAgICAgICAgICBXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCB0cnVlKTsKLSAgICAgICAgICB2YWxpZGF0ZUFjdGlvbi5zZXRWYWxpZGF0b3IobWVzc2FnZVZhbGlkYXRvcik7Ci0gICAgICAgICAgdmFsaWRhdGVBY3Rpb24ucnVuKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYmFlNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuTW9uaXRvclVJQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ0J1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkcy5WYWxpZGF0aW9uV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5Db250YWluZXJHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci0KLS8qKgotICogQWN0aW9uIGRlbGVnYXRlIGZvciB0aGUgV1MtSSB2YWxpZGF0b3IuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSVZpZXdBY3Rpb25EZWxlZ2F0ZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9HX0ZJTEVOQU1FID0gImxvZy53c2ltc2ciOwotCi0gIC8qKgotICAgKiBUaGUgSFRUUCBwcm90b2NvbC4KLSAgICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFAgPSAiaHR0cDovLyI7Ci0gIAotICAKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHRhZyBmb3IgV1NETCBsb2NhdGlvbnMuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMID0gIj9XU0RMIjsKLSAgCi0gIC8qKgotICAgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24sIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgotICAgKi8KLSAgSVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLSAgLyoqCi0gICAqIFRoZSBsaXN0IG9mIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mIHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi0gICAqLwotICBSZXF1ZXN0W10gcmVxdWVzdFJlc3BvbnNlczsKLQotICAvKioKLSAgICogVGhlIHZpZXcgdGhhdCBwcm92aWRlcyB0aGUgY29udGV4dCBmb3IgdGhpcyBkZWxlZ2F0ZS4KLSAgICovCi0gIElWaWV3UGFydCB2aWV3OwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3QWN0aW9uRGVsZWdhdGUjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElWaWV3UGFydCB2aWV3KQotICB7Ci0gICAgdGhpcy52aWV3ID0gdmlldzsKLSAgfQotCi0gIC8qKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKQotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpCi0gICAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgICAgewotICAgICAgICB2YWxpZGF0ZShwcm9ncmVzc01vbml0b3IpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlcmF0aW9uLnJ1bihudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHZhbGlkYXRlIGFjdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IE1vbml0b3JVSUNvcmUuZ2V0UmVxdWVzdHMoKTsKLSAgICAgIFNoZWxsIHNoZWxsID0gRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKTsKLSAgICAgIGlmICgocmVxdWVzdFJlc3BvbnNlcyAhPSBudWxsKSAmJiAocmVxdWVzdFJlc3BvbnNlcy5sZW5ndGggPiAwKSkKLSAgICAgIHsKLSAgICAgICAgVmFsaWRhdGlvbldpemFyZCB2YWxpZGF0ZVdpemFyZCA9IG5ldyBWYWxpZGF0aW9uV2l6YXJkKERFRkFVTFRfTE9HX0ZJTEVOQU1FKTsKLSAgICAgICAgTGlzdCB3c2RsbG9jcyA9IG5ldyBWZWN0b3IoKTsKLQotICAgICAgIAlmb3IgKGludCBpPTA7IGk8cmVxdWVzdFJlc3BvbnNlcy5sZW5ndGg7IGkrKykKLSAgICAgIAl7Ci0gICAgICAJICBSZXF1ZXN0IHJlcXJlc3AgPSByZXF1ZXN0UmVzcG9uc2VzW2ldOwotICAgICAgCSAgU3RyaW5nIHJlbW90ZWhvc3QgPSByZXFyZXNwLmdldFJlbW90ZUhvc3QoKTsKLSAgICAgIAkgIGludCByZW1vdGVwb3J0ID0gcmVxcmVzcC5nZXRSZW1vdGVQb3J0KCk7Ci0gICAgICAJICBTdHJpbmcgcmVtb3RlbGFiZWwgPSByZXFyZXNwLmdldE5hbWUoKTsKLSAgICAgIAkgIFN0cmluZyBsb2NhdGlvbiA9IEhUVFAgKyByZW1vdGVob3N0ICsgIjoiICsgcmVtb3RlcG9ydCArIHJlbW90ZWxhYmVsICsgV1NETDsKLSAgICAgIAkgIGlmKCF3c2RsbG9jcy5jb250YWlucyhsb2NhdGlvbikpCi0gICAgICAJICB7Ci0gICAgICAJICAgIHdzZGxsb2NzLmFkZChsb2NhdGlvbik7Ci0gICAgICAJICB9Ci0gICAgICAJfQotICAgICAgCi0gICAgICAgIHZhbGlkYXRlV2l6YXJkLnNldFdTRExMb2NhdGlvbnMoKFN0cmluZ1tdKXdzZGxsb2NzLnRvQXJyYXkobmV3IFN0cmluZ1t3c2RsbG9jcy5zaXplKCldKSk7Ci0gICAgICAgIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgV2l6YXJkRGlhbG9nKHNoZWxsLCB2YWxpZGF0ZVdpemFyZCk7Ci0gICAgICAgIHdpemFyZERpYWxvZy5jcmVhdGUoKTsKLQotICAgICAgICBpbnQgcmVzdWx0ID0gd2l6YXJkRGlhbG9nLm9wZW4oKTsKLQotICAgICAgICBpZiAodmFsaWRhdGVXaXphcmQuaXNWYWxpZCgpICYmIChyZXN1bHQgIT0gb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdy5DQU5DRUwpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlIGNvbnRhaW5lciBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQgbm93Ci0gICAgICAgICAgY2hlY2tBbmRDcmVhdGVDb250YWluZXIodmFsaWRhdGVXaXphcmQuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKSk7Ci0KLSAgICAgICAgICBJRmlsZSBmaWxlID0gdmFsaWRhdGVXaXphcmQuZ2V0RmlsZSgpOwotICAgICAgICAgIExvZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBMb2dCdWlsZGVyKGZpbGUpOwotICAgICAgICAgIExvZyBsb2cgPSBidWlsZGVyLmJ1aWxkTG9nKGdldFJlcXVlc3RIYW5kbGVycyhyZXF1ZXN0UmVzcG9uc2VzKSk7Ci0KLSAgICAgICAgICBidWlsZGVyLndyaXRlTG9nKGxvZyk7Ci0gICAgICAgICAgZmlsZS5yZWZyZXNoTG9jYWwoMSwgcHJvZ3Jlc3NNb25pdG9yKTsKLSAgICAgICAgCi0gICAgICAgICAgV1NJVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJVmFsaWRhdG9yKCk7Ci0gICAgICAgICAgaWYodmFsaWRhdGVXaXphcmQuaW5jbHVkZVdTRExGaWxlKCkpCi0gICAgICAgICAgewkKLSAgICAgICAgCVN0cmluZyB3c2RsZmlsZSA9IHZhbGlkYXRlV2l6YXJkLmdldFdTRExGaWxlKCk7Ci0gICAgICAgIAlTdHJpbmcgbmFtZSA9IHZhbGlkYXRlV2l6YXJkLmdldEVsZW1lbnROYW1lKCk7Ci0gICAgICAgIAlTdHJpbmcgbmFtZXNwYWNlID0gdmFsaWRhdGVXaXphcmQuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIAlTdHJpbmcgcGFyZW50bmFtZSA9IHZhbGlkYXRlV2l6YXJkLmdldFBhcmVudE5hbWUoKTsKLSAgICAgICAgCVN0cmluZyB0eXBlID0gdmFsaWRhdGVXaXphcmQuZ2V0VHlwZSgpOwotICAgICAgICAJbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZShmaWxlLCB3c2RsZmlsZSwgbmFtZSwgbmFtZXNwYWNlLCBwYXJlbnRuYW1lLCB0eXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsJCi0gICAgICAgIAltZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBubyBhdmFpbGFibGUgbWVzc2FnZXMgdG8gdmFsaWRhdGUKLSAgICAJICBTdHJpbmcgdGl0bGUgPSBNZXNzYWdlcy5BQ1RJT05fV1NJX1ZBTElEQVRPUjsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IE1lc3NhZ2VzLklORk9fTk9fTUVTU0FHRVNfVE9fVkFMSURBVEU7Ci0gICAgCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKHNoZWxsLCB0aXRsZSwgbWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRSZXF1ZXN0SGFuZGxlcnMoUmVxdWVzdFtdIHJlcXVlc3RSZXNwb25zZXMpIAotICB7Ci0JTGlzdCByZXF1ZXN0SGFuZGxlcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IHNpemUgPSByZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aDsKLQlmb3IgKGludCBpID0gMDsgaTxzaXplOyBpKyspCi0JewotCSAgUmVxdWVzdCByZXF1ZXN0ID0gcmVxdWVzdFJlc3BvbnNlc1tpXTsKLQkgIFJlcXVlc3RIYW5kbGVyIGhhbmRsZXIgPSBuZXcgUmVxdWVzdEhhbmRsZXJJbXBsKHJlcXVlc3QpOwotCSAgcmVxdWVzdEhhbmRsZXJzLmFkZChoYW5kbGVyKTsKLQl9Ci0JcmV0dXJuIHJlcXVlc3RIYW5kbGVyczsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotICB9Ci0gCi0gIC8qKgotICAgKiBJZiB0aGUgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBzZWxlY3RlZCBJRmlsZSwgY3JlYXRlIGl0IG5vdy4KLSAgICogCi0gICAqIEBwYXJhbSBjb250YWluZXJQYXRoIFRoZSBjb250YWluZXIgZm9yIHRoZSBzZWxlY3RlZCBJRmlsZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja0FuZENyZWF0ZUNvbnRhaW5lcihJUGF0aCBjb250YWluZXJQYXRoKQotICB7Ci0gICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKGNvbnRhaW5lclBhdGgpOwotICAgIAotICAgIC8vIElmIHRoZSBjb250YWluZXIgZG9lc24ndCBleGlzdCBpbiB0aGUgd29ya3NwYWNlLCBjcmVhdGUgaXQuCi0gICAgaWYgKHJlc291cmNlID09IG51bGwpIAotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBDb250YWluZXJHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IENvbnRhaW5lckdlbmVyYXRvcihjb250YWluZXJQYXRoKTsKLSAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlQ29udGFpbmVyKG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2ljb25zL3dzaV9sb2dmaWxlX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9pY29ucy93c2lfbG9nZmlsZV93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDg1Zjg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2ljb25zL3dzaV9sb2dmaWxlX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy93c2l2YWxpZGF0aW9uLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy93c2l2YWxpZGF0aW9uLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0Zjc0NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvd3NpdmFsaWRhdGlvbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIyBDb25zdGFudHMgZm9yIHN0cmluZ3MgIAotCi0jCi0jIERpcnR5IEZpbGUgRGlhbG9nIFJlbGF0ZWQgTWVzc2FnZXMKLSMKLV9VSV9TQVZFX0RJUlRZX0ZJTEVfTUVTU0FHRSAgICAgICAgID0gQW4gb3BlbiBlZGl0b3IgY29udGFpbnMgY2hhbmdlcyB0byB0aGlzIGZpbGUgdGhhdCBoYXZlIG5vdCBiZWVuIHNhdmVkLiBEbyB5b3Ugd2FudCB0byBzYXZlIHRoZSBmaWxlIGJlZm9yZSBydW5uaW5nIHZhbGlkYXRpb24/IChJZiB5b3UgZG8gbm90IHNhdmUgdGhlIGZpbGUgdGhlIHByZXZpb3VzbHkgc2F2ZWQgdmVyc2lvbiB3aWxsIGJlIHZhbGlkYXRlZC4pCi1fVUlfU0FWRV9ESVJUWV9GSUxFX1RJVExFICAgICAgICAgICA9IFNhdmUgZmlsZT8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzOGI5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1JlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLm5hdmlnYXRvci5SZXNvdXJjZU5hdmlnYXRvcjsKLQotLyoqCi0gKiBUaGlzIHdpemFyZCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICogV1MtSSBNZXNzYWdlIExvZyBmaWxlIGZvciBwdXJwb3NlcyBvZiB2YWxpZGF0aW9uLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFZhbGlkYXRpb25XaXphcmQgZXh0ZW5kcyBXaXphcmQKLXsKLSAgLyoqCi0gICAqIFdpemFyZCBwYWdlIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSAKLSAgICogV1MtSSBNZXNzYWdlIExvZyBmaWxlIGZvciBwdXJwb3NlcyBvZiB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25XaXphcmRMb2dQYWdlIGxvZ1BhZ2U7Ci0KLSAgLyoqCi0gICAqIFdpemFyZCBwYWdlIHRvIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgbG9jYXRpb24KLSAgICogb2YgdGhlIFdTREwgZG9jdW1lbnQgZm9yIHRoZSBXZWIgc2VydmljZS4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2Ugd3NkbFBhZ2U7Ci0KLSAgLyoqCi0gICAqIFdpemFyZCBwYWdlIHRvIHNwZWNpZnkgdGhlIG5hbWUsIHR5cGUgYW5kIG5hbWVzcGFjZQotICAgKiBmb3IgdGhlIFdTREwgZWxlbWVudCB0byBhbmFseXplLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2Ugd3NkbENvbnRlbnRQYWdlOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IFdTLUkgTWVzc2FnZSBmaWxlbmFtZSBwYXNzZWQgaW4gdGhlIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZTsKLQotICAvKioKLSAgICogVGhlIHNlbGVjdGVkIFdTLUkgTWVzc2FnZSBMb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCBJRmlsZSBmaWxlOwotCi0gIC8qKgotICAgKiBUaGUgY29udGFpbmVyIGhvbGRpbmcgdGhlIHNlbGVjdGVkIFdTLUkgTWVzc2FnZSBMb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCBJUGF0aCBjb250YWluZXJGdWxsUGF0aDsKLQotICAvKioKLSAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgc2VsZWN0ZWQgZmlsZSBpcyB2YWxpZC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBlbGVtZW50bmFtZTsKLQotICAvKioKLSAgICogVGhlIG5hbWVzcGFjZSBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJlbnRuYW1lOwotCi0gIC8qKgotICAgKiBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZTsKLQotICAvKioKLSAgICogVGhlIFdTREwgZmlsZSB0byB1c2UgZm9yIHZhbGlkYXRpb247Ci0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxmaWxlOwotCi0gIC8qKgotICAgKiBUcnVlIGlmIGEgV1NETCBmaWxlIGlzIGluY2x1ZGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpbmNsdWRld3NkbGZpbGU7Ci0KLSAgCi0gIC8qKgotICAgKiBUaGlzIGxpc3Qgb2YgV1NETCBsb2NhdGlvbnMgdGhlIHVzZXIgY2FuIGNob29zZSBmcm9tLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIHdzZGxsb2NhdGlvbnMgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gZmlsZW5hbWUgRGVmYXVsdCBtZXNzYWdlIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbldpemFyZChTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgdGhpcy5zZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5WQUxJREFUSU9OX1dJWkFSRF9USVRMRSk7Ci0gICAgc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoCi0gICAgICBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NJVUlQbHVnaW4uY2xhc3MsIFJlc291cmNlLlZBTElEQVRFX1dTSV9MT0dGSUxFX1dJWikpOwotICAgIHNldE5lZWRzUHJvZ3Jlc3NNb25pdG9yKHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmQjYWRkUGFnZXMoKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUGFnZXMoKQotICB7Ci0gICAgbG9nUGFnZSA9IG5ldyBWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFJlc291cmNlTmF2aWdhdG9yU2VsZWN0aW9uKCksIGZpbGVuYW1lKTsKLSAgICB3c2RsUGFnZSA9IG5ldyBWYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRSZXNvdXJjZU5hdmlnYXRvclNlbGVjdGlvbigpKTsKLSAgICB3c2RsQ29udGVudFBhZ2UgPSBuZXcgVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFJlc291cmNlTmF2aWdhdG9yU2VsZWN0aW9uKCkpOwotICAgIGFkZFBhZ2UobG9nUGFnZSk7Ci0gICAgYWRkUGFnZSh3c2RsUGFnZSk7Ci0gICAgYWRkUGFnZSh3c2RsQ29udGVudFBhZ2UpOwotCi0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBUcnVlIGlmIGEgV1NETCBmaWxlIGlzIGluY2x1ZGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpbmNsdWRlV1NETEZpbGUoKQotICB7Ci0gICAgaWYgKCFpc1ZhbGlkKQotICAgIHsKLSAgICAgIHJldHVybiB3c2RsUGFnZS5pbmNsdWRlV1NETEZpbGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluY2x1ZGV3c2RsZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbmFtZSB0byB2YWxpZGF0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgbmFtZSB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWxlbWVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnRuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGZvciB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnROYW1lKCkKLSAgewotICAgIHJldHVybiBwYXJlbnRuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTRExGaWxlKCkKLSAgewotICAgIGlmICghaXNWYWxpZCkKLSAgICB7Ci0gICAgICByZXR1cm4gd3NkbFBhZ2UuZ2V0V1NETEZpbGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmQjZ2V0TmV4dFBhZ2Uob3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlKQotICAgKi8KLSAgcHVibGljIElXaXphcmRQYWdlIGdldE5leHRQYWdlKElXaXphcmRQYWdlIGN1cnJlbnRQYWdlKQotICB7Ci0gICAgaWYgKGN1cnJlbnRQYWdlID09IHdzZGxQYWdlKQotICAgIHsKLSAgICAgIGlmICghd3NkbFBhZ2UuaW5jbHVkZVdTRExGaWxlKCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgIFdTRExSZWFkZXIgcmVhZGVyID0gZmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICAgICAgcmVhZGVyLnJlYWRXU0RMKGdldFdTRExGaWxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBXU0RMIGZpbGUgdGhlcmUgaXMgbm8gbmV4dCBwYWdlLgotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5nZXROZXh0UGFnZShjdXJyZW50UGFnZSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3RlZCBmaWxlIGlzIGEgdmFsaWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc2VsZWN0ZWQgZmlsZSBpcyBhIHZhbGlkIFdTLUkgTWVzc2FnZSBMb2cgZmlsZW5hbWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgewotICAgIHJldHVybiBpc1ZhbGlkOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmQjcGVyZm9ybUZpbmlzaCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAgIGZpbGUgPSBsb2dQYWdlLmdldEZpbGUoKTsKLSAgICBjb250YWluZXJGdWxsUGF0aCA9IGxvZ1BhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKTsKLSAgICBpbmNsdWRld3NkbGZpbGUgPSB3c2RsUGFnZS5pbmNsdWRlV1NETEZpbGUoKTsKLSAgICB3c2RsZmlsZSA9IHdzZGxQYWdlLmdldFdTRExGaWxlKCk7Ci0gICAgZWxlbWVudG5hbWUgPSB3c2RsQ29udGVudFBhZ2UuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICBuYW1lc3BhY2UgPSB3c2RsQ29udGVudFBhZ2UuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgcGFyZW50bmFtZSA9IHdzZGxDb250ZW50UGFnZS5nZXRQYXJlbnROYW1lKCk7Ci0gICAgdHlwZSA9IHdzZGxDb250ZW50UGFnZS5nZXRUeXBlKCk7Ci0gICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZmlsZSBzZWxlY3RlZCBieSB0aGUgdXNlciBpbiB0aGUgY2hvb3NlIHBhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBmaWxlIHNlbGVjdGVkYnkgdGhlIHVzZXIgaW4gdGhlIGNob29zZSBwYWdlLgotICAgKi8KLSAgcHVibGljIElGaWxlIGdldEZpbGUoKQotICB7Ci0gICAgcmV0dXJuIGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgSVBhdGggY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgSUZpbGUuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBJUGF0aCBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBJRmlsZS4KLSAgICovCi0gIHB1YmxpYyBJUGF0aCBnZXRDb250YWluZXJGdWxsUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gY29udGFpbmVyRnVsbFBhdGg7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHNlbGVjdGlvbiBpbiB0aGUgUmVzb3VyY2UgTmF2aWdhdG9yIHZpZXcuCi0gICAqLwotICBwdWJsaWMgSVNlbGVjdGlvbiBnZXRSZXNvdXJjZU5hdmlnYXRvclNlbGVjdGlvbigpCi0gIHsKLSAgICBJVmlld1JlZmVyZW5jZSB2aWV3UGFydHNbXSA9Ci0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRWaWV3UmVmZXJlbmNlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3UGFydHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHZpZXdQYXJ0c1tpXSBpbnN0YW5jZW9mIFJlc291cmNlTmF2aWdhdG9yKQotICAgICAgewotICAgICAgICByZXR1cm4gKChSZXNvdXJjZU5hdmlnYXRvcikgdmlld1BhcnRzW2ldKS5nZXRWaWV3U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbGlzdCBvZiBXU0RMIGxvY2F0aW9ucyB0byBsZXQgdGhlIHVzZXIgY2hvb3NlIGZyb20uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbGxvY2F0aW9ucyBBIGxpc3Qgb2YgV1NETCBkb2N1bWVudCBsb2NhdGlvbnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb25zKFN0cmluZ1tdIHdzZGxsb2NhdGlvbnMpIAotICB7Ci0JdGhpcy53c2RsbG9jYXRpb25zID0gd3NkbGxvY2F0aW9uczsKLQkKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbGlzdCBvZiBXU0RMIGxvY2F0aW9ucyB0aGUgdXNlciBjYW4gY2hvb3NlIGZyb20uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIFdTREwgbG9jYXRpb25zLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldFdTRExMb2NhdGlvbnMoKQotICB7Ci0gIAlyZXR1cm4gd3NkbGxvY2F0aW9uczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRMb2dQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODhjYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLS8qKgotICogV2l6YXJkIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICogV1MtSSBNZXNzYWdlIExvZyBmaWxlIGZvciBwdXJwb3NlcyBvZiB2YWxpZGF0aW9uLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFZhbGlkYXRpb25XaXphcmRMb2dQYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZQotewotICAvKioKLSAgICogUmVjb21tZW5kZWQgZXh0ZW5zaW9uIGZvciBhIFdTLUkgTWVzc2FnZSBMb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTSV9MT0dfRVhURU5TSU9OID0gIndzaW1zZyI7Ci0gCi0gIC8qKgotICAgKiBEZWZhdWx0IFdTLUkgTWVzc2FnZSBmaWxlbmFtZSBwYXNzZWQgaW4gdGhlIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZTsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb246IHNlbGVjdGlvbiBpbiB0aGUgUmVzb3VyY2UgTmF2aWdhdG9yIHZpZXcuCi0gICAqIEBwYXJhbSBmaWxlbmFtZTogZGVmYXVsdCBtZXNzYWdlIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLCBTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgICBzdXBlcigiVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UiLCBzZWxlY3Rpb24pOwotICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLSAgICB0aGlzLnNldFRpdGxlKE1lc3NhZ2VzLkxPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfSEVBRElORyk7Ci0gICAgdGhpcy5zZXREZXNjcmlwdGlvbihNZXNzYWdlcy5MT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0VYUEwpOwotICB9Ci0KLQotICAvKiogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nUGFnZSNjcmVhdGVDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgCi0gIHsKLSAgICBzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0gICAgc3VwZXIuc2V0RmlsZU5hbWUoZmlsZW5hbWUpOwotICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZWxlY3RlZCBmaWxlLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2VsZWN0ZWQgSUZpbGUuICAKLSAgICovCi0gIHB1YmxpYyBJRmlsZSBnZXRGaWxlKCkKLSAgewotICAgIFN0cmluZyBmaWxlTmFtZSA9IGdldEZpbGVOYW1lKCk7Ci0gICAgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSAobmV3IFBhdGgoZmlsZU5hbWUpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0gICAgCi0gICAgaWYgKGZpbGVFeHRlbnNpb24gPT0gbnVsbCkKLSAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuY29uY2F0KCIuIiArIFdTSV9MT0dfRVhURU5TSU9OKTsKLSAgICAgIAotICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZmlsZU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgc2VsZWN0ZWQgZmlsZSBpcyBhIHZhbGlkIFdTLUkgTWVzc2FnZSBMb2cgZmlsZW5hbWUuCi0gICAqIAotICAgKiBTaW5jZSB0aGUgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBkb2VzIG5vdCBwcm92aWRlIGFuIGludGVyZmFjZSB0bwotICAgKiBhbGxvdyB0aGUgZmlsZSBzcGVjaWZpZWQgdG8gYWxyZWFkeSBleGlzdCAoaXQgZ2l2ZXMgYW4gZXJyb3IgdGhhdCB0aGUKLSAgICogdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGFuIG5vIHdheSBvZiBhbGxvd2luZyBpdCB0byBwYXNzKSwgYW5kIHdlIHdhbnQKLSAgICogdG8gYWxsb3cgdGhlIGZpbGUgdG8gZXhpc3QsIHNvIHRoYXQgd2UgY2FuIG92ZXJ3cml0ZSBpdCwgd2UgaGF2ZSB0bwotICAgKiBvdmVycmlkZSB0aGlzIG1ldGhvZCwgYW5kIGRvIHNvbWUgbWFnaWMgdG8gYWxsb3cgdGhpcyBjYXNlIHRvIHBhc3MuCi0gICAqCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBzZWxlY3RlZCBmaWxlIGlzIGEgdmFsaWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UjdmFsaWRhdGVQYWdlKCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIAotICB7Ci0gICAgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSAobmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkpLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICBpZiAoZmlsZUV4dGVuc2lvbiAhPSBudWxsKSAKLSAgICB7Ci0gICAgICBpZiAoZmlsZUV4dGVuc2lvbi5jb21wYXJlVG8oV1NJX0xPR19FWFRFTlNJT04pICE9IDApCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLkVSUk9SX0lOVkFMSURfTE9HX0ZJTEVfRVhURU5TSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBFc3NlbnRpYWxseSwgd2UgdGFrZSB0aGUgY29udGFpbmVyIGFuZCBjb25jYXQgdGhlIGZpbGUgdG8gaXQsIGFuZAotICAgIC8vIGNoZWNrIGlmIGl0cyBpbiB0aGUgd29ya3NwYWNlLCBpZiBpdCBpcywgdGhlbiBpdCBleGlzdHMgYW5kIHdlIGNhbiAKLSAgICAvLyBwcm9jZWVkLiBPdGhlcndpc2UsIGNvbnRpbnVlIHdpdGggdGhlIGRlZmF1bHQgdmFsaWRhdGluZy4KLSAgICBpZiAoIChnZXRDb250YWluZXJGdWxsUGF0aCgpICE9IG51bGwpICYmIChnZXRDb250YWluZXJGdWxsUGF0aCgpLmlzRW1wdHkoKSA9PSBmYWxzZSkKLSAgICAgICAgICAgJiYgKGdldEZpbGVOYW1lKCkuY29tcGFyZVRvKCIiKSAhPSAwKSkKLSAgICB7Ci0gICAgICBQYXRoIGZ1bGxQYXRoOwotICAgICAgICAgICAgCi0gICAgICBpZiAoZmlsZUV4dGVuc2lvbiAhPSBudWxsKQotICAgICAgICBmdWxsUGF0aCA9IG5ldyBQYXRoKGdldENvbnRhaW5lckZ1bGxQYXRoKCkudG9TdHJpbmcoKSArICcvJyArIGdldEZpbGVOYW1lKCkpOwotICAgICAgZWxzZQotICAgICAgICBmdWxsUGF0aCA9IG5ldyBQYXRoKGdldENvbnRhaW5lckZ1bGxQYXRoKCkudG9TdHJpbmcoKSArICcvJyArIGdldEZpbGVOYW1lKCkgKyAiLiIgKyBXU0lfTE9HX0VYVEVOU0lPTik7Ci0gICAgICAKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihmdWxsUGF0aCk7Ci0gICAgICAKLSAgICAgIHNldEVycm9yTWVzc2FnZShudWxsKTsKLSAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotICAgICAgICBzZXRNZXNzYWdlKE1lc3NhZ2VzLldBUk5JTkdfRklMRV9BTFJFQURZX0VYSVNUUyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNldE1lc3NhZ2UobnVsbCk7Ci0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIudmFsaWRhdGVQYWdlKCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2EwNTcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci0KLS8qKgotICogV2l6YXJkIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICogV1NETCBkb2N1bWVudCBmb3IgdGhlIFdlYiBzZXJ2aWNlLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HID0gImJpbmRpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUVFlQRSA9ICJwb3J0dHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKgotICAgKiBBY2Nlc3MgdG8gdGhlIGluY2x1ZGVXU0RMIGZsYWcuICAKLSAgICovCi0gIHByb3RlY3RlZCBCdXR0b24gd3NkbFBvcnRCdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gd3NkbEJpbmRpbmdCdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gd3NkbFBvcnRUeXBlQnV0dG9uOwotICBwcm90ZWN0ZWQgQnV0dG9uIHdzZGxPcGVyYXRpb25CdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gd3NkbE1lc3NhZ2VCdXR0b247Ci0KLSAgcHJvdGVjdGVkIENvbWJvIG5hbWVDb21ibzsKLSAgcHJvdGVjdGVkIFRleHQgbmFtZXNwYWNlVGV4dDsKLSAgLy9wcm90ZWN0ZWQgQ29tYm8gcGFyZW50Q29tYm87Ci0gIC8vcHJvdGVjdGVkIFRleHQgbmFtZVRleHQ7Ci0gIHByb3RlY3RlZCBUZXh0IHBhcmVudG5hbWVUZXh0OwotCi0gIHByb3RlY3RlZCBMaXN0IHBvcnRzID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3Qgb3BlcmF0aW9ucyA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IGJpbmRpbmdzID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgcG9ydHR5cGVzID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgbWVzc2FnZXMgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb246IHNlbGVjdGlvbiBpbiB0aGUgUmVzb3VyY2UgTmF2aWdhdG9yIHZpZXcuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBzdXBlcigiVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZSIpOwotICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotICAgIHRoaXMuc2V0VGl0bGUoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0hFQURJTkcpOwotICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0VYUEwpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsd2F5cyByZXR1cm5zIHRydWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BhZ2VDb21wbGV0ZSgpCi0gIHsKLSAgICBpZiAoKChWYWxpZGF0aW9uV2l6YXJkKSBnZXRXaXphcmQoKSkuaW5jbHVkZVdTRExGaWxlKCkpCi0gICAgewotICAgICAgaW50IHNlbGVjdGlvbiA9IG5hbWVDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgaWYgKHNlbGVjdGlvbiAhPSAtMSAmJiAhbmFtZUNvbWJvLmdldEl0ZW0oc2VsZWN0aW9uKS5lcXVhbHMoIiIpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKgotICAgKiBDcmVhdGVzIHRoZSB0b3AgbGV2ZWwgY29udHJvbCBmb3IgdGhpcyBwYWdlIHVuZGVyIHRoZSBnaXZlbiAKLSAgICogcGFyZW50IGNvbXBvc2l0ZS4gSW1wbGVtZW50b3JzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcKLSAgICogdGhhdCB0aGUgY3JlYXRlZCBjb250cm9sIGNhbiBiZSBhY2Nlc3NlZCB2aWEgZ2V0Q29udHJvbCAKLSAgICoKLSAgICogQHBhcmFtIHBhcmVudCAtIHRoZSBwYXJlbnQgY29tcG9zaXRlCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgYmFzZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgYmFzZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0gICAgR3JpZERhdGEgZGF0YTsKLQotICAgIC8vIGNyZWF0ZSBhIGdyb3VwCi0gICAgR3JvdXAgd3NkbEVsZW1lbnRHcm91cCA9IG5ldyBHcm91cChiYXNlLCBTV1QuU0hBRE9XX0VUQ0hFRF9JTik7Ci0gICAgd3NkbEVsZW1lbnRHcm91cC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfRUxFTUVOVCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICB3c2RsRWxlbWVudEdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICB3c2RsRWxlbWVudEdyb3VwLnNldExheW91dChsYXlvdXQpOwotCi0gICAgLy8gY3JlYXRlIGEgYmFzZSBwYW5lbCB3aXRoIDIgY29sdW1ucwotICAgIENvbXBvc2l0ZSBiYXNlUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHdzZGxFbGVtZW50R3JvdXAsIFNXVC5OT05FKTsKLSAgICBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBsYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gZmFsc2U7Ci0gICAgYmFzZVBhbmVsLnNldExheW91dChsYXlvdXQpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgYmFzZVBhbmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBjb250ZW50IGZvciBmaXJzdCBjb2x1bW4KLSAgICBjcmVhdGVXU0RMRWxlbWVudFR5cGVDb250ZW50KGJhc2VQYW5lbCk7Ci0KLSAgICAvLyBjb250ZW50IGZvciBzZWNvbmQgY29sdW1uCi0gICAgY3JlYXRlV1NETEVsZW1lbnRDb250ZW50KGJhc2VQYW5lbCk7Ci0KLSAgICBzZXRDb250cm9sKGJhc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGdyb3VwIG9mIHJhZGlvIGJ1dHRvbnMgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBXU0RMIGVsZW1lbnQuCi0gICAqIFRoZSBmaXZlIHRwZXMgYXJlOiBwb3J0LCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlLgotICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgY29udGFpbmVyLiAKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVdTRExFbGVtZW50VHlwZUNvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBhIGdyb3VwCi0gICAgR3JvdXAgd3NkbFR5cGVHcm91cCA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5TSEFET1dfRVRDSEVEX0lOKTsKLSAgICB3c2RsVHlwZUdyb3VwLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9UWVBFKTsKLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLSAgICB3c2RsVHlwZUdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICB3c2RsVHlwZUdyb3VwLnNldExheW91dChsYXlvdXQpOwotCi0gICAgd3NkbFBvcnRCdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbFBvcnRCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUKTsKLSAgICB3c2RsUG9ydEJ1dHRvbi5zZXREYXRhKCJ3c2RsUG9ydEJ1dHRvbiIpOwotICAgIHdzZGxQb3J0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICB3c2RsUG9ydEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgUG9ydEJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCi0gICAgd3NkbEJpbmRpbmdCdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbEJpbmRpbmdCdXR0b24uc2V0RGF0YSgid3NkbEJpbmRpbmdCdXR0b24iKTsKLSAgICB3c2RsQmluZGluZ0J1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX0JJTkRJTkcpOwotICAgIHdzZGxCaW5kaW5nQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgd3NkbEJpbmRpbmdCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IEJpbmRpbmdCdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsUG9ydFR5cGVCdXR0b24uc2V0RGF0YSgid3NkbFBvcnRUeXBlQnV0dG9uIik7Ci0gICAgd3NkbFBvcnRUeXBlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVF9UWVBFKTsKLSAgICB3c2RsUG9ydFR5cGVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB3c2RsUG9ydFR5cGVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFBvcnRUeXBlQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0KLSAgICB3c2RsT3BlcmF0aW9uQnV0dG9uID0gbmV3IEJ1dHRvbih3c2RsVHlwZUdyb3VwLCBTV1QuUkFESU8pOwotICAgIHdzZGxPcGVyYXRpb25CdXR0b24uc2V0RGF0YSgid3NkbE9wZXJhdGlvbkJ1dHRvbiIpOwotICAgIHdzZGxPcGVyYXRpb25CdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19PUEVSQVRJT04pOwotICAgIHdzZGxPcGVyYXRpb25CdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB3c2RsT3BlcmF0aW9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBPcGVyYXRpb25CdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQotICAgIHdzZGxNZXNzYWdlQnV0dG9uID0gbmV3IEJ1dHRvbih3c2RsVHlwZUdyb3VwLCBTV1QuUkFESU8pOwotICAgIHdzZGxNZXNzYWdlQnV0dG9uLnNldERhdGEoIndzZGxNZXNzYWdlQnV0dG9uIik7Ci0gICAgd3NkbE1lc3NhZ2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19NRVNTQUdFKTsKLSAgICB3c2RsTWVzc2FnZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHdzZGxNZXNzYWdlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBNZXNzYWdlQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgcGFuZWwgdG8gY2FwdHVyZSB0aGUgbmFtZSwgbmFtZXNwYWNlIGFuZCBwYXJlbnQgb2YgYW4KLSAgICogV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgY29udGFpbmVyLiAKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVdTRExFbGVtZW50Q29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIGEgZ3JvdXBpbmcgd2l0aCAyIGNvbHVtbnMsIG9uZSBmb3IgbGFiZWxzIGFuZCB0aGVvdGhlciBmb3IgZmllbGRzCi0gICAgQ29tcG9zaXRlIGZpZWxkQ29sdW1uID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKLSAgICBmaWVsZENvbHVtbi5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGZpZWxkQ29sdW1uLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IG5hbWUgbGFiZWwKLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChmaWVsZENvbHVtbiwgU1dULkxFRlQpOwotICAgIGxhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRSk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgbmFtZSBmaWVsZAotICAgIG5hbWVDb21ibyA9IG5ldyBDb21ibyhmaWVsZENvbHVtbiwgU1dULlJFQURfT05MWSk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBuYW1lQ29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBuYW1lQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IE5hbWVTZWxlY3Rpb25MaXN0ZW5lcigpKTsKLSAgICAvL25hbWVUZXh0ID0gbmV3IFRleHQoZmllbGRDb2x1bW4sIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICAvL2RhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICAvL2RhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgLy9kYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIC8vZGF0YS53aWR0aEhpbnQgPSA1MDsKLSAgICAvL25hbWVUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgLy9uYW1lVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgVGV4dEJveExpc3RlbmVyKCkpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBuYW1lc3BhY2UgbGFiZWwKLSAgICBsYWJlbCA9IG5ldyBMYWJlbChmaWVsZENvbHVtbiwgU1dULkxFRlQpOwotICAgIGxhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRVNQQUNFKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBuYW1lc3BhY2UgZmllbGQKLSAgICBuYW1lc3BhY2VUZXh0ID0gbmV3IFRleHQoZmllbGRDb2x1bW4sIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEud2lkdGhIaW50ID0gNTA7Ci0gICAgbmFtZXNwYWNlVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIG5hbWVzcGFjZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IFRleHRCb3hMaXN0ZW5lcigpKTsKLSAgICBuYW1lc3BhY2VUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgcGFyZW50IGxhYmVsCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoZmllbGRDb2x1bW4sIFNXVC5MRUZUKTsKLSAgICBsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX0xBQkVMX1BBUkVOVCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgcGFyZW50IGZpZWxkCi0gICAgLy8gICAgcGFyZW50Q29tYm8gPSBuZXcgQ29tYm8oZmllbGRDb2x1bW4sIFNXVC5SRUFEX09OTFkpOwotICAgIC8vICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICAvLyAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIC8vICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgLy8gICAgcGFyZW50Q29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBwYXJlbnRuYW1lVGV4dCA9IG5ldyBUZXh0KGZpZWxkQ29sdW1uLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBkYXRhLndpZHRoSGludCA9IDUwOwotICAgIHBhcmVudG5hbWVUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgcGFyZW50bmFtZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IFRleHRCb3hMaXN0ZW5lcigpKTsKLSAgICBwYXJlbnRuYW1lVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gIH0KLQotICAvKioKLSAgICogQWx3YXlzIHJldHVybiB0cnVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZW50IHdoZW4gZGVmYXVsdCBzZWxlY3Rpb24gb2NjdXJzIGluIHRoZSBjb250cm9sLgotICAgKiBAcGFyYW0gZSAtIGFuIGV2ZW50IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHt9Ci0KLSAgLyoqCi0gICAqIEhhbmRsZXMgdGhlIGluY2x1ZGVXU0RMIGNoZWNrYm94LgotICAgKiBTZW50IHdoZW4gc2VsZWN0aW9uIG9jY3VycyBpbiB0aGUgY29udHJvbC4gCi0gICAqIEBwYXJhbSBlIC0gYW4gZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7fQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbmFtZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWxlbWVudE5hbWUoKQotICB7Ci0gICAgaW50IHNlbGVjdGlvbiA9IG5hbWVDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmKHNlbGVjdGlvbiAhPSAtMSkKLSAgICB7ICAKLSAgICAgIHJldHVybiBuYW1lQ29tYm8uZ2V0SXRlbShzZWxlY3Rpb24pOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlVGV4dC5nZXRUZXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudE5hbWUoKQotICB7Ci0gICAgLy9yZXR1cm4gcGFyZW50Q29tYm8uZ2V0SXRlbShwYXJlbnRDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLSAgICByZXR1cm4gcGFyZW50bmFtZVRleHQuZ2V0VGV4dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgaWYgKHdzZGxCaW5kaW5nQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBCSU5ESU5HOwotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsTWVzc2FnZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICByZXR1cm4gTUVTU0FHRTsKLSAgICB9Ci0gICAgZWxzZSBpZiAod3NkbE9wZXJhdGlvbkJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT1BFUkFUSU9OOwotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsUG9ydEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICByZXR1cm4gUE9SVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAod3NkbFBvcnRUeXBlQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBQT1JUVFlQRTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnQoU3RyaW5nIHR5cGUsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50KQotICB7Ci0gICAgaWYgKHBvcnRzID09IG51bGwpCi0gICAgewotICAgICAgcmVzZXRFbGVtZW50cygpOwotICAgIH0KLSAgICBpZiAodHlwZS5lcXVhbHMoUE9SVCkpCi0gICAgewotICAgICAgcG9ydHMuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoT1BFUkFUSU9OKSkKLSAgICB7Ci0gICAgICBvcGVyYXRpb25zLmFkZChuZXcgV1NETEVsZW1lbnQobmFtZSwgbmFtZXNwYWNlLCBwYXJlbnQpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHNJZ25vcmVDYXNlKEJJTkRJTkcpKQotICAgIHsKLSAgICAgIGJpbmRpbmdzLmFkZChuZXcgV1NETEVsZW1lbnQobmFtZSwgbmFtZXNwYWNlLCBwYXJlbnQpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHNJZ25vcmVDYXNlKFBPUlRUWVBFKSkKLSAgICB7Ci0gICAgICBwb3J0dHlwZXMuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoTUVTU0FHRSkpCi0gICAgewotICAgICAgbWVzc2FnZXMuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0RWxlbWVudHMoKQotICB7Ci0gICAgcG9ydHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgb3BlcmF0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICBiaW5kaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBwb3J0dHlwZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgbWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgbmFtZUNvbWJvLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIGNsYXNzIFdvcmtzcGFjZUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgQnJvd3NlQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBTZWFyY2hVRERJQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLSAgfQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBmaWxlIGZpZWxkLgotICAgKi8KLSAgY2xhc3MgVGV4dEJveExpc3RlbmVyIGltcGxlbWVudHMgTW9kaWZ5TGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyI21vZGlmeVRleHQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gICAgewotICAgICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotCi0gICAgfQotCi0gIH0KLSAgcHJpdmF0ZSBjbGFzcyBXU0RMRWxlbWVudAotICB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2U7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgcGFyZW50OwotCi0gICAgcHVibGljIFdTRExFbGVtZW50KFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50KQotICAgIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gICAgewotICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICAgIHsKLSAgICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYXJlbnROYW1lKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcGFyZW50OwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nUGFnZSNzZXRWaXNpYmxlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkKLSAgewotICAgIHJlc2V0RWxlbWVudHMoKTsKLSAgICBzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOwotICAgIGlmICh2aXNpYmxlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgV1NETFJlYWRlciByZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZFbGVtID0gcmVhZGVyLnJlYWRXU0RMKCgoVmFsaWRhdGlvbldpemFyZCkgZ2V0V2l6YXJkKCkpLmdldFdTRExGaWxlKCkpOwotICAgICAgICBRTmFtZSBkZWZRTmFtZSA9IGRlZkVsZW0uZ2V0UU5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGRlZm5hbWUgPSAiIjsKLSAgICAgICAgaWYgKGRlZlFOYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZuYW1lID0gZGVmUU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZkVsZW0uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIHBvcnRzCi0gICAgICAgIE1hcCBzZXJ2bWFwID0gZGVmRWxlbS5nZXRTZXJ2aWNlcygpOwotICAgICAgICBpZiAoc2Vydm1hcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBzZXJ2cyA9IHNlcnZtYXAudmFsdWVzKCk7Ci0gICAgICAgICAgaWYgKHNlcnZzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3Igc2Vydkl0ZXIgPSBzZXJ2cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKHNlcnZJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIHNlcnZJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHNlcnZuYW1lID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAgICAgICAgIE1hcCBwb3J0bWFwID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgICAgICAgICBpZiAocG9ydG1hcCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbiBwb3J0cyA9IHBvcnRtYXAudmFsdWVzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcnRzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgcG9ydEl0ZXIgPSBwb3J0cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcnRJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBwb3J0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLlBPUlQsIG5hbWUsIG5hbWVzcGFjZSwgc2Vydm5hbWUpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBCaW5kaW5ncwotICAgICAgICBNYXAgYmluZGluZ21hcCA9IGRlZkVsZW0uZ2V0QmluZGluZ3MoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdtYXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIENvbGxlY3Rpb24gYmluZGluZ3MgPSBiaW5kaW5nbWFwLnZhbHVlcygpOwotICAgICAgICAgIGlmIChiaW5kaW5ncyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGJpbmRJdGVyID0gYmluZGluZ3MuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChiaW5kSXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBiaW5kSXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICBhZGRFbGVtZW50KFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuQklORElORywgbmFtZSwgbmFtZXNwYWNlLCBkZWZuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZWdpc3RlciB0aGUgUG9ydFR5cGVzIGFuZCBPcGVyYXRpb25zCi0gICAgICAgIE1hcCBwb3J0dHlwZW1hcCA9IGRlZkVsZW0uZ2V0UG9ydFR5cGVzKCk7Ci0gICAgICAgIGlmIChwb3J0dHlwZW1hcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBwb3J0dHlwZXMgPSBwb3J0dHlwZW1hcC52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAocG9ydHR5cGVzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgcG9ydHR5cGVJdGVyID0gcG9ydHR5cGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAocG9ydHR5cGVJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUG9ydFR5cGUgcG9ydHR5cGUgPSAoUG9ydFR5cGUpIHBvcnR0eXBlSXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBwb3J0dHlwZW5hbWUgPSBwb3J0dHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICBhZGRFbGVtZW50KFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuUE9SVFRZUEUsIHBvcnR0eXBlbmFtZSwgbmFtZXNwYWNlLCBkZWZuYW1lKTsKLQotICAgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgT3BlcmF0aW9ucwotICAgICAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0dHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAgICAgICAgIGlmIChvcGVyYXRpb25zICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJdGVyYXRvciBvcGVySXRlciA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAob3Blckl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvcGVySXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuT1BFUkFUSU9OLCBuYW1lLCBuYW1lc3BhY2UsIHBvcnR0eXBlbmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIE1hcCBtZXNzYWdlbWFwID0gZGVmRWxlbS5nZXRNZXNzYWdlcygpOwotICAgICAgICBpZiAobWVzc2FnZW1hcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBtZXNzYWdlcyA9IG1lc3NhZ2VtYXAudmFsdWVzKCk7Ci0gICAgICAgICAgaWYgKG1lc3NhZ2VzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgbWVzc0l0ZXIgPSBtZXNzYWdlcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKG1lc3NJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5NRVNTQUdFLCBuYW1lLCBuYW1lc3BhY2UsIGRlZm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgICBpbnQgbnVtRWxlbXMgPSBwb3J0cy5zaXplKCk7Ci0gICAgICAgIFdTRExFbGVtZW50W10gZWxlbXMgPSAoV1NETEVsZW1lbnRbXSkgcG9ydHMudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICAgIGlmIChpID09IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgd3NkbFBvcnRCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICB3c2RsQmluZGluZ0J1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICB3c2RsTWVzc2FnZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICB3c2RsT3BlcmF0aW9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCi0gICAgICB9Ci0gICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBUaGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZC4KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc2V0RWxlbWVudHMoKTsKLSAgICB9Ci0KLSAgfQotCi0gIGNsYXNzIFBvcnRCdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gcG9ydHMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBwb3J0cy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotICBjbGFzcyBCaW5kaW5nQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIGludCBudW1FbGVtcyA9IGJpbmRpbmdzLnNpemUoKTsKLSAgICAgIFdTRExFbGVtZW50W10gZWxlbXMgPSAoV1NETEVsZW1lbnRbXSkgYmluZGluZ3MudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gIH0KLSAgY2xhc3MgUG9ydFR5cGVCdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gcG9ydHR5cGVzLnNpemUoKTsKLSAgICAgIFdTRExFbGVtZW50W10gZWxlbXMgPSAoV1NETEVsZW1lbnRbXSkgcG9ydHR5cGVzLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICB9Ci0gIGNsYXNzIE9wZXJhdGlvbkJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBvcGVyYXRpb25zLnNpemUoKTsKLSAgICAgIFdTRExFbGVtZW50W10gZWxlbXMgPSAoV1NETEVsZW1lbnRbXSkgb3BlcmF0aW9ucy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgfQotICBjbGFzcyBNZXNzYWdlQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIGludCBudW1FbGVtcyA9IG1lc3NhZ2VzLnNpemUoKTsKLSAgICAgIFdTRExFbGVtZW50W10gZWxlbXMgPSAoV1NETEVsZW1lbnRbXSkgbWVzc2FnZXMudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gIH0KLQotICBjbGFzcyBOYW1lU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIGludCBzZWxlY3Rpb24gPSAoKENvbWJvKSBlLmdldFNvdXJjZSgpKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgU3RyaW5nIHR5cGUgPSBnZXRUeXBlKCk7Ci0gICAgICBXU0RMRWxlbWVudCBlbGVtID0gbnVsbDsKLSAgICAgIGlmICh0eXBlLmVxdWFscyhQT1JUKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgcG9ydHMuZ2V0KHNlbGVjdGlvbik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSU5ESU5HKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgYmluZGluZ3MuZ2V0KHNlbGVjdGlvbik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQT1JUVFlQRSkpCi0gICAgICB7Ci0gICAgICAgIGVsZW0gPSAoV1NETEVsZW1lbnQpIHBvcnR0eXBlcy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKE9QRVJBVElPTikpCi0gICAgICB7Ci0gICAgICAgIGVsZW0gPSAoV1NETEVsZW1lbnQpIG9wZXJhdGlvbnMuZ2V0KHNlbGVjdGlvbik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNRVNTQUdFKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgbWVzc2FnZXMuZ2V0KHNlbGVjdGlvbik7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtLmdldFBhcmVudE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRXU0RMUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNTkzMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuZGlhbG9ncy5TZWxlY3RTaW5nbGVGaWxlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIFdpemFyZCBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSAKLSAqIFdTREwgZG9jdW1lbnQgZm9yIHRoZSBXZWIgc2VydmljZS4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLQotICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gd3NkbGludmFsaWQgPSBmYWxzZTsKLSAgLyoqCi0gICAqIEFjY2VzcyB0byB0aGUgaW5jbHVkZVdTREwgZmxhZy4gIAotICAgKi8KLSAgcHJvdGVjdGVkIEJ1dHRvbiBpbmNsdWRlV1NETEJ1dHRvbjsKLQotICAvKioKLSAgICogQWNjZXNzIHRvIHRoZSB3c2RsIGRvY3VtZW50IGdyb3VwLgotICAgKi8KLSAgcHJvdGVjdGVkIEdyb3VwIGRvY3VtZW50R3JvdXA7Ci0gIHByb3RlY3RlZCBUZXh0IGRvY3VtZW50TG9jYXRpb25UZXh0OwotICBwcm90ZWN0ZWQgQ29tYm8gZmlsZUZpZWxkOwotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uOiBzZWxlY3Rpb24gaW4gdGhlIFJlc291cmNlIE5hdmlnYXRvciB2aWV3LgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBzdXBlcigiVmFsaWRhdGlvbldpemFyZFdTRExQYWdlIik7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gICAgdGhpcy5zZXRUaXRsZShNZXNzYWdlcy5XU0RMX1BBR0VfU0VMRUNUX1dTRExfRklMRU5BTUVfSEVBRElORyk7Ci0gICAgdGhpcy5zZXREZXNjcmlwdGlvbihNZXNzYWdlcy5XU0RMX1BBR0VfU0VMRUNUX1dTRExfRklMRU5BTUVfRVhQTCk7Ci0gIH0KLQotICAvKioKLSAgICogQWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUGFnZUNvbXBsZXRlKCkKLSAgewotICAgIGlmIChpbmNsdWRlV1NETEZpbGUoKSkKLSAgICB7Ci0KLSAgICAgIGlmIChmaWxlRmllbGQuZ2V0VGV4dCgpID09IG51bGwgfHwgZmlsZUZpZWxkLmdldFRleHQoKS5lcXVhbHMoIiIpIHx8IHdzZGxpbnZhbGlkKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoKLSAgICogQ3JlYXRlcyB0aGUgdG9wIGxldmVsIGNvbnRyb2wgZm9yIHRoaXMgcGFnZSB1bmRlciB0aGUgZ2l2ZW4gcGFyZW50Ci0gICAqIGNvbXBvc2l0ZS4gSW1wbGVtZW50b3JzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgY3JlYXRlZAotICAgKiBjb250cm9sIGNhbiBiZSBhY2Nlc3NlZCB2aWEgZ2V0Q29udHJvbAotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudCAtIHRoZSBwYXJlbnQgY29tcG9zaXRlCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgYmFzZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgYmFzZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0gICAgR3JpZERhdGEgZGF0YTsKLQotICAgIC8vIGFkZCBpbmNsdWRlV1NETCBmbGFnCi0gICAgaW5jbHVkZVdTRExCdXR0b24gPSBuZXcgQnV0dG9uKGJhc2UsIFNXVC5DSEVDSyk7Ci0gICAgaW5jbHVkZVdTRExCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfSU5DTFVERV9XU0RMX0JVVFRPTik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgaW5jbHVkZVdTRExCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBpbmNsdWRlV1NETEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBpbmNsdWRlV1NETEJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCi0gICAgLy8gY3JlYXRlIGEgV1NETCBkb2N1bWVudCBncm91cAotICAgIGRvY3VtZW50R3JvdXAgPSBuZXcgR3JvdXAoYmFzZSwgU1dULlNIQURPV19FVENIRURfSU4pOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZG9jdW1lbnRHcm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgZG9jdW1lbnRHcm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBkb2N1bWVudEdyb3VwLnNldFZpc2libGUoZmFsc2UpOwotCi0gICAgY3JlYXRlRG9jdW1lbnRHcm91cENvbnRlbnRzKGRvY3VtZW50R3JvdXApOwotCi0gICAgc2V0Q29udHJvbChiYXNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURvY3VtZW50R3JvdXBDb250ZW50cyhDb21wb3NpdGUgZG9jdW1lbnRHcm91cCkKLSAgewotICAgIC8vcmFkaW8gYnV0dG9ucycgY29udGFpbmVyCi0gICAgQ29tcG9zaXRlIGJhc2VQYW5lbCA9IG5ldyBDb21wb3NpdGUoZG9jdW1lbnRHcm91cCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgbGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IGZhbHNlOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgYmFzZVBhbmVsLnNldExheW91dChsYXlvdXQpOwotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgYmFzZVBhbmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICBDb21wb3NpdGUgZ3JvdXAxID0gbmV3IENvbXBvc2l0ZShiYXNlUGFuZWwsIFNXVC5OT05FKTsKLSAgICBncm91cDEuc2V0Rm9udChnZXRGb250KCkpOwotICAgIGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIGdyb3VwMS5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBncm91cDEuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIExhYmVsIGRvY3VtZW50TGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXAxLCBTV1QuTEVGVCk7Ci0gICAgZG9jdW1lbnRMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9JTkNMVURFX1dTRExfTEFCRUwpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRvY3VtZW50TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAvKioKLQkgKiBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChiYXNlUGFuZWwsIFNXVC5MRUZUKTsgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCSAqIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7IGRhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOwotCSAqIGxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JICovCi0gICAgZmlsZUZpZWxkID0gbmV3IENvbWJvKGdyb3VwMSwgU1dULkRST1BfRE9XTik7Ci0gICAgU3RyaW5nW10gd3NkbGxvY2F0aW9ucyA9ICgoVmFsaWRhdGlvbldpemFyZCkgZ2V0V2l6YXJkKCkpLmdldFdTRExMb2NhdGlvbnMoKTsKLSAgICBpZih3c2RsbG9jYXRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgaW50IG51bWxvY3MgPSB3c2RsbG9jYXRpb25zLmxlbmd0aDsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1sb2NzOyBpKyspCi0gICAgICB7Ci0gICAgICAJZmlsZUZpZWxkLmFkZCh3c2RsbG9jYXRpb25zW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBkYXRhLndpZHRoSGludCA9IDMwOwotICAgIGZpbGVGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGZpbGVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgRmlsZUZpZWxkTGlzdGVuZXIoKSk7Ci0KLSAgICBMYWJlbCB3c2RsTGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXAxLCBTV1QuTEVGVCk7Ci0gICAgd3NkbExhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX1ZBTElEX1dTRExfTEFCRUwpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRvY3VtZW50TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIGRvY3VtZW50TG9jYXRpb25UZXh0ID0gbmV3IFRleHQoZG9jdW1lbnRHcm91cCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIC8vIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICAvLyBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIC8vIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgLy8gZGF0YS53aWR0aEhpbnQgPSAzMDsKLSAgICAvLyBkb2N1bWVudExvY2F0aW9uVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgQ29tcG9zaXRlIGdyb3VwID0gbmV3IENvbXBvc2l0ZShiYXNlUGFuZWwsIFNXVC5OT05FKTsKLSAgICBncm91cC5zZXRGb250KGdldEZvbnQoKSk7Ci0gICAgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIEJ1dHRvbiB3b3Jrc3BhY2VCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0gICAgd29ya3NwYWNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX1dPUktCRU5DSF9CVVRUT04pOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHdvcmtzcGFjZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIHdvcmtzcGFjZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgV29ya3NwYWNlQnV0dG9uTGlzdGVuZXIoKSk7Ci0KLSAgICBCdXR0b24gYnJvd3NlQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlBVU0gpOwotICAgIGJyb3dzZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9CUk9XU0VfQlVUVE9OKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBicm93c2VCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBicm93c2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IEJyb3dzZUJ1dHRvbkxpc3RlbmVyKCkpOwotCi0gICAgLy8gQnV0dG9uIHNlYXJjaFVERElCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0gICAgLy8gc2VhcmNoVURESUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLigiX1VJX1dJWkFSRF9WX1NFQVJDSF9VRERJX0JVVFRPTiIpKTsKLSAgICAvLyBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgLy8gZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAvLyBzZWFyY2hVRERJQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgLy8gc2VhcmNoVURESUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VhcmNoVURESUJ1dHRvbkxpc3RlbmVyKCkpOwotCi0gICAgcmV0dXJuIGRvY3VtZW50R3JvdXA7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpbmNsdWRlV1NETEZpbGUoKQotICB7Ci0gICAgcmV0dXJuIGluY2x1ZGVXU0RMQnV0dG9uLmdldFNlbGVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gZmlsZUZpZWxkLmdldFRleHQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbHdheXMgcmV0dXJuIHRydWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlbnQgd2hlbiBkZWZhdWx0IHNlbGVjdGlvbiBvY2N1cnMgaW4gdGhlIGNvbnRyb2wuCi0gICAqIAotICAgKiBAcGFyYW0gZSAtCi0gICAqICAgICAgICAgICAgYW4gZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAge30KLQotICAvKioKLSAgICogSGFuZGxlcyB0aGUgaW5jbHVkZVdTREwgY2hlY2tib3guIFNlbnQgd2hlbiBzZWxlY3Rpb24gb2NjdXJzIGluIHRoZQotICAgKiBjb250cm9sLgotICAgKiAKLSAgICogQHBhcmFtIGUgLQotICAgKiAgICAgICAgICAgIGFuIGV2ZW50IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICAgIGlmIChlLndpZGdldCA9PSBpbmNsdWRlV1NETEJ1dHRvbikKLSAgICB7Ci0gICAgICBpZiAoaW5jbHVkZVdTRExCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50R3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnRHcm91cC5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgIH0KLSAgICAgIGdldENvbnRhaW5lcigpLnVwZGF0ZUJ1dHRvbnMoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXU0RMSW52YWxpZCgpCi0gIHsKLSAgICB3c2RsaW52YWxpZCA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgV29ya3NwYWNlQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgU2VsZWN0U2luZ2xlRmlsZURpYWxvZyBkaWFsb2cgPSBuZXcgU2VsZWN0U2luZ2xlRmlsZURpYWxvZyhnZXRTaGVsbCgpLCBzZWxlY3Rpb24sIGZhbHNlKTsKLSAgICAgIGRpYWxvZy5hZGRGaWx0ZXJFeHRlbnNpb25zKG5ldyBTdHJpbmdbXSB7ICIud3NkbCIgfSk7Ci0gICAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgICBkaWFsb2cuZ2V0U2hlbGwoKS5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9GSUxFX1NIRUxMX1RFWFQpOwotICAgICAgZGlhbG9nLnNldFRpdGxlKE1lc3NhZ2VzLldTRExfUEFHRV9GSUxFX1RJVExFKTsKLSAgICAgIGRpYWxvZy5zZXRNZXNzYWdlKE1lc3NhZ2VzLldTRExfUEFHRV9GSUxFX0RFU0NSSVBUSU9OKTsKLSAgICAgIGRpYWxvZy5zZXRUaXRsZUltYWdlKFdTSVVJUGx1Z2luLmdldFJlc291cmNlSW1hZ2UoUmVzb3VyY2UuVkFMSURBVEVfV1NJX0xPR0ZJTEVfV0laKSk7Ci0gICAgICAKLSAgICAgIGludCByZXN1bHQgPSBkaWFsb2cub3BlbigpOwotCi0gICAgICBpZiAocmVzdWx0ID09IFdpbmRvdy5PSykKLSAgICAgIHsKLSAgICAgICAgSUZpbGUgY3VycmVudElGaWxlID0gZGlhbG9nLmdldEZpbGUoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRJRmlsZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZmlsZUZpZWxkLmFkZChjdXJyZW50SUZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpLCAwKTsKLSAgICAgICAgICBmaWxlRmllbGQuc2VsZWN0KDApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIGNsYXNzIEJyb3dzZUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIEZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2coZ2V0U2hlbGwoKSk7Ci0gICAgICBkaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhuZXcgU3RyaW5nW10geyAiKi53c2RsIiB9KTsKLSAgICAgIFN0cmluZyBzZWxlY3Rpb24gPSBkaWFsb2cub3BlbigpOwotICAgICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBmaWxlRmllbGQuYWRkKHNlbGVjdGlvbiwgMCk7Ci0gICAgICAgIGZpbGVGaWVsZC5zZWxlY3QoMCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIC8vIGNsYXNzIFNlYXJjaFVERElCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIC8vIHsKLSAgLy8gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAvLyAge30KLSAgLy8KLSAgLy8gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIC8vICB7Ci0gIC8vICAgIFN0cmluZyB0aXRsZSA9ICJJbmZvcm1hdGlvbiI7Ci0gIC8vICAgIFN0cmluZyBtZXNzYWdlID0gIlRoZSBjaG9zZW4gb3BlcmF0aW9uIGlzIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlLiI7Ci0gIC8vICAgIE1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgLy8gIH0KLSAgLy99Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgZmlsZSBmaWVsZC4KLSAgICovCi0gIGNsYXNzIEZpbGVGaWVsZExpc3RlbmVyIGltcGxlbWVudHMgTW9kaWZ5TGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyI21vZGlmeVRleHQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gICAgewotICAgICAgd3NkbGludmFsaWQgPSBmYWxzZTsKLSAgICAgIGdldENvbnRhaW5lcigpLnVwZGF0ZUJ1dHRvbnMoKTsKLQotICAgIH0KLQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMTE1NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9hcGFjaGUveG1sLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJzdW4vbWlzYy9CQVNFNjREZWNvZGVyIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJzdW4vbWlzYy9CQVNFNjRFbmNvZGVyIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJzdW4vbWlzYy9DaGFyYWN0ZXJFbmNvZGVyIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJzdW4vbWlzYy9DaGFyYWN0ZXJEZWNvZGVyIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJzdW4vbmV0L3d3dy9NZXNzYWdlSGVhZGVyIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWIxOTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLXdzaS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2MGMxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDcwMzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODoyNiBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5MGI0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6MjYgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGNiNWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2k7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDUucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwyLjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjUuMCwxLjYuMCkiLAotIG9yZy51ZGRpNGo7YnVuZGxlLXZlcnNpb249IlsyLjAuNCwyLjEuMCkiLAotIG9yZy5hcGFjaGUuYXhpcztidW5kbGUtdmVyc2lvbj0iWzEuMy4wLDIuMC4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiLAotIG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYztidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIKLUltcG9ydC1QYWNrYWdlOiBjb20uaWJtLmljdS51dGlsOyB2ZXJzaW9uPSIzLjgiLAotIGNvbS5pYm0uaWN1LnRleHQ7IHZlcnNpb249IjMuOCIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZmRkN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLi4gPSBzcmMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuCi1vdXRwdXQuLiA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IGNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YTJjYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxjb21wb25lbnQgIHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2kiPjxkZXNjcmlwdGlvbiB1cmw9IiI+PC9kZXNjcmlwdGlvbj48Y29tcG9uZW50LWRlcGVuZHMgdW5yZXN0cmljdGVkPSJ0cnVlIj48L2NvbXBvbmVudC1kZXBlbmRzPjxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kiIGZyYWdtZW50PSJmYWxzZSIvPjxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkiIGZyYWdtZW50PSJmYWxzZSIvPjwvY29tcG9uZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZTk2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLV9QTFVHSU5fTkFNRSAgID0gV1NJIENvbmZvcm1hbmNlIFRvb2xzCi1fUFJPVklERVJfTkFNRSA9IEVjbGlwc2Uub3JnCi1fV1NJX1ZBTElEQVRPRV9OQU1FID0gV1MtSSBWYWxpZGF0b3IKLV9URVNUX0FTU0VSVElPTl9ET0NVTUVOVFNfTkFNRSA9IFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50cwotX1JFUE9SVF9BUlRJRkFDVF9UWVBFU19OQU1FID0gUmVwb3J0IEFydGlmYWN0IFR5cGVzCi1fVUlfV1NETF9XU0lfVkFMSURBVE9SID0gV1NETCBXUy1JIFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfVURESV9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBVRERJIFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfV1NETF9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBXU0RMVmFsaWRhdG9yCi1fVUlfV1NJX0ZSQU1FV09SS19NRVNTQUdFX1ZBTElEQVRPUiA9IFdTLUkgRnJhbWV3b3JrIE1lc3NhZ2UgVmFsaWRhdG9yCi1fVUlfV1NJX0ZSQU1FV09SS19FTlZFTE9QRV9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBFbnZlbG9wZSBWYWxpZGF0b3IKLV9VSV9XU0lfQlBfVEFEX1ZFUlNJT05TID0gV1MtSSBCYXNpYyBQcm9maWxlIFRBRCBWZXJzaW9ucwotX1VJX1dTSV9CUF9SRVBPUlRfQVJUSUZBQ1RTID0gV1MtSSBCYXNpYyBQcm9maWxlIFJlcG9ydCBBcnRpZmFjdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNlMmVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLS0+IAotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NpdmFsaWRhdG9yIiBuYW1lPSIlX1dTSV9WQUxJREFUT0VfTkFNRSIgc2NoZW1hPSJzY2hlbWEvd3NpdmFsaWRhdG9yLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InRhZHMiIG5hbWU9IiVfVEVTVF9BU1NFUlRJT05fRE9DVU1FTlRTX05BTUUiIHNjaGVtYT0ic2NoZW1hL3RhZHMuZXhzZCIvPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icmVwb3J0QXJ0aWZhY3RUeXBlcyIgbmFtZT0iJV9SRVBPUlRfQVJUSUZBQ1RfVFlQRVNfTkFNRSIgc2NoZW1hPSJzY2hlbWEvcmVwb3J0QXJ0aWZhY3RUeXBlcy5leHNkIi8+Ci0gICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZGxXU0lWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfV1NJX1ZBTElEQVRPUiIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmV4dHZhbGlkYXRvciI+Ci0gICAgICA8ZXh0dmFsaWRhdG9yCi0gICAgICAgICAgICBuYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbC5XU0RMVmFsaWRhdG9yIj4KLSAgICAgIDwvZXh0dmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJ1ZGRpVmFsaWRhdG9yIgotICAgICAgICAgICBuYW1lPSIlX1VJX1dTSV9GUkFNRVdPUktfVURESV9WQUxJREFUT1IiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLndzaXZhbGlkYXRvciI+Ci0gICAgICAgIDx3c2l2YWxpZGF0b3IKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGkuVURESVZhbGlkYXRvckltcGwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0id3NkbFZhbGlkYXRvciIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfRlJBTUVXT1JLX1dTRExfVkFMSURBVE9SIgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzaS53c2l2YWxpZGF0b3IiPgotICAgICAgICA8d3NpdmFsaWRhdG9yCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9Im1lc3NhZ2VWYWxpZGF0b3IiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0ZSQU1FV09SS19NRVNTQUdFX1ZBTElEQVRPUiIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kud3NpdmFsaWRhdG9yIj4KLSAgICAgICAgPHdzaXZhbGlkYXRvcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZS5NZXNzYWdlVmFsaWRhdG9ySW1wbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJlbnZlbG9wZVZhbGlkYXRvciIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfRlJBTUVXT1JLX0VOVkVMT1BFX1ZBTElEQVRPUiIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kud3NpdmFsaWRhdG9yIj4KLSAgICAgICAgPHdzaXZhbGlkYXRvcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuRW52ZWxvcGVWYWxpZGF0b3JJbXBsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9ImJwVGFkcyIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfQlBfVEFEUyIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kudGFkcyI+Ci0gICAgICAgIDx0YWQKLSAgICAgICAgICAgbmFtZT0iQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMiCi0gICAgICAgICAgIHZlcnNpb249IjEuMS4wIi8+Ci0gICAgICAgIDx0YWQKLSAgICAgICAgICAgbmFtZT0iQmFzaWMgUHJvZmlsZSAxLjEgVGVzdCBBc3NlcnRpb25zIgotICAgICAgICAgICB2ZXJzaW9uPSIxLjEuMCIvPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IlNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdKSBUZXN0IEFzc2VydGlvbnMiCi0gICAgICAgICAgIHZlcnNpb249IjEuMC4wIi8+Ci0gICAgICAgIDx0YWQKLSAgICAgICAgICAgbmFtZT0iQXR0YWNobWVudHMgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdIGFuZCBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0pIFRlc3QgQXNzZXJ0aW9ucyIKLSAgICAgICAgICAgdmVyc2lvbj0iMS4wLjAiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0iYnBSZXBvcnRBcnRpZmFjdHMiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0JQX1JFUE9SVF9BUlRJRkFDVFMiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLnJlcG9ydEFydGlmYWN0VHlwZXMiPgotICAgICAgICA8cmVwb3J0QXJ0aWZhY3RUeXBlCi0gICAgICAgICAgIGFydGlmYWN0VHlwZT0ibWVzc2FnZSIvPgotICAgPC9leHRlbnNpb24+IAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvcmVwb3J0QXJ0aWZhY3RUeXBlcy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmIxMjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvcmVwb3J0QXJ0aWZhY3RUeXBlcy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2kiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2kiIGlkPSJyZXBvcnRBcnRpZmFjdFR5cGVzIiBuYW1lPSJSZXBvcnQgQXJ0aWZhY3QgVHlwZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHJlcG9ydCBhcnRpZmFjdCB0eXBlIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byBkZW5vdGUgYXJ0aWZhY3QgdHlwZXMgdGhhdCBzaG91bGQgYmUgb3V0cHV0IHRvIHRoZSBsb2cgZmlsZS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icmVwb3J0QXJ0aWZhY3RUeXBlIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InJlcG9ydEFydGlmYWN0VHlwZSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFydGlmYWN0VHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgV1RQIDIuMAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSByZXBvcnQgYXJ0aWZhY3QgdHlwZSBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotJmx0O2V4dGVuc2lvbgotICAgICAgICBpZD0mcXVvdDticFJlcG9ydEFydGlmYWN0cyZxdW90OwotICAgICAgICBuYW1lPSZxdW90OyVfVUlfV1NJX0JQX1JFUE9SVF9BUlRJRkFDVFMmcXVvdDsKLSAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5yZXBvcnRBcnRpZmFjdHMmcXVvdDsmZ3Q7Ci0gICAgICZsdDtyZXBvcnRBcnRpZmFjdFR5cGUKLSAgICAgICAgYXJ0aWZhY3RUeXBlPSZxdW90O21lc3NhZ2UmcXVvdDsvJmd0OwotJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBBUEkgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBpbXBsZW1lbnRhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBleHRlbnNpb24gcG9pbnQuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3RhZHMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvdGFkcy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGFiZmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvdGFkcy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2kiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2kiIGlkPSJ0YWRzIiBuYW1lPSJUZXN0IEFzc2VydGlvbiBEb2N1bWVudHMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHRhZHMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIGRlbm90ZSBhZGRpdGlvbmFsIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50cyB0aGF0IHRoZXkgY2FuIGhhbmRsZS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ0YWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idGFkIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFdUUCAyLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgVEFEIHZlcnNpb24gY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSZsdDtleHRlbnNpb24KLSAgICAgICAgaWQ9JnF1b3Q7YnBUYWRWZXJzaW9ucyZxdW90OwotICAgICAgICBuYW1lPSZxdW90OyVfVUlfV1NJX0JQX1RBRF9WRVJTSU9OUyZxdW90OwotICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NpLnRhZF92ZXJzaW9ucyZxdW90OyZndDsKLSAgICAgJmx0O3RhZAotICAgICAgICBuYW1lPSZxdW90O0Jhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zJnF1b3Q7Ci0gICAgICAgIHZlcnNpb249JnF1b3Q7MS4xLjAmcXVvdDsvJmd0OwotJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBBUEkgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBpbXBsZW1lbnRhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBleHRlbnNpb24gcG9pbnQuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3dzaXZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS93c2l2YWxpZGF0b3IuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4MDU5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3dzaXZhbGlkYXRvci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImJzcC5vcmcuZWNsaXBzZS53c3Qud3NpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJic3Aub3JnLmVjbGlwc2Uud3N0LndzaSIgaWQ9IndzaXZhbGlkYXRvciIgbmFtZT0iV1MtSSBWYWxpZGF0b3IiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFdTLUkgVmFsaWRhdG9yIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byBjb250cmlidXRlIGEgdmFsaWRhdG9yIHRoYXQgY2FuIHZhbGlkYXRlIGRpZmZlcmVudCBXUy1JIFByb2ZpbGVzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIChubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUpCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndzaXZhbGlkYXRvciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3c2l2YWxpZGF0b3IiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIChubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUpCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3IiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgV1RQIDIuMAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBXUy1JIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotJmx0O2V4dGVuc2lvbgotICAgICAgICBpZD0mcXVvdDttZXNzYWdlVmFsaWRhdG9yJnF1b3Q7Ci0gICAgICAgIG5hbWU9JnF1b3Q7JV9VSV9XU0lfRlJBTUVXT1JLX01FU1NBR0VfVkFMSURBVE9SJnF1b3Q7Ci0gICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2kudmFsaWRhdG9yJnF1b3Q7Jmd0OwotICAgICAmbHQ7d3NpX3ZhbGlkYXRvcgotICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlLk1lc3NhZ2VWYWxpZGF0b3JJbXBsJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2NvZGUmZ3Q7Ci1vcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlLk1lc3NhZ2VWYWxpZGF0b3JJbXBsCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyBXUy1JIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBCYXNpYyBQcm9maWxlIHZhbGlkYXRpb24gb2YgbWVzc2FnZXMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJUHJlZmVyZW5jZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGI4ZDIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbDsKLQotLyoqCi0gKiBXUy1JIHRlc3QgdG9vbHMgcHJvcGVydHkuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFdTSVByZWZlcmVuY2VzCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgY29tcGxpYW5jZUxldmVsID0gIiI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFkZmlsZSA9ICIiOwotICAKLSAgLyoqCi0gICAqICBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0lQcmVmZXJlbmNlcygpCi0gIHsKLQljb21wbGlhbmNlTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSTsKLQl0YWRmaWxlID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5ERUZBVUxUX0FTU0VSVElPTl9GSUxFOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgV1MtSSBjb21wbGlhbmNlIGxldmVsLgotICAgKiBAcmV0dXJuIHRoZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwuCi0gICAqIEBzZWUgI3NldENvbXBsaWFuY2VMZXZlbAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb21wbGlhbmNlTGV2ZWwoKQotICB7Ci0gICAgcmV0dXJuIGNvbXBsaWFuY2VMZXZlbDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIFdTLUkgY29tcGxpYW5jZSBsZXZlbC4KLSAgICogQHBhcmFtIGNvbXBsaWFuY2UgdGhlIFdTLUkgY29tcGxpYW5jZSBsZXZlbC4KLSAgICogQHNlZSAjZ2V0Q29tcGxpYW5jZUxldmVsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21wbGlhbmNlTGV2ZWwoU3RyaW5nIGNvbXBsaWFuY2UpCi0gIHsKLSAgICB0aGlzLmNvbXBsaWFuY2VMZXZlbCA9IGNvbXBsaWFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIEJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIGZpbGUuCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAc2VlICNzZXRUQURGaWxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRBREZpbGUoKQotICB7Ci0gICAgcmV0dXJuIHRhZGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMgZmlsZS4KLSAgICogQHBhcmFtIGZpbGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAc2VlICNnZXRUQURGaWxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUQURGaWxlKFN0cmluZyBmaWxlKQotICB7Ci0gICAgdGhpcy50YWRmaWxlID0gZmlsZTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmFjNjYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotLyoqCi0gKiBXUy1JIHRlc3QgdG9vbCBwcm9wZXJ0aWVzIHNwZWNpZmljIGZvciBFY2xpcHNlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMgZXh0ZW5kcyBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzCi17Ci0gLyoqCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXMjY2hlY2tXU0lQcmVmZXJlbmNlcyhqYXZhLmxhbmcuU3RyaW5nKQotICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVByZWZlcmVuY2VzIGNoZWNrV1NJUHJlZmVyZW5jZXMoU3RyaW5nIGZpbGV1cmkpCi0gIHsKLQkvLyBDYWNoZSB0aGUgV1MtSSB0YWRzLgotCWNhY2hlVEFERmlsZXMoKTsKLQkKLSAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICAgIC8vIFJlbW92ZSBmaWxlOiBhbmQgYW55IHNsYXNoZXMgZnJvbSB0aGUgZmlsZXVyaS4gCi0gICAgLy8gRWNsaXBzZSdzIHJlc29sdXRpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHN0YXJ0IHdpdGggdGhlIGRyaXZlLgotICAgIFN0cmluZyB1cmlTdHIgPSB0cmltVVJJKGZpbGV1cmkpOwotCi0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgQVBjb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCBTU0JQY29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICAKLSAgICBJRmlsZVtdIGZpbGVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kRmlsZXNGb3JMb2NhdGlvbihuZXcgUGF0aCh1cmlTdHIpKTsKLSAgICBpZiAoZmlsZXMgIT0gbnVsbCAmJiBmaWxlcy5sZW5ndGggPT0gMSkKLSAgICB7Ci0gICAgICAvL2NoZWNrIHByb2plY3QgbGV2ZWwgY29tcGxpYW5jZQotICAgICAgSVByb2plY3QgcHJvamVjdCA9IGZpbGVzWzBdLmdldFByb2plY3QoKTsKLSAgICAgIAotICAgICAgaWYgKEFQY29udGV4dC5wcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgICB9IAotICAgICAgZWxzZSBpZiAoQVBjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNTQlBjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoU1NCUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU1NCUGNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoREVGQVVMVF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSBjYW4ndCBvYnRhaW4gdGhlIHByb2plY3QgcHJlZmVyZW5jZSB1c2UgdGhlIGdsb2JhbCBwcmVmZXJlbmNlLgotICAgICAgU3RyaW5nIEFQbGV2ZWwgPSBBUGNvbnRleHQuZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKTsKLSAgICAgIFN0cmluZyBTU0JQbGV2ZWwgPSBTU0JQY29udGV4dC5nZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpOwotICAgICAgaWYoQVBsZXZlbC5lcXVhbHMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShBUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZihBUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgIH0KLSAgICAgaWYoU1NCUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpKQotICAgICB7Ci0gICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgICAgfQotICAgICBlbHNlIGlmKFNTQlBsZXZlbC5lcXVhbHMoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKSkKLSAgICAgewotICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoREVGQVVMVF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmZXJlbmNlczsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGNhY2hlVEFERmlsZXMoKQotICB7Ci0JICBTdHJpbmcgcmVzdWx0QVAgPSBjYWNoZUZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotCSAgaWYocmVzdWx0QVAgIT0gbnVsbCkKLQkgIHsKLQkJICBBUF9BU1NFUlRJT05fRklMRSA9IHJlc3VsdEFQOwotCSAgfQotCSAgCi0JICBTdHJpbmcgcmVzdWx0U1NCUCA9IGNhY2hlRmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLQkgIGlmKHJlc3VsdFNTQlAgIT0gbnVsbCkKLQkgIHsKLQkJICBTU0JQX0FTU0VSVElPTl9GSUxFID0gcmVzdWx0U1NCUDsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgY2FjaGVGaWxlKFN0cmluZyB1cmkpCi0gIHsKLQkgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gZ2V0VVJJUmVzb2x2ZXIoKTsKLQkgIFN0cmluZyByZXNvbHZlZFVyaSA9IHJlc29sdmVyLnJlc29sdmUoIiIsIG51bGwsIHVyaSk7Ci0JICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oIiIsIG51bGwsIHJlc29sdmVkVXJpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIHRvIHVzZSBmb3IgV1MtSSB2YWxpZGFpdG9uLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlIGZvciBXUy1JIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkKLSAgewotCSAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTBkYWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotCi0vKioKLSAqIFRoZSBXUy1JIHRlc3QgdG9vbHMgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByaXZhdGUgc3RhdGljIFBsdWdpbiBpbnN0YW5jZTsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBQTFVHSU5fUFJPUEVSVElFUyA9ICJ3c2l2YWxpZGF0ZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NpIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX0VYVF9JRCA9IFBMVUdJTl9JRCArICIud3NpdmFsaWRhdG9yIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX1ZFUlNJT05fRVhUX0lEID0gUExVR0lOX0lEICsgIi50YWRzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX0FSVElGQUNUX1RZUEVTX0VYVF9JRCA9IFBMVUdJTl9JRCArICIucmVwb3J0QXJ0aWZhY3RUeXBlcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UQURfTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1RBRF9WRVJTSU9OID0gInZlcnNpb24iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQVJUSUZBQ1RfVFlQRSA9ICJhcnRpZmFjdFR5cGUiOwotCi0gIC8qIEhvbGRzIHZhbGlkYXRvcnMgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gIExhenkgaW5pdGlhbGl6ZWQgaW4KLSAgICogY29tcHV0ZVZhbGlkYXRvcnMoKS4gICovCi0gIHByaXZhdGUgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3JzW107Ci0KLSAgLyogSG9sZHMgYXJyYXlzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgVGVzdCBBc3NlcnRpb24gZG9jdW1lbnQgKFRBRCkKLSAgICogdmVyc2lvbnMgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gIEVhY2ggYXJyYXkgaGFzIHR3byBlbGVtZW50czoKLSAgICogICAwOiB0aGUgVEFEIG5hbWUKLSAgICogICAxOiB0aGUgVEFEIHZlcnNpb24gc3RyaW5nCi0gICAqIExhenkgaW5pdGlhbGl6ZWQgaW4gY29tcHV0ZVRBRFZlcnNpb25zKCkuICAqLwotICBwcml2YXRlIFN0cmluZyB0YWRWZXJzaW9uc1tdW107Ci0KLSAgLyogSG9sZHMgYXJ0aWZhY3QgdHlwZSBuYW1lcyBmb3IgcmVwb3J0aW5nIHJlYWQgZnJvbSB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuCi0gICAqIExhenkgaW5pdGlhbGl6ZWQgaW4gZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpLiAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVwb3J0QXJ0aWZhY3RUeXBlc1tdOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3Igd3NpVGVzdFRvb2xzUGx1Z2luLgotICAgKiBAcGFyYW0gZGVzY3JpcHRvciBhbiBJUGx1Z2luRGVzY3JpcHRvciBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NJVGVzdFRvb2xzUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotCi0gICAgLy8gc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeQotICAgV1NJVGVzdFRvb2xzUHJvcGVydGllcy5zZXRFY2xpcHNlQ29udGV4dCh0cnVlKTsKLSAgIC8vcmVzb3VyY2VidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUExVR0lOX1BST1BFUlRJRVMpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRJbnN0YW5jZS4KLSAgICogQHJldHVybiBBYnN0cmFjdFVJUGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAgLyoqCi0gICAqIE1ldGhvZCBnZXRQbHVnaW4uCi0gICAqIEByZXR1cm4gV1NJVG9vbHNVdGlsUGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVRlc3RUb29sc1BsdWdpbiBnZXRQbHVnaW4oKQotICB7Ci0gICAgcmV0dXJuIChXU0lUZXN0VG9vbHNQbHVnaW4pIGluc3RhbmNlOwotICB9Ci0KLSAgLyogQ29tcHV0ZXMgdGhlIGxpc3Qgb2YgdmFsaWRhdG9ycyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuICovCi0gIHByaXZhdGUgQmFzZVZhbGlkYXRvcltdIGNvbXB1dGVWYWxpZGF0b3JzKCkgewotICAgICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIElFeHRlbnNpb25Qb2ludCBleHRlbnNpb25Qb2ludCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KAotICAgICAgICAgICAgICBWQUxJREFUT1JfRVhUX0lEKTsKLSAgICAgIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAvKiBPbmx5IG9uZSB2YWxpZGF0b3IgcGVyIGV4dGVuc2lvbiBwb2ludCAqLwotICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCB2YWxpZGF0b3JFbGVtZW50ID0gZXh0ZW5zaW9uc1tpXS4KLSAgICAgICAgICAgICAgICAgIGdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpWzBdOwotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICB2YWxpZGF0b3IgPSAoQmFzZVZhbGlkYXRvcikgdmFsaWRhdG9yRWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEFUVF9DTEFTUyk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVzdWx0cy5hZGQodmFsaWRhdG9yKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAoQmFzZVZhbGlkYXRvcltdKSByZXN1bHRzLnRvQXJyYXkobmV3IEJhc2VWYWxpZGF0b3JbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYWxsIHZhbGlkYXRvcnMgZm91bmQgaW4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGV4dGVuc2lvbiBwb2ludHMKLSAgICogb3JnLmVjbGlwc2Uud3N0LndzaS52YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGVzZSB2YWxpZGF0b3JzCi0gICAqLwotICBwdWJsaWMgQmFzZVZhbGlkYXRvcltdIGdldEJhc2VWYWxpZGF0b3JzKCkgCi0gIHsKLQlpZiAodmFsaWRhdG9ycyA9PSBudWxsKQotCSAgdmFsaWRhdG9ycyA9IGNvbXB1dGVWYWxpZGF0b3JzKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRvcnM7ICAKLSAgfQotCi0gIC8qKgotICAgKiBTY2FuIGFsbCB2YWxpZGF0b3JzIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSBmb3Igc3VwcG9ydGVkIGFydGlmYWN0Ci0gICAqIHR5cGVzLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFydGlmYWN0IHR5cGUgbmFtZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0QXJ0aWZhY3RUeXBlcygpIHsKLSAgICAgIGlmICh2YWxpZGF0b3JzID09IG51bGwpCi0gICAgICAgICBnZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgU3RyaW5nIGFydGlmYWN0VHlwZXNbXSA9IG5ldyBTdHJpbmdbdmFsaWRhdG9ycy5sZW5ndGhdOwotICAgICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgYXJ0aWZhY3RUeXBlc1tpXSA9IHZhbGlkYXRvcnNbaV0uZ2V0QXJ0aWZhY3RUeXBlKCk7Ci0gICAgICByZXR1cm4gYXJ0aWZhY3RUeXBlczsKLSAgfQotICAKLSAgLyogQ29tcHV0ZXMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIFRBRCB2ZXJzaW9ucyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gCi0gICAqIHJlZ2lzdHJ5LiAgU2VlIGNvbW1lbnQgZm9yIHRhZFZlcnNpb25zIGluc3QgdmFyIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQotICAgKiByZXR1cm4gdHlwZS4gKi8KLSAgcHJpdmF0ZSBTdHJpbmdbXVtdIGNvbXB1dGVUQURWZXJzaW9ucygpIHsKLSAgICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgICBJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludCgKLSAgICAgICAgICAgICAgVEFEX1ZFUlNJT05fRVhUX0lEKTsKLSAgICAgIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLQotICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCB2ZXJzaW9uRWxlbWVudHNbXSA9IGV4dGVuc2lvbnNbaV0uCi0gICAgICAgICAgICAgICAgICBnZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZlcnNpb25FbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICBTdHJpbmcgbmFtZVZlcnNpb25bXSA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICAgICAgICAgIG5hbWVWZXJzaW9uWzBdID0gdmVyc2lvbkVsZW1lbnRzW2pdLmdldEF0dHJpYnV0ZShBVFRfVEFEX05BTUUpOwotICAgICAgICAgICAgICBuYW1lVmVyc2lvblsxXSA9IHZlcnNpb25FbGVtZW50c1tqXS5nZXRBdHRyaWJ1dGUoQVRUX1RBRF9WRVJTSU9OKTsKLSAgICAgICAgICAgICAgcmVzdWx0cy5hZGQobmFtZVZlcnNpb24pOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiAoU3RyaW5nW11bXSkgcmVzdWx0cy50b0FycmF5KG5ldyBTdHJpbmdbMF1bMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYWxsIFRBRCB2ZXJzaW9ucyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkgZXh0ZW5zaW9uIHBvaW50cwotICAgKiBvcmcuZWNsaXBzZS53c3Qud3NpLnRhZF92ZXJzaW9ucy4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgYSB0d28gZWxlbWVudCBhcnJheXMgdGhhdCBkZXNjcmliZXMKLSAgICogb25lIFRBRCB2ZXJzaW9uOgotICAgKiAgIGVsZW1lbnQgMDogdGhlIFRBRCBuYW1lCi0gICAqICAgZWxlbWVudCAxOiB0aGUgVEFEIHZlcnNpb24gc3RyaW5nCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW11bXSBnZXRBbGxUQURWZXJzaW9ucygpIAotICB7Ci0JaWYgKHRhZFZlcnNpb25zID09IG51bGwpCi0JICB0YWRWZXJzaW9ucyA9IGNvbXB1dGVUQURWZXJzaW9ucygpOwotICAgIHJldHVybiB0YWRWZXJzaW9uczsgIAotICB9Ci0gIAotICAvKiBDb21wdXRlcyB0aGUgbGlzdCBvZiBhcnRpZmFjdCB0eXBlcyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuICovCi0gIHByaXZhdGUgU3RyaW5nW10gY29tcHV0ZVJlcG9ydEFydGlmYWN0VHlwZXMoKSAKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IGV4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUkVQT1JUX0FSVElGQUNUX1RZUEVTX0VYVF9JRCk7Ci0gICAgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0gICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgcmVwb3J0QXJ0aWZhY3RFbGVtZW50c1tdID0gZXh0ZW5zaW9uc1tpXS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwb3J0QXJ0aWZhY3RFbGVtZW50cy5sZW5ndGg7IGorKykgCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZXBvcnRBcnRpZmFjdCA9IHJlcG9ydEFydGlmYWN0RWxlbWVudHNbal0uZ2V0QXR0cmlidXRlKEFUVF9BUlRJRkFDVF9UWVBFKTsKLSAgICAgICAgcmVzdWx0cy5hZGQocmVwb3J0QXJ0aWZhY3QpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZ1tdKSByZXN1bHRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGaW5kIGFsbCByZXBvcnQgYXJ0aWZhY3QgdHlwZXMgdGFncyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkKLSAgICogZXh0ZW5zaW9uIHBvaW50cyBvcmcuZWNsaXBzZS53c3Qud3NpLnJlcG9ydEFydGlmYWN0VHlwZXMuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGVzZSBTdHJpbmdzCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpIAotICB7Ci0gICAgaWYgKHJlcG9ydEFydGlmYWN0VHlwZXMgPT0gbnVsbCkKLSAgICAgICAgcmVwb3J0QXJ0aWZhY3RUeXBlcyA9IGNvbXB1dGVSZXBvcnRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgcmV0dXJuIHJlcG9ydEFydGlmYWN0VHlwZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzAzMzQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXI7Ci0KLS8qKgotICogV1MtSSB0ZXN0IHRvb2xzIHByb3BlcnR5LgotICovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzUHJvcGVydGllcwotewotICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBpbnN0YWxsVVJMID0gIiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHRhZGZpbGUgPSAiIjsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBzY2hlbWFEaXIgPSAiY29tbW9uL3NjaGVtYXMvIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU1NCUF9BU1NFUlRJT05fRklMRSA9ICJodHRwOi8vd3d3LndzLWkub3JnL1Rlc3RpbmcvVG9vbHMvMjAwNS8wMS9TU0JQMTBfQlAxMV9UQURfMS0wLnhtbCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFQX0FTU0VSVElPTl9GSUxFID0gImh0dHA6Ly93d3cud3MtaS5vcmcvVGVzdGluZy9Ub29scy8yMDA0LzEyL0FQMTBfQlAxMV9TU0JQMTBfVEFELnhtbCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfQVNTRVJUSU9OX0ZJTEUgPSBBUF9BU1NFUlRJT05fRklMRTsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUT1BfTk9OX1dTSSA9ICIwIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0FSTl9OT05fV1NJID0gIjEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJR05PUkVfTk9OX1dTSSA9ICIyIjsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBlY2xpcHNlQ29udGV4dCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgc3RhdGljIE1hcCB1cmlUb0Fzc2VydGlvbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotICBwcm90ZWN0ZWQgc3RhdGljIERvY3VtZW50RmFjdG9yeSBkb2N1bWVudEZhY3RvcnkgPSBudWxsOwotCi0gIC8qKgotICAgKiAgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NJVGVzdFRvb2xzUHJvcGVydGllcygpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RWNsaXBzZUNvbnRleHQoYm9vbGVhbiBlY2xpcHNlQWN0aXZlKQotICB7Ci0gICAgZWNsaXBzZUNvbnRleHQgPSBlY2xpcHNlQWN0aXZlOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0RWNsaXBzZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGVjbGlwc2VDb250ZXh0OwotICB9Ci0gIAotICAvKioKLSAgICogQ2hlY2tzIHRoZSBXUy1JIHByZWZlcmVuY2VzIGZvciB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmV0dXJuIHRoZW0gaW4gYQotICAgKiBXU0lQcmVmZXJlbmNlcyBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZXVyaSBUaGUgZmlsZSBVUkkgdG8gY2hlY2sgdGhlIFdTLUkgcHJlZmVyZW5jZXMgZm9yLgotICAgKiBAcmV0dXJuIEEgV1NJUHJlZmVyZW5jZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByZWZlcmVuY2UgZm9yIHRoaXMgZmlsZSBVUkkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVByZWZlcmVuY2VzIGNoZWNrV1NJUHJlZmVyZW5jZXMoU3RyaW5nIGZpbGV1cmkpCi0gIHsKLSAgCXJldHVybiBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBsb2NhdGVkIGF0IHRoZSBnaXZlbiBVUkkuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25zVVJJICB0aGUgbG9jYXRpb24gb2YgdGhlIFRBRC4KLSAgICogQHJldHVybiB0aGUgcHJvZmlsZSBhc3NlcnRpb25zIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIFVSSS4KLSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBQcm9maWxlQXNzZXJ0aW9ucyBnZXRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcgYXNzZXJ0aW9uc1VSSSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JIFByb2ZpbGVBc3NlcnRpb25zIHJlc3VsdCA9IG51bGw7Ci0JIGlmIChhc3NlcnRpb25zVVJJICE9IG51bGwpCi0JIHsKLQkgICB0cnkKLQkgICB7Ci0JICAgICBpZiAodXJpVG9Bc3NlcnRpb25zTWFwLmNvbnRhaW5zS2V5KGFzc2VydGlvbnNVUkkpKQotCQkgICByZXN1bHQgPSAoUHJvZmlsZUFzc2VydGlvbnMpdXJpVG9Bc3NlcnRpb25zTWFwLmdldChhc3NlcnRpb25zVVJJKTsKLQkgICAgIGVsc2UKLQkgICAgIHsKLQkgICAgICAgLy8gUmVhZCBwcm9maWxlIGFzc2VydGlvbnMKLQkgICAgICAgaWYgKGRvY3VtZW50RmFjdG9yeSA9PSBudWxsKQotCSAgICAJICAgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JICAgICAgIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIHByb2ZpbGVBc3NlcnRpb25zUmVhZGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVyKCk7Ci0JICAgICAgIHJlc3VsdCA9IHByb2ZpbGVBc3NlcnRpb25zUmVhZGVyLnJlYWRQcm9maWxlQXNzZXJ0aW9ucyhhc3NlcnRpb25zVVJJKTsKLSAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICB7Ci0gICAgICAgIAkgdXJpVG9Bc3NlcnRpb25zTWFwLnB1dChhc3NlcnRpb25zVVJJLCByZXN1bHQpOwotICAgICAgICAgICB9Ci0JICAgICB9Ci0JICAgfQotCSAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgICB7Ci0JCSByZXN1bHQgPSBudWxsOwotCSAgIH0KLQkgfQotCSByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlIGZpbGU6IGFuZCBhbnkgc2xhc2hlcyBmcm9tIHRoZSBmaWxldXJpLiAKLSAgICogRWNsaXBzZSdzIHJlc29sdXRpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHN0YXJ0IHdpdGggdGhlIGRyaXZlLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgdHJpbVVSSShTdHJpbmcgZmlsZXVyaSkKLSAgewotICAJU3RyaW5nIHVyaVN0ciA9IGZpbGV1cmk7Ci0gIAkKLSAgICBpZihmaWxldXJpLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgewotICAgICAgdXJpU3RyID0gZmlsZXVyaS5zdWJzdHJpbmcoNSk7Ci0gICAgfQotICAgIHdoaWxlKHVyaVN0ci5zdGFydHNXaXRoKCIvIikgfHwgdXJpU3RyLnN0YXJ0c1dpdGgoIlxcIikpCi0gICAgewotICAgICAgdXJpU3RyID0gdXJpU3RyLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVyaVN0cjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzBkM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL01lc3NhZ2VBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETFJlZmVyZW5jZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRmFpbHVyZURldGFpbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlJlcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotCi0vKioKLSAqIE1lc3NhZ2VBbmFseXplcgotICogCi0gKiBBIGNsYXNzIHRoYXQgYWxsb3dzIHNpbXBsZSBhY2Nlc3MgdG8gdGhlIFdTLUkgVGVzdCBUb29scyBpbiBvcmRlciB0byBhbmFseXplCi0gKiBtZXNzYWdlcyBpbiBhIGxvZyBmaWxlLgotICovCi0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlQW5hbHl6ZXIKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy53c2kudGVzdC50b29scyI7Ci0gIAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUWVBFX1BPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfQklORElORyA9ICJiaW5kaW5nIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFlQRV9QT1JUVFlQRSA9ICJwb3J0dHlwZSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfTUVTU0FHRSA9ICJtZXNzYWdlIjsKLQotICAvLyBUZXN0IHJlc3VsdCBTdHJpbmdzCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTk9UUEFTU0VEID0gIm5vdFBhc3NlZCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgV0FSTklORyA9ICJ3YXJuaW5nIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBGQUlMRUQgPSAiZmFpbGVkIjsKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZmlsZW5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnRuYW1lID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudG5hbWUgPSBudWxsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiB3c2Rsc3BlY2lmaWVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSAgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBhc3NlcnRpb253YXJuaW5nczsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9uZXJyb3JzOwotICBwcm90ZWN0ZWQgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBNZXNzYWdlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgYXNzZXJ0aW9ud2FybmluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYXNzZXJ0aW9uZXJyb3JzID0gbmV3IFZlY3RvcigpOwotICAJdGhpcy53c2lQcmVmZXJlbmNlcyA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXMoZmlsZW5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIE1lc3NhZ2VBbmFseXplci4KLSAgICogQHBhcmFtIGZpbGVuYW1lIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUFuYWx5emVyKFN0cmluZyBmaWxlbmFtZSwgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgYXNzZXJ0aW9ud2FybmluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYXNzZXJ0aW9uZXJyb3JzID0gbmV3IFZlY3RvcigpOwotICAJdGhpcy53c2lQcmVmZXJlbmNlcyA9IHdzaVByZWZlcmVuY2VzOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB3c2RsZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgCXRoaXMoZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpKTsKLSAgCXdzZGxzcGVjaWZpZWQgPSB0cnVlOwotICAJCi0gIAl0aGlzLndzZGxmaWxlID0gd3NkbGZpbGUucmVwbGFjZSgnXFwnLCAnLycpOwotICAJdGhpcy5lbGVtZW50bmFtZSA9IGVsZW1lbnRuYW1lOwotICAJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIAl0aGlzLnBhcmVudG5hbWUgPSBwYXJlbnRuYW1lOwotICAJdGhpcy50eXBlID0gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBNZXNzYWdlQW5hbHl6ZXIoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgd3NkbGZpbGUsIFN0cmluZyBlbGVtZW50bmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudG5hbWUsIFN0cmluZyB0eXBlLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAJdGhpcyhmaWxlbmFtZSwgd3NpUHJlZmVyZW5jZXMpOwotICAJd3NkbHNwZWNpZmllZCA9IHRydWU7Ci0gIAkKLSAgCXRoaXMud3NkbGZpbGUgPSB3c2RsZmlsZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gIAl0aGlzLmVsZW1lbnRuYW1lID0gZWxlbWVudG5hbWU7Ci0gIAl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgCXRoaXMucGFyZW50bmFtZSA9IHBhcmVudG5hbWU7Ci0gIAl0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCB2YWxpZGF0ZUNvbmZvcm1hbmNlLgotICAgKiAKLSAgICogQ2hlY2tzIHRoZSBjb25mb3JtYW5jZSBvZiB0aGUgZ2l2ZW4gbG9nZmlsZSBhZ2FpbnN0IHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAqIElmIHRoZXJlIGFyZSBjb25mb3JtYW5jZSBwcm9ibGVtcyB0aGV5IGNhbiBiZSBvYnRhaW5lZCBmcm9tIGdldEFzc2VydGlvbkVycm9ycy4KLSAgICogCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlQ29uZm9ybWFuY2UoKSB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLQkgIGlmICh3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKSAhPSBXU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5JR05PUkVfTk9OX1dTSSkKLQkgIHsKLSAgICAgICAgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciB1c2luZyBhbiBhbmFseXplcmNvbmZpZyBvYmplY3QKLSAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJjb25maWcgPSBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKTsKLSAgICAgICAgaWYod3NkbHNwZWNpZmllZCkKLSAgICAgICAgewotICAgICAgCSAgV1NETFJlZmVyZW5jZSB3c2RscmVmID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAJICB3c2RscmVmLnNldFdTRExMb2NhdGlvbih3c2RsZmlsZSk7Ci0gICAgICAJCi0gICAgICAJICBXU0RMRWxlbWVudCB3c2RsZWxlbSA9IG5ldyBXU0RMRWxlbWVudEltcGwoKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldE5hbWUoZWxlbWVudG5hbWUpOwotICAgICAgCSAgd3NkbGVsZW0uc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAJICB3c2RsZWxlbS5zZXRQYXJlbnRFbGVtZW50TmFtZShwYXJlbnRuYW1lKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldFR5cGUodHlwZSk7Ci0gICAgICAJCi0gICAgICAJICB3c2RscmVmLnNldFdTRExFbGVtZW50KHdzZGxlbGVtKTsKLSAgICAgIAkKLSAgICAgIAkgIGFuYWx5emVyY29uZmlnLnNldFdTRExSZWZlcmVuY2Uod3NkbHJlZik7Ci0gICAgICAgIH0KLQotICAgICAgICBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFybyA9IG5ldyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCgpOwotICAgICAgICBhcm8uc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlLm5ld0luc3RhbmNlKE5PVFBBU1NFRCkpOwotICAgICAgICBhcm8uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dGYWlsdXJlRGV0YWlsKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dGYWlsdXJlTWVzc2FnZShmYWxzZSk7Ci0gICAgICAgIGFyby5zZXRTaG93TWVzc2FnZUVudHJ5KGZhbHNlKTsKLQotICAgICAgICAvLyBhbHRob3VnaCB3ZSBkb24ndCB1c2UgYSBzdHlsZXNoZWV0IGZvciBvdXIgYXBwbGljYXRpb24gaXQgaXMgcmVxdWlyZWQgb3IgdGhlIAotICAgICAgICAvLyBXUy1JIHRvb2xzIHdpbGwgZmFpbAotICAgICAgICBBZGRTdHlsZVNoZWV0IGFkZHN0eWxlc2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLQotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKGFybyk7Ci0gICAgICAgIGFuYWx5emVyY29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkc3R5bGVzaGVldCk7Ci0gICAgICAKLSAgICAgICAgYW5hbHl6ZXJjb25maWcuc2V0Q29ycmVsYXRpb25UeXBlKCJlbmRwb2ludCIpOwotICAJICAgIHRyeQotCQl7Ci0JCSAgYW5hbHl6ZXJjb25maWcuc2V0TG9nTG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUoZmlsZW5hbWUsICJVVEY4IikpOwotCQkgIGFuYWx5emVyY29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbih3c2lQcmVmZXJlbmNlcy5nZXRUQURGaWxlKCkpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLQkJewotCQkgIGFuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKFVSSUVuY29kZXIuZW5jb2RlKGZpbGVuYW1lLCAiVVRGOCIpKTsKLQkgICAgICBhbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUod3NpUHJlZmVyZW5jZXMuZ2V0VEFERmlsZSgpLCAiVVRGOCIpKTsKLQkJfQotICAgICAgICAvL2FuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKGZpbGVuYW1lKTsKLSAgICAgICAgLy9hbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oZ2V0QmFzaWNQcm9maWxlVGVzdEFzc2VydGlvbnNGaWxlKCkpOwotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKGZhbHNlKTsKLSAgICAgIAotCi0gICAgICAgIExpc3QgYW5hbHl6ZXJDb25maWdzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBhbmFseXplckNvbmZpZ3MuYWRkKGFuYWx5emVyY29uZmlnKTsKLSAgICAgICAgLy8gaGVyZSdzIHdoZXJlIHRoZSB2YWxpZGF0aW9uIGFjdHVhbGx5IHN0YXJ0cyBoYXBwZW5pbmcKLSAgICAgICAgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgYnBhbmFseXplciA9IG5ldyBXU0lCYXNpY1Byb2ZpbGVBbmFseXplcihhbmFseXplckNvbmZpZ3MpOwotCi0gICAgICAgIGJwYW5hbHl6ZXIudmFsaWRhdGVBbGwoKTsKLSAgICAgICAgUmVwb3J0SW1wbCByZXBvcnQgPSAoUmVwb3J0SW1wbCkgYnBhbmFseXplci5nZXRSZXBvcnQoKTsKLQotICAgICAgICBMaXN0IGVudHJpZXMgPSByZXBvcnQuZ2V0RW50cmllcygpOwotCi0gICAgICAgIC8vIGlmIHRoZXJlIGFyZSByZXBvcnQgZW50cmllcyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgYWRkIGFsbAotICAgICAgICAvLyBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgZXJyb3IgbGlzdC4KLSAgICAgICAgaWYgKGVudHJpZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGllbnRyeSA9IGVudHJpZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaWVudHJ5Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSkgaWVudHJ5Lm5leHQoKTsKLSAgICAgICAgICAgIE1hcCBhc3NlcnRpb25SZXN1bHRzID0gZW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpOwotCi0gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0cyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVyYXRvciBpYXNzZXJ0aW9uUmVzdWx0cyA9IGFzc2VydGlvblJlc3VsdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgICAgICAgICAgICB3aGlsZSAoaWFzc2VydGlvblJlc3VsdHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGFyID0gKEFzc2VydGlvblJlc3VsdCkgaWFzc2VydGlvblJlc3VsdHMubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAJd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLlNUT1BfTk9OX1dTSSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBnZXQgYXNzZXJ0aW9uIGxvY2F0aW9ucyBpbiB0aGUgbG9nIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25lcnJvcnMuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdGEuZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIElEICIgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpICsgIjoiICsgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhci5nZXRSZXN1bHQoKS5lcXVhbHNJZ25vcmVDYXNlKEZBSUxFRCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogZ2V0IGFzc2VydGlvbiBsb2NhdGlvbnMgaW4gdGhlIGxvZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9ud2FybmluZ3MuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdGEuZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIElEICIgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpICsgIjoiICsgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAKLQkgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbigiVGhlIE1lc3NhZ2VBbmFseXplciB3YXMgdW5hYmxlIHRvIHZhbGlkYXRlIHRoZSBnaXZlbiBsb2dmaWxlLiIsIGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUFuYWx5emVyRXhjZXB0aW9uKCJUaGUgTWVzc2FnZUFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIGxvZ2ZpbGUuIik7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbldhcm5pbmdzLgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIEByZXR1cm4gTGlzdAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbndhcm5pbmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBc3NlcnRpb25GYWlsdXJlcy4KLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgYW55IGFzc2VydGlvbiBlcnJvcnMgZ2VuZXJhdGVkIGZyb20gdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgICogQHJldHVybiBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRBc3NlcnRpb25FcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbmVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWJmMjMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0RMQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5XU0RMUmVmZXJlbmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5GYWlsdXJlRGV0YWlsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci0KLS8qKgotICogV1NETEFuYWx5emVyCi0gKiBUaGUgaW50ZXJmYWNlIHRvIHRoZSBXUy1JIFRlc3QgVG9vbHMgZm9yIGFuYWx5emluZyBhIFdTREwgZmlsZS4gIEFsbG93cyBhIFdTREwgZmlsZSB0byBiZSBhbmFseXplZAotICogYXQgYW55IG9mIHRoZSBmb2xsb3dpbmcgbGV2ZWxzLgotICogIHBvcnQKLSAqICBiaW5kaW5nCi0gKiAgcG9ydFR5cGUKLSAqICBvcGVyYXRpb24KLSAqICBtZXNzYWdlCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExBbmFseXplcgotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLndzaS50ZXN0LnRvb2xzIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOT1RQQVNTRUQgPSAibm90UGFzc2VkIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBXQVJOSU5HID0gIndhcm5pbmciOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZBSUxFRCA9ICJmYWlsZWQiOwotICAKLSAgcHJvdGVjdGVkIExpc3QgYW5hbHl6ZXJDb25maWdzOwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxVUkk7Ci0gIC8vIGFzc2VydGlvbnMgdG8gaWdub3JlIC0gdXNlZCBmb3IgYXNzZXJ0aW9ucyB0aGF0IHRoZSB0b29scyBoYXZlIG5vdCBpbXBsZW1lbnRlZCBwcm9wZXJseSB5ZXQKLSAgLy9wcm90ZWN0ZWQgU3RyaW5nW10gaWdub3JlQXNzZXJ0aW9ucyA9IHsgLyoiV1NJMjEwNSIgLCAiV1NJMjExOSIqL307Ci0gIHByb3RlY3RlZCBMaXN0IGFzc2VydGlvbmVycm9yczsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9ud2FybmluZ3M7Ci0gIHByb3RlY3RlZCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBwYXJlbnQgZWxlbWVudCBuYW1lLCB0aGUgZWxlbWVudCB0byBhbmFseXplIGFuZCB0aGUgdHlwZSBvZiBlbGVtZW50Ci0gICAqIHNldHMgdXAgdGhlIFdTRExBbmFseXplciB0byBhbmFseXplIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gZmlsZU5hbWUgbG9nIGZpbGUgbmFtZS4KLSAgICogQHBhcmFtIHBhcmVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSAgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0byBhbmFseXplLgotICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2lQcmVmZXJlbmNlcyB0aGUgcHJlZmVyZW5jZXMuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFdTRExBbmFseXplcihTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBwYXJlbnROYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgZWxlbWVudE5hbWUsIFN0cmluZyBlbGVtZW50VHlwZSwgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcyhmaWxlTmFtZSwgd3NpUHJlZmVyZW5jZXMpOwotICAgIGFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QocGFyZW50TmFtZSwgbmFtZXNwYWNlLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpOwotCi0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEdpdmVuIHRoZSBmaWxlIG5hbWUsIHBhcmVudCBlbGVtZW50IG5hbWUsIHRoZSBlbGVtZW50IHRvIGFuYWx5emUgYW5kIHRoZSB0eXBlIG9mIGVsZW1lbnQKLSAgICogc2V0cyB1cCB0aGUgV1NETEFuYWx5emVyIHRvIGFuYWx5emUgdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50TmFtZSBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlICBhIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqIEBwYXJhbSBlbGVtZW50VHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gYWRkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgV1NETEFuYWx5emVyKFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBlbGVtZW50TmFtZSwgU3RyaW5nIGVsZW1lbnRUeXBlKSB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgewotICAgIHRoaXMoZmlsZU5hbWUpOwotICAgIGFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QocGFyZW50TmFtZSwgbmFtZXNwYWNlLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpOwotCi0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSAgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAgIHJlc2V0KGZpbGVOYW1lKTsKLSAgICB0aGlzLndzaVByZWZlcmVuY2VzID0gd3NpUHJlZmVyZW5jZXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSAgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgcmVzZXQoZmlsZU5hbWUpOwotICAgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLSAgICB7Ci0gICAgICB0aGlzLndzaVByZWZlcmVuY2VzID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuY2hlY2tXU0lQcmVmZXJlbmNlcyhmaWxlTmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gIAkgIHRoaXMud3NpUHJlZmVyZW5jZXMgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXMoZmlsZU5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBXU0lQcmVmZXJlbmNlcyBnZXRXU0lQcmVmZXJlbmNlcygpCi0gIHsKLQkgIHJldHVybiB0aGlzLndzaVByZWZlcmVuY2VzOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIFZhbGlkYXRlIHRoZSBXU0RMIGZpbGUgYXMgc2V0dXAgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgKiBAdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZ2l2ZW4gV1NETCBGaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotCSAgaWYgKHdzaVByZWZlcmVuY2VzLmdldENvbXBsaWFuY2VMZXZlbCgpICE9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuSUdOT1JFX05PTl9XU0kpCi0JICB7Ci0gICAgICAgIC8vIGhlcmUncyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBhY3R1YWxseSBzdGFydHMgaGFwcGVuaW5nCi0gICAgICAgIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyIGJwYW5hbHl6ZXIgPSBuZXcgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoYW5hbHl6ZXJDb25maWdzLHdzZGxVUkkpOwotICAgICAgICBicGFuYWx5emVyLnZhbGlkYXRlQWxsKCk7Ci0gICAgICAgIFJlcG9ydEltcGwgcmVwb3J0ID0gKFJlcG9ydEltcGwpIGJwYW5hbHl6ZXIuZ2V0UmVwb3J0KCk7Ci0KLSAgICAgICAgTGlzdCBlbnRyaWVzID0gcmVwb3J0LmdldEVudHJpZXMoKTsKLQotICAgICAgICAvLyBpZiB0aGVyZSBhcmUgcmVwb3J0IGVudHJpZXMgd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYW5kIGFkZCBhbGwKLSAgICAgICAgLy8gZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIGVycm9yIGxpc3QuIAotICAgICAgICBpZiAoZW50cmllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaWVudHJ5ID0gZW50cmllcy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpZW50cnkuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBpZW50cnkubmV4dCgpOwotICAgICAgICAgICAgTWFwIGFzc2VydGlvblJlc3VsdHMgPSBlbnRyeS5nZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgICAgICAgICAgIGlmIChhc3NlcnRpb25SZXN1bHRzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZXJhdG9yIGlhc3NlcnRpb25SZXN1bHRzID0gYXNzZXJ0aW9uUmVzdWx0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgIHdoaWxlIChpYXNzZXJ0aW9uUmVzdWx0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgYXIgPSAoQXNzZXJ0aW9uUmVzdWx0KSBpYXNzZXJ0aW9uUmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgIC8vIGFkZCBpbiB0byBza2lwIGVycm9ycyBmb3IgYXNzZXJ0aW9ucyB0aGF0IGFyZSByZXBvcnRpbmcgaW5jb3JyZWN0IHByb2JsZW1zLgotICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG5vdCByZXBvcnQgaW5jb3JyZWN0IGVycm9ycyByZXBvcnRlZCBpbiB0aGUgdG9vbHMgd2l0aG91dCBkaXNhYmxpbmcgdGhlbQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdHJpbmcgYXNzZXJ0aW9uSWQgPSB0YS5nZXRJZCgpOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBib29sZWFuIGlnbm9yZUFzc2VydGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmb3IoaW50IGkgPSBpZ25vcmVBc3NlcnRpb25zLmxlbmd0aC0xOyBpID49MDtpLS0pCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCWlmKGlnbm9yZUFzc2VydGlvbnNbaV0uZXF1YWxzSWdub3JlQ2FzZShhc3NlcnRpb25JZCkpCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIAl7Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIAkJaWdub3JlQXNzZXJ0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZihpZ25vcmVBc3NlcnRpb24pCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCWNvbnRpbnVlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAJd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlTGlzdCA9IGFyLmdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVycm9yTWVzc2FnZXMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVEZXRhaWxJbXBsIGZkaSA9IChGYWlsdXJlRGV0YWlsSW1wbCkgZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudExvY2F0aW9uIGVsID0gZmRpLmdldEVsZW1lbnRMb2NhdGlvbigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciA9IGVsLmdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBc3NlcnRpb25FcnJvcih0YS5nZXRJZCgpLCB0YS5nZXRGYWlsdXJlTWVzc2FnZSgpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVycm9yTWVzc2FnZUxpc3QgaXMgbnVsbCBidXQgdGhlcmUgaXMgYW4gZXJyb3Igc28gYXNzaWduIGl0IHRvIGxpbmUgMCBmb3Igbm93Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQobmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIDAsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhci5nZXRSZXN1bHQoKS5lcXVhbHNJZ25vcmVDYXNlKEZBSUxFRCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlTGlzdCA9IGFyLmdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlcnJvck1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpIGVycm9yTWVzc2FnZXMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbCA9IGZkaS5nZXRFbGVtZW50TG9jYXRpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBlbC5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IGVsLmdldENvbHVtbk51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9ud2FybmluZ3MuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXNzZXJ0aW9uRXJyb3IodGEuZ2V0SWQoKSwgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlcnJvck1lc3NhZ2VMaXN0IGlzIG51bGwgYnV0IHRoZXJlIGlzIGFuIGVycm9yIHNvIGFzc2lnbiBpdCB0byBsaW5lIDAgZm9yIG5vdwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb253YXJuaW5ncy5hZGQobmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIDAsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCSAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJQW5hbHl6ZXJFeGNlcHRpb24oZSArICJUaGUgV1NETEFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIFdTREwgRmlsZS4iKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIHBhcmVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSAgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0byBhbmFseXplLgotICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZmlndXJhdGlvblRvVGVzdCgKLSAgICBTdHJpbmcgcGFyZW50TmFtZSwKLSAgICBTdHJpbmcgbmFtZXNwYWNlLAotICAgIFN0cmluZyBlbGVtZW50TmFtZSwKLSAgICBTdHJpbmcgZWxlbWVudFR5cGUpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG5ldyBXU0RMUmVmZXJlbmNlSW1wbCgpOwotCi0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShlbGVtZW50VHlwZSk7Ci0gICAgICBpZiAocGFyZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2RsRWxlbWVudC5zZXRQYXJlbnRFbGVtZW50TmFtZShwYXJlbnROYW1lKTsKLSAgICAgIH0KLSAgICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShlbGVtZW50TmFtZSk7Ci0gICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLQotICAgICAgd3NkbFJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSSSk7Ci0gICAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAvLyBJbml0aWFsaXplIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciB1c2luZyBhbiBhbmFseXplcmNvbmZpZyBvYmplY3QKLSAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyY29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCk7Ci0KLSAgICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXJvID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICBhcm8uc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlLm5ld0luc3RhbmNlKE5PVFBBU1NFRCkpOwotICAgICAgYXJvLnNldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbihmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd0ZhaWx1cmVEZXRhaWwoZmFsc2UpOwotICAgICAgYXJvLnNldFNob3dGYWlsdXJlTWVzc2FnZShmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd01lc3NhZ2VFbnRyeShmYWxzZSk7Ci0KLSAgICAgIC8vIGFsdGhvdWdoIHdlIGRvbid0IHVzZSBhIHN0eWxlc2hlZXQgZm9yIG91ciBhcHBsaWNhdGlvbiBpdCBpcyByZXF1aXJlZCBvciB0aGUgCi0gICAgICAvLyBXUy1JIHRvb2xzIHdpbGwgZmFpbAotICAgICAgQWRkU3R5bGVTaGVldCBhZGRzdHlsZXNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0KLSAgICAgIGFuYWx5emVyY29uZmlnLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXJvKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkc3R5bGVzaGVldCk7Ci0gICAgICBhbmFseXplcmNvbmZpZy5zZXRSZXBsYWNlUmVwb3J0KHRydWUpOwotICAgICAgLy9hbmFseXplcmNvbmZpZy5zZXRMb2dMb2NhdGlvbihmaWxlbmFtZSk7Ci0gICAgICBhbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24od3NpUHJlZmVyZW5jZXMuZ2V0VEFERmlsZSgpKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFZlcmJvc2VPcHRpb24oZmFsc2UpOwotCi0gICAgICAvLyBzZXQgdGhlIHdzZGxSZWZlcmVuY2UKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFdTRExSZWZlcmVuY2Uod3NkbFJlZmVyZW5jZSk7Ci0gICAgICBhbmFseXplckNvbmZpZ3MuYWRkKGFuYWx5emVyY29uZmlnKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbigiVW5hYmxlIHRvIGFkZCBBbmFseXplckNvbmZpZyB0byBsaXN0LiAiICsgZSk7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uRmFpbHVyZXMuCi0gICAqIFJldHVybiBhIGxpc3Qgb2YgdGhlIGFzc2VydGlvbiBmYWlsdXJlcy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGFzc2VydGlvbiBmYWlsdXJlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEFzc2VydGlvbkVycm9ycygpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uZXJyb3JzOwotICB9Ci0KLSAgLyoqCi0gIAkgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MuCi0gIAkgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gIAkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gIAkgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbndhcm5pbmdzOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzZXQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0JaWYgKGZpbGVuYW1lICE9IG51bGwpCi0JewotCSAgU3RyaW5nIHRtcCA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkgIGlmICgoIXRtcC5zdGFydHNXaXRoKFdTSUNvbnN0YW50cy5IVFRQX1BSRUZJWCkpICYmCi0gICAgICAgICAgKCF0bXAuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuRklMRV9QUkVGSVgpKSkKLQkgIHsKLQkgICAgdG1wID0gV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyB0bXA7Ci0JICB9Ci0JICB0cnkKLQkgIHsKLQkgICAgd3NkbFVSSSA9IFVSSUVuY29kZXIuZW5jb2RlKHRtcCwgIlVURjgiKTsKLQkgIH0KLQkgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLQkgIHsKLQkgIH0KLQl9Ci0gIAlhbmFseXplckNvbmZpZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gIAlhc3NlcnRpb25lcnJvcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAlhc3NlcnRpb253YXJuaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTSUFuYWx5emVyRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3Nzg1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLS8qKgotICogQW5hbHl6ZXJFeGNlcHRpb24KLSAqIAotICogRXhjZXB0aW9uIHRvIGJlIHRocm93biBpZiBhbiBhbmFseXplciBmYWlscwotICovCi1wdWJsaWMgY2xhc3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODM1MTU4MzUwMjE5MTk0Njc3TDsKLQkvKioKLSAgICogVGhyb3dhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aHJvd2FibGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQW5hbHl6ZXJFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJQW5hbHl6ZXJFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQW5hbHl6ZXJFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBzIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFdTSUFuYWx5emVyRXhjZXB0aW9uKFN0cmluZyBzKQotICB7Ci0gICAgc3VwZXIocyk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFuIGV4Y2VwdGlvbiB3aXRoIGEgbWVzc2FnZSBhbmQgcmVsYXRlZCBleGNlcHRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbXNnICAgICAgICB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UKLSAgICogQHBhcmFtIHRocm93YWJsZSAgdGhyb3dhYmxlIHRoYXQgaXMgcmVsYXRlZCB0byB0aGlzIGV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFdTSUFuYWx5emVyRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotCi0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2UKLSAgICB0aGlzLnRocm93YWJsZSA9IHRocm93YWJsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVuY2Fwc3VsYXRlZCB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXRUYXJnZXRFeGNlcHRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRocm93YWJsZQotICAgIHJldHVybiB0aHJvd2FibGU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTSUJhc2ljUHJvZmlsZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5YjkyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5CYXNpY1Byb2ZpbGVBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudC5Eb2N1bWVudEZhY3RvcnlJbXBsOwotCi0vKioKLSAqIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyCi0gKiAKLSAqIEFuIGV4dGVuc2lvbiBvZiB0aGUgQmFzaWNQcm9maWxlQW5hbHl6ZXIgZnJvbSB0aGUgV1MtSSBUZXN0IFRvb2xzIHRoYXQKLSAqIGFsbG93cyBjYWxsaW5nIGNvZGUgdG8gZ2V0IHRoZSByZXBvcnQgZ2VuZXJhdGVkIGZyb20gV1MtSSB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgZXh0ZW5kcyBCYXNpY1Byb2ZpbGVBbmFseXplcgotewotICAvKioKLSAgICogRGVmYXVsdCBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfRE9DVU1FTlRfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c2kudGVzdC50b29scy51dGlsLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeUltcGwiOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbFVSSSB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWcsIFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZywgd3NkbFVSSSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWcgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYW5hbHl6ZXJDb25maWcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4KLSAgICogQHBhcmFtIHRvb2xJbmZvIGEgVG9vbEluZm8gb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbml0KFRvb2xJbmZvIHRvb2xJbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLnRvb2xJbmZvID0gdG9vbEluZm87Ci0gICAgCi0gICAgLy8gQ3JlYXRlIG1lc3NhZ2UgbGlzdAotICAgIG1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIENyZWF0ZSBwcm9maWxlIHZhbGlkYXRvciBmYWN0b3J5Ci0gICAgZmFjdG9yeSA9IFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG9jdW1lbnQgZmFjdG9yeQotICAgIGRvY3VtZW50RmFjdG9yeSA9IG5ldyBEb2N1bWVudEZhY3RvcnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFJlcG9ydC4KLSAgICogCi0gICAqIFJldHVybiB0aGUgUmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnQgZ2V0UmVwb3J0KCkKLSAgewotICAgIHJldHVybiByZXBvcnRlci5nZXRSZXBvcnQoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sRW52aXJvbm1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJlZTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5YTUxJbmZvOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgVG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVG9vbEVudmlyb25tZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlZJUk9OTUVOVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPSBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQ09NTU9OLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBUb29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBydW50aW1lTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLm5hbWUiKTsKLSAgcHJvdGVjdGVkIFN0cmluZyBydW50aW1lVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLnZlcnNpb24iKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG9zTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpOwotICBwcm90ZWN0ZWQgU3RyaW5nIG9zVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MudmVyc2lvbiIpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgeG1sUGFyc2VyTmFtZSA9ICI/IjsKLSAgcHJvdGVjdGVkIFN0cmluZyB4bWxQYXJzZXJWZXJzaW9uID0gIj8iOwotCi0gIC8qKgotICAgKiBBZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MSW5mbyB4bWxJbmZvID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdG9vbCBydW50aW1lIGVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIFRvb2xFbnZpcm9ubWVudCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIC8vIEZVVFVSRTogbWFkZSBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgWGVyY2VzIHdoZXJlIGdldFZlcnNpb24KLSAgICAgIC8vIGlzIG5vIGxvbmdlciBzdGF0aWNhbGx5IGF2YWlsYWJsZS4KLSAgICAgIC8vIHhtbFBhcnNlclZlcnNpb24gPSBuZXcgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5WZXJzaW9uKCkuZ2V0VmVyc2lvbigpOwotICAgICAgeG1sUGFyc2VyVmVyc2lvbiA9IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuVmVyc2lvbi5nZXRWZXJzaW9uKCk7Ci0KLSAgICAgIHhtbFBhcnNlck5hbWUgPSAiQXBhY2hlIFhlcmNlcyI7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEFERDogSG93IGVsc2UgY2FuIHdlIGdldCB0aGUgbmFtZSB2ZXJzaW9uIG51bWJlcgotICAgIH0KLQotICAgIGNhdGNoIChFcnJvciBlcnIpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgZWxzZSBjYW4gd2UgZ2V0IHRoZSBuYW1lIHZlcnNpb24gbnVtYmVyCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRvb2wgcnVudGltZSBlbnZpcm9ubWVudC4KLSAgICogQHBhcmFtIHhtbEluZm8gYWRkaXRpb25hbCB0b29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xFbnZpcm9ubWVudChYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLnhtbEluZm8gPSB4bWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG9zTmFtZS4KLSAgICogQHJldHVybiB0aGUgb3NOYW1lLgotICAgKiBAc2VlICNzZXRPU05hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T1NOYW1lKCkKLSAgewotICAgIHJldHVybiBvc05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3NWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBvc1ZlcnNpb24uCi0gICAqIEBzZWUgI3NldE9TVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRPU1ZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIG9zVmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYXJzZXJOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBwYXJzZXJOYW1lLgotICAgKiBAc2VlICNzZXRYTUxQYXJzZXJOYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFhNTFBhcnNlck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHhtbFBhcnNlck5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHJldHVybiB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0WE1MUGFyc2VyVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRYTUxQYXJzZXJWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiB4bWxQYXJzZXJWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJ1bnRpbWVOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBydW50aW1lTmFtZS4KLSAgICogQHNlZSAjc2V0UnVudGltZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJ1bnRpbWVWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBydW50aW1lVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0UnVudGltZVZlcnNpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZVZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9zTmFtZS4KLSAgICogQHBhcmFtIG9zTmFtZSB0aGUgb3NOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0T1NOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPU05hbWUoU3RyaW5nIG9zTmFtZSkKLSAgewotICAgIHRoaXMub3NOYW1lID0gb3NOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9zVmVyc2lvbi4KLSAgICogQHBhcmFtIG9zVmVyc2lvbiB0aGUgb3NWZXJzaW9uIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0T1NWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPU1ZlcnNpb24oU3RyaW5nIG9zVmVyc2lvbikKLSAgewotICAgIHRoaXMub3NWZXJzaW9uID0gb3NWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHBhcnNlck5hbWUuCi0gICAqIEBwYXJhbSB4bWxQYXJzZXJOYW1lIHRoZSBwYXJzZXJOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0WE1MUGFyc2VyTmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0WE1MUGFyc2VyTmFtZShTdHJpbmcgeG1sUGFyc2VyTmFtZSkKLSAgewotICAgIHRoaXMueG1sUGFyc2VyTmFtZSA9IHhtbFBhcnNlck5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHBhcmFtIHhtbFBhcnNlclZlcnNpb24gdGhlIHBhcnNlclZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRYTUxQYXJzZXJWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRYTUxQYXJzZXJWZXJzaW9uKFN0cmluZyB4bWxQYXJzZXJWZXJzaW9uKQotICB7Ci0gICAgdGhpcy54bWxQYXJzZXJWZXJzaW9uID0geG1sUGFyc2VyVmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBydW50aW1lTmFtZS4KLSAgICogQHBhcmFtIHJ1bnRpbWVOYW1lIHRoZSBydW50aW1lTmFtZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJ1bnRpbWVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lTmFtZShTdHJpbmcgcnVudGltZU5hbWUpCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVOYW1lID0gcnVudGltZU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcnVudGltZVZlcnNpb24uCi0gICAqIEBwYXJhbSBydW50aW1lVmVyc2lvbiB0aGUgcnVudGltZVZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRSdW50aW1lVmVyc2lvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVudGltZVZlcnNpb24oU3RyaW5nIHJ1bnRpbWVWZXJzaW9uKQotICB7Ci0gICAgdGhpcy5ydW50aW1lVmVyc2lvbiA9IHJ1bnRpbWVWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB4bWxJbmZvIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoWE1MSW5mbyB4bWxJbmZvKQotICB7Ci0gICAgdGhpcy54bWxJbmZvID0geG1sSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICB0aGUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiB0aGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICghbnNOYW1lLmVxdWFscygiIikpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SVU5USU1FICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBydW50aW1lTmFtZSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04gKyAiPVwiIiArIHJ1bnRpbWVWZXJzaW9uICsgIlwiLz4iKTsKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9PUEVSQVRJTkdfU1lTVEVNICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBvc05hbWUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyBvc1ZlcnNpb24gKyAiXCIvPiIpOwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1hNTF9QQVJTRVIgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX05BTUUgKyAiPVwiIiArIHhtbFBhcnNlck5hbWUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyB4bWxQYXJzZXJWZXJzaW9uICsgIlwiLz4iKTsKLQotICAgIC8vIElmIGFkZHRpb25hbCBpbmZvLCB0aGVuIGdldCBpdAotICAgIGlmICh4bWxJbmZvICE9IG51bGwpCi0gICAgICBwdy5wcmludCh4bWxJbmZvLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvVG9vbEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5N2VmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuWE1MSW5mbzsKLQotLyoqCi0gKiBJbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIGNvbmZvcm1hbmNlIHRvb2wuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVG9vbEluZm8KLXsKLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgbmFtZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfVkVSU0lPTiA9ICJ3c2kudG9vbC52ZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9UT09MX1JFTEVBU0VfREFURSA9ICJ3c2kudG9vbC5yZWxlYXNlLmRhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfSU1QTEVNRU5URVIgPSAid3NpLnRvb2wuaW1wbGVtZW50ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfTE9DQVRJT04gPSAid3NpLnRvb2wubG9jYXRpb24iOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IHRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgdmFsdWVzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9UT09MX1ZFUlNJT04gPSAiMS4wLjEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfUkVMRUFTRV9EQVRFID0gIjIwMDQtMDEtMjIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfSU1QTEVNRU5URVIgPSAiRWNsaXBzZS5vcmcgT3JnYW5pemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9UT09MX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3N2dCI7Ci0KLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdmVyc2lvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWxlYXNlRGF0ZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBpbXBsZW1lbnRlcjsKLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbjsKLQotICAvKioKLSAgICogVG9vbCBlbnZpcm9ubWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBUb29sRW52aXJvbm1lbnQgdG9vbEVudmlyb25tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogVG9vbCBpbmZvIHByb3BlcnRpZXMgZmlsZW5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0ZJTEVOQU1FID0gIm9yZy53c2kudGVzdC50b29saW5mbyI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvKCkKLSAgewotICAgIHRoaXMudG9vbEVudmlyb25tZW50ID0gbmV3IFRvb2xFbnZpcm9ubWVudCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uIGZyb20gaW5mb3JtYXRpb24gaW4gdGhlIHRvb2xpbmZvLnByb3BlcnRpZXMgZmlsZS4KLSAgICogQHBhcmFtIG5hbWUgIHRoZSB0b29sIG5hbWUuCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotCi0gICAgZ2V0UHJvcGVydGllcygpOwotCi0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSBuZXcgVG9vbEVudmlyb25tZW50KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBuYW1lICAgICAgICAgdGhlIHRvb2wgbmFtZS4KLSAgICogQHBhcmFtIHZlcnNpb24gICAgICB0aGUgdmVyc2lvbiBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlICB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZSB0b29sLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgIHRoZSBpbXBsZW1lbnRlciBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGxvY2F0aW9uICAgICB0aGUgaW1wbGVtZW50ZXIgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oCi0gICAgU3RyaW5nIG5hbWUsCi0gICAgU3RyaW5nIHZlcnNpb24sCi0gICAgU3RyaW5nIHJlbGVhc2VEYXRlLAotICAgIFN0cmluZyBpbXBsZW1lbnRlciwKLSAgICBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgdGhpcy5yZWxlYXNlRGF0ZSA9IHJlbGVhc2VEYXRlOwotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdG9vbCBpbmZvcm1hdGlvbiB3aXRoIHRvb2wgdW5pcXVlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gbmFtZSAgICAgICAgIHRoZSB0b29sIG5hbWUuCi0gICAqIEBwYXJhbSB2ZXJzaW9uICAgICAgdGhlIHZlcnNpb24gb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSByZWxlYXNlRGF0ZSAgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGltcGxlbWVudGVyICB0aGUgaW1wbGVtZW50ZXIgb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSBsb2NhdGlvbiAgICAgdGhlIGltcGxlbWVudGVyIGxvY2F0aW9uLgotICAgKiBAcGFyYW0geG1sSW5mbyAgICAgIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBUb29sSW5mbygKLSAgICBTdHJpbmcgbmFtZSwKLSAgICBTdHJpbmcgdmVyc2lvbiwKLSAgICBTdHJpbmcgcmVsZWFzZURhdGUsCi0gICAgU3RyaW5nIGltcGxlbWVudGVyLAotICAgIFN0cmluZyBsb2NhdGlvbiwKLSAgICBYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgdGhpcy5yZWxlYXNlRGF0ZSA9IHJlbGVhc2VEYXRlOwotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoeG1sSW5mbyk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG5hbWUuCi0gICAqIEByZXR1cm4gbmFtZS4KLSAgICogQHNlZSAjc2V0TmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB2ZXJzaW9uLgotICAgKiBAcmV0dXJuIHZlcnNpb24uCi0gICAqIEBzZWUgI3NldFZlcnNpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVsZWFzZSBkYXRlLgotICAgKiBAcmV0dXJuIHJlbGVhc2UgZGF0ZS4KLSAgICogQHNlZSAjc2V0UmVsZWFzZURhdGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVsZWFzZURhdGUoKQotICB7Ci0gICAgcmV0dXJuIHJlbGVhc2VEYXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBpbXBsZW1lbnRlci4KLSAgICogQHJldHVybiBpbXBsZW1lbnRlci4KLSAgICogQHNlZSAjc2V0SW1wbGVtZW50ZXIKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW1wbGVtZW50ZXIoKQotICB7Ci0gICAgcmV0dXJuIGltcGxlbWVudGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICogQHJldHVybiBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRvb2xFbnZpcm9ubWVudC4KLSAgICogQHJldHVybiBUb29sRW52aXJvbm1lbnQKLSAgICogQHNlZSAjc2V0VG9vbEVudmlyb25tZW50Ci0gICAqLwotICBwdWJsaWMgVG9vbEVudmlyb25tZW50IGdldFRvb2xFbnZpcm9ubWVudCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbEVudmlyb25tZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGltcGxlbWVudGVyLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgdGhlIGltcGxlbWVudGVyIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0SW1wbGVtZW50ZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEltcGxlbWVudGVyKFN0cmluZyBpbXBsZW1lbnRlcikKLSAgewotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvY2F0aW9uIHRoZSBsb2NhdGlvbiB0byBzZXQuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgbmFtZS4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgdG8gc2V0LgotICAgKiBAc2VlICNnZXROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByZWxlYXNlRGF0ZS4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlIHRoZSByZWxlYXNlRGF0ZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJlbGVhc2VEYXRlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWxlYXNlRGF0ZShTdHJpbmcgcmVsZWFzZURhdGUpCi0gIHsKLSAgICB0aGlzLnJlbGVhc2VEYXRlID0gcmVsZWFzZURhdGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcGFyYW0gdG9vbEVudmlyb25tZW50IHRoZSB0b29sRW52aXJvbm1lbnQgdG8gc2V0LgotICAgKiBAc2VlICNnZXRUb29sRW52aXJvbm1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRvb2xFbnZpcm9ubWVudChUb29sRW52aXJvbm1lbnQgdG9vbEVudmlyb25tZW50KQotICB7Ci0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSB0b29sRW52aXJvbm1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcGFyYW0geG1sSW5mbyBhZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRpdGlvbmFsVG9vbEVudmlyb25tZW50KFhNTEluZm8geG1sSW5mbykKLSAgewotICAgIHRoaXMudG9vbEVudmlyb25tZW50LnNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoeG1sSW5mbyk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdmVyc2lvbi4KLSAgICogQHBhcmFtIHZlcnNpb24gdGhlIHZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gc3RhcnQgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgIHRoZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIHRoZSBzdGFydCBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyBnZXRWZXJzaW9uKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFTEVBU0VfREFURSArICI9XCIiICsgZ2V0UmVsZWFzZURhdGUoKSArICJcIj4iKTsKLQotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9JTVBMRU1FTlRFUiArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSArICI9XCIiICsgZ2V0SW1wbGVtZW50ZXIoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OICsgIj1cIiIgKyBnZXRMb2NhdGlvbigpICsgIlwiLz4iKTsKLQotICAgIC8vIEVudmlyb25tZW50Ci0gICAgcHcucHJpbnQodG9vbEVudmlyb25tZW50LnRvWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZW5kIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICB0aGUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiB0aGUgZW5kIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICBwdy5wcmludGxuKCIgIDwvIiArIG5zTmFtZSArIGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB2YWx1ZXMgZnJvbSB0aGUgdG9vbHMucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZ2V0UHJvcGVydGllcygpCi0gIHsKLSAgICAvL1Byb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vcHJvcHMubG9hZChpcyk7Ci0KLSAgICAgIC8vIEdldCByZXNvdXJjZQotICAgICAgcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIEdldCBwcm9wZXJ0eSB2YWx1ZXMKLSAgICAgIHRoaXMudmVyc2lvbiA9Ci0gICAgICAgIGdldFByb3BlcnR5KHJlc291cmNlQnVuZGxlLCBQUk9QX1RPT0xfVkVSU0lPTiwgREVGX1RPT0xfVkVSU0lPTik7Ci0gICAgICB0aGlzLnJlbGVhc2VEYXRlID0KLSAgICAgICAgZ2V0UHJvcGVydHkoCi0gICAgICAgICAgcmVzb3VyY2VCdW5kbGUsCi0gICAgICAgICAgUFJPUF9UT09MX1JFTEVBU0VfREFURSwKLSAgICAgICAgICBERUZfVE9PTF9SRUxFQVNFX0RBVEUpOwotICAgICAgdGhpcy5pbXBsZW1lbnRlciA9Ci0gICAgICAgIGdldFByb3BlcnR5KAotICAgICAgICAgIHJlc291cmNlQnVuZGxlLAotICAgICAgICAgIFBST1BfVE9PTF9JTVBMRU1FTlRFUiwKLSAgICAgICAgICBERUZfVE9PTF9JTVBMRU1FTlRFUik7Ci0gICAgICB0aGlzLmxvY2F0aW9uID0KLSAgICAgICAgZ2V0UHJvcGVydHkocmVzb3VyY2VCdW5kbGUsIFBST1BfVE9PTF9MT0NBVElPTiwgREVGX1RPT0xfTE9DQVRJT04pOwotICAgIH0KLQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBsb2FkaW5nIHByb3BlcnRpZXM6ICAiICsgZS50b1N0cmluZygpKTsKLQotICAgICAgLy8gU2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzCi0gICAgICB0aGlzLnZlcnNpb24gPSBERUZfVE9PTF9WRVJTSU9OOwotICAgICAgdGhpcy5yZWxlYXNlRGF0ZSA9IERFRl9UT09MX1JFTEVBU0VfREFURTsKLSAgICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBERUZfVE9PTF9JTVBMRU1FTlRFUjsKLSAgICAgIHRoaXMubG9jYXRpb24gPSBERUZfVE9PTF9MT0NBVElPTjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb3BlcnR5LgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgIGEgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlICAgIGEgZGVmYXVsdCB2YWx1ZS4KLSAgICogQHJldHVybiBwcm9wZXJ0eS4gSWYgbm90IGZvdW5kIHJldHVybiBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9wZXJ0eSgKLSAgICBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZSwKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBkZWZhdWx0VmFsdWUpCi0gIHsKLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBpZiAoKHZhbHVlID0gcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKGtleSkpID09IG51bGwpCi0gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdGhlIHRvb2xzLnByb3BlcnRpZXMgZmlsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAqIFRoZSBpbnB1dCBhcmd1ZW1lbnRzIGFyZToKLSAgICogPG9sPgotICAgKiA8bGk+RmlsZW5hbWUgZm9yIHRoZSBwcm9wZXJ0aWVzIGZpbGUgdG8gY3JlYXRlCi0gICAqIDxsaT5WZXJzaW9uIG51bWJlcgotICAgKiA8bGk+Ci0gICAqIDwvb2w+Ci0gICAqIEBwYXJhbSBhcmdzICB0aGUgYXJndW1lbnRzIGZvciBtYWluLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBQUk9QX0ZJTEVOQU1FOwotICAgIFN0cmluZyB2ZXJzaW9uID0gREVGX1RPT0xfVkVSU0lPTjsKLSAgICBTdHJpbmcgaW1wbGVtZW50ZXIgPSBERUZfVE9PTF9JTVBMRU1FTlRFUjsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBERUZfVE9PTF9MT0NBVElPTjsKLQotICAgIC8vIFNldCB0aGUgZmlsZSBuYW1lCi0gICAgaWYgKGFyZ3MubGVuZ3RoID49IDEpCi0gICAgICBmaWxlbmFtZSA9IGFyZ3NbMF07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gMikKLSAgICAgIHZlcnNpb24gPSBhcmdzWzFdOwotCi0gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpCi0gICAgICBpbXBsZW1lbnRlciA9IGFyZ3NbMl07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gNCkKLSAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBmaWxlIHdyaXRlcgotICAgICAgRmlsZVdyaXRlciBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZW5hbWUpOwotCi0gICAgICAvLyBDcmVhdGUgcHJpbnQgd3JpdGVyCi0gICAgICBQcmludFdyaXRlciBwcmludFdyaXRlciA9IG5ldyBQcmludFdyaXRlcihmaWxlV3JpdGVyKTsKLQotICAgICAgLy8gV3JpdGUgb3V0IGNvbnRlbnRzIG9mIHByb3BlcnRpZXMgZmlsZQotICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbihDT01NRU5UUyk7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9WRVJTSU9OICsgIj0iICsgdmVyc2lvbik7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9SRUxFQVNFX0RBVEUgKyAiPSIgKyBVdGlscy5nZXREYXRlKCkpOwotICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbihQUk9QX1RPT0xfSU1QTEVNRU5URVIgKyAiPSIgKyBpbXBsZW1lbnRlcik7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9MT0NBVElPTiArICI9IiArIGxvY2F0aW9uKTsKLQotICAgICAgLy8gQ2xvc2UgZmlsZSB3cml0ZXIKLSAgICAgIGZpbGVXcml0ZXIuY2xvc2UoKTsKLQotICAgICAgLy8gRG9uZQotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaWxlIFsiICsgZmlsZW5hbWUgKyAiXSBjcmVhdGVkLiIpOwotICAgIH0KLQotICAgIGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBzdGF0dXNDb2RlID0gMTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVhDRVBUSU9OOiAiICsgaW9lLnRvU3RyaW5nKCkpOwotICAgICAgaW9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIC8vIEV4aXQKLSAgICBTeXN0ZW0uZXhpdChzdGF0dXNDb2RlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UUyA9ICIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjN2M0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLS8qKgotICogV1MtSSBjb25zdGFudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgSmltIENsdW5lCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTSUNvbnN0YW50cyB7Ci0KLQkvKioKLQkgKiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9ERUNMID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiI7Ci0KLQkvKioKLQkgKiBYTUwgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfWE1MTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUwgPSAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7Ci0JLyoqCi0JICogWE1MIHNjaGVtYSBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0JLyoqCi0JICogWE1MIHNjaGVtYSBsb2NhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYU0RfU0NIRU1BX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBuYW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfWFNEID0gInhzZCI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIGluc3RhbmNlIG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBuYW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfWFNJID0gInhzaSI7Ci0KLQotCS8qKgotCSAqIFdTLUkgbWVzc2FnZSBsb2cgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0xPRyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX0xPRyA9ICJ3c2ktbG9nIjsKLQotCS8qKgotCSAqIFdTLUkgY29uZm9ybWFuY2UgcmVwb3J0IG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9SRVBPUlQgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvcmVwb3J0LyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfUkVQT1JUID0gIndzaS1yZXBvcnQiOwotCi0JLyoqCi0JICogV1MtSSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfQVNTRVJUSU9OU18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2Fzc2VydGlvbnMvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FTU0VSVElPTlMgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvYXNzZXJ0aW9ucy8iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfQVNTRVJUSU9OUyA9ICJ3c2ktYXNzZXJ0aW9ucyI7Ci0KLQkvKioKLQkgKiBXUy1JIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVzYXBjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJR18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL21vbml0b3JDb25maWcvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX01PTklUT1JfQ09ORklHID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIjsKLQkKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHID0gIndzaS1tb25Db25maWciOwotCi0JLyoqCi0JICogV1MtSSBhbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgbmFtZXNhcGNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJR18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2FuYWx5emVyQ29uZmlnLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvYW5hbHl6ZXJDb25maWcvIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9BTkFMWVpFUl9DT05GSUcgPSAid3NpLWFuYWx5emVyQ29uZmlnIjsKLQotCS8qKgotCSAqIFdTLUkgY29tbW9uIG5hbWVzYXBjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9DT01NT05fMjAwMyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwMy8wMy9jb21tb24vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0NPTU1PTiA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9jb21tb24vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9DT01NT04gPSAid3NpLWNvbW1vbiI7Ci0KLQkvKioKLQkgKiBTT0FQIFYxLjEgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsKLQotCS8qKgotCSAqIFNPQVAvMS4xIGVuY29kaW5nLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQX0VOQ09ESU5HID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX05FWFRfQUNUT1IgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiA7Ci0JLyoqCi0JICogSFRUUCB0cmFuc3BvcnQuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NPQVBfSFRUUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiOwotCi0JLyoqCi0JICogV1NETCBWMS4xIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7Ci0KLQkvKioKLQkgKiBXU0RMIFNPQVAgYmluZGluZyBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1dTRExfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETF9TT0FQMTIgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19OQU1FX1dTRExfU09BUCA9ICJzb2FwIjsKLQotCS8qKgotCSAqIFdTREwgTUlNRSBiaW5kaW5nIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19OQU1FX1dTRExfTUlNRSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotCS8qKgotCSAqIFdTREwgSFRUUCBHRVQgJiBQT1NUIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9IVFRQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iOwotCi0JLyoqCi0JICogV1NETCBESU1FIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9ESU1FID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDIvMDQvZGltZS93c2RsLyI7Ci0KLQkvKioKLQkgKiBDb25mb3JtYW5jZSBDbGFpbSBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX0NMQUlNID0gImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIjsKLQotCS8qKgotCSAqIFVEREkgVjIgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9VRERJX1YyID0gInVybjp1ZGRpLW9yZzphcGlfdjIiOwotCi0JLyoqCi0JICogVGhlIFhNTCBTY2hlbWEgZm9yIHRoZSB0eXBlIHVzZWQgdG8gcmVmZXIgdG8gYXR0YWNobWVudHMgZnJvbSB0aGUgU09BUAotCSAqIGVudmVsb3BlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TV0FfUkVGID0gImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIjsKLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNDSEVNQV9UWVBFX1NXQV9SRUYgPSAic3dhUmVmIjsKLQotCS8qKgotCSAqIEVsZW1lbnQgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BRERfU1RZTEVfU0hFRVQgPSAiYWRkU3R5bGVTaGVldCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUID0gImFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQU5BTFlaRVJfRkFJTFVSRSA9ICJhbmFseXplckZhaWx1cmUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BUlRJRkFDVCA9ICJhcnRpZmFjdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FSVElGQUNUX1JFRkVSRU5DRSA9ICJhcnRpZmFjdFJlZmVyZW5jZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9DT1ZFUkFHRSA9ICJhc3NlcnRpb25Db3ZlcmFnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9ERVNDUklQVElPTiA9ICJhc3NlcnRpb25EZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9SRVNVTFQgPSAiYXNzZXJ0aW9uUmVzdWx0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVNTRVJUSU9OX1JFU1VMVF9TVU1NQVJZID0gImFzc2VydGlvblJlc3VsdFN1bW1hcnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BU1NFUlRJT05fUkVTVUxUUyA9ICJhc3NlcnRpb25SZXN1bHRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ0xFQU5VUF9USU1FT1VUX1NFQ09ORFMgPSAiY2xlYW51cFRpbWVvdXRTZWNvbmRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ09ORklHID0gImNvbmZpZ3VyYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT01NRU5UID0gImNvbW1lbnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT05URVhUID0gImNvbnRleHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9ERVRBSUwgPSAiZGV0YWlsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fREVUQUlMX0RFU0NSSVBUSU9OID0gImRldGFpbERlc2NyaXB0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9FTlZJUk9OTUVOVCA9ICJlbnZpcm9ubWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0VOVFJZID0gImVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFJTFVSRV9ERVRBSUwgPSAiZmFpbHVyZURldGFpbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBSUxVUkVfREVUQUlMX0RFU0NSSVBUSU9OID0gImZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBSUxVUkVfTUVTU0FHRSA9ICJmYWlsdXJlTWVzc2FnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0hUVFBfSEVBREVSUyA9ICJodHRwSGVhZGVycyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0lNUExFTUVOVEVSID0gImltcGxlbWVudGVyIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fSU5RVUlSWV9VUkwgPSAiaW5xdWlyeVVSTCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0xJU1RFTl9QT1JUID0gImxpc3RlblBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9MT0cgPSAibG9nIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTE9HX0RVUkFUSU9OID0gImxvZ0R1cmF0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTE9HX0ZJTEUgPSAibG9nRmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01BTl9JTl9USEVfTUlERExFID0gIm1hbkluVGhlTWlkZGxlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUFYX0NPTk5FQ1RJT05TID0gIm1heENvbm5lY3Rpb25zIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9DT05URU5UID0gIm1lc3NhZ2VDb250ZW50IjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTID0gIm1lc3NhZ2VDb250ZW50V2l0aEF0dGFjaG1lbnRzIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01FU1NBR0VfRU5UUlkgPSAibWVzc2FnZUVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9JTlBVVCA9ICJtZXNzYWdlSW5wdXQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NT05JVE9SID0gIm1vbml0b3IiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9PUEVSQVRJTkdfU1lTVEVNID0gIm9wZXJhdGluZ1N5c3RlbSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BSRVJFUV9GQUlMRURfTElTVCA9ICJwcmVyZXFGYWlsZWRMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUFJFUkVRX0xJU1QgPSAicHJlcmVxTGlzdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BST0ZJTEUgPSAicHJvZmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BST0ZJTEVfQVNTRVJUSU9OUyA9ICJwcm9maWxlQXNzZXJ0aW9ucyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTID0gInJlYWRUaW1lb3V0U2Vjb25kcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQgPSAicmVjZWl2ZXJIb3N0QW5kUG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFRElSRUNUID0gInJlZGlyZWN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVQT1JUID0gInJlcG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFUE9SVF9GSUxFID0gInJlcG9ydEZpbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9SVU5USU1FID0gInJ1bnRpbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUID0gInNjaGVtZUFuZEhvc3RQb3J0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQgPSAic2VuZGVySG9zdEFuZFBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TRVJWSUNFX0xPQ0FUSU9OID0gInNlcnZpY2VMb2NhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1NVTU1BUlkgPSAic3VtbWFyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1RFU1RfQVNTRVJUSU9OID0gInRlc3RBc3NlcnRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0FTU0VSVElPTlNfRklMRSA9ICJ0ZXN0QXNzZXJ0aW9uc0ZpbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0FTU0VSVElPTl9JRCA9ICJ0ZXN0QXNzZXJ0aW9uSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0NPVkVSQUdFID0gInRlc3RDb3ZlcmFnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1VERElfRU5UUlkgPSAidWRkaUVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVURESV9LRVkgPSAidWRkaUtleSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1VERElfUkVGRVJFTkNFID0gInVkZGlSZWZlcmVuY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9WRVJCT1NFID0gInZlcmJvc2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX0VMRU1FTlQgPSAid3NkbEVsZW1lbnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX0lOUFVUID0gIndzZGxJbnB1dCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1dTRExfUkVGRVJFTkNFID0gIndzZGxSZWZlcmVuY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX1VSSSA9ICJ3c2RsVVJJIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fWE1MX1BBUlNFUiA9ICJ4bWxQYXJzZXIiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9QQVJUID0gIm1pbWVQYXJ0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9IRUFERVJTID0gIm1pbWVIZWFkZXJzIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01JTUVfQ09OVEVOVCA9ICJtaW1lQ29udGVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0JPVU5EQVJZX1NUUklORyA9ICJib3VuZGFyeVN0cmluZyI7Ci0KLQkvKioKLQkgKiBBdHRyaWJ1dGUgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BTFRFUk5BVEUgPSAiYWx0ZXJuYXRlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQVJSQVlfVFlQRSA9ICJhcnJheVR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BU1NFUlRJT05fREVTQ1JJUFRJT04gPSAiYXNzZXJ0aW9uRGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9CT00gPSAiQk9NIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ0hBUlNFVCA9ICJjaGFyc2V0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ09ERSA9ICJjb2RlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ09MVU1OX05VTUJFUiA9ICJjb2x1bW5OdW1iZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT05WRVJTQVRJT05fSUQgPSAiY29udmVyc2F0aW9uSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT1JSRUxBVElPTl9UWVBFID0gImNvcnJlbGF0aW9uVHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0RBVEUgPSAiZGF0ZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0VOQUJMRUQgPSAiZW5hYmxlZCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0VOVFJZX1RZUEUgPSAiZW50cnlUeXBlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRkFJTFVSRV9NRVNTQUdFID0gImZhaWx1cmVNZXNzYWdlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRkFJTFVSRV9ERVRBSUwgPSAiZmFpbHVyZURldGFpbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0hSRUYgPSAiaHJlZiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lEID0gImlkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSURfVUMgPSAiSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTVBMRU1FTlRFUiA9ICJpbXBsZW1lbnRlciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0xJTkVfTlVNQkVSID0gImxpbmVOdW1iZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9MT0NBVElPTiA9ICJsb2NhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01FRElBID0gIm1lZGlhIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTUVTU0FHRV9FTlRSWSA9ICJtZXNzYWdlRW50cnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NRVNTQUdFUyA9ICJtZXNzYWdlcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FID0gInBhcmVudEVsZW1lbnROYW1lIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVGRVJFTkNFX0lEID0gInJlZmVyZW5jZUlEIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVGRVJFTkNFX1RZUEUgPSAicmVmZXJlbmNlVHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFTEVBU0VfREFURSA9ICJyZWxlYXNlRGF0ZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFUExBQ0UgPSAicmVwbGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFU1VMVCA9ICJyZXN1bHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TUEVDSUZJQ0FUSU9OID0gInNwZWNpZmljYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9USU1FU1RBTVAgPSAidGltZXN0YW1wIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVElUTEUgPSAidGl0bGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9UWVBFID0gInR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9WRVJTSU9OID0gInZlcnNpb24iOwotCi0JLyoqCi0JICogRGVmYXVsdCB2YWx1ZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfVVJJID0gInJlcG9ydC54bWwiOwotCi0JLy8gVEVNUDogVXNlIHRoZSBmb2xsb3dpbmcgcmVwb3J0IHRpdGxlIGZvciB0aGUgZHJhZnQgcmVsZWFzZSBvbmx5LgotCS8vcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfVElUTEUgPSAiV1MtSSBQcm9maWxlCi0JLy8gQ29uZm9ybWFuY2UgUmVwb3J0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JFUE9SVF9USVRMRSA9ICJXUy1JIEJhc2ljIFByb2ZpbGUgQ29uZm9ybWFuY2UgUmVwb3J0LiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1RFU1RfQVNTRVJUSU9OU19ET0NVTUVOVF9VUkkgPSAiaHR0cDovL3d3dy53cy1pLm9yZy9UZXN0aW5nL1Rvb2xzLzIwMDQvMTIvQVAxMF9CUDExX1NTQlAxMF9UQUQueG1sIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9HX1hTTCA9ICIuLi9jb21tb24veHNsL2xvZy54c2wiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfWFNMID0gIi4uL2NvbW1vbi94c2wvcmVwb3J0LnhzbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1hTTF9UWVBFID0gInRleHQveHNsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfWE1MX0VOQ09ESU5HID0gIlVURi04IjsKLQotCS8qKgotCSAqIEJPTSBjb25zdGFudHMuCi0JICogIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgaW50IEJPTV9VVEYxNiA9IDB4RkZGRTsKLQotCXB1YmxpYyBzdGF0aWMgaW50IEJPTV9VVEYxNl9CSUdfRU5ESUFOID0gMHhGRUZGOwotCi0JcHVibGljIHN0YXRpYyBpbnQgQk9NX1VURjggPSAweEVGQkJCRjsKLQotCS8qKgotCSAqIFZhbGlkYXRpb24gY29uc3RhbnRzLgotCSAqICAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUID0gImxpdGVyYWwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0VOQyA9ICJlbmNvZGVkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQyA9ICJkb2N1bWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMgPSAicnBjIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9FTkRQT0lOVCA9ICJlbmRwb2ludCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0KLQkvKioKLQkgKiBXUy1JIGNvbnN0YW50cyAtIGF0dHJpYnV0ZXMgZm9yIGNvbmZvcm1hbmNlIGNsYWltcyAoZGlzY292ZXJ5KS4KLQkgKiAgCi0JICovCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1VERElfQ0xBSU1fS0VZVkFMVUUgPSAiaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1VERElfQ0xBSU1fVE1PREVMS0VZID0gInV1aWQ6NjU3MTkxNjgtNzJjNi0zZjI5LThjMjAtNjJkZWZiMDk2MWMwIjsKLQotCS8qKgotCSAqIFdTLUkgbmFtZXMgYW5kIHZlcnNpb25zIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IHN1cHBvcnRlZAotCSAqIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHRlc3QgdG9vbHMuCi0gICAgICovCi0JLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV9UQURfTkFNRSA9ICJCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV8xXzFfVEFEX05BTUUgPSAiQmFzaWMgUHJvZmlsZSAxLjEgVGVzdCBBc3NlcnRpb25zIjsKLSAgICAvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1QTEVfU09BUF9CSU5ESU5HU19QUk9GSUxFX1RBRF9OQU1FID0gIlNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdKSBUZXN0IEFzc2VydGlvbnMiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVEFDSE1FTlRTX1BST0ZJTEVfVEFEX05BTUUgPSAiQXR0YWNobWVudHMgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdIGFuZCBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0pIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV9UQURfVkVSU0lPTiA9ICIxLjEuMCI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV8xXzFfVEFEX1ZFUlNJT04gPSAiMS4xLjAiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVBMRV9TT0FQX0JJTkRJTkdTX1BST0ZJTEVfVEFEX1ZFUlNJT04gPSAiMS4wLjAiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVEFDSE1FTlRTX1BST0ZJTEVfVEFEX1ZFUlNJT04gPSAiMS4wLjAiOwotCi0JLyoqCi0JICogU3lzdGVtIGRlcGVuZGVudCBsaW5lIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0KLQkJCS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotCS8qKgotCSAqIFN5c3RlbSBkZXBlbmRlbnQgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfU0VQQVJBVE9SID0gU3lzdGVtCi0JCQkuZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0KLQkvKioKLQkgKiBGaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBjb3B5cmlnaHQsIGxpY2Vuc2UgYW5kIGZlZWRiYWNrIGNvbW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlRTX0ZJTEUgPSAiY29tbWVudHMueG1sIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfVEVYVF9YTUwgPSAidGV4dC94bWwiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRV9NVUxUSVBBUlQgPSAibXVsdGlwYXJ0L3JlbGF0ZWQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfUFJFRklYID0gImh0dHA6IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0lfUFJFRklYID0gIldTLUk6ICI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlOGRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci0KLS8qKgotICogUHJpbWFyeSBXUy1JIGV4Y2VwdGlvbi4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLSAgICogU3RhdGljIG5lZWRlZCBmb3Igc2VyaWFsaXphYmxlIGNsYXNzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1NDQ2ODIzMjIyNzY3Mjk5MzA4TDsKLQotICAvKioKLSAgICogVGhyb3dhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aHJvd2FibGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGhvdXQgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFdTSUV4Y2VwdGlvbigpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBleGNlcHRpb24gd2l0aCBhIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbXNnIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKi8KLSAgcHVibGljIFdTSUV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgLy8gRXhjZXB0aW9uCi0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGggYSBtZXNzYWdlIGFuZCByZWxhdGVkIGV4Y2VwdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBtc2cgICAgICAgIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aHJvd2FibGUgdGhhdCBpcyByZWxhdGVkIHRvIHRoaXMgZXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgV1NJRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotCi0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2UKLSAgICB0aGlzLnRocm93YWJsZSA9IHRocm93YWJsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0J3MgdmFsdWVzLgotICAgKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGRldGFpbCBtZXNzYWdlIG9mIHRoaXMgdGhyb3dhYmxlIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgLy9TdHJpbmdXcml0ZXIgc3c7Ci0gICAgLy9QcmludFdyaXRlciBwdzsKLQotICAgIC8vIEFsd2F5cyBnZXQgbWVzc2FnZSBmcm9tIHN1cGVyIGNsYXNzCi0gICAgU3RyaW5nIG1zZyA9IHN1cGVyLmdldE1lc3NhZ2UoKTsKLQotICAgIC8vIElmIHRoaXMgZXhjZXB0aW9uIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgZXhjZXB0aW9uLAotICAgIC8vIHRoZW4gYWRkIGl0IHRvIHRoZSBtZXNzYWdlCi0gICAgaWYgKHRocm93YWJsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIG1zZyArPSAiXG4iCi0gICAgICAgICsgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotICAgICAgICArICIgIE5lc3RlZCBleGNlcHRpb24gaXM6IFxuXG4gICIKLSAgICAgICAgKyB0aHJvd2FibGUudG9TdHJpbmcoKQotICAgICAgICArICJcbiI7Ci0KLSAgICAgIC8vIElmIHRocm93YWJsZSBpcyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24sIAotICAgICAgLy8gdGhlbiBhZGQgY2xhc3MgbmFtZSBhbmQga2V5IHRvIG91dHB1dAotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSA9IChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24pIHRocm93YWJsZTsKLQotICAgICAgICAvLyBHZXQgY2xhc3MgbmFtZSBhbmQga2V5Ci0gICAgICAgIG1zZyArPSAiIC0gIgotICAgICAgICAgICsgbXJlLmdldEtleSgpCi0gICAgICAgICAgKyAiXG5cdCIKLSAgICAgICAgICArICJbQ2xhc3MgTmFtZTogIgotICAgICAgICAgICsgbXJlLmdldENsYXNzTmFtZSgpCi0gICAgICAgICAgKyAiXSI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRocm93YWJsZSBpcyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCAKLSAgICAgIC8vIHRoZW4gdGFyZ2V0IG9mIGV4Y2VwdGlvbgotICAgICAgZWxzZSBpZiAodGhyb3dhYmxlIGluc3RhbmNlb2YgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUgPSAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikgdGhyb3dhYmxlOwotCi0gICAgICAgIC8vIEdldCB0YXJnZXQKLSAgICAgICAgbXNnICs9ICIgLSAiICsgaXRlLmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogUHJpbnQgc3RhY2sgdHJhY2UKLSAgICAgIC8vc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAvL3B3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgIC8vdGhyb3dhYmxlLnByaW50U3RhY2tUcmFjZShwdyk7Ci0KLSAgICAgIC8vIEFkZCBpdCB0byB0aGUgbWVzc2FnZQotICAgICAgLy9tc2cgKz0gc3cudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbWVzc2FnZQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVuY2Fwc3VsYXRlZCB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXRUYXJnZXRFeGNlcHRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRocm93YWJsZQotICAgIHJldHVybiB0aHJvd2FibGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmY1ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLS8qKgotICogU2lnbmFscyB0aGF0IGFuIGF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZSBkZW5vdGVkIGJ5IGEgc3BlY2lmaWVkIAotICogcGF0aG5hbWUgaGFzIGZhaWxlZC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleHRlbmRzIFdTSUV4Y2VwdGlvbgotewotCi0gIC8qKgotICAgKiBTdGF0aWMgbmVlZGVkIGZvciBzZXJpYWxpemFibGUgY2xhc3MKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xOTE2MDEwNDQ0NjAxNjY2NDAxTDsKLQotLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAKLSAgICovCi0gIHB1YmxpYyBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24oU3RyaW5nIG1zZykKLSAgewotICAgIHN1cGVyKG1zZyk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlICBpbml0aWFsIGV4Y2VwdGlvbiB0aHJvd24uCi0gICAqLwotICBwdWJsaWMgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBzdXBlcihtc2csIHRocm93YWJsZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWUzMGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSVJ1bnRpbWVFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgcnVudGltZSBleGNlcHRpb25zIHRoYXQgb2NjdXIgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFdTSVJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBXU0lFeGNlcHRpb24KLXsKLQotICAvKioKLSAgICogU3RhdGljIG5lZWRlZCBmb3Igc2VyaWFsaXphYmxlIGNsYXNzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MzA5MzIwOTgxNTE1NTEzMTcxTDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSVJ1bnRpbWVFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJUnVudGltZUV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lSdW50aW1lRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gbXNnICB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgV1NJUnVudGltZUV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJUnVudGltZUV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aGUgaW5pdGlhbCBleGNlcHRpb24gdGhyb3duLgotICAKLSAgICovCi0gIHB1YmxpYyBXU0lSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBzdXBlcihtc2csIHRocm93YWJsZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJVGFnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiMzQzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotCi0vKioKLSAqIFdTLUkgY29uc3RhbnRzLiAgCi0gKiAgCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJVGFnIGV4dGVuZHMgWE1MVGFncwotewotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFdTREwgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfSU1QT1JUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiaW1wb3J0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9UWVBFUyA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgInR5cGVzIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9NRVNTQUdFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAibWVzc2FnZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfRE9DVU1FTlRBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImRvY3VtZW50YXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0RFRklOSVRJT05TID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZGVmaW5pdGlvbnMiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0JJTkRJTkcgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJiaW5kaW5nIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9PUEVSQVRJT04gPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJvcGVyYXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1BBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwYXJ0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9JTlBVVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImlucHV0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9PVVRQVVQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJvdXRwdXQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0ZBVUxUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZmF1bHQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1NFUlZJQ0UgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJzZXJ2aWNlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9QT1JUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAicG9ydCIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfUE9SVFRZUEUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwb3J0VHlwZSIpOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9TT0FQX0JJTkRJTkcgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImJpbmRpbmciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfQk9EWSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYm9keSIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9IRUFERVIgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImhlYWRlciIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9IRUFERVJGQVVMVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiaGVhZGVyZmF1bHQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfRkFVTFQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImZhdWx0Iik7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX01JTUVfQ09OVEVOVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSwgImNvbnRlbnQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX01JTUVfWE1MID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAibWltZVhtbCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9QQVJUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAicGFydCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9NVUxUSVBBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX01JTUUsICJtdWx0aXBhcnRSZWxhdGVkIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1dTRExfQVJSQVlUWVBFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiYXJyYXlUeXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9XU0RMX05BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgIm5hbWVzcGFjZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfV1NETF9MT0NBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImxvY2F0aW9uIik7Ci0KLSAgLyoqCi0gICAqIE5hbWVzcGFjZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfQ0xBSU0gPQotICAgICJodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLyI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQID0KLSAgICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfU09BUEVOQyA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX0JBU0lDX1BST0ZJTEUxMCA9Ci0gICAgImh0dHA6Ly93c2kub3JnL3Byb2ZpbGVzL2Jhc2ljMS4wLyI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBTT0FQRU5DX0FSUkFZID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQRU5DLCAiQXJyYXkiKTsKLQotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFdTLUkgY2xhaW0gZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTSV9DTEFJTSA9IG5ldyBRTmFtZShOU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfQ0xBSU1fQ09ORk9STVNUTyA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9DTEFJTSwgImNvbmZvcm1zVG8iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1NPQVBfTVVTVFVOREVSU1RBTkQgPQotICAgIG5ldyBRTmFtZShOU19VUklfU09BUCwgIm11c3RVbmRlcnN0YW5kIik7Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllZCBuYW1lcyBvZiBTT0FQIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1NPQVBfRU5WRUxPUEUgPSBuZXcgUU5hbWUoTlNfVVJJX1NPQVAsICJFbnZlbG9wZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9CT0RZID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQLCAiQm9keSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9GQVVMVCA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkZhdWx0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9TT0FQX0hFQURFUiA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkhlYWRlciIpOwotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OWFhMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotCi0vKioKLSAqIFRoZSBBbmFseXplciB3aWxsIHByb2Nlc3MgYWxsIFByb2ZpbGUgY29uZm9ybWFuY2UgZnVuY3Rpb25zLgotICogVGhpcyBjbGFzcyBzaG91bGQgYmUgc3ViLWNsYXNzZWQgZm9yIGVhY2ggcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW5hbHl6ZXIKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVTT1VSQ0VfQlVORExFX05BTUUgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXIiOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFVTQUdFX01FU1NBR0UgPQotICAgICJVc2FnZTogQW5hbHl6ZXIgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+IjsKLQotICBwcm90ZWN0ZWQgUmVwb3J0ZXIgcmVwb3J0ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCA9IG51bGw7Ci0gIHByb3RlY3RlZCBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZUluZm8gPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFRvb2xJbmZvIHRvb2xJbmZvID0gbnVsbDsKLQotICAvKioKLSAgICogUHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeS4KLSAgICovCi0gIHByb3RlY3RlZCBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQotICAvKioKLSAgICogUHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeS4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gbnVsbDsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnIGZpbGUgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGFuYWx5emVyQ29uZmlnTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIGludCBhbmFseXplckNvbmZpZ0luZGV4ID0gMDsKLQotICAvKioKLSAgICogUHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgTG9nIGxvZyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFyZ3MgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdG9vbEluZm8gIGFuYWx5emVyIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplcihTdHJpbmdbXSBhcmdzLCBUb29sSW5mbyB0b29sSW5mbykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW5pdCh0b29sSW5mbyk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QgICAKLSAgICB0aGlzLmFuYWx5emVyQ29uZmlnTGlzdC5hZGQoCi0gICAgICBhbmFseXplckNvbmZpZ0luZGV4LAotICAgICAgZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCkpOwotICAgIGdldEFuYWx5emVyQ29uZmlnKCkuaW5pdChtZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5wYXJzZUFyZ3MoYXJncywgdHJ1ZSk7Ci0KLSAgICAvLyBEaXNwbGF5IGNvcHlyaWdodCBhbmQgb3B0aW9ucyB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICAgVGVzdFV0aWxzLnByaW50VG9vbEluZm8odG9vbEluZm8pOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRBbmFseXplckNvbmZpZygpLnRvU3RyaW5nKCkpOwotCi0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgcHJpbnRNZXNzYWdlKAotICAgICAgInByb2dyZXNzMDEiLAotICAgICAgbnVsbCwKLSAgICAgICJQbGVhc2Ugd2FpdCB3aGlsZSB0aGUgc3BlY2lmaWVkIGFydGlmYWN0cyBhcmUgYW5hbHl6ZWQuLi4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqIEBwYXJhbSBhcmdzICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIHRvb2xJbmZvICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgIGZsYWcgZm9yIGNvbmZpZyBvcHRpb25zIHZhbGlkYXRpb24uIAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBjcmVhdGluZyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXIoU3RyaW5nW10gYXJncywgVG9vbEluZm8gdG9vbEluZm8sIGJvb2xlYW4gdmFsaWRhdGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQodG9vbEluZm8pOwotCi0gICAgLy8gR2V0IG5ldyBjb25maWcgb2JqZWN0ICAgCi0gICAgdGhpcy5hbmFseXplckNvbmZpZ0xpc3QuYWRkKAotICAgICAgICBhbmFseXplckNvbmZpZ0luZGV4LAotICAgICAgICBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKSk7Ci0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5pbml0KG1lc3NhZ2VMaXN0KTsKLQotICAgIC8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLSAgICBnZXRBbmFseXplckNvbmZpZygpLnBhcnNlQXJncyhhcmdzLCB2YWxpZGF0ZSk7Ci0KLSAgICAvLyBEaXNwbGF5IGNvcHlyaWdodCBhbmQgb3B0aW9ucyB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICAgVGVzdFV0aWxzLnByaW50VG9vbEluZm8odG9vbEluZm8pOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRBbmFseXplckNvbmZpZygpLnRvU3RyaW5nKCkpOwotCi0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAicHJvZ3Jlc3MwMSIsCi0gICAgICAgIG51bGwsCi0gICAgIlBsZWFzZSB3YWl0IHdoaWxlIHRoZSBzcGVjaWZpZWQgYXJ0aWZhY3RzIGFyZSBhbmFseXplZC4uLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnTGlzdCAgYW5hbHl6ZXIgY29uZmlnIGZpbGUgbGlzdC4KLSAgICogQHBhcmFtIHRvb2xJbmZvICAgICAgICAgICAgYW5hbHl6ZXIgdG9vbCBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGluc3RhbmNlIG9mIHRoZSBhbmFseXplciB0b29sLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWdMaXN0LCBUb29sSW5mbyB0b29sSW5mbykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KHRvb2xJbmZvKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0ID0gYW5hbHl6ZXJDb25maWdMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4KLSAgICogQHBhcmFtIHRvb2xJbmZvICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdChUb29sSW5mbyBpbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLnRvb2xJbmZvID0gaW5mbzsKLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICBtZXNzYWdlTGlzdCA9IG5ldyBNZXNzYWdlTGlzdChSRVNPVVJDRV9CVU5ETEVfTkFNRSk7Ci0KLSAgICAvLyBDcmVhdGUgcHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeQotICAgIGZhY3RvcnkgPSBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBkb2N1bWVudEZhY3RvcnkgPSBEb2N1bWVudEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGFsbCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KLSAgICogQHJldHVybiBzdGF0dXMgY29kZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgaW50IHZhbGlkYXRlQWxsKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IHN0YXR1c0NvZGUgPSAwOwotICAgIGludCB0ZW1wU3RhdHVzQ29kZTsKLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhbmFseXplckNvbmZpZ0xpc3Quc2l6ZSgpOyBpbmRleCsrKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImluZGV4OiAiICsgaW5kZXgpOwotCi0gICAgICAvLyBTZXQgY3VycmVudCBhbmFseXplciBjb25maWcgaW5kZXggCi0gICAgICBzZXRBbmFseXplckNvbmZpZyhpbmRleCk7Ci0KLSAgICAgIGlmICgodGVtcFN0YXR1c0NvZGUgPSB2YWxpZGF0ZUNvbmZvcm1hbmNlKCkpID4gc3RhdHVzQ29kZSkKLSAgICAgICAgc3RhdHVzQ29kZSA9IHRlbXBTdGF0dXNDb2RlOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXNDb2RlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYWxsIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gZnVuY3Rpb25zLgotICAgKiBAcmV0dXJuIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvIGdldFRvb2xJbmZvKCkKLSAgCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b29sSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY3VycmVudCBhbmFseXplciBjb25maWd1cmF0aW9uLgotICAgKiBAcGFyYW0gaW5kZXggIHVycmVudCBhbmFseXplciBjb25maWd1cmF0aW9uLgotICAgKiBAc2VlICNnZXRBbmFseXplckNvbmZpZwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0QW5hbHl6ZXJDb25maWcoaW50IGluZGV4KQotICB7Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZ0luZGV4ID0gaW5kZXg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGdldEFuYWx5emVyQ29uZmlnSW5kZXgoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYW5hbHl6ZXJDb25maWdJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHJldHVybiBhbmFseXplciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRBbmFseXplckNvbmZpZwotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIGdldEFuYWx5emVyQ29uZmlnKCkKLSAgewotICAgIHJldHVybiAoQW5hbHl6ZXJDb25maWcpIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0LmdldChhbmFseXplckNvbmZpZ0luZGV4KTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gbWVzc2FnZURhdGEgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY1ByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBNZXNzYWdlTGlzdC5wcmludE1lc3NhZ2UoCi0gICAgICBSRVNPVVJDRV9CVU5ETEVfTkFNRSwKLSAgICAgIGtleSwKLSAgICAgIG1lc3NhZ2VEYXRhLAotICAgICAgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIFN0YXJ0ICAgICAKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIGdldEFuYWx5emVyQ29uZmlnKCkudG9YTUxTdHJpbmcoCi0gICAgICAgIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9BTkFMWVpFUl9DT05GSUcpKTsKLQotICAgIC8vIEVuZAotICAgIHB3LnByaW50bG4odG9vbEluZm8uZ2V0RW5kWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgaWYgKGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VmVyYm9zZU9wdGlvbigpKQotICAgIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDg0ODJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIC8qKgotIyAgKiA8Y29weXJpZ2h0PgotIyAgKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoKLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotCi0jCi0jIEFuYWx5emVyIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IEFuYWx5emVyIC1jb25maWcgPGNvbmZpZ0ZpbGVuYW1lPgotY3JlYXRlZDAxPUNvbmZvcm1hbmNlIHJlcG9ydCBoYXMgYmVlbiBjcmVhdGVkLgotcHJvZ3Jlc3MwMT1QbGVhc2Ugd2FpdCB3aGlsZSB0aGUgc3BlY2lmaWVkIGFydGlmYWN0cyBhcmUgYW5hbHl6ZWQuLi4KLWVycm9yMDE9QW5hbHl6ZXIgRXJyb3I6Ci1lcnJvcjAyPUFuYWx5emVyIFN0b3BwZWQgQnkgRXhjZXB0aW9uOgotZXJyb3IwMz1UaGUgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBwcm9jZXNzIGZhaWxlZC4KLWV4Y2VwdGlvbjAxPUV4Y2VwdGlvbjoKLWNvbmZpZzAxPUFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgbm90IGZvdW5kLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwMj1Db3VsZCBub3QgZmluZCBsb2cgZmlsZS4gIFNwZWNpZmllZCBmaWxlIGxvY2F0aW9uOgotY29uZmlnMDM9Q291bGQgbm90IGZpbmQgV1NETCBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1DYW4gbm90IHNwZWNpZnkgYm90aCB0aGUgV1NETCByZWZlcmVuY2UgYW5kIFVEREkgcmVmZXJlbmNlIG9wdGlvbnMuCi1jb25maWcwNT1XU0RMIGRvY3VtZW50IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuCi1jb25maWcwNj1JbnZhbGlkIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZWxlbWVudDoKLWNvbmZpZzA3PUJvdGggdGhlIDx3c2RsRWxlbWVudD4gYW5kIDx3c2RsVVJJPiBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4KLWNvbmZpZzA4PUNvdWxkIG5vdCByZWFkIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNwZWNpZmllZCBmaWxlIGxvY2F0aW9uOgotY29uZmlnMDk9VGhlIHBhcmVudEVsZW1lbnROYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aXRoIGEgV1NETCB0eXBlIG9mIHBvcnQgb3Igb3BlcmF0aW9uLgotY29uZmlnMTA9VGhlIC13c2RsRWxlbWVudCBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuCi1jb25maWcxMT1UaGUgLXNlcnZpY2VMb2NhdGlvbiBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuCi1jb25maWcxMj1UaGUgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkOgotY29uZmlnMTM9T3B0aW9uIGRpZCBub3QgY29udGFpbiBhIHZhbHVlLiAgU3BlY2lmaWVkIG9wdGlvbjoKLWNvbmZpZzE0PUNvdWxkIG5vdCBmaW5kIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcxNT1SZXBvcnQgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgcmVwbGFjZSBvcHRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCi1jb25maWcxNj1UZXN0IGFzc2VydGlvbiBkb2N1bWVudCBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZC4KLWNvbmZpZzE3PUNvdWxkIG5vdCBnZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi1jb25maWcxOD1JbnZhbGlkIGNvcnJlbGF0aW9uIHR5cGUgc3BlY2lmaWVkLgotY29uZmlnMTk9VGhlIFdTREwgZWxlbWVudCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLgotY29uZmlnMjA9VGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQgKFRBRClkb2N1bWVudCB3YXMgZWl0aGVyIG5vdCBmb3VuZCBvciBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhZDVhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRlc3QgYXNzZXJ0aW9ucyBhY3Jvc3MgYWxsIGFydGlmYWN0cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFuYWx5emVyQ29udGV4dAotewotICBwcm90ZWN0ZWQgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbyA9IG51bGw7Ci0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbnRleHQgd2l0aCBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQoU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmZXJlbmNlID0gc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEByZXR1cm4gc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFNlcnZpY2VSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlIGdldFNlcnZpY2VSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIGEgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFNlcnZpY2VSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSZWZlcmVuY2UoU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmZXJlbmNlID0gc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGVJbmZvLgotICAgKiBAcmV0dXJuIENhbmRpZGF0ZUluZm8uCi0gICAqIEBzZWUgI3NldENhbmRpZGF0ZUluZm8KLSAgICovCi0gIHB1YmxpYyBDYW5kaWRhdGVJbmZvIGdldENhbmRpZGF0ZUluZm8oKQotICB7Ci0gICAgcmV0dXJuIGNhbmRpZGF0ZUluZm87Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgY2FuZGlkYXRlSW5mby4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZUluZm8gdGhlIGNhbmRpZGF0ZUluZm8gdG8gc2V0LgotICAgKiBAc2VlICNnZXRDYW5kaWRhdGVJbmZvCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDYW5kaWRhdGVJbmZvKENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbykKLSAgewotICAgIHRoaXMuY2FuZGlkYXRlSW5mbyA9IGNhbmRpZGF0ZUluZm87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB3c2RsRG9jdW1lbnQuCi0gICAqIEByZXR1cm4gV1NETERvY3VtZW50LgotICAgKiBAc2VlICNzZXRXc2RsRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V3NkbERvY3VtZW50KCkgewotICAgICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB3c2RsRG9jdW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgdGhlIHdzZGxEb2N1bWVudCB0byBzZXQuCi0gICAqIEBzZWUgI2dldFdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbERvY3VtZW50KFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpIHsKLSAgICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZjVhMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi0vKioKLSAqIEJhc2UgRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gRmFpbC4KLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICogKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3MDA3NjM1NzQzMjU4OTMzTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzNGE1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gTm90IEFwcGxpY2FibGUuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM5MDU1MjM3ODI5OTQxMTI1NjRMOwotCi0JLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIGFyZzAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oU3RyaW5nIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NTdkNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi0vKioKLSAqIEV4Y2VwdGlvbiBmb3IgQXNzZXJ0aW9uIFBhc3MuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvblBhc3NFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotCS8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzI4NTg0MjI4MzU0MTgxMEw7Ci0KLQkvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvblBBc3NFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25QQXNzRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvblJlc3VsdEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDVhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gUmVzdWx0LgotICogCi0gKiBAYXV0aG9yIGd0dXJyZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTY3MjA2ODQ3MDAxNTI2MzJMOwotCXByaXZhdGUgU3RyaW5nIGRldGFpbE1lc3NhZ2U7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9ucmVzdWx0RXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGRldGFpbE1lc3NhZ2UgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBhcmcwIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oU3RyaW5nIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgICBkZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBhcmcxICBmdXJ0aGVyIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICAgIGRldGFpbE1lc3NhZ2UgPSBhcmcxOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRldGFpbE1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGRldGFpbE1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERldGFpbE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGRldGFpbE1lc3NhZ2U7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Jhc2ljUHJvZmlsZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNmNlNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiwgUGFyYXNvZnQsIEJlYWNvbiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEJlYWNvbklUIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRGVmYXVsdFJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NJUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZTsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CaW5kaW5nRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7Ci0KLQotLyoqCi0gKiBBbmFseXplcyBsb2cgZmlsZXMgdG8gY29uZmlybSBjb25mb3JtYW5jZSB0byBhIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgSmltIENsdW5lCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEJhc2ljUHJvZmlsZUFuYWx5emVyIGV4dGVuZHMgQW5hbHl6ZXIKLXsKLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX05BTUUgPSAiQW5hbHl6ZXIiOwotCi0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50IHRvIGFuYWx5emUuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG51bGw7Ci0gIC8vIHByaXZhdGUgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gY3JlYXRlIGEgQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICovCi0gIHB1YmxpYyBCYXNpY1Byb2ZpbGVBbmFseXplcihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhcmdzLCBuZXcgVG9vbEluZm8oVE9PTF9OQU1FKSk7Ci0gICAgbmV3IFhNTERvY3VtZW50Q2FjaGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgZmxhZyBmb3IgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHZhbGlkYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIEJhc2ljUHJvZmlsZUFuYWx5emVyKFN0cmluZ1tdIGFyZ3MsIGJvb2xlYW4gdmFsaWRhdGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFyZ3MsIG5ldyBUb29sSW5mbyhUT09MX05BTUUpLCB2YWxpZGF0ZSk7Ci0gICAgbmV3IFhNTERvY3VtZW50Q2FjaGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWdMaXN0IGEgbGlzdCBvZiBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGFuYWx5emVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gY3JlYXRlIGEgQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICovCi0gIHB1YmxpYyBCYXNpY1Byb2ZpbGVBbmFseXplcihMaXN0IGFuYWx5emVyQ29uZmlnTGlzdCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYW5hbHl6ZXJDb25maWdMaXN0LCBuZXcgVG9vbEluZm8oVE9PTF9OQU1FKSk7Ci0gICAgbmV3IFhNTERvY3VtZW50Q2FjaGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWdMaXN0IGEgbGlzdCBvZiBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGFuYWx5emVyLgotICAgKiBAcGFyYW0gd3NkbFVSSSBhIHdzZGwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIEJhc2ljUHJvZmlsZUFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWdMaXN0LCBTdHJpbmcgd3NkbFVSSSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZ0xpc3QsIG5ldyBUb29sSW5mbyhUT09MX05BTUUpKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgV1NETCBkb2N1bWVudAotICAgICAgaWYgKHdzZGxVUkkgIT0gbnVsbCkKLSAgICAgICAgdGhpcy53c2RsRG9jdW1lbnQgPSBuZXcgV1NETERvY3VtZW50KHdzZGxVUkkpOwotICAgIH0KLQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24od2UuZ2V0TWVzc2FnZSgpLCB3ZSk7Ci0gICAgfQotCi0gIH0KLSAgCi0gIHByaXZhdGUgV1NETERvY3VtZW50IGdldFdzZGxGcm9tVWRkaSgpIHsKLSAgICAgIFdTRExEb2N1bWVudCB3c2RsRG9jID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgICAgICAgVURESVByb3h5IHVkZGlQcm94eSA9IG5ldyBVRERJUHJveHkoKTsKLSAgICAgICAgICBVRERJUmVmZXJlbmNlIHVkZGlSZWZlcmVuY2UgPSBnZXRBbmFseXplckNvbmZpZygpLmdldFVERElSZWZlcmVuY2UoKTsKLSAgICAgICAgICB1ZGRpUHJveHkuc2V0SW5xdWlyeVVSTCh1ZGRpUmVmZXJlbmNlLmdldElucXVpcnlVUkwoKSk7Ci0gICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAgICAgICBpZiAodWRkaVJlZmVyZW5jZS5nZXRLZXlUeXBlKCkuZXF1YWxzKFVERElSZWZlcmVuY2UuQklORElOR19LRVkpKSB7Ci0gICAgICAgICAgICAgIEJpbmRpbmdEZXRhaWwgYmluZGluZ0RldGFpbCA9IHVkZGlQcm94eS5nZXRfYmluZGluZ0RldGFpbCgKLSAgICAgICAgICAgICAgICAgICAgICB1ZGRpUmVmZXJlbmNlLmdldEtleSgpKTsKLSAgICAgICAgICAgICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IChCaW5kaW5nVGVtcGxhdGUpIGJpbmRpbmdEZXRhaWwuCi0gICAgICAgICAgICAgICAgICAgICAgZ2V0QmluZGluZ1RlbXBsYXRlVmVjdG9yKCkuZWxlbWVudEF0KDApOwotICAgICAgICAgICAgICB0TW9kZWwgPSBVRERJVXRpbHMuZmluZFRNb2RlbCh1ZGRpUHJveHksIGJpbmRpbmdUZW1wbGF0ZSwgZmFsc2UpOwotICAgICAgICAgIH0gZWxzZSB7IC8vIFVERElSZWZlcmVuY2UuVE1PREVMX0tFWQotICAgICAgICAgICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gdWRkaVByb3h5LmdldF90TW9kZWxEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotICAgICAgICAgICAgICB0TW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCkuZWxlbWVudEF0KDApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIFN0cmluZyBvdmVydmlld1VSTCA9IFVERElVdGlscy5nZXRPdmVydmlld1VSTCh0TW9kZWwpOwotICAgICAgICAgIFN0cmluZyB3c2RsVVJJID0gVURESVV0aWxzLmdldFdTRExMb2NhdGlvbihvdmVydmlld1VSTCk7Ci0gICAgICAgICAgd3NkbERvYyA9IG5ldyBXU0RMRG9jdW1lbnQod3NkbFVSSSk7Ci0KLSAgICAgICAgICAvKiBUT0RPOiAgSSByZWZhY3RvcmVkIHRoaXMgY29kZSBmcm9tIEJTUDMwMDEgYnV0IEknbSBub3Qgc3VyZSB0aGF0Ci0gICAgICAgICAgICogaXQncyBjb3JyZWN0LiAgVGhpcyBvdmVycmlkZXMgdGhlIDx3c2RsRWxlbWVudD4gY2hpbGQgb2YKLSAgICAgICAgICAgKiA8dWRkaVJlZmVyZW5jZT4gZnJvbSB0aGUgY29uZmlnIGZpbGUsIHdoaWNoIG5ldmVyIGdldHMgdXNlZC4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICAvLyBJZiB0aGUgd3NkbEVsZW1lbnQgZG9lcyBub3QgZXhpc3QsIHRoZW4gc2V0IGl0Ci0gICAgICAgICAgaWYgKGFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCkuZ2V0V1NETEVsZW1lbnQoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gVURESVV0aWxzLmdldEJpbmRpbmcob3ZlcnZpZXdVUkwsIHdzZGxEb2MpOwotICAgICAgICAgICAgICBTdHJpbmcgYmluZGluZ05hbWUgPQotICAgICAgICAgICAgICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0KLSAgICAgICAgICAgICAgICAgIGJpbmRpbmcgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICAgIC8vIEdldCBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgYW5kIHNldCBpbiBhbmFseXplckNvbnRleHQKLSAgICAgICAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0gICAgICAgICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgICAgICAgIHdzZGxFbGVtZW50LnNldFR5cGUoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICAgICAgICAgICAgYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5zZXRXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiB3c2RsRG9jOwotCi0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAvKiBJZiB0aGUgd3NkbERvYyBpcyBzZXQgYXQgdGhlIHBvaW50IG9mIHRoZSBleGNlcHRpb24sIHJldHVybiBpdDsKLSAgICAgICAgICogb3RoZXJ3aXNlIHJldHVybiBudWxsLiAqLwotICAgICAgICByZXR1cm4gd3NkbERvYzsKLSAgICB9Ci0gIH0KLSAgCi0gIAotICAvKioKLSAgICogUHJvY2VzcyBhbGwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBmdW5jdGlvbnMuCi0gICAqIEByZXR1cm4gc3RhdHVzIGNvZGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gcHJvY2VzcyBmYWlsZWQuCi0gICAqLwotICBwdWJsaWMgaW50IHZhbGlkYXRlQ29uZm9ybWFuY2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbnQgc3RhdHVzQ29kZSA9IDA7Ci0KLSAgICBSZXBvcnQgcmVwb3J0ID0gbnVsbDsKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCA9IG51bGw7Ci0KLSAgICAvLyBTZXQgdXAgaW5pdGlhbCBhbmFseXplciBjb250ZXh0IGJhc2VkIG9uIGVudHJpZXMgaW4gdGhlIGNvbmZpZyBmaWxlCi0gICAgdGhpcy5hbmFseXplckNvbnRleHQgPQotICAgICAgbmV3IEFuYWx5emVyQ29udGV4dChuZXcgU2VydmljZVJlZmVyZW5jZShnZXRBbmFseXplckNvbmZpZygpKSk7Ci0KLSAgICBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICB0aGlzLnByb2ZpbGVBc3NlcnRpb25zID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5nZXRQcm9maWxlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgICAgICBnZXRBbmFseXplckNvbmZpZygpLmdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpKTsKLQotICAgICAgaWYgKHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcyMCIsCi0gICAgICAgCQkgICAiVGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQgKFRBRClkb2N1bWVudCB3YXMgZWl0aGVyIG5vdCBmb3VuZCBvciBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLiIpKTsgIAotICAgICAgfQkKLQotICAgICAgLy8gQ3JlYXRlIHJlcG9ydCBmcm9tIGRvY3VtZW50IGZhY3RvcnkKLSAgICAgIHJlcG9ydCA9IGRvY3VtZW50RmFjdG9yeS5uZXdSZXBvcnQoKTsKLSAgICAgIHJlcG9ydC5zZXRMb2NhdGlvbihnZXRBbmFseXplckNvbmZpZygpLmdldFJlcG9ydExvY2F0aW9uKCkpOwotCi0gICAgICAvLyBDcmVhdGUgcmVwb3J0IGNvbnRleHQKLSAgICAgIFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCA9Ci0gICAgICAgIG5ldyBSZXBvcnRDb250ZXh0KAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9USVRMRSwKLSAgICAgICAgICBwcm9maWxlQXNzZXJ0aW9ucywKLSAgICAgICAgICB0aGlzKTsKLSAgICAgIHJlcG9ydC5zZXRSZXBvcnRDb250ZXh0KHJlcG9ydENvbnRleHQpOwotCi0gICAgICAvLyBDcmVhdGUgcmVwb3J0IHdyaXRlcgotICAgICAgcmVwb3J0V3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1JlcG9ydFdyaXRlcigpOwotICAgICAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotICAgICAgLy9yZXBvcnRXcml0ZXIuc2V0V3JpdGVyKG5ldyBGaWxlV3JpdGVyKGFuYWx5emVyQ29uZmlnLmdldFJlcG9ydExvY2F0aW9uKCkpKTsKLSAgICAgIHJlcG9ydFdyaXRlci5zZXRXcml0ZXIoZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLQotICAgICAgLy8gQ3JlYXRlIHJlcG9ydGVyCi0gICAgICB0aGlzLnJlcG9ydGVyID0gbmV3IERlZmF1bHRSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0KLSAgICAgIC8vIGZldGNoIFdTREwgaWYgbm90IHNldCBpbiBjb25zdHJ1Y3RvcgotICAgICAgLy8gRmlyc3QsIGF0dGVtcHQgdG8gZ2V0IHRoZSBXU0RMIFVSSSBmcm9tIGEgVURESSB0TW9kZWwKLSAgICAgIGlmICgod3NkbERvY3VtZW50ID09IG51bGwpICYmIChnZXRBbmFseXplckNvbmZpZygpLmlzVURESVJlZmVyZW5jZVNldCgpKSkKLSAgICAgICAgICAgICAgd3NkbERvY3VtZW50ID0gZ2V0V3NkbEZyb21VZGRpKCk7Ci0KLSAgICAgIC8qIE5leHQsIHRyeSB0byB1c2UgdGhlIFdTREwgc2V0dGluZ3MgZnJvbSB0aGUgY29uZmlnIGZpbGUuICBJZiB3ZSBjYW4ndAotICAgICAgICogZmV0Y2ggdGhhdCBXU0RMLCBhbmQgdGhlIGNvbmZpZyBmaWxlIGlzIHNldCB1cCB0byB0ZXN0IGEgV1NETCwgdGhlbiB0aGUKLSAgICAgICAqIHZhbGlkYXRvciBmYWlscyBoZXJlLiAqLwotICAgICAgaWYgKCh3c2RsRG9jdW1lbnQgPT0gbnVsbCkgJiYgKGdldEFuYWx5emVyQ29uZmlnKCkuaXNXU0RMUmVmZXJlbmNlU2V0KCkpKQotICAgICAgewotICAgICAgICAgIHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoZ2V0QW5hbHl6ZXJDb25maWcoKS4KLSAgICAgICAgICAgICAgICAgIGdldFdTRExMb2NhdGlvbigpKTsKLQotICAgICAgICAgIGlmICh3c2RsRG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNSIsCi0gICAgICAgICAgICAgICAgICAgICAgIldTREwgZG9jdW1lbnQgd2FzIGVpdGhlciBub3QgZm91bmQgb3IgY291bGQgbm90IGJlICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAicHJvY2Vzc2VkLiIpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyoKLSAgICAgICAqIE9ubHkgdmFsaWRhdGUgbWVzc2FnZXMgYWdhaW5zdCBhIHdzZGwgZG9jdW1lbnQgaWYgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICAgICAqIGRvZXMgbm90IGNvbnRhaW4gc29hcCAxLjIgYmluZGluZ3MuIAotICAgICAgICovCi0JICBpZiAoV1NETFV0aWxzLmlzU09BUDEyV1NETCh3c2RsRG9jdW1lbnQpICYmIGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsKQotCQkgIGdldEFuYWx5emVyQ29uZmlnKCkuc2V0V1NETFJlZmVyZW5jZShudWxsKTsKLQkgIGVsc2UKLQkJICBhbmFseXplckNvbnRleHQuc2V0V3NkbERvY3VtZW50KHdzZGxEb2N1bWVudCk7ICAKLQotICAgICAgLy8gU3RhcnQgd3JpdGluZyByZXBvcnQKLSAgICAgIHRoaXMucmVwb3J0ZXIuc3RhcnRSZXBvcnQoKTsKLQotICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBhcnRpZmFjdCBlbGVtZW50cyBmcm9tIHRoZSBUQUQsIHZhbGlkYXRpbmcgZWFjaCBvbmUKLSAgICAgIHByb2ZpbGVBc3NlcnRpb25zLmdldEFydGlmYWN0TGlzdCgpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwcm9maWxlQXNzZXJ0aW9ucy5nZXRBcnRpZmFjdExpc3QoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICBpLmhhc05leHQoKTsgKSB7Ci0gICAgICAgICAgU3RyaW5nIGFydGlmYWN0VHlwZSA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgIC8vIFNldCBjdXJyZW50IGFydGlmYWN0Ci0gICAgICAgICAgcmVwb3J0QXJ0aWZhY3QgPSBzZXRDdXJyZW50QXJ0aWZhY3QoQXJ0aWZhY3RUeXBlLmdldEFydGlmYWN0VHlwZSgKLSAgICAgICAgICAgICAgICAgIGFydGlmYWN0VHlwZSkpOwotICAgICAgICAgIHZhbGlkYXRlKHJlcG9ydEFydGlmYWN0LCBmYWN0b3J5LmdldFZhbGlkYXRvckZvckFydGlmYWN0KAotICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RUeXBlKSk7Ci0gICAgICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluaXNoIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICAgIHJlcG9ydGVyLmZpbmlzaFJlcG9ydCgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgICBTdHJpbmcgbWVzc2FnZSA9Ci0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImVycm9yMDMiLAotICAgICAgICAgICJUaGUgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBwcm9jZXNzIGZhaWxlZC4iKTsKLQotICAgICAgLy8gRmluaXNoIHJlcG9ydAotICAgICAgaWYgKHJlcG9ydGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHB3LnByaW50bG4obWVzc2FnZSk7Ci0gICAgICAgIHB3LnByaW50bG4oCi0gICAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgiZXhjZXB0aW9uMDEiLCAiRXhjZXB0aW9uOiAiKQotICAgICAgICAgICAgKyBlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UocHcpOwotICAgICAgICByZXBvcnRlci5maW5pc2hSZXBvcnRXaXRoRXJyb3Ioc3cudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKG1lc3NhZ2UsIGUpOwotICAgIH0KLSAgICBmaW5hbGx5IAotICAgIHsKLSAgICAgIGlmIChyZXBvcnRXcml0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVwb3J0V3JpdGVyLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcG9ydCAhPSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPQotICAgICAgICAocmVwb3J0LmdldFN1bW1hcnlSZXN1bHQoKS5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQpCi0gICAgICAgICAgPyAwCi0gICAgICAgICAgOiAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzQ29kZTsKLSAgfQotCi0gIC8qKgotICAgKiBSdW4gdGVzdCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LCBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcikKLSAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uIAotICB7Ci0gICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFdTRExWYWxpZGF0b3JJbXBsKQotCXsKLSAgICAJKChXU0RMVmFsaWRhdG9ySW1wbCl2YWxpZGF0b3IpLmluaXQoYW5hbHl6ZXJDb250ZXh0LCBwcm9maWxlQXNzZXJ0aW9ucywgcmVwb3J0QXJ0aWZhY3QsIGdldEFuYWx5emVyQ29uZmlnKCksIHJlcG9ydGVyLAotICAgIAkJCWdldEFuYWx5emVyQ29uZmlnSW5kZXgoKSA9PSAwKTsKLQl9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbGlkYXRvci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFzc2VydGlvbnMsIHJlcG9ydEFydGlmYWN0LCBnZXRBbmFseXplckNvbmZpZygpLCByZXBvcnRlcik7Ci0gICAgfQotCi0gICAgaWYgKHZhbGlkYXRvci5ydW5UZXN0cygpKSB7Ci0gICAgICAgIHZhbGlkYXRvci52YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgICAgIHZhbGlkYXRvci5jbGVhbnVwKCk7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHZhbGlkYXRvci5zZXRBbGxNaXNzaW5nSW5wdXQoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZSBmb3IgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSU8gcHJvYmxlbXMgb2NjdXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLSAgICBBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTZXQgZG9jdW1lbnQgYnVpbGRlciBmYWN0b3J5IGNsYXNzCi0gICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoCi0gICAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoV1NJUHJvcGVydGllcy5QUk9QX0pBWFBfRE9DVU1FTlRfRkFDVE9SWSkpOwotCi0gICAgICAvLyBTZXQgdGhlIHN5c3RlbSBwcm9wZXJ0eSBmb3IgVURESTRKIHRyYW5zcG9ydAotICAgICAgU3lzdGVtLnNldFByb3BlcnR5KAotICAgICAgICBUcmFuc3BvcnRGYWN0b3J5LlBST1BFUlRZX05BTUUsCi0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVHJhbnNwb3J0RmFjdG9yeS5QUk9QRVJUWV9OQU1FKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSB0aGUgYW5hbHl6ZXIgb2JqZWN0Ci0gICAgICBhbmFseXplciA9IG5ldyBCYXNpY1Byb2ZpbGVBbmFseXplcihhcmdzKTsKLQotICAgICAgLy8gSGF2ZSBpdCBwcm9jZXNzIHRoZSBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucwotICAgICAgc3RhdHVzQ29kZSA9IGFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLQotICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICBhbmFseXplci5wcmludE1lc3NhZ2UoCi0gICAgICAgICJjcmVhdGVkMDEiLAotICAgICAgICBudWxsLAotICAgICAgICAiQ29uZm9ybWFuY2UgcmVwb3J0IGhhcyBiZWVuIGNyZWF0ZWQuIik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPSAxOwotCi0gICAgICBTdHJpbmcgbWVzc2FnZUlEOwotICAgICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VEYXRhOwotCi0gICAgICBpZiAoKGUgaW5zdGFuY2VvZiBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24pCi0gICAgICAgIHx8IChlIGluc3RhbmNlb2YgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgLy9wcmludFN0YWNrVHJhY2UgPSBmYWxzZTsKLSAgICAgICAgbWVzc2FnZUlEID0gImVycm9yMDEiOwotICAgICAgICBkZWZhdWx0TWVzc2FnZSA9ICJBbmFseXplciBFcnJvcjoiOwotICAgICAgICBtZXNzYWdlRGF0YSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vcHJpbnRTdGFja1RyYWNlID0gdHJ1ZTsKLSAgICAgICAgbWVzc2FnZUlEID0gImVycm9yMDIiOwotICAgICAgICBkZWZhdWx0TWVzc2FnZSA9ICJBbmFseXplciBTdG9wcGVkIEJ5IEV4Y2VwdGlvbjoiOwotICAgICAgICBtZXNzYWdlRGF0YSA9IGUudG9TdHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGFuYWx5emVyICE9IG51bGwpCi0gICAgICAgIGFuYWx5emVyLnByaW50TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIEFuYWx5emVyLnN0YXRpY1ByaW50TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0KLSAgICAgIGlmIChhbmFseXplciAhPSBudWxsCi0gICAgICAgICYmIGFuYWx5emVyLmdldEFuYWx5emVyQ29uZmlnKCkgIT0gbnVsbAotICAgICAgICAmJiBhbmFseXplci5nZXRBbmFseXplckNvbmZpZygpLmdldFZlcmJvc2VPcHRpb24oKSkKLSAgICAgICAgZHVtcChlKTsKLSAgICB9Ci0KLSAgICAvLyBFeGl0Ci0gICAgU3lzdGVtLmV4aXQoc3RhdHVzQ29kZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGUgYW4gQXJ0aWZhY3RUeXBlIG9iamVjdC4KLSAgICogQHJldHVybiBhIFJlcG9ydEFydGlmYWN0IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgcmVwb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydEFydGlmYWN0IHNldEN1cnJlbnRBcnRpZmFjdChBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBhcnRpZmFjdAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0ID0gcmVwb3J0ZXIuY3JlYXRlQXJ0aWZhY3QoKTsKLSAgICByZXBvcnRBcnRpZmFjdC5zZXRUeXBlKGFydGlmYWN0VHlwZSk7Ci0KLSAgICAvLyBBZGQgYXJ0aWZhY3QgdG8gcmVwb3J0Ci0gICAgdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50QXJ0aWZhY3QocmVwb3J0QXJ0aWZhY3QpOwotCi0gICAgcmV0dXJuIHJlcG9ydEFydGlmYWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIHQgYSBUaHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoVGhyb3dhYmxlIHQpCi0gIHsKLSAgICB3aGlsZSAodCBpbnN0YW5jZW9mIFdTSUV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBUaHJvd2FibGUgbmVzdGVkID0gKChXU0lFeGNlcHRpb24pIHQpLmdldFRhcmdldEV4Y2VwdGlvbigpOwotICAgICAgaWYgKG5lc3RlZCA9PSBudWxsKQotICAgICAgICBicmVhazsKLSAgICAgIGVsc2UKLSAgICAgICAgdCA9IG5lc3RlZDsKLSAgICB9Ci0gICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmU4MjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0NhbmRpZGF0ZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci0KLS8qKgotICogUHJvdmlkZSBhIG5vcm1hbGl6ZWQgc2V0IG9mIGRhdGEgcmVsYXRpbmcgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAqIEZvciBleGFtcGxlLCB3aXRoIGVuZHBvaW50IGNvcnJlbGF0aW9uIGFuZCB3c2RsRWxlbWVudCBvZiB0eXBlICJtZXNzYWdlIiAKLSAqIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIG1hdGNoZXMgZm9yIG1vc3QgZWxlbWVudCB0eXBlcyBpbmNsdWRpbmcgV1NETCBTZXJ2aWNlLgotICogKHRob3VnaCB0aGUgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSBmaWx0ZXJpbmcgdG8gYSBzaW5nbGUgc2VydmljZSBpZiBhdCBhbGwgcG9zc2libGUpLiAKLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICovCi0KLS8vIEFERDpjb3VsZCBiZSBiZXR0ZXIgYXMgYSBzaW5nbGV0b24/Ci0KLXB1YmxpYyBjbGFzcyBDYW5kaWRhdGVJbmZvCi17Ci0KLSAgLy8gTm9ybWFsaXplZCBmaXhlZCBjb3JyZWxhdGlvbiBkYXRhIGRlcml2ZWQgZnJvbSB0aGUgYW5hbHl6ZXIgY29uZmlnIGFuZCB0aGUgd3NkbCwKLSAgLy8gcmVwcmVzZW50aW5nIHdoYXQgd2Uga25vdyBhYm91dCB0aGUgc2VydmljZSBmcm9tIHRoZXNlIHR3byBzb3VyY2VzLiAgCi0gIHByaXZhdGUgRGVmaW5pdGlvbltdIGRlZmluaXRpb25zID0gbnVsbDsKLQotICBwcml2YXRlIEltcG9ydFtdIGltcG9ydHMgPSBudWxsOwotICBwcml2YXRlIFR5cGVzW10gdHlwZXMgPSBudWxsOwotCi0gIHByaXZhdGUgTWVzc2FnZVtdIG1lc3NhZ2VzID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25bXSBvcGVyYXRpb25zID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZVtdIHBvcnRUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ1tdIGJpbmRpbmdzID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0W10gcG9ydHMgPSBudWxsOwotCi0gIHByaXZhdGUgVVJJW10gZW5kUG9pbnRzID0gbnVsbDsgLy8gbGlzdCBvYnRhaW5hYmxlIGZyb20gYSBwb3J0Ci0KLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50OyAvLyByZWZlcmVuY2UgcHJvYmFibHkgbm90IGRlc2lyYWJsZSBoZXJlCi0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBDYW5kaWRhdGVJbmZvLgotICAgKiBFeHRyYWN0IG5vcm1hbGlzZWQgZW50cnkgZGF0YSBmcm9tIHdzZGwsIGFjY29yZGluZyB0byBjb25maWcgd3NkbEVsZW1lbnQgJiBzZXJ2aWNlTG9jYXRpb24KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBTZXJ2aWNlUmVmZXJlbmNlIG9iamVjdC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBhIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGNyZWF0aW5nIENhbmRpZGF0ZUluZm8gb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENhbmRpZGF0ZUluZm8oCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBBREQ6IGNoZWNrIGZvciBudWxsIGRvY3VtZW50PwotCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCk7Ci0KLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLQotICAgIC8qCi0gICAgICogR2VuZXJhbGlzZWQgZmllbGRzIGluZGVwZW5kZW50IG9mIHdzZGxFbGVtZW50OgotICAgICAqLwotICAgIC8vIEFERDogY2hlY2sgd2hldGhlciB0aGVzZSBuZWVkIHRvIGJlIGVpdGhlciBleHBhbmRlZCBvciBmaWx0ZXJlZCBkb3duLgotICAgIC8vIEFzc3VtZSBXU0RMNEogcHVsbHMgaW50IHRoZSBmdWxsIHRyZWUgYXQgdGhlIHJvb3QgZG9jdW1lbnQgZm9yIG5vdwkJCi0gICAgLy90aGlzLmltcG9ydHMgPSB3c2RsRG9jdW1lbnQuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gLi4uIG9yIGlmIG9ubHkgZG93biB0byBmaXJzdCBsZXZlbC4uLi4KLSAgICB0aGlzLmltcG9ydHMgPQotICAgICAgKEltcG9ydFtdKSBnZXRBbGxJbXBvcnRzKAotICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKSkudG9BcnJheShuZXcgSW1wb3J0W10gewotICAgIH0pOwotCi0gICAgLyogRGVmaW5pdGlvbnMuIAotICAgICAqIE5vdGUgdGhhdCB0aGUgdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgaXMgZm9yIHRoZSByb290IGRvYwotICAgICAqIHdoaWNoIGNvbnRhaW5zIGFsbCBXU0RMIGVsZW1lbnRzIGluIHNjb3BlIHZpYSA8aW1wb3J0PiBkZWNsYXJhdGlvbnMsCi0gICAgICogYXMgd2VsbCBhcyB0aGUgcm9vdCBkb2N1bWVudCBpdHNlbGYuIFRoZXJlZm9yZSB0aGUgc2Vjb25kIGRlZmluaXRpb25zIAotICAgICAqIGFycmF5IGVsZW1lbnQgYW5kIGFib3ZlIGFyZSByZWR1bmRhbnQsIGJ1dCAqbWF5KiBwcm92ZSB1c2VmdWwgdG8gdGhlIGFzc2VydGlvbgotICAgICAqIGNvZGUuCi0gICAgICovCi0KLSAgICB0aGlzLmRlZmluaXRpb25zID0gbmV3IERlZmluaXRpb25baW1wb3J0cy5sZW5ndGggKyAxXTsKLSAgICAvLyBhbGxvdyByb29tIGZvciByb290IGRvYwkJCi0KLSAgICB0aGlzLmRlZmluaXRpb25zWzBdID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7IC8vIHJvb3QgZG9jdW1lbnQgICAgCi0KLSAgICAvLyBBbGxvY2F0ZSBhcnJheSBmb3IgdHlwZXMgZWxlbWVudHMKLSAgICBUeXBlc1tdIHRlbXBUeXBlcyA9IG5ldyBUeXBlc1tkZWZpbml0aW9ucy5sZW5ndGhdOwotCi0gICAgaW50IHR5cGVzQ291bnQgPSAwOwotCi0gICAgaWYgKGRlZmluaXRpb25zWzBdLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0ZW1wVHlwZXNbMF0gPSB0aGlzLmRlZmluaXRpb25zWzBdLmdldFR5cGVzKCk7IC8vIHJvb3QgZG9jdW1lbnQJCi0gICAgICB0eXBlc0NvdW50Kys7Ci0gICAgfQotCi0gICAgLy8gRGVmaW5pdGlvbnMgZnJvbSBvdGhlciAoaW1wb3J0ZWQpIHdzZGxzIGNvcnJlbGF0aW5nIHRvIHRoZSBjYW5kaWRhdGUKLSAgICAvLyBPbmx5IG9uZSBsZXZlbCBkb3duIGZvciBub3cKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCgoZGVmaW5pdGlvbnNbaSArIDFdID0gaW1wb3J0c1tpXS5nZXREZWZpbml0aW9uKCkpICE9IG51bGwpCi0gICAgICAgICYmIChkZWZpbml0aW9uc1tpICsgMV0uZ2V0VHlwZXMoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgdGVtcFR5cGVzW3R5cGVzQ291bnRdID0gZGVmaW5pdGlvbnNbaSArIDFdLmdldFR5cGVzKCk7Ci0gICAgICAgIHR5cGVzQ291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHlwZXNDb3VudCA+IDApCi0gICAgewotICAgICAgdGhpcy50eXBlcyA9IG5ldyBUeXBlc1t0eXBlc0NvdW50XTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc0NvdW50OyBpKyspCi0gICAgICAgIHRoaXMudHlwZXNbaV0gPSB0ZW1wVHlwZXNbaV07Ci0gICAgfQotICAgIC8qIAotICAgICAqIFBvcHVsYXRlIGVsZW1lbnQgaGllcmFjaHk6Ci0gICAgICogUG9ydAotICAgICAqIEJpbmRpbmcKLSAgICAgKiBQb3J0VHlwZQotICAgICAqIG9wZXJhdGlvbihzKQotICAgICAqIG1lc3NhZ2UocykKLSAgICAgKi8KLQotICAgIGlmICh3c2RsRWxlbWVudC5pc1BvcnQoKSkKLSAgICB7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0KLSAgICAgIC8vIFVzZSBwYXJlbnRFbGVtZW50TmFtZSB0byBxdWFsaWZ5IHRoZSBwb3J0IHdpdGhpbiBhIHNlcnZpY2UuCQkKLSAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gd3NkbEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCk7Ci0gICAgICBTZXJ2aWNlW10gcyA9IHdzZGxEb2N1bWVudC5nZXRTZXJ2aWNlcygpOwotICAgICAgU3RyaW5nIHBvcnROYW1lID0gd3NkbEVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCAmJiBwb3J0ID09IG51bGw7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNbaV0uZ2V0UU5hbWUoKS5lcXVhbHMoc2VydmljZU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcG9ydCA9IHNbaV0uZ2V0UG9ydChwb3J0TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHBvcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiV1NETCBQb3J0IFwnIgotICAgICAgICAgICAgKyBwb3J0TmFtZQotICAgICAgICAgICAgKyAiXCcgZm9yIFNlcnZpY2UgXCciCi0gICAgICAgICAgICArIHNlcnZpY2VOYW1lCi0gICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLnBvcnRzID0gbmV3IFBvcnRbXSB7IHBvcnQgfTsKLSAgICAgICAgLy8gQUREOiBkbyBzZXJ2aWNlTG9jYXRpb24gY2hlY2sgZm9yIHNvYXBiaW5kOmFkZHJlc3M/Ci0gICAgICAgIGRlc2NlbmRlbnRzKHBvcnQpOwotICAgICAgfQotCi0gICAgICAvLyBBREQ6IHRoZSBmb2xsb3dpbmcgY291bGQgYmUgaW5zdGFudGlhdGVkIGhlcmUgaW5zdGVhZCB0byByZWZpbmUgY29udGV4dCBpbmZvCi0gICAgICAvLyBkZWZpbml0aW9ucyAKLSAgICAgIC8vIGltcG9ydHMgCi0gICAgICAvLyB0eXBlcwotCi0gICAgfQotCi0gICAgZWxzZSBpZiAod3NkbEVsZW1lbnQuaXNCaW5kaW5nKCkpCi0gICAgewotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9Ci0gICAgICAgICAgd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCkuZ2V0QmluZGluZyh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLQotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJXU0RMIEJpbmRpbmcgbmFtZWQgXCciCi0gICAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRoaXMuYmluZGluZ3MgPSBuZXcgQmluZGluZ1tdIHsgYmluZGluZyB9OwotCi0gICAgICAgICAgLy8gdGhlIHJlc3QgLi4uIGJlbG93IGJpbmRpbmc6CQotICAgICAgICAgIC8vIHBvcnRUeXBlcyBmcm9tIGJpbmRpbmcKLSAgICAgICAgICAvLyBvcGVyYXRpb25zIGZyb20gcG9ydFR5cGVzCi0gICAgICAgICAgLy8gbWVzc2FnZXMgZnJvbSBvcGVyYXRpb25zCi0gICAgICAgICAgZGVzY2VuZGVudHMoYmluZGluZyk7Ci0KLSAgICAgICAgICAvLyBhYm92ZSBiaW5kaW5nOgotICAgICAgICAgIC8vIHBvcnRzCi0gICAgICAgICAgLy8gZGVmaW5pdGlvbnMsIGltcG9ydHMsIHR5cGVzIChmdXR1cmU/KQkJCQkKLSAgICAgICAgICAvLyBhbmNlc3RvcnMoYmluZGluZ3MpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZSBpZiAod3NkbEVsZW1lbnQuaXNQb3J0VHlwZSgpKQotICAgIHsKLQotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPQotICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKS5nZXRQb3J0VHlwZSh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLSAgICAgIHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlW10geyBwb3J0VHlwZSB9OwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiV1NETCBQb3J0VHlwZSBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgbm90IGZvdW5kIGluIHNlcnZpY2UgZGVzY3JpcHRpb24iKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IHBvcnRUeXBlIH07Ci0gICAgICAgIC8vIHRoZSByZXN0IC4uLiBiZWxvdyBwb3J0VHlwZToJCi0gICAgICAgIGRlc2NlbmRlbnRzKHBvcnRUeXBlKTsKLQotICAgICAgICAvLyBhYm92ZSBwb3J0VHlwZToKLSAgICAgICAgLy8gcG9ydHMKLSAgICAgICAgLy8gZGVmaW5pdGlvbnMsIGltcG9ydHMsIHR5cGVzIChmdXR1cmUpID8KLSAgICAgICAgLy9hbmNlc3RvcnMocG9ydFR5cGVzKTsJCQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc09wZXJhdGlvbigpKQotICAgIHsKLQotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgICBTdHJpbmcgY29uZmlnT3BOYW1lID0gd3NkbEVsZW1lbnQuZ2V0TmFtZSgpOwotCi0gICAgICAvLyBVc2UgcGFyZW50RWxlbWVudE5hbWUgdG8gcXVhbGlmeSB0aGUgb3BlcmF0aW9uIHdpdGhpbiBhIHBvcnRUeXBlLgotICAgICAgUU5hbWUgcG9ydFR5cGVOYW1lID0gd3NkbEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCk7Ci0gICAgICBQb3J0VHlwZVtdIHAgPSB3c2RsRG9jdW1lbnQuZ2V0UG9ydFR5cGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHAubGVuZ3RoICYmIG9wZXJhdGlvbiA9PSBudWxsOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChwW2ldLmdldFFOYW1lKCkuZXF1YWxzKHBvcnRUeXBlTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3c2RsNGogYXZhaWxhYmxlIG1ldGhvZCBjYWxsIGJlbG93IGltcGxpZXMgdGhhdCBvbmx5IAotICAgICAgICAgIC8vIG5hbWUraW5wdXRuYW1lK291dHB1dG5hbWUgdW5pcXVlbHkgZGVmaW5lcyBvcGVyYXRpb24hIAotICAgICAgICAgIC8vIFNpbmNlIHdlIGRvIG5vdCBoYXZlIDxpbnB1dD4gJiA8b3V0cHV0PiBuYW1lIGluZm9ybWF0aW9uCi0gICAgICAgICAgLy8gYXZhaWxhYmxlIGluIHRoZSBjb25maWcsIHVzZSB0aGlzIGluc3RlYWQgZm9yIG5vdzogLSAKLSAgICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IG9wZXJhdGlvbiB3ZSBmaW5kOgotICAgICAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwW2ldLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpICYmIG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnT3BOYW1lLmVxdWFscyhvcC5nZXROYW1lKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJObyBXU0RMIE9wZXJhdGlvbiBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBuZXcgT3BlcmF0aW9uW10geyBvcGVyYXRpb24gfTsKLQotICAgICAgICBkZXNjZW5kZW50cyhvcGVyYXRpb24pOwotICAgICAgICAvL2FuY2VzdG9ycyhvcGVyYXRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc01lc3NhZ2UoKSkKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9Ci0gICAgICAgIHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLmdldE1lc3NhZ2Uod3NkbEVsZW1lbnQuZ2V0UU5hbWUoKSk7Ci0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJObyBXU0RMIE1lc3NhZ2UgbmFtZWQgXCciCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50LmdldFFOYW1lKCkKLSAgICAgICAgICAgICsgIlwnIGZvdW5kIGluIHNlcnZpY2UgZGVzY3JpcHRpb24iKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlW10geyBtZXNzYWdlIH07Ci0KLSAgICAgICAgLy9hbmNlc3RvcnMobWVzc2FnZXMpOyAKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIlVucmVjb2duaXNlZCA8V1NETEVsZW1lbnQgdHlwZT4gaW4gY29uZmlnOiAiICsgd3NkbEVsZW1lbnQuZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBnZXQgaW5mbyBhYm91dCB0aGUgZWZmZWN0aXZlIHNlcnZpY2UgbG9jYXRpb24gKHMpCi0gICAgLy90aGlzLmVuZFBvaW50cyA9IGRlcml2ZUVuZHBvaW50cyhhbmFseXplckNvbmZpZywgdGhpcy5wb3J0cywgdGhpcy5kZWZpbml0aW9ucyk7Ci0gICAgdGhpcy5lbmRQb2ludHMgPQotICAgICAgZGVyaXZlRW5kcG9pbnRzKHNlcnZpY2VSZWZlcmVuY2UsIHRoaXMucG9ydHMsIHRoaXMuZGVmaW5pdGlvbnMpOwotICB9Ci0KLSAgLyoqIAotICAgICAqIGFuY2VzdG9yIGNvZGUgaXMgbm90IHVzZWQgYXQgcHJlc2VudC4KLSAgICAgKiAKLSAgICAgKi8KLSAgLyogICAKLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKFBvcnRbXSBwb3J0cykgewotICAgICAJLy8gbm8gYW5jZXN0b3JzIG9mIFBvcnQgcmVxdWlyZWQgKGZvciBub3cpCi0gICAgIH0gCSAgICAKLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKEJpbmRpbmdbXSBiaW5kaW5ncykgewkgICAgCi0gICAgCQkvLyBQb3J0cyBmcm9tIEJpbmRpbmdzICAxLTItMQotICAgICAJCi0gICAgIAkvLyAqKiogY2hlYXQgZm9yIG5vdyAtIGdldCBwb3J0cyBmcm9tIGFsbCBzZXJ2aWNlcyBpbiB0aGUgd3NkbCBkb2MKLSAgICAgCS8vIEFERDogZmluZCBjb3JyZWN0IG1hcHBpbmcgYmFzZWQgb24gdGhlIHN1cHBsaWVkIGJpbmRpbmdzCi0gICAgIAlTZXJ2aWNlW10gc2VydmljZSA9IHdzZGxEb2N1bWVudC5nZXRTZXJ2aWNlcygpOwotICAgICAJSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAJCWZvciAoaW50IGk9MDsgaT5zZXJ2aWNlLmxlbmd0aDsgaSsrKSB7Ci0gIAkJCXNldC5hZGQoc2VydmljZVtpXS5nZXRQb3J0cygpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLnBvcnRzID0gKFBvcnRbXSlzZXQudG9BcnJheSh0aGlzLnBvcnRzID0gbmV3IFBvcnRbMF0pKTsKLSAgICAgfQotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoUG9ydFR5cGVbXSBwb3J0VHlwZXMpIHsJICAgIAotICAgIAkJLy8gQmluZGluZ3MgZnJvbSBQb3J0VHlwZXMgIDEtMi0xCi0gICAgIAkKLSAgICAgCS8vIGFkZCBoYXZlIHRvIHN0YXJ0IHdpdGggYWxsIGJpbmRpbmdzIGluIGRvYyBhbmQgc2VhcmNoIGZvciB0aG9zZQotICAgICAJLy8gd2l0aCB0aGUgcG9ydFR5cGUgIAotICAgICAJSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAJCWZvciAoaW50IGk9MDsgaT5wb3J0VHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgCQkvLyBzZXQuYWRkKHBvcnRUeXBlc1tpXS5nZXQoKSk7ICAKLSAgCQl9Ci0gIAkJCQotICAJCS8vIGFzc2lnbiB0aGUgcGFyZW50IGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZHBhcmVudHMgaWYgYW55CQkJCQkJCQkKLSAgCQlhbmNlc3RvcnModGhpcy5iaW5kaW5ncyA9IChCaW5kaW5nW10pc2V0LnRvQXJyYXkodGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nWzBdKSk7Ci0gICAgIH0KLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKE9wZXJhdGlvbltdIG9wZXJhdGlvbnMpIHsJICAgIAotICAgIAkJLy8gUG9ydFR5cGVzIGZyb20gT3BlcmF0aW9ucyAgMS0yLTEKLSAgICAgCSAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPm9wZXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgCQkJLy8gc2V0LmFkZChvcGVyYXRpb25zW2ldLmdldCgpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLnBvcnRUeXBlcyA9IChQb3J0VHlwZVtdKXNldC50b0FycmF5KHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlWzBdKSk7Ci0gICAgIH0KLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKE1lc3NhZ2VbXSBtZXNzYWdlcykgewkgICAgCi0gICAgCQkvLyBPcGVyYXRpb25zIGZyb20gTWVzc2FnZXMgIDEtMi0xCi0gICAgIAkvLyBBREQgZml4IGl0ISAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPm1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gIAkJCS8vIHNldC5hZGQobWVzc2FnZXNbaV0uZ2V0KCkpOyAgCi0gIAkJfQotICAJCQkKLSAgCQkvLyBhc3NpZ24gdGhlIHBhcmVudCBncm91cCAJCi0gIAkJdGhpcy5wb3J0VHlwZXMgPSAoUG9ydFR5cGVbXSlzZXQudG9BcnJheSh0aGlzLnBvcnRUeXBlcyA9IG5ldyBQb3J0VHlwZVswXSk7Ci0gICAgIH0KLSAgKi8KLQotICAvKioKLSAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICogQHBhcmFtIHBvcnQgIGEgUG9ydCBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcG9ydCBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoUG9ydCBwb3J0KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCaW5kaW5nIGZyb20gUG9ydCAgMS0yLTEKLQotICAgIGlmIChwb3J0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGEgUG9ydCB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nW10geyBwb3J0LmdldEJpbmRpbmcoKX07Ci0gICAgICBpZiAodGhpcy5iaW5kaW5nc1swXSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvKiBBc3NpZ24gdGhlIGNoaWxkIGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZGNoaWxkcmVuIGlmIGFueS4KLSAgICAgICAgKiBOdWxsIGFyZ3VtZW50IHZhbHVlIHBhc3NlZCBpbnRvIHRoZSBmb2xsb3dpbmcgbWV0aG9kIHdvdWxkIAotICAgICAgICAqIHN1Z2dlc3QgYSBXU0RMIGRlZmluaXRpb24gaW5jb25zaXN0ZW5jeQotICAgICAgICAqIHdoaWNoIHdpbGwgYmUgcGlja2VkIHVwIGR1cmluZyBEZXNjcmlwdGlvbiBBcnRpZmFjdCBUQSB0ZXN0aW5nLgotICAgICAgICAqLwotICAgICAgICBkZXNjZW5kZW50cyh0aGlzLmJpbmRpbmdzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYmluZGluZyBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoQmluZGluZyBiaW5kaW5nKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBwb3J0VHlwZSBmcm9tIEJpbmRpbmcgMS0yLTEKLQotICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGEgQmluZGluZyB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKX07Ci0gICAgICBpZiAodGhpcy5wb3J0VHlwZXNbMF0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyogQXNzaWduIHRoZSBjaGlsZCBncm91cCBhbmQgcHJvY2VzcyB0aGUgZ3JhbmRjaGlsZHJlbiBpZiBhbnkuCi0gICAgICAgIAkqIE51bGwgYXJndW1lbnQgdmFsdWUgcGFzc2VkIGludG8gdGhlIGZvbGxvd2luZyBtZXRob2Qgd291bGQgCi0gICAgICAgIAkqIHN1Z2dlc3QgYSBXU0RMIGRlZmluaXRpb24gaW5jb25zaXN0ZW5jeQotICAgICAgICAJKiB3aGljaCB3aWxsIGJlIHBpY2tlZCB1cCBkdXJpbmcgRGVzY3JpcHRpb24gQXJ0aWZhY3QgVEEgdGVzdGluZy4KLSAgICAgICAgCSovCi0gICAgICAgIGRlc2NlbmRlbnRzKHRoaXMucG9ydFR5cGVzWzBdKTsKLQotICAgICAgICAvLyBHZXQgYW55IG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSBoZWFkZXJzIGFuZCBoZWFkZXJmYXVsdHMKLQotICAgICAgICAvLyBHZXQgcmVmZXJlbmNlIHRvIGRlZmluaXRpb24KLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbMF07Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1lc3NhZ2VzIGFscmVhZHksIHRoZW4gZ2V0IHRoZW0gYXMgYSBjb2xsZWN0aW9uCi0gICAgICAgIEhhc2hTZXQgbWVzc2FnZVNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlU2V0LmFkZChtZXNzYWdlc1tpXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIG9ubHkgYnkgYSBiaW5kaW5nIAotICAgICAgICBIYXNoU2V0IGJpbmRpbmdNZXNzYWdlcyA9IFdTRExVdGlscy5maW5kTWVzc2FnZXMoZGVmaW5pdGlvbiwgYmluZGluZyk7Ci0KLSAgICAgICAgLy8gQWRkIHRoZXNlIG1lc3NhZ2VzIHRvIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGxpc3QgIAotICAgICAgICBtZXNzYWdlU2V0LmFkZEFsbChiaW5kaW5nTWVzc2FnZXMpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhcnJheSBmcm9tIG1lc3NhZ2Ugc2V0Ci0gICAgICAgIHRoaXMubWVzc2FnZXMgPQotICAgICAgICAgIChNZXNzYWdlW10pIG1lc3NhZ2VTZXQudG9BcnJheSh0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VbMF0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgIGEgUG9ydFR5cGUgb2JqZWN0Ci0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHBvcnRUeXBlIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkZXNjZW5kZW50cyhQb3J0VHlwZSBwb3J0VHlwZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gT3BlcmF0aW9ucyBmcm9tIFBvcnRUeXBlIDEtMi1uCi0KLSAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogZXhwZWN0ZWQgYSBQb3J0VHlwZSB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5vcGVyYXRpb25zID0KLSAgICAgICAgKE9wZXJhdGlvbltdKSAocG9ydFR5cGUKLSAgICAgICAgICAuZ2V0T3BlcmF0aW9ucygpCi0gICAgICAgICAgLnRvQXJyYXkodGhpcy5vcGVyYXRpb25zID0gbmV3IE9wZXJhdGlvblswXSkpOwotICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBkZXNjZW5kZW50cyh0aGlzLm9wZXJhdGlvbnMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgICAqIERlc2NlbmRhbnQgbWV0aG9kIGZvciBjb21wbGV0aW5nIGNhbmRpZGF0ZSBzZXJ2aWNlIGNvbnRleHQgY3JlYXRpb24uCi0gICAgICogQHBhcmFtIG9wZXJhdGlvbiAgYSBPcGVyYXRpb24gb2JqZWN0Ci0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgb3BlcmF0aW9uIGlzIG51bGwuCi0gICAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRlc2NlbmRlbnRzKE9wZXJhdGlvbiBvcGVyYXRpb24pIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE1lc3NhZ2VzIGZyb20gT3BlcmF0aW9uCi0KLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGFuIE9wZXJhdGlvbiB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZGVzY2VuZGVudHMobmV3IE9wZXJhdGlvbltdIHsgb3BlcmF0aW9uIH0pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gb3BlcmF0aW9ucyAgYW4gYXJyYXkgb2Ygb3BlcmF0aW9ucy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgb3BlcmF0aW9ucyBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoT3BlcmF0aW9uW10gb3BlcmF0aW9ucykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gTWVzc2FnZXMgZnJvbSBPcGVyYXRpb25zIDEtMi1uCi0KLSAgICBpZiAob3BlcmF0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkludGVybmFsIGVycm9yOiBleHBlY3RlZCBhbiBPcGVyYXRpb25bXSB2YWx1ZSIpOwotICAgIH0KLQotICAgIEhhc2hTZXQgc2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wZXJhdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKG9wZXJhdGlvbnNbaV0uZ2V0SW5wdXQoKSAhPSBudWxsKQotICAgICAgICBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOyAvLzEtMi0xCi0gICAgICBpZiAob3BlcmF0aW9uc1tpXS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpKTsgLy8xLTItMQotCi0gICAgICAvLyBnZXQgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIGZhdWx0cyBmb3IgdGhpcyBvcGVyYXRpb24gCi0gICAgICAvLyAxLTItbgotICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyYXRpb25zW2ldLmdldEZhdWx0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBzZXQuYWRkKCgoRmF1bHQpIGl0Lm5leHQoKSkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhpcy5tZXNzYWdlcyA9IChNZXNzYWdlW10pIHNldC50b0FycmF5KHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZVswXSk7Ci0gICAgLy8gbm8gZGVzY2VuZGVudHMgb2YgbWVzc2FnZXMgc28gc3RvcC4KLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlIGEgcmVjdXJzaXZlIG5vbi1yZXBlYXRpbmcgbGlzdCBvZiBpbXBvcnRzIGZvciB0aGUgc3BlY2lmaWVkCi0gICAqIFdTREwgZG9jdW1lbnQgZGVmaW5pdGlvbi4KLSAgICovCi0gIC8qICAgcHJpdmF0ZSBIYXNoU2V0IGdldEFsbEltcG9ydHMoRGVmaW5pdGlvbiByb290RGVmKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgCQotICAgICAJSGFzaFNldCBpbXBvcnRTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAJCi0gICAgIAlDb2xsZWN0aW9uIGltcG9ydExpc3QgPSAgcm9vdERlZi5nZXRJbXBvcnRzKCkudmFsdWVzKCk7Ci0gICAgIAlJdGVyYXRvciBpID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAJCi0gICAgIAl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLSAgICAgCQlJbXBvcnQgbmV4dEltcG9ydCA9IChJbXBvcnQpKGkubmV4dCgpKTsKLSAgICAgCQlpZiAobmV4dEltcG9ydCAhPSBudWxsKSB7Ci0gICAgIAkJCS8vIGl0cyBhIHdzZGwgZG9jdW1lbnQKLSAgICAgCQkJaW1wb3J0U2V0LmFkZEFsbChnZXRBbGxJbXBvcnRzKG5leHRJbXBvcnQuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgIAkJfSAgIAkJCQotICAgICAJfQotICAgICAJCi0gICAgIAlyZXR1cm4gKGltcG9ydFNldCk7Ci0gICAgIH0KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRBbGxJbXBvcnRzKERlZmluaXRpb24gcm9vdERlZikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IGltcG9ydFNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgaW1wb3J0U2V0ID0gIGdldEFsbEltcG9ydHMobmV3IEFycmF5TGlzdCgpLCByb290RGVmKTsKLSAgICByZXR1cm4gKGltcG9ydFNldCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSGFzaFNldCBnZXRBbGxJbXBvcnRzKExpc3QgYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLCBEZWZpbml0aW9uIHJvb3REZWYpIAotICB7Ci0JSGFzaFNldCBpbXBvcnRTZXQgPSBuZXcgSGFzaFNldCgpOwotCWlmICgocm9vdERlZiAhPSBudWxsKSAmJiAoIWFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhyb290RGVmKSkpCi0JewotICAgICAgYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLmFkZChyb290RGVmKTsJCi0JICBNYXAgaW1wb3J0TWFwID0gcm9vdERlZi5nZXRJbXBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBpID0gaW1wb3J0TWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBuZXh0SW1wb3J0TGlzdCA9IChMaXN0KSAoaS5uZXh0KCkpOwotICAgICAgICBJdGVyYXRvciBsaXN0SXQgPSBuZXh0SW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAobGlzdEl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEltcG9ydCBuZXh0SW1wb3J0ID0gKEltcG9ydCkgbGlzdEl0Lm5leHQoKTsKLSAgICAgICAgICBpZiAobmV4dEltcG9ydCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydFNldC5hZGQobmV4dEltcG9ydCk7Ci0gICAgICAgICAgICBEZWZpbml0aW9uIGRlZiA9IG5leHRJbXBvcnQuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgIAkgICAgSGFzaFNldCBuZXN0ZWRJbXBvcnRzID0gZ2V0QWxsSW1wb3J0cyhhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMsIGRlZik7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSBuZXN0ZWRJbXBvcnRzLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgICAgICAgICAgaW1wb3J0U2V0LmFkZChqLm5leHQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbXBvcnRTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogZ2V0IGFsbCBzZXJ2aWNlIGxvY2F0aW9uIGVuZHBvaW50IHZhbHVlcwotICAgKiByZWxldmFudCB0byB0aGUgc2VydmljZSB1bmRlciB0ZXN0LgotICAgKiAKLSAgICogSWYgdGhlIHNlcnZpY2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgd2UgdXNlCi0gICAqIGp1c3QgdGhhdC4KLSAgICogT3RoZXJ3aXNlLCBpZiB0aGUgcG9ydCBpcyBzcGVjaWZpZWQsIHdlIGdldCBhbGwgZW5kcG9pbnRzCi0gICAqIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBvcnQuCi0gICAqIElmIHdlIGhhdmUgbmVpdGhlciB0aGUgc2VydmljZSBsb2NhdGlvbiB2YWx1ZSBvciB0aGUgcG9ydCwKLSAgICogdGhlbiBhbGwgZW5kcG9pbnRzIGluIHRoZSBkZWZpbml0aW9uIGFyZSB1c2VkLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBkZXJpdmVFbmRwb2ludHMoCi0gIC8vQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsIAotICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsIFBvcnRbXSBwb3J0cywgRGVmaW5pdGlvbltdIGRlZmluaXRpb25zKQotICB7Ci0KLSAgICBVUklbXSBlbmRwID0gbnVsbDsKLSAgICAvL1BvcnQgcG9ydCA9IG51bGw7CQotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBzZXJ2aWNlTG9jYXRpb24gPSBudWxsOwotICAgICAgLy8gdHJ5IHNlcnZpY2UgbG9jYXRpb24uLi4KLSAgICAgIC8vaWYgKChzZXJ2aWNlTG9jYXRpb24gPSBhbmFseXplckNvbmZpZy5nZXRTZXJ2aWNlTG9jYXRpb24oKSkgIT0gbnVsbCkgeyAgICAgIAotICAgICAgaWYgKChzZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFNlcnZpY2VMb2NhdGlvbigpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBlbmRwID0gbmV3IFVSSVtdIHsgbmV3IFVSSShzZXJ2aWNlTG9jYXRpb24pfTsKLSAgICAgIH0KLSAgICAgIC8vZWxzZSBpZiAoYW5hbHl6ZXJDb25maWcuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkgewotICAgICAgZWxzZSBpZiAoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmlzUG9ydCgpKQotICAgICAgewotICAgICAgICBpZiAocG9ydHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciAtIGV4cGVjdGVkIDEtZWxlbWVudCBQb3J0IGFycmF5Iik7Ci0gICAgICAgIH0KLSAgICAgICAgLy9lbHNlIHsKLSAgICAgICAgLy8JcG9ydCA9IHBvcnRzWzBdOyAvLyBpZiBQb3J0IHdhcyBnaXZlbiBpbiBjb25maWcsIHRoZXJlIGlzIGp1c3Qgb25lCi0gICAgICAgIC8vfQotICAgICAgICAvL1FOYW1lIHNvYXBBZGRyZXNzID0gbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYWRkcmVzcyIpOwotICAgICAgICBJdGVyYXRvciBpID0gcG9ydHNbMF0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpICYmIHNlcnZpY2VMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGV4dEVsZW0gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmIChleHRFbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhzb2FwQWRkcmVzcykgewotICAgICAgICAgICAgLy8gdGhpcyBlbGVtZW50IGlzIG91ciBTT0FQQWRkcmVzcyAtIGdldCB0aGUgbG9jYXRpb24KLSAgICAgICAgICAgIHNlcnZpY2VMb2NhdGlvbiA9ICgoU09BUEFkZHJlc3MpIGV4dEVsZW0pLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICBlbmRwID0gbmV3IFVSSVtdIHsgbmV3IFVSSShzZXJ2aWNlTG9jYXRpb24pfTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgLy8gbm8gcG9ydCBpbmZvIGZyb20gY29uZmlnLCBzbyBzdXBwbHkgYWxsIGluIGRvY3VtZW50Ci0gICAgICAgIC8vIFFOYW1lIHNvYXBBZGRyZXNzID0gbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYWRkcmVzcyIpOwotICAgICAgICBIYXNoU2V0IGVuZHBvaW50U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGRlZmluaXRpb25zWzBdLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGkubmV4dCgpOwotICAgICAgICAgIGlmIChleHRFbGVtIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9pZiAoZXh0RWwuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoc29hcEFkZHJlc3MpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgZWxlbWVudCBpcyBvdXIgU09BUEFkZHJlc3MgLSBnZXQgdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICBlbmRwb2ludFNldC5hZGQoKChTT0FQQWRkcmVzcykgZXh0RWxlbSkuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIGRlcml2ZWQgTGlzdCB0byBhIFVSSSBhcnJheQotICAgICAgICBlbmRwID0gKFVSSVtdKSBlbmRwb2ludFNldC50b0FycmF5KGVuZHAgPSBuZXcgVVJJWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIGVuZHA7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYmluZGluZy4KLSAgICogQHJldHVybiBCaW5kaW5nCi0gICAqLwotICBwdWJsaWMgQmluZGluZ1tdIGdldEJpbmRpbmdzKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlbmRQb2ludHMuCi0gICAqIEByZXR1cm4gVVJJW10KLSAgICovCi0gIHB1YmxpYyBVUklbXSBnZXRFbmRQb2ludHMoKQotICB7Ci0gICAgLy8gZ2V0IGxpc3Qgb2YgbWF0Y2hpbmcgZW5kcG9pbnQocykgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UuCi0gICAgcmV0dXJuIGVuZFBvaW50czsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGVuZFBvaW50cyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGhvc3QgYW5kIHBvcnQuCi0gICogQHBhcmFtIGhvc3RBbmRQb3J0ICBob3N0IGFuZCBwb3J0IGxvY2F0aW9uLgotICAqIEByZXR1cm4gVVJJW10gaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UuCi0gICovCi0gIHB1YmxpYyBVUklbXSBnZXRFbmRQb2ludHMoU3RyaW5nIGhvc3RBbmRQb3J0KQotICB7Ci0gICAgLy8gZ2V0IGxpc3Qgb2YgbWF0Y2hpbmcgZW5kcG9pbnRzIGFzc29jaWF0ZWQgd2l0aCBzZXJ2aWNlLAotICAgIC8vIGhhdmluZyB0aGUgc3BlY2lmaWVkIGhvc3QgYW5kIHBvcnQgY29uZmlndXJhdGlvbgotICAgIFN0cmluZyBwb3J0OwotCi0gICAgVmVjdG9yIG1hdGNoZWRFbmRwb2ludHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gUEI6IElmIHRoZSBlbmRwb2ludCBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXIsIHRoZW4gZGVmYXVsdCBpdCB0byAiODAiCi0gICAgICBwb3J0ID0KLSAgICAgICAgKGVuZFBvaW50c1tpXS5nZXRQb3J0KCkgPT0gLTEpCi0gICAgICAgICAgPyAiODAiCi0gICAgICAgICAgOiBTdHJpbmcudmFsdWVPZihlbmRQb2ludHNbaV0uZ2V0UG9ydCgpKTsKLSAgICAgIGlmIChob3N0QW5kUG9ydC5lcXVhbHMoZW5kUG9pbnRzW2ldLmdldEhvc3QoKSArICI6IiArIHBvcnQpKQotICAgICAgewotICAgICAgICBtYXRjaGVkRW5kcG9pbnRzLmFkZChlbmRQb2ludHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFVSSVtdKSBtYXRjaGVkRW5kcG9pbnRzLnRvQXJyYXkobmV3IFVSSVswXSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbgotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvbltdIGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcG9ydFR5cGUuCi0gICAqIEByZXR1cm4gUG9ydFR5cGUKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwb3J0VHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBob3N0QW5kUG9ydCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBjb250ZXh0IGVuZHBvaW50LgotICAgKiBAcGFyYW0gaG9zdEFuZFBvcnRTdHJpbmcgYSBob3N0IGFuZCBwb3J0IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGhvc3RBbmRQb3J0IG1hdGNoZXMgYXQgbGVhc3Qgb25lIGNvbnRleHQgZW5kcG9pbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGdpdmVuIGhvc3RhbmRQb3J0IFN0cmluZyBkb2VzIG5vdCBjb252ZXJ0IHRvIFVSSS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0hvc3RBbmRQb3J0KFN0cmluZyBob3N0QW5kUG9ydFN0cmluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVVJJIGhvc3RBbmRQb3J0OwotICAgIHRyeQotICAgIHsKLSAgICAgIGhvc3RBbmRQb3J0ID0gbmV3IFVSSShob3N0QW5kUG9ydFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVSSTogIiArIGhvc3RBbmRQb3J0U3RyaW5nKTsKLSAgICB9Ci0gICAgU3RyaW5nIGhvc3QgPSBob3N0QW5kUG9ydC5nZXRIb3N0KCk7Ci0gICAgaW50IHBvcnQgPSBob3N0QW5kUG9ydC5nZXRQb3J0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodGhpcy5lbmRQb2ludHNbaV0uZ2V0SG9zdCgpLmVxdWFscyhob3N0KQotICAgICAgICAmJiB0aGlzLmVuZFBvaW50c1tpXS5nZXRQb3J0KCkgPT0gcG9ydCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsgLy8gZm9yIG5vdwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRlZmluaXRpb25zLgotICAgKiBAcmV0dXJuIERlZmluaXRpb25bXQotICAgKi8KLSAgcHVibGljIERlZmluaXRpb25bXSBnZXREZWZpbml0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW1wb3J0cy4KLSAgICogQHJldHVybiBJbXBvcnRbXQotICAgKi8KLSAgcHVibGljIEltcG9ydFtdIGdldEltcG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gTWVzc2FnZVtdCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVtdIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwb3J0cy4KLSAgICogQHJldHVybiBQb3J0W10KLSAgICovCi0gIHB1YmxpYyBQb3J0W10gZ2V0UG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBvcnRUeXBlcy4KLSAgICogQHJldHVybiBQb3J0VHlwZVtdCi0gICAqLwotICBwdWJsaWMgUG9ydFR5cGVbXSBnZXRQb3J0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRUeXBlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0eXBlcy4KLSAgICogQHJldHVybiBUeXBlc1tdCi0gICAqLwotICBwdWJsaWMgVHlwZXNbXSBnZXRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHdzZGxEb2N1bWVudC4KLSAgICogQHJldHVybiBXU0RMRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V3NkbERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiB3c2RsRG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHR5cGVzIGEgVHlwZXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIFR5cGVzIGNoZWNrVHlwZXM7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoKChjaGVja1R5cGVzID0gZGVmaW5pdGlvbnNbaV0uZ2V0VHlwZXMoKSkgIT0gbnVsbCkKLSAgICAgICAgJiYgKGNoZWNrVHlwZXMuZXF1YWxzKHR5cGVzKSkpCi0gICAgICB7Ci0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0QmluZGluZyhiaW5kaW5nLmdldFFOYW1lKCkpICE9IG51bGwpCi0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb3J0VHlwZSBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb3J0VHlwZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0UG9ydFR5cGUocG9ydFR5cGUuZ2V0UU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgTWVzc2FnZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZpbml0aW9ucy5sZW5ndGggJiYgZGVmaW5pdGlvbiA9PSBudWxsOyBpKyspCi0gICAgewotICAgICAgaWYgKGRlZmluaXRpb25zW2ldLmdldE1lc3NhZ2UobWVzc2FnZS5nZXRRTmFtZSgpKSAhPSBudWxsKQotICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbaV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvRW52aXJvbm1lbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWI0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm87Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgdGhlIEVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW52aXJvbm1lbnRJbmZvIGltcGxlbWVudHMgWE1MSW5mbwotewotICAvKioKLSAgICogTG9nIHRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9nVGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWcgY29tbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbW9uaXRvckNvbmZpZ0NvbW1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgb2JqZWN0LgotICAgKiBAcGFyYW0gbG9nVGltZXN0YW1wIHRoZSBsb2cgdGltZXN0YW1wLgotICAgKiBAcGFyYW0gbW9uaXRvckNvbmZpZ0NvbW1lbnQgdGhlIE1vbml0b3IgY29uZmlnIGNvbW1lbnQuCi0gICAqLwotICBwdWJsaWMgRW52aXJvbm1lbnRJbmZvKFN0cmluZyBsb2dUaW1lc3RhbXAsIFN0cmluZyBtb25pdG9yQ29uZmlnQ29tbWVudCkKLSAgewotICAgIHRoaXMubG9nVGltZXN0YW1wID0gbG9nVGltZXN0YW1wOwotICAgIHRoaXMubW9uaXRvckNvbmZpZ0NvbW1lbnQgPSBtb25pdG9yQ29uZmlnQ29tbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm8jdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoIW5zTmFtZS5lcXVhbHMoIiIpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFN0YXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0cgKyAiICIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIHRoaXMubG9nVGltZXN0YW1wICsgIlwiLz4iKTsKLQotICAgIHB3LnByaW50KAotICAgICAgIiAgICAgICAgPCIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVAotICAgICAgICArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5tb25pdG9yQ29uZmlnQ29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgICAgIDwvIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UCi0gICAgICAgICsgIj4iKTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPRyArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2U0ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvU2VydmljZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gcHJvY2VzcyBkZXNjcmlwdGlvbiB0ZXN0IGFzc2VydGlvbnMuICBUaGUgaW5mcm9tYXRpb24KLSAqIGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgZGVyaXZlZCBmcm9tIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIFVEREkgZW50cmllcywgb3IgdGhlIFdTREwgcG9ydCBlbGVtZW50LiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VSZWZlcmVuY2UKLXsKLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxMb2NhdGlvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzZXJ2aWNlIHJlZmVyZW5jZSB3aXRob3V0IHJlZmVyZW5jZXMuICBBbGwgb2YgdGhlbSB3aWxsIGJlIHNldCBsYXRlciBhcyB0ZXN0IGFzc2VydGlvbnMgYXJlIAotICAgKiBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgU2VydmljZVJlZmVyZW5jZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmljZSByZWZlcmVuY2UgZnJvbSBlbnRyaWVzIHNwZWNpZmllZCBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuICBUaGlzIGluZm9ybWF0aW9uIG1heSBpbmNsdWRlCi0gICAqIHRoZSBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSB0aGUgd3NkbEVsZW1lbnQsIHdzZGxVUkkgYW5kIHNlcnZpY2VMb2NhdGlvbiBlbGVtZW50cy4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnIGFuIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlKEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExFbGVtZW50KCk7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSBhbmFseXplckNvbmZpZy5nZXRXU0RMTG9jYXRpb24oKTsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGVsZW1lbnQgd2hlcmUgYW5hbHlzaXMgc2hvdWxkIGJlZ2luLgotICAgKiBAcmV0dXJuIGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGVsZW1lbnQgd2hlcmUgYW5hbHlzaXMgc2hvdWxkIGJlZ2luLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgdGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxMb2NhdGlvbiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSB3c2RsTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV2ViIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlTG9jYXRpb24gZWIgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQW5hbHl6ZXJDb25maWcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGEyMTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgYW5hbHp5ZXIgY29uZmlndXJhdGlvbiBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQW5hbHl6ZXJDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIENvcnJlbGF0aW9uIHR5cGVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9FTkRQT0lOVCA9ICJlbmRwb2ludCI7Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnLgotICAgKiBAcGFyYW0gbWVzc2FnZUxpc3QgYSBNZXNzYWdlTGlzdCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0KTsKLQotICAvKioKLSAgICogR2V0IG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI2dldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB2ZXJib3NlLgotICAgKiBAc2VlICNzZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHBhcmFtIHZlcmJvc2UgdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI2dldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcmJvc2VPcHRpb24oYm9vbGVhbiB2ZXJib3NlKTsKLQotICAvKioKLSAgICogR2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHJldHVybiBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEByZXR1cm4gcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFJlcGxhY2VSZXBvcnQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VSZXBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAcGFyYW0gcmVwbGFjZVJlcG9ydCAgZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0UmVwbGFjZVJlcG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVwbGFjZVJlcG9ydChib29sZWFuIHJlcGxhY2VSZXBvcnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHBhcmFtIHJlcG9ydFVSSSByZXBvcnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKTsKLQotICAvKioKLSAgICogR2V0IHN0eWxlIHNoZWV0LgotICAgKiBAcmV0dXJuIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNzZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYSBzdHlsZSBzaGVldC4KLSAgICogQHNlZSAjZ2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkU3R5bGVTaGVldChBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQpOwotCi0gIC8qKgotICAgKiBHZXQgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJIHByb2ZpbGUgdGVzdCBhc3NlcnRpb25zIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbihTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNhZ2UgbG9nIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIG1lc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldExvZ0xvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0xvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvZ1VSSSBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpOwotCi0gIC8qKgotICAgKiBJcyBtZXNzYWdlIGxvZyBsb2NhdGlvbiBzcGVjaWZpZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBtZXNzYWdlIGxvZyBsb2NhdGlvbiBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ1NldCgpOwotCi0gIC8qKgotICAgKiBHZXQgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHJldHVybiBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNzZXRDb3JyZWxhdGlvblR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVsYXRpb25UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAcGFyYW0gY29ycmVsYXRpb25UeXBlIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldENvcnJlbGF0aW9uVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29ycmVsYXRpb25UeXBlKFN0cmluZyBjb3JyZWxhdGlvblR5cGUpOwotCi0gIC8qKgotICAgKiBJcyBXU0RMIHJlZmVyZW5jZSBzZXQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBXU0RMIHJlZmVyZW5jZSBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExSZWZlcmVuY2VTZXQoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAcmV0dXJuIFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZSBnZXRXU0RMUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHdzZGxSZWZlcmVuY2UgV1NETCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFdTRExSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExSZWZlcmVuY2UoV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBJcyBVRERJIHJlZmVyZW5jZSBzZXQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBVRERJIHJlZmVyZW5jZSBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VERElSZWZlcmVuY2VTZXQoKTsKLQotICAvKioKLSAgICogR2V0IFVEREkgcmVmZXJlbmNlLgotICAgKiBAcmV0dXJuIFVEREkgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRVRERJUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgVURESVJlZmVyZW5jZSBnZXRVRERJUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHVkZGlSZWZlcmVuY2UgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVERElSZWZlcmVuY2UoVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKTsKLQotICAvKioKLSAgICogUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgZmxhZyBmb3IgY29tbWFuZCBsaW5lIHZhbGlkYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncywgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQW5hbHl6ZXJDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM2NGZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBhbmFseXplciBjb25maWcgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQW5hbHl6ZXJDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlciB7Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ1VSSSB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIHJlYWRBbmFseXplckNvbmZpZyhTdHJpbmcgYW5hbHl6ZXJDb25maWdVUkkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBBbmFseXplckNvbmZpZyBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBwYXJzZSB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgcmVhZEFuYWx5emVyQ29uZmlnKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb247Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGM5ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGVzdCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQXNzZXJ0aW9uUmVzdWx0VHlwZQotewotICAvKioKLSAgICogVGhpcyB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVzdWx0VHlwZSA9IF9BTEw7Ci0KLSAgLyoqCi0gICAqIFN0cmluZyB2ZXJzaW9uIG9mIHJlc3VsdCB0eXBlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfQUxMID0gImFsbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfTk9UX0lORk8gPSAibm90SW5mbyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfT05MWV9GQUlMRUQgPSAib25seUZhaWxlZCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfTk9UX1BBU1NFRCA9ICJub3RQYXNzZWQiOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdHlwZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFzc2VydGlvblJlc3VsdFR5cGUgQUxMID0gbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX0FMTCk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBOT1RfSU5GTyA9IG5ldyBBc3NlcnRpb25SZXN1bHRUeXBlKF9OT1RfSU5GTyk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBPTkxZX0ZBSUxFRCA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX09OTFlfRkFJTEVEKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBc3NlcnRpb25SZXN1bHRUeXBlIE5PVF9QQVNTRUQgPQotICAgIG5ldyBBc3NlcnRpb25SZXN1bHRUeXBlKF9OT1RfUEFTU0VEKTsKLQotICAvKioKLSAgICogRG8gbm90IGFsbG93IHRoaXMgb2JqZWN0IHRvIGJlIGNyZWF0ZWQgd2l0aCBudWxsIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJpdmF0ZSBBc3NlcnRpb25SZXN1bHRUeXBlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSByZXN1bHQgdHlwZS4KLSAgICogQHBhcmFtIHJlc3VsdFR5cGUgYSByZXN1bHQgdHlwZS4KLSAgICovCi0gIHByaXZhdGUgQXNzZXJ0aW9uUmVzdWx0VHlwZShTdHJpbmcgcmVzdWx0VHlwZSkKLSAgewotICAgIHRoaXMucmVzdWx0VHlwZSA9IHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogSXMgcmVzdWx0IHR5cGUgYWxsLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIGFsbC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQWxsKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfQUxMKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBmYWlsZWQgb25seS4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSByZXN1bHQgdHlwZSBpcyBmYWlsZWQgb25seS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFpbGVkT25seSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZS5lcXVhbHMoX09OTFlfRkFJTEVEKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBub3QgcGFzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIG5vdCBwYXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc05vdFBhc3NlZCgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZS5lcXVhbHMoX05PVF9QQVNTRUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHJlc3VsdCB0eXBlIG5vdCBpbmZvLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIG5vdCBpbmZvLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNOb3RJbmZvKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfTk9UX0lORk8pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQgdHlwZS4KLSAgICogQHJldHVybiByZXN1bHQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbmV3IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHBhcmFtIHJlc3VsdFR5cGUgYW4gYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIG5ldyBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGludmFsaWQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlIHdhcyBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEFzc2VydGlvblJlc3VsdFR5cGUgbmV3SW5zdGFuY2UoU3RyaW5nIHJlc3VsdFR5cGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlID0gbnVsbDsKLQotICAgIGlmIChyZXN1bHRUeXBlID09IG51bGwpCi0gICAgewotICAgICAgYXNzZXJ0aW9uUmVzdWx0VHlwZSA9IE5PVF9JTkZPOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHJlc3VsdFR5cGUuZXF1YWxzKF9BTEwpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBBTEw7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX09OTFlfRkFJTEVEKSkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRUeXBlID0gT05MWV9GQUlMRUQ7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX05PVF9QQVNTRUQpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBOT1RfUEFTU0VEOwotICAgIH0KLSAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmVxdWFscyhfTk9UX0lORk8pKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBOT1RfSU5GTzsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIkFuIGludmFsaWQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlIHdhcyBzcGVjaWZpZWQ6ICIgKyByZXN1bHRUeXBlICsgIi4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXNzZXJ0aW9uUmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVkNTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgYSBkZWZpbml0aW9uIG9mIHRoZSBhc3NlcnRpb24gcmVzdWx0cyB0aGF0IAotICogc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXBvcnQuICBJdCBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIAotICogdGhhdCBpbmRpY2F0ZXMgd2hpY2ggbWVzc2FnZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXBvcnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdFR5cGUgZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcGFyYW0gcmVzdWx0VHlwZSBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBzZWUgI2dldEFzc2VydGlvblJlc3VsdFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdFR5cGUoQXNzZXJ0aW9uUmVzdWx0VHlwZSByZXN1bHRUeXBlKTsKLQotICAvKioKLSAgICogR2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY2F0b3IuCi0gICAqIEByZXR1cm4gc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01lc3NhZ2VFbnRyeSgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljdG9yLgotICAgKiBAcGFyYW0gc2hvd01lc3NhZ2VFbnRyeSBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWN0b3IuCi0gICAqIEBzZWUgI2dldFNob3dNZXNzYWdlRW50cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNZXNzYWdlRW50cnkoYm9vbGVhbiBzaG93TWVzc2FnZUVudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHBhcmFtIHNob3dBc3NlcnRpb25EZXNjcmlwdGlvbiBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHBhcmFtIHNob3dGYWlsdXJlTWVzc2FnZSBzaG93IGZhaWx1cmUgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKGJvb2xlYW4gc2hvd0ZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHNob3cgZXJyb3IgZGV0YWlsIGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IGVycm9yIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gc2hvd2ZhaWx1cmVEZXRhaWwgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAc2VlICNnZXRTaG93RmFpbHVyZURldGFpbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0ZhaWx1cmVEZXRhaWwoYm9vbGVhbiBzaG93ZmFpbHVyZURldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9VRERJUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2JjZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBhIHJlZmVyZW5jZSB0byBhIGRpc2NvdmVyeSBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElSZWZlcmVuY2UgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX1VERElfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIFVEREkga2V5IHR5cGU6IGJpbmRpbmdLZXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nS2V5IjsKLQotICAvKioKLSAgICogVURESSBrZXkgdHlwZTogdE1vZGVsS2V5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE1PREVMX0tFWSA9ICJ0TW9kZWxLZXkiOwotCi0gIC8qKgotICAgKiBHZXQgVURESSAga2V5IHR5cGUuCi0gICAqIEByZXR1cm4gVURESSAga2V5IHR5cGUuCi0gICAqIEBzZWUgI3NldEtleVR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBrZXkgdHlwZS4KLSAgICogQHBhcmFtIGtleVR5cGUgVURESSBrZXkgdHlwZS4KLSAgICogQHNlZSAjZ2V0S2V5VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5VHlwZShTdHJpbmcga2V5VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBVRERJIGtleS4KLSAgICogQHJldHVybiBVRERJIGtleS4KLSAgICogQHNlZSAjc2V0S2V5Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBrZXkuCi0gICAqIEBwYXJhbSBrZXkgVURESSBrZXkuCi0gICAqIEBzZWUgI2dldEtleQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5KFN0cmluZyBrZXkpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnF1aXJ5IFVSTC4KLSAgICogQHJldHVybiBVRERJIGlucXVpcnkgVVJMLgotICAgKiBAc2VlICNzZXRJbnF1aXJ5VVJMCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLQotICAvKioKLSAgICogU2V0IFVEREkgaW5xdWlyeVVSTC4KLSAgICogQHBhcmFtIGlucXVpcnlVUkwgVURESSBpbnF1aXJ5VVJMLgotICAgKiBAc2VlICNnZXRJbnF1aXJ5VVJMCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50IFdTREwgZWxlbWVudC4KLSAgICogQHNlZSAjZ2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KTsKLQotICAvKioKLSAgICogR2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9XU0RMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTMzZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGJhc2UgaW50ZXJmYWNlIGZvciBXU0RMIGRlZmluaXRpb25zLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRWxlbWVudCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgV1NETCBlbGVtZW50IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IG5hbWVzcGFjZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFdTREwgZWxlbWVudCBuYW1lc3BhY2UuCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEByZXR1cm4gV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldE5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBwYXJhbSBuYW1lIFdTREwgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNnZXROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudCBxdWFsaWZpZWQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgcXVhbGlmaWVkIG5hbWUuCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNnZXRQYXJlbnRFbGVtZW50TmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50RWxlbWVudE5hbWUoU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgUU5hbWUuCi0gICAqIEByZXR1cm4gV1NETCBwYXJlbnQgZWxlbWVudCBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRQYXJlbnRFbGVtZW50UU5hbWUoKTsKLQotICAvKioKLSAgICogSXMgcG9ydCBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYSBwb3J0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0KCk7Ci0KLSAgLyoqCi0gICAqIElzIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBsZW1lbnQgaXMgYSBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIElzIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGlzIGEgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBJcyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVsZW1lbnQgaXMgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM1NTBjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgYSByZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExSZWZlcmVuY2UgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX1dTRExfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gV1NETCBlbGVtZW50LgotICAgKiBAc2VlICNzZXRXU0RMRWxlbWVudAotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFdTRExMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTG9jYXRpb24gV1NETCBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0V1NETExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFNlcnZpY2VMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlTG9jYXRpb24gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWVlNzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIGludGVyZmFjZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQW5hbHl6ZXJDb25maWdJbXBsIGltcGxlbWVudHMgQW5hbHl6ZXJDb25maWcKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdCByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjb25maWdVUkkgPSBudWxsOwotCi0gIC8qKgotICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVwb3J0VVJJID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1VSSTsKLQotICAvKioKLSAgICogUmVwbGFjZSByZXBvcnQgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVwbGFjZVJlcG9ydCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBBZGQgc3R5bGUgc2hlZXQuCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBQcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9Ci0gICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfVEVTVF9BU1NFUlRJT05TX0RPQ1VNRU5UX1VSSTsKLQotICAvKioKLSAgICogTWVzc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1VSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgY29ycmVsYXRpb24gdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY29ycmVsYXRpb25UeXBlID0KLSAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTjsKLQotICAvKioKLSAgICogV1NETCByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogVURESSByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ0ltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCBhbGwgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIHZlcmJvc2UgICAgICAgICAgICAgICAgICAgIHRoZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gICAgIGFuIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIHJlcG9ydFVSSSAgICAgICAgICAgICAgICAgIHJlcG9ydCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHJlcGxhY2VSZXBvcnQgICAgICAgICAgICAgIGEgcmVwbGFjZSByZXBvcnQgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gYWRkU3R5bGVTaGVldCAgICAgICAgICAgICAgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSAgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBsb2dVUkkgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSAgICAgICAgICAgIG1lc3NhZ2UgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHBhcmFtIHdzZGxSZWZlcmVuY2UgICAgICAgICAgICAgIGEgV1NETCByZWZlcmVuY2UuLgotICAgKiBAcGFyYW0gdWRkaVJlZmVyZW5jZSAgICAgICAgICAgICAgYSBVVURESSByZWZlcmVuY2UuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWdJbXBsKAotICAgIFN0cmluZyBkZXNjcmlwdGlvbiwKLSAgICBib29sZWFuIHZlcmJvc2UsCi0gICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLAotICAgIFN0cmluZyByZXBvcnRVUkksCi0gICAgYm9vbGVhbiByZXBsYWNlUmVwb3J0LAotICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCwKLSAgICBTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSwKLSAgICBTdHJpbmcgbG9nVVJJLAotICAgIFN0cmluZyBjb3JyZWxhdGlvblR5cGUsCi0gICAgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlLAotICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSkKLSAgewotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSByZXBvcnRVUkk7Ci0gICAgdGhpcy5yZXBsYWNlUmVwb3J0ID0gcmVwbGFjZVJlcG9ydDsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhZGRTdHlsZVNoZWV0OwotICAgIHRoaXMudGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9IHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkk7Ci0gICAgdGhpcy5sb2dVUkkgPSBsb2dVUkk7Ci0gICAgdGhpcy5jb3JyZWxhdGlvblR5cGUgPSBjb3JyZWxhdGlvblR5cGU7Ci0gICAgdGhpcy53c2RsUmVmZXJlbmNlID0gd3NkbFJlZmVyZW5jZTsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCkKLSAgewotICAgIHRoaXMubWVzc2FnZUxpc3QgPSBtZXNzYWdlTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI3NldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikKLSAgewotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWZXJib3NlT3B0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnZlcmJvc2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpCi0gIHsKLSAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbikKLSAgewotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0UmVwb3J0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVwb3J0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSByZXBvcnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAc2VlICNzZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXBsYWNlUmVwb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2VSZXBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHJlcG9ydCBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlUmVwb3J0KGJvb2xlYW4gcmVwbGFjZVJlcG9ydCkKLSAgewotICAgIHRoaXMucmVwbGFjZVJlcG9ydCA9IHJlcGxhY2VSZXBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHNlZSAjc2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIEFkZFN0eWxlU2hlZXQgZ2V0QWRkU3R5bGVTaGVldCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hZGRTdHlsZVNoZWV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkU3R5bGVTaGVldChBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQpCi0gIHsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhZGRTdHlsZVNoZWV0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldFRlc3RBc3NlcnRpb25Eb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldFRlc3RBc3NlcnRpb25Eb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oU3RyaW5nIHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgPSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldExvZ0xvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2dVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzTG9nU2V0KCkKLSAgewotICAgIHJldHVybiAobG9nVVJJICE9IG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNzZXRDb3JyZWxhdGlvblR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVsYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvcnJlbGF0aW9uVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHNlZSAjZ2V0Q29ycmVsYXRpb25UeXBlCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29ycmVsYXRpb25UeXBlKFN0cmluZyBjb3JyZWxhdGlvblR5cGUpCi0gIHsKLSAgICB0aGlzLmNvcnJlbGF0aW9uVHlwZSA9IGNvcnJlbGF0aW9uVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBXU0RMIHJlZmVyZW5jZSBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExSZWZlcmVuY2VTZXQoKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCA/IGZhbHNlIDogdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZSBnZXRXU0RMUmVmZXJlbmNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMUmVmZXJlbmNlKFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSkKLSAgewotICAgIHRoaXMud3NkbFJlZmVyZW5jZSA9IHdzZGxSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiAodGhpcy53c2RsUmVmZXJlbmNlID09IG51bGwpCi0gICAgICA/IG51bGwKLSAgICAgIDogdGhpcy53c2RsUmVmZXJlbmNlLmdldFNlcnZpY2VMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZyNnZXRXU0RMTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0V1NETExvY2F0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnI2lzVWRkaVJlZmVyZW5jZVNldCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVURESVJlZmVyZW5jZVNldCgpCi0gIHsKLSAgICByZXR1cm4gKHRoaXMudWRkaVJlZmVyZW5jZSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBVRERJUmVmZXJlbmNlIGdldFVERElSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudWRkaVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVERElSZWZlcmVuY2UoVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gdWRkaVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBjb25maWdVUkkpCi0gIHsKLSAgICB0aGlzLmNvbmZpZ1VSSSA9IGNvbmZpZ1VSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudCN0b1hNTFN0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFZlcmJvc2Ugb3B0aW9uCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVkVSQk9TRSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0VmVyYm9zZU9wdGlvbigpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9WRVJCT1NFICsgIj4iKTsKLQotICAgIC8vIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24KLSAgICBwdy5wcmludChhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotCi0gICAgLy8gcmVwb3J0IGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1JFUE9SVF9GSUxFICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9SRVBMQUNFICsgIj1cIiIgKyBnZXRSZXBsYWNlUmVwb3J0KCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OICsgIj1cIiIgKyBnZXRSZXBvcnRMb2NhdGlvbigpICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRVBPUlRfRklMRSArICI+Iik7Ci0KLSAgICAvLyB0ZXN0IGFzc2VydGlvbiBmaWxlCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OU19GSUxFICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUgKyAiPiIpOwotCi0gICAgLy8gbG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKTsKLSAgICBwdy5wcmludCgKLSAgICAgICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX0NPUlJFTEFUSU9OX1RZUEUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHRoaXMuY29ycmVsYXRpb25UeXBlCi0gICAgICAgICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldExvZ0xvY2F0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIFdTREwgcmVmZXJlbmNlIAotICAgIGlmICh0aGlzLndzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChnZXRXU0RMUmVmZXJlbmNlKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gVURESSBSZWZlcmVuY2UKLSAgICBpZiAodGhpcy51ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZ2V0VURESVJlZmVyZW5jZSgpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gdmVyYm9zZSBvcHRpb24KLSAgICBwdy5wcmludGxuKCIgIHZlcmJvc2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMudmVyYm9zZSk7Ci0KLSAgICAvLyBhc3NlcnRpb25SZXN1bHRzIG9wdGlvbnMKLSAgICBwdy5wcmludCh0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24udG9TdHJpbmcoKSk7Ci0KLSAgICAvLyByZXBvcnRGaWxlIG9wdGlvbnMKLSAgICBwdy5wcmludGxuKCIgIFJlcG9ydCBGaWxlOiIpOwotICAgIHB3LnByaW50bG4oIiAgICByZXBsYWNlIC4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXBsYWNlUmVwb3J0KTsKLSAgICBwdy5wcmludGxuKCIgICAgbG9jYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwb3J0VVJJKTsKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnRsbigiICAgIFN0eWxlIFNoZWV0OiIpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRIcmVmKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgaHJlZiAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0SHJlZigpKTsKLSAgICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VHlwZSgpICE9IG51bGwpCi0gICAgICAgIHB3LnByaW50bG4oCi0gICAgICAgICAgIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LmdldFR5cGUoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldFRpdGxlKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgdGl0bGUgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VGl0bGUoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldE1lZGlhKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgbWVkaWEgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0TWVkaWEoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldENoYXJzZXQoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBjaGFyc2V0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRDaGFyc2V0KCkpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRBbHRlcm5hdGUoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBhbHRlcm5hdGUgLi4uLi4uLi4uLi4uLi4gIgotICAgICAgICAgICAgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0QWx0ZXJuYXRlKCkpOwotICAgIH0KLQotICAgIC8vIHRlc3RBc3NlcnRpb25zRmlsZSBwYXJhbWV0ZXIKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgdGVzdEFzc2VydGlvbnNGaWxlIC4uLi4uLi4uLiAiICsgdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJKTsKLQotICAgIC8vIGxvZ0ZpbGUgb3B0aW9ucwotICAgIGlmICh0aGlzLmxvZ1VSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAgTWVzc2FnZSBMb2cgRmlsZToiKTsKLSAgICAgIHB3LnByaW50bG4oIiAgICBsb2NhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgICAgcHcucHJpbnRsbigiICAgIGNvcnJlbGF0aW9uVHlwZSAuLi4uLi4uLi4uICIgKyB0aGlzLmNvcnJlbGF0aW9uVHlwZSk7Ci0gICAgfQotCi0gICAgLy8gd3NkbFJlZmVyZW5jZSBvcHRpb25zICAgCi0gICAgaWYgKHRoaXMuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgewotICAgICAgcHcucHJpbnQodGhpcy53c2RsUmVmZXJlbmNlLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIHVkZGlSZWZlcmVuY2Ugb3B0aW9ucwotICAgIGlmICh0aGlzLmlzVURESVJlZmVyZW5jZVNldCgpKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMudWRkaVJlZmVyZW5jZS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIKLSAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAgZGVzY3JpcHRpb24gLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5kZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIGFuYWx5emVyIGNvbmZpZyBvYmplY3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0Q29uZmlnKEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnKQotICB7Ci0gICAgdGhpcy5jb25maWdVUkkgPSBhbmFseXplckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhbmFseXplckNvbmZpZy5nZXREZXNjcmlwdGlvbigpOwotICAgIHRoaXMudmVyYm9zZSA9IGFuYWx5emVyQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSBhbmFseXplckNvbmZpZy5nZXRSZXBvcnRMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZVJlcG9ydCA9IGFuYWx5emVyQ29uZmlnLmdldFJlcGxhY2VSZXBvcnQoKTsKLSAgICB0aGlzLmxvZ1VSSSA9IGFuYWx5emVyQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgdGhpcy5jb3JyZWxhdGlvblR5cGUgPSBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgPQotICAgICAgYW5hbHl6ZXJDb25maWcuZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCk7Ci0gICAgdGhpcy5hZGRTdHlsZVNoZWV0ID0gYW5hbHl6ZXJDb25maWcuZ2V0QWRkU3R5bGVTaGVldCgpOwotICAgIHRoaXMud3NkbFJlZmVyZW5jZSA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExSZWZlcmVuY2UoKTsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSBhbmFseXplckNvbmZpZy5nZXRVRERJUmVmZXJlbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlQXJncyhTdHJpbmdbXSBhcmdzLCBib29sZWFuIHZhbGlkYXRlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVmZXJlbmNlIHdzZGxSZWZlcmVuY2UgPSBudWxsOwotICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyByZWFkZXIKLSAgICBBbmFseXplckNvbmZpZ1JlYWRlciBhbmFseXplckNvbmZpZ1JlYWRlciA9IG5ldyBBbmFseXplckNvbmZpZ1JlYWRlckltcGwoKTsKLSAgICBhbmFseXplckNvbmZpZ1JlYWRlci5pbml0KHRoaXMubWVzc2FnZUxpc3QpOwotCi0gICAgLy8gQW5hbHl6ZXIgY29uZmlnIG9iamVjdCB3aGljaCB3aWxsIGJlIG1lcmdlZCBhZnRlciBhbGwgb2YgdGhlIGlucHV0IHBhcm1zIGFyZSBwcm9jZXNzZWQKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIEFzc2VydGlvbiByZXN1bHRzIG9wdGlvbgotICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBJZiBubyBpbnB1dCBhcmd1bWVudHMsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGFyZ3MubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gQUREOiAKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoInVzYWdlMDEiLCBBbmFseXplci5VU0FHRV9NRVNTQUdFKSk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gbG9jYXRlIHRoZSBjb25maWcgZmlsZSBvcHRpb24gKGlmIGl0IHdhcyBzcGVjaWZpZWQpCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWcKLSAgICAgIGlmICgoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvbmZpZyIpKQotICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncyA9Ci0gICAgICAgICAgYW5hbHl6ZXJDb25maWdSZWFkZXIucmVhZEFuYWx5emVyQ29uZmlnKAotICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBjb25maWcgZmlsZSB3YXMgbm90IHNwZWNpZmllZCwgdGhlbiBjcmVhdGUgYW5hbHl6ZXIgY29uZmlnIG9iamVjdAotICAgIGlmIChhbmFseXplckNvbmZpZ0Zyb21BcmdzID09IG51bGwpCi0gICAgewotICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncyA9IG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuaW5pdCh0aGlzLm1lc3NhZ2VMaXN0KTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uCi0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpKQotICAgICAgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWcKLSAgICAgIGlmICgoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvbmZpZyIpKQotICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYyIpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2tpcCB0aGlzIG9wdGlvbiBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwcm9jZXNzZWQKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRWZXJib3NlT3B0aW9uKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWFzc2VydGlvblJlc3VsdHMKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWFzc2VydGlvblJlc3VsdHMiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tZXNzYWdlRW50cnkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLW1lc3NhZ2VFbnRyeSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1NIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dNZXNzYWdlRW50cnkoCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtYXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWFzc2VydGlvbkRlc2NyaXB0aW9uIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUEiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtZmFpbHVyZU1lc3NhZ2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhaWx1cmVNZXNzYWdlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUYiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWZhaWx1cmVEZXRhaWwKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhaWx1cmVEZXRhaWwiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItRCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZURldGFpbCgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dGaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1sb2dGaWxlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWwiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0TG9nTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXRlc3RBc3NlcnRpb25GaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10ZXN0QXNzZXJ0aW9uRmlsZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi10IikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigKLSAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtcmVwb3J0RmlsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItcmVwb3J0RmlsZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1yIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFJlcG9ydExvY2F0aW9uKAotICAgICAgICAgIGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1yZXBsYWNlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1yZXBsYWNlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVIiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0UmVwbGFjZVJlcG9ydCgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb3JyZWxhdGlvblR5cGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvcnJlbGF0aW9uVHlwZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1DIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldENvcnJlbGF0aW9uVHlwZSgKLSAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtd3NkbEVsZW1lbnQKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXdzZGxFbGVtZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVciKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvcHRpb25OYW1lID0gYXJnc1thcmdDb3VudF07Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0KLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0gICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWUoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCwgb3B0aW9uTmFtZSkpOwotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgaWYgKCFhcmdzW2FyZ0NvdW50XS5zdGFydHNXaXRoKCItIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICAgIHdzZGxFbGVtZW50LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3c2RsUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh1ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICAgICAgIlRoZSAtd3NkbEVsZW1lbnQgb3B0aW9uIG11c3QgYXBwZWFyIGFmdGVyIHRoZSAtd3NkbFVSSSBvciAtdWRkaUtleSBvcHRpb25zLiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXNlcnZpY2VMb2NhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItc2VydmljZUxvY2F0aW9uIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0KLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodWRkaVJlZmVyZW5jZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRTZXJ2aWNlTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICAgICAgIlRoZSAtc2VydmljZUxvY2F0aW9uIG9wdGlvbiBtdXN0IGFwcGVhciBhZnRlciB0aGUgLXdzZGxVUkkgb3IgLXVkZGlLZXkgb3B0aW9ucy4iKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gLXdzZGxVUkkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXdzZGxVUkkiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItVyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB3c2RsUmVmZXJlbmNlID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETExvY2F0aW9uKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXVkZGlLZXlUeXBlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi11ZGRpS2V5VHlwZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1LIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBpZiAodWRkaVJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgICAgIHVkZGlSZWZlcmVuY2UgPSBuZXcgVURESVJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXlUeXBlKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXVkZGlLZXkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXVkZGlLZXkiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItayIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0S2V5KGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWlucXVpcnlVUkwKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWlucXVpcnlVUkwiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItaSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0SW5xdWlyeVVSTChnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFVERElSZWZlcmVuY2UodWRkaVJlZmVyZW5jZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogTmVlZCB0byBhZGQgc3VwcG9ydCBmb3Igb3RoZXIgb3B0aW9ucyAoLWNvbmZpZywgLWJpbmRpbmcsIGV0Yy4pCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcxMiIsCi0gICAgICAgICAgICBhcmdzW2FyZ0NvdW50XSwKLSAgICAgICAgICAgICJUaGUgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkOiIpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBhZGRTdHlsZVNoZWV0IHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhIGNvbW1lbnQgdmVyc2lvbiBvZiBpdAotICAgIGlmIChhbmFseXplckNvbmZpZ0Zyb21BcmdzLmdldEFkZFN0eWxlU2hlZXQoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRIcmVmKFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9YU0wpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0Q29tbWVudCh0cnVlKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MpOwotCi0gICAgaWYgKHZhbGlkYXRlKQotICAgIHsgIAotICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIHJlcXVpcmVkIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgYW5kIAotICAgICAgLy8gdGhhdCB0aGUgc3BlY2lmaWVkIG9uZXMgd2VyZSBjb3JyZWN0Ci0gICAgICBjaGVja0NvbmZpZ09wdGlvbnMoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGNvbmZpZyBvcHRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrQ29uZmlnT3B0aW9ucygpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBmaWxlTG9jYXRpb247Ci0KLSAgICAvLyBJZiB3c2RsUmVmZXJlbmNlIGFuZCB1ZGRpUmVmZXJlbmNlIHNwZWNpZmllZCwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoKHRoaXMuaXNXU0RMUmVmZXJlbmNlU2V0KCkpICYmICh0aGlzLmlzVURESVJlZmVyZW5jZVNldCgpKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwNCIsCi0gICAgICAgICAgIkNhbiBub3Qgc3BlY2lmeSBib3RoIHRoZSBXU0RMIHJlZmVyZW5jZSBhbmQgVURESSByZWZlcmVuY2Ugb3B0aW9ucyIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0ZXN0IGFzc2VydGlvbiBmaWxlIGV4aXN0cwotICAgIGlmICgoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNiIsCi0gICAgICAgICAgIlRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzE0IiwKLSAgICAgICAgICBmaWxlTG9jYXRpb24sCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246IikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGxvZyBmaWxlIGV4aXN0cwotICAgIGlmICgoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRMb2dMb2NhdGlvbigpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDIiLAotICAgICAgICAgICAgZmlsZUxvY2F0aW9uLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIGxvZyBmaWxlOiIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBXU0RMIGZpbGUgZXhpc3RzCi0gICAgaWYgKCh0aGlzLmdldFdTRExSZWZlcmVuY2UoKSAhPSBudWxsKQotICAgICAgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0V1NETFJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDMiLAotICAgICAgICAgICAgZmlsZUxvY2F0aW9uLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIFdTREwgZmlsZToiKSk7Ci0gICAgfQotCi0gICAgRmlsZSBmaWxlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgZmlsZSBvYmplY3QgZm9yIHJlcG9ydCBmaWxlCi0gICAgICBmaWxlID0gbmV3IEZpbGUodGhpcy5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTciLAotICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHJlcG9ydCBmaWxlIGxvY2F0aW9uLiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICF0aGlzLmdldFJlcGxhY2VSZXBvcnQoKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNSIsCi0gICAgICAgICAgIlJlcG9ydCBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCByZXBsYWNlIG9wdGlvbiB3YXMgbm90IHNwZWNpZmllZC4iKSk7Ci0gICAgfQotCi0gICAgaWYgKGNvcnJlbGF0aW9uVHlwZSAhPSBudWxsCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX0VORFBPSU5UKQotICAgICAgJiYgIXRoaXMuY29ycmVsYXRpb25UeXBlLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UpCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTikpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTgiLAotICAgICAgICAgICJJbnZhbGlkIGNvcnJlbGF0aW9uIHR5cGUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wdGlvbiB2YWx1ZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE9wdGlvblZhbHVlKFN0cmluZ1tdIGFyZ3MsIGludCBpbmRleCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKGFyZ3MsIGluZGV4LCBhcmdzW2luZGV4IC0gMV0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBvcHRpb24gdmFsdWUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRPcHRpb25WYWx1ZShTdHJpbmdbXSBhcmdzLCBpbnQgaW5kZXgsIFN0cmluZyBvcHRpb25OYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIElmIGluZGV4IGdyZWF0ZXIgdGhhbiBhcnJheSBsZW5ndGgsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGluZGV4ID49IGFyZ3MubGVuZ3RoKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEzIiwKLSAgICAgICAgICBvcHRpb25OYW1lLAotICAgICAgICAgICJPcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gb3B0aW9uIChpLmUuIHN0YXJ0cyB3aXRoIGEgIi0iKSwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJnc1tpbmRleF0uc3RhcnRzV2l0aCgiLSIpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEzIiwKLSAgICAgICAgICBvcHRpb25OYW1lLAotICAgICAgICAgICJPcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOiIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGFyZ3NbaW5kZXhdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZSBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQW5hbHl6ZXJDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5OTFjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCBpbXBsZW1lbnRzIEFuYWx5emVyQ29uZmlnUmVhZGVyCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3Q7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCkKLSAgewotICAgIHRoaXMubWVzc2FnZUxpc3QgPSBtZXNzYWdlTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXIjcmVhZEFuYWx5emVyQ29uZmlnKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoU3RyaW5nIGFuYWx5emVyQ29uZmlnVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEZpbGVSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGFuYWx5emVyQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDEiLAotICAgICAgICAgIGFuYWx5emVyQ29uZmlnVVJJLAotICAgICAgICAgICJDb3VsZCBub3QgZmluZCBhbmFseXplciBjb25maWcgZmlsZTogIiksCi0gICAgICAgIGZuZmUpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgYW5hbHl6ZXJDb25maWdVUkksCi0gICAgICAgICAgIkNvdWxkIG5vdCByZWFkIGFuYWx5emVyIGNvbmZpZyBmaWxlOiAiKSwKLSAgICAgICAgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlYWRBbmFseXplckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXIjcmVhZEFuYWx5emVyQ29uZmlnKFJlYWRlcikKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcgPSBuZXcgQW5hbHl6ZXJDb25maWdJbXBsKCk7Ci0KLSAgICAvLyBQYXJzZSBYTUwKLSAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChyZWFkZXIpOwotCi0gICAgLy8gUGFyc2UgZWxlbWVudHMgaW4gdGhlIGNvbmZpZyBkb2N1bWVudAotICAgIHBhcnNlQ29uZmlnRWxlbWVudChhbmFseXplckNvbmZpZywgZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQotICAgIHJldHVybiBhbmFseXplckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBjb25maWcgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZUNvbmZpZ0VsZW1lbnQoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEFERDogR2V0IG5hbWUgYW5kIHZlcnNpb24KLQotICAgIC8vIEFERDogVmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRWxlbWVudCBuYW1lOiAiICsgbmV4dEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8ZGVzY3JpcHRpb24+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9ERVNDUklQVElPTikpCi0gICAgICB7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldERlc2NyaXB0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHZlcmJvc2U+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1ZFUkJPU0UpKQotICAgICAgewotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKAotICAgICAgICAgIFhNTFV0aWxzLmdldEJvb2xlYW5WYWx1ZShuZXh0RWxlbWVudCwgZmFsc2UpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGFzc2VydGlvblJlc3VsdHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9SRVNVTFRTKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbiBvYmplY3QKLSAgICAgICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICAgICAgICBuZXcgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwoKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAgICAgICAvLyBTZXQgcmVzdWx0IHR5cGUKLSAgICAgICAgU3RyaW5nIHJlc3VsdFR5cGUgPQotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9UWVBFKTsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UocmVzdWx0VHlwZSkpOwotCi0gICAgICAgIC8vIFNldCBzaG93IGxvZyBlbnRyeQotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dNZXNzYWdlRW50cnkoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9NRVNTQUdFX0VOVFJZLAotICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKTsKLQotICAgICAgICAvLyBTZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZU1lc3NhZ2UoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9GQUlMVVJFX01FU1NBR0UsCi0gICAgICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLmdldFNob3dGYWlsdXJlTWVzc2FnZSgpKSk7Ci0KLSAgICAgICAgLy8gU2V0IHNob3cgZmFpbHVyZSBkZXRhaWwKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZURldGFpbCgKLSAgICAgICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoCi0gICAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0ZBSUxVUkVfREVUQUlMLAotICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93RmFpbHVyZURldGFpbCgpKSk7Ci0KLSAgICAgICAgLy8gUkVNT1ZFOiBTZXQgc2hvdyB3YXJuaW5nIG1lc3NhZ2UKLSAgICAgICAgLy9hc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dXYXJuaW5nTWVzc2FnZShYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUobmV4dEVsZW1lbnQsIAotICAgICAgICAvLyAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1dBUk5JTkdfTUVTU0FHRSwgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93V2FybmluZ01lc3NhZ2UoKSkpOwotICAgICAgfQotCi0gICAgICAvLyA8cmVwb3J0RmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUX0ZJTEUpKQotICAgICAgewotICAgICAgICBwYXJzZVJlcG9ydEZpbGVFbGVtZW50KGFuYWx5emVyQ29uZmlnLCBuZXh0RWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uRmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUpKQotICAgICAgewotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0ZJTEUpKQotICAgICAgewotICAgICAgICBTdHJpbmcgY29ycmVsYXRpb25UeXBlID0KLSAgICAgICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZSgKLSAgICAgICAgICAgIG5leHRFbGVtZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfQ09SUkVMQVRJT05fVFlQRSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldENvcnJlbGF0aW9uVHlwZSgKLSAgICAgICAgICBjb3JyZWxhdGlvblR5cGUgPT0gbnVsbCA/ICJvcGVyYXRpb24iIDogY29ycmVsYXRpb25UeXBlKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0TG9nTG9jYXRpb24oWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8d3NkbFJlZmVyZW5jZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9SRUZFUkVOQ0UpKQotICAgICAgewotICAgICAgICBwYXJzZVdzZGxSZWZlcmVuY2UoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPHVkZGlSZWZlcmVuY2U+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1VERElfUkVGRVJFTkNFKSkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VVZGRpUmVmZXJlbmNlKGFuYWx5emVyQ29uZmlnLCBuZXh0RWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhyb3cgZXhjZXB0aW9uCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcwNiIsCi0gICAgICAgICAgICBuZXh0RWxlbWVudC5nZXRMb2NhbE5hbWUoKSwKLSAgICAgICAgICAgICJJbnZhbGlkIGFuYWx5emVyIGNvbmZpZyBlbGVtZW50OiIpKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHJlcG9ydEZpbGUgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZVJlcG9ydEZpbGVFbGVtZW50KAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgcmVwb3J0IGxvY2F0aW9uIGFuZCByZXBsYWNlIGluZGljYXRvcgotICAgIGFuYWx5emVyQ29uZmlnLnNldFJlcGxhY2VSZXBvcnQoCi0gICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSwgZmFsc2UpKTsKLSAgICBhbmFseXplckNvbmZpZy5zZXRSZXBvcnRMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBlbGVtZW50LAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9MT0NBVElPTiwKLSAgICAgICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1VSSSkpOwotCi0gICAgLy8gQUREOiBJZiB0aGUgcmVwb3J0IGxvY2F0aW9uIHdhc24ndCBzcGVjaWZpZWQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgLy9pZiAoYW5hbHl6ZXJDb25maWcuZ2V0UmVwb3J0TG9jYXRpb24oKSA9PSBudWxsKQotICAgIC8vICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJUaGUgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgY29udGFpbiB0aGUgcmVwb3J0IGZpbGUgbG9jYXRpb24uIik7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2Ugd3NkbCByZWZlcmVuY2UgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZVdzZGxSZWZlcmVuY2UoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBVRERJIHJlZmVyZW5jZQotICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG5ldyBXU0RMUmVmZXJlbmNlSW1wbCgpOwotCi0gICAgLy8gU2V0IFdTREwgcmVmZXJlbmNlCi0gICAgYW5hbHl6ZXJDb25maWcuc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDx3c2RsVVJJPgotICAgICAgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9VUkkpKQotICAgICAgewotICAgICAgICAvLyBTZXQgV1NETCBsb2NhdGlvbgotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxzZXJ2aWNlTG9jYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04pKQotICAgICAgewotICAgICAgICAvLyBTZXQgc2VydmljZSBsb2NhdGlvbgotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFNlcnZpY2VMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsRWxlbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IFdTREwgZWxlbWVudAotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHBhcnNlV3NkbEVsZW1lbnQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICAvLyBJZiBXU0RMIGVsZW1lbnQgb3IgV1NMIFVSSSBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmICgod3NkbFJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpID09IG51bGwpCi0gICAgICB8fCAod3NkbFJlZmVyZW5jZS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwNyIsCi0gICAgICAgICAgIkJvdGggdGhlIDx3c2RsRWxlbWVudD4gYW5kIDx3c2RsVVJJPiBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4iKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdHlwZSBpcyBwb3J0IG9yIG9wZXJhdGlvbiwgdGhlbiBwYXJlbnQgZWxlbWVudCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkCi0gICAgaWYgKCgod3NkbFJlZmVyZW5jZQotICAgICAgLmdldFdTRExFbGVtZW50KCkKLSAgICAgIC5nZXRUeXBlKCkKLSAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUKSkKLSAgICAgIHx8ICh3c2RsUmVmZXJlbmNlCi0gICAgICAgIC5nZXRXU0RMRWxlbWVudCgpCi0gICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpKQotICAgICAgJiYgKHdzZGxSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAiVGhlIHBhcmVudEVsZW1lbnROYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aXRoIGEgV1NETCB0eXBlIG9mICIKLSAgICAgICAgICAgICsgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQKLSAgICAgICAgICAgICsgIiBvciAiCi0gICAgICAgICAgICArIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04KLSAgICAgICAgICAgICsgIi4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHVkZGkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlVWRkaVJlZmVyZW5jZSgKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIFVEREkgcmVmZXJlbmNlCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0KLSAgICAvLyBTZXQgVURESSByZWZlcmVuY2UKLSAgICBhbmFseXplckNvbmZpZy5zZXRVRERJUmVmZXJlbmNlKHVkZGlSZWZlcmVuY2UpOwotCi0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgd2hpbGUgKG5leHRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gPGlucXVpcnlVUkw+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9JTlFVSVJZX1VSTCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBpbnF1aXJ5IFVSTAotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldElucXVpcnlVUkwoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8dWRkaUtleT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkpKQotICAgICAgewotICAgICAgICAvLyBTZXQgVURESSBrZXkgYW5kIGtleSB0eXBlCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0S2V5KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXlUeXBlKAotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9UWVBFKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsRWxlbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IFdTREwgZWxlbWVudAotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHBhcnNlV3NkbEVsZW1lbnQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHNlcnZpY2VMb2NhdGlvbj4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTikpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLyogUkVNT1ZFOgotICAgICAgLy8gPHdzZGxFbGVtZW50PgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX0VMRU1FTlQpKSB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHBhcnNlV3NkbEVsZW1lbnQoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgICB9Ci0gICAgICAgKi8KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBXU0RMRWxlbWVudCBwYXJzZVdzZGxFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBTZXQgdHlwZSwgbmFtZXNwYWNlLCBwYXJlbnQgZWxlbWVudCBuYW1lIGFuZCBuYW1lCi0gICAgd3NkbEVsZW1lbnQuc2V0VHlwZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKTsKLSAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UoCi0gICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UpKTsKLSAgICB3c2RsRWxlbWVudC5zZXRQYXJlbnRFbGVtZW50TmFtZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBlbGVtZW50LAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FKSk7Ci0KLSAgICBTdHJpbmcgd3NkbEVsZW1lbnROYW1lID0gWE1MVXRpbHMuZ2V0VGV4dChlbGVtZW50KTsKLSAgICBpZiAod3NkbEVsZW1lbnROYW1lLmVxdWFscygiIikpCi0gICAgewotICAgICAgLy8gVGhyb3cgZXhjZXB0aW9uCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKCJjb25maWcxOSIsICJUaGUgV1NETCBlbGVtZW50IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIikpOwotICAgIH0KLSAgICB3c2RsRWxlbWVudC5zZXROYW1lKHdzZGxFbGVtZW50TmFtZSk7Ci0KLSAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICByZXR1cm4gaXNFbGVtZW50KAotICAgICAgZWxlbWVudCwKLSAgICAgIGdldFZhbGlkV1NJQW5hbHl6ZXJDb25maWdOYW1lc3BhY2VzKCksCi0gICAgICBsb2NhbE5hbWUpOwotICB9Ci0KLSAgCi0gIHN0YXRpYyBwdWJsaWMgTGlzdCBnZXRWYWxpZFdTSUFuYWx5emVyQ29uZmlnTmFtZXNwYWNlcygpCi0gIHsKLSAgCUFycmF5TGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAJbGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHXzIwMDMpOwotICAJbGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHKTsKLSAgCXJldHVybiBsaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgTGlzdCBuYW1lc3BhY2VzLAotICAgIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICByZXR1cm4gWE1MVXRpbHMuaXNFbGVtZW50KGVsZW1lbnQsIG5hbWVzcGFjZXMsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0Fzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTNkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbiBkZWZpbml0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCBpbXBsZW1lbnRzIEFzc2VydGlvblJlc3VsdHNPcHRpb24KLXsKLSAgLyoqCi0gICAqIEFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUgPSBBc3NlcnRpb25SZXN1bHRUeXBlLkFMTDsKLQotICAvKioKLSAgICogU2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dNZXNzYWdlRW50cnkgPSB0cnVlOwotCi0gIC8qKgotICAgKiBTaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTsKLQotICAvKioKLSAgICogU2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0ZhaWx1cmVNZXNzYWdlID0gdHJ1ZTsKLQotICAvKioKLSAgICogU2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RmFpbHVyZURldGFpbCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdFR5cGUKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRUeXBlIGdldEFzc2VydGlvblJlc3VsdFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUpCi0gIHsKLSAgICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRTaG93TWVzc2FnZUVudHJ5Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93TWVzc2FnZUVudHJ5KCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dNZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd01lc3NhZ2VFbnRyeShib29sZWFuIHNob3dNZXNzYWdlRW50cnkpCi0gIHsKLSAgICB0aGlzLnNob3dNZXNzYWdlRW50cnkgPSBzaG93TWVzc2FnZUVudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dBc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW5kaWN0b3IuCi0gICAqIEBzZWUgI2dldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGJvb2xlYW4gc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5zaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGZhaWx1cmUgbWVzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZU1lc3NhZ2UoYm9vbGVhbiBzaG93RmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLnNob3dGYWlsdXJlTWVzc2FnZSA9IHNob3dGYWlsdXJlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zaG93RmFpbHVyZURldGFpbDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZURldGFpbChib29sZWFuIHNob3dGYWlsdXJlRGV0YWlsKQotICB7Ci0gICAgdGhpcy5zaG93RmFpbHVyZURldGFpbCA9IHNob3dGYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgIEFzc2VydGlvbiBSZXN1bHRzOiIpOwotICAgIHB3LnByaW50bG4oIiAgICB0eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXN1bHRUeXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWVzc2FnZUVudHJ5IC4uLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd01lc3NhZ2VFbnRyeSk7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gLi4uLi4gIiArIHRoaXMuc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKTsKLSAgICBwdy5wcmludGxuKCIgICAgZmFpbHVyZU1lc3NhZ2UgLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlKTsKLSAgICBwdy5wcmludGxuKCIgICAgZmFpbHVyZURldGFpbCAuLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd0ZhaWx1cmVEZXRhaWwpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0IGFzIGFuIFhNTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9SRVNVTFRTICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyBnZXRBc3NlcnRpb25SZXN1bHRUeXBlKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9NRVNTQUdFX0VOVFJZICsgIj1cIiIgKyBnZXRTaG93TWVzc2FnZUVudHJ5KCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9BU1NFUlRJT05fREVTQ1JJUFRJT04KLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICsgIlwiICIpOwotICAgIHB3LnByaW50KAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9NRVNTQUdFCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKQotICAgICAgICArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9ERVRBSUwKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dGYWlsdXJlRGV0YWlsKCkKLSAgICAgICAgKyAiXCIvPiIpOwotICAgIC8vIFJFTU9WRToKLSAgICAvL3B3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfV0FSTklOR19NRVNTQUdFICsgIj1cIiIgKyBnZXRTaG93V2FybmluZ01lc3NhZ2UoKSArICJcIi8+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1VERElSZWZlcmVuY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzdiNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGlpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgdG8gYSBkaXNjb3ZlcnkgYXJ0aWZhY3QuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgVURESVJlZmVyZW5jZQotewotICAvKioKLSAgICogVURESSBrZXkgdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcga2V5VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBrZXkgPSBudWxsOwotCi0gIC8qKgotICAgKiBVRERJIGlucXVpcnkgVVJMLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBpbnF1aXJ5VVJMID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogU2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZUxvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2UjZ2V0S2V5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMua2V5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNzZXRLZXlUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEtleVR5cGUoU3RyaW5nIGtleVR5cGUpCi0gIHsKLSAgICBpZiAoa2V5VHlwZS5lcXVhbHMoQklORElOR19LRVkpIHx8IGtleVR5cGUuZXF1YWxzKFRNT0RFTF9LRVkpKQotICAgICAgdGhpcy5rZXlUeXBlID0ga2V5VHlwZTsKLSAgICBlbHNlCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiSW52YWxpZCBVRERJIGtleSB0eXBlOiBbIiArIGtleVR5cGUgKyAiXS4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNnZXRLZXkoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRLZXkoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMua2V5OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI3NldEtleShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSkKLSAgewotICAgIHRoaXMua2V5ID0ga2V5OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI2dldElucXVpcnlVUkwoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiB0aGlzLmlucXVpcnlVUkw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2Ujc2V0SW5xdWlyeVVSTChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5pbnF1aXJ5VVJMID0gaW5xdWlyeVVSTDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRTZXJ2aWNlTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI3NldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgIFVEREkgUmVmZXJlbmNlOiAiKTsKLSAgICBwdy5wcmludGxuKCIgICAgVURESSBLZXk6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5rZXlUeXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgICBrZXkgLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMua2V5KTsKLSAgICBwdy5wcmludGxuKCIgICAgaW5xdWlyeVVSTCAuLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuaW5xdWlyeVVSTCk7Ci0gICAgaWYgKHRoaXMuc2VydmljZUxvY2F0aW9uICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKCIgICAgc2VydmljZUxvY2F0aW9uIC4uLi4uLi4uLi4gIiArIHRoaXMuc2VydmljZUxvY2F0aW9uKTsKLSAgICBpZiAodGhpcy53c2RsRWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnQodGhpcy53c2RsRWxlbWVudC50b1N0cmluZygpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBFbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldEtleVR5cGUoKSArICJcIj4iKTsKLSAgICBwdy5wcmludChnZXRLZXkoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkgKyAiPiIpOwotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSU5RVUlSWV9VUkwgKyAiPiIpOwotICAgIHB3LnByaW50KGdldElucXVpcnlVUkwoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSU5RVUlSWV9VUkwgKyAiPiIpOwotCi0gICAgaWYgKHRoaXMud3NkbEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KGdldFdTRExFbGVtZW50KCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04gKyAiPiIpOwotICAgICAgcHcucHJpbnQoZ2V0U2VydmljZUxvY2F0aW9uKCkpOwotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgfQotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzY3ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBXU0RMIGRlZmluaXRpb25zLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFdTRExFbGVtZW50Ci17Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZTsKLQotICAvKioKLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldE5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5uYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUodGhpcy5uYW1lc3BhY2UsIHRoaXMubmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjc2V0UGFyZW50RWxlbWVudE5hbWUKLSAgCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI2dldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50TmFtZShTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUpCi0gIHsKLSAgICB0aGlzLnBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50I2dldFBhcmVudEVsZW1lbnRRTmFtZSgpCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUodGhpcy5uYW1lc3BhY2UsIHRoaXMucGFyZW50RWxlbWVudE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHBvcnQgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGJpbmRpbmcgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgV1NETCBFbGVtZW50OiAiKTsKLSAgICBwdy5wcmludGxuKCIgICAgICB0eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMudHlwZSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgbmFtZXNwYWNlIC4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLm5hbWVzcGFjZSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgbmFtZSAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLm5hbWUpOwotCi0gICAgaWYgKHRoaXMucGFyZW50RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgICAgIHBhcmVudEVsZW1lbnROYW1lIC4uLi4uLiAiICsgdGhpcy5wYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QgYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldFR5cGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UgKyAiPVwiIiArIGdldE5hbWVzcGFjZSgpICsgIlwiICIpOwotICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICBwdy5wcmludCgKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfUEFSRU5UX0VMRU1FTlRfTkFNRQotICAgICAgICAgICsgIj1cIiIKLSAgICAgICAgICArIGdldFBhcmVudEVsZW1lbnROYW1lKCkKLSAgICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50KCI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0TmFtZSgpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9XU0RMUmVmZXJlbmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJmZjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlIHRvIGEgZGVzY3JpcHRpb24gYXJ0aWZhY3QuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgV1NETFJlZmVyZW5jZQotewotICAvKioKLSAgICogV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogU2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZUxvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbExvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMUmVmZXJlbmNlSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciB3aXRoIGFsbCBzZXR0aW5ncy4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50ICAgICAgYSBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsTG9jYXRpb24gICAgIGEgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiAgYSBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFdTRExSZWZlcmVuY2VJbXBsKAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50LAotICAgIFN0cmluZyB3c2RsTG9jYXRpb24sCi0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgICB0aGlzLndzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbjsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IHNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI3NldFdTRExMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgewotICAgIHRoaXMud3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0U2VydmljZUxvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgV1NETCBSZWZlcmVuY2U6Iik7Ci0gICAgcHcucHJpbnQodGhpcy53c2RsRWxlbWVudC50b1N0cmluZygpKTsKLSAgICBwdy5wcmludGxuKCIgICAgd3NkbFVSSSAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMud3NkbExvY2F0aW9uKTsKLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgc2VydmljZUxvY2F0aW9uIC4uLi4uLi4uLi4gIiArIHRoaXMuc2VydmljZUxvY2F0aW9uKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBFbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFdTRExFbGVtZW50KCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9XU0RMX1VSSSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0V1NETExvY2F0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1dTRExfVVJJICsgIj4iKTsKLQotICAgIGlmICh0aGlzLnNlcnZpY2VMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldFNlcnZpY2VMb2NhdGlvbigpKSk7Ci0gICAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TRVJWSUNFX0xPQ0FUSU9OICsgIj4iKTsKLSAgICB9Ci0KLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2NvbW1vbi9BZGRTdHlsZVNoZWV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZGY3ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIEFkZFN0eWxlU2hlZXQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQWRkU3R5bGVTaGVldCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQUREX1NUWUxFX1NIRUVUOwotCi0gIC8qKgotICAgKiBHZXQgaHJlZi4KLSAgICogQHJldHVybiBocmVmLgotICAgKiBAc2VlICNzZXRIcmVmCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhyZWYoKTsKLQotICAvKioKLSAgICogU2V0IGhyZWYuCi0gICAqIEBwYXJhbSBocmVmIGEgaHJlZi4KLSAgICogQHNlZSAjZ2V0SHJlZgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SHJlZihTdHJpbmcgaHJlZik7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYSB0eXBlLgotICAgKiBAc2VlICNnZXRUeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogR2V0IHRpdGxlLgotICAgKiBAcmV0dXJuIHRpdGxlLgotICAgKiBAc2VlICNzZXRUaXRsZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGl0bGUuCi0gICAqIEBwYXJhbSB0aXRsZSBhIHRpdGxlLgotICAgKiBAc2VlICNnZXRUaXRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIHRpdGxlKTsKLQotICAvKioKLSAgICogR2V0IG1lZGlhLgotICAgKiBAcmV0dXJuIG1lZGlhLgotICAgKiBAc2VlICNzZXRNZWRpYQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZWRpYSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGl0bGUuCi0gICAqIEBwYXJhbSBtZWRpYSBtZWRpYS4KLSAgICogQHNlZSAjZ2V0TWVkaWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lZGlhKFN0cmluZyBtZWRpYSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjaGFyc2V0LgotICAgKiBAcmV0dXJuIGNoYXJzZXQuCi0gICAqIEBzZWUgI3NldENoYXJzZXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhcnNldCgpOwotCi0gIC8qKgotICAgKiBTZXQgY2hhcnNldC4KLSAgICogQHBhcmFtIGNoYXJzZXQgY2hhcnNldC4KLSAgICogQHNlZSAjZ2V0Q2hhcnNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hhcnNldChTdHJpbmcgY2hhcnNldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhbHRlcm5hdGUuCi0gICAqIEByZXR1cm4gYWx0ZXJuYXRlLgotICAgKiBAc2VlICNzZXRBbHRlcm5hdGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWx0ZXJuYXRlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhbHRlcm5hdGUuCi0gICAqIEBwYXJhbSBhbHRlcm5hdGUgYWx0ZXJuYXRlLgotICAgKiBAc2VlICNnZXRBbHRlcm5hdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsdGVybmF0ZShTdHJpbmcgYWx0ZXJuYXRlKTsKLQotICAvKioKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIGJvb2xlYW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KGJvb2xlYW4gY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVTaGVldFN0cmluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2NvbW1vbi9pbXBsL0FkZFN0eWxlU2hlZXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NjVkMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBBZGRTdHlsZVNoZWV0IGVsZW1lbnQuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQWRkU3R5bGVTaGVldEltcGwgaW1wbGVtZW50cyBBZGRTdHlsZVNoZWV0Ci17Ci0gIC8qKgotICAgKiBBdHRyaWJ1dGUgdmFsdWVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXR0cmlidXRlVmFsdWVMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhdHRyaWJ1dGVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGF0dHJpYnV0ZU5hbWVMaXN0ID0KLSAgICB7Ci0gICAgICBXU0lDb25zdGFudHMuQVRUUl9IUkVGLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSwKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VULAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFIH07Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGEgY29tbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNvbW1lbnQgPSBmYWxzZTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldEhyZWYoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIcmVmKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfSFJFRik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldEhyZWYoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SHJlZihTdHJpbmcgaHJlZikKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9IUkVGLCBocmVmKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9UWVBFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0VHlwZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsIHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRUaXRsZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNzZXRUaXRsZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpCi0gIHsKLSAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5wdXQoV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUsIHRpdGxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0TWVkaWEoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZWRpYSgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZykgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QuZ2V0KFdTSUNvbnN0YW50cy5BVFRSX01FRElBKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0TWVkaWEoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVkaWEoU3RyaW5nIG1lZGlhKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX01FRElBLCBtZWRpYSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldENoYXJzZXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDaGFyc2V0KCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldENoYXJzZXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hhcnNldChTdHJpbmcgY2hhcnNldCkKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VULCBjaGFyc2V0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0QWx0ZXJuYXRlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWx0ZXJuYXRlKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0QWx0ZXJuYXRlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsdGVybmF0ZShTdHJpbmcgYWx0ZXJuYXRlKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX0FMVEVSTkFURSwgYWx0ZXJuYXRlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChib29sZWFuIGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRTdHlsZVNoZWV0U3RyaW5nKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVTaGVldFN0cmluZygpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc3R5bGVTaGVldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGlmIChjb21tZW50KQotICAgICAgc3R5bGVTaGVldC5hcHBlbmQoIjwhLS0gIik7Ci0KLSAgICBzdHlsZVNoZWV0LmFwcGVuZCgiPD94bWwtc3R5bGVzaGVldCIpOwotCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCh2YWx1ZSA9IChTdHJpbmcpIGF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoYXR0cmlidXRlTmFtZUxpc3RbaV0pKQotICAgICAgICAhPSBudWxsKQotICAgICAgICBzdHlsZVNoZWV0LmFwcGVuZCgiICIgKyBhdHRyaWJ1dGVOYW1lTGlzdFtpXSArICI9XCIiICsgdmFsdWUgKyAiXCIiKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHN0eWxlU2hlZXQuYXBwZW5kKCIgPz4iKTsKLQotICAgIGlmIChjb21tZW50KQotICAgICAgc3R5bGVTaGVldC5hcHBlbmQoIiAtLT4iKTsKLQotICAgIHJldHVybiBzdHlsZVNoZWV0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldFN0eWxlU2hlZXRTdHJpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9IUkVGICsgIj1cIiIgKyBnZXRIcmVmKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0VHlwZSgpICsgIlwiICIpOwotICAgIGlmIChnZXRUaXRsZSgpICE9IG51bGwpCi0gICAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9USVRMRSArICI9XCIiICsgZ2V0VGl0bGUoKSArICJcIiAiKTsKLSAgICBpZiAoZ2V0TWVkaWEoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEgKyAiPVwiIiArIGdldE1lZGlhKCkgKyAiXCIgIik7Ci0gICAgaWYgKGdldENoYXJzZXQoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCArICI9XCIiICsgZ2V0Q2hhcnNldCgpICsgIlwiICIpOwotICAgIGlmIChnZXRBbHRlcm5hdGUoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFICsgIj1cIiIgKyBnZXRBbHRlcm5hdGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKCIvPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2ZDI3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCBmb3IgYWxsIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4ZGUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci0KLS8qKgotICogVGhpcyBhYnN0cmFjdCBjbGFzcyBkZWZpbmVzIHRoZSBmYWN0b3J5IGludGVyZmFjZSB0aGF0IGNhbiBiZSB1c2VkIHRvIAotICogcmVhZCBhbmQgd3JpdGUgYWxsIG9mIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudEZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIEdldCBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeS4KLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIGNyZWF0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBEb2N1bWVudEZhY3RvcnkgbmV3SW5zdGFuY2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBSZXR1cm4gaW5zdGFuY2Ugb2YgZmFjdG9yeQotICAgIHJldHVybiBuZXdJbnN0YW5jZShnZXRGYWN0b3J5Q2xhc3NOYW1lKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeSB1c2luZyB0aGUgc3BlY2lmaWVkCi0gICAqIGZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICogQHBhcmFtIGZhY3RvcnlDbGFzc05hbWUgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRGYWN0b3J5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY3JlYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIERvY3VtZW50RmFjdG9yeSBuZXdJbnN0YW5jZShTdHJpbmcgZmFjdG9yeUNsYXNzTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gbnVsbDsKLQotICAgIC8vIElmIGEgZmFjdG9yeSBjbGFzcyBuYW1lIHdhcyBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIG9iamVjdAotICAgIGlmIChmYWN0b3J5Q2xhc3NOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBjbGFzcyBvYmplY3QKLSAgICAgICAgQ2xhc3MgZmFjdG9yeUNsYXNzID0gQ2xhc3MuZm9yTmFtZShmYWN0b3J5Q2xhc3NOYW1lKTsKLQotICAgICAgICAvLyBDcmVhdGUgbmV3IGZhY3RvcnkKLSAgICAgICAgZG9jdW1lbnRGYWN0b3J5ID0gKERvY3VtZW50RmFjdG9yeSkgZmFjdG9yeUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGluc3RhbnRpYXRlIGRvY3VtZW50IGZhY3RvcnkgY2xhc3M6ICIKLSAgICAgICAgICAgICsgZmFjdG9yeUNsYXNzTmFtZQotICAgICAgICAgICAgKyAiLiIsCi0gICAgICAgICAgZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJBIFdTSURvY3VtZW50RmFjdG9yeSBpbXBsZW1lbnRhdGlvbiBjbGFzcyB3YXMgbm90IGZvdW5kLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmYWN0b3J5Ci0gICAgcmV0dXJuIGRvY3VtZW50RmFjdG9yeTsKLSAgfQotCi0gIC8vIERPQ1VNRU5UIFRZUEVTCi0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZmlsZS4KLSAgICogQHJldHVybiBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBMb2cgbmV3TG9nKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIG1vbml0b3IgY29uZmlnLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1vbml0b3JDb25maWcgbmV3TW9uaXRvckNvbmZpZygpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFuYWx5emVyQ29uZmlnIG5ld0FuYWx5emVyQ29uZmlnKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUHJvZmlsZUFzc2VydGlvbnMgbmV3UHJvZmlsZUFzc2VydGlvbnMoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHJlcG9ydC4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBSZXBvcnQgbmV3UmVwb3J0KCk7Ci0KLSAgLy8gUkVBREVSUwotCi0gIC8qKgotICAgKiBDcmVhdGUgcHJvZmlsZSBhc3NlcnRpb25zIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHByb2ZpbGUgYXNzZXJ0aW9ucyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIgbmV3UHJvZmlsZUFzc2VydGlvbnNSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBNb25pdG9yQ29uZmlnUmVhZGVyIG5ld01vbml0b3JDb25maWdSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbmZpZyByZWFkZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFuYWx5emVyQ29uZmlnUmVhZGVyIG5ld0FuYWx5emVyQ29uZmlnUmVhZGVyKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgcmVhZGVyLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbG9nIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBMb2dSZWFkZXIgbmV3TG9nUmVhZGVyKCk7Ci0KLSAgLy8gQUREOiBBZGQgb3RoZXIgcmVhZGVycwotCi0gIC8vIFdSSVRFUlMKLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydCB3cml0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnQgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFJlcG9ydFdyaXRlciBuZXdSZXBvcnRXcml0ZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyB3cml0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBsb2cgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IExvZ1dyaXRlciBuZXdMb2dXcml0ZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgcmVwb3J0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBSZXBvcnRlciBuZXdSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKTsKLQotICAvLyBBREQ6IEFkZCBvdGhlciB3cml0ZXJzCi0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIGZhY3RvcnkgY2xhc3MgbmFtZSB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgSmF2YSBwcm9wZXJ0eS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5Q2xhc3NOYW1lKCkKLSAgewotICAgIC8vIEdldCBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAgICAgV1NJUHJvcGVydGllcy5QUk9QX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9ET0NVTUVOVF9GQUNUT1JZKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2NlNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIEdldCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZG9jdW1lbnRVUkkgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50V3JpdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODg5MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHdyaXRlIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgRG9jdW1lbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIENvbmZvcm1hbmNlIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBEb2N1bWVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ29uZm9ybWFuY2UgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFNldCB3cml0ZXIuCi0gICAqIEBwYXJhbSBkb2N1bWVudExvY2F0aW9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgZmFpbGVkIG9yIGludGVycnVwdGVkIEkvTyBvcGVyYXRpb25zLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBvdXQgb25seSBhIHBhcnQgb2YgYSBkb2N1bWVudCB0byB0aGUgbG9jYXRpb24KLSAgICogdGhhdCB3YXMgcHJldmlvdXNseSBzZXQgdXNpbmcgdGhlIHNldExvY2F0aW9uIG1ldGhvZC4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIHRyb3VibGUgd3JpdGluZyBvdXQgdGhlIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBpbnZva2VkIAotICAgKiAgICAgICAgIGF0IGFuIGlsbGVnYWwgb3IgaW5hcHByb3ByaWF0ZSB0aW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBvdXQgb25seSBhIHBhcnQgb2YgYSBkb2N1bWVudC4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEBwYXJhbSB3cml0ZXIgYSBXcml0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyB0cm91YmxlIHdyaXRpbmcgb3V0IHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIsIFdyaXRlciB3cml0ZXIpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIENsb3NlIHdyaXRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgdHJvdWJsZSBjbG9zaW5nIHRoZSB3cml0ZXIuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBXU0lFeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9XU0lEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGRiMGQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgZm9yIGFsbCBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJRG9jdW1lbnQgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRVUkkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9pbXBsL0RvY3VtZW50RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTNmZmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5BbmFseXplckNvbmZpZ0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFuYWx5emVyQ29uZmlnUmVhZGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dXcml0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLk1vbml0b3JDb25maWdJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLk1vbml0b3JDb25maWdSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGwuUHJvZmlsZUFzc2VydGlvbnNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGwuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0V3JpdGVySW1wbDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ29uZm9ybWFuY2UgZG9jdW1lbnQgZmFjdG9yeSB3aGljaCBwcm92aWRlcyBhY2Nlc3MgdG8KLSAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZG9jdW1lbnRzLCByZWFkZXJzIGFuZCB3cml0ZXJzLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRGYWN0b3J5SW1wbCBleHRlbmRzIERvY3VtZW50RmFjdG9yeQotewotICAvKioKLSAgICogRG9jdW1lbnQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEZhY3RvcnlJbXBsKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBMb2cgbmV3TG9nKCkKLSAgewotICAgIHJldHVybiBuZXcgTG9nSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yQ29uZmlnIG5ld01vbml0b3JDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbmFseXplciBjb25maWcuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgbmV3QW5hbHl6ZXJDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgcHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIG5ld1Byb2ZpbGVBc3NlcnRpb25zKCkKLSAgewotICAgIHJldHVybiBuZXcgUHJvZmlsZUFzc2VydGlvbnNJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnQgbmV3UmVwb3J0KCkKLSAgewotICAgIHJldHVybiBuZXcgUmVwb3J0SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZ1JlYWRlciBuZXdNb25pdG9yQ29uZmlnUmVhZGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgTW9uaXRvckNvbmZpZ1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ1JlYWRlciBuZXdBbmFseXplckNvbmZpZ1JlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIG5ld1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgTG9nUmVhZGVyIG5ld0xvZ1JlYWRlcigpCi0gIHsKLSAgICAvLyBSZXR1cm4gaW1wbGVtZW50YXRpb24KLSAgICByZXR1cm4gbmV3IExvZ1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8vIFdSSVRFUlMKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgTG9nV3JpdGVyIG5ld0xvZ1dyaXRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IExvZ1dyaXRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudFJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRXcml0ZXIgbmV3UmVwb3J0V3JpdGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgUmVwb3J0V3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIERlZmF1bHRSZXBvcnRlcgotICAgKi8KLSAgcHVibGljIFJlcG9ydGVyIG5ld1JlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpCi0gIHsKLSAgICByZXR1cm4gbmV3IERlZmF1bHRSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgZmFjdG9yeSBjbGFzcyBuYW1lIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBKYXZhIHByb3BlcnR5LgotICAgKi8KLSAgLy9wcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeUNsYXNzTmFtZSgpCi0gIC8vewotICAvLyAgLy8gR2V0IHByb3BlcnR5IHZhbHVlCi0gIC8vICByZXR1cm4gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eSgKLSAgLy8gICAgV1NJUHJvcGVydGllcy5QUk9QX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gIC8vICAgIFdTSVByb3BlcnRpZXMuREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAvL30KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9pbXBsL0RvY3VtZW50V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjFlNmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFdyaXRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHdyaXRlIHRoZSBDb25mb3JtYW5jZSBYTUwgCi0gKiBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIERvY3VtZW50V3JpdGVySW1wbCBpbXBsZW1lbnRzIERvY3VtZW50V3JpdGVyCi17Ci0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgV3JpdGVyIHdyaXRlciA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFdyaXRlciNnZXREb2N1bWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIEFERDoKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjc2V0V3JpdGVyKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikKLSAgICB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQgCi0gICAgdGhpcy53cml0ZXIgPQotICAgICAgbmV3IFByaW50V3JpdGVyKAotICAgICAgICBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAotICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRvY3VtZW50TG9jYXRpb24pLAotICAgICAgICAgICJVVEYtOCIpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBkb2N1bWVudCBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICB3cml0ZShyZWFkZXIsIHdyaXRlcik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI3dyaXRlKFJlYWRlciwgV3JpdGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIsIFdyaXRlciB3cml0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIGJ1ZmZlcmVkIHJlYWRlcgotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZlJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOwotCi0gICAgLy8gQ3JlYXRlIHByaW50IHdyaXRlcgotICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHdyaXRlcik7Ci0KLSAgICBTdHJpbmcgbmV4dExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUmVhZCBlYWNoIGxpbmUgZnJvbSB0aGUgcmVhZGVyCi0gICAgICB3aGlsZSAoKG5leHRMaW5lID0gYnVmUmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFdyaXRlIHRleHQgYW5kIGZsdXNoIHN0cmVhbQotICAgICAgICBwcmludFdyaXRlci5wcmludGxuKG5leHRMaW5lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHdyaXRlIGRvY3VtZW50LiIsIGUpOwotICAgIH0KLQotICAgIC8vIEZsdXNoIGFuZCBjbG9zZSB0aGUgd3JpdGVyCi0gICAgcHJpbnRXcml0ZXIuZmx1c2goKTsKLSAgICAvL3ByaW50V3JpdGVyLmNsb3NlKCk7ICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIENsb3NlIHdyaXRlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBsb2cgZmlsZSBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDbG9zZSB0aGUgd3JpdGVyCi0gICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oaW9lLnRvU3RyaW5nKCksIGlvZSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1ODZiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LldTSURvY3VtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtZXNzYWdlIGxvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nIGV4dGVuZHMgV1NJRG9jdW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX0xPRzsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBBZGQgbWVzc2FnZSB0byBsb2cgZmlsZS4gIFRoZSBtZXNzYWdlIHdpbGwgY29udGFpbiBib3RoIAotICAgKiB0cmFuc3BvcnQgYW5kIGNvbnRlbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBsb2dFbnRyeSBtZXNzYWdlIGNvbnRhaW5pbmcgYm90aCB0cmFuc3BvcnQgYW5kIGNvbnRlbnQgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGFkZGluZyB0aGUgbWVzc2FnZSB0byBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZExvZ0VudHJ5KE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHRoZSBudW1iZXIgb2YgbG9nIGVudHJpZXMuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBsb2cgZW50cmllcy4gCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVudHJ5Q291bnQoKTsKLQotICAvKioKLSAgICogR2V0IGEgc3BlY2lmaWMgbG9nIGZpbGUgZW50cnkuIAotICAgKiBAcGFyYW0gaW5kZXggaW5kZXggaW50byBsb2cgZW50cmllcy4KLSAgICogQHJldHVybiBsb2cgZmlsZSBlbnRyeSBhdCBzcGVjaWZpZWQgaW5kZXguCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExvZ0VudHJ5KGludCBpbmRleCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBsaXN0IG9mIGxvZyBlbnRyaWVzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRMb2dFbnRyeUxpc3QoKTsKLQotICAvKioKLSAgICogR2V0IGxhc3QgbG9nIGVudHJ5LgotICAgKiBAcmV0dXJuIGFzdCBsb2cgZW50cnkuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExhc3RMb2dFbnRyeSgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIGVudHJ5IG9iamVjdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGxvZyBlbnRyeS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgY3JlYXRlTG9nRW50cnkoKTsKLQotICAvKioKLSAgICogU2V0IHN0eWxlIHNoZWV0IHN0cmluZy4KLSAgICogQHBhcmFtIHN0eWxlU2hlZXRTdHJpbmcgYSBzdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdHlsZVNoZWV0U3RyaW5nKFN0cmluZyBzdHlsZVNoZWV0U3RyaW5nKTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuZCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBlbGVtZW50IHN0cmluZy4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ0J1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0Y2E3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTG9nSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTG9nV3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWVzc2FnZUVudHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuQ29tbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuTWFuSW5UaGVNaWRkbGVJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7Ci0KLS8qKgotICogR2l2ZW4gYSBsaXN0IG9mIFJlcXVlc3RIYW5kbGVycywgdGhpcyBjbGFzcyBidWlsZHMgYSAKLSAqIFdTLUkgY29tcGxpYW50IE1lc3NhZ2UgTG9nIGZpbGUuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIExvZ0J1aWxkZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgICogSURzIHRvIGlkZW50aWZ5IHJlcXVlc3RzIGFuZCBjb3JyZXNwb25kaW5nIHJlc3BvbnNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSWQgPSAxOwotCi0gIC8qKgotICAgKiBJRHMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgZWFjaCBhbmQgZXZlcnkgbWVzc2FnZSB3aXRoaW4gdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBpZCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBhY3R1YWwgbG9nIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElGaWxlIGlmaWxlOwotCi0gIC8qKgotICAgKiBUb29sIGluZm9ybWF0aW9uIHByb3BlcnR5IHZhbHVlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX05BTUUgPSAiTW9uaXRvciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX1ZFUlNJT04gPSAiMS4wIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfUkVMRUFTRV9EQVRFID0gIjIwMDMtMDMtMjAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9JTVBMRU1FTlRFUiA9ICJJQk0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9MT0NBVElPTiA9ICIiOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBpZmlsZTogdGhlIGZpbGUgaGFuZGxlciBmb3IgdGhlIGxvZy4KLSAgICovCi0gIHB1YmxpYyBMb2dCdWlsZGVyKElGaWxlIGlmaWxlKQotICB7Ci0gICAgdGhpcy5pZmlsZSA9IGlmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgYnVpbGRzIGFuZCB0aGVuIHJldHVybnMgYSBsb2cgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVxdWVzdC1yZXNwb25zZSBwYWlycy4KLSAgICogQHBhcmFtIHJlcXVlc3RSZXNwb25zZXM6IGEgbGlzdCBvZiBtZXNzYWdlcyBpbiB0aGUgZm9ybSBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKiBAcmV0dXJuIGEgbG9nIGJhc2VkIG9uIGEgbGlzdCBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKi8KLSAgcHVibGljIExvZyBidWlsZExvZyhMaXN0IHJlcXVlc3RSZXNwb25zZXMpCi0gIHsKLSAgICBsb2cgPSBuZXcgTG9nSW1wbCgpOwotICAgIGxvZ01vbml0b3JJbmZvcm1hdGlvbigpOwotCi0gICAgLy8gbG9nIHRoZSBtZXNzYWdlcwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlcXVlc3RSZXNwb25zZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlcXVlc3RIYW5kbGVyIHJyID0gKFJlcXVlc3RIYW5kbGVyKWkubmV4dCgpOwotICAgICAgaWYgKHJyICE9IG51bGwpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBsb2dSZXF1ZXN0UmVzcG9uc2UocnIpOwotICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgIC8qIEVtcHR5IGNhdGNoIGJsb2NrLiAgVGhpcyByZXF1ZXN0L3Jlc3BvbnNlIHBhaXIgaXMgbm90IGEgdmFsaWQgU09BUAotICAgICAgICAgICAgICAgKiBtZXNzYWdlLCBzbyBza2lwIGl0LiAqLwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxvZzsKLSAgfQotCi0gIC8qKgotICAgKiBDdXJyZW50bHkgYSBuby1vcC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZ01vbml0b3JJbmZvcm1hdGlvbigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBMb2cgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpci4KLSAgICpAcGFyYW0gcnI6IGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgbG9nUmVxdWVzdFJlc3BvbnNlKFJlcXVlc3RIYW5kbGVyIHJyKQotICB7Ci0gICAgaWYgKHJyICE9IG51bGwpCi0gICAgewotICAgICAgYnl0ZVtdIHJlcXVlc3RIZWFkZXJCeXRlcyA9IHJyLmdldFJlcXVlc3RIZWFkZXIoKTsKLSAgICAgIGJ5dGVbXSByZXNwb25zZUhlYWRlckJ5dGVzID0gcnIuZ2V0UmVzcG9uc2VIZWFkZXIoKTsKLSAKLSAgICAgIGlmICgocmVxdWVzdEhlYWRlckJ5dGVzICE9IG51bGwpIHx8IChyZXNwb25zZUhlYWRlckJ5dGVzICE9IG51bGwpKQotICAgICAgewotICAgICAgICBsb25nIHRpbWVzdGFtcCA9IHJyLmdldERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbEhvc3RBbmRQb3J0ID0gImxvY2FsaG9zdDoiICsgcnIuZ2V0TG9jYWxQb3J0KCk7Ci0gICAgICAgIFN0cmluZyByZW1vdGVIb3N0QW5kUG9ydCA9IHJyLmdldFJlbW90ZUhvc3QoKSArICI6IiArIHJyLmdldFJlbW90ZVBvcnQoKTsKLQotICAgICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBnZXROZXh0QXZhaWxhYmxlQ29udmVyc2F0aW9uSWQoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlckJ5dGVzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHJlcXVlc3RIZWFkZXIgPSBuZXcgU3RyaW5nKHJlcXVlc3RIZWFkZXJCeXRlcyk7Ci0gICAgICAgICAgICBieXRlW10gdW5jaHVua2VkUmVxdWVzdEJvZHkgPSByci5nZXRSZXF1ZXN0Q29udGVudCgpOwotICAgICAgICAgICAgaW50IHJlcXVlc3RJZCAgPSBnZXROZXh0QXZhaWxhYmxlSWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlcXVlc3QgPSBjcmVhdGVNZXNzYWdlRW50cnkocmVxdWVzdElkLCBjb252ZXJzYXRpb25JZCwgCi0gICAgICAgICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCwgdGltZXN0YW1wLCBsb2NhbEhvc3RBbmRQb3J0LAotICAgICAgICAgICAgICAgIHJlbW90ZUhvc3RBbmRQb3J0LCB1bmNodW5rZWRSZXF1ZXN0Qm9keSwgcmVxdWVzdEhlYWRlcik7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShtZXNzYWdlRW50cnlSZXF1ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJlc3BvbnNlSGVhZGVyQnl0ZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VIZWFkZXIgPSBuZXcgU3RyaW5nKHJlc3BvbnNlSGVhZGVyQnl0ZXMpOwotICAgICAgICAgICAgYnl0ZVtdIHVuY2h1bmtlZFJlc3BvbnNlQm9keSA9IHJyLmdldFJlc3BvbnNlQ29udGVudCgpOwotICAgICAgICAgICAgaW50IHJlc3BvbnNlSWQgPSBnZXROZXh0QXZhaWxhYmxlSWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlc3BvbnNlID0gY3JlYXRlTWVzc2FnZUVudHJ5KHJlc3BvbnNlSWQsIGNvbnZlcnNhdGlvbklkLCAKLSAgICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSwgdGltZXN0YW1wICsgcnIuZ2V0UmVzcG9uc2VUaW1lKCksIHJlbW90ZUhvc3RBbmRQb3J0LAotICAgICAgICAgICAgICAgIGxvY2FsSG9zdEFuZFBvcnQsIHVuY2h1bmtlZFJlc3BvbnNlQm9keSwgcmVzcG9uc2VIZWFkZXIpOwotIAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcmVxdWVzdCByZXNwb25zZSBwYWlyCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGhhcyBhdCBsZWFzdAotICAgKiBvbmUgbGVmdCBhbmQgb25lIHJpZ2h0IGJyYWNrZXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlOiBhIG1lc3NhZ2UgY29udGVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGhhcyBhdCBsZWFzdAotICAgKiAgICAgICAgIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVdpdGhCcmFja2V0cyhTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHJldHVybiAoKG1lc3NhZ2UgIT0gbnVsbCkgJiYgCi0gICAgICAgICAgICAobWVzc2FnZS5pbmRleE9mKCI8IikhPSAtMSkgJiYgCi0gICAgICAgICAgICAobWVzc2FnZS5pbmRleE9mKCI+IikgIT0gLTEpKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlcXVlc3RPclJlc3BvbnNlOiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXJMZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBpbiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KLSAgICovIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihieXRlW10gcmVxdWVzdE9yUmVzcG9uc2UsICBpbnQgaGVhZGVyTGVuZ3RoKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYgKChyZXF1ZXN0T3JSZXNwb25zZSAhPSBudWxsKSAmJiAKLSAgICAgICAgKGhlYWRlckxlbmd0aCA+IDApICYmIAotICAgICAgICAocmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoID49IGhlYWRlckxlbmd0aCkpCi0gICAgewotICAgICAgYnl0ZVtdIGhlYWRlciA9IG5ldyBieXRlW2hlYWRlckxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlcXVlc3RPclJlc3BvbnNlLCAwLCBoZWFkZXIsIDAsIGhlYWRlckxlbmd0aCk7Ci0gICAgICByZXN1bHQgPSBuZXcgU3RyaW5nKGhlYWRlcik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYm9keSBvZiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXF1ZXN0T3JSZXNwb25zZTogYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gaGVhZGVyTGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgaW4gdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlLgotICAgKi8gCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Qm9keShieXRlW10gcmVxdWVzdE9yUmVzcG9uc2UsICBpbnQgaGVhZGVyTGVuZ3RoKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYgKChyZXF1ZXN0T3JSZXNwb25zZSAhPSBudWxsKSAmJiAKLSAgICAgICAgKGhlYWRlckxlbmd0aCA+IDApICYmIAotICAgICAgICAocmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoID4gaGVhZGVyTGVuZ3RoKSkKLSAgICB7Ci0gICAgICBpbnQgYm9keUxlbmd0aCA9IHJlcXVlc3RPclJlc3BvbnNlLmxlbmd0aCAtIGhlYWRlckxlbmd0aDsKLSAgICAgIGJ5dGVbXSBib2R5ID0gbmV3IGJ5dGVbYm9keUxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlcXVlc3RPclJlc3BvbnNlLCBoZWFkZXJMZW5ndGgsIGJvZHksIDAsIGJvZHlMZW5ndGgpOwotICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZyhib2R5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgICAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBsb2cgZW50cnkuCi0gICAqIEBwYXJhbSBpZDogdW5pcXVlIG1lc3NhZ2UgaWQgd2l0aGluIHRoZSBsb2cuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JZDogY29udmVyc2F0aW9uIGlkIHRvIGlkZW50aWZ5IHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi0gICAqIEBwYXJhbSB0eXBlOiB0eXBlIGluZGljYXRpbmcgYSByZXF1ZXN0IG9yIHJlc3BvbnNlLgotICAgKiBAcGFyYW0gdGltZXN0YW1wOiB0aGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHNlbmRlckhvc3RBbmRQb3J0OiB0aGUgaG9zdCBhbmQgcG9ydCBvZiB0aGUgc2VuZGVyLgotICAgKiBAcGFyYW0gcmVjZWl2ZXJIb3N0QW5kUG9ydDogdGhlIGhvc3QgYW5kIHBvcnQgb2YgdGhlIHJlY2VpdmVyLgotICAgKiBAcGFyYW0gbWVzc2FnZUNvbnRlbnQ6IHRoZSBjb250ZW50IG9yIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXI6IHRoZSBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYSBsb2cgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeShpbnQgaWQsIGludCBjb252ZXJzYXRpb25JZCwgU3RyaW5nIHR5cGUsIGxvbmcgdGltZXN0YW1wLCAKLSAgICAgICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCBTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCwgYnl0ZVtdIG1lc3NhZ2VDb250ZW50LCBTdHJpbmcgaGVhZGVyKSAKLSAgewotIAkvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldElkKFN0cmluZy52YWx1ZU9mKGlkKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldENvbnZlcnNhdGlvbklkKFN0cmluZy52YWx1ZU9mKGNvbnZlcnNhdGlvbklkKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFR5cGUodHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcChnZXRUaW1lc3RhbXAobmV3IERhdGUodGltZXN0YW1wKSkpOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKFdTSUNvbnN0YW50cy5ERUZBVUxUX1hNTF9FTkNPRElORyk7Ci0gICAgCi0gICAgbWVzc2FnZUVudHJ5LnNldEhUVFBIZWFkZXJzKGhlYWRlcik7Ci0KLSAgICBpZiAoVXRpbHMuaXNNdWx0aXBhcnRSZWxhdGVkTWVzc2FnZShoZWFkZXIpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZUNvbnRlbnQsIGhlYWRlciwgV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIGlmIChtZXNzYWdlQ29udGVudCAhPSBudWxsKQotICAgIAkgIHsKLSAgICAJICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKG5ldyBTdHJpbmcobWVzc2FnZUNvbnRlbnQpKTsKLSAgICAJICB9Ci0gICAgCSAgZWxzZQotICAgIAkgIHsKLSAgICAJICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKCIiKTsKLSAgICAJICB9Ci0gICAgCSAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KGZhbHNlKTsKLSAgICAJfQotICAgIAllbHNlCi0gICAgCXsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZVBhcnRzKG1pbWVQYXJ0cyk7Ci0gICAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KHRydWUpOwotICAgIAl9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgICAgaWYgKG1lc3NhZ2VDb250ZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKG5ldyBTdHJpbmcobWVzc2FnZUNvbnRlbnQpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UoIiIpOwotICAgICAgfQotICAgICAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KGZhbHNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBpZCwgdGhlbiBpbmNyZW1lbnRzIHRoZSBpZCB2YWx1ZS4KLSAgICogQHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGdldE5leHRBdmFpbGFibGVJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQrKzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBjb252ZXJzYXRpb24gaWQsIHRoZW4gaW5jcmVtZW50cyB0aGUgY29udmVyc2F0aW9uIGlkIHZhbHVlLgotICAgKiBBIGNvbnZlcnNhdGlvbiBpZCBpZGVudGZpZXMgYSByZXF1ZXN0IGFuZCBpdHMgY29ycmVzcG9uZGluZyByZXNwb25zZS4KLSAgICogQHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgY29udmVyYXNhdGlvbmlkLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBnZXROZXh0QXZhaWxhYmxlQ29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEhlYWRlckxlbmd0aChJbnRlZ2VyIG9iaikKLSAgewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChvYmogIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvYmouaW50VmFsdWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSBsb2cgb3V0IHRvIGZpbGUuCi0gICAqIEBwYXJhbSBsb2c6IGxvZyB0byBiZSB3cml0dGVuIHRvIGZpbGUuCi0gICAqLwotCi0gIHB1YmxpYyB2b2lkIHdyaXRlTG9nKExvZyBsb2cpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgTG9nV3JpdGVyIGxvZ1dyaXRlciA9IG5ldyBMb2dXcml0ZXJJbXBsKCk7Ci0gICAgCi0gICAgICBsb2dXcml0ZXIuc2V0V3JpdGVyKGlmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0gICAgICAKLSAgICAgIC8vIFdyaXRlIHN0YXJ0IG9mIGxvZyBmaWxlCi0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihsb2cuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gICAgCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIFN0cmluZyBtb25pdG9ySW5mbyA9IGdlbmVyYXRlTW9uaXRvclRvb2xJbmZvKCk7Ci0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihtb25pdG9ySW5mbykpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8bG9nLmdldEVudHJ5Q291bnQoKTsgaSsrKQotICAgICAgewotICAgICAgICBNZXNzYWdlRW50cnkgbWUgPSBsb2cuZ2V0TG9nRW50cnkoaSk7Ci0gICAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKG1lLnRvWE1MU3RyaW5nKCIiKSkpOwotICAgICAgfQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICAgIGxvZ1dyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gdGhyb3duIHdoZW4gcHJpbnRpbmcgbG9nIGZpbGUuIik7Ci0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNb25pdG9yIHRvb2wuCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9uaXRvciB0b29sLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZW5lcmF0ZU1vbml0b3JUb29sSW5mbygpCi0gIHsKLQotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7IAotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVG9vbCBpbmZvcm1hdGlvbgotICAgICAgVG9vbEluZm8gdG9vbEluZm8gPSBuZXcgVG9vbEluZm8oVE9PTF9OQU1FLCBUT09MX1ZFUlNJT04sIFRPT0xfUkVMRUFTRV9EQVRFLCBUT09MX0lNUExFTUVOVEVSLCBUT09MX0xPQ0FUSU9OKTsKLQotICAgICAgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICAKLSAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgY29tbWVudC5zZXRUZXh0KCJDb21tZW50Iik7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldExvZ0xvY2F0aW9uKCJVUkwiKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0UmVwbGFjZUxvZyh0cnVlKTsKLQotICAgICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkU3R5bGVTaGVldCk7Ci0KLSAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oNjAwKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dCgzKTsKLSAgICAgCi0gICAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotCi0gICAgICBtb25pdG9yQ29uZmlnLnNldExvY2F0aW9uKCJkb2N1bWVudFVSSSIpOwotICAgICAgbW9uaXRvckNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKGZhbHNlKTsKLQotICAgICAgLy8gU3RhcnQgICAgIAotICAgICAgcHcucHJpbnQodG9vbEluZm8uZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKTsKLSAgICAKLSAgICAgIC8vIENvbmZpZwotICAgICAgcHcucHJpbnQobW9uaXRvckNvbmZpZy50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcpKTsKLQotICAgICAgLy8gRW5kCi0gICAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZygiIikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBkYXRlOiBhIGRhdGUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lIGFzIGEgdGltZXN0YW1wLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKERhdGUgZGF0ZSkKLSAgewotICAgIHRpbWVzdGFtcEZvcm1hdC5zZXRUaW1lWm9uZShUaW1lWm9uZS5nZXREZWZhdWx0KCkpOwotICAgIHJldHVybiB0aW1lc3RhbXBGb3JtYXQuZm9ybWF0KGRhdGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNjAxMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ1JlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gcmVhZCB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IHJlYWRpbmcgbG9nIGVudHJpZXMgZnJvbSBhIHNwZWNpZmllZCBVUkkgbG9jYXRpb24gdXNpbmcgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dVUkkgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGxvZ0VudHJ5SGFuZGxlciB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBwcm9jZXNzIGVhY2ggbG9nIGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIHJlYWRpbmcgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZExvZyhTdHJpbmcgbG9nVVJJLCBNZXNzYWdlRW50cnlIYW5kbGVyIGxvZ0VudHJ5SGFuZGxlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBTdGFydCByZWFkaW5nIGxvZyBlbnRyaWVzIGZyb20gYSByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4KLSAgICogCi0gICAqIEBwYXJhbSByZWFkZXIgdGhlIHNvdXJjZSBmb3IgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gbG9nRW50cnlIYW5kbGVyIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgZWFjaCBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gcmVhZGluZyBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFJlYWRlciByZWFkZXIsIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGFkZCBmdW5jdGlvbnMgdGhhdCB3aWxsIHJlYWQgdGhlIGVudGlyZSBsb2cgZmlsZT8KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlMzNlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nV3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFdyaXRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byB3cml0ZSB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nV3JpdGVyIGV4dGVuZHMgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50IHVzaW5nIHRoZSBsb2NhdGlvbgotICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHNldCB1c2luZyB0aGUgc2V0TG9jYXRpb24gbWV0aG9kLgotICAgKiBAcGFyYW0gbG9nIHRoZSBMb2cgb2JqZWN0LgotICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBpbnZva2VkIAotICAgKiAgICAgICAgIGF0IGFuIGlsbGVnYWwgb3IgaW5hcHByb3ByaWF0ZSB0aW1lCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgd3JpdGluZyBvZiAKLSAgICogICAgICAgICB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoTG9nIGxvZykgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHBhcmFtIGxvZyB0aGUgTG9nIG9iamVjdC4KLSAgICogQHBhcmFtIHdyaXRlciBhIFdyaXRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgd3JpdGluZyBvZiAKLSAgICogICAgICAgICB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoTG9nIGxvZywgV3JpdGVyIHdyaXRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1OGZmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSogTWVzc2FnZSBlbnRyeSBpbnRlcmZhY2UuCi0qCi0qIEB2ZXJzaW9uIDEuMC4xCi0qIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUVudHJ5IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gLyoqCi0gICogRWxlbWVudCBuYW1lLgotICAqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfRU5UUlk7Ci0KLSAvKioKLSAgKiBRTmFtZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9MT0csIEVMRU1fTkFNRSk7Ci0KLSAvKioKLSAgKiBUeXBlIG9mIGxvZyBlbnRyeS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX1JFUVVFU1QgPSAicmVxdWVzdCI7Ci0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRVNQT05TRSA9ICJyZXNwb25zZSI7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBpZC4KLSAgKiBAcmV0dXJuIHRoZSBpZC4KLSAgKiBAc2VlICNzZXRJZAotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIGlkLgotICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmllciBmb3IgdGhlIGxvZyBlbnRyeS4KLSAgKiBAc2VlICNnZXRJZAotICAqLwotIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICogQHJldHVybiB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBzZWUgI3NldENvbnZlcnNhdGlvbklkCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRDb252ZXJzYXRpb25JZCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBwYXJhbSBjb252ZXJzYXRpb25JZCB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBzZWUgI2dldENvbnZlcnNhdGlvbklkCi0gICovCi0gcHVibGljIHZvaWQgc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nIGNvbnZlcnNhdGlvbklkKTsKLQotIC8qKgotICAqIEdldHMgdGhlIHRpbWVzdGFtcC4KLSAgKiBAcmV0dXJuIHRoZSB0aW1lc3RhbXAuCi0gICogQHNlZSAjc2V0VGltZXN0YW1wCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIHRpbWVzdGFtcC4KLSAgKiBAcGFyYW0gdGltZXN0YW1wIHRoZSB0aW1lc3RhbXAuCi0gICogQHNlZSAjZ2V0VGltZXN0YW1wCi0gICovCi0gcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gLyoqCi0gICogR2V0cyB0aGUgdHlwZS4KLSAgKiBAcmV0dXJuIHRoZSB0eXBlLgotICAqIEBzZWUgI3NldFR5cGUKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIHR5cGUuCi0gICogQHBhcmFtIHR5cGUgdGhlIHR5cGUuCi0gICogQHNlZSAjZ2V0VHlwZQotICAqLwotIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHJldHVybiAgdGhlIHNlbmRlciBob3N0IGFuZCBwb3J0LgotICAqIEBzZWUgI3NldFNlbmRlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIFN0cmluZyBnZXRTZW5kZXJIb3N0QW5kUG9ydCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHBhcmFtIHNlbmRlckhvc3RBbmRQb3J0IHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNnZXRTZW5kZXJIb3N0QW5kUG9ydAotICAqLwotIHB1YmxpYyB2b2lkIHNldFNlbmRlckhvc3RBbmRQb3J0KFN0cmluZyBzZW5kZXJIb3N0QW5kUG9ydCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSByZWNlaXZlciBob3N0IGFuZCBwb3J0LgotICAqIEByZXR1cm4gdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHNlZSAjc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydAotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAcGFyYW0gcmVjZWl2ZXJIb3N0QW5kUG9ydCB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNnZXRSZWNlaXZlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIHZvaWQgc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjc2V0TWVzc2FnZQotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgbWVzc2FnZS4KLSAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZS4KLSAgKiBAc2VlICNnZXRNZXNzYWdlCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBlbmNvZGluZy4KLSAgKiBAcGFyYW0gZW5jb2RpbmcgdGhlIGVuY29kaW5nLgotICAqIEBzZWUgI2dldE1lc3NhZ2UKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgQk9NLgotICAqIEByZXR1cm4gdGhlIEJPTS4KLSAgKiBAc2VlICNzZXRCT00KLSAgKi8KLSBwdWJsaWMgaW50IGdldEJPTSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgQk9NLgotICAqIEBwYXJhbSBib20gdGhlIEJPTS4KLSAgKiBAc2VlICNnZXRCT00KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRCT00oaW50IGJvbSk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBIVFRQIGhlYWRlcnMuCi0gICogQHJldHVybiB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBzZWUgI3NldEhUVFBIZWFkZXJzCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRIVFRQSGVhZGVycygpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBwYXJhbSBodHRwSGVhZGVycyB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBzZWUgI2dldEhUVFBIZWFkZXJzCi0gICovCi0gcHVibGljIHZvaWQgc2V0SFRUUEhlYWRlcnMoU3RyaW5nIGh0dHBIZWFkZXJzKTsKLQotIC8qKgotICAqIEdldHMgZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICogQHNlZSAjc2V0RWxlbWVudExvY2F0aW9uCi0gICovCi0gcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKTsKLQotIC8qKgotICAqIFNldHMgZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICogQHNlZSAjZ2V0RWxlbWVudExvY2F0aW9uCi0gICovCi0gcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotIAotIC8qKgotICAqIElmIGNvbnRlbnQgaXMgTUlNRSB0eXBlIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlICAKLSAgKiBAcmV0dXJuIGlmIGNvbnRlbnQgaXMgTUlNRSB0eXBlIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNNaW1lQ29udGVudCgpOwotIAotIC8qKgotICAqIFNldCBmbGFnIHRvIGRldGVybWluZSBpZiBjb250ZW50IGlzIE1JTUUgdHlwZS4gCi0gICogQHBhcmFtIGlzTWltZUNvbnRlbnQgYSBib29vbGVhbiB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldE1pbWVDb250ZW50KGJvb2xlYW4gaXNNaW1lQ29udGVudCk7Ci0KLSAvKioKLSAgKiBSZXR1cm5zIGFycmF5IG9mIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gYXJyYXkgb2YgdGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjaXNNSU1FQ29udGVudCgpIAotICAqLwotIHB1YmxpYyBNaW1lUGFydHMgZ2V0TWltZVBhcnRzKCk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgTUlNRSBwYXJ0cyBvZiB0aGUgbWVzc2FnZS4KLSAgKiBAcGFyYW0gbWltZVBhcnRzIGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjZ2V0TWltZVBhcnRzCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWltZVBhcnRzKE1pbWVQYXJ0cyBtaW1lUGFydHMpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01lc3NhZ2VFbnRyeUhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQwMWUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlOwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSBmb3IgdGhlIE1lc3NhZ2VFbnRyeSBoYW5kbGVyLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VFbnRyeUhhbmRsZXIKLXsKLSAgLyoqCi0gICAqIFByb2Nlc3MgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSBwcm9jZXNzaW5nIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBQcm9jZXNzIGEgc2luZ2xlIGxvZyBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhIHNpbmdsZSBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3NMb2dFbnRyeShFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01pbWVQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0NmRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEBhdXRob3IgbGF1em9uZAotICogCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0byBXaW5kb3cgLQotICogUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWltZVBhcnQgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQgewotCi0JLyoqCi0JICogR2V0cyB0aGUgY29udGVudCBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtaW1lIGNvbnRlbnQuCi0JICogQHNlZSAjc2V0Q29udGVudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgY29udGVudCBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcGFyYW0gbWltZUNvbnRlbnQKLQkgKiAgICAgICAgICAgIHRoZSBtaW1lIGNvbnRlbnQuCi0JICogQHNlZSAjZ2V0Q29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIG1pbWVDb250ZW50KTsKLQotCS8qKgotCSAqIEdldHMgdGhlIGhlYWRlcnMgZm9yIHRoZSBtaW1lIHBhcnQuCi0JICogCi0JICogQHJldHVybiB0aGUgbWltZSBoZWFkZXJzLgotCSAqIEBzZWUgI3NldE1pbWVIZWFkZXJzCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRIZWFkZXJzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBoZWFkZXJzIGZvciB0aGUgbWltZSBwYXJ0LgotCSAqIAotCSAqIEBwYXJhbSBtaW1lSGVhZGVycwotCSAqICAgICAgICAgICAgdGhlIG1pbWUgaGVhZGVycy4KLQkgKiBAc2VlICNnZXRIZWFkZXJzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SGVhZGVycyhTdHJpbmcgbWltZUhlYWRlcnMpOwotCi0JLyoqCi0JICogR2V0cyB0aGUgYm91bmRhcnkgc3RyaW5ncyBmb3IgdGhlIG1pbWUgcGFydC4gTm90ZSB0aGF0IHRoZSBsYXN0IHBhcnQgb2YgYQotCSAqIG11bHRpcGFydC8gcmVsYXRlZCBtZXNzYWdlIHdpbGwgaGF2ZSAyIGJvdW5kYXJ5IHN0cmluZ3MuIEFsbCBvdGhlciBwYXJ0cwotCSAqIHdpbGwgaGF2ZSBvbmUuCi0JICogCi0JICogQHJldHVybiB0aGUgYm91bmRhcnkgc3RyaW5ncy4KLQkgKiBAc2VlICNzZXRCb3VuZGFyeVN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0Qm91bmRhcnlTdHJpbmdzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBib3VuZGFyeSBzdHJpbmdzIGZvciB0aGUgbWltZSBwYXJ0LiBOb3RlIHRoYXQgdGhlIGxhc3QgcGFydCBvZiBhCi0JICogbXVsdGlwYXJ0LyByZWxhdGVkIG1lc3NhZ2Ugd2lsbCBoYXZlIDIgYm91bmRhcnkgc3RyaW5ncy4gQWxsIG90aGVyIHBhcnRzCi0JICogd2lsbCBoYXZlIG9uZS4KLQkgKiAKLQkgKiBAcGFyYW0gYm91bmRhcnlTdHJpbmdzCi0JICogICAgICAgICAgICB0aGUgYm91bmRhcnkgc3RyaW5ncy4KLQkgKiBAc2VlICNnZXRCb3VuZGFyeVN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCb3VuZGFyeVN0cmluZ3MoU3RyaW5nW10gbWltZUhlYWRlcnMpOwotCi0JcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZTNmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01pbWVQYXJ0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi0vKioKLSAqIE1pbWUgcGFydHMgaW50ZXJmYWNlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiAobGF1em9uZEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1pbWVQYXJ0cwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RhcnQgYXR0cmlidXRlIHZhbHVlIGZyb20gdGhlIC4KLSAgICogQHJldHVybiB0aGUgaGUgc3RhcnQgYXR0cmlidXRlIHZhbHVlLgotICAgKiBAc2VlICNzZXRSb290UGFydAotICAgKi8KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJvb3QgcGFydCwgb3RoZXJ3aXNlIG51bGwuCi0gICAqIEByZXR1cm4gdGhlIHJvb3QgcGFydC4KLSAgICogQHNlZSAjc2V0Um9vdFBhcnQKLSAgICovCi0gIHB1YmxpYyBNaW1lUGFydCBnZXRSb290UGFydCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByb290IHBhcnQuCi0gICAqIEBwYXJhbSByb290UGFydCB0aGUgcm9vdCBwYXJ0LgotICAgKiBAc2VlICNnZXRSb290UGFydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdFBhcnQoTWltZVBhcnQgcm9vdFBhcnQpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFydHMuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwYXJ0cy4KLSAgICovCi0gIHB1YmxpYyBpbnQgY291bnQoKTsKLQotICAvKioKLSAgICogR2V0cyB0aGUgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICAqIEBzZWUgI3NldENvbnZlcnNhdGlvbklkCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KE1pbWVQYXJ0IHBhcnQpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBtaW1lIHBhcnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBtaW1lIHBhcnRzLgotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0UGFydHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9SZXF1ZXN0SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTJkZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBUQ1AvSVAgcmVxdWVzdCBtYWRlIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci4KLSAqIEVhY2ggcmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLCB3aGVyZSB0aGUgcmVxdWVzdAotICogaXMgZnJvbSBjbGllbnQgLT4gc2VydmVyLCBhbmQgdGhlIHJlc3BvbnNlIGlzIGZyb20gc2VydmVyIC0+IGNsaWVudC4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBSZXF1ZXN0SGFuZGxlciAKLXsKLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEByZXR1cm4gdGhlIGNvbnRlbnQgYnl0ZXMKLQkgKi8KLQlieXRlW10gZ2V0UmVxdWVzdEhlYWRlcigpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVxdWVzdCBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVxdWVzdEhlYWRlciBieXRlW10KLQkgKi8KLQl2b2lkIHNldFJlcXVlc3RIZWFkZXIoYnl0ZVtdIHJlcXVlc3RIZWFkZXIpOwotCi0JLyoqCi0JICogUmV0dXJucyBqdXN0IHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXNwb25zZUhlYWRlcigpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHBhcmFtIHJlc3BvbnNlSGVhZGVyIGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VIZWFkZXIoYnl0ZVtdIHJlc3BvbnNlSGVhZGVyKTsKLQotCS8qKgotCSAqIFJldHVybnMganVzdCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEByZXR1cm4gdGhlIGNvbnRlbnQgYnl0ZXMKLQkgKi8KLQlieXRlW10gZ2V0UmVxdWVzdENvbnRlbnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEBwYXJhbSByZXF1ZXN0Q29udGVudCBieXRlW10KLQkgKi8KLQl2b2lkIHNldFJlcXVlc3RDb250ZW50KGJ5dGVbXSByZXF1ZXN0Q29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgYm9keSBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXNwb25zZUNvbnRlbnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVzcG9uc2VDb250ZW50IGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VDb250ZW50KGJ5dGVbXSByZXNwb25zZUNvbnRlbnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUuCi0JICogQHJldHVybiB0aGUgdGltZXN0YW1wCi0JICovCi0JRGF0ZSBnZXREYXRlKCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRpbWUgdGhpcyByZXF1ZXN0IHdhcyBtYWRlLgotCSAqIEBwYXJhbSBkYXRlIHRoZSB0aW1lCi0JICovCi0gICAgdm9pZCBzZXREYXRlKERhdGUgZGF0ZSk7Ci0KLSAgICAvKioKLQkgKiBSZXR1cm5zIHRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqIEByZXR1cm4gdGhlIGxvY2FsIHBvcnQgbnVtYmVyCi0JICovCi0JaW50IGdldExvY2FsUG9ydCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqIEBwYXJhbSBsb2NhbFBvcnQgdGhlIGxvY2FsIHBvcnQKLQkgKi8KLQl2b2lkIHNldExvY2FsUG9ydChpbnQgbG9jYWxQb3J0KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlbW90ZSAoc2VydmVyKSBwb3J0LgotCSAqIEByZXR1cm4gdGhlIHJlbW90ZSBwb3J0IG51bWJlcgotCSAqLwotCWludCBnZXRSZW1vdGVQb3J0KCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRoZSByZW1vdGUgKHNlcnZlcikgcG9ydC4KLQkgKiBAcGFyYW0gcmVtb3RlUG9ydCB0aGUgcmVtb3RlIHBvcnQKLQkgKi8KLQl2b2lkIHNldFJlbW90ZVBvcnQoaW50IHJlbW90ZVBvcnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVtb3RlIChzZXJ2ZXIpIGhvc3QuCi0gICAgICogQHJldHVybiB0aGUgcmVtb3RlIGhvc3QKLQkgKi8KLQlTdHJpbmcgZ2V0UmVtb3RlSG9zdCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSByZW1vdGUgKHNlcnZlcikgaG9zdC4KLQkgKiBAcGFyYW0gcmVtb3RlSG9zdCB0aGUgcmVtb3RlIGhvc3QKLQkgKi8KLQl2b2lkIHNldFJlbW90ZUhvc3QoU3RyaW5nIHJlbW90ZUhvc3QpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqIEByZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRpbWUKLQkgKi8KLQlsb25nIGdldFJlc3BvbnNlVGltZSgpOwotCi0JLyoqCi0JICogQWRkIHRoZSB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqIEBwYXJhbSByZXNwb25zZVRpbWUgdGhlIHJlc3BvbnNlIHRpbWUKLQkgKi8KLQl2b2lkIHNldFJlc3BvbnNlVGltZShsb25nIHJlc3BvbnNlVGltZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZDc4YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UZXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBtZXNzYWdlIGxvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dJbXBsIGltcGxlbWVudHMgTG9nCi17Ci0gIC8qKgotICAgKiBMb2cgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkkgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdGFydCB0aW1lIHN0YW1wLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzdGFydFRpbWVzdGFtcCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyaWVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBsb2dFbnRyeUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIExhc3QgbG9nIGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeSBsYXN0TG9nRW50cnkgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgdGl0bGUuCi0gICAqLwotICAvLyBBREQ6IFNob3VsZCB3ZSBwcm92aWRlIGEgd2F5IHRvIHNldCB0aGUgbG9nIHRpdGxlPwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1RpdGxlID0gIk1lc3NhZ2UgTG9nIEZpbGUiOwotCi0gIC8qKgotICAgKiBTdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlU2hlZXRTdHJpbmcgPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2FkZExvZ0VudHJ5KExvZ0VudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTG9nRW50cnkoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTYXZlIGxhc3QgbG9nIGVudHJ5Ci0gICAgbGFzdExvZ0VudHJ5ID0gbG9nRW50cnk7Ci0KLSAgICAvLyBBZGQgbG9nIGVudHJ5Ci0gICAgbG9nRW50cnlMaXN0LmFkZChsb2dFbnRyeSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZyNnZXRFbnRyeUNvdW50KCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW50cnlDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gbG9nRW50cnlMaXN0LnNpemUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2dldExvZ0VudHJ5KGludCkKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0TG9nRW50cnkoaW50IGluZGV4KQotICB7Ci0gICAgcmV0dXJuIChNZXNzYWdlRW50cnkpIGxvZ0VudHJ5TGlzdC5lbGVtZW50QXQoaW5kZXgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2cjZ2V0TG9nRW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TG9nRW50cnlMaXN0KCkKLSAgewotICAgIHJldHVybiBsb2dFbnRyeUxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGxhc3QgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRMYXN0TG9nRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIGxhc3RMb2dFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIGVudHJ5IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgY3JlYXRlTG9nRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5sb2dVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc3R5bGUgc2hlZXQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGVTaGVldFN0cmluZyhTdHJpbmcgc3R5bGVTaGVldFN0cmluZykKLSAgewotICAgIHRoaXMuc3R5bGVTaGVldFN0cmluZyA9IHN0eWxlU2hlZXRTdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSByZXBvcnQgZWxlbWVudCAKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5YTUxfREVDTCk7Ci0gICAgaWYgKHRoaXMuc3R5bGVTaGVldFN0cmluZyAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbih0aGlzLnN0eWxlU2hlZXRTdHJpbmcpOwotCi0gICAgLy8gQWRkIFhNTCBjb21tZW50Ci0gICAgU3RyaW5nIGNvbW1lbnQ7Ci0gICAgaWYgKChjb21tZW50ID0gVGVzdFV0aWxzLmdldFhNTENvbW1lbnQoKSkgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KGNvbW1lbnQpOwotCi0gICAgLy8gTG9nCi0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgRUxFTV9OQU1FKTsKLQotICAgIC8vIFJFTU9WRUQ6IE5vIGxvbmdlciByZXF1aXJlZCBieSB0aGUgbW9uaXRvciBzcGVjCi0gICAgLy9wdy5wcmludCgiICIgKyBXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBsb2dUaXRsZSArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICIgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIFV0aWxzLmdldFRpbWVzdGFtcCgpICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0xPRyArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIAotICAgIC8vICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQ09NTU9OICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgeG1sbnM6IgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1hTSQotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0kKLSAgICAgICAgKyAiXCI+Iik7Ci0KLSAgICAvLyBBZGQgIG1vbml0b3IgdG9vbCBpbmZvCi0gICAgLy9wdy5wcmludGxuKG1vbml0b3IudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEVuZCBsb2cgZWxlbWVudCAKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIFhNTCBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIC8vIEFERDoKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YWE3NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbC5Db21tZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuQXJ0aWZhY3RSZWZlcmVuY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5FbnRyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHJlYWQgdGhlIExvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBOZWlsIERlbGltYSAobmRkZWxpbWFAY2EuaWJtLmNvbSkKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvZ1JlYWRlckltcGwgaW1wbGVtZW50cyBMb2dSZWFkZXIKLXsKLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZG9jdW1lbnRVUkk7Ci0KLSAgLyoqIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50IGFmdGVyIHRoZSBsb2cgZWxlbWVudCAqKi8KLSAgcHJpdmF0ZSBpbnQgZmlyc3RMb2dFbGVtZW50ID0gMDsKLSAgcHJpdmF0ZSBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgcHJpdmF0ZSBib29sZWFuIGJNb25pdG9yRmlyc3QgPSBmYWxzZTsKLQotICBwcml2YXRlIFdTSUV4Y2VwdGlvbiB3c2lFeGNlcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyI3JlYWRMb2coU3RyaW5nLCBMb2dFbnRyeUhhbmRsZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFN0cmluZyBsb2dVUkksIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nUmVhZGVyQ2FsbGJhY2spCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVhZCB0aGUgbG9nIGZpbGUgZW50cmllcwotICAgIHJlYWRMb2cobmV3IElucHV0U291cmNlKGxvZ1VSSSksIGxvZ1JlYWRlckNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyI3JlYWRMb2coUmVhZGVyLCBMb2dFbnRyeUhhbmRsZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFJlYWRlciByZWFkZXIsIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nUmVhZGVyQ2FsbGJhY2spCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVhZCB0aGUgbG9nIGZpbGUgZW50cmllcwotICAgIHJlYWRMb2cobmV3IElucHV0U291cmNlKHJlYWRlciksIGxvZ1JlYWRlckNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIGFuZCBwYXJzZSB0aGUgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAgICAgICAgICBhbiBJbnB1dFNvdXJjZSBvYmplY3QKLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeUhhbmRsZXIgIGEgTWVzc2FnZUVudHJ5SGFuZGxlciBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYSBwcm9ibGVtIG9jY3VycyB3aGlsZSByZWFkaW5nIHRoZSBsb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRMb2coCi0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsCi0gICAgTWVzc2FnZUVudHJ5SGFuZGxlciBtZXNzYWdlRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgWE1MIHJlYWRlcgotICAgICAgWE1MUmVhZGVyIHhtbFJlYWRlciA9IFhNTFV0aWxzLmdldFhNTFJlYWRlcigpOwotCi0gICAgICAvKiogVE8gRE86ICBUaGUgTG9nRmlsZSBtdXN0IGJlIHZhbGlkIHdydCBpdHMgc2NoZW1hLiAgVGhlIHNjaGVtYUxvY2F0aW9uIHByb2JhYmx5Ci0gICAgICAgKiBuZWVkcyB0byBiZSBzZXQgaW4gc29tZSBwcm9wZXJ0aWVzIGZpbGUuCi0gICAgICAgKiBUaGVzZSB0d28gYXJlIHRvIHR1cm4gb24gdmFsaWRhdGlvbiAKLSAgICAgIHJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfVkFMSURBVElPTix0cnVlKTsKLSAgICAgICovCi0KLSAgICAgIC8vIFNldCB0aGUgY29udGVudCBoYW5kbGVyCi0gICAgICB4bWxSZWFkZXIuc2V0Q29udGVudEhhbmRsZXIobmV3IExvZ0ZpbGVIYW5kbGVyKG1lc3NhZ2VFbnRyeUhhbmRsZXIpKTsKLQotICAgICAgLy8gU3RhcnQgcGFyc2luZyB0aGUgZmlsZQotICAgICAgeG1sUmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQotICAgICAgLy8gQUREOiBOZWVkIHRvIGZpbmQgYSB3YXkgdG8gZGV0ZXJtaW5lIHdoZW4gdGhpcyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biwgCi0gICAgICAvLyBzaW5jZSBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgotICAgICAgLy8gQWxzbywgb25seSB0aGUgbGFzdCBleGNlcHRpb24gaXMgcHJvcG9nYXRlZCBiYWNrLiAgU2hvdWxkIGFsbCBvZiB0aGUgZXhjZXB0aW9ucwotICAgICAgLy8gYmUgY2FwdHVyZWQgYW5kIHByb3BvZ2F0ZWQgYmFjaz8KLSAgICAgIGlmICh3c2lFeGNlcHRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogRm9yIG5vdywgZG9uJ3QgdGhyb3cgdGhlIGV4Y2VwdGlvbgotICAgICAgICAvL3Rocm93IHdzaUV4Y2VwdGlvbjsKLSAgICAgIH0KLQotICAgICAgLy9SZXF1aXJlbWVudCwgdGhlIG1vbml0b3IgTVVTVCBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGxvZy4KLSAgICAgIC8vUGVyaGFwcyB3ZSBuZWVkIHRvIHByZXByb2Nlc3MgdGhlIGxvZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjb25kaXRpb24gdG8gYmUgbWV0LgotICAgICAgaWYgKCFiTW9uaXRvckZpcnN0KQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgRWxlbWVudCBcIiIKLSAgICAgICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUgotICAgICAgICAgICAgKyAiXCIgaXMgbm90IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgRWxlbWVudCBcImxvZ1wiIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgbWVzc2FnZSBsb2cgZmlsZS4iLAotICAgICAgICBlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNzZXRMb2NhdGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKioKLSAgKiBQcm9jZXNzIGFuZCBoYW5kbGVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGUgaW4gdGhlIGxvZyBmaWxlIGFuZCBpbnZva2VzCi0gICogbWVzc2FnZSB2YWxpZGF0aW9uIGFzc2VydGlvbnMgc2VyaWFsbHkgYXMgdGhlIGZpbGUgaXMgYmVpbmcgcHJvY2Vzc2VkLAotICAqIGlmIGEgbWVzc2FnZXZhbGlkYXRvciBleGlzdHMuCi0gICovCi0gIHByaXZhdGUgY2xhc3MgTG9nRmlsZUhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0KLSAgICAvKiogcHJpdmF0ZSBtZW1iZXJzIHRoYXQgcmVwcmVzZW50IGEgTWVzc2FnZUVudHJ5LiovCi0gICAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY29udmVyc2F0aW9uSUQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdHlwZTsKLSAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXA7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc2VuZGVySG9zdEFuZFBvcnQgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIHJlY2VpdmVySG9zdEFuZFBvcnQgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtZXNzYWdlQ29udGVudCAgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGh0dHBIZWFkZXJzICA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgYm91bmRhcnkgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtaW1lSGVhZGVycyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbWltZUNvbnRlbnQgPSBudWxsOwotICAgIHByaXZhdGUgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBMaXN0IGJvdW5kYXJpZXMgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBpbnQgYm9tID0gMDsKLQotICAgIHByaXZhdGUgU3RyaW5nIGxvZ1RpbWVzdGFtcCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbW9uaXRvckNvbW1lbnQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlnbm9yZUNvbW1lbnQgPSBmYWxzZTsKLQotICAgIC8qKiBPdGhlciBwcml2YXRlIG1lbWJlcnMgKi8KLSAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50RWxlbWVudDsKLQotICAgIHByaXZhdGUgRWxlbWVudExvY2F0aW9uIGVudHJ5RWxlbWVudExvY2F0aW9uID0gbnVsbDsKLQotICAgIHByaXZhdGUgVG9vbEluZm8gdG9vbEluZm8gPSBudWxsOwotCi0gICAgcHJpdmF0ZSBWZWN0b3IgbWVzc2FnZUVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHByaXZhdGUgTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dFbnRyeUhhbmRsZXIgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogTG9nIGZpbGUgaGFuZGxlci4gCi0gICAgICovCi0gICAgcHVibGljIExvZ0ZpbGVIYW5kbGVyKE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHsKLSAgICAgIHRoaXMubG9nRW50cnlIYW5kbGVyID0gbG9nRW50cnlIYW5kbGVyOwotCi0gICAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbygpOwotICAgICAgdG9vbEluZm8uc2V0VG9vbEVudmlyb25tZW50KG5ldyBUb29sRW52aXJvbm1lbnQoKSk7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIFN0YXJ0IGRvY3VtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIFNldCBkb2N1bWVudCBsb2NhdG8uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKExvY2F0b3IgbG9jYXRvcikKLSAgICB7Ci0gICAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJsaW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogU3RhcnQgZWxlbWVudC4gCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KAotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLSAgICAgIFN0cmluZyBsb2NhbE5hbWUsCi0gICAgICBTdHJpbmcgcU5hbWUsCi0gICAgICBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibG9jYWxOYW1lOiIgKyBsb2NhbE5hbWUgKyAiLCBsaW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLQotICAgICAgLy9SZXF1aXJlbWVudCwgdGhlIGltcGxlbWVudGVyIE1VU1QgYmUgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBsb2cgICAgICAgCi0gICAgICBpZiAoZWxlbWVudENvdW50ID09IDIpCi0gICAgICAgIGlmIChmaXJzdExvZ0VsZW1lbnQgPT0gMSkKLSAgICAgICAgICBiTW9uaXRvckZpcnN0ID0gdHJ1ZTsKLQotICAgICAgZWxlbWVudENvdW50Kys7Ci0KLSAgICAgIC8vIDxsb2c+Ci0gICAgICBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0xPRykKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSB0aGUgdGltZXN0YW1wIHZhbHVlCi0gICAgICAgIHRoaXMubG9nVGltZXN0YW1wID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVApOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHKQotICAgICAgICAgICYmIChuYW1lc3BhY2VVUkkgPT0gV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcpKQotICAgICAgewotICAgICAgICAvLyBTYXZlIGNvbW1lbnQgZWxlbWVudCBpZiBpdCBleGlzdHMKLSAgICAgICAgaWdub3JlQ29tbWVudCA9IGZhbHNlOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpjb21tZW50PgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY29tbWVudCBlbGVtZW50IHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50LCB0aGVuIGdldCBpdHMgY29udGVudAotICAgICAgICBpZiAoIWlnbm9yZUNvbW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQ7Ci0gICAgICAgICAgbW9uaXRvckNvbW1lbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gPHdzaS1jb25maWc6cmVkaXJlY3Q+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQWZ0ZXIgaGl0dGluZyB0aGUgZmlyc3QgcmVkaXJlY3Qgc3RhdGVtZW50LCBpZ25vcmUgYWxsIGNvbW1lbnQgZWxlbWVudHMKLSAgICAgICAgaWdub3JlQ29tbWVudCA9IHRydWU7Ci0gICAgICAgIG1vbml0b3JDb21tZW50ID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgLy8gPG1vbml0b3I+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUikKLSAgICAgIHsKLSAgICAgICAgZmlyc3RMb2dFbGVtZW50Kys7Ci0gICAgICAgIHRvb2xJbmZvLnNldE5hbWUoV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBtb25pdG9yIHZlcnNpb24gYW5kIHJlbGVhc2UgZGF0ZQotICAgICAgICB0b29sSW5mby5zZXRWZXJzaW9uKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgICB0b29sSW5mby5zZXRSZWxlYXNlRGF0ZSgKLSAgICAgICAgICBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1JFTEVBU0VfREFURSkpOwotICAgICAgfQotCi0gICAgICAvLyA8aW1wbGVtZW50ZXI+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSU1QTEVNRU5URVIpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fSU1QTEVNRU5URVI7Ci0gICAgICAgIHRvb2xJbmZvLnNldEltcGxlbWVudGVyKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5zZXRMb2NhdGlvbihhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxydW50aW1lPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX1JVTlRJTUUpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fUlVOVElNRTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0UnVudGltZU5hbWUoCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSk7Ci0gICAgICAgIHRvb2xJbmZvLmdldFRvb2xFbnZpcm9ubWVudCgpLnNldFJ1bnRpbWVWZXJzaW9uKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgfQotCi0gICAgICAvLyA8b3BlcmF0aW5nU3lzdGVtPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX09QRVJBVElOR19TWVNURU0pCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fT1BFUkFUSU5HX1NZU1RFTTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0T1NOYW1lKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRPU1ZlcnNpb24oCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx4bWxQYXJzZXI+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fWE1MX1BBUlNFUikKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9YTUxfUEFSU0VSOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRYTUxQYXJzZXJOYW1lKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRYTUxQYXJzZXJWZXJzaW9uKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUVudHJ5PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfRU5UUlkpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWTsKLSAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24gPSBuZXcgRWxlbWVudExvY2F0aW9uKHRoaXMubG9jYXRvcik7Ci0gICAgICAgIHRpbWVzdGFtcCA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVElNRVNUQU1QKTsKLSAgICAgICAgY29udmVyc2F0aW9uSUQgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0NPTlZFUlNBVElPTl9JRCk7Ci0gICAgICAgIGlkID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9JRF9VQyk7Ci0gICAgICAgIHR5cGUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpOwotICAgICAgfQotCi0gICAgICAvLyA8aHR0cEhlYWRlcnM+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTKQotICAgICAgewotICAgICAgICAvL05vdGU6IENoYXJhY3RlciBkYXRhIGNvdWxkIGJlIHNwbGl0IHVwIGFuZCByZXR1cm5lZCAKLSAgICAgICAgLy9pbiBtb3JlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVycyBjYWxsLiAKLSAgICAgICAgaHR0cEhlYWRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUNvbnRlbnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtZXNzYWdlQ29udGVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgbWltZVBhcnRzID0gbnVsbDsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQ7Ci0gICAgICAgIFN0cmluZyBib21TdHJpbmcgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0JPTSk7Ci0gICAgICAgIGlmIChib21TdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgICBib20gPSBJbnRlZ2VyLnZhbHVlT2YoYm9tU3RyaW5nKS5pbnRWYWx1ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYm9tID0gMDsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VDb250ZW50V2l0aEF0dGFjaG1lbnRzPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTKQotICAgICAgewotICAgICAgICBtZXNzYWdlQ29udGVudCA9IG51bGw7Ci0gICAgICAgIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0KLSAgICAgICAgU3RyaW5nIGJvbVN0cmluZyA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfQk9NKTsKLSAgICAgICAgaWYgKGJvbVN0cmluZyAhPSBudWxsKQotICAgICAgICAgIGJvbSA9IEludGVnZXIudmFsdWVPZihib21TdHJpbmcpLmludFZhbHVlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBib20gPSAwOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZVBhcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUKQotICAgICAgewotICAgICAgICBpZiAoYm91bmRhcmllcyA9PSBudWxsKQotICAgICAgICAgIGJvdW5kYXJpZXMgPSBuZXcgQXJyYXlMaXN0KDIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYm91bmRhcmllcy5jbGVhcigpOwotICAgICAgfQotCi0gICAgICAvLyA8Ym91bmRhcnlTdHJpbmc+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQk9VTkRBUllfU1RSSU5HKQotICAgICAgewotICAgICAgICBib3VuZGFyeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkc7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIG1pbWVIZWFkZXJzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUzsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVDb250ZW50PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCkKLSAgICAgIHsKLSAgICAgICAgbWltZUNvbnRlbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UOwotICAgICAgfQotCi0gICAgICAvLyA8c2VuZGVySG9zdEFuZFBvcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQpCi0gICAgICB7Ci0gICAgICAgIHNlbmRlckhvc3RBbmRQb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUOwotICAgICAgfQotCi0gICAgICAvLyA8cmVjZWl2ZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIAotICAgICogQ2hhcmFjdGVycyBjYWxsYmFjay4gCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgIC8vIElnbm9yaW5nIENSTEYgdGhhdCBhcHBlYXJzIGluIGxvZyBlbGVtZW50cwotICAgICAgaW50IGFsdFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICBpbnQgYWx0TGVuZ3RoID0gbGVuZ3RoOwotICAgICAgaWYgKHN0YXJ0ID4gMCAmJiBjaFtzdGFydC0xXSA9PSAxMyAmJiBjaFtzdGFydF0gPT0gMTApCi0gICAgICB7Ci0gICAgICAgIGFsdFN0YXJ0Kys7Ci0gICAgICAgIGFsdExlbmd0aC0tOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgaWYgKG1vbml0b3JDb21tZW50ICE9IG51bGwgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgIHsKLSAgICAgICAgbW9uaXRvckNvbW1lbnQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VDb250ZW50PgotICAgICAgZWxzZSBpZiAobWVzc2FnZUNvbnRlbnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb250ZW50LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxodHRwSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGh0dHBIZWFkZXJzICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTKQotICAgICAgewotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8Ym91bmRhcnlTdHJpbmc+Ci0gICAgICBlbHNlIGlmIChib3VuZGFyeSAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORykKLSAgICAgIHsKLSAgICAgICAgYm91bmRhcnkuYXBwZW5kKGNoLCBhbHRTdGFydCwgYWx0TGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVIZWFkZXJzPgotICAgICAgZWxzZSBpZiAobWltZUhlYWRlcnMgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIG1pbWVIZWFkZXJzLmFwcGVuZChjaCwgYWx0U3RhcnQsIGFsdExlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lQ29udGVudD4KLSAgICAgIGVsc2UgaWYgKG1pbWVDb250ZW50ICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudC5hcHBlbmQoY2gsIGFsdFN0YXJ0LCBhbHRMZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8c2VuZGVySG9zdEFuZFBvcnQ+Ci0gICAgICBlbHNlIGlmIChzZW5kZXJIb3N0QW5kUG9ydCAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8cmVjZWl2ZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKHJlY2VpdmVySG9zdEFuZFBvcnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIEVuZCBFbGVtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkKLSAgICB7Ci0gICAgICAvLyA8d3NpLWNvbmZpZzpjb21tZW50PgotICAgICAgaWYgKAotICAgICAgICAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpCi0gICAgICAgICAgJiYgKG5hbWVzcGFjZVVSSSA9PSBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHdlIHNhdmVkIHRoZSBjb21tZW50LCB0aGVuIHByb2Nlc3MgaXQgYW5kIHRoZSBsb2cgdGltZXN0YW1wCi0gICAgICAgIGlmICh0aGlzLm1vbml0b3JDb21tZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSA9IG5ldyBBcnRpZmFjdFJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgICBhcnRpZmFjdFJlZmVyZW5jZS5zZXRUaW1lc3RhbXAodGhpcy5sb2dUaW1lc3RhbXApOwotICAgICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICAgIGNvbW1lbnQuc2V0VGV4dChtb25pdG9yQ29tbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICBhcnRpZmFjdFJlZmVyZW5jZS5zZXREb2N1bWVudEVsZW1lbnQoCi0gICAgICAgICAgICBjb21tZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKTsKLSAgICAgICAgICBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoYXJ0aWZhY3RSZWZlcmVuY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxib3VuZGFyeVN0cmluZz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkcpCi0gICAgICB7Ci0gICAgICAgIC8vIEFkZGluZyBib3VuZGFyeSBzdHJpbmcgdG8gYSBsaXN0Ci0gICAgICAgIGJvdW5kYXJpZXMuYWRkKGJvdW5kYXJ5LnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZVBhcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGluZyBhIE1lc3NhZ2VNSU1FUGFydCBpbnN0YW5jZQotICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICBwYXJ0LnNldEhlYWRlcnMobWltZUhlYWRlcnMudG9TdHJpbmcoKSk7Ci0gICAgICAgIHBhcnQuc2V0Q29udGVudChtaW1lQ29udGVudC50b1N0cmluZygpKTsKLSAgICAgICAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MoKFN0cmluZ1tdKWJvdW5kYXJpZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0KLSAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQocGFydCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlRW50cnk+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWSkKLSAgICAgIHsKLSAgICAgICAgLy8gQXNzdW1wdGlvbjogUmVsYXRlZCBtZXNzYWdlcyBhcmUgc2VxdWVudGlhbGx5IGF2YWlsYWJsZSBpbiB0aGUgbWVzc2FnZSBsb2cuCi0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNULmVxdWFsc0lnbm9yZUNhc2UodHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlcXVlc3QgPQotICAgICAgICAgICAgY3JlYXRlTWVzc2FnZUVudHJ5KAotICAgICAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydC50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID09IG51bGwgPyAiIiA6IG1lc3NhZ2VDb250ZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtaW1lUGFydHMsCi0gICAgICAgICAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24pOwotCi0gICAgICAgICAgLy8gQWRkIGxvZyBlbnRyeSB0byB0aGUgbGlzdAotICAgICAgICAgIG1lc3NhZ2VFbnRyeUxpc3QuYWRkKG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotICAgICAgICAgIC8vIFJlcXVlc3QgaXMgbm93IHByb2Nlc3NlZCBvbmx5IHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UuZXF1YWxzSWdub3JlQ2FzZSh0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBsb2cgZW50cnkKLSAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVzcG9uc2UgPQotICAgICAgICAgICAgY3JlYXRlTWVzc2FnZUVudHJ5KAotICAgICAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydC50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID09IG51bGwgPyAiIiA6IG1lc3NhZ2VDb250ZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtaW1lUGFydHMsCi0gICAgICAgICAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24pOwotCi0gICAgICAgICAgaWYgKGxvZ0VudHJ5SGFuZGxlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgICAgICAgLy8gSVNTVUUgOiBuZWVkIHRvIHRocm93ICYgY2F0Y2ggYSBudWxscG9pbnRlcmV4Y2VwdGlvbiBpbiBoZXJlLi4uCi0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCA9IGZpbmRSZWxhdGVkUmVxdWVzdChtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaXNNZXNzYWdlRW5jcnlwdGVkKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0TWVzc2FnZSgpKSAmJgotICAgICAgICAgICAgICAgICAgIWlzTWVzc2FnZUVuY3J5cHRlZChtZXNzYWdlRW50cnlSZXNwb25zZS5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICB7Ci0JICAgICAgICBpZiAoIW9taXRSZXF1ZXN0KG1lc3NhZ2VFbnRyeVJlcXVlc3QpKQotCSAgICAgICAgewotCSAgICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0JICAgICAgICAgIC8vIEFERDogTmVlZCB0byBjcmVhdGUgZW50cnkgZnJvbSByZXBvcnQKLQkgICAgICAgICAgLy9FbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLQkgICAgICAgICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLQkgICAgICAgICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0SWQoKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotCQotCSAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgZm9yIHRoZSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIKLQkgICAgICAgICAgRW50cnlDb250ZXh0IHJlcXVlc3RUYXJnZXRDb250ZXh0ID0KLQkgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KAotCSAgICAgICAgICAgICAgICAgICAgZW50cnksCi0JICAgICAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlSZXF1ZXN0LAotCSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVzcG9uc2UpOwotCSAgICAgICAgICBpZiAocmVxdWVzdFRhcmdldENvbnRleHQgIT0gbnVsbCkKLQkgICAgICAgICAgICBwcm9jZXNzTG9nRW50cnkocmVxdWVzdFRhcmdldENvbnRleHQpOwotCQotCSAgICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0JICAgICAgICAgIC8vIEFERDogTmVlZCB0byBjcmVhdGUgZW50cnkgZnJvbSByZXBvcnQKLQkgICAgICAgICAgLy9FbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLQkgICAgICAgICAgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLQkgICAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKG1lc3NhZ2VFbnRyeVJlc3BvbnNlLmdldElkKCkpOwotCSAgICAgICAgICBlbnRyeS5zZXRFbnRyeURldGFpbChtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0JCi0JICAgICAgICAgIEVudHJ5Q29udGV4dCByZXNwb25zZVRhcmdldENvbnRleHQgPQotCSAgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KAotCSAgICAgICAgICAgICAgICAgIGVudHJ5LAotCSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VFbnRyeVJlcXVlc3QsCi0JICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVzcG9uc2UpOwotCSAgICAgICAgICBpZiAocmVzcG9uc2VUYXJnZXRDb250ZXh0ICE9IG51bGwpCi0JICAgICAgICAgICAgcHJvY2Vzc0xvZ0VudHJ5KHJlc3BvbnNlVGFyZ2V0Q29udGV4dCk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICogRW5kIERvY3VtZW50LiAKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkKLSAgICB7Ci0gICAgICAvL0lmIHdlIHdhbnQgdG8gc2VyaWFsbHkgcHJvY2VzcyB0aGUgbG9nIGZpbGUuICBJbnZva2UgdmFsaWRhdGVNZXNzYWdlcyB3aXRoCi0gICAgICAvL21zZ1ZhbGlkYXRvciE9bnVsbC4gIEhlcmUgd2UgaGF2ZSB0aGUgb3B0aW9uIG9mIGNsZWFyaW5nIHRoZSBsb2dFbnRyeSB2ZWN0b3IKLSAgICAgIC8vb25jZSBtZXNzYWdlIHZhbGlkYXRpb24gaXMgZG9uZS4KLSAgICAgIC8vaWYgKG1zZ1ZhbGlkYXRvciE9bnVsbCkKLSAgICAgIC8vbG9nRW50cnlMaXN0LmNsZWFyKCk7Ci0gICAgICAgIAotICAgICAgICAvKiBQcm9jZXNzIGFsbCByZW1haW5pbmcgcmVxdWVzdHMgaW4gdGhlIG1lc3NhZ2VFbnRyeUxpc3QgKi8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlRW50cnlMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbG9nRW50cnkgPSAoTWVzc2FnZUVudHJ5KSBtZXNzYWdlRW50cnlMaXN0LmdldChpKTsKLSAgICAgICAgICAgIGlmICghb21pdFJlcXVlc3QobG9nRW50cnkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IG5ldyBFbnRyeUltcGwoKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoCi0gICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobG9nRW50cnkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGxvZ0VudHJ5KTsKLSAgICAgICAgICAgICAgRW50cnlDb250ZXh0IHJlcXVlc3RUYXJnZXRDb250ZXh0ID0KLSAgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBsb2dFbnRyeSwgbnVsbCk7Ci0gICAgICAgICAgICAgIGlmIChyZXF1ZXN0VGFyZ2V0Q29udGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHByb2Nlc3NMb2dFbnRyeShyZXF1ZXN0VGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlIGluIHRoZSBsb2cgZW50cnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHJvY2Vzc0xvZ0VudHJ5KEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vQmVmb3JlIHZhbGlkYXRpbmcgYW55IG1lc3NhZ2VzIGNoZWNrIGlmIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBsb2dFbnRyeUhhbmRsZXIucHJvY2Vzc0xvZ0VudHJ5KGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHdzaUV4Y2VwdGlvbiA9Ci0gICAgICAgICAgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIgotICAgICAgICAgICAgICArICIgdGhlIG1lc3NhZ2UgbG9nRW50cnk6ICIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SWQoKSwKLSAgICAgICAgICAgIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgdGhlIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc0FydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvL0JlZm9yZSB2YWxpZGF0aW5nIGFueSBtZXNzYWdlcyBjaGVjayBpZiBpbXBsZW1lbnRlciBpcyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgbG9nRW50cnlIYW5kbGVyLnByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShhcnRpZmFjdFJlZmVyZW5jZSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgd3NpRXhjZXB0aW9uID0KLSAgICAgICAgICBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmciCi0gICAgICAgICAgICAgICsgIiB0aGUgYXJ0aWZhY3QgcmVmZXJlbmNlOiAiCi0gICAgICAgICAgICAgICsgYXJ0aWZhY3RSZWZlcmVuY2UudG9TdHJpbmcoKSwKLSAgICAgICAgICAgIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAgICogRmluZCB0aGUgcmVsYXRlZCBSZXF1ZXN0IExvZ0VudHJ5LiAgVGhlIGN1cnJlbnQgcnVsZSBmb3IgcmVsYXRlZCBsb2cgZW50aXJlcyBpcwotICAgICAgICogdGhhdCBhIHJlcXVlc3Qgd2lsbCBhbHdheXMgcHJlY2VkZSBpdHMgcmVzcG9uc2UuCi0gICAgICAgKiBJU1NVRTogU2VxdWVuY2UgaW4gbG9nIGZpbGUgaXMgdGltZXN0YW1wIGRyaXZlbiAobW9uaXRvciBzcGVjKS4gCi0gICAgICAgKiBBc3NlcnRpb24gaXMgdGhhdCBmb3IgYSBnaXZlbiBjb252ZXJzYXRpb25JRCwgYSBzZWNvbmQgcmVxdWVzdCBpcyBub3Qgc2VudCAKLSAgICAgICAqIHVudGlsIGl0cyByZXNwb25zZSBpcyByZWNlaXZlZCAoY2hyb25vbG9naWNhbGx5KS4gCi0gICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGhhdmUgdG8gYmUgbW9kaWZpZWQgaWYgdGhlIHJ1bGUgY2hhbmdlcy4KLSAgICAgICAqLwotICAgIC8vIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkga2VlcGluZyBhIG11Y2ggc21hbGxlciBsaXN0IG9mIHVucmVzcG9uZGVkIHJlcXVlc3RzLi4uCi0gICAgcHVibGljIE1lc3NhZ2VFbnRyeSBmaW5kUmVsYXRlZFJlcXVlc3QoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UpCi0gICAgewotICAgICAgaWYgKGxvZ0VudHJ5UmVzcG9uc2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgZW50cnkgPSBtZXNzYWdlRW50cnlMaXN0LnNpemUoKSAtIDE7IGVudHJ5ID49IDA7IGVudHJ5LS0pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGxvZyBlbnRyeSBvZiB0aGUgbWF0Y2hpbmcgcmVxdWVzdAotICAgICAgICAgIE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSA9IChNZXNzYWdlRW50cnkpIG1lc3NhZ2VFbnRyeUxpc3QuZ2V0KGVudHJ5KTsKLSAgICAgICAgICAvLyBJZ25vcmUgb3duIGVudHJ5Ci0gICAgICAgICAgaWYgKCFsb2dFbnRyeVJlc3BvbnNlLmVxdWFscyhsb2dFbnRyeSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxvZ0VudHJ5UmVzcG9uc2UKLSAgICAgICAgICAgICAgLmdldENvbnZlcnNhdGlvbklkKCkKLSAgICAgICAgICAgICAgLmVxdWFscyhsb2dFbnRyeS5nZXRDb252ZXJzYXRpb25JZCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gZm91bmQgdGhlIG1vc3QgcmVjZW50bHkgcmVhZCBtZXNzYWdlIHdpdGggdGhlIHNhbWUgY29udmVyc2F0aW9uSUQuCi0gICAgICAgICAgICAgIC8vIEZyb20gYWJvdmUsIHRoaXMgc2hvdWxkIGJlIHRoZSBjb3JyZXNwb25kaW5nIHJlcXVlc3QuIENoZWNrIGFzIGZhciBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgaWYgKGxvZ0VudHJ5LmdldFR5cGUoKS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlMaXN0LnJlbW92ZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ0VudHJ5OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBleHBlY3RlZCBhIHJlcXVlc3QuIG5lZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGNvbnZlcnNhdGlvbklEIG1hdGNoIG5vdCBmb3VuZCBhbnl3aGVyZS4gbmVlZCB0byB0aHJvdyBhbiBleGNlcHRpb24hCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGxvZyBlbnRyeS4KLSAgICAgKi8KLSAgICBwcml2YXRlIE1lc3NhZ2VFbnRyeSBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICBTdHJpbmcgaWQsCi0gICAgICBTdHJpbmcgY29udmVyc2F0aW9uSWQsCi0gICAgICBTdHJpbmcgdHlwZSwKLSAgICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgICBTdHJpbmcgc2VuZGVySVBQb3J0LAotICAgICAgU3RyaW5nIHJlY2VpdmVySVBQb3J0LAotICAgICAgU3RyaW5nIG1lc3NhZ2VDb250ZW50LAotICAgICAgU3RyaW5nIGh0dHBIZWFkZXJzLAotICAgICAgTWltZVBhcnRzIG1pbWVQYXJ0cywKLSAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGxvZyBlbnRyeQotICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0SWQoaWQpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldENvbnZlcnNhdGlvbklkKGNvbnZlcnNhdGlvbklEKTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRUeXBlKHR5cGUpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFNlbmRlckhvc3RBbmRQb3J0KHNlbmRlcklQUG9ydCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChyZWNlaXZlcklQUG9ydCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEJPTShib20pOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEVsZW1lbnRMb2NhdGlvbihlbGVtZW50TG9jYXRpb24pOwotCi0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBudWxsOwotICAgICAgaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIGVuY29kaW5nIGZvciB0aGlzIG1lc3NhZ2UgY29udGVudAotICAgICAgICBlbmNvZGluZyA9IFV0aWxzLmdldFhNTEVuY29kaW5nKG1lc3NhZ2VDb250ZW50KTsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UobWVzc2FnZUNvbnRlbnQpOwotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZVBhcnRzKG1pbWVQYXJ0cyk7Ci0gICAgICAgCU1pbWVQYXJ0IHJvb3QgPSBVdGlscy5maW5kUm9vdFBhcnQoaHR0cEhlYWRlcnMsIG1pbWVQYXJ0cy5nZXRQYXJ0cygpKTsKLSAgICAgICAJaWYgKHJvb3QgIT0gbnVsbCkKLSAgICAgICAJewotICAgICAgICAgIC8vIEdldCB0aGUgZW5jb2RpbmcgZm9yIHRoaXMgbWVzc2FnZSBjb250ZW50Ci0gICAgICAgICAgZW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhyb290LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHJvb3QpOwotICAgICAgIAl9Ci0gICAJCS8vIGVsc2UgZW1wdHkgYm9keQotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVuY29kaW5nID09IG51bGwpIHx8IChlbmNvZGluZy5lcXVhbHMoIiIpKSkKLSAgICAgICAgIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgICB9Ci0KLSAgfSAvL0VuZCBDb250ZW50SGFuZGxlcgotICAKLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqIEBwYXJhbSBycjogYSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVxdWVzdC1yZXNwb25zZSBwYWlyIHNob3VsZCBiZSBvbWl0dGVkIGZyb20gdGhlIGxvZy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBvbWl0UmVxdWVzdChNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gb21pdCA9IGZhbHNlOwotICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ID09IG51bGwpCi0gICAgICAgb21pdCA9IHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyByZXF1ZXN0SGVhZGVycyA9IG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIGlmICgocmVxdWVzdEhlYWRlcnMgIT0gbnVsbCkgJiYKLSAgICAgICAgICAoKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkgfHwKLSAgICAgICAgICAgKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIlRSQUNFIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiREVMRVRFIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiT1BUSU9OUyIpKSB8fCAKLSAgICAgICAgICAgKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkhFQUQiKSkgfHwKLSAgICAgICAgICAgKChyZXF1ZXN0SGVhZGVycy5zdGFydHNXaXRoKCJHRVQiKSkgJiYKLSAgICAgICAgCSghaXNNZXNzYWdlV2l0aEJyYWNrZXRzKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0TWVzc2FnZSgpKSkpKSkKLSAgICAgIHsgCi0gICAgICAgIG9taXQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb21pdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICogQHBhcmFtIG1lc3NhZ2U6IGEgbWVzc2FnZSBjb250ZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqICAgICAgICAgb25lIGxlZnQgYW5kIG9uZSByaWdodCBicmFja2V0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlV2l0aEJyYWNrZXRzKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIjwiKSE9IC0xKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIj4iKSAhPSAtMSkpOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlRW5jcnlwdGVkKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLQkgICAgKG1lc3NhZ2UuaW5kZXhPZigiPEVuY3J5cHRlZEtleSAiKSAhPSAtMSkpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGVlOTgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ1dyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byB3cml0ZSB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dXcml0ZXJJbXBsIGV4dGVuZHMgRG9jdW1lbnRXcml0ZXJJbXBsIGltcGxlbWVudHMgTG9nV3JpdGVyCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyI3dyaXRlKExvZykKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShMb2cgbG9nKQotICAgIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlIHdyaXRlciB3YXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aHJvdyBhbiBleGNlcHRpb24KLSAgICBpZiAod3JpdGVyID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb3VsZCBub3Qgd3JpdGUgbG9nIGZpbGUgc2luY2Ugd3JpdGVyIHdhcyBub3Qgc2V0LiIpOwotCi0gICAgLy8gV3JpdGUgbG9nIGZpbGUKLSAgICB3cml0ZShsb2csIHdyaXRlcik7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlciN3cml0ZShMb2csIFdyaXRlcikKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShMb2cgbG9nLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6Ci0gICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiV3JpdGUgZW50aXJlIGxvZyBmaWxlIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0LiIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzdhM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWVzc2FnZUVudHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSAqIE1lc3NhZ2UgZW50cnkgaW1wbGVtZW50YXRpb24uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VFbnRyeUltcGwgaW1wbGVtZW50cyBNZXNzYWdlRW50cnkKLXsKLSAgLyoqCi0gICAqIExvZyBlbnRyeSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaWQ7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjb252ZXJzYXRpb25JZDsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRpbWVzdGFtcDsKLSAgcHJvdGVjdGVkIFN0cmluZyBzZW5kZXJIb3N0QW5kUG9ydDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0OwotICBwcm90ZWN0ZWQgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBodHRwSGVhZGVycyA9ICIiOwotICBwcm90ZWN0ZWQgaW50IGJvbTsKLSAgcHJvdGVjdGVkIFN0cmluZyBlbmNvZGluZyA9ICIiOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc01pbWVDb250ZW50ID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBNaW1lUGFydHMgbWltZVBhcnRzID0gbmV3IE1pbWVQYXJ0c0ltcGwoKTsKLQotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVtcHR5IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeUltcGwoKQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRDb252ZXJzYXRpb25JZCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnZlcnNhdGlvbklkKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nIGNvbnZlcnNhdGlvbklkKQotICB7Ci0gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0VGltZXN0YW1wKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFRpbWVzdGFtcChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lc3RhbXAoU3RyaW5nIHRpbWVzdGFtcCkKLSAgewotICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRTZW5kZXJIb3N0QW5kUG9ydCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlbmRlckhvc3RBbmRQb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlbmRlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0KQotICB7Ci0gICAgdGhpcy5zZW5kZXJIb3N0QW5kUG9ydCA9IHNlbmRlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlY2VpdmVySG9zdEFuZFBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVjZWl2ZXJIb3N0QW5kUG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFJlY2VpdmVySG9zdEFuZFBvcnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCkKLSAgewotICAgIHRoaXMucmVjZWl2ZXJIb3N0QW5kUG9ydCA9IHJlY2VpdmVySG9zdEFuZFBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgCWlmICghdGhpcy5pc01pbWVDb250ZW50KQotICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gIAllbHNlCi0gIAl7Ci0gIAkgICBpZiAodGhpcy5taW1lUGFydHMuZ2V0Um9vdFBhcnQoKSA9PSBudWxsKSByZXR1cm4gIiI7Ci0gIAkgICBlbHNlIHJldHVybiB0aGlzLm1pbWVQYXJ0cy5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKTsKLSAgCX0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldE1lc3NhZ2UoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRFbmNvZGluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpCi0gIHsKLSAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjZ2V0Qk9NKCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Qk9NKCkKLSAgewotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0Qk9NKGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJPTShpbnQgYm9tKQotICB7Ci0gICAgdGhpcy5ib20gPSBib207Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRIVFRQSGVhZGVycygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKCkKLSAgewotICAgIHJldHVybiB0aGlzLmh0dHBIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0SFRUUEhlYWRlcnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SFRUUEhlYWRlcnMoU3RyaW5nIGh0dHBIZWFkZXJzKQotICB7Ci0gICAgdGhpcy5odHRwSGVhZGVycyA9IGh0dHBIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWVzc2FnZUVudHJ5I2dldEVsZW1lbnRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0RWxlbWVudExvY2F0aW9uKG9yZy53c2kueG1sLmRvbS5FbGVtZW50TG9jYXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgewotICAgIHRoaXMuZWxlbWVudExvY2F0aW9uID0gZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiB0b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEFERDogTmVlZCB0byBhZGQgd2F5IHRvIGluZGljYXRlIFhNTCBzY2hlbWEgdHlwZSBmb3IgbG9nRW50cnkKLSAgICAvLyBBZGQgbG9nIGVudHJ5Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludCgKLSAgICAgICJ4c2k6dHlwZT1cImh0dHBNZXNzYWdlRW50cnlcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9JRF9VQyArICI9XCIiICsgaWQgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9DT05WRVJTQVRJT05fSUQgKyAiPVwiIiArIGNvbnZlcnNhdGlvbklkICsgIlwiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIHR5cGUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIHRpbWVzdGFtcCArICJcIj4iKTsKLQotICAgIGlmIChpc01pbWVDb250ZW50KCkpCi0gICAgewotICAgICAgICAvLyBBZGQgbWVzc2FnZSBjb250ZW50IHdpdGggYXR0YWNobWVudHMgZWxlbWVudAotICAgICAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlRfV0lUSF9BVFRBQ0hNRU5UUyk7Ci0gICAgICAgIGlmIChib20gIT0gMCkKLSAgICAgICAgICBwdy5wcmludCgiICIgKyBXU0lDb25zdGFudHMuQVRUUl9CT00gKyAiPVwiIiArIGJvbSArICJcIiIpOwotICAgICAgICBwdy5wcmludCgiPiIpOwotCi0gICAgICAgIENvbGxlY3Rpb24gcGFydExpc3QgPSBtaW1lUGFydHMuZ2V0UGFydHMoKTsKLSAgICAgICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgZW5kIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlRfV0lUSF9BVFRBQ0hNRU5UUyArICI+Iik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBBZGQgbWVzc2FnZSBjb250ZW50IGVsZW1lbnQKLSAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCk7Ci0gICAgICBpZiAoYm9tICE9IDApCi0gICAgICAgIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX0JPTSArICI9XCIiICsgYm9tICsgIlwiIik7Ci0gICAgICBwdy5wcmludCgiPiIpOwotCi0gICAgICAvLyBBZGQgZW5jb2RlZCBtZXNzYWdlCi0gICAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICAgIAotICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQWRkIHNlbmRlcklQUG9ydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iCi0gICAgICAgICsgc2VuZGVySG9zdEFuZFBvcnQKLSAgICAgICAgKyAiPC8iCi0gICAgICAgICsgbnNOYW1lCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQKLSAgICAgICAgKyAiPiIpOwotCi0gICAgLy8gQWRkIHJlY2VpdmVySVAgZWxlbWVudAotICAgIHB3LnByaW50bG4oCi0gICAgICAiPCIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iCi0gICAgICAgICsgcmVjZWl2ZXJIb3N0QW5kUG9ydAotICAgICAgICArICI8LyIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iKTsKLQotICAgIC8vIEFkZCBIVFRQSGVhZGVycyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTICsgIj4iKTsKLQotICAgIC8vIEFERDogRG9lcyB0aGlzIHN0cmluZyBuZWVkIHRvIGJlIFhNTCBlbmNvZGVkPwotICAgIC8vIEFkZCBIVFRQIGhlYWRlcnMKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGh0dHBIZWFkZXJzKSk7Ci0KLSAgICAvLyBFbmQgSFRUUEhlYWRlcnMgZWxlbWVudAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0hUVFBfSEVBREVSUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgbG9nIGVudHJ5Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNpc01pbWVDb250ZW50KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWltZUNvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIGlzTWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0TWltZUNvbnRlbnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWltZUNvbnRlbnQoYm9vbGVhbiBpc01pbWVDb250ZW50KQotICB7Ci0gICAgdGhpcy5pc01pbWVDb250ZW50ID0gaXNNaW1lQ29udGVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNnZXRNSU1FUGFydHMoKQotICAgKi8KLSAgcHVibGljIE1pbWVQYXJ0cyBnZXRNaW1lUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0czsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNzZXRNaW1lUGFydHMoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWltZVBhcnRzKE1pbWVQYXJ0cyBtaW1lUGFydHMpCi0gIHsKLSAgICB0aGlzLm1pbWVQYXJ0cyA9IG1pbWVQYXJ0czsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NaW1lUGFydEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWU3ZGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotLyoqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBNaW1lUGFydEltcGwgaW1wbGVtZW50cyBNaW1lUGFydCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbWltZUNvbnRlbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIG1pbWVIZWFkZXJzOwotICBwcml2YXRlIFN0cmluZ1tdIGJvdW5kYXJ5U3RyaW5ncyA9IG5ldyBTdHJpbmdbMF07Ci0gIAotICBwdWJsaWMgTWltZVBhcnRJbXBsICgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjZ2V0Q29udGVudCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydCNzZXRDb250ZW50KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIG1pbWVDb250ZW50KQotICB7Ci0gIAl0aGlzLm1pbWVDb250ZW50ID0gbWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKioKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQjZ2V0SGVhZGVycygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhlYWRlcnMoKQotICB7Ci0gIAlyZXR1cm4gdGhpcy5taW1lSGVhZGVyczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I3NldEhlYWRlcnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGVhZGVycyhTdHJpbmcgbWltZUhlYWRlcnMpCi0gIHsKLSAgCXRoaXMubWltZUhlYWRlcnMgPSBtaW1lSGVhZGVyczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I2dldEJvdW5kYXJ5U3RyaW5ncygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0Qm91bmRhcnlTdHJpbmdzKCkKLSAgewotICAJcmV0dXJuIHRoaXMuYm91bmRhcnlTdHJpbmdzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjc2V0Qm91bmRhcnlTdHJpbmdzKFN0cmluZ1tdKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Qm91bmRhcnlTdHJpbmdzKFN0cmluZ1tdIGJvdW5kYXJ5U3RyaW5ncykKLSAgewotICAJdGhpcy5ib3VuZGFyeVN0cmluZ3MgPSBib3VuZGFyeVN0cmluZ3M7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHRvWE1MU3RyaW5nKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQWRkIG1pbWVQYXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfUEFSVCAgKyAiPiIpOwotICAgIAotICAgIC8vIEFkZCBib3VuZGFyeSBzdHJpbmcgZWxlbWVudAotICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kYXJ5U3RyaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORyArICI+Iik7Ci0gICAgICAgIHB3LnByaW50KGJvdW5kYXJ5U3RyaW5nc1tpXSk7Ci0gICAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORyArICI+Iik7Ci0gICAgfQotICAgCi0gICAgLy8gQWRkIG1pbWVIZWFkZXJzIGVsZW1lbnQKLSAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcobWltZUhlYWRlcnMpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMgKyAiPiIpOwotCi0gICAgLy8gQWRkIGVuY29kZWQgY29udGVudAotICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCArICI+Iik7Ci0gICAgaWYgKChtaW1lQ29udGVudC5pbmRleE9mKCI8IikgIT0gLTEpICB8fCAKLSAgICAgICAgKG1pbWVDb250ZW50LmluZGV4T2YoIj4iKSAhPSAtMSkgIHx8IAotCQkobWltZUNvbnRlbnQuaW5kZXhPZigiXCIiKSAhPSAtMSkgfHwKLQkJKG1pbWVDb250ZW50LmluZGV4T2YoIlwnIikgIT0gLTEpKQotICAgIAlwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKG1pbWVDb250ZW50KSk7Ci0gICAgZWxzZQotICAgICAgICBwdy5wcmludChnZXRDb250ZW50KCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCArICI+Iik7Ci0gCi0gICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX1BBUlQgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzOTJjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NaW1lUGFydHNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLQotLyoqCi0gKiBNaW1lUGFydHNJbXBsIGNsYXNzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiAobGF1em9uZEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWltZVBhcnRzSW1wbCBpbXBsZW1lbnRzIE1pbWVQYXJ0cwotewotCQotICBwcm90ZWN0ZWQgTWltZVBhcnQgcm9vdFBhcnQ7Ci0gIHByb3RlY3RlZCBDb2xsZWN0aW9uIG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICBwdWJsaWMgTWltZVBhcnRzSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNnZXRSb290UGFydCgpCi0gICAqLwotICBwdWJsaWMgTWltZVBhcnQgZ2V0Um9vdFBhcnQoKQotICB7Ci0JcmV0dXJuIHJvb3RQYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI3NldFJvb3RQYXJ0KE1pbWVQYXJ0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdFBhcnQoTWltZVBhcnQgcm9vdFBhcnQpCi0gIHsKLSAgCXRoaXMucm9vdFBhcnQgPSByb290UGFydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNjb3VudCgpCi0gICAqLwotICBwdWJsaWMgaW50IGNvdW50KCkKLSAgewotCXJldHVybiBtaW1lUGFydHMuc2l6ZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI2FkZFBhcnQoTWltZVBhcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KE1pbWVQYXJ0IHBhcnQpCi0gIHsKLSAgCWlmIChwYXJ0ICE9IG51bGwpCi0gIAkgIG1pbWVQYXJ0cy5hZGQocGFydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydHMjZ2V0UGFydHMoKQotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0UGFydHMoKQotICB7Ci0gIAlyZXR1cm4gbWltZVBhcnRzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjFhMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9DaHVua2VkRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3Mgd2lsbCBwcm9jZXNzIGNodW5rZWQgZGF0YS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIENodW5rZWREYXRhCi17Ci0gIHByb3RlY3RlZCBib29sZWFuIG1vcmVDaHVua2VkRGF0YSA9IGZhbHNlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGNodW5rZWREYXRhID0gIiI7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgQ2h1bmtlZERhdGEgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENodW5rZWREYXRhKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBDaHVua2VkRGF0YSBvYmplY3QuCi0gICAqIEBwYXJhbSBzb2NrZXRIYW5kbGVyIHNvY2tldCBoYW5kbGVyLgotICAgKiBAcGFyYW0gbW9yZUNodW5rZWREYXRhIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBDaHVua2VkRGF0YShTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIsIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyID0gc29ja2V0SGFuZGxlcjsKLSAgICB0aGlzLm1vcmVDaHVua2VkRGF0YSA9IG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgQ2h1bmtlZERhdGEgb2JqZWN0LgotICAgKiBAcGFyYW0gc29ja2V0SGFuZGxlciBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIGNodW5rZWREYXRhIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBDaHVua2VkRGF0YShTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIsIFN0cmluZyBjaHVua2VkRGF0YSkKLSAgewotICAgIHRoaXMuc29ja2V0SGFuZGxlciA9IHNvY2tldEhhbmRsZXI7Ci0gICAgdGhpcy5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gY2hlY2tEYXRhKGNodW5rZWREYXRhKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdGhlIGNodW5rZWQgZGF0YSB0byB0aGUgYnVmZmVyLgotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEgY2h1bmtlZCBkYXRhLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRGF0YShTdHJpbmcgY2h1bmtlZERhdGEpCi0gIHsKLSAgICB0aGlzLmNodW5rZWREYXRhICs9IGNodW5rZWREYXRhOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gY2hlY2tEYXRhKGNodW5rZWREYXRhKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZGF0YSBidWZmZXIuCi0gICAqIEByZXR1cm4gIGRhdGEgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREYXRhKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNodW5rZWREYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIENsZWFyIGRhdGEgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYXJEYXRhKCkKLSAgewotICAgIHRoaXMuY2h1bmtlZERhdGEgPSAiIjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTW9yZUNodW5rZWREYXRhKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgYW5kIGFkZCBkYXRhIHRvIHRoZSBidWZmZXIuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyIGEgU3RyaW5nQnVmZmVyIG9iamVjdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlci4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRlY29kZUFuZEFkZERhdGFUb0J1ZmZlcihTdHJpbmdCdWZmZXIgbWVzc2FnZUJ1ZmZlcikKLSAgewotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0gICAgaWYgKCF0aGlzLm1vcmVDaHVua2VkRGF0YSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJkZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIiLCAiY2h1bmtlZERhdGE6ICIgKyBjaHVua2VkRGF0YSk7Ci0KLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IGRlY29kZURhdGEoY2h1bmtlZERhdGEsIG1lc3NhZ2VCdWZmZXIpOwotICAgIH0KLQotICAgIHJldHVybiBtb3JlQ2h1bmtlZERhdGE7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgZGF0YS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja0RhdGEoU3RyaW5nIGNodW5rZWREYXRhKQotICB7Ci0gICAgYm9vbGVhbiBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBbQ1JMRl1bMF1bQ1JMRl0gaW4gdGhlIGNodW5rZWQgZGF0YSAgICAgIAotICAgIGlmIChjaHVua2VkRGF0YS5pbmRleE9mKFNvY2tldEhhbmRsZXIuQ1JMRiArICIwIiArIFNvY2tldEhhbmRsZXIuQ1JMRikgIT0gLTEpCi0gICAgewotICAgICAgbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoCi0gICAgICAgICJjaGVja0RhdGEiLAotICAgICAgICAiQ2h1bmsgY29udGFpbnMgW0NSTEZdWzBdW0NSTEZdLCBzbyB0aGVyZSBpcyBubyBtb3JlIGRhdGEuIik7Ci0gICAgfQotCi0gICAgLy8gTG9vayBmb3IgWzBdW0NSTEZdIGF0IHN0YXJ0IG9mIGNodW5rZWQgZGF0YSAgICAgIAotICAgIGVsc2UgaWYgKGNodW5rZWREYXRhLnN0YXJ0c1dpdGgoIjAiICsgU29ja2V0SGFuZGxlci5DUkxGKSkKLSAgICB7Ci0gICAgICBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImNoZWNrRGF0YSIsCi0gICAgICAgICJDaHVuayBkYXRhIHN0YXJ0cyB3aXRoIFswXVtDUkxGXSwgc28gdGhlcmUgaXMgbm8gbW9yZSBkYXRhLiIpOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBzdGVwIHRocm91Z2ggaXQgdG8gc2VlIGlmIHdlIGhhdmUgYWxsIG9mIHRoZSBkYXRhCi0gICAgZWxzZQotICAgIHsKLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgY2h1bmtlZCBkYXRhLgotICAgKiAKLSAgICogRGF0YSBmb3JtYXQ6Ci0gICAqIDxwcmU+Ci0gICAqICAgW0NodW5rIFNpemVdW0NSTEZdW0RhdGEgQ2h1bmtdW0NSTEZdW0NodW5rIFNpemVdW0NSTEZdW0RhdGEgQ2h1bmtdW0NSTEZdLi4uWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0KLSAgICogPC9wcmU+Ci0gICAqIAotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEKLSAgICogQHBhcmFtIG1lc3NhZ2VMb2dnaW5nQnVmZmVyCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gZGVjb2RlRGF0YShTdHJpbmcgY2h1bmtlZERhdGEsIFN0cmluZ0J1ZmZlciBtZXNzYWdlQnVmZmVyKQotICB7Ci0gICAgYm9vbGVhbiBlbmRPZkRhdGEgPSBmYWxzZTsKLSAgICBpbnQgbmV4dEluZGV4ID0gMDsKLSAgICBpbnQgcHJldkluZGV4ID0gMDsKLSAgICBpbnQgY2h1bmtTaXplID0gMDsKLQotICAgIFN0cmluZyBuZXh0Q2h1bmtEYXRhID0gbnVsbDsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaHVuayBvZiBkYXRhCi0gICAgd2hpbGUgKCEoZW5kT2ZEYXRhKQotICAgICAgJiYgKG5leHRJbmRleCA8IGNodW5rZWREYXRhLmxlbmd0aCgpKQotICAgICAgJiYgKG5leHRJbmRleCA9IGNodW5rZWREYXRhLmluZGV4T2YoU29ja2V0SGFuZGxlci5DUkxGLCBwcmV2SW5kZXgpKSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIGRhdGEgbGVuZ3RoIHdoaWNoIGlzIHJpZ2h0IGFmdGVyIHRoaXMKLSAgICAgIFN0cmluZyBoZXhDaHVua2VkU2l6ZSA9IGNodW5rZWREYXRhLnN1YnN0cmluZyhwcmV2SW5kZXgsIG5leHRJbmRleCk7Ci0KLSAgICAgIC8vIERlY29kZSBsZW5ndGgKLSAgICAgIGNodW5rU2l6ZSA9IEludGVnZXIuZGVjb2RlKCIweCIgKyBoZXhDaHVua2VkU2l6ZSkuaW50VmFsdWUoKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygiZGVjb2RlRGF0YSIsICJjaHVua2VkU2l6ZTogIiArIGNodW5rU2l6ZSk7Ci0KLSAgICAgIC8vIElmIHNpemUgaXMgemVybywgdGhlbiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIHRoZSBjaHVua2VkIGRhdGEKLSAgICAgIGlmIChjaHVua1NpemUgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgZW5kT2ZEYXRhID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbGwgb2YgdGhlIGRhdGEgdGhlbiBzdG9wCi0gICAgICBlbHNlIGlmIChuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplID4gY2h1bmtlZERhdGEubGVuZ3RoKCkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG5leHRDaHVua0RhdGEgPQotICAgICAgICAgIGNodW5rZWREYXRhLnN1YnN0cmluZyhuZXh0SW5kZXggKyAyLCBuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplKTsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoImRlY29kZURhdGEiLCAibmV4dENodW5rRGF0YTogIiArIG5leHRDaHVua0RhdGEpOwotCi0gICAgICAgIC8vIEdldCBtZXNzYWdlIGJhc2VkIG9uIGxlbmd0aAotICAgICAgICBpZiAobWVzc2FnZUJ1ZmZlciAhPSBudWxsKQotICAgICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKG5leHRDaHVua0RhdGEpOwotICAgICAgfQotCi0gICAgICAvLyBQb2ludCBhdCB0aGUgbmV4dCBjaHVuayBzaXplCi0gICAgICBwcmV2SW5kZXggPSBuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplICsgMjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5kT2ZEYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIERlYnVnLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBtZXRob2QsIFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyLmRlYnVnKCJDaHVua2VkRGF0YSIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvQ29ubmVjdGlvbkxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGNlOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGZvciByZWNlaXZpbmcgY29ubmVjdGlvbiBldmVudHMuCi0gKiAKLSAqIEBhdXRob3IgU2VyZ2V5IFN1aG9ydWNoa2luCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbm5lY3Rpb25MaXN0ZW5lcgotewotICAvKioKLSAgICogSW52b2tlZCB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICAgKiBAcGFyYW0gY29ubmVjdGlvbiBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoU29ja2V0Q29ubmVjdGlvbiBjb25uZWN0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDljYzA0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01lc3NhZ2VFbnRyeVF1ZXVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRoZSBxdWV1ZSB0aGF0IGlzIHVzZWQgdG8gd3JpdGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMKLSAqIHRvIHRoZSBsb2cgZmlsZSBpbiB0aGUgY29ycmVjdCBvcmRlci4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRW50cnlRdWV1ZQotewotICAvKioKLSAgICogUmVxdWVzdCB0eXBlIG1lc3NhZ2UgZW50cnkgcXVldWUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHJlcXVlc3RMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBSZXNwb25zZSB0eXBlIG1lc3NhZ2UgZW50cnkgcXVldWUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHJlc3BvbnNlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTW9uaXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBNb25pdG9yIG1vbml0b3IgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIHdyaXRlci4KLSAgICovCi0gIHByb3RlY3RlZCBMb2dXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKLQotICAvKioKLSAgICogTGlzdCBsb2NrLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsaXN0TG9jayA9ICJsaXN0TG9jayI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgSUQgd2hpY2ggaXMgaW5jcmVtZW50ZWQgd2hlbiBhIG5ldyBsb2cgZW50cnkgaXMgYWRkZWQgdG8gdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtZXNzYWdlSWQgPSAxOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbWVzc2FnZSBlbnRyeSBxdWV1ZS4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBtb25pdG9yLgotICAgKiBAcGFyYW0gbG9nIHRoZSBsb2cuCi0gICAqIEBwYXJhbSBsb2dXcml0ZXIgYSBsb2cgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlKE1vbml0b3IgbW9uaXRvciwgTG9nIGxvZywgTG9nV3JpdGVyIGxvZ1dyaXRlcikKLSAgewotICAgIC8vIFNhdmUgaW5wdXQgcmVmZXJlbmNlcwotICAgIHRoaXMubW9uaXRvciA9IG1vbml0b3I7Ci0gICAgdGhpcy5sb2cgPSBsb2c7Ci0gICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGxvZyBlbnRyeSB0byBxdWV1ZS4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeSBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgdGhlIGxvZyAKLSAgICogICAgICAgICBlbnRyeSB0byB0aGUgcXVldWUuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkTWVzc2FnZUVudHJ5KE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3luY2hyb25pemVkIChsaXN0TG9jaykKLSAgICB7Ci0gICAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCB0eXBlIG9mIG1lc3NhZ2UgZW50cnksIHRoZW4gYWRkIHRvIHJlcXVlc3QgbGlzdAotICAgICAgaWYgKG1lc3NhZ2VFbnRyeS5nZXRUeXBlKCkuZXF1YWxzKE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICByZXF1ZXN0TGlzdC5hZGQobWVzc2FnZUVudHJ5KTsKLSAgICAgIH0KLQotICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgaXMgYSByZXNwb25zZSB0eXBlIG9mIG1lc3NhZ2UgZW50cnkKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzcG9uc2VMaXN0LmFkZChtZXNzYWdlRW50cnkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRlbGwgdGhlIGxvZyBlbnRyeSB3cml0ZXIgdGhyZWFkIHRvIHJ1bgotICAgIHdyaXRlRnJvbVF1ZXVlKCk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIGFueSBsb2cgZW50cmllcyBuZWVkIHRvIGJlIHdyaXR0ZW4uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgbG9nIGVudHJpZXMuCi0gIAotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlRnJvbVF1ZXVlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IHJlcXVlc3RNZXNzYWdlRW50cnkgPSBudWxsOwotICAgIE1lc3NhZ2VFbnRyeSByZXNwb25zZU1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0gICAgYm9vbGVhbiByZXNwb25zZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUgYXJyYXkgdGhhdCB3aWxsIGNvbnRhaW4gbGlzdCBvZiBpbmRleCB0byByZW1vdmUgZnJvbSByZXF1ZXN0IGxpc3QKLSAgICBpbnRbXSByZXF1ZXN0SW5kZXhMaXN0ID0gbmV3IGludFtyZXF1ZXN0TGlzdC5zaXplKCldOwotICAgIGludCByZXFJbmRleENvdW50ID0gMDsKLQotICAgIHN5bmNocm9uaXplZCAobGlzdExvY2spCi0gICAgewotICAgICAgLy8gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhlIHJlcXVlc3QgcXVldWUsCi0gICAgICAvLyB0aGVuIHRyeSB0byBtYXRjaCB0aGVtIHdpdGggZW50cmllcyBpbiB0aGUgcmVzcG9uc2UgcXVldWUKLSAgICAgIGZvciAoaW50IHJlcUluZGV4ID0gMDsgcmVxSW5kZXggPCByZXF1ZXN0TGlzdC5zaXplKCk7IHJlcUluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCByZXF1ZXN0IGxvZyBlbnRyeQotICAgICAgICByZXF1ZXN0TWVzc2FnZUVudHJ5ID0gKE1lc3NhZ2VFbnRyeSkgcmVxdWVzdExpc3QuZWxlbWVudEF0KHJlcUluZGV4KTsKLQotICAgICAgICAvLyBDaGVjayBlYWNoIHJlc3BvbnNlIGxvZyBlbnRyeSB0byBzZWUgaWYgdGhlIGNvbnZlcnNhdGlvbklkIG1hdGNoZXMKLSAgICAgICAgcmVzcG9uc2VGb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCByZXNwSW5kZXggPSAwOwotICAgICAgICAgIHJlc3BJbmRleCA8IHJlc3BvbnNlTGlzdC5zaXplKCkgJiYgIXJlc3BvbnNlRm91bmQ7Ci0gICAgICAgICAgcmVzcEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgcmVzcG9uc2UgbG9nIGVudHJ5Ci0gICAgICAgICAgcmVzcG9uc2VNZXNzYWdlRW50cnkgPQotICAgICAgICAgICAgKE1lc3NhZ2VFbnRyeSkgcmVzcG9uc2VMaXN0LmVsZW1lbnRBdChyZXNwSW5kZXgpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhhdmUgdGhlIHNhbWUgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgLy8gdGhlbiB3cml0ZSB0aGVtIG91dCB0byB0aGUgbG9nIGZpbGUKLSAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2VFbnRyeQotICAgICAgICAgICAgLmdldENvbnZlcnNhdGlvbklkKCkKLSAgICAgICAgICAgIC5lcXVhbHMocmVzcG9uc2VNZXNzYWdlRW50cnkuZ2V0Q29udmVyc2F0aW9uSWQoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFNldCB0aGUgaWQgZm9yIHRoZSBsb2cgZW50cmllcwotICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VFbnRyeS5zZXRJZChnZXROZXh0TWVzc2FnZUlkKCkpOwotICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlRW50cnkuc2V0SWQoZ2V0TmV4dE1lc3NhZ2VJZCgpKTsKLQotICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHJlcXVlc3QgYW5kIHRoZW4gcmVzcG9uc2UKLSAgICAgICAgICAgIC8vPT09PSBTUyBzdGFydCA6IHdoYXQgdGhpcyBsaW5lIGlzIHVzZWQgZm9yPz8/IC0gY2F1c2VzIG1lbW9yeSBsZWFrLCBhcyBubyByZW1vdmVMb2dFbnRyeSBpcyBjYWxsZWQgPT09PQotICAgICAgICAgICAgLy8gICAgICAgICAgICBsb2cuYWRkTG9nRW50cnkocmVxdWVzdE1lc3NhZ2VFbnRyeSk7Ci0gICAgICAgICAgICAvLz09PT0gU1MgZW5kID09PQotICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHJlcXVlc3RSZWFkZXIgPQotICAgICAgICAgICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlRW50cnkudG9YTUxTdHJpbmcoIiIpKTsKLSAgICAgICAgICAgIGxvZ1dyaXRlci53cml0ZShyZXF1ZXN0UmVhZGVyKTsKLQotICAgICAgICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICAgICAgICBwcmludE1lc3NhZ2UocmVxdWVzdE1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCByZXNwb25zZQotICAgICAgICAgICAgLy89PT09IFNTIHN0YXJ0IDogd2hhdCB0aGlzIGxpbmUgaXMgdXNlZCBmb3I/Pz8gLSBjYXVzZXMgbWVtb3J5IGxlYWssIGFzIG5vIHJlbW92ZUxvZ0VudHJ5IGlzIGNhbGxlZCA9PT09Ci0gICAgICAgICAgICAvLyAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShyZXNwb25zZU1lc3NhZ2VFbnRyeSk7Ci0gICAgICAgICAgICAvLz09PT0gU1MgZW5kID09PQotICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHJlc3BvbnNlUmVhZGVyID0KLSAgICAgICAgICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXNwb25zZU1lc3NhZ2VFbnRyeS50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgbG9nV3JpdGVyLndyaXRlKHJlc3BvbnNlUmVhZGVyKTsKLQotICAgICAgICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICAgICAgICBwcmludE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlRW50cnkpOwotCi0gICAgICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBsaXN0IHNvIHRoYXQgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIKLSAgICAgICAgICAgIHJlcXVlc3RJbmRleExpc3RbcmVxSW5kZXhDb3VudCsrXSA9IHJlcUluZGV4OwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbG9nIGVudHJ5IGZyb20gcmVzcG9uc2UgbGlzdAotICAgICAgICAgICAgcmVzcG9uc2VMaXN0LnJlbW92ZShyZXNwSW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBSZW1vdmUgcmVxdWVzdHMgdGhhdCB3ZXJlIHdyaXR0ZW4gb3V0Ci0gICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgcmVxSW5kZXhDb3VudDsgY291bnQrKykKLSAgICAgICAgcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3RJbmRleExpc3RbY291bnRdKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IG1lc3NhZ2UgaWRlbnRpZmllci4KLSAgICogQHJldHVybiB0aGUgbmV4dCBtZXNzYWdlIGlkZW50aWZpZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIFN0cmluZyBnZXROZXh0TWVzc2FnZUlkKCkKLSAgewotICAgIHJldHVybiBTdHJpbmcudmFsdWVPZihtZXNzYWdlSWQrKyk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBtZXNzYWdlLgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50TWVzc2FnZShNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5KQotICB7Ci0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgbW9uaXRvci5wcmludE1lc3NhZ2UoCi0gICAgICAibG9nMDEiLAotICAgICAgbWVzc2FnZUVudHJ5LmdldElkKCkKLSAgICAgICAgKyAiLCAiCi0gICAgICAgICsgbWVzc2FnZUVudHJ5LmdldFR5cGUoKQotICAgICAgICArICIsICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0U2VuZGVySG9zdEFuZFBvcnQoKSwKLSAgICAgICJMb2cgbWVzc2FnZSBlbnRyeSAtICBJRDogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRJZCgpCi0gICAgICAgICsgIiwgVHlwZTogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRUeXBlKCkKLSAgICAgICAgKyAiLCBTZW5kZXI6ICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0U2VuZGVySG9zdEFuZFBvcnQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMzFkZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLQotLyoqCi0gKiBNZXNzYWdlIE1vbml0b3IuCi0gKgotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyLnVzLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIE1vbml0b3IKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFU09VUkNFX0JVTkRMRV9OQU1FID0KLSAgICAib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuTW9uaXRvciI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBR0VfTUVTU0FHRSA9Ci0gICAgIlVzYWdlOiBNb25pdG9yIC1jb25maWcgPGNvbmZpZ0ZpbGVuYW1lPiI7Ci0KLSAgLyoqCi0gICAqIENvbnZlcnNhdGlvbiBJRC4KLSAgICovCi0gIHByaXZhdGUgaW50IGNvbnZlcnNhdGlvbklkID0gMTsKLQotICBwcml2YXRlIExvZyBsb2cgPSBudWxsOwotICBwcml2YXRlIExvZ1dyaXRlciBsb2dXcml0ZXIgPSBudWxsOwotICBwcml2YXRlIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZyA9IG51bGw7Ci0KLSAgLyoqCi0gICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9OQU1FID0gIk1vbml0b3IiOwotCi0gIHByb3RlY3RlZCBUb29sSW5mbyB0b29sSW5mbyA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFZlY3RvciBsaXN0ZW5lckxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeVF1ZXVlIG1lc3NhZ2VFbnRyeVF1ZXVlID0gbnVsbDsKLQotICAvKioKLSAgICogTWVzc2FnZSBtb25pdG9yLgotICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gY3JlYXRpbmcgYSBNb25pdG9yIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIFRvb2wgaW5mb3JtYXRpb24KLSAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbyhUT09MX05BTUUpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QKLSAgICBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICBtb25pdG9yQ29uZmlnLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgbW9uaXRvckNvbmZpZy5wYXJzZUFyZ3MoYXJncyk7Ci0KLSAgICBTdHJpbmcgbG9nTG9jYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgaWYgKGxvZ0xvY2F0aW9uLmluZGV4T2YoV1NJQ29uc3RhbnRzLlBBVEhfU0VQQVJBVE9SKSA+IC0xKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksCi0gICAgICAgICAgIlRoZSBsb2cgZmlsZSBsb2NhdGlvbiB2YWx1ZSBjYW5ub3QgY29udGFpbiB0aGUgcGFzcyBzZXBhcmF0b3IgY2hhcmFjdGVyOiIpKTsKLSAgICB9Ci0KLSAgICBGaWxlIGZpbGUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmaWxlIG9iamVjdCBmb3IgbG9nIGZpbGUKLSAgICAgIGZpbGUgPSBuZXcgRmlsZShtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNyIsICJDb3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICFtb25pdG9yQ29uZmlnLmdldFJlcGxhY2VMb2coKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpLAotICAgICAgICAgICJMb2cgZmlsZSBhbHJlYWR5IGV4aXN0czoiKSk7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIG91dHB1dCBmaWxlCi0gICAgICBsb2cgPSBkb2N1bWVudEZhY3RvcnkubmV3TG9nKCk7Ci0KLSAgICAgIC8vIFNldCBzdHlsZSBzaGVldCBzdHJpbmcKLSAgICAgIGxvZy5zZXRTdHlsZVNoZWV0U3RyaW5nKAotICAgICAgICBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKS5nZXRTdHlsZVNoZWV0U3RyaW5nKCkpOwotCi0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgbG9nV3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0xvZ1dyaXRlcigpOwotICAgICAgbG9nV3JpdGVyLnNldFdyaXRlcihtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotCi0gICAgICAvLyBXcml0ZSBzdGFydCBvZiBsb2cgZmlsZQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKHRvWE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5IHF1ZXVlCi0gICAgICBtZXNzYWdlRW50cnlRdWV1ZSA9IG5ldyBNZXNzYWdlRW50cnlRdWV1ZSh0aGlzLCBsb2csIGxvZ1dyaXRlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImVycm9yMDMiLAotICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGxvZyBvciBsb2cgd3JpdGVyLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgbWFuSW5UaGVNaWRkbGUgc2V0dGluZ3MKLSAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLQotICAgIC8vIEdldCBsaXN0IG9mIHJlZGlyZWN0cwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCByZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QKLSAgICAgIHJlZGlyZWN0ID0gKFJlZGlyZWN0KSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIC8vIENyZWF0ZSBzZXJ2ZXIgc29ja2V0IHNvY2tldCBsaXN0ZW5lcgotICAgICAgbGlzdGVuZXJMaXN0LmFkZChuZXcgU2VydmVyU29ja2V0TGlzdGVuZXIodGhpcywgcmVkaXJlY3QpKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgc2h1dGRvd24gaG9vawotICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmFkZFNodXRkb3duSG9vayhuZXcgU2h1dGRvd25Ib29rKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBzdGFydCBjb25zb2xlCi0gICAgQ29uc29sZSBjb25zb2xlID0gbmV3IENvbnNvbGUoKTsKLSAgICBjb25zb2xlLnN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKiBAcmV0dXJuIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgZ2V0TW9uaXRvckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxvZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGxvZyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgTG9nIGdldExvZygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2c7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlIGdldE1lc3NhZ2VFbnRyeVF1ZXVlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1lc3NhZ2VFbnRyeVF1ZXVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlcm1pbmF0ZSB0aGUgbW9uaXRvci4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGluZzAxIiwgIlN0b3BwaW5nIHRoZSBtb25pdG9yLi4uIik7Ci0gICAgU3lzdGVtLmV4aXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogU3RvcCB0aGUgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoRXhjZXB0aW9uIGUpCi0gIHsKLSAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2UKLSAgICBwcmludE1lc3NhZ2UoCi0gICAgICAic3RvcHBpbmcwMiIsCi0gICAgICAiU3RvcHBpbmcgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4iKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVYQ0VQVElPTjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHRoaXMubW9uaXRvckNvbmZpZy5nZXRWZXJib3NlT3B0aW9uKCkpCi0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgLy8gRXhpdCBtb25pdG9yCi0gICAgZXhpdE1vbml0b3IoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIHRoZSBtb25pdG9yLgotICAgKi8KLSAgdm9pZCBzdG9wTW9uaXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbGlzdCBvZiBsaXN0ZW5lcnMgdG8gc3RvcAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0ZW5lckxpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgKChTZXJ2ZXJTb2NrZXRMaXN0ZW5lcikgaXRlcmF0b3IubmV4dCgpKS5zaHV0ZG93bigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWl0IGZvciB0aGUgY2xlYW51cCB0aW1lb3V0IHNlY29uZHMKLSAgICAgIFRocmVhZC5zbGVlcChtb25pdG9yQ29uZmlnLmdldFRpbWVvdXQoKSAqIDEwMDApOwotCi0gICAgICAvLyBXcml0ZSBlbmQgb2YgbG9nIGZpbGUKLSAgICAgIGlmIChsb2dXcml0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLQotICAgICAgICBsb2dXcml0ZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgZXhlY3B0aW9uIGJlIGhhbmRsZWQ/Ci0gICAgfQotCi0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGVkMDEiLCAiTW9uaXRvciBzdG9wcGVkLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1hbmQgbGluZSBpbnRlcmZhY2UuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpY1ByaW50TWVzc2FnZSgidXNhZ2UwMSIsIFVTQUdFX01FU1NBR0UpOwotICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgIHsKLSAgICAgICAgc3RhdGljUHJpbnRNZXNzYWdlKCJ1c2FnZTAxIiwgVVNBR0VfTUVTU0FHRSk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgfQotCi0gICAgICAvLyBSdW4gdGhlIG1vbml0b3IKLSAgICAgIG1vbml0b3IgPSBuZXcgTW9uaXRvcihhcmdzKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgYm9vbGVhbiBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VJRDsKLSAgICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlRGF0YTsKLQotICAgICAgaWYgKChlIGluc3RhbmNlb2YgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKQotICAgICAgICB8fCAoZSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbikpCi0gICAgICB7Ci0gICAgICAgIHByaW50U3RhY2tUcmFjZSA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMSI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgRXJyb3I6IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMiI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgU3RvcHBlZCBCeSBFeGNlcHRpb246IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtb25pdG9yICE9IG51bGwpCi0gICAgICAgIG1vbml0b3IucHJpbnRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgTW9uaXRvci5zdGF0aWNQcmludE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotCi0gICAgICBpZiAocHJpbnRTdGFja1RyYWNlKQotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAvLyBFeGl0Ci0gICAgICBpZiAobW9uaXRvciAhPSBudWxsKQotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIFN5c3RlbS5leGl0KDIpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5IGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNQcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgc3RhdGljUHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljUHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2VMaXN0LnByaW50TWVzc2FnZSgKLSAgICAgIFJFU09VUkNFX0JVTkRMRV9OQU1FLAotICAgICAga2V5LAotICAgICAgbWVzc2FnZURhdGEsCi0gICAgICBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKi8KLSAgc3luY2hyb25pemVkIGludCBnZXROZXh0Q29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gU3RhcnQKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIG1vbml0b3JDb25maWcudG9YTUxTdHJpbmcoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKSk7Ci0KLSAgICAvLyBFbmQKLSAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTaHV0ZG93biBob29rLgotICAgKi8KLSAgY2xhc3MgU2h1dGRvd25Ib29rIGV4dGVuZHMgVGhyZWFkCi0gIHsKLSAgICAvKioKLSAgICAgKiBSdW4gc2h1dGRvd24gcHJvY2VkdXJlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgc3RvcE1vbml0b3IoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUnVuIGNvbW1hbmQgZnJvbSBjb25zb2xlLgotICAgKi8KLSAgY2xhc3MgQ29uc29sZSBleHRlbmRzIFRocmVhZAotICB7Ci0gICAgLyoqCi0gICAgICogUHJvbXB0IHVzZXIgYW5kIHdhaXQgZm9yIGlucHV0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBleGl0IHN0cmluZwotICAgICAgU3RyaW5nIGV4aXRTdHJpbmcgPSBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJleGl0MDEiLCAiZXhpdCIpOwotCi0gICAgICAvLyBEaXNwbGF5IG9wdGlvbnMgYW5kIGhvdyB0byBzdG9wIGFwcGxpY2F0aW9uCi0gICAgICBUZXN0VXRpbHMucHJpbnRUb29sSW5mbyh0b29sSW5mbyk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KG1vbml0b3JDb25maWcudG9TdHJpbmcoKSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgICAgIHByaW50TWVzc2FnZSgKLSAgICAgICAgInN0YXJ0MDEiLAotICAgICAgICAiVGhlICIKLSAgICAgICAgICArIHRvb2xJbmZvLmdldE5hbWUoKQotICAgICAgICAgICsgIiB0b29sIGlzIHJlYWR5IHRvIGludGVyY2VwdCBhbmQgbG9nIHdlYiBzZXJ2aWNlIG1lc3NhZ2VzLiIpOwotICAgICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAic3RhcnQwMiIsCi0gICAgICAgICJUeXBlIFwiZXhpdFwiIHRvIHN0b3AgdGhlICIgKyB0b29sSW5mby5nZXROYW1lKCkgKyAiLiIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIik7Ci0KLSAgICAgIC8vIEdldCB0aGUgdGltZSB0byBzdG9wIGFjY2VwdGluZyBjb25uZWN0aW9ucwotICAgICAgbG9uZyBzdG9wVGltZSA9Ci0gICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSAqIDEwMDApOwotICAgICAgLy8gU1MKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBzdGRpbiBhcyBhIGJ1ZmZlcmVkIHJlYWRlcgotICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPQotICAgICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBpbnB1dCBmcm9tIGNvbnNvbGUKLSAgICAgICAgYm9vbGVhbiBleGl0ID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICgoIWV4aXQpICYmIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSA8IHN0b3BUaW1lKSkKLSAgICAgICAgeyAvLyBTUwotICAgICAgICAgIC8vIFNsZWVwCi0gICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBmb3IgdXNlciBpbnB1dAotICAgICAgICAgIGlmIChyZWFkZXIucmVhZHkoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRMaW5lKCkuZXF1YWxzSWdub3JlQ2FzZShleGl0U3RyaW5nKSkKLSAgICAgICAgICAgICAgZXhpdCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgaGFuZGxlZD8KLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEV4aXQKLSAgICAgIGV4aXRNb25pdG9yKCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01vbml0b3IucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGQ2MDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSMKLSMgTW9uaXRvciBtZXNzYWdlIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IE1vbml0b3IgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+Ci1zdG9wcGVkMDE9TW9uaXRvciBzdG9wcGVkLgotZXJyb3IwMT1Nb25pdG9yIEVycm9yOgotZXJyb3IwMj1Nb25pdG9yIFN0b3BwZWQgQnkgRXhjZXB0aW9uOiAKLWVycm9yMDM9Q291bGQgbm90IGNyZWF0ZSBsb2cgb3IgbG9nIHdyaXRlci4KLWVycm9yMDQ9TW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Ci1zdG9wcGluZzAxPVN0b3BwaW5nIHRoZSBtb25pdG9yLi4uCi1zdG9wcGluZzAyPVN0b3BwaW5nIG1vbml0b3IgYmVjYXVzZSBhbiBleGNlcHRpb24gb2NjdXJyZWQuCi1sb2cwMT1Mb2cgbWVzc2FnZSBlbnRyeSBbSUQsIFR5cGUsIFNlbmRlcl06Ci1zdGFydDAxPVRoZSBNb25pdG9yIHRvb2wgaXMgcmVhZHkgdG8gaW50ZXJjZXB0IGFuZCBsb2cgd2ViIHNlcnZpY2UgbWVzc2FnZXMuCi1zdGFydDAyPVR5cGUgImV4aXQiIHRvIHN0b3AgdGhlIE1vbml0b3IuCi1leGl0MDE9ZXhpdAotY29uZmlnMDE9VGhlIHNwZWNpZmllZCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZDoKLWNvbmZpZzAyPU1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBub3QgZm91bmQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzAzPUNvdWxkIG5vdCByZWFkIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1FbGVtZW50IG11c3QgY29udGFpbiBhbiBpbnRlZ2VyIHZhbHVlLiAgRWxlbWVudCBuYW1lOgotY29uZmlnMDU9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIGFueSByZWRpcmVjdCBzdGF0ZW1lbnRzLgotY29uZmlnMDY9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIHRoZSBsb2cgZmlsZSBVUkkuCi1jb25maWcwNz1Db3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotY29uZmlnMDg9TG9nIGZpbGUgYWxyZWFkeSBleGlzdHMuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzA5PUVsZW1lbnQgaXMgbWlzc2luZy4gRWxlbWVudCBuYW1lOgotY29uZmlnMTA9UGFyYW1ldGVyIHZhbHVlIGNhbid0IGJlIG5lZ2F0aXZlLiBFbGVtZW50IG5hbWU6Ci1jb25maWcxMT1UaGUgbG9nIGZpbGUgbG9jYXRpb24gdmFsdWUgY2Fubm90IGNvbnRhaW4gdGhlIHBhc3Mgc2VwYXJhdG9yIGNoYXJhY3RlcjoKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTE2YzhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU2VydmVyU29ja2V0TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjsKLQotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogQSBzZXJ2ZXIgc29ja2V0IGxpc3RlbmVyLgotICoKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJTb2NrZXRMaXN0ZW5lcgotICBleHRlbmRzIFRocmVhZAotICBpbXBsZW1lbnRzIENvbm5lY3Rpb25MaXN0ZW5lciAvLyBTUwotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLSAgcHJvdGVjdGVkIFJlZGlyZWN0IHJlZGlyZWN0ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHN0b3BTZXJ2ZXJTb2NrZXQgPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgVmVjdG9yIGNvbm5lY3Rpb25MaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmVyIHNvY2tldCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBNb25pdG9yIG9iamVjdC4KLSAgICogQHBhcmFtIHJlZGlyZWN0IGEgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFNlcnZlclNvY2tldExpc3RlbmVyKE1vbml0b3IgbW9uaXRvciwgUmVkaXJlY3QgcmVkaXJlY3QpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLQotICAgIC8vIFN0YXJ0IGxpc3RlbmluZwotICAgIHN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogUnVuIHRoZSB0aHJlYWQgYW5kIGxpc3RlbiBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHNlcnZlciBzb2NrZXQKLSAgICAgIHNlcnZlclNvY2tldCA9Ci0gICAgICAgIG5ldyBTZXJ2ZXJTb2NrZXQoCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0TGlzdGVuUG9ydCgpLAotICAgICAgICAgIHJlZGlyZWN0LmdldE1heENvbm5lY3Rpb25zKCkpOwotICAgICAgLy8gU1MKLQotICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCBzZXJ2ZXIgc29ja2V0IHdpbGwgY29udGludWUgdG8gYWNjZXB0IGNvbm5lY3Rpb25zCi0gICAgICBzZXJ2ZXJTb2NrZXQuc2V0U29UaW1lb3V0KDApOwotCi0gICAgICAvLyBMaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIHVudGlsIGludGVycnVwdGVkCi0gICAgICB3aGlsZSAoIXN0b3BTZXJ2ZXJTb2NrZXQpCi0gICAgICB7Ci0gICAgICAgIC8vIEFjY2VwdCBjb25uZWN0aW9ucwotICAgICAgICBTb2NrZXQgc29ja2V0ID0gc2VydmVyU29ja2V0LmFjY2VwdCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc29ja2V0IHdhcyBOT1Qgc3RvcHBlZCwgcHJvY2VzcyBjb25uZWN0aW9uCi0gICAgICAgIGlmICghc3RvcFNlcnZlclNvY2tldCkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBuZXcgY29ubmVjdGlvbgotICAgICAgICAgIFNvY2tldENvbm5lY3Rpb24gc29ja2V0Q29ubmVjdGlvbiA9Ci0gICAgICAgICAgICBuZXcgU29ja2V0Q29ubmVjdGlvbih0aGlzLm1vbml0b3IsIHRoaXMucmVkaXJlY3QsIHNvY2tldCk7Ci0KLSAgICAgICAgICAvL3JlZ2lzdGVyIGFzIGEgbGlzdGVuZXIKLSAgICAgICAgICBzb2NrZXRDb25uZWN0aW9uLmFkZENvbm5lY3Rpb25MaXN0ZW5lcih0aGlzKTsgLy8gU1MKLQotICAgICAgICAgIC8vIEFkZCB0byBjb25uZWN0aW9uIGxpc3QKLSAgICAgICAgICBjb25uZWN0aW9uTGlzdC5hZGQoc29ja2V0Q29ubmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiB3YXMgTk9UIGNhdXNlZCBieSBjbG9zaW5nIHRoZSBzb2NrZXQsIHRoZW4gc3RvcCBtb25pdG9yCi0gICAgICBpZiAoIWUuZ2V0TWVzc2FnZSgpLmVxdWFscygic29ja2V0IGNsb3NlZCIpKQotICAgICAgewotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZyBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzaHV0ZG93bigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTaHV0ZG93biBhbGwgYWN0aXZlIGNvbm5lY3Rpb25zCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGNvbm5lY3Rpb25MaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAoKFNvY2tldENvbm5lY3Rpb24pIGl0ZXJhdG9yLm5leHQoKSkuc2h1dGRvd24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gVGVsbCB0aGUgc2VydmVyIHNvY2tldCBsaXN0ZW5pbmcgdGhyZWFkIHRvIHN0b3AKLSAgICAgIHRoaXMuc3RvcFNlcnZlclNvY2tldCA9IHRydWU7Ci0KLSAgICAgIC8vIFNldCB0aGUgc2VydmVyIHNvY2tldCB0aW1lb3V0IHRvIDEgbXMKLSAgICAgIHNlcnZlclNvY2tldC5zZXRTb1RpbWVvdXQoMSk7Ci0KLSAgICAgIC8vIENsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0Ci0gICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpCi0gICAgICAgIHNlcnZlclNvY2tldC5jbG9zZSgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PSBTUyBzdGFydCA9PT09Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5Db25uZWN0aW9uTGlzdGVuZXIjY29ubmVjdGlvbkNsb3NlZCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFNvY2tldENvbm5lY3Rpb24gY29ubmVjdGlvbikKLSAgewotICAgIGNvbm5lY3Rpb25MaXN0LnJlbW92ZShjb25uZWN0aW9uKTsKLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldENvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTJhMGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi1pbXBvcnQgamF2YS5uZXQuU29ja2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQSBzb2NrZXQgY29ubmVjdGlvbi4KLSAqCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgU29ja2V0Q29ubmVjdGlvbiBleHRlbmRzIFRocmVhZAotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yOwotICBwcm90ZWN0ZWQgUmVkaXJlY3QgcmVkaXJlY3Q7Ci0gIHByb3RlY3RlZCBTb2NrZXQgaW5Tb2NrZXQ7Ci0gIHByb3RlY3RlZCBTb2NrZXQgb3V0U29ja2V0OwotCi0gIHByb3RlY3RlZCBTdHJpbmcgaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0gIHByb3RlY3RlZCBpbnQgaHR0cFByb3h5UG9ydDsKLQotICBwcm90ZWN0ZWQgU29ja2V0SGFuZGxlciByZXF1ZXN0U29ja2V0SGFuZGxlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHJlc3BvbnNlU29ja2V0SGFuZGxlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBWZWN0b3IgbGlzdGVuZXJzID0gbmV3IFZlY3RvcigpOyAvLyBTUwotCi0gIC8qKgotICAgKiBDcmVhdGUgc29ja2V0IGNvbm5lY3Rpb24uCi0gICAqIEBwYXJhbSBtb25pdG9yICBhIE1vbml0b3Igb2JqZWN0LgotICAgKiBAcGFyYW0gcmVkaXJlY3QgYSBSZWRpcmVjdCBvYmplY3QuCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgU29ja2V0Q29ubmVjdGlvbihNb25pdG9yIG1vbml0b3IsIFJlZGlyZWN0IHJlZGlyZWN0LCBTb2NrZXQgaW5Tb2NrZXQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLSAgICB0aGlzLmluU29ja2V0ID0gaW5Tb2NrZXQ7Ci0KLSAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBjb25uZWN0aW9uCi0gICAgc3RhcnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICAvLyBHZXQgdGhlIEhUVFAgcHJveHkgc2V0dGluZ3MgaWYgdGhlcmUgYXJlIGFueSBzZXQgKG5vdCB1c2VkIGN1cnJlbnRseSkKLSAgICBsb2FkSHR0cFByb3h5U2V0dGluZ3MoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIE9wZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlcgotICAgICAgdGhpcy5vdXRTb2NrZXQgPSBuZXcgU29ja2V0KHJlZGlyZWN0LmdldFRvSG9zdCgpLCByZWRpcmVjdC5nZXRUb1BvcnQoKSk7Ci0KLSAgICAgIC8vIFNldCB0aGUgcmVhZCB0aW1lb3V0IGZvciB0aGUgaW5wdXQgc29ja2V0Ci0gICAgICB0aGlzLmluU29ja2V0LnNldFNvVGltZW91dChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSAqIDEwMDApOwotCi0gICAgICAvLyBHZXQgdGhlIG5leHQgY29udmVyc2F0aW9uIElECi0gICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBtb25pdG9yLmdldE5leHRDb252ZXJzYXRpb25JZCgpOwotCi0gICAgICAvLyBDcmVhdGUgdGhlIHNvY2tldCBoYW5kbGVycyB3aGljaCBhcmUgdXNlZCB0byBzZW5kIHRoZSBkYXRhIGZyb20KLSAgICAgIC8vIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlcgotICAgICAgcmVxdWVzdFNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QsCi0gICAgICAgICAgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0VG9Ib3N0KCksCi0gICAgICAgICAgdGhpcy5pblNvY2tldCwKLSAgICAgICAgICB0aGlzLm91dFNvY2tldCwKLSAgICAgICAgICByZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSk7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFLAotICAgICAgICAgIGNvbnZlcnNhdGlvbklkLAotICAgICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAgIHRoaXMub3V0U29ja2V0LAotICAgICAgICAgIHRoaXMuaW5Tb2NrZXQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0UmVhZFRpbWVvdXRTZWNvbmRzKCkpOwotCi0gICAgICAvLyBUZWxsIGVhY2ggc29ja2V0SGFuZGxlciBhYm91dCB0aGUgb3RoZXIgb25lCi0gICAgICByZXF1ZXN0U29ja2V0SGFuZGxlci5zZXRQYWlyZWRTb2NrZXRIYW5kbGVyKHJlc3BvbnNlU29ja2V0SGFuZGxlcik7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIuc2V0UGFpcmVkU29ja2V0SGFuZGxlcihyZXF1ZXN0U29ja2V0SGFuZGxlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIE1vbml0b3Iuc3RhdGljUHJpbnRNZXNzYWdlKAotICAgICAgICAiZXJyb3IwNCIsCi0gICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAiTW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Iik7Ci0KLSAgICAgIHNodXRkb3duKCk7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0aGlzLmluU29ja2V0LmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIExvZyBtZXNzYWdlLgotICAgKiBAcGFyYW0gY29udmVyc2F0aW9uSUQgICAgICB0aGUgY292ZXJzYXRpb24gaWQuCi0gICAqIEBwYXJhbSBjb25uZWN0aW9uVHlwZSAgICAgIHRoZSBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgICAgICAgICAgIHRoZSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBzZW5kZXJIb3N0QW5kUG9ydCAgIHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgICogQHBhcmFtIHJlY2VpdmVySG9zdEFuZFBvcnQgdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyICAgICAgIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gYm9tICAgICAgICAgICAgICAgICB0aGUgQk9NLgotICAgKiBAcGFyYW0gZW5jb2RpbmcgICAgICAgICAgICB0aGUgZW5jb2RpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmICB0aGVyZSBpcyBhIHByb2JsZW0gbG9nZ2luZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgdm9pZCBsb2dNZXNzYWdlKAotICAgIGludCBjb252ZXJzYXRpb25JRCwKLSAgICBTdHJpbmcgY29ubmVjdGlvblR5cGUsCi0gICAgU3RyaW5nIHRpbWVzdGFtcCwKLSAgICBTdHJpbmcgc2VuZGVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIsCi0gICAgaW50IGJvbSwKLSAgICBTdHJpbmcgZW5jb2RpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgbWVzc2FnZSBlbnRyeQotICAgIG1lc3NhZ2VFbnRyeSA9Ci0gICAgICBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICBjb25uZWN0aW9uVHlwZSwKLSAgICAgICAgdGltZXN0YW1wLAotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgbWVzc2FnZUJ1ZmZlci50b1N0cmluZygpLAotICAgICAgICBib20sCi0gICAgICAgIGVuY29kaW5nKTsKLQotICAgIC8vIERFQlVHOgotICAgIC8vZGVidWcoImxvZ01lc3NhZ2UiLCAiIG1lc3NhZ2VFbnRyeTogIiArIG1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gdGhlIHF1ZXVlCi0gICAgbW9uaXRvci5nZXRNZXNzYWdlRW50cnlRdWV1ZSgpLmFkZE1lc3NhZ2VFbnRyeShtZXNzYWdlRW50cnkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBlbnRyeSBmcm9tIGFsbCBvZiB0aGUgZGF0YSB0aGF0IHdhcyBnYXRoZXJlZC4KLSAgICovCi0gIHByaXZhdGUgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeSgKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VUeXBlLAotICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIGludCBib20sCi0gICAgU3RyaW5nIGVuY29kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBsb2cgZW50cnkgb2JqZWN0Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG1vbml0b3IuZ2V0TG9nKCkuY3JlYXRlTG9nRW50cnkoKTsKLQotICAgIC8vIFNldCBpbnB1dCBpbmZvcm1hdGlvbiBpbiBsb2cgZW50cnkKLSAgICAvLyBOT1RFOiAgVGhlIElEIGlzIHNldCBqdXN0IGJlZm9yZSB0aGUgbG9nIGVudHJ5IGlzIHdyaXR0ZW4gdG8gdGhlIGxvZyBmaWxlIGluIExvZ0VudHJ5UXVldWUKLSAgICAvL2xvZ0VudHJ5LnNldElkKGlkKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nLnZhbHVlT2YoY29udmVyc2F0aW9uSUQpKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0VHlwZShtZXNzYWdlVHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgIC8vIEdldCBIVFRQIGhlYWRlcnMgZnJvbSBmdWxsIG1lc3NhZ2UKLSAgICBTdHJpbmcgaHR0cEhlYWRlcnMgPSBVdGlscy5nZXRIVFRQSGVhZGVycyhtZXNzYWdlKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotCQotICAgaWYgKFV0aWxzLmlzTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoaHR0cEhlYWRlcnMpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZSwgaHR0cEhlYWRlcnMsIGVuY29kaW5nKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIFN0cmluZyBjb250ZW50ID0gVXRpbHMuZ2V0Q29udGVudChtZXNzYWdlKTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lUGFydHMobWltZVBhcnRzKTsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgICBTdHJpbmcgY29udGVudCA9IFV0aWxzLmdldENvbnRlbnQobWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lQ29udGVudChmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBCT00sIGlmIHRoZXJlIGlzIG9uZQotICAgIGlmIChib20gIT0gMCkKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRCT00oYm9tKTsKLQotICAgIHJldHVybiBtZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogTG9hZCBIVFRQIHByb3h5IHNldHRpbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZEh0dHBQcm94eVNldHRpbmdzKCkKLSAgewotICAgIC8vIEdldCB0aGUgSFRUUCBwcm94eSBob3N0IHNldHRpbmcKLSAgICB0aGlzLmh0dHBQcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlIb3N0Iik7Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsICYmIGh0dHBQcm94eUhvc3QuZXF1YWxzKCIiKSkKLSAgICAgIHRoaXMuaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0KLSAgICAvLyBJZiB0aGVyZSB3YXMgYW4gSFRUUCBwcm94eSBob3N0IHNldHRpbmcsIHRoZW4gZ2V0IHRoZSBwb3J0Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwb3J0U3RyaW5nID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UG9ydCIpOwotCi0gICAgICAvLyBTZXQgZGVmYXVsdCB0byA4MAotICAgICAgaWYgKHBvcnRTdHJpbmcgPT0gbnVsbCB8fCBwb3J0U3RyaW5nLmVxdWFscygiIikpCi0gICAgICAgIHRoaXMuaHR0cFByb3h5UG9ydCA9IDgwOwotICAgICAgZWxzZQotICAgICAgICBodHRwUHJveHlQb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0U3RyaW5nKTsKLSAgICB9Ci0gIH0KLQotICBNb25pdG9yIGdldE1vbml0b3IoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubW9uaXRvcjsKLSAgfQotCi0gIHN5bmNocm9uaXplZCB2b2lkIHdha2VVcCgpCi0gIHsKLSAgICBmaXJlQ29ubmVjdGlvbkNsb3NlZCgpOyAvLyBTUwotICAgIG5vdGlmeUFsbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2h1dGRvd24oKQotICB7Ci0gICAgaWYgKHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIuc2h1dGRvd24oKTsKLSAgICBpZiAodGhpcy5yZXNwb25zZVNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVzcG9uc2VTb2NrZXRIYW5kbGVyLnNodXRkb3duKCk7Ci0gIH0KLQotICAvLyA9PT09IFNTIHN0YXJ0ID09PT0KLSAgLyoqCi0gICAqIEFkZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAcGFyYW0gbGlzdGVuZXIgZXZlbnQgbGlzdGVuZXIuCi0gICAqIEBzZWUgI3JlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkxpc3RlbmVyKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotICB9Ci0gIC8qKgotICAgKiBSZW1vdmUgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIGxpc3RlbmVyIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAc2VlICNhZGRDb25uZWN0aW9uTGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLSAgfQotICAvKioKLSAgICogTm90aWZ5IGxpc3RlbmVycyBvbiBjb25uZWN0aW9uIGNsb3NlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGZpcmVDb25uZWN0aW9uQ2xvc2VkKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gKENvbm5lY3Rpb25MaXN0ZW5lcikgaS5uZXh0KCk7Ci0gICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwotICAgIH0KLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM4YTI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIEJlYWNvbiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEJlYWNvbklUIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogU29ja2V0IEhhbmRsZXIuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2NrZXRIYW5kbGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByb3RlY3RlZCBTb2NrZXRDb25uZWN0aW9uIHNvY2tldENvbm5lY3Rpb247Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHBhaXJlZFNvY2tldEhhbmRsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgY29ubmVjdGlvblR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSUQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SG9zdDsKLSAgcHJvdGVjdGVkIGludCByZWFkVGltZW91dFNlY29uZHM7Ci0KLSAgcHJvdGVjdGVkIFNvY2tldCBpblNvY2tldDsKLSAgcHJvdGVjdGVkIFNvY2tldCBvdXRTb2NrZXQ7Ci0gIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgU3RyaW5nIG1pbWVDaGFyc2V0ID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENSTEYgPSAiXHJcbiI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF8xMDBfQ09OVElOVUUgPQotICAgICIxMDAgQ29udGludWUiLnRvVXBwZXJDYXNlKCk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENIVU5LRUQgPQotICAgICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9XSVRIX1FVT1RFUyA9Ci0gICAgIlRyYW5zZmVyLUVuY29kaW5nOiBcImNodW5rZWRcIiIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9MRU5HVEggPQotICAgICJDb250ZW50LUxlbmd0aDoiLnRvVXBwZXJDYXNlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIHNvY2tldENvbm5lY3Rpb24gICBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICogQHBhcmFtIGNvbm5lY3Rpb25UeXBlICAgICBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JRCAgICAgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcGFyYW0gdGFyZ2V0SG9zdCAgICAgICAgIHRhcmdldCBob3N0LgotICAgKiBAcGFyYW0gaW5Tb2NrZXQgICAgICAgICAgIGluIHNvY2tldC4KLSAgICogQHBhcmFtIG91dFNvY2tldCAgICAgICAgICBvdXQgc29ja2V0LgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKi8KLSAgcHVibGljIFNvY2tldEhhbmRsZXIoCi0gICAgU29ja2V0Q29ubmVjdGlvbiBzb2NrZXRDb25uZWN0aW9uLAotICAgIFN0cmluZyBjb25uZWN0aW9uVHlwZSwKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIHRhcmdldEhvc3QsCi0gICAgU29ja2V0IGluU29ja2V0LAotICAgIFNvY2tldCBvdXRTb2NrZXQsCi0gICAgaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMuc29ja2V0Q29ubmVjdGlvbiA9IHNvY2tldENvbm5lY3Rpb247Ci0gICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlOwotICAgIHRoaXMuY29udmVyc2F0aW9uSUQgPSBjb252ZXJzYXRpb25JRDsKLSAgICB0aGlzLnRhcmdldEhvc3QgPSB0YXJnZXRIb3N0OwotICAgIHRoaXMuaW5Tb2NrZXQgPSBpblNvY2tldDsKLSAgICB0aGlzLm91dFNvY2tldCA9IG91dFNvY2tldDsKLSAgICB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyA9IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAgIC8vIEFERDoKLSAgICB2ZXJib3NlID0KLSAgICAgIHNvY2tldENvbm5lY3Rpb24uZ2V0TW9uaXRvcigpLmdldE1vbml0b3JDb25maWcoKS5nZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgICBzdGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBwYWlyZWQgc29ja2V0IGhhbmRsZXIuCi0gICAqIEBwYXJhbSBwYWlyZWRTb2NrZXRIYW5kbGVyIHBhaXJlZCBzb2NrZXQgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhaXJlZFNvY2tldEhhbmRsZXIoU29ja2V0SGFuZGxlciBwYWlyZWRTb2NrZXRIYW5kbGVyKQotICB7Ci0gICAgdGhpcy5wYWlyZWRTb2NrZXRIYW5kbGVyID0gcGFpcmVkU29ja2V0SGFuZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kIHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IHNvY2tldCB0byB0aGUgb3V0cHV0IHNvY2tldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpbnQgcmVhZExlbjsKLSAgICBTdHJpbmcgcmVhZE1zZzsKLSAgICBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgcmVhZCBidWZmZXIgICAgICAKLSAgICBieXRlW10gcmVhZEJ1ZmZlciA9IG5ldyBieXRlWzQwOTZdOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMKLSAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSB0aGlzLmluU29ja2V0LmdldElucHV0U3RyZWFtKCk7Ci0gICAgICB0aGlzLm91dHB1dFN0cmVhbSA9IHRoaXMub3V0U29ja2V0LmdldE91dHB1dFN0cmVhbSgpOwotCi0gICAgICAvLyBQcm9jZXNzIHdoaWxlIHRoZSBjb25uZWN0aW9uIGlzIGFjdGl2ZSAKLSAgICAgIC8vIChOT1RFOiB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gMSBtZXNzYWdlIHBlciBjb25uZWN0aW9uKQotICAgICAgYm9vbGVhbiBjb25uZWN0aW9uQWN0aXZlID0gdHJ1ZTsKLSAgICAgIHdoaWxlIChjb25uZWN0aW9uQWN0aXZlKQotICAgICAgewotICAgICAgICAvLyBSZXNldCBhbGwgZGF0YQotICAgICAgICByZWFkTGVuID0gMDsKLSAgICAgICAgbWVzc2FnZUNvbnRleHQgPSBuZXcgTWVzc2FnZUNvbnRleHQoKTsKLQotICAgICAgICAvLyBSZWFkIHVudGlsIG1lc3NhZ2UgaXMgY29tcGxldGUKLSAgICAgICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKCFtZXNzYWdlQ29tcGxldGUpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbS4iKTsKLQotICAgICAgICAgICAgLy8gUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbQotICAgICAgICAgICAgcmVhZExlbiA9IGlucHV0U3RyZWFtLnJlYWQocmVhZEJ1ZmZlciwgMCwgcmVhZEJ1ZmZlci5sZW5ndGgpOwotCi0gICAgICAgICAgICAvLyBSZXNldCByZWFkIHRpbWVvdXQgZmxhZwotICAgICAgICAgICAgcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkTGVuOiAiICsgcmVhZExlbik7Ci0KLSAgICAgICAgICAgIGlmIChyZWFkTGVuID09IC0xKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGRhdGEgd2FzIHJlYWQsIHRoZW4gY2hlY2sgZm9yIDEwMCBjb250aW51ZQotICAgICAgICAgICAgZWxzZSBpZiAocmVhZExlbiA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgdGhhdCB3YXMgcmVhZCwgdGhlbiBnZXQgdGhlIHRpbWVzdGFtcAotICAgICAgICAgICAgICBpZiAobWVzc2FnZUNvbnRleHQudGltZXN0YW1wID09IG51bGwpCi0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQudGltZXN0YW1wID0gVXRpbHMuZ2V0VGltZXN0YW1wKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25UeXBlLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGVbXSB0b0hvc3QgPQotICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0Q29ubmVjdGlvbi5yZWRpcmVjdC5nZXRUb0hvc3QoKQotICAgICAgICAgICAgICAgICAgICAgICsgIjoiCi0gICAgICAgICAgICAgICAgICAgICAgKyBzb2NrZXRDb25uZWN0aW9uLnJlZGlyZWN0LmdldFRvUG9ydCgpKQotICAgICAgICAgICAgICAgICAgICAuZ2V0Qnl0ZXMoKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZyhyZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGICsgIkhvc3Q6ICIpOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDg7Ci0gICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kUGFydCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGVuIGdvIGZvcm1hdCBpdAotICAgICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCB0b0hvc3QsIDAsIHRvSG9zdC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgd3JpdGUoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RyZWFtLAotICAgICAgICAgICAgICAgICAgICByZWFkQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICBzZWNvbmRQYXJ0LAotICAgICAgICAgICAgICAgICAgICByZWFkTGVuIC0gc2Vjb25kUGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlbiBnbyBmb3JtYXQgaXQKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCByZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZW4gZ28gZm9ybWF0IGl0Ci0gICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIHJlYWRMZW4pOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcocmVhZEJ1ZmZlciwgMCwgcmVhZExlbik7Ci0gICAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJidWZmZXIgYXMgc3RyaW5nOiBbIiArIGJ1ZmZlclN0cmluZyArICJdIik7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclN0cmluZy5sZW5ndGgoKSA8PSA1MCkKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIDUwKSkKLSAgICAgICAgICAgICAgICAgICAgICArICIgLi4uXSIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgcGFydCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHRoZSBCT00KLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDb250ZXh0LmJvbSA9PSAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQuYm9tID0gZ2V0Qk9NKHJlYWRCdWZmZXIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUcKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJib206ICIgKyBtZXNzYWdlQ29udGV4dC5ib20pOwotCi0gICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICByZWFkTXNnID0KLSAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgIHJlYWRMZW4sCi0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIHNldEVuY29kaW5nKHJlYWRNc2cpOwotICAgICAgICAgICAgICAgIGlmICghZW5jb2RpbmcuZXF1YWxzKGdldEVuY29kaW5nKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICAgIHJlYWRNc2cgPQotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICByZWFkTGVuLAotICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiRVhDRVBUSU9OICgzKTogIiArIHVlZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbih1ZWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBTZXQgZW5jb2RpbmcgaW4gdGhlIG1lc3NhZ2UgY29udGV4dAotICAgICAgICAgICAgICBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyA9IGVuY29kaW5nOwotCi0gICAgICAgICAgICAgIC8vIERFQlVHCi0gICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiZW5jb2Rpbmc6ICIgKyBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyk7Ci0KLSAgICAgICAgICAgICAgLy8gUHJvY2VzcyBtZXNzYWdlCi0gICAgICAgICAgICAgIG1lc3NhZ2VDb250ZXh0ID0gcHJvY2Vzc01lc3NhZ2UocmVhZExlbiwgcmVhZE1zZywgbWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIGlzIGNvbXBsZXRlLCB0aGVuIGxvZyBpdCBhbmQgcmVzZXQgYnVmZmVyCi0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKChyZWFkTGVuID09IC0xKSAmJiAobWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci5sZW5ndGgoKSA+IDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiBpZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTZXQgcmVhZCB0aW1lb3V0IGZsYWcKLSAgICAgICAgICAgIHJlYWRUaW1lZE91dCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjogIiArIGllLnRvU3RyaW5nKCkpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVhZCBpcyBub3QgZG9uZSwgdGhlbiBzaHV0ZG93biAKLSAgICAgICAgICAgIGlmIChwYWlyZWRTb2NrZXRIYW5kbGVyICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRXYWl0aW5nKCkKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRUaW1lZE91dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkIHRpbWVkIG91dCBvbiBib3RoIHNvY2tldHMiKTsKLQotICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICAgIGlmICgoaXNNZXNzYWdlQ29tcGxldGUobWVzc2FnZUNvbnRleHQpKQotICAgICAgICAgICAgICAgIHx8IChtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMb2cgbWVzc2FnZQotICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UobWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgY29ubmVjdGlvbkFjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZTIpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAgICAgInJ1biIsCi0gICAgICAgICAgICAgICJFWENFUFRJT04gKDIpOiAiCi0gICAgICAgICAgICAgICAgKyBlMi50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUyKSk7Ci0gICAgICAgICAgICAvL2UyLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKG1lc3NhZ2VDb250ZXh0Lm1lc3NhZ2VCdWZmZXIubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNldCBtZXNzYWdlIGNvbXBsZXRlCi0gICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAicnVuIiwKLSAgICAgICAgIkVYQ0VQVElPTiAoMSk6ICIKLSAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpKTsKLSAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXJyb3IgZXJyKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoInJ1biIsICJFUlJPUjogIiArIGVyci5nZXRNZXNzYWdlKCkpOwotICAgICAgLy9lcnIucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHNodXRkb3duKCk7Ci0gICAgICBzb2NrZXRDb25uZWN0aW9uLndha2VVcCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBwcm9jZXNzTWVzc2FnZSgKLSAgICBpbnQgcmVhZExlbiwKLSAgICBTdHJpbmcgcmVhZE1zZywKLSAgICBNZXNzYWdlQ29udGV4dCBpbk1lc3NhZ2VDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gY29udGludWVSZWFkID0gZmFsc2U7Ci0KLSAgICAvLyBJbml0aWFsaXplIG1lc3NhZ2UgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIE1lc3NhZ2VDb250ZXh0IG1lc3NhZ2VDb250ZXh0ID0gaW5NZXNzYWdlQ29udGV4dDsKLQotICAgIC8vIEdldCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGZyb20gbWVzc2FnZSBjb250ZXh0Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyOwotICAgIENodW5rZWREYXRhIGNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGE7Ci0KLSAgICAvLyBJZiBhbGwgd2UgcmVjZWl2ZWQgd2FzIHRoZSBoZWFkZXIgd2l0aCAxMDAgY29udGludWUsIHRoZW4gaWdub3JlIGl0Ci0gICAgaWYgKChyZWFkTXNnLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihIVFRQXzEwMF9DT05USU5VRSkgIT0gLTEpCi0gICAgICAmJiAocmVhZExlbiA+PSAyNSkpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygicHJvY2Vzc01lc3NhZ2UiLCAiSWdub3JlIEhUVFAgMTAwIENvbnRpbnVlLiIpOwotCi0gICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIEhUVFAgMTAwIG1lc3NhZ2UKLSAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYocmVhZE1zZyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgdGhlIEhUVFAgMTAwIG1lc3NhZ2UsIHRoZW4ganVzdCBpZ25vcmUgaXQKLSAgICAgIGlmIChpbmRleCA9PSByZWFkTXNnLmxlbmd0aCgpKQotICAgICAgICBjb250aW51ZVJlYWQgPSB0cnVlOwotCi0gICAgICAvLyBPdGhlcndpc2UgcmVtb3ZlIHRoZSBIVFRQIDEwMCBtZXNzYWdlIGFuZCBjb250aW51ZQotICAgICAgZWxzZQotICAgICAgICByZWFkTXNnID0gcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIEFERDogV2hhdCBpZiBhIGJ5cGFzc2VkIG1lc3NhZ2UgY29udGFpbnMgYW5vdGhlciBtZXNzYWdlIGFmdGVyIGl0PwotICAgIGlmICghY29udGludWVSZWFkICYmIGJ5cGFzc01lc3NhZ2UocmVhZE1zZykpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgIkRvIG5vdCBsb2cgbWVzc2FnZSBhcyBkZWZpbmVkIGluIHRoZSBtb25pdG9yIHNwZWMsIGJ1dCBpdCB3aWxsIGJlIHNlbnQuIik7Ci0KLSAgICAgIGNvbnRpbnVlUmVhZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFjb250aW51ZVJlYWQpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gMDsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgY2h1bmtlZCBkYXRhLCB0aGVuIGdldCB0aGUgbGVuZ3RoCi0gICAgICBpZiAoKHJlYWRNc2cudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgICB8fCAocmVhZE1zZy50b1VwcGVyQ2FzZSgpLmluZGV4T2YoQ0hVTktFRF9XSVRIX1FVT1RFUykgIT0gLTEpKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoInByb2Nlc3NNZXNzYWdlIiwgIlByb2Nlc3NpbmcgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgQ0ZMRgotICAgICAgICBpZiAoKGluZGV4ID0gcmVhZE1zZy5pbmRleE9mKENSTEYgKyBDUkxGKSkgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIGVuZCBvZiBIVFRQIGhlYWRlci4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluY2x1ZGUgdGhlIENSTEYrQ1JMRiBpbiB0aGUgaW5kZXgKLSAgICAgICAgaW5kZXggKz0gNDsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoCi0gICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAiQWRkIGhlYWRlciBiZWZvcmUgZGVjb2RpbmcgY2h1bmtlZCBkYXRhOiBbIgotICAgICAgICAgICAgKyByZWFkTXNnLnN1YnN0cmluZygwLCBpbmRleCkKLSAgICAgICAgICAgICsgIl0iKTsKLQotICAgICAgICAvLyBBZGQgSFRUUCBoZWFkZXIgdG8gYnVmZmVyCi0gICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKHJlYWRNc2cuc3Vic3RyaW5nKDAsIGluZGV4KSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIChpLmUuIGhlYWRlciBvbmx5KSwgdGhlbiBqdXN0IGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEKLSAgICAgICAgaWYgKHJlYWRNc2cubGVuZ3RoKCkgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YSA9IG5ldyBDaHVua2VkRGF0YSh0aGlzLCB0cnVlKTsKLQotICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAgICJUaGVyZSBpcyBjaHVuayBkYXRhLCBidXQgbm9uZSBpbiB0aGlzIHBhcnQgb2YgdGhlIG1lc3NhZ2UuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGF0YSBpcyBjb21wbGV0ZSAoaS5lLiBlbmRzIHdpdGggWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0pCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBjaHVua2VkIGRhdGEgb2JqZWN0Ci0gICAgICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEodGhpcywgcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpKTsKLQotICAgICAgICAgIGlmICghY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKGNodW5rZWREYXRhICE9IG51bGwgJiYgY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKCJwcm9jZXNzTWVzc2FnZSIsICJQcm9jZXNzaW5nIE1PUkUgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gQWRkIGRhdGEKLSAgICAgICAgY2h1bmtlZERhdGEuYWRkRGF0YShyZWFkTXNnKTsKLQotICAgICAgICAvLyBEZWNvZGUgZGF0YQotICAgICAgICBpZiAoIWNodW5rZWREYXRhLmlzTW9yZUNodW5rZWREYXRhKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gRWxzZSBqdXN0IGFwcGVuZCB0aGUgZGF0YSB0byB0aGUgYnVmZmVyCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIERFQlVHOgotICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAicHJvY2Vzc01lc3NhZ2UiLAotICAgICAgICAgICJBZGQgZGF0YSB0byBtZXNzYWdlIGVudHJ5IGJ1ZmZlcjogWyIgKyByZWFkTXNnICsgIl0iKTsKLQotICAgICAgICBtZXNzYWdlQnVmZmVyLmFwcGVuZChyZWFkTXNnKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdXBkYXRlZCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGluIG1lc3NhZ2UgY29udGV4dCAgICAKLSAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyID0gbWVzc2FnZUJ1ZmZlcjsKLSAgICBtZXNzYWdlQ29udGV4dC5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UgY29udGV4dCAKLSAgICByZXR1cm4gbWVzc2FnZUNvbnRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaW5wdXQgc29ja2V0IGFuZCBjbG9zZSBpbnB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBpbnB1dCBzdHJlYW0uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW5wdXQoU29ja2V0IGluU29ja2V0LCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgaW5wdXQgc29ja2V0LCB0aGVuIHNodXRkb3duIHRoZSBpbnB1dAotICAgICAgaWYgKGluU29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGluU29ja2V0LnNodXRkb3duSW5wdXQoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gaW5wdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIHNpbmNlIHdlIGFyZSBzdG9wcGluZyBldmVyeXRoaW5nCi0gICAgfQotCi0gICAgaW5wdXRTdHJlYW0gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duIG91dHB1dCBzb2NrZXQgYW5kIGNsb3NlIG91dHB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBvdXRTb2NrZXQgb3V0IHNvY2tldC4KLSAgICogQHBhcmFtIG91dHB1dFN0cmVhbSBvdXRwdXQgc3RyZWFtLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc3RvcE91dHB1dChTb2NrZXQgb3V0U29ja2V0LCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb3V0cHV0IHN0cmVhbSwgdGhlbiBmbHVzaCBpdAotICAgICAgaWYgKG91dHB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBvdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBpbnB1dCBzb2NrZXQsIHRoZW4gc2h1dGRvd24gdGhlIGlucHV0Ci0gICAgICBpZiAob3V0U29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG91dFNvY2tldC5zaHV0ZG93bk91dHB1dCgpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhbiBvdXRwdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChvdXRwdXRTdHJlYW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBzaW5jZSB3ZSBhcmUgc3RvcHBpbmcgZXZlcnl0aGluZwotICAgIH0KLQotICAgIG91dHB1dFN0cmVhbSA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNodXRkb3duKCkKLSAgewotICAgIC8vIFN0b3AgYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dAotICAgIHN0b3BJbnB1dCh0aGlzLmluU29ja2V0LCB0aGlzLmlucHV0U3RyZWFtKTsKLSAgICBzdG9wT3V0cHV0KHRoaXMub3V0U29ja2V0LCB0aGlzLm91dHB1dFN0cmVhbSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBkZWJ1ZygiU29ja2V0SGFuZGxlciIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgIHByaW50KGNsYXNzTmFtZSwgbWV0aG9kLCBtZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNwbGF5IG1lc3NhZ2VzLgotICAgKi8KLSAgdm9pZCBwcmludChTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICJbIgotICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCi0gICAgICAgICsgIl0gWyIKLSAgICAgICAgKyBjbGFzc05hbWUKLSAgICAgICAgKyAiLiIKLSAgICAgICAgKyBtZXRob2QKLSAgICAgICAgKyAiXSBbIgotICAgICAgICArIHRoaXMuY29ubmVjdGlvblR5cGUKLSAgICAgICAgKyAiXSAiCi0gICAgICAgICsgbWVzc2FnZSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFdyaXRlIGRhdGEuCi0gICAqLwotICBwcml2YXRlIHZvaWQgd3JpdGUoCi0gICAgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwKLSAgICBieXRlW10gYnVmZmVyLAotICAgIGludCBzdGFydCwKLSAgICBpbnQgbGVuZ3RoKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKG91dHB1dFN0cmVhbSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoIndyaXRlIiwgIkNvdWxkIG5vdCB3cml0ZSBidWZmZXIgYmVjYXVzZSBvdXRwdXQgc3RyZWFtIGlzIG51bGwuIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJ3cml0ZSIsICJidWZmZXI6IFsiICsgbmV3IFN0cmluZyhidWZmZXIsIHN0YXJ0LCBsZW5ndGgpICsgIl0iKTsKLQotICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayBpZiBtZXNzYWdlIGlzIGNvbXBsZXRlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VDb250ZXh0Ci0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlQ29tcGxldGUoTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IGluZGV4LCBpbmRleDIsIGNvbnRlbnRMZW47Ci0gICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLQotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKTsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci50b1N0cmluZygpOwotCi0gICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgaHR0cEhlYWRlcjsKLSAgICBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2U7Ci0gICAgZWxzZQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQotICAgIC8vIElmIGNodW5rZWQgZGF0YSwgdGhlbiBjb21wbGV0ZSBvbmx5IGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YQotICAgIGlmICgoKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgfHwgKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRURfV0lUSF9RVU9URVMpICE9IC0xKSkKLSAgICAgICYmICghbW9yZUNodW5rZWREYXRhKSkKLSAgICB7Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgIkhUVFAgaGVhZGVyIGluZGljYXRlcyBjaHVua2VkIGRhdGEgYW5kIHRoZXJlIGlzIG5vIG1vcmUgY2h1bmtlZCBkYXRhIik7Ci0gICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBjb250ZW50IGxlbmd0aAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgPT0gLTEpCi0gICAgewotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gY29udGVudCBsZW5ndGgiKTsKLQotICAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIGNvbXBsZXRlIFBPU1QgaGVhZGVyIHdpdGhvdXQgY29udGVudCBsZW5ndGgKLSAgICAgIGlmIChodHRwSGVhZGVyLnN0YXJ0c1dpdGgoIlBPU1QiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGh0dHBIZWFkZXIuZW5kc1dpdGgoQ1JMRiArIENSTEYpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSBjb250ZW50LWxlbmd0aCBpbiBIVFRQIFBPU1QgaGVhZGVyLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBHRVQsIHNvIHNlZSBpZiB0aGUgdGhlIGNvbXBsZXRlIGhlYWRlciBoYXMgYmVlbiByZWNlaXZlZAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIGh0dHBIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikKLSAgICAgICAgICAmJiAobWVzc2FnZS5sZW5ndGgoKSA9PSBodHRwSGVhZGVyLmxlbmd0aCgpCi0gICAgICAgICAgICAmJiBtZXNzYWdlLmVuZHNXaXRoKENSTEYgKyBDUkxGKSkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgY29udGVudCBsZW5ndGgsIHRoZW4gc2VlIGlmIHRoZSBlbnRpcmUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgIT0gLTEpCi0gICAgewotICAgICAgLy8gRmluZCBlbmQgb2YgY29udGVudCBsZW5ndGggdmFsdWUKLSAgICAgIGluZGV4MiA9IGh0dHBIZWFkZXIuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgIGRlYnVnKCJpc01lc3NhZ2VDb21wbGV0ZSIsICJDUkxGOiAiICsgVXRpbHMudG9IZXhTdHJpbmcoQ1JMRikpOwotICAgICAgZGVidWcoCi0gICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICJodHRwSGVhZGVyL2luZGV4OiAiICsgVXRpbHMudG9IZXhTdHJpbmcoaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXgpKSk7Ci0KLSAgICAgIC8vIEdldCBjb250ZW50IGxlbmd0aAotICAgICAgY29udGVudExlbiA9Ci0gICAgICAgIEludGVnZXIKLSAgICAgICAgICAuZGVjb2RlKAotICAgICAgICAgICAgaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXggKyBDT05URU5UX0xFTkdUSC5sZW5ndGgoKSArIDEsIGluZGV4MikpCi0gICAgICAgICAgLmludFZhbHVlKCk7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgImNvbnRlbnRMZW46ICIgKyBjb250ZW50TGVuKTsKLQotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICAgIGluZGV4ID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgImFjdHVhbCByZWNlaXZlZCBtZXNzYWdlIGxlbmd0aDogIiArIChtZXNzYWdlLmxlbmd0aCgpIC0gKGluZGV4KSkpOwotCi0gICAgICAvLyBJZiBjb250ZW50IGxlbmd0aCBpcyBlcXVhbCB0byBhY3R1YWwgbWVzc2FnZSBjb250ZW50IGxlbmd0aCwgdGhlbiBtZXNzYWdlIGlzIGNvbXBsZXRlCi0gICAgICBpZiAoY29udGVudExlbiA9PSBtZXNzYWdlLmxlbmd0aCgpIC0gaW5kZXgpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKAotICAgICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICAgImNvbnRlbnRMZW4gPSBhY3R1YWwgcmVjZWl2ZWQgbWVzc2FnZSBsZW5ndGguIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWVzc2FnZSBpcyBub3QgY29tcGxldGUKLSAgICBlbHNlCi0gICAgewotICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gREVCVUc6Ci0gICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIm1lc3NhZ2VDb21wbGV0ZTogIiArIG1lc3NhZ2VDb21wbGV0ZSk7Ci0KLSAgICByZXR1cm4gbWVzc2FnZUNvbXBsZXRlOwotICB9Ci0KLSAgLyoqIAotICAgKiBMb2cgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyCi0gICAqLwotICBwcml2YXRlIHZvaWQgbG9nTWVzc2FnZShNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gRGV0ZXJtaW5lIHNlbmRlciBhbmQgcmVjZWl2ZXIgaG9zdC9wb3J0Ci0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCByZWNlaXZlckhvc3RBbmRQb3J0OwotCi0gICAgLy8gUmVxdWVzdAotICAgIGlmIChjb25uZWN0aW9uVHlwZS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPQotICAgICAgICBpblNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBpblNvY2tldC5nZXRQb3J0KCk7Ci0gICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gdGFyZ2V0SG9zdCArICI6IiArIG91dFNvY2tldC5nZXRQb3J0KCk7Ci0gICAgfQotCi0gICAgLy8gUmVzcG9uc2UgICAgICAKLSAgICBlbHNlCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPSB0YXJnZXRIb3N0ICsgIjoiICsgaW5Tb2NrZXQuZ2V0UG9ydCgpOwotICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCA9Ci0gICAgICAgIG91dFNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBvdXRTb2NrZXQuZ2V0UG9ydCgpOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGVudHJ5Ci0gICAgdGhpcy5zb2NrZXRDb25uZWN0aW9uLmxvZ01lc3NhZ2UoCi0gICAgICBjb252ZXJzYXRpb25JRCwKLSAgICAgIHRoaXMuY29ubmVjdGlvblR5cGUsCi0gICAgICBtZXNzYWdlQ29udGV4dC50aW1lc3RhbXAsCi0gICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLAotICAgICAgbWVzc2FnZUNvbnRleHQuYm9tLAotICAgICAgbWVzc2FnZUNvbnRleHQuZW5jb2RpbmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYnlwYXNzTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIGJvb2xlYW4gYnlwYXNzID0gZmFsc2U7Ci0gICAgaWYgKChtZXNzYWdlLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIlRSQUNFIikpCi0gICAgICB8fCAobWVzc2FnZS5zdGFydHNXaXRoKCJERUxFVEUiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIk9QVElPTlMiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIkhFQUQiKSkpCi0gICAgewotICAgICAgYnlwYXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnlwYXNzOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIC8qKgotICAgKiBTZXQgRW5jb2RpbmcgUGFyYW1ldGVycwotICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IFN0cmluZyBvZiBhIEhUVFAgbWVzc2FnZSBmcmFnbWVudC4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgbWVzc2FnZUZyYWdtZW50KQotICB7Ci0gICAgaWYgKG1pbWVDaGFyc2V0ID09IG51bGwgfHwgbWltZUNoYXJzZXQubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IFV0aWxzLmdldEhUVFBDaGFyc2V0KG1lc3NhZ2VGcmFnbWVudCk7Ci0gICAgfQotICAgIGlmICh4bWxFbmNvZGluZyA9PSBudWxsIHx8IHhtbEVuY29kaW5nLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgeG1sRW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhtZXNzYWdlRnJhZ21lbnQpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBFbmNvZGluZyBQYXJhbWV0ZXIKLSAgICogQHJldHVybiBDaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgSFRUUCBtZXNzYWdlLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RW5jb2RpbmcoKQotICB7Ci0gICAgU3RyaW5nIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgIGlmIChtaW1lQ2hhcnNldCAhPSBudWxsICYmIG1pbWVDaGFyc2V0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBlbmNvZGluZyA9IG1pbWVDaGFyc2V0OwotICAgIH0KLSAgICBpZiAoeG1sRW5jb2RpbmcgIT0gbnVsbCAmJiB4bWxFbmNvZGluZy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgZW5jb2RpbmcgPSB4bWxFbmNvZGluZzsKLSAgICB9Ci0gICAgcmV0dXJuIGVuY29kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgQnl0ZSBPcmRlciBNYXJrIGZyb20gdGhlIG1lc3NhZ2UgKGlmIHRoZXJlIGlzIG9uZSkuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRCT00oYnl0ZVtdIG1lc3NhZ2UpCi0gIHsKLSAgICBpbnQgYm9tID0gMDsKLQotICAgIGJ5dGUgRkYgPSAoYnl0ZSkgMHhGRjsKLSAgICBieXRlIEZFID0gKGJ5dGUpIDB4RkU7Ci0gICAgYnl0ZSBFRiA9IChieXRlKSAweEVGOwotICAgIGJ5dGUgQkIgPSAoYnl0ZSkgMHhCQjsKLSAgICBieXRlIEJGID0gKGJ5dGUpIDB4QkY7Ci0KLSAgICAvLyBTZWFyY2ggdGhyb3VnaCB0aGUgYnl0ZSBhcnJheSBmb3IgQ1JMRitDUkxGLiAgVGhpcyB3aWxsIG1hcmsgdGhlIGVuZCBvZiB0aGUgaGVhZGVyLgotICAgIGludCBpID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlLCAwKTsKLSAgICBpZiAoaSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAiZ2V0Qk9NIiwKLSAgICAgICAgIm1lc3NhZ2VbaV06ICIKLSAgICAgICAgICArIG1lc3NhZ2VbaV0KLSAgICAgICAgICArICIsIG1lc3NhZ2VbaSsxXTogIgotICAgICAgICAgICsgbWVzc2FnZVtpKzFdKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIFVURi04IEJPTQotICAgICAgaWYgKCgoaSArIDIpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICYmIG1lc3NhZ2VbaV0gPT0gRUYKLSAgICAgICAgJiYgbWVzc2FnZVtpKzFdID09IEJCCi0gICAgICAgICYmIG1lc3NhZ2VbaSsyXSA9PSBCRikKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhFRkJCQkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGJpZy1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRQotICAgICAgICAgICYmIG1lc3NhZ2VbaSArIDFdID09IEZGKQotICAgICAgewotICAgICAgICBib20gPSAweEZFRkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGxpdHRsZS1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRgotICAgICAgICAgICYmIG1lc3NhZ2VbaSsxXSA9PSBGRSkKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhGRkZFOwotICAgICAgfQotICAgICAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBCT01zCi0gICAgfQotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSByZWFkIGlzIHN0aWxsIHdhaXRpbmcgZm9yIGRhdGEuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFdhaXRpbmcoKQotICB7Ci0gICAgYm9vbGVhbiByZWFkV2FpdGluZyA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzUmVhZFdhaXRpbmciLAotICAgICAgICAiaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKTogIgotICAgICAgICAgICsgaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKSk7Ci0KLSAgICAgIGlmIChpblNvY2tldC5nZXRJbnB1dFN0cmVhbSgpLmF2YWlsYWJsZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJlYWRXYWl0aW5nID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVhZFdhaXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlYWQgdGltZWQgb3V0IGZsYWcuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFRpbWVkT3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlYWRUaW1lZE91dDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXNzYWdlIGNvbnRleHQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBjbGFzcyBNZXNzYWdlQ29udGV4dAotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXI7Ci0gICAgQ2h1bmtlZERhdGEgY2h1bmtlZERhdGE7Ci0gICAgU3RyaW5nIHRpbWVzdGFtcDsKLSAgICBpbnQgYm9tOwotICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBuZXcgbWVzc2FnZSBjb250ZXh0LgotICAgICAqLwotICAgIE1lc3NhZ2VDb250ZXh0KCkKLSAgICB7Ci0gICAgICBtZXNzYWdlQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEoKTsKLSAgICAgIHRpbWVzdGFtcCA9IG51bGw7Ci0gICAgICBib20gPSAwOwotICAgICAgZW5jb2RpbmcgPSBXU0lDb25zdGFudHMuREVGQVVMVF9YTUxfRU5DT0RJTkc7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZTRhZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvQ29tbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBtb25pdG9yIGNvbmZpZyBDb21tZW50IGVsZW1lbnQuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tZW50IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGNvbW1lbnQgdGV4dC4KLSAgICogQHJldHVybiBjb21tZW50IHRleHQuCi0gICAqIEBzZWUgI3NldFRleHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29tbWVudCB0ZXh0LgotICAgKiBAcGFyYW0gdGV4dCB0aGUgY29tbWVudCB0ZXh0LgotICAgKiBAc2VlICNnZXRUZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9NYW5JblRoZU1pZGRsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWMwYWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hbkluVGhlTWlkZGxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9NQU5fSU5fVEhFX01JRERMRTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjb21tZW50LgotICAgKiBAcmV0dXJuIGNvbW1lbnQuCi0gICAqIEBzZWUgI3NldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbW1lbnQuCi0gICAqIEBwYXJhbSBjb21tZW50IHRoZSBDb21tZW50IG9iamVjdC4KLSAgICogQHNlZSAjZ2V0Q29tbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVkaXJlY3RzLgotICAgKiBAcmV0dXJuIHRoZSByZWRpcmlyZWN0cy4KLSAgICogQHNlZSAjc2V0UmVkaXJlY3RMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFJlZGlyZWN0TGlzdCgpOwotCi0gIC8qKgotICAgKiBBZGQgcmVkaXJlY3QuCi0gICAqIEBwYXJhbSByZWRpcmVjdCB0aGUgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUmVkaXJlY3QoUmVkaXJlY3QgcmVkaXJlY3QpOwotCi0gIC8qKgotICAgKiBTZXQgcmVkaXJlY3RzLgotICAgKiBAcGFyYW0gcmVkaXJlY3RMaXN0IGEgbGlzdCBvZiB0aGUgcmVkaXJlY3RzLgotICAgKiBAc2VlICNnZXRSZWRpcmVjdExpc3QgCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWRpcmVjdExpc3QoVmVjdG9yIHJlZGlyZWN0TGlzdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZGYxZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvTW9uaXRvckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgbE1lc3NhZ2VMaXN0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnQgb2JqZWN0LgotICAgKiBAc2VlICNnZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gbG9nVVJJIGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRMb2dMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nTG9jYXRpb24oU3RyaW5nIGxvZ1VSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBsYWNlIGxvZy4KLSAgICogQHJldHVybiByZXBsYWNlIGxvZy4KLSAgICogQHNlZSAjc2V0UmVwbGFjZUxvZwotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmVwbGFjZUxvZygpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwbGFjZSBsb2cuCi0gICAqIEBwYXJhbSByZXBsYWNlTG9nIGEgcmVwbGFjZSBsb2cuCi0gICAqIEBzZWUgI2dldFJlcGxhY2VMb2cKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcGxhY2VMb2coYm9vbGVhbiByZXBsYWNlTG9nKTsKLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHJldHVybiBhZGQgc3R5bGUgc2hlZXQuCi0gICAqIEBzZWUgI3NldEFkZFN0eWxlU2hlZXQKLSAgICovCi0gIHB1YmxpYyBBZGRTdHlsZVNoZWV0IGdldEFkZFN0eWxlU2hlZXQoKTsKLQotICAvKioKLSAgICogU2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNnZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZHVyYXRpb24uCi0gICAqIEByZXR1cm4gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNzZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgbG9nIGR1cmF0aW9uLgotICAgKiBAcGFyYW0gbG9nRHVyYXRpb24gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNnZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKTsKLQotICAvKioKLSAgICogR2V0IHRpbWVvdXQuCi0gICAqIEByZXR1cm4gdGltZW91dC4KLSAgICogQHNlZSAjc2V0VGltZW91dAotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lb3V0LgotICAgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0LgotICAgKiBAc2VlICNnZXRUaW1lb3V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KTsKLQotICAvKioKLSAgICogR2V0IG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIE1hbkluVGhlTWlkZGxlIGdldE1hbkluVGhlTWlkZGxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtYW4taW4tdGhlLW1pZGRsZSBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIG1hbkluVGhlTWlkZGxlIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNnZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHZlcmJvc2Ugb3B0aW9uLgotICAgKiBAcGFyYW0gdmVyYm9zZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpOwotCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHBhcnNpbmcgdGhlIAotICAgKiAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncykgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmYmQwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlcgotewotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBtb25pdG9yQ29uZmlnVVJJIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIGEgTW9uaXRvckNvbmZpZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgd2hpbGUgcmVhZGluZyBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogUmVhZCB0aGUgbW9uaXRvciBjb25maWcgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBNb25pdG9yQ29uZmlnIG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSByZWFkaW5nIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL1JlZGlyZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzA4MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIG1vbml0b3IgY29uZmlnIFJlZGlyZWN0IGVsZW1lbnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWRpcmVjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnRvYmplY3QuCi0gICAqIEBzZWUgI2dldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1lbnQoQ29tbWVudCBjb21tZW50KTsKLQotICAvKioKLSAgICogR2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcmV0dXJuIGxpc3RlbiBwb3J0LgotICAgKiBAc2VlICNzZXRMaXN0ZW5Qb3J0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldExpc3RlblBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcGFyYW0gbGlzdGVuUG9ydCBsaXN0ZW4gcG9ydC4KLSAgICogQHNlZSAjZ2V0TGlzdGVuUG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCk7Ci0KLSAgLyoqCi0gICAqIEdldCBob3N0LgotICAgKiBAcmV0dXJuIGhvc3QuCi0gICAqIEBzZWUgI3NldEhvc3QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpOwotCi0gIC8qKgotICAgKiBTZXQgaG9zdC4KLSAgICogQHBhcmFtIGhvc3QgIGhvc3QuCi0gICAqIEBzZWUgI2dldEhvc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhvc3QoU3RyaW5nIGhvc3QpOwotCi0gIC8qKgotICAgKiBHZXQgc2VuZCB0byBwb3J0LgotICAgKiBAcmV0dXJuIHNlbmQgdG8gcG9ydC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0VG9Qb3J0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZW5kIHRvIGhvc3QuCi0gICAqIEByZXR1cm4gc2VuZCB0byBob3N0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUb0hvc3QoKTsKLQotICAvKioKLSAgICogR2V0IHNlbmQgdG8gcHJvdG9jb2wuCi0gICAqIEByZXR1cm4gc2VuZCB0byBwcm90b2NvbC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpOwotCi0gIC8qKgotICAgKiBHZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHJldHVybiBtYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKiBAc2VlICNzZXRNYXhDb25uZWN0aW9ucwotICAgKi8KLSAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpOwotCi0gIC8qKgotICAgKiBTZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHBhcmFtIG1heENvbm5lY3Rpb25zIG1heGltdW0gY29ubmVjdGlvbnMuCi0gICAqIEBzZWUgI2dldE1heENvbm5lY3Rpb25zCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpOwotCi0gIC8qKgotICAgKiBHZXQgcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEByZXR1cm4gcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEBzZWUgI3NldFJlYWRUaW1lb3V0U2Vjb25kcwotICAgKi8KLSAgcHVibGljIGludCBnZXRSZWFkVGltZW91dFNlY29uZHMoKTsKLQotICAvKioKLSAgICogU2V0IHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAc2VlICNnZXRSZWFkVGltZW91dFNlY29uZHMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQgcmVhZFRpbWVvdXRTZWNvbmRzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjMDliNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL0NvbW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIG1vbml0b3IgY29uZmlnIENvbW1lbnQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50SW1wbCBpbXBsZW1lbnRzIENvbW1lbnQKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQgdGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGV4dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Db21tZW50I2dldFRleHQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLkNvbW1lbnQjc2V0VGV4dChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KQotICB7Ci0gICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgLy9wdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiB4bWxucz1cIiIgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRyArICJcIj4iKTsgICAgCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy50ZXh0KTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gdGV4dDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9NYW5JblRoZU1pZGRsZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4ZmE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWFuSW5UaGVNaWRkbGVJbXBsIGltcGxlbWVudHMgTWFuSW5UaGVNaWRkbGUKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBSZWRpcmVjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciByZWRpcmVjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRDb21tZW50KCkKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29tbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRSZWRpcmVjdExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRSZWRpcmVjdExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjYWRkUmVkaXJlY3QoUmVkaXJlY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSZWRpcmVjdChSZWRpcmVjdCByZWRpcmVjdCkKLSAgewotICAgIHJlZGlyZWN0TGlzdC5hZGQocmVkaXJlY3QpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNzZXRSZWRpcmVjdExpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVkaXJlY3RMaXN0KFZlY3RvciByZWRpcmVjdExpc3QpCi0gIHsKLSAgICB0aGlzLnJlZGlyZWN0TGlzdCA9IHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgbWFuLWluLXRoZS1taWRkbGUgY29tbWVudCAuLi4gIiArIHRoaXMuY29tbWVudCk7Ci0KLSAgICAvLyBSZWRpcmVjdCBsaXN0Ci0gICAgaW50IGNvdW50ID0gMTsKLSAgICBSZWRpcmVjdCByZWRpcmVjdDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHJlZGlyZWN0TGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QgZWxlbWVudAotICAgICAgcmVkaXJlY3QgPSAoUmVkaXJlY3QpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHB3LnByaW50bG4oIiAgcmVkaXJlY3QgWyIgKyBjb3VudCsrICsiXSIpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gQ29tbWVudAotICAgIGlmICh0aGlzLmNvbW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludGxuKHRoaXMuY29tbWVudC50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBSZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVkaXJlY3RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbmV4dCByZWRpcmVjdCBlbGVtZW50Ci0gICAgICByZWRpcmVjdCA9IChSZWRpcmVjdCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODY5NjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvTW9uaXRvckNvbmZpZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5Nb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTW9uaXRvckNvbmZpZ0ltcGwgaW1wbGVtZW50cyBNb25pdG9yQ29uZmlnCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkk7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2UgbG9nIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHJlcGxhY2VMb2cgPSBmYWxzZTsKLQotICAvKioKLSAgICogU3R5bGUgc2hlZXQgZGVjbGFyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBMb2cgZHVyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGxvZ0R1cmF0aW9uID0gNjAwOwotCi0gIC8qKgotICAgKiBUaW1lb3V0LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCB0aW1lb3V0ID0gMzsKLQotICAvKioKLSAgICogTWFuLWluLXRoZS1taWRkbGUgc2V0dGluZ3MuCi0gICAqLwotICBwcm90ZWN0ZWQgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0Q29tbWVudCgpCi0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldExvZ0xvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubG9nVVJJOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldExvZ0xvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRSZXBsYWNlTG9nKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VMb2coKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwbGFjZUxvZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRSZXBsYWNlTG9nKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlTG9nKGJvb2xlYW4gcmVwbGFjZUxvZykKLSAgewotICAgIHRoaXMucmVwbGFjZUxvZyA9IHJlcGxhY2VMb2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0QWRkU3R5bGVTaGVldCgpCi0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0QWRkU3R5bGVTaGVldChvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCkKLSAgewotICAgIHRoaXMuYWRkU3R5bGVTaGVldCA9IGFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0TG9nRHVyYXRpb24oKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9nRHVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0TG9nRHVyYXRpb24oaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKQotICB7Ci0gICAgdGhpcy5sb2dEdXJhdGlvbiA9IGxvZ0R1cmF0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldFRpbWVvdXQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVvdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0VGltZW91dChpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KQotICB7Ci0gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRNYW5JblRoZU1pZGRsZSgpCi0gICAqLwotICBwdWJsaWMgTWFuSW5UaGVNaWRkbGUgZ2V0TWFuSW5UaGVNaWRkbGUoKQotICB7Ci0gICAgcmV0dXJuIG1hbkluVGhlTWlkZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldE1hbkluVGhlTWlkZGxlKE1hbkluVGhlTWlkZGxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpCi0gIHsKLSAgICB0aGlzLm1hbkluVGhlTWlkZGxlID0gbWFuSW5UaGVNaWRkbGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRWZXJib3NlT3B0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudmVyYm9zZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4gdmVyYm9zZSkKLSAgewotICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KGNvbW1lbnQudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gTG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0dfRklMRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSArICI9XCIiICsgdGhpcy5yZXBsYWNlTG9nICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04gKyAiPVwiIiArIHRoaXMubG9nVVJJICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIExvZyBkdXJhdGlvbgotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0RVUkFUSU9OICsgIj4iKTsKLQotICAgIC8vIFRpbWVvdXQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLSAgICBwdy5wcmludCh0aGlzLnRpbWVvdXQpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLQotICAgIC8vIE1hbi1pbi10aGUtbWlkZGxlCi0gICAgaWYgKHRoaXMubWFuSW5UaGVNaWRkbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChtYW5JblRoZU1pZGRsZS50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuY29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgIHB3LnByaW50bG4oIiAgcmVwbGFjZUxvZyAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwbGFjZUxvZyk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dEdXJhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiICB0aW1lb3V0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy50aW1lb3V0KTsKLQotICAgIC8vIGFkZFN0eWxlU2hlZXQKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKAotICAgICAgICAiICBhZGRTdHlsZVNoZWV0IC4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LnRvU3RyaW5nKCkpOwotCi0gICAgLy8gTWFuLWluLXRoZS1taWRkbGUKLSAgICBpZiAodGhpcy5tYW5JblRoZU1pZGRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMubWFuSW5UaGVNaWRkbGUudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIG1vbml0b3IgY29uZmlnIG9iamVjdC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRDb25maWcoTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnKQotICB7Ci0gICAgLy8gQUREOiBTaG91bGQgdGhpcyBiZSBhIGNsb25lIG9wZXJhdGlvbj8KLSAgICB0aGlzLmNvbW1lbnQgPSBtb25pdG9yQ29uZmlnLmdldENvbW1lbnQoKTsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMubG9nVVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZUxvZyA9IG1vbml0b3JDb25maWcuZ2V0UmVwbGFjZUxvZygpOwotICAgIHRoaXMubG9nRHVyYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0R1cmF0aW9uKCk7Ci0gICAgdGhpcy50aW1lb3V0ID0gbW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCk7Ci0gICAgdGhpcy5tYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKTsKLSAgICB0aGlzLnZlcmJvc2UgPSBtb25pdG9yQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBWZXJpZnkgY29uZmlnIG9wdGlvbnMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Q29uZmlnKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gcmVkaXJlY3Qgc3RhdGVtZW50cywgdGhlbiBleGl0Ci0gICAgaWYgKCh0aGlzLm1hbkluVGhlTWlkZGxlID09IG51bGwpCi0gICAgICB8fCAodGhpcy5tYW5JblRoZU1pZGRsZS5nZXRSZWRpcmVjdExpc3QoKSA9PSBudWxsKQotICAgICAgfHwgKHRoaXMubWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA1IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gYW55IHJlZGlyZWN0IHN0YXRlbWVudHMuIikpOwotICAgIH0KLQotICAgIGlmICh0aGlzLmxvZ1VSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gdGhlIGxvZyBmaWxlIFVSSS4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VBcmdzKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBuZXcgY29uZmlnIHJlYWRlcgotICAgIE1vbml0b3JDb25maWdSZWFkZXIgbW9uaXRvckNvbmZpZ1JlYWRlciA9IG5ldyBNb25pdG9yQ29uZmlnUmVhZGVySW1wbCgpOwotCi0gICAgLy8gTW9uaXRvciBjb25maWcgb2JqZWN0IHdoaWNoIHdpbGwgYmUgbWVyZ2VkIGFmdGVyIGFsbCBvZiB0aGUgaW5wdXQgcGFybXMgYXJlIHByb2Nlc3NlZAotICAgIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIElmIG5vIGlucHV0IGFyZ3VtZW50cywgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IAotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgidXNhZ2UwMSIsIE1vbml0b3IuVVNBR0VfTUVTU0FHRSkpOwotICAgIH0KLQotICAgIC8vIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGxvY2F0ZSB0aGUgY29uZmlnIGZpbGUgb3B0aW9uIChpZiBpdCB3YXMgc3BlY2lmaWVkKQotICAgIGZvciAoaW50IGFyZ0NvdW50ID0gMDsgYXJnQ291bnQgPCBhcmdzLmxlbmd0aDsgYXJnQ291bnQrKykKLSAgICB7Ci0gICAgICAvLyAtY29uZmlnRmlsZQotICAgICAgaWYgKChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29uZmlnIikpCi0gICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1jIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3MgPQotICAgICAgICAgIG1vbml0b3JDb25maWdSZWFkZXIucmVhZE1vbml0b3JDb25maWcoYXJnc1thcmdDb3VudF0pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGNvbmZpZyBmaWxlIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhbmFseXplciBjb25maWcgb2JqZWN0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncyA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncyA9IG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWdGaWxlCi0gICAgICBpZiAoKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWMiKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNraXAgdGhpcyBvcHRpb24gc2luY2UgaXQgd2FzIGFscmVhZHkgcHJvY2Vzc2VkCi0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb21tZW50Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb21tZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoYXJnc1thcmdDb3VudF0pOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gLWxvZ0ZpbGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWxvZ0ZpbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0xvY2F0aW9uKGFyZ3NbYXJnQ291bnRdKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXJlcGxhY2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXJlcGxhY2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItciIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFJlcGxhY2VMb2coCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGFyZ3NbYXJnQ291bnRdKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dEdXJhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbG9nRHVyYXRpb24iKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItZCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0R1cmF0aW9uKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC10aW1lb3V0Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10aW1lb3V0IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLXQiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncy5zZXRUaW1lb3V0KAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tYW5JblRoZU1pZGRsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbWFuSW5UaGVNaWRkbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbSIpKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gICAgICAgIC8vIEluY3JlbWVudCBhcmcgY291bnQKLSAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICAvLyBHZXQgdGhlIG1hbi1pbi10aGUtbWlkZGxlIG9iamVjdAotICAgICAgICBpZiAoKG1hbkluVGhlTWlkZGxlID0gbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmdldE1hbkluVGhlTWlkZGxlKCkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLQotICAgICAgICAvLyBBREQ6IENoZWNrIGZvciBjb3JyZWN0IG51bWJlciBvZiByZW1haW5pbmcgYXJncwotCi0gICAgICAgIC8vIENyZWF0ZSByZWRpcmVjdAotICAgICAgICBSZWRpcmVjdCByZWRpcmVjdCA9IG5ldyBSZWRpcmVjdEltcGwoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIHJlZGlyZWN0IHZhbHVlcyAKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChJbnRlZ2VyLnZhbHVlT2YoYXJnc1thcmdDb3VudCsrXSkuaW50VmFsdWUoKSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldEhvc3QoYXJnc1thcmdDb3VudCsrXSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldE1heENvbm5lY3Rpb25zKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLQotICAgICAgICAvLyBBZGQgcmVkaXJlY3QKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuYWRkUmVkaXJlY3QocmVkaXJlY3QpOwotCi0gICAgICAgIC8vIFNldCB0aGUgbWFuLWluLXRoZS1taWRkbGUKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldE1hbkluVGhlTWlkZGxlKG1hbkluVGhlTWlkZGxlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgLy9tb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0VmVyYm9zZU9wdGlvbihCb29sZWFuLnZhbHVlT2YoYXJnc1thcmdDb3VudF0pLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFZlcmJvc2VPcHRpb24odHJ1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1HVUkKLSAgICAgIGVsc2UgaWYgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1HVUkiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIC1HVUkgb3B0aW9uCi0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzAxIiwKLSAgICAgICAgICAgIGFyZ3NbYXJnQ291bnRdLAotICAgICAgICAgICAgIlRoZSBzcGVjaWZpZWQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIikpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGFkZFN0eWxlU2hlZXQgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIGEgY29tbWVudCB2ZXJzaW9uIG9mIGl0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncy5nZXRBZGRTdHlsZVNoZWV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZihXU0lDb25zdGFudHMuREVGQVVMVF9MT0dfWFNMKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0VHlwZShXU0lDb25zdGFudHMuREVGQVVMVF9YU0xfVFlQRSk7Ci0gICAgICBhZGRTdHlsZVNoZWV0LnNldENvbW1lbnQodHJ1ZSk7Ci0gICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKG1vbml0b3JDb25maWdGcm9tQXJncyk7Ci0KLSAgICAvLyBWZXJpZnkgY29uZmlnIG9wdGlvbnMKLSAgICB2ZXJpZnlDb25maWcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YSArICIuIjsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNGFiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byByZWFkIHRoZSBtb25pdG9yIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1vbml0b3JDb25maWdSZWFkZXJJbXBsIGltcGxlbWVudHMgTW9uaXRvckNvbmZpZ1JlYWRlcgotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXIjcmVhZE1vbml0b3JDb25maWcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihtb25pdG9yQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgiY29uZmlnMDIiLCBtb25pdG9yQ29uZmlnVVJJLCAiQ291bGQgbm90IGZpbmQgZmlsZToiKSwKLSAgICAgICAgZm5mZSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoImNvbmZpZzAzIiwgbW9uaXRvckNvbmZpZ1VSSSwgIkNvdWxkIG5vdCByZWFkIGZpbGU6IiksCi0gICAgICAgIGUpOwotICAgIH0KLQotICAgIHJldHVybiByZWFkTW9uaXRvckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlciNyZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIpCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcgPSBuZXcgTW9uaXRvckNvbmZpZ0ltcGwoKTsKLQotICAgIC8vIFBhcnNlIFhNTAotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlYWRlcik7Ci0KLSAgICAvLyBQYXJzZSBlbGVtZW50cyBpbiB0aGUgY29uZmlnIGRvY3VtZW50Ci0gICAgcGFyc2VDb25maWdFbGVtZW50KG1vbml0b3JDb25maWcsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0KLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudFVSSSA9IGRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGNvbmZpZyBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29uZmlnRWxlbWVudChNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6IFZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgYm9vbGVhbiBpc0xvZ0R1cmF0aW9uRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc0NsZWFudXBUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgdGhlIGxvZyBlbGVtZW50Ci0gICAgICAgIHBhcnNlTG9nRmlsZUVsZW1lbnQobW9uaXRvckNvbmZpZywgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRHVyYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTikpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaWYgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSA8IDApCi0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAgICJjb25maWcwOSIsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNMb2dEdXJhdGlvbkRlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUykpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpZiAobW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCkgPCAwKQotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgICAiY29uZmlnMDkiLAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNDbGVhbnVwVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8bWFuSW5UaGVNaWRkbGU+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX01BTl9JTl9USEVfTUlERExFKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBuZXcgTWFuSW5UaGVNaWRkbGVJbXBsKCk7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotICAgICAgICBwYXJzZU1hbkluVGhlTWlkZGxlRWxlbWVudChtYW5JblRoZU1pZGRsZSwgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBoYW5kbGUgaW52YWxpZCBlbGVtZW50cwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzTG9nRHVyYXRpb25EZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgICBpZiAoIWlzQ2xlYW51cFRpbWVvdXRTZWNvbmRzRGVmaW5lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBsb2dGaWxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VMb2dGaWxlRWxlbWVudCgKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgbG9jYXRpb24gYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRMb2dMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlcGxhY2UgYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRSZXBsYWNlTG9nKAotICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1JFUExBQ0UsIGZhbHNlKSk7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX0xPR19YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgbW9uaXRvckNvbmZpZy5zZXRBZGRTdHlsZVNoZWV0KGFkZFN0eWxlU2hlZXQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIG1hbkludGhlTWlkZGxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VNYW5JblRoZU1pZGRsZUVsZW1lbnQoCi0gICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDxyZWRpcmVjdD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFRElSRUNUKSkKLSAgICAgIHsKLSAgICAgICAgUmVkaXJlY3QgcmVkaXJlY3QgPSBuZXcgUmVkaXJlY3RJbXBsKCk7Ci0gICAgICAgIG1hbkluVGhlTWlkZGxlLmFkZFJlZGlyZWN0KHJlZGlyZWN0KTsKLSAgICAgICAgcGFyc2VSZWRpcmVjdEVsZW1lbnQocmVkaXJlY3QsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPGNvbW1lbnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpKQotICAgICAgewotICAgICAgICBDb21tZW50IGNvbW1lbnQgPSBuZXcgQ29tbWVudEltcGwoKTsKLSAgICAgICAgY29tbWVudC5zZXRUZXh0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBBREQ6IGhhbmRsZSBpbnZhbGlkIGVsZW1lbnRzCi0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSByZWRpcmVjdCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVkaXJlY3RFbGVtZW50KFJlZGlyZWN0IHJlZGlyZWN0LCBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIGJvb2xlYW4gaXNMaXN0ZW5Qb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1NjaGVtZUFuZEhvc3RQb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc01heENvbm5lY3Rpb25zRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1JlYWRUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bGlzdGVuUG9ydD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JUKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpc0xpc3RlblBvcnREZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8c2NoZW1lQW5kSG9zdFBvcnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQpKQotICAgICAgewotICAgICAgICByZWRpcmVjdC5zZXRIb3N0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtYXhDb25uZWN0aW9ucz4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TWF4Q29ubmVjdGlvbnMoZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNNYXhDb25uZWN0aW9uc0RlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZWFkVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKGdldEludFZhbHVlKG5leHRFbGVtZW50KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMsCi0gICAgICAgICAgICAgICJQYXJhbWV0ZXIgdmFsdWUgY2FuJ3QgYmUgbmVnYXRpdmUuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICByZWRpcmVjdC5zZXRDb21tZW50KGNvbW1lbnQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xpc3RlblBvcnREZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JULAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fU0NIRU1FX0FORF9IT1NUUE9SVCwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotCi0gICAgfQotICAgIGlmICghaXNNYXhDb25uZWN0aW9uc0RlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIG5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIGlzRWxlbWVudCgKLSAgICAgIGVsZW1lbnQsCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywKLSAgICAgIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgU3RyaW5nIG5hbWVzcGFjZSwKLSAgICBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIFhNTFV0aWxzLmlzRWxlbWVudChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVsZW1lbnQgdGV4dCBhcyBhbiBpbnQuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRJbnRWYWx1ZShFbGVtZW50IGVsZW1lbnQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGludCByZXR1cm5WYWx1ZTsKLSAgICBTdHJpbmcgaW50VmFsdWUgPSBudWxsOwotCi0gICAgLy8gR2V0IHZhbHVlIGFzIGEgc3RyaW5nCi0gICAgaWYgKChpbnRWYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDQiLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkgKyAiRWxlbWVudCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlciB2YWx1ZToiKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblZhbHVlID0gSW50ZWdlci52YWx1ZU9mKGludFZhbHVlKS5pbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnQKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvUmVkaXJlY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDE2OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci0KLS8qKgotICogIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgbW9uaXRvciBjb25maWcgUmVkaXJlY3QgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVkaXJlY3RJbXBsIGltcGxlbWVudHMgUmVkaXJlY3QKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBMaXN0ZW4gcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgbGlzdGVuUG9ydDsKLQotICAvKioKLSAgICogSG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaG9zdDsKLQotICAvKioKLSAgICogVG8gcHJvdG9jb2wuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRvUHJvdG9jb2w7Ci0KLSAgLyoqCi0gICAqIFRvIHBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHRvUG9ydDsKLQotICAvKioKLSAgICogVG8gaG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdG9Ib3N0OwotCi0gIC8qKgotICAgKiBNYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtYXhDb25uZWN0aW9uczsKLQotICAvKioKLSAgICogUmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldENvbW1lbnQoKQotICAgKi8KLSAgcHVibGljIENvbW1lbnQgZ2V0Q29tbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRDb21tZW50KGNvbW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCkKLSAgewotICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldExpc3RlblBvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMaXN0ZW5Qb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldExpc3RlblBvcnQoaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCkKLSAgewotICAgIHRoaXMubGlzdGVuUG9ydCA9IGxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldEhvc3QoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIb3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmhvc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldEhvc3QoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SG9zdChTdHJpbmcgaG9zdCkKLSAgewotICAgIHRoaXMuaG9zdCA9IGhvc3Q7Ci0KLSAgICAvLyBQYXJzZSBsb2NhdGlvbiB0byBnZXQgcHJvdG9jb2wsIGhvc3QgYW5kIHBvcnQKLSAgICBVUkwgdXJsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHVybCA9IG5ldyBVUkwoaG9zdCk7Ci0gICAgICB0aGlzLnRvUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgIHRoaXMudG9Ib3N0ID0gdXJsLmdldEhvc3QoKTsKLSAgICAgIHRoaXMudG9Qb3J0ID0gdXJsLmdldFBvcnQoKTsKLSAgICAgIGlmICh0aGlzLnRvUG9ydCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRoaXMudG9Qcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwIikpCi0gICAgICAgICAgdGhpcy50b1BvcnQgPSA4MDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRoaXMudG9Qb3J0ID0gODA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlOiAiCi0gICAgICAgICAgKyBob3N0KTsKLSAgICB9Ci0KLSAgICBpZiAoKHVybC5nZXRQYXRoKCkgIT0gbnVsbCAmJiAhdXJsLmdldFBhdGgoKS5lcXVhbHMoIiIpKQotICAgICAgfHwgKHVybC5nZXRRdWVyeSgpICE9IG51bGwgJiYgIXVybC5nZXRRdWVyeSgpLmVxdWFscygiIikpKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBtdXN0IGNvbnRhaW4gb25seSBhIHNjaGVtZSwgaG9zdCBhbmQgcG9ydDogIgotICAgICAgICAgICsgaG9zdCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRvIHBvcnQuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1BvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUb1BvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudG9Qb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0byBob3N0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kubW9uaXRvci5jb25maWcuUmVkaXJlY3QjZ2V0VG9Ib3N0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Ib3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRvSG9zdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdG8gcHJvdG9jb2wuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1Byb3RvY29sKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b1Byb3RvY29sOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRNYXhDb25uZWN0aW9ucygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1heENvbm5lY3Rpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRNYXhDb25uZWN0aW9ucyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpCi0gIHsKLSAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gbWF4Q29ubmVjdGlvbnM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZWFkVGltZW91dFNlY29uZHM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWFkVGltZW91dFNlY29uZHMoaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMucmVhZFRpbWVvdXRTZWNvbmRzID0gcmVhZFRpbWVvdXRTZWNvbmRzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmNvbW1lbnQpOwotICAgIHB3LnByaW50bG4oIiAgICBsaXN0ZW5Qb3J0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMubGlzdGVuUG9ydCk7Ci0gICAgcHcucHJpbnRsbigiICAgIGhvc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgY3V0SG9zdCh0aGlzLmhvc3QpKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWF4Q29ubmVjdGlvbnMgLi4uLi4uLi4uLi4uICIgKyB0aGlzLm1heENvbm5lY3Rpb25zKTsKLSAgICBwdy5wcmludGxuKCIgICAgcmVhZFRpbWVvdXRTZWNvbmRzIC4uLi4uLi4uICIgKyB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBGb3JtYXRzIGhvc3QgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gKHBhdGggaXMgb21taXRlZCkuCi0gICAqIEBwYXJhbSBob3N0Ci0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGN1dEhvc3QoU3RyaW5nIGhvc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbmV3IFVSTChob3N0KTsKLSAgICAgIFN0cmluZyBwb3J0ID0gdXJsLmdldFBvcnQoKSA+IC0xID8gU3RyaW5nLnZhbHVlT2YodXJsLmdldFBvcnQoKSkgOiAiODAiOwotICAgICAgLy8gUkVNT1ZFRDogVGhpcyBjb2RlIG9ubHkgd29ya3Mgb24gMS40Ci0gICAgICAvLyBTdHJpbmcudmFsdWVPZih1cmwuZ2V0RGVmYXVsdFBvcnQoKSk7Ci0gICAgICByZXR1cm4gdXJsLmdldFByb3RvY29sKCkgKyAiOi8vIiArIHVybC5nZXRIb3N0KCkgKyAiOiIgKyBwb3J0OwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGhvc3Q7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4odGhpcy5jb21tZW50LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIGxpc3RlblBvcnQKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotICAgIHB3LnByaW50KGdldExpc3RlblBvcnQoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotCi0gICAgLy8gc2NoZW1lQW5kSG9zdFBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUICsgIj4iKTsKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldEhvc3QoKSkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQgKyAiPiIpOwotCi0gICAgLy8gbWF4Q29ubmVjdGlvbnMKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRNYXhDb25uZWN0aW9ucygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NQVhfQ09OTkVDVElPTlMgKyAiPiIpOwotCi0gICAgLy8gcmVhZFRpbWVvdXRTZWNvbmRzCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFJlYWRUaW1lb3V0U2Vjb25kcygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRUFEX1RJTUVPVVRfU0VDT05EUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgRWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1QgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9FbnRyeVR5cGVMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4ZDEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGEgcHJvZmlsZSBFbnRyeVR5cGVMaXN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5VHlwZUxpc3QgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIExvZyBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19JTlBVVF9OT05FID0gIm5vbmUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfSU5QVVRfUkVRVUVTVCA9ICJyZXF1ZXN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX0lOUFVUX1JFU1BPTlNFID0gInJlc3BvbnNlIjsKLQotICAvKioKLSAgICogV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogVURESSBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVERElfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogR2V0IGxvZyBpbnB1dC4KLSAgICogQHJldHVybiBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI3NldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsb2cgaW5wdXQuCi0gICAqIEBwYXJhbSBsb2dJbnB1dCBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI2dldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dJbnB1dChTdHJpbmcgbG9nSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBpbnB1dC4KLSAgICogQHJldHVybiBXU0RMIGlucHV0LgotICAgKiBAc2VlICNzZXRXU0RMSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETElucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGlucHV0LgotICAgKiBAcGFyYW0gd3NkbElucHV0IFdTREwgaW5wdXQuCi0gICAqIEBzZWUgI2dldFdTRExJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnB1dC4KLSAgICogQHJldHVybiBVRERJIGlucHV0LgotICAgKiBAc2VlICNzZXRVRERJSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VURESUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIGlucHV0LgotICAgKiBAcGFyYW0gdWRkaUlucHV0IFVEREkgaW5wdXQuCi0gICAqIEBzZWUgI2dldFVERElJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMyNmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWFpbnRhaW4gUHJvZmlsZSBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGVBcnRpZmFjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTM0ZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBBbiBhcnRpZmFjdCBjb250YWlucyBhIHNldCBvZiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgdHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBzcGVjaWZpY2F0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNzZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRTcGVjaWZpY2F0aW9uTGlzdCgpOwotCi0gIC8qKgotICAgKiBTZXQgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAcGFyYW0gc3BlY2lmaWNhdGlvbkxpc3Qgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNnZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KTsKLQotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaW5rZWRMaXN0IGdldFRlc3RBc3NlcnRpb25MaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBBZGQgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY3NzYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgbWFpbnRhaW5zIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlQXNzZXJ0aW9ucyBleHRlbmRzIFdTSURvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUk9GSUxFX0FTU0VSVElPTlM7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcHJvZmlsZXMuCi0gICAqIEBzZWUgI3NldFByb2ZpbGVMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFByb2ZpbGVMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcGFyYW0gcHJvZmlsZUxpc3QgbGlzdCBvZiBwcm9maWxlcy4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVMaXN0KFZlY3RvciBwcm9maWxlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEFkZCBwcm9maWxlLgotICAgKiBAcGFyYW0gcHJvZmlsZSBwcm9maWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUHJvZmlsZShQcm9maWxlIHByb2ZpbGUpOwotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEBzZWUgI3NldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0QXJ0aWZhY3RMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhIHByb2ZpbGUgYXJ0aWZhY3QgYmFzZWQgb24gdGhlIGdpdmVuIHR5cGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFydGlmYWN0IGdldEFydGlmYWN0KFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogU2V0IGxpc3Qgb2YgYXJ0aWZhY3RzLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RMaXN0IGEgbGlzdCBwZiBwcm9maWxlIGFydGlmaWFjdHMuCi0gICAqIEBzZWUgI2dldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KTsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgcHJvZmlsZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0KFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRBRE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRE5hbWUoU3RyaW5nIGRvY3VtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQURWZXJzaW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRvY3VtZW50VmVyc2lvbiB0aGUgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUQURWZXJzaW9uKFN0cmluZyBkb2N1bWVudFZlcnNpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGIwYTNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIGEgcHJvZmlsZSBhc3NlcnRpb25zIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uc1VSSSBoZSBwcm9maWxlIGFzc2VydGlvbnMgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUHJvZmlsZUFzc2VydGlvbnMgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VyIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyAgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVBc3NlcnRpb25zIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gIGlmIHByb2JsZW0gb2NjdXIgd2hpbGUgcmVhZGluZyB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyIHJlYWRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9UZXN0QXNzZXJ0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlYTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogQSB0ZXN0IGFzc2VydGlvbiBpcyBvbmUgYXNzZXJ0aW9uIGluIGEgcHJvZmlsZSBkZWZpbml0aW9uLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBUZXN0QXNzZXJ0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfSU5GT1JNQVRJT05BTCA9ICJpbmZvcm1hdGlvbmFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRUNPTU1FTkRFRCA9ICJyZWNvbW1lbmRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfUkVRVUlSRUQgPSAicmVxdWlyZWQiOwotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBpZCB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0SWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbiB0eXBlLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICogQHBhcmFtICB0eXBlIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBzZWUgI3NldEVudHJ5VHlwZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW50cnlUeXBlTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeVR5cGVOYW1lIHRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeVR5cGVOYW1lKFN0cmluZyBlbnRyeVR5cGVOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRFbmFibGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKTsKLQotICAvKioKLSAgICogU2V0ICBlbmFibGVkIGluZGljYXRvci4KLSAgICogQHBhcmFtIGVuYWJsZWQgZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2lzRW5hYmxlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwotCi0gIC8qKgotICAgKiBHZXQgY29udGV4dC4KLSAgICogQHJldHVybiBjb250ZXh0LgotICAgKiBAc2VlICNzZXRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbnRleHQuCi0gICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQuCi0gICAqIEBzZWUgI2dldENvbnRleHQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbkRlc2NyaXB0aW9uIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBmYWlsdXJlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZmFpbHVyZU1lc3NhZ2UgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXRhaWxEZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gZGV0YWlsRGVzY3JpcHRpb24gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNnZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcmV0dXJuIGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAc2VlICNzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdAotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKTsKLQotICAvKioKLSAgICogU2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcGFyYW0gZW50cnlUeXBlTGlzdCBhZGRpdGlvbmFsIGVudHJ5IHR5cGUgbGlzdC4KLSAgICogQHNlZSAjZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByZXJlcSBpZHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBwcmVyZXEgaWRzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRQcmVyZXFJZExpc3QoKTsKLQotICAvKioKLSAgICogQWRkIHByZXJlcSB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHBhcmFtICBwcmVyZXFJZCBwcmVyZXEgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL0VudHJ5VHlwZUxpc3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4MWYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotCi0vKioKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0byBtYWludGFpbiBhIHByb2ZpbGUgRW50cnlUeXBlTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5VHlwZUxpc3RJbXBsIGltcGxlbWVudHMgRW50cnlUeXBlTGlzdAotewotICAvKioKLSAgICogTG9nIGlucHV0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFdTREwgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVkZGlJbnB1dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QjZ2V0TG9nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2dJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I3NldExvZ0lucHV0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0lucHV0KFN0cmluZyBsb2dJbnB1dCkKLSAgewotICAgIHRoaXMubG9nSW5wdXQgPSBsb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFdTRExJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRXU0RMSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpCi0gIHsKLSAgICB0aGlzLndzZGxJbnB1dCA9IHdzZGxJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFVERElJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVERElJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy51ZGRpSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRVRERJSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpCi0gIHsKLSAgICB0aGlzLnVkZGlJbnB1dCA9IHVkZGlJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBcnRpZmFjdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhYjNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5BcnRpZmFjdFR5cGU7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgY29udGFpbnMgYSBzZXQgb2YgcmVsYXRlZCB0ZXN0IGFzc2VydGlvbnMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFydGlmYWN0Ci17Ci0gIC8qKgotICAgKiBBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEFydGlmYWN0VHlwZSB0eXBlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBtYXAuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCB0ZXN0QXNzZXJ0aW9uTWFwID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaW5rZWRMaXN0IHRlc3RBc3NlcnRpb25MaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgQXJ0aWZhY3RUeXBlIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5SZXBvcnRBcnRpZmFjdCNzZXRUeXBlKEFydGlmYWN0VHlwZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlJlcG9ydEFydGlmYWN0I2dldFNwZWNpZmljYXRpb25MaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U3BlY2lmaWNhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3Qjc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICAgKi8KLSAgcHVibGljIExpbmtlZExpc3QgZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbkxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIHJldHVybiAoVGVzdEFzc2VydGlvbikgdGhpcy50ZXN0QXNzZXJ0aW9uTWFwLmdldChpZCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICAvLyBBREQ6IE5lZWQgdG8gbWVyZ2UgdGhlIGxpc3QgYW5kIG1hcAotICAgIHRoaXMudGVzdEFzc2VydGlvbk1hcC5wdXQodGVzdEFzc2VydGlvbi5nZXRJZCgpLCB0ZXN0QXNzZXJ0aW9uKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25MaXN0LmFkZCh0ZXN0QXNzZXJ0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFJlcG9ydEFydGlmYWN0Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4MTQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUHJvZmlsZUFzc2VydGlvbnNJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFzc2VydGlvbnMKLXsKLSAgLyoqCi0gICAqIExvY2F0aW9uIG9mIHRoZSBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VVJJOwotCi0gIC8qKgotICAgKiBOYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudE5hbWU7Ci0KLSAgLyoqCi0gICAqIFZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VmVyc2lvbjsKLQotICAvLyBBREQ6IEEgcHJvZmlsZSBkZWZpbml0aW9uIHNob3VsZCBhbHNvIGhhdmUgYSBkZXNjcmlwdGlvbi4KLQotICAvKioKLSAgICogTGlzdCBvZiBwcm9maWxlcy4KLSAgICovCi0gIFZlY3RvciBwcm9maWxlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqLwotICBUcmVlTWFwIGFydGlmYWN0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFByb2ZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJvZmlsZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjc2V0UHJvZmlsZUxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvZmlsZUxpc3QoVmVjdG9yIHByb2ZpbGVMaXN0KQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdCA9IHByb2ZpbGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2FkZFByb2ZpbGUoUHJvZmlsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2ZpbGUoUHJvZmlsZSBwcm9maWxlKQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdC5hZGQocHJvZmlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3RMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEFydGlmYWN0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3QoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgZ2V0QXJ0aWZhY3QoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICByZXR1cm4gKFByb2ZpbGVBcnRpZmFjdCkgdGhpcy5hcnRpZmFjdExpc3QuZ2V0KHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldEFydGlmYWN0TGlzdChUcmVlTWFwKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdExpc3QgPSBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjYWRkQXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdChQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QpCi0gIHsKLSAgICB0aGlzLmFydGlmYWN0TGlzdC5wdXQoYXJ0aWZhY3QuZ2V0VHlwZSgpLCBhcnRpZmFjdCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGFydGlmYWN0cyBhbmQgZmluZCB0aGUgdGVzdCBhc3NlcnRpb24gCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBhcnRpZmFjdExpc3QudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHRlc3RBc3NlcnRpb24gPT0gbnVsbCkpCi0gICAgewotICAgICAgdGVzdEFzc2VydGlvbiA9ICgoUHJvZmlsZUFydGlmYWN0KSBpdGVyYXRvci5uZXh0KCkpLmdldFRlc3RBc3NlcnRpb24oaWQpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgY3JlYXRlQXJ0aWZhY3QoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBQcm9maWxlQXJ0aWZhY3RJbXBsKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFRBRE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQUROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldFRBRE5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VEFETmFtZShTdHJpbmcgZG9jdW1lbnROYW1lKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBkb2N1bWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNnZXRUQURWZXJzaW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VEFEVmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNzZXRUQURWZXJzaW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRFZlcnNpb24oU3RyaW5nIGRvY3VtZW50VmVyc2lvbikKLSAgewotICAgIHRoaXMuZG9jdW1lbnRWZXJzaW9uID0gZG9jdW1lbnRWZXJzaW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZjcyMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuRW50cnlUeXBlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5BcnRpZmFjdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LkVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAgICovCi0gIHByb3RlY3RlZCBQcm9maWxlQXNzZXJ0aW9ucyBwcm9maWxlQXNzZXJ0aW9uczsKLQotICAvKioKLSAgICogUmVwb3J0QXJ0aWZhY3QgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBUcmVlTWFwIGFydGlmYWN0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBuZXcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlciNyZWFkUHJvZmlsZUFzc2VydGlvbnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIHJlYWRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcgYXNzZXJ0aW9uc1VSSSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcmVhZFByb2ZpbGVBc3NlcnRpb25zKG5ldyBJbnB1dFNvdXJjZShhc3NlcnRpb25zVVJJKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIjcmVhZFByb2ZpbGVBc3NlcnRpb25zKFJlYWRlcikKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyIHJlYWRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcmVhZFByb2ZpbGVBc3NlcnRpb25zKG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAgICovCi0gIHByaXZhdGUgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKElucHV0U291cmNlIGlucHV0U291cmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMKLSAgICBwcm9maWxlQXNzZXJ0aW9ucyA9IG5ldyBQcm9maWxlQXNzZXJ0aW9uc0ltcGwoKTsKLQotICAgIC8vIFByb2ZpbGUgcGFydHMgYXJlIHB1dCBpbnRvIGEgdmVjdG9yCi0gICAgYXJ0aWZhY3RMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSB4bWwgcmVhZGVyCi0gICAgICBYTUxSZWFkZXIgcmVhZGVyID0gWE1MVXRpbHMuZ2V0WE1MUmVhZGVyKCk7Ci0KLSAgICAgIC8vIFNldCBjb250ZW50IGhhbmRsZXIgdG8gaW5uZXIgY2xhc3MKLSAgICAgIHJlYWRlci5zZXRDb250ZW50SGFuZGxlcihuZXcgUHJvZmlsZUFzc2VydGlvbnNIYW5kbGVyKCkpOwotICAgICAgCi0gICAgICBpZihXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmdldEVjbGlwc2VDb250ZXh0KCkpCi0gICAgICB7Ci0gICAgCSAgRW50aXR5UmVzb2x2ZXIgcmVzb2x2ZXIgPSBuZXcgRW50aXR5UmVzb2x2ZXIoKXsKLQotCQkJcHVibGljIElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpIHRocm93cyBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJCQlVUklSZXNvbHZlciByZXNvbHZlciA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmdldFVSSVJlc29sdmVyKCk7Ci0JCQkJU3RyaW5nIHVyaSA9IHJlc29sdmVyLnJlc29sdmUoIiIsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0JCQkJU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24gPSByZXNvbHZlci5yZXNvbHZlUGh5c2ljYWxMb2NhdGlvbigiIiwgcHVibGljSWQsIHVyaSk7Ci0JCQkJSW5wdXRTb3VyY2UgaXMgPSBudWxsOwotCQkJCXRyeQotCQkJCXsKLQkJCQkJVVJMIHVybCA9IG5ldyBVUkwocGh5c2ljYWxMb2NhdGlvbik7Ci0JCQkJCWlzID0gbmV3IElucHV0U291cmNlKHVyaSk7Ci0JCQkJCWlzLnNldEJ5dGVTdHJlYW0odXJsLm9wZW5TdHJlYW0oKSk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJLy8gRG8gbm90aGluZyBpZiBvcGVuaW5nIHRoZSBzdHJlYW0gZmFpbHMuCi0JCQkJfQotCQkJCXJldHVybiBpczsKLQkJCX0KLSAgICAJCSAgCi0gICAgCSAgfTsKLSAgICAJICByZWFkZXIuc2V0RW50aXR5UmVzb2x2ZXIocmVzb2x2ZXIpOwotICAgICAgfQotICAgICAgLy8gUGFyc2UgcHJvZmlsZSBkZWZpbml0aW9uIGZpbGUKLSAgICAgIHJlYWRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCByZWFkIGFuZCBwYXJzZSBwcm9maWxlIGRlZmluaXRpb24uIiwgZSk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICAvL0NoZWNrIHRvIHNlZSBpZiB0aGUgdmVyc2lvbiBvZiB0ZXN0IGFzc3NlcnRpb24gZG9jdW1lbnQgaXMgc3VwcG9ydGVkCi0gICAgICBpZiAoIVV0aWxzLmlzVmFsaWRQcm9maWxlVEFEVmVyc2lvbihwcm9maWxlQXNzZXJ0aW9ucykpCi0gICAgICB7Ci0gICAgCVN0cmluZyB0YWRWZXJzaW9uID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFEVmVyc2lvbigpOwotICAgIAlpZih0YWRWZXJzaW9uICE9IG51bGwpCi0gICAgCXsKLSAgICAJICBTdHJpbmcgdGFkTmFtZSA9IHByb2ZpbGVBc3NlcnRpb25zLmdldFRBRE5hbWUoKTsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJcblZlcnNpb24gIgotICAgICAgICAgICAgKyB0YWRWZXJzaW9uCi0gICAgICAgICAgICArICIgb2YgdGhlIFwiIgotICAgICAgICAgICAgKyB0YWROYW1lCi0gICAgICAgICAgICArICJcIlxuIgotICAgICAgICAgICAgKyAiZG9jdW1lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YiCi0gICAgICAgICAgICArICJcbiIKLSAgICAgICAgICAgICsgInRoZSB0ZXN0IHRvb2xzLiIpOwotICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgIAkgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIldTLUkgdmFsaWRhdGlvbiB3YXMgdW5hYmxlIHRvIHJ1bi4gVW5hYmxlIHRvIHJlYWQgdGhlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiIpOwotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFzc2VydGlvbnMgZnJvbSB0aGUgVEFEIGFyZSByZW9yZGVyZWQgZm9yIHB1cnBvc2VzIG9mIHByb2Nlc3NpbmcuIEFsbAotICAgIC8vIGFzc2VydGlvbnMgb2YgYW4gYXJ0aWZhY3QgYXJlIHJlb3JkZXJlZCBzdWNoIHRoYXQgcHJlcmVxdWlzaXRlcyBvY2N1cgotICAgIC8vIGJlZm9yZSB0aGUgYXNzZXJ0aW9ucyB0aGV5IHByZXJlcS4gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCAgcHJlcmVxdWlzaXRlcyBkbwotICAgIC8vIG5vdCBjcm9zcyBhcnRpZmFjdCB0eXBlcy4KLSAgICAvLwotICAgIEl0ZXJhdG9yIGl0ID0gYXJ0aWZhY3RMaXN0LmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgLy8gZm9yIGVhY2ggYXJ0aWZhY3QgdHlwZSBkbyByZW9yZGVyaW5nIGFzc2VydGlvbiAKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFByb2ZpbGVBcnRpZmFjdCBhcnQgPSAoUHJvZmlsZUFydGlmYWN0KSBhcnRpZmFjdExpc3QuZ2V0KGl0Lm5leHQoKSk7Ci0gICAgICAvLyByZXN1bHQgbGlzdCBvZiB0aGUgcmVvcmRlcmluZyBhc3NlcnRpb25zIAotICAgICAgTGlua2VkTGlzdCByZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotICAgICAgSXRlcmF0b3IgaXQyID0gYXJ0LmdldFRlc3RBc3NlcnRpb25MaXN0KCkuaXRlcmF0b3IoKTsKLSAgICAgIC8vIHNvcnQgdGhlIGFydGlmYWN0IGFzc2VydGlvbnMgaW50byByZXN1bHQgbGlzdCAKLSAgICAgIHdoaWxlIChpdDIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAvLyBjYWxsIGZvciBlYWNoIGFzc2VydGlvbiAsIAotICAgICAgICAvLyBpZiB0aGUgYXNzZXJ0aW9uIGhhcyB0aGUgcHJlcmVxLCB0aGUgcHJlcmVxIHdpbGwgYWRkZWQgZmlyc3QgaW50byByZXMgbGlzdAotICAgICAgICBzb3J0VGVzdEFzc2VydGlvbnMoYXJ0LCAoVGVzdEFzc2VydGlvbikgaXQyLm5leHQoKSwgcmVzKTsKLSAgICAgIH0KLSAgICAgIC8vIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGFzc2VydGlvbnMgbGlzdCB0byB0aGUgcHJlcmVxIHJlb3JkZXJpbmcgYXNzZXJ0aW9ucyBsaXN0Ci0gICAgICBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5jbGVhcigpOwotICAgICAgYXJ0LmdldFRlc3RBc3NlcnRpb25MaXN0KCkuYWRkQWxsKHJlcyk7Ci0gICAgfQotICAgIC8vIFB1dCB0aGUgcHJvZmlsZSBwYXJ0cyBpbnRvIHRoZSBwcm9maWxlIGRlZmluaXRpb24KLSAgICBwcm9maWxlQXNzZXJ0aW9ucy5zZXRBcnRpZmFjdExpc3QoYXJ0aWZhY3RMaXN0KTsKLQotICAgIHJldHVybiBwcm9maWxlQXNzZXJ0aW9uczsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNzZXRMb2NhdGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBSZWN1cnNpdmUgd2FsayB0byBvcmRlciBhc3NlcnRpb25zIHNvIHRoYXQgYXNzZXJ0aW9ucyBhcmUgCi0gICAqIHByb2Nlc3NlZCBmb2xsb3dpbmcgdGhlIG9uZXMgdGhhdCBwcmVyZXEgdGhlbS4KLSAgICogSWYgYXNzZXJ0aW9uIGhhcyBwcmVyZXEsIHRoZW4gYWRkIGl0IHRvIHRoZSByZXN1bHQgbGlzdCBmaXJzdC4KLSAgICogIAotICAgKiBAcGFyYW0gYXJ0IHByb2ZpbGUgYXJ0aWZhY3QgZm9yIGNhbGwgQGxpbmsgUHJvZmlsZUFydGlmYWN0I2dldFRlc3RBc3NlcnRpb24oU3RyaW5nKQotICAgKiBAcGFyYW0gYXNydCB0ZXN0IGFzc2VydGlvbgotICAgKiBAcGFyYW0gbGlzdCByZXN1bHQgbGlzdCB0byBzb3J0Ci0gICAqLwotICBwcml2YXRlIHZvaWQgc29ydFRlc3RBc3NlcnRpb25zKFByb2ZpbGVBcnRpZmFjdCBhcnQsIFRlc3RBc3NlcnRpb24gYXNydCwgTGlzdCBsaXN0KQotICB7Ci0gICAgLy8gaWYgYXNzZXJ0aW9uIGlzIG51bGwgb3IgZG9lcyBub3QgZXhpc3QsIHRoZW4gZXhpdAotICAgIGlmKChhc3J0ID09IG51bGwpIHx8IGxpc3QuY29udGFpbnMoYXNydCkpIAotICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIGlmIGl0IGhhcyBub3QgcHJlcmVxLCBhZGQgdGhlIGFzZXJ0aW9uIGFuZCBleGl0Ci0gICAgaWYoYXNydC5nZXRQcmVyZXFJZExpc3QoKS5pc0VtcHR5KCkpIAotICAgIHsKLSAgICAgIGxpc3QuYWRkKGFzcnQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBnZXQgbGlzdCBwcmVyZXEgYXNzZXJ0aW9uIGFuZCByZXF1cnNpdmUgY2FsbCBzb3J0VGVzdEFzc2VydGlvbnMgdGhpcyBlYWNoICAgIAotICAgIEl0ZXJhdG9yIGl0ID0gYXNydC5nZXRQcmVyZXFJZExpc3QoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlKGl0Lmhhc05leHQoKSkgewotICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgaXQubmV4dCgpOwotICAgICAgc29ydFRlc3RBc3NlcnRpb25zKGFydCwgYXJ0LmdldFRlc3RBc3NlcnRpb24oaWQpLCBsaXN0KTsKLSAgICB9Ci0gICAgbGlzdC5hZGQoYXNydCk7Ci0gIH0KLQotICAvKioKLSAgICogSW5uZXIgY2xhc3M6IFByb2ZpbGVBc3NlcnRpb25zSGFuZGxlcgotICAgKi8KLSAgY2xhc3MgUHJvZmlsZUFzc2VydGlvbnNIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIKLSAgewotICAgIHByaXZhdGUgUHJvZmlsZUFydGlmYWN0IGFydGlmYWN0ID0gcHJvZmlsZUFzc2VydGlvbnMuY3JlYXRlQXJ0aWZhY3QoKTsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBjb250ZXh0ID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBhc3NlcnRpb25EZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZmFpbHVyZU1lc3NhZ2UgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZGV0YWlsRGVzY3JpcHRpb24gPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIHRlc3RBc3NlcnRpb25JZCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVudEVsZW1lbnQgPSBudWxsOwotICAgIHByaXZhdGUgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBsb2dJbnB1dCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgd3NkbElucHV0ID0gbnVsbDsKLSAgICBwcml2YXRlIEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0KLSAgICAvLyBQcm9jZXNzIHN0YXJ0IGVsZW1lbnQgZXZlbnQKLSAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoCi0gICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLAotICAgICAgU3RyaW5nIGxvY2FsTmFtZSwKLSAgICAgIFN0cmluZyBxTmFtZSwKLSAgICAgIEF0dHJpYnV0ZXMgYXR0cykKLSAgICB7Ci0gICAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwKLSAgICAgICAgJiYgKG5hbWVzcGFjZVVSSS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQVNTRVJUSU9OU18yMDAzKQotICAgICAgICB8fCAgbmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNhdmUgZWxlbWVudCBuYW1lCi0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gbG9jYWxOYW1lOwotCi0gICAgICAgIC8vIDxhcnRpZmFjdD4KLSAgICAgICAgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1QpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHByb2ZpbGUgYXJ0aWZhY3Qgb2JqZWN0Ci0gICAgICAgICAgYXJ0aWZhY3QgPSBwcm9maWxlQXNzZXJ0aW9ucy5jcmVhdGVBcnRpZmFjdCgpOwotCi0gICAgICAgICAgLy8gU2V0IHR5cGUKLSAgICAgICAgICBhcnRpZmFjdC5zZXRUeXBlKAotICAgICAgICAgICAgQXJ0aWZhY3RUeXBlLmdldEFydGlmYWN0VHlwZSgKLSAgICAgICAgICAgICAgYXR0cy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9UWVBFKSkpOwotCi0gICAgICAgICAgLy8gQUREOiBHZXQgc3BlY2lmaWNhdGlvbiBsaXN0Ci0KLSAgICAgICAgICAvLyBBZGQgYXJ0aWZhY3QgdG8gbGlzdCBvZiBhcnRpZmFjdCBsaXN0Ci0gICAgICAgICAgYXJ0aWZhY3RMaXN0LnB1dChhcnRpZmFjdC5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSwgYXJ0aWZhY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPHRlc3RBc3NlcnRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbiA9IG5ldyBUZXN0QXNzZXJ0aW9uSW1wbCgpOwotCi0gICAgICAgICAgLy8gR2V0IGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgICBTdHJpbmcgaWQgPSBhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9JRCk7Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRJZChpZCk7Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRUeXBlKGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldEVudHJ5VHlwZU5hbWUoCi0gICAgICAgICAgICBhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9FTlRSWV9UWVBFKSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gaWYgYXNzZXJ0aW9uIGlzIG5vdCByZXF1aXJlZCBvciBpdCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgY29yZSB2YWxpZGF0b3IgdGhlbiBkaXNhYmxlIGl0Ci0gICAgICAgICAgaWYgKGFscmVhZHlDaGVja2VkKGlkKSB8fCAhKHRlc3RBc3NlcnRpb24uZ2V0VHlwZSgpLmVxdWFscyhUZXN0QXNzZXJ0aW9uLlRZUEVfUkVRVUlSRUQpKSkKLSAgICAgICAgCSAgdGVzdEFzc2VydGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgIAkgIHRlc3RBc3NlcnRpb24uc2V0RW5hYmxlZChCb29sZWFuLnZhbHVlT2YoYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfRU5BQkxFRCkpLmJvb2xlYW5WYWx1ZSgpKTsKLQotICAgICAgICAgIC8vIEFkZCB0ZXN0IGFzc2VydGlvbiB0byBhcnRpZmFjdAotICAgICAgICAgIGFydGlmYWN0LmFkZFRlc3RBc3NlcnRpb24odGVzdEFzc2VydGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8Y29udGV4dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGFzc2VydGlvbkRlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVNZXNzYWdlPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUxfREVTQ1JJUFRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGRldGFpbERlc2NyaXB0aW9uPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0RFVEFJTF9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBkZXRhaWxEZXNjcmlwdGlvbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbklkID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0PgotICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICBsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBlbnRyeSB0eXBlIGxpc3QKLSAgICAgICAgICBlbnRyeVR5cGVMaXN0ID0gbmV3IEVudHJ5VHlwZUxpc3RJbXBsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8bWVzc2FnZUlucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgbG9nSW5wdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8d3NkbElucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1dTRExfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbElucHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0gICAgICAgIC8vIDxwcm9maWxlQXNzZXJ0aW9ucz4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9QUk9GSUxFX0FTU0VSVElPTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvZmlsZUFzc2VydGlvbnMuc2V0VEFETmFtZSgKLSAgICAgICAgICAgIGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX05BTUUpKTsKLSAgICAgICAgICBwcm9maWxlQXNzZXJ0aW9ucy5zZXRUQURWZXJzaW9uKAotICAgICAgICAgICAgYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogUkVNT1ZFOiAgICAgCi0gICAgICAgIC8vIDx1ZGRpSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVURESV9JTlBVVCkpIHsKLSAgICAgICAgICB1ZGRpSW5wdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0gCi0gICAgICAgICovCi0gICAgICB9Ci0gICAgfSAvLyBFTkQgc3RhcnRFbGVtZW50Ci0KLSAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxbmFtZSkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGlzIGlzIHRoZSBwcm9maWxlIG5hbWVzcGFjZSwgdGhlbiBjaGVjayBmb3IgYW5kIHByb2Nlc3Mgc2VsZWN0ZWQgZWxlbWVudHMKLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbAotICAgICAgICAmJiAobmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TXzIwMDMpCi0gICAgICAgIHx8IG5hbWVzcGFjZVVSSS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQVNTRVJUSU9OUykpKQotICAgICAgewotICAgICAgICAvLyA8Y29udGV4dD4KLSAgICAgICAgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQ09OVEVYVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgY29udGV4dCBpbiB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0Q29udGV4dChjb250ZXh0LnRvU3RyaW5nKCkpOwotICAgICAgICAgIGNvbnRleHQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGFzc2VydGlvbkRlc2NyaXB0aW9uPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRBc3NlcnRpb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgIGFzc2VydGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGFzc2VydGlvbkRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxmYWlsdXJlTWVzc2FnZT4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX01FU1NBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IGZhaWx1cmUgbWVzc2FnZSBpbiB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZU1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgZmFpbHVyZSBkZXRhaWwgZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbigKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbi50b1N0cmluZygpKTsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGRldGFpbERlc2NyaXB0aW9uPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0RFVEFJTF9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgZGV0YWlsIGRlc2NyaXB0aW9uIGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXREZXRhaWxEZXNjcmlwdGlvbihkZXRhaWxEZXNjcmlwdGlvbi50b1N0cmluZygpKTsKLSAgICAgICAgICBkZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8dGVzdEFzc2VydGlvbklEPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OX0lEKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCB0ZXN0IGFzc2VydGlvbiBpZCBpbiBwcmVyZXEgbGlzdAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uYWRkUHJlcmVxSWQodGVzdEFzc2VydGlvbklkLnRvU3RyaW5nKCkpOwotICAgICAgICAgIHRlc3RBc3NlcnRpb25JZCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YWRkdGlvbmFsRW50cnlUeXBlTGlzdD4KLSAgICAgICAgZWxzZSBpZiAoCi0gICAgICAgICAgbG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BRERJVElPTkFMX0VOVFJZX1RZUEVfTElTVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgdGFyZ2V0IGxpc3QKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KGVudHJ5VHlwZUxpc3QpOwotICAgICAgICAgIGVudHJ5VHlwZUxpc3QgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPG1lc3NhZ2VJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0lOUFVUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCB0ZXN0IGFzc2VydGlvbiBpZCBpbiBwcmVyZXEgbGlzdAotICAgICAgICAgIGVudHJ5VHlwZUxpc3Quc2V0TG9nSW5wdXQobG9nSW5wdXQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgbG9nSW5wdXQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPHdzZGxJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9XU0RMX0lOUFVUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCB0ZXN0IGFzc2VydGlvbiBpZCBpbiBwcmVyZXEgbGlzdAotICAgICAgICAgIGVudHJ5VHlwZUxpc3Quc2V0V1NETElucHV0KHdzZGxJbnB1dC50b1N0cmluZygpKTsKLSAgICAgICAgICB3c2RsSW5wdXQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPHByb2ZpbGVBc3NlcnRpb25zPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1BST0ZJTEVfQVNTRVJUSU9OUykpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBhIG5vLW9wCi0gICAgICAgIH0KLQotICAgICAgICAvKiBSRU1PVkU6Ci0gICAgICAgIC8vIDx1ZGRpSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVURESV9JTlBVVCkpIHsKLSAgICAgICAgICAvLyBTZXQgdGVzdCBhc3NlcnRpb24gaWQgaW4gcHJlcmVxIGxpc3QKLSAgICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRVRERJSW5wdXQodWRkaUlucHV0LnRvU3RyaW5nKCkpOyAgICAgICAgIAotICAgICAgICAgIHVkZGlJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgKi8KLSAgICAgIH0KLSAgICB9IC8vIEVORCBlbmRFbGVtZW50Ci0KLSAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXJbXSBjaCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgIC8vIDxjb250ZXh0PgotICAgICAgaWYgKChjb250ZXh0ICE9IG51bGwpCi0gICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQ09OVEVYVCkpKQotICAgICAgewotICAgICAgICBjb250ZXh0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXNzZXJ0aW9uRGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9ERVNDUklQVElPTikpKQotICAgICAgewotICAgICAgICBhc3NlcnRpb25EZXNjcmlwdGlvbi5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8ZmFpbHVyZU1lc3NhZ2U+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGZhaWx1cmVNZXNzYWdlICE9IG51bGwpCi0gICAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX01FU1NBR0UpKSkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZU1lc3NhZ2UuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbj4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoZmFpbHVyZURldGFpbERlc2NyaXB0aW9uICE9IG51bGwpICYmICgKLSAgICAgICAgICBjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUxfREVTQ1JJUFRJT04pKSkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxkZXRhaWxEZXNjcmlwdGlvbj4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoZGV0YWlsRGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0RFVEFJTF9ERVNDUklQVElPTikpKQotICAgICAgewotICAgICAgICBkZXRhaWxEZXNjcmlwdGlvbi5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8dGVzdEFzc2VydGlvbklEPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgICh0ZXN0QXNzZXJ0aW9uSWQgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OX0lEKSkpCi0gICAgICB7Ci0gICAgICAgIHRlc3RBc3NlcnRpb25JZC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUlucHV0PgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2dJbnB1dCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9JTlBVVCkpKQotICAgICAgewotICAgICAgICBsb2dJbnB1dC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8d3NkbElucHV0PgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgICh3c2RsSW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1dTRExfSU5QVVQpKSkKLSAgICAgIHsKLSAgICAgICAgd3NkbElucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFJFTU9WRToKLSAgICAgIC8vIDx1ZGRpSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgodWRkaUlucHV0ICE9IG51bGwpICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVURESV9JTlBVVCkpKSB7Ci0gICAgICAgIHVkZGlJbnB1dC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotICAgICAgKi8KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTk9URSB0aGF0IHRoaXMgYXBpIGFzc3VtZXMgdGhhdCBiYXNlIHdzZGwgdmFsaWRhdG9yIGhhcyBhbHJlYWR5IHZhbGlkYXRlZAotICAgKiB0aGUgd3NkbCBkb2N1bWVudCBhbmQgY29ycmVzcG9uZGluZyBzY2hlbWFzIGFnYWluc3QgdGhlIHdzZGwgMS4xIHNwZWNpZmljYXRpb24uCi0gICAqIE5vdGUgYWxzbyB0aGF0IHRoZXJlIGFyZSBhIG51bWJlciBvZiBkdXBsaWNhdGUgY2hlY2tzIGJldHdlZW4gdGhlIGJhc2UgdmFsaWRhdG9yCi0gICAqIGFuZCB0aGUgd3MtaSB2YWxpZGF0b3IuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2hlY2tzIGFyZSBjcHUgaW50ZW5zaXZlLCB3ZSBkaXNhYmxlIAotICAgKiB0aG9zZSBhc3NlcnRpb25zIGhlcmUuIAotICAgKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFzc2VydGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgdGhlIGJhc2UgdmFsaWRhdG9yLiAKLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBhc3NlcnRpb24gaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGJ5IHRoZSBiYXNlIHZhbGlkYXRvci4gCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBhbHJlYWR5Q2hlY2tlZChTdHJpbmcgaWQpCi0gIHsKLQkgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkgaWYgKGlkICE9IG51bGwpCi0JIHsKLSAgICAgICByZXN1bHQgPSAoaWQuZXF1YWxzKCJCUDIxMTAiKSB8fAotICAgIAkJICAgCSBpZC5lcXVhbHMoIkJQMjExNSIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQlAyNDE3IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDIxMTQiKSB8fAotCQkgICAgICAgICBpZC5lcXVhbHMoIkJQMjEyMyIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiU1NCUDIyMDkiKSB8fAotCQkgICAgICAgICBpZC5lcXVhbHMoIkFQMjIwOSIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQlAyNzAwIikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDIwMTEiKQotCQkgICAgICAgICApOwotCSB9Ci0JIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvVGVzdEFzc2VydGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY5NzU3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvVGVzdEFzc2VydGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLkVudHJ5VHlwZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEFzc2VydGlvbkltcGwgaW1wbGVtZW50cyBUZXN0QXNzZXJ0aW9uCi17Ci0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaWQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGVudHJ5VHlwZU5hbWUgPSBudWxsOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBlbmFibGVkIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGVuYWJsZWQgPSB0cnVlOwotCi0gIC8qKgotICAgKiBDb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjb250ZXh0ID0gbnVsbDsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEZhaWx1cmUgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZmFpbHVyZU1lc3NhZ2UgPSBudWxsOwotCi0gIC8qKgotICAgKiBGYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEFkZHRpb25hbCBlbnRyeSB0eXBlIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgRW50cnlUeXBlTGlzdCBlbnRyeVR5cGVMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogUHJlcmVxIElEIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHByZXJlcUlkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRJZCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiB0aGlzLmlkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0SWQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldFR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRFbnRyeVR5cGVOYW1lKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW50cnlUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeVR5cGVOYW1lOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RW50cnlUeXBlTmFtZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeVR5cGVOYW1lKFN0cmluZyBlbnRyeVR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gZW50cnlUeXBlTmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2lzRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGVuYWJsZWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRFbmFibGVkKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkKLSAgewotICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRDb250ZXh0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGV4dCgpCi0gIHsKLSAgICByZXR1cm4gY29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldENvbnRleHQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFzc2VydGlvbkRlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmFzc2VydGlvbkRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oU3RyaW5nIGFzc2VydGlvbkRlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5hc3NlcnRpb25EZXNjcmlwdGlvbiA9IGFzc2VydGlvbkRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0RmFpbHVyZU1lc3NhZ2UoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5mYWlsdXJlTWVzc2FnZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEZhaWx1cmVNZXNzYWdlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhaWx1cmVNZXNzYWdlKFN0cmluZyBmYWlsdXJlTWVzc2FnZSkKLSAgewotICAgIHRoaXMuZmFpbHVyZU1lc3NhZ2UgPSBmYWlsdXJlTWVzc2FnZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5mYWlsdXJlRGV0YWlsRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKFN0cmluZyBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24pCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldERldGFpbERlc2NyaXB0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsRGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZGV0YWlsRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXREZXRhaWxEZXNjcmlwdGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXRhaWxEZXNjcmlwdGlvbihTdHJpbmcgZGV0YWlsRGVzY3JpcHRpb24pCi0gIHsKLSAgICB0aGlzLmRldGFpbERlc2NyaXB0aW9uID0gZGV0YWlsRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdCgpCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlTGlzdCBnZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeVR5cGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3Qob3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCkKLSAgewotICAgIHRoaXMuZW50cnlUeXBlTGlzdCA9IGVudHJ5VHlwZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRQcmVyZXFJZExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRQcmVyZXFJZExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHByZXJlcUlkTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2FkZFByZXJlcUlkKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByZXJlcUlkKFN0cmluZyBwcmVyZXFJZCkKLSAgewotICAgIHRoaXMucHJlcmVxSWRMaXN0LmFkZChwcmVyZXFJZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0Jhc2VWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0Jhc2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlNzAyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIGJhc2UgaW50ZXJmYWNlIGZvciB0aGUgcHJvZmlsZSB2YWxpZGF0b3IuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmFzZVZhbGlkYXRvcgotewotICAvKioKLSAgICogU2V0IGFsbCB0ZXN0IGFzc2VydGlvbnMgZm9yIGFuIGFydGlmYWN0IHRvIG1pc3NpbmdJbnB1dC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IHByb2JsZW1zIHdoaWxlIHByb2Nlc3NpbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBbGxNaXNzaW5nSW5wdXQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBDbGVhbnVwIGFmdGVyIHByb2Nlc3NpbmcgYWxsIG9mIHRoZSB0ZXN0IGFzc2VydGlvbnMgZm9yIGFuIGFydGlmYWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgcHJvYmxlbXMgZHVyaW5nIGNsZWFudXAuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICAgKiBQYXJzZSBYTUwgZG9jdW1lbnQgYW5kIHZhbGlkYXRlIHdpdGggYSBzY2hlbWEgZG9jdW1lbnQuCi0gICAgICogQHBhcmFtIHVybFN0cmluZyBYTUwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAgICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICAgKiBAcGFyYW0gc2NoZW1hIHRoZSByZWxhdGVkIFhNTCBzY2hlbWEuCi0gICAgICogQHJldHVybiBYTUwgZG9jdW1lbnQuCi0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyB3aGlsZSBwYXJzaW5nIG9yIAotICAgICAqICAgICAgICAgdmFsaWRhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgICAqLwotICBwdWJsaWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTCgKLSAgICBTdHJpbmcgdXJsU3RyaW5nLAotICAgIFN0cmluZyBiYXNlVVJJLAotICAgIFN0cmluZyBzY2hlbWEpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXNzZXJ0aW9ucyAgICAgIHRoZSBhc3NlcnRpb25zCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnICB0aGUgYW5hbHl6ZXJDb25maWcKLSAgICogQHBhcmFtIHJlcG9ydGVyICAgICAgICB0aGUgcmVwb3J0ZXIgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXJyb3JzIHRvIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZvcm1hbmNlIHJlcG9ydAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiAgIGlmIG1lc3NhZ2UgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgdGhpcyB2YWxpZGF0b3Igc2hvdWxkIGJlIHJ1biAoZGVwZW5kaW5nIG9uIHRoZSBhbmFseXplcgotICAgKiBjb25maWcpCi0gICAqIEByZXR1cm4gYm9vbGVhbiAgdHJ1ZSBpZiB2YWxpZGF0b3Igc2hvdWxkIGJlIHJ1biwgZmFsc2UgaWYgbm90Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5UZXN0cygpOwotCi0gIC8qKgotICAgKiBSdW4gdGhlIHZhbGlkYXRvcgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycyBkdXJpbmcgdmFsaWRhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVBcnRpZmFjdCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBhcnRpZmFjdCB0eXBlIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiB0aGUgYXJ0aWZhY3QgdHlwZSAoYSBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0VHlwZSgpOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW50cnlDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYmQ4OTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW50cnlDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FbnRyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgdGFyZ2V0IGluZm9ybWF0aW9uIG5lZWRlZCBieSBhIHRlc3QgYXNzZXJ0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5Q29udGV4dAotewotICBwcm90ZWN0ZWQgRW50cnkgZW50cnkgPSBudWxsOwotCi0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgcmVxdWVzdCA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgcmVzcG9uc2UgPSBudWxsOwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIERvY3VtZW50IHJlcXVlc3REb2N1bWVudCA9IG51bGw7Ci0gIHByb3RlY3RlZCBEb2N1bWVudCByZXNwb25zZURvY3VtZW50ID0gbnVsbDsKLSAgcHJvdGVjdGVkIERvY3VtZW50IG1lc3NhZ2VFbnRyeURvY3VtZW50ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGVudHJ5ICAgIGEgbWVzc2FnZSBlbnRyeS4KLSAgICogQHBhcmFtIHJlcXVlc3QgIHRoZSByZXF1ZXN0LgotICAgKiBAcGFyYW0gcmVzcG9uc2UgdGhlIHJlc3BvbnNlLgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgTWVzc2FnZUVudHJ5IHJlcXVlc3QsIE1lc3NhZ2VFbnRyeSByZXNwb25zZSkKLSAgewotICAgIHRoaXMoZW50cnksIHJlcXVlc3QsIHJlc3BvbnNlLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGVudHJ5ICAgICAgICAgICBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSByZXF1ZXN0ICAgICAgICAgdGhlIHJlcXVlc3QuCi0gICAqIEBwYXJhbSByZXNwb25zZSAgICAgICAgdGhlIHJlc3BvbnNlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250ZXh0KAotICAgIEVudHJ5IGVudHJ5LAotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0LAotICAgIE1lc3NhZ2VFbnRyeSByZXNwb25zZSwKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0KQotICB7Ci0gICAgdGhpcy5lbnRyeSA9IGVudHJ5OwotICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIHRoaXMuYW5hbHl6ZXJDb250ZXh0ID0gYW5hbHl6ZXJDb250ZXh0OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUGFyc2UgYWxsIGRvY3VtZW50cwotICAgICAgaWYocmVxdWVzdC5pc01pbWVDb250ZW50KCkpIAotICAgICAgewotICAgICAgCU1pbWVQYXJ0IHBhcnQgPSByZXF1ZXN0LmdldE1pbWVQYXJ0cygpLmdldFJvb3RQYXJ0KCk7Ci0gICAgICAgIGlmICgocGFydCAhPSBudWxsKSAmJiAocGFydC5nZXRDb250ZW50KCkubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgICByZXF1ZXN0RG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChwYXJ0LmdldENvbnRlbnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICBpZiAocmVxdWVzdC5nZXRNZXNzYWdlKCkubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHJlcXVlc3REb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlcXVlc3QuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHsKLSAgICAgICAgICBpZihyZXNwb25zZS5pc01pbWVDb250ZW50KCkpIAotICAgICAgICAgIHsKLSAgICAgICAgICAJTWltZVBhcnQgcGFydCA9IHJlc3BvbnNlLmdldE1pbWVQYXJ0cygpLmdldFJvb3RQYXJ0KCk7Ci0gICAgICAgICAgCWlmICgocGFydCAhPSBudWxsKSAmJiAocGFydC5nZXRDb250ZW50KCkubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgICAgICAgcmVzcG9uc2VEb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MKHBhcnQuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2UuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgcmVzcG9uc2VEb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlc3BvbnNlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChXU0lFeGNlcHRpb24gd2UpCi0gICAgewotICAgIH0KLQotICAgIC8vIG5lZWQgc29tZSBleGNlcHRpb24gaGFuZGxpbmcgaW4gaGVyZSBhbmQgbW9yZSBjYXJlZnVsIGNoZWNraW5nCi0gICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpLmVxdWFscyhFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKSkKLSAgICB7Ci0gICAgICB0aGlzLm1lc3NhZ2VFbnRyeSA9IHJlcXVlc3Q7Ci0gICAgICB0aGlzLm1lc3NhZ2VFbnRyeURvY3VtZW50ID0gcmVxdWVzdERvY3VtZW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5tZXNzYWdlRW50cnkgPSByZXNwb25zZTsKLSAgICAgIHRoaXMubWVzc2FnZUVudHJ5RG9jdW1lbnQgPSByZXNwb25zZURvY3VtZW50OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBhIFdTREwgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250ZXh0KEVudHJ5IGVudHJ5LCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICB7Ci0gICAgdGhpcy5lbnRyeSA9IGVudHJ5OwotICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBlbnRyeSBjb250ZXh0LgotICAgKiBAcGFyYW0gZW50cnkgYSBtZXNzYWdlIGVudHJ5LgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250ZXh0KEVudHJ5IGVudHJ5LCBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0KQotICB7Ci0gICAgdGhpcy5lbnRyeSA9IGVudHJ5OwotICAgIHRoaXMuYW5hbHl6ZXJDb250ZXh0ID0gYW5hbHl6ZXJDb250ZXh0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGVudHJ5LiAKLSAgICogQHJldHVybiB0aGUgZW50cnkuIAotICAgKi8KLSAgcHVibGljIEVudHJ5IGdldEVudHJ5KCkKLSAgewotICAgIHJldHVybiB0aGlzLmVudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlcXVlc3QuCi0gICAqIEByZXR1cm4gdGhlIHJlcXVlc3QuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldFJlcXVlc3QoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzcG9uc2UuCi0gICAqIEByZXR1cm4gdGhlIHJlc3BvbnNlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRSZXNwb25zZSgpCi0gIHsKLSAgICByZXR1cm4gcmVzcG9uc2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbG9nIGVudHJ5IHdoaWNoIGlzIG5vdCBudWxsLgotICAgKiBAcmV0dXJuIHRoZSBsb2cgZW50cnkuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldE1lc3NhZ2VFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUVudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlcXVlc3QuCi0gICAqIEByZXR1cm4gTWVzc2FnZUVudHJ5Ci0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0UmVxdWVzdERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiByZXF1ZXN0RG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzcG9uc2UuCi0gICAqIEByZXR1cm4gdGhlIHJlc3BvbnNlLgotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldFJlc3BvbnNlRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHJlc3BvbnNlRG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbG9nIGVudHJ5IHdoaWNoIGlzIG5vdCBudWxsLgotICAgKiBAcmV0dXJuIHRoZSBsb2cgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeURvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IGdldFdTRExEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbERvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcmV0dXJuIGFuYWx5emVyQ29udGV4dAotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29udGV4dCBnZXRBbmFseXplckNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYW5hbHl6ZXJDb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9FbnZlbG9wZVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkY2M5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9FbnZlbG9wZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotCi0vKioKLSAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBlbnZlbG9wZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICoKLSAqIEB2ZXJzaW9uIDEuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudmVsb3BlVmFsaWRhdG9yIGV4dGVuZHMgTG9nVmFsaWRhdG9yCi17Ci0KLSAgLyoqCi0gICAqIEluaXRpYWlsaXplIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbnRleHQgdGhlIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHBhcmFtIGFydGlmYWN0ICAgICAgICBhbiBwcm9maWxlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgdGhlIFdlYiBzZXJ2aWNlIGRlZmluaXRpb24KLSAgICogQHBhcmFtIHJlcG9ydGVyIHRoZSByZXBvcnRlciB3aGljaCBpcyB1c2VkIHRvIGFkZCBlcnJvcnMgdG8gdGhlIGNvbmZvcm1hbmNlIHJlcG9ydAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBtZXNzYWdlIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBpbml0KEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGVBc3NlcnRpb25zIGFzc2VydGlvbnMsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IGFydGlmYWN0LAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQsCi0gICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLSAgCi0gIC8qKiBFbnZlbG9wZSBhcnRpZmFjdCB0eXBlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRU5WRUxPUEUgPSAiZW52ZWxvcGUiOwotCi0gIC8qKiBSZXF1ZXN0IGVudmVsb3BlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRU5WRUxPUEVfUkVRVUVTVCA9ICJyZXF1ZXN0RW52ZWxvcGUiOwotCi0gIC8qKiBSZXNwb25zZSBlbnZlbG9wZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFU1BPTlNFID0gInJlc3BvbnNlRW52ZWxvcGUiOwotCi0gIC8qKiBBbnkgZW52ZWxvcGUgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9BTlkgPSAiYW55RW52ZWxvcGUiOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvTG9nVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NGRkYjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvTG9nVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotCi0vKioKLSAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlcyBjb21tb24gdG8gZW52ZWxvcGVzIGFuZAotICogbWVzc2FnZXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nVmFsaWRhdG9yIGV4dGVuZHMgQmFzZVZhbGlkYXRvciB7Ci0gICAgLyoqCi0gICAgICogVmFsaWRhdGUgdGhlIGVudmVsb3BlIGxvY2F0ZWQgYnkgdGhlIGxvZyBlbnRyeS4gCi0gICAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhIGxvZyBlbnRyeSBsb2NhdGluZyBhbiBlbnZlbG9wZS4KLSAgICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIHdoaWxlCi0gICAgICogICAgICAgICBwcm9jZXNzaW5nIHRoZSBsb2cgZW50cnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmFsaWRhdGUoRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL01lc3NhZ2VWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL01lc3NhZ2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1M2Y0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogSW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIG1lc3NhZ2UgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VWYWxpZGF0b3IgZXh0ZW5kcyBMb2dWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIEhUVFAgMS4wIHZlcnNpb24gaW5kaWNhdG9yLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9WRVJTSU9OXzFfMCA9ICJIVFRQLzEuMCI7Ci0KLSAgLyoqCi0gICAqIEhUVFAgMS4xIHZlcnNpb24gaW5kaWNhdG9yLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9WRVJTSU9OXzFfMSA9ICJIVFRQLzEuMSI7Ci0KLSAgLyoqCi0gICAqIEhUVFAgUE9TVCBtZXNzYWdlIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfUE9TVCA9ICJQT1NUIjsKLQotICAvKiogTWVzc2FnZSBhcnRpZmFjdCB0eXBlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRSA9ICJtZXNzYWdlIjsKLQotICAvKiogUmVxdWVzdCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9SRVFVRVNUID0gInJlcXVlc3RNZXNzYWdlIjsKLQotICAvKiogUmVzcG9uc2UgbWVzc2FnZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfUkVTUE9OU0UgPSAicmVzcG9uc2VNZXNzYWdlIjsKLQotICAvKiogQW55IG1lc3NhZ2UgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX0FOWSA9ICJhbnlNZXNzYWdlIjsKLQotICAvKiogTWltZSBwYXJ0IG1lc3NhZ2UgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NSU1FX1BBUlQgPSAicGFydCI7Ci0KLSAgLyoqIE1pbWUgcm9vdCBwYXJ0IG1lc3NhZ2UgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NSU1FX1JPT1RfUEFSVCA9ICJyb290LXBhcnQiOwotCi0gIC8qKgotICAgKiBJbml0aWFpbGl6ZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqIEBwYXJhbSBhcnRpZmFjdCAgICAgICAgYW4gcHJvZmlsZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IHRoZSBXZWIgc2VydmljZSBkZWZpbml0aW9uCi0gICAqIEBwYXJhbSByZXBvcnRlciB0aGUgcmVwb3J0ZXIgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXJyb3JzIHRvIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgaW5pdChBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE2ZjFkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NJUHJvcGVydGllczsKLQotLyoqCi0qIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBhY2Nlc3MgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBhYnN0cmFjdCBjbGFzcy4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeQotewotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgdmFsaWRhdG9yIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gYXJ0aWZhY3QgbmFtZQotICAgKiBAcGFyYW0gYXJ0aWZhY3ROYW1lIC0gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFydGlmYWN0IG5hbWUgZnJvbSB0aGUgVEFECi0gICAqIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgQmFzZVZhbGlkYXRvciBpbnRlcmZhY2UuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZAotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEJhc2VWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoU3RyaW5nIGFydGlmYWN0TmFtZSkKLSAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKiAKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgVURESSB2YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIFdTRExWYWxpZGF0b3IgaW50ZXJmYWNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBVRERJIHZhbGlkYXRvciBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoU3RyaW5nIGFydGlmYWN0TmFtZSkuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgVURESVZhbGlkYXRvciBuZXdVRERJVmFsaWRhdG9yKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKiogCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIFdTREwgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIFdTRExWYWxpZGF0b3IgaW50ZXJmYWNlLiAKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgV1NETCB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFdTRExWYWxpZGF0b3IgbmV3V1NETFZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBtZXNzYWdlIHZhbGlkYXRvci4KLSAgICogTk9URTogRG8gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHRyYW5wb3J0IGFuZCBTT0FQIAotICAgKiBtZXNzYWdlIHZhbGlkYXRvcj8KLSAgICoKLSAgICogQHJldHVybiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBNZXNzYWdlVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3JjYW5ub3QgYmUgaW5zdGFudGlhdGVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoU3RyaW5nIGFydGlmYWN0TmFtZSkuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgTWVzc2FnZVZhbGlkYXRvciBuZXdNZXNzYWdlVmFsaWRhdG9yKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKiogCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhbiBlbnZlbG9wZSB2YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgRW52ZWxvcGVWYWxpZGF0b3IgaW50ZXJmYWNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBtZXNzYWdlIHZhbGlkYXRvciBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLiAKLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEVudmVsb3BlVmFsaWRhdG9yIG5ld0VudmVsb3BlVmFsaWRhdG9yKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogSW5zdGFudGlhdGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBjbGFzcy4KLSAgICogVGhlIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGlzIGludGVyZmFjZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGZvbGxvd2luZyAKLSAgICogSmF2YSBzeXN0ZW0gcHJvcGVydHk6Ci0gICAqIDxVTD4KLSAgICogICA8TEk+d3NpLnByb2ZpbGUudmFsaWRhdG9yLmZhY3RvcnkKLSAgICogPC9VTD4KLSAgICoKLSAgICogQHJldHVybiB0aGUgUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnkgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBmYWN0b3J5IGNsYXNzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IG5ld0luc3RhbmNlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0gICAgU3RyaW5nIGZhY3RvcnlDbGFzc05hbWUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IGZhY3RvcnkgY2xhc3MgbmFtZQotICAgICAgZmFjdG9yeUNsYXNzTmFtZSA9Ci0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoCi0gICAgICAgICAgV1NJUHJvcGVydGllcy5QUk9QX1ZBTElEQVRPUl9GQUNUT1JZLAotICAgICAgICAgIFdTSVByb3BlcnRpZXMuREVGX1ZBTElEQVRPUl9GQUNUT1JZKTsKLQotICAgICAgLy8gQ3JlYXRlIHRoZSBmYWN0b3J5IGNsYXNzCi0gICAgICBDbGFzcyBmYWN0b3J5Q2xhc3MgPSBDbGFzcy5mb3JOYW1lKGZhY3RvcnlDbGFzc05hbWUpOwotCi0gICAgICAvLyBJbnN0YW50aWF0ZSB0aGUgZmFjdG9yeSAKLSAgICAgIGZhY3RvcnkgPSAoUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkpIGZhY3RvcnlDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGluc3RhbnRpYXRlIGZhY3RvcnkgY2xhc3M6ICIgKyBmYWN0b3J5Q2xhc3NOYW1lICsgIi4iLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gZmFjdG9yeQotICAgIHJldHVybiBmYWN0b3J5OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvVURESVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvVURESVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzEyOWJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVZhbGlkYXRvciBleHRlbmRzIEJhc2VWYWxpZGF0b3IKLXsKLSAgLyoqIERpc2NvdmVyeSBhcnRpZmFjdCB0eXBlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZID0gImRpc2NvdmVyeSI7Ci0KLSAgLyoqIEJpbmRpbmcgdGVtcGxhdGUgZGlzY292ZXJ5IGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSA9ICJiaW5kaW5nVGVtcGxhdGUiOwotCi0gIC8qKiB0TW9kZWwgZGlzY292ZXJ5IGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX1RNT0RFTCA9ICJ0TW9kZWwiOwotCi0gIC8qKgotICAgKiBJbml0aWFpbGl6ZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqIEBwYXJhbSBhcnRpZmFjdCAgICAgICAgYW4gcHJvZmlsZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gdWRkaVJlZmVyZW5jZSAgIGEgVURESSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgYSBSZXBvcnRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFVEREkgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBVRERJUmVmZXJlbmNlIHVkZGlSZWZlcmVuY2UsCi0gICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFVEREkgYmFzZWQgc2VydmljZSBkZXNjcmlwdGlvbi4KLSAgICogQHJldHVybiBJZiB0aGUgVURESSBlbnRyaWVzIGFyZSB2YWxpZCwgdGhlbiB0aGUgdmFsdWUgcmV0dXJuZWQgCi0gICAqICAgICAgICAgaXMgdGhlIFVSTCBmb3IgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIFdTSUV4Y2VwdGlvbiBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkCi0gICAqICAgICAgICAgd2hpbGUgcHJvY2Vzc2luZyB0aGUgVURESWVudHJpZXMuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSB2YWxpZGF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdmFsaWRhdGUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvV1NETFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWQ4ODY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETFZhbGlkYXRvciBleHRlbmRzIEJhc2VWYWxpZGF0b3IKLXsKLSAgLyoqIERlc2NyaXB0aW9uIGFydGlmYWN0IHR5cGUgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0JIAotICAvKiogRGVmaW5pdGlvbnMgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9ERUZJTklUSU9OUyA9ICJkZWZpbml0aW9ucyI7Ci0KLSAgLyoqIEltcG9ydCBkZXNjcmlwdGlvbiBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCA9ICJpbXBvcnQiOwotCi0gIC8qKiBUeXBlcyBkZXNjcmlwdGlvbiBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTID0gInR5cGVzIjsKLQotICAvKiogTWVzc2FnZSBkZXNjcmlwdGlvbiBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgLyoqIE9wZXJhdGlvbiBkZXNjcmlwdGlvbiBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotCi0gIC8qKiBQb3J0VHlwZSBkZXNjcmlwdGlvbiBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFID0gInBvcnRUeXBlIjsKLQotICAvKiogQmluZGluZyBkZXNjcmlwdGlvbiBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0KLSAgLyoqIFBvcnQgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUID0gInBvcnQiOwotCi0gIC8qKgotICAgKiBJbml0aWFpbGl6ZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqIEBwYXJhbSBhcnRpZmFjdCAgICAgICAgdGhlIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHdzZGxVUkwgICAgICAgICB0aGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCAgICB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHJlcG9ydGVyICAgICAgICBhIFJlcG9ydGVyIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgV1NETCB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgaW5pdChBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBTdHJpbmcgd3NkbFVSTCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBXU0RMIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQKLSAgICogICAgICAgICB3aGlsZSB2YWxpZGF0aW5nIGhlIFdTREwgYmFzZWQgc2VydmljZSBkZXNjcmlwdGlvbi4KLSAgICogQGRlcHJlY2F0ZWQgIC0tIHVzZSB2YWxpZGF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgdmFsaWRhdGUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Fzc2VydGlvblByb2Nlc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhM2QyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Fzc2VydGlvblByb2Nlc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotCi0KLS8qKgotICogUHJvY2VzcyBhc3NlcnRpb24uCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVzdWx0OwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVEZXRhaWxNZXNzYWdlOwotICBwcm90ZWN0ZWQgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsOwotICBwcml2YXRlIGZpbmFsIEJhc2VWYWxpZGF0b3JJbXBsIGJhc2VfdmFsaWRhdG9yOwotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblByb2Nlc3MoQmFzZVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHRoaXMuYmFzZV92YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgdm9pZCByZXNldCgpCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9IG51bGw7Ci0gICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IHRhcmdldENvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogVmVyYm9zZSBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIGlmICgoYmFzZV92YWxpZGF0b3IgIT0gbnVsbCkgJiYgYmFzZV92YWxpZGF0b3IudmVyYm9zZU9wdGlvbikKLSAgICB7Ci0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4obWVzc2FnZSk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2NjZWVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBQcm9jZXNzIGFzc2VydGlvbiB1c2luZyBXU0RMVmlzaXRvciBpbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotICBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLSAgaW1wbGVtZW50cyBXU0RMVmlzaXRvcgotewotICAvKioKLSAgICogQHBhcmFtIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IoQmFzZVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdChQYXJ0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU2VydmljZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFR5cGVzIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoSW5wdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdJbnB1dCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nT3V0cHV0IG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdGYXVsdCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0VHlwZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KERlZmluaXRpb24gb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQmluZGluZyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXJGYXVsdCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlTWVzc2FnZVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlTWVzc2FnZVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDVjYTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOSBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5DYW5kaWRhdGVJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTG9nVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGwuV1NETFZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET00yV3JpdGVyOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEppbSBDbHVuZQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIExvZ1ZhbGlkYXRvcgotewotICAvKioKLSAgKiBXU0RMIGRvY3VtZW50LgotICAqLwotICBwcml2YXRlIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQ7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgbG9nRW50cnk7Ci0gIHByb3RlY3RlZCBMb2cgbG9nOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotICBwcml2YXRlIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIHB1YmxpYyB2b2lkIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotCi0gICAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChnZXRBcnRpZmFjdFR5cGUoKSksCi0gICAgICAgICAgICAgIHJlcG9ydEFydGlmYWN0LCByZXBvcnRlcik7Ci0KLSAgICAgIHRlc3RhYmxlID0gYW5hbHl6ZXJDb25maWcuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsOwotICAgICAgdGhpcy5hbmFseXplckNvbmZpZyA9IGFuYWx5emVyQ29uZmlnOwotICAgICAgdGhpcy53c2RsRG9jdW1lbnQgPSAoV1NETERvY3VtZW50KSBhbmFseXplckNvbnRleHQuZ2V0V3NkbERvY3VtZW50KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjaW5pdChvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0LCBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3QsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QsIG9yZy53c2kud3NkbC5XU0RMRG9jdW1lbnQsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWcgPSBVdGlscy5nZXRBbmFseXplckNvbmZpZyhyZXBvcnRlcik7Ci0gICAgdGVzdGFibGUgPSAoKGFuYWx5emVyQ29uZmlnICE9IG51bGwpICYmIChhbmFseXplckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpICE9IG51bGwpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdzZGxEb2N1bWVudAotICAgKiBAcmV0dXJuIHdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgLy8gU2F2ZSBsb2cgZW50cnkgdG8gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBtZXRob2RzCi0gICAgdGhpcy5sb2dFbnRyeSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKTsKLQotICAgIC8vIEdldCByZWZlcmVuY2UgdG8gdGhlIGFuYWx5emVyIGNvbmZpZyBvYmplY3QKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCi0gICAgLyogSWYgU2VydmljZSBEZXNjcmlwdGlvbiAoV1NETC9VRERJKSBOT1Qgc3VwcGxpZWQgaW4gYW5hbHl6ZXIgY29uZmlnIE9SCi0gICAgICogU2VydmljZSBEZXNjcmlwdGlvbiBJUyBzdXBwbGllZCBhbmQgdGhlIGN1cnJlbnQgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIGl0Li4uCi0gICAgICovCi0gICAgaWYgKCghYW5hbHl6ZXJDb25maWcuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgICB8fCBtZXNzYWdlQ29ycmVsYXRlc1RvU2VydmljZSgKLSAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKSkpCi0gICAgewotICAgICAgLy8gbm93IGlubmVyIGNsYXNzZXMgbW92ZWQgb3V0IGZyb20gdGhlIHZhbGlkYXRvcgotICAgICAgLy9TdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiQiOwotICAgICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgICAvLyBQcm9jZXNzIGFzc2VydGlvbnMgZm9yIHRoaXMgYXJ0aWZhY3QgYWdhaW5zdCB0aGUgdGFyZ2V0IGNvbnRleHQKLSAgICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB3aGV0aGVyIHRoZSBtZXNzYWdlIGNvcnJlbGF0ZXMgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAgICogVXNlIHRoZSByZXF1ZXN0IHBhcnQgb2YgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpciwgZnJvbSB3aGljaCB0aGUgY29ycmVsYXRpb24gb2YgdGhlIHJlc3BvbnNlIGlzIGltcGxpZWQuCi0gICAqIEVudGl0aWVzIGZyb20gdGhlIFNlcnZpY2UgdW5kZXIgdGVzdCBhcmUgZGV0ZXJtaW5lZCBvbmNlIGZvciBhbGwuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgICAgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSBhIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGNvcnJlbGF0aW9uIHR5cGUgaXMgbm90IGFwcHJvcHJpYXRlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIG1lc3NhZ2VDb3JyZWxhdGVzVG9TZXJ2aWNlKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIFVSSVtdIGVuZHBvaW50cyA9IG51bGw7Ci0gICAgYm9vbGVhbiBjb3JyZWxhdGlvbiA9IGZhbHNlOwotCi0gICAgLyogVEVNUDogR2V0IGl0IGZyb20gYW5hbHl6ZXIgY29uZmlnIHBhc3NlZCBpbiBvbiBpbml0IG1ldGhvZAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlID0gZW50cnlDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0gICAgKi8KLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSA9IGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0KLSAgICAvLyBTZXJ2aWNlIHJlZmVyZW5jZSAKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPSBhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0gICAgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2VydmljZQotICAgICAgU2VydmljZSBzZXJ2aWNlID0KLSAgICAgICAgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBwb3J0Ci0gICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgYmluZGluZwotICAgICAgYmluZGluZyA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKChlbmRwb2ludHMgPSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKGVudHJ5Q29udGV4dCkpICE9IG51bGwKLSAgICAgICYmIHVybFBhdGhDb3JyZWxhdGlvbihlbnRyeUNvbnRleHQsIGVuZHBvaW50cykpCi0gICAgewotCi0gICAgICAvKiBJZiBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIHRoaXMgaXMgYWxsIHRoZSBjb3JyZWxhdGlvbiB0aGF0IGNhbiBiZSBkb25lLgotICAgICAgICogKE5vdGUgLSB0aGlzIGlzIGluY29tcGxldGUgY29ycmVsYXRpb24gc2luY2UgPjEgc2VydmljZSBjb3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZHBvaW50LgotICAgICAgICogIFRoZXJlZm9yZSAsIGlmIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2VydmljZXMgb24gdGhlIHNhbWUgZW5kcG9pbnQgYXBwZWFyIGluIHRoZSBsb2cgZmlsZQotICAgICAgICogIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIGFsbCB0aG9zZSBtZXNzYWdlcyB3aWxsIGJlIGFuYWx5emVkKS4KLSAgICAgICAqLwotICAgICAgaWYgKGNvcnJlbGF0aW9uVHlwZQotICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfRU5EUE9JTlQpKQotICAgICAgewotICAgICAgICBjb3JyZWxhdGlvbiA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGFsd2F5cyBhbGxvdyBHRVQgcmVxdWVzdHMgcmlnaHQgdGhyb3VnaCBpZiB0aGV5J3ZlIHBhc3NlZCBFbmRwb2ludCBDb3JyZWxhdGlvbgotICAgICAgICBTdHJpbmcgcmVxdWVzdFR5cGUgPSBnZXRIdHRwUmVxdWVzdFR5cGUoZW50cnlDb250ZXh0KTsKLSAgICAgICAgaWYgKChyZXF1ZXN0VHlwZSAhPSBudWxsKSAmJiByZXF1ZXN0VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJHRVQiKSkKLSAgICAgICAgewotICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY29ycmVsYXRpb25UeXBlIGlzIG5vdCAiZW5kcG9pbnQiIHNvIGNvbnRpbnVlIG9uIHRvIHByb2Nlc3NpbmcgZm9yIGF0IGxlYXN0IAotICAgICAgICAgIC8vICJuYW1lc3BhY2UiIGNvcnJlbGF0aW9uLi4uCi0KLSAgICAgICAgICAvLyBnZXQgdGhlIG9wZXJhdGlvbiBzaWduYXR1cmUgKGlucHV0ICYgb3V0cHV0KSBmcm9tIHJlcXVlc3QgJiByZXNwb25zZSBtZXNzYWdlcy4uLgkgICAKLSAgICAgICAgICAvLyBhbmQgZG8gYSBxdWljayBET00gcGFyc2UgCi0gICAgICAgICAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBpZiBuYW1lc3BhY2UgaXMgZm91bmQgaW4gcmVxdWVzdCBtZXNzYWdlIG9ubHkKLSAgICAgICAgICBpZiAobmFtZXNwYWNlQ29ycmVsYXRpb24oYmluZGluZywgcmVxdWVzdE1lc3NhZ2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG5hbWVzcGFjZSBmb3VuZCBhbmQgdGhlIGNvcnJlbGF0aW9uIHR5cGUgaXMgbmFtZXNwYWNlLCB0aGVuIHByb2Nlc3MgbWVzc2FnZXMKLSAgICAgICAgICAgIGlmIChjb3JyZWxhdGlvblR5cGUKLSAgICAgICAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX05BTUVTUEFDRSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIGZvdW5kIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzIG9wZXJhdGlvbiwgdGhlbiBwcm9jZXNzIG1lc3NhZ2VzCi0gICAgICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICAgICAgKG9wZXJhdGlvbkNvcnJlbGF0aW9uKGJpbmRpbmcsIHJlcXVlc3RNZXNzYWdlKSkKLSAgICAgICAgICAgICAgICAmJiAoY29ycmVsYXRpb25UeXBlCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlmIGNvbmZpZyBzY2hlbWEgd2FzIGZvbGxvd2VkIGNvcnJlY3RseQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJCYWQgY29ycmVsYXRpb24gdHlwZSBmb3VuZCBpbiBjb25maWc6ICIgKyBjb3JyZWxhdGlvblR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3JyZWxhdGlvbjsKLSAgfQotCi0gIC8qKiAKLSAgICogIENvcnJlbGF0aW9uIENoZWNrIDE6IFNlcnZpY2UgRGVzY3JpcHRpb24gZW5kcG9pbnQgdnMgSFRUUCBIZWFkZXIgKHRlc3QgMSkKLSAgICogIENoZWNrIGlmIHJlY2VpdmVySG9zdEFuZFBvcnQgZnJvbSByZXF1ZXN0IG1lc3NhZ2UgbG9nIG1hdGNoZXMgaG9zdCAmIHBvcnQgZnJvbSBXU0RMIFNPQVAgYmluZGluZyBmb3IKLSAgICogIHRoZSBTZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqICBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gaWYgcmVjZWl2ZXJIb3N0QW5kUG9ydCBmcm9tIHJlcXVlc3QgbWVzc2FnZSBsb2cgbWF0Y2hlcyAKLSAgICogICAgICAgICBob3N0ICYgcG9ydCBmcm9tIFdTREwgU09BUCBiaW5kaW5nIGZvciB0aGUgU2VydmljZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIGNvcnJlbGF0aW9uIGNoZWNrLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXQgPHJlY2VpdmVySG9zdEFuZFBvcnQ+IGZyb20gcmVxdWVzdCBtZXNzYWdlCi0gICAgU3RyaW5nIGh0dHBIb3N0QW5kUG9ydCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotICAgIC8vIFNlYXJjaCBlbmRwb2ludCBsaXN0IGZvciBhIG1hdGNoIHdpdGggPHJlY2VpdmVySG9zdEFuZFBvcnQ+Ci0KLSAgICAvKiBURU1QOiBHZXQgaXQgZnJvbSBhbmFseXplciBjb25maWcgcGFzc2VkIGluIG9uIGluaXQgbWV0aG9kCi0gICAgcmV0dXJuIGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbmRQb2ludHMoaHR0cEhvc3RBbmRQb3J0KTsKLSAgICAqLwotICAgIHJldHVybiBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEVuZFBvaW50cyhodHRwSG9zdEFuZFBvcnQpOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAyOiBTZXJ2aWNlIERlc2NyaXB0aW9uIGVuZHBvaW50IHZzIEhUVFAgSGVhZGVyICh0ZXN0IDIpCi0gICAqIAotICAgKiBVc2UgYW5hbHl6ZXIgY29uZmlnIGhvc3QgJiBwb3J0LCBwbHVzIFVSTCBwYXRoIChmcm9tIHJlcXVlc3QgbWVzc2FnZSBoZWFkZXIgSFRUUCBQT1NUKQotICAgKiB0byBsb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbmRwb2ludCBpbiB0aGUgU2VydmljZSBEZWZpbml0aW9uLgotICAgKiBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbmRwb2ludHMgYW4gYXJyYXkgb2YgZW5kcG9pbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgY29ycmVzcG9uZGluZyBlbmRwb2ludHMgYXJlIGZvdW5kIGluIHRoZSBTZXJ2aWNlIERlZmluaXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbiBjaGVjay4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB1cmxQYXRoQ29ycmVsYXRpb24oCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBVUklbXSBlbmRwb2ludHMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBjb21wYXJlczogcHJvdG9jb2wgKG11c3QgYmUgaHR0cCBmb3IgUE9TVCksIGhvc3QsIHBvcnQgYW5kIHBhdGguCi0KLSAgICAvLyBnZXQgUE9TVCBVUkkgcGF0aCBmcm9tIG1lc3NhZ2UgdXNpbmcgVG9rZW5pemVyCQotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9Ci0gICAgICBnZXRIdHRwUmVxdWVzdChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgIGlmIChyZXF1ZXN0TGluZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsgLy8gYW4gdW5leHBlY3RlZCBIVFRQIHJlcXVlc3QgdHlwZSAhCi0gICAgfQotCi0gICAgU3RyaW5nIHJlcXVlc3RQYXRoID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgIC8vIFBhdGggaW1tZWRpYXRlbHkgZm9sbG93cyBQT1NUCi0KLSAgICAvLyBjb21wYXJlIHBhdGggd2l0aCB0aG9zZSBpbiB0aGUgcHJldmlvdXMgZ2VuZXJhdGVkIFVSSSBsaXN0CQotICAgIFZlY3RvciBmaWx0ZXJlZEVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZHBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZW5kcG9pbnRzW2ldLnRvU3RyaW5nKCkuZW5kc1dpdGgocmVxdWVzdFBhdGgpKQotICAgICAgewotICAgICAgICBmaWx0ZXJlZEVuZHBvaW50cy5hZGQoZW5kcG9pbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVyZWRFbmRwb2ludHMuc2l6ZSgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyB0aGlzIFVSSSBzaG91bGQgYmUgdW5pcXVlIGluIHRoZSBXU0RMIC0gdGhlcmUgc2hvdWxkIGJlIGF0IG1vc3Qgb25lIG1hdGNoCi0gICAgLy8gYnV0IGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lLCB0aGF0J3Mgc3VmZmljaWVudCB0byBhY2NlcHQgdGhlIG1lc3NhZ2UKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAzOiBTZXJ2aWNlIERlc2NyaXB0aW9uIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIERldGVybWluZSBpZiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbiBkZWNsYXJlcyB0aGUgbmFtZXNwYWNlIHRoYXQgYXBwZWFycyBpbiB0aGUgKHJlcXVlc3Q/KSBtZXNzYWdlIHNvYXAgYm9keS4KLSAgICogTG9jYXRpb24gb2YgcmVsZXZlbnQgbmFtZXNwYWNlIDoKLSAgICogT3BlcmF0aW9uIHR5cGUgICAgICAgICAgICAgICAgICAgIAktIE1lc3NhZ2UgTmFtZXNwYWNlOiAoY29tcGFyZSB3aXRoKSAgU2VydmljZSBEZWZpbml0aW9uIE5hbWVzcGFjZToKLSAgICogKGZyb20gbWVzc2FnZT8gZW5kcG9pbnQ/IHdoZXJlPykKLSAgICogcnBjLWxpdGVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7c29hcDpCb2R5Jmd0OyBjaGlsZCBuYW1lc3BhY2UuICAgICAgICAmbHQ7c29hcGJpbmQ6Ym9keSZndDsgbmFtZXNwYWNlLgotICAgKiBkb2MtbGl0ZXJhbAkJCSAgICAgICAgICAgICAgICAgJmx0O3NvYXA6Qm9keSZndDsgY2hpbGQgbmFtZXNwYWNlLiAgICAgICB0YXJnZXROYW1lU3BhY2Ugb2Ygc2NoZW1hIHRoYXQKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgICZsdDtzb2FwOmJvZHkmZ3Q7IGNoaWxkLgotICAgKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBzdG9wIHByb2Nlc3NpbmcgdGhpcyBtZXNzYWdlIHBhaXIuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHBhcmFtIHJlcXVlc3QgYSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgZGVzY3JpcHRpb24gZGVjbGFyZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGFyZSB0aGUgCi0gICAqICAgICAgICAgc2FtZSBhcyB0aG9zZSB0aGF0IGFwcGVhciBpbiB0aGUgbWVzc2FnZSBzb2FwIGJvZHkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gbmFtZXNwYWNlQ29ycmVsYXRpb24oQmluZGluZyBiaW5kaW5nLCBEb2N1bWVudCByZXF1ZXN0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gbmFtZXNwYWNlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLQotICAgIC8vIEdldCBvcGVyYXRpb24gbmFtZXNwYWNlIGZyb20gdGhlIHJlcXVlc3Qgc29hcCBtZXNzYWdlCi0gICAgU3RyaW5nIHNvYXBPcE5TID0gZ2V0U29hcEJvZHlDaGlsZChyZXF1ZXN0KS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIEdldCBzb2FwYmluZDpiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotICAgIGlmICgoc29hcEJpbmRpbmcgPSBXU0RMVXRpbHMuZ2V0U29hcEJpbmRpbmcoYmluZGluZykpICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ1N0eWxlID0gc29hcEJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICB9Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBiaW5kaW5nIGFuZCBjaGVjayBmb3IgbmFtZXNwYWNlIG1hdGNoCi0gICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChvcGVyYXRpb25zLmhhc05leHQoKSAmJiAhKG5hbWVzcGFjZUZvdW5kKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5uZXh0KCk7Ci0KLSAgICAgIC8vIElmIHJwYy1saXRlcmFsLCB0aGVuIGxvb2sgYXQgbmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiBzb2FwYmluZDpib2R5Ci0gICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICAvLyBHZXQgc29hcGJpbmQ6Ym9keSBlbGVtZW50IAotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFdTRExVdGlscy5nZXRJbnB1dFNvYXBCb2R5KGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICAgIGlmICgoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKHNvYXBPcE5TKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lc3BhY2VGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICBlbHNlIGlmIChXU0RMVXRpbHMuaXNEb2NMaXRlcmFsKGJpbmRpbmdTdHlsZSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICB7Ci0gICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgICAgIC8vIEdldCBmaXJzdCBwYXJ0IG5hbWUgZnJvbSBzb2FwYmluZDpib2R5IGVsZW1lbnQgcGFydHMgYXR0cmlidXRlCi0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIGZyb20gdGhlIG1lc3NhZ2UgICAgICAgICAgIAotICAgICAgICBNYXAgcGFydHNNYXAgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkpCi0gICAgICAgICAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBhcnRzSXRlcmF0b3IgPSBwYXJ0c01hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHBhcnQgbmFtZSB3YXNuJ3Qgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQsIHRoZW4gcHJvY2VzcyBqdXN0IHRoZSBmaXJzdCBvbmUKLSAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHBhcnRDb3VudCA9IDE7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Q291bnQgJiYgIW5hbWVzcGFjZUZvdW5kOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHBhcnRzSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAvLyBJZiBwYXJ0IG5hbWUgbWF0Y2hlcyBvciB0aGVyZSBpcyBubyBwYXJ0IG5hbWUsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgIHx8ICgocGFydE5hbWUgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0TmFtZSgpLmVxdWFscyhwYXJ0TmFtZSkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAmJiAocGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhzb2FwT3BOUykpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotICB9Ci0KLSAgLyoqIAotICAqIENvcnJlbGF0aW9uIENoZWNrIDQgOiBTZXJ2aWNlIERlc2NyaXB0aW9uICJvcGVyYXRpb24iCi0gICoKLSAgKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBjb250ZW50IG1hdGNoZXMgYW55IG9mIHRoZSBjYW5kaWRhdGUgb3BlcmF0aW9uIGRlZmluaXRpb25zIAotICAqIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbi4KLSAgKiAgCi0gICogRm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UsIGxvb2sgZm9yIHRoZSBzb2FwIGJvZHkgY2hpbGQgZWxlbWVudCBuYW1lCi0gICogaW4gdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIG9wZXJhdGlvbiBuYW1lcy4KLSAgKiBAcGFyYW0gYmluZGluZyAgICAgICAgYSBiaW5kaW5nLgotICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1lc3NhZ2UgY29udGVudCBtYXRjaGVzIGFueSBvZiB0aGUgY2FuZGlkYXRlIAotICAqICAgICAgICAgb3BlcmF0aW9uIGRlZmluaXRpb25zIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgCi0gICogICAgICAgICBTZXJ2aWNlIERlc2NyaXB0aW9uLgotICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gb3BlcmF0aW9uQ29ycmVsYXRpb24oCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIERvY3VtZW50IHJlcXVlc3RNZXNzYWdlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gb3BlcmF0aW9uRm91bmQgPSBmYWxzZTsKLQotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotCi0gICAgLy8gR2V0IHNvYXBiaW5kOmJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IG51bGw7Ci0gICAgaWYgKChzb2FwQmluZGluZyA9IFdTRExVdGlscy5nZXRTb2FwQmluZGluZyhiaW5kaW5nKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nU3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBmcm9tIHRoZSBzb2FwIGJvZHkKLSAgICBFbGVtZW50IHNvYXBCb2R5Q2hpbGQgPSBnZXRTb2FwQm9keUNoaWxkKHJlcXVlc3RNZXNzYWdlKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIGEgY2hpbGQgZWxlbWVudCwgdGhlbiBjaGVjayBpdAotICAgIGlmIChzb2FwQm9keUNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBzb2FwQm9keUNoaWxkLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAvLyBHZXQgb3BlcmF0aW9uIFFOYW1lCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9Ci0gICAgICAgIG5ldyBRTmFtZShzb2FwQm9keUNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLCBvcGVyYXRpb25OYW1lKTsKLQotICAgICAgLy8gR28gdGhyb3VnaCBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgYmluZGluZyBhbmQgY2hlY2sgZm9yIG5hbWVzcGFjZSBtYXRjaAotICAgICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG9wZXJhdGlvbnMuaGFzTmV4dCgpICYmICEob3BlcmF0aW9uRm91bmQpKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPQotICAgICAgICAgIChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLQotICAgICAgICAvLyBJZiBycGMtbGl0ZXJhbCwgdGhlbiBsb29rIGF0IG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gc29hcGJpbmQ6Ym9keQotICAgICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXBiaW5kOmJvZHkgZWxlbWVudCAKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbk5hbWUpKQotICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgIGVsc2UgaWYgKFdTRExVdGlscy5pc0RvY0xpdGVyYWwoYmluZGluZ1N0eWxlLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IG51bGw7Ci0KLSAgICAgICAgICAvLyBHZXQgZmlyc3QgcGFydCBuYW1lIGZyb20gc29hcGJpbmQ6Ym9keSBlbGVtZW50IHBhcnRzIGF0dHJpYnV0ZQotICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZnJvbSB0aGUgbWVzc2FnZSAgICAgICAgICAgCi0gICAgICAgICAgTWFwIHBhcnRzTWFwID0gbnVsbDsKLSAgICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKSkKLSAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IG5hbWUgd2Fzbid0IHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGVuIHByb2Nlc3MganVzdCB0aGUgZmlyc3Qgb25lCi0gICAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRDb3VudCAmJiAhb3BlcmF0aW9uRm91bmQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgLy8gSWYgcGFydCBuYW1lIG1hdGNoZXMgb3IgdGhlcmUgaXMgbm8gcGFydCBuYW1lLCB0aGVuIGNoZWNrIG5hbWVzcGFjZQotICAgICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgfHwgKChwYXJ0TmFtZSAhPSBudWxsKSAmJiAocGFydC5nZXROYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICYmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKG9wZXJhdGlvblFOYW1lKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBvcGVyYXRpb24gdG8gZmluZCBhIG1hdGNoCi0gICAgcmV0dXJuIG9wZXJhdGlvbkZvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgICAgICAgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0ICBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsLgotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0RWxlbWVudExvY2F0aW9uKCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIGFkZGl0aW9uYWwgZW50cnkgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBzZXQgbm90QXBwbGljYWJsZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmdldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KCkuZ2V0V1NETElucHV0KCkgIT0gbnVsbAotICAgICAgJiYgIXRlc3RBc3NlcnRpb24uZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKS5nZXRXU0RMSW5wdXQoKS5lcXVhbHMoIm5vbmUiKQotICAgICAgJiYgYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5vdEFwcGxpY2FibGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBub3RBcHBsaWNhYmxlOwotICB9Ci0KLQotICAvKioKLSAgICogR2V0IFBPU1QgcmVxdWVzdC4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXIgYW4gSFRUUCAKLSAgICogQHJldHVybiBQT1NUIHJlcXVlc3QuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFBvc3RSZXF1ZXN0KFN0cmluZyBodHRwSGVhZGVyKQotICB7Ci0gICAgLy9SZXF1ZXN0LUxpbmUgICA9IE1ldGhvZCBTUCBSZXF1ZXN0LVVSSSBTUCBIVFRQLVZlcnNpb24gQ1JMRgotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXJ0TGluZS5zdGFydHNXaXRoKCJQT1NUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0TGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCByZXF1ZXN0LgotICAgKiBAcGFyYW0gaHR0cEhlYWRlciBhbiBIVFRQIAotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdC4KLSAgKi8KLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0SHR0cFJlcXVlc3QoU3RyaW5nIGh0dHBIZWFkZXIpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0gICAgVmVjdG9yIHJlcXVlc3RMaW5lID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoaHR0cEhlYWRlciwgIlxuXHJcZiIpOwotCi0gICAgaWYgKGh0dHBNZXNzYWdlVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnRMaW5lLnN0YXJ0c1dpdGgoIlBPU1QiKSB8fCBzdGFydExpbmUuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXF1ZXN0TGluZSA9IG51bGw7IC8vIHNpZ25pZnkgbm90IFBPU1Qgb3IgR0VUCi0gICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3RMaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHJlcXVlc3QgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SHR0cFJlcXVlc3RUeXBlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgaHR0cFJlcXVlc3RUeXBlID0gbnVsbDsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3RhcnRMaW5lVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihzdGFydExpbmUsICJcdTAwMjAiKTsKLSAgICAgIGlmIChzdGFydExpbmVUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgewotICAgICAgICBodHRwUmVxdWVzdFR5cGUgPSBzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBodHRwUmVxdWVzdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc09uZVdheVJlc3BvbnNlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICBib29sZWFuIG9uZXdheSA9IGZhbHNlOwotCi0gICAgLy8gVEVNUDogSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UgYW5kIHRoZXJlIGlzIG5vIGNvbnRlbnQsIHRoZW4gc2V0IG9uZS13YXkgdG8gdHJ1ZQotICAgIC8vIFRFTVA6IE5lZWQgdG8gZmluZCBhIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3BvbnNlIGlzIGZvciBhIG9uZS13YXkgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAmJiBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgb25ld2F5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb25ld2F5OwotICB9Ci0KLSAgLyoqCi0gICAqIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkLgotICAgKgotICAgKiBWYWxpZGF0ZXMgdGhlIGRvYy1saXQgbWVzc2FnZXMgYWdhaW5zdCB0aGUgc2NoZW1hIGZvdW5kIGluIGEgY2FuZGlkYXRlIHdzZGwgZG9jdW1lbnQuCi0gICAqCi0gICAqIElkZW50aWZ5IChvciBiZSBnaXZlbikgYSByZWZlcmVuY2UgaW4gdGhlIHdzZGwgdG8gZWxlbWVudHMgKGZvdW5kIGluICZsdDt3c2RsOnR5cGVzJmd0OyZsdDtzY2hlbWEmZ3Q7Li4uKQotICAgKiB0aGF0IGFyZSBpbW1lZGlhdGUgY2hpbGRyZW4gZWxlbWVudHMgaW4gdGhlIHNvYXAgYm9keS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGRvY3VtZW50IGxpdGVyYWwgbWVzc2FnZSBpcyBjb21wbGlhbnQgdG8gdGhlIAotICAgKiAgICAgICAgIHNjaGVtYSBmb3VuZCBpbiBhIGNhbmRpZGF0ZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHBhcnNpbmcgcHJvYmxlbSBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgdXNlIGEgdmFsaWRhdGluZyBwYXJzZXIgdGhhdCBpcyBjYXBhYmxlIG9mIGFjY2VwcHRpbmcgbXVsdGlwbGUgc2NoZW1hIHJlZmVyZW5jZXMKLSAgICAvLyBwcm9ncmFtbWF0aWNhbGx5LiBUaGVuLCBldmVyeSBzY2hlbWEgaW4gY2FuZGlkYXRlIHdzZGwgY2FuIGJlIHBhc3NlZCBpbiB0byB0aGUgdmFsaWRhdG9yLiBUaGlzIGF2b2lkcyB0aGUKLSAgICAvLyBuZWVkIHRvIHBpbnBvaW50IGEgcGFydGljdWxhciBzY2hlbWEgZWxlbWVudCBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcywgY29ycmVzcG9uZGluZyB0byB0aGUgCi0gICAgLy8gd3NkbDpvcGVyYXRpb24gYmVpbmcgdXNlZC4gVGhlIHBpbnBvaW50aW5nIGlzIGFuIGluY29tcGxldGUgd29ya2Fyb3VuZCBmb3IgcGFyc2VycyBub3QgY2FwYWJsZSAKLSAgICAvLyBvZiBhY2NlcHRpbmcgYXJyYXlzIG9mIHNjZWhtYSByZWZlcmVuY2VzIAotICAgIC8vIFsgaS5lLiB0aGUgRE9NIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BIFNPVVJDRSwgT2JqZWN0W10gey4uLn0pIF0KLSAgICAvLyBnZXQgYWxsIHhzOnNjaGVtYSBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcyAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gYWRkIGVhY2ggPHNjaGVtYT4gdG8gYW4gYXJyYXkgYW5kIHBhc3MgdGhpcyBhcnJheSB0byB0aGUgdmFsaWRhdGluZyBwYXJzZXIKLSAgICAvLyB3aGVuIHZhbGlkYXRpbmcgdGhlL2VhY2ggc29hcCBib2R5IGNoaWxkLgotCi0gICAgLy8gdXNlIHRoZSByZWZlcmVuY2VkIFdTREwgZmlsZSBhbmQgaXRzIGltcG9ydGVkIGZpbGVzIHRvIGZpbmQgc2NoZW1hcwotICAgIExpc3Qgc2NoZW1hV1NETHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBpbmxpbmVTY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3Qgc2NoZW1hU3RyaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIERlZmluaXRpb25bXSBhbGxEZWZzID0KLSAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBmb3IgKGludCB0aGlzRGVmID0gMDsgdGhpc0RlZiA8IGFsbERlZnMubGVuZ3RoOyB0aGlzRGVmKyspCi0gICAgewotICAgICAgc2NoZW1hV1NETHMuYWRkKGFsbERlZnNbdGhpc0RlZl0uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIH0KLSAgICBJdGVyYXRvciBmaWxlSXRlcmF0b3IgPSBzY2hlbWFXU0RMcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIHBhcnNlIGZpbGUgaWYgcG9zc2libGUKLSAgICAgIERvY3VtZW50IHdzZGxEb2MgPSBudWxsOwotICAgICAgU3RyaW5nIHdzZGxVUkkgPSAoU3RyaW5nKSBmaWxlSXRlcmF0b3IubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdzZGxEb2MgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHdzZGxVUkksIG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnQgcm9vdCA9IHdzZGxEb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kIHRoZSBzY2hlbWEKLSAgICAgIE5vZGVMaXN0IHNjaGVtYUVsZW1lbnRzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldExvY2FsUGFydCgpKTsKLQotICAgICAgZm9yIChpbnQgZWxlbSA9IDA7IGVsZW0gPCBzY2hlbWFFbGVtZW50cy5nZXRMZW5ndGgoKTsgZWxlbSsrKQotICAgICAgeyAgICAgCi0gICAgICAgIEVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpIHNjaGVtYUVsZW1lbnRzLml0ZW0oZWxlbSk7Ci0gICAgICAgIC8vIGNvcHlpbmcgYWxsIHRoZSBOUyBkZWNsYXJhdGlvbnMgZnJvbSB3c2RsOmRlZmluaXRpb25zIHdzZGw6dHlwZXMKLSAgICAgICAgY29weU5TRGVjbGFyYXRpb25zKHJvb3QsIHNjaGVtYSk7Ci0gICAgICAgIGNvcHlOU0RlY2xhcmF0aW9ucygoRWxlbWVudCkgc2NoZW1hLmdldFBhcmVudE5vZGUoKSwgc2NoZW1hKTsKLSAgICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgICByZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAgIGlubGluZVNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBYZXJjZXMgcGFyc2VyIE9OTFkgYWNjZXB0cyBhbiBhcnJheQotICAgIC8vIG9mIHNjaGVtYXMgd2l0aCB1bmlxdWUgbmFtZXNwYWNlcy4KLSAgICBpZiAoIWR1cGxpY2F0ZU5hbWVzcGFjZXNEZXRlY3RlZChpbmxpbmVTY2hlbWFzKSkKLSAgICB7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIEl0ZXJhdG9yIGkgPSBpbmxpbmVTY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7IAotICAgICAgICBTdHJpbmcgc2NoZW1hU3RyaW5nID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgICAgc2NoZW1hU3RyaW5ncy5hZGQoc2NoZW1hU3RyaW5nKTsKLSAgICAgIH0KLQotICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKQotICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKGVsZW1lbnRMaXN0ID09IG51bGwgfHwgZWxlbWVudExpc3QuZ2V0TGVuZ3RoKCkgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc29hcCBib2R5ICEKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBwcm9iYWJseSBhbiBlcnJvciBjb25kaXRpb24gdGhvdWdoCi0gICAgICB9Ci0KLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2hpbGRMaXN0ID0gKChFbGVtZW50KWVsZW1lbnRMaXN0Lml0ZW0oMCkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGNoaWxkID0gMDsgY2hpbGQgPCBzb2FwQm9keUNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgY2hpbGQrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBzb2FwQm9keUNoaWxkID0gc29hcEJvZHlDaGlsZExpc3QuaXRlbShjaGlsZCk7Ci0gICAgICAgIGlmIChzb2FwQm9keUNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBkbyBhbGwgZm9yIG5vdwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCBlbGVtZW50IHRyZWUgdG8gU3RyaW5nCi0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZUNvbnRlbnQgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhzb2FwQm9keUNoaWxkKTsKLSAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBjaGlsZCBlbGVtZW50LCB2YWxpZGF0aW5nIGFnYWluc3QgdGhlIHNjaGVtYSAKLSAgICAgICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2VDb250ZW50LCBzY2hlbWFTdHJpbmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWxlZAotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJWYWxpZGF0aW5nIFBhcnNpbmcgcHJvYmxlbSIsIGUpOwotICAgICAgICAgICAgLy8gQmFkIHRoaW5ncyBoYXZlIGhhcHBlbmVkCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9ICAgCi0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gY2hpbGQgYSBzdHJpcHBlZCBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNvcHlOU0RlY2xhcmF0aW9ucyhFbGVtZW50IHBhcmVudCwgRWxlbWVudCBjaGlsZCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gcGFyZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBub2RlSWQgPSAwOyBub2RlSWQgPCBub2RlTWFwLmdldExlbmd0aCgpOyBub2RlSWQrKykKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFwLml0ZW0obm9kZUlkKTsKLQotICAgICAgaWYgKChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkKLSAgICAgICAgJiYgKG5vZGUuZ2V0Tm9kZU5hbWUoKS5zdGFydHNXaXRoKCJ4bWxuczoiKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgLy8gSWYgYW4gTlMgYmVpbmcgY29waWVkIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY2hpbGQgZWxlbWVudCBoYXMsIGNvcHkgaXQKLSAgICAgICAgaWYgKCFjaGlsZC5nZXROb2RlTmFtZSgpLnN0YXJ0c1dpdGgoCi0gICAgICAgICAgbm9kZU5hbWUuc3Vic3RyaW5nKG5vZGVOYW1lLmluZGV4T2YoIjoiKSArIDEpICsgIjoiKSkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShub2RlTmFtZSwgbm9kZS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVwbGFjZXMgYWxsIHJlbGF0aXZlIFVSSXMgZm9yIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBzY2hlbWEgYW4geHNkOnNjaGVtYSBlbGVtZW50LgotICAgKiBAcGFyYW0gd3NkbFVSSSBhbiBVUkkgb2YgV1NETCB0aGF0IGNvbnRhaW5zIHhzZDpzY2hlbWEgYmVpbmcgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlcGxhY2VSZWxhdGl2ZVVSSXMoRWxlbWVudCBzY2hlbWEsIFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgLy8gUmV0cmlldmluZyBhbGwgeHNkOmltcG9ydCBlbGVtZW50cwotICAgIE5vZGVMaXN0IGltcG9ydHMgPSBzY2hlbWEuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgIFdTSVRhZy5FTEVNX1hTRF9JTVBPUlQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICBXU0lUYWcuRUxFTV9YU0RfSU1QT1JULmdldExvY2FsUGFydCgpKTsKLSAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW1wID0gKEVsZW1lbnQpIGltcG9ydHMuaXRlbShpKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZQotICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbXAsIFdTSVRhZy5BVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQKLSAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUcnlpbmcgdG8gY3JlYXRlIGFuIFVSSSBvYmplY3QgdXNpbmcgYXR0cmlidXRlJ3MgdmFsdWUKLSAgICAgICAgVVJJIHVyaSA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdXJpID0gbmV3IFVSSShzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gYWJzb2x1dGUgVVJJICh0aGUgVVJJIGNvbnN0cnVjdG9yIHRocm93cyB0aGUKLSAgICAgICAgLy8gTWFsZm9ybWVkVVJJRXhjZXB0aW9uKSwgY3JlYXRpbmcgdGhlIGFic29sdXRlIFVSSSB1c2luZyB3c2RsVVJJCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuZXdVUkkgPSB3c2RsVVJJLnN1YnN0cmluZygwLCB3c2RsVVJJLmxhc3RJbmRleE9mKCIvIikgKyAxKQotICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVyaSA9IG5ldyBVUkkobmV3VVJJKTsKLSAgICAgICAgICAgIC8vIFNldHRpbmcgYSBuZXcgVVJJIGFzIGEgdmFsdWUgZm9yIHRoZSBzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLnNldFZhbHVlKHVyaS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYmluZGluZyBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgU09BUCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGRvYyBhIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYW55IGJpbmRpbmcgb3BlcmF0aW9uIG1hdGNoZWQsIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uTWF0Y2goRW50cnlUeXBlIGVudHJ5VHlwZSwgRG9jdW1lbnQgZG9jKSAKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgU09BUCBCb2R5IGNoaWxkIGVsZW1lbnQKLSAgICAgIFFOYW1lIG9wZXJhdGlvbiA9IGdldE9wZXJhdGlvbkZyb21NZXNzYWdlKGRvYyk7Ci0gICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBycGNCaW5kaW5nT3BzID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLSAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5VHlwZSwgb3BlcmF0aW9uLCBycGNCaW5kaW5nT3BzKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIFJQQyBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICBpZihiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgZG9jdW1lbnQgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0gICAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgICAgIGdldERvY0xpdE9wZXJhdGlvbnMoZW50cnlUeXBlLCBvcGVyYXRpb24sIGRvY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0gcG90ZW50aWFsRG9jTGl0T3BzWzBdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1hdGNoIGVpdGhlciBJbnB1dCBvciBPdXRwdXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlRW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIHNvYXAgbWVzc2FnZS4KLSAgICogQHBhcmFtIG9wIGJpbmRpbmcgb3BlcmF0aW9ucy4KLSAgICogQHJldHVybiBtYXRjaGVkIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldE9wZXJhdGlvbk1hdGNoKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlRW50cnlUeXBlLAotICAgIERvY3VtZW50IHNvYXBNZXNzYWdlLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSBvcCkKLSAgewotICAgIC8vIEdldCBvcGVyYXRpb24gZnJvbSBtZXNzYWdlCi0gICAgUU5hbWUgb3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uRnJvbU1lc3NhZ2Uoc29hcE1lc3NhZ2UpOwotICAgIC8vIGxpc3Qgb2YgUU5hbWVzCi0KLSAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTWF0Y2gobWVzc2FnZUVudHJ5VHlwZSwgb3BlcmF0aW9uLCBvcCk7Ci0gIH0KLQotICAvKioKLSAgICogTWF0Y2ggZWl0aGVyIElucHV0IG9yIE91dHB1dC4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeVR5cGUgbWVzc2FnZSBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIFNPQVAgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25NYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBRTmFtZSBvcGVyYXRpb24sCi0gICAgQmluZGluZ09wZXJhdGlvbltdIG9wKQotICB7Ci0gICAgUU5hbWUgY2hlY2tPcGVyYXRpb247Ci0KLSAgICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgb3AubGVuZ3RoOyBrKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICBuYW1lID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgbmFtZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiUmVzcG9uc2UiOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBzb2FwOmJvZHkKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U29hcEJvZHkoZXh0ZW5zaWJsZXMpOwotICAgICAgaWYgKHNvYXBCb2R5ID09IG51bGwpCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gbmV3IFFOYW1lKG5hbWUpOwotICAgICAgZWxzZQotICAgICAgICBjaGVja09wZXJhdGlvbiA9IG5ldyBRTmFtZShzb2FwQm9keS5nZXROYW1lc3BhY2VVUkkoKSwgbmFtZSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCAmJiBvcGVyYXRpb24uZXF1YWxzKGNoZWNrT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBNYXRjaCBlaXRoZXIgSW5wdXQgb3IgT3V0cHV0LgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5VHlwZSBhIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIGEgc29hcCBtZXNzYWdlLgotICAgKiBAcGFyYW0gb3AgYmluc2luZyBvcGVyYXRpb25zLgotICAgKiBAcmV0dXJuIG1hdGNoZWQgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBEb2N1bWVudCBzb2FwTWVzc2FnZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIHsKLSAgICBNYXAgcGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHNvYXBNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLQotICAgIC8vIExvb2sgZm9yIGEgY2FuZGlkYXRlIG9wZXJhdGlvbiBpbiB0aGUgd3NkbCB0aGF0IG1hdGNoZXMgdGhpcyBzaWduYXR1cmUuCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICB3c2RsTWVzc2FnZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgd3NkbE1lc3NhZ2UgPSBiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gICAgICAvLyBBREQ6IGNoZWNrIGZvciBjYXNlIHdoZW4gcmVzcG9uc2UgbWVzc2FnZSBpcyBhIGZhdWx0Ci0KLSAgICAgIGlmIChzYW1lUGFydHMocGFydHMsIHdzZGxNZXNzYWdlLCBnZXRTb2FwSGVhZGVyKGV4dGVuc2libGVzKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoYmluZGluZ09wKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiogCi0gICAqIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCguLikuCi0gICAqIAotICAgKiBGaW5kIG9uZSBvciBtb3JlIG1hdGNoaW5nIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHRoZSBXU0RMIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAqIGdpdmVuIHJlcXVlc3QtcmVzcG9uc2Ugc2lnbmF0dXJlLgotICAgKiAKLSAgICogVGhpcyBvdmVybG9hZGVkIHZlcnNpb24gaXMgaW50ZW5kZWQgZm9yIHBvc3NpYmxlIENvcnJlbGF0aW9uIG9ubHkgKG5vdCBhc3NlcnRpb25zKSwKLSAgICogc2luY2UgaXQgY2hlY2tzIGZvciBhbiBvcGVyYXRpb24gc2lnbmF0dXJlIG9uIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKiBBc3NlcnRpb25zIG5vdyBjaGVjayByZXF1ZXN0ICYgcmVzcG9uc2UgbWVzc2FnZXMgaW5kZXBlbmRlbnRseS4gCi0gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlc3BvbnNlTWVzc2FnZSBhIHJlc3BvbnNlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICAvL3ByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25QYXJ0c01hdGNoKAotICAvLyAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UsCi0gIC8vICBEb2N1bWVudCByZXNwb25zZU1lc3NhZ2UsCi0gIC8vICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIC8vewotICAvLyAgTWFwIGluUGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHJlcXVlc3RNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLSAgLy8gIE1hcCBvdXRQYXJ0cyA9IGdldFBhcnRMaXN0RnJvbU1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTsKLSAgLy8gIC8vIGxpc3Qgb2YgUU5hbWVzCi0gIC8vCi0gIC8vICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAvLyAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgLy8gIHsKLSAgLy8KLSAgLy8gICAgLy9NYXAgd3NkbEZhdWx0UGFydHMgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxJbk1lc3NhZ2UgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxPdXRNZXNzYWdlID0gbnVsbDsKLSAgLy8KLSAgLy8gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBvcFtrXTsKLSAgLy8gICAgaWYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gIC8vICAgIHsKLSAgLy8gICAgICB3c2RsSW5NZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAvLyAgICB9Ci0gIC8vCi0gIC8vICAgIGlmIChiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgIT0gbnVsbCkKLSAgLy8gICAgewotICAvLyAgICAgIHdzZGxPdXRNZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgLy8gICAgfQotICAvLyAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gIC8vICAgIC8vIEFERDogY2hlY2sgZm9yIGNhc2Ugd2hlbiByZXNwb25zZSBtZXNzYWdlIGlzIGEgZmF1bHQKLSAgLy8KLSAgLy8gICAgaWYgKHNhbWVQYXJ0cyhpblBhcnRzLAotICAvLyAgICAgIHdzZGxJbk1lc3NhZ2UsCi0gIC8vICAgICAgZ2V0U29hcEhlYWRlcihiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgewotICAvLyAgICAgIC8vIG1hdGNoIG9uIHRoZSByZXF1ZXN0IC0gbm93IGNoZWNrIHJlc3BvbnNlIGlmIGl0cyBub3QgYSBmYXVsdAotICAvLyAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgIT0gbnVsbCAmJiBpc0ZhdWx0KHJlc3BvbnNlTWVzc2FnZSkpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAvLyAgICAgIH0KLSAgLy8gICAgICBlbHNlIGlmICgKLSAgLy8gICAgICAgIHNhbWVQYXJ0cygKLSAgLy8gICAgICAgICAgb3V0UGFydHMsCi0gIC8vICAgICAgICAgIHdzZGxPdXRNZXNzYWdlLAotICAvLyAgICAgICAgICBnZXRTb2FwSGVhZGVyKAotICAvLyAgICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICAvLyBJdCBkb2VzIG1hdGNoIHNvIHRyZWF0IHRoaXMgYXMgYSByZWxldmFudCBtZXNzYWdlIHBhaXIuIAotICAvLyAgICAgICAgLy8gTGV0IHRoZSBtZXNzYWdlIHRocm91Z2ggZm9yIHZhbGlkYXRpb24uCi0gIC8vICAgICAgICAvL0FERDogY291bGQgcGFzcyB0aGUgb3BlcmF0aW9ucyBsaXN0IGJhY2sgdG8gdGhlIGVudHJ5Q29udGV4dCBmb3IgdGhlIG1lc3NhZ2UuCi0gIC8vICAgICAgICByZXR1cm4gKGJpbmRpbmdPcCk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vICByZXR1cm4gbnVsbDsKLSAgLy99Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBCb2R5IGdldFNvYXBCb2R5KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICAvLyBGaW5kIHRoZSBzb2FwIGJvZHkKLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKFNPQVBCb2R5KSBleHRFbGVtOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBnZXRTb2FwQm9keSgKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBzb2FwQm9keTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFNPQVBIZWFkZXIgZnJvbSBhIExpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dGVuc2libGVzIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRoZSBTT0FQSGVhZGVyIGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBIZWFkZXIgZ2V0U29hcEhlYWRlcihMaXN0IGV4dGVuc2libGVzKQotICB7Ci0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gbnVsbDsKLQotICAgIC8vIGZpbmQgdGhlIHNvYXAgaGVhZGVyCi0gICAgaWYgKGV4dGVuc2libGVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaSA9IGV4dGVuc2libGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkgJiYgc29hcEhlYWRlciA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaS5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBjKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGZpcnN0IHBhcnQgbmFtZSBmcm9tIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEZpcnN0UGFydE5hbWUoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLSAgICBMaXN0IGV4dExpc3QgPSBudWxsOwotICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbGlzdCBvZiBwYXJ0cyBieSBmaW5kaW5nIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQKLSAgICBpZiAoKGV4dExpc3QgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSkKLSAgICAgICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwYXJ0c0xpc3QgPSBudWxsOwotICAgICAgSXRlcmF0b3IgZXh0SXRlcmF0b3IgPSBleHRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXh0SXRlcmF0b3IuaGFzTmV4dCgpICYmIChwYXJ0TmFtZSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dEVsZW1lbnQgPSBleHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKHBhcnRzTGlzdCA9ICgoU09BUEJvZHkpIGV4dEVsZW1lbnQpLmdldFBhcnRzKCkpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgZG9jIGxpdGVyYWwgYmluZGluZyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgcGFydCBuYW1lCi0gICAgICAgICAgICBpZiAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnROYW1lOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb25bXSBnZXREb2NMaXRPcGVyYXRpb25zKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlVHlwZSwKLSAgICBRTmFtZSBwYXJ0RWxlbWVudFFOYW1lLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSB3c2RsT3BlcmF0aW9ucykKLSAgewotCi0gICAgaWYgKG1lc3NhZ2VUeXBlLmlzVHlwZShFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0SW5wdXREb2NMaXRPcGVyYXRpb25zKHBhcnRFbGVtZW50UU5hbWUsIHdzZGxPcGVyYXRpb25zKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZVR5cGUuaXNUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0T3V0cHV0RG9jTGl0T3BlcmF0aW9ucyhwYXJ0RWxlbWVudFFOYW1lLCB3c2RsT3BlcmF0aW9ucyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsgLy8gc2hvdWxkIGJlIG9uZSBvciB0aGUgb3RoZXIKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb25bXSBnZXRJbnB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHdzZGxPcGVyYXRpb25zW2ldLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAvLyBJZiBTT0FQIEJvZHkgY2hpbGQgZWxlbWVudCBpcyBub3QgcHJlc2VudCBhbmQgd3NkbDptZXNzYWdlIGRvZXMgbm90IGhhdmUgYW55IHdzZGw6cGFydHMsIHRoYXQgaXMgdGhlIG1hdGNoIAotICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFydHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3RlbnRpYWxPcHMuYWRkKHdzZGxPcGVyYXRpb25zW2ldKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHBhcnRzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgUGFydCBuZXh0UGFydCA9IChQYXJ0KSBwYXJ0c0l0Lm5leHQoKTsKLSAgICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZS5lcXVhbHMobmV4dFBhcnQuZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gbWF0Y2hpbmcgcGFydCBmb3VuZCAoZG9jLWxpdCkgLSBhZGQgdG8gbGlzdCBvZiBwb3NzaWJsZSBvcGVyYXRpb24gbWF0Y2hlcwotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChCaW5kaW5nT3BlcmF0aW9uW10pIHBvdGVudGlhbE9wcy50b0FycmF5KG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbltdIGdldE91dHB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIC8vIElmIFNPQVAgQm9keSBjaGlsZCBlbGVtZW50IGlzIG5vdCBwcmVzZW50IGFuZCB3c2RsOm1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhbnkgd3NkbDpwYXJ0cywgdGhhdCBpcyB0aGUgbWF0Y2gKLSAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcnRzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBwYXJ0c0l0ID0gbWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwYXJ0c0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgbmV4dFBhcnQgPSAoUGFydCkgcGFydHNJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUuZXF1YWxzKG5leHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhcnQgZm91bmQgKGRvYy1saXQpIC0gYWRkIHRvIGxpc3Qgb2YgcG9zc2libGUgb3BlcmF0aW9uIG1hdGNoZXMKLSAgICAgICAgICAgIHBvdGVudGlhbE9wcy5hZGQod3NkbE9wZXJhdGlvbnNbaV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBwb3RlbnRpYWxPcHMudG9BcnJheShuZXcgQmluZGluZ09wZXJhdGlvblswXSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcGFyZSBzb2FwIG1lc3NhZ2UgZWxlbWVudCBwYXJ0IG5hbWVzIHdpdGggUGFydHMgZnJvbSBzcGVjaWZpZWQgd3NkbCBPcGVyYXRpb24KLSAgICovCi0gIC8vcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cyhIYXNoU2V0IG1lc3NhZ2VQYXJ0cywgTWFwIHdzZGxQYXJ0cykKLSAgLy97Ci0gIC8vCi0gIC8vICAvLyBsb29rIGZvciB0aGUgc29hcC1tZXNzYWdlIG9wZXJhdGlvbiBzaWduYXR1cmUKLSAgLy8gIEl0ZXJhdG9yIGkgPSB3c2RsUGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgLy8gIC8vIGJ1aWxkIGEgc2V0IG9mIFBhcnQgbmFtZXMKLSAgLy8gIEhhc2hTZXQgaCA9IG5ldyBIYXNoU2V0KCk7Ci0gIC8vICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gIC8vICB7Ci0gIC8vICAgIFBhcnQgcCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgLy8gICAgaC5hZGQocC5nZXROYW1lKCkpOwotICAvLyAgfQotICAvLwotICAvLyAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKHVub3JkZXJlZCkKLSAgLy8gIHJldHVybiAoaC5lcXVhbHMobWVzc2FnZVBhcnRzKSk7Ci0gIC8vfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHNvYXAgbWVzc2FnZSBlbGVtZW50IHBhcnQgbmFtZXMgd2l0aCBQYXJ0cyBmcm9tIHNwZWNpZmllZCB3c2RsIE9wZXJhdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cygKLSAgICBNYXAgbWVzc2FnZVBhcnRzLAotICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UsCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyKQotICB7Ci0KLSAgICBTdHJpbmcgc29hcEhlYWRlclBhcnQgPSBudWxsOwotICAgIGlmIChzb2FwSGVhZGVyICE9IG51bGwpCi0gICAgICBzb2FwSGVhZGVyUGFydCA9IHNvYXBIZWFkZXIuZ2V0UGFydCgpOwotCi0gICAgLy8gY2hlY2sgbnVsbCBjb25kaXRpb25zCi0gICAgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsICYmIHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7IC8vIHNpbXBsZSBlcXVhbGl0eSB0ZXN0Ci0gICAgfQotICAgIGVsc2UgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsIHx8IHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIC8vTGlzdCB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgTWFwIHdzZGxQYXJ0cyA9IG51bGw7Ci0gICAgaWYgKHdzZGxNZXNzYWdlLmdldFBhcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgLy8gbG9vayBmb3IgdGhlIHNvYXAtbWVzc2FnZSBvcGVyYXRpb24gc2lnbmF0dXJlCi0gICAgICBJdGVyYXRvciBpID0gd3NkbFBhcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAvLyBidWlsZCBhIHNldCBvZiBQYXJ0IG5hbWVzICAgIAotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHAgPSAoUGFydCkgaS5uZXh0KCk7Ci0gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGZvciB0aGUgc29hcDpoZWFkZXIgKGlmIGFueSkKLSAgICAgICAgaWYgKCFwLmdldE5hbWUoKS5lcXVhbHMoc29hcEhlYWRlclBhcnQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNvYXA6Ym9keQotICAgICAgICAgIHYuYWRkKG5ldyBRTmFtZShwLmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBvbmUgb2YgdGhlIHBhcnRzIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNvYXA6aGVhZGVyIGluIHRoZSBiaW5kaW5nCi0gICAgICAvLyAoYnkgPHNvYXA6aGVhZGVyIHBhcnQ9IntwYXJ0bmFtZX0iPiksIHJlbW92ZSB0aGlzIGZyb20gdGhlIHNldAotCi0gICAgfQotCi0gICAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKG9yZGVyZWQpCi0gICAgaWYgKHYuaXNFbXB0eSgpICYmIG1lc3NhZ2VQYXJ0cy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUEI6IENoYW5nZWQgdG8gY29udGFpbnNBbGwoKSBzaW5jZSBlcXVhbHMoKSBmYWlscyB3aGVuIHVzaW5nIEpSRSAxLjQKLSAgICBpZiAodi5jb250YWluc0FsbChtZXNzYWdlUGFydHMua2V5U2V0KCkpCi0gICAgICAmJiAodi5zaXplKCkgPT0gbWVzc2FnZVBhcnRzLnNpemUoKSkpCi0gICAgewotICAgICAgLy8gQ2hlY2sgZm9yIHhzaTp0eXBlIG1pc21hdGNoCi0gICAgICBJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2VQYXJ0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgUU5hbWUgcGFydE5hbWUsIHhzaVR5cGU7Ci0gICAgICB3aGlsZSAocGFydHMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBwYXJ0TmFtZSA9IChRTmFtZSkgcGFydHMubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB4c2k6dHlwZSBRTmFtZQotICAgICAgICBpZiAoKHhzaVR5cGUgPSAoUU5hbWUpIG1lc3NhZ2VQYXJ0cy5nZXQocGFydE5hbWUpKSAhPSBudWxsCi0gICAgICAgICAgJiYgd3NkbFBhcnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIFdTREwgcGFydCBkZWZpbml0aW9uCi0gICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHdzZGxQYXJ0cy5nZXQocGFydE5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gSWYgeHNpVHlwZSBpcyBOT1QgZGVyaXZlZCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydAotICAgICAgICAgIGlmICghaXNEZXJpdmVkVHlwZSh4c2lUeXBlLCBwYXJ0LmdldFR5cGVOYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vcmV0dXJuICh2LmVxdWFscyhtZXNzYWdlUGFydHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBvbmUgc2NoZW1hIHR5cGUgaXMgZGVyaXZlZCBmcm9tIGFub3RoZXIuCi0gICAqIEBwYXJhbSBleHRUeXBlIGFuIGFzc3VtZWQgZGVyaXZlZCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSBhbiBhc3N1bWVkIGJhc2UgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGV4dFR5cGUgaXMgZGVyaXZlZCBmcm9tIHR5cGUsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXJpdmVkVHlwZShRTmFtZSBleHRUeXBlLCBRTmFtZSB0eXBlKQotICB7Ci0gICAgLy8gSWYgZWl0aGVyIG9mIHR5cGVzIGlzIG51bGwsIHJldHVybiBmYWxzZQotICAgIGlmIChleHRUeXBlID09IG51bGwgfHwgdHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZSB0eXBlcyBhcmUgZXF1YWwsIHJldHVybiB0cnVlCi0gICAgaWYgKGV4dFR5cGUuZXF1YWxzKHR5cGUpKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCBzY2hlbWFzIAotICAgIEl0ZXJhdG9yIGkgPSB3c2RsRG9jdW1lbnQuZ2V0U2NoZW1hcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFhTTW9kZWwgeHNNb2RlbCA9IChYU01vZGVsKSBpLm5leHQoKTsKLSAgICAgIC8vIFJldHJpZXZpbmcgdGhlIGRlcml2ZWQgdHlwZSBkZWZpbml0aW9uCi0gICAgICBYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgIGV4dFR5cGUuZ2V0TG9jYWxQYXJ0KCksIGV4dFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgLy8gSWYgaXQgaXMgZm91bmQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgYmFzZSB0eXBlLCByZXR1cm4gdHJ1ZQotICAgICAgaWYgKHhzVHlwZSAhPSBudWxsICYmIHhzVHlwZS5kZXJpdmVkRnJvbSh0eXBlLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICB0eXBlLmdldExvY2FsUGFydCgpLCBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX05PTkUpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZXh0VHlwZSBpcyBub3QgZGVyaXZlZCBmcm9tIHR5cGUsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAJKiBHZXQgYSBsaXN0IG9mIFFOYW1lcyBvZiBwYXJ0cyBmcm9tIHRoZSBzb2FwIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlCi0gIAkqLwotICBwdWJsaWMgRWxlbWVudCBnZXRTb2FwQm9keUNoaWxkKERvY3VtZW50IGRvYykKLSAgewotCi0gICAgRWxlbWVudCBvcEVsZW0gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBjaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKSAmJiBvcEVsZW0gPT0gbnVsbDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3BFbGVtID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvcEVsZW07Ci0gIH0KLQotICAvKiogQ2hlY2sgd2hldGhlciB0aGlzIG1lc3NhZ2UgaXMgYSBzb2FwIGZhdWx0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhdWx0KERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gICAgaWYgKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlzRmF1bHQgPQotICAgICAgICAocm9vdAotICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0IikKLSAgICAgICAgICAuZ2V0TGVuZ3RoKCkKLSAgICAgICAgICA+IDApOwotICAgIH0KLQotICAgIHJldHVybiBpc0ZhdWx0OwotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVzc2FnZSBoYXMgYSBzb2FwIGJvZHkgd2l0aCBhIGNoaWxkIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBjb250YWluc1NvYXBCb2R5V2l0aENoaWxkKERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLQotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250YWlucyA9ICgoZ2V0U29hcEJvZHlDaGlsZChkb2MpID09IG51bGwpID8gZmFsc2UgOiB0cnVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVBBY3Rpb24gdmFsdWUgZnJvbSB0aGUgSFRUUCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIGhlYWRlcnMKLSAgICogQHJldHVybiBTT0FQQWN0aW9uIHZhbHVlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb24oU3RyaW5nIGhlYWRlcnMpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRPcGVyYXRpb25Gcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBRTmFtZSBvcGVyYXRpb24gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBlbGVtZW50LCB0aGVuIHRoaXMgaXMgdGhlIG9wZXJhdGlvbiBuYW1lCi0gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IG5ldyBRTmFtZShuLmdldE5hbWVzcGFjZVVSSSgpLCBuLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBNYXAgZ2V0UGFydExpc3RGcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBNYXAgcGFydHMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBncmFuZC1jaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgLy8gKGltbWVkaWF0ZSBjaGlsZCBpcyB0aGUgbWVzc2FnZSBuYW1lKQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgb3BlcmF0aW9uIG5hbWUuIEl0cyBjaGlsZHJlbiBhcmUgdGhlIHBhcnRzCi0gICAgICAgICAgICBOb2RlTGlzdCBncmFuZENoaWxkcmVuID0gbi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyYW5kQ2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZSBtID0gZ3JhbmRDaGlsZHJlbi5pdGVtKGopOwotICAgICAgICAgICAgICBpZiAobSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHBhcnQgaGFzIGFuIHhzaTp0eXBlCi0gICAgICAgICAgICAgICAgQXR0ciBhdHRyID0KLSAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIG0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTSSwgInR5cGUiKSk7Ci0KLSAgICAgICAgICAgICAgICBRTmFtZSB4c2lUeXBlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSwgdGhlbiBnZXQgdGhlIHZhbHVlIGFzIGEgUU5hbWUgCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgeHNpVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgRE9NVXRpbHMuZ2V0UU5hbWUoYXR0ci5nZXROb2RlVmFsdWUoKSwgKEVsZW1lbnQpIG0sIHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiB3ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gYWRkIHRvIHRoZSBjaGlsZCBlbGVtZW50IGxpc3QKLSAgICAgICAgICAgICAgICBwYXJ0cy5wdXQoCi0gICAgICAgICAgICAgICAgICBuZXcgUU5hbWUobS5nZXROYW1lc3BhY2VVUkkoKSwgbS5nZXRMb2NhbE5hbWUoKSksCi0gICAgICAgICAgICAgICAgICB4c2lUeXBlKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbltdIGdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlLAotICAgIEJpbmRpbmdbXSBiaW5kaW5ncykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEhhc2hTZXQgYmluZGluZ09wZXJhdGlvbnNTZXQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgLy8gd2hpenogdGhyb3VnaCB0aGUgYmluZGluZ3MsIGNoZWNraW5nIGZvciBhIGJpbmRpbmdPcGVyYXRpb24gbWF0Y2hpbmcgdGhlIG1lc3NhZ2UKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgaSsrKQotICAgIHsKLQotICAgICAgQmluZGluZyB0cnlCaW5kaW5nID0gYmluZGluZ3NbaV07Ci0gICAgICBMaXN0IGJpbmRpbmdPcHMgPSB0cnlCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIGlmIChiaW5kaW5nT3BzICE9IG51bGwpCi0gICAgICB7Ci0KLSAgICAgICAgLy8gc2VhcmNoIHRocm91Z2ggYmluZGluZyBPcGVyYXRpb25zCi0gICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdPcEl0ID0gdHJ5QmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChiaW5kaW5nT3BJdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLQotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wID0gKEJpbmRpbmdPcGVyYXRpb24pIGJpbmRpbmdPcEl0Lm5leHQoKTsKLSAgICAgICAgICAvLyBjaGVjayBkZXBlbmRzIG9uIHdoaWNoIGJpbmRpbmcgc3R5bGUgaXMgZGVjbGFyZWQgaW4gdGhlIHdzZGwKLSAgICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcCA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wKTsKLSAgICAgICAgICAvL0dUOiBtb3ZlIHRoaXMgbWV0aG9kIHRvIHV0aWxzCi0KLSAgICAgICAgICBTdHJpbmcgc3R5bGU7Ci0gICAgICAgICAgaWYgKChzb2FwT3AgPT0gbnVsbCkgfHwgKHN0eWxlID0gc29hcE9wLmdldFN0eWxlKCkpID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdXNlIHRoZSBzdHlsZSBvZiB0aGUgcGFyZW50IGJpbmRpbmdPcAotCi0gICAgICAgICAgICBTT0FQQmluZGluZyBzb2FwQmluZCA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKHRyeUJpbmRpbmcpOwotICAgICAgICAgICAgLy9HVDogbW92ZSB0aGlzIG1ldGhvZCB0byB1dGlscwotICAgICAgICAgICAgaWYgKChzdHlsZSA9IHNvYXBCaW5kLmdldFN0eWxlKCkpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLSAgICAgICAgICAgICAgLy9kZWZhdWx0Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzdHlsZS5lcXVhbHMoYmluZGluZ1N0eWxlKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb25zU2V0LmFkZChiaW5kaW5nT3ApOwotCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IC8vIGN1cnJlbnQgYmluZGluZyBoYXMgbm8gYmluZGluZ09wZXJhdGlvbnMsIGlnbm9yZQotICAgIH0KLSAgICByZXR1cm4gKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ09wZXJhdGlvbnNTZXQudG9BcnJheSgKLSAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBzb2FwOmJvZHkgZWxlbWVudCBpcyBsaXRlcmFsLgotICAgKiBAcGFyYW0gZXh0RWxlbWVudHMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBvZiB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0Ci0gICAqIG9mIGEgYmluZGluZwotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNMaXRlcmFsKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICBpZiAoc29hcEJvZHkgIT0gbnVsbAotICAgICAgJiYgc29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBPcmRlcnMgd3NkbDpwYXJ0IG5hbWVzIGtlZXBpbmcgaW4gbWluZCB0aGUgInBhcnRzIiBhdHRyaWJ1dGUgb2YgV1NETCBzb2FwOmJvZHkKLSAgICogQHBhcmFtIG1lc3NhZ2VQYXJ0cyBhIGxpc3Qgb2Ygd3NkbDpwYXJ0UwotICAgKiBAcGFyYW0gZXh0RWxlbXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBpbiB0aGUgYmluZGluZwotICAgKiBAcmV0dXJuIHRoZSBvcmRlcmVkIGxpc3Qgb2YgcGFydCBuYW1lcwotICAgKi8KLSAgcHVibGljIExpc3Qgb3JkZXJQYXJ0TmFtZXMoTGlzdCBtZXNzYWdlUGFydHMsIExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG9yZGVyZWRQYXJ0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBib2R5UGFydHMgPSBudWxsOwotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBnZXRTT0FQQm9keShleHRFbGVtcyk7Ci0gICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICBib2R5UGFydHMgPSBzb2FwQm9keS5nZXRQYXJ0cygpOwotCi0gICAgSXRlcmF0b3IgaSA9IG1lc3NhZ2VQYXJ0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSAoKFBhcnQpIGkubmV4dCgpKS5nZXROYW1lKCk7Ci0gICAgICAvLyBJZiB0aGUgcGFydHMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgb3IgY29udGFpbnMKLSAgICAgIC8vIHRoZSB3c2RsOnBhcnQgbmFtZSwgdGhlbiBhZGRpbmcgcGFydCBuYW1lIHRvIHRoZSBvcmRlcmVkIGxpc3QKLSAgICAgIGlmIChib2R5UGFydHMgPT0gbnVsbCB8fCBib2R5UGFydHMuY29udGFpbnMocGFydE5hbWUpKQotICAgICAgICBvcmRlcmVkUGFydE5hbWVzLmFkZChwYXJ0TmFtZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9yZGVyZWRQYXJ0TmFtZXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0cmlldmVzIHRoZSBTT0FQQm9keSBvYmplY3QgZnJvbSBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbG1lbnRzIGluIGJpbmRpbmcKLSAgICogQHBhcmFtIGV4dEVsZW1zIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICogQHJldHVybiB0aGUgU09BUEJvZHkgZWxlbWVudAotICAgKi8KLSAgcHVibGljIFNPQVBCb2R5IGdldFNPQVBCb2R5KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBpZiAoZXh0RWxlbXMgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGV4dEVsZW1zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gaS5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgIHJldHVybiAoU09BUEJvZHkpIG9iajsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotIAotICBwdWJsaWMgTGlzdCByZXNvbHZlU2FtZU5hbWVzcGFjZXMoTGlzdCBzY2hlbWFFbGVtZW50cykKLSAgewotICAJTGlzdCBuYW1lc3BhY2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAJTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlJdGVyYXRvciBpID0gc2NoZW1hRWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRWxlbWVudCBzY2hlbWEgPSAoRWxlbWVudCkgaS5uZXh0KCk7Ci0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gc2NoZW1hLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgIGlmICghbmFtZXNwYWNlcy5jb250YWlucyh0YXJnZXROYW1lc3BhY2UpKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2VzLmFkZCh0YXJnZXROYW1lc3BhY2UpOwotICAgIAlMaXN0IHNjaGVtYXMgPSBnZXRTY2hlbWFzV2l0aFNhbWVOYW1lc3BhY2Uoc2NoZW1hRWxlbWVudHMsIHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgCWlmIChzY2hlbWFzLnNpemUoKSA9PSAxKQotICAgICAgCXsKLSAgICAgIAkgIHJlc3VsdC5hZGQoc2NoZW1hKTsKLSAgICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgIAkJLy8gY29weWluZyBhbGwgdGhlIE5TIGRlY2xhcmF0aW9ucyBmcm9tIHdzZGw6ZGVmaW5pdGlvbnMgd3NkbDp0eXBlcwotICAgICAgLy9jb3B5TlNEZWNsYXJhdGlvbnMocm9vdCwgc2NoZW1hKTsKLSAgICAgIGNvcHlOU0RlY2xhcmF0aW9ucygoRWxlbWVudCkgc2NoZW1hLmdldFBhcmVudE5vZGUoKSwgc2NoZW1hKTsKLSAgICAgIC8vIFJlcGxhY2luZyBhbGwgcmVsYXRpdmUgc2NoZW1hTG9jYXRpb24gVVJJcyB3aXRoIGFic29sdXRlIG9uZXMKLSAgICAgIC8vcmVwbGFjZVJlbGF0aXZlVVJJcyhzY2hlbWEsIHdzZGxVUkkpOwotICAgICAgLy8gU2VyaWFsaXplIHRoZSBzY2hlbWEgZWxlbWVudHMgaW5zaWRlIHRoZSBUeXBlcywgdGhlbiB1c2UgdGhpcyBhcwotICAgICAgLy8gdGhlIHNjaGVtYSBzdHJpbmcgZm9yIHRoZSB2YWxpZGF0aW9uCi0gICAgICAvL1N0cmluZyBzY2hlbWFTdHJpbmcgPQotICAgICAgLy8gIERPTTJXcml0ZXIubm9kZVRvU3RyaW5nKHNjaGVtYSk7Ci0gICAgICAvLyBzY2hlbWFTdHJpbmdzLmFkZChzY2hlbWFTdHJpbmcpOwotICAgICAgCX0KLSAgICAgIH0KLSAgICB9Ci0gIAlyZXR1cm4gbnVsbDsKLSAgfQotICAJCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXNXaXRoU2FtZU5hbWVzcGFjZShMaXN0IHNjaGVtYUVsZW1lbnRzLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlKQotICB7IAotICAJTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaSA9IHNjaGVtYUVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBTdHJpbmcgc2NoZW1hVGFyZ2V0TmFtZXNwYWNlID0gc2NoZW1hLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgIGlmIChzY2hlbWFUYXJnZXROYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAJc2NoZW1hVGFyZ2V0TmFtZXNwYWNlID0gIiI7Ci0gICAgICAgIAotICAgICAgaWYgKHNjaGVtYVRhcmdldE5hbWVzcGFjZS5lcXVhbHModGFyZ2V0TmFtZXNwYWNlKSkKLSAgICAgIHsKLSAgICAgICAJcmVzdWx0LmFkZChzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZHVwbGljYXRlTmFtZXNwYWNlc0RldGVjdGVkKExpc3Qgc2NoZW1hRWxlbWVudHMpCi0gIHsgCi0gIAlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIExpc3QgbmFtZXNwYWNlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpID0gc2NoZW1hRWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgewotICAgIAlFbGVtZW50IHNjaGVtYSA9IChFbGVtZW50KWkubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gc2NoZW1hLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRhcmdldE5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICAJdGFyZ2V0TmFtZXNwYWNlID0gIiI7Ci0gICAgICAgIAotICAgICAgICBpZiAobmFtZXNwYWNlcy5jb250YWlucyh0YXJnZXROYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgIAlyZXN1bHQgPSB0cnVlOwotICAgICAgICAJYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIAluYW1lc3BhY2VzLmFkZCh0YXJnZXROYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfQotICAKLSAgcHVibGljIHZvaWQgdmFsaWRhdGVBcnRpZmFjdCgpIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAgLy8gR2V0IHRoZSBsb2cgZmlsZSByZWFkZXIKLSAgICAgIExvZ1JlYWRlciBsb2dSZWFkZXIgPSBEb2N1bWVudEZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdMb2dSZWFkZXIoKTsKLQotICAgICAgLy8gQ3JlYXRlIGxvZyByZWFkZXIgY2FsbGJhY2sKLSAgICAgIExvZ1Byb2Nlc3NvciBlbnZlbG9wZVByb2Nlc3NvciA9IG5ldyBMb2dQcm9jZXNzb3IodGhpcyk7Ci0KLSAgICAgIC8vIFN0YXJ0IHJlYWRpbmcgdGhlIGxvZyBmaWxlCi0gICAgICBsb2dSZWFkZXIucmVhZExvZyhhbmFseXplckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpLCBlbnZlbG9wZVByb2Nlc3Nvcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTG9nUHJvY2Vzc29yIGltcGxlbWVudHMgTWVzc2FnZUVudHJ5SGFuZGxlciB7Ci0gICAgICBMb2dWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBtZXNzYWdlIHByb2Nlc3NvciBhcyBhIGxvZyByZWFkZXIgY2FsbGJhY2sgZnVuY3Rpb24uCi0gICAgICovCi0gICAgICBMb2dQcm9jZXNzb3IoTG9nVmFsaWRhdG9yIHZhbGlkYXRvcikgewotICAgICAgICAgIHRoaXMudmFsaWRhdG9yID0gdmFsaWRhdG9yOwotICAgICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvY2VzcyBhcnRpZmFjdCByZWZlcmVuY2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHJvY2Vzc0FydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJlcG9ydGVyLmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIGEgc2luZ2xlIGxvZyBlbnRyeS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcm9jZXNzTG9nRW50cnkoRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICAgIHZhbGlkYXRvci52YWxpZGF0ZShlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZVZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZVZhbGlkYXRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcyY2UzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Jhc2VWYWxpZGF0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudmVsb3BlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUHJlcmVxRmFpbGVkTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlByZXJlcUZhaWxlZExpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTERvY3VtZW50Q2FjaGVVc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsICAgKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlVmFsaWRhdG9ySW1wbAotICBleHRlbmRzIFhNTERvY3VtZW50Q2FjaGVVc2VyCi0gIGltcGxlbWVudHMgQmFzZVZhbGlkYXRvcgotewotCi0gIC8qKgotICAgKiBBIGhhc2h0YWJsZSB0aGF0IG1hcHMgYXNzZXJ0aW9uIHJlc3VsdHMgdG8gdGhlaXIgcHJpb3JpdGllcywgMCBpcyBsb3dlc3QKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhhc2h0YWJsZSByZXN1bHRQcmlvcml0eSA9IG5ldyBIYXNodGFibGUoNik7Ci0gIHN0YXRpYyB7Ci0gICAgcmVzdWx0UHJpb3JpdHkucHV0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VELCBuZXcgSW50ZWdlcigwKSk7Ci0gICAgcmVzdWx0UHJpb3JpdHkucHV0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIG5ldyBJbnRlZ2VyKDEpKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9NSVNTSU5HX0lOUFVULCBuZXcgSW50ZWdlcigyKSk7Ci0gICAgcmVzdWx0UHJpb3JpdHkucHV0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORywgbmV3IEludGVnZXIoMykpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BSRVJFUV9GQUlMRUQsIG5ldyBJbnRlZ2VyKDQpKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQsIG5ldyBJbnRlZ2VyKDUpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgaGlnaGVzdCBwcmlvcml0eSB2YWx1ZSBiZWluZyBwYXNzZWQgd2hlbiBwcm9jZXNzaW5nIHByZS1yZXF1aXNpdGVzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1ZBTElEX1BSSU9SSVRZID0gMTsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0OwotCi0gIC8qKgotICAgKiBQcm9maWxlIGFydGlmYWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3Q7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydGVyLgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydGVyIHJlcG9ydGVyOwotCi0gIC8qKgotICAgKiBFbnRyeS4KLSAgICovCi0gIC8vIHByb3RlY3RlZCBFbnRyeSBlbnRyeTsKLQotICAvKioKLSAgICogUmVwb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0OwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHZlcmJvc2VPcHRpb24gPSBmYWxzZTsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gcHJvY2Vzc2VkIGNvdW50LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBhc3NlcnRpb25Db3VudCA9IDA7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEJhc2VWYWxpZGF0b3JJbXBsKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWlsaXplIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbnRleHQgdGhlIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHBhcmFtIHByb2ZpbGVBcnRpZmFjdCB0aGUgcHJvZmlsZSBhcnRpZmlhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHJlcG9ydGVyICAgICAgICBhIFJlcG9ydGVyIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgcHJvZmlsZUFydGlmYWN0LAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFNhdmUgaW5wdXQgcmVmZXJlbmNlcwotICAgIHRoaXMuYW5hbHl6ZXJDb250ZXh0ID0gYW5hbHl6ZXJDb250ZXh0OwotICAgIHRoaXMucHJvZmlsZUFydGlmYWN0ID0gcHJvZmlsZUFydGlmYWN0OwotICAgIHRoaXMucmVwb3J0QXJ0aWZhY3QgPSByZXBvcnRBcnRpZmFjdDsKLSAgICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7Ci0KLSAgICAvLyBHZXQgdmVyYm9zZSBvcHRpb24gICAgCi0gICAgdmVyYm9zZU9wdGlvbiA9Ci0gICAgICByZXBvcnRlcgotICAgICAgICAuZ2V0UmVwb3J0KCkKLSAgICAgICAgLmdldFJlcG9ydENvbnRleHQoKQotICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAuZ2V0QW5hbHl6ZXJDb25maWcoKQotICAgICAgICAuZ2V0VmVyYm9zZU9wdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYWxsIG9mIHRoZSB0ZXN0IGFzc2VydGlvbnMgZm9yIG9uZSBlbnRyeS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGEgY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHNlcmlvdXMgcHJvYmxlbXMgb2NjdXIgd2hpbGUgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBmb3IgYW4gZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzQXNzZXJ0aW9ucygKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBsb25nIHN0YXJ0VGltZSA9IDA7Ci0KLSAgICBIYXNoTWFwIHByb2Nlc3NMaXN0ID0gbmV3IEhhc2hNYXAoKTsKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24gPSBudWxsOwotICAgIEFzc2VydGlvblByb2Nlc3MgYXNzZXJ0aW9uUHJvY2VzczsKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0OwotCi0gICAgVHJlZU1hcCBwcmVSZXFSZXN1bHRzOwotICAgIFByZXJlcUZhaWxlZExpc3QgcHJlcmVxRmFpbGVkTGlzdDsKLSAgICBTdHJpbmcgcHJlUmVxSWQ7Ci0KLSAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSBuZXcgQ2xhc3NbMV07Ci0gICAgLy8gSWYgdGhpcyBpcyBhbiBpbnN0YW5jZSBvZiBNZXNzYWdlVmFsaWRhdG9yIG9yIEVudmVsb3BlVmFsaWRhdG9yCi0gICAgLy8gdGhlbiB1c2UgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgYXMgYSBwYXJhbSB0eXBlIG9mIGFzc2VydGlvbnMgY29uc3RydWN0b3IKLSAgICBwYXJhbVR5cGVzWzBdID0gdGhpcyBpbnN0YW5jZW9mIEJhc2VNZXNzYWdlVmFsaWRhdG9yID8KLSAgICAgIEJhc2VNZXNzYWdlVmFsaWRhdG9yLmNsYXNzIDogdGhpcy5nZXRDbGFzcygpOwotCi0gICAgT2JqZWN0W10gcGFyYW1zID0gbmV3IE9iamVjdFsxXTsKLSAgICBwYXJhbXNbMF0gPSB0aGlzOwotCi0gICAgLy8gR2V0IGVudHJ5IGZyb20gY29udGV4dAotICAgIEVudHJ5IGVudHJ5ID0gZW50cnlDb250ZXh0LmdldEVudHJ5KCk7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gYXJ0aWZhY3QKLSAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byByZXBvcnQKLSAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEVudmVsb3BlVmFsaWRhdG9yKQotICAgICAJdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50RW52ZWxvcGVFbnRyeShlbnRyeSk7IAotCWVsc2UgdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50RW50cnkoZW50cnkpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IG5leHQgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgdGVzdEFzc2VydGlvbiA9IChUZXN0QXNzZXJ0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdmFyaWFibGVzCi0gICAgICAgIGFzc2VydGlvblJlc3VsdCA9IG51bGw7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHRlc3QgYXNzZXJ0aW9uIGlzIGVuYWJsZWQsIHRoZW4gY29udGludWUKLSAgICAgICAgLy8gICAgICAgIGlmICgodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKSkgJiYgCi0gICAgICAgIC8vICAgICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkgeyAKLSAgICAgICAgaWYgKHRlc3RBc3NlcnRpb24uaXNFbmFibGVkKCkKLSAgICAgICAgICAmJiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQWRkIDEgdG8gYXNzZXJ0aW9uIHByb2Nlc3NlZCBjb3VudAotICAgICAgICAgICAgYXNzZXJ0aW9uQ291bnQrKzsKLQotICAgICAgICAgICAgLy8gSWYgdGhlIGFzc2VydGlvbiBwcm9jZXNzIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0LCB0aGVuIGNyZWF0ZSBpdAotICAgICAgICAgICAgaWYgKChhc3NlcnRpb25Qcm9jZXNzID0KLSAgICAgICAgICAgICAgKEFzc2VydGlvblByb2Nlc3MpIHByb2Nlc3NMaXN0LmdldCh0ZXN0QXNzZXJ0aW9uLmdldElkKCkpKQotICAgICAgICAgICAgICA9PSBudWxsKQotICAgICAgICAgICAgewotCi0gICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhc3NlcnRpb24gcHJvY2VzcwotICAgICAgICAgICAgICBDbGFzcyBhc3NlcnRpb25DbGFzcyA9Ci0gICAgICAgICAgICAgICAgQ2xhc3MuZm9yTmFtZShjbGFzc1ByZWZpeCArIHRlc3RBc3NlcnRpb24uZ2V0SWQoKSk7Ci0KLSAgICAgICAgICAgICAgYXNzZXJ0aW9uUHJvY2VzcyA9Ci0gICAgICAgICAgICAgICAgKEFzc2VydGlvblByb2Nlc3MpIGFzc2VydGlvbkNsYXNzLmdldENvbnN0cnVjdG9yKAotICAgICAgICAgICAgICAgICAgcGFyYW1UeXBlcykubmV3SW5zdGFuY2UoCi0gICAgICAgICAgICAgICAgICBwYXJhbXMpOwotCi0gICAgICAgICAgICAgIC8vIEFkZCBpdCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICBwcm9jZXNzTGlzdC5wdXQodGVzdEFzc2VydGlvbi5nZXRJZCgpLCBhc3NlcnRpb25Qcm9jZXNzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBlbnRyeSBpcyBudWxsCi0gICAgICAgICAgICBpZiAoZW50cnkuZ2V0RW50cnlEZXRhaWwoKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBhc3NlcnRpb25SZXN1bHQgPQotICAgICAgICAgICAgICAgIGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgICAgICAgICAgICAgIHRlc3RBc3NlcnRpb24sCi0gICAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX01JU1NJTkdfSU5QVVQsCi0gICAgICAgICAgICAgICAgICAoU3RyaW5nKSBudWxsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0ZXN0IGFzc2VydGlvbiBzaG91bGQgYmUgcnVuCi0gICAgICAgICAgICAvL2lmIChpc05vdEFwcGxpY2FibGUodGVzdEFzc2VydGlvbiwgZW50cnlDb250ZXh0KSkgewotICAgICAgICAgICAgZWxzZSBpZiAoaXNOb3RBcHBsaWNhYmxlKHRlc3RBc3NlcnRpb24pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBhc3NlcnRpb25SZXN1bHQgPQotICAgICAgICAgICAgICAgIGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgICAgICAgICAgICAgIHRlc3RBc3NlcnRpb24sCi0gICAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLAotICAgICAgICAgICAgICAgICAgKFN0cmluZykgbnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgYWxsIHRoZSBhc3NlcnRpb24gcHJlLXJlcXVpc2l0ZXMKLQotICAgICAgICAgICAgICBwcmVSZXFSZXN1bHRzID0gbnVsbDsKLSAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdCA9IG51bGw7Ci0gICAgICAgICAgICAgIC8vIEdldCBsaXN0IG9mIHByZS1yZXFzIGZvciBzcGVjaWZpZWQgYXNzZXJ0aW9uCi0gICAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSB0ZXN0QXNzZXJ0aW9uLmdldFByZXJlcUlkTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwcmVSZXFSZXN1bHRzID09IG51bGwpCi0gICAgICAgICAgICAgICAgICBwcmVSZXFSZXN1bHRzID0gbmV3IFRyZWVNYXAoKTsKLSAgICAgICAgICAgICAgICAvLyBHZXQgbmV4dCBpZAotICAgICAgICAgICAgICAgIHByZVJlcUlkID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBwcmVyZXEgcmVzdWx0Ci0gICAgICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IHByZVJlcVJlc3VsdCA9IHJlcG9ydGVyLmdldEFzc2VydGlvblJlc3VsdChwcmVSZXFJZCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGRpbmcgYSByZXN1bHQgcHJpb3JpdHkgdmFsdWUgdG8gcHJlUmVxUmVzdWx0cwotICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMucHV0KAotICAgICAgICAgICAgICAgICAgcmVzdWx0UHJpb3JpdHkuZ2V0KHByZVJlcVJlc3VsdC5nZXRSZXN1bHQoKSksCi0gICAgICAgICAgICAgICAgICBwcmVSZXFSZXN1bHQuZ2V0UmVzdWx0KCkpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXJlcSBmYWlsZWQsIHRoZW4gYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgaWYgKCgoSW50ZWdlcilyZXN1bHRQcmlvcml0eS5nZXQocHJlUmVxUmVzdWx0LmdldFJlc3VsdCgpKSkuaW50VmFsdWUoKQotICAgICAgICAgICAgICAgICAgPiBNQVhfVkFMSURfUFJJT1JJVFkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIGZhaWxlZCBwcmVyZXEgSUQgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgIGlmIChwcmVyZXFGYWlsZWRMaXN0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHByZXJlcUZhaWxlZExpc3QgPSBuZXcgUHJlcmVxRmFpbGVkTGlzdEltcGwoKTsKLSAgICAgICAgICAgICAgICAgIHByZXJlcUZhaWxlZExpc3QuYWRkVGVzdEFzc2VydGlvbklEKHByZVJlcUlkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAocHJlcmVxRmFpbGVkTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgaGlnaGVzdCBwcmUtcmVxdWlzaXRlcycgcmVzdWx0Ci0gICAgICAgICAgICAgICAgSW50ZWdlciBtYXhSZXMgPSAoSW50ZWdlcilwcmVSZXFSZXN1bHRzLmxhc3RLZXkoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVzU3RyaW5nID0gKFN0cmluZylwcmVSZXFSZXN1bHRzLmdldChtYXhSZXMpOwotICAgICAgICAgICAgICAgIGlmIChyZXNTdHJpbmcuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKQotICAgICAgICAgICAgICAgICAgfHxyZXNTdHJpbmcuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORykpIHsKLSAgICAgICAgICAgICAgICAgIHJlc1N0cmluZyA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUFJFUkVRX0ZBSUxFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQgYmFzZWQgb24gcHJlLXJlcXVpc2l0ZXMgd2hpY2ggYXJlIG5vdCBwYXNzZWQKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25SZXN1bHQgPSBjcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzU3RyaW5nLCBwcmVyZXFGYWlsZWRMaXN0KTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8vIFByZS1yZXF1aXNpdGVzIGFyZSBwYXNzZWQsIHZhbGlkYXRlIGN1cnJlbnQgYXNzZXJ0aW9uCi0gICAgICAgICAgICAgIGVsc2UgewotCi0gICAgICAgICAgICAgICAgLy8gUmVzZXQgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgICBhc3NlcnRpb25Qcm9jZXNzLnJlc2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyAgVkVSQk9TRQotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgICAgICAgICAgICAgIiAgUHJvY2Vzc2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgKyB0ZXN0QXNzZXJ0aW9uLmdldElkKCkKLSAgICAgICAgICAgICAgICAgICAgICArICIgZm9yIGVudHJ5IHJlZmVyZW5jZSBJRCBbIgotICAgICAgICAgICAgICAgICAgICAgICsgZW50cnkuZ2V0UmVmZXJlbmNlSUQoKQotICAgICAgICAgICAgICAgICAgICAgICsgIl0gLi4uIik7Ci0gICAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgIGFzc2VydGlvblByb2Nlc3MudmFsaWRhdGUodGVzdEFzc2VydGlvbiwgZW50cnlDb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIC8vICBWRVJCT1NFCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAiICAgIEVsYXBzZWQgdGltZTogIgotICAgICAgICAgICAgICAgICAgICAgICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lKQotICAgICAgICAgICAgICAgICAgICAgICsgIm1zIik7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgcmVzdWx0IHRvIHRoZSByZXBvcnQKLSAgICAgICAgICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNuZmUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICBpZiAodGVzdEFzc2VydGlvbiAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXBvcnRlcgotICAgICAgICAgICAgICAgIC5nZXRSZXBvcnQoKQotICAgICAgICAgICAgICAgIC5nZXRSZXBvcnRDb250ZXh0KCkKLSAgICAgICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgICAgIC5wcmludE1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgIldBUk5JTkc6ICIKLSAgICAgICAgICAgICAgICAgICsgdGVzdEFzc2VydGlvbi5nZXRJZCgpCi0gICAgICAgICAgICAgICAgICArICIgaXMgbm90IHN1cHBvcnRlZCBjdXJyZW50bHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVhFQ0VQVElPTjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFdTSUV4Y2VwdGlvbikKLSAgICAgICAgdGhyb3cgKFdTSUV4Y2VwdGlvbikgZTsKLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgfQotCi0gICAgZmluYWxseQotICAgIHsKLSAgICAgIC8vIEluZGljYXRlIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGFzc2VydGlvbiB0YXJnZXQKLSAgICAgIHRoaXMucmVwb3J0ZXIuZW5kQ3VycmVudEVudHJ5KCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgIHRoZSBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2goCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpOwotCi0gIC8qKgotICAgKiBEZXRlcm1pbmUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGVudHJ5ICAgICAgICAgIGFuIEVudHJ5IG9iamVjdAotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2goCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5IGVudHJ5KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIHRlc3QgYXNzZXJ0aW9uIGVudHJ5IHR5cGUgbWF0Y2hlcyB0aGUgdGFyZ2V0IGNvbnRleHQgZW50cnkgdHlwZSwgdGhlbiBjb250aW5lCi0gICAgaWYgKHRlc3RBc3NlcnRpb24KLSAgICAgIC5nZXRFbnRyeVR5cGVOYW1lKCkKLSAgICAgIC5lcXVhbHMoZW50cnkuZ2V0RW50cnlUeXBlKCkuZ2V0VHlwZU5hbWUoKSkpCi0gICAgewotICAgICAgbWF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaDsKLSAgfQotCi0gIC8qKgotICAgKiBEZXRlcm1pbmUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlLgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbik7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yI2NsZWFudXAoKQotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIElmIG5vIGFzc2VydGlvbnMgd2VyZSBwcm9jZXNzZWQsIHRoZW4gc2V0IGFsbCBtaXNzaW5nSW5wdXQKLSAgICBpZiAoYXNzZXJ0aW9uQ291bnQgPT0gMCkKLSAgICAgIHNldEFsbE1pc3NpbmdJbnB1dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICBhIFN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBmYWlsdXJlRGV0YWlsIGEgRmFpbHVyZURldGFpbCBvYmplY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCB0ZXN0IHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBTdHJpbmcgcmVzdWx0LAotICAgIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbCkKLSAgewotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZmFpbHVyZSBkZXRhaWwgbGlzdAotICAgIGlmIChmYWlsdXJlRGV0YWlsICE9IG51bGwpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoZmFpbHVyZURldGFpbCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gICAgICAgICBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxNZXNzYWdlICBhIGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCB0ZXN0IHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBTdHJpbmcgcmVzdWx0LAotICAgIFN0cmluZyBmYWlsdXJlRGV0YWlsTWVzc2FnZSkKLSAgewotICAgIHJldHVybiBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLAotICAgICAgcmVzdWx0LAotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UsCi0gICAgICBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gICAgICAgICBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxNZXNzYWdlICBhIGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TG9jYXRpb24gICAgICAgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgU3RyaW5nIGZhaWx1cmVEZXRhaWxNZXNzYWdlLAotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gIHsKLSAgICAvLyBDcmVhdGUgZmFpbHVyZSBkZXRhaWwgbGlzdAotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG51bGw7Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWxNZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBGYWlsdXJlRGV0YWlsIGZhaWx1cmVEZXRhaWwgPSByZXBvcnRlci5jcmVhdGVGYWlsdXJlRGV0YWlsKCk7Ci0gICAgICBmYWlsdXJlRGV0YWlsLnNldEZhaWx1cmVNZXNzYWdlKGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RWxlbWVudExvY2F0aW9uKGVsZW1lbnRMb2NhdGlvbik7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoZmFpbHVyZURldGFpbCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICBhIFN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBmYWlsdXJlRGV0YWlsTGlzdCBhIGZhaWx1cmUgZGV0YWlsIGxpc3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCB0ZXN0IHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBTdHJpbmcgcmVzdWx0LAotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCkKLSAgewotICAgIC8vIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IHZhbHVlcyBpbiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbih0ZXN0QXNzZXJ0aW9uKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0UmVzdWx0KHJlc3VsdCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEVudHJ5KHJlcG9ydGVyLmdldFJlcG9ydCgpLmdldEN1cnJlbnRFbnRyeSgpKTsKLQotICAgIC8vIFNldCBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEZhaWx1cmVEZXRhaWxMaXN0KGZhaWx1cmVEZXRhaWxMaXN0KTsKLQotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uICAgICBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gcHJlcmVxRmFpbGVkTGlzdCAgYSBsaXN0IGZhaWxlZCBwcmUtcmVxdWlzaXRlIGFzc2VydGlvbnMuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCB0ZXN0IHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBTdHJpbmcgcmVzdWx0LAotICAgIFByZXJlcUZhaWxlZExpc3QgcHJlcmVxRmFpbGVkTGlzdCkKLSAgewotICAgIC8vIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IHZhbHVlcyBpbiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbih0ZXN0QXNzZXJ0aW9uKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0UmVzdWx0KHJlc3VsdCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEVudHJ5KHJlcG9ydGVyLmdldFJlcG9ydCgpLmdldEN1cnJlbnRFbnRyeSgpKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0UHJlcmVxRmFpbGVkTGlzdChwcmVyZXFGYWlsZWRMaXN0KTsKLQotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGFzc2VydGlvbiByZXN1bHQgdG8gcmVwb3J0LgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSWQgIGFzc2VydGlvbiBpZC4KLSAgICogQHBhcmFtIHJlc3VsdCAgICAgICBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQsIFN0cmluZyByZXN1bHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdAotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQgPSByZXBvcnRlci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAgIC8vIFNldCBhc3NlcnRpb24sIHJlc3VsdCBhbmQgdGFyZ2V0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbihwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbihhc3NlcnRpb25JZCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gQWRkIGl0IHRvIHRoZSByZXBvcnQKLSAgICByZXBvcnRlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQgd2l0aCBhbiBlcnJvciBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkICAgICAgICAgIGFzc2VydGlvbiBpZC4KLSAgICogQHBhcmFtIHJlc3VsdCAgICAgICAgICAgICAgIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSBmYWlsdXJlRGV0YWlsTWVzc2FnZSBhbiBlcnJvciBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlIGFzc2VydGlvbiByZXN1bHQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSByZXBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoCi0gICAgU3RyaW5nIGFzc2VydGlvbklkLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgU3RyaW5nIGZhaWx1cmVEZXRhaWxNZXNzYWdlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENvbnZlcnQgbWVzc2FnZSB0byB2ZWN0b3IKLSAgICBWZWN0b3IgZmFpbHVyZURldGFpbExpc3QgPSBudWxsOwotICAgIGlmIChmYWlsdXJlRGV0YWlsTWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgICAgZmFpbHVyZURldGFpbExpc3QuYWRkKGZhaWx1cmVEZXRhaWwpOwotICAgIH0KLQotICAgIC8vIEFkZCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgYWRkQXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvbklkLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25JZCAgICAgICAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSBmYWlsdXJlRGV0YWlsTGlzdCAgYSBsaXN0IG9mIGVycm9yIGRldGFpbCBtZXNzYWdlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlIGFzc2VydGlvbiByZXN1bHQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSByZXBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoCi0gICAgU3RyaW5nIGFzc2VydGlvbklkLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSB0ZXN0IGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgYXNzZXJ0aW9uLCByZXN1bHQgYW5kIHRhcmdldAotICAgIGFzc2VydGlvblJlc3VsdC5zZXRBc3NlcnRpb24ocHJvZmlsZUFydGlmYWN0LmdldFRlc3RBc3NlcnRpb24oYXNzZXJ0aW9uSWQpKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0UmVzdWx0KHJlc3VsdCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEVudHJ5KHJlcG9ydGVyLmdldFJlcG9ydCgpLmdldEN1cnJlbnRFbnRyeSgpKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RmFpbHVyZURldGFpbExpc3QoZmFpbHVyZURldGFpbExpc3QpOwotCi0gICAgLy8gQWRkIGl0IHRvIHRoZSByZXBvcnQKLSAgICByZXBvcnRlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgbWlzc2luZ0lucHV0IGFzc2VydGlvbiByZXN1bHQgdG8gcmVwb3J0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgcHJvYmxlbSBhZGRpbmcgbWlzc2luZ0lucHV0IAotICAgKiAJCSBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZE1pc3NpbmdJbnB1dFJlc3VsdChUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdAotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQgPSByZXBvcnRlci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAgIC8vIFNldCBhc3NlcnRpb24sIHJlc3VsdCBhbmQgdGFyZ2V0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbih0ZXN0QXNzZXJ0aW9uKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0UmVzdWx0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTUlTU0lOR19JTlBVVCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEVudHJ5KHJlcG9ydGVyLmdldFJlcG9ydCgpLmdldEN1cnJlbnRFbnRyeSgpKTsKLQotICAgIC8vIEFkZCBpdCB0byB0aGUgcmVwb3J0Ci0gICAgcmVwb3J0ZXIuYWRkQXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvblJlc3VsdCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3Ijc2V0QWxsTWlzc2luZ0lucHV0KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsbE1pc3NpbmdJbnB1dCgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIElmIHByb2ZpbGUgYXJ0aWZhY3QgaXMgc2V0Ci0gICAgaWYgKHByb2ZpbGVBcnRpZmFjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbjsKLSAgCi0gICAgICAvLyBDcmVhdGUgZW50cnkKLSAgICAgIEVudHJ5IGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgZW50cnkuc2V0QXJ0aWZhY3ROYW1lKHRoaXMucmVwb3J0QXJ0aWZhY3QuZ2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpOwotICAKLSAgICAgIC8vIEFkZCBlbnRyeSB0byBhcnRpZmFjdAotICAgICAgdGhpcy5yZXBvcnRBcnRpZmFjdC5hZGRFbnRyeShlbnRyeSk7Ci0gIAotICAgICAgLy8gQWRkIGVudHJ5IHRvIHJlcG9ydAotICAgICAgdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50RW50cnkoZW50cnkpOwotICAKLSAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgdGVzdCBhc3NlcnRpb25zIGZvciB0aGUgYXJ0aWZhY3QKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvZmlsZUFydGlmYWN0LmdldFRlc3RBc3NlcnRpb25MaXN0KCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgIHRlc3RBc3NlcnRpb24gPSAoVGVzdEFzc2VydGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAKLSAgICAgICAgLy8gQWRkIG1pc3NpbmdJbnB1dCByZXN1bHQKLSAgICAgICAgaWYgKHRlc3RBc3NlcnRpb24uaXNFbmFibGVkKCkpCi0gICAgICAgICAgYWRkTWlzc2luZ0lucHV0UmVzdWx0KHRlc3RBc3NlcnRpb24pOwotICAgICAgfQotICAKLSAgICAgIC8vIEluZGljYXRlIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGFzc2VydGlvbiB0YXJnZXQKLSAgICAgIHRoaXMucmVwb3J0ZXIuZW5kQ3VycmVudEVudHJ5KCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBhbGwgcmVzdWx0cyBmb3IgYW4gZW50cnkgdHlwZSB0byBtaXNzaW5nSW5wdXQuCi0gICAqIEBwYXJhbSBlbnRyeVR5cGUgYW4gRW50cnlUeXBlIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IHByb2JsZW0gd2hpbGUgcHJvY2Vzc2luZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUgZW50cnlUeXBlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb247Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgRW50cnkgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKGVudHJ5VHlwZSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoIlsiICsgZW50cnlUeXBlLmdldFR5cGVOYW1lKCkgKyAiXSIpOwotCi0gICAgLy8gQWRkIGVudHJ5IHRvIGFydGlmYWN0Ci0gICAgdGhpcy5yZXBvcnRBcnRpZmFjdC5hZGRFbnRyeShlbnRyeSk7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gcmVwb3J0Ci0gICAgdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50RW50cnkoZW50cnkpOwotCi0gICAgLy90cnkgewotICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgdGVzdCBhc3NlcnRpb25zIGZvciB0aGUgYXJ0aWZhY3QKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbmV4dCB0ZXN0IGFzc2VydGlvbgotICAgICAgdGVzdEFzc2VydGlvbiA9IChUZXN0QXNzZXJ0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKQotICAgICAgICAmJiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCh0ZXN0QXNzZXJ0aW9uLCBlbnRyeSkpCi0gICAgICB7Ci0gICAgICAgIGFkZE1pc3NpbmdJbnB1dFJlc3VsdCh0ZXN0QXNzZXJ0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJbmRpY2F0ZSB0aGF0IHdlIGFyZSBkb25lIHdpdGggdGhpcyBlbnRyeQotICAgIHRoaXMucmVwb3J0ZXIuZW5kQ3VycmVudEVudHJ5KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL1Byb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWNjNmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5VRERJVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkVudmVsb3BlVmFsaWRhdG9ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlLk1lc3NhZ2VWYWxpZGF0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGkuVURESVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXU0lMRG9jdW1lbnRGYWN0b3J5LgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yOiBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwgZXh0ZW5kcyBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeQotewotICBwcml2YXRlIHN0YXRpYyBNYXAgdmFsaWRhdG9yUmVnaXN0cnk7Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGFkZFRvVmFsaWRhdGF0b3JSZWdpc3RyeShTdHJpbmcgYXJ0aWZhY3ROYW1lLAotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yQ2xhc3MpIHsKLSAgICAgIGlmICh2YWxpZGF0b3JSZWdpc3RyeSA9PSBudWxsKQotICAgICAgICAgIHZhbGlkYXRvclJlZ2lzdHJ5ID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIHZhbGlkYXRvclJlZ2lzdHJ5LnB1dChhcnRpZmFjdE5hbWUsIHZhbGlkYXRvckNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyBCYXNlVmFsaWRhdG9yIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpIAotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAgaWYgKHZhbGlkYXRvclJlZ2lzdHJ5ID09IG51bGwpIHsKLSAgICAgICAgICBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcnNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS4KLSAgICAgICAgICAgICAgICAgIGdldEJhc2VWYWxpZGF0b3JzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxpZGF0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICBhZGRUb1ZhbGlkYXRhdG9yUmVnaXN0cnkodmFsaWRhdG9yc1tpXS5nZXRBcnRpZmFjdFR5cGUoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yc1tpXSk7Ci0gICAgICAgICAgCi0gICAgICB9Ci0gICAgICByZXR1cm4gKEJhc2VWYWxpZGF0b3IpIHZhbGlkYXRvclJlZ2lzdHJ5LmdldChhcnRpZmFjdE5hbWUpOwotICB9Ci0gIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkjbmV3VURESVZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgVURESVZhbGlkYXRvciBuZXdVRERJVmFsaWRhdG9yKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIG5ldyBVRERJIHZhbGlkYXRvciAKLSAgICBVRERJVmFsaWRhdG9yIHVkZGlWYWxpZGF0b3IgPSBuZXcgVURESVZhbGlkYXRvckltcGwoKTsKLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIHVkZGlWYWxpZGF0b3I7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdXU0RMVmFsaWRhdG9yKCkKLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdG9yIG5ld1dTRExWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IFdTREwgdmFsaWRhdG9yIAotICAgIFdTRExWYWxpZGF0b3Igd3NkbFZhbGlkYXRvciA9IG5ldyBXU0RMVmFsaWRhdG9ySW1wbCgpOwotCi0gICAgLy8gUmV0dXJuIHZhbGlkYXRvcgotICAgIHJldHVybiB3c2RsVmFsaWRhdG9yOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdNZXNzYWdlVmFsaWRhdG9yKCkKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVmFsaWRhdG9yIG5ld01lc3NhZ2VWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IG1lc3NhZ2UgdmFsaWRhdG9yIAotICAgIE1lc3NhZ2VWYWxpZGF0b3IgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBNZXNzYWdlVmFsaWRhdG9ySW1wbCgpOwotICAgIC8vIFJldHVybiB2YWxpZGF0b3IKLSAgICByZXR1cm4gbWVzc2FnZVZhbGlkYXRvcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkjbmV3RW52ZWxvcGVWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIEVudmVsb3BlVmFsaWRhdG9yIG5ld0VudmVsb3BlVmFsaWRhdG9yKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIG5ldyBlbnZlbG9wZSB2YWxpZGF0b3IgCi0gICAgRW52ZWxvcGVWYWxpZGF0b3IgZW52ZWxvcGVWYWxpZGF0b3IgPSBuZXcgRW52ZWxvcGVWYWxpZGF0b3JJbXBsKCk7Ci0gICAgLy8gUmV0dXJuIHZhbGlkYXRvcgotICAgIHJldHVybiBlbnZlbG9wZVZhbGlkYXRvcjsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0FQMTkyMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDExYzljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTIwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FbnRyeVR5cGU7Ci0KLS8qKgotICogQVAxOTIwCi0gKgotICogPGNvbnRleHQ+Rm9yIGFuIGVudmVsb3BlIGluIGEgcmVzcG9uc2UgbWVzc2FnZQotICogY29udGFpbmluZyBhIHNvYXA6RmF1bHQgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBpZiBhbmQgb25seSBpZiwgdGhlIHdzZGw6b3V0cHV0Ci0gKiBlbGVtZW50IGlzIGRlc2NyaWJlZCB1c2luZyBXU0RMIE1JTUUgYmluZGluZywgdGhlbiB0aGUgZW52ZWxvcGUgaW4gdGhlCi0gKiByZXNwb25zZSBtZXNzYWdlIGNhbiBjb250YWluIGZhdWx0cyB3aXRoIGF0dGFjaG1lbnRzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MjAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MjAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5IAotICAgIHsKLSAgICAgIGlmICghZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gY2hlY2sgZm9yIGEgZmF1bHQgZWxlbWVudCB3aXRoaW4gdGhlIG1lc3NhZ2UgCi0gICAgICBpZigoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkgPT0gbnVsbCkgfHwgCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkuCi0gICAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lUYWcuRUxFTV9TT0FQX0ZBVUxULmdldE5hbWVzcGFjZVVSSSgpLCAKLSAgICAgICAgICAgICAgV1NJVGFnLkVMRU1fU09BUF9GQVVMVC5nZXRMb2NhbFBhcnQoKSkuZ2V0TGVuZ3RoKCkgIT0gMSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpKTsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbWF0Y2hlZCBvcGVyYXRpb24sIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAvLyBJZiB0aGUgZW52ZWxvcGUgaW4gYSByZXNwb25zZSBtZXNzYWdlIGNvbnRhaW5zIGEgZmF1bHQgd2l0aCBhdHRhY2htZW50cwotICAgICAgLy8gYW5kIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGVsZW1lbnQgaW4gdGhlIGRlc2NyaXB0aW9uIGlzIG5vdCAKLSAgICAgIC8vIGRlc2NyaWJlZCB1c2luZyB0aGUgV1NETCBNSU1FIGJpbmRpbmcsIHRoZSBhc3NlcnRpb24gaXMgZmFpbGVkICAKLSAgICAgIGlmICgoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKSAmJgotICAgICAgICAgIChnZXRNdWx0aXBhcnRSZWxhdGVkQmluZGluZ3MoYmluZGluZ09wZXJhdGlvbikgPT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gCi0gICAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoIlRoZSBtZXNzYWdlIGNvbnRhaW5zIFwiIiArIAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCkuY291bnQoKSArICJcIiBwYXJ0KHMpIiwgCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsgCi0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBNdWx0aXBhcnQgcmVsYXRlZCBiaW5kaW5ncywgaWYgZG9lcyBub3QgZm91bmQsIHJldHVybnMgbnVsbC4KLSAgICogQHBhcmFtIG9wIGJpbmRpbmcgb3BlcmF0aW9uCi0gICAqIEByZXR1cm4gTXVsdGlwYXJ0IHJlbGF0ZWQgYmluZGluZ3MsIGlmIGRvZXMgbm90IGZvdW5kLCByZXR1cm5zIG51bGwuCi0gICAqLwotICBwcml2YXRlIE1JTUVNdWx0aXBhcnRSZWxhdGVkIGdldE11bHRpcGFydFJlbGF0ZWRCaW5kaW5ncygKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb3ApIAotICB7Ci0gICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICBMaXN0IGV4dEVsZW1zID0gb3AuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIC8vIGNoZWNrIGxpc3Qgb24gZmlyc3QgZWxlbWVudAotICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICEoZXh0RWxlbXMuZ2V0KDApIGluc3RhbmNlb2YgTUlNRU11bHRpcGFydFJlbGF0ZWQpKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbXMuZ2V0KDApOyAKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTI4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0FQMTkyOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTY1ZmNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTI4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNPYmplY3RMaXN0OwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTUGFydGljbGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUZXJtOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQVAxOTI4Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBVUkkgcmVmZXJlbmNlCi0gKiB0aGF0IGlzIHR5cGVkIHVzaW5nIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGFuIGVudmVsb3BlLCBhIFVSSSByZWZlcmVuY2UgdGhhdCBpcyB0eXBlZCB1c2luZwotICogdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUgcmVzb2x2ZXMgdG8gYSBNSU1FIHBhcnQgaW4gdGhlIHNhbWUgbWVzc2FnZQotICogYXMgdGhlIGVudmVsb3BlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MjggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MjgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgLy8gZ2V0IHRoZSBycm90IHBhcnQgb2YgYSBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCByb290ID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotCi0gICAgICAvLyBnZXQgYW4gb3BlcmF0aW9uIG1hdGNoZWQgZm9yIHRoZSBtZXNzYWdlCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLCByb290KTsKLSAKLSAgICAgIC8vIGlmIG5vIG9uZSBvcGVyYXRpb24gbWF0Y2hlcywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgYW5kIG1lc3NhZ2UKLSAgICAgIExpc3QgZXh0RWxlbXM7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVAotICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgbWVzc2FnZSA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBpbiB0aGUgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChleHRFbGVtcyA9PSBudWxsIHx8IGV4dEVsZW1zLnNpemUoKSA8IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIENvbGxlY3RpbmcgdGhlIG5hbWVzIG9mIHNjaGVtYSBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkCi0gICAgICAvLyB3aXRoIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICBMaXN0IHN3YVJlZnMgPSBnZXRTd2FSZWZzKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoMCksIG1lc3NhZ2UpOwotICAgICAgLy8gSWYgc3VjaCBzY2hlbWEgZWxlbWVudHMgYXJlIG5vdCBmb3VuZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHN3YVJlZnMuaXNFbXB0eSgpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgc2NoZW1hIGVsZW1lbnQgbmFtZXMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3dhUmVmcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUU5hbWUgZWxlbU5hbWUgPSAoUU5hbWUpIHN3YVJlZnMuZ2V0KGkpOwotICAgICAgICAvLyBMb29raW5nIGZvciBzdWNoIGVsZW1lbnRzIGluIHRoZSByb290IE1JTUUgcGFydAotICAgICAgICBOb2RlTGlzdCBlbGVtcyA9IHJvb3QuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICAgIGVsZW1OYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBlbGVtTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSByZWY6c3dhUmVmIHJlZmVyZW5jZXMKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtcy5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBlbGVtID0gZWxlbXMuaXRlbShqKTsKLSAgICAgICAgICAvLyBHZXR0aW5nIGEgdmFsdWUgb2YgdGhpcyByZWZlcmVuY2UKLSAgICAgICAgICBTdHJpbmcgcmVmID0gZWxlbS5nZXRGaXJzdENoaWxkKCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICAgIDogZWxlbS5nZXRGaXJzdENoaWxkKCkuZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHJlZiA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBlbGVtZW50ICIgKyBlbGVtLmdldE5vZGVOYW1lKCkKLSAgICAgICAgICAgICAgKyAiIG9mIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIGlzIHNwZWNpZmllZCwgYnV0IGl0cyB2YXVsZSIKLSAgICAgICAgICAgICAgKyAiIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgLy8gSWYgdGhlIFVSSSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSAiY2lkOiIgY29udGVudC1pZCBwcmVmaXgKLSAgICAgICAgICAvLyBUaGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmICghcmVmLnN0YXJ0c1dpdGgoImNpZDoiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIFVSSSAiICsgcmVmCi0gICAgICAgICAgICAgICsgIiBvZiB0aGUgcmVmOnN3YVJlZiBzY2hlbWEgdHlwZSBtdXN0IHVzZSB0aGUgY2lkOiBwcmVmaXguIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJvb2xlYW4gcmVmRm91bmQgPSBmYWxzZTsKLSAgICAgICAgICBJdGVyYXRvciBpTWltZVBhcnRzID0gbWltZVBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0cyBvZiB0aGUgU09BUCBtZXNzYWdlCi0gICAgICAgICAgd2hpbGUgKGlNaW1lUGFydHMuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE1pbWVQYXJ0IG1pbWVQYXJ0ID0gKE1pbWVQYXJ0KWlNaW1lUGFydHMubmV4dCgpOwotICAgICAgICAgICAgLy8gR2V0dGluZyBwYXJ0J3MgQ29udGVudC1JRCBoZWFkZXIKLSAgICAgICAgICAgIFN0cmluZyBjaWQgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICBtaW1lUGFydC5nZXRIZWFkZXJzKCksIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotICAgICAgICAgICAgaWYgKGNpZCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBJZiB0aGUgaGVhZGVyIHZhbHVlIGVxdWFscyB0aGUgcmVmZXJlbmNlIFVSSSwKLSAgICAgICAgICAgICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0IGlzIGZvdW5kCi0gICAgICAgICAgICAgIGlmIChjaWQuZXF1YWxzKCc8JyArIHJlZi5zdWJzdHJpbmcoNCkgKyAnPicpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIE1JTUUgcGFydCBpcyBub3QgZm91bmQKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmICghcmVmRm91bmQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIFNPQVAgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIgotICAgICAgICAgICAgICArICIgYSBNSU1FIHBhcnQgd2l0aCB0aGUgPCIgKyByZWYuc3Vic3RyaW5nKDQpICsgIj4gQ29udGVudC1JRC4iKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgKiBzY2hlbWEgdHlwZS4KLSAgICogQHBhcmFtIGV4dEVsZW0gYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBzdWNoIG5hbWVzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldFN3YVJlZnMoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSwgTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgTGlzdCBzd2FSZWZzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHJvb3QgbWltZTpwYXJ0Ci0gICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgaWYgKG1pbWVQYXJ0cy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgb2YgdGhlIGZpcnN0IG1pbWU6cGFydAotICAgICAgICBMaXN0IGVsZW1zID0gKChNSU1FUGFydCkgbWltZVBhcnRzLmdldCgwKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIExpc3QgYm91bmRQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIE1JTUUgcGFydCdzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBlbGVtcy5zaXplKCk7IGsgKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlbGVtcy5nZXQoayk7Ci0gICAgICAgICAgLy8gSWYgdGhhdCBpcyBhIHNvYXA6Ym9keQotICAgICAgICAgIGlmIChlbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfU09BUF9CT0RZKSAmJiBtZXNzYWdlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyBwYXJ0cyBzcGVjaWZpZWQgYnkgdGhlIHBhcnRzIGF0dHJpYnV0ZQotICAgICAgICAgICAgTGlzdCBib2R5UGFydHMgPSAoKFNPQVBCb2R5KSBlbGVtKS5nZXRQYXJ0cygpOwotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1lc3NhZ2UgcGFydHMgYm91bmQgYnkgdGhpcyBzb2FwYmluZDpib2R5Ci0gICAgICAgICAgICBJdGVyYXRvciBpID0gbWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgaWYgKGJvZHlQYXJ0cyA9PSBudWxsIHx8IGJvZHlQYXJ0cy5jb250YWlucyhwYXJ0LmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib3VuZFBhcnRzLmFkZChwYXJ0KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBzb2FwOmhlYWRlcgotICAgICAgICAgIGVsc2UgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbXNnTmFtZTsKLSAgICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZTsKLSAgICAgICAgICAgIGlmIChlbGVtIGluc3RhbmNlb2YgU09BUEhlYWRlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEhlYWRlciBoZWFkZXIgPSAoU09BUEhlYWRlcikgZWxlbTsKLSAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcnQgaXMgYm91bmQgYnkgdGhpcyBlbGVtZW50Ci0gICAgICAgICAgICAgIG1zZ05hbWUgPSBoZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgICBwYXJ0TmFtZSA9IGhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBXU0RMNEogMS40IGRvZXMgbm90IHJlY29nbml6ZSBzb2FwOmhlYWRlciBlbGVtZW50cyB0aGF0Ci0gICAgICAgICAgICAvLyBhcmUgZW5jbG9zZWQgaW4gbWltZTptdWx0aXBhcnRSZWxhdGVkLCBzbyB1c2luZyBhIHdvcmthcm91bmQKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBoZWFkZXIgPQotICAgICAgICAgICAgICAgICgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbGVtKS5nZXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGVsZW1lbnQncyBtZXNzYWdlIGF0dHJpYnV0ZQotICAgICAgICAgICAgICBTdHJpbmcgbXNnVmFsID0gaGVhZGVyLmdldEF0dHJpYnV0ZSgibWVzc2FnZSIpOwotICAgICAgICAgICAgICAvLyBmaW5kaW5nIHRoZSBjb2xvbiBkZWxpbWl0ZXIKLSAgICAgICAgICAgICAgaW50IGNvbG9uUG9zID0gbXNnVmFsLmluZGV4T2YoIjoiKTsKLSAgICAgICAgICAgICAgU3RyaW5nIG5zID0gbnVsbDsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyBhIGxvY2FsIHBhcnQKLSAgICAgICAgICAgICAgU3RyaW5nIGxwID0gY29sb25Qb3MgPiAtMSA/IG1zZ1ZhbC5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKSA6IG1zZ1ZhbDsKLSAgICAgICAgICAgICAgLy8gSWYgdGhlIGRlbGltaXRlciBpcyBmb3VuZAotICAgICAgICAgICAgICBpZiAoY29sb25Qb3MgPiAtMSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFJldHJpZXZpbmcgYSBuYW1lc3BhY2UgVVJJCi0gICAgICAgICAgICAgICAgbnMgPSB2YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkKLSAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKS5nZXROYW1lc3BhY2UobXNnVmFsLnN1YnN0cmluZygwLCBjb2xvblBvcykpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIG1zZ05hbWUgPSBuZXcgUU5hbWUobnMsIGxwKTsKLSAgICAgICAgICAgICAgcGFydE5hbWUgPSBoZWFkZXIuZ2V0QXR0cmlidXRlKCJwYXJ0Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSByZWZlcmVuY2VkIGJ5IHRoaXMgc29hcGJpbmQ6aGVhZGVyIGVsZW1lbnQKLSAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldE1lc3NhZ2UobXNnTmFtZSk7Ci0gICAgICAgICAgICBpZiAobXNnICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEFkZGluZyB0aGUgcGFydCB0byB0aGUgbGlzdCBvZiBib3VuZCBwYXJ0cwotICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSBtc2cuZ2V0UGFydChwYXJ0TmFtZSk7Ci0gICAgICAgICAgICAgIGlmIChwYXJ0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgYm91bmRQYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWxsIHRoZSBib3VuZCBwYXJ0cyBmcm9tIHNvYXBiaW5kOmJvZHkgYW5kIHNvYXBiaW5kOmhlYWRlcgotICAgICAgICAvLyBhcmUgY29sbGVjdGVkLCBmaW5kaW5nIHN3YVJlZiByZWZlcmVuY2VzLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kUGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgYm91bmRQYXJ0cy5nZXQoaSk7Ci0gICAgICAgICAgUU5hbWUgcmVmOwotICAgICAgICAgIHNob3J0IHR5cGU7Ci0gICAgICAgICAgLy8gR2V0dGluZyBlaXRoZXIgcGFydCdzIGVsZW1lbnQgcmVmZXJlbmNlIG9yIHR5cGUgcmVmZXJlbmNlCi0gICAgICAgICAgaWYgKChyZWYgPSBwYXJ0LmdldFR5cGVOYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHlwZSA9IFhTQ29uc3RhbnRzLlRZUEVfREVGSU5JVElPTjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoKHJlZiA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gWFNDb25zdGFudHMuRUxFTUVOVF9ERUNMQVJBVElPTjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gVGhlIHBhcnQgY29uYXRpbnMgbmVpdGhlciBlbGVtZW50IG5vciB0eXBlIGF0dHJpYnV0ZSwKLSAgICAgICAgICAvLyBwcm9jZWVkaW5nIHdpdGggdGhlIG5leHQgcGFydAotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIGxpc3Qgb2Ygc2NoZW1hcyBkZWZpbmVkCi0gICAgICAgICAgTWFwIHNjaGVtYXMgPSB2YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0U2NoZW1hcygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIHNjaGVtYXMKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IHNjaGVtYXMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTTW9kZWwgeHNNb2RlbCA9IChYU01vZGVsKSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICBYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQgdHlwZQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gWFNDb25zdGFudHMuRUxFTUVOVF9ERUNMQVJBVElPTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyBzY2hlbWEgZWxlbWVudAotICAgICAgICAgICAgICBYU0VsZW1lbnREZWNsYXJhdGlvbiBlbGVtID0geHNNb2RlbC5nZXRFbGVtZW50RGVjbGFyYXRpb24oCi0gICAgICAgICAgICAgICAgcmVmLmdldExvY2FsUGFydCgpLCByZWYuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgICAgICBpZiAoZWxlbSAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gR2V0dGluZyBlbGVtZW50J3MgdHlwZQotICAgICAgICAgICAgICAgIHhzVHlwZSA9IGVsZW0uZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyByZWY6c3dhUmVmCi0gICAgICAgICAgICAgICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfU1dBX1JFRi5lcXVhbHMoeHNUeXBlLmdldE5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICYmIFdTSUNvbnN0YW50cy5TQ0hFTUFfVFlQRV9TV0FfUkVGLmVxdWFscygKLSAgICAgICAgICAgICAgICAgICAgeHNUeXBlLmdldE5hbWVzcGFjZSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgIHN3YVJlZnMuYWRkKAotICAgICAgICAgICAgICAgICAgICBuZXcgUU5hbWUoZWxlbS5nZXROYW1lc3BhY2UoKSwgZWxlbS5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeHNUeXBlID0geHNNb2RlbC5nZXRUeXBlRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgZWxlbWVudCBuYW1lcyxhZGRpbmcgZWxlbWVudCBuYW1lcyB0byB0aGUgbGlzdAotICAgICAgICAgICAgc3dhUmVmcy5hZGRBbGwoY29sbGVjdFN3YVJlZnMoeHNUeXBlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzd2FSZWZzOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIG5hbWVzIG9mIHNjaGVtYSBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYKLSAgICogc2NoZW1hIHR5cGUuCi0gICAqIEBwYXJhbSB4c1R5cGUgYSBzY2hlbWEgdHlwZS4KLSAgICogQHJldHVybiBhIGxpc3Qgb2YgbmFtZXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgY29sbGVjdFN3YVJlZnMoWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUpCi0gIHsKLSAgICBMaXN0IHN3YVJlZnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHhzVHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIElmIHRoaXMgaXMgYSBjb21wbGV4IHR5cGUKLSAgICAgIGlmICh4c1R5cGUuZ2V0VHlwZUNhdGVnb3J5KCkgPT0gWFNUeXBlRGVmaW5pdGlvbi5DT01QTEVYX1RZUEUpCi0gICAgICB7Ci0gICAgICAgIFhTQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzQ29tcGxleFR5cGUgPQotICAgICAgICAgIChYU0NvbXBsZXhUeXBlRGVmaW5pdGlvbikgeHNUeXBlOwotICAgICAgICAvLyBJZiBpdCBjb250YWlucyBtaXhlZCBjb250ZXh0Ci0gICAgICAgIGlmICh4c0NvbXBsZXhUeXBlLmdldFBhcnRpY2xlKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGNvbGxlY3RpbmcgZWxlbWVudCBuYW1lcyAKLSAgICAgICAgICBzd2FSZWZzLmFkZEFsbChjb2xsZWN0U3dhUmVmcyh4c0NvbXBsZXhUeXBlLmdldFBhcnRpY2xlKCkuZ2V0VGVybSgpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgKiBzY2hlbWEgdHlwZS4KLSAgICogQHBhcmFtIHRlcm0gYSBzY2hlbWEgdGVybS4KLSAgICogQHJldHVybiBhIGxpc3Qgb2YgbmFtZXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgY29sbGVjdFN3YVJlZnMoWFNUZXJtIHRlcm0pCi0gIHsKLSAgICBMaXN0IHN3YVJlZnMgPSBuZXcgQXJyYXlMaXN0KCk7IAotICAgIC8vIElmIGEgdGVybSBpcyBhbiBlbGVtZW50IGRlY2xhcmF0aW9uCi0gICAgaWYgKHRlcm0uZ2V0VHlwZSgpID09IFhTQ29uc3RhbnRzLkVMRU1FTlRfREVDTEFSQVRJT04pCi0gICAgewotICAgICAgWFNFbGVtZW50RGVjbGFyYXRpb24gZWxlbSA9IChYU0VsZW1lbnREZWNsYXJhdGlvbikgdGVybTsKLSAgICAgIFhTVHlwZURlZmluaXRpb24geHNUeXBlID0gZWxlbS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgLy8gSWYgZWxlbWVudCdzIHR5cGUgaXMgcmVmOnN3YVJlZgotICAgICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfU1dBX1JFRi5lcXVhbHMoeHNUeXBlLmdldE5hbWVzcGFjZSgpKQotICAgICAgICAmJiBXU0lDb25zdGFudHMuU0NIRU1BX1RZUEVfU1dBX1JFRi5lcXVhbHMoeHNUeXBlLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIEFkZCBlbGVtZW50J3MgbmFtZSB0byB0aGUgbGlzdAotICAgICAgICBzd2FSZWZzLmFkZCgKLSAgICAgICAgICBuZXcgUU5hbWUoZWxlbS5nZXROYW1lc3BhY2UoKSwgZWxlbS5nZXROYW1lKCkpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gZWxzZSBjb2xsZWN0aW5nIGVsZW1lbnQgbmFtZXMgZnJvbSBlbGVtZW50J3MgdHlwZQotICAgICAgICBzd2FSZWZzLmFkZEFsbChjb2xsZWN0U3dhUmVmcyh4c1R5cGUpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZWxzZSBpZiBhIHRlcm0gaXMgYSBtb2RlbCBncm91cAotICAgIGVsc2UgaWYodGVybS5nZXRUeXBlKCkgPT0gWFNDb25zdGFudHMuTU9ERUxfR1JPVVApCi0gICAgewotICAgICAgLy8gR2V0dGluZyBhIGxpc3Qgb2YgUGFydGljbGUgc2NoZW1hIGNvbXBvbmVudHMKLSAgICAgIFhTT2JqZWN0TGlzdCBsaXN0ID0gKChYU01vZGVsR3JvdXApIHRlcm0pLmdldFBhcnRpY2xlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vIENvbGxlY3RpbmcgZWxlbWVudCBuYW1lcwotICAgICAgICBzd2FSZWZzLmFkZEFsbChjb2xsZWN0U3dhUmVmcygoKFhTUGFydGljbGUpIGxpc3QuaXRlbShpKSkuZ2V0VGVybSgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzd2FSZWZzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYTQ2NWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMDA1LgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIGEgZmF1bHQgbWVzYWdlLCB0aGVuIGl0IGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbWF0Y2guZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIElzIHJwYyBzdHlsZT8KLSAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICBleHRFbGVtZW50cyA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAgIC8vIElzIG1lc3NhZ2UgUlBDLWxpdGVyYWw/Ci0gICAgICBpZiAoIXZhbGlkYXRvci5pc0xpdGVyYWwoZXh0RWxlbWVudHMpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvL0dldCBtZXNzYWdlCi0KLSAgICAgIC8vIEdldHMgYm9keQotICAgICAgTm9kZUxpc3Qgc29hcEJvZHlMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgewotICAgICAgICAvLyBUaGVyZSBpcyBub3QgYSBib2R5IG9yIG1vcmUgdGhhbiBvbmUgYm9kaWVzIGluIHRoZSBlbnZsb3BlLgotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgRWxlbWVudCBzb2FwQm9keUVsZW0gPSAoRWxlbWVudCkgc29hcEJvZHlMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEZpbmQgd3JhcHBlciBlbGVtZW50IGluIHRoZSBib2R5Ci0gICAgICBFbGVtZW50IHdyYXBwZXJFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwQm9keUVsZW0pOwotICAgICAgaWYgKHdyYXBwZXJFbGVtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh3cmFwcGVyRWxlbWVudAotICAgICAgICAuZ2V0TG9jYWxOYW1lKCkKLSAgICAgICAgLmVxdWFscyhiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJSZXNwb25zZSIpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5NDg2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLS8qKgotICogQlAxMDA3Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UsIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkRURHMgcmVsYXRpbmcgdG8gc29hcDpoZWFkZXIgb3Igc29hcDpib2R5IGRvY3VtZW50cywgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBtZXNzYWdlOiBubyBET0NUWVBFIGVsZW1lbnQgaXMgcHJlc2VudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDA3KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFBhcnNlIGxvZyBtZXNzYWdlIAotICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIGlzIGVtcHR5IG9yIGludmFsaWQsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgYSBEb2N1bWVudCBUeXBlIERlY2xhcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgIGVsc2UgaWYgKGRvYy5nZXREb2N0eXBlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyMDIzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMDA4LgotICogTWVzc2FnZSBoYXMgcGFydCBhY2Nlc3NvciBlbGVtZW50cyBmb3IgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlLCBpbiBubyBuYW1lc3BhY2VzLCAKLSAqIGJ1dCB0aGUgY2hpbGRyZW4gb2YgdGhlc2UgYXJlIG5hbWVzcGFjZSBxdWFsaWZpZWQgd2l0aCB0aGUgc2FtZSB0YXJnZXROYW1lc3BhY2Ugd2l0aCB3aGljaCAKLSAqIHRoZWlyIHR5cGVzIGFyZSBkZWZpbmVkLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDA4IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDA4KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbWVzc2FnZSwgdGhlbiB0aHJvdyBmYWlsIGV4Y2VwdGlvbgotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFKTsKLSAgICAgIH0KLQotICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBzb2FwIGJvZHkgZWxlbWVudAotICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvci5jb250YWluc1NvYXBCb2R5V2l0aENoaWxkKGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jUmVxdWVzdCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgLy8gZ2V0IFNPQVBBY3Rpb24KLSAgICAgIFN0cmluZyBhY3Rpb24gPQotICAgICAgICB2YWxpZGF0b3IuZ2V0U29hcEFjdGlvbihlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgLy9EZWZpbml0aW9uIGRlZmluaXRpb24gPSBlbnRyeUNvbnRleHQuZ2V0QW5hbHl6ZXJDb250ZXh0KCkuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb25zKClbMF07Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvY1JlcXVlc3QsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJcyBycGMgc3R5bGU/Ci0gICAgICBpZiAoIVdTSUNvbnN0YW50cwotICAgICAgICAuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDCi0gICAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotCi0gICAgICAvLyBHZXRzIGJvZHkKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDAgfHwgc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm90IGEgYm9keSBvciBtb3JlIHRoYW4gb25lIGJvZGllcyBpbiB0aGUgZW52bG9wZS4KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApOwotCi0gICAgICByZXN1bHQgPSBudWxsOwotCi0gICAgICAvLyBGaW5kIG9wZXJhdGlvbiBpbiB0aGUgYm9keQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwQm9keUVsZW0pOwotICAgICAgaWYgKHNvYXBPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluZCBvcGVyYXRpb24gbWVzc2FnZSBhbmQgZXh0LiBlbGVtZW50cyBpbiB0aGUgYmluZGluZwotICAgICAgTWVzc2FnZSBvcGVyYXRpb25NZXNzYWdlID0gbnVsbDsKLSAgICAgIExpc3QgZXh0RWxlbWVudHMgPSBudWxsOwotICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKSkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2UgPQotICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICAgICAgZXh0RWxlbWVudHMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAgIC5UWVBFX1JFU1BPTlNFCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIG9wZXJhdGlvbk1lc3NhZ2UgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgICBleHRFbGVtZW50cyA9Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElzIG1lc3NhZ2UgUlBDLWxpdGVyYWw/Ci0gICAgICBpZiAoIXZhbGlkYXRvci5pc0xpdGVyYWwoZXh0RWxlbWVudHMpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFKTsKLQotICAgICAgLy8gZ2V0cyBmaXJzdCBjaGlsZCBvZiBtZXNzYWdlCi0gICAgICBFbGVtZW50IHNvYXBNZXNzYWdlUGFydCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoc29hcE9wZXJhdGlvbik7Ci0gICAgICBpZiAoc29hcE1lc3NhZ2VQYXJ0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIHdoaWxlIChzb2FwTWVzc2FnZVBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciBwYXJ0IGFjY2Vzc29yIG9yIHJldHVybiBhcmUgaW4gbm8gbmFtZXNwYWNlCQkgICAgCQkKLQotICAgICAgICBpZiAoc29hcE1lc3NhZ2VQYXJ0LmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwKLSAgICAgICAgICB8fCAiIi5lcXVhbHMoc29hcE1lc3NhZ2VQYXJ0LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAgICBjaGVjayB3aGV0aGVyIGNoaWxkcmVuIGFyZSBuYW1lc3BhY2UgcXVhbGlmaWVkIAotICAgICAgICAvLyAgd2l0aCB0aGUgc2FtZSB0YXJnZXROYW1lc3BhY2Ugd2l0aCB3aGljaCB0aGVpciB0eXBlcyBhcmUgZGVmaW5lZAotICAgICAgICBTdHJpbmcgdHlwZXNUYXJnZXROUyA9Ci0gICAgICAgICAgZ2V0VHlwZU5TKG9wZXJhdGlvbk1lc3NhZ2UsIHNvYXBNZXNzYWdlUGFydC5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgICAgaWYgKHR5cGVzVGFyZ2V0TlMgPT0gbnVsbCkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotCi0gICAgICAgIGlmICghY2hlY2tDaGlsZHJlbk5hbWVzcGFjZShzb2FwTWVzc2FnZVBhcnQsIHR5cGVzVGFyZ2V0TlMpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNvYXBNZXNzYWdlUGFydCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKHNvYXBNZXNzYWdlUGFydCk7Ci0gICAgICB9Ci0KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGUuZ2V0TWVzc2FnZSgpICE9IG51bGwgJiYgZS5nZXRNZXNzYWdlKCkubGVuZ3RoKCkgPiAwKQotICAgICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobnVsbCwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBwYXJ0IHR5cGUgTlMuCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIEBwYXJhbSBwYXJ0TmFtZQotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VHlwZU5TKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIHBhcnROYW1lKQotICB7Ci0gICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHBhcnQuZ2V0VHlwZU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgY2hpbGRyZW4gZWxlbWVudHMnIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIG5vZGUKLSAgICogQHBhcmFtIHR5cGVzVGFyZ2V0TlMKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja0NoaWxkcmVuTmFtZXNwYWNlKEVsZW1lbnQgbm9kZSwgU3RyaW5nIHR5cGVzVGFyZ2V0TlMpCi0gIHsKLSAgICBOb2RlTGlzdCBwYXJ0cyA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBwYXJ0ID0gKEVsZW1lbnQpIHBhcnRzLml0ZW0oaSk7Ci0gICAgICBpZiAoIXR5cGVzVGFyZ2V0TlMuZXF1YWxzKHBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoIWNoZWNrQ2hpbGRyZW5OYW1lc3BhY2UocGFydCwgdHlwZXNUYXJnZXROUykpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmU0MDFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDkuCi0gKiBNZXNzYWdlIGluY2x1ZGVzIGFsbCBzb2FwYmluZDpoZWFkZXJzIHNwZWNpZmllZCBpbiB0aGUgd3NkbDppbnB1dCAKLSAqIChpZiByZXF1ZXN0KSBvciB3c2RsOm91dHB1dCAoaWYgcmVzcG9uc2UpIG9mIHRoZSBvcGVyYXRpb24gcmVmZXJyZWQgCi0gKiB0byBieSBpdHMgd3NkbDpiaW5kaW5nLCBhbmQgbWF5IGFsc28gaW5jbHVkZSBoZWFkZXJzIHRoYXQgd2VyZSBub3Qgc3BlY2lmaWVkLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jUmVxdWVzdCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgaWYgKGRvYyA9PSBudWxsIHx8IGRvY1JlcXVlc3QgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBzb2FwIGJvZHkgZWxlbWVudAotICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvci5jb250YWluc1NvYXBCb2R5V2l0aENoaWxkKGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotICAgICAgfQotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0KLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS13YXkgb3BlcmF0aW9uIGFuZCB3ZSBhcmUgcHJvY2Vzc2luZyBhIHJlc3BvbnNlLCB0aGVuIHNldCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgLmdldE9wZXJhdGlvbigpCi0gICAgICAgIC5nZXRTdHlsZSgpCi0gICAgICAgIC5lcXVhbHMoT3BlcmF0aW9uVHlwZS5PTkVfV0FZKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgICAgLmdldFR5cGUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gZmluZCBib2R5Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpOwotICAgICAgaWYgKHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA9PSAwIHx8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vdCBhIGJvZHkgb3IgbW9yZSB0aGFuIG9uZSBib2RpZXMgaW4gdGhlIGVudmxvcGUuCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICAvLyBmaW5kIGhlYWRlcnMKLSAgICAgIE5vZGVMaXN0IHNvYXBIZWFkZXJzID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJVGFnLkVMRU1fU09BUF9IRUFERVIuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgV1NJVGFnLkVMRU1fU09BUF9IRUFERVIuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvL2ZpbmQgYWxsIG9wZXJhdGlvbgotICAgICAgLy9FbGVtZW50IHNvYXBPcGVyYXRpb24gPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0KLSAgICAgIC8vIGdldHMgc29hcGJpbmQ6aGVhZGVycwotICAgICAgTGlzdCBiaW5kaW5nSGVhZGVycyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgIC5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICAgICAgYmluZGluZ0hlYWRlcnMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgICAuZXF1YWxzKE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICAgICAgYmluZGluZ0hlYWRlcnMgPQotICAgICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoYmluZGluZ0hlYWRlcnMgPT0gbnVsbCB8fCBiaW5kaW5nSGVhZGVycy5zaXplKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBiaW5kaW5nSGVhZGVycy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGJpbmRpbmdIZWFkZXIgPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmIChiaW5kaW5nSGVhZGVyIGluc3RhbmNlb2YgU09BUEhlYWRlcikKLSAgICAgICAgewotICAgICAgICAgIC8vIGZpbmQgc29hcGJpbmQ6aGVhZGVyIGluIFNPQVAgbWVzc2FnZQotICAgICAgICAgIGlmICghaXNCaW5kaW5nSGVhZGVySW5TT0FQTWVzc2FnZShlbnRyeUNvbnRleHQsCi0gICAgICAgICAgICBzb2FwSGVhZGVycywKLSAgICAgICAgICAgIChTT0FQSGVhZGVyKSBiaW5kaW5nSGVhZGVyKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGlmIChlLmdldE1lc3NhZ2UoKSAhPSBudWxsICYmIGUuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgcmVzdWx0ID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICogQ2hlY2tzIHdoZXRoZXIgc3BlY2lmaWVkIFNPQVBIZWFkZXIgaXMgaW4gdGhlIFNPQVBNZXNzYWdlLgotICAqIEBwYXJhbSBzb2FwSGVhZGVyTGlzdAotICAqIEBwYXJhbSBTT0FQSGVhZGVyCi0gICogQHJldHVybiBib29sZWFuCi0gICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0JpbmRpbmdIZWFkZXJJblNPQVBNZXNzYWdlKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgTm9kZUxpc3Qgc29hcEhlYWRlcnMsCi0gICAgU09BUEhlYWRlciBiaW5kaW5nSGVhZGVyKQotICB7Ci0KLSAgICBNZXNzYWdlIG1zZyA9IGdldE1lc3NhZ2VCeVFOYW1lKGVudHJ5Q29udGV4dCwgYmluZGluZ0hlYWRlci5nZXRNZXNzYWdlKCkpOwotICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBhcnQgcGFydCA9IG1zZy5nZXRQYXJ0KGJpbmRpbmdIZWFkZXIuZ2V0UGFydCgpKTsKLSAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUU5hbWUgcGFydEVsZW1lbnROYW1lID0gcGFydC5nZXRFbGVtZW50TmFtZSgpOwotICAgIFFOYW1lIHBhcnRUeXBlTmFtZSA9IHBhcnQuZ2V0VHlwZU5hbWUoKTsKLQotICAgIGlmIChwYXJ0VHlwZU5hbWUgPT0gbnVsbCAmJiBwYXJ0RWxlbWVudE5hbWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzb2FwSGVhZGVycyA9PSBudWxsIHx8IHNvYXBIZWFkZXJzLmdldExlbmd0aCgpID09IDApCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBWZWN0b3IgaGVhZGVyc0xpc3QgPQotICAgICAgWE1MVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cygoRWxlbWVudCkgc29hcEhlYWRlcnMuaXRlbSgwKSk7Ci0KLSAgICBmb3IgKGludCBpbmRleEhlYWRlciA9IDA7Ci0gICAgICBpbmRleEhlYWRlciA8IGhlYWRlcnNMaXN0LnNpemUoKTsKLSAgICAgIGluZGV4SGVhZGVyKyspCi0gICAgewotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyUGFydCA9IChFbGVtZW50KSBoZWFkZXJzTGlzdC5nZXQoaW5kZXhIZWFkZXIpOwotICAgICAgaWYgKHNvYXBIZWFkZXJQYXJ0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFFOYW1lIHNvYXBIZWFkZXJQYXJ0UU5hbWUgPQotICAgICAgICAgIG5ldyBRTmFtZSgKLSAgICAgICAgICAgIHNvYXBIZWFkZXJQYXJ0LmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgc29hcEhlYWRlclBhcnQuZ2V0TG9jYWxOYW1lKCkpOwotICAgICAgICBpZiAoKHBhcnRUeXBlTmFtZSAhPSBudWxsCi0gICAgICAgICAgJiYgcGFydFR5cGVOYW1lLmVxdWFscyhzb2FwSGVhZGVyUGFydFFOYW1lKSkKLSAgICAgICAgICB8fCAocGFydEVsZW1lbnROYW1lICE9IG51bGwKLSAgICAgICAgICAgICYmIHBhcnRFbGVtZW50TmFtZS5lcXVhbHMoc29hcEhlYWRlclBhcnRRTmFtZSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBtZXNzYWdlIGJ5IFFOYW1lLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0Ci0gICAqIEBwYXJhbSBtZXNzYWdlTmFtZQotICAgKiBAcmV0dXJuIE1lc3NhZ2UKLSAgICovCi0gIHByaXZhdGUgTWVzc2FnZSBnZXRNZXNzYWdlQnlRTmFtZSgKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0LAotICAgIFFOYW1lIG1lc3NhZ2VOYW1lKQotICB7Ci0gICAgRGVmaW5pdGlvbltdIGRlZnMgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9ucygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVmcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBNZXNzYWdlIG1zZyA9IGRlZnNbaV0uZ2V0TWVzc2FnZShtZXNzYWdlTmFtZSk7Ci0gICAgICBpZiAobXNnICE9IG51bGwpCi0gICAgICAgIHJldHVybiBtc2c7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EzN2FiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMTEuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMTEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVE9ETyBuZWVkIHRvIGhhbmRsZSBzb2FwIHdpdGggYXR0YWNobWVudHMKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgCSB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICAgCi0gICAgICBCaW5kaW5nW10gYmluZGluZ3MgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpOwotCi0gICAgICAvLyBnZXQgc29hcCBtZXNzYWdlIGNoaWxkIG5hbWUKLSAgICAgIC8vIEdldCB0aGUgRE9NIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHNvYXA6Ym9keSAoaWYgbm9uLWVtcHR5KQotICAgICAgRG9jdW1lbnQgbWVzc2FnZURvYyA9IG51bGw7Ci0KLSAgICAgIFFOYW1lIG1lc3NhZ2VQYXJ0RWxlbWVudFFOYW1lID0gbnVsbDsKLQotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VEb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgICAgLy9tZXNzYWdlRG9jID0gWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwgCi0gICAgICAgIC8vCVdTSVByb3BlcnRpZXMuREVGX1NPQVBfU0NIRU1BKTsKLSAgICAgICAgLy8gZ2V0IHNvYXAgb3BlcmF0aW9uIG5hbWUgZnJvbSB0aGUgc29hcDpib2R5Ci0KLSAgICAgICAgLy8gTk9URTogZ2V0U29hcEJvZHlDaGlsZCgpIG1heSByZXR1cm4gbnVsbCwgaWYgdGhlIHNvYXA6Ym9keSBkaWQgbm90IGNvbnRhaW4gYW55IGNoaWxkIGVsZW1lbnRzCi0gICAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VFbGVtZW50ID0gdmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQobWVzc2FnZURvYyk7Ci0KLSAgICAgICAgLy8gZm9yIGRvYy1saXQuLi4gZmluZCB0aGUgd3NkbDpwYXJ0IGZyb20gb25lIG9mIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucyB0aGF0IGhhcyAKLSAgICAgICAgLy8gdGhlIHNvYXAgZWxlbWVudCB1c2VkIGluIHRoZSBtZXNzYWdlLiAgICAgIAotICAgICAgICAvLyB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0IHdpdGggYW4gZWxlbWVudCBhdHRyaWIgdmFsIG1hdGNoaW5nIHRoZSBzb2FwIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBpZiAoc29hcE1lc3NhZ2VFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9Ci0gICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoKG1lc3NhZ2VEb2MgPT0gbnVsbCkgfHwgdGhpcy52YWxpZGF0b3IuaXNGYXVsdChtZXNzYWdlRG9jKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZW1wdHkgbWVzc2FnZXMgYW5kIGZhdWx0IG1lc3NhZ2VzIGRvIG5vdCBxdWFsaWZ5IGZvciB0aGlzIFRBCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGxvb2sgZm9yIG1hdGNoKHMpIGluIGRvYyBvcGVyYXRpb25zCi0gICAgICAvLyBpZiBmb3VuZCwgd2UncmUgZG9uZSwgZWxzZQotICAgICAgLy8gbG9vayBmb3IgbWF0Y2gocykgaW4gcnBjIG9wZXJhdGlvbnMKLQotICAgICAgLyogRG9jLWxpdCAKLSAgICAgICAqIGdldCBsaXN0IG9mIG9wZXJhdGlvbnMgKGZyb20gY2FuZGlkYXRlcykgZm9yIHdoaWNoIHRoZSBmaXJzdCBzb2FwOmJvZHkgY2hpbGQgUU5hbWUgaXMgdGhlCi0gICAgICAgKiA8cGFydCBlbGVtZW50PSIuLi4iPiB2YWx1ZSBvZiB0aGF0IG9wZXJhdGlvbidzIDx3c2RsOmlucHV0PiBvciA8d3NkbDpvdXRwdXQ+IGVsZW1lbnQgKGRlcGVuZGluZwotICAgICAgICogb24gd2hldGhlciBtZXNzYWdlIGlzIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlKS4KLSAgICAgICAqLwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gZG9jQmluZGluZ09wZXJhdGlvbnMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICAgICAgYmluZGluZ3MpOwotICAgICAgLy8gbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbWF0Y2ggdGhlIDx3c2RsOmlucHV0PiBvciA8d3NkbDpvdXRwdXQ+IChkZXBlbmRpbmcgb24gZW50cnlUeXBlKQotICAgICAgLy8gZm9yIHBhcnQgZWxlbWVudD0iLi4uIgotICAgICAgLy8gKElTU1VFOiB3aGF0IGFib3V0IHBhcnQgdHlwZT0iLi4uIj8pCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgdmFsaWRhdG9yLmdldERvY0xpdE9wZXJhdGlvbnMoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUsCi0gICAgICAgICAgZG9jQmluZGluZ09wZXJhdGlvbnMpOwotICAgICAgaWYgKHBvdGVudGlhbERvY0xpdE9wcy5sZW5ndGggIT0gMCkKLSAgICAgIHsKLSAgICAgICAgLy8gZm91bmQgYXQgbGVhc3Qgb25lIGRvYyBsaXQgbWF0Y2gKLQotICAgICAgICAvLyAqKiogTm93IHdlIGtub3cgaXQncyBkb2N1bWVudC1saXRlcmFsLCBzY2hlbWEtdmFsaWRhdGUgdGhlIFNPQVAgcGF5bG9hZCBhY2NvcmRpbmdseSAgICAgICAgICAgIAkJCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IubWVzc2FnZUlzRG9jTGl0U2NoZW1hVmFsaWQoZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLyogc29hcCBtZXNzYWdlIGlzIG5vdCBkb2MtbGl0IHNvIHRyeSA6Ci0gICAgICAgKiBScGMtbGl0Ci0gICAgICAgKi8KLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBycGNCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIGJpbmRpbmdzKTsKLQotICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFuIG9wZXJhdGlvbiBtYXRjaAotICAgICAgQmluZGluZ09wZXJhdGlvbiByY3BPcE1hdGNoID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgbWVzc2FnZURvYywKLSAgICAgICAgICBycGNCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICBpZiAocmNwT3BNYXRjaCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHBhcnRzIG1hdGNoCi0gICAgICAgIHJjcE9wTWF0Y2ggPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldE9wZXJhdGlvblBhcnRzTWF0Y2goCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICAgIG1lc3NhZ2VEb2MsCi0gICAgICAgICAgICBycGNCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyY3BPcE1hdGNoID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vbm90IG1hdGNoZWQgd2l0aCBycGMgZWl0aGVyLiBQcmVwYXJlIGFzc2VydGlvbiBmYWlsdXJlLgotICAgICAgICBTdHJpbmdCdWZmZXIgcnBjT3BlcmF0aW9uTGlzdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIHJwY09wZXJhdGlvbkxpc3QuYXBwZW5kKHJwY0JpbmRpbmdPcGVyYXRpb25zW2ldLnRvU3RyaW5nKCkgKyAiXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ0J1ZmZlciBkb2NPcGVyYXRpb25MaXN0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgZG9jT3BlcmF0aW9uTGlzdC5hcHBlbmQoZG9jQmluZGluZ09wZXJhdGlvbnNbaV0udG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgIi0tTUVTU0FHRTpcbiIKLSAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgICAgKyAiXG4tLUNBTkRJREFURSBSUEMgU1RZTEUgT1BFUkFUSU9OUyAoIgotICAgICAgICAgICAgKyAocnBjQmluZGluZ09wZXJhdGlvbnMubGVuZ3RoICE9IDAKLSAgICAgICAgICAgICAgPyAocnBjQmluZGluZ09wZXJhdGlvbnMubGVuZ3RoICsgIik6XG4iICsgcnBjT3BlcmF0aW9uTGlzdCkKLSAgICAgICAgICAgICAgOiAiTk9ORSkiKQotICAgICAgICAgICAgKyAiXG4tLUNBTkRJREFURSBET0NVTUVOVCBTVFlMRSBPUEVSQVRJT05TICgiCi0gICAgICAgICAgICArIChkb2NCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggIT0gMAotICAgICAgICAgICAgICA/IChkb2NCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggKyAiKTpcbiIgKyBkb2NPcGVyYXRpb25MaXN0KQotICAgICAgICAgICAgICA6ICJOT05FKSIpKTsKLQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTVkNGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMDEyLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDEyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDEyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIGxvb2sgZm9yIDxzb2FwOkVudmVsb3BlPiBlbGVtZW50czoKLSAgICAgIC8vIChOb3RlOiBzaW5jZSB0aGlzIGlzIGEgU29hcCBtZXNzYWdlIHdlIGV4cGVjdCBleGFjdGx5IG9uZSBzb2FwIGVudmVsb3BlLCBidXQgd2UgZG8gbm90IGFzc3VtZSBpdCkuCi0gICAgICBEb2N1bWVudCByZXF1ZXN0RG9jID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBtZXNzYWdlIGlzIGVtcHR5IG9yIGludmFsaWQsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChyZXF1ZXN0RG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIEVsZW1lbnQgZW52RWxlbSA9IHJlcXVlc3REb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvL05vZGVMaXN0IHNvYXBFbnZMaXN0ID0gcmVxdWVzdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkVudmVsb3BlIik7Ci0KLSAgICAgIC8vIElmIHRoZSBkb2N1bWVudCBlbGVtZW50IHRhZyBuYW1lIGlzIG5vdCBFbnZlbG9wZQotICAgICAgLy8gb3IgdGhlIG5hbWVzcGFjZSBpcyBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLwotICAgICAgaWYgKCFlbnZFbGVtLmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpCi0gICAgICAgIHx8IGVudkVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgIC8vIFJlcXVlc3QgY29udGFpbnMgcHJvcGVyIHNvYXAgRW52ZWxvcGUgZWxlbWVudAotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyB3ZSBleHBlY3QgYSBTb2FwIEZhdWx0IGFzIGEgcmVzcG9uc2UJCi0gICAgICBEb2N1bWVudCByZXNwb25zZURvYyA9Ci0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBOb2RlTGlzdCBzb2FwRmF1bHRMaXN0ID0KLSAgICAgICAgcmVzcG9uc2VEb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgIkZhdWx0Iik7Ci0gICAgICAvLyBBREQgZXh0cmEgY2hlY2sgaGVyZSB0aGF0IHRoZSA8c29hcDpGYXVsdD4gaXMgYSBjaGlsZCBvZiA8c29hcDpFbnZlbG9wZT4gPz8JCSAgICAgIAkJCQkKLSAgICAgIGlmICgoc29hcEZhdWx0TGlzdCA9PSBudWxsKSB8fCAoc29hcEZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gTm8gU29hcCBmYXVsdCBmb3VuZC4KLSAgICAgICAgLy8gQXNzZXJ0aW9uIGZhaWxlZCAoQUREIGhpZ2hsaWdodCB0aGUgY2hpbGQgaGVyZSA/KQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAiLS0tIFJFUVVFU1Q6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICArICJcbi0tLSBSRVNQT05TRTpcbiIKLSAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlc3BvbnNlKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI2ZjhlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotCi0KLS8qKgotICogQlAxMDEzLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDEzIGV4dGVuZHMgQlAxMDExCi17Ci0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMTMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYmRhZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotCi0vKioKLSAqIEJQMTAzMS4KLSAqIAotICogQGF1dGhvcjogR3JhaGFtIFR1cnJlbGwsIElCTSBVSwotICovCi1wdWJsaWMgY2xhc3MgQlAxMDMxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDMxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvYzsKLSAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpCi0gICAgICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgTm9kZUxpc3QgZmF1bHRDb2RlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZmF1bHRjb2RlIik7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZUxpc3QgZmF1bHRDb2RlTm9kZXMgPSAoZmF1bHRDb2Rlcy5pdGVtKGkpKS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmF1bHRDb2RlTm9kZXMuZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChmYXVsdENvZGVOb2Rlcy5pdGVtKGopIGluc3RhbmNlb2YgVGV4dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0IGZhdWx0Q29kZVRleHQgPSAoVGV4dCkgZmF1bHRDb2RlTm9kZXMuaXRlbShqKTsKLSAgICAgICAgICAgIGlmIChmYXVsdENvZGVUZXh0LmdldERhdGEoKS5pbmRleE9mKCcuJykgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAvLyBkb3R0ZWQgbm90YXRpb24gdXNlZC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIC8vIG5vIGRvdHRlZCBub3RhdGlvbiB1c2VkIGluIGEgZmF1bHRjb2RlIGVsZW1lbnQKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0MTMwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotCi0vKioKLSAqIEJQMTAzMgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgc29hcDpFbnZlbG9wZSwgc29hcDpIZWFkZXIsIGFuZCBzb2FwOkJvZHkgZWxlbWVudHMgZG8gbm90IGhhdmUgYW55IGF0dHJpYnV0ZXMgaW4gdGhlIG5hbWVzcGFjZSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAzMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAzMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBHZXR0aW5nIGEgcm9vdCBlbGVtZW50Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgICAgIC8vIEFzc3VtaW5nIHRoYXQgcm9vdCBlbGVtZW50IHNob3VsZCBiZSBzb2FwOkVudmVsb3BlCi0gICAgICAvLyBJZiBub3QsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gbG9va2luZyBmb3IgYW55IGF0dHJpYnV0ZSBvZiBzb2FwOkVudmVsb3BlIGluIHRoZSBuYW1lc3BhY2UKLSAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIKLSAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBBdHRyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInNvYXA6RW52ZWxvcGUgYXR0cmlidXRlIG5hbWUgaXMgIgotICAgICAgICAgICsgYXR0ci5nZXROYW1lKCkpOwotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBjaGlsZCBvZiBzb2FwOkVudmVsb3BlCi0gICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIHNvYXA6SGVhZGVyCi0gICAgICBpZiAoZWxlbWVudCAhPSBudWxsCi0gICAgICAgICYmIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpKQotICAgICAgewotICAgICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6SGVhZGVyIGluIHRoZSBuYW1lc3BhY2UKLSAgICAgICAgLy8gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIgotICAgICAgICAvLyBJZiBhdCBsZWFzdCBvbmUgYXR0cmlidXRlIGlzIGZvdW5kLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigic29hcDpIZWFkZXIgYXR0cmlidXRlIG5hbWUgaXMgIgotICAgICAgICAgICAgKyBhdHRyLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgLy8gTW92aW5nIHRvIHRoZSBuZXh0IHNvYXA6RW52ZWxvcGUgY2hpbGQKLSAgICAgICAgZWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpCb2R5Ci0gICAgICBpZiAoZWxlbWVudCAhPSBudWxsCi0gICAgICAgICYmIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbG9va2luZyBmb3IgYW55IGF0dHJpYnV0ZSBvZiBzb2FwOkJvZHkgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJzb2FwOkJvZHkgYXR0cmlidXRlIG5hbWUgaXMgIgotICAgICAgICAgICAgKyBhdHRyLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBhbiBhdHRyaWJ1dGUgdGhhdCBpcyBpbiB0aGUgbmFtZXNwYWNlCi0gICAqIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi0gICAqIEBwYXJhbSBhdHRycyBhIGNvbGxlY3Rpb24gb2YgYXR0cmlidXRlcwotICAgKiBAcmV0dXJuIGFuIGF0dHJpYnV0ZSBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZSBvciBudWxsCi0gICAqLwotICBwcml2YXRlIEF0dHIgZ2V0QXR0cmlidXRlKE5hbWVkTm9kZU1hcCBhdHRycykKLSAgewotICAgIEF0dHIgcmV0ID0gbnVsbDsKLSAgICBpZiAoYXR0cnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJzLml0ZW0oaSk7Ci0gICAgICAgIGlmIChhdHRyLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwKLSAgICAgICAgICAmJiBhdHRyLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0ID0gYXR0cjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlYzhhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBCUDEwMzMKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIFNPQVAgZW52ZWxvcGUgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDMzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDMzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIGVtcHR5IG9yIGludmFsaWQsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0dGluZyB0aGUgcm9vdCBlbGVtZW50Ci0gICAgICBFbGVtZW50IGVsZW0gPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBJZiBpdCBpcyBub3QgdGhlIHNvYXA6RW52ZWxvcGUsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghZWxlbS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQKQotICAgICAgICB8fCAhZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGVudmVsb3BlIGNvbnRhaW5zIHRoZSB4bWxuczp4bWwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIFN0cmluZyBpbmNvcnJlY3RFbGVtZW50TmFtZSA9IGdldEluY29ycmVjdEVsZW1lbnROYW1lKGVsZW0pOwotICAgICAgaWYgKGluY29ycmVjdEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgbmFtZSBvZiBhbiBlbGVtZW50IGNvbnRhaW5pbmcgIgotICAgICAgICAgICsgInN1Y2ggbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGlzIFwiIiArIGluY29ycmVjdEVsZW1lbnROYW1lICsgIlwiLiIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIGFueSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB4bWxuczp4bWw9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIuIAotICAgKiBAcGFyYW0gZWxlbSB0aGUgcm9vdCBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIGFuIGVsZW1lbnQgZm91bmQgb3IgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEluY29ycmVjdEVsZW1lbnROYW1lKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbAotICAgIFN0cmluZyBhdHRyVmFsdWUgPSBlbGVtLmdldEF0dHJpYnV0ZU5TKAotICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUywgInhtbCIpOwotICAgIC8vIElmIGl0IGVxdWFscyB0byAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKLSAgICAvLyByZXR1cm4gYW4gZWxlbWVudCBuYW1lOwotICAgIGlmIChXU0lDb25zdGFudHMuTlNfVVJJX1hNTC5lcXVhbHMoYXR0clZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZWxlbS5nZXROb2RlTmFtZSgpOwotICAgIH0KLSAgICAvLyBHb2luZyB0aHJvdWdoIGVsZW1lbnQncyBjaGlsZHJlbgotICAgIEVsZW1lbnQgY2hpbGQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW0pOwotICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIElmIGFueSBvZiB0aGVtIGhhcyB4bWxuczp4bWwgYXR0cmlidXRlLCByZXR1cm4gYSB2YWx1ZQotICAgICAgU3RyaW5nIG5hbWUgPSBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShjaGlsZCk7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgIH0KLSAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgZWxlbWVudCdzIGNoaWxkCi0gICAgICBjaGlsZCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKGNoaWxkKTsKLSAgICB9Ci0gICAgLy8gTm8geG1sbnM6eG1sIGF0dHJpYnV0ZXMgZm91bmQsIHJldHVybiBudWxsCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiYWQ3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDExMDAuCi0gKiBBIG1lc3NhZ2UgdGhhdCBkb2VzIG5vdCBjb250YWluIGEgU09BUCBmYXVsdCBTSE9VTEQgdXNlIGEgIjIwMCBPSyIgCi0gKiBIVFRQIHN0YXR1cyBjb2RlLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMTAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMTAwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICAgIHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICJGYXVsdCIpOwotCi0gICAgICAgIC8vIElmIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOkZhdWx0LCB0aGVuIGNoZWNrIGl0Ci0gICAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgc29hcDpGYXVsdAotICAgICAgICAgIC8vIGNoZWNrIEhUVFAgc3RhdHVzIGNvZGUKLSAgICAgICAgICBTdHJpbmcgaHR0cFN0YXR1cyA9Ci0gICAgICAgICAgICBVdGlscy5nZXRIVFRQU3RhdHVzQ29kZSgKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgICAgICAgIGlmICghIjIwMCIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgICAgIC8vZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIlxuUmVzcG9uc2UgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgICArICJcbk1lc3NhZ2U6XG4iCi0gICAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBpdCBpcyBhIHNvYXA6RmF1bHQsIHRoZW4gdGhlIHJlc3VsdCBtdXN0IGJlIG5vdEFwcGxpY2FibGUKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWM4NjkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQMTEwNy4KLSAqIFRoZSBjb250YWluZWQgc29hcGJpbmQ6ZmF1bHQgaXMgZGVmaW5lZCBpbiB0aGUgd3NkbDpiaW5kaW5nLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMTA3KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIE9wZXJhdGlvblNpZ25hdHVyZSByZXNwb25zZVNpZyA9IG51bGw7Ci0gIHByaXZhdGUgVmVjdG9yIGZhdWx0cyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQRmF1bHQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgZmF1bHQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0KLSAgICBpZiAoZmF1bHROYW1lID09IG51bGwpCi0gICAgICBmYXVsdE5hbWUgPSBjdHguZ2V0QmluZGluZ0ZhdWx0KCkuZ2V0TmFtZSgpOwotCi0gICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICBpZiAob3AgPT0gbnVsbCAvKiB8fCBmYXVsdE5hbWUgPT0gbnVsbCovCi0gICAgICApIC8vIG1heSBiZSBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgZmF1bHQgd2l0aCBudWxsIG5hbWUKLSAgICAgIHJldHVybjsKLQotICAgIC8vIHdlIHN1cHBvc2UgdGhhdCBTT0FQRmF1bHQuZ2V0TmFtZSgpIGNvcnJlc3BvbmRzIHRvIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24ncyBmYXVsdCBuYW1lICAgICAgICAgICAKLSAgICBGYXVsdCBmID0gb3AuZ2V0RmF1bHQoZmF1bHROYW1lKTsKLSAgICBpZiAoZiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgTWVzc2FnZSBtID0gZi5nZXRNZXNzYWdlKCk7Ci0gICAgLy8gbWVzc2FnZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSBwYXJ0Ci0gICAgaWYgKG0gPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkgPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0KLSAgICAvL1BhcnQgZmF1bHRQYXJ0ID0gV1NETFV0aWwuZ2V0UGFydChtLCBmYXVsdE5hbWUpOwotICAgIFBhcnQgZmF1bHRQYXJ0ID0gKFBhcnQpIG0uZ2V0UGFydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLQotICAgIFR5cGVzUmVnaXN0cnkgdFJlZyA9IChUeXBlc1JlZ2lzdHJ5KSBjdHguZ2V0UGFyYW1ldGVyKCJUeXBlc1JlZ2lzdHJ5Iik7Ci0gICAgUU5hbWUgZWxlbVFOYW1lID0gZmF1bHRQYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgUU5hbWUgdHlwZVFOYW1lID0gZmF1bHRQYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgaWYgKHR5cGVRTmFtZSA9PSBudWxsKQotICAgICAgdHlwZVFOYW1lID0gdFJlZy5nZXRUeXBlKGZhdWx0UGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBpZiAodHlwZVFOYW1lID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXJ0IHR5cGUgY2FuIG5vdCBiZSBudWxsLiIpOwotCi0gICAgLy8gZm9yIGFsbCBmYXVsdHM7IGlmIGl0IHByZXNlbnRzIGluIHRoZSBkZWZpbml0aW9uIHJlbW92ZSBpdCBmcm9tIGxpc3QKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0cy5zaXplKCk7KQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbSA9IChFbGVtZW50KSBmYXVsdHMuZ2V0KGkpOwotCi0gICAgICAvLyBUT0RPOiBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoaXMgaXMgaGVyZS4gIE9ubHkgdGhlIGVsZW1lbnQgc2V0dGluZyBzaG91bGQgYmUgY2hlY2tlZC4gCi0gICAgICAvL2Jvb2xlYW4gbWF0Y2hCeVR5cGUgPQotICAgICAgLy8gIGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKHR5cGVRTmFtZS5nZXRMb2NhbFBhcnQoKSkgJiYgTnVsbFV0aWwuZXF1YWxzKGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCksIHR5cGVRTmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICAgIGJvb2xlYW4gbWF0Y2hCeUVsZW1lbnQgPQotICAgICAgICBlbGVtUU5hbWUgIT0gbnVsbAotICAgICAgICAgICYmIGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGVsZW1RTmFtZS5nZXRMb2NhbFBhcnQoKSkKLSAgICAgICAgICAmJiBOdWxsVXRpbC5lcXVhbHMoCi0gICAgICAgICAgICBlbGVtLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgZWxlbVFOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgICAgLy9pZiAobWF0Y2hCeVR5cGUgfHwgbWF0Y2hCeUVsZW1lbnQpCi0gICAgICBpZiAobWF0Y2hCeUVsZW1lbnQpCi0gICAgICAgIGZhdWx0cy5yZW1vdmUoaSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGkrKzsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBQYXJzZSByZXF1ZXN0IGFuZCByZXNwb25zZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jUmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgaWYgKChkb2NSZXF1ZXN0ID09IG51bGwpIHx8IChkb2NSZXNwb25zZSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCF0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvY1Jlc3BvbnNlKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gY3JlYXRlIHJlcXVlc3Qgc2lnbmF0dXJlCi0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFNvYXBBY3Rpb24oZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpKSwKLSAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgICAgICAgIHZhbGlkYXRvcikpOwotCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNT1ZFRDogUGFyc2UgcmVzcG9uc2UgbWVzc2FnZQotICAgICAgICAgIC8vZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgICAgICByZXNwb25zZVNpZyA9IG5ldyBPcGVyYXRpb25TaWduYXR1cmUoZG9jUmVzcG9uc2UpOwotICAgICAgICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgICAgICAgICByZXNwb25zZVNpZy5jcmVhdGVSUENTaWduYXR1cmUoKTsKLQotICAgICAgICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAgIGlmIChyZXNwb25zZVNpZyA9PSBudWxsIHx8ICFyZXNwb25zZVNpZy5pc0ZhdWx0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VTaWcgIT0gbnVsbCAmJiByZXNwb25zZVNpZy5pc0ZhdWx0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZXh0cmFjdCBhbGwgZmF1bHRzIGFuZCB0cnkgZmluZCB0aGVtIGluIHRoZSBkZWZpbml0aW9uCi0gICAgICAgICAgICAvLyBleHRyYWN0cyBvbmx5IGZhdWx0cyB3aXRoIG5hbWVzcGFjZQotICAgICAgICAgICAgRWxlbWVudCBib2R5ID0KLSAgICAgICAgICAgICAgWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudCgKLSAgICAgICAgICAgICAgICBkb2NSZXNwb25zZS5nZXREb2N1bWVudEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0JPRFkpOwotICAgICAgICAgICAgRWxlbWVudCBmYXVsdCA9Ci0gICAgICAgICAgICAgIFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoYm9keSwgV1NJVGFnLkVMRU1fU09BUF9GQVVMVCk7Ci0gICAgICAgICAgICBFbGVtZW50IGRldGFpbCA9IFhNTFV0aWxzLmdldEVsZW1lbnQoImRldGFpbCIsIGZhdWx0KTsKLSAgICAgICAgICAgIGlmIChkZXRhaWwgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAgICAgICAgICAgZmF1bHRzID0gWE1MVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cyhkZXRhaWwpOwotCi0gICAgICAgICAgICAgIC8vIFJFTU9WRTogV2h5IGRvIHRoZSBmYXVsdHMgaGF2ZSB0byBiZSBuYW1lc3BhY2VkIHF1YWxpZmllZD8KLSAgICAgICAgICAgICAgLy9YTUxVdGlscy5yZW1vdmVBbGxFbGVtZW50c1dpdGhvdXROUyhmYXVsdHMpOwotCi0gICAgICAgICAgICAgIC8vIGlmIGZhdWx0cyBleGlzdCB0cnkgdG8gdmFsaWRhdGUgaXQKLSAgICAgICAgICAgICAgaWYgKGZhdWx0cy5zaXplKCkgPiAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFwIG0gPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAgICAgICAgIFdTRExVdGlsLmV4cGFuZERlZmluaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCkpOwotICAgICAgICAgICAgICAgIG0ucHV0KAotICAgICAgICAgICAgICAgICAgImRlZmluaXRpb24iLAotICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgICAgICAgICAgVHlwZXNSZWdpc3RyeSB0UmVnID0KLSAgICAgICAgICAgICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgICAgICAgICAgICBtLnB1dCgiVHlwZXNSZWdpc3RyeSIsIHRSZWcpOwotICAgICAgICAgICAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZShtYXRjaC5nZXRPcGVyYXRpb24oKSwgbSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZhdWx0cy5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgICAgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLnNlcmlhbGl6ZUVsZW1lbnQoKEVsZW1lbnQpIGZhdWx0cy5nZXQoaSksIHN3KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN3LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICAgICAiXG5GYXVsdHM6XG4iICsgc3cudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWY2OTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMjAxLgotICogVGhlIG5hbWVzcGFjZSBvZiB0aGUgc29hcDpFbnZlbG9wZSBpbiB0aGUgbWVzc2FnZSBoYXMgdmFsdWU6IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvLiAKLSAqLwotcHVibGljIGNsYXNzIEJQMTIwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkgfHwKLSAgICAgIChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgU3RyaW5nIG5zID0gcm9vdC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBsb2NhbCA9IHJvb3QuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBpZiAoIUVMRU1fU09BUF9FTlZFTE9QRS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobnMpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJSb290IGVsZW1lbnQgaGFzIG5hbWVzcGFjZTogIiArIG5zLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotCi0gICAgICBlbHNlIGlmICghRUxFTV9TT0FQX0VOVkVMT1BFLmdldExvY2FsUGFydCgpLmVxdWFscyhsb2NhbCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIlJvb3QgZWxlbWVudCBoYXMgbG9jYWwgbmFtZTogIiArIGxvY2FsLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1YWJlZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDIuIAotICogRWFjaCBjaGlsZCBlbGVtZW50IChpZiBhbnkpIG9mIHRoZSBzb2FwOkJvZHkgZWxlbWVudCBpcyBuYW1lc3BhY2UgcXVhbGlmaWVkIChub3QgdGhlIGdyYW5kY2hpbGRyZW4pLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFBhcnNlIGxvZyBtZXNzYWdlIAotICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgZWxzZSBpZiAoIXZhbGlkYXRvci5jb250YWluc1NvYXBCb2R5V2l0aENoaWxkKGRvYykpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgcm9vdCBlbGVtZW50Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgICAgIC8vIEdldCBhIG5vZGUgbGlzdCB3aGljaCBzaG91bGQgY29udGFpbiB0aGUgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgIE5vZGVMaXN0IHJvb3ROb2RlTGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgRUxFTV9TT0FQX0JPRFkuZ2V0TmFtZXNwYWNlVVJJKCksIEVMRU1fU09BUF9CT0RZLmdldExvY2FsUGFydCgpKTsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHNvYXA6Qm9keSBlbGVtZW50LAotICAgICAgLy8gdGhlbiBtYWtlIHN1cmUgdGhhdCBlYWNoIGNoaWxkIGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQKLSAgICAgIGlmIChyb290Tm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHNvYXA6Qm9keSBlbGVtZW50Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSByb290Tm9kZUxpc3QuaXRlbSgwKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2Ygc29hcDpCb2R5IGNoaWxkIGVsZW1lbnRzIAotICAgICAgICBOb2RlTGlzdCBjaGlsZHJlbiA9IGJvZHkuZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGVhY2ggY2hpbGQgZWxlbWVudCBpcyBuYW1lc3BhY2UgcXVhbGlmaWVkCi0gICAgICAgIGZvciAoaW50IGkgPSAwOwotICAgICAgICAgIGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKSAmJiByZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgICAgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG5zID0gbi5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIGlmIChucyA9PSBudWxsIHx8IG5zLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDcwYWNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMjAzLiAKLSAqIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIGRldGFpbCBlbGVtZW50IG9mIGEgcXVhbGlmaWVkIGF0dHJpYnV0ZSBpbiB0aGUgc29hcDpGYXVsdCBpcyBhIAotICogZm9yZWlnbiBuYW1lc3BhY2UsIGRpZmZlcmVudCBmcm9tICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBxdWFsaWZpZWRBdHRyaWJ1dGVzID0gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBBREQ6IE5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hlY2sgaXMgcmVxdWlyZWQsIHNpbmNlIGl0IHNob3VsZCBhbHJlYWR5IGJlIGRvbmUKLSAgICAgIC8vIEFwcGxpY2FibGUgdG8gcmVzcG9uc2UgbWVzc2FnZXMgb25seQotICAgICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgICAuZ2V0TWVzc2FnZUVudHJ5KCkKLSAgICAgICAgLmdldFR5cGUoKQotICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpCi0gICAgICB7Ci0gICAgICAgIC8vIGxvb2sgZm9yIDxzb2FwOkZhdWx0PiBlbGVtZW50OgotICAgICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOkZhdWx0Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHdlIGhhdmUgYSBzb2FwOkZhdWx0LiAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgLy8gbG9vayBhdCBlYWNoIHNvYXA6RmF1bHQgaW4gdHVybgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXVsdExpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBzb2FwRmF1bHQgPSAoRWxlbWVudCkgZmF1bHRMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGRldGFpbCBlbGVtZW50KHMpIGlmIGFueQotICAgICAgICAgICAgICBOb2RlTGlzdCBkZXRhaWxMaXN0ID0KLSAgICAgICAgICAgICAgICBzb2FwRmF1bHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0RFVEFJTCk7Ci0gICAgICAgICAgICAgIGlmIChkZXRhaWxMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBkZXRhaWwgZWxlbWVudC4uLiAgICAgCQkJCQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGV0YWlsTGlzdC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCBkZXRhaWxBdHRyaWJzID0KLSAgICAgICAgICAgICAgICAgICAgZGV0YWlsTGlzdC5pdGVtKGopLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBhbnkgcXVhbGlmaWVkIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxBdHRyaWJzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZGV0YWlsQXR0cmlicy5nZXRMZW5ndGgoKTsgaysrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgQXR0ciBuZXh0QXR0ciA9IChBdHRyKSAoZGV0YWlsQXR0cmlicy5pdGVtKGspKTsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBxdWFsaWZpZWQgYXR0cmlidXRlLCBjaGVjayB0aGF0IAotICAgICAgICAgICAgICAgICAgICAgIC8vIHFuYW1lICE9IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUKLSAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRBdHRyaWJ1dGVzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0QXR0cgotICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCB1bmV4cGVjdGVkIHFuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXF1YWxpZmllZEF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gdGFyZ2V0IG1lc3NhZ2UgaXMgbm90IGEgUmVzcG9uc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNjMDlmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDQuCi0gKiBUaGUgc2VyaWFsaXplZCBhcnJheSBmb3JtIGluIHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIAotICogc29hcGVuYzphcnJheVR5cGUgYXR0cmlidXRlLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9Ci0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPQotICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKSkKLSAgICAgICAgJiYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAgIC5UWVBFX1JFU1BPTlNFCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKQotICAgICAgICAgICYmIChiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BlcmF0aW9uTWVzc2FnZSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotCi0gICAgICBib29sZWFuIGlzQ29udGFpbkFycmF5ID0gZmFsc2U7Ci0KLSAgICAgIENvbGxlY3Rpb24gcGFydHMgPSBvcGVyYXRpb25NZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBRTmFtZSB0eXBlID0gbnVsbDsKLQotICAgICAgICBpZiAocGFydC5nZXRUeXBlTmFtZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0eXBlID0gcmVnaXN0cnkuZ2V0VHlwZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHR5cGUgPSBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc0NvbnRhaW5BcnJheSA9Ci0gICAgICAgICAgcmVnaXN0cnkuaXNFeHRlbmRzQXJyYXkodHlwZSkKLSAgICAgICAgICAgIHx8IHJlZ2lzdHJ5LmlzVXNlc1dTRExBcnJheVR5cGUodHlwZSkKLSAgICAgICAgICAgIHx8IGlzQXJyYXlUeXBlKHR5cGUpOwotICAgICAgICBpZiAoaXNDb250YWluQXJyYXkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpc0NvbnRhaW5BcnJheSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2lsZHJlbkxpc3QgPQotICAgICAgICAgIHNvYXBCb2R5RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLSAgICAgICAgZm9yIChpbnQgaW5kZXhDaGlsZCA9IDA7Ci0gICAgICAgICAgaW5kZXhDaGlsZCA8IHNvYXBCb2R5Q2lsZHJlbkxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgaW5kZXhDaGlsZCsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5Q2lsZHJlbkxpc3QuaXRlbShpbmRleENoaWxkKTsKLSAgICAgICAgICBpZiAoZWxlbQotICAgICAgICAgICAgLmhhc0F0dHJpYnV0ZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5DT0RJTkcsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0FSUkFZX1RZUEUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0eXBlIHVzZXMgYW4gYXJyYXkgb3Igbm90LgotICAgKiBAcGFyYW0gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0FycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgYm9vbGVhbiBhcnJheVR5cGUgPSBmYWxzZTsKLQotICAgIEVsZW1lbnQgdHlwZUVsZW1lbnQgPSBnZXRUeXBlRWxlbWVudCh0eXBlKTsKLSAgICBpZiAodHlwZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBOb2RlTGlzdCBsaXN0ID0KLSAgICAgICAgdHlwZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwKLSAgICAgICAgICAic2VxdWVuY2UiKTsKLSAgICAgIGlmIChsaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgICAgYXJyYXlUeXBlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgWE1MIGVsZW1lbnQgZGVmaW5pbmcgdGhlIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFR5cGVFbGVtZW50KFFOYW1lIHR5cGUpCi0gIHsKLSAgICBUeXBlc1tdIGFsbFR5cGVzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0VHlwZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgYWxsVHlwZXMgIT0gbnVsbCAmJiBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKGFsbFR5cGVzW2ldICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzRWxlbWVudCA9IGFsbFR5cGVzW2ldLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICAgIGlmICh0eXBlc0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgZXh0TGlzdCA9IGFsbFR5cGVzW2ldLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IGV4dExpc3QuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBpZiAoZXh0RWxlbQotICAgICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgICAgICAgICAuZXF1YWxzKG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwgInNjaGVtYSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHlwZXNFbGVtZW50ID0KLSAgICAgICAgICAgICAgICAoKFNjaGVtYSkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGVzRWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZUxpc3QgY29tcGxleFR5cGVzTGlzdCA9Ci0gICAgICAgICAgICB0eXBlc0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QsCi0gICAgICAgICAgICAgICJjb21wbGV4VHlwZSIpOwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29tcGxleFR5cGVzTGlzdC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgdHlwZUVsZW0gPSAoRWxlbWVudCkgY29tcGxleFR5cGVzTGlzdC5pdGVtKGopOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKHR5cGVFbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFbGVtOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmFmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFRyYXZlcnNhbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLQotLyoqCi0gKiBCUDEyMDggTk9UIEZVTExZIFRFU1RFRC4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSBsb2cgbWVzc2FnZSAKLSAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jID09IG51bGwpIHsKLSAgICAgIC8vbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfSBlbHNlIHsKLQotICAgICAgLy8gVHJhdmVyc2UgZG9jdW1lbnQgbG9va2luZyBmb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCi0gICAgICAvLyBJU1NVRTogdGhpcyBpbm5lciBjbGFzcyBuZWVkcyAuLi4gcmV2aXNpdGluZy9yZXBsYWNpbmcKLSAgICAgIC8vIEVHLiBEbyB3ZSB3YW50IHRvIGxpc3QgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCAKLSAgICAgIC8vIG9yIGlzIHRoZSBmaXJzdCBzdWZmaWNpZW50PwotICAgICAgWE1MVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBYTUxUcmF2ZXJzYWwoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRhcmdldDogIiArIHBpLmdldFRhcmdldCgpICsgIiwgRGF0YTogIiArIHBpLmdldERhdGEoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFERDogSG93IHNob3VsZCB0aGlzIGV4Y2VwdGlvbiBiZSBoYW5kbGVkPwotICAgICAgICAgIH0KLQotICAgICAgICAgIHN1cGVyLnZpc2l0KHBpKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgdHJhdmVyc2FsLnZpc2l0KGRvYyk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQKLSAgICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTMzYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMjExLgotICogCi0gKiBDb250ZXh0OiAKLSAqIEZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlLCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbAotICogCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFBhcnQgYWNjZXNzb3IgZWxlbWVudHMgaW4gdGhlIG1lc3NhZ2UgZG8gbm90IGhhdmUgYW4geHNpOm5pbCBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG9mICIxIiBvciAidHJ1ZSIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jUmVxdWVzdCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBHZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkICAgICAgICAgICAgICAgIAotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLQotICAgICAgLy9DcmVhdGUgdGhlIHR5cGVzIHJlZ2lzdHJ5Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICAvLyBGaW5kIGFuIG9wZXJhdGlvbiBtYXRjaCAgICAgICAgCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgbWF0Y2gKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIG5vdCBycGMtbGl0ZXJhbCwgdGhlbiByZXR1cm4gbm90QXBwbGljYWJsZSByZXN1bHQKLSAgICAgIGlmICghV1NETFV0aWxzCi0gICAgICAgIC5pc1JwY0xpdGVyYWwobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBhY2Nlc3NvcnMKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBPcGVyYXRpb24pOwotICAgICAgd2hpbGUgKGFjY2Vzc29yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShhY2Nlc3NvciwgQVRUUl9YU0lfTklMKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgeHNpOm5pbCBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZSBpcyAiMSIgb3IgInRydWUiCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChhdHRyICE9IG51bGwKLSAgICAgICAgICAmJiAoYXR0ci5nZXRWYWx1ZSgpLmVxdWFscygiMSIpIHx8IGF0dHIuZ2V0VmFsdWUoKS5lcXVhbHMoInRydWUiKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGFjY2Vzc29yIG5hbWUgaXMgIgotICAgICAgICAgICAgKyBhY2Nlc3Nvci5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMxZjc3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Ym9keSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBjb250YWlucyBleGFjdGx5IG9uZSBwYXJ0IGFjY2Vzc29yIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50cyBib3VuZCB0byB0aGUgZW52ZWxvcGUncyBjb3JyZXNwb25kaW5nIHNvYXBiaW5kOmJvZHkgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMjEyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIxMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBudWxsOwotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBGYXVsdCBlbnRyeSBvciBubyBib2R5IGVudHJpZXMsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAodmFsaWRhdG9yLmlzRmF1bHQoZG9jKQotICAgICAgICB8fCAoc29hcE9wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRTb2FwQm9keUNoaWxkKGRvYykpID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIENyZWF0aW5nIGEgcXVhbGlmaWVkIG5hbWUgb2YgcG90ZW50aWFsIFNPQVAgb3BlcmF0aW9uCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgc29hcE9wZXJhdGlvbi5nZXROYW1lc3BhY2VVUkkoKSwgc29hcE9wZXJhdGlvbi5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcnBjQmluZGluZ09wZXJhdGlvbnMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYmluZGluZyBvcGVyYXRpb24gYnkgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgIG9wZXJhdGlvblFOYW1lLAotICAgICAgICBycGNCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBtZXNzYWdlIHBhcnRzIGFuZCBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgICAvLyBpbiB0aGUgYmluZGluZyBkZXBlbmRpbmcgb24gbWVzc2FnZSB0eXBlCi0gICAgICBMaXN0IG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IG51bGw7Ci0gICAgICBMaXN0IGV4dEVsZW1zID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgYWxsIHRoZSBhY2Nlc3NvcnMgb2YgdGhlIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgICBMaXN0IGFjY2Vzc29ycyA9IFhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbik7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBvcmRlcmVkIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBMaXN0IG9yZGVyZWRQYXJ0TmFtZXMgPQotICAgICAgICB2YWxpZGF0b3Iub3JkZXJQYXJ0TmFtZXMob3BlcmF0aW9uTWVzc2FnZVBhcnRzLCBleHRFbGVtcyk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBJdGVyYXRvciBpID0gb3JkZXJlZFBhcnROYW1lcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIGFjY2Vzc29yIGZvciB0aGUgcGFydCBzcGVjaWZpZWQsCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChnZXRQYXJ0c0NvdW50KGFjY2Vzc29ycywgcGFydE5hbWUpICE9IDEpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIG5hbWUgb2Ygd3NkbDpwYXJ0IGlzICIgKyBwYXJ0TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb3VudHMgdGhlIGFtb3VudCBvZiBhY2Nlc3NvcnMgb2YgYSBzcGVjaWZpYyBuYW1lCi0gICAqIEBwYXJhbSBhY2Nlc3NvcnMgYSBsaXN0IG9mIGFjY2Vzc29ycwotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiBhY2Nlc3NvciBlbGVtZW50cyB0byBiZSBjb3VudGVkCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgaW50IGdldFBhcnRzQ291bnQoTGlzdCBhY2Nlc3NvcnMsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWNjZXNzb3JzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSAoRWxlbWVudCkgYWNjZXNzb3JzLmdldChpKTsKLSAgICAgIGlmIChhY2Nlc3Nvci5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWQ4NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Qm9keSBlbGVtZW50LCBhbmQgaXMgcmVmZXJyZWQgYnkgYSBkb2MtbGl0ZXJhbCBiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBoYXMgbm8gZWxlbWVudCBjb250ZW50IGluIHRoZSBzb2FwOkJvZHkgZWxlbWVudCBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZG9jLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBtZXNzYWdlRWxlbWVudCA9IG51bGw7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkIG9yIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkKLSAgICAgIC8vIG9yIHRoZXJlIGlzIG5vIGJvZHkgZW50cmllcywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsCi0gICAgICAgIHx8IHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKG1lc3NhZ2VFbGVtZW50ID0gdmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQoZG9jKSkgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIG1lc3NhZ2UgZWxlbWVudAotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIG1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLCBtZXNzYWdlRWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBkb2N1bWVudCBiaW5kaW5nIG9wZXJhdGlvbnMgZnJvbSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLQotICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBwb3RlbnRpYWxEb2NMaXRPcHNbMF0uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgZnJvbSBzb2FwYmluZDpib2R5Ci0gICAgICBMaXN0IHBhcnRzID0gbnVsbDsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gdmFsaWRhdG9yLmdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICAgIGlmIChzb2FwQm9keSAhPSBudWxsKQotICAgICAgICBwYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICAgIC8vIGlmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgYW4gZW1wdHkgc3RyaW5nIGFuZCB0aGVyZSBpcwotICAgICAgLy8gYXQgbGVhc3Qgb25lIGFjY2Vzc29yLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuaXNFbXB0eSgpCi0gICAgICAgICYmICFYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKG1lc3NhZ2VFbGVtZW50KS5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJ3c2RsOm9wZXJhdGlvbiBuYW1lIGlzICIKLSAgICAgICAgICArIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXROYW1lKCkpOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExMzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBCUDEyMTQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLWZhdWx0IGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCwgYW5kIGlzIHJlZmVycmVkIGJ5IGEgcnBjLWxpdGVyYWwgYmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZW52ZWxvcGUgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBhY2Nlc3NvciBlbGVtZW50cyBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcnBjLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGxpdGVyYWwsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtcykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnRzIGF0dHJpYnV0ZSBmcm9tIHNvYXBiaW5kOmJvZHkKLSAgICAgIExpc3QgcGFydHMgPSBudWxsOwotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSB2YWxpZGF0b3IuZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgIHBhcnRzID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLQotICAgICAgLy8gaWYgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBhbiBlbXB0eSBzdHJpbmcgYW5kIHRoZXJlIGlzCi0gICAgICAvLyBhdCBsZWFzdCBvbmUgYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAocGFydHMgIT0gbnVsbCAmJiBwYXJ0cy5pc0VtcHR5KCkKLSAgICAgICAgJiYgIVhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbikuaXNFbXB0eSgpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigid3NkbDpvcGVyYXRpb24gbmFtZSBpcyAiCi0gICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYTIwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vR2V0IHRoZSByZXF1ZXRzIG1lc3NhZ2UgYW5kIGNoZWNrIHRoZSB2YWx1ZSBvZiBtdXN0VW5kZXJzdGFuZC4KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgT2JqZWN0W10gbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzID0gZ2V0TXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzKG1lc3NhZ2UpOwotCi0gICAgaWYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKChtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXNbaW5kZXhdICE9IG51bGwpCi0gICAgICAgICAgJiYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIxIikKLSAgICAgICAgICAgIHx8IG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIwIikpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiVGhlIFNPQVAgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIHdhcyBwcmVzZW50ICIKLSAgICAgICAgICAgICAgICArICIgYW5kIGl0cyB2YWx1ZSB3YXMgICIKLSAgICAgICAgICAgICAgICArIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0sCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0gLy9FbmQgaWYKLSAgICAgIH0gLy9FbmQgZm9yCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLy9SZXRyZWl2ZXMgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgZnJvbSBBTEwgU09BUCBoZWFkZXIKLSAgLy9JZiB0aGUgSGVhZGVyIGlzIG1pc3Npbmcgb3IgaWYgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgdGFyZ2V0cyBvciBpZgotICAvL3RoZSBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSB0aGVuIHNldCB0aGUKLSAgLy9hc3NlcnRpb25SZXN1bHQgdG8gUkVTVUxUX05PVF9BUFBMSUNBQkxFLgotICBwcml2YXRlIE9iamVjdFtdIGdldE11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyhTdHJpbmcgbWVzc2FnZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2UpOwotICAgIE5vZGVMaXN0IGhlYWRlcnMgPQotICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0KLSAgICAvL0lmIGEgaGVhZGVyIG5vdCBwcmVzZW50IHNldCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotICAgIC8vZWxzZSBwcm9jZXNzIGVhY2ggaGVhZGVyRW50cnkKLSAgICBpZiAoaGVhZGVycy5nZXRMZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVmVjdG9yIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEVsZW1lbnQgaGVhZGVyID0gKEVsZW1lbnQpIGhlYWRlcnMuaXRlbSgwKTsKLSAgICAgIGlmIChoZWFkZXIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgIE5vZGVMaXN0IGhlYWRlckVudHJpZXMgPSBoZWFkZXIuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgLy9Gb3IgZWFjaCBoZWFkZXIgZW50cnkgY2hlY2sgcmV0cmVpdmUgdGhlIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSAKLSAgICAgIC8vaWYgYW55LCBlbHNlIHNldCB0aGUgdGVzdCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotCi0gICAgICAvL1RoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiBhIGhlYWRlciBjb250YWluZWQgYW55IGNoaWxkIEVsZW1lbnRzCi0gICAgICBib29sZWFuIGhlYWRlclRhcmdldHMgPSBmYWxzZTsKLQotICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlckVudHJpZXMuZ2V0TGVuZ3RoKCk7ICsraW5kZXgpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgaGVhZGVyRW50cnkgPSBoZWFkZXJFbnRyaWVzLml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoaGVhZGVyRW50cnkuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIGhlYWRlclRhcmdldHMgPSB0cnVlOwotICAgICAgICAgIEF0dHIgbXVzdFVuZGVyc3RhbmQgPQotICAgICAgICAgICAgKChFbGVtZW50KSBoZWFkZXJFbnRyeSkuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIC8vUmV0cmVpdmUgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgb2YgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgaWYgKG11c3RVbmRlcnN0YW5kICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG11c3RVbmRlcnN0YW5kVmFsdWUgPSBtdXN0VW5kZXJzdGFuZC5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAgIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcy5hZGQobXVzdFVuZGVyc3RhbmRWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZS4iCi0gICAgICAgICAgfSAvLwltdXN0VW5kZXJzdGFuZCAhPSBudWxsCi0gICAgICAgIH0KLSAgICAgIH0gLy9FbmQgZm9yCi0KLSAgICAgIGlmICghaGVhZGVyVGFyZ2V0cykKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhbnkgaGVhZGVyIGVudHJpZXMuCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXMudG9BcnJheSgpOwotICAgIH0gLy9FbmQgSWYgaGVhZGVycy5nZXRMZW5ndGgoKSA8IDAJCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIG11c3QgdW5kZXJzdGFuZCBmYXVsdCBjb2RlLgotICAgKiBAcGFyYW0gZmF1bHRDb2RlRWxlbSB1bmRlcnN0YW5kIGZhdWx0IGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBtdXN0IHVuZGVyc3RhbmQgZmF1bHQgY29kZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTXVzdFVuZGVyc3RhbmRGYXVsdENvZGUoRWxlbWVudCBmYXVsdENvZGVFbGVtKQotICB7Ci0gICAgLy9BIGZhdWx0Y29kZSBtYXkgb3IgbWF5bm90IGhhdmUgYSBwcmVmaXgsIGlmIGl0IGRvZXMgaXRzIG5hbWVzcGFjZSBzaG91bGQgYmUgCi0gICAgLy9odHQ6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGZhdWx0Y29kZSBlbGVtZW50LgotICAgIC8vSWYgYSBwcmVmaXggaXMgcHJlc2VudCBhbmQgaXQgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIG9yIGlzIG51bGwgCi0gICAgLy90aGVuIHRoaXMgcmV0dXJucyBmYWxzZS4gIFRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBmYXVsdGNvZGUgaXMgdGhlbiBjaGVjayB0byBzZWUKLSAgICAvL2lmIGl0IGlzIG9uZSBvZiB0aGUgcGVybWl0dGVkIHZhbHVlcy4KLSAgICBpZiAoZmF1bHRDb2RlRWxlbSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGZhdWx0Q29kZSA9IGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICBpZiAoZmF1bHRDb2RlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgZmF1bHRDb2RlRWxlbVByZWZpeCA9IGZhdWx0Q29kZUVsZW0uZ2V0UHJlZml4KCk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgZmF1bHRDb2RlLmluZGV4T2YoJzonKSk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPQotICAgICAgZmF1bHRDb2RlLnN1YnN0cmluZyhmYXVsdENvZGUuaW5kZXhPZignOicpICsgMSwgZmF1bHRDb2RlLmxlbmd0aCgpKTsKLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsIHx8IGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KQotICAgICAgICAmJiAoZmF1bHRDb2RlTmFtZS5lcXVhbHMoIk11c3RVbmRlcnN0YW5kIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIk11c3RVbmRlcnN0YW5kLiIpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChmYXVsdENvZGUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYWNkNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwMi4KLSAgICogVGhlIHNvYXA6ZmF1bHRjb2RlIHZhbHVlIGluIHRoZSBzb2FwOkZhdWx0IGVsZW1lbnQgb2YgdGhlIHJlc3BvbnNlIAotICAgKiBtZXNzYWdlIGlzIG5vdCBjdXN0b20sIGFuZCBpcyBvbmUgb2Y6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyLgotICAgKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8vU09BUCBmYXVsdCBjb2RlIHZhbHVlcyBzaG91bGQgbm90IGJlIGN1c3RvbTogb25seSBzdGFuZGFyZCBjb2RlIHF1YWxpZmllcnMgCi0gIC8vYXJlIHVzZWQ6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvL1N0cmluZyByZXF1ZXN0TWVzc2FnZSA9IG51bGw7Ci0gICAgU3RyaW5nIHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7Ci0KLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0dldCB0aGUgcmVzcG9uc2UgbWVzc2FnZSBjaGVjayB0aGUgZmF1bHRjb2RlLgotICAgICAgTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKTsKLSAgICAgIGlmIChsb2dFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3BvbnNlTWVzc2FnZSA9IGxvZ0VudHJ5UmVzcG9uc2UuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIERvY3VtZW50IHRhcmdldERvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0Q29kZXMgPSB0YXJnZXREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZhdWx0Y29kZSIpOwotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZmF1bHRjb2RlIik7Ci0KLSAgICAgICAgaWYgKGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvL05vIGZhdWx0Y29kZQkKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgZmF1bHRDb2RlRWxlbSA9IGZhdWx0Q29kZXMuaXRlbShpKTsKLSAgICAgICAgICAvL0lmIHRoZSBmYXVsdGNvZGUgd2FzIE11c3RVbmRlcnN0YW5kLCBjaGVjayB0aGUgdmFsdWUgb2YgCi0gICAgICAgICAgLy90aGUgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIGluIHRoZSByZXF1ZXN0LgotICAgICAgICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIGVsc2UgaWYgKGZhdWx0Q29kZUVsZW0uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZEZhdWx0Q29kZSgoRWxlbWVudCkgZmF1bHRDb2RlRWxlbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwocmVzcG9uc2VNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICAvL2ZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAvLyAgICAiVGhlIGZhdWx0Y29kZSB2YWx1ZSB3YXMgOiAiCi0gICAgICAgICAgICAgIC8vICAgICAgICArIGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICAgICAgICAgIH0gLy9FbmQgaWYgKGZhdWx0Q29kZS5lcXVhbHMuLi4pCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgfSAvL0VuZCBmb3IJCi0gICAgICB9IC8vRW5kIGlmIGxvZ0VudHJ5UmVzcG9uc2UhPSBudWxsCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZhdWx0Q29kZS4KLSAgICogQHBhcmFtIGZhdWx0Q29kZUVsZW0gYSBmYXVsdGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmYXVsdGNvZGUgaXMgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkRmF1bHRDb2RlKEVsZW1lbnQgZmF1bHRDb2RlRWxlbSkKLSAgewotICAgIC8vQSBmYXVsdGNvZGUgbWF5IG9yIG1heW5vdCBoYXZlIGEgcHJlZml4LCBpZiBpdCBkb2VzIGl0cyBuYW1lc3BhY2Ugc2hvdWxkIGJlIAotICAgIC8vaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgZmF1bHRjb2RlIGVsZW1lbnQuCi0gICAgLy9JZiBhIHByZWZpeCBpcyBwcmVzZW50IGFuZCBpdCBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBuYW1lc3BhY2Ugb3IgaXMgbnVsbCAKLSAgICAvL3RoZW4gdGhpcyByZXR1cm5zIGZhbHNlLiAgVGhlIGxvY2FsIHBhcnQgb2YgdGhlIGZhdWx0Y29kZSBpcyB0aGVuIGNoZWNrIHRvIHNlZQotICAgIC8vaWYgaXQgaXMgb25lIG9mIHRoZSBwZXJtaXR0ZWQgdmFsdWVzLgotICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBmYXVsdENvZGUgPSBmYXVsdENvZGVFbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKS50cmltKCk7Ci0gICAgaWYgKGZhdWx0Q29kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYOiBUaGlzIGlzIG5vdCBjb3JyZWN0LCBzaW5jZSB0aGlzIGVsZW1lbnQgY2FuIG5vdCBiZSBuYW1lc3BhY2UgcXVhbGlmaWVkCi0gICAgU3RyaW5nIGZhdWx0Q29kZUVsZW1QcmVmaXggPSBmYXVsdENvZGVFbGVtLmdldFBhcmVudE5vZGUoKS5nZXRQcmVmaXgoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgbm90IGEgUU5hbWUgdGhlbiByZXR1cm4gZmFsc2UKLSAgICBpbnQgaW5kZXg7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPSBmYXVsdENvZGU7Ci0gICAgaWYgKChpbmRleCA9IGZhdWx0Q29kZS5pbmRleE9mKCc6JykpICE9IC0xKQotICAgIHsKLSAgICAgIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgZmF1bHRDb2RlTmFtZSA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBmYXVsdENvZGUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsICYmIGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgaWYgKChmYXVsdENvZGVOYW1lLmVxdWFscygiTXVzdFVuZGVyc3RhbmQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJDbGllbnQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJTZXJ2ZXIiKSkpCi0gICAgICAgICAgLyogUkVNT1ZFOgotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIlZlcnNpb25NaXNtYXRjaC4iKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiQ2xpZW50LiIpCi0gICAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpKQotICAgICAgICAgICovCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICB8fCBmYXVsdENvZGVOYW1lLmVxdWFscygiQ2xpZW50IikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5lcXVhbHMoIlNlcnZlciIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJWZXJzaW9uTWlzbWF0Y2guIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJDbGllbnQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWIyYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAgICogQlAxMzA1LgotICAgKiBJdCBpcyBpbiBhbiBIVFRQIDUwMCBtZXNzYWdlIHdpdGggIlNlcnZlciIgRXJyb3IgY29kZS4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHdlIGhhdmUgYSBzb2FwOkZhdWx0LiBDaGVjayB0aGF0IGl0IGlzIGNvbnRhaW5lZCBpbiBhIEhUVFAgNTAwIG1lc3NhZ2UKLSAgICAgICAgLy8gR1QgOiBiYXNlIEhUVFAgSGVhZGVyIHBhcnNpbmcgb24gQlAxMDAxIC0gdGhpcyBzaG91bGQgYmUgZmFjdG9yZWQgdG8gYSAKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIEhUVFAgbWVzc2FnZSBwYXJzaW5nIG1ldGhvZCBvciBtZXRob2RzIChyZXF1ZXN0ICYgcmVzcG9uc2UpCi0gICAgICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICAgIC8vUmVzcG9uc2UtTGluZSAgID0gSFRUUC1WZXJzaW9uIFJlc3BvbnNlQ29kZSBSZXNwb25zZU1zZyBTUCBDUkxGCi0gICAgICAgIFZlY3RvciByZXNwb25zZUxpbmUgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgICAvL1N0cmluZyBodHRwVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgIC8vU3RyaW5nIHJlc3BvbnNlQ29kZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBzdGF0dXNDb2RlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgICAgICBpZiAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHN0YXJ0TGluZSA9IGh0dHBNZXNzYWdlVG9rZW5pemVyLm5leHRUb2tlbigpOwotCi0gICAgICAgIGlmIChzdGFydExpbmUuc3RhcnRzV2l0aCgiSFRUUCIpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHN0YXJ0TGluZSwgIlx1MDAyMCIpOwotCi0gICAgICAgICAgd2hpbGUgKHN0YXJ0TGluZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VMaW5lLmFkZChzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDApOwotCi0gICAgICAgICAgLy8gUEI6IENoZWNrIGZvciA1MDAgc3RhdHVzIGNvZGUgd2hpY2ggc2hvdWxkIGJlIHRoZSBzZWNvbmQgdG9rZW4gaW4gdGhlIHN0cmluZwotICAgICAgICAgIHN0YXR1c0NvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotCi0gICAgICAgICAgLy9yZXNwb25zZUNvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotICAgICAgICAgIC8vc3RhdHVzQ29kZSA9IChTdHJpbmcpIHJlc3BvbnNlTGluZS5nZXQoMik7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBQQjogSnVzdCBjaGVjayBmb3IgNTAwIHN0YXR1cyBjb2RlCi0gICAgICAgICAgaWYgKCFzdGF0dXNDb2RlCi0gICAgICAgICAgICAuZXF1YWxzKFN0cmluZy52YWx1ZU9mKEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfSU5URVJOQUxfRVJST1IpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmICghcmVzcG9uc2VDb2RlLmVxdWFsc0lnbm9yZUNhc2UoIk9LIikgfHwKLSAgICAgICAgICAgIC8vCSghc3RhdHVzQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJTZXJ2ZXJFcnJvciIpKSkgeyAgICAgCQkJCi0gICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihodHRwSGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZTQwZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwNi4KLSAgICogVGhlIHNvYXA6RmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuIG90aGVyIHRoYW4gc29hcDpmYXVsdGNvZGUsIHNvYXA6ZmF1bHRzdHJpbmcsIHNvYXA6ZmF1bHRhY3RvciBvciBzb2FwOmRldGFpbC4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAJICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpmYXVsdCBjb250YWlucyBvbmx5IGZhdWx0Y29kZSwgZmF1bHRzdHJpbmcsIGZhdWx0YWN0b3IsIGRldGFpbC4KLSAgICAgICAgLy8gSWYgaXQgZG9lcywgZnVydGhlciBjaGVjayB0aGF0IGl0IGlzIHVucXVhbGlmaWVkLgotICAgICAgICAvLyBGb3IgZWFjaCA8c29hcDpGYXVsdD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGZhdWx0TGlzdC5pdGVtKG4pLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgY2hpbGQgIT0gbnVsbDsKLSAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICAgICAgJiYgIShjaGlsZAotICAgICAgICAgICAgICAgICAgLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQ09ERSkKLSAgICAgICAgICAgICAgICAgIHx8IGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9GQVVMVF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQUNUT1IpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBQQjogVGhpcyBpcyBjaGVja2VkIGluIDEzMTYgbm93Ci0gICAgICAgICAgICAgICAgLy98fCAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2ZGQ2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwNy4KLSAqIFRoZSBlbGVtZW50cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBuYW1lc3BhY2VkIAotICogImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiBkbyBub3QgaGF2ZSBhIHNvYXA6ZW5jb2RpbmdTdHlsZSBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDp4eHg+IGVsZW1lbnRzOgotICAgICAgTm9kZUxpc3Qgc29hcExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICIqIik7Ci0gICAgICBpZiAoKHNvYXBMaXN0ID09IG51bGwpIHx8IChzb2FwTGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBlbnZlbG9wZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayB0aGF0IG5vIDxzb2FwOnh4eD4gZWxlbWVudHMgY29udGFpbnMgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOnh4eD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBuZXh0RWxlbSA9IChFbGVtZW50KSBzb2FwTGlzdC5pdGVtKG4pOwotICAgICAgICAgICAgaWYgKG5leHRFbGVtCi0gICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGVOb2RlTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZW5jb2RpbmdTdHlsZSIpCi0gICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2MwYTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMDguCi0gKiBUaGUgY2hpbGRyZW4gZWxlbWVudHMgb2Ygc29hcDpCb2R5IGRvIG5vdCBoYXZlIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGxvb2sgZm9yIHNvYXA6Qm9keSBlbGVtZW50czoKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBUaGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwOkJvZHksIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICgoc29hcEJvZHlMaXN0ID09IG51bGwpIHx8IChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpCb2R5IGNoaWxkIGVsZW1lbnRzIGNvbnRhaW4gYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudAotICAgICAgRWxlbWVudCBjaGlsZCA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApKTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoY2hpbGQuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgIEVMRU1fU09BUF9CT0RZLmdldE5hbWVzcGFjZVVSSSgpLCAiZW5jb2RpbmdTdHlsZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoaWxkIGVsZW1lbnQgbmFtZSBpcyBcIiIgKwotICAgICAgICAgICAgY2hpbGQuZ2V0Tm9kZU5hbWUoKSArICJcIi4iKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IHNvYXA6Qm9keSBjaGlsZCBlbGVtZW50Ci0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiNmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMzA5LgotICogVGhlIHNvYXA6RW52ZWxvcGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgY2hpbGRyZW4gYWZ0ZXIgdGhlIHNvYXA6Qm9keSBlbGVtZW50IAotICovCi1wdWJsaWMgY2xhc3MgQlAxMzA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIE5vZGVMaXN0IHNvYXBFbnZMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSk7Ci0gICAgICBpZiAoKHNvYXBFbnZMaXN0ID09IG51bGwpIHx8IChzb2FwRW52TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBFbnZlbG9wZSBlbGVtZW50KHMpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgaWYgYSA8c29hcDpCb2R5PiBleGlzdHMgaW4gYSA8c29hcDpFbnZlbG9wZT4sIHRoYXQgaXRzIHRoZSBsYXN0IGluIHRoZSBlbnZlbG9wZSAgICAgICAgCQkgICAgICAJCQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkVudmVsb3BlPgotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgc29hcEVudkxpc3QuZ2V0TGVuZ3RoKCk7IG4rKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIGluIHRoZSBFbnZlbG9wZSAgICAgICAJCQkJCi0gICAgICAgICAgICBFbGVtZW50IHNvYXBFbnYgPSAoRWxlbWVudCkgc29hcEVudkxpc3QuaXRlbShuKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGVudkNoaWxkTGlzdCA9IHNvYXBFbnYuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgVmVjdG9yIGVudkNoaWxkRWxlbUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IGVudkNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgdisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlIG5leHROb2RlID0gZW52Q2hpbGRMaXN0Lml0ZW0odik7Ci0gICAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW52Q2hpbGRFbGVtTGlzdC5hZGRFbGVtZW50KChFbGVtZW50KSBuZXh0Tm9kZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgbGlzdCBmb3IgPHNvYXA6Qm9keT4KLSAgICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgZW52Q2hpbGRFbGVtTGlzdC5zaXplKCk7IG0rKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBlbnZDaGlsZEVsZW0gPSAoRWxlbWVudCkgZW52Q2hpbGRFbGVtTGlzdC5lbGVtZW50QXQobSk7Ci0gICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAuZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgICAgICAgICAmJiBlbnZDaGlsZEVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgPHNvYXA6Qm9keT4gc28gY2hlY2sgaXRzIHRoZSBsYXN0IGluIHRoZSBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBFbnZlbG9wZQotICAgICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0gIT0gZW52Q2hpbGRFbGVtTGlzdC5sYXN0RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDE4MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMTYuCi0gKiBUaGUgc29hcDpGYXVsdCBlbGVtZW50IGNoaWxkcmVuIChzb2FwOmZhdWx0Y29kZSwgc29hcDpmYXVsdHN0cmluZywgc29hcDpmYXVsdGFjdG9yIG9yIHNvYXA6ZGV0YWlsKSBhcmUgdW5xdWFsaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6ZmF1bHQKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gY2hlY2sgdGhhdCBubyBzb2FwOmZhdWx0IGNvbnRhaW5zIG9ubHkgZmF1bHRjb2RlLCBmYXVsdHN0cmluZywgZmF1bHRhY3RvciwgZGV0YWlsLgotICAgICAgICAvLyBJZiBpdCBkb2VzLCBmdXJ0aGVyIGNoZWNrIHRoYXQgaXQgaXMgdW5xdWFsaWZpZWQuCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkZhdWx0PgotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgZmF1bHRMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChOb2RlIGNoaWxkID0gZmF1bHRMaXN0Lml0ZW0obikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICBjaGlsZCAhPSBudWxsOwotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAmJiAoY2hpbGQKLSAgICAgICAgICAgICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAgICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0NPREUpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfU1RSSU5HKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0FDVE9SKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0RFVEFJTCkpCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODA4MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLQkgKiBCUDEzMTgKLQkgKiAKLQkgKiBUaGUgZ3JhbmRjaGlsZHJlbiBlbGVtZW50cyBvZiBzb2FwOkJvZHkgZG8gbm90IGhhdmUgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlLgotCSAqLwotcHVibGljIGNsYXNzIEJQMTMxOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMxOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCByZXNwb25zZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgcmVxdWVzdERvYyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgLy8gbWVzc2FnZXMgYXJlIGVtcHR5IG9yIGludmFsaWQsIERPTSBvYmplY3RzIGFyZSBudWxsCi0gICAgICBpZiAocmVzcG9uc2VEb2MgPT0gbnVsbCB8fCByZXF1ZXN0RG9jID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoaXNGYXVsdChyZXNwb25zZURvYykpCi0gICAgICAvLyAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IFNPQVBBY3Rpb24KLSAgICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgICAgICBhY3Rpb24gPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCAgICAgICAgICAgICAgICAKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0KLSAgICAgIC8vQ3JlYXRlIHRoZSB0eXBlcyByZWdpc3RyeQotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgLy8gRmluZCBhbiBvcGVyYXRpb24gbWF0Y2ggICAgICAgIAotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIHJlcXVlc3REb2MsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSWYgdGhpcyBpcyBub3QgcnBjLWxpdGVyYWwsIHRoZW4gcmV0dXJuIG5vdEFwcGxpY2FibGUgcmVzdWx0Ci0gICAgICBpZiAoIVdTRExVdGlscwotICAgICAgICAuaXNScGNMaXRlcmFsKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCksIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6Qm9keT4gZWxlbWVudHM6Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAvLyBSZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwIEJvZHkgZWxlbWVudHMKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gY2hlY2sgdGhhdCBubyA8c29hcDpCb2R5PiBjaGlsZCBvciBncmFuZGNoaWxkIGVsZW1lbnRzIGNvbnRhaW5zIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZQotICAgICAgLy8gRm9yIGVhY2ggPHNvYXA6Qm9keT4KLSAgICAgIGJvb2xlYW4gZ3JhbmRDaGlsZEZvdW5kID0gZmFsc2U7Ci0gICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShuKTsKLSAgICAgICAgLy8gUkVNT1ZFOiBUaGlzIHdpbGwgZ2V0IGFsbCBub2RlcyAoY2hpbGQsIGdyYW5kY2hpbGRyZW4sIGV0Yy4pCi0gICAgICAgIC8vTm9kZUxpc3QgY2hpbGRMaXN0ID0gbmV4dEJvZHlFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTGlzdCA9IG5leHRCb2R5RWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGlmIChjaGlsZExpc3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGNoZWNrIGFsbCBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgY2hpbGRMaXN0LmdldExlbmd0aCgpOyBtKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pdGVtKG0pLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnQgbmV4dENoaWxkRWxlbSA9IChFbGVtZW50KSBjaGlsZExpc3QuaXRlbShtKTsKLSAgICAgICAgICAgICAgLy8gY2hlY2sgY2hpbGRyZW4gb2YgdGhpcyBjaGlsZAotICAgICAgICAgICAgICAvLyBSRU1PVkU6IFRoaXMgd2lsbCBnZXQgYWxsIG5vZGVzIChjaGlsZCwgZ3JhbmRjaGlsZHJlbiwgZXRjLikKLSAgICAgICAgICAgICAgTm9kZUxpc3QgZ3JhbmRDaGlsZExpc3QgPSBuZXh0Q2hpbGRFbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IGdyYW5kQ2hpbGRMaXN0LmdldExlbmd0aCgpOyBwKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCkuZ2V0Tm9kZVR5cGUoKQotICAgICAgICAgICAgICAgICAgICA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIAlncmFuZENoaWxkRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IG5leHRHcmFuZENoaWxkRWxlbSA9Ci0gICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0R3JhbmRDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nU3R5bGUiKQotICAgICAgICAgICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFncmFuZENoaWxkRm91bmQpCi0gICAgICB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE0YzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLQotLyoqCi0gKiBCUDE2MDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudmVsb3BlIGNvbmZvcm1zIHRvIHRoZSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGluIFNPQVAgMS4xIFNlY3Rpb24gNC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQl0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICBlbHNlIAotICAgICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsb2cgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLiIpOwotICAgICAgfQotICAgICAgLy8gU09BUCAxLjEgc3BlY2lmaWNhdGlvbnMsIFNlY3Rpb24gNC4KLSAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvTk9URS1TT0FQLTIwMDAwNTA4LyNfVG9jNDc4MzgzNDk0Ci0KLSAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaWRlbnRpZmllciBmb3IgdGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluZWQKLSAgICAgIC8vIGluIHRoaXMgc2VjdGlvbiBpcyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iLgotCi0gICAgICAvLyAgbyBUaGUgRW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSBtZXNzYWdlLgotCi0gICAgICAvLyBSdWxlIDEuIEVudmVsb3BlCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBuYW1lIGlzICJFbnZlbG9wZSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBjb250YWluIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCi0gICAgICAvLyAgICBJZiBwcmVzZW50LCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNpbWlsYXJseSwKLSAgICAgIC8vICAgIHRoZSBlbGVtZW50IE1BWSBjb250YWluIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnRzLiBJZiBwcmVzZW50IHRoZXNlIGVsZW1lbnRzCi0gICAgICAvLyAgICBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQgYW5kIE1VU1QgZm9sbG93IHRoZSBTT0FQIEJvZHkgZWxlbWVudC4KLQotICAgICAgLy8gR2V0dGluZyB0aGUgdG9wIGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgdG9wIGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmICghZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKQotICAgICAgICB8fCAhaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHRvcCBlbGVtZW50IGlzIG5vdCBzb2FwOkVudmVsb3BlIik7Ci0KLSAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCi0gICAgICBDb2xsZWN0aW9uIGVudmVsb3BlTmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgIGVudmVsb3BlTmFtZXNwYWNlcy5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUyk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIGFueSBvZiB0aGUgbmFtZXNwYWNlcwotICAgICAgQXR0ciBub3RWYWxpZEF0dHIgPSBnZXROb3RWYWxpZEF0dHIoCi0gICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpLAotICAgICAgICBlbnZlbG9wZU5hbWVzcGFjZXMpOwotCi0gICAgICAvLyBJZiBmb3VuZCBvbmUsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAobm90VmFsaWRBdHRyICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYXR0cmlidXRlICIKLSAgICAgICAgICArIG5vdFZhbGlkQXR0ci5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0KLSAgICAgIC8vIFJ1bGUgMi4gSGVhZGVyIAotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiSGVhZGVyIi4KLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBiZSBwcmVzZW50IGluIGEgU09BUCBtZXNzYWdlLiBJZiBwcmVzZW50LCB0aGUgZWxlbWVudAotICAgICAgLy8gICAgTVVTVCBiZSB0aGUgZmlyc3QgaW1tZWRpYXRlIGNoaWxkIGVsZW1lbnQgb2YgYSBTT0FQIEVudmVsb3BlIGVsZW1lbnQuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNQVkgY29udGFpbiBhIHNldCBvZiBoZWFkZXIgZW50cmllcyBlYWNoIGJlaW5nIGFuIGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBIZWFkZXIgZWxlbWVudC4gQWxsIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cwotICAgICAgLy8gICAgb2YgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQgTVVTVCBiZSBuYW1lc3BhY2UtcXVhbGlmaWVkLgotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotICAgICAgQ29sbGVjdGlvbiBoZWFkZXJOYW1lc3BhY2VzID0gY29sbGVjdE5hbWVzcGFjZXMoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikKLSAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotCi0gICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBIZWFkZXIgZW50cmllcwotICAgICAgICBFbGVtZW50IGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgICAgd2hpbGUgKGhlYWRlckVudHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICAgICAgICBDb2xsZWN0aW9uIGhlYWRlckVudHJ5TmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKAotICAgICAgICAgICAgaGVhZGVyRW50cnkuZ2V0QXR0cmlidXRlcygpKTsKLQotICAgICAgICAgIC8vIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gdGhlIG5hbWVzcGFjZXMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFlbnZlbG9wZU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICAgICAmJiAhaGVhZGVyTmFtZXNwYWNlcy5jb250YWlucyhoZWFkZXJFbnRyeS5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAgICYmICFoZWFkZXJFbnRyeU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBoZWFkZXIgZW50cnkgIgotICAgICAgICAgICAgICArIGhlYWRlckVudHJ5LmdldE5vZGVOYW1lKCkgKyAiIGlzIG5vdCBuYW1lc3BhY2UtcXVhbGlmaWVkIik7Ci0KLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IEhlYWRlciBlbnRyeQotICAgICAgICAgIGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoaGVhZGVyRW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgICAgZWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgfQotCi0KLSAgICAgIC8vIFJ1bGUgMy4gQm9keQotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiQm9keSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UgYW5kIE1VU1QgYmUgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIGEgU09BUCBFbnZlbG9wZSBlbGVtZW50LiBJdCBNVVNUIGRpcmVjdGx5IGZvbGxvdyB0aGUKLSAgICAgIC8vICAgIFNPQVAgSGVhZGVyIGVsZW1lbnQgaWYgcHJlc2VudC4gT3RoZXJ3aXNlIGl0IE1VU1QgYmUgdGhlIGZpcnN0IGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBFbnZlbG9wZSBlbGVtZW50LgotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgTUFZIGNvbnRhaW4gYSBzZXQgb2YgYm9keSBlbnRyaWVzIGVhY2ggYmVpbmcgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIHRoZSBTT0FQIEJvZHkgZWxlbWVudC4gSW1tZWRpYXRlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZQotICAgICAgLy8gICAgU09BUCBCb2R5IGVsZW1lbnQgTUFZIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNPQVAgZGVmaW5lcyB0aGUgU09BUCBGYXVsdAotICAgICAgLy8gICAgZWxlbWVudCwgd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSBlcnJvciBtZXNzYWdlcy4KLQotICAgICAgLy8gaWYgdGhlIFNPQVAgQm9keSBlbGVtZW50IGlzIG5vdCBwcmVzZW50ZWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoZWxlbWVudCA9PSBudWxsCi0gICAgICAgIHx8ICFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSkKLSAgICAgICAgfHwgIWlzU09BUE5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBzb2FwOkJvZHkgZWxlbWVudCBpcyBub3QgcHJlc2VudGVkICIKLSAgICAgICAgICArICJvciBmb2xsb3dzIGFuIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnQgb2Ygc29hcDpFbnZlbG9wZSIpOwotCi0gICAgICAvLyBQcm9jZXNzaW5nIGFsbCBvdGhlciBzdWIgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlCi0gICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB3aGlsZSAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBDaGVja2luZyBmb3IgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQKLSAgICAgICAgaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpCi0gICAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgc29hcDpIZWFkZXIgZWxlbWVudCBjYW5ub3QgZm9sbG93IHRoZSBzb2FwOkJvZHkgZWxlbWVudCIpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2VzIGZvciB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAgICAgIENvbGxlY3Rpb24gZWxlbWVudE5hbWVzcGFjZXMgPSBjb2xsZWN0TmFtZXNwYWNlcygKLSAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGluIHRoZSBuYW1lc3BhY2VzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoIWVudmVsb3BlTmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmICFlbGVtZW50TmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHN1YiBlbnZlbG9wZSBlbGVtZW50ICIKLSAgICAgICAgICAgICsgZWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgc3ViIGVsZW1lbnQgb2YgdGhlIGVudmVsb3BlCi0gICAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0JewotCSAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGZyb20gYXR0cmlidXRlcyBjb2xsZWN0aW9uCi0gICAqIEBwYXJhbSBhdHRycyBhbiBhdHRyaWJ1dGVzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgbmFtZXNwYWNlcwotICAgKi8KLSAgcHJpdmF0ZSBDb2xsZWN0aW9uIGNvbGxlY3ROYW1lc3BhY2VzKE5hbWVkTm9kZU1hcCBhdHRycykKLSAgewotICAgIENvbGxlY3Rpb24gbnMgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgICAgIG5zLmFkZChhdHRyLmdldFZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIG5hbWVzcGFjZXMKLSAgICogQHBhcmFtIGF0dHJzIGFuIGF0dHJpYnV0ZXMgY29sbGVjdGlvbgotICAgKiBAcGFyYW0gbnMgYSBuYW1lc3BhY2VzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhbiBhdHRyaWJ0dWUgdGhhdCBpcyBub3QgaW4gYW55IG9mIHRoZSBuYW1lc3BhY2VzIHNwZWNpZmllZAotICAgKi8KLSAgcHJpdmF0ZSBBdHRyIGdldE5vdFZhbGlkQXR0cihOYW1lZE5vZGVNYXAgYXR0cnMsIENvbGxlY3Rpb24gbnMpCi0gIHsKLSAgICBBdHRyIHJldCA9IG51bGw7Ci0gICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICBpZiAoYXR0ci5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIW5zLmNvbnRhaW5zKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0ID0gYXR0cjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllcyB3aGV0aGVyIGEgbmFtZXNwYWNlIGlzIHRoZSBTT0FQIG5hbWVzcGFjZQotICAgKiAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAqIEBwYXJhbSBucyBhIG5hbWVzcGFjZSB0byBiZSBxdWFsaWZpZWQKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBuYW1lc3BhY2UgaXMgcXVhbGlmaWVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1NPQVBOYW1lc3BhY2UoU3RyaW5nIG5zKQotICB7Ci0gICAgaWYgKG5zID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbnMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlN2M0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0KLS8qKgotICogQlAxNjAxLgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE9uZS13YXkgcmVzcG9uc2VzIHdpbGwgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICBlLmdldFRhcmdldEV4Y2VwdGlvbigpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2ExYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotCi0vKioKLSAqIEJQMTcwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogVXNlIGxvY2FsIGNvcHkgb2Ygc2NoZW1hIGZvciBub3cKLSAgICAgICAgLy8gRG9jdW1lbnQgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldExvZ0VudHJ5KCkuZ2V0TWVzc2FnZSgpLCBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApOwotICAgICAgICAvLyBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TG9nRW50cnkoKS5nZXRNZXNzYWdlKCksICJzY2hlbWFzL3NvYXBFbnZlbG9wZS54c2QiKTsKLQotICAgICAgICAvLyBHZXQgYSBub24tdmFsaWRhdGVkIGJ1dCAod2VsbC1mb3JtZWQpIERPTSB0cmVlIG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICAgICAgRG9jdW1lbnQgZG9jID0KLSAgICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAvLyBSZW1vdmUgYW55IHhzaTp0eXBlcyBhdHRyaWJ1dGVzIGZyb20gdGhlIG1lc3NhZ2UgKFNPQVAgSGVhZGVyLCBCb2R5IGFuZCBFbnZlbG9wZSBpdHNlbGYpCi0KLSAgICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgICAgaWYgKGVsZW1lbnRMaXN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGVsZW1lbnRMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TKFdTSUNvbnN0YW50cy5OU19VUklfWFNJLCAidHlwZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdyaXRlIG91dCB0aGUgKHBvdGVudGlhbGx5KSBtb2RpZmllZCB0cmVlIHRvIFN0cmluZwotICAgICAgICBTdHJpbmcgZmlsdGVyZWRNZXNzYWdlID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoZG9jKTsKLQotICAgICAgICAvLyBQYXJzZSB0aGUgcmVzdWx0IHdpdGggdmFsaWRhdGlvbiAib24iCi0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGZpbHRlcmVkTWVzc2FnZSwKLSAgICAgICAgICBUZXN0VXRpbHMuZ2V0U09BUFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpZiAoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIFNBWEV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0RXhjZXB0aW9uRGV0YWlscyhlLmdldFRhcmdldEV4Y2VwdGlvbigpKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTc1NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgzZWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQlAxNzU1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG5vbi1mYXVsdCBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDpib2R5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FYWNoIHBhcnQgYWNjZXNzb3IgZWxlbWVudCBpbiB0aGUgZW52ZWxvcGUgaGFzIGEgbG9jYWwgbmFtZSBvZiB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTc1NSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDE3NTUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gbWVzc2FnZSBwYXJ0cyBhbmQgZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgbGl0ZXJhbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCF2YWxpZGF0b3IuaXNMaXRlcmFsKGV4dEVsZW1zKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotCi0gICAgICAvKiBCYXNpYyBQcm9maWxlIFZlcnNpb24gMS4xIChodHRwOi8vd3d3LndzLWkub3JnL1Byb2ZpbGVzL0Jhc2ljLzIwMDMtMTIvQmFzaWNQcm9maWxlLTEuMS5odG0pCi0gICAgICAgKiBzYXlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc29hcDpib2R5IG9mIGFuIEVOVkVMT1BFIE1VU1QgYmUKLSAgICAgICAqIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHdzZGw6cGFydHMgaW4gdGhlIHdzZGw6bWVzc2FnZSB0aGF0IGRlc2NyaWJlcyBpdC4KLSAgICAgICAqIEhvd2V2ZXIsIHdlIHNob3VsZCBrZWVwIGluIG1pbmQgdGhlcmUgaXMgdGhlICJwYXJ0cyIgYXR0cmlidXRlIG9mIHNvYXBiaW5kOmJvZHkKLSAgICAgICAqIHRoYXQgaW5kaWNhdGVzIHdoaWNoIHBhcnRzIGFwcGVhciB3aXRoaW4gdGhlIFNPQVAgQm9keS4gCi0gICAgICAgKi8KLQotICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXJlZCBsaXN0IG9mIHdzZGw6cGFydCBuYW1lcwotICAgICAgTGlzdCBvcmRlcmVkUGFydE5hbWVzID0KLSAgICAgICAgdmFsaWRhdG9yLm9yZGVyUGFydE5hbWVzKG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cywgZXh0RWxlbXMpOwotICAgICAgSXRlcmF0b3IgaSA9IG9yZGVyZWRQYXJ0TmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGFjY2Vzc29yCi0gICAgICBFbGVtZW50IGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIHdoaWxlIChhY2Nlc3NvciAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudAotICAgICAgICAvLyBmb3IgYW4gYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmICghaS5oYXNOZXh0KCkpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIHBhcnQgYWNjZXNzb3IgZWxlbWVudCAnIiArIGFjY2Vzc29yLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICArICInIGRvZXMgbm90IGhhdmUgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuIik7Ci0KLSAgICAgICAgLy8gSWYgbG9jYWwgbmFtZSBvZiBhY2Nlc3NvciBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgLy8gY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgIGlmICghYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJUaGUgYWNjZXNzb3IgbG9jYWwgbmFtZSBpcyAiICsgYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkKLSAgICAgICAgICAgICsgIiwgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCBlbGVtZW50IG5hbWUgaXMgIiArIHBhcnROYW1lKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUwOWMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotCi0vKioKLSAqIEJQNDEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZWxlbXMgPT0gbnVsbCB8fCBlbGVtcy5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWxraW5nIHRocm91Z2ggY2hpbGQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLQotICAgICAgICBpZiAoZWxlbXMuaXRlbShpKS5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG11Tm9kZSA9IGVsZW1zLml0ZW0oaSkuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgKLSAgICAgICAgICAgIHJvb3QuZ2V0UHJlZml4KCkgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfTVVTVF9VTkRFUlNUQU5EKTsKLSAgICAgICAgICAvLyBJZiBhIGhlYWRlciBibG9jayBpcyBtYW5kYXRvcnksIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgICBpZiAobXVOb2RlICE9IG51bGwgJiYgbXVOb2RlLmdldE5vZGVWYWx1ZSgpLmVxdWFscygiMSIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBoZWFkZXIgYmxvY2sgbmFtZQotICAgICAgICBTdHJpbmcgYmxvY2tOYW1lID0gZWxlbXMuaXRlbShpKS5nZXRMb2NhbE5hbWUoKTsKLSAgICAgICAgLy8gSWYgdGhlIG5hbWUgaXMgbm90IHByZXNlbnRlZCAob2NjdXJzIHdoZW4gZWxlbWVudCBpcyBlbXB0eSBzdHJpbmcpCi0gICAgICAgIC8vIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBlbGVtZW50Ci0gICAgICAgIGlmIChibG9ja05hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBibG9ja05hbWVFeGlzdHMgPSBmYWxzZTsKLQotICAgICAgICAvLyBHZXR0aW5nIFdTREwgYmluZGluZ3MKLSAgICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYmluZGluZ3MubGVuZ3RoOyBqKyspIAotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB3c2RsOm9wZXJhdGlvbnMKLSAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBiaW5kaW5nc1tqXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgICAgIEl0ZXJhdG9yIGsgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGsuaGFzTmV4dCgpICYmICFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgay5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDppbnB1dCBmb3IgYW4gb3BlcmF0aW9uIAotICAgICAgICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ0lucHV0IG9wSW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOmlucHV0IGlzIHByZXNlbnRlZCB0aGVuIGNoZWNraW5nCi0gICAgICAgICAgICAgICAgLy8gd2hldGhlciB0aGUgYmxvY2sgbmFtZSBpcyBkZXNjcmliZWQgdGhlcmUgb3Igbm90Ci0gICAgICAgICAgICAgICAgYmxvY2tOYW1lRXhpc3RzID0gYmxvY2tOYW1lRXhpc3RzKAotICAgICAgICAgICAgICAgICAgb3BJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgYmxvY2tOYW1lKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDpvdXRwdXQgZm9yIGFuIG9wZXJhdGlvbgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nT3V0cHV0IG9wT3V0cHV0ID0gb3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgICAgICAgaWYgKG9wT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOm91dHB1dCBpcyBwcmVzZW50ZWQgdGhlbiBjaGVja2luZwotICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlIGJsb2NrIG5hbWUgaXMgZGVzY3JpYmVkIHRoZXJlIG9yIG5vdAotICAgICAgICAgICAgICAgIGJsb2NrTmFtZUV4aXN0cyA9IGJsb2NrTmFtZUV4aXN0cygKLSAgICAgICAgICAgICAgICAgIG9wT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCBibG9ja05hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYSBoZWFkZXIgYmxvY2sgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nCi0gICAgICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgaWYgKCFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIE5vIG9uZSBoZWFkZXIgYmxvY2sgaXMgZWl0aGVyIG1hbmRhdG9yeSBvciBpcyBub3QgZGVzY3JpYmVkIGluIHRoZQotICAgICAgLy8gYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5zZSBvZiBibG9ja05hbWUgaW4gd3NkbHNvYXA6aGVhZGVyLCBpZiBpdCBpcyBmb3VuZCBpbgotICAgKiBhIGxpc3Qgb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0cwotICAgKiAKLSAgICogQHBhcmFtIGVsZW1zIEEgbGlzdCBvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3RzCi0gICAqIEBwYXJhbSBibG9ja05hbWUgVGhlIG5hbWUgdGhhdCB3aWxsIGJlIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZQotICAgKiBAcmV0dXJuIHRydWUgaWYgYmxvY2tOYW1lIGlzIGRlc2NyaWJlZCBpbiB0aGUgd3NkbHNvYXA6aGVhZGVyIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGJsb2NrTmFtZUV4aXN0cyhMaXN0IGVsZW1zLCBTdHJpbmcgYmxvY2tOYW1lKQotICB7Ci0gICAgaWYgKGVsZW1zID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGkgPSBlbGVtcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyBlbGVtTmFtZSA9IGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgIGlmIChlbGVtTmFtZS5lcXVhbHMoImhlYWRlciIpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZWxlbTsKLSAgICAgICAgaWYgKHNvYXBIZWFkZXIuZ2V0UGFydCgpLmVxdWFscyhibG9ja05hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTNmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBCUDQxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDphY3RvciBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG90aGVyIHRoYW4gdGhlIHNwZWNpYWwgdXJpICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIGhlYWRlciBlbGVtZW50IGluIHRoZSBlbnZlbG9wZSBjb250YWlucyBhIHNvYXA6YWN0b3IgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvdGhlciB0aGFuIHRoZSBzcGVjaWFsIHVyaSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0Ii48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBoZWFkZXIKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChlbGVtcyA9PSBudWxsIHx8IGVsZW1zLmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdhbGtpbmcgdGhyb3VnaCBjaGlsZCBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIG5vZGUgYXR0cmlidXRlcwotICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cnMgPSBlbGVtcy5pdGVtKGkpLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAvLyBJZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZXMgdGhlbiBjb250aW51ZQotICAgICAgICBpZiAoYXR0cnMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBhY3RvciBhdHRyaWJ1dGUKLSAgICAgICAgTm9kZSBhY3RvciA9IGF0dHJzLmdldE5hbWVkSXRlbShyb290LmdldFByZWZpeCgpCi0gICAgICAgICAgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfQUNUT1IpOwotCi0gICAgICAgIC8vIElmIHRoZSBhY3RvciBhdHRyaWJ1dGUgaXMgcHJlc2VudGVkIGFuZCBkb2VzIG5vdCBlcXVhbAotICAgICAgICAvLyB0byAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiwKLSAgICAgICAgLy8gdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgICBpZiAoYWN0b3IgIT0gbnVsbAotICAgICAgICAgICYmICFhY3Rvci5nZXROb2RlVmFsdWUoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQX05FWFRfQUNUT1IpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBObyBvbmUgYWN0b3IgYXR0cmlidXRlIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4KLSAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICAgIHJlc3VsdCAgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmUxNzkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTAyCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIGZhdWx0IHdpdGggYSBub24tZW1wdHkgZGV0YWlsIGVsZW1lbnQuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgRmF1bHQgZWxlbWVudCBpbiBhbiBlbnZlbG9wZSBjb250YWlucyBhIG5vbi1lbXB0eSBkZXRhaWwgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIEZhdWx0IGVsZW1lbnRzIGZyb20gZW52ZWxvcGUKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBGYXVsdCBlbGVtZW50LCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZmF1bHRMaXN0ID09IG51bGwgfHwgZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZhdWx0IGVsZW1lbnQgbXVzdCBub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlCi0gICAgICAvLyB3aXRoaW4gYSBCb2R5IGVsZW1lbnQsIHNvIGdldHRpbmcgdGhlIGZpcnN0IG9uZQotICAgICAgRWxlbWVudCBmYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gR2V0dGluZyBGdWFsdCdzIGRldGFpbCBlbGVtZW50cwotICAgICAgTm9kZUxpc3QgZGV0YWlscyA9IGZhdWx0LmdldEVsZW1lbnRzQnlUYWdOYW1lKAotICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGRldGFpbCBlbGVtZW50LCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoZGV0YWlscyAhPSBudWxsCi0gICAgICAgICYmIGRldGFpbHMuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBsaXN0ID0gZGV0YWlscy5pdGVtKDApLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgLy8gc2VhcmNoIGZpcnN0IGVsZW1lbnQgbm9kZSAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZigobGlzdC5pdGVtKGkpLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIAotICAgICAgICAgICYmIChsaXN0Lml0ZW0oaSkuZ2V0TG9jYWxOYW1lKCkgIT0gbnVsbCkgKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBUaGVyZSBpcyBubyBkZXRhaWwgZWxlbWVudCBpbiBGYXVsdCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gYXBlKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjhkMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBhIHNvYXA6Qm9keSBlbGVtZW50IHdpdGggYXR0cmlidXRlcy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBzb2FwOkJvZHkgZWxlbWVudHMgZnJvbSBlbnZlbG9wZQotICAgICAgTm9kZUxpc3QgYm9keUxpc3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJvZHkgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJvZHlMaXN0ID09IG51bGwgfHwgYm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3Qgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAvLyBJZiB0aGUgQm9keSBlbGVtZW50IGhhcyBhdHRyaWJ1dGVzIChleGNsdWRpbmcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyksCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgTmFtZWROb2RlTWFwIGF0dHJzID0gYm9keS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpZiAoYXR0cnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGF0dHJOYW1lID0gKChBdHRyKSBhdHRycy5pdGVtKGkpKS5nZXROYW1lKCk7Ci0gICAgICAgICAgaWYgKCFhdHRyTmFtZS5lcXVhbHMoInhtbG5zIikgJiYgIWF0dHJOYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0VudmVsb3BlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdiZDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogQHZlcnNpb24gMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZlbG9wZVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICBpbXBsZW1lbnRzIEVudmVsb3BlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRU5WRUxPUEU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfRU5WRUxPUEVfUkVRVUVTVCwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9BTlkKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfRU5WRUxPUEVfQU5ZKSkKLSAgICAgIHx8ICh0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9FTlZFTE9QRV9SRVFVRVNUKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkpCi0gICAgewotICAgICAgbWF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5ZDM1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlAxNjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFNTQlAxNjAxCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQMTYwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTUyNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9TU0JQOTcwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBTU0JQOTcwNAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgRU5WRUxPUEUgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDk3MDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQOTcwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHJvb3QgZWxlbWVudAotICAgICAgRWxlbWVudCBlbGVtID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgLy8gSWYgaXQgaXMgbm90IHRoZSBzb2FwOkVudmVsb3BlLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIWVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgfHwgIWVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBjb250YWlucyB0aGUgeG1sbnM6eG1sIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBTdHJpbmcgaW5jb3JyZWN0RWxlbWVudE5hbWUgPSBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShlbGVtKTsKLSAgICAgIGlmIChpbmNvcnJlY3RFbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG5hbWUgb2YgYW4gZWxlbWVudCBjb250YWluaW5nICIKLSAgICAgICAgICArICJzdWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpcyBcIiIgKyBpbmNvcnJlY3RFbGVtZW50TmFtZSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBhbnkgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLiAKLSAgICogQHBhcmFtIGVsZW0gdGhlIHJvb3QgZWxlbWVudC4KLSAgICogQHJldHVybiB0aGUgbmFtZSBvZiBhbiBlbGVtZW50IGZvdW5kIG9yIG51bGwuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB4bWxuczp4bWwKLSAgICBTdHJpbmcgYXR0clZhbHVlID0gZWxlbS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMsICJ4bWwiKTsKLSAgICAvLyBJZiBpdCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCi0gICAgLy8gcmV0dXJuIGFuIGVsZW1lbnQgbmFtZTsKLSAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwuZXF1YWxzKGF0dHJWYWx1ZSkpCi0gICAgewotICAgICAgcmV0dXJuIGVsZW0uZ2V0Tm9kZU5hbWUoKTsKLSAgICB9Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBlbGVtZW50J3MgY2hpbGRyZW4KLSAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBhbnkgb2YgdGhlbSBoYXMgeG1sbnM6eG1sIGF0dHJpYnV0ZSwgcmV0dXJuIGEgdmFsdWUKLSAgICAgIFN0cmluZyBuYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoY2hpbGQpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGVsZW1lbnQncyBjaGlsZAotICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgfQotICAgIC8vIE5vIHhtbG5zOnhtbCBhdHRyaWJ1dGVzIGZvdW5kLCByZXR1cm4gbnVsbAotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2ZmMzcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDEwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDEwMDMKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLW11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aGljaCBoYXMgYSBub24tZW1wdHkgZW50aXR5LWJvZHk8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKiAgVGhlIGxvZ2dlZCBTT0FQIGVudmVsb3BlIGlzIGEgVVRGLTggdHJhbnNjcmlwdCBvZiBhbiBlbnZlbG9wZSBvcmlnaW5hbGx5IGVuY29kZWQgYXMgVVRGLTggb3IgVVRGLTE2LiAKLSAqICBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiBMb29raW5nIGF0IHRoZSBtZXNzYWdlQ29udGVudCAKLSAqICBlbGVtZW50IG9mIHRoZSBsb2dnZWQgbWVzc2FnZSwgZWl0aGVyIAotICogICAgKDEpIGl0IGhhcyBhIEJPTSBhdHRyaWJ1dGUgd2hpY2ggbWFwcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMikgaXQgaGFzIGl0IGhhcyBhbiBYTUwgZGVjbGFyYXRpb24gd2hpY2ggbWF0Y2hlcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gKiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICoKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgQVAxMDAzIGV4dGVuZHMgU1NCUDEwMDMgewotCi0JLyoqCi0JICogQHBhcmFtIGltcGwKLQkgKi8KLQlwdWJsaWMgQVAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpIAotCXsKLQkJc3VwZXIoaW1wbCk7Ci0JfQotCi0JcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLQkgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLQkgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0JICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0JewotCSAgLy8gSWYgdGhlcmUgaXMgYSBTT0FQIE1lc3NhZ2Ugd2l0aCBBdHRhY2htZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotCSAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0JICB7Ci0JICAJcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgZmFpbHVyZURldGFpbCk7Ci0JICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCSAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5MDBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDE5MDIKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBpZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dAotICogZWxlbWVudCBpbiB0aGUgd3NkbDpiaW5kaW5nIHNwZWNpZmllcyBXU0RMIE1JTUUgYmluZGluZywgdGhlbiB0aGUgbWVzc2FnZQotICogY2FuIGNvbnRhaW4gU09BUCBhdHRhY2htZW50cy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYW4gb3BlcmF0aW9uIG1hdGNoZWQgZm9yIGEgbWVzc2FnZQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgLy8gR2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgU3RyaW5nIHR5cGU7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVAotICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJpbnB1dCI7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJvdXRwdXQiOwotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBNSU1FIGJpbmRpbmcgaXMgbm90IHVzZWQsIGJ1dCB0aGUgbWVzc2FnZSBoYXMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBub24tcm9vdCBNSU1FIHBhcnQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoIXVzZXNNaW1lQmluZGluZyhleHRFbGVtcykKLSAgICAgICAgJiYgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6IiArIHR5cGUgKyAiIG9mIHRoZSBcIiIKLSAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZpcnN0IGV4dGVuc2liaWxpdHkgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdXNlc01pbWVCaW5kaW5nKExpc3QgZXh0RWxlbXMpIHsKLSAgICAvLyBJZiB0aGUgZmlyc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwKLSAgICAvLyByZXR1cm4gdHJ1ZQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsICYmIGV4dEVsZW1zLnNpemUoKSA+IDAKLSAgICAgICYmICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KDApKQotICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODUyOTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQVAxOTE1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgYQotICogbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpcyBzZXJpYWxpemVkIHVzaW5nIGVpdGhlciBVVEYtOCBvciBVVEYtMTYKLSAqIGNoYXJhY3RlciBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTE1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTE1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOyAgICAJCi0gICAgICBNaW1lUGFydCBwYXJ0ID0gbWltZVBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotICAgICAgICBTdHJpbmcgY2hhcnNldCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKAotICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRSwgCi0gICAgICAgICAgImNoYXJzZXQiKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiAKLSAgICAgICAgICBpZigoY2hhcnNldCAhPSBudWxsKSAmJiAoY2hhcnNldC5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpIHx8Ci0gICAgICAgICAgICAgIGNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gICAgICAgICAgICAvLyAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGludCBib20gPSAwOwotICAgICAgICAgICAgaWYgKChib20gPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0Qk9NKCkpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgICAgICYmICFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICAgICAgfHwgKChib20gPT0gV1NJQ29uc3RhbnRzLkJPTV9VVEYxNgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgICAgICAgIHx8ICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGMTZfQklHX0VORElBTgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgQk9NICgiICsgYm9tICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGFuZCBjaGFyc2V0IHZhbHVlICgiICsgY2hhcnNldCArICIpZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMikgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGVsc2UgaWYgKCgoeG1sRW5jb2RpbmcgPSAKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0WE1MRW5jb2RpbmcocGFydC5nZXRDb250ZW50KCkpKSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAheG1sRW5jb2RpbmcuZXF1YWxzKCIiKSkgIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZigheG1sRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShjaGFyc2V0KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgWE1MIGRlY2xhcmF0aW9uIGVuY29kaW5nICgiICsgCi0gICAgICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nICsgIikgYW5kIGNoYXJzZXQgdmFsdWUgKCIgKyBjaGFyc2V0ICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGRvIG5vdCBtYXRjaC4iKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gICAgICAgICAgICBlbHNlIGlmKCFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MICIrCi0gICAgICAgICAgICAgICAgICAiZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyAoIiArIGNoYXJzZXQgKyAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBoZWFkZXIgZG8gbm90IGZvdW5kIG9yIGluY29ycmVjdCBjaGFyc2V0IHZhbHVlCi0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiRWl0aGVyIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCAiKwotICAgICAgICAgICAgICAgICJwcmVzZW50IGluIHRoZSBSb290IFBhcnQgb3IgYSBjaGFyc2V0IHZhbHVlIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpIAotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTJkMGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTE3Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyB6ZXJvIGF0dGFjaG1lbnQgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGNvbnRhaW5pbmcgemVybyBhdHRhY2htZW50IHBhcnRzIGlzIHNlbnQKLSAqIHVzaW5nIGEgY29udGVudC10eXBlIG9mIGVpdGhlciAidGV4dC94bWwiIGFzIHRob3VnaCBhIFNPQVAgSFRUUCBiaW5kaW5nIHdlcmUKLSAqIHVzZWQgb3IgIm11bHRpcGFydC9yZWxhdGVkIiB3aGVuIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGZvciB0aGUgbWVzc2FnZQotICogc3BlY2lmaWVzIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBvbiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0Ci0gKiBvciB3c2RsOm91dHB1dCBlbGVtZW50IGluIGl0cyB3c2RsOmJpbmRpbmcuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkxNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkxNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBub3QgYXBwbGljYWJsZSBpZiB0aGVyZSBhcmUgYXR0YWNobWVudHMKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBsaXN0Ci0gICAgICBpZigoZXh0RWxlbXMgPT0gbnVsbCkgfHwgKGV4dEVsZW1zLnNpemUoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gZGV0ZXJtaW5lIHR5cGUgCi0gICAgICBib29sZWFuIGlzTXVsdGlQYXJ0ID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIC8vIGlmIE1JTUVNdWx0aXBhcnRSZWxhdGVkIHRoZW4gb25seSByb290LXBhcnQgYWxsb3dlZCAKLSAgICAgIGlmKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKQotICAgICAgewotICAgICAgICBpZigoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCkpLmdldE1JTUVQYXJ0cygpLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBpc011bHRpUGFydCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICAvLyBlbHNlIGlmIG5vdCBzb2FwYmluZDpib2R5IHJvb3QgZWxlbWVudAotICAgICAgZWxzZSBpZighKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIFNPQVBCb2R5KSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gZ2V0IEhUVFAgY29udGVudCB0eXBlCi0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOwotIAotICAgICAgLy9hbGxvdyAidGV4dC94bWwiIG9yIAotICAgICAgLy8oIm11bHRpcGFydC9yZWxhdGVkIiBhbmQgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCIgV1NETCBiaW5kaW5ncykKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICghY29udGVudFR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkgJiYKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpKSB8fAotICAgICAgICAgKChjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSAmJiAKLSAgICAgICAgICAgICAhaXNNdWx0aVBhcnQpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGZpZWxkICAiICsKLSAgICAgICAgICAgICJ2YWx1ZSBcIiIgKyBjb250ZW50VHlwZSArICJcIiBpcyBpbmNvcnJlY3QiKTsKLSAgICAgIH0KLSAgICB9IAotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDFhMmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MjUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEFQMTkyNQotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGxpc3RzIGF0IGxlYXN0IG9uZSBub24tcm9vdAotICogTUlNRSBwYXJ0LCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaGFzIGEgQ29udGVudC1UeXBlIEhUVFAgaGVhZGVyCi0gKiBmaWVsZC12YWx1ZSB3aXRoIGEgbWVkaWEtdHlwZSBvZiAibXVsdGlwYXJ0L3JlbGF0ZWQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAKLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAKLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkKLSAgICAgICAgJiYgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIGNoZWNrIGxpc3Qgb24gZmlyc3QgZWxlbWVudAotICAgICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgICAhKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgLy8gZ2V0IGxpc3QgbWltZSBwYXJ0cyBmcm9tIGRlZmluaXRpb24KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG1pbWUgPSAoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW1zLmdldCgwKTsKLSAgICAgIExpc3QgcGFydHMgPSBtaW1lLmdldE1JTUVQYXJ0cygpOwotICAgICAgLy8gaWYgcGFydHMgY291bnQgaXMgbW9yZSB0aGFuIG9uZSwgdGhhbiBhc3NlcnRpb24gaXMgbm90QXBwbGljYWJsZQotICAgICAgaWYocGFydHMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOyAKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIkluY29ycmVjdCBDb250ZW50LVR5cGUgdmFsdWUgXCIiICsKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlICsgIlwiIGluIEhUVFAgaGVhZGVyIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIC8vcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIHsKLSAgLy8gIExpc3QgbGlzdCA9IHBhcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIC8vICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAvLyAgICByZXR1cm4gbnVsbDsKLSAgLy8gIHJldHVybiAoKE1JTUVDb250ZW50KSBsaXN0LmdldCgwKSkuZ2V0UGFydCgpOwotICAvL30KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjI0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci0KLS8qKgotICogQVAxOTI2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGluY2x1ZGVzIGFsbCBvZiB0aGUgTUlNRSBwYXJ0cyBkZXNjcmliZWQgYnkKLSAqIGl0cyBXU0RMIE1JTUUgYmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTI2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTI2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLQotICAgICAgaWYobWltZVBhcnRzLmdldFJvb3RQYXJ0KCkgPT0gbnVsbCB8fCBtaW1lUGFydHMuY291bnQoKT09MCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIHNraXAgcm9vdCBwYXJ0Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBnZXRNSU1FQ29udGVudFBhcnQoKE1JTUVQYXJ0KSBwYXJ0cy5nZXQoaSkpOwotICAgICAgICAvLyBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgICAgICBpZiAoZmluZE1JTUVQYXJ0KG1pbWVQYXJ0cy5nZXRQYXJ0cygpLCBwYXJ0TmFtZSkgPT0gbnVsbCkgCi0gICAgICAgIHsgICAgICAgICAgICAKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyAiICsKLSAgICAgICAgICAgICAgIm9wZXJhdGlvbiBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArIAotICAgICAgICAgICAgICAiXCIgZG9lcyBub3QgY29udGFpbiBwYXJ0IFwiIiArIHBhcnROYW1lICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IAotICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogZmluZCBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgKiBAcGFyYW0gcGFydHMgYXJyYXkgb2Ygc29hcCBNSU1FIHBhcnRzCi0gICAqIEBwYXJhbSBwYXJ0TmFtZSBwYXJ0IG5hbWUgdG8gZmluZAotICAgKiBAcmV0dXJuIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0ICJDb250ZW50LUlEIiB2YWx1ZSwgCi0gICAqIGlmIHRoZSBwYXJ0IGRvZXNudCBmb3VuZCwgcmV0dW5zIG51bGwKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGZpbmRNSU1FUGFydChDb2xsZWN0aW9uIHBhcnRzLCBTdHJpbmcgcGFydE5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaWYocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICBJdGVyYXRvciBpcGFydHMgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaXBhcnRzLm5leHQoKTsKLSAgICAgIFN0cmluZyBtX3BhcnROYW1lID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgcGFydC5nZXRIZWFkZXJzKCksIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotCi0gICAgICAvLyBjaGVjayB2YWx1ZSBmb3JtYXQgPHBhcnRuYW1lPVVJREBob3N0PgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIChtX3BhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkgJiYgCi0gICAgICAgICAgKG1fcGFydE5hbWUuaW5kZXhPZigiPSIpICE9IC0xKSAmJiAKLSAgICAgICAgICAoZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgbV9wYXJ0TmFtZS5pbmRleE9mKCI9IikpKS5lcXVhbHMocGFydE5hbWUpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1JTUVDb250ZW50UGFydChNSU1FUGFydCBwYXJ0KSB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2RmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAxOTMxCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgbXVsdGlwYXJ0L3JlbGF0ZWQKLSAqIG1lc3NhZ2UgaXMgYSBzb2FwOkVudmVsb3BlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIHRoZSByb290IHBhcnQKLSAgICBpZihlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpICYmCi0gICAgICAgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpICE9IG51bGwpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgLy8gcGFyc2Ugcm9vdCBwYXJ0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKSk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBlbnRpdHkgYm9keQotICAgICAgRWxlbWVudCBlbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IHNvYXA6RW52ZWxvcGUsIHRoZW4gZmFpbCAgCi0gICAgICBpZighZWwuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkpIHx8Ci0gICAgICAgICAhZWwuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGlzIHsiICsKLSAgICAgICAgICAgIGVsLmdldE5hbWVzcGFjZVVSSSgpICsgIn0iICsgZWwuZ2V0TG9jYWxOYW1lKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGRvZXMgbm90IGNvbnRhaW4gIiArCi0gICAgICAgICAgICAiXCJzb2FwOkVudmVsb3BlXCIgZWxlbWVudCIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWMwZmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyBhIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICogZmllbGQtdmFsdWUgd2l0aCBhIG1lZGlhIHR5cGUgb2YgIm11bHRpcGFydC9yZWxhdGVkIjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIHRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUKLSAqIGhhcyBhIHR5cGUgcGFyYW1ldGVyIHdpdGggYSB2YWx1ZSBvZiAidGV4dC94bWwiIHdoZW4gaXQgaGFzIGEgbWVkaWEgdHlwZSBvZgotICogIm11bHRpcGFydC9yZWxhdGVkIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIGZvciBtdWx0aXBhcnQvcmVsYXRlZCBjb250ZW50IHR5cGUKLSAgICBTdHJpbmcgY29udGVudF90eXBlID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLCAKLSAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAKLSAgICBpZigoY29udGVudF90eXBlID09IG51bGwpIHx8IAotICAgICAgICghY29udGVudF90eXBlLmVxdWFsc0lnbm9yZUNhc2UoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9NVUxUSVBBUlQpKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAgCi0gICAgewotICAgICAgU3RyaW5nIHN1YlR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgCi0gICAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAidHlwZSIpOwotICAgICAgaWYoKHN1YlR5cGUgPT0gbnVsbCkKLSAgICAgICAgfHwgIXN1YlR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJUaGUgXCJ0eXBlXCIgcGFyYW1ldGVyIHZhbHVlIGlzIFwiIiArIHN1YlR5cGUgKyAiXCIiLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0OTFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotCi0vKioKLSAqIEFQMTkzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIGEgZGVzY3JpcHRpb24gYmluZHMgYSB3c2RsOm1lc3NhZ2UgcGFydCB0byBhCi0gKiBtaW1lOmNvbnRlbnQgZWxlbWVudCwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaW4gYSBtZXNzYWdlIGhhcyBhCi0gKiBjb250ZW50LWlkIGhlYWRlciB3aXRoIGEgZ2xvYmFsbHkgdW5pcXVlIHZhbHVlIG9mIHRoZSBmb3JtCi0gKiAmbHQ7cGFydG5hbWU9SURAaG9zdG5hbWUmZ3Q7LCB3aGVyZSAncGFydG5hbWUnIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YKLSAqIHRoZSB3c2RsOnBhcnQgZWxlbWVudCByZWZlcmVuY2VkIGJ5IHRoZSBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLSAgICAgIAotICAgICAgLy8gc2tpcCByb290IHBhcnQKLSAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldE1JTUVDb250ZW50UGFydCgoTUlNRVBhcnQpIHBhcnRzLmdldChpKSk7Ci0gICAgICAgIC8vIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0Ci0gICAgICAgIGlmIChmaW5kTUlNRVBhcnQobWltZVBhcnRzLmdldFBhcnRzKCksIHBhcnROYW1lKSA9PSBudWxsKSAKLSAgICAgICAgeyAgICAgICAgICAgIAotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY29ycmVzcG9uZGluZyBiaW5kaW5nICIgKwotICAgICAgICAgICAgICAib3BlcmF0aW9uIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgCi0gICAgICAgICAgICAgICJcIiBkb2VzIG5vdCBjb250YWluIHBhcnQgXCIiICsgcGFydE5hbWUgKyAiXCIiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gCi0gICAgICAgIHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGZpbmQgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQKLSAgICogQHBhcmFtIHBhcnRzIGFycmF5IG9mIHNvYXAgTUlNRSBwYXJ0cwotICAgKiBAcGFyYW0gcGFydE5hbWUgcGFydCBuYW1lIHRvIGZpbmQKLSAgICogQHJldHVybiBjb3JyZXNwb25kaW5nIE1JTUUgcGFydCAiQ29udGVudC1JRCIgdmFsdWUsIAotICAgKiBpZiB0aGUgcGFydCBkb2VzbnQgZm91bmQsIHJldHVucyBudWxsCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBmaW5kTUlNRVBhcnQoQ29sbGVjdGlvbiBwYXJ0cywgU3RyaW5nIHBhcnROYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24sIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIGlmKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXBhcnRzID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKGlwYXJ0cy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgaSA9IGkgKyAxOwotICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgU3RyaW5nIG1fcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBwYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0KLSAgICAgIC8vIGNoZWNrIHZhbHVlIGZvcm1hdCA8cGFydG5hbWU9VUlEQGhvc3RuYW1lPgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIG1fcGFydE5hbWUuc3RhcnRzV2l0aCgiPCIpICYmIG1fcGFydE5hbWUuZW5kc1dpdGgoIj4iKSkgCi0gICAgICB7Ci0gICAgICAgIGludCBpZHgsIGF0SWR4OwotICAgICAgICBTdHJpbmcgZW5QYXJ0TmFtZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyB1aWQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaG9zdCA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICAvLyBnZXQgcGFydCBuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKGlkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiPSIpKSAhPSAtMSkgCi0gICAgICAgIHsKLSAgICAgICAgICBlblBhcnROYW1lID0gZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7IAotICAgICAgICB9Ci0gICAgICAgIC8vIGdldCB1aWQgYW5kIGhvc3RuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKChhdElkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiQCIpKSAhPSAtMSkgJiYgKGF0SWR4ID4gaWR4KSkgCi0gICAgICAgIHsKLSAgICAgICAgICB1aWQgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhpZHgrMSwgYXRJZHgpOwotICAgICAgICAgIGhvc3QgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhhdElkeCsxLCBtX3BhcnROYW1lLmxlbmd0aCgpLTEpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHBhcnQgbmFtZXMgbWF0Y2gsIHZhbGlkYXRlIGZvcm1hdAotICAgICAgICBpZigoZW5QYXJ0TmFtZSAhPSBudWxsKSAmJiBlblBhcnROYW1lLmVxdWFscyhwYXJ0TmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZigodWlkID09IG51bGwpIHx8ICh1aWQubGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgVUlEIGZvcm1hdCIpOwotICAgICAgICAgIGlmKGhvc3QgPT0gbnVsbCkgCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICAvLyBjaGVjayBmb3IgbWFsZm9ybWVkIFVSTAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBVUkwoIkhUVFAiLCBob3N0LCAiIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICAgIH0gCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICogQHBhcmFtIHBhcnQgTUlNRVBhcnQgZWxlbWVudAotICAgKiBAcmV0dXJuIHRoZSBwYXJ0IHZhbHVlIGZyb20gTUlNRUNvbnRlbnQgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIAotICB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwNjA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLQotLyoqCi0gKiBBUDE5MzQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgZmllbGQgb2YgYSBwYXJ0IGluIGEKLSAqIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaGFzIGEgdmFsdWUgb2YgIjdiaXQiLCAiOGJpdCIsICJiaW5hcnkiLAotICogInF1b3RlZC1wcmludGFibGUiIG9yICJiYXNlNjQiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIG11bHRpcGFydC9yZWxhdGVkIGNvbnRlbnQgdHlwZQotICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgICBNaW1lUGFydHMgcGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0gICAgICBpZihwYXJ0cy5jb3VudCgpID09IDApIAotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgLy8gY2hlY2sgZWFjaCBwYXJ0IGZvciB0aGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBmaWVsZAotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAgIFN0cmluZyB0eXBlX3ZhbHVlID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgICAgICBNSU1FQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HKTsKLSAgICAgICAgICBpZiAodHlwZV92YWx1ZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCh0eXBlX3ZhbHVlID09IG51bGwpIHx8ICEodHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCI3Yml0IikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSB8fCAKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpIHx8Ci0gICAgICAgICAgICAgICAgdHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJpbmFyeSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICIoIiArIChpKzEpICsKLSAgICAgICAgICAgICAgICAgICIpLCBwYXJ0IGhlYWRlciBmaWVsZCBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIiBoYXMgaW5jb3JyZWN0IHZhbHVlIFwiIisKLSAgICAgICAgICAgICAgICAgIHR5cGVfdmFsdWUrIlwiIiwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjUxZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotLyoqCi0gKiBBUDE5MzUKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVuY29kaW5nIG9mIHRoZSBib2R5IG9mIGEgcGFydCBpbiBhCi0gKiBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGNvbmZvcm1zIHRvIHRoZSBlbmNvZGluZyBpbmRpY2F0ZWQgYnkgdGhlCi0gKiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGZpZWxkLXZhbHVlLAotICogYXMgc3BlY2lmaWVkIGJ5IFJGQzIwNDUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZighZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAvLyBnZXQgTUlNRSBwYXJ0cwotICAgICAgTWltZVBhcnRzIHBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgaWYocGFydHMuY291bnQoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayBlYWNoIHBhcnQgZm9yIHRoZSBlbmNvZGluZyBtYXRjaAotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIAlpbnQgaSA9IDA7Ci0gICAgICAJTWltZVBhcnQgcm9vdCA9IHBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaSA9IDE7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAJTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAJCi0gICAgICAgICAgICAvLyBnZXQgZW5jb2RpbmcgZnJvbSBoZWFkZXIKLSAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9ICBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShwYXJ0LmdldEhlYWRlcnMoKSwgCi0gICAgICAgICAgICAJSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORyk7Ci0gICAgICAgICAgCi0gICAgICAgICAgIAlpZiAoKHBhcnQgPT0gcm9vdCkgfHwgCi0gICAgICAgICAgIAkJKChlbmNvZGluZyAhPSBudWxsKSAmJiBlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJiYXNlNjQiKSkpCi0gICAgICAgICAgICAgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgZmFsc2UpOwotICAgICAgICAgIAllbHNlIAotICAgICAgICAgIAkgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgdHJ1ZSk7Ci0gICAgICAgICAgfSBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICJwYXJ0ICIrKGkrMSkrIiBFcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogQ2hlY2sgbWVzc2FnZSBlbnRyeSB0byBlbmNvZGluZyBjb25mb3JtaXR5IAotICAgKiBAcGFyYW0gZW50cnkgbWVzc2FnZSBlbnRyeQotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBlbmNvZGluZyBjb25mb3JtaXR5ICAKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tQYXJ0KE1pbWVQYXJ0IHBhcnQsIFN0cmluZyAgZW5jb2RpbmcsIGJvb2xlYW4gZW5jb2RlZCkgCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbnRlbnQgPSBudWxsOwotICAgIGlmIChlbmNvZGVkKQotICAgICAgIGNvbnRlbnQgPSBuZXcgU3RyaW5nKFV0aWxzLmRlY29kZUJhc2U2NChwYXJ0LmdldENvbnRlbnQoKSkpOwotICAgICBlbHNlCi0gICAgCWNvbnRlbnQgPSBwYXJ0LmdldENvbnRlbnQoKTsKLSAgICAKLSAgICBpZihlbmNvZGluZyA9PSBudWxsKSAKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIC8vIGNoZWNrIDdiaXQKLSAgICB9IGVsc2UgaWYoZW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZSgiN2JpdCIpKSB7Ci0gICAgICBjaGVja09uN2JpdChjb250ZW50KTsKLSAgICAvLyBjaGVjayA4Yml0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSkgewotICAgICAgY2hlY2tPbjhiaXQoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgcXVvdGVkLXByaW50YWJsZQotICAgIH0gZWxzZSBpZihlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikpIHsKLSAgICAgIGNoZWNrT25RdW90ZWRQcmludGFibGUoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgYmFzZTY0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKSB7Ci0gICAgICBjaGVja09uQmFzZTY0KGNvbnRlbnQpOwotICAgIH0KLSAgICAvLyB3ZSBkb250IGNoZWNrIGJpbmFyeSBlbmNvZGluZywgc2luY2UgbWVzc2FnZSBjYW4gY29udGFpbnMgYW55IGNoYXJzIAotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgN2JpdCBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT243Yml0KFN0cmluZyBtZXNzYWdlKSAKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc3RycyA9IHNwbGl0KG1lc3NhZ2UpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3Ryc1tpXTsKLSAgICAgIAotICAgICAgLy8gY2hlY2sgc3RyaW5nIGxlbmd0aAotICAgICAgaWYoc3RyLmxlbmd0aCgpID4gOTk4KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBObyBvY3RldHMgd2l0aCBkZWNpbWFsIHZhbHVlcyBncmVhdGVyIHRoYW4gMTI3Ci0gICAgICAvLyBhcmUgYWxsb3dlZCBhbmQgbmVpdGhlciBhcmUgTlVMcyAob2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZSAwKS4gIENSCi0gICAgICAvLyhkZWNpbWFsIHZhbHVlIDEzKSBhbmQgTEYgKGRlY2ltYWwgdmFsdWUgMTApIG9jdGV0cyBvbmx5IG9jY3VyIGFzCi0gICAgICAvLyBwYXJ0IG9mIENSTEYgbGluZSBzZXBhcmF0aW9uIHNlcXVlbmNlcy4KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID4gMTI3KSB8fCAoY2hhcnNbal0gPT0gMCkgfHwgCi0gICAgICAgICAgICAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoYXIgKCIgKyBjaGFyc1tqXSArIAotICAgICAgICAgICAgICAiKVtjb2RlPSIgKyAoYnl0ZSkgY2hhcnNbal0gKyAiIHBvc2l0aW9uPSIgKyBqICsgCi0gICAgICAgICAgICAgICJdIGRvZXMgbm90IGFsbG93cyBpbiA3Yml0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiA4Yml0IGVuY29kZWQgbWVzc2FnZSAoUkZDMjA0NSkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbjhiaXQoU3RyaW5nIG1lc3NhZ2UpIAotICAgIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzdHJzID0gc3BsaXQobWVzc2FnZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdHJzW2ldOwotICAgICAgCi0gICAgICAvLyBjaGVjayBzdHJpbmcgbGVuZ3RoCi0gICAgICBpZihzdHIubGVuZ3RoKCkgPiA5OTgpIAotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0ci5sZW5ndGgoKSArIAotICAgICAgICAgICAgIikgb2YgdGhlIGxpbmUgKCIgKyAoaSsxKSArICIpIGdyZWF0ZXIgdGhhbiA5OTgiKTsKLSAgICAgIH0KLSAgICAgIC8vIG9jdGV0cyB3aXRoIGRlY2ltYWwgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcKLSAgICAgIC8vIG1heSBiZSB1c2VkLiAgQXMgd2l0aCAiN2JpdCBkYXRhIiBDUiBhbmQgTEYgb2N0ZXRzIG9ubHkgb2NjdXIgYXMgcGFydAotICAgICAgLy8gb2YgQ1JMRiBsaW5lIHNlcGFyYXRpb24gc2VxdWVuY2VzIGFuZCBubyBOVUxzIGFyZSBhbGxvd2VkLiAKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID09IDApIHx8IChjaGFyc1tqXSA9PSAxMCkgfHwgKGNoYXJzW2pdID09IDEzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICIpW2NvZGU9IiArIChieXRlKSBjaGFyc1tqXSArICIgcG9zaXRpb249IiArIGogKyAKLSAgICAgICAgICAgICAgIl0gZG9lcyBub3QgYWxsb3dzIGluIDhiaXQgZW5jb2RpbmcgY29udGVudCIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgcXVvdGVkLXByaW50YWJsZSBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25RdW90ZWRQcmludGFibGUoU3RyaW5nIG1lc3NhZ2UpCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gY2hlY2sgbGVuZ3RoCi0gICAgICAvLyBSRkMyMDQ1Ci0gICAgICAvLyAoNSkgICAoU29mdCBMaW5lIEJyZWFrcykgVGhlIFF1b3RlZC1QcmludGFibGUgZW5jb2RpbmcKLSAgICAgIC8vUkVRVUlSRVMgdGhhdCBlbmNvZGVkIGxpbmVzIGJlIG5vIG1vcmUgdGhhbiA3NgotICAgICAgLy9jaGFyYWN0ZXJzIGxvbmcuICBJZiBsb25nZXIgbGluZXMgYXJlIHRvIGJlIGVuY29kZWQKLSAgICAgIC8vd2l0aCB0aGUgUXVvdGVkLVByaW50YWJsZSBlbmNvZGluZywgInNvZnQiIGxpbmUgYnJlYWtzCi0gICAgICAvL211c3QgYmUgdXNlZC4gIEFuIGVxdWFsIHNpZ24gYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEKLSAgICAgIC8vZW5jb2RlZCBsaW5lIGluZGljYXRlcyBzdWNoIGEgbm9uLXNpZ25pZmljYW50ICgic29mdCIpCi0gICAgICAvL2xpbmUgYnJlYWsgaW4gdGhlIGVuY29kZWQgdGV4dC4KLSAgICAgIGlmKCgoc3Ryc1tpXS5pbmRleE9mKCJcdCIpICE9IC0xKSB8fCAoc3Ryc1tpXS5pbmRleE9mKCIgIikgIT0gLTEpKSAmJgotICAgICAgICAgIChzdHJzW2ldLmxlbmd0aCgpID4gNzYpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0cnNbaV0ubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAKLSAgICAgICAgICAgICIpIGdyZWF0ZXIgdGhhbiA3NiwgXCJzb2Z0XCIgbGluZSBicmVha3MgbXVzdCBiZSB1c2VkIik7Ci0gICAgICB9Ci0KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0cnNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vKDEpICAgKEdlbmVyYWwgOGJpdCByZXByZXNlbnRhdGlvbikgQW55IG9jdGV0LCBleGNlcHQgYSBDUiBvcgotICAgICAgICAvL0xGIHRoYXQgaXMgcGFydCBvZiBhIENSTEYgbGluZSBicmVhayBvZiB0aGUgY2Fub25pY2FsCi0gICAgICAgIC8vKHN0YW5kYXJkKSBmb3JtIG9mIHRoZSBkYXRhIGJlaW5nIGVuY29kZWQsIG1heSBiZQotICAgICAgICAvL3JlcHJlc2VudGVkIGJ5IGFuICI9IiBmb2xsb3dlZCBieSBhIHR3byBkaWdpdAotICAgICAgICAvL2hleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvY3RldCdzIHZhbHVlLiAgVGhlCi0gICAgICAgIC8vZGlnaXRzIG9mIHRoZSBoZXhhZGVjaW1hbCBhbHBoYWJldCwgZm9yIHRoaXMgcHVycG9zZSwKLSAgICAgICAgLy9hcmUgIjAxMjM0NTY3ODlBQkNERUYiLiAgVXBwZXJjYXNlIGxldHRlcnMgbXVzdCBiZQotICAgICAgICAvL3VzZWQ7IGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSBub3QgYWxsb3dlZC4gIFRodXMsIGZvcgotICAgICAgICAvL2V4YW1wbGUsIHRoZSBkZWNpbWFsIHZhbHVlIDEyIChVUy1BU0NJSSBmb3JtIGZlZWQpIGNhbgotICAgICAgICAvL2JlIHJlcHJlc2VudGVkIGJ5ICI9MEMiLCBhbmQgdGhlIGRlY2ltYWwgdmFsdWUgNjEgKFVTLQotICAgICAgICAvL0FTQ0lJIEVRVUFMIFNJR04pIGNhbiBiZSByZXByZXNlbnRlZCBieSAiPTNEIi4gIFRoaXMKLSAgICAgICAgLy9ydWxlIG11c3QgYmUgZm9sbG93ZWQgZXhjZXB0IHdoZW4gdGhlIGZvbGxvd2luZyBydWxlcwotICAgICAgICAvL2FsbG93IGFuIGFsdGVybmF0aXZlIGVuY29kaW5nLgotICAgICAgICAvLyAoMikgICAoTGl0ZXJhbCByZXByZXNlbnRhdGlvbikgT2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZXMgb2YKLSAgICAgICAgLy8zMyB0aHJvdWdoIDYwIGluY2x1c2l2ZSwgYW5kIDYyIHRocm91Z2ggMTI2LCBpbmNsdXNpdmUsCi0gICAgICAgIC8vTUFZIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBVUy1BU0NJSSBjaGFyYWN0ZXJzIHdoaWNoCi0gICAgICAgIC8vY29ycmVzcG9uZCB0byB0aG9zZSBvY3RldHMgKEVYQ0xBTUFUSU9OIFBPSU5UIHRocm91Z2gKLSAgICAgICAgLy9MRVNTIFRIQU4sIGFuZCBHUkVBVEVSIFRIQU4gdGhyb3VnaCBUSUxERSwKLSAgICAgICAgLy9yZXNwZWN0aXZlbHkpLgotICAgICAgICBpZigoY2hhcnNbal0gPT0gNjEpICYmIChjaGFycy5sZW5ndGggPiBqKzIpKSAKLSAgICAgICAgewotICAgICAgICAgIGlmKCFpc0hleChjaGFyc1tqKzFdKSB8fCAhaXNIZXgoY2hhcnNbaisyXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInRoZSBxdW90ZWQgY2hhciAoIiArIAotICAgICAgICAgICAgICAgICBjaGFyc1tqXSArIGNoYXJzW2orMV0gKyBjaGFyc1tqKzJdICsgIikgaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGogKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBhbmQgdGFiCi0gICAgICAgIGVsc2UgaWYoKGNoYXJzW2pdICE9IDkpICYmIChjaGFyc1tqXSAhPSAzMikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBjaGVjayBpbnZhbGlkIHN5bWJvbAotICAgICAgICAgIGlmKChjaGFyc1tqXSA9PSAwKSB8fCAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykgfHwKLSAgICAgICAgICAgICAoY2hhcnNbal0gPCAzMykgfHwgKGNoYXJzW2pdID4gMTI2KSB8fCAoY2hhcnNbal0gPT0gNjEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAgICJdIG11c3QgYmUgcXVvdGVkIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgYmFzZTY0IGVuY29kZWQgbWVzc2FnZSAoUkZDMzU0OCkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbkJhc2U2NChTdHJpbmcgbWVzc2FnZSkKLSAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0cnNbaV07Ci0gICAgICAKLSAgICAgIC8vIGNoZWNrIHN0cmluZyBsZW5ndGgKLSAgICAgIGlmKHN0ci5sZW5ndGgoKSA+IDc2KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBjaGVjayBmb3IgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkvKyIKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjID0gY2hhcnNbaV07Ci0gICAgICAgIGlmKChjIDwgNDcpIHx8IChjID4gMTIyKSB8fCAoKGMgPiA1NykgJiYgKGMgPCA2NSkpIHx8IAotICAgICAgICAgICAoKGMgPiA5MCkgJiYgKGMgPCA5NykpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjaGFyICgiICsgY2hhcnNbal0gKyAKLSAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAiXSBkb2VzIG5vdCBhbGxvd3MgaW4gYmFzZTY0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIHNwbGl0IHN0cmluZyB0byBhcnJheSBvZiBzdHJpbmdzIGFuZCB1c2UgYXMgZGVsaW1ldGVyIENSTEYKLSAgICogQHBhcmFtIHN0ciBvcmlnaW5hbCBzdHJpbmcKLSAgICogQHJldHVybiBhcnJheSBvZiBzdHJpbmdzCi0gICAqLwotICBwcml2YXRlIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBzdHIpCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IoaW50IGlkeCA9IHN0ci5pbmRleE9mKCJcclxuIik7IGlkeCAhPSAtMTsgaWR4ID0gc3RyLmluZGV4T2YoIlxyXG4iKSkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChzdHIuc3Vic3RyaW5nKDAsIGlkeCkpOwotICAgICAgc3RyID0gc3RyLnN1YnN0cmluZyhpZHgrMik7Ci0gICAgfQotICAgIGxpc3QuYWRkKHN0cik7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSkgbGlzdC50b0FycmF5KG5ldyBTdHJpbmdbbGlzdC5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBieXRlIGlzICIwMTIzNDU2Nzg5QUJDREVGIiByYW5nZSwgZmFsc2Ugb3RoZXdpc2UKLSAgICogQHBhcmFtIGMgY2hhcgotICAgKiBAcmV0dXJuIHRydWUgaWYgYnl0ZSBpcyAiMDEyMzQ1Njc4OUFCQ0RFRiIgcmFuZ2UsIGZhbHNlIG90aGV3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNIZXgoY2hhciBjKSB7Ci0gICAgcmV0dXJuICgoKGMgPj0gNDgpICYmIChjIDw9IDU3KSkgfHwgKChjID49IDY1KSAmJiAoYyA8PSA3MCkpKTsgCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGFlNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTM2Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIGFsbCBNSU1FIGVuY2Fwc3VsYXRpb24gYm91bmRhcnkgc3RyaW5ncyAKLSAqIGFyZSBwcmVjZWRlZCB3aXRoIHRoZSBhc2NpaSBjaGFyYWN0ZXJzIENSICgxMykgYW5kIExGICgxMCkgCi0gKiBpbiB0aGF0IHNlcXVlbmNlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBBUDE5MzYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gaWYgYm91bmRhcnkgZXF1YWxzIG51bGwsIHRoZW4gcmVzdWx0IGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAgICAKLSAgICAvLyBvdGhlcndpc2UgaXQgaXMgdHJ1ZSAtLSBjaGVja2VkIGluIG1vbml0b3IKLSAgICAvLyBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgIC8vIEl0ZXJhdG9yIGkgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIC8vIGJvb2xlYW4gaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSBmYWxzZTsKLSAgICAvL3doaWxlIChpLmhhc05leHQoKSAmJiAhaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQpCi0gICAgLy97Ci0gICAgLy8JTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpLm5leHQoKTsKLSAgICAvLwlTdHJpbmdbXSBib3VuZGFyaWVzID0gcGFydC5nZXRCb3VuZGFyeVN0cmluZ3MoKTsKLSAgICAvLwlmb3IgKGludCBqID0gMDsgajxib3VuZGFyaWVzLmxlbmd0aDsgaisrKQotICAgIC8vCXsKLSAgICAvLwkJaWYgKCFib3VuZGFyaWVzW2pdLnN0YXJ0c1dpdGgoIiYjeGQ7XG4iKSkKLSAgICAvLwkJewotICAgIC8vCQkJaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSB0cnVlOwotICAgIC8vCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgLy8JCQlmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoYm91bmRhcmllc1tqXSwgZW50cnlDb250ZXh0KTsKLSAgICAvLwkJCWJyZWFrOwotICAgIC8vCQl9Ci0gICAgLy8JfQotICAgIC8vfQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmI3OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5NDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFQMTk0MgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBwYXJ0IG9mIGEgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSB0aGF0IGlzIGJvdW5kCi0gKiB0byBhIG1pbWU6Y29udGVudCB0aGF0IHJlZmVycyB0byBnbG9iYWwgZWxlbWVudCBkZWNsYXJhdGlvbiAodmlhIHRoZSBlbGVtZW50Ci0gKiBhdHRyaWJ1dGUgb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgYm91bmQgbWVzc2FnZSBwYXJ0IGlzIHNlcmlhbGl6ZWQgd2l0aGluIHRoZSBNSU1FCi0gKiBwYXJ0IGFzIGEgc2VyaWFsaXphdGlvbiBvZiBhbiBYTUwgaW5mb3NldCB3aG9zZSByb290IGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJ5Ci0gKiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKTsKLSAgICAgIAotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIG5vbi1yb290IE1JTUUgcGFydHMKLSAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAobWltZVBhcnRzLmNvdW50KCk8IDIpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgICAvLyBHZXR0aW5nIGFuIG9wZXJhdGlvbiBtYXRjaGVkIGZvciBhIG1lc3NhZ2UKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gbWltZTpjb250ZW50IGVsZW1lbnQgdGhhdCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24gCi0gICAgICAgIGJvb2xlYW4gbWltZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBtZXNzYWdlIE1JTUUgcGFydHMKLSAgICAgICAgSXRlcmF0b3IgaU1pbWVQYXJ0cyA9IG1pbWVQYXJ0cy5nZXRQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGlNaW1lUGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAJICBpID0gaSArIDE7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIE1JTUUgcGFydAotICAgICAgICAgIE1pbWVQYXJ0IG1pbWVQYXJ0ID0gKE1pbWVQYXJ0KWlNaW1lUGFydHMubmV4dCgpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBwYXJ0IG5hbWUgZm9ybSB0aGUgQ29udGVudC1JRCBoZWFkZXIKLSAgICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaW50IGlkeCA9IHBhcnROYW1lLmluZGV4T2YoIj0iKTsKLSAgICAgICAgICAgIGlmKChpZHggIT0gLTEpICYmIHBhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkKLSAgICAgICAgICAgICAgcGFydE5hbWUgPSBlbmNvZGVQYXJ0TmFtZShwYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb3VsZCBub3QgZXh0cmFjdCBhIHBhcnQgbmFtZSBmcm9tIHRoZSBoZWFkZXIsCi0gICAgICAgICAgICAvLyBwcm9jZWVkIHdpdGggdGhlIG5leHQgTUlNRSBwYXJ0Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSBhIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICAgICAgaWYgKGJvdW5kVG9NaW1lQ29udGVudChleHRFbGVtcywgcGFydE5hbWUpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldFBhcnRzKCkuZ2V0KHBhcnROYW1lKTsKLSAgICAgICAgICAgIFFOYW1lIHJlZk5hbWU7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcGFydCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICAgICAgICAgIGlmIChwYXJ0ICE9IG51bGwgJiYgKHJlZk5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1pbWVDb250ZW50Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAvLyBUcnlpbmcgdG8gcGFyc2UgcGFydCBjb250ZW50Ci0gICAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwobWltZVBhcnQuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhbiBYTUwgaW5mb3NldCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBib3VuZCBtZXNzYWdlIHBhcnQgb2YgdGhlICIKLSAgICAgICAgICAgICAgICAgICsgIk1JTUUgcGFydCBudW1iZXIgIiArIChpICsgMSkgKyAiIGlzIGludmFsaWQgWE1MIGluZm9zZXQuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBRTmFtZSBvYmplY3Qgb2YgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICAgICAgICBRTmFtZSByb290TmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgZG9jLmdldERvY3VtZW50RWxlbWVudCgpLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWVzIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKCFyZWZOYW1lLmVxdWFscyhyb290TmFtZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHJvb3QgZWxlbWVudCBuYW1lIGlzICIKLSAgICAgICAgICAgICAgICAgICsgcm9vdE5hbWUgKyAiLCB0aGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzICIKLSAgICAgICAgICAgICAgICAgICsgcmVmTmFtZSArICIuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgbm8gbWltZTpjb250ZW50UyBmb3VuZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYSBwYXJ0IGlzIGJvdW5kIGJ5IGEgbWltZTpjb250ZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIHBhcnQgYSBwYXJ0IG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHBhcnQgaXMgYm91bmQgYnkgbWltZTpjb250ZW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYm91bmRUb01pbWVDb250ZW50KExpc3QgZXh0RWxlbXMsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwgJiYgZXh0RWxlbXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICAvLyBFeHBlY3RlZCB0aGUgZmlyc3QgZXh0IGVsZW0gaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lUGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBuZWVkZWQKLSAgICAgICAgICBMaXN0IGVsZW1zID0gKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChpKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgaWYgKGVsZW1zLnNpemUoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3QgZWxlbWVudAotICAgICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWxlbXMuZ2V0KDApOwotICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50IGFuZCBpdCBiaW5kcyBhIHBhcnQKLSAgICAgICAgICAgIGlmIChlbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKQotICAgICAgICAgICAgICAmJiBwYXJ0LmVxdWFscygoKE1JTUVDb250ZW50KWVsZW0pLmdldFBhcnQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmYzMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotLyoqCi0gKiBBUDE5NDUKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUgaW4gYSBtZXNzYWdlIAotICogaXMgZWl0aGVyICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTQ1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQVAxOTQ1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBoZWFkZXJOYW1lID0gSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFOwotCi0gICAgLy8gR2V0dGluZyBhIGhlYWRlcgotICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyQXR0cmlidXRlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgaGVhZGVyTmFtZSk7Ci0gICAgLy8gSWYgaGVhZGVyVmFsdWUgaXMgbnVsbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChoZWFkZXJWYWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICAvLyBJZiB0aGUgaGVhZGVyIGlzICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIiwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgZWxzZSBpZiAoaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkKLSAgICAgICAgfHwgaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgfQotICAgIC8vIGVsc2UgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIGhlYWRlclZhbHVlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZjBmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAqIGNvbnRhaW5pbmcgbm9uLXJvb3QgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlCi0gKiBjb250YWluaW5nIG5vbi1yb290IHBhcnRzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgTUlNRSBwYXJ0cywgdGhlIGFzc2VydGlvbiBwYXNzZWQgCi0gICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpID4gMSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBUaGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTBlNjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZSwgd2l0aCBhbiBIVFRQIGVudGl0eS1ib2R5LjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBpcyB0aGUgZXhjbHVzaXZlIHBheWxvYWQgb2YgdGhlIEhUVFAgZW50aXR5LWJvZHkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIEFQNTEwMCBleHRlbmRzIFNTQlA1MTAwIAotewotCS8qKgotICAgICAqIENvbnN0cnVjdG9yLgotCSAqIEBwYXJhbSBpbXBsCi0JICovCi0JcHVibGljIEFQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKSAKLQl7Ci0JCXN1cGVyKGltcGwpOwotCX0KLQotCXB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0JICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0JICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotCSAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotCXsKLQkgIC8vIElmIHRoZXJlIGlzIGEgU09BUCBNZXNzYWdlIHdpdGggQXR0YWNobWVudHMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLQkgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotCSAgewotCSAgCXJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIGZhaWx1cmVEZXRhaWwpOwotCSAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUodGVzdEFzc2VydGlvbiwgZW50cnlDb250ZXh0KTsKLQkgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTJjYjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbWVzc2FnZSBtdXN0IGhhdmUgYSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZC4gIFRoZSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZCBtdXN0IGhhdmUgYSBmaWVsZC12YWx1ZSB3aG9zZSBtZWRpYSB0eXBlIGlzICJ0ZXh0L3htbCIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBBUDUxMDEgZXh0ZW5kcyBTU0JQNTEwMSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gaW1wbAotCSAqLwotCXB1YmxpYyBBUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkgCi0JewotCQlzdXBlcihpbXBsKTsKLQl9Ci0KLQlwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotCSAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotCSAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLQkgIHRocm93cyBXU0lFeGNlcHRpb24KLQl7Ci0JICAvLyBJZiB0aGVyZSBpcyBhIFNPQVAgTWVzc2FnZSB3aXRoIEF0dGFjaG1lbnRzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0JICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLQkgIHsKLQkgIAlyZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLCBmYWlsdXJlRGV0YWlsKTsKLQkgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0JICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWJjYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAxMDAxLgotICogSWYgaXQgaXMgYSByZXF1ZXN0LCB0aGUgYXJnICMyIG9mIFBPU1QgaXMgJmx0O0hUVFAvMS4xJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIG9mIHRoZSAKLSAqIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAmbHQ7SFRUUC8xLjEmZ3Q7LgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCBtZXNzYWdlLCB0aGVuIGNoZWNrIFBPU1QgaGVhZGVyCi0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVxdWVzdExpbmU7Ci0gICAgICBpZiAoKChyZXF1ZXN0TGluZSA9IHRoaXMudmFsaWRhdG9yLmdldFBvc3RSZXF1ZXN0KGh0dHBIZWFkZXIpKSA9PSBudWxsKQotICAgICAgICB8fCAocmVxdWVzdExpbmUuc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbWV0aG9kID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDApOwotICAgICAgICAvL1N0cmluZyByZXF1ZXN0VVJJID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgICAgICBTdHJpbmcgaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXF1ZXN0TGluZS5nZXQoMik7Ci0KLSAgICAgICAgLy9Gb3IgZWFjaCByZXF1ZXN0IG1lc3NhZ2UgdGhhdCBpcyBhbiBIVFRQIFBPU1QKLSAgICAgICAgaWYgKG1ldGhvZC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1BPU1QpICYmIGh0dHBWZXJzaW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaHR0cFZlcnNpb24uZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBpdCBtdXN0IGJlIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzEpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5YTQ2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwMi4KLSAqIElmIGl0IGlzIGEgcmVxdWVzdCwgdGhlIGFyZyAjMiBvZiBQT1NUIGlzICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIAotICogb2YgdGhlIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiAob3IgSFRUUC8xLjApLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAKLSAqICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0OyBvciBoaWdoZXI7Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGh0dHBIZWFkZXIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsIHRoZW4gY2hlY2sgUE9TVCBmb3IgMS4xIG9yIDEuMAotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgLy8gR2V0IGVhY2ggZW50cnkgaW4gdGhlIHBvc3QgaGVhZGVyCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgcG9zdE1lc3NhZ2UgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICIgXHJcbiIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGlyZCB0b2tlbiwgdGhlbiBmYWlsCi0gICAgICBpZiAocG9zdE1lc3NhZ2UuY291bnRUb2tlbnMoKSA8IDMpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIDNyZCB0b2tlbiAodGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz8pCi0gICAgICAgIFN0cmluZyBodHRwVmVyc2lvbiA9ICIiOwotICAgICAgICBTdHJpbmcgbWVzc2FnZVR5cGUgPSAiIjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNZXNzYWdlIHR5cGUKLSAgICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgICAgbWVzc2FnZVR5cGUgPSBwb3N0TWVzc2FnZS5uZXh0VG9rZW4oKTsKLSAgICAgICAgICBlbHNlIGlmIChpID09IDIpCi0gICAgICAgICAgICBodHRwVmVyc2lvbiA9IHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtZXNzYWdlVHlwZS5lcXVhbHMoIlBPU1QiKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgdGhpcmQgdG9rZW4gaXMgbm90IEhUVFAvMS4xIG90IEhUVFAvMS4wLCB0aGVuIGZhaWwKLSAgICAgICAgZWxzZSBpZiAoCi0gICAgICAgICAgKCFodHRwVmVyc2lvbi5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgICAmJiAoIWh0dHBWZXJzaW9uLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8wKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRWxzZSBpdCBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gUmVzcG9uc2UtTGluZSAoMXN0KSA9IEhUVFAtVmVyc2lvbiBTUCBSZXNwb25zZS1jb2RlIFNQIFJlc3BvbnNlLXRleHQgQ1JMRgotICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyLCAiXG5cclxmIik7Ci0KLSAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBIVFRQIHZlcnNpb24gaW5mbyBleHBlY3RlZCBidXQgbm90IGZvdW5kCi0gICAgICAgICAgLy8gKHN0YXRlIHRoZSBmYWN0IGluIHRoZSBleGNlcHRpb24gbWVzc2FnZT8pCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHByb3RvY29sIHZlcnNpb24gaW5kaWNhdGVzIEhUVFAvMS4wIG9yIEhUVFAvMS4xCi0gICAgICAgIGlmICghc3RhcnRMaW5lLnN0YXJ0c1dpdGgoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8xKQotICAgICAgICAgICYmICFzdGFydExpbmUuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzApKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmN2YxZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwNC4gCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIGlzIGEgUE9TVCBtZXNzYWdlLCB3aXRob3V0IGFueSB1c2Ugb2YgZnJhbWV3b3JrIGV4dGVuc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQT1NUIG1lc3NhZ2UKLSAgICBpZiAoIWh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfUE9TVCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICB3aGlsZSAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpCi0gICAgICAmJiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpKQotICAgIHsKLSAgICAgIGxpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICgobGluZSAhPSBudWxsKQotICAgICAgICAmJiAobGluZS5zdGFydHNXaXRoKCJNLVBPU1QiKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIkV4dDoiKSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0gLy9FbmQgV2hpbGUKLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2N2NlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlAxMDA2LiAKLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgcmF3SFRUUEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIE1hcCBodHRwSGVhZGVyID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMocmF3SFRUUEhlYWRlciwgIjoiKTsKLQotICAgIC8vIEdldCB0aGUgc29hcCBhY3Rpb24gaGVhZGVyCi0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSAoU3RyaW5nKSBodHRwSGVhZGVyLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzb2FwIGFjdGlvbiBoZWFkZXIsIHRoZW4gTkEKLSAgICBpZiAoc29hcEFjdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UgaWYgKCEoc29hcEFjdGlvbi5zdGFydHNXaXRoKCJcIiIpKSB8fCAhKHNvYXBBY3Rpb24uZW5kc1dpdGgoIlwiIikpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIkhUVFAgSGVhZGVyOiBcIiIgKyByYXdIVFRQSGVhZGVyICsgIlwiLiIsCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYWM3MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAxMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMTAuCi0gKiBJdCBNVVNUIE5PVCBjb250YWluIGEgU09BUCBFbnZlbG9wZTogdGhlIEhUVFAgZW50aXR5LWJvZHkgbXVzdCBiZSBlbXB0eS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0KLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAvL2ZpbmQgb3BlcmF0aW9uIGluIHBvcnQgdHlwZQotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlY2FjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMS4KLSAqIEEgcmVzcG9uc2UgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UgU0hPVUxEIGJlIHNlbnQgCi0gKiB1c2luZyBlaXRoZXIgYSAiMjAwIE9LIiBvciAiMjAyIEFjY2VwdGVkIiBIVFRQIHN0YXR1cyBjb2RlLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyByZXNwb25zZSBkb2VzIG5vdCBjb250YWlucyBTT0FQIG1lc3NhZ2UKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSA9PSBudWxsCi0gICAgICB8fCAiIi5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSkpCi0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZSAKLSAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgICAgaWYgKCIyMDAiLmVxdWFscyhodHRwU3RhdHVzKSk7Ci0gICAgICBlbHNlIGlmICgiMjAyIi5lcXVhbHMoaHR0cFN0YXR1cykpOwotCi0gICAgICAvLyBJZiA0eHgsIHRoZW4gcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICAgIGVsc2UgaWYgKGh0dHBTdGF0dXMuc3RhcnRzV2l0aCgiNCIpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gcmVzcG9uc2UgY29udGFpbnMgU09BUCBtZXNzYWdlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwOTM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMy4KLSAqIFRoZSByZXF1ZXN0IG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluIGEgUE9TVCBtZXRob2QuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgcmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0LmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBHZXQgSFRUUCBzdGF0dXMgY29kZQotICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICBpZiAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiUE9TVCAiKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlIGlmICghIjQwNSIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgICAgKyAiXG5cblJlc3BvbnNlIG1lc3NhZ2U6XG5IZWFkZXJzOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICArICJcbk1lc3NhZ2U6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjZGJkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi0KLS8qKgotICogQlAxMTA0LgotICogVGhlIHJlcXVlc3QgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gYSBjb250ZW50LXR5cGUgb2YgInRleHQveG1sIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTEwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIHJlcXVlc3QgZm9yIHRoZSAidGV4dC94bWwiIGNvbnRlbnQgdHlwZQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgaGVhZGVycyA9IHJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpCi0gICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLQotICAgIC8vIEdldCBIVFRQIHN0YXR1cyBjb2RlCi0gICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpKTsKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0IG1lc3NhZ2UgaGFzIGEgY29udGVudCB0eXBlIG9mIHRleHQveG1sLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsCi0gICAgICAmJiBjb250ZW50VHlwZS5pbmRleE9mKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBIVFRQIHN0YXR1cyBjb2RlCi0gICAgICBpZiAoISI0MTUiLmVxdWFscyhodHRwU3RhdHVzKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIlxuUmVxdWVzdCBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICAgICsgIlxuXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTBmODRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDExMTYuCi0gKiBTT0FQQWN0aW9uIGhlYWRlciBzaG91bGQgY29udGFpbiBhIHF1b3RlZCBzdHJpbmcgdGhhdCBoYXMgc2FtZSAKLSAqIHZhbHVlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgc29hcGJpbmQ6b3BlcmF0aW9uL0Bzb2FwQWN0aW9uIGF0dHJpYnV0ZSwgCi0gKiBhbmQgYW4gZW1wdHkgc3RyaW5nICgiIikgaWYgdGhlcmUgaXMgbm8gc3VjaCBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGhlYWRlcnMgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSBzb2FwT3Blci5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgaWYgKHNvYXBBY3Rpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoISIiLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFzb2FwQWN0aW9uLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBpZiAoYWN0aW9uID09IG51bGwpIAotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBpZiAoYWN0aW9uLmxlbmd0aCgpID4gMQotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KGFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHsKLSAgICAgICAgYWN0aW9uID0gYWN0aW9uLnN1YnN0cmluZygxLCBhY3Rpb24ubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRAotICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2E1Y2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEJQNDEwMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBtZXNzYWdlIGNvbnRhaW5zIGFuIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVyIGZpZWxkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0FVVEhfU0NIRU1FX0JBU0lDID0gIkJhc2ljIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfQVVUSF9TQ0hFTUVfRElHRVNUID0gIkRpZ2VzdCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXR0aW5nIG1lc3NhZ2UgaGVhZGVycwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgLy8gSWYgdGhpcyBpcyBhIHJlcXVlc3QgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgcmVxdWVzdCBoZWFkZXJzIGNvbnRhaW4gYXV0aGVudGljYXRpb24gc2NoZW1lICJCYXNpYyIgb3IgIkRpZ2VzdCIKLSAgICAgIC8vIG9yIHRoZXJlIGFyZSBubyBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9BVVRIT1JJWkFUSU9OKQotICAgICAgICAmJiAhY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZWxzZSB0aGlzIGlzIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGhlYWRlcnMgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IgotICAgICAgLy8gb3IgdGhlcmUgYXJlIG5vIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVycywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1dXV19BVVRIRU5USUNBVEUpCi0gICAgICAgICYmICFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXNzZXJ0aW9uIHJlc3VsdCBoYXMgbm90IGJlZW4gY2hhbmdlZCwgSFRUUCBBdXRoZW50aWNhdGlvbiBoZWFkZXJzCi0gICAgLy8gZG9lcyBub3QgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IiwKLSAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgIGlmIChyZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBIVFRQIGhlYWRlcnMgY29udGFpbiBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgdGhhdCB1c2VzCi0gICAqIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvdGhlciB0aGFuICJCYXNpYyIgb3IgIkRpZ2VzdCIuCi0gICAqIEBwYXJhbSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGhlYWRlciBhIGhlYWRlciBuYW1lIGJlaW5nIHJldHJpZXZlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlciB0aGF0IHVzZXMgYXV0aGVudGljYXRpb24KLSAgICogc2NoZW1lIG90aGVyIHRoYW4gIkJhc2ljIiBvciAiRGlnZXN0IiBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZEF1dGgoU3RyaW5nIGhlYWRlcnMsIFN0cmluZyBoZWFkZXIpCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIGhlYWRlclZhbHVlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBoZWFkZXJWYWx1ZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsIjoiKQotICAgICAgICAuZ2V0KGhlYWRlci50b1VwcGVyQ2FzZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCi0gICAgLy8gSWYgdGhlIGhlYWRlciBpcyBwcmVzZW50ZWQKLSAgICBpZiAoaGVhZGVyVmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBSZXRyaWV2aW5nIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQotICAgICAgaW50IGlkeFNQID0gaGVhZGVyVmFsdWUuaW5kZXhPZigiICIpOwotICAgICAgaWYgKGlkeFNQID4gLTEpCi0gICAgICB7Ci0gICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWUuc3Vic3RyaW5nKDAsIGlkeFNQKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIGEgc2NoZW1lIGlzIG5laXRoZXIgIkJhc2ljIiBub3IgIkRpZ2VzdCIsIHJldHVybiB0cnVlCi0gICAgICBpZiAoIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9CQVNJQykKLSAgICAgICAgJiYgIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9ESUdFU1QpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQwY2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQlA0MTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGFuIEhUVFAgSGVhZGVyIGZpZWxkIHRoYXQgaXMgbm90IGZyb20gdGhlIGZvbGxvd2luZyBsaXN0IG9mIHNwZWNpZmllZCBoZWFkZXIgZmllbGRzOiAoaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWVzc2FnZSBjb250YWlucyBhbiBIVFRQIEhlYWRlciBmaWVsZCB0aGF0IGlzIG5vdCBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBzcGVjaWZpZWQgaGVhZGVyIGZpZWxkczogKGh0dHA6Ly93d3cubW5vdC5uZXQvZHJhZnRzL2RyYWZ0LW5vdHRpbmdoYW0taHR0cC1oZWFkZXItcmVnLTAwLnR4dCk8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgcHJpdmF0ZSBMaXN0IGtub3duSGVhZGVyTmFtZXM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICAgIGtub3duSGVhZGVyTmFtZXMgPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgaWYgKGtub3duSGVhZGVyTmFtZXMgPT0gbnVsbCkgewotICAgICAga25vd25IZWFkZXJOYW1lcyA9IEhUVFBDb25zdGFudHMuZ2V0QWxsS25vd25IZWFkZXJOYW1lcygpOwotICAgIH0KLSAgICByZXR1cm4ga25vd25IZWFkZXJOYW1lczsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIEhUVFAgSGVhZGVycwotICAgIE1hcCBobWFwID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgIjoiKTsKLQotICAgIEl0ZXJhdG9yIGkgPSBobWFwLmtleVNldCgpLml0ZXJhdG9yKCkgOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIC8vIElmIGhlYWRlciBuYW1lIGlzIG5vdCBrbm93biwgdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKCFnZXRBbGxLbm93bkhlYWRlck5hbWVzKCkuY29udGFpbnMoaGVhZGVyTmFtZS50b1VwcGVyQ2FzZSgpKSkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBIVFRQIGhlYWRlciB0aGF0IGlzIG5vdCBmcm9tIGEgbGlzdCwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwM2QzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA1Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGEgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCB3aXRoIGEgdmFsdWUgb3RoZXIgdGhhbiAiZ3ppcCIsICJjb21wcmVzcyIgb3IgImRlZmxhdGUiPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuICJnemlwIiwgImNvbXByZXNzIiBvciAiZGVmbGF0ZSIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIC8vIEFsbCB0aGUgcmVnaXN0ZXJlZCBjb250ZW50LWNvZGluZyB2YWx1ZSB0b2tlbnMgKFJGQzI2MTYpIGV4Y2VwdCAiaWRlbnRpdHkiCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHWklQX1ZBTFVFID0gImd6aXAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUFJFU1NfVkFMVUUgPSAiY29tcHJlc3MiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGTEFURV9WQUxVRSA9ICJkZWZsYXRlIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB0aGUgQ29udGVudC1FbmNvZGluZyBIVFRQIGhlYWRlciB2YWx1ZQotICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpKTsKLQotICAgIGlmIChjb250ZW50RW5jb2RpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBMb3dlcmluZyB2YWx1ZSdzIGNhc2UgYmVjYXVzZSBSRkMyNjE2IHNheXMKLSAgICAgIC8vIHRoYXQgYWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgIC8vIE11bHRpcGxlIGVuY29kaW5ncyBjYW4gYmUgYXBwbGllZCB0byBhbiBlbnRpdHksCi0gICAgICAvLyBzbyBicmVha2luZyB0aGUgdmFsdWUgaW50byB0b2tlbnMKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29udGVudEVuY29kaW5nLCAiLCIpOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRva2VuID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgICAvLyBJZiBhIHRva2VuIGRvZXMgbm90IGVxdWFsIHRvIGFueSByZWdpc3RlcmVkIG9uZQotICAgICAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICAgIGlmICggIXRva2VuLmVxdWFscyhHWklQX1ZBTFVFKQotICAgICAgICAgICYmICF0b2tlbi5lcXVhbHMoQ09NUFJFU1NfVkFMVUUpCi0gICAgICAgICAgJiYgIXRva2VuLmVxdWFscyhERUZMQVRFX1ZBTFVFKSkgewotCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB1bnJlZ2lzdGVyZWQgdmFsdWUgb2YgQ29udGVudC1FbmNvZGluZywKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ODYzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIEJQNDEwNgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJlc3BvbnNlIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29udGFpbmVkIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkIGhhcyBhIHZhbHVlIG9mICJjaHVua2VkIjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9WQUxVRSA9ICJjaHVua2VkIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyBhIFRyYW5zZmVyLUVuY29kaW5nIEhUVFAgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIHRyYW5zZmVyRW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSk7Ci0KLSAgICBpZiAodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIExvd2VyaW5nIHZhbHVlJ3MgY2FzZSBiZWNhdXNlIFJGQzI2MTYgc2F5cwotICAgICAgLy8gdGhhdCBhbGwgdHJhbnNmZXItY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgdHJhbnNmZXJFbmNvZGluZyA9IHRyYW5zZmVyRW5jb2RpbmcudG9Mb3dlckNhc2UoKTsKLQotICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG90aGVyIHRoYW4gImNodW5rZWQiLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoIXRyYW5zZmVyRW5jb2RpbmcuZXF1YWxzKENIVU5LRURfVkFMVUUpKSB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldERldGFpbERlc2NyaXB0aW9uKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gVHJhbmZlci1FbmNvZGluZyBvciBpdHMgdmFsdWUgaXMgImNodW5rZWQiLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjk5YTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA3Ci0gKiA8Y29udGV4dD5Gb3IgYSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbmluZyBhbiBVcGdyYWRlIGZpZWxkIGluIHRoZSBIVFRQIEhlYWRlcnMuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbnMgYW4gVXBncmFkZSBmaWVsZCBpbiB0aGUgSFRUUCBIZWFkZXJzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA3KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgdGhlIFVwZ3JhZGUgSFRUUCBoZWFkZXIgdmFsdWUKLSAgICBTdHJpbmcgdXBncmFnZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9VUEdSQURFLnRvVXBwZXJDYXNlKCkpOyAKLQotICAgIC8vIElmIHRoZSBoZWFkZXIgaXMgcHJlc2VudGVkLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKHVwZ3JhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gZWxzZSB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL01lc3NhZ2VWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhZjBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgaW1wbGVtZW50cyBNZXNzYWdlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfTUVTU0FHRTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX1JFUVVFU1QsCi0gICAgICAgICAgICAgIFRZUEVfTUVTU0FHRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX0FOWSwKLSAgICAgICAgICAgICAgVFlQRV9NSU1FX1BBUlQsCi0gICAgICAgICAgICAgIFRZUEVfTUlNRV9ST09UX1BBUlQKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9BTlkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgICB8fCAodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkpKQotICAgICAgfHwgdGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUlNRV9ST09UX1BBUlQpCi0gICAgICB8fCB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9NSU1FX1BBUlQpKQotICAgIHsKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDEwMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjFlYWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIFNTQlAxMDAzLgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUsIHdoaWNoIGhhcyBhIG5vbi1lbXB0eSBlbnRpdHktYm9keTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqICBUaGUgbG9nZ2VkIFNPQVAgZW52ZWxvcGUgaXMgYSBVVEYtOCB0cmFuc2NyaXB0IG9mIGFuIGVudmVsb3BlIG9yaWdpbmFsbHkgZW5jb2RlZCBhcyBVVEYtOCBvciBVVEYtMTYuIAotICogIFRoZSBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIncyBjaGFyc2V0IHZhbHVlIGlzIGVpdGhlciBVVEYtOCBvciBVVEYtMTYuIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IAotICogIGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gKiAgICAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgyKSBpdCBoYXMgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgzKSB0aGVyZSBpcyBubyBCT00gYXR0cmlidXRlIGFuZCBubyBYTUwgZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyBVVEYtOC4KLSAqIDwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKgotICogQGF1dGhvciBsYXV6b25kCi0gKi8gCi1wdWJsaWMgY2xhc3MgU1NCUDEwMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFNTQlAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzcG9uc2UgbWVzc2FnZSBmb3Igb25lLXdheSBvcGVyYXRpb24sIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh2YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICBNYXAgaHR0cEhlYWRlck1hcCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXIsICI6Iik7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBodHRwSGVhZGVyTWFwLmdldCgiQ29udGVudC1UeXBlIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgQ29udGVudC1UeXBlIGhlYWRlciBpcyBub3QgcHJlc2VudC4iKTsKLSAgICAgIH0KLQotICAgICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS50cmltKCk7Ci0gICAgICBTdHJpbmcgY2hhcnNldCA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZygKLSAgICAgICAgY29udGVudFR5cGUuaW5kZXhPZigiOyIpICsgMSwgY29udGVudFR5cGUubGVuZ3RoKCkpOwotICAgICAgY2hhcnNldCA9IGNoYXJzZXQudHJpbSgpOwotICAgICAgaWYgKCFjaGFyc2V0LnN0YXJ0c1dpdGgoImNoYXJzZXQiKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgIk1pc3Npbmcgb3IgYmFkIFwiY2hhcnNldFwiIGF0dHJpYnV0ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlcjogIgotICAgICAgICAgICsgY2hhcnNldCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBjaGFyc2V0VmFsdWUgPSBjaGFyc2V0LnN1YnN0cmluZygKLSAgICAgICAgY2hhcnNldC5pbmRleE9mKCI9IikgKyAxLCBjaGFyc2V0Lmxlbmd0aCgpKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuc3RhcnRzV2l0aCgiXCIiKSkKLSAgICAgIHsKLSAgICAgICAgY2hhcnNldFZhbHVlID0gY2hhcnNldFZhbHVlLnN1YnN0cmluZygxLCBjaGFyc2V0VmFsdWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTgiKQotICAgICAgICAgICYmICFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgdmFsdWUgb2YgdGhlIFwiY2hhcnNldFwiICIKLSAgICAgICAgICArICJhdHRyaWJ1dGUgb2YgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgIiArIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLSAgICAgIC8vIFBhcnNlIGxvZyBtZXNzYWdlCi0gICAgICAvL2dldHMgZmlyc3Qgc3RyaW5nCi0gICAgICBpbnQgaWR4ID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKS5pbmRleE9mKCI8P3htbCIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeDIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmluZGV4T2YoIj8+Iik7Ci0gICAgICBpZiAoaWR4MiA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbERlY2xhcmF0aW9uID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKQotICAgICAgICAuc3Vic3RyaW5nKGlkeCwgaWR4MiArICI/PiIubGVuZ3RoKCkpOwotCi0gICAgICBpZHggPSB4bWxEZWNsYXJhdGlvbi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzZXRWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBYTUwgZGVjbGFyYXRpb24gYW5kIHRoZSIKLSAgICAgICAgICAgICsgIiBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBVVEYtOC4iCi0gICAgICAgICAgICArICJcbkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGludCBpZHhRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCcnLCBpZHgpOwotICAgICAgaW50IGlkeFFRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCInLCBpZHgpOwotICAgICAgaW50IGlkeFF1b3RlID0gLTE7Ci0gICAgICBjaGFyIHFvdXRlQ2ggPSAnXDAnOwotICAgICAgaWYgKGlkeFEgPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeFF1b3RlID0gaWR4UVE7Ci0gICAgICAgIHFvdXRlQ2ggPSAnXCInOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoaWR4UVEgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgcW91dGVDaCA9ICdcJyc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGlkeFFRIDwgaWR4USkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFFROwotICAgICAgICAgICAgcW91dGVDaCA9ICdcIic7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgICBxb3V0ZUNoID0gJ1wnJzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGlkeFF1b3RlID09IC0xIHx8IHFvdXRlQ2ggPT0gJ1wwJykKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeExRb3V0ZSA9IHhtbERlY2xhcmF0aW9uLmluZGV4T2YocW91dGVDaCwgaWR4UXVvdGUgKyAxKTsKLQotICAgICAgaWYgKGlkeExRb3V0ZSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0KLSAgICAgICAgeG1sRGVjbGFyYXRpb24uc3Vic3RyaW5nKGlkeFF1b3RlICsgMSwgaWR4TFFvdXRlKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSh4bWxFbmNvZGluZykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgQk9NLCB0aGVuIGNoZWNrIHRoYXQgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIHhtbEVuY29kaW5nCi0gICAgICAgIGludCBib20gPSAwOwotICAgICAgICBpZiAoKGJvbSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRCT00oKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2Ci0gICAgICAgICAgICAgICYmICF4bWxFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtMTYiKSkpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2X0JJR19FTkRJQU4KLSAgICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi0xNiIpKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgQk9NIGFuZCBYTUwgZGVjbGFyYXRpb24gZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBhbiBYTUwgZGVjbGFyYXRpb24sIGJ1dCBpdHMgIgotICAgICAgICAgICsgImVuY29kaW5nIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBjaGFyc2V0IHZhbHVlLlxuIgotICAgICAgICAgICsgIkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUKLSAgICAgICAgICArICJcbkVuY29kaW5nIGluIHRoZSBYTUwgZGVjbGFyYXRpb246ICIgKyB4bWxFbmNvZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMTUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBTU0JQNTEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aXRoIGFuIEhUVFAgZW50aXR5LWJvZHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBTT0FQIGVudmVsb3BlIGlzIHRoZSBleGNsdXNpdmUgcGF5bG9hZCBvZiB0aGUgSFRUUCBlbnRpdHktYm9keS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDUxMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcm90ZWN0ZWQgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgeyAKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQkgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAllbHNlCQotICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhZTUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogU1NCUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZS48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIG11c3QgaGF2ZSBhICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkLiAgVGhlICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkIG11c3QgaGF2ZSBhIGZpZWxkLXZhbHVlIHdob3NlIG1lZGlhIHR5cGUgaXMgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIFNTQlA1MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgU1NCUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBpZiBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50ZWQKLSAgICAvLyBvciBkb2VzIG5vdCBlcXVhbCB0byB0ZXh0L3htbCwgdGhlbiB0aGUgYXNzZXJ0aW9uIGlzIGZhaWxlZAotICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsCi0gICAgICB8fCAhY29udGVudFR5cGUuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlTWVzc2FnZSgpLAotICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzA2NmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMSBleHRlbmRzIEJQMTAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQzMDhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMiBleHRlbmRzIEJQMTAwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA0MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMyBleHRlbmRzIFNTQlAxMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmFkODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA0IGV4dGVuZHMgQlAxMDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWMwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDU7Ci0KLS8qKgotICogV1NJMTAwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNSBleHRlbmRzIEJQMTAwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmQ2Zjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNiBleHRlbmRzIEJQMTAwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg1YWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDA3OwotCi0vKioKLSAqIFdTSTEwMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMDcgZXh0ZW5kcyBCUDEwMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjZDBlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAwODsKLQotLyoqCi0gKiBXU0kxMDA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA4IGV4dGVuZHMgQlAxMDA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNjhlYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDk7Ci0KLS8qKgotICogV1NJMTAwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwOSBleHRlbmRzIEJQMTAwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJkOTg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAxMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMCBleHRlbmRzIEJQMTAxMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRjZGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDExOwotCi0vKioKLSAqIFdTSTEwMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMTEgZXh0ZW5kcyBCUDEwMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNTcxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAxMjsKLQotLyoqCi0gKiBXU0kxMDEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDEyIGV4dGVuZHMgQlAxMDEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4N2U1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMTM7Ci0KLS8qKgotICogV1NJMTAxMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMyBleHRlbmRzIEJQMTAxMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAzMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2QzOTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDMxOwotCi0vKioKLSAqIFdTSTEwMzEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMzEgZXh0ZW5kcyBCUDEwMzEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAzMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyMGEwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTEwMDsKLQotLyoqCi0gKiBXU0kxMTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAwIGV4dGVuZHMgQlAxMTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjExM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAxIGV4dGVuZHMgQlAxMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzgzMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IdHRwSGVhZGVyc1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBiZSBpbnZhbGlkIChIVFRQIHJlcXVlc3QgbWFsZm9ybWVkLCAKLSAqIFhNTCBub3Qgd2VsbCBmb3JtZWQsIC4uLikuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgU3RyaW5nIHJlcXVlc3RNZXNzYWdlID0gbnVsbDsKLSAgICAvL1N0cmluZyByZXNwb25zZU1lc3NhZ2UgPSBudWxsOwotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG51bGw7Ci0gICAgcmVzdWx0ID0gbnVsbDsKLSAgICAvLwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgICBVdGlscy5nZXRIVFRQU3RhdHVzQ29kZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICBpZiAoIjQwMCIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgICAgewotCi0gICAgICAgIHJlcXVlc3RNZXNzYWdlID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgU3RyaW5nIHJlcXVlc3RIVFRQSGVhZGVycyA9Ci0gICAgICAgICAgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICAgIC8vY2hlY2sgcmVxdWVzdCBIVFRQIEhlYWRlcnMKLQotICAgICAgICAvL0h0dHBIZWFkZXJzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIdHRwSGVhZGVyc1ZhbGlkYXRvcigpOwotCi0gICAgICAgIGlmICghSHR0cEhlYWRlcnNWYWxpZGF0b3IKLSAgICAgICAgICAudmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMocmVxdWVzdEhUVFBIZWFkZXJzKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9jaGVjayByZXF1ZXN0IHhtbCBtZXNzYWdlCi0KLSAgICAgICAgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyLCAiOiIpCi0gICAgICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9URVhUX1hNTCkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgICBidWlsZGVyLnBhcnNlKAotICAgICAgICAgICAgICAgIG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBXU0lFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICAgICArICJcblxuUmVzcG9uc2UgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdzaWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NjUyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDMgZXh0ZW5kcyBCUDExMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyZTQ2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiBhIGNvbnRlbnQtdHlwZSBvZiAidGV4dC94bWwiLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwNCBleHRlbmRzIEJQMTEwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMWEzYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuU2V0Q29va2llMlZhbGlkYXRvcjsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSBDb29raWVzIHNob3VsZCBjb25mb3JtIHRvIFJGQzI5NjUuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU2V0Q29va2llMlZhbGlkYXRvciBjb29raWVWYWwgPSBuZXcgU2V0Q29va2llMlZhbGlkYXRvcigpOwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpCi0gICAgewotICAgICAgLy8gaWYgcmVzcG9uc2UgdHJvbSBzZXJ2ZXIKLSAgICAgIFN0cmluZyBzZXRDb29raWUyID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNldC1Db29raWUyIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIGlmIChzZXRDb29raWUyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChjb29raWVWYWwuaXNTZXRDb29raWUyKHNldENvb2tpZTIudHJpbSgpKSkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgIlxuTWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gaWYgcmVxdWVzdCB0byB0aGUgc2VydmVyCi0gICAgICBTdHJpbmcgY29va2llID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIkNvb2tpZSIpOwotICAgICAgaWYgKGNvb2tpZSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY29va2llVmFsLmlzQ29va2llKGNvb2tpZS50cmltKCkpKQotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiXG5TT0FQIG1lc3NhZ2U6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkxM2U1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMTA3OwotCi0vKioKLSAqIFdTSTExMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDcgZXh0ZW5kcyBCUDExMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIEVhY2ggc29hcGJpbmQgZXh0ZW5zaW9uIGVsZW1lbnQgd2l0aCBhIHdzZGw6cmVxdWlyZWQgCi0gKiBhdHRyaWJ1dGUgb2YgZmFsc2UgbXVzdCBhcHBlYXIgaW4gYSBtZXNzYWdlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0gbnVsbDsKLSAgcHJpdmF0ZSBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0ID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25TaWduYXR1cmUgcmVzcG9uc2VTaWcgPSBudWxsOwotICBwcml2YXRlIFZlY3RvciBoZWFkZXJSYXJ0cyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gaXNSZXF1ZXN0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQQm9keSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgLy8gaWYgIndzZGw6cmVxdWlyZWQiIGlzIHRydWUgdGhlbiByZXR1cm4KLSAgICBpZiAoYm9keS5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGJvZHkuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKSA9PSB0cnVlKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgaWYgKGJvcC5nZXRPcGVyYXRpb24oKSA9PSBudWxsCi0gICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgPT0gbnVsbAotICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE1lc3NhZ2UgbXNnID0gYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICBMaXN0IHBhcnRzID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnRzKAotICAgICAgICBib3AuZ2V0T3BlcmF0aW9uKCksCi0gICAgICAgIG1zZywKLSAgICAgICAgYm9keSwKLSAgICAgICAgbWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSk7Ci0KLSAgICBRTmFtZSBhZGRpdGlvbmFsTmFtZSA9IG51bGw7Ci0gICAgLy8gaWYgb3BlcmF0aW9uIGlzIHJwYywgYWRkIHRvIHBhcnRzIHFuYW1lIHFpdGggZnVuY3Rpb24gbmFtZQotICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgewotICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBib2R5LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsIHx8IG5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgLy8gbmFtZXNwYWNlIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSBzZXJ2aWNlIHRhcmdldCBuYW1lYXBjZSAgICAgICAgICAgIAotICAgICAgICBuYW1lc3BhY2UgPSBjdHguZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgYWRkaXRpb25hbE5hbWUgPQotICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgbmFtZXNwYWNlLAotICAgICAgICAgIGJvcAotICAgICAgICAgICAgLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgICAuZ2V0T3V0cHV0KCkKLSAgICAgICAgICAgIC5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgIC5nZXRRTmFtZSgpCi0gICAgICAgICAgICAuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLQotICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlIG9wID0KLSAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgIHBhcnRzLAotICAgICAgICBudWxsLAotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICB2YWxpZGF0b3IpLAotICAgICAgICBmYWxzZSk7Ci0gICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhyZXNwb25zZVNpZy5nZXRTaWduYXR1cmUoKSkpCi0gICAgewotICAgICAgLy8gICAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgICBvcCA9Ci0gICAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgICAgcGFydHMsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKSwKLSAgICAgICAgICB0cnVlKTsKLQotICAgICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICAgIG9wLmdldFNpZ25hdHVyZSgpLmFkZCgwLCBhZGRpdGlvbmFsTmFtZSk7Ci0gICAgICBpZiAob3AuZ2V0U2lnbmF0dXJlKCkuZXF1YWxzKHJlc3BvbnNlU2lnLmdldFNpZ25hdHVyZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gICAgICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgaWYgKGV4aXN0U09BUEhlYWRlckZhdWx0ID09IGZhbHNlKQotICAgIHsKLSAgICAgIGV4aXN0U09BUEhlYWRlciA9IGZhbHNlOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGlmICJ3c2RsOnJlcXVpcmVkIiBpcyB0cnVlIHRoZW4gcmV0dXJuCi0gICAgaWYgKGhlYWRlci5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGhlYWRlci5nZXRSZXF1aXJlZCgpLmJvb2xlYW5WYWx1ZSgpID09IHRydWUpCi0gICAgICByZXR1cm47Ci0gICAgLy8gZmluZCBoZWFkciBwYXJ0Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPSAoVHlwZXNSZWdpc3RyeSkgY3R4LmdldFBhcmFtZXRlcigiVHlwZXNSZWdpc3RyeSIpOwotICAgIFBhcnQgbWVzUGFydCA9Ci0gICAgICBXU0RMVXRpbC5nZXRQYXJ0KGQuZ2V0TWVzc2FnZShoZWFkZXIuZ2V0TWVzc2FnZSgpKSwgaGVhZGVyLmdldFBhcnQoKSk7Ci0KLSAgICAvLyB0ZXN0IHRoaXMgcGFydCBhbmQgcGFydHMgZnJvbSBoZWFkZXIgICAgICAgIAotICAgIFFOYW1lIHBhcnRRTmFtZSA9IG1lc1BhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICBwYXJ0UU5hbWUgPSB0UmVnLmdldFR5cGUobWVzUGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiUGFydCB0eXBlIGNhbiBub3QgYmUgbnVsbC4iICsgbWVzUGFydC5nZXRFbGVtZW50TmFtZSgpLnRvU3RyaW5nKCkpOwotICAgIFN0cmluZyBsb2NhbCA9IHBhcnRRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICBTdHJpbmcgbnMgPSBwYXJ0UU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICBleGlzdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlclJhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbSA9IChFbGVtZW50KSBoZWFkZXJSYXJ0cy5nZXQoaSk7Ci0gICAgICBpZiAoZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWwpCi0gICAgICAgICYmIE51bGxVdGlsLmVxdWFscyhucywgZWxlbS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGV4aXN0U09BUEhlYWRlciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsU09BUEhlYWRlclByb2Nlc3NpbmcoKTsKLSAgICBpZiAoaXNSZXF1ZXN0ID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlICYmIGlzUmVxdWVzdCA9PSBmYWxzZSkKLSAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgaGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBmaW5kIGhlYWRyIHBhcnQKLSAgICBEZWZpbml0aW9uIGQgPSAoRGVmaW5pdGlvbikgY3R4LmdldFBhcmFtZXRlcigiZGVmaW5pdGlvbiIpOwotICAgIFR5cGVzUmVnaXN0cnkgdFJlZyA9IChUeXBlc1JlZ2lzdHJ5KSBjdHguZ2V0UGFyYW1ldGVyKCJUeXBlc1JlZ2lzdHJ5Iik7Ci0gICAgUGFydCBtZXNQYXJ0ID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnQoCi0gICAgICAgIGQuZ2V0TWVzc2FnZShoZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCkpLAotICAgICAgICBoZWFkZXJGYXVsdC5nZXRQYXJ0KCkpOwotCi0gICAgLy8gdGVzdCB0aGlzIHBhcnQgYW5kIHBhcnRzIGZyb20gaGVhZGVyZmF1bHQKLSAgICBRTmFtZSBwYXJ0UU5hbWUgPSBtZXNQYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgcGFydFFOYW1lID0gdFJlZy5nZXRUeXBlKG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKSk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIiArIG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKS50b1N0cmluZygpKTsKLSAgICBTdHJpbmcgbG9jYWwgPSBwYXJ0UU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIG5zID0gcGFydFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJSYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW0gPSAoRWxlbWVudCkgaGVhZGVyUmFydHMuZ2V0KGkpOwotICAgICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGxvY2FsKQotICAgICAgICAmJiBOdWxsVXRpbC5lcXVhbHMobnMsIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyRmF1bHQgPT0gdHJ1ZSkKLSAgICAgIGN0eC5jYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBzZXQgaW4gdHJ1ZSBpZiBhbnkgU09BUEZhdWx0IGV4aXN0Ci0gICAgdmlzaXRGYXVsdCA9IHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMuZW50cnlDb250ZXh0ID0gZW50cnlDb250ZXh0OwotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICAvLyBpZiBzdWNoIG9wZXJhdGlvbiBleGlzdCAgICAgIAotICAgICAgaWYgKG1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlzUmVxdWVzdCA9Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVC5lcXVhbHMoCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICBpZiAoIWlzUmVxdWVzdCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2MpOwotICAgICAgICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgICAgICAgICByZXNwb25zZVNpZy5jcmVhdGVSUENTaWduYXR1cmUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBleHRyYWN0IGFsbCBoZWFkZXJzIGZyb20gbWVzc2FnZQotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPQotICAgICAgICAgIFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoCi0gICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUik7Ci0gICAgICAgIGhlYWRlclJhcnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoaGVhZGVyRWxlbSAhPSBudWxsKQotICAgICAgICAgIGhlYWRlclJhcnRzID0gWE1MVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cyhoZWFkZXJFbGVtKTsKLQotICAgICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlcih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpOwotCi0gICAgICAgIGlmIChpc1JlcXVlc3QpCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpOwotCi0gICAgICAgIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdGYXVsdCgpOwotCi0gICAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgICAgICAgTWFwIG0gPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIG0ucHV0KAotICAgICAgICAgICJkZWZpbml0aW9uIiwKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgVHlwZXNSZWdpc3RyeSB0UmVnID0KLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgICAgbS5wdXQoIlR5cGVzUmVnaXN0cnkiLCB0UmVnKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLQotICAgICAgICBpZiAoaXNSZXF1ZXN0ID09IGZhbHNlKQotICAgICAgICAgIGlmIChleGlzdFNPQVBIZWFkZXJGYXVsdCA9PSB0cnVlKQotICAgICAgICAgICAgZXhpc3RTT0FQSGVhZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAocmVzcG9uc2VTaWcgIT0gbnVsbAotICAgICAgICAgICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKQotICAgICAgICAgICYmIHZpc2l0RmF1bHQgPT0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuIiArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNDRjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIFdTSTExMDkuCi0gKiBBbnkgY29uZm9ybWFuY2UgY2xhaW1zIE1VU1QgYmUgY2hpbGRyZW4gb2YgdGhlIHNvYXA6SGVhZGVyIGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbCkKLSAgICAgICYmICghdGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAvLyBmaW5kICJIZWFkZXIiIGVsZW1lbnQKLSAgICAgICAgTm9kZUxpc3QgaGVhZGVyTGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkhlYWRlciIpOwotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPSBudWxsOwotICAgICAgICBpZiAoaGVhZGVyTGlzdCAhPSBudWxsICYmIGhlYWRlckxpc3QuZ2V0TGVuZ3RoKCkgIT0gMCkKLSAgICAgICAgICBoZWFkZXJFbGVtID0gKEVsZW1lbnQpIGhlYWRlckxpc3QuaXRlbSgwKTsKLQotICAgICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICAgIHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX0NMQUlNLCAiQ2xhaW0iKTsKLSAgICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtID09IG51bGwKLSAgICAgICAgICAgICAgfHwgY2xhaW1MaXN0Lml0ZW0oaSkuZ2V0UGFyZW50Tm9kZSgpICE9IGhlYWRlckVsZW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjNiOWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTEwLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIGFkaGVyZSB0byB0aGUgV1MtSSBjb25mb3JtYW5jZSAKLSAqIGNsYWltIHNjaGVtYSBkZWZpbmVkIGluIHRoZSBCYXNpYyBQcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMTAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpICE9IG51bGwKLSAgICAgICYmICF0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICYmIChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgTm9kZUxpc3QgY2xhaW1MaXN0ID0KLSAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGNsYWltTGlzdC5pdGVtKGkpOwotICAgICAgICAgIC8vIGNoZWNrICJjb25mb3Jtc1RvIiBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImNvbmZvcm1zVG8iKTsKLSAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogVGhpcyBpcyBjaGVja2VkIGluIFdTSTExMTEKLSAgICAgICAgICAvLyBjaGVjayAibXVzdFVuZGVyc3RhbmQiIGF0dHJpYnV0ZQotICAgICAgICAgIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gY3JlYXRlRmFpbHVyZURldGFpbCgiXG5TT0FQIG1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODRlM2ZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTExLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIE5PVCB1c2Ugc29hcDptdXN0VW5kZXJzdGFuZD0nMScuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTExMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbAotICAgICAgJiYgIXRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgJiYgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIGZpbmQgIkNsYWltIiBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9DTEFJTSwgIkNsYWltIik7Ci0gICAgICBpZiAoY2xhaW1MaXN0ICE9IG51bGwgJiYgY2xhaW1MaXN0LmdldExlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIGNvbnRhaW5zICJDbGFpbSIgZWxlbWVudCBmaW5kIGFsbCAiSGVhZGVyIiBlbGVtZW50cwotICAgICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0KLSAgICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0gICAgICAgIGlmIChoZWFkZXJMaXN0ICE9IG51bGwgJiYgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaUhlYWRlciA9IDA7IGlIZWFkZXIgPCBoZWFkZXJMaXN0LmdldExlbmd0aCgpOyBpSGVhZGVyKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmluZCBhbGwgIkhlYWRlciIgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICAgIE5vZGUgY2hpbGQgPSBoZWFkZXJMaXN0Lml0ZW0oaUhlYWRlcikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgY29udGFpbnMgIm11c3RVbmRlcnN0YW5kIiAtPiBmYWlsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJWYWwgPQotICAgICAgICAgICAgICAgICAgKChFbGVtZW50KSBjaGlsZCkuZ2V0QXR0cmlidXRlTlMoCi0gICAgICAgICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAgICAgICAgICAgIm11c3RVbmRlcnN0YW5kIik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJWYWwgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKGF0dHJWYWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICBpSGVhZGVyID0gaGVhZGVyTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5ZGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExNiBleHRlbmRzIEJQMTExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTE2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjNlYmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEyMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdUOiAtLSBzdGFydDogYmFzZSBvbiB3c2kxMDExIC0gc2hvdWxkIHJlZmFjdG9yIHRoaXMKLQotICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKTsKLQotICAgICAgLy8gZ2V0IHNvYXAgbWVzc2FnZSBjaGlsZCBuYW1lCi0gICAgICAvLyBHZXQgdGhlIERPTSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBzb2FwOmJvZHkgKGlmIG5vbi1lbXB0eSkKLSAgICAgIERvY3VtZW50IG1lc3NhZ2VEb2MgPSBudWxsOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9IG51bGw7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9Ci0gICAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIC8vIGdldCBzb2FwIG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotCi0gICAgICAgIC8vIE5PVEU6IGdldFNvYXBCb2R5Q2hpbGQoKSBtYXkgcmV0dXJuIG51bGwsIGlmIHRoZSBzb2FwOmJvZHkgZGlkIG5vdCBjb250YWluIGFueSBjaGlsZCBlbGVtZW50cwotICAgICAgICBFbGVtZW50IHNvYXBNZXNzYWdlRWxlbWVudCA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQobWVzc2FnZURvYyk7Ci0KLSAgICAgICAgLy8gZm9yIGRvYy1saXQuLi4gZmluZCB0aGUgd3NkbDpwYXJ0IGZyb20gb25lIG9mIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucyB0aGF0IGhhcyAKLSAgICAgICAgLy8gdGhlIHNvYXAgZWxlbWVudCB1c2VkIGluIHRoZSBtZXNzYWdlLiAgICAgIAotICAgICAgICAvLyB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0IHdpdGggYW4gZWxlbWVudCBhdHRyaWIgdmFsIG1hdGNoaW5nIHRoZSBzb2FwIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBpZiAoc29hcE1lc3NhZ2VFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9Ci0gICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoKG1lc3NhZ2VEb2MgPT0gbnVsbCkgfHwgdGhpcy52YWxpZGF0b3IuaXNGYXVsdChtZXNzYWdlRG9jKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZW1wdHkgbWVzc2FnZXMgYW5kIG1lc3NhZ2VzIGNvbnRhaW5pbmcgc29hcDpGYXVsdHMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICAgICAgYmluZGluZ3MpOwotICAgICAgLy8gbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbWF0Y2ggdGhlIDx3c2RsOmlucHV0PiBvciA8d3NkbDpvdXRwdXQ+IChkZXBlbmRpbmcgb24gZW50cnlUeXBlKQotICAgICAgLy8gZm9yIHBhcnQgZWxlbWVudD0iLi4uIgotICAgICAgLy8gKElTU1VFOiB3aGF0IGFib3V0IHBhcnQgdHlwZT0iLi4uIj8pCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICAvLyBHVDogLS0tIGVuZDogYmFzZSBvbiB3c2kxMDExCi0KLSAgICAgIC8vICAgICAgICAgICAgICAgCi0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCA9PSAwKQotICAgICAgewotICAgICAgICAvLyBub3QgZG9jLWxpdCBzbyBxdWl0Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgYSBkb2MtbGl0IG1hdGNoLCBzbyBub3cgdHJ5IHRvIHZhbGlkYXRlIHRoZSBzb2FwIG1lc3NhZ2UgYWdhaW5zdCB0aGUKLSAgICAgIC8vIHJlZmVyZW5jZWQgc2NoZW1hCi0KLSAgICAgIC8vIEdUIC0gaG93IHRvIHJlZmVyZW5jZSB0aGUgc2NoZW1hIGRvY3VtZW50Pz8gbmVlZCB0byB1c2UgdGhlIDx3c2RsOnBhcnQ+LCBvciBkbyBpdCBwdXJlbHkKLSAgICAgIC8vIGZyb20gdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50cz8KLSAgICAgIC8vIGllIGJvZHksIGVudmVsb3BlIG9yIHdzZGw/PwotCi0gICAgICAvLyA8ZXhwZXJpbWVudD4KLQotICAgICAgYm9vbGVhbiBpc1NjaGVtYVZhbGlkOwotICAgICAgCi0gICAgICB0cnkgewotICAgICAgCQlpc1NjaGVtYVZhbGlkID0gdGhpcy52YWxpZGF0b3IubWVzc2FnZUlzRG9jTGl0U2NoZW1hVmFsaWQoZW50cnlDb250ZXh0KTsgICAgICAgICAKLSAgICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgIAkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIAl9Ci0gICAgICAvLyA8L2V4cGVyaW1lbnQ+Ci0gICAgICAKLQotICAgICAgLy9pc1NjaGVtYVZhbGlkID0gdHJ1ZTsgLy8gZm9yIG5vdywgZ2V0dGluZyB0aGlzIGZhciBkb2VzIGl0Ci0KLSAgICAgIGlmIChpc1NjaGVtYVZhbGlkKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNmYwODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDE7Ci0KLS8qKgotICogV1NJMTIwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwMSBleHRlbmRzIEJQMTIwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTMxY2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjAyOwotCi0vKioKLSAqIFdTSTEyMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDIgZXh0ZW5kcyBCUDEyMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzYmNiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIwMzsKLQotLyoqCi0gKiBXU0kxMjAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjAzIGV4dGVuZHMgQlAxMjAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGRhNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDQ7Ci0KLS8qKgotICogV1NJMTIwNAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwNCBleHRlbmRzIEJQMTIwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk0OTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjA4OwotCi0vKioKLSAqIFdTSTEyMDgKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDggZXh0ZW5kcyBCUDEyMDgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIxMTsKLQotLyoqCi0gKiBXU0kxMjExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjExIGV4dGVuZHMgQlAxMjExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMTEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGViODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDE7Ci0KLS8qKgotICogV1NJMTMwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwMSBleHRlbmRzIEJQMTMwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTk3NmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzAyOwotCi0vKioKLSAqIFdTSTEzMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDIgZXh0ZW5kcyBCUDEzMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyZTEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwNTsKLQotLyoqCi0gKiBXU0kxMzA1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA1IGV4dGVuZHMgQlAxMzA1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MTA2MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDY7Ci0KLS8qKgotICogV1NJMTMwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwNiBleHRlbmRzIEJQMTMwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwNWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzA3OwotCi0vKioKLSAqIFdTSTEzMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDcgZXh0ZW5kcyBCUDEzMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyNzFjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwODsKLQotLyoqCi0gKiBXU0kxMzA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA4IGV4dGVuZHMgQlAxMzA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjQzNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDk7Ci0KLS8qKgotICogV1NJMTMwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwOSBleHRlbmRzIEJQMTMwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk4ZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSByZXNwb25zZSAoU09BUCBlbnZlbG9wZSkgc2hvdWxkIGJlIGNhcnJpZWQgYnkgYW4gSFRUUCAKLSAqIHJlc3BvbnNlLCBvdmVyIHNhbWUgSFRUUCBjb25uZWN0aW9uIGFzIHRoZSBSZXF1ZXN0LiAKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBib29sZWFuIGlzT25lV2F5UmVzcG9uc2UgPSB0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCk7Ci0KLSAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IG51bGw7Ci0gICAgaWYgKCFpc09uZVdheVJlc3BvbnNlKQotICAgICAgZG9jUmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2VEb2N1bWVudCgpOwotCi0gICAgLy9pZiBmYXVsdAotICAgIGlmICghaXNPbmVXYXlSZXNwb25zZSAmJiB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvY1Jlc3BvbnNlKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgLy8gbm90IGZhdWx0Ci0gICAgICAvLyAxLiBnZXQgYW4gb3BlcmF0aW9uIGZyb20gcmVxdWVzdAotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvY1JlcXVlc3QsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotCi0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotCi0gICAgICAgICAgLy8gICAgQ2hlY2sgd2hldGhlciB0aGUgdHJhbnNwb3J0IGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlIAotICAgICAgICAgIC8vICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi4gCi0gICAgICAgICAgTGlzdCBleHRFbGVtID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGluZGV4ID0gZXh0RWxlbS5pdGVyYXRvcigpOyBpbmRleC5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gKE9iamVjdCkgaW5kZXgubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG87Ci0gICAgICAgICAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgICAgICAgICAgLk5TX1VSSV9TT0FQX0hUVFAKLSAgICAgICAgICAgICAgICAuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vZmluZCBvcGVyYXRpb24gaW4gcG9ydCB0eXBlCi0gICAgICAgICAgb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaXNPbmVXYXlSZXNwb25zZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpID09IG51bGwpCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gICAgY2hlY2sgd2hldGhlciB0aGUgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBsb2cgCi0gICAgICAgICAgLy8gIGNvbnRhaW5zIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgICBkb2NSZXNwb25zZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW55IHNvYXAgQm9keSBlbGVtZW50cwotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChuZXh0Qm9keUVsZW0pOwotICAgICAgICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBvcGVyYXRpb24gb3V0cHV0IGhhcyBtZXNzYWdlIGZyb20gU09BUCByZXNwb25zZQotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgICBRTmFtZSBzb2FwTWVzc2FnZVFOYW1lID0KLSAgICAgICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICAgICAgICAgICAmJiBzb2FwTWVzc2FnZVFOYW1lLmVxdWFscyhtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudCA9Ci0gICAgICAgICAgICAgICAgWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQzMTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzE2OwotCi0vKioKLSAqIFdTSTEzMTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTYgZXh0ZW5kcyBCUDEzMTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMxNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzY2Q5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMxODsKLQotLyoqCi0gKiBXU0kxMzE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzE4IGV4dGVuZHMgQlAxMzE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMTgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTIwZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDE2MDE7Ci0KLS8qKgotICogV1NJMTYwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTdiZWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxNzAxOwotCi0vKioKLSAqIFdTSTE3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTE3MDEgZXh0ZW5kcyBCUDE3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjMWExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQNDEwMDsKLQotLyoqCi0gKiBXU0k0MTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MTAwIGV4dGVuZHMgQlA0MTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTQxMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDE2NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDQxMDE7Ci0KLS8qKgotICogV1NJNDEwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJNDEwMSBleHRlbmRzIEJQNDEwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0k0MTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVmZmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlA0MTAyOwotCi0vKioKLSAqIFdTSTQxMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDIgZXh0ZW5kcyBCUDQxMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2MWQwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDMgZXh0ZW5kcyBCUDQxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNzZkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDQKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDQgZXh0ZW5kcyBCUDQxMDQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmZjhkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDUKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDUgZXh0ZW5kcyBCUDQxMDUKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhNDRhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDYKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDYgZXh0ZW5kcyBCUDQxMDYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkNTI0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDcgZXh0ZW5kcyBCUDQxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjAzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdEb2M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi0KLS8qKgotICogQlAzMDAxIC0gVGhlIHRNb2RlbCBlbGVtZW50IHVzZXMgV1NETCBhcyB0aGUgZGVzY3JpcHRpb24gbGFuZ3VhZ2U6Ci0gKiB0aGUgdWRkaTpvdmVydmlld0RvYy91ZGRpOm92ZXJ2aWV3VVJMIGVsZW1lbnQgY29udGFpbnMgYSByZWZlcmVuY2UKLSAqIHRvIGEgV1NETCBkZWZpbml0aW9uLCB3aGljaCB1c2VzIGEgbmFtZXNwYWNlCi0gKiBvZiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAqIFRoZSB1ZGRpOm92ZXJ2aWV3VVJMIG1heSB1c2UgdGhlIGZyYWdtZW50IG5vdGF0aW9uIHRvIHJlc29sdmUKLSAqIHRvIGEgd3NkbDpiaW5kaW5nLgotICovCi1wdWJsaWMgY2xhc3MgQlAzMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFVERElWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcmVzdWx0IHZhcmlhYmxlIHRvIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEIHZhbHVlIGFuZAotICAgKiBwbGFjZXMgYSB0TW9kZWwga2V5IGluIHRoZSBmYXVsdCBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIHRNb2RlbEtleQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEZhdWx0TWVzc2FnZShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiICsgdE1vZGVsS2V5ICsgIl0uIjsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB0TW9kZWwgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBJZiB0aGUgdE1vZGVsIGRvZXMgbm90IGV4aXN0LCB0aGVuIGZhaWwKLSAgICBpZiAodE1vZGVsID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICJDb3VsZCBub3QgbG9jYXRlIGEgdE1vZGVsLiI7Ci0gICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgcmVzdWx0LAotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGtleSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLQotICAgIE92ZXJ2aWV3RG9jIGRvYyA9IHRNb2RlbC5nZXRPdmVydmlld0RvYygpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXJsVGV4dCA9IGRvYy5nZXRPdmVydmlld1VSTFN0cmluZygpOwotCi0gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgVVJMICYgY2hlY2sgdGhlIFdTREwKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh1cmxUZXh0KTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7Ci0gICAgICAgIE1hcCBuYW1lc3BhY2VzID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGlmICghbmFtZXNwYWNlcy5jb250YWluc1ZhbHVlKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1cmxUZXh0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICAgIGJpbmRpbmcgPSBVRERJVXRpbHMuZ2V0QmluZGluZyh1cmxUZXh0LCB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIFNlZSBpZiB0aGUgYmluZGluZyBpcyBpbiB0aGUgV1NETCBkb2N1bWVudAotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsCi0gICAgICAgICAgfHwgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmcuZ2V0UU5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHVybFRleHQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdXJsVGV4dCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1cmxUZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmcmFnbWVudElEID0gbnVsbDsKLSAgICAgICAgaW50IGluZGV4ID0gdXJsVGV4dC5pbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgZnJhZ21lbnRJRCA9IHVybFRleHQuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGZyYWdtZW50SUQgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoZnJhZ21lbnRJRC5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgICYmIChmcmFnbWVudElELnRvVXBwZXJDYXNlKCkuaW5kZXhPZigieHBvaW50ZXIoIi50b1VwcGVyQ2FzZSgpKSA9PSAtMQotICAgICAgICAgICAgfHwgZnJhZ21lbnRJRC5sYXN0SW5kZXhPZigiKSIpICE9IGZyYWdtZW50SUQubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2V0RmF1bHRNZXNzYWdlKGtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MmNkZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLQotCi0vKioKLSAqIEJQMzAwMiAtIFRoZSB1ZGRpOmJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50IGNvbnRhaW5zIGEgdWRkaTphY2Nlc3NQb2ludCBlbGVtZW50LAotICogd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbiA9IG51bGw7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZ1RlbXBsYXRlIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPQotICAgICAgKEJpbmRpbmdUZW1wbGF0ZSkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSBiaW5kaW5nVGVtcGxhdGUgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NQb2ludCwgdGhlbiBmYWlsCi0gICAgaWYgKChiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKSA9PSBudWxsKQotICAgICAgfHwgKChzZXJ2aWNlTG9jYXRpb24gPSBiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKS5nZXRUZXh0KCkpCi0gICAgICAgID09IG51bGwpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIGJpbmRpbmdUZW1wYXRlIGtleSBpczogWyIKLSAgICAgICAgICArIGJpbmRpbmdUZW1wbGF0ZS5nZXRCaW5kaW5nS2V5KCkKLSAgICAgICAgICArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBzYXZlIHRoZSBzZXJ2aWNlIGxvY2F0aW9uIGluIHRoZSBhc3NlcnRpb24gcmVzdWx0Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFNhdmUgc2VydmljZSBsb2NhdGlvbiBpbiBhbmFseXplciBjb250ZXh0Ci0gICAgICBlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldEFuYWx5emVyQ29udGV4dCgpCi0gICAgICAgIC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCkKLSAgICAgICAgLnNldFNlcnZpY2VMb2NhdGlvbigKLSAgICAgICAgc2VydmljZUxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU3ZDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9CUDMwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLQotLyoqCi0gKiBCUDMwMDMgLSBUaGUgdWRkaTp0TW9kZWwgaXMgY2F0ZWdvcml6ZWQgdXNpbmcgdGhlIHVkZGk6dHlwZXMgdGF4b25vbXksCi0gKiBhcyAid3NkbFNwZWMiOiB0aGUgdWRkaTprZXllZFJlZmVyZW5jZSBlbGVtZW50IGhhcyBhbiBhdHRyaWJ1dGUga2V5VmFsdWUKLSAqIGVxdWFsIHRvICJ3c2RsU3BlYyIsIGFuZCBrZXlOYW1lIGVxdWFsIHRvICJ1ZGRpLW9yZzp0eXBlcyIgb3IgInR5cGVzIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMyhVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIHRNb2RlbCBmcm9tIHRoZSBlbnRyeUNvbnRleHQKLSAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgYSB0TW9kZWwgd2l0aCBhIGNhdGVnb3JpemF0aW9uIG9mICd3c2RsU3BlYycuIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbCBhbmQgaXQgaXMgbm90IGNhdGVnb3JpemVkIGFzICJ3c2RsU3BlYyIsIHRoZW4gZmFpbAotICAgIGVsc2UgaWYgKCEoVURESVV0aWxzLmlzV3NkbFNwZWModE1vZGVsKSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIKLSAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICsgIl1cbiIKLSAgICAgICAgICArICJUaGUgY2F0ZWdvcnlCYWcgaXM6IFsiCi0gICAgICAgICAgKyB0aGlzLnZhbGlkYXRvci5jYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKQotICAgICAgICAgICsgIl0iOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvVURESVZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGJjOWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQmluZGluZ0RldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogVGhlIFVEREkgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgYSB3ZWIgc2VydmljZSBkZXNjcmlwdGlvbiB3YXMgcHVibGlzaGVkIGNvcnJlY3RseSBpbiBhIFVEREkgcmVnaXN0cnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVURESVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIFVERElWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFVEREkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZTsKLSAgLyoqCi0gICAqIFVEREkgcHJveHkuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVByb3h5IHVkZGlQcm94eTsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRElTQ09WRVJZOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgY29sbGVjdGlvbiBvZiBlbnRyeSB0eXBlcyB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgZW50cnkgdHlwZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RW50cnlUeXBlcygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUsCi0gICAgICAgICAgICAgIFRZUEVfRElTQ09WRVJZX1RNT0RFTH07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgICAgICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsCi0gICAgICAgICAgICAgIGFzc2VydGlvbnMuZ2V0QXJ0aWZhY3QoVFlQRV9ESVNDT1ZFUlkpLCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gYW5hbHl6ZXJDb25maWcuZ2V0VURESVJlZmVyZW5jZSgpOwotICAgICAgdGVzdGFibGUgPSBhbmFseXplckNvbmZpZy5pc1VERElSZWZlcmVuY2VTZXQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgb3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlLCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnID0gVXRpbHMuZ2V0QW5hbHl6ZXJDb25maWcocmVwb3J0ZXIpOwotICAgIHRlc3RhYmxlID0gKChhbmFseXplckNvbmZpZyAhPSBudWxsKSAmJiAoYW5hbHl6ZXJDb25maWcuaXNVRERJUmVmZXJlbmNlU2V0KCkpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG51bGw7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBpdCBkZXByaWNhdGVkIGFmdGVyIHJlZmFjdG9yaW5nIAotICAgIC8vIG5vdyB0aGUgaW5uZXIgY2xhc3NlcyBtb3ZlZCBvdXQgZnJvbSB2YWxpZGF0b3IKLSAgICAvL1N0cmluZyBjbGFzc1ByZWZpeCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiJCI7Ci0gICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHVwIGEgcmVmZXJlbmNlIHRvIHRoZSBVRERJIHJlZ2lzdHJ5Ci0gICAgICB1ZGRpUHJveHkgPSBuZXcgVURESVByb3h5KCk7Ci0KLSAgICAgIC8vbmV3IFNvY2tldChuZXcgSW5ldEFkZHJlc3ModWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCkpKTsKLSAgICAgIHVkZGlQcm94eS5zZXRJbnF1aXJ5VVJMKHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgIGJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICAgIElucHV0U3RyZWFtIHN0cmVhbTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgdXJsID0gU3RyaW5nVXRpbHMuZ2V0VVJMKG51bGwsIHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgICAgc3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgc3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBleCkKLSAgICAgIHsKLSAgICAgICAgd2FzRXggPSB0cnVlOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghd2FzRXgpCi0gICAgICB7Ci0KLSAgICAgICAgLy8gSWYgdGhlIFVEREkgcmVmZXJlbmNlIGlzIHRvIGEgYmluZGluZ1RlbXBsYXRlIHRoZW4gZ2V0IGl0Ci0gICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlLmdldEtleVR5cGUoKS5lcXVhbHMoVURESVJlZmVyZW5jZS5CSU5ESU5HX0tFWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgYmluZGluZyBkZXRhaWwgd2hpY2ggd2lsbCBjb250YWluIHRoZSBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICBCaW5kaW5nRGV0YWlsIGJpbmRpbmdEZXRhaWwgPQotICAgICAgICAgICAgdWRkaVByb3h5LmdldF9iaW5kaW5nRGV0YWlsKHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotCi0gICAgICAgICAgLy8gR2V0IGJpbmRpbmdUZW1wbGF0ZQotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAgICAgICAoQmluZGluZ1RlbXBsYXRlKSBiaW5kaW5nRGV0YWlsCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKQotICAgICAgICAgICAgICAuZWxlbWVudEF0KAotICAgICAgICAgICAgICAwKTsKLQotICAgICAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgICAgICAgIiAgICBCaW5kaW5nVGVtcGxhdGUgLSAiCi0gICAgICAgICAgICAgICAgKyBVRERJVXRpbHMuYmluZGluZ1RlbXBsYXRlVG9TdHJpbmcoYmluZGluZ1RlbXBsYXRlKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gR2V0IHRoZSB3c2RsU3BlYyB0TW9kZWwKLSAgICAgICAgICB0TW9kZWwgPSBVRERJVXRpbHMuZmluZFRNb2RlbCh1ZGRpUHJveHksIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2VPcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWxzZSBpdCBoYXMgdG8gYmUgYSB0TW9kZWwKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9Ci0gICAgICAgICAgICB1ZGRpUHJveHkuZ2V0X3RNb2RlbERldGFpbCh1ZGRpUmVmZXJlbmNlLmdldEtleSgpKTsKLSAgICAgICAgICB0TW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCkuZWxlbWVudEF0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAiICAgIFRNb2RlbCBzcGVjaWZpZWQgb3IgZm91bmQgaW4gYmluZGluZ1RlbXBsYXRlIC0gIgotICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyh0TW9kZWwpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoYmluZGluZ1RlbXBsYXRlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dCgKLSAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhIGJpbmRpbmdUZW1wbGF0ZSwgdGhlbiBwcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucyBmb3IgaXQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1RlbXBsYXRlLmdldEJpbmRpbmdLZXkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmdUZW1wbGF0ZSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyB0ZXN0IGFzc2VydGlvbnMKLSAgICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgbmV3IEVudHJ5Q29udGV4dChlbnRyeSwgdGhpcy5hbmFseXplckNvbnRleHQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gTk9URTogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIGlmIGEgYmluZGluZ1RlbXBsYXRlIGRvZXMgTk9UIGhhdmUgYSB3c2RsU3BlYyB0TW9kZWwsCi0gICAgICAvLyAgICAgICB0aGUgdE1vZGVsIHdpbGwgYmUgTlVMTC4KLQotICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9UTU9ERUwpKTsKLSAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAodE1vZGVsID09IG51bGwgPyAiW3RNb2RlbF0iIDogdE1vZGVsLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeURldGFpbCh0TW9kZWwpOwotCi0gICAgICAvLyBQcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB0aGlzLmFuYWx5emVyQ29udGV4dCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBXU0lFeGNlcHRpb24KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICAgIGUpOwotICAgIH0KLQotICAgIC8vIENsZWFudXAKLSAgICBjbGVhbnVwKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSB2YWxpZGF0ZUFydGlmYWN0KCkuICovCi0gIHB1YmxpYyBTdHJpbmcgdmFsaWRhdGUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgLy8gR2V0IFdTREwgbG9jYXRpb24KLSAgICByZXR1cm4gdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IFdTREwgYmluZGluZyBpbiB0aGUgc2VydmljZSByZWZlcmVuY2UgcG9ydGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFdTRExCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9Ci0gICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIFNldCB0aGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbiBpbiBhbmFseXplckNvbnRleHQKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPQotICAgICAgdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gSWYgdGhlIHdzZGxFbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVuIHNldCBpdAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICAgIGlmICgod3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgYW5kIHNldCBpbiBhbmFseXplckNvbnRleHQKLSAgICAgIHdzZGxFbGVtZW50ID0gbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgIHdzZGxFbGVtZW50LnNldFR5cGUoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgd3NkbEVsZW1lbnQgaW4gdGhlIHNlcnZpY2UgcmVmZXJlbmNlCi0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGxvY2F0aW9uIGluIHRoZSBzZXJ2aWNlIHJlZmVyZW5jZSBwb3J0aW9uIG9mIHRoZSBhbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgLy8gU2V0IHRoZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uIGluIGFuYWx5emVyQ29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9Ci0gICAgICB0aGlzLmFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSTCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGlzIGEgd3NkbFNwZWMgdE1vZGVsLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmlzV3NkbFNwZWMoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1dzZGxTcGVjKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSBudWxsOwotICAgIEl0ZXJhdG9yIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjYXRldGdvcnlCYWcgY29udGFpbnMgd3NkbFNwZWMKLSAgICBpZiAoKGNhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGtleWVkIHJlZmVyZW5jZXMKLSAgICAgIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmZXJlbmNlID0gbnVsbDsKLQotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICB3aGlsZSAoY2F0ZWdvcnlCYWdJdGVyYXRvci5oYXNOZXh0KCkgJiYgISh0TW9kZWxGb3VuZCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGtleWVkIHJlZmVyZW5jZQotICAgICAgICBrZXllZFJlZmVyZW5jZSA9IChLZXllZFJlZmVyZW5jZSkgY2F0ZWdvcnlCYWdJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHR5cGVzIHRheG9ub215IHRNb2RlbCBhbmQgdGhlIHZhbHVlIGlzIHdzZGxTcGVjLCB0aGVuIHRoaXMgaXMgdGhlIHRNb2RlbCB3ZSB3YW50Ci0gICAgICAgIC8vIFJFTU9WRTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGUga2V5IG5hbWUKLSAgICAgICAgLy9pZiAoa2V5ZWRSZWZlcmVuY2UuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkgJiYKLSAgICAgICAgLy8gICAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSAmJgotICAgICAgICAvLyAgICgidHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpIHx8Ci0gICAgICAgIC8vICAgICJ1ZGRpLW9yZzp0eXBlcyIuZXF1YWxzKGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKSkpKSB7Ci0gICAgICAgIC8vICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIC8vfQotICAgICAgICBpZiAoa2V5ZWRSZWZlcmVuY2UKLSAgICAgICAgICAuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkKLSAgICAgICAgICAmJiAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0TW9kZWxGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW4gT3ZlcnZpZXdVUkwgZnJvbSB0TW9kZWwuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgaWYgKChpbmRleCA9IHdzZGxMb2NhdGlvbi5pbmRleE9mKCIjIikpID4gLTEpCi0gICAgewotICAgICAgd3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsTG9jYXRpb247Ci0gIH0KLSAKLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgICB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExEb2N1bWVudChVRERJVXRpbHMuZ2V0V1NETExvY2F0aW9uKHdzZGxMb2NhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgaW4gdGhlIHRNb2RlbC4KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nIGdldEJpbmRpbmcoU3RyaW5nIG92ZXJ2aWV3VVJMLCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICB7Ci0gICAgaW50IGluZGV4OwotICAgIGludCBuYW1lSW5kZXg7Ci0KLSAgICBCaW5kaW5nW10gYmluZGluZ3MgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBiaW5kaW5ncy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgaWYgKG92ZXJ2aWV3VVJMICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgICAgaWYgKChpbmRleCA9IG92ZXJ2aWV3VVJMLmluZGV4T2YoIiMiKSkgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogTmVlZCB0byB1c2UgYSByZWFsIFhQYXRoIGV2YWx1YXRvciBsaWtlIFhhbGFuCi0gICAgICAgIFN0cmluZyBuYW1lQXR0cmlidXRlID0gIkBuYW1lPSI7Ci0KLSAgICAgICAgLy8gTG9jYXRlIG5hbWUgcmVmZXJlbmNlCi0gICAgICAgIGlmICgobmFtZUluZGV4ID0KLSAgICAgICAgICBvdmVydmlld1VSTC5zdWJzdHJpbmcoaW5kZXggKyAxKS5pbmRleE9mKG5hbWVBdHRyaWJ1dGUpKQotICAgICAgICAgID4gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyIHdoaWNoIHNob3VsZCBiZSBhIHF1b3RlCi0gICAgICAgICAgaW50IGZpcnN0UXVvdGVJbmRleCA9IGluZGV4ICsgMSArIG5hbWVJbmRleCArIG5hbWVBdHRyaWJ1dGUubGVuZ3RoKCk7Ci0gICAgICAgICAgU3RyaW5nIHF1b3RlID0KLSAgICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhmaXJzdFF1b3RlSW5kZXgsIGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBVUkwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIGJpbmRpbmcgbmFtZQotICAgICAgICAgIFN0cmluZyB1cmxQYXJ0ID0gb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBxdW90ZQotICAgICAgICAgIGludCBuZXh0UXVvdGVJbmRleDsKLSAgICAgICAgICBpZiAoKG5leHRRdW90ZUluZGV4ID0gdXJsUGFydC5pbmRleE9mKHF1b3RlKSkgPiAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSB1cmxQYXJ0LnN1YnN0cmluZygwLCBuZXh0UXVvdGVJbmRleCk7Ci0gICAgICAgICAgICAvL2xvb2sgZm9yIGJpbmRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChiaW5kaW5nTmFtZS5lcXVhbHMoYmluZGluZ3NbaV0uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmdzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nc1swXTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgYSBDYXRlZ29yeUJhZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHRvU3RyaW5nID0gIiI7Ci0KLSAgICBpZiAoY2F0ZWdvcnlCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VMaXN0ID0gbnVsbDsKLSAgICAgIGlmICgoKGtleWVkUmVmZXJlbmNlTGlzdCA9IGNhdGVnb3J5QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChrZXllZFJlZmVyZW5jZUxpc3Quc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICB0b1N0cmluZyArPSAiTm8gS2V5ZWRSZWZlcmVuY2VzIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZTsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrZXllZFJlZmVyZW5jZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtleWVkUmVmZXJlbmNlID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgdG9TdHJpbmcgKz0gIlxuICBbIgotICAgICAgICAgICAgKyBjb3VudCsrCi0gICAgICAgICAgICArICJdIHRNb2RlbEtleTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiLCBrZXlOYW1lOiAiCi0gICAgICAgICAgICArIGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKQotICAgICAgICAgICAgKyAiLCBrZXlWYWx1ZTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0b1N0cmluZyA9ICJudWxsIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9TdHJpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjg0YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLS8qKgotICogV1NJMzAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwMSBleHRlbmRzIEJQMzAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDhkZDJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi0vKioKLSAqIFdTSTMwMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDIgZXh0ZW5kcyBCUDMwMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViMDE3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotLyoqCi0gKiBXU0kzMDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDAzIGV4dGVuZHMgQlAzMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDMoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMTczYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTMwMDQgLSBUaGUgY29uZm9ybWFuY2UgY2xhaW1zIGluIHRoZSB1ZGRpOnRNb2RlbCBhcmUgdGhlIHNhbWUKLSAqIGFzIHRob3NlIGluIHRoZSB3c2RsOmJpbmRpbmcgd2hpY2ggaXMgcmVmZXJlbmNlZCBieSB0aGUgdWRkaTp0TW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDQoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUU19QQVJBTSA9ICJwb3J0cyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX1BBUkFNID0gImJpbmRpbmciOwotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBhIHRNb2RlbC4KLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21VRERJKFRNb2RlbCB0TW9kZWwpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHZhbGlkYXRvci51ZGRpUHJveHkpOwotCi0gICAgSGFzaFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgQ2F0ZWdvcnlCYWcgYmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZi5nZXRUTW9kZWxLZXkoKS5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hZGQocmVmLmdldEtleVZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBXU0RMIGJpbmRpbmcKLSAgICogdGhhdCByZWZlcmVuY2VzIHNwZWNpZmllZCB0TW9kZWwuIEFkZGl0aW9uYWxseSwKLSAgICogV1NETCBwb3J0cywgd2hpY2ggdXNlcyB0aGUgYmluZGluZywgYXJlIHByb2Nlc3NlZC4KLSAgICoKLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21XU0RMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBIYXNoU2V0IHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBSZWFkIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBTdHJpbmcgb3ZlcnZpZXdVUkwgPSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwodE1vZGVsKTsKLSAgICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSB2YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KG92ZXJ2aWV3VVJMKTsKLQotICAgICAgLy8gR2V0IGJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IFVERElVdGlscy5nZXRCaW5kaW5nKG92ZXJ2aWV3VVJMLCB3c2RsRG9jdW1lbnQpOwotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAvLyBHZXQgY2xhaW1zCi0gICAgICByZXN1bHQgPQotICAgICAgICBnZXRDbGFpbXNGcm9tRWxlbWVudChiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0KLSAgICAgIC8vIEdldCBwb3J0cywgd2hpY2ggcmVmZXJlbmNlIHRoaXMgYmluZGluZywgYmVjYXVzZToKLSAgICAgIC8vICJBIGNsYWltIG9uIGEgd3NkbDpwb3J0IGlzIGluaGVyaXRlZCBieSB0aGUgcmVmZXJlbmNlZCB3c2RsOmJpbmRpbmdzLiIKLSAgICAgIFZlY3RvciBwb3J0cyA9IGdldFBvcnRzKHdzZGxEb2N1bWVudCwgYmluZGluZ05hbWUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSBnZXRDbGFpbXNGcm9tRWxlbWVudChwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBBREQ6Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSB0aGUgJ2RvY3VtZW50YXRpb24nIFhNTCBlbGVtZW50Ci0gICAqIGFuZCBwdXRzIHRoZW0gaW50byB0aGUgSGFzaFNldC4KLSAgICogQHBhcmFtIGRvY0VsZW1lbnQKLSAgICogQHBhcmFtIHJlc3VsdAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDbGFpbXNGcm9tRWxlbWVudChFbGVtZW50IGRvY0VsZW1lbnQsIEhhc2hTZXQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKGRvY0VsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNsYWltRWxlbWVudCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZG9jRWxlbWVudCwgV1NJX0NMQUlNKTsKLSAgICAgIHdoaWxlIChjbGFpbUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgTm9kZSBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGNsYWltRWxlbWVudCwgQVRUUl9DTEFJTV9DT05GT1JNU1RPKTsKLSAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgCXJlc3VsdC5hZGQoYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgICovCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9Ci0gICAgICAgICAgY2xhaW1FbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQuYWRkKHZhbHVlKTsKLQotICAgICAgICBjbGFpbUVsZW1lbnQgPSBYTUxVdGlscy5maW5kRWxlbWVudChjbGFpbUVsZW1lbnQsIFdTSV9DTEFJTSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHdzZGw6cG9ydHMsIHdoaWNoIHVzZSBzcGVjaWZpZWQgYmluZGluZy4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudAotICAgKiBAcGFyYW0gYmluZGluZ05hbWUKLSAgICogQHJldHVybiBWZWN0b3IKLSAgICovCi0gIHByaXZhdGUgVmVjdG9yIGdldFBvcnRzKFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIFZlY3RvciBwb3J0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoUE9SVFNfUEFSQU0sIHBvcnRzKTsKLSAgICBwYXJhbXMucHV0KEJJTkRJTkdfUEFSQU0sIGJpbmRpbmdOYW1lKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLCBwYXJhbXMpOwotCi0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBwb3J0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocG9ydAotICAgICAgLmdldEJpbmRpbmcoKQotICAgICAgLmdldFFOYW1lKCkKLSAgICAgIC5nZXRMb2NhbFBhcnQoKQotICAgICAgLmVxdWFscyhjdHguZ2V0UGFyYW1ldGVyKEJJTkRJTkdfUEFSQU0pLnRvU3RyaW5nKCkpKQotICAgIHsKLSAgICAgICgoVmVjdG9yKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRTX1BBUkFNKSkuYWRkKHBvcnQpOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21VRERJID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tVURESSh0TW9kZWwpOwotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21XU0RMID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tV1NETCh0TW9kZWwpOwotCi0gICAgICAgIGlmIChjbGFpbXNGcm9tVURESS5zaXplKCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNsYWltc0Zyb21VRERJLnNpemUoKSA9PSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gY2xhaW1zRnJvbVdTREwuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjbGFpbSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIyID0gY2xhaW1zRnJvbVVEREkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgaXRlcjIuaGFzTmV4dCgpOwotICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyB1ZGRpQ2xhaW0gPSAoU3RyaW5nKSBpdGVyMi5uZXh0KCk7Ci0gICAgICAgICAgICAgIGlmIChjbGFpbS5lcXVhbHNJZ25vcmVDYXNlKHVkZGlDbGFpbSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoY291bnRlciAhPSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmFpbGVkCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA1X09CU09MRVRFLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNmY1YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVURESVV0aWxzOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDVfT0JTT0xFVEUgLSBBIHVkZGk6dE1vZGVsIHdoaWNoIGNsYWltcyBjb25mb3JtYW5jZSB3aXRoIGEgV1MtSSBwcm9maWxlCi0gKiBtdXN0IGJlIGNhdGVnb3JpemVkIHVzaW5nIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvIHRheG9ub215LgotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwNV9PQlNPTEVURSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDVfT0JTT0xFVEUoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSBVRERJIHJlZ2lzdHJ5IGRvZXMgbm90IGNvbnRhaW4gV1NJIGNvbmZvcm1hbmNlIHRheG9ub215IgotICAgICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBhIGNhdGVnb3J5IGJhZy4KLSAgICogQHBhcmFtIHByb3h5Ci0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IFVERElVdGlscy5nZXRXU0lDb25mb3JtYW5jZVRNb2RlbEtleShwcm94eSk7Ci0KLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmICFyZXN1bHQ7IGkrKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2UgcmVmID0gKEtleWVkUmVmZXJlbmNlKSByZWZlcmVuY2VzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSByZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYThjMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi0KLS8qKgotICogV1NJMzAwNiAtIFRoZSB1ZGRpOnRNb2RlbCB1c2VzIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIgY2F0ZWdvcml6YXRpb24KLSAqIHZhbHVlIG9mICJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzZS8xLjAiLiBUaGUgY2F0ZWdvcnlCYWcgaW4gdGhlIHRNb2RlbAotICogY29udGFpbnMgYSBrZXllZFJlZmVyZW5jZSB3aXRoIGEgdE1vZGVsS2V5IHRoYXQgY29udGFpbnMgdGhlIGtleSB2YWx1ZQotICogdXVpZDo2NTcxOTE2OC03MmM2LTNmMjktOGMyMC02MmRlZmIwOTYxYzAgZm9yIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIKLSAqIHRNb2RlbC4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwNihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgICBLZXllZFJlZmVyZW5jZSBjbGFpbUtleWVkUmVmID0gbnVsbDsKLQotICAgIC8vIGNoZWNrIHdoZXRoZXIgYSBVRERJIGNvbmZvcm1hbmNlIGNsYWltIGlzIGJlaW5nIG1hZGUuLi4KLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICgoY2xhaW1LZXllZFJlZiA9IGNvbmZvcm1hbmNlQ2xhaW1NYWRlKHRNb2RlbCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHdlIGhhdmUgYSBjb25mb3JtYW5jZSBjbGFpbSwgc28gY2hlY2sgdGhlIGtleWVkUmVmZXJlbmNlIGtleVZhbHVlCi0gICAgICBpZiAoIWNsYWltS2V5ZWRSZWYKLSAgICAgICAgLmdldEtleVZhbHVlKCkKLSAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigKLSAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwKLSAgICAgICAgICAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiCi0gICAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiXS5cblRoZSBjYXRlZ29yeUJhZyBpczogWyIKLSAgICAgICAgICAgICsgdE1vZGVsLmdldENhdGVnb3J5QmFnKCkKLSAgICAgICAgICAgICsgIl0uIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gZS5nZXREZXRhaWxNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgYSBjYXRlZ29yeSBiYWcgYW5kIGV4dHJhY3RzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcKLSAgICogdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gcHJveHkKLSAgICogQHBhcmFtIGJhZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZm9ybWFuY2VLZXkgPSBVRERJVXRpbHMuZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkocHJveHkpOwotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBLZXllZFJlZmVyZW5jZSBjb25mb3JtYW5jZVJlZiA9IG51bGw7Ci0KLSAgICBpZiAoYmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHJlZmVyZW5jZXMgPSBiYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmZXJlbmNlcy5zaXplKCkgJiYgcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZgotICAgICAgICAgIC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSAvLyYmIHJlZi5nZXRLZXlWYWx1ZSgpLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKQotICAgICAgICAvLyB3ZSBuZWVkIG9ubHkgdE1vZGVsIGtleQotICAgICAgICApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgIGNvbmZvcm1hbmNlUmVmID0gcmVmOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbmZvcm1hbmNlUmVmOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gdE1vZGVsCi0gICAqIEByZXR1cm4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY29uZm9ybWFuY2VDbGFpbU1hZGUoVE1vZGVsIHRNb2RlbCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0TW9kZWwgY2Fubm90IGJlIG51bGwiKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBiYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgIHJldHVybiBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKTsKLSAgICB9Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY3NGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDcgLSBBIHVkZGk6YnVzaW5lc3NFbnRpdHkgb3IgdWRkaTpidXNpbmVzc1NlcnZpY2UgYXNzb2NpYXRlZAotICogd2l0aCB0aGlzIHVkZGk6YmluZGluZ1RlbXBsYXRlIGlzIG5vdCBjYXRlZ29yaXplZCB1c2luZwotICogdGhlIHdzLWktb3JnOmNvbmZvcm1zVG86MjAwMl8xMiB0YXhvbm9teS4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDA3KFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nVGVtcGxhdGUgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAoQmluZGluZ1RlbXBsYXRlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZFNlcnZpY2UgPSBmYWxzZTsKLSAgICBib29sZWFuIHZhbGlkQnVzaW5lc3MgPSBmYWxzZTsKLQotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNlcnZpY2VLZXkgPSBiaW5kaW5nVGVtcGxhdGUuZ2V0U2VydmljZUtleSgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIHNlcnZpY2UgPQotICAgICAgICBVRERJVXRpbHMuZ2V0QnVzaW5lc3NTZXJ2aWNlQnlLZXkodGhpcy52YWxpZGF0b3IudWRkaVByb3h5LCBzZXJ2aWNlS2V5KTsKLQotICAgICAgYnVzaW5lc3NLZXkgPSBzZXJ2aWNlLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzcyA9Ci0gICAgICAgIFVERElVdGlscy5nZXRCdXNpbmVzc0J5S2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3NLZXkpOwotCi0gICAgICB2YWxpZFNlcnZpY2UgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgc2VydmljZS5nZXRDYXRlZ29yeUJhZygpKTsKLSAgICAgIHZhbGlkQnVzaW5lc3MgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3MuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICghdmFsaWRCdXNpbmVzcyB8fCAhdmFsaWRTZXJ2aWNlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICBpZiAoIXZhbGlkQnVzaW5lc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAiVGhlIGJ1c2luZXNzRW50aXR5IGtleSBpczogWyIgKyBidXNpbmVzc0tleSArICJdLiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkU2VydmljZSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghdmFsaWRCdXNpbmVzcykKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlICs9ICIgIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICIiOwotCi0gICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgKz0gIlRoZSBidXNpbmVzc1NlcnZpY2Uga2V5IGlzOiBbIgotICAgICAgICAgICAgKyBzZXJ2aWNlS2V5Ci0gICAgICAgICAgICArICJdLiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIFVEREkgcmVnaXN0cnkgZG9lcyBub3QgY29udGFpbiBXU0kgY29uZm9ybWFuY2UgdGF4b25vbXkiCi0gICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjYXRlZ29yeSBiYWcgY29udGFpbnMgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBSZXR1cm5zIDxiPnRydWU8L2I+IGlmIHRoZSBiYWcgZG9lcyBub3QgY29udGFpbiB0aGUgY29uZm9ybWFuY2UgY2xhaW0uCi0gICAqIEBwYXJhbSBwcm94eQotICAgKiBAcGFyYW0gYmFnCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoVURESVByb3h5IHByb3h5LCBDYXRlZ29yeUJhZyBiYWcpCi0gIHsKLSAgICBTdHJpbmcgY29uZm9ybWFuY2VLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHByb3h5KTsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmIHJlc3VsdDsgaSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSByZWYgPSAoS2V5ZWRSZWZlcmVuY2UpIHJlZmVyZW5jZXMuZ2V0KGkpOwotCi0gICAgICAgIHJlc3VsdCA9ICFyZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODUzNTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSogV1NJMzAyMSAtIFRoZSB1ZGRpOnRNb2RlbCBoYXMgYSAibmFtZSIgZWxlbWVudCBvZiB2YWx1ZSAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIiAsCi0qIGhhcyBhbiBvdmVydmlld1VSTCB2YWx1ZSBvZiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLCBhbmQgaGFzCi0qIGEga2V5ZWRSZWZlcmVuY2UgZWxlbWVudCB3aXRoIGtleU5hbWUgYXR0cmlidXRlIHZhbHVlIG9mICJ1ZGRpLW9yZzp0eXBlczpjYXRlZ29yaXphdGlvbiIuCi0qLwotcHVibGljIGNsYXNzIFdTSTMwMjEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDIxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgVE1vZGVsIHRNb2RlbCA9Ci0gICAgICBVRERJVXRpbHMuZ2V0VE1vZGVsQnlLZXkoCi0gICAgICAgIHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwKLSAgICAgICAgVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSkpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYm9vbGVhbiB2YWxpZFVSTCA9Ci0gICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICAgICAmJiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLmVxdWFscygKLSAgICAgICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMU3RyaW5nKCkpOwotICAgICAgYm9vbGVhbiB2YWxpZENhdGVnb3J5ID0gY2hlY2tDYXRlZ29yeUJhZyh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICh2YWxpZFVSTCAmJiB2YWxpZENhdGVnb3J5KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gdGhpcy52YWxpZGF0b3IudWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY2F0ZWdvcnkgYmFnIG1lZXRzIHRoZSBXU0kncyByZXF1aXJlbWVudHMuCi0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoQ2F0ZWdvcnlCYWcgYmFnKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChiYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVmZXJlbmNlcyA9IGJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVuY2VzLnNpemUoKSAmJiAhcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICAidWRkaS1vcmc6dHlwZXM6Y2F0ZWdvcml6YXRpb24iLmVxdWFscyhyZWYuZ2V0S2V5TmFtZSgpKQotICAgICAgICAgICAgJiYgImNhdGVnb3JpemF0aW9uIi5lcXVhbHMocmVmLmdldEtleVZhbHVlKCkpCi0gICAgICAgICAgICAmJiAidXVpZDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiLmVxdWFscygKLSAgICAgICAgICAgICAgcmVmLmdldFRNb2RlbEtleSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmU1NjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5MDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBkZXNjcmlwdGlvbiB1c2VzIGVpdGhlciB0aGUgV1NETCBNSU1FIEJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gNQotICogb3IgV1NETCBTT0FQIGJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gMwotICogb24gZWFjaCBvZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhIHdzZGw6YmluZGluZy4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgLyoqCi0gICAqIFdTRExWYWxpZGF0b3IKLSAgICovCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIHByaXZhdGUgQ29sbGVjdGlvbiBtaW1lRWxlbWVudHM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotCi0gICAgbWltZUVsZW1lbnRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9DT05URU5UKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9YTUwpOwotICAgIG1pbWVFbGVtZW50cy5hZGQoV1NETF9NSU1FX01VTFRJUEFSVCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBRTmFtZSBpbmFwcGxpY2FibGVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgLy8gSWYgc3VjaCBlbGVtZW50IGV4aXN0cywgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgaWYgKGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgICAvLyBJZiBzdWNoIGVsZW1lbnQgZXhpc3RzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGluYXBwbGljYWJsZUVsZW1lbnQgPSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgICBpZiAoaW5hcHBsaWNhYmxlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaW5hcHBsaWNhYmxlRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6b3V0cHV0Ci0gICAgICAgIC8vIElmIHN1Y2ggZWxlbWVudCBleGlzdHMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbmFwcGxpY2FibGVFbGVtZW50ID0KLSAgICAgICAgICAgIGdldEluYXBwbGljYWJsZUVsZW1lbnQoYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgaWYgKGluYXBwbGljYWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGluYXBwbGljYWJsZUVsZW1lbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudCBvZiB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0Ci0gICAqIHRoYXQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgU09BUCBiaW5kaW5nIG9yIHRoZSBNSU1FIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBRTmFtZSBvZiBhbiBpbmFwcGxpY2FibGUgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFFOYW1lIGVsZW1lbnROYW1lID0KLSAgICAgICAgKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpKS5nZXRFbGVtZW50VHlwZSgpOwotCi0gICAgICBpZiAoIW1pbWVFbGVtZW50cy5jb250YWlucyhlbGVtZW50TmFtZSkgJiYKLSAgICAgICAgICAhZWxlbWVudE5hbWUuZXF1YWxzKFdTRExfU09BUF9CT0RZKSAmJgotICAgICAgICAgICFlbGVtZW50TmFtZS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiYzMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTAzCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyB3aXRoIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcGFydCBhdHRyaWJ1dGUgb2YgZWFjaCBtaW1lOmNvbnRlbnQgZWxlbWVudCBpbiBhIHdzZGw6YmluZGluZyByZWZlcmVuY2VzCi0gKiBhIHdzZGw6cGFydCBlbGVtZW50IG9mIGEgd3NkbDptZXNzYWdlIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZQotICogY29ycmVzcG9uZGluZyB3c2RsOm9wZXJhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIElucHV0IHBvcnRUeXBlSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiVGhlcmUgaXMgbm8gdGhlIGNvcnJlc3Bvbmdpbmcgd3NkbDppbnB1dCBpbiB0aGUgd3NkbDpwb3J0VHlwZSIKLSAgICAgICAgICAgICAgKyAiIG9wZXJhdGlvbiBmb3IgdGhlIHdzZGw6aW5wdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgaW5wdXQgZG9lcyBub3QgcmVmZXJlbmNlIGFueSB3c2RsOm1lc3NhZ2UsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBpbnB1dCBvZiB3c2RsOnBvcnRUeXBlIHJlZmVycyB0bwotICAgICAgICAgIFN0cmluZyBwYXJ0ID0gZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydCgKLSAgICAgICAgICAgIGlucHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAiXCIsIHRoZSBpbnB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIE91dHB1dCBwb3J0VHlwZU91dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6b3V0cHV0IGluIHRoZSB3c2RsOnBvcnRUeXBlIgotICAgICAgICAgICAgICArICIgb3BlcmF0aW9uIGZvciB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgb3V0cHV0IGRvZXMgbm90IHJlZmVyZW5jZSBhbnkgd3NkbDptZXNzYWdlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSB3c2RsOm91dHB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBvdXRwdXQgb2Ygd3NkbDpwb3J0VHlwZSByZWZlcnMgdG8KLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICAgIlwiLCB0aGUgb3V0cHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIG1pbWU6Y29udGVudCBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dEVsZW1zIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2FuIGNvbnRhaW4gbWltZTpjb250ZW50Uy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZUNvbnRlbnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lQ29udGVudEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVDb250ZW50RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVDb250ZW50RWxlbWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBwYXJ0IG5hbWUgc3BlY2lmaWVkIGluIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgaXMgbm90IHByZXNlbnRlZCBpbiB3c2RsOm1lc3NhZ2UKLSAgICogQHBhcmFtIG1pbWVDb250ZW50cyBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzIHdoaWNoIHBhcnQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgd3NkbDptZXNzYWdlCi0gICAqIEByZXR1cm4gYSBwYXJ0IG5hbWUKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoTGlzdCBtaW1lQ29udGVudHMsIE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIC8vIEdvaW5nIHRocm91ZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZUNvbnRlbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSBvZiBhIG1pbWU6ZWxlbWVudAotICAgICAgU3RyaW5nIHBhcnQgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBJZiB0aGUgd3NkbDptZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gc3VjaCBwYXJ0LCByZXR1cm4gdGhlIHBhcnQKLSAgICAgIGlmICghbWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpLmNvbnRhaW5zKHBhcnQpKQotICAgICAgICByZXR1cm4gcGFydDsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhOTcxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIHdpdGggYXQgbGVhc3Qgb25lIG1pbWU6Y29udGVudCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBwYXJ0IGF0dHJpYnV0ZSBvZiBlYWNoIG1pbWU6Y29udGVudCBlbGVtZW50IGluIGEgd3NkbDpiaW5kaW5nCi0gKiBkb2VzIG5vdCByZWZlcmVuY2UgYSBzdWItY29tcG9uZW50IG9mIGEgd3NkbDpwYXJ0IG9mIHRoZSB3c2RsOm1lc3NhZ2UgdGhhdCBpcyBwcmVzZW50IGluIHRoZQotICogcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3BlcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gKiB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDQgZXh0ZW5kcyBBUDI5MDMKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWM3Y2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgY29udGFpbmluZyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbm9uLXJvb3QgTUlNRSBwYXJ0IGluIGEgd3NkbDpiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQKLSAgICAgIGJvb2xlYW4gbXVsdGlwYXJ0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc29hcDpoZWFkZXIgaW4gdGhlIG5vbi1yb290IG1pbWU6cGFydCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChjb250YWluc0ludmFsaWRNaW1lUGFydChpbnB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpvdXRwdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghb3V0cHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzb2FwOmhlYWRlciBpbiB0aGUgbm9uLXJvb3QgbWltZTpwYXJ0LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICAgKyAiaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBhcnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBzdWNoIG5vbi1yb290IG1pbWU6cGFydCBlbGVtZW50IGZyb20gYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiB0aGF0IGNvbnRhaW5zIGEgc29hcDpoZWFkZXIgZWxlbWVudC4KLSAgICogQHBhcmFtIG11bHRpcGFydHMgYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRydWUsIGlmIHN1Y2ggZWxlbWVudCBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtdWx0aXBhcnRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIExvb2tpbmcgZm9yIG5vbi1yb290IG1pbWU6cGFydFMKLSAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgICAgTGlzdCBleHRFbGVtcyA9Ci0gICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBleHRFbGVtcy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmhlYWRlciwKLSAgICAgICAgICAgIC8vIHJldHVybiB0cnVlCi0gICAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIHJldHVybiBmYWxzZSwgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVNdWx0aXBhcnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkQWxsKGVsZW1zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZU11bHRpcGFydEVsZW1lbnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ0NDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBNSU1FIHBhcnQgaW4gYSBkZXNjcmlwdGlvbiBpcyBkZWZpbmVkIHVzaW5nCi0gKiBhbiBlbGVtZW50IHdpdGggYSBsb2NhbCBuYW1lIG9mIHBhcnQgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGUKLSAqIFdTREwgTUlNRSBCaW5kaW5nIGV4dGVuc2lvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODlmNGJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEFQMjkwOAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG1pbWU6cGFydCBlbGVtZW50IGluIGEgREVTQ1JJUFRJT04gZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyB3c2RsQmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBTaW5jZSBXU0RMNEogMS40IGlnbm9yZXMgYW55IGF0dHJpYnV0ZXMgb2YgbWltZTpwYXJ0LCB1c2UgWGVyY2VzIDIuNi4yIGluc3RlYWQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICBkb2MgPSB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTCh2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldExvY2F0aW9uKCksIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kaW5nIHRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBiZWluZyBwcm9jZXNzZWQKLSAgICAgIEVsZW1lbnQgYmluZGluZyA9IGdldEJpbmRpbmdFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksIHdzZGxCaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICBMaXN0IG9wcyA9IGdldENoaWxkRWxlbWVudHMoYmluZGluZywgV1NETF9PUEVSQVRJT04pOwotCi0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFbGVtZW50IGJpbmRpbmdPcGVyYXRpb24gPSAoRWxlbWVudCkgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBFbGVtZW50IGJpbmRpbmdJbnB1dCA9IGdldENoaWxkRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLCBXU0RMX0lOUFVUKTsKLSAgICAgICAgRWxlbWVudCBiaW5kaW5nT3V0cHV0ID0gZ2V0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24sIFdTRExfT1VUUFVUKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoYmluZGluZ0lucHV0KTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOmlucHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIWlucHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6cGFydCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCAiCi0gICAgICAgICAgICAgICAgKyAibWltZTpwYXJ0IGVsZW1lbnQgaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBjb250YWlucyBubyBvbmUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW11bHRpcGFydHNGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpwYXJ0IGVsZW1lbnRzIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUsIGlmIGFueSBtaW1lOnBhcnQgY29udGFpbnMgYSBuYW1lIGF0dHJpYnV0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KExpc3QgbXVsdGlwYXJ0cykgewotICAgIC8vIEdvaW5nIHRocm91Z2ggYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXVsdGlwYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIExpc3QgbWltZVBhcnRzID0KLSAgICAgICAgZ2V0Q2hpbGRFbGVtZW50cygoRWxlbWVudCkgbXVsdGlwYXJ0cy5nZXQoaSksIFdTRExfTUlNRV9QQVJUKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG1pbWVQYXJ0ID0gKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaik7Ci0gICAgICAgIC8vIElmIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWlucyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICBpZiAobWltZVBhcnQuZ2V0QXR0cmlidXRlTm9kZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gTm8gb25lIGludmFsaWQgbWltZTpwYXJ0IGVsZW1lbnQgaXMgZm91bmQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gcGFyZW50IGFuIGVsZW1lbnQgd2hpY2ggdGhlIGNoaWxkIGVsZW1lbnRzIGFyZSBnYXRoZXJlZCBmcm9tLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoRWxlbWVudCBwYXJlbnQpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBudWxsCi0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGNoaWxkKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgbWltZTpwYXJ0UyBmcm9tIHRoZSBlbGVtZW50Ci0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSBnZXRDaGlsZEVsZW1lbnRzKGNoaWxkLCBXU0RMX01JTUVfUEFSVCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZVBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaSkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW4gZWxlbWVudCdzIGNoaWxkIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYW4gZWxlbWVudCBvciBudWxsIGlmIGl0IGlzIG5vdCBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgRWxlbWVudCBnZXRDaGlsZEVsZW1lbnQoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQocGFyZW50KTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSByZXF1aXJlZCBxdWFsaWZpZWQgbmFtZQotICAgICAgaWYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgewotICAgICAgICAvLyByZXR1cm4gdGhlIGNoaWxkCi0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgIH0KLSAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBlbGVtZW50J3MgY2hpbGQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIExpc3QgY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHJlcXVpcmVkIHF1YWxpZmllZCBuYW1lCi0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoY2hpbGROYW1lLmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBjaGlsZCB0byB0aGUgbGlzdAotICAgICAgICAgIGNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBiaW5kaW5nJ3MgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaGlsZHJlbjsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3Igd3NkbDpiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBhIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGJpbmRpbmdOYW1lIGEgbmFtZSBvZiB3c2RsOmJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiBhIHdzZGw6YmluZGluZyBlbGVtZW50IG9yIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEJpbmRpbmdFbGVtZW50KEVsZW1lbnQgZGVmaW5pdGlvbnMsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGRlZmluaXRpb25zJyBjaGlsZAotICAgIEVsZW1lbnQgY2hpbGQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGRlZmluaXRpb25zKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBkZWZpbml0aW9ucycgY2hpbGQgaXMgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgIC8vIGFuZCBpcyB0aGUgc2FtZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCBieSBXU0RMVmFsaWRhdG9yCi0gICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfQklORElORy5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTRExfQklORElORy5nZXRMb2NhbFBhcnQoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpLmVxdWFscyhiaW5kaW5nTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIHJldHVybiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBkZWZpbml0aW9ucycgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyByZXR1cm4gbnVsbCwgaXMgdGhlcmUgaXMgbm8gc3VjaCB3c2RsOmJpbmRpbmcKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ODFiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5NdWx0aXBsZSBtaW1lOmNvbnRlbnQgY2hpbGQgZWxlbWVudHMgb2YgYSBtaW1lOnBhcnQgZWxlbWVudAotICogaW4gYSBkZXNjaXB0aW9uIHJlZmVyZW5jZSB0aGUgc2FtZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMKLSAgLy8gbXVsdGlwbGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIHByaXZhdGUgYm9vbGVhbiBtdWx0aXBsZUNvbnRlbnRGb3VuZDsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJlc2V0dGluZyB0aGUgdmFyaWFibGUKLSAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgaXRzIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBMaXN0IG9wcyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgb3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIG9wcy5nZXQoaSk7Ci0KLSAgICAgICAgLy8gR2V0dGluZyB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhbiBvcGVyYXRpb24KLSAgICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgZnJvbSB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dAotICAgICAgICBMaXN0IGlucHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNaW1lUGFydHMpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50ICIKLSAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQob3V0cHV0TWltZVBhcnRzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICArICJpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBkb2VzIG5vdCBjb250YWluIGEgbWltZTpwYXJ0IHdpdGggbXVsdGlwbGUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBsZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtaW1lUGFydHMgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIG11bHRpcGxlIG1pbWU6Y29udGVudFMgb2YgYSBtaW1lOnBhcnQKLSAgICogcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtaW1lUGFydHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVQYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBtaW1lOnBhcnQgY29udGFpbnMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudEZvdW5kID0gZmFsc2U7Ci0gICAgICBTdHJpbmcgbWltZUNvbnRlbnRQYXJ0ID0gbnVsbDsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCBtaW1lOnBhcnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgTGlzdCBleHRFbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaSkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgYW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaikpCi0gICAgICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIE1JTUVDb250ZW50IG1pbWVDb250ZW50ICA9IChNSU1FQ29udGVudCkgZXh0RWxlbXMuZ2V0KGopOwotICAgICAgICAgIC8vIElmIGEgbWltZTpjb250ZW50IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQgaW4gdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICBpZiAobWltZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCByZWZlcmVuY2VzIG90aGVyIHdzZGw6cGFydCB0aGFuIHRoZQotICAgICAgICAgICAgLy8gcHJldmlvdXMgbWltZTpjb250ZW50IGRvLCByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKG1pbWVDb250ZW50LmdldFBhcnQoKSA9PSBudWxsCi0gICAgICAgICAgICAgIHx8ICFtaW1lQ29udGVudC5nZXRQYXJ0KCkuZXF1YWxzKG1pbWVDb250ZW50UGFydCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBtaW1lOmNvbnRlbnQgZWxlbWVudCBvZiBtaW1lOnBhcnQKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgbWltZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtaW1lQ29udGVudFBhcnQgPSBtaW1lQ29udGVudC5nZXRQYXJ0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50cywgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZVBhcnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICBtaW1lUGFydHMuYWRkQWxsKG1QYXJ0cyk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lUGFydHMoCi0gICAgICAgICAgICAgICAgKChNSU1FUGFydCkgbVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICAgIG1pbWVQYXJ0cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWltZVBhcnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDJkMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTEwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIG1pbWU6Y29udGVudCBpbiBhIERFU0NSSVBUSU9OIHJlZmVyZW5jZXMKLSAqIGEgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZCB1c2luZyBlaXRoZXIgdGhlIHR5cGUgYXR0cmlidXRlCi0gKiBvciB0aGUgZWxlbWVudCBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICBib29sZWFuIG1pbWVDb250ZW50c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBvciB0aGUgd3NkbDppbnB1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgbWVzc2FnZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dCA9PSBudWxsIHx8IHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZSBjb3JyZXNwb25naW5nIG9wZXJhdGlvbiBpbiB0aGUgd3NkbDpwb3J0VHlwZSBmb3IgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIG1pbWU6Y29udGVudCByZWZlcmVuY2luZyBhbiBpbnZhbGlkIHdzZGw6cGFydCAKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICJcIiwgdGhlIGlucHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOm91dHB1dCBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gb3IgdGhlIHdzZGw6b3V0cHV0IGRvZXMgbm90IHNwZWNpZnkgYSBtZXNzYWdlIGF0dHJpYnV0ZSwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCA9PSBudWxsIHx8IHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgY29ycmVzcG9uZ2luZyBvcGVyYXRpb24gaW4gdGhlIHdzZGw6cG9ydFR5cGUgZm9yIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBpbnZhbGlkLiIpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBtaW1lOmNvbnRlbnQgcmVmZXJlbmNpbmcgYW4gaW52YWxpZCB3c2RsOnBhcnQKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAgICJcIiwgdGhlIG91dHB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBldmVyeSBtaW1lOmNvbnRlbnQgZWxlbWVudC4gSWYgaXQgcmVmZXJlbmNlcyBhIHdzZGw6cGFydCB0aGF0Ci0gICAqIGlzIGRlZmluZWQgdXNpbmcgbmVpdGhlciB0aGUgdHlwZSBhdHRyaWJ1dGUgbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZQotICAgKiBvciB1c2luZyB0aGVtIHRvZ2V0aGVyLCBpdCBpcyBpbnZhbGlkLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6bWVzc2FnZSBlbGVtZW50IGZvciBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIGEgdmFsdWUgb2YgdGhlIHBhcnQgYXR0cmlidXRlIG9mIGFuIGludmFsaWQgbWltZTpjb250ZW50Ci0gICAqIG9yIG51bGwgaWYgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgYXJlIHZhbGlkLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBwYXJ0IGF0dHJpYnV0ZSBmcm9tIGEgbWltZTplbGVtZW50Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgIC8vIGlmIGl0IGlzIGRlZmluZWQgYW5kIHVzZSBuZWl0aGVyIHRoZSB0eXBlIGF0dHJpYnV0ZQotICAgICAgLy8gbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBvciB1c2UgdGhlbSB0b2dldGhlciwgcmV0dXJuIHBhcnQgdmFsdWUKLSAgICAgIGlmIChwYXJ0ICE9IG51bGwKLSAgICAgICAgJiYgKChwYXJ0LmdldFR5cGVOYW1lKCkgPT0gbnVsbCAmJiBwYXJ0LmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBhcnQuZ2V0VHlwZU5hbWUoKSAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBwYXJ0TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzMzgzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTExCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGluIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3VwdXQgZWxlbWVudHMKLSAqIG9mIG9wZXJhdGlvbnMgaW4gYSB3c2RsOmJpbmRpbmcsIGNvbnRhaW4gZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNoaWxkIGVsZW1lbnQgdGhhdCBjb250YWlucwotICogYSBzb2FwYmluZDpib2R5IGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TXVsdGlwYXJ0cyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkob3V0cHV0TXVsdGlwYXJ0cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkICIKLSAgICAgICAgICAgICAgICArICJtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG9uZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbXVsdGlwYXJ0c0ZvdW5kKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIG1pbWU6cGFydCBlbGVtZW50cyBjb250YWluaW5nIGEgc29hcDpib2R5IGNoaWxkCi0gICAqIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNvbnRhaW5pbmcgYSBzb2FwOmJvZHkKLSAgICogY2hpbGQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc09uZVNvYXBCb2R5KExpc3QgbXVsdGlwYXJ0cykKLSAgewotICAgIC8vIEEgdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgYSBzb2FwOmJvZHkgZWxlbWVudCBpcyBmb3VuZAotICAgIGJvb2xlYW4gc29hcEJvZHlGb3VuZCA9IGZhbHNlOwotCi0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZXh0RWxlbXMgPQotICAgICAgICAgICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaikpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZXh0RWxlbXMuc2l6ZSgpOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmJvZHkKLSAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIGEgc29hcDpib2R5IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQsCi0gICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKHNvYXBCb2R5Rm91bmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGVsc2Ugc2V0IHRoZSB2YXJpYWJsZSB0byB0aGUgdHJ1ZSB2YWx1ZQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzb2FwQm9keUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHlGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lTXVsdGlwYXJ0RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgTGlzdCBlbGVtcyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3MzRmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTMwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkzMAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSB3c2RsOmZhdWx0IGVsZW1lbnQgaW4gYSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBoYXZlCi0gKiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBhcyBpdHMgY2hpbGQgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTMwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTMwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gd3NkbDpmYXVsdCBlbGVtZW50Ci0gICAgICBib29sZWFuIGZhdWx0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpmYXVsdCBlbGVtZW50cwotICAgICAgICBDb2xsZWN0aW9uIGZhdWx0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpLnZhbHVlcygpOwotICAgICAgICBpZiAoIWZhdWx0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBmYXVsdHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zTWltZU11bHRpcGFydHMoZmF1bHRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gaXMgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgZG9lcyBub3QgY29udGFpbiB3c2RsOmZhdWx0IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFmYXVsdHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZmF1bHRzIGEgY29sbGVjdGlvbiBvZiB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW55IHdzZGw6ZmF1bHQgaGFzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGNoaWxkCi0gICAqIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc01pbWVNdWx0aXBhcnRzKENvbGxlY3Rpb24gZmF1bHRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHdzZGw6ZmF1bHRTCi0gICAgSXRlcmF0b3IgaSA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIHdzZGw6ZmF1bHQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zID0gKChCaW5kaW5nRmF1bHQpIGkubmV4dCgpKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICgoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldChqKSkKLSAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGVyZSBhcmUgbm8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTJhMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuWFNTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTT2JqZWN0TGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1BhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVGVybTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAyOTQwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBhIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlCi0gKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIGlzIGJvdW5kIHRvIGEgc29hcGJpbmQ6Ym9keSwgb3IgYSBzb2FwYmluZDpoZWFkZXIKLSAqIGluIGEgTUlNRSBiaW5kaW5nLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB3c2RsOnBvcnRUeXBlIHJlZmVyZW5jZXMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyB3c2RsOnBhcnQgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICBib29sZWFuIHN3YVJlZkZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAvLyBJZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1lc3NhZ2UncyBwYXJ0cyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZgotICAgICAgICAgIExpc3Qgc3dhUmVmUGFydHMgPSBnZXRTd2FSZWZQYXJ0cyhwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLAotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSdzIHBhcnRzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmCi0gICAgICAgICAgTGlzdCBzd2FSZWZQYXJ0cyA9IGdldFN3YVJlZlBhcnRzKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgYmluZGluZ091dHB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdPdXRwdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgICAgLy8gc2NoZW1hIHR5cGUsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghc3dhUmVmRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIC8vIFRoZSBhc3NlcnRpb24gaXMgInJlY29tbWVuZGVkIiwgdXNpbmcgdGhlICJ3YXJuaW5nIiByZXN1bHQKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYSB3c2RsOnBhcnQgdGhhdCBpcyBub3QgYm91bmQgdG8gZWl0aGVyIHNvYXA6Ym9keSBvciBzb2FwOmhlYWRlcgotICAgKiBpbiBhIE1JTUUgYmluZGluZy4KLSAgICogQHBhcmFtIHN3YVJlZlBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZQotICAgKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB3c2RsOm1lc3NhZ2UgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgb2YgZWl0aGVyIHdzZGw6aW5wdXQgb3IKLSAgICogd3NkbDpvdXRwdXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSB3c2RsOnBhcnQgbmFtZSB0aGF0IGlzIG5vdCBib3VuZCBwcm9wZXJseSwgb3IgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFVuYm91bmRQYXJ0KExpc3Qgc3dhUmVmUGFydHMsIFFOYW1lIG1lc3NhZ2VOYW1lLCBMaXN0IGV4dEVsZW1zKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCB3c2RsOnBhcnQgbmFtZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN3YVJlZlBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZykgc3dhUmVmUGFydHMuZ2V0KGkpOwotICAgICAgYm9vbGVhbiBib3VuZFByb3Blcmx5ID0gZmFsc2U7Ci0gICAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpICYmICFib3VuZFByb3Blcmx5OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaik7Ci0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBtaW1lOnBhcnQgZWxlbWVudCB3aGVyZSBzb2FwOmJvZHkKLSAgICAgICAgICAgIC8vIGFuZCBzb2FwOmhlYWRlciBjb3VsZCBhcHBlYXIKLSAgICAgICAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGlzdCBlbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoMCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IGlzIGJvdW5kIGJ5IHRoaXMgZWxlbWVudAotICAgICAgICAgICAgICAgICAgaWYgKHB0cyA9PSBudWxsIHx8IHB0cy5jb250YWlucyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBzb2FwOmhlYWRlcgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VOYW1lLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkuZXF1YWxzKHBhcnQpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBoZWFkZXIgcmVmZXJlbmNlcyB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZXNNZXNzYWdlKGhlYWRlciwgbWVzc2FnZU5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgaGVhZGVyLmdldEF0dHJpYnV0ZSgicGFydCIpLmVxdWFscyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUHJvcGVybHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGlzIHBhcnQgaXMgdW5ib3VuZCBwcm9wZXJseSwgcmV0dXJuIGl0Ci0gICAgICBpZiAoIWJvdW5kUHJvcGVybHkpCi0gICAgICAgIHJldHVybiBwYXJ0OwotICAgIH0KLSAgICAvLyBBbGwgdGhlIHBhcnRzIGFyZSBib3VuZCBwcm9wZXJseSwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhbiBlbGVtZW50IGNvbnRhaW5zIGEgbWVzc2FnZSBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzCi0gICAqIGEgbWVzc2FnZSB0aGF0IGhhdmUgdGhlIHF1YWxpZmllZCBuYW1lIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGVsZW0gYW4gZWxlbWVudCB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlTmFtZSB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW4gZWxlbWVudCBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNNZXNzYWdlKEVsZW1lbnQgZWxlbSwgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICAvLyBHZXR0aW5nIHRoZSBlbGVtZW50J3MgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgLy8gZmluZGluZyB0aGUgY29sb24gZGVsaW1pdGVyCi0gICAgaW50IGNvbG9uUG9zID0gbWVzc2FnZS5pbmRleE9mKCI6Iik7Ci0gICAgU3RyaW5nIG5zID0gbnVsbDsKLSAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgIFN0cmluZyBscCA9IGNvbG9uUG9zID4gLTEgPyBtZXNzYWdlLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbWVzc2FnZTsKLSAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgaWYgKGNvbG9uUG9zID4gLTEpCi0gICAgewotICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgIG5zID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpCi0gICAgICAgIC5nZXROYW1lc3BhY2UobWVzc2FnZS5zdWJzdHJpbmcoMCwgY29sb25Qb3MpKTsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGxvY2FsIHBhcnQgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIGFyZSB0aGUgc2FtZSBhcyBhIG1lc3NhZ2UgaGF2ZQotICAgIGlmIChtZXNzYWdlTmFtZS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMobHApCi0gICAgICAmJiBtZXNzYWdlTmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobnMpKQotICAgIHsKLSAgICAgIC8vIGVsZW1lbnQgaXMgdmFsaWQsIHJldHVybiB0cnVlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gZWxlbWVudCBpcyBub3QgdmFsaWQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSBjb250YWluaWcgd3NkbDpwYXJ0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmUGFydHMoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgTGlzdCBzd2FSZWZQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIEdvaW5nIHRocm91Z2ggbWVzc2FnZSdzIHBhcnRzCi0gICAgSXRlcmF0b3IgaXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICBRTmFtZSByZWY7Ci0gICAgICBzaG9ydCB0eXBlOwotICAgICAgLy8gR2V0dGluZyBlaXRoZXIgcGFydCdzIGVsZW1lbnQgcmVmZXJlbmNlIG9yIHR5cGUgcmVmZXJlbmNlCi0gICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9IFhTQ29uc3RhbnRzLlRZUEVfREVGSU5JVElPTjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKChyZWYgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgfQotICAgICAgLy8gVGhlIHBhcnQgZG9lcyBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgLy8gcHJvY2VlZGluZyB3aXRoIHRoZSBuZXh0IHBhcnQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgIE1hcCBzY2hlbWFzID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzKCk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBzY2hlbWFzCi0gICAgICBJdGVyYXRvciBpdDIgPSBzY2hlbWFzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Mi5uZXh0KCk7Ci0gICAgICAgIFhTVHlwZURlZmluaXRpb24gcGFydFR5cGUgPSBudWxsOwotICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQgdHlwZQotICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgWFNFbGVtZW50RGVjbGFyYXRpb24gZWxlbSA9IHhzTW9kZWwuZ2V0RWxlbWVudERlY2xhcmF0aW9uKAotICAgICAgICAgICAgcmVmLmdldExvY2FsUGFydCgpLCByZWYuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICBwYXJ0VHlwZSA9IGVsZW0uZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0VHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIHBhcnQgdHlwZSBpcyBkZWZpbmVkIHVzaW5nIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKHBhcnRUeXBlLCBuZXcgQXJyYXlMaXN0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0J3MgbmFtZSB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIHN3YVJlZlBhcnRzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIHRoZSBsaXN0Ci0gICAgcmV0dXJuIHN3YVJlZlBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHNjaGVtYSB0eXBlIHdoZXRoZXIgaXQgY29udGFpbnMgcmVmOnN3YVJlZiBzaW1wbGUgc2NoZW1hIHR5cGUKLSAgICogb3IgaGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGlzIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0geHNUeXBlIGEgc2NoZW1hIHR5cGUgZGVmaW5pdGlvbiBlbGVtZW50Ci0gICAqIEByZXR1cm4gdHJ1ZSwgaWYgc2NoZW1hIHR5cGUgY29udGFpbnMgcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUsIExpc3QgdHlwZXMpCi0gIHsKLSAgICBpZiAoKHhzVHlwZSAhPSBudWxsKSAmJiAoIXR5cGVzLmNvbnRhaW5zKHhzVHlwZSkpKQotICAgIHsKLSAgICAgIHR5cGVzLmFkZCh4c1R5cGUpOwotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgY29udGV4dCBjb250YWlucyByZWY6c3dhUmVmCi0gICAgICAgIGlmICh4c0NvbXBsZXhUeXBlLmdldFBhcnRpY2xlKCkgIT0gbnVsbAotICAgICAgICAgICYmIHJlZmVyZW5jZXNTd2FSZWYoeHNDb21wbGV4VHlwZS5nZXRQYXJ0aWNsZSgpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgdHlwZSdzIGF0dHJpYnV0ZXMKLSAgICAgICAgWFNPYmplY3RMaXN0IGF0dHJMaXN0ID0geHNDb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVVc2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFhTQXR0cmlidXRlVXNlIHhzQXR0clVzZSA9IChYU0F0dHJpYnV0ZVVzZSkgYXR0ckxpc3QuaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBhbiBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB1c2luZyByZWY6c3dhUmVmLCByZXR1cm4gdHJ1ZQotICAgICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAgICAgeHNBdHRyVXNlLmdldEF0dHJEZWNsYXJhdGlvbigpLmdldFR5cGVEZWZpbml0aW9uKCksIHR5cGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGVsc2UgaWYgdGhpcyBpcyBhIHNpbXBsZSB0eXBlCi0gICAgICBlbHNlIGlmICh4c1R5cGUuZ2V0VHlwZUNhdGVnb3J5KCkgPT0gWFNUeXBlRGVmaW5pdGlvbi5TSU1QTEVfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNTaW1wbGVUeXBlIHhzU2ltcGxlVHlwZSA9IChYU1NpbXBsZVR5cGUpIHhzVHlwZTsKLSAgICAgICAgLy8gSWYgdGhpcyB0eXBlIGlzIHJlZjpzd2FSZWYsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICh4c1NpbXBsZVR5cGUuZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU1dBX1JFRikKLSAgICAgICAgICAmJiB4c1NpbXBsZVR5cGUuZ2V0TmFtZSgpLmVxdWFscyhXU0lDb25zdGFudHMuU0NIRU1BX1RZUEVfU1dBX1JFRikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGUgc2NoZW1hIHR5cGUgZG9lcyBub3QgY29udGFpbiBhbnkgZWxlbWVudCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYKLSAgICAvLyByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIGEgdGVybSB3aGV0aGVyIGl0IGlzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmLgotICAgKiBAcGFyYW0gdGVybSBhIHRlcm0gdGhhdCBjYW4gYmUgb25lIG9mIGEgbW9kZWwgZ3JvdXAgb3IgYW4KLSAgICogZWxlbWVudCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGEgdGVybSBpcyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUZXJtIHRlcm0sIExpc3QgdHlwZXMpCi0gIHsKLSAgICAvLyBJZiBhIHRlcm0gaXMgYW4gZWxlbWVudCBkZWNsYXJhdGlvbgotICAgIGlmICh0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgIHsKLSAgICAgIC8vIElmIGVsZW1lbnQncyB0eXBlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwgcmV0dXJuIHRydWUKLSAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAoKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtKS5nZXRUeXBlRGVmaW5pdGlvbigpLCB0eXBlcykpCi0gICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgYSB0ZXJtIGlzIGEgbW9kZWwgZ3JvdXAKLSAgICBlbHNlIGlmKHRlcm0uZ2V0VHlwZSgpID09IFhTQ29uc3RhbnRzLk1PREVMX0dST1VQKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIFBhcnRpY2xlIHNjaGVtYSBjb21wb25lbnRzCi0gICAgICBYU09iamVjdExpc3QgbGlzdCA9ICgoWFNNb2RlbEdyb3VwKSB0ZXJtKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgdGVybSBvZiBhIHBhcnRpY2xlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwKLSAgICAgICAgLy8gcmV0dXJuIHRydWUKLSAgICAgICAgaWYgKHJlZmVyZW5jZXNTd2FSZWYoKChYU1BhcnRpY2xlKSBsaXN0Lml0ZW0oaSkpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmMGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBBUDI5NDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgd3NkbDpiaW5kaW5nIGluIGEgZGVzY3JpcHRpb24gYmluZHMgZXZlcnkgd3NkbDpwYXJ0Ci0gKiBvZiBhIHdzZGw6bWVzc2FnZSBpbiB0aGUgd3NkbDpwb3J0VHlwZSB0byB3aGljaCBpdCByZWZlcnMgdG8gb25lIG9mCi0gKiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0ICwgc29hcGJpbmQ6aGVhZGVyZmF1bHQsCi0gKiBvciBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0MSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjk0MShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLSAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBleGlzdHMgaW4gd3NkbDpwb3J0VHlwZQotICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgIGlmIChwb3J0VHlwZUlucHV0ICE9IG51bGwgJiYgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGxpc3Qgb2YgYWxsIHRoZSBwYXJ0cyBib3VuZCBieSB3c2RsOmlucHV0J3MgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICBMaXN0IGlucHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOnBhcnRTIGFyZSBib3VuZCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmICghaW5wdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkua2V5U2V0KCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24gZG9lcyBub3QgIgotICAgICAgICAgICAgICArICJiaW5kIGFsbCB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBsaXN0IG9mIGFsbCB0aGUgcGFydHMgYm91bmQgYnkgd3NkbDpvdXRwdXQncyBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIExpc3Qgb3V0cHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgLy8gSWYgbm90IHRydWUgdGhhdCBhbGwgdGhlIHdzZGw6cGFydFMgYXJlIGJvdW5kLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFvdXRwdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBkb2VzIG5vdCAiCi0gICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydFMuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSUYgdGhlcmUgYXJlIHdzZGw6ZmF1bHRTIGluIHRoZSB3c2RsOnBvcnRUeXBlIG9wZXJhdGlvbgotICAgICAgICBpZiAoIWJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0RmF1bHRzKCkuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIHNvYXA6ZmF1bHQgbmFtZXMKLSAgICAgICAgICBMaXN0IGZhdWx0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBmYXVsdHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpmYXVsdFMKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB3c2RsOmZhdWx0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgTGlzdCBleHRFbGVtcyA9ICgoQmluZGluZ0ZhdWx0KSBpdC5uZXh0KCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KGopKQotICAgICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfRkFVTFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmF1bHROYW1lcy5hZGQoKChTT0FQRmF1bHQpZXh0RWxlbXMuZ2V0KGopKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzb2FwOmhlYWRlcmZhdWx0UwotICAgICAgICAgIGZhdWx0TmFtZXMuYWRkQWxsKGZpbmRBbGxIZWFkZXJGYXVsdHMoYmluZGluZ09wZXJhdGlvbikpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOmZhdWx0UyBhcmUgYm91bmQsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWZhdWx0TmFtZXMuY29udGFpbnNBbGwoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldEZhdWx0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGRvZXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6ZmF1bHRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgLy8gVGhlIGFzc2VydGlvbiBpcyAicmVjb21tZW5kZWQiLCB1c2luZyB0aGUgIndhcm5pbmciIHJlc3VsdAotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHBhcnRzIGJvdW5kIGJ5IGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgd3NkbDptZXNzYWdlIGVsZW1lbnQgY29ycmVzcG9uZ2luZwotICAgKiB0byB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzIGJvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEJpbmRpbmdQYXJ0cyhMaXN0IGV4dEVsZW1zLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhhdCBpcyBhIHNvYXA6Ym9keQotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgYWxsIHRoZSBwYXJ0cyBib3VuZCB0byB0aGUgbGlzdAotICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZXh0RWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICBpZiAocHRzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHMuYWRkQWxsKHB0cyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLAotICAgICAgICAgIC8vIGFsbCBwYXJ0cyBkZWZpbmVkIGJ5IHRoZSBtZXNzYWdlIGFyZSBhc3N1bWVkIHRvIGJlIGluY2x1ZGVkCi0gICAgICAgICAgLy8gaW4gdGhlIFNPQVAgQm9keSBwb3J0aW9uLgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwobWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgc29hcDpoZWFkZXIKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbnVsbDsKLSAgICAgICAgICBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlciBoZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QgCi0gICAgICAgICAgICBpZiAobWVzc2FnZS5nZXRRTmFtZSgpLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKSkKLSAgICAgICAgICAgICAgcGFydHMuYWRkKGhlYWRlci5nZXRQYXJ0KCkpOwotCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBoZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBXU0RMNEogMS40IGRvZXMgbm90IHJlY29nbml6ZSBzb2FwOmhlYWRlciBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZAotICAgICAgICAgIC8vIGluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgc28gdXNpbmcgYSB3b3JrYXJvdW5kCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgaGVhZGVyID0KLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgIGlmIChyZWZlcmVuY2VzTWVzc2FnZShoZWFkZXIsIG1lc3NhZ2UuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgICAgIHBhcnRzLmFkZChoZWFkZXIuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvciB0aGUgaGVhZGVyCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBnZXRIZWFkZXJGYXVsdHMoaGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc29hcDpoZWFkZXJmYXVsdFMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlYWRlckZhdWx0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyRmF1bHRzLmdldChqKSBpbnN0YW5jZW9mIFNPQVBIZWFkZXJGYXVsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNoZiA9IChTT0FQSGVhZGVyRmF1bHQpIGhlYWRlckZhdWx0cy5nZXQoaik7Ci0gICAgICAgICAgICAgIC8vIElmIGEgc29hcDpoZWFkZXJmYXVsdCByZWZlcmVuY2VzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgIC8vIG1lc3NhZ2UsIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXF1YWxzKHNoZi5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0UGFydCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHRoZSBzYW1lIHdvcmthcm91bmQuLi4KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBzaGYgPSAoRWxlbWVudCkgaGVhZGVyRmF1bHRzLmdldChqKTsKLSAgICAgICAgICAgICAgLy8gSWYgYSBzb2FwOmhlYWRlcmZhdWx0IHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgLy8gbWVzc2FnZSwgYWRkaW5nIHBhcnQgbmFtZSB0byB0aGUgbGlzdAotICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlc01lc3NhZ2Uoc2hmLCBtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBtaW1lOmNvbnRlbnQKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfQ09OVEVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBhZGRpbmcgcGFydCBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgcGFydHMuYWRkKCgoTUlNRUNvbnRlbnQpIGV4dEVsZW0pLmdldFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSB2YWx1ZXMgb2YgcGFydCBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAvLyBvZiBtaW1lOnBhcnQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwoZ2V0QmluZGluZ1BhcnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgICAgbWVzc2FnZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW4gZWxlbWVudCBjb250YWlucyBhIG1lc3NhZ2UgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcwotICAgKiBhIG1lc3NhZ2UgdGhhdCBoYXZlIHRoZSBxdWFsaWZpZWQgbmFtZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBlbGVtIGFuIGVsZW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGFuIGVsZW1lbnQgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiByZWZlcmVuY2VzTWVzc2FnZShFbGVtZW50IGVsZW0sIFFOYW1lIG1lc3NhZ2VOYW1lKQotICB7Ci0gICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBlbGVtLmdldEF0dHJpYnV0ZSgibWVzc2FnZSIpOwotICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgIGludCBjb2xvblBvcyA9IG1lc3NhZ2UuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyBucyA9IG51bGw7Ci0gICAgLy8gR2V0dGluZyBhIGxvY2FsIHBhcnQKLSAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbWVzc2FnZS5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKSA6IG1lc3NhZ2U7Ci0gICAgLy8gSWYgdGhlIGRlbGltaXRlciBpcyBmb3VuZAotICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgIHsKLSAgICAgIC8vIFJldHJpZXZpbmcgYSBuYW1lc3BhY2UgVVJJCi0gICAgICBucyA9IHZhbGlkYXRvci53c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKQotICAgICAgICAuZ2V0TmFtZXNwYWNlKG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgfQotICAgIC8vIElmIHRoZSBsb2NhbCBwYXJ0IGFuZCB0aGUgbmFtZXNwYWNlIFVSSSBhcmUgdGhlIHNhbWUgYXMgYSBtZXNzYWdlIGhhdmUKLSAgICBpZiAobWVzc2FnZU5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxwKQotICAgICAgJiYgbWVzc2FnZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5zKSkKLSAgICB7Ci0gICAgICAvLyBlbGVtZW50IGlzIHZhbGlkLCByZXR1cm4gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIGVsZW1lbnQgaXMgbm90IHZhbGlkLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZmluZEFsbEhlYWRlckZhdWx0cyhCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCkKLSAgewotICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChiaW5kaW5nT3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBoZWFkZXJGYXVsdHM7Ci0gICAgTGlzdCBpb0VsZW1lbnRzID0gYmluZGluZ09wLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlvRWxlbWVudHMuYWRkQWxsKGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW9FbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpb0VsZW1lbnRzLmdldChpKTsKLSAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVIpKSB7Ci0gICAgICAgIExpc3Qgc2hmTGlzdCA9ICgoU09BUEhlYWRlcikgZXh0RWxlbSkuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNoZkxpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKFNPQVBIZWFkZXJGYXVsdCkgc2hmTGlzdC5nZXQoaikpLmdldFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpIHsKLSAgICAgICAgTGlzdCBlbExpc3QgPSBnZXRIZWFkZXJGYXVsdHMoKAotICAgICAgICAgICAgICAgICAgKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbExpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKEVsZW1lbnQpZWxMaXN0LmdldChqKSkuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIGVsZW1lbnQncyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgc29hcDpoZWFkZXJmYXVsdCB0eXBlLgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBlbGVtZW50IHRoYXQgY2FuIGhhdmUgc29hcDpoZWFkZXJmYXVsdCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEhlYWRlckZhdWx0cyhFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGhlYWRlcidzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpoZWFkZXJmYXVsdAotICAgICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVJGQVVMVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUkZBVUxULmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgY2hpbGQgdG8gdGhlIGxpc3QKLSAgICAgICAgICBoZWFkZXJGYXVsdHMuYWRkKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGhlYWRlcidzIGNoaWxkCi0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkzYTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5NDQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgREVTQ1JJUFRJT04sIGlmIGEgd3NkbDpwYXJ0IGVsZW1lbnQgcmVmZXJzIHRvIGEKLSAqIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uICh2aWEgdGhlIGVsZW1lbnQgYXR0cmlidXRlIG9mIHRoZSB3c2RsOnBhcnQgZWxlbWVudCkKLSAqIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBhIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgYmluZHMgdGhhdCBwYXJ0Ci0gKiBpcyBhIGNvbnRlbnQgdHlwZSBzdWl0YWJsZSBmb3IgY2FycnlpbmcgYW4gWE1MIHNlcmlhbGl6YXRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0NCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIC8vIHRoYXQgYmluZCB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUKLSAgcHJpdmF0ZSBib29sZWFuIG1pbWVDb250ZW50Rm91bmQ7Ci0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSB2YXJpYWJsZQotICAgIG1pbWVDb250ZW50Rm91bmQgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6aW5wdXQgZXhpc3RzIGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkKLSAgICAgICAgICAgICAgICArICJcIiB0aGF0IGJpbmRzIHRoZSBcIiIgKyBpbWMuZ2V0UGFydCgpCi0gICAgICAgICAgICAgICAgKyAiXCIgd3NkbDpwYXJ0IHVzZXMgdGhlIGludmFsaWQgY29udGVudCB0eXBlIFwiIgotICAgICAgICAgICAgICAgICsgaW1jLmdldFR5cGUoKSArICJcIi4gIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gYW5kIGluY2x1ZGVzIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZQotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCAhPSBudWxsICYmIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgb3V0cHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICAgKyAiXCIgdGhhdCBiaW5kcyB0aGUgXCIiICsgaW1jLmdldFBhcnQoKQotICAgICAgICAgICAgICAgICsgIlwiIHdzZGw6cGFydCB1c2VzIHRoZSBpbnZhbGlkIGNvbnRlbnQgdHlwZSBcIiIKLSAgICAgICAgICAgICAgICArIGltYy5nZXRUeXBlKCkgKyAiXCIuICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgbWltZTpjb250ZW50IGVsZW1lbnRzIGFyZSBub3QgZm91bmQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBhbnkgbWltZTpjb250ZW50IGVsZW1lbnQgYmluZHMgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZAotICAgKiB3aXRoIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBhbmQgdXNlcyB0aGUgY29udGVudCB0eXBlICJ0ZXh0L3htbCIuCi0gICAqIEBwYXJhbSBtaW1lQ29udGVudHMgYSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDptZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBtaW1lOmNvbnRlbnQgZWxlbWVudCB0aGF0IHVzZXMgYSBjb250ZW50IHR5cGUgb3RoZXIgdGhhbgotICAgKiAidGV4dC94bWwiLCBudWxsIGlmIG5vIG9uZSBzdWNoIGVsZW1lbnQgaXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIE1JTUVDb250ZW50IGdldEludmFsaWRNaW1lQ29udGVudChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSAoTUlNRUNvbnRlbnQpIG1pbWVDb250ZW50cy5nZXQoaSk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KG1pbWVDb250ZW50LmdldFBhcnQoKSk7Ci0gICAgICAvLyBJZiB0aGUgcGFydCBpcyBkZWZpbmVkIHdpdGggdGhlIGVsZW1lbnQgYXR0cmlidXRlCi0gICAgICBpZiAocGFydCAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgLy8gSWYgdGhlIHR5cGUgYXR0cmlidXRlIHZhbHVlIGlzIG90aGVyIHRoYW4gInRleHQveG1sIgotICAgICAgICBpZiAoIVdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwuZXF1YWxzKG1pbWVDb250ZW50LmdldFR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyByZXR1cm4gdGhlIGludmFsaWQgZWxlbWVudAotICAgICAgICAgIHJldHVybiBtaW1lQ29udGVudDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1NTczOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQ2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyAgd2l0aCBhdCBsZWFzdCBvbmUgbWltZTpjb250ZW50IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYSBERVNDUklQVElPTiwgYSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICogaW5jbHVkZXMgdGhlIHBhcnQgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KGlucHV0TWltZUNvbnRlbnRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOmNvbnRlbnQgZWxlbWVudCIKLSAgICAgICAgICAgICAgKyAiIGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KG91dHB1dE1pbWVDb250ZW50cykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQiCi0gICAgICAgICAgICAgICsgIiBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG1pbWU6Y29udGVudCBlbGVtZW50cywKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbWltZUNvbnRlbnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnkgbWltZTpjb250ZW50IGRvZXMgbm90IGluY2x1ZGUgdGhlIHBhcnQgYXR0cmlidXRlLAotICAgKiBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNJbnZhbGlkTWltZUNvbnRlbnQoTGlzdCBtaW1lQ29udGVudHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVDb250ZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgcmV0dXJuIHRydWUKLSAgICAgIGlmICgoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6Y29udGVudFMsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1MTkzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMTAuCi0qICJOYW1lIiBhdHRyaWJ1dGVzIG9mIE9wZXJhdGlvbnMgYXJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHdzZGw6cG9ydFR5cGUgZGVmaW5pdGlvbiAKLSoKLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgcG9ydFR5cGUgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG9wZXJhdGlvbnMgbmFtZXMgZm9yIHVuaXF1ZW5lc3Mgd2l0aGluIHRoZSBjYW5kaWRhdGUgUG9ydCBUeXBlIGluIHRoZSBXU0RMIAotICAgIEl0ZXJhdG9yIG9wczsKLSAgICBIYXNoU2V0IG5hbWVzU2VlbiA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgSGFzaFNldCBkdXBsaWNhdGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBMaXN0IG9wc0xpc3QgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICBpZiAob3BzTGlzdCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvLyBubyBvcGVyYXRpb25zIGZvdW5kIGluIHBvcnRUeXBlCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wcyA9IG9wc0xpc3QuaXRlcmF0b3IoKTsgLy8gd2lsbCB1c2UgQ2FuZGlkYXRlLmdldE9wZXJhdGlvbnMoKQotICAgICAgICB3aGlsZSAob3BzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wcy5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAobmFtZXNTZWVuLmNvbnRhaW5zKG9wTmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZHVwbGljYXRlcy5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzU2Vlbi5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFkdXBsaWNhdGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGZhaWxJbmZvID0KLSAgICAgICAgICBuZXcgU3RyaW5nQnVmZmVyKAotICAgICAgICAgICAgIkR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMgaW4gcG9ydFR5cGUgIgotICAgICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkKLSAgICAgICAgICAgICAgKyAiOiAiKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGR1cGxpY2F0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbEluZm8uYXBwZW5kKChTdHJpbmcpIGkubmV4dCgpICsgIjsgIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oZmFpbEluZm8udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsgLy8gPz8gbm8gb3BlcmF0aW9ucyBmb3VuZCwgYnV0IGRvZXMgbm90IGZhaWwgdGhlIGFzc2VydGlvbi4KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0LCBwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODU4YWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogQlAyMDExLgotICogVGhlIGltcG9ydGVkIFhNTCBzY2hlbWEgaXMgYSB3ZWxsLWZvcm1lZCBYTUwgMS4wIGRvY3VtZW50IGFuZCBpZiBpdCBjb250YWlucyBhbiAKLSAqIFhNTCBkZWNsYXJhdGlvbiwgaXQgaXMgdmVyc2lvbiAxLjAuIAotICoKLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotKiovCi1wdWJsaWMgY2xhc3MgQlAyMDExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDExKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBjaGFyW10gT01NSVRFRF9YTUxfREVDTEFSQVRJT05fREVMSU1JVEVSUyA9Ci0gICAgbmV3IGNoYXJbXSB7IDB4MjAsIDB4OSwgMHhELCAweEEsICdcJycsICdcIicgfTsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyW10gWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPSBuZXcgY2hhcltdIHsgJz0nIH07Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFZFUlNJT05fVE9LRU4gPSAidmVyc2lvbiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFZFUlNJT04gPSAiMS4wIjsKLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIC8vRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBUeXBlcyB0eXBlcyA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIExpc3QgZXh0cyA9IG51bGw7Ci0gICAgLy9pZiAoZGVmLmdldFR5cGVzKCkhPW51bGwpCi0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgZXh0cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIH0KLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoKGRlZmluaXRpb24gPQotICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHR5cGVzKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGZpbmQgdHlwZXMgZGVmaW5pdGlvbiBpbiBhbnkgV1NETCBkb2N1bWVudC4iKTsKLSAgICAgIH0KLQotICAgICAgSXRlcmF0b3IgaXQgPSBleHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBpZiAoZWwgaW5zdGFuY2VvZiBTY2hlbWEpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoU2NoZW1hKSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgICBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0gLyplbHNlCi0gICAgICAgICAJCQlyZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsqLwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qIFNlYXJjaCB4c2Qgc2NoZW1hIG9yIHhzZCBpbXBvcnQgZnJvbSBub2RlLiBJZiBub2RlIGlzIHhzZCBpbXBvcnQgaXQncyBsb2FkaW5nIHNjaGVtYS4KLSAgICogQHBhcmFtIG4gLSBVbmtub3duRXh0ZW5jaWJpbGl0eUVsZW1lbnQKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNlYXJjaEZvclNjaGVtYShOb2RlIG4sIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLSAgICBpZiAoKG4hPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMobikpKQotICAgIHsKLSAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIHNlYXJjaGVzIGZvciB4c2Q6aW1wb3J0IGVsZW1lbnQKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICAgIHByb2Nlc3NTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gaWYgeHNkOmltcG9ydCBlbGVtZW50IGlzIGZvdW5kIC0+IGxvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgICAgLy8gRklYRUQ6IGlmIHhzZDppbXBvcnQgaXMgZm91bmQgYW5kIHBhcmVudCBlbGVtZW50IGlzIHhzZDpzY2hlbWEKLSAgICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKQotICAgICAgICAgICAgICAmJiBYTUxVdGlscy5lcXVhbHMobi5nZXRQYXJlbnROb2RlKCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICAgIGxvYWRTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgICAgIHNlYXJjaEZvclNjaGVtYShuLmdldEZpcnN0Q2hpbGQoKSwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBJdCBsb2FkcyB4c2Qgc2NoZW1hIGFuZCB0aGVuIGNoZWNrIHRoZSB2ZXJzaW9uIDEuMCBhbmQgbG9va2luZyBmb3IgeHNkOnNjaGVtYSBlbGVtZW50IGZvciBuZXh0IHByb2Nlc3MuCi0gICAqIEBwYXJhbSBpbXBvcnROb2RlIHhzZCBzY2hlbWEKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWRTY2hlbWEoTm9kZSBpbXBvcnROb2RlLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBpbXBvcnROb2RlOwotICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLSAgICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgIFN0cmluZyBkZWNsID0KLSAgICAgICAgICByZWFkWE1MRGVjbGFyYXRpb25TdGF0ZW1lbnQoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgICAgIGlmICghdmFsaWRWZXJzaW9uKGRlY2wpKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpOwotICAgICAgICAgIGVycm9ycy5hZGQoKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIik7Ci0gICAgICAgIH0KLSAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBwcm9jZXNzU2NoZW1hKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwKLSAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgdGhlcmUgaXMgb25seSB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSwgdGhlIGltcG9ydCByZWxhdGVzIHRvIGlubGluZSBzY2hlbWEKLSAgICBlbHNlIGlmIChYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZWFkcyBhbiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotICAqIEBwYXJhbSBsb2NhdGlvbgotICAqIEByZXR1cm4gU3RyaW5nCi0gICovCi0gIHByaXZhdGUgU3RyaW5nIHJlYWRYTUxEZWNsYXJhdGlvblN0YXRlbWVudChTdHJpbmcgbG9jYXRpb24sIFN0cmluZyBiYXNlVVJJKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBub3RoaW5nCi0gICAgICBpbnQgaSA9IGJhc2VVUkkubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgIGludCBqID0gYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICAgIGlmIChqID4gaSkKLSAgICAgICAgaSA9IGo7Ci0gICAgICBsb2NhdGlvbiA9IGJhc2VVUkkuc3Vic3RyaW5nKDAsIGkgKyAxKSArIGxvY2F0aW9uOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHdlIHNob3VsZCB0cnkgdG8gYWNjZXNzIGxvY2F0aW9uIGFzIGZpbGUKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcih1cmwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEZpbGVJbnB1dFN0cmVhbShsb2NhdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0KLSAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIShjaGFyQ29kZSA9PSAnPCcpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAnPCcpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICFlbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotCi0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVzdWx0IGRvZXMgbm90IGdldCBwcm9wb2dhdGVkIGJhY2shCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHRoZSBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LiI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qCi0gICAqIEBwYXJhbSB4bWxEZWNsIC0geG1sIGRlY2xhcmF0aW9uCi0gICAqIEByZXR1cm4gaWYgeG1sIGRlY2xhcmF0aW9uIGNvbnRhaW5zIHZlcnNpb249IjEuMCIgaXQgcmV0aXJucyB0cnVlLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkVmVyc2lvbihTdHJpbmcgeG1sRGVjbCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsCi0gICAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAgICAgRW51bWVyYXRpb24gdG9rZW5zID0gc3QucGFyc2UoeG1sRGVjbCk7Ci0gICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gICAgICB3aGlsZSAodG9rZW5zLmhhc01vcmVFbGVtZW50cygpICYmICFmb3VuZCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKHRva2VuLmVxdWFsc0lnbm9yZUNhc2UoVkVSU0lPTl9UT0tFTikpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgdmVyID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0KLSAgICAgICAgICByZXN1bHQgPSBWRVJTSU9OLmVxdWFscyh2ZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qCi0gICAqIEl0J3MgbG9raW5nIGZvciB4c2QgaW1wb3J0IGFuZCBsb2FkIGl0IGlmIGZpbmQuCi0gICAqIEBwYXJhbSBzY2hlbWEgeHNkIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NjaGVtYShOb2RlIHNjaGVtYSwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotCWlmICgoc2NoZW1hICE9IG51bGwpICYmICghcHJvY2Vzc2VkU2NoZW1hcy5jb250YWlucyhzY2hlbWEpKSkKLQl7Ci0JICBwcm9jZXNzZWRTY2hlbWFzLmFkZChzY2hlbWEpOwotICAgICAgTm9kZSBuID0gc2NoZW1hLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkKLSAgICAgICAgICAmJiBYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0JfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTMzYzFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGwuV1NETFZhbGlkYXRvckltcGwuQmluZGluZ01hdGNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICAqIEJQMjAxMi4KLSAgKiBFeGFtcGxlOgotICAqIAotICAqIDxtZXNzYWdlIG5hbWU9ImdldENvbmZpZ3VyYXRpb25PcHRpb25zUmVxdWVzdCI+Ci0gICogCTxwYXJ0IG5hbWU9InJlZnJlc2giIGVsZW1lbnQ9ImNmZzpyZWZyZXNoIiAvPiAKLSAgKiA8L21lc3NhZ2U+Ci0gICogPHBvcnRUeXBlIG5hbWU9IkNvbmZpZ3VyYXRvclBvcnRUeXBlIj4KLSAgKiAJPG9wZXJhdGlvbiBuYW1lPSJnZXRDb25maWd1cmF0aW9uT3B0aW9ucyI+Ci0gICogCQk8aW5wdXQgbWVzc2FnZT0idG5zOmdldENvbmZpZ3VyYXRpb25PcHRpb25zUmVxdWVzdCIgLz4gCi0gICogCQk8b3V0cHV0IC4uLi4uIC8+IAotICAqIAkJPGZhdWx0IC4uLi4uIC8+IAotICAqIAk8L29wZXJhdGlvbj4KLSAgKiA8L3BvcnRUeXBlPgotICAqIDxiaW5kaW5nIG5hbWU9IkNvbmZpZ3VyYXRvckJpbmRpbmciIHR5cGU9InRuczpDb25maWd1cmF0b3JQb3J0VHlwZSI+Ci0gICogCTxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIgLz4gCi0gICogCTxvcGVyYXRpb24gbmFtZT0iZ2V0Q29uZmlndXJhdGlvbk9wdGlvbnMiPgotICAqCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy56enouY29tL3p6ei53c2RsL2dldENvbmZpZ3VyYXRpb25PcHRpb25zIiAvPiAKLSAgKiAJCTxpbnB1dD4KLSAgKiAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3Lnp6ei5jb20venp6LndzZGwiIC8+IAotICAqIAkJPC9pbnB1dD4KLSAgKiAJCTxvdXRwdXQ+Li4uLi48L291dHB1dD4KLSAgKgkJPGZhdWx0Pi4uLi4uLjwvZmF1bHQ+Ci0gICogCTwvb3BlcmF0aW9uPgotICAqIDwvYmluZGluZz4KLSAgKiAKLSAgKiBBYm92ZSwgdGhlIHRlc3QgZm9yIHRoaXMgYXNzZXJ0aW9uIG1pZ2h0IGJlIHRoYXQgdGhlIGVsZW1lbnQgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBpbiB0aGUgInJlZnJlc2giIAotICAqIHBhcnQgb2YgdGhlIGdldENvbmZpZ3VyYXRpb25PcHRpb25zUmVxdWVzdCBtZXNzYWdlLiAKLSAgKiAKLSAgKiBDb250ZXh0IDogZm9yIDxiaW5kaW5nPiAiQ29uZmlndXJhdG9yQmluZGluZyIsIDxzb2FwOmJpbmRpbmc+IHN0eWxlPWRvY3VtZW50OyA8c29hcDpib2R5PiB1c2U9bGl0ZXJhbAotICAqIGZvciB0aGUgPGlucHV0PiBvZiBiaW5kaW5nIG9wZXJhdGlvbiAiZ2V0Q29uZmlndXJhdGlvbk9wdGlvbnMiLiAKLSAgKiAoPGlucHV0PiBpcyBhbiBleGFtcGxlLiBDb3VsZCBiZSA8b3V0cHV0PiBvciA8ZmF1bHQ+IGVxdWFsbHkpLgotICAqIEFjdGlvbjogY2hlY2sgdGhlIHBhcnQocykgb2YgdGhlIG1lc3NhZ2Ugc3BlY2lmaWVkIGluIHRoZSA8aW5wdXQ+IGVsZW1lbnQgKGluIGV4YW1wbGUpIG9mIHRoZSA8cG9ydFR5cGU+LAotICAqIG5hbWVseSB0bnM6Z2V0Q29uZmlndXJhdGlvbk9wdGlvbnNSZXF1ZXN0LCB0aGF0IHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQuIEluIHRoaXMgY2FzZSB3ZSBoYXZlCi0gICogPHBhcnQgbmFtZT0icmVmcmVzaCIgZWxlbWVudD0iY2ZnOnJlZnJlc2giIC8+LCBzbyB0aGUgdGVzdCBwYXNzZXMuCi0gICogQWxsIHN1Y2ggcGFydHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhc3NlcnRpb24gY2FuZGlkYXRlIGJpbmRpbmcocykgbXVzdCBiZSBzaW1pbGFybHkgY2hlY2tlZCBmb3IgdGhpcyBhc3NlcnRpb24KLSAgKiB0byBwYXNzLgotICAqLwotcHVibGljIGNsYXNzIEJQMjAxMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGJpbmRpbmcgZnJvbSBlbnRyeSBjb250ZXh0Ci0KLSAgICAvLyBPbGVnJ3MgJiBHcmFoYW0ncyB2ZXJzaW9uOgotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gdG8gdXNlIG9yaWdpbmFsIHZlcnNpb24gcmVxdWlyZSBhIGJpbmRpbmcgYXJyYXkKLSAgICAvL0JpbmRpbmdbXSBiaW5kaW5nID0geyhCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpfTsKLQotICAgIC8vIGdldCBsaXN0IG9mIGNhbmRpZGF0ZSBtYXRjaGVzCi0gICAgQmluZGluZ01hdGNoW10gYmluZGluZ01hdGNoID0KLSAgICAgIHRoaXMudmFsaWRhdG9yLmdldEJpbmRpbmdNYXRjaGVzKAotICAgICAgICBiaW5kaW5nLAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DLAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCk7Ci0gICAgaWYgKGJpbmRpbmdNYXRjaC5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvci5jaGVja1BhcnRBdHRyaWJ1dGVzKGJpbmRpbmdNYXRjaCwgInVzZUlucHV0IiwgInVzZUVsZW1lbnQiKQotICAgICAgICAgIHx8ICF0aGlzLnZhbGlkYXRvci5jaGVja1BhcnRBdHRyaWJ1dGVzKGJpbmRpbmdNYXRjaCwgInVzZU91dHB1dCIsICJ1c2VFbGVtZW50IikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiZGlhZ25vc3RpYzogaW50ZXJuYWwgcHJvY2Vzc2luZyBlcnJvciEiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCwgYmluZGluZyk7Ci0gICAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5M2EzNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsLkJpbmRpbmdNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAxMy4KLSAqIFRoZSBiaW5kaW5nIChpbiBzb2FwYmluZDpib2R5IGVsZW1lbnRzKSBvbmx5IHJlZmVycyB0byBwYXJ0IGVsZW1lbnRzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmcgdGhlICJ0eXBlIiBhdHRyaWJ1dGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotICogQGF1dGhvciBWaXRhbGkgRmVkb3NlbmtvCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGJpbmRpbmcgZnJvbSBlbnRyeSBjb250ZXh0Ci0KLSAgICAvLyBPbGVnJ3MgJiBHcmFoYW0ncyB2ZXJzaW9uOgotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gdG8gdXNlIG9yaWdpbmFsIHZlcnNpb24gcmVxdWlyZSBhIGJpbmRpbmcgYXJyYXkKLSAgICAvL0JpbmRpbmdbXSBiaW5kaW5nID0geyhCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpfTsKLQotICAgIC8vIGdldCBsaXN0IG9mIGNhbmRpZGF0ZSBtYXRjaGVzCi0gICAgQmluZGluZ01hdGNoW10gYmluZGluZ01hdGNoID0KLSAgICAgIHRoaXMudmFsaWRhdG9yLmdldEJpbmRpbmdNYXRjaGVzKAotICAgICAgICBiaW5kaW5nLAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCk7Ci0gICAgaWYgKGJpbmRpbmdNYXRjaC5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvci5jaGVja1BhcnRBdHRyaWJ1dGVzKGJpbmRpbmdNYXRjaCwgInVzZUlucHV0IiwgInVzZVR5cGUiKQotICAgICAgICAgIHx8ICF0aGlzLnZhbGlkYXRvci5jaGVja1BhcnRBdHRyaWJ1dGVzKGJpbmRpbmdNYXRjaCwgInVzZU91dHB1dCIsICJ1c2VUeXBlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiZGlhZ25vc3RpYzogaW50ZXJuYWwgcHJvY2Vzc2luZyBlcnJvciEiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCwgYmluZGluZyk7Ci0gICAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMTA4ODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjAxNC4KLSAqIENvbnRleHQ6Ci0gKiBGb3IgYSBjYW5kaWRhdGUgd3NkbDpvcGVyYXRpb24sIGlmIHJlZmVycmVkIHRvIGJ5IGEgY2FuZGlkYXRlIHJwYy1saXRlcmFsIHdzZGw6YmluZGluZyBlbGVtZW50Ci0gKiBJZiB0aGUgcGFyYW1ldGVyT3JkZXIgYXR0cmlidXRlIGlzIHByZXNlbnQsIGl0IG9taXRzIGF0IG1vc3QgMSBwYXJ0IGZyb20gb3V0cHV0IHdzZGw6bWVzc2FnZS4KLSAqKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyoKLSAgICogQHBhcmFtIGJpbmRpbmcgLSBiaW5kaW5nCi0gICAqIEByZXR1cm4gSXQgcmV0dXJucyBzdHlsZSBvZiBzb2FwIGJpbmRpbmcgb2YgYmluZGluZy4gSWYgc3R5bGUgb21pdHRlZCByZXR1cm5zICJkb2N1bWVudCIgc3R5bGUuICAgCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRTT0FQQmluZGluZ1N0eWxlKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyBzdHlsZSA9IG51bGw7Ci0gICAgTGlzdCBsaXN0ID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgaWYgKGxpc3QuZ2V0KGkpIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICB7Ci0gICAgICAgIHN0eWxlID0gKChTT0FQQmluZGluZykgbGlzdC5nZXQoaSkpLmdldFN0eWxlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLSAgICByZXR1cm4gc3R5bGU7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0gbGlzdCAtIExpc3Qgb2YgZXh0ZW5jaWJpbGl0eSBlbGVtZW50cyBmcm9tIGJpbmRpbmcgb3V0cHV0Ci0gICAqIEByZXR1cm4gZmlyc3Qgc29hcCBib2R5IGluIGxpc3QuCi0gICAqLwotICBwcml2YXRlIFNPQVBCb2R5IGdldFNPQVBCb2R5KExpc3QgbGlzdCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykKLSAgICAgIGlmIChsaXN0LmdldChpKSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgICByZXR1cm4gKFNPQVBCb2R5KSBsaXN0LmdldChpKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qCi0gICAqIEBwYXJhbSBsaXN0IC0gTGlzdCBvZiBleHRlbmNpYmlsaXR5IGVsZW1lbnRzIG9mIGJpbmRpbmcgb3BlcmF0aW9uCi0gICAqIEByZXR1cm4gRmlyc3Qgc29hcCBvcGVyYXRpb24gaW4gbGlzdC4KLSAgICovCi0gIHByaXZhdGUgU09BUE9wZXJhdGlvbiBnZXRTT0FQT3BlcmF0aW9uKExpc3QgbGlzdCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykKLSAgICAgIGlmIChsaXN0LmdldChpKSBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICAgIHJldHVybiAoU09BUE9wZXJhdGlvbikgbGlzdC5nZXQoaSk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAgICAgICAgICAKLSAgICogQHBhcmFtIG9wZXIgLSBvcGVyYXRpb24KLSAgICogQHBhcmFtIGJpbmRpbmcgLSBiaW5kaW5nCi0gICAqIEByZXR1cm4gaWYgc3R5bGUgb2Ygc29hcCBiaW5kaW5nIG9mIGJpbmRpbmcgaXMgcnBjIGFuZCB1c2Ugb2Ygc29hcCBib2R5IG9mIGJpbmRpbmcgb3V0cHV0IG9mIGJpbmRpbmcgb3BlcmF0aW9uIGlzIGxpdGVyYWwgdGhlbiBpdCByZXR1cm5zIHRydWUuIAotICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tScGNMaXRlcmFsKEJpbmRpbmdPcGVyYXRpb24gb3BlciwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gb3Blci5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBTT0FQT3BlcmF0aW9uIHNvcCA9IGdldFNPQVBPcGVyYXRpb24obGlzdCk7Ci0gICAgaWYgKHNvcCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoc29wLmdldFN0eWxlKCkgPT0gbnVsbAotICAgICAgICA/IGdldFNPQVBCaW5kaW5nU3R5bGUoYmluZGluZykKLSAgICAgICAgOiBzb3AuZ2V0U3R5bGUoKSk7Ci0gICAgaWYgKCFzdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbGlzdCA9IG9wZXIuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIFNPQVBCb2R5IGJvZHkgPSBnZXRTT0FQQm9keShsaXN0KTsKLSAgICBpZiAoYm9keSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyB1c2UgPSBib2R5LmdldFVzZSgpOwotICAgIGlmICh1c2UgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB1c2UuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKTsKLSAgfQotCi0gIC8qIEl0IGNoZWNrcyBvcGVyYXRpb24gY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwYXJ0IGluIHBhcmFtZXRlciBvcmRlciAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKTsKLSAgICBpZiAob2JqLmdldFBhcmFtZXRlck9yZGVyaW5nKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChiaW5kaW5ncyA9PSBudWxsIHx8IG9iaiA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG9iai5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG9iai5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBlYWNoIGJpbmRpbmcKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIExpc3QgbGlzdCA9IGJpbmRpbmdzW2ldLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgICAvLyBGb3IgZWFjaCBiaW5kaW5nIG9wZXJhdGlvbgotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXIgPSAoQmluZGluZ09wZXJhdGlvbikgbGlzdC5nZXQoaik7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGlucHV0IG9wZXJhdGlvbiBuYW1lIGFuZCBiaW5kaW5nIG9wZXJhdGlubyBuYW1lIGFyZSBub3QgbnVsbAotICAgICAgICBpZiAob2JqLmdldE5hbWUoKSAhPSBudWxsICYmIG9wZXIuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiB0aGUgb3BlcmF0aW9uIG5hbWVzIGFyZSBlcXVhbAotICAgICAgICAgIGlmIChvYmouZ2V0TmFtZSgpLmVxdWFscyhvcGVyLmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgdGhlIG9wZXJhdGlvbiBpcyBSUEMgbGl0ZXJhbAotICAgICAgICAgICAgaWYgKGNoZWNrUnBjTGl0ZXJhbChvcGVyLCBiaW5kaW5nc1tpXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBwYXJ0cyBpbiB0aGUgcGFyYW1ldGVyT3JkZXIgYXR0cmlidXRlCQkJCQotICAgICAgICAgICAgICBMaXN0IHBhcnRzID0gb2JqLmdldFBhcmFtZXRlck9yZGVyaW5nKCk7Ci0KLSAgICAgICAgICAgICAgT3V0cHV0IG91dHB1dCA9IG51bGw7Ci0gICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7Ci0gICAgICAgICAgICAgIE1hcCBtZXNzYWdlUGFydHMgPSBudWxsOwotCi0gICAgICAgICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBwYXJ0cyBmb3IgdGhlIG91dHB1dCBtZXNzYWdlCi0gICAgICAgICAgICAgIGlmICgob3V0cHV0ID0gb2JqLmdldE91dHB1dCgpKSAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChtZXNzYWdlID0gb3V0cHV0LmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBtZXNzYWdlUGFydHMgPSBtZXNzYWdlLmdldFBhcnRzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHBhcnRzIGluIHRoZSBwYXJhbWV0ZXJPcmRlciBhdHRyaWJ1dGUgCi0gICAgICAgICAgICAgIC8vIGFuZCB0aGVyZSBhcmUgb3V0cHV0IG1lc3NhZ2UgcGFydHMsIHRoZW4gcHJvY2VzcyBhc3NlcnRpb24KLSAgICAgICAgICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgbWVzc2FnZVBhcnRzICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcGFydENvdW50ID0gMDsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZTsKLSAgICAgICAgICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBHZXQgcGFydCBuYW1lIGZyb20gcGFyYW1ldGVyT3JkZXIgbGlzdAotICAgICAgICAgICAgICAgICAgcGFydE5hbWUgPSAoU3RyaW5nKSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGVhY2ggb3V0cHV0IG1lc3NhZ2UgcGFydCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaAotICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VQYXJ0cy5jb250YWluc0tleShwYXJ0TmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcnRDb3VudCsrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgocGFydENvdW50ID09IG1lc3NhZ2VQYXJ0cy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICB8fCAocGFydENvdW50ID09IG1lc3NhZ2VQYXJ0cy5zaXplKCkgLSAxKSkKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKG9iai5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgY3R4LmNhbmNlbE9wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKE9wZXJhdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICBlcnJvcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQsCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0gICAgfQotICAgIC8vZWxzZQotICAgIC8vICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZjQ1OTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyMDE3LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgInN0eWxlIiBhdHRyaWJ1dGUgb2YgZWFjaCBvcGVyYXRpb24gaW4gdGhlIGNvbnRhaW5lZCBzb2FwOmJpbmRpbmcgaGFzIHRoZSBzYW1lIHZhbHVlIG9mICJkb2N1bWVudCIgb3IgInJwYyIsIGZvciBhbGwgb3BlcmF0aW9ucyBvZiB0aGUgd3NkbDpiaW5kaW5nLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy9TdHJpbmcgZmlyc3RTdHlsZSA9IG51bGw7IC8vIEdUOiBpcyB0aGlzIG5lZWRlZD8/Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgICB9Ci0gICAgU09BUEJpbmRpbmcgc29hcEIgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLSAgICBpZiAoc29hcEIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTGlzdCk7Ci0gICAgfQotICAgIFN0cmluZyBzdHlsZUIgPQotICAgICAgKHNvYXBCLmdldFN0eWxlKCkgPT0gbnVsbAotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBzb2FwQi5nZXRTdHlsZSgpKTsKLQotICAgIC8vIFRyeSB0byBnZXQgdGhlIFNPQVAgb3BlcmF0aW9ucwotICAgIEhhc2hNYXAgc29hcE9wZXJhdGlvbkxpc3QgPSB2YWxpZGF0b3IuZ2V0U29hcE9wZXJhdGlvbnMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcE9wZXJhdGlvbkxpc3QuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayB0aGF0IHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgc3R5bGUgZWxlbWVudCB2YWx1ZQotICAgICAgU3RyaW5nIHN0eWxlID0gbnVsbDsKLSAgICAgIFN0cmluZyBjaGVja1N0eWxlOwotICAgICAgU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uOwotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzb2FwT3BlcmF0aW9uTGlzdC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgc29hcE9wZXJhdGlvbiA9IChTT0FQT3BlcmF0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGNoZWNrU3R5bGUgPSBzb2FwT3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgICAgIGlmIChjaGVja1N0eWxlID09IG51bGwpCi0gICAgICAgICAgY2hlY2tTdHlsZSA9IHN0eWxlQjsKLSAgICAgICAgaWYgKGNoZWNrU3R5bGUgIT0gbnVsbAotICAgICAgICAgICYmICFjaGVja1N0eWxlLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DKQotICAgICAgICAgICYmICFjaGVja1N0eWxlLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZCgKLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJPcGVyYXRpb24gTmFtZTogIgotICAgICAgICAgICAgICAgICsgc29hcE9wZXJhdGlvbkxpc3QuZ2V0KHNvYXBPcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgKyAiXG5TT0FQIE9wZXJhdGlvbjogIgotICAgICAgICAgICAgICAgICsgc29hcE9wZXJhdGlvbi50b1N0cmluZygpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQsCi0gICAgICAgICAgICAgIHNvYXBPcGVyYXRpb24pKTsKLSAgICAgICAgICAvLyBSRU1PVkU6IE5lZWQgdG8gcHJvY2VzcyBhbGwgb3BlcmF0aW9ucwotICAgICAgICAgIC8vYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHN0eWxlID0gY2hlY2tTdHlsZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICghc3R5bGUuZXF1YWxzKGNoZWNrU3R5bGUpIHx8ICFzdHlsZS5lcXVhbHMoc3R5bGVCKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZCgKLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJPcGVyYXRpb24gTmFtZTogIgotICAgICAgICAgICAgICAgICsgc29hcE9wZXJhdGlvbkxpc3QuZ2V0KHNvYXBPcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgKyAiXG5TT0FQIE9wZXJhdGlvbjogIgotICAgICAgICAgICAgICAgICsgc29hcE9wZXJhdGlvbi50b1N0cmluZygpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQsCi0gICAgICAgICAgICAgIHNvYXBPcGVyYXRpb24pKTsKLSAgICAgICAgICAvLyBSRU1PVkU6IE5lZWQgdG8gcHJvY2VzcyBhbGwgb3BlcmF0aW9ucwotICAgICAgICAgIC8vYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIHN0eWxlIGF0dHJpYnV0ZSB3YXMgZm91bmQgaW4gdGhlIFNPQVAgb3BlcmF0aW9uKHMpIG9mIHRoZSBiaW5kaW5nLgotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQ2N2NkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQMjAxOC4gCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgV2ViIHNlcnZpY2UgZGVmaW5pdGlvbjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgd3NkbDp0eXBlcyBlbGVtZW50IG9jY3VycyBlaXRoZXIgYXMgdGhlIGZpcnN0IGNoaWxkIGluIHRoZSBXU0RMIG5hbWVzcGFjZSBvZiB0aGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IGlmIG5vIHdzZGw6ZG9jdW1lbnRhdGlvbiBvciB3c2RsOmltcG9ydCBlbGVtZW50IGlzIHByZXNlbnQ7IG9yIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQocykgaWYgdGhleSBhcmUgcHJlc2VudCBidXQgd3NkbDppbXBvcnQocykgYXJlIG5vdCwgb3IgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGJvdGggdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBhbmQgd3NkbDppbXBvcnQgZWxlbWVuKHMpIGlmIHByZXNlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjAxOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoKLSAgICogQHBhcmFtIGVsIC0geG1sIGVsZW1lbnQKLSAgICogQHJldHVybiBpZiBlbGVtZW50IGlzIGV4dGVuc2liaWxpdHkgZWxlbWVudCByZXR1cm5zIHRydWUuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNFeHRlbnNpYmlsaXR5RWxlbWVudChFbGVtZW50IGVsKQotICB7Ci0gICAgYm9vbGVhbiBpc0V4ID0gdHJ1ZTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0JJTkRJTkcpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfREVGSU5JVElPTlMpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTik7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9GQVVMVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU5QVVQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfTUVTU0FHRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9PUEVSQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1VUUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BBUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QT1JUVFlQRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9TRVJWSUNFKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1RZUEVTKTsKLQotICAgIHJldHVybiBpc0V4OwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPQotICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUGFyc2UgdGhlIFdTREwgZG9jdW1lbnQgYXMgYW4gWE1MIGZpbGUKLSAgICAgIERvY3VtZW50IGRvYyA9Ci0gICAgICAgIHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG51bGwpOwotCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7IC8vIGdldCBkZWZpbml0aW9uCi0KLSAgICAgIEVsZW1lbnQgdHlwZXMgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KChFbGVtZW50KSByb290LCBXU0RMX1RZUEVTKTsKLQotICAgICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKHR5cGVzKTsKLSAgICAgICAgd2hpbGUgKGVsICE9IG51bGwpCi0JCXsKLSAgICAgICAgICBpZiAoIWlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWwpICYmCi0JCQkgICAoKCFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKSkgJiYKLQkJCSAgICAoIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9ET0NVTUVOVEFUSU9OKSkpKQotCQkgIHsKLQkJICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCQkJU3RyaW5nIG1lc3NhZ2UgPSAiVGhlICIgKyBlbC5nZXRMb2NhbE5hbWUoKSArICIgZWxlbWVudCBtdXN0IG5vdCBwcmVjZWRlIHRoZSB0eXBlcyBlbGVtZW50LiI7Ci0JCSAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChtZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAJCSAgICBicmVhazsKLQkJICB9Ci0gICAgICAgICAgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGVsKTsKLQkJfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGRvY3VtZW50IGF0ICIKLSAgICAgICAgICAgICsgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKQotICAgICAgICAgICAgKyAiLlxuXG4iCi0gICAgICAgICAgICArIFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHModCksCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTY3MGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi0KLS8qKgotICogQlAyMDE5LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCBpZiB0aGUgY29udGFpbmVkIHNvYXA6YmluZGluZyBlbGVtZW50IGhhcyBhICJzdHlsZSIgYXR0cmlidXRlIGVxdWFsIHRvICJkb2N1bWVudCIgYW5kIHNvYXA6b3BlcmF0aW9ucyBoYXZlICJ1c2UiIGF0dHJpYnV0ZSBlcXVhbCB0byAibGl0ZXJhbCI6PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSAibmFtZXNwYWNlIiBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpbiBhbnkgY29udGFpbmVkIHNvYXBiaW5kOmJvZHksIHNvYXBiaW5kOmhlYWRlciwgc29hcGJpbmQ6OmhlYWRlcmZhdWx0LCBzb2FwYmluZDpmYXVsdCBlbGVtZW50cyA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotICogQGF1dGhvciBWaXRhbGkgRmVkb3NlbmtvCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIGRvY0xpdEZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIGVycmFudEVsZW1lbnRzID0gbmV3IFN0cmluZygiIik7Ci0gICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIFRyeSB0byBnZXQgdGhlIFNPQVAgYmluZGluZwotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgICAoc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogc29hcEJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICAgIGlmIChzdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQykpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBzb2FwRWxlbWVudHMgPSBVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBCb2RpZXMoYmluZGluZykpOwotICAgICAgICBzb2FwRWxlbWVudHMuYWRkQWxsKFV0aWxzLmFycmF5VG9WZWN0b3IodGhpcy52YWxpZGF0b3IuZ2V0U29hcEZhdWx0cyhiaW5kaW5nKSkpOwotICAgICAgICBzb2FwRWxlbWVudHMuYWRkQWxsKFV0aWxzLmFycmF5VG9WZWN0b3IodGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlcnMoYmluZGluZykpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbCgKLSAgICAgICAgICBVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBIZWFkZXJGYXVsdHMoYmluZGluZykpKTsKLQotICAgICAgICBJdGVyYXRvciBpID0gc29hcEVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IHNvYXBFbGVtZW50ID0KLSAgICAgICAgICAgIChFeHRlbnNpYmlsaXR5RWxlbWVudCkgKGkubmV4dCgpKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNMaXRlcmFsKHNvYXBFbGVtZW50KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jTGl0Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0b3IubmFtZXNwYWNlRm91bmRJblNvYXBMaXRlcmFsKHNvYXBFbGVtZW50KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVycmFudEVsZW1lbnRzICs9ICJcbi0tLSAiICsgKHNvYXBFbGVtZW50LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfSAvLyBjb250aW51ZSB3aXRoIGNsZW5jaGVkIHRlZXRoCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRvY0xpdEZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBJZiBhIG5hbWVzcGFjZSB3YXMgbm90IGZvdW5kIHRoZW4gdGVzdCBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoZXJyYW50RWxlbWVudHMubGVuZ3RoKCkgIT0gMCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAiRmFpbGluZyBlbGVtZW50czoiICsgZXJyYW50RWxlbWVudHMsCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4YmY5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuVVJJLk1hbGZvcm1lZFVSSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0qIEJQMjAyMC4KLSogICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCBpZiB0aGUgc3R5bGUgYXR0cmlidXRlIG9mIHRoZSBjb250YWluZWQgc29hcGJpbmQ6YmluZGluZyBpcyAicnBjIiAKLSogICAgICAgYW5kIHRoZSB1c2UgYXR0cmlidXRlIGlzICJsaXRlcmFsIi48L2NvbnRleHQ+Ci0qICAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gYWxsIHNvYXBiaW5kOmJvZHkgZWxlbWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgCi0qIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgYW4gYWJzb2x1dGUgVVJJLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0qIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotKiovCi1wdWJsaWMgY2xhc3MgQlAyMDIwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIGJvb2xlYW4gcnBjTGl0Rm91bmQgPSBmYWxzZTsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIHN0eWxlIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHJwYyAtIHRoZSBzdWJqZWN0IG9mIHRoZSBhc3NlcnRpb24KLSAgICBTdHJpbmcgc3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgICAgc3R5bGUgPQotICAgICAgICAoc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsCi0gICAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgICAgOiBzb2FwQmluZGluZy5nZXRTdHlsZSgpKTsKLQotICAgIGlmICgoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICAgICYmIChzdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQykpKQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBTT0FQIGJvZHkgZWxlbWVudHMKLSAgICAgIFNPQVBCb2R5W10gc29hcEJvZGllcyA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBCb2RpZXMoYmluZGluZyk7Ci0KLSAgICAgIC8vIENoZWNrIGZvciBTb2FwIG9wZXJhdGlvbiBuYW1lc3BhY2UKLSAgICAgIGJvb2xlYW4gYXNzZXJ0aW9uRmFpbHVyZSA9IGZhbHNlOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IG51bGw7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBCb2RpZXMubGVuZ3RoICYmICEoYXNzZXJ0aW9uRmFpbHVyZSk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBzb2FwQm9kaWVzW2ldOwotICAgICAgICAvLyBBZGRlZCBjaGVjayBmb3IgbnVsbCB1c2UgdmFsdWUsIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGxpdGVyYWwKLSAgICAgICAgaWYgKHNvYXBCb2R5LmdldFVzZSgpID09IG51bGwKLSAgICAgICAgICB8fCBzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgICB7Ci0gICAgICAgICAgcnBjTGl0Rm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSwgdGhlbiBmbGFnIGFzIGEgZmFpbHVyZQotICAgICAgICAgIGlmICgobmFtZXNwYWNlVVJJID0gc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkpID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0aW9uRmFpbHVyZSA9IHRydWU7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAiLS0tIFNPQVAgQk9EWTpcbiIKLSAgICAgICAgICAgICAgICAgICsgc29hcEJvZHkudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgKyAiXG4tLS0gQklORElORyBRTkFNRTpcbiIKLSAgICAgICAgICAgICAgICAgICsgYmluZGluZy5nZXRRTmFtZSgpLAotICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gRWxzZSwgdmVyaWZ5IHRoYXQgdGhlIG5hbWVzcGFjZSBpcyBhbiBhYnNvbHV0ZSBVUkkKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vVVJMIHVybCA9IG5ldyBVUkwobmFtZXNwYWNlVVJJKTsKLSAgICAgICAgICAgICAgVVJJIHVyaSA9IG5ldyBVUkkobmFtZXNwYWNlVVJJKTsKLSAgICAgICAgICAgICAgaWYgKHVyaS5nZXRTY2hlbWUoKSA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gbm8gc2NoZW1lIGltcGxpZXMgbm90IGFuIGFic29sdXRlIFVSSQotICAgICAgICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICAgIi0tLSBTT0FQIEJPRFk6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgKyBzb2FwQm9keS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXG4tLS0gQklORElORyBRTkFNRTpcbiIKLSAgICAgICAgICAgICAgICAgICAgICArIGJpbmRpbmcuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSSUV4Y2VwdGlvbiBtdWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmUgPSB0cnVlOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgIi0tLSBTT0FQIEJPRFk6XG4iCi0gICAgICAgICAgICAgICAgICAgICsgc29hcEJvZHkudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICArICJcbi0tLSBCSU5ESU5HIFFOQU1FOlxuIgotICAgICAgICAgICAgICAgICAgICArIGJpbmRpbmcuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghcnBjTGl0Rm91bmQpCi0gICAgICB7Ci0gICAgICAgIC8vIHN0eWxlIGlzIHJwYyBidXQgbm8gZG9jdW1lbnQgdXNlIGVsZW1lbnRzCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIWFzc2VydGlvbkZhaWx1cmUpCi0gICAgICB7IC8vIElmIG5vIGFzc2VydGlvbiBmYWlsdXJlLCB0aGVuIHNldCByZXN1bHQgdG8gcGFzc2VkCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIHN0eWxlIGlzIG5vdCBycGMKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNTA4NmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci0KLQotLyoqCi0qICBCUDIwMjEuCi0qICAgICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0qICAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6aW5wdXQgZWxlbWVudCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudCBvZiBlYWNoIG9wZXJhdGlvbiB1c2VzIHRoZSBhdHRyaWJ1dGUgbmFtZSAicGFydCIgd2l0aCBhIFNjaGVtYSB0eXBlIG9mICJOTVRPS0VOIiBhbmQgZG9lcyBub3QgdXNlICJwYXJ0cyIsIGZvciBib3RoIHNvYXBiaW5kOmhlYWRlciBlbGVtZW50cyBhbmQgc29hcGJpbmQ6aGVhZGVyZmF1bHQgZWxlbWVudHMuIDwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0qCi0qIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSogQGF1dGhvciBWaXRhbGkgRmVkb3NlbmtvCi0qKi8KLXB1YmxpYyBjbGFzcyBCUDIwMjEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMjEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy9PcGVyYXRpb24gb3BlcmF0aW9uID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXJzIGZvciB0aGlzIGJpbmRpbmcKLSAgICBTT0FQSGVhZGVyW10gc29hcEhlYWRlcnMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVycyhiaW5kaW5nKTsKLQotICAgIGlmIChzb2FwSGVhZGVycy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gQ2hlY2sgZWFjaCBoZWFkZXIgdG8gc2VlIGlmIGl0IGhhcyBwYXJ0IGVsZW1lbnQgd2l0aCBOTVRPS0VOIHR5cGUKLSAgICAgIGZvciAoaW50IGhlYWRlciA9IDA7Ci0gICAgICAgIGhlYWRlciA8IHNvYXBIZWFkZXJzLmxlbmd0aAotICAgICAgICAgICYmIHJlc3VsdC5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQpOwotICAgICAgICBoZWFkZXIrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKChzb2FwSGVhZGVyc1toZWFkZXJdLmdldFBhcnQoKSA9PSBudWxsKQotICAgICAgICAgIHx8ICghWE1MVXRpbHMuaXNObXRva2VuKHNvYXBIZWFkZXJzW2hlYWRlcl0uZ2V0UGFydCgpKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoc29hcEhlYWRlcnNbaGVhZGVyXS50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UsIGNoZWNrIHRoZSBoZWFkZXJmYXVsdCBpZiB0aGVyZSBpcyBvbmUKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdCBzb2FwSGVhZGVyRmF1bHRMaXN0ID0KLSAgICAgICAgICAgIHNvYXBIZWFkZXJzW2hlYWRlcl0uZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc29hcEhlYWRlckZhdWx0TGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgLy8gQ2hlY2sgZWFjaCBoZWFkZXIgZmF1bHQgdG8gc2VlIGlmIGl0IGhhcyBwYXJ0IGVsZW1lbnQgd2l0aCBOTVRPS0VOIHR5cGUKLSAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpCi0gICAgICAgICAgICAmJiByZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0KLSAgICAgICAgICAgICAgKFNPQVBIZWFkZXJGYXVsdCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgaWYgKChzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpID09IG51bGwpCi0gICAgICAgICAgICAgIHx8ICghWE1MVXRpbHMuaXNObXRva2VuKHNvYXBIZWFkZXJGYXVsdC5nZXRQYXJ0KCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoc29hcEhlYWRlckZhdWx0LnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTQ1ZDdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAgKiBCUDIwMjIuCi0gICogICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICAqICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+dGhlIG5hbWUgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKiovCi1wdWJsaWMgY2xhc3MgQlAyMDIyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBTT0FQIGZhdWx0cyBmb3IgdGhlIGJpbmRpbmcKLSAgICBTT0FQRmF1bHRbXSBzb2FwRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEZhdWx0cyhiaW5kaW5nKTsKLQotICAgIGlmIChzb2FwRmF1bHRzID09IG51bGwgfHwgc29hcEZhdWx0cy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBhbGwgc29hcDpmYXVsdHMuIAotICAgICAgLy8gTVVTVCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc29hcEZhdWx0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHNvYXBGYXVsdHNbaV07Ci0gICAgICAgIGlmIChzb2FwRmF1bHQuZ2V0TmFtZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJzb2FwYmluZDpmYXVsdCBlbGVtZW50IDogIiArIHNvYXBGYXVsdC50b1N0cmluZygpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDM2MGFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyMDIzLgotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQsIHdpdGggdGhlICJ1c2UiIGF0dHJpYnV0ZSBwcmVzZW50IG9uIHRoZSBzb2FwYmluZDpmYXVsdCBlbGVtZW50PC9jb250ZXh0PgotICogICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgaXMgImxpdGVyYWwiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMjMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMjMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIEdldCBsaXN0IG9mIFNPQVAgZmF1bHRzIGZvciB0aGUgYmluZGluZwotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdHMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHRzKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBGYXVsdHMgPT0gbnVsbCB8fCBzb2FwRmF1bHRzLmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGNoZWNrIGFsbCBzb2FwOmZhdWx0cy4gCi0gICAgICAvLyBNVVNUIGhhdmUgYSBuYW1lIGF0dHJpYnV0ZSwgYW5kIGlmIGEgdXNlIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIGl0IE1VU1QgYmUgdmFsdWUgImxpdGVyYWwiCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBzb2FwRmF1bHRzW2ldOwotICAgICAgICBpZiAoKHNvYXBGYXVsdC5nZXRVc2UoKSAhPSBudWxsKQotICAgICAgICAgICYmICghc29hcEZhdWx0Ci0gICAgICAgICAgICAuZ2V0VXNlKCkKLSAgICAgICAgICAgIC5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmQ5NmRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAzMi4KLSAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+dGhlIG5hbWUgYXR0cmlidXRlIHRoYXQgaXMgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpmYXVsdCBlbGVtZW50IG1hdGNoZXMgdGhlIHZhbHVlIHNwZWNpZmllZCBvbiB0aGUgcGFyZW50IGVsZW1lbnQgd3NkbDpmYXVsdC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDMyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBCaW5kaW5nIGZhdWx0cyBmb3IgdGhlIGJpbmRpbmcKLSAgICBCaW5kaW5nRmF1bHRbXSBiaW5kaW5nRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0QWxsQmluZGluZ0ZhdWx0cyhiaW5kaW5nKTsKLQotICAgIGlmIChiaW5kaW5nRmF1bHRzID09IG51bGwgfHwgYmluZGluZ0ZhdWx0cy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gZm9yIGVhY2ggYmluZGluZyBmYXVsdCwgY29tcGFyZSB0aGUgY2hpbGQgc29hcDpmYXVsdCBuYW1lIHdpdGggdGhlIGJpbmRpbmcgZmF1bHQgbmFtZSAKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5nRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gYmluZGluZ0ZhdWx0c1tpXTsKLSAgICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdChiaW5kaW5nRmF1bHQpOwotICAgICAgICBpZiAoc29hcEZhdWx0ID09IG51bGwKLSAgICAgICAgICB8fCBzb2FwRmF1bHQuZ2V0TmFtZSgpID09IG51bGwKLSAgICAgICAgICB8fCBiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpID09IG51bGwKLSAgICAgICAgICB8fCAhYmluZGluZ0ZhdWx0LmdldE5hbWUoKS5lcXVhbHMoc29hcEZhdWx0LmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgc29hcEZhdWx0ID09IG51bGwgPyBudWxsIDogc29hcEZhdWx0LnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDM0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDM0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MTM0NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zY2hlbWEuU2NoZW1hOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEJQMjAzNAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBkZXNjcmlwdGlvbiB3aXRoaW4gYSBXU0RMIGRvY3VtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjYW5kaWRhdGUgZGVzY3JpcHRpb24gZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPiAKLSAqLwotcHVibGljIGNsYXNzIEJQMjAzNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAzNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXR0aW5nIHdzZGw6ZGVmaW5pdGlvbiBlbGVtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBUeXBlcyB0eXBlczsKLSAgICAvLyBHZXR0aW5nIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sCi0gICAgU3RyaW5nIHhtbE5zID0gKFN0cmluZykgZGVmLmdldE5hbWVzcGFjZXMoKS5nZXQoInhtbCIpOwotICAgIC8vIElmIGl0IGV4aXN0cyBhbmQgZXF1YWxzIHRvICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gICAgaWYgKHhtbE5zICE9IG51bGwgJiYgeG1sTnMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfWE1MKSkKLSAgICB7Ci0gICAgICAvLyBzZXR0aW5nIGFzc2VydGlvbiByZXN1bHQgdG8gd2FybmluZwotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgIH0KLSAgICAvLyB0aGVyZSBpcyBubyBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sIGluIHRoZSB3c2RsOmRlZmluaXRpb24KLSAgICAvLyBlbGVtZW50LCBjaGVja2luZyB3aGV0aGVyIHRoZSBkZWZpbml0aW9uIGhhcyB3c2RsOnR5cGUgZWxlbWVudAotICAgIGVsc2UgaWYgKCh0eXBlcyA9IGRlZi5nZXRUeXBlcygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGxpc3Qgb2Ygd3NkbDpzY2hlbWFTCi0gICAgICBMaXN0IGV4dEVsZW1zID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6c2NoZW1hIGVsZW1lbnQKLSAgICAgICAgU2NoZW1hIHNjaGVtYSA9Ci0gICAgICAgICAgKFNjaGVtYSkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBHZXR0aW5nIGEgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB4bWxuczp4bWwKLSAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSA9IHNjaGVtYS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUywgInhtbCIpOwotICAgICAgICAvLyBJZiBpdCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCi0gICAgICAgIGlmIChXU0lDb25zdGFudHMuTlNfVVJJX1hNTC5lcXVhbHMoYXR0clZhbHVlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHNldHRpbmcgYXNzZXJ0aW9uIHJlc3VsdCB0byB3YXJuaW5nCi0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgiVGhlIG5hbWVzcGFjZSAiCi0gICAgICAgICAgICArICJkZWNsYXJhdGlvbiBuZXN0ZWQgaW4gd3NkbDpzY2hlbWEgZWxlbWVudC4iLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDk4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDk4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYjY1M2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjA5OC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLQotCi0vKioKLSAqIEJQMjA5OC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmltcG9ydCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSAibG9jYXRpb24iIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgZm9yIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50LCBhbmQgaGFzIGEgbm9uLWVtcHR5IHZhbHVlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwOTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwOTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgSW1wb3J0IGltID0gKEltcG9ydCkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAvLyBzdXBwb3NlIHRoYXQgaWYgbG9jYXRpb24gaXMgaW52YWxpZCwgdGhlIGRlZmluaXRpb24gZXF1YWxzIHRvIG51bGwKLSAgICBpZiAoaW0uZ2V0TG9jYXRpb25VUkkoKSA9PSBudWxsIHx8IGltLmdldExvY2F0aW9uVVJJKCkgPT0gIiIpCi0gICAgICBlcnJvcnMuYWRkKGltLmdldE5hbWVzcGFjZVVSSSgpLCBpbS5nZXRMb2NhdGlvblVSSSgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNWE3N2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMDEuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb24sIGlmIGl0IGNvbnRhaW5zIHdzZGw6aW1wb3J0IHN0YXRlbWVudHM8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FYWNoIHdzZGw6aW1wb3J0IHN0YXRlbWVudCBpcyBvbmx5IHVzZWQgdG8gaW1wb3J0IGFub3RoZXIgV1NETCBkZXNjcmlwdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIGJvb2xlYW4gaW1wb3J0Rm91bmQgPSBmYWxzZTsKLQotICAvKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBpbXBvcnQgY29udGFpbnMgcmVmZXJlbmNlIHRvIG5vbiBXU0RMIGRlc2NyaXB0aW9uLiAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgdHJ5Ci0gICAgewotICAgIC8vIGJ5IHRoZSB3YXkgOiBXU0RMNEogdGhyb3dzIEV4Y2VwdGlvbiBpZiBpbXBvcnRlZCBXU0RMIGlzIG5vdCByZXNvbHZlZAotICAgIC8vIGJ1dCBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBpbS5nZXREZWZpbml0aW9uKCkgd2lsbCBiZSBlcXVhbCB0byBudWxsCi0gICAgaWYgKGltLmdldERlZmluaXRpb24oKSA9PSBudWxsKQotICAgICAgZXJyb3JzLmFkZCgKLSAgICAgICAgaW0uZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICArICI6IgotICAgICAgICAgICsgaW0uZ2V0TG9jYXRpb25VUkkoKQotICAgICAgICAgICsgIlxuSW1wb3J0IGVsZW1lbnQgZG9lcyBub3QgcmVmZXJlbmNlIGEgV1NETCBkZWZpbml0aW9uLiIpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JzLmFkZCgKLSAgICAgICAgaW0uZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICArICI6IgotICAgICAgICAgICsgaW0uZ2V0TG9jYXRpb25VUkkoKQotICAgICAgICAgICsgIlxuSW1wb3J0IGVsZW1lbnQgZG9lcyBub3QgcmVmZXJlbmNlIGEgV1NETCBkZWZpbml0aW9uLiIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2I1MjA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQsIHdpdGggWE1MIHNjaGVtYSBpbXBvcnQgZWxlbWVudHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBYTUwgc2NoZW1hIGltcG9ydCBzdGF0ZW1lbnQgKHhzZDppbXBvcnQpIGlzIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgZnJvbSBYTUwgbmFtZXNwYWNlICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgYXMgcm9vdCBlbGVtZW50LiAgSXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSBkZWZpbml0aW9uIChlLmcuIFdTREwpLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIHBhcnNlIFdTREwgYXMgWE1MCi0gICAgdHJ5Ci0gICAgewotICAgICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAgIExpc3QgZXh0cyA9IHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgU2NoZW1hCi0gICAgICAgICAgICAmJiBlbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgdGVzdE5vZGUoKChTY2hlbWEpIGVsKS5nZXRFbGVtZW50KCksCi0gICAgICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0KLSAgICAgICAgICBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghaW1wb3J0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIldTREwgZG9jdW1lbnQgY2FuIG5vdCBiZSBwcm9jZXNzZWQiLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIG5vZGUgaXMgeHNkIGltcG9ydCBhbmQgaXQgaXMgCi0gICAqIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgCi0gICAqIGZyb20gWE1MIG5hbWVzcGFjZSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGFzIHJvb3QgZWxlbWVudC4gIAotICAgKiBBbmQgaXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSAKLSAgICogZGVmaW5pdGlvbiAoZS5nLiBXU0RMKS4KLSAgKiBAcGFyYW0gbiAtIFVua25vd24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCB0ZXN0Tm9kZShOb2RlIG4sIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKG4gIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLQl7Ci0gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQobik7ICAgIAkKLQotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgc2NoZW1hTG9jYXRpb24gYW5kIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlcwotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgICAgQXR0ciBuYW1lc3BhY2UgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIG9mIGltcG9ydCBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyBhbGwgdGhlIGlubGluZSBzY2hlbWFzIG9mIHRoZSB3c2RsIGRlZmluaXRpb24KLSAgICAgICAgICAgICAgTWFwIHNjaGVtYXNNYXAgPSB2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldFNjaGVtYXMoKTsKLSAgICAgICAgICAgICAgLy8gSWYgYW4gaW5saW5lIHNjaGVtYSBpbXBvcnRlZCBpcyBkZWZpbmVkCi0gICAgICAgICAgICAgIGlmIChzY2hlbWFzTWFwLmtleVNldCgpLmNvbnRhaW5zKG5hbWVzcGFjZS5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIElmIGFuIGlubGluZSBzY2hlbWEgaW1wb3J0ZWQgaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgIC8vICh0aGF0IG1lYW5zIHRoZSBzY2hlbWEgaXMgdmFsaWQpLAotICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgZWxlbWVudAotICAgICAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBubyBzY2hlbWFMb2NhdGlvbiBzbyB0cnkgdGhlIG5hbWVzcGFjZSAKLSAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24gPSBuYW1lc3BhY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgICAgICAgICAgLy8gISEgQVRURU5USU9OCi0gICAgICAgICAgICAgICAgLy8gcm9vdCBYU0QgU0NIRU1BIFNDSEVNQSBpcyBub3QgdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy9Eb2N1bWVudCBzY2hlbWEgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIFhTRF9TQ0hFTUFMT0NBVElPTiwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGltcG9ydCBpcyB2YWxpZCwgdGhlbiBjaGVjayBpdHMgY29udGVudHMKLSAgICAgICAgICAgICAgICBpZiAoWE1MVXRpbHMKLSAgICAgICAgICAgICAgICAgIC5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGNvbnRlbnQgb2YgaW1wb3J0ZWQgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIHRlc3ROb2RlKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCksCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgICAic2NoZW1hTG9jYXRpb24gPT0gbnVsbCBhbmQgbmFtZXNwYWNlID09IG51bGwiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdGVzdE5vZGUobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWUzNjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogQlAyMTAzLgotICAgKiA8Y29udGV4dD5Gb3IgZWFjaCBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zPC9jb250ZXh0PgotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Rm9yIHRoZSByZWZlcmVuY2VkIGRlZmluaXRpb25zIGFzIHdlbGwgYXMgYWxsIGltcG9ydGVkIAotICAgKiBkZXNjcmlwdGlvbnMsIFRoZSBYTUwgc2NoZW1hIGltcG9ydCBzdGF0ZW1lbnQgaXMgb25seSB1c2VkIHdpdGhpbiBhbiB4c2Q6c2NoZW1hIAotICAgKiBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTAzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogQ2hlY2sgYWxsIHVua25vd24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBpdCBpcyBub3QgeHNkIGltcG9ydC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKGVsIGluc3RhbmNlb2YgU2NoZW1hKQotICAgICAgc2VhcmNoRm9ySW1wb3J0KCgoU2NoZW1hKSBlbCkuZ2V0RWxlbWVudCgpKTsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIC8vcHJvY2Vzc1dTREwoZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldEZpbGVuYW1lKCkpOwotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBub2RlIGlzIHhzZCBpbXBvcnQuIAotICAgKiBAcGFyYW0gbiAtIG5vZGUKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZWFyY2hGb3JJbXBvcnQoTm9kZSBuKQotICB7Ci0gICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBzZWFyY2hlcyBmb3IgeHNkOmltcG9ydCBlbGVtZW50Ci0gICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgewotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBBdHRyIGEgPQotICAgICAgICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgICAgICAgU3RyaW5nIHNjaGVtYUxvY2F0aW9uID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBBVFRSX1hTRF9OQU1FU1BBQ0UpOwotICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgICAgICAgIGVycm9ycy5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgc2NoZW1hTG9jYXRpb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIGlmICghWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBzZWFyY2hGb3JJbXBvcnQobi5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTJmMzY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5OdWxsVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMDQuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmltcG9ydDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB0YXJnZXROYW1lc3BhY2UgYXR0cmlidXRlIG9uIHRoZSB3c2RsOmRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoZSBpbXBvcnRlZCBXU0RMIGRlc2NyaXB0aW9uIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiB0aGUgd3NkbDppbXBvcnQgZWxlbWVudCB0aGF0IGltcG9ydGVkIHRoZSBXU0RMIGRlc2NyaXB0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTA0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydEZvdW5kID0gZmFsc2U7Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgbmFtZXNwYWNlIG9mIHdzZGw6aW1wb3J0IGRvZXMgbm90IGVxdWFsIHRhcmdldG5hbWVzcGFjZSBpbiByZWZlcmVuY2VkIHdzZGwuICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgRGVmaW5pdGlvbiBkZWYgPSBpbS5nZXREZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghTnVsbFV0aWwuZXF1YWxzKGltLmdldE5hbWVzcGFjZVVSSSgpLCBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICBlcnJvcnMuYWRkKAotICAgICAgICAgIG5ldyBRTmFtZShpbS5nZXROYW1lc3BhY2VVUkkoKSwgaW0uZ2V0TG9jYXRpb25VUkkoKSksCi0gICAgICAgICAgbmV3IFFOYW1lKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghaW1wb3J0Rm91bmQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTA0YzZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICAqIEJQMjEwNS4KLSAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Rm9yIHRoZSByZWZlcmVuY2VkIGRlZmluaXRpb25zLCBhcyB3ZWxsIGFzIGFsbCBpbXBvcnRlZCBkZXNjcmlwdGlvbnMsIGluIHRoZSBXU0RMIG5hbWVzcGFjZSB1bmRlciB0aGUgd3NkbDpkZWZpbnRpdGlvbnMgZWxlbWVudCwgdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQgaXMgZWl0aGVyIGRpcmVjdGx5IGFmdGVyIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gZWxlbWVudCBvciBpcyB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBpZiB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgaXMgbm90IHByZXNlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAgKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTA1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydEZvdW5kID0gZmFsc2U7Ci0KLSAgLyogCi0gICAqIENoZWNrIHdzbGQgaW1wb3J0IGVsZW1lbnQgaXMgZWl0aGVyIGRpcmVjdGx5IGFmdGVyIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gZWxlbWVudCAKLSAgICogb3IgaXMgdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgaWYgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50IGlzIG5vdCBwcmVzZW50LgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5JbXBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgaW0sIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpICE9IG51bGwgJiYgaW0uZ2V0TG9jYXRpb25VUkkoKSAhPSBudWxsKQotICAgICAgcHJvY2Vzc1dTREwoaW0uZ2V0RGVmaW5pdGlvbigpLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIGVsZW1lbnQgaXMgZXh0ZW5zaWJpbGl0eS4KLSAgICogQHBhcmFtIGVsIC0geG1sIGVsZW1lbnQKLSAgICogQHJldHVybiBib29sZWFuCi0gICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0V4dGVuc2liaWxpdHlFbGVtZW50KEVsZW1lbnQgZWwpCi0gIHsKLSAgICBib29sZWFuIGlzRXggPSB0cnVlOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfQklORElORyk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9ERUZJTklUSU9OUyk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9ET0NVTUVOVEFUSU9OKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0ZBVUxUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lNUE9SVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTlBVVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9NRVNTQUdFKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX09QRVJBVElPTik7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9PVVRQVVQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUEFSVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QT1JUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BPUlRUWVBFKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1NFUlZJQ0UpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfVFlQRVMpOwotCi0gICAgcmV0dXJuIGlzRXg7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IHdpbGwgYmUgYW5hbHl6ZWQgICAgICAgCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgaXQgZG9lc24ndCBjb250YWluIGFueSBpbXBvcnRzLCB0aGVuIHRoZSByZXN1bHQgaXMgbm90QXBwbGljYWJsZQotICAgIGlmICgoZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkgPT0gbnVsbCkKLSAgICAgIHx8IChkZWZpbml0aW9uLmdldEltcG9ydHMoKS5zaXplKCkgPT0gMCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBFbHNlIGFuYWx5emUgdGhlIAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwcm9jZXNzV1NETChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQotICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgdHJhdmVyc2FsLnZpc2l0SW1wb3J0KHRydWUpOwotCi0gICAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKAotICAgICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotCi0gICAgICBlbHNlIGlmICghaW1wb3J0Rm91bmQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIHRoZSBtZXRob2QgbG9hZHMgV1NETCBhbmQgY2hlY2sgc3RydWN0dXJlCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NXU0RMKFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIHBhcnNlcyBXU0RMCi0gICAgICBEb2N1bWVudCBkb2MgPSB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChsb2NhdGlvbiwgbnVsbCk7Ci0gICAgICBjaGVja1dTREwoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsgLy8gZ2V0IGRlZmluaXRpb24KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIC8vIEFERDogYWRkIGV4Y2VwdGlvbiBoYW5kbGluZwotICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIjIxMDUgLSBXU0RMIGxvYWQgZmFpbGVkIik7Ci0gICAgICBlcnJvcnMuYWRkKHQudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogQ3JlYXRlIGZhbHVyZSByZXBvcnQgY29udGFpbnMgaW5mb3JtYXRpb24gb2Ygbm9kZS4KLSAgICogQHBhcmFtIHJvb3QKLSAgICovCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVGYWlsZWQoTm9kZSByb290KQotICB7Ci0gICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSByb290LCBBVFRSX1dTRExfTE9DQVRJT04pOwotICAgIFN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gICAgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgcm9vdCwgQVRUUl9XU0RMX05BTUVTUEFDRSk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gICAgZXJyb3JzLmFkZChuZXcgUU5hbWUobmFtZXNwYWNlLCBzY2hlbWFMb2NhdGlvbikpOwotICB9Ci0KLSAgLyoKLSAgICogQ2hlY2sgd3NkbCBjb3JyZXNwb25zIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgKiBAcGFyYW0gcm9vdCAtIGRlZmluaXRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja1dTREwoTm9kZSByb290KQotICB7Ci0gICAgaWYgKHJvb3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBGaW5kIHRoZSBmaXJzdCBpbXBvcnQgZWxlbWVudAotICAgICAgRWxlbWVudCBpbSA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoKEVsZW1lbnQpIHJvb3QsIFdTRExfSU1QT1JUKTsKLQotICAgICAgLy8gRGV0ZXJtaW5lIGlmIGEgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIGJvb2xlYW4gZG9jdW1lbnRJc1ByZXNlbnQgPQotICAgICAgICAoWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudCgoRWxlbWVudCkgcm9vdCwgV1NETF9ET0NVTUVOVEFUSU9OKQotICAgICAgICAgICE9IG51bGwpOwotCi0gICAgICAvLyBWZXJpZnkgdGhhdCBhbGwgaW1wb3J0IGVsZW1lbnRzIG9jY3VyIGFmdGVyIGEgZG9jdW1lbnRhdGlvbiBlbGVtZW50Ci0gICAgICB3aGlsZSAoaW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gRmluZCBlbGVtZW50cyB0aGF0IGFyZSBwcmV2aW91cyB0byB0aGUgaW1wb3J0IGVsZW1lbnQKLSAgICAgICAgRWxlbWVudCBlbCA9IFhNTFV0aWxzLmZpbmRQcmV2aW91c1NpYmxpbmcoaW0pOwotICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICB3aGlsZSAoaXNFeHRlbnNpYmlsaXR5RWxlbWVudChlbCkgJiYgZWwgIT0gbnVsbCkKLSAgICAgICAgICAgIGlmIChlbCAhPSBudWxsKQotICAgICAgICAgICAgICBlbCA9IFhNTFV0aWxzLmZpbmRQcmV2aW91c1NpYmxpbmcoZWwpOwotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOmRvY3VtZW50IGVsZW1udCBpcyBwcmVzZW50Ci0gICAgICAgIGlmIChkb2N1bWVudElzUHJlc2VudCAmJiBlbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTikgJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpKQotICAgICAgICAgICAgY3JlYXRlRmFpbGVkKHJvb3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWxzZSBjaGVjayBpZiBpdCBpcyBhbm90aGVyIHdzZGw6IGVsZW1lbnQKLSAgICAgICAgZWxzZSBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIG5vdCB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudCwgdGhlbiBjaGVjayBmb3Igb3RoZXIgd3NkbDogZWxlbWVudAotICAgICAgICAgIGlmICghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RFRklOSVRJT05TKSAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lNUE9SVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVsLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgICAgICAgICAgICBjcmVhdGVGYWlsZWQocm9vdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGltcG9ydCBlbGVtZW50Ci0gICAgICAgIGltID0gWE1MVXRpbHMuZmluZEVsZW1lbnQoaW0sIFdTRExfSU1QT1JUKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NDIwNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBCUDIxMDcuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlcyBlbGVtZW50IGNvbnRhaW5pbmcgYW4geHNkOnNjaGVtYSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB4c2Q6c2NoZW1hIGVsZW1lbnQgY29udGFpbnMgYSB0YXJnZXROYW1lc3BhY2UgYXR0cmlidXRlIHdpdGggYSB2YWxpZCBhbmQgbm9uLW51bGwgdmFsdWUgdW5sZXNzIHRoZSB4c2Q6c2NoZW1hIGVsZW1lbnQgaGFzIHhzZDppbXBvcnQgYW5kL29yIHhzZDphbm5vdGF0aW9uIGFzIGl0cyBvbmx5IGNoaWxkIGVsZW1lbnQocykuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjEwNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNjaGVtYUZvdW5kID0gZmFsc2U7Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLSAgLy9wcml2YXRlIFN0cmluZyBjb250ZXh0OwotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBUeXBlcyB0ID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIExpc3QgZXh0cyA9IHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKGV4dHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL2NvbnRleHQgPSBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKS5nZXREb2N1bWVudEJhc2VVUkkoKTsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgU2NoZW1hKQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgoKFNjaGVtYSkgZWwpLmdldEVsZW1lbnQoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8JCQkgIGNvbnRleHQgPSBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKS5nZXREb2N1bWVudEJhc2VVUkkoKTsKLSAgICAvLwkJCSAgcHJvY2Vzc1dTREwoZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldEZpbGVuYW1lKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIXNjaGVtYUZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIG5vZGUgc2NoZW1hIG9yIGxvYWQgc2NoZW1hIGZyb20gaW5tcG9ydCBpZiBpdCBleGlzdHMgYW5kIHByb2Nlc3MgaXQuIAotICAgKiBAcGFyYW0gbiAtIG5vZGUKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNlYXJjaEZvclNjaGVtYShOb2RlIG4pCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaGVzIGZvciB4c2Q6aW1wb3J0IGVsZW1lbnQKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBzY2hlbWFGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShuLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICAvL2lmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICAvLyAgbG9hZFNjaGVtYShuKTsKLSAgICAgICAgICAvL2Vsc2UKLSAgICAgICAgICAvLyBlbHNlIGl0ZXJhdGUgZWxlbWVudCByZWN1cnNpdmVseQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYShuLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBMb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBpdC4KLSAgICogQHBhcmFtIGltcG9ydE5vZGUgLSB4c2Q6aW1wb3J0IGVsZW1lbnQKLSAgKi8KLSAgLy9wcml2YXRlIHZvaWQgbG9hZFNjaGVtYShOb2RlIGltcG9ydE5vZGUpCi0gIC8vewotICAvLyAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBpbXBvcnROb2RlOwotICAvLyAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAvLyAgLy8gdHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAvLyAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAvLyAgICB0cnkKLSAgLy8gICAgewotICAvLyAgICAgIC8vIGlmIGFueSBlcnJvciBvciByb290IGVsZW1lbnQgaXMgbm90IFhTRCBzY2hlbWEgLT4gZXJyb3IKLSAgLy8gICAgICBEb2N1bWVudCBzY2hlbWEgPQotICAvLyAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gIC8vICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpOwotICAvLyAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gIC8vICAgICAgICBwcm9jZXNzU2NoZW1hKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwgbmFtZXNwYWNlKTsKLSAgLy8gICAgICB9Ci0gIC8vICAgIH0KLSAgLy8gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAvLyAgICB7Ci0gIC8vICAgICAgLy8gbm90aGluZy4gaXQncyBub3QgYSBzY2hlbWEKLSAgLy8gICAgfQotICAvL30KLQotICAvKgotICAgKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBpdCdzIG5vdCBjb3JyZXNwb25zIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIHNjaGVtYSAtIHhzZDpzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIG5hbWVzcGFjZSBvZiBzY2hlbWEKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBBdHRyIGEgPQotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBzY2hlbWEsIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSk7Ci0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogbnVsbDsKLQotICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgLy8JICAgISEgd2Ugc3VwcG9zZSB0aGF0IHhzZDppbXBvcnQgZWxlbWVudCBpcyBvY2N1cmVkIG9ubHkgd2l0aGluIHhzZDpzY2hlbWEgZWxlbWVudAotICAgIGJvb2xlYW4gY29udGFpbnNPbmx5SW1wb3J0QW5kQW5ub3RhdGlvbiA9IHRydWU7Ci0gICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICBjb250YWluc09ubHlJbXBvcnRBbmRBbm5vdGF0aW9uCi0gICAgICAgICAgJj0gKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpCi0gICAgICAgICAgICB8fCBYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfQU5OT1RBVElPTikpOwotICAgICAgfQotCi0gICAgICAvL2lmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAvLwlsb2FkU2NoZW1hKG4pOwotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSB0YXJnZXQgbmFtZXNwYWNlIGlzIG5vdCBzZXQgYW5kIHRoZXJlIGFyZSBlbGVtZW50cyBpbiBhZGRpdGlvbiB0byBpbXBvcnQgYW5kIGFubm90YXRpb24sIHRoZW4gZXJyb3IKLSAgICBpZiAoKHRhcmdldE5hbWVzcGFjZSA9PSBudWxsIHx8IHRhcmdldE5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwKQotICAgICAgJiYgKCFjb250YWluc09ubHlJbXBvcnRBbmRBbm5vdGF0aW9uKSkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKHRhcmdldE5hbWVzcGFjZSwgWE1MVXRpbHMuc2VyaWFsaXplKChFbGVtZW50KSBzY2hlbWEpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgIW5hbWVzcGFjZS5lcXVhbHModGFyZ2V0TmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKG5hbWVzcGFjZSwgWE1MVXRpbHMuc2VyaWFsaXplKChFbGVtZW50KSBzY2hlbWEpKTsKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNzMzZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci0KLQotLyoqCi0JICogQlAyMTA4LgotICAgICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzLCB3aXRoIEFycmF5IGRlY2xhcmF0aW9ucyBlaXRoZXIgbG9jYWxseSBkZWZpbmVkIG9yIGZyb20gYW4gaW1wb3J0ZWQgZGVzY3JpcHRpb248L2NvbnRleHQ+Ci0gICAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB0eXBlIHNvYXBlbmM6QXJyYXkgZG9lcyBub3QgYXBwZWFyIGluIHRoZXNlIGRlY2xhcmF0aW9ucywgYW5kIHRoZSB3c2RsOmFycmF5VHlwZSBhdHRyaWJ1dGUgaXMgbm90IHVzZWQgaW4gdGhlIHR5cGUgZGVjbGFyYXRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLQkgKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIFNlYXJjaCB0aGUgZGVmaW5pdGlvbnMgaW4gQ2FuZGlkYXRlSW5mbyB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdHlwZXMgZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKChkZWZpbml0aW9uID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0KSkKLSAgICAgID09IG51bGwpCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcyB0aGVuIHRocm93IGFuIGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSB0eXBlcyBlbGVtZW50IGRlZmluaXRpb24uIik7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0LAotICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgSXRlcmF0b3IgaXQgPSByZWdpc3RyeS5nZXRBcnJheVR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIGVycm9ycy5hZGQoKFFOYW1lKSBpdC5uZXh0KCkpOwotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE5YjZmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLQotCi0vKioKLSAqIEJQMjExMC4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6dHlwZXM8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BcnJheSBkZWNsYXJhdGlvbiB3cmFwcGVyIGVsZW1lbnRzIGRvZXMgbm90IHVzZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gQXJyYXlPZlhYWC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTEwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTEwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLQotICAgIFR5cGVzIHQgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBTZWFyY2ggdGhlIGRlZmluaXRpb25zIGluIENhbmRpZGF0ZUluZm8gdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHR5cGVzIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIGlmICgoZGVmaW5pdGlvbiA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24odCkpCi0gICAgICA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMgdGhlbiB0aHJvdyBhbiBleGVjcHRpb24KLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgdHlwZXMgZWxlbWVudCBkZWZpbml0aW9uLiIpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdCwKLSAgICAgICAgICBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0KLSAgICAgIEl0ZXJhdG9yIGl0ID0gcmVnaXN0cnkuZ2V0RWxlbWVudExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUU5hbWUgdHlwZSA9IChRTmFtZSkgaXQubmV4dCgpOwotICAgICAgICBpZiAodHlwZS5nZXRMb2NhbFBhcnQoKS5zdGFydHNXaXRoKCJBcnJheU9mIikpCi0gICAgICAgICAgZXJyb3JzLmFkZCh0eXBlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZDk0MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTEuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcsIHdoaWNoIGNvbnRhaW5zIGEgZG9jdW1lbnQtbGl0ZXJhbCBzb2FwOmJpbmRpbmc8L2NvbnRleHQ+Ci0gICAqIAotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SWYgdGhlICJwYXJ0cyIgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudChzKSBoYXZlIGF0IG1vc3Qgb25lIHBhcnQgbGlzdGVkIGluIHRoZSBwYXJ0cyBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBkb2NMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIAotICAgKiBQdXQgaW4gY29udGV4dCBzb2FwIGJpbmRpbmcncyBzdHlsZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAKLSAgICogVmVyaWZ5IHN0eWxlIG9mIHNvYXAgb3BlcmF0aW9uIGlzICJkb2N1bWVudCIgaWYgbm90IHRoZW4gaXQncyBjYW5jZWxlZCBwcm9jZXNzLiAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9IG9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotICAgIC8vIGFzc2VydCBzdHlsZSAhPSBudWxsCi0gICAgaWYgKCFXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DLmVxdWFscyhzdHlsZSkpCi0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgfQotCi0gIC8qIAotICAgKiBJZiB1c2Ugb2Ygc29hcCBib2R5IGlzICJsaXRlcmFsIiBhbmQgcGFydHMgb2Ygc29hcCBib2R5IGlzIG1vcmUgdGhhbiBvbmUgaXQgY3JlYXRlcyBmYWx1cmUgcmVwb3J0LiAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHN0eWxlID09ICJkb2N1bWVudCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpKQotICAgIHsKLSAgICAgIGRvY0xpdGVyYWxGb3VuZCA9IHRydWU7Ci0KLSAgICAgIExpc3QgcGFydHMgPSBib2R5LmdldFBhcnRzKCk7Ci0gICAgICBpZiAocGFydHMgIT0gbnVsbCAmJiBwYXJ0cy5zaXplKCkgPiAxKQotICAgICAgICAvL2hvdyB0byBwaWNrIG91dCBvbmUgYm9keSBmcm9tIGFub3RoZXIgb25lID8JCQkJCQkKLSAgICAgICAgZXJyb3JzLmFkZChib2R5LmdldEVsZW1lbnRUeXBlKCksIGJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTs7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghZG9jTGl0ZXJhbEZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYyYmM5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTEyLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nLCB3aXRoIGEgc3R5bGUgInJwYyIgYXR0cmlidXRlIGFuZCBjb250YWluaW5nIGF0IGxlYXN0IGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50PC9jb250ZXh0PgotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Tm8gd3NkbDpwYXJ0IHJlZmVycmVkIGJ5IHN1Y2ggYSBzb2FwYmluZDpib2R5IGVsZW1lbnQgaXMgZGVmaW5lZCB1c2luZyB0aGUgImVsZW1lbnQiIGF0dHJpYnV0ZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTEyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjExMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJwY0xpdGVyYWxGb3VuZCA9IGZhbHNlOwotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogCi0gICAqIFB1dCBpbiBjb250ZXh0IHNvYXAgYmluZGluZydzIHN0eWxlCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJiaW5kaW5nU3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlbW92ZVBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiKTsKLSAgfQotCi0gIC8qIAotICAgKiBWZXJpZnkgc3R5bGUgb2Ygc29hcCBvcGVyYXRpb24gaXMgInJwYyIgaWYgbm90IHRoZW4gaXQncyBjYW5jZWxlZCBwcm9jZXNzLiAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5hZGRQYXJhbWV0ZXIoIm9wZXJhdGlvblN0eWxlIiwgb3BlcmF0aW9uLmdldFN0eWxlKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIElmIHVzZSBvZiBzb2FwIGJvZHkgaXMgImxpdGVyYWwiIGFuZCBpZiBhdCBsZWFzdCBvbmUgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZSBpdCBjcmVhdGVzIGZhbHVyZSByZXBvcnQuICAgIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgb3BTdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoIm9wZXJhdGlvblN0eWxlIik7Ci0gICAgU3RyaW5nIGJTdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoImJpbmRpbmdTdHlsZSIpOwotCi0gICAgaWYgKChvcFN0eWxlID09IG51bGwKLSAgICAgICAgJiYgIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKGJTdHlsZSkpCi0gICAgICB8fCAob3BTdHlsZSAhPSBudWxsIAotICAgICAgCSYmICFXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhvcFN0eWxlKSkpCi0gICAgewotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGFzc2VydCB1c2UgPT0gImxpdGVyYWwiCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyhib2R5LmdldFVzZSgpKSkKLSAgICB7Ci0gICAgICBycGNMaXRlcmFsRm91bmQgPSB0cnVlOwotCi0gICAgICAvLyBmaW5kIGNvcnJlc3BvbmRpbmcgbWVzc2FnZQotICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICAgIGlmIChvcCA9PSBudWxsCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQgJiYgb3AuZ2V0SW5wdXQoKSA9PSBudWxsKQotICAgICAgICB8fCAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCAmJiBvcC5nZXRPdXRwdXQoKSA9PSBudWxsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG0gPQotICAgICAgICAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgICAgID8gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICA6IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIC8vIFJFTU9WRTogY3VycmVudCBtZXNzYWdlIHNob3VsZCBlcXVhbHMgdG8gbWVzc2FnZSBnaXZlbiBhcyBlbnRyeQotICAgICAgLy9pZiAobSA9PSBudWxsIHx8IG1lc3NhZ2UgIT0gbSkKLSAgICAgIGlmIChtID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgTGlzdCBwYXJ0cyA9Ci0gICAgICAgIFdTRExVdGlsLmdldFBhcnRzKAotICAgICAgICAgIG9wLAotICAgICAgICAgIG0sCi0gICAgICAgICAgYm9keSwKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDKTsKLSAgICAgIGlmIChwYXJ0cyA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIC8qIGNoZWNrIHdoZXRoZXIgcGFydHMgbGlzdCBjb250YWlucyBhIHBhcnRzIHdoaWNoIHVzZXMKLSAgICAgICAqIGVsZW1lbnQgYXR0cmlidXRlLiBJZiBzbywgcGFydCBuYW1lIHdpbGwgYmUgYWRkZWQgaW50bwotICAgICAgICogZXJyb3JzIHNldC4KLSAgICAgICAqLwotICAgICAgSXRlcmF0b3IgaXQgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgIGVycm9ycy5hZGQocGFydC5nZXROYW1lKCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgLy8gc2F2ZSBtZXNzYWdlIAotICAgIC8vbWVzc2FnZSA9IChNZXNzYWdlKWVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTs7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0QmluZGluZ09wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0KLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIXJwY0xpdGVyYWxGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMzFjZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTEzLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgc29hcGJpbmQ6aGVhZGVyLCBzb2FwYmluZDpoZWFkZXJmYXVsdCBhbmQgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudHMgb25seSByZWZlciB0byB3c2RsOnBhcnQgZWxlbWVudChzKSB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSAiZWxlbWVudCIgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGhlYWRlciB1c2VzIHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUgICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIERlZmluaXRpb24gZCA9IChEZWZpbml0aW9uKSBjdHguZ2V0UGFyYW1ldGVyKCJkZWZpbml0aW9uIik7Ci0gICAgTWVzc2FnZSBtID0gZC5nZXRNZXNzYWdlKGhlYWRlci5nZXRNZXNzYWdlKCkpOwotICAgIGlmIChtICE9IG51bGwpCi0gICAgICBjaGVja1BhcnQobS5nZXRQYXJ0KGhlYWRlci5nZXRQYXJ0KCkpLCBjdHguZ2V0QmluZGluZygpKTsKLSAgfQotCi0gIC8qIAotICAgKiBWZXJpZnkgc29hcCBoZWFkZXJmYXVsdCB1c2VzIHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXJGYXVsdCBmYXVsdCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIERlZmluaXRpb24gZCA9IChEZWZpbml0aW9uKSBjdHguZ2V0UGFyYW1ldGVyKCJkZWZpbml0aW9uIik7Ci0gICAgTWVzc2FnZSBtID0gZC5nZXRNZXNzYWdlKGZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgLy8gaWYgbWVzc2FnZSBvciBwYXJ0IGlzIG5vdCBmb3VuZCAtIE5PVF9BUFBMSUNBQkxFID8/Pz8KLSAgICBpZiAobSAhPSBudWxsKQotICAgICAgY2hlY2tQYXJ0KG0uZ2V0UGFydChmYXVsdC5nZXRQYXJ0KCkpLCBjdHguZ2V0QmluZGluZygpKTsKLSAgfQotCi0gIC8qIAotICAgKiBWZXJpZnkgc29hcCBmYXVsdCB1c2VzIHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lID09IG51bGwpCi0gICAgICBmYXVsdE5hbWUgPSBjdHguZ2V0QmluZGluZ0ZhdWx0KCkuZ2V0TmFtZSgpOwotICAgIE9wZXJhdGlvbiBvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7Ci0gICAgaWYgKG9wID09IG51bGwgLyogfHwgZmF1bHROYW1lID09IG51bGwqLwotICAgICAgKSAvLyBtYXkgYmUgaXQncyBwb3NzaWJsZSB0byBoYXZlIGxlZ2FsIGZhdWx0IHdpdGggbnVsbCBuYW1lCi0gICAgICByZXR1cm47Ci0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IFNPQVBGYXVsdC5nZXROYW1lKCkgY29ycmVzcG9uZHMgdG8gdGhlIGFic3RyYWN0IG9wZXJhdGlvbidzIGZhdWx0IG5hbWUJCQkKLSAgICBGYXVsdCBmID0gb3AuZ2V0RmF1bHQoZmF1bHROYW1lKTsKLSAgICBpZiAoZiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE1lc3NhZ2UgbSA9IGYuZ2V0TWVzc2FnZSgpOwotICAgIC8vIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgb25seSBvbmUgcGFydAotICAgIGlmIChtID09IG51bGwgfHwgbS5nZXRQYXJ0cygpID09IG51bGwgfHwgbS5nZXRQYXJ0cygpLnNpemUoKSAhPSAxKQotICAgICAgcmV0dXJuOwotICAgIGNoZWNrUGFydCgoUGFydCkgbS5nZXRPcmRlcmVkUGFydHMobnVsbCkuZ2V0KDApLCBjdHguZ2V0QmluZGluZygpKTsKLSAgfQotCi0gIC8qCi0gICAqIFZlcmlmeSBwYXJ0IGlzIGRlZmluZSB1c2luZyAiZWxlbWVudCIgYXR0cmlidXRlLgotICAgKiBAcGFyYW0gcCAtIHBhcnQKLSAgICogQHBhcmFtIGIgLSBiaW5kaW5nCi0gICovCi0gIC8vIHJlZmFjdG9yaW5nCi0gIHByaXZhdGUgdm9pZCBjaGVja1BhcnQoUGFydCBwLCBCaW5kaW5nIGIpCi0gIHsKLSAgICBpZiAocCAhPSBudWxsICYmIHAuZ2V0RWxlbWVudE5hbWUoKSA9PSBudWxsKQotICAgICAgZXJyb3JzLmFkZChiLmdldFFOYW1lKCksIHAuZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTs7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlcih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQSGVhZGVyRmF1bHQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEZhdWx0KHRydWUpOwotCi0gICAgTWFwIG0gPSBuZXcgSGFzaE1hcCgpOwotICAgIERlZmluaXRpb24gZGVmID0gZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCk7Ci0gICAgV1NETFV0aWwuZXhwYW5kRGVmaW5pdGlvbihkZWYpOwotICAgIG0ucHV0KCJkZWZpbml0aW9uIiwgZGVmKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCksIG0pOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1NDlkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTQuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiAKLSAqIAotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkV2ZXJ5IHdzZGw6cGFydCBmcm9tIGVhY2ggd3NkbDptZXNzYWdlIGluIHRoZSBhc3NvY2lhdGVkIAotICogd3NkbDpwb3J0VHlwZSBpcyByZWZlcmVuY2VkIGVpdGhlciBieSB0aGUgc29hcGJpbmQ6Ym9keSwgc29hcGJpbmQ6aGVhZGVyLCAKLSAqIHNvYXBiaW5kOmZhdWx0LCBvciBzb2FwYmluZDpoZWFkZXJmYXVsdC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTE0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjExNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICAvLyBtYXAgTWVzc2FnZSBRTmFtZSAtPiBzZXQoUGFydCBuYW1lKQotICBwdWJsaWMgTWFwIG1lc3NhZ2VzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKiAKLSAgICogQWRkIHRvIE1hcCBwYXJ0cyB3aGljaCB1c2VkIGJ5IG1lc3NhZ2UKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuTWVzc2FnZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE1lc3NhZ2UgbSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKG0gIT0gbnVsbAotICAgICAgJiYgIW1lc3NhZ2VzLmNvbnRhaW5zS2V5KG0pCi0gICAgICAmJiBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFNldCBzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gbS5nZXRPcmRlcmVkUGFydHMobnVsbCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHMuYWRkKCgoUGFydCkgaXQubmV4dCgpKS5nZXROYW1lKCkpOwotCi0gICAgICAvL21lc3NhZ2VzLnB1dChtLmdldFFOYW1lKCksIHMpOwotICAgICAgaWYgKHMuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZXMucHV0KG0uZ2V0UU5hbWUoKSwgcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFB1dCBpbiBjb250ZXh0IHN0eWxlIG9mIHNvYXAgYmluZGluZwotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQQmluZGluZyBiaW5kaW5nLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0KLSAgICAgIChiaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlICE9IG51bGwpCi0gICAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBSZW1vdmUgcGFydHMgb2Ygc29hcCBib2R5IGZyb20gTWFwLiAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIFN0cmluZyBzdHlsZSA9IChTdHJpbmcpY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLQotICAgIC8vIGZpbmQgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAvLyBpZiBzb21lIGxpbmtzIGFyZSBicm9rZW4sIGNhbmNlbCBwcm9jZXNzaW5nCi0gICAgaWYgKG9wID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gbnVsbDsKLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIGlmIChvcC5nZXRJbnB1dCgpID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLSAgICAgIG0gPSBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICBpZiAob3AuZ2V0T3V0cHV0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgbSA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgaWYgKG0gPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIC8vIGdldCBwYXJ0cwotICAgIExpc3QgcGFydHMgPSBXU0RMVXRpbC5nZXRQYXJ0cyhvcCwgbSwgYm9keSwgbnVsbCk7Ci0gICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAvLyBpdGVyYXRlIGFsbCBwYXJ0cyBhbmQgY2hlY2sKLSAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHJlbW92ZVBhcnQobS5nZXRRTmFtZSgpLCAoKFBhcnQpIGl0Lm5leHQoKSkuZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qIAotICAgKiBSZW1vdmUgcGFydHMgb2Ygc29hcCBoZWFkZXIgZnJvbSBNYXAuCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlciBoZWFkZXIsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgaXQgcG9zc2libGUgdG8gaGF2ZSBsZWdhbCBtZXNzYWdlIGFuZCBwYXJ0IHdpdGggbnVsbCBuYW1lcwotICAgIC8vIEFUVEVOVElPTgotICAgIC8vIHNob3VsZCB3ZSBhZGQgbWVzc2FnZSB3aGljaCBpcyByZWZlcmVuY2VkIGJ5IGhlYWRlciBvciBoZWFkZXJmYXVsdCB0byBtZXNzYWdlcyA/Ci0gICAgcmVtb3ZlUGFydChoZWFkZXIuZ2V0TWVzc2FnZSgpLCBoZWFkZXIuZ2V0UGFydCgpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXJGYXVsdCBmYXVsdCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIHdlIHN1cHBvc2UgdGhhdCBpdCBwb3NzaWJsZSB0byBoYXZlIGxlZ2FsIG1lc3NhZ2UgYW5kIHBhdHIgd2l0aCBudWxsIG5hbWVzCi0gICAgUU5hbWUgbWVzc2FnZU5hbWUgPSBmYXVsdC5nZXRNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2VOYW1lID09IG51bGwpCi0gICAgICBtZXNzYWdlTmFtZSA9IGN0eC5nZXRTT0FQSGVhZGVyKCkuZ2V0TWVzc2FnZSgpOwotICAgIHJlbW92ZVBhcnQobWVzc2FnZU5hbWUsIGZhdWx0LmdldFBhcnQoKSk7Ci0gIH0KLQotICAvKiAKLSAgICogUmVtb3ZlIHBhcnRzIG9mIHNvYXAgZmF1bHQgZnJvbSBNYXAuCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgZmF1bHQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSA9PSBudWxsKQotICAgICAgZmF1bHROYW1lID0gY3R4LmdldEJpbmRpbmdGYXVsdCgpLmdldE5hbWUoKTsKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IFNPQVBGYXVsdC5nZXROYW1lKCkgY29ycmVzcG9uZHMgdG8gdGhlIGFic3RyYWN0IG9wZXJhdGlvbidzIGZhdWx0IG5hbWUgICAgICAgICAgIAotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotCi0gICAgLy8gZmF1bHQgbWVzc2FnZSBzaG91bGQgaGF2ZSAxIHBhcnQKLSAgICBpZiAoZiA9PSBudWxsCi0gICAgICB8fCBmLmdldE1lc3NhZ2UoKSA9PSBudWxsCi0gICAgICB8fCBmLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpLnNpemUoKSAhPSAxKQotICAgICAgcmV0dXJuOwotCi0gICAgUGFydCBwID0gKFBhcnQpIGYuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCk7Ci0gICAgcmVtb3ZlUGFydChmLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLCBwLmdldE5hbWUoKSk7Ci0gIH0KLQotICAvKgotICAgKiBSZW1vdmUgcGFydCBmcm9tIE1hcC4gCi0gICogQHBhcmFtIG1lc3NhZ2VOYW1lIC0gbWVzc2FnZQotICAqIEBwYXJhbSBwYXJ0TmFtZSAtIHBhcnQKLSAgKi8KLSAgLy8gcmVmYXRvcmluZwotICBwcml2YXRlIHZvaWQgcmVtb3ZlUGFydChRTmFtZSBtZXNzYWdlTmFtZSwgU3RyaW5nIHBhcnROYW1lKQotICB7Ci0gICAgU2V0IHBhcnRzID0gKFNldCkgbWVzc2FnZXMuZ2V0KG1lc3NhZ2VOYW1lKTsKLSAgICBpZiAocGFydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwYXJ0cy5yZW1vdmUocGFydE5hbWUpOwotICAgICAgaWYgKHBhcnRzLnNpemUoKSA9PSAwKQotICAgICAgICBtZXNzYWdlcy5yZW1vdmUobWVzc2FnZU5hbWUpOwotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQSGVhZGVyKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXJGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIEJpbmRpbmcgYiA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShiKTsKLQotICAgIGlmIChtZXNzYWdlcy5zaXplKCkgPiAwKQotICAgICAgZXJyb3JzLmFkZChiLmdldFFOYW1lKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5ODI5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTE1LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6bWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BbiAiZWxlbWVudCIgYXR0cmlidXRlIG9uIGFueSB3c2RsOnBhcnQgZWxlbWVudCByZWZlcnMgdG8gYSBnbG9iYWwgZWxlbWVudCBkZWNsYXJhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTE1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjExNShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBhcnQgcGFydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsCi0gICAgICAmJiByZWdpc3RyeS5nZXRUeXBlKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICBjdHguY2FuY2VsTWVzc2FnZVByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICByZWdpc3RyeSA9Ci0gICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgIHZhbGlkYXRvcik7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQYXJ0KHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChNZXNzYWdlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5ZmYwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOm1lc3NhZ2UgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgd3NkbDptZXNzYWdlIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBwYXJ0IGVsZW1lbnRzIHRoYXQgdXNlIGJvdGggInR5cGUiIGFuZCAiZWxlbWVudCIgYXR0cmlidXRlcy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTE2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLQotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBhcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBhcnQgcGFydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsICYmIHBhcnQuZ2V0VHlwZU5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQoY3R4LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpKTsKLSAgICAgIGN0eC5jYW5jZWxNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQYXJ0KHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoTWVzc2FnZSkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzA5ZmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTcuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgcmVmZXJyZWQgdG8gYnkgYW4gcnBjLWxpdGVyYWwgc29hcDpiaW5kaW5nPC9jb250ZXh0PgotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHJwYy1saXRlcmFsIGJpbmRpbmcgZG9lcyBub3QgaGF2ZSBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIG9uIGEgY29udGFpbmVkIHNvYXBiaW5kOmhlYWRlciwgc29hcGJpbmQ6aGVhZGVyZmF1bHQsIGFuZCBzb2FwYmluZDpmYXVsdCBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcnBjTGl0ZXJhbEZvdW5kID0gZmFsc2U7Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAKLSAgICogSWYgdXNlIG9mIHNvYXAgYm9keSBpcyAibGl0ZXJhbCIgYW5kIGlmIGF0IGxlYXN0IG9uZSBwYXJ0IGlzIGRlZmluZSB1c2luZyAiZWxlbWVudCIgYXR0cmlidXRlIGl0IGNyZWF0ZXMgZmFsdXJlIHJlcG9ydC4gICAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIGFzc2VydCB1c2UgPT0gImxpdGVyYWwiCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyhib2R5LmdldFVzZSgpKQotICAgICAgJiYgKChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoInN0eWxlIikpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQykpCi0gICAgewotICAgICAgcnBjTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLQotICAgIC8vIGFzc2VydCBzdHlsZSAhPSBudWxsCi0gICAgaWYgKCFXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhzdHlsZSkpCi0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGNoZWNrKGhlYWRlci5nZXRVc2UoKSwgaGVhZGVyLmdldE5hbWVzcGFjZVVSSSgpLCBjdHgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY2hlY2soZmF1bHQuZ2V0VXNlKCksIGZhdWx0LmdldE5hbWVzcGFjZVVSSSgpLCBjdHgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjaGVjayhmYXVsdC5nZXRVc2UoKSwgZmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvLyByZWZhY3RvcmluZwotICAvLyBjaGVjayBMSVRFUkFMIHVzZSBhbmQgIT0gbmFtZXNwYWNlCi0gIC8vIGNhbmNlbGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcKLSAgcHJpdmF0ZSB2b2lkIGNoZWNrKFN0cmluZyB1c2UsIFN0cmluZyBuYW1lc3BhY2UsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVC5lcXVhbHModXNlKQotICAgICAgJiYgbmFtZXNwYWNlICE9IG51bGwpCi0gICAgewotICAgICAgZXJyb3JzLmFkZChjdHguZ2V0QmluZGluZygpLmdldFFOYW1lKCkpOwotICAgICAgLy8gICAgICAgICAgICAgIHN1cHByZXNzZXMgc3Vic2VxdWVudCBwcm9jZXNzaW5nLCBiZWNhdXNlIGVycm9yIGxpc3QgY29udGFpbnMgb25seSBmYWlsZWQgYmluZGluZwotICAgICAgY3R4LmNhbmNlbFByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQSGVhZGVyKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXJGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghcnBjTGl0ZXJhbEZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0YTczMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTE4LgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbGlzdCAob3Igc2V0KSBvZiB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cyBmb3IgdGhlIGNvbnRhaW5lZCB3c2RsOmJpbmRpbmcgaXMgdGhlIHNhbWUgYXMgdGhlIGxpc3Qgb2Ygd3NkbDpvcGVyYXRpb25zIGZvciB0aGUgcmVmZXJyZWQgd3NkbDpwb3J0VHlwZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTE4IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLQotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE4KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5PcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPcGVyYXRpb24gb3AsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIGFzc2VydCBwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3BlcmF0aW9uCi0gICAgaWYgKG9wID09IG51bGwpCi0gICAgewotICAgICAgZXJyb3JzLmFkZChjdHguZ2V0QmluZGluZygpLmdldFFOYW1lKCkpOwotICAgICAgLy8JCQkJc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBiaW5kaW5nCi0gICAgICBjdHguY2FuY2VsQmluZGluZ1Byb2Nlc3NpbmcoKTsKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIEJpbmRpbmcgYiA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIC8vIGlmIG9wZXJhdGlvbnMgY291bnQgaW4gcG9ydCB0eXBlIGFuZCBiaW5kaW5nIGlzIGRpZmZlciAtPiBlcnJvcgotICAgIGlmIChiLmdldFBvcnRUeXBlKCkgPT0gbnVsbAotICAgICAgfHwgYi5nZXRQb3J0VHlwZSgpLmdldE9wZXJhdGlvbnMoKS5zaXplKCkKLSAgICAgICAgIT0gYi5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLnNpemUoKSkKLSAgICAgIGVycm9ycy5hZGQoYi5nZXRRTmFtZSgpKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKGIpOwotICAgIH0KLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZTFhODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTkuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcsIHdoaWNoIGlzIG9mIHR5cGUgZG9jdW1lbnQtbGl0ZXJhbDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvbiBhIHNvYXBiaW5kOmJvZHkgZWxlbWVudCwgdGhlIGNvcnJlc3BvbmRpbmcgYWJzdHJhY3Qgd3NkbDptZXNzYWdlIGRlZmluZXMgemVybyBvciBvbmUgd3NkbDpwYXJ0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZG9jTGl0ZXJhbEZvdW5kID0gZmFsc2U7Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoInN0eWxlIik7Ci0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHVzZSA9Ci0gICAgICAoYm9keS5nZXRVc2UoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUCi0gICAgICAgIDogYm9keS5nZXRVc2UoKTsKLQotICAgIC8vIGFzc2VydCBzdHlsZSA9PSAiZG9jdW1lbnQiCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyh1c2UpKQotICAgIHsKLSAgICAgIGRvY0xpdGVyYWxGb3VuZCA9IHRydWU7Ci0gICAgICBpZiAoYm9keS5nZXRQYXJ0cygpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7Ci0gICAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBNYXAgcGFydHMgPSBudWxsOwotICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG9wLmdldElucHV0KCkgPT0gbnVsbCB8fCBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIHBhcnRzID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG9wLmdldE91dHB1dCgpID09IG51bGwgfHwgb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgcGFydHMgPSBvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIHBhcnRzLnNpemUoKSA+IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAgICAgLy8JCQkJCQlzdXBwcmVzc2VzIHN1YnNlcXVlbnQgcHJvY2Vzc2luZywgYmVjYXVzZSBlcnJvciBsaXN0IGNvbnRhaW5zIG9ubHkgZmFpbGVkIGJpbmRpbmcKLSAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ1Byb2Nlc3NpbmcoKTsKLSAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3V0cHV0UHJvY2Vzc2luZygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFkb2NMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTI3MjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMjAuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkVhY2ggb3BlcmF0aW9uIHJlZmVyZW5jZWQgYnkgdGhlIGJpbmRpbmcgcmVzdWx0cyBpbiBhIHVuaXF1ZSB3aXJlIHNpZ25hdHVyZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTIwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIFNldCB3YXJlcyA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQQmluZGluZyBiaW5kaW5nLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0KLSAgICAgIChiaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlICE9IG51bGwpCi0gICAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgTGlzdCBzaWduYXR1cmUgPSBuZXcgTGlua2VkTGlzdCgpOwotCi0gICAgU3RyaW5nIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLQotICAgIC8vIGZpbmQgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLQotICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICBpZiAob3AgPT0gbnVsbAotICAgICAgfHwgb3AuZ2V0SW5wdXQoKSA9PSBudWxsCi0gICAgICB8fCBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE1lc3NhZ2UgbSA9IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotCi0gICAgTGlzdCBwYXJ0cyA9IFdTRExVdGlsLmdldFBhcnRzKG9wLCBtLCBib2R5LCBzdHlsZSk7Ci0gICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgLy8gISEgQVRURU5USU9OCi0gICAgLy8gbWF5IGJlIHJlcXVpcmVkIHRvIGFkZCB0eXBlcyBpbnN0ZWFkIG9mIHBhcnQgaW50byBzaWduYXR1cmUgPwotCi0gICAgLy8gY3JlYXRlIHNpZ25hdHVyZQotICAgIHNpZ25hdHVyZS5hZGRBbGwocGFydHMpOwotCi0gICAgLy8gc3VwcG9zZSB0aGF0IHdpcmUgc2lnbmF0dXJlIGZvcgotICAgIC8vIC0gcnBjIHN0eWxlID0gb3BlcmF0aW9uIG5hbWUgKyBwYXJ0cycgcW5hbWUKLSAgICAvLyAtIGRvY3VtZW50IHN0eWxlID0gcGFydHMnIHFuYW1lCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKHN0eWxlKSkKLSAgICAgIHNpZ25hdHVyZS5hZGQoMCwgb3AuZ2V0TmFtZSgpKTsKLQotICAgIGlmIChzYW1lU2lnbmF0dXJlKHdhcmVzLCBzaWduYXR1cmUpKQotICAgICAgZXJyb3JzLmFkZChvcC5nZXROYW1lKCkpOwotICAgIGVsc2UKLSAgICAgIHdhcmVzLmFkZChzaWduYXR1cmUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZSBzaWduYXR1cmUgaXMgaW4gdGhlIHNldCBtYXRjaC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBzYW1lU2lnbmF0dXJlKFNldCBzaWduYXR1cmVTZXQsIExpc3Qgc2lnbmF0dXJlKQotICB7Ci0gICAgYm9vbGVhbiBzYW1lID0gZmFsc2U7Ci0KLSAgICAvLyBHZXQgaXRlcmF0b3IgZm9yIHNldAotICAgIEl0ZXJhdG9yIHNldCA9IHNpZ25hdHVyZVNldC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChzZXQuaGFzTmV4dCgpICYmICFzYW1lKQotICAgIHsKLSAgICAgIC8vIEdldCBuZXh0IHNpZ25hdHVyZSBmcm9tIHRoZSBzZXQKLSAgICAgIExpc3QgbmV4dFNpZ25hdHVyZSA9IChMaXN0KSBzZXQubmV4dCgpOwotCi0gICAgICAvLyBPbmx5IGNvbnRpbnVlIGlmIHRoZSBzaWduYXR1cmVzIGFyZSB0aGUgc2FtZSBzaXplCi0gICAgICBpZiAobmV4dFNpZ25hdHVyZS5zaXplKCkgPT0gc2lnbmF0dXJlLnNpemUoKSkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IxID0gbmV4dFNpZ25hdHVyZS5pdGVyYXRvcigpOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvcjIgPSBzaWduYXR1cmUuaXRlcmF0b3IoKTsKLQotICAgICAgICAvLyBBc3N1bWUgc2FtZSB1bnRpbCBhIGRpZmZlcmVuY2UgaXMgZm91bmQKLSAgICAgICAgc2FtZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBlYWNoIGxpc3QgdW50aWwgYSBkaWZmZXJlbmNlIGlzIGZvdW5kCi0gICAgICAgIHdoaWxlIChpdGVyYXRvcjEuaGFzTmV4dCgpICYmIGl0ZXJhdG9yMi5oYXNOZXh0KCkgJiYgc2FtZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBlbGVtZW50cwotICAgICAgICAgIE9iamVjdCBlbGVtZW50MSA9IGl0ZXJhdG9yMS5uZXh0KCk7Ci0gICAgICAgICAgT2JqZWN0IGVsZW1lbnQyID0gaXRlcmF0b3IyLm5leHQoKTsKLQotICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgc3RyaW5nLCB0aGVuIGlmIGVxdWFsIGNoZWNrIHBhcnRzCi0gICAgICAgICAgaWYgKChlbGVtZW50MSBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgICYmIChlbGVtZW50MiBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgICYmICgoKFN0cmluZykgZWxlbWVudDEpLmVxdWFscygoU3RyaW5nKSBlbGVtZW50MikpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNhbWUgPSB0cnVlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50cyBhcmUgcGFydHMsIHRoZW4gY2hlY2sgaWYgdGhleSBhcmUgZXF1YWwKLSAgICAgICAgICBlbHNlIGlmICgoZWxlbWVudDEgaW5zdGFuY2VvZiBQYXJ0KSAmJiAoZWxlbWVudDIgaW5zdGFuY2VvZiBQYXJ0KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzYW1lID0gc2FtZVBhcnRzKChQYXJ0KSBlbGVtZW50MSwgKFBhcnQpIGVsZW1lbnQyKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgc2FtZSA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHR3byBwYXJ0cyBhcmUgdGhlIHNhbWUuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gc2FtZVBhcnRzKFBhcnQgcGFydDEsIFBhcnQgcGFydDIpCi0gIHsKLSAgICBib29sZWFuIHNhbWUgPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBwYXJ0IGhhcyBhbiBlbGVtZW50IHRoZW4gc2VlIGlmIHRoZXkgYXJlIHRoZSBzYW1lCi0gICAgaWYgKHBhcnQxLmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbAotICAgICAgJiYgcGFydDIuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsCi0gICAgICAmJiBwYXJ0MS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhwYXJ0Mi5nZXRFbGVtZW50TmFtZSgpKSkKLSAgICB7Ci0gICAgICBzYW1lID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgcGFydCBoYXMgYW4gdHlwZSB0aGVuIHNlZSBpZiB0aGV5IGFyZSB0aGUgc2FtZQotICAgIGVsc2UgaWYgKAotICAgICAgcGFydDEuZ2V0VHlwZU5hbWUoKSAhPSBudWxsCi0gICAgICAgICYmIHBhcnQyLmdldFR5cGVOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiBwYXJ0MS5nZXRUeXBlTmFtZSgpLmVxdWFscyhwYXJ0Mi5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBzYW1lID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2FtZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBzYW1lOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyBBbmFseXplIHNvYXBiaW5kOmJvZHk6bmFtZXNwYWNlIGFuZCBzZXJ2aWNlIHRhcmdldE5hbWVzcGFjZSAgICAgICAgICAgIAotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZDU5NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMjEuCi0gKiBDb250ZXh0OgotICogRm9yICBhIHdzZGw6YmluZGluZyBlbGVtZW50IHdoaWNoIGlzIHJlZmVyZW5jZWQgZGlyZWN0bHkgb3IgYXNzb2NpYXRlZAotICogd2l0aCBhIHNwZWNpZmllZCB3c2RsOnBvcnQuCi0gKiAKLSAqIEFzc2VydGlvbiBEZXNjcmlwdGlvbjoKLSAqIEVhY2ggIG9wZXJhdGlvbiByZWZlcmVuY2VkIGJ5IGEgZG9jdW1lbnQtbGl0ZXJhbCBiaW5kaW5nIG11c3QgaGF2ZSBhCi0gKiBtZXNzYWdlIGRlZmluaXRpb24gd2hlcmUgdGhlIHdzZGw6cGFydCByZWZlcmVuY2VzIGEgZ2xvYmFsIGVsZW1lbnQKLSAqIGRlZmluaXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMjEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLSAgcHJpdmF0ZSBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbnVsbDsKLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQQmluZGluZyBiaW5kaW5nLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0KLSAgICAgIChiaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoInN0eWxlIik7Ci0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gISEgQVRURU5USU9OCi0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IHNvYXBib2R5IGNoaWxkIGVsZW1lbnRzIGlzIGl0cyBwYXJ0cy4KLSAgICAvLyBhc3NlcnQgc3R5bGUgPT0gImRvY3VtZW50IgotICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVC5lcXVhbHMoYm9keS5nZXRVc2UoKSkpCi0gICAgewotICAgICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICAgIE9wZXJhdGlvbiBvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7Ci0gICAgICAvLyBpZiBzb21lIGxpbmtzIGFyZSBicm9rZW4sIGNhbmNlbCBwcm9jZXNzaW5nCi0gICAgICBpZiAob3AgPT0gbnVsbAotICAgICAgICB8fCAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0ICYmIG9wLmdldElucHV0KCkgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQgJiYgb3AuZ2V0T3V0cHV0KCkgPT0gbnVsbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgTWVzc2FnZSBtID0KLSAgICAgICAgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgICAgICA/IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgOiBvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAobSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIC8vIGZpbmQgcGFydHMgd2hpY2ggYXJlIGludm9sdmVkIGluIHRoZSBnaXZlbiBib2R5Ci0gICAgICBMaXN0IHBhcnRzID0KLSAgICAgICAgV1NETFV0aWwuZ2V0UGFydHMoCi0gICAgICAgICAgb3AsCi0gICAgICAgICAgbSwKLSAgICAgICAgICBib2R5LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MpOwotICAgICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLy8gY2hlY2sgcGFydHMKLSAgICAgIEl0ZXJhdG9yIGl0ID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgcCBkZWNsYXJlZCBhcyBnbG9iYWwgZWxlbWVudAotICAgICAgICBpZiAocC5nZXRFbGVtZW50TmFtZSgpID09IG51bGwKLSAgICAgICAgICB8fCByZWdpc3RyeS5nZXRUeXBlKHAuZ2V0RWxlbWVudE5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQob3AuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAvLwkJCQkJCXN1cHByZXNzZXMgc3Vic2VxdWVudCBwcm9jZXNzaW5nLCBiZWNhdXNlIGVycm9yIGxpc3QgY29udGFpbnMgb25seSBmYWlsZWQgb3BlcmF0aW9uCi0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgcmVnaXN0cnkgPQotICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgLy8gY29sbGVjdCBhbGwgdHlwZXMgZnJvbSBtZXNzYWdlcyB0byBjaGVja2VkUGFydHMgbWFwCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2NjA1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMTIyLiAKLSAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGRhdGEgdHlwZSBkZWZpbml0aW9uIGlmIGFueSB3aXRoaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCBpcyBhbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgWE1MIFNjaGVtYSAxLjAgUmVjb21tZW5kYXRpb24gd2l0aCB0aGUgbmFtZXNwYWNlIFVSSSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50OwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICAvLyBQcm9jZXNzIGVhY2ggZXh0LiBlbGVtZW50Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiBpdCBpcyBhbiB1bmtub3duIGV4dC4gZWxlbWVudCBhbmQgaXQgaXMgYSBzY2hlbWEsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoaSkpCi0gICAgICAgICAgaW5zdGFuY2VvZiBTY2hlbWEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NJVGFnLkVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc2NoZW1hIGRlZmluaXRpb24sIHRoZW4gaXQgaXMgYW4gZXJyb3IKLSAgICAgICAgICAgIGVycm9yTGlzdC5hZGQoCi0gICAgICAgICAgICAgIGV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiIGNhbiBub3QgYmUgYSBjaGlsZCBvZiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIFhNTFNjaGVtYVZhbGlkYXRvciBjb3VsZCBub3QgZmluZCBhbnkgZXJyb3JzLCBjaGVjayBlcnJvcnMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IKLSAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGVycm9yTGlzdC5hZGQodmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzVmFsaWRhdGlvbkVycm9ycygpKTsKLQotICAgIGlmICghZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNWY4MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIxMjMuIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMsIGlmIGl0IGNvbnRhaW5zIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Q29udGFpbmVkIFdTREwgZXh0ZW5zaW9uIGVsZW1lbnRzIGRvIG5vdCB1c2UgdGhlIHdzZGw6cmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlIG9mICJ0cnVlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNsYWltRm91bmQgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVF9LRVkgPSAicG9ydCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRfVFlQRV9LRVkgPSAicG9ydCB0eXBlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTl9LRVkgPSAib3BlcmF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfS0VZID0gIm1lc3NhZ2UiOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGNvbnRhaW5zTGVnYWxDbGFpbShwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgewotICAgICAgICBjbGFpbUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gcG9ydCA9IChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRfS0VZKTsKLQotICAgICAgaWYgKHBvcnQuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoQklORElOR19LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgQklORElOR19LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgdHlwZSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIGJpbmRpbmcgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nLmJvb2xlYW5WYWx1ZSgpKQotICAgICAgewotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKFBPUlRfVFlQRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKHR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgUE9SVF9UWVBFX0tFWSwKLSAgICAgICAgICBuZXcgQm9vbGVhbihjb250YWluc0xlZ2FsQ2xhaW0odHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIHR5cGUgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihQT1JUX1RZUEVfS0VZKTsKLQotICAgICAgaWYgKHR5cGUuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY2xhaW1Gb3VuZCA9IGNvbnRhaW5zQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKAotICAgICAgICAgIE9QRVJBVElPTl9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oCi0gICAgICAgICAgICBjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gb3BlcmF0aW9uID0gKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24uYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoTUVTU0FHRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgTUVTU0FHRV9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KSB7Ci0gIAlpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKLSAgCQlpZiAoY29udGFpbnNMZWdhbENsYWltKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkgewotICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgb3BlcmF0aW9uIGZvdW5kIik7Ci0gIAkJfSBlbHNlIHsKLSAgCQkJCi0gIAkJfQotICAJfQotICB9Ci0gICovCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVxdWlyZWQgPQotICAgICAgZWwgIT0gbnVsbAotICAgICAgICAmJiBlbC5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICAgJiYgZWwuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChpc1BhcmVudENvbmZvcm1zKHBhcmVudCwgY3R4KSkKLSAgICB7Ci0gICAgICBpZiAocmVxdWlyZWQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBlbC50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyZW50IGVsZW1lbnQgY29uZm9ybXMgdG8gdGhlIGJhc2ljIHByb2ZpbGUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1BhcmVudENvbmZvcm1zKE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nCi0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9UWVBFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICgKLSAgICAgIHBhcmVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbgotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBJbnB1dAotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gKChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKE9QRVJBVElPTl9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgTWVzc2FnZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBQYXJ0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihNRVNTQUdFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBFeHBlY3Qgd3NkbDpkZWZpbnRpb25zCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAvLygoU2VydmljZSlkZWYuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KClbMF0pLmdldFBvcnRzKCkKLSAgICAvLyBUcmF2ZXJzZSBXU0RMCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0VHlwZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlRGVmaW5pdGlvbjJCaW5kaW5nKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yRWxlbWVudCgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yTWVzc2FnZSgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMlBvcnRUeXBlKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yVHlwZXMoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotCi0gICAgaWYgKCFjbGFpbUZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkcpKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGZhaWx1cmVEZXRhaWxNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGxlZ2FsIHNjaGVtYSBkZWZpbml0aW9uIFVSSS4gCi0gICAqIGxlZ2FsIGlzICdodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLycKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ2xhaW0oRWxlbWVudCBlbCkKLSAgewotICAgIGlmIChlbCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgaWYgKGVsICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdoZXRoZXIgY29udGFpbnMgY29uZm9ybWFuY2UgY2xhaW1zLgotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltIHdpdGgKLSAgICogbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBmaW5kIGNsYWltCi0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwKLSAgICAgICAgJiYgdmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsID0gWE1MVXRpbHMuZmluZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZGRmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLS8qKgotICogQlAyMjAxLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBXZWIgc2VydmljZSBkZWZpbml0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2l0aCBhIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuIDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudCB1c2VzIFVURi04IG9yIFVURi0xNiBmb3IgdGhlIGVuY29kaW5nLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGNoYXJbXSBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsweDIwLAotICAgICAgMHg5LCAweEQsIDB4QSwgJ1wnJywgJ1wiJ307Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsnPSd9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTkNPRElOR19UT0tFTiA9ICJlbmNvZGluZyI7Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLAotICAgKiAgICAgIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKQotICAgICAgICAuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIFN0cmluZyB4bWxEZWNsID0gcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KGxvY2F0aW9uKTsKLSAgICBpZiAoeG1sRGVjbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSBlbHNlCi0gICAgewotICAgICAgaWYgKCF2YWxpZEVuY29kaW5nKHhtbERlY2wpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHhtbERlY2wsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHVybCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHVybC5vcGVuU3RyZWFtKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNoYXJbXSBjID0gbmV3IGNoYXJbNF07Ci0gICAgICAgICAgcmVhZGVyLnJlYWQoYyk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAobmV3IFN0cmluZyhjKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiP3htbCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjw/eG1sIik7Ci0gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIWVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotICAgICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKSBjaGFyQ29kZSk7Ci0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy9WRVJCT1NFCi0gICAgICAgIGlmICh2YWxpZGF0b3IudmVyYm9zZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICBbV1NJMjIwMV0gRXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICB9IGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIC8qCi0gICAqIFZlcmlmeSB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdXRmLTE2IG9yIHV0Zi04IGVuY29kaW5nLiBAcGFyYW0geG1sRGVjbCAtCi0gICAqIHhtbCBkZWNsYXJhdGlvbiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotICAgICAgICBpZiAodG9rZW4uZXF1YWxzKEVOQ09ESU5HX1RPS0VOKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgcmVzdWx0ID0gVVRGXzhfRU5DT0RJTkcuZXF1YWxzSWdub3JlQ2FzZShlbmMpCi0gICAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTM5OGZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogQlAyMjAyLgotICogIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQgd2l0aGluIGEgV1NETCBkb2N1bWVudCB3aGljaCBpbXBvcnRzIGFuIFhNTCBzY2hlbWEgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGltcG9ydGVkIHNjaGVtYSB1c2VzIFVURi04IG9yIFVURi0xNiBmb3IgdGhlIGVuY29kaW5nLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIyMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydEZvdW5kID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBjaGFyW10gT01NSVRFRF9YTUxfREVDTEFSQVRJT05fREVMSU1JVEVSUyA9Ci0gICAgbmV3IGNoYXJbXSB7IDB4MjAsIDB4OSwgMHhELCAweEEsICdcJycsICdcIicgfTsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyW10gWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPSBuZXcgY2hhcltdIHsgJz0nIH07Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl84X0VOQ09ESU5HID0gIlVURi04IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVVRGXzE2X0VOQ09ESU5HID0gIlVURi0xNiI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU5DT0RJTkdfVE9LRU4gPSAiZW5jb2RpbmciOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICAvL0RlZmluaXRpb24gZGVmID0gKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgTGlzdCBleHRzID0gbnVsbDsKLSAgICAvL2lmIChkZWYuZ2V0VHlwZXMoKSAhPSBudWxsKQotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgLy9leHRzID0gZGVmLmdldFR5cGVzKCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBleHRzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKGV4dHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgICAgaWYgKChkZWZpbml0aW9uID0KLSAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0eXBlcykpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHR5cGVzIGRlZmluaXRpb24gaW4gYW55IFdTREwgZG9jdW1lbnQuIik7Ci0gICAgICB9Ci0KLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgU2NoZW1hCi0gICAgICAgICAgJiYgZWwuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICBzZWFyY2hGb3JTY2hlbWEoKChTY2hlbWEpIGVsKS5nZXRFbGVtZW50KCksCi0gICAgICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIFNlYXJjaCB4c2Qgc2NoZW1hIG9yIHhzZCBpbXBvcnQgZnJvbSBub2RlLiBJZiBub2RlIGlzIHhzZCBpbXBvcnQgaXQncyBsb2FkaW5nIHNjaGVtYS4KLSAgICogQHBhcmFtIG4gLSBub2RlCi0gICovCi0gIHByaXZhdGUgdm9pZCBzZWFyY2hGb3JTY2hlbWEoTm9kZSBuLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0JaWYgKChuIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLQl7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBzZWFyY2hlcyBmb3IgeHNkOmltcG9ydCBlbGVtZW50Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJvY2Vzc1NjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW1wb3J0Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAvLyBlbHNlIGl0ZXJhdGUgZWxlbWVudCByZWN1cnNpdmVseQotICAgICAgICAgICAgICBzZWFyY2hGb3JTY2hlbWEobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIEl0IGxvYWRzIHhzZCBzY2hlbWEgYW5kIHRoZW4gY2hlY2sgdmFsaWQgZW5jb2RpbmcgYW5kIGxvb2tpbmcgZm9yIHhzZDpzY2hlbWEgZWxlbWVudCBmb3IgbmV4dCBwcm9jZXNzLiAKLSAgICogQHBhcmFtIGltcG9ydE5vZGUgLSB4c2Qgc2NoZW1hCi0gICovCi0gIHByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotICAgIEVsZW1lbnQgaW0gPSAoRWxlbWVudCkgaW1wb3J0Tm9kZTsKLSAgICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgLy8gdHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgIFN0cmluZyBkZWNsID0KLSAgICAgICAgICByZWFkWE1MRGVjbGFyYXRpb25TdGF0ZW1lbnQoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgICAgIGlmICghdmFsaWREZWNsYXJhdGlvbihkZWNsLAotICAgICAgICAgIEVOQ09ESU5HX1RPS0VOLAotICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IFVURl84X0VOQ09ESU5HLCBVVEZfMTZfRU5DT0RJTkcgfSkpCi0gICAgICAgIHsKLSAgICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gICAgICAgICAgZXJyb3JzLmFkZCgoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsaWREZWNsYXJhdGlvbihkZWNsLCAidmVyc2lvbiIsIG5ldyBTdHJpbmdbXSB7ICIxLjAiIH0pKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZCgKLSAgICAgICAgICAgICJWZXJzaW9uIG51bWJlciBpbiBYTUwgZGVjbGFyYXRpb24gaXMgbm90IDEuMC4gIFhNTCBzY2hlbWEgZmlsZTogIgotICAgICAgICAgICAgICArIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICsgIjoiICsgY29udGV4dCk7Ci0KLSAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KTsKLQotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgICBwcm9jZXNzU2NoZW1hKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgWE1MVXRpbHMuY3JlYXRlVVJMU3RyaW5nKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpLCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgfQotCi0gIC8qKgotICAqIFJlYWRzIGFuIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuCi0gICogQHBhcmFtIGxvY2F0aW9uCi0gICogQHJldHVybiBTdHJpbmcKLSAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KFN0cmluZyBsb2NhdGlvbiwgU3RyaW5nIGJhc2VVUkkpCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIC8vIG5vdGhpbmcKLSAgICAgIGludCBpID0gYmFzZVVSSS5sYXN0SW5kZXhPZignLycpOwotICAgICAgaW50IGogPSBiYXNlVVJJLmxhc3RJbmRleE9mKCdcXCcpOwotICAgICAgaWYgKGogPiBpKQotICAgICAgICBpID0gajsKLSAgICAgIGxvY2F0aW9uID0gYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgbG9jYXRpb247Ci0gICAgfQotCi0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgVVJMIHVybCA9IG51bGw7Ci0gICAgICBSZWFkZXIgcmVhZGVyID0gbnVsbDsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdXJsID0gbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gd2Ugc2hvdWxkIHRyeSB0byBhY2Nlc3MgbG9jYXRpb24gYXMgZmlsZQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVybCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHVybC5vcGVuU3RyZWFtKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgY2hhckNvZGU7Ci0gICAgICAgIGJvb2xlYW4gZW5kID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZWFkZXIucmVhZHkoKSkKLSAgICAgICAgewotICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLQotICAgICAgICAgIHdoaWxlIChyZWFkZXIucmVhZHkoKSAmJiAhKGNoYXJDb2RlID09ICc8JykpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgaWYgKGNoYXJDb2RlID09ICc8JykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKSBjaGFyQ29kZSk7Ci0gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIWVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotICAgICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKSBjaGFyQ29kZSk7Ci0KLSAgICAgICAgICAgICAgZW5kID0gY2hhckNvZGUgPT0gJz4nOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTk9URTogVGhpcyByZXN1bHQgZG9lcyBub3QgZ2V0IHByb3BvZ2F0ZWQgYmFjayEKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdGhlIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByZXN1bHQgPSBidWYudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvcnMuYWRkKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qCi0gICAqIEBwYXJhbSB4bWxEZWNsIC0geG1sIGRlY2xhcmF0aW9uCi0gICAqIEByZXR1cm4gaWYgeG1sIGRlY2xhcmF0aW9uIGNvbnRhaW5zIGVuY29kaW5nPSJ1dGYtMTYiIG9yIGVuY29kaW5nPSJ1dGYtOCIgaXQgcmV0aXJucyB0cnVlLiAKLSAgKi8KLQotICAvL3ByaXZhdGUgYm9vbGVhbiB2YWxpZEVuY29kaW5nKFN0cmluZyB4bWxEZWNsKQotICAvL3sKLSAgLy8gIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgLy8gIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgLy8gIGlmICh4bWxEZWNsICE9IG51bGwpCi0gIC8vICB7Ci0gIC8vICAgIFN0cmluZ1Rva2VuaXplciBzdCA9Ci0gIC8vICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcigKLSAgLy8gICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsCi0gIC8vICAgICAgICBYTUxfREVDTEFSQVRJT05fREVMSU1JVEVSUyk7Ci0gIC8vICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAvLyAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgLy8gICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gIC8vICAgIHsKLSAgLy8gICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgLy8KLSAgLy8gICAgICBpZiAodG9rZW4uZXF1YWxzKEVOQ09ESU5HX1RPS0VOKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICBmb3VuZCA9IHRydWU7Ci0gIC8vCi0gIC8vICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgLy8gICAgICAgIFN0cmluZyBlbmMgPSAoU3RyaW5nKSB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgLy8KLSAgLy8gICAgICAgIHJlc3VsdCA9Ci0gIC8vICAgICAgICAgVVRGXzhfRU5DT0RJTkcuZXF1YWxzSWdub3JlQ2FzZShlbmMpCi0gIC8vICAgICAgICAgICAgfHwgVVRGXzE2X0VOQ09ESU5HLmVxdWFsc0lnbm9yZUNhc2UoZW5jKTsKLSAgLy8gICAgICB9Ci0gIC8vICAgIH0KLSAgLy8gIH0KLSAgLy8KLSAgLy8gIHJldHVybiByZXN1bHQ7Ci0gIC8vfQotCi0gIC8qKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyB2YWxpZCB2ZXJzaW9uIG51bWJlciB0aGVuIHRydWUgaXMgcmV0dXJuZWQuIAotICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWREZWNsYXJhdGlvbigKLSAgICBTdHJpbmcgeG1sRGVjbCwKLSAgICBTdHJpbmcgdG9rZW5OYW1lLAotICAgIFN0cmluZ1tdIGNoZWNrVmFsdWVMaXN0KQotICB7Ci0gICAgLy9ib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBpZiAoeG1sRGVjbCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoCi0gICAgICAgICAgT01NSVRFRF9YTUxfREVDTEFSQVRJT05fREVMSU1JVEVSUywKLSAgICAgICAgICBYTUxfREVDTEFSQVRJT05fREVMSU1JVEVSUyk7Ci0gICAgICBFbnVtZXJhdGlvbiB0b2tlbnMgPSBzdC5wYXJzZSh4bWxEZWNsKTsKLQotICAgICAgaWYgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAodG9rZW5zLmhhc01vcmVFbGVtZW50cygpICYmICFmb3VuZCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgaWYgKHRva2VuLmVxdWFscyh0b2tlbk5hbWUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0b2tlblZhbHVlID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hlY2tWYWx1ZUxpc3QubGVuZ3RoICYmICFyZXN1bHQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGNoZWNrVmFsdWVMaXN0W2ldLmVxdWFsc0lnbm9yZUNhc2UodG9rZW5WYWx1ZSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRva2VucyB0aGVuIGl0IGlzIG5vdCBhIHZhbGlkIGRlY2xhcmFjdGlvbgotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoKLSAgICogSXQncyBsb29raW5nIGZvciB4c2QgaW1wb3J0IGFuZCBsb2FkIGl0IGlmIGZpbmQuCi0gICAqIEBwYXJhbSBzY2hlbWEgLSB4c2Qgc2NoZW1hCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBuYW1lc3BhY2Ugb2Ygc2NoZW1hCi0gICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NjaGVtYShOb2RlIHNjaGVtYSwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotCWlmICgoc2NoZW1hICE9IG51bGwpICYmICghcHJvY2Vzc2VkU2NoZW1hcy5jb250YWlucyhzY2hlbWEpKSkKLQl7Ci0JICBwcm9jZXNzZWRTY2hlbWFzLmFkZChzY2hlbWEpOwotICAgICAgTm9kZSBuID0gc2NoZW1hLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkKLSAgICAgICAgICAmJiBYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgewotICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1OTYzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjIwOC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOm9wZXJhdGlvbiBpbiBhIHdzZGw6cG9ydFR5cGUgZGVmaW5pdGlvbjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgd3NkbDpvcGVyYXRpb24gZWxlbWVudCBpcyBlaXRoZXIgYSBXU0RMIHJlcXVlc3QvcmVzcG9uc2Ugb3IgYSBvbmUtd2F5IG9wZXJhdGlvbiAobm8gTm90aWZpY2F0aW9uIG9yIFNvbGxpY2l0LVJlc3BvbnNlKS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjA4IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjA4KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0KLSAgICAgIChPcGVyYXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgT3BlcmF0aW9uVHlwZSBvcFR5cGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoKG9wVHlwZSA9PSBudWxsKQotICAgICAgfHwgKCFvcFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuT05FX1dBWSkKLSAgICAgICAgJiYgIW9wVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBpZiAob3BUeXBlID09IG51bGwpCi0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAiQ291bGQgbm90IGRldGVybWluZSB0aGUgb3BlcmF0aW9uIHR5cGUgZm9yICIKLSAgICAgICAgICAgICAgKyBvcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICsgIi4iLAotICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIGVsc2UKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7IC8vIG5vbmUgZGVmaW5lZCBpbiBUQUQgYXQgcHJlc2VudCAKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZjNkYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDI0MDIuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6YmluZGluZyBlbGVtZW50IGhhcyBhIHNvYXBiaW5kOmJpbmRpbmcgY2hpbGQgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNDAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIHBvcnQgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIC8vUG9ydCBwb3J0ID0gKFBvcnQpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFNPQVAgQmluZGluZwotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODhlOGQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDI0MDQuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNvbnRhaW5lZCBzb2FwOmJpbmRpbmcgZWxlbWVudCBoYXMgYSAidHJhbnNwb3J0IiBhdHRyaWJ1dGUsIHdoaWNoIGhhcyB2YWx1ZTogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDI0MDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDI0MDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIFRyeSB0byBnZXQgdGhlIFNPQVAgYmluZGluZwotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcoYmluZGluZyk7Ci0KLSAgICAvLyBUZXN0IHRoZSBhc3NlcnRpb24gCi0gICAgLy8gQ2hlY2sgZm9yIFNvYXAgYmluZGluZyBuYW1lc3BhY2UgCi0gICAgaWYgKChzb2FwQmluZGluZyA9PSBudWxsKQotICAgICAgfHwgKHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpID09IG51bGwpCi0gICAgICB8fCAhc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUF9IVFRQKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHNvYXBCaW5kaW5nID09IG51bGwKLSAgICAgICAgICA/ICJXU0RMIGRvY3VtZW50IGRvZXMgbm90IGNvbnRhaW4gU09BUCBiaW5kaW5nIGVsZW1lbnQuIgotICAgICAgICAgIDogc29hcEJpbmRpbmcudG9TdHJpbmcoKSwKLSAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNWQ4ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDA2LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCBpZiB0aGUgdXNlIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gdGhlIHNvYXBiaW5kOmJvZHksIHNvYXBiaW5kOmZhdWx0LCBzb2FwYmluZDpoZWFkZXIsIG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnRzLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgdXNlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSBvZiAibGl0ZXJhbCIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjQwNiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQwNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIEdldCBTT0FQIGJvZHkgZWxlbWVudHMgICAgICAKLSAgICBTT0FQQm9keVtdIHNvYXBCb2RpZXMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpOwotCi0gICAgLy8gQUREOiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUgYXJlIG5vIHNvYXAgYm9keSBlbGVtZW50cz8gIFJpZ2h0IG5vdyB0aGUgVEEgcmVzdWx0IGlzIE5BLiAgICAgIAotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBjb3JyZWN0IHVzZSB2YWx1ZSAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBCb2RpZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBzb2FwQm9kaWVzW2ldOwotICAgICAgaWYgKHNvYXBCb2R5LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBCb2R5LmdldFVzZSgpLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBCb2R5LnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCBTT0FQIGZhdWx0IGVsZW1lbnRzICAgICAgCi0gICAgU09BUEZhdWx0W10gc29hcEZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZyk7Ci0KLSAgICAvLyBUZXN0IHRoZSBhc3NlcnRpb24gCi0gICAgLy8gQ2hlY2sgZm9yIGNvcnJlY3QgdXNlIHZhbHVlIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc29hcEZhdWx0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gc29hcEZhdWx0c1tpXTsKLSAgICAgIGlmIChzb2FwRmF1bHQuZ2V0VXNlKCkgIT0gbnVsbAotICAgICAgICAmJiAhc29hcEZhdWx0LmdldFVzZSgpLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgKGZhaWx1cmVEZXRhaWxNZXNzYWdlID09IG51bGwKLSAgICAgICAgICAgID8gc29hcEZhdWx0LnRvU3RyaW5nKCkKLSAgICAgICAgICAgIDogZmFpbHVyZURldGFpbE1lc3NhZ2UgKyAiXG5cbiIgKyBzb2FwRmF1bHQudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChmYWlsdXJlRGV0YWlsID09IG51bGwpCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGZhaWx1cmVEZXRhaWxNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZmFpbHVyZURldGFpbC5zZXRGYWlsdXJlTWVzc2FnZShmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCBTT0FQIGhlYWRlciBlbGVtZW50cyAgICAgIAotICAgIFNPQVBIZWFkZXJbXSBzb2FwSGVhZGVycyA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBIZWFkZXJzKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBjb3JyZWN0IHVzZSB2YWx1ZSAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBIZWFkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IHNvYXBIZWFkZXJzW2ldOwotICAgICAgaWYgKHNvYXBIZWFkZXIuZ2V0VXNlKCkgIT0gbnVsbAotICAgICAgICAmJiAhc29hcEhlYWRlci5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgIChmYWlsdXJlRGV0YWlsTWVzc2FnZSA9PSBudWxsCi0gICAgICAgICAgICA/IHNvYXBIZWFkZXIudG9TdHJpbmcoKQotICAgICAgICAgICAgOiBmYWlsdXJlRGV0YWlsTWVzc2FnZSArICJcblxuIiArIHNvYXBIZWFkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChmYWlsdXJlRGV0YWlsID09IG51bGwpCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGZhaWx1cmVEZXRhaWxNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZmFpbHVyZURldGFpbC5zZXRGYWlsdXJlTWVzc2FnZShmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCBTT0FQIGhlYWRlciBmYXVsdCBlbGVtZW50cyAgICAgIAotICAgIFNPQVBIZWFkZXJGYXVsdFtdIHNvYXBIZWFkZXJGYXVsdHMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVyRmF1bHRzKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBjb3JyZWN0IHVzZSB2YWx1ZSAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBIZWFkZXJGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9IHNvYXBIZWFkZXJGYXVsdHNbaV07Ci0gICAgICBpZiAoc29hcEhlYWRlckZhdWx0LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBIZWFkZXJGYXVsdC5nZXRVc2UoKS5lcXVhbHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgIChmYWlsdXJlRGV0YWlsTWVzc2FnZSA9PSBudWxsCi0gICAgICAgICAgICA/IHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpCi0gICAgICAgICAgICA6IGZhaWx1cmVEZXRhaWxNZXNzYWdlICsgIlxuXG4iICsgc29hcEhlYWRlckZhdWx0LnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIHBhc3NlZCwgYnV0IHRoZXJlIHdhcyBub3RoaW5nIHRvIGNoZWNrIHRoZW4gc2V0IHRvIG5vdEFwcGxpY2FibGUKLSAgICBpZiAocmVzdWx0ID09IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VECi0gICAgICAmJiAoc29hcEJvZGllcyA9PSBudWxsIHx8IHNvYXBCb2RpZXMubGVuZ3RoID09IDApCi0gICAgICAmJiAoc29hcEZhdWx0cyA9PSBudWxsIHx8IHNvYXBGYXVsdHMubGVuZ3RoID09IDApCi0gICAgICAmJiAoc29hcEhlYWRlcnMgPT0gbnVsbCB8fCBzb2FwSGVhZGVycy5sZW5ndGggPT0gMCkKLSAgICAgICYmIChzb2FwSGVhZGVyRmF1bHRzID09IG51bGwgfHwgc29hcEhlYWRlckZhdWx0cy5sZW5ndGggPT0gMCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWViYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0qIEJQMjQxNi4gCi0qICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnM8L2NvbnRleHQ+Ci0qICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPkV2ZXJ5IFFOYW1lIGluIHRoZSBXU0RMIGRvY3VtZW50IGFuZCBpdHMgaW1wb3J0cywgaXMgcmVmZXJlbmNpbmcgYW4gZWxlbWVudCBpbiBhIG5hbWVzcGFjZSB0aGF0IGhhcyBlaXRoZXIgYmVlbiBpbXBvcnRlZCBvciBkZWZpbmVkIGluIHRoZSBXU0RMIGRvY3VtZW50IHRoYXQgY29udGFpbnMgdGhlIHJlZmVyZW5jZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKi8KLXB1YmxpYyBjbGFzcyBCUDI0MTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNDE2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTElTVF9LRVkgPSAibmFtZXNwYWNlcyI7Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiB0aGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHFuYW1lCi0gICAqIEBwYXJhbSBjdHgKLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja05hbWVzcGFjZShRTmFtZSBxbmFtZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbmFtZXNwYWNlcyA9IChMaXN0KSBjdHguZ2V0UGFyYW1ldGVyKE5TX0xJU1RfS0VZKTsKLQotICAgICAgICBpZiAoIW5hbWVzcGFjZXMuY29udGFpbnMobmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gbmFtZXNwYWNlOwotCi0gICAgICAgICAgY3R4LmNhbmNlbFByb2Nlc3NpbmcoKTsKLSAgICAgICAgfQotICAgICAgfSAvLyA/Pz8gc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBvdGhlcndpc2UgIAotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgcG9ydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBvcnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKTsKLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKGJpbmRpbmcuZ2V0UU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkJpbmRpbmcsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIGJpbmRpbmcsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgUG9ydFR5cGUgcFR5cGUgPSBiaW5kaW5nLmdldFBvcnRUeXBlKCk7Ci0gICAgICBpZiAocFR5cGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2hlY2tOYW1lc3BhY2UocFR5cGUuZ2V0UU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKTsKLSAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShpbnB1dC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLQotICAgICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRPdXRwdXQoKTsKLSAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCAmJiBvdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKG91dHB1dC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLQotICAgICAgTWFwIGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRGYXVsdHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IGZhdWx0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBpZiAoZmF1bHQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGVja05hbWVzcGFjZShmYXVsdC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwgY3R4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuTWVzc2FnZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIC8qIFJFTU9WRTogVGhpcyBpcyBhbHJlYWR5IGRvbmUgaW4gV1NJMjQxNwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkgewotICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICBNYXAgcGFydHMgPSBtZXNzYWdlLmdldFBhcnRzKCk7Ci0gICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IHBhcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLSAgICAgICAKLSAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldEVsZW1lbnROYW1lKCksIGN0eCk7ICAgICAgICAgICAgICAgIAotICAgICAgIGNoZWNrTmFtZXNwYWNlKHBhcnQuZ2V0VHlwZU5hbWUoKSwgY3R4KTsKLSAgICAgfQotICAgfQotICB9Ci0gICovCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPQotICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBuYW1lc3BhY2VzIGltcG9ydGVkIGFuZCBkZWZpbmVkIGluIHRoZSBkZWZpbml0aW9uCi0gICAgTGlzdCBuYW1lc3BhY2VzID0gdGhpcy52YWxpZGF0b3IuZ2V0V1NETFRhcmdldE5hbWVzcGFjZUxpc3QoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBSRU1PVkU6Ci0gICAgLy9NYXAgbmFtZXNwYWNlcyA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCi0gICAgLy8gdHJhdmVyc2UgZGVmaW5pdGlvbiB0byBjaGVjayBuYW1lc3BhY2VzCi0gICAgTWFwIHBhcmFtcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcGFyYW1zLnB1dChOU19MSVNUX0tFWSwgbmFtZXNwYWNlcyk7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy8gVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0KHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGRlZmluaXRpb24sIHBhcmFtcyk7Ci0KLSAgICBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgewotICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NDNkNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjQxNy4gCi0gKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zPC9jb250ZXh0PgotICogICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RXZlcnkgUU5hbWUgaW4gdGhlIFdTREwgZG9jdW1lbnQgYW5kIGl0cyBpbXBvcnRzIGFuZCB0aGF0IAotICogICAgICBpcyByZWZlcnJpbmcgdG8gYSBzY2hlbWEgY29tcG9uZW50LCB1c2VzIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgdGFyZ2V0TmFtZXNwYWNlIAotICogICAgICBhdHRyaWJ1dGUgb24gdGhlIHhzOnNjaGVtYSBlbGVtZW50LCBvciBhIG5hbWVzcGFjZSBkZWZpbmVkIGluIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIAotICogICAgICBvbiBhbiB4czppbXBvcnQgZWxlbWVudCB3aXRoaW4gdGhlIHhzOnNjaGVtYSBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDI0MTcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOU19MSVNUX0tFWSA9ICJuYW1lc3BhY2VzIjsKLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIG5hbWVzcGFjZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gcW5hbWUKLSAgICogQHBhcmFtIGN0eAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTmFtZXNwYWNlKFFOYW1lIHFuYW1lLCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gcW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBuYW1lc3BhY2VMaXN0ID0gKExpc3QpIGN0eC5nZXRQYXJhbWV0ZXIoTlNfTElTVF9LRVkpOwotCi0gICAgICAgIGlmICgobmFtZXNwYWNlTGlzdCAhPSBudWxsKSAmJiAhbmFtZXNwYWNlTGlzdC5jb250YWlucyhuYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JMaXN0LmFkZChxbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuTWVzc2FnZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE1lc3NhZ2UgbWVzc2FnZSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBNYXAgcGFydHMgPSBtZXNzYWdlLmdldFBhcnRzKCk7Ci0KLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IHBhcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSwgY3R4KTsKLSAgICAgICAgY2hlY2tOYW1lc3BhY2UocGFydC5nZXRUeXBlTmFtZSgpLCBjdHgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIEdldCBhIGxpc3Qgb2YgYWxsIHNjaGVtYSB0YXJnZXROYW1lc3BhY2VzCi0gICAgTGlzdCB0bnNMaXN0ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoKHRuc0xpc3QgPSB0aGlzLnZhbGlkYXRvci5nZXRTY2hlbWFOYW1lc3BhY2VMaXN0KGRlZmluaXRpb24pKSA9PSBudWxsKQotICAgICAgICB0bnNMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgIH0KLQotICAgIGNhdGNoIChXU0lFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBUaGlzIGV4Y2VwdGlvbiB3b3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBzY2hlbWEgZGVmaW5pdGlvbiBoYWQgYSBwcm9ibGVtCi0gICAgICB0bnNMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgIH0KLQotICAgIC8vIEFsd2F5cyBhZGQgWE1MIHNjaGVtYSBuYW1lc3BhY2UgdG8gY292ZXIgYnVpbHQtaW4gdHlwZXMKLSAgICB0bnNMaXN0LmFkZChXU0lDb25zdGFudHMuTlNfVVJJX1hTRCk7Ci0KLSAgICAvLyBUcmF2ZXJzZSBkZWZpbml0aW9uIHRvIGNoZWNrIHNjaGVtYSBuYW1lc3BhY2VzCi0gICAgTWFwIHBhcmFtcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcGFyYW1zLnB1dChOU19MSVNUX0tFWSwgdG5zTGlzdCk7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uLCBwYXJhbXMpOwotCi0gICAgLy8gSWYgdGhlcmUgd2VyZSBubyBlcnJvcnMsIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQgZmFpbGVkIC8gY3JlYXRlIHRoZSBmYWlsdXJlIGRldGFpbCB1c2luZyB0aGUgUU5hbWVzIHRoYXQgd2VyZSBpbiBlcnJvcgotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2NGUxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICAqIEJQMjcwMC4KLSAgKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zIGVsZW1lbnQgd2l0aGluIGEgV1NETCBkb2N1bWVudC48L2NvbnRleHQ+Ci0gICogICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6ZGVmaW5pdGlvbnMgaXMgYSB3ZWxsLWZvcm1lZCBYTUwgMS4wIGRvY3VtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICovCi1wdWJsaWMgY2xhc3MgQlAyNzAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNzAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vU3RyaW5nIHdzZGxVUkkgPSBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKS5nZXREb2N1bWVudEJhc2VVUkkoKTsgIAotICAgICAgLy8gVEVNUDogTmVlZCB0byBkZWZpbmUgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgV1NETCBVUkkKLSAgICAgIFN0cmluZyB3c2RsVVJJID0gZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0UmVmZXJlbmNlSUQoKTsKLSAgICAgIC8vIG5vbi12YWxpZGF0aW5nIHBhcnNlCi0gICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTCh3c2RsVVJJLCBudWxsKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkgaW5zdGFuY2VvZiBTQVhFeGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgVXRpbHMuZ2V0RXhjZXB0aW9uRGV0YWlscyhlLmdldFRhcmdldEV4Y2VwdGlvbigpKSwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoVXRpbHMuZ2V0RXhjZXB0aW9uRGV0YWlscyhlKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNGMxZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAgKiBCUDI3MDEuCi0gICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQuPC9jb250ZXh0PgotICAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmRlZmluaXRpb25zIG5hbWVzcGFjZSBoYXMgdmFsdWU6IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICovCi1wdWJsaWMgY2xhc3MgQlAyNzAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNzAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLyoKLSAgICBpZiAoZGVmICE9IG51bGwpIHsKLSAgICAJUU5hbWUgcW5hbWUgPSBkZWYuZ2V0UU5hbWUoKTsKLSAgICAJCQkJCi0gICAgCWlmIChxbmFtZSAhPSBudWxsKSB7CQotICAgIAkJLy9pZiAoZGVmLmdldE5hbWVzcGFjZSgiIikuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkgewotICAgIAkJaWYgKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpKSB7Ci0gICAgCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgKi8KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBzY2hlbWFVc2VkID0gdGhpcy52YWxpZGF0b3IuZ2V0U2NoZW1hVXNlZChkZWYpOwotICAgICAgaWYgKHNjaGVtYVVzZWQuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAvL0FERDogZmFpbHVyZSBkZXNjcmlwdGlvbj8KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjU2NTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDI3MDMuCi0gKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBkZXNjcmlwdGlvbiB3aXRoaW4gYSBXU0RMIGRvY3VtZW50LCBpZiBpdCB1c2VzIHRoZSBXU0RMIG5hbWVzcGFjZTwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBkZWZpbml0aW9uIGNvbmZvcm1zIHRvIHRoZSBXU0RMIHNjaGVtYSBsb2NhdGVkIGF0IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvMjAwMy0wMi0xMS54c2Q8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNzAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNzAzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBub3RlIHRoYXQgdGhpcyBhc3NlcnRpb24gaXMgcmVkdW5kYW50LCBzaW5jZSB0aGUgYmFzZSB3c2RsIHZhbGlkYXRvciBjaGVja3MgdGhpcyBhbHJlYWR5LgotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VELCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI4MDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI4MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2MDJhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyODAzCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBmb3IgdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQsIGFuZCB0aGUgYXR0cmlidXRlJ3MgdmFsdWUgaXMgbm90IGEgcmVsYXRpdmUgVVJJLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDI4MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDI4MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBHZXR0aW5nIHdzZGw6aW1wb3J0Ci0gICAgSW1wb3J0IGltID0gKEltcG9ydCkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHRoZSAibmFtZXNwYWNlIiBhdHRyaWJ1dGUgaW4gdGhlIGltcG9ydCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChpbS5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBJZiBhIG5hbWVzcGFjZSBVUkkgaXMgcmVsYXRpdmUgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIFVSSSB1cmkgPSBuZXcgVVJJKGltLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIGlmICghdXJpLmlzQWJzb2x1dGUoKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgaW0uZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIGlzIHJlbGF0aXZlIFVSSS4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjMDY1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotLyoqCi0gKiBCUDQyMDAuIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMgdGhhdCBjb250YWlucyBhIHdzZGwgZXh0ZW5zaW9uIGVsZW1lbnQgb3IgYXR0cmlidXRlIGZyb20gYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbiAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkNvbnRhaW5lZCBXU0RMIGV4dGVuc2lvbiBlbGVtZW50cyB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gdGhlICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lc3BhY2VzIG1heSByZXF1aXJlIG91dCBvZiBiYW5kIG5lZ290aWF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0qLwotcHVibGljIGNsYXNzIEJQNDIwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQNDIwMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLCBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIElmIGEgY2hpbGQgZWxlbWVudCBvZiB3c2RsOnR5cGVzIGlzIGZyb20gYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbgotICAgIC8vICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVHlwZXMpCi0gICAgewotICAgICAgLy9pZiAoIW9iai5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygKLSAgICAgIC8vICBXU0lDb25zdGFudHMuTlNfVVJJX1hTRCkpCi0gICAgICAvL3sKLSAgICAgIC8vICBBZGQgZWxlbWVudCBuYW1lIHRvIGVycm9yIGxpc3QKLSAgICAgIC8vICBlcnJvckxpc3QuYWRkKG9iai5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICAgIC8vfQotICAgIH0KLSAgICAvLyBvciBhbnkgb3RoZXIgZXh0IGVsZW1lbnQgY29taW5nIGZyb20gYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbgotICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICAgIGVsc2UgaWYgKCFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMX1NPQVApCi0gICAgCSAgJiYgIW9iai5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgIHsKLSAgICAgIC8vIEFkZCBlbGVtZW50IG5hbWUgdG8gZXJyb3IgbGlzdAotICAgICAgZXJyb3JMaXN0LmFkZChvYmouZ2V0RWxlbWVudFR5cGUoKSk7IAotICAgIH0KLSAgfQotCi0gICAvKioKLSAgKiAgKG5vbi1KYXZhZG9jKQotICAqICBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPQotICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0KLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFbGVtZW50KHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGRlZmluaXRpb24pOwotCi0gICAgdHJ5Ci0JewotICAgICAgLy8gZ2V0dGluZyBXU0RMIGRvY3VtZW50LgotICAgICAgRG9jdW1lbnQgZG9jID0gdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbnVsbCk7Ci0gICAgICBpZiAoZG9jICE9IG51bGwpCi0gICAgICB7ICAgCi0gICAgICAgIGNoZWNrRWxlbWVudChkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotCi0gICAgICAgIGlmIChlcnJvckxpc3QuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpICsgIlxuXG4iICsgZXJyb3JMaXN0LnRvU3RyaW5nKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotCX0gICAKLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotCX0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBvbiB3c2RsIGVsZW1lbnRzIHJlY3Vyc2l2ZWx5IHdoZXRoZXIgdGhleSBjb250YWluIGV4dGVuc2lvbiBhdHRyaWJ1dGVzLgotICAgKiBAcGFyYW0gZWxlbSBFbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrRWxlbWVudChFbGVtZW50IGVsZW0pCi0gIHsKLSAgICB3aGlsZSAoZWxlbSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBlbGVtTlMgPSBlbGVtLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgTmFtZWROb2RlTWFwIGF0dHJzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpZiAoYXR0cnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJzLml0ZW0oaSk7Ci0gICAgICAgICAgU3RyaW5nIGF0dHJOUyA9IGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgaWYgKGF0dHJOUyAhPSBudWxsCi0gICAgICAgICAgICAmJiAhYXR0ck5TLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TKQotICAgICAgICAgICAgJiYgIWF0dHJOUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKQotCQkJJiYgIWF0dHJOUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMX1NPQVApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yTGlzdC5hZGQoIkV4dGVuc2liaWxpdHkgYXR0cmlidXRlICIgKyBhdHRyLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJmb3IgdGhlICIgKyBlbGVtLmdldE5vZGVOYW1lKCkgKyAiIGVsZW1lbnQgaXMgZm91bmQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZWxlbU5TLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1hTRCkpCi0gICAgICB7Ci0gICAgICAgIGNoZWNrRWxlbWVudChYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW0pKTsKLSAgICAgIH0KLSAgICAgIGVsZW0gPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhlbGVtKTsKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjEzMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0qIEJQNDIwMS4gCi0qIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmltcG9ydCBlbGVtZW50LCB3aGVyZSB0aGUgbG9jYXRpb24gYXR0cmlidXRlIG9yIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIGhhcyBhIHZhbHVlIHRoYXQgaXMgYSByZWxhdGl2ZSBVUkksIG9yIGEgZm9yIHNvYXA6YWRkcmVzcyBlbGVtZW50IHdoZXJlIHRoZSBsb2NhdGlvbiBhdHRyaWJ1dGUgaXMgYSByZWxhdGl2ZSBVUkkuPC9jb250ZXh0PgotKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHVzZSBvZiBhIHJlbGF0aXZlIFVSSSBhcyB0aGUgdmFsdWUgZm9yIGEgd3NkbDppbXBvcnQgbG9jYXRpb24gb3IgbmFtZXNwYWNlIGF0dHJpYnV0ZSwgb3IgZm9yIGEgc29hcDphZGRyZXNzIGxvY2F0aW9uIGF0dHJpYnV0ZSBtYXkgcmVxdWlyZSBvdXQgb2YgYmFuZCBjb29yZGluYXRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSovCi1wdWJsaWMgY2xhc3MgQlA0MjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQNDIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9yTGlzdCA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiogCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEltcG9ydCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmKG9iaiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmKGlzUmVsYXRpdmVVUkkob2JqLmdldE5hbWVzcGFjZVVSSSgpKSB8fCAKLSAgICAgICAgICBpc1JlbGF0aXZlVVJJKG9iai5nZXRMb2NhdGlvblVSSSgpKSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JMaXN0LmFkZChvYmouZ2V0TmFtZXNwYWNlVVJJKCksIG9iai5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFBvcnQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYob2JqICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmouZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgICBPYmplY3QgZSA9IChPYmplY3QpIGl0Lm5leHQoKTsKLSAgICAgICAgIC8vIGZvciBlYWNoIFNPQVBBZGRyZXNzIGVsZW1lbnRzIGNoZWNrIExvY2F0aW9uVVJJIAotICAgICAgICAgaWYoZSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0gICAgICAgICAgIGlmKGlzUmVsYXRpdmVVUkkoKChTT0FQQWRkcmVzcykgZSkuZ2V0TG9jYXRpb25VUkkoKSkpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBlcnJvckxpc3QuYWRkKCgoU09BUEFkZHJlc3MpIGUpLmdldEVsZW1lbnRUeXBlKCkgKyAKLSAgICAgICAgICAgICAgICAgIjoiICsgKChTT0FQQWRkcmVzcykgZSkuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogIChub24tSmF2YWRvYykKLSAgICogIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0KHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGRlZmluaXRpb24pOwotCi0gICAgaWYgKGVycm9yTGlzdC5pc0VtcHR5KCkpIAotICAgIHsKLSAgICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCAKLSAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLCAoU3RyaW5nKSBudWxsKTsKLSAgICB9Ci0gICAgCi0gICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwodGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlTWVzc2FnZSgpICsgCi0gICAgICAgICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIFVSSSBpcyByZWxhdGl2ZSAKLSAgICogQHBhcmFtIHMgLSBVUkkKLSAgICogQHJldHVybiB0cnVlIC0gaWYgVVJJIGlzIHJlbGF0aXZlLCBmYWxzZSAtIGluIG90aGVyIGNhc2UgIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzUmVsYXRpdmVVUkkoU3RyaW5nIHMpCi0gIHsKLSAgICBpZihzID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYobmV3IGphdmEubmV0LlVSSShzKS5pc0Fic29sdXRlKCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE1NDgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYS5YTUxTY2hlbWFQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogQlA0MjAyLiAKLSAqIDxjb250ZXh0PkZvciBhbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBvciBpbXBvcnRlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IGEgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCB3aGljaCBjb250YWlucyBhbnkgc2NoZW1hIGFubm90YXRpb24gZWxlbWVudHMuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFuIFhNTCBzY2hlbWEgZGVmaW5pdGlvbiBkZWZpbmVkIGluIHRoZSB3c2RsOnR5cGVzIGVsZW1lbnQsIG9yIGltcG9ydGVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgYSBzY2hlbWEgZGVmaW5pdGlvbiBkZWZpbmVkIGluIHRoZSB3c2RsOnR5cGVzIGVsZW1lbnQsIG1heSB1c2Ugc2NoZW1hIGFubm90YXRpb24gZWxlbWVudHMgYXMgYW4gZXh0ZW5zaWJpbGl0eSBtZWNoYW5pc20uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotIHB1YmxpYyBjbGFzcyBCUDQyMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZyAKLSB7Ci0gICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlA0MjAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5OT1RBVElPTl9LRVkgPSAiYW5ub3RhdGlvbiI7Ci0gICAKLSAgIHByaXZhdGUgRXJyb3JMaXN0IGVycm9yTGlzdCA9IG5ldyBFcnJvckxpc3QoKTsKLSAgIHByaXZhdGUgQW5ub3RhdGlvblByb2Nlc3NvciBwcm9jZXNzb3I7Ci0KLSAgIC8qKiAKLSAgICAqIChub24tSmF2YWRvYykKLSAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChNZXNzYWdlLCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICovCi0gICBwdWJsaWMgdm9pZCB2aXNpdChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgIHsKLSAgICAgaWYoKG9iaiAhPSBudWxsKSAmJiAob2JqIGluc3RhbmNlb2YgU2NoZW1hKSkKLSAgICAgewotICAgIAkgU2NoZW1hIGVsID0gKFNjaGVtYSkgb2JqOwotICAgICAgIHRyeSB7Ci0gICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc0FsbFNjaGVtYShlbC5nZXRFbGVtZW50KCkpOwotICAgICAgIH0gY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKSB7fQotICAgICB9Ci0gICB9Ci0KLSAgIC8qKgotICAgICogIChub24tSmF2YWRvYykKLSAgICAqICBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICAqLwotICAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gICB7Ci0gICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgIC8vIEdldCB0aGUgdHlwZXMgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgICBUeXBlcyB0eXBlcyA9Ci0gICAgICAgKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgICAKLSAgICAgcHJvY2Vzc29yID0gbmV3IEFubm90YXRpb25Qcm9jZXNzb3IoCi0gICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgCi0gICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgIHRyYXZlcnNhbC52aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KHRydWUpOwotICAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgICB0cmF2ZXJzYWwudHJhdmVyc2UodHlwZXMpOwotICAgICAKLSAgICAgaWYgKGVycm9yTGlzdC5pc0VtcHR5KCkpIAotICAgICB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIAotICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLCAoU3RyaW5nKSBudWxsKTsKLSAgICAgfQotICAgICAKLSAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwodGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlTWVzc2FnZSgpICsgCi0gICAgICAgICAiXG5cbiIgKyBlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgIH0KLSAgIAotICAgLyoqCi0gICAgKiBDbGFzcyBmb3IgcGFyc2Ugc2NoZW1hIGFuZCBzZWFyY2ggYW5ub3RhdGlvbiBlbGVtZW50cyAKLSAgICAqLwotICAgY2xhc3MgQW5ub3RhdGlvblByb2Nlc3NvciBleHRlbmRzIFhNTFNjaGVtYVByb2Nlc3NvcgotICAgewotICAgICBwdWJsaWMgQW5ub3RhdGlvblByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgICAgewotICAgICAgIHN1cGVyKGNvbnRleHQsIGZhbHNlKTsKLSAgICAgfQotCi0gICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICAgICB7Ci0gICAgICAgY2hlY2tGb3JBbm5vdGF0aW9uKGVsZW1lbnQpOwotICAgICB9Ci0gICAgIAotICAgICBwcml2YXRlIHZvaWQgY2hlY2tGb3JBbm5vdGF0aW9uKE5vZGUgbm9kZSkgCi0gICAgIHsKLSAgICAgICBpZigobm9kZS5nZXRMb2NhbE5hbWUoKSAhPSBudWxsKSAmJiAobm9kZS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoQU5OT1RBVElPTl9LRVkpKSkgewotICAgICAgICAgZXJyb3JMaXN0LmFkZChub2RlLnRvU3RyaW5nKCkpOwotICAgICAgIH0KLSAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZ2V0Q2hpbGROb2RlcygpLmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgewotICAgICAgICAgY2hlY2tGb3JBbm5vdGF0aW9uKG5vZGUuZ2V0Q2hpbGROb2RlcygpLml0ZW0oaSkpOwotICAgICAgIH0KLSAgICAgfQotICAgfQotIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDIyMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjIwOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzRkZDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjIwOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotCi0vKioKLSAqIFNTQlAyMjA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmJpbmRpbmcgYmluZHMgZXZlcnkgd3NkbDpwYXJ0IG9mIGEgd3NkbDptZXNzYWdlIGluIHRoZSB3c2RsOnBvcnRUeXBlIHRvIHdoaWNoIGl0IHJlZmVycyB0byBvbmUgb2Ygc29hcGJpbmQ6Ym9keSwgc29hcGJpbmQ6aGVhZGVyLCBzb2FwYmluZDpmYXVsdCBvciBzb2FwYmluZDpoZWFkZXJmYXVsdC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDIyMDkgZXh0ZW5kcyBCUDIxMTQKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFNTQlAyMjA5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjQwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOTFmMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFNTQlAyNDAyCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMjQwMiBleHRlbmRzIEJQMjQwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBTU0JQMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjQwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDEzMjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjQwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFRyYXZlcnNhbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIFNTQlAyNDAzLgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkRlc2NlbmRhbnQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgaW4gdGhlIHdzZGw6YmluZGluZyBhcmUgbm90IGZyb20gdGhlIG5hbWVzcGFjZXMgZm9yIHRoZSBXU0RMIE1JTUUsIEhUVFAgR0VUL1BPU1Qgb3IgRElNRSBiaW5kaW5nIGV4dGVuc2lvbnMuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIFNTQlAyNDAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFNTQlAyNDAzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0aGUgbmFtZXNwYWNlIHNwZWNpZmllcyBhbnkgV1NETCBNSU1FLAotICAgKiBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIGEgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVzIGFueSBXU0RMIE1JTUUsCi0gICAqICAgICAgICAgSFRUUCBHRVQvUE9TVCBvciBESU1FIGJpbmRpbmcgZXh0ZW5zaW9ucy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc05vbkNvbmZvcm1hbnRCaW5kaW5nRXh0ZW5zaW9uKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAobmFtZXNwYWNlLmVxdWFscyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX01JTUUpCi0gICAgICAgIHx8IG5hbWVzcGFjZS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9IVFRQKQotICAgICAgICB8fCBuYW1lc3BhY2UuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfRElNRSkpCi0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleGVsLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24oZXhlbAotICAgICAgLmdldEVsZW1lbnRUeXBlKCkKLSAgICAgIC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICBlcnJvcnMuYWRkKGV4ZWwuZ2V0RWxlbWVudFR5cGUoKSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAJLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG9rLCBjaGVjayB0aGUgZGVzY2VuZGFudHMKLSAgICAgIGlmIChleGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsID0gKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4ZWwpLmdldEVsZW1lbnQoKTsKLQotICAgICAgICAvLyB0cmF2ZXJzZSBhbGwgb2YgdGhlIGRlc2NlbmRhbnRzIGFuZCBjaGVjayBmb3Igbm9uIGNvbXBsaWFudCBiaW5kaW5nIGV4dGVuc2lvbnMKLSAgICAgICAgWE1MVHJhdmVyc2FsQ2hlY2tpbmdFeHRlbnNpb25zIHRyYXZlcnNhbCA9Ci0gICAgICAgICAgbmV3IFhNTFRyYXZlcnNhbENoZWNraW5nRXh0ZW5zaW9ucygpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXQoZWwpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEVsZW1lbnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLQotICAvKioKLSAgICogQSBzcGVjaWFsaXplZCBYTUxUcmF2ZXJzYWwgY2xhc3MgdG8gY2hlY2sgaWYgdGhlIHdzZGw6YmluZGluZyBlbGVtZW50IGhhcyBhbnkgCi0gICAqIGRlc2NlbmRhbnQgZWxlbWVudHMvYXR0cmlidXRlcyBmcm9tIHRoZSBuYW1lc3BhY2VzIGZvciB0aGUgV1NETCBNSU1FLCAKLSAgICogSFRUUCBHRVQvUE9TVCBvciBESU1FIGJpbmRpbmcgZXh0ZW5zaW9ucy4KLSAgICovCi0gIHByaXZhdGUgY2xhc3MgWE1MVHJhdmVyc2FsQ2hlY2tpbmdFeHRlbnNpb25zIGV4dGVuZHMgWE1MVHJhdmVyc2FsCi0gIHsKLSAgICBib29sZWFuIG5vbkNvbmZvcm1hbnRFeHRlbnNpb25Gb3VuZCA9IGZhbHNlOwotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS54bWwuWE1MVHJhdmVyc2FsI2FjdGlvbihvcmcudzNjLmRvbS5Ob2RlKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGFjdGlvbihOb2RlIG4pCi0gICAgewotICAgICAgcmV0dXJuICFub25Db25mb3JtYW50RXh0ZW5zaW9uRm91bmQ7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS54bWwuWE1MVmlzaXRvciN2aXNpdChvcmcudzNjLmRvbS5BdHRyKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEF0dHIgbm9kZSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uKG5vZGUpKQotICAgICAgewotICAgICAgICBpZiAoaXNOb25Db25mb3JtYW50QmluZGluZ0V4dGVuc2lvbihub2RlLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQobm9kZS5nZXROYW1lKCkpOwotICAgICAgICAgIG5vbkNvbmZvcm1hbnRFeHRlbnNpb25Gb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxWaXNpdG9yI3Zpc2l0KG9yZy53M2MuZG9tLkVsZW1lbnQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBub2RlKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChpc05vbkNvbmZvcm1hbnRCaW5kaW5nRXh0ZW5zaW9uKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChub2RlLmdldE5vZGVOYW1lKCkpOwotICAgICAgICAgIG5vbkNvbmZvcm1hbnRFeHRlbnNpb25Gb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZWxlbWVudCBpcyBjb21wbGlhbnQsIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIGRlc2NlbmRhbnRzCi0gICAgICAgICAgdmlzaXQobm9kZS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICAgIGZvciAoTm9kZSBuID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBuICE9IG51bGw7Ci0gICAgICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRvVmlzaXQobik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTRExWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NETFZhbGlkYXRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE2NzcxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NETFZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lSdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkNhbmRpZGF0ZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRWxlbWVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYS5UYXJnZXROYW1lc3BhY2VQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hVmFsaWRhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAJKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZVZhbGlkYXRvckltcGwKLSAgaW1wbGVtZW50cyBXU0RMVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBXU0RMIFVSTC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYWNjZXNzIHRoZSB3c2RsIHVybCB2aWEgd3NkbERvY3VtZW50IGZpZWxkLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsVVJMOwotCi0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gdGVzdGFibGU7Ci0gIAotICAvKioKLSAgICogRW50cnkgY29udGFpbmVyIG1hcC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNoTWFwIGNvbnRhaW5lck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKSAKLSAgeyAgCi0gICAgICByZXR1cm4gVFlQRV9ERVNDUklQVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSAKLSAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fSU1QT1JULAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fUE9SVAotICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgamF2YS5sYW5nLlN0cmluZywgb3JnLndzaS53c2RsLldTRExEb2N1bWVudCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQoYW5hbHl6ZXJDb250ZXh0LCBhc3NlcnRpb25zLCByZXBvcnRBcnRpZmFjdCwgYW5hbHl6ZXJDb25maWcsIHJlcG9ydGVyLCB0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChUWVBFX0RFU0NSSVBUSU9OKSwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKTsKLSAgICB0ZXN0YWJsZSA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKSAhPSBudWxsOwotICAgIGlmICh0aGlzLndzZGxEb2N1bWVudCAhPSBudWxsKQotICAgICAgdGhpcy53c2RsVVJMID0gd3NkbERvY3VtZW50LmdldExvY2F0aW9uKCk7Ci0gICAgdGhpcy5wcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHByb2Nlc3NEZWZBc3NlcnRpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yI2luaXQob3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dCwgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcud3NpLndzZGwuV1NETERvY3VtZW50LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgd3NkbFVSTCwgd3NkbERvY3VtZW50LCByZXBvcnRlciwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBTdHJpbmcgd3NkbFVSTCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICAgIHRlc3RhYmxlID0gKHdzZGxEb2N1bWVudCAhPSBudWxsKTsKLSAgICBpZiAod3NkbERvY3VtZW50ICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsRG9jdW1lbnQuZ2V0TG9jYXRpb24oKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsVVJMOwotICAgIHRoaXMucHJvY2Vzc0RlZkFzc2VydGlvbnMgPSBwcm9jZXNzRGVmQXNzZXJ0aW9uczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy9XU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQotICAgIC8vIGl0IGRlcHJpY2F0ZWQgYWZ0ZXIgcmVmYWN0b3JpbmcgCi0gICAgLy8gbm93IHRoZSBpbm5lciBjbGFzc2VzIG1vdmVkIG91dCBmcm9tIHZhbGlkYXRvcgotICAgIC8vU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICIkIjsKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSsiLiI7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpOwotCi0gICAgLy8gR2V0IHNlcnZpY2UgcmVmZXJlbmNlIGZyb20gYW5hbHl6ZXIgY29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9IGFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgbm9ybWFsaXplZCBkYXRhIGFib3V0IHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUgPSBuZXcgQ2FuZGlkYXRlSW5mbyhzZXJ2aWNlUmVmZXJlbmNlLCB3c2RsRG9jdW1lbnQpOwotCi0gICAgYW5hbHl6ZXJDb250ZXh0LnNldENhbmRpZGF0ZUluZm8oY2FuZGlkYXRlKTsKLQotICAgIC8vIFNldCBwcmVyZXEgdHlwZSB0byBlbnRyeSBjb250YWluZXIKLSAgICByZXBvcnRlci5zZXRQcmVyZXFUeXBlKFJlcG9ydGVyLlBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUik7Ci0KLSAgICAvLyBhbHdheXMgcHJvY2VzcyBJbXBvcnQsIERlZmluaXRpb25zICYgVHlwZXMgYXNzZXJ0aW9ucyAKLSAgICAvLyBURU1QOgotICAgIGlmIChwcm9jZXNzRGVmQXNzZXJ0aW9ucykKLSAgICB7Ci0gICAgICBwcm9jZXNzRGVmaW5pdGlvbkFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgICBwcm9jZXNzVHlwZXNBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBjYW5kaWRhdGUpOwotICAgICAgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gUHJvY2VzcyB0aGUgZWxlbWVudCBoaWVyYXJjaHkgaW4gdGhlIFdTREwgZG9jdW1lbnQgc3RhcnRpbmcgd2l0aCB0aGUgb25lIHRoYXQgd2FzIHNwZWNpZmllZCAgCi0gICAgLy8gRklYOiBFbGVtZW50IGZpbmRpbmcgYWxyZWFkeSBjb21wbGV0ZWQgYnkgQ2FuZGlkYXRlSW5mbyBjb25zdHJ1Y3RvciAtIHNvIHVzZSB0aGF0IHJhdGhlciB0aGFuIHJldGVzdCBoZXJlICAKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6cG9ydAotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNQb3J0KCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc2VydmljZSBlbGVtZW50Ci0gICAgICBpZiAoKHNlcnZpY2UgPQotICAgICAgICBkZWZpbml0aW9uLmdldFNlcnZpY2UoCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBzZXJ2aWNlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluZCB0aGUgcG9ydCBlbGVtZW50Ci0gICAgICBpZiAoKHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgcG9ydDogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gVEVNUDogUmVtb3ZlIHVudGlsIHRoZXJlIGFyZSBwb3J0IHRlc3QgYXNzZXJ0aW9ucyAgICAgIAotICAgICAgLy9wcm9jZXNzUG9ydEFzc2VydGlvbnMocG9ydCwgc2VydmljZVJlZmVyZW5jZSwgY2xhc3NQcmVmaXgsIHdzZGxEb2N1bWVudCk7CSAgICAgCi0KLSAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIGJpbmRpbmcKLSAgICAgIGlmICgoKGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKSkgPT0gbnVsbCkgfHwgKGJpbmRpbmcuaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nIGZvciBwb3J0OiAiICsgcG9ydC5nZXROYW1lKCkpOyAgCi0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc0JpbmRpbmdBc3NlcnRpb25zKAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIHBvcnRUeXBlCi0gICAgICAgIGlmICgoKHBvcnRUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpKSA9PSBudWxsKQotICAgICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZSBmb3IgYmluZGluZzogIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6YmluZGluZwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICAgIC8vIEZpbmQgdGhlIGJpbmRpbmcgZWxlbWVudAotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmICgoKGJpbmRpbmcgPQotICAgICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoYmluZGluZy5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nOiAiCi0gICAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAvLyBOZXh0LCBwcm9jZXNzIHRoZSBwb3J0VHlwZQotICAgICAgICBpZiAoKChwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAocG9ydFR5cGUuaXNVbmRlZmluZWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3Rocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIFdTREwgUG9ydFR5cGUgZm9yIEJpbmRpbmc6ICIgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAgIC8vIFByb2Nlc3MgZWFjaCBtZXNzYWdlIHdpdGhpbiBlYWNoIG9wZXJhdGlvbiBvZiB0aGUgcG9ydFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaW5kaW5nCi0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgYmluZGluZyBlbGVtZW50IHNwZWNpZmljYXRpb24uICBUaGlzIGNhbiAKLSAgICAgIC8vIGhhcHBlbiB3aGVuIGEgVURESSB0TW9kZWwgZGlkIG5vdCBoYXZlIGEgdmFsaWQgYmluZGluZyByZWZlcmVuY2UuCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpwb3J0VHlwZQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnRUeXBlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgUG9ydFR5cGUgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIFBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLQotICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgLy8gUHJvY2VzcyBlYWNoIG1lc3NhZ2Ugd2l0aGluIGVhY2ggb3BlcmF0aW9uIG9mIHRoZSBwb3J0VHlwZQotICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpvcGVyYXRpb24KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNPcGVyYXRpb24oKSkKLSAgICB7Ci0gICAgICAvLyBGaW5kIHRoZSBvcGVyYXRpb24KLSAgICAgIC8vIGdldCBwb3J0VHlwZSBmcm9tIGNvbmZpZyBwYXJlbnQgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZTogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICBpZiAoKChvcGVyYXRpb24gPQotICAgICAgICBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgT3BlcmF0aW9uOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkKLSAgICAgICAgICAgICsgImluIHBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyBhbmQgcG9ydFR5cGUgdGVzdCBhc3NlcnRpb25zIAotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKSk7Ci0KLSAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICBvcGVyYXRpb24sCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyB3c2RsOm1lc3NhZ2UKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNNZXNzYWdlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgbWVzc2FnZQotICAgICAgaWYgKCgobWVzc2FnZSA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0TWVzc2FnZShzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIE1lc3NhZ2U6ICIKLSAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgYW5kIG9wZXJhdGlvbiB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0KLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAiVGhlIGZvbGxvd2luZyBXU0RMIHR5cGUgaXMgbm90IHN1cHBvcnRlZDogIgotICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYW51cAotICAgIGNsZWFudXAoKTsKLSAgfQotCi0gLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIHZhbGlkYXRlQXJ0aWZhY3QoKS4gKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCB2YWxpZGF0ZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRlQXJ0aWZhY3QoKTsKLSAgICAKLSAgICAvLyBSZXR1cm4gV1NETCBkb2N1bWVudAotICAgIHJldHVybiB0aGlzLndzZGxEb2N1bWVudDsKLSAgfQotICAvKioKLSAgICogR2V0IGVudHJ5IGNvbnRhaW5lciB1c2luZyB0aGUgZmlsZW5hbWUgZm9yIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBhIGZpbGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSBjb250YWluZXIgdXNpbmcgdGhlIGZpbGVuYW1lIGZvciBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5Q29udGFpbmVyIGdldEVudHJ5Q29udGFpbmVyKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBlbnRyeSBjb250YWluZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gdXNlIGl0Ci0gICAgaWYgKChlbnRyeUNvbnRhaW5lciA9IChFbnRyeUNvbnRhaW5lcikgY29udGFpbmVyTWFwLmdldChmaWxlbmFtZSkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gQ3JlYXRlIG5ldyBlbnRyeSBjb250YWluZXIKLSAgICAgIGVudHJ5Q29udGFpbmVyID0gdGhpcy5yZXBvcnRlci5jcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gICAgICAvLyBTZXQgY29udGFpbmVyIGlkIHVzaW5nIHRoZSBmaWxlbmFtZSBmb3IgdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIGVudHJ5Q29udGFpbmVyLnNldElkKGZpbGVuYW1lKTsKLQotICAgICAgLy8gUHV0IHRoZSBuZXcgZW50cnkgY29udGFpbmVyIGludG8gdGhlIGNvbnRhaW5lciBtYXAKLSAgICAgIGNvbnRhaW5lck1hcC5wdXQoZmlsZW5hbWUsIGVudHJ5Q29udGFpbmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wZXJhdGlvbiBmcm9tIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIHBvcnRUeXBlIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbk5hbWUgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIGZyb20gcG9ydCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvbiBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUpCi0gIHsKLSAgICAvLyBGSVg6IHdzZGw0aiBhdmFpbGFibGUgbWV0aG9kIGNhbGwgYmVsb3cgaW1wbGllcyB0aGF0IG9ubHkgCi0gICAgLy8gbmFtZStpbnB1dG5hbWUrb3V0cHV0bmFtZSB1bmlxdWVseSBkZWZpbmVzIG9wZXJhdGlvbiAKLSAgICAvLyBVc2UgdGhpcyBpbnN0ZWFkIGZvciBub3c6IC0gZ2V0IHRoZSBmaXJzdCBvcGVyYXRpb24gd2UgZmluZC4uLgotICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMob3AuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBvcDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOyAvLyBubyBtYXRjaGluZyBvcGVyYXRpb24gZm91bmQKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGRlZmluaXRpb24gYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0RlZmluaXRpb25Bc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICAgIERlZmluaXRpb25bXSB3c2RsRGVmaW5pdGlvbnMgPSBjYW5kaWRhdGUuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbERlZmluaXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEZWZpbml0aW9uc1tpXTsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKSk7Ci0gICAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGRlZmluaXRpb24pOwotCi0gICAgICAvLyBTZXQgZW50cnkgY29udGFpbmVyCi0gICAgICBlbnRyeS5zZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgZ2V0RW50cnlDb250YWluZXIoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFsbCBvZiB0aGUgZGVmaW5pdGlvbiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgIC8vIEFERDogbmVlZCB0byB1c2UgaGVyZSB0aGUgc3BlY2lmaWMgZG9jdW1lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmaW5pdGlvbj8/Ci0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyB0eXBlcyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gY2FuZGlkYXRlIGNhbmRpZGF0ZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgdHlwZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1R5cGVzQXNzZXJ0aW9ucygKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgVHlwZXNbXSB3c2RsVHlwZXMgPSBjYW5kaWRhdGUuZ2V0VHlwZXMoKTsKLSAgICBEZWZpbml0aW9uW10gd3NkbERlZmluaXRpb25zID0gY2FuZGlkYXRlLmdldERlZmluaXRpb25zKCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdHlwZXMgZWxlbWVudHMsIHRoZW4gc2V0IGFsbCByZXN1bHRzIHRvIG1pc3NpbmdJbnB1dCAgIAotICAgIGlmICh3c2RsVHlwZXMgPT0gbnVsbCB8fCB3c2RsVHlwZXMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9UWVBFUykpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgVHlwZXMgdHlwZXMgPSB3c2RsVHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gbm8gVHlwZXMgZWxlbWVudCBpbiBpLXRoIGRvY3VtZW50Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKSk7Ci0gICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAgIGNhbmRpZGF0ZS5nZXREZWZpbml0aW9uKHR5cGVzKS5nZXREb2N1bWVudEJhc2VVUkkoKSArICItVHlwZXMiKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlEZXRhaWwodHlwZXMpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICAgICAgZ2V0RW50cnlDb250YWluZXIod3NkbERlZmluaXRpb25zW2ldLmdldERvY3VtZW50QmFzZVVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIFR5cGVzIHJlbGF0ZWQgdGVzdCBhc3NlcnRpb25zCi0gICAgICAgIHByb2Nlc3NBc3NlcnRpb25zKAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIGNhbmRpZGF0ZS5nZXRXc2RsRG9jdW1lbnQoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGltcG9ydCBhc3NlcnRpb25zLiAKLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGltcG9ydCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgSW1wb3J0W10gd3NkbEltcG9ydHMgPSBjYW5kaWRhdGUuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGltcG9ydCBlbGVtZW50cywgdGhlbiBzZXQgYWxsIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0ICAgCi0gICAgaWYgKHdzZGxJbXBvcnRzID09IG51bGwgfHwgd3NkbEltcG9ydHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsSW1wb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSB3c2RsSW1wb3J0c1tpXTsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHdzZGxJbXBvcnQpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoZ2V0RW50cnlDb250YWluZXIod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIGltcG9ydCByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgICBwcm9jZXNzQXNzZXJ0aW9ucygKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgICAgLy8gQUREOiBuZWVkIHRvIHVzZSBoZXJlIHRoZSBzcGVjaWZpYyBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbXBvcnQhIQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIHBvcnQgYSBwb3J0LgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUG9ydEFzc2VydGlvbnMoCi0gICAgUG9ydCBwb3J0LAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCSAgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQocG9ydC5nZXROYW1lKCkpOwotICAgIGVudHJ5LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnROYW1lKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHBvcnQpOwotCi0gICAgLy8gUHJvY2VzcyBhc3NlcnRpb25zIGZvciB0aGlzIGFydGlmYWN0IGFnYWluc3QgdGhlIHRhcmdldCBjb250ZXh0Ci0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYmluZGluZyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gYmluZGluZyBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBiaW5kaW5nIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotCi0gICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgIEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1FOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmcpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24oYmluZGluZyk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgdHlwZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IHR5cGUgYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSkpOwotICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKHBvcnRUeXBlUU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgZW50cnkuc2V0RW50cnlEZXRhaWwocG9ydFR5cGUpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcGVyYXRpb24gYW4gb3BlcmF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBvcGVyYXRpb24gYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gcXVhbGlmeSBvcGVyYXRpb24gd2l0aCBzZXJ2aWNlIGxvY2F0aW9uIGZyb20gY29uZmlnLgkKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBlbnRyeS5zZXRQYXJlbnRFbGVtZW50TmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICBlbnRyeS5zZXRFbnRyeURldGFpbChvcGVyYXRpb24pOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBwb3J0VHlwZSBwb3J0IHR5cGUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2UgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIG9wZXJhdGlvbiBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEZvciBlYWNoIG9wZXJhdGlvbiwgCi0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAob3BJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwgfHwgb3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgTWVzc2FnZSBtZXNzYWdlLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobWVzc2FnZVFOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2UpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24obWVzc2FnZSk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQ7Ci0KLSAgICBpZiAoYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgeyAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotICAgICAgbWVzc2FnZVNldCA9Ci0gICAgICAgIFdTRExVdGlscy5maW5kTWVzc2FnZXMod3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCksIGJpbmRpbmcpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBtZXNzYWdlcyB0aGF0IHdlcmUgZm91bmQgICAgCi0gICAgICBpZiAobWVzc2FnZVNldC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NhZ2VJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCFtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBtZXNzYWdlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIGlmIChwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotCi0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChvcEl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0KLSAgICAgICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgd2UgaGF2ZSBib3RoIGFuZCBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2UsIAotICAgICAgICAvLyBjaGVjayBmb3IgaXRzIGV4aXN0ZW5jZSBiZWZvcmUgYWRkaW5nIGl0Ci0gICAgICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgbWVzc2FnZVNldC5hZGQob3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSAhPSBudWxsCi0gICAgICAgICAgJiYgIW9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgICAgICBpZiAob3AuZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgICAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtZXNzYWdlU2V0LnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICAvLyBTZXQgYWxsIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb24gcmVzdWx0cyB0byBtaXNzaW5nSW5wdXQKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgKE1lc3NhZ2UpIChtZXNzYWdlSXQubmV4dCgpKSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcCAtIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBjbGFzc1ByZWZpeCBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgIE9wZXJhdGlvbiBvcCwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICBpZiAob3AuZ2V0T3V0cHV0KCkgIT0gbnVsbCAmJiAhb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VTZXQuc2l6ZSgpID09IDApCi0gICAgewotICAgICAgLy8gU2V0IGFsbCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgSXRlcmF0b3IgbWVzc2FnZUl0ID0gbWVzc2FnZVNldC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG1lc3NhZ2VJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICAoTWVzc2FnZSkgKG1lc3NhZ2VJdC5uZXh0KCkpLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGluIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gc29hcCBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYmluZGluZyBmYXVsdHMuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0W10gZ2V0U29hcEZhdWx0cyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3Igc29hcEZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nRmF1bHQgb25lIGF0IGEgdGltZQotICAgIEJpbmRpbmdGYXVsdFtdIGJpbmRpbmdGYXVsdHMgPSBnZXRBbGxCaW5kaW5nRmF1bHRzKGluQmluZGluZyk7Ci0gICAgZm9yIChpbnQgZmF1bHQgPSAwOyBmYXVsdCA8IGJpbmRpbmdGYXVsdHMubGVuZ3RoOyBmYXVsdCsrKQotICAgIHsKLSAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBnZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0c1tmYXVsdF0pOwotICAgICAgaWYgKHNvYXBGYXVsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzb2FwRmF1bHRzLmFkZChzb2FwRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdEFycmF5ID0gbmV3IFNPQVBGYXVsdFtzb2FwRmF1bHRzLnNpemUoKV07Ci0gICAgc29hcEZhdWx0cy5jb3B5SW50byhzb2FwRmF1bHRBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgKiBNZXRob2QgZ2V0QWxsQmluZGluZ0ZhdWx0cy4KLSAgKiAKLSAgKiBAcGFyYW0gaW5CaW5kaW5nIGJpbmRpbmcuCi0gICogQHJldHVybiBhbGwgYmluZGluZyBmYXVsdHMuCi0gICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHRbXSBnZXRBbGxCaW5kaW5nRmF1bHRzKEJpbmRpbmcgaW5CaW5kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgVmVjdG9yIGZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHRyeQotICAgIHsKLQotICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnMgPSBpbkJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgewotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3BlcmF0aW9ucy5uZXh0KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgYmluZGluZ0ZhdWx0cyA9IGJvLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChiaW5kaW5nRmF1bHRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGZhdWx0cy5hZGQoKEJpbmRpbmdGYXVsdCkgYmluZGluZ0ZhdWx0cy5uZXh0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgewotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgfQotCi0gICAgQmluZGluZ0ZhdWx0W10gZmF1bHRBcnJheSA9IG5ldyBCaW5kaW5nRmF1bHRbZmF1bHRzLnNpemUoKV07Ci0gICAgZmF1bHRzLmNvcHlJbnRvKGZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIGZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFdTRExGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0IGEgYmluZGluZyBmYXVsdC4KLSAgICogQHJldHVybiBXU0RMIGZhdWx0cy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0IGdldFNvYXBGYXVsdChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSXRlcmF0b3IgZmF1bHRFeHRlbnNpYmxlcyA9Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoZmF1bHRFeHRlbnNpYmxlcy5oYXNOZXh0KCkgJiYgc29hcEZhdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEZhdWx0ID0gKFNPQVBGYXVsdCkgZmF1bHRFeHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICB7IC8vIGlnbm9yZSBldmVyeXRoaW5nIGJ1dCBTT0FQIEZhdWx0IGVsZW1lbnRzLgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwSGVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBoZWFkZXJzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyW10gZ2V0U29hcEhlYWRlcnMoQmluZGluZyBpbkJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBhbGwgYmluZGluZ3MKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwSGVhZGVyTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nIG9uZSBhdCBhIHRpbWUKLSAgICBmb3IgKGludCBiaW5kaW5nID0gMDsgYmluZGluZyA8IGJpbmRpbmdMaXN0Lmxlbmd0aDsgYmluZGluZysrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBnZXQgdGhlIGxpc3Qgb2YgYmluZGluZyBPcGVyYXRpb25zCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBiaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAgIC5nZXRCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAgICAgICAgICAudG9BcnJheSgKLSAgICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgICAvLyBnZXQgcmVmZXJlbmNlcyB0byB0aGUgZXh0ZW5zaWJsZSBlbGVtZW50cyB3aXRoaW4gdGhlIDxpbnB1dD4gYW5kIDxvdXRwdXQ+IGVsZW1lbnRzIG9mIHRoaXMgYmluZGluZyA8b3BlcmF0aW9uPi4gCi0gICAgICAgIGZvciAoaW50IGJvID0gMDsgYm8gPCBiaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGJvKyspCi0gICAgICAgIHsKLQotICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgaW5wdXQvb3V0cHV0IGV4dGVuc2libGVzLCBsb29raW5nIGZvciA8U09BUDpCb2R5PiBlbGVtZW50cy4KLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAgICAgSXRlcmF0b3IgZXh0RWxlbWVudHMgPQotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChleHRFbGVtZW50cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc29hcEhlYWRlckxpc3QuYWRkKChTT0FQSGVhZGVyKSBleHRFbGVtZW50cy5uZXh0KCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBIZWFkZXIuCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXh0RWxlbWVudHMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZXh0RWxlbWVudHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNvYXBIZWFkZXJMaXN0LmFkZCgoU09BUEhlYWRlcikgZXh0RWxlbWVudHMubmV4dCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgSGVhZGVyLgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPGlucHV0PiBvciA8b3V0cHV0PiAtIGlnbm9yZSA6IG5vdCBjaGVja2luZyB0aGlzIGhlcmUuCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgICB9Ci0gICAgfQotCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IG5ldyBTT0FQSGVhZGVyW3NvYXBIZWFkZXJMaXN0LnNpemUoKV07Ci0gICAgc29hcEhlYWRlckxpc3QuY29weUludG8oc29hcEhlYWRlckFycmF5KTsKLQotICAgIHJldHVybiBzb2FwSGVhZGVyQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBIZWFkZXJGYXVsdHMuCi0gICAqIAotICAgKiBXU0RMRG9jdW1lbnQgZ2V0dGVyIG1ldGhvZCAtIG1heWJlIGJldHRlciBvZmYgaW4gY2xhc3MgV1NETERvY3VtZW50Li4uCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHJldHVybiBTT0FQIGhlYWRlciBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJGYXVsdFtdIGdldFNvYXBIZWFkZXJGYXVsdHMoQmluZGluZyBpbkJpbmRpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIHNvYXBIZWFkZXJGYXVsdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBoZWFkZXJzCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IGdldFNvYXBIZWFkZXJzKGluQmluZGluZyk7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IGFuZCBnZXQgdGhlIGhlYWRlciBmYXVsdHMKLSAgICBMaXN0IGxpc3QgPSBudWxsOwotICAgIGZvciAoaW50IGhlYWRlciA9IDA7IGhlYWRlciA8IHNvYXBIZWFkZXJBcnJheS5sZW5ndGg7IGhlYWRlcisrKQotICAgIHsKLSAgICAgIC8vIEdldCBsaXN0IGZvciB0aGlzIGhlYWRlcgotICAgICAgaWYgKChsaXN0ID0gc29hcEhlYWRlckFycmF5W2hlYWRlcl0uZ2V0U09BUEhlYWRlckZhdWx0cygpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBBZGQgdG8gcHJpbWFyeSBsaXN0ICAgICAgCi0gICAgICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuYWRkQWxsKGxpc3QpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBIZWFkZXJGYXVsdFtdIHNvYXBIZWFkZXJGYXVsdEFycmF5ID0KLSAgICAgIG5ldyBTT0FQSGVhZGVyRmF1bHRbc29hcEhlYWRlckZhdWx0TGlzdC5zaXplKCldOwotICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuY29weUludG8oc29hcEhlYWRlckZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIHNvYXBIZWFkZXJGYXVsdEFycmF5OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwQm9kaWVzLgotICAgKiAKLSAgICogV1NETERvY3VtZW50IGdldHRlciBtZXRob2QgLSBtYXliZSBiZXR0ZXIgb2ZmIGluIGNsYXNzIFdTRExEb2N1bWVudC4uLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBib2RpZXMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBCb2R5W10gZ2V0U29hcEJvZGllcyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUkVNT1ZFOiBHZXQgYWxsIGJpbmRpbmdzCi0gICAgLy9CaW5kaW5nW10gYmluZGluZ0xpc3QgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwQm9kaWVzID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gR28gdGhyb3VnaCBlYWNoIGJpbmRpbmcgb25lIGF0IGEgdGltZQotICAgIGZvciAoaW50IGJpbmRpbmcgPSAwOyBiaW5kaW5nIDwgYmluZGluZ0xpc3QubGVuZ3RoOyBiaW5kaW5nKyspCi0gICAgewotICAgICAgLy8gZ2V0IHRoZSBsaXN0IG9mIGJpbmRpbmcgT3BlcmF0aW9ucwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGJpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAuZ2V0QmluZGluZ09wZXJhdGlvbnMoKQotICAgICAgICAgIC50b0FycmF5KAotICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgLy8gZ2V0IHJlZmVyZW5jZXMgdG8gdGhlIGV4dGVuc2libGUgZWxlbWVudHMgd2l0aGluIHRoZSA8aW5wdXQ+IGFuZCA8b3V0cHV0PiBlbGVtZW50cyBvZiB0aGlzIGJpbmRpbmcgPG9wZXJhdGlvbj4uIAotICAgICAgZm9yIChpbnQgYm8gPSAwOyBibyA8IGJpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgYm8rKykKLSAgICAgIHsKLQotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGlucHV0L291dHB1dCBleHRlbnNpYmxlcywgbG9va2luZyBmb3IgPFNPQVA6Qm9keT4gZWxlbWVudHMuCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaW5wdXRFeHRlbnNpYmxlcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uc1tib10KLSAgICAgICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaW5wdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgaW5wdXRFeHRlbnNpYmxlcy5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBCb2R5IGVsZW1lbnRzLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgeyAvLyBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciA8aW5wdXQ+IC0gaWdub3JlIDogbm90IGNoZWNraW5nIHRoaXMgaGVyZS4KLSAgICAgICAgfQotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3Igb3V0cHV0RXh0ZW5zaWJsZXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nT3V0cHV0KCkKLSAgICAgICAgICAgICAgLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAgICAgICAgICAgIC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChvdXRwdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgb3V0cHV0RXh0ZW5zaWJsZXMubmV4dCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQm9keSBlbGVtZW50cy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPG91dHB1dD4uCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTT0FQQm9keVtdIHNvYXBCb2R5QXJyYXkgPSBuZXcgU09BUEJvZHlbc29hcEJvZGllcy5zaXplKCldOwotICAgIHNvYXBCb2RpZXMuY29weUludG8oc29hcEJvZHlBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEJvZHlBcnJheTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0IGEgQmluZGluZ0lucHV0IG9iamVjdC4KLSAgICogQHJldHVybiAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IG51bGw7Ci0KLSAgICBJdGVyYXRvciBleHRlbnNpYmxlcyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBzb2FwQm9keSA9IChTT0FQQm9keSkgZXh0ZW5zaWJsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzb2FwQm9keTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ091dHB1dCBhIEJpbmRpbmdPdXRwdXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIFNPQVAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBudWxsOwotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3QgZXh0ZW5zaWJsZSA9IGV4dGVuc2libGVzLm5leHQoKTsKLSAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBleHRlbnNpYmxlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBCb2R5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzY2hlbWEgdXNlZC4KLSAgICogQHBhcmFtIGRlZiBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFNjaGVtYSB1c2VkLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgcHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyAKLSAgICogICAgICAgICBuYW1lc3BhY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNjaGVtYVVzZWQoRGVmaW5pdGlvbiBkZWYpIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9ICIiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTmVlZCB0byByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBzaW5jZSBXU0RMNEogYWx3YXlzIHB1dHMgaW4gdGhlIGRlZmF1bHQgV1NETCBuYW1lc3BhY2UKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gd3NkbERvY3VtZW50LmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbnVsbCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkb2N1bWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBlbGVtZW50Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgc2NoZW1hVXNlZCA9IGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigicHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyBuYW1lc3BhY2UiKTsKLSAgICB9Ci0KLSAgICAvKgotICAgIC8vIEdldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IGRlZi5nZXROYW1lc3BhY2UoIiIpOwotICAgIAotICAgIC8vIElmIHRoZSBkZWZhdWx0IHdhcyBzZXQsIHRoZW4gcHJvY2VzcyBpdCB0byBnZXQgdGhlIG5hbWVzcGFjZQotICAgIGlmIChzY2hlbWFVc2VkID09IG51bGwpIHsKLSAgICAgIC8vIGRvIGl0IHRoZSBoYXJkIHdheSAoc3RpbGwgYmV0dGVyIHRoYW4gYW5vdGhlciBET00gcGFyc2UpLi4uIAkJCQkKLSAgICAgIC8vV1NETFdyaXRlciB3ID0gbmV3IFdTRExXcml0ZXJJbXBsKCk7Ci0gICAgICB0cnkgewotICAgICAgICBXU0RMV3JpdGVyIHcgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExXcml0ZXIoKTsKLSAgICAgIAlEb2N1bWVudCBkb2MgPSB3LmdldERvY3VtZW50KGRlZik7Ci0gICAgICAJRWxlbWVudCBlID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgCXNjaGVtYVVzZWQgPSBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgfSAKLSAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInByb2JsZW0gZ2V0dGluZyBXU0RMIGRlZmludGlvbnMgbmFtZXNwYWNlIik7Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwcm9ibGVtIGdldHRpbmcgZG9jdW1lbnQgZGVmaW50aW9uIik7Ci0gICAgICB9ICAgICAgCQotICAgIH0KLSAgICAqLwotCi0gICAgcmV0dXJuIHNjaGVtYVVzZWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBCaW5kaW5nLgotICAgKiAKLSAgICogR2V0IHRoZSBTT0FQIGJpbmRpbmcgZm9yIGEgQmluZGluZy4KLSAgICAqIAotICAgKiBAcGFyYW0gYmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gYSBTT0FQIGJpbmRpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQmluZGluZyBnZXRTb2FwQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgTGlzdCBleEVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXhFbGVtZW50cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICAvLyAgQ2hlY2sgZm9yIDxzb2FwOmJpbmRpbmc+IGVsZW1lbnQKLSAgICAgIHdoaWxlICgoaXRlcmF0b3IuaGFzTmV4dCgpKSAmJiAoc29hcEJpbmRpbmcgPT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQmluZGluZyBlbGVtZW50Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gIH0KLQotICAvKiogCi0gICAqIENyZWF0ZSBYTUwgc2NoZW1hIHZhbGlkYXRvci4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93Ci0gICAqIHRoZSBkb2N1bWVudExpc3QgZmllbGQgdG8gYmUgYWNjZXNzZWQgZnJvbSB3aXRoaW4gYW4gaW5uZXIgY2xhc3MuCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGJhc2UgVVJMLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgWE1MIHNjaGVtYSB2YWxpZGF0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MU2NoZW1hVmFsaWRhdG9yIGNyZWF0ZVhNTFNjaGVtYVZhbGlkYXRvcihTdHJpbmcgZG9jdW1lbnRCYXNlVVJJKQotICB7Ci0gICAgLy8gQ3JlYXRlIFhNTCBzY2hlbWEgdmFsaWRhdG9yCi0gICAgcmV0dXJuIG5ldyBYTUxTY2hlbWFWYWxpZGF0b3IoZG9jdW1lbnRCYXNlVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBudWxsLCBuZXh0TGlzdCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBleHRlbnNpb24gZWxlbWVudHMgd2l0aGluIHRoZSB0eXBlcyBlbGVtZW50Ci0gICAgVHlwZXMgdHlwZXMgPSBudWxsOwotICAgIGlmICgodHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGV4dC4gZWxlbWVudAotICAgICAgICBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gdW5rbm93biBleHQuIGVsZW1lbnQsIHRoZW4gc2VlIGlmIGl0IGlzIGEgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yIHRuc1Byb2Nlc3NvciA9IG51bGw7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU2NoZW1hKQotICAgICAgICB7Ci0gICAgICAgICAgdG5zUHJvY2Vzc29yID0gbmV3IFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQotCi0gICAgICAgICAgaWYgKChuZXh0TGlzdCA9Ci0gICAgICAgICAgICB0bnNQcm9jZXNzb3IucHJvY2Vzc0FsbFNjaGVtYSgKLSAgICAgICAgICAgICAgKChTY2hlbWEpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKSkpCi0gICAgICAgICAgICAhPSBudWxsKQotICAgICAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgbGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBsaXN0LmFkZEFsbChuZXh0TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFOYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgLy8gQWx3YXlzIGFkZCBjdXJyZW50IGRvY3VtZW50IHRhcmdldE5hbWVzcGFjZQotICAgIExpc3QgdGFyZ2V0TmFtZXNwYWNlTGlzdCA9IGdldFNjaGVtYVRhcmdldE5hbWVzcGFjZUxpc3QoZGVmaW5pdGlvbik7Ci0gICAgCi0gICAgaWYgKCh0YXJnZXROYW1lc3BhY2VMaXN0ICE9IG51bGwpICYmICF0YXJnZXROYW1lc3BhY2VMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGxpc3QuYWRkQWxsKHRhcmdldE5hbWVzcGFjZUxpc3QpOwotICAgIAotICAgIC8vIEdldCBsaXN0IG9mIGltcG9ydGVkIFdTREwgZG9jdW1lbnRzCi0gICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgSW1wb3J0IGltcDsKLQotICAgIC8vIEFkZCBlYWNoIGltcG9ydHMgdGFyZ2V0TmFtZXNwYWNlIHRvIHRoZSBsaXN0Ci0gICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIHZhbHVlcyA9IGltcG9ydE1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgd2hpbGUgKHZhbHVlcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaW1wb3J0cyA9IGltcG9ydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGltcG9ydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW1wID0gKEltcG9ydCkgaW1wb3J0cy5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGltcCAhPSBudWxsICYmIGltcC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgICAJbGlzdC5hZGRBbGwoZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZCBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIGRlZmluaXRpb24gYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiBnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChkZWZpbml0aW9uLCBuZXcgQXJyYXlMaXN0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiBhIERlZmluaXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0V1NETFRhcmdldE5hbWVzcGFjZUxpc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBMaXN0IGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucykKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoKGRlZmluaXRpb24gIT0gbnVsbCkgJiYgKCFhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMuY29udGFpbnMoZGVmaW5pdGlvbikpKQotICAgIHsKLSAgICAgIGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICAKLSAgICAgIC8vIEFsd2F5cyBhZGQgY3VycmVudCBkb2N1bWVudCB0YXJnZXROYW1lc3BhY2UKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgIGxpc3QuYWRkKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0gICAgICAvLyBHZXQgbGlzdCBvZiBpbXBvcnRlZCBXU0RMIGRvY3VtZW50cwotICAgICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgICBJbXBvcnQgaW1wOwotCi0gICAgICAvLyBBZGQgZWFjaCBpbXBvcnRzIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgbGlzdAotICAgICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciB2YWx1ZXMgPSBpbXBvcnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgICB3aGlsZSAodmFsdWVzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpbXBvcnRzID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpbXBvcnRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbXAgPSAoSW1wb3J0KSBpbXBvcnRzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChpbXAgIT0gbnVsbCAmJiBpbXAuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICBsaXN0LmFkZEFsbChnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpLCBhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMpKTsKLSAgICAgICAgICAgIC8vIGxpc3QuYWRkKGltcC5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIEJpbmRpbmdNYXRjaAotICB7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gICAgcHJpdmF0ZSBTT0FQQmluZGluZyBzb2FwQmluZGluZzsKLSAgICAvL3ByaXZhdGUgVmVjdG9yIGJpbmRpbmdBcmdzOyAvLyBzZXQgb2YgQmluZGluZ0lucHV0cyBhbmQgQmluZGluZ091dHB1dHMKLSAgICBwcml2YXRlIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQ7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQ7Ci0KLSAgICAvLyBBREQ6IG5lZWQgdG8gaW5jbHVkZSBCaW5kaW5nRmF1bHQgc3VwcG9ydC4uLgotICAgIHB1YmxpYyBCaW5kaW5nTWF0Y2goCi0gICAgICBCaW5kaW5nIGIsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvLAotICAgICAgU09BUEJpbmRpbmcgc2IsCi0gICAgICBCaW5kaW5nSW5wdXQgYmluLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIGJpbmRpbmcgPSBiOwotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGJvOwotICAgICAgc29hcEJpbmRpbmcgPSBzYjsKLSAgICAgIC8vYmluZGluZ0FyZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvL2lmIChiaW4gICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJpbik7ICB9Ci0gICAgICAvL2lmIChib3V0ICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJvdXQpOyB9Ci0gICAgICBiaW5kaW5nSW5wdXQgPSBiaW47Ci0gICAgICBiaW5kaW5nT3V0cHV0ID0gYm91dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ0lucHV0IGJpbikKLSAgICB7Ci0gICAgICB0aGlzKGIsIGJvLCBzYiwgYmluLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIHRoaXMoYiwgYm8sIHNiLCBudWxsLCBib3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzb2FwQmluZGluZy4KLSAgICAgKiBAcmV0dXJuIFNPQVBCaW5kaW5nCi0gICAgICovCi0gICAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNvYXBCaW5kaW5nKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYmluZGluZ09wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nSW5wdXQuCi0gICAgICogQHJldHVybiBCaW5kaW5nSW5wdXQKLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nT3V0cHV0LgotICAgICAqIEByZXR1cm4gQmluZGluZ091dHB1dAotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nT3V0cHV0IGdldEJpbmRpbmdPdXRwdXQoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc0JpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuICh0aGlzLmJpbmRpbmdJbnB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNCaW5kaW5nT3V0cHV0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gKHRoaXMuYmluZGluZ091dHB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nLgotICAgICAqIEByZXR1cm4gQmluZGluZwotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBiaW5kaW5nIG1hdGNoZXMuCi0gICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAqIEBwYXJhbSBzb2FwQmluZGluZ1N0eWxlIHNvYXAgYmluZGluZyBzdHlsZS4KLSAgKiBAcGFyYW0gc29hcEJvZHlVc2Ugc29hcCBib2R5IHVzZS4KLSAgKiBAcmV0dXJuIGJpbmRpbmcgbWF0Y2hlcy4KLSAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgKi8KLSAgcHVibGljIEJpbmRpbmdNYXRjaFtdIGdldEJpbmRpbmdNYXRjaGVzKAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBTdHJpbmcgc29hcEJpbmRpbmdTdHlsZSwKLSAgICBTdHJpbmcgc29hcEJvZHlVc2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3IgYmluZGluZ01hdGNoZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBnZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNvYXA6YmluZGluZyBmb3IgdGhpcyBXU0RMIGJpbmRpbmcgaXMgdGhlIHNwZWNpZmllZCBzdHlsZQotICAgIC8vIEFERDogY2hlY2sgZm9yIG51bGwgcG9pbnRlcgotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBkZWZhdWx0U3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotCi0gICAgICBpZiAoZGVmYXVsdFN0eWxlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCB0aGUgc2V0IG9mIG9wZXJhdGlvbnMgZm9yIHRoaXMgV1NETCBiaW5kaW5nCi0gICAgICBMaXN0IGJpbmRpbmdPcHNMaXN0ID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgaWYgKGJpbmRpbmdPcHNMaXN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdPcHMgPSBiaW5kaW5nT3BzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAvLyBmb3IgZWFjaCBiaW5kaW5nIG9wZXJhdGlvbjoKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wcy5uZXh0KCk7Ci0KLSAgICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcCA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wKTsKLQotICAgICAgICAgIGlmICgoc29hcE9wID09IG51bGwgJiYgZGVmYXVsdFN0eWxlLmVxdWFscyhzb2FwQmluZGluZ1N0eWxlKSkKLSAgICAgICAgICAgIHx8IChzb2FwT3AgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKSA9PSBudWxsCi0gICAgICAgICAgICAgICYmIGRlZmF1bHRTdHlsZS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpCi0gICAgICAgICAgICB8fCAoc29hcE9wICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgc29hcE9wLmdldFN0eWxlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGJpbmRpbmcgaW5wdXQgJiBvdXRwdXQKLSAgICAgICAgICAgIEJpbmRpbmdJbnB1dCBiSW5wdXQgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICBpZiAoYklucHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNPQVBCb2R5IGlucHV0U29hcEJvZHkgPSBnZXRTb2FwQm9keShiSW5wdXQpOwotICAgICAgICAgICAgICBpZiAoaW5wdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKGlucHV0U29hcEJvZHkuZ2V0VXNlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgJiYgIWlucHV0U29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKHNvYXBCb2R5VXNlKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiSW5wdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEJpbmRpbmdPdXRwdXQgYk91dHB1dCA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAoYk91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQQm9keSBvdXRwdXRTb2FwQm9keSA9IGdldFNvYXBCb2R5KGJPdXRwdXQpOwotCi0gICAgICAgICAgICAgIGlmIChvdXRwdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKG91dHB1dFNvYXBCb2R5LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICYmICFvdXRwdXRTb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoc29hcEJvZHlVc2UpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJPdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoYk91dHB1dCAhPSBudWxsKSB8fCAoYklucHV0ICE9IG51bGwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgbWF0Y2gsIGFkZCB0byB0aGUgdmVjdG9yCi0gICAgICAgICAgICAgIGJpbmRpbmdNYXRjaGVzLmFkZCgKLSAgICAgICAgICAgICAgICBuZXcgQmluZGluZ01hdGNoKAotICAgICAgICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgICAgICAgIGJpbmRpbmdPcCwKLSAgICAgICAgICAgICAgICAgIHNvYXBCaW5kaW5nLAotICAgICAgICAgICAgICAgICAgYklucHV0LAotICAgICAgICAgICAgICAgICAgYk91dHB1dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmdNYXRjaFtdIEJpbmRpbmdNYXRjaEFycmF5ID0gbmV3IEJpbmRpbmdNYXRjaFtiaW5kaW5nTWF0Y2hlcy5zaXplKCldOwotICAgIGJpbmRpbmdNYXRjaGVzLmNvcHlJbnRvKEJpbmRpbmdNYXRjaEFycmF5KTsKLSAgICByZXR1cm4gQmluZGluZ01hdGNoQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBPcGVyYXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBiaW5kaW5nT3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSBzb2FwIG9wZXJhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgd2hpbGUgcHJvY2Vzc2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUE9wZXJhdGlvbiBnZXRTb2FwT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoU09BUE9wZXJhdGlvbikgZXh0ZW5zaWJsZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiBTT0FQT3BlcmF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3c2RsOmJpbmRpbmcgc3VwcGxpZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaE1hcCBnZXRTb2FwT3BlcmF0aW9ucyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEhhc2hNYXAgc29hcE9wZXJhdGlvbkxpc3QgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgaWYgKGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vVmVjdG9yIHNvYXBPcFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBiaW5kaW5nIG9wZXJhdGlvbnMKLSAgICBJdGVyYXRvciBvcGVyYXRpb25zID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBlYWNoIGJpbmRpbmcgb3BlcmF0aW9uIHRvIHNlZSBpZiBpdCBoYXMgYSBzb2FwIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbnVsbDsKLSAgICB3aGlsZSAob3BlcmF0aW9ucy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLSAgICAgIEl0ZXJhdG9yIGV4dGVuc2libGVzID0KLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb25MaXN0LnB1dChleHRlbnNpYmxlLCBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3JldHVybiAoU09BUE9wZXJhdGlvbltdKXNvYXBPcFZlY3Rvci50b0FycmF5KG5ldyBTT0FQT3BlcmF0aW9uW10ge30pOwotICAgIHJldHVybiBzb2FwT3BlcmF0aW9uTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBiaW5kaW5nTWF0Y2ggYW4gYXJyYXkgb2YgQmluZGluZ01hdGNoIG9iamVjdHMuCi0gICAqIEBwYXJhbSBpbk9yT3V0IGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGF0dHJpYiBhdHRyaWJ1dGUuCi0gICAqIEByZXR1cm4gYSBib29sZWFuLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgdGhlIHBhcnQgaXMgbm90IGNvbXBsaWFudC4KLSAgICovCi0gIC8vIEdUIC0gcmV3b3JrIHRoaXMgbWV0aG9kIHdpdGggYSBiZXR0ZXIgd2F5IG9mIHBhcmFtZXRlcml6aW5nIHRoZSBnZXR0ZXJzIHJlcXVpcmVkIGZvciB0aGUgaW52b2NhdGlvbi4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tQYXJ0QXR0cmlidXRlcygKLSAgICBCaW5kaW5nTWF0Y2hbXSBiaW5kaW5nTWF0Y2gsCi0gICAgU3RyaW5nIGluT3JPdXQsCi0gICAgU3RyaW5nIGF0dHJpYikKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0KLSAgICBpZiAoIShpbk9yT3V0LmVxdWFscygidXNlSW5wdXQiKSB8fCBpbk9yT3V0LmVxdWFscygidXNlT3V0cHV0IikpCi0gICAgICB8fCAhKGF0dHJpYi5lcXVhbHMoInVzZVR5cGUiKSB8fCBhdHRyaWIuZXF1YWxzKCJ1c2VFbGVtZW50IikpKQotICAgIHsKLSAgICAgIC8vIGludmFsaWQgYXJndW1lbnQgdmFsdWUgc3VwcGxpZWQgYnkgY2FsbGluZyBtZXRob2QgLSAiaW50ZXJuYWwgZXJyb3IiCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5nTWF0Y2gubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQmluZGluZ01hdGNoIG5leHRNYXRjaCA9IGJpbmRpbmdNYXRjaFtpXTsKLQotICAgICAgLy8gY2hlY2sgdGhlIGFzc29jaWF0ZWQgcGFydHMKLSAgICAgIE1lc3NhZ2UgbXNnOwotICAgICAgTWFwIHBhcnRzOwotICAgICAgSXRlcmF0b3IgcGFydEl0ZXJhdGlvbjsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBuZXh0TWF0Y2guZ2V0QmluZGluZ09wZXJhdGlvbigpOwotICAgICAgaWYgKGJpbmRpbmdPcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsgLy8gbm8gQmluZGluZyBPcGVyYXRpb24gZm9yIHNvbWUgcmVhc29uCi0gICAgICB9Ci0KLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLyoJQUREOiBoYW5kbGUgc29hcDpmYXVsdHMgaW4gc2ltaWxhciB3YXkJICAgCQkKLSAgICAgIHRyeSB7Ci0gICAgICAvLyBjaGVjayBmYXVsdHMgLSByZW1hcmthYmx5IHNpbWlsYXIuLi4uIChuZWVkIHRvIHJldGFpbiBvcGVyYXRpb24gaWQgZm9yIGZhaWx1cmVkZXRhaWwgbXNnKQotICAgICAgCWlmIChuZXh0TWF0Y2guaGFzQmluZGluZ0ZhdWx0KCkpIHsKLSAgICAgIAkJCQkKLSAgICAgIAkJbXNnID0gb3AuZ2V0RmF1bHQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAJCXBhcnRzID0gbXNnLmdldFBhcnRzKCk7Ci0gICAgICAJCQkJICAgIAkJCQkJICAgICAJCQkKLSAgICAgIAkJLy9jaGVjayB0aGF0IGVhY2ggcGFydCBoYXMgYW4gZWxlbWVudCBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAJCXBhcnRJdGVyYXRpb24gPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgCQl3aGlsZSAocGFydEl0ZXJhdGlvbi5oYXNOZXh0KCkpIHsKLSAgICAgIAkJCVBhcnQgcGFydCA9IChQYXJ0KXBhcnRJdGVyYXRpb24ubmV4dCgpOwotICAgICAgCQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAJCQkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIk9QRVJBVElPTjogIiArIG9wICsgIk1FU1NBR0U6ICIgKyBtc2cpOwotICAgICAgCQkJfQotICAgICAgCQl9CSAJCQkKLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbikgewotICAgICAgCS8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgIAl0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihuLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICAqLwotCi0gICAgICB0cnkKLSAgICAgIHsKLQotICAgICAgICBRTmFtZSBhdHRyaWJ1dGVOYW1lOwotCi0gICAgICAgIC8vR1Q6IERvIHdlIG5lZWQgdG8gY2hlY2sgQmluZGluZ0lucHV0IC8gT3V0cHV0IGhlcmUgPz8KLQotICAgICAgICBpZiAoaW5Pck91dC5lcXVhbHMoInVzZUlucHV0IikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8ICFuZXh0TWF0Y2guaGFzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gSW5wdXQgc28gbm90aGluZyB0byBjaGVjawotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbXNnID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgLy8gTG9va2luZyBmb3IgT3V0cHV0Ci0gICAgICAgICAgaWYgKG9wLmdldE91dHB1dCgpID09IG51bGwgfHwgIW5leHRNYXRjaC5oYXNCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gT3V0cHV0IHNvIG5vdGhpbmcgdG8gY2hlY2sKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1zZyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3RoaW5nIHRvIGNoZWNrIGZyb20gdGhpcyBCaW5kaW5nIE1hdGNoICg/KQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIAotICAgICAgICBwYXJ0cyA9IG1zZy5nZXRQYXJ0cygpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFydHMgYXR0cmlidXRlLCB0aGVuIG9ubHkgcHJvY2VzcyB0aG9zZSBwYXJ0cwotICAgICAgICBMaXN0IHBhcnRzTmFtZUxpc3QgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTmFtZUxpc3QgPSBnZXRQYXJ0c0xpc3QobmV4dE1hdGNoLCBpbk9yT3V0KSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBwYXJ0c0xpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNOYW1lSXRlcmF0b3IgPSBwYXJ0c05hbWVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHBhcnRzTmFtZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0c0xpc3QuYWRkKHBhcnRzLmdldCgoU3RyaW5nKSBwYXJ0c05hbWVJdGVyYXRvci5uZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcGFydEl0ZXJhdGlvbiA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgY29tcGxldGUgbGlzdCBvZiBwYXJ0cwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0SXRlcmF0aW9uID0gcGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vY2hlY2sgdGhhdCBlYWNoIHBhcnQgaGFzIGFuIGVsZW1lbnQgb3IgdHlwZSBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAgIHdoaWxlIChwYXJ0SXRlcmF0aW9uLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0SXRlcmF0aW9uLm5leHQoKTsKLSAgICAgICAgICBpZiAoYXR0cmliLmVxdWFscygidXNlRWxlbWVudCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7IC8vICJ1c2VUeXBlIgotICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IHBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiTmFtZSBvZiBvcGVyYXRpb24gdGhhdCBmYWlsZWQ6ICIKLSAgICAgICAgICAgICAgICArIG9wLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgb3AudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgIlxuTmFtZSBvZiBtZXNzYWdlIHRoYXQgZmFpbGVkOiAiCi0gICAgICAgICAgICAgICAgKyBtc2cuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgbXNnLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG4pCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24obi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7IC8vIHRlc3RzIHN1Y2Nlc3NmdWwKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcGFydHMgbGlzdCBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldFBhcnRzTGlzdChCaW5kaW5nTWF0Y2ggYmluZGluZ01hdGNoLCBTdHJpbmcgdHlwZSkKLSAgewotICAgIExpc3QgcGFydHNMaXN0ID0gbnVsbDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG51bGw7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGJpbmRpbmdPcCA9IGJpbmRpbmdNYXRjaC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAgIGlmICh0eXBlLmVxdWFscygidXNlSW5wdXQiKSkKLSAgICAgIHsKLSAgICAgICAgaXRlcmF0b3IgPQotICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ09wLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGVpdGhlciBubyBiaW5kaW5nIG9wZXJhdGlvbiwgYmluZGluZyBpbnB1dC9vdXRwdXQsIG9yIFNPQVAgZWxlbWVudAotICAgIH0KLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHBhcnRzTGlzdCA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgcGFydHNMaXN0ID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgICAgeyAvLyBub3QgYSBTT0FQQm9keSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgc28gaWdub3JlCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRzTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgV1NETCBlbGVtZW50LgotICAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotICAgIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3Q7Ci0KLSAgICBpZiAoKHdzZGxFbGVtZW50TGlzdCA9IHdzZGxEb2N1bWVudC5nZXRFbGVtZW50TGlzdCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1lbnRMb2NhdGlvbiA9IHdzZGxFbGVtZW50TGlzdC5nZXRFbGVtZW50TG9jYXRpb24od3NkbEVsZW1lbnQpOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGZhaWx1cmUgZGV0YWlsLgotICAgKiBAcGFyYW0gbWVzc2FnZSBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHByb3RlY3RlZCBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgewotICAgIHJldHVybiBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgbWVzc2FnZSwKLSAgICAgIGVudHJ5Q29udGV4dCwKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwuCi0gICAqLwotICBwcm90ZWN0ZWQgRmFpbHVyZURldGFpbCBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgT2JqZWN0IHdzZGxFbGVtZW50KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBnZXRFbGVtZW50TG9jYXRpb24oZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLCB3c2RsRWxlbWVudCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqIAotICAgKiBTT0FQQm9keSwgU09BUEZhdWx0LCBTT0FQSGVhZGVyIGFuZCBTT0FQSGVhZGVyRmF1bHQgY2xhc3MgCi0gICAqIGludGVyZmFjZXMgaGF2ZSBjb21wYXRpYmxlIGdldFVzZSgpIGFuZCBnZXROYW1lc3BhY2VVUkkoKSAKLSAgICogbWV0aG9kcywgYnV0IHdzZGw0aiBkb2VzIG5vdCBkZWNsYXJlIHRoZW0gYXQgdGhlIHBhcmVudCBpbnRlcmZhY2UuIAotICAgKiBUaGVyZWZvcmUgdXNlIHJlZmxlY3Rpb24gdG8gYWNjZXNzIHRoZXNlIGNvbW1vbiBtZXRob2RzLgotICAgKiAKLSAgICogQHBhcmFtIGV4dEVsZW1lbnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGlzIGZvdW5kIGluIFNPQVAgbGl0ZXJhbC4KLSAgICogQHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24gaWYgdGhpcyBtZXRob2QgY2Fubm90IGJlIGZvdW5kLgotICAgKiBAdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgaW4gYW4gaW52b2tlZCBtZXRob2Qgb3IgY29uc3RydWN0b3IKLSAgICogQHRocm93cyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFtIGF0dGVtcHQgdG8gbG9hZCBhCi0gICAqICAgICAgICAgY2xhc3MgdGhhdCBpdCBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0by4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50KQotICAgIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24sIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KLSAgewotICAgIENsYXNzIGMgPSBleHRFbGVtZW50LmdldENsYXNzKCk7Ci0gICAgTWV0aG9kIGdldFVzZU1ldGhvZCA9IGMuZ2V0TWV0aG9kKCJnZXRVc2UiLCBuZXcgQ2xhc3NbMF0pOwotICAgIE1ldGhvZCBnZXROYW1lc3BhY2VVUklNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0TmFtZXNwYWNlVVJJIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBuYW1lc3BhY2UgZm91bmQKLSAgICBib29sZWFuIG5hbWVzcGFjZUZvdW5kID0KLSAgICAgIChnZXROYW1lc3BhY2VVUklNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpICE9IG51bGwpOwotCi0gICAgLy8gcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGZvdW5kCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotCi0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGV4dGVuc2liaWxpdHkgZWxlbWVudCB1c2VzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRlbnNpYmxlIC0gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKiBAdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBpZiB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgZm91bmQuCi0gICAqIEB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBpbiBhbiBpbnZva2VkIG1ldGhvZCBvciBjb25zdHJ1Y3RvcgotICAgKiBAdGhyb3dzIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW0gYXR0ZW1wdCB0byBsb2FkIGEKLSAgICogICAgICAgICBjbGFzcyB0aGF0IGl0IGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMaXRlcmFsKEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2libGUpCi0gICAgdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbgotICB7Ci0KLSAgICBDbGFzcyBjID0gZXh0ZW5zaWJsZS5nZXRDbGFzcygpOwotICAgIE1ldGhvZCBnZXRVc2VNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0VXNlIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBzaG93biB0byBoYXZlIHVzZT0ibGl0ZXJhbCIKLSAgICByZXR1cm4gdHJ1ZTsKLQotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM5YjVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTAgZXh0ZW5kcyBCUDIwMTAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkNWRhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDExIGV4dGVuZHMgQlAyMDExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDllZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxMiBleHRlbmRzIEJQMjAxMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYwMWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTMgZXh0ZW5kcyBCUDIwMTMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiNmE2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE0IGV4dGVuZHMgQlAyMDE0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTk4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxNwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxNyBleHRlbmRzIEJQMjAxNwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ1ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTggZXh0ZW5kcyBCUDIwMTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxOTdmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE5Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE5IGV4dGVuZHMgQlAyMDE5Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZjAyMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAyMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAyMCBleHRlbmRzIEJQMjAyMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzdmMWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMjEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMjEgZXh0ZW5kcyBCUDIwMjEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTk2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDIyIGV4dGVuZHMgQlAyMDIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDMyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMDdhYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAzMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAzMiBleHRlbmRzIEJQMjAzMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDMyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE5MDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwOTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTggZXh0ZW5kcyBCUDIwOTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwOTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0YjUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTIwOTkuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zLCA8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIFdTLUkgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBkb2VzIG5vdCBhcHBlYXIgb3V0c2lkZSBhIHdzZGw6cG9ydCwgd3NkbDpiaW5kaW5nLCB3c2RsOnBvcnRUeXBlLCB3c2RsOm9wZXJhdGlvbiwgb3Igd3NkbDptZXNzYWdlIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLQotICAvKioKLSAgICogIENoZWNrIGEgV1MtSSBjb25mb3JtYW5jZSBhbm5vdGF0aW9uIGRvZXMgbm90IGFwcGVhciBvdXRzaWRlIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UgZWxlbWVudCBpZiBub3QgaXQgY3JlYXRlcyBmYWlsdXJlIHJlcG9ydC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZWwsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIGNvbmZvcm1hbmNlIGNsYWltIHNob3VsZCBiZSB3aXRoaW4gOiBwb3J0LCBiaW5kaW5nLCBwb3J0dHlwZSwgb3BlcmF0aW9uLCBtZXNzYWdlCi0gICAgaWYgKGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShlbCkpCi0gICAgewotICAgICAgY29udGFpbnNDbGFpbXMgPSB0cnVlOwotCi0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfRkFVTFQsICgoQmluZGluZ0ZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChCaW5kaW5nSW5wdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9PUEVSQVRJT04sICgoQmluZGluZ09wZXJhdGlvbikgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX09VVFBVVCwgKChCaW5kaW5nT3V0cHV0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfREVGSU5JVElPTlMsICgoRGVmaW5pdGlvbikgcGFyZW50KS5nZXRRTmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFNlcnZpY2UpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9TRVJWSUNFLCAoKFNlcnZpY2UpIHBhcmVudCkuZ2V0UU5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0ZBVUxULCAoKEZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChPdXRwdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEltcG9ydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0lNUE9SVCwgKChJbXBvcnQpIHBhcmVudCkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChJbnB1dCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX1BBUlQsICgoUGFydCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVHlwZXMpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9UWVBFUyk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICAvKgotICAgIHRyYXZlcnNhbC4KLSAgICAJaWdub3JlUG9ydDJFbGVtZW50KCkuCi0gICAgCWlnbm9yZU1lc3NhZ2UyRWxlbWVudCgpLgotICAgIAlpZ25vcmVCaW5kaW5nMkVsZW1lbnQoKS4KLSAgICAJaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpLgotICAgIAlpZ25vcmVPcGVyYXRpb24yRWxlbWVudCgpOwkJCi0gICAgICAqLwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2hldGhlciBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbXMuIAotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltLiAKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShFbGVtZW50IGVsKQotICB7Ci0gICAgaWYgKGVsID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHJldHVybiAoZWwgIT0gbnVsbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExNTU4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBXU0kyMTAwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucywgaWYgaXQgY29udGFpbnMgYSB3c2RsOnBvcnQsIHdzZGw6YmluZGluZywgd3NkbDpwb3J0VHlwZSwgd3NkbDpvcGVyYXRpb24sIG9yIHdzZGw6bWVzc2FnZSwgd2hpY2ggaW4gdHVybiBjb250YWlucyBhIGNvbmZvcm1hbmNlIGFubm90YXRpb248L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBvZiB0aGUgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UsIHZhbGlkYXRlcyB0byB0aGUgc2NoZW1hIGRlZmluZWQgaW4gdGhlIEJhc2ljIFByb2ZpbGUsIGFuZCBpcyBkaXJlY3QgY2hpbGQgb2YgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBmb3IgdGhlIFdTREwgZWxlbWVudC4gVGhlIHNjaGVtYSBkZWZpbml0aW9uIHVzZXMgImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIiBhcyB0aGUgdGFyZ2V0TmFtZXNwYWNlLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgY29udGFpbnMgaWxsZWdhbCBjbGFpbS4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgcG9ydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBvcnQgIT0gbnVsbCAmJiAhY29udGFpbnNMZWdhbENsYWltKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfUE9SVCwgcG9ydC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgYmluZGluZyBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsCi0gICAgICAmJiAhY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfQklORElORywgYmluZGluZy5nZXRRTmFtZSgpKTsKLSAgfQotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgdHlwZSBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0VHlwZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIHR5cGUsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmICh0eXBlICE9IG51bGwgJiYgIWNvbnRhaW5zTGVnYWxDbGFpbSh0eXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX1BPUlRUWVBFLCB0eXBlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgb3BlcmF0aW9uIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX09QRVJBVElPTiwgb3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gIH0KLQotICAvKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBtZXNzYWdlIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0obWVzc2FnZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkKLSAgICAgIGVycm9ycy5hZGQoV1NETF9NRVNTQUdFLCBtZXNzYWdlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnRUeXBlKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGlsbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0KLSAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgIGNvbnRhaW5zQ2xhaW1zID0gdHJ1ZTsKLQotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfQ0xBSU1fQ09ORk9STVNUTykgPT0gbnVsbAotICAgICAgICB8fCBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfU09BUF9NVVNUVU5ERVJTVEFORCkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZWwgPSBYTUxVdGlscy5maW5kRWxlbWVudChlbCwgV1NJX0NMQUlNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmMDlkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTAxIGV4dGVuZHMgQlAyMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjI3ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMiBleHRlbmRzIEJQMjEwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc1ZjE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDMgZXh0ZW5kcyBCUDIxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0Mjc3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA0IGV4dGVuZHMgQlAyMTA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmRkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwNSBleHRlbmRzIEJQMjEwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTA1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU3NDJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDcgZXh0ZW5kcyBCUDIxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2YmVhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA4IGV4dGVuZHMgQlAyMTA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MGNjNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMCBleHRlbmRzIEJQMjExMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjkyODZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTEgZXh0ZW5kcyBCUDIxMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0MGFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTEyIGV4dGVuZHMgQlAyMTEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMTE4OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMyBleHRlbmRzIEJQMjExMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU1YTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTQKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTQgZXh0ZW5kcyBCUDIxMTQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2ZWY3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE1IGV4dGVuZHMgQlAyMTE1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTUoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMzU4ZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExNiBleHRlbmRzIEJQMjExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IzNzdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTcgZXh0ZW5kcyBCUDIxMTcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkMzMwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE4IGV4dGVuZHMgQlAyMTE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTZjZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExOSBleHRlbmRzIEJQMjExOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJlMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMjAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMjAgZXh0ZW5kcyBCUDIxMjAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5OTRlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTIyIGV4dGVuZHMgQlAyMTIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjA1YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEyMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEyMyBleHRlbmRzIEJQMjEyMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY0NTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIyMDEgZXh0ZW5kcyBCUDIyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiNTlmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMjAyIGV4dGVuZHMgQlAyMjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDcxMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjIwOAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjIwOCBleHRlbmRzIEJQMjIwOAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMjA4KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGM1Nzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MDIgZXh0ZW5kcyBCUDI0MDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhY2Q0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDAzIGV4dGVuZHMgU1NCUDI0MDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmYThlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDA0IGV4dGVuZHMgQlAyNDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZDQyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjQwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjQwNiBleHRlbmRzIEJQMjQwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNDA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzBiZjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MTYgZXh0ZW5kcyBCUDI0MTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MTcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyMzgzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDE3Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDE3IGV4dGVuZHMgQlAyNDE3Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YmJiMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjcwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjcwMCBleHRlbmRzIEJQMjcwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNzAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3ZjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTI3MDEgZXh0ZW5kcyBCUDI3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MzcwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNzAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNzAzIGV4dGVuZHMgQlAyNzAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI3MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNDNhN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJNDIwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJNDIwMCBleHRlbmRzIEJQNDIwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0k0MjAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzIzM2Q5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTQyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTQyMDEgZXh0ZW5kcyBCUDQyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJNDIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJkOWJhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0k0MjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MjAyIGV4dGVuZHMgQlA0MjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTQyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0FydGlmYWN0UmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4OTlkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEFuIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBcnRpZmFjdFJlZmVyZW5jZSBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdGltZXN0YW1wLgotICAgKiBAc2VlICNzZXRUaW1lc3RhbXAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgYSB0aW1lc3RhbXAuCi0gICAqIEBzZWUgI2dldFRpbWVzdGFtcAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgZWxlbWVudC4KLSAgICogQHJldHVybiBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAc2VlICNzZXREb2N1bWVudEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEVsZW1lbnQgZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRFbGVtZW50IGRvY3VtZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICAgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHNlZSAjZ2V0RG9jdW1lbnRFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTEzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0Fzc2VydGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX1JFU1VMVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUX1BBU1NFRCA9ICJwYXNzZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfRkFJTEVEID0gImZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9QUkVSRVFfRkFJTEVEID0gInByZXJlcUZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9NSVNTSU5HX0lOUFVUID0gIm1pc3NpbmdJbnB1dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9XQVJOSU5HID0gIndhcm5pbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfTk9UX0FQUExJQ0FCTEUgPSAibm90QXBwbGljYWJsZSI7Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQuCi0gICAqIEByZXR1cm4gcmVzdWx0LgotICAgKiBAc2VlICNzZXRSZXN1bHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVzdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXN1bHQuCi0gICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCB2YWx1ZS4KLSAgICogQHNlZSAjZ2V0UmVzdWx0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb24gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb24oVGVzdEFzc2VydGlvbiBwcm9maWxlQXNzZXJ0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5LgotICAgKiBAcmV0dXJuIGVudHJ5LgotICAgKiBAc2VlICNzZXRFbnRyeQotICAgKi8KLSAgcHVibGljIEVudHJ5IGdldEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKiBAc2VlICNnZXRFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEBzZWUgI3NldEZhaWx1cmVEZXRhaWxMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBtZXNzYWdlcy4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAc2VlICNnZXRGYWlsdXJlRGV0YWlsTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KTsKLQotICAvKioKLSAgICogR2V0IHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gd2FybmluZyBtZXNzYWdlcy4KLSAgICogQHNlZSAjc2V0V2FybmluZ01lc3NhZ2VzCi0gICAqLwotICAvL3B1YmxpYyBWZWN0b3IgZ2V0V2FybmluZ01lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiBAcGFyYW0gd2FybmluZ01lc3NhZ2VzIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEBzZWUgI2dldFdhcm5pbmdNZXNzYWdlcwotICAgKi8KLSAgLy9wdWJsaWMgdm9pZCBzZXRXYXJuaW5nTWVzc2FnZXMoVmVjdG9yIHdhcm5pbmdNZXNzYWdlcyk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEByZXR1cm4gc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEByZXR1cm4gcHJlcmVxIGZhaWxlZCBsaXN0LgotICAgKiBAc2VlICNzZXRQcmVyZXFGYWlsZWRMaXN0Ci0gICAqLwotICBwdWJsaWMgUHJlcmVxRmFpbGVkTGlzdCBnZXRQcmVyZXFGYWlsZWRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0IHByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICogQHNlZSAjZ2V0UHJlcmVxRmFpbGVkTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0J1aWxkUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkYmMyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBQcm9maWxlIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJ1aWxkUmVwb3J0Ci17Ci0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFUkVRX1RZUEVfRU5UUlkgPSAiZW50cnkiOwotCi0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUiA9ICJlbnRyeUNvbnRhaW5lciI7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCBjdXJyZW50IHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0IHJlZmVyZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRBcnRpZmFjdCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW52ZWxvcGVFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEFkZCB0ZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25SZXN1bHQgdGVzdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRoZSB0ZXN0IGFzc2VydGlvbiBJRC4KLSAgICogQHJldHVybiAgdGhlIGFzc2VydGlvbiByZXN1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqICAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBjcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgZmFpbHVyZSBkZXRhaWwuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLQotICAvKioKLSAgICogU2V0IHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBwcmVyZXFUeXBlIHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5Y2Q4OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHRhcmdldC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRW50cnkgZXh0ZW5kcyBFbnRyeVJlc3VsdCwgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlRSWTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgLy9wdWJsaWMgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqLwotICAvL3B1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUuCi0gICAqIEByZXR1cm4gZW50cnkgdHlwZS4KLSAgICogQHNlZSAjc2V0RW50cnlUeXBlCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5VHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IG5hbWUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgbmFtZS4KLSAgICogQHNlZSAjc2V0QXJ0aWZhY3ROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXJ0aWZhY3QgbmFtZS4KLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSBhcnRpZmFjdCBuYW1lLgotICAgKiBAc2VlICNnZXRBcnRpZmFjdE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHJldHVybiByZWZlcmVuY2UgSUQuCi0gICAqIEBzZWUgI3NldFJlZmVyZW5jZUlECi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZWZlcmVuY2UgSUQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VJRCByZWZlcmVuY2VJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEKFN0cmluZyByZWZlcmVuY2VJRCk7Ci0KLSAgLyoqCi0gICAqIEdldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjZ2V0UGFyZW50RWxlbWVudE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbnRyeSBkZXRhaWwuCi0gICAqIEByZXR1cm4gZW50cnkgZGV0YWlsLgotICAgKiBAc2VlICNzZXRFbnRyeURldGFpbAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRFbnRyeURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgZGV0YWlsLgotICAgKiBAcGFyYW0gZGV0YWlsIGVudHJ5IGRldGFpbC4KLSAgICogQHNlZSAjZ2V0RW50cnlEZXRhaWwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5RGV0YWlsKE9iamVjdCBkZXRhaWwpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcmV0dXJuIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHNlZSAjc2V0RW50cnlDb250YWluZXIKLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBnZXRFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcGFyYW0gZW50cnlDb250YWluZXIgZW50cnkgY29udGFpbmVyLgotICAgKiBAc2VlICNnZXRFbnRyeUNvbnRhaW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpOwotCi0gIC8qKgotICAgKiBHZXQgc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEBwYXJhbSBzaG93TG9nRW50cnkgc2hvdyBsb2cgZW50cnkgb3B0aW9uLgotICAgKiBAcmV0dXJuIHN0YXJ0IFhNTCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIGJvb2xlYW4gc2hvd0xvZ0VudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcGFyYW0gc2hvd0xvZ0VudHJ5IHNob3cgbG9nIGVudHJ5IG9wdGlvbi4KLSAgICogQHJldHVybiBzdGFydCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBib29sZWFuIHNob3dMb2dFbnRyeSwgYm9vbGVhbiBlbnZlbG9wZUFydGlmYWN0VHlwZSk7Ci0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRW50cnlDb250YWluZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTkxZTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjb250YWluZXIgd2hpY2ggaGFzIG9uZSBvciBtb3JlIGVudHJpZXMuCi0gKiBGb3IgZXhhbXBsZSwgYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIG9uZSBvciBtb3JlIGVsZW1lbnRzLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5Q29udGFpbmVyIGV4dGVuZHMgRW50cnlSZXN1bHQKLXsKLSAgLyoqCi0gICAqIEdldCBjb250YWluZXIgaWQuCi0gICAqIEByZXR1cm4gY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29udGFpbmVyIGlkLgotICAgKiBAcGFyYW0gaWQgY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNnZXRJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeVJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YTRmNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLS8qKgotICogUmVzdWx0IGZvciBhIHNwZWNpZmljIHRlc3QgYXNzZXJ0aW9uLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5UmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqIEByZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBhc3NlcnRpb24gcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRmFpbHVyZURldGFpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhhY2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogRmFpbHVyZSBkZXRhaWwuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRmFpbHVyZURldGFpbCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUw7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHNlZSAjc2V0RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmYWlsdXJlTWVzc2FnZSBmYWlsdXJlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcmV0dXJuIHJlZmVyZW5jZSB0eXBlLgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VUeXBlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZVR5cGUoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlVHlwZSByZWZlcmVuY2UgdHlwZS4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZWZlcmVuY2UgSUQuCi0gICAqIEByZXR1cm4gcmVmZXJlbmNlIElELgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VJRG4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHBhcmFtIHJlZmVyZW5jZUlEIHJlZmVyZW5jZSBJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEbihTdHJpbmcgcmVmZXJlbmNlSUQpOwotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRFbGVtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24gZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1ByZXJlcUZhaWxlZExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwNTlkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBtYWludGFpbiBhbmQgYWNjZXNzIHRoZSBQcmVyZXF1aXNpdGUgRmFpbGVkIExpc3QuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUHJlcmVxRmFpbGVkTGlzdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICAqIEVsZW1lbnQgbmFtZS4KLSAgICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUkVSRVFfRkFJTEVEX0xJU1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogQWRkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSUQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRUZXN0QXNzZXJ0aW9uSUQoU3RyaW5nIGFzc2VydGlvbklEKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjBhZDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydCBleHRlbmRzIFdTSURvY3VtZW50LCBCdWlsZFJlcG9ydAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBvcnQgY29udGV4dC4KLSAgICogQHJldHVybiByZXBvcnQgY29udGV4dC4KLSAgICogQHNlZSAjc2V0UmVwb3J0Q29udGV4dAotICAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQgZ2V0UmVwb3J0Q29udGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRDb250ZXh0IHJlcG9ydCBjb250ZXh0LgotICAgKiBAc2VlICNnZXRSZXBvcnRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRDb250ZXh0KFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0QXJ0aWZhY3QgZ2V0Q3VycmVudEFydGlmYWN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGVudHJ5LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgZ2V0Q3VycmVudEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRFbnRyaWVzLgotICAgKiBAcmV0dXJuIGVudHJ5IGxpc3QuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbnRyaWVzKCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeAotICAgKiBAcmV0dXJuIHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXgKLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZXJyb3IgWE1MIHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHBhcmFtIGVycm9yRGV0YWlsIGFuIGVycm9yIGRldGFpbC4KLSAgICogQHJldHVybiBlcnJvciBYTUwgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdW1tYXJ5IHJlc3VsdC4gCi0gICAqIEByZXR1cm4gc3VtbWFyeSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydEFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExZmI5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuQXJ0aWZhY3RUeXBlOwotCi0vKioKLSAqIFJlcG9ydCBhcnRpZmFjdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RUeXBlIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEFkZCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0RW50cnlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1MDdiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLQotLyoqCi0gKiBSZXBvcnQgY29udGV4dC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXBvcnRDb250ZXh0Ci17Ci0gIC8qKgotICAgKiBSZXBvcnQgdGl0bGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlcG9ydFRpdGxlID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1RJVExFOwotCi0gIC8qKgotICAgKiBQcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnM7Ci0KLSAgLyoqCi0gICAqIEFuYWx5emVyLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyIGFuYWx5emVyOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSBwcm9maWxlQXNzZXJ0aW9ucyBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGFuYWx5emVyIGFuIEFuYWx5emVyIG9iamVjdC4KLSAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQoCi0gICAgU3RyaW5nIHJlcG9ydFRpdGxlLAotICAgIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zLAotICAgIEFuYWx5emVyIGFuYWx5emVyKQotICB7Ci0gICAgdGhpcy5yZXBvcnRUaXRsZSA9IHJlcG9ydFRpdGxlOwotICAgIHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPSBwcm9maWxlQXNzZXJ0aW9uczsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcG9ydCB0aXRsZS4KLSAgICogQHJldHVybiByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI3NldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydFRpdGxlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcG9ydFRpdGxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI2dldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRUaXRsZShTdHJpbmcgcmVwb3J0VGl0bGUpCi0gIHsKLSAgICB0aGlzLnJlcG9ydFRpdGxlID0gcmVwb3J0VGl0bGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqIEBzZWUgI3NldFByb2ZpbGVBc3NlcnRpb25zCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgZ2V0UHJvZmlsZUFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUFzc2VydGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUFzc2VydGlvbnMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVBc3NlcnRpb25zKFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zKQotICB7Ci0gICAgdGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9IHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbmFseXplci4KLSAgICogQHJldHVybiBhbmFseXplci4KLSAgICogQHNlZSAjc2V0QW5hbHl6ZXIKLSAgICovCi0gIHB1YmxpYyBBbmFseXplciBnZXRBbmFseXplcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hbmFseXplcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplciBhbiBBbmFseXplciBvYmplY3QuCi0gICAqIEBzZWUgI2dldEFuYWx5emVyCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QW5hbHl6ZXIoQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3ZmM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0V3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIHJlcG9ydCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRXcml0ZXIgZXh0ZW5kcyBEb2N1bWVudFdyaXRlcgotewotICAvKioKLSAgICogV3JpdGUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgdXNpbmcgdGhlIGxvY2F0aW9uCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRMb2NhdGlvbiBtZXRob2QuCi0gICAqIEBwYXJhbSByZXBvcnQgYSByZXBvcnQuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVwb3J0IGEgcmVwb3J0LgotICAgKiBAcGFyYW0gd3JpdGVyIGEgV3JpdGVyIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNzg0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnRlciBpbnRlcmZhY2UuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydGVyIGV4dGVuZHMgQnVpbGRSZXBvcnQsIFdyaXRlUmVwb3J0Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvV3JpdGVSZXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV3JpdGVSZXBvcnQKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IGNvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEZpbmlzaCB0aGUgY29uZm9ybWFuY2UgcmVwb3J0IGJ5IGFkZGluZyB0aGUgc3VtbWFyeSBhbmQgdGVzdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBGaW5pc2ggdGhlIGNvbmZvcm1hbmNlIHJlcG9ydCBiZWNhdXNlIG9mIGFuIGFuYWx5emVyIGVycm9yLgotICAgKiBAcGFyYW0gZXJyb3JEZXRhaWwgYW5hbHl6ZXIgZXJyb3IuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIHRoZSBiYXNlIFdTLUkgZXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgZmluaXNoUmVwb3J0V2l0aEVycm9yKFN0cmluZyBlcnJvckRldGFpbCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHJlcG9ydC4KLSAgICogQHJldHVybiByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXJ0aWZhY3RSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiNDZiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgcmVmZXJlbmNlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgQXJ0aWZhY3RSZWZlcmVuY2UKLXsKLSAgLyoqCi0gICAqIFRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudCBuYW1lc3BhY2UgbmFtZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldFRpbWVzdGFtcCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpbWVzdGFtcCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50aW1lc3RhbXA7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXRUaW1lc3RhbXAoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApCi0gIHsKLSAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldERvY3VtZW50RWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRFbGVtZW50IGdldERvY3VtZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudEVsZW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXREb2N1bWVudEVsZW1lbnQoRG9jdW1lbnRFbGVtZW50LCBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50OwotICAgIHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBuYW1lc3BhY2VOYW1lOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiICBBcnRpZmFjdCBSZWZlcmVuY2U6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICB0aW1lc3RhbXAgLi4uLi4uLi4uLi4gIiArIHRoaXMudGltZXN0YW1wKTsKLQotICAgIGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICBkb2N1bWVudEVsZW1lbnQgLi4uLi4gIgotICAgICAgICAgICsgdGhpcy5kb2N1bWVudEVsZW1lbnQudG9YTUxTdHJpbmcodGhpcy5lbGVtZW50TmFtZXNwYWNlTmFtZSkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgZ2V0VGltZXN0YW1wKCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIGRvY3VtZW50IGVsZW1lbnQsIHRoZW4gYWRkIGl0Ci0gICAgaWYgKHRoaXMuZG9jdW1lbnRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZG9jdW1lbnRFbGVtZW50LnRvWE1MU3RyaW5nKHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjJkOGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0Fzc2VydGlvblJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHJlc3VsdC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRJbXBsIGltcGxlbWVudHMgQXNzZXJ0aW9uUmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXN1bHQgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgdGVzdCBhc3NlcnRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlc3VsdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjc2V0UmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvbigpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRBc3NlcnRpb24ob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb24gPSB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpCi0gIHsKLSAgICB0aGlzLmVudHJ5ID0gZW50cnk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjZ2V0RmFpbHVyZURldGFpbExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRGYWlsdXJlRGV0YWlsTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5mYWlsdXJlRGV0YWlsTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRGYWlsdXJlRGV0YWlsTGlzdChqYXZhLnV0aWwuVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsTGlzdCA9IGZhaWx1cmVEZXRhaWxMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24ob3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFByZXJlcUZhaWxlZExpc3QoKQotICAgKi8KLSAgcHVibGljIFByZXJlcUZhaWxlZExpc3QgZ2V0UHJlcmVxRmFpbGVkTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldFByZXJlcUZhaWxlZExpc3Qob3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpCi0gIHsKLSAgICB0aGlzLnByZXJlcUZhaWxlZExpc3QgPSBwcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfSUQgKyAiPVwiIiArIHRoaXMudGVzdEFzc2VydGlvbi5nZXRJZCgpICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyB0aGlzLnJlc3VsdCArICJcIj4iKTsKLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdGFyZ2V0cwotCi0gICAgLy8gQWRkIHByZXJlcSBmYWlsZWQgbGlzdAotICAgIGlmICh0aGlzLnByZXJlcUZhaWxlZExpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChwcmVyZXFGYWlsZWRMaXN0LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwotICAgIC8vIElmIHJlc3VsdCBpcyBmYWlsZWQgb3Igd2FybmluZywgdGhlbiBhZGQgZmFpbHVyZSBtZXNzYWdlCi0gICAgaWYgKChyZXN1bHQuZXF1YWxzKFJFU1VMVF9GQUlMRUQpIHx8IHJlc3VsdC5lcXVhbHMoUkVTVUxUX1dBUk5JTkcpKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlKCkpKQotICAgIHsKLSAgICAgIHB3LnByaW50KAotICAgICAgICAiICAgICAgICA8IgotICAgICAgICAgICsgbnNOYW1lCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX01FU1NBR0UKLSAgICAgICAgICArICIgeG1sOmxhbmc9XCJlblwiPiIpOwotICAgICAgcHcucHJpbnQoRE9NVXRpbHMuY2xlYW5TdHJpbmcodGhpcy50ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkpKTsKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQUREOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCi0gICAgLy8gSWYgYW55IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzIHdlcmUgc3BlY2lmaWVkLCB0aGVuIGFkZCB0aGVtCi0gICAgaWYgKChmYWlsdXJlRGV0YWlsTGlzdCAhPSBudWxsKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVEZXRhaWwoKSkpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYWlsdXJlRGV0YWlsTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoKChGYWlsdXJlRGV0YWlsKSBpdGVyYXRvci5uZXh0KCkpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0RlZmF1bHRSZXBvcnRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWMyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgUGFyYXNvZnQgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZXJyb3JzIGZyb20gdGhlIGFuYWx5emVyLgotICogRXh0ZW5kIHRoaXMgY2xhc3MgZm9yIHNwZWNpZmljIHR5cGVzIG9mIHJlcG9ydGluZywgc3VjaCBhcyByZXBvcnRpbmcKLSAqIGluIGRpZmZlcmVudCBmb3JtYXRzLCByZXBvcnRpbmcgdG8gZmlsZXMsIHJlcG9ydGluZyB0byBhIEdVSS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFJlcG9ydGVyIGltcGxlbWVudHMgUmVwb3J0ZXIKLXsKLSAgLyoqCi0gICAqIENvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnQgcmVwb3J0OwotCi0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcjsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIC8qKgotICAgKiBBc3NlcnRvaW4gcmVzdWx0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVzdWx0IHJlcG9ydGVyLgotICAgKiBAcGFyYW0gcmVwb3J0IGEgUmVwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIHJlcG9ydFdyaXRlciBhIFJlcG9ydFdyaXRlck9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0UmVwb3J0ZXIoUmVwb3J0IHJlcG9ydCwgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcikKLSAgewotICAgIHRoaXMucmVwb3J0ID0gcmVwb3J0OwotICAgIHRoaXMucmVwb3J0V3JpdGVyID0gcmVwb3J0V3JpdGVyOwotCi0gICAgLy8gQUREOiBWZXJpZnkgdGhhdCB3cml0ZXIgc2V0IGluIHJlcG9ydFdyaXRlcgotCi0gICAgLy8gR2V0IHJlcG9ydCBjb250ZXh0Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnQuZ2V0UmVwb3J0Q29udGV4dCgpLmdldEFuYWx5emVyKCkuZ2V0QW5hbHl6ZXJDb25maWcoKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdFR5cGUgPQotICAgICAgdGhpcy5hbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkuZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0Q3VycmVudEFydGlmYWN0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LnNldEN1cnJlbnRBcnRpZmFjdChyZXBvcnRBcnRpZmFjdCk7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0QXJ0aWZhY3QuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKAotICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0Q3VycmVudEFydGlmYWN0KCkuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICAgIHJlcG9ydC5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFydGlmYWN0UmVmZXJlbmNlKG9yZy53c2kudGVzdC5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihhcnRpZmFjdFJlZmVyZW5jZS50b1hNTFN0cmluZygiIikpKTsKLQotICAgIC8vIEFkZCBhcnRpZmFjdCByZWZlcmVuY2UgdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I3NldEN1cnJlbnRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCksCi0JCSAgdHJ1ZSkpKTsKLSAgfQotLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZW5kQ3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydFdyaXRlci53cml0ZSgKLSAgICAgIG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldEN1cnJlbnRFbnRyeSgpLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICByZXBvcnQuZW5kQ3VycmVudEVudHJ5KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCYXNlZCBvbiB0aGUgY29uZmlnIG9wdGlvbnMsIHdyaXRlIG91dCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzQWxsKCkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNGYWlsZWRPbmx5KCkpCi0gICAgICAgICYmIChhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKSkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNOb3RQYXNzZWQoKSkKLSAgICAgICAgJiYgKCFhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkpCi0JICAgICAgfHwgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzTm90SW5mbygpKQotCSAgICAgICAgICAgICYmICghYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldFR5cGUoKS5lcXVhbHMoVGVzdEFzc2VydGlvbi5UWVBFX0lORk9STUFUSU9OQUwpKSkpCi0gICAgewotICAgICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIoYXNzZXJ0aW9uUmVzdWx0LnRvWE1MU3RyaW5nKCIiKSkpOwotICAgIH0KLQotICAgIC8vIEFkZCBhc3NlcnRpb24gdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICAvLyBHZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSB0aGUgY3VycmVudCBhc3NlcnRpb24gdGFyZ2V0Ci0gICAgcmV0dXJuIHJlcG9ydC5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjc3RhcnRSZXBvcnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBXcml0ZSBvdXQgc3RhcnQgb2YgcmVwb3J0Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZpbmlzaFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0V2l0aEVycm9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnRXaXRoRXJyb3IoU3RyaW5nIGVycm9yRGV0YWlsKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDaGVjayBpZiBlbnRyeSBvciBhcnRpZmFjdCBuZWVkIHRvIGJlIGNsb3NlZAotICAgIGlmICh0aGlzLnJlcG9ydC5nZXRDdXJyZW50RW50cnkoKSAhPSBudWxsKQotICAgICAgZW5kQ3VycmVudEVudHJ5KCk7Ci0gICAgaWYgKHRoaXMucmVwb3J0LmdldEN1cnJlbnRBcnRpZmFjdCgpICE9IG51bGwpCi0gICAgICBlbmRDdXJyZW50QXJ0aWZhY3QoKTsKLQotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcG9ydC5nZXRFcnJvclhNTFN0cmluZygiIiwgZXJyb3JEZXRhaWwpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUFydGlmYWN0KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVFbnRyeSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiByZXBvcnQuY3JlYXRlRW50cnlDb250YWluZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LldyaXRlUmVwb3J0I2dldFJlcG9ydCgpCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRQcmVyZXFUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKQotICB7Ci0gICAgdGhpcy5yZXBvcnQuc2V0UHJlcmVxVHlwZShwcmVyZXFUeXBlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlDb250YWluZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZDA4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbW9yZSBlbnRyaWVzLiAgCi0gKiBBbiBleGFtcGxlIHdvdWxkIGJlIGEgV1NETCBkb2N1bWVudC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5Q29udGFpbmVySW1wbAotICBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbAotICBpbXBsZW1lbnRzIEVudHJ5Q29udGFpbmVyCi17Ci0gIC8qKgotICAgKiBDb250YWluZXIgSUQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyI2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeUNvbnRhaW5lciNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJbIiArIHRoaXMuaWQgKyAiXSAiICsgdGhpcy5hc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0VudHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDc3NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRyeSBpbiBhIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5SW1wbCBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbCBpbXBsZW1lbnRzIEVudHJ5Ci17Ci0gIC8qKgotICAgKiBFbnRyeSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZSBlbnRyeVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBuYW1lIChvcHRpb25hbCkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGFydGlmYWN0TmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlZmVyZW5jZSBJRC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotCi0gIC8qKgotICAgKiBQYXJlbnQgZWxlbWVudCBuYW1lIChvbmx5IHVzZWQgd2hlbiBlbnRyeSB0eXBlIGlzICJwb3J0IiBvciAib3BlcmF0aW9uIikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogRW50cnkgZGV0YWlsIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZW50cnlEZXRhaWwgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeSBjb250YWluZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeVR5cGUoRW50cnlUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlKEVudHJ5VHlwZSBlbnRyeVR5cGUpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZSA9IGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEFydGlmYWN0TmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRBcnRpZmFjdE5hbWUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdE5hbWUgPSBhcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRSZWZlcmVuY2VJRCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjc2V0UmVmZXJlbmNlSUQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlSUQoU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0UGFyZW50RWxlbWVudE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I3NldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMucGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5RGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0RW50cnlEZXRhaWwoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeURldGFpbChPYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeURldGFpbChPYmplY3QgZW50cnlEZXRhaWwpCi0gIHsKLSAgICB0aGlzLmVudHJ5RGV0YWlsID0gZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRFbnRyeUNvbnRhaW5lcigpCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250YWluZXIgZ2V0RW50cnlDb250YWluZXIoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeUNvbnRhaW5lcihvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpCi0gIHsKLSAgICB0aGlzLmVudHJ5Q29udGFpbmVyID0gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeVJlc3VsdCNhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICBzdXBlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLQotICAgIGlmICh0aGlzLmVudHJ5Q29udGFpbmVyICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5Q29udGFpbmVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnksIGJvb2xlYW4gZW52ZWxvcGVBcnRpZmFjdFR5cGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotCi0gICAgaWYgKHRoaXMuZW50cnlUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVudmVsb3BlQXJ0aWZhY3RUeXBlKQotCSAgewotICAgICAgCS8vIHdlIHVzZSB0aGUgc2FtZSBhY3R1YWwgZW50cnkgZm9yIGJvdGggbWVzc2FnZSBhbmQgZW52ZWxvcGUgYXJ0aWZhY3RzCi0gICAgICAJLy8gd2Ugbm93IG5lZWQgdG8gb3V0cHV0IGVudHJ5IHR5cGUgbmFtZXMgdGhhdCBhY3R1YWxseSBwZXJ0YWluIHRvIHRoZSBhcnRpZmFjdCB0eXBlCi0gICAgICAJcHcucHJpbnQoCi0gICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZSh0aGlzLmVudHJ5VHlwZS5nZXRUeXBlTmFtZSgpKSArICJcIiAiKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgdGhpcy5lbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJcIiAiKTsKLQkgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0aGlzLmFydGlmYWN0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiWyIgKyB0aGlzLmFydGlmYWN0TmFtZSArICJdXCIgIik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlSUQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgWE1MVXRpbHMueG1sRXNjYXBlZFN0cmluZyh0aGlzLnJlZmVyZW5jZUlEKSArICJcIiAiKTsKLQotCi0gICAgLy8gSWYgc2VydmljZSBuYW1lIHdhcyBzZXQgdGhlbiBhZGQgaXQKLSAgICAvL2lmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsKSB7Ci0gICAgLy8gIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX1BBUkVOVF9FTEVNRU5UX05BTUUgKyAiPVwiIiArIHRoaXMucGFyZW50RWxlbWVudE5hbWUgKyAiXCIiKTsKLSAgICAvL30KLQotICAgIC8vIEFERDogTmVlZCB0byBjaGVjayBmb3IgY29uZmlnIG9wdGlvbiB0aGF0IHNwZWNpZmllcyAKLSAgICAvLyAgICAgIHRoYXQgbG9nIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkCi0KLSAgICAvLyBJZiB0YXJnZXQgaXMgYSBsb2cgZW50cnksIHRoZW4gYWRkIHJlZmVyZW5jZSB0byBpdAotICAgIGlmICgoZW50cnlUeXBlICE9IG51bGwpICYmIChlbnRyeVR5cGUuZ2V0QXJ0aWZhY3RUeXBlKCkuaXNMb2dnYWJsZSgpKSAmJiAoc2hvd0xvZ0VudHJ5KSkgCi0gICAgewotICAgICAgRG9jdW1lbnRFbGVtZW50IGxvZ0VudHJ5ID0gKERvY3VtZW50RWxlbWVudCkgZW50cnlEZXRhaWw7Ci0gICAgICBwdy5wcmludGxuKCJ2YWx1ZT1cIiIgKyBsb2dFbnRyeS50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKSArICJcIiAiKTsKLSAgICB9Ci0gICAKLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnkpCi0gIHsKLSAgCXJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lLCBzaG93TG9nRW50cnksIGZhbHNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVuZFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICByZXR1cm4gIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZygiIiwgZmFsc2UpICsgZ2V0RW5kWE1MU3RyaW5nKCIiKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZShTdHJpbmcgbWVzc2FnZUVudHJ5VHlwZU5hbWUpCi0gIHsKLSAgCVN0cmluZyBlbnZlbG9wZUVudHJ5VHlwZU5hbWUgPSBtZXNzYWdlRW50cnlUeXBlTmFtZTsKLSAgCWlmIChtZXNzYWdlRW50cnlUeXBlTmFtZSAhPSBudWxsKQotICAJewotICAJaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9BTlkpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZOwotICAJZWxzZSBpZiAobWVzc2FnZUVudHJ5VHlwZU5hbWUuZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfUkVRVUVTVDsKLSAgCWVsc2UgaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVNQT05TRSkpCi0gIAkJZW52ZWxvcGVFbnRyeVR5cGVOYW1lID0gRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRTsKLSAgCX0KLQotICAJcmV0dXJuIGVudmVsb3BlRW50cnlUeXBlTmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlSZXN1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmZmI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeVJlc3VsdDsKLQotLyoqCi0gKiBSZXN1bHQgZm9yIGEgc3BlY2lmaWMgdGVzdCBhc3NlcnRpb24uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFbnRyeVJlc3VsdEltcGwgaW1wbGVtZW50cyBFbnRyeVJlc3VsdAotewotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXNzZXJ0aW9uUmVzdWx0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjYWRkQXNzZXJ0aW9uUmVzdWx0KG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdExpc3QucHV0KAotICAgICAgYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldElkKCksCi0gICAgICBhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCkKLSAgewotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCkKLSAgewotICAgIHJldHVybiAoQXNzZXJ0aW9uUmVzdWx0KSBhc3NlcnRpb25SZXN1bHRMaXN0LmdldChhc3NlcnRpb25JZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9GYWlsdXJlRGV0YWlsSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdkYzUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgLi4uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGYWlsdXJlRGV0YWlsSW1wbCBpbXBsZW1lbnRzIEZhaWx1cmVEZXRhaWwKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlVHlwZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRGYWlsdXJlTWVzc2FnZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZhaWx1cmVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZVR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSkKLSAgewotICAgIHRoaXMucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZUlEKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlSUQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZUlEbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VJRG4oU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRFbGVtZW50TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmVsZW1lbnRMb2NhdGlvbiA9IGVsZW1lbnRMb2NhdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgeG1sOmxhbmc9XCJlblwiICIpOwotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlVHlwZSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9UWVBFICsgIj1cIiIgKyB0aGlzLnJlZmVyZW5jZVR5cGUgKyAiXCIgIik7Ci0KLSAgICBpZiAodGhpcy5yZWZlcmVuY2VJRCAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgdGhpcy5yZWZlcmVuY2VJRCArICJcIiAiKTsKLQotICAgIC8vIEFERDogTmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0gICAgLyoKLSAgICBpZiAodGhpcy5lbGVtZW50TG9jYXRpb24gIT0gbnVsbCkgewotICAgICAgU3RyaW5nIG5zTmFtZUV4dCA9ICJyZXBvcnRleHQiOwotICAgICAgcHcucHJpbnQoInhtbG5zOiIgKyBuc05hbWVFeHQgKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICIvZXh0L1wiIik7Ci0gICAgICBwdy5wcmludChuc05hbWVFeHQgKyAiOiIgKyBXU0lDb25zdGFudHMuQVRUUl9MSU5FX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpICsgIlwiICIpOwotICAgICAgcHcucHJpbnQobnNOYW1lRXh0ICsgIjoiICsgV1NJQ29uc3RhbnRzLkFUVFJfQ09MVU1OX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0Q29sdW1uTnVtYmVyKCkgKyAiXCIgIik7Ci0gICAgfQotICAgICovCi0KLSAgICAvLyBDbG9zZSBzdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnQoIj4iKTsKLQotICAgIGlmICh0aGlzLmZhaWx1cmVNZXNzYWdlICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKERPTVV0aWxzLmNsZWFuU3RyaW5nKHRoaXMuZmFpbHVyZU1lc3NhZ2UpKTsKLQotICAgIGlmICh0aGlzLmVsZW1lbnRMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAiKTsKLSAgICAgIHB3LnByaW50KHRoaXMuZWxlbWVudExvY2F0aW9uLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1ByZXJlcUZhaWxlZExpc3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMWRlMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUHJlcmVxRmFpbGVkTGlzdDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGFuZCBhY2Nlc3MgdGhlIFByZXJlcXVpc2l0ZSBGYWlsZWQgTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFByZXJlcUZhaWxlZExpc3RJbXBsIGltcGxlbWVudHMgUHJlcmVxRmFpbGVkTGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiB0ZXN0IGFzc2VydGlvbiBJRHMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGlkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0I2FkZFRlc3RBc3NlcnRpb25JRChqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbklEKFN0cmluZyBhc3NlcnRpb25JRCkKLSAgewotICAgIGlkTGlzdC5hZGQoYXNzZXJ0aW9uSUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgaWYgKHRoaXMuaWRMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgCi0gICAgICBwdy5wcmludGxuKCIgICAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgICAgLy8gSW5jbHVkZSBlYWNoIHRlc3QgYXNzZXJ0aW9uIElECi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlkTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgIiAgICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OX0lEICsgIj4iKTsKLSAgICAgICAgcHcucHJpbnQoKFN0cmluZykgaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQgKyAiPiIpOwotICAgICAgfQotCi0gICAgICAvLyBFbmQgZWxlbWVudAotICAgICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIH0KLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Mjk5YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgcmVwb3J0IGFydGlmYWN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0QXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUmVwb3J0QXJ0aWZhY3QKLXsKLSAgLyoqCi0gICAqIEFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCBlbnRyeUxpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmFydGlmYWN0VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I3NldFR5cGUoQXJ0aWZhY3RUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNhZGRFbnRyeShFbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5KEVudHJ5IGVudHJ5KQotICB7Ci0gICAgLy8gQWRkIGVudHJ5Ci0gICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5TGlzdC5wdXQoZW50cnkuZ2V0RW50cnlUeXBlKCkuZ2V0VHlwZU5hbWUoKSwgZW50cnkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QjZ2V0RW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEVudHJ5TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyB0aGlzLmFydGlmYWN0VHlwZS5nZXRUeXBlTmFtZSgpICsgIlwiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRFbmRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgcmV0dXJuICIgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+IjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIGdldFN0YXJ0WE1MU3RyaW5nKCIiKSArIGdldEVuZFhNTFN0cmluZygiIik7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGIxMmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFdTLUkgY29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0SW1wbCBpbXBsZW1lbnRzIFJlcG9ydAotewotICAvKioKLSAgICogUmVwb3J0IGZpbGVuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIExvZyBsb2cgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdW1tYXJ5IGFsbCBwYXNzZWQgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFsbFBhc3NlZCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIFRlc3QgY292ZXJhZ2UuCi0gICAqLwotICAvL3Byb3RlY3RlZCBUZXN0Q292ZXJhZ2UgdGVzdENvdmVyYWdlOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBhcnRpZmFjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIEVudHJ5IGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogQ3VycmVudCBhcnRpZmFjdC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnRBcnRpZmFjdCBjdXJyZW50QXJ0aWZhY3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDdXJyZW50IGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5IGN1cnJlbnRFbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwcmVyZXFUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgY29uZm9ybWFuY2UgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIFJlcG9ydEltcGwoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gR2V0IHJlcG9ydCBVUkkKLSAgICAvL3JldHVybiByZXBvcnRVUkk7Ci0gICAgcmV0dXJuIHRoaXMuZmlsZW5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5maWxlbmFtZSA9IHJlcG9ydFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRSZXBvcnRDb250ZXh0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRDb250ZXh0IGdldFJlcG9ydENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNzZXRSZXBvcnRDb250ZXh0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydENvbnRleHQoUmVwb3J0Q29udGV4dCByZXBvcnRDb250ZXh0KQotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5yZXBvcnRDb250ZXh0ID0gcmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydEFydGlmYWN0IGdldEN1cnJlbnRBcnRpZmFjdCgpCi0gIHsKLSAgICAvLyBSZXR1cm4gYXJ0aWZhY3QKLSAgICByZXR1cm4gdGhpcy5jdXJyZW50QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50QXJ0aWZhY3Qob3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRBcnRpZmFjdChSZXBvcnRBcnRpZmFjdCBhcnRpZmFjdCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJ0aWZhY3QKLSAgICBhcnRpZmFjdExpc3QuYWRkKGFydGlmYWN0KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGFydGlmYWN0Ci0gICAgdGhpcy5jdXJyZW50QXJ0aWZhY3QgPSBhcnRpZmFjdDsKLQotICAgIC8vIFNldCBkZWZhdWx0IHByZXJlcSBwcm9jZXNzaW5nCi0gICAgdGhpcy5wcmVyZXFUeXBlID0gUFJFUkVRX1RZUEVfRU5UUlk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgYXJ0aWZhY3QKLSAgICB0aGlzLmN1cnJlbnRBcnRpZmFjdCA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgc2F2ZWQ/ICBTaG91bGQgaXQgYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgYXJ0aWZhY3Q/Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0Q3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRDdXJyZW50RW50cnkoKQotICB7Ci0gICAgLy8gUmV0dXJuIGVudHJ5Ci0gICAgcmV0dXJuIHRoaXMuY3VycmVudEVudHJ5OwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudmVsb3BlRW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIAotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gZW50cnkKLSAgICBlbnRyeUxpc3QuYWRkKGVudHJ5KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGVudHJ5Ci0gICAgdGhpcy5jdXJyZW50RW50cnkgPSBlbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0RW50cmllcy4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RW50cmllcygpCi0gIHsKLSAgICByZXR1cm4gZW50cnlMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEVudHJ5KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgZW50cnkKLSAgICB0aGlzLmN1cnJlbnRFbnRyeSA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgewotICAgIC8vIEFERDogTmVlZCB0byBrZWVwIGp1c3QgYSBzdW1tYXJ5IAotCi0gICAgLy8gQWRkIHJlc3VsdCB0byBjdXJyZW50IGVudHJ5Ci0gICAgaWYgKGN1cnJlbnRFbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIGN1cnJlbnRFbnRyeS5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBub3QgcGFzc2VkLCB0aGVuIHNldCBzdW1tYXJ5IGZsYWcKLSAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0LmdldFJlc3VsdCgpLmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgewotICAgICAgYWxsUGFzc2VkID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICBBc3NlcnRpb25SZXN1bHQgcmVzdWx0ID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSB3aGVyZSB0byBnZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSAKLSAgICBpZiAodGhpcy5wcmVyZXFUeXBlLmVxdWFscyhQUkVSRVFfVFlQRV9FTlRSWSkpCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvbklkKTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0RW50cnlDb250YWluZXIoKS5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotCi0gICAgLy8gdGhlIGFzc2VydGlvbiByZXN1bHQgaXMgbm90IGZvdW5kIGF0IHRoZSBjdXJyZW50IGVudHJ5LCBnb2luZyB0aHJvdWdoIGFsbCB0aGUgZW50cmllcwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5TGlzdC5zaXplKCk7IGkgKyspCi0gICAgICB7Ci0gICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBlbnRyeUxpc3QuZ2V0KGkpOwotICAgICAgICBpZiAoKHJlc3VsdCA9IGVudHJ5LmdldEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25JZCkpICE9IG51bGwpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IG5ldyBBc3NlcnRpb25SZXN1bHRJbXBsKCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkpOwotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0gICAgLy9lbnRyeS5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKHJlcG9ydENvbnRleHQuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpLmdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKSk7Ci0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbmV3IEVudHJ5Q29udGFpbmVySW1wbCgpOwotICAgIHJldHVybiBlbnRyeUNvbnRhaW5lcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCA9IG5ldyBSZXBvcnRBcnRpZmFjdEltcGwoKTsKLSAgICByZXR1cm4gcmVwb3J0QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVGYWlsdXJlRGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gbmV3IEZhaWx1cmVEZXRhaWxJbXBsKCk7Ci0gICAgcmV0dXJuIGZhaWx1cmVEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0U3VtbWFyeVJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuICgKLSAgICAgIGFsbFBhc3NlZAotICAgICAgICA/IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VECi0gICAgICAgIDogQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0UHJlcmVxVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxVHlwZShTdHJpbmcgcHJlcmVxVHlwZSkKLSAgewotICAgIHRoaXMucHJlcmVxVHlwZSA9IHByZXJlcVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIC8vIEFERDogCi0gICAgcmV0dXJuICJSZXBvcnQ6ICAiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldFN0YXJ0WE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuWE1MX0RFQ0wpOwotICAgIHB3LnByaW50bG4oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBZGRTdHlsZVNoZWV0KCkKLSAgICAgICAgLmdldFN0eWxlU2hlZXRTdHJpbmcoKSk7Ci0KLSAgICAvLyBBZGQgWE1MIGNvbW1lbnQKLSAgICBTdHJpbmcgY29tbWVudDsKLSAgICBpZiAoKGNvbW1lbnQgPSBUZXN0VXRpbHMuZ2V0WE1MQ29tbWVudCgpKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoY29tbWVudCk7Ci0KLSAgICAvLyByZXBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIEVMRU1fTkFNRQotICAgICAgICArICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX05BTUUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHJlcG9ydENvbnRleHQuZ2V0UmVwb3J0VGl0bGUoKQotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgICIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFV0aWxzLmdldFRpbWVzdGFtcCgpCi0gICAgICAgICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfUkVQT1JUCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0xPRwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0NPTU1PTiArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQU5BTFlaRVJfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9YU0kKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfWFNJCi0gICAgICAgICsgIlwiPiIpOwotCi0gICAgLy8gQWRkICBhbmFseXplciB0b29sIGluZm8KLSAgICBwdy5wcmludChyZXBvcnRDb250ZXh0LmdldEFuYWx5emVyKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVuZFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEJ1aWxkIHN1bW1hcnkKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyBnZXRTdW1tYXJ5UmVzdWx0KCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBBREQ6ICBEZXRhaWwgc3VtbWFyeQotICAgIC8qCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FSVElGQUNUX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cInh4eHhcIj4iKTsKLSAgICAKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfU1VNTUFSWSArICI+Iik7Ci0gICAgKi8KLQotICAgIC8vIEVuZCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIiAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU1VNTUFSWSArICI+Iik7Ci0KLSAgICAvLyBFbmQgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBYTUwgc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0RXJyb3JYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQnVpbGQgYW5hbHl6ZXIgZmFpbHVyZQotICAgIHB3LnByaW50bG4oIiAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9BTkFMWVpFUl9GQUlMVVJFICsgIj4iKTsKLQotICAgIC8vIEFkZCBlcnJvciBkZXRhaWwKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcoZXJyb3JEZXRhaWwpKTsKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FOQUxZWkVSX0ZBSUxVUkUgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSArIGdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2VlYjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydFdyaXRlckltcGwKLSAgZXh0ZW5kcyBEb2N1bWVudFdyaXRlckltcGwKLSAgaW1wbGVtZW50cyBSZXBvcnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFJlcG9ydCB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCB1c2luZyB0aGUgd3JpdGVyCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRXcml0ZXIgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgd3JpdGVyIHdhcyBub3Qgc2V0IHByZXZpb3VzbHksIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKHdyaXRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlcG9ydCB3cml0ZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHdyaXRpbmcgcmVwb3J0LiIpOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHJlcG9ydAotICAgIHdyaXRlKHJlcG9ydCwgdGhpcy53cml0ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCwgV3JpdGVyIHdyaXRlcikKLSAgewotICAgIC8vIENyZWF0ZSBwcmludCB3cml0ZXIKLSAgICBuZXcgUHJpbnRXcml0ZXIod3JpdGVyKTsKLQotICAgIC8vIEFERDogV3JpdGUgb3V0IGNvbXBsZXRlIHJlcG9ydAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdG9vbGluZm8ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzMDRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqIDwvY29weXJpZ2h0PgotIyAgKi8KLQotd3NpLnRvb2wudmVyc2lvbj0xLjAuMAotd3NpLnRvb2wucmVsZWFzZS5kYXRlPTIwMDUtMDQtMTUKLXdzaS50b29sLmltcGxlbWVudGVyPUVjbGlwc2Uub3JnIE9yZ2FuaXphdGlvbgotd3NpLnRvb2wubG9jYXRpb249aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0FydGlmYWN0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY2N2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RUeXBlCi17Ci0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlOwotCi0gIHByaXZhdGUgc3RhdGljIE1hcCB0eXBlTWFwOwotICBwcml2YXRlIHN0YXRpYyBMaXN0IGxvZ2dhYmxlQXJ0aWZhY3RUeXBlczsgCi0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRSA9ICJlbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0UgKiovIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVZhbGlkYXRvci5UWVBFX0RJU0NPVkVSWSAqKi8gCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZID0gImRpc2NvdmVyeSI7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0VOVkVMT1BFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9NRVNTQUdFID0KLSAgICBuZXcgQXJ0aWZhY3RUeXBlKFRZUEVfTUVTU0FHRSk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEFydGlmYWN0VHlwZSAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9ERVNDUklQVElPTiA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RFU0NSSVBUSU9OKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBBUlRJRkFDVF9UWVBFX0RJU0NPVkVSWSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RJU0NPVkVSWSk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcml2YXRlIEFydGlmYWN0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgYXJ0aWZhY3QgY2FuIGJlIG91dHB1dCB0byB0aGUgcmVwb3J0LiAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ2dhYmxlKCkgCi0gIHsKLSAgICBpZiAobG9nZ2FibGVBcnRpZmFjdFR5cGVzID09IG51bGwpIAotICAgIHsKLSAgICAgIFN0cmluZyBhcnRpZmFjdEFycmF5W10gPSBXU0lUZXN0VG9vbHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpOwotICAgICAgbG9nZ2FibGVBcnRpZmFjdFR5cGVzID0gbmV3IEFycmF5TGlzdChhcnRpZmFjdEFycmF5Lmxlbmd0aCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFydGlmYWN0QXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgICBsb2dnYWJsZUFydGlmYWN0VHlwZXMuYWRkKGFydGlmYWN0QXJyYXlbaV0pOwotICAgIH0KLSAgICByZXR1cm4gbG9nZ2FibGVBcnRpZmFjdFR5cGVzLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGFydGlmYWN0IHR5cGUgZW52ZWxvcGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGVudmVsb3BlLgotICAgKiBAZGVwcmVjYXRlZCAtLSBhbiBhcnRpZmFjdFR5cGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gZW52ZWxvcGUsIAotICAgKiAgICAgICAgICAgICAgICBtZXNzYWdlLCBkZXNjcmlwdGlvbiBvciBkaXNjb3ZlcnkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VudmVsb3BlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhUWVBFX0VOVkVMT1BFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBtZXNzYWdlcy4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9NRVNTQUdFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBkZXNjcmlwdGlvbi4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9ERVNDUklQVElPTik7Ci0gIH0KLQotICAvKioKLSAgICogSXMgYXJ0aWZhY3QgdHlwZSBkaXNjb3ZlcnkuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGRpc2NvdmVyeS4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEaXNjb3ZlcnkoKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFRZUEVfRElTQ09WRVJZKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgYXJ0aWZhY3QgdHlwZSBhbmQgYWRkcyBpdCB0byB0aGUgcmVnaXN0cnkgbWFwCi0gICAqIEBwYXJhbSBuYW1lIC0gdGhlIGFydGlmYWN0IG5hbWUgKG1hdGNoZXMgYXJ0aWZhY3QgdHlwZSBhdHRyaWJ1dGUgZnJvbSBUQUQpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJBcnRpZmFjdFR5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpCi0gICAgICAgICAgdHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICB0eXBlTWFwLnB1dChuYW1lLCBuZXcgQXJ0aWZhY3RUeXBlKG5hbWUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgYXJ0aWZhY3QgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGFydGlmYWN0IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uCi0gIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgICBTdHJpbmcgdHlwZXNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgcmVnaXN0ZXJBcnRpZmFjdFR5cGUodHlwZXNbaV0pOwotICAgICAgfQotICAgICAgCi0gICAgaWYgKHR5cGVNYXAuY29udGFpbnNLZXkodHlwZU5hbWUpKQotICAgICAgICByZXR1cm4gKEFydGlmYWN0VHlwZSkgdHlwZU1hcC5nZXQodHlwZU5hbWUpOwotICAgICBlbHNlIHsKLSAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBuZXcgYXJ0aWZhY3QgdHlwZSB1c2luZyBpbnZhbGlkIHR5cGUgbmFtZTogIgotICAgICAgICAgICAgICAgICArIHR5cGVOYW1lICsgIi4iKTsKLSAgICAgfQotICB9Ci0gIAotICAgIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGFydGlmYWN0IHR5cGUuCi0gICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBhcnRpZmFjdCB0eXBlIG5hbWUgaXMgaW52YWxpZCBvciBpbmFwcHJvcHJpYXRlLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXJ0aWZhY3RUeXBlIG5ld0FydGlmYWN0VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUgPSBudWxsOwotCi0gICAgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX0RFU0NSSVBUSU9OKSkKLSAgICB7Ci0gICAgICBhcnRpZmFjdFR5cGUgPSBBUlRJRkFDVF9UWVBFX0RFU0NSSVBUSU9OOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX01FU1NBR0UpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfTUVTU0FHRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9FTlZFTE9QRSkpCi0gICAgewotICAgICAgYXJ0aWZhY3RUeXBlID0gQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9ESVNDT1ZFUlkpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfRElTQ09WRVJZOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IGFydGlmYWN0IHR5cGUgdXNpbmcgaW52YWxpZCB0eXBlIG5hbWU6ICIKLSAgICAgICAgICArIHR5cGVOYW1lCi0gICAgICAgICAgKyAiLiIpOwotICAgIH0KLQotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Jhc2ljUnVsZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjMyYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdmFsaWRhdGVzIGJhc2ljIGNvbnN0cnVjdHMgb2YgUkZDIDI2MTYuCi0gKiAKLSAqIEBhdXRob3IgVm9sb2RpbgotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNSdWxlcwotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBDUiA9IDEzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTEYgPSAxMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIFNQID0gMzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBIVCA9IDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBEUSA9IDM0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDUkxGID0gIiIgKyBDUiArIExGOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhcltdIFNFUEFSQVRPUlMgPQotICAgIHsKLSAgICAgICcoJywKLSAgICAgICcpJywKLSAgICAgICc8JywKLSAgICAgICc+JywKLSAgICAgICdAJywKLSAgICAgICcsJywKLSAgICAgICc7JywKLSAgICAgICc6JywKLSAgICAgICdcXCcsCi0gICAgICAnXCInLAotICAgICAgJy8nLAotICAgICAgJ1snLAotICAgICAgJ10nLAotICAgICAgJz8nLAotICAgICAgJz0nLAotICAgICAgJ3snLAotICAgICAgJ30nLAotICAgICAgU1AsCi0gICAgICBIVCB9OwotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlLgotICAgKiAJCU9DVEVUID0gJmx0O2FueSA4LWJpdCBzZXF1ZW5jZSBvZiBkYXRhJmd0OwotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09DVEVUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNIQVIgPSAmbHQ7YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDSEFSKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49IDAgJiYgY2ggPD0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCVVQQUxQSEEgPSAmbHQ7YW55IFVTLUFTQ0lJIHVwcGVyY2FzZSBsZXR0ZXIgIkEiLi4iWiImZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VQQUxQSEEoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlMT0FMUEhBID0gJmx0O2FueSBVUy1BU0NJSSBsb3dlcmNhc2UgbGV0dGVyICJhIi4uInoiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMT0FMUEhBKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJQUxQSEEgPSBVUEFMUEhBIHwgTE9BTFBIQS4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBTFBIQShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChpc0xPQUxQSEEoY2gpIHx8IGlzVVBBTFBIQShjaCkpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJRElHSVQgPSAmbHQ7YW55IFVTLUFTQ0lJIGRpZ2l0ICIwIi4uIjkiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNESUdJVChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNUTCA9ICZsdDthbnkgVVMtQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMzEpIGFuZCBERUwgKDEyNykmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NUTChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuICgoY2ggPj0gMCAmJiBjaCA8PSAzMSkgfHwgY2ggPT0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNSID0gJmx0O1VTLUFTQ0lJIENSLCBjYXJyaWFnZSByZXR1cm4gKDEzKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ1IoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gQ1IpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTEYgPSAmbHQ7VVMtQVNDSUkgTEYsIGxpbmVmZWVkICgxMCkmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMRihjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBMRikgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlTUCA9ICZsdDtVUy1BU0NJSSBTUCwgc3BhY2UgKDMyKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU1AoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gU1ApID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSFQgPSAmbHQ7VVMtQVNDSUkgSFQsIGhvcml6b250YWwtdGFiICg5KSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIKLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0hUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID09IEhUKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCSZsdDsiJmd0OyA9ICZsdDtVUy1BU0NJSSBkb3VibGUtcXVvdGUgbWFyayAoMzQpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb3VibGVRdW90ZShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBEUSkgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlDUkxGID0gQ1IgTEYuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NSTEYoU3RyaW5nIHN0cikKLSAgewotICAgIHJldHVybiBDUkxGLmVxdWFscyhzdHIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTFdTID0gW0NSTEZdIDEqKCBTUCB8IEhUICkuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMV1MoU3RyaW5nIHN0cikKLSAgewotCi0gICAgaW50IGluZGV4ID0gZ2V0TGFzdEluZGV4TFdTKHN0ciwgMCk7Ci0gICAgaWYgKGluZGV4ID09IC0xIHx8IGluZGV4ICE9IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgTFdTIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IExXUy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RJbmRleExXUyhTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKENSTEYsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBlbHNlIGlmIChpbmRleCA9PSBzdGFydEluZGV4KQotICAgICAgaW5kZXggKz0gQ1JMRi5sZW5ndGgoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaW5kZXgrKzsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgVEVYVCBzdHJpbmcuCi0gICAqIFRFWFQgPSAmbHQ7YW55IE9DVEVUIGV4Y2VwdCBDVExzLCBidXQgaW5jbHVkaW5nIExXUyZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IFRFWFQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VEVYVChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleDsKLSAgICBmb3IgKGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgewotICAgICAgaWYgKCFpc09DVEVUKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgaWYgKGlzQ1RMKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RMV1MgPSBnZXRMYXN0SW5kZXhMV1Moc3RyLCBpbmRleCk7Ci0gICAgICAgIGlmIChsYXN0TFdTID09IC0xKQotICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgaW5kZXggPSBsYXN0TFdTIC0gMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSEVYID0gIkEiIHwgIkIiIHwgIkMiIHwgIkQiIHwgIkUiIHwgIkYiIHwgImEiIHwgImIiIHwgImMiIHwgImQiIHwgImUiIHwgImYiIHwgRElHSVQuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSEVYKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKAotICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSB8fCBpc0RJR0lUKGNoKSkKLSAgICAgID8gdHJ1ZQotICAgICAgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXRva2VuID0gMSombHQ7YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycyZndDsuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUb2tlbihTdHJpbmcgc3RyKQotICB7Ci0gICAgaWYgKHN0ci5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBsYXN0IGluZGV4IG9mIHRoZSAidG9rZW4iIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJ0b2tlbiIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VG9rZW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgfQotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXNlcGFyYXRvcnMgPSAiKCIgfCAiKSIgfCAiPCIgfCAiPiIgfCAiQCIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLCIgfCAiOyIgfCAiOiIgfCAiXCIgfCA8Ij4KLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLyIgfCAiWyIgfCAiXSIgfCAiPyIgfCAiPSIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAieyIgfCAifSIgfCBTUCB8IEhULgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NFUEFSQVRPUihjaGFyIGNoKQotICB7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IFNFUEFSQVRPUlMubGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGlmIChjaCA9PSBTRVBBUkFUT1JTW2luZGV4XSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjb21tZW50IiBzdHJpbmcuCi0gICAqIAkJY29tbWVudCA9ICIoIiAqKCBjdGV4dCB8IHF1b3RlZC1wYWlyIHwgY29tbWVudCApICIpIi4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjb21tZW50Ii4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RDb21tZW50KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGlmIChzdHIubGVuZ3RoKCkgPD0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnKCcpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGJvb2xlYW4gYkV4aXQgPSBmYWxzZTsKLSAgICBib29sZWFuIGJRdW90ZWRQYWlyID0gZmFsc2U7Ci0gICAgaW50IGlkeCA9IHN0YXJ0SW5kZXggKyAxOwotICAgIHdoaWxlIChiRXhpdCA9PSBmYWxzZSkKLSAgICB7Ci0gICAgICB3aGlsZSAoYlF1b3RlZFBhaXIgPT0gZmFsc2UpCi0gICAgICB7Ci0gICAgICAgIGlkeCA9IGdldExhc3RDdGV4dChzdHIsIGlkeCk7Ci0gICAgICAgIGlmIChpZHggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBpZHg7Ci0gICAgICAgIGlmICghaXNRdW90ZWRQYWlyKHN0ciwgaWR4IC0gMSkpCi0gICAgICAgICAgYlF1b3RlZFBhaXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgaWR4Kys7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcoJykKLSAgICAgIHsKLSAgICAgICAgZ2V0TGFzdENvbW1lbnQoc3RyLCBpZHgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcpJykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGlkeCArIDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjdGV4dCIgc3RyaW5nLgotICAgKiAJCWN0ZXh0ID0gJmx0O2FueSBURVhUIGV4Y2x1ZGluZyAiKCIgYW5kICIpIiZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdEN0ZXh0KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGlkeCA9IGdldExhc3RURVhUKHN0ciwgc3RhcnRJbmRleCk7Ci0gICAgaW50IGlCcmFja2V0ID0gc3RhcnRJbmRleDsKLSAgICBmb3IgKDsgaUJyYWNrZXQgPCBpZHg7IGlCcmFja2V0KyspCi0gICAgewotICAgICAgaWYgKHN0ci5jaGFyQXQoaUJyYWNrZXQpID09ICcoJyB8fCBzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnKScpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaUJyYWNrZXQgPCBpZHgpCi0gICAgICBpZHggPSBpQnJhY2tldDsKLSAgICByZXR1cm4gaWR4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgInFkdGV4dCIgc3RyaW5nLgotICAgKiAJCXFkdGV4dCA9ICZsdDthbnkgVEVYVCBleGNlcHQgJmx0OyImZ3Q7Jmd0OwotICAgKiBAcGFyYW0gc3RyIHN0cmluZy4KLSAgICogQHBhcmFtIHN0YXJ0SW5kZXggc3RhcnQgaW5kZXguCi0gICAqIEByZXR1cm4gaW50IGFuIGluZGV4IG9mIHRoZSBmaXJzdCBzeW1ib2wgd2hpY2ggaXNuJ3QgInFkdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdFFkdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpZHggPSBnZXRMYXN0VEVYVChzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGludCBpQnJhY2tldCA9IHN0YXJ0SW5kZXg7Ci0gICAgZm9yICg7IGlCcmFja2V0IDwgaWR4OyBpQnJhY2tldCsrKQotICAgIHsKLSAgICAgIGlmIChzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnXCInKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGlCcmFja2V0IDwgaWR4KQotICAgICAgaWR4ID0gaUJyYWNrZXQ7Ci0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXF1b3RlZC1wYWlyID0gIlwiIENIQVIuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcGFyYW0gc3RhcnRJbmRleCBzdGFydCBpbmRleC4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgc3RyIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUXVvdGVkUGFpcihTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gc3RhcnRJbmRleCArIDIKLSAgICAgICYmIHN0ci5jaGFyQXQoc3RhcnRJbmRleCkgPT0gJ1xcJwotICAgICAgJiYgaXNDSEFSKHN0ci5jaGFyQXQoc3RhcnRJbmRleCArIDEpKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJxdW90ZWQtc3RyaW5nIiBzdHJpbmcuCi0gICAqIAkJcXVvdGVkLXN0cmluZyAgPSAoICZsdDsiJmd0OyAqKHFkdGV4dCB8IHF1b3RlZC1wYWlyICkgJmx0OyImZ3Q7ICkKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJxdW90ZWQtc3RyaW5nIi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RRdW90ZWRTdHJpbmcoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotCi0gICAgLy8gaWYgZW5kIGlmIHRoZSBzdHJpbmcKLSAgICBpZiAoc3RhcnRJbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAvLyBpZiB0aGUgYmVnaW4gaXMgbm90ICciJwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSBEUSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXgrKzsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IGdldExhc3RRZHRleHQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGlmIChpc1F1b3RlZFBhaXIoc3RyLCBpbmRleCAtIDEpKQotICAgICAgewotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIGVuZCBpcyBub3QgJyInCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9IERRKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRW50cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMWEzNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW50cnlUeXBlCi17Ci0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlOwotCi0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlTmFtZTsKLQotICAvKioKLSAgICogRW50cnkgdHlwZXMgYWNjZXNzaWJsZSBieSB0eXBlIG5hbWUuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFRyZWVNYXAgZW50cnlUeXBlTWFwOwotCi0gIC8qKgotICAgKiBFbnRyeSB0eXBlIG5hbWVzIGFjY2Vzc2libGUgYnkgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFRyZWVNYXAgZW50cnlUeXBlTmFtZU1hcCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIEVudmVsb3BlIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVFVRVNUID0gInJlcXVlc3RFbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFU1BPTlNFID0gInJlc3BvbnNlRW52ZWxvcGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX0FOWSA9ICJhbnlFbnZlbG9wZSI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFUVVFU1QgPSAicmVxdWVzdE1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9SRVNQT05TRSA9ICJyZXNwb25zZU1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX0FOWSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfQU5ZID0gImFueU1lc3NhZ2UiOwotCi0gIC8qKgotICAgKiBNSU1FIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUlNRV9QQVJUICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NSU1FX1JPT1RfUEFSVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01JTUVfUk9PVF9QQVJUID0gInJvb3QtcGFydCI7Ci0KLSAgLyoqCi0gICAqIERlc2NyaXB0aW9uIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9ERUZJTklUSU9OUyA9ICJkZWZpbml0aW9ucyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCA9ICJpbXBvcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9UWVBFUyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTID0gInR5cGVzIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUID0gInBvcnQiOwotCi0gIC8qKgotICAgKiBEaXNjb3ZlcnkgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfQklORElOR1RFTVBMQVRFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSA9ICJiaW5kaW5nVGVtcGxhdGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfVE1PREVMICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX1RNT0RFTCA9ICJ0TW9kZWwiOwotCi0gIC8qKgotICAgKiBFbnZlbG9wZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNURU5WID0gZ2V0RW50cnlUeXBlKFRZUEVfRU5WRUxPUEVfUkVRVUVTVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVNQT05TRUVOViA9IGdldEVudHJ5VHlwZShUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKTsKLQotICAvKioKLSAgICogTWVzc2FnZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNUID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVFVRVNUKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1JFU1BPTlNFID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVNQT05TRSk7Ci0gIC8vICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0FOWUVOVFJZID0gCi0gIC8vICAgICAgICBuZXcgRW50cnlUeXBlKEFydGlmYWN0VHlwZS5BUlRJRkFDVF9UWVBFX01FU1NBR0VTLCBUWVBFX01FU1NBR0VfQU5ZRU5UUlkpOwotCi0gIC8qKgotICAgKiBEZXNjcmlwdGlvbiBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9ERUZJTklUSU9OUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0lNUE9SVCA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9UWVBFUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX01FU1NBR0UgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX09QRVJBVElPTiA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTik7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9QT1JUVFlQRSA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkcgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1BPUlQgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKTsKLQotICAvKioKLSAgICogRGlzY292ZXJ5IGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkdURU1QTEFURSA9IGdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpIHRvIGFjY2VzcyBFbnRyeVR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIEVOVFJZX1RZUEVfVE1PREVMID0gZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX1RNT0RFTCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBlbnRyeSB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBFbnRyeVR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGVudHJ5IHR5cGUgZXF1YWwgdG8gc3BlY2lmaWVkIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlTmFtZSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbnRyeSB0eXBlIGVxdWFsIHRvIHNwZWNpZmllZCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGVOYW1lLmVxdWFscyh0eXBlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGVOYW1lLmVxdWFscyhlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0QXJ0aWZhY3RUeXBlKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiB0eXBlTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyB2YWxpZCBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBuYW1lIGlzIHZhbGlkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzVmFsaWRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIChlbnRyeVR5cGVNYXAuZ2V0KHR5cGVOYW1lKSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlLgotICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgZW50cnkgdHlwZSBuYW1lIGlzIGludmFsaWQgb3IgaW5hcHByb3ByaWF0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIGlmIChlbnRyeVR5cGVNYXAgPT0gbnVsbCkgewotICAgICAgICBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcnNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKQotICAgICAgICAgICAgICAgIC5nZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZyBlbnRyeVR5cGVzW10gPSB2YWxpZGF0b3JzW2ldLmdldEVudHJ5VHlwZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cnlUeXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICByZWdpc3RlckVudHJ5VHlwZShBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yc1tpXS5nZXRBcnRpZmFjdFR5cGUoKSksIGVudHJ5VHlwZXNbal0pOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBieSB0eXBlIG5hbWUKLSAgICBFbnRyeVR5cGUgZW50cnlUeXBlID0gKEVudHJ5VHlwZSkgZW50cnlUeXBlTWFwLmdldCh0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgYmVjYXVzZSB0eXBlIG5hbWUgaXMgaW52YWxpZDogIgotICAgICAgICAgICsgdHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBlbnRyeSB0eXBlIG5hbWVzIGZvciBhIHNwZWNpZmllZCBhcnRpZmFjdCB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBsaXN0IG9mIGVudHJ5IHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGVudHJ5IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlY3RvciBnZXRFbnRyeVR5cGVOYW1lTGlzdChTdHJpbmcgYXJ0aWZhY3RUeXBlTmFtZSkKLSAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGxpc3QKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPSAoVmVjdG9yKSBlbnRyeVR5cGVOYW1lTWFwLmdldChhcnRpZmFjdFR5cGVOYW1lKTsKLQotICAgIC8vIElmIHRoZSBsaXN0IHdhcyBub3QgZm91bmQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgaWYgKGVudHJ5VHlwZU5hbWVMaXN0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgbmFtZSBsaXN0IGJlY2F1c2UgYXJ0aWZhY3QgdHlwZSBuYW1lIGlzIGludmFsaWQ6ICIKLSAgICAgICAgICArIGFydGlmYWN0VHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZU5hbWVMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIHJlZ2lzdGVyRW50cnlUeXBlKAotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUsCi0gICAgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgRW50cnlUeXBlIGVudHJ5VHlwZSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgdHlwZQotICAgIGVudHJ5VHlwZSA9IG5ldyBFbnRyeVR5cGUoYXJ0aWZhY3RUeXBlLCB0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgZW50cnlUeXBlTWFwID0gbmV3IFRyZWVNYXAoKTsKLSAgICB9Ci0gICAgLy8gQWRkIHRvIGVudHJ5IHR5cGUgbWFwCi0gICAgZW50cnlUeXBlTWFwLnB1dCh0eXBlTmFtZSwgZW50cnlUeXBlKTsKLQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBuYW1lIHZlY3RvciBmb3IgdGhlIGFydGlmYWN0IHR5cGUKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPQotICAgICAgKFZlY3RvcikgZW50cnlUeXBlTmFtZU1hcC5nZXQoYXJ0aWZhY3RUeXBlLmdldFR5cGVOYW1lKCkpOwotICAgIAotICAgIC8vIExhenkgaW5pdGlhbGl6ZQotICAgIGlmIChlbnRyeVR5cGVOYW1lTGlzdCA9PSBudWxsKSB7Ci0gICAgICAgIGVudHJ5VHlwZU5hbWVMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBlbnRyeVR5cGVOYW1lTWFwLnB1dChhcnRpZmFjdFR5cGUuZ2V0VHlwZU5hbWUoKSwgZW50cnlUeXBlTmFtZUxpc3QpOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgdHlwZSBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgZW50cnlUeXBlTmFtZUxpc3QuYWRkKHR5cGVOYW1lKTsKLQotICAgIHJldHVybiBlbnRyeVR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Vycm9yTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTU5N2Y0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBlcnJvciBzdHJpbmdzIGludG8gc3RyaW5nIGJ1ZmZlci4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRXJyb3JMaXN0Ci17Ci0gIHByaXZhdGUgU2V0IGVycm9ycyA9IG5ldyBIYXNoU2V0KCk7Ci0gIHByaXZhdGUgTWVzc2FnZUZvcm1hdCBmb3JtYXQgPSBuZXcgTWVzc2FnZUZvcm1hdCgiezB9OnsxfSIpOwotICBwcml2YXRlIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgZXJyb3IgbGlzdCB1c2luZyBjb250ZW50cyBvZiBhIGxpc3QuCi0gICAqIEBwYXJhbSBsaXN0IGEgTGlzdCBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChMaXN0IGxpc3QpCi0gIHsKLSAgICBhZGQobGlzdCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgZm9ybWF0LgotICAgKiBAcGFyYW0gZiBhIG1lc3NhZ2UgZm9ybWF0LgotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChNZXNzYWdlRm9ybWF0IGYpCi0gIHsKLSAgICBpZiAoZiAhPSBudWxsKQotICAgICAgZm9ybWF0ID0gZjsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgbGlzdC4gCi0gICAqIEBwYXJhbSBsaXN0IGxpc3Qgb2YgZXJyb3JzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKExpc3QgbGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYWRkKChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgZXJyb3IgZGVzY3JpcHRpb24gaW50byB0aGUgbGlzdC4gCi0gICAqIEBwYXJhbSBzMSBhIHN0cmluZy4KLSAgICogQHBhcmFtIHMyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzMSwgU3RyaW5nIHMyKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzMSwgczIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxIGEgUU5hbWUgb2JqZWN0LgotICAgKiBAcGFyYW0gcyBhIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZChRTmFtZSBxLCBTdHJpbmcgcykKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxMSBhIFFOYW1lIG9iamVjdC4KLSAgICogQHBhcmFtIHEyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFFOYW1lIHExLCBRTmFtZSBxMikKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocTEpLCBOdWxsVXRpbC50b1N0cmluZyhxMikpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuLi4KLSAgICogQHBhcmFtIHEgYSBRTmFtZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoUU5hbWUgcSkKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIG51bGwpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBzIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzLCBudWxsKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbGlzdCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIAotICAgKiBAcmV0dXJuIHRoZSBlcnJvciBsaXN0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBJdGVyYXRvciBpdCA9IGVycm9ycy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFpciBwID0gKFBhaXIpIGl0Lm5leHQoKTsKLSAgICAgIGlmIChwLmdldEZpcnN0KCkgIT0gbnVsbCAmJiBwLmdldFNlY29uZCgpICE9IG51bGwpCi0gICAgICAgIGZvcm1hdC5mb3JtYXQobmV3IE9iamVjdFtdIHsgcC5nZXRGaXJzdCgpLCBwLmdldFNlY29uZCgpfSwgYnVmLCBwb3MpOwotICAgICAgZWxzZSBpZiAocC5nZXRGaXJzdCgpICE9IG51bGwpCi0gICAgICAgIGJ1Zi5hcHBlbmQocC5nZXRGaXJzdCgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVmLmFwcGVuZChwLmdldFNlY29uZCgpKTsKLSAgICAgIGlmIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIGJ1Zi5hcHBlbmQoIixcbiIpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBlcnJvciBsaXN0IGlzIGVtcHR5IG9yIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVycm9yIGxpc3QgaXMgZW1wdHkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgewotICAgIHJldHVybiBlcnJvcnMuc2l6ZSgpID09IDA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YjA1MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEEgc2V0IG9mIEhUVFAgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgYnkgTmV0d29yayBXb3JraW5nIEdyb3VwLgotICogaHR0cDovL3d3dy5pZXRmLm9yZy8KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBhdXRob3IgSWx5YSBLYW5vbmlyb3YgKGtpb0Bpc2cuYXhtb3IuY29tKQotICovCi1wdWJsaWMgY2xhc3MgSFRUUENvbnN0YW50cyB7Ci0gIC8vIFRoZSBzdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLSAgLy8gaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChvYnNvbGV0ZXMgUkZDMjA2OCkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVCA9ICJBY2NlcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0VOQ09ESU5HID0gIkFjY2VwdC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UgPSAiQWNjZXB0LUxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9SQU5HRVMgPSAiQWNjZXB0LVJhbmdlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BR0UgPSAiQWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FMTE9XID0gIkFsbG93IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DQUNIRV9DT05UUk9MID0gIkNhY2hlLUNvbnRyb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVCA9ICJDb25uZWN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcgPSAiQ29udGVudC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MRU5HVEggPSAiQ29udGVudC1MZW5ndGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MT0NBVElPTiA9ICJDb250ZW50LUxvY2F0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTUQ1ID0gIkNvbnRlbnQtTUQ1IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBVEUgPSAiRGF0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FVEFHID0gIkVUYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FWFBJUkVTID0gIkV4cGlyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0hPU1QgPSAiSG9zdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NQVRDSCA9ICJJZi1NYXRjaCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9OT05FX01BVENIID0gIklmLU5vbmUtTWF0Y2giOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfUkFOR0UgPSAiSWYtUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9ICJJZi1Vbm1vZGlmaWVkLVNpbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0xBU1RfTU9ESUZJRUQgPSAiTGFzdC1Nb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MT0NBVElPTiA9ICJMb2NhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQVhfRk9SV0FSRFMgPSAiTWF4LUZvcndhcmRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPWFlfQVVUSEVOVElDQVRFID0gIlByb3h5LUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OID0gIlByb3h5LUF1dGhvcml6YXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkFOR0UgPSAiUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1JFVFJZX0FGVEVSID0gIlJldHJ5LUFmdGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NFUlZFUiA9ICJTZXJ2ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVEUgPSAiVEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBSUxFUiA9ICJUcmFpbGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HID0gIlRyYW5zZmVyLUVuY29kaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VQR1JBREUgPSAiVXBncmFkZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9VU0VSX0FHRU5UID0gIlVzZXItQWdlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVkFSWSA9ICJWYXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1ZJQSA9ICJWaWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FSTklORyA9ICJXYXJuaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1dXV19BVVRIRU5USUNBVEUgPSAiV1dXLUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NSU1FX1ZFUlNJT04gPSAiTUlNRS1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRElTUE9TSVRJT04gPSAiQ29udGVudC1EaXNwb3NpdGlvbiI7ICAKLQotICAvLyBIVFRQIEF1dGhlbnRpY2F0aW9uOiBCYXNpYyBhbmQgRGlnZXN0IEFjY2VzcyBBdXRoZW50aWNhdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSEVOVElDQVRJT05fSU5GTyA9ICJBdXRoZW50aWNhdGlvbi1JbmZvIjsKLQotICAvLyBIVFRQIFN0YXRlIE1hbmFnZW1lbnQgTWVjaGFuaXNtCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRfQ09PS0lFID0gIlNldC1Db29raWUiOwotCi0gIC8vIEhUVFAgU3RhdGUgTWFuYWdlbWVudCBNZWNoYW5pc20gKG9ic29sZXRlcyBSRkMyMTA5KQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09PS0lFID0gIkNvb2tpZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT09LSUUyID0gIkNvb2tpZTIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VUX0NPT0tJRTIgPSAiU2V0LUNvb2tpZTIiOwotCi0gIC8vIFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBViA9ICJEQVYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVQVEggPSAiRGVwdGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVTVElOQVRJT04gPSAiRGVzdGluYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUYgPSAiSWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTE9DS19UT0tFTiA9ICJMb2NrLVRva2VuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09WRVJXUklURSA9ICJPdmVyd3JpdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1RBVFVTX1VSSSA9ICJTdGF0dXMtVVJJIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RJTUVPVVQgPSAiVGltZW91dCI7Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChQcm9wb3NlZCBTdGFuZGFyZCAtIHRoZXNlIGZpZWxkLW5hbWVzIGFyZSBub3cgY29uc2lkZXJlZCBvYnNvbGV0ZSkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfQkFTRSA9ICJDb250ZW50LUJhc2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFVCTElDID0gIlB1YmxpYyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1ZFUlNJT04gPSAiQ29udGVudC1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RFUklWRURfRlJPTSA9ICJEZXJpdmVkLUZyb20iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTElOSyA9ICJMaW5rIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VSSSA9ICJVUkkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VFUF9BTElWRSA9ICJLZWVwLUFsaXZlIjsKLQotICAvLyBEZWx0YSBFbmNvZGluZyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BX0lNID0gIkEtSU0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVMVEFfQkFTRSA9ICJEZWx0YS1CYXNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lNID0gIklNIjsKLQotICAvLyBJbnN0YW5jZSBEaWdlc3RzIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJR0VTVCA9ICJEaWdlc3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FOVF9ESUdFU1QgPSAiV2FudC1EaWdlc3QiOwotCi0gIC8vIFNpbXBsZSBIaXQtTWV0ZXJpbmcgYW5kIFVzYWdlLUxpbWl0aW5nIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVRFUiA9ICJNZXRlciI7Ci0KLSAgLy8gVGhlIEtub3duIE5vbi1TdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLQotICAvLyBUcmFuc3BhcmVudCBDb250ZW50IE5lZ290aWF0aW9uIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9GRUFUVVJFUyA9ICJBY2NlcHQtRmVhdHVyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUxURVJOQVRFUyA9ICJBbHRlcm5hdGVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05FR09USUFURSA9ICJOZWdvdGlhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVENOID0gIlRDTiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WQVJJQU5UX1ZBUlkgPSAiVmFyaWFudC1WYXJ5IjsKLQotICAvLyBUaGUgU2FmZSBSZXNwb25zZSBIZWFkZXIgRmllbGQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NBRkUgPSAiU2FmZSI7Ci0KLSAgLy8gSHlwZXIgVGV4dCBDb2ZmZWUgUG90IENvbnRyb2wgUHJvdG9jb2wgKEhUQ1BDUC8xLjApCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfQURESVRJT05TID0gIkFjY2VwdC1BZGRpdGlvbnMiOwotCi0gIC8vIFRoZSBTZWN1cmUgSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOID0gIkNvbnRlbnQtUHJpdmFjeS1Eb21haW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTUFDX0lORk8gPSAiTUFDLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8gPSAiUHJlYXJyYW5nZWQtS2V5LUluZm8iOwotCi0gIC8vIEFuIEhUVFAgRXh0ZW5zaW9uIEZyYW1ld29yawotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19FWFQgPSAiQy1FeHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19NQU4gPSAiQy1NYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19PUFQgPSAiQy1PcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhUID0gIkV4dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQU4gPSAiTWFuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09QVCA9ICJPcHQiOwotCi0gIC8vIFBJQ1MgTGFiZWwgRGlzdHJpYnV0aW9uIExhYmVsIFN5bnRheCBhbmQgQ29tbXVuaWNhdGlvbiBQcm90b2NvbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BJQ1NfTEFCRUwgPSAiUElDUy1MYWJlbCI7Ci0KLSAgLy8gUGxhdGZvcm0gRm9yIFByaXZhY3kgUHJlZmVyZW5jZXMgMS4wCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QM1AgPSAiUDNQIjsKLQotICAvLyBQRVAgLSBhbiBFeHRlbnNpb24gTWVjaGFuaXNtIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUCA9ICJDLVBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUF9JTkZPID0gIkMtUEVQLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUEVQID0gIlBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QRVBfSU5GTyA9ICJQZXAtSW5mbyI7Ci0KLSAgLy8gVGhlIEhUVFAgRGlzdHJpYnV0aW9uIGFuZCBSZXBsaWNhdGlvbiBQcm90b2NvbAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9JRCA9ICJDb250ZW50LUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJRkZFUkVOVElBTF9JRCA9ICJEaWZmZXJlbnRpYWwtSUQiOwotCi0gIC8vIEVTSSBBcmNoaXRlY3R1cmUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DQVBBQklMSVRZID0gIlN1cnJvZ2F0ZS1DYXBhYmlsaXR5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MID0gIlN1cnJvZ2F0ZS1Db250cm9sIjsKLQotICAvLyBTZWxlY3RpbmcgUGF5bWVudCBNZWNoYW5pc21zIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0wgPSAiUHJvdG9jb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0xfSU5GTyA9ICJQcm90b2NvbC1JbmZvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1FVRVJZID0gIlByb3RvY29sLVF1ZXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QgPSAiUHJvdG9jb2wtUmVxdWVzdCI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gb2YgT1BTIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VUUFJPRklMRSA9ICJHZXRQcm9maWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST0ZJTEVPQkpFQ1QgPSAiUHJvZmlsZU9iamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRQUk9GSUxFID0gIlNldFByb2ZpbGUiOwotCi0gIC8vIE5vdGlmaWNhdGlvbiBmb3IgUHJveHkgQ2FjaGVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9GRUFUVVJFUyA9ICJQcm94eS1GZWF0dXJlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTiA9ICJQcm94eS1JbnN0cnVjdGlvbiI7Ci0KLSAgLy8gT2JqZWN0IEhlYWRlciBsaW5lcyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09TVCA9ICJDb3N0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01FU1NBR0VfSUQgPSAiTWVzc2FnZS1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9USVRMRSA9ICJUaXRsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WRVJTSU9OID0gIlZlcnNpb24iOwotCi0gIC8vIEEgUHJvcG9zZWQgRXh0ZW5zaW9uIE1lY2hhbmlzbSBmb3IgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhURU5TSU9OID0gIkV4dGVuc2lvbiI7Ci0KLSAgLy8gV0lSRSAtIFczIElkZW50aWZpZXIgUmVzb2x1dGlvbiBFeHRlbnNpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9PUFRJT05BTCA9ICJPcHRpb25hbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRVNPTFVUSU9OX0hJTlQgPSAiUmVzb2x1dGlvbi1IaW50IjsKLQotICAvLyBEdXBsaWNhdGUgU3VwcHJlc3Npb24gaW4gSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCT0sgPSAiU3ViT0siOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCU1QgPSAiU3Vic3QiOwotCi0gIC8vIFNwZWNpZmljYXRpb24gb2YgSFRUUC8xLjEgT1BUSU9OUyBtZXNzYWdlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09NUExJQU5DRSA9ICJDb21wbGlhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05PTl9DT01QTElBTkNFID0gIk5vbi1Db21wbGlhbmNlIjsKLQotICAvLyBXaWRlbHktdXNlZCB1bmRvY3VtZW50ZWQgaGVhZGVycwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVRVUVTVF9SQU5HRSA9ICJSZXF1ZXN0LVJhbmdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NPTE9SID0gIlVBLUNvbG9yIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NQVSA9ICJVQS1DUFUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfT1MgPSAiVUEtT1MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfUElYRUxTID0gIlVBLVBpeGVscyI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZXJyb3JzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRUZFUlJFUiA9ICJSZWZlcnJlciI7Ci0KLSAgLy8gUHJpdmF0ZSBmZWF0dXJlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09QWVJJR0hUID0gIkNvcHlyaWdodCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UID0gIkNvbnRlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSE9SID0gIkF1dGhvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05UQUNUID0gIkNvbnRhY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VZV09SRFMgPSAiS2V5d29yZHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VORVJBVE9SID0gIkdlbmVyYXRvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9ERVNDUklQVElPTiA9ICJEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT01NQU5EID0gIkNvbW1hbmQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VTU0lPTiA9ICJTZXNzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RZUEUgPSAiVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVNTQUdFID0gIk1lc3NhZ2UiOwotCi0gIC8vIEFiYW5kb25lZCBwcm9wb3NhbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRSA9ICJVbmxlc3MtTW9kaWZpZWQtU2luY2UiOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCB0aGUgc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzIHByZXNlbnRlZCBhcyBMaXN0Ci0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2Ygc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0U3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbGwgdGhlIG5vbi1zdGFuZGFyZGl6ZWQgSFRUUCBoZWFkZXIgbmFtZXMgcHJlc2VudGVkIGFzIExpc3QKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBub24tc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0Tm9uU3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFRfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTFRFUk5BVEVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTkVHT1RJQVRFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVENOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkFSSUFOVF9WQVJZLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TQUZFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BQ0NFUFRfQURESVRJT05TLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFDX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUkVBUlJBTkdFRF9LRVlfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ19FWFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfT1BULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfT1BULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QSUNTX0xBQkVMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QM1AudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfUEVQLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUF9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRElGRkVSRU5USUFMX0lELnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ0FQQUJJTElUWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QUk9UT0NPTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9RVUVSWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0dFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9GSUxFT0JKRUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUUFJPRklMRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPWFlfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NRVNTQUdFX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElUTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9FWFRFTlNJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX09QVElPTkFMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUkVTT0xVVElPTl9ISU5ULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVUJPSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVQlNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTk9OX0NPTVBMSUFOQ0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1JFUVVFU1RfUkFOR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DT0xPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX0NQVS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX09TLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfUElYRUxTLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRUZFUlJFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09QWVJJR0hULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRBQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9LRVlXT1JEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0dFTkVSQVRPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFU0NSSVBUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09NTUFORC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFU1NJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfVU5MRVNTX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCkKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcyBwcmVzZW50ZWQgYXMgTGlzdAotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQUxURVJOQVRFUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05FR09USUFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RDTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1ZBUklBTlRfVkFSWS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU0FGRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0FERElUSU9OUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9QUklWQUNZX0RPTUFJTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BQ19JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19NQU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX09QVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VYVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX09QVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUElDU19MQUJFTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUkVRVUVTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUDNQLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfUEVQX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVAudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RJRkZFUkVOVElBTF9JRC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VSUk9HQVRFX0NBUEFCSUxJVFkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ09OVFJPTC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUVVFUlkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9HRVRQUk9GSUxFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPRklMRU9CSkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1BST1hZX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPWFlfSU5TVFJVQ1RJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT1NULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRV9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RJVExFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkVSU0lPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfRVhURU5TSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9PUFRJT05BTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFU09MVVRJT05fSElOVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VCT0sudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVUJTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09NUExJQU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05PTl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRVFVRVNUX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfQ09MT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DUFUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9PUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX1BJWEVMUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUkVGRVJSRVIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPUFlSSUdIVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BVVRIT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05UQUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfS0VZV09SRFMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9HRU5FUkFUT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERVNDUklQVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTU1BTkQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TRVNTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFlQRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01FU1NBR0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2ZTQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogU2V0IG9mIEhUVFBMIHJlbGF0ZWQgdXRpbGl0aWVzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSFRUUFV0aWxzCi17Ci0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKiBAcGFyYW0gaHR0cFBvc3RIZWFkZXIgIGEgSFRUUCBQT1NUIGhlYWRlci4gCi0gICAqIEByZXR1cm4gdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMU3RyaW5nKFN0cmluZyBodHRwUG9zdEhlYWRlcikKLSAgewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSBudWxsOwotICAgIGludCBzdGFydCwgZW5kOwotCi0gICAgLy8gSWYgUE9TVCwgdGhlbiBjb250aW51ZQotICAgIGlmIChodHRwUG9zdEhlYWRlci5zdGFydHNXaXRoKCJQT1NUIikgfHwgaHR0cFBvc3RIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgLy8gU3RhcnQgYWZ0ZXIgZmlyc3Qgc3BhY2UKLSAgICAgIHN0YXJ0ID0gaHR0cFBvc3RIZWFkZXIuaW5kZXhPZignICcpICsgMTsKLQotICAgICAgLy8gTG9vayBmb3IgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyCi0gICAgICB3aGlsZSAoaHR0cFBvc3RIZWFkZXIuY2hhckF0KHN0YXJ0KSA9PSAnICcpCi0gICAgICAgIHN0YXJ0Kys7Ci0KLSAgICAgIC8vIEZpbmQgbmV4dCBzcGFjZSBjaGFyYWN0ZXIKLSAgICAgIGVuZCA9IGh0dHBQb3N0SGVhZGVyLmluZGV4T2YoJyAnLCBzdGFydCk7Ci0KLSAgICAgIC8vIEdldCBVUkwgc3RyaW5nIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYmV0d2VlbiBzdGFydCBhbmQgZW5kCi0gICAgICB1cmxTdHJpbmcgPSBodHRwUG9zdEhlYWRlci5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0aHJvdyBleGNlcHRpb24KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gUE9TVCBkYXRhICh3YXM6ICIgKyBodHRwUG9zdEhlYWRlciArICIpIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gdXJsU3RyaW5nOwotICB9Ci0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgSFRUUCBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBIVFRQIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRIdHRwSGVhZGVyVG9rZW5zKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBsaW5lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgaW50IGluZGV4ID0gbGluZS5pbmRleE9mKHNlcGFyYXRvcnMpOwotICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGxpbmUubGVuZ3RoKCkgLSAxKQotICAgICAgewotICAgICAgCW5hbWUgPSBsaW5lLnN1YnN0cmluZygwLCBpbmRleCkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgbWFwLnB1dChuYW1lLCBsaW5lLnN1YnN0cmluZyhpbmRleCArIDEpLnRyaW0oKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICgobmFtZSAhPSBudWxsKSAmJiAobGluZS5sZW5ndGgoKT4wKSAmJiBDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGxpbmUuY2hhckF0KDApKSkKLSAgICAgICAgICAgbWFwLnB1dChuYW1lLCBtYXAuZ2V0KG5hbWUpICsgIiAiICsgbGluZS50cmltKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0gIAotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlcgotICAgKiBAcGFyYW0gaHR0cEhlYWRlclN0cmluZyBhbiBIVFRQIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcGFyYW0gc3ViQXR0cmlidXRlTmFtZSBzdWIgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gc3ViIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCAKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBTdHJpbmcgc3ViQXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBnZXQgYXR0cmlidXRlIHZhbHVlCi0gICAgU3RyaW5nIHZhbHVlID0gCi0gICAgICAoU3RyaW5nKSBnZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXJTdHJpbmcsIjoiKS5nZXQoYXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKTsKLSAgICBpZih2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaCBzdWIgYXR0cmlidXRlIHRva2VuCi0gICAgICBpbnQgaWR4USA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj1cIiIpOwotICAgICAgaW50IGlkeCA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj0iKTsKLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBxdW90ZWQKLSAgICAgIGlmIChpZHhRICE9IC0xKSAKLSAgICAgIHsKLSAgICAgICAgaWR4USArPSAoc3ViQXR0cmlidXRlTmFtZSsiPVwiIikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4USA9IHZhbHVlLmluZGV4T2YoIlwiIiwgaWR4USk7Ci0gICAgICAgIGlmIChlSWR4USAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4USwgZUlkeFEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gaWYgYXR0cmlidXRlIGRvIG5vdCBxdW90ZWQKLSAgICAgIGVsc2UgaWYgKGlkeCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWR4ICs9IChzdWJBdHRyaWJ1dGVOYW1lKyI9IikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4ID0gLTE7Ci0gICAgICAgIC8vIGZpbmQgZW5kIHNwYWNlIHNlcGFyYXRvcgotICAgICAgICBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCIgIiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZmluZCBjb21hIHNlcGFyYXRvcgotICAgICAgICBlbHNlIGlmICgoZUlkeCA9IHZhbHVlLmluZGV4T2YoIjsiLCBpZHgpKSAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4LCBlSWR4KTsKLSAgICAgICAgfQotICAgICAgICAvLyB0aGlzIGlzIGxhc3QgYXR0cmlidXRlCi0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBkbyBub3QgZm91bmQKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBnZXQgYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShTdHJpbmcgaHR0cEhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSAKLSAgICAgICAgKFN0cmluZykgZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgLy8gZ2V0IGZpcnN0IHRva2VuCi0gICAgaWYoKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwpICYmIChhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikgIT0gLTEpKSB7Ci0gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnN1YnN0cmluZygwLCBhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikpOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2YTQ5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0h0dHBIZWFkZXJzVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBzdW4ubmV0Lnd3dy5NZXNzYWdlSGVhZGVyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIEhUVFAgcmVxdWVzdCBoZWFkZXJzIGFib3V0IFJGQyAyNjE2LgotICoKLSAqIEBhdXRob3IgVm9sb2RpbiAKLSAqLwotcHVibGljIGNsYXNzIEh0dHBIZWFkZXJzVmFsaWRhdG9yCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BTExPVyA9ICJBbGxvdyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9FTkNPRElORyA9ICJDb250ZW50LUVuY29kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTEVOR0hUID0gIkNvbnRlbnQtTGVuZ3RoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OID0gIkNvbnRlbnQtTG9jYXRpb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQSVJFUyA9ICJFeHBpcmVzIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MQVNUX01PRElGSUVEID0gIkxhc3QtTW9kaWZpZWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NBQ0hFX0NPTlRST0wgPSAiQ2FjaGUtQ29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVElPTiA9ICJDb25uZWN0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9EQVRFID0gIkRhdGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQUlMRVIgPSAiVHJhaWxlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcgPSAiVHJhbnNmZXItRW5jb2RpbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVBHUkFERSA9ICJVcGdyYWRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WSUEgPSAiVmlhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9XQVJOSU5HID0gIldhcm5pbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUID0gIkFjY2VwdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9FTkNPRElORyA9ICJBY2NlcHQtRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRSA9ICJBY2NlcHQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9IT1NUID0gIkhvc3QiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lGX01BVENIID0gIklmLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfTk9ORV9NQVRDSCA9ICJJZi1Ob25lLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9SQU5HRSA9ICJJZi1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9Ci0gICAgIklmLVVubW9kaWZpZWQtU2luY2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01BWF9GT1JXQVJEUyA9ICJNYXgtRm9yd2FyZHMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04gPQotICAgICJQcm94eS1BdXRob3JpemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SQU5HRSA9ICJSYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9URSA9ICJURSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVNFUl9BR0VOVCA9ICJVc2VyLUFnZW50IjsKLQotICAvKioKLSAgICogVGhpcyBjbGFzcyBjaGVja3MgZS1tYWlsIHN0cmluZyBhYm91dCBSRkMgODIyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBNYWlsYm94VmFsaWRhdG9yCi0gIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gU1BFQ0lBTCA9Ci0gICAgICB7ICcoJywgJyknLCAnPCcsICc+JywgJ0AnLCAnLCcsICc7JywgJzonLCAnXFwnLCAnXCInLCAnLicsICdbJywgJ10nIH07Ci0KLSAgICAvKioKLSAgICAJKiBWYWxpZGF0ZXMgZS1tYWlsIHN0cmluZy4KLSAgICAqIEBwYXJhbSBtYWlsYm94IGUtbWFpbCBzdHJpbmcKLSAgICAqIEByZXR1cm4gYm9vbGVhbiAgdHJ1ZSBpZiBlLW1haWwgc3RyaW5nIGlzIGNvbmZvcm0gdG8gUkZDIDgyMiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICovCi0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVNYWlsYm94KFN0cmluZyBtYWlsYm94KQotICAgIHsKLQotICAgICAgaWYgKCFpc0Z1bGxBZGRyKG1haWxib3gpICYmICFpc1Nob3J0QWRkcihtYWlsYm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTaW1wbGVBZGRyLgotICAgICAqIEBwYXJhbSBtYWlsYm94Ci0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Nob3J0QWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXhBdCA9IG1haWxib3guaW5kZXhPZignQCcpOwotICAgICAgaWYgKGluZGV4QXQgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgaWYgKCFpc0xvY2FsUGFydChtYWlsYm94LnN1YnN0cmluZygwLCBpbmRleEF0KSkKLSAgICAgICAgfHwgIWlzRG9tYWluKG1haWxib3guc3Vic3RyaW5nKGluZGV4QXQgKyAxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWV0aG9kIGlzRG9tYWltLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEb21haW4oU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdWJEb21haW4gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKCFpc0F0b20oc3ViRG9tYWluKSAmJiAhaXNEb21haW5MaXRlcmFsKHN1YkRvbWFpbikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNEb21haW5MaXRlcmFsLgotICAgICAqIEBwYXJhbSBzdWJEb21haW4KLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRG9tYWluTGl0ZXJhbChTdHJpbmcgc3ViRG9tYWluKQotICAgIHsKLSAgICAgIGlmIChnZXRMYXN0RG9tYWluTGl0ZXJhbChzdWJEb21haW4sIDApID09IHN1YkRvbWFpbi5sZW5ndGgoKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdERvbWFpbkxpdGVyYWwoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gICAgewotCi0gICAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgICAgLy9pbnQgbmV3SW5kZXggPSAwOwotCi0gICAgICAvLyBpZiBlbmQgaWYgdGhlIHN0cmluZwotICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIC8vIGlmIHRoZSBiZWdpbiBpcyBub3QgJ1snCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1snKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXgrKzsKLSAgICAgIHdoaWxlICh0cnVlKQotICAgICAgewotICAgICAgICBpbmRleCA9IGdldExhc3REdGV4dChzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgICAgaWYgKEJhc2ljUnVsZXMuaXNRdW90ZWRQYWlyKHN0ciwgaW5kZXggLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIGlmIHRoZSBlbmQgaXMgbm90ICddJwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICddJykKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldExhc3REdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmxlbmd0aCgpID09IHN0YXJ0SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgaW50IGkgPSAwOwotICAgICAgZm9yICg7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoaSk7Ci0gICAgICAgIGkgPSBCYXNpY1J1bGVzLmdldExhc3RJbmRleExXUyhzdHIsIGkpOwotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKGNoKQotICAgICAgICAgIHx8IHN0ci5jaGFyQXQoaSkgPT0gJ1snCi0gICAgICAgICAgfHwgc3RyLmNoYXJBdChpKSA9PSAnXScKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09ICdcXCcKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09IEJhc2ljUnVsZXMuQ1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaSArIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBpICsgMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNMb2NhbFBhcnQuCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMb2NhbFBhcnQoU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNXb3JkKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNXb3JkLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzV29yZChTdHJpbmcgc3RyaW5nKQotICAgIHsKLSAgICAgIGlmICghaXNBdG9tKHN0cmluZykgJiYgIWlzUXVvdGVkU3RyaW5nKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1ldGhvZCBpc0F0b20uCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBdG9tKFN0cmluZyBzdHJpbmcpCi0gICAgewotICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgaXNTcGVjaWFsKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgc3RyaW5nLmNoYXJBdChpKSA9PSAnICcKLSAgICAgICAgICB8fCBCYXNpY1J1bGVzLmlzQ1RMKHN0cmluZy5jaGFyQXQoaSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTcGVjaWFsLgotICAgICAqIEBwYXJhbSBjCi0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NwZWNpYWwoY2hhciBjaCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgU1BFQ0lBTC5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaCA9PSBTUEVDSUFMW2luZGV4XSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNGdWxsQWRkci4KLSAgICAgKiBAcGFyYW0gbWFpbGJveAotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNGdWxsQWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpZiAobWFpbGJveC5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBpbnQgaWR4TFQgPSBtYWlsYm94LmluZGV4T2YoJzwnKTsKLSAgICAgIGlmIChpZHhMVCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAvL2lzIHBocmFzZQotICAgICAgU3RyaW5nIHBocmFzZSA9IG1haWxib3guc3Vic3RyaW5nKDAsIGlkeExUKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGhyYXNlLCAiICIpOwotICAgICAgaWYgKHN0LmNvdW50VG9rZW5zKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1dvcmQoc3QubmV4dFRva2VuKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChwaHJhc2UuY2hhckF0KHBocmFzZS5sZW5ndGgoKSAtIDEpICE9IEJhc2ljUnVsZXMuU1ApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9pcyByb3V0ZS1hZGRyCi0gICAgICBTdHJpbmcgcm91dGVBZGRyID0gbWFpbGJveC5zdWJzdHJpbmcoaWR4TFQgKyAxKTsKLSAgICAgIC8vIGlzIHJvdXRlCi0gICAgICBpbnQgaWR4VHdvU3BvdCA9IHJvdXRlQWRkci5pbmRleE9mKCc6Jyk7Ci0gICAgICBpZiAoaWR4VHdvU3BvdCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0Um91dGVBZGRyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHJvdXRlQWRkci5zdWJzdHJpbmcoMCwgaWR4VHdvU3BvdCksICIsIik7Ci0gICAgICAgIGlmICghc3RSb3V0ZUFkZHIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0Um91dGVBZGRyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEb21haW4oc3RSb3V0ZUFkZHIubmV4dFRva2VuKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vaXMgYWRkciBzcGVjCi0gICAgICBpbnQgaWR4R1QgPSByb3V0ZUFkZHIuaW5kZXhPZignPicpOwotICAgICAgaWYgKGlkeEdUID09IC0xIHx8IGlkeEdUICE9IChyb3V0ZUFkZHIubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpZiAoIWlzU2hvcnRBZGRyKHJvdXRlQWRkci5zdWJzdHJpbmcoaWR4VHdvU3BvdCArIDEsIGlkeEdUKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIEhUVFAgcmVxdWVzdCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIHJlcXVlc3QgaGVhZGVycwotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgYWxsIEhUVFAgaGVhZGVycyBzdHJpbmcgaXMgY29uZm9ybSB0byBSRkMgMjYxNiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMoU3RyaW5nIGhlYWRlcnMpCi0gIHsKLQotICAgIE1lc3NhZ2VIZWFkZXIgbWggPSBuZXcgTWVzc2FnZUhlYWRlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1oLnBhcnNlSGVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShoZWFkZXJzLmdldEJ5dGVzKCkpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOwotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0KLSAgICBoZWFkZXIgPSBtaC5nZXRLZXkoMCk7Ci0gICAgaWYgKGhlYWRlciAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsdWUgPSBtaC5nZXRWYWx1ZSgwKTsKLSAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vbWV0aG9kCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiAiKTsKLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RyID0gc3QubmV4dFRva2VuKCk7Ci0gICAgaWYgKCFpc1VSSShzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotICAgIGlmICghaXNIVFRQVmVyc2lvbihzdHIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGkgPSAxOwotICAgIHRyeQotICAgIHsKLSAgICAgIHdoaWxlICgoaGVhZGVyID0gbWguZ2V0S2V5KGkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICB2YWx1ZSA9IG1oLmdldFZhbHVlKGkpOwotICAgICAgICBpKys7Ci0KLSAgICAgICAgLy8gaXMgbWVzc2FnZS1oZWFkZXIgdG9rZW4KLSAgICAgICAgaWYgKCFpc1Rva2VuKGhlYWRlcikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vLS0tLSBlbnRpdHktaGVhZGVycwotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BTExPVykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRBbGxvdyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9UWVBFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNNZWRpYVR5cGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05URU5UX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0xhbmd1YWdlVGFnKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9MRU5HSFQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0RpZGdpdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTE9DQVRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1VSSSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9SQU5HRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDb250ZW50UmFuZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0VYUElSRVMpCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfTEFTVF9NT0RJRklFRCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8tLS0tIGdlbmVyYWwtaGVhZGVycwotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ0FDSEVfQ09OVFJPTCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDYWNoZUNvbnRyb2wodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05ORUNUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfREFURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1BSQUdNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzUHJhZ21hRGVyZWN0aXZlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9UUkFJTEVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1RyYW5zZmVyQ29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VUEdSQURFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVwZ3JhZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1ZJQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRWaWEodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1dBUk5JTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkV2FybmluZyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0NIQVJTRVQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0Q2hhclNldCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdEVuY29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0FVVEhPUklaQVRJT04pCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfUFJPWFlfQVVUSE9SSVpBVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzQ3JlZGVudGlhbHModmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9FWFBFQ1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0V4cGVjdGF0aW9uKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9GUk9NKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghTWFpbGJveFZhbGlkYXRvci52YWxpZGF0ZU1haWxib3godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX01BVENIKQotICAgICAgICAgIHx8IGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX05PTkVfTUFUQ0gpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkSWZNYXRjaCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNFbnRpdHlUYWcodmFsdWUpICYmICFpc0hUVFBEYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLS0tCQkJCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9VTk1PRElGSUVEX1NJTkNFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNIVFRQRGF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX01BWF9GT1JXQVJEUykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VU0VSX0FHRU5UKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVzZXJBZ2VudCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVEUpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkVEUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNSYW5nZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0hPU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0hvc3QodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9SRUZFUkVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNVUkkodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRJZk1hdGNoLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRJZk1hdGNoKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICgiKiIuZXF1YWxzKHZhbHVlLnRyaW0oKSkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoIWlzRW50aXR5VGFnKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVXBncmFkZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXBncmFkZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZENhY2hlQ29udHJvbC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQ2FjaGVDb250cm9sKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKCc9Jyk7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICB7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBzdHJBZnRlckVxID0gc3RyLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyQWZ0ZXJFcSkgJiYgIWlzUXVvdGVkU3RyaW5nKHN0ckFmdGVyRXEpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSFRUUFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUFZlcnNpb24oU3RyaW5nIHN0cikKLSAgewotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIkhUVFAvIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IGlkeCA9ICJIVFRQLyIubGVuZ3RoKCk7Ci0KLSAgICBpbnQgaWR4MiA9IHN0ci5pbmRleE9mKCIuIik7Ci0KLSAgICAvLyAxKkRJR0lUCi0gICAgU3RyaW5nIHMgPSBzdHIuc3Vic3RyaW5nKGlkeCwgaWR4Mik7Ci0gICAgaWYgKCFpc0RpZGdpdChzKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHMgPSBzdHIuc3Vic3RyaW5nKGlkeDIgKyAxKTsKLSAgICBpZiAoIWlzRGlkZ2l0KHMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRXYXJuaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRXYXJuaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaWYgKHN0ci5sZW5ndGgoKSA+IDMgfHwgIWlzRGlkZ2l0KHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvL2lmKCFzdC5oYXNNb3JlVG9rZW5zKCkpIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oIiIpLnRyaW0oKTsKLSAgICAvLz8/PwotCi0gICAgaW50IGxhc3RRdW90ZWRTdHJpbmcgPSBCYXNpY1J1bGVzLmdldExhc3RRdW90ZWRTdHJpbmcoc3RyLCAwKTsKLSAgICBpZiAobGFzdFF1b3RlZFN0cmluZyA9PSBzdHIubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgZGF0YSA9IHN0ci5zdWJzdHJpbmcobGFzdFF1b3RlZFN0cmluZyk7Ci0gICAgICBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGgoKSkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKHN0ci5jaGFyQXQoMCkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFpc0hUVFBEYXRlKHN0ci5zdWJzdHJpbmcoMSwgZGF0YS5sZW5ndGgoKSAtIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVmlhLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRWaWEoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotCi0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICIgIik7Ci0KLSAgICAgIC8vIHByb3RvY29sL3ZlcnNpb24KLSAgICAgIHN0ciA9IHN0Mi5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgIHx8ICFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9ob3N0Ci0gICAgICBzdHIgPSBzdDIubmV4dFRva2VuKCk7Ci0gICAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgLy9jb21tZW50Ci0gICAgICBpZiAoc3QyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgc3RyID0gc3QyLm5leHRUb2tlbigiIik7Ci0gICAgICAgIGlmICghaXNDb21tZW50KHN0ci50cmltKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSG9zdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0hvc3QoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXcgVVJMKCJodHRwOi8vIiArIHZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRBbGxvdy4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWxsb3coU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRDb250ZW50UmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZENvbnRlbnRSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIHN0ciA9IHZhbHVlLnN1YnN0cmluZygiYnl0ZXMiLmxlbmd0aCgpKS50cmltKCk7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGJ5dGVSYW5nZSA9IHN0ci5zdWJzdHJpbmcoMCwgaWR4KTsKLSAgICBpbnQgaWR4MiA9IGJ5dGVSYW5nZS5pbmRleE9mKCItIik7Ci0gICAgaWYgKGlkeDIgPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFieXRlUmFuZ2UuZXF1YWxzKCIqIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXNEaWRnaXQoYnl0ZVJhbmdlLnN1YnN0cmluZygwLCBpZHgyKSkKLSAgICAgICAgfHwgIWlzRGlkZ2l0KGJ5dGVSYW5nZS5zdWJzdHJpbmcoaWR4MiArIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzPSIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHJCeXRlUmFuZ2UgPSB2YWx1ZS5zdWJzdHJpbmcoImJ5dGVzPSIubGVuZ3RoKCkpOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJCeXRlUmFuZ2UsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLSIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKGlkeCA9PSAwKQotICAgICAgewotICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKGlkeCA9PSAoc3RyLmxlbmd0aCgpIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCgpIC0gMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICAgfHwgIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFRFLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRURShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoc3QuZXF1YWxzKCJ0cmFpbGVycyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzTGFuZ3VhZ2VSYW5nZShzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNMYW5ndWFnZVJhbmdlKF8xKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFVzZXJBZ2VudC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXNlckFnZW50KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikgJiYgIWlzQ29tbWVudChzdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNDb21tZW50LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbW1lbnQoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChCYXNpY1J1bGVzLmdldExhc3RDb21tZW50KHN0ciwgMCkgIT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdExhbmd1YWdlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNUb2tlbihfMSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzQWNjZXB0UGFyYW1zKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNMYW5ndWFnZVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0xhbmd1YWdlUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICItIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0RW5jb2RpbmcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdEVuY29kaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgXzEgPSBzdHIuc3Vic3RyaW5nKDAsIGlkeCkudHJpbSgpOwotICAgICAgICBTdHJpbmcgXzIgPSBzdHIuc3Vic3RyaW5nKGlkeCArIDEpLnRyaW0oKTsKLQotICAgICAgICBpZiAoKCFpc1Rva2VuKF8xKSAmJiAhXzEuZXF1YWxzKCIqIikpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1FBbmRRVmFsdWUoXzIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0Q2hhclNldC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0Q2hhclNldChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyKSAmJiAhc3RyLmVxdWFscygiKiIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCghaXNUb2tlbihfMSkgJiYgIV8xLmVxdWFscygiKiIpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZEFjY2VwdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiOyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc01lZGlhUmFuZ2Uoc3RyKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNNZWRpYVJhbmdlKHN0ci5zdWJzdHJpbmcoMCwgaWR4KS50cmltKCkpCi0gICAgICAgICAgfHwgIWlzQWNjZXB0UGFyYW1zKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkudHJpbSgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNBY2NlcHRQYXJhbXMuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNjZXB0UGFyYW1zKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJpbmcsICI7Iik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmVxdWFscygicSIpIHx8ICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChzdHIuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCJxIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNRVmFsdWUoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyV2l0aG91dFZhbHVlKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3RyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRQW5kUVZhbHVlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1FBbmRRVmFsdWUoU3RyaW5nIHN0cikKLSAgewotICAgIHN0ciA9IHN0ci50cmltKCk7Ci0gICAgaWYgKCFzdHIudHJpbSgpLnN0YXJ0c1dpdGgoInE9IikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFpc1FWYWx1ZShzdHIuc3Vic3RyaW5nKCJxPSIubGVuZ3RoKCkpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRVmFsdWUuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUVZhbHVlKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCIuIik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoISIwIi5lcXVhbHMoc3RyaW5nKSAmJiAhIjEiLmVxdWFscyhzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyRGlnID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmIChzdHJEaWcubGVuZ3RoKCkgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIwIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNEaWRnaXQoc3RyRGlnKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIxIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyRGlnLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc3RyRGlnLmNoYXJBdChpKSAhPSAnMCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNNZWRpYVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaWR4KSkgJiYgIXN0ci5zdWJzdHJpbmcoMCwgaWR4KS5lcXVhbHMoIioiKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzRW50aXR5VGFnLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRW50aXR5VGFnKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaW50IGlkeCA9IDA7Ci0gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIlcvIikpCi0gICAgICBpZHggPSAyOwotICAgIGlmICghaXNRdW90ZWRTdHJpbmcodmFsdWUuc3Vic3RyaW5nKGlkeCkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0V4cGVjdGF0aW9uLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRXhwZWN0YXRpb24oU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiMTAwLWNvbnRpbnVlIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQ3JlZGVudGlhbHMuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDcmVkZW50aWFscyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiICIpOwotICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHBhcmFtID0gc3QubmV4dFRva2VuKCIsIik7Ci0gICAgICBpZiAoIWlzUGFyYW1ldGVyKHBhcmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQcm9kdWN0LgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUHJvZHVjdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLyIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICB8fCAhaXNUb2tlbih2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1RyYW5zZmVyQ29kaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVHJhbnNmZXJDb2RpbmcoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiY2h1bmtlZCIpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIjsiKTsKLSAgICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQYXJhbWV0ZXIuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUGFyYW1ldGVyKFN0cmluZyBzdHJpbmcpCi0gIHsKLQotICAgIC8vIGNoZWNrIHBhcmFtZXRlcgkKLSAgICBpbnQgaWR4ID0gc3RyaW5nLmluZGV4T2YoIj0iKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBwYXJWYWx1ZSA9IHN0cmluZy5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgaWYgKCFpc1Rva2VuKHBhclZhbHVlKSAmJiAhaXNRdW90ZWRTdHJpbmcocGFyVmFsdWUpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUGFyYW1ldGVyV2l0aG91dFZhbHVlLgotICAgKiBAcGFyYW0gc3RyaW5nCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BhcmFtZXRlcldpdGhvdXRWYWx1ZShTdHJpbmcgc3RyaW5nKQotICB7Ci0KLSAgICAvLyBjaGVjayBwYXJhbWV0ZXIJCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCAhPSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgU3RyaW5nIHBhclZhbHVlID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmICghaXNUb2tlbihwYXJWYWx1ZSkgJiYgIWlzUXVvdGVkU3RyaW5nKHBhclZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ByYWdtYURlcmVjdGl2ZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByYWdtYURlcmVjdGl2ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUuZXF1YWxzKCJuby1jYWNoZSIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGludCBpZHggPSB2YWx1ZS5pbmRleE9mKCI9Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSB2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgICAgIGlmIChpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICYmIChpc1Rva2VuKHN0cikgfHwgaXNRdW90ZWRTdHJpbmcoc3RyKSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0hUVFBEYXRlLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUERhdGUoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICBTdHJpbmcgcmZjMTEyM19kYXRlID0gIkVFRSwgZGQgTU1NIHl5eXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyByZmM4NTBfZGF0ZSA9ICJFRUVFLCBkZC1NTU0teXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyBhc2N0aW1lX2RhdGUgPSAiRUVFIE1NTSBkIGhoOm1tOnNzIHl5eXkiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChyZmMxMTIzX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocmZjODUwX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoYXNjdGltZV9kYXRlLCBMb2NhbGUuVVMpOwotICAgICAgaWYgKHNkZi5wYXJzZSh2YWx1ZSkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNVUkkuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNVUkkoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTCh2YWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdCIgKyB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzTGFuZ3VhZ2VUYWcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMYW5ndWFnZVRhZyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLSIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIGlzOEFMUEhBKHZhbHVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEodmFsdWUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICAgIHx8ICFpczhBTFBIQSh2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpczhBTFBIQS4KLSAgICogQHBhcmFtIHN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXM4QUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiA4IHx8ICFpc0FMUEhBKHN0cmluZykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQUxQSEEuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgaWYgKCFCYXNpY1J1bGVzLmlzQ0hBUihzdHJpbmcuY2hhckF0KGkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RpZGdpdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RpZGdpdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjaGFyW10gY2hzID0gdmFsdWUudG9DaGFyQXJyYXkoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNocy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoY2hzW2ldIDwgJzAnIHx8IGNoc1tpXSA+ICc5JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc01lZGlhVHlwZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiOyIpOwotICAgIFN0cmluZyBtZWRpYVR5cGUgPSBzdC5uZXh0VG9rZW4oKTsKLQotICAgIGludCBpZHggPSBtZWRpYVR5cGUuaW5kZXhPZigiLyIpOwotICAgIGlmICghaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICB8fCAhaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKGlkeCArIDEpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXIoc3QubmV4dFRva2VuKCI7IikudHJpbSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRdW90ZWRTdHJpbmcuCi0gICAqIEBwYXJhbSBwYXJWYWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNRdW90ZWRTdHJpbmcoU3RyaW5nIHBhclZhbHVlKQotICB7Ci0gICAgaWYgKEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhwYXJWYWx1ZSwgMCkgIT0gcGFyVmFsdWUubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNUb2tlbi4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Rva2VuKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHJldHVybiBCYXNpY1J1bGVzLmlzVG9rZW4odmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9KYXZhRW5jb2RpbmcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MzUzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotIyMgSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotIyMgUHJvcGVydHkgZmlsZSB1c2VkIHRvIGdldCBKYXZhVk0gc3VwcG9ydGVkIGNoYXJhY3RlciBlbmNvZGluZy4KLQotSVNPODg1OV8xPUlTTzg4NTlfMSAKLUlTTzg4NTktMT1JU084ODU5XzEgCi11dGY4PVVURjggCi11dGYtOD1VVEY4IAotVVRGLTg9VVRGOCAKLXV0ZjE2PVVURi0xNiAKLXV0Zi0xNj1VVEYtMTYgCi1VVEYxNj1VVEYtMTYgCi0KLSMjIAotU2hpZnRfSklTPVdpbmRvd3MtMzFKCi0KLU1TOTMyPVdpbmRvd3MtMzFKCi0jU0pJUz1TaGlmdF9KSVMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01JTUVDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTRiNGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLS8qKgotICogQSBzZXQgb2YgSFRUUCB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCBieSBOZXR3b3JrIFdvcmtpbmcgR3JvdXAuCi0gKiBodHRwOi8vd3d3LmlldGYub3JnLwotICoKLSAqIEB2ZXJzaW9uIDEuMAotICogQGF1dGhvciBJbHlhIEthbm9uaXJvdiAoa2lvQGlzZy5heG1vci5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQ29uc3RhbnRzIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfSUQgPSAiQ29udGVudC1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Y2QzMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotCi0vKioKLSAqIFNldCBvZiBIVFRQTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIE1JTUVVdGlscwotewotCi0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgTUlNRSBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBtaW1lSGVhZGVyU3RyaW5nIGFuIE1JTUUgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIE1JTUUgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBNSU1FIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRNaW1lSGVhZGVyVG9rZW5zKFN0cmluZyBtaW1lSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihtaW1lSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIGxpbmUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2Yoc2VwYXJhdG9ycyk7Ci0gICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgbGluZS5sZW5ndGgoKSAtIDEpCi0gICAgICB7Ci0gICAgICAgIG1hcC5wdXQobGluZS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRvVXBwZXJDYXNlKCksIGxpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIKLSAgICogQHBhcmFtIG1pbWVIZWFkZXJTdHJpbmcgYW4gTUlNRSBoZWFkZXIgc3RyaW5nLgotICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICogQHBhcmFtIHN1YkF0dHJpYnV0ZU5hbWUgc3ViIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGdldCBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWltZUhlYWRlclN1YkF0dHJpYnV0ZShTdHJpbmcgbWltZUhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSwgU3RyaW5nIHN1YkF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZQotICAgIFN0cmluZyB2YWx1ZSA9IAotICAgICAgKFN0cmluZykgZ2V0TWltZUhlYWRlclRva2VucyhtaW1lSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgaWYodmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBzZWFyY2ggc3ViIGF0dHJpYnV0ZSB0b2tlbgotICAgICAgaW50IGlkeFEgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9XCIiKTsKLSAgICAgIGludCBpZHggPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9Iik7Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgaXMgcXVvdGVkCi0gICAgICBpZiAoaWR4USAhPSAtMSkgCi0gICAgICB7Ci0gICAgICAgIGlkeFEgKz0gKHN1YkF0dHJpYnV0ZU5hbWUrIj1cIiIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeFEgPSB2YWx1ZS5pbmRleE9mKCJcIiIsIGlkeFEpOwotICAgICAgICBpZiAoZUlkeFEgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeFEsIGVJZHhRKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBub3QgcXVvdGVkCi0gICAgICBlbHNlIGlmIChpZHggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeCArPSAoc3ViQXR0cmlidXRlTmFtZSsiPSIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeCA9IC0xOwotICAgICAgICAvLyBmaW5kIGVuZCBzcGFjZSBzZXBhcmF0b3IKLSAgICAgICAgaWYgKChlSWR4ID0gdmFsdWUuaW5kZXhPZigiICIsIGlkeCkpICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgsIGVJZHgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGZpbmQgY29tYSBzZXBhcmF0b3IKLSAgICAgICAgZWxzZSBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCI7IiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdGhpcyBpcyBsYXN0IGF0dHJpYnV0ZQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgZG8gbm90IGZvdW5kCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlcgotICAgKiBAcGFyYW0gbWltZUhlYWRlclN0cmluZyBhbiBNSU1FIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJTdHJpbmcsIAotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gCi0gICAgICAgIChTdHJpbmcpIGdldE1pbWVIZWFkZXJUb2tlbnMobWltZUhlYWRlclN0cmluZywiOiIpLmdldChhdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkpOwotICAgIC8vIGdldCBmaXJzdCB0b2tlbgotICAgIGlmKChhdHRyaWJ1dGVWYWx1ZSAhPSBudWxsKSAmJiAoYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpICE9IC0xKSkgewotICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5zdWJzdHJpbmcoMCwgYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMjhjYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NZXNzYWdlTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhbmQgbWFpbnRhaW5zIGEgbWVzc2FnZSBsaXN0LgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxpc3QKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgTWVzc2FnZUxpc3QuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIGEgcmVzb3VyY2UgYnVuZGxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUxpc3QoU3RyaW5nIHJlc291cmNlQnVuZGxlTmFtZSkKLSAgewotICAgIHRoaXMubWVzc2FnZVJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKHJlc291cmNlQnVuZGxlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBtZXNzYWdlCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZVJlc291cmNlQnVuZGxlLmdldFN0cmluZyhrZXkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgYW5kIGp1c3QgdXNlIGRlZmF1bHQgbWVzc2FnZQotICAgIH0KLQotICAgIGlmIChtZXNzYWdlRGF0YSAhPSBudWxsKQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YTsKLQotICAgIC8vIFJldHVybiBtZXNzYWdlCi0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSAgICAgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHByaW50TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICAvLyBQcmludCBtZXNzYWdlCi0gICAgU3lzdGVtLm91dC5wcmludGxuKGdldE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGF0aWMgZ2V0IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIHJlc291cmNlIGJ1bmRsZSBuYW1lLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgcmVzb3VyY2VCdW5kbGVOYW1lLAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZVJlc291cmNlQnVuZGxlID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCByZXNvdXJjZSBidW5kbGUKLSAgICAgIG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShyZXNvdXJjZUJ1bmRsZU5hbWUpOwotCi0gICAgICAvLyBHZXQgbWVzc2FnZQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIGFuZCBqdXN0IHVzZSBkZWZhdWx0IG1lc3NhZ2UKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGE7Ci0KLSAgICBpZiAoIW1lc3NhZ2UuZW5kc1dpdGgoIi4iKSkKLSAgICAgIG1lc3NhZ2UgKz0gIi4iOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBtZXNzYWdlLgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGVOYW1lICByZXNvdXJjZSBidW5kbGUgbmFtZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyByZXNvdXJjZUJ1bmRsZU5hbWUsCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgLy8gUHJpbnQgbWVzc2FnZQotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgIGdldE1lc3NhZ2UocmVzb3VyY2VCdW5kbGVOYW1lLCBrZXksIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3Y2NhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL051bGxVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgdXRpbGl0eSBjbGFzcyB0byBhdXRvbWF0ZSBudWxsIGNoZWNraW5nLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBOdWxsVXRpbAotewotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0cyBvbiBleGlzdGVuY2UgYW5kIGNvbXBhcmUgd2l0aCA8Y29kZT5lcXVhbHM8L2NvZGU+IG1ldGhvZC4KLSAgICogQHBhcmFtIG8xIGZpcnN0IG9iamVjdC4KLSAgICogQHBhcmFtIG8yIHNlY29uZCBvYmplY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmaXJzdCBvYmplY3QgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvMSwgT2JqZWN0IG8yKQotICB7Ci0gICAgcmV0dXJuICgobzEgPT0gbnVsbCAmJiBvMiA9PSBudWxsKSB8fCAobzEgIT0gbnVsbCAmJiBvMS5lcXVhbHMobzIpKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0IG9uIGV4aXN0ZW5jZSBhbmQgcmV0dXJucyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdpdGggPGNvZGU+dG9TdHJpbmcoKTwvY29kZT4gbWV0aG9kLgotICAgKiBAcGFyYW0gbyBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhPYmplY3QgbykKLSAgewotICAgIHJldHVybiAobyA9PSBudWxsKSA/IG51bGwgOiBvLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL09wZXJhdGlvblNpZ25hdHVyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzlhM2YyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIHVuaXF1ZSBzaWduYXR1cmUgb2Ygb3BlcmF0aW9uLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBPcGVyYXRpb25TaWduYXR1cmUKLXsKLSAgLy8gdGhlIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGlzIHJlcHJlc2VudGVkIGFzIGRvY3VtZW50IHN0eWxlCi0gIC8vIHZpY2UgdmVyc2EgaXMgbm90IGdlbmVyYWxseSB0cnVlCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RvY3VtZW50U3R5bGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gIHByb3RlY3RlZCBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gIHByaXZhdGUgRWxlbWVudCBmaXJzdEJvZHkgPSBudWxsOwotCi0gIC8qKgotICAgKiBDbGFzcyBvcGVyYXRlcyBhcyBjb250YWluZXIgZm9yIG1hdGNoZWQgb3BlcmF0aW9uLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgT3BlcmF0aW9uTWF0Y2gKLSAgewotICAgIGZpbmFsIHByaXZhdGUgU3RyaW5nIHN0eWxlOwotICAgIGZpbmFsIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgZmluYWwgcHJpdmF0ZSBMaXN0IHNpZ25hdHVyZTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBzdHlsZSBvcGVyYXRpb24gc3R5bGUuCi0gICAgICogQHBhcmFtIHNpZ25hdHVyZSBhIHNpZ25hdHVyZS4KLSAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIE9wZXJhdGlvbk1hdGNoKAotICAgICAgU3RyaW5nIHN0eWxlLAotICAgICAgTGlzdCBzaWduYXR1cmUsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgICB7Ci0gICAgICB0aGlzLnN0eWxlID0gc3R5bGU7Ci0gICAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTsKLSAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBHZXRzIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKiBAcmV0dXJuIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9wZXJhdGlvblN0eWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3R5bGU7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEdldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBvYmplY3QuCi0gICAgICogQHJldHVybiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICAgIHsKLSAgICAgIHJldHVybiBvcGVyYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICogQHJldHVybiBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICovCi0gICAgcHVibGljIExpc3QgZ2V0U2lnbmF0dXJlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2lnbmF0dXJlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY2xhc3Mgc2VhcmNoZXMgQmluZGluZ09wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gT3BlcmF0aW9uU2lnYm5hdHVyZS4gCi0gICogQGF1dGhvciBLdWxpawotICAgKi8KLSAgcHVibGljIGZpbmFsIGNsYXNzIFZpc2l0b3IgaW1wbGVtZW50cyBXU0RMVmlzaXRvcgotICB7Ci0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBhcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlNlcnZpY2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU2VydmljZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlR5cGVzLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFR5cGVzIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLklucHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3V0cHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE91dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdJbnB1dCBvYmosCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ091dHB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPdXRwdXQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nRmF1bHQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW1wb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE1lc3NhZ2UsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoUG9ydFR5cGUsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRGVmaW5pdGlvbiwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpIAotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFeHRlbnNpYmlsaXR5RWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBIZWFkZXIsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEhlYWRlckZhdWx0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHJlcXVpcmVkU3R5bGUgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb24gPSBudWxsOwotICAgIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotICAgIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzU09BUEFjdGlvblJlcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAqIENvbnN0cnVjdG9yLgotICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoKQotICAgIHsKLSAgICAgIHN1cGVyKCk7Ci0gICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gcmVxdWlyZWRTdHlsZSByZXF1aXJlZCBzdHlsZS4KLSAgICAgKiBAcGFyYW0gcmVnaXN0cnkgdHlwZXMgcmVnaXN0cnkuCi0gICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoU3RyaW5nIHJlcXVpcmVkU3R5bGUsIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkpCi0gICAgewotICAgICAgdGhpcy5yZXF1aXJlZFN0eWxlID0gcmVxdWlyZWRTdHlsZTsKLSAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0aG9kIHJldHVybnMgbWF0Y2hlZCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRNYXRjaGVkT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gb3BlcmF0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRob2Qgc2V0cyB1cCByZXF1aXJlZCBvcGVyYXRpb24gdG8gYmUgZm91bmQuCi0gICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBpcyBycGMgYW5kIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSByZXF1aXJlZFN0eWxlIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZFN0eWxlKFN0cmluZyByZXF1aXJlZFN0eWxlKQotICAgIHsKLSAgICAgIHRoaXMucmVxdWlyZWRTdHlsZSA9IHJlcXVpcmVkU3R5bGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBTT0FQIEFjdGlvbiBiZSBpbmNsdWRlZCBpbnRvIG9wZXJhdGlvbi4KLSAgICAgKiBzaWduYXR1cmUuCi0gICAgICogQHJldHVybiB0cnVlIGlmIFNPQVAgQWN0aW9uIGlzZCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NPQVBBY3Rpb25SZXF1aXJlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGlzU09BUEFjdGlvblJlcXVpcmVkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgU09BUCBhY3Rpb24gdG8gYmUgaW5jbHVkZWQgaW50byBzaWduYXR1cmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U09BUEFjdGlvblJlcXVpcmVkKCkKLSAgICB7Ci0gICAgICBpc1NPQVBBY3Rpb25SZXF1aXJlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICAgIHNvYXBBY3Rpb24gPSBudWxsOwotICAgICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotICAgICAgaWYgKCFyZXF1aXJlZFN0eWxlLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgZWxzZQotICAgICAgICAvL2lmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCkKLSAgICAgICAgc29hcEFjdGlvbiA9IG9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAvLyBhc3NlcnQgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAoYm9wLmdldE9wZXJhdGlvbigpID09IG51bGwKLSAgICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbAotICAgICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG1zZyA9IGJvcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cyhib3AuZ2V0T3BlcmF0aW9uKCksIG1zZywgYm9keSwgcmVxdWlyZWRTdHlsZSk7Ci0KLSAgICAgIFFOYW1lIGFkZGl0aW9uYWxOYW1lID0gbnVsbDsKLSAgICAgIC8vIGlmIG9wZXJhdGlvbiBpcyBycGMsIGFkZCB0byBwYXJ0cyBxbmFtZSBxaXRoIGZ1bmN0aW9uIG5hbWUKLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhyZXF1aXJlZFN0eWxlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCB8fCBuYW1lc3BhY2UubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgICAvLyBuYW1lc3BhY2Ugc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHNlcnZpY2UgdGFyZ2V0IG5hbWVhcGNlICAgICAgICAgICAgCi0gICAgICAgICAgbmFtZXNwYWNlID0gY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgICBhZGRpdGlvbmFsTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKG5hbWVzcGFjZSwgY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUgb3AgPQotICAgICAgICBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKHBhcnRzLCBudWxsLCByZWdpc3RyeSwgZmFsc2UpOwotCi0gICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIGFkZGl0aW9uYWxOYW1lKTsKLSAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsKQotICAgICAgaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkICYmIHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhzaWduYXR1cmUpKQotICAgICAgewotICAgICAgICAvLyByZXF1aXJlZCBvcGVyYXRpb24gaXMgZm91bmQKLSAgICAgICAgb3BlcmF0aW9uID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShwYXJ0cywgbnVsbCwgcmVnaXN0cnksIHRydWUpOwotICAgICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgICAvL2lmIChzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgIGlmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCAmJiBzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotCi0gICAgICAgIGlmIChvcC5nZXRTaWduYXR1cmUoKS5lcXVhbHMoc2lnbmF0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHJlcXVpcmVkIG9wZXJhdGlvbiBpcyBmb3VuZAotICAgICAgICAgIG9wZXJhdGlvbiA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgT3BlcmF0aW9uU2lnbmF0dXJlIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBkb2MgYSBEb2N1bWVudCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uU2lnbmF0dXJlKERvY3VtZW50IGRvYykKLSAgewotICAgIEVsZW1lbnQgYm9keSA9Ci0gICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgcHJvY2Vzc1BhcnRzKGJvZHksIGZhbHNlKTsKLSAgICBpc0RvY3VtZW50U3R5bGUgfD0gKHNpZ25hdHVyZS5zaXplKCkgPiAxKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBPcGVyYXRpb25TSWduYXR1cmUgZm9yIAotICAgKiBsaXN0IG9mIDxjb2RlPlBhcnQ8L2NvZGU+IG9iamVjdHMgYW5kIGdpdmVuIFdTREwgZG9jdW1lbnQgd2l0aGluIHRoZXNlCi0gICAqIHBhcnRzIGFyZSBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRzIGEgbGlzdCBvZiBQYXJ0IG9iamVjdHMuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVnaXN0cnkgYSB0eXBlcyByZWdpc3RyeS4KLSAgICogQHBhcmFtIHBhcnRpYWwgYSBwYXJ0aWFsIHN0YXR1cy4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgTGlzdCBwYXJ0cywKLSAgICBEb2N1bWVudCB3c2RsRG9jdW1lbnQsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHBhcnRpYWwpCi0gIHsKLSAgICBpZiAocGFydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSAocGFydGlhbCkgPyBwYXJ0LmdldE5hbWUoKSA6IG51bGw7Ci0gICAgICAgIFFOYW1lIHR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotICAgICAgICBRTmFtZSBlbGVtZW50TmFtZSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7Ci0KLSAgICAgICAgLy8gSWYgdHlwZSBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGEgdHlwZSBlbGVtZW50IHdhcyB1c2VkIHNvIGl0IHNob3VsZCBiZSBhbiBSUEMgc3R5bGUgc2lnbmF0dXJlIAotICAgICAgICBpZiAodHlwZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFBhcnQgd3JhcHBlcnMgZG8gbm90IGhhdmUgbmFtZXNwYWNlcyAKLSAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLQotICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGxvY2FsTmFtZSA9IHR5cGVOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZWxlbWVudCBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGl0IHNob3VsZCBiZSBhIGRvY3VtZW50IHN0eWxlIHNpZ25hdHVyZQotICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZXNwYWNlID0gZWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICBpZiAobG9jYWxOYW1lID09IG51bGwpCi0gICAgICAgICAgICBsb2NhbE5hbWUgPSBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpZ25hdHVyZS5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJlY3JlYXRlcyBPcGVyYXRpb25TaWduYXR1cmUgd2l0aCBhc3N1bXB0aW9uIHRoYXQgb3BlcmF0aW9uIGlzCi0gICAqIFJQQy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVJQQ1NpZ25hdHVyZSgpCi0gIHsKLSAgICBpc0NyZWF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RCb2R5ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJvY2Vzc1BhcnRzKGZpcnN0Qm9keSwgdHJ1ZSk7Ci0gICAgaXNEb2N1bWVudFN0eWxlID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHBhcnRzIGFuZCBjcmVhdGVzIG9wZXJhdGlvbiBzaWduYXR1cmUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzUGFydHMoTm9kZSBwYXJlbnQsIGJvb2xlYW4gcHJvY2Vzc1dyYXBwZXIpCi0gIHsKLSAgICBpZiAocGFyZW50ICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotICAgICAgLy8gdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgZmlyc3QgdGFnIGlzIHByb2Nlc3NlZAotICAgICAgYm9vbGVhbiBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICAgIC8vIGl0ZXJhdGUgYWxsIGJvZGllcwotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpc0ZpcnN0ICYmIGZpcnN0Qm9keSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGZpcnN0Qm9keSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gY2hlY2sgc29hcGVudjpmYXVsdAotICAgICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaXNGYXVsdCA9IHRydWU7Ci0gICAgICAgICAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG4uZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG4uZ2V0TG9jYWxOYW1lKCk7Ci0KLSAgICAgICAgICAvKkkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGNvZGUgaXMgaW4gaGVyZSBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSBhdCBhbGwsIHNvIEkgYW0gY29tbWVudGluZyBpdCBvdXQKLSAgICAgICAgICAvLyB0cnkgdG8gZ2V0IHhzaTp0YWcKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgUlBDIHN0eWxlIGRvZXMgbm90IHVzZSB4c2k6dHlwZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgaXNEb2N1bWVudFN0eWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgQXR0ciB4c2lUeXBlID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBTdHJpbmcgeHNpVmFsdWUgPSB4c2lUeXBlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgICAgICBpbnQgaSA9IHhzaVZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgeHNpVmFsdWUuc3Vic3RyaW5nKDAsIGkpKTsKLSAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IHhzaVZhbHVlLnN1YnN0cmluZyhpKzEpOwotICAgICAgICAgICAgICB9IAotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBycGMtbGl0ZXJhbCBhbmQgcHJvY2Vzc2luZyBhIHBhcnQgKG5vdCB0aGUgd3JhcHBlciksIHRoZW4gdGhlIHBhcnQgc2hvdWxkIG5vdCBoYXZlIGEgbmFtZXNwYWNlCi0gICAgICAgICAgLy8gQW5kIGlmIGl0IGRvZXMsIHRoZW4gb25lIG9mIHRoZSB0ZXN0IGFzc2VydGlvbnMgd2lsbCBkZXRlY3QgaXQKLSAgICAgICAgICBpZiAoIWlzRG9jdW1lbnRTdHlsZSAmJiBwcm9jZXNzV3JhcHBlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRTdHlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9FbGVtZW50IGZpcnN0Q2hpbGQgID0gbnVsbDsKLSAgICAgICAgICAgICAgTm9kZSBpdCA9IG4uZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICB3aGlsZSAoaXQgIT0gbnVsbCAmJiAhKGl0IGluc3RhbmNlb2YgRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgaXQgPSBpdC5nZXROZXh0U2libGluZygpOwotICAgICAgICAgICAgICBpZiAoaXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBpdC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBub3JtYWxpemUgbmFtZXNwYWNlcy4gQWxsIGVtcHR5IG5hbWVzcGFjZXMgLT4gbnVsbCAKLSAgICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgICAgICAgLy8gcHV0IHBhcnQgaW50byBzaWduYXR1cmUKLSAgICAgICAgICBzaWduYXR1cmUuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOyAvLyBub3QgZm91bmQgPwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZSBvciBSUEMuIAotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gaXNEb2N1bWVudFN0eWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlIG9yCi0gICAqIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gaXNGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgdGhhdCBvcGVyYXRpb24gc2lnbmF0dXJlIHdhcyBjcmVhdGVkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIHNpZ25hdHVyZSB3YXMgY3JlYXRlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gaXNDcmVhdGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTaWduYXR1cmUoKQotICB7Ci0gICAgcmV0dXJuIHNpZ25hdHVyZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQotICAgKi8KLSAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gc2lnbmF0dXJlLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIE9wZXJhdGlvblNpZ25hdHVyZSkKLSAgICAgIHJldHVybiBzaWduYXR1cmUuZXF1YWxzKCgoT3BlcmF0aW9uU2lnbmF0dXJlKSBvKS5nZXRTaWduYXR1cmUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgbWF0Y2hlcyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIFNPQVAgbWVzc2FnZSByZXF1ZXN0LAotICAgKiBXU0RMIGJpbmRpbmcsIGFuZCBzb2FwQWN0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0TWVzc2FnZSBhbiBTT0FQIG1lc3NhZ2UgcmVxdWVzdC4KLSAgICogQHBhcmFtIHNvYXBBY3Rpb24gYSBzb2FwIGFjdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAqIEBwYXJhbSByZWdpc3RyeSBhIHR5cGVzIHJlZ2lzdHJ5LgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbk1hdGNoIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT3BlcmF0aW9uTWF0Y2ggbWF0Y2hPcGVyYXRpb24oCi0gICAgRG9jdW1lbnQgaW5wdXRNZXNzYWdlLAotICAgIFN0cmluZyBzb2FwQWN0aW9uLAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgcmV0dXJuIG1hdGNoT3BlcmF0aW9uKGlucHV0TWVzc2FnZSwgc29hcEFjdGlvbiwgYmluZGluZywgcmVnaXN0cnksIHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBtYXRjaGVzIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gU09BUCBtZXNzYWdlIHJlcXVlc3QsCi0gICAgICogV1NETCBiaW5kaW5nLCBhbmQgc29hcEFjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gaW5wdXRNZXNzYWdlIFNPQVAgbWVzc2FnZSByZXF1ZXN0LgotICAgICAqIEBwYXJhbSBzb2FwQWN0aW9uIGEgc29hcCBhY3Rpb24uCi0gICAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAgICogQHBhcmFtIHJlZ2lzdHJ5IGEgdHlwZXMgcmVnaXN0cnkuCi0gICAgICogQHBhcmFtIHNvYXBBY3Rpb25SZXF1aXJlZCBtdXN0IHByb2Nlc3MgdGhlIHNvYXBBY3Rpb24gdmFsdWUgZXZlbiBpZiBpdCBpcyBudWxsIAotICAgICAqIEByZXR1cm4gT3BlcmF0aW9uTWF0Y2ggb2JqZWN0LgotICAgICAqLwotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbk1hdGNoIG1hdGNoT3BlcmF0aW9uKAotICAgIERvY3VtZW50IGlucHV0TWVzc2FnZSwKLSAgICBTdHJpbmcgc29hcEFjdGlvbiwKLSAgICBCaW5kaW5nIGJpbmRpbmcsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHNvYXBBY3Rpb25SZXF1aXJlZCkKLSAgewotICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgIE9wZXJhdGlvblNpZ25hdHVyZSBzaWduYXR1cmUgPSBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKGlucHV0TWVzc2FnZSk7Ci0gICAgaWYgKCFzaWduYXR1cmUuaXNDcmVhdGVkKCkpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIC8vIGZpcnN0IG9mIGFsbCBsb29raW5nIGZvciBkb2N1bWVudCBzdHlsZQotICAgIC8vIGJlY2F1c2UgcnBjIHN0eWxlIGlzIHN1YnNldCBvZiBkb2N1bWVudCBzdHlsZSAgCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlLlZpc2l0b3IgcmVzb2x2ZXIgPQotICAgICAgc2lnbmF0dXJlLm5ldyBWaXNpdG9yKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsIHJlZ2lzdHJ5KTsKLQotICAgIC8vIG5vcm1hbGl6ZSBTT0FQQWN0aW9uCi0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbAotICAgICAgJiYgc29hcEFjdGlvbi5sZW5ndGgoKSA+IDEKLSAgICAgICYmIHNvYXBBY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgJiYgc29hcEFjdGlvbi5jaGFyQXQoc29hcEFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHNvYXBBY3Rpb24gPSBzb2FwQWN0aW9uLnN1YnN0cmluZygxLCBzb2FwQWN0aW9uLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAvLyAgICAgIGlmIHNvYXAgYWN0aW9uIFVSSSBwcm9jZXNzaW5nIHJlcXVpcmVkCi0gICAgLy8gaWYgc29hcCBhY3Rpb24gVVJJIHByb2Nlc3NpbmcgcmVxdWlyZWQgCi0gICAgLy8gYW5hbHl6ZSBTT0FQQWN0aW9uIGFmdGVyIHBhcnRzIGJlaW5nIHByb2Nlc3NlZAotICAgIC8vIHB1dCBTT0FQQWN0aW9uIGludG8gc2lnbmF0dXJlCi0gICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsICYmIHNvYXBBY3Rpb24ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzaWduYXR1cmUuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChzb2FwQWN0aW9uUmVxdWlyZWQpCi0gICAgICByZXNvbHZlci5zZXRTT0FQQWN0aW9uUmVxdWlyZWQoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHJlc29sdmVyKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcihyZXNvbHZlcik7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYmluZGluZyk7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKTsKLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwgJiYgIXNpZ25hdHVyZS5pc0RvY3VtZW50U3R5bGUoKSkKLSAgICB7Ci0gICAgICByZXNvbHZlci5zZXRSZXF1aXJlZFN0eWxlKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgc2lnbmF0dXJlLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKGJpbmRpbmcpOwotICAgICAgb3BlcmF0aW9uID0gcmVzb2x2ZXIuZ2V0TWF0Y2hlZE9wZXJhdGlvbigpOwotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IE9wZXJhdGlvbk1hdGNoKAotICAgICAgcmVzb2x2ZXIucmVxdWlyZWRTdHlsZSwKLSAgICAgIHNpZ25hdHVyZS5nZXRTaWduYXR1cmUoKSwKLSAgICAgIHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvUGFpci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWExOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBwYWlyIG9mIHZhbHVlcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFpcgotewotICBmaW5hbCBwcml2YXRlIE9iamVjdCBmaXJzdDsKLSAgZmluYWwgcHJpdmF0ZSBPYmplY3Qgc2Vjb25kOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpcnN0IG9iamVjdAotICAgKiBAcGFyYW0gc2Vjb25kIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBQYWlyKE9iamVjdCBmaXJzdCwgT2JqZWN0IHNlY29uZCkKLSAgewotICAgIHRoaXMuZmlyc3QgPSBmaXJzdDsKLSAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGZpcnN0IG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0Rmlyc3QoKQotICB7Ci0gICAgcmV0dXJuIGZpcnN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgc2Vjb25kIG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0U2Vjb25kKCkKLSAgewotICAgIHJldHVybiBzZWNvbmQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyA9PSBudWxsIHx8ICEobyBpbnN0YW5jZW9mIFBhaXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBhaXIgcCA9IChQYWlyKSBvOwotICAgIHJldHVybiAoCi0gICAgICBOdWxsVXRpbC5lcXVhbHMocC5nZXRGaXJzdCgpLCBmaXJzdCkKLSAgICAgICAgJiYgTnVsbFV0aWwuZXF1YWxzKHAuZ2V0U2Vjb25kKCksIHNlY29uZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCi0gICAqLwotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgewotICAgIGludCBjb2RlID0gMDsKLSAgICBpZiAoZmlyc3QgIT0gbnVsbCkKLSAgICAgIGNvZGUgKz0gZmlyc3QuaGFzaENvZGUoKTsKLSAgICBpZiAoc2Vjb25kICE9IG51bGwpCi0gICAgICBjb2RlICs9IHNlY29uZC5oYXNoQ29kZSgpOwotICAgIHJldHVybiBjb2RlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1NldENvb2tpZTJWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgyZTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIHRoZSBjb29raWVzIGNvbmZvcm0gdG8gUkZDMjk2NS4KLSAqIAotICogQGF1dGhvciBCYWx0YWsKLSAqLwotcHVibGljIGNsYXNzIFNldENvb2tpZTJWYWxpZGF0b3IKLXsKLQotICBwcml2YXRlIFZlY3RvciBjb21tZW50VmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgY29tbWVudFVSTFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGRvbWFpblZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIG1heF9BZ2VWZWN0ID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIFZlY3RvciBwYXRoVmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgcG9ydFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIHZlcnNpb25WZWN0ID0gbmV3IFZlY3RvcigpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBwYXRoID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCByZXNldEZsYWdzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0UGF0aCgpCi0gIHsKLSAgICBwYXRoID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHN0cmluZyBzYXRpc2Z5IHRoZSAiU2V0LUNvb2tpZTIiIGhlYWRlciB2YWx1ZS4KLSAgICogQHBhcmFtIHN0ciBTdHJpbmcgCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTZXRDb29raWUyKFN0cmluZyBzdHIpCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgICAgd2hpbGUgKHRydWUpCi0gICAgICB7Ci0gICAgICAgIG5ld0luZGV4ID0gZ2V0TGFzdENvb2tpZShzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIC8vIHNraXAgc3BhY2VzCi0gICAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0aCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLQotICAgIHJlc2V0UGF0aCgpOwotCi0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICAvLyBmaW5kIHRva2VuCi0gICAgaW50IG5ld0luZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCA9IG5ld0luZGV4OwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGlmIG5vdCAnPScgLSBlcnJvcgotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgLy8gZ2V0IHZhbHVlCi0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IG5ld0luZGV4OwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgIGluZGV4ID0gc2tpcFNwYWNlcyhzdHIsIGluZGV4KTsKLQotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RTZXRDb29raWVBdihzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRMYXN0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWYWx1ZShTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotCi0gICAgaW50IGluZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBzdGFydEluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICBpbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCAhPSBzdGFydEluZGV4KQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RTZXRDb29raWVBdi4KLSAgICogQHBhcmFtIHN0cgotICAgKiBAcGFyYW0gc3RhcnRJbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0TGFzdFNldENvb2tpZUF2KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnQ9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50PSIubGVuZ3RoKCk7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGNvbW1lbnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnRVUkw9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50VVJMPSIubGVuZ3RoKCk7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgbmV3SW5kZXggPSBzdHIuaW5kZXhPZignXCInLCBpbmRleCArIDEpOwotICAgICAgaWYgKG5ld0luZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBuZXcgVVJMKHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCBuZXdJbmRleCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgLy8gZGVidWcgLT4KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4ICsgMSwgbmV3SW5kZXgpOwotICAgICAgY29tbWVudFVSTFZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgbmV3SW5kZXgrKzsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkRpc2NhcmQiLCBpbmRleCkpCi0gICAgewotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXggKyAiRGlzY2FyZCIubGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJEb21haW49IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJEb21haW49Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGRvbWFpblZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiTWF4LUFnZT0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIk1heC1BZ2U9Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBTdHJpbmcgcXFxID0gZ2V0VmFsdWUoc3RyLCBpbmRleCwgbmV3SW5kZXgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEludGVnZXIucGFyc2VJbnQocXFxKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIH0KLSAgICAgIC8vIGRlYnVnIC0+Ci0gICAgICBtYXhfQWdlVmVjdC5hZGQocXFxKTsKLSAgICAgIC8vIGRlYnVnIDwtCi0gICAgICByZXR1cm4gbmV3SW5kZXg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJQYXRoPSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICBpbmRleCArPSAiUGF0aD0iLmxlbmd0aCgpOwotCi0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4LCBuZXdJbmRleCk7Ci0gICAgICBpZiAocGF0aCA9PSBmYWxzZSkKLSAgICAgICAgcGF0aFZlY3QuYWRkKHFxcSk7Ci0gICAgICBwYXRoID0gdHJ1ZTsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlBvcnQiLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlBvcnQiLmxlbmd0aCgpOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc9JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICdcIicpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0UG9ydExpc3Qoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHBvcnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLQotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlNlY3VyZSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICByZXR1cm4gc3RhcnRJbmRleCArICJTZWN1cmUiLmxlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiVmVyc2lvbj0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlZlcnNpb249Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0RElHSVQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHZlcnNpb25WZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBvcnRMaXN0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydExpc3QoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RESUdJVChzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJywnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdERJR0lULgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0RElHSVQoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNESUdJVChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZSBzdHJpbmcgc2F0aXNmeSB0aGUgIkNvb2tpZSIgaGVhZGVyIHZhbHVlLgotICAgKiBAcGFyYW0gc3RyIFN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ29va2llKFN0cmluZyBzdHIpCi0gIHsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWZXJzaW9uKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnICYmIHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpbmRleCsrOwotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotCi0gICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgIHsKLSAgICAgICAgbmV3SW5kZXggPSBnZXRMYXN0Q29va2llc1ZhbHVlKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JyAmJiBzdHIuY2hhckF0KGluZGV4KSAhPSAnLCcpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbmRleCsrOwotICAgICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdGgpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWZXJzaW9uKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRWZXJzaW9uPSIpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRWZXJzaW9uPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWVzVmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWVzVmFsdWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0gICAgaW50IG9sZEluZGV4ID0gMDsKLQotICAgIC8vIGZpbmQgdG9rZW4KLSAgICBuZXdJbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFRva2VuKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAvLyBpZiBub3QgJz0nIC0gZXJyb3IKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJz0nKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGdldCB2YWx1ZQotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFZhbHVlKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgIHJldHVybiBpbmRleDsKLQotICAgIC8vIHByb2Nlc3MgWyI7IiBwYXRoXSBbIjsiIGRvbWFpbl0gWyI7IiBwb3J0XSAKLSAgICBvbGRJbmRleCA9IGluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIHByb2Nlc3MgcGF0aAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBhdGgoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgIHsKLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnOycpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgb2xkSW5kZXggPSBpbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB9Ci0KLSAgICAvLyBwcm9jZXNzIGRvbWFpbgotICAgIG5ld0luZGV4ID0gZ2V0TGFzdERvbWFpbihzdHIsIGluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gbmV3SW5kZXgpCi0gICAgewotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBvbGRJbmRleCA9IGluZGV4OwotICAgICAgaW5kZXgrKzsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIH0KLQotICAgIC8vIHByb2Nlc3MgcG9ydAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnQoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBvbGRJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBhdGguCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RQYXRoKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotCi0gICAgaWYgKCFzdHIuc3RhcnRzV2l0aCgiJFBhdGg9IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRQYXRoPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3REb21haW4uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3REb21haW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN0ci5zdGFydHNXaXRoKCIkRG9tYWluPSIsIGluZGV4KSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4ICs9ICIkRG9tYWluPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RQb3J0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0YXJ0SW5kZXg7Ci0gICAgaW50IG5ld0luZGV4ID0gMDsKLQotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRQb3J0IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCArPSAiJFBvcnQiLmxlbmd0aCgpOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnRMaXN0KHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1wiJykKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBza2lwU3BhY2VzLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBpbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgc2tpcFNwYWNlcyhTdHJpbmcgc3RyLCBpbnQgaW5kZXgpCi0gIHsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNTUChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIGJyZWFrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIGJlZwotICAgKiBAcGFyYW0gZW5kCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcgc3RyLCBpbnQgYmVnLCBpbnQgZW5kKQotICB7Ci0gICAgU3RyaW5nIHFxcSA9IG51bGw7Ci0gICAgaWYgKHN0ci5jaGFyQXQoYmVnKSA9PSAnXCInKQotICAgICAgcXFxID0gc3RyLnN1YnN0cmluZyhiZWcgKyAxLCBlbmQgLSAxKTsKLSAgICBlbHNlCi0gICAgICBxcXEgPSBzdHIuc3Vic3RyaW5nKGJlZywgZW5kKTsKLSAgICByZXR1cm4gcXFxOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1N0cmluZ1Rva2VuaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzk1Mzk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFN0cmluZyB0b2tlbml6ZXIuCi0gKiAKLSAqIEBhdXRob3I6IEt1bGlrCi0gKi8KLWZpbmFsIHB1YmxpYyBjbGFzcyBTdHJpbmdUb2tlbml6ZXIKLXsKLSAgcHJpdmF0ZSBjaGFyW10gc3BhY2VEZWw7Ci0gIHByaXZhdGUgY2hhcltdIGRlbDsKLSAgcHJpdmF0ZSBjaGFyW10gYWxsRGVsOwotCi0gIC8qKgotICAgKiBFbnVtZXJhdGlvbiBvZiBzdHJpbmdzLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHByaXZhdGUgY2xhc3MgU3RyaW5nVG9rZW5pemVyRW51bWVyYXRpb24gaW1wbGVtZW50cyBqYXZhLnV0aWwuRW51bWVyYXRpb24KLSAgewotICAgIHByaXZhdGUgZmluYWwgY2hhcltdIHN0cjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIHByaXZhdGUgaW50IGluZGV4OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IuCi0gICAgICogQHBhcmFtIHMKLSAgICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXJFbnVtZXJhdGlvbihjaGFyW10gcykKLSAgICB7Ci0gICAgICBzdHIgPSBzOwotICAgICAgc2l6ZSA9IHN0ci5sZW5ndGg7Ci0gICAgICBpbmRleCA9IDA7Ci0KLSAgICAgIC8vIHNraXAgc3BhY2UgZGVsaW1pdGVycwotICAgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSAmJiBjb250YWluKHN0cltpbmRleF0sIHNwYWNlRGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIGphdmEudXRpbC5FbnVtZXJhdGlvbiNoYXNNb3JlRWxlbWVudHMoKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc01vcmVFbGVtZW50cygpCi0gICAgewotICAgICAgcmV0dXJuIChpbmRleCA8IHNpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgamF2YS51dGlsLkVudW1lcmF0aW9uI25leHRFbGVtZW50KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50KCkKLSAgICB7Ci0gICAgICBpZiAoaW5kZXggPj0gc2l6ZSkKLSAgICAgICAgdGhyb3cgbmV3IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJTdHJpbmdUb2tlbml6ZXIgZW51bWVyYXRpb24iKTsKLQotICAgICAgLy8gc2tpcCBkZWxpbWl0ZXJzCi0gICAgICBpbnQgYmVnU3RyID0gaW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPCBzaXplICYmIGNvbnRhaW4oc3RyW2luZGV4XSwgZGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLQotICAgICAgLy8gc2tpcCB3b3JkCi0gICAgICBpZiAoYmVnU3RyID09IGluZGV4KQotICAgICAgICB3aGlsZSAoaW5kZXggPCBzaXplICYmICFjb250YWluKHN0cltpbmRleF0sIGFsbERlbCkpCi0gICAgICAgICAgaW5kZXgrKzsKLQotICAgICAgaW50IGVuZFN0ciA9IGluZGV4OwotCi0gICAgICAvLyBza2lwIHNwYWNlIGRlbGltaXRlcnMKLSAgICAgIHdoaWxlIChpbmRleCA8IHNpemUgJiYgY29udGFpbihzdHJbaW5kZXhdLCBzcGFjZURlbCkpCi0gICAgICAgIGluZGV4Kys7Ci0KLSAgICAgIHJldHVybiBTdHJpbmcuY29weVZhbHVlT2Yoc3RyLCBiZWdTdHIsIGVuZFN0ciAtIGJlZ1N0cik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICBpbnQgaSA9IGluZGV4OwotICAgICAgU3RyaW5nIHMgPSAoU3RyaW5nKSBuZXh0RWxlbWVudCgpOwotICAgICAgaW5kZXggPSBpOwotICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFN0cmluZ1Rva2VuaXplciBjb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gc3BhY2VEZWxpbWl0ZXJzIHRoZSBzZXQgb2YgZGVsaW1pdGVycyB0byBiZSBpZ25vcmVkCi0gICAgICogQHBhcmFtIGRlbGltaXRlcnMgdGhlIHNldCBvZiBkZWxpbWl0ZXJzIHRvIGJlIHJlbWFpbmVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1Rva2VuaXplcihjaGFyW10gc3BhY2VEZWxpbWl0ZXJzLCBjaGFyW10gZGVsaW1pdGVycykKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICBpZiAoc3BhY2VEZWxpbWl0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc3BhY2VEZWwgPSBuZXcgY2hhcltzcGFjZURlbGltaXRlcnMubGVuZ3RoXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWxpbWl0ZXJzLCAwLCBzcGFjZURlbCwgMCwgc3BhY2VEZWxpbWl0ZXJzLmxlbmd0aCk7Ci0gICAgICBzb3J0KHNwYWNlRGVsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc3BhY2VEZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbGltaXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWwgPSBuZXcgY2hhcltkZWxpbWl0ZXJzLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbGltaXRlcnMsIDAsIGRlbCwgMCwgZGVsaW1pdGVycy5sZW5ndGgpOwotICAgICAgc29ydChkZWwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBkZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbCAhPSBudWxsICYmIHNwYWNlRGVsICE9IG51bGwpCi0gICAgewotICAgICAgYWxsRGVsID0gbmV3IGNoYXJbZGVsLmxlbmd0aCArIHNwYWNlRGVsLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbCwgMCwgYWxsRGVsLCAwLCBkZWwubGVuZ3RoKTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWwsIDAsIGFsbERlbCwgZGVsLmxlbmd0aCwgc3BhY2VEZWwubGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVsICE9IG51bGwpCi0gICAgICBhbGxEZWwgPSBkZWw7Ci0gICAgZWxzZQotICAgICAgYWxsRGVsID0gc3BhY2VEZWw7Ci0KLSAgICBzb3J0KGFsbERlbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFBhcnNlcyBzdHJpbmcuCi0gICAqIEByZXR1cm4gamF2YS51dGlsLkVudW1lcmF0aW9uCi0gICAqIEBwYXJhbSBzIGphdmEubGFuZy5TdHJpbmcKLSAgICovCi0gIHB1YmxpYyBqYXZhLnV0aWwuRW51bWVyYXRpb24gcGFyc2UoU3RyaW5nIHMpCi0gIHsKLSAgICBpZiAocyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3RyaW5nVG9rZW5pemVyIDogU3RyaW5nIGNhbm5vdCBiZSBOVUxMIik7Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1Rva2VuaXplckVudW1lcmF0aW9uKHMudG9DaGFyQXJyYXkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQmluYXJ5IHNlYXJjaC4KLSAgICogQHJldHVybiBib29sZWFuCi0gICAqIEBwYXJhbSBjIGNoYXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29udGFpbihjaGFyIGMsIGNoYXJbXSBhKQotICB7Ci0gICAgaWYgKGEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsID0gMCwgciA9IGEubGVuZ3RoIC0gMSwgY2VudGVyOwotICAgIHdoaWxlIChsIDwgcikKLSAgICB7Ci0gICAgICBjZW50ZXIgPSAobCArIHIpIC8gMjsKLSAgICAgIGlmIChjID4gYVtjZW50ZXJdKQotICAgICAgICBsID0gY2VudGVyICsgMTsKLSAgICAgIGVsc2UKLSAgICAgICAgciA9IGNlbnRlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYVtsXSA9PSBjOwotICB9Ci0gIC8qKgotICAgKiBIZWFwIHNvcnQKLSAgICogQHBhcmFtIGMgY2hhcltdCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSB2b2lkIHNvcnQoY2hhcltdIGMpCi0gIHsKLSAgICBpZiAoYyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBqLCBrOwotICAgICAgY2hhciBjaTsKLQotICAgICAgLy8gcHVzaCBoZWFwCi0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IGMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGogPSAoKGsgPSBpKSAtIDEpIC8gMjsKLSAgICAgICAgY2kgPSBjW2ldOwotICAgICAgICB3aGlsZSAoayA+IDAgJiYgY1tqXSA8IGNpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IGNbal07Ci0gICAgICAgICAgaiA9ICgoayA9IGopIC0gMSkgLyAyOwotICAgICAgICB9Ci0gICAgICAgIGNba10gPSBjaTsKLSAgICAgIH0KLQotICAgICAgLy8gcG9wIGhlYXAKLSAgICAgIGZvciAoaW50IGkgPSBjLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIGogPSAyOwotICAgICAgICBrID0gMDsKLSAgICAgICAgY2kgPSBjWzBdOwotICAgICAgICB3aGlsZSAoaiA8PSBpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IChjW2ogLSAxXSA+IGNbal0pID8gY1stLWpdIDogY1tqXTsKLSAgICAgICAgICBqID0gKChrID0gaikgKyAxKSAqIDI7Ci0gICAgICAgIH0KLSAgICAgICAgY1trXSA9IGNbaV07Ci0gICAgICAgIGNbaV0gPSBjaTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1Rlc3RVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDdjMWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRlc3QgVXRpbGl0eSBjbGFzcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFRlc3RVdGlscwotewotICAvKioKLSAgICogRm9ybWF0IGEgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gZnJvbSB0aGUgYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYW4gYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmYXVsdEhyZWYgZGVmYXVsdCBocmVmLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0LAotICAgIFN0cmluZyBkZWZhdWx0SHJlZikKLSAgewotICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0hSRUYsIGRlZmF1bHRIcmVmKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoCi0gICAgICAgIGVsZW1lbnQsCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUaXRsZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRNZWRpYSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX01FRElBKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRDaGFyc2V0KAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCkpOwotICAgIGFkZFN0eWxlU2hlZXQuc2V0QWx0ZXJuYXRlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSB0b29sIG5hbWUgYW5kIGNvcHlyaWdodCBub3RpY2UuCi0gICAqIEBwYXJhbSB0b29sSW5mbyBhIFRvb2xJbmZvIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFRvb2xJbmZvKFRvb2xJbmZvIHRvb2xJbmZvKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgIkNvbmZvcm1hbmNlICIKLSAgICAgICAgKyB0b29sSW5mby5nZXROYW1lKCkKLSAgICAgICAgKyAiIFRvb2wiCi0gICAgICAgICsgIiwgVmVyc2lvbjogIgotICAgICAgICArIHRvb2xJbmZvLmdldFZlcnNpb24oKQotICAgICAgICArICIsIFJlbGVhc2UgRGF0ZTogIgotICAgICAgICArIHRvb2xJbmZvLmdldFJlbGVhc2VEYXRlKCkpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihXU0lDb25zdGFudHMuQ09QWVJJR0hUKTsKLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgfQotCi0gIC8qKiAKLSAgICogR2V0IFhNTCBjb21tZW50IHVzZWQgaW4gbG9nIGFuZCByZXBvcnQgZmlsZS4KLSAgICogQHJldHVybiBYTUwgY29tbWVudCB1c2VkIGluIGxvZyBhbmQgcmVwb3J0IGZpbGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxDb21tZW50KCkKLSAgewotICAgIFN0cmluZyBjb21tZW50ID0gbnVsbDsKLSAgICBTdHJpbmcgcmVhZExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQWRkIHJlcXVpcmVkIGNvbW1lbnRzIChjb3B5cmlnaHQsIGV0Yy4pCi0gICAgICBCdWZmZXJlZFJlYWRlciBidWZmZXJlZFJlYWRlciA9Ci0gICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcigKLSAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0gICAgICAgICAgICBVdGlscy5nZXRJbnB1dFN0cmVhbShXU0lDb25zdGFudHMuQ09NTUVOVFNfRklMRSkpKTsKLQotICAgICAgLy8gSW5pdGlhbGl6ZSBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nCi0gICAgICBjb21tZW50ID0gIiI7Ci0KLSAgICAgIHdoaWxlIChidWZmZXJlZFJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBpZiAoKHJlYWRMaW5lID0gYnVmZmVyZWRSZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgICAgICBjb21tZW50ICs9IHJlYWRMaW5lICsgV1NJQ29uc3RhbnRzLkxJTkVfU0VQQVJBVE9SOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgZXhjZXB0aW9uIGFuZCBqdXN0IHJldHVybiBudWxsCi0gICAgfQotCi0gICAgcmV0dXJuIGNvbW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNjaGVtYSBsb2NhdGlvbiBmb3IgWE1MIHNjaGVtYS4KLSAgICogQHJldHVybiBzY2hlbWEgbG9jYXRpb24gZm9yIFhNTCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfWE1MX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1hNTF9TQ0hFTUEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfU09BUF9TQ0hFTUEsCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9TT0FQX1NDSEVNQSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNjaGVtYUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRTY2hlbWFMb2NhdGlvbigKLSAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9XU0RMX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU0NIRU1BKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAqIEByZXR1cm4gV1NETCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfV1NETF9TT0FQX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU09BUF9TQ0hFTUEpOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSwKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlKQotICB7Ci0gICAgLy9TdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB3c2kuaG9tZSBzeXN0ZW0gcHJvcGVydHkKLSAgICAvL1N0cmluZyB3c2lIb21lID0gU3lzdGVtLmdldFByb3BlcnR5KFdTSVByb3BlcnRpZXMuUFJPUF9XU0lfSE9NRSk7Ci0gICAgLy9TdHJpbmcgZmlsZUxvY2F0aW9uID0gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8KLSAgICAvLyBJZiB0aGUgZmlsZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgdGhlbiBidWlsZCBsb2NhdGlvbgotICAgIC8vaWYgKGZpbGVMb2NhdGlvbiAhPSBudWxsKQotICAgIC8vewotICAgIC8vIElmIHdzaS5ob21lIGlzIHNldCwgdGhlbiB1c2UgaXQKLSAgICAvLyAgaWYgKHdzaUhvbWUgIT0gbnVsbCkKLSAgICAvLyAgewotICAgIC8vICAgICBzY2hlbWFMb2NhdGlvbiA9IHdzaUhvbWU7Ci0gICAgLy8gICB9Ci0gICAgLy8gICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCkKLSAgICAvLyAgIHsKLSAgICAvLyAgICBzY2hlbWFMb2NhdGlvbiA9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vICBlbHNlCi0gICAgLy8gIHsKLSAgICAvLyAgIGlmICghc2NoZW1hTG9jYXRpb24uZW5kc1dpdGgoIi8iKSkKLSAgICAvLyAgICB7Ci0gICAgLy8gICAgIHNjaGVtYUxvY2F0aW9uICs9ICIvIjsKLSAgICAvLyAgIH0KLSAgICAvLwotICAgIC8vICAgIHNjaGVtYUxvY2F0aW9uICs9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vIH0KLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1R5cGVzUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzIxNDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWE7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogVGhlIGNsYXNzIGV4dHJhY3RzIFhTRCBzY2hlbWEgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4gV1NETC4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgVHlwZXNSZWdpc3RyeSBpbXBsZW1lbnRzIFdTSVRhZywgV1NETFZpc2l0b3IKLXsKLSAgTGlzdCBzY2hlbWFQcm9jZXNzZWRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5QYXJ0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5TZXJ2aWNlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU2VydmljZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChUeXBlcywgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFR5cGVzIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE9wZXJhdGlvbiwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChJbnB1dCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE91dHB1dCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE91dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmcsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdPcGVyYXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nSW5wdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nSW5wdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoQmluZGluZ091dHB1dCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoQmluZGluZ0ZhdWx0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ0ZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEVsZW1lbnQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE1lc3NhZ2UsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFBvcnQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFBvcnRUeXBlLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRGVmaW5pdGlvbiwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KERlZmluaXRpb24gb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQsCi0gICAqIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEJpbmRpbmcsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQmluZGluZyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQQm9keSwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBIZWFkZXIsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQSGVhZGVyIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBIZWFkZXJGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXJGYXVsdCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEZhdWx0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBPcGVyYXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLQotICBwcml2YXRlIE1hcCBlbGVtZW50MlR5cGUgPSBuZXcgSGFzaE1hcCgpOwotICBwcml2YXRlIFNldCBleHRlbmRzQXJyYXkgPSBuZXcgSGFzaFNldCgpOwotICBwcml2YXRlIFNldCB1c2VzV3NkbEFycmF5VHlwZSA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgcHJvdGVjdGVkIEJhc2VWYWxpZGF0b3IgYmFzZVZhbGlkYXRvciA9IG51bGw7Ci0gCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBjcmVhdGVzIHRoZSB0eXBlcyByZWdpc3RyeS4gYnkgdGhlIGdpdmVuIFdTREwgZGVmaW5pdGlvbgotICAgKiBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gYmFzZVZhbGlkYXRvciBhIGJhc2UgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIFR5cGVzUmVnaXN0cnkoRGVmaW5pdGlvbiBkZWYsIEJhc2VWYWxpZGF0b3IgYmFzZVZhbGlkYXRvcikKLSAgewotICAgIHRoaXMuYmFzZVZhbGlkYXRvciA9IGJhc2VWYWxpZGF0b3I7Ci0gICAgaWYgKGRlZiA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRGVmaW5pdGlvbiBjYW4gbm90IGJlIG51bGwiKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLSAgICAKLSAgICBwcm9jZXNzVHlwZXMoZGVmLmdldFR5cGVzKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGRlZik7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgY3JlYXRlcyB0aGUgdHlwZXMgcmVnaXN0cnkgYnkgZ2l2ZW4gV1NETCB0eXBlcyBvYmplY3QgYW5kCi0gICAqIGxvY2F0aW9uIGNvbnRleHQgVVJJLgotICAgKiBAcGFyYW0gdHlwZXMgV1NETCB0eXBlcyBvYmplY3QuCi0gICAqIEBwYXJhbSBjb250ZXh0IGxvY2F0aW9uIGNvbnRleHQgVVJJLgotICAgKiBAcGFyYW0gYmFzZVZhbGlkYXRvciBhIGJhc2UgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIFR5cGVzUmVnaXN0cnkoCi0gICAgVHlwZXMgdHlwZXMsCi0gICAgU3RyaW5nIGNvbnRleHQsCi0gICAgQmFzZVZhbGlkYXRvciBiYXNlVmFsaWRhdG9yKQotICB7Ci0gICAgdGhpcy5iYXNlVmFsaWRhdG9yID0gYmFzZVZhbGlkYXRvcjsKLSAgICBwcm9jZXNzVHlwZXModHlwZXMsIGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyB0eXBlJ3MgcW5hbWUgYnkgZ2l2ZW4gZWxlbWVudCdzIHFuYW1lLgotICAgKiBAcGFyYW0gZWxlbWVudE5hbWUgYSBxdWFsaWZpZWQgZWxlbWVudCBuYW1lLgotICAgKiBAcmV0dXJuIHR5cGUncyBxbmFtZSBieSBnaXZlbiBlbGVtZW50J3MgcW5hbWUuCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0VHlwZShRTmFtZSBlbGVtZW50TmFtZSkKLSAgewotICAgIHJldHVybiAoUU5hbWUpIGVsZW1lbnQyVHlwZS5nZXQoZWxlbWVudE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyBzZXQgb2YgdHlwZXMgd2hpY2ggaXMgYXJyYXkgYXR0cmlidXRlLgotICAgKiBAcmV0dXJuIHNldCBvZiB0eXBlcyB3aGljaCBpcyBhcnJheSBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgU2V0IGdldEFycmF5VHlwZXMoKQotICB7Ci0gICAgU2V0IHMgPSBuZXcgSGFzaFNldCgpOwotICAgIHMuYWRkQWxsKChDb2xsZWN0aW9uKSB1c2VzV3NkbEFycmF5VHlwZSk7Ci0gICAgcy5hZGRBbGwoKENvbGxlY3Rpb24pIGV4dGVuZHNBcnJheSk7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCByZXR1cm5zIHNldCBvZiBlbGVtZW50cyBkZWZpbmVkIGluIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gc2V0IG9mIGVsZW1lbnRzIGRlZmluZWQgaW4gdHlwZXMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTZXQgZ2V0RWxlbWVudExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZWxlbWVudDJUeXBlLmtleVNldCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB0eXBlIGRlY2xhcmVzIHdzZGw6YXJyYXlUeXBlCi0gICAqIGF0dHJpYnV0ZSB3aXRoaW4gZGVjbGFyYXRpb24uCi0gICAqIEBwYXJhbSB0eXBlIGEgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB0eXBlIGRlY2xhcmVzIHdzZGw6YXJyYXlUeXBlCi0gICAqIGF0dHJpYnV0ZSB3aXRoaW4gZGVjbGFyYXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VzZXNXU0RMQXJyYXlUeXBlKFFOYW1lIHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdXNlc1dzZGxBcnJheVR5cGUuY29udGFpbnModHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCByZXR1cm5zIHRydWUgaWYgZ2l2ZW4gdHlwZSBleHRlbmRzIHNvYXBlbmM6QXJyYXkgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYSB0eXBlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZ2l2ZW4gdHlwZSBleHRlbmRzIHNvYXBlbmM6QXJyYXkgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRXh0ZW5kc0FycmF5KFFOYW1lIHR5cGUpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5kc0FycmF5LmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5JbXBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgaW0sIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChpbS5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHByb2Nlc3NXU0RMKGltLmdldERlZmluaXRpb24oKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSBkZWYgYSBXU0RMIGRlZmluaXRpb24uCi0gICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1dTREwoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBpZiAoZGVmLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICAgIHByb2Nlc3NUeXBlcyhkZWYuZ2V0VHlwZXMoKSwgZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnRlcm5hbCBtZXRob2QgcHJvY2Vzc2VzIFdTREwgdHlwZXMuCi0gICAqIEBwYXJhbSB0eXBlcyBXU0RMIHR5cGVzLgotICAgKiBAcGFyYW0gY29udGV4dCBhIGNvbnRleHQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1R5cGVzKFR5cGVzIHR5cGVzLCBTdHJpbmcgY29udGV4dCkKLSAgewotICAgIGlmICh0eXBlcyA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIExpc3QgZXh0cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChleHRzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBleHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBpZiAoZWwgaW5zdGFuY2VvZiBTY2hlbWEpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKAotICAgICAgICAgICAgKChTY2hlbWEpIGVsKS5nZXRFbGVtZW50KCksCi0gICAgICAgICAgICBjb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHNlYXJjaGVzIFhTRCBzY2hlbWEgZGVjbGFyYXRpb24gYW5kIFhTRCBpbXBvcnQKLSAgICogc3RhdGVtZW50cy4KLSAgICogQHBhcmFtIG4KLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZWFyY2hGb3JTY2hlbWEoTm9kZSBuLCBTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIGNvbnRleHQsIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgICB9Ci0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBJbnRlcm5hbCBtZXRob2QgbG9hZHMgWFNEIHNjaGVtYSBieSB1c2luZyBzY2hlbWEgbG9jYXRpb24gYW5kCi0gICAqIGxvY2F0aW9uIGNvbnRleHQuCi0gICAqIEBwYXJhbSBpbXBvcnROb2RlCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqLwotICBwcml2YXRlIHZvaWQgbG9hZFNjaGVtYShOb2RlIGltcG9ydE5vZGUsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLSAgICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotCQotICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAJU3RyaW5nIHVybFN0cmluZyA9IFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KTsKLSAgICAJaWYgKCFzY2hlbWFQcm9jZXNzZWRMaXN0LmNvbnRhaW5zKHVybFN0cmluZykpCi0gICAgCXsKLSAgICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAgIGJhc2VWYWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTCgKLSAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwKLSAgICAgICAgICAgICAgY29udGV4dCwKLSAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgc2NoZW1hUHJvY2Vzc2VkTGlzdC5hZGQodXJsU3RyaW5nKTsKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICAgIHByb2Nlc3NTY2hlbWEoCi0gICAgICAgICAgICAgIHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgdXJsU3RyaW5nLCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAJfQotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgICAvL3QucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIC8vIG5vdGhpbmcuIGl0J3Mgbm90IGEgc2NoZW1hCi0gICAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBYU0Qgc2NoZW1hIGFuZCByZXRyaWV2ZXMgdHlwZXMgZGVjbGFyYXRpb24gZnJvbQotICAgKiBpdC4KLSAgICogQHBhcmFtIHNjaGVtYQotICAgKiBAcGFyYW0gY29udGV4dAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgc2NoZW1hLCBBVFRSX1hTRF9UQVJHRVROQU1FU1BBQ0UpOwotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gICAgICAvLyBpdGVyYXRlIHNjaGVtYQotICAgICAgTm9kZSBuID0gc2NoZW1hLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgIC8vICEhIHdlIHN1cHBvc2UgdGhhdCB4c2Q6aW1wb3J0IGVsZW1lbnQgaXMgb2NjdXJlZCBvbmx5IHdpdGhpbiB4c2Q6c2NoZW1hIGVsZW1lbnQgICAgICAgIAotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfRUxFTUVOVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbCA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShlbCwgQVRUUl9YU0RfTkFNRSk7Ci0gICAgICAgICAgICBRTmFtZSBlbGVtZW50ID0KLSAgICAgICAgICAgICAgbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIik7Ci0KLSAgICAgICAgICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfWFNEX1RZUEUpOwotICAgICAgICAgICAgUU5hbWUgdHlwZSA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoYSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgdCA9IGEuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgLy8gaWYgdHlwZSBjb250YWlucyAnOicsIGl0IG1lYW5zIHRoYXQgaXQgY29udGFpbnMgcW5hbWUKLSAgICAgICAgICAgICAgaW50IGkgPSB0LmluZGV4T2YoJzonKTsKLSAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gdC5zdWJzdHJpbmcoMCwgaSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5zVVJJID0gWE1MVXRpbHMuZmluZE5hbWVzcGFjZVVSSShuLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIHR5cGUgPSBuZXcgUU5hbWUobnNVUkksIHQuc3Vic3RyaW5nKGkgKyAxKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR5cGUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCB0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gc3VwcG9zZSB0aGF0IGVsZW1lbnQgZGlyZWN0bHkgY29udGFpbnMgdHlwZSBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICB0eXBlID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgY2hlY2tUeXBlKG4sIHR5cGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbGVtZW50MlR5cGUucHV0KGVsZW1lbnQsIHR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICAgIGxvYWRTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lOQ0xVREUpKQotICAgICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICBlbHNlIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfQ09NUExFWFRZUEUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbjsKLSAgICAgICAgICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfWFNEX05BTUUpOwotICAgICAgICAgICAgUU5hbWUgdHlwZSA9Ci0gICAgICAgICAgICAgIG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotICAgICAgICAgICAgY2hlY2tUeXBlKG4sIHR5cGUpOwotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLQl9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHNwZWNpZmllZCB0eXBlIGhhcyBXU0RMIGFycmF5IHR5cGUKLSAgICogYXR0cmlidXRlIGluIHRoZSBYU0QgZGVjbGFyYXRpb24uCi0gICAqIEBwYXJhbSBuCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tUeXBlKE5vZGUgbiwgUU5hbWUgbmFtZSkKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gY2hlY2sgc3VjaCBzZW50ZW5jZQotICAgICAgICAvLyAgICAgICAgICAgICAgeHNkOmF0dHJpYnV0ZSByZWY9InNvYXBlbmM6YXJyYXlUeXBlIiB3c2RsOmFycmF5VHlwZT0idG5zOk15QXJyYXkyVHlwZVtdIi8+Ci0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfQVRUUklCVVRFKSkKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9XU0RMX0FSUkFZVFlQRSk7Ci0gICAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgICAgIHVzZXNXc2RsQXJyYXlUeXBlLmFkZChuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJldHJpZXZlIGJhc2UgYXR0cmlidXRlIG1heSBiZSBmcm9tIHJlc3RyaWN0aW9uIG9yIGV4dGVuc2lvbgotICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG4sIEFUVFJfWFNEX0JBU0UpOwotICAgICAgICBpZiAoYSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGJhc2UgPSBhLmdldFZhbHVlKCk7Ci0gICAgICAgICAgaW50IGkgPSBiYXNlLmluZGV4T2YoIjoiKTsKLSAgICAgICAgICBpZiAoaSAhPSAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gYmFzZS5zdWJzdHJpbmcoMCwgaSk7Ci0gICAgICAgICAgICBTdHJpbmcgbG9jYWwgPSBiYXNlLnN1YnN0cmluZyhpICsgMSk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gWE1MVXRpbHMuZmluZE5hbWVzcGFjZVVSSShuLCBwcmVmaXgpOwotICAgICAgICAgICAgaWYgKFNPQVBFTkNfQVJSQVkuZXF1YWxzKG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsKSkpCi0gICAgICAgICAgICAgIGV4dGVuZHNBcnJheS5hZGQobmFtZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNoZWNrVHlwZShuLmdldEZpcnN0Q2hpbGQoKSwgbmFtZSk7Ci0gICAgICB9Ci0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9VRERJVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmUwNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9VRERJVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLlRNb2RlbEluc3RhbmNlSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbExpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZSBzb21lIHNlcnZpY2UgZnVuY3Rpb25zIHVzZWQgYnkgVURESVZhbGlkYXRvci4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBVRERJVXRpbHMKLXsKLSAgc3RhdGljIHB1YmxpYyBmaW5hbCBGaW5kUXVhbGlmaWVycyBFWEFDVF9OQU1FX01BVENIX1FVQUxJRklFUjsKLSAgc3RhdGljIHsKLSAgICBWZWN0b3IgdmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIEVYQUNUX05BTUVfTUFUQ0hfUVVBTElGSUVSID0gbmV3IEZpbmRRdWFsaWZpZXJzKCk7Ci0gICAgdmVjdG9yLmFkZChuZXcgRmluZFF1YWxpZmllcihGaW5kUXVhbGlmaWVyLmV4YWN0TmFtZU1hdGNoKSk7Ci0gICAgdmVjdG9yLmFkZChuZXcgRmluZFF1YWxpZmllcihGaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVBc2MpKTsKLSAgICBFWEFDVF9OQU1FX01BVENIX1FVQUxJRklFUi5zZXRGaW5kUXVhbGlmaWVyVmVjdG9yKHZlY3Rvcik7Ci0gIH0KLQotICBzdGF0aWMgZmluYWwgU3RyaW5nIFdTX0lfQ09ORk9STUFOQ0VfVE1PREVMX05BTUUgPQotICAgICJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIiOwotCi0gIHN0YXRpYyBwcml2YXRlIEhhc2h0YWJsZSB3c2lDb25mb3JtYW5jZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIC8qKgotICAgKiBHZXRzIGEgYnVzaW5lc3Mgc2VydmljZSBieSBrZXkuCi0gICAqIEBwYXJhbSBwcm94eSAgYSBVRERJIHByb3h5LgotICAgKiBAcGFyYW0ga2V5ICAgIGEga2V5IHRvIGEgYnVzaW5lc3Mgc2VydmljZS4KLSAgICogQHJldHVybiBhIGJ1c2luZXNzIHNlcnZpY2Ugc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnVzaW5lc3NTZXJ2aWNlIGdldEJ1c2luZXNzU2VydmljZUJ5S2V5KAotICAgIFVERElQcm94eSBwcm94eSwKLSAgICBTdHJpbmcga2V5KQotICAgIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24sIFVERElFeGNlcHRpb24KLSAgewotICAgIEJ1c2luZXNzU2VydmljZSByZXN1bHQgPSBudWxsOwotCi0gICAgU2VydmljZURldGFpbCBzZCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKGtleSk7Ci0KLSAgICBpZiAoc2QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IHNkLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotCi0gICAgICBpZiAodiAhPSBudWxsICYmIHYuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gKEJ1c2luZXNzU2VydmljZSkgdi5maXJzdEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgYnVzaW5lc3MgZW50aXR5IGJ5IGtleS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBrZXkgICAgYSBrZXkgdG8gYSBidXNpbmVzcyBlbnRpeS4KLSAgICogQHJldHVybiBhIGJ1c2luZXNzIGVudGl0eSBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIGtleS4KLSAgICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gaWYgZXJyb3Igb3JpZ2luYXRpbmcgd2l0aGluIHRoZSBTT0FQIHRyYW5zcG9ydC4KLSAgICogQHRocm93cyBVRERJRXhjZXB0aW9uIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBVRERJIEFQSSBjYW5ub3QgaW5kaWNhdGUgCi0gICAqICAgICAgICAgYW4gZXJyb3IgY29uZGl0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCdXNpbmVzc0VudGl0eSBnZXRCdXNpbmVzc0J5S2V5KFVERElQcm94eSBwcm94eSwgU3RyaW5nIGtleSkKLSAgICB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc0VudGl0eSByZXN1bHQgPSBudWxsOwotCi0gICAgQnVzaW5lc3NEZXRhaWwgYmQgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoa2V5KTsKLQotICAgIGlmIChiZCAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciB2ID0gYmQuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLQotICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChCdXNpbmVzc0VudGl0eSkgdi5maXJzdEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgYSB0TW9kZWwgYnkga2V5LgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHBhcmFtIGtleSAgICBhIGtleSB0byBhIHRNb2RlbC4KLSAgICogQHJldHVybiBhIHRNb2RlbCBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIGtleS4KLSAgICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gaWYgZXJyb3Igb3JpZ2luYXRpbmcgd2l0aGluIHRoZSBTT0FQIHRyYW5zcG9ydC4KLSAgICogQHRocm93cyBVRERJRXhjZXB0aW9uIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBVRERJIEFQSSBjYW5ub3QgaW5kaWNhdGUgCi0gICAqICAgICAgICAgYW4gZXJyb3IgY29uZGl0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUTW9kZWwgZ2V0VE1vZGVsQnlLZXkoVURESVByb3h5IHByb3h5LCBTdHJpbmcga2V5KQotICB7Ci0gICAgVE1vZGVsIHJlc3VsdCA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBUTW9kZWxEZXRhaWwgYmQgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKGtleSk7Ci0KLSAgICAgIGlmIChiZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBWZWN0b3IgdiA9IGJkLmdldFRNb2RlbFZlY3RvcigpOwotCi0gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdi5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKFRNb2RlbCkgdi5maXJzdEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgewotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBrZXkgb2YgdGhlIFdTSSBDb25mb3JtYW5jZSB0TW9kZWwuCi0gICAqIEBwYXJhbSBwcm94eSAgYSBVRERJIHByb3h5LgotICAgKiBAcmV0dXJuIHRoZSBrZXkgb2YgdGhlIFdTSSBDb25mb3JtYW5jZSB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0lDb25mb3JtYW5jZVRNb2RlbEtleShVRERJUHJveHkgcHJveHkpCi0gIHsKLSAgICBpZiAocHJveHkgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVEREkgcHJveHkgY2Fubm90IGJlIG51bGwuIik7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQotICAgIGlmICh3c2lDb25mb3JtYW5jZVRhYmxlLmNvbnRhaW5zS2V5KHByb3h5KSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSB3c2lDb25mb3JtYW5jZVRhYmxlLmdldChwcm94eSkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldFRNb2RlbEtleUJ5TmFtZShwcm94eSwgV1NfSV9DT05GT1JNQU5DRV9UTU9ERUxfTkFNRSk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV1MtSSBjb25mb3JtYW5jZSB0YXhvbm9teSB0TW9kZWwgd2FzIG5vdCBmb3VuZCIpOwotICAgICAgfQotCi0gICAgICB3c2lDb25mb3JtYW5jZVRhYmxlLnB1dChwcm94eSwgcmVzdWx0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgYSB0TW9kZWwga2V5IGJ5IHRNb2RlbCBuYW1lLgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHBhcmFtIG5hbWUgICBhIHRNb2RlbCBuYW1lLgotICAgKiBAcmV0dXJuIGEgdE1vZGVsIGtleSBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHRNb2RlbCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VE1vZGVsS2V5QnlOYW1lKFVERElQcm94eSBwcm94eSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBUTW9kZWxMaXN0IGxpc3QgPQotICAgICAgICBwcm94eS5maW5kX3RNb2RlbChuYW1lLCBudWxsLCBudWxsLCBFWEFDVF9OQU1FX01BVENIX1FVQUxJRklFUiwgMSk7Ci0gICAgICBUTW9kZWxJbmZvIGluZm8gPQotICAgICAgICAoVE1vZGVsSW5mbykgbGlzdC5nZXRUTW9kZWxJbmZvcygpLmdldFRNb2RlbEluZm9WZWN0b3IoKS5maXJzdEVsZW1lbnQoKTsKLSAgICAgIHJlc3VsdCA9IGluZm8uZ2V0VE1vZGVsS2V5KCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgZSkKLSAgICB7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJpbmRpbmdUZW1wbGF0ZS4KLSAgICogQHBhcmFtIGJpbmRpbmdUZW1wbGF0ZSAgYSBCaW5kaW5nVGVtcGxhdGUgb2JqZWN0LgotICAgKiBAcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJpbmRpbmdUZW1wbGF0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJpbmRpbmdUZW1wbGF0ZVRvU3RyaW5nKEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUpCi0gIHsKLSAgICBTdHJpbmcgcmV0dXJuU3RyaW5nID0gIiI7Ci0KLSAgICBpZiAoYmluZGluZ1RlbXBsYXRlID09IG51bGwpCi0gICAgICByZXR1cm5TdHJpbmcgPSAibnVsbCI7Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nID0KLSAgICAgICAgImFjY2Vzc1BvaW50OiAiCi0gICAgICAgICAgKyAoYmluZGluZ1RlbXBsYXRlLmdldEFjY2Vzc1BvaW50KCkgPT0gbnVsbAotICAgICAgICAgICAgPyAibnVsbCIKLSAgICAgICAgICAgIDogYmluZGluZ1RlbXBsYXRlLmdldEFjY2Vzc1BvaW50KCkuZ2V0VGV4dCgpKTsKLQotICAgICAgaWYgKGJpbmRpbmdUZW1wbGF0ZS5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKSA9PSBudWxsCi0gICAgICAgIHx8IGJpbmRpbmdUZW1wbGF0ZQotICAgICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKQotICAgICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IoKQotICAgICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVyblN0cmluZyArPSAiLCBbbm8gdE1vZGVsIHJlZmVyZW5jZV0iOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0KLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKQotICAgICAgICAgICAgLmdldFRNb2RlbEluc3RhbmNlSW5mb1ZlY3RvcigpCi0gICAgICAgICAgICAuaXRlcmF0b3IoKTsKLQotICAgICAgICBpbnQgaW5mb0NvdW50ID0gMTsKLSAgICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIGluZm87Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbmZvID0gKFRNb2RlbEluc3RhbmNlSW5mbykgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIHJldHVyblN0cmluZyArPSAiLCBbIgotICAgICAgICAgICAgKyBpbmZvQ291bnQrKwotICAgICAgICAgICAgKyAiXSB0TW9kZWxLZXk6ICIKLSAgICAgICAgICAgICsgaW5mby5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0TW9kZWwuCi0gICAqIEBwYXJhbSB0TW9kZWwgIGEgVE1vZGVsIG9iamVjdC4KLSAgICogQHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0TW9kZWxUb1N0cmluZyhUTW9kZWwgdE1vZGVsKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgICAgcmV0dXJuU3RyaW5nID0gIm51bGwiOwotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblN0cmluZyA9Ci0gICAgICAgICJuYW1lOiAiCi0gICAgICAgICAgKyB0TW9kZWwuZ2V0TmFtZVN0cmluZygpCi0gICAgICAgICAgKyAiLCBjYXRlZ29yeUJhZzogIgotICAgICAgICAgICsgKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpID09IG51bGwKLSAgICAgICAgICAgID8gIm51bGwiCi0gICAgICAgICAgICA6IGNhdGVnb3J5QmFnVG9TdHJpbmcodE1vZGVsLmdldENhdGVnb3J5QmFnKCkpKQotICAgICAgICAgICsgIiwgb3ZlcnZpZXdVUkw6ICIKLSAgICAgICAgICArICh0TW9kZWwuZ2V0T3ZlcnZpZXdEb2MoKSA9PSBudWxsCi0gICAgICAgICAgICA/ICJudWxsIgotICAgICAgICAgICAgOiB0TW9kZWwuZ2V0T3ZlcnZpZXdEb2MoKS5nZXRPdmVydmlld1VSTFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY2F0ZWdvcnlCYWcuCi0gICAqIEBwYXJhbSBjYXRlZ29yeUJhZyAgYSBDYXRlZ29yeUJhZyBvYmplY3QuCi0gICAqIEByZXR1cm4gYSB0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjYXRlZ29yeUJhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNhdGVnb3J5QmFnVG9TdHJpbmcoQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcpCi0gIHsKLSAgICBTdHJpbmcgcmV0dXJuU3RyaW5nID0gIiI7Ci0KLSAgICBpZiAoY2F0ZWdvcnlCYWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm5TdHJpbmcgKz0gIm51bGwiOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm5TdHJpbmcgKz0gIktleWVkUmVmZXJlbmNlTGlzdDogIjsKLQotICAgICAgVmVjdG9yIGtyTGlzdCA9IG51bGw7Ci0gICAgICBpZiAoKGtyTGlzdCA9IGNhdGVnb3J5QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVyblN0cmluZyArPSAibnVsbCI7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKGtyTGlzdC5zaXplKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICJlbXB0eSI7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBudWxsOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGtyTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAga3IgPSAoS2V5ZWRSZWZlcmVuY2UpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gInRNb2RlbEtleTogIgotICAgICAgICAgICAgKyBrci5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiLCBrZXlOYW1lOiAiCi0gICAgICAgICAgICArIGtyLmdldEtleU5hbWUoKQotICAgICAgICAgICAgKyAiLCBrZXlWYWx1ZTogIgotICAgICAgICAgICAgKyBrci5nZXRLZXlWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVyblN0cmluZzsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIHRoZSB3c2RsU3BlYyB0TW9kZWwgYXNzb2NpYXRlZCB3aXRoIGEgYmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVE1vZGVsIGZpbmRUTW9kZWwoCi0gICAgVURESVByb3h5IHVkZGlQcm94eSwKLSAgICBCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlLAotICAgIGJvb2xlYW4gdmVyYm9zZU9wdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBUTW9kZWwgdE1vZGVsID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0TW9kZWwgcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBiaW5kaW5nVGVtcGxhdGUKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9Ci0gICAgICBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgLmdldFRNb2RlbEluc3RhbmNlRGV0YWlscygpCi0gICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IoKQotICAgICAgICAuaXRlcmF0b3IoKTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCB0TW9kZWwgcmVmZXJlbmNlCi0gICAgVmVjdG9yIHRNb2RlbEtleUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdE1vZGVsSW5zdGFuY2VJbmZvCi0gICAgICBUTW9kZWxJbnN0YW5jZUluZm8gdE1vZGVsSW5zdGFuY2VJbmZvID0KLSAgICAgICAgKFRNb2RlbEluc3RhbmNlSW5mbykgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAvLyBBZGQga2V5IHRvIGxpc3QKLSAgICAgIHRNb2RlbEtleUxpc3QuYWRkKHRNb2RlbEluc3RhbmNlSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSB0TW9kZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmluZGluZ1RlbXBsYXRlCi0gICAgaWYgKHRNb2RlbEtleUxpc3Quc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSB0TW9kZWwgZGV0YWlscwotICAgICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gdWRkaVByb3h5LmdldF90TW9kZWxEZXRhaWwodE1vZGVsS2V5TGlzdCk7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHRNb2RlbHMKLSAgICAgICAgSXRlcmF0b3IgdE1vZGVsSXRlcmF0b3IgPSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCkuaXRlcmF0b3IoKTsKLQotICAgICAgICAvL2Jvb2xlYW4gdE1vZGVsRm91bmQgPSBmYWxzZTsKLSAgICAgICAgVE1vZGVsIG5leHRUTW9kZWwgPSBudWxsOwotCi0gICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgdE1vZGVscwotICAgICAgICB3aGlsZSAoKHRNb2RlbEl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHRNb2RlbCA9PSBudWxsKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCBuZXh0IHRNb2RlbCBpbiBsaXN0Ci0gICAgICAgICAgbmV4dFRNb2RlbCA9IChUTW9kZWwpIHRNb2RlbEl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgICAgICAgIiAgICAgIFRNb2RlbCByZWZlcmVuY2VkIGZyb20gYmluZGluZ1RlbXBsYXRlIC0gIgotICAgICAgICAgICAgICAgICsgVURESVV0aWxzLnRNb2RlbFRvU3RyaW5nKG5leHRUTW9kZWwpKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgd3NkbFNwZWMgdE1vZGVsLCB0aGVuIHRoaXMgaXMgdGhlIHRNb2RlbCB3ZSB3YW50Ci0gICAgICAgICAgaWYgKGlzV3NkbFNwZWMobmV4dFRNb2RlbCkpCi0gICAgICAgICAgICB0TW9kZWwgPSBuZXh0VE1vZGVsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhyb3cgV1NJRXhjZXB0aW9uCi0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgdE1vZGVsIGRldGFpbHMuIiwgZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRocm93IGV4Y2VwdGlvbgotICAgICAgLy90aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJVRERJIGJpbmRpbmdUZW1wbGF0ZSBkaWQgbm90IGNvbnRhaW4gYW55IHRNb2RlbCByZWZlcmVuY2VzLiIpOwotICAgIH0KLQotICAgIHJldHVybiB0TW9kZWw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHdzZGxTcGVjIHRNb2RlbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1dzZGxTcGVjKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSBudWxsOwotICAgIEl0ZXJhdG9yIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjYXRldGdvcnlCYWcgY29udGFpbnMgd3NkbFNwZWMKLSAgICBpZiAoKGNhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGtleWVkIHJlZmVyZW5jZXMKLSAgICAgIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmZXJlbmNlID0gbnVsbDsKLQotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICB3aGlsZSAoY2F0ZWdvcnlCYWdJdGVyYXRvci5oYXNOZXh0KCkgJiYgISh0TW9kZWxGb3VuZCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGtleWVkIHJlZmVyZW5jZQotICAgICAgICBrZXllZFJlZmVyZW5jZSA9IChLZXllZFJlZmVyZW5jZSkgY2F0ZWdvcnlCYWdJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHR5cGVzIHRheG9ub215IHRNb2RlbCBhbmQgdGhlIHZhbHVlIGlzIHdzZGxTcGVjLCB0aGVuIHRoaXMgaXMgdGhlIHRNb2RlbCB3ZSB3YW50Ci0gICAgICAgIC8vIFJFTU9WRTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGUga2V5IG5hbWUKLSAgICAgICAgLy9pZiAoa2V5ZWRSZWZlcmVuY2UuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkgJiYKLSAgICAgICAgLy8gICAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSAmJgotICAgICAgICAvLyAgICgidHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpIHx8Ci0gICAgICAgIC8vICAgICJ1ZGRpLW9yZzp0eXBlcyIuZXF1YWxzKGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKSkpKSB7Ci0gICAgICAgIC8vICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIC8vfQotICAgICAgICBpZiAoa2V5ZWRSZWZlcmVuY2UKLSAgICAgICAgICAuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkKLSAgICAgICAgICAmJiAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0TW9kZWxGb3VuZDsKLSAgfQotICAvKioKLSAgICogR2V0IGFuIE92ZXJ2aWV3VVJMIGZyb20gdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0T3ZlcnZpZXdVUkwoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIGlmICh0TW9kZWwgIT0gbnVsbAotICAgICAgJiYgdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkgIT0gbnVsbAotICAgICAgJiYgdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB0TW9kZWwuZ2V0T3ZlcnZpZXdEb2MoKS5nZXRPdmVydmlld1VSTCgpLmdldFRleHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgaWYgKChpbmRleCA9IHdzZGxMb2NhdGlvbi5pbmRleE9mKCIjIikpID4gLTEpCi0gICAgewotICAgICAgd3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsTG9jYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgaW4gdGhlIHRNb2RlbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQmluZGluZyBnZXRCaW5kaW5nKFN0cmluZyBvdmVydmlld1VSTCwgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotICAgIGludCBpbmRleDsKLSAgICBpbnQgbmFtZUluZGV4OwotCi0gICAgQmluZGluZ1tdIGJpbmRpbmdzID0gd3NkbERvY3VtZW50LmdldEJpbmRpbmdzKCk7Ci0gICAgaWYgKGJpbmRpbmdzID09IG51bGwgfHwgYmluZGluZ3MubGVuZ3RoID09IDApCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIGlmIChvdmVydmlld1VSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIENoZWNrIGlmIHRoZSBvdmVydmlld1VSTCBjb250YWlucyBhIGZyYWdtZW50IGlkZW50aWZpZXIKLSAgICAgIGlmICgoaW5kZXggPSBvdmVydmlld1VSTC5pbmRleE9mKCIjIikpID4gLTEpCi0gICAgICB7Ci0gICAgICAgIC8vIFRFTVA6IE5lZWQgdG8gdXNlIGEgcmVhbCBYUGF0aCBldmFsdWF0b3IgbGlrZSBYYWxhbgotICAgICAgICBTdHJpbmcgbmFtZUF0dHJpYnV0ZSA9ICJAbmFtZT0iOwotCi0gICAgICAgIC8vIExvY2F0ZSBuYW1lIHJlZmVyZW5jZQotICAgICAgICBpZiAoKG5hbWVJbmRleCA9Ci0gICAgICAgICAgb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGluZGV4ICsgMSkuaW5kZXhPZihuYW1lQXR0cmlidXRlKSkKLSAgICAgICAgICA+IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3RlciB3aGljaCBzaG91bGQgYmUgYSBxdW90ZQotICAgICAgICAgIGludCBmaXJzdFF1b3RlSW5kZXggPSBpbmRleCArIDEgKyBuYW1lSW5kZXggKyBuYW1lQXR0cmlidXRlLmxlbmd0aCgpOwotICAgICAgICAgIFN0cmluZyBxdW90ZSA9Ci0gICAgICAgICAgICBvdmVydmlld1VSTC5zdWJzdHJpbmcoZmlyc3RRdW90ZUluZGV4LCBmaXJzdFF1b3RlSW5kZXggKyAxKTsKLQotICAgICAgICAgIC8vIEdldCB0aGUgcGFydCBvZiB0aGUgVVJMIHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBiaW5kaW5nIG5hbWUKLSAgICAgICAgICBTdHJpbmcgdXJsUGFydCA9IG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhmaXJzdFF1b3RlSW5kZXggKyAxKTsKLQotICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgcXVvdGUKLSAgICAgICAgICBpbnQgbmV4dFF1b3RlSW5kZXg7Ci0gICAgICAgICAgaWYgKChuZXh0UXVvdGVJbmRleCA9IHVybFBhcnQuaW5kZXhPZihxdW90ZSkpID4gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gdXJsUGFydC5zdWJzdHJpbmcoMCwgbmV4dFF1b3RlSW5kZXgpOwotICAgICAgICAgICAgLy9sb29rIGZvciBiaW5kaW5nIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoYmluZGluZ05hbWUuZXF1YWxzKGJpbmRpbmdzW2ldLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nc1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYmluZGluZ3NbMF07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQxMTY1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLmJpbmFyeS5CYXNlNjQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWltZVBhcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5NaW1lUGFydHNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIEdlbmVyYWwgc2V0IG9mIHV0aWxpdGllcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBDUiA9IChieXRlKSAnXHInOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTEYgPSAoYnl0ZSkgJ1xuJzsKLQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgTWFwIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIC8vCXB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IHRpbWVzdGFtcEZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MiKTsKLQotICAvKioKLSAgICogQmFzaWMgZGF0ZSBmb3JtYXQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKLQotICAvKioKLSAgICogV3JhcHBlciBtZXRob2QgZm9yIGVycm9yIGxvZ2dpbmc7Ci0gICAqIGZvciBub3cgaXQganVzdCBnb2VzIHRvIHN0ZGVyci4KLSAgICogQHBhcmFtIGluRXJyb3IgIGFuIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIGluRXJyb3IpCi0gIHsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiAiICsgaW5FcnJvcik7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIGEgVGhyb3dhYmxlIG9iamVjdC4KLSAgICogQHJldHVybiBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBnZXRFeGNlcHRpb25EZXRhaWxzKFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiRXhjZXB0aW9uOiAiKTsKLSAgICB0aHJvd2FibGUucHJpbnRTdGFja1RyYWNlKHB3KTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIC8vdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0gICAgdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldERlZmF1bHQoKSk7Ci0KLSAgICAvLyBSZXR1cm4gdGltZXN0YW1wCi0gICAgcmV0dXJuIHRpbWVzdGFtcEZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGN1cnJlbnQgZGF0ZSBmb3IgZGVmYXVsdCB0aW1lIHpvbmUuCi0gICAqIEByZXR1cm4gY3VycmVudCBkYXRlIGZvciBkZWZhdWx0IHRpbWUgem9uZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERhdGUoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIGRhdGVGb3JtYXQuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKLQotICAgIC8vIFJldHVybiBkYXRlCi0gICAgcmV0dXJuIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAcGFyYW0gaHR0cEhlYWRlcnMgIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybiBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzIHdhcyBub3QgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIVFRQU3RhdHVzQ29kZShTdHJpbmcgaHR0cEhlYWRlcnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHN0YXR1c0NvZGUgPSBudWxsOwotCi0gICAgaWYgKGh0dHBIZWFkZXJzLnN0YXJ0c1dpdGgoIkhUVFAiKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9jYXRpb24gb2Ygc3RhdHVzIGNvZGUKLSAgICAgIGludCBpbmRleCA9IGh0dHBIZWFkZXJzLmluZGV4T2YoIiAiKTsKLSAgICAgIGludCBpbmRleDIgPSBodHRwSGVhZGVycy5pbmRleE9mKCIgIiwgaW5kZXggKyAxKTsKLQotICAgICAgaWYgKChpbmRleCA9PSAtMSkgfHwgKGluZGV4MiA9PSAtMSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHN0YXR1cyBjb2RlIGluIGh0dHAgaGVhZGVyczogWyIgKyBodHRwSGVhZGVycyArICJdLiIpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0NvZGUgPSBodHRwSGVhZGVycy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleDIpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGZpbmQgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzOiBbIiArIGh0dHBIZWFkZXJzICsgIl0uIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHN0YXR1cyBjb2RlCi0gICAgcmV0dXJuIHN0YXR1c0NvZGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKFN0cmluZyBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLQotICAgIC8vIFRyeSBsb29raW5nIGZvciB0aGUgZG91YmxlIG5ld2xpbmUKLSAgICBpbnQgaW5kZXggPSBmdWxsTWVzc2FnZS5pbmRleE9mKCJcclxuXHJcbiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBpbmRleCArPSA0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgZm9yIGNhc2UgIlxyXHIuLi5cclxuXHJcci4uLlxuIgotICAgICAgLy8gTm90ZSB0aGUgaW5kZXggdGhhdCBpcyByZXR1cm5lZCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciAKLSAgICAgIC8vIGltbWVkaWF0ZWRseSBmb2xsb3dpbmcgdGhlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGUgQ1JMRkNSTEYuIAotICAgICAgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlKTsKLSAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBIVFRQIG1lc3NhZ2UgdG8gZmluZCBoZWFkZXJzLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gSFRUUCBoZWFkZXJzCi0gICAgcmV0dXJuIGZ1bGxNZXNzYWdlLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBTT0FQIG1lc3NhZ2UgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRlbnQoU3RyaW5nIGZ1bGxNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLQotICAgIC8vIEZpbmQgc3RhcnQgb2YgbWVzc2FnZQotICAgIGludCBpbmRleCA9IGZ1bGxNZXNzYWdlLmluZGV4T2YoIlxyXG5cclxuIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGluZGV4ICs9IDQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBmb3IgY2FzZSAiXHJcci4uLlxyXG5cclxyLi4uXG4iCi0gICAgICAvLyBOb3RlIHRoZSBpbmRleCB0aGF0IGlzIHJldHVybmVkIHBvaW50cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIAotICAgICAgLy8gaW1tZWRpYXRlZGx5IGZvbGxvd2luZyB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSBDUkxGQ1JMRi4gCi0gICAgICBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYoZnVsbE1lc3NhZ2UpOwotICAgIH0gICAgCQotCi0gICAgaWYgKGluZGV4IDwgMCkKLSAgICB7Ci0gICAgCS8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXJzIG9yIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSwgdGhlbiBzaG93IGVycm9yCi0gICAgICBsb2dFcnJvcigKLSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlID0KLSAgICAgICAgIngtV1NJLVRlc3QtVG9vbC1FcnJvcjogQ291bGRuJ3QgZmluZCBtZXNzYWdlIGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoLCB0aGVuIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4ID49IGZ1bGxNZXNzYWdlLmxlbmd0aCgpKQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBFbHNlIGdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSBmdWxsTWVzc2FnZS5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotIAotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldEhUVFBIZWFkZXJzKGJ5dGVbXSBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iKS5nZXRCeXRlcygpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBIVFRQIGhlYWRlcnMKLQlieXRlW10gYiA9IG5ldyBieXRlW2luZGV4XTsKLQlTeXN0ZW0uYXJyYXljb3B5KGZ1bGxNZXNzYWdlLCAwLCBiLCAwLCBpbmRleCk7Ci0KLSAgICByZXR1cm4gYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCBoZWFkZXJzIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SFRUUEhlYWRlcnNBc1N0cmluZyhieXRlW10gZnVsbE1lc3NhZ2UsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgKyBmdWxsTWVzc2FnZSArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIEhUVFAgaGVhZGVycwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nKGZ1bGxNZXNzYWdlLCAwLCBpbmRleCwgZW5jb2RpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIEVuY29kaW5nOiAiICsgZW5jb2RpbmcgKyAiLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgICAgICAgICArIGZ1bGxNZXNzYWdlKTsKLSAgICAgICAgICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IFVuc3VwcG9ydGVkIEVuY29kaW5nIFwiIiArIGVuY29kaW5nICsgIlwiLiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29udGVudEFzU3RyaW5nKGJ5dGVbXSBtZXNzYWdlKQotICB7Ci0gIAlTdHJpbmcgY29udGVudCA9ICIiOwotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKG1lc3NhZ2UsIDApOwotCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgY29udGVudCA9Ci0gICAgICAgICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgbWVzc2FnZSBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICsgbWVzc2FnZS50b1N0cmluZygpCi0gICAgICAgICAgKyAiXS4iOwotICAgIH0KLQotICAgIC8vIEVsc2UgZ2V0IHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICBlbHNlIGlmIChpbmRleCA8IG1lc3NhZ2UubGVuZ3RoKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBjb250ZW50ID0gbmV3IFN0cmluZyhtZXNzYWdlLCBpbmRleCwgbWVzc2FnZS5sZW5ndGggLSBpbmRleCk7Ci0gICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgCWxvZ0Vycm9yKAotICAgICAgCSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAJICAgICAgICAgICsgbWVzc2FnZSk7Ci0gICAgICAJY29udGVudCA9Ci0gICAgICAJICAgICAgICAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgIAkgICAgICAgICAgKyBtZXNzYWdlLnRvU3RyaW5nKCkKLSAgICAgIAkgICAgICAgICAgKyAiXS4iOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gY29udGVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBieXRlW10gZ2V0Q29udGVudChieXRlW10gbWVzc2FnZSkKLSAgewotICAgIGJ5dGVbXSBjb250ZW50ID0gbmV3IGJ5dGUgWzBdOwotCi0gICAgLy9TdHJpbmcgaHR0cEhlYWRlcnMgPSBudWxsOwotICAgIGludCBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgMCk7Ci0gCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgICArIG1lc3NhZ2UudG9TdHJpbmcoKQotICAgICAgICAgICsgIl0uIikuZ2V0Qnl0ZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW5kZXggaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgsIHRoZW4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjb250ZW50Ci0gICAgLy9lbHNlIGlmIChpbmRleCA+PSBmdWxsTWVzc2FnZS5sZW5ndGgoKSkKLSAgICAvL3sKLSAgICAvLyAgbWVzc2FnZSA9ICIiOwotICAgIC8vfQotCi0gICAgLy8gRWxzZSBnZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4IDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgewotICAgIAlieXRlW10gYiA9IG5ldyBieXRlW21lc3NhZ2UubGVuZ3RoIC0gaW5kZXhdOwotICAgIAlTeXN0ZW0uYXJyYXljb3B5KG1lc3NhZ2UsIGluZGV4LCBiLCAwLCBtZXNzYWdlLmxlbmd0aCAtIGluZGV4KTsKLQotICAgICAgICBjb250ZW50ID0gYjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gU09BUCBtZXNzYWdlCi0gICAgcmV0dXJuIGNvbnRlbnQ7Ci0gIH0KLQotICAKLSAgLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEYoYnl0ZVtdIGJ1ZmZlciwgaW50IGluZGV4KSAKLQl7Ci0JCWludCBzaXplID0gYnVmZmVyLmxlbmd0aDsKLQkJaW50IGkgPSBpbmRleDsKLQkJd2hpbGUgKGkgPCBzaXplIC0gMSkgewotCQkJaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRikKLQkJCQlyZXR1cm4gaTsKLQkJCWkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKGJ5dGVbXSBidWZmZXIsIGludCBpbmRleCkgCi0JewotCQlpbnQgc2l6ZSA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBpID0gaW5kZXg7Ci0JCXdoaWxlIChpIDwgc2l6ZSAtIDMpIAotCQl7Ci0JCSAgaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRiAmJiBidWZmZXJbaSsyXSA9PSBDUikKLQkJICB7Ci0JCQlpZiAoYnVmZmVyW2krM10gPT0gTEYpCi0JCQl7Ci0JCQkgIHJldHVybiBpKzQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkgIGludCBqID0gaSArIDM7Ci0JCQkgIHdoaWxlIChqIDwgYnVmZmVyLmxlbmd0aCAmJiBidWZmZXJbal0gPT0gQ1IpCi0JCQkgIHsKLQkJCQlqKys7Ci0JCQkgIH0KLQkJCSAgaWYgKGogPCBidWZmZXIubGVuZ3RoICYmIGJ1ZmZlcltqXSA9PSBMRikKLQkJCSAgewotCQkJICAJcmV0dXJuIGogKyAxOwotCQkJICB9Ci0JCQl9Ci0JCSAgfQotCQkgIGkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKFN0cmluZyBidWZmZXIpIAotCXsKLQkJaW50IGluZGV4ID0gYnVmZmVyLmluZGV4T2YoIlxyXG5cciIpOwotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJICBpbnQgaSA9IGluZGV4ICszOwotCQkgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIGJ1ZmZlci5zdGFydHNXaXRoKCJcciIsIGkpKQotCQkgICAgIGkrKzsKLQkJCi0JCSAgaWYgKGkgPCBidWZmZXIubGVuZ3RoKCkgJiYgYnVmZmVyLnN0YXJ0c1dpdGgoIlxuIiwgaSkpCi0JCQlyZXR1cm4gaSsxOwotCQkgIGVsc2UKLQkJCXJldHVybiBnZXRGaXJzdENSTEZDUkxGKGJ1ZmZlci5zdWJzdHJpbmcoaW5kZXggKyAzKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCSAgcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBpbmRpY2VzIHdoaWNoIG1hcmtzIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnRzLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50W10gZ2V0Qm91bmRhcnlJbmRpY2VzKGJ5dGVbXSBtZXNzYWdlLCBTdHJpbmcgYm91bmRhcnlTdHIpCi0JewotCSAgaW50W10gaW5kaWNlcyA9IG5ldyBpbnRbMjU2XTsKLQkgIGludCBpbmRpY2VzSW5kZXggPSAwOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGJ5dGVbXSBib3VuZGFyeSA9ICgiXHJcbi0tIiArIGJvdW5kYXJ5U3RyKS5nZXRCeXRlcygiVVMtQVNDSUkiKTsKLQotCSAgICBpbnQgaW5kZXggPSAwOwotCSAgICBpbnQgc3RhcnQgPSAwOwotCSAgICB3aGlsZSAoaW5kZXggIT0gLTEpCi0JICAgIHsKLQkgICAgICBpbmRleCA9IGluZGV4T2YobWVzc2FnZSwgYm91bmRhcnksIHN0YXJ0KTsKLQkgICAgICAKLQkgICAgICBpZiAoaW5kZXggIT0gLTEpIAotCSAgICAgIHsKLQkJICAgIHN0YXJ0ID0gaW5kZXggKyBib3VuZGFyeS5sZW5ndGg7Ci0JICAgIAlpbmRpY2VzW2luZGljZXNJbmRleF0gPSBpbmRleDsKLQkgICAgCWluZGljZXNJbmRleCsrOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgCWludFtdIGIgPSBuZXcgaW50W2luZGljZXNJbmRleF07Ci0gICAgCVN5c3RlbS5hcnJheWNvcHkoaW5kaWNlcywgMCwgYiwgMCwgaW5kaWNlc0luZGV4KTsKLSAgICAJaW5kaWNlcyA9IGI7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7fQotCSAgcmV0dXJuIGluZGljZXM7Ci0JfQotIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGtleSBpbiB0aGUgYnVmZmVyLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoYnl0ZVtdIGJ1ZmZlciwgYnl0ZVtdIGtleSwgaW50IHN0YXJ0KQotCXsKLQkJaW50IGJ1ZmZlckxlbiA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBrZXlMZW4gPSBrZXkubGVuZ3RoOwotCQlpbnQgaSxqLGsgPSAwOwotCQkKLQkJaWYgKGtleUxlbiA+IGJ1ZmZlckxlbiAtIHN0YXJ0KQotCQl7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkKLQkJZm9yIChrID0gc3RhcnQgKyBrZXlMZW4gLSAxOyBrIDwgYnVmZmVyTGVuOyBrKyspCi0JCXsKLSAgICAgICAgICAgZm9yIChqID0ga2V5TGVuIC0gMSwgaSA9IGs7IChqID49IDApICYmIChidWZmZXJbaV0gPT0ga2V5W2pdKTsgai0tKSAKLSAgICAgICAgICAgewotICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgaWYgKGogPT0gKC0xKSkgewotICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICB9Ci0JCX0KLQotCQlyZXR1cm4gLTE7Ci0JfQotCS8qKgotICAgKiBHZXQgY29udGVudHMgb2YgYSByZXNvdXJjZSBhbmQgcmV0dXJuIGFzIGEgaW5wdXQgc3RyZWFtLgotICAgKgotICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBnZXQgYW5kIHJldHVybiBhcwotICAgKiAgICAgICAgICAgICAgICAgICAgICBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbShTdHJpbmcgcmVzb3VyY2VOYW1lKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gSWYgcmVzb3VyY2UgcmVmZXJlbmNlIGlzIGEgVVJMLCB0aGVuIGlucHV0IHN0cmVhbSBmcm9tIFVSTAotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRyeSB0byBjcmVhdGUgVVJMCi0gICAgICBVUkwgdXJsUmVzb3VyY2UgPSBuZXcgVVJMKHJlc291cmNlTmFtZSk7Ci0KLSAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIHRoZW4gZ2V0IFVSTCBpbnB1dCBzdHJlYW0KLSAgICAgIGlzID0gZ2V0SW5wdXRTdHJlYW0odXJsUmVzb3VyY2UpOwotICAgIH0KLQotICAgIC8vIEVsc2UgdHJ5IHRvIHJlYWQgcmVzb3VyY2UgZGlyZWN0bHkKLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11ZSkKLSAgICB7Ci0gICAgICBib29sZWFuIGJUcnlDbGFzc0xvYWRlciA9IGZhbHNlOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gT3BlbiBmaWxlIGlucHV0IHN0cmVhbQotICAgICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0ocmVzb3VyY2VOYW1lKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCB0cnkgY2xhc3MgbG9hZGVyIGZsYWcKLSAgICAgICAgYlRyeUNsYXNzTG9hZGVyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBzZSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IHRyeSBjbGFzcyBsb2FkZXIgZmxhZwotICAgICAgICBiVHJ5Q2xhc3NMb2FkZXIgPSB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZ2V0SW5wdXRTdHJlYW0gOiIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0cnkgY2xhc3MgbG9hZGVyLCB0aGVuIHVzZSBpdCB0byBnZXQgaW5wdXQgc3RyZWFtCi0gICAgICBpZiAoYlRyeUNsYXNzTG9hZGVyKQotICAgICAgewotICAgICAgICAvLyBVc2UgY2xhc3MgbG9hZGVyIHRvIGxvYWQgcmVzb3VyY2UKLSAgICAgICAgaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKHJlc291cmNlTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIGlzID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKAotICAgICAgICAgIHJlc291cmNlTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIFVSTCBhVVJMID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSgKLSAgICAgICAgICByZXNvdXJjZU5hbWUpOwotICAgICAgaWYgKGFVUkwgIT0gbnVsbCkKLSAgICAgICAgaXMgPSBnZXRJbnB1dFN0cmVhbShhVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoaXMgPT0gbnVsbCkKLSAgICAgIC8vIFRocm93IGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgcmVzb3VyY2UgZmlsZTogIiArIHJlc291cmNlTmFtZSk7Ci0KLSAgICAvLyBSZXR1cm4gaW5wdXQgc3RyZWFtCi0gICAgcmV0dXJuIGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5wdXQgc3RyZWFtIGZyb20gYSBVUkwuCi0gICAqIEBwYXJhbSB1cmxGaWxlIHRoZSBVUkwgdG8gZ2V0IHRoZSBpbnB1dCBzdHJlYW0gZnJvbS4KLSAgICogQHJldHVybiB0aGUgaW5wdXQgc3RyZWFtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFVSTC4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhdHRlbXB0IHRvIG9wZW4gdGhlIGZpbGUgZGVub3RlZCBieSBVUkwgaGFzIGZhaWxlZC4KLSAgICogQHRocm93cyBDb25uZWN0RXhjZXB0aW9uIGlmIHRyb3VibGUgY29ubmVjdGluZyB0byBVUkwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElucHV0U3RyZWFtIGdldElucHV0U3RyZWFtKFVSTCB1cmxGaWxlKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29ubmVjdEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gQUREOiBob3cgYXJlIFVSTHMgdGhhdCBhcmUgcGFzc3dvcmQgcHJvdGVjdGVkIGhhbmRsZWQ/Pz8/Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBPcGVuIGZpbGUgaW5wdXQgc3RyZWFtCi0gICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHVybEZpbGUub3BlblN0cmVhbSgpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoQ29ubmVjdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFJlLXRocm93IHRoaXMgZXhjcGV0aW9uIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICAgdGhyb3cgbmV3IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBVUkw6ICIgKyB1cmxGaWxlLnRvRXh0ZXJuYWxGb3JtKCkgKyAiLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnB1dCBzdHJlYW0KLSAgICByZXR1cm4gaXM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGNvbnRlbnRzIG9mIGEgcmVzb3VyY2UgYW5kIHJldHVybiBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICogQHBhcmFtIGZpbGVMb2NhdGlvbiB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBmaWxlRXhpc3RzKFN0cmluZyBmaWxlTG9jYXRpb24pCi0gIHsKLSAgICBib29sZWFuIGZpbGVFeGlzdHMgPSBmYWxzZTsKLQotICAgIC8vIElmIHJlc291cmNlIHJlZmVyZW5jZSBpcyBhIFVSTCwgdGhlbiBpbnB1dCBzdHJlYW0gZnJvbSBVUkwKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUcnkgdG8gY3JlYXRlIFVSTAotICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZmlsZUxvY2F0aW9uKTsKLQotICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgdGhlbiB0cnkgdG8gb3BlbiBjb25uZWN0aW9uCi0gICAgICB1cmwub3BlblN0cmVhbSgpOwotICAgICAgZmlsZUV4aXN0cyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0cnkgdG8gcmVhZCByZXNvdXJjZSBkaXJlY3RseQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlTG9jYXRpb24pOwotCi0gICAgICAgIGZpbGVFeGlzdHMgPSBmaWxlLmV4aXN0cygpOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICBmaWxlRXhpc3RzID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmbmZlKQotICAgIHsKLSAgICAgIGZpbGVFeGlzdHMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmlsZUV4aXN0cyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmaWxlIGV4aXN0cyBpbmRpY2F0b3IKLSAgICByZXR1cm4gZmlsZUV4aXN0czsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbG9jYWwgaG9zdCBuYW1lLgotICAgKiBAcmV0dXJuIHRoZSBsb2NhbCBob3N0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2NhbEhvc3ROYW1lKCkKLSAgewotICAgIFN0cmluZyBzTG9jYWxIb3N0TmFtZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBsb2NhbCBob3N0IG5hbWUKLSAgICAgIHNMb2NhbEhvc3ROYW1lID0gSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsIGhvc3QgbmFtZQotICAgICAgc0xvY2FsSG9zdE5hbWUgPSAiMTI3LjAuMC4xIjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbG9jYWwgaG9zdCBuYW1lCi0gICAgcmV0dXJuIHNMb2NhbEhvc3ROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGEgVVJMIHN0cmluZyBmcm9tIGhvc3RuYW1lLCBwb3J0IGFuZCBVUk4uCi0gICAqCi0gICAqIEBwYXJhbSBob3N0bmFtZSB0aGUgaG9zdG5hbWUuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0LgotICAgKiBAcGFyYW0gdXJuIHRoZSBVUk4uCi0gICAqIEByZXR1cm4gZm9ybWF0dGVkIFVSTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRVUkwoU3RyaW5nIGhvc3RuYW1lLCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVybikKLSAgewotICAgIC8vIEJ1aWxkIFVSTgotICAgIFN0cmluZyBmb3JtYXRVUk4gPSB1cm47Ci0KLSAgICAvLyBJZiBVUk4gZG9lc24ndCBzdGFydCB3aXRoICIvIiwgdGhlbiBhZGQgaXQKLSAgICBpZiAoIShmb3JtYXRVUk4uc3RhcnRzV2l0aCgiLyIpKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgIi8iIHRvIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCi0gICAgICBmb3JtYXRVUk4gPSAiLyIgKyB1cm47Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gImh0dHA6Ly8iICsgaG9zdG5hbWUgKyAiOiIgKyBwb3J0ICsgZm9ybWF0VVJOOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVwbGFjZSBhbGwgb2YgdGhlIG9jY3VyYW5jZXMgb2YgYSBzdHJpbmcKLSAgICogd2l0aCBhIHN1YnN0aXR1dGlvbiBzdHJpbmcuCi0gICAqCi0gICAqIEBwYXJhbSBzVGV4dCBTdHJpbmcgdG8gdWRwYXRlLgotICAgKiBAcGFyYW0gc0ZpbmQgU3RyaW5nIHRvIGZpbmQuCi0gICAqIEBwYXJhbSBzUmVwbGFjZSBTdHJpbmcgdG8gdXNlIGZvciBzdWJzdGl0dXRpb24uCi0gICAqIEByZXR1cm4gdXBkYXRlZCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlU3RyaW5nKAotICAgIFN0cmluZyBzVGV4dCwKLSAgICBTdHJpbmcgc0ZpbmQsCi0gICAgU3RyaW5nIHNSZXBsYWNlKQotICB7Ci0gICAgaW50IGlQcmV2SW5kZXggPSAwOwotCi0gICAgaW50IGlGaW5kTGVuID0gc0ZpbmQubGVuZ3RoKCk7Ci0gICAgaW50IGlSZXBsYWNlTGVuID0gc1JlcGxhY2UubGVuZ3RoKCk7Ci0KLSAgICBTdHJpbmcgc1VwZGF0ZWRUZXh0ID0gc1RleHQ7Ci0KLSAgICAvLyBSZXBsYWNlIGFsbCBvY2N1cmFuY2VzIG9mIHRoZSBmaW5kIHN0cmluZwotICAgIGZvciAoaW50IGlJbmRleCA9IHNVcGRhdGVkVGV4dC5pbmRleE9mKHNGaW5kKTsKLSAgICAgIGlJbmRleCA8IChzVXBkYXRlZFRleHQubGVuZ3RoKCkgLSAxKSAmJiBpSW5kZXggIT0gLTE7Ci0gICAgICBpSW5kZXggPSBzVXBkYXRlZFRleHQuaW5kZXhPZihzRmluZCwgaVByZXZJbmRleCArIGlSZXBsYWNlTGVuKSkKLSAgICB7Ci0gICAgICAvLyBTZXQgdXBkYXRlZCB0ZXh0IGZyb20gdGhlIGZyb250IHBvcnRpb24gKyByZXBsYWNlbWVudCB0ZXh0ICsgYmFjayBwb3J0aW9uCi0gICAgICBzVXBkYXRlZFRleHQgPQotICAgICAgICBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKDAsIGlJbmRleCkKLSAgICAgICAgICArIHNSZXBsYWNlCi0gICAgICAgICAgKyBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKGlJbmRleCArIGlGaW5kTGVuKTsKLQotICAgICAgLy8gU2V0IHRoZSBwcmV2aW91cyBpbmRleCBmaWVsZAotICAgICAgaVByZXZJbmRleCA9IGlJbmRleDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdXBkYXRlZCB0ZXh0IHN0cmluZwotICAgIHJldHVybiBzVXBkYXRlZFRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCBzdHJpbmcgdG8gaGV4IHN0cmluZy4KLSAgICogQHBhcmFtIGRhdGEgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHJldHVybiBoZXggc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9IZXhTdHJpbmcoU3RyaW5nIGRhdGEpCi0gIHsKLSAgICBjaGFyW10gSEVYX0NIQVJTID0KLSAgICAgIHsKLSAgICAgICAgJzAnLAotICAgICAgICAnMScsCi0gICAgICAgICcyJywKLSAgICAgICAgJzMnLAotICAgICAgICAnNCcsCi0gICAgICAgICc1JywKLSAgICAgICAgJzYnLAotICAgICAgICAnNycsCi0gICAgICAgICc4JywKLSAgICAgICAgJzknLAotICAgICAgICAnQScsCi0gICAgICAgICdCJywKLSAgICAgICAgJ0MnLAotICAgICAgICAnRCcsCi0gICAgICAgICdFJywKLSAgICAgICAgJ0YnIH07Ci0KLSAgICAvLyBHZXQgc3RyaW5nIGFzIGJ5dGUgYXJyYXkKLSAgICBieXRlW10gYnl0ZURhdGEgPSBkYXRhLmdldEJ5dGVzKCk7Ci0KLSAgICAvLyBHZXQgbGVuZ3RoCi0gICAgaW50IGxlbmd0aCA9IGJ5dGVEYXRhLmxlbmd0aDsKLQotICAgIC8vIENyZWF0ZSBDaGFyIGJ1ZmZlcgotICAgIGNoYXJbXSBjaGFyQnVmZmVyID0gbmV3IGNoYXJbbGVuZ3RoICogMl07Ci0KLSAgICBpbnQgbmV4dDsKLSAgICBmb3IgKGludCBieXRlQ250ID0gMCwgY2hhckNudCA9IDA7IGJ5dGVDbnQgPCBsZW5ndGg7KQotICAgIHsKLSAgICAgIG5leHQgPSBieXRlRGF0YVtieXRlQ250KytdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTWyhuZXh0ID4+PiA0KSAmIDB4MEZdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTW25leHQgJiAweDBGXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFyQnVmZmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGJ5dGUgYnVmZmVyIHRvIGhleCBzdHJpbmcuCi0gICAqIEBwYXJhbSBkYXRhICBhIGJ5dGUgYXJyYXkuCi0gICAqIEByZXR1cm4gaGV4IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4U3RyaW5nKGJ5dGVbXSBieXRlRGF0YSkKLSAgewotICAgIGNoYXJbXSBIRVhfQ0hBUlMgPQotICAgICAgewotICAgICAgICAnMCcsCi0gICAgICAgICcxJywKLSAgICAgICAgJzInLAotICAgICAgICAnMycsCi0gICAgICAgICc0JywKLSAgICAgICAgJzUnLAotICAgICAgICAnNicsCi0gICAgICAgICc3JywKLSAgICAgICAgJzgnLAotICAgICAgICAnOScsCi0gICAgICAgICdBJywKLSAgICAgICAgJ0InLAotICAgICAgICAnQycsCi0gICAgICAgICdEJywKLSAgICAgICAgJ0UnLAotICAgICAgICAnRicgfTsKLQotCi0gICAgLy8gR2V0IGxlbmd0aAotICAgIGludCBsZW5ndGggPSBieXRlRGF0YS5sZW5ndGg7Ci0KLSAgICAvLyBDcmVhdGUgQ2hhciBidWZmZXIKLSAgICBjaGFyW10gY2hhckJ1ZmZlciA9IG5ldyBjaGFyW2xlbmd0aCAqIDJdOwotCi0gICAgaW50IG5leHQ7Ci0gICAgZm9yIChpbnQgYnl0ZUNudCA9IDAsIGNoYXJDbnQgPSAwOyBieXRlQ250IDwgbGVuZ3RoOykKLSAgICB7Ci0gICAgICBuZXh0ID0gYnl0ZURhdGFbYnl0ZUNudCsrXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1sobmV4dCA+Pj4gNCkgJiAweDBGXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1tuZXh0ICYgMHgwRl07Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBNSU1FIGNoYXJzZXQgZnJvbSBhIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXJzIFN0cmluZyBvZiBIVFRQIGhlYWRlci4KLSAgICogQHJldHVybiB0aGUgTUlNRSBjaGFyc2V0IHN0cmluZy4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBDaGFyc2V0KFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAgIFN0cmluZyBtaW1lQ2hhcnNldCA9IG51bGw7Ci0KLSAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnRvVXBwZXJDYXNlKCk7Ci0gICAgaW50W10gaW5kZXggPSB7IC0xLCAtMSwgLTEgfTsKLSAgICBpbnQgaW5kZXhTID0gbWltZUNoYXJzZXQuaW5kZXhPZigiQ0hBUlNFVCIpOwotICAgIGludCBpbmRleEUgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICBpZiAoaW5kZXhTIDwgMTcpCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgICBpbmRleFMgPSBtaW1lQ2hhcnNldC5pbmRleE9mKCI9IiwgaW5kZXhTICsgNyk7Ci0gICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIGluZGV4UysrOwotICAgIGluZGV4WzBdID0gbWltZUNoYXJzZXQuaW5kZXhPZigiJyIsIGluZGV4Uyk7Ci0gICAgaW5kZXhbMV0gPSBtaW1lQ2hhcnNldC5pbmRleE9mKCJcclxuIiwgaW5kZXhTKTsKLSAgICBpbmRleFsyXSA9IG1pbWVDaGFyc2V0LmluZGV4T2YoIlwiIiwgaW5kZXhTKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaW5kZXhbaV0gIT0gLTEgJiBpbmRleEUgPiBpbmRleFtpXSkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhFID0gaW5kZXhbaV07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluZGV4RSAhPSBJbnRlZ2VyLk1BWF9WQUxVRSkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICBtaW1lQ2hhcnNldC50cmltKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gbWltZUNoYXJzZXQ7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWVzc2FnZSBpcyBhIHNpbXBsZSBTT0FQIG1lc3NhZ2Ugb3Igd2hldGhlciBpdCBpcyBhIFNPQVAgbWVzc2Fnd2Ugd2l0aCBhdHRhY2htZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc011bHRpcGFydFJlbGF0ZWRNZXNzYWdlKFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICB0cnkgCi0gICAgewotICAgICAgLy8gY2hlY2sgaGVhZGVyIGZvciBtaW1lIHZlcnNpb24gYW5kIGJvdW5kYXJ5Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyB0aGVyZSBpcyBubyBjb250ZW50VHlwZSwgY2hlY2sgaWYgdGhlcmUgaXMgYSBib3VuZGFyeSBhdHRyaWJ1dGUKLSAgICAgICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICAgICAgaWYgKChib3VuZGFyeSAhPSBudWxsKSAmJiAoIWJvdW5kYXJ5LmVxdWFscygiIikpKQotICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJtdWx0aXBhcnQvcmVsYXRlZCIpOwotICAgICAgfQotICAgIH0gCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IGZhbHNlOyAKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIGh0dHBIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKGh0dHBIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZShtaW1lSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBtaW1lSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKG1pbWVIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBYTUwgZW5jb2RpbmcgZnJvbSBhIFNPQVAgTWVzc2FnZXMuCi0gICAqIEBwYXJhbSBtZXNzYWdlICBTT0FQIE1lc3NhZ2UgU3RyaW5nLiAKLSAgICogQHJldHVybiBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgWE1MLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WE1MRW5jb2RpbmcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgeG1sRGVmID0gbnVsbDsKLQotICAgIGludCBpbmRleFMgPSBtZXNzYWdlLmluZGV4T2YoIjw/eG1sIik7Ci0gICAgaW50IGluZGV4RSA9IC0xOwotICAgIGlmIChpbmRleFMgIT0gLTEpCi0gICAgewotICAgICAgaW5kZXhFID0gbWVzc2FnZS5pbmRleE9mKCI/PiIsIGluZGV4Uyk7Ci0gICAgICBpZiAoaW5kZXhFID4gaW5kZXhTKQotICAgICAgewotICAgICAgICB4bWxEZWYgPSBtZXNzYWdlLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGluZGV4UyA9IHhtbERlZi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0gIiI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi5zdWJzdHJpbmcoaW5kZXhTICsgOCk7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi50cmltKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZi5sZW5ndGgoKSA+IDMpCi0gICAgewotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoIj0iKTsKLSAgICAgIGlmIChpbmRleFMgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh4bWxEZWYubGVuZ3RoKCkgPiAzKQotICAgIHsKLSAgICAgIFN0cmluZyBlbmQgPSAiXCIiOwotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoZW5kKTsKLSAgICAgIGlmIChpbmRleFMgIT0gMCkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoKGVuZCA9ICInIikpOwotICAgICAgfQotICAgICAgaWYgKGluZGV4UyA9PSAwKQotICAgICAgewotICAgICAgICBpbmRleEUgPSB4bWxEZWYuaW5kZXhPZihlbmQsIDMpOwotICAgICAgICBpZiAoaW5kZXhFICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxLCBpbmRleEUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geG1sRGVmOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgc3RhdGljIFJlc291cmNlQnVuZGxlIGphdmFFbmNvZGluZ1Jlc291cmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfRU5DT0RJTkdfUkVTT1VSQ0UgPQotICAgICJvcmcud3NpLnRlc3QudXRpbC5KYXZhRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9FTkNPRElOR19ERUZBVUxUID0gIlVURi04IjsKLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBKYXZhIFZNIHN1cHBvcnRlZCBjaGFyYWN0ZXIgZW5jb2RpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gbWltZUVuY29kaW5nICBzdHJpbmcgb2YgTUlNRShJQU5BKSBjaGFyYWN0ZXIgZW5jb2RpbmcuIAotICAgKiBAcmV0dXJuIHN0cmluZyBvZiBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IEphdmEgVk0uCi0gICAqIEBhdXRob3IgSy5OYWthZ29tZUBCZWFjb25JVCBKYXBhbiBTSUcgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhRW5jb2RpbmcoU3RyaW5nIG1pbWVFbmNvZGluZykKLSAgewotICAgIGlmIChtaW1lRW5jb2RpbmcgPT0gbnVsbCB8fCBtaW1lRW5jb2RpbmcubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gSkFWQV9FTkNPRElOR19ERUZBVUxUOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoamF2YUVuY29kaW5nUmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YUVuY29kaW5nUmVzb3VyY2UgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoSkFWQV9FTkNPRElOR19SRVNPVVJDRSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gamF2YUVuY29kaW5nUmVzb3VyY2UuZ2V0U3RyaW5nKG1pbWVFbmNvZGluZyk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gbWltZUVuY29kaW5nOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGFuIGFycmF5IHRvIGEgVmVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFycmF5ICB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkIC4KLSAgICogQHJldHVybiBjb252ZXJ0ZWQgVmVjdG9yIChudWxsIGlmIGFycmF5IGlzIG51bGwsIGVtcHR5IGlmIGVtcHR5KS4KLSAgICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCBJQk0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGFycmF5VG9WZWN0b3IoT2JqZWN0W10gYXJyYXkpCi0gIHsKLSAgICBpZiAoYXJyYXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcihhcnJheS5sZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICB2LmFkZChhcnJheVtpXSk7Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICAvKioKLSAgICogRGVzaWduYXRlcyBsZWdhbCB2ZXJzaW9ucyBmb3IgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQKLSAgICogQHBhcmFtIG5hbWUgLSB0aGUgVEFEIG5hbWUKLSAgICogQHBhcmFtIHZlcnNpb24gLSB0aGUgbGVnYWwgdmVyc2lvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHZlcnNpb24pCi0gIHsKLSAgICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKQotICAgICAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zLnB1dChuYW1lLCB2ZXJzaW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENoZWNrcyB0byBlbnN1cmUgdGhhdCB2ZXJzaW9uIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIAotICAgKiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKiBAcGFyYW0gcHJvZmlsZUFzc2VydGlvbnMgLSBhIHByb2ZpbGUgVEFELgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1ZW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkUHJvZmlsZVRBRFZlcnNpb24oUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnMpCi0gIHsKLQotICAgIFN0cmluZyBuYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgIFN0cmluZyB2ZXJzaW9uID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFEVmVyc2lvbigpOwotICAgIAotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKSB7Ci0gICAgICAgU3RyaW5nIHZlcnNpb25zW11bXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBbGxUQURWZXJzaW9ucygpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbih2ZXJzaW9uc1tpXVswXSwgdmVyc2lvbnNbaV1bMV0pOwotICAgIH0KLQotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrVmVyc2lvbk51bWJlcigoU3RyaW5nKSB2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5nZXQobmFtZSksCi0gICAgICAgICAgICAgICAgdmVyc2lvbik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IHZlcnNpb24gbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiAKLSAgICogZG9jdW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICogQHBhcmFtIHN1cHBvcnRlZFZlcnNpb24gLSBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb2YgcHJvZmlsZSBUQUQuCi0gICAqIEBwYXJhbSBhY3R1YWxWZXJzaW9uICAgIC0gYWN0dWFsIHZlcnNpb24gbnVtYmVyIG9mIHByb2ZpbGUgVEFELiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYWN0dWFsIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja1ZlcnNpb25OdW1iZXIoCi0gICAgU3RyaW5nIHN1cHBvcnRlZFZlcnNpb24sCi0gICAgU3RyaW5nIGFjdHVhbFZlcnNpb24pCi0gIHsKLSAgICBib29sZWFuIHZhbGlkVmVyc2lvbiA9IHRydWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3VwcG9ydGVkVmVyc2lvblRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3VwcG9ydGVkVmVyc2lvbiwgIi4iKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBhY3R1YWxWZXJzaW9uVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihhY3R1YWxWZXJzaW9uLCAiLiIpOwotCi0gICAgICB3aGlsZSAoc3VwcG9ydGVkVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkgJiYgdmFsaWRWZXJzaW9uKQotICAgICAgewotICAgICAgICBpbnQgc3VwcG9ydGVkVmVyc2lvblRva2VuID0KLSAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHN1cHBvcnRlZFZlcnNpb25Ub2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICBpZiAoYWN0dWFsVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgYWN0dWFsVmVyc2lvblRva2VuID0KLSAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoYWN0dWFsVmVyc2lvblRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgaWYgKHN1cHBvcnRlZFZlcnNpb25Ub2tlbiA+IGFjdHVhbFZlcnNpb25Ub2tlbikgYnJlYWs7Ci0gICAgICAgICAgZWxzZSB2YWxpZFZlcnNpb24gPSAoc3VwcG9ydGVkVmVyc2lvblRva2VuID49IGFjdHVhbFZlcnNpb25Ub2tlbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHZhbGlkVmVyc2lvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRWZXJzaW9uOwotICB9Ci0gIAotICAvKioKLSAgICogSWRlbnRpZmllcyB0aGUgcm9vdCBwYXJ0IGluIHRoZSBsaXN0IHVzaW5nIHRoZSAic3RhcnQiIGF0dHJpYnV0ZS4KLSAgICogSWYgdGhlICJzdGFydCIgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IHRoZW4gdGhlIGZpcnN0IHBhcnQgaXMgZGVzaWduYXRlZCB0aGUgcm9vdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnQgZmluZFJvb3RQYXJ0KFN0cmluZyBodHRwSGVhZGVycywgQ29sbGVjdGlvbiBwYXJ0cykKLSAgewotICAJTWltZVBhcnQgcm9vdCA9IG51bGw7Ci0gICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICBpZiAoIXBhcnRzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBmaXJzdCBwYXJ0IGluIHRoZSBjb2xsZWN0aW9uCi0gICAgICByb290ID0gKE1pbWVQYXJ0KXBhcnRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAkKLSAgICAgIGlmICgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSkKLSAgICAgIHsKLSAgICAJSXRlcmF0b3IgaSA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgCWJvb2xlYW4gcm9vdE5vdEZvdW5kID0gdHJ1ZTsKLSAgICAJd2hpbGUgKGkuaGFzTmV4dCgpICYmIHJvb3ROb3RGb3VuZCkKLSAgICAJewotICAgIAkgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaS5uZXh0KCk7Ci0gICAgCSAgU3RyaW5nIGhlYWRlcnMgPSBwYXJ0LmdldEhlYWRlcnMoKTsKLSAgICAJICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgIAkgIHsKLSAgICAgICAgICAgIFN0cmluZyBjb250ZW50SWQgPSBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0LmVxdWFscyhjb250ZW50SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByb290ID0gcGFydDsKLQkJCSAgcm9vdE5vdEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgCSAgfQotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotICAJcmV0dXJuIHJvb3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBlbmNvZGVkIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGRlY29kZUJhc2U2NChTdHJpbmcgc3RyKQotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAJQmFzZTY0IGRlY29kZXIgPSBuZXcgQmFzZTY0KCk7Ci0gIAkgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKHN0ci5nZXRCeXRlcygpKTsKLSAgCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSkKLSAgCXsKLSAgCQlyZXR1cm4gbmV3IGJ5dGVbMF07Ci0gIAl9Ci0gIH0KLQotICAvKioKLSAgICogRW5jb2RlcyB0aGUgZ2l2ZW4gYnl0ZSBhcnJheS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZUJhc2U2NChieXRlW10gYnVmZmVyKQotICB7ICAgIAotICAJQmFzZTY0IGVuY29kZXIgPSBuZXcgQmFzZTY0KCk7Ci0gIAlyZXR1cm4gbmV3IFN0cmluZyhlbmNvZGVyLmVuY29kZShidWZmZXIpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gIAlieXRlW10gYnVmZmVyID0gbnVsbDsKLSAgCXRyeQotCXsgCi0gIAkgIGJ1ZmZlciA9IG1lc3NhZ2UuZ2V0Qnl0ZXMoZW5jb2RpbmcpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSkKLQl7Ci0gIAkJcmV0dXJuIG51bGw7Ci0JfQotICAJcmV0dXJuIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnVmZmVyLCBodHRwSGVhZGVycywgZW5jb2RpbmcpOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnl0ZVtdIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0gICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICBBcnJheUxpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgaWYgKGJvdW5kYXJ5ID09IG51bGwpCi0gICAgewotICAgIAkvLyBhc3N1bWUgaXQgaXMgYSBzaW1wbGUgU09BUCBtZXNzYWdlCi0gICAgCXJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICAgIGludFtdIGluZGljZXMgPSBVdGlscy5nZXRCb3VuZGFyeUluZGljZXMobWVzc2FnZSwgYm91bmRhcnkpOwotICAgICAgYm9vbGVhbiByb290Tm90Rm91bmQgPSB0cnVlOwotICAgICAgCi0gICAgICBmb3IgKGludCBpPSBpbmRpY2VzLmxlbmd0aCAtIDI7IGk+PTA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgCXsKLSAgICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgaW5kaWNlc1tpXSk7Ci0gICAgICAgICAgaWYgKChpbmRleCA+IGluZGljZXNbaV0pICYmIChpbmRleCA8IGluZGljZXNbaSsxXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhlIGJvdW5kYXJ5IHN0cmluZyAmIG1pbWUgaGVhZGVycyAoaW5jbHVkZSB0aGUgdHJhaWxpbmcgQ1JMRiBDUkxGKQotICAgICAgICAJU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpXSwgKGluZGV4IC0gaW5kaWNlc1tpXSksICJVUy1BU0NJSSIpOwotICAgICAgICAJU3RyaW5nIGRlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotCi0gICAgICAgIAlpZiAoaSA9PSBpbmRpY2VzLmxlbmd0aCAtMikKLSAgICAgICAgCXsKLSAgICAgICAgCSAgU3RyaW5nIGVuZERlbGltaXRlciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpICsgMV0sIG1lc3NhZ2UubGVuZ3RoIC0gaW5kaWNlc1tpICsgMV0sICJVUy1BU0NJSSIpOwotICAgICAgICAJICBpbnQgaiA9IHN0ci5pbmRleE9mKCJcclxuIiwgMik7Ci0gICAgICAgIAkgIGlmIChqICE9IC0xKQotICAgICAgICAJICAgIGVuZERlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotICAgICAgICAgICAgICBwYXJ0LnNldEJvdW5kYXJ5U3RyaW5ncyhuZXcgU3RyaW5nW117ZGVsaW1pdGVyLCBlbmREZWxpbWl0ZXJ9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCWVsc2UKLSAgICAgICAgCSAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MobmV3IFN0cmluZ1tde2RlbGltaXRlcn0pOwotICAgICAgIAotICAgICAgICAJLy8gdGhlIGhlYWRlcnMKLSAgICAgICAgCVN0cmluZyBoZWFkZXJzID0gc3RyLnN1YnN0cmluZyhkZWxpbWl0ZXIubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKGhlYWRlcnMuc3RhcnRzV2l0aCgiXHJcbiIpKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIC8vIG5vIGhlYWRlcnMgcHJlc2VudAotICAgICAgICAgIAkgIHBhcnQuc2V0SGVhZGVycygiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgCSAgcGFydC5zZXRIZWFkZXJzKGhlYWRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB0aGUgY29udGVudAotICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRJZCA9IFV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoaGVhZGVycywgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IGluZGljZXNbaSsxXSAtIChpbmRleCk7Ci0gICAgICAgICAJYnl0ZVtdIGNvbnRlbnQgPSBuZXcgYnl0ZVtzaXplXTsKLSAgICAgIAkgICAgU3lzdGVtLmFycmF5Y29weShtZXNzYWdlLCBpbmRleCwgY29udGVudCwgMCwgc2l6ZSk7Ci0gICAgICAJICAKLSAgICAgICAgICAgIGlmICgocm9vdE5vdEZvdW5kICYmIChpID09IDApKSB8fAotICAgICAgICAgICAgCSgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSAmJiAoc3RhcnQuZXF1YWxzKGNvbnRlbnRJZCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gcm9vdCBwYXJ0IC0tIGRvIG5vdCBlbmNvZGUKLSAgICAgICAgICAgICAgcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHBhcnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgdHJhbnNmZXJFbmNvZGluZyA9ICBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcpOwotICAgCi0gICAgICAgICAgICAgIGlmICgodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKSAmJiB0cmFuc2ZlckVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKQotICAgICAgICAgICAgICAJcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhcnQuc2V0Q29udGVudChVdGlscy5lbmNvZGVCYXNlNjQoY29udGVudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgICB9Ci0gICAgCX0KLSAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIAl7Ci0gICAgCSAgcmV0dXJuIG51bGw7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGludCBzaXplID0gcGFydHMuc2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IHNpemUtMTsgaT49MDsgaS0tKQotICAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQoKE1pbWVQYXJ0KXBhcnRzLmdldChpKSk7Ci0gICAgfQotICAgIHJldHVybiBtaW1lUGFydHM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1hNTFN0cmluZyhNaW1lUGFydHMgbWltZVBhcnRzKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIEFkZCBtZXNzYWdlIGNvbnRlbnQgd2l0aCBhdHRhY2htZW50cyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMpOwotICAgIHB3LnByaW50KCI+Iik7Ci0KLSAgICBDb2xsZWN0aW9uIHBhcnRMaXN0ID0gbWltZVBhcnRzLmdldFBhcnRzKCk7Ci0gICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMgKyAiPiIpOwotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQotICB7Ci0gIAl0cnkKLQl7Ci0gIAkgIEZpbGVJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oImQ6XFxiLnhtbCIpOwotICAJICBpbnQgaSA9IGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpOwotICAJICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbaV07Ci0gIAkgIGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLSAgCSAgU3RyaW5nIG1lc3NhZ2UgPSBuZXcgU3RyaW5nKGJ1ZmZlcik7Ci0gIAkgIG1lc3NhZ2UgPSBYTUxVdGlscy54bWxSZW1vdmVFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpOwotICAJICBTdHJpbmcgaGVhZGVycyA9IFV0aWxzLmdldEhUVFBIZWFkZXJzKG1lc3NhZ2UpOwotICAJICBNaW1lUGFydHMgcGFydHMgPSBVdGlscy5wYXJzZU11bHRpcGFydFJlbGF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGhlYWRlcnMsIFV0aWxzLkpBVkFfRU5DT0RJTkdfREVGQVVMVCk7Ci0gIAkgIFN5c3RlbS5vdXQucHJpbnRsbihVdGlscy50b1hNTFN0cmluZyhwYXJ0cykpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSl7fQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBbmFseXplckNvbmZpZyBnZXRBbmFseXplckNvbmZpZyhSZXBvcnRlciByZXBvcnRlcikgCi0gIHsKLQlBbmFseXplckNvbmZpZyByZXN1bHQgPSBudWxsOwotCWlmIChyZXBvcnRlciAhPSBudWxsKQotCXsKLQkgIHRyeQotCSAgewotCQlyZXN1bHQgPSByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgewotCQlyZXN1bHQgPSBudWxsOwotCSAgfQotCX0KLQlyZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGU2YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0RMVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSB1dGlsaXR5IGNsYXNzIHRvIGF1dG9tYXRlIFdTREwgcHJvY2Vzc2luZy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFV0aWwKLXsKLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0cyBsaXN0IG9mIHBhcnRzIGZvciB0aGUgZ2l2ZW4gc29hcGJpbmQ6Ym9keSwKLSAgICogYmluZGluZyBvcGVyYXRpb24sIG1lc3NhZ2UsIGFuZCBzdHlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBvcCBhbiBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBtICBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBib2R5IGEgU09BUCBib2R5LgotICAgKiBAcGFyYW0gc3R5bGUgYW4gb3BlcmF0aW9uIHN0eWxlLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBnaXZlbiBzb2FwYmluZDpib2R5LAotICAgKiAgICAgICAgIGJpbmRpbmcgb3BlcmF0aW9uLCBtZXNzYWdlLCBhbmQgc3R5bGUuCi0gICAqLwotICBzdGF0aWMgcHVibGljIExpc3QgZ2V0UGFydHMoCi0gICAgT3BlcmF0aW9uIG9wLAotICAgIE1lc3NhZ2UgbSwKLSAgICBTT0FQQm9keSBib2R5LAotICAgIFN0cmluZyBzdHlsZSkKLSAgewotICAgIC8vCQlpZiBudWxsLCBnZXQgcGFydHMgZnJvbSBtZXNzYWdlIAotICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIC8vIGlmIHJwYyBzdHlsZSBpcyB1c2VkLCB0cnkgdG8gdXNlIHBhcnRPcmRlciBhdHRyaWJ1dGUgZnJvbSBvcGVyYXRpb24KLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIHJldHVybiBtLmdldE9yZGVyZWRQYXJ0cyhvcC5nZXRQYXJhbWV0ZXJPcmRlcmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgIGVsc2UKLSAgICAgIC8vIGNvbnZlcnNlIHBhcnRzIG5hbWUgdG8gcGFydHMgb2JqZWN0cwotICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKGJvZHkuZ2V0UGFydHMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpdGVyYXRlcyBhbGwgaW1wb3J0cyBmcm9tIHRoZSBnaXZlbiBkZWZpbml0aW9uIGFuZCBleHBhbmRzIGFsbAotICAgKiBpbXBvcnRlZCBtZXNzYWdlcywgc2VydmljZSwgcG9ydFR5cGVzLCBhbmQgYmluZGluZ3MgdG8gdGhlIGRlZmluaXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgc3RhdGljIHB1YmxpYyB2b2lkIGV4cGFuZERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBpZiAoZGVmICE9IG51bGwgJiYgZGVmLmdldEltcG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZGVmLmdldEltcG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCB2ID0gKExpc3QpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24oZGVmLCAoSW1wb3J0KSBpdDIubmV4dCgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBpbnRlcm5hbCBtZXRob2QgdG8gZXhwYW5kIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSB0YXJnZXQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gaW0gaW50ZXJuYWwgbWV0aG9kLgotICAgKi8KLSAgc3RhdGljIHByaXZhdGUgdm9pZCBleHBhbmREZWZpbml0aW9uKERlZmluaXRpb24gdGFyZ2V0LCBJbXBvcnQgaW0sIExpc3QgcHJvY2Vzc2VkRGVmaW5pdGlvbnMpCi0gIHsKLSAgICBpZiAoaW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGQgPSBpbS5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoKGQgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhkKSkpCi0gICAgICB7Ci0gICAgCXByb2Nlc3NlZERlZmluaXRpb25zLmFkZChkKTsKLQotICAgICAgICBpZiAoZC5nZXRNZXNzYWdlcygpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgICB0YXJnZXQuYWRkTWVzc2FnZSgoTWVzc2FnZSkgaXQubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZC5nZXRQb3J0VHlwZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHRhcmdldC5hZGRQb3J0VHlwZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0QmluZGluZ3MoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZEJpbmRpbmcoKEJpbmRpbmcpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0U2VydmljZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZFNlcnZpY2UoKFNlcnZpY2UpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IHYgPSAoTGlzdCkgaXQubmV4dCgpOwotICAgICAgICAgIGlmICh2ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgaXQyID0gdi5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24odGFyZ2V0LCAoSW1wb3J0KSBpdDIubmV4dCgpLCBwcm9jZXNzZWREZWZpbml0aW9ucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgZXh0cmFjdHMgcGFydCBmcm9tIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJ0IGEgcGFydCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcnQgZnJvbSB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqLwotICBzdGF0aWMgcHVibGljIFBhcnQgZ2V0UGFydChNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgUGFydCBtZXNQYXJ0ID0gbnVsbDsKLSAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgbWVzUGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCk7Ci0gICAgZWxzZQotICAgICAgbWVzUGFydCA9IG1lc3NhZ2UuZ2V0UGFydChwYXJ0KTsKLSAgICByZXR1cm4gbWVzUGFydDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0lQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNDAzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7Ci0KLS8qKgotICogVGhlIFdTSSBwcm9wZXJ0aWVzIGNhbiBiZSBkZWZpbmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnMuICAKLSAqCi0gKiAgIDEuIFRoZSB3c2kucHJvcGVydGllcyBmaWxlIHdoaWNoIGNhbiBiZSBsb2NhdGVkIGFueXdoZXJlIGluIHRoZSBjbGFzc3BhdGguCi0gKiAgIDIuIFRoZSBzeXN0ZW0gcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAgIDMuIFRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAKLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZSBzZXQgYmFzZWQgb24gdGhpcyBvcmRlcmluZy4gIEZvciBleGFtcGxlLCB0aGUgcHJvcGVydGllcyAKLSAqIGZyb20gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgd2lsbCBiZSByZXBsYWNlZCBieSBwcm9wZXJ0aWVzIGZyb20gdGhlIHN5c3RlbSAKLSAqIHByb3BlcnR5IHNldHRpbmdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKgotICogVGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgY2FuIGJlCi0gKiBzcGVjaWZpZWQgYXMgc3lzdGVtIHByb3BlcnRpZXMgb3IgYXMgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgaW4gYSB0aHJlYWQgCi0gKiBsb2NhbCB2YXJpYWJsZS4gIFN5c3RlbSBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1c2VkIGlmIG9ubHkgb25lIGltcGxlbWVudGF0aW9uCi0gKiBpcyBuZWVkZWQgcGVyIEpWTS4gIElmIHR3byBvciBtb3JlIGltcGxlbWVudGF0aW9ucyBhcmUgbmVlZGVkIHBlciBKVk0sIHRoZW4KLSAqIHRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXQgdXNpbmcgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvcjogUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NJUHJvcGVydGllcwotewotICAvKioKLSAgICogUHJvcGVydGllcyBvYmplY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFByb3BlcnRpZXMgd3NpUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9WQUxJREFUT1JfRkFDVE9SWSA9Ci0gICAgIm9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkgPQotICAgICJ3c2kucHJvZmlsZS52YWxpZGF0b3IuZmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgZG9jdW1lbnQgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudEZhY3RvcnlJbXBsIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0RPQ1VNRU5UX0ZBQ1RPUlkgPSAid3NpLmRvY3VtZW50LmZhY3RvcnkiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IEpBWFAgWE1MIHBhcnNlciBkb2N1bWVudCBmYWN0b3J5IGJ1aWxkZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAib3JnLmFwYWNoZS54ZXJjZXMuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgSkFYUCBYTUwgcGFyc2VyIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAiamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TQ0hFTUEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX1NDSEVNQSA9ICJ3c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWEiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TT0FQX1NDSEVNQSA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTRExfU09BUF9TQ0hFTUEgPQotICAgICJ3c2kuYW5hbHl6ZXIud3NkbHNvYXAuc2NoZW1hIjsKLQotICAvKioKLSAgICogRGVmYXVsdCBXU0RMIE1JTUUgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1dTRExfTUlNRV9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX01JTUVfU0NIRU1BID0KLSAgICAid3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfU09BUF9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1NPQVBfU0NIRU1BID0gIndzaS5hbmFseXplci5zb2FwLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfWE1MX1NDSEVNQSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9YTUxfU0NIRU1BID0gIndzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgd2hpY2ggY29udGFpbnMgV1NJX0hPTUUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTSV9IT01FID0gIndzaS5ob21lIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgZmlsZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9GSUxFTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC53c2kiOwotCi0gIC8qKgotICAqIFRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkTG9jYWwgdGhyZWFkTG9jYWwgPSBuZXcgVGhyZWFkTG9jYWwoKTsKLQotICAvLyBMb2FkIHByb2ZpbGVzIGZpbGUKLSAgc3RhdGljIHsKLSAgICBsb2FkUHJvcGVydGllc0ZpbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIHByb3BlcnRpZXMgZnJvbSB3c2kucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2FkUHJvcGVydGllc0ZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vd3NpUHJvcGVydGllc0ZpbGUubG9hZChpcyk7Ci0KLSAgICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BfRklMRU5BTUUpOwotCi0gICAgICBTdHJpbmcgbmV4dEtleTsKLSAgICAgIEVudW1lcmF0aW9uIGVudW1lcmF0aW9uID0gcmVzb3VyY2VCdW5kbGUuZ2V0S2V5cygpOwotICAgICAgd2hpbGUgKGVudW1lcmF0aW9uLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBuZXh0S2V5ID0gKFN0cmluZykgZW51bWVyYXRpb24ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgd3NpUHJvcGVydGllcy5wdXQobmV4dEtleSwgcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKG5leHRLZXkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgIldBUk5JTkc6ICBDb3VsZCBub3QgcmVhZCAiCi0gICAgICAgICAgKyBQUk9QX0ZJTEVOQU1FCi0gICAgICAgICAgKyAiLiAgIgotICAgICAgICAgICsgIlZlcmlmeSB0aGF0IGl0IGlzIGluIHRoZSBDTEFTU1BBVEguIik7Ci0KLSAgICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwgREVGX1ZBTElEQVRPUl9GQUNUT1JZKTsKLSAgICAgIHdzaVByb3BlcnRpZXMucHV0KFBST1BfRE9DVU1FTlRfRkFDVE9SWSwgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksIERFRl9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoCi0gICAgICAgIFRyYW5zcG9ydEZhY3RvcnkuUFJPUEVSVFlfTkFNRSwKLSAgICAgICAgIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiKTsKLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqIERvIG5vdCBhbGxvdyB0aGlzIG9iamVjdCB0byBiZSBpbnN0YW50aWF0ZWQuCi0gICAqLwotICBwcml2YXRlIFdTSVByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXQgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICogQHJldHVybiB0aGUgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICoKLSAgICAqIEBzZWUgI3NldFRocmVhZExvY2FsUHJvcGVydGllcwotICAgICovCi0gIHB1YmxpYyBzdGF0aWMgUHJvcGVydGllcyBnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHByb3BlcnRpZXMKLSAgICByZXR1cm4gKFByb3BlcnRpZXMpIHRocmVhZExvY2FsLmdldCgpOwotICB9Ci0KLSAgLyoqIAotICAgKiBTZXQgcHJvcGVydGllcyBmb3IgdGhpcyB0aHJlYWQgb25seS4KLSAgICogQHBhcmFtIHByb3BzICBhIFByb3BlcnRpZXMgb2JqZWN0LgotICAgKgotICAgKiBAc2VlICNnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKLSAgewotICAgIC8vIFNhdmUgdGhlIHByb3BlcnRpZXMgYXMgdGhyZWFkIGxvY2FsIHZhcmlhYmxlcwotICAgIHRocmVhZExvY2FsLnNldChwcm9wcyk7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCB0aGUgcHJvcGVydHkgdmFsdWUgZ2l2ZW4gdGhlIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIGEgcHJvcGVydHkgbmFtZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZS4gSWYgbm90IGZvdW5kIHJldHVybiBudWxsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLSAgICBQcm9wZXJ0aWVzIHRocmVhZExvY2FsUHJvcHMgPSBudWxsOwotCi0gICAgLy8gMS4gTG9vayBpbiB0aHJlYWQgbG9jYWwgcHJvcGVydGllcyBmaXJzdAotICAgIGlmICgodGhyZWFkTG9jYWxQcm9wcyA9IGdldFRocmVhZExvY2FsUHJvcGVydGllcygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSB0aHJlYWRMb2NhbFByb3BzLmdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgfQotCi0gICAgLy8gMi4gTmV4dCBsb29rIGluIHN5c3RlbSBwcm9wZXJ0aWVzIAotICAgIGlmIChwcm9wZXJ0eVZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlWYWx1ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIDMuIExhc3QgbG9vayBpbiB0aGUgcHJvcGVydGllcyBmaWxlCi0gICAgaWYgKHByb3BlcnR5VmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVZhbHVlID0gd3NpUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBHZXQgdGhlIHByb3BlcnR5IHZhbHVlIGdpdmVuIHRoZSBwcm9wZXJ0eSBuYW1lLgotICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lICBhIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlLiBJZiBub3QgZm91bmQgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBwcm9wZXJ0eVZhbHVlIHdhcyBub3QgZm91bmQsIHRoZW4gcmV0dXJuIGRlZmF1bHQgdmFsdWUKLSAgICBpZiAoKHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHByb3BlcnR5IHZhbHVlCi0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1bml0IHRlc3QgdGhpcyBjbGFzcy4KLSAgICogQHBhcmFtIGFyZ3MgIHRoZSBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHByb3BlcnR5IGZvciB0aGlzIHRocmVhZAotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCAibWFpbiIpOwotICAgICAgV1NJUHJvcGVydGllcy5zZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMocHJvcHMpOwotCi0gICAgICAvLyBTdGFydCBmb3VyIHRocmVhZHMgdG8gdmVyaWZ5IHRoYXQgdGhlIG11bHRpdGhyZWFkZWQgdXNlIG9mIHRyZWFkIGxvY2FsIHZhcnMgd29ya3MKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGUgbmV3IHRocmVhZAotICAgICAgICAgKG5ldyBUaHJlYWQobmV3IFRocmVhZFRlc3QoInRlc3QiICsgaSkpKS5zdGFydCgpOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2xlZXAKLSAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwKTsKLQotICAgICAgICAgIC8vIERpc3BsYXkgcHJvcGVydGllcywgd2hpY2ggc2hvdWxkIGJlIG1haW4KLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICAiUFJPUF9WQUxJREFUT1JfRkFDVE9SWTogICIKLSAgICAgICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIElubmVyIGNsYXNzIHVzZWQgZm9yIHVuaXQgdGVzdC4KLSAgICovCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIFRocmVhZFRlc3QgZXh0ZW5kcyBUaHJlYWQKLSAgewotICAgIFN0cmluZyBuYW1lOwotCi0gICAgVGhyZWFkVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCBuYW1lKTsKLSAgICAgIFdTSVByb3BlcnRpZXMuc2V0VGhyZWFkTG9jYWxQcm9wZXJ0aWVzKHByb3BzKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlBST1BfVkFMSURBVE9SX0ZBQ1RPUlk6ICAiCi0gICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvWE1MSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjExOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhNTEluZm8KLXsKLSAgLyoqCi0gICAqIEdldCBhZGR0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBhcyBhbiBYTUwgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gYWRkdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvd3NpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTQ4ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMgLyoqCi0jICAqIDxjb3B5cmlnaHQ+Ci0jICAqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzICBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKiA8L2NvcHlyaWdodD4KLSMgICovCi0jCi0jIFByb3BlcnR5IGZpbGUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBmb3IgQ29uZm9ybWFuY2UgVG9vbHMKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEb2N1bWVudCBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLmRvY3VtZW50LmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2ZpbGUgdmFsaWRhdGlvbiBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLnByb2ZpbGUudmFsaWRhdG9yLmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVmZXJlbmNlIHRvIEpBWFAgZG9jdW1lbnQgYnVpbGRlcgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuYXBhY2hlLnhlcmNlcy5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsCi0jamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuZWNsaXBlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyYW5zcG9ydCBjbGFzcyB1c2VkIGJ5IFVEREk0SgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotb3JnLnVkZGk0ai5UcmFuc3BvcnRDbGFzc05hbWU9b3JnLnVkZGk0ai50cmFuc3BvcnQuQXBhY2hlQXhpc1RyYW5zcG9ydAotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTG9jYXRpb24gb2YgWE1MIHNjaGVtYSBkb2N1bWVudHMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBkaXJlY3RvcnkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hPWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZAotd3NpLmFuYWx5emVyLnNvYXAuc2NoZW1hPWh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi13c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWE9aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLXdzaS5hbmFseXplci53c2Rsc29hcC5zY2hlbWE9d3NpLmFuYWx5emVyLndzZGxzb2FwLnNjaGVtYQotd3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYT1odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUwMjkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZC5JbmxpbmVTY2hlbWFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGludGVyZmFjZSB0byBhIHNpbmdsZSBXU0RMIGRvY3VtZW50LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgV1NETERvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERlZmluaXRpb24gZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogRG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50IGxpc3Qgd2l0aCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRWxlbWVudExpc3Qgd3NkbEVsZW1lbnRMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTWFwIG9mIHRhcmdldE5hbWVzcGFjZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvZiBzY2hlbWEgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIE1hcCBzY2hlbWFzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBzY2hlbWFzIHZhbGlkYXRpb24gZXJyb3JzLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIC8qKgotICAgKiBSZWFkIFdTREwgZG9jdW1lbnQgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24gaWYgcHJvYmxlbSByZWFkaW5nIFdTREwgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50KFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQotICAgIHRyeQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMRG9jdW1lbnQuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgIAotCi0gICAgICAvLyBHZXQgdGhlIFdTRExSZWFkZXIKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotCi0gICAgICAvLyBTZXQgZmVhdHVyZXMKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgZmFsc2UpOwotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL3dzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgdHJ1ZSk7Ci0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoCi0gICAgICAgIGNvbS5pYm0ud3NkbC5Db25zdGFudHMuRkVBVFVSRV9JTVBPUlRfRE9DVU1FTlRTLAotICAgICAgICB0cnVlKTsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy93c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX0lNUE9SVF9ET0NVTUVOVFMsdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZU5hbWUpOwotICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHdzZGxSZWFkZXIucmVhZFdTREwoZmlsZU5hbWUsIGRvY3VtZW50KTsKLQotICAgICAgLy8gU2luY2UgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IgaXMgdXNlZCBieSBzZXZlcmFsIGFzc2VydGlvbnMsIHZhbGlkYXRlIGFsbAotICAgICAgLy8gc2NoZW1hcyByaWdodCBhZnRlciBXU0RMIHZhbGlkYXRpb24KLSAgICAgIHZhbGlkYXRlU2NoZW1hcygpOwotCi0gICAgICAvLyBHZXQgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgcmVmZXJlbmNlcwotICAgICAgdGhpcy53c2RsRWxlbWVudExpc3QgPSAoKFdTRExSZWFkZXJJbXBsKSB3c2RsUmVhZGVyKS5nZXRFbGVtZW50TGlzdCgpOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKHdzZGxFbGVtZW50TGlzdC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBjY2UpCi0gICAgewotICAgICAgLy8gU2V0IGVsZW1lbnQgbGlzdCB0byBudWxsCi0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgV1NETCBkb2N1bWVudCBmcm9tIGV4aXN0aW5nIERlZmluaXRpb24gb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVOYW1lIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBEZWZpbml0aW9uIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQoU3RyaW5nIGZpbGVOYW1lLCBEZWZpbml0aW9uIGRlZmluaXRpb25zKQotICB7Ci0gICAgdGhpcy5maWxlTmFtZSA9IGZpbGVOYW1lOwotICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uczsKLSAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKLSAgICBzY2hlbWFzLmNsZWFyKCk7Ci0gICAgc2NoZW1hc1ZhbGlkYXRpb25FcnJvcnMuY2xlYXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gaGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkb2N1bWVudCBsb2NhdGlvbgotICAgIHJldHVybiB0aGlzLmZpbGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZG9jdW1lbnQgZWxlbWVudCBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIGlmIChkb2N1bWVudCA9PSBudWxsICYmIGRlZmluaXRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudChkZWZpbml0aW9ucy5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3c2llKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFsbCB0aGUgcG9ydFR5cGUgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBwb3J0VHlwZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBQb3J0VHlwZXMgZnJvbSB0aGUgUG9ydFR5cGUgbWFwIGZvciB0aGlzIERlZmluaXRpb24KLSAgICByZXR1cm4gKFBvcnRUeXBlW10pIGRlZmluaXRpb25zLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgUG9ydFR5cGVbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbGwgdGhlIGJpbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBiaW5kaW5nIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdbXSBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBCaW5kaW5ncyBmcm9tIHRoZSBCaW5kaW5nIG1hcCBmb3IgdGhpcyBEZWZpbml0aW9uCi0gICAgcmV0dXJuIChCaW5kaW5nW10pIGRlZmluaXRpb25zLmdldEJpbmRpbmdzKCkudmFsdWVzKCkudG9BcnJheSgKLSAgICAgIG5ldyBCaW5kaW5nWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWxsIHRoZSBzZXJ2aWNlIGVsZW1lbnRzIGZyb20gdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2Ygc2VydmljZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlW10gZ2V0U2VydmljZXMoKQotICB7Ci0gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgU2VydmljZXMgZnJvbSB0aGUgU2VydmljZSBtYXAgZm9yIHRoaXMgRGVmaW5pdGlvbgotICAgIHJldHVybiAoU2VydmljZVtdKSBkZWZpbml0aW9ucy5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgU2VydmljZVswXSk7Ci0gIH0KLQotICAvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIChkZWZpbml0aW9ucyA9PSBudWxsKQotICAgICAgPyAiV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgbm90IGZvdW5kLiIKLSAgICAgIDogZGVmaW5pdGlvbnMudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbGlzdC4KLSAgICogQHJldHVybiB0aGUgZWxlbWVudCBsaXN0LgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCBnZXRFbGVtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudExpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNjaGVtYXMgbWFwLgotICAgKiBAcmV0dXJuIGEgbWFwIG9mIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgdmFsdWVzIG9mIHRoZSBzY2hlbWEgZWxlbWVudHMKLSAgICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvYmplY3Qgb2YgdGhhdCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycyBjYXVzZWQgYnkgdGhlIHZhbGlkYXRlU2NoZW1hcygpIHByb2NlZHVyZS4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzVmFsaWRhdGlvbkVycm9yczsgCi0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpbnZva2VzIHRoZSBpbmxpbmUgc2NoZW1hIHZhbGlkYXRvciB3aGljaCB2YWxpZGF0ZXMgZXZlcnkgc2NoZW1hIGVsZW1lbnQgb2YgdGhlIFdTREwuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVTY2hlbWFzKCkKLSAgewotICAgIHNjaGVtYXMuY2xlYXIoKTsKLSAgICBzY2hlbWFzVmFsaWRhdGlvbkVycm9ycy5jbGVhcigpOwotCi0gICAgLyogSU5MSU5FIFNDSEVNQSBWQUxJREFUT1IgKi8KLSAgICBpZiAoZGVmaW5pdGlvbnMgIT0gbnVsbAotICAgICAgJiYgZGVmaW5pdGlvbnMuZ2V0VHlwZXMoKSAhPSBudWxsCi0gICAgICAmJiBkZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSW5saW5lU2NoZW1hVmFsaWRhdG9yIHNjaGVtYVZhbGlkYXRvciA9IG5ldyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IoKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyBzY2hlbWEncyBwYXJlbnQgZWxlbWVudHMKLSAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoMik7Ci0gICAgICBwYXJlbnRzLmFkZChkZWZpbml0aW9ucy5nZXRUeXBlcygpKTsKLSAgICAgIHBhcmVudHMuYWRkKGRlZmluaXRpb25zKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBFeHRlbnNpYmlsaXR5RWxlbWVudFMgb2Ygd3NkbDp0eXBlcwotICAgICAgLy8gc2luY2UgdGhleSBhcmUgcG90ZW50aWFsIHNjaGVtYXMKLSAgICAgIC8vIFNlZSBKYXZhIEFQSXMgZm9yIFdTREwgVjEuMCAoSlNSMTEwKSwgc2VjdGlvbiA0Ci0gICAgICBJdGVyYXRvciBpID0gdGhpcy5kZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGV4dEVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFhNTFRhZ3MuRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIE1hcCBtYXAgPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFZhbGlkYXRpbmcgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgICAgIG1hcCA9IHNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZShleHRFbCwgcGFyZW50cywgZmlsZU5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGV4Y2VwdGlvbiB0byB0aGUgZXJyb3JzIGxpc3QKLSAgICAgICAgICAgIHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKG1hcCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFkZGluZyByZXR1cm5lZCBYU01vZGVsIHRvIHNjaGVtYXMgbWFwCi0gICAgICAgICAgICBzY2hlbWFzLnB1dEFsbChtYXApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZS4KLSAgICogQHBhcmFtIGFyZ3MgZnJvbSBjb21tYW5kIGxpbmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoYXJnc1swXSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4od3NkbERvY3VtZW50LnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnRvU3RyaW5nKCk7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRWxlbWVudExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVhNzdkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBXU0RMIGVsZW1lbnQgbGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50TGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiBXU0RMIGVsZW1lbnRzIHdpdGggdGhlaXIgbG9jYXRpb24uCi0gICAqLwotICBIYXNoTWFwIHdzZGxFbGVtZW50TGlzdCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqCi0gICAqIFdTREwgZWxlbWVudCBsb2NhdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgZWxlbWVudCB3aXRoIGxvY2F0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgICAgICBhIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnQoT2JqZWN0IHdzZGxFbGVtZW50LCBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudExpc3QucHV0KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbihPYmplY3Qgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gKEVsZW1lbnRMb2NhdGlvbikgdGhpcy53c2RsRWxlbWVudExpc3QuZ2V0KHdzZGxFbGVtZW50KTsKLSAgfQotCi0gIC8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZyBzdHJpbmcgPSAiV1NETEVsZW1lbnRMaXN0OiBcbiI7Ci0KLSAgICAvLyBHZXQgbGlzdCBlbnRyaWVzICh2YWx1ZXM/KQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdGhpcy53c2RsRWxlbWVudExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIEFkZCBlYWNoIGVudHJ5IGluIHRoZSBsaXN0IHRvIHRoZSBzdHJpbmcKLSAgICBFbGVtZW50TG9jYXRpb24gd3NkbEVsZW1lbnRMb2NhdGlvbjsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCB3c2RsRWxlbWVudCA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgaWYgKHdzZGxFbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHN0cmluZyArPSAiICAiICsgd3NkbEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiOwotICAgICAgICBpZiAoKHdzZGxFbGVtZW50TG9jYXRpb24gPQotICAgICAgICAgIChFbGVtZW50TG9jYXRpb24pIHdzZGxFbGVtZW50TGlzdC5nZXQod3NkbEVsZW1lbnQpKQotICAgICAgICAgID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIm51bGxcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIiAgIgotICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRDbGFzcygpLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiOiAiCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpCi0gICAgICAgICAgICArICIsICIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnRMb2NhdGlvbi5nZXRDb2x1bW5OdW1iZXIoKQotICAgICAgICAgICAgKyAiXG4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZjNGM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFJlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWFDb25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5YUGF0aFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsIGluIFdTREw0Si4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWFkZXJJbXBsIGV4dGVuZHMgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbAotewotICAvLyBXU0RMIGVsZW1lbnQgbGlzdC4KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3QgPSBuZXcgV1NETEVsZW1lbnRMaXN0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VEZWZpbml0aW9ucyhqYXZhLmxhbmcuU3RyaW5nLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLnV0aWwuTWFwKQotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gcGFyc2VEZWZpbml0aW9ucygKLSAgICBTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLAotICAgIEVsZW1lbnQgZGVmRWwsCi0gICAgTWFwIGltcG9ydGVkRGVmcykKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0JICBEZWZpbml0aW9uIGRlZiA9IG51bGw7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETFJlYWRlckltcGwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICBkZWYgPQotICAgICAgc3VwZXIucGFyc2VEZWZpbml0aW9ucyhkb2N1bWVudEJhc2VVUkksIGRlZkVsLCBpbXBvcnRlZERlZnMpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGRlZkVsLCBkZWYpOwotCi0KLQl9Ci1jYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gIAotICAgIHJldHVybiBkZWY7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUltcG9ydChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24sIGphdmEudXRpbC5NYXApCi0gICAqLwotICBwcm90ZWN0ZWQgSW1wb3J0IHBhcnNlSW1wb3J0KEVsZW1lbnQgZWxlbWVudCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNYXAgbWFwKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICAvKmJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICBpZiAoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpIT1udWxsKXsKLSAgICAJRmlsZSBmID0gbmV3IEZpbGUoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAJaWYgKGYuZ2V0UGFyZW50KCkhPW51bGwgJiYgaW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpIT1udWxsKXsJCQotICAgIAkgICBmID0gbmV3IEZpbGUoZi5nZXRQYXJlbnQoKSsiLyIraW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpKTsKLSAgICAJICAgCi0gICAgCX0KLSAgICB9IGVsc2Ugd2FzRXggPSBmYWxzZTsKLSAgICAgIAotICAgIEltcG9ydCBpbXBvcnREZWYgPSBzdXBlci5wYXJzZUltcG9ydChpbXBvcnRFbCwgZGVmLCBpbXBvcnRlZERlZnMpOwotICAgIAotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChpbXBvcnRFbCwgaW1wb3J0RGVmKTsKLSAgICAKLSAgICByZXR1cm4gaW1wb3J0RGVmOyovCi0KLSAgICAvKkltcG9ydCBpbXBvcnQxID0gZGVmaW5pdGlvbi5jcmVhdGVJbXBvcnQoKTsKLSAgICBTdHJpbmcgcyA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibmFtZXNwYWNlIik7Ci0gICAgU3RyaW5nIHMxID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJsb2NhdGlvbiIpOwotICAgIGlmIChzICE9IG51bGwpCi0gICAgCWltcG9ydDEuc2V0TmFtZXNwYWNlVVJJKHMpOwotICAgIGlmIChzMSAhPSBudWxsKSB7Ci0gICAgCWlmIChpbXBvcnREb2N1bWVudHMpIHsKLSAgICAJCVN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgCQl0cnkgewotICAgIAotICAgIAkJCVVSTCB1cmwxID0gczIgPT0gbnVsbCA/IG51bGwgOiBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgczIpOwotICAgIAkJCVVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgIAkJCUlucHV0U3RyZWFtIGlucHV0c3RyZWFtID0KLSAgICAJCQkJU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzSW5wdXRTdHJlYW0odXJsKTsKLSAgICAJCQlpbnB1dHN0cmVhbS5jbG9zZSgpOwotICAgIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAJCQkvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgCQkJYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAJCQlyZXR1cm4gaW1wb3J0MTsKLSAgICAJCX0gY2F0Y2ggKFRocm93YWJsZSBleCkgewotICAgIAkJCXRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgIAkJCQkiT1RIRVJfRVJST1IiLAotICAgIAkJCQkiVW5hYmxlIHRvIHJlc29sdmUgaW1wb3J0ZWQgZG9jdW1lbnQgYXQgJyIgKyBzMSArICInLiIsCi0gICAgCQkJCWV4KTsKLSAgICAJCX0KLSAgICAKLSAgICAJfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0RGVmID0gc3VwZXIucGFyc2VJbXBvcnQoZWxlbWVudCwgZGVmaW5pdGlvbiwgbWFwKTsKLSAgICBhZGRFbGVtZW50VG9MaXN0KGVsZW1lbnQsIGltcG9ydERlZik7Ki8KLSAgICBJbXBvcnQgaW1wb3J0MSA9IGRlZmluaXRpb24uY3JlYXRlSW1wb3J0KCk7Ci0gICAgU3RyaW5nIHMgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZWxlbWVudCwgIm5hbWVzcGFjZSIpOwotICAgIFN0cmluZyBzMSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibG9jYXRpb24iKTsKLSAgICBpZiAocyAhPSBudWxsKQotICAgICAgaW1wb3J0MS5zZXROYW1lc3BhY2VVUkkocyk7Ci0gICAgLy8gQUREOiBjaGVjayAibG9jYXRpb24iIGF0dHJpYnV0ZSBmb3IgZW1wdHkgCi0gICAgLy8gc3RyaW5nIHRvIHByZXZlbnQgc2VsZi1kZWZlbml0aW9uIGFzc2lnbmluZwotICAgIGlmICgoczEgIT0gbnVsbCkgJiYgKHMxLmxlbmd0aCgpID4gMCkpCi0gICAgewotICAgICAgaW1wb3J0MS5zZXRMb2NhdGlvblVSSShzMSk7Ci0gICAgICBpZiAoaW1wb3J0RG9jdW1lbnRzKQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uMSA9IG51bGw7Ci0gICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0gPSBudWxsOwotICAgICAgICAgIElucHV0U291cmNlIGlucHV0c291cmNlID0gbnVsbDsKLSAgICAgICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgICAgICBpZiAobG9jICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzb3VyY2UgPSBsb2MuZ2V0SW1wb3J0SW5wdXRTb3VyY2UoczIsIHMxKTsKLSAgICAgICAgICAgIFN0cmluZyBzMyA9IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgIGRlZmluaXRpb24xID0gKERlZmluaXRpb24pIG1hcC5nZXQoczMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgVVJMIHVybDEgPSBzMiA9PSBudWxsID8gbnVsbCA6IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCBzMik7Ci0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSAoRGVmaW5pdGlvbikgbWFwLmdldCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbjEgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLQotICAgICAgICAgICAgICAgIGlucHV0c3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgICAgICAgICAgICAgYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0MTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBpbnB1dHNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dHN0cmVhbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbnB1dHNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciCi0gICAgICAgICAgICAgICAgICArIHMxCi0gICAgICAgICAgICAgICAgICArICInIgotICAgICAgICAgICAgICAgICAgKyAoczIgIT0gbnVsbCA/ICIsIHJlbGF0aXZlIHRvICciICsgczIgKyAiJy4iIDogIi4iKSk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudChpbnB1dHNvdXJjZSwgczEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnRUb0xpc3QoZWxlbWVudCwgaW1wb3J0MSk7Ci0gICAgICAgICAgICAgIHJldHVybiBpbXBvcnQxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlucHV0c3RyZWFtICE9IG51bGwpCi0gICAgICAgICAgICAgIGlucHV0c3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGVsZW1lbnQyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9pZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgLy8gICAgIlJldHJpZXZpbmcgZG9jdW1lbnQgYXQgJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIHMxCi0gICAgICAgICAgICAgIC8vICAgICAgKyAiJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIChzMiAhPSBudWxsID8gIiwgcmVsYXRpdmUgdG8gJyIgKyBzMiArICInLiIgOiAiLiIpKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHM0ID0KLSAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyB1cmwgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyBzMQotICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSByZWFkV1NETChzNCwgZWxlbWVudDIsIG1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gUU5hbWVVdGlscy5uZXdRTmFtZShlbGVtZW50Mik7Ci0gICAgICAgICAgICAgIGlmIChTY2hlbWFDb25zdGFudHMuWFNEX1FOQU1FX0xJU1QuY29udGFpbnMocW5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV1NETEZhY3Rvcnkgd3NkbGZhY3RvcnkgPQotICAgICAgICAgICAgICAgICAgZmFjdG9yeUltcGxOYW1lID09IG51bGwKLSAgICAgICAgICAgICAgICAgICAgPyBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0gICAgICAgICAgICAgICAgICAgIDogV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoZmFjdG9yeUltcGxOYW1lKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMSA9IHdzZGxmYWN0b3J5Lm5ld0RlZmluaXRpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoZXh0UmVnICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXRFeHRlbnNpb25SZWdpc3RyeShleHRSZWcpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzNSA9Ci0gICAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IHVybCA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gczEKLSAgICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXREb2N1bWVudEJhc2VVUkkoczUpOwotICAgICAgICAgICAgICAgIC8qIERvbid0IGFkZCB0eXBlcyBlbGVtZW50IHNpbmNlIGl0IGRvZXNuJ3QgZXhpc3QuICBBZGRpbmcgaXQgY2F1c2VzIHByb2JsZW1zCi0gICAgICAgICAgICAgICAgICogc2luY2UgaXQgd2lsbCBhZGQgYSB0eXBlcyBlbGVtZW50IGZvciBwcm9jZXNzaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QuCi0gICAgICAgICAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uMS5jcmVhdGVUeXBlcygpOwotICAgICAgICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQgPQotICAgICAgICAgICAgICAgIAluZXcgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgdW5rbm93bmV4dGVuc2liaWxpdHllbGVtZW50LnNldEVsZW1lbnQoZWxlbWVudDIpOwotICAgICAgICAgICAgICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgICAgICAgICAgICAgIAl1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGRlZmluaXRpb24xLnNldFR5cGVzKHR5cGVzKTsKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSAhPSBudWxsKQotICAgICAgICAgICAgaW1wb3J0MS5zZXREZWZpbml0aW9uKGRlZmluaXRpb24xKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbGV4Y2VwdGlvbi5zZXRMb2NhdGlvbihYUGF0aFV0aWxzLmdldFhQYXRoRXhwckZyb21Ob2RlKGVsZW1lbnQpKTsKLSAgICAgICAgICB0aHJvdyB3c2RsZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdGhyb3dhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgczEgKyAiJy4iLAotICAgICAgICAgICAgdGhyb3dhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKEVsZW1lbnQgZWxlbWVudDEgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgIGVsZW1lbnQxICE9IG51bGw7Ci0gICAgICBlbGVtZW50MSA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50MSkpCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgZWxlbWVudDEpKQotICAgICAgICBpbXBvcnQxLnNldERvY3VtZW50YXRpb25FbGVtZW50KGVsZW1lbnQxKTsKLSAgICAgIGVsc2UKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKGVsZW1lbnQxKTsKLQotICAgIHJldHVybiBpbXBvcnQxOwotCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVR5cGVzKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlcyBwYXJzZVR5cGVzKEVsZW1lbnQgdHlwZXNFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFR5cGVzIHR5cGVzID0gc3VwZXIucGFyc2VUeXBlcyh0eXBlc0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHR5cGVzRWwsIHR5cGVzKTsKLQotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZyhvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBwYXJzZUJpbmRpbmcoRWxlbWVudCBiaW5kaW5nRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBzdXBlci5wYXJzZUJpbmRpbmcoYmluZGluZ0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdFbCwgYmluZGluZyk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZ09wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb24oCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBUaGUgZm9sbG93IHRyeS1jYXRjaCB3YXMgYWRkZWQgdG8gZGV0ZWN0IHdoZW4gYSBkdXBsaWNhdGUgb3BlcmF0aW9uIG5hbWUgd2FzIGRldGVjdGVkCi0gICAgdHJ5Ci0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9Ci0gICAgICAgIHN1cGVyLnBhcnNlQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgIH0KLQotICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICAgIGlmIChpYWUuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIkR1cGxpY2F0ZSIpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0KLSAgICAgICAgICBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIGRlZik7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgaWFlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdPcGVyYXRpb25FbCwgYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdJbnB1dChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IHBhcnNlQmluZGluZ0lucHV0KAotICAgIEVsZW1lbnQgYmluZGluZ0lucHV0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBzdXBlci5wYXJzZUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nSW5wdXRFbCwgYmluZGluZ0lucHV0KTsKLQotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KAotICAgIEVsZW1lbnQgYmluZGluZ091dHB1dEVsLAotICAgIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPQotICAgICAgc3VwZXIucGFyc2VCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nT3V0cHV0RWwsIGJpbmRpbmdPdXRwdXQpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdGYXVsdChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0ZhdWx0IHBhcnNlQmluZGluZ0ZhdWx0KAotICAgIEVsZW1lbnQgYmluZGluZ0ZhdWx0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBzdXBlci5wYXJzZUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nRmF1bHRFbCwgYmluZGluZ0ZhdWx0KTsKLQotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU1lc3NhZ2Uob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgcGFyc2VNZXNzYWdlKEVsZW1lbnQgbXNnRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IHN1cGVyLnBhcnNlTWVzc2FnZShtc2dFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChtc2dFbCwgbXNnKTsKLQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVBhcnQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIC8vUGFydCBwYXJ0ID0gc3VwZXIucGFyc2VQYXJ0KHBhcnRFbCwgZGVmKTsKLQotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIC8vIFdTLUk6IFRoZSB0cnktY2F0Y2ggd2FzIGFkZGVkIGZvciBXU0kyNDE2Ci0gICAgUU5hbWUgZWxlbWVudE5hbWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9Ci0gICAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgIHBhcnRFbCwKLSAgICAgICAgICBDb25zdGFudHMuQVRUUl9FTEVNRU5ULAotICAgICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgZGVmKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJlZml4ZWRWYWx1ZSA9Ci0gICAgICAgIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsIENvbnN0YW50cy5BVFRSX0VMRU1FTlQpOwotICAgICAgaW50IGluZGV4ID0gcHJlZml4ZWRWYWx1ZS5pbmRleE9mKCc6Jyk7Ci0gICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gcHJlZml4ZWRWYWx1ZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQotICAgICAgZWxlbWVudE5hbWUgPSBuZXcgUU5hbWUobG9jYWxQYXJ0KTsKLSAgICB9Ci0KLSAgICBRTmFtZSB0eXBlTmFtZSA9Ci0gICAgICBET01VdGlscy5nZXRRdWFsaWZpZWRBdHRyaWJ1dGVWYWx1ZSgKLSAgICAgICAgcGFydEVsLAotICAgICAgICBDb25zdGFudHMuQVRUUl9UWVBFLAotICAgICAgICBDb25zdGFudHMuRUxFTV9NRVNTQUdFLAotICAgICAgICBmYWxzZSwKLSAgICAgICAgZGVmKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0RWxlbWVudE5hbWUoZWxlbWVudE5hbWUpOwotICAgIH0KLQotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0VHlwZU5hbWUodHlwZU5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocGFydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgcGFyc2VFeHRlbnNpYmlsaXR5QXR0cmlidXRlcyhwYXJ0RWwsIFBhcnQuY2xhc3MsIHBhcnQsIGRlZik7Ci0vLyAgICBNYXAgZXh0ZW5zaW9uQXR0cmlidXRlcyA9IHBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpOwotLy8gICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5wdXRBbGwoZ2V0UGFydEF0dHJpYnV0ZXMocGFydEVsLCBkZWYpKTsKLQotICAgIC8vIE5lZWQgdG8gZG8gc29tZXRoaW5nIGhlcmUgdG8gbG9jYXRlIHBhcnQgZGVmaW5pdGlvbi4KLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChwYXJ0RWwsIHBhcnQpOwotCi0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVBvcnRUeXBlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBQb3J0VHlwZSBwYXJzZVBvcnRUeXBlKEVsZW1lbnQgcG9ydFR5cGVFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gc3VwZXIucGFyc2VQb3J0VHlwZShwb3J0VHlwZUVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHBvcnRUeXBlRWwsIHBvcnRUeXBlKTsKLQotICAgIHJldHVybiBwb3J0VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlT3BlcmF0aW9uKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuUG9ydFR5cGUsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb24gcGFyc2VPcGVyYXRpb24oCi0gICAgRWxlbWVudCBvcEVsLAotICAgIFBvcnRUeXBlIHBvcnRUeXBlLAotICAgIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBPcGVyYXRpb24gb3AgPSBzdXBlci5wYXJzZU9wZXJhdGlvbihvcEVsLCBwb3J0VHlwZSwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChvcEVsLCBvcCk7Ci0KLSAgICByZXR1cm4gb3A7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVNlcnZpY2Uob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIFNlcnZpY2UgcGFyc2VTZXJ2aWNlKEVsZW1lbnQgc2VydmljZUVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gc3VwZXIucGFyc2VTZXJ2aWNlKHNlcnZpY2VFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChzZXJ2aWNlRWwsIHNlcnZpY2UpOwotCi0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVBvcnQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIFBvcnQgcGFyc2VQb3J0KEVsZW1lbnQgcG9ydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFBvcnQgcG9ydCA9IHN1cGVyLnBhcnNlUG9ydChwb3J0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QocG9ydEVsLCBwb3J0KTsKLQotICAgIHJldHVybiBwb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZhLmxhbmcuQ2xhc3MsIG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBFeHRlbnNpYmlsaXR5RWxlbWVudCBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgIENsYXNzIHBhcmVudFR5cGUsCi0gICAgRWxlbWVudCBlbCwKLSAgICBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCA9Ci0gICAgICBzdXBlci5wYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KHBhcmVudFR5cGUsIGVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGVsLCBleHRFbGVtZW50KTsKLQotICAgIHJldHVybiBleHRFbGVtZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VJbnB1dChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgSW5wdXQgcGFyc2VJbnB1dChFbGVtZW50IGlucHV0RWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBJbnB1dCBpbnB1dCA9IHN1cGVyLnBhcnNlSW5wdXQoaW5wdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChpbnB1dEVsLCBpbnB1dCk7Ci0KLSAgICByZXR1cm4gaW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU91dHB1dChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgT3V0cHV0IHBhcnNlT3V0cHV0KEVsZW1lbnQgb3V0cHV0RWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBPdXRwdXQgb3V0cHV0ID0gc3VwZXIucGFyc2VPdXRwdXQob3V0cHV0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qob3V0cHV0RWwsIG91dHB1dCk7Ci0KLSAgICByZXR1cm4gb3V0cHV0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VGYXVsdChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgRmF1bHQgcGFyc2VGYXVsdChFbGVtZW50IGZhdWx0RWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBGYXVsdCBmYXVsdCA9IHN1cGVyLnBhcnNlRmF1bHQoZmF1bHRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChmYXVsdEVsLCBmYXVsdCk7Ci0KLSAgICByZXR1cm4gZmF1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNnZXREb2N1bWVudChvcmcueG1sLnNheC5JbnB1dFNvdXJjZSwgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudCBnZXREb2N1bWVudChJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIGRlc2MpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIENsYXNzTG9hZGVyIGN1cnJlbnRMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotICAgIHRyeQotCXsKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFdTRExSZWFkZXJJbXBsLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAkKLQkKLSAgCSAgLy9Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPQotICAgICAgICBuZXcgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsKCk7Ci0KLSAgICAgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0gICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQotICAgICAgcmV0dXJuIGRvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgICAgICBXU0RMRXhjZXB0aW9uLlBBUlNFUl9FUlJPUiwKLSAgICAgICAgIlByb2JsZW0gcGFyc2luZyAnIiArIGRlc2MgKyAiJy4iLAotICAgICAgICB0KTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLSAgICB9ICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbGVtZW50IGxpc3QuCi0gICAqIEByZXR1cm4gdGhlIGVsZW1lbnQgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudExpc3QgZ2V0RWxlbWVudExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnRMaXN0OwotICB9Ci0KLSAgLyoqIAotICAgKiBBZGQgV1NETCBlbGVtZW50IHRvIGVsZW1lbnQgbGlzdC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGRFbGVtZW50VG9MaXN0KEVsZW1lbnQgZWxlbWVudCwgT2JqZWN0IHdzZGxFbGVtZW50KQotICB7Ci0gICAgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTZWUgaWYgdGhlIGVsZW1lbnQgb2JqZWN0IGlzIGFuIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkVsZW1lbnRJbXBsCi0gICAgICBFbGVtZW50SW1wbCBlbGVtZW50SW1wbCA9IChFbGVtZW50SW1wbCkgZWxlbWVudDsKLQotICAgICAgLy8gSWYgaXQgaXMsIHRoZW4gZ2V0IHRoZSBlbGVtZW50IGxvY2F0aW9uIGluZm9ybWF0aW9uCi0gICAgICBlbGVtZW50TG9jYXRpb24gPQotICAgICAgICAoRWxlbWVudExvY2F0aW9uKSBlbGVtZW50SW1wbC5nZXRVc2VyRGF0YSgpOwotCi0gICAgICAvLyBBZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgIHRoaXMud3NkbEVsZW1lbnRMaXN0LmFkZEVsZW1lbnQod3NkbEVsZW1lbnQsIGVsZW1lbnRMb2NhdGlvbik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpCi0gICAgewotICAgICAgLy8gQUREOiBTaG91bGQgd2UgYWRkIHRoZSBlbGVtZW50IHdpdGggYSBudWxsIG9yIHplcm8gbG9jYXRpb24/Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgd2hlbiBhIFdTREwgZG9jdW1lbnQgY29udGFpbnMgZHVwbGljYXRlIG9wZXJhdGlvbiBuYW1lcy4KLSAgICogSXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIHBhcnNlQmluZGluZ09wZXJhdGlvbiBtZXRob2QsIGV4Y2VwdCB0aGF0IGl0IHdpbGwKLSAgICoganVzdCBmaW5kIHRoZSBmaXJzdCBvcGVyYXRpb24gdGhhdCBtYXRjaGVzIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIHBhcnNlQmluZGluZ09wZXJhdGlvbldpdGhEdXBsaWNhdGVOYW1lcygKLSAgICBFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25FbCwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZGVmLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBTdHJpbmcgbmFtZSA9Ci0gICAgICBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ09wZXJhdGlvbkVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoYmluZGluZ09wZXJhdGlvbkVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU5QVVQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ0lucHV0KHBhcnNlQmluZGluZ0lucHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PVVRQVVQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChwYXJzZUJpbmRpbmdPdXRwdXQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0ZBVUxULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEJpbmRpbmdGYXVsdChwYXJzZUJpbmRpbmdGYXVsdCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgICAgICAgIHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoQmluZGluZ09wZXJhdGlvbi5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgIFN0cmluZyBpbnB1dE5hbWUgPSAoYmluZGluZ0lucHV0ICE9IG51bGwgPyBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0gICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9Ci0gICAgICAgIChiaW5kaW5nT3V0cHV0ICE9IG51bGwgPyBiaW5kaW5nT3V0cHV0LmdldE5hbWUoKSA6IG51bGwpOwotCi0gICAgICAvL09wZXJhdGlvbiBvcCA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbihuYW1lLCBpbnB1dE5hbWUsIG91dHB1dE5hbWUpOwotICAgICAgLy8gR2V0IGFsbCBvcGVyYXRpb25zLCBhbmQgdGhlbiBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBtYXRjaGVzCi0gICAgICBPcGVyYXRpb24gb3AgPSBudWxsLCBjaGVja09wZXJhdGlvbjsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpICYmIG9wID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgbmV4dCBvcGVyYXRpb24KLSAgICAgICAgY2hlY2tPcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBvcGVyYXRpb24gbmFtZSwgaW5wdXQgbmFtZSwgYW5kIG91dHB1dCBuYW1lCi0gICAgICAgIFN0cmluZyBjaGVja05hbWUgPSBjaGVja09wZXJhdGlvbi5nZXROYW1lKCk7Ci0gICAgICAgIFN0cmluZyBjaGVja0lucHV0TmFtZSA9Ci0gICAgICAgICAgKGNoZWNrT3BlcmF0aW9uLmdldElucHV0KCkgPT0gbnVsbAotICAgICAgICAgICAgPyBudWxsCi0gICAgICAgICAgICA6IGNoZWNrT3BlcmF0aW9uLmdldElucHV0KCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgU3RyaW5nIGNoZWNrT3V0cHV0TmFtZSA9Ci0gICAgICAgICAgKGNoZWNrT3BlcmF0aW9uLmdldE91dHB1dCgpID09IG51bGwKLSAgICAgICAgICAgID8gbnVsbAotICAgICAgICAgICAgOiBjaGVja09wZXJhdGlvbi5nZXRPdXRwdXQoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIC8vIElmIHRoZSBuYW1lcyBtYXRjaCwgdGhlbiB0aGF0IG9wZXJhdGlvbgotICAgICAgICBpZiAoKGNoZWNrTmFtZSAhPSBudWxsICYmIGNoZWNrTmFtZS5lcXVhbHMobmFtZSkpCi0gICAgICAgICAgJiYgKChjaGVja0lucHV0TmFtZSAhPSBudWxsICYmIGNoZWNrSW5wdXROYW1lLmVxdWFscyhpbnB1dE5hbWUpKQotICAgICAgICAgICAgfHwgKGNoZWNrSW5wdXROYW1lID09IG51bGwgJiYgaW5wdXROYW1lID09IG51bGwpKQotICAgICAgICAgICYmICgoY2hlY2tPdXRwdXROYW1lICE9IG51bGwgJiYgY2hlY2tPdXRwdXROYW1lLmVxdWFscyhvdXRwdXROYW1lKSkKLSAgICAgICAgICAgIHx8IChjaGVja091dHB1dE5hbWUgPT0gbnVsbCAmJiBvdXRwdXROYW1lID09IG51bGwpKSkKLSAgICAgICAgewotICAgICAgICAgIG9wID0gY2hlY2tPcGVyYXRpb247Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wID0gZGVmLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgICBvcC5zZXROYW1lKG5hbWUpOwotICAgICAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24ob3ApOwotICAgICAgfQotCi0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldE9wZXJhdGlvbihvcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLSAgCi0gcHJvdGVjdGVkIEV4dGVuc2liaWxpdHlFbGVtZW50IHBhcnNlU2NoZW1hKENsYXNzIGNjYywgRWxlbWVudCBlbGVtLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLXsKLSAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSBudWxsOwotICAgZXh0RWxlbSA9IHN1cGVyLnBhcnNlU2NoZW1hKGNjYywgZWxlbSwgZGVmKTsKLQotICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgIGFkZEVsZW1lbnRUb0xpc3QoZWxlbSwgZXh0RWxlbSk7Ci0gIHJldHVybiBleHRFbGVtOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTdiNjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExVdGlscwotewotCi0gIC8qKgotICAgKiBNZXRob2QgaXNScGNMaXRlcmFsLgotICAgKiBAcGFyYW0gYmluZGluZ1N0eWxlIGEgYmluZGluZyBzdHlsZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbiBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBiaW5kaW5nIGlzIHJwYyBsaXRlcmFsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnBjTGl0ZXJhbCgKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlLAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQsCi0gICAgICBiaW5kaW5nU3R5bGUsCi0gICAgICBvcGVyYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RvY0xpdGVyYWwuCi0gICAqIEBwYXJhbSBiaW5kaW5nU3R5bGUgIHRoZSBiaW5kaW5nIHN0eWxlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGJpbmRpbmcgaXMgZG9jdW1lbnQgbGl0ZXJhbC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb2NMaXRlcmFsKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gY2hlY2tTdHlsZUFuZFVzZSgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCwKLSAgICAgIGJpbmRpbmdTdHlsZSwKLSAgICAgIG9wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGNoZWNrU3R5bGVBbmRVc2UuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgU3RyaW5nIGNoZWNrU3R5bGUsCi0gICAgU3RyaW5nIGNoZWNrVXNlLAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYm9vbGVhbiBzdHlsZUZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBzdHlsZUFuZFVzZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXh0IGVsZW1lbnRzLCB0aGVuIGNoZWNrIGFnYWluc3QgYmluZGluZyBzdHlsZQotICAgIGlmICgoc29hcE9wZXJhdGlvbiA9PSBudWxsKSB8fCAoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIGlmIChjaGVja1N0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICBzdHlsZUZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGNoZWNrU3R5bGUuZXF1YWxzKHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKSkpCi0gICAgICAgIHN0eWxlRm91bmQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHN0eWxlIGZvdW5kIHRoZW4gY2hlY2sgdXNlCi0gICAgaWYgKHN0eWxlRm91bmQpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldElucHV0U29hcEJvZHkoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzb2FwYmluZDpib2R5LCB0aGVuIGNoZWNrIGFnYWluc3QgZGVmYXVsdCB1c2UgdmFsdWUKLSAgICAgIGlmICgoc29hcEJvZHkgPT0gbnVsbCkgfHwgKHNvYXBCb2R5LmdldFVzZSgpID09IG51bGwpKQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVBbmRVc2VGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6YmluZGluZy4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc29hcGJpbmQ6YmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUEJpbmRpbmcgZ2V0U29hcEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBCaW5kaW5nID09IG51bGwpOwotICAgICAgICApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG9iajsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzb2FwQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6b3BlcmF0aW9uLgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgYSBCaW5kaW5nT3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBzb2FwYmluZDpvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBPcGVyYXRpb24gZ2V0U29hcE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBPcGVyYXRpb24gPT0gbnVsbCk7Ci0gICAgICAgICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iaiA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgb2JqOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNvYXBPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgdGhlIEJpbmRpbmdPcGVyYXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQm9keSBnZXRJbnB1dFNvYXBCb2R5KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gbnVsbDsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBudWxsOwotCi0gICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgaWYgKChleHRFbGVtZW50cyA9Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKQotICAgICAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpICYmIChzb2FwQm9keSA9PSBudWxsKTsKLSAgICAgICAgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBvYmo7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBtZXNzYWdlcyByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiAgYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gbWVzc2FnZXMgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0KLSAgICBIYXNoU2V0IHRlbXBNZXNzYWdlcywgYmluZGluZ01lc3NhZ2VzID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIEhhc2hTZXQgcG9ydFR5cGVNZXNzYWdlcyA9IGZpbmRNZXNzYWdlcyhiaW5kaW5nLmdldFBvcnRUeXBlKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHRoZW4gdGhlIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGVtcE1lc3NhZ2VzID0KLSAgICAgICAgICBmaW5kTWVzc2FnZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKQotICAgICAgICAgICAgICAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICAgICAgICAgICAgLml0ZXJhdG9yKCksCi0gICAgICAgICAgICBwb3J0VHlwZU1lc3NhZ2VzLAotICAgICAgICAgICAgZGVmaW5pdGlvbik7Ci0KLSAgICAgICAgLy8gQWRkIG1lc3NhZ2VzIHRvIGJpbmRpbmcgbWVzc2FnZSBzZXQKLSAgICAgICAgYmluZGluZ01lc3NhZ2VzLmFkZEFsbCh0ZW1wTWVzc2FnZXMpOwotICAgICAgfQotCi0gICAgICAvLyBQcm9jZXNzIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRlbXBNZXNzYWdlcyA9Ci0gICAgICAgICAgZmluZE1lc3NhZ2VzKAotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlTWVzc2FnZXMsCi0gICAgICAgICAgICBkZWZpbml0aW9uKTsKLQotICAgICAgICAvLyBBZGQgbWVzc2FnZXMgdG8gYmluZGluZyBtZXNzYWdlIHNldAotICAgICAgICBiaW5kaW5nTWVzc2FnZXMuYWRkQWxsKHRlbXBNZXNzYWdlcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdNZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gaGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgb3BlcmF0aW9uIHRvIHByb2Nlc3MKLSAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gR2V0IGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZQotICAgICAgaWYgKG9wZXJhdGlvbi5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBmYXVsdHMKLSAgICAgIEl0ZXJhdG9yIGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKCgoRmF1bHQpIGZhdWx0cy5uZXh0KCkpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lc3NhZ2VTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICogQHBhcmFtIGV4dEVsZW1lbnRMaXN0IGEgbGlzdCBvZiBleHRlcm5hbCBlbGVtZW50cy4KLSAgICogQHBhcmFtIG1lc3NhZ2VTZXQgYSBzZXQgb2YgbWVzc2FnZXMuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgYSBoZWFkZXIgb3IgaGVhZGVyZmF1bHQuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIEhhc2hTZXQgZmluZE1lc3NhZ2VzKAotICAgIEl0ZXJhdG9yIGV4dEVsZW1lbnRMaXN0LAotICAgIEhhc2hTZXQgbWVzc2FnZVNldCwKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBIYXNoU2V0IHJldHVyblNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudDsKLSAgICBNZXNzYWdlIHNhdmVNZXNzYWdlID0gbnVsbDsKLQotICAgIHdoaWxlIChleHRFbGVtZW50TGlzdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IGV4dC4gZWxlbWVudAotICAgICAgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudExpc3QubmV4dCgpOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWU7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBzb2FwOmhlYWRlciBlbGVtZW50LCB0aGVuIGNoZWNrIGZvciBtZXNzYWdlIHJlZmVyZW5jZQotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbWVudDsKLSAgICAgICAgaWYgKChtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGZvdW5kLCB0aGVuIGNyZWF0ZSBhIGR1bW15IG1lc3NhZ2UgZWxlbWVudAotICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghbWVzc2FnZVNldC5jb250YWlucyhtZXNzYWdlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgICAgc2F2ZU1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFByb2Nlc3MgYW55IGhlYWRlciBmYXVsdHMgd2l0aGluIHRoaXMgaGVhZGVyCi0gICAgICAgIEl0ZXJhdG9yIGhlYWRlckZhdWx0TGlzdCA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChoZWFkZXJGYXVsdExpc3QuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXAgaGVhZGVyIGZhdWx0Ci0gICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAoU09BUEhlYWRlckZhdWx0KSBoZWFkZXJGYXVsdExpc3QubmV4dCgpOwotICAgICAgICAgIGlmICgobWVzc2FnZVFOYW1lID0gc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIG5vdCBmb3VuZCwgdGhlbiBjcmVhdGUgYSBkdW1teSBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzYWdlID0gZGVmaW5pdGlvbi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgICAgbWVzc2FnZS5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGluIG1lc3NhZ2Ugc2V0IGFuZCByZXR1cm4gc2V0LCB0aGVuIGFkZCBpdCAgCi0gICAgICAgICAgICBpZiAoIW1lc3NhZ2VTZXQuY29udGFpbnMobWVzc2FnZSkKLSAgICAgICAgICAgICAgJiYgKChzYXZlTWVzc2FnZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHx8IChzYXZlTWVzc2FnZSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAmJiAhc2F2ZU1lc3NhZ2UuZ2V0UU5hbWUoKS5lcXVhbHMobWVzc2FnZS5nZXRRTmFtZSgpKSkpKQotICAgICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TZXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NPQVAxMldTREwoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JaWYgKHdzZGxEb2N1bWVudCAhPSBudWxsKQotCXsKLQkgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotCSAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBpZiAoYmluZGluZ3MgIT0gbnVsbCkKLQkgIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLQkJCWV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5hZGRBbGwoYmluZGluZ3NbaV0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSAKLQkJewotCQkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUDEyLmVxdWFscyhlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJewotCQkJICByZXN1bHQgPSB0cnVlOwotCQkJICBicmVhazsKLQkJCX0KLQkJfQotCSAgfQotCX0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvVmlzaXRvckFkYXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MDkzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Qcm94eTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFkYXB0cyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGltcGxlbWVudGVkCi0gKiA8Y29kZT5XU0RMVmlzaXRvcjwvY29kZT4gbWV0aG9kcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgY2xhc3MgVmlzaXRvckFkYXB0b3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uSGFuZGxlcgotewotCi0gIC8vIG9wdGltaXphdGlvbiBoaW50Ci0gIHN0YXRpYyBmaW5hbCBwcml2YXRlIENsYXNzW10gdmlzaXRvckNsYXNzID0gbmV3IENsYXNzW10geyBXU0RMVmlzaXRvci5jbGFzcyB9OwotCi0gIC8qKgotICAgKiBUaGUgYXJyYXkgaXMgdXNlZCBmb3IgZGV0ZXJtaW5hdGlvbiBvZiBhY3R1YWwgamF2YXgud3NkbCBjbGFzcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSB3c2RsID0KLSAgICBuZXcgQ2xhc3NbXSB7Ci0gICAgICBQYXJ0LmNsYXNzLAotICAgICAgU2VydmljZS5jbGFzcywKLSAgICAgIFR5cGVzLmNsYXNzLAotICAgICAgT3BlcmF0aW9uLmNsYXNzLAotICAgICAgSW5wdXQuY2xhc3MsCi0gICAgICBPdXRwdXQuY2xhc3MsCi0gICAgICBGYXVsdC5jbGFzcywKLSAgICAgIEJpbmRpbmcuY2xhc3MsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLAotICAgICAgQmluZGluZ0lucHV0LmNsYXNzLAotICAgICAgQmluZGluZ091dHB1dC5jbGFzcywKLSAgICAgIEJpbmRpbmdGYXVsdC5jbGFzcywKLSAgICAgIEltcG9ydC5jbGFzcywKLSAgICAgIEVsZW1lbnQuY2xhc3MsCi0gICAgICBNZXNzYWdlLmNsYXNzLAotICAgICAgUG9ydC5jbGFzcywKLSAgICAgIFBvcnRUeXBlLmNsYXNzLAotICAgICAgRGVmaW5pdGlvbi5jbGFzcywKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgU09BUEJpbmRpbmcuY2xhc3MsCi0gICAgICBTT0FQQm9keS5jbGFzcywKLSAgICAgIFNPQVBIZWFkZXIuY2xhc3MsCi0gICAgICBTT0FQSGVhZGVyRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQT3BlcmF0aW9uLmNsYXNzIH07Ci0KLSAgZmluYWwgcHJpdmF0ZSBPYmplY3QgdmlzaXRvcjsKLQotICBwcml2YXRlIE1hcCBtZXRob2RzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBvICBhIHZpc2l0b3Igb2JqZWN0LgotICAgKi8KLSAgcHJpdmF0ZSBWaXNpdG9yQWRhcHRvcihPYmplY3QgbykKLSAgewotICAgIHRoaXMudmlzaXRvciA9IG87Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBtZXRob2QgdG8gbWV0aG9kIGJpbmRpbmcuCi0gICAqIEBwYXJhbSB3c2RsTWV0aG9kICAgIGEgV1NETCBtZXRob2QuCi0gICAqIEBwYXJhbSB0YXJnZXRNZXRob2QgIGEgIHRhcmdldCBtZXRob2QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkTWV0aG9kQmluZGluZyhNZXRob2Qgd3NkbE1ldGhvZCwgTWV0aG9kIHRhcmdldE1ldGhvZCkKLSAgewotICAgIG1ldGhvZHMucHV0KHdzZGxNZXRob2QsIHRhcmdldE1ldGhvZCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBwcm94aWVzIGFsbCAidmlzaXQoWFhYKSIgbWV0aG9kcyB0byB0aGUgY29ycmVzcG9uZGluZwotICAgKiAidmlzaXQoWFhYKSIgbWV0aG9kcyBvZiB0aGUgdGFyZ2V0IHZpc2l0b3Igb2JqZWN0LiAKLSAgICogQHNlZSBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlciNpbnZva2UoT2JqZWN0LCBNZXRob2QsIE9iamVjdFtdKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBpbnZva2UoT2JqZWN0IHByb3h5LCBNZXRob2QgbSwgT2JqZWN0W10gcGFyYW1zKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTWV0aG9kIHRhcmdldCA9IChNZXRob2QpIG1ldGhvZHMuZ2V0KG0pOwotICAgICAgLy8gYXNzZXJ0IHRhcmdldCAhPSBudWxsCi0gICAgICByZXR1cm4gdGFyZ2V0Lmludm9rZSh2aXNpdG9yLCBwYXJhbXMpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0IHRoZSBzaG9ydCBjbGFzcyBuYW1lLiAKLSAgICogQHBhcmFtIGMgIGEgY2xhc3MuCi0gICAqIEByZXR1cm4gdGhlIHNob3J0IGNsYXNzIG5hbWUuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShDbGFzcyBjKQotICB7Ci0gICAgaWYgKGMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGMuZ2V0TmFtZSgpOwotICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKG5hbWUubGFzdEluZGV4T2YoIi4iKSArIDEpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGdlbmVyYXRlcyBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqIFByb3h5IHJlZGlyZWN0cyBhbGwgdmlzaXQoWFhYKSBjYWxsYmFjayB0byB0aGUgaW1wbGVtZW50ZWQgaW4gdmlzaXRvcgotICAgKiBvYmplY3QuCi0gICAqIEBwYXJhbSB2aXNpdG9yICBhIHZpc3RvciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUcmF2ZXJzYWwgYWRhcHQoT2JqZWN0IHZpc2l0b3IpCi0gIHsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0KLSAgICBpZiAodmlzaXRvciA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVmlzaXRvciBvYmplY3QgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLSAgICBWaXNpdG9yQWRhcHRvciBhZGFwdG9yID0gbmV3IFZpc2l0b3JBZGFwdG9yKHZpc2l0b3IpOwotCi0gICAgLy8gY2hlY2sgd2hldGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAotICAgIC8vIGdldCByZWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAgICBDbGFzcyBjID0gdmlzaXRvci5nZXRDbGFzcygpOwotICAgIC8vIGl0ZXJhdGVzIHRocm91Z2ggd3NkbCBhcnRpZmFjdHMgYW5kIGxvb2tpbmcgZm9yCi0gICAgLy8gdm9pZCB2aXNpdChYWFgpIGltcGxlbWVudGVkIG1ldGhvZHMuICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGwubGVuZ3RoOyBpKyspCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgbWV0aG9kIGlzIG5vdCBmb3VuZCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duCi0gICAgICAgIE1ldGhvZCBtID0KLSAgICAgICAgICBjLmdldE1ldGhvZCgKLSAgICAgICAgICAgICJ2aXNpdCIsCi0gICAgICAgICAgICBuZXcgQ2xhc3NbXSB7IHdzZGxbaV0sIE9iamVjdC5jbGFzcywgV1NETFRyYXZlcnNhbENvbnRleHQuY2xhc3MgfSk7Ci0gICAgICAgIC8vIHJlZ2lzdGVyIGJpbmRpbmcgV1NETFZpc2l0b3IgbWV0aG9kIC0+IHRhcmdldCB2aXNpdG9yIG1ldGhvZAotICAgICAgICBhZGFwdG9yLmFkZE1ldGhvZEJpbmRpbmcoCi0gICAgICAgICAgV1NETFZpc2l0b3IuY2xhc3MuZ2V0TWV0aG9kKAotICAgICAgICAgICAgInZpc2l0IiwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgd3NkbFtpXSwgT2JqZWN0LmNsYXNzLCBXU0RMVHJhdmVyc2FsQ29udGV4dC5jbGFzcyB9KSwKLSAgICAgICAgICBtKTsKLSAgICAgICAgLy8gcmVnaXN0ZXIgdmlzaXRYWFggaW4gV1NETFRyYXZlcnNhbEJ1aWxkZXIKLSAgICAgICAgbSA9Ci0gICAgICAgICAgV1NETFRyYXZlcnNhbC5jbGFzcy5nZXRNZXRob2QoCi0gICAgICAgICAgICAidmlzaXQiICsgZ2V0TmFtZSh3c2RsW2ldKSwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgYm9vbGVhbi5jbGFzcyB9KTsKLSAgICAgICAgbS5pbnZva2UodHJhdmVyc2FsLCBuZXcgT2JqZWN0W10geyBCb29sZWFuLlRSVUUgfSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAvLyBjb25zdHJ1Y3QgdGhlIFdTRExWaXNpdG9yIGJ5IHVzaW5nIGphdmEubGFuZy5yZWZsZWN0LlByb3h5Ci0gICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICBXU0RMVmlzaXRvciB3c2RsVmlzaXRvciA9Ci0gICAgICAoV1NETFZpc2l0b3IpIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UobG9hZGVyLCB2aXNpdG9yQ2xhc3MsIGFkYXB0b3IpOwotICAgIC8vIHRyYXZlcnNlIFdTREwgZG9jdW1lbnQKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih3c2RsVmlzaXRvcik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWJjMmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHBsYWluIHRyYXZlcnNlIG92ZXIgV1NETCBhcnRpZmFjdHMuCi0gKiBXU0RMVHJhdmVyc2FsIGlzIGNvbnRleHQtZHJpdmVuIHRyYXZlcnNhbC4gCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsCi17Ci0KLSAgLyoqCi0gICAqIEN1cnJlbnQgV1NETCB2aXNpdG9yIChjYWxsYmFjaykuCi0gICAqLwotICBwcml2YXRlIFdTRExWaXNpdG9yIHZpc2l0b3I7Ci0KLSAgLyoqCi0gICAqIEZsYWdzIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0cmF2ZXJzYWwgd2lsbCB0cmF2ZXJzIGZyb20gb25lIFdTREwgYXJ0aWZhY3QKLSAgICogdG8gYW5vdGhlci4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gdHJ1ZTsgLy8gcmVmZXJlbmNlCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gdHJ1ZTsgLy8gcmVmZXJlbmNlICAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlRmF1bHQyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUZhdWx0Mk1lc3NhZ2UgPSB0cnVlOyAvLyByZWZlcmVuY2UgCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUltcG9ydDJEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW1wb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VJbnB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydDJCaW5kaW5nID0gdHJ1ZTsgLy8gcmVmZXJlbmNlIAotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICAvL3ByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNPQVBCb2R5MlBhcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nRmF1bHQyU09BUEZhdWx0ID0gdHJ1ZTsKLQotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggc3BlY2lmeSB3aGV0aGVyIHRyYXZlcnNhbCB3aWxsIHZpc2l0IGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBhcnRpZmFjdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0QmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0RGVmaW5pdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEltcG9ydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRNZXNzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdE9wZXJhdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0UGFydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRQb3J0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFBvcnRUeXBlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNlcnZpY2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0VHlwZXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJvZHkgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBPcGVyYXRpb24gPSBmYWxzZTsKLQotICBMaXN0IGFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9uczsKLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwoKQotICB7Ci0JYWxyZWFkeVRyYXZlcnNlZERlZmluaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc3BlY2lmaWVzIHRoYXQgdHJhdmVyc2FsIHdpbGwgaWdub3JlIGluZGlyZWN0IHJlZmVyZW5jZXMgYmV0d2VlbgotICAgKiBXU0RMIGFydGlmYWN0cy4gRm9yIGV4YW1wbGU6Ci0gICAqIDxvbD4KLSAgICogICA8bGk+YmluZGluZyB0byBwb3J0IHR5cGU8L2xpPgotICAgKiAgIDxsaT5iaW5kaW5nIG9wZXJhdGlvbiB0byBvcGVyYXRpb248L2xpPgotICAgKiAgIDxsaT5mYXVsdCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+aW5wdXQgdG8gbWVzc2FnZTwvbGk+Ci0gICAqICAgPGxpPm91dHB1dCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+cG9ydCB0byBiaW5kaW5nPC9saT4KLSAgICogPC9vbD4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGlnbm9yZVJlZmVyZW5jZXMoKQotICB7Ci0gICAgaWdub3JlQmluZGluZzJQb3J0VHlwZSgpOwotICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCk7Ci0gICAgaWdub3JlRmF1bHQyTWVzc2FnZSgpOwotICAgIGlnbm9yZUlucHV0Mk1lc3NhZ2UoKTsKLSAgICBpZ25vcmVPdXRwdXQyTWVzc2FnZSgpOwotICAgIGlnbm9yZVBvcnQyQmluZGluZygpOwotICAgIC8vaWdub3JlU09BUEJvZHkyUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc2V0cyB2aXNpdG9yLgotICAgKiBAcGFyYW0gdmlzaXRvciAgYSBXU0RMIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFdTRExWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgICB0aGlzLnZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyU09BUEJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlNPQVBCaW5kaW5nID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJTT0FQRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEhlYWRlcjJTT0FQSGVhZGVyRmF1bHQoKQotICB7Ci0gICAgdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZzJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyUG9ydFR5cGUoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPdXRwdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJJbXBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJQb3J0VHlwZSgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJTZXJ2aWNlKCkKLSAgewotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJTZXJ2aWNlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yVHlwZXMoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0Mk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUltcG9ydDJEZWZpbml0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VNZXNzYWdlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlTWVzc2FnZTJQYXJ0KCkKLSAgewotICAgIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlT3BlcmF0aW9uMkZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJJbnB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPcGVyYXRpb24yT3V0cHV0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMk91dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU91dHB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlT3V0cHV0Mk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnQyQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVQb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydDJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlUG9ydFR5cGUyT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlU2VydmljZTJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMlBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlVHlwZXMyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4uLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQQmluZGluZyhib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQQmluZGluZyA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBCb2R5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBCb2R5ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U09BUEZhdWx0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBGYXVsdCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXIoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0U09BUEhlYWRlciA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXJGYXVsdChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQSGVhZGVyRmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQT3BlcmF0aW9uKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBPcGVyYXRpb24gPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmcgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nRmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ0ZhdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0QmluZGluZ0lucHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmdJbnB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPdXRwdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ091dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdERlZmluaXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEVsZW1lbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RWxlbWVudCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0RmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRJbXBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW1wb3J0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0SW5wdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW5wdXQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRNZXNzYWdlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE1lc3NhZ2UgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0T3BlcmF0aW9uID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0T3V0cHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE91dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBhcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UGFydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UG9ydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnRUeXBlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFBvcnRUeXBlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTZXJ2aWNlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0VHlwZXMoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0VHlwZXMgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkJpbmRpbmcgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRGVmaW5pdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUG9ydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nRmF1bHQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEJvZHkoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQSGVhZGVyKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0KCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsgLy8gZml4Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlRmF1bHQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbnB1dDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydCgpCi0gIHsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyUGFydCA9IGZhbHNlOwotICAgIC8vdHJhdmVyc2VTT0FQQm9keTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyUG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnRUeXBlKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlcygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yVHlwZXMgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVzZVhYWCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHRoZSB2aXNpdFhYWCB2YXJpYWJsZXMKLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGp1c3QoKQotICB7Ci0gICAgYWRqdXN0UGFydCgpOwotICAgIGFkanVzdFNlcnZpY2UoKTsKLSAgICBhZGp1c3RUeXBlcygpOwotICAgIGFkanVzdE9wZXJhdGlvbigpOwotICAgIGFkanVzdElucHV0KCk7Ci0gICAgYWRqdXN0T3V0cHV0KCk7Ci0gICAgYWRqdXN0RmF1bHQoKTsKLSAgICBhZGp1c3RCaW5kaW5nKCk7Ci0gICAgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpOwotICAgIGFkanVzdEJpbmRpbmdJbnB1dCgpOwotICAgIGFkanVzdEJpbmRpbmdPdXRwdXQoKTsKLSAgICBhZGp1c3RCaW5kaW5nRmF1bHQoKTsKLSAgICBhZGp1c3RJbXBvcnQoKTsKLSAgICBhZGp1c3RFbGVtZW50KCk7Ci0gICAgYWRqdXN0TWVzc2FnZSgpOwotICAgIGFkanVzdFBvcnQoKTsKLSAgICBhZGp1c3RQb3J0VHlwZSgpOwotICAgIGFkanVzdERlZmluaXRpb24oKTsKLSAgICBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGFkanVzdFNPQVBCaW5kaW5nKCk7Ci0gICAgYWRqdXN0U09BUEJvZHkoKTsKLSAgICBhZGp1c3RTT0FQSGVhZGVyKCk7Ci0gICAgYWRqdXN0U09BUEhlYWRlckZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUEZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUE9wZXJhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UGFydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRQYXJ0IHx8ICh0cmF2ZXJzZVBhcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQYXJ0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQSGVhZGVyKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRTT0FQSGVhZGVyCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ICYmIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEhlYWRlcigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ091dHB1dAotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQQm9keQotICAgICAgICAgICYmIGFkanVzdFNPQVBCb2R5KCkKLSAgICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEVsZW1lbnQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0RWxlbWVudDsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlRWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0VHlwZXMoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFR5cGVzCi0gICAgICAgIHx8ICh0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlVHlwZXMoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBCaW5kaW5nKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdFNPQVBCaW5kaW5nOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0UG9ydAotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnQyQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RPcGVyYXRpb24oKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdE9wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCAmJiBhZGp1c3RJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ICYmIGFkanVzdE91dHB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgJiYgYWRqdXN0RmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZU9wZXJhdGlvbigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCAmJiBhZGp1c3RCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ICYmIGFkanVzdEJpbmRpbmdPdXRwdXQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ICYmIGFkanVzdEJpbmRpbmdJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uICYmIGFkanVzdFNPQVBPcGVyYXRpb24oKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdElucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRJbnB1dAotICAgICAgICB8fCAodHJhdmVyc2VJbnB1dDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlSW5wdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZwotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gJiYgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmcyUG9ydFR5cGUgJiYgYWRqdXN0UG9ydFR5cGUoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZyAmJiBhZGp1c3RTT0FQQmluZGluZygpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUEJvZHkoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEJvZHk7Ci0gICAgLyogfHwgCi0gICAgCQkodHJhdmVyc2VTT0FQQm9keTJQYXJ0ICYmIGFkanVzdFBhcnQoKSk7Ki8KLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEJvZHkoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQSGVhZGVyRmF1bHQ7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ0lucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRCaW5kaW5nSW5wdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkKLSAgICAgICAgICAmJiBhZGp1c3RTT0FQQm9keSgpCi0gICAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0T3V0cHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRPdXRwdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ0ZhdWx0Ci0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCAmJiBhZGp1c3RTT0FQRmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQT3BlcmF0aW9uOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3REZWZpbml0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXREZWZpbml0aW9uCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24ySW1wb3J0ICYmIGFkanVzdEltcG9ydCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzICYmIGFkanVzdFR5cGVzKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlBvcnRUeXBlICYmIGFkanVzdFBvcnRUeXBlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBhZGp1c3RTZXJ2aWNlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVEZWZpbml0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQRmF1bHQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEZhdWx0OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQRmF1bHQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEltcG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRJbXBvcnQgfHwgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24KLSAgICAvKiAmJiBhZGp1c3REZWZpbml0aW9uKCkqLwotICAgICAgKQotICAgIHx8IC8vIGF2b2lkIGN5Y2xpbmcgcHJvYmxlbS4gVGh1cywgeW91IHNob3VsZCBjYWxsIGlnbm9yZUltcG9ydCBtYW51YWxseSAgCi0gICAodHJhdmVyc2VJbXBvcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbXBvcnQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEZhdWx0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRGYXVsdAotICAgICAgICB8fCAodHJhdmVyc2VGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydFR5cGUoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFBvcnRUeXBlCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0VHlwZSgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U2VydmljZSgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0U2VydmljZQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNlcnZpY2UyUG9ydCAmJiBhZGp1c3RQb3J0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTZXJ2aWNlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RNZXNzYWdlKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRNZXNzYWdlCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyUGFydCAmJiBhZGp1c3RQYXJ0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCAgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iakV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRFeHRlbnNpYmlsaXR5RWxlbWVudChvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgaWYgKHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakV4dGVuc2liaWxpdHlFbGVtZW50LCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBhcnQgIHRoZSBXU0RMIHBhcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKFBhcnQgb2JqUGFydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBhcnRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFBhcnQob2JqUGFydCk7Ci0gICAgaWYgKHZpc2l0UGFydCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialBhcnQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQYXJ0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBhcnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VQYXJ0MkVsZW1lbnQpCi0gICAgICB0cmF2ZXJzZShvYmpQYXJ0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialBhcnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEhlYWRlciAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgU09BUEhlYWRlciBvYmpTT0FQSGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFNPQVBIZWFkZXIob2JqU09BUEhlYWRlcik7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlcikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBIZWFkZXIsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialNPQVBIZWFkZXIgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdAotICAgICAgJiYgb2JqU09BUEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNPQVBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlckZhdWx0KSBpdC5uZXh0KCksIG9ialNPQVBIZWFkZXIsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRWxlbWVudCAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEVsZW1lbnQgb2JqRWxlbWVudCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRFbGVtZW50KG9iakVsZW1lbnQpOwotICAgIGlmICh2aXNpdEVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakVsZW1lbnQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialR5cGVzICBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgcGFyZW50IG9mIHRoZSBXU0RMIHR5cGVzIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFR5cGVzIG9ialR5cGVzLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVR5cGVzUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRUeXBlcyhvYmpUeXBlcyk7Ci0gICAgaWYgKHZpc2l0VHlwZXMpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpUeXBlcywgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialR5cGVzID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlVHlwZXMyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpUeXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NUeXBlcygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpUeXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqVHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJpbmRpbmcgIGEgV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQmluZGluZyBvYmpTT0FQQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQQmluZGluZyhvYmpTT0FQQmluZGluZyk7Ci0gICAgaWYgKHZpc2l0U09BUEJpbmRpbmcpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBkZWZpbml0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpEZWZpbml0aW9uICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRGVmaW5pdGlvbiBvYmpEZWZpbml0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0JaWYgKChvYmpEZWZpbml0aW9uID09IG51bGwpIHx8ICh0aGlzLmFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhvYmpEZWZpbml0aW9uKSkpCi0JewotCSAgcmV0dXJuOwkKLQl9Ci0JdGhpcy5hbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKG9iakRlZmluaXRpb24pOwotICAgIGN0eC5yZXN1bWVEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXREZWZpbml0aW9uKG9iakRlZmluaXRpb24pOwotCi0gICAgaWYgKHZpc2l0RGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakRlZmluaXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJJbXBvcnQgJiYgb2JqRGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBWZWN0b3IgdiA9IChWZWN0b3IpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZSgoSW1wb3J0KSBpdDIubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqRGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakRlZmluaXRpb24uZ2V0VHlwZXMoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlICYmIG9iakRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqRGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoTWVzc2FnZSkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSAmJiBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBvYmpEZWZpbml0aW9uLmdldEJpbmRpbmdzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEJpbmRpbmcpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBvYmpEZWZpbml0aW9uLmdldFNlcnZpY2VzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKFNlcnZpY2UpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBvcnQgIGEgV1NETCBwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgcGFyZW50IG9mIHRoZSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZShQb3J0IG9ialBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVQb3J0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0KG9ialBvcnQpOwotICAgIGlmICh2aXNpdFBvcnQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzUG9ydCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpQb3J0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJCaW5kaW5nKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0QmluZGluZygpLCBvYmpQb3J0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iak9wZXJhdGlvbiAgYSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdHQuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE9wZXJhdGlvbiBvYmpPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPcGVyYXRpb24ob2JqT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRPcGVyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3BlcmF0aW9uID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24ySW5wdXQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldElucHV0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak9wZXJhdGlvbi5nZXRPdXRwdXQoKSwgb2JqT3BlcmF0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbjJGYXVsdCAmJiBvYmpPcGVyYXRpb24uZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iak9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEZhdWx0KSBpdC5uZXh0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpJbnB1dCAgYSBXU0RMIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgIHBhcmVudCBvZiB0aGUgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbnB1dCBvYmpJbnB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW5wdXQob2JqSW5wdXQpOwotICAgIGlmICh2aXNpdElucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW5wdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NJbnB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUlucHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW5wdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VJbnB1dDJNZXNzYWdlKQotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0TWVzc2FnZSgpLCBvYmpJbnB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJvZHkgIGEgV1NETCBTT0FQIGJvZHkgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQm9keSBvYmpTT0FQQm9keSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vICAJY3R4LnJlc3VtZVNPQVBCb2R5UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRTT0FQQm9keShvYmpTT0FQQm9keSk7Ci0gICAgaWYgKHZpc2l0U09BUEJvZHkpCi0gICAgICAvLwl7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCb2R5LCBwYXJlbnQsIGN0eCk7Ci0gICAgLyoJICBpZiAoIWN0eC5wcm9jZXNzU09BUEJvZHkoKSkKLSAgICAJCXJldHVybjsKLSAgICAJfQotICAgIAlpZiAob2JqU09BUEJvZHkgPT0gbnVsbCkKLSAgICAJCXJldHVybjsKLSAgICAJaWYgKHRyYXZlcnNlU09BUEJvZHkyUGFydCAmJiBvYmpTT0FQQm9keS5nZXRQYXJ0cygpICE9IG51bGwpIHsKLSAgICAJICBpZiAoY3R4KQotICAgIAkgIEl0ZXJhdG9yIGl0ID0gb2JqU09BUEJvZHkuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIAkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAJICAJCi0gICAgCQl0cmF2ZXJzZSgoUGFydClpdC5uZXh0KCksIG9ialNPQVBCb2R5LCBjdHgpOwotICAgIAkJaWYgKCFjdHgucHJvY2Vzc1NPQVBCb2R5KCkpCi0gICAgCQkgIHJldHVybjsKLSAgICAJICB9Ci0gICAgCX0KLSAgICAqLwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBIZWFkZXJGYXVsdCAgYSBXU0RMIFNPQVAgaGVhZGVyIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBIZWFkZXJGYXVsdCBvYmpTT0FQSGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEhlYWRlckZhdWx0KG9ialNPQVBIZWFkZXJGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlckZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQSGVhZGVyRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpPdXRwdXQgIGEgV1NETCBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE91dHB1dCBvYmpPdXRwdXQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPdXRwdXQob2JqT3V0cHV0KTsKLSAgICBpZiAodmlzaXRPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPdXRwdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak91dHB1dCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iak91dHB1dC5nZXRNZXNzYWdlKCksIG9iak91dHB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdGYXVsdCAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nRmF1bHQgb2JqQmluZGluZ0ZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0ZhdWx0KG9iakJpbmRpbmdGYXVsdCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0ZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdGYXVsdCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdGYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEZhdWx0KSBvLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBPcGVyYXRpb24gIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBPcGVyYXRpb24gb2JqU09BUE9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQT3BlcmF0aW9uKG9ialNPQVBPcGVyYXRpb24pOwotICAgIGlmICh2aXNpdFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdJbnB1dCAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nSW5wdXQgb2JqQmluZGluZ0lucHV0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0lucHV0KG9iakJpbmRpbmdJbnB1dCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0lucHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdJbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSB8fCB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICAgIGVsc2UgaWYgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgKG8gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKSkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlcikgbywgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpCaW5kaW5nT3BlcmF0aW9uICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ09wZXJhdGlvbihvYmpCaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRCaW5kaW5nT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ09wZXJhdGlvbiwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqQmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLAotICAgICAgICBvYmpCaW5kaW5nT3BlcmF0aW9uLAotICAgICAgICBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24KLSAgICAgICYmIG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBPcGVyYXRpb24pIG8sIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCksCi0gICAgICAgIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nRmF1bHQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEZhdWx0ICBhIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBGYXVsdCBvYmpTT0FQRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEZhdWx0KG9ialNPQVBGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqQmluZGluZyAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmcgb2JqQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nKG9iakJpbmRpbmcpOwotICAgIGlmICh2aXNpdEJpbmRpbmcpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZwotICAgICAgJiYgb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCaW5kaW5nKSBvLCBvYmpCaW5kaW5nLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpCaW5kaW5nLmdldFBvcnRUeXBlKCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbgotICAgICAgJiYgb2JqQmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nT3BlcmF0aW9uKSBpdC5uZXh0KCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmcoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRmF1bHQgIGEgV1NETCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICBwYXJlbnQgb2YgdGhlIFdTREwgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRmF1bHQgb2JqRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lRmF1bHRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldEZhdWx0KG9iakZhdWx0KTsKLSAgICBpZiAodmlzaXRGYXVsdCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzRmF1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqRmF1bHQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iakZhdWx0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldE1lc3NhZ2UoKSwgb2JqRmF1bHQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNlcnZpY2UgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTZXJ2aWNlIG9ialNlcnZpY2UsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lU2VydmljZVByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0U2VydmljZShvYmpTZXJ2aWNlKTsKLSAgICBpZiAodmlzaXRTZXJ2aWNlKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqU2VydmljZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1NlcnZpY2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqU2VydmljZSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpTZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialNlcnZpY2UsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlU2VydmljZTJQb3J0ICYmIG9ialNlcnZpY2UuZ2V0UG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqU2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbXBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqSW1wb3J0ICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICBwYXJlbnQgb2YgdGhlIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbXBvcnQgb2JqSW1wb3J0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW1wb3J0KG9iakltcG9ydCk7Ci0gICAgaWYgKHZpc2l0SW1wb3J0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW1wb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakltcG9ydCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUltcG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpJbXBvcnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24pCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9iakltcG9ydC5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIGlmICgoZGVmaW5pdGlvbiAhPSBudWxsKSAmJiAoIWFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhkZWZpbml0aW9uKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBhbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKGRlZmluaXRpb24pOwotICAgICAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREZWZpbml0aW9uKCksIG9iakltcG9ydCwgY3R4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXt9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdPdXRwdXQgIGEgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmdPdXRwdXQgb2JqQmluZGluZ091dHB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nT3V0cHV0KG9iakJpbmRpbmdPdXRwdXQpOwotICAgIGlmICh2aXNpdEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nT3V0cHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKAotICAgICAgICBvYmpCaW5kaW5nT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksCi0gICAgICAgIG9iakJpbmRpbmdPdXRwdXQsCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBCb2R5IHx8IHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBlbHNlIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciAmJiAobyBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpKQotICAgICAgICAgIHRyYXZlcnNlKChTT0FQSGVhZGVyKSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCksIG9iakJpbmRpbmdPdXRwdXQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpQb3J0VHlwZSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFBvcnRUeXBlIG9ialBvcnRUeXBlLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0VHlwZShvYmpQb3J0VHlwZSk7Ci0gICAgaWYgKHZpc2l0UG9ydFR5cGUpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0VHlwZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBvcnRUeXBlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpQb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0VHlwZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiAmJiBvYmpQb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKE9wZXJhdGlvbikgaXQubmV4dCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqTWVzc2FnZSAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE1lc3NhZ2Ugb2JqTWVzc2FnZSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRNZXNzYWdlKG9iak1lc3NhZ2UpOwotICAgIGlmICh2aXNpdE1lc3NhZ2UpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpNZXNzYWdlLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpNZXNzYWdlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqTWVzc2FnZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NNZXNzYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJQYXJ0ICYmIG9iak1lc3NhZ2UuZ2V0UGFydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqTWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUGFydCkgaXQubmV4dCgpLCBvYmpNZXNzYWdlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBhcnQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgc2VydmljZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShUeXBlcyBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPcGVyYXRpb24gYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIG91dHB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE91dHB1dCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ09wZXJhdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nSW5wdXQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW1wb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBtZXNzYWdlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgbWVzc2FnZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE1lc3NhZ2UgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBvcnRUeXBlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGRlZmluaXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRGVmaW5pdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBleHRlbnNpYmlsaXR5IGVsbWVudCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBiaW5kaW5nIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJpbmRpbmcgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBib2R5IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXIgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQSGVhZGVyRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQT3BlcmF0aW9uIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcGFydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUGFydCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCB0eXBlcyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoVHlwZXMgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE9wZXJhdGlvbiBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPdXRwdXQgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyAKLSAgICogdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdJbnB1dCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gCi0gICAqIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ0ZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGltcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFbGVtZW50IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShNZXNzYWdlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIHBvcnQuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcG9ydCB0eXBlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUG9ydFR5cGUgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKERlZmluaXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEhlYWRlciBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBoZWFyZGVyIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGhlYWRlciBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXJGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVHJhdmVyc2FsQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDRkYmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBydW50aW1lIGNvbnRleHQgZm9yIHRoZSB0cmF2ZXJzYWwgcHJvY2Vzcy4KLSAqIENvbnRleHQgc3RvcmVzIGFydGlmYWN0cyBiZWluZyBwcm9jZXNzZWQuCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsQ29udGV4dAotewotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggaW5kaWNhdGUgd2hldGhlciBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkCi0gICAqIG9yIG5vdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzUGFydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU2VydmljZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzVHlwZXMgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzSW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NJbXBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0VsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gdHJ1ZTsKLQotICAvKioKLSAgICogTGFzdCBwcm9jZXNzZWQgV1NETCBlbGVtZW50cy4gCi0gICAqLwotICBwcml2YXRlIFBhcnQgYWN0aXZlUGFydCA9IG51bGw7Ci0gIHByaXZhdGUgU2VydmljZSBhY3RpdmVTZXJ2aWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBUeXBlcyBhY3RpdmVUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgT3BlcmF0aW9uIGFjdGl2ZU9wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgSW5wdXQgYWN0aXZlSW5wdXQgPSBudWxsOwotICBwcml2YXRlIE91dHB1dCBhY3RpdmVPdXRwdXQgPSBudWxsOwotICBwcml2YXRlIEZhdWx0IGFjdGl2ZUZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nIGFjdGl2ZUJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYWN0aXZlQmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ0lucHV0IGFjdGl2ZUJpbmRpbmdJbnB1dCA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ091dHB1dCBhY3RpdmVCaW5kaW5nT3V0cHV0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nRmF1bHQgYWN0aXZlQmluZGluZ0ZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBJbXBvcnQgYWN0aXZlSW1wb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBFbGVtZW50IGFjdGl2ZUVsZW1lbnQgPSBudWxsOwotICBwcml2YXRlIE1lc3NhZ2UgYWN0aXZlTWVzc2FnZSA9IG51bGw7Ci0gIHByaXZhdGUgUG9ydCBhY3RpdmVQb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZSBhY3RpdmVQb3J0VHlwZSA9IG51bGw7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBhY3RpdmVEZWZpbml0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgU09BUEJpbmRpbmcgYWN0aXZlU09BUEJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIFNPQVBCb2R5IGFjdGl2ZVNPQVBCb2R5ID0gbnVsbDsKLSAgcHJpdmF0ZSBTT0FQSGVhZGVyIGFjdGl2ZVNPQVBIZWFkZXIgPSBudWxsOwotICBwcml2YXRlIFNPQVBIZWFkZXJGYXVsdCBhY3RpdmVTT0FQSGVhZGVyRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBGYXVsdCBhY3RpdmVTT0FQRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gYWN0aXZlU09BUE9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFBhcmFtZXRlcnMgbWFwCi0gICAqLwotICBNYXAgcGFyYW1zID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQWN0aXZlIHRyYXZlcnNhbC4KLSAgICovCi0gIGZpbmFsIHByaXZhdGUgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gdHJhdmVyc2FsCi0gICAqLwotICBXU0RMVHJhdmVyc2FsQ29udGV4dChXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCkKLSAgewotICAgIHRoaXMudHJhdmVyc2FsID0gdHJhdmVyc2FsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqIEByZXR1cm4gdGhhIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBnZXRUcmF2ZXJzYWwoKQotICB7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcmFtZXRlciBmcm9tIGNvbnRleHQgYnkgdGhlIGdpdmVuIGtleS4gCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKiBAcmV0dXJuIGEgcGFyYW1ldGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gcGFyYW1zLmdldChrZXkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgcGFyYW1ldGVyIGludG8gY29udGV4dCB3aXRoIHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgICAgdGhlIGtleS4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcGFyYW1zLnB1dChrZXksIHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSBwYXJhbWV0ZXIgZnJvbSBjb250ZXh0IGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICBwYXJhbXMucmVtb3ZlKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUGFydCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHR5cGVzLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFR5cGVzUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzVHlwZXMgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE9wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc09wZXJhdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPdXRwdXQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NGYXVsdCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgaW5wdXQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbXBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NJbXBvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NNZXNzYWdlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRGVmaW5pdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRXh0ZW5zaWJpbGl0eUVsZW1lbnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlciA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNPQVBPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBXU0RMIGVsZW1lbnRzIHByb2Nlc3NpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUHJvY2Vzc2luZygpCi0gIHsKLSAgICBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsVHlwZXNQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbElucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE91dHB1dFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxQb3J0VHlwZVByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBhcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lUGFydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BhcnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lVHlwZXNQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NUeXBlcyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZU91dHB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGZhdWx0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBvcGVyYXRpb24uIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVCaW5kaW5nRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lSW1wb3J0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzSW1wb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG1lc3NhZ2UuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lTWVzc2FnZVByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NQb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZURlZmluaXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUE9wZXJhdGlvbiA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwYXJ0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgc2VydmljZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1R5cGVzOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvcGVyYXRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvdXRwdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NCaW5kaW5nOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBpbnB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NJbXBvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0VsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgbWVzc2FnZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc01lc3NhZ2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQgdHlwZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzUG9ydFR5cGU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0RlZmluaXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0V4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBiaW5kaW5nIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzU09BUEJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC5uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BIGhlYWRlciBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdDsKLSAgfQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQT3BlcmF0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFBhcnQoUGFydCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBhcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHBhcnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcGFydC4KLSAgICovCi0gIHB1YmxpYyBQYXJ0IGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVBhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgc2VydmljZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBzZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU2VydmljZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHR5cGVzIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCB0eXBlcyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFR5cGVzKFR5cGVzIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlVHlwZXMgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKi8KLSAgcHVibGljIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVUeXBlczsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgb3BlcmF0aW9uIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0T3BlcmF0aW9uKE9wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZU9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbnB1dCB0byBiZSBwcm9jZXNzZWQKLSAgICogQHBhcmFtIHRoZSBXU0RMIGlucHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0SW5wdXQoSW5wdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbnB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgaW5wdXQuCi0gICAqIEByZXR1cm4gbGFzdCBwcm9jZXNzZWQgV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW5wdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIG91dHB1dCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldE91dHB1dChPdXRwdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVPdXRwdXQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIG91dHB1dC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGdldE91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZmF1bHQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGZhdWx0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0RmF1bHQoRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqLwotICBwdWJsaWMgRmF1bHQgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmcoQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmcgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFNETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmdPcGVyYXRpb24gPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ09wZXJhdGlvbjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ0lucHV0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBiaW5kaW5nIGlucHV0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgaW5wdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgb3V0cHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ091dHB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVCaW5kaW5nRmF1bHQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgZ2V0QmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbXBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGltcG9ydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEltcG9ydChJbXBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbXBvcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGltcG9ydC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBpbXBvcnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW1wb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUVsZW1lbnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlTWVzc2FnZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlTWVzc2FnZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0KFBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVQb3J0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHBvcnQuCi0gICAqLwotICBwdWJsaWMgUG9ydCBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcG9ydCB0eXBlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBwb3J0IHR5cGUgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0VHlwZShQb3J0VHlwZSB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBvcnRUeXBlID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0VHlwZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVEZWZpbml0aW9uID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGRlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVEZWZpbml0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQQmluZGluZyhTT0FQQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBCaW5kaW5nID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQQmluZGluZzsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBCb2R5KFNPQVBCb2R5IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEJvZHkgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgYm9keS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJvZHkuCi0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBCb2R5OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBIZWFkZXIoU09BUEhlYWRlciB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBIZWFkZXIgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXIgZ2V0U09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU09BUEhlYWRlcjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQSGVhZGVyRmF1bHQoU09BUEhlYWRlckZhdWx0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEhlYWRlckZhdWx0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyRmF1bHQgZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQSGVhZGVyRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U09BUEZhdWx0KFNPQVBGYXVsdCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGZhdWx0LgotICAgKi8KLSAgcHVibGljIFNPQVBGYXVsdCBnZXRTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBGYXVsdDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZVdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQKLSAgICovCi0gIHZvaWQgc2V0U09BUE9wZXJhdGlvbihTT0FQT3BlcmF0aW9uIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUE9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU09BUE9wZXJhdGlvbiBnZXRTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQT3BlcmF0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5NWQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZGVmaW5lcyBjYWxsYmFjayBtZXRob2RzIGR1cmluZyB0cmF2ZXJzZSBXU0RMLgotICogV1NETFZpc2l0b3IgY291bGQgY2FuY2VsIGFydGlmYWN0IHByb2Nlc3NpbmcgYnkgdXNpbmcgdHJhdmVyc2FsIGNvbnRleHQKLSAqIDxjb2RlPmNhbmNlbFhYWFByb2Nlc3Npbmc8L2NvZGU+IG1ldGhvZHMuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMVmlzaXRvcgotewotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBhcnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgc2VydmljZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTZXJ2aWNlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCB0eXBlcyBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgaW5wdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW5wdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIG91dHB1dCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGZhdWx0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIG9iamVjdC4KLSAgICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIGlucHV0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBvdXRwdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ091dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGltcG9ydCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgbWVzc2FnZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBvcnQgdHlwZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0VHlwZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgZGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBTT0FQIGJpbmRpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgYm9keSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuLgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWZiZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIHVybCA9IHN5c3RlbUlkOwotICAgIGlmKHVybCA9PSBudWxsKQotICAgIHsKLSAgICAgIHVybCA9IHB1YmxpY0lkOwotICAgIH0KLSAgICBpZih1cmwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSByZXNvdXJjZS5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgaWYodXJsICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHVybCk7Ci0gICAgICByZXR1cm4gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiZWMzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYUNvbnN0YW50czsKLQotLyoqCi0gKiBHZW5lcmF0ZSBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYSBmb3IgYW4gaW5saW5lIHNjaGVtYS4gV2lsbCBhZGQgaW1wb3J0cyBmb3IgdW5yZXNvbHZlZAotICogbmFtZXNwYWNlcy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hR2VuZXJhdG9yCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU09BUF9FTkNPRElOR19VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBUQVJHRVROQU1FU1BBQ0UgPSAidGFyZ2V0TmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBJTkNMVURFID0gImluY2x1ZGUiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNDSEVNQSA9ICJzY2hlbWEiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNDSEVNQUxPQ0FUSU9OID0gInNjaGVtYUxvY2F0aW9uIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBUWVBFID0gInR5cGUiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUUgPSAibmFtZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmdbXSBpZ25vcmVOYW1lc3BhY2VzID0KLSAgICB7IFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzE5OTksIFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEgfTsKLQotICBwcm90ZWN0ZWQgc3RhdGljIElubGluZVNjaGVtYUdlbmVyYXRvciBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIElubGluZVNjaGVtYUdlbmVyYXRvcigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoZSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5saW5lIHNjaGVtYSBnZW5lcmF0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIElubGluZVNjaGVtYUdlbmVyYXRvciBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc2NoZW1hIGZyb20gdGhlIGVsZW1lbnQgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3Qgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gICAqIEBwYXJhbSBmaWxlbG9jYXRpb24gVGhlIFVSSSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uKQotICB7Ci0gICAgcmV0dXJuIElubGluZVNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmcoZWxlbWVudCwgZWxlbWVudHMsIGZpbGVsb2NhdGlvbiwgbmV3IEhhc2h0YWJsZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gIAkqIENyZWF0ZXMgYSBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzY2hlbWEgbW9kZWwgd2l0aCB0aGUgcm9vdCBlbGVtZW50IG9mCi0gIAkqIGV4dEVsZW0uIENhbGxzIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5IHRvIHRha2UgY2FyZSBvZiBidWlsZGluZyB0aGUgU3RyaW5nCi0gIAkqIGFmdGVyIGl0IG9idGFpbnMgdGhlIEVsZW1lbnQgZnJvbSB0aGUgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50LgotICAJKiAKLSAgCSogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAJKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IHRvIGNvbnRhaW4gdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gIAkqIEBwYXJhbSBmaWxlbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRoZSBzY2hlbWEgaXMgbG9jYXRlZCBpbi4KLSAgCSogQHBhcmFtIHBhcmVudE5TcyBBIGhhc2h0YWJsZSBvZiBwYXJlbnQgbmFtZXNwYWNlcyB0byB1c2VkIHRvIHJlc29sdmUgcHJlZml4ZXMuCi0gIAkqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNjaGVtYSB3aXRoIHRoZSByb290IGVsZW1lbnQgJ2VsZW1lbnQnLgotICAJKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nKEVsZW1lbnQgZWxlbWVudCwgTGlzdCBlbGVtZW50cywgU3RyaW5nIGZpbGVsb2NhdGlvbiwgSGFzaHRhYmxlIHBhcmVudE5TcykKLSAgewotICAgIElubGluZVNjaGVtYUdlbmVyYXRvciBzY2hlbWFHZW5lcmF0b3IgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBIYXNodGFibGUgbnNSZXNvbHZlciA9IHNjaGVtYUdlbmVyYXRvci5nZXROU1Jlc29sdmVyKGVsZW1lbnQpOwotICAgIExpc3QgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIEhhc2h0YWJsZSByZXFOU0RlY2wgPSBzY2hlbWFHZW5lcmF0b3IucmVzb2x2ZU5hbWVzcGFjZXMocmVxbnMsIG5zUmVzb2x2ZXIsIHBhcmVudE5Tcyk7Ci0gICAgLy9IYXNodGFibGUgcmVxTlNEZWNsID0gc2NoZW1hR2VuZXJhdG9yLmdldFJlcXVpcmVkTlNEZWNsYXJhdGlvbnMocmVxbnMsIG5zUmVzb2x2ZXIsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoZWxlbWVudCwgZWxlbWVudHMsIHJlcW5zLCByZXFOU0RlY2wsIGZpbGVsb2NhdGlvbik7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgYnV0IG5vdCBpbXBvcnRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHRoZSBwYXJlbnQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzb2FwIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc29hcEVuY29kaW5nUmVxdWlyZWROb3RJbXBvcnRlZChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MpCi0gIHsKLSAgICBJbmxpbmVTY2hlbWFHZW5lcmF0b3Igc2NoZW1hR2VuZXJhdG9yID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihlbGVtZW50KTsKLSAgICBMaXN0IHJlcW5zID0gbnVsbDsKLQotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLmdldFJlcXVpcmVkTmFtZXNwYWNlcyhlbGVtZW50KTsKLSAgICBzY2hlbWFHZW5lcmF0b3IucmVzb2x2ZU5hbWVzcGFjZXMocmVxbnMsIG5zUmVzb2x2ZXIsIHBhcmVudE5Tcyk7Ci0gICAgLy9zY2hlbWFHZW5lcmF0b3IucmVzb2x2ZVVuZGVjbGFyZWROYW1lc3BhY2VzKHJlcW5zLCBwYXJlbnROU3MpOwotICAgIExpc3QgaW1wb3J0TlMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0SW1wb3J0TmFtZXNwYWNlcyhlbGVtZW50KTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVJbXBvcnRzKHJlcW5zLCBpbXBvcnROUyk7Ci0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlTG9jYWxOYW1lc3BhY2VzKHJlcW5zLCBlbGVtZW50KTsKLQotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChyZXFucyk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyByZWN1cnNpdmUgbWV0aG9kIGNyZWF0ZXMgdGhlIHNjaGVtYSBTdHJpbmcgZnJvbSB0aGUgcm9vdCBFbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IHRvIGJlIGNyZWF0ZWQgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gICAqIEBwYXJhbSByZXF1aXJlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSByZXFOU0RlY2wgQSBoYXNodGFibGUgb2YgcmVxdWlyZWQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzY2hlbWEuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KAotICAgIEVsZW1lbnQgZWxlbSwKLSAgICBMaXN0IGVsZW1lbnRzLAotICAgIExpc3QgcmVxdWlyZWROYW1lc3BhY2VzLAotICAgIEhhc2h0YWJsZSByZXFOU0RlY2wsCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbikKLSAgewotICAgIGlmIChlbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gIiI7IC8vIGp1c3QgaW4gY2FzZQotCi0gICAgZWxlbWVudHMuYWRkKGVsZW0pOwotCi0gICAgU3RyaW5nQnVmZmVyIHhzZFN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBlbGVtLmdldFRhZ05hbWUoKTsKLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI8IikuYXBwZW5kKGVsZW1lbnROYW1lKTsKLQotICAgIGJvb2xlYW4gZm91bmRTY2hlbWFMb2NhdGlvbiA9IGZhbHNlOyAvLyBmbGFnIGlmIHNjaGVtYWxvY2F0aW9uIGlzIGRlZmluZWQKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7IC8vIHRoZSBuYW1lc3BhY2UgaWYgd2UncmUgY2hlY2tpbmcgYW4gaW1wb3J0IG9yIGluY2x1ZGUKLSAgICBTdHJpbmcgbmFtZVByZWZpeCA9ICIiOyAvLyB0aGUgeG1sbnMgcHJlZml4IHVzZWQgZm9yIHRoZSBlbGVtZW50cwotICAgIC8vIEdldCBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoaXMgZWxlbWVudCBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIHhzZFN0cmluZwotICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotICAgICAgeHNkU3RyaW5nLmFwcGVuZCgiICIpLmFwcGVuZChuLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIik7Ci0gICAgICBTdHJpbmcgbm9kZU5hbWUgPSBuLmdldE5vZGVOYW1lKCk7Ci0gICAgICBpZiAobm9kZU5hbWUuZXF1YWxzSWdub3JlQ2FzZShTQ0hFTUFMT0NBVElPTikgJiYgZmlsZWxvY2F0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvdW5kU2NoZW1hTG9jYXRpb24gPSB0cnVlOwotICAgICAgICBTdHJpbmcgcmVsYXRpdmVQYXRoID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChyZWxhdGl2ZVBhdGgpLmFwcGVuZCgiXCIiKTsgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5vZGVWYWx1ZSA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKE5BTUVTUEFDRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lc3BhY2UgPSBub2RlVmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZ2V0IHRoZSBuYW1lIHByZWZpeCBmb3IgdGhpcyBzY2hlbWEgdG8gdXNlIGluIGdlbmVyYXRpbmcgaW1wb3J0IHN0YXRlbWVudHMKLSAgICAgICAgZWxzZSBpZiAobm9kZU5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEpCi0gICAgICAgIHsKLQotICAgICAgICAgIGlmIChub2RlVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShlbGVtLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lUHJlZml4ID0gbm9kZU5hbWU7Ci0gICAgICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFtZVByZWZpeCA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNikgKyAiOiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFJlcGxhY2Ugb2xkIHNjaGVtYSBuYW1lc3BhY2VzIHdpdGggdGhlIG5ldyBzY2hlbWEgbmFtZXNwYWNlLgotICAgICAgICBpZihub2RlVmFsdWUuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5vZGVWYWx1ZS5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgbm9kZVZhbHVlID0gU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAgICAgICAgfQotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKG5vZGVWYWx1ZSkuYXBwZW5kKCJcIiIpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiaW1wb3J0IikgJiYgIWZvdW5kU2NoZW1hTG9jYXRpb24pCi0gICAgewotICAgICAgeHNkU3RyaW5nLmFwcGVuZCgiICIpLmFwcGVuZChTQ0hFTUFMT0NBVElPTikuYXBwZW5kKCI9XCIiKS5hcHBlbmQobmFtZXNwYWNlKS5hcHBlbmQoIlwiIik7Ci0gICAgfQotICAgIC8vIGFkZCBpbiBhbnkgcmVxdWlyZWQgTlMgZGVjbGFyYXRpb25zIGZyb20gcGFyZW50IGVsZW1lbnRzCi0gICAgaWYgKHJlcU5TRGVjbCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGtleXMgPSByZXFOU0RlY2wua2V5cygpOwotICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgU3RyaW5nIGRlY2xOUyA9IChTdHJpbmcpcmVxTlNEZWNsLmdldChrZXkpOwotICAgICAgICBpZihkZWNsTlMuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IGRlY2xOUy5lcXVhbHMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgZGVjbE5TID0gU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAgICAgICAgfQotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKGtleSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoZGVjbE5TKS5hcHBlbmQoIlwiIik7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgeHNkU3RyaW5nLmFwcGVuZCgiPiIpOwotICAgIGlmIChyZXF1aXJlZE5hbWVzcGFjZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpUmVxdWlyZWROYW1lc3BhY2VzID0gcmVxdWlyZWROYW1lc3BhY2VzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaVJlcXVpcmVkTmFtZXNwYWNlcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpaVJlcXVpcmVkTmFtZXNwYWNlcy5uZXh0KCk7Ci0KLSAgICAgICAgeHNkU3RyaW5nCi0gICAgICAgICAgLmFwcGVuZCgiPCIpCi0gICAgICAgICAgLmFwcGVuZChuYW1lUHJlZml4KQotICAgICAgICAgIC5hcHBlbmQoSU1QT1JUKQotICAgICAgICAgIC5hcHBlbmQoIiAiKQotICAgICAgICAgIC5hcHBlbmQoTkFNRVNQQUNFKQotICAgICAgICAgIC5hcHBlbmQoIj1cIiIpCi0gICAgICAgICAgLmFwcGVuZChucykKLSAgICAgICAgICAuYXBwZW5kKCJcIiAiKQotICAgICAgICAgIC5hcHBlbmQoU0NIRU1BTE9DQVRJT04pCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiLz4iKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCJcbiIpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCkgfHwgaSA8IDU7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoY2hpbGQsIGVsZW1lbnRzLCBudWxsLCBudWxsLCBmaWxlbG9jYXRpb24pKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI8LyIpLmFwcGVuZChlbGVtLmdldFRhZ05hbWUoKSkuYXBwZW5kKCI+Iik7Ci0KLSAgICByZXR1cm4geHNkU3RyaW5nLnRvU3RyaW5nKCk7Ci0KLSAgfQotICAvKioKLSAgICogR2V0IGEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgdXNlZCBmb3IgZWxlbWVudHMgb3IgdHlwZXMgaW4gdGhlIHNjaGVtYS4KLSAgICogVGhlc2UgYXJlIHRoZSByZXF1aXJlZCBuYW1lc3BhY2VzIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgZWxtZW50cyBhcmUgdmFsaWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgZWxlbWVudCB0byBjaGVjayBmb3IgcmVxdWlyZWQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiBBIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcyBmb3IgdGhlIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRSZXF1aXJlZE5hbWVzcGFjZXMoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgTGlzdCBuYW1lc3BhY2UgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIC8vIHJlZ2lzdGVyIGFsbCB0aGUgY2hpbGQgdHlwZXMgZmlyc3QKLSAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgaW50IG51bUNoaWxkcmVuID0gY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsKLSAgICAvLyBUT0RPOiB3aHkgaXMgdGhlcmUgYSA8IDUgY29uZGl0aW9uPwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW4gLyp8fCBpIDwgNSovOyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRSZXF1aXJlZE5hbWVzcGFjZXMoY2hpbGQpOwotICAgICAgICBmb3IgKGludCBqID0gY2hpbGRucy5zaXplKCkgLSAxOyBqID49IDA7IGotLSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpY2hpbGRucy5nZXQoaik7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobnMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZS5hZGQobnMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBBZGQgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAgU3RyaW5nIGVsZW1OUyA9IGVsZW0uZ2V0UHJlZml4KCk7Ci0gICAgLy8gaWYgdGhlcmUgaXMgbm8gbmFtZXNwYWNlIHByZWZpeCBzZXQgaXQgdG8gdGhlIGVtcHR5IHByZWZpeC4KLSAgICBpZihlbGVtTlMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlbGVtTlMgPSAiIjsKLSAgICB9Ci0gICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMoZWxlbU5TLmludGVybigpKSkKLSAgICAgewotICAgICAgbmFtZXNwYWNlLmFkZChlbGVtTlMuaW50ZXJuKCkpOwotICAgIH0KLSAgICAvLyBub3cgYWRkIGFsbCBvZiB0aGUgY3VycmVudCBlbGVtZW50J3MgbmFtZXNwYWNlcwotICAgIC8vIGRvbid0IGluY2x1ZGUgaW1wb3J0IGFuZCBzY2hlbWEgZWxlbWVudHMKLSAgICBTdHJpbmcgbG9jYWxuYW1lID0gZWxlbS5nZXRMb2NhbE5hbWUoKTsKLSAgICBpZiAoIWxvY2FsbmFtZS5lcXVhbHMoSU1QT1JUKSAmJiAhbG9jYWxuYW1lLmVxdWFscyhJTkNMVURFKSAmJiAhbG9jYWxuYW1lLmVxdWFscyhTQ0hFTUEpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgLy8gcmVtb3ZlZCByZXN0cmljdGlvbiB0aGF0IHdlJ3JlIG9ubHkgbG9va2luZyBhdCB0eXBlcwotICAgICAgICAvLwkJaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoVFlQRSkpCi0gICAgICAgIC8vCQl7Ci0gICAgICAgIC8vIGRvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBhdHRyaWJ1dGVzIGRlZmluaW5nIG5hbWVzcGFjZXMuCi0gICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgeG1sbnMsIHRhcmdldE5hbWVzcGFjZQotICAgICAgICAvLyBkb24ndCB0YWtlIG5hbWVzcGFjZSBpbmZvIGZyb20gbmFtZSBhdHRyaWJ1dGVzCi0gICAgICAgIGlmIChub2RlTmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSB8fCBub2RlTmFtZS5lcXVhbHMoVEFSR0VUTkFNRVNQQUNFKSB8fCBub2RlTmFtZS5lcXVhbHMoTkFNRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpbnQgY29sb25JbmRleCA9IG5vZGVWYWx1ZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgIC8vIERvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBhdHRyaWJ1dGVzIHdpdGggdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCB0aGF0IGlzIGF0dHJpYnV0ZXMKLSAgICAgICAgLy8gdGhhdCBhcmUgbm90IHByZWZpeGVkLiAoY29sb25JbmRleCA9PSAtMSkKLSAgICAgICAgLy8gSWYgdGhlIGNvbG9uSW5kZXggaXMgZm9sbG93ZWQgYnkgYSAvIHRoZW4gaXQgaXMgYSBVUkkgYW5kIG5vdAotICAgICAgICAvLyBuYW1lc3BhY2UgcXVhbGlmaWVkLgotICAgICAgICBpZiAoY29sb25JbmRleCA9PSAtMSB8fCBub2RlVmFsdWUuY2hhckF0KGNvbG9uSW5kZXggKyAxKSA9PSAnLycpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBoZXJlIHdlIGhhdmUgZm91bmQgYSBjb2xvbiBkZWxpbWl0ZXIgc28gd2UgbmVlZCB0aGUgbmFtZXNwYWNlIGRlZmluZWQgaGVyZQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBub2RlVmFsdWUgPSBub2RlVmFsdWUuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZS5pbnRlcm4oKSkpCi0gICAgICAgIHsKLQotICAgICAgICAgIG5hbWVzcGFjZS5hZGQobm9kZVZhbHVlLmludGVybigpKTsKLSAgICAgICAgfQotICAgICAgICAvLwkJfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlcyB0aGF0IGhhdmUgYW4gaW1wb3J0IHN0YXRlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtIFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBBIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgYXJlIGltcG9ydGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0SW1wb3J0TmFtZXNwYWNlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgTGlzdCBjaGlsZG5zID0gZ2V0SW1wb3J0TmFtZXNwYWNlcyhjaGlsZCk7Ci0gICAgICAgIGZvciAoaW50IGogPSBjaGlsZG5zLnNpemUoKSAtIDE7IGogPj0gMDsgai0tKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyljaGlsZG5zLmdldChqKTsKLSAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGlmIHRoaXMgaXMgYW4gaW1wb3J0IGVsZW1lbnQgZ2V0IHRoZSBuYW1lc3BhY2UgYW5kIGFkZCBpdCB0byB0aGUgbGlzdAotICAgIGlmIChlbGVtLmdldExvY2FsTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoSU1QT1JUKSkKLSAgICB7Ci0gICAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBuLmdldE5vZGVOYW1lKCk7Ci0gICAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKE5BTUVTUEFDRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhub2RlVmFsdWUuaW50ZXJuKCkpKQotICAgICAgICAgIHsKLQotICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUuaW50ZXJuKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBIYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXMga2V5cyBmcm9tIHRoZSBnaXZlbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgaGFzaHRhYmxlIHdpdGggbmFtZXNwYWNlIHByZWZpeGVzIG1hcHBlZCB0byBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROU1Jlc29sdmVyKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0KLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5vZGVWYWx1ZSA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lUHJlZml4ID0gbm9kZU5hbWU7Ci0KLSAgICAgICAgaWYgKG5hbWVQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShYTUxOUykpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZVByZWZpeCA9IG5hbWVQcmVmaXguc3Vic3RyaW5nKDYpOwotICAgICAgICB9Ci0gICAgICAgIG5zUmVzb2x2ZXIucHV0KG5hbWVQcmVmaXgsIG5vZGVWYWx1ZSk7Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5zUmVzb2x2ZXI7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXNvbHZlIHRoZSBuYW1lc3BhY2VzIGluIHRoZSBnaXZlbiBuYW1lc3BhY2VzIGxpc3Qgd2l0aCB0aGUgdHdvIG5hbWVzcGFjZQotICAgKiByZXNvbHZlciBoYXNodGFibGVzIHByb3ZpZGVkLiBSZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlIHRoYXQgbmVlZAotICAgKiB0byBiZSBkZWNsYXJlZC4KLSAgICogRmlyc3QgcmVzb2x2ZSBhZ2FpbnN0IHRoZSBsb2NhbCBuYW1lc3BhY2VzIHdpdGggbnNSZXNvbHZlci4KLSAgICogTmV4dCByZXNvbHZlIGFnYWluc3QgdGhlIHBhcmVudCBuYW1lc3BhY2Ugd2l0aCBwYXJlbnROU1Jlc29sdmVyLgotICAgKiBBIHNpZGUgYWZmZWN0IG9mIHRoaXMgbWV0aG9kIGlzIHRoZSBuYW1lc3BhY2VzIGxpc3QgaXMgbGVmdCB3aXRoIG9ubHkgdGhvc2UgCi0gICAqIG5hbWVzcGFjZXMgdGhhdCBhcmUgcmVzb2x2ZWQgYW5kIHRoZSByZXNvbHZlZCBlbnRpdGllcyBhcmUgcGxhY2VkIGluIHRoZSAKLSAgICogbGlzdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBlbnRyaWVzLgotICAgKiBGb3IgZXguIElmIHlvdSBwcm92aWRlIGEgbGlzdCBzdWNoIGFzIHt4c2QsIGludGZ9IGFuZCBvbmx5IHhzZCBjYW4gYmUgcmVzb2x2ZWQKLSAgICogeW91IHdpbGwgZW5kIHVwIHdpdGggdGhlIGxpc3Qge2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hfQotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZXMgVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byByZXNvbHZlLgotICAgKiBAcGFyYW0gbnNSZXNvbHZlciBUaGUgaGFzaHRhYmxlIHRvIGJlIHVzZWQgYXMgdGhlIGxvY2FsIHJlc29sdmVyLgotICAgKiBAcGFyYW0gcGFyZW50TlNSZXNvbHZlciBUaGUgaGFzaHRhYmxlIHRvIGJlIHVzZWQgYXMgdGhlIHBhcmVudCBuYW1lc3BhY2UgcmVzb2x2ZXIuCi0gICAqIEByZXR1cm4gQSBIYXNodGFibGUgb2YgbmFtZXNwYWNlcyB0aGF0IG11c3QgYmUgZGVjbGFyZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIHJlc29sdmVOYW1lc3BhY2VzKExpc3QgbmFtZXNwYWNlcywgSGFzaHRhYmxlIG5zUmVzb2x2ZXIsIEhhc2h0YWJsZSBwYXJlbnROU1Jlc29sdmVyKQotICB7Ci0gIAlIYXNodGFibGUgcmVxTlNEZWNsID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChuYW1lc3BhY2VzICE9IG51bGwgJiYgIW5hbWVzcGFjZXMuaXNFbXB0eSgpICYmIG5zUmVzb2x2ZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gbmFtZXNwYWNlcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyluYW1lc3BhY2VzLmdldChpKTsKLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBuYW1lc3BhY2UgZnJvbSB0aGUgbGlzdC4KLSAgICAgICAgbmFtZXNwYWNlcy5yZW1vdmUoaSk7Ci0gICAgICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICAgICAgaWYgKG5zUmVzb2x2ZXIuY29udGFpbnNLZXkobnMpKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IHJlc29sdmVkTlMgPSBuc1Jlc29sdmVyLmdldChucyk7Ci0gICAgICAgICAgLy8gT25seSBhZGQgdGhlIG5hbWVzcGFjZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0LgotICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZXMuYWRkKGksIG5zUmVzb2x2ZXIuZ2V0KG5zKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIE5leHQgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIAlpZiAobnMuZXF1YWxzKCIiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbnMgPSBYTUxOUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbnMgPSBYTUxOUyArICI6IiArIG5zOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBhcmVudE5TUmVzb2x2ZXIuY29udGFpbnNLZXkobnMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IHBhcmVudE5TUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAgICAgLy8gT25seSBhZGQgdGhlIG5hbWVzcGFjZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0LgotICAgICAgICAgICAgICBpZighbmFtZXNwYWNlcy5jb250YWlucyhyZXNvbHZlZE5TKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYWRkKGksIHJlc29sdmVkTlMpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8vIFN0aWxsIG5lZWQgdG8gZGVjbGFyZSB0aGUgbmFtZXNwYWNlIHRob3VnaC4KLSAgICAgICAgICAgICAgcmVxTlNEZWNsLnB1dChucywgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVxTlNEZWNsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSBhbnkgbmFtZXNwYWNlIGZyb20gdGhlIG5hbWVzcGFjZXMgbGlzdCBpZiBpdCBpcyBpbiB0aGUgaW1wb3J0IGxpc3QuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbmFtZXNwYWNlcyBsaXN0LgotICAgKiBAcGFyYW0gaW1wb3J0ZWROYW1lc3BhY2VzIEEgbGlzdCBvZiBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgd2l0aG91dCB0aGUgaW1wb3J0ZWQgbmFtZXNwYWNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IHJlbW92ZUltcG9ydHMoTGlzdCBuYW1lc3BhY2VzLCBMaXN0IGltcG9ydGVkTmFtZXNwYWNlcykKLSAgewotICAgIGlmIChuYW1lc3BhY2VzICE9IG51bGwgJiYgaW1wb3J0ZWROYW1lc3BhY2VzICE9IG51bGwgJiYgIWltcG9ydGVkTmFtZXNwYWNlcy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgSXRlcmF0b3IgaUltcG9ydGVkTlMgPSBpbXBvcnRlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpSW1wb3J0ZWROUy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpTlMgPSAoU3RyaW5nKWlJbXBvcnRlZE5TLm5leHQoKTsKLQotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpTlMpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZXNwYWNlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmUgdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIHNjaGVtYSBhbmQgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoZSBpZ25vcmVOYW1lc3BhY2VzCi0gICAqIGxpc3QgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IHByb3ZpZGVkLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZXMgVGhlIGxpc3Qgb2YgbG9jYWwgbmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgd2l0aCB0aGUgbG9jYWwgbmFtZXNwYWNlcyByZW1vdmVkLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlTG9jYWxOYW1lc3BhY2VzKExpc3QgbmFtZXNwYWNlcywgRWxlbWVudCBlbGVtKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBlbGVtICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5zID0gZWxlbS5nZXRBdHRyaWJ1dGUoVEFSR0VUTkFNRVNQQUNFKTsKLSAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKG5zKTsKLQotICAgICAgZm9yIChpbnQgaSA9IGlnbm9yZU5hbWVzcGFjZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIC8vIGtlZXAgcmVtb3ZpbmcgdGhlIG5hbWVzcGFjZSB1bnRpbCBpdCBpcyBub3QgaW4gdGhlIGxpc3QKLSAgICAgICAgaWYgKG5hbWVzcGFjZXMucmVtb3ZlKGlnbm9yZU5hbWVzcGFjZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBpcyBpbiB0aGUgbGlzdCBvZiByZXF1aXJlZCBuYW1lc3BhY2VzLAotICAgKiBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcGFyYW0gcmVxbnMgVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBjaGVjayBmb3IgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlcyBpcyBpbiB0aGUgbGlzdCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChMaXN0IHJlcW5zKQotICB7Ci0gICAgaWYgKHJlcW5zLmNvbnRhaW5zKFNPQVBfRU5DT0RJTkdfVVJJKSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzkxYTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc2NoZW1hLlNjaGVtYTsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWFDb25zdGFudHM7Ci0KLS8qKgotICogUGx1Z2luIHZhbGlkYXRvciBmb3IgdGhlIFdTREwgVmFsaWRhdGlvbiBmcmFtZXdvcmsuIFZhbGlkYXRlcyBpbmxpbmUgc2NoZW1hIGZvdW5kIGluIGEgV1NETCBkb2N1bWVudC4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYVZhbGlkYXRvcgotewotICBMaXN0IGVsZW1lbnRzID0gbnVsbDsKLQotCi0gIHB1YmxpYyBNYXAgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgCWVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAJU2NoZW1hIGVsZW0gPSAoU2NoZW1hKSBlbGVtZW50OwotICAgIERlZmluaXRpb24gd3NkbERlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgcGFyZW50cy5nZXQocGFyZW50cy5zaXplKCkgLSAxKTsKLSAgICAvLyBBZGQgaW4gdGhlIG5hbWVzcGFjZXMgZGVmaW5lZCBpbiB0aGUgZG9jIGFscmVhZHkgdGhhdCBhcmVuJ3QgZGVmaW5lZCBsb2NhbGx5IGluIHRoaXMgc2NoZW1hLgotICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIG5hbWVzcGFjZXMgb3RoZXIgdGhlbiBpbiB0aGUgZGVmaW50aW9ucyBhbmQgdHlwZXMgZWxlbWVudHMgYXMKLSAgICAvLyBpbmxpbmUgc2NoZW1hIGNhbiBub3QgaGF2ZSBhbnkgb3RoZXIgcGFyZW50cyBhbmQgbXVzdCBoYXZlIHRoZXJlIHR3byBwYXJlbnRzLgotICAgIC8vIEZpcnN0IHRha2UgY2FyZSBvZiB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudAotCi0gICAgLy8gY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCUVsZW1lbnQgdzNjZWxlbWVudCA9IGVsZW0uZ2V0RWxlbWVudCgpOwotCUhhc2h0YWJsZSBwYXJlbnRuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sdzNjZWxlbWVudCk7Ci0JU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IHczY2VsZW1lbnQuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotCS8vIGlmIHRoZSB0YXJnZXROYW1lc3BhY2UgaGFzbid0IGJlZW4gZGVmaW5lZCBmb3IgdGhlIHNjaGVtYSB1c2UgdGhlIAotCS8vIHRhcmdldE5hbWVzcGFjZSBvZiB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudAotCS8qaWYodGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlLmVxdWFscygiIikpCi0JIHsKLQkgIHRhcmdldE5hbWVzcGFjZSA9IHdzZGxEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCSAgdzNjZWxlbWVudC5zZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSx0YXJnZXROYW1lc3BhY2UpOwotCX0qLwotCi0JU3RyaW5nIHhzZCA9IElubGluZVNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmcodzNjZWxlbWVudCwgZWxlbWVudHMsIGZpbGVuYW1lLCBwYXJlbnRuYW1lc3BhY2VzKTsKLQotICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgZ2l2ZW4gaXMgb25lIG9mIHRoZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgcHJvZHVjZSBhIHdhcm5pbmcuCi0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IHczY2VsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgaWYobmFtZXNwYWNlLmVxdWFscyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCBuYW1lc3BhY2UuZXF1YWxzKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgbmFtZXNwYWNlIGlzIHNwZWNpZmllZC4iKTsKLSAgICB9Ci0KLSAgICAvLyBub3cgY3JlYXRlIGFuZCBjYWxsIHRoZSB2YWxpZGF0b3IgZm9yIHRoZSBpbmxpbmUgc2NoZW1hCi0gICAgWFNEVmFsaWRhdG9yIHNjaGVtYXYgPSBuZXcgWFNEVmFsaWRhdG9yKCk7Ci0KLSAgICAvL1N0cmluZyBmaWxlTG9jYXRpb24gPSBuZXcgVVJMKHZhbGlkYXRvcm1hbmFnZXIuZ2V0RmlsZW5hbWUoKSkuZ2V0UGF0aCgpOwotICAgIElubGluZVhTRFJlc29sdmVyIGlubGluZUVudGl0eVJlc29sdmVyID0KLSAgICAgIGdldEVudGl0eVJlc29sdmVyKHdzZGxEZWZpbml0aW9uLCAoVHlwZXMpIHBhcmVudHMuZ2V0KDApLCBmaWxlbmFtZSwgdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAvLwlhZGQgaW4gdGhlIGV4dGVybmFsIFhTRCBDYXRhbG9nIHRvIHJlc29sdmUgc2NoZW1hcyBvZmZsaW5lCi0gICAgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbiBlbnRpdHlSZXNvbHZlckNoYWluID0gbmV3IFhNTEVudGl0eVJlc29sdmVyQ2hhaW4oKTsKLSAgICBlbnRpdHlSZXNvbHZlckNoYWluLmFkZEVudGl0eVJlc29sdmVyKGlubGluZUVudGl0eVJlc29sdmVyKTsKLSAgICBlbnRpdHlSZXNvbHZlckNoYWluLmFkZEVudGl0eVJlc29sdmVyKG5ldyBGaWxlRW50aXR5UmVzb2x2ZXIoKSk7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihYTUxDYXRhbG9nUmVzb2x2ZXIuZ2V0SW5zdGFuY2UoKSk7Ci0gICAgc2NoZW1hdi52YWxpZGF0ZUlubGluZVNjaGVtYSh4c2QsIHRhcmdldE5hbWVzcGFjZSwgZmlsZW5hbWUsIGVudGl0eVJlc29sdmVyQ2hhaW4sIGlubGluZUVudGl0eVJlc29sdmVyKTsKLQotICAgIC8vIGNoZWNrIGlmIHRoZSBTT0FQIEVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkCi0gICAgaWYgKElubGluZVNjaGVtYUdlbmVyYXRvci5zb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKGVsZW0uZ2V0RWxlbWVudCgpLCBmaWxlbmFtZSxwYXJlbnRuYW1lc3BhY2VzKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGUgaW5saW5lIHNjaGVtYSB1c2VzIGFuIGVsZW1lbnQgb3IgdHlwZSBmcm9tICIKLSAgICAgICAgKyAidGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGJ1dCB0aGUgbmFtZXNwYWNlIGhhcyBub3QgYmVlbiBpbXBvcnRlZC4gIgotICAgICAgICArICJUaGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2Ugc2hvdWxkIGJlIGltcG9ydGVkIHdpdGggYW4gaW1wb3J0ICIKLSAgICAgICAgKyAic3RhdGVtZW50IGJlZm9yZSBpdCBpcyB1c2VkLiIpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBzY2hlbWEgaXNuJ3QgdmFsaWQKLSAgICBpZiAoIXNjaGVtYXYuaXNWYWxpZCgpKQotICAgIHsKLSAgICAgIC8vIEdhdGhlcmluZyBhbGwgdGhlIGVycm9ycwotICAgICAgU3RyaW5nQnVmZmVyIGV4Y2VwdGlvbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIEl0ZXJhdG9yIGkgPSBzY2hlbWF2LmdldEVycm9ycygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGV4Y2VwdGlvbi5hcHBlbmQoaS5uZXh0KCkpLmFwcGVuZCgnXG4nKTsKLSAgICAgIH0KLSAgICAgIC8vIHRocm93IGFuIGV4Y2VwdGlvbgotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihleGNlcHRpb24udG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIC8vIGlmIHRoZSBzY2hlbWEgaXMgdmFsaWQKLSAgICBlbHNlCi0gICAgewotICAgICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKDEpOwotICAgICAgbWFwLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYXYuZ2V0WFNNb2RlbCgpKTsKLSAgICAgIHJldHVybiBtYXA7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbiBlbnRpdHkgcmVzb2x2ZXIgdGhhdCB3aWxsIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuICBFdmVyeSBpbmxpbmUgc2NoZW1hIGlzIHByZXJlZ2lzdGVyZWQgd2l0aAotICAgKiB0aGUgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIHR5cGVzIFRoZSB0eXBlcyBlbGVtZW50LgotICAgKiBAcGFyYW0gcmVmZXJlbmNlTG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldE5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEFuIGVudGl0eSByZXNvbHZlciB0aGF0IGNhbiByZXNvbHZlIGlubGluZSBzY2hlbWFzLgotICAgKi8KLSAgcHJvdGVjdGVkIElubGluZVhTRFJlc29sdmVyIGdldEVudGl0eVJlc29sdmVyKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIFR5cGVzIHR5cGVzLCBTdHJpbmcgcmVmZXJlbmNlTG9jYXRpb24sIFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICBJbmxpbmVYU0RSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IG5ldyBJbmxpbmVYU0RSZXNvbHZlcigpOwotLy8gICAgZW50aXR5UmVzb2x2ZXIuc2V0UmVmZXJlbmNlTG9jYXRpb24ocmVmZXJlbmNlTG9jYXRpb24pOwotICAgIExpc3Qgc2NoZW1hcyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChzY2hlbWFzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaVNjaGVtYXMgPSBzY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaVNjaGVtYXMuaGFzTmV4dCgpKQotICAgICAgewotICAgIAlTY2hlbWEgZXh0RWxlbSA9IChTY2hlbWEpIGlTY2hlbWFzLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHRoaXNOYW1lc3BhY2UgPSBleHRFbGVtLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgICAgIGlmICh0aGlzTmFtZXNwYWNlICE9IG51bGwgJiYgIXRoaXNOYW1lc3BhY2UuZXF1YWxzSWdub3JlQ2FzZSh0YXJnZXROYW1lc3BhY2UpKQotICAgICAgICB7Ci0KLSAgICAgICAgCUVsZW1lbnQgZWxlbWVudCA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpOwotCQkJCi0vLwkJCWNyZWF0ZSB0aGUgaW5saW5lIHNjaGVtYSBzdHJpbmcKLQkJCSAvL0VsZW1lbnQgdzNjZWxlbWVudCA9IGVsZW0uZ2V0RWxlbWVudCgpOwotCQkJIEhhc2h0YWJsZSBwYXJlbnRuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sZWxlbWVudCk7Ci0JCQkgU3RyaW5nIHhzZCA9IElubGluZVNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmcoZWxlbWVudCwgZWxlbWVudHMsIHJlZmVyZW5jZUxvY2F0aW9uLCBwYXJlbnRuYW1lc3BhY2VzKTsKLSAgICAgICAgCS8vYWRkTmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sZWxlbWVudCk7Ci0gICAgICAgICAgZW50aXR5UmVzb2x2ZXIuYWRkKHRoaXNOYW1lc3BhY2UsIHhzZCk7Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW50aXR5UmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXMgaW4gdGhlIGZvcm0gCi0gICAqIHhtbG5zPSJzb21lbmFtZXNwYWNlIgotICAgKiBmcm9tIHRoZSBkZWZpbml0aW9ucyBhbmQgdHlwZXMgZWxlbWVudHMgYW5kIGFkZCB0aGVtIHRvIHRoZSBzY2hlbWEgZWxlbWVudCBzbyB0aGUgc2NoZW1hIAotICAgKiB2YWxpZGF0b3Igd2lsbCBoYXZlIGFjY2VzcyB0byB0aGVtLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSB0eXBlcyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgaGFzaHRhYmxlIHdpdGggdGhlIG5hbWVzcGFjZSBlbGVtZW50cyBmcm9tIHRoZSBlbGVtZW50cyBwcm92aWRlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgZ2V0TmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gIAlIYXNodGFibGUgbnNzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIEl0ZXJhdG9yIG5hbWVTcGFjZXMgPSB3c2RsRGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQotICAgIFN0cmluZyBYTUxOUyA9IENvbnN0YW50cy5BVFRSX1hNTE5TOwotICAgIAotICAgIHdoaWxlIChuYW1lU3BhY2VzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnNwcmVmaXggPSBYTUxOUzsKLSAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpIG5hbWVTcGFjZXMubmV4dCgpOwotICAgICAgaWYgKCFucy5lcXVhbHNJZ25vcmVDYXNlKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbnNwcmVmaXggKz0gIjoiOwotICAgICAgfQotICAgICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShuc3ByZWZpeCArIG5zKSkKLSAgICAgIHsKLSAgICAgIAluc3MucHV0KG5zcHJlZml4ICsgbnMsIHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZShucykpOwotLy8gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5zcHJlZml4ICsgbnMsIHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZShucykpOwotICAgICAgfQotCi0gICAgfQotICAgIC8vIE5leHQgaGFuZGxlIHRoZSBwYXJlbnQgdHlwZXMgZWxlbWVudAotICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCkuZ2V0QXR0cmlidXRlcygpOwotICAgIGludCBhdHRzbGVuZ3RoID0gYXR0cy5nZXRMZW5ndGgoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHNsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIHRlbXBub2RlID0gYXR0cy5pdGVtKGkpOwotICAgICAgU3RyaW5nIG5vZGVuYW1lID0gdGVtcG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIC8vIGlmIHRoaXMgaXMgYSBuYW1lc3BhY2UgYXR0cmlidXRlCi0gICAgICBpZiAobm9kZW5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEpCi0gICAgICB7Ci0JCW5zcy5wdXQobm9kZW5hbWUsICB0ZW1wbm9kZS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIC8vZWxlbWVudC5zZXRBdHRyaWJ1dGUobm9kZW5hbWUsIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5zczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdpdmVuIGEgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEgcmV0dXJucyB0aGUgZWxlbWVudCBmb3VuZCBvbiB0aGF0IGxpbmUuIAotICAgKiBVc2VmdWwgZm9yIG9idGFpbmluZyBlbGVtZW50cyBmcm9tIHNjaGVtYSBTdHJpbmdzLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIFRoZSBvYmplY3QgbG9jYXRlZCBhdCB0aGUgbGluZSBvciBhdCBsaW5lIDAgaWYgdGhlIGxpbmUgaXMgaW52YWxpZC4KLSAgICovCi0gICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdEF0TGluZShpbnQgbGluZSkKLSAgIHsKLSAgIAlpZihsaW5lIDwgMCB8fCBsaW5lID49IGVsZW1lbnRzLnNpemUoKSkKLSAgIAl7Ci0gICAJICBsaW5lID0gMDsKLSAgIAl9Ci0JcmV0dXJuIGVsZW1lbnRzLmdldChsaW5lKTsKLSAgIH0KLSAgIAotICAvKioKLSAgICogUmVwbGFjZSBhbnkgaW5zdGFuY2Ugb2YgdGhlIDIwMDEgc2NoZW1hIG5hbWVzcGFjZSBpbiB0aGUgZ2l2ZW4gbWVzc2FnZSB3aXRoCi0gICAqIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byByZXBsYWNlIHRoZSBuYW1lc3BhY2UgaW4uCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB1c2VkIGZvciByZXBsYWNlbWVudC4KLSAgICogQHJldHVybiBUaGUgbWVzc2FnZSB3aXRoIHRoZSAyMDAxIHNjaGVtYSBuYW1lc3BhY2UgcmVwbGFjZWQgYnkgdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICovCi0gLy8gcHJpdmF0ZSBTdHJpbmcgcmVwbGFjZU5hbWVzcGFjZShTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAvLyAgewotIC8vICAgIFN0cmluZyB4c2QyMDAxID0gQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAvLyAgICBpbnQgc3RhcnQgPSBtZXNzYWdlLmluZGV4T2YoeHNkMjAwMSk7Ci0gLy8gICAgaW50IGVuZCA9IHN0YXJ0ICsgeHNkMjAwMS5sZW5ndGgoKTsKLSAvLyAgICBpZihzdGFydCA8IDApCi0gLy8gICAgewotIC8vICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gLy8gICAgfQotIC8vICAgIFN0cmluZyBzdGFydFN0cmluZyA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsc3RhcnQpOwotIC8vICAgIFN0cmluZyBlbmRTdHJpbmcgPSBtZXNzYWdlLnN1YnN0cmluZyhlbmQsbWVzc2FnZS5sZW5ndGgoKSk7Ci0gLy8gICAgcmV0dXJuIHN0YXJ0U3RyaW5nICsgbmFtZXNwYWNlICsgZW5kU3RyaW5nOwotIC8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lWFNEUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkNWE3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci0KLS8qKgotICogQW4gWE1MRW50aXR5UmVzb2x2ZXIgdGhhdCBhbGxvd3MgaW5saW5lIHNjaGVtYXMgdG8gcmVzb2x2ZSBlYWNoIG90aGVyIHRocm91Z2ggaW1wb3J0cy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIElubGluZVhTRFJlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBlbnRpdGllcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgcHJvdGVjdGVkIFhNTElucHV0U291cmNlIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHVjdG9yLgotICAgKi8KLSAgcHVibGljIElubGluZVhTRFJlc29sdmVyKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmllcikKLQkJIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQlTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0RXhwYW5kZWRTeXN0ZW1JZCgpOwotCVN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwotCVN0cmluZyBuYW1lc3BhY2UgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TmFtZXNwYWNlKCk7Ci0JWE1MSW5wdXRTb3VyY2UgaXMgPSBudWxsOwotCVN0cmluZyBzY2hlbWEgPSBudWxsOwotCWlmIChzeXN0ZW1JZCA9PSBudWxsKQotCXsKLQkgIGlmKHB1YmxpY0lkID09IG51bGwpCi0JICB7Ci0JICAJaWYobmFtZXNwYWNlID09IG51bGwpCi0JICAJewkKLQkgICAgICByZXR1cm4gbnVsbDsKLQkgIAl9Ci0JICAJZWxzZQotCSAgCXsKLQkgIAkJc3lzdGVtSWQgPSBuYW1lc3BhY2U7Ci0JICAJfQotCSAgfQotCSAgZWxzZQotCSAgewkKLQkgICAgc3lzdGVtSWQgPSBwdWJsaWNJZDsKLQkgIH0KLQl9Ci0JICAKLQlpZihyZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UgIT0gbnVsbCAmJiByZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UuZXF1YWxzKHN5c3RlbUlkKSkKLQl7Ci0JCWlmKHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlIT1udWxsKQotCQl7Ci0JCQlyZXR1cm4gcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2U7Ci0JCX0KLQl9Ci0JZWxzZSBpZiAoKHNjaGVtYSA9IChTdHJpbmcpIGVudGl0aWVzLmdldChzeXN0ZW1JZCkpICE9IG51bGwgJiYgIXNjaGVtYS5lcXVhbHMoIiIpKQotCXsKLQkJaXMgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHN5c3RlbUlkLCBzeXN0ZW1JZCxuZXcgU3RyaW5nUmVhZGVyKHNjaGVtYSksbnVsbCk7Ci0JfQotCQotICAgIC8vaWYoaXMgPT0gbnVsbCkKLSAgICAvL3sKLSAgICAvLwl0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKLSAgICAvL30KLQlyZXR1cm4gaXM7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGFuIGlubGluZSBzY2hlbWEuCi0gICAqIAotICAgKiBAcGFyYW0gdGFyZ2V0TmFtZXNwYWNlIC0gdGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYQotICAgKiBAcGFyYW0gc2NoZW1hIC0gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNjaGVtYQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFN0cmluZyBzY2hlbWEpCi0gIHsKLSAgICBlbnRpdGllcy5wdXQodGFyZ2V0TmFtZXNwYWNlLCBzY2hlbWEpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIHRoZSByZWZlcnJpbmcgaW5saW5lIHNjaGVtYS4gCi0gICAqIAotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgLSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbmxpbmUgc2NoZW1hCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSB0aGUgbmFtZXNwYWNlIG9mIHRoZSBpbmxpbmUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSZWZlcnJpbmdTY2hlbWEoWE1MSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZSA9IGlucHV0U291cmNlOwotICAgIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvTGF6eVVSTElucHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlMmE5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBhbGxvd3MgSW5wdXRTdHJlYW1zIHRvIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkIHRvIHhlcmNlcyB3aXRob3V0Ci0gKiBhY3R1YWxseSBvcGVuaW5nIGZpbGUgaGFuZGxlcyBvciBuZXR3b3JrIGNvbm5lY3Rpb25zIHVudGlsIGl0IGlzIGFic29sdXRlbHkKLSAqIG5lY2Nlc3NhcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXp5VVJMSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbQoteyAgCi0gIHByaXZhdGUgc3RhdGljIGludCBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ID0gMDsgCi0gIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbm5lcjsKLSAgcHJvdGVjdGVkIFN0cmluZyB1cmw7Ci0gIHByb3RlY3RlZCBib29sZWFuIGVycm9yOwotICBib29sZWFuIGhhc01hcmtzOwotICBib29sZWFuIHByZXRlbmRGaWxlSXNTdGlsbE9wZW47Ci0KLSAgcHVibGljIExhenlVUkxJbnB1dFN0cmVhbShTdHJpbmcgdXJsKQotICB7Ci0gICAgdGhpcy51cmwgPSB1cmw7Ci0JaW5uZXIgPSBudWxsOwotCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChpbm5lciA9PSBudWxsICYmICFlcnJvcikKLSAgICB7Ci0gICAgICBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50Kys7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3RyZWFtICgiICsgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCArICIpLS0gIiArIHVybCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaW5uZXIgPSBuZXcgVVJMKHVybCkub3BlblN0cmVhbSgpOwotCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0JCWhhc01hcmtzID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5IAotICAgICAgewotICAgICAgICBpZiAoaW5uZXIgPT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjbG9zZVN0cmVhbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChpbm5lciAhPSBudWxsICYmICFwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSB7Ci0JCQlpbm5lci5jbG9zZSgpOwotCQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IHRydWU7Ci0JCX0KLSAgCX0KLQotICBwdWJsaWMgaW50IGF2YWlsYWJsZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAwOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JcmV0dXJuIGlubmVyLmF2YWlsYWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSB7Ci0JCS8vIFN0b3AgYmVoYXZpbmcgYXMgaWYgdGhlIHN0cmVhbSB3ZXJlIHN0aWxsIG9wZW4uCi0JCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLQl9IGVsc2UgewotCQlpZiAoaW5uZXIgIT0gbnVsbCkgewotCQkJZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudC0tOwotCQkgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ2xvc2luZyBzdHJlYW0gKCIgKyBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ICsgIikgLS0gIiArIHVybCk7Ci0JCQlpbm5lci5jbG9zZSgpOwotCQl9Ci0JfQotICB9Ci0KLSAgcHVibGljIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybjsKLQloYXNNYXJrcyA9IHRydWU7Ci0JdHJ5IHsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlubmVyLm1hcmsocmVhZGxpbWl0KTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkKLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gZmFsc2U7Ci0JdHJ5IHsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlmIChpbm5lciA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0JCXJldHVybiBpbm5lci5tYXJrU3VwcG9ydGVkKCk7Ci0JfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCXJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKCk7Ci0JaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JcmV0dXJuIGJ5dGVzUmVhZDsKLSAgfQotCi0KLQlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gLTE7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCQlpbnQgYnl0ZXNSZWFkID0gaW5uZXIucmVhZChiKTsKLQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JCXJldHVybiBieXRlc1JlYWQ7Ci0JfQotCi0gIHB1YmxpYyBpbnQgcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIsIG9mZiwgbGVuKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlpbm5lci5yZXNldCgpOwotICB9Ci0KLSAgcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7ICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAwOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JcmV0dXJuIGlubmVyLnNraXAobik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9TY2hlbWFBdHRyaWJ1dGVUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDk3NjJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC54cy5TY2hlbWFTeW1ib2xzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuU3ltYm9sVGFibGU7Ci0vKioKLSAqIFRoaXMgY2xhc3Mgd2lsbCBhbGxvdyB0aGUgY2FsbGluZyBjb2RlIHRvIHNlZSBpZiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gc2NoZW1hLgotICogVGhpcyBzZXJ2ZXMgYXMgc2NoZW1hIGZvciBzY2hlbWEuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlCi17Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFNjaGVtYUF0dHJpYnV0ZVRhYmxlKCkKLSAgewotICAgIC8vIGFkZCBhbGwgb2YgdGhlIHN5Ym9scyB0byB0aGUgdGFibGUuIFNjaGVtYVN5bWJvbHMgcHJvYmFibHkgc2hvdWxkIGhhdmUKLSAgICAvLyBhIFN5bWJvbFRhYmxlIGZvciB0aGVzZSBidXQgaXQgZG9lc24ndAotCi0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5EQU5ZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRMT0NBTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5ET1RIRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORFRBUkdFVE5TKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUE9VTkRBTEwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GQUxTRV8wKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFJVRV8xKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZU0lNUExFVFlQRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVRZUEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllVUkkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CQVNFNjRCSU5BUlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CT09MRUFOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQllURSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0NPTExBUFNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFURSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBVEVUSU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREVDSU1BTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RPVUJMRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RVUkFUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRU5USVRZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRU5USVRJRVMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FWFRFTlNJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GQUxTRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZMT0FUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSEVYQklOQVJZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRFJFRik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEUkVGUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lOVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MQU5HVUFHRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xBWCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xJU1QpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MT05HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05FR0FUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX01PTlRIKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTU9OVEhEQVkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OQ05BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OTVRPS0VOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk1UT0tFTlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT05ORUdBVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT05QT1NJVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT1JNQUxJWkVEU1RSSU5HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9UQVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9PUFRJT05BTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BPU0lUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BSRVNFUlZFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUFJPSElCSVRFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1FOQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUVVBTElGSUVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVQTEFDRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFUVVJUkVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVTVFJJQ1RJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TSE9SVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NLSVApOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TVFJJQ1QpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TVFJJTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TVUJTVElUVVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9USU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVE9LRU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UUlVFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5CT1VOREVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5JT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlFVQUxJRklFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVEQllURSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVESU5UKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURMT05HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURTSE9SVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1lFQVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ZRUFSTU9OVEgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNhNzNmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBYTUxFcnJvckhhbmRsZXIgdGhhdCBjYXB0dXJlcyBlcnJvciBmcm9tIFhlcmNlcy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRlRXJyb3JIYW5kbGVyIGltcGxlbWVudHMgWE1MRXJyb3JIYW5kbGVyCi17Ci0gIEFycmF5TGlzdCBlcnJvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZXMgY3JlYXRlZCBieSBYZXJjZXMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlcnJvcnMgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9yTWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI2Vycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VFeGNlcHRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBlcnJvcihTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZCgiRXJyb3I6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI2ZhdGFsRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxLCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoIkZhdGFsIGVycm9yOiAiICsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlciN3YXJuaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VFeGNlcHRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCB3YXJuaW5nKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKCJXYXJuaW5nOiAiICsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YWZiNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi0vKioKLSAqIFhNTENhdGFsb2cKLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIsIG9idGFpbiBhbmQgZGVsZXRlIGFuIGluc3RhbmNlIG9mIGFuIAotICogWE1MIGNhdGFsb2cuIE1ldGhvZCBkZWZpbml0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHRoZSBjYXRhbG9nIHRvIHNldAotICogYSBsb2NhdGlvbiBpbiB0aGUgY2F0YWxvZyBhbmQgcmVzb2x2ZSBhbiBlbnRpdHkgZnJvbSB0aGUgY2F0YWxvZy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhNTENhdGFsb2cKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgWE1MQ2F0YWxvZyBpbnN0YW5jZSA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIENsYXNzIHhtbGNhdGFsb2djbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cuIElmIG5vIGluc3RhbmNlIGlzIHJlZ2lzdGVyZWQsCi0gICAqIHJldHVybnMgYSBkZWZhdWx0IGluc3RhbmNlLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFhNTCBjYXRhbG9nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFhNTENhdGFsb2cgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaWYgKHhtbGNhdGFsb2djbGFzcyAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGluc3RhbmNlID0gKFhNTENhdGFsb2cpeG1sY2F0YWxvZ2NsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgaW5zdGFuY2UgPSBuZXcgWE1MQ2F0YWxvZ0ltcGwoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnN0YW5jZSA9IG5ldyBYTUxDYXRhbG9nSW1wbCgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBjbGFzcyBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gYmUgdXNlZC4KLSAgICogCi0gICAqIEBwYXJhbSB4bWxjYXRhbG9nIC0gdGhlIGNsYXNzIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBiZSB1c2VkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0WE1MQ2F0YWxvZyhDbGFzcyB4bWxjYXRhbG9nKQotICB7Ci0gICAgeG1sY2F0YWxvZ2NsYXNzID0geG1sY2F0YWxvZzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBudWxsLiBBbGxvd3Mgc3dpdGNoaW5nIFhNTCBjYXRhbG9ncy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldCgpCi0gIHsKLSAgICBpbnN0YW5jZSA9IG51bGw7Ci0gICAgeG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYSBwdWJsaWMgaWQgYW5kIGEgbG9jYXRpb24gdG8gdGhlIGNhdGFsb2cuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgLSB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRyeQotICAgKiBAcGFyYW0gc3lzdGVtSWQgLSB0aGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRyeQotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgYWRkRW50cnlUb0NhdGFsb2coU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpOwotCi0gIC8qKgotICAgKiBSZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiBhbiBlbnRpdHkgZ2l2ZW4gcHVibGljIGFuZCBzeXN0ZW0gaWRzLgotICAgKiAKLSAgICogQHBhcmFtIHB1YmxpY0lkIC0gdGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50aXR5IHRvIGJlIHJlc29sdmVkCi0gICAqIEBwYXJhbSBzeXN0ZW1JZCAtIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudGl0eSB0byBiZSByZXNvbHZlZAotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZW50aXR5Ci0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHJlc29sdmVFbnRpdHlMb2NhdGlvbihTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YzQwZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWE1MIENhdGFsb2cuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDYXRhbG9nSW1wbCBleHRlbmRzIFhNTENhdGFsb2cKLXsKLSAgcHJvdGVjdGVkIE1hcCBjYXRhbG9nID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLnhtbGNvbmZvcm1hbmNlLlhNTENhdGFsb2cjYWRkRW50cnlUb0NhdGFsb2coamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5VG9DYXRhbG9nKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgY2F0YWxvZy5wdXQocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLnhtbGNvbmZvcm1hbmNlLlhNTENhdGFsb2cjcmVzb2x2ZUVudGl0eUxvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHJlc29sdmVFbnRpdHlMb2NhdGlvbihTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAJLy8gaWYgdGhlcmUncyBubyBzeXN0ZW0gaWQgdXNlIHRoZSBwdWJsaWMgaWQKLSAgICBpZiAoc3lzdGVtSWQgPT0gbnVsbCB8fCBzeXN0ZW1JZC5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIHN5c3RlbUlkID0gcHVibGljSWQ7Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nKWNhdGFsb2cuZ2V0KHN5c3RlbUlkKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZ1Jlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNlZmRjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotCi0vKioKLSAqIEEgcmVzb2x2ZXIgdG8gcmVzb2x2ZSBlbnRpdGllcyBmcm9tIHRoZSBYTUwgY2F0YWxvZy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIHhtbENhdGFsb2c7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIFhNTENhdGFsb2dSZXNvbHZlcigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHJlc29sdmVyCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFhNTENhdGFsb2dSZXNvbHZlciBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoeG1sQ2F0YWxvZyA9PSBudWxsKQotICAgIHsKLSAgICAgIHhtbENhdGFsb2cgPSBuZXcgWE1MQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0gICAgfQotICAgIHJldHVybiB4bWxDYXRhbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwotICAgIFN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9uID0gWE1MQ2F0YWxvZy5nZXRJbnN0YW5jZSgpLnJlc29sdmVFbnRpdHlMb2NhdGlvbihwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIFhNTElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIG5ldyBTdHJpbmdSZWFkZXIobG9jYXRpb24pLCBudWxsKTsKLSAgICAgIHJldHVybiBpbnB1dFNvdXJjZTsKLSAgICB9Ci0gICAgLy8gb3RoZXJ3aXNlIHJldHVybiBudWxsIHRvIHRlbGwgdGhlIHBhcnNlciB0byBsb2NhdGUgdGhlIHN5c3RlbUlkIGFzIGEgVVJJCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcxZjgwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxFbnRpdHlSZXNvbHZlckNoYWluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBIYW5kbGUgYSBjaGFpbiBvZiBlbnRpdHkgcmVzb2x2ZXJzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbiBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByaXZhdGUgTGlzdCBlbnRpdHlSZXNvbHZlcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciB4bWxSZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgSXRlcmF0b3IgZW50aXR5UmVzb2x2ZXJJdGVyID0gZW50aXR5UmVzb2x2ZXJzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGVudGl0eVJlc29sdmVySXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIgPSAoWE1MRW50aXR5UmVzb2x2ZXIpZW50aXR5UmVzb2x2ZXJJdGVyLm5leHQoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpcyA9IGVudGl0eVJlc29sdmVyLnJlc29sdmVFbnRpdHkoeG1sUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChYTklFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAvLyBUaHJvdyBhbmQgSU9FeGNlcHRpb24gaWYgdGhlIGZpbGUgaXNuJ3QgZm91bmQKLSAgICBpZiAoaXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlVuYWJsZSB0byBsb2NhdGUgZmlsZSIpOwotICAgIH0KLSAgICByZXR1cm4gaXM7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGFuIGVudGl0eSByZXNvbHZlciB0byB0aGlzIGNoYWluLgotICAgKiAKLSAgICogQHBhcmFtIGVudGl0eVJlc29sdmVyIFRoZSByZXNvbHZlciB0byBhZGQgdG8gdGhlIGNoYWluLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50aXR5UmVzb2x2ZXIoWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIpCi0gIHsKLSAgICBlbnRpdHlSZXNvbHZlcnMuYWRkKGVudGl0eVJlc29sdmVyKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWFNEVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YU0RWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFkM2M3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YU0RWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5YTUxHcmFtbWFyUHJlcGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YU0dyYW1tYXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci0KLQotLyoqCi0gKiBWYWxpZGF0ZSBzY2hlbWFzIGZyb20gZmlsZXMgb3IgU3RyaW5nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgWFNNb2RlbCB4c01vZGVsOwotICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFhTRDsKLSAgcHJpdmF0ZSBMaXN0IGVycm9yczsKLSAgcHJpdmF0ZSBTdHJpbmcgZmlsZWxvY2F0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBYU0RWYWxpZGF0b3IoKQotICB7Ci0gICAgeHNNb2RlbCA9IG51bGw7Ci0gICAgaXNWYWxpZFhTRCA9IGZhbHNlOwotICAgIGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgfQotICAvKioKLSAgICogVmFsaWRhdGUgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgQSBzY2hlbWEgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2MgVGhlIHVyaSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYShTdHJpbmcgc2NoZW1hLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBTdHJpbmcgZmlsZWxvYykKLSAgewotICAgIHZhbGlkYXRlSW5saW5lU2NoZW1hKHNjaGVtYSwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbG9jLCBudWxsLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiBpbmxpbmUgc2NoZW1hIGFuZCBzcGVjaWZ5IGFuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgVGhpcyBzY2hlbWEgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2MgVGhlIHVyaSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoaXMgc2NoZW1hLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXJDaGFpbiBUaGUgZW50aXR5IHJlc29sdmVyIGNoYWluLgotICAgKiBAcGFyYW0gaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIgQW4gaW5saW5lIHNjaGVtYSByZXNvbHZlciBmb3IgdGhpcyBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYSgKLSAgICBTdHJpbmcgc2NoZW1hLAotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsCi0gICAgU3RyaW5nIGZpbGVsb2MsCi0gICAgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXJDaGFpbiwKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGZpbGVsb2NhdGlvbiA9IGZpbGVsb2M7Ci0KLSAgICB2YWxpZGF0ZVhTRChzY2hlbWEsIHRydWUsIGVudGl0eVJlc29sdmVyQ2hhaW4sdGFyZ2V0TmFtZXNwYWNlLCBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcik7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGUgbG9jYXRlZCBhdCB0aGUgdXJpIHNwZWNpZmllZCB3aXRoIHRoZSBnaXZlbiBlbnRpdHkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIEFuIGFic29sdXRlIHVyaSBmb3IgdGhlIHNjaGVtYSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGVudGl0eVJlc29sdmVyIEFuIGVudGl0eSByZXNvbHZlciB0byBiZSB1c2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIpCi0gIHsKLSAgICB2YWxpZGF0ZVhTRCh1cmksIGZhbHNlLCBlbnRpdHlSZXNvbHZlciwgbnVsbCwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgVGhlIHNjaGVtYSBvciBpdCdzIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gaW5saW5lWFNEIFRydWUgaWYgYW4gaW5saW5lIHNjaGVtYSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIHVzZS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hIGJlaW5nIHZhbGlkYXRlZC4KLSAgICogQHBhcmFtIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyIEFuIGlubGluZSBzY2hlbWEgZW50aXR5IHJlc29sdmVyLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVYU0QoU3RyaW5nIHNjaGVtYSwgYm9vbGVhbiBpbmxpbmVYU0QsIFhNTEVudGl0eVJlc29sdmVyIGVudGl0eVJlc29sdmVyLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBYTUxFbnRpdHlSZXNvbHZlciBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikKLSAgewotICAgIFZhbGlkYXRlRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBWYWxpZGF0ZUVycm9ySGFuZGxlcigpOwotICAgIGVycm9ySGFuZGxlci5nZXRFcnJvck1lc3NhZ2VzKCkuY2xlYXIoKTsKLSAgICB0cnkKLSAgICB7Ci0JCVhNTEdyYW1tYXJQcmVwYXJzZXIgZ3JhbW1hclByZXBhcnNlciA9IG5ldyBYTUxHcmFtbWFyUHJlcGFyc2VyKCk7Ci0JCVhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sID0gbmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpOwotCQlncmFtbWFyUHJlcGFyc2VyLnNldEdyYW1tYXJQb29sKGdyYW1tYXJQb29sKTsKLQkgCi0gICAgICBncmFtbWFyUHJlcGFyc2VyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotICAgICAgaWYgKGVudGl0eVJlc29sdmVyICE9IG51bGwpCi0gICAgICB7Ci0JCWdyYW1tYXJQcmVwYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIoZW50aXR5UmVzb2x2ZXIpOwotICAgICAgfQotCi0gICAgICB0cnkKLSAgICAgIHsKLQkJWE1MSW5wdXRTb3VyY2UgaXMgPSBudWxsOwotICAgICAgICAvLyB0aGlzIGFsbG93cyBzdXBwb3J0IGZvciB0aGUgaW5saW5lIHNjaGVtYSBpbiBXU0RMIGRvY3VtZW50cwotICAgICAgICBpZiAoaW5saW5lWFNEKQotICAgICAgICB7Ci0gICAgICAgIAkKLSAgICAgICAgCVJlYWRlciByZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHNjaGVtYSk7Ci0JCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShudWxsLGZpbGVsb2NhdGlvbixmaWxlbG9jYXRpb24scmVhZGVyLG51bGwpOwotCQkJCi0JCQkoKElubGluZVhTRFJlc29sdmVyKWlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKS5hZGRSZWZlcnJpbmdTY2hlbWEoaXMsdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgICAgICB9Ci0gICAgICAgIC8vIGdldCB0aGUgaW5wdXQgc291cmNlIGZvciBhbiBleHRlcm5hbCBzY2hlbWEgZmlsZQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShudWxsLHNjaGVtYSxzY2hlbWEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBncmFtbWFyUHJlcGFyc2VyLnJlZ2lzdGVyUHJlcGFyc2VyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLG51bGwvKnNjaGVtYUxvYWRlciovKTsKLSAgICAgICAgZ3JhbW1hclByZXBhcnNlci5nZXRMb2FkZXIoWE1MR3JhbW1hckRlc2NyaXB0aW9uLlhNTF9TQ0hFTUEpOwotCi0JCVhTR3JhbW1hciBncmFtbWFyID0gKFhTR3JhbW1hcilncmFtbWFyUHJlcGFyc2VyLnByZXBhcnNlR3JhbW1hcihYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSxpcyk7Ci0JCXhzTW9kZWwgPSBncmFtbWFyLnRvWFNNb2RlbCgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvL3BhcnNlciB3aWxsIHJldHVybiBudWxsIHBvaW50ZXIgZXhjZXB0aW9uIGlmIHRoZSBkb2N1bWVudCBpcyBzdHJ1Y3R1cmFsbHkgaW52YWxpZAotICAgICAgICBlcnJvcnMuYWRkKCJTY2hlbWEgaXMgc3RydWN0dXJhbGx5IGludmFsaWQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGVycm9ycy5hZGRBbGwoZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgaWYgKGVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgaXNWYWxpZFhTRCA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFhTTW9kZWwgY3JlYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFhTTW9kZWwgY3JlYXRlZC4KLSAgICovCi0KLSAgcHVibGljIFhTTW9kZWwgZ2V0WFNNb2RlbCgpCi0gIHsKLSAgCXJldHVybiB4c01vZGVsOwotICB9Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzY2hlbWEgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIGlzVmFsaWRYU0Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBlcnJvciBsaXN0LgotICAgKiAKLSAgICogQHJldHVybiBBIGxpc3Qgb2YgZXJyb3IgZnJvbSB0aGUgc2NoZW1hLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JzKCkKLSAgewotICAgIHJldHVybiBlcnJvcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxDb252ZXJ0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxDb252ZXJ0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiMTM0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MQ29udmVydG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnZlcnRzIGEgWE1MIGRvY3VtZW50IHVzaW5nIGFuIFhTTCBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29udmVydG9yCi17Ci0KLSAgLyoqCi0gICAqIFRyYW5zZm9ybXMgYW4gWE1MIGRvY3VtZW50IHVzaW5nIGFuIFhTTCBmaWxlLgotICAgKiBAcGFyYW0gYXJncyAgYXJndW1lbnRzIGZvciBtYWluLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpCi0gICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAiVXNhZ2U6IFhNTENvbnZlcnRvciA8eHNsRmlsZT4gPGluWE1MRmlsZT4gPG91dEZpbGU+Iik7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IHRyYW5zZm9ybWVyIAotICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9Ci0gICAgICAgICAgVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoCi0gICAgICAgICAgICBuZXcgU3RyZWFtU291cmNlKGFyZ3NbMF0pKTsKLQotICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIFhNTCBkb2N1bWVudCB1c2luZyB0aGUgc3BlY2lmaWNlZCBYU0wgZmlsZQotICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oCi0gICAgICAgICAgbmV3IFN0cmVhbVNvdXJjZShhcmdzWzFdKSwKLSAgICAgICAgICBuZXcgU3RyZWFtUmVzdWx0KG5ldyBGaWxlT3V0cHV0U3RyZWFtKGFyZ3NbMl0pKSk7Ci0KLSAgICAgICAgLy8gRGlzcGxheSByZXN1bHRzCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAiQ3JlYXRlZCAiICsgYXJnc1syXSArICIgZnJvbSAiICsgYXJnc1swXSArICIgYW5kICIgKyBhcmdzWzFdICsgIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxEb2N1bWVudENhY2hlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMDg3NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhIEhhc2hNYXAgdG8gY2FjaGUgWE1MIGRvY3VtZW50cy4KLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxEb2N1bWVudENhY2hlIGV4dGVuZHMgSGFzaE1hcAotewotCXN0YXRpYyBYTUxEb2N1bWVudENhY2hlIGluc3RhbmNlOwotCi0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzgzNDAyODA0MzcwOTY1NzQwMUw7Ci0KLQkvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgIHRoZSBpbml0aWFsIGNhcGFjaXR5LgotICAgKiBAcGFyYW0gbG9hZEZhY3RvciAgICAgICB0aGUgbG9hZCBmYWN0b3IuIAotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoaW50IGluaXRpYWxDYXBhY2l0eSwgZmxvYXQgbG9hZEZhY3RvcikKLSAgewotICAgIHN1cGVyKGluaXRpYWxDYXBhY2l0eSwgbG9hZEZhY3Rvcik7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxEb2N1bWVudENhY2hlLgotICAgKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5ICB0aGUgaW5pdGlhbCBjYXBhY2l0eS4KLSAgICovCi0gIHB1YmxpYyBYTUxEb2N1bWVudENhY2hlKGludCBpbml0aWFsQ2FwYWNpdHkpCi0gIHsKLSAgICBzdXBlcihpbml0aWFsQ2FwYWNpdHkpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MRG9jdW1lbnRDYWNoZS4KLSAgICovCi0gIHB1YmxpYyBYTUxEb2N1bWVudENhY2hlKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxEb2N1bWVudENhY2hlLgotICAgKiBAcGFyYW0gdCAgdGhlIG1hcCB3aG9zZSBtYXBwaW5ncyBhcmUgdG8gYmUgcGxhY2VkIGluIHRoaXMgbWFwLgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoTWFwIHQpCi0gIHsKLSAgICBzdXBlcih0KTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFhNTERvY3VtZW50Q2FjaGUgaW5zdGFuY2UoKQotICB7Ci0JICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgCi0JCSAgaW5zdGFuY2UgPSBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotCSAgCi0JICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxEb2N1bWVudENhY2hlVXNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGVVc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MGYwN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGVVc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiBjYWNoZWQgWE1MIGRvY3VtZW50cy4KLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhNTERvY3VtZW50Q2FjaGVVc2VyCi17Ci0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgZnJvbSBjYWNoZS4KLSAgICogQHNlZSAjc2V0RG9jdW1lbnQKLSAgICoKLSAgICogQHBhcmFtIGtleSAgYSBTdHJpbmcuIAotICAgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleS4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcga2V5KQotICB7Ci0gICAgcmV0dXJuIChEb2N1bWVudCkgWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpLmdldChrZXkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFB1dCBkb2N1bWVudCB3aXRoIGNvcnJlc3BvbmRpbmcga2V5IGluIGNhY2hlLgotICAgKiBAc2VlICNnZXREb2N1bWVudAotICAgKgotICAgKiBAcGFyYW0ga2V5ICAgICAgIGEgU3RyaW5nIHVzZWQgYXMgYSBrZXkgdG8gaWRlbnRpZnkgc3BlY2lmaWVkIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnQgIGEgZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXREb2N1bWVudChTdHJpbmcga2V5LCBPYmplY3QgZG9jdW1lbnQpCi0gIHsKLQkgIFhNTERvY3VtZW50Q2FjaGUuaW5zdGFuY2UoKS5wdXQoa2V5LCBkb2N1bWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGRvY3VtZW50IGxpc3QuCi0gICAqIEByZXR1cm4gYSBYTUxEb2N1bWVudENhY2hlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGRvY3VtZW50IGxpc3QgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZSBnZXREb2N1bWVudExpc3QoKQotICB7Ci0gICAgcmV0dXJuIFhNTERvY3VtZW50Q2FjaGUuaW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBYTUwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB1cmxTdHJpbmcgIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBiYXNlVVJJICAgIGEgYmFzZSB1cmwgdG8gYXNzaXN0IGluIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGRvY3VtZW50IGNhbm5vdCBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgYmFzZVVSSSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcGFyc2VYTUxEb2N1bWVudFVSTCh1cmxTdHJpbmcsIGJhc2VVUkksIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIFhNTCBkb2N1bWVudCBhbmQgdmFsaWRhdGUgd2l0aCBhIHNjaGVtYSBkb2N1bWVudC4KLSAgICogQHBhcmFtIHVybFN0cmluZyAgYSBTdHJpbmcgbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGJhc2VVUkkgICAgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHNjaGVtYSAgICAgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGRvY3VtZW50IGNhbm5vdCBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTCgKLSAgICBTdHJpbmcgdXJsU3RyaW5nLAotICAgIFN0cmluZyBiYXNlVVJJLAotICAgIFN0cmluZyBzY2hlbWEpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIFVSTCByZWZlcmVuY2UgdG8gZG9jdW1lbnQKLSAgICAgIFVSTCB1cmwgPSBYTUxVdGlscy5jcmVhdGVVUkwodXJsU3RyaW5nLCBiYXNlVVJJKTsKLSAgICAgICAgICAgICAgIAotICAgICAgLy8gVE9ETzogQWRkIHNjaGVtYSB0byB0aGUgeG1sIGRvY3VtZW50IGNhY2hlLCBzbyB0aGF0IHlvdSBjYW4gZGV0ZWN0IHdoZW4gaXQgaGFzIGFscmVhZHkgCi0gICAgICAvLyAgYmVlbiBwYXJzZWQgdXNpbmcgYSBzcGVjaWZpYyBzY2hlbWEgZGVmaW5pdGlvbiAKLQotICAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGlzIG5vdCBpbiB0aGUgY2FjaGUsIHRoZW4gcmVhZCBhbmQgcGFyc2UgaXQKLSAgIAkgIGlmICgoZG9jdW1lbnQgPSBnZXREb2N1bWVudCh1cmxTdHJpbmcpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnRVUkwodXJsLCBzY2hlbWEpOwotICAgICAgICAvLyBBZGQgZG9jdW1lbnQgdG8gY2FjaGUKLSAgICAgICAgc2V0RG9jdW1lbnQodXJsU3RyaW5nLCBkb2N1bWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgIH0KLQotICAgIHJldHVybiBkb2N1bWVudDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRhZ3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxUYWdzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmQwNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRhZ3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgaW5mb3JtYXRpb24gb24gWE1MIHRhZ3MuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWE1MVGFncwotewotICAvKioKLSAgICogTmFtZXNwYWNlcy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9YU0kgPQotICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9YTUxOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBYU0RfU0NIRU1BTE9DQVRJT04gPQotICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiOwotCi0gIC8qKgotICAgKiBRdWFsaWZpZWQgbmFtZXMgb2YgWFNEIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9BTk5PVEFUSU9OID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImFubm90YXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9JTVBPUlQgPSBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImltcG9ydCIpOyAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfSU5DTFVERSA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiaW5jbHVkZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX1NDSEVNQSA9IG5ldyBRTmFtZShOU19VUklfWFNELCAic2NoZW1hIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfRUxFTUVOVCA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiZWxlbWVudCIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0FUVFJJQlVURSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJhdHRyaWJ1dGUiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9DT01QTEVYVFlQRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJjb21wbGV4VHlwZSIpOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0lfVFlQRSA9IG5ldyBRTmFtZShOU19VUklfWFNJLCAidHlwZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNJX05JTCA9IG5ldyBRTmFtZShOU19VUklfWFNJLCAibmlsIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9OQU1FID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJuYW1lIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0RfVFlQRSA9IG5ldyBRTmFtZShOU19VUklfWFNELCAidHlwZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX0JBU0UgPSBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImJhc2UiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9OQU1FU1BBQ0UgPQotICAgIG5ldyBRTmFtZShOU19VUklfWFNELCAibmFtZXNwYWNlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04gPQotICAgIG5ldyBRTmFtZShOU19VUklfWFNELCAic2NoZW1hTG9jYXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9UQVJHRVROQU1FU1BBQ0UgPQotICAgIG5ldyBRTmFtZShOU19VUklfWFNELCAidGFyZ2V0TmFtZXNwYWNlIik7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxUcmF2ZXJzYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxUcmF2ZXJzYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMzNmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVHJhdmVyc2FsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRW50aXR5OwotaW1wb3J0IG9yZy53M2MuZG9tLkVudGl0eVJlZmVyZW5jZTsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob3RhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotLyoqCi0gKiBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgbm9kZSBzb3VyY2UgY29kZSwgc28gdGhpcyBkb2VzCi0gKiBvdXIgZG91YmxlLWRpc3BhdGNoIHRoZSBoYXJkIHdheS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhNTFRyYXZlcnNhbCBleHRlbmRzIFhNTFZpc2l0b3IKLXsKLSAgLyoqCi0gICAgICogUmV0dXJuaW5nIGZhbHNlIGZyb20gYWN0aW9uIHdvdWxkIHRlcm1pbmF0ZXMgdHJhdmVyc2FsLgotICAgICAqIEhvd2V2ZXIsIHRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZS4gLS0gYSBuby1vcC4KLSAgICAgKiBAcGFyYW0gbiAtIGFuIFhNTCBub2RlLgotICAgICAqIEByZXR1cm4gYWx3YXlzIHRydWUuCi0gICAgICovCi0gIHB1YmxpYyBib29sZWFuIGFjdGlvbihOb2RlIG4pCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KENEQVRBU2VjdGlvbiBzKQotICB7Ci0gICAgYWN0aW9uKHMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnQgZSkKLSAgewotICAgIGlmIChhY3Rpb24oZSkpCi0gICAgewotICAgICAgLy8gVGhpcyBkb2VzIHZpc2l0IERvY3VtZW50VHlwZSwgd2hpY2ggaXMgY29uc2lkZXJlZCBhIGNoaWxkIE5vZGUuCi0gICAgICBmb3IgKE5vZGUgbiA9IGUuZ2V0Rmlyc3RDaGlsZCgpOyBuICE9IG51bGw7IG4gPSBuLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIGRvVmlzaXQobik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnRUeXBlIHR5cGUpCi0gIHsKLSAgICBpZiAoYWN0aW9uKHR5cGUpKQotICAgIHsKLSAgICAgIHZpc2l0KHR5cGUuZ2V0RW50aXRpZXMoKSk7Ci0gICAgICB2aXNpdCh0eXBlLmdldE5vdGF0aW9ucygpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChBdHRyIGUpCi0gIHsKLSAgICBhY3Rpb24oZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG5vZGUpCi0gIHsKLSAgICBpZiAoYWN0aW9uKG5vZGUpKQotICAgIHsKLSAgICAgIHZpc2l0KG5vZGUuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgIGZvciAoTm9kZSBuID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7IG4gIT0gbnVsbDsgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChDb21tZW50IGUpCi0gIHsKLSAgICBhY3Rpb24oZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChUZXh0IGUpCi0gIHsKLSAgICBhY3Rpb24oZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChFbnRpdHlSZWZlcmVuY2UgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVudGl0eSBlKQotICB7Ci0gICAgYWN0aW9uKGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoTm90YXRpb24gbikKLSAgewotICAgIGFjdGlvbihuKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBpKQotICB7Ci0gICAgYWN0aW9uKGkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoTmFtZWROb2RlTWFwIG1hcCkKLSAgewotICAgIGlmIChtYXAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcC5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgewotICAgICAgICBkb1Zpc2l0KG1hcC5pdGVtKGkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotLy8gRU5EIE9GIEZJTEUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MjI3MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuT3V0cHV0Rm9ybWF0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZS5YTUxTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5OdWxsVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkNoYXJhY3RlckRhdGE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5FcnJvckhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLlN0cmluZ1V0aWxzOwotCi0vKioKLSAqIFNldCBvZiBYTUwgcmVsYXRlZCB1dGlsaXRpZXMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFhNTFV0aWxzCi17Ci0JLyoqCi0JICogU29tZSBzYXggZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIHNldC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX05BTUVTUEFDRV9QUkVGSVhFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlLXByZWZpeGVzIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX05BTUVTUEFDRVMgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfVkFMSURBVElPTl9TQ0hFTUEgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKQVhQX1NDSEVNQV9MQU5HVUFHRSA9ICJodHRwOi8vamF2YS5zdW4uY29tL3htbC9qYXhwL3Byb3BlcnRpZXMvc2NoZW1hTGFuZ3VhZ2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFczQ19YTUxfU0NIRU1BID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXM0NfU09BUF8xMl9TQ0hFTUEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpBWFBfU0NIRU1BX1NPVVJDRSA9ICJodHRwOi8vamF2YS5zdW4uY29tL3htbC9qYXhwL3Byb3BlcnRpZXMvc2NoZW1hU291cmNlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9FWFRFUk5BTF9TQ0hFTUFfTE9DQVRJT04gPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvc2NoZW1hL2V4dGVybmFsLXNjaGVtYUxvY2F0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9FTlZFTE9QRSA9ICJFbnZlbG9wZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0hFQURFUiA9ICJIZWFkZXIiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9CT0RZID0gIkJvZHkiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVCA9ICJGYXVsdCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0ZBVUxUX0NPREUgPSAiZmF1bHRjb2RlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfU1RSSU5HID0gImZhdWx0c3RyaW5nIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfREVUQUlMID0gImRldGFpbCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0ZBVUxUX0FDVE9SID0gImZhdWx0YWN0b3IiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQVRUUl9NVVNUX1VOREVSU1RBTkQgPSAibXVzdFVuZGVyc3RhbmQiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQVRUUl9BQ1RPUiA9ICJhY3RvciI7Ci0KLQkvKioKLQkgKiBHZXQgWE1MUmVhZGVyLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIFhNTFJlYWRlciB2YWx1ZQotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGFyZSBwcm9ibGVtcyBnZXR0aW5nIHRoZSBYTUxSZWFkZXIKLQkgKiAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBYTUxSZWFkZXIgZ2V0WE1MUmVhZGVyKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCVhNTFJlYWRlciB4bWxSZWFkZXIgPSBudWxsOwotCi0JCXRyeQotCQl7Ci0JCQl4bWxSZWFkZXIgPSAobmV3IG9yZy5hcGFjaGUueGVyY2VzLmpheHAuU0FYUGFyc2VyRmFjdG9yeUltcGwoKSkKLQkJCQkJLm5ld1NBWFBhcnNlcigpLmdldFhNTFJlYWRlcigpOwotCi0JCQkvLyBTZXQgbmFtZXNwYWNlIGF3YXJlCi0JCQl4bWxSZWFkZXIuc2V0RmVhdHVyZShGRUFUVVJFX05BTUVTUEFDRV9QUkVGSVhFUywgdHJ1ZSk7Ci0JCQl4bWxSZWFkZXIuc2V0RmVhdHVyZShGRUFUVVJFX05BTUVTUEFDRVMsIHRydWUpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IFhNTFJlYWRlciBpbXBsZW1lbnRhdGlvbi4iLCBlKTsKLQkJfQotCi0JCXJldHVybiB4bWxSZWFkZXI7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGV4dCBzdHJpbmcgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHRleHQgWE1MIGRvY3VtZW50IHRleHQuCi0JICogQHBhcmFtIHZhbGlkYXRlIHRydWUgaWYgdGhlIGRvY3VtZW50IHdpbGwgYmUgdmFsaWRhdGUsIGZhbHNlIG90aGVyd2lzZQotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFN0cmluZyB0ZXh0LCBib29sZWFuIHZhbGlkYXRlKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpLCB2YWxpZGF0ZSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGV4dCBzdHJpbmcgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHRleHQgWE1MIGRvY3VtZW50IHRleHQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlyZXR1cm4gcGFyc2VYTUwobmV3IFN0cmluZ1JlYWRlcih0ZXh0KSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSB1cmkgdGhlIGxvY2F0aW9uIG9mIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW4gSS9PIGV4Y2VwdGlvbiBvZiBzb21lIHNvcnQgaGFzIG9jY3VycmVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudChTdHJpbmcgdXJpKSAKLQl0aHJvd3MgV1NJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAKLQl7Ci0JCXJldHVybiBwYXJzZVhNTERvY3VtZW50KHVyaSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSB1cmkgdGhlIGxvY2F0aW9uIG9mIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHNjaGVtYSBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50KFN0cmluZyB1cmksIFN0cmluZyBzY2hlbWEpCi0JdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gCi0JewotCSAgICAgIFVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgdXJpKTsKLQkgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IChJbnB1dFN0cmVhbSl1cmwuZ2V0Q29udGVudCgpOwotCSAgICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGlucHV0U3RyZWFtKTsKLQkgICAgICBpbnB1dFNvdXJjZS5zZXRTeXN0ZW1JZCh1cmwudG9TdHJpbmcoKSk7Ci0JICAgICAgCi0JICAgICAgaWYgKHNjaGVtYSA9PSBudWxsKQotCSAgICAgIAlyZXR1cm4gcGFyc2VYTUwoaW5wdXRTb3VyY2UsIGZhbHNlKTsKLQkgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VYTUwoaW5wdXRTb3VyY2UsIHNjaGVtYSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm5zIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFN0cmluZyBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFN0cmluZyB1cmwsIFN0cmluZyBzY2hlbWEsCi0JCQlTdHJpbmcgYmFzZVVSSSkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXRyeQotCQl7Ci0JCSAgcGFyc2VYTUxEb2N1bWVudFVSTChjcmVhdGVVUkwodXJsLCBiYXNlVVJJKSwgc2NoZW1hKTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQotCQlyZXR1cm4gcGFyc2VYTUxEb2N1bWVudFVSTCh1cmwsIHNjaGVtYSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm5zIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gRG9jdW1lbnQuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoVVJMIHVybCwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQl0cnkKLQkJewotCSAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gKElucHV0U3RyZWFtKXVybC5nZXRDb250ZW50KCk7Ci0JICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOwotCSAgICAgIGlucHV0U291cmNlLnNldFN5c3RlbUlkKHVybC50b1N0cmluZygpKTsKLQotCQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQotCQkJaWYgKHNjaGVtYSA9PSBudWxsKQotCQkJCWRvYyA9IHBhcnNlWE1MKGlucHV0U291cmNlKTsKLQkJCWVsc2UKLQkJCQlkb2MgPSBwYXJzZVhNTChpbnB1dFNvdXJjZSwgc2NoZW1hKTsKLQotCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCXJldHVybiBkb2M7Ci0JCX0KLQotCQljYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IGU7Ci0JCX0KLQotCQljYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24odC5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm5zIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHVybFN0cmluZyBhIFN0cmluZyBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSBiYXNlVVJJIGEgYmFzZSB1cmwgdG8gYXNzaXN0IGluIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHJldHVybiBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoU3RyaW5nIHVybFN0cmluZywgU3RyaW5nIGJhc2VVUkkpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCi0JCXRyeQotCQl7Ci0JCQlVUkwgdXJsID0gY3JlYXRlVVJMKHVybFN0cmluZywgYmFzZVVSSSk7Ci0KLQkJCWRvY3VtZW50ID0gcGFyc2VYTUxEb2N1bWVudFVSTCh1cmwpOwotCQl9Ci0KLQkJY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3ZSkKLQkJewotCQkJdGhyb3cgd2U7Ci0JCX0KLQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotCQl9Ci0KLQkJcmV0dXJuIGRvY3VtZW50OwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHJlYWRlciBhbmQgcmV0dXJucyB0aGUgZG9jdW1lbnQgb2JqZWN0LgotCSAqIAotCSAqIEBwYXJhbSB1cmwgYSBVUkwgb2JqZWN0IGlkZW50aWZ5aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHJldHVybiBEb2N1bWVudC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChVUkwgdXJsKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCi0JCXRyeQotCQl7Ci0JCQlSZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHVybC5vcGVuU3RyZWFtKCkpOwotCQkJSW5wdXRTb3VyY2Ugc291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0JCQlzb3VyY2Uuc2V0U3lzdGVtSWQodXJsLnRvU3RyaW5nKCkpOwotCQkJZG9jdW1lbnQgPSBwYXJzZVhNTChzb3VyY2UpOwotCi0JCQlyZWFkZXIuY2xvc2UoKTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBudWxsOwotCi0JLyoqCi0JICogUGFyc2UgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgb2JqZWN0LgotCSAqIAotCSAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotCSAqIEBwYXJhbSB2YWxpZGF0ZSB0cnVlIGlmIHRoZSBkb2N1bWVudCB3aWxsIGJlIHZhbGlkYXRlLCBmYWxzZSBvdGhlcndpc2UKLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChJbnB1dFNvdXJjZSBzb3VyY2UsIGJvb2xlYW4gdmFsaWRhdGUpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0gICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0KLSAgICAJICBpZiAoYnVpbGRlciA9PSBudWxsKQotICAgIAkgIHsKLSAgCQkgICAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsKCk7Ci0KLQkJICAgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgICAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICAgIGZhY3Rvcnkuc2V0SWdub3JpbmdFbGVtZW50Q29udGVudFdoaXRlc3BhY2UodHJ1ZSk7Ci0KLQkJICAgIC8vIEFERDogVGhpcyBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgc2NoZW1hCi0JCSAgICAvLyBkb2N1bWVudAotCQkgICAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQotCQkgICAgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgCSAgfQotCQkgIC8vIFBhcnNlIHRoZSBkb2N1bWVudAotCQkgIGRvYyA9IGJ1aWxkZXIucGFyc2Uoc291cmNlKTsKLQkJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKAotCQkJCQkJIjEuMSIpKQotCQkJewotCQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkZhdGFsIEVycm9yOiBYTUwgdmVyc2lvbiAmcXVvdDsxLjEmcXVvdDsgIgotCQkJCQkJKyAiaXMgbm90IHN1cHBvcnRlZCwgb25seSBYTUwgMS4wIGlzIHN1cHBvcnRlZC4iKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHJlYWRlciBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHZhbGlkYXRlIHRydWUgaWYgdGhlIGRvY3VtZW50IHdpbGwgYmUgdmFsaWRhdGUsIGZhbHNlIG90aGVyd2lzZQotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFJlYWRlciByZWFkZXIsIGJvb2xlYW4gdmFsaWRhdGUpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0JCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCQotCQkgIC8vIENyZWF0ZSBpbnB1dCBzb3VyY2UKLQkJICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOwotCi0JCSAgaWYgKGJ1aWxkZXIgPT0gbnVsbCkKLQkJICB7Ci0JCSAgICAvLyBHZXQgdGhlIGRvY3VtZW50IGZhY3RvcnkKLQkJICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkgICAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgICAgLy8gQUREOiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBzY2hlbWEKLQkJICAgIC8vIGRvY3VtZW50Ci0JCSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0JCSAgICBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJICB9Ci0JCSAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0JICAgCSAgLy8gd29ya2Fyb3VuZCBmb3IgY29tcGF0aWJpbGl0eSBYZXJjZXMgMi4yLjEgd2l0aCBYZXJjZXMgMi42LjIsCi0JCSAgLy8gWGVyY2VzIDIuNi4yIHN1cHBvcnRlZCBYTUwgMS4xIGJ1dCBXU0ktdG9vbCBhbmQgWGVyY2VzIDIuMi4xCi0JCSAgLy8gc3VwcG9ydGVkIG9ubHkgWE1MIDEuMAotCQkgIGlmIChkb2MgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKQotCQkgIHsKLQkJCWlmICgoKG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpIGRvYykuZ2V0WG1sVmVyc2lvbigpLmVxdWFscygKLQkJCQkJCSIxLjEiKSkKLQkJCXsKLQkJCSAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkJKyAiaXMgbm90IHN1cHBvcnRlZCwgb25seSBYTUwgMS4wIGlzIHN1cHBvcnRlZC4iKTsKLQkJCX0KLQkgICAgICB9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIGlucHV0IHNvdXJjZSBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHNvdXJjZSBhIElucHV0U291cmNlIG9iamVjdC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKHJlYWRlciwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgaW5wdXQgc291cmNlIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gc291cmNlIGEgSW5wdXRTb3VyY2Ugb2JqZWN0LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChzb3VyY2UsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFN0cmluZyB0ZXh0LCBTdHJpbmcgc2NoZW1hKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpLCBzY2hlbWEpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRleHQgc3RyaW5nIGFzIGFuIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IFhNTCBkb2N1bWVudCB0ZXh0LgotCSAqIEBwYXJhbSBzY2hlbWFzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHNjaGVtYSBkb2N1bWVudHMuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIENvbGxlY3Rpb24gc2NoZW1hcykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlyZXR1cm4gcGFyc2VYTUwobmV3IFN0cmluZ1JlYWRlcih0ZXh0KSwgc2NoZW1hcyk7Ci0JfQotCi0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHRleHQgWE1MIGRvY3VtZW50IHRleHQuCi0JICogQHBhcmFtIHNjaGVtYVN0cmluZyBhIFN0cmluZ1JlYWRlciBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW4gSS9PIGV4Y2VwdGlvbiBvZiBzb21lIHNvcnQgaGFzIG9jY3VycmVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIFN0cmluZ1JlYWRlciBzY2hlbWFTdHJpbmcpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpLCBzY2hlbWFTdHJpbmcpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFJlYWRlciByZWFkZXIsIFN0cmluZyBzY2hlbWEpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0gICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0KLQkJICAvLyBHZXQgdGhlIGRvY3VtZW50IGZhY3RvcnkKLQkJICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsKCk7Ci0KLQkJICAvLyBTZXQgbmFtZXNwYWNlIGF3YXJlLCBidXQgZm9yIG5vdyBkbyBub3QgdmFsaWRhdGUKLQkJICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkgIGZhY3Rvcnkuc2V0SWdub3JpbmdFbGVtZW50Q29udGVudFdoaXRlc3BhY2UodHJ1ZSk7Ci0KLQkJICB0cnkKLQkJICB7Ci0JCSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfTEFOR1VBR0UsIFczQ19YTUxfU0NIRU1BKTsKLSAJCSAgfQotICAgCQkgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQlTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgbmV3IElucHV0U291cmNlKHNjaGVtYSkpOwotCi0JCSAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIGJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJIYW5kbGVyKCkpOwotCQkgIGRvYyA9IGJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotCi0JCSAgLy8gd29ya2Fyb3VuZCBmb3IgY29tcGF0aWJpbGl0eSBYZXJjZXMgMi4yLjEgd2l0aCBYZXJjZXMgMi42LjIsCi0JCSAgLy8gWGVyY2VzIDIuNi4yIHN1cHBvcnRlZCBYTUwgMS4xIGJ1dCBXU0ktdG9vbCBhbmQgWGVyY2VzIDIuMi4xCi0JCSAgLy8gc3VwcG9ydGVkIG9ubHkgWE1MIDEuMAotCQkgIGlmIChkb2MgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKQotCQkgIHsKLQkJCWlmICgoKG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpIGRvYykuZ2V0WG1sVmVyc2lvbigpLmVxdWFscygiMS4xIikpCi0JCQl7Ci0JCSAJICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJGYXRhbCBFcnJvcjogWE1MIHZlcnNpb24gJnF1b3Q7MS4xJnF1b3Q7ICIKLQkJCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkgICAgfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLSAgICAJcmV0dXJuIGRvYzsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHNjaGVtYSBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChJbnB1dFNvdXJjZSBzb3VyY2UsIFN0cmluZyBzY2hlbWEpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0gICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0gCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfTEFOR1VBR0UsIFczQ19YTUxfU0NIRU1BKTsKLQkJICB9Ci0KLQkJICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpCi0JCSAgewotCQkJU3RyaW5nIGVyck1lc3NhZ2UgPSAiRXJyb3I6IEpBWFAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBhdHRyaWJ1dGUgbm90IHJlY29nbml6ZWQ6ICIKLQkJCQkJKyBKQVhQX1NDSEVNQV9MQU5HVUFHRQotCQkJCQkrICJcbiIKLQkJCQkJKyAiQ2hlY2sgdG8gc2VlIGlmIHBhcnNlciBjb25mb3JtcyB0byBKQVhQIDEuMiBzcGVjLiI7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGVyck1lc3NhZ2UsIGUpOwotCQkgIH0KLQkJICBmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9TT1VSQ0UsIG5ldyBJbnB1dFNvdXJjZShzY2hlbWEpKTsKLQotICAgICAgICAgIC8vIFBhcnNlIHRoZSBkb2N1bWVudAotCQkgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJICBidWlsZGVyLnNldEVycm9ySGFuZGxlcihuZXcgRXJySGFuZGxlcigpKTsKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKHNvdXJjZSk7Ci0KLQkJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKAotCQkJCQkJIjEuMSIpKQotCQkJewotCQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkZhdGFsIEVycm9yOiBYTUwgdmVyc2lvbiAmcXVvdDsxLjEmcXVvdDsgIgotCQkJCQkJKyAiaXMgbm90IHN1cHBvcnRlZCwgb25seSBYTUwgMS4wIGlzIHN1cHBvcnRlZC4iKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgYSBSZWFkZXIgb2JqZWN0LgotCSAqIEBwYXJhbSBzY2hlbWFTdHJpbmcgYSBTdHJpbmdSZWFkZXIgb2JqZWN0LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFJlYWRlciBmaWxlbmFtZSwgU3RyaW5nUmVhZGVyIHNjaGVtYVN0cmluZykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCi0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCUNsYXNzTG9hZGVyIGN1cnJlbnRMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOyAgIAotCQl0cnkKLQkJewotICAgIAkgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFhNTFV0aWxzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAotCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGZpbGVuYW1lKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfTEFOR1VBR0UsIFczQ19YTUxfU0NIRU1BKTsKLQkJICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQlTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgbmV3IElucHV0U291cmNlKHNjaGVtYVN0cmluZykpOwotCi0JCSAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIGJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJIYW5kbGVyKCkpOwotCQkgIGRvYyA9IGJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHBhcnNlIFhNTCBkb2N1bWVudC4iLCBlKTsKLQkJfQotCSAgICBmaW5hbGx5Ci0JICAgIHsgCi0JICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0JICAgIH0gICAgCi0KLQkJLy8gUmV0dXJuIGRvY3VtZW50Ci0JCXJldHVybiBkb2M7Ci0KLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lIGEgUmVhZGVyIG9iamVjdAotCSAqIEBwYXJhbSBzY2hlbWFTdHJpbmdzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHNjaGVtYSBkb2N1bWVudHMuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIGZpbGVuYW1lLCBDb2xsZWN0aW9uIHNjaGVtYVN0cmluZ3MpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQotCQkgIC8vIENyZWF0ZSBpbnB1dCBzb3VyY2UKLQkJICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShmaWxlbmFtZSk7Ci0KLQkJICAvLyBHZXQgdGhlIGRvY3VtZW50IGZhY3RvcnkKLQkJICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsKCk7Ci0KLQkJICAvLyBTZXQgbmFtZXNwYWNlIGF3YXJlLCBidXQgZm9yIG5vdyBkbyBub3QgdmFsaWRhdGUKLQkJICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkgIGZhY3Rvcnkuc2V0SWdub3JpbmdFbGVtZW50Q29udGVudFdoaXRlc3BhY2UodHJ1ZSk7Ci0KLQkJICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCQkgIHRyeQotCQkgIHsKLQkJCWZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX0xBTkdVQUdFLCBXM0NfWE1MX1NDSEVNQSk7Ci0JCSAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpCi0JCSAgewotCQkgICAgU3RyaW5nIGVyck1lc3NhZ2UgPSAiRXJyb3I6IEpBWFAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBhdHRyaWJ1dGUgbm90IHJlY29nbml6ZWQ6ICIKLQkJCQkJKyBKQVhQX1NDSEVNQV9MQU5HVUFHRQotCQkJCQkrICJcbiIKLQkJCQkJKyAiQ2hlY2sgdG8gc2VlIGlmIHBhcnNlciBjb25mb3JtcyB0byBKQVhQIDEuMiBzcGVjLiI7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGVyck1lc3NhZ2UsIGUpOwotCQkgIH0KLQkJICAvLyBjb252ZXJ0IHNjaGVtYSBzdHJpbmdzIHRvIGFycmF5IG9mIElucHV0U291cmNlcwotCQkgIEl0ZXJhdG9yIGkgPSBzY2hlbWFTdHJpbmdzLml0ZXJhdG9yKCk7Ci0JCSAgVmVjdG9yIHJlYWRlcnMgPSBuZXcgVmVjdG9yKCk7Ci0JCSAgd2hpbGUgKGkuaGFzTmV4dCgpKQotCQkgIHsKLQkJCVN0cmluZyBuZXh0U2NoZW1hID0gKFN0cmluZykgaS5uZXh0KCk7Ci0JCQlyZWFkZXJzLmFkZChuZXcgSW5wdXRTb3VyY2UobmV3IFN0cmluZ1JlYWRlcihuZXh0U2NoZW1hKSkpOwotCQkgIH0KLQkJICBJbnB1dFNvdXJjZVtdIGlucHV0U291cmNlcyA9IChJbnB1dFNvdXJjZVtdKSByZWFkZXJzCi0JCQkJLnRvQXJyYXkobmV3IElucHV0U291cmNlW117fSk7Ci0JCSAgLy8gcGFzcyBhbiBhcnJheSBvZiBzY2hlbWEgc3RyaW5ncyAoZWFjaCBvZiB3aGljaCBjb250YWlucyBhIHNjaGVtYSkKLQkJICBmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9TT1VSQ0UsIGlucHV0U291cmNlcyk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQotCX0KLQotCS8qKgotCSAqIEdldCBhdHRyaWJ1dGUgdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBkZWZpbmVkIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0ck5hbWUpIHsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IG51bGw7Ci0JCUF0dHIgYXR0ciA9IG51bGw7Ci0KLQkJLy8gR2V0IHRoZSBhdHRyaWJ1dGUgdXNpbmcgaXRzIG5hbWUKLQkJaWYgKChhdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJOYW1lKSkgIT0gbnVsbCkKLQkJewotCQkJYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpLnRyaW0oKTsKLQkJfQotCi0JCS8vIFJldHVybiBhdHRyaWJ1dGUgdmFsdWUKLQkJcmV0dXJuIGF0dHJWYWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYXR0cmlidXRlIHZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBhdHRyTmFtZSBhIG5hbWUgb2YgYW4gYXR0cmlidXRlCi0JICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpZiBmb3VuZC4gT3RoZXJ3aXNlIHRoZSBzcGVjaWZpZWQgZGVmYXVsdAotCSAqICAgICAgICAgdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0ck5hbWUsCi0JCQlTdHJpbmcgZGVmYXVsdFZhbHVlKSB7Ci0JCVN0cmluZyByZXR1cm5WYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IG51bGw7Ci0KLQkJaWYgKChhdHRyVmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCQlyZXR1cm5WYWx1ZSA9IGF0dHJWYWx1ZTsKLQotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZS4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gbmFtZXNwYWNlIGEgbmFtZXNwYWNlLgotCSAqIEBwYXJhbSBhdHRyTmFtZSBhIG5hbWUgb2YgYW4gYXR0cmlidXRlCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIHZhbHVlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZVZhbHVlTlMoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlLAotCQkJU3RyaW5nIGF0dHJOYW1lKSB7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBudWxsOwotCQlBdHRyIGF0dHIgPSBudWxsOwotCi0JCS8vIEdldCB0aGUgYXR0cmlidXRlIHVzaW5nIGl0cyBuYW1lCi0JCWlmICgoYXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZSwgYXR0ck5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQlhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCkudHJpbSgpOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZQotCQlyZXR1cm4gYXR0clZhbHVlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBmcm9tIHRoZSBpbnB1dCBlbG1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiB0aGUgZmlyc3RjaGlsZCBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRWxlbWVudCBnZXRGaXJzdENoaWxkKEVsZW1lbnQgZWxlbWVudCkgewotCQkvLyBSZXR1cm4gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQKLQkJcmV0dXJuIGZpbmROZXh0U2libGluZyhlbGVtZW50LmdldEZpcnN0Q2hpbGQoKSk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCAtIGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRWxlbWVudCBnZXROZXh0U2libGluZyhFbGVtZW50IGVsZW1lbnQpIHsKLQkJLy8gUmV0dXJuIG5leHQgc2libGluZyBlbGVtZW50Ci0JCXJldHVybiBmaW5kTmV4dFNpYmxpbmcoZWxlbWVudC5nZXROZXh0U2libGluZygpKTsKLQl9Ci0KLQkvKioKLQkgKiBGaW5kIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RhcnROb2RlIFhNTCBzdGFydCBub2RlLgotCSAqIEByZXR1cm4gdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgRWxlbWVudCBmaW5kTmV4dFNpYmxpbmcoTm9kZSBzdGFydE5vZGUpIHsKLQkJTm9kZSBub2RlID0gbnVsbDsKLQkJRWxlbWVudCByZXR1cm5FbGVtZW50ID0gbnVsbDsKLQotCQkvLyBGaW5kIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudAotCQlmb3IgKG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gbnVsbCAmJiByZXR1cm5FbGVtZW50ID09IG51bGw7IG5vZGUgPSBub2RlCi0JCQkJLmdldE5leHRTaWJsaW5nKCkpCi0JCXsKLQkJCS8vIElmIHRoaXMgbm9kZSBpcyBhbiBlbGVtZW50IG5vZGUsIHRoZW4gcmV0dXJuIGl0Ci0JCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotCQkJewotCQkJCXJldHVybkVsZW1lbnQgPSAoRWxlbWVudCkgbm9kZTsKLQkJCX0KLQkJfQotCi0JCS8vIFJldHVybiBuZXh0IHNpYmxpbmcgZWxlbWVudAotCQlyZXR1cm4gKEVsZW1lbnQpIHJldHVybkVsZW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogRmluZCB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBzdGFydE5vZGUgWE1MIHN0YXJ0IG5vZGUuCi0JICogQHJldHVybiB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRWxlbWVudCBmaW5kUHJldmlvdXNTaWJsaW5nKE5vZGUgc3RhcnROb2RlKSB7Ci0JCWlmIChzdGFydE5vZGUgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXdoaWxlIChzdGFydE5vZGUgIT0gbnVsbCkKLQkJewotCQkJc3RhcnROb2RlID0gc3RhcnROb2RlLmdldFByZXZpb3VzU2libGluZygpOwotCQkJaWYgKHN0YXJ0Tm9kZSA9PSBudWxsKQotCQkJCXJldHVybiBudWxsOwotCQkJaWYgKHN0YXJ0Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotCQkJCXJldHVybiAoRWxlbWVudCkgc3RhcnROb2RlOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB0ZXh0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcmV0dXJuIHRoZSB0ZXh0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZXh0KEVsZW1lbnQgZWxlbWVudCkgewotCQlTdHJpbmcgdGV4dCA9IG51bGw7Ci0KLQkJLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLQkJTm9kZSBub2RlID0gZWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJLy8gTm9kZUxpc3Qgbm9kZUxpc3QgPSBlbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotCQkvLyBpbnQgbGVuZ3RoID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0KLQkJLy8gUHJvY2VzcyB3aGlsZSB0aGVyZSBhcmUgbm9kZXMgYW5kIHRoZSB0ZXh0IGhhc24ndCBiZWVuIGZvdW5kCi0JCXdoaWxlICgobm9kZSAhPSBudWxsKSAmJiAodGV4dCA9PSBudWxsKSkKLQkJewotCQkJLy8gSWYgYSB0ZXh0IG5vZGUgb3IgY2RhdGEgc2VjdGlvbiBpcyBmb3VuZCwgdGhlbiBnZXQgdGV4dAotCQkJaWYgKChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0JCQkJCXx8IChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUpKQotCQkJewotCQkJCXRleHQgPSAoKENoYXJhY3RlckRhdGEpIG5vZGUpLmdldERhdGEoKTsKLQkJCX0KLQotCQkJLy8gR2V0IG5leHQgc2libGluZwotCQkJbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJfQotCi0JCWlmICh0ZXh0ICE9IG51bGwpCi0JCQl0ZXh0ID0gdGV4dC50cmltKCk7Ci0KLQkJcmV0dXJuIHRleHQ7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIFFOYW1lLgotCSAqIAotCSAqIEBwYXJhbSBxbmFtZSBhIFFOYW1lIG9iamVjdC4KLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcmV0dXJuIHRydWUgaWYgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSB0aGUgUU5hbWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGVxdWFscyhRTmFtZSBxbmFtZSwgRWxlbWVudCBlbGVtZW50KSB7Ci0JCWJvb2xlYW4gZXF1YWxzID0gZmFsc2U7Ci0KLQkJLy8gSWYgYm90aCB0aGUgbmFtZXNwYWNlIFVSSSBhbmQgbG9jYWwgbmFtZSBhcmUgdGhlIHNhbWUsIHRoZW4gdGhleSBhcmUKLQkJLy8gZXF1YWwKLQkJaWYgKChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkpCi0JCQkJJiYgKHFuYW1lLmdldExvY2FsUGFydCgpLmVxdWFscyhlbGVtZW50LmdldExvY2FsTmFtZSgpKSkpCi0JCXsKLQkJCWVxdWFscyA9IHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZXF1YWxzOwotCX0KLQotCS8qKgotCSAqIFhNTCBlbmNvZGUgYSB0ZXh0IHN0cmluZy4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCAtIGEgU3RyaW5nLgotCSAqIEByZXR1cm4gYW4gWE1MIGVuY29kZWQgdGV4dCBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgeG1sRXNjYXBlZFN0cmluZyhTdHJpbmcgdGV4dCkgCi0JewotCSAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuIHRleHQ7Ci0JICBlbHNlCi0JICB7Ci0JICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIodGV4dC5sZW5ndGgoKSoyKTsKLQkgICAgaW50IHNpemUgPSB0ZXh0Lmxlbmd0aCgpOwotCSAgICBmb3IgKGludCBpPTA7IGk8c2l6ZTsgaSsrKQotCSAgICB7Ci0JICAgICAgY2hhciBjID0gdGV4dC5jaGFyQXQoaSk7Ci0JICAgICAgc3dpdGNoIChjKQotCQkgIHsKLSAgICAgICAgICAgICBjYXNlICc8JzogCi0gICAgICAgICAgICAgICBzYi5hcHBlbmQoIiZsdDsiKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGNhc2UgJz4nOiAKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKCImZ3Q7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnJic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiZhbXA7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnIic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiZxdW90OyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGNhc2UgJ1wnJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJmFwb3M7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnXHInOiAKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKCImI3hkOyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgCXNiLmFwcGVuZChjKTsKLQkJICB9Ci0JCX0KLQkgICAgcmV0dXJuICBzYi50b1N0cmluZygpOwotCSAgfQotCX0KLQotCS8qKgotCSAqIFhNTCBlbmNvZGUgYSB0ZXh0IHN0cmluZy4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCAtIGEgU3RyaW5nLgotCSAqIEByZXR1cm4gYW4gWE1MIGVuY29kZWQgdGV4dCBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgeG1sUmVtb3ZlRXNjYXBlZFN0cmluZyhTdHJpbmcgdGV4dCkgCi0JewotCSAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuIHRleHQ7Ci0JICBlbHNlCi0JICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIodGV4dCk7Ci0gICAgICAKLQkgICAgaW50IGkgPSBzYi5pbmRleE9mKCImI3hkOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzUsICJcciIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImI3hkOyIpOwotCSAgICB9Ci0JICAgIAotCSAgICBpID0gc2IuaW5kZXhPZigiJmx0OyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzQsICI8Iik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZsdDsiKTsKLQkgICAgfQotCi0JICAgIGkgPSBzYi5pbmRleE9mKCImZ3Q7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNCwgIj4iKTsKLQkgICAgICBpID0gc2IuaW5kZXhPZigiJmd0OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZxdW90OyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzYsICJcIiIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImcXVvdDsiKTsKLQkgICAgfQotCi0JICAgIGkgPSBzYi5pbmRleE9mKCImYXBvczsiKTsKLQkgICAgd2hpbGUoaSAhPSAtMSkKLQkgICAgewotCSAgICAgIHNiLnJlcGxhY2UoaSwgaSs2LCAiXCciKTsKLQkgICAgICBpID0gc2IuaW5kZXhPZigiJmFwb3M7Iik7Ci0JICAgIH0KLQotCSAgICBpID0gc2IuaW5kZXhPZigiJmFtcDsiKTsKLQkgICAgd2hpbGUoaSAhPSAtMSkKLQkgICAgewotCSAgICAgIHNiLnJlcGxhY2UoaSwgaSs1LCAiJiIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImYW1wOyIpOwotCSAgICB9Ci0gCSAgICByZXR1cm4gIHNiLnRvU3RyaW5nKCk7Ci0JICB9Ci0JfQotCS8qKgotCSAqIEdldCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgZnJvbSBhIHBhcmVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0YWcgdG8gc2VyYWNoIGZvci4KLQkgKiBAcGFyYW0gcGFyZW50RWxlbWVudCB0aGUgcGFyZW50IGVsZW1lbnQuCi0JICogQHJldHVybiBhbiBlbGVtZW50IGdpdmVuIHRoZSBuYW1lIGFuZCB0aGUgcGFyZW50IGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEVsZW1lbnQoU3RyaW5nIGVsZW1lbnROYW1lLCBFbGVtZW50IHBhcmVudEVsZW1lbnQpIHsKLQkJRWxlbWVudCByZXR1cm5FbGVtZW50ID0gbnVsbDsKLQkJTm9kZUxpc3Qgbmw7Ci0KLQkJLy8gR2V0IHRoZSBsaXN0IG9mIGVsZW1lbnRzCi0JCWlmICgobmwgPSBwYXJlbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGVsZW1lbnROYW1lKSkgIT0gbnVsbCkKLQkJewotCQkJLy8gUmV0dXJuIGZpcnN0IGVsZW1lbnQgZm91bmQKLQkJCXJldHVybkVsZW1lbnQgPSAoRWxlbWVudCkgbmwuaXRlbSgwKTsKLQkJfQotCi0JCS8vIFJldHVybiBlbGVtZW50Ci0JCXJldHVybiByZXR1cm5FbGVtZW50OwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogbmFtZXNwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgYSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIGxvY2FsTmFtZSBhIGxvY2FsIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBzcGVjaWZpZWQKLQkgKiAgICAgICAgIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFbGVtZW50KEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLQkJCVN0cmluZyBsb2NhbE5hbWUpIHsKLQkJYm9vbGVhbiBpc0VsZW1lbnQgPSBmYWxzZTsKLQotCQlpZiAoZWxlbWVudCAhPSBudWxsKQotCQl7Ci0JCQkvLyBDaGVjayBpcwotCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5hbWVzcGFjZVVSSSkKLQkJCQkJJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWxOYW1lKSkKLQkJCXsKLQkJCQlpc0VsZW1lbnQgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGlzRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIHNwZWNpZmllZAotCSAqIG5hbWVzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gbmFtZXNwYWNlVVJJcyBhIGxpc3Qgb2YgdmFsaWQgbmFtZXNwYWNlcy4KLQkgKiBAcGFyYW0gbG9jYWxOYW1lIGEgbG9jYWwgbmFtZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIHNwZWNpZmllZAotCSAqICAgICAgICAgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBMaXN0IG5hbWVzcGFjZVVSSXMsCi0JCQlTdHJpbmcgbG9jYWxOYW1lKSB7Ci0JCWJvb2xlYW4gaXNFbGVtZW50ID0gZmFsc2U7Ci0KLQkJaWYgKGVsZW1lbnQgIT0gbnVsbCkKLQkJewotCQkJLy8gQ2hlY2sgaXMKLQkJCWlmIChuYW1lc3BhY2VVUklzLmNvbnRhaW5zKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpCi0JCQkJCSYmIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGxvY2FsTmFtZSkpCi0JCQl7Ci0JCQkJaXNFbGVtZW50ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBpc0VsZW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogR2V0IGVsZW1lbnQgdGV4dCBhcyBhIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBhIGJvb2xlYW4gdG8gYmUgdXNlZCBhcyBhIGRlZmF1bHQgdmFsdWUuCi0JICogQHJldHVybiBlbGVtZW50IHRleHQgYXMgYSBib29sZWFuIHZhbHVlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRCb29sZWFuVmFsdWUoRWxlbWVudCBlbGVtZW50LCBib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotCQlib29sZWFuIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYm9vbGVhblZhbHVlID0gbnVsbDsKLQotCQkvLyBHZXQgdmFsdWUgYXMgYSBzdHJpbmcKLQkJaWYgKChib29sZWFuVmFsdWUgPSBYTUxVdGlscy5nZXRUZXh0KGVsZW1lbnQpKSAhPSBudWxsKQotCQl7Ci0JCQlyZXR1cm5WYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihib29sZWFuVmFsdWUpLmJvb2xlYW5WYWx1ZSgpOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGJvb2xlYW4KLQkJcmV0dXJuIHJldHVyblZhbHVlOwotCX0KLQotCS8qKgotCSAqIEdldCBhdHRyaWJ1dGUgdmFsdWUgYXMgYSBib29sZWFuLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBhdHRyTmFtZSBhIG5hbWUgb2YgYW4gYXR0cmlidXRlLgotCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgYSBib29sZWFuIHRvIGJlIHVzZWQgYXMgYSBkZWZhdWx0IHZhbHVlLgotCSAqIEByZXR1cm4gYXR0cmlidXRlIHZhbHVlIGFzIGEgYm9vbGVhbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0Qm9vbGVhblZhbHVlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJOYW1lLAotCQkJYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLQkJYm9vbGVhbiByZXR1cm5WYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLQkJU3RyaW5nIGJvb2xlYW5WYWx1ZSA9IG51bGw7Ci0KLQkJLy8gR2V0IHZhbHVlIGFzIGEgc3RyaW5nCi0JCWlmICgoYm9vbGVhblZhbHVlID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgYXR0ck5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQlyZXR1cm5WYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihib29sZWFuVmFsdWUpLmJvb2xlYW5WYWx1ZSgpOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGJvb2xlYW4KLQkJcmV0dXJuIHJldHVyblZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBRTmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gcW5hbWVTdHJpbmcgYSBxdWFsaWZpZWQgbmFtZS4KLQkgKiBAcmV0dXJuIGEgUU5hbWUgb2JqZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUU5hbWUgY3JlYXRlUU5hbWUoU3RyaW5nIHFuYW1lU3RyaW5nKSB7Ci0JCVFOYW1lIHFuYW1lID0gbnVsbDsKLQotCQkvLyBMb2NhdGUgbG9jYWwgcGFydAotCQlpbnQgaW5kZXggPSBxbmFtZVN0cmluZy5sYXN0SW5kZXhPZigiOiIpOwotCi0JCS8vIENyZWF0ZSBuZXcgUU5hbWUKLQkJaWYgKGluZGV4ICE9IC0xKQotCQl7Ci0JCQlxbmFtZSA9IG5ldyBRTmFtZShxbmFtZVN0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpLCBxbmFtZVN0cmluZwotCQkJCQkuc3Vic3RyaW5nKGluZGV4ICsgMSkpOwotCQl9Ci0KLQkJZWxzZQotCQl7Ci0JCQlxbmFtZSA9IG5ldyBRTmFtZShxbmFtZVN0cmluZyk7Ci0JCX0KLQotCQlyZXR1cm4gcW5hbWU7Ci0JfQotCi0JLyoqCi0JICogRXJyb3IgSGFuZGxlcgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIEVyckhhbmRsZXIgaW1wbGVtZW50cyBFcnJvckhhbmRsZXIKLQl7Ci0JCS8qKgotCQkgKiBXYXJuaW5nCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIHNwZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJXYXJuaW5nOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQotCQkvKioKLQkJICogRXJyb3IKLQkJICovCi0JCXB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIHNwZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJFcnJvcjogIiArIHNwZS5nZXRNZXNzYWdlKCk7Ci0JCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKG1lc3NhZ2UpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEZhdGFsIEVycm9yCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIHNwZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJGYXRhbCBFcnJvcjogIiArIHNwZS5nZXRNZXNzYWdlKCk7Ci0JCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIHRoZSBzdHJpbmcgaXMgYSBOTVRPS0VOIGRhdGEgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBhIHN0cmluZyB2YWx1ZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIE5NVE9LRU4gZGF0YSB0eXBlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05tdG9rZW4oU3RyaW5nIHRleHQpIHsKLQkJYm9vbGVhbiBubXRva2VuID0gdHJ1ZTsKLQotCQkvLyBBREQ6IE5lZWQgdG8gZmluZCBhIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBkb2VzIHRoaXMgb3Igd3JpdGUgaXQgZnJvbQotCQkvLyBzY3JhdGNoCi0KLQkJcmV0dXJuIG5tdG9rZW47Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCBzZWFyY2hlcyB0aGUgZmlyc3QgZGlyZWN0IGRlc2NlbmRhbnQgZWxlbWVudCB3aXRoIHRoZSBnaXZlbgotCSAqIHFuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQgcGFyZW50IERPTSBlbGVtZW50LgotCSAqIEBwYXJhbSBlbGVtZW50TmFtZSBRTmFtZSBvZiB0aGUgZWxlbWVudCB0byBiZSBzZWFyY2hlZC4KLQkgKiBAcmV0dXJuIERPTSBlbGVtZW50IGlmIHRoZSByZXF1aXJlZCBlbGVtZW50IGZvdW5kLCBhbmQgbnVsbCBvdGhlcndpc2UuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBFbGVtZW50IGZpbmRDaGlsZEVsZW1lbnQoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGVsZW1lbnROYW1lKSB7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcmVudCBlbGVtZW50IGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkVsZW1lbnQgbmFtZSBjYW4gbm90IGJlIE5VTEwiKTsKLQkJaWYgKGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpID09IG51bGwpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotCQkJCQkiTG9jYWwgcGFydCBvZiB0aGUgZWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCi0JCU5vZGUgbiA9IHBhcmVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCVN0cmluZyBsb2NhbCA9IGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpOwotCQlTdHJpbmcgbnMgPSBlbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJd2hpbGUgKG4gIT0gbnVsbCkKLQkJewotCQkJaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKQotCQkJCQkmJiBsb2NhbC5lcXVhbHMobi5nZXRMb2NhbE5hbWUoKSkKLQkJCQkJJiYgTnVsbFV0aWwuZXF1YWxzKG5zLCBuLmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQlyZXR1cm4gKEVsZW1lbnQpIG47Ci0JCQluID0gbi5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCBzZWFyY2hlcyB0aGUgZmlyc3Qgc2libGluZyBlbGVtZW50IHdpdGggdGhlIGdpdmVuIHFuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBhY3RpdmUgRE9NIGVsZW1lbnQuCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIFFOYW1lIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNlYXJjaGVkLgotCSAqIEByZXR1cm4gRE9NIGVsZW1lbnQgaWYgdGhlIHJlcXVpcmVkIGVsZW1lbnQgZm91bmQsIGFuZCBudWxsIG90aGVyd2lzZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIEVsZW1lbnQgZmluZEVsZW1lbnQoRWxlbWVudCBhY3RpdmUsIFFOYW1lIGVsZW1lbnROYW1lKSB7Ci0JCWlmIChhY3RpdmUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFjdGl2ZSBlbGVtZW50IGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkVsZW1lbnQgbmFtZSBjYW4gbm90IGJlIE5VTEwiKTsKLQkJaWYgKGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpID09IG51bGwpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotCQkJCQkiTG9jYWwgcGFydCBvZiB0aGUgZWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCi0JCU5vZGUgbiA9IGFjdGl2ZS5nZXROZXh0U2libGluZygpOwotCQlTdHJpbmcgbG9jYWwgPSBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKTsKLQkJU3RyaW5nIG5zID0gZWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCXdoaWxlIChuICE9IG51bGwpCi0JCXsKLQkJCWlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkKLQkJCQkJJiYgbG9jYWwuZXF1YWxzKG4uZ2V0TG9jYWxOYW1lKCkpCi0JCQkJCSYmIE51bGxVdGlsLmVxdWFscyhucywgbi5nZXROYW1lc3BhY2VVUkkoKSkpCi0JCQkJcmV0dXJuIChFbGVtZW50KSBuOwotCQkJbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFRoZSBtZXRob2QgcmV0dXJucyBhdHRyaWJ1dGUgbm9kZSBieSB0aGUgZ2l2ZW4gcW5hbWUuCi0JICogCi0JICogQHBhcmFtIGVsIG93bmVyIGVsZW1lbnQuCi0JICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgUU5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBub2RlIHRvIGJlIHNlYXJjaGVkLgotCSAqIEByZXR1cm4gYXR0cmlidXRlIG5vZGUgYnkgdGhlIGdpdmVuIHFuYW1lLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgQXR0ciBnZXRBdHRyaWJ1dGUoRWxlbWVudCBlbCwgUU5hbWUgYXR0cmlidXRlTmFtZSkgewotCQlpZiAoZWwgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChhdHRyaWJ1dGVOYW1lID09IG51bGwpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdHRyaWJ1dGUgbmFtZSBjYW4gbm90IGJlIE5VTEwiKTsKLQkJU3RyaW5nIG5zVVJJID0gYXR0cmlidXRlTmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJU3RyaW5nIGxvY2FsUGFydCA9IGF0dHJpYnV0ZU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0JCWlmIChsb2NhbFBhcnQgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBhdHRyaWJ1dGUgbmFtZSBjYW4gbm90IGJlIE5VTEwiKTsKLQotCQlBdHRyIGEgPSBlbC5nZXRBdHRyaWJ1dGVOb2RlTlMobnNVUkksCi0JCQkJbG9jYWxQYXJ0KTsKLQkJaWYgKGEgPT0gbnVsbCkKLQkJCS8vIHRyeSB0byBnZXQgd2l0aCBudWxsIG5hbWVzcGFjZQotCQkJYSA9IGVsLmdldEF0dHJpYnV0ZU5vZGVOUyhudWxsLCBsb2NhbFBhcnQpOwotCQlyZXR1cm4gYTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIGNvbXBhcmVzIG5vZGUncyBuYW1lIHRvIHRoZSBnaXZlbiBxbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIG5vZGUuCi0JICogQHBhcmFtIG5hbWUgYSBRTmFtZSBvYmplY3QuCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBub2RlJ3MgbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgZ2l2ZW4gcW5hbWUuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBib29sZWFuIGVxdWFscyhOb2RlIG4sIFFOYW1lIG5hbWUpIHsKLQkJaWYgKG4gPT0gbnVsbCB8fCBuYW1lID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiAoTnVsbFV0aWwuZXF1YWxzKG5hbWUuZ2V0TG9jYWxQYXJ0KCksIG4uZ2V0TG9jYWxOYW1lKCkpICYmIE51bGxVdGlsCi0JCQkJLmVxdWFscyhuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBuLmdldE5hbWVzcGFjZVVSSSgpKSk7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCBzZWFyY2hlcyBuYW1lc3BhY2UgVVJJIGZvciB0aGUgZ2l2ZW4gcHJlZml4LiBUaGUgc2VhcmNoaW5nCi0JICogbWVjaGFuaXNtIGlzIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUgIlhNTCBOYW1lc3BhY2VzIHJlc29sdXRpb24iCi0JICogYWxnb3JpdGhtICgnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy0KLQkgKiBDb3JlLTIwMDMwMjI2L25hbWVzcGFjZXMtYWxnb3JpdGhtcy5odG1sJykuCi0JICogCi0JICogQHBhcmFtIG4gYSBub2RlLgotCSAqIEBwYXJhbSBwcmVmaXggYSBwcmVmaXguCi0JICogQHJldHVybiB0aGUgbmFtZXNwYWNlIFVSSSBmb3IgdGhlIGdpdmVuIHByZWZpeC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIFN0cmluZyBmaW5kTmFtZXNwYWNlVVJJKE5vZGUgbiwgU3RyaW5nIHByZWZpeCkgewotCQlpZiAocHJlZml4ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQl3aGlsZSAobiAhPSBudWxsKQotCQl7Ci0JCQlpZiAocHJlZml4LmVxdWFscyhuLmdldFByZWZpeCgpKSkKLQkJCQlyZXR1cm4gbi5nZXROYW1lc3BhY2VVUkkoKTsKLQotCQkJaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLQkJCXsKLQkJCQlOYW1lZE5vZGVNYXAgbSA9IG4uZ2V0QXR0cmlidXRlcygpOwotCQkJCWlmIChtICE9IG51bGwpCi0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbS5nZXRMZW5ndGgoKTsgaSsrKQotCQkJCQl7Ci0JCQkJCQlOb2RlIGEgPSBtLml0ZW0oaSk7Ci0JCQkJCQlpZiAoV1NJVGFnLk5TX1VSSV9YTUxOUy5lcXVhbHMoYS5nZXROYW1lc3BhY2VVUkkoKSkKLQkJCQkJCQkJJiYgcHJlZml4LmVxdWFscyhhLmdldExvY2FsTmFtZSgpKSkKLQkJCQkJCQlyZXR1cm4gYS5nZXROb2RlVmFsdWUoKTsKLQkJCQkJfQotCQkJfQotCi0JCQluID0gbi5nZXRQYXJlbnROb2RlKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBTZXJpYWxpemVzIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIG4gYSBET00gZWxlbWVudC4KLQkgKiBAcmV0dXJuIHRoZSBzZXJpYWxpemVkIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplKEVsZW1lbnQgbikgewotCQlTdHJpbmcgdmFsdWUgPSBudWxsOwotCQl0cnkKLQkJewotCQkJU3RyaW5nV3JpdGVyIHdyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCVhNTFNlcmlhbGl6ZXIgcyA9IG5ldyBYTUxTZXJpYWxpemVyKHdyaXRlciwgbmV3IE91dHB1dEZvcm1hdCgieG1sIiwKLQkJCQkJIlVURi04IiwgdHJ1ZSkpOwotCQkJcy5zZXJpYWxpemUobik7Ci0JCQl2YWx1ZSA9IHdyaXRlci50b1N0cmluZygpOwotCQkJd3JpdGVyLmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSB0KQotCQl7Ci0JCQkvLyBub3RoaW5nCi0JCQl2YWx1ZSA9ICJFWENFUFRJT04gOiAiICsgdC5nZXRNZXNzYWdlKCk7Ci0JCX0KLQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCByZXR1cm4gbGlzdCBvZiBjaGlsZCBlbGVtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gcGFyZW50IGFuIG9yZy53M2MuZG9tLkVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gbGlzdCBvZiBjaGlsZCBlbGVtZW50cy4KLQkgKi8KLQlzdGF0aWMgcHVibGljIFZlY3RvciBnZXRDaGlsZEVsZW1lbnRzKEVsZW1lbnQgcGFyZW50KSB7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJVmVjdG9yIHZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0JCUVsZW1lbnQgZWxlbSA9IGdldEZpcnN0Q2hpbGQocGFyZW50KTsKLQkJd2hpbGUgKGVsZW0gIT0gbnVsbCkKLQkJewotCQkJdmVjdC5hZGQoZWxlbSk7Ci0JCQllbGVtID0gZ2V0TmV4dFNpYmxpbmcoZWxlbSk7Ci0JCX0KLQkJcmV0dXJuIHZlY3Q7Ci0JfQotCi0JLyoqCi0JICogU2VyaWFsaXplcyBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZG9jIGFuIG9yZy53M2MuZG9tLkRvY3VtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gd3JpdGVyIGEgamF2YS5pby5Xcml0ZXIgb2JqZWN0LgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBzZXJpYWxpemUgdGhlIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVEb2MoRG9jdW1lbnQgZG9jLCBXcml0ZXIgd3JpdGVyKQotCQkJdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewotCQlYTUxTZXJpYWxpemVyIHMgPSBuZXcgWE1MU2VyaWFsaXplcih3cml0ZXIsIG5ldyBPdXRwdXRGb3JtYXQoInhtbCIsCi0JCQkJIlVURi04IiwgdHJ1ZSkpOwotCQlzLnNlcmlhbGl6ZShkb2MpOwotCX0KLQotCS8qKgotCSAqIFNlcmVhbGl6ZXMgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbSBhbiBvcmcudzNjLmRvbS5FbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gd3JpdGVyIGEgamF2YS5pby5Xcml0ZXIgb2JqZWN0LgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBzZXJpYWxpemUgdGhlIERPTSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVFbGVtZW50KEVsZW1lbnQgZWxlbSwgV3JpdGVyIHdyaXRlcikKLQkJCXRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKLQkJWE1MU2VyaWFsaXplciBzID0gbmV3IFhNTFNlcmlhbGl6ZXIod3JpdGVyLCBuZXcgT3V0cHV0Rm9ybWF0KCJ4bWwiLAotCQkJCSJVVEYtOCIsIHRydWUpKTsKLQkJcy5zZXJpYWxpemUoZWxlbSk7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIGFsbCBlbGVtZW50cyBmcm9tIGxpc3Qgd2l0aG91dCBuYW1lc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHZlY3QgYSBsaXN0IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCByZW1vdmVBbGxFbGVtZW50c1dpdGhvdXROUyhWZWN0b3IgdmVjdCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IHZlY3Quc2l6ZSgpOykKLQkJewotCQkJaWYgKCgoRWxlbWVudCkgdmVjdC5nZXQoaSkpLmdldE5hbWVzcGFjZVVSSSgpID09IG51bGwKLQkJCQkJfHwgKChFbGVtZW50KSB2ZWN0LmdldChpKSkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCIiKSkKLQkJCQl2ZWN0LnJlbW92ZShpKTsKLQkJCWVsc2UKLQkJCQlpKys7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgVVJMIHVzaW5nIGJhc2UgVVJJLgotCSAqIAotCSAqIEBwYXJhbSB1cmwgYSBVUkwgc3RyaW5nLgotCSAqIEBwYXJhbSBiYXNlVVJJIGEgYmFzZSB1cmwgc3RyaW5nIHRvIGFzc2lzdCBpbiBjcmVhdGluZyBhIFVSTC4KLQkgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgVVJMLgotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGlmIGEgbWFsZm9ybWVkIFVSTCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBVUkwgY3JlYXRlVVJMKFN0cmluZyB1cmwsIFN0cmluZyBiYXNlVVJJKQotCQkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0JCVVSTCByZXR1cm5VUkwgPSBudWxsOwotCQlVUkkgdXJpID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLSAgICAgICAgICAgIHJldHVyblVSTCA9IG5ldyBVUkwodXJsKTsKLQkJCXVyaSA9IG5ldyBVUkkodXJsKTsKLQkJCXVyaSA9IHVyaS5ub3JtYWxpemUoKTsKLQkJCXJldHVyblVSTCA9ICBuZXcgVVJMKHVyaS50b1N0cmluZygpKTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gbXVlKQotCQl7Ci0JCQlpbnQgaSA9IGJhc2VVUkkubGFzdEluZGV4T2YoJy8nKTsKLQkJCWludCBqID0gYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKTsKLQkJCWlmIChqID4gaSkKLQkJCQlpID0gajsKLQkJCXRyeQotCQkJewotCQkJICB1cmkgPSBuZXcgVVJJKGJhc2VVUkkuc3Vic3RyaW5nKDAsIGkgKyAxKSArIHVybCk7Ci0JCQkgIHVyaSA9IHVyaS5ub3JtYWxpemUoKTsKLQkJCSAgcmV0dXJuVVJMID0gdXJpLnRvVVJMKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkgIHJldHVybiBuZXcgVVJMKGJhc2VVUkkuc3Vic3RyaW5nKDAsIGkgKyAxKSArIHVybCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJldHVyblVSTDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgVVJMIHVzaW5nIGJhc2UgVVJJLgotCSAqIAotCSAqIEBwYXJhbSB1cmwgYSBVUkwgc3RyaW5nLgotCSAqIEBwYXJhbSBiYXNlVVJJIGEgYmFzZSB1cmwgc3RyaW5nIHRvIGFzc2lzdCBpbiBjcmVhdGluZyBhIFVSTC4KLQkgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgVVJMIHN0cmluZy4KLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBpZiBhIG1hbGZvcm1lZCBVUkwgaGFzIG9jY3VycmVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVSTFN0cmluZyhTdHJpbmcgdXJsLCBTdHJpbmcgYmFzZVVSSSkKLQkJCXRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gewotCQlyZXR1cm4gY3JlYXRlVVJMKHVybCwgYmFzZVVSSSkudG9FeHRlcm5hbEZvcm0oKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIG9ubHkgZm9yIHVuaXQgdGVzdGluZy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncyBhcmd1bWVudHMgZm9yIG1haW4uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQl0cnkKLQkJewotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRmlsZW5hbWU6ICIgKyBhcmdzWzBdICsgIiwgc2NoZW1hOiAiICsgYXJnc1sxXSk7Ci0JCSAgcGFyc2VYTUxEb2N1bWVudChhcmdzWzBdLCBhcmdzWzFdKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUuIik7Ci0JCX0KLQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbihlLnRvU3RyaW5nKCkpOwotCQl9Ci0KLQkJU3lzdGVtLmV4aXQoMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOWVhMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudFR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob3RhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotLyoqCi0gKiBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgbm9kZSBzb3VyY2UgY29kZSwgc28gdGhpcyBkb2VzCi0gKiBvdXIgZG91YmxlLWRpc3BhdGNoIHRoZSBoYXJkIHdheS4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZpc2l0b3IKLXsKLSAgLyoqCi0gICogVmlzaXQgWE1MIENEQVRBU2VjdGlvbiBub2RlLgotICAqIEBwYXJhbSBzICBhbiBYTUwgQ0RBVEFTZWN0aW9uIG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KENEQVRBU2VjdGlvbiBzKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBWaXNpdCBYTUwgRG9jdW1lbnQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIERvY3VtZW50IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KERvY3VtZW50IGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBEb2N1bWVudFR5cGUgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gTUwgRG9jdW1lbnRUeXBlIG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KERvY3VtZW50VHlwZSBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBWaXNpdCBYTUwgQXR0cmlidXRlIG5vZGUuCi0gICogQHBhcmFtIGUgIGFuIFhNTCBBdHJyaWJ1dGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQXR0ciBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBWaXNpdCBYTUwgRWxlbWVudCBub2RlLgotICAqIEBwYXJhbSBlICBhbiBYTUwgRWxlbWVudCBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBDb21tZW50IG5vZGUuCi0gICogQHBhcmFtIGUgIGFuIFhNTCBDb21tZW50IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KENvbW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBUZXh0IG5vZGUuCi0gICogQHBhcmFtIGUgIGFuIFhNTCBUZXh0IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFRleHQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBFbnRpdHlSZWZlcmVuY2Ugbm9kZS4gCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbnRpdHlSZWZlcmVuY2Ugbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5UmVmZXJlbmNlIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgRW50aXR5IG5vZGUuIAotICAqIEBwYXJhbSBlICBhbiBYTUwgRW50aXR5IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVudGl0eSBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIE5vdGF0aW9uIG5vZGUuIAotICAqIEBwYXJhbSBuICBhbiBYTUwgTm90YXRpb24gbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTm90YXRpb24gbikKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gbm9kZS4gCi0gICogQHBhcmFtIGkgIGFuIFhNTCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUHJvY2Vzc2luZ0luc3RydWN0aW9uIGkpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgTmFtZWROb2RlTWFwIG5vZGUuIAotICAqIEBwYXJhbSBpICBhbiBYTUwgTmFtZWROb2RlTWFwIG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE5hbWVkTm9kZU1hcCBpKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIG5vZGUuIAotICAqIEBwYXJhbSBub2RlICBhbiBYTUwgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgZG9WaXNpdChPYmplY3Qgbm9kZSkKLSAgewotICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICB7Ci0gICAgICB2aXNpdCgoRWxlbWVudCkgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb21tZW50KQotICAgIHsKLSAgICAgIHZpc2l0KChDb21tZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENEQVRBU2VjdGlvbikKLSAgICB7Ci0gICAgICAvLyBDREFUQVNlY3Rpb24gZXh0ZW5kcyBUZXh0LCBzbyBpdCBtdXN0IGNvbWUgZmlyc3QKLSAgICAgIHZpc2l0KChDREFUQVNlY3Rpb24pIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVGV4dCkKLSAgICB7Ci0gICAgICB2aXNpdCgoVGV4dCkgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBBdHRyKQotICAgIHsKLSAgICAgIHZpc2l0KChBdHRyKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIERvY3VtZW50KQotICAgIHsKLSAgICAgIHZpc2l0KChEb2N1bWVudCkgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbnRpdHlSZWZlcmVuY2UpCi0gICAgewotICAgICAgdmlzaXQoKEVudGl0eVJlZmVyZW5jZSkgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbnRpdHkpCi0gICAgewotICAgICAgdmlzaXQoKEVudGl0eSkgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudFR5cGUpCi0gICAgewotICAgICAgdmlzaXQoKERvY3VtZW50VHlwZSkgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb3RhdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdCgoTm90YXRpb24pIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgUHJvY2Vzc2luZ0luc3RydWN0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0KChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTmFtZWROb2RlTWFwKQotICAgIHsKLSAgICAgIHZpc2l0KChOYW1lZE5vZGVNYXApIG5vZGUpOwotICAgIH0KLSAgfQotfQotCi0vLyBFTkQgT0YgRklMRQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9ET01QYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9kb20vRE9NUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZTAzNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9ET01QYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5BdWdtZW50YXRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5OYW1lc3BhY2VDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MQXR0cmlidXRlczsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MTG9jYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBzcGVjaWFsaXplcyBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlci4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIERPTVBhcnNlciBleHRlbmRzIG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyCi17Ci0gIC8qKgotICAgKiBMb2NhdG9yLgotICAgKi8KLSAgWE1MTG9jYXRvciBsb2NhdG9yID0gbnVsbDsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTERvY3VtZW50SGFuZGxlciNzdGFydERvY3VtZW50KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxMb2NhdG9yLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuTmFtZXNwYWNlQ29udGV4dCwgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50KAotICAgIFhNTExvY2F0b3IgbG9jYXRvciwKLSAgICBTdHJpbmcgZW5jb2RpbmcsCi0gICAgTmFtZXNwYWNlQ29udGV4dCBjb250ZXh0LAotICAgIEF1Z21lbnRhdGlvbnMgYXVncykKLSAgICB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotICAgIHN1cGVyLnN0YXJ0RG9jdW1lbnQobG9jYXRvciwgZW5jb2RpbmcsIGNvbnRleHQsIGF1Z3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxEb2N1bWVudEhhbmRsZXIjc3RhcnRFbGVtZW50KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5RTmFtZSwgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTEF0dHJpYnV0ZXMsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5BdWdtZW50YXRpb25zKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KAotICAgIFFOYW1lIHFuYW1lLAotICAgIFhNTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywKLSAgICBBdWdtZW50YXRpb25zIGF1Z3MpCi0gICAgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50OwotICAgIEVsZW1lbnRJbXBsIGVsZW1lbnRJbXBsOwotCi0gICAgLy8gREVCVUc6Ci0gICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIjEtbGluZTogIiArIGxvY2F0b3IuZ2V0TGluZU51bWJlcigpICsgIiwgY29sdW1uOiAiICsgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0KLSAgICBzdXBlci5zdGFydEVsZW1lbnQocW5hbWUsIGF0dHJpYnV0ZXMsIGF1Z3MpOwotCi0gICAgLy8gREVCVUc6Ci0gICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIjItbGluZTogIiArIGxvY2F0b3IuZ2V0TGluZU51bWJlcigpICsgIiwgY29sdW1uOiAiICsgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSk7ICAgIAotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZWxlbWVudCA9IChFbGVtZW50KSBnZXRQcm9wZXJ0eShDVVJSRU5UX0VMRU1FTlRfTk9ERSk7Ci0KLSAgICAgIGVsZW1lbnRJbXBsID0gKEVsZW1lbnRJbXBsKSBlbGVtZW50OwotICAgICAgLy8gU2V0dGluZyB0aGUgdXNlciBkYXRhIHdpdGggYW4gaWRlbnRpZmllciBzdWNoIGFzIEVsZW1lbnRMb2NhdGlvbi5LRVlfTkFNRQotICAgICAgLy8gbWF5IGJlIGEgbG9uZyB0ZXJtIGdvb2QgaWRlYS4gVGhlIHNldFVzZXJEYXRhIG1ldGhvZCB3aXRoIG5vIGlkIGlzIHVzZWQgCi0gICAgICAvLyB0byBzdXBwb3J0IEpWTXMgd2l0aCBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgWGVyY2VzLgotICAgICAgZWxlbWVudEltcGwuc2V0VXNlckRhdGEobmV3IEVsZW1lbnRMb2NhdGlvbihsb2NhdG9yLmdldExpbmVOdW1iZXIoKSwgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSkpOwotICAgIH0KLSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gc25zZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKHNuc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIHNucmUpCi0gICAgewotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9FbGVtZW50TG9jYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9kb20vRWxlbWVudExvY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTA1MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9FbGVtZW50TG9jYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciBhIG5vZGUgd2l0aGluIGFuIFhNTCBkb2N1bWVudC4KLSAqICAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50TG9jYXRpb24KLXsKLSAgLyoqCi0gICAqIExpbmUgbnVtYmVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX05BTUUgPSBFbGVtZW50TG9jYXRpb24uY2xhc3MuZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBMaW5lIG51bWJlci4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgbGluZU51bWJlciA9IDA7Ci0KLSAgLyoqCi0gICAqIENvbHVtbiBudW1iZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0KLSAgLyoqCi0gICAqIEVsZW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBsaW5lTnVtYmVyICAgIGEgbGluZSBudW1iZXIuCi0gICAqIEBwYXJhbSBjb2x1bW5OdW1iZXIgIGEgY29sdW1uIG51bWJlci4KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24oaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi0gIHsKLSAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEVsZW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBsb2NhdG9yICBhIExvY2F0b3Igb2JqZWN0LgotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbihMb2NhdG9yIGxvY2F0b3IpCi0gIHsKLSAgICB0aGlzLmxpbmVOdW1iZXIgPSBsb2NhdG9yLmdldExpbmVOdW1iZXIoKTsKLSAgICB0aGlzLmNvbHVtbk51bWJlciA9IGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsaW5lIG51bWJlci4KLSAgICogQHJldHVybiBhbiBpbnQgcmVwcmVzZW50aW5nIHRoZSBsaW5lIG51bWJlciB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5saW5lTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgY29sdW1uIG51bWJlci4KLSAgICogQHJldHVybiBhbiBpbnQgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4gbnVtYmVyIHZhbHVlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW5OdW1iZXIoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29sdW1uTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiAiRWxlbWVudCBMb2NhdGlvbjpcbiIKLSAgICAgICsgIiAgIgotICAgICAgKyBXU0lDb25zdGFudHMuQVRUUl9MSU5FX05VTUJFUgotICAgICAgKyAiPSIKLSAgICAgICsgdGhpcy5saW5lTnVtYmVyCi0gICAgICArICJcbiI7Ci0gICAgLy8rICIgICIgKyBXU0lDb25zdGFudHMuQVRUUl9DT0xVTU5fTlVNQkVSICsgIj0iICsgdGhpcy5jb2x1bW5OdW1iZXIgKyAiXG4iOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2pheHAvRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlYzVjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgZGVmaW5lcyBhIGZhY3RvcnkgQVBJIHRoYXQgZW5hYmxlcyB1cyB0byBvYnRhaW4gYSBwYXJzZXIgdGhhdAotICogcHJvZHVjZXMgRE9NIG9iamVjdCB0cmVlcyBmcm9tIFhNTCBkb2N1bWVudHMuIE5vdGUgdGhpcyBjbGFzcyBzcGVjaWFsaXplcyAKLSAqIGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3RvcnkuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwgZXh0ZW5kcyBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ci17Ci0KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBhdHRyaWJ1dGVzID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRCdWlsZGVyIHVzaW5nIHRoZSBjdXJyZW50bHkgCi0gICAqIGNvbmZpZ3VyZWQgcGFyYW1ldGVycy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudEJ1aWxkZXIuIAotICAgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgYSBEb2N1bWVudEJ1aWxkZXIgY2Fubm90Ci0gICAqICAgICAgICAgYmUgY3JlYXRlZCB3aGljaCBzYXRpc2ZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWVzdGVkLgotICAgKi8KLSAgcHVibGljIERvY3VtZW50QnVpbGRlciBuZXdEb2N1bWVudEJ1aWxkZXIoKQotICAgIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudEJ1aWxkZXIgZG9jdW1lbnRCdWlsZGVyID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRvY3VtZW50QnVpbGRlciA9IG5ldyBEb2N1bWVudEJ1aWxkZXJJbXBsKHRoaXMsIGF0dHJpYnV0ZXMpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvY3VtZW50QnVpbGRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBBbGxvd3MgdGhlIHVzZXIgdG8gcmV0cmlldmUgc3BlY2lmaWMgYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyAKLSAgICogaW1wbGVtZW50YXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSAgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4gCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIAotICAgKiAgICAgICAgIGRvZXNuJ3QgcmVjb2duaXplIHRoZSBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldEF0dHJpYnV0ZShTdHJpbmcgbmFtZSkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93cyB0aGUgdXNlciB0byBzZXQgc3BlY2lmaWMgYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyAKLSAgICogaW1wbGVtZW50YXRpb24uIAotICAgKiAKLSAgICogQHBhcmFtIG5hbWUgICB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLgotICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiAKLSAgICogICAgICAgICBkb2Vzbid0IHJlY29nbml6ZSB0aGUgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpCi0gICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgotICB7Ci0gICAgYXR0cmlidXRlcy5wdXQobmFtZSwgdmFsdWUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRGZWF0dXJlKFN0cmluZyBhcmcwLCBib29sZWFuIGFyZzEpIAotICAgIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBjdXJyZW50bHkgd2UgZG8gbm90IHN1cHBvcnQgc2V0dGluZyBhbnkgZmVhdHVyZQotCS8vIGFzIHBlciBzcGVjLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uCi0JdGhyb3cgbmV3IFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24oYXJnMCArICIgTm90IHN1cHBvcnRlZCIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RmVhdHVyZShTdHJpbmcgYXJnMCkgCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotCS8vIGFzIHBlciBzcGVjLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uCi0JdGhyb3cgbmV3IFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24oYXJnMCArICIgaXMgbm90IHN1cHBvcnRlZCIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NThkZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2pheHAvRG9jdW1lbnRCdWlsZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cDsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRPTUltcGxlbWVudGF0aW9uSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRE9NUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUltcGxlbWVudGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LkVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBVc2luZyB0aGlzIGNsYXNzLCB3ZSBjYW4gb2J0YWluIGEgRG9jdW1lbnQgZnJvbSBYTUwuIFRoaXMgY2xhc3MgaXMgYSAKLSAqIHNwZWNpYWxpemF0aW9uIG9mIGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlci4KLSAqIAotICogQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgCi0gKiBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlciBtZXRob2QuIE9uY2UgYW4gaW5zdGFuY2UgCi0gKiBvZiB0aGlzIGNsYXNzIGlzIG9idGFpbmVkLCBYTUwgY2FuIGJlIHBhcnNlZCBmcm9tIGEgdmFyaWV0eSBvZiBpbnB1dCAKLSAqIHNvdXJjZXMuIFRoZXNlIGlucHV0IHNvdXJjZXMgYXJlIElucHV0U3RyZWFtcywgRmlsZXMsIFVSTHMsIGFuZCBTQVggCi0gKiBJbnB1dFNvdXJjZXMuCi0KLVRoaXMgY2xhc3Mgd2lsbCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Li4uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEJ1aWxkZXJJbXBsIGV4dGVuZHMgRG9jdW1lbnRCdWlsZGVyCi17Ci0gIHByb3RlY3RlZCBET01QYXJzZXIgZG9tUGFyc2VyID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBEZWZhdWx0SGFuZGxlcigpOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRVNfRkVBVFVSRSA9Ci0gICAgQ29uc3RhbnRzLlNBWF9GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5OQU1FU1BBQ0VTX0ZFQVRVUkU7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRJT05fRkVBVFVSRSA9Ci0gICAgQ29uc3RhbnRzLlNBWF9GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5WQUxJREFUSU9OX0ZFQVRVUkU7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBEb2N1bWVudEJ1aWxkZXJJbXBsMi4KLSAgICoKLSAgICogQHBhcmFtIGRiRmFjdG9yeSAgYSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IG9iamVjdC4KLSAgICogQHRocm93cyBTQVhFeGNlcHRpb24gaWYgYW55IHBhcnNlIGVycm9ycyBvY2N1ci4gCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRCdWlsZGVySW1wbChEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRiRmFjdG9yeSwgSGFzaHRhYmxlIGF0dHJpYnV0ZXMpCi0gICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHBhcnNlcgotICAgIGRvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKLQotICAgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUKLSAgICBkb21QYXJzZXIuc2V0RmVhdHVyZShOQU1FU1BBQ0VTX0ZFQVRVUkUsIGRiRmFjdG9yeS5pc05hbWVzcGFjZUF3YXJlKCkpOwotCi0gICAgLy8gU2V0IHZhbGlkYXRpbmcKLSAgICBkb21QYXJzZXIuc2V0RmVhdHVyZShWQUxJREFUSU9OX0ZFQVRVUkUsIGRiRmFjdG9yeS5pc1ZhbGlkYXRpbmcoKSk7Ci0gICAgaWYgKGRiRmFjdG9yeS5pc1ZhbGlkYXRpbmcoKSkgZG9tUGFyc2VyLnNldEZlYXR1cmUoWE1MVXRpbHMuRkVBVFVSRV9WQUxJREFUSU9OX1NDSEVNQSwgdHJ1ZSk7Ci0KLSAgICAvLyBEbyBub3QgZGVmZXIgbm9kZSBleHBhbnNpb24KLSAgICBkb21QYXJzZXIuc2V0RmVhdHVyZSgKLSAgICAgIENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuREVGRVJfTk9ERV9FWFBBTlNJT05fRkVBVFVSRSwKLSAgICAgIGZhbHNlKTsKLQotICAgIC8vIFNldCBvdGhlciBmZWF0dXJlcyBmcm9tIHRoZSBkb2N1bWVudCBmYWN0b3J5IGJ1aWxkZXIKLSAgICBkb21QYXJzZXIuc2V0RmVhdHVyZSgKLSAgICAgIENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuSU5DTFVERV9JR05PUkFCTEVfV0hJVEVTUEFDRSwKLSAgICAgICFkYkZhY3RvcnkuaXNJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSgpKTsKLSAgICBkb21QYXJzZXIuc2V0RmVhdHVyZSgKLSAgICAgIENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVgKLSAgICAgICAgKyBDb25zdGFudHMuQ1JFQVRFX0VOVElUWV9SRUZfTk9ERVNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNFeHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5JTkNMVURFX0NPTU1FTlRTX0ZFQVRVUkUsCi0gICAgICAhZGJGYWN0b3J5LmlzSWdub3JpbmdDb21tZW50cygpKTsKLSAgICBkb21QYXJzZXIuc2V0RmVhdHVyZSgKLSAgICAgIENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuQ1JFQVRFX0NEQVRBX05PREVTX0ZFQVRVUkUsCi0gICAgICAhZGJGYWN0b3J5LmlzQ29hbGVzY2luZygpKTsKLSAgIAotICAgIC8vIHNldCBmZWF0dXJlcyBhbmQgcHJvcGVydGllcyBzcGVjaWZpZWQgYXQgZmFjdG9yeSBsZXZlbAotICAgIGlmIChhdHRyaWJ1dGVzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChFbnVtZXJhdGlvbiBpPWF0dHJpYnV0ZXMua2V5cygpOyBpLmhhc01vcmVFbGVtZW50cygpOykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZSA9IChTdHJpbmcpaS5uZXh0RWxlbWVudCgpOwotICAgICAgICBpZiAoYXR0cmlidXRlLmVxdWFscyhYTUxVdGlscy5KQVhQX1NDSEVNQV9TT1VSQ0UpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZm9yIG11bHRpcGxlIHNjaGVtYSB2YWxpZGF0aW9uIG1heSBiZSBhcnJheSBvZiBJbnB1dFNvdXJjZSAKLSAgICAgICAgICBpZihhdHRyaWJ1dGVzLmdldChhdHRyaWJ1dGUpIGluc3RhbmNlb2YgSW5wdXRTb3VyY2VbXSkKLSAgICAgICAgICAgIGRvbVBhcnNlci5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIChJbnB1dFNvdXJjZVtdKWF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvbVBhcnNlci5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIChJbnB1dFNvdXJjZSlhdHRyaWJ1dGVzLmdldChhdHRyaWJ1dGUpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkb21QYXJzZXIuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1dGVzLmdldChhdHRyaWJ1dGUpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgY29udGVudCBvZiB0aGUgZ2l2ZW4gaW5wdXQgc291cmNlIGFzIGFuIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIGEgbmV3IERPTS4KLSAgICogQHBhcmFtIGlzICBJbnB1dFN0cmVhbSBjb250YWluaW5nIHRoZSBjb250ZW50IHRvIGJlIHBhcnNlZC4gCi0gICAqIEB0aHJvd3MgU0FYRXhjZXB0aW9uIGlmIGFueSBwYXJzZSBlcnJvcnMgb2NjdXIuIAotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFueSBJTyBlcnJvcnMgb2NjdXIuIAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IHBhcnNlKElucHV0U291cmNlIGlzKSB0aHJvd3MgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0gCQotICAgICAgLy8gU2V0IGVudGl0eSByZXNvbHZlcgotICAgICAgaWYgKHRoaXMuZW50aXR5UmVzb2x2ZXIgIT0gbnVsbCkKLSAgICAgICAgZG9tUGFyc2VyLnNldEVudGl0eVJlc29sdmVyKHRoaXMuZW50aXR5UmVzb2x2ZXIpOwotCi0gICAgICAvLyBTZXQgZXJyb3IgaGFuZGxlciAgICAKLSAgICAgIGlmICh0aGlzLmVycm9ySGFuZGxlciAhPSBudWxsKQotICAgICAgICBkb21QYXJzZXIuc2V0RXJyb3JIYW5kbGVyKHRoaXMuZXJyb3JIYW5kbGVyKTsKLQotICAgICAgLy8gUGFyc2UgaW5wdXQgc291cmNlCi0gICAgICBkb21QYXJzZXIucGFyc2UoaXMpOwotCi0gICAgICAvLyBSZXR1cm4gdGhlIGRvY3VtZW50IHRoYXQgd2FzIGNyZWF0ZWQKLSAgICAgIHJldHVybiBkb21QYXJzZXIuZ2V0RG9jdW1lbnQoKTsKLQl9Ci0gICAgZmluYWxseQotICAgIHsgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLSAgICB9ICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHVuZGVyc3RhbmQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgcGFyc2VyIGlzIGNvbmZpZ3VyZWQgdG8gdW5kZXJzdGFuZCBuYW1lc3BhY2VzOyBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc05hbWVzcGFjZUF3YXJlKCkKLSAgewotICAgIGJvb2xlYW4gbmFtZXNwYWNlQXdhcmUgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIG5hbWVzcGFjZUF3YXJlID0gZG9tUGFyc2VyLmdldEZlYXR1cmUoTkFNRVNQQUNFU19GRUFUVVJFKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIHNlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNlLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lc3BhY2VBd2FyZTsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhpcyBwYXJzZXIgaXMgY29uZmlndXJlZCB0byB2YWxpZGF0ZSBYTUwgZG9jdW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwYXJzZXIgaXMgY29uZmlndXJlZCB0byB2YWxpZGF0ZSBYTUwgZG9jdW1lbnRzOyBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRpbmcoKQotICB7Ci0gICAgYm9vbGVhbiB2YWxpZGF0aW5nID0gZmFsc2U7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICB2YWxpZGF0aW5nID0gZG9tUGFyc2VyLmdldEZlYXR1cmUoVkFMSURBVElPTl9GRUFUVVJFKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIHNlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNlLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0aW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIFNwZWNpZnkgdGhlIEVudGl0eVJlc29sdmVyIHRvIGJlIHVzZWQgdG8gcmVzb2x2ZSBlbnRpdGllcyBwcmVzZW50IAotICAgKiBpbiB0aGUgWE1MIGRvY3VtZW50IHRvIGJlIHBhcnNlZC4gU2V0dGluZyB0aGlzIHRvIG51bGwgd2lsbCByZXN1bHQgCi0gICAqIGluIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHVzaW5nIGl0J3Mgb3duIGRlZmF1bHQgCi0gICAqIGltcGxlbWVudGF0aW9uIGFuZCBiZWhhdmlvci4KLSAgICogCi0gICAqIEBwYXJhbSBlciAgdGhlIEVudGl0eVJlc29sdmVyIHRvIGJlIHVzZWQgdG8gcmVzb2x2ZSBlbnRpdGllcyAKLSAgICogICAgICAgICAgICBwcmVzZW50IGluIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50aXR5UmVzb2x2ZXIoRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIpCi0gIHsKLSAgICB0aGlzLmVudGl0eVJlc29sdmVyID0gZW50aXR5UmVzb2x2ZXI7Ci0gIH0KLQotICAvKioKLSAgICogU3BlY2lmeSB0aGUgRXJyb3JIYW5kbGVyIHRvIGJlIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBwcmVzZW50IGluIAotICAgKiB0aGUgWE1MIGRvY3VtZW50IHRvIGJlIHBhcnNlZC4gU2V0dGluZyB0aGlzIHRvIG51bGwgd2lsbCByZXN1bHQgCi0gICAqIGluIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHVzaW5nIGl0J3Mgb3duIGRlZmF1bHQgCi0gICAqIGltcGxlbWVudGF0aW9uIGFuZCBiZWhhdmlvci4gCi0gICAqIAotICAgKiBwYXJhbSBlaCAgdGhlIEVycm9ySGFuZGxlciB0byBiZSB1c2VkIHRvIHJlcG9ydCBlcnJvcnMgcHJlc2VudCBpbiAKLSAgICogICAgICAgICAgIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JIYW5kbGVyKEVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIpCi0gIHsKLSAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBPYnRhaW4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBET00gRG9jdW1lbnQgb2JqZWN0IHRvIGJ1aWxkIGEgRE9NIAotICAgKiB0cmVlIHdpdGguIEFuIGFsdGVybmF0aXZlIHdheSB0byBjcmVhdGUgYSBET00gRG9jdW1lbnQgb2JqZWN0IAotICAgKiBpcyB0byB1c2UgdGhlIGdldERPTUltcGxlbWVudGF0aW9uIG1ldGhvZCB0byBnZXQgYSBET00gTGV2ZWwgMiAKLSAgICogRE9NSW1wbGVtZW50YXRpb24gb2JqZWN0IGFuZCB0aGVuIHVzZSBET00gTGV2ZWwgMiBtZXRob2RzIG9uIAotICAgKiB0aGF0IG9iamVjdCB0byBjcmVhdGUgYSBET00gRG9jdW1lbnQgb2JqZWN0LgotICAgKiAKLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERPTSBEb2N1bWVudCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgbmV3RG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBEb2N1bWVudEltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBPYnRhaW4gYW4gaW5zdGFuY2Ugb2YgYSBET01JbXBsZW1lbnRhdGlvbiBvYmplY3QuIAotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRE9NSW1wbGVtZW50YXRpb24uCi0gICAqLwotICBwdWJsaWMgRE9NSW1wbGVtZW50YXRpb24gZ2V0RE9NSW1wbGVtZW50YXRpb24oKQotICB7Ci0gICAgcmV0dXJuIG5ldyBET01JbXBsZW1lbnRhdGlvbkltcGwoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1RhcmdldE5hbWVzcGFjZVByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9UYXJnZXROYW1lc3BhY2VQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMjQzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1RhcmdldE5hbWVzcGFjZVByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvY2Vzc2VzIHRhcmdldCBuYW1lc3BhY2VzLiBOb3RlIHRoaXMgY2xhc3MgaXMgYSBzcGVjaWFsaXphdGlvbgotICogb2Ygb3JnLndzaS54bWwuc2NoZW1hLlhNTFNjaGVtYVByb2Nlc3Nvci4KLSAqIAotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yIGV4dGVuZHMgWE1MU2NoZW1hUHJvY2Vzc29yCi17Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBUYXJnZXROYW1lc3BhY2VQcm9jZXNzLgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICogICAgICAgICAgICBkb2N1bWVudCBjb250ZXh0Ci0gICAqIEBwYXJhbSBkb2N1bWVudExpc3QKLSAgICogICAgICAgICAgICBjYWNoZSBvZiBwcmV2aW91c2x5IHBhcnNlZCBkb2N1bWVudHMKLSAgICovCi0gIHB1YmxpYyBUYXJnZXROYW1lc3BhY2VQcm9jZXNzb3IoU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICBzdXBlcihjb250ZXh0LCBmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzU2NoZW1hKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFN0cmluZyB0bnMgPSBudWxsOwotICAgIEF0dHIgYXR0ciA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCBBVFRSX1hTRF9UQVJHRVROQU1FU1BBQ0UpOwotCi0gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSB3YXMgZm91bmQgYW5kIHZhbHVlIGlzIG5vdCBudWxsLCB0aGVuIGFkZCBpdCB0byB0aGUgbGlzdAotICAgIGlmICgoYXR0ciAhPSBudWxsKSAmJiAoKHRucyA9IGF0dHIuZ2V0VmFsdWUoKSkgIT0gbnVsbCkpCi0gICAgewotICAgICAgLy8gQWRkIHRoZSB0YXJnZXROYW1lc3BhY2UgdG8gdGhlIHJldHVybiBsaXN0Ci0gICAgICByZXR1cm5MaXN0LmFkZCh0bnMpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggZm9yIGFsbCBzY2hlbWEgZWxlbWVudHMsIGxvYWQgdGhlIHhzZCBkb2N1bWVudHMsIGFuZCB0aGVuIHByb2Nlc3MKLSAgICogdGhlbS4KLSAgICogCi0gICAqIEBwYXJhbSBub2RlCi0gICAqICAgICAgICAgICAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gICAqICAgICAgICAgICAgIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQKLSAgICogICAgICAgICAgICAgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIExpc3QgcHJvY2Vzc0FsbFNjaGVtYShOb2RlIG5vZGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwcm9jZXNzQWxsU2NoZW1hKG5vZGUsIGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcwotICAgKiB0aGVtLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgICBub2RlLgotICAgKiBAcmV0dXJuIGEgbGlzdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICogICAgICAgICAgICAgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZAotICAgKiAgICAgICAgICAgICBjb3JyZWN0bHkuCi0gICAqLwotICBwcml2YXRlIExpc3QgcHJvY2Vzc0FsbFNjaGVtYShOb2RlIG5vZGUsIFN0cmluZyBjdHgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCUNsYXNzTG9hZGVyIGN1cnJlbnRMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOyAgIAotCXRyeQotCXsKLSAgIAkgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFhNTFV0aWxzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAotCQotICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG5vZGUsIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICB7Ci0gICAgICAgIHByb2Nlc3NTY2hlbWEoKEVsZW1lbnQpIG5vZGUpOwotCi0gICAgICAgIE5vZGUgbiA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSYmIFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG4sIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgICAgICAgICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgCSAgaWYgKCFzY2hlbWFMb2NhdGlvbnMuY29udGFpbnMoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSkpCi0gICAgICAgICAgCSAgewotICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9ucy5hZGQoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gUmVhZCBhbmQgcFBhcnNlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICAgICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IHBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY3R4LCBUZXN0VXRpbHMuZ2V0WE1MU2NoZW1hTG9jYXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLCBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY3R4KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChXU0lFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLy8gTk9URTogQW4gZXhjZXB0aW9uIHdpbGwgb2NjdXIgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QKLSAgCQkJICAgICAvLyBmb3VuZCBvciBpZiBpdCBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseQotICAgICAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pIHRocm93IG5ldyBXU0lFeGNlcHRpb24odC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICB9Ci0gICAgIH0KLQotICAgICAvLyBSZXR1cm4gbGlzdCBjcmVhdGVkIGJ5IHRoZSBjbGFzcyB0aGF0IGV4dGVuZHMgdGhpcyBjbGFzcwotICAgICByZXR1cm4gcmV0dXJuTGlzdDsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLSAgICB9ICAgIAotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvWE1MU2NoZW1hUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZTUyZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTERvY3VtZW50Q2FjaGVVc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVGFnczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgYWJzdHJhY3QgY2xhc3MgaXMgdXNlZCB0byBwcm9jZXNzIGFuIFhNTCBTY2hlbWEuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYTUxTY2hlbWFQcm9jZXNzb3IKLSAgZXh0ZW5kcyBYTUxEb2N1bWVudENhY2hlVXNlcgotICBpbXBsZW1lbnRzIFhNTFRhZ3MKLXsKLSAgcHJvdGVjdGVkIExpc3QgcmV0dXJuTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIFN0cmluZyBjb250ZXh0OwotICBwcm90ZWN0ZWQgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbiA9IHRydWU7Ci0gIHByb3RlY3RlZCBMaXN0IHNjaGVtYUxvY2F0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTFNjaGVtYVByb2Nlc3Nvci4KLSAgICogQHBhcmFtIGNvbnRleHQgICAgICAgZG9jdW1lbnQgY29udGV4dC4gCi0gICAqIEBwYXJhbSBkb2N1bWVudExpc3QgIGNhY2hlIG9mIHByZXZpb3VzbHkgcGFyc2VkIGRvY3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyBYTUxTY2hlbWFQcm9jZXNzb3IoU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB0aGlzKGNvbnRleHQsIHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxTY2hlbWFQcm9jZXNzb3IuCi0gICAqIEBwYXJhbSBjb250ZXh0ICAgICAgICBkb2N1bWVudCBjb250ZXh0LiAKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdCAgIGNhY2hlIG9mIHByZXZpb3VzbHkgcGFyc2VkIGRvY3VtZW50cy4KLSAgICogQHBhcmFtIHRocm93RXhjZXB0aW9uIGluZGljYXRlcyBpZiBhbiBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biBpZiB0aGVyZSBpcyBhIHBhcnNpbmcgcHJvYmxlbS4KLSAgICovCi0gIHB1YmxpYyBYTUxTY2hlbWFQcm9jZXNzb3IoCi0gICAgU3RyaW5nIGNvbnRleHQsCi0gICAgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMudGhyb3dFeGNlcHRpb24gPSB0aHJvd0V4Y2VwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggZm9yIGFsbCBzY2hlbWEgZWxlbWVudHMsIGxvYWQgdGhlIHhzZCBkb2N1bWVudHMsIGFuZCB0aGVuIHByb2Nlc3MgdGhlbS4KLSAgICogQHBhcmFtIG5vZGUgIG5vZGUuCi0gICAqIEByZXR1cm4gYSBsaXN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdCBmb3VuZCBvciBpZiBpdCBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyBMaXN0IHByb2Nlc3NBbGxTY2hlbWEoTm9kZSBub2RlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0FsbFNjaGVtYShub2RlLCBjb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggZm9yIGFsbCBzY2hlbWEgZWxlbWVudHMsIGxvYWQgdGhlIHhzZCBkb2N1bWVudHMsIGFuZCB0aGVuIHByb2Nlc3MgdGhlbS4KLSAgICogQHBhcmFtIG5vZGUgIG5vZGUuCi0gICAqIEByZXR1cm4gYSBsaXN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdCBmb3VuZCBvciBpZiBpdCBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseS4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSwgU3RyaW5nIGN0eCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MU2NoZW1hUHJvY2Vzc29yLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAotICAgICAgLy8gUHJvY2VzcyBhbGwgbm9kZXMKLSAgICAgIHdoaWxlIChub2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gZWxlbWVudCBub2RlLCB0aGVuIGNvbnRpbnVlCi0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBub2RlLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG5vZGUsIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJvY2Vzc1NjaGVtYSgoRWxlbWVudCkgbm9kZSk7Ci0KLSAgICAgICAgICAgIC8vIFByb2Nlc3MgYWxsIGNoaWxkcmVuIG9mIHRoZSBzY2hlbWEgZWxlbWVudAotICAgICAgICAgICAgcHJvY2Vzc0FsbFNjaGVtYShub2RlLmdldEZpcnN0Q2hpbGQoKSwgY3R4KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBpZiB4c2Q6aW1wb3J0IGVsZW1lbnQgaXMgZm91bmQgLT4gbG9hZCBzY2hlbWEgYW5kIHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG5vZGUsIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBBdHRyIHNjaGVtYUxvY2F0aW9uID0KLSAgICAgICAgICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBub2RlLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0KLSAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAJICBpZiAoIXNjaGVtYUxvY2F0aW9ucy5jb250YWlucyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAJICB7Ci0gICAgICAgICAgCQlzY2hlbWFMb2NhdGlvbnMuYWRkKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIFJlYWQgYW5kIHBQYXJzZSB0aGUgWE1MIHNjaGVtYSBkb2N1bWVudAotICAgICAgICAgICAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPQotICAgICAgICAgICAgICAgICAgICBwYXJzZVhNTERvY3VtZW50VVJMKAotICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgY3R4LAotICAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLQotICAgICAgICAgICAgICAgICAgcHJvY2Vzc0FsbFNjaGVtYShkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY3R4KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChXU0lFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IEFuIGV4Y2VwdGlvbiB3aWxsIG9jY3VyIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24odC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBlbHNlIGl0ZXJhdGUgZWxlbWVudCByZWN1cnNpdmVseQotICAgICAgICAgICAgcHJvY2Vzc0FsbFNjaGVtYShub2RlLmdldEZpcnN0Q2hpbGQoKSwgY3R4KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgbmV4dCBzaWJpbGluZwotICAgICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotICAgICAgfQotCi0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLQotCi0gICAgLy8gUmV0dXJuIGxpc3QgY3JlYXRlZCBieSB0aGUgY2xhc3MgdGhhdCBleHRlbmRzIHRoaXMgY2xhc3MKLSAgICByZXR1cm4gcmV0dXJuTGlzdDsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHByb2Nlc3NTY2hlbWEoRWxlbWVudCBlbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvWE1MU2NoZW1hVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2Y2ExMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UZXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTTJXcml0ZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHZhbGlkYXRlIGFuIFhNTCBTY2hlbWEuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxTY2hlbWFWYWxpZGF0b3IgZXh0ZW5kcyBYTUxTY2hlbWFQcm9jZXNzb3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TX1BSRUZJWCA9ICJ4bWxuczoiOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MU2NoZW1hVmFsaWRhdG9yLgotICAgKiBAcGFyYW0gY29udGV4dCAgICAgICBkb2N1bWVudCBjb250ZXh0LiAKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdCAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVZhbGlkYXRvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHN1cGVyKGNvbnRleHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBOYW1lZE5vZGVNYXAgYXR0ckxpc3Q7Ci0KLSAgICBIYXNoTWFwIGVsZW1lbnRNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIEhhc2hNYXAgbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHNjaGVtYSBjb250ZW50IGFzIGEgc3RyaW5nCi0gICAgICBTdHJpbmcgc2NoZW1hID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoZWxlbWVudCk7Ci0KLSAgICAgIC8vIEdldCBsaXN0IG9mIGVsZW1lbnQgbmFtZXNwYWNlcwotICAgICAgaWYgKChhdHRyTGlzdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBhZGROYW1lc3BhY2VzKGF0dHJMaXN0LCBlbGVtZW50TWFwLCBudWxsKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgZWxlbWVudE1hcCBkb2VzIG5vdCBjb250YWluIGVudHJ5IGZvciBpdCdzIG93biBuYW1lc3BhY2UsIHRoZW4gYWRkIGl0Ci0gICAgICBpZiAoZWxlbWVudE1hcC5nZXQoWE1MTlNfUFJFRklYICsgZWxlbWVudC5nZXRQcmVmaXgoKSkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudE1hcC5wdXQoCi0gICAgICAgICAgWE1MTlNfUFJFRklYICsgZWxlbWVudC5nZXRQcmVmaXgoKSwKLSAgICAgICAgICBlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IGZpcnN0IHBhcmVudCBub2RlIGFuZCB0aGVuIHByb2Nlc3MgYWxsIG9mIHRoZW0gdW50aWwgeW91IGhpdCB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudAotICAgICAgTm9kZSBwYXJlbnROb2RlID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICB3aGlsZSAocGFyZW50Tm9kZSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBPbmx5IHByb2Nlc3MgRWxlbWVudCBub2RlcwotICAgICAgICBpZiAocGFyZW50Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBwYXJlbnQgbm9kZQotICAgICAgICAgIGF0dHJMaXN0ID0gcGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYXR0cmlidXRlcywgbG9vayBmb3IgdGhlIHhtbG5zOiBhdHRyaWJ1dGVzCi0gICAgICAgICAgaWYgKGF0dHJMaXN0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgYWRkTmFtZXNwYWNlcyhhdHRyTGlzdCwgbnNNYXAsIGVsZW1lbnRNYXApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldFBhcmVudE5vZGUoKTsKLSAgICAgIH0KLQotICAgICAgLy8gQnVpbGQgbmFtZXNwYWNlIGxpc3QKLSAgICAgIGlmIChuc01hcC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmcgYXR0cjsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZUxpc3QgPSAiIjsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBuc01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBuYW1lc3BhY2VMaXN0ICs9ICIgIiArIGF0dHIgKyAiPVwiIiArIG5zTWFwLmdldChhdHRyKSArICJcIiI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgbmFtZXNwYWNlIHNldHRpbmdzLCBzaW5jZSB0aGUgRE9NMldyaXRlciB3aWxsIG1pc3MgYW55IHRoYXQgYXJlIHVzZWQgYXMgYXR0cmlidXRlIHZhbHVlcwotICAgICAgICBpbnQgaW5kZXggPSBzY2hlbWEuaW5kZXhPZigiPiIpOwotICAgICAgICBpZiAoaW5kZXggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHN0YXJ0ID0gc2NoZW1hLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgICAgU3RyaW5nIGVuZCA9IHNjaGVtYS5zdWJzdHJpbmcoaW5kZXgpOwotCi0gICAgICAgICAgc2NoZW1hID0gc3RhcnQgKyBuYW1lc3BhY2VMaXN0ICsgZW5kOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNjaGVtYSB2YWxpZGF0ZSB0aGUgWE1MIHNjaGVtYSBkb2N1bWVudAotICAgICAgWE1MVXRpbHMucGFyc2VYTUwoc2NoZW1hLCBUZXN0VXRpbHMuZ2V0WE1MU2NoZW1hTG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICBUaHJvd2FibGUgdCA9IHdlLmdldFRhcmdldEV4Y2VwdGlvbigpOwotICAgICAgaWYgKHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuTGlzdC5hZGQodC5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGROYW1lc3BhY2VzKE5hbWVkTm9kZU1hcCBhdHRyTGlzdCwgTWFwIG5zTWFwLCBNYXAgZWxlbWVudE1hcCkKLSAgewotICAgIE5vZGUgYXR0cjsKLSAgICBTdHJpbmcgbm9kZU5hbWU7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgYXR0ciA9IGF0dHJMaXN0Lml0ZW0oaSk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlIG5vZGUgbmFtZQotICAgICAgbm9kZU5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0KLSAgICAgIC8vIElmIGl0IHN0YXJ0cyB3aXRoIHhtbG5zOiwgdGhlbiBkZXRlcm1pbmUgaWYgaXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgCi0gICAgICBpZiAobm9kZU5hbWUuc3RhcnRzV2l0aChYTUxOU19QUkVGSVgpCi0gICAgICAgICYmICgoZWxlbWVudE1hcCA9PSBudWxsCi0gICAgICAgICAgfHwgKGVsZW1lbnRNYXAgIT0gbnVsbCAmJiBlbGVtZW50TWFwLmdldChub2RlTmFtZSkgPT0gbnVsbCkpKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5zTWFwLmdldChub2RlTmFtZSkgPT0gbnVsbCkKLSAgICAgICAgICBuc01hcC5wdXQobm9kZU5hbWUsIGF0dHIuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2RvY3VtZW50L0RvY3VtZW50RmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBjNGJjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5OdWxsUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5SZXBvcnROb1dyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuU2ltcGxlUmVwb3J0ZXI7Ci0KLS8qKgotICogRG9jdW1lbnRGYWN0b3J5SW1wbAotICogCi0gKiBFeHRlbmRzIHRoZSBXUy1JIFRlc3QgVG9vbHMgZG9jdW1lbnQgZmFjdG9yeSB0byBzcGVjaWZ5IHNwZWNpZmljIFJlcG9ydAotICogYW5kIFJlcG9ydFdyaXRlciBjbGFzc2VzIG5lZWRlZCBmb3IgaW5jbHVzaW9uIG9mIHRoZSB0b29scyBpbiBXU0FELgotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRGYWN0b3J5SW1wbCBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5pbXBsLkRvY3VtZW50RmFjdG9yeUltcGwKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIERvY3VtZW50RmFjdG9yeUltcGwuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50V3JpdGVyLgotICAgKi8KLSAgcHVibGljIFJlcG9ydFdyaXRlciBuZXdSZXBvcnRXcml0ZXIoKQotICB7Ci0gICAgLy8gUmV0dXJuIGltcGxlbWVudGF0aW9uCi0gICAgcmV0dXJuIG5ldyBSZXBvcnROb1dyaXRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIFJlcG9ydCBuZXdSZXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBOdWxsUmVwb3J0SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHJlcG9ydGVyLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgcmVwb3J0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0ZXIgbmV3UmVwb3J0ZXIoUmVwb3J0IHJlcG9ydCwgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcikKLSAgewotICAgIHJldHVybiBuZXcgU2ltcGxlUmVwb3J0ZXIocmVwb3J0LCByZXBvcnRXcml0ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L0Fzc2VydGlvbkVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L0Fzc2VydGlvbkVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMGVjODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9Bc3NlcnRpb25FcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydDsKLQotLyoqCi0gKiBBc3NlcnRpb25FcnJvcgotICogCi0gKiBPYmplY3QgdG8gaG9sZCBhbiBhc3NlcnRpb24gZXJyb3IgZ2VuZXJhdGVkIGJ5IHRoZSBXUy1JIFRlc3QgVG9vbHMuCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgaW5jbHVkaW5nIHRoZQotICogaWQsIG1lc3NhZ2UgYW5kIGxvY2F0aW9uIGluIHRoZSBmaWxlLgotICovCi1wdWJsaWMgY2xhc3MgQXNzZXJ0aW9uRXJyb3IKLXsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG1lc3NhZ2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgYXNzZXJ0aW9uaWQ7Ci0gIHByb3RlY3RlZCBpbnQgY29sdW1uOwotICBwcm90ZWN0ZWQgaW50IGxpbmU7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXJyb3IuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRXJyb3IoKQotICB7Ci0gICAgbWVzc2FnZSA9IGFzc2VydGlvbmlkID0gIiI7Ci0gICAgbGluZSA9IGNvbHVtbiA9IDA7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvbkVycm9yLgotICAgKiBAcGFyYW0gaWQgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gbWVzc2FnZSBhIGVycm9yIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBsaW5lIGEgbGluZSBudW1iZXIuCi0gICAqIEBwYXJhbSBjb2x1bW4gYSBjb2x1bW4gbnVtYmVyLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbkVycm9yKFN0cmluZyBpZCwgU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKQotICB7Ci0gICAgdGhpcy5hc3NlcnRpb25pZCA9IGlkOwotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2Qgc2V0QXNzZXJ0aW9uSUQuCi0gICAqIEBwYXJhbSBpZCBhc3NlcnRpb24gaWQuCi0gICAqIEBzZWUgI2dldEFzc2VydGlvbklECi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25JRChTdHJpbmcgaWQpCi0gIHsKLSAgICBhc3NlcnRpb25pZCA9IGlkOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBc3NlcnRpb25JRC4KLSAgICogQHJldHVybiBhc3NlcmlvbiBpZC4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uSUQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXNzZXJ0aW9uSUQoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbmlkOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRFcnJvck1lc3NhZ2UuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgZXJyb3IgbWVzc2FnZS4KLSAgICogQHNlZSAjZ2V0RXJyb3JNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRFcnJvck1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZXJyb3IgbWVzc2FnZS4KLSAgICogQHNlZSAjc2V0RXJyb3JNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2Qgc2V0TGluZS4KLSAgICogQHBhcmFtIGxpbmUgbGluZSBudW1iZXIuCi0gICAqIEBzZWUgI2dldExpbmUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExpbmUoaW50IGxpbmUpCi0gIHsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRMaW5lLgotICAgKiBAcmV0dXJuIGxpbmUgbnVtYmVyLgotICAgKiBAc2VlICNzZXRMaW5lCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKQotICB7Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIHNldENvbHVtbi4KLSAgICogQHBhcmFtIGNvbHVtbiBjb2x1bW4gbnVtYmVyLgotICAgKiBAc2VlICNnZXRDb2x1bW4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbHVtbihpbnQgY29sdW1uKQotICB7Ci0gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldENvbHVtbi4KLSAgICogQHJldHVybiBjb2x1bW4gbnVtYmVyLgotICAgKiBAc2VlICNzZXRDb2x1bW4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uKCkKLSAgewotICAgIHJldHVybiBjb2x1bW47Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9OdWxsUmVwb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9OdWxsUmVwb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWFlOThkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvTnVsbFJlcG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5SZXBvcnRJbXBsOwotCi0vKioKLSAqIE51bGwgcmVwb3J0LgotICoKLSAqIEBhdXRob3IgSmVmZnJleSBMaXUgKGplZmZsaXVAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE51bGxSZXBvcnRJbXBsIGV4dGVuZHMgUmVwb3J0SW1wbCBpbXBsZW1lbnRzIFJlcG9ydAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0U3RhcnRYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0RW5kWE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRFcnJvclhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvclhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgU3RyaW5nIGVycm9yRGV0YWlsKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvUmVwb3J0Tm9Xcml0ZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1JlcG9ydE5vV3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjM3MjVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvUmVwb3J0Tm9Xcml0ZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFdTLUkgY29uZm9ybWFuY2UgdGVzdCBSZXBvcnRXcml0ZXIgZm9yIHdzaSBwbHVnaW4uCi0gKiBUaGlzIFJlcG9ydFdyaXRlciB3cml0ZXMgbm90aGluZyBzbyBubyByZXBvcnQgZmlsZSB3aWxsIGJlIGNyZWF0ZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXBvcnROb1dyaXRlckltcGwgaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcgotewotCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjT2JqZWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnROb1dyaXRlckltcGwoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI2dldERvY3VtZW50KCkKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXREb2N1bWVudCgpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI3NldFdyaXRlcihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXcml0ZXIoU3RyaW5nIGRvY3VtZW50TG9jYXRpb24pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI3dyaXRlKFJlYWRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI3dyaXRlKFJlYWRlciwgV3JpdGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlciwgV3JpdGVyIHdyaXRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRXcml0ZXIjd3JpdGUoUmVwb3J0KQotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRXcml0ZXIjd3JpdGUoUmVwb3J0LCBXcml0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZXBvcnQgcmVwb3J0LCBXcml0ZXIgd3JpdGVyKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI2Nsb3NlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9TaW1wbGVSZXBvcnRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9TaW1wbGVSZXBvcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzY1ZTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvU2ltcGxlUmVwb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5EZWZhdWx0UmVwb3J0ZXI7Ci0KLS8qKgotICogVGhpcyByZXBvcnRlciBkb2VzIG5vdCB3cml0ZSBhcnRpZmFjdHMgYW5kIGFzc2VydGlvbnMKLSAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlcG9ydGVyIGV4dGVuZHMgRGVmYXVsdFJlcG9ydGVyCi17Ci0gIHB1YmxpYyBTaW1wbGVSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKQotICB7Ci0gICAgc3VwZXIocmVwb3J0LCByZXBvcnRXcml0ZXIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjYWRkQXJ0aWZhY3RSZWZlcmVuY2Uob3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydC5hZGRBcnRpZmFjdFJlZmVyZW5jZShhcnRpZmFjdFJlZmVyZW5jZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuYWRkQXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvblJlc3VsdCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvdmFsaWRhdGUvd3NkbC9XU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvdmFsaWRhdGUvd3NkbC9XU0RMVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYTdjYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3ZhbGlkYXRlL3dzZGwvV1NETFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLlZhbGlkYXRpb25JbmZvSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbi5WYWxpZGF0ZVdTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTRExSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0RMQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0lBbmFseXplckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoZSBXU0kgdmFsaWRhdG9yIHBsdWdzIGludG8gdGhlIFdTREwgdmFsaWRhdG9yIHRvIHByb3ZpZGUKLSAqIHZhbGlkYXRpb24gZm9yIGEgV1NETCBkb2N1bWVudCB3aXRoIHJlc3BlY3QgdG8gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAoY3VycmVudGx5IDEuMCkuCi0gKiBUaGlzIGNsYXNzIGFjdHMgYXMgYW4gYnJpZGdlIGJldHdlZW4gdGhlIFdTLUkgdG9vbHMgYW5kIHRoZSBXU0RMIFZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqIEBhdXRob3IgV2FqaWhhIFJlaG1hbgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMVmFsaWRhdG9yCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJID0gIl9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX1dTSSI7Ci0KLSAgLy8gaW5kaWNhdGlvbnMgZm9yIHR5cGVzIG9mIGVycm9ycwotICBwcm90ZWN0ZWQgZmluYWwgaW50IEVSUk9SID0gMjsKLSAgcHJvdGVjdGVkIGZpbmFsIGludCBXQVJOSU5HID0gMTsKLSAgCi0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHdzaVZhbGlkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IoKQotICB7Ci0JcmVzb3VyY2VidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIndzaXZhbGlkYXRlIiwgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5JV1NETFZhbGlkYXRvciN2YWxpZGF0ZShvcmcudzNjLmRvbS5Eb2N1bWVudCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5WYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKERvY3VtZW50IGRvbU1vZGVsLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbykgdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICB7Ci0JYm9vbGVhbiB3aXRoQXR0YWNobWVudHMgPSBmYWxzZTsKLQlib29sZWFuIHdpdGhCYXNpYyA9IGZhbHNlOwotCU9iamVjdCBhdHRWYWx1ZSA9IHZhbEluZm8uZ2V0QXR0cmlidXRlKCJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvQmFzaWNXaXRoQXR0YWNobWVudHMvQ29tcGxpYW5jZUxldmVsIik7Ci0JaWYoYXR0VmFsdWUgPT0gbnVsbCkKLQl7Ci0JICBhdHRWYWx1ZSA9IHZhbEluZm8uZ2V0QXR0cmlidXRlKCJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvQmFzaWMvQ29tcGxpYW5jZUxldmVsIik7Ci0gICAJICBpZihhdHRWYWx1ZSAhPSBudWxsKQotCSAgewotCSAgICB3aXRoQmFzaWMgPSB0cnVlOwotCSAgfQotCX0KLQllbHNlCi0JewotCSAgd2l0aEF0dGFjaG1lbnRzID0gdHJ1ZTsKLQl9Ci0JU3RyaW5nIHdzaUxldmVsID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5XQVJOX05PTl9XU0k7Ci0JV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZSA9IG51bGw7Ci0JU3RyaW5nIHVyaSA9IHZhbEluZm8uZ2V0RmlsZVVSSSgpOwotCWlmKGF0dFZhbHVlICE9IG51bGwpCi0JewotCSAgU3RyaW5nIHZhbHVlID0gKFN0cmluZylhdHRWYWx1ZTsKLQkgIGlmKHZhbHVlLmVxdWFscygiSUdOT1JFIikpCi0JICB7Ci0JICAJd3NpTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLklHTk9SRV9OT05fV1NJOwotCSAgfQotCSAgZWxzZSBpZih2YWx1ZS5lcXVhbHMoIlJFUVVJUkUiKSkKLQkgIHsKLQkgICAJd3NpTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNUT1BfTk9OX1dTSTsKLQkgIH0KLQl9Ci0JZWxzZSAKLQl7Ci0JICBpZihXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmdldEVjbGlwc2VDb250ZXh0KCkpCi0JICB7Ci0JCXdzaVByZWZlcmVuY2UgPSBXU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5jaGVja1dTSVByZWZlcmVuY2VzKHVyaSk7Ci0JCXdzaUxldmVsID0gd3NpUHJlZmVyZW5jZS5nZXRDb21wbGlhbmNlTGV2ZWwoKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkJd3NpUHJlZmVyZW5jZSA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuY2hlY2tXU0lQcmVmZXJlbmNlcyh1cmkpOwotCQl3c2lMZXZlbCA9IHdzaVByZWZlcmVuY2UuZ2V0Q29tcGxpYW5jZUxldmVsKCk7Ci0JICB9Ci0JfQotCS8vIElmIHdlIGFyZSBpZ25vcmluZyBXUy1JIHRoZW4gZG9uJ3QgcnVuIHRoZSB0ZXN0cy4KLQlpZih3c2lMZXZlbC5lcXVhbHMoV1NJVGVzdFRvb2xzUHJvcGVydGllcy5JR05PUkVfTk9OX1dTSSkpCi0JewotCSAgcmV0dXJuOwotCX0KLQkgICAgCi0gIAl3c2lWYWxpZCA9IHRydWU7Ci0gIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCWJvb2xlYW4gaGFzQW5hbHl6ZXJDb25maWcgPSBmYWxzZTsKLSAgCXRyeQotICAJewotICAgICAgLy9XU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAJICBWYWxpZGF0aW9uSW5mb0ltcGwgdmFsaSA9IG5ldyBWYWxpZGF0aW9uSW5mb0ltcGwodmFsSW5mby5nZXRGaWxlVVJJKCksIG5ldyBNZXNzYWdlR2VuZXJhdG9yKHJlc291cmNlYnVuZGxlKSk7Ci0gIAkgIHZhbGkuc2V0VVJJUmVzb2x2ZXIoKFVSSVJlc29sdmVyKXZhbEluZm8uZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gICAgICBXU0RMUmVhZGVySW1wbCByZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwobmV3IFdTREwxMVZhbGlkYXRpb25JbmZvSW1wbCh2YWxpKSk7Ci0gICAgICBXU0RMRG9jdW1lbnRbXSBkb2NzID0gcmVhZGVyLnJlYWRXU0RMKHVyaSwgZG9tTW9kZWwpOwotICAgICAgaW50IG51bWRvY3MgPSBkb2NzLmxlbmd0aDsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1kb2NzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCB0ZW1wRG9jID0gZG9jc1tpXTsKLQkJaWYodGVtcERvYy5nZXREZWZpbml0aW9uKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCkuZXF1YWxzKHZhbEluZm8uZ2V0RmlsZVVSSSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmluaXRpb24gPSB0ZW1wRG9jLmdldERlZmluaXRpb24oKTsgIAotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gIAl9Ci0gIAljYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gIAl7Ci0gIAkgIHRocm93IG5ldyBWYWxpZGF0ZVdTRExFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQocmVzb3VyY2VidW5kbGUuZ2V0U3RyaW5nKF9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX1dTSSksIG5ldyBPYmplY3RbXSB7IHVyaSB9KSk7Ci0gIAl9Ci0JICAgIAotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgdmFsSW5mbyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCi0gICAgICAvLyBnZXQgYWxsIHRoZSBjb2xsZWN0aW9ucyB3ZSBtYXkgbmVlZCB0byB2YWxpZGF0ZQotICAgICAgQ29sbGVjdGlvbiBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gYmluZGluZ3MgPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkudmFsdWVzKCk7Ci0gICAgICBDb2xsZWN0aW9uIHBvcnRUeXBlcyA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCk7Ci0gICAgICBDb2xsZWN0aW9uIG1lc3NhZ2VzID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpOwotCi0gICAgICBXU0RMQW5hbHl6ZXIgd3NkbEFuYWx5emVyOwotCSAgaWYod2l0aEF0dGFjaG1lbnRzKQotCSAgewotCSAgCVdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0gICAJICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCh3c2lMZXZlbCk7Ci0JICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoV1NJVGVzdFRvb2xzUHJvcGVydGllcy5BUF9BU1NFUlRJT05fRklMRSk7Ci0JICAgIHdzZGxBbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIodXJpLCBwcmVmZXJlbmNlcyk7Ci0JICB9Ci0JICBlbHNlIGlmKHdpdGhCYXNpYykKLQkgIHsKLQkgIAlXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotCQlwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwod3NpTGV2ZWwpOwkKLQkgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEUpOwotCSAgICB3c2RsQW5hbHl6ZXIgPSBuZXcgV1NETEFuYWx5emVyKHVyaSwgcHJlZmVyZW5jZXMpOwotCSAgfQotCSAgZWxzZSBpZih3c2lQcmVmZXJlbmNlICE9IG51bGwpCi0JICB7Ci0JCXdzZGxBbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIodXJpLCB3c2lQcmVmZXJlbmNlKTsKLQkgIH0KLQkgIGVsc2UgewotCQkvLyBkZWZhdWx0IHByZWZlcmVuY2Ugc2V0dGluZwotCSAgCXdzZGxBbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIodXJpKTsKLQkgIH0KLQotCSAgLy8gVGhlIFdTLUkgY29uZm9ybWFuY2UgdG9vbHMgcmVxdWlyZSB0aGF0IGVhY2ggc2VydmljZSBiZSBhbmFseXplZCBzZXBhcmF0ZWx5LgotCSAgLy8gR2V0IGFsbCB0aGUgc2VydmljZXMgYW5kIGFuYWx5emUgdGhlbS4KLQkgIGlmIChzZXJ2aWNlcyAhPSBudWxsICYmICFzZXJ2aWNlcy5pc0VtcHR5KCkpCi0JICB7Ci0JICAgIEl0ZXJhdG9yIHNlcnZpY2VJdGVyYXRvciA9IHNlcnZpY2VzLml0ZXJhdG9yKCk7Ci0KLQkgICAgd2hpbGUgKHNlcnZpY2VJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2VydmljZUl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAgIFN0cmluZyBzZXJ2aWNlbmFtZSA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQotICAgICAgICAgIENvbGxlY3Rpb24gcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCk7Ci0gICAgICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgIXBvcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgV1MtSSB0b29scyBtdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHBvcnQgd2l0aGluIGVhY2ggc2VydmljZS4KLSAgICAgICAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyYXRvciA9IHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAocG9ydEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3c2RsQW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChzZXJ2aWNlbmFtZSwgbmFtZXNwYWNlLCBwb3J0LmdldE5hbWUoKSwgV1NETEFuYWx5emVyLlBPUlQpOwotCQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoV1NJQW5hbHl6ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IEFkZCBjb2RlIHRvIGxvZyBlcnJvciAKLSAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgYmluZGluZyBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBiaW5kaW5nCi0gICAgICBlbHNlIGlmIChiaW5kaW5ncyAhPSBudWxsICYmICFiaW5kaW5ncy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdJdGVyYXRvciA9IGJpbmRpbmdzLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgd2hpbGUgKGJpbmRpbmdJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgYmluZGluZ0l0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAgIFN0cmluZyBiaW5kaW5nbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsQW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIGJpbmRpbmduYW1lLCBXU0RMQW5hbHl6ZXIuQklORElORyk7Ci0JCQloYXNBbmFseXplckNvbmZpZyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IEFkZCBjb2RlIHRvIGxvZyBlcnJvciAKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIHBvcnRUeXBlIGxldmVsIC0gY2hlY2sgZm9yIGV2ZXJ5IHBvcnRUeXBlCi0gICAgICBlbHNlIGlmIChwb3J0VHlwZXMgIT0gbnVsbCAmJiAhcG9ydFR5cGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgcG9ydFR5cGVJdGVyYXRvciA9IHBvcnRUeXBlcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAocG9ydFR5cGVJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgcG9ydFR5cGVJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIHBvcnRUeXBlbmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbEFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBwb3J0VHlwZW5hbWUsIFdTRExBbmFseXplci5QT1JUVFlQRSk7Ci0JCQloYXNBbmFseXplckNvbmZpZyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IEFkZCBjb2RlIHRvIGxvZyBlcnJvciAKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIG1lc3NhZ2UgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgbWVzc2FnZQotICAgICAgZWxzZSBpZiAobWVzc2FnZXMgIT0gbnVsbCAmJiAhbWVzc2FnZXMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXRlcmF0b3IgPSBtZXNzYWdlcy5pdGVyYXRvcigpOwotCi0gICAgICAgIHdoaWxlIChtZXNzYWdlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NhZ2VJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2VuYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KG51bGwsIG5hbWVzcGFjZSwgbWVzc2FnZW5hbWUsIFdTRExBbmFseXplci5NRVNTQUdFKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gb25seSBydW4gdGhlIGFuYWx5emVyIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBjaGVjawotCQlpZihoYXNBbmFseXplckNvbmZpZykKLQkJewotCQkgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCQkgIHdzZGxBbmFseXplci52YWxpZGF0ZUNvbmZvcm1hbmNlKCk7Ci0JCQkgIAotCQkgIC8vIElmIHRoZSBsZXZlbCBpcyBzdWdnZXN0IGFsbCBlcnJvcnMgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIHdhcm5pbmdzLgotCQkgIGlmKHdzZGxBbmFseXplci5nZXRXU0lQcmVmZXJlbmNlcygpLmdldENvbXBsaWFuY2VMZXZlbCgpLmVxdWFscyhXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSSkpCi0JCSAgewotCQkgICAgYWRkV2FybmluZ3Mod3NkbEFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLCB2YWxJbmZvKTsKLQkJICB9Ci0JCSAgZWxzZQotCQkgIHsKLQkJICAgIGFkZEVycm9ycyh3c2RsQW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIHZhbEluZm8pOwotCQkgIH0KLQkJICBhZGRXYXJuaW5ncyh3c2RsQW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKSwgdmFsSW5mbyk7Ci0JCX0KLSAgICAgIH0KLQkgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBUT0RPOiBBZGQgY29kZSB0byBsb2cgZXJyb3IgCi0JICAgIHZhbEluZm8uYWRkV2FybmluZyhXU0lDb25zdGFudHMuV1NJX1BSRUZJWCArICJBIHByb2JsZW0gb2NjdXJlZCB3aGlsZSBydW5uaW5nIHRoZSBXUy1JIFdTREwgY29uZm9ybWFuY2UgY2hlY2s6ICIgKyBlLCAxLCAwLCB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0JICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBlcnJvciBtZXNzYWdlcyB0byB0aGUgdmFsaWRhdGlvbmNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcGFyYW0gZXJyb3JzIFRoZSBsaXN0IG9mIGVycm9ycyB0byBhZGQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEVycm9ycyhMaXN0IGVycm9ycywgSVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICByZXBvcnRQcm9ibGVtcyhlcnJvcnMsIHZhbEluZm8sIEVSUk9SKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgdmFsaWRhdGlvbmNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcGFyYW0gd2FybmluZ3MgVGhlIGxpc3Qgb2Ygd2FybmluZ3MgdG8gYWRkLgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRXYXJuaW5ncyhMaXN0IHdhcm5pbmdzLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIHJlcG9ydFByb2JsZW1zKHdhcm5pbmdzLCB2YWxJbmZvLCBXQVJOSU5HKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXBvcnQgdGhlIHByb2JsZW1zIHNwZWNpZmllZCBmb3IgdGhlIGdpdmVuIHR5cGUgdG8gdGhlIHZhbGlkYXRpb25jb250cm9sbGVyLgotICAgKiAKLSAgICogQHBhcmFtIHByb2JsZW1zIFRoZSBwcm9ibGVtcyB0byByZXBvcnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBvYmplY3QgdG8gcmVwb3J0IHRoZSBwcm9ibGVtcyB0by4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgbWVzc2FnZXMgdG8gYWRkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVwb3J0UHJvYmxlbXMoTGlzdCBwcm9ibGVtcywgSVZhbGlkYXRpb25JbmZvIHZhbEluZm8sIGludCB0eXBlKQotICB7Ci0gICAgLy8gaWYgdGhlcmUgd2VyZSBubyBwcm9ibGVtcyBqdXN0IHJldHVybgotICAgIGlmIChwcm9ibGVtcyA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgCi0gICAgSXRlcmF0b3IgcHJvYmxlbXNJdGVyYXRvciA9IHByb2JsZW1zLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHByb2JsZW1zSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEFzc2VydGlvbkVycm9yIGFzc2VydGlvbmVycm9yID0gKEFzc2VydGlvbkVycm9yKSBwcm9ibGVtc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmICh0eXBlID09IEVSUk9SKQotICAgICAgewotCQl3c2lWYWxpZCA9IGZhbHNlOwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAJCVdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIigiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0QXNzZXJ0aW9uSUQoKSsgIikgIiArIGFzc2VydGlvbmVycm9yLmdldEVycm9yTWVzc2FnZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldExpbmUoKSwKLSAgICAgICAgICBhc3NlcnRpb25lcnJvci5nZXRDb2x1bW4oKSwKLSAgICAgICAgICB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gV0FSTklORykKLSAgICAgIHsKLSAgICAgICAgdmFsSW5mby5hZGRXYXJuaW5nKAotICAgICAgICAJCVdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIigiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0QXNzZXJ0aW9uSUQoKSsgIikgIiArIGFzc2VydGlvbmVycm9yLmdldEVycm9yTWVzc2FnZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldExpbmUoKSwKLSAgICAgICAgICBhc3NlcnRpb25lcnJvci5nZXRDb2x1bW4oKSwKLSAgICAgICAgICB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5jb250cm9sbGVyLklXU0RMVmFsaWRhdG9yI2lzVmFsaWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gd3NpVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZSByYikgewotCS8vIE5vdCB1c2VkLgotCQotICB9Ci0gIAotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy93c2l2YWxpZGF0ZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy93c2l2YWxpZGF0ZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTkwNmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvd3NpdmFsaWRhdGUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgLyoqCi0jICAqIDxjb3B5cmlnaHQ+Ci0jICAqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSMgICogCi0jICAqIENvbnRyaWJ1dG9yczogCi0jICAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqCi0jICAqIDwvY29weXJpZ2h0PgotIyAgKi8KLQotX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJID0gVW5hYmxlIHRvIHZhbGlkYXRlIFdTLUkgY29uZm9ybWFuY2UuICBBbiBlcnJvciBvY2N1cmVkIHJlYWRpbmcgdGhlIFdTREwgZG9jdW1lbnQgezB9LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0NTc5YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGZlYWJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliYThiOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYXhpc2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotCi08IS0tV2ViU2VydmljZUF4aXNQcm94eVBhZ2UuamF2YS0tPgotCi08Y29udGV4dCBpZD0iUFdKQjAwMDEiPgotPCEtLVdTREwgdG8gSmF2YSBCaW5kaW5ncyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHdpbGwgYmUgY3JlYXRlZC4gVGhlIEphdmEgYmVhbiBjbGllbnQgcHJveHkgdGhhdCBpcyBnZW5lcmF0ZWQgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdKQjAwMDMiPgotPCEtLUZvbGRlciBmaWVsZCBvZiB0aGUgV1NETCB0byBKYXZhIEJpbmRpbmdzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHByb2plY3QgYW5kIGZvbGRlciBpbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHdpbGwgYmUgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdKQjAwMDkiPgotPCEtLUluZGljYXRlcyB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgcHJveHkgb3Igbm90LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IEphdmEgYmVhbiBjbGllbnQgcHJveHkgdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0aGF0IGlzIGdlbmVyYXRlZCBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAxNiI+Ci08IS0tU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gY3VzdG9taXplIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc01hcHBpbmdzUGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQV0pNMDAwMSI+Ci08IS0tV1NETCB0byBKYXZhIE1hcHBpbmdzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYW5lbCB0byBhZGQgY3VzdG9taXplZCBwYWNrYWdlIHRvIG5hbWVzcGFjZSBtYXBwaW5ncy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwMSI+Ci08IS0tQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSB3aXphcmRzIHdoZW4gZ2VuZXJhdGluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDIiPgotPCEtLUdlbmVyYXRlIGNvZGUgZm9yIGFsbCBlbGVtZW50cy0tPgotPGRlc2NyaXB0aW9uPkJ5IGRlZmF1bHQsIFdTREwySmF2YSBvbmx5IGdlbmVyYXRlcyBjb2RlIGZvciB0aG9zZSBlbGVtZW50cyBpbiB0aGUgV1NETCBmaWxlIHRoYXQgYXJlIHJlZmVyZW5jZWQuIFNlbGVjdGluZyB0aGlzIGNoZWNrYm94IHdpbGwgZ2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBzY29wZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgcmVmZXJlbmNlZC4gQnkgZGVmYXVsdCwgdGhlIHNjb3BlIGlzIGFsbCBXU0RMIGZpbGVzOyBpZiBnZW5lcmF0ZUltcG9ydHMoZmFsc2UpLCB0aGVuIHRoZSBzY29wZSBpcyBvbmx5IHRoZSBpbW1lZGlhdGUgV1NETCBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwMyI+Ci08IS0tRW1pdHMgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGFkYXRhLS0+Ci08ZGVzY3JpcHRpb24+SWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiBXU0RMMkphdmEgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBoZWxwZXIgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIGl0IGluIHRoZSBza2VsZXRvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDQiPgotPCEtLVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlcy0tPgotPGRlc2NyaXB0aW9uPklmIHlvdSB3b3VsZCByYXRoZXIgYSBzcGVjaWZpYyBKYXZhQmVhbiBjbGFzcyAoQXJyYXlPZlN0cmluZykgYmUgZ2VuZXJhdGVkIGZvciB0aGVzZSB0eXBlcyBvZiBzY2hlbWFzLCBzZWxlY3QgdGhpcyBvcHRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDA1Ij4KLTwhLS1BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGluZGljYXRlcyBob3cgdG8gZGVwbG95IHRoZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24uIAotQXBwbGljYXRpb24gdXNlcyBvbmUgaW5zdGFuY2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhbGwgcmVxdWVzdHMuIAotUmVxdWVzdCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCByZXF1ZXN0LiAKLVNlc3Npb24gY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggc2Vzc2lvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDYiPgotPCEtLVRpbWVvdXQtLT4KLTxkZXNjcmlwdGlvbj5UaGUgZGVmYXVsdCBpcyA0NSBzZWNvbmRzLiBVc2UgLTEgdG8gZGlzYWJsZSB0aGUgdGltZW91dC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDciPgotPCEtLUxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MtLT4KLTxkZXNjcmlwdGlvbj5JZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gZXhwb3J0IGludG8gdGhlIFdTREwgZmlsZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDgiPgotPCEtLUxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgd2l6YXJkcyB3aGVuIGdlbmVyYXRpbmcgQXhpcyBXZWIgc2VydmljZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDA5Ij4KLTwhLS1Mb29rIGZvciBhbGxvd2VkIG1ldGhvZHMgaW4gaW5oZXJpdGVkIGNsYXNzLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHdpemFyZHMgd2hlbiBnZW5lcmF0aW5nIEF4aXMgV2ViIHNlcnZpY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAxMCI+Ci08IS0tdmFsaWRhdGUgYWdhaW5zdCBKQVhSUEMtLT4KLTxkZXNjcmlwdGlvbj5JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUgdHlwZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNhdGlzZmllcyBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPC9jb250ZXh0cz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwOTk3OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYXhpc2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotCi08IS0tV2ViU2VydmljZUF4aXNCZWFuQ29uZmlnUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUEJDRjAwMDEiPgotPCEtLUJlYW4gSWRlbnRpdHkgUGFnZS0tPgotPGRlc2NyaXB0aW9uPk9uIHRoaXMgcGFnZSB5b3UgY2FuIHNlbGVjdCB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB0aGUgbWV0aG9kcyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIFdlYiBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gc2VsZWN0IHRoZSBlbmNvZGluZyBzdHlsZS4gUlBDL0VuY29kZWQgaXMgdGhlIHJlY29tbWVuZGVkIGVuY29kaW5nIHN0eWxlIGZvciB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGlzIGVuY29kaW5nIG1ldGhvZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBCQ0YwMDA2Ij4KLTwhLS1XU0RMIEZvbGRlciBmaWVsZCBpbiB0aGUgQmVhbiBDb25maWcgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgZmllbGQgbGlzdHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGZpbGUgYmVpbmcgZ2VuZXJhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDRjAwMDciPgotPCEtLVdTREwgRmlsZSBmaWVsZCBvZiB0aGUgQmVhbiBDb25maWcgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgZmllbGQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkLiBBY2NlcHQgdGhlIGRlZmF1bHQgb3IgZW50ZXIgYSBuZXcgbmFtZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEJDRjAwMTYiPgotPCEtLVNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGN1c3RvbWl6ZSB0aGUgbWFwcGluZ3MgYmV0d2VlbiBwYWNrYWdlcyBhbmQgbmFtZXNwYWNlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEJNRTAwMDIiPgotPCEtLU1ldGhvZHMgdHJlZSBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgZnJvbSB0aGUgYXZhaWxhYmxlIEphdmEgYmVhbiBtZXRob2RzIHdoaWNoIG9uZXMgdG8gaW5jbHVkZSBpbiB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJNRTAwMTAiPgotPCEtLVNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgYnV0dG9uIHRvIGluY2x1ZGUgYWxsIGxpc3RlZCBtZXRob2RzIGluIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQk1FMDAxMSI+Ci08IS0tRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIGJ1dHRvbiB0byByZW1vdmUgYWxsIGxpc3RlZCBtZXRob2RzIGZyb20geW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLQotPCEtLVdlYlNlcnZpY2VTa2VsZXRvbkF4aXNDb25maWdQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBCU0MwMDAxIj4KLTwhLS1Ta2VsZXRvbiBDb25maWcgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc3BlY2lmeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSmF2YSBiZWFuIHNrZWxldG9uIGJlaW5nIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQlNDMDAwNCI+Ci08IS0tU2tlbGV0b24gRm9sZGVyIGZpZWxkIG9mIHRoZSBTa2VsZXRvbiBDb25maWcgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgSmF2YSBiZWFuIHNrZWxldG9uIHdpbGwgYmUgY3JlYXRlZCwgb3IgYWNjZXB0IHRoZSBkZWZhdWx0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJTQzAwMTYiPgotPCEtLVNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGN1c3RvbWl6ZSB0aGUgbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzIGFuZCBwYWNrYWdlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjMWE1Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYXhpc2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgYXhpc2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk1MGJhZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wCi1wbHVnaW5OYW1lICAgICA9IFdlYiBzZXJ2aWNlcyBBeGlzIGNvbnRleHQgc2Vuc2l0aXZlIGhlbHAKLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTNkNmM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPgotCQk8Y29udGV4dHMgZmlsZT0iYXhpc2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiLz4KLQkJPGNvbnRleHRzIGZpbGU9ImF4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIi8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMTE5M2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1YWE5OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWMwMGQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wMS0wOSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgZm9yIG5ldyBESVRBLU9UIHZlcnNpb24KLQkyMDA4LTA1LTA1IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCB0byBhZGQgZ2VuZXJhdGlvbiBvZiBwcmUtYnVpbHQgaGVscCBpbmRleC4gCi0JLSBNdXN0IGRlbGV0ZSAvaW5kZXggZm9sZGVyIGJlZm9yZSBydW5uaW5nIGJ1aWxkCQotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIzLjAuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3NheGlzYnVpbGRfdG9jLmRpdGFtYXAiIC8+ICAgCi0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249IiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLmluZGV4IiBkZXNjcmlwdGlvbj0iQnVpbGRzIHNlYXJjaCBpbmRleCBmb3IgdGhlIHBsdWctaW4iIGlmPSJlY2xpcHNlLnJ1bm5pbmciPgotCSAgICAgPGhlbHAuYnVpbGRIZWxwSW5kZXggbWFuaWZlc3Q9InBsdWdpbi54bWwiIGRlc3RpbmF0aW9uPSIuIi8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkZThkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4wLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE0MTVlOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdzYXhpc2J1aWxkX3RvYy54bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBjb25jZXB0cy8qLmh0bSosXAotICAgICAgICAgICAgICAgdGFza3MvKi5odG0qLFwKLSAgICAgICAgICAgICAgIGluZGV4LyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgdG9waWNzLyxcCi0gICAgICAgICAgICAgICB3c2F4aXNfcmVsdGFibGVfdG9jLnhtbAotc3JjLmluY2x1ZGVzID0gKi5tYXBsaXN0LFwKLSAgICAgICAgICAgICAgICouZGl0YW1hcCxcCi0gICAgICAgICAgICAgICBjb25jZXB0cy8qLmRpdGEsXAotICAgICAgICAgICAgICAgdGFza3MvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRvcGljcy8sXAotICAgICAgICAgICAgICAgd3NheGlzX3JlbHRhYmxlX3RvYy54bWwsXAotICAgICAgICAgICAgICAgd3NheGlzYnVpbGRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBpbmRleC8KLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sLFwKLSAgICAgICAgICAgICAgIHRvcGljcy8qLmRpdGEKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvXzUuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9fNS5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzI4YzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9fNS5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNDcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBhN2I1ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTU6Mzg6MjggRURUIDIwMDgNCi1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcj1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlclxuMS4xLjAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTFjODIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTU6Mzg6MjggRURUIDIwMDgNCi1sdWNlbmU9MS45LjEudjIwMDgwMzA2MTgxMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4zLjEwMC52MjAwODA0MjU/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYjU3Y2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE1OjM4OjI4IEVEVCAyMDA4DQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy9jYXhpc3RvdmVyLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0MmJkMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NlMzY4MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBmaWxlPSJ3c2F4aXNidWlsZF90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQzODIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3NheGlzYnVpbGRfdG9jLmRpdGFtYXAiLz4KLSAgPC9uYXY+Ci0gIDxsaW5rPgotICAgIDxtYXAgZmlsZT0id3NheGlzYnVpbGRfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyODcyYTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jYXhpc3RvdmVyLmh0bWwjYXhpc292ZXJ2aWV3IiB0aXRsZT0iQ3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IkphdmEgYmVhbnMiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R3c2JlYW5hLmh0bWwjdHdzYmVhbmEiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9InNrZWxldG9uIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90c2tsd3NkbGEuaHRtbCN0c2tsd3NkbGEiIHRpdGxlPSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY2xpZW50cyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJBcGFjaGUgVG9tY2F0Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCNjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiB0aXRsZT0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL2NheGlzdG92ZXIuaHRtbCNheGlzb3ZlcnZpZXciIHRpdGxlPSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdzYmVhbmEuaHRtbCN0d3NiZWFuYSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ic2tlbGV0b24gV2ViIHNlcnZpY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90c2tsd3NkbGEuaHRtbCN0c2tsd3NkbGEiIHRpdGxlPSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2UgY2xpZW50cyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwjY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgdGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJBcGFjaGUgVG9tY2F0Ij4KLSAgICA8ZW50cnkga2V5d29yZD0ic2VydmVycyBmb3IgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCNjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiB0aXRsZT0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLTwvaW5kZXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NmZiODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUiAKLSMgTkxTX0VOQ09ESU5HPVVURi04IAotCi1wbHVnaW5OYW1lID0gQXhpcyBXZWIgc2VydmljZXMgZG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2UzNjgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBmaWxlPSJ3c2F4aXNidWlsZF90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvY2F4aXN0b3Zlci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvY2F4aXN0b3Zlci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjcxODNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiINCi0gImNvbmNlcHQuZHRkIj4NCi08Y29uY2VwdCBpZD0iYXhpc292ZXJ2aWV3IiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPg0KLTxzaG9ydGRlc2M+VGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvcg0KLXRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0iY2F4aXN0b3ZlcnwxfEF4aXNydW50aW1lZW52aXJvbm1lbnRXZWJzZXJ2aWNlc292ZXJ2aWV3Ig0KLXN0YXR1cz0idW5jaGFuZ2VkIj5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtIGtleXJlZj0iY2F4aXN0b3ZlcnwyfFdlYnNlcnZpY2VzQXhpc3J1bnRpbWVlbnZpcm9ubWVudCIgc3RhdHVzPSJ1bmNoYW5nZWQiPldlYg0KLXNlcnZpY2VzPGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5BcGFjaGUgQXhpczEgT3ZlcnZpZXc8L3RpdGxlPjxwPkF4aXMgaXMgdGhlIHRoaXJkIGdlbmVyYXRpb24NCi1vZiB0aGUgQXBhY2hlIFNPQVAgaW1wbGVtZW50YXRpb24uIEl0IGV2b2x2ZWQgZnJvbSBBcGFjaGUgU09BUCB0byBtYWtlIHRoZQ0KLVNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQNCi10aGUgdXBjb21pbmcgWE1MIFByb3RvY29sIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIG9wZW4tc291cmNlIGVmZm9ydC4gQXhpcw0KLWlzIGJhc2VkIG9uIEpTUiAxMDEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQVBJcyBmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93bg0KLWFzIEpBWC1SUEMpLiBKU1IgMTAxIHByb3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSB0byBhbnkgWE1MLWJhc2VkIFJQQyBtZWNoYW5pc20sDQotaW5jbHVkaW5nIFNPQVAuPC9wPjxwPldlYiBzZXJ2aWNlcyBhcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQNCi10byBwcm9jZXNzIHRoZSBpbmNvbWluZyBtZXNzYWdlLCBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIG1lc3NhZ2UgaGVhZGVycywNCi1hbmQgcGF5bG9hZHMsIGFzIHdlbGwgYXMgY29uZm9ybWluZyB0byB0aGUgcGFydGljdWxhciBSUEMgc2VtYW50aWNzLiA8L3A+PC9zZWN0aW9uPg0KLTwvY29uYm9keT4NCi08cmVsYXRlZC1saW5rcz4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5KQVgtUlBDPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE2YmE3Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3c2JlYW5hLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90c2tsd3NkbGEuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RzYW1wYXBwYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImF4aXNvdmVydmlldyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYXhpc292ZXJ2aWV3Ij48YSBuYW1lPSJheGlzb3ZlcnZpZXciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IKLXRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkFwYWNoZSBBeGlzMSBPdmVydmlldzwvaDQ+PHA+QXhpcyBpcyB0aGUgdGhpcmQgZ2VuZXJhdGlvbgotb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLiBJdCBldm9sdmVkIGZyb20gQXBhY2hlIFNPQVAgdG8gbWFrZSB0aGUKLVNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQKLXRoZSB1cGNvbWluZyBYTUwgUHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0Mgb3Blbi1zb3VyY2UgZWZmb3J0LiBBeGlzCi1pcyBiYXNlZCBvbiBKU1IgMTAxIEphdmHihKIgQVBJcyBmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93bgotYXMgSkFYLVJQQykuIEpTUiAxMDEgcHJvdmlkZXMgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIGFueSBYTUwtYmFzZWQgUlBDIG1lY2hhbmlzbSwKLWluY2x1ZGluZyBTT0FQLjwvcD4KLTxwPldlYiBzZXJ2aWNlcyBhcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQKLXRvIHByb2Nlc3MgdGhlIGluY29taW5nIG1lc3NhZ2UsIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBoZWFkZXJzLAotYW5kIHBheWxvYWRzLCBhcyB3ZWxsIGFzIGNvbmZvcm1pbmcgdG8gdGhlIHBhcnRpY3VsYXIgUlBDIHNlbWFudGljcy4gPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3R3c2JlYW5hLmh0bWwiIHRpdGxlPSJUaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLCBjb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuIE9uY2UgeW91ciBXZWIgc2VydmljZSBpcyBkZXBsb3llZCwgdGhlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIHRoZSBjbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZSBjb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLiI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3Rza2x3c2RsYS5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIHNrZWxldG9uIGJlYW4gZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgb3BlcmF0aW9ucyBkZXNjcmliZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQuIFdoZW4gdGhlIGJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlIGJ5IGVkaXRpbmcgdGhlIGJlYW4uIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90c2FtcGFwcGEuaHRtbCIgdGl0bGU9IlRoZSBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgYSBKYXZhIGJlYW4gcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgYSBwcm94eSBmaWxlLiI+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sIj5KQVgtUlBDPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2FtcGFwcGEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3RzYW1wYXBwYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU3ODgyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3RzYW1wYXBwYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idHNhbXBhcHBhIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5HZW5lcmF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbg0KLWZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC90aXRsZT4NCi08dGl0bGVhbHRzPg0KLTxzZWFyY2h0aXRsZT5HZW5lcmF0aW5nIGEgSmF2YSBjbGllbnQgcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uIGZyb20NCi1hIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudDwvc2VhcmNodGl0bGU+DQotPC90aXRsZWFsdHM+DQotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiDQotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbg0KLXByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdw0KLXRvIGNvZGUgYSBwcm94eSBmaWxlLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0idHNhbXBhcHBhfDF8QXhpc3J1bnRpbWVlbnZpcm9ubWVudFdlYnNlcnZpY2VjbGllbnRzIg0KLXN0YXR1cz0idW5jaGFuZ2VkIj5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y2xpZW50czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0ga2V5cmVmPSJ0c2FtcGFwcGF8MnxXZWJzZXJ2aWNlc0F4aXNydW50aW1lZW52aXJvbm1lbnRXZWJzZXJ2aWNlY2xpZW50cyINCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYg0KLXNlcnZpY2UgY2xpZW50czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHk+DQotPHByZXJlcT48cD5QcmVyZXF1aXNpdGVzOjwvcD48b2w+DQotPGxpIGNvbnJlZj0idHdzYmVhbmEuZGl0YSN0d3NiZWFuYS9jcmVhdGV0b21jYXRsaW5rIj48L2xpPg0KLTxsaT5EaXNjb3ZlciBhbmQgaW1wb3J0IGEgV1NETCBkb2N1bWVudCBpbnRvIHRoZSBXZWIgcHJvamVjdC4gWW91IGNhbiBvbmx5DQotdXNlIGEgV1NETCBmaWxlIHRoYXQgY29udGFpbnMgYSBzZXJ2aWNlIGVsZW1lbnQuPC9saT4NCi08L29sPjwvcHJlcmVxPg0KLTxjb250ZXh0PlRvIGdlbmVyYXRlIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbg0KLWZyb20gYSBkaXNjb3ZlcmVkIFdTREwgZG9jdW1lbnQ6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSAoPHVpY29udHJvbD5XaW5kb3cgPiBPcGVuIFBlcnNwZWN0aXZlDQotPiBKYXZhIEVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgTmF2aWdhdG9yIHZpZXcsIHNlbGVjdCB0aGUgV2ViIHByb2plY3QgaW4gd2hpY2ggeW91IHdhbnQNCi10byBnZW5lcmF0ZSBhIHNhbXBsZSBhcHBsaWNhdGlvbi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaWxlID4gTmV3ID4gT3RoZXI8L3VpY29udHJvbD4uIFNlbGVjdCAgPHVpY29udHJvbD5XZWINCi1TZXJ2aWNlczwvdWljb250cm9sPiBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSB2YXJpb3VzIFdlYiBzZXJ2aWNlIHdpemFyZHMuDQotU2VsZWN0IHRoZSAgPHVpY29udHJvbD5XZWIgU2VydmljZSBDbGllbnQ8L3VpY29udHJvbD4gd2l6YXJkLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiA8L2NtZD4NCi08c3Vic3RlcHM+DQotPHN1YnN0ZXA+PGNtZD5FbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQNCi10byBnZW5lcmF0ZSB0aGUgY2xpZW50LjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0byBiZSBnZW5lcmF0ZWQ8L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudA0KLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9jbWQ+PGluZm8+PHVsPg0KLTxsaT5EZXZlbG9wOiB0aGlzIHdpbGwgZGV2ZWxvcCB0aGUgV1NETCBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCi1XZWIgc2VydmljZS4gVGhpcyBpbmNsdWRlcyBzdWNoIHRhc2tzIGFzIGNyZWF0aW5nIHRoZSBtb2R1bGVzIHdoaWNoIHdpbGwgY29udGFpbg0KLXRoZSBnZW5lcmF0ZWQgY29kZSBhbmQgSmF2YSBmaWxlcywgYXMgd2VsbCBhcyBjb3B5aW5nIHRoZSBBeGlzIEpBUnMuLjwvbGk+DQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudA0KLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPg0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4NCi08bGk+SW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgV2ViIG1vZHVsZSBhbmQgRUFScyBvbiB0aGUNCi10YXJnZXQgc2VydmVyLjwvbGk+DQotPGxpPlN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZA0KLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4NCi08bGk+VGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlLCBzdWNoDQotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+DQotPC91bD48L2luZm8+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UNCi13YW50IHRvIGRlcGxveSB5b3VyIGNsaWVudCB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQ0KLWEgZGlmZmVyZW50IHNlcnZlci48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91DQotd2FudCB0byBkZXBsb3kgeW91ciBjbGllbnQgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5DQotYSBkaWZmZXJlbnQgcnVudGltZS48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIGNsaWVudCBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0DQotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQNCi1FQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay48L2NtZD48aW5mbz5FbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZA0KLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQ0KLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2luZm8+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljDQotdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQNCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5DQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhIg0KLXNjb3BlPSJwZWVyIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L3hyZWY+PC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogVGhpcyBwYW5lbCBzaG93cyB0aGUgb3B0aW9ucyBmb3IgdGhlIHByb3h5Lg0KLUl0IGxpc3RzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb3h5IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5DQotY3JlYXRlIGN1c3RvbSBtYXBwaW5ncyBiZXR3ZWVuIG5hbWVzcGFjZXMgYW5kIHBhY2thZ2VzLjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFnZSwgeW91IGNhbiBlbnRlciB5b3VyIGN1c3RvbSBtYXBwaW5nIHBhaXJzIG9uIHRoaXMgcGFnZSBieQ0KLWNsaWNraW5nICA8dWljb250cm9sPkFkZDwvdWljb250cm9sPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxiPkltcG9ydDwvYj4gdG8NCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8c3lzdGVtb3V0cHV0Pi5wcm9wZXJ0aWVzPC9zeXN0ZW1vdXRwdXQ+IGZpbGUuDQotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxjb2RlcGg+PHZhcm5hbWU+bmFtZXNwYWNlPXBhY2thZ2U8L3Zhcm5hbWU+PC9jb2RlcGg+LjwvY21kPg0KLTxpbmZvPllvdSB3aWxsIG5lZWQgdG8gZXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzLg0KLSBGb3IgZXhhbXBsZSA8Y29kZXBoPmh0dHA6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+IHNob3VsZCBiZSA8Y29kZXBoPmh0dHBcOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvY29kZXBoPi4NCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcNCi10byBtYXAgPGNvZGVwaD5odHRwPC9jb2RlcGg+IHRvIDxjb2RlcGg+Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBUaGlzIHBhZ2UgZGlzcGxheXMgaWYgeW91IHNlbGVjdGVkDQotdG8gdGVzdCB5b3VyIGNsaWVudC4gU2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IHRoYXQgeW91IHdpbGwgdXNlIHRvIHRlc3QgdGhlDQotcHJveHksIGFuZCB0aGUgbWV0aG9kcyB0aGF0IHlvdSB3YW50IGluY2x1ZGVkIGluIHRoZSBwcm94eS4gTm90ZSB0aGF0IHRoZQ0KLVVuaXZlcnNhbCBUZXN0IENsaWVudCAoVVRDKSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBXZWIgc2VydmljZSBjbGllbnRzIGRlcGxveWVkDQotb24gPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXZWJTcGhlcmUiPldlYlNwaGVyZTwvdG0+IHNlcnZlcnMuPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0DQotdGhlIHByb3h5LCB0aGUgdGVzdCBjbGllbnQgd2lsbCBvcGVuIGluIGEgYnJvd3NlciB3aW5kb3cuPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdD48cD5UaGUgZ2VuZXJhdGVkIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlDQotY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMNCi1ob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS48L3A+PHA+T25jZSB5b3UgaGF2ZSBnZW5lcmF0ZWQgeW91ciA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQNCi1wcm94eSwgeW91IG1heSB0ZXN0IHRoZSBtZXRob2RzIG9mIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBwcm94eSB1c2luZw0KLVdlYiBTZXJ2aWNlcyBzYW1wbGUgSlNQcyBvciB0aGUgVW5pdmVyc2FsIHRlc3QgY2xpZW50LjwvcD48dWwgb3V0cHV0Y2xhc3M9IndzY2xpZW50dGVzdG9wdGlvbnMiPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OiA8dmFybmFtZT5wb3J0PC92YXJuYW1lPi8gPHZhcm5hbWU+V2ViUHJvamVjdDwvdmFybmFtZT5DbGllbnQvc2FtcGxlPGkNCi0+QmVhbk5hbWU8L2k+LyA8dmFybmFtZT5XZWJTZXJ2aWNlTmFtZTwvdmFybmFtZT4vVGVzdENsaWVudC5qc3A8L2NvZGVwaD4gWW91DQotY2FuIHVzZSB0aGlzIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBieSBzZWxlY3RpbmcgYSBtZXRob2QsDQotZW50ZXJpbmcgYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8dWljb250cm9sPkludm9rZTwvdWljb250cm9sPi4NCi1UaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwNCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQNCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8Yj5HbzwvYj4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPg0KLTwvdWw+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbg0KLWRldmVsb3BtZW50IGRvY3VtZW50YXRpb24uPC9wPjwvcmVzdWx0Pg0KLTwvdGFza2JvZHk+DQotPHJlbGF0ZWQtbGlua3M+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08L2xpbmtsaXN0Pg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3RzYW1wYXBwYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMGY3MGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YSBiZWFuIHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIGEgcHJveHkgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyBhIEphdmEgYmVhbiBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSBhIHByb3h5IGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIGNsaWVudHMsIFdlYiBzZXJ2aWNlIGNsaWVudHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgY2xpZW50cywgV2ViIHNlcnZpY2UgY2xpZW50cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNhbXBhcHBhIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tCi1hIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHNhbXBhcHBhIj48YSBuYW1lPSJ0c2FtcGFwcGEiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YeKEoiBiZWFuCi1wcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cKLXRvIGNvZGUgYSBwcm94eSBmaWxlLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHA+UHJlcmVxdWlzaXRlczo8L3A+Ci08b2w+Ci08bGk+SWYgeW91IGFyZSB1c2luZyB0aGUgQXBhY2hlIEpha2FydGEgVG9tY2F0IHNlcnZsZXQKLWNvbnRhaW5lciBhcyB5b3VyIHNlcnZlciwgeW91IG11c3QgaW5zdGFsbCBpdCwgY29uZmlndXJlIGFuIGluc3RhbmNlIG9mIGl0LAotYW5kIGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHRhcmdldGVkIHRvIGl0IGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSJ0dG9tY2F0c2Vydi5odG1sIj5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L2E+PC9saT4KLQotPGxpPkRpc2NvdmVyIGFuZCBpbXBvcnQgYSBXU0RMIGRvY3VtZW50IGludG8gdGhlIFdlYiBwcm9qZWN0LiBZb3UgY2FuIG9ubHkKLXVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gZ2VuZXJhdGUgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBkaXNjb3ZlcmVkIFdTREwgZG9jdW1lbnQ6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U3dpdGNoIHRvIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlICg8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBPcGVuIFBlcnNwZWN0aXZlCi0mZ3Q7IEphdmEgRUU8L3NwYW4+KS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgTmF2aWdhdG9yIHZpZXcsIHNlbGVjdCB0aGUgV2ViIHByb2plY3QgaW4gd2hpY2ggeW91IHdhbnQKLXRvIGdlbmVyYXRlIGEgc2FtcGxlIGFwcGxpY2F0aW9uLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlICZndDsgTmV3ICZndDsgT3RoZXI8L3NwYW4+LiBTZWxlY3QgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYgotU2VydmljZXM8L3NwYW4+IGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgV2ViIHNlcnZpY2Ugd2l6YXJkcy4KLVNlbGVjdCB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlIENsaWVudDwvc3Bhbj4gd2l6YXJkLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZXMgcGFnZTogPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5FbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQKLXRvIGdlbmVyYXRlIHRoZSBjbGllbnQuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSB0eXBlIG9mIHByb3h5IHRvIGJlIGdlbmVyYXRlZDwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvc3Bhbj4gPHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSBhbmQgSmF2YSBmaWxlcywgYXMgd2VsbCBhcyBjb3B5aW5nIHRoZSBBeGlzIEpBUnMuLjwvbGk+Ci0KLTxsaT5Bc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQKLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPgotCi08bGk+RGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5JbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBXZWIgbW9kdWxlIGFuZCBFQVJzIG9uIHRoZQotdGFyZ2V0IHNlcnZlci48L2xpPgotCi08bGk+U3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkCi1vbiBpdC4gVGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+Ci0KLTxsaT5UZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIHNlcnZpY2UsIHN1Y2gKLWFzIHVzaW5nIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBvciBzYW1wbGUgSlNQcy48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBzZXJ2ZXI6IHRoZSBkZWZhdWx0IHNlcnZlciBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBjbGllbnQgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHNlcnZlci48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIGNsaWVudCB0byBhIGRpZmZlcmVudCBydW50aW1lIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHJ1bnRpbWUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBjbGllbnQgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLjwvc3Bhbj4gRW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQKLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQotc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2E+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogVGhpcyBwYW5lbCBzaG93cyB0aGUgb3B0aW9ucyBmb3IgdGhlIHByb3h5LgotSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkgd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB5b3UgY2FuIG9wdGlvbmFsbHkKLWNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzIGFuZCBwYWNrYWdlcy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlPC9zcGFuPiBvbgotdGhlIHByZXZpb3VzIHBhZ2UsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhZ2UgYnkKLWNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPHN0cm9uZz5JbXBvcnQ8L3N0cm9uZz4gdG8KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDx0dCBjbGFzcz0ic3lzb3V0Ij4ucHJvcGVydGllczwvdHQ+IGZpbGUuCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+PHZhciBjbGFzcz0idmFybmFtZSI+bmFtZXNwYWNlPXBhY2thZ2U8L3Zhcj48L3NhbXA+Ljwvc3Bhbj4KLSBZb3Ugd2lsbCBuZWVkIHRvIGVzY2FwZSBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcHJvcGVydGllcyBmaWxlcy4KLSBGb3IgZXhhbXBsZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvc2FtcD4gc2hvdWxkIGJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHBcOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvc2FtcD4uCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcKLXRvIG1hcCA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwPC9zYW1wPiB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj4vL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+LgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBUaGlzIHBhZ2UgZGlzcGxheXMgaWYgeW91IHNlbGVjdGVkCi10byB0ZXN0IHlvdXIgY2xpZW50LiBTZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgdGhhdCB5b3Ugd2lsbCB1c2UgdG8gdGVzdCB0aGUKLXByb3h5LCBhbmQgdGhlIG1ldGhvZHMgdGhhdCB5b3Ugd2FudCBpbmNsdWRlZCBpbiB0aGUgcHJveHkuIE5vdGUgdGhhdCB0aGUKLVVuaXZlcnNhbCBUZXN0IENsaWVudCAoVVRDKSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBXZWIgc2VydmljZSBjbGllbnRzIGRlcGxveWVkCi1vbiBXZWJTcGhlcmU8c3VwPsKuPC9zdXA+IHNlcnZlcnMuPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi4gSWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdAotdGhlIHByb3h5LCB0aGUgdGVzdCBjbGllbnQgd2lsbCBvcGVuIGluIGEgYnJvd3NlciB3aW5kb3cuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBnZW5lcmF0ZWQgSmF2YSBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZQotY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMKLWhvdyB0byBjb2RlIHRoZSBwcm94eSBmaWxlLjwvcD4KLTxwPk9uY2UgeW91IGhhdmUgZ2VuZXJhdGVkIHlvdXIgSmF2YSBjbGllbnQKLXByb3h5LCB5b3UgbWF5IHRlc3QgdGhlIG1ldGhvZHMgb2YgdGhlIFdlYiBzZXJ2aWNlIHRocm91Z2ggdGhlIHByb3h5IHVzaW5nCi1XZWIgU2VydmljZXMgc2FtcGxlIEpTUHMgb3IgdGhlIFVuaXZlcnNhbCB0ZXN0IGNsaWVudC48L3A+Ci08dWwgY2xhc3M9IndzY2xpZW50dGVzdG9wdGlvbnMiPgotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eSB1c2luZyBXZWIgc2VydmljZSBKU1BzLAotdGhlIHByb3h5IGlzIGxhdW5jaGVkIGluIGEgV2ViIGJyb3dzZXIgYXQgdGhlIGZvbGxvd2luZyBVUkw6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly9sb2NhbGhvc3Q6IDx2YXIgY2xhc3M9InZhcm5hbWUiPnBvcnQ8L3Zhcj4vIDx2YXIgY2xhc3M9InZhcm5hbWUiPldlYlByb2plY3Q8L3Zhcj5DbGllbnQvc2FtcGxlPGVtPkJlYW5OYW1lPC9lbT4vIDx2YXIgY2xhc3M9InZhcm5hbWUiPldlYlNlcnZpY2VOYW1lPC92YXI+L1Rlc3RDbGllbnQuanNwPC9zYW1wPiBZb3UKLWNhbiB1c2UgdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLAotZW50ZXJpbmcgYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LgotVGhlIHJlc3VsdCBvZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPC91bD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgV2ViIHByb2plY3QsIHJlZmVyIHRvIHRoZSBXZWIgYXBwbGljYXRpb24KLWRldmVsb3BtZW50IGRvY3VtZW50YXRpb24uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NheGlzdG92ZXIuaHRtbCIgdGl0bGU9IlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IgdGhlIG9wZW4gQXBhY2hlIEF4aXMgcGxhdGZvcm0uIj5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIj5XU0RMIGRvY3VtZW50czwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllODUyYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICIuLi8uLi9kdGQvdGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0c2tsd3NkbGEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlDQotQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlDQotQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIHNrZWxldG9uIGJlYW4NCi1mcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMNCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQ0KLWJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlDQotYnkgZWRpdGluZyB0aGUgYmVhbi48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybSBrZXlyZWY9InRza2x3c2RsYXwxfEF4aXNydW50aW1lZW52aXJvbm1lbnRza2VsZXRvbldlYnNlcnZpY2VzIg0KLXN0YXR1cz0idW5jaGFuZ2VkIj5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+c2tlbGV0b248L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtIGtleXJlZj0idHNrbHdzZGxhfDJ8V2Vic2VydmljZXNBeGlzcnVudGltZWVudmlyb25tZW50c2tlbGV0b25XZWJzZXJ2aWNlcyINCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uDQotV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPjxwPlByZXJlcXVpc2l0ZXM6PC9wPjxvbD4NCi08bGkgY29ucmVmPSJ0d3NiZWFuYS5kaXRhI3R3c2JlYW5hL2NyZWF0ZXRvbWNhdGxpbmsiPjwvbGk+DQotPGxpPkNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4NCi1Zb3UgY2FuIG9ubHkgdXNlIGEgV1NETCBmaWxlIHRoYXQgY29udGFpbnMgYSBzZXJ2aWNlIGVsZW1lbnQuPC9saT4NCi08L29sPjwvcHJlcmVxPg0KLTxjb250ZXh0PlRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSAoPHVpY29udHJvbD5XaW5kb3cgPiBPcGVuIFBlcnNwZWN0aXZlDQotPiBKYXZhIEVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBjcmVhdGVkDQotb3IgaW1wb3J0ZWQgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHlvdXIgV2ViIHByb2plY3QuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmlsZSA+IE5ldyA+IE90aGVyPC91aWNvbnRyb2w+LiBTZWxlY3QgIDx1aWNvbnRyb2w+V2ViDQotU2VydmljZXM8L3VpY29udHJvbD4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLg0KLVNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+V2ViIFNlcnZpY2U8L3VpY29udHJvbD4gd2l6YXJkLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDx1aWNvbnRyb2w+VG9wIGRvd24gSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC91aWNvbnRyb2w+IGFzDQoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgc2VsZWN0IHRoZSBhcnRpZmFjdCBmcm9tIHdoaWNoIHRoZSBzZXJ2aWNlIHdpbGwNCi1iZSBjcmVhdGVkLjwvY21kPg0KLTxzdWJzdGVwcyBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRlc3RlcDR1bCI+DQotPHN1YnN0ZXA+PGNtZD48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZXMgU2tlbGV0b24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQmVhbiBDb25maWd1cmF0aW9uIHBhZ2U6IFNlbGVjdCB0aGUNCi1mb2xkZXIgd2hlcmUgdGhlIGdlbmVyYXRlZCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiB3aWxsIGJlIHN0b3JlZC4gSWYgeW91IHdhbnQgdG8gcmV2aWV3DQotb3IgZWRpdCB0aGUgbWFwcGluZ3MgYmV0d2VlbiBwYWNrYWdlcyBhbmQgbmFtZXNwYWNlcywgc2VsZWN0IHRoZSAgPHVpY29udHJvbD5EZWZpbmUNCi1jdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3VpY29udHJvbD4gY2hlY2sgYm94LiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsDQotYnkgY2xpY2tpbmcgIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPGI+SW1wb3J0PC9iPiB0bw0KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4NCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5uYW1lc3BhY2U9cGFja2FnZTwvdmFybmFtZT48L2NvZGVwaD4uPC9jbWQ+DQotPGluZm8+WW91IHdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMuDQotIEZvciBleGFtcGxlIDxjb2RlcGg+aHR0cDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L2NvZGVwaD4gc2hvdWxkIGJlIDxjb2RlcGg+aHR0cFw6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+Lg0KLSBPdGhlcndpc2UsIHRoZSBjb2xvbiAoOikgd291bGQgYmUgdHJlYXRlZCBhcyBkZWxpbWl0ZXIgcmVzdWx0aW5nIGluIHRyeWluZw0KLXRvIG1hcCA8Y29kZXBoPmh0dHA8L2NvZGVwaD4gdG8gPGNvZGVwaD4vL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L2NvZGVwaD4uPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLA0KLXNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSBmb3IgdGhlIGdlbmVyYXRlZCBXZWIgc2VydmljZS4gVGhpcyB3aWxsIG9wZW4gdGhlDQotV2ViIHNlcnZpY2UgaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8NCi10ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPHVpY29udHJvbD5HbzwvdWljb250cm9sPi4NCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogSWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwNCi10aGlzIHBhZ2Ugc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4gSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkNCi13aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHlvdSBjYW4gb3B0aW9uYWxseSBjcmVhdGUgY3VzdG9tIG1hcHBpbmdzIGJldHdlZW4gbmFtZXNwYWNlcw0KLWFuZCBwYWNrYWdlcy4gQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBVc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZm9sbG93aW5nDQotb3B0aW9uczogPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgdGVzdCBmYWNpbGl0eS4gWW91IGNhbiB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkNCi1pbiB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIsIG9yIHlvdSBjYW4gZ2VuZXJhdGUgYSBzYW1wbGUgV2ViIHNlcnZpY2UgSlNQLjwvY21kPg0KLTwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBwcm94eSB0aHJvdWdoIGEgSlNQLCB5b3UgY2FuIHNlbGVjdA0KLXRoZSBmb2xkZXIgd2hlcmUgdGhlIEpTUCB3aWxsIGJlIGxvY2F0ZWQsIGFuZCB5b3UgY2FuIHNlbGVjdCB0aGUgbWV0aG9kcyB0aGF0DQotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCAgPHVpY29udHJvbD5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3VpY29udHJvbD4gdG8gc3RhcnQgdGhlDQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byBwdWJsaXNoIHlvdXINCi1XZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHVzZSB0aGlzIHBhZ2UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXINCi1hbmQgc2VsZWN0IHRoZSBVRERJIHJlZ2lzdHJ5IHRvIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIGJlIHB1Ymxpc2hlZC4gQ2xpY2sNCi0gPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdCBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvYXhpc3dzY3JlYXRlcmVzdWx0Ij5BZnRlciB0aGUgV2ViIHNlcnZpY2UNCi1oYXMgYmVlbiBjcmVhdGVkLCB0aGUgZm9sbG93aW5nIG1heSBvY2N1ciBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgeW91IHNlbGVjdGVkOiA8dWw+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eSB1c2luZyBXZWIgc2VydmljZSBKU1BzLA0KLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiA8Y29kZXBoPmh0dHA6Ly9sb2NhbGhvc3Q6IDx2YXJuYW1lPnBvcnQ8L3Zhcm5hbWU+LyA8dmFybmFtZT5XZWJQcm9qZWN0PC92YXJuYW1lPkNsaWVudC9zYW1wbGU8aQ0KLT5CZWFuTmFtZTwvaT4vPHZhcm5hbWU+V2ViU2VydmljZU5hbWU8L3Zhcm5hbWU+L1Rlc3RDbGllbnQuanNwPC9jb2RlcGg+IFlvdQ0KLWNhbiB1c2UgdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLA0KLWVudGVyaW5nIGEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHVpY29udHJvbD5JbnZva2U8L3VpY29udHJvbD4uDQotVGhlIHJlc3VsdCBvZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsDQotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkDQotaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPGI+R288L2I+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UsIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXINCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93DQotdGhlIGluc3RydWN0aW9ucyBpbiA8dmFybmFtZT5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFybmFtZT4gdG8gY29tcGxldGUNCi10aGlzIHRhc2suPC9saT4NCi08L3VsPjwvcmVzdWx0Pg0KLTwvdGFza2JvZHk+DQotPHJlbGF0ZWQtbGlua3M+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08L2xpbmtsaXN0Pg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YSINCi1zY29wZT0icGVlciI+PGxpbmt0ZXh0PiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+V1NETCBkb2N1bWVudHM8L2xpbmt0ZXh0PjwvbGluaz4NCi08L2xpbmtsaXN0Pg0KLTwvcmVsYXRlZC1saW5rcz4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2YTliNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIHNrZWxldG9uIGJlYW4gZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgb3BlcmF0aW9ucyBkZXNjcmliZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQuIFdoZW4gdGhlIGJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlIGJ5IGVkaXRpbmcgdGhlIGJlYW4uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBza2VsZXRvbiBiZWFuIGZyb20gYW4gZXhpc3RpbmcgV1NETCBkb2N1bWVudC4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBza2VsZXRvbiwgc2tlbGV0b24gV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIHNrZWxldG9uLCBza2VsZXRvbiBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRza2x3c2RsYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgSmF2YSBiZWFuIHNrZWxldG9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZQotQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRza2x3c2RsYSI+PGEgbmFtZT0idHNrbHdzZGxhIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlCi1BeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbgotZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQotYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UKLWJ5IGVkaXRpbmcgdGhlIGJlYW4uPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTxvbD4KLTxsaT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBXZWIgQ29udGVudCBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LgotWW91IGNhbiBvbmx5IHVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZSB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUKLWVudmlyb25tZW50OjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlN3aXRjaCB0byB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSAoPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2luZG93ICZndDsgT3BlbiBQZXJzcGVjdGl2ZQotJmd0OyBKYXZhIEVFPC9zcGFuPikuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldywgc2VsZWN0IHRoZSBXU0RMIGZpbGUgdGhhdCB5b3UgY3JlYXRlZAotb3IgaW1wb3J0ZWQgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHlvdXIgV2ViIHByb2plY3QuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2U8L3NwYW4+IHdpemFyZC4gQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2VzIHBhZ2U6IHNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VG9wIGRvd24gSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC9zcGFuPiBhcwoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgc2VsZWN0IHRoZSBhcnRpZmFjdCBmcm9tIHdoaWNoIHRoZSBzZXJ2aWNlIHdpbGwKLWJlIGNyZWF0ZWQuPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudAotdG8gY29tcGxldGUgdXNpbmcgdGhlIHNsaWRlcjo8L3NwYW4+IDx1bD4KLTxsaT5EZXZlbG9wOiB0aGlzIHdpbGwgZGV2ZWxvcCB0aGUgV1NETCBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLVdlYiBzZXJ2aWNlLiBUaGlzIGluY2x1ZGVzIHN1Y2ggdGFza3MgYXMgY3JlYXRpbmcgdGhlIG1vZHVsZXMgd2hpY2ggd2lsbCBjb250YWluCi10aGUgZ2VuZXJhdGVkIGNvZGUsIFdTREwgZmlsZXMsIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMsIGFuZCBKYXZhIGZpbGVzIHdoZW4KLWFwcHJvcHJpYXRlLjwvbGk+Ci0KLTxsaT5Bc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQKLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPgotCi08bGk+RGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5JbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBXZWIgbW9kdWxlIGFuZCBFQVJzIG9uIHRoZQotdGFyZ2V0IHNlcnZlci48L2xpPgotCi08bGk+U3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkCi1vbiBpdC4gVGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+Ci0KLTxsaT5UZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIHNlcnZpY2UsIHN1Y2gKLWFzIHVzaW5nIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBvciBzYW1wbGUgSlNQcy48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBzZXJ2ZXI6IHRoZSBkZWZhdWx0IHNlcnZlciBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHNlcnZlciBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHNlcnZpY2UgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLjwvc3Bhbj4gRW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQKLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQotc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgY2xpZW50LCBzZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8KLWJlIGdlbmVyYXRlZCBhbmQgcmVwZWF0IHRoZSBhYm92ZSBzdGVwcyBmb3IgdGhlIGNsaWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5QdWJsaXNoIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi10byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYwotdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQKLWJ5IHRoZSBXZWIgc2VydmljZSBhbmQgdG8gdGVzdCB0aGlzIHRyYWZmaWMgZm9yIFdTLUkgY29tcGxpYW5jZS4gQWx0ZXJuYXRlbHkKLXlvdSBjYW4gbWFudWFsbHkgc2V0IHVwIGEgVENQL0lQIG1vbml0b3IgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbCI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9hPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlcyBTa2VsZXRvbiBKYXZh4oSiIEJlYW4gQ29uZmlndXJhdGlvbiBwYWdlOiBTZWxlY3QgdGhlCi1mb2xkZXIgd2hlcmUgdGhlIGdlbmVyYXRlZCBKYXZhIHdpbGwgYmUgc3RvcmVkLiBJZiB5b3Ugd2FudCB0byByZXZpZXcKLW9yIGVkaXQgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGFja2FnZXMgYW5kIG5hbWVzcGFjZXMsIHNlbGVjdCB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZQotY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlPC9zcGFuPiBjaGVjayBib3guIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsCi1ieSBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8dHQgY2xhc3M9InN5c291dCI+LnByb3BlcnRpZXM8L3R0PiBmaWxlLgotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjx2YXIgY2xhc3M9InZhcm5hbWUiPm5hbWVzcGFjZT1wYWNrYWdlPC92YXI+PC9zYW1wPi48L3NwYW4+Ci0gWW91IHdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMuCi0gRm9yIGV4YW1wbGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+IHNob3VsZCBiZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwXDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+LgotIE90aGVyd2lzZSwgdGhlIGNvbG9uICg6KSB3b3VsZCBiZSB0cmVhdGVkIGFzIGRlbGltaXRlciByZXN1bHRpbmcgaW4gdHJ5aW5nCi10byBtYXAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDwvc2FtcD4gdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9zYW1wPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgVGVzdCBwYWdlOiBJZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UsCi1zZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgZm9yIHRoZSBnZW5lcmF0ZWQgV2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBvcGVuIHRoZQotV2ViIHNlcnZpY2UgaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8KLXRlc3QsIGVudGVyIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksCi10aGlzIHBhZ2Ugc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4gSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkKLXdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5IGNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzCi1hbmQgcGFja2FnZXMuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBVc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZm9sbG93aW5nCi1vcHRpb25zOiA8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+U2VsZWN0IHlvdXIgdGVzdCBmYWNpbGl0eS4gWW91IGNhbiB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkKLWluIHRoZSBXZWIgU2VydmljZSBFeHBsb3Jlciwgb3IgeW91IGNhbiBnZW5lcmF0ZSBhIHNhbXBsZSBXZWIgc2VydmljZSBKU1AuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBwcm94eSB0aHJvdWdoIGEgSlNQLCB5b3UgY2FuIHNlbGVjdAotdGhlIGZvbGRlciB3aGVyZSB0aGUgSlNQIHdpbGwgYmUgbG9jYXRlZCwgYW5kIHlvdSBjYW4gc2VsZWN0IHRoZSBtZXRob2RzIHRoYXQKLXdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEpTUC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuIHRlc3Qgb24gc2VydmVyPC9zcGFuPiB0byBzdGFydCB0aGUKLXNlcnZlciBmb3IgeW91IGF1dG9tYXRpY2FsbHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZTogSWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB5b3VyCi1XZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHVzZSB0aGlzIHBhZ2UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLWFuZCBzZWxlY3QgdGhlIFVEREkgcmVnaXN0cnkgdG8gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIHdpbGwgYmUgcHVibGlzaGVkLiBDbGljawotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InAiPkFmdGVyIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLAotdGhlIGZvbGxvd2luZyBtYXkgb2NjdXIgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHlvdSBzZWxlY3RlZDogPHVsPgotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eSB1c2luZyBXZWIgc2VydmljZSBKU1BzLAotdGhlIHByb3h5IGlzIGxhdW5jaGVkIGluIGEgV2ViIGJyb3dzZXIgYXQgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHA6Ly9sb2NhbGhvc3Q6IDx2YXIgY2xhc3M9InZhcm5hbWUiPnBvcnQ8L3Zhcj4vIDx2YXIgY2xhc3M9InZhcm5hbWUiPldlYlByb2plY3Q8L3Zhcj5DbGllbnQvc2FtcGxlPGVtPkJlYW5OYW1lPC9lbT4vIDx2YXIgY2xhc3M9InZhcm5hbWUiPldlYlNlcnZpY2VOYW1lPC92YXI+L1Rlc3RDbGllbnQuanNwIFlvdSBjYW4gdXNlCi10aGlzIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBieSBzZWxlY3RpbmcgYSBtZXRob2QsIGVudGVyaW5nCi1hIHZhbHVlIGZvciB0aGUgbWV0aG9kLCBhbmQgY2xpY2tpbmcgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkludm9rZTwvc3Bhbj4uIFRoZSByZXN1bHQKLW9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQKLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPgotCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UsIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLWlzIGxhdW5jaGVkIGRpc3BsYXlpbmcgdGhlIHBhZ2UgcmVxdWlyZWQgdG8gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlLiBGb2xsb3cKLXRoZSBpbnN0cnVjdGlvbnMgaW4gIDx2YXIgY2xhc3M9InZhcm5hbWUiPlB1Ymxpc2hpbmcgdGhlIFdlYiBzZXJ2aWNlPC92YXI+IHRvIGNvbXBsZXRlCi10aGlzIHRhc2suPC9saT4KLQotPC91bD4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NheGlzdG92ZXIuaHRtbCIgdGl0bGU9IlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IgdGhlIG9wZW4gQXBhY2hlIEF4aXMgcGxhdGZvcm0uIj5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIj4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiPldTREwgZG9jdW1lbnRzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4ZWM0NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAiLi4vLi4vZHRkL3Rhc2suZHRkIj4NCi08dGFzayBpZD0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC90aXRsZT4NCi08c2hvcnRkZXNjPklmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQNCi1hcyBpdHMgc2VydmVyLCBUb21jYXQgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGEgc2VydmVyIGNyZWF0ZWQgYmVmb3JlIHlvdSBiZWdpbg0KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0dG9tY2F0c2VydnwxfEF4aXNydW50aW1lZW52aXJvbm1lbnRjcmVhdGluZ2FuQXBhY2hlVG9tY2F0c2VydmVyIg0KLXN0YXR1cz0idW5jaGFuZ2VkIj5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPkFwYWNoZSBUb21jYXQ8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtIGtleXJlZj0idHRvbWNhdHNlcnZ8MnxUb21jYXRzZXJ2ZXJjcmVhdGluZ3NlcnZlcnNmb3JXZWJzZXJ2aWNlcyINCi1zdGF0dXM9InVuY2hhbmdlZCI+QXBhY2hlIFRvbWNhdDxpbmRleHRlcm0+c2VydmVycyBmb3IgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybSBrZXlyZWY9InR0b21jYXRzZXJ2fDN8V2Vic2VydmljZXNjcmVhdGluZ2FuQXBhY2hlVG9tY2F0c2VydmVyIg0KLXN0YXR1cz0idW5jaGFuZ2VkIj5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPkluc3RhbGwgQXBhY2hlIEpha2FydGEgVG9tY2F0IGZyb20gdGhpcyBVUkw6IDx4cmVmIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvdG9tY2F0Ig0KLXNjb3BlPSJleHRlcm5hbCI+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQ8L3hyZWY+PC9wcmVyZXE+DQotPGNvbnRleHQ+T25jZSB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIHNlcnZlciwgY3JlYXRlIGEgVG9tY2F0IHNlcnZlciBpbiB0aGUNCi13b3JrYmVuY2ggYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogPC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPkZyb20gdGhlIEZpbGUgbWVudSwgc2VsZWN0IDx1aWNvbnRyb2w+TmV3ID4gT3RoZXIgPiBTZXJ2ZXIgPiBTZXJ2ZXINCi0+IE5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+U2VsZWN0IFRvbWNhdCB2IDMueCwgNC54LCB2NS54LCBvciA2LnggYXMgdGhlIHNlcnZlciB0eXBlLCBlbGVjdGluZw0KLXRoZSBjb3JyZWN0IHZlcnNpb24gb2YgVG9tY2F0IGZvciB5b3VyIGluc3RhbGwsIGFuZCBjbGljayA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+T24gdGhlIFRvbWNhdCBzZXJ2ZXIgcGFnZTo8L2NtZD4NCi08c3Vic3RlcHM+DQotPHN1YnN0ZXA+PGNtZD5FbnRlciBhIHNlcnZlciBuYW1lLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNwZWNpZnkgd2hlcmUgVG9tY2F0IGlzIGluc3RhbGxlZC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkluc3RhbGxlZCBKUkVzPC91aWNvbnRyb2w+LCBjbGljayA8dWljb250cm9sPkFkZDwvdWljb250cm9sPiwNCi1hbmQgZW50ZXIgdGhlIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uIGZvciB0aGUgSkRLIHlvdSBwbGFuIHRvIHVzZSBmb3IgVG9tY2F0Lg0KLUZvciBleGFtcGxlLCBmb3IgVG9tY2F0IHY1LjAgdGhlIEpSRSBuYW1lIHdvdWxkIGJlIGpkazE0MSBhbmQgdGhlIEpSRSBob21lDQotd291bGQgYmUgdGhlIGhvbWUgZGlyZWN0b3J5IGZvciBKREsgMS40LjEuIENsaWNrIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4gdHdpY2UNCi1vbmNlIHlvdSBoYXZlIGVudGVyZWQgdGhpcyBpbmZvcm1hdGlvbi4gRW5zdXJlIHRoYXQgdGhlIG5ld2x5IGFkZGVkIEpESyBpcw0KLW5vdyBzZWxlY3RlZCBpbiB0aGUgSlJFIGZpZWxkIG9mIHRoZSBUb21jYXQgc2VydmVyIHBhZ2UuIE5vdGUgdGhhdCBpZiB5b3UNCi1wb2ludCB0aGUgc2VydmVyIGF0IGEgSlJFIHJhdGhlciB0aGFuIGEgSkRLIHRoZSBKU1BzIHdpbGwgbm90IHByb3Blcmx5IGNvbXBpbGUNCi1hbmQgd2lsbCBub3QgYmUgYWJsZSB0byBydW4gb24gdGhlIFRvbWNhdCBzZXJ2ZXIuPC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PHN0ZXByZXN1bHQ+IFRvIHNlZSB0aGUNCi1zZXJ2ZXIgeW91IGhhdmUgY3JlYXRlZCBpbiB0aGUgd29ya3NwYWNlLCBmcm9tIHRoZSBXaW5kb3cgbWVudSBzZWxlY3QgPHVpY29udHJvbD5TaG93DQotdmlldyA+IE90aGVyID4gU2VydmVyID4gU2VydmVycyA+IE9rLjwvdWljb250cm9sPiA8L3N0ZXByZXN1bHQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPGV4YW1wbGU+PHA+VG8gYnVpbGQgYSBkeW5hbWljIFdlYiBwcm9qZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBUb21jYXQgc2VydmVyDQotdGhhdCB5b3UgaGF2ZSBjcmVhdGVkOjwvcD48b2w+DQotPGxpPkNyZWF0ZSB0aGUgc2VydmljZSBXZWIgcHJvamVjdCBieSBzZWxlY3RpbmcgPHVpY29udHJvbD5OZXcgPiBEeW5hbWljIFdlYg0KLXByb2plY3Q8L3VpY29udHJvbD4uIEVudGVyIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IDx1bD4NCi08bGk+UHJvamVjdCBOYW1lOiBlbnRlciBhIHByb2plY3QgbmFtZTwvbGk+DQotPGxpPlRhcmdldCBydW50aW1lOiBUb21jYXQgc2VydmVyIHYzLngsIDQueCwgNS54LCBvciA2LjAgZGVwZW5kaW5nIG9uIHRoZQ0KLXZlcnNpb24geW91IGluc3RhbGxlZC4gSWYgaXQgaXMgbm90IGxpc3RlZCwgY2xpY2sgTmV3IGFuZCBicm93c2UgdG8gdGhlIGxvY2F0aW9uDQotd2hlcmUgaXQgaXMgaW5zdGFsbGVkLjwvbGk+DQotPGxpPkVuc3VyZSB0aGF0IDx1aWNvbnRyb2w+QWRkIHByb2plY3QgdG8gYW4gRUFSPC91aWNvbnRyb2w+IGlzIDxpPm5vdDwvaT4gc2VsZWN0ZWQuPC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvbGk+DQotPGxpPlRvIGFzc29jaWF0ZSB0aGUgcHJvamVjdCB3aXRoIHRoZSBzZXJ2ZXIsIHJpZ2h0LWNsaWNrIHRoZSBUb21jYXQgc2VydmVyDQoteW91IGNyZWF0ZWQgaW4gdGhlIFNlcnZlciB2aWV3IGFuZCBzZWxlY3QgPHVpY29udHJvbD5BZGQgYW5kIHJlbW92ZSBwcm9qZWN0czwvdWljb250cm9sPi4NCi1TZWxlY3QgdGhlIHNlcnZpY2UgYW5kIGNsaWVudCBwcm9qZWN0cyBmcm9tIHRoZSBBdmFpbGFibGUgcHJvamVjdHMgbGlzdCBhbmQNCi1jbGljayA8dWljb250cm9sPkFkZDwvdWljb250cm9sPi4gPC9saT4NCi08L29sPjwvZXhhbXBsZT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUwMmFjOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgcGxhbiB0byBjcmVhdGUgYSBXZWIgc2VydmljZSB0aGF0IHVzZXMgQXBhY2hlIEpha2FydGEgVG9tY2F0IGFzIGl0cyBzZXJ2ZXIsIFRvbWNhdCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYSBzZXJ2ZXIgY3JlYXRlZCBiZWZvcmUgeW91IGJlZ2luIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIEFwYWNoZSBUb21jYXQsIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgQXBhY2hlIFRvbWNhdCwgc2VydmVycyBmb3IgV2ViIHNlcnZpY2VzLCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIj48YSBuYW1lPSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L2gxPgotCi0KLQotPGRpdj48cD5JZiB5b3UgcGxhbiB0byBjcmVhdGUgYSBXZWIgc2VydmljZSB0aGF0IHVzZXMgQXBhY2hlIEpha2FydGEgVG9tY2F0Ci1hcyBpdHMgc2VydmVyLCBUb21jYXQgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGEgc2VydmVyIGNyZWF0ZWQgYmVmb3JlIHlvdSBiZWdpbgotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPkluc3RhbGwgQXBhY2hlIEpha2FydGEgVG9tY2F0IGZyb20gdGhpcyBVUkw6IDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvdG9tY2F0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQ8L2E+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPk9uY2UgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBzZXJ2ZXIsIGNyZWF0ZSBhIFRvbWNhdCBzZXJ2ZXIgaW4gdGhlCi13b3JrYmVuY2ggYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RnJvbSB0aGUgRmlsZSBtZW51LCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV3ICZndDsgT3RoZXIgJmd0OyBTZXJ2ZXIgJmd0OyBTZXJ2ZXIKLSZndDsgTmV4dDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IFRvbWNhdCB2IDMueCwgNC54LCB2NS54LCBvciA2LnggYXMgdGhlIHNlcnZlciB0eXBlLCBlbGVjdGluZwotdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBUb21jYXQgZm9yIHlvdXIgaW5zdGFsbCwgYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T24gdGhlIFRvbWNhdCBzZXJ2ZXIgcGFnZTo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+RW50ZXIgYSBzZXJ2ZXIgbmFtZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNwZWNpZnkgd2hlcmUgVG9tY2F0IGlzIGluc3RhbGxlZC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkluc3RhbGxlZCBKUkVzPC9zcGFuPiwgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPiwKLWFuZCBlbnRlciB0aGUgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gZm9yIHRoZSBKREsgeW91IHBsYW4gdG8gdXNlIGZvciBUb21jYXQuCi1Gb3IgZXhhbXBsZSwgZm9yIFRvbWNhdCB2NS4wIHRoZSBKUkUgbmFtZSB3b3VsZCBiZSBqZGsxNDEgYW5kIHRoZSBKUkUgaG9tZQotd291bGQgYmUgdGhlIGhvbWUgZGlyZWN0b3J5IGZvciBKREsgMS40LjEuIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPiB0d2ljZQotb25jZSB5b3UgaGF2ZSBlbnRlcmVkIHRoaXMgaW5mb3JtYXRpb24uIEVuc3VyZSB0aGF0IHRoZSBuZXdseSBhZGRlZCBKREsgaXMKLW5vdyBzZWxlY3RlZCBpbiB0aGUgSlJFIGZpZWxkIG9mIHRoZSBUb21jYXQgc2VydmVyIHBhZ2UuIE5vdGUgdGhhdCBpZiB5b3UKLXBvaW50IHRoZSBzZXJ2ZXIgYXQgYSBKUkUgcmF0aGVyIHRoYW4gYSBKREsgdGhlIEpTUHMgd2lsbCBub3QgcHJvcGVybHkgY29tcGlsZQotYW5kIHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIG9uIHRoZSBUb21jYXQgc2VydmVyLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPiAgVG8gc2VlIHRoZQotc2VydmVyIHlvdSBoYXZlIGNyZWF0ZWQgaW4gdGhlIHdvcmtzcGFjZSwgZnJvbSB0aGUgV2luZG93IG1lbnUgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNob3cKLXZpZXcgJmd0OyBPdGhlciAmZ3Q7IFNlcnZlciAmZ3Q7IFNlcnZlcnMgJmd0OyBPay48L3NwYW4+IDwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPlRvIGJ1aWxkIGEgZHluYW1pYyBXZWIgcHJvamVjdCB0aGF0IHBvaW50cyB0byB0aGUgVG9tY2F0IHNlcnZlcgotdGhhdCB5b3UgaGF2ZSBjcmVhdGVkOjwvcD4KLTxvbD4KLTxsaT5DcmVhdGUgdGhlIHNlcnZpY2UgV2ViIHByb2plY3QgYnkgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldyAmZ3Q7IER5bmFtaWMgV2ViCi1wcm9qZWN0PC9zcGFuPi4gRW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjogPHVsPgotPGxpPlByb2plY3QgTmFtZTogZW50ZXIgYSBwcm9qZWN0IG5hbWU8L2xpPgotCi08bGk+VGFyZ2V0IHJ1bnRpbWU6IFRvbWNhdCBzZXJ2ZXIgdjMueCwgNC54LCA1LngsIG9yIDYuMCBkZXBlbmRpbmcgb24gdGhlCi12ZXJzaW9uIHlvdSBpbnN0YWxsZWQuIElmIGl0IGlzIG5vdCBsaXN0ZWQsIGNsaWNrIE5ldyBhbmQgYnJvd3NlIHRvIHRoZSBsb2NhdGlvbgotd2hlcmUgaXQgaXMgaW5zdGFsbGVkLjwvbGk+Ci0KLTxsaT5FbnN1cmUgdGhhdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3NwYW4+IGlzIDxlbT5ub3Q8L2VtPiBzZWxlY3RlZC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9saT4KLQotPGxpPlRvIGFzc29jaWF0ZSB0aGUgcHJvamVjdCB3aXRoIHRoZSBzZXJ2ZXIsIHJpZ2h0LWNsaWNrIHRoZSBUb21jYXQgc2VydmVyCi15b3UgY3JlYXRlZCBpbiB0aGUgU2VydmVyIHZpZXcgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgYW5kIHJlbW92ZSBwcm9qZWN0czwvc3Bhbj4uCi1TZWxlY3QgdGhlIHNlcnZpY2UgYW5kIGNsaWVudCBwcm9qZWN0cyBmcm9tIHRoZSBBdmFpbGFibGUgcHJvamVjdHMgbGlzdCBhbmQKLWNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4uIDwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDFmMjI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAiLi4vLi4vZHRkL3Rhc2suZHRkIj4NCi08dGFzayBpZD0idHdzYmVhbmEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ8L3RpdGxlPg0KLTx0aXRsZWFsdHM+DQotPHNlYXJjaHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxDQotcnVudGltZSBlbnZpcm9ubWVudDwvc2VhcmNodGl0bGU+DQotPC90aXRsZWFsdHM+DQotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLA0KLWNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4NCi1PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUNCi1jbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZQ0KLWNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkNCi11c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybSBrZXlyZWY9InR3c2JlYW5hfDF8QXhpczFydW50aW1lZW52aXJvbm1lbnRXZWJzZXJ2aWNlc0phdmFiZWFucyINCi1zdGF0dXM9InVuY2hhbmdlZCI+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkphdmENCi1iZWFuczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0ga2V5cmVmPSJ0d3NiZWFuYXwyfFdlYnNlcnZpY2VzQXhpc3J1bnRpbWVlbnZpcm9ubWVudGNyZWF0aW5nYVdlYnNlcnZpY2UiDQotc3RhdHVzPSJ1bmNoYW5nZWQiPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5jcmVhdGluZw0KLWEgV2ViIHNlcnZpY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+DQotPGxpIGlkPSJjcmVhdGV0b21jYXRsaW5rIj5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldA0KLWNvbnRhaW5lciBhcyB5b3VyIHNlcnZlciwgeW91IG11c3QgaW5zdGFsbCBpdCwgY29uZmlndXJlIGFuIGluc3RhbmNlIG9mIGl0LA0KLWFuZCBjcmVhdGUgYSBXZWIgcHJvamVjdCB0YXJnZXRlZCB0byBpdCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0idHRvbWNhdHNlcnYuZGl0YSINCi1zY29wZT0ibG9jYWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwveHJlZj48L2xpPg0KLTxsaT5DcmVhdGUgb3IgaW1wb3J0IGEgYmVhbiBpbnRvIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBzb3VyY2UgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4gVG8NCi1pbXBvcnQsIHNlbGVjdCB0aGUgPGI+SmF2YSBSZXNvdXJjZXM6IHNyYzwvYj4gZm9sZGVyLCBhbmQgZnJvbSB0aGUgZmlsZSBtZW51DQotc2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPkltcG9ydDwvdWljb250cm9sPjx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+RmlsZSBTeXN0ZW08L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgYnJvd3NlIHRvIHdoZXJlIHlvdXINCi1wYWNrYWdlIGlzLjwvbGk+DQotPC9vbD48L3A+PC9wcmVyZXE+DQotPGNvbnRleHQ+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSAoPHVpY29udHJvbD5XaW5kb3cgPiBPcGVuIFBlcnNwZWN0aXZlDQotPiBKYXZhIEVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIGJlYW4gdGhhdCB5b3UgY3JlYXRlZA0KLW9yIGltcG9ydGVkIGludG8gdGhlIHNvdXJjZSBmb2xkZXIgb2YgeW91ciBXZWIgcHJvamVjdC48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaWxlID4gTmV3ID4gT3RoZXI8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+U2VsZWN0PHVpY29udHJvbD5XZWINCi1TZXJ2aWNlczwvdWljb250cm9sPiBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSB2YXJpb3VzIFdlYiBzZXJ2aWNlIHdpemFyZHMuDQotU2VsZWN0IHRoZSAgPHVpY29udHJvbD5XZWIgU2VydmljZTwvdWljb250cm9sPiB3aXphcmQuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDx1aWNvbnRyb2w+Qm90dG9tIHVwIEphdmEgYmVhbiBXZWIgc2VydmljZTwvdWljb250cm9sPiBhcw0KLXlvdXIgV2ViIHNlcnZpY2UgdHlwZSwgYW5kIGVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0DQotd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlLjwvY21kPg0KLTxzdWJzdGVwcyBpZD0iY3JlYXRlc3RlcDR1bCI+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudA0KLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9jbWQ+PGluZm8+PHVsPg0KLTxsaT5EZXZlbG9wOiB0aGlzIHdpbGwgZGV2ZWxvcCB0aGUgV1NETCBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCi1XZWIgc2VydmljZS4gVGhpcyBpbmNsdWRlcyBzdWNoIHRhc2tzIGFzIGNyZWF0aW5nIHRoZSBtb2R1bGVzIHdoaWNoIHdpbGwgY29udGFpbg0KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbg0KLWFwcHJvcHJpYXRlLjwvbGk+DQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudA0KLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPg0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4NCi08bGk+SW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgV2ViIG1vZHVsZSBhbmQgRUFScyBvbiB0aGUNCi10YXJnZXQgc2VydmVyLjwvbGk+DQotPGxpPlN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZA0KLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4NCi08bGk+VGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlLCBzdWNoDQotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+DQotPC91bD48L2luZm8+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UNCi13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkNCi1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQ0KLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBydW50aW1lIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkNCi1hIGRpZmZlcmVudCBydW50aW1lLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0DQotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQNCi1FQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay48L2NtZD48aW5mbz5FbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZA0KLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQ0KLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2luZm8+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgY2xpZW50LCBzZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8NCi1iZSBnZW5lcmF0ZWQgYW5kIHJlcGVhdCB0aGUgYWJvdmUgc3RlcHMgZm9yIHRoZSBjbGllbnQuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+UHVibGlzaCB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcg0KLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljDQotdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQNCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5DQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhIg0KLXNjb3BlPSJwZWVyIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L3hyZWY+PC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQmVhbiBJZGVudGl0eSBwYWdlOiB0aGUgV2ViIHNlcnZpY2UNCi1XU0RMIG5hbWUgd2lsbCBiZSBsaXN0ZWQuPC9jbWQ+PGluZm8+WW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOjx1bD4NCi08bGk+U2VsZWN0IHRoZSBtZXRob2RzIHRvIGV4cG9zZS48L2xpPg0KLTxsaT5TZWxlY3QgdGhlIGVuY29kaW5nIHN0eWxlLiBSUEMvRW5jb2RlZCBpcyB0aGUgcmVjb21tZW5kZWQgZW5jb2Rpbmcgc3R5bGUNCi1mb3IgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhpcyBlbmNvZGluZyBtZXRob2QgaXMgbm90IFdTLUkgY29tcGxpYW50LjwvbGk+DQotPGxpPlNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvbGk+DQotPC91bD5DbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+PC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFBhY2thZ2UgdG8gTmFtZXNwYWNlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsDQotYnkgY2xpY2tpbmcgIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPGI+SW1wb3J0PC9iPiB0bw0KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4NCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5wYWNrYWdlPW5hbWVzcGFjZTwvdmFybmFtZT48L2NvZGVwaD4uIDwvY21kPg0KLTxpbmZvPllvdSB3aWxsIG5lZWQgdG8gZXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzLg0KLSBGb3IgZXhhbXBsZSA8Y29kZXBoPnNvbWVQYWNrYWdlPWh0dHA6Ly9zb21lTmFtZXNwYWNlPC9jb2RlcGg+IHNob3VsZCBiZSA8Y29kZXBoPnNvbWVQYWNrYWdlPWh0dHBcOi8vc29tZU5hbWVzcGFjZTwvY29kZXBoPi4NCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcNCi10byBtYXAgPGNvZGVwaD5zb21lcGFja2FnZTwvY29kZXBoPiB0byA8Y29kZXBoPmh0dHA8L2NvZGVwaD4uPC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLA0KLXNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSBmb3IgdGhlIGdlbmVyYXRlZCBXZWIgc2VydmljZS48L2NtZD48aW5mbz5UaGlzIHdpbGwNCi1vcGVuIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3UNCi13YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiwgYW5kIGNsaWNrPHVpY29udHJvbD5HbzwvdWljb250cm9sPi4NCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IGlmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksDQotc2VsZWN0IGlmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgcGFja2FnZSB0byBuYW1lc3BhY2UgbWFwcGluZ3MuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgQ2xpZW50IFRlc3QgcGFnZTogVXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGZvbGxvd2luZw0KLW9wdGlvbnM6IDwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHRlc3QgZmFjaWxpdHkuIFlvdSBjYW4gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5DQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L2NtZD4NCi08L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5JZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgcHJveHkgdGhyb3VnaCBhIEpTUCwgeW91IGNhbiBzZWxlY3QNCi10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdA0KLXdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEpTUC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgIDx1aWNvbnRyb2w+UnVuIHRlc3Qgb24gc2VydmVyPC91aWNvbnRyb2w+IHRvIHN0YXJ0IHRoZQ0KLXNlcnZlciBmb3IgeW91IGF1dG9tYXRpY2FsbHkuPC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZTogU2VsZWN0IHdoZXRoZXIgb3Igbm90IHlvdSB3YW50IHRvDQotcHVibGlzaCB0aGlzIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS4gQ2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uJm5ic3A7PC9jbWQ+DQotPGluZm8+Tm90ZTogeW91IG1heSBzZWUgYSB3YXJuaW5nIHN0YXRpbmcgPGNvZGVwaD5FcnJvciBpbiBnZW5lcmF0aW5nIFdTREwNCi1mcm9tIEphdmEuIENsYXNzTm90Rm91bmQ6ICZsdDtiZWFuIG5hbWU+PC9jb2RlcGg+LiBUaGlzIGVycm9yIGNhbiBiZSBzYWZlbHkNCi1pZ25vcmVkLjwvaW5mbz48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0IGlkPSJheGlzd3NjcmVhdGVyZXN1bHQiPjxwPkFmdGVyIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLA0KLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5IHVzaW5nIFdlYiBzZXJ2aWNlIEpTUHMsDQotdGhlIHByb3h5IGlzIGxhdW5jaGVkIGluIGEgV2ViIGJyb3dzZXIgYXQgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHA6Ly9sb2NhbGhvc3Q6IDx2YXJuYW1lPnBvcnQ8L3Zhcm5hbWU+LyA8dmFybmFtZT5XZWJQcm9qZWN0PC92YXJuYW1lPkNsaWVudC9zYW1wbGU8aQ0KLT5CZWFuTmFtZTwvaT4vIDx2YXJuYW1lPldlYlNlcnZpY2VOYW1lPC92YXJuYW1lPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQ0KLXRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwgZW50ZXJpbmcNCi1hIHZhbHVlIGZvciB0aGUgbWV0aG9kLCBhbmQgY2xpY2tpbmcgIDx1aWNvbnRyb2w+SW52b2tlPC91aWNvbnRyb2w+LiBUaGUgcmVzdWx0DQotb2YgdGhlIG1ldGhvZCB3aWxsIGRpc3BsYXkgaW4gdGhlIHJlc3VsdHMgcGFuZS48L2xpPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLA0KLXRoZSBFeHBsb3JlciB3aWxsIG9wZW4uIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZA0KLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLjwvbGk+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyDQotaXMgbGF1bmNoZWQgZGlzcGxheWluZyB0aGUgcGFnZSByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UuIEZvbGxvdw0KLXRoZSBpbnN0cnVjdGlvbnMgaW4gIDx2YXJuYW1lPlB1Ymxpc2hpbmcgdGhlIFdlYiBzZXJ2aWNlPC92YXJuYW1lPiB0byBjb21wbGV0ZQ0KLXRoaXMgdGFzay48L2xpPg0KLTwvdWw+PC9wPjwvcmVzdWx0Pg0KLTxwb3N0cmVxPjxwPiA8dWljb250cm9sPkltcG9ydGFudDo8L3VpY29udHJvbD4gSWYgeW91ciBtZXRob2RzIGNvbnRhaW4gdHlwZXMsDQotbm90IHN1cHBvcnRlZCBieSB0aGUgc2FtcGxlLCBzdWNoIGFzIGFycmF5cywgaW5kZXhlZCBwcm9wZXJ0aWVzLCBhbmQgY29sbGVjdGlvbnMsDQotdGhlIG1ldGhvZHMgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHNhbXBsZSBhbmQgeW91IHdpbGwgcmVjZWl2ZSBhIHdhcm5pbmcNCi1tZXNzYWdlLjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08cmVsYXRlZC1saW5rcz4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIg0KLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2xpbmt0ZXh0PjwvbGluaz4NCi08L2xpbmtsaXN0Pg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XU0RMIGRvY3VtZW50czwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPC9yZWxhdGVkLWxpbmtzPg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHdzYmVhbmEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNDI3Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZSwgY29uZmlndXJpbmcgaXQgZm9yIGRlcGxveW1lbnQsIGFuZCBkZXBsb3lpbmcgdGhlIFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyLiBPbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUgY2xpZW50IHByb3h5IGFuZCBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UuIFdoZW4geW91IGhhdmUgY29tcGxldGVkIHRlc3RpbmcsIHlvdSBjYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeSB1c2luZyB0aGUgRXhwb3J0IHdpemFyZC4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZSwgY29uZmlndXJpbmcgaXQgZm9yIGRlcGxveW1lbnQsIGFuZCBkZXBsb3lpbmcgdGhlIFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyLiBPbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUgY2xpZW50IHByb3h5IGFuZCBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UuIFdoZW4geW91IGhhdmUgY29tcGxldGVkIHRlc3RpbmcsIHlvdSBjYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeSB1c2luZyB0aGUgRXhwb3J0IHdpemFyZC4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgSmF2YSBiZWFucywgY3JlYXRpbmcgYSBXZWIgc2VydmljZSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBKYXZhIGJlYW5zLCBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NheGlzdG92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NiZWFuYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxCi1ydW50aW1lIGVudmlyb25tZW50PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NiZWFuYSI+PGEgbmFtZT0idHdzYmVhbmEiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUKLWVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLAotY29uZmlndXJpbmcgaXQgZm9yIGRlcGxveW1lbnQsIGFuZCBkZXBsb3lpbmcgdGhlIFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyLgotT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlCi1jbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZQotY29tcGxldGVkIHRlc3RpbmcsIHlvdSBjYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeQotdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaSBpZD0idHdzYmVhbmFfX2NyZWF0ZXRvbWNhdGxpbmsiPjxhIG5hbWU9InR3c2JlYW5hX19jcmVhdGV0b21jYXRsaW5rIj48IS0tIC0tPjwvYT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIGJlYW4gaW50byB0aGUgSmF2YeKEoiBzb3VyY2UgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4gVG8KLWltcG9ydCwgc2VsZWN0IHRoZSA8c3Ryb25nPkphdmEgUmVzb3VyY2VzOiBzcmM8L3N0cm9uZz4gZm9sZGVyLCBhbmQgZnJvbSB0aGUgZmlsZSBtZW51Ci1zZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnQ8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgU3lzdGVtPC9zcGFuPjwvc3Bhbj4gYW5kIGJyb3dzZSB0byB3aGVyZSB5b3VyCi1wYWNrYWdlIGlzLjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBjcmVhdGUgYSBXZWIgc2VydmljZSBmcm9tIGEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUKLWVudmlyb25tZW50OjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlN3aXRjaCB0byB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSAoPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2luZG93ICZndDsgT3BlbiBQZXJzcGVjdGl2ZQotJmd0OyBKYXZhIEVFPC9zcGFuPikuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldywgc2VsZWN0IHRoZSBiZWFuIHRoYXQgeW91IGNyZWF0ZWQKLW9yIGltcG9ydGVkIGludG8gdGhlIHNvdXJjZSBmb2xkZXIgb2YgeW91ciBXZWIgcHJvamVjdC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZSAmZ3Q7IE5ldyAmZ3Q7IE90aGVyPC9zcGFuPi48L3NwYW4+IFNlbGVjdDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYgotU2VydmljZXM8L3NwYW4+IGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgV2ViIHNlcnZpY2Ugd2l6YXJkcy4KLVNlbGVjdCB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlPC9zcGFuPiB3aXphcmQuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2VzIHBhZ2U6IHNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Qm90dG9tIHVwIEphdmEgYmVhbiBXZWIgc2VydmljZTwvc3Bhbj4gYXMKLXlvdXIgV2ViIHNlcnZpY2UgdHlwZSwgYW5kIGVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0Ci13aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNlcnZpY2UuPC9zcGFuPgotPGEgbmFtZT0idHdzYmVhbmFfX2NyZWF0ZXN0ZXA0dWwiPjwhLS0gLS0+PC9hPjxvbCB0eXBlPSJhIiBpZD0idHdzYmVhbmFfX2NyZWF0ZXN0ZXA0dWwiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudAotdG8gY29tcGxldGUgdXNpbmcgdGhlIHNsaWRlcjo8L3NwYW4+IDx1bD4KLTxsaT5EZXZlbG9wOiB0aGlzIHdpbGwgZGV2ZWxvcCB0aGUgV1NETCBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLVdlYiBzZXJ2aWNlLiBUaGlzIGluY2x1ZGVzIHN1Y2ggdGFza3MgYXMgY3JlYXRpbmcgdGhlIG1vZHVsZXMgd2hpY2ggd2lsbCBjb250YWluCi10aGUgZ2VuZXJhdGVkIGNvZGUsIFdTREwgZmlsZXMsIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMsIGFuZCBKYXZhIGZpbGVzIHdoZW4KLWFwcHJvcHJpYXRlLjwvbGk+Ci0KLTxsaT5Bc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQKLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPgotCi08bGk+RGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5JbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBXZWIgbW9kdWxlIGFuZCBFQVJzIG9uIHRoZQotdGFyZ2V0IHNlcnZlci48L2xpPgotCi08bGk+U3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkCi1vbiBpdC4gVGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+Ci0KLTxsaT5UZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIHNlcnZpY2UsIHN1Y2gKLWFzIHVzaW5nIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBvciBzYW1wbGUgSlNQcy48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBzZXJ2ZXI6IHRoZSBkZWZhdWx0IHNlcnZlciBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHNlcnZlciBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHNlcnZpY2UgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLjwvc3Bhbj4gRW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQKLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQotc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgY2xpZW50LCBzZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8KLWJlIGdlbmVyYXRlZCBhbmQgcmVwZWF0IHRoZSBhYm92ZSBzdGVwcyBmb3IgdGhlIGNsaWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5QdWJsaXNoIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi10byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYwotdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQKLWJ5IHRoZSBXZWIgc2VydmljZSBhbmQgdG8gdGVzdCB0aGlzIHRyYWZmaWMgZm9yIFdTLUkgY29tcGxpYW5jZS4gQWx0ZXJuYXRlbHkKLXlvdSBjYW4gbWFudWFsbHkgc2V0IHVwIGEgVENQL0lQIG1vbml0b3IgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbCI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9hPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIEphdmEgQmVhbiBJZGVudGl0eSBwYWdlOiB0aGUgV2ViIHNlcnZpY2UKLVdTREwgbmFtZSB3aWxsIGJlIGxpc3RlZC48L3NwYW4+IFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8dWw+Ci08bGk+U2VsZWN0IHRoZSBtZXRob2RzIHRvIGV4cG9zZS48L2xpPgotCi08bGk+U2VsZWN0IHRoZSBlbmNvZGluZyBzdHlsZS4gUlBDL0VuY29kZWQgaXMgdGhlIHJlY29tbWVuZGVkIGVuY29kaW5nIHN0eWxlCi1mb3IgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhpcyBlbmNvZGluZyBtZXRob2QgaXMgbm90IFdTLUkgY29tcGxpYW50LjwvbGk+Ci0KLTxsaT5TZWxlY3QgaWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdlIHRvIG5hbWVzcGFjZSBtYXBwaW5ncy48L2xpPgotCi08L3VsPgotQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBQYWNrYWdlIHRvIE5hbWVzcGFjZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIHBhY2thZ2UgdG8gbmFtZXNwYWNlPC9zcGFuPiBvbgotdGhlIHByZXZpb3VzIHBhbmVsLCB5b3UgY2FuIGVudGVyIHlvdXIgY3VzdG9tIG1hcHBpbmcgcGFpcnMgb24gdGhpcyBwYW5lbAotYnkgY2xpY2tpbmcgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4uIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGNsaWNrICA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPiB0bwotaW1wb3J0IGN1c3RvbSBtYXBwaW5nIHBhaXJzIGZyb20gYSAgPHR0IGNsYXNzPSJzeXNvdXQiPi5wcm9wZXJ0aWVzPC90dD4gZmlsZS4KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8c2FtcCBjbGFzcz0iY29kZXBoIj48dmFyIGNsYXNzPSJ2YXJuYW1lIj5wYWNrYWdlPW5hbWVzcGFjZTwvdmFyPjwvc2FtcD4uIDwvc3Bhbj4KLSBZb3Ugd2lsbCBuZWVkIHRvIGVzY2FwZSBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcHJvcGVydGllcyBmaWxlcy4KLSBGb3IgZXhhbXBsZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5zb21lUGFja2FnZT1odHRwOi8vc29tZU5hbWVzcGFjZTwvc2FtcD4gc2hvdWxkIGJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNvbWVQYWNrYWdlPWh0dHBcOi8vc29tZU5hbWVzcGFjZTwvc2FtcD4uCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcKLXRvIG1hcCA8c2FtcCBjbGFzcz0iY29kZXBoIj5zb21lUGFja2FnZTwvc2FtcD4gdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDwvc2FtcD4uCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLAotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLjwvc3Bhbj4gVGhpcyB3aWxsCi1vcGVuIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3UKLXdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2s8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogaWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwKLXNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5TZWxlY3QgeW91ciB0ZXN0IGZhY2lsaXR5LiBZb3UgY2FuIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIHByb3h5IHRocm91Z2ggYSBKU1AsIHlvdSBjYW4gc2VsZWN0Ci10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdAotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3NwYW4+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBTZWxlY3Qgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8KLXB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uwqA8L3NwYW4+Ci0gTm90ZTogeW91IG1heSBzZWUgYSB3YXJuaW5nIHN0YXRpbmcgPHNhbXAgY2xhc3M9ImNvZGVwaCI+RXJyb3IgaW4gZ2VuZXJhdGluZyBXU0RMCi1mcm9tIEphdmEuIENsYXNzTm90Rm91bmQ6ICZsdDtiZWFuIG5hbWUmZ3Q7PC9zYW1wPi4gVGhpcyBlcnJvciBjYW4gYmUgc2FmZWx5Ci1pZ25vcmVkLjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJ0d3NiZWFuYV9fYXhpc3dzY3JlYXRlcmVzdWx0Ij48YSBuYW1lPSJ0d3NiZWFuYV9fYXhpc3dzY3JlYXRlcmVzdWx0Ij48IS0tIC0tPjwvYT48ZGl2IGNsYXNzPSJwIj5BZnRlciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZCwKLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZwotYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LiBUaGUgcmVzdWx0Ci1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFyPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW1wb3J0YW50Ojwvc3Bhbj4gSWYgeW91ciBtZXRob2RzIGNvbnRhaW4gdHlwZXMsCi1ub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzYW1wbGUsIHN1Y2ggYXMgYXJyYXlzLCBpbmRleGVkIHByb3BlcnRpZXMsIGFuZCBjb2xsZWN0aW9ucywKLXRoZSBtZXRob2RzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBzYW1wbGUgYW5kIHlvdSB3aWxsIHJlY2VpdmUgYSB3YXJuaW5nCi1tZXNzYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWxjb25jZXB0cyI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwiIHRpdGxlPSJUaGlzIHJ1bnRpbWUgZW52aXJvbm1lbnRzIGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yIHRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLiI+Q3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIj5XU0RMIGRvY3VtZW50czwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNfcmVsdGFibGVfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc19yZWx0YWJsZV90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmOWI3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc19yZWx0YWJsZV90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iDQotICJtYXAuZHRkIj4NCi08bWFwIHRpdGxlPSJSZWx0YWJsZSBmb3IgQXhpcyBXZWIgc2VydmljZXMgZG9jcyI+DQotPHJlbHRhYmxlPg0KLTxyZWxoZWFkZXI+DQotPHJlbGNvbHNwZWMgdHlwZT0iY29uY2VwdCI+PC9yZWxjb2xzcGVjPg0KLTxyZWxjb2xzcGVjIHR5cGU9InRhc2siPjwvcmVsY29sc3BlYz4NCi08cmVsY29sc3BlYyB0eXBlPSJyZWZlcmVuY2UiPjwvcmVsY29sc3BlYz4NCi08L3JlbGhlYWRlcj4NCi08cmVscm93Pg0KLTxyZWxjZWxsIGNvbGxlY3Rpb24tdHlwZT0iZmFtaWx5Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NheGlzdG92ZXIuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50cyI+DQotPC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPHJlbGNlbGw+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90d3NiZWFuYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gQXhpczEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3Rza2x3c2RsYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gQXhpczEgV2ViIHNlcnZpY2UgZnJvbSBXU0RMIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdHNhbXBhcHBhLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBBeGlzMSBXZWIgc2VydmljZSBjbGllbnQiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPjwvcmVsY2VsbD4NCi08L3JlbHJvdz4NCi08L3JlbHRhYmxlPg0KLTwvbWFwPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzX3JlbHRhYmxlX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc19yZWx0YWJsZV90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTUyMGQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzX3JlbHRhYmxlX3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGFiZWw9IlJlbHRhYmxlIGZvciBBeGlzIFdlYiBzZXJ2aWNlcyBkb2NzIi8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNmMThkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iCi0gIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93c2NyZWF0aW9udDFfdG9jLmRpdGFtYXAjd3NheGlzIgotaWQ9IndzYXhpcyIgdGl0bGU9IndzYXhpcyI+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL2NheGlzdG92ZXIuZGl0YSIgbmF2dGl0bGU9IkFwYWNoZSBBeGlzMSBydW50aW1lIiB0b2M9InllcyI+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2LmRpdGEiIG5hdnRpdGxlPSJJbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyBBcGFjaGUgVG9tY2F0Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3c2JlYW5hLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4iPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdHNrbHdzZGxhLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhIEphdmEgU2tlbGV0b24gZnJvbSBXU0RMIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3RzYW1wYXBwYS5kaXRhIiBuYXZ0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGZyb20gYSBXU0RMIGRvY3VtZW50Ij4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NzJiOGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd3NjcmVhdGlvbnQxX3RvYy54bWwjd3NheGlzIiBsYWJlbD0id3NheGlzIiB0b3BpYz0idG9waWNzL2NheGlzdG92ZXIuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgaHJlZj0idG9waWNzL2NheGlzdG92ZXIuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgaHJlZj0idG9waWNzL3R3c2JlYW5hLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50IiBocmVmPSJ0b3BpY3MvdHNrbHdzZGxhLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgaHJlZj0idG9waWNzL3RzYW1wYXBwYS5odG1sIi8+Ci08L3RvcGljPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwYmRhMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjYWRkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMxNWNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgd3NjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTc3YjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotISBQbHVnLWluIHByb3BlcnRpZXMKLXBsdWdpbk5hbWUgICAgID0gV2ViIHNlcnZpY2VzIFVJCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTU2Y2NhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPgotCQk8Y29udGV4dHMgZmlsZT0id3Njb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIvPgotCQk8Y29udGV4dHMgZmlsZT0id3NjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjOWNlYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotCi08IS0tVG9wb2xvZ3lQcmVmZXJlbmNlUGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQUFRQMDAwMSI+Ci08IS0tUFRQUDAwMDEgZm9yIHRoZSBUb3BvbG9neSBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGVzZSB0YWJsZXMgcmVzcHJlc2VudHMgdGhlIHRoZSB0eXBlcyBvZiBwcm9qZWN0cyBhdmFpbGFibGUgaW50byB3aGljaCB5b3UgY2FuIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LiAKLVlvdSBjYW5ub3QgYWRkIG9yIHJlbW92ZSBwcm9qZWN0IHR5cGVzLCBob3dldmVyIHlvdSBjYW4gY2hhbmdlIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZSBjcmVhdGluZyBzZXZlcmFsIFdlYiBzZXJ2aWNlcyB0aGF0IHVzZSB0aGUgc2FtZSB0eXBlIG9mIHNlcnZpY2Ugb3IgY2xpZW50IHByb2plY3QgYmVjYXVzZSB5b3UgY2FuIHNldCB0aGF0IHNlcnZpY2Ugb3IgY2xpZW50IHByb2plY3QgdHlwZSBhcyB0aGUgZGVmYXVsdC4gCi1UbyBjaGFuZ2UgdGhlIG9yZGVyLCBzZWxlY3QgYSBwcm9qZWN0IHR5cGUgYW5kIHVzZSB0aGUgdXAgYW5kIGRvd24gYXJyb3dzIHRvIG1vdmUgaXQgd2l0aGluIHRoZSBsaXN0LiBDaGFuZ2luZyB0aGUgb3JkZXIgb2YgdGhlIGxpc3QgZG9lcyBub3QgcmVzdHJpY3QgeW91ciBhYmlsaXR5IHRvIHNlbGVjdCBhbnkgb2YgdGhlIG9wdGlvbnMuCi1JZiB5b3Ugc2VsZWN0IHRoZSBjaGVjayBib3gsIGJ5IGRlZmF1bHQgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgd2lsbCBnZW5lcmF0ZSB0aGUgV2ViIHNlcnZpY2VzIHNlcnZlciBhbmQgY2xpZW50IGNvZGUgaW50byBkaWZmZXJlbnQgRUFScy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZW5hYmxlIHRoaXMgZmVhdHVyZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS0gU2VydmVyIGFuZCBSdW50aW1lIFByZWZlcmVuY2UgcGFnZS0tPgotPGNvbnRleHQgaWQ9IlNSUEYwMDAxIj4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIGRlZmF1bHQgV2ViIHNlcnZlciB0byBiZSB1c2VkIGZvciBXZWIgc2VydmljZSBjcmVhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlNSUEYwMDAyIj4KLTwhLS1ydW50aW1lIHByZWZlcmVuY2Ugb24gdGhlIHNlcnZlciBydW50aW1lIHByZWZlcmVuY2UgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgZGVmYXVsdCBzZXJ2ZXIgcnVuLXRpbWUgZW52aXJvbm1lbnQgdG8gYmUgdXNlZCBmb3IgV2ViIHNlcnZpY2UgY3JlYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLSBTdGFydCBzZXJ2ZXIgcGFnZS0tPgotPGNvbnRleHQgaWQ9IlNTV1AwMDAxIj4KLTxkZXNjcmlwdGlvbj5JZiB5b3UgaGF2ZSBjaG9zZW4gdG8gaW5zdGFsbCwgc3RhcnQsIG9yIGRlcGxveSB0aGUgV2ViIHNlcnZpY2UsIHRoZSBzZXJ2ZXIgbmVlZHMgdG8gYmUgc3RhcnRlZCBiZWZvcmUgdGhlIHdpemFyZCBjYW4gcHJvY2VlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tIEVKQiBzZWxlY3Rpb24gd2lkZ2V0LS0+Ci08Y29udGV4dCBpZD0iUEVCRDAwMDEiPgotPCEtLSBFQVIgUHJvamVjdHMgZHJvcC1kb3duIGJveCAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgZnJvbSB0aGUgbGlzdGVkIEVBUiBwcm9qZWN0cy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEVCRDAwMDIiPgotPCEtLSBUYWJsZSBjb250YWluaW5nIGFsbCBvZiB0aGUgYmVhbiBuYW1lcyAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgZnJvbSB0aGUgbGlzdGVkIEphdmEgYmVhbnMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVdlYlNlcnZpY2VUUEJlYW5DbGFzc1BhZ2UuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBCQ0wwMDAxIj4KLTwhLS1QQkNMMDAwMSBmb3IgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgSmF2YSBiZWFuIG9yIGNsYXNzIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0wwMDAyIj4KLTwhLS1QQkNMMDAwMiBmb3IgdGhlIEJlYW4gU2VsZWN0aW9uIGZpZWxkIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbiB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuIERlZmF1bHRzIHRvIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uIENsaWNrIEJyb3dzZSBjbGFzc2VzIHRvIHZpZXcgdGhlIGJlYW4gY2xhc3Mgb2YgdGhlIHNlbGVjdGVkIEphdmEgYmVhbi4gVGhlIGJlYW4gY2xhc3MgaXMgYSBtb2RlbCBvciB0ZW1wbGF0ZSAoYW4gYWJzdHJhY3QgZGF0YSB0eXBlKSB0aGF0IGNhbiBiZSBpbnN0YW50aWF0ZWQgdG8gY3JlYXRlIG9iamVjdHMgd2l0aCBhIGNvbW1vbiBkZWZpbml0aW9uIGFuZCB0aGVyZWZvcmUsIGNvbW1vbiBwcm9wZXJ0aWVzLCBvcGVyYXRpb25zLCBhbmQgYmVoYXZpb3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQkNMMDAwMyI+Ci08IS0tUEJDTDAwMDMgZm9yIHRoZSBCZWFuIENsYXNzIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0byB2aWV3IHRoZSBiZWFuIGNsYXNzIG9mIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQkNMMDAwNCI+Ci08IS0tUEJDTDAwMDQgZm9yIHRoZSBCZWFuIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Ccm93c2UgdG8gdGhlIGNvcnJlY3QgSmF2YSBiZWFuIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTwhLS1XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEtLT4KLTxjb250ZXh0IGlkPSJQQ09OMDAwMSI+Ci08IS0tIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLiBCeSBkZWZhdWx0IFdTREwgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZC4gWW91IGNhbiBlbmFibGUgaXQgdGhyb3VnaCBQcmVmZXJlbmNlcyA+IFdlYiBTZXJ2aWNlcyA+IFdpemFyZCBWYWxpZGF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQ09OMDAwMiI+Ci08IS0tIFdTREwgRG9jdW1lbnQgdGV4dCBmaWVsZCBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBwYXRoIHRvIGEgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDMiPgotPCEtLSBXU0RMIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Ccm93c2UgdG8gdGhlIGxvY2F0aW9uIG9mIGEgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDQiPgotPCEtLSAgZm9yIHRoZSBXaXphcmQgV1NETCBWYWxpZGF0aW9uIHRhYmxlIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyB0YWJsZSBsaXN0cyBhbnkgaXNzdWVzIHRoZSBXU0RMIHZhbGlkYXRvciBtYXkgaGF2ZSBlbmNvdW50ZXJlZCB3aGlsZSBleGFtaW5pbmcgdGhlIHNwZWNpZmllZCBXU0RMIGZpbGUuIEJ5IGRlZmF1bHQgV1NETCB2YWxpZGF0aW9uIGlzIGRpc2FibGVkLiBZb3UgY2FuIGVuYWJsZSBpdCB0aHJvdWdoIFByZWZlcmVuY2VzID4gV2ViIFNlcnZpY2VzID4gV2l6YXJkIFZhbGlkYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBDT04wMDA1Ij4KLTwhLS0gIFdpemFyZCBXU0RMIFZhbGlkYXRpb24gc3VtbWFyeSBtZXNzYWdlIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyB0YWJsZSBsaXN0cyBhbnkgaXNzdWVzIHRoZSBXU0RMIHZhbGlkYXRvciBtYXkgaGF2ZSBlbmNvdW50ZXJlZCB3aGlsZSBleGFtaW5pbmcgdGhlIHNwZWNpZmllZCBXU0RMIGZpbGUuIEJ5IGRlZmF1bHQgV1NETCB2YWxpZGF0aW9uIGlzIGRpc2FibGVkLiBZb3UgY2FuIGVuYWJsZSBpdCB0aHJvdWdoIFByZWZlcmVuY2VzID4gV2ViIFNlcnZpY2VzID4gV2l6YXJkIFZhbGlkYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBDT04wMDA2Ij4KLTwhLS0gIFN0b3AgV2l6YXJkIFdTREwgVmFsaWRhdGlvbiBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIGJ1dHRvbiB0byBzdG9wIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2cuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBXUlMwMDAxIj4KLTwhLS0gIFJ1bi10aW1lL3NlcnZlcnMgaW4gdGhlIFdlYiBTZXJ2aWNlIHR5cGUtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHNjZW5hcmlvIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bnRpbWUgZW52aXJvbm1lbnRzLCBzZXJ2ZXJzLCBhbmQgcHJvamVjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDAyIj4KLTwhLS0gIHNlcnZpY2Utc2lkZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcnVudGltZSBlbnZpcm9ubWVudCB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCB1c2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDAzIj4KLTwhLS0gc2VydmljZS1zaWRlIHNlcnZlciBzZWxlY3Rpb24gb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgc2VydmVyIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIHJ1bi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDUiPgotPCEtLSAgcnVudGltZSB2aWV3IHJhZGlvIGJ1dHRvbi0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIHZpZXcgdG8gc2VlIHJ1bnRpbWUvc2VydmVyIGNvbWJpbmF0aW9ucyBzb3J0ZWQgYnkgcnVudGltZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDYiPgotPCEtLXNlcnZlciB2aWV3IHJhZGlvIGJ1dHRvbi0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIHZpZXcgdG8gc2VlIHJ1bnRpbWUvc2VydmVyIGNvbWJpbmF0aW9ucyBzb3J0ZWQgYnkgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwNyI+Ci08IS0tICBjZXhwbG9yZSB2aWV3IHJhZGlvIGJ1dHRvbi0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIHZpZXcgdG8gZXhwbG9yZSBhdmFpbGFibGUgcnVudGltZS9zZXJ2ZXIgY29tYmluYXRpb25zLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPCEtLVByb2plY3RTZWxlY3Rpb25XaWRnZXQuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBXUlMwMDE2Ij4KLTwhLS0gIHNlcnZpY2Utc2lkZSBXZWIgcHJvamVjdCBjb21ibyBib3ggb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBwcm9qZWN0IGluIHdoaWNoIHRoZSBXZWIgc2VydmljZSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLiBUaGUgd2l6YXJkIHdpbGwgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDE4Ij4KLTwhLS0gY2xpZW50IHR5cGUgY29tYm8gYm94ICAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgZnJvbSB0aGUgbGlzdGVkIHByb2plY3QgdHlwZXMgdGhlIHR5cGUgb2YgcHJvamVjdCB0aGF0IHlvdSB3YW50IGNyZWF0ZWQgdG8gY29udGFpbiB5b3VyIFdlYiBzZXJ2aWNlIGNsaWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMjAiPgotPCEtLSBzZXJ2aWNlIHByb2plY3QgdHlwZSBjb21ibyBib3ggLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGZyb20gdGhlIGxpc3RlZCBwcm9qZWN0IHR5cGVzIHRoZSB0eXBlIG9mIHByb2plY3QgdGhhdCB5b3Ugd2FudCBjcmVhdGVkIHRvIGNvbnRhaW4geW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTxjb250ZXh0IGlkPSJQV1NNMDAwMSI+Ci08IS0tIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDIiPgotPCEtLSBUZXN0IGNoZWNrIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+SWYgc2VsZWN0ZWQgd2lsbCBsYXVuY2ggdGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gaW4gdGhlIFdlYiBicm93c2VyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwMyI+Ci08IS0tIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDYiPgotPCEtLSBTZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gYWRkIGFsbCB0aGUgYXZhaWxhYmxlIG1ldGhvZHMgdG8gdGhlIFdlYiBzZXJ2aWNlIHNhbXBsZSBwcm94eS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDciPgotPCEtLSBEZXNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIGJ1dHRvbiB0byByZW1vdmUgYWxsIHRoZSBhdmFpbGFibGUgbWV0aG9kcyB0byB0aGUgV2ViIHNlcnZpY2Ugc2FtcGxlIHByb3h5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwOCI+Ci08IS0tIEpTUCBGb2xkZXIgZmllbGQgb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkZvbGRlciBpbnRvIHdoaWNoIHlvdXIgV2ViIHNlcnZpY2UgSlNQcyBhcmUgZGVwb3NpdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwOSI+Ci08IS0tIEpTUCBGb2xkZXIgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gZmluZCB0aGUgZm9sZGVyIGludG8gd2hpY2ggeW91ciBXZWIgc2VydmljZSBKU1BzIGFyZSBkZXBvc2l0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDEwIj4KLTwhLS0gUHJvamVjdCBjb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBhbiBleGlzdGluZyBwcm9qZWN0IGludG8gd2hpY2ggeW91ciBzYW1wbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDE0Ij4KLTwhLS0gRm9sZGVyIGZpZWxkIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5Gb2xkZXIgaW50byB3aGljaCB0aGUgZnVsbHkgcXVhbGlmaWVkIHByb3h5IGlzIGdlbmVyYXRlZC4gRGVmYXVsdHMgdG8gdGhlIHNvdXJjZSBmb2xkZXIgaW5zaWRlIG9mIHlvdXIgV2ViIHByb2plY3QuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDE1Ij4KLTwhLS0gUnVuIHRlc3QgY2hlY2sgYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gcnVuIHRoZSBzYW1wbGUgYXBwbGljYXRpb24gb24gdGhlIHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMTYiPgotPCEtLSBFQVIgY29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIEVBUiBpbiB3aGljaCB5b3Ugd2FudCB5b3VyIFdlYiBzZXJ2aWNlIHNhbXBsZSBhcHBsaWNhdGlvbiBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS0gaGFuZGxlciB3aXphcmQtLT4KLTxjb250ZXh0IGlkPSJBSERMMDAwMSI+Ci08IS0tSGFuZGxlciBjb25maWcgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHdpemFyZCB0byBhZGQgYW5kIHJlbW92ZSBoYW5kbGVycyBmb3IgYSBXZWIgc2VydmljZS4gVGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZCByZXByZXNlbnRzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgaGFuZGxlcnMgd2lsbCBiZSBhY3RlZCB1cG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iQUhETDAwMDIiPgotPCEtLUhhbmRsZXIgY29uZmlnIHBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyB3aXphcmQgdG8gYWRkIGFuZCByZW1vdmUgaGFuZGxlcnMgZm9yIGEgV2ViIHNlcnZpY2UuIFRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQgcmVwcmVzZW50cyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGhhbmRsZXJzIHdpbGwgYmUgYWN0ZWQgdXBvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IkFIREwwMDAzIj4KLTwhLS1IYW5kbGVyIGNvbmZpZyBwYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgd2l6YXJkIHRvIGFkZCBhbmQgcmVtb3ZlIGhhbmRsZXJzIGZvciBhIFdlYiBzZXJ2aWNlLiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgbGlzdGVkIHJlcHJlc2VudHMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBoYW5kbGVycyB3aWxsIGJlIGFjdGVkIHVwb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi0KLTwhLS1XZWJTZXJ2aWNlV2l6TmV3Rmlyc3RQYWdlLS0+Ci08Y29udGV4dCBpZD0iV1NXU0NFTjAwMDEiPgotPCEtLSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+T24gdGhpcyBwYWdlIHNlbGVjdCB0aGUgYXJ0aWZhY3QgZnJvbSB3aGljaCB5b3VyIFdlYiBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLCBhbmQgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudAotdG8gY29tcGxldGU6Ci0tIERldmVsb3A6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGNsaWVudCBjb2RlCi0tIEFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgY2xpZW50IGdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlcgotLSBEZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIGNsaWVudAotLSBJbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgY2xpZW50IG9uIHRoZSBjaG9zZW4gc2VydmVyCi0tIFN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBjbGllbnQgaGFzIGJlZW4gaW5zdGFsbGVkIG9uIGl0Ci0tIFRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgY2xpZW50Ci1TZWxlY3QgdGhlIHNlcnZlciBhbmQgcnVudGltZSBmb3IgeW91ciBXZWIgY2xpZW50LCBhbmQgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8gcHVibGlzaCBvciBtb25pdG9yIHRoZSBzZXJ2aWNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDE0Ij4KLTwhLS1Nb25pdG9yIGNoZWNrYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkIGJ5IHRoZSBXZWIgc2VydmljZSBhbmQgdG8gdGVzdCB0aGlzIHRyYWZmaWMgZm9yIFdTLUkgY29tcGxpYW5jZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjAiPgotPCEtLVNlcnZpY2UgaW1wbGVtZW50YXRpb24gZmllbGQgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjIiPgotPCEtLVNlcnZlciBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3Ugd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHNlcnZlciBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjMiPgotPCEtLXJ1bnRpbWUgbGluayBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB5b3VyIHJ1bnRpbWU6IHRoZSBkZWZhdWx0IHJ1bnRpbWUgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBydW50aW1lIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHJ1bnRpbWUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI0Ij4KLTwhLS1wcm9qZWN0cyBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzZXJ2aWNlIHByb2plY3Q6IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHByb2plY3QKLXNlbGVjdGVkIGluIHlvdXIgd29ya3NwYWNlIGlzIGRpc3BsYXllZC4gVG8gc2VsZWN0IGEgZGlmZmVyZW50IHByb2plY3QgYW5kCi1FQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay4gRW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQKLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQotc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyNSI+Ci08IS0tY2xpZW50IHR5cGUgY29tYm8gb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGUgSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0aGF0IGlzIGdlbmVyYXRlZCBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyNiI+Ci08IS0tQ2xpZW50IHNsaWRlciBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBjbGllbnQgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudAotdG8gY29tcGxldGUgdXNpbmcgdGhlIHNsaWRlcjoKLS0gRGV2ZWxvcDogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgY2xpZW50IGNvZGUKLS0gQXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBjbGllbnQgZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyCi0tIERlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgY2xpZW50Ci0tIEluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIHRoZSBjbGllbnQgb24gdGhlIGNob3NlbiBzZXJ2ZXIKLS0gU3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIGNsaWVudCBoYXMgYmVlbiBpbnN0YWxsZWQgb24gaXQKLS0gVGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBjbGllbnQKLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAzMCI+Ci08IS0tZmlsZSBvdmVyd3JpdGUgY2hlY2tib3ggb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uIHdoZW4gb3ZlcndyaXRpbmcgZmlsZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTSUwwMDAxIj4KLTwhLS0gIFdTSUwgSW1wb3J0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYSBzdGFuZGFyZGl6ZWQgV1NETCByZWZlcmVuY2UgKFdTSUwpIGRvY3VtZW50IGluIHlvdXIgcHJvamVjdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NJTDAwMDIiPgotPCEtLSAgV1NJTCBUZXh0IGZpZWxkLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIG5hbWUgb2YgdGhlIFdTSUwgZG9jdW1lbnQgYmVpbmcgZ2VuZXJhdGVkLCBvciBhY2NlcHQgdGhlIGRlZmF1bHQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTSUwwMDAzIj4KLTwhLS0gIFdTSUwgYnJvd3NlIGJ1dHRvbi0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgbG9jYXRpb24gb2YgYSBXU0RMIG9yIFdTSUwgZmlsZSBmcm9tIHdoaWNoIHRoZSBuZXcgV1NJTCBkb2N1bWVudCB3aWxsIGJlIGdlbmVyYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NJTDAwMDQiPgotPCEtLSAgV1NJTCB0YWJsZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgbGlzdHMgYWxsIHRoZSBXU0RMIFVSSXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBXU0lMIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwMSI+Ci08IS0tIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgeW91IHdhbnQgdG8gZ2VuZXJhdGUgYW5kIGFueSBmaWxlIGFuZCBmb2xkZXIgb3B0aW9ucyBmb3IgeW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDMiPgotPCEtLU92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHdhcm5pbmcgKGNoZWNrYm94KS0tPgotPGRlc2NyaXB0aW9uPkFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uIHdoZW4gb3ZlcndyaXRpbmcgZmlsZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDA0Ij4KLTwhLS1DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeSAoY2hlY2tib3gpLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRvIGNyZWF0ZSBmb2xkZXJzIGFuZCBmb2xkZXIgc3RydWN0dXJlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDUiPgotPCEtLSAgR2VuZXJhdGUgUHJveHkgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+VGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDYiPgotPCEtLSAgVGVzdCBQcm94eSBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwOSI+Ci08IS0tICBTdGFydCBXZWIgUHJvamVjdCBjaGVjayBib3ggY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gc3RhcnQgdGhlIHNlcnZlci4gSWYgeW91IGxlYXZlIHRoZSBib3ggdW5jaGVja2VkIHlvdSB3aWxsIGhhdmUgdG8gbWFudWFsbHkgc3RhcnQgdGhlIHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTAiPgotPCEtLSBXZWIgU2VydmljZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBidWlsZC4gWW91ciBzZWxlY3Rpb24gd2lsbCBhZmZlY3QgdGhlIGZpbGVzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMSI+Ci08IS0tICBXaXphcmQgU2NlbmFyaW8gU2VydmljZSBncm91cCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBidWlsZC4gWW91ciBzZWxlY3Rpb24gd2lsbCBhZmZlY3QgdGhlIGZpbGVzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMSI+Ci08IS0tICBUZXN0IHNlcnZpY2UgY2hlY2tib3ggb2YgdGhlIHByb2plY3QgcGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gbGF1bmNoIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIG9yZGVyIHRvIGV4YW1pbmUgaXQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDEyIj4KLTwhLS0gIExhdW5jaCBVRERJIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrYm94IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIG9yZGVyIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTMiPgotPCEtLSAgV2l6YXJkIFNjZW5hcmlvIENsaWVudCBncm91cCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlRoZSBnZW5lcmF0ZWQgSmF2YSBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDE0Ij4KLTwhLS0gIFdlYiBTZXJ2aWNlIENsaWVudCBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgY2xpZW50IHByb3h5IHR5cGUuIFRoZSBnZW5lcmF0ZWQgSmF2YSBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDE1Ij4KLTwhLS0gIENoZWNrIE91dCBGaWxlcyBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdG8gY2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPGNvbnRleHQgaWQ9IlBXUEIwMDAxIj4KLTwhLS0gIFVEREkgUHVibGlzaCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBhbGxvdyB5b3UgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUEIwMDAyIj4KLTwhLS0gIFVEREkgTGF1bmNoIGNoZWNrIGJveCBvZiB0aGUgVURESSBQdWJsaXNoIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5JZiBzZWxlY3RlZCB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGFsbG93IHlvdSB0byBwdWJsaXNoIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdXUzAwMDEiPgotPCEtLSAgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXV1MwMDAyIj4KLTwhLS0gIFdTREwgRG9jdW1lbnQgdGV4dCBmaWVsZCBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBwYXRoIHRvIGEgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdXUzAwMDMiPgotPCEtLSAgV1NETCBSZXNvdXJjZSBCcm93c2UgYnV0dG9uIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+QnJvd3NlIHRvIHRoZSBsb2NhdGlvbiBvZiBhIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08Y29udGV4dCBpZD0iREJBUzAwMDEiPgotPCEtLSBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHVzZXIgbmFtZSAtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgdXNlciBuYW1lIHVzZWQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IkRCQVMwMDAyIj4KLTwhLS0gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiBwYXNzd29yZCAtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgcGFzc3dvcmQgdXNlZCBmb3IgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLQotPC9jb250ZXh0cz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3NjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTM3N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotCi08Y29udGV4dCBpZD0iUFNUUDAwMDEiPgotPCEtLSAgVGVzdCBUeXBlIENvbWJvIGJveCBvZiB0aGUgU2VydmljZSBUZXN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgaW4gd2hpY2ggeW91IHdvdWxkIGxpa2UgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFNUUDAwMDIiPgotPCEtLSAgTGF1bmNoIGJ1dHRvbiBvZiB0aGUgU2VydmljZSBUZXN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIHRvIGxhdW5jaCB0aGUgV2ViIHNlcnZpY2UgaW4gYSBicm93c2VyIHdpbmRvdyB0byB0ZXN0IGl0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1XZWJTZXJ2aWNlV2l6TmV3Rmlyc3RQYWdlLS0+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAwMSI+Ci08IS0tIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5PbiB0aGlzIHBhZ2Ugc2VsZWN0IHRoZSBhcnRpZmFjdCBmcm9tIHdoaWNoIHlvdXIgV2ViIHNlcnZpY2Ugb3IgY2xpZW50IHdpbGwgYmUgY3JlYXRlZCwgYW5kIHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQgdG8gY29tcGxldGU6Ci0tIERldmVsb3A6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIHNlcnZpY2UgY29kZQotLSBBc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudCBnZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIKLS0gRGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlCi0tIEluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIHRoZSBzZXJ2aWNlIG9uIHRoZSBjaG9zZW4gc2VydmVyCi0tIFN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZCBvbiBpdAotLSBUZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIHNlcnZpY2UKLVNlbGVjdCB0aGUgc2VydmVyIGFuZCBydW50aW1lIGZvciB5b3VyIFdlYiBzZXJ2aWNlIG9yIGNsaWVudCwgYW5kIHdoZXRoZXIgb3Igbm90IHlvdSB3YW50IHRvIHB1Ymxpc2ggb3IgbW9uaXRvciB0aGUgc2VydmljZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAxMCI+Ci08IS0tV2ViIHNlcnZpY2UgdHlwZSBjb21ibyBib3ggb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgeW91IHdhbnQgdG8gY3JlYXRlLiBBIGJvdHRvbS11cCBzZXJ2aWNlIGNyZWF0ZXMgYSBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgRUpCLCB3aGlsZSBhIHRvcC1kb3duIHNlcnZpY2Ugd2lsbCBjcmVhdGUgYSBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUgYW5kIHRoZW4gY3JlYXRlIGEgc2tlbGV0b24gSmF2YSBiZWFuIG9yIEVKQiBmb3IgeW91IHRvIGltcGxlbWVudCBsYXRlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMTQiPgotPCEtLU1vbml0b3IgY2hlY2tib3ggb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQgYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAxMiI+Ci08IS0tTGF1bmNoIFVEREkgY2hlY2sgYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+UHVibGlzaCB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMCI+Ci08IS0tU2VydmljZSBpbXBsZW1lbnRhdGlvbiBmaWVsZCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc2VydmljZTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMSI+Ci08IS0tU2VydmljZSBzbGlkZXIgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudCB0byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBzZXJ2aWNlIGNvZGUKLS0gQXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQgZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyCi0tIERlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZQotLSBJbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgc2VydmljZSBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQgb24gaXQKLS0gVGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjIiPgotPCEtLVNlcnZlciBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3Ugd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHNlcnZlciBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjMiPgotPCEtLXJ1bnRpbWUgbGluayBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB5b3VyIHJ1bnRpbWU6IHRoZSBkZWZhdWx0IHJ1bnRpbWUgaXMgZGlzcGxheWVkLiBJZiB5b3Ugd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBydW50aW1lLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyNCI+Ci08IS0tcHJvamVjdHMgbGluayBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0IHNlbGVjdGVkIGluIHlvdXIgd29ya3NwYWNlIGlzIGRpc3BsYXllZC4gVG8gc2VsZWN0IGEgZGlmZmVyZW50IHByb2plY3QgYW5kIEVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZCBhcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUgc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAzMCI+Ci08IS0tZmlsZSBvdmVyd3JpdGUgY2hlY2tib3ggb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uIHdoZW4gb3ZlcndyaXRpbmcgZmlsZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPC9jb250ZXh0cz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTQwZmIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcAotRGl0YUxpbmsuY2F0Ci1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiM2RjYjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZGY1ZWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wNS0wNSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgdG8gYWRkIGdlbmVyYXRpb24gb2YgcHJlLWJ1aWx0IGhlbHAgaW5kZXguIAotCS0gTXVzdCBkZWxldGUgL2luZGV4IGZvbGRlciBiZWZvcmUgcnVubmluZyBidWlsZAotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIzLjMuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249IiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLmluZGV4IiBkZXNjcmlwdGlvbj0iQnVpbGRzIHNlYXJjaCBpbmRleCBmb3IgdGhlIHBsdWctaW4iIGlmPSJlY2xpcHNlLnJ1bm5pbmciPgotCSAgICAgPGhlbHAuYnVpbGRIZWxwSW5kZXggbWFuaWZlc3Q9InBsdWdpbi54bWwiIGRlc3RpbmF0aW9uPSIuIi8+Ci0JPC90YXJnZXQ+CQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjExMTJlZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjU1MC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NTU5YTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbnRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgcmVmLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSAqLm1hcGxpc3QsXAotICAgICAgICAgICAgICAgKi5kaXRhbWFwLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouZGl0YSxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmRpdGEsXAotICAgICAgICAgICAgICAgcmVmLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWFiYjM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3VkZGkiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8L2luZGV4dGVybT48aW5kZXh0ZXJtPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LAotYW5kIEludGVncmF0aW9uIDwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5VRERJPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VURESSBoYXMgdHdvIGZ1bmN0aW9uczogPHVsPgotPGxpPkl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IGNsaWVudHMgY29tbXVuaWNhdGUgd2l0aAotVURESSByZWdpc3RyaWVzLjwvbGk+Ci08bGk+SXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWwgcmVwbGljYXRlZCByZWdpc3RyaWVzLjwvbGk+Ci08L3VsPjwvcD4KLTxwPlVEREkgaW5jbHVkZXMgYW4gWE1MIHNjaGVtYSBmb3IgU09BUCBtZXNzYWdlcyB0aGF0IGRlZmluZXMgYSBzZXQgb2YgZG9jdW1lbnRzCi10byBkZXNjcmliZSBidXNpbmVzcyBhbmQgc2VydmljZXMgaW5mb3JtYXRpb24sIGEgY29tbW9uIHNldCBvZiBBUElzIGZvciBxdWVyeWluZwotYW5kIHB1Ymxpc2hpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGRpcmVjdG9yaWVzLCBhbmQgYW4gQVBJIGZvciByZXBsaWNhdGluZwotZGlyZWN0b3J5IGVudHJpZXMgYmV0d2VlbiBwZWVyIFVEREkgbm9kZXMuPC9wPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVURESSByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIgotc2NvcGU9ImV4dGVybmFsIj53d3cudWRkaS5vcmc8L3hyZWY+PC9wPgotPHNlY3Rpb24+PHRpdGxlPlVEREkgcmVnaXN0cmllczwvdGl0bGU+PHA+VURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViCi1zZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZQotZGVzY3JpcHRpb25zIGltcGxlbWVudGVkIGluIGEgY29tbW9uIFhNTCBmb3JtYXQuIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggeW91cgotYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHB1YmxpYyByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIKLXlvdXIgYnVzaW5lc3MgZW50aXR5IHdpdGggYSBVRERJIHJlZ2lzdHJ5LjwvcD48cD5VRERJIHJlZ2lzdHJpZXMgY29tZSBpbiB0d28KLWZvcm1zOiBwdWJsaWMgYW5kIHByaXZhdGUuJm5ic3A7IEJvdGggdHlwZXMgY29tcGx5IHRvIHRoZSBzYW1lIHNwZWNpZmljYXRpb25zLiZuYnNwOwotQSBwcml2YXRlIHJlZ2lzdHJ5IGVuYWJsZXMgeW91IHRvIHB1Ymxpc2ggYW5kIHRlc3QgeW91ciBpbnRlcm5hbCBlLWJ1c2luZXNzCi1hcHBsaWNhdGlvbnMgaW4mbmJzcDthIHNlY3VyZSwgcHJpdmF0ZSBlbnZpcm9ubWVudC48L3A+PHA+QSBwdWJsaWMgcmVnaXN0cnkKLWlzIGEgY29sbGVjdGlvbiBvZiBwZWVyIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBidXNpbmVzc2VzCi1hbmQgc2VydmljZXMuIEl0IGxvY2F0ZXMgc2VydmljZXMgdGhhdCBhcmUgcmVnaXN0ZXJlZCBhdCBvbmUgb2YgaXRzIHBlZXIgbm9kZXMKLWFuZCBmYWNpbGl0YXRlcyB0aGUgZGlzY292ZXJ5IG9mIHB1Ymxpc2hlZCBXZWIgc2VydmljZXMuIERhdGEgaXMgcmVwbGljYXRlZAotYXQgZWFjaCBvZiB0aGUgcmVnaXN0cmllcyBvbiBhIHJlZ3VsYXIgYmFzaXMuIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW5jeSBpbgotc2VydmljZSBkZXNjcmlwdGlvbiBmb3JtYXRzIGFuZCBtYWtlcyBpdCBlYXN5IHRvIHRyYWNrIGNoYW5nZXMgYXMgdGhleSBvY2N1ci4gPHRtCi10bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBtYWludGFpbnMKLXR3byBwdWJsaWMgcmVnaXN0cmllcyBjYWxsZWQgdGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIKLXRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESSBCdXNpbmVzcyBSZWdpc3RyeSBhbmQgdGhlIDx0bSB0bWNsYXNzPSJpYm0iCi10bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESSBUZXN0Ci1SZWdpc3RyeS4gVGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJCi1UZXN0IFJlZ2lzdHJ5IGFsbG93cyB5b3UgdG8gZGV2ZWxvcCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBleHBlcmllbmNlIHRoZSBVRERJCi1yZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRob3V0IHBsYWNpbmcgeW91ciBXZWIgc2VydmljZSBpbiBhbiBvZmZpY2lhbCByZWdpc3RyeS4mbmJzcDsKLVVzZSB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkKLVRlc3QgUmVnaXN0cnkgdG8gZXhwZXJpbWVudCB3aXRoIFVEREksIGFuZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSB5b3VyIFdlYiBzZXJ2aWNlLiZuYnNwOwotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIElCTSdzIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vdWRkaS5pYm0uY29tPC94cmVmPiBGb3IKLWEgbGlzdCBvZiBwdWJsaWMgcmVnaXN0cmllcywgcmVmZXIgdG8gIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvcmVnaXN0ZXIuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC94cmVmPjwvcD48cD5BIHByaXZhdGUKLXJlZ2lzdHJ5IGFsbG93cyB5b3UgdG8gcHVibGlzaCBhbmQgdGVzdCB5b3VyIGludGVybmFsIGFwcGxpY2F0aW9ucyBpbiBhIHNlY3VyZSwKLXByaXZhdGUgZW52aXJvbm1lbnQuPC9wPjxwPlRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGFjdHMgYXMgYSBCMkIgZGlyZWN0b3J5Ci1saW5raW5nIG1hcmtldHBsYWNlcywgYnV5ZXJzLCBhbmQgc2VsbGVycy4gVGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoZQotcmVnaXN0cnkgY29uc2lzdHMgb2YgdGhyZWUgY29tcG9uZW50czogd2hpdGUgcGFnZXMsIHllbGxvdyBwYWdlcywgYW5kIGdyZWVuCi1wYWdlcy4gV2hpdGUgcGFnZXMgaW5jbHVkZSB0aGUgYnVzaW5lc3MgbmFtZSwgY29udGFjdCBpbmZvcm1hdGlvbiwgYW5kIGEgdGV4dAotZGVzY3JpcHRpb24gb2YgdGhlIGJ1c2luZXNzJ3Mgc2VydmljZXMuIFllbGxvdyBwYWdlcyBpbmNsdWRlIGluZHVzdHJpYWwgY2F0ZWdvcml6YXRpb25zCi1iYXNlZCBvbiBzdGFuZGFyZCB0YXhvbm9taWVzIHN1Y2ggYXMgTkFJQ1MsIElTTyAzMTY2LCBhbmQgVU5TUFNDLiBHcmVlbiBwYWdlcwotaW5jbHVkZSByZWZlcmVuY2VzIHRvIHNwZWNpZmljYXRpb25zIGZvciBXZWIgc2VydmljZXMgYW5kIHBvaW50ZXJzIHRvIHZhcmlvdXMKLWZpbGUgYW5kIFVSTC1iYXNlZCBkaXNjb3ZlcnkgbWVjaGFuaXNtcy4gVGhpcyBtYWtlcyBpdCBlYXN5IGZvciBidXNpbmVzc2VzCi10byBpbnRlZ3JhdGUgYWNyb3NzIG1hcmtldHBsYWNlcy4gQmVjYXVzZSBpdCBpcyByZWdpc3RlcmVkLCBpbmZvcm1hdGlvbiBpcwotbWFkZSBhdmFpbGFibGUgYWNyb3NzIGFsbCBhcHBsaWNhdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BSUNTIHJlZmVyCi10byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3Lm5haWNzLmNvbSIgc2NvcGU9ImV4dGVybmFsIj53d3cubmFpY3MuY29tPC94cmVmPiBGb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gVU5TUFNDIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudW5zcHNjLm9yZyIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LnVuc3BzYy5vcmc8L3hyZWY+IEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIElTTyAzMTY2IHJlZmVyCi10byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2VuL3Byb2RzLXNlcnZpY2VzL2lzbzMxNjZtYS9pbmRleC5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vd3d3Lmlzby5vcmcvaXNvL2VuL3Byb2RzLXNlcnZpY2VzL2lzbzMxNjZtYS9pbmRleC5odG1sPC94cmVmPjwvcD48cD5CdXNpbmVzc2VzCi1wb3B1bGF0ZSB0aGUgcmVnaXN0cnkgd2l0aCBkZXNjcmlwdGlvbnMgb2YgdGhlIHNlcnZpY2VzIHRoYXQgdGhleSBzdXBwb3J0LgotVURESSBhc3NpZ25zIGEgdW5pcXVlIGlkZW50aWZpZXIgdG8gZWFjaCBzZXJ2aWNlIGRlc2NyaXB0aW9uIGFuZCBidXNpbmVzcwotcmVnaXN0cmF0aW9uLiBUaGVzZSBiZWNvbWUgdGhlIHNlcnZpY2UgYW5kIGJ1c2luZXNzIGtleXMgcmVzcGVjdGl2ZWx5LiBTZWFyY2gKLWVuZ2luZXMsIGFuZCBhcHBsaWNhdGlvbnMgcXVlcnkgdGhlIHJlZ2lzdHJ5IHRvIGRpc2NvdmVyIHNlcnZpY2VzLiBVRERJIHNlcnZlcnMKLWFyZSBhIGRpcmVjdG9yeSBvZiBhdmFpbGFibGUgc2VydmljZXMgYW5kIHNlcnZpY2UgcHJvdmlkZXJzLjwvcD48L3NlY3Rpb24+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2RsdWQuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhYTg4My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiwgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiwgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NkbHVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbHVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN1ZGRpIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN1ZGRpIj48YSBuYW1lPSJjdWRkaSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2gxPgotCi0KLQotCi08ZGl2PjxwPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24KLWRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+VURESSBoYXMgdHdvIGZ1bmN0aW9uczogPHVsPgotPGxpPkl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IGNsaWVudHMgY29tbXVuaWNhdGUgd2l0aAotVURESSByZWdpc3RyaWVzLjwvbGk+Ci0KLTxsaT5JdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbCByZXBsaWNhdGVkIHJlZ2lzdHJpZXMuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08cD5VRERJIGluY2x1ZGVzIGFuIFhNTCBzY2hlbWEgZm9yIFNPQVAgbWVzc2FnZXMgdGhhdCBkZWZpbmVzIGEgc2V0IG9mIGRvY3VtZW50cwotdG8gZGVzY3JpYmUgYnVzaW5lc3MgYW5kIHNlcnZpY2VzIGluZm9ybWF0aW9uLCBhIGNvbW1vbiBzZXQgb2YgQVBJcyBmb3IgcXVlcnlpbmcKLWFuZCBwdWJsaXNoaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBkaXJlY3RvcmllcywgYW5kIGFuIEFQSSBmb3IgcmVwbGljYXRpbmcKLWRpcmVjdG9yeSBlbnRyaWVzIGJldHdlZW4gcGVlciBVRERJIG5vZGVzLjwvcD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVURESSByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPnd3dy51ZGRpLm9yZzwvYT48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5VRERJIHJlZ2lzdHJpZXM8L2g0PjxwPlVEREkgbWFuYWdlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYgotc2VydmljZXMgYnkgcmVseWluZyBvbiBhIGRpc3RyaWJ1dGVkIHJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyIHNlcnZpY2UKLWRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LiBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIHlvdXIKLWJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBwdWJsaWMgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyCi15b3VyIGJ1c2luZXNzIGVudGl0eSB3aXRoIGEgVURESSByZWdpc3RyeS48L3A+Ci08cD5VRERJIHJlZ2lzdHJpZXMgY29tZSBpbiB0d28KLWZvcm1zOiBwdWJsaWMgYW5kIHByaXZhdGUuwqAgQm90aCB0eXBlcyBjb21wbHkgdG8gdGhlIHNhbWUgc3BlY2lmaWNhdGlvbnMuwqAKLUEgcHJpdmF0ZSByZWdpc3RyeSBlbmFibGVzIHlvdSB0byBwdWJsaXNoIGFuZCB0ZXN0IHlvdXIgaW50ZXJuYWwgZS1idXNpbmVzcwotYXBwbGljYXRpb25zIGluwqBhIHNlY3VyZSwgcHJpdmF0ZSBlbnZpcm9ubWVudC48L3A+Ci08cD5BIHB1YmxpYyByZWdpc3RyeQotaXMgYSBjb2xsZWN0aW9uIG9mIHBlZXIgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMKLWFuZCBzZXJ2aWNlcy4gSXQgbG9jYXRlcyBzZXJ2aWNlcyB0aGF0IGFyZSByZWdpc3RlcmVkIGF0IG9uZSBvZiBpdHMgcGVlciBub2RlcwotYW5kIGZhY2lsaXRhdGVzIHRoZSBkaXNjb3Zlcnkgb2YgcHVibGlzaGVkIFdlYiBzZXJ2aWNlcy4gRGF0YSBpcyByZXBsaWNhdGVkCi1hdCBlYWNoIG9mIHRoZSByZWdpc3RyaWVzIG9uIGEgcmVndWxhciBiYXNpcy4gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGluCi1zZXJ2aWNlIGRlc2NyaXB0aW9uIGZvcm1hdHMgYW5kIG1ha2VzIGl0IGVhc3kgdG8gdHJhY2sgY2hhbmdlcyBhcyB0aGV5IG9jY3VyLiBJQk08c3VwPsKuPC9zdXA+IG1haW50YWlucwotdHdvIHB1YmxpYyByZWdpc3RyaWVzIGNhbGxlZCB0aGUgSUJNIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgYW5kIHRoZSBJQk0gVURESSBUZXN0Ci1SZWdpc3RyeS4gVGhlIElCTSBVRERJCi1UZXN0IFJlZ2lzdHJ5IGFsbG93cyB5b3UgdG8gZGV2ZWxvcCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBleHBlcmllbmNlIHRoZSBVRERJCi1yZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRob3V0IHBsYWNpbmcgeW91ciBXZWIgc2VydmljZSBpbiBhbiBvZmZpY2lhbCByZWdpc3RyeS7CoAotVXNlIHRoZSBJQk0gVURESQotVGVzdCBSZWdpc3RyeSB0byBleHBlcmltZW50IHdpdGggVURESSwgYW5kIHRvIHRlc3QgYW5kIHZhbGlkYXRlIHlvdXIgV2ViIHNlcnZpY2UuwqAKLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBJQk0ncyBwdWJsaWMgcmVnaXN0cmllcywgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly91ZGRpLmlibS5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vdWRkaS5pYm0uY29tPC9hPiBGb3IKLWEgbGlzdCBvZiBwdWJsaWMgcmVnaXN0cmllcywgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvcmVnaXN0ZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cudWRkaS5vcmcvcmVnaXN0ZXIuaHRtbDwvYT48L3A+Ci08cD5BIHByaXZhdGUKLXJlZ2lzdHJ5IGFsbG93cyB5b3UgdG8gcHVibGlzaCBhbmQgdGVzdCB5b3VyIGludGVybmFsIGFwcGxpY2F0aW9ucyBpbiBhIHNlY3VyZSwKLXByaXZhdGUgZW52aXJvbm1lbnQuPC9wPgotPHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgYWN0cyBhcyBhIEIyQiBkaXJlY3RvcnkKLWxpbmtpbmcgbWFya2V0cGxhY2VzLCBidXllcnMsIGFuZCBzZWxsZXJzLiBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlCi1yZWdpc3RyeSBjb25zaXN0cyBvZiB0aHJlZSBjb21wb25lbnRzOiB3aGl0ZSBwYWdlcywgeWVsbG93IHBhZ2VzLCBhbmQgZ3JlZW4KLXBhZ2VzLiBXaGl0ZSBwYWdlcyBpbmNsdWRlIHRoZSBidXNpbmVzcyBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgYSB0ZXh0Ci1kZXNjcmlwdGlvbiBvZiB0aGUgYnVzaW5lc3MncyBzZXJ2aWNlcy4gWWVsbG93IHBhZ2VzIGluY2x1ZGUgaW5kdXN0cmlhbCBjYXRlZ29yaXphdGlvbnMKLWJhc2VkIG9uIHN0YW5kYXJkIHRheG9ub21pZXMgc3VjaCBhcyBOQUlDUywgSVNPIDMxNjYsIGFuZCBVTlNQU0MuIEdyZWVuIHBhZ2VzCi1pbmNsdWRlIHJlZmVyZW5jZXMgdG8gc3BlY2lmaWNhdGlvbnMgZm9yIFdlYiBzZXJ2aWNlcyBhbmQgcG9pbnRlcnMgdG8gdmFyaW91cwotZmlsZSBhbmQgVVJMLWJhc2VkIGRpc2NvdmVyeSBtZWNoYW5pc21zLiBUaGlzIG1ha2VzIGl0IGVhc3kgZm9yIGJ1c2luZXNzZXMKLXRvIGludGVncmF0ZSBhY3Jvc3MgbWFya2V0cGxhY2VzLiBCZWNhdXNlIGl0IGlzIHJlZ2lzdGVyZWQsIGluZm9ybWF0aW9uIGlzCi1tYWRlIGF2YWlsYWJsZSBhY3Jvc3MgYWxsIGFwcGxpY2F0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFJQ1MgcmVmZXIKLXRvICA8YSBocmVmPSJodHRwOi8vd3d3Lm5haWNzLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5uYWljcy5jb208L2E+IEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiBVTlNQU0MgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudW5zcHNjLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPnd3dy51bnNwc2Mub3JnPC9hPiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBJU08gMzE2NiByZWZlcgotdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lmlzby5vcmcvaXNvL2VuL3Byb2RzLXNlcnZpY2VzL2lzbzMxNjZtYS9pbmRleC5odG1sPC9hPjwvcD4KLTxwPkJ1c2luZXNzZXMKLXBvcHVsYXRlIHRoZSByZWdpc3RyeSB3aXRoIGRlc2NyaXB0aW9ucyBvZiB0aGUgc2VydmljZXMgdGhhdCB0aGV5IHN1cHBvcnQuCi1VRERJIGFzc2lnbnMgYSB1bmlxdWUgaWRlbnRpZmllciB0byBlYWNoIHNlcnZpY2UgZGVzY3JpcHRpb24gYW5kIGJ1c2luZXNzCi1yZWdpc3RyYXRpb24uIFRoZXNlIGJlY29tZSB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3Mga2V5cyByZXNwZWN0aXZlbHkuIFNlYXJjaAotZW5naW5lcywgYW5kIGFwcGxpY2F0aW9ucyBxdWVyeSB0aGUgcmVnaXN0cnkgdG8gZGlzY292ZXIgc2VydmljZXMuIFVEREkgc2VydmVycwotYXJlIGEgZGlyZWN0b3J5IG9mIGF2YWlsYWJsZSBzZXJ2aWNlcyBhbmQgc2VydmljZSBwcm92aWRlcnMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NkbHVkLmh0bWwiIHRpdGxlPSJUaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4gVURESSBoYXMgdHdvIGZ1bmN0aW9uczogKDEpIGl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IFVEREkgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIj5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sIj5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWNiZjQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzZGx1ZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24KLWRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJCi1oYXMgdHdvIGZ1bmN0aW9uczogKDEpIGl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IFVEREkgY2xpZW50cwotY29tbXVuaWNhdGUgd2l0aCByZWdpc3RyaWVzLCBhbmQgKDIpIGl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsbHkgcmVwbGljYXRlZAotcmVnaXN0cmllcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+cmVsYXRpb25zaGlwIHdpdGggV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5yZWxhdGlvbnNoaXAgd2l0aCBVRERJPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPlJlZ2lzdGVyaW5nIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6PC9wPgotPHVsPgotPGxpPlRoZSAgPHN5c3RlbW91dHB1dD5idXNpbmVzc0VudGl0eTwvc3lzdGVtb3V0cHV0PiBkYXRhIHR5cGUgY29udGFpbnMgaW5mb3JtYXRpb24KLWFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBhIHB1Ymxpc2hlZCBzZXJ2aWNlLjwvbGk+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0PiBkYXRhIHR5cGUgaXMgYSBkZXNjcmlwdGlvbgotb2YgYSBXZWIgc2VydmljZS48L2xpPgotPGxpPlRoZSAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gZGF0YSB0eXBlIGNvbnRhaW5zIHRlY2huaWNhbAotaW5mb3JtYXRpb24gZm9yIGRldGVybWluaW5nIHRoZSBlbnRyeSBwb2ludCBhbmQgY29uc3RydWN0aW9uIHNwZWNpZmljYXRpb25zCi1mb3IgaW52b2tpbmcgYSBXZWIgc2VydmljZS48L2xpPgotPGxpPlRoZSAgPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4gZGF0YSB0eXBlIHByb3ZpZGVzIGEgcmVmZXJlbmNlCi1zeXN0ZW0gdG8gYXNzaXN0IGluIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGFuZCBhY3RzIGFzIGEgdGVjaG5pY2FsCi1zcGVjaWZpY2F0aW9uIGZvciBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08L3VsPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFVEREkgZGF0YSB0eXBlcywgcmVmZXIgdG8gdGhlIHJlbGF0ZWQgcmVmZXJlbmNlCi10b3BpY3MgYXQgdGhlIGVuZCBvZiB0aGlzIHRvcGljLjwvcD4KLTxwPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYW4gWE1MLWJhc2VkIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIFdlYiBzZXJ2aWNlcy4gV1NETCBkZWZpbmVzIGFuIFhNTCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgbmV0d29yawotc2VydmljZXMgYXMgYSBzZXQgb2YgZW5kcG9pbnRzIHRoYXQgb3BlcmF0ZSBvbiBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gZWl0aGVyCi1kb2N1bWVudC1vcmllbnRlZCBvciBwcm9jZWR1cmUtb3JpZW50ZWQgaW5mb3JtYXRpb24uPC9wPgotPHA+VGhlIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbiBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEhvd2V2ZXIsIHRvCi1hc3Npc3Qgd2l0aCBwdWJsaXNoaW5nIGFuZCBmaW5kaW5nIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbnMgaW4gYSBVRERJIHJlZ2lzdHJ5LAotV1NETCBkb2N1bWVudHMgY29uc2lzdCBvZiB0d28gbWFpbiBwYXJ0czombmJzcDs8L3A+Ci08dWw+Ci08bGk+VGhlIHNlcnZpY2UgaW50ZXJmYWNlIGRlZmluaXRpb24gZGVzY3JpYmVzIHRoZSBhYnN0cmFjdCB0eXBlIGludGVyZmFjZQotYW5kIGl0cyBwcm90b2NvbCBiaW5kaW5nLCBrbm93biBhcyB0aGUgV1NETCBiaW5kaW5nIGRvY3VtZW50PC9saT4KLTxsaT5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkZWZpbml0aW9uIGRlc2NyaWJlcyB0aGUgc2VydmljZSBhY2Nlc3MgbG9jYXRpb24KLWluZm9ybWF0aW9uLCBrbm93biBhcyB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50PC9saT4KLTwvdWw+Ci08cD5XaGVuIGNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCwgdGhlCi1XZWIgc2VydmljZXMgdG9vbHMgY3JlYXRlIGEgc2luZ2xlIFdTREwgZG9jdW1lbnQgd2hlbiBnZW5lcmF0aW5nIFdlYiBzZXJ2aWNlcwotZnJvbSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMKLW9yIEVKQnMuIFRoaXMgV1NETCBkb2N1bWVudCBjb250YWlucyBib3RoIHRoZSBzZXJ2aWNlIGludGVyZmFjZSBhbmQgaW1wbGVtZW50YXRpb24KLWRvY3VtZW50cy48L3A+Ci08cD5BIHNlcnZpY2UgaW50ZXJmYWNlIGlzIGRlc2NyaWJlZCBieSBhIFdTREwgZG9jdW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMsCi1pbXBvcnQsIG1lc3NhZ2UsIHBvcnRUeXBlLCBhbmQgYmluZGluZyBlbGVtZW50cy4gQSBzZXJ2aWNlIGludGVyZmFjZSBjb250YWlucwotdGhlIFdTREwgc2VydmljZSBkZWZpbml0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGltcGxlbWVudCBvbmUgb3IgbW9yZSBzZXJ2aWNlcy4KLUl0IGlzIGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgYSBXZWIgc2VydmljZSwgYW5kIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYwotdHlwZSBvZiBzZXJ2aWNlLiBUaGlzIGRvY3VtZW50IGNhbiByZWZlcmVuY2UgYW5vdGhlciBzZXJ2aWNlIGludGVyZmFjZSBkb2N1bWVudAotdXNpbmcgYW4gaW1wb3J0IGVsZW1lbnQuIFRoZSBXZWIgc2VydmljZXMgdG9vbHMgaW4gdGhpcyBwcm9kdWN0IGdlbmVyYXRlIGEKLXNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50IHRoYXQgY29udGFpbnMgb25seSB0aGUgbWVzc2FnZSBhbmQgcG9ydFR5cGUgZWxlbWVudHMKLXRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGJpbmRpbmcgZG9jdW1lbnQgdGhhdCBjb250YWlucyBvbmx5IGJpbmRpbmdzIGZvcgotdGhlIHBvcnRUeXBlLjwvcD4KLTxwPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNvbnRhaW5zIHRoZSBzZXJ2aWNlIGVsZW1lbnRzLiBBIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgYSBzZXJ2aWNlIHRoYXQgaW1wbGVtZW50cwotYSBzZXJ2aWNlIGludGVyZmFjZS4gQXQgbGVhc3Qgb25lIG9mIHRoZSBpbXBvcnQgZWxlbWVudHMgd2lsbCBjb250YWluIGEgcmVmZXJlbmNlCi10byB0aGUgV1NETCBzZXJ2aWNlIGludGVyZmFjZSBkb2N1bWVudDsgaG93ZXZlciBtb25vbGl0aGljIFdTREwgc3VjaCBhcyB0aGF0Ci1jcmVhdGVkIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGRvZXMgbm90IGhhdmUgaW1wb3J0cy4gQSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjYW4gY29udGFpbiByZWZlcmVuY2VzIHRvIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpbnRlcmZhY2UKLWRvY3VtZW50LjwvcD4KLTxwPkEgc2VydmljZSBwcm92aWRlciBob3N0cyBhIFdlYiBzZXJ2aWNlIGFuZCBtYWtlcyBpdCBhY2Nlc3NpYmxlIHVzaW5nIHByb3RvY29scwotc3VjaCBhcyBTT0FQL0hUVFAgYW5kIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IHRoZSBXU0RMIGRvY3VtZW50cwotdGhhdCBhcmUgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50cyBhcmUgcmVmZXJlbmNlZCBieSBVRERJIGJ1c2luZXNzIHNlcnZpY2VzIChzZXJ2aWNlIGRvY3VtZW50cykgYW5kCi10TW9kZWxzIChiaW5kaW5nIGRvY3VtZW50cykuIFRoZXNlIHBvaW50ZXJzIGVuYWJsZSBkaXNjb3Zlcnkgb2YgYSBXZWIgc2VydmljZQotYnkgYSBzZXJ2aWNlIHJlcXVlc3Rvci48L3A+Ci08cD5GaWd1cmUgMS4gUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC48L3A+Ci08cD4gPGltYWdlIGFsdD0iSWxsdXN0cmF0aW9uIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGx1ZGRpLmdpZiI+Ci08L2ltYWdlPiA8L3A+Ci08cD5GaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC4gVGhlIFdTREwgc2VydmljZQotZWxlbWVudCByZWZlcmVuY2VzIHRoZSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gVGhlIFVSTCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZwotdGhlIFdTREwgYmluZGluZyBlbGVtZW50IGlzIHB1Ymxpc2hlZCB0byB0aGUgVURESSBidXNpbmVzcyByZWdpc3RyeSBhcyBhIHRNb2RlbC4KLVRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgdGhlIFdTREwgc2VydmljZSBlbGVtZW50IGlzIHB1Ymxpc2hlZCB0bwotdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYXMgYSBidXNpbmVzc1NlcnZpY2UgYW5kIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYmluZGluZ1RlbXBsYXRlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJIHJlZ2lzdHJ5IGRhdGEgc3RydWN0dXJlCi10eXBlcywgcmVmZXIgdG8gdGhlIHJlbGF0ZWQgcmVmZXJlbmNlIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGlzIGRvY3VtZW50LgotTm90ZSB0aGF0IHRoZSBpbXBvcnQgcG9ydGlvbiBvZiB0aGUgZGlhZ3JhbSBpcyBvcHRpb25hbCBkZXBlbmRpbmcgb24gdGhlIHJ1bi10aW1lCi1lbnZpcm9ubWVudDsgbW9ub2xpdGhpYyBXU0RMIHN1Y2ggYXMgdGhhdCBjcmVhdGVkIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lCi1lbnZpcm9ubWVudCBkb2VzIG5vdCBoYXZlIGltcG9ydHMuPC9wPgotPHA+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpYmVzIGFuIGluc3RhbmNlIG9mIGEgc2VydmljZS4gVGhlIGluc3RhbmNlCi1pcyBkZWZpbmVkIHVzaW5nIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIFRoZSBzZXJ2aWNlIGVsZW1lbnQgaW4gYSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBpcyB1c2VkIHRvIHB1Ymxpc2ggYSBVRERJIGJ1c2luZXNzU2VydmljZS4gV2hlbiBwdWJsaXNoaW5nCi1hIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbiwgYSBzZXJ2aWNlIGludGVyZmFjZSBtdXN0IGJlIHB1Ymxpc2hlZCBhcyBhIHRNb2RlbAotYmVmb3JlIGEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBpcyBwdWJsaXNoZWQgYXMgYSBidXNpbmVzc1NlcnZpY2UuPC9wPgotPHA+QSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGlzIHB1Ymxpc2hlZCBpbiBhIFVEREkgcmVnaXN0cnkgYXMgcGFydCBvZiBhIGJ1c2luZXNzU2VydmljZQotd2l0aCBvbmUgb3IgbW9yZSBiaW5kaW5nVGVtcGxhdGUgZWxlbWVudHMuIFRoZSBidXNpbmVzc1NlcnZpY2UgaXMgcHVibGlzaGVkCi1ieSB0aGUgc2VydmljZSBwcm92aWRlci4gQSBuZXcgYnVzaW5lc3NTZXJ2aWNlIGlzIGNyZWF0ZWQgZm9yIGEgc2VydmljZSBlbGVtZW50Ci10aGF0IGlzIGRlZmluZWQgaW4gdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZG9jdW1lbnQuIEEgbmV3IGJpbmRpbmdUZW1wbGF0ZQotZWxlbWVudCBpcyBjcmVhdGVkIHdpdGhpbiBhIGJ1c2luZXNzU2VydmljZSBmb3IgZWFjaCBwb3J0IGVsZW1lbnQgdGhhdCBpcwotZGVmaW5lZCB3aXRoaW4gYSBzZXJ2aWNlIGVsZW1lbnQuPC9wPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFdTREwgYW5kIFVEREkgcmVmZXIgdG8KLSA8eHJlZiBocmVmPSJodHRwOi8vdWRkaS5vcmcvYmVzdHByYWN0aWNlcy5odG1sIiBzY29wZT0iZXh0ZXJuYWwiPnVkZGkub3JnL2Jlc3RwcmFjdGljZXMuaHRtbDwveHJlZj4uPC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3VkZGkuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNlYmRiNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4gVURESSBoYXMgdHdvIGZ1bmN0aW9uczogKDEpIGl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IFVEREkgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJIGhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzIGNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQgcmVnaXN0cmllcy4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWxhdGlvbnNoaXAgd2l0aCBXU0RMLCBXU0RMLCByZWxhdGlvbnNoaXAgd2l0aCBVRERJIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVsYXRpb25zaGlwIHdpdGggV1NETCwgV1NETCwgcmVsYXRpb25zaGlwIHdpdGggVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2RsdWQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NkbHVkIj48YSBuYW1lPSJjd3NkbHVkIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24KLWRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJCi1oYXMgdHdvIGZ1bmN0aW9uczogKDEpIGl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IFVEREkgY2xpZW50cwotY29tbXVuaWNhdGUgd2l0aCByZWdpc3RyaWVzLCBhbmQgKDIpIGl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsbHkgcmVwbGljYXRlZAotcmVnaXN0cmllcy48L3A+Ci0KLTxwPlJlZ2lzdGVyaW5nIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6PC9wPgotCi08dWw+Ci08bGk+VGhlICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NFbnRpdHk8L3R0PiBkYXRhIHR5cGUgY29udGFpbnMgaW5mb3JtYXRpb24KLWFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBhIHB1Ymxpc2hlZCBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBkYXRhIHR5cGUgaXMgYSBkZXNjcmlwdGlvbgotb2YgYSBXZWIgc2VydmljZS48L2xpPgotCi08bGk+VGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gZGF0YSB0eXBlIGNvbnRhaW5zIHRlY2huaWNhbAotaW5mb3JtYXRpb24gZm9yIGRldGVybWluaW5nIHRoZSBlbnRyeSBwb2ludCBhbmQgY29uc3RydWN0aW9uIHNwZWNpZmljYXRpb25zCi1mb3IgaW52b2tpbmcgYSBXZWIgc2VydmljZS48L2xpPgotCi08bGk+VGhlICA8dHQgY2xhc3M9InN5c291dCI+dE1vZGVsPC90dD4gZGF0YSB0eXBlIHByb3ZpZGVzIGEgcmVmZXJlbmNlCi1zeXN0ZW0gdG8gYXNzaXN0IGluIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGFuZCBhY3RzIGFzIGEgdGVjaG5pY2FsCi1zcGVjaWZpY2F0aW9uIGZvciBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTwvdWw+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBVRERJIGRhdGEgdHlwZXMsIHJlZmVyIHRvIHRoZSByZWxhdGVkIHJlZmVyZW5jZQotdG9waWNzIGF0IHRoZSBlbmQgb2YgdGhpcyB0b3BpYy48L3A+Ci0KLTxwPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYW4gWE1MLWJhc2VkIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIFdlYiBzZXJ2aWNlcy4gV1NETCBkZWZpbmVzIGFuIFhNTCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgbmV0d29yawotc2VydmljZXMgYXMgYSBzZXQgb2YgZW5kcG9pbnRzIHRoYXQgb3BlcmF0ZSBvbiBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gZWl0aGVyCi1kb2N1bWVudC1vcmllbnRlZCBvciBwcm9jZWR1cmUtb3JpZW50ZWQgaW5mb3JtYXRpb24uPC9wPgotCi08cD5UaGUgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIG1hbnkgd2F5cy4gSG93ZXZlciwgdG8KLWFzc2lzdCB3aXRoIHB1Ymxpc2hpbmcgYW5kIGZpbmRpbmcgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbiBhIFVEREkgcmVnaXN0cnksCi1XU0RMIGRvY3VtZW50cyBjb25zaXN0IG9mIHR3byBtYWluIHBhcnRzOsKgPC9wPgotCi08dWw+Ci08bGk+VGhlIHNlcnZpY2UgaW50ZXJmYWNlIGRlZmluaXRpb24gZGVzY3JpYmVzIHRoZSBhYnN0cmFjdCB0eXBlIGludGVyZmFjZQotYW5kIGl0cyBwcm90b2NvbCBiaW5kaW5nLCBrbm93biBhcyB0aGUgV1NETCBiaW5kaW5nIGRvY3VtZW50PC9saT4KLQotPGxpPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb24gZGVzY3JpYmVzIHRoZSBzZXJ2aWNlIGFjY2VzcyBsb2NhdGlvbgotaW5mb3JtYXRpb24sIGtub3duIGFzIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQ8L2xpPgotCi08L3VsPgotCi08cD5XaGVuIGNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCwgdGhlCi1XZWIgc2VydmljZXMgdG9vbHMgY3JlYXRlIGEgc2luZ2xlIFdTREwgZG9jdW1lbnQgd2hlbiBnZW5lcmF0aW5nIFdlYiBzZXJ2aWNlcwotZnJvbSBKYXZh4oSiIGJlYW5zCi1vciBFSkJzLiBUaGlzIFdTREwgZG9jdW1lbnQgY29udGFpbnMgYm90aCB0aGUgc2VydmljZSBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGF0aW9uCi1kb2N1bWVudHMuPC9wPgotCi08cD5BIHNlcnZpY2UgaW50ZXJmYWNlIGlzIGRlc2NyaWJlZCBieSBhIFdTREwgZG9jdW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMsCi1pbXBvcnQsIG1lc3NhZ2UsIHBvcnRUeXBlLCBhbmQgYmluZGluZyBlbGVtZW50cy4gQSBzZXJ2aWNlIGludGVyZmFjZSBjb250YWlucwotdGhlIFdTREwgc2VydmljZSBkZWZpbml0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGltcGxlbWVudCBvbmUgb3IgbW9yZSBzZXJ2aWNlcy4KLUl0IGlzIGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgYSBXZWIgc2VydmljZSwgYW5kIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYwotdHlwZSBvZiBzZXJ2aWNlLiBUaGlzIGRvY3VtZW50IGNhbiByZWZlcmVuY2UgYW5vdGhlciBzZXJ2aWNlIGludGVyZmFjZSBkb2N1bWVudAotdXNpbmcgYW4gaW1wb3J0IGVsZW1lbnQuIFRoZSBXZWIgc2VydmljZXMgdG9vbHMgaW4gdGhpcyBwcm9kdWN0IGdlbmVyYXRlIGEKLXNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50IHRoYXQgY29udGFpbnMgb25seSB0aGUgbWVzc2FnZSBhbmQgcG9ydFR5cGUgZWxlbWVudHMKLXRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGJpbmRpbmcgZG9jdW1lbnQgdGhhdCBjb250YWlucyBvbmx5IGJpbmRpbmdzIGZvcgotdGhlIHBvcnRUeXBlLjwvcD4KLQotPHA+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY29udGFpbnMgdGhlIHNlcnZpY2UgZWxlbWVudHMuIEEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzCi1hIHNlcnZpY2UgaW50ZXJmYWNlLiBBdCBsZWFzdCBvbmUgb2YgdGhlIGltcG9ydCBlbGVtZW50cyB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UKLXRvIHRoZSBXU0RMIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50OyBob3dldmVyIG1vbm9saXRoaWMgV1NETCBzdWNoIGFzIHRoYXQKLWNyZWF0ZWQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQgZG9lcyBub3QgaGF2ZSBpbXBvcnRzLiBBIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNhbiBjb250YWluIHJlZmVyZW5jZXMgdG8gbW9yZSB0aGFuIG9uZSBzZXJ2aWNlIGludGVyZmFjZQotZG9jdW1lbnQuPC9wPgotCi08cD5BIHNlcnZpY2UgcHJvdmlkZXIgaG9zdHMgYSBXZWIgc2VydmljZSBhbmQgbWFrZXMgaXQgYWNjZXNzaWJsZSB1c2luZyBwcm90b2NvbHMKLXN1Y2ggYXMgU09BUC9IVFRQIGFuZCBTT0FQL0pNUy4gVGhlIFdlYiBzZXJ2aWNlIGlzIGRlc2NyaWJlZCBieSB0aGUgV1NETCBkb2N1bWVudHMKLXRoYXQgYXJlIHN0b3JlZCBvbiB0aGUgcHJvdmlkZXIncyBzZXJ2ZXIgb3IgaW4gYSBzcGVjaWFsIHJlcG9zaXRvcnkuIFRoZSBXU0RMCi1kb2N1bWVudHMgYXJlIHJlZmVyZW5jZWQgYnkgVURESSBidXNpbmVzcyBzZXJ2aWNlcyAoc2VydmljZSBkb2N1bWVudHMpIGFuZAotdE1vZGVscyAoYmluZGluZyBkb2N1bWVudHMpLiBUaGVzZSBwb2ludGVycyBlbmFibGUgZGlzY292ZXJ5IG9mIGEgV2ViIHNlcnZpY2UKLWJ5IGEgc2VydmljZSByZXF1ZXN0b3IuPC9wPgotCi08cD5GaWd1cmUgMS4gUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC48L3A+Ci0KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGx1ZGRpLmdpZiIgYWx0PSJJbGx1c3RyYXRpb24gb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuIiAvPiA8L3A+Ci0KLTxwPkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLiBUaGUgV1NETCBzZXJ2aWNlCi1lbGVtZW50IHJlZmVyZW5jZXMgdGhlIFdTREwgYmluZGluZyBlbGVtZW50LiBUaGUgVVJMIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nCi10aGUgV1NETCBiaW5kaW5nIGVsZW1lbnQgaXMgcHVibGlzaGVkIHRvIHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFzIGEgdE1vZGVsLgotVGhlIFVSTCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgV1NETCBzZXJ2aWNlIGVsZW1lbnQgaXMgcHVibGlzaGVkIHRvCi10aGUgVURESSBidXNpbmVzcyByZWdpc3RyeSBhcyBhIGJ1c2luZXNzU2VydmljZSBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBiaW5kaW5nVGVtcGxhdGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREkgcmVnaXN0cnkgZGF0YSBzdHJ1Y3R1cmUKLXR5cGVzLCByZWZlciB0byB0aGUgcmVsYXRlZCByZWZlcmVuY2Ugc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCi1Ob3RlIHRoYXQgdGhlIGltcG9ydCBwb3J0aW9uIG9mIHRoZSBkaWFncmFtIGlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgcnVuLXRpbWUKLWVudmlyb25tZW50OyBtb25vbGl0aGljIFdTREwgc3VjaCBhcyB0aGF0IGNyZWF0ZWQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50IGRvZXMgbm90IGhhdmUgaW1wb3J0cy48L3A+Ci0KLTxwPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlcyBhbiBpbnN0YW5jZSBvZiBhIHNlcnZpY2UuIFRoZSBpbnN0YW5jZQotaXMgZGVmaW5lZCB1c2luZyBhIFdTREwgc2VydmljZSBlbGVtZW50LiBUaGUgc2VydmljZSBlbGVtZW50IGluIGEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgaXMgdXNlZCB0byBwdWJsaXNoIGEgVURESSBidXNpbmVzc1NlcnZpY2UuIFdoZW4gcHVibGlzaGluZwotYSBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb24sIGEgc2VydmljZSBpbnRlcmZhY2UgbXVzdCBiZSBwdWJsaXNoZWQgYXMgYSB0TW9kZWwKLWJlZm9yZSBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaXMgcHVibGlzaGVkIGFzIGEgYnVzaW5lc3NTZXJ2aWNlLjwvcD4KLQotPHA+QSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGlzIHB1Ymxpc2hlZCBpbiBhIFVEREkgcmVnaXN0cnkgYXMgcGFydCBvZiBhIGJ1c2luZXNzU2VydmljZQotd2l0aCBvbmUgb3IgbW9yZSBiaW5kaW5nVGVtcGxhdGUgZWxlbWVudHMuIFRoZSBidXNpbmVzc1NlcnZpY2UgaXMgcHVibGlzaGVkCi1ieSB0aGUgc2VydmljZSBwcm92aWRlci4gQSBuZXcgYnVzaW5lc3NTZXJ2aWNlIGlzIGNyZWF0ZWQgZm9yIGEgc2VydmljZSBlbGVtZW50Ci10aGF0IGlzIGRlZmluZWQgaW4gdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZG9jdW1lbnQuIEEgbmV3IGJpbmRpbmdUZW1wbGF0ZQotZWxlbWVudCBpcyBjcmVhdGVkIHdpdGhpbiBhIGJ1c2luZXNzU2VydmljZSBmb3IgZWFjaCBwb3J0IGVsZW1lbnQgdGhhdCBpcwotZGVmaW5lZCB3aXRoaW4gYSBzZXJ2aWNlIGVsZW1lbnQuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gV1NETCBhbmQgVURESSByZWZlciB0bwotIDxhIGhyZWY9Imh0dHA6Ly91ZGRpLm9yZy9iZXN0cHJhY3RpY2VzLmh0bWwiIHRhcmdldD0iX2JsYW5rIj51ZGRpLm9yZy9iZXN0cHJhY3RpY2VzLmh0bWw8L2E+LjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkZmF2LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGRmYXYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODg5NWY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGRmYXYuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZHVkZGkuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZHVkZGkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzk5YmIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGR1ZGRpLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iZWFuaW5mb2pzcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmVhbmluZm9qc3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2JlNDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iZWFuaW5mb2pzcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmluZG5vZGUuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JpbmRub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmNWQwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmluZG5vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Jyb3dzZWJ1dHRvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnJvd3NlYnV0dG9uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg0YTViYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnJvd3NlYnV0dG9uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9idXNhc3N0LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9idXNhc3N0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkY2JiMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnVzYXNzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmF2LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mYXYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWJmYWJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mYXYuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2ZpbmQuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2ZpbmQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGMzZWJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9maW5kLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mc3dzZGxpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mc3dzZGxpY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA2MGU1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZnN3c2RsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW4uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ2luLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM3YmRkMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ2luaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW5pY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MTBjYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW5pY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dvdXRpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dvdXRpY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3MDljZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9nb3V0aWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbXB0d3NkbGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL21wdHdzZGxpY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1ZTY1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbXB0d3NkbGljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL25ld2pzcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbmV3anNwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0YjUwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbmV3anNwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9vcG5vZGUuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL29wbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZWIzNDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL29wbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHJveHlvbmpzcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHJveHlvbmpzcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MmU0ZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3Byb3h5b25qc3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1Ymxpc2gyLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJsaXNoMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTExYTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1Ymxpc2gyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJzZXJ2LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJzZXJ2LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFkMzZiNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVic2Vydi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcmVmc2Vydi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcmVmc2Vydi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzAxNWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3JlZnNlcnYuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3J1bmpzZi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcnVuanNmLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4ODRkMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcnVuanNmLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zY2VuYXJpbzcuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NjZW5hcmlvNy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNjUzMWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NjZW5hcmlvNy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2Vydm5vZGUuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NlcnZub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUxMjMzZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2Vydm5vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXB1ZHdzLmNkciBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5jZHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZWRhZWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXB1ZHdzLmNkcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmNkciBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmNkcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1MmYwMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5jZHIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMDJjMDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuY2RyIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuY2RyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGRhMzJhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmNkcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MxNDhhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXZpZXcuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGl2aWV3LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwMWJjOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXZpZXcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxibmRkZXRsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsYm5kZGV0bC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMjI2MmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxibmRkZXRsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZGV0YWlsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZGV0YWlsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY1NDU2OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGRldGFpbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGR0bGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkdGxpY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlZTY3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGR0bGljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxleHAuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxleHAuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmVmMTBhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZXhwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZmF2aWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGZhdmljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWFjYzNkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZmF2aWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxpY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlYzMyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxub2RlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNzUyMWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3AuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4N2RkNGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzgzZTM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldHguZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldHguZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmEyMDI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXR4LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RscGFnZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHBhZ2UuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzdjMWMwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RscGFnZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHNlcnZkZXQuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3Y2I4NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHNlcnZkZXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxzdGF0eC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHN0YXR4LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiYTc4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHN0YXR4LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdGVtcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHRlbXAuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWJkMjA3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdGVtcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuY2RyIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmNkcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0OTA5OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuY2RyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYmI3ZDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lscGFnZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHBhZ2UuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWU2ZTAzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lscGFnZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHZpZXcuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWx2aWV3LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5ZDY4OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHZpZXcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaW5qc3AuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaW5qc3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTVkNWYwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2luanNwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c3dpemljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzd2l6aWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMTdhYTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzd2l6aWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9fay5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9fay5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODdjMTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvX2suY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNDcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmYjkxMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE2OjQ5OjI5IEVEVCAyMDA4DQotb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlclxuMS4wLjQwMC5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTAyZDY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAxNjo0OToyOSBFRFQgMjAwOA0KLWx1Y2VuZT0xLjkuMS52MjAwODAzMDYxODExDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjMuMTAwLnYyMDA4MDQyNT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjU0NmZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE2OjQ5OjI5IEVEVCAyMDA4DQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjIxNTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MTdhYTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb25idWlsZF90b2MueG1sIi8+Ci0JCTx0b2MgZmlsZT0id3Njb25zdW1wdGlvbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWMwNGIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjUyN2E2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJzZWN1cml0eSIgY29udGVudD0icHVibGljIiAvPgotPG1ldGEgbmFtZT0iUm9ib3RzIiBjb250ZW50PSJpbmRleCxmb2xsb3ciIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIG5hbWU9IkRDLkZvcm1hdCIgY29udGVudD0iWEhUTUwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvaWJtZGl0YS5jc3MiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08YSBuYW1lPSJJRFgwXzQyIiBocmVmPSIjSURYMV80MiI+QjwvYT4KLTxhIG5hbWU9IklEWDBfNDQiIGhyZWY9IiNJRFgxXzQ0Ij5EPC9hPgotPGEgbmFtZT0iSURYMF81MiIgaHJlZj0iI0lEWDFfNTIiPlI8L2E+Ci08YSBuYW1lPSJJRFgwXzUzIiBocmVmPSIjSURYMV81MyI+UzwvYT4KLTxhIG5hbWU9IklEWDBfNTUiIGhyZWY9IiNJRFgxXzU1Ij5VPC9hPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80MiIgaHJlZj0iI0lEWDBfNDIiPkI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+YnVzaW5lc3MgZW50aXRpZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5wdWJsaXNoaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwjdHB1YmVudCI+cHVibGlzaGluZyB0byBVRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80NCIgaHJlZj0iI0lEWDBfNDQiPkQ8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSI+VURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTIiIGhyZWY9IiNJRFgwXzUyIj5SPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnJlZ2lzdHJpZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwjdGFkZHJlZyI+YWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzUzIiBocmVmPSIjSURYMF81MyI+UzwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5zZXJ2aWNlIGludGVyZmFjZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NSIgaHJlZj0iI0lEWDBfNTUiPlU8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSI+VURESTwvYT4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSI+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCN0bG9nZXhwIj5sb2dnaW5nIGludG8gYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFzc2VydC5odG1sI3Rhc3NlcnQiPm1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIj5tYW5hZ2luZyBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiPnB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwjdHB1Ymxpc2giPnB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciPnJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sI2N3c2RsdWQiPnJlbGF0aW9uc2hpcCB3aXRoIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiI+cmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwjY3VkZGkiPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb248L2E+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIFNlcnZpY2UgRXhwbG9yZXIKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCN0YmttcmsiPmFkZGluZyBGYXZvcml0ZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciPmFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCI+ZXhwbG9yaW5nIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwjdGdlbndzaWwiPmdlbmVyYXRpbmcgV1NJTDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCN0YnVzcHJvaiI+bWFuYWdpbmcgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50Ij5wdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHVibGlzaC5odG1sI3RwdWJsaXNoIj5wdWJsaXNoaW5nIHRvIGEgVURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciPnJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dGVzdHdzZGwuaHRtbCN0dGVzdHdzZGwiPnRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIj5VRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldlYiBTZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnB1Ymxpc2hpbmcKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldlYiBTZXJ2aWNlcyBFeHBsb3JlcgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIj5hZGRpbmcgYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCN0c3RydGV4cCI+bGF1bmNoaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCI+bG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHVkZGlleHAuaHRtbCN0dWRkaWV4cCI+cHVibGlzaGluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NETAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayI+YWRkaW5nIHRvIEZhdm9yaXRlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCI+ZXhwbG9yaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NkbHVkLmh0bWwjY3dzZGx1ZCI+cmVsYXRpb25zaGlwIHdpdGggVURESTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwjdHRlc3R3c2RsIj50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0lMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIj5hZGRpbmcgdG8gRmF2b3JpdGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90ZGlzY292Lmh0bWwjdGRpc2NvdiI+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sI3RnZW53c2lsIj5nZW5lcmF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzYwNzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIi8+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RyZWcuaHRtbCN0cmVnIiB0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsb2dnaW5nIGludG8gYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGxvZ2V4cC5odG1sI3Rsb2dleHAiIHRpdGxlPSJMb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50IiB0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCN0cHVibGlzaCIgdGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRhdGEgc3RydWN0dXJlIHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSIgdGl0bGU9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbW92aW5nIHNlcnZpY2VzIGZyb20gYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIiB0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCN0YnVzcHJvaiIgdGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFzc2VydC5odG1sI3Rhc3NlcnQiIHRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIj4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNjb3ZlcmluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJleHBsb3JpbmcgV1NETCBmaWxlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCIgdGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCIgdGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90cmVnLmh0bWwjdHJlZyIgdGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciIHRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iYnVzaW5lc3MgZW50aXRpZXMiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiIHRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IlVEREkgcmVnaXN0cnkiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCN0cHVibGlzaCIgdGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ1cGRhdGluZyBVRERJIHJlZ2lzdHJpZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCN0dXBkYXRlIiB0aXRsZT0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiIHRpdGxlPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbmFnaW5nIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIiB0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImdlbmVyYXRpbmcgV1NJTCBmaWxlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGdlbndzaWwuaHRtbCN0Z2Vud3NpbCIgdGl0bGU9IkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyB0byBGYXZvcml0ZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayIgdGl0bGU9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTSUwgZmlsZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292IiB0aXRsZT0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZ2VuZXJhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGdlbndzaWwuaHRtbCN0Z2Vud3NpbCIgdGl0bGU9IkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCBmaWxlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImV4cGxvcmluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCIgdGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCIgdGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgU2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIiB0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJidXNpbmVzcyBlbnRpdGllcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiIHRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIHRvIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50IiB0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InVwZGF0aW5nIGluIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sI3R1cGRhdGUiIHRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiIgdGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIiB0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibGF1bmNoaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c3RydGV4cC5odG1sI3RzdHJ0ZXhwIiB0aXRsZT0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsb2dnaW5nIGludG8gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCIgdGl0bGU9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIGEgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIiB0aXRsZT0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBGYXZvcml0ZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayIgdGl0bGU9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InJlZ2lzdHJpZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciIHRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImRhdGEgc3RydWN0dXJlIHR5cGVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J1ZGRpLmh0bWwjcnVkZGkiIHRpdGxlPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0ic2VydmljZSBpbnRlcmZhY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0idXBkYXRpbmcgVURESSByZWdpc3RyaWVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSIgdGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIiB0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NJTCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyB0byBGYXZvcml0ZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayIgdGl0bGU9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLTwvaW5kZXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRmNDY3NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUiAKLSMgTkxTX0VOQ09ESU5HPVVURi04IAotCi1wbHVnaW5OYW1lID0gV2ViIHNlcnZpY2UgY29uc3VtcHRpb24gZG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MTdhYTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBmaWxlPSJ3c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbCIvPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb250X3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3NmZlZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIgotICJyZWZlcmVuY2UuZHRkIj4KLTxyZWZlcmVuY2UgaWQ9InJ1ZGRpIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQKLXlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlCi1pbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLAotYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4KLVRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8aW5kZXh0ZXJtPlVEREkgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHJlZmJvZHk+Ci08c2VjdGlvbj48bHE+IDxwPiA8dWljb250cm9sPkJ1c2luZXNzIGluZm9ybWF0aW9uLjwvdWljb250cm9sPiBJbmZvcm1hdGlvbgotdGhhdCBpcyBjb250YWluZWQgaW4gYSAgPHN5c3RlbW91dHB1dD5idXNpbmVzc0VudGl0eTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUuCi1UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NFbnRpdHk8L3N5c3RlbW91dHB1dD4gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgdGhlIHNlcnZpY2UsIHN1Y2ggYXMgYnVzaW5lc3MgbmFtZSwgZGVzY3JpcHRpb24sCi1jb250YWN0cyBhbmQgaWRlbnRpZmllcnMuPC9wPiA8cD4gPHVpY29udHJvbD5TZXJ2aWNlIGluZm9ybWF0aW9uLjwvdWljb250cm9sPiBJbmZvcm1hdGlvbgotdGhhdCBkZXNjcmliZXMgYSBncm91cCBvZiBXZWIgc2VydmljZXMuIEl0IGlzIGNvbnRhaW5lZCBpbiBhICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUuCi1UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci1mYW1pbGllcyBvZiB0ZWNobmljYWwgc2VydmljZXMuJm5ic3A7IEl0IGdyb3VwcyBhIHNldCBvZiBXZWIgc2VydmljZXMgcmVsYXRlZAotdG8gZWl0aGVyIGEgYnVzaW5lc3MgcHJvY2VzcyBvciBncm91cCBvZiBzZXJ2aWNlcy48L3A+IDxwPiA8dWljb250cm9sPkJpbmRpbmcKLWluZm9ybWF0aW9uLjwvdWljb250cm9sPiBJbmZvcm1hdGlvbiByZXByZXNlbnRlZCBieSB0aGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IHN0cnVjdHVyZS4KLVRoZSAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gaG9sZHMgdGVjaG5pY2FsIGluZm9ybWF0aW9uCi1mb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMgZm9yIGludm9raW5nCi1hIFdlYiBzZXJ2aWNlLiZuYnNwOyBUaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IHByb3ZpZGVzCi10aGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zIHJlbGV2YW50IGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRoYXQgd2FudAotdG8gZmluZCBhbmQgaW52b2tlIGEgV2ViIHNlcnZpY2UuJm5ic3A7IFRoZSAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gcG9pbnRzCi10byBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpcHRpb25zLCBmb3IgZXhhbXBsZSB2aWEgYSBVUkwuPC9wPiA8cD4gPHVpY29udHJvbD5JbmZvcm1hdGlvbgotZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLjwvdWljb250cm9sPiBNZXRhZGF0YSBhYm91dCB0aGUKLXZhcmlvdXMgc3BlY2lmaWNhdGlvbnMgaW1wbGVtZW50ZWQgYnkgYSBnaXZlbiBXZWIgc2VydmljZSByZXByZXNlbnRlZCBieSB0aGUKLSA8c3lzdGVtb3V0cHV0PnRNb2RlbDwvc3lzdGVtb3V0cHV0Pi4gVGhlICA8c3lzdGVtb3V0cHV0PnRNb2RlbDwvc3lzdGVtb3V0cHV0PiBwcm92aWRlcwotYSByZWZlcmVuY2Ugc3lzdGVtIHRvIGFzc2lzdCBpbiB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy48L3A+IDwvbHE+PHA+RmlndXJlCi0xLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBkYXRhIHR5cGVzLjwvcD48cD4gPGltYWdlIGFsdD0iRmlndXJlIDEgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIGJpbmRpbmcgdGVtcGxhdGUsIGFuZCB0bW9kZWwuIgotaHJlZj0iLi4vaW1hZ2VzL3VkZGkuZ2lmIj48L2ltYWdlPiA8L3A+PHA+RWFjaCBjaGlsZCBzdHJ1Y3R1cmUgaGFzIGEgdW5pcXVlCi1wYXJlbnQgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoYXQgZWFjaCAgPHN5c3RlbW91dHB1dD5idXNpbmVzc1NlcnZpY2U8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlCi1pcyBvd25lZCBieSBhIHNwZWNpZmljICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzRW50aXR5PC9zeXN0ZW1vdXRwdXQ+LiBJbiB0dXJuLAotZWFjaCAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gaXMgb3duZWQgYnkgYSBzcGVjaWZpYwotIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+LiBFYWNoICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUKLXJlZmVyZW5jZXMgdG8gdW5pcXVlIGluc3RhbmNlcyBvZiAgPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlczsKLWhvd2V2ZXIsIHNpbmNlIHJlZmVyZW5jZXMgY2FuIGJlIHJlcGVhdGVkIHdpdGhpbiBzZXZlcmFsIHBhcmVudCBzdHJ1Y3R1cmVzLAotdGhlcmUgY2FuIGJlIG1hbnkgcmVmZXJlbmNlcyB0byAgPHN5c3RlbW91dHB1dD50TW9kZWxzPC9zeXN0ZW1vdXRwdXQ+IGZyb20KLWRpZmZlcmVudCBFbnRpdHktU2VydmljZS1UZW1wbGF0ZSBwYXJlbnRzLCBhcyBzZWVuIGluIEZpZ3VyZSAyLjwvcD48cD5GaWd1cmUKLTIuIFJlZmVyZW5jZXMgdG8gdE1vZGVsLjwvcD48cD4gPGltYWdlIGFsdD0iRmlndXJlIDIgaWxsdXN0cmF0ZXMgdGhlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gYSB0TW9kZWwuIgotaHJlZj0iLi4vaW1hZ2VzL3VkZGlyZWYuZ2lmIj48L2ltYWdlPiA8L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlB1Ymxpc2hlciBhc3NlcnRpb25zPC90aXRsZT48cD5BIHB1Ymxpc2hlciBhc3NlcnRpb24gaXMgYQotd2F5IGluIFVEREkgdG8gYXNzb2NpYXRlIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uCi1kZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gTWFueSBidXNpbmVzc2VzIGFyZSBub3QgZWZmZWN0aXZlbHkKLXJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LiBBIHB1Ymxpc2hlciBhc3NlcnRpb24gYWxsb3dzIGZvciB0aGUKLWFzc29jaWF0aW9uIGJldHdlZW4gYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueQotbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZXNjcmlwdGlvbnMgYnV0IGFyZSBzdGlsbAotY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwcyB2aXNpYmxlIGluIFVEREkgcmVnaXN0cmllcy48L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlNlcnZpY2UgcHJvamVjdGlvbnM8L3RpdGxlPjxwPkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMKLWEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UgdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MKLWVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZSBzdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkKLXB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMgY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLiBTZXJ2aWNlCi1wcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkgYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuCi1UaGlzIG1lYW5zIHRoYXQgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYnVzaW5lc3NTZXJ2aWNlIGJ5IGFueSBvZiB0aGUgcmVmZXJlbmNpbmcKLWJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMgYXJlIHZhbGlkIGZvciBhbGwgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLjwvcD48L3NlY3Rpb24+Ci08L3JlZmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTViMzYyZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgZGF0YSBzdHJ1Y3R1cmUgdHlwZXMsIFVEREkgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBkYXRhIHN0cnVjdHVyZSB0eXBlcywgVURESSByZWdpc3RyeSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RwdWJsaXNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icnVkZGkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InJ1ZGRpIj48YSBuYW1lPSJydWRkaSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9oMT4KLQotCi0KLTxkaXY+PHA+T25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdAoteW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UKLWludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sCi1iaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLgotVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3NwYW4+IEluZm9ybWF0aW9uCi10aGF0IGlzIGNvbnRhaW5lZCBpbiBhICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NFbnRpdHk8L3R0PiBzdHJ1Y3R1cmUuCi1UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc0VudGl0eTwvdHQ+IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIHRoZSBzZXJ2aWNlLCBzdWNoIGFzIGJ1c2luZXNzIG5hbWUsIGRlc2NyaXB0aW9uLAotY29udGFjdHMgYW5kIGlkZW50aWZpZXJzLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2VydmljZSBpbmZvcm1hdGlvbi48L3NwYW4+IEluZm9ybWF0aW9uCi10aGF0IGRlc2NyaWJlcyBhIGdyb3VwIG9mIFdlYiBzZXJ2aWNlcy4gSXQgaXMgY29udGFpbmVkIGluIGEgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBzdHJ1Y3R1cmUuCi1UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotZmFtaWxpZXMgb2YgdGVjaG5pY2FsIHNlcnZpY2VzLsKgIEl0IGdyb3VwcyBhIHNldCBvZiBXZWIgc2VydmljZXMgcmVsYXRlZAotdG8gZWl0aGVyIGEgYnVzaW5lc3MgcHJvY2VzcyBvciBncm91cCBvZiBzZXJ2aWNlcy48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJpbmRpbmcKLWluZm9ybWF0aW9uLjwvc3Bhbj4gSW5mb3JtYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gc3RydWN0dXJlLgotVGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gaG9sZHMgdGVjaG5pY2FsIGluZm9ybWF0aW9uCi1mb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMgZm9yIGludm9raW5nCi1hIFdlYiBzZXJ2aWNlLsKgIFRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHByb3ZpZGVzCi10aGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zIHJlbGV2YW50IGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRoYXQgd2FudAotdG8gZmluZCBhbmQgaW52b2tlIGEgV2ViIHNlcnZpY2UuwqAgVGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gcG9pbnRzCi10byBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpcHRpb25zLCBmb3IgZXhhbXBsZSB2aWEgYSBVUkwuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbmZvcm1hdGlvbgotZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLjwvc3Bhbj4gTWV0YWRhdGEgYWJvdXQgdGhlCi12YXJpb3VzIHNwZWNpZmljYXRpb25zIGltcGxlbWVudGVkIGJ5IGEgZ2l2ZW4gV2ViIHNlcnZpY2UgcmVwcmVzZW50ZWQgYnkgdGhlCi0gPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbDwvdHQ+LiBUaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWw8L3R0PiBwcm92aWRlcwotYSByZWZlcmVuY2Ugc3lzdGVtIHRvIGFzc2lzdCBpbiB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPHA+RmlndXJlCi0xLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBkYXRhIHR5cGVzLjwvcD4KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGkuZ2lmIiBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBiaW5kaW5nIHRlbXBsYXRlLCBhbmQgdG1vZGVsLiIgLz4gPC9wPgotPHA+RWFjaCBjaGlsZCBzdHJ1Y3R1cmUgaGFzIGEgdW5pcXVlCi1wYXJlbnQgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoYXQgZWFjaCAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzU2VydmljZTwvdHQ+IHN0cnVjdHVyZQotaXMgb3duZWQgYnkgYSBzcGVjaWZpYyAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzRW50aXR5PC90dD4uIEluIHR1cm4sCi1lYWNoICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gaXMgb3duZWQgYnkgYSBzcGVjaWZpYwotIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0Pi4gRWFjaCAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHN0cnVjdHVyZQotcmVmZXJlbmNlcyB0byB1bmlxdWUgaW5zdGFuY2VzIG9mICA8dHQgY2xhc3M9InN5c291dCI+dE1vZGVsPC90dD4gc3RydWN0dXJlczsKLWhvd2V2ZXIsIHNpbmNlIHJlZmVyZW5jZXMgY2FuIGJlIHJlcGVhdGVkIHdpdGhpbiBzZXZlcmFsIHBhcmVudCBzdHJ1Y3R1cmVzLAotdGhlcmUgY2FuIGJlIG1hbnkgcmVmZXJlbmNlcyB0byAgPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbHM8L3R0PiBmcm9tCi1kaWZmZXJlbnQgRW50aXR5LVNlcnZpY2UtVGVtcGxhdGUgcGFyZW50cywgYXMgc2VlbiBpbiBGaWd1cmUgMi48L3A+Ci08cD5GaWd1cmUKLTIuIFJlZmVyZW5jZXMgdG8gdE1vZGVsLjwvcD4KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGlyZWYuZ2lmIiBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgdE1vZGVsLiIgLz4gPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QdWJsaXNoZXIgYXNzZXJ0aW9uczwvaDQ+PHA+QSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEKLXdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBUaGUgcHVibGlzaGVyIGFzc2VydGlvbgotZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5Ci1yZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgdGhlCi1hc3NvY2lhdGlvbiBiZXR3ZWVuIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkKLW1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwKLWNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5TZXJ2aWNlIHByb2plY3Rpb25zPC9oND48cD5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzCi1hIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzCi1lbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5Ci1wdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy4gU2VydmljZQotcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LgotVGhpcyBtZWFucyB0aGF0IGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJ1c2luZXNzU2VydmljZSBieSBhbnkgb2YgdGhlIHJlZmVyZW5jaW5nCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZCBmb3IgYWxsIG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHB1Ymxpc2guaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTVlY2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRyZWciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbAotcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIFNlcnZpY2VzIEV4cGxvcmVyPGluZGV4dGVybT5hZGRpbmcKLWEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPnJlZ2lzdHJpZXM8aW5kZXh0ZXJtPmFkZGluZyB0bwotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT48cD5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48eHJlZiBocmVmPSJ0cmVnLmRpdGEiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPldoZW4geW91IGFyZSByZWFkeSB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSwKLWFkZCBhIHByb2R1Y3Rpb24gcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4gSW4gb3JkZXIgdG8gcHVibGlzaAoteW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgcHJvZHVjdGlvbiByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QKLXJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5LiBUaGUgcmVnaXN0cnkgd2lsbCBwcm92aWRlIGluc3RydWN0aW9ucyBmb3IgcmVnaXN0ZXJpbmcuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiByZWdpc3RyaWVzLCByZWZlciB0byAgPHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlcmluZwotd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPi48L3A+PHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgaXMgYSBzZXQgb2YgZ2xvYmFsCi1yZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIEZvciBhIGxpc3Qgb2YgcHVibGljIHJlZ2lzdHJpZXMgcmVmZXIgdG8gIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cuVURESS5vcmcvcmVnaXN0ZXIuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L3hyZWY+PC9wPjxwPlRoZSA8dG0gdG1jbGFzcz0iaWJtIgotdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkgQnVzaW5lc3MKLVJlZ2lzdHJ5IGlzIGEgcHVibGljIHByb2R1Y3Rpb24gcmVnaXN0cnkgbWFpbnRhaW5lZCBieSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPHRtIHRtY2xhc3M9ImlibSIKLXRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIEJ1c2luZXNzCi1SZWdpc3RyeSByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vdWRkaS5pYm0uY29tIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly91ZGRpLmlibS5jb208L3hyZWY+PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIEZhdm9yaXRlcywKLWRvIHRoZSBmb2xsb3dpbmc6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkNsaWNrIHRoZSAgPHVpY29udHJvbD5GYXZvcml0ZXM8L3VpY29udHJvbD4gaWNvbiAgPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgRmF2b3JpdGVzIGljb24uIgotaHJlZj0iLi4vaW1hZ2VzL2Zhdi5naWYiPjwvaW1hZ2U+IGluIHRoZSBtYWluIHRvb2xiYXIuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5FeHBhbmQgIDx1aWNvbnRyb2w+RmF2b3JpdGUgVURESSBSZWdpc3RyaWVzPC91aWNvbnRyb2w+LjwvY21kPgotPC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgYSByZWdpc3RyeSB0aGVuIGNsaWNrIHRoZSAgPHVpY29udHJvbD5BZGQgdG8gVURESSBQYWdlPC91aWNvbnRyb2w+IGljb24KLSA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gVURESSBQYWdlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvYWRkdWRkaS5naWYiPgotPC9pbWFnZT4gaW4gdGhlIEFjdGlvbnMgcGFuZS48L2NtZD48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBhZGQgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG1hbnVhbGx5LCBkbyB0aGUKLWZvbGxvd2luZzo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIFVEREkgTmF2aWdhdG9yIHBhbmUsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5VRERJIE1haW48L3VpY29udHJvbD4gbm9kZS48L2NtZD4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIFJlZ2lzdHJ5IG5hbWUgYW5kIElucXVpcnkgVVJMCi1vZiB0aGUgcmVnaXN0cnkgeW91IHdhbnQgdG8gYWRkLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uPC9jbWQ+PC9zdWJzdGVwPgotPC9zdWJzdGVwcz4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4OWVmMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQWx0aG91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBjb21lcyBwb3B1bGF0ZWQgd2l0aCBzZXZlcmFsIHJlZ2lzdHJpZXMsIHlvdSBjYW4gYWxzbyBhZGQgYWRkaXRpb25hbCByZWdpc3RyaWVzIHRvIHlvdXIgbGlzdCBvZiBmYXZvcml0ZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbCByZWdpc3RyaWVzLCB5b3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgcmVnaXN0cmllcyB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBhZGRpbmcgYSByZWdpc3RyeSwgcmVnaXN0cmllcywgYWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgYWRkaW5nIGEgcmVnaXN0cnksIHJlZ2lzdHJpZXMsIGFkZGluZyB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHJlZy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkcmVnIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZHJlZyI+PGEgbmFtZT0idGFkZHJlZyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+QWx0aG91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBjb21lcyBwb3B1bGF0ZWQgd2l0aCBzZXZlcmFsCi1yZWdpc3RyaWVzLCB5b3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgcmVnaXN0cmllcyB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5XaGVuIHlvdSBhcmUgcmVhZHkgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UsCi1hZGQgYSBwcm9kdWN0aW9uIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIEluIG9yZGVyIHRvIHB1Ymxpc2gKLXlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHByb2R1Y3Rpb24gcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0Ci1yZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeS4gVGhlIHJlZ2lzdHJ5IHdpbGwgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVnaXN0cmllcywgcmVmZXIgdG8gIDxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5PC9hPi48L3A+Ci08cD5UaGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBpcyBhIHNldCBvZiBnbG9iYWwKLXJlcGxpY2F0ZWQgcmVnaXN0cmllcy4gRm9yIGEgbGlzdCBvZiBwdWJsaWMgcmVnaXN0cmllcyByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy5VRERJLm9yZy9yZWdpc3Rlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L2E+PC9wPgotPHA+VGhlIElCTTxzdXA+wq48L3N1cD4gVURESSBCdXNpbmVzcwotUmVnaXN0cnkgaXMgYSBwdWJsaWMgcHJvZHVjdGlvbiByZWdpc3RyeSBtYWludGFpbmVkIGJ5IElCTS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIElCTSBVRERJIEJ1c2luZXNzCi1SZWdpc3RyeSByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly91ZGRpLmlibS5jb208L2E+PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5UbyBhZGQgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gRmF2b3JpdGVzLAotZG8gdGhlIGZvbGxvd2luZzo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+Q2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GYXZvcml0ZXM8L3NwYW4+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvZmF2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBGYXZvcml0ZXMgaWNvbi4iIC8+IGluIHRoZSBtYWluIHRvb2xiYXIuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FeHBhbmQgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZhdm9yaXRlIFVEREkgUmVnaXN0cmllczwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCBhIHJlZ2lzdHJ5IHRoZW4gY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgdG8gVURESSBQYWdlPC9zcGFuPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9hZGR1ZGRpLmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gVURESSBQYWdlIGljb24uIiAvPiBpbiB0aGUgQWN0aW9ucyBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGk+PHNwYW4+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtYW51YWxseSwgZG8gdGhlCi1mb2xsb3dpbmc6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkluIHRoZSBVRERJIE5hdmlnYXRvciBwYW5lLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVEREkgTWFpbjwvc3Bhbj4gbm9kZS48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIFJlZ2lzdHJ5IG5hbWUgYW5kIElucXVpcnkgVVJMCi1vZiB0aGUgcmVnaXN0cnkgeW91IHdhbnQgdG8gYWRkLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdvPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5OGRhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YXNzZXJ0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGFzc2VydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy4mbmJzcDsgVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4KLUEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIGFzc29jaWF0aW9ucyB0byBiZSBmb3JtZWQgYmV0d2VlbiBzZXZlcmFsCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55IG1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzCi10aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0bwotbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5tYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHB1Ymxpc2hlciBhc3NlcnRpb25zLCByZWZlciB0byB0aGUgIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24KLTIuMCBQcm9ncmFtbWVyJ3MgQVBJIFNwZWNpZmljYXRpb248L3hyZWY+IGFuZCB0aGUgIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L3hyZWY+LjwvcD48cD5UbwotbWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zLCBkbyB0aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoIHlvdQotd2FudCB0byBtYW5hZ2UgcmVmZXJlbmNlZCBidXNpbmVzc2VzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+TWFuYWdlIFB1Ymxpc2hlcgotQXNzZXJ0aW9uczwvdWljb250cm9sPiBpY29uICA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvYnVzYXNzdC5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T24gdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBwYWdlIHlvdSBjYW4gYWRkLCByZW1vdmUsIGFuZAotbWFpbnRhaW4gcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGJ1c2luZXNzIGVudGl0aWVzLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8dWljb250cm9sPkltcG9ydGFudDo8L3VpY29udHJvbD4gQSBidXNpbmVzcyBlbnRpdHkgdGhhdCBpcyByZWZlcmVuY2VkCi1ieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eSBtdXN0IGluIHR1cm4gcmVmZXJlbmNlIHRoYXQgYnVzaW5lc3MgZW50aXR5IGluCi1vcmRlciB0byBtYWtlIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHB1YmxpYy4gQSBvbmUtd2F5IHJlZmVyZW5jZSBpcyBjb25zaWRlcmVkCi1hbiBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb24gYW5kIGlzIHZpc2libGUgb25seSB0byB0aGUgb3duZXIgb2YgdGhlCi1idXNpbmVzcyBlbnRpdHkuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTNhYjllLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHB1Ymxpc2hlciBhc3NlcnRpb24gaXMgYSB3YXkgaW4gVURESSB0byBhc3NvY2lhdGUgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy7CoCBUaGUgcHVibGlzaGVyIGFzc2VydGlvbiBkZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gTWFueSBidXNpbmVzc2VzIGFyZSBub3QgZWZmZWN0aXZlbHkgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgYnVzaW5lc3NFbnRpdHkuIEEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIGFzc29jaWF0aW9ucyB0byBiZSBmb3JtZWQgYmV0d2VlbiBzZXZlcmFsIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkgbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZXNjcmlwdGlvbnMgYnV0IGFyZSBzdGlsbCBjbG9zZWx5IGNvdXBsZWQgYW5kIHdhbnQgdG8gbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIHB1Ymxpc2hlciBhc3NlcnRpb24gaXMgYSB3YXkgaW4gVURESSB0byBhc3NvY2lhdGUgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy7CoCBUaGUgcHVibGlzaGVyIGFzc2VydGlvbiBkZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gTWFueSBidXNpbmVzc2VzIGFyZSBub3QgZWZmZWN0aXZlbHkgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgYnVzaW5lc3NFbnRpdHkuIEEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIGFzc29jaWF0aW9ucyB0byBiZSBmb3JtZWQgYmV0d2VlbiBzZXZlcmFsIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkgbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZXNjcmlwdGlvbnMgYnV0IGFyZSBzdGlsbCBjbG9zZWx5IGNvdXBsZWQgYW5kIHdhbnQgdG8gbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIG1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc3NlcnQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFzc2VydCI+PGEgbmFtZT0idGFzc2VydCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+TWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnM8L2gxPgotCi0KLQotPGRpdj48cD5BIHB1Ymxpc2hlciBhc3NlcnRpb24gaXMgYSB3YXkgaW4gVURESSB0byBhc3NvY2lhdGUgYnVzaW5lc3NFbnRpdHkKLXN0cnVjdHVyZXMuwqAgVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4KLUEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIGFzc29jaWF0aW9ucyB0byBiZSBmb3JtZWQgYmV0d2VlbiBzZXZlcmFsCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55IG1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzCi10aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0bwotbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHB1Ymxpc2hlciBhc3NlcnRpb25zLCByZWZlciB0byB0aGUgIDxhIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiB0YXJnZXQ9Il9ibGFuayI+VURESSBWZXJzaW9uIDIuMCBQcm9ncmFtbWVyJ3MgQVBJIFNwZWNpZmljYXRpb248L2E+IGFuZCB0aGUgIDxhIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiB0YXJnZXQ9Il9ibGFuayI+VURESSBWZXJzaW9uIDIuMCBEYXRhIFN0cnVjdHVyZSBTcGVjaWZpY2F0aW9uPC9hPi48L3A+Ci08cD5UbwotbWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zLCBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2ggeW91Ci13YW50IHRvIG1hbmFnZSByZWZlcmVuY2VkIGJ1c2luZXNzZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TWFuYWdlIFB1Ymxpc2hlcgotQXNzZXJ0aW9uczwvc3Bhbj4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9idXNhc3N0LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+T24gdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBwYWdlIHlvdSBjYW4gYWRkLCByZW1vdmUsIGFuZAotbWFpbnRhaW4gcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGJ1c2luZXNzIGVudGl0aWVzLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW1wb3J0YW50Ojwvc3Bhbj4gQSBidXNpbmVzcyBlbnRpdHkgdGhhdCBpcyByZWZlcmVuY2VkCi1ieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eSBtdXN0IGluIHR1cm4gcmVmZXJlbmNlIHRoYXQgYnVzaW5lc3MgZW50aXR5IGluCi1vcmRlciB0byBtYWtlIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHB1YmxpYy4gQSBvbmUtd2F5IHJlZmVyZW5jZSBpcyBjb25zaWRlcmVkCi1hbiBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb24gYW5kIGlzIHZpc2libGUgb25seSB0byB0aGUgb3duZXIgb2YgdGhlCi1idXNpbmVzcyBlbnRpdHkuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmM2YTc0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRia21yayIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwKLVdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlCi1pbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXM8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPllvdSBjYW4gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZQotaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIEZhdm9yaXRlcyBpZgoteW91IHBsYW4gdG8gYWNjZXNzIHRoZW0gaW4gdGhlIGZ1dHVyZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIFNlcnZpY2VzIEV4cGxvcmVyPGluZGV4dGVybT5hZGRpbmcgRmF2b3JpdGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmFkZGluZyB0byBGYXZvcml0ZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPmFkZGluZwotdG8gRmF2b3JpdGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZTogIDx1bD4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRvIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwKLVdTSUwsIG9yIFdTREwgdG8gRmF2b3JpdGVzIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIHJlZ2lzdHJ5LCBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2Ugb3IgdGhlIFdTSUwgcGFnZSB0byBmaW5kIHRoZSBXU0lMIG9yCi1XU0RMIHNlcnZpY2UgeW91IHdhbnQgdG8gYWRkIHRvIEZhdm9yaXRlcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsCi1vciBXU0RMIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPkFkZCB0byBmYXZvcml0ZXM8L3VpY29udHJvbD4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIEFkZCB0byBmYXZvcml0ZXMgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9hZGRmYXYuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkFueSBmYXZvcml0ZXMgdGhhdCB5b3UgYWRkIGFyZSBzYXZlZCBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi10byZuYnNwOzwvcD48cD4gPHZhcm5hbWU+WDwvdmFybmFtZT46XHdvcmtzcGFjZVwubWV0YWRhdGFcLnBsdWdpbnNcY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3JlclxmYXZvcml0ZXMud3NpbDwvcD48cD5XaGVyZQotIDx2YXJuYW1lPlg8L3Zhcm5hbWU+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91ciB3b3Jrc3BhY2UgZm9sZGVyIGlzIGxvY2F0ZWQuCi1JZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcHJvZHVjdCwgeW91ciBmYXZvcml0ZXMKLXdpbGwgYmUgYXV0b21hdGljYWxseSBtaWdyYXRlZCB0byB0aGlzIGxvY2F0aW9uLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMmVlZjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBGYXZvcml0ZXMgaWYgeW91IHBsYW4gdG8gYWNjZXNzIHRoZW0gaW4gdGhlIGZ1dHVyZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBGYXZvcml0ZXMgaWYgeW91IHBsYW4gdG8gYWNjZXNzIHRoZW0gaW4gdGhlIGZ1dHVyZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMgRXhwbG9yZXIsIGFkZGluZyBGYXZvcml0ZXMsIFdTSUwsIGFkZGluZyB0byBGYXZvcml0ZXMsIFdTREwsIGFkZGluZyB0byBGYXZvcml0ZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMgRXhwbG9yZXIsIGFkZGluZyBGYXZvcml0ZXMsIFdTSUwsIGFkZGluZyB0byBGYXZvcml0ZXMsIFdTREwsIGFkZGluZyB0byBGYXZvcml0ZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRia21yayIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UKLWludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGJrbXJrIj48YSBuYW1lPSJ0YmttcmsiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlCi1pbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgRmF2b3JpdGVzIGlmCi15b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlOiAgPHVsPgotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCB0byBGYXZvcml0ZXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSByZWdpc3RyeSwgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlIG9yIHRoZSBXU0lMIHBhZ2UgdG8gZmluZCB0aGUgV1NJTCBvcgotV1NETCBzZXJ2aWNlIHlvdSB3YW50IHRvIGFkZCB0byBGYXZvcml0ZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLAotb3IgV1NETCBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHRvIGZhdm9yaXRlczwvc3Bhbj4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvYWRkZmF2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gZmF2b3JpdGVzIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QW55IGZhdm9yaXRlcyB0aGF0IHlvdSBhZGQgYXJlIHNhdmVkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvwqA8L3A+Ci08cD4gPHZhciBjbGFzcz0idmFybmFtZSI+WDwvdmFyPjpcd29ya3NwYWNlXC5tZXRhZGF0YVwucGx1Z2luc1xjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyXGZhdm9yaXRlcy53c2lsPC9wPgotPHA+V2hlcmUKLSA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5YPC92YXI+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91ciB3b3Jrc3BhY2UgZm9sZGVyIGlzIGxvY2F0ZWQuCi1JZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcHJvZHVjdCwgeW91ciBmYXZvcml0ZXMKLXdpbGwgYmUgYXV0b21hdGljYWxseSBtaWdyYXRlZCB0byB0aGlzIGxvY2F0aW9uLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YzVkNTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YnVzcHJvaiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5NYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+QSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcyBhIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlCi10aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcyBlbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2UKLXN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeSBwdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzCi1jYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuJm5ic3A7IFNlcnZpY2UgcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5Ci1hcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5tYW5hZ2luZyBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5VRERJPGluZGV4dGVybT5tYW5hZ2luZyBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48eHJlZiBocmVmPSJ0cmVnLmRpdGEiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiByZWZlcmVuY2VkIHNlcnZpY2VzLCByZWZlciB0byB0aGUgIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24KLTIuMCBQcm9ncmFtbWVyJ3MgQVBJIFNwZWNpZmljYXRpb248L3hyZWY+IGFuZCB0aGUgIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L3hyZWY+LjwvcD48cD5UbwotbWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXMsIGRvIHRoZSBmb2xsb3dpbmc6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2ggeW91Ci13YW50IHRvIG1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+TWFuYWdlIFJlZmVyZW5jZWQKLVNlcnZpY2VzPC91aWNvbnRyb2w+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIE1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIGljb24uIgotaHJlZj0iLi4vaW1hZ2VzL3JlZnNlcnYuZ2lmIj48L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9uIHRoZSBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcyBwYWdlIHlvdSBjYW4gYWRkLCByZW1vdmUsIGFuZAotbWFpbnRhaW4gc2VydmljZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkYzNlZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UgdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlIHN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeSBwdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy7CoCBTZXJ2aWNlIHByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseSBhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcyBhIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZSBzdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkgcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcyBjYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuwqAgU2VydmljZSBwcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkgYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBtYW5hZ2luZyBzZXJ2aWNlcywgVURESSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgbWFuYWdpbmcgc2VydmljZXMsIFVEREkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRidXNwcm9qIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+TWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGJ1c3Byb2oiPjxhIG5hbWU9InRidXNwcm9qIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5NYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+QSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcyBhIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlCi10aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcyBlbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2UKLXN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeSBwdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzCi1jYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuwqAgU2VydmljZSBwcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkKLWFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJlZmVyZW5jZWQgc2VydmljZXMsIHJlZmVyIHRvIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5VRERJIFZlcnNpb24gMi4wIFByb2dyYW1tZXIncyBBUEkgU3BlY2lmaWNhdGlvbjwvYT4gYW5kIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L2E+LjwvcD4KLTxwPlRvCi1tYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlcywgZG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoIHlvdQotd2FudCB0byBtYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5NYW5hZ2UgUmVmZXJlbmNlZAotU2VydmljZXM8L3NwYW4+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvcmVmc2Vydi5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+T24gdGhlIE1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIHBhZ2UgeW91IGNhbiBhZGQsIHJlbW92ZSwgYW5kCi1tYWludGFpbiBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODQ3MGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0ZGlzY292IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkRpc2NvdmVyaW5nIFdlYiBTZXJ2aWNlczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkRpc2NvdmVyaW5nIGFuZCBpbXBvcnRpbmcgV2ViIHNlcnZpY2VzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5XZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwKLWEgcHJpdmF0ZSBidXNpbmVzcyByZWdpc3RyeSwgb3IgYSBXU0lMIGRvY3VtZW50LiBVRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeQotb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpcgotc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5kaXNjb3ZlcmluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5VRERJPGluZGV4dGVybT5kaXNjb3ZlcmluZyBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTCBmaWxlczxpbmRleHRlcm0+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRhZGRyZWcuZGl0YSI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcwotaXQgcHJvdmlkZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZQotc3BlY2lmaWNhdGlvbiwgcmVmZXIgdG8gIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sIgotc2NvcGU9ImV4dGVybmFsIj4gd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC94cmVmPi4KLSAuPC9wPjxwPllvdSBjYW4gZGlzY292ZXIgYSBXZWIgc2VydmljZSBpbiB0d28gd2F5cyB1c2luZyB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjo8L3A+PC9jb250ZXh0PgotPHJlc3VsdD48dWw+Ci08bGk+IERpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFVEREkgcmVnaXN0cnkgPC9saT4KLTxsaT4gRGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NJTCBkb2N1bWVudCA8L2xpPgotPC91bD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZGlzY292ZXJfZnJvbV91ZGRpIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPiBEaXNjb3ZlcmluZyBhIFdlYiBTZXJ2aWNlIGZyb20gYSBVRERJIFJlZ2lzdHJ5PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSByZWdpc3RyeSBjb250YWlucyBVUkwgcmVmZXJlbmNlcyB0byBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50cy4KLUluIG9yZGVyIHRvIGRpc2NvdmVyIGEgV2ViIHNlcnZpY2UgdGhlIFVSTCB0byB0aGUgV2ViIHNlcnZpY2UgV1NETCBkb2N1bWVudAotbXVzdCBiZSByZXNvbHZhYmxlLiBUbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPlVEREkgTWFpbjwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgc2VsZWN0IGEgcmVnaXN0cnkgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QgYW5kCi1jbGljayA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyIGNsaWNrIHRoZSAgPGI+RmluZDwvYj4gaWNvbiAgPGltYWdlCi1hbHQ9IkEgcGljdHVyZSBvZiB0aGUgRmluZCBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL2ZpbmQuZ2lmIj48L2ltYWdlPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5LCB3aGF0IHlvdSBhcmUKLXNlYXJjaGluZyBmb3IsIHRoZSB0eXBlIG9mIHNlYXJjaCB0aGF0IHlvdSB3YW50IHRvIHBlcmZvcm0sIGFuZCBhbnkgcXVlcnkKLWluZm9ybWF0aW9uOiA8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+IDxiPlNlYXJjaCBmb3I8L2I+Jm5ic3A7IFRoaXMgbGlzdCBhbGxvd3MgeW91IHRvIHNlYXJjaCBmb3IKLWJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMuIDwvY21kPjxpbmZvPjx1bD4KLTxsaT4gPGI+QnVzaW5lc3NlczwvYj4gT25jZSB5b3UgbG9jYXRlIGEgYnVzaW5lc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlCi1pY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGJ1c2luZXNzIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYnVzaW5lc3M8L2xpPgotPGxpPlB1Ymxpc2ggYSBzZXJ2aWNlPC9saT4KLTxsaT5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvbGk+Ci08bGk+TWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9saT4KLTxsaT5BZGQgdGhlIGJ1c2luZXNzIHRvIEZhdm9yaXRlczwvbGk+Ci08bGk+VW5wdWJsaXNoIHRoZSBidXNpbmVzczwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+IDxiPlNlcnZpY2VzPC9iPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGluIHRoZSByZWdpc3RyeSwgdXNlIHRoZSBpY29ucwotaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgc2VydmljZSBkZXRhaWxzPC9saT4KLTxsaT5HZXQgdGhlIGJ1c2luZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZSBpbnRlcmZhY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotPGxpPkltcG9ydCB0aGUgc2VydmljZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLTxsaT5BZGQgdGhlIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9saT4KLTxsaT5VbnB1Ymxpc2ggdGhlIHNlcnZpY2U8L2xpPgotPC91bD48L2xpPgotPGxpPiA8Yj5TZXJ2aWNlIGludGVyZmFjZXM8L2I+IE9uY2UgeW91IGxvY2F0ZSBhIHNlcnZpY2UgaW50ZXJmYWNlIGluIHRoZQotcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgaW50ZXJmYWNlIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotPGxpPkdldCB0aGUgYnVzaW5lc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci08bGk+SW1wb3J0IHRoZSBzZXJ2aWNlIGludGVyZmFjZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkczwvbGk+Ci08bGk+QWRkIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBGYXZvcml0ZXM8L2xpPgotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotPC91bD48L2xpPgotPC91bD48L2luZm8+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD4gPGI+VHlwZSBvZiBzZWFyY2g8L2I+Jm5ic3A7IFRoZXNlIHJhZGlvIGJ1dHRvbnMgYWxsb3cgeW91IHRvCi1zcGVjaWZ5IGEgc2ltcGxlIG9yIGFkdmFuY2VkIHNlYXJjaCwgb3IgYSBzZWFyY2ggYnkgYSBVbml2ZXJzYWwgVW5pcXVlIElkZW50aWZpZXIKLShVVUlEKS4gPC9jbWQ+PGluZm8+PGRsPjxkbGVudHJ5PgotPGR0PlNpbXBsZTwvZHQ+Ci08ZGQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgYnVzaW5lc3Nlcywgc2VydmljZXMsIG9yIHNlcnZpY2UgaW50ZXJmYWNlcyBmb3Igd2hpY2gKLXlvdSBhcmUgc2VhcmNoaW5nLiAgPGI+Tm90ZTo8L2I+IFRoZSBzZWFyY2ggc2V0IHNpemUgaXMgc2V0IHRvIDEwMCBhbmQgdGhlCi1tYXhpbXVtIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIGlzIHNldCB0byAxMCBieSBkZWZhdWx0LiZuYnNwOyBJZiB5b3Ugd291bGQKLWxpa2UgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLCB1c2UgdGhlIEFkdmFuY2VkIHNlYXJjaC48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5PgotPGR0PkFkdmFuY2VkIDwvZHQ+Ci08ZGQ+QWxsb3dzIHlvdSB0byBlbnRlciBtb3JlIHNlYXJjaCBvcHRpb25zIHRvIGZvY3VzIHRoZSBzY29wZSBvZiB5b3VyIHNlYXJjaC4KLVNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd291bGQgbGlrZSB0byBzZWFyY2ggZm9yIG11bHRpcGxlIGJ1c2luZXNzZXMgb3IKLXNlcnZpY2VzLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnk+Ci08ZHQ+VVVJRCA8L2R0PgotPGRkPkFsbG93IHlvdSB0byBlbnRlciB0aGUgVVVJRCBrZXkuIFRoZSBVVUlEIGtleSBpcyB0aGUgaWRlbnRpZmllciB0aGF0IGlzCi1hc3NvY2lhdGVkIHdpdGggdGhlIHB1Ymxpc2hlZCBvYmplY3QuPC9kZD4KLTwvZGxlbnRyeT48L2RsPjwvaW5mbz48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5PbmNlIHlvdSBoYXZlIHNlYXJjaGVkIGFuZCBkaXNjb3ZlcmVkIHRoZSBidXNpbmVzcyBzZXJ2aWNlIGRlc2NyaXB0aW9uCi15b3UgZGVzaXJlZCwgc2VsZWN0IHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXJ2aWNlIGludGVyZmFjZSBhbmQgY2xpY2sgdGhlICA8Yj5JbXBvcnQ8L2I+IGljb24KLXRvOiA8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB5b3VyIFdlYiBwcm9qZWN0PC9jaG9pY2U+Ci08Y2hvaWNlPmltcG9ydCB0aGUgV1NETCBkb2N1bWVudCBpbnRvIHRoZSBXU0RMIEV4cGxvcmVyIGZvciB0ZXN0aW5nPC9jaG9pY2U+Ci08Y2hvaWNlPmxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgU2tlbGV0b24gQ3JlYXRpb24gd2l6YXJkIG9yIFdlYiBTZXJ2aWNlIENsaWVudAotd2l6YXJkIGRpcmVjdGx5IGZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2Nob2ljZT4KLTwvY2hvaWNlcz4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImRpc2NvdmVyX2Zyb21fd3NpbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgV1NJTCBEb2N1bWVudDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLCBjbGljayB0aGUgIDxiPldTSUwgUGFnZTwvYj4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIFdTSUwgUGFnZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3dzaWx2aWV3LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgIDxiPldTSUwgTWFpbjwvYj4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgIDxiPlVSTCB0byBkb2N1bWVudDwvYj4gZmllbGQgb2YgdGhlIEFjdGlvbnMgcGFuZSBlbnRlcgotdGhlIFVSTCB0byB0aGUgV1NJTCBkb2N1bWVudCBvciBIVFRQIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbGlua3MgdG8gYSBXU0lMCi1kb2N1bWVudC4gRGV0YWlscyBvbiBob3cgYW4gSFRUUCBmaWxlIGNhbiBjb250YWluIGxpbmtzIHRvIFdTSUwgY2FuIGJlIGZvdW5kCi1oZXJlOiBodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgbG9jYXRlZCB0aGUgV1NJTCBkb2N1bWVudCwgdXNlIHRoZSBpY29ucyBpbiB0aGUgQWN0aW9uCi1wYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT5WaWV3IFdTSUwgZG9jdW1lbnQgZGV0YWlsczwvY2hvaWNlPgotPGNob2ljZT5MaXN0IGFsbCBvZiB0aGUgV1NETCBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBVRERJIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+TGlzdCBhbGwgb2YgdGhlIFVEREkgYnVzaW5lc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBXU0lMIGxpbmtzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+SW1wb3J0IHRoZSBXU0lMIGRvY3VtZW50IHRvIHRoZSBmaWxlIHN5c3RlbTwvY2hvaWNlPgotPGNob2ljZT5BZGQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gRmF2b3JpdGVzPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08aW5mbz48Yj5JbXBvcnRhbnQ6PC9iPiBJZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGRvZXMgbm90IGRpc3BsYXkgdGhlCi1wcm9qZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IHlvdXIgV1NETCBmaWxlIHRvLCBlbnN1cmUgdGhhdCB5b3UgaGF2ZQotY3JlYXRlZCB0aGUgcHJvamVjdCBhbmQvb3IgY2xpY2sgdGhlICA8Yj5SZWZyZXNoPC9iPiBpY29uLjwvaW5mbz48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHByb2R1Y3Q9IiIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcxZWJkYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgbG9jYXRlZCB0aHJvdWdoIGEgcHVibGljIGJ1c2luZXNzIHJlZ2lzdHJ5LCBhIHByaXZhdGUgYnVzaW5lc3MgcmVnaXN0cnksIG9yIGEgV1NJTCBkb2N1bWVudC4gVURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwgYSBwcml2YXRlIGJ1c2luZXNzIHJlZ2lzdHJ5LCBvciBhIFdTSUwgZG9jdW1lbnQuIFVEREkgbWFuYWdlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGRpc2NvdmVyaW5nLCBVRERJLCBkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMsIFdTSUwgZmlsZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGRpc2NvdmVyaW5nLCBVRERJLCBkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMsIFdTSUwgZmlsZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRkaXNjb3YiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGRpc2NvdiI+PGEgbmFtZT0idGRpc2NvdiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzPC9oMT4KLQotCi0KLQotPGRpdj48cD5XZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwKLWEgcHJpdmF0ZSBidXNpbmVzcyByZWdpc3RyeSwgb3IgYSBXU0lMIGRvY3VtZW50LiBVRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeQotb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpcgotc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcwotaXQgcHJvdmlkZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZQotc3BlY2lmaWNhdGlvbiwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9hPi4KLSAuPC9wPgotPHA+WW91IGNhbiBkaXNjb3ZlciBhIFdlYiBzZXJ2aWNlIGluIHR3byB3YXlzIHVzaW5nIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyOjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48dWw+Ci08bGk+RGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgVURESSByZWdpc3RyeTwvbGk+Ci0KLTxsaT5EaXNjb3ZlcmluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0lMIGRvY3VtZW50PC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZGlzY292ZXJfZnJvbV91ZGRpIj48YSBuYW1lPSJkaXNjb3Zlcl9mcm9tX3VkZGkiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+IERpc2NvdmVyaW5nIGEgV2ViIFNlcnZpY2UgZnJvbSBhIFVEREkgUmVnaXN0cnk8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIFVSTCByZWZlcmVuY2VzIHRvIFdlYiBzZXJ2aWNlIFdTREwgZG9jdW1lbnRzLgotSW4gb3JkZXIgdG8gZGlzY292ZXIgYSBXZWIgc2VydmljZSB0aGUgVVJMIHRvIHRoZSBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50Ci1tdXN0IGJlIHJlc29sdmFibGUuIFRvIGxvY2F0ZSBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VURESSBNYWluPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgc2VsZWN0IGEgcmVnaXN0cnkgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QgYW5kCi1jbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIgY2xpY2sgdGhlICA8c3Ryb25nPkZpbmQ8L3N0cm9uZz4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9maW5kLmdpZiIgYWx0PSJBIHBpY3R1cmUgb2YgdGhlIEZpbmQgaWNvbi4iIC8+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lLCBlbnRlciB0aGUgbmFtZSBvZiB0aGUgcXVlcnksIHdoYXQgeW91IGFyZQotc2VhcmNoaW5nIGZvciwgdGhlIHR5cGUgb2Ygc2VhcmNoIHRoYXQgeW91IHdhbnQgdG8gcGVyZm9ybSwgYW5kIGFueSBxdWVyeQotaW5mb3JtYXRpb246IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+IDxzdHJvbmc+U2VhcmNoIGZvcjwvc3Ryb25nPsKgIFRoaXMgbGlzdCBhbGxvd3MgeW91IHRvIHNlYXJjaCBmb3IKLWJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMuIDwvc3Bhbj4gPHVsPgotPGxpPiA8c3Ryb25nPkJ1c2luZXNzZXM8L3N0cm9uZz4gT25jZSB5b3UgbG9jYXRlIGEgYnVzaW5lc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlCi1pY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGJ1c2luZXNzIGRldGFpbHM8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBidXNpbmVzczwvbGk+Ci0KLTxsaT5QdWJsaXNoIGEgc2VydmljZTwvbGk+Ci0KLTxsaT5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvbGk+Ci0KLTxsaT5NYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnM8L2xpPgotCi08bGk+QWRkIHRoZSBidXNpbmVzcyB0byBGYXZvcml0ZXM8L2xpPgotCi08bGk+VW5wdWJsaXNoIHRoZSBidXNpbmVzczwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+IDxzdHJvbmc+U2VydmljZXM8L3N0cm9uZz4gT25jZSB5b3UgbG9jYXRlIGEgc2VydmljZSBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMKLWluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6IDx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IHNlcnZpY2UgZGV0YWlsczwvbGk+Ci0KLTxsaT5HZXQgdGhlIGJ1c2luZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZTwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBFY2xpcHNlIHdvcmtiZW5jaDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci0KLTxsaT5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIHdpemFyZHM8L2xpPgotCi08bGk+QWRkIHRoZSBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvbGk+Ci0KLTxsaT5VbnB1Ymxpc2ggdGhlIHNlcnZpY2U8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPiA8c3Ryb25nPlNlcnZpY2UgaW50ZXJmYWNlczwvc3Ryb25nPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGludGVyZmFjZSBpbiB0aGUKLXJlZ2lzdHJ5LCB1c2UgdGhlIGljb25zIGluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6IDx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGludGVyZmFjZSBkZXRhaWxzPC9saT4KLQotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08bGk+R2V0IHRoZSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2UgaW50ZXJmYWNlPC9saT4KLQotPGxpPkltcG9ydCB0aGUgc2VydmljZSBpbnRlcmZhY2UgV1NETCBmaWxlIHRvIHRoZSBFY2xpcHNlIHdvcmtiZW5jaDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotCi08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLQotPGxpPkFkZCB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gRmF2b3JpdGVzPC9saT4KLQotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08L3VsPgotPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+IDxzdHJvbmc+VHlwZSBvZiBzZWFyY2g8L3N0cm9uZz7CoCBUaGVzZSByYWRpbyBidXR0b25zIGFsbG93IHlvdSB0bwotc3BlY2lmeSBhIHNpbXBsZSBvciBhZHZhbmNlZCBzZWFyY2gsIG9yIGEgc2VhcmNoIGJ5IGEgVW5pdmVyc2FsIFVuaXF1ZSBJZGVudGlmaWVyCi0oVVVJRCkuIDwvc3Bhbj4gPGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPlNpbXBsZTwvZHQ+Ci0KLTxkZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBidXNpbmVzc2VzLCBzZXJ2aWNlcywgb3Igc2VydmljZSBpbnRlcmZhY2VzIGZvciB3aGljaAoteW91IGFyZSBzZWFyY2hpbmcuICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBzZWFyY2ggc2V0IHNpemUgaXMgc2V0IHRvIDEwMCBhbmQgdGhlCi1tYXhpbXVtIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIGlzIHNldCB0byAxMCBieSBkZWZhdWx0LsKgIElmIHlvdSB3b3VsZAotbGlrZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMsIHVzZSB0aGUgQWR2YW5jZWQgc2VhcmNoLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkFkdmFuY2VkIDwvZHQ+Ci0KLTxkZD5BbGxvd3MgeW91IHRvIGVudGVyIG1vcmUgc2VhcmNoIG9wdGlvbnMgdG8gZm9jdXMgdGhlIHNjb3BlIG9mIHlvdXIgc2VhcmNoLgotU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHNlYXJjaCBmb3IgbXVsdGlwbGUgYnVzaW5lc3NlcyBvcgotc2VydmljZXMuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+VVVJRCA8L2R0PgotCi08ZGQ+QWxsb3cgeW91IHRvIGVudGVyIHRoZSBVVUlEIGtleS4gVGhlIFVVSUQga2V5IGlzIHRoZSBpZGVudGlmaWVyIHRoYXQgaXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGlzaGVkIG9iamVjdC48L2RkPgotCi08L2RsPgotPC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPk9uY2UgeW91IGhhdmUgc2VhcmNoZWQgYW5kIGRpc2NvdmVyZWQgdGhlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb24KLXlvdSBkZXNpcmVkLCBzZWxlY3QgdGhlIHNlcnZpY2Ugb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBjbGljayB0aGUgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IGljb24KLXRvOiA8L3NwYW4+Ci08dWw+Ci08bGk+aW1wb3J0IHRoZSBXU0RMIGRvY3VtZW50IGludG8geW91ciBXZWIgcHJvamVjdDwvbGk+Ci0KLTxsaT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB0aGUgV1NETCBFeHBsb3JlciBmb3IgdGVzdGluZzwvbGk+Ci0KLTxsaT5sYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFNrZWxldG9uIENyZWF0aW9uIHdpemFyZCBvciBXZWIgU2VydmljZSBDbGllbnQKLXdpemFyZCBkaXJlY3RseSBmcm9tIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkaXNjb3Zlcl9mcm9tX3dzaWwiPjxhIG5hbWU9ImRpc2NvdmVyX2Zyb21fd3NpbCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgV1NJTCBEb2N1bWVudDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+V1NJTCBQYWdlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaWx2aWV3LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBXU0lMIFBhZ2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgIDxzdHJvbmc+V1NJTCBNYWluPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSAgPHN0cm9uZz5VUkwgdG8gZG9jdW1lbnQ8L3N0cm9uZz4gZmllbGQgb2YgdGhlIEFjdGlvbnMgcGFuZSBlbnRlcgotdGhlIFVSTCB0byB0aGUgV1NJTCBkb2N1bWVudCBvciBIVFRQIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbGlua3MgdG8gYSBXU0lMCi1kb2N1bWVudC4gRGV0YWlscyBvbiBob3cgYW4gSFRUUCBmaWxlIGNhbiBjb250YWluIGxpbmtzIHRvIFdTSUwgY2FuIGJlIGZvdW5kCi1oZXJlOiBodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5PbmNlIHlvdSBoYXZlIGxvY2F0ZWQgdGhlIFdTSUwgZG9jdW1lbnQsIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbgotcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6PC9zcGFuPgotPHVsPgotPGxpPlZpZXcgV1NJTCBkb2N1bWVudCBkZXRhaWxzPC9saT4KLQotPGxpPkxpc3QgYWxsIG9mIHRoZSBXU0RMIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFVEREkgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5MaXN0IGFsbCBvZiB0aGUgVURESSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFdTSUwgbGlua3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gdGhlIGZpbGUgc3lzdGVtPC9saT4KLQotPGxpPkFkZCB0aGUgV1NJTCBkb2N1bWVudCB0byBGYXZvcml0ZXM8L2xpPgotCi08L3VsPgotCi0gPHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IElmIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZG9lcyBub3QgZGlzcGxheSB0aGUKLXByb2plY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBpbXBvcnQgeW91ciBXU0RMIGZpbGUgdG8sIGVuc3VyZSB0aGF0IHlvdSBoYXZlCi1jcmVhdGVkIHRoZSBwcm9qZWN0IGFuZC9vciBjbGljayB0aGUgIDxzdHJvbmc+UmVmcmVzaDwvc3Ryb25nPiBpY29uLjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDRhZGVhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGdlbndzaWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGU8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBjYW4gYmUgZ2VuZXJhdGVkIGF0IGFueSBwb2ludCBpbiB0aGUgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgY3ljbGUgb25jZQotdGhlIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Z2VuZXJhdGluZyBXU0lMIGZpbGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUwgZmlsZXM8aW5kZXh0ZXJtPmdlbmVyYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PGI+UHJlcmVxdWlzaXRlczo8L2I+IEluIG9yZGVyIHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlLCB5b3UgbmVlZCB0bwota25vdyB0aGUgVVJMIHRvIGEgV1NETCBmaWxlLjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+V1NJTCBoZWxwcyBzeW5jaHJvbml6ZSB0aGlzIHByb2Nlc3MgYnkgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcwotdG8gV1NETCBVUkxzLiBXZWIgc2VydmljZXMgdG9vbHMgdGhhdCBwcm9jZXNzIFdTREwgZG9jdW1lbnRzIC0gc3VjaCBhcyB0aGUKLVdlYiBTZXJ2aWNlIENsaWVudCBhbmQgQ3JlYXRpb24gd2l6YXJkcyAtIHdpbGwgYWNjZXB0IGEgV1NJTCBkb2N1bWVudCBhcyBhCi1zdWJzdGl0dXRlIGZvciBXU0RMLiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlCi0oV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0IGR1cmluZyBXZWIgc2VydmljZSBjbGllbnQgZ2VuZXJhdGlvbiwgdGhlbgotYXQgYSBsYXRlciB0aW1lIGVhc2lseSByZWdlbmVyYXRlIHRoZSBjbGllbnQgZnJvbSB0aGF0IHJlZmVyZW5jZSBkb2N1bWVudC4KLU5vIGNvcGllcyBvZiB0aGUgV1NETCBvciBXU0RMIFVSTHMgYXJlIHJlcXVpcmVkLjwvcD48cD5Zb3UgY2FuIGdlbmVyYXRlIGEKLVdTSUwgZmlsZSBmcm9tIGEgcHJlLWV4aXN0aW5nIFdTREwgZmlsZSBvciBkdXJpbmcgV2ViIHNlcnZpY2UgY3JlYXRpb24gb3IKLWNvbnN1bXB0aW9uLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTI3IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUgdGhvdWdoIHRoZSBpbXBvcnQgdXRpbGl0eTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBnZW5lcmF0ZSBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBpbXBvcnQgdXRpbGl0eTo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5PcHRpb25hbDogU2VsZWN0IHRoZSBXU0RMIGRvY3VtZW50IGZvciB3aGljaCB5b3Ugd2FudCB0byBjcmVhdGUKLWEgV1NJTCBmaWxlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgIDxiPkZpbGU8L2I+IG1lbnUsIHNlbGVjdCAgPGI+SW1wb3J0PC9iPiA+ICA8Yj5XU0lMID4KLU5leHQ8L2I+LiBUaGUgV1NJTCBJbXBvcnQgd2luZG93IG9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcGVyZm9ybSBzdGVwIDEsIHRoZSBXU0lMIFVSSSBmaWVsZCBzaG91bGQKLWJlIHByZWZpbGxlZCB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgV1NETCBmaWxlLCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGhhcyBiZWVuCi1jaGFuZ2VkIGZyb20gIDxzeXN0ZW1vdXRwdXQ+LndzZGw8L3N5c3RlbW91dHB1dD4gdG8gIDxzeXN0ZW1vdXRwdXQ+LndzaWw8L3N5c3RlbW91dHB1dD4uCi1UaGUgV1NETCBzZWN0aW9uIHNob3VsZCBjb250YWluIHRoZSBVUkxzIHRvIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGVzLiBZb3UgY2FuCi1hbHNvIGVudGVyIGFkZGl0aW9uYWwgV1NETCBVUkxzLiBBbHRlcm5hdGVseSwgeW91IGNhbiBicm93c2UgdG8gdGhlIGxvY2F0aW9uCi1vZiBhIFdTSUwgZmlsZSwgb3IgbWFudWFsbHkgZW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGFuZCBXU0RMIGZpbGVzCi1pbiB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb25zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgRmluaXNoLiBBIFdTSUwgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNjIiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gZ2VuZXJhdGUgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9wZW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9wZW4gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iaWNvbiB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHNlcnZpY2VzIGV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9wZW4gYSBXU0RMIGZpbGUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsCi1hbmQgZnJvbSB0aGUgYXZhaWxhYmxlIGFjdGlvbnMsIGNob29zZSB0byBpbXBvcnQgYSBXU0RMIGZpbGUgdG8gdGhlIHdvcmtiZW5jaAotYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iaWNvbiB1c2VkIHRvIGltcG9ydCBhIGZpbGUiIGhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPgotPC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCAgPGI+SW1wb3J0IGFzIGEgc2VydmljZSByZWZlcmVuY2UgdG8gYSBXU0lMIGRvY3VtZW50PC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgYSBuYW1lIGZvciB0aGUgV1NJTCBmaWxlIHRoYXQgeW91IHdhbnQgdG8gZ2VuZXJhdGUsIGFuZCBjbGljawotIDxiPkdvPC9iPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjExNGE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlIHRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlIHRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgZ2VuZXJhdGluZyBXU0lMLCBXU0lMLCBnZW5lcmF0aW5nIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBnZW5lcmF0aW5nIFdTSUwsIFdTSUwsIGdlbmVyYXRpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRnZW53c2lsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGdlbndzaWwiPjxhIG5hbWU9InRnZW53c2lsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlPC9oMT4KLQotCi0KLQotPGRpdj48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdTSUwgY2FuIGJlIGdlbmVyYXRlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IGN5Y2xlIG9uY2UKLXRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHN0cm9uZz5QcmVyZXF1aXNpdGVzOjwvc3Ryb25nPiBJbiBvcmRlciB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSwgeW91IG5lZWQgdG8KLWtub3cgdGhlIFVSTCB0byBhIFdTREwgZmlsZS48L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V1NJTCBoZWxwcyBzeW5jaHJvbml6ZSB0aGlzIHByb2Nlc3MgYnkgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcwotdG8gV1NETCBVUkxzLiBXZWIgc2VydmljZXMgdG9vbHMgdGhhdCBwcm9jZXNzIFdTREwgZG9jdW1lbnRzIC0gc3VjaCBhcyB0aGUKLVdlYiBTZXJ2aWNlIENsaWVudCBhbmQgQ3JlYXRpb24gd2l6YXJkcyAtIHdpbGwgYWNjZXB0IGEgV1NJTCBkb2N1bWVudCBhcyBhCi1zdWJzdGl0dXRlIGZvciBXU0RMLiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlCi0oV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0IGR1cmluZyBXZWIgc2VydmljZSBjbGllbnQgZ2VuZXJhdGlvbiwgdGhlbgotYXQgYSBsYXRlciB0aW1lIGVhc2lseSByZWdlbmVyYXRlIHRoZSBjbGllbnQgZnJvbSB0aGF0IHJlZmVyZW5jZSBkb2N1bWVudC4KLU5vIGNvcGllcyBvZiB0aGUgV1NETCBvciBXU0RMIFVSTHMgYXJlIHJlcXVpcmVkLjwvcD4KLTxwPllvdSBjYW4gZ2VuZXJhdGUgYQotV1NJTCBmaWxlIGZyb20gYSBwcmUtZXhpc3RpbmcgV1NETCBmaWxlIG9yIGR1cmluZyBXZWIgc2VydmljZSBjcmVhdGlvbiBvcgotY29uc3VtcHRpb24uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUyNyI+PGEgbmFtZT0iZDBlMjciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aG91Z2ggdGhlIGltcG9ydCB1dGlsaXR5PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIGltcG9ydCB1dGlsaXR5OjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+T3B0aW9uYWw6IFNlbGVjdCB0aGUgV1NETCBkb2N1bWVudCBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY3JlYXRlCi1hIFdTSUwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkZyb20gdGhlICA8c3Ryb25nPkZpbGU8L3N0cm9uZz4gbWVudSwgc2VsZWN0ICA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPiAmZ3Q7ICA8c3Ryb25nPldTSUwgJmd0OwotTmV4dDwvc3Ryb25nPi4gVGhlIFdTSUwgSW1wb3J0IHdpbmRvdyBvcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHBlcmZvcm0gc3RlcCAxLCB0aGUgV1NJTCBVUkkgZmllbGQgc2hvdWxkCi1iZSBwcmVmaWxsZWQgd2l0aCB0aGUgbmFtZSBvZiB5b3VyIFdTREwgZmlsZSwgd2hlcmUgdGhlIGV4dGVuc2lvbiBoYXMgYmVlbgotY2hhbmdlZCBmcm9tICA8dHQgY2xhc3M9InN5c291dCI+LndzZGw8L3R0PiB0byAgPHR0IGNsYXNzPSJzeXNvdXQiPi53c2lsPC90dD4uCi1UaGUgV1NETCBzZWN0aW9uIHNob3VsZCBjb250YWluIHRoZSBVUkxzIHRvIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGVzLiBZb3UgY2FuCi1hbHNvIGVudGVyIGFkZGl0aW9uYWwgV1NETCBVUkxzLiBBbHRlcm5hdGVseSwgeW91IGNhbiBicm93c2UgdG8gdGhlIGxvY2F0aW9uCi1vZiBhIFdTSUwgZmlsZSwgb3IgbWFudWFsbHkgZW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGFuZCBXU0RMIGZpbGVzCi1pbiB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb25zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgRmluaXNoLiBBIFdTSUwgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLjwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNjIiPjxhIG5hbWU9ImQwZTYyIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9wZW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPk9wZW4gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiIGFsdD0iaWNvbiB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHNlcnZpY2VzIGV4cGxvcmVyIiAvPjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+T3BlbiBhIFdTREwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGhhdmUgb3BlbmVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwKLWFuZCBmcm9tIHRoZSBhdmFpbGFibGUgYWN0aW9ucywgY2hvb3NlIHRvIGltcG9ydCBhIFdTREwgZmlsZSB0byB0aGUgd29ya2JlbmNoCi1ieSBjbGlja2luZyB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJpY29uIHVzZWQgdG8gaW1wb3J0IGEgZmlsZSIgLz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5JbXBvcnQgYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQ8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkVudGVyIGEgbmFtZSBmb3IgdGhlIFdTSUwgZmlsZSB0aGF0IHlvdSB3YW50IHRvIGdlbmVyYXRlLCBhbmQgY2xpY2sKLSA8c3Ryb25nPkdvPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwZjBlNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGxvZ2V4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvdGl0bGU+Ci08c2hvcnRkZXNjPklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuCi1sb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPmxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+bG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5UbyBMb2cgaW4gdG8gdGhlIHJlZ2lzdHJ5OjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSByZWdpc3RyeSwgeW91IGNhbiBzY3JvbGwgdG8gdGhlIDx1aWNvbnRyb2w+T3RoZXIKLUFjdGlvbnM8L3VpY29udHJvbD4gc2VjdGlvbiBvZiB0aGUgcGFnZSBhbmQgc2VsZWN0IDx1aWNvbnRyb2w+TG9naW48L3VpY29udHJvbD4sCi1vciB1c2UgdGhlIGxvZ2luIGJ1dHRvbiBhdCB0aGUgdG9wIG9mIHRoZSBFeHBsb3JlcjogPGltYWdlIGhyZWY9Ii4uL2ltYWdlcy9sb2dpbmljb24uZ2lmIj4KLTxhbHQ+c2NyZWVuIGNhcHR1cmUgb2YgdGhlIGxvZ2luIGljb248L2FsdD48L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBVUkwgKGlmIGl0IGhhcyBub3QgYmVlbiBwcmVmaWxsZWQgZm9yIHlvdSksIHRoZSB1c2VyCi1JRCwgYW5kIHRoZSBwYXNzd29yZCBmb3IgdGhlIHJlZ2lzdHJ5IGFuZCBjbGljayA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgU3VtbWFyeSBvZiBCdXNpbmVzcyBwYWdlIGRpc3BsYXlzLiBJdCBsaXN0cyBhbGwgdGhlIGJ1c2luZXNzZXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+V2hlbiB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluLCB0aGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLWEgbWVzc2FnZSBpbmRpY2F0aW5nIHlvdSB3ZXJlIHN1Y2Nlc3NmdWwuPC9wPjwvcmVzdWx0PgotPHBvc3RyZXE+VG8gbG9nIG91dCBvZiB0aGUgcmVnaXN0cnkgY2xpY2sgdGhlIExvZ291dCBidXR0b246IDxpbWFnZSBocmVmPSIuLi9pbWFnZXMvbG9nb3V0aWNvbi5naWYiPgotPGFsdD5zY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9nb3V0IGljb248L2FsdD48L2ltYWdlPi48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZWY5NGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgcHVibGlzaGVkIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5IHlvdSBjYW4gbG9nIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2UgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbiBsb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbG9nZ2luZyBpbnRvIGEgcmVnaXN0cnksIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIGxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5LCBXZWIgU2VydmljZXMgRXhwbG9yZXIsIGxvZ2dpbmcgaW50byBhIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRsb2dleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGxvZ2V4cCI+PGEgbmFtZT0idGxvZ2V4cCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+TG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnk8L2gxPgotCi0KLQotPGRpdj48cD5JZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbgotbG9nIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2UgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gTG9nIGluIHRvIHRoZSByZWdpc3RyeTo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSByZWdpc3RyeSwgeW91IGNhbiBzY3JvbGwgdG8gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk90aGVyCi1BY3Rpb25zPC9zcGFuPiBzZWN0aW9uIG9mIHRoZSBwYWdlIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TG9naW48L3NwYW4+LAotb3IgdXNlIHRoZSBsb2dpbiBidXR0b24gYXQgdGhlIHRvcCBvZiB0aGUgRXhwbG9yZXI6IDxpbWcgc3JjPSIuLi9pbWFnZXMvbG9naW5pY29uLmdpZiIgYWx0PSJzY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9naW4gaWNvbiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgVVJMIChpZiBpdCBoYXMgbm90IGJlZW4gcHJlZmlsbGVkIGZvciB5b3UpLCB0aGUgdXNlcgotSUQsIGFuZCB0aGUgcGFzc3dvcmQgZm9yIHRoZSByZWdpc3RyeSBhbmQgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgU3VtbWFyeSBvZiBCdXNpbmVzcyBwYWdlIGRpc3BsYXlzLiBJdCBsaXN0cyBhbGwgdGhlIGJ1c2luZXNzZXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldoZW4geW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbiwgdGhlIFN0YXR1cyBwYW5lIGRpc3BsYXlzCi1hIG1lc3NhZ2UgaW5kaWNhdGluZyB5b3Ugd2VyZSBzdWNjZXNzZnVsLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBsb2cgb3V0IG9mIHRoZSByZWdpc3RyeSBjbGljayB0aGUgTG9nb3V0IGJ1dHRvbjogPGltZyBzcmM9Ii4uL2ltYWdlcy9sb2dvdXRpY29uLmdpZiIgYWx0PSJzY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9nb3V0IGljb24iIC8+LjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMzQ1MzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0cHViZW50IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L3RpdGxlPgotPHNob3J0ZGVzYz5BIGJ1c2luZXNzIGVudGl0eSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVzaW5lc3MgdGhhdAotaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuJm5ic3A7IEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLAoteW91IG11c3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0cHViZW50fDF8VURESXB1Ymxpc2hpbmdhYnVzaW5lc3NlbnRpdHkiIHN0YXR1cz0idW5jaGFuZ2VkIj5VRERJPGluZGV4dGVybT5wdWJsaXNoaW5nCi1hIGJ1c2luZXNzIGVudGl0eTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0ga2V5cmVmPSJ0cHViZW50fDJ8V2Vic2VydmljZXNwdWJsaXNoaW5nYWJ1c2luZXNzZW50aXR5Igotc3RhdHVzPSJ1bmNoYW5nZWQiPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHVibGlzaGluZzxpbmRleHRlcm0+YnVzaW5lc3MgZW50aXRpZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0ga2V5cmVmPSJ0cHViZW50fDN8YnVzaW5lc3NlbnRpdGllc3B1Ymxpc2hpbmd0b1VEREkiIHN0YXR1cz0idW5jaGFuZ2VkIj5idXNpbmVzcwotZW50aXRpZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcgdG8gVURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48eHJlZiBocmVmPSJ0cmVnLmRpdGEiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5Zb3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+PGxxPiA8cD4gPHVpY29udHJvbD5TaW1wbGU8L3VpY29udHJvbD4gQWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIG1pbmltYWwgYW1vdW50IG9mIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcwotZW50aXR5LiZuYnNwOyBBIHNpbXBsZSBwdWJsaXNoIG9ubHkgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG9ubHkgb25lIG5hbWUgYW5kCi1vbmUgYnVzaW5lc3MgZGVzY3JpcHRpb24uPC9wPjxwPiA8dWljb250cm9sPkFkdmFuY2VkIDwvdWljb250cm9sPiBBbGxvd3MgeW91Ci10byBlbnRlciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgYnVzaW5lc3MgZW50aXR5LiBBbiBhZHZhbmNlZCBwdWJsaXNoCi1hbGxvd3MgeW91IHRvIHNwZWNpZnkgbXVsdGlwbGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgbXVsdGktbGluZ3VhbCBzdXBwb3J0LjwvcD4gPC9scT48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTc0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb248L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBzZWxlY3QgVURESSBNYWluIGFuZCBzZWxlY3QgdGhlIHJlZ2lzdHJ5Ci10byB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUmbmJzcDtOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoCi15b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxiPlB1Ymxpc2g8L2I+IGljb24gIDxpbWFnZQotYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoICBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3B1Ymxpc2gyLmdpZiI+PC9pbWFnZT4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgIDxiPlNpbXBsZTwvYj4gcmFkaW8gYnV0dG9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBXZWIKLVNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLgotVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZgotdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cgZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMTMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUmbmJzcDsgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPGI+UHVibGlzaCBTZXJ2aWNlPC9iPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5BZHZhbmNlZDwvYj4gcmFkaW8gYnV0dG9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBhbmQgV1NETCBVUkwgaW4KLXRoZSByZXNwZWN0aXZlIGZpZWxkcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBuYW1lcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBkZXNjcmlwdGlvbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkFkZDwvdWljb250cm9sPiB0byBjcmVhdGUgYW4gaWRlbnRpZmllci4gRm9yIGV4YW1wbGUsCi1hbiBpZGVudGlmaWVyIGZvciB5b3VyIGJ1c2luZXNzIGVudGl0eSBtYXkgYmUgeW91ciBidXNpbmVzcyBwaG9uZSBudW1iZXIuCi1UaGUga2V5IG5hbWUgd291bGQgYmUgIlBob25lIE51bWJlciIgYW5kIHRoZSBrZXkgdmFsdWUgd291bGQgYmUgeW91ciBidXNpbmVzcwotdGVsZXBob25lIG51bWJlci4gPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBjYXRlZ29yaWVzLgotU2VsZWN0IGEgY2F0ZWdvcnkgdHlwZSBmcm9tIHRoZSBkcm9wIGRvd24gbGlzdC4gQ2xpY2sgIDxiPkJyb3dzZTwvYj4gdG8gb3BlbgotdGhlIENhdGVnb3JpZXMgcGFuZS4gTmF2aWdhdGUgdGhyb3VnaCB0aGUgaGllcmFyY2hpY2FsIHRheG9ub215IGFuZCBzZWxlY3QKLXRoZSBhcHByb3ByaWF0ZSBjbGFzc2lmaWNhdGlvbiBmb3IgeW91ciBidXNpbmVzcyBzZXJ2aWNlLCB0aGVuIGV4aXQgdGhlIENhdGVnb3JpZXMKLXBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZAotV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UKLWRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aAoteW91ciBXZWIgc2VydmljZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYjIyNWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuwqAgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsIHlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlcywgcHVibGlzaGluZywgYnVzaW5lc3MgZW50aXRpZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBwdWJsaXNoaW5nIHRvIFVEREkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZXMsIHB1Ymxpc2hpbmcsIGJ1c2luZXNzIGVudGl0aWVzLCBidXNpbmVzcyBlbnRpdGllcywgcHVibGlzaGluZyB0byBVRERJIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0cHViZW50IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHB1YmVudCI+PGEgbmFtZT0idHB1YmVudCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0Ci1oYXMgcHVibGlzaGVkIGEgc2VydmljZS7CoCBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSwKLXlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHR3byBkaWZmZXJlbnQgcHVibGljYXRpb24KLWZvcm1hdHM6IHNpbXBsZSBhbmQgYWR2YW5jZWQuPC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaW1wbGU8L3NwYW4+IEFsbG93cwoteW91IHRvIGVudGVyIHRoZSBtaW5pbWFsIGFtb3VudCBvZiBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MKLWVudGl0eS7CoCBBIHNpbXBsZSBwdWJsaXNoIG9ubHkgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG9ubHkgb25lIG5hbWUgYW5kCi1vbmUgYnVzaW5lc3MgZGVzY3JpcHRpb24uPC9wPgotPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkdmFuY2VkIDwvc3Bhbj4gQWxsb3dzIHlvdQotdG8gZW50ZXIgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGJ1c2luZXNzIGVudGl0eS4gQW4gYWR2YW5jZWQgcHVibGlzaAotYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG11bHRpcGxlIG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIG11bHRpLWxpbmd1YWwgc3VwcG9ydC48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU3NCI+PGEgbmFtZT0iZDBlNzQiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc2VsZWN0IFVEREkgTWFpbiBhbmQgc2VsZWN0IHRoZSByZWdpc3RyeQotdG8gd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlwqBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoCi15b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaDwvc3Ryb25nPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1Ymxpc2gyLmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoICBpY29uLiIgLz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgIDxzdHJvbmc+U2ltcGxlPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIElCTTxzdXA+wq48L3N1cD4gV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4KLVRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YKLXRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTEzIj48YSBuYW1lPSJkMGUxMTMiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZcKgIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaCBTZXJ2aWNlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPkFkdmFuY2VkPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BZGQ8L3N0cm9uZz4gdG8gY3JlYXRlIGJ1c2luZXNzIG5hbWVzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBkZXNjcmlwdGlvbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+IHRvIGNyZWF0ZSBhbiBpZGVudGlmaWVyLiBGb3IgZXhhbXBsZSwKLWFuIGlkZW50aWZpZXIgZm9yIHlvdXIgYnVzaW5lc3MgZW50aXR5IG1heSBiZSB5b3VyIGJ1c2luZXNzIHBob25lIG51bWJlci4KLVRoZSBrZXkgbmFtZSB3b3VsZCBiZSAiUGhvbmUgTnVtYmVyIiBhbmQgdGhlIGtleSB2YWx1ZSB3b3VsZCBiZSB5b3VyIGJ1c2luZXNzCi10ZWxlcGhvbmUgbnVtYmVyLiA8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBjYXRlZ29yaWVzLgotU2VsZWN0IGEgY2F0ZWdvcnkgdHlwZSBmcm9tIHRoZSBkcm9wIGRvd24gbGlzdC4gQ2xpY2sgIDxzdHJvbmc+QnJvd3NlPC9zdHJvbmc+IHRvIG9wZW4KLXRoZSBDYXRlZ29yaWVzIHBhbmUuIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teSBhbmQgc2VsZWN0Ci10aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbiBleGl0IHRoZSBDYXRlZ29yaWVzCi1wYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZAotV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UKLWRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aAoteW91ciBXZWIgc2VydmljZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFhYThkOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0cHVibGlzaCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2U8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5QdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2U8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzCi1hIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cwotdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybSBrZXlyZWY9InRwdWJsaXNofDF8VURESXB1Ymxpc2hpbmdhV2Vic2VydmljZSIgc3RhdHVzPSJ1bmNoYW5nZWQiPlVEREk8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcKLWEgV2ViIHNlcnZpY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtIGtleXJlZj0idHB1Ymxpc2h8MnxXZWJzZXJ2aWNlc3B1Ymxpc2hpbmd0b2FVRERJcmVnaXN0cnkiCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5wdWJsaXNoaW5nPGluZGV4dGVybT5VRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvbGk+Ci08bGk+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT5EZXBsb3kgdGhlIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJlbnQuZGl0YSI+UHVibGlzaCBhIEJ1c2luZXNzIEVudGl0eTwveHJlZj4uPC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08cmVzdWx0PjxwPllvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTc0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPGI+UHVibGlzaCBTZXJ2aWNlPC9iPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5TaW1wbGU8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5JbXBvcnRhbnQ6PC9iPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guIFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50IHRoYXQKLWRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5Ci11cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQgV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0bwotdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93Ci1kaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGggeW91ciBXZWIgc2VydmljZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTExMyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8Yj5QdWJsaXNoIFNlcnZpY2U8L2I+IGljb24KLSA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgIDxiPkFkdmFuY2VkPC9iPiByYWRpbyBidXR0b24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIGFuZCBXU0RMIFVSTCBpbgotdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdldDwvYj4gb3IgPHVpY29udHJvbD5GaW5kPC91aWNvbnRyb2w+IHRvIGFzc29jaWF0ZSB0aGUKLXNlcnZpY2Ugd2l0aCBhIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5HZXQ8L2I+IG9yIDx1aWNvbnRyb2w+RmluZDwvdWljb250cm9sPiB0byBhc3NvY2lhdGUgYQotc3BlY2lmaWMgc2VydmljZSBpbnRlcmZhY2Ugd2l0aCB0aGUgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIG5hbWVzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkFkZDwvYj4gdG8gY3JlYXRlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBzZXJ2aWNlCi1jYXRlZ29yaWVzLiBTZWxlY3QgYSBjYXRlZ29yeSB0eXBlIGZyb20gdGhlIGRyb3AgZG93biBsaXN0LiBDbGljayAgPGI+QnJvd3NlPC9iPiB0bwotb3BlbiB0aGUgQ2F0ZWdvcmllcyBwYW5lLiZuYnNwOyBOYXZpZ2F0ZSB0aHJvdWdoIHRoZSBoaWVyYXJjaGljYWwgdGF4b25vbXkKLWFuZCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNsYXNzaWZpY2F0aW9uIGZvciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UsIHRoZW4KLWV4aXQgdGhlIENhdGVnb3JpZXMgcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5HbzwvYj4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+SW1wb3J0YW50OjwvYj4gRW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgc2VydmljZSBkb2N1bWVudCwKLXNpbmNlIHRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgdGhlIGJhc2lzIGZvciB0aGUgQnVzaW5lc3MgU2VydmljZSB0aGF0IHlvdSB3aWxsCi1wdWJsaXNoLiZuYnNwOyBZb3UgY2Fubm90IHB1Ymxpc2ggYSBCdXNpbmVzcyBTZXJ2aWNlIHVzaW5nIGEgV1NETCBkb2N1bWVudAotdGhhdCBkb2VzIG5vdCBoYXZlIHNlcnZpY2UgZWxlbWVudHMuPC9wPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNDg3MjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMgYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMgdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcyBhIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cyB0aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlLCBXZWIgc2VydmljZXMsIHB1Ymxpc2hpbmcsIFVEREkgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UsIFdlYiBzZXJ2aWNlcywgcHVibGlzaGluZywgVURESSByZWdpc3RyeSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHB1Ymxpc2giIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5QdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRwdWJsaXNoIj48YSBuYW1lPSJ0cHVibGlzaCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcwotYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMKLXRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4uPC9saT4KLQotPGxpPkNyZWF0ZSBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5EZXBsb3kgdGhlIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1YmVudC5odG1sIj5QdWJsaXNoIGEgQnVzaW5lc3MgRW50aXR5PC9hPi48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTc0Ij48YSBuYW1lPSJkMGU3NCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBwdWJsaXNoIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb246PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHN0cm9uZz5QdWJsaXNoIFNlcnZpY2U8L3N0cm9uZz4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgIDxzdHJvbmc+U2ltcGxlPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guIFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50IHRoYXQKLWRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+Ci08cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkKLXVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4gVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvCi10aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YgdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cKLWRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9zdHJvbmc+PGJyIC8+Ci1PbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMTMiPjxhIG5hbWU9ImQwZTExMyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaCBTZXJ2aWNlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPkFkdmFuY2VkPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5HZXQ8L3N0cm9uZz4gb3IgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluZDwvc3Bhbj4gdG8gYXNzb2NpYXRlIHRoZQotc2VydmljZSB3aXRoIGEgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R2V0PC9zdHJvbmc+IG9yIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmQ8L3NwYW4+IHRvIGFzc29jaWF0ZSBhCi1zcGVjaWZpYyBzZXJ2aWNlIGludGVyZmFjZSB3aXRoIHRoZSBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIG5hbWVzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIGRlc2NyaXB0aW9ucy48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBjYXRlZ29yaWVzLiBFbnRlciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UKLWNhdGVnb3JpZXMuIFNlbGVjdCBhIGNhdGVnb3J5IHR5cGUgZnJvbSB0aGUgZHJvcCBkb3duIGxpc3QuIENsaWNrICA8c3Ryb25nPkJyb3dzZTwvc3Ryb25nPiB0bwotb3BlbiB0aGUgQ2F0ZWdvcmllcyBwYW5lLsKgIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teQotYW5kIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbgotZXhpdCB0aGUgQ2F0ZWdvcmllcyBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guwqAgWW91IGNhbm5vdCBwdWJsaXNoIGEgQnVzaW5lc3MgU2VydmljZSB1c2luZyBhIFdTREwgZG9jdW1lbnQKLXRoYXQgZG9lcyBub3QgaGF2ZSBzZXJ2aWNlIGVsZW1lbnRzLjwvcD4KLTxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L3N0cm9uZz48YnIgLz4KLU9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjZhYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRyZWciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5SZWdpc3RlcmluZyB3aXRoIGEgVURESSBSZWdpc3RyeTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+SW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJCi1yZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBwcml2YXRlIHJlZ2lzdHJpZXMgd2l0aCB3aGljaCB5b3UgY2FuCi1yZWdpc3Rlci4gU2luY2UgZWFjaCByZWdpc3RyeSBpcyBkaWZmZXJlbnQsIHRoZSByZWdpc3RyeSBwcm92aWRlciB3aWxsIGdpdmUKLXlvdSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLjwvcD48cD5UaGUgZm9sbG93aW5nIHJlZ2lzdHJpZXMgYXJlIGF1dG9tYXRpY2FsbHkKLWFkZGVkIHRvIEZhdm9yaXRlczo8L3A+PHVsPgotPGxpPlNBUCBVRERJIFJlZ2lzdHJ5PC9saT4KLTxsaT5TQVAgVURESSBUZXN0IFJlZ2lzdHJ5PC9saT4KLTxsaT5YTWV0aG9kcyBSZWdpc3RyeTwvbGk+Ci08bGk+TlRUIENvbW11bmljYXRpb25zIFJlZ2lzdHJ5PC9saT4KLTwvdWw+PHA+WW91IGNhbiB1c2UgYW55IG9mIHRoZXNlIHJlZ2lzdHJpZXMgYnkgc2VsZWN0aW5nIHRoZSBGYXZvcml0ZXMgaWNvbgotaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLiBBbGwgb2YgdGhlc2UgcmVnaXN0cmllcyBhcmUgYmFzZWQgb24KLXRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IFZlcnNpb24gMi4gVGhlIGRldGFpbHMgcGFnZSBvZiBlYWNoIHJlZ2lzdHJ5IHdpbGwKLWhhdmUgcmVnaXN0cmF0aW9uIGluc3RydWN0aW9ucy48L3A+PHA+VGhlIHB1YmxpYyBwcm9kdWN0aW9uIHJlZ2lzdHJpZXMgYXJlCi1saXN0ZWQgdW5kZXIgRmF2b3JpdGVzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGRvZXMgbm90IHByZWxvYWQgYW55IHJlZ2lzdHJpZXMKLWJ5IGRlZmF1bHQuJm5ic3A7IFlvdSBjYW4gcHJlbG9hZCByZWdpc3RyaWVzIGZyb20gdGhlIGZhdm9yaXRlcyBzZWN0aW9uIG9mCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9yIGJ5IHVzaW5nIHRoZSBVbml0IFRlc3QgVURESSB3aXphcmQuIFlvdSBjYW4gYWxzbwotcHJlbG9hZCBhbmQgY29uZmlndXJlIHByaXZhdGUgcmVnaXN0cmllcyB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLgotT24gdGhlIE9wZW4gUmVnaXN0cnkgcGFnZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB5b3UgY2FuIHNlbGVjdCBmcm9tCi1wdWJsaWMgcmVnaXN0cmllcyBhbmQgcmVnaXN0cmllcyBsaXN0ZWQgaW4geW91ciBmYXZvcml0ZXMgdG8gYXV0b21hdGljYWxseQotZmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gb3BlbiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzY2IwZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgcmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgcmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0cmVnIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgUmVnaXN0cnk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRyZWciPjxhIG5hbWU9InRyZWciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9oMT4KLQotCi0KLQotPGRpdj48cD5JbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkKLXJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBwcml2YXRlIHJlZ2lzdHJpZXMgd2l0aCB3aGljaCB5b3UgY2FuCi1yZWdpc3Rlci4gU2luY2UgZWFjaCByZWdpc3RyeSBpcyBkaWZmZXJlbnQsIHRoZSByZWdpc3RyeSBwcm92aWRlciB3aWxsIGdpdmUKLXlvdSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLjwvcD4KLTxwPlRoZSBmb2xsb3dpbmcgcmVnaXN0cmllcyBhcmUgYXV0b21hdGljYWxseQotYWRkZWQgdG8gRmF2b3JpdGVzOjwvcD4KLTx1bD4KLTxsaT5TQVAgVURESSBSZWdpc3RyeTwvbGk+Ci0KLTxsaT5TQVAgVURESSBUZXN0IFJlZ2lzdHJ5PC9saT4KLQotPGxpPlhNZXRob2RzIFJlZ2lzdHJ5PC9saT4KLQotPGxpPk5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeTwvbGk+Ci0KLTwvdWw+Ci08cD5Zb3UgY2FuIHVzZSBhbnkgb2YgdGhlc2UgcmVnaXN0cmllcyBieSBzZWxlY3RpbmcgdGhlIEZhdm9yaXRlcyBpY29uCi1pbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvb2xiYXIuIEFsbCBvZiB0aGVzZSByZWdpc3RyaWVzIGFyZSBiYXNlZCBvbgotdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgVmVyc2lvbiAyLiBUaGUgZGV0YWlscyBwYWdlIG9mIGVhY2ggcmVnaXN0cnkgd2lsbAotaGF2ZSByZWdpc3RyYXRpb24gaW5zdHJ1Y3Rpb25zLjwvcD4KLTxwPlRoZSBwdWJsaWMgcHJvZHVjdGlvbiByZWdpc3RyaWVzIGFyZQotbGlzdGVkIHVuZGVyIEZhdm9yaXRlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBkb2VzIG5vdCBwcmVsb2FkIGFueSByZWdpc3RyaWVzCi1ieSBkZWZhdWx0LsKgIFlvdSBjYW4gcHJlbG9hZCByZWdpc3RyaWVzIGZyb20gdGhlIGZhdm9yaXRlcyBzZWN0aW9uIG9mCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9yIGJ5IHVzaW5nIHRoZSBVbml0IFRlc3QgVURESSB3aXphcmQuIFlvdSBjYW4gYWxzbwotcHJlbG9hZCBhbmQgY29uZmlndXJlIHByaXZhdGUgcmVnaXN0cmllcyB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLgotT24gdGhlIE9wZW4gUmVnaXN0cnkgcGFnZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB5b3UgY2FuIHNlbGVjdCBmcm9tCi1wdWJsaWMgcmVnaXN0cmllcyBhbmQgcmVnaXN0cmllcyBsaXN0ZWQgaW4geW91ciBmYXZvcml0ZXMgdG8gYXV0b21hdGljYWxseQotZmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gb3BlbiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNThjN2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHN0cnRleHAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pbiBzZXZlcmFsIHdheXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+bGF1bmNoaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0Pjx1bD4KLTxsaT5Gcm9tIHRoZSBtYWluIHRvb2xiYXIgaW4gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUuPC9saT4KLTxsaT5CeSB1c2luZyB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkcy48L2xpPgotPGxpPkJ5IHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLjwvbGk+Ci08bGk+QnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLTxsaT5Gcm9tIHRoZSBSdW4gbWVudSBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZS48L2xpPgotPGxpPkZyb20gYSBXU0RMIGZpbGUuPC9saT4KLTwvdWw+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJkMGUzOCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXI8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiB0b29sYmFyLCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgdGhlICA8Yj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2I+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIExhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvdWRkaXZpZXcuZ2lmIj48L2ltYWdlPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0Ci1hbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLiBZb3UgY2FuIG5vdyAgPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5hZGQKLWEgcmVnaXN0cnk8L3hyZWY+IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNTAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBXaXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZCwKLXNlbGVjdCB0aGUgIDxiPlRlc3QgdGhlIFdlYiBTZXJ2aWNlPC9iPiBjaGVjayBib3ggaW4gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgV2l6YXJkLiBQcm9jZWVkIHdpdGggdGhlIHdpemFyZCBhbmQgdGhlbiBpbiB0aGUgV2ViIFNlcnZpY2UgVGVzdAotUGFnZSwgY2hvb3NlICA8Yj5XZWIgU2VydmljZXMgRXhwbG9yZXI8L2I+IGFzIHRoZSB0ZXN0IGZhY2lsaXR5IGFuZCBjbGljawotb24gdGhlICA8Yj5MYXVuY2g8L2I+IGJ1dHRvbi4gSWYgeW91IGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nCi10aGlzIG1ldGhvZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWxvYWQgdGhlIFdTREwgKGFuZCBpdHMgY2hpbGQgbm9kZXMpCi1pbiB0aGUgV1NETCBwYWdlLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTYzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSBtYWluIG1lbnUsIGNsaWNrICA8Yj5GaWxlID4gSW1wb3J0PC9iPi4gVGhlIEltcG9ydCB3aXphcmQKLW9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0ICA8Yj5XZWIgU2VydmljZTwvYj4gYW5kIGNsaWNrICA8Yj5OZXh0PC9iPi4gVGhlIFdlYiBzZXJ2aWNlCi1pbXBvcnQgd2l6YXJkIG9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkZpbmlzaDwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy4gSWYgeW91IHNlbGVjdGVkIGEgcmVnaXN0cnkgb24KLXRoZSBXZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlIG9mIHRoZSBXZWIgc2VydmljZSBJbXBvcnQgd2l6YXJkLCB5b3Ugd2lsbAotc2VlIHRoZSByZWdpc3RyeSBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlOTUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQsIGRvCi10aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxiPkZpbGUgPiBFeHBvcnQ8L2I+LiBUaGUgRXhwb3J0IHdpemFyZAotb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgIDxiPldlYiBTZXJ2aWNlPC9iPiBhbmQgY2xpY2sgIDxiPk5leHQ8L2I+LiBUaGUgV2ViIFNlcnZpY2UKLUV4cG9ydCB3aXphcmQgb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+RmluaXNoPC9iPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiZuYnNwOyBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeQotb24gdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIEV4cG9ydCB3aXphcmQsIHlvdQotd2lsbCBzZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMjciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgUnVuIG1lbnU8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiBtZW51LCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgIDxiPlJ1biA+IExhdW5jaCB0aGUgV2ViCi1TZXJ2aWNlcyBFeHBsb3JlcjwvYj4uIFRoZSBJbXBvcnQgd2l6YXJkIG9wZW5zLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1vcGVucy4mbmJzcDsgVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0IGFueSByZWdpc3RyaWVzIGRpc3BsYXllZAotaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTEzNCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIGEgV1NETCBmaWxlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGUsIHNlbGVjdCB0aGUKLVdTREwgZmlsZSBhbmQgcmlnaHQtY2xpY2sgYW5kIGNob29zZSAgPGI+V2ViIFNlcnZpY2VzID4gVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2I+IG9yICA8Yj5QdWJsaXNoIFdTREwgZmlsZTwvYj4uJm5ic3A7IFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLW9wZW5zLiBUaGUgIDxiPlRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2I+IGFjdGlvbiB3aWxsIHByZWxvYWQgdGhlCi1XU0RMIGluIHRoZSBXU0RMIHBhZ2UuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTEwNDkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMgRXhwbG9yZXIsIGxhdW5jaGluZyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbGF1bmNoaW5nIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0c3RydGV4cCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c3RydGV4cCI+PGEgbmFtZT0idHN0cnRleHAiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLWluIHNldmVyYWwgd2F5cy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjx1bD4KLTxsaT5Gcm9tIHRoZSBtYWluIHRvb2xiYXIgaW4gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUuPC9saT4KLQotPGxpPkJ5IHVzaW5nIHRoZSBXZWIgc2VydmljZSB3aXphcmRzLjwvbGk+Ci0KLTxsaT5CeSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC48L2xpPgotCi08bGk+QnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLQotPGxpPkZyb20gdGhlIFJ1biBtZW51IGluIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlLjwvbGk+Ci0KLTxsaT5Gcm9tIGEgV1NETCBmaWxlLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTM4Ij48YSBuYW1lPSJkMGUzOCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXI8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiB0b29sYmFyLCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgdGhlICA8c3Ryb25nPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGl2aWV3LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBMYXVuY2ggV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGljb24uIiAvPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0Ci1hbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLiBZb3UgY2FuIG5vdyAgPGEgaHJlZj0idGFkZHJlZy5odG1sIj5hZGQgYSByZWdpc3RyeTwvYT4gdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTUwIj48YSBuYW1lPSJkMGU1MCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBXZWIgU2VydmljZXMgV2l6YXJkLAotc2VsZWN0IHRoZSAgPHN0cm9uZz5UZXN0IHRoZSBXZWIgU2VydmljZTwvc3Ryb25nPiBjaGVjayBib3ggaW4gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgV2l6YXJkLiBQcm9jZWVkIHdpdGggdGhlIHdpemFyZCBhbmQgdGhlbiBpbiB0aGUgV2ViIFNlcnZpY2UgVGVzdAotUGFnZSwgY2hvb3NlICA8c3Ryb25nPldlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Ryb25nPiBhcyB0aGUgdGVzdCBmYWNpbGl0eSBhbmQgY2xpY2sKLW9uIHRoZSAgPHN0cm9uZz5MYXVuY2g8L3N0cm9uZz4gYnV0dG9uLiBJZiB5b3UgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcKLXRoaXMgbWV0aG9kLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlbG9hZCB0aGUgV1NETCAoYW5kIGl0cyBjaGlsZCBub2RlcykKLWluIHRoZSBXU0RMIHBhZ2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNjMiPjxhIG5hbWU9ImQwZTYzIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxzdHJvbmc+RmlsZSAmZ3Q7IEltcG9ydDwvc3Ryb25nPi4gVGhlIEltcG9ydCB3aXphcmQKLW9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3Ryb25nPldlYiBTZXJ2aWNlPC9zdHJvbmc+IGFuZCBjbGljayAgPHN0cm9uZz5OZXh0PC9zdHJvbmc+LiBUaGUgV2ViIHNlcnZpY2UKLWltcG9ydCB3aXphcmQgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5GaW5pc2g8L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuIElmIHlvdSBzZWxlY3RlZCBhIHJlZ2lzdHJ5IG9uCi10aGUgV2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZSBvZiB0aGUgV2ViIHNlcnZpY2UgSW1wb3J0IHdpemFyZCwgeW91IHdpbGwKLXNlZSB0aGUgcmVnaXN0cnkgZGlzcGxheWVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU5NSI+PGEgbmFtZT0iZDBlOTUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQ8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQsIGRvCi10aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+RnJvbSB0aGUgbWFpbiBtZW51LCBjbGljayAgPHN0cm9uZz5GaWxlICZndDsgRXhwb3J0PC9zdHJvbmc+LiBUaGUgRXhwb3J0IHdpemFyZAotb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgIDxzdHJvbmc+V2ViIFNlcnZpY2U8L3N0cm9uZz4gYW5kIGNsaWNrICA8c3Ryb25nPk5leHQ8L3N0cm9uZz4uIFRoZSBXZWIgU2VydmljZQotRXhwb3J0IHdpemFyZCBvcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkZpbmlzaDwvc3Ryb25nPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy7CoCBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeQotb24gdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIEV4cG9ydCB3aXphcmQsIHlvdQotd2lsbCBzZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTI3Ij48YSBuYW1lPSJkMGUxMjciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgUnVuIG1lbnU8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiBtZW51LCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgIDxzdHJvbmc+UnVuICZndDsgTGF1bmNoIHRoZSBXZWIKLVNlcnZpY2VzIEV4cGxvcmVyPC9zdHJvbmc+LiBUaGUgSW1wb3J0IHdpemFyZCBvcGVucy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcgotb3BlbnMuwqAgVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0IGFueSByZWdpc3RyaWVzIGRpc3BsYXllZAotaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTEzNCI+PGEgbmFtZT0iZDBlMTM0Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGU8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSBhIFdTREwgZmlsZSwgc2VsZWN0IHRoZQotV1NETCBmaWxlIGFuZCByaWdodC1jbGljayBhbmQgY2hvb3NlICA8c3Ryb25nPldlYiBTZXJ2aWNlcyAmZ3Q7IFRlc3Qgd2l0aCBXZWIgU2VydmljZXMKLUV4cGxvcmVyPC9zdHJvbmc+IG9yICA8c3Ryb25nPlB1Ymxpc2ggV1NETCBmaWxlPC9zdHJvbmc+LsKgIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLW9wZW5zLiBUaGUgIDxzdHJvbmc+VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Ryb25nPiBhY3Rpb24gd2lsbCBwcmVsb2FkIHRoZQotV1NETCBpbiB0aGUgV1NETCBwYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDM0ODkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR0ZXN0d3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5UZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5Vc2luZyB0aGUgV1NETCBFeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzCi1uZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyCi1hcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucwotb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdQotdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0dGVzdHdzZGx8MXxXU0RMdGVzdGluZ3dpdGh0aGVXZWJTZXJ2aWNlc0V4cGxvcmVyIgotc3RhdHVzPSJ1bmNoYW5nZWQiPldTREwgZmlsZXM8aW5kZXh0ZXJtPnRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtIGtleXJlZj0idHRlc3R3c2RsfDJ8V2Vic2VydmljZXN0ZXN0aW5nd2l0aHRoZVdlYlNlcnZpY2VzRXhwbG9yZXIiCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3Jlcjo8dWw+Ci08bGk+WW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTCBmb3IgYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci08bGk+WW91IG11c3QgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaAotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRoZSBXU0RMIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBleHBsb3JpbmcgV1NETCBkb2N1bWVudHMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIsCi1yZWZlciB0byA8eHJlZiBocmVmPSJ0d3NkbGV4cC5kaXRhIj5Vc2luZyB0aGUgV1NETCBFeHBsb3JlcjwveHJlZj4gLjwvcD48cD5UbwotdGVzdCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5Ci1jbGlja2luZyB0aGUgaWNvbiBpbiB0aGUgdXBwZXIgcmlnaHQtaGFuZCBjb3JuZXIgIDxpbWFnZSBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiI+PC9pbWFnZT4uIDwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPGI+R288L2I+LiBGb3IgdGhpcyBleGFtcGxlIHRoZQotV1NETCBiZWluZyB1c2VkIGlzIGEgV2ViIFNlcnZpY2Ugd2hpY2ggY29udmVydHMgdGVtcGVyYXR1cmUgZnJvbSBDZWxzaXVzIHRvCi1GYWhyZW5oZWl0IG9yIEZhaHJlbmhlaXQgdG8gQ2Vsc2l1cy4gICA8aW1hZ2UgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgV1NETCBNYWluIHBhbmUgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsdGVtcC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICBUaGUgZm9sbG93aW5nIG5vZGVzCi13aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvY21kPjxpbmZvPjx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltYWdlIGFsdD0iV1NETCBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWFnZSBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWFnZSBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1hZ2UgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBXU0RMIEJpbmRpbmcgRGV0YWlscyBwYW5lLCBjbGljayB0aGUgb3BlcmF0aW9uIChpbiB0aGlzCi1leGFtcGxlIHRoZSAgPHN5c3RlbW91dHB1dD5DdG9GPC9zeXN0ZW1vdXRwdXQ+IG9wZXJhdGlvbikgdG8gZGlzcGxheTogPC9jbWQ+Ci08aW5mbz48dWw+Ci08bGk+QSBkcm9wLWRvd24gbGlzdCB3aXRoIHRoZSBlbmRwb2ludHMgYXZhaWxhYmxlIGZvciB0aGlzIG9wZXJhdGlvbjwvbGk+Ci08bGk+RmllbGRzIGZvciBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgb3BlcmF0aW9uIChpbiB0aGlzIGV4YW1wbGUgdGhlCi0gPHN5c3RlbW91dHB1dD50ZW1wPC9zeXN0ZW1vdXRwdXQ+IHBhcmFtZXRlcikgYW5kIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uCi10aGUgcGFyYW1ldGVyIGlzIGxvb2tpbmcgZm9yIChpbiB0aGlzIGV4YW1wbGUgIDxzeXN0ZW1vdXRwdXQ+dGVtcDwvc3lzdGVtb3V0cHV0PiBpcwotcmVxdWVzdGluZyBhbiBpbnRlZ2VyKS48aW1hZ2UgYWx0PSJJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiCi1ocmVmPSIuLi9pbWFnZXMvd3NkbG9wLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gIFRoZSBGb3JtIHZpZXcgYWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBXZWIgc2VydmljZSBvcGVyYXRpb24gY2FsbC4gUGFyYW1ldGVycwotbmFtZXMgYXJlIGRpc3BsYXllZCBhcyBsaW5rcyB3aG9zZSBhY3Rpb24gaXMgdG8gZGlzcGxheSBhIGRpYWxvZyBkZXNjcmliaW5nCi1lbWJlZGRlZCBYTUwgU2NoZW1hIERlZmluaXRpb24gTGFuZ3VhZ2UgKFhTRCkgaW5mb3JtYXRpb24uIE1vcmUgaW5mb3JtYXRpb24KLWFib3V0IFhTRCBjYW4gYmUgZm91bmQgaGVyZTogIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy94c2QvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC88L3hyZWY+IAotIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHRoZSBYU0QgSW5mb3JtYXRpb24gRGlhbG9nIiBocmVmPSIuLi9pbWFnZXMvc2NlbmFyaW83LmdpZiIKLXBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICZuYnNwOzwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHlvdXIgaW50ZWdlciBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZAotaW4gdGhlIFN0YXR1cyBwYW5lLiAgIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIGFuIGludm9rZWQgV1NETCBvcGVyYXRpb24gc2hvd2luZyB0aGUgcmVzdWx0IGluIHRoZSBTdGF0dXMgcGFuZSIKLWhyZWY9Ii4uL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPiA8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgbWV0aG9kLCBjbGlja2luZyBTb3VyY2Ugb3IKLUZvcm0gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyIHdpbGwgdG9nZ2xlIHRoZSBkaXNwbGF5IGJldHdlZW4gdGhlIEZvcm0KLXZpZXcgKHNob3duIGFib3ZlKSBhbmQgdGhlIFNvdXJjZSB2aWV3LCB3aGljaCBkaXNwbGF5cyB0aGUgU09BUCBtZXNzYWdlIGluCi10aGUgWE1MIGZvcm1hdC4gWW91IGNhbiBhbHNvIGVudGVyIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGluIHRoZSBmb3JtLCBvbmx5Ci1pbiBYTUwgZm9ybWF0ICh0aGlzIGlzIHN1Z2dlc3RlZCBmb3IgYWR2YW5jZWQgdXNlcnMgb25seSkuIFRoZSBFeHBsb3JlciBkb2VzCi12YWxpZGF0ZSB0aGUgWE1MIGlmIHlvdSBtb2RpZnkgaXQsIGJ1dCBub3QgdGhlIHBhcmFtZXRlciB2YWx1ZXMgeW91IGVudGVyLgotIDxpbWFnZSBhbHQ9IlNvdXJjZSB2aWV3IG9mIHRoZSBJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lLiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxvcHJldHguZ2lmIgotcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgdHlwZSwgeW91IHdpbGwgYWxzbyBoYXZlCi10aGUgb3B0aW9uIG9mIHRvZ2dsaW5nIHRoZSBTdGF0dXMgcGFuZSBiZXR3ZWVuIHRoZSBTb3VyY2UgYW5kIEZvcm0gdmlld3MuCi1UaGUgU291cmNlIHZpZXcgc2hvd3MgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzLCBpbmNsdWRpbmcgdGhlCi1wYXJhbWV0ZXJzIHlvdSBoYXZlIGVudGVyZWQgdG8gdGVzdCB0aGUgc2VydmljZSBhbmQgdGhlIHJldHVybmVkIHZhbHVlLiAgIDxpbWFnZQotYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgc291cmNlIHZpZXcgb2YgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxzdGF0eC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+IDwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIxYjhiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGltcG9ydCwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcyBuZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCB0ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgdGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHRlc3R3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR0ZXN0d3NkbCI+PGEgbmFtZT0idHRlc3R3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5UZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2gxPgotCi0KLQotCi08ZGl2PjxwPldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcwotbmV0d29yay1hY2Nlc3NpYmxlIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlcgotYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMKLW9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UKLXRvIGV4cGxvcmUsIGltcG9ydCwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOiBUbyB1c2UgdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPllvdSBtdXN0IGhhdmUgYSB2YWxpZCBVUkwgZm9yIGEgV1NETCBkb2N1bWVudC48L2xpPgotCi08bGk+WW91IG11c3QgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdTREwgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciwKLXJlZmVyIHRvIDxhIGhyZWY9InR3c2RsZXhwLmh0bWwiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9hPiAuPC9wPgotPHA+VG8KLXRlc3QgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIHN3aXRjaCB0byB0aGUgV1NETCBFeHBsb3JlciBieQotY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiIgYWx0PSJJY29uIHRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciIgLz4uIDwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPi4gRm9yIHRoaXMgZXhhbXBsZSB0aGUKLVdTREwgYmVpbmcgdXNlZCBpcyBhIFdlYiBTZXJ2aWNlIHdoaWNoIGNvbnZlcnRzIHRlbXBlcmF0dXJlIGZyb20gQ2Vsc2l1cyB0bwotRmFocmVuaGVpdCBvciBGYWhyZW5oZWl0IHRvIENlbHNpdXMuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsdGVtcC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIFdTREwgTWFpbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+PGJyIC8+ICBUaGUgZm9sbG93aW5nIG5vZGVzCi13aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvc3Bhbj4gPHVsPgotPGxpPlRoZSBXU0RMIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxub2RlLmdpZiIgYWx0PSJXU0RMIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIHNlcnZpY2Ugbm9kZSAod2hpY2ggcmVwcmVzZW50cyBhIHNlcnZpY2UgZWxlbWVudCB3aXRoaW4gdGhlIFdTREwgZmlsZSk6Ci0gPGltZyBzcmM9Ii4uL2ltYWdlcy9zZXJ2bm9kZS5naWYiIGFsdD0iU2VydmljZSBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBiaW5kaW5nIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2JpbmRub2RlLmdpZiIgYWx0PSJCaW5kaW5nIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIG9wZXJhdGlvbiBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9vcG5vZGUuZ2lmIiBhbHQ9Ik9wZXJhdGlvbiBub2RlIGljb24iIC8+PC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFdTREwgQmluZGluZyBEZXRhaWxzIHBhbmUsIGNsaWNrIHRoZSBvcGVyYXRpb24gKGluIHRoaXMKLWV4YW1wbGUgdGhlICA8dHQgY2xhc3M9InN5c291dCI+Q3RvRjwvdHQ+IG9wZXJhdGlvbikgdG8gZGlzcGxheTogPC9zcGFuPgotIDx1bD4KLTxsaT5BIGRyb3AtZG93biBsaXN0IHdpdGggdGhlIGVuZHBvaW50cyBhdmFpbGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uPC9saT4KLQotPGxpPkZpZWxkcyBmb3IgZWFjaCBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIG9wZXJhdGlvbiAoaW4gdGhpcyBleGFtcGxlIHRoZQotIDx0dCBjbGFzcz0ic3lzb3V0Ij50ZW1wPC90dD4gcGFyYW1ldGVyKSBhbmQgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24KLXRoZSBwYXJhbWV0ZXIgaXMgbG9va2luZyBmb3IgKGluIHRoaXMgZXhhbXBsZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnRlbXA8L3R0PiBpcwotcmVxdWVzdGluZyBhbiBpbnRlZ2VyKS48YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcC5naWYiIGFsdD0iSW52b2tlIGEgV1NETCBPcGVyYXRpb24gcGFuZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiAvPjxiciAvPiAgVGhlIEZvcm0gdmlldyBhbGxvd3MKLXlvdSB0byBlbnRlciB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFdlYiBzZXJ2aWNlIG9wZXJhdGlvbiBjYWxsLiBQYXJhbWV0ZXJzCi1uYW1lcyBhcmUgZGlzcGxheWVkIGFzIGxpbmtzIHdob3NlIGFjdGlvbiBpcyB0byBkaXNwbGF5IGEgZGlhbG9nIGRlc2NyaWJpbmcKLWVtYmVkZGVkIFhNTCBTY2hlbWEgRGVmaW5pdGlvbiBMYW5ndWFnZSAoWFNEKSBpbmZvcm1hdGlvbi4gTW9yZSBpbmZvcm1hdGlvbgotYWJvdXQgWFNEIGNhbiBiZSBmb3VuZCBoZXJlOiAgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy94c2QvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC88L2E+IAotIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvc2NlbmFyaW83LmdpZiIgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgWFNEIEluZm9ybWF0aW9uIERpYWxvZyIgLz48YnIgLz4gwqA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FbnRlciB5b3VyIGludGVnZXIgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IGlzIHJldHVybmVkCi1pbiB0aGUgU3RhdHVzIHBhbmUuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIiBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIGFuIGludm9rZWQgV1NETCBvcGVyYXRpb24gc2hvd2luZyB0aGUgcmVzdWx0IGluIHRoZSBTdGF0dXMgcGFuZSIgLz48YnIgLz4gwqA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgYXJlIHVzaW5nIFNPQVAgYXMgeW91ciBiaW5kaW5nIG1ldGhvZCwgY2xpY2tpbmcgU291cmNlIG9yCi1Gb3JtIGluIHRoZSB1cHBlciByaWdodC1oYW5kIGNvcm5lciB3aWxsIHRvZ2dsZSB0aGUgZGlzcGxheSBiZXR3ZWVuIHRoZSBGb3JtCi12aWV3IChzaG93biBhYm92ZSkgYW5kIHRoZSBTb3VyY2Ugdmlldywgd2hpY2ggZGlzcGxheXMgdGhlIFNPQVAgbWVzc2FnZSBpbgotdGhlIFhNTCBmb3JtYXQuIFlvdSBjYW4gYWxzbyBlbnRlciB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBpbiB0aGUgZm9ybSwgb25seQotaW4gWE1MIGZvcm1hdCAodGhpcyBpcyBzdWdnZXN0ZWQgZm9yIGFkdmFuY2VkIHVzZXJzIG9ubHkpLiBUaGUgRXhwbG9yZXIgZG9lcwotdmFsaWRhdGUgdGhlIFhNTCBpZiB5b3UgbW9kaWZ5IGl0LCBidXQgbm90IHRoZSBwYXJhbWV0ZXIgdmFsdWVzIHlvdSBlbnRlci4KLSA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcHJldHguZ2lmIiBhbHQ9IlNvdXJjZSB2aWV3IG9mIHRoZSBJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lLiIgLz48YnIgLz48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgYXJlIHVzaW5nIFNPQVAgYXMgeW91ciBiaW5kaW5nIHR5cGUsIHlvdSB3aWxsIGFsc28gaGF2ZQotdGhlIG9wdGlvbiBvZiB0b2dnbGluZyB0aGUgU3RhdHVzIHBhbmUgYmV0d2VlbiB0aGUgU291cmNlIGFuZCBGb3JtIHZpZXdzLgotVGhlIFNvdXJjZSB2aWV3IHNob3dzIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGVudmVsb3BlcywgaW5jbHVkaW5nIHRoZQotcGFyYW1ldGVycyB5b3UgaGF2ZSBlbnRlcmVkIHRvIHRlc3QgdGhlIHNlcnZpY2UgYW5kIHRoZSByZXR1cm5lZCB2YWx1ZS4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxzdGF0eC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIHNvdXJjZSB2aWV3IG9mIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGVudmVsb3BlcyIgLz48YnIgLz4gPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4YmQzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0dWRkaWV4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMgd2l0aCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzCi1hbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIDwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgU2VydmljZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmc8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT5wdWJsaXNoaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+cHVibGlzaGluZyBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VURESSBlbmFibGVzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHByb3ZpZGluZyBhIGRpc3RyaWJ1dGVkCi1yZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucywgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24KLVhNTCBmb3JtYXQuJm5ic3A7IEluIG9yZGVyIGZvciBhIHNlcnZpY2UgcmVxdWVzdG9yIHRvIGRpc2NvdmVyIGEgc2VydmljZSwKLWEgc2VydmljZSBwcm92aWRlciBtdXN0IGZpcnN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgYW5kIGF0IGxlYXN0IG9uZSBidXNpbmVzcwotc2VydmljZSwgYW5kIHNlcnZpY2UgaW50ZXJmYWNlIGluIGEgVURESSByZWdpc3RyeS4mbmJzcDsgVGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgaXMgYSBXZWIgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgcHVibGljYXRpb24sIGRpc2NvdmVyeSwgYW5kCi1tYWludGVuYW5jZSBvZiBidXNpbmVzcyBlbnRpdGllcywgYnVzaW5lc3Mgc2VydmljZXMsIGFuZCBzZXJ2aWNlIGludGVyZmFjZXMuPC9wPjxwPldTSUwKLWVuYWJsZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcgYSBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeQotbWV0aG9kIHRoYXQgc3VwcGxpZXMgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhdCB0aGUgc2VydmljZSBwcm92aWRlcidzCi1wb2ludC1vZi1vZmZlcmluZywgYnkgc3BlY2lmeWluZyBob3cgdG8gaW5zcGVjdCBhIFdlYiBzaXRlIGZvciBhdmFpbGFibGUgV2ViCi1zZXJ2aWNlcy4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZQotd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuJm5ic3A7U2luY2UgV1NJTCBmb2N1c2VzIG9uCi1kaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJIGJ5Ci1mYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzIHRoYXQKLW1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzCi15b3UgdG8gZ2VuZXJhdGUgYW5kIGV4cGxvcmUgV1NJTCBkb2N1bWVudHMuPC9wPjxwPlRoZSBmYXZvcml0ZXMgcGFnZSBvZiB0aGUKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91IHRvIHN0b3JlIHRoZSBsb2NhdGlvbiBvZiBVRERJIHJlZ2lzdHJpZXMsCi1idXNpbmVzcyBlbnRpdGllcywgV2ViIHNlcnZpY2VzLCBzZXJ2aWNlIGludGVyZmFjZXMsIGFzIHdlbGwgYXMgV1NJTCBhbmQgV1NETAotZG9jdW1lbnRzLjwvcD48cD5Vc2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZwotdGFza3M6PC9wPjx1bD4KLTxsaT4gPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YmttcmsuZGl0YSI+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3MKLXNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC94cmVmPiA8L2xpPgotPGxpPjx4cmVmIGhyZWY9InRsb2dleHAuZGl0YSI+PC94cmVmPjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRkaXNjb3YuZGl0YSI+RGlzY292ZXIgYSBXZWIgc2VydmljZTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHRvIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHRvIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR1bnB1Yi5kaXRhIj5SZW1vdmUgYSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsCi1vciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR1cGRhdGUuZGl0YSI+VXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLAotb3Igc2VydmljZSBpbnRlcmZhY2U8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRidXNwcm9qLmRpdGEiPk1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YXNzZXJ0LmRpdGEiPk1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9uczwveHJlZj4gPC9saT4KLTwvdWw+PHA+UHJlcmVxdWlzaXRlczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5CZWZvcmUgeW91IGNhbiB1c2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwZXJmb3JtIGFueSBvZgotdGhlc2UgZnVuY3Rpb25zLCB5b3UgbXVzdCAgPHhyZWYgaHJlZj0idHJlZy5kaXRhIj5yZWdpc3RlciB3aXRoIGEgcHVibGljIHJlZ2lzdHJ5PC94cmVmPi4mbmJzcDsKLVRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbiByZWdpc3Rlci48L2NtZD48aW5mbz48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkVuc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgYSBzdXBwb3J0ZWQgV2ViIGJyb3dzZXIuPC9jbWQ+PGluZm8+VGhlCi1mb2xsb3dpbmcgV2ViIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkOjx1bD4KLTxsaT5JbnRlcm5ldCBFeHBsb3JlcjogNi4wIGFuZCB1cDwvbGk+Ci08bGk+TW96aWxsYTogMS4yLjEgYW5kIHVwPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPjxiPktub3duIGxpbWl0YXRpb25zIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9iPjx1bD4KLTxsaT5UaGUgdGF4b25vbXkgY2F0ZWdvcmllcyBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFyZSBub3QgdHJhbnNsYXRlZAotc2luY2UgdGhleSBtdXN0IG1hdGNoIHRob3NlIGluIHRoZSBzdGFuZGFyZHMgYWRoZXJlZCB0byBieSBVRERJIChJU08sIFVOU1BTQwotNy4zLCBOQUlDUykuPC9saT4KLTxsaT5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbGF1bmNoIHdpdGhvdXQgdGhlIGJyb3dzZXIgdG9vbGJhciB3aGljaAotc2hvd3MsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGUgVVJMIHRvIHRoZSBXZWIgYXBwbGljYXRpb24uIFRoaXMgVVJMIHNob3VsZAotb25seSBiZSB1c2VkIGJ5IHVzZXJzIHdpdGggYWNjZXNzaWJpbGl0eSBuZWVkcy4gVGhlIFVSTCB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBXZWIgYXBwbGljYXRpb24gY2FuIGJlIG9idGFpbmVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczo8b2w+Ci08bGk+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCBQcmVmZXJlbmNlcy48L2xpPgotPGxpPkluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2csIHNlbGVjdCA8dWljb250cm9sPldlYiBCcm93c2VyPC91aWNvbnRyb2w+IGluCi10aGUgbGVmdCBwYW5lLjwvbGk+Ci08bGk+T24gdGhlIHJpZ2h0LCBzZWxlY3QgPHVpY29udHJvbD5Vc2UgZXh0ZXJuYWwgV2ViIEJyb3dzZXI8L3VpY29udHJvbD4uPC9saT4KLTxsaT5JbiB0aGUgPHVpY29udHJvbD5Mb2NhdGlvbjogdGV4dDwvdWljb250cm9sPiBmaWVsZCwgYnJvd3NlIG9yIHR5cGUgaW4KLXRoZSBmdWxsIHBhdGggb2YgdGhlIEludGVybmV0IEV4cGxvcmVyIGV4ZWN1dGFibGUuIChmb3IgZXhhbXBsZSwgQzpcUHJvZ3JhbQotRmlsZXNcSW50ZXJuZXQgRXhwbG9yZXJcaWV4cGxvcmUuZXhlKS48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+QXBwbHk8L3VpY29udHJvbD4gZm9sbG93ZWQgYnkgPHVpY29udHJvbD5PSzwvdWljb250cm9sPi48L2xpPgotPC9vbD4gTm90ZSB0aGF0IHRoaXMgcHJlZmVyZW5jZSB3aWxsIG5vdyBhcHBseSB0byBhbnkgYnJvd3NlciB3aW5kb3dzIHRoYXQKLWFyZSBsYXVuY2hlZCBieSB0aGUgdXNlciBvciBieSB0aGUgdG9vbHMgdGhlbXNlbHZlcyAoc3VjaCBhcyB0aGUgVW5pdmVyc2FsCi1UZXN0IENsaWVudCkuICBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbm93IGxhdW5jaCBpbiBhbiBleHRlcm5hbCBicm93c2VyCi1hbmQgaXRzIFVSTCBzaG91bGQgYmUgaW4gdGhlIEFkZHJlc3MgZmllbGQuIFRoaXMgY2FuIHRoZW4gYmUgcGFzdGVkIG9yIG9wZW5lZAotdXNpbmcgYW0gYWNjZXNzaWJpbGl0eSBhc3Npc3RpbmcgYnJvd3Nlci48L2xpPgotPGxpPldoZW4gcGVyZm9ybWluZyBhbiBhZHZhbmNlZCBmaW5kIG9yIHB1Ymxpc2ggaW4gdGhlIFVEREkgcGFnZSBvZiB0aGUgV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciwgdGhlIGl0ZW1zIGluIHRoZSBkcm9wIGRvd24gbGlzdCBmb3IgcGlja2luZyBhIGxhbmd1YWdlCi1pbiBjb25qdW5jdGlvbiB3aXRoIGEgbmFtZSBvciBkZXNjcmlwdGlvbiBpcyBzb3J0ZWQgIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW5nCi1zeXN0ZW0ncyBsb2NhbGUgc2V0dGluZ3MuIE9uIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXaW5kb3dzIj5XaW5kb3dzPC90bT4sIHRoaXMgb3JkZXIgbWF5IGJlIG1hbmFnZWQgdGhyb3VnaAotdGhlIENvbnRyb2wgUGFuZWwuIFRvIGRvIHRoaXM6PG9sPgotPGxpPk9wZW4gdGhlIENvbnRyb2wgUGFuZWwuPC9saT4KLTxsaT5MYXVuY2ggdGhlIFJlZ2lvbmFsIE9wdGlvbnMgY29udHJvbCBwYW5lbCBhcHBsZXQuPC9saT4KLTxsaT5JbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIHJlc3VsdGluZyBkaWFsb2csIHRoZXJlIG1heSBiZSBhICJTb3J0aW5nIG9yZGVyIgotZHJvcC1kb3duIGxpc3QuIElmIHNvLCBwaWNrIGEgc29ydGluZyBvcmRlciBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGZvbGxvd2VkCi1ieSA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvbGk+Ci08bGk+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgdGhlIG5ldyBzb3J0aW5nIG9yZGVyIGNvbWVzIGludG8gZWZmZWN0Ci1vbmNlIHRoZSBwYWdlIHJlbG9hZHMuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwcmVzc2luZyB0aGUgYmFjayBhcnJvdwotZm9sbG93ZWQgYnkgdGhlIGZvcndhcmQgYXJyb3cgaW4gdGhlIG1haW4gdG9vbGJhci48L2xpPgotPC9vbD5Ob3RlOiBUaGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGFwcGx5IHRvIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXaW5kb3dzIj5XaW5kb3dzPC90bT4gMjAwMC4gT24gPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldpbmRvd3MiPldpbmRvd3M8L3RtPiBYUCwKLXRoZSB0YWIgbWVudGlvbmVkIGluIHN0ZXAgMyBpcyBjYWxsZWQgIlJlZ2lvbmFsIE9wdGlvbnMiLiBCZXNpZGUgdGhlIGxhbmd1YWdlCi1kcm9wLWRvd24sIHRoZXJlIGlzIGEgPHVpY29udHJvbD5DdXN0b21pemU8L3VpY29udHJvbD4gYnV0dG9uLiBXaGVuIHRoaXMgaXMKLWNsaWNrZWQsIGEgbmV3IGRpYWxvZyBhcHBlYXJzLiBBIHNvcnRpbmcgdGFiIHdpbGwgYWxsb3cgdXNlcnMgdG8gcGljayB0aGUKLXNvcnRpbmcgbWV0aG9kIGlmIGFwcGxpY2FibGUuPC9saT4KLTwvdWw+PC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0d3NkbGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTQ1NGU5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2VzLCBwdWJsaXNoaW5nLCBvdmVydmlldywgYnVzaW5lc3MgZW50aXRpZXMsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgcHVibGlzaGluZyBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMsIHB1Ymxpc2hpbmcsIG92ZXJ2aWV3LCBidXNpbmVzcyBlbnRpdGllcywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBwdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGxvZ2V4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90YWRkcmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RwdWJlbnQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHB1Ymxpc2guaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHVwZGF0ZS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dW5wdWIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGJ1c3Byb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGFzc2VydC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90YmttcmsuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHdzZGxleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHVkZGlleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMgd2l0aCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHVkZGlleHAiPjxhIG5hbWU9InR1ZGRpZXhwIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cwotYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiA8L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlVEREkgZW5hYmxlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSBwcm92aWRpbmcgYSBkaXN0cmlidXRlZAotcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZSBkZXNjcmlwdGlvbnMsIGltcGxlbWVudGVkIGluIGEgY29tbW9uCi1YTUwgZm9ybWF0LsKgIEluIG9yZGVyIGZvciBhIHNlcnZpY2UgcmVxdWVzdG9yIHRvIGRpc2NvdmVyIGEgc2VydmljZSwKLWEgc2VydmljZSBwcm92aWRlciBtdXN0IGZpcnN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgYW5kIGF0IGxlYXN0IG9uZSBidXNpbmVzcwotc2VydmljZSwgYW5kIHNlcnZpY2UgaW50ZXJmYWNlIGluIGEgVURESSByZWdpc3RyeS7CoCBUaGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBpcyBhIFdlYiBhcHBsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIHRoZSBwdWJsaWNhdGlvbiwgZGlzY292ZXJ5LCBhbmQKLW1haW50ZW5hbmNlIG9mIGJ1c2luZXNzIGVudGl0aWVzLCBidXNpbmVzcyBzZXJ2aWNlcywgYW5kIHNlcnZpY2UgaW50ZXJmYWNlcy48L3A+Ci08cD5XU0lMCi1lbmFibGVzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IGRlZmluaW5nIGEgZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnkKLW1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMgYXQgdGhlIHNlcnZpY2UgcHJvdmlkZXIncwotcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcgaG93IHRvIGluc3BlY3QgYSBXZWIgc2l0ZSBmb3IgYXZhaWxhYmxlIFdlYgotc2VydmljZXMuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZQotd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuwqBTaW5jZSBXU0lMIGZvY3VzZXMgb24KLWRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGNvbXBsZW1lbnRzIFVEREkgYnkKLWZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiBXZWIgc2l0ZXMgdGhhdAotbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MKLXlvdSB0byBnZW5lcmF0ZSBhbmQgZXhwbG9yZSBXU0lMIGRvY3VtZW50cy48L3A+Ci08cD5UaGUgZmF2b3JpdGVzIHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBzdG9yZSB0aGUgbG9jYXRpb24gb2YgVURESSByZWdpc3RyaWVzLAotYnVzaW5lc3MgZW50aXRpZXMsIFdlYiBzZXJ2aWNlcywgc2VydmljZSBpbnRlcmZhY2VzLCBhcyB3ZWxsIGFzIFdTSUwgYW5kIFdTREwKLWRvY3VtZW50cy48L3A+Ci08cD5Vc2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZwotdGFza3M6PC9wPgotPHVsPgotPGxpPiA8YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGJrbXJrLmh0bWwiPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9hPiA8L2xpPgotCi08bGk+PGEgaHJlZj0idGxvZ2V4cC5odG1sIiB0aXRsZT0iSWYgeW91IGhhdmUgcHVibGlzaGVkIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5IHlvdSBjYW4mIzEwO2xvZyBpbnRvIHRoZSByZWdpc3RyeSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGRpc2Nvdi5odG1sIj5EaXNjb3ZlciBhIFdlYiBzZXJ2aWNlPC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJlbnQuaHRtbCI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB0byBhIHJlZ2lzdHJ5PC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHRvIGEgcmVnaXN0cnk8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHVucHViLmh0bWwiPlJlbW92ZSBhIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InR1cGRhdGUuaHRtbCI+VXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0YnVzcHJvai5odG1sIj5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0YXNzZXJ0Lmh0bWwiPk1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvYT4gPC9saT4KLQotPC91bD4KLTxwPlByZXJlcXVpc2l0ZXM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+QmVmb3JlIHlvdSBjYW4gdXNlIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcGVyZm9ybSBhbnkgb2YKLXRoZXNlIGZ1bmN0aW9ucywgeW91IG11c3QgIDxhIGhyZWY9InRyZWcuaHRtbCI+cmVnaXN0ZXIgd2l0aCBhIHB1YmxpYyByZWdpc3RyeTwvYT4uwqAKLVRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbiByZWdpc3Rlci48L3NwYW4+IAotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FbnN1cmUgdGhhdCB5b3UgYXJlIHVzaW5nIGEgc3VwcG9ydGVkIFdlYiBicm93c2VyLjwvc3Bhbj4gVGhlCi1mb2xsb3dpbmcgV2ViIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkOjx1bD4KLTxsaT5JbnRlcm5ldCBFeHBsb3JlcjogNi4wIGFuZCB1cDwvbGk+Ci0KLTxsaT5Nb3ppbGxhOiAxLjIuMSBhbmQgdXA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj4gPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InAiPjxzdHJvbmc+S25vd24gbGltaXRhdGlvbnMgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3N0cm9uZz48dWw+Ci08bGk+VGhlIHRheG9ub215IGNhdGVnb3JpZXMgaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhcmUgbm90IHRyYW5zbGF0ZWQKLXNpbmNlIHRoZXkgbXVzdCBtYXRjaCB0aG9zZSBpbiB0aGUgc3RhbmRhcmRzIGFkaGVyZWQgdG8gYnkgVURESSAoSVNPLCBVTlNQU0MKLTcuMywgTkFJQ1MpLjwvbGk+Ci0KLTxsaT5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbGF1bmNoIHdpdGhvdXQgdGhlIGJyb3dzZXIgdG9vbGJhciB3aGljaAotc2hvd3MsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGUgVVJMIHRvIHRoZSBXZWIgYXBwbGljYXRpb24uIFRoaXMgVVJMIHNob3VsZAotb25seSBiZSB1c2VkIGJ5IHVzZXJzIHdpdGggYWNjZXNzaWJpbGl0eSBuZWVkcy4gVGhlIFVSTCB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBXZWIgYXBwbGljYXRpb24gY2FuIGJlIG9idGFpbmVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczo8b2w+Ci08bGk+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCBQcmVmZXJlbmNlcy48L2xpPgotCi08bGk+SW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZywgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBCcm93c2VyPC9zcGFuPiBpbgotdGhlIGxlZnQgcGFuZS48L2xpPgotCi08bGk+T24gdGhlIHJpZ2h0LCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VXNlIGV4dGVybmFsIFdlYiBCcm93c2VyPC9zcGFuPi48L2xpPgotCi08bGk+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkxvY2F0aW9uOiB0ZXh0PC9zcGFuPiBmaWVsZCwgYnJvd3NlIG9yIHR5cGUgaW4KLXRoZSBmdWxsIHBhdGggb2YgdGhlIEludGVybmV0IEV4cGxvcmVyIGV4ZWN1dGFibGUuIChmb3IgZXhhbXBsZSwgQzpcUHJvZ3JhbQotRmlsZXNcSW50ZXJuZXQgRXhwbG9yZXJcaWV4cGxvcmUuZXhlKS48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbHk8L3NwYW4+IGZvbGxvd2VkIGJ5IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08L29sPgotIE5vdGUgdGhhdCB0aGlzIHByZWZlcmVuY2Ugd2lsbCBub3cgYXBwbHkgdG8gYW55IGJyb3dzZXIgd2luZG93cyB0aGF0Ci1hcmUgbGF1bmNoZWQgYnkgdGhlIHVzZXIgb3IgYnkgdGhlIHRvb2xzIHRoZW1zZWx2ZXMgKHN1Y2ggYXMgdGhlIFVuaXZlcnNhbAotVGVzdCBDbGllbnQpLiAgVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aWxsIG5vdyBsYXVuY2ggaW4gYW4gZXh0ZXJuYWwgYnJvd3NlcgotYW5kIGl0cyBVUkwgc2hvdWxkIGJlIGluIHRoZSBBZGRyZXNzIGZpZWxkLiBUaGlzIGNhbiB0aGVuIGJlIHBhc3RlZCBvciBvcGVuZWQKLXVzaW5nIGFtIGFjY2Vzc2liaWxpdHkgYXNzaXN0aW5nIGJyb3dzZXIuPC9saT4KLQotPGxpPldoZW4gcGVyZm9ybWluZyBhbiBhZHZhbmNlZCBmaW5kIG9yIHB1Ymxpc2ggaW4gdGhlIFVEREkgcGFnZSBvZiB0aGUgV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciwgdGhlIGl0ZW1zIGluIHRoZSBkcm9wIGRvd24gbGlzdCBmb3IgcGlja2luZyBhIGxhbmd1YWdlCi1pbiBjb25qdW5jdGlvbiB3aXRoIGEgbmFtZSBvciBkZXNjcmlwdGlvbiBpcyBzb3J0ZWQgIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW5nCi1zeXN0ZW0ncyBsb2NhbGUgc2V0dGluZ3MuIE9uIFdpbmRvd3M8c3VwPsKuPC9zdXA+LCB0aGlzIG9yZGVyIG1heSBiZSBtYW5hZ2VkIHRocm91Z2gKLXRoZSBDb250cm9sIFBhbmVsLiBUbyBkbyB0aGlzOjxvbD4KLTxsaT5PcGVuIHRoZSBDb250cm9sIFBhbmVsLjwvbGk+Ci0KLTxsaT5MYXVuY2ggdGhlIFJlZ2lvbmFsIE9wdGlvbnMgY29udHJvbCBwYW5lbCBhcHBsZXQuPC9saT4KLQotPGxpPkluIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgcmVzdWx0aW5nIGRpYWxvZywgdGhlcmUgbWF5IGJlIGEgIlNvcnRpbmcgb3JkZXIiCi1kcm9wLWRvd24gbGlzdC4gSWYgc28sIHBpY2sgYSBzb3J0aW5nIG9yZGVyIGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFwcGx5PC9zcGFuPiBmb2xsb3dlZAotYnkgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T0s8L3NwYW4+LjwvbGk+Ci0KLTxsaT5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB0aGUgbmV3IHNvcnRpbmcgb3JkZXIgY29tZXMgaW50byBlZmZlY3QKLW9uY2UgdGhlIHBhZ2UgcmVsb2Fkcy4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHByZXNzaW5nIHRoZSBiYWNrIGFycm93Ci1mb2xsb3dlZCBieSB0aGUgZm9yd2FyZCBhcnJvdyBpbiB0aGUgbWFpbiB0b29sYmFyLjwvbGk+Ci0KLTwvb2w+Ci1Ob3RlOiBUaGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGFwcGx5IHRvIFdpbmRvd3MgMjAwMC4gT24gV2luZG93cyBYUCwKLXRoZSB0YWIgbWVudGlvbmVkIGluIHN0ZXAgMyBpcyBjYWxsZWQgIlJlZ2lvbmFsIE9wdGlvbnMiLiBCZXNpZGUgdGhlIGxhbmd1YWdlCi1kcm9wLWRvd24sIHRoZXJlIGlzIGEgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3VzdG9taXplPC9zcGFuPiBidXR0b24uIFdoZW4gdGhpcyBpcwotY2xpY2tlZCwgYSBuZXcgZGlhbG9nIGFwcGVhcnMuIEEgc29ydGluZyB0YWIgd2lsbCBhbGxvdyB1c2VycyB0byBwaWNrIHRoZQotc29ydGluZyBtZXRob2QgaWYgYXBwbGljYWJsZS48L2xpPgotCi08L3VsPgotPC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90YXNrcy90c3RydGV4cC5odG1sIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHJlZy5odG1sIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L3N0cm9uZz48YnIgLz4KLUluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdGxvZ2V4cC5odG1sIj5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvYT48L3N0cm9uZz48YnIgLz4KLUlmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuIGxvZyBpbnRvIHRoZSByZWdpc3RyeSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90YXNrcy90YWRkcmVnLmh0bWwiPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9zdHJvbmc+PGJyIC8+Ci1BbHRob3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGNvbWVzIHBvcHVsYXRlZCB3aXRoIHNldmVyYWwgcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90YXNrcy90cHViZW50Lmh0bWwiPlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2E+PC9zdHJvbmc+PGJyIC8+Ci1BIGJ1c2luZXNzIGVudGl0eSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIGEgc2VydmljZS7CoCBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSwgeW91IG11c3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90YXNrcy90cHVibGlzaC5odG1sIj5QdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2U8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcyBhIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cyB0aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHVwZGF0ZS5odG1sIj5VcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlPC9hPjwvc3Ryb25nPjxiciAvPgotQWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UsIHlvdSBjYW4gdXBkYXRlIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90YXNrcy90dW5wdWIuaHRtbCI+UmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L2E+PC9zdHJvbmc+PGJyIC8+Ci1BZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90YXNrcy90YnVzcHJvai5odG1sIj5NYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotQSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcyBhIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZSBzdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkgcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcyBjYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuwqAgU2VydmljZSBwcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkgYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdGFzc2VydC5odG1sIj5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvYT48L3N0cm9uZz48YnIgLz4KLUEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLsKgIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueSBtYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdGJrbXJrLmh0bWwiPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9hPjwvc3Ryb25nPjxiciAvPgotWW91IGNhbiBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBGYXZvcml0ZXMgaWYgeW91IHBsYW4gdG8gYWNjZXNzIHRoZW0gaW4gdGhlIGZ1dHVyZS48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHdzZGxleHAuaHRtbCIgdGl0bGU9IiI+RXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjA3ZTQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1bnB1YiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20KLWEgcmVnaXN0cnk8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi1mcm9tIGEgcmVnaXN0cnk8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0dW5wdWJ8MXxXZWJzZXJ2aWNlc3JlbW92aW5nZnJvbWFVRERJcmVnaXN0cnkiCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5yZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybSBrZXlyZWY9InR1bnB1YnwyfHNlcnZpY2VpbnRlcmZhY2VzcmVtb3Zpbmdmcm9tYVVERElyZWdpc3RyeSIgc3RhdHVzPSJ1bmNoYW5nZWQiPnNlcnZpY2UKLWludGVyZmFjZXM8aW5kZXh0ZXJtPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtIGtleXJlZj0idHVucHVifDN8YnVzaW5lc3NlbnRpdGllc3JlbW92aW5nZnJvbWFVRERJcmVnaXN0cnkiIHN0YXR1cz0idW5jaGFuZ2VkIj5idXNpbmVzcwotZW50aXRpZXM8aW5kZXh0ZXJtPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybQota2V5cmVmPSJ0dW5wdWJ8NHxVRERJcmVtb3ZpbmdzZXJ2aWNlc2Zyb21hcmVnaXN0cnkiIHN0YXR1cz0idW5jaGFuZ2VkIj5VRERJPGluZGV4dGVybT5yZW1vdmluZwotc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8eHJlZiBocmVmPSJ0cHViZW50LmRpdGEiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHk8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBXZWIgc2VydmljZTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1Ymxpc2guZGl0YSI+UHVibGlzaCBhIHNlcnZpY2UgaW50ZXJmYWNlPC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj4uPC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD5UbyB1bnB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZQotdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSBidXNpbmVzcyBlbnRpdHksCi1XZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gdW5wdWJsaXNoLiBTZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+VW5wdWJsaXNoPC91aWNvbnRyb2w+IGljb24uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwKLXRoZW4gY2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGlzIHJlbW92ZWQKLWZyb20gdGhlIHJlZ2lzdHJ5IGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoCi15b3VyIGNoYW5nZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRwdWJlbnQuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHB1Ymxpc2guZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHVucHViLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InR1cGRhdGUuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkyMWZmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5LCBzZXJ2aWNlIGludGVyZmFjZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBVRERJLCByZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5LCBzZXJ2aWNlIGludGVyZmFjZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBVRERJLCByZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHViZW50Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRwdWJsaXNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1bnB1Yi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dXBkYXRlLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR1bnB1YiIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UKLWZyb20gYSByZWdpc3RyeTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHVucHViIj48YSBuYW1lPSJ0dW5wdWIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbQotYSByZWdpc3RyeTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+QWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZQotaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDxhIGhyZWY9InRwdWJlbnQuaHRtbCI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHVibGlzaC5odG1sIj5QdWJsaXNoIGEgV2ViIHNlcnZpY2U8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIHNlcnZpY2UgaW50ZXJmYWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIHVucHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi11c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIGJ1c2luZXNzIGVudGl0eSwKLVdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB5b3Ugd2FudCB0byB1bnB1Ymxpc2guIFNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VW5wdWJsaXNoPC9zcGFuPiBpY29uLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgYW5kIHBhc3N3b3JkLCBpZiBuZWNlc3NhcnksCi10aGVuIGNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyByZW1vdmVkCi1mcm9tIHRoZSByZWdpc3RyeSBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aAoteW91ciBjaGFuZ2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRwdWJlbnQuaHRtbCIgdGl0bGU9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiI+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1Ymxpc2guaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHVucHViLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0dXBkYXRlLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiI+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZmRkMjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1cGRhdGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5idXNpbmVzcyBlbnRpdGllczxpbmRleHRlcm0+dXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPnNlcnZpY2UgaW50ZXJmYWNlczxpbmRleHRlcm0+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJlbnQuZGl0YSI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1Ymxpc2guZGl0YSI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHVibGlzaC5kaXRhIj5QdWJsaXNoIGEgc2VydmljZSBpbnRlcmZhY2U8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PlRvIHVwZGF0ZSBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHVzaW5nCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIGJ1c2luZXNzIGVudGl0eSwKLVdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB5b3Ugd2FudCB0byB1cGRhdGUuIFNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5EZXRhaWxzPC91aWNvbnRyb2w+IGljb24uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGFuZCBlbnRlciB5b3VyIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIKLUlELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwgdGhlbiBjbGljayAgPHVpY29udHJvbD5HbzwvdWljb250cm9sPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyB1cGRhdGVkCi1pbiB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHB1YmVudC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cHVibGlzaC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0dW5wdWIuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGY2MTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UsIHlvdSBjYW4gdXBkYXRlIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UsIHlvdSBjYW4gdXBkYXRlIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBjb250ZW50PSJidXNpbmVzcyBlbnRpdGllcywgdXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHVwZGF0aW5nIFVEREkgcmVnaXN0cmllcywgc2VydmljZSBpbnRlcmZhY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iYnVzaW5lc3MgZW50aXRpZXMsIHVwZGF0aW5nIGluIGEgVURESSByZWdpc3RyeSwgV2ViIHNlcnZpY2VzLCB1cGRhdGluZyBVRERJIHJlZ2lzdHJpZXMsIHNlcnZpY2UgaW50ZXJmYWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRwdWJlbnQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHB1Ymxpc2guaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVucHViLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR1cGRhdGUiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5VcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0dXBkYXRlIj48YSBuYW1lPSJ0dXBkYXRlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5VcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlPC9oMT4KLQotCi0KLTxkaXY+PHA+QWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZQotaW50ZXJmYWNlLCB5b3UgY2FuIHVwZGF0ZSBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT4gPGEgaHJlZj0idHB1YmVudC5odG1sIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5PC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBXZWIgc2VydmljZTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHVibGlzaC5odG1sIj5QdWJsaXNoIGEgc2VydmljZSBpbnRlcmZhY2U8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gdXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgdXNpbmcKLXRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5OYXZpZ2F0ZSB0aHJvdWdoIHRoZSByZWdpc3RyeSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgYnVzaW5lc3MgZW50aXR5LAotV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHlvdSB3YW50IHRvIHVwZGF0ZS4gU2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXRhaWxzPC9zcGFuPiBpY29uLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5NYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyBhbmQgZW50ZXIgeW91ciBwdWJsaXNoIFVSTCwgeW91ciB1c2VyCi1JRCwgYW5kIHBhc3N3b3JkLCBpZiBuZWNlc3NhcnksIHRoZW4gY2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdvPC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgaXMgdXBkYXRlZAotaW4gdGhlIHJlZ2lzdHJ5IGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoCi15b3VyIGNoYW5nZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1YmVudC5odG1sIiB0aXRsZT0iQSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuwqAgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsIHlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuIj5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cHVibGlzaC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMgYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMgdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLiI+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0dW5wdWIuaHRtbCIgdGl0bGU9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiI+UmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OTQ0OTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHdzZGxleHAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMIGZpbGVzPGluZGV4dGVybT5leHBsb3Jpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5leHBsb3JpbmcgV1NETCBmaWxlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3JlciwgeW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTAotZm9yIGEgV1NETCBkb2N1bWVudC48L3ByZXJlcT4KLTxjb250ZXh0PlRoZSBXU0RMIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuCi1UaGUgZm9sbG93aW5nIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgV1NETCBFeHBsb3Jlcjo8dWw+Ci08bGk+U2hvdyBXU0RMIGRldGFpbHM6ICA8aW1hZ2UgYWx0PSJXU0RMIERldGFpbHMgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxkdGxpY29uLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08bGk+SW1wb3J0IFdTREwgdG8gdGhlIFdvcmtiZW5jaDogIDxpbWFnZSBhbHQ9IkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2ggaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5JbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtOiAgPGltYWdlIGFsdD0iSW1wb3J0IFdTREwgdG8geW91ciBmaWxlIHN5c3RlbSBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQ6ICA8aW1hZ2UgYWx0PSJMYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzd2l6aWNvbi5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5BZGQgV1NETCB0byBGYXZvcml0ZXM6ICA8aW1hZ2UgYWx0PSJBZGQgV1NETCB0byBGYXZvcml0ZXMgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZDBlNDciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD4gPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5Td2l0Y2ggdG8gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQKLWNvcm5lciAgPGltYWdlIGFsdD0iSWNvbiB0byBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIiIGhyZWY9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNjQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SW1wb3J0aW5nIGEgV1NETCBmaWxlIHRvIHlvdXIgd29ya3NwYWNlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHRoZSBXb3JrYmVuY2g6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+Q2xpY2sgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iSW1wb3J0IFdTREwgdG8gdGhlIFdvcmtiZW5jaCBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiI+PC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHByb2plY3QgaW50byB3aGljaCB5b3Ugd2FudCB0byBpbXBvcnQgdGhlIFdTREwuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSB3YW50IHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIGZyb20gdGhlIFdTREwsIHNlbGVjdCAgPGI+SW1wb3J0Ci1hcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudDwvYj4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTkwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHlvdXIgZmlsZSBzeXN0ZW0sIGNsaWNrIHRoaXMgaWNvbjoKLSA8aW1hZ2UgYWx0PSJJbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiI+Ci08L2ltYWdlPi4gU3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0aGUgV1NETCBmaWxlIHNhdmVkIG9uIHlvdXIgc3lzdGVtLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTk2IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCwgY2xpY2sgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIj48L2ltYWdlPi4gWW91IGNhbiBzZWxlY3QgaWYgeW91IHdhbnQgdG8gY3JlYXRlCi1hIFdlYiBzZXJ2aWNlIGNsaWVudCBvciBhIFNrZWxldG9uIFdlYiBzZXJ2aWNlIGZyb20gdGhlIFdTREwgZmlsZS4gQ2xpY2sgIDxiPkdvPC9iPiB0bwotbGF1bmNoIHRoZSB3aXphcmQuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTA1IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIFdTREwgZmlsZSB0byB5b3VyIGZhdm9yaXRlczwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBhZGQgdGhlIFdTREwgZmlsZSB0byBGYXZvcml0ZXMsIGNsaWNrIHRoaXMgaWNvbjogIDxpbWFnZSBhbHQ9IkFkZCBXU0RMIHRvIEZhdm9yaXRlcyBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiI+PC9pbWFnZT48L3A+PHA+LiBUaGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLXRoYXQgdGhlIFdTREwgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiA8L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMTAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RXhwbG9yaW5nIFdTREwgZG9jdW1lbnRzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyOjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPGI+R288L2I+LiBOb3RlIHRoYXQgdGhlIEV4cGxvcmVyCi13aWxsIG9ubHkgYWxsb3cgeW91IHRvIGJyb3dzZSBmb3IgV1NETCBmaWxlcyB0aGF0IHJlc2lkZSBpbiB0aGUgPGNvZGVwaD5XZWJDb250ZW50L1dTREw8L2NvZGVwaD4gZm9sZGVyCi1vZiBhIHByb2plY3QuIFRvIGV4cGxvcmUgV1NETCBmaWxlcyBzdG9yZWQgaW4gb3RoZXIgbG9jYXRpb25zIHdpdGhpbiB5b3VyCi13b3Jrc3BhY2UsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBzZWxlY3QgdGhlIGZpbGUgaW4gdGhlIHdvcmtzcGFjZSwKLXJpZ2h0LWNsaWNrIGFuZCBzZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+V2ViIFNlcnZpY2VzIDwvdWljb250cm9sPjx1aWNvbnRyb2w+IExhdW5jaAotV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uIEZvciB0aGlzIGV4YW1wbGUgdGhlIFdTREwKLWJlaW5nIHVzZWQgaXMgYSBXZWIgU2VydmljZSB3aGljaCByZXR1cm5zIGEgdGVtcGVyYXR1cmUgZm9yIGFueSBlbnRlcmVkIHppcAotY29kZS4gICA8aW1hZ2UgYWx0PSIiIGhyZWY9Ii4uL2ltYWdlcy93c2RsZXhwLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gCi1UaGUgZm9sbG93aW5nIG5vZGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFdTREwgdHJlZTogPC9jbWQ+PGluZm8+PHVsPgotPGxpPlRoZSBXU0RMIG5vZGU6ICA8aW1hZ2UgYWx0PSJXU0RMIG5vZGUgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08bGk+VGhlIHNlcnZpY2Ugbm9kZSAod2hpY2ggcmVwcmVzZW50cyBhIHNlcnZpY2UgZWxlbWVudCB3aXRoaW4gdGhlIFdTREwgZmlsZSk6Ci0gPGltYWdlIGFsdD0iU2VydmljZSBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9zZXJ2bm9kZS5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgYmluZGluZyBub2RlOiAgPGltYWdlIGFsdD0iQmluZGluZyBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9iaW5kbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBvcGVyYXRpb24gbm9kZTogIDxpbWFnZSBhbHQ9Ik9wZXJhdGlvbiBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9vcG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2tpbmcgdGhlIFNlcnZpY2Ugbm9kZSBpbiB0aGUgTmF2aWdhdG9yIHBhbmUgKGluIHRoaXMgZXhhbXBsZQotdGhpcyB3b3VsZCBiZSB0aGUgIDxzeXN0ZW1vdXRwdXQ+VGVtcGVyYXR1cmVTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IG5vZGUpIGRpc3BsYXlzCi1hbGwgdGhlIGJpbmRpbmdzIGZvciB0aGlzIHNlcnZpY2UsIGFzIHdlbGwgYXMgdGhlaXIgdHlwZSBhbmQgYSBicmllZiBkZXNjcmlwdGlvbgotb2YgdGhlIGJpbmRpbmcgaWYgdGhlIFdTREwgcHJvdmlkZXIgaGFzIGluY2x1ZGVkIG9uZSBpbiB0aGUgQWN0aW9ucyBwYW5lLgotVGhyZWUgdHlwZXMgb2YgYmluZGluZ3MgYXJlIHN1cHBvcnRlZDogU09BUCwgSFRUUCBHZXQsIGFuZCBIVFRQIFBvc3QuICAgPGltYWdlCi1hbHQ9IiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gIFRoZSBXU0RMCi11c2VkIGluIHRoaXMgZXhhbXBsZSBvbmx5IGhhcyBvbmUgYmluZGluZywgIDxzeXN0ZW1vdXRwdXQ+VGVtcGVyYXR1cmVCaW5kaW5nPC9zeXN0ZW1vdXRwdXQ+LAotd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgdGhlICA8c3lzdGVtb3V0cHV0PlRlbXBlcmF0dXJlUG9ydFR5cGU8L3N5c3RlbW91dHB1dD4gbm9kZQotaW4gdGhlIFdTREwgdHJlZSBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGlja2luZyBhIGRpc3BsYXllZCBiaW5kaW5nIG9yIGl0cyBub2RlIGRpc3BsYXlzIHRoZSBXU0RMIGJpbmRpbmcKLWRldGFpbHMgaW4gdGhlIEFjdGlvbnMgcGFuZS4gVGhpcyBpbmNsdWRlcyB0aGUgb3BlcmF0aW9ucyBhbmQgZW5kcG9pbnRzIGF2YWlsYWJsZQotZm9yIHRoaXMgc2VydmljZS4gICA8aW1hZ2UgYWx0PSIiIGhyZWY9Ii4uL2ltYWdlcy93c2RsYm5kZGV0bC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPgotPC9pbWFnZT4gIEluIHRoaXMgdmlldyB5b3UgY2FuIGFkZCBvciByZW1vdmUgZW5kcG9pbnRzIGZvciB0aGUgc2VydmljZS4gVG8KLWFkZCBhbiBlbmRwb2ludCwgY2xpY2sgIDxiPkFkZDwvYj4sIGVudGVyIHRoZSBVUkwgZm9yIHRoZSBlbmRwb2ludCwgYW5kIGNsaWNrCi0gPGI+R288L2I+LiBUaGUgU3RhdHVzIHBhbmUgc2hvdWxkIHNheSB0aGF0IHRoZSBlbmRwb2ludHMgd2VyZSBzdWNjZXNzZnVsbHkKLXVwZGF0ZWQuIFRvIHJlbW92ZSBhbiBlbmRwb2ludCwgc2VsZWN0IGl0cyBjaGVja2JveCwgYW5kIGNsaWNrICA8Yj5SZW1vdmU8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxwb3N0cmVxPjxub3RlPjxkcmFmdC1jb21tZW50PjI4MjQxMyAocmVmIDI3OTIwOSk8L2RyYWZ0LWNvbW1lbnQ+V2hlbiB0aGUKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBsb2FkcyBXU0RMIGZpbGVzIHRoYXQgdXNlIG11bHRpcGxlIGlubGluZSBzY2hlbWFzLCB3YXJuaW5nCi1tZXNzYWdlcyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdHlwZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBhY3Jvc3MgdGhlc2Ugc2NoZW1hcy4KLVRoZSB3YXJuaW5nIG1lc3NhZ2Ugd2lsbCBiZSBzaW1pbGFyIHRvOiA8Y29kZXBoPlJlZmVyZW5jZSBvZiB0eXBlICZsdDs8aT5xdWFsaWZpZWRfdHlwZV9uYW1lPC9pPj4KLWlzbid0IHJlc29sdmVkLjwvY29kZXBoPjwvbm90ZT48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlM2RjMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgZXhwbG9yaW5nLCBXZWIgc2VydmljZXMsIGV4cGxvcmluZyBXU0RMIGZpbGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgZXhwbG9yaW5nLCBXZWIgc2VydmljZXMsIGV4cGxvcmluZyBXU0RMIGZpbGVzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NkbGV4cCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NkbGV4cCI+PGEgbmFtZT0idHdzZGxleHAiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9oMT4KLQotCi08ZGl2PgotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczogVG8gdXNlIHRoZSBXU0RMIEV4cGxvcmVyLCB5b3UgbXVzdCBoYXZlIGEgdmFsaWQgVVJMCi1mb3IgYSBXU0RMIGRvY3VtZW50LjwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UaGUgV1NETCBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLgotVGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPlNob3cgV1NETCBkZXRhaWxzOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZHRsaWNvbi5naWYiIGFsdD0iV1NETCBEZXRhaWxzIGljb24iIC8+PC9saT4KLQotPGxpPkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2g6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoIGljb24iIC8+PC9saT4KLQotPGxpPkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW06ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIiBhbHQ9IkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW0gaWNvbiIgLz48L2xpPgotCi08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQ6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzd2l6aWNvbi5naWYiIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIgLz48L2xpPgotCi08bGk+QWRkIFdTREwgdG8gRmF2b3JpdGVzOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiIGFsdD0iQWRkIFdTREwgdG8gRmF2b3JpdGVzIGljb24iIC8+PC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNDciPjxhIG5hbWU9ImQwZTQ3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV1NETCBFeHBsb3JlcjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj4gPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5Td2l0Y2ggdG8gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQKLWNvcm5lciAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiIGFsdD0iSWNvbiB0byBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIiIC8+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTY0Ij48YSBuYW1lPSJkMGU2NCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciB3b3Jrc3BhY2U8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gaW1wb3J0IHRoZSBXU0RMIGZpbGUgdG8gdGhlIFdvcmtiZW5jaDo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkNsaWNrIHRoaXMgaWNvbjogIDxpbWcgc3JjPSIuLi9pbWFnZXMvbXB0d3NkbGljb24uZ2lmIiBhbHQ9IkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2ggaWNvbiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIHByb2plY3QgaW50byB3aGljaCB5b3Ugd2FudCB0byBpbXBvcnQgdGhlIFdTREwuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSB3YW50IHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIGZyb20gdGhlIFdTREwsIHNlbGVjdCAgPHN0cm9uZz5JbXBvcnQKLWFzIGEgc2VydmljZSByZWZlcmVuY2UgdG8gYSBXU0lMIGRvY3VtZW50PC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlOTAiPjxhIG5hbWU9ImQwZTkwIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkltcG9ydGluZyBhIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHlvdXIgZmlsZSBzeXN0ZW0sIGNsaWNrIHRoaXMgaWNvbjoKLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIiBhbHQ9IkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW0gaWNvbiIgLz4uIFNwZWNpZnkgd2hlcmUgeW91IHdhbnQgdGhlIFdTREwgZmlsZSBzYXZlZCBvbiB5b3VyIHN5c3RlbS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU5NiI+PGEgbmFtZT0iZDBlOTYiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkLCBjbGljayB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzd2l6aWNvbi5naWYiIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIgLz4uIFlvdSBjYW4gc2VsZWN0IGlmIHlvdSB3YW50IHRvIGNyZWF0ZQotYSBXZWIgc2VydmljZSBjbGllbnQgb3IgYSBTa2VsZXRvbiBXZWIgc2VydmljZSBmcm9tIHRoZSBXU0RMIGZpbGUuIENsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvCi1sYXVuY2ggdGhlIHdpemFyZC48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMDUiPjxhIG5hbWU9ImQwZTEwNSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5BZGRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmYXZvcml0ZXM8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIHRoZSBXU0RMIGZpbGUgdG8gRmF2b3JpdGVzLCBjbGljayB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiIgYWx0PSJBZGQgV1NETCB0byBGYXZvcml0ZXMgaWNvbiIgLz48L3A+Ci08cD4uIFRoZSBTdGF0dXMgcGFuZSBkaXNwbGF5cwotdGhhdCB0aGUgV1NETCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHlvdXIgbGlzdCBvZiBmYXZvcml0ZXMuIDwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTExMCI+PGEgbmFtZT0iZDBlMTEwIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L2gyPgotCi08ZGl2PgotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgV1NETCBNYWluIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgZW50ZXIgb3IgYnJvd3NlIHRvIGFuIGV4aXN0aW5nCi1XU0RMIFVSTCBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lLCBhbmQgY2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uIE5vdGUgdGhhdCB0aGUgRXhwbG9yZXIKLXdpbGwgb25seSBhbGxvdyB5b3UgdG8gYnJvd3NlIGZvciBXU0RMIGZpbGVzIHRoYXQgcmVzaWRlIGluIHRoZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5XZWJDb250ZW50L1dTREw8L3NhbXA+IGZvbGRlcgotb2YgYSBwcm9qZWN0LiBUbyBleHBsb3JlIFdTREwgZmlsZXMgc3RvcmVkIGluIG90aGVyIGxvY2F0aW9ucyB3aXRoaW4geW91cgotd29ya3NwYWNlLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3Igc2VsZWN0IHRoZSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UsCi1yaWdodC1jbGljayBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2VzIDwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj4gTGF1bmNoCi1XZWIgU2VydmljZXMgRXhwbG9yZXI8L3NwYW4+PC9zcGFuPi4gRm9yIHRoaXMgZXhhbXBsZSB0aGUgV1NETAotYmVpbmcgdXNlZCBpcyBhIFdlYiBTZXJ2aWNlIHdoaWNoIHJldHVybnMgYSB0ZW1wZXJhdHVyZSBmb3IgYW55IGVudGVyZWQgemlwCi1jb2RlLiAgIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGV4cC5naWYiIGFsdD0iIiAvPjxiciAvPiAKLVRoZSBmb2xsb3dpbmcgbm9kZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgV1NETCB0cmVlOiA8L3NwYW4+IDx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiIGFsdD0iV1NETCBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIiBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgYmluZGluZyBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9iaW5kbm9kZS5naWYiIGFsdD0iQmluZGluZyBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBvcGVyYXRpb24gbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiIgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNraW5nIHRoZSBTZXJ2aWNlIG5vZGUgaW4gdGhlIE5hdmlnYXRvciBwYW5lIChpbiB0aGlzIGV4YW1wbGUKLXRoaXMgd291bGQgYmUgdGhlICA8dHQgY2xhc3M9InN5c291dCI+VGVtcGVyYXR1cmVTZXJ2aWNlPC90dD4gbm9kZSkgZGlzcGxheXMKLWFsbCB0aGUgYmluZGluZ3MgZm9yIHRoaXMgc2VydmljZSwgYXMgd2VsbCBhcyB0aGVpciB0eXBlIGFuZCBhIGJyaWVmIGRlc2NyaXB0aW9uCi1vZiB0aGUgYmluZGluZyBpZiB0aGUgV1NETCBwcm92aWRlciBoYXMgaW5jbHVkZWQgb25lIGluIHRoZSBBY3Rpb25zIHBhbmUuCi1UaHJlZSB0eXBlcyBvZiBiaW5kaW5ncyBhcmUgc3VwcG9ydGVkOiBTT0FQLCBIVFRQIEdldCwgYW5kIEhUVFAgUG9zdC4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZiIgYWx0PSIiIC8+PGJyIC8+ICBUaGUgV1NETAotdXNlZCBpbiB0aGlzIGV4YW1wbGUgb25seSBoYXMgb25lIGJpbmRpbmcsICA8dHQgY2xhc3M9InN5c291dCI+VGVtcGVyYXR1cmVCaW5kaW5nPC90dD4sCi13aGljaCBpcyByZXByZXNlbnRlZCBhcyB0aGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5UZW1wZXJhdHVyZVBvcnRUeXBlPC90dD4gbm9kZQotaW4gdGhlIFdTREwgdHJlZSBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2tpbmcgYSBkaXNwbGF5ZWQgYmluZGluZyBvciBpdHMgbm9kZSBkaXNwbGF5cyB0aGUgV1NETCBiaW5kaW5nCi1kZXRhaWxzIGluIHRoZSBBY3Rpb25zIHBhbmUuIFRoaXMgaW5jbHVkZXMgdGhlIG9wZXJhdGlvbnMgYW5kIGVuZHBvaW50cyBhdmFpbGFibGUKLWZvciB0aGlzIHNlcnZpY2UuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsYm5kZGV0bC5naWYiIGFsdD0iIiAvPjxiciAvPiAgSW4gdGhpcyB2aWV3IHlvdSBjYW4gYWRkIG9yIHJlbW92ZSBlbmRwb2ludHMgZm9yIHRoZSBzZXJ2aWNlLiBUbwotYWRkIGFuIGVuZHBvaW50LCBjbGljayAgPHN0cm9uZz5BZGQ8L3N0cm9uZz4sIGVudGVyIHRoZSBVUkwgZm9yIHRoZSBlbmRwb2ludCwgYW5kIGNsaWNrCi0gPHN0cm9uZz5Hbzwvc3Ryb25nPi4gVGhlIFN0YXR1cyBwYW5lIHNob3VsZCBzYXkgdGhhdCB0aGUgZW5kcG9pbnRzIHdlcmUgc3VjY2Vzc2Z1bGx5Ci11cGRhdGVkLiBUbyByZW1vdmUgYW4gZW5kcG9pbnQsIHNlbGVjdCBpdHMgY2hlY2tib3gsIGFuZCBjbGljayAgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IFdoZW4gdGhlCi1XZWIgU2VydmljZXMgRXhwbG9yZXIgbG9hZHMgV1NETCBmaWxlcyB0aGF0IHVzZSBtdWx0aXBsZSBpbmxpbmUgc2NoZW1hcywgd2FybmluZwotbWVzc2FnZXMgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHR5cGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYWNyb3NzIHRoZXNlIHNjaGVtYXMuCi1UaGUgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUgc2ltaWxhciB0bzogPHNhbXAgY2xhc3M9ImNvZGVwaCI+UmVmZXJlbmNlIG9mIHR5cGUgJmx0OzxlbT5xdWFsaWZpZWRfdHlwZV9uYW1lPC9lbT4mZ3Q7Ci1pc24ndCByZXNvbHZlZC48L3NhbXA+PC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTA2YTdkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c2NvbnN1bXB0aW9udCIKLWlkPSJ3c2NvbnN1bXB0aW9udCIgdGl0bGU9IndzY29uc3VtcHRpb250Ij4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jdWRkaS5kaXRhIiBuYXZ0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbHVkLmRpdGEiIG5hdnRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGRpc2Nvdi5kaXRhIiBuYXZ0aXRsZT0iRGlzY292ZXJpbmcgYW5kIGltcG9ydGluZyBhIFdlYiBzZXJ2aWNlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHdzZGxleHAuZGl0YSIgbmF2dGl0bGU9IkV4cGxvcmluZyBhbmQgdGVzdGluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHRlc3R3c2RsLmRpdGEiIG5hdnRpdGxlPSJUZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgd2l0aCB0aGUgV1NETCBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmRpdGEiIG5hdnRpdGxlPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RyZWcuZGl0YSIgbmF2dGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bG9nZXhwLmRpdGEiIG5hdnRpdGxlPSJMb2dnaW5nIGludG8gYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcmVnLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1YmVudC5kaXRhIiBuYXZ0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RwdWJsaXNoLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiPgotPHRvcGljcmVmIGhyZWY9InJlZi9ydWRkaS5kaXRhIiBuYXZ0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1cGRhdGUuZGl0YSIgbmF2dGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dW5wdWIuZGl0YSIgbmF2dGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJ1c3Byb2ouZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YXNzZXJ0LmRpdGEiIG5hdnRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Ria21yay5kaXRhIiBuYXZ0aXRsZT0iQWRkaW5nIHRvIEZhdm9yaXRlcyI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Z2Vud3NpbC5kaXRhIiBuYXZ0aXRsZT0iR2VuZXJhdGluZyBXU0lMIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1NzQwZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c2NvbnN1bXB0aW9udCIgbGFiZWw9IndzY29uc3VtcHRpb250IiB0b3BpYz0iY29uY2VwdHMvY3VkZGkuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIiBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJUZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIiIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyIgaHJlZj0idGFza3MvdHVkZGlleHAuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90c3RydGV4cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90cmVnLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIgaHJlZj0idGFza3MvdHB1YmVudC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCI+Ci08dG9waWMgbGFiZWw9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIgaHJlZj0icmVmL3J1ZGRpLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIgaHJlZj0idGFza3MvdHVucHViLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCIvPgotPHRvcGljIGxhYmVsPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIgaHJlZj0idGFza3MvdGFzc2VydC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIiBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIGEgV1NJTCBmaWxlIiBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sIi8+Ci08L3RvcGljPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzIzNzBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iCi0gIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzY29uc3VtcHRpb250IgotaWQ9IndzY29uc3VtcHRpb250IiB0aXRsZT0id3Njb25zdW1wdGlvbnQiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmRpdGEiIG5hdnRpdGxlPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RyZWcuZGl0YSIgbmF2dGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bG9nZXhwLmRpdGEiIG5hdnRpdGxlPSJMb2dnaW5nIGludG8gYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcmVnLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1YmVudC5kaXRhIiBuYXZ0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RwdWJsaXNoLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiPgotPHRvcGljcmVmIGhyZWY9InJlZi9ydWRkaS5kaXRhIiBuYXZ0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1cGRhdGUuZGl0YSIgbmF2dGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dW5wdWIuZGl0YSIgbmF2dGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJ1c3Byb2ouZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YXNzZXJ0LmRpdGEiIG5hdnRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Ria21yay5kaXRhIiBuYXZ0aXRsZT0iQWRkaW5nIHRvIEZhdm9yaXRlcyI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmU2MGI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3Njb25zdW1wdGlvbnQiIGxhYmVsPSJ3c2NvbnN1bXB0aW9udCIgdG9waWM9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeSIgaHJlZj0idGFza3MvdHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwiPgotPHRvcGljIGxhYmVsPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiIGhyZWY9InJlZi9ydWRkaS5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIiBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiIGhyZWY9InRhc2tzL3RidXNwcm9qLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIGhyZWY9InRhc2tzL3Rhc3NlcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmE3YjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcAotYnVpbGQueG1sCi1vdXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGNmZWY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmIzYjQxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCTIwMDgtMDEtMDkgS2F0ZSBQcmljZSA8a2F0ZXBAY2EuaWJtLmNvbT4KLQktIG1vZGlmaWVkIGZvciBuZXcgRElUQS1PVCB2ZXJzaW9uCi0JMjAwOC0wNS0wNSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgdG8gYWRkIGdlbmVyYXRpb24gb2YgcHJlLWJ1aWx0IGhlbHAgaW5kZXguIAotCS0gTXVzdCBkZWxldGUgL2luZGV4IGZvbGRlciBiZWZvcmUgcnVubmluZyBidWlsZAkKLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMy4zLjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249IndlYnNlcnZpY2VfdG9jLmRpdGFtYXAiIC8+IAotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJidWlsZC5pbmRleCIgZGVzY3JpcHRpb249IkJ1aWxkcyBzZWFyY2ggaW5kZXggZm9yIHRoZSBwbHVnLWluIiBpZj0iZWNsaXBzZS5ydW5uaW5nIj4KLQkgICAgIDxoZWxwLmJ1aWxkSGVscEluZGV4IG1hbmlmZXN0PSJwbHVnaW4ueG1sIiBkZXN0aW5hdGlvbj0iLiIvPgotCTwvdGFyZ2V0PgkKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlN2EwZGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC41MDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTVmYTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd2Vic2VydmljZV90b2MueG1sLFwKLSAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGltYWdlcy8sXAotICAgICAgICAgICAgICAgY29uY2VwdHMvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouaHRtKixcCi0gICAgICAgICAgICAgICByZWYvKi5odG0qLFwKLSAgICAgICAgICAgICAgIGluZGV4LyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9ICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotICAgICAgICAgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICByZWYvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2I1YjI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjamF4cnBjIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkpBWC1SUEM8L3RpdGxlPgotPHNob3J0ZGVzYz5KQVgtUlBDIHN0YW5kcyBmb3IgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gdG8KLVdTREwgYW5kIFdTREwgdG8gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLVdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkCi1jbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMKLW9uIG90aGVyIHN5c3RlbXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkpBWC1SUEM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkpBWC1SUEM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgY3VycmVudCByZWxlYXNlIG9mIEpBWC1SUEMgcmVxdWlyZXMgdGhlIHN1cHBvcnQgb2YgU09BUCBvdmVyIEhUVFAgZm9yCi1pbnRlcm9wZXJhYmlsaXR5IHB1cnBvc2VzLiBUaGUgU09BUCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWVzc2FnZSBzdHJ1Y3R1cmUsCi1lbmNvZGluZyBydWxlcywgYW5kIGNvbnZlbnRpb25zIGZvciBleGNoYW5naW5nIGluZm9ybWF0aW9uIGluIHRoZSBSUEMgcHJvZ3JhbW1pbmcKLW1vZGVsLiBUaGVzZSBjYWxscyBhbmQgcmVzcG9uc2VzIGFyZSB0cmFuc21pdHRlZCBhcyBTT0FQIG1lc3NhZ2VzIG92ZXIgSFRUUC4KLUluIHRoaXMgcmVsZWFzZSwgSkFYLVJQQyBzdXBwb3J0cyBTT0FQIDEuMSBhbmQgSFRUUCAxLjEuIEZvciBtb3JlIGluZm9ybWF0aW9uCi1vbiBTT0FQLCByZWZlciB0byA8eHJlZiBocmVmPSJjc29hcC5kaXRhIiBzY29wZT0ibG9jYWwiPjwveHJlZj4uPC9wPgotPHA+QWx0aG91Z2ggdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgbWVjaGFuaXNtcyAoZm9yIGV4YW1wbGUsIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gdG8KLVdTREwgc2VyaWFsaXphdGlvbiwgV1NETCB0byA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGRlc2VyaWFsaXphdGlvbiwgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCkKLWFyZSB2ZXJ5IGNvbXBsZXgsIHRoZSBBUEkgaGlkZXMgdGhpcyBjb21wbGV4aXR5IGZyb20gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3Blci4KLU9uIHRoZSBzZXJ2ZXIgc2lkZSwgdGhlIGRldmVsb3BlciBjYW4gcHJvdmlkZSBhIFNlcnZpY2UgRW5kcG9pbnQgSW50ZXJmYWNlCi0oU0VJKTsgYWx0ZXJuYXRlbHkgYW4gU0VJIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6cmRzLiBBbgotU0VJIGlzIGFuIGludGVyZmFjZSB3cml0dGVuIGluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgc3BlY2lmaWVzCi10aGUgcmVtb3RlIHByb2NlZHVyZXMgb2YgYSBXZWIgc2VydmljZS4gVGhlIGRldmVsb3BlciBhbHNvIHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbgotb2YgYSBXZWIgc2VydmljZSwgaW4gdGhlIGZvcm0gb2Ygb25lIG9yIG1vcmUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IG1ldGhvZHMgb2YgdGhlCi1zYW1lIHNpZ25hdHVyZSBhcyB0aG9zZSBvbiB0aGUgU0VJLiBDbGllbnQgcHJvZ3JhbXMgYXJlIGFsc28gZWFzeSB0byBjb2RlLgotQSBjbGllbnQgY3JlYXRlcyBhIHByb3h5LCBhIGxvY2FsIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KLWFuZCB0aGUgU0VJLCBhbmQgdGhlbiBzaW1wbHkgaW52b2tlcyBtZXRob2RzIG9uIHRoZSBwcm94eS48L3A+Ci08cD5KQVgtUlBDIGlzIGhpZ2hseSBpbnRlcm9wZXJhYmxlOiBhIEpBWC1SUEMgY2xpZW50IGNhbiBhY2Nlc3MgYSBXZWIgc2VydmljZQotdGhhdCBpcyBub3QgcnVubmluZyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybSBhbmQgdmljZSB2ZXJzYS4gVGhpcyBmbGV4aWJpbGl0eQotaXMgcG9zc2libGUgYmVjYXVzZSBKQVgtUlBDIHVzZXMgU09BUCBvdmVyIEhUVFAsIGFuZCB0aGUgV2ViIFNlcnZpY2UgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKS4gSkFYLVJQQyB3YXMgZGVzaWduZWQgdG8gc3VwcG9ydCBXUy1JLjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEpBWC1SUEMsIHJlZmVyIHRvIHRoZSAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDEiCi1zY29wZT0iZXh0ZXJuYWwiPm9mZmljaWFsIEpTUiAxMDEgc3BlY2lmaWNhdGlvbnM8L3hyZWY+LjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjanNyMTA5LmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMzk1ZTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSkFYLVJQQyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJKQVgtUlBDIHN0YW5kcyBmb3IgSmF2YSBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMgSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcyAoQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdCB1c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8gV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZCBjbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMgb24gb3RoZXIgc3lzdGVtcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSkFYLVJQQyBzdGFuZHMgZm9yIEphdmEgQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzIEpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMgKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQgdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSBKYXZhIHRvIFdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLiBPZnRlbiB1c2VkIGluIGEgZGlzdHJpYnV0ZWQgY2xpZW50L3NlcnZlciBtb2RlbCwgYW4gUlBDIG1lY2hhbmlzbSBlbmFibGVzIGNsaWVudHMgdG8gZXhlY3V0ZSBwcm9jZWR1cmVzIG9uIG90aGVyIHN5c3RlbXMuIiAvPgotPG1ldGEgY29udGVudD0iSkFYLVJQQywgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSkFYLVJQQywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjanNyMTA5Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjamF4cnBjIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SkFYLVJQQzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2pheHJwYyI+PGEgbmFtZT0iY2pheHJwYyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+SkFYLVJQQzwvaDE+Ci0KLQotCi08ZGl2PjxwPkpBWC1SUEMgc3RhbmRzIGZvciBKYXZh4oSiIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcwotSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcwotKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQKLXVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0bwotV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZwotV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLiBPZnRlbiB1c2VkIGluIGEgZGlzdHJpYnV0ZWQKLWNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcwotb24gb3RoZXIgc3lzdGVtcy48L3A+Ci0KLTxwPlRoZSBjdXJyZW50IHJlbGVhc2Ugb2YgSkFYLVJQQyByZXF1aXJlcyB0aGUgc3VwcG9ydCBvZiBTT0FQIG92ZXIgSFRUUCBmb3IKLWludGVyb3BlcmFiaWxpdHkgcHVycG9zZXMuIFRoZSBTT0FQIHNwZWNpZmljYXRpb24gZGVmaW5lcyBtZXNzYWdlIHN0cnVjdHVyZSwKLWVuY29kaW5nIHJ1bGVzLCBhbmQgY29udmVudGlvbnMgZm9yIGV4Y2hhbmdpbmcgaW5mb3JtYXRpb24gaW4gdGhlIFJQQyBwcm9ncmFtbWluZwotbW9kZWwuIFRoZXNlIGNhbGxzIGFuZCByZXNwb25zZXMgYXJlIHRyYW5zbWl0dGVkIGFzIFNPQVAgbWVzc2FnZXMgb3ZlciBIVFRQLgotSW4gdGhpcyByZWxlYXNlLCBKQVgtUlBDIHN1cHBvcnRzIFNPQVAgMS4xIGFuZCBIVFRQIDEuMS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KLW9uIFNPQVAsIHJlZmVyIHRvIDxhIGhyZWY9ImNzb2FwLmh0bWwiIHRpdGxlPSJTT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodCYjMTA7cHJvdG9jb2wgZm9yIHRoZSBleGNoYW5nZSBvZiBpbmZvcm1hdGlvbiBpbiBhIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiYjMTA7QSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiYjMTA7U09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiAiPlNPQVA8L2E+LjwvcD4KLQotPHA+QWx0aG91Z2ggdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgbWVjaGFuaXNtcyAoZm9yIGV4YW1wbGUsIEphdmEgdG8KLVdTREwgc2VyaWFsaXphdGlvbiwgV1NETCB0byBKYXZhIGRlc2VyaWFsaXphdGlvbiwgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCkKLWFyZSB2ZXJ5IGNvbXBsZXgsIHRoZSBBUEkgaGlkZXMgdGhpcyBjb21wbGV4aXR5IGZyb20gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3Blci4KLU9uIHRoZSBzZXJ2ZXIgc2lkZSwgdGhlIGRldmVsb3BlciBjYW4gcHJvdmlkZSBhIFNlcnZpY2UgRW5kcG9pbnQgSW50ZXJmYWNlCi0oU0VJKTsgYWx0ZXJuYXRlbHkgYW4gU0VJIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6cmRzLiBBbgotU0VJIGlzIGFuIGludGVyZmFjZSB3cml0dGVuIGluIHRoZSBKYXZhIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgc3BlY2lmaWVzCi10aGUgcmVtb3RlIHByb2NlZHVyZXMgb2YgYSBXZWIgc2VydmljZS4gVGhlIGRldmVsb3BlciBhbHNvIHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbgotb2YgYSBXZWIgc2VydmljZSwgaW4gdGhlIGZvcm0gb2Ygb25lIG9yIG1vcmUgSmF2YSBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IG1ldGhvZHMgb2YgdGhlCi1zYW1lIHNpZ25hdHVyZSBhcyB0aG9zZSBvbiB0aGUgU0VJLiBDbGllbnQgcHJvZ3JhbXMgYXJlIGFsc28gZWFzeSB0byBjb2RlLgotQSBjbGllbnQgY3JlYXRlcyBhIHByb3h5LCBhIGxvY2FsIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KLWFuZCB0aGUgU0VJLCBhbmQgdGhlbiBzaW1wbHkgaW52b2tlcyBtZXRob2RzIG9uIHRoZSBwcm94eS48L3A+Ci0KLTxwPkpBWC1SUEMgaXMgaGlnaGx5IGludGVyb3BlcmFibGU6IGEgSkFYLVJQQyBjbGllbnQgY2FuIGFjY2VzcyBhIFdlYiBzZXJ2aWNlCi10aGF0IGlzIG5vdCBydW5uaW5nIG9uIHRoZSBKYXZhIHBsYXRmb3JtIGFuZCB2aWNlIHZlcnNhLiBUaGlzIGZsZXhpYmlsaXR5Ci1pcyBwb3NzaWJsZSBiZWNhdXNlIEpBWC1SUEMgdXNlcyBTT0FQIG92ZXIgSFRUUCwgYW5kIHRoZSBXZWIgU2VydmljZSBEZXNjcmlwdGlvbgotTGFuZ3VhZ2UgKFdTREwpLiBKQVgtUlBDIHdhcyBkZXNpZ25lZCB0byBzdXBwb3J0IFdTLUkuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBKQVgtUlBDLCByZWZlciB0byB0aGUgIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwMSIgdGFyZ2V0PSJfYmxhbmsiPm9mZmljaWFsIEpTUiAxMDEgc3BlY2lmaWNhdGlvbnM8L2E+LjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY2pzcjEwOS5odG1sIiB0aXRsZT0iSlNSIDEwOSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmVzIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlIEphdmEgRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLiI+SlNSIDEwOSAtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODNhMDU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nqc3IxMDkuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjanNyMTA5IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5KU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nCi1tb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlCi1KYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uCi1jb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uPC9pbmRleHRlcm0+PGluZGV4dGVybT5KU1IKLTkyMSBKYXZhIHNwZWNpZmljYXRpb248L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+SmF2YSBzcGVjaWZpY2F0aW9uCi1yZXF1ZXN0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5KU1IgMTA5IGJ1aWxkcyBvbiB0b3Agb2YgSkFYLVJQQyB0byBjb3ZlciB0aGUgdXNlIG9mIEpBWC1SUEMgaW4gYSBKYXZhCi1FRSBlbnZpcm9ubWVudCwgYXMgd2VsbCBhcyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGRlcGxveW1lbnQgb2YgV2ViIHNlcnZpY2VzCi10byBhIEphdmEgRUUgYXBwbGljYXRpb24gc2VydmVyLiBKU1IgMTA5IGRlZmluZXMgYSBzZXQgb2YgWE1MLWJhc2VkIGRlcGxveW1lbnQKLWRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50IGRlcGxveW1lbnRzCi1pbiB0aGUgSmF2YSBFRSBlbnZpcm9ubWVudC4gSlNSIDkyMSB3YXMgYSBtYWludGVuYW5jZSByZXZpc2lvbiBvZiBKU1IgMTA5LAotYW5kIGhhcyBzaW5jZSBiZWVuIHJlcGxhY2VkIGJ5IHRoZSB1cGRhdGVkIHZlcnNpb24gb2YgSlNSIDEwOS48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG86ICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIKLXNjb3BlPSJleHRlcm5hbCI+SlNSIDEwOSwgIkltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlczwveHJlZj4gYW5kIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHNjb3BlPSJleHRlcm5hbCI+SlNSIDkyMTogSW1wbGVtZW50aW5nCi1FbnRlcnByaXNlIFdlYiBTZXJ2aWNlcyAxLjE8L3hyZWY+LjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjamF4cnBjLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGMzYjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSlNSIDEwOSAtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJKU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSmF2YSBFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpTUiAxMDkgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lcyB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwgYW5kIHJ1bi10aW1lIGFyY2hpdGVjdHVyZSB0byBkZXBsb3kgYW5kIGxvb2sgdXAgV2ViIHNlcnZpY2VzIGluIHRoZSBKYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uIGNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycgaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS4iIC8+Ci08bWV0YSBjb250ZW50PSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiwgSlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb24sIFdlYiBzZXJ2aWNlcywgSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSlNSIDEwOSBKYXZhIHNwZWNpZmljYXRpb24sIEpTUiA5MjEgSmF2YSBzcGVjaWZpY2F0aW9uLCBXZWIgc2VydmljZXMsIEphdmEgc3BlY2lmaWNhdGlvbiByZXF1ZXN0cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2pzcjEwOSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqc3IxMDkiPjxhIG5hbWU9ImNqc3IxMDkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5KU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nCi1tb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlCi1KYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uCi1jb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9wPgotCi08cD5KU1IgMTA5IGJ1aWxkcyBvbiB0b3Agb2YgSkFYLVJQQyB0byBjb3ZlciB0aGUgdXNlIG9mIEpBWC1SUEMgaW4gYSBKYXZhCi1FRSBlbnZpcm9ubWVudCwgYXMgd2VsbCBhcyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGRlcGxveW1lbnQgb2YgV2ViIHNlcnZpY2VzCi10byBhIEphdmEgRUUgYXBwbGljYXRpb24gc2VydmVyLiBKU1IgMTA5IGRlZmluZXMgYSBzZXQgb2YgWE1MLWJhc2VkIGRlcGxveW1lbnQKLWRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50IGRlcGxveW1lbnRzCi1pbiB0aGUgSmF2YSBFRSBlbnZpcm9ubWVudC4gSlNSIDkyMSB3YXMgYSBtYWludGVuYW5jZSByZXZpc2lvbiBvZiBKU1IgMTA5LAotYW5kIGhhcyBzaW5jZSBiZWVuIHJlcGxhY2VkIGJ5IHRoZSB1cGRhdGVkIHZlcnNpb24gb2YgSlNSIDEwOS48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIgdGFyZ2V0PSJfYmxhbmsiPkpTUiAxMDksICJJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXM8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHRhcmdldD0iX2JsYW5rIj5KU1IgOTIxOiBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMgMS4xPC9hPi48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImNqYXhycGMuaHRtbCIgdGl0bGU9IkpBWC1SUEMgc3RhbmRzIGZvciBKYXZhIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcyBKU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzIChBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0IHVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0byBXU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkIGNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcyBvbiBvdGhlciBzeXN0ZW1zLiI+SkFYLVJQQzwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYmYwMDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3NvYXAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U09BUDwvdGl0bGU+Ci08c2hvcnRkZXNjPlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0Ci1wcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuCi1BIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuCi1TT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIDwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5TT0FQPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+U09BUDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5TT0FQIGlzIHRyYW5zcG9ydCBpbmRlcGVuZGVudCBidXQgaXMgbW9zdCBjb21tb25seSBjYXJyaWVkIG92ZXIgSFRUUCBpbgotb3JkZXIgdG8gcnVuIHdpdGggdGhlIGV4aXN0aW5nIEludGVybmV0IGluZnJhc3RydWN0dXJlLiZuYnNwOyBTT0FQIGVuYWJsZXMKLXRoZSBiaW5kaW5nIGFuZCB1c2FnZSBvZiBkaXNjb3ZlcmVkIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIG1lc3NhZ2UgcGF0aAotZm9yIHJvdXRpbmcgbWVzc2FnZXMuIFNPQVAgaXMgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIgc2VydmljZXMuIFRoZSB3b3JrYmVuY2gKLXN1cHBvcnRzIFNPQVAgMS4xLjwvcD4KLTxwPlNPQVAgaXMgYW4gWE1MLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyB0aHJlZSBwYXJ0cyB0byBldmVyeSBtZXNzYWdlOjwvcD4KLTx1bD4KLTxsaT4gPHVpY29udHJvbD5FbnZlbG9wZS48L3VpY29udHJvbD4mbmJzcDsgVGhlIGVudmVsb3BlIGRlZmluZXMgYSBmcmFtZXdvcmsKLWZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlIGFuZCBob3cgdG8gcHJvY2VzcyBpdC4mbmJzcDsgQSBTT0FQIG1lc3NhZ2UKLWlzIGFuIGVudmVsb3BlIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIGhlYWRlcnMgYW5kIGV4YWN0bHkgb25lIGJvZHkuJm5ic3A7Ci1UaGUgZW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQsIHByb3ZpZGluZyBhIGNvbnRhaW5lcgotZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sIHRoZSBhZGRyZXNzIG9mIGEgbWVzc2FnZSwgYW5kIHRoZSBtZXNzYWdlIGl0c2VsZi4mbmJzcDsKLUhlYWRlcnMgdHJhbnNwb3J0IGFueSBjb250cm9sIGluZm9ybWF0aW9uIHN1Y2ggYXMgcXVhbGl0eS1vZi1zZXJ2aWNlIGF0dHJpYnV0ZXMuJm5ic3A7Ci1UaGUgYm9keSBjb250YWlucyB0aGUgbWVzc2FnZSBpZGVudGlmaWNhdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnMuJm5ic3A7IEJvdGgKLXRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keSBhcmUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RW5jb2RpbmcgcnVsZXMuPC91aWNvbnRyb2w+Jm5ic3A7IFRoZSBzZXQgb2YgZW5jb2RpbmcgcnVsZXMKLWV4cHJlc3NlcyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBkYXRhIHR5cGVzLiBFbmNvZGluZyBydWxlcyBkZWZpbmUKLWEgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20gdGhhdCBjYW4gYmUgdXNlZCB0byBleGNoYW5nZSBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy4gU09BUCBkZWZpbmVzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGF0YSB0eXBlIHNjaGVtZQotYmFzZWQgb24gWFNEIHBsdXMgZW5jb2RpbmcgcnVsZXMgZm9yIGFsbCBkYXRhIHR5cGVzIGRlZmluZWQgYWNjb3JkaW5nIHRvIHRoaXMKLW1vZGVsLiBTT0FQIGVuY29kaW5nIGlzIG5vdCBXUy1JIGNvbXBsaWFudCBhbmQgdGh1cyB0aGUgTGl0ZXJhbCB1c2UgKHdoaWNoCi1pcyBubyBlbmNvZGluZykgaXMgc3VnZ2VzdGVkIGZvciBpbnRlcm9wZXJhYmxlIFdlYiBzZXJ2aWNlcyBhbmQgcmVxdWlyZWQgZm9yCi1XUy1JIGNvbXBsaWFuY2UuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Db21tdW5pY2F0aW9uIHN0eWxlcy48L3VpY29udHJvbD4gQ29tbXVuaWNhdGlvbnMgY2FuIGZvbGxvdwotYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgKFJQQykgb3IgbWVzc2FnZS1vcmllbnRlZCAoRG9jdW1lbnQpIGZvcm1hdC4mbmJzcDsKLVRoZXNlIGFyZSBkaXNjdXNzZWQgYmVsb3cuPC9saT4KLTwvdWw+Ci08c2VjdGlvbj48dGl0bGU+QmluZGluZyBzdHlsZXM8L3RpdGxlPjxwPlNPQVAgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBjb21tdW5pY2F0aW9uCi1zdHlsZXM6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+UmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpOjwvdWljb250cm9sPiZuYnNwOwotSW52b2NhdGlvbiBvZiBhbiBvcGVyYXRpb24gcmV0dXJuaW5nIGEgcmVzdWx0LiBUeXBpY2FsbHkgdXNlZCB3aXRoIFNPQVAgZW5jb2RpbmcsCi13aGljaCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPjxwPiA8dWljb250cm9sPkRvY3VtZW50IFN0eWxlOjwvdWljb250cm9sPiZuYnNwOwotQWxzbyBrbm93biBhcyBkb2N1bWVudC1vcmllbnRlZCBvciBtZXNzYWdlLW9yaWVudGVkIHN0eWxlLiZuYnNwOyBUaGlzIHN0eWxlCi1wcm92aWRlcyBhIGxvd2VyIGxheWVyIG9mIGFic3RyYWN0aW9uLCBhbmQgcmVxdWlyZXMgbW9yZSBwcm9ncmFtbWluZyB3b3JrLjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+RW5jb2Rpbmcgc3R5bGVzPC90aXRsZT48cD5JbiBkaXN0cmlidXRlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLAotZW5jb2Rpbmcgc3R5bGVzIGRlZmluZSBob3cgZGF0YSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gY2FuIGJlIHRyYW5zbGF0ZWQKLXRvIGFuZCBmcm9tIGEgcGFydGljdWxhciBwcm90b2NvbCBmb3JtYXQuJm5ic3A7IFRoZSB0cmFuc2xhdGlvbiBwcm9jZXNzIGlzCi1rbm93IGFzIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi48L3A+PHA+VGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBkZWZpbmVzCi10aGUgU09BUCBlbmNvZGluZyBzdHlsZTo8L3A+PGxxPiA8cD4gPHVpY29udHJvbD5TT0FQIGVuY29kaW5nOjwvdWljb250cm9sPiZuYnNwOwotVGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGUgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgdmFsdWVzIG9mIGRhdGEKLXR5cGVzIGZyb20gdGhlIFNPQVAgZGF0YSBtb2RlbC4mbmJzcDsgVGhpcyBlbmNvZGluZyBzdHlsZSBpcyBkZWZpbmVkIGluIHRoZQotU09BUCAxLjEgc3RhbmRhcmQsIGFuZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPiA8L2xxPjxwPldTREwgZGVmaW5lcyB0aGUKLUxpdGVyYWwgWE1MIGVuY29kaW5nIHN0eWxlOjwvcD48bHE+IDxwPiA8dWljb250cm9sPkxpdGVyYWwgWE1MOjwvdWljb250cm9sPiZuYnNwOwotTGl0ZXJhbCByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIHJlYWQgYXMtaXMsIG9yIHVuZW5jb2RlZC4KLVRoZSBkb2N1bWVudCBpcyBzZXJpYWxpemVkIGFzIFhNSSwgbWVhbmluZyB0aGF0IHRoZSBtZXNzYWdlIFhNTCBjb21wbGllcyB3aXRoCi10aGUgU2NoZW1hIGluIHRoZSBXU0RMLiBXaGVuIHVzaW5nIExpdGVyYWwgZW5jb2RpbmcsIGVhY2ggbWVzc2FnZSBwYXJ0IHJlZmVyZW5jZXMKLWEgY29uY3JldGUgc2NoZW1hIGRlZmluaXRpb24uIExpdGVyYWwgZW5jb2RpbmcgaXMgV1MtSSBjb21wbGlhbnQuPC9wPiA8L2xxPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5EYXRhIG1vZGVsPC90aXRsZT48cD5UaGUgcHVycG9zZSBvZiB0aGUgU09BUCBkYXRhIG1vZGVsIGlzCi10byBwcm92aWRlIGEgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgYWJzdHJhY3Rpb24gZm9yIGRhdGEgdHlwZXMgdXNlZCBieSBjb21tb24KLXByb2dyYW1taW5nIGxhbmd1YWdlIHR5cGVzLiZuYnNwO0l0IGNvbnNpc3RzIG9mOjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+U2ltcGxlIFhTRCB0eXBlcy48L3VpY29udHJvbD4mbmJzcDsgRm9yIGV4YW1wbGUgaW50LCBzdHJpbmcsCi1hbmQgZGF0ZS48L2xpPgotPGxpPiA8dWljb250cm9sPkNvbXBvdW5kIHR5cGVzLjwvdWljb250cm9sPiZuYnNwOyBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGNvbXBvdW5kCi10eXBlcywgIDx2YXJuYW1lPnN0cnVjdHM8L3Zhcm5hbWU+IGFuZCAgPHZhcm5hbWU+YXJyYXlzPC92YXJuYW1lPi4mbmJzcDsgU3RydWN0cwotYXJlIG5hbWVkIGFnZ3JlZ2F0ZSB0eXBlcyBpbiB3aGljaCBlYWNoIGVsZW1lbnQgaGFzIGEgdW5pcXVlIG5hbWUgb3IgWE1MIHRhZy4mbmJzcDsKLUFycmF5cyBoYXZlIGVsZW1lbnRzIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgcG9zaXRpb24sIG5vdCBieSBuYW1lLjwvbGk+Ci08L3VsPjxwPkFsbCBlbGVtZW50cyBhbmQgaWRlbnRpZmllcnMgY29tcHJpc2luZyB0aGUgU09BUCBkYXRhIG1vZGVsIGFyZSBkZWZpbmVkCi1pbiB0aGUgbmFtZXNwYWNlIFVSSS4mbmJzcDsgVGhlIFNPQVAgc3RhbmRhcmQgZGVmaW5lcyB0aGUgcnVsZXMgZm9yIGhvdyBkYXRhCi10eXBlcyBjYW4gYmUgY29uc3RydWN0ZWQuIEEgcHJvamVjdCBzcGVjaWZpYyBYTUwgc2NoZW1hIG11c3QgZGVmaW5lIHRoZSBhY3R1YWwKLWRhdGEgdHlwZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUgU09BUCBzcGVjaWZpY2F0aW9uIGFyZSBkZWZpbmVkIGluICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLzwveHJlZj4gYW5kCi0gPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLzwveHJlZj48L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlNPQVAgaW1wbGVtZW50YXRpb25zPC90aXRsZT48cD5EaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mCi10aGUgU09BUCBwcm90b2NvbCBhcmUgYXZhaWxhYmxlIHRvZGF5LiBGb3IgZXhhbXBsZSwgdGhlIEFwYWNoZSBGb3VuZGF0aW9uCi1wcm92aWRlcyBBcGFjaGUgU09BUCwgd2hpY2ggZ3JldyBvdXQgb2YgYW4gPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBwcm9qZWN0IGNhbGxlZCBTT0FQNEosIGFzIHdlbGwgYXMgQXBhY2hlCi1BeGlzIGFuZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IDx0bQotdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldlYlNwaGVyZSI+V2ViU3BoZXJlPC90bT4gcnVudGltZQotZW52aXJvbm1lbnRzLjwvcD48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+TWFwcGluZ3M8L3RpdGxlPjxwPkEgbWFwcGluZyBkZWZpbmVzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4KLWEgcXVhbGlmaWVkIFhNTCBlbGVtZW50IG5hbWUsIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzcyBuYW1lLCBhbmQgYW4gZW5jb2Rpbmcgc3R5bGUuJm5ic3A7Ci1UaGUgbWFwcGluZyBzcGVjaWZpZXMgaG93LCB1bmRlciB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuIGluY29taW5nIFhNTCBlbGVtZW50Ci13aXRoIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUgaXMgY29udmVydGVkIHRvIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzcyBhbmQgdmljZSB2ZXJzYS48L3A+PHA+Rm9yIG1vcmUKLWluZm9ybWF0aW9uIG9uIEFwYWNoZSBTT0FQLCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvc29hcCIKLXNjb3BlPSJleHRlcm5hbCI+eG1sLmFwYWNoZS5vcmcvc29hcDwveHJlZj4mbmJzcDsgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24KLVNPQVAgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvU09BUCIgc2NvcGU9ImV4dGVybmFsIj53d3cudzMub3JnL1RSL1NPQVA8L3hyZWY+IDwvcD48L3NlY3Rpb24+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzc2Mzk0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU09BUCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJTT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEEgU09BUCBtZXNzYWdlIGlzIGEgdHJhbnNtaXNzaW9uIG9mIGluZm9ybWF0aW9uIGZyb20gYSBzZW5kZXIgdG8gYSByZWNlaXZlci4gU09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJTT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEEgU09BUCBtZXNzYWdlIGlzIGEgdHJhbnNtaXNzaW9uIG9mIGluZm9ybWF0aW9uIGZyb20gYSBzZW5kZXIgdG8gYSByZWNlaXZlci4gU09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlNPQVAsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJTT0FQLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3NvYXAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TT0FQPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjc29hcCI+PGEgbmFtZT0iY3NvYXAiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNPQVA8L2gxPgotCi0KLQotPGRpdj48cD5TT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodAotcHJvdG9jb2wgZm9yIHRoZSBleGNoYW5nZSBvZiBpbmZvcm1hdGlvbiBpbiBhIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LgotQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLgotU09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiA8L3A+Ci0KLTxwPlNPQVAgaXMgdHJhbnNwb3J0IGluZGVwZW5kZW50IGJ1dCBpcyBtb3N0IGNvbW1vbmx5IGNhcnJpZWQgb3ZlciBIVFRQIGluCi1vcmRlciB0byBydW4gd2l0aCB0aGUgZXhpc3RpbmcgSW50ZXJuZXQgaW5mcmFzdHJ1Y3R1cmUuwqAgU09BUCBlbmFibGVzCi10aGUgYmluZGluZyBhbmQgdXNhZ2Ugb2YgZGlzY292ZXJlZCBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcgYSBtZXNzYWdlIHBhdGgKLWZvciByb3V0aW5nIG1lc3NhZ2VzLiBTT0FQIGlzIHVzZWQgdG8gcXVlcnkgVURESSBmb3IgV2ViIHNlcnZpY2VzLiBUaGUgd29ya2JlbmNoCi1zdXBwb3J0cyBTT0FQIDEuMS48L3A+Ci0KLTxwPlNPQVAgaXMgYW4gWE1MLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyB0aHJlZSBwYXJ0cyB0byBldmVyeSBtZXNzYWdlOjwvcD4KLQotPHVsPgotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FbnZlbG9wZS48L3NwYW4+wqAgVGhlIGVudmVsb3BlIGRlZmluZXMgYSBmcmFtZXdvcmsKLWZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlIGFuZCBob3cgdG8gcHJvY2VzcyBpdC7CoCBBIFNPQVAgbWVzc2FnZQotaXMgYW4gZW52ZWxvcGUgY29udGFpbmluZyB6ZXJvIG9yIG1vcmUgaGVhZGVycyBhbmQgZXhhY3RseSBvbmUgYm9keS7CoAotVGhlIGVudmVsb3BlIGlzIHRoZSB0b3AgZWxlbWVudCBvZiB0aGUgWE1MIGRvY3VtZW50LCBwcm92aWRpbmcgYSBjb250YWluZXIKLWZvciBjb250cm9sIGluZm9ybWF0aW9uLCB0aGUgYWRkcmVzcyBvZiBhIG1lc3NhZ2UsIGFuZCB0aGUgbWVzc2FnZSBpdHNlbGYuwqAKLUhlYWRlcnMgdHJhbnNwb3J0IGFueSBjb250cm9sIGluZm9ybWF0aW9uIHN1Y2ggYXMgcXVhbGl0eS1vZi1zZXJ2aWNlIGF0dHJpYnV0ZXMuwqAKLVRoZSBib2R5IGNvbnRhaW5zIHRoZSBtZXNzYWdlIGlkZW50aWZpY2F0aW9uIGFuZCBpdHMgcGFyYW1ldGVycy7CoCBCb3RoCi10aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkgYXJlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBlbnZlbG9wZS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkVuY29kaW5nIHJ1bGVzLjwvc3Bhbj7CoCBUaGUgc2V0IG9mIGVuY29kaW5nIHJ1bGVzCi1leHByZXNzZXMgaW5zdGFuY2VzIG9mIGFwcGxpY2F0aW9uLWRlZmluZWQgZGF0YSB0eXBlcy4gRW5jb2RpbmcgcnVsZXMgZGVmaW5lCi1hIHNlcmlhbGl6YXRpb24gbWVjaGFuaXNtIHRoYXQgY2FuIGJlIHVzZWQgdG8gZXhjaGFuZ2UgaW5zdGFuY2VzIG9mIGFwcGxpY2F0aW9uLWRlZmluZWQKLWRhdGEgdHlwZXMuIFNPQVAgZGVmaW5lcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlLWluZGVwZW5kZW50IGRhdGEgdHlwZSBzY2hlbWUKLWJhc2VkIG9uIFhTRCBwbHVzIGVuY29kaW5nIHJ1bGVzIGZvciBhbGwgZGF0YSB0eXBlcyBkZWZpbmVkIGFjY29yZGluZyB0byB0aGlzCi1tb2RlbC4gU09BUCBlbmNvZGluZyBpcyBub3QgV1MtSSBjb21wbGlhbnQgYW5kIHRodXMgdGhlIExpdGVyYWwgdXNlICh3aGljaAotaXMgbm8gZW5jb2RpbmcpIGlzIHN1Z2dlc3RlZCBmb3IgaW50ZXJvcGVyYWJsZSBXZWIgc2VydmljZXMgYW5kIHJlcXVpcmVkIGZvcgotV1MtSSBjb21wbGlhbmNlLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29tbXVuaWNhdGlvbiBzdHlsZXMuPC9zcGFuPiBDb21tdW5pY2F0aW9ucyBjYW4gZm9sbG93Ci1hIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCAoUlBDKSBvciBtZXNzYWdlLW9yaWVudGVkIChEb2N1bWVudCkgZm9ybWF0LsKgCi1UaGVzZSBhcmUgZGlzY3Vzc2VkIGJlbG93LjwvbGk+Ci0KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5CaW5kaW5nIHN0eWxlczwvaDQ+PHA+U09BUCBzdXBwb3J0cyB0d28gZGlmZmVyZW50IGNvbW11bmljYXRpb24KLXN0eWxlczo8L3A+Ci08YmxvY2txdW90ZT4gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJlbW90ZSBwcm9jZWR1cmUgY2FsbCAoUlBDKTo8L3NwYW4+wqAKLUludm9jYXRpb24gb2YgYW4gb3BlcmF0aW9uIHJldHVybmluZyBhIHJlc3VsdC4gVHlwaWNhbGx5IHVzZWQgd2l0aCBTT0FQIGVuY29kaW5nLAotd2hpY2ggaXMgbm90IFdTLUkgY29tcGxpYW50LjwvcD4KLTxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Eb2N1bWVudCBTdHlsZTo8L3NwYW4+wqAKLUFsc28ga25vd24gYXMgZG9jdW1lbnQtb3JpZW50ZWQgb3IgbWVzc2FnZS1vcmllbnRlZCBzdHlsZS7CoCBUaGlzIHN0eWxlCi1wcm92aWRlcyBhIGxvd2VyIGxheWVyIG9mIGFic3RyYWN0aW9uLCBhbmQgcmVxdWlyZXMgbW9yZSBwcm9ncmFtbWluZyB3b3JrLjwvcD4KLSA8L2Jsb2NrcXVvdGU+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkVuY29kaW5nIHN0eWxlczwvaDQ+PHA+SW4gZGlzdHJpYnV0ZWQgY29tcHV0aW5nIGVudmlyb25tZW50cywKLWVuY29kaW5nIHN0eWxlcyBkZWZpbmUgaG93IGRhdGEgdmFsdWVzIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uIGNhbiBiZSB0cmFuc2xhdGVkCi10byBhbmQgZnJvbSBhIHBhcnRpY3VsYXIgcHJvdG9jb2wgZm9ybWF0LsKgIFRoZSB0cmFuc2xhdGlvbiBwcm9jZXNzIGlzCi1rbm93IGFzIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi48L3A+Ci08cD5UaGUgU09BUCBzcGVjaWZpY2F0aW9uIGRlZmluZXMKLXRoZSBTT0FQIGVuY29kaW5nIHN0eWxlOjwvcD4KLTxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U09BUCBlbmNvZGluZzo8L3NwYW4+wqAKLVRoZSBTT0FQIGVuY29kaW5nIHN0eWxlIGFsbG93cyB5b3UgdG8gc2VyaWFsaXplL2Rlc2VyaWFsaXplIHZhbHVlcyBvZiBkYXRhCi10eXBlcyBmcm9tIHRoZSBTT0FQIGRhdGEgbW9kZWwuwqAgVGhpcyBlbmNvZGluZyBzdHlsZSBpcyBkZWZpbmVkIGluIHRoZQotU09BUCAxLjEgc3RhbmRhcmQsIGFuZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPgotIDwvYmxvY2txdW90ZT4KLTxwPldTREwgZGVmaW5lcyB0aGUKLUxpdGVyYWwgWE1MIGVuY29kaW5nIHN0eWxlOjwvcD4KLTxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TGl0ZXJhbCBYTUw6PC9zcGFuPsKgCi1MaXRlcmFsIHJlZmVycyB0byB0aGUgZmFjdCB0aGF0IHRoZSBkb2N1bWVudCBzaG91bGQgYmUgcmVhZCBhcy1pcywgb3IgdW5lbmNvZGVkLgotVGhlIGRvY3VtZW50IGlzIHNlcmlhbGl6ZWQgYXMgWE1JLCBtZWFuaW5nIHRoYXQgdGhlIG1lc3NhZ2UgWE1MIGNvbXBsaWVzIHdpdGgKLXRoZSBTY2hlbWEgaW4gdGhlIFdTREwuIFdoZW4gdXNpbmcgTGl0ZXJhbCBlbmNvZGluZywgZWFjaCBtZXNzYWdlIHBhcnQgcmVmZXJlbmNlcwotYSBjb25jcmV0ZSBzY2hlbWEgZGVmaW5pdGlvbi4gTGl0ZXJhbCBlbmNvZGluZyBpcyBXUy1JIGNvbXBsaWFudC48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5EYXRhIG1vZGVsPC9oND48cD5UaGUgcHVycG9zZSBvZiB0aGUgU09BUCBkYXRhIG1vZGVsIGlzCi10byBwcm92aWRlIGEgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgYWJzdHJhY3Rpb24gZm9yIGRhdGEgdHlwZXMgdXNlZCBieSBjb21tb24KLXByb2dyYW1taW5nIGxhbmd1YWdlIHR5cGVzLsKgSXQgY29uc2lzdHMgb2Y6PC9wPgotPHVsPgotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaW1wbGUgWFNEIHR5cGVzLjwvc3Bhbj7CoCBGb3IgZXhhbXBsZSBpbnQsIHN0cmluZywKLWFuZCBkYXRlLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29tcG91bmQgdHlwZXMuPC9zcGFuPsKgIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgY29tcG91bmQKLXR5cGVzLCAgPHZhciBjbGFzcz0idmFybmFtZSI+c3RydWN0czwvdmFyPiBhbmQgIDx2YXIgY2xhc3M9InZhcm5hbWUiPmFycmF5czwvdmFyPi7CoCBTdHJ1Y3RzCi1hcmUgbmFtZWQgYWdncmVnYXRlIHR5cGVzIGluIHdoaWNoIGVhY2ggZWxlbWVudCBoYXMgYSB1bmlxdWUgbmFtZSBvciBYTUwgdGFnLsKgCi1BcnJheXMgaGF2ZSBlbGVtZW50cyB0aGF0IGFyZSBpZGVudGlmaWVkIGJ5IHBvc2l0aW9uLCBub3QgYnkgbmFtZS48L2xpPgotCi08L3VsPgotPHA+QWxsIGVsZW1lbnRzIGFuZCBpZGVudGlmaWVycyBjb21wcmlzaW5nIHRoZSBTT0FQIGRhdGEgbW9kZWwgYXJlIGRlZmluZWQKLWluIHRoZSBuYW1lc3BhY2UgVVJJLsKgIFRoZSBTT0FQIHN0YW5kYXJkIGRlZmluZXMgdGhlIHJ1bGVzIGZvciBob3cgZGF0YQotdHlwZXMgY2FuIGJlIGNvbnN0cnVjdGVkLiBBIHByb2plY3Qgc3BlY2lmaWMgWE1MIHNjaGVtYSBtdXN0IGRlZmluZSB0aGUgYWN0dWFsCi1kYXRhIHR5cGVzLiBUaGUgZWxlbWVudHMgb2YgdGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBhcmUgZGVmaW5lZCBpbiAgPGEgaHJlZj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLzwvYT4gYW5kCi0gPGEgaHJlZj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLzwvYT48L3A+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlNPQVAgaW1wbGVtZW50YXRpb25zPC9oND48cD5EaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mCi10aGUgU09BUCBwcm90b2NvbCBhcmUgYXZhaWxhYmxlIHRvZGF5LsKgIEZvciBleGFtcGxlLCB0aGUgQXBhY2hlIEZvdW5kYXRpb24KLXByb3ZpZGVzIEFwYWNoZSBTT0FQLCB3aGljaCBncmV3IG91dCBvZiBhbiBJQk08c3VwPsKuPC9zdXA+IHByb2plY3QgY2FsbGVkIFNPQVA0SiwgYXMgd2VsbCBhcyBBcGFjaGUKLUF4aXMgYW5kIHRoZSBJQk0gV2ViU3BoZXJlPHN1cD7Crjwvc3VwPiBydW50aW1lCi1lbnZpcm9ubWVudHMuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5NYXBwaW5nczwvaDQ+PHA+QSBtYXBwaW5nIGRlZmluZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbgotYSBxdWFsaWZpZWQgWE1MIGVsZW1lbnQgbmFtZSwgYSBKYXZh4oSiIGNsYXNzIG5hbWUsIGFuZCBhbiBlbmNvZGluZyBzdHlsZS7CoAotVGhlIG1hcHBpbmcgc3BlY2lmaWVzIGhvdywgdW5kZXIgdGhlIGdpdmVuIGVuY29kaW5nLCBhbiBpbmNvbWluZyBYTUwgZWxlbWVudAotd2l0aCBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlzIGNvbnZlcnRlZCB0byBhIEphdmEgY2xhc3MgYW5kIHZpY2UgdmVyc2EuPC9wPgotPHA+Rm9yIG1vcmUKLWluZm9ybWF0aW9uIG9uIEFwYWNoZSBTT0FQLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3NvYXAiIHRhcmdldD0iX2JsYW5rIj54bWwuYXBhY2hlLm9yZy9zb2FwPC9hPsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCi1TT0FQIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi9TT0FQPC9hPiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlNjI4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3MiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC90aXRsZT4KLTxzaG9ydGRlc2M+QSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbgotYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseQotbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuCi1XZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoCi1vdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwKLWh1bWFuIGludGVyYWN0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZCwgc2VsZi1kZXNjcmliaW5nIG1vZHVsYXIgYXBwbGljYXRpb25zIHRoYXQKLWNhbiBiZSBwdWJsaXNoZWQsIGxvY2F0ZWQsIGFuZCBpbnZva2VkIGFjcm9zcyB0aGUgV2ViLjwvcD4KLTxscT4gPHA+IDx1aWNvbnRyb2w+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZC48L3VpY29udHJvbD4gT24gdGhlIGNsaWVudAotc2lkZSwgbm8gYWRkaXRpb25hbCBzb2Z0d2FyZSBpcyByZXF1aXJlZC4mbmJzcDsgQSBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aXRoCi1YTUwgYW5kIEhUVFAgY2xpZW50IHN1cHBvcnQgaXMgZW5vdWdoIHRvIGdldCB5b3Ugc3RhcnRlZC4mbmJzcDsgT24gdGhlIHNlcnZlcgotc2lkZSwgYSBXZWIgc2VydmVyIGFuZCBzZXJ2bGV0IGVuZ2luZSBhcmUgcmVxdWlyZWQuJm5ic3A7IFRoZSBjbGllbnQgYW5kIHNlcnZlcgotY2FuIGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuJm5ic3A7IEl0IGlzIHBvc3NpYmxlIHRvIFdlYgotc2VydmljZSBlbmFibGUgYW4gZXhpc3RpbmcgYXBwbGljYXRpb24gd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS48L3A+IDxwPiA8dWljb250cm9sPldlYgotc2VydmljZXMgYXJlIHNlbGYtZGVzY3JpYmluZy48L3VpY29udHJvbD4gVGhlIGNsaWVudCBhbmQgc2VydmVyIG5lZWQgdG8gcmVjb2duaXplCi1vbmx5IHRoZSBmb3JtYXQgYW5kIGNvbnRlbnQgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMuJm5ic3A7IFRoZSBkZWZpbml0aW9uCi1vZiB0aGUgbWVzc2FnZSBmb3JtYXQgdHJhdmVscyB3aXRoIHRoZSBtZXNzYWdlOyBubyBleHRlcm5hbCBtZXRhZGF0YSByZXBvc2l0b3JpZXMKLW9yIGNvZGUgZ2VuZXJhdGlvbiB0b29scyBhcmUgcmVxdWlyZWQuPC9wPiA8cD4gPHVpY29udHJvbD5XZWIgc2VydmljZXMgYXJlCi1tb2R1bGFyLjwvdWljb250cm9sPiBTaW1wbGUgV2ViIHNlcnZpY2VzIGNhbiBiZSBhZ2dyZWdhdGVkIHRvIGZvcm0gbW9yZSBjb21wbGV4Ci1XZWIgc2VydmljZXMgZWl0aGVyIGJ5IHVzaW5nIHdvcmtmbG93IHRlY2huaXF1ZXMgb3IgYnkgY2FsbGluZyBsb3dlciBsYXllcgotV2ViIHNlcnZpY2VzIGZyb20gYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbi48L3A+PHA+PHVpY29udHJvbD5XZWIgU2VydmljZXMKLWFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC48L3VpY29udHJvbD4gV2ViIHNlcnZpY2VzIGFyZSBiYXNlZCBvbiBhIGNvbmNpc2UKLXNldCBvZiBvcGVuLCBYTUwtYmFzZWQgc3RhbmRhcmRzIGRlc2lnbmVkIHRvIHByb21vdGUgaW50ZXJvcGVyYWJpbGl0eSBiZXR3ZWVuCi1hIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnRzIGFjcm9zcyBhIHZhcmlldHkgb2YgY29tcHV0aW5nIHBsYXRmb3JtcyBhbmQgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlcy48L3A+IDwvbHE+Ci08cD5XZWIgc2VydmljZXMgbWlnaHQgYmUgYW55dGhpbmcsIGZvciBleGFtcGxlLCB0aGVhdHJlIHJldmlldyBhcnRpY2xlcywgd2VhdGhlcgotcmVwb3J0cywgY3JlZGl0IGNoZWNrcywgc3RvY2sgcXVvdGF0aW9ucywgdHJhdmVsIGFkdmlzb3JpZXMsIG9yIGFpcmxpbmUgdHJhdmVsCi1yZXNlcnZhdGlvbiBwcm9jZXNzZXMuIEVhY2ggb2YgdGhlc2Ugc2VsZi1jb250YWluZWQgYnVzaW5lc3Mgc2VydmljZXMgaXMgYW4KLWFwcGxpY2F0aW9uIHRoYXQgY2FuIGVhc2lseSBpbnRlZ3JhdGUgd2l0aCBvdGhlciBzZXJ2aWNlcywgZnJvbSB0aGUgc2FtZSBvcgotZGlmZmVyZW50IGNvbXBhbmllcywgdG8gY3JlYXRlIGEgY29tcGxldGUgYnVzaW5lc3MgcHJvY2Vzcy4gVGhpcyBpbnRlcm9wZXJhYmlsaXR5Ci1hbGxvd3MgYnVzaW5lc3NlcyB0byBkeW5hbWljYWxseSBwdWJsaXNoLCBkaXNjb3ZlciwgYW5kIGJpbmQgYSByYW5nZSBvZiBXZWIKLXNlcnZpY2VzIHRocm91Z2ggdGhlIEludGVybmV0LjwvcD4KLTxzZWN0aW9uPjx0aXRsZT5DYXRlZ29yaWVzIG9mIFdlYiBzZXJ2aWNlczwvdGl0bGU+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBncm91cGVkCi1pbnRvIHRocmVlIGNhdGVnb3JpZXM6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+QnVzaW5lc3MgaW5mb3JtYXRpb24uPC91aWNvbnRyb2w+IEEKLWJ1c2luZXNzIHNoYXJlcyBpbmZvcm1hdGlvbiB3aXRoIGNvbnN1bWVycyBvciBvdGhlciBidXNpbmVzc2VzLiBJbiB0aGlzIGNhc2UsCi10aGUgYnVzaW5lc3MgaXMgdXNpbmcgV2ViIHNlcnZpY2VzIHRvIGV4cGFuZCBpdHMgc2NvcGUuIEV4YW1wbGVzIG9mIGJ1c2luZXNzCi1pbmZvcm1hdGlvbmFsIFdlYiBzZXJ2aWNlcyBhcmUgbmV3cyBzdHJlYW1zLCB3ZWF0aGVyIHJlcG9ydHMsIG9yIHN0b2NrIHF1b3RhdGlvbnMuPC9wPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcwotaW50ZWdyYXRpb24uPC91aWNvbnRyb2w+IEEgYnVzaW5lc3MgcHJvdmlkZXMgdHJhbnNhY3Rpb25hbCwgImZvciBmZWUiIHNlcnZpY2VzCi10byBpdHMgY3VzdG9tZXJzLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyBiZWNvbWVzIHBhcnQgb2YgYSBnbG9iYWwgbmV0d29yawotb2YgdmFsdWUtYWRkZWQgc3VwcGxpZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZHVjdCBjb21tZXJjZS4gRXhhbXBsZXMgb2YKLWJ1c2luZXNzIGludGVncmF0aW9uIFdlYiBzZXJ2aWNlcyBpbmNsdWRlIGJpZCBhbmQgYXVjdGlvbiBlLW1hcmtldHBsYWNlcywKLXJlc2VydmF0aW9uIHN5c3RlbXMsIGFuZCBjcmVkaXQgY2hlY2tpbmcuPC9wPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcyBwcm9jZXNzCi1leHRlcm5hbGl6YXRpb24uPC91aWNvbnRyb2w+IEEgYnVzaW5lc3MgZGlmZmVyZW50aWF0ZXMgaXRzZWxmIGZyb20gaXRzIGNvbXBldGl0aW9uCi10aHJvdWdoIHRoZSBjcmVhdGlvbiBvZiBhIGdsb2JhbCB2YWx1ZSBjaGFpbi4gSW4gdGhpcyBjYXNlLCB0aGUgYnVzaW5lc3MgdXNlcwotV2ViIHNlcnZpY2VzIHRvIGR5bmFtaWNhbGx5IGludGVncmF0ZSBpdHMgcHJvY2Vzc2VzLiBBbiBleGFtcGxlIG9mIGJ1c2luZXNzCi1wcm9jZXNzIGV4dGVybmFsaXphdGlvbiBXZWIgc2VydmljZXMgaXMgdGhlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudAotY29tcGFuaWVzIHRvIGNvbWJpbmUgbWFudWZhY3R1cmluZywgYXNzZW1ibHksIHdob2xlc2FsZSBkaXN0cmlidXRpb24sIGFuZAotcmV0YWlsIHNhbGVzIG9mIGEgcGFydGljdWxhciBwcm9kdWN0LjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+U2VydmljZSByb2xlcyBhbmQgaW50ZXJhY3Rpb25zPC90aXRsZT48cD5BIG5ldHdvcmsgY29tcG9uZW50Ci1pbiBhIFdlYiBTZXJ2aWNlcyBhcmNoaXRlY3R1cmUgY2FuIHBsYXkgb25lIG9yIG1vcmUgZnVuZGFtZW50YWwgcm9sZXM6IHNlcnZpY2UKLXByb3ZpZGVyLCBzZXJ2aWNlIGJyb2tlciwgYW5kIHNlcnZpY2UgY2xpZW50LjwvcD48dWw+Ci08bGk+U2VydmljZSBwcm92aWRlcnMgY3JlYXRlIGFuZCBkZXBsb3kgdGhlaXIgV2ViIHNlcnZpY2VzIGFuZCBjYW4gcHVibGlzaAotdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVpciBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlcyB0aHJvdWdoIGEgc2VydmljZSByZWdpc3RyeSwKLXN1Y2ggYXMgYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5LjwvbGk+Ci08bGk+U2VydmljZSBicm9rZXJzIHJlZ2lzdGVyIGFuZCBjYXRlZ29yaXplIHB1Ymxpc2hlZCBzZXJ2aWNlcyBhbmQgcHJvdmlkZQotc2VhcmNoIHNlcnZpY2VzLiBGb3IgZXhhbXBsZSwgVURESSBhY3RzIGFzIGEgc2VydmljZSBicm9rZXIgZm9yIFdTREwtZGVzY3JpYmVkCi1XZWIgc2VydmljZXMuPC9saT4KLTxsaT5TZXJ2aWNlIGNsaWVudHMgdXNlIGJyb2tlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci10byBkaXNjb3ZlciBhIG5lZWRlZCBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlIGFuZCB0aGVuIGJpbmQgdG8gYW5kIGNhbGwgdGhlCi1zZXJ2aWNlIHByb3ZpZGVyLjwvbGk+Ci08L3VsPjxwPkJpbmRpbmcgaW52b2x2ZXMgZXN0YWJsaXNoaW5nIGFsbCBlbnZpcm9ubWVudGFsIHByZXJlcXVpc2l0ZXMgdGhhdAotYXJlIG5lY2Vzc2FyeSB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIHNlcnZpY2VzLiBFeGFtcGxlcyBvZiBlbnZpcm9ubWVudGFsCi1wcmVyZXF1aXNpdGVzIGluY2x1ZGUgc2VjdXJpdHksIHRyYW5zYWN0aW9uIG1vbml0b3JpbmcsIGFuZCBIVFRQIGF2YWlsYWJpbGl0eS4KLVRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugcm9sZXMgYXJlIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3A+PHA+RmlndXJlCi0xLiBTZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnMuPC9wPjxwPiA8aW1hZ2UgYWx0PSJGaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHNlcnZpY2UgYnJva2VyLCBzZXJ2aWNlIHByb3ZpZGVyLCBhbmQgc2VydmljZSByZXF1ZXN0b3IuIgotaHJlZj0iLi4vaW1hZ2VzL3JvbGVzLmdpZiI+PC9pbWFnZT4gPC9wPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdlYiBzZXJ2aWNlcywKLXJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcyIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXM8L3hyZWY+PC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c3N0YW5kYXJkcy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzOWM2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgc2VydmljZXMgb3ZlcnZpZXciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBvdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3MiPjxhIG5hbWU9ImN3cyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9oMT4KLQotCi0KLTxkaXY+PHA+QSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbgotYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseQotbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuCi1XZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoCi1vdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwKLWh1bWFuIGludGVyYWN0aW9uLjwvcD4KLQotPHA+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZCwgc2VsZi1kZXNjcmliaW5nIG1vZHVsYXIgYXBwbGljYXRpb25zIHRoYXQKLWNhbiBiZSBwdWJsaXNoZWQsIGxvY2F0ZWQsIGFuZCBpbnZva2VkIGFjcm9zcyB0aGUgV2ViLjwvcD4KLQotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgc2VydmljZXMgYXJlIHNlbGYtY29udGFpbmVkLjwvc3Bhbj4gT24gdGhlIGNsaWVudAotc2lkZSwgbm8gYWRkaXRpb25hbCBzb2Z0d2FyZSBpcyByZXF1aXJlZC7CoCBBIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGgKLVhNTCBhbmQgSFRUUCBjbGllbnQgc3VwcG9ydCBpcyBlbm91Z2ggdG8gZ2V0IHlvdSBzdGFydGVkLsKgIE9uIHRoZSBzZXJ2ZXIKLXNpZGUsIGEgV2ViIHNlcnZlciBhbmQgc2VydmxldCBlbmdpbmUgYXJlIHJlcXVpcmVkLsKgIFRoZSBjbGllbnQgYW5kIHNlcnZlcgotY2FuIGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuwqAgSXQgaXMgcG9zc2libGUgdG8gV2ViCi1zZXJ2aWNlIGVuYWJsZSBhbiBleGlzdGluZyBhcHBsaWNhdGlvbiB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1zZXJ2aWNlcyBhcmUgc2VsZi1kZXNjcmliaW5nLjwvc3Bhbj4gVGhlIGNsaWVudCBhbmQgc2VydmVyIG5lZWQgdG8gcmVjb2duaXplCi1vbmx5IHRoZSBmb3JtYXQgYW5kIGNvbnRlbnQgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMuwqAgVGhlIGRlZmluaXRpb24KLW9mIHRoZSBtZXNzYWdlIGZvcm1hdCB0cmF2ZWxzIHdpdGggdGhlIG1lc3NhZ2U7IG5vIGV4dGVybmFsIG1ldGFkYXRhIHJlcG9zaXRvcmllcwotb3IgY29kZSBnZW5lcmF0aW9uIHRvb2xzIGFyZSByZXF1aXJlZC48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBzZXJ2aWNlcyBhcmUKLW1vZHVsYXIuPC9zcGFuPiBTaW1wbGUgV2ViIHNlcnZpY2VzIGNhbiBiZSBhZ2dyZWdhdGVkIHRvIGZvcm0gbW9yZSBjb21wbGV4Ci1XZWIgc2VydmljZXMgZWl0aGVyIGJ5IHVzaW5nIHdvcmtmbG93IHRlY2huaXF1ZXMgb3IgYnkgY2FsbGluZyBsb3dlciBsYXllcgotV2ViIHNlcnZpY2VzIGZyb20gYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbi48L3A+Ci08cD48c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZXMKLWFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC48L3NwYW4+IFdlYiBzZXJ2aWNlcyBhcmUgYmFzZWQgb24gYSBjb25jaXNlCi1zZXQgb2Ygb3BlbiwgWE1MLWJhc2VkIHN0YW5kYXJkcyBkZXNpZ25lZCB0byBwcm9tb3RlIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbgotYSBXZWIgc2VydmljZSBhbmQgY2xpZW50cyBhY3Jvc3MgYSB2YXJpZXR5IG9mIGNvbXB1dGluZyBwbGF0Zm9ybXMgYW5kIHByb2dyYW1taW5nCi1sYW5ndWFnZXMuPC9wPgotIDwvYmxvY2txdW90ZT4KLQotPHA+V2ViIHNlcnZpY2VzIG1pZ2h0IGJlIGFueXRoaW5nLCBmb3IgZXhhbXBsZSwgdGhlYXRyZSByZXZpZXcgYXJ0aWNsZXMsIHdlYXRoZXIKLXJlcG9ydHMsIGNyZWRpdCBjaGVja3MsIHN0b2NrIHF1b3RhdGlvbnMsIHRyYXZlbCBhZHZpc29yaWVzLCBvciBhaXJsaW5lIHRyYXZlbAotcmVzZXJ2YXRpb24gcHJvY2Vzc2VzLiBFYWNoIG9mIHRoZXNlIHNlbGYtY29udGFpbmVkIGJ1c2luZXNzIHNlcnZpY2VzIGlzIGFuCi1hcHBsaWNhdGlvbiB0aGF0IGNhbiBlYXNpbHkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc2VydmljZXMsIGZyb20gdGhlIHNhbWUgb3IKLWRpZmZlcmVudCBjb21wYW5pZXMsIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIGJ1c2luZXNzIHByb2Nlc3MuIFRoaXMgaW50ZXJvcGVyYWJpbGl0eQotYWxsb3dzIGJ1c2luZXNzZXMgdG8gZHluYW1pY2FsbHkgcHVibGlzaCwgZGlzY292ZXIsIGFuZCBiaW5kIGEgcmFuZ2Ugb2YgV2ViCi1zZXJ2aWNlcyB0aHJvdWdoIHRoZSBJbnRlcm5ldC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5DYXRlZ29yaWVzIG9mIFdlYiBzZXJ2aWNlczwvaDQ+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBncm91cGVkCi1pbnRvIHRocmVlIGNhdGVnb3JpZXM6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3NwYW4+IEEKLWJ1c2luZXNzIHNoYXJlcyBpbmZvcm1hdGlvbiB3aXRoIGNvbnN1bWVycyBvciBvdGhlciBidXNpbmVzc2VzLiBJbiB0aGlzIGNhc2UsCi10aGUgYnVzaW5lc3MgaXMgdXNpbmcgV2ViIHNlcnZpY2VzIHRvIGV4cGFuZCBpdHMgc2NvcGUuIEV4YW1wbGVzIG9mIGJ1c2luZXNzCi1pbmZvcm1hdGlvbmFsIFdlYiBzZXJ2aWNlcyBhcmUgbmV3cyBzdHJlYW1zLCB3ZWF0aGVyIHJlcG9ydHMsIG9yIHN0b2NrIHF1b3RhdGlvbnMuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcwotaW50ZWdyYXRpb24uPC9zcGFuPiBBIGJ1c2luZXNzIHByb3ZpZGVzIHRyYW5zYWN0aW9uYWwsICJmb3IgZmVlIiBzZXJ2aWNlcwotdG8gaXRzIGN1c3RvbWVycy4gSW4gdGhpcyBjYXNlLCB0aGUgYnVzaW5lc3MgYmVjb21lcyBwYXJ0IG9mIGEgZ2xvYmFsIG5ldHdvcmsKLW9mIHZhbHVlLWFkZGVkIHN1cHBsaWVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmR1Y3QgY29tbWVyY2UuIEV4YW1wbGVzIG9mCi1idXNpbmVzcyBpbnRlZ3JhdGlvbiBXZWIgc2VydmljZXMgaW5jbHVkZSBiaWQgYW5kIGF1Y3Rpb24gZS1tYXJrZXRwbGFjZXMsCi1yZXNlcnZhdGlvbiBzeXN0ZW1zLCBhbmQgY3JlZGl0IGNoZWNraW5nLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnVzaW5lc3MgcHJvY2VzcwotZXh0ZXJuYWxpemF0aW9uLjwvc3Bhbj4gQSBidXNpbmVzcyBkaWZmZXJlbnRpYXRlcyBpdHNlbGYgZnJvbSBpdHMgY29tcGV0aXRpb24KLXRocm91Z2ggdGhlIGNyZWF0aW9uIG9mIGEgZ2xvYmFsIHZhbHVlIGNoYWluLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyB1c2VzCi1XZWIgc2VydmljZXMgdG8gZHluYW1pY2FsbHkgaW50ZWdyYXRlIGl0cyBwcm9jZXNzZXMuIEFuIGV4YW1wbGUgb2YgYnVzaW5lc3MKLXByb2Nlc3MgZXh0ZXJuYWxpemF0aW9uIFdlYiBzZXJ2aWNlcyBpcyB0aGUgYXNzb2NpYXRpb25zIGJldHdlZW4gZGlmZmVyZW50Ci1jb21wYW5pZXMgdG8gY29tYmluZSBtYW51ZmFjdHVyaW5nLCBhc3NlbWJseSwgd2hvbGVzYWxlIGRpc3RyaWJ1dGlvbiwgYW5kCi1yZXRhaWwgc2FsZXMgb2YgYSBwYXJ0aWN1bGFyIHByb2R1Y3QuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2VydmljZSByb2xlcyBhbmQgaW50ZXJhY3Rpb25zPC9oND48cD5BIG5ldHdvcmsgY29tcG9uZW50Ci1pbiBhIFdlYiBTZXJ2aWNlcyBhcmNoaXRlY3R1cmUgY2FuIHBsYXkgb25lIG9yIG1vcmUgZnVuZGFtZW50YWwgcm9sZXM6IHNlcnZpY2UKLXByb3ZpZGVyLCBzZXJ2aWNlIGJyb2tlciwgYW5kIHNlcnZpY2UgY2xpZW50LjwvcD4KLTx1bD4KLTxsaT5TZXJ2aWNlIHByb3ZpZGVycyBjcmVhdGUgYW5kIGRlcGxveSB0aGVpciBXZWIgc2VydmljZXMgYW5kIGNhbiBwdWJsaXNoCi10aGUgYXZhaWxhYmlsaXR5IG9mIHRoZWlyIFdTREwtZGVzY3JpYmVkIHNlcnZpY2VzIHRocm91Z2ggYSBzZXJ2aWNlIHJlZ2lzdHJ5LAotc3VjaCBhcyBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkuPC9saT4KLQotPGxpPlNlcnZpY2UgYnJva2VycyByZWdpc3RlciBhbmQgY2F0ZWdvcml6ZSBwdWJsaXNoZWQgc2VydmljZXMgYW5kIHByb3ZpZGUKLXNlYXJjaCBzZXJ2aWNlcy4gRm9yIGV4YW1wbGUsIFVEREkgYWN0cyBhcyBhIHNlcnZpY2UgYnJva2VyIGZvciBXU0RMLWRlc2NyaWJlZAotV2ViIHNlcnZpY2VzLjwvbGk+Ci0KLTxsaT5TZXJ2aWNlIGNsaWVudHMgdXNlIGJyb2tlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci10byBkaXNjb3ZlciBhIG5lZWRlZCBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlIGFuZCB0aGVuIGJpbmQgdG8gYW5kIGNhbGwgdGhlCi1zZXJ2aWNlIHByb3ZpZGVyLjwvbGk+Ci0KLTwvdWw+Ci08cD5CaW5kaW5nIGludm9sdmVzIGVzdGFibGlzaGluZyBhbGwgZW52aXJvbm1lbnRhbCBwcmVyZXF1aXNpdGVzIHRoYXQKLWFyZSBuZWNlc3NhcnkgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBzZXJ2aWNlcy4gRXhhbXBsZXMgb2YgZW52aXJvbm1lbnRhbAotcHJlcmVxdWlzaXRlcyBpbmNsdWRlIHNlY3VyaXR5LCB0cmFuc2FjdGlvbiBtb25pdG9yaW5nLCBhbmQgSFRUUCBhdmFpbGFiaWxpdHkuCi1UaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIHJvbGVzIGFyZSBkZXNjcmliZWQgaW4gRmlndXJlIDEuPC9wPgotPHA+RmlndXJlCi0xLiBTZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnMuPC9wPgotPHA+IDxpbWcgc3JjPSIuLi9pbWFnZXMvcm9sZXMuZ2lmIiBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc2VydmljZSBicm9rZXIsIHNlcnZpY2UgcHJvdmlkZXIsIGFuZCBzZXJ2aWNlIHJlcXVlc3Rvci4iIC8+IDwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdlYiBzZXJ2aWNlcywKLXJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlczwvYT48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCI+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvYT48L3N0cm9uZz48YnIgLz4KLU9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cyBvbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzIHRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzIHByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5IG9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCI+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiPkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxOGY3ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50Ci1hbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nCi1hIFdlYiBzZXJ2aWNlIGZyb20gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5ib3R0b20tdXAgV2ViIHNlcnZpY2VzPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmJvdHRvbS11cDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotPHA+V2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIGEgYm90dG9tLXVwIGFwcHJvYWNoLCBmaXJzdCB5b3UgY3JlYXRlCi1hIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPGxpbmsgaHJlZj0iY3dzdG9wZG93bi5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5DcmVhdGluZyB0b3AtZG93biBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTMzOWM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi4iIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXAgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBib3R0b20tdXAiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXAgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBib3R0b20tdXAiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3RvcGRvd24uaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNyZWF0aW5nYm90dG9tLXVwd2Vic2VydmljZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48YSBuYW1lPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YeKEoiBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L3A+Ci0KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotCi08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSBib3R0b20tdXAgYXBwcm9hY2gsIGZpcnN0IHlvdSBjcmVhdGUKLWEgSmF2YSBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3N0b3Bkb3duLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIj5DcmVhdGluZyB0b3AtZG93biBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTljYTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yCi1zZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMKLXJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+V1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5XU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrIHNlcnZpY2VzIGFzIGEgc2V0IG9mCi0gPHZhcm5hbWU+ZW5kcG9pbnRzPC92YXJuYW1lPiB0aGF0IG9wZXJhdGUgb24gbWVzc2FnZXMgdGhhdCBjb250YWluIGVpdGhlcgotZG9jdW1lbnQtb3JpZW50ZWQgb3IgcHJvY2VkdXJlLW9yaWVudGVkIGluZm9ybWF0aW9uLiBUaGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMKLWFyZSBmaXJzdCBkZXNjcmliZWQgYWJzdHJhY3RseSBhbmQgdGhlbiBib3VuZCB0byBhIGNvbmNyZXRlIG5ldHdvcmsgcHJvdG9jb2wKLWFuZCBtZXNzYWdlIGZvcm1hdCBpbiBvcmRlciB0byBkZWZpbmUgYW4gZW5kcG9pbnQuIFJlbGF0ZWQgY29uY3JldGUgZW5kcG9pbnRzCi1hcmUgY29tYmluZWQgaW50byBhYnN0cmFjdCBlbmRwb2ludHMgKHNlcnZpY2VzKS4gV1NETCBpcyBleHRlbnNpYmxlIHRvIGFsbG93Ci1kZXNjcmlwdGlvbiBvZiBlbmRwb2ludHMgYW5kIHRoZWlyIG1lc3NhZ2VzLCByZWdhcmRsZXNzIG9mIHdoaWNoIG1lc3NhZ2UgZm9ybWF0cwotb3IgbmV0d29yayBwcm90b2NvbHMgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIFRoaXMgbWVhbnMgdGhhdCBpbnRlcmZhY2VzIGFyZQotZGVmaW5lZCBhYnN0cmFjdGx5IHVzaW5nIFhNTCBzY2hlbWEgYW5kIHRoZW4gYm91bmQgdG8gY29uY3JldGUgcmVwcmVzZW50YXRpb25zCi10aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3RvY29sLjwvcD4KLTxwPldTREwgYWxsb3dzIGEgc2VydmljZSBwcm92aWRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzCi1vZiBhIFdlYiBzZXJ2aWNlOjwvcD4KLTx1bD4KLTxsaT5UaGUgbmFtZSBvZiB0aGUgV2ViIHNlcnZpY2UgYW5kIGFkZHJlc3NpbmcgaW5mb3JtYXRpb248L2xpPgotPGxpPlRoZSBwcm90b2NvbCBhbmQgZW5jb2Rpbmcgc3R5bGUgdG8gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyB0aGUgcHVibGljIG9wZXJhdGlvbnMKLW9mIHRoZSBXZWIgc2VydmljZTwvbGk+Ci08bGk+VGhlIHR5cGUgaW5mb3JtYXRpb24gc3VjaCBhcyBvcGVyYXRpb25zLCBwYXJhbWV0ZXJzLCBhbmQgZGF0YSB0eXBlcyBjb21wcmlzaW5nCi10aGUgaW50ZXJmYWNlIG9mIHRoZSBXZWIgc2VydmljZTwvbGk+Ci08L3VsPgotPHA+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzIG5ldHdvcmstYWNjZXNzaWJsZQotc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIKLVdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyCi1idXNpbmVzcyBwcm9jZXNzZXMuPC9wPgotPHA+VGhpcyBkZXZlbG9wbWVudCBwbGF0Zm9ybSBzdXBwb3J0cyBhbmQgZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgYW5kIHVzZQotb2YgV1MtSSBjb21wbGlhbnQgV1NETC4gQnVzaW5lc3Mgc2VydmljZSBwcm92aWRlcnMgY2FuIGRlcGxveSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW5zCi1hbmQgZW50ZXJwcmlzZSBiZWFucyBhcyBhIFdlYiBzZXJ2aWNlIGFuZCBnZW5lcmF0ZSBhIFdTREwgZG9jdW1lbnQgdGhhdCBkZXNjcmliZXMKLXRoZSBzZXJ2aWNlLiBUaGV5IGNhbiBhbHNvIGdlbmVyYXRlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYW5kIGVudGVycHJpc2UgYmVhbiBza2VsZXRvbnMgZnJvbQotYW4gZXhpc3RpbmcgV1NETCBmaWxlLiBBIGJ1c2luZXNzIHNlcnZpY2UgY2xpZW50IGNhbiBnZW5lcmF0ZSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcHJveHkKLWZyb20gYSBXU0RMIGRvY3VtZW50LCB0aGVyZWJ5IHByb3ZpZGluZyBhbiBlYXN5LXRvLXVzZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGludGVyZmFjZQotdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBpbnRlcmZhY2UgaGlkZXMgdGhlIG5ldHdvcmsgY29tbXVuaWNhdGlvbnMKLWRldGFpbHMgZnJvbSB0aGUgY2xpZW50IGVuYWJsaW5nIHRoZSBidXNpbmVzcyBzZXJ2aWNlIHByb3ZpZGVyIHRvIGZvY3VzIG9uCi1idXNpbmVzcyBhbmQgcHJvY2VzcyBwb3J0aW9ucyBvZiB0aGUgYXBwbGljYXRpb24uPC9wPgotPHA+SW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRvb2xzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMsIHRoZSB3b3JrYmVuY2ggcHJvdmlkZXMKLWEgV1NETCBlZGl0b3IgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBXU0RMIGZpbGVzIHVzaW5nIGEgZ3JhcGhpY2FsIGludGVyZmFjZSwKLWEgV1NETCB2YWxpZGF0b3IgdGhhdCBlbnN1cmVzIHRoYXQgeW91ciBXU0RMIGZpbGUgaXMgc2VtYW50aWNhbGx5IGNvcnJlY3QKLWFuZCBvcHRpb25hbGx5IGNoZWNrcyBmb3IgV1MtSSBjb21wbGlhbmNlLCBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aGljaAotYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSB0ZXN0IFdlYiBzZXJ2aWNlcyB3aXRob3V0IHJlcXVpcmluZyB5b3UgdG8gZ2VuZXJhdGUKLWEgcHJveHkuPC9wPgotPHA+VGhlIHdvcmtiZW5jaCBzdXBwb3J0cyBXU0RMIDEuMS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdTREwgc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi93c2RsPC94cmVmPjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48bGlua3RleHQ+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+Ci08L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NjIxY2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yIHNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcyByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGEgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbiBmb3IgZGVzY3JpYmluZyBuZXR3b3JrZWQsIFhNTC1iYXNlZCBzZXJ2aWNlcy4gSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvciBzZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBydW4tdGltZSBpbXBsZW1lbnRhdGlvbi4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcywgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcndzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NkbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2RsIj48YSBuYW1lPSJjd3NkbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvaDE+Ci0KLQotCi08ZGl2PjxwPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uCi1mb3IgZGVzY3JpYmluZyBuZXR3b3JrZWQsIFhNTC1iYXNlZCBzZXJ2aWNlcy4gSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvcgotc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zCi1yZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLjwvcD4KLQotPHA+V1NETCBkZWZpbmVzIGFuIFhNTCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgbmV0d29yayBzZXJ2aWNlcyBhcyBhIHNldCBvZgotIDx2YXIgY2xhc3M9InZhcm5hbWUiPmVuZHBvaW50czwvdmFyPiB0aGF0IG9wZXJhdGUgb24gbWVzc2FnZXMgdGhhdCBjb250YWluIGVpdGhlcgotZG9jdW1lbnQtb3JpZW50ZWQgb3IgcHJvY2VkdXJlLW9yaWVudGVkIGluZm9ybWF0aW9uLiBUaGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMKLWFyZSBmaXJzdCBkZXNjcmliZWQgYWJzdHJhY3RseSBhbmQgdGhlbiBib3VuZCB0byBhIGNvbmNyZXRlIG5ldHdvcmsgcHJvdG9jb2wKLWFuZCBtZXNzYWdlIGZvcm1hdCBpbiBvcmRlciB0byBkZWZpbmUgYW4gZW5kcG9pbnQuIFJlbGF0ZWQgY29uY3JldGUgZW5kcG9pbnRzCi1hcmUgY29tYmluZWQgaW50byBhYnN0cmFjdCBlbmRwb2ludHMgKHNlcnZpY2VzKS4gV1NETCBpcyBleHRlbnNpYmxlIHRvIGFsbG93Ci1kZXNjcmlwdGlvbiBvZiBlbmRwb2ludHMgYW5kIHRoZWlyIG1lc3NhZ2VzLCByZWdhcmRsZXNzIG9mIHdoaWNoIG1lc3NhZ2UgZm9ybWF0cwotb3IgbmV0d29yayBwcm90b2NvbHMgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIFRoaXMgbWVhbnMgdGhhdCBpbnRlcmZhY2VzIGFyZQotZGVmaW5lZCBhYnN0cmFjdGx5IHVzaW5nIFhNTCBzY2hlbWEgYW5kIHRoZW4gYm91bmQgdG8gY29uY3JldGUgcmVwcmVzZW50YXRpb25zCi10aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3RvY29sLjwvcD4KLQotPHA+V1NETCBhbGxvd3MgYSBzZXJ2aWNlIHByb3ZpZGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3MKLW9mIGEgV2ViIHNlcnZpY2U6PC9wPgotCi08dWw+Ci08bGk+VGhlIG5hbWUgb2YgdGhlIFdlYiBzZXJ2aWNlIGFuZCBhZGRyZXNzaW5nIGluZm9ybWF0aW9uPC9saT4KLQotPGxpPlRoZSBwcm90b2NvbCBhbmQgZW5jb2Rpbmcgc3R5bGUgdG8gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyB0aGUgcHVibGljIG9wZXJhdGlvbnMKLW9mIHRoZSBXZWIgc2VydmljZTwvbGk+Ci0KLTxsaT5UaGUgdHlwZSBpbmZvcm1hdGlvbiBzdWNoIGFzIG9wZXJhdGlvbnMsIHBhcmFtZXRlcnMsIGFuZCBkYXRhIHR5cGVzIGNvbXByaXNpbmcKLXRoZSBpbnRlcmZhY2Ugb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLQotPC91bD4KLQotPHA+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzIG5ldHdvcmstYWNjZXNzaWJsZQotc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIKLVdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyCi1idXNpbmVzcyBwcm9jZXNzZXMuPC9wPgotCi08cD5UaGlzIGRldmVsb3BtZW50IHBsYXRmb3JtIHN1cHBvcnRzIGFuZCBlbmNvdXJhZ2VzIHRoZSBkZXZlbG9wbWVudCBhbmQgdXNlCi1vZiBXUy1JIGNvbXBsaWFudCBXU0RMLiBCdXNpbmVzcyBzZXJ2aWNlIHByb3ZpZGVycyBjYW4gZGVwbG95IEphdmHihKIgYmVhbnMKLWFuZCBlbnRlcnByaXNlIGJlYW5zIGFzIGEgV2ViIHNlcnZpY2UgYW5kIGdlbmVyYXRlIGEgV1NETCBkb2N1bWVudCB0aGF0IGRlc2NyaWJlcwotdGhlIHNlcnZpY2UuIFRoZXkgY2FuIGFsc28gZ2VuZXJhdGUgSmF2YSBhbmQgZW50ZXJwcmlzZSBiZWFuIHNrZWxldG9ucyBmcm9tCi1hbiBleGlzdGluZyBXU0RMIGZpbGUuIEEgYnVzaW5lc3Mgc2VydmljZSBjbGllbnQgY2FuIGdlbmVyYXRlIGEgSmF2YSBwcm94eQotZnJvbSBhIFdTREwgZG9jdW1lbnQsIHRoZXJlYnkgcHJvdmlkaW5nIGFuIGVhc3ktdG8tdXNlIEphdmEgaW50ZXJmYWNlCi10byB0aGUgV2ViIHNlcnZpY2UuIFRoZSBKYXZhIGludGVyZmFjZSBoaWRlcyB0aGUgbmV0d29yayBjb21tdW5pY2F0aW9ucwotZGV0YWlscyBmcm9tIHRoZSBjbGllbnQgZW5hYmxpbmcgdGhlIGJ1c2luZXNzIHNlcnZpY2UgcHJvdmlkZXIgdG8gZm9jdXMgb24KLWJ1c2luZXNzIGFuZCBwcm9jZXNzIHBvcnRpb25zIG9mIHRoZSBhcHBsaWNhdGlvbi48L3A+Ci0KLTxwPkluIGFkZGl0aW9uIHRvIHByb3ZpZGluZyB0b29scyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzLCB0aGUgd29ya2JlbmNoIHByb3ZpZGVzCi1hIFdTREwgZWRpdG9yIHRoYXQgYWxsb3dzIHlvdSB0byBjcmVhdGUgV1NETCBmaWxlcyB1c2luZyBhIGdyYXBoaWNhbCBpbnRlcmZhY2UsCi1hIFdTREwgdmFsaWRhdG9yIHRoYXQgZW5zdXJlcyB0aGF0IHlvdXIgV1NETCBmaWxlIGlzIHNlbWFudGljYWxseSBjb3JyZWN0Ci1hbmQgb3B0aW9uYWxseSBjaGVja3MgZm9yIFdTLUkgY29tcGxpYW5jZSwgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd2hpY2gKLWFsbG93cyB5b3UgdG8gZHluYW1pY2FsbHkgdGVzdCBXZWIgc2VydmljZXMgd2l0aG91dCByZXF1aXJpbmcgeW91IHRvIGdlbmVyYXRlCi1hIHByb3h5LjwvcD4KLQotPHA+VGhlIHdvcmtiZW5jaCBzdXBwb3J0cyBXU0RMIDEuMS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdTREwgc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi93c2RsPC9hPjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9yZWYvcndzZGwuaHRtbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2U8L2E+PC9zdHJvbmc+PGJyIC8+Ci1BIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywgb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkIGZyb20gdGhlaXIgY29uY3JldGUgbmV0d29yayBkZXBsb3ltZW50IG9yIGRhdGEgZm9ybWF0IGJpbmRpbmdzLiBUaGlzIGFsbG93cyB0aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zIG9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zIG9mIG9wZXJhdGlvbnMuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCIgdGl0bGU9Ik9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cyBvbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzIHRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzIHByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5IG9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLiI+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhmMmFiZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2lsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKTwvdGl0bGU+Ci08c2hvcnRkZXNjPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV2hlbiB5b3UgZGlzY292ZXIgV2ViIHNlcnZpY2VzIHdpdGggVURESSwgeW91IGdvIHRvIGEgY2VudHJhbGl6ZWQgcmVnaXN0cnkuJm5ic3A7Ci1XU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS4mbmJzcDsgV1NJTCBhbGxvd3MKLXlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTSUwgZmlsZXM8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+V1NJTDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD48dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gYW5kCi1NaWNyb3NvZnQncyBwcm9wb3NhbCBmb3IgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBpcyBkZXNpZ25lZCBhcm91bmQgYW4gWE1MLWJhc2VkCi1tb2RlbCBmb3IgYnVpbGRpbmcgYW4gYWdncmVnYXRpb24gb2YgcmVmZXJlbmNlcyB0byBleGlzdGluZyBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMsCi10aGF0IGFyZSBleHBvc2VkIHVzaW5nIHN0YW5kYXJkIFdlYiBzZXJ2ZXIgdGVjaG5vbG9neS48L3A+Ci08cD5XU0lMIHByb3ZpZGVzIGEgZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnkgbWV0aG9kIHRoYXQgc3VwcGxpZXMgcmVmZXJlbmNlcwotdG8gc2VydmljZSBkZXNjcmlwdGlvbnMgYXQgdGhlIHNlcnZpY2UgcHJvdmlkZXIncyBwb2ludC1vZi1vZmZlcmluZywgYnkgc3BlY2lmeWluZwotaG93IHRvIGluc3BlY3QgYSBXZWIgc2l0ZSBmb3IgYXZhaWxhYmxlIFdlYiBzZXJ2aWNlcy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViIHNpdGUgd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuPC9wPgotPHA+U2luY2UgV1NJTCBmb2N1c2VzIG9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1jb21wbGVtZW50cyBVRERJIGJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZQotb24gV2ViIHNpdGVzIHRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gQSBzZXBhcmF0ZSB0b3BpYwotaW4gdGhpcyBkb2N1bWVudGF0aW9uIGRpc2N1c3NlcyB0aGUgIDx4cmVmIGhyZWY9ImN3c2lsdWQuZGl0YSI+UmVsYXRpb25zaGlwCi1iZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3hyZWY+LjwvcD4KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZS4mbmJzcDsKLVdTSUwgZG9jdW1lbnRzIHByb3ZpZGUgYSBtZXRob2QgZm9yIGFnZ3JlZ2F0aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMuJm5ic3A7IFdpdGhpbiBhIFdTSUwgZG9jdW1lbnQsIGEgc2luZ2xlIHNlcnZpY2UgY2FuIGhhdmUgbW9yZQotdGhhbiBvbmUgcmVmZXJlbmNlIHRvIGEgc2VydmljZSBkZXNjcmlwdGlvbi4mbmJzcDsgRm9yIGV4YW1wbGUsIGEgc2luZ2xlIFdlYgotc2VydmljZSBtaWdodCBiZSByZWZlcmVuY2VkIHR3aWNlIGluIGEgV1NJTCBkb2N1bWVudDogb25jZSBkaXJlY3RseSB2aWEgaXRzCi1XU0RMLCBhbmQgYWdhaW4gdmlhIGl0cyBidXNpbmVzc1NlcnZpY2UgZW50cnkgaW4gYSBVRERJIHJlZ2lzdHJ5LiBSZWZlcmVuY2VzCi10byB0aGVzZSB0d28gc2VydmljZSBkZXNjcmlwdGlvbnMgc2hvdWxkIGJlIHB1dCBpbnRvIGEgV1NJTCBkb2N1bWVudC4mbmJzcDsKLUlmIG11bHRpcGxlIHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZSwgaXQgaXMgYmVuZWZpY2lhbCB0byBwdXQgYWxsIG9mIHRoZW0KLWluIHRoZSBXU0lMIGRvY3VtZW50IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZG9jdW1lbnQgY2FuIHNlbGVjdAotdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbiB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbmQgcHJlZmVycmVkIGJ5IHRoYXQKLWFwcGxpY2F0aW9uLjwvcD4KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gc2VydmVzIHR3byBwcmltYXJ5IGZ1bmN0aW9uczo8L3A+Ci08dWw+Ci08bGk+V1NJTCBkZWZpbmVzIGFuIFhNTCBmb3JtYXQgZm9yIGxpc3RpbmcgcmVmZXJlbmNlcyB0byBleGlzdGluZyBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMuIFRoZXNlIHNlcnZpY2UgZGVzY3JpcHRpb25zIGNhbiBiZSBkZWZpbmVkIGluIGFueSBmb3JtYXQsIHN1Y2gKLWFzIFdTREwsIFVEREksIG9yIHBsYWluIEhUTUwuJm5ic3A7IEEgV1NJTCBkb2N1bWVudCBpcyBnZW5lcmFsbHkgbWFkZSBhdmFpbGFibGUKLWF0IHRoZSBwb2ludC1vZi1vZmZlcmluZyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSBkb2N1bWVudC4KLUEgV1NJTCBkb2N1bWVudCBjYW4gY29udGFpbiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucywKLWFzIHdlbGwgYXMgcmVmZXJlbmNlcyB0byBvdGhlciBXU0lMIGRvY3VtZW50cy4gIDxwPlRoZSBhYmlsaXR5IHRvIGxpbmsgYSBXU0lMCi1kb2N1bWVudCB0byBvbmUgb3IgbW9yZSBkaWZmZXJlbnQgV1NJTCBkb2N1bWVudHMgYWxsb3dzIHlvdSB0byBtYW5hZ2Ugc2VydmljZQotZGVzY3JpcHRpb24gcmVmZXJlbmNlcyBieSBncm91cGluZyB0aGVtIGludG8gZGlmZmVyZW50IGRvY3VtZW50cyBhbmQgdG8gYnVpbGQKLWEgaGllcmFyY2h5IG9mIFdTSUwgZG9jdW1lbnRzLiZuYnNwOyBGb3IgZXhhbXBsZSwgc2VwYXJhdGUgV1NJTCBkb2N1bWVudHMKLWNhbiBiZSBjcmVhdGVkIGZvciBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZiBzZXJ2aWNlcywgYW5kIG9uZSBwcmltYXJ5IFdTSUwKLWRvY3VtZW50IGNhbiBsaW5rIGFsbCBvZiB0aGVtIHRvZ2V0aGVyLjwvcD48L2xpPgotPGxpPldTSUwgZGVmaW5lcyBhIHNldCBvZiBjb252ZW50aW9ucyBzbyB0aGF0IGl0IGlzIGVhc3kgdG8gbG9jYXRlIG90aGVyIFdTSUwKLWRvY3VtZW50cy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBsaW1pdCB0aGUgdHlwZSBvZiBzZXJ2aWNlIGRlc2NyaXB0aW9ucwotdGhhdCBjYW4gYmUgcmVmZXJlbmNlZC4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgc2V0IG9mIHN0YW5kYXJkCi1leHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBib3RoIFdTREwgYW5kIFVEREkuJm5ic3A7IFRoZSBXU0lMIHNwZWNpZmljYXRpb24KLWlzIHRoZSBkZWZpbml0aW9uIG9mIGxvY2F0aW9ucyB3aGVyZSB5b3UgY2FuIGFjY2VzcyBXU0lMIGRvY3VtZW50cy48L2xpPgotPGxpPiBUd28gY29udmVudGlvbnMgbWFrZSB0aGUgbG9jYXRpb24gYW5kIHJldHJpZXZhbCBvZiBXU0lMIGRvY3VtZW50cyBlYXN5OiA8dWw+Ci08bGk+IDx1aWNvbnRyb2w+Rml4ZWQtbmFtZSBXU0lMIGRvY3VtZW50cy48L3VpY29udHJvbD4gVGhlIGZpeGVkIG5hbWUgZm9yCi1XU0lMIGRvY3VtZW50cyBpcyBpbnNwZWN0aW9uLndzaWwuJm5ic3A7IFRoZSBpbnNwZWN0aW9uLndzaWwgZmlsZSBpcyBwbGFjZWQKLWF0IGNvbW1vbiBlbnRyeSBwb2ludHMgZm9yIGEgV2ViIHNpdGUuJm5ic3A7IEZvciBleGFtcGxlLCBpZiB0aGUgY29tbW9uIGVudHJ5Ci1wb2ludCBpcyBodHRwOi8vZW50cnlwb2ludC5jb20gdGhlbiB0aGUgbG9jYXRpb24gb2YgdGhlIFdTSUwgZG9jdW1lbnQgd291bGQKLWJlIGh0dHA6Ly9lbnRyeXBvaW50LmNvbS9pbnNwZWN0aW9uLndzaWw8L2xpPgotPGxpPiA8dWljb250cm9sPkxpbmtlZCBXU0lMIGRvY3VtZW50cy48L3VpY29udHJvbD4gUmVmZXJlbmNlcyB0byBXU0lMIGRvY3VtZW50cwotY2FuIGFsc28gYXBwZWFyIHdpdGhpbiBkaWZmZXJlbnQgY29udGVudCBkb2N1bWVudHMsIHN1Y2ggYXMgSFRNTCBwYWdlcy48L2xpPgotPC91bD4gPC9saT4KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmNhMDM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgIFdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgIFdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuIiAvPgotPG1ldGEgY29udGVudD0iV1NJTCBmaWxlcywgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcywgV1NJTCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTSUwgZmlsZXMsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMsIFdTSUwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzaWx1ZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2lsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NpbCI+PGEgbmFtZT0iY3dzaWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKTwvaDE+Ci0KLQotCi08ZGl2PjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV2hlbiB5b3UgZGlzY292ZXIgV2ViIHNlcnZpY2VzIHdpdGggVURESSwgeW91IGdvIHRvIGEgY2VudHJhbGl6ZWQgcmVnaXN0cnkuwqAKLVdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzCi15b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLjwvcD4KLQotPHA+SUJNPHN1cD7Crjwvc3VwPiBhbmQKLU1pY3Jvc29mdCdzIHByb3Bvc2FsIGZvciB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGlzIGRlc2lnbmVkIGFyb3VuZCBhbiBYTUwtYmFzZWQKLW1vZGVsIGZvciBidWlsZGluZyBhbiBhZ2dyZWdhdGlvbiBvZiByZWZlcmVuY2VzIHRvIGV4aXN0aW5nIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucywKLXRoYXQgYXJlIGV4cG9zZWQgdXNpbmcgc3RhbmRhcmQgV2ViIHNlcnZlciB0ZWNobm9sb2d5LjwvcD4KLQotPHA+V1NJTCBwcm92aWRlcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5IG1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMKLXRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MgcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcKLWhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIgc2VydmljZXMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24KLWRlZmluZXMgdGhlIGxvY2F0aW9ucyBvbiBhIFdlYiBzaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvcD4KLQotPHA+U2luY2UgV1NJTCBmb2N1c2VzIG9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1jb21wbGVtZW50cyBVRERJIGJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZQotb24gV2ViIHNpdGVzIHRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gQSBzZXBhcmF0ZSB0b3BpYwotaW4gdGhpcyBkb2N1bWVudGF0aW9uIGRpc2N1c3NlcyB0aGUgIDxhIGhyZWY9ImN3c2lsdWQuaHRtbCI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvYT4uPC9wPgotCi08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGRlZmluZSBhIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UuwqAKLVdTSUwgZG9jdW1lbnRzIHByb3ZpZGUgYSBtZXRob2QgZm9yIGFnZ3JlZ2F0aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMuwqAgV2l0aGluIGEgV1NJTCBkb2N1bWVudCwgYSBzaW5nbGUgc2VydmljZSBjYW4gaGF2ZSBtb3JlCi10aGFuIG9uZSByZWZlcmVuY2UgdG8gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uLsKgIEZvciBleGFtcGxlLCBhIHNpbmdsZSBXZWIKLXNlcnZpY2UgbWlnaHQgYmUgcmVmZXJlbmNlZCB0d2ljZSBpbiBhIFdTSUwgZG9jdW1lbnQ6IG9uY2UgZGlyZWN0bHkgdmlhIGl0cwotV1NETCwgYW5kIGFnYWluIHZpYSBpdHMgYnVzaW5lc3NTZXJ2aWNlIGVudHJ5IGluIGEgVURESSByZWdpc3RyeS4gUmVmZXJlbmNlcwotdG8gdGhlc2UgdHdvIHNlcnZpY2UgZGVzY3JpcHRpb25zIHNob3VsZCBiZSBwdXQgaW50byBhIFdTSUwgZG9jdW1lbnQuwqAKLUlmIG11bHRpcGxlIHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZSwgaXQgaXMgYmVuZWZpY2lhbCB0byBwdXQgYWxsIG9mIHRoZW0KLWluIHRoZSBXU0lMIGRvY3VtZW50IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZG9jdW1lbnQgY2FuIHNlbGVjdAotdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbiB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbmQgcHJlZmVycmVkIGJ5IHRoYXQKLWFwcGxpY2F0aW9uLjwvcD4KLQotPHA+VGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBzZXJ2ZXMgdHdvIHByaW1hcnkgZnVuY3Rpb25zOjwvcD4KLQotPHVsPgotPGxpPldTSUwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBsaXN0aW5nIHJlZmVyZW5jZXMgdG8gZXhpc3Rpbmcgc2VydmljZQotZGVzY3JpcHRpb25zLiBUaGVzZSBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBhbnkgZm9ybWF0LCBzdWNoCi1hcyBXU0RMLCBVRERJLCBvciBwbGFpbiBIVE1MLsKgIEEgV1NJTCBkb2N1bWVudCBpcyBnZW5lcmFsbHkgbWFkZSBhdmFpbGFibGUKLWF0IHRoZSBwb2ludC1vZi1vZmZlcmluZyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSBkb2N1bWVudC4KLUEgV1NJTCBkb2N1bWVudCBjYW4gY29udGFpbiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucywKLWFzIHdlbGwgYXMgcmVmZXJlbmNlcyB0byBvdGhlciBXU0lMIGRvY3VtZW50cy4gIDxwPlRoZSBhYmlsaXR5IHRvIGxpbmsgYSBXU0lMCi1kb2N1bWVudCB0byBvbmUgb3IgbW9yZSBkaWZmZXJlbnQgV1NJTCBkb2N1bWVudHMgYWxsb3dzIHlvdSB0byBtYW5hZ2Ugc2VydmljZQotZGVzY3JpcHRpb24gcmVmZXJlbmNlcyBieSBncm91cGluZyB0aGVtIGludG8gZGlmZmVyZW50IGRvY3VtZW50cyBhbmQgdG8gYnVpbGQKLWEgaGllcmFyY2h5IG9mIFdTSUwgZG9jdW1lbnRzLsKgIEZvciBleGFtcGxlLCBzZXBhcmF0ZSBXU0lMIGRvY3VtZW50cwotY2FuIGJlIGNyZWF0ZWQgZm9yIGRpZmZlcmVudCBjYXRlZ29yaWVzIG9mIHNlcnZpY2VzLCBhbmQgb25lIHByaW1hcnkgV1NJTAotZG9jdW1lbnQgY2FuIGxpbmsgYWxsIG9mIHRoZW0gdG9nZXRoZXIuPC9wPgotPC9saT4KLQotPGxpPldTSUwgZGVmaW5lcyBhIHNldCBvZiBjb252ZW50aW9ucyBzbyB0aGF0IGl0IGlzIGVhc3kgdG8gbG9jYXRlIG90aGVyIFdTSUwKLWRvY3VtZW50cy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBsaW1pdCB0aGUgdHlwZSBvZiBzZXJ2aWNlIGRlc2NyaXB0aW9ucwotdGhhdCBjYW4gYmUgcmVmZXJlbmNlZC7CoCBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSBzZXQgb2Ygc3RhbmRhcmQKLWV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGJvdGggV1NETCBhbmQgVURESS7CoCBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1pcyB0aGUgZGVmaW5pdGlvbiBvZiBsb2NhdGlvbnMgd2hlcmUgeW91IGNhbiBhY2Nlc3MgV1NJTCBkb2N1bWVudHMuPC9saT4KLQotPGxpPiBUd28gY29udmVudGlvbnMgbWFrZSB0aGUgbG9jYXRpb24gYW5kIHJldHJpZXZhbCBvZiBXU0lMIGRvY3VtZW50cyBlYXN5OiA8dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpeGVkLW5hbWUgV1NJTCBkb2N1bWVudHMuPC9zcGFuPiBUaGUgZml4ZWQgbmFtZSBmb3IKLVdTSUwgZG9jdW1lbnRzIGlzIGluc3BlY3Rpb24ud3NpbC7CoCBUaGUgaW5zcGVjdGlvbi53c2lsIGZpbGUgaXMgcGxhY2VkCi1hdCBjb21tb24gZW50cnkgcG9pbnRzIGZvciBhIFdlYiBzaXRlLsKgIEZvciBleGFtcGxlLCBpZiB0aGUgY29tbW9uIGVudHJ5Ci1wb2ludCBpcyBodHRwOi8vZW50cnlwb2ludC5jb20gdGhlbiB0aGUgbG9jYXRpb24gb2YgdGhlIFdTSUwgZG9jdW1lbnQgd291bGQKLWJlIGh0dHA6Ly9lbnRyeXBvaW50LmNvbS9pbnNwZWN0aW9uLndzaWw8L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkxpbmtlZCBXU0lMIGRvY3VtZW50cy48L3NwYW4+IFJlZmVyZW5jZXMgdG8gV1NJTCBkb2N1bWVudHMKLWNhbiBhbHNvIGFwcGVhciB3aXRoaW4gZGlmZmVyZW50IGNvbnRlbnQgZG9jdW1lbnRzLCBzdWNoIGFzIEhUTUwgcGFnZXMuPC9saT4KLQotPC91bD4KLSA8L2xpPgotCi08L3VsPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwvYT48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaWx1ZC5odG1sIj5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBhbmQgdGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS4gSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLiBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMgaW4gVURESS48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQzYWY0NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbHVkLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzaWx1ZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBhbmQgdGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwKLURpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZAotdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LiBIb3dldmVyLCBlYWNoIHNwZWNpZmljYXRpb24gdGFrZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2gKLXRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLiBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkKLW9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zIGluIFVEREkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFdTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+cmVsYXRpb25zaGlwIHdpdGggVURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgVURESSBzcGVjaWZpY2F0aW9uIGFkZHJlc3NlcyBXZWIgc2VydmljZSBkaXNjb3ZlcnkgdGhyb3VnaCB0aGUgdXNlCi1vZiBhIGNlbnRyYWxpemVkIG1vZGVsLiBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UgaW5mb3JtYXRpb24KLWFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLiBSZXF1ZXN0cyBhbmQgdXBkYXRlcyBwZXJ0YWluaW5nCi10byB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3MgcmVsYXRlZCBpbmZvcm1hdGlvbiBhcmUgaXNzdWVkIGRpcmVjdGx5IGFnYWluc3QKLXRoZSByZXBvc2l0b3JpZXMuIEluIGFkZGl0aW9uLCBVRERJIHByZXNjcmliZXMgYSBzcGVjaWZpYyBmb3JtYXQgZm9yIGEgcG9ydGlvbgotb2YgdGhlIHN0b3JlZCBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhbmQsIHRvIGZhY2lsaXRhdGUgYWR2YW5jZWQgKGZvY3VzZWQpCi1zZWFyY2hpbmcsIGFzc3VtZXMgdGhhdCBvdGhlciBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHN0b3JlZCBhbmQgcmVnaXN0ZXJlZAotd2l0aGluIHRoZSBzeXN0ZW0gYXMgd2VsbC48L3A+Ci08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy4KLVRoaXMgaGVscHMgcmVxdWVzdG9ycyBsb2NhdGUgcG90ZW50aWFsIGNvbW11bmljYXRpb24gcGFydG5lcnMuIEluIG9yZGVyIHRvCi1wcm92aWRlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHksIGhvd2V2ZXIsIFVEREkgcmVxdWlyZXMgdGhlIGRlcGxveW1lbnQgYW5kCi1tYWludGVuYW5jZSBvZiBhIGNlcnRhaW4gYW1vdW50IG9mIGluZnJhc3RydWN0dXJlLCB0aHVzIGluY3JlYXNpbmcgdGhlIGNvc3QKLW9mIG9wZXJhdGlvbi4gSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZCBvbmx5Ci13aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIHJlbGllcyBvbiBhIGNvbXBsZXRlbHkgZGlzdHJpYnV0ZWQgbW9kZWwgZm9yIHByb3ZpZGluZwotc2VydmljZS1yZWxhdGVkIGluZm9ybWF0aW9uLiBUaGUgc2VydmljZSBkZXNjcmlwdGlvbnMgY2FuIGJlIHN0b3JlZCBhdCBhbnkKLWxvY2F0aW9uLCBhbmQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFyZSBnZW5lcmFsbHkgbWFkZSBkaXJlY3RseQotdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIG9mZmVyaW5nIHRoZSBzZXJ2aWNlcy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzCi1ub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uIEl0IHJlbGllcwotb24gb3RoZXIgc3RhbmRhcmRzLCBpbmNsdWRpbmcgVURESSwgdG8gZGVmaW5lIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRzLiBUaGUKLVdTSUwgc3BlY2lmaWNhdGlvbiBhbHNvIHJlbGllcyBvbiBleGlzdGluZyBXZWIgdGVjaG5vbG9naWVzIGFuZCBpbmZyYXN0cnVjdHVyZQotdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBwdWJsaXNoaW5nIGFuZCByZXRyaWV2aW5nIGl0cyBkb2N1bWVudHMuPC9wPgotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuCi1UaGlzIGVuYWJsZXMgZm9jdXNlZCBkaXNjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkIG9uIGEgc2luZ2xlIHRhcmdldDsgaG93ZXZlciwKLWJlY2F1c2Ugb2YgaXRzIGRlY2VudHJhbGl6ZWQgYW5kIGRpc3RyaWJ1dGVkIG1vZGVsLCBXU0lMIGlzIG5vdCBhIGdvb2QgbWVjaGFuaXNtCi1mb3IgZXhlY3V0aW5nIGZvY3VzZWQgZGlzY292ZXJ5IGlmIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIgaXMgdW5rbm93bi48L3A+Ci08cD5UaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucyBzaG91bGQgYmUgdmlld2VkIGFzIGNvbXBsZW1lbnRhcnkgdGVjaG5vbG9naWVzCi10byBiZSB1c2VkIGVpdGhlciB0b2dldGhlciBvciBzZXBhcmF0ZWx5IGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLiBGb3IgZXhhbXBsZSwKLWEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZCB3aGVuIHBlcmZvcm1pbmcKLWEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy4gTGlrZXdpc2UsIGEgVURESSByZXBvc2l0b3J5IG1heSBpdHNlbGYgYmUgZGlzY292ZXJlZAotd2hlbiBhIHJlcXVlc3RlciByZXRyaWV2ZXMgYSBXU0lMIGRvY3VtZW50IHRoYXQgcmVmZXJlbmNlcyBhbiBlbnRyeSBpbiB0aGUKLXJlcG9zaXRvcnkuIEluIGVudmlyb25tZW50cyB3aGVyZSB0aGUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eSBhZmZvcmRlZCBieSBVRERJCi1pcyBub3QgcmVxdWlyZWQgYW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvIG5vdCBhbGxvdyBmb3IgaXRzIGRlcGxveW1lbnQsIHRoZQotV1NJTCBtZWNoYW5pc20gbWF5IHByb3ZpZGUgYWxsIG9mIHRoZSBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgbmVlZGVkLiBJbiBzaXR1YXRpb25zCi13aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkgc29sdXRpb24gYWxvbmUgbWF5IHByb3ZpZGUKLXRoZSBiZXN0IGZpdC4gVGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMgc2hvdWxkIG5vdCBiZSB2aWV3ZWQgYXMgbXV0dWFsbHkKLWV4Y2x1c2l2ZS48L3A+Ci08bm90ZT5Cb3RoIFVEREkgYW5kIFdTSUwgY29udGFpbiBvbmx5IHJlZmVyZW5jZXMgdG8gV1NETCAtIHRoZXkgZG8gbm90IGNvbnRhaW4KLXRoZSBXU0RMIGRvY3VtZW50cyB0aGVtc2VsdmVzLjwvbm90ZT4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbC5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTk1YjBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuIEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy4gVGhlIHR3byBzcGVjaWZpY2F0aW9ucyBjYW4gYmUgdXNlZCBzZXBhcmF0ZWx5IG9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zIGluIFVEREkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuIEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy4gVGhlIHR3byBzcGVjaWZpY2F0aW9ucyBjYW4gYmUgdXNlZCBzZXBhcmF0ZWx5IG9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zIGluIFVEREkuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVsYXRpb25zaGlwIHdpdGggV1NJTCwgV1NJTCwgcmVsYXRpb25zaGlwIHdpdGggVURESSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHJlbGF0aW9uc2hpcCB3aXRoIFdTSUwsIFdTSUwsIHJlbGF0aW9uc2hpcCB3aXRoIFVEREkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NpbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaWwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2lsdWQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NpbHVkIj48YSBuYW1lPSJjd3NpbHVkIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBhbmQgdGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwKLURpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZAotdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LiBIb3dldmVyLCBlYWNoIHNwZWNpZmljYXRpb24gdGFrZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2gKLXRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLiBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkKLW9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zIGluIFVEREkuPC9wPgotCi08cD5UaGUgVURESSBzcGVjaWZpY2F0aW9uIGFkZHJlc3NlcyBXZWIgc2VydmljZSBkaXNjb3ZlcnkgdGhyb3VnaCB0aGUgdXNlCi1vZiBhIGNlbnRyYWxpemVkIG1vZGVsLiBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UgaW5mb3JtYXRpb24KLWFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLiBSZXF1ZXN0cyBhbmQgdXBkYXRlcyBwZXJ0YWluaW5nCi10byB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3MgcmVsYXRlZCBpbmZvcm1hdGlvbiBhcmUgaXNzdWVkIGRpcmVjdGx5IGFnYWluc3QKLXRoZSByZXBvc2l0b3JpZXMuIEluIGFkZGl0aW9uLCBVRERJIHByZXNjcmliZXMgYSBzcGVjaWZpYyBmb3JtYXQgZm9yIGEgcG9ydGlvbgotb2YgdGhlIHN0b3JlZCBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhbmQsIHRvIGZhY2lsaXRhdGUgYWR2YW5jZWQgKGZvY3VzZWQpCi1zZWFyY2hpbmcsIGFzc3VtZXMgdGhhdCBvdGhlciBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHN0b3JlZCBhbmQgcmVnaXN0ZXJlZAotd2l0aGluIHRoZSBzeXN0ZW0gYXMgd2VsbC48L3A+Ci0KLTxwPlVEREkgc3lzdGVtcyBmYWNpbGl0YXRlIGZvY3VzZWQgZGlzY292ZXJ5IHBhdHRlcm5zIHNpbmNlIHRoZXNlIHN5c3RlbXMKLWFyZSBiYXNlZCBvbiBvcmdhbml6ZWQgcmVwb3NpdG9yaWVzIHRoYXQgcHJvdmlkZSBhZHZhbmNlZCBzZWFyY2hpbmcgY2FwYWJpbGl0aWVzLgotVGhpcyBoZWxwcyByZXF1ZXN0b3JzIGxvY2F0ZSBwb3RlbnRpYWwgY29tbXVuaWNhdGlvbiBwYXJ0bmVycy4gSW4gb3JkZXIgdG8KLXByb3ZpZGUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eSwgaG93ZXZlciwgVURESSByZXF1aXJlcyB0aGUgZGVwbG95bWVudCBhbmQKLW1haW50ZW5hbmNlIG9mIGEgY2VydGFpbiBhbW91bnQgb2YgaW5mcmFzdHJ1Y3R1cmUsIHRodXMgaW5jcmVhc2luZyB0aGUgY29zdAotb2Ygb3BlcmF0aW9uLiBJbiBhZGRpdGlvbiwgdW5sZXNzIHRoZSBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhcmUgc3RvcmVkIG9ubHkKLXdpdGhpbiBVRERJLCB0aGVyZSBpcyBhIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGtlZXBpbmcgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucwotc3luY2hyb25pemVkLjwvcD4KLQotPHA+VGhlIFdTSUwgc3BlY2lmaWNhdGlvbiByZWxpZXMgb24gYSBjb21wbGV0ZWx5IGRpc3RyaWJ1dGVkIG1vZGVsIGZvciBwcm92aWRpbmcKLXNlcnZpY2UtcmVsYXRlZCBpbmZvcm1hdGlvbi4gVGhlIHNlcnZpY2UgZGVzY3JpcHRpb25zIGNhbiBiZSBzdG9yZWQgYXQgYW55Ci1sb2NhdGlvbiwgYW5kIHJlcXVlc3RzIHRvIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhcmUgZ2VuZXJhbGx5IG1hZGUgZGlyZWN0bHkKLXRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBvZmZlcmluZyB0aGUgc2VydmljZXMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcwotbm90IHN0aXB1bGF0ZSBhbnkgcGFydGljdWxhciBmb3JtYXQgZm9yIHRoZSBzZXJ2aWNlIGluZm9ybWF0aW9uLiBJdCByZWxpZXMKLW9uIG90aGVyIHN0YW5kYXJkcywgaW5jbHVkaW5nIFVEREksIHRvIGRlZmluZSB0aGUgZGVzY3JpcHRpb24gZm9ybWF0cy4gVGhlCi1XU0lMIHNwZWNpZmljYXRpb24gYWxzbyByZWxpZXMgb24gZXhpc3RpbmcgV2ViIHRlY2hub2xvZ2llcyBhbmQgaW5mcmFzdHJ1Y3R1cmUKLXRvIHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgcHVibGlzaGluZyBhbmQgcmV0cmlldmluZyBpdHMgZG9jdW1lbnRzLjwvcD4KLQotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuCi1UaGlzIGVuYWJsZXMgZm9jdXNlZCBkaXNjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkIG9uIGEgc2luZ2xlIHRhcmdldDsgaG93ZXZlciwKLWJlY2F1c2Ugb2YgaXRzIGRlY2VudHJhbGl6ZWQgYW5kIGRpc3RyaWJ1dGVkIG1vZGVsLCBXU0lMIGlzIG5vdCBhIGdvb2QgbWVjaGFuaXNtCi1mb3IgZXhlY3V0aW5nIGZvY3VzZWQgZGlzY292ZXJ5IGlmIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIgaXMgdW5rbm93bi48L3A+Ci0KLTxwPlRoZSBVRERJIGFuZCBXU0lMIHNwZWNpZmljYXRpb25zIHNob3VsZCBiZSB2aWV3ZWQgYXMgY29tcGxlbWVudGFyeSB0ZWNobm9sb2dpZXMKLXRvIGJlIHVzZWQgZWl0aGVyIHRvZ2V0aGVyIG9yIHNlcGFyYXRlbHkgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb24uIEZvciBleGFtcGxlLAotYSBVRERJIHJlcG9zaXRvcnkgY291bGQgYmUgcG9wdWxhdGVkIGJhc2VkIG9uIHRoZSByZXN1bHRzIGZvdW5kIHdoZW4gcGVyZm9ybWluZwotYSBzZWFyY2ggZm9yIFdTSUwgZG9jdW1lbnRzLiBMaWtld2lzZSwgYSBVRERJIHJlcG9zaXRvcnkgbWF5IGl0c2VsZiBiZSBkaXNjb3ZlcmVkCi13aGVuIGEgcmVxdWVzdGVyIHJldHJpZXZlcyBhIFdTSUwgZG9jdW1lbnQgdGhhdCByZWZlcmVuY2VzIGFuIGVudHJ5IGluIHRoZQotcmVwb3NpdG9yeS4gSW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5IGFmZm9yZGVkIGJ5IFVEREkKLWlzIG5vdCByZXF1aXJlZCBhbmQgd2hlcmUgY29uc3RyYWludHMgZG8gbm90IGFsbG93IGZvciBpdHMgZGVwbG95bWVudCwgdGhlCi1XU0lMIG1lY2hhbmlzbSBtYXkgcHJvdmlkZSBhbGwgb2YgdGhlIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBuZWVkZWQuIEluIHNpdHVhdGlvbnMKLXdoZXJlIGRhdGEgbmVlZHMgdG8gYmUgY2VudHJhbGx5IG1hbmFnZWQsIGEgVURESSBzb2x1dGlvbiBhbG9uZSBtYXkgcHJvdmlkZQotdGhlIGJlc3QgZml0LiBUaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucyBzaG91bGQgbm90IGJlIHZpZXdlZCBhcyBtdXR1YWxseQotZXhjbHVzaXZlLjwvcD4KLQotPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IEJvdGggVURESSBhbmQgV1NJTCBjb250YWluIG9ubHkgcmVmZXJlbmNlcyB0byBXU0RMIC0gdGhleSBkbyBub3QgY29udGFpbgotdGhlIFdTREwgZG9jdW1lbnRzIHRoZW1zZWx2ZXMuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkMGExOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2lud3NhIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L3RpdGxlPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnRvb2xzIG92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VG9vbHMgYXJlIHByb3ZpZGVkIHRvIGFzc2lzdCB3aXRoIHRoZSBmb2xsb3dpbmcgYXNwZWN0cyBvZiBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50OjwvcD4KLTx1bD4KLTxsaT4gPHVpY29udHJvbD5EaXNjb3ZlcjwvdWljb250cm9sPi4gQnJvd3NlIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJpZXMKLW9yIFdTSUwgZG9jdW1lbnRzIHRvIGxvY2F0ZSBleGlzdGluZyBXZWIgc2VydmljZXMgZm9yIGludGVncmF0aW9uLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+Q3JlYXRlIG9yIFRyYW5zZm9ybTwvdWljb250cm9sPi4gQ3JlYXRlIGJvdHRvbS11cCBXZWIgc2VydmljZXMKLWZyb20gZXhpc3RpbmcgYXJ0aWZhY3RzLCBzdWNoIGFzIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMgYW5kIGVudGVycHJpc2UgYmVhbnMuIENyZWF0ZQotdG9wLWRvd24gV2ViIHNlcnZpY2VzIGZyb20gV1NETCBkaXNjb3ZlcmVkIGZyb20gb3RoZXJzIG9yIGNyZWF0ZWQgdXNpbmcgdGhlCi1XU0RMIEVkaXRvci48L2xpPgotPGxpPiA8dWljb250cm9sPkJ1aWxkPC91aWNvbnRyb2w+LiBXcmFwIGV4aXN0aW5nIGFydGlmYWN0cyBhcyBTT0FQIGFjY2Vzc2libGUKLXNlcnZpY2VzIGFuZCBkZXNjcmliZSB0aGVtIGluIFdTREwuIFRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBhc3Npc3QgeW91IGluCi1nZW5lcmF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQgcHJveHkgdG8gV2ViIHNlcnZpY2VzIGRlc2NyaWJlZCBpbiBXU0RMCi1hbmQgaW4gZ2VuZXJhdGluZyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gc2tlbGV0b25zIGZyb20gV1NETC48L2xpPgotPGxpPiA8dWljb250cm9sPkRlcGxveTwvdWljb250cm9sPi4gRGVwbG95IFdlYiBzZXJ2aWNlcyBpbnRvIGEgdmFyaWV0eSBvZgotdGVzdCBlbnZpcm9ubWVudHMuPC9saT4KLTxsaT4gPHVpY29udHJvbD5UZXN0PC91aWNvbnRyb2w+LiBUZXN0IFdlYiBzZXJ2aWNlcyBydW5uaW5nIGxvY2FsbHkgb3IgcmVtb3RlbHkKLWluIG9yZGVyIHRvIGdldCBpbnN0YW50IGZlZWRiYWNrLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RGV2ZWxvcDwvdWljb250cm9sPi4gR2VuZXJhdGUgc2FtcGxlIGFwcGxpY2F0aW9ucyB0byBhc3Npc3QKLXlvdSBpbiBjcmVhdGluZyB5b3VyIG93biBXZWIgc2VydmljZSBjbGllbnQgYXBwbGljYXRpb24uPC9saT4KLTxsaT4gPHVpY29udHJvbD5QdWJsaXNoPC91aWNvbnRyb2w+LiBQdWJsaXNoIFdlYiBzZXJ2aWNlcyB0byBhIFVEREkgdjIgb3IKLXYzIEJ1c2luZXNzIFJlZ2lzdHJ5LCBhZHZlcnRpc2luZyB5b3VyIFdlYiBzZXJ2aWNlcyBzbyB0aGF0IG90aGVyIGJ1c2luZXNzZXMKLWFuZCBjbGllbnRzIGNhbiBhY2Nlc3MgdGhlbS48L2xpPgotPC91bD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg1ZjI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCB0b29scyBvdmVydmlldyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgdG9vbHMgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NpbndzYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2lud3NhIj48YSBuYW1lPSJjd3NpbndzYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvaDE+Ci0KLQotPGRpdj4KLTxwPlRvb2xzIGFyZSBwcm92aWRlZCB0byBhc3Npc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGFzcGVjdHMgb2YgV2ViIHNlcnZpY2VzCi1kZXZlbG9wbWVudDo8L3A+Ci0KLTx1bD4KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGlzY292ZXI8L3NwYW4+LiBCcm93c2UgdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cmllcwotb3IgV1NJTCBkb2N1bWVudHMgdG8gbG9jYXRlIGV4aXN0aW5nIFdlYiBzZXJ2aWNlcyBmb3IgaW50ZWdyYXRpb24uPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DcmVhdGUgb3IgVHJhbnNmb3JtPC9zcGFuPi4gQ3JlYXRlIGJvdHRvbS11cCBXZWIgc2VydmljZXMKLWZyb20gZXhpc3RpbmcgYXJ0aWZhY3RzLCBzdWNoIGFzIEphdmHihKIgYmVhbnMgYW5kIGVudGVycHJpc2UgYmVhbnMuIENyZWF0ZQotdG9wLWRvd24gV2ViIHNlcnZpY2VzIGZyb20gV1NETCBkaXNjb3ZlcmVkIGZyb20gb3RoZXJzIG9yIGNyZWF0ZWQgdXNpbmcgdGhlCi1XU0RMIEVkaXRvci48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJ1aWxkPC9zcGFuPi4gV3JhcCBleGlzdGluZyBhcnRpZmFjdHMgYXMgU09BUCBhY2Nlc3NpYmxlCi1zZXJ2aWNlcyBhbmQgZGVzY3JpYmUgdGhlbSBpbiBXU0RMLiBUaGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYXNzaXN0IHlvdSBpbgotZ2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IHRvIFdlYiBzZXJ2aWNlcyBkZXNjcmliZWQgaW4gV1NETAotYW5kIGluIGdlbmVyYXRpbmcgSmF2YSBiZWFuIHNrZWxldG9ucyBmcm9tIFdTREwuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXBsb3k8L3NwYW4+LiBEZXBsb3kgV2ViIHNlcnZpY2VzIGludG8gYSB2YXJpZXR5IG9mCi10ZXN0IGVudmlyb25tZW50cy48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRlc3Q8L3NwYW4+LiBUZXN0IFdlYiBzZXJ2aWNlcyBydW5uaW5nIGxvY2FsbHkgb3IgcmVtb3RlbHkKLWluIG9yZGVyIHRvIGdldCBpbnN0YW50IGZlZWRiYWNrLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGV2ZWxvcDwvc3Bhbj4uIEdlbmVyYXRlIHNhbXBsZSBhcHBsaWNhdGlvbnMgdG8gYXNzaXN0Ci15b3UgaW4gY3JlYXRpbmcgeW91ciBvd24gV2ViIHNlcnZpY2UgY2xpZW50IGFwcGxpY2F0aW9uLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHVibGlzaDwvc3Bhbj4uIFB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRvIGEgVURESSB2MiBvcgotdjMgQnVzaW5lc3MgUmVnaXN0cnksIGFkdmVydGlzaW5nIHlvdXIgV2ViIHNlcnZpY2VzIHNvIHRoYXQgb3RoZXIgYnVzaW5lc3NlcwotYW5kIGNsaWVudHMgY2FuIGFjY2VzcyB0aGVtLjwvbGk+Ci0KLTwvdWw+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViY2FkNjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3Npb3ZlciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSk8L3RpdGxlPgotPHNob3J0ZGVzYz5XUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkKLWFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eTwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXUy1JLCByZWZlciB0byB0aGVpciBXZWIgc2l0ZTogIDx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cud3MtaS5vcmcvPC94cmVmPi4KLVRoaXMgc2l0ZSBjb250YWlucyByZXNvdXJjZXMgc3VjaCBhcyBhbiBvdmVydmlldyBvZiBXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSwKLXVzYWdlIHNjZW5hcmlvcywgYW5kIHNwZWNpZmljYXRpb25zLjwvcD4KLTxwPldTLUkgQmFzaWMgUHJvZmlsZSBpcyBhIG91dGxpbmUgb2YgcmVxdWlyZW1lbnRzIHRvIHdoaWNoIFdTREwgYW5kIFdlYiBzZXJ2aWNlCi1wcm90b2NvbCAoU09BUC9IVFRQKSB0cmFmZmljIG11c3QgY29tcGx5IGluIG9yZGVyIHRvIGNsYWltIFdTLUkgY29uZm9ybWFuY2UuCi1UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBjdXJyZW50bHkgc3VwcG9ydCBXUy1JIFNpbXBsZSBTT0FQCi1CaW5kaW5nIFByb2ZpbGUgMS4wIChXUy1JIFNTQlApIHdoaWNoIGJ1aWxkcyBvbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlLCBhbmQKLXRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gVG8gdmlldyB0aGUgc3BlY2lmaWNhdGlvbnMsIHJlZmVyCi10byB0aGUgV1MtSSBXZWIgc2l0ZSwgYW5kIHVuZGVyICA8dWljb250cm9sPkRlbGl2ZXJhYmxlczwvdWljb250cm9sPiBzZWxlY3QKLSA8dWljb250cm9sPkJhc2ljIFByb2ZpbGU8L3VpY29udHJvbD4uPC9wPgotPHA+RGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIFdlYiBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQsIHlvdSBtYXkgb3IgbWF5IG5vdAotd2FudCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGNvbXBseSB3aXRoIHRoZSBXUy1JIHByb2ZpbGVzLiBUaGUgZGVmYXVsdCBsZXZlbAotb2YgY29tcGxpYW5jZSBpcyB0byBnZW5lcmF0ZSBhIHdhcm5pbmcgaWYgYSBub24gV1MtSSBTU0JQIGNvbXBsYWludCBXZWIgc2VydmljZQotb3B0aW9uIGlzIHNlbGVjdGVkIGFuZCB0byBpZ25vcmUgYW55IG5vbiBXUy1JIEFQIGNvbXBsaWFudCBzZWxlY3Rpb25zLiBZb3UKLWNhbiBzZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBhdCB0aGUgd29ya3NwYWNlIG9yIHByb2plY3QgbGV2ZWwuIFRoZQotV2ViIHNlcnZpY2VzIHdpemFyZHMsIHRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIgotdHJhZGVtYXJrPSJXZWJTcGhlcmUiPldlYlNwaGVyZTwvdG0+IHJ1bi10aW1lIGVudmlyb25tZW50cywgdGhlIFdTREwgZWRpdG9yLAotYW5kIG90aGVyIFdlYiBzZXJ2aWNlcyB0b29scyBwcm92aWRlZCBzdXBwb3J0IGFuZCBlbmNvdXJhZ2UgdGhlIGRldmVsb3BtZW50Ci1vZiBXUy1JIGNvbXBsaWFuY2Ugc2VydmljZXMuPC9wPgotPC9jb25ib2R5PgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMWY2MmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSwgaW50ZXJvcGVyYWJpbGl0eSwgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHksIGludGVyb3BlcmFiaWxpdHksIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2lvdmVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3Npb3ZlciI+PGEgbmFtZT0iY3dzaW92ZXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvaDE+Ci0KLQotCi08ZGl2PjxwPldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eQotYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXUy1JLCByZWZlciB0byB0aGVpciBXZWIgc2l0ZTogIDxhIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy53cy1pLm9yZy88L2E+LgotVGhpcyBzaXRlIGNvbnRhaW5zIHJlc291cmNlcyBzdWNoIGFzIGFuIG92ZXJ2aWV3IG9mIFdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LAotdXNhZ2Ugc2NlbmFyaW9zLCBhbmQgc3BlY2lmaWNhdGlvbnMuPC9wPgotCi08cD5XUy1JIEJhc2ljIFByb2ZpbGUgaXMgYSBvdXRsaW5lIG9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZQotcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYyBtdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLgotVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUAotQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSB3aGljaCBidWlsZHMgb24gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSwgYW5kCi10aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlcgotdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlciAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVsaXZlcmFibGVzPC9zcGFuPiBzZWxlY3QKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CYXNpYyBQcm9maWxlPC9zcGFuPi48L3A+Ci0KLTxwPkRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSBiZWluZyBjcmVhdGVkLCB5b3UgbWF5IG9yIG1heSBub3QKLXdhbnQgeW91ciBXZWIgc2VydmljZSB0byBjb21wbHkgd2l0aCB0aGUgV1MtSSBwcm9maWxlcy4gVGhlIGRlZmF1bHQgbGV2ZWwKLW9mIGNvbXBsaWFuY2UgaXMgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIGEgbm9uIFdTLUkgU1NCUCBjb21wbGFpbnQgV2ViIHNlcnZpY2UKLW9wdGlvbiBpcyBzZWxlY3RlZCBhbmQgdG8gaWdub3JlIGFueSBub24gV1MtSSBBUCBjb21wbGlhbnQgc2VsZWN0aW9ucy4gWW91Ci1jYW4gc2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgYXQgdGhlIHdvcmtzcGFjZSBvciBwcm9qZWN0IGxldmVsLiBUaGUKLVdlYiBzZXJ2aWNlcyB3aXphcmRzLCB0aGUgV2ViU3BoZXJlPHN1cD7Crjwvc3VwPiBydW4tdGltZSBlbnZpcm9ubWVudHMsIHRoZSBXU0RMIGVkaXRvciwKLWFuZCBvdGhlciBXZWIgc2VydmljZXMgdG9vbHMgcHJvdmlkZWQgc3VwcG9ydCBhbmQgZW5jb3VyYWdlIHRoZSBkZXZlbG9wbWVudAotb2YgV1MtSSBjb21wbGlhbmNlIHNlcnZpY2VzLjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNDE3NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0id2Vic2VydmljZXNzdGFuZGFyZHMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cwotb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cwotdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMKLXByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuCi1Tb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eQotb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+c3RhbmRhcmRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgcGxheSBrZXkgcm9sZXMgaW4gV2ViIHNlcnZpY2VzOiBVbml2ZXJzYWwgRGVzY3JpcHRpb24sCi1EaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIChVRERJKSwgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSwKLVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSwgU09BUCwgYW5kIFdlYiBTZXJ2aWNlcyBJbnRlcm9wZXJhYmlsaXR5Ci0oV1MtSSkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGFuZGFyZHMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAyLjwvcD4KLTxwPlRoZSBVRERJIHNwZWNpZmljYXRpb24gZGVmaW5lcyBvcGVuLCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzdGFuZGFyZHMgdGhhdAotZW5hYmxlIGJ1c2luZXNzZXMgdG8gc2hhcmUgaW5mb3JtYXRpb24gaW4gYSBnbG9iYWwgYnVzaW5lc3MgcmVnaXN0cnksIGRpc2NvdmVyCi1zZXJ2aWNlcyBvbiB0aGUgcmVnaXN0cnksIGFuZCBkZWZpbmUgaG93IHRoZXkgaW50ZXJhY3Qgb3ZlciB0aGUgSW50ZXJuZXQuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJLCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIgotc2NvcGU9ImV4dGVybmFsIj53d3cudWRkaS5vcmc8L3hyZWY+PC9wPgotPHA+V1NJTCBpcyBhbiBYTUwtYmFzZWQgb3BlbiBzcGVjaWZpY2F0aW9uIHRoYXQgZGVmaW5lcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UKLWRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlCi1wcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yCi1hdmFpbGFibGUgV2ViIHNlcnZpY2VzLiZuYnNwOyBBIFdTSUwgZG9jdW1lbnQgZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViCi1zaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLiZuYnNwO1NpbmNlIFdTSUwgZm9jdXNlcwotb24gZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnksIHRoZSBXU0lMIHNwZWNpZmljYXRpb24gY29tcGxlbWVudHMgVURESQotYnkgZmFjaWxpdGF0aW5nIHRoZSBkaXNjb3Zlcnkgb2Ygc2VydmljZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIFdlYiBzaXRlcwotdGhhdCBtYXkgbm90IGJlIGxpc3RlZCB5ZXQgaW4gYSBVRERJIHJlZ2lzdHJ5LiZuYnNwO0Egc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8eHJlZiBocmVmPSJjd3NpbHVkLmRpdGEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuCi1VRERJIGFuZCBXU0lMPC94cmVmPi4mbmJzcDsgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NJTCwgcmVmZXIgdG8gIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj48L3A+Ci08cD5XU0RMIGlzIGFuIFhNTC1iYXNlZCBvcGVuIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMgdG8KLWFuZCBpbnN0YW5jZXMgb2YgV2ViIHNlcnZpY2VzIG9uIHRoZSBuZXR3b3JrLiBJdCBpcyBleHRlbnNpYmxlLCBzbyBlbmRwb2ludHMKLWNhbiBiZSBkZXNjcmliZWQgcmVnYXJkbGVzcyBvZiB0aGUgbWVzc2FnZSBmb3JtYXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzIHRoYXQKLWFyZSB1c2VkIHRvIGNvbW11bmljYXRlLiBCdXNpbmVzc2VzIGNhbiBtYWtlIHRoZSBXU0RMIGRvY3VtZW50cyBmb3IgdGhlaXIKLVdlYiBzZXJ2aWNlcyBhdmFpbGFibGUgdGhvdWdoIFVEREksIFdTSUwsIG9yIGJ5IGJyb2FkY2FzdGluZyB0aGUgVVJMcyB0byB0aGVpcgotV1NETCB2aWEgZW1haWwgb3IgV2ViIHNpdGVzLiBXU0RMIGlzIGRlc2NyaWJlZCBhcyBhIHNlcGFyYXRlIHRvcGljIGluIHRoaXMKLWRvY3VtZW50YXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTREwsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvd3NkbDwveHJlZj48L3A+Ci08cD5TT0FQIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBmb3IgbWVzc2FnaW5nIG92ZXIgSFRUUCBhbmQgb3RoZXIgSW50ZXJuZXQKLXByb3RvY29scy4gSXQgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluCi1hIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJdCBpcyBiYXNlZCBvbiBYTUwgYW5kIGNvbnNpc3RzCi1vZiB0aHJlZSBwYXJ0czo8dWw+Ci08bGk+QW4gZW52ZWxvcGUgdGhhdCBkZWZpbmVzIGEgZnJhbWV3b3JrIGZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlCi1hbmQgaG93IHRvIHByb2Nlc3MgaXQuPC9saT4KLTxsaT5BIHNldCBvZiBlbmNvZGluZyBydWxlcyBmb3IgZXhwcmVzc2luZyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy48L2xpPgotPGxpPkEgY29udmVudGlvbiBmb3IgcmVwcmVzZW50aW5nIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgYW5kIHJlc3BvbnNlcy48L2xpPgotPC91bD5TT0FQIGVuYWJsZXMgdGhlIGJpbmRpbmcgYW5kIHVzYWdlIG9mIGRpc2NvdmVyZWQgV2ViIHNlcnZpY2VzIGJ5IGRlZmluaW5nCi1hIG1lc3NhZ2UgcGF0aCBmb3Igcm91dGluZyBtZXNzYWdlcy4gU09BUCBtYXkgYmUgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIKLXNlcnZpY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTT0FQIDEuMSAoU09BUCAxLjIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyksIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NPQVAiCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvU09BUDwveHJlZj48L3A+Ci08cD5GaWd1cmUgMi4gUmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwgYW5kIFdTREwuPC9wPgotPHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCwgYW5kIFdTREwuIgotaHJlZj0iLi4vaW1hZ2VzL3NvYXB1ZHdzLmdpZiI+PC9pbWFnZT4gPC9wPgotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBvciBTT0FQL0pNUy4gVGhlIFdlYiBzZXJ2aWNlIGlzIGRlc2NyaWJlZCBieSBhIFdTREwgZG9jdW1lbnQKLXRoYXQgaXMgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50IG1heSBiZSByZWZlcmVuY2VkIGJ5IHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFuZCBXU0lMIGRvY3VtZW50cy4KLVRoZXNlIGNvbnRhaW4gcG9pbnRlcnMgdG8gdGhlIFdlYiBzZXJ2aWNlJ3MgV1NETCBmaWxlcy48L3A+Ci08cD5UaGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgYW5kIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSBhcmUgb3V0bGluZXMKLW9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZSBwcm90b2NvbCAoU09BUC9IVFRQKSB0cmFmZmljCi1tdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLiBUaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbgotdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIGFuZCB0aGUgQXR0YWNobWVudAotUHJvZmlsZSAxLjAuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlciB0byB0aGUgV1MtSSBXZWIgc2l0ZSwgYW5kIHVuZGVyCi0gPHVpY29udHJvbD5SZXNvdXJjZXM8L3VpY29udHJvbD4gc2VsZWN0ICA8dWljb250cm9sPkRvY3VtZW50YXRpb248L3VpY29udHJvbD46IDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LndzLWkub3JnIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cud3MtaS5vcmc8L3hyZWY+PC9wPgotPHA+U2V2ZXJhbCBuZXcgV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZlbG9wbWVudAotZW52aXJvbm1lbnQuIFRoZXNlIGluY2x1ZGU6PGRsPjxkbGVudHJ5PgotPGR0PkpBWC1SUEM8L2R0PgotPGRkPkpBWC1SUEMgc3RhbmRzIGZvciA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcwotSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcwotKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQKLXVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiB0bwotV1NETCBhbmQgV1NETCB0byA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZwotYW5kIGRlcGxveWluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcGxhdGZvcm0uCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byB0aGUgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTAxIgotc2NvcGU9ImV4dGVybmFsIj5vZmZpY2lhbCBzcGVjaWZpY2F0aW9uczwveHJlZj4uPC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeT4KLTxkdD5KU1ItMTA5PC9kdD4KLTxkZD5KU1ItMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nCi1tb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlCi1KYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uCi1jb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIG9mZmljaWFsIHNwZWNpZmljYXRpb25zOiA8dWw+Ci08bGk+PHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTA5IiBzY29wZT0iZXh0ZXJuYWwiCi10eXBlPSJodG1sIj5KU1ItMTA5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9OTIxIiBzY29wZT0iZXh0ZXJuYWwiCi10eXBlPSJodG1sIj5KU1ItOTIxPC94cmVmPjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnk+Ci08ZHQ+V1MtUzwvZHQ+Ci08ZGQ+VGhlc2UgdG9vbHMgc3VwcG9ydCB0aGUgT0FTSVMgV2ViIFNlcnZpY2VzIFNlY3VyaXR5IDEuMCBzdGFuZGFyZC4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhpcyBzdGFuZGFyZCwgcmVmZXIgdG86PHVsPgotPGxpPjx4cmVmIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtc29hcC1tZXNzYWdlLXNlY3VyaXR5LTEuMC5wZGYiCi1zY29wZT0iZXh0ZXJuYWwiIHR5cGU9Imh0bWwiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogU09BUCBNZXNzYWdlIFNlY3VyaXR5Ci1WMS4wPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wLnBkZiIKLXNjb3BlPSJleHRlcm5hbCIgdHlwZT0iaHRtbCI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBVc2VybmFtZSBUb2tlbiBQcm9maWxlCi1WMS4wPC94cmVmPjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMC5wZGYiCi1zY29wZT0iZXh0ZXJuYWwiIHR5cGU9Imh0bWwiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogWC41MDkgVG9rZW4gUHJvZmlsZSBWMS4wPC94cmVmPjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PC9kbD48L3A+Ci08cD5XZWIgc2VydmljZXMgdG9vbGluZyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHNwZWNpZmljYXRpb25zOjwvcD4KLTx0YWJsZT4KLTx0Z3JvdXAgY29scz0iMiI+PGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9Ijk1KiIvPjxjb2xzcGVjIGNvbG5hbWU9ImNvbDIiCi1jb2x3aWR0aD0iMTA0KiIvPgotPHRoZWFkPgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIiB2YWxpZ249InRvcCI+VGVjaG5vbG9neSBvciBzcGVjaWZpY2F0aW9uPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIiB2YWxpZ249InRvcCI+VmVyc2lvbiBvciBsZXZlbCBzdXBwb3J0ZWQ8L2VudHJ5PgotPC9yb3c+Ci08L3RoZWFkPgotPHRib2R5PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPlRyYW5zcG9ydHM8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5IVFRQL0hUVFBTPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4wIGFuZCB2MS4xPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5KTVM8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5NZXNzYWdpbmc8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5TT0FQIHNwZWNpZmljYXRpb248L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjE8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPlNPQVAgQXR0YWNoZW1lbnRzPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IG5hbWVlbmQ9ImNvbDIiIG5hbWVzdD0iY29sMSI+PGI+RGVzY3JpcHRpb248L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5VRERJPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52Mi4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XU0RMPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4xPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XU0lMPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPlNlY3VyaXR5PC9iPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1MtU2VjdXJpdHk8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPk9BU0lTIFN0YW5kYXJkIDEuMDwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5JbmVyb3BlcmFiaWxpdHk8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XUy1JIEJhc2ljIFByb2ZpbGU8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjEuMS4yPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+MS4wLjM8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTLUkgQXR0YWNobWVudHMgUHJvZmlsZTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+MS4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj48Yj5PdGhlciBTdGFuZGFyZHM8L2I+PC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkpBWC1SUEM8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjAgZm9yIEoyRUUgMS4zLCB2MS4xIGZvciBKMkVFIDEuNCBhbmQgSmF2YSBFRSAxLjU8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkpTUiAxMDk8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjwvZW50cnk+Ci08L3Jvdz4KLTwvdGJvZHk+Ci08L3Rncm91cD4KLTwvdGFibGU+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3Npb3Zlci5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotKFdTLUkpPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzdhMGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBzdGFuZGFyZHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHN0YW5kYXJkcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jc29hcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzaWwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9janNyMTA5Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0id2Vic2VydmljZXNzdGFuZGFyZHMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ3ZWJzZXJ2aWNlc3N0YW5kYXJkcyI+PGEgbmFtZT0id2Vic2VydmljZXNzdGFuZGFyZHMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2gxPgotCi0KLQotPGRpdj48cD5PbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMKLW9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMKLXRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzCi1wcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbgotU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkKLW9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLjwvcD4KLQotPHA+VGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgcGxheSBrZXkgcm9sZXMgaW4gV2ViIHNlcnZpY2VzOiBVbml2ZXJzYWwgRGVzY3JpcHRpb24sCi1EaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIChVRERJKSwgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSwKLVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSwgU09BUCwgYW5kIFdlYiBTZXJ2aWNlcyBJbnRlcm9wZXJhYmlsaXR5Ci0oV1MtSSkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGFuZGFyZHMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAyLjwvcD4KLQotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG9wZW4sIHBsYXRmb3JtLWluZGVwZW5kZW50IHN0YW5kYXJkcyB0aGF0Ci1lbmFibGUgYnVzaW5lc3NlcyB0byBzaGFyZSBpbmZvcm1hdGlvbiBpbiBhIGdsb2JhbCBidXNpbmVzcyByZWdpc3RyeSwgZGlzY292ZXIKLXNlcnZpY2VzIG9uIHRoZSByZWdpc3RyeSwgYW5kIGRlZmluZSBob3cgdGhleSBpbnRlcmFjdCBvdmVyIHRoZSBJbnRlcm5ldC4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREksIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnPC9hPjwvcD4KLQotPHA+V1NJTCBpcyBhbiBYTUwtYmFzZWQgb3BlbiBzcGVjaWZpY2F0aW9uIHRoYXQgZGVmaW5lcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UKLWRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlCi1wcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yCi1hdmFpbGFibGUgV2ViIHNlcnZpY2VzLsKgIEEgV1NJTCBkb2N1bWVudCBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIKLXNpdGUgd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuwqBTaW5jZSBXU0lMIGZvY3VzZXMKLW9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGNvbXBsZW1lbnRzIFVEREkKLWJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiBXZWIgc2l0ZXMKLXRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS7CoEEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8YSBocmVmPSJjd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+LsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTSUwsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwvYT48L3A+Ci0KLTxwPldTREwgaXMgYW4gWE1MLWJhc2VkIG9wZW4gc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcyB0bwotYW5kIGluc3RhbmNlcyBvZiBXZWIgc2VydmljZXMgb24gdGhlIG5ldHdvcmsuIEl0IGlzIGV4dGVuc2libGUsIHNvIGVuZHBvaW50cwotY2FuIGJlIGRlc2NyaWJlZCByZWdhcmRsZXNzIG9mIHRoZSBtZXNzYWdlIGZvcm1hdHMgb3IgbmV0d29yayBwcm90b2NvbHMgdGhhdAotYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIEJ1c2luZXNzZXMgY2FuIG1ha2UgdGhlIFdTREwgZG9jdW1lbnRzIGZvciB0aGVpcgotV2ViIHNlcnZpY2VzIGF2YWlsYWJsZSB0aG91Z2ggVURESSwgV1NJTCwgb3IgYnkgYnJvYWRjYXN0aW5nIHRoZSBVUkxzIHRvIHRoZWlyCi1XU0RMIHZpYSBlbWFpbCBvciBXZWIgc2l0ZXMuIFdTREwgaXMgZGVzY3JpYmVkIGFzIGEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NETCwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL3dzZGw8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJwIj5TT0FQIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBmb3IgbWVzc2FnaW5nIG92ZXIgSFRUUCBhbmQgb3RoZXIgSW50ZXJuZXQKLXByb3RvY29scy4gSXQgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluCi1hIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJdCBpcyBiYXNlZCBvbiBYTUwgYW5kIGNvbnNpc3RzCi1vZiB0aHJlZSBwYXJ0czo8dWw+Ci08bGk+QW4gZW52ZWxvcGUgdGhhdCBkZWZpbmVzIGEgZnJhbWV3b3JrIGZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlCi1hbmQgaG93IHRvIHByb2Nlc3MgaXQuPC9saT4KLQotPGxpPkEgc2V0IG9mIGVuY29kaW5nIHJ1bGVzIGZvciBleHByZXNzaW5nIGluc3RhbmNlcyBvZiBhcHBsaWNhdGlvbi1kZWZpbmVkCi1kYXRhIHR5cGVzLjwvbGk+Ci0KLTxsaT5BIGNvbnZlbnRpb24gZm9yIHJlcHJlc2VudGluZyByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIGFuZCByZXNwb25zZXMuPC9saT4KLQotPC91bD4KLVNPQVAgZW5hYmxlcyB0aGUgYmluZGluZyBhbmQgdXNhZ2Ugb2YgZGlzY292ZXJlZCBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcKLWEgbWVzc2FnZSBwYXRoIGZvciByb3V0aW5nIG1lc3NhZ2VzLiBTT0FQIG1heSBiZSB1c2VkIHRvIHF1ZXJ5IFVEREkgZm9yIFdlYgotc2VydmljZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFNPQVAgMS4xIChTT0FQIDEuMiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQotV2ViIHNlcnZpY2VzIHRvb2xzKSwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NPQVAiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL1NPQVA8L2E+PC9kaXY+Ci0KLTxwPkZpZ3VyZSAyLiBSZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCBhbmQgV1NETC48L3A+Ci0KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3NvYXB1ZHdzLmdpZiIgYWx0PSJGaWd1cmUgMiBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwsIGFuZCBXU0RMLiIgLz4gPC9wPgotCi08cD5BIHNlcnZpY2UgcHJvdmlkZXIgaG9zdHMgYSBXZWIgc2VydmljZSBhbmQgbWFrZXMgaXQgYWNjZXNzaWJsZSB1c2luZyBwcm90b2NvbHMKLXN1Y2ggYXMgU09BUC9IVFRQIG9yIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudAotdGhhdCBpcyBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYW5kIFdTSUwgZG9jdW1lbnRzLgotVGhlc2UgY29udGFpbiBwb2ludGVycyB0byB0aGUgV2ViIHNlcnZpY2UncyBXU0RMIGZpbGVzLjwvcD4KLQotPHA+VGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIGFuZCBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgYXJlIG91dGxpbmVzCi1vZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UgcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYwotbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4gVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24KLXRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCBhbmQgdGhlIEF0dGFjaG1lbnQKLVByb2ZpbGUgMS4wLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIgdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlcgotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJlc291cmNlczwvc3Bhbj4gc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Eb2N1bWVudGF0aW9uPC9zcGFuPjogPGEgaHJlZj0iaHR0cDovL3d3dy53cy1pLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cud3MtaS5vcmc8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJwIj5TZXZlcmFsIG5ldyBXZWIgc2VydmljZXMgc3RhbmRhcmRzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIGRldmVsb3BtZW50Ci1lbnZpcm9ubWVudC4gVGhlc2UgaW5jbHVkZTo8ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+SkFYLVJQQzwvZHQ+Ci0KLTxkZD5KQVgtUlBDIHN0YW5kcyBmb3IgSmF2YeKEoiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8KLVdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLWFuZCBkZXBsb3lpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwMSIgdGFyZ2V0PSJfYmxhbmsiPm9mZmljaWFsIHNwZWNpZmljYXRpb25zPC9hPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KU1ItMTA5PC9kdD4KLQotPGRkPkpTUi0xMDkgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lcyB0aGUgcHJvZ3JhbW1pbmcKLW1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUKLUphdmEgRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24KLWNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycgaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbnM6IDx1bD4KLTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDkiIHRhcmdldD0iX2JsYW5rIj5KU1ItMTA5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHRhcmdldD0iX2JsYW5rIj5KU1ItOTIxPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5XUy1TPC9kdD4KLQotPGRkPlRoZXNlIHRvb2xzIHN1cHBvcnQgdGhlIE9BU0lTIFdlYiBTZXJ2aWNlcyBTZWN1cml0eSAxLjAgc3RhbmRhcmQuIEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoaXMgc3RhbmRhcmQsIHJlZmVyIHRvOjx1bD4KLTxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAucGRmIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBTT0FQIE1lc3NhZ2UgU2VjdXJpdHkgVjEuMDwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogVXNlcm5hbWUgVG9rZW4gUHJvZmlsZSBWMS4wPC9hPjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogWC41MDkgVG9rZW4gUHJvZmlsZSBWMS4wPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTxwPldlYiBzZXJ2aWNlcyB0b29saW5nIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNhdGlvbnM6PC9wPgotCi0KLTxkaXYgY2xhc3M9InRhYmxlbm9ib3JkZXIiPjx0YWJsZSBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgZnJhbWU9ImJvcmRlciIgYm9yZGVyPSIxIiBydWxlcz0iYWxsIj4KLTx0aGVhZCBhbGlnbj0ibGVmdCI+Ci08dHI+Ci08dGggdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGlkPSJOMTAxQjQiPlRlY2hub2xvZ3kgb3Igc3BlY2lmaWNhdGlvbjwvdGg+Ci0KLTx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaWQ9Ik4xMDFCQyI+VmVyc2lvbiBvciBsZXZlbCBzdXBwb3J0ZWQ8L3RoPgotCi08L3RyPgotCi08L3RoZWFkPgotCi08dGJvZHk+Ci08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPlRyYW5zcG9ydHM8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkhUVFAvSFRUUFM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjAgYW5kIHYxLjE8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpNUzwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+Jm5ic3A7PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5NZXNzYWdpbmc8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPlNPQVAgc3BlY2lmaWNhdGlvbjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+U09BUCBBdHRhY2hlbWVudHM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCBjb2xzcGFuPSIyIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMUI0IE4xMDFCQyAiPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPlVEREk8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYyLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTREw8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjE8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTSUw8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPlNlY3VyaXR5PC9zdHJvbmc+PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDcuNzM4NjkzNDY3MzM2NjklIiBoZWFkZXJzPSJOMTAxQjQgIj5XUy1TZWN1cml0eTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+T0FTSVMgU3RhbmRhcmQgMS4wPC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5JbmVyb3BlcmFiaWxpdHk8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLUkgQmFzaWMgUHJvZmlsZTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+MS4xLjI8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjAuMzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1MtSSBBdHRhY2htZW50cyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPjxzdHJvbmc+T3RoZXIgU3RhbmRhcmRzPC9zdHJvbmc+PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4mbmJzcDs8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpBWC1SUEM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjAgZm9yIEoyRUUgMS4zLCB2MS4xIGZvciBKMkVFIDEuNCBhbmQgSmF2YSBFRSAxLjU8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpTUiAxMDk8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTwvdGJvZHk+Ci0KLTwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3NvYXAuaHRtbCI+U09BUDwvYT48L3N0cm9uZz48YnIgLz4KLVNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiBTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwiPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvc3Ryb25nPjxiciAvPgotPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaWwuaHRtbCI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGlzIGEgc2VydmljZSBkaXNjb3ZlcnkgbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4gV2hlbiB5b3UgZGlzY292ZXIgV2ViIHNlcnZpY2VzIHdpdGggVURESSwgeW91IGdvIHRvIGEgY2VudHJhbGl6ZWQgcmVnaXN0cnkuwqAgV1NJTCBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jamF4cnBjLmh0bWwiPkpBWC1SUEM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1KQVgtUlBDIHN0YW5kcyBmb3IgSmF2YSBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMgSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcyAoQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdCB1c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8gV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZCBjbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMgb24gb3RoZXIgc3lzdGVtcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9janNyMTA5Lmh0bWwiPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1KU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSmF2YSBFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpPC9hPjwvc3Ryb25nPjxiciAvPgotV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3Npb3Zlci5odG1sIiB0aXRsZT0iV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiI+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkKLShXUy1JKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgdGl0bGU9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxNjc2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3N0b3Bkb3duLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08c2hvcnRkZXNjPldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQKLWFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT50b3AtZG93biBXZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dG9wLWRvd248L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCwgZmlyc3QgeW91IGRlc2lnbgotdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXZWIgc2VydmljZSBieSBjcmVhdGluZyBhIFdTREwgZmlsZS4gWW91IGNhbiBkbwotdGhpcyB1c2luZyB0aGUgV1NETCBFZGl0b3IuIFlvdSBjYW4gdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlCi10aGUgV2ViIHNlcnZpY2UgYW5kIHNrZWxldG9uIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY2xhc3NlcyB0byB3aGljaCB5b3UgY2FuIGFkZCB0aGUgcmVxdWlyZWQKLWNvZGUuPC9wPgotPHA+QWx0aG91Z2ggYm90dG9tLXVwIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IG1heSBiZSBmYXN0ZXIgYW5kIGVhc2llciwgZXNwZWNpYWxseQotaWYgeW91IGFyZSBuZXcgdG8gV2ViIHNlcnZpY2VzLCB0aGUgdG9wLWRvd24gYXBwcm9hY2ggaXMgdGhlIHJlY29tbWVuZGVkIHdheQotb2YgY3JlYXRpbmcgYSBXZWIgc2VydmljZS4gQnkgY3JlYXRpbmcgdGhlIFdTREwgZmlsZSBmaXJzdCB5b3Ugd2lsbCB1bHRpbWF0ZWx5Ci1oYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBXZWIgc2VydmljZSwgYW5kIGNhbiBlbGltaW5hdGUgaW50ZXJvcGVyYWJpbGl0eQotaXNzdWVzIHRoYXQgbWF5IGFyaXNlIHdoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYm90dG9tLXVwIG1ldGhvZC48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzYnRtdXAuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5M2NkZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0idG9wLWRvd24gV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCB0b3AtZG93biIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRvcC1kb3duIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgdG9wLWRvd24iIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2J0bXVwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyI+PGEgbmFtZT0iY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50Ci1hbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcKLWEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZS48L3A+Ci0KLTxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoLCBmaXJzdCB5b3UgZGVzaWduCi10aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYiBzZXJ2aWNlIGJ5IGNyZWF0aW5nIGEgV1NETCBmaWxlLiBZb3UgY2FuIGRvCi10aGlzIHVzaW5nIHRoZSBXU0RMIEVkaXRvci4gWW91IGNhbiB0aGVuIHVzZSB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0byBjcmVhdGUKLXRoZSBXZWIgc2VydmljZSBhbmQgc2tlbGV0b24gSmF2YeKEoiBjbGFzc2VzIHRvIHdoaWNoIHlvdSBjYW4gYWRkIHRoZSByZXF1aXJlZAotY29kZS48L3A+Ci0KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuIEJ5IGNyZWF0aW5nIHRoZSBXU0RMIGZpbGUgZmlyc3QgeW91IHdpbGwgdWx0aW1hdGVseQotaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgV2ViIHNlcnZpY2UsIGFuZCBjYW4gZWxpbWluYXRlIGludGVyb3BlcmFiaWxpdHkKLWlzc3VlcyB0aGF0IG1heSBhcmlzZSB3aGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIGJvdHRvbS11cCBtZXRob2QuPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzYnRtdXAuaHRtbCIgdGl0bGU9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLiI+Q3JlYXRpbmcgYm90dG9tLXVwIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgdGl0bGU9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9yb2xlcy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvcm9sZXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWU5OTg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9yb2xlcy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW1hZ2VzL3NvYXB1ZHdzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiNDJmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvX3YuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvX3YuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjZlMGU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L192LmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZjQ3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYzlmOTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAxNzoxNDo0NyBFRFQgMjAwOA0KLW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcj1vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJcbjEuMC40MDAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgyMmM2YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6MTQ6NDcgRURUIDIwMDgNCi1sdWNlbmU9MS45LjEudjIwMDgwMzA2MTgxMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4zLjEwMC52MjAwODA0MjU/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyNDU1My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAxNzoxNDo0NyBFRFQgMjAwOA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzcHJlZi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RscHJlZi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3N3aXpwcmVmLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNjM0MmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMWZhYjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjMiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICA8dG9jIGZpbGU9IndlYnNlcnZpY2VfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjY2OTkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbmF2PgotICA8bGluaz4KLSAgICA8bWFwIGZpbGU9IndlYnNlcnZpY2VfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOTUwNWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGh0bWwKLSAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSIoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3IiAvPgotPG1ldGEgbmFtZT0ic2VjdXJpdHkiIGNvbnRlbnQ9InB1YmxpYyIgLz4KLTxtZXRhIG5hbWU9IlJvYm90cyIgY29udGVudD0iaW5kZXgsZm9sbG93IiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBuYW1lPSJEQy5Gb3JtYXQiIGNvbnRlbnQ9IlhIVE1MIiAvPgotPCEtLSBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCBNYXRlcmlhbHMgUHJvcGVydHkgb2YgSUJNIC0tPgotPCEtLSBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0tPgotPCEtLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgcmVzdHJpY3RlZCBieSAtLT4KLTwhLS0gR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLiAtLT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImlibWRpdGEuY3NzIiAvPgotPHRpdGxlPkluZGV4PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkluZGV4PC9oMT4KLTxhIG5hbWU9IklEWDBfNDIiIGhyZWY9IiNJRFgxXzQyIj5CPC9hPgotPGEgbmFtZT0iSURYMF80OSIgaHJlZj0iI0lEWDFfNDkiPkk8L2E+Ci08YSBuYW1lPSJJRFgwXzRBIiBocmVmPSIjSURYMV80QSI+SjwvYT4KLTxhIG5hbWU9IklEWDBfNTAiIGhyZWY9IiNJRFgxXzUwIj5QPC9hPgotPGEgbmFtZT0iSURYMF81MyIgaHJlZj0iI0lEWDFfNTMiPlM8L2E+Ci08YSBuYW1lPSJJRFgwXzU0IiBocmVmPSIjSURYMV81NCI+VDwvYT4KLTxhIG5hbWU9IklEWDBfNTUiIGhyZWY9IiNJRFgxXzU1Ij5VPC9hPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80MiIgaHJlZj0iI0lEWDBfNDIiPkI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+Ym90dG9tLXVwIFdlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzQ5IiBocmVmPSIjSURYMF80OSI+STwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5pbnRlcm9wZXJhYmlsaXR5Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuaHRtbCNjd3Npb3ZlciI+V2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80QSIgaHJlZj0iI0lEWDBfNEEiPko8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+SkFYLVJQQwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIj5XZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5odG1sI2Nqc3IxMDkiPkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSI+SlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb248L2E+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81MCIgaHJlZj0iI0lEWDBfNTAiPlA8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+cHJlZmVyZW5jZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiPldlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTMiIGhyZWY9IiNJRFgwXzUzIj5TPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPlNPQVAKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTQiIGhyZWY9IiNJRFgwXzU0Ij5UPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnRvcC1kb3duIFdlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiPmNyZWF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NSIgaHJlZj0iI0lEWDBfNTUiPlU8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+VURESQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBXU0lMPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzYnRtdXAuaHRtbCNjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj5ib3R0b20tdXA8L2E+Ci08L2xpPgotPGxpPmNyZWF0aW5nCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdG92ZXJ3cy5odG1sI3RvdmVyd3MiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCN0d3NpY29tcGx5Ij5pbnRlcm9wZXJhYmlsaXR5IGNvbXBsaWFuY2U8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5Ij5KYXZhIHNwZWNpZmljYXRpb24gcmVxdWVzdHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIj5KQVgtUlBDPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3MuaHRtbCNjd3MiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiPnByZWZlcmVuY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIj5TT0FQPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCN3ZWJzZXJ2aWNlc3N0YW5kYXJkcyI+c3RhbmRhcmRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sI2N3c2lud3NhIj50b29scyBvdmVydmlldzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyI+dG9wLWRvd248L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2RsLmh0bWwjY3dzZGwiPldTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIj5XU0RMIHJlZmVyZW5jZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCI+V1NJTDwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiPnRyYWZmaWMgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0RMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCNjd3NkbCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIj5yZWZlcmVuY2U8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NJCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzaWNvbXBseS5odG1sI3R3c2ljb21wbHkiPnNldHRpbmcgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0lMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBVRERJPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOGRlODAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzLmh0bWwjY3dzIiB0aXRsZT0iV2ViIHNlcnZpY2VzIG92ZXJ2aWV3Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic3RhbmRhcmRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCN3ZWJzZXJ2aWNlc3N0YW5kYXJkcyIgdGl0bGU9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldTREwgcmVmZXJlbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcndzZGwuaHRtbCNyd3NkbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iU09BUCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCNjc29hcCIgdGl0bGU9IlNPQVAiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0lMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NpbC5odG1sI2N3c2lsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSkFYLVJQQyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY2pheHJwYy5odG1sI2NqYXhycGMiIHRpdGxlPSJKQVgtUlBDIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSIgdGl0bGU9IkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0b3AtZG93biI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImJvdHRvbS11cCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzYnRtdXAuaHRtbCNjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIiB0aXRsZT0iQ3JlYXRpbmcgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRvb2xzIG92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sI2N3c2lud3NhIiB0aXRsZT0iVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InByZWZlcmVuY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NwcmVmLmh0bWwjc2V0dGluZ3dlYnNlcnZpY2VzcHJlZmVyZW5jZXMiIHRpdGxlPSJTZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIvPgotICAgICAgPGVudHJ5IGtleXdvcmQ9IkF4aXMiPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmL3JheGlzcHJlZi5odG1sI2F4aXNlbWl0dGVycHJlZmVyZW5jZXMiIHRpdGxlPSJBeGlzIGVtaXR0ZXIgcHJlZmVyZW5jZXMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0id2l6YXJkcyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWYvcndzd2l6cHJlZi5odG1sI3dlYnNlcnZpY2Vzd2l6YXJkc2Jhc2ljcHJlZmVyZW5jZXMiIHRpdGxlPSJXZWIgc2VydmljZXMgd2l6YXJkcyBiYXNpYyBwcmVmZXJlbmNlcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZi9yd3NkbHByZWYuaHRtbCN3c2RsZmlsZXNwcmVmZXJlbmNlcyIgdGl0bGU9IldTREwgZmlsZSBwcmVmZXJlbmNlcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJXUy1JIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZi9yc2VydnBvbHByZWYuaHRtbCNzZXJ2aWNlcG9saWNpZXNwcmVmZXJlbmNlcyIgdGl0bGU9IldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJwcmVmZXJlbmNlcyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWYvcnNlcnZwb2xwcmVmLmh0bWwjc2VydmljZXBvbGljaWVzcHJlZmVyZW5jZXMiIHRpdGxlPSJXUy1JIGNvbXBsaWFuY2UgcHJlZmVyZW5jZXMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RvdmVyd3MuaHRtbCN0b3ZlcndzIiB0aXRsZT0iRGV2ZWxvcGluZyBXZWIgc2VydmljZXMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTREwgZmlsZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCNjd3NkbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZWZlcmVuY2UiPgotICAgICAgPHRvcGljIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iU09BUCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIiB0aXRsZT0iU09BUCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXU0lMIGZpbGVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lsLmh0bWwjY3dzaWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iVURESSI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFdTSUwiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXU0lMIj4KLSAgICA8ZW50cnkga2V5d29yZD0icmVsYXRpb25zaGlwIHdpdGggVURESSI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWx1ZC5odG1sI2N3c2lsdWQiIHRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkpBWC1SUEMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIiB0aXRsZT0iSkFYLVJQQyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5IiB0aXRsZT0iSlNSIDEwOSAtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlcyIvPgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iSlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb24iPgotICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSIgdGl0bGU9IkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiLz4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuaHRtbCNjd3Npb3ZlciIgdGl0bGU9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKSIvPgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iaW50ZXJvcGVyYWJpbGl0eSI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuaHRtbCNjd3Npb3ZlciIgdGl0bGU9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJ0b3AtZG93biBXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJib3R0b20tdXAgV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0icHJlZmVyZW5jZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c3ByZWYuaHRtbCNzZXR0aW5nd2Vic2VydmljZXNwcmVmZXJlbmNlcyIgdGl0bGU9IlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzIi8+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iQXhpcyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWYvcmF4aXNwcmVmLmh0bWwjYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyIgdGl0bGU9IkF4aXMgZW1pdHRlciBwcmVmZXJlbmNlcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJ3aXphcmRzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZi9yd3N3aXpwcmVmLmh0bWwjd2Vic2VydmljZXN3aXphcmRzYmFzaWNwcmVmZXJlbmNlcyIgdGl0bGU9IldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IldTREwiPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmL3J3c2RscHJlZi5odG1sI3dzZGxmaWxlc3ByZWZlcmVuY2VzIiB0aXRsZT0iV1NETCBmaWxlIHByZWZlcmVuY2VzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IldTLUkiPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmL3JzZXJ2cG9scHJlZi5odG1sI3NlcnZpY2Vwb2xpY2llc3ByZWZlcmVuY2VzIiB0aXRsZT0iV1MtSSBjb21wbGlhbmNlIHByZWZlcmVuY2VzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3Y2M3YWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXZWIgU2VydmljZXMgVUkKLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFmYWI4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMyI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLSAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgIDx0b2MgZmlsZT0id2Vic2VydmljZV90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sIi8+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yYXhpc3ByZWYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yYXhpc3ByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlMDJhYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+QXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzPC90aXRsZT4NCi08c2hvcnRkZXNjPlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nDQotcHJlZmVyZW5jZXMgdXNlZCB3aGVuIGNyZWF0aW5nIG9yIGNvbnN1bWluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5wcmVmZXJlbmNlczxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPGluZGV4dGVybT5BeGlzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5XU0RMMkphdmE8L3RpdGxlPjxkbD48ZGxlbnRyeT4NCi08ZHQ+R2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzOjwvZHQ+DQotPGRkPkJ5IGRlZmF1bHQsIFdTREwySmF2YSBvbmx5IGdlbmVyYXRlcyBjb2RlIGZvciB0aG9zZSBlbGVtZW50cyBpbiB0aGUgV1NETA0KLWZpbGUgdGhhdCBhcmUgcmVmZXJlbmNlZC4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGhvdyByZWZlcmVuY2luZw0KLXdvcmtzIHJlZmVyIHRvIHRoZSBBeGlzIHJlZmVyZW5jZSBndWlkZTogPHhyZWYgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpcy9qYXZhL3JlZmVyZW5jZS5odG1sIg0KLXNjb3BlPSJleHRlcm5hbCI+PC94cmVmPjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YWRhdGE6PC9kdD4NCi08ZGQ+SWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiBXU0RMMkphdmEgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBoZWxwZXIgY2xhc3MNCi10aGF0IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgaXQgaW4gdGhlIHNrZWxldG9uLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5QcmVmZXJzIGJ1aWxkaW5nIGJlYW5zIHRvIHN0cmFpZ2h0IGFycmF5cyBmb3Igd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXM6PC9kdD4NCi08ZGQ+VGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbWFwIHRoaXMgWE1MIGNvbnN0cnVjdDogPGNvZGVibG9jaz4mbHQ7ZWxlbWVudCBuYW1lPSJhcnJheSI+DQotICZsdDtjb21wbGV4VHlwZT4NCi0gICZsdDtzZXF1ZW5jZT4NCi0gICAmbHQ7ZWxlbWVudCBuYW1lPSJpdGVtIiB0eXBlPSJ4czpzdHJpbmciLz4NCi0gICZsdDsvc2VxdWVuY2U+DQotICZsdDsvY29tcGxleFR5cGU+DQotJmx0Oy9lbGVtZW50PjwvY29kZWJsb2NrPnRvIGEgSmF2YSBTdHJpbmcgYXJyYXkgKFN0cmluZ1tdKS4gSWYgeW91IHdvdWxkIHJhdGhlcg0KLWEgc3BlY2lmaWMgSmF2YUJlYW4gY2xhc3MgKEFycmF5T2ZTdHJpbmcpIGJlIGdlbmVyYXRlZCBmb3IgdGhlc2UgdHlwZXMgb2YNCi1zY2hlbWFzLCBzZWxlY3QgdGhpcyBvcHRpb24uIDwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQ6PC9kdD4NCi08ZGQ+VGhpcyBpbmRpY2F0ZXMgaG93IHRvIGRlcGxveSB0aGUgc2VydmVyIGltcGxlbWVudGF0aW9uLiBBcHBsaWNhdGlvbiB1c2VzDQotb25lIGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYWxsIHJlcXVlc3RzLiBSZXF1ZXN0IGNyZWF0ZXMNCi1hIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggcmVxdWVzdC4gU2Vzc2lvbiBjcmVhdGVzDQotYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBlYWNoIHNlc3Npb24uPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0PlRpbWVvdXQgaW4gc2Vjb25kczo8L2R0Pg0KLTxkZD5UaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9kZD4NCi08L2RsZW50cnk+PC9kbD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPkphdmEyV1NETDwvdGl0bGU+PGRsPjxkbGVudHJ5Pg0KLTxkdD5Mb29rIGZvciBhbGxvd2VkIG1ldGhvZHMgaW4gaW5oZXJpdGVkIGNsYXNzOjwvZHQ+DQotPGRkPklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQNCi1jbGFzc2VzIHRvIGRldGVybWluZSB0aGUgbGlzdCBvZiBtZXRob2RzIHRvIGV4cG9ydCBpbnRvIHRoZSBXU0RMIGZpbGUuIDwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcNCi1jb2RlOjwvZHQ+DQotPGRkPklmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZQ0KLXR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLjwvZGQ+DQotPC9kbGVudHJ5PjwvZGw+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMzFhYjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JheGlzcHJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuIiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgQXhpcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMsIEF4aXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90d3NwcmVmLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkF4aXMgZW1pdHRlciBwcmVmZXJlbmNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyI+PGEgbmFtZT0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIEF4aXMgRW1pdHRlciBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBmb2xsb3dpbmcKLXByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+V1NETDJKYXZhPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+R2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzOjwvZHQ+Ci0KLTxkZD5CeSBkZWZhdWx0LCBXU0RMMkphdmEgb25seSBnZW5lcmF0ZXMgY29kZSBmb3IgdGhvc2UgZWxlbWVudHMgaW4gdGhlIFdTREwKLWZpbGUgdGhhdCBhcmUgcmVmZXJlbmNlZC4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGhvdyByZWZlcmVuY2luZwotd29ya3MgcmVmZXIgdG8gdGhlIEF4aXMgcmVmZXJlbmNlIGd1aWRlOiA8YSBocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzL2phdmEvcmVmZXJlbmNlLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzL2phdmEvcmVmZXJlbmNlLmh0bWw8L2E+PC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+RW1pdHMgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGFkYXRhOjwvZHQ+Ci0KLTxkZD5JZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIFdTREwySmF2YSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcwotdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIGl0IGluIHRoZSBza2VsZXRvbi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5QcmVmZXJzIGJ1aWxkaW5nIGJlYW5zIHRvIHN0cmFpZ2h0IGFycmF5cyBmb3Igd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXM6PC9kdD4KLQotPGRkPlRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hcCB0aGlzIFhNTCBjb25zdHJ1Y3Q6IDxwcmU+Jmx0O2VsZW1lbnQgbmFtZT0iYXJyYXkiJmd0OwotICZsdDtjb21wbGV4VHlwZSZndDsKLSAgJmx0O3NlcXVlbmNlJmd0OwotICAgJmx0O2VsZW1lbnQgbmFtZT0iaXRlbSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICZsdDsvc2VxdWVuY2UmZ3Q7Ci0gJmx0Oy9jb21wbGV4VHlwZSZndDsKLSZsdDsvZWxlbWVudCZndDs8L3ByZT4KLXRvIGEgSmF2YSBTdHJpbmcgYXJyYXkgKFN0cmluZ1tdKS4gSWYgeW91IHdvdWxkIHJhdGhlcgotYSBzcGVjaWZpYyBKYXZhQmVhbiBjbGFzcyAoQXJyYXlPZlN0cmluZykgYmUgZ2VuZXJhdGVkIGZvciB0aGVzZSB0eXBlcyBvZgotc2NoZW1hcywgc2VsZWN0IHRoaXMgb3B0aW9uLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQ6PC9kdD4KLQotPGRkPlRoaXMgaW5kaWNhdGVzIGhvdyB0byBkZXBsb3kgdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4gQXBwbGljYXRpb24gdXNlcwotb25lIGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYWxsIHJlcXVlc3RzLiBSZXF1ZXN0IGNyZWF0ZXMKLWEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCByZXF1ZXN0LiBTZXNzaW9uIGNyZWF0ZXMKLWEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCBzZXNzaW9uLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlRpbWVvdXQgaW4gc2Vjb25kczo8L2R0PgotCi08ZGQ+VGhlIGRlZmF1bHQgaXMgNDUuIFVzZSAtMSB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkphdmEyV1NETDwvaDQ+PGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPkxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3M6PC9kdD4KLQotPGRkPklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQKLWNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gZXhwb3J0IGludG8gdGhlIFdTREwgZmlsZS4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+QW5hbHl6ZSB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZSB0byBKQVgtUlBDIGJlZm9yZSBnZW5lcmF0aW5nCi1jb2RlOjwvZHQ+Ci0KLTxkZD5JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUKLXR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiB0aXRsZT0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxMzcyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0ic2VydmljZXBvbGljaWVzcHJlZmVyZW5jZXMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlczwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgU2VydmljZSBwb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHlvdXINCi1sZXZlbCBvZiBjb21wbGlhbmNlIHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSQ0KLUF0dGFjaGVtZW50IFByb2ZpbGUgKEFQKS4gVGhleSBjYW4gYmUgZm91bmQgb24gdGhlIFNlcnZpY2UgUG9saWNpZXMgcHJlZmVyZW5jZXMNCi1wYWdlLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0icnNlcnZwb2xwcmVmfDF8cHJlZmVyZW5jZXNXZWJzZXJ2aWNlc1dTLUkiIHN0YXR1cz0ibmV3Ij5wcmVmZXJlbmNlczxpbmRleHRlcm0+V2ViDQotc2VydmljZXM8aW5kZXh0ZXJtPldTLUk8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtIGtleXJlZj0icnNlcnZwb2xwcmVmfDJ8V2Vic2VydmljZXNwcmVmZXJlbmNlc1dTLUkiDQotc3RhdHVzPSJuZXciPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldTLUk8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtIGtleXJlZj0icnNlcnZwb2xwcmVmfDN8V1MtSXByZWZlcmVuY2VzIiBzdGF0dXM9ImNoYW5nZWQiPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+cHJlZmVyZW5jZXM8L2luZGV4dGVybT48L2luZGV4dGVybQ0KLT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlNldHRpbmcgV1MtSSBwcmVmZXJlbmNlczwvdGl0bGU+PHA+V1MtSSBCYXNpYyBQcm9maWxlIGlzIGENCi1vdXRsaW5lIG9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZSBwcm90b2NvbCAoU09BUC9IVFRQKQ0KLXRyYWZmaWMgbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4gVGhlIFdlYiBzZXJ2aWNlcyBXUy1JDQotdmFsaWRhdGlvbiB0b29scyBjdXJyZW50bHkgc3VwcG9ydCBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkNCi1TU0JQKSB3aGljaCBidWlsZHMgb24gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUNCi0xLjAgKFdTLUkgQVApLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIgdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZA0KLXVuZGVyICA8dWljb250cm9sPkRlbGl2ZXJhYmxlczwvdWljb250cm9sPiBzZWxlY3QgIDx1aWNvbnRyb2w+QmFzaWMgUHJvZmlsZTwvdWljb250cm9sPi48L3A+PHA+Rm9yDQotbW9yZSBpbmZvcm1hdGlvbiBvbiBXUy1JLCByZWZlciB0bzogPHhyZWYgaHJlZj0iaHR0cDovL3d3dy53cy1pLm9yZy8iIHNjb3BlPSJleHRlcm5hbCI+PC94cmVmPjwvcD48cD5XUy1JDQotcHJlZmVyZW5jZXMgY2FuIGJlIHNldCBhdCB0aGUgd29ya3NwYWNlIGxldmVsIGJ5IG9wZW5pbmcgdGhlIFByZWZlcmVuY2VzIG5vdGVib29rLA0KLW9yIGF0IHRoZSBwcm9qZWN0IGxldmVsIGJ5IHJpZ2h0LWNsaWNraW5nIG9uIGEgcHJvamVjdCBhbmQgc2VsZWN0aW5nIFByZWZlcmVuY2VzLjwvcD48cD5Zb3UNCi1jYW4gc2VsZWN0IHRoZSBXUy1JIEFQIDEuMCBvciBXUy1JIEJQIDEuMSArIFNTQlAgMS4wIHByb2ZpbGVzIGFuZCBjaG9vc2UgZm9yDQotdGhlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBpZ25vcmUsIHN1Z2dlc3QsIG9yIHJlcXVpcmUgY29tcGxpYW5jZS4gU3VnZ2VzdA0KLXdpbGwgZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIHlvdSBhdHRlbXB0IHRvIGdlbmVyYXRlIG5vbi1jb21wbGlhbnQgY29kZSwgd2hlcmVhcw0KLXJlcXVpcmUgd2lsbCBwcmV2ZW50IHlvdSBmcm9tIGdlbmVyYXRpbmcgbm9uLWNvbXBsaWFudCBjb2RlLjwvcD48bm90ZT5JZiB5b3UNCi1jaGFuZ2UgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSB3aGlsZSBXUy1JIGluY29tcGxpYW5jZXMgYXJlIGxpc3RlZCBpbg0KLXRoZSBUYXNrIHZpZXcsIHRoZSBUYXNrIHZpZXcgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSB1cGRhdGVkLiBUaGUgd29ya3NwYWNlDQotbXVzdCBiZSByZXZhbGlkYXRlZCBiZWZvcmUgdGhlIHdhcm5pbmdzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUYXNrIHZpZXcuPC9ub3RlPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWFlZWI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV1MtSSBjb21wbGlhbmNlIHByZWZlcmVuY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBTZXJ2aWNlIHBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3QgeW91ciBsZXZlbCBvZiBjb21wbGlhbmNlIHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSSBBdHRhY2hlbWVudCBQcm9maWxlIChBUCkuIFRoZXkgY2FuIGJlIGZvdW5kIG9uIHRoZSBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBTZXJ2aWNlIHBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3QgeW91ciBsZXZlbCBvZiBjb21wbGlhbmNlIHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSSBBdHRhY2hlbWVudCBQcm9maWxlIChBUCkuIFRoZXkgY2FuIGJlIGZvdW5kIG9uIHRoZSBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UuIiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgV1MtSSwgV2ViIHNlcnZpY2VzLCBpbnRlcm9wZXJhYmlsaXR5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgV1MtSSwgV2ViIHNlcnZpY2VzLCBpbnRlcm9wZXJhYmlsaXR5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InNlcnZpY2Vwb2xpY2llc3ByZWZlcmVuY2VzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V1MtSSBjb21wbGlhbmNlIHByZWZlcmVuY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJzZXJ2aWNlcG9saWNpZXNwcmVmZXJlbmNlcyI+PGEgbmFtZT0ic2VydmljZXBvbGljaWVzcHJlZmVyZW5jZXMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBTZXJ2aWNlIHBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3QgeW91cgotbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAoU1NCUCkgYW5kIFdTLUkKLUF0dGFjaGVtZW50IFByb2ZpbGUgKEFQKS4gVGhleSBjYW4gYmUgZm91bmQgb24gdGhlIFNlcnZpY2UgUG9saWNpZXMgcHJlZmVyZW5jZXMKLXBhZ2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2V0dGluZyBXUy1JIHByZWZlcmVuY2VzPC9oND48cD5XUy1JIEJhc2ljIFByb2ZpbGUgaXMgYQotb3V0bGluZSBvZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UgcHJvdG9jb2wgKFNPQVAvSFRUUCkKLXRyYWZmaWMgbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4gVGhlIFdlYiBzZXJ2aWNlcyBXUy1JCi12YWxpZGF0aW9uIHRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSQotU1NCUCkgd2hpY2ggYnVpbGRzIG9uIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUsIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlCi0xLjAgKFdTLUkgQVApLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIgdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZAotdW5kZXIgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlbGl2ZXJhYmxlczwvc3Bhbj4gc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CYXNpYyBQcm9maWxlPC9zcGFuPi48L3A+Ci08cD5Gb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG86IDxhIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy53cy1pLm9yZy88L2E+PC9wPgotPHA+V1MtSQotcHJlZmVyZW5jZXMgY2FuIGJlIHNldCBhdCB0aGUgd29ya3NwYWNlIGxldmVsIGJ5IG9wZW5pbmcgdGhlIFByZWZlcmVuY2VzIG5vdGVib29rLAotb3IgYXQgdGhlIHByb2plY3QgbGV2ZWwgYnkgcmlnaHQtY2xpY2tpbmcgb24gYSBwcm9qZWN0IGFuZCBzZWxlY3RpbmcgUHJlZmVyZW5jZXMuPC9wPgotPHA+WW91Ci1jYW4gc2VsZWN0IHRoZSBXUy1JIEFQIDEuMCBvciBXUy1JIEJQIDEuMSArIFNTQlAgMS4wIHByb2ZpbGVzIGFuZCBjaG9vc2UgZm9yCi10aGUgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGlnbm9yZSwgc3VnZ2VzdCwgb3IgcmVxdWlyZSBjb21wbGlhbmNlLiBTdWdnZXN0Ci13aWxsIGdlbmVyYXRlIGEgd2FybmluZyBpZiB5b3UgYXR0ZW1wdCB0byBnZW5lcmF0ZSBub24tY29tcGxpYW50IGNvZGUsIHdoZXJlYXMKLXJlcXVpcmUgd2lsbCBwcmV2ZW50IHlvdSBmcm9tIGdlbmVyYXRpbmcgbm9uLWNvbXBsaWFudCBjb2RlLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBJZiB5b3UKLWNoYW5nZSB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIHdoaWxlIFdTLUkgaW5jb21wbGlhbmNlcyBhcmUgbGlzdGVkIGluCi10aGUgVGFzayB2aWV3LCB0aGUgVGFzayB2aWV3IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4gVGhlIHdvcmtzcGFjZQotbXVzdCBiZSByZXZhbGlkYXRlZCBiZWZvcmUgdGhlIHdhcm5pbmdzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUYXNrIHZpZXcuPC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiB0aXRsZT0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODgyNzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiIKLSAicmVmZXJlbmNlLmR0ZCI+Ci08cmVmZXJlbmNlIGlkPSJyd3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLAotb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkCi1mcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MKLXRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMKLW9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zCi1vZiBvcGVyYXRpb25zLiA8L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJyd3NkbHwxfFdTRExyZWZlcmVuY2UiIHN0YXR1cz0iY2hhbmdlZCI+V1NETAotZmlsZXM8aW5kZXh0ZXJtPnJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0ga2V5cmVmPSJyd3NkbHwyfFdlYnNlcnZpY2VzV1NETHJlZmVyZW5jZSIKLXN0YXR1cz0ibmV3Ij5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPldTREwgcmVmZXJlbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PHA+VGhlIGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyCi1wb3J0IHR5cGUgY29uc3RpdHV0ZXMgYSByZXVzYWJsZSBiaW5kaW5nLiBBIHBvcnQgaXMgZGVmaW5lZCBieSBhc3NvY2lhdGluZwotYSBuZXR3b3JrIGFkZHJlc3Mgd2l0aCBhIHJldXNhYmxlIGJpbmRpbmcsIGFuZCBhIGNvbGxlY3Rpb24gb2YgcG9ydHMgZGVmaW5lCi1hIHNlcnZpY2UuIEhlbmNlLCBhIFdTREwgZG9jdW1lbnQgdXNlcyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzIGluIHRoZSBkZWZpbml0aW9uCi1vZiBuZXR3b3JrIHNlcnZpY2VzOjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+VHlwZXM8L3VpY29udHJvbD46IGEgY29udGFpbmVyIGZvciBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgdXNpbmcKLXNvbWUgdHlwZSBzeXN0ZW0gKHN1Y2ggYXMgWFNEKS48L2xpPgotPGxpPiA8dWljb250cm9sPk1lc3NhZ2U8L3VpY29udHJvbD46IGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZQotZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuPC9saT4KLTxsaT4gPHVpY29udHJvbD5PcGVyYXRpb248L3VpY29udHJvbD46IGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbgotc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+UG9ydCBUeXBlPC91aWNvbnRyb2w+OiBhbiBhYnN0cmFjdCBzZXQgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQKLWJ5IG9uZSBvciBtb3JlIGVuZHBvaW50cy48L2xpPgotPGxpPiA8dWljb250cm9sPkJpbmRpbmc8L3VpY29udHJvbD46IGEgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24KLWZvciBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBpcyB1c3VhbGx5IFNPQVAgYW5kIHRoZSBlbmNvZGluZyBhbmQKLWRhdGEgZm9ybWF0dGluZyByZWd1bGF0aW9ucyB1c2VkIChhbHNvIGtub3duIGFzIHRoZSBzdHlsZSkgaXMgdXN1YWxseSBsaXRlcmFsCi0odGhpcyBpbmNsdWRlcyBkb2N1bWVudC9saXRlcmFsLCBhbmQgc29tZXRpbWVzIHJwYy9saXRlcmFsKS48L2xpPgotPGxpPiA8dWljb250cm9sPlBvcnQ8L3VpY29udHJvbD46IGEgc2luZ2xlIGVuZHBvaW50IGRlZmluZWQgYXMgYSBjb21iaW5hdGlvbgotb2YgYSBiaW5kaW5nIGFuZCBhIG5ldHdvcmsgYWRkcmVzcy48L2xpPgotPGxpPiA8dWljb250cm9sPlNlcnZpY2U8L3VpY29udHJvbD46IGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIGVuZHBvaW50cy48L2xpPgotPC91bD48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0RMLCByZWZlciB0byAgPC9wPjxwPjx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi93c2RsPC94cmVmPjwvcD48cD5UaGUKLXZhcmlvdXMgV1NETCBlbGVtZW50cyBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEl0IGNhbiBiZSBpbiBvbmUgc2luZ2xlCi1XU0RMIGZpbGUgb3IgaW4gbXVsdGlwbGUgV1NETCBmaWxlcy48L3A+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIgotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI4MGFkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBXU0RMIGRvY3VtZW50IGRlZmluZXMgc2VydmljZXMgYXMgY29sbGVjdGlvbnMgb2YgbmV0d29yayBlbmRwb2ludHMsIG9yIHBvcnRzLiBJbiBXU0RMLCB0aGUgYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBlbmRwb2ludHMgYW5kIG1lc3NhZ2VzIGlzIHNlcGFyYXRlZCBmcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MgdGhlIHJldXNlIG9mIGFic3RyYWN0IGRlZmluaXRpb25zOiBtZXNzYWdlcywgd2hpY2ggYXJlIGFic3RyYWN0IGRlc2NyaXB0aW9ucyBvZiB0aGUgZGF0YSBiZWluZyBleGNoYW5nZWQsIGFuZCBwb3J0IHR5cGVzIHdoaWNoIGFyZSBhYnN0cmFjdCBjb2xsZWN0aW9ucyBvZiBvcGVyYXRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywgb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkIGZyb20gdGhlaXIgY29uY3JldGUgbmV0d29yayBkZXBsb3ltZW50IG9yIGRhdGEgZm9ybWF0IGJpbmRpbmdzLiBUaGlzIGFsbG93cyB0aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zIG9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zIG9mIG9wZXJhdGlvbnMuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIFdTREwgcmVmZXJlbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIFdTREwgcmVmZXJlbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icndzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0icndzZGwiPjxhIG5hbWU9InJ3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLAotb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkCi1mcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MKLXRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMKLW9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zCi1vZiBvcGVyYXRpb25zLiA8L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhcgotcG9ydCB0eXBlIGNvbnN0aXR1dGVzIGEgcmV1c2FibGUgYmluZGluZy4gQSBwb3J0IGlzIGRlZmluZWQgYnkgYXNzb2NpYXRpbmcKLWEgbmV0d29yayBhZGRyZXNzIHdpdGggYSByZXVzYWJsZSBiaW5kaW5nLCBhbmQgYSBjb2xsZWN0aW9uIG9mIHBvcnRzIGRlZmluZQotYSBzZXJ2aWNlLiBIZW5jZSwgYSBXU0RMIGRvY3VtZW50IHVzZXMgdGhlIGZvbGxvd2luZyBlbGVtZW50cyBpbiB0aGUgZGVmaW5pdGlvbgotb2YgbmV0d29yayBzZXJ2aWNlczo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlR5cGVzPC9zcGFuPjogYSBjb250YWluZXIgZm9yIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2luZwotc29tZSB0eXBlIHN5c3RlbSAoc3VjaCBhcyBYU0QpLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TWVzc2FnZTwvc3Bhbj46IGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZQotZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PcGVyYXRpb248L3NwYW4+OiBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbiBvZiBhbiBhY3Rpb24KLXN1cHBvcnRlZCBieSB0aGUgc2VydmljZS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQgVHlwZTwvc3Bhbj46IGFuIGFic3RyYWN0IHNldCBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZAotYnkgb25lIG9yIG1vcmUgZW5kcG9pbnRzLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QmluZGluZzwvc3Bhbj46IGEgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24KLWZvciBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBpcyB1c3VhbGx5IFNPQVAgYW5kIHRoZSBlbmNvZGluZyBhbmQKLWRhdGEgZm9ybWF0dGluZyByZWd1bGF0aW9ucyB1c2VkIChhbHNvIGtub3duIGFzIHRoZSBzdHlsZSkgaXMgdXN1YWxseSBsaXRlcmFsCi0odGhpcyBpbmNsdWRlcyBkb2N1bWVudC9saXRlcmFsLCBhbmQgc29tZXRpbWVzIHJwYy9saXRlcmFsKS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQ8L3NwYW4+OiBhIHNpbmdsZSBlbmRwb2ludCBkZWZpbmVkIGFzIGEgY29tYmluYXRpb24KLW9mIGEgYmluZGluZyBhbmQgYSBuZXR3b3JrIGFkZHJlc3MuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZXJ2aWNlPC9zcGFuPjogYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZW5kcG9pbnRzLjwvbGk+Ci0KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0RMLCByZWZlciB0byAgPC9wPgotPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy53My5vcmcvVFIvd3NkbDwvYT48L3A+Ci08cD5UaGUKLXZhcmlvdXMgV1NETCBlbGVtZW50cyBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEl0IGNhbiBiZSBpbiBvbmUgc2luZ2xlCi1XU0RMIGZpbGUgb3IgaW4gbXVsdGlwbGUgV1NETCBmaWxlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGwuaHRtbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yIHNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcyByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLiI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbHByZWYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbHByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA2ZjdhNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGxwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0id3NkbGZpbGVzcHJlZmVyZW5jZXMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPldTREwgZmlsZSBwcmVmZXJlbmNlczwvdGl0bGU+DQotPHNob3J0ZGVzYz5Vc2UgdGhlIFdTREwgRmlsZXMgcHJlZmVyZW5jZXMgcGFnZSB0byBzZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3INCi13aGVuIGNyZWF0aW5nIG9yIHNhdmluZyBXU0RMIGZpbGVzLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPnByZWZlcmVuY2VzPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPldTREw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldTREw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PGRsPjxkbGVudHJ5Pg0KLTxkdD5EZWZhdWx0IHRhcmdldCBuYW1lc3BhY2U6PC9kdD4NCi08ZGQ+V2hlbiBjcmVhdGluZyBhIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IsIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0DQotdGFyZ2V0IG5hbWVzcGFjZS4gSWYgeW91IGRvIG5vdCBzZWxlY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LCB5b3VyIFdTREwgZmlsZQ0KLXdpbGwgaGF2ZSBodHRwOi8vdGVtcHVyaS5vcmcgYXMgaXRzIHRhcmdldCBuYW1lc3BhY2UuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0PlJlZ2VuZXJhdGUgQmluZGluZyBvbiBzYXZlPC9kdD4NCi08ZGQ+U2VsZWN0IHRoaXMgdG8gYXV0b21hdGljYWxseSByZWdlbmVyYXRlIHRoZSBiaW5kaW5nIGV2ZXJ5IHRpbWUgeW91IHNhdmUNCi1hIFdTREwgZmlsZS48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+UHJvbXB0IFJlZ2VuZXJhdGUgQmluZGluZyBvbiBzYXZlPC9kdD4NCi08ZGQ+U2VsZWN0IHRoaXMgdG8gYmUgYXNrZWQgaWYgeW91IHdhbnQgdG8gcmVnZW5lcmF0ZSB0aGUgYmluZGluZyBldmVyeSB0aW1lDQoteW91IHNhdmUgYSBXU0RMIGZpbGUuPC9kZD4NCi08L2RsZW50cnk+PC9kbD48L3NlY3Rpb24+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbHByZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbHByZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwYjMyMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGxwcmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldTREwgZmlsZSBwcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJVc2UgdGhlIFdTREwgRmlsZXMgcHJlZmVyZW5jZXMgcGFnZSB0byBzZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBjcmVhdGluZyBvciBzYXZpbmcgV1NETCBmaWxlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNlIHRoZSBXU0RMIEZpbGVzIHByZWZlcmVuY2VzIHBhZ2UgdG8gc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gY3JlYXRpbmcgb3Igc2F2aW5nIFdTREwgZmlsZXMuIiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMsIFdTREwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90d3NwcmVmLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0id3NkbGZpbGVzcHJlZmVyZW5jZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XU0RMIGZpbGUgcHJlZmVyZW5jZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9IndzZGxmaWxlc3ByZWZlcmVuY2VzIj48YSBuYW1lPSJ3c2RsZmlsZXNwcmVmZXJlbmNlcyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+V1NETCBmaWxlIHByZWZlcmVuY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+VXNlIHRoZSBXU0RMIEZpbGVzIHByZWZlcmVuY2VzIHBhZ2UgdG8gc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yCi13aGVuIGNyZWF0aW5nIG9yIHNhdmluZyBXU0RMIGZpbGVzLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPkRlZmF1bHQgdGFyZ2V0IG5hbWVzcGFjZTo8L2R0PgotCi08ZGQ+V2hlbiBjcmVhdGluZyBhIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IsIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0Ci10YXJnZXQgbmFtZXNwYWNlLiBJZiB5b3UgZG8gbm90IHNlbGVjdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQsIHlvdXIgV1NETCBmaWxlCi13aWxsIGhhdmUgaHR0cDovL3RlbXB1cmkub3JnIGFzIGl0cyB0YXJnZXQgbmFtZXNwYWNlLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlJlZ2VuZXJhdGUgQmluZGluZyBvbiBzYXZlPC9kdD4KLQotPGRkPlNlbGVjdCB0aGlzIHRvIGF1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZSB0aGUgYmluZGluZyBldmVyeSB0aW1lIHlvdSBzYXZlCi1hIFdTREwgZmlsZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Qcm9tcHQgUmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmU8L2R0PgotCi08ZGQ+U2VsZWN0IHRoaXMgdG8gYmUgYXNrZWQgaWYgeW91IHdhbnQgdG8gcmVnZW5lcmF0ZSB0aGUgYmluZGluZyBldmVyeSB0aW1lCi15b3Ugc2F2ZSBhIFdTREwgZmlsZS48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R3c3ByZWYuaHRtbCIgdGl0bGU9IkJlZm9yZSB5b3UgYmVnaW4gZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgb3IgY2xpZW50cywgeW91IGNhbiBvcHRpbWl6ZSB0aGUgd29ya2JlbmNoIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgYnkgc2V0dGluZyBhIHZhcmlldHkgb2YgcHJlZmVyZW5jZXMuIj5TZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzd2l6cHJlZi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3dpenByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNDMxYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzd2l6cHJlZi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiINCi0gInJlZmVyZW5jZS5kdGQiPg0KLTxyZWZlcmVuY2UgaWQ9IndlYnNlcnZpY2Vzd2l6YXJkc2Jhc2ljcHJlZmVyZW5jZXMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzPC90aXRsZT4NCi08c2hvcnRkZXNjPlRoZSBkZWZhdWx0IGJlaGF2aW9ycyBvZiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgY2FuIGJlIHNldCB1c2luZw0KLXRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZSBwYW5lbHMuIEFsbCBwcmVmZXJlbmNlcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUNCi13aXphcmQuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+d2l6YXJkczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5wcmVmZXJlbmNlczxpbmRleHRlcm0+d2l6YXJkczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48dGl0bGU+UG9wdXAgRGlhbG9nIFNlbGVjdGlvbjwvdGl0bGU+PHA+VGhlIGRpYWxvZyBwcmVmZXJlbmNlcyBlbmFibGUNCi15b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIGRpYWxvZyBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNlZSB3aGVuIHJ1bm5pbmcgcG9wdXANCi1hY3Rpb25zLiBJZiB5b3UgaGF2ZSBkaXNhYmxlZCBhbnkgb2YgdGhlIGRpYWxvZ3MgYnkgc2VsZWN0aW5nICJEbyBub3Qgc2hvdw0KLXRoaXMgZGlhbG9nIGFnYWluIiBvbiB0aGUgZmlyc3QgcGFnZSBvZiBhIFdlYiBzZXJ2aWNlcyB3aXphcmQsIHlvdSBjYW4gdW5kbw0KLXlvdXIgY2hhbmdlIGJ5IGNsZWFyaW5nIHRoZSBjaGVjayBib3ggYmVzaWRlIHRoZSBkaWFsb2cgdGhhdCB5b3UgaGF2ZSBjaG9zZW4NCi10byBoaWRlLjwvcD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPlByb2plY3QgVG9wb2xvZ3k8L3RpdGxlPjxkbD48ZGxlbnRyeT4NCi08ZHQ+U2VydmljZSBwcm9qZWN0IHR5cGVzOjwvZHQ+DQotPGRkPlNlbGVjdCB0aGUgZGVmYXVsdCBzZXJ2aWNlIHByb2plY3QgdHlwZSB0aGF0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcw0KLXdpbGwgY3JlYXRlIHdoZW4gZ2VuZXJhdGluZyBhIFdlYiBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBvcmRlciBpbiB3aGljaA0KLXRoZSBwcm9qZWN0IHR5cGVzIHdpbGwgYmUgbGlzdGVkIGluIHRoZSB3aXphcmQuIE5vdGUgdGhhdCB0aGlzIHNlbGVjdGlvbiBpcw0KLXNpbXBseSBhIGRlZmF1bHQgYW5kIGFuIGFsdGVybmF0ZSBwcm9qZWN0IHR5cGUgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSB3aXphcmQuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0PkNsaWVudCBwcm9qZWN0IHR5cGVzOjwvZHQ+DQotPGRkPlNlbGVjdCB0aGUgZGVmYXVsdCBjbGllbnQgcHJvamVjdCB0eXBlIHRoYXQgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwNCi1jcmVhdGUgd2hlbiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50LiBZb3UgY2FuIGFsc28gc2V0IHRoZSBvcmRlciBpbg0KLXdoaWNoIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlcyB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgd2l6YXJkLiBOb3RlIHRoYXQgdGhpcw0KLXNlbGVjdGlvbiBpcyBzaW1wbHkgYSBkZWZhdWx0IGFuZCBhbiBhbHRlcm5hdGUgcHJvamVjdCB0eXBlIGNhbiBiZSBzZWxlY3RlZA0KLWluIHRoZSB3aXphcmQuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0PkdlbmVyYXRlIFdlYiBzZXJ2aWNlIGFuZCB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IGluIGRpZmZlcmVudCBFQVIgcHJvamVjdHM6PC9kdD4NCi08ZGQ+R2VuZXJhdGluZyB0aGUgc2VydmljZSBhbmQgY2xpZW50IGludG8gZGlmZmVyZW50IEVBUiBwcm9qZWN0cyBjYW4gcmVkdWNlDQotdGhlIGNoYW5jZSBvZiBjb25mbGljdHMgdGhhdCBvY2N1ciB3aGVuIGJvdGggZXhpc3QgaW4gYSBzaW5nbGUgRUFSIHByb2plY3QsDQotYnV0IHVzZXMgbW9yZSBzeXN0ZW0gcmVzb3VyY2VzLjwvZGQ+DQotPC9kbGVudHJ5PjwvZGw+PC9zZWN0aW9uPg0KLTxzZWN0aW9uPjx0aXRsZT5SZXNvdXJjZSBNYW5hZ2VtZW50PC90aXRsZT48cD5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcw0KLWVuYWJsZSB5b3UgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIGFuZCBmb2xkZXIgY3JlYXRpb24gYW5kIG92ZXJ3cml0aW5nIGRlZmF1bHRzDQotdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLjxkbD48ZGxlbnRyeT4NCi08ZHQ+T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZzo8L2R0Pg0KLTxkZD5TZWxlY3RpbmcgdGhpcyB3aWxsIGFsbG93IHRoZSB3aXphcmRzIHRvIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgZmlsZXMNCi1pbiB0aGUgd29ya3NwYWNlIHdpdGhvdXQgcHJvbXB0aW5nLiBJZiBpdCBpcyBub3Qgc2VsZWN0ZWQgeW91IHdpbGwgYmUgcHJvbXB0ZWQNCi1lYWNoIHRpbWUgYSBmaWxlIG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeTo8L2R0Pg0KLTxkZD5TZWxlY3RpbmcgdGhpcyBlbmFibGVzIHRoZSB3aXphcmRzIHRvIGNyZWF0ZSBhbnkgcmVxdWlyZWQgZm9sZGVycy48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+Q2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZzo8L2R0Pg0KLTxkZD5TZWxlY3QgdG8gY2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3INCi1jb25maXJtYXRpb24uPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0Pk1lcmdlIGdlbmVyYXRlZCBza2VsZXRvbiBmaWxlOjwvZHQ+DQotPGRkPlRoaXMgY2hlY2sgYm94IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLA0KLXdoZW4gYSBza2VsZXRvbiBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZSwgdGhlDQotbmV3bHkgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUgd2lsbCBtZXJnZSB3aXRoIHRoZSBleGlzdGluZyBza2VsZXRvbiBmaWxlLg0KLSBFbmFibGUgdGhpcyB0byBwcmVzZXJ2ZSBjb2RlIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBtb2RpZmllZCBpbiB0aGUgZXhpc3RpbmcNCi1za2VsZXRvbiBmaWxlcy48bm90ZT5XaGVuIHRoaXMgcHJlZmVyZW5jZSBpcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4NCi10eXBlIG9mIGFuIGludGVyZmFjZSwgdGhlIHJlc3VsdGluZyBza2VsZXRvbiBmaWxlIHdpbGwgaGF2ZSBhIG1ldGhvZCByZXR1cm5pbmcNCi10aGUgdHlwZSBhcyBkZWZpbmVkIGluIHRoZSBuZXcgaW50ZXJmYWNlIGJ1dCB3b3VsZCBoYXZlIGEgbWV0aG9kIGJvZHkgZnJvbQ0KLXRoZSBvcmlnaW5hbCBza2VsZXRvbiBmaWxlICh3aGljaCB3b3VsZCBiZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzDQotd2lsbCByZXN1bHQgaW4gYW4gY29tcGlsYXRpb24gZXJyb3IgdGhhdCB0aGUgeW91IHdpbGwgaGF2ZSB0byBjb3JyZWN0IG1hbnVhbGx5Ljwvbm90ZT48L2RkPg0KLTwvZGxlbnRyeT48L2RsPjwvcD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPlNjZW5hcmlvIERlZmF1bHRzPC90aXRsZT48cD5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMNCi1lbmFibGUgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4NCi1jcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlOjx1bD4NCi08bGk+d2hpY2ggdHlwZSBvZiBXZWIgc2VydmljZSBhbmQgY2xpZW50IHlvdSB3YW50IHRvIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQuPC9saT4NCi08bGk+d2hpY2ggcGhhc2VzIG9mIHRoZSBXZWIgc2VydmljZSBsaWZlY3ljbGUgeW91IHdhbnQgdG8gY29tcGxldGUgaW4gdGhlDQotd2l6YXJkLjwvbGk+DQotPGxpPmlmIHlvdSB3YW50IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gbGF1bmNoIGJ5IGRlZmF1bHQgc28gdGhhdCB5b3UNCi1jYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2xpPg0KLTxsaT5pZiB5b3Ugd2FudCB0aGUgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIHJvdXRlZCB0aHJvdWdoIGEgVENQL0lQIG1vbml0b3INCi1zbyB0aGF0IHlvdSBjYW4gbW9uaXRvciB0aGUgU09BUCBwYWNrZXRzIGFuZCBvcHRpb25hbGx5IHRlc3QgdGhlbSBmb3IgV1MtSQ0KLWNvbXBsaWFuY2UuPC9saT4NCi08L3VsPjwvcD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPlNlcnZlciBhbmQgUnVudGltZTwvdGl0bGU+PHA+U2VsZWN0IHRoZSBzZXJ2ZXIgYW5kIFdlYiBzZXJ2aWNlDQotcnVudGltZSBlbnZpcm9ubWVudCB0aGF0IHlvdSB3YW50IHNlbGVjdGVkIGJ5IGRlZmF1bHQgaW4gdGhlIFdlYiBzZXJ2aWNlcw0KLXdpemFyZC48L3A+PC9zZWN0aW9uPg0KLTxzZWN0aW9uPjx0aXRsZT5UZXN0IEZhY2lsaXR5IERlZmF1bHRzPC90aXRsZT48cD5Zb3UgY2FuIHNlbGVjdCB3aGV0aGVyIHRvDQotaGF2ZSB0aGUgd2l6YXJkIGF1dG9tYXRpY2FsbHkgbGF1bmNoIGEgdGVzdCBmYWNpbGl0eSwgYW5kIHlvdSBjYW4gc2VsZWN0IHlvdXINCi1wcmVmZXJyZWQgdHlwZSBvZiB0ZXN0IGZhY2lsaXR5LjwvcD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPldpemFyZCB2YWxpZGF0aW9uPC90aXRsZT48cD5UaGUgV2l6YXJkIFZhbGlkYXRpb24gcHJlZmVyZW5jZXMNCi1wYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHdoZW4gV1NETCB2YWxpZGF0aW9uIGlzIHJ1biBhZ2FpbnN0IFdTREwgZmlsZXMgY29uc3VtZWQNCi1ieSB3aXphcmRzLiBZb3UgY2FuIHNlbGVjdCB0byB0dXJuIG9mZiB2YWxpZGlhdGlvbiwgb3IgdG8gZW5hYmxlIGl0IGZvciBsb2NhbA0KLW9yIGxvY2FsIGFuZCByZW1vdGUgV1NETCBmaWxlcy48L3A+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzd2l6cHJlZi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3dpenByZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5NzU2Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzd2l6cHJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIHNlcnZpY2VzIHdpemFyZHMgYmFzaWMgcHJlZmVyZW5jZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIGRlZmF1bHQgYmVoYXZpb3JzIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZSBwYW5lbHMuIEFsbCBwcmVmZXJlbmNlcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgd2l6YXJkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgZGVmYXVsdCBiZWhhdmlvcnMgb2YgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhbmVscy4gQWxsIHByZWZlcmVuY2VzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSB3aXphcmQuIiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgd2l6YXJkcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMsIHdpemFyZHMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90d3NwcmVmLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0id2Vic2VydmljZXN3aXphcmRzYmFzaWNwcmVmZXJlbmNlcyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ3ZWJzZXJ2aWNlc3dpemFyZHNiYXNpY3ByZWZlcmVuY2VzIj48YSBuYW1lPSJ3ZWJzZXJ2aWNlc3dpemFyZHNiYXNpY3ByZWZlcmVuY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgc2VydmljZXMgd2l6YXJkcyBiYXNpYyBwcmVmZXJlbmNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBkZWZhdWx0IGJlaGF2aW9ycyBvZiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgY2FuIGJlIHNldCB1c2luZwotdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhbmVscy4gQWxsIHByZWZlcmVuY2VzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZQotd2l6YXJkLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlBvcHVwIERpYWxvZyBTZWxlY3Rpb248L2g0PjxwPlRoZSBkaWFsb2cgcHJlZmVyZW5jZXMgZW5hYmxlCi15b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIGRpYWxvZyBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNlZSB3aGVuIHJ1bm5pbmcgcG9wdXAKLWFjdGlvbnMuIElmIHlvdSBoYXZlIGRpc2FibGVkIGFueSBvZiB0aGUgZGlhbG9ncyBieSBzZWxlY3RpbmcgIkRvIG5vdCBzaG93Ci10aGlzIGRpYWxvZyBhZ2FpbiIgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgYSBXZWIgc2VydmljZXMgd2l6YXJkLCB5b3UgY2FuIHVuZG8KLXlvdXIgY2hhbmdlIGJ5IGNsZWFyaW5nIHRoZSBjaGVjayBib3ggYmVzaWRlIHRoZSBkaWFsb2cgdGhhdCB5b3UgaGF2ZSBjaG9zZW4KLXRvIGhpZGUuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5Qcm9qZWN0IFRvcG9sb2d5PC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZSBwcm9qZWN0IHR5cGVzOjwvZHQ+Ci0KLTxkZD5TZWxlY3QgdGhlIGRlZmF1bHQgc2VydmljZSBwcm9qZWN0IHR5cGUgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMKLXdpbGwgY3JlYXRlIHdoZW4gZ2VuZXJhdGluZyBhIFdlYiBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBvcmRlciBpbiB3aGljaAotdGhlIHByb2plY3QgdHlwZXMgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIHdpemFyZC4gTm90ZSB0aGF0IHRoaXMgc2VsZWN0aW9uIGlzCi1zaW1wbHkgYSBkZWZhdWx0IGFuZCBhbiBhbHRlcm5hdGUgcHJvamVjdCB0eXBlIGNhbiBiZSBzZWxlY3RlZCBpbiB0aGUgd2l6YXJkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudCBwcm9qZWN0IHR5cGVzOjwvZHQ+Ci0KLTxkZD5TZWxlY3QgdGhlIGRlZmF1bHQgY2xpZW50IHByb2plY3QgdHlwZSB0aGF0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyB3aWxsCi1jcmVhdGUgd2hlbiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50LiBZb3UgY2FuIGFsc28gc2V0IHRoZSBvcmRlciBpbgotd2hpY2ggdGhlIGNsaWVudCBwcm9qZWN0IHR5cGVzIHdpbGwgYmUgbGlzdGVkIGluIHRoZSB3aXphcmQuIE5vdGUgdGhhdCB0aGlzCi1zZWxlY3Rpb24gaXMgc2ltcGx5IGEgZGVmYXVsdCBhbmQgYW4gYWx0ZXJuYXRlIHByb2plY3QgdHlwZSBjYW4gYmUgc2VsZWN0ZWQKLWluIHRoZSB3aXphcmQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+R2VuZXJhdGUgV2ViIHNlcnZpY2UgYW5kIHRoZSBXZWIgc2VydmljZSBjbGllbnQgaW4gZGlmZmVyZW50IEVBUiBwcm9qZWN0czo8L2R0PgotCi08ZGQ+R2VuZXJhdGluZyB0aGUgc2VydmljZSBhbmQgY2xpZW50IGludG8gZGlmZmVyZW50IEVBUiBwcm9qZWN0cyBjYW4gcmVkdWNlCi10aGUgY2hhbmNlIG9mIGNvbmZsaWN0cyB0aGF0IG9jY3VyIHdoZW4gYm90aCBleGlzdCBpbiBhIHNpbmdsZSBFQVIgcHJvamVjdCwKLWJ1dCB1c2VzIG1vcmUgc3lzdGVtIHJlc291cmNlcy48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5SZXNvdXJjZSBNYW5hZ2VtZW50PC9oND48ZGl2IGNsYXNzPSJwIj5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcwotZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGZpbGUgYW5kIGZvbGRlciBjcmVhdGlvbiBhbmQgb3ZlcndyaXRpbmcgZGVmYXVsdHMKLXRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZzo8L2R0PgotCi08ZGQ+U2VsZWN0aW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUgd2l6YXJkcyB0byBvdmVyd3JpdGUgYW55IGV4aXN0aW5nIGZpbGVzCi1pbiB0aGUgd29ya3NwYWNlIHdpdGhvdXQgcHJvbXB0aW5nLiBJZiBpdCBpcyBub3Qgc2VsZWN0ZWQgeW91IHdpbGwgYmUgcHJvbXB0ZWQKLWVhY2ggdGltZSBhIGZpbGUgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q3JlYXRlIGZvbGRlcnMgd2hlbiBuZWNlc3Nhcnk6PC9kdD4KLQotPGRkPlNlbGVjdGluZyB0aGlzIGVuYWJsZXMgdGhlIHdpemFyZHMgdG8gY3JlYXRlIGFueSByZXF1aXJlZCBmb2xkZXJzLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHdhcm5pbmc6PC9kdD4KLQotPGRkPlNlbGVjdCB0byBjaGVjayBvdXQgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvcgotY29uZmlybWF0aW9uLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1lcmdlIGdlbmVyYXRlZCBza2VsZXRvbiBmaWxlOjwvZHQ+Ci0KLTxkZD5UaGlzIGNoZWNrIGJveCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSWYgdGhpcyBjaGVjayBib3ggaXMgZW5hYmxlZCwKLXdoZW4gYSBza2VsZXRvbiBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZSwgdGhlCi1uZXdseSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZSB3aWxsIG1lcmdlIHdpdGggdGhlIGV4aXN0aW5nIHNrZWxldG9uIGZpbGUuCi0gRW5hYmxlIHRoaXMgdG8gcHJlc2VydmUgY29kZSB0aGF0IHlvdSBoYXZlIGFscmVhZHkgbW9kaWZpZWQgaW4gdGhlIGV4aXN0aW5nCi1za2VsZXRvbiBmaWxlcy48ZGl2IGNsYXNzPSJub3RlIj48c3BhbiBjbGFzcz0ibm90ZXRpdGxlIj5Ob3RlOjwvc3Bhbj4gV2hlbiB0aGlzIHByZWZlcmVuY2UgaXMgZW5hYmxlZCwgaWYgeW91IGNoYW5nZSB0aGUgcmV0dXJuCi10eXBlIG9mIGFuIGludGVyZmFjZSwgdGhlIHJlc3VsdGluZyBza2VsZXRvbiBmaWxlIHdpbGwgaGF2ZSBhIG1ldGhvZCByZXR1cm5pbmcKLXRoZSB0eXBlIGFzIGRlZmluZWQgaW4gdGhlIG5ldyBpbnRlcmZhY2UgYnV0IHdvdWxkIGhhdmUgYSBtZXRob2QgYm9keSBmcm9tCi10aGUgb3JpZ2luYWwgc2tlbGV0b24gZmlsZSAod2hpY2ggd291bGQgYmUgcmV0dXJuaW5nIGEgZGlmZmVyZW50IHR5cGUpLiAgVGhpcwotd2lsbCByZXN1bHQgaW4gYW4gY29tcGlsYXRpb24gZXJyb3IgdGhhdCB0aGUgeW91IHdpbGwgaGF2ZSB0byBjb3JyZWN0IG1hbnVhbGx5LjwvZGl2PgotPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5TY2VuYXJpbyBEZWZhdWx0czwvaDQ+PGRpdiBjbGFzcz0icCI+VGhlIFNjZW5hcmlvIERlZmF1bHRzIHByZWZlcmVuY2VzCi1lbmFibGUgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2U6PHVsPgotPGxpPndoaWNoIHR5cGUgb2YgV2ViIHNlcnZpY2UgYW5kIGNsaWVudCB5b3Ugd2FudCB0byBiZSBzZWxlY3RlZCBieSBkZWZhdWx0LjwvbGk+Ci0KLTxsaT53aGljaCBwaGFzZXMgb2YgdGhlIFdlYiBzZXJ2aWNlIGxpZmVjeWNsZSB5b3Ugd2FudCB0byBjb21wbGV0ZSBpbiB0aGUKLXdpemFyZC48L2xpPgotCi08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBsYXVuY2ggYnkgZGVmYXVsdCBzbyB0aGF0IHlvdQotY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9saT4KLQotPGxpPmlmIHlvdSB3YW50IHRoZSBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgcm91dGVkIHRocm91Z2ggYSBUQ1AvSVAgbW9uaXRvcgotc28gdGhhdCB5b3UgY2FuIG1vbml0b3IgdGhlIFNPQVAgcGFja2V0cyBhbmQgb3B0aW9uYWxseSB0ZXN0IHRoZW0gZm9yIFdTLUkKLWNvbXBsaWFuY2UuPC9saT4KLQotPC91bD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5TZXJ2ZXIgYW5kIFJ1bnRpbWU8L2g0PjxwPlNlbGVjdCB0aGUgc2VydmVyIGFuZCBXZWIgc2VydmljZQotcnVudGltZSBlbnZpcm9ubWVudCB0aGF0IHlvdSB3YW50IHNlbGVjdGVkIGJ5IGRlZmF1bHQgaW4gdGhlIFdlYiBzZXJ2aWNlcwotd2l6YXJkLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+VGVzdCBGYWNpbGl0eSBEZWZhdWx0czwvaDQ+PHA+WW91IGNhbiBzZWxlY3Qgd2hldGhlciB0bwotaGF2ZSB0aGUgd2l6YXJkIGF1dG9tYXRpY2FsbHkgbGF1bmNoIGEgdGVzdCBmYWNpbGl0eSwgYW5kIHlvdSBjYW4gc2VsZWN0IHlvdXIKLXByZWZlcnJlZCB0eXBlIG9mIHRlc3QgZmFjaWxpdHkuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5XaXphcmQgdmFsaWRhdGlvbjwvaDQ+PHA+VGhlIFdpemFyZCBWYWxpZGF0aW9uIHByZWZlcmVuY2VzCi1wYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHdoZW4gV1NETCB2YWxpZGF0aW9uIGlzIHJ1biBhZ2FpbnN0IFdTREwgZmlsZXMgY29uc3VtZWQKLWJ5IHdpemFyZHMuIFlvdSBjYW4gc2VsZWN0IHRvIHR1cm4gb2ZmIHZhbGlkaWF0aW9uLCBvciB0byBlbmFibGUgaXQgZm9yIGxvY2FsCi1vciBsb2NhbCBhbmQgcmVtb3RlIFdTREwgZmlsZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3Rhc2tzL3R3c3ByZWYuaHRtbCIgdGl0bGU9IkJlZm9yZSB5b3UgYmVnaW4gZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgb3IgY2xpZW50cywgeW91IGNhbiBvcHRpbWl6ZSB0aGUgd29ya2JlbmNoIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgYnkgc2V0dGluZyBhIHZhcmlldHkgb2YgcHJlZmVyZW5jZXMuIj5TZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDQ1ZjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRvdmVyd3MiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5Vc2UgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGRpc2NvdmVyLCBjcmVhdGUsIGFuZCBwdWJsaXNoIFdlYiBzZXJ2aWNlcwotdGhhdCBhcmUgY3JlYXRlZCBmcm9tIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLgotWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoCi1hIFdTREwgZmlsZSkgb3IgYSBib3R0b20tdXAgYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuCi1vciBFSkIpLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5JbiB0aGlzIHJlbGVhc2UsIHRoZSBkZXZlbG9wbWVudCBwYXRoIHRoYXQgeW91IHdvdWxkIHR5cGljYWxseQotZm9sbG93IHRvIGNyZWF0ZSBhbmQgcHVibGlzaCBhIFdlYiBzZXJ2aWNlIGlzIGFzIGZvbGxvd3M6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgV2ViIHByb2plY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DcmVhdGUgb3IgaW1wb3J0IGFuIGFydGlmYWN0IHRvIGJlIHR1cm5lZCBpbnRvIGEgV2ViIHNlcnZpY2UuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNyZWF0ZSBhIFdlYiBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlB1Ymxpc2ggYSBXZWIgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5Gb3IgaW5zdHJ1Y3Rpb25zIG9uIHBlcmZvcm1pbmcgdGhlc2UgdGFza3MsIHJlZmVyIHRvIHRoZSBsaXN0IG9mCi1yZWxhdGVkIHRvcGljcyBhdCB0aGUgZW5kIG9mIHRoaXMgdG9waWMuPC9wPjxwPldlYiB0b29scyBhc3Npc3QgeW91IGluIGRldmVsb3BpbmcKLVdlYiBhcHBsaWNhdGlvbnMgdGhhdCB5b3UgY2FuIGNvbmZpZ3VyZSBhcyBhIFdlYiBzZXJ2aWNlLiBXZWIgYXBwbGljYXRpb25zCi1hcmUgZGV2ZWxvcGVkIGluIGEgV2ViIHByb2plY3QsIGFuZCBTZXJ2ZXIgdG9vbHMgYWxsb3cgeW91IHRvIHVzZSB0aGUgc2VydmVyCi10ZXN0IGVudmlyb25tZW50IHRvIHRlc3QgYW5kIGRlcGxveSB5b3VyIFdlYiBzZXJ2aWNlcy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+Ci08L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViCi1zZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzYnRtdXAuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+Q3JlYXRpbmcgYm90dG9tLXVwCi1XZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+Q3JlYXRpbmcKLXRvcC1kb3duIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YSIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTcwOTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRGV2ZWxvcGluZyBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2UgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGRpc2NvdmVyLCBjcmVhdGUsIGFuZCBwdWJsaXNoIFdlYiBzZXJ2aWNlcyB0aGF0IGFyZSBjcmVhdGVkIGZyb20gSmF2YSBiZWFucywgZW50ZXJwcmlzZSBiZWFucywgYW5kIFdTREwgZmlsZXMuIFlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIFdTREwgZmlsZSkgb3IgYSBib3R0b20tdXAgYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgSmF2YSBiZWFuIG9yIEVKQikuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgb3ZlcnZpZXciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGNyZWF0aW5nLCBvdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NidG11cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRvdmVyd3MiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idG92ZXJ3cyI+PGEgbmFtZT0idG92ZXJ3cyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5Vc2UgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGRpc2NvdmVyLCBjcmVhdGUsIGFuZCBwdWJsaXNoIFdlYiBzZXJ2aWNlcwotdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmHihKIgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLgotWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoCi1hIFdTREwgZmlsZSkgb3IgYSBib3R0b20tdXAgYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgSmF2YSBiZWFuCi1vciBFSkIpLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SW4gdGhpcyByZWxlYXNlLCB0aGUgZGV2ZWxvcG1lbnQgcGF0aCB0aGF0IHlvdSB3b3VsZCB0eXBpY2FsbHkKLWZvbGxvdyB0byBjcmVhdGUgYW5kIHB1Ymxpc2ggYSBXZWIgc2VydmljZSBpcyBhcyBmb2xsb3dzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+Q3JlYXRlIGEgV2ViIHByb2plY3QuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DcmVhdGUgb3IgaW1wb3J0IGFuIGFydGlmYWN0IHRvIGJlIHR1cm5lZCBpbnRvIGEgV2ViIHNlcnZpY2UuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNyZWF0ZSBhIFdlYiBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlB1Ymxpc2ggYSBXZWIgc2VydmljZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIGluc3RydWN0aW9ucyBvbiBwZXJmb3JtaW5nIHRoZXNlIHRhc2tzLCByZWZlciB0byB0aGUgbGlzdCBvZgotcmVsYXRlZCB0b3BpY3MgYXQgdGhlIGVuZCBvZiB0aGlzIHRvcGljLjwvcD4KLTxwPldlYiB0b29scyBhc3Npc3QgeW91IGluIGRldmVsb3BpbmcKLVdlYiBhcHBsaWNhdGlvbnMgdGhhdCB5b3UgY2FuIGNvbmZpZ3VyZSBhcyBhIFdlYiBzZXJ2aWNlLiBXZWIgYXBwbGljYXRpb25zCi1hcmUgZGV2ZWxvcGVkIGluIGEgV2ViIHByb2plY3QsIGFuZCBTZXJ2ZXIgdG9vbHMgYWxsb3cgeW91IHRvIHVzZSB0aGUgc2VydmVyCi10ZXN0IGVudmlyb25tZW50IHRvIHRlc3QgYW5kIGRlcGxveSB5b3VyIFdlYiBzZXJ2aWNlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViCi1zZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzYnRtdXAuaHRtbCIgdGl0bGU9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLiI+Q3JlYXRpbmcgYm90dG9tLXVwCi1XZWIgc2VydmljZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCIgdGl0bGU9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZS4iPkNyZWF0aW5nCi10b3AtZG93biBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c3ByZWYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c3ByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1Y2ZjMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InNldHRpbmd3ZWJzZXJ2aWNlc3ByZWZlcmVuY2VzIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5TZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlczwvdGl0bGU+DQotPHNob3J0ZGVzYz5CZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUNCi10aGUgd29ya2JlbmNoIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgYnkgc2V0dGluZyBhIHZhcmlldHkgb2YgcHJlZmVyZW5jZXMuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5wcmVmZXJlbmNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHk+DQotPGNvbnRleHQ+VG8gc2V0IGFueSBvZiB0aGUgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPldpbmRvdyA+IFByZWZlcmVuY2VzPC91aWNvbnRyb2w+IHRvIG9wZW4gdGhlDQotUHJlZmVyZW5jZXMgbm90ZWJvb2suPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+RXhwYW5kICA8dWljb250cm9sPldlYiBzZXJ2aWNlczwvdWljb250cm9sPiBvciA8dWljb250cm9sPlNlcnZpY2UNCi1wb2xpY2llczwvdWljb250cm9sPiwgYW5kIGNsaWNrIHRoZSBwcmVmZXJlbmNlIGNhdGVnb3J5IHRoYXQgeW91IHdhbnQgdG8gc2V0LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPlNlbGVjdCB0aGUgY2hlY2sgYm94ZXMgdGhhdCB5b3Ugd2FudCB0byBzZXQgYXMgdGhlIGRlZmF1bHQgd2hlbg0KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPC9jbWQ+PGluZm8+SWYgeW91IHJlcXVpcmUgbW9yZSBpbmZvcm1hdGlvbiBvbiBhbnkNCi1vZiB0aGUgb3B0aW9ucywgc2VsZWN0IHRoZSBvcHRpb24gYW5kIHByZXNzICA8dWljb250cm9sPkYxPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5PSzwvdWljb250cm9sPiB0byBhcHBseSB0aGUgY2hhbmdlcyBhbmQgY2xvc2UNCi10aGUgUHJlZmVyZW5jZXMgbm90ZWJvb2suPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXE+Rm9yIGluZm9ybWF0aW9uIG9uIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmc6PHVsPg0KLTxsaT48eHJlZiBocmVmPSIuLi9yZWYvcmF4aXNwcmVmLmRpdGEiPjwveHJlZj48L2xpPg0KLTxsaT48eHJlZiBocmVmPSIuLi9yZWYvcndzd2l6cHJlZi5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+PHhyZWYgaHJlZj0iLi4vcmVmL3J3c2RscHJlZi5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+PHhyZWYgaHJlZj0iLi4vcmVmL3JzZXJ2cG9scHJlZi5kaXRhIj48L3hyZWY+PC9saT4NCi08L3VsPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NwcmVmLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NwcmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYzExMDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzcHJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU2V0dGluZyBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcmF4aXNwcmVmLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9yd3N3aXpwcmVmLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9yd3NkbHByZWYuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3JzZXJ2cG9scHJlZi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InNldHRpbmd3ZWJzZXJ2aWNlc3ByZWZlcmVuY2VzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+U2V0dGluZyBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InNldHRpbmd3ZWJzZXJ2aWNlc3ByZWZlcmVuY2VzIj48YSBuYW1lPSJzZXR0aW5nd2Vic2VydmljZXNwcmVmZXJlbmNlcyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U2V0dGluZyBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXM8L2gxPgotCi0KLQotPGRpdj48cD5CZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUKLXRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIHNldCBhbnkgb2YgdGhlIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcywgZm9sbG93IHRoZXNlIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBQcmVmZXJlbmNlczwvc3Bhbj4gdG8gb3BlbiB0aGUKLVByZWZlcmVuY2VzIG5vdGVib29rLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkV4cGFuZCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIHNlcnZpY2VzPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZXJ2aWNlCi1wb2xpY2llczwvc3Bhbj4sIGFuZCBjbGljayB0aGUgcHJlZmVyZW5jZSBjYXRlZ29yeSB0aGF0IHlvdSB3YW50IHRvIHNldC48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgY2hlY2sgYm94ZXMgdGhhdCB5b3Ugd2FudCB0byBzZXQgYXMgdGhlIGRlZmF1bHQgd2hlbgotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L3NwYW4+IElmIHlvdSByZXF1aXJlIG1vcmUgaW5mb3JtYXRpb24gb24gYW55Ci1vZiB0aGUgb3B0aW9ucywgc2VsZWN0IHRoZSBvcHRpb24gYW5kIHByZXNzICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GMTwvc3Bhbj4uCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4gdG8gYXBwbHkgdGhlIGNoYW5nZXMgYW5kIGNsb3NlCi10aGUgUHJlZmVyZW5jZXMgbm90ZWJvb2suPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPkZvciBpbmZvcm1hdGlvbiBvbiBpbmRpdmlkdWFsIHByZWZlcmVuY2VzLCByZWZlciB0byB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT48YSBocmVmPSIuLi9yZWYvcmF4aXNwcmVmLmh0bWwiIHRpdGxlPSJUaGUgQXhpcyBFbWl0dGVyIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGZvbGxvd2luZyYjMTA7cHJlZmVyZW5jZXMgdXNlZCB3aGVuIGNyZWF0aW5nIG9yIGNvbnN1bWluZyBBeGlzIFdlYiBzZXJ2aWNlcy4iPkF4aXMgZW1pdHRlciBwcmVmZXJlbmNlczwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0iLi4vcmVmL3J3c3dpenByZWYuaHRtbCIgdGl0bGU9IlRoZSBkZWZhdWx0IGJlaGF2aW9ycyBvZiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgY2FuIGJlIHNldCB1c2luZyYjMTA7dGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhbmVscy4gQWxsIHByZWZlcmVuY2VzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSYjMTA7d2l6YXJkLiI+V2ViIHNlcnZpY2VzIHdpemFyZHMgYmFzaWMgcHJlZmVyZW5jZXM8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9Ii4uL3JlZi9yd3NkbHByZWYuaHRtbCIgdGl0bGU9IlVzZSB0aGUgV1NETCBGaWxlcyBwcmVmZXJlbmNlcyBwYWdlIHRvIHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvciYjMTA7d2hlbiBjcmVhdGluZyBvciBzYXZpbmcgV1NETCBmaWxlcy4iPldTREwgZmlsZSBwcmVmZXJlbmNlczwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0iLi4vcmVmL3JzZXJ2cG9scHJlZi5odG1sIiB0aXRsZT0iVGhlIFNlcnZpY2UgcG9saWNpZXMgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNlbGVjdCB5b3VyJiMxMDtsZXZlbCBvZiBjb21wbGlhbmNlIHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSSYjMTA7QXR0YWNoZW1lbnQgUHJvZmlsZSAoQVApLiBUaGV5IGNhbiBiZSBmb3VuZCBvbiB0aGUgU2VydmljZSBQb2xpY2llcyBwcmVmZXJlbmNlcyYjMTA7cGFnZS4iPldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlczwvYT48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vcmVmL3JheGlzcHJlZi5odG1sIj5BeGlzIGVtaXR0ZXIgcHJlZmVyZW5jZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgQXhpcyBFbWl0dGVyIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlcyB1c2VkIHdoZW4gY3JlYXRpbmcgb3IgY29uc3VtaW5nIEF4aXMgV2ViIHNlcnZpY2VzLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3JlZi9yd3N3aXpwcmVmLmh0bWwiPldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIGRlZmF1bHQgYmVoYXZpb3JzIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZSBwYW5lbHMuIEFsbCBwcmVmZXJlbmNlcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgd2l6YXJkLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3JlZi9yd3NkbHByZWYuaHRtbCI+V1NETCBmaWxlIHByZWZlcmVuY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotVXNlIHRoZSBXU0RMIEZpbGVzIHByZWZlcmVuY2VzIHBhZ2UgdG8gc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gY3JlYXRpbmcgb3Igc2F2aW5nIFdTREwgZmlsZXMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vcmVmL3JzZXJ2cG9scHJlZi5odG1sIj5XUy1JIGNvbXBsaWFuY2UgcHJlZmVyZW5jZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgU2VydmljZSBwb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHlvdXIgbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAoU1NCUCkgYW5kIFdTLUkgQXR0YWNoZW1lbnQgUHJvZmlsZSAoQVApLiBUaGV5IGNhbiBiZSBmb3VuZCBvbiB0aGUgU2VydmljZSBQb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWQ2YTFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGlkPSJ3c21haW50b2MiIHRpdGxlPSJ3c21haW50b2MiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3cy5kaXRhIiBuYXZ0aXRsZT0iV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Ij4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YSIgbmF2dGl0bGU9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiCi1zY29wZT0ibG9jYWwiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIj4KLTx0b3BpY3JlZiBocmVmPSJyZWYvcndzZGwuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2Nzb2FwLmRpdGEiIG5hdnRpdGxlPSJTT0FQIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5kaXRhIgotbmF2dGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIiBzY29wZT0icGVlciI+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuZGl0YSIKLW5hdnRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaWwuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaWx1ZC5kaXRhIiBuYXZ0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTCI+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jamF4cnBjLmRpdGEiIG5hdnRpdGxlPSJKQVgtUlBDIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuZGl0YSIgbmF2dGl0bGU9IkpTUiAxMDkgYW5kIEpTUiA5MjEiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgbmF2dGl0bGU9IldTLUkgY29tcGxpYW5jZSIgc2NvcGU9ImxvY2FsIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uZGl0YSIgbmF2dGl0bGU9IlRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIKLXNjb3BlPSJsb2NhbCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NidG11cC5kaXRhIiBuYXZ0aXRsZT0iQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIKLXNjb3BlPSJsb2NhbCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBuYXZ0aXRsZT0iV29ya3NwYWNlIGFuZCB0b29scyI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgbmF2dGl0bGU9IlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiCi1zY29wZT0ibG9jYWwiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IkNvbmZpZ3VyaW5nIHlvdXIgd29ya3NwYWNlIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NwcmVmLmRpdGEiIG5hdnRpdGxlPSJTZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIKLXNjb3BlPSJsb2NhbCI+Ci08dG9waWNyZWYgaHJlZj0icmVmL3JheGlzcHJlZi5kaXRhIiBuYXZ0aXRsZT0iQXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InJlZi9yd3N3aXpwcmVmLmRpdGEiIG5hdnRpdGxlPSJXZWIgc2VydmljZXMgd2l6YXJkcyBiYXNpYyBwcmVmZXJlbmNlcyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InJlZi9yd3NkbHByZWYuZGl0YSIgbmF2dGl0bGU9IldTREwgZmlsZSBwcmVmZXJlbmNlcyI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJyZWYvcnNlcnZwb2xwcmVmLmRpdGEiIG5hdnRpdGxlPSJTZXJ2aWNlIHBvbGljaWVzIHByZWZlcmVuY2VzIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhIgotbmF2dGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCAgV2ViIHByb2plY3QiIHNjb3BlPSJwZWVyIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IkltcG9ydGluZyBhbmQgY3JlYXRpbmcgcmVzb3VyY2VzIHVzZWQgYnkgV2ViIHNlcnZpY2VzIj4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIi8+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuZGl0YSIKLW5hdnRpdGxlPSJEaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIGEgV2ViIHNlcnZpY2UiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90b3ZlcndzLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBXZWIgc2VydmljZXMiPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy5kaXRhbWFwIi8+Ci08bmF2cmVmIG1hcHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLnVpLmRvYy51c2VyL3dzYXhpczJidWlsZF90b2MuZGl0YW1hcCIvPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAiLz4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IlRlc3RpbmcgYW5kIHZhbGlkYXRpbmcgV2ViIHNlcnZpY2VzIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEiCi1uYXZ0aXRsZT0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFdTREwgRXhwbG9yZXIiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTREwiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEiIG5hdnRpdGxlPSJUZXN0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBUQ1AvSVAgTW9uaXRvciIKLXNjb3BlPSJwZWVyIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIG9mIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyIKLXNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAiLz4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuZGl0YSIKLW5hdnRpdGxlPSJHZW5lcmF0aW5nIFdTSUwiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjJiZWE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGFiZWw9IndzbWFpbnRvYyIgdG9waWM9ImNvbmNlcHRzL2N3cy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIG92ZXJ2aWV3IiBocmVmPSJjb25jZXB0cy9jd3MuaHRtbCI+Ci08dG9waWMgbGFiZWw9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiIGhyZWY9ImNvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIiBocmVmPSJyZWYvcndzZGwuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iU09BUCIgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwiPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkiIGhyZWY9ImNvbmNlcHRzL2N3c2lsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkpBWC1SUEMiIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJKU1IgMTA5IC0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzIiBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIiBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzIiBocmVmPSJjb25jZXB0cy9jd3NidG11cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IldvcmtzcGFjZSBhbmQgdG9vbHMiPgotPHRvcGljIGxhYmVsPSJUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IiBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNvbmZpZ3VyaW5nIHlvdXIgd29ya3NwYWNlIj4KLTx0b3BpYyBsYWJlbD0iU2V0dGluZyBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiIGhyZWY9InRhc2tzL3R3c3ByZWYuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkF4aXMgZW1pdHRlciBwcmVmZXJlbmNlcyIgaHJlZj0icmVmL3JheGlzcHJlZi5odG1sIi8+Ci08dG9waWMgbGFiZWw9IldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzIiBocmVmPSJyZWYvcndzd2l6cHJlZi5odG1sIi8+Ci08dG9waWMgbGFiZWw9IldTREwgZmlsZSBwcmVmZXJlbmNlcyIgaHJlZj0icmVmL3J3c2RscHJlZi5odG1sIi8+Ci08dG9waWMgbGFiZWw9IldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlcyIgaHJlZj0icmVmL3JzZXJ2cG9scHJlZi5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3QiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5odG1sIi8+Ci08L3RvcGljPgotPC90b3BpYz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkltcG9ydGluZyBhbmQgY3JlYXRpbmcgcmVzb3VyY2VzIHVzZWQgYnkgV2ViIHNlcnZpY2VzIj4KLTxsaW5rIHRvYz0iLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MueG1sIi8+Ci08dG9waWMgbGFiZWw9IkRpc2NvdmVyaW5nIGFuZCBpbXBvcnRpbmcgYSBXZWIgc2VydmljZSIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iRGV2ZWxvcGluZyBXZWIgc2VydmljZXMiIGhyZWY9InRhc2tzL3RvdmVyd3MuaHRtbCI+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy54bWwiLz4KLTxsaW5rIHRvYz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLnVpLmRvYy51c2VyL3dzYXhpczJidWlsZF90b2MueG1sIi8+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLnhtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iVGVzdGluZyBhbmQgdmFsaWRhdGluZyBXZWIgc2VydmljZXMiPgotPHRvcGljIGxhYmVsPSJUZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgd2l0aCB0aGUgV1NETCBFeHBsb3JlciIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1NETCIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlRlc3RpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFRDUC9JUCBNb25pdG9yIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwiPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSBvZiBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sIi8+Ci08L3RvcGljPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBXZWIgc2VydmljZXMiPgotPGxpbmsgdG9jPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLnhtbCIvPgotPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIFdTSUwiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5odG1sIi8+Ci08L3RvcGljPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiNWQ2OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ5ZDg2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNmNGI2Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjExYWZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBXZWIgc2VydmljZXMgVUkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNjY0MzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MudWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTcyZGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxjb250ZXh0cz4KLQotPCEtLURSRVM6IFJlc291cmNlIFNlbGVjdGlvbiBEaWFsb2ctLT4KLTxjb250ZXh0IGlkPSJEUkVTMDAwMSI+Ci08IS0tUmVzb3VyY2UgVHlwZSBkcm9wIGRvd24tLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgYSByZXNvdXJjZSBmcm9tIHdoaWNoIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iRFJFUzAwMDIiPgotPCEtLVJlc291cmNlIHRyZWUtLT4KLTxkZXNjcmlwdGlvbj5MaXN0cyB0aGUgcmVzb3VyY2VzIHRoYXQgY2FuIGJlIHR1cm5lZCBpbnRvIGEgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVBQUk06IFJlc291cmNlIE1hbmFnZW1lbnQgUHJlZmVyZW5jZSBwYWdlLS0+Ci0KLTxjb250ZXh0IGlkPSJQUFJNMDAwMSI+Ci08IS0tbWFpbiBwYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlIFJlc291cmNlIE1hbmFnZW1lbnQgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBSTTAwMDIiPgotPCEtLUZpbGUgb3ZlcndyaXRlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlRoaXMgY2hlY2tib3ggYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQUk0wMDAzIj4KLTwhLS1DcmVhdGUgZm9sZGVycyBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVja2JveCB0byBjcmVhdGUgZm9sZGVycyBhbmQgZm9sZGVyIHN0cnVjdHVyZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFJNMDAwNCI+Ci08IS0tQ2hlY2sgb3V0IGZpbGVzIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrYm94IHRvIGNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBSTTAwMDUiPgotPCEtLVNrZWxldG9uIG1lcmdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gSWYgdGhpcyBjaGVjayBib3ggaXMgZW5hYmxlZCwgd2hlbiBhIHNrZWxldG9uIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUgbmV3bHkgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUgd2lsbCBtZXJnZSB3aXRoIHRoZSBleGlzdGluZyBza2VsZXRvbiBmaWxlLiAgRW5hYmxlIHRoaXMgdG8gcHJlc2VydmUgY29kZSB0aGF0IHlvdSBoYXZlIGFscmVhZHkgbW9kaWZpZWQgaW4gdGhlIGV4aXN0aW5nIHNrZWxldG9uIGZpbGVzLiAgCi0KLU5vdGUgdGhhdCB3aGVuIHRoaXMgcHJlZmVyZW5jZSBpcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBpbnRlcmZhY2UsIHRoZSByZXN1bHRpbmcgc2tlbGV0b24gZmlsZSB3aWxsIGhhdmUgYSBtZXRob2QgcmV0dXJuaW5nIHRoZSB0eXBlIGFzIGRlZmluZWQgaW4gdGhlIG5ldyBpbnRlcmZhY2UgYnV0IHdvdWxkIGhhdmUgYSBtZXRob2QgYm9keSBmcm9tIHRoZSBvcmlnaW5hbCBza2VsZXRvbiBmaWxlICh3aGljaCB3b3VsZCBiZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGNvbXBpbGF0aW9uIGVycm9yIHRoYXQgdGhlIHlvdSB3aWxsIGhhdmUgdG8gY29ycmVjdCBtYW51YWxseS4KLQotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVBQU0Q6IFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgcGFnZS0tPgotCi08IS0tU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEtLT4KLTxjb250ZXh0IGlkPSJQUFNEMDAwMSI+Ci08IS0tUFBTRDAwMDEgZm9yIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFNEMDAwMiI+Ci08IS0tUFBTRDAwMDIgZm9yIHRoZSBsYXVuY2ggc2FtcGxlIGNoZWNrIGJveCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlIFNjZW5hcmlvIERlZmF1bHRzIHByZWZlcmVuY2VzIGVuYWJsZSB5b3UgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0cyB0aGF0IHlvdSB3YW50IHRvIHVzZSB3aGVuIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuIAotCi1UaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuIFNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBsYXVuY2ggc2FtcGxlIGFwcGxpY2F0aW9uIGFmdGVyIGl0IGlzIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFNEMDAwNCI+Ci08IS0tUFBTRDAwMDQgZm9yIHRoZSBzYW1wbGUgSlNQIHR5cGUgY29tYm8gYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2Ygc2FtcGxlIEpTUCB0byBiZSBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDMiPgotPCEtLVBQU0QwMDAzIGZvciB0aGUgd2ViIGV4cGxvcmVyIHR5cGUgY29tYm8gYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4gU2VsZWN0IGZyb20gdGhlIGF2YWlsYWJsZSBXZWIgc2VydmljZXMgZXhwbG9yZXJzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDUiPgotPCEtLVBQU0QwMDA1IGZvciB0aGUgVXNlci1kZWZpbmVkIFVEREkgQ2F0ZWdvcnkgRGF0YSBDb2x1bW4gRGVsaW1pdGVyIHRleHQgZmllbGQgb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBjaGFyYWN0ZXIgeW91IHdhbnQgdG8gdXNlIGFzIGEgY29sdW1uIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkgQ2F0ZWdvcnkgZGF0YS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQU0QwMDA2Ij4KLTwhLS1QUFNEMDAwNiBmb3IgdGhlIFVzZXItZGVmaW5lZCBVRERJIENhdGVnb3J5IERhdGEgU3RyaW5nIERlbGltaXRlciB0ZXh0IGZpZWxkIG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgY2hhcmFjdGVyIHlvdSB3YW50IHRvIHVzZSBhcyBhIHN0cmluZyBkZWxpbWl0ZXIgZm9yIHVzZXItZGVmaW5lZCBVRERJIENhdGVnb3J5IGRhdGEuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08Y29udGV4dCBpZD0iUFBBRDAwMDQiPgotPCEtLSAgSGlkZSBnZW5lcmF0ZSBjbGllbnQgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA1Ij4KLTwhLS0gIEhpZGUgZ2VuZXJhdGUgc2FtcGxlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyBzYW1wbGUgSlNQIGNvZGUgZm9yIHRoZSBXZWIgc2VydmljZSB3aGVuIHlvdSByaWdodC1jbGljayBhIGZpbGUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgb3IgTmF2aWdhdG9yLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwNiI+Ci08IS0tICBjcmVhdGUgd2ViIHNlcnZpY2UgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA4Ij4KLTwhLS0gIGdlbmVyYXRlIHNrZWxldG9uIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyBza2VsZXRvbiBKYXZhIGNsYXNzZXMgd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwOSI+Ci08IS0tICBwdWJsaXNoIFdTREwgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBwdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZSdzIFdTREwgZmlsZSB0byBhIFVEREkgcmVnaXN0cnkgd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTwvY29udGV4dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NDY2OGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjM5NTBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGYwYjY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCTIwMDgtMDEtMDkgS2F0ZSBQcmljZSA8a2F0ZXBAY2EuaWJtLmNvbT4KLQktIG1vZGlmaWVkIGZvciBuZXcgRElUQS1PVCB2ZXJzaW9uCi0JMjAwOC0wNS0wNSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgdG8gYWRkIGdlbmVyYXRpb24gb2YgcHJlLWJ1aWx0IGhlbHAgaW5kZXguIAotCS0gTXVzdCBkZWxldGUgL2luZGV4IGZvbGRlciBiZWZvcmUgcnVubmluZyBidWlsZAotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIzLjMuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3NheGlzYW50X3RvYy5kaXRhbWFwIiAvPiAKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iYnVpbGQuaW5kZXgiIGRlc2NyaXB0aW9uPSJCdWlsZHMgc2VhcmNoIGluZGV4IGZvciB0aGUgcGx1Zy1pbiIgaWY9ImVjbGlwc2UucnVubmluZyI+Ci0JICAgICA8aGVscC5idWlsZEhlbHBJbmRleCBtYW5pZmVzdD0icGx1Z2luLnhtbCIgZGVzdGluYXRpb249Ii4iLz4KLQk8L3RhcmdldD4JCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWVjNjc1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuNS4yMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTcxODU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdzYXhpc2FudF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgdG9waWNzLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcmluZGV4LnhtbAotc3JjLmluY2x1ZGVzID0gKi5tYXBsaXN0LFwKLSAgICAgICAgICAgICAgICouZGl0YW1hcCxcCi0gICAgICAgICAgICAgICB0b3BpY3MvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcmluZGV4LnhtbAotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L182LmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L182LmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzNGVkNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9fNi5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9kZWxldGFibGUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5M2Y0NzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmI3MTNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMjA6MzE6MjIgRURUIDIwMDgNCi1vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXI9b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyXG4xLjUuMjAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MDk0ZWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDIwOjMxOjIyIEVEVCAyMDA4DQotbHVjZW5lPTEuOS4xLnYyMDA4MDMwNjE4MTENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMy4xMDAudjIwMDgwNDI1P2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNGU0OTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAyMDozMToyMiBFRFQgMjAwOA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuaHRtbD0wDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9zZWdtZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlMzI3ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9zZWdtZW50cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL215cGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExMDRkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9teXBsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi0KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNzggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci0KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgICAgPHRvYyBmaWxlPSJ3c2F4aXNhbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcmluZGV4LnhtbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWYyNjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLm1hcGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxtYXBsaXN0IHZlcnNpb249IjMuNi4yIj4NCi0gIDxuYXY+DQotICAgIDxtYXAgZmlsZT0id3NheGlzYW50X3RvYy5kaXRhbWFwIi8+DQotICA8L25hdj4NCi0gIDxsaW5rPg0KLSAgICA8bWFwIGZpbGU9IndzYXhpc2FudF90b2MuZGl0YW1hcCIvPg0KLSAgPC9saW5rPg0KLTwvbWFwbGlzdD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZWM0MTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL2N3c2F4aXNhbnQuaHRtbCNjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiIgdGl0bGU9IkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyIvPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R3YndzYS5odG1sI3R0ZHdzYSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2tlbGV0b24gV2ViIHNlcnZpY2VzIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJBbnQgdGFzayByZWZlcmVuY2UiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3J0ZHdzYS5odG1sI3RvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgdGl0bGU9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJqYXZhIGJlYW4gV2ViIHNlcnZpY2VzIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJBbnQgdGFzayByZWZlcmVuY2UiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3JidXdzYS5odG1sI2JvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHRpdGxlPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyBjbGllbnQiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIHdpdGggQW50IHRhc2tzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90d2J3c2NsaWVudGEuaHRtbCN0d3NjbGllbnRhIiB0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IkFudCB0YXNrIHJlZmVyZW5jZSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcndzY2xpZW50YS5odG1sI2F4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiIHRpdGxlPSJBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIHdpdGggQW50IHRhc2tzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jd3NheGlzYW50Lmh0bWwjY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iIHRpdGxlPSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90d2J3c2EuaHRtbCN0dGR3c2EiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIi8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdid3NjbGllbnRhLmh0bWwjdHdzY2xpZW50YSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R3YndzYS5odG1sI3R0ZHdzYSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iQW50IHRhc2sgcmVmZXJlbmNlIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9ydGR3c2EuaHRtbCN0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHRpdGxlPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9yYnV3c2EuaHRtbCNib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iQm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuaHRtbCNheGlzd2Vic2VydmljZWNsaWVudGNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJza2VsZXRvbiBXZWIgc2VydmljZXMiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3J0ZHdzYS5odG1sI3RvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgdGl0bGU9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJqYXZhIGJlYW4gV2ViIHNlcnZpY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9yYnV3c2EuaHRtbCNib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iQm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMgY2xpZW50Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90d2J3c2NsaWVudGEuaHRtbCN0d3NjbGllbnRhIiB0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzIi8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcndzY2xpZW50YS5odG1sI2F4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiIHRpdGxlPSJBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YzJkYWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXZWIgc2VydmljZXMgQXhpcyBBbnQgdGFzayBkb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExMDRkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDc4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICAgIDx0b2MgZmlsZT0id3NheGlzYW50X3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgPC9leHRlbnNpb24+Ci0gICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJpbmRleC54bWwiLz4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNTQ3ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWINCi1zZXJ2aWNlcyBBbnQgdGFza3M8L3RpdGxlPg0KLTx0aXRsZWFsdHM+DQotPHNlYXJjaHRpdGxlPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcNCi1BbnQgdGFza3M8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+SWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudA0KLWZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4NCi1UaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZQ0KLXVzaW5nIDxtZW51Y2FzY2FkZT48dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+DQotPC9tZW51Y2FzY2FkZT4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UNCi15b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QNCi1pdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmcNCi13aXRoIEFudCB0YXNrczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzDQotcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+Y3JlYXRpbmcgd2l0aCBBbnQgdGFza3M8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPGNvbmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlByZXJlcXVpc2l0ZXM8L3RpdGxlPjxwPkJlZm9yZSB5b3UgY3JlYXRlIGEgV2ViIHNlcnZpY2Ugb3INCi1jbGllbnQgdXNpbmcgdGhlIEFudCB0YXNrcywgeW91IG5lZWQgdG8gY29tcGxldGUgYSBmZXcgcHJlcmVxdWlzaXRlcy48L3A+PHVsPg0KLTxsaT5JbnN0YWxsIEFwYWNoZSBUb21jYXQsIGNyZWF0ZSBhIHNlcnZlciwgYW5kIGNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QNCi1hc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2ZXIgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhIg0KLXNjb3BlPSJwZWVyIj5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L3hyZWY+PC9saT4NCi08bGk+SW1wb3J0IHRoZSByZXF1aXJlZCBBbnQgZmlsZXMgaW50byB5b3VyIHdvcmtzcGFjZTo8b2w+DQotPGxpPkNyZWF0ZSBhIHByb2plY3QuPC9saT4NCi08bGk+SW1wb3J0IHRoZSByZXF1aXJlZCBBbnQgZmlsZXMuIFNlbGVjdCA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5OZXc8L3VpY29udHJvbD48dWljb250cm9sPk90aGVyPC91aWNvbnRyb2w+PHVpY29udHJvbD5XZWIgU2VydmljZXM8L3VpY29udHJvbD4NCi08dWljb250cm9sPkFudCBGaWxlczwvdWljb250cm9sPjx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LjwvbGk+DQotPGxpPlNlbGVjdCB0aGUgZm9sbG93aW5nOjx1bD4NCi08bGk+V2ViIHNlcnZpY2UgcnVudGltZTwvbGk+DQotPGxpPldlYiBzZXJ2aWNlIG9yIGNsaWVudCB0eXBlPC9saT4NCi08bGk+TG9jYXRpb24gaW50byB3aGljaCB0aGUgYW50IGZpbGVzIHdpbGwgYmUgZ2VuZXJhdGVkPC9saT4NCi08L3VsPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvbGk+DQotPC9vbD5EZXBlbmRpbmcgb24gdGhlIHNlbGVjdGlvbnMgbWFkZSBvbiB0aGUgcHJldmlvdXMgcGFuZWwsIHNldmVyYWwgZmlsZXMNCi1tYXkgYmUgaW1wb3J0ZWQgaW50byB0aGlzIHByb2plY3Q6PHVsPg0KLTxsaT48aT5ydW50aW1lX3NlcnZpY2V0eXBlPC9pPi54bWwgLSB0aGlzIGlzIHRoZSBBbnQgZmlsZS48L2xpPg0KLTxsaT48aT5ydW50aW1lX3NlcnZpY2V0eXBlPC9pPi5wcm9wZXJ0aWVzIC0gdGhpcyBpcyBhIHNhbXBsZSBBbnQgcHJvcGVydGllcw0KLWZpbGUgcmVmZXJlbmNlZCBieSB0aGUgQW50IGZpbGUuIFlvdSBjYW4gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgZmlsZQ0KLXRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QgZm9yIHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQuPC9saT4NCi08L3VsPjwvc2VjdGlvbj4NCi08c2VjdGlvbj48dGl0bGU+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBvciBjbGllbnQ8L3RpdGxlPjxwPk9uY2UgeW91J3ZlIGNvbXBsZXRlZA0KLXRoZSBwcmVyZXF1aXNpdGVzIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzo8L3A+PC9zZWN0aW9uPg0KLTwvY29uYm9keT4NCi08L2NvbmNlcHQ+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZGFkNTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgcHJlZmVyIG5vdCB0byB1c2UgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCwgeW91IGNhbiB1c2UgQW50IGZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdXNpbmcgUnVuIEFzICZndDsgQW50IEJ1aWxkLi4uLCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCBpdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudCBmaWxlcyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHVzaW5nIFJ1biBBcyAmZ3Q7IEFudCBCdWlsZC4uLiwgb3IgdGhleSBjYW4gYmUgcnVuIGhlYWRsZXNzIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZS4gT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QgaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3YndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nCi1BbnQgdGFza3M8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNyZWF0aW5nYXdlYnNlcnZpY2Vmcm9tYWphdmFiZWFuIj48YSBuYW1lPSJjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIKLXNlcnZpY2VzIEFudCB0YXNrczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudAotZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LgotVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UKLXVzaW5nIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuIEFzPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFudCBCdWlsZC4uLjwvc3Bhbj4KLTwvc3Bhbj4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UKLXlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdAotaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+UHJlcmVxdWlzaXRlczwvaDQ+PHA+QmVmb3JlIHlvdSBjcmVhdGUgYSBXZWIgc2VydmljZSBvcgotY2xpZW50IHVzaW5nIHRoZSBBbnQgdGFza3MsIHlvdSBuZWVkIHRvIGNvbXBsZXRlIGEgZmV3IHByZXJlcXVpc2l0ZXMuPC9wPgotPHVsPgotPGxpPkluc3RhbGwgQXBhY2hlIFRvbWNhdCwgY3JlYXRlIGEgc2VydmVyLCBhbmQgY3JlYXRlIGEgZHluYW1pYyBXZWIgcHJvamVjdAotYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmVyIGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9hPjwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcyBpbnRvIHlvdXIgd29ya3NwYWNlOjxvbD4KLTxsaT5DcmVhdGUgYSBwcm9qZWN0LjwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcy4gU2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdGhlcjwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZXM8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbnQgRmlsZXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj48L3NwYW4+LjwvbGk+Ci0KLTxsaT5TZWxlY3QgdGhlIGZvbGxvd2luZzo8dWw+Ci08bGk+V2ViIHNlcnZpY2UgcnVudGltZTwvbGk+Ci0KLTxsaT5XZWIgc2VydmljZSBvciBjbGllbnQgdHlwZTwvbGk+Ci0KLTxsaT5Mb2NhdGlvbiBpbnRvIHdoaWNoIHRoZSBhbnQgZmlsZXMgd2lsbCBiZSBnZW5lcmF0ZWQ8L2xpPgotCi08L3VsPgotQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L2xpPgotCi08L29sPgotRGVwZW5kaW5nIG9uIHRoZSBzZWxlY3Rpb25zIG1hZGUgb24gdGhlIHByZXZpb3VzIHBhbmVsLCBzZXZlcmFsIGZpbGVzCi1tYXkgYmUgaW1wb3J0ZWQgaW50byB0aGlzIHByb2plY3Q6PHVsPgotPGxpPjxlbT5ydW50aW1lX3NlcnZpY2V0eXBlPC9lbT4ueG1sIC0gdGhpcyBpcyB0aGUgQW50IGZpbGUuPC9saT4KLQotPGxpPjxlbT5ydW50aW1lX3NlcnZpY2V0eXBlPC9lbT4ucHJvcGVydGllcyAtIHRoaXMgaXMgYSBzYW1wbGUgQW50IHByb3BlcnRpZXMKLWZpbGUgcmVmZXJlbmNlZCBieSB0aGUgQW50IGZpbGUuIFlvdSBjYW4gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgZmlsZQotdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZS48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QgZm9yIHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBvciBjbGllbnQ8L2g0PjxwPk9uY2UgeW91J3ZlIGNvbXBsZXRlZAotdGhlIHByZXJlcXVpc2l0ZXMgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvYT48L3N0cm9uZz48YnIgLz4KLVlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3R3YndzY2xpZW50YS5odG1sIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L2E+PC9zdHJvbmc+PGJyIC8+Ci1JZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuPC9saT4KLTwvdWw+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhODUyZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiINCi0gInJlZmVyZW5jZS5kdGQiPg0KLTxyZWZlcmVuY2UgaWQ9ImJvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPg0KLTxzaG9ydGRlc2M+VGhlIDx1c2VyaW5wdXQ+YXhpc19idWphdmEucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlIGlzIHVzZWQNCi10byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlDQotLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+amF2YSBiZWFuIFdlYiBzZXJ2aWNlczxpbmRleHRlcm0+QW50DQotdGFzayByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPmphdmEgYmVhbiBXZWIgc2VydmljZXM8aW5kZXh0ZXJtPkFudCB0YXNrIHJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+PHBhcm1sPjxwbGVudHJ5Pg0KLTxwdD5TY2VuYXJpb1R5cGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+c2VydmljZTwvY29kZXBoPiA8L3N5bnBoPjwvcGQ+DQotPHBkPlRoaXMgaXMgYSByZXF1aXJlZCBlbGVtZW50IHRoYXQgdGVsbHMgdGhlIEFudCB0YXNrIGlmIGl0IGlzIGNyZWF0aW5nIGENCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+SW5pdGlhbFNlbGVjdGlvbjwvcHQ+DQotPHBkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbg0KLXlvdXIgd29ya3NwYWNlLiBGb3IgZXhhbXBsZSA8dXNlcmlucHV0Pi9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbDwvdXNlcmlucHV0PiBvciA8dXNlcmlucHV0Pi9keW5hbWljV2ViUHJvamVjdE5hbWUvc3JjL215QmVhbi5qYXZhPC91c2VyaW5wdXQNCi0+PC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pkxpc3RSdW50aW1lczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgcnVudGltZSBvcHRpb25zDQotd2lsbCBiZSBwcm92aWRlZCB3aGVuIHRoZSBBbnQgdGFzayBpcyBydW4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pkxpc3RTZXJ2ZXJzPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+SWYgPGNvZGVwaD50cnVlPC9jb2RlcGg+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBzZXJ2ZXIgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlLlJ1bnRpbWVJZDwvcHQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QNCi1iZSBtb2RpZmllZC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5TZXJ2ZXJJZDwvcHQ+DQotPHBkPk9wdGlvbnM6PHNsPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC54PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD4zMiwNCi00MCwgNDEsIDUwLDwvY29kZXBoPiBvciA8Y29kZXBoPjU1PC9jb2RlcGg+KTwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMud2VibG9naWN4PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD44MTwvY29kZXBoPiBvciA8Y29kZXBoPjkwPC9jb2RlcGg+KSA8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpib3NzeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIzPC9jb2RlcGg+IG9yIDxjb2RlcGg+NDwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvY29kZXBoPjwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMub3JhY2xlMTAxMzwvY29kZXBoPjwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVycy53ZWJzcGhlcmUuNjwvY29kZXBoPjwvc2xpPg0KLTwvc2w+PC9wZD4NCi08cGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIHRhcmdldCBzZXJ2ZXIuIERlbGV0ZSBvciBjb21tZW50IG91dCB0aGlzIHBhcmFtZXRlcg0KLXRvIGhhdmUgdGhlIEFudCB0YXNrIHNlbGVjdCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VydmVyIHNldHRpbmdzDQotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2VQcm9qZWN0TmFtZTwvcHQ+DQotPHBkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmENCi1iZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZSBwcm9qZWN0DQotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUNCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlDQotRUFSIHByb2plY3Qgd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5NYXBwaW5nczwvcHQ+DQotPHBkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGEgcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLjwvcGQ+DQotPHBkPk1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkDQotV1NETC4gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZT1uYW1lc3BhY2UuDQotWW91IHdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMuIA0KLUZvciBleGFtcGxlIDxjb2RlcGg+c29tZVBhY2thZ2U9aHR0cDovL3NvbWVOYW1lc3BhY2U8L2NvZGVwaD4gc2hvdWxkIGJlIDxjb2RlcGg+c29tZVBhY2thZ2U9aHR0cFw6Ly9zb21lTmFtZXNwYWNlPC9jb2RlcGg+Lg0KLSBPdGhlcndpc2UsIHRoZSBjb2xvbiAoOikgd291bGQgYmUgdHJlYXRlZCBhcyBkZWxpbWl0ZXIgcmVzdWx0aW5nIGluIHRyeWluZw0KLXRvIG1hcCA8Y29kZXBoPnNvbWVQYWNrYWdlPC9jb2RlcGg+IHRvIDxjb2RlcGg+aHR0cDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+SmF2YU91dHB1dDwvcHQ+DQotPHBkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGFuIGV4aXN0aW5nIEphdmEgc291cmNlIGZvbGRlciBmb3INCi10aGUgZ2VuZXJhdGVkIEphdmEgY29kZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWV0aG9kczwvcHQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byBsaW1pdCB3aGljaCBtZXRob2RzIGFyZSBleHBvc2VkIGluIHRoZSBzZXJ2aWNlLg0KLUl0IG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzLiBGb3INCi1leGFtcGxlLCA8dXNlcmlucHV0Pm1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMik8L3VzZXJpbnB1dD4uIElmDQotbm8gbGlzdCBpcyBwcm92aWRlZCwgYWxsIG1ldGhvZHMgYXJlIGV4cG9zZWQuIDwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TdHlsZTwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPiA8Y29kZXBoPlJQQzwvY29kZXBoPiA8Y29kZXBoPldSQVBQRUQ8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlNlbGVjdCB0aGUgU09BUCBtZXNzYWdlIHN0eWxlLiBUaGUgZGVmYXVsdCBpcyA8Y29kZXBoPkRPQ1VNRU5UPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5Vc2U8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+TElURVJBTDwvY29kZXBoPiA8Y29kZXBoPkVOQ09ERUQ8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlNlbGVjdCBpZiB0aGUgU09BUCBtZXNzYWdlIHdpbGwgYmUgbGl0ZXJhbCBvciBlbmNvZGVkLiBUaGUgZGVmYXVsdCBpcyA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdA0KLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Nlc3NhcnkgZm9sZGVycy4NCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dA0KLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjwvcGFybWw+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYjBkMTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc19idWphdmEucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBheGlzX2J1amF2YS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGphdmEgYmVhbiBXZWIgc2VydmljZXMsIEFudCB0YXNrIHJlZmVyZW5jZSwgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIEFudCB0YXNrIHJlZmVyZW5jZSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgamF2YSBiZWFuIFdlYiBzZXJ2aWNlcywgQW50IHRhc2sgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgQW50IHRhc2sgcmVmZXJlbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3YndzYS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImJvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIj48YSBuYW1lPSJib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19idWphdmEucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNlcnZpY2U8L3NhbXA+IDwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuU2VydmVySWQ8L2R0PgotCi08ZGQ+T3B0aW9uczo8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyLAotNDAsIDQxLCA1MCw8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjU1PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjgxPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj45MDwvc2FtcD4pIDwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIzPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj40PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9zYW1wPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncwotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZVByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWFwcGluZ3M8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQKLVdTREwuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2U9bmFtZXNwYWNlLgotWW91IHdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMuIAotRm9yIGV4YW1wbGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+c29tZVBhY2thZ2U9aHR0cDovL3NvbWVOYW1lc3BhY2U8L3NhbXA+IHNob3VsZCBiZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5zb21lUGFja2FnZT1odHRwXDovL3NvbWVOYW1lc3BhY2U8L3NhbXA+LgotIE90aGVyd2lzZSwgdGhlIGNvbG9uICg6KSB3b3VsZCBiZSB0cmVhdGVkIGFzIGRlbGltaXRlciByZXN1bHRpbmcgaW4gdHJ5aW5nCi10byBtYXAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+c29tZVBhY2thZ2U8L3NhbXA+IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkphdmFPdXRwdXQ8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYW4gZXhpc3RpbmcgSmF2YSBzb3VyY2UgZm9sZGVyIGZvcgotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWV0aG9kczwvZHQ+Ci0KLTxkZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4KLUl0IG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzLiBGb3IKLWV4YW1wbGUsIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+bWV0aG9kMShwYXJtVHlwZTEpIG1ldGhvZDIocGFybVR5cGUyKTwva2JkPi4gSWYKLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TdHlsZTwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5ET0NVTUVOVDwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+UlBDPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5XUkFQUEVEPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+RE9DVU1FTlQ8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlVzZTwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5MSVRFUkFMPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5FTkNPREVEPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+TElURVJBTDwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+T3ZlcndyaXRlRmlsZXNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQKLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Nlc3NhcnkgZm9sZGVycy4KLUJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjaGVja291dCBmaWxlcyBmcm9tIENWUyB3aXRob3V0Ci1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL3R3YndzYS5odG1sIiB0aXRsZT0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWFiMDAyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0idG9wLWRvd25heGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPg0KLTxzaG9ydGRlc2M+VGhlIDx1c2VyaW5wdXQ+YXhpc190ZGphdmEucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlIGlzIHVzZWQNCi10byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlDQotLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+c2tlbGV0b24gV2ViIHNlcnZpY2VzPGluZGV4dGVybT5BbnQNCi10YXNrIHJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzDQotcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+c2tlbGV0b24gV2ViIHNlcnZpY2VzPGluZGV4dGVybT5BbnQgdGFzayByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnNlcnZpY2U8L2NvZGVwaD4gPC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuU2VydmVySWQ8L3B0Pg0KLTxwZD5PcHRpb25zOjxzbD4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIsDQotNDAsIDQxLCA1MCw8L2NvZGVwaD4gb3IgPGNvZGVwaD41NTwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+ODE8L2NvZGVwaD4gb3IgPGNvZGVwaD45MDwvY29kZXBoPikgPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyMzwvY29kZXBoPiBvciA8Y29kZXBoPjQ8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L2NvZGVwaD48L3NsaT4NCi08L3NsPjwvcGQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXINCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncw0KLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZUVhclByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlDQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L3BkPg0KLTxwZD5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQNCi1KYXZhIHRlbXBsYXRlIGNsYXNzZXMuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0DQotbmFtZXNwYWNlPXBhY2thZ2UuIFlvdSB3aWxsIG5lZWQgdG8gZXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQ0KLXByb3BlcnRpZXMgZmlsZXMuICBGb3IgZXhhbXBsZSA8Y29kZXBoPmh0dHA6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+IHNob3VsZA0KLWJlIDxjb2RlcGg+aHR0cFw6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+LiAgT3RoZXJ3aXNlLCB0aGUgY29sb24NCi0oOikgd291bGQgYmUgdHJlYXRlZCBhcyBkZWxpbWl0ZXIgcmVzdWx0aW5nIGluIHRyeWluZyB0byBtYXAgPGNvZGVwaD5odHRwPC9jb2RlcGg+IHRvIDxjb2RlcGg+Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5KYXZhT3V0cHV0PC9wdD4NCi08cGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYW4gZXhpc3RpbmcgSmF2YSBzb3VyY2UgZm9sZGVyIGZvcg0KLXRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5NZXRob2RzPC9wdD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHdoaWNoIG1ldGhvZHMgYXJlIGV4cG9zZWQgaW4gdGhlIHNlcnZpY2UuDQotSXQgbXVzdCBiZSBpbiB0aGUgZm9ybSBvZiBhIHNwYWNlIGRlbGltaXRlZCBzdHJpbmcgb2YgbWV0aG9kIHNpZ25hdHVyZXMuIEZvcg0KLWV4YW1wbGUsIDx1c2VyaW5wdXQ+bWV0aG9kMShwYXJtVHlwZTEpIG1ldGhvZDIocGFybVR5cGUyKTwvdXNlcmlucHV0Pi4gSWYNCi1ubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4gPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlN0eWxlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPkRPQ1VNRU5UPC9jb2RlcGg+IDxjb2RlcGg+UlBDPC9jb2RlcGg+IDxjb2RlcGg+V1JBUFBFRDwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+U2VsZWN0IHRoZSBTT0FQIG1lc3NhZ2Ugc3R5bGUuIFRoZSBkZWZhdWx0IGlzIDxjb2RlcGg+RE9DVU1FTlQ8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlVzZTwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD5MSVRFUkFMPC9jb2RlcGg+IDxjb2RlcGg+RU5DT0RFRDwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+U2VsZWN0IGlmIHRoZSBTT0FQIG1lc3NhZ2Ugd2lsbCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuIFRoZSBkZWZhdWx0IGlzIDxjb2RlcGg+TElURVJBTDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+T3ZlcndyaXRlRmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIG92ZXJ3cml0ZSBhbnkgZmlsZSB0aGF0IGl0DQotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNyZWF0ZUZvbGRlcnNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjZXNzYXJ5IGZvbGRlcnMuDQotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNoZWNrb3V0RmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQNCi1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48L3Bhcm1sPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmJmMTA5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc190ZGphdmEucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBheGlzX3RkamF2YS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNrZWxldG9uIFdlYiBzZXJ2aWNlcywgQW50IHRhc2sgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgQW50IHRhc2sgcmVmZXJlbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBza2VsZXRvbiBXZWIgc2VydmljZXMsIEFudCB0YXNrIHJlZmVyZW5jZSwgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIEFudCB0YXNrIHJlZmVyZW5jZSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSI+PGEgbmFtZT0idG9wLWRvd25heGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzX3RkamF2YS5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgaXMgdXNlZAotdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQotLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlBhcmFtZXRlcnM8L2g0PjxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TY2VuYXJpb1R5cGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+c2VydmljZTwvc2FtcD4gPC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlRoaXMgaXMgYSByZXF1aXJlZCBlbGVtZW50IHRoYXQgdGVsbHMgdGhlIEFudCB0YXNrIGlmIGl0IGlzIGNyZWF0aW5nIGEKLVdlYiBzZXJ2aWNlIG9yIGEgV2ViIHNlcnZpY2UgY2xpZW50LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkluaXRpYWxTZWxlY3Rpb248L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIFdTREwgZmlsZSBvciBKYXZhIGJlYW4gd2l0aGluCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L2tiZD4gb3IgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwva2JkPjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RSdW50aW1lczwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+SWYgPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucwotd2lsbCBiZSBwcm92aWRlZCB3aGVuIHRoZSBBbnQgdGFzayBpcyBydW4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TGlzdFNlcnZlcnM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBzZXJ2ZXIgb3B0aW9ucwotd2lsbCBiZSBwcm92aWRlZCB3aGVuIHRoZSBBbnQgdGFzayBpcyBydW4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZS5SdW50aW1lSWQ8L2R0PgotCi08ZGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIFdlYiBzZXJ2aWNlJ3MgcnVudGltZS4gVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIG5vdAotYmUgbW9kaWZpZWQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZS5TZXJ2ZXJJZDwvZHQ+Ci0KLTxkZD5PcHRpb25zOjx1bCBjbGFzcz0ic2ltcGxlIj4KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC54PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIsCi00MCwgNDEsIDUwLDwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+NTU8L3NhbXA+KTwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMud2VibG9naWN4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+ODE8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjkwPC9zYW1wPikgPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj4zMjM8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjQ8L3NhbXA+KTwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuam9uYXM0PC9zYW1wPjwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMub3JhY2xlMTAxMzwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L3NhbXA+PC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXIKLXRvIGhhdmUgdGhlIEFudCB0YXNrIHNlbGVjdCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VydmVyIHNldHRpbmdzCi1vZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3IgSmF2YQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdAotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2VFYXJQcm9qZWN0TmFtZTwvZHQ+Ci0KLTxkZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUKLW9yIEphdmEgYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UKLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5NYXBwaW5nczwvZHQ+Ci0KLTxkZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQKLUphdmEgdGVtcGxhdGUgY2xhc3Nlcy4gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQKLW5hbWVzcGFjZT1wYWNrYWdlLiBZb3Ugd2lsbCBuZWVkIHRvIGVzY2FwZSBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKLXByb3BlcnRpZXMgZmlsZXMuICBGb3IgZXhhbXBsZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvc2FtcD4gc2hvdWxkCi1iZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwXDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+LiAgT3RoZXJ3aXNlLCB0aGUgY29sb24KLSg6KSB3b3VsZCBiZSB0cmVhdGVkIGFzIGRlbGltaXRlciByZXN1bHRpbmcgaW4gdHJ5aW5nIHRvIG1hcCA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwPC9zYW1wPiB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj4vL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkphdmFPdXRwdXQ8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYW4gZXhpc3RpbmcgSmF2YSBzb3VyY2UgZm9sZGVyIGZvcgotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWV0aG9kczwvZHQ+Ci0KLTxkZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4KLUl0IG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzLiBGb3IKLWV4YW1wbGUsIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+bWV0aG9kMShwYXJtVHlwZTEpIG1ldGhvZDIocGFybVR5cGUyKTwva2JkPi4gSWYKLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TdHlsZTwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5ET0NVTUVOVDwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+UlBDPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5XUkFQUEVEPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+RE9DVU1FTlQ8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlVzZTwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5MSVRFUkFMPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5FTkNPREVEPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+TElURVJBTDwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+T3ZlcndyaXRlRmlsZXNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQKLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Vzc2FyeSBmb2xkZXJzLgotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DaGVja291dEZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQKLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIHRpdGxlPSJZb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgQW50IHRhc2tzLiI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1YzIyYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiINCi0gInJlZmVyZW5jZS5kdGQiPg0KLTxyZWZlcmVuY2UgaWQ9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPg0KLTxzaG9ydGRlc2M+VGhlIDx1c2VyaW5wdXQ+YXhpc19jbGllbnQucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlIGlzIHVzZWQNCi10byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlDQotY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2VzIGNsaWVudDxpbmRleHRlcm0+QW50DQotdGFzayByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlcyBjbGllbnQ8aW5kZXh0ZXJtPkFudCB0YXNrIHJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+PHBhcm1sPjxwbGVudHJ5Pg0KLTxwdD5TY2VuYXJpb1R5cGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+Y2xpZW50PC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50LlJ1bnRpbWVJZDwvcHQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QNCi1iZSBtb2RpZmllZC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50LlNlcnZlcklkPC9wdD4NCi08cGQ+T3B0aW9uczo8c2w+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyLA0KLTQwLCA0MSwgNTAsPC9jb2RlcGg+IG9yIDxjb2RlcGg+NTU8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjgxPC9jb2RlcGg+IG9yIDxjb2RlcGg+OTA8L2NvZGVwaD4pIDwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD4zMjM8L2NvZGVwaD4gb3IgPGNvZGVwaD40PC9jb2RlcGg+KTwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuam9uYXM0PC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9jb2RlcGg+PC9zbGk+DQotPC9zbD48L3BkPg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyDQotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MNCi1vZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50UHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmENCi1iZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZSBwcm9qZWN0DQotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DbGllbnRFYXJQcm9qZWN0TmFtZTwvcHQ+DQotPHBkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yDQotSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50Q29tcG9uZW50VHlwZTwvcHQ+DQotPHBkPjxwPk9wdGlvbnM6IDx1c2VyaW5wdXQ+anN0LndlYjwvdXNlcmlucHV0PiA8dXNlcmlucHV0PmpzdC5qYXZhPC91c2VyaW5wdXQ+PC9wPjxwPlVzZQ0KLXRoaXMgcGFyYW1ldGVyIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBjbGllbnQgcHJvamVjdC4gVGhlIG9ubHkgdmFsaWQgY2xpZW50DQotcHJvamVjdCB0eXBlIGZvciBBeGlzIGNsaWVudHMgaXMgPHVzZXJpbnB1dD5qc3Qud2ViPC91c2VyaW5wdXQ+LjwvcD48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3VzdG9taXplQ2xpZW50TWFwcGluZ3M8L3B0Pg0KLTxwZD48cD5PcHRpb25zOiA8dXNlcmlucHV0PnRydWU8L3VzZXJpbnB1dD4gPHVzZXJpbnB1dD5mYWxzZTwvdXNlcmlucHV0PjwvcD48cD5NYXBwaW5ncw0KLWFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuIFRoZQ0KLWNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgbmFtZXNwYWNlPXBhY2thZ2UuIFlvdQ0KLXdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMuICBGb3INCi1leGFtcGxlIDxjb2RlcGg+aHR0cDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L2NvZGVwaD4gc2hvdWxkIGJlIDxjb2RlcGg+aHR0cFw6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+Lg0KLSBPdGhlcndpc2UsIHRoZSBjb2xvbiAoOikgd291bGQgYmUgdHJlYXRlZCBhcyBkZWxpbWl0ZXIgcmVzdWx0aW5nIGluIHRyeWluZw0KLXRvIG1hcCA8Y29kZXBoPmh0dHA8L2NvZGVwaD4gdG8gPGNvZGVwaD4vL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L2NvZGVwaD4uPC9wPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5NYXBwaW5nczwvcHQ+DQotPHBkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGEgcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLiA8L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+T3ZlcndyaXRlRmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIG92ZXJ3cml0ZSBhbnkgZmlsZSB0aGF0IGl0DQotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNyZWF0ZUZvbGRlcnNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjY2Vzc2FyeSBmb2xkZXJzLg0KLUJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DaGVja291dEZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjaGVja291dCBmaWxlcyBmcm9tIENWUyB3aXRob3V0DQotcHJvbXB0aW5nIHlvdS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PC9wYXJtbD48L3NlY3Rpb24+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzhlODljLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBheGlzX2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGF4aXNfY2xpZW50LnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzIGNsaWVudCwgQW50IHRhc2sgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgQW50IHRhc2sgcmVmZXJlbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMgY2xpZW50LCBBbnQgdGFzayByZWZlcmVuY2UsIFdlYiBzZXJ2aWNlcywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBBbnQgdGFzayByZWZlcmVuY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYXhpc3dlYnNlcnZpY2VjbGllbnRjb21tYW5kbGluZXJlZmVyZW5jZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiPjxhIG5hbWU9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzX2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgaXMgdXNlZAotdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQotY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlBhcmFtZXRlcnM8L2g0PjxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TY2VuYXJpb1R5cGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+Y2xpZW50PC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudC5SdW50aW1lSWQ8L2R0PgotCi08ZGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIFdlYiBzZXJ2aWNlJ3MgcnVudGltZS4gVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIG5vdAotYmUgbW9kaWZpZWQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50LlNlcnZlcklkPC9kdD4KLQotPGRkPk9wdGlvbnM6PHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj4zMiwKLTQwLCA0MSwgNTAsPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj41NTwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj44MTwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+OTA8L3NhbXA+KSA8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpib3NzeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyMzwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+NDwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9zYW1wPjwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVycy53ZWJzcGhlcmUuNjwvc2FtcD48L2xpPgotCi08L3VsPgotPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIHRhcmdldCBzZXJ2ZXIuIERlbGV0ZSBvciBjb21tZW50IG91dCB0aGlzIHBhcmFtZXRlcgotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MKLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudFByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3IgSmF2YQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdAotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudEVhclByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yCi1KYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50Q29tcG9uZW50VHlwZTwvZHQ+Ci0KLTxkZD48cD5PcHRpb25zOiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmpzdC53ZWI8L2tiZD4gPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5qc3QuamF2YTwva2JkPjwvcD4KLTxwPlVzZQotdGhpcyBwYXJhbWV0ZXIgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIGNsaWVudCBwcm9qZWN0LiBUaGUgb25seSB2YWxpZCBjbGllbnQKLXByb2plY3QgdHlwZSBmb3IgQXhpcyBjbGllbnRzIGlzIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+anN0LndlYjwva2JkPi48L3A+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DdXN0b21pemVDbGllbnRNYXBwaW5nczwvZHQ+Ci0KLTxkZD48cD5PcHRpb25zOiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPnRydWU8L2tiZD4gPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5mYWxzZTwva2JkPjwvcD4KLTxwPk1hcHBpbmdzCi1hcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBXU0RMLiBUaGUKLWNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgbmFtZXNwYWNlPXBhY2thZ2UuIFlvdQotd2lsbCBuZWVkIHRvIGVzY2FwZSBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcHJvcGVydGllcyBmaWxlcy4gIEZvcgotZXhhbXBsZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvc2FtcD4gc2hvdWxkIGJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHBcOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvc2FtcD4uCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcKLXRvIG1hcCA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwPC9zYW1wPiB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj4vL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+LjwvcD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1hcHBpbmdzPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGEgcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdAotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjY2Vzc2FyeSBmb2xkZXJzLgotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DaGVja291dEZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQKLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIHRpdGxlPSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjNlMWU3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idHRkd3NhIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC90aXRsZT4NCi08dGl0bGVhbHRzPg0KLTxzZWFyY2h0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+WW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViDQotc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYg0KLXNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nDQotd2l0aCBBbnQgdGFza3M8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmcgd2l0aCBBbnQgdGFza3M8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+QmVmb3JlIGNyZWF0aW5nIHRoZSBXZWIgc2VydmljZSB5b3UgbXVzdDo8dWw+DQotPGxpPmNvbXBsZXRlIHRoZSBwcmVyZXF1aXNpdGVzIGxpc3RlZCBpbjogPHhyZWYgaHJlZj0iY3dzYXhpc2FudC5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+aWYgeW91IGFyZSBjcmVhdGluZyBhIHRvcC1kb3duIFdlYiBzZXJ2aWNlLCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlDQotaW50byB0aGUgPHVzZXJpbnB1dD5XZWJDb250ZW50PC91c2VyaW5wdXQ+IGZvbGRlciBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdA0KLXlvdSBjcmVhdGVkLjwvbGk+DQotPGxpPklmIHlvdSBhcmUgY3JlYXRpbmcgYSBib3R0b20tdXAgV2ViIHNlcnZpY2UsIGNyZWF0ZSBvciBpbXBvcnQgYSBKYXZhIGJlYW4NCi1pbnRvIHRoZSA8dXNlcmlucHV0PnNyYzwvdXNlcmlucHV0PiBmb2xkZXIgb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9saT4NCi08L3VsPjwvcHJlcmVxPg0KLTxjb250ZXh0PkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgeW91IG5lZWQgdG8gbW9kaWZ5IHRoZSBBbnQgZmlsZQ0KLWFuZCB0aGUgc2VydmljZSBBbnQgcHJvcGVydGllcyBmaWxlLjwvY29udGV4dD4NCi08c3RlcHM+DQotPHN0ZXA+PGNtZD5FZGl0IHRoZSBBbnQgZmlsZSAoPHVzZXJpbnB1dD5heGlzX3RkamF2YS54bWw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD5heGlzX2J1amF2YS54bWw8L3VzZXJpbnB1dD4pDQotdGhhdCB5b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZSBzdGVwcy4gRW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIHRoZQ0KLXNlcnZpY2UgQW50IHByb3BlcnRpZXMgZmlsZTogaXQgc2hvdWxkIGNvbnRhaW4gYSBsaW5lIHN0YXRpbmcgPHVzZXJpbnB1dD4mbHQ7cHJvcGVydHkNCi1maWxlPSJheGlzX3RkamF2YS5wcm9wZXJ0aWVzIi8+PC91c2VyaW5wdXQ+IG9yIDx1c2VyaW5wdXQ+Jmx0O3Byb3BlcnR5IGZpbGU9ImF4aXNfYnVqYXZhLnByb3BlcnRpZXMiLz48L3VzZXJpbnB1dD4uPC9jbWQ+DQotPGluZm8+U2F2ZSBhbnkgY2hhbmdlcyB0aGF0IHlvdSBoYXZlIG1hZGUuPC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPkVkaXQgdGhlIHByb3BlcnRpZXMgZmlsZSB0aGF0IHlvdSBpbXBvcnRlZCBpbiB0aGUgcHJlcmVxdWlzaXRlDQotc3RlcHMuPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW5zdXJlIHRoYXQgdGhlIHNjZW5hcmlvVHlwZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHNlcnZpY2UuPC9jbWQ+DQotPC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2V0IHRoZSB3b3Jrc3BhY2UgcGFyYW1ldGVyIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbg0KLW9mIHlvdXIgV1NETCBmaWxlIG9yIEphdmEgYmVhbi48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdA0KLWV4cGxpY2l0bHkgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIGJlIHJldHJpZXZlZA0KLWZyb20gdGhlIGR5bmFtaWMgcHJvamVjdCBzZXR0aW5ncyBhbmQgcHJlZmVyZW5jZXMuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotb24gaG93IHRvIHNldCB0aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8L2NtZD48aW5mbz48dWw+DQotPGxpPjx4cmVmIGhyZWY9InJ0ZHdzYS5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+PHhyZWYgaHJlZj0icmJ1d3NhLmRpdGEiPjwveHJlZj48L2xpPg0KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4NCi08L3N1YnN0ZXBzPg0KLTxpbmZvPlNhdmUgdGhlIHByb3BlcnRpZXMgZmlsZS48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+UmlnaHQtY2xpY2sgPHVzZXJpbnB1dD5heGlzX3RkamF2YS54bWw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD5heGlzX2J1amF2YS54bWw8L3VzZXJpbnB1dD4gYW5kDQotc2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+DQotPC9tZW51Y2FzY2FkZT48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5KUkU8L3VpY29udHJvbD4gdGFiDQotYW5kIHNlbGVjdCA8dWljb250cm9sPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvdWljb250cm9sPi48L2NtZD4NCi08aW5mbz5DbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+UnVuPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPHVzZXJpbnB1dD5CdWlsZA0KLVN1Y2Nlc3NmdWw8L3VzZXJpbnB1dD4gbWVzc2FnZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PlRoZSBXU0RMIGZpbGUgZm9yIHRoZSBzZXJ2aWNlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbg0KLXRoZSBkeW5hbWljIFdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFx3c2RsIGZvbGRlci4gVGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsDQotaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzDQotV2ViQ29udGVudFxXRUItSU5GIGZvbGRlcjo8dWw+DQotPGxpPndlYi54bWw8L2xpPg0KLTxsaT51bmRlcGxveS53c2RkPC9saT4NCi08bGk+ZGVwbG95LndzZGQgPC9saT4NCi08L3VsPklmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgV2ViIHNlcnZpY2UgZmlsZXMgc2ltaWxhcg0KLXRvIHRoZSBmb2xsb3dpbmcgb25lcyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzDQotc3JjIGZvbGRlci4gRGVwZW5kaW5nIG9uIHRoZSBXU0RMIGZpbGUgb24gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIGlzIGJhc2VkLA0KLXRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBtYXkgYmUgZGlmZmVyZW50Ojx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9Qb3J0VHlwZS5qYXZhPC9saT4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9TZXJ2aWNlLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+X1NlcnZpY2VMb2NhdG9yLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+U09BUEltcGwuamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5TT0FQU2tlbGV0b24uamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5TT0FQU3R1Yi5qYXZhPC9saT4NCi08L3VsPiA8L3Jlc3VsdD4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MzI0OTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY3dzYXhpc2FudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcnRkd3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9yYnV3c2EuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0dGR3c2EiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR0ZHdzYSI+PGEgbmFtZT0idHRkd3NhIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC9oMT4KLQotCi0KLQotPGRpdj48cD5Zb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIKLXNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIKLXNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5CZWZvcmUgY3JlYXRpbmcgdGhlIFdlYiBzZXJ2aWNlIHlvdSBtdXN0Ojx1bD4KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDxhIGhyZWY9ImN3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQmIzEwO2ZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4mIzEwO1RoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlJiMxMDt1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UmIzEwO3lvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCYjMTA7aXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3M8L2E+PC9saT4KLQotPGxpPmlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZQotaW50byB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5XZWJDb250ZW50PC9rYmQ+IGZvbGRlciBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdAoteW91IGNyZWF0ZWQuPC9saT4KLQotPGxpPklmIHlvdSBhcmUgY3JlYXRpbmcgYSBib3R0b20tdXAgV2ViIHNlcnZpY2UsIGNyZWF0ZSBvciBpbXBvcnQgYSBKYXZhIGJlYW4KLWludG8gdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+c3JjPC9rYmQ+IGZvbGRlciBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgeW91IG5lZWQgdG8gbW9kaWZ5IHRoZSBBbnQgZmlsZQotYW5kIHRoZSBzZXJ2aWNlIEFudCBwcm9wZXJ0aWVzIGZpbGUuPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RWRpdCB0aGUgQW50IGZpbGUgKDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc190ZGphdmEueG1sPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19idWphdmEueG1sPC9rYmQ+KQotdGhhdCB5b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZSBzdGVwcy4gRW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIHRoZQotc2VydmljZSBBbnQgcHJvcGVydGllcyBmaWxlOiBpdCBzaG91bGQgY29udGFpbiBhIGxpbmUgc3RhdGluZyA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPiZsdDtwcm9wZXJ0eQotZmlsZT0iYXhpc190ZGphdmEucHJvcGVydGllcyIvJmd0Ozwva2JkPiBvciA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPiZsdDtwcm9wZXJ0eSBmaWxlPSJheGlzX2J1amF2YS5wcm9wZXJ0aWVzIi8mZ3Q7PC9rYmQ+Ljwvc3Bhbj4KLSBTYXZlIGFueSBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVkaXQgdGhlIHByb3BlcnRpZXMgZmlsZSB0aGF0IHlvdSBpbXBvcnRlZCBpbiB0aGUgcHJlcmVxdWlzaXRlCi1zdGVwcy48L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPkVuc3VyZSB0aGF0IHRoZSBzY2VuYXJpb1R5cGUgcGFyYW1ldGVyIGlzIHNldCB0byBzZXJ2aWNlLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2V0IHRoZSB3b3Jrc3BhY2UgcGFyYW1ldGVyIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbgotb2YgeW91ciBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPkFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBhbmQgc2hvdWxkIGJlIGRlbGV0ZWQgaWYgbm90Ci1leHBsaWNpdGx5IHNldC4gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgd2lsbCBiZSByZXRyaWV2ZWQKLWZyb20gdGhlIGR5bmFtaWMgcHJvamVjdCBzZXR0aW5ncyBhbmQgcHJlZmVyZW5jZXMuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1vbiBob3cgdG8gc2V0IHRoZXNlIHBhcmFtZXRlcnMgcmVmZXIgdG86IDwvc3Bhbj4gPHVsPgotPGxpPjxhIGhyZWY9InJ0ZHdzYS5odG1sIiB0aXRsZT0iVGhlIGF4aXNfdGRqYXZhLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkJiMxMDt0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlJiMxMDsuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InJidXdzYS5odG1sIiB0aXRsZT0iVGhlIGF4aXNfYnVqYXZhLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkJiMxMDt0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlJiMxMDsuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIj5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08L29sPgotCi0gU2F2ZSB0aGUgcHJvcGVydGllcyBmaWxlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+UmlnaHQtY2xpY2sgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzX3RkamF2YS54bWw8L2tiZD4gb3IgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzX2J1amF2YS54bWw8L2tiZD4gYW5kCi1zZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gQXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEJ1aWxkLi4uPC9zcGFuPgotPC9zcGFuPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KUkU8L3NwYW4+IHRhYgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3NwYW4+Ljwvc3Bhbj4KLSBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+QnVpbGQKLVN1Y2Nlc3NmdWw8L2tiZD4gbWVzc2FnZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIFdTREwgZmlsZSBmb3IgdGhlIHNlcnZpY2Ugd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluCi10aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcd3NkbCBmb2xkZXIuIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbAotaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzCi1XZWJDb250ZW50XFdFQi1JTkYgZm9sZGVyOjx1bD4KLTxsaT53ZWIueG1sPC9saT4KLQotPGxpPnVuZGVwbG95LndzZGQ8L2xpPgotCi08bGk+ZGVwbG95LndzZGQgPC9saT4KLQotPC91bD4KLUlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgV2ViIHNlcnZpY2UgZmlsZXMgc2ltaWxhcgotdG8gdGhlIGZvbGxvd2luZyBvbmVzIHdpbGwgYmUgY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0J3MKLXNyYyBmb2xkZXIuIERlcGVuZGluZyBvbiB0aGUgV1NETCBmaWxlIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZSBpcyBiYXNlZCwKLXRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBtYXkgYmUgZGlmZmVyZW50Ojx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fUG9ydFR5cGUuamF2YTwvbGk+Ci0KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fU2VydmljZS5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPl9TZXJ2aWNlTG9jYXRvci5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPlNPQVBJbXBsLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUFNrZWxldG9uLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUFN0dWIuamF2YTwvbGk+Ci0KLTwvdWw+Ci0gPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J0ZHdzYS5odG1sIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgYXhpc190ZGphdmEucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3JidXdzYS5odG1sIj5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIGF4aXNfYnVqYXZhLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhNTRmNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InR3c2NsaWVudGEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrczwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYW4gQXhpcyBydW50aW1lIFdlYiBzZXJ2aWNlIGNsaWVudCBmcm9tIGEgV1NETCBmaWxlDQotdXNpbmcgY29tbWFuZCBsaW5lIHRvb2xzPC9zZWFyY2h0aXRsZT4NCi08L3RpdGxlYWx0cz4NCi08c2hvcnRkZXNjPklmIHlvdSBoYXZlIGEgV1NETCBmaWxlIHlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZQ0KLXRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ljwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2VzIGNsaWVudDxpbmRleHRlcm0+Y3JlYXRpbmcNCi13aXRoIEFudCB0YXNrczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzDQotcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2VzIGNsaWVudDxpbmRleHRlcm0+Y3JlYXRpbmcgd2l0aA0KLUFudCB0YXNrczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHk+DQotPHByZXJlcT5CZWZvcmUgY3JlYXRpbmcgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCB5b3UgbXVzdDo8dWw+DQotPGxpPmNvbXBsZXRlIHRoZSBwcmVyZXF1aXNpdGVzIGxpc3RlZCBpbjogPHhyZWYgaHJlZj0iY3dzYXhpc2FudC5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+Y3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0IHlvdSBjcmVhdGVkLjwvbGk+DQotPC91bD48L3ByZXJlcT4NCi08Y29udGV4dD5JbiBvcmRlciB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCB5b3UgbmVlZCB0byBtb2RpZnkgdGhlDQotQW50IGZpbGUgYW5kIHRoZSBBbnQgcHJvcGVydGllcyBmaWxlLjwvY29udGV4dD4NCi08c3RlcHM+DQotPHN0ZXA+PGNtZD5FZGl0IHRoZSBBbnQgZmlsZSAoPHVzZXJpbnB1dD5heGlzX2NsaWVudC54bWw8L3VzZXJpbnB1dD4pIHRoYXQNCi15b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZSBzdGVwcy4gRW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBjbGllbnQNCi1BbnQgcHJvcGVydGllcyBmaWxlOiBpdCBzaG91bGQgY29udGFpbiBhIGxpbmUgc3RhdGluZyA8dXNlcmlucHV0PiZsdDtwcm9wZXJ0eQ0KLWZpbGU9ImF4aXNfY2xpZW50LnByb3BlcnRpZXMiLz48L3VzZXJpbnB1dD4uPC9jbWQ+PGluZm8+U2F2ZSBhbnkgY2hhbmdlcyB0aGF0DQoteW91IGhhdmUgbWFkZS48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+RWRpdCB0aGUgPHVzZXJpbnB1dD5heGlzX2NsaWVudC5wcm9wZXJ0aWVzPC91c2VyaW5wdXQ+IGZpbGUgdGhhdA0KLXlvdSBpbXBvcnRlZCBpbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLjwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPkVuc3VyZSB0aGF0IHRoZSBzY2VuYXJpb1R5cGUgcGFyYW1ldGVyIGlzIHNldCB0byBjbGllbnQuPC9jbWQ+DQotPC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2V0IHRoZSB3b3Jrc3BhY2UgcGFyYW1ldGVyIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbg0KLW9mIHlvdXIgV1NETCBmaWxlLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPkFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBhbmQgc2hvdWxkIGJlIGRlbGV0ZWQgaWYgbm90DQotZXhwbGljaXRseSBzZXQuIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0cmlldmVkDQotZnJvbSB0aGUgZHluYW1pYyBwcm9qZWN0IHNldHRpbmdzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0DQotdGhlc2UgcGFyYW1ldGVycyByZWZlciB0bzogPHhyZWYgaHJlZj0icndzY2xpZW50YS5kaXRhIj48L3hyZWY+PC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPGluZm8+U2F2ZSB0aGUgPHVzZXJpbnB1dD5heGlzX2NsaWVudC5wcm9wZXJ0aWVzPC91c2VyaW5wdXQ+IGZpbGUuPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPlJpZ2h0LWNsaWNrIDx1c2VyaW5wdXQ+YXhpc19jbGllbnQueG1sPC91c2VyaW5wdXQ+IGFuZCBzZWxlY3QgPG1lbnVjYXNjYWRlPg0KLTx1aWNvbnRyb2w+UnVuIEFzPC91aWNvbnRyb2w+PHVpY29udHJvbD5BbnQgQnVpbGQuLi48L3VpY29udHJvbD48L21lbnVjYXNjYWRlPjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8dWljb250cm9sPkpSRTwvdWljb250cm9sPiB0YWINCi1hbmQgc2VsZWN0IDx1aWNvbnRyb2w+UnVuIGluIHRoZSBzYW1lIEpSRSBhcyB0aGUgd29ya3NwYWNlPC91aWNvbnRyb2w+LjwvY21kPg0KLTxpbmZvPkNsaWNrIDx1aWNvbnRyb2w+QXBwbHk8L3VpY29udHJvbD4gYW5kIHRoZW4gY2xpY2sgPHVpY29udHJvbD5SdW48L3VpY29udHJvbD4uPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPk9uY2UgeW91ciBXZWIgc2VydmljZSBoYXMgYmVlbiBnZW5lcmF0ZWQgdGhlIGNvbnNvbGUgZGlzcGxheXMgYSA8dXNlcmlucHV0PkJ1aWxkDQotU3VjY2Vzc2Z1bDwvdXNlcmlucHV0PiBtZXNzYWdlLjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxyZXN1bHQ+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMNCi1XZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcd3NkbCBmb2xkZXI6PHVsPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+U09BUC53c2RsIDwvbGk+DQotPC91bD5UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiB0aGUgZHluYW1pYw0KLVdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFxXRUItSU5GIGZvbGRlcjo8dWw+DQotPGxpPnVuZGVwbG95LndzZGQ8L2xpPg0KLTxsaT5kZXBsb3kud3NkZCA8L2xpPg0KLTwvdWw+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgdW5kZXIgdGhlIGR5bmFtaWMNCi1XZWIgcHJvamVjdCdzIHNyYyBmb2xkZXIuIERlcGVuZGluZyBvbiB0aGUgV1NETCBmaWxlIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZQ0KLWNsaWVudCBpcyBiYXNlZCwgdGhlIGZpbGVzIGZvciB5b3VyIFdlYiBzZXJ2aWNlIGNsaWVudCBtYXkgYmUgZGlmZmVyZW50Ojx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPlByb3h5LmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+LmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+TG9jYXRvci5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPlNvYXAuamF2YTwvbGk+DQotPGxpPmdldDxpPlNlcnZpY2VfbmFtZTwvaT5Tb2FwUHJveHkuamF2YTwvbGk+DQotPGxpPmdldDxpPlNlcnZpY2VfbmFtZTwvaT5Tb2FwU3R1Yi5qYXZhPC9saT4NCi08L3VsPiA8L3Jlc3VsdD4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWJkYjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBoYXZlIGEgV1NETCBmaWxlIHlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcyBjbGllbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzLCBXZWIgc2VydmljZXMsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcyBjbGllbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzLCBXZWIgc2VydmljZXMsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgd2l0aCBBbnQgdGFza3MiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY3dzYXhpc2FudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcndzY2xpZW50YS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2NsaWVudGEiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgY2xpZW50IGZyb20gYSBXU0RMIGZpbGUKLXVzaW5nIGNvbW1hbmQgbGluZSB0b29sczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzY2xpZW50YSI+PGEgbmFtZT0idHdzY2xpZW50YSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzPC9oMT4KLQotCi0KLQotPGRpdj48cD5JZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UKLXRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LjwvcD4KLQotPGRpdiBjbGFzcz0icCI+QmVmb3JlIGNyZWF0aW5nIHRoZSBXZWIgc2VydmljZSBjbGllbnQgeW91IG11c3Q6PHVsPgotPGxpPmNvbXBsZXRlIHRoZSBwcmVyZXF1aXNpdGVzIGxpc3RlZCBpbjogPGEgaHJlZj0iY3dzYXhpc2FudC5odG1sIiB0aXRsZT0iSWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudCYjMTA7ZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiYjMTA7VGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UmIzEwO3VzaW5nIFJ1biBBcyAmZ3Q7IEFudCBCdWlsZC4uLiwgb3IgdGhleSBjYW4gYmUgcnVuIGhlYWRsZXNzIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZS4gT25jZSYjMTA7eW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0JiMxMDtpdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS4iPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViIHNlcnZpY2VzIEFudCB0YXNrczwvYT48L2xpPgotCi08bGk+Y3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0IHlvdSBjcmVhdGVkLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+SW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZSBjbGllbnQgeW91IG5lZWQgdG8gbW9kaWZ5IHRoZQotQW50IGZpbGUgYW5kIHRoZSBBbnQgcHJvcGVydGllcyBmaWxlLjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVkaXQgdGhlIEFudCBmaWxlICg8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmF4aXNfY2xpZW50LnhtbDwva2JkPikgdGhhdAoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuIEVuc3VyZSB0aGF0IGl0IHBvaW50cyB0byB0aGUgY2xpZW50Ci1BbnQgcHJvcGVydGllcyBmaWxlOiBpdCBzaG91bGQgY29udGFpbiBhIGxpbmUgc3RhdGluZyA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPiZsdDtwcm9wZXJ0eQotZmlsZT0iYXhpc19jbGllbnQucHJvcGVydGllcyIvJmd0Ozwva2JkPi48L3NwYW4+IFNhdmUgYW55IGNoYW5nZXMgdGhhdAoteW91IGhhdmUgbWFkZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVkaXQgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19jbGllbnQucHJvcGVydGllczwva2JkPiBmaWxlIHRoYXQKLXlvdSBpbXBvcnRlZCBpbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLjwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5FbnN1cmUgdGhhdCB0aGUgc2NlbmFyaW9UeXBlIHBhcmFtZXRlciBpcyBzZXQgdG8gY2xpZW50Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5TZXQgdGhlIHdvcmtzcGFjZSBwYXJhbWV0ZXIgc28gdGhhdCBpdCBwb2ludHMgdG8gdGhlIGxvY2F0aW9uCi1vZiB5b3VyIFdTREwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBhbmQgc2hvdWxkIGJlIGRlbGV0ZWQgaWYgbm90Ci1leHBsaWNpdGx5IHNldC4gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgd2lsbCBiZSByZXRyaWV2ZWQKLWZyb20gdGhlIGR5bmFtaWMgcHJvamVjdCBzZXR0aW5ncy4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldAotdGhlc2UgcGFyYW1ldGVycyByZWZlciB0bzogPGEgaHJlZj0icndzY2xpZW50YS5odG1sIiB0aXRsZT0iVGhlIGF4aXNfY2xpZW50LnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkJiMxMDt0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlJiMxMDtjbGllbnQuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIj5BeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi0gU2F2ZSB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzX2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUuCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlJpZ2h0LWNsaWNrIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19jbGllbnQueG1sPC9rYmQ+IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJ1biBBczwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbnQgQnVpbGQuLi48L3NwYW4+PC9zcGFuPjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIGRpYWxvZyB0aGF0IG9wZW5zLCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkpSRTwvc3Bhbj4gdGFiCi1hbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvc3Bhbj4uPC9zcGFuPgotIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFwcGx5PC9zcGFuPiBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW48L3NwYW4+LgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5CdWlsZAotU3VjY2Vzc2Z1bDwva2JkPiBtZXNzYWdlLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBXZWJDb250ZW50XHdzZGwgZm9sZGVyOjx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5TT0FQLndzZGwgPC9saT4KLQotPC91bD4KLVRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluIHRoZSBkeW5hbWljCi1XZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcV0VCLUlORiBmb2xkZXI6PHVsPgotPGxpPnVuZGVwbG95LndzZGQ8L2xpPgotCi08bGk+ZGVwbG95LndzZGQgPC9saT4KLQotPC91bD4KLVRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljCi1XZWIgcHJvamVjdCdzIHNyYyBmb2xkZXIuIERlcGVuZGluZyBvbiB0aGUgV1NETCBmaWxlIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZQotY2xpZW50IGlzIGJhc2VkLCB0aGUgZmlsZXMgZm9yIHlvdXIgV2ViIHNlcnZpY2UgY2xpZW50IG1heSBiZSBkaWZmZXJlbnQ6PHVsPgotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPlByb3h5LmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+LmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+TG9jYXRvci5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPlNvYXAuamF2YTwvbGk+Ci0KLTxsaT5nZXQ8ZW0+U2VydmljZV9uYW1lPC9lbT5Tb2FwUHJveHkuamF2YTwvbGk+Ci0KLTxsaT5nZXQ8ZW0+U2VydmljZV9uYW1lPC9lbT5Tb2FwU3R1Yi5qYXZhPC9saT4KLQotPC91bD4KLSA8L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvcndzY2xpZW50YS5odG1sIj5BeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIGF4aXNfY2xpZW50LnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2YmZlZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIg0KLSAibWFwLmR0ZCI+DQotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzYXhpc2FudCINCi1pZD0id3NheGlzYW50IiB0aXRsZT0id3NheGlzYW50Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2N3c2F4aXNhbnQuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIEF4aXMgcnVudGltZSBXZWIgc2VydmljZXMgdXNpbmcgQW50IHRhc2tzIj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3YndzYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaCI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9ydGR3c2EuZGl0YSIgbmF2dGl0bGU9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcmJ1d3NhLmRpdGEiIG5hdnRpdGxlPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgZmlsZSByZWZlcmVuY2UiPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcndzY2xpZW50YS5kaXRhIiBuYXZ0aXRsZT0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08L21hcD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Q4YWM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzYXhpc2FudCIgbGFiZWw9IndzYXhpc2FudCIgdG9waWM9InRvcGljcy9jd3NheGlzYW50Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiIGhyZWY9InRvcGljcy9jd3NheGlzYW50Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIiBocmVmPSJ0b3BpY3MvdHdid3NhLmh0bWwiPgotPHRvcGljIGxhYmVsPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIGhyZWY9InRvcGljcy9ydGR3c2EuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIiBocmVmPSJ0b3BpY3MvcmJ1d3NhLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI4M2ZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2I2MzcyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJiMzczLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdzdC1jb21tYW5kLWYxLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWdlbmVyYXRlU291cmNlQnVuZGxlPWZhbHNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZWVmNjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotISBwbHVnLWluIHByb3BlcnRpZXMKLXBsdWdpbk5hbWUgICAgID0gV2ViIHNlcnZpY2VzIFVJCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODcwYzA1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndzdC1jb21tYW5kLWYxLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3Avd3N0LWNvbW1hbmQtZjEueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC93c3QtY29tbWFuZC1mMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNjNjNjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC93c3QtY29tbWFuZC1mMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPGNvbnRleHRzPgotCi08IS0tb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLS0+Ci08Y29udGV4dCBpZD0iUFBBRDAwMDEiPgotPCEtLUFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPllvdSBjYW4gdXNlIHRoaXMgcGFnZSB0byBjaG9vc2Ugd2hpY2ggV2ViIHNlcnZpY2VzIHBvcHVwIGFjdGlvbnMgYXJlIGRpc3BsYXllZCBvciBoaWRkZW4uIFdoZW4gdXNpbmcgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGxhdW5jZWQgZnJvbSBhIHBvcHVwIG1lbnUgeW91IG1heSBzZWUgYSBjaGVjayBib3ggdGhhdCBnaXZlcyB5b3UgdGhlIG9wdGlvbiBvZiBoaWRpbmcgdGhlIHBvcHVwIGFjdGlvbiB0aGF0IHlvdSBoYXZlIGp1c3QgcGVyZm9ybWVkLiBJZiB5b3Ugc2VsZWN0IHRoYXQgY2hlY2tib3ggaXQgd2lsbCBzZWxlY3QgdGhlIHJlc3BlY3RpdmUgY2hlY2tib3ggb24gdGhpcyBwcmVmZXJlbmNlIHBhZ2UuIElmIHlvdSBoYXZlIGNob3NlbiB0byBoaWRlIGEgcG9wdXAgYWN0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGlzcGxheSB1c2UgdGhpcyBwYWdlIHRvIG1ha2UgdGhlIHBvcHVwIGFjdGlvbiB2aXNpYmxlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDAyIj4KLTwhLS1zaG93IGFsbCBjaGVjayBib3ggb24gdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJ5IHNlbGVjdGluZyB0aGlzIGNoZWNrYm94LCBhbGwgdmFsaWQgV2ViIHNlcnZpY2VzIHBvcHVwIGFjdGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiB5b3Ugc2VsZWN0IGEgZmlsZSBpbiB5b3VyIHdvcmtzcGFjZSBhbmQgcmlnaHQtY2xpY2sgaXQuIEFsdGVybmF0ZWx5IHlvdSBjYW4gc2VsZWN0IHRvIGRpc3BsYXkgb3IgaGlkZSBpbmRpdmlkdWFsIHBvcHVwIGFjdGlvbnMuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDMiPgotPCEtLWhpZGUgYWxsIGNoZWNrIGJveCBvbiB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Qnkgc2VsZWN0aW5nIHRoaXMgY2hlY2tib3gsIGFsbCBXZWIgc2VydmljZXMgcG9wdXAgYWN0aW9ucyB3aWxsIGJlIGhpZGRlbiB3aGVuIHlvdSBzZWxlY3QgYSBmaWxlIGluIHlvdXIgd29ya3NwYWNlIGFuZCByaWdodC1jbGljayBpdC4gQWx0ZXJuYXRlbHkgeW91IGNhbiBzZWxlY3QgdG8gZGlzcGxheSBvciBoaWRlIGluZGl2aWR1YWwgcG9wdXAgYWN0aW9ucy4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJUV1AwMDAxIj4KLTwhLS1zaG93L2hpZGUgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+V2hlbiB1c2luZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgbGF1bmNlZCBmcm9tIGEgcG9wdXAgbWVudSwgdGhpcyBjaGVjayBib3ggdGhhdCBnaXZlcyB5b3UgdGhlIG9wdGlvbiBvZiBoaWRpbmcgdGhlIHBvcHVwIGFjdGlvbiB0aGF0IHlvdSBoYXZlIGp1c3QgcGVyZm9ybWVkLiBJZiB5b3Ugc2VsZWN0IHRoZSBjaGVja2JveCBpdCB3aWxsIHNlbGVjdCB0aGUgcmVzcGVjdGl2ZSBjaGVja2JveCBvbiB0aGUgV2ViIHNlcnZpY2VzID4gUG9wdXAgRGlhbG9nIFNlbGVjdGlvbiBwcmVmZXJlbmNlIHBhZ2UuIElmIHlvdSBoYXZlIGNob3NlbiB0byBoaWRlIGEgcG9wdXAgYWN0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGlzcGxheSwgZ28gdG8gV2luZG93ID4gUHJlZmVyZW5jZXMgPiBXZWIgc2VydmljZXMgPiBQb3B1cCBEaWFsb2cgU2VsZWN0aW9uLCBhbmQgdXNlIHRoaXMgcGFnZSB0byBtYWtlIHRoZSBwb3B1cCBhY3Rpb24gdmlzaWJsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwvY29udGV4dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOGNjYTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MDUyZTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMS5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUgCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2Jvb2suY3NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9ib29rLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRkODg4MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2Jvb2suY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGltcG9ydCAiLi4vUFJPRFVDVF9QTFVHSU4vYm9vay5jc3MiOwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAxMjZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgamF2YWRvY3RvYy54bWwsXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlLyxcCi0gICAgICAgICAgICAgICB0b3BpY3NfUmVmZXJlbmNlLnhtbCxcCi0gICAgICAgICAgICAgICB0b3BpY3NfRXh0UG9pbnRfUmVmZXJlbmNlLnhtbCxcCi0gICAgICAgICAgICAgICBub3RpY2VzLmh0bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBib29rLmNzcyxcCi0gICAgICAgICAgICAgICBzY2hlbWEuY3NzCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2J1aWxkRXh0RG9jcy5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9idWlsZEV4dERvY3MucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1OTJhYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2J1aWxkRXh0RG9jcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBJbmZvcm1hdGlvbiBmb3IgZXh0ZW5zaW9uIHBvaW50IG92ZXJ2aWV3IGRvY3VtZW50Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE92ZXJ2aWV3IGRvY3VtZW50IHRpdGxlCi10aXRsZSA9IFdlYlNlcnZpY2VzIEV4dGVuc2lvbiBQb2ludHMKLWhlYWRlciA9IFdlYlNlcnZpY2VzIEV4dGVuc2lvbiBQb2ludHMgCi0jIEludHJvZHVjdGlvbiBwYXJhZ3JhcGgKLW92ZXJ2aWV3ID0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnRzIGNhbiBiZSB1c2VkIHRvIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBXU1QgV2ViIHNlcnZpY2VzIGluZnJhc3RydWN0dXJlOiAKLQotIyBBIGxpc3Qgb2YgdGhlIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlCi0jIGV4dGVuc2lvbiBwb2ludCBkb2N1bWVudGF0aW9uLgotbGlzdGVkLWV4dC1wb2ludHM9b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnNlcnZpY2VQb2xpY3ksXAotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2VzLnBvbGljeS51aS5zZXJ2aWNlUG9saWN5dWkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2J1aWxkRXh0RG9jcy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2J1aWxkRXh0RG9jcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYjNlZGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9idWlsZEV4dERvY3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IG5hbWU9IkJ1aWxkIEV4dGVuc2lvbiBQb2ludCBEb2N1bWVudGF0aW9uIiBkZWZhdWx0PSJjcmVhdGVFeHREb2NzIiBiYXNlZGlyPSIuIj4KLQotCTxwcm9wZXJ0eSBmaWxlPSJidWlsZEV4dERvY3MucHJvcGVydGllcyIvPgotCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXREaXIiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImFwaW91dHB1dERpciIgdmFsdWU9IiR7b3V0cHV0RGlyfSR7ZmlsZS5zZXBhcmF0b3J9cmVmZXJlbmNlJHtmaWxlLnNlcGFyYXRvcn1leHQiLz4KLQotCTx0YXJnZXQgbmFtZT0iY3JlYXRlRXh0RG9jcyIgZGVwZW5kcz0iYnVpbGRFeHREb2NzLCBjcmVhdGVEb2NMaXN0aW5ncyIvPgotCQotCTx0YXJnZXQgbmFtZT0iYnVpbGRFeHREb2NzIiBkZXBlbmRzPSJidWlsZEpTRkV4dERvY3MiLz4KLQkJCi0gCTx0YXJnZXQgbmFtZT0iYnVpbGRKU0ZFeHREb2NzIj4KLSAJCQotIAkJPCEtLSBjbGVhbnVwIG9sZCAtLT4KLSAJCTxkZWxldGU+Ci0gCSAJCTxmaWxlc2V0IGRpcj0iJHthcGlvdXRwdXREaXJ9IiBjYXNlc2Vuc2l0aXZlPSJ5ZXMiIGlkPSJleHQtZG9jcy1saXN0LWVudCI+Ci0gCSAJCQk8aW5jbHVkZSBuYW1lPSIqLmh0bWwiLz4KLSAJCQk8L2ZpbGVzZXQ+Ci0gCQk8L2RlbGV0ZT4KLSAJCQotIAkJPCEtLSBnZW5lcmF0ZSBuZXcgaHRtbCBmcm9tIGV4dC1wdCBzY2hlbWFzIC0tPgotIAkJPHBkZS5jb252ZXJ0U2NoZW1hVG9IVE1MIG1hbmlmZXN0PSIuLi9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnhtbCIgZGVzdGluYXRpb249IiR7YXBpb3V0cHV0RGlyfSIgLz4KLSAJCTxwZGUuY29udmVydFNjaGVtYVRvSFRNTCBtYW5pZmVzdD0iLi4vb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi54bWwiIGRlc3RpbmF0aW9uPSIke2FwaW91dHB1dERpcn0iIC8+Ci0gCQkKLSAJCTwhLS0gR2V0IHRoZSBsaXN0IG9mIGV4dGVuc2lvbiBkb2MgZmlsZXMuIC0tPgotIAkJPGZpbGVzZXQgZGlyPSIke2FwaW91dHB1dERpcn0iIGNhc2VzZW5zaXRpdmU9InllcyIgaWQ9ImV4dC1kb2NzLWxpc3QtZW50IiA+Ci0gCQkJPGluY2x1ZGUgbmFtZT0iKi5odG1sIi8+Ci0JCTwvZmlsZXNldD4KLSAJCQotIAkJPCEtLSBDb252ZXJ0IHRoZSBsaXN0IHRvIGFuIFhNTCByZXByZXNlbnRhdGlvbi4gLS0+Ci0gCQk8cGF0aGNvbnZlcnQgcHJvcGVydHk9ImV4dC1kb2MtZW50IiByZWZpZD0iZXh0LWRvY3MtbGlzdC1lbnQiIHBhdGhzZXA9IiZsdDsvZmlsZSZndDsvbi9uJmx0O2ZpbGUmZ3Q7IiA+Ci0gCQkJPG1hcCBmcm9tPSIke2FwaW91dHB1dERpcn0ke2ZpbGUuc2VwYXJhdG9yfSIgdG89IiIvPgotIAkJPC9wYXRoY29udmVydD4KLSAJCTxlY2hvIGZpbGU9ImV4dGRvY3MueG1sIj4mbHQ7ZmlsZXMgY29tcG9uZW50PSJ3ZWJzZXJ2aWNlIiZndDsmbHQ7ZmlsZSZndDske2V4dC1kb2MtZW50fSZsdDsvZmlsZSZndDsmbHQ7L2ZpbGVzJmd0OzwvZWNobz4KLSAJCSAJCQkJCQkKLSAJPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjcmVhdGVEb2NMaXN0aW5ncyI+Ci0JCTxkZWxldGUgZmlsZT0iJHthcGlvdXRwdXREaXJ9JHtmaWxlLnNlcGFyYXRvcn1pbmRleC5odG1sIi8+Ci0JCTwhLS0gQ3JlYXRlIHRoZSBvdmVydmlldyBkb2N1bWVudC4gLS0+Ci0JCTx4c2x0IGJhc2VkaXI9IiR7YmFzZWRpcn0iIGluPSJleHREb2NMaXN0aW5ncy54bWwiIG91dD0iJHthcGlvdXRwdXREaXJ9JHtmaWxlLnNlcGFyYXRvcn1pbmRleC5odG1sIiBzdHlsZT0iZXh0RG9jT3ZlcnZpZXcueHNsIj4KLQkgIAkJPHBhcmFtIG5hbWU9InRpdGxlIiBleHByZXNzaW9uPSIke3RpdGxlfSIvPgotCSAgCQk8cGFyYW0gbmFtZT0iaGVhZGVyIiBleHByZXNzaW9uPSIke2hlYWRlcn0iLz4KLQkgIAkJPHBhcmFtIG5hbWU9Im92ZXJ2aWV3IiBleHByZXNzaW9uPSIke292ZXJ2aWV3fSIvPgotCQkJPHBhcmFtIG5hbWU9Imxpc3RlZC1leHQtcG9pbnRzIiBleHByZXNzaW9uPSIke2xpc3RlZC1leHQtcG9pbnRzfSIvPgotCQk8L3hzbHQ+Ci0JCQkKLQkJPCEtLSBDcmVhdGUgdGhlIGV4dGVudGlvbiBwb2ludCB0b2MuIC0tPgotCQk8eHNsdCBiYXNlZGlyPSIke2Jhc2VkaXJ9IiBpbj0iZXh0RG9jTGlzdGluZ3MueG1sIiBvdXQ9InRvcGljc19FeHRQb2ludF9SZWZlcmVuY2UueG1sIiBzdHlsZT0iZXh0RG9jVG9jLnhzbCI+Ci0JCQk8cGFyYW0gbmFtZT0ibGlzdGVkLWV4dC1wb2ludHMiIGV4cHJlc3Npb249IiR7bGlzdGVkLWV4dC1wb2ludHN9Ii8+Ci0JCQk8b3V0cHV0cHJvcGVydHkgbmFtZT0ibWV0aG9kIiB2YWx1ZT0ieG1sIi8+Ci0JCQk8b3V0cHV0cHJvcGVydHkgbmFtZT0iaW5kZW50IiB2YWx1ZT0ieWVzIi8+Ci0JCTwveHNsdD4KLQkJCQotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvYnVpbGRKYXZhZG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvYnVpbGRKYXZhZG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiZWU2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2J1aWxkSmF2YWRvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJqYXZhZG9jIgotICAgIGRlZmF1bHQ9Im1haW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0JCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImJ1aWxkRGlyZWN0b3J5IgotICAgICAgICB2YWx1ZT0iJHtiYXNlZGlyfS8uLi8uLiIgLz4KLQotICAgIDwhLS0gPSA9ID0gc3RhbmRhcmQgcHJvcGVydGllcyBwYXR0ZXJuID0gPSA9IC0tPgotICAgIDwhLS0gCi0gICAgICAgIEZpcnN0IGdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgICAgTm90ZSB0byBiZSBjcm9zcy1wbGF0Zm9ybSwgImVudmlyb25tZW50IHZhcmlhYmxlcyIgYXJlIG9ubHkgYXBwcm9wcmlhdGUgZm9yIAotICAgICAgICBzb21lIHZhcmlhYmxlcywgZS5nLiBvbmVzIHdlIHNldCwgc2luY2UgcHJvcGVydGllcyBhcmUgY2FzZSBzZW5zaXRpdmUsIGV2ZW4gaWYgCi0gICAgICAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24geW91ciBvcGVyYXRpbmcgc3lzdGVtIGFyZSBub3QsIGUuZy4gaXQgd2lsbCAKLSAgICAgICAgYmUgJHtlbnYuUGF0aH0gbm90ICR7ZW52LlBBVEh9IG9uIFdpbmRvd3MgLS0+Ci0gICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+Ci0KLSAgICA8IS0tIAotICAgICAgICBMZXQgdXNlcnMgb3ZlcnJpZGUgc3RhbmRhcmQgcHJvcGVydGllcywgaWYgZGVzaXJlZC4KLSAgICAgICAgSWYgdGhpcyBkaXJlY3RvcnkvZmlsZXMgZG9lcyBub3QgZXhpc3QsIHRoZW4gaXQgd2lsbCBiZSBpZ25vcmVkLCAKLSAgICAgICAgYW5kIGRlZmF1bHRzIHVzZWQuCi0gICAgLS0+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIGZpbGU9IiR7ZW52LkxPQ0FMX0JVSUxEX1BST1BFUlRJRVNfRElSfS8ke2FudC5wcm9qZWN0Lm5hbWV9LnByb3BlcnRpZXMiIC8+Ci0KLQotCi0gICAgPHByb3BlcnR5IGZpbGU9ImphdmFkb2MucHJvcGVydGllcyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ib3V0cHV0RGlyIgotICAgICAgICB2YWx1ZT0iJHtiYXNlZGlyfSIgLz4KLQotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0ibWFpbiIKLSAgICAgICAgZGVwZW5kcz0iamF2YWRvYywgcGFja2FnZXRvYyIKLSAgICAgICAgZGVzY3JpcHRpb249IkJ1aWxkcyBQbHVnaW4gSmF2YWRvYyIgLz4KLQotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0iamF2YWRvYyIKLSAgICAgICAgZGVwZW5kcz0iZ2V0U2tpcEphdmFEb2NQYXJhbSIKLSAgICAgICAgdW5sZXNzPSJkb3NraXBKYXZhRG9jIj4KLSAgICAJPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICAJPGVjaG8gbWVzc2FnZT0ib3V0cHV0ZGlyOiAke291dHB1dERpcn0iIC8+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzcGF0aDogJHtKMlNFLTEuNX0iIC8+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLQotICAgICAgICA8amF2YWRvYwotICAgICAgICAgICAgYWNjZXNzPSJwdWJsaWMiCi0gICAgICAgICAgICBhdXRob3I9ImZhbHNlIgotICAgICAgICAgICAgZGVzdGRpcj0iJHtvdXRwdXREaXJ9L3JlZmVyZW5jZS9hcGkiCi0gICAgICAgICAgICBkb2N0aXRsZT0iJHthcGkudGl0bGV9IgotICAgICAgICAgICAgbm9kZXByZWNhdGVkPSJmYWxzZSIKLSAgICAgICAgICAgIG5vZGVwcmVjYXRlZGxpc3Q9ImZhbHNlIgotICAgICAgICAgICAgbm9pbmRleD0iZmFsc2UiCi0gICAgICAgICAgICBub25hdmJhcj0iZmFsc2UiCi0gICAgICAgICAgICBub3RyZWU9ImZhbHNlIgotICAgICAgICAgICAgRW5jb2Rpbmc9IklTTy04ODU5LTEiCi0gICAgICAgICAgICBwYWNrYWdlbmFtZXM9IiR7YXBpLnBhY2thZ2VzfSIKLSAgICAgICAgICAgIHNvdXJjZXBhdGg9IiR7cGx1Z2luLnNvdXJjZWZvbGRlcnN9IgotICAgICAgICAgICAgc3BsaXRpbmRleD0idHJ1ZSIKLSAgICAgICAgICAgIHVzZT0idHJ1ZSIKLSAgICAgICAgICAgIHZlcnNpb249InRydWUiCi0gICAgICAgICAgICBicmVha2l0ZXJhdG9yPSJ5ZXMiCi0gICAgICAgICAgICB2ZXJib3NlPSJmYWxzZSIKLSAgICAgICAgCWNsYXNzcGF0aD0iIgotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgCQotICAgICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMiPgotICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLSAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgICAgIAotCi0gICAgICAgIDwvamF2YWRvYz4KLSAgICA8L3RhcmdldD4KLQotICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZXRvYyI+Ci0gICAgICAgIDxsb2FkZmlsZQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgcHJvcGVydHk9Ind0cC5wYWNrYWdlcyIKLSAgICAgICAgICAgIHNyY0ZpbGU9IiR7b3V0cHV0RGlyfS9yZWZlcmVuY2UvYXBpL3BhY2thZ2UtbGlzdCI+Ci0gICAgICAgICAgICA8ZmlsdGVyY2hhaW4+Ci0gICAgICAgICAgICAgICAgPGZpbHRlcnJlYWRlcgotICAgICAgICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5hcGFjaGUudG9vbHMuYW50LmZpbHRlcnMuUHJlZml4TGluZXMiPgotICAgICAgICAgICAgICAgICAgICA8cGFyYW0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InByZWZpeCIKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSImbHQ7L3BhY2thZ2UmZ3Q7Jmx0O3BhY2thZ2UmZ3Q7IiAvPgotICAgICAgICAgICAgICAgIDwvZmlsdGVycmVhZGVyPgotICAgICAgICAgICAgICAgIDxzdHJpcGxpbmVicmVha3MgLz4KLSAgICAgICAgICAgIDwvZmlsdGVyY2hhaW4+Ci0gICAgICAgIDwvbG9hZGZpbGU+Ci0KLSAgICAgICAgPCEtLSBDcmVhdGUgcGFja2FnZXMueG1sIGZpbGUgLS0+Ci0gICAgICAgIDxlY2hvIGZpbGU9InBhY2thZ2VzLnhtbCI+Ci0gICAgICAgICAgICAmbHQ7cGFja2FnZXMmZ3Q7Jmx0O3BhY2thZ2UmZ3Q7JHt3dHAucGFja2FnZXN9Jmx0Oy9wYWNrYWdlJmd0OyZsdDsvcGFja2FnZXMmZ3Q7Ci0gICAgICAgIDwvZWNobz4KLQotICAgICAgICA8eHNsdAotICAgICAgICAgICAgYmFzZWRpcj0iJHtiYXNlZGlyfS9idWlsZCIKLSAgICAgICAgICAgIGluPSJwYWNrYWdlcy54bWwiCi0gICAgICAgICAgICBvdXQ9ImphdmFkb2N0b2MueG1sIgotICAgICAgICAgICAgc3R5bGU9ImphdmFkb2NUb2MueHNsIj4KLSAgICAgICAgICAgIDxvdXRwdXRwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im1ldGhvZCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0ieG1sIiAvPgotICAgICAgICAgICAgPG91dHB1dHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5kZW50IgotICAgICAgICAgICAgICAgIHZhbHVlPSJ5ZXMiIC8+Ci0gICAgICAgIDwveHNsdD4KLSAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9ImdldFNraXBKYXZhRG9jUGFyYW0iCi0gICAgICAgIGlmPSJza2lwSmF2YURvYyI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9InNraXBKYXZhRG9jOiAke3NraXBKYXZhRG9jfSIgLz4KLSAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZG9za2lwSmF2YURvYyI+Ci0gICAgICAgICAgICA8ZXF1YWxzCi0gICAgICAgICAgICAgICAgYXJnMT0iJHtza2lwSmF2YURvY30iCi0gICAgICAgICAgICAgICAgYXJnMj0idHJ1ZSIKLSAgICAgICAgICAgICAgICB0cmltPSJ0cnVlIgotICAgICAgICAgICAgICAgIGNhc2VzZW5zaXRpdmU9ImZhbHNlIiAvPgotICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dERvY0xpc3RpbmdzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvZXh0RG9jTGlzdGluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGNkOWRkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvZXh0RG9jTGlzdGluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudHM+Ci0JPGNvbXBvbmVudCBuYW1lPSJXZWIgc2VydmljZSBBUEkiIGlkPSJ3ZWJzZXJ2aWNlIiBmaWxlPSJleHRkb2NzLnhtbCIvPgotPC9jb21wb25lbnRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9leHREb2NPdmVydmlldy54c2wgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dERvY092ZXJ2aWV3LnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdhYjJjNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dERvY092ZXJ2aWV3LnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gICAgdmVyc2lvbj0iMS4wIgotICAgIHhtbG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCI+Ci0gICAgPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZSIvPgotICAgIDx4c2w6cGFyYW0gbmFtZT0iaGVhZGVyIi8+Ci0gICAgPHhzbDpwYXJhbSBuYW1lPSJvdmVydmlldyIvPgotICAgIDx4c2w6cGFyYW0gbmFtZT0ibGlzdGVkLWV4dC1wb2ludHMiLz4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb21wb25lbnRzIj4KLSAgICAJCi0gICAgCTx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj4KLSAgICAJJmx0OyFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUUkFOU0lUSU9OQUwvL0VOIiZndDsKLQkJPC94c2w6dGV4dD4KLQkJPGh0bWw+Ci0JCTxoZWFkPgotCQk8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+Ci0JCSZsdDttZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBUaGlzIHBhZ2UgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgbGljZW5zZS4gRm9yIGZ1bGwgZGV0YWlscyBzZWUgdGhlIExFR0FMIGluIHRoZSBkb2N1bWVudGF0aW9uIGJvb2sgdGhhdCBjb250YWlucyB0aGlzIHBhZ2UuIiAmZ3Q7Ci0KLSAgIAkJJmx0O21ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSImZ3Q7Ci0gICAJCTwveHNsOnRleHQ+Ci0gICAJCTx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRpdGxlIi8+PC90aXRsZT4KLSAgIAkJPHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPgotCQkmbHQ7TElOSyBSRUw9IlNUWUxFU0hFRVQiIEhSRUY9Ii4uLy4uL2Jvb2suY3NzIiBDSEFSU0VUPSJJU08tODg1OS0xIiBUWVBFPSJ0ZXh0L2NzcyImZ3Q7Ci0JCTwveHNsOnRleHQ+Ci0JCTwvaGVhZD4KLQkJPGJvZHkgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4MDAwODAiPgotCi0JCTxjZW50ZXI+Ci0JCTxoMT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGhlYWRlciIvPjwvaDE+Ci0JCTwvY2VudGVyPgotCi0JCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkb3ZlcnZpZXciLz4KLSAgICAJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImNvbXBvbmVudCI+Ci0gICAgCQk8eHNsOnNvcnQgc2VsZWN0PSJAaWQiLz4KLSAgICAJCTxoMz48YSBuYW1lPSJ7QGlkfSI+PC9hPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvaDM+Ci0gICAgCQk8dWw+Ci0gICAgCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImRvY3VtZW50KEBmaWxlKS9maWxlcy9maWxlIj4KLSAgICAJCQkJPHhzbDpzb3J0IHNlbGVjdD0idGV4dCgpIi8+Ci0gICAgCQkJCTwhLS0gPHhzbDppZiB0ZXN0PSJjb250YWlucygkbGlzdGVkLWV4dC1wb2ludHMsIHRyYW5zbGF0ZShzdWJzdHJpbmcodGV4dCgpLCAwLCBzdHJpbmctbGVuZ3RoKHRleHQoKSkgLSA0KSwnXycsJy4nKSkiPiAtLT4gCi0gIAkJCQkJCTxsaT4KLSAgCQkJCQkJCTxhIGhyZWY9Int0ZXh0KCl9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0idHJhbnNsYXRlKHN1YnN0cmluZyh0ZXh0KCksIDAsIHN0cmluZy1sZW5ndGgodGV4dCgpKSAtIDQpLCdfJywnLicpIi8+PC9hPiAKLSAgCQkJCQkJPC9saT4KLSAgCQkJCQk8IS0tIDwveHNsOmlmPiAtLT4KLSAgICAJCQk8L3hzbDpmb3ItZWFjaD4KLSAgICAJCTwvdWw+Ci0gICAgCTwveHNsOmZvci1lYWNoPgotICAgIAk8L2JvZHk+Ci0JCTwvaHRtbD4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dERvY1RvYy54c2wgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dERvY1RvYy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjI3NDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9leHREb2NUb2MueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IgotICAgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJ4YWxhbiI+Ci0gICAgPHhzbDpwYXJhbSBuYW1lPSJsaXN0ZWQtZXh0LXBvaW50cyIvPgotICAgIAotICAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb21wb25lbnRzIj4KLSAgICAgCTx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj4KLSZsdDs/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8mZ3Q7Ci0JIAk8L3hzbDp0ZXh0PgotCSAJPHRvYyBsYWJlbD0iRXh0ZW5zaW9uIFBvaW50cyBSZWZlcmVuY2UiPgotCSAJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJkb2N1bWVudChjb21wb25lbnQvQGZpbGUpL2ZpbGVzL2ZpbGUiPgotCSAJCQk8eHNsOnNvcnQgc2VsZWN0PSJ0ZXh0KCkiLz4KLQkgCQkJPCEtLSA8eHNsOmlmIHRlc3Q9ImNvbnRhaW5zKCRsaXN0ZWQtZXh0LXBvaW50cywgdHJhbnNsYXRlKHN1YnN0cmluZyh0ZXh0KCksIDAsIHN0cmluZy1sZW5ndGgodGV4dCgpKSAtIDQpLCdfJywnLicpKSI+IC0tPgotCSAJCQkJPHRvcGljIGxhYmVsPSJ7dHJhbnNsYXRlKHN1YnN0cmluZyh0ZXh0KCksIDAsIHN0cmluZy1sZW5ndGgodGV4dCgpKSAtIDQpLCdfJywnLicpfSIgaHJlZj0icmVmZXJlbmNlL2V4dC97dGV4dCgpfSI+Ci0JIAkJCQk8L3RvcGljPgotCSAJCQk8IS0tIDwveHNsOmlmPiAtLT4KLQkgCQk8L3hzbDpmb3ItZWFjaD4KLQkgCTwvdG9jPiAKLQk8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dGRvY3MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9leHRkb2NzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJjMjYxMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2V4dGRvY3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPGZpbGVzIGNvbXBvbmVudD0id2Vic2VydmljZSI+PGZpbGU+b3JnX2VjbGlwc2Vfd3N0X3dzX3NlcnZpY2VfcG9saWN5X3NlcnZpY2Vwb2xpY3kuaHRtbDwvZmlsZT4vbi9uPGZpbGU+b3JnX2VjbGlwc2Vfd3N0X3dzX3NlcnZpY2VfcG9saWN5X3VpX3NlcnZpY2Vwb2xpY3l1aS5odG1sPC9maWxlPjwvZmlsZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9qYXZhZG9jLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2phdmFkb2MucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMwMGM5MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2phdmFkb2MucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLQotcGx1Z2luLnNvdXJjZWZvbGRlcnM9Li4vb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYztcCi0uLi9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjO1wKLQotYXBpLnBhY2thZ2VzPW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSxcCi1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLFwKLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscyxcCi1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWksXAotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzCi0KLQotCi1hcGkudGl0bGU9V2ViIFRvb2xzIFBsYXRmb3JtOiBXZWIgc2VydmljZXMgQVBJIGRvY3VtZW50YXRpb24KLQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9qYXZhZG9jLnhzbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvamF2YWRvYy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViODI0ZTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9qYXZhZG9jLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzbDpzdHlsZXNoZWV0Ci0JeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0JdmVyc2lvbj0iMS4wIj4KLQotCTx4c2w6dmFyaWFibGUgbmFtZT0icm9vdCI+Ci0JCTx4c2w6Y2hvb3NlPgotCQkJPHhzbDp3aGVuIHRlc3Q9Ii9odG1sL2hlYWQvbWV0YVtAbmFtZT0ncm9vdCddL0Bjb250ZW50Ij4KLQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iL2h0bWwvaGVhZC9tZXRhW0BuYW1lPSdyb290J10vQGNvbnRlbnQiIC8+Ci0JCQk8L3hzbDp3aGVuPgotCQkJPHhzbDpvdGhlcndpc2U+Ci0JCQkJPHhzbDp0ZXh0Pi4uLy4uPC94c2w6dGV4dD4KLQkJCTwveHNsOm90aGVyd2lzZT4KLQkJPC94c2w6Y2hvb3NlPgotCTwveHNsOnZhcmlhYmxlPgotCi0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTx4c2w6YXBwbHktdGVtcGxhdGVzIC8+Ci0JPC94c2w6dGVtcGxhdGU+Ci0KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSJodG1sIj4KLQkJPGh0bWw+Ci0JCQk8aGVhZD4KLQkJCQk8bWV0YQotCQkJCQljb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSIKLQkJCQkJaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotCQkJCTxsaW5rCi0JCQkJCXR5cGU9InRleHQvY3NzIgotCQkJCQlocmVmPSJ7JHJvb3R9L2FwaXN0eWxlcy5jc3MiCi0JCQkJCXJlbD0ic3R5bGVzaGVldCIgLz4KLQkJCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImhlYWQvdGl0bGUiIC8+Ci0JCQk8L2hlYWQ+Ci0JCQk8Ym9keT4gCi0JCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMKLQkJCQkJc2VsZWN0PSJib2R5LyoiCi0JCQkJCW1vZGU9ImJvZHkiIC8+Ci0JCQk8L2JvZHk+Ci0JCTwvaHRtbD4KLQk8L3hzbDp0ZW1wbGF0ZT4KLQotCTx4c2w6dGVtcGxhdGUKLQkJbWF0Y2g9ImgxIgotCQltb2RlPSJiYW5uZXIiPgotCQk8dGFibGUKLQkJCWJvcmRlcj0iMCIKLQkJCWNlbGxwYWRkaW5nPSIyIgotCQkJY2VsbHNwYWNpbmc9IjUiCi0JCQl3aWR0aD0iMTAwJSI+Ci0JCQk8dGJvZHk+Ci0JCQkJPHRyPgotCQkJCQk8dGQKLQkJCQkJCWFsaWduPSJsZWZ0IgotCQkJCQkJd2lkdGg9IjYwJSI+Ci0JCQkJCQk8Zm9udCBjbGFzcz0iaW5kZXh0b3AiPgotCQkJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIiAvPgotCQkJCQkJPC9mb250PgotCQkJCQkJPGJyIC8+Ci0JCQkJCQk8Zm9udCBjbGFzcz0iaW5kZXhzdWIiPgotCQkJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIvaHRtbC9oZWFkL3RpdGxlIiAvPgotCQkJCQkJPC9mb250PgotCQkJCQk8L3RkPgotCQkJCQk8dGQgd2lkdGg9IjQwJSI+Ci0JCQkJCQk8aW1nCi0JCQkJCQkJc3JjPSJ7JHJvb3R9L292ZXJ2aWV3L0lkZWEuanBnIgotCQkJCQkJCWFsaWduPSJtaWRkbGUiCi0JCQkJCQkJaGVpZ2h0PSI4NiIKLQkJCQkJCQloc3BhY2U9IjUwIgotCQkJCQkJCXdpZHRoPSIxMjAiIC8+Ci0JCQkJCTwvdGQ+Ci0JCQkJPC90cj4KLQkJCTwvdGJvZHk+Ci0JCTwvdGFibGU+Ci0JPC94c2w6dGVtcGxhdGU+Ci0KLQk8eHNsOnRlbXBsYXRlCi0JCW1hdGNoPSJoMSIKLQkJbW9kZT0iYm9keSIgLz4KLQotCTx4c2w6dGVtcGxhdGUKLQkJbWF0Y2g9ImgyIgotCQltb2RlPSJib2R5Ij4KLQotCQk8dGFibGUKLQkJCWJvcmRlcj0iMCIKLQkJCWNlbGxwYWRkaW5nPSIyIgotCQkJY2VsbHNwYWNpbmc9IjUiCi0JCQl3aWR0aD0iMTAwJSI+Ci0JCQk8dGJvZHk+Ci0JCQkJPHRyPgotCQkJCQk8dGQKLQkJCQkJCWNvbHNwYW49IjIiCi0JCQkJCQlhbGlnbj0ibGVmdCIKLQkJCQkJCWJnY29sb3I9IiMwMDgwYzAiCi0JCQkJCQl2YWxpZ249InRvcCI+Ci0JCQkJCQk8Yj4KLQkJCQkJCQk8Zm9udAotCQkJCQkJCQljb2xvcj0iI2ZmZmZmZiIKLQkJCQkJCQkJZmFjZT0iQXJpYWwsSGVsdmV0aWNhIj4KLQkJCQkJCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMgLz4KLQkJCQkJCQk8L2ZvbnQ+Ci0JCQkJCQk8L2I+Ci0JCQkJCTwvdGQ+Ci0JCQkJPC90cj4KLQkJCTwvdGJvZHk+Ci0JCTwvdGFibGU+Ci0JPC94c2w6dGVtcGxhdGU+Ci0KLQk8eHNsOnRlbXBsYXRlCi0JCW1hdGNoPSJoMyIKLQkJbW9kZT0iYm9keSI+Ci0JCTxpbWcKLQkJCXNyYz0ieyRyb290fS9pbWFnZXMvQWRhcnJvdy5naWYiCi0JCQlib3JkZXI9IjAiCi0JCQloZWlnaHQ9IjE2IgotCQkJd2lkdGg9IjE2IiAvPgotCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgotCTwveHNsOnRlbXBsYXRlPgotCi0JPHhzbDp0ZW1wbGF0ZQotCQltYXRjaD0iKiIKLQkJbW9kZT0iYm9keSI+Ci0KLQkJPHhzbDpjb3B5PgotCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIqfEAqfHRleHQoKSIgLz4KLQkJPC94c2w6Y29weT4KLQk8L3hzbDp0ZW1wbGF0ZT4KLQotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9Iip8QCp8dGV4dCgpIj4KLQkJPHhzbDpjb3B5PgotCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIqfEAqfHRleHQoKSIgLz4KLQkJPC94c2w6Y29weT4KLQk8L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvamF2YWRvY1RvYy54c2wgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2phdmFkb2NUb2MueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDcxNzk1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvamF2YWRvY1RvYy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCi0gICAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9InhhbGFuIj4KLSAgICAKLSAgICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFja2FnZXMiPgotICAgICA8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+Ci0mbHQ7P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/Jmd0OwotCSA8L3hzbDp0ZXh0PgotCSA8dG9jIGxhYmVsPSJKYXZhZG9jIFBhY2thZ2VzIFJlZmVyZW5jZSI+Ci0JIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJwYWNrYWdlIj4KLQkgPHhzbDpzb3J0IHNlbGVjdD0idGV4dCgpIi8+Ci0JIAk8eHNsOmlmIHRlc3Q9InRleHQoKSAhPSAnJyI+Ci0JIAkJPHRvcGljIGxhYmVsPSJ7dGV4dCgpfSIgaHJlZj0icmVmZXJlbmNlL2FwaS97dHJhbnNsYXRlKHRleHQoKSwnLicsJy8nKX0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiLz4KLQkgCTwveHNsOmlmPgotCSA8L3hzbDpmb3ItZWFjaD4KLQkKLQkgPC90b2M+IAotCTwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvamF2YWRvY3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL2phdmFkb2N0b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmE3YmMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvamF2YWRvY3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCSA8dG9jIGxhYmVsPSJKYXZhZG9jIFBhY2thZ2VzIFJlZmVyZW5jZSI+Ci08dG9waWMgaHJlZj0icmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiLz4KLTx0b3BpYyBocmVmPSJyZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIi8+Ci08dG9waWMgaHJlZj0icmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiLz4KLTx0b3BpYyBocmVmPSJyZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyIvPgotPHRvcGljIGhyZWY9InJlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2Mvbm90aWNlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9ub3RpY2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwY2Y0ZDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9ub3RpY2VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IWRvY3R5cGUgaHRtbCBwdWJsaWMgIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPExJTksgUkVMPSJTVFlMRVNIRUVUIiBIUkVGPSJib29rLmNzcyIgQ0hBUlNFVD0iSVNPLTg4NTktMSIKLQlUWVBFPSJ0ZXh0L2NzcyI+Ci08dGl0bGU+TGVnYWwgTm90aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPGgzPjxhIE5BTUU9Ik5vdGljZXMiPjwvYT5Ob3RpY2VzPC9oMz4KLTxwPlRoZSBtYXRlcmlhbCBpbiB0aGlzIGd1aWRlIGlzIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uIGFuZAotb3RoZXJzIDIwMDAsIDIwMDUuPC9wPgotPHA+PGEgaHJlZj0iYWJvdXQuaHRtbCI+VGVybXMgYW5kIGNvbmRpdGlvbnMgcmVnYXJkaW5nIHRoZSB1c2Ugb2YgdGhpcwotZ3VpZGUuPC9hPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcGFja2FnZXMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9wYWNrYWdlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NGNmZTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9wYWNrYWdlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotICAgICAgICAgICAgPHBhY2thZ2VzPjxwYWNrYWdlPjwvcGFja2FnZT48cGFja2FnZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L3BhY2thZ2U+PHBhY2thZ2U+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvcGFja2FnZT48cGFja2FnZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L3BhY2thZ2U+PHBhY2thZ2U+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzPC9wYWNrYWdlPjxwYWNrYWdlPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlsczwvcGFja2FnZT48L3BhY2thZ2VzPgotICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjZTJkYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotcGx1Z2luTmFtZT1XZWIgU2VydmljZXMgQVBJIERvY3VtZW50YXRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZGI1NDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JCi08IS0tCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotIERlZmluZSBTdWJzZWN0aW9uIFRhYmxlIG9mIENvbnRlbnRzCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0tLT4gCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9InRvcGljc19SZWZlcmVuY2UueG1sIi8+Ci0JCTx0b2MgZmlsZT0iamF2YWRvY3RvYy54bWwiLz4KLQkJPHRvYyBmaWxlPSJ0b3BpY3NfRXh0UG9pbnRfUmVmZXJlbmNlLnhtbCIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvYWxsY2xhc3Nlcy1mcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2FsbGNsYXNzZXMtZnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiOWJhZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvYWxsY2xhc3Nlcy1mcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotQWxsIENsYXNzZXMKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLTxCPkFsbCBDbGFzc2VzPC9CPjwvRk9OVD4KLTxCUj4KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPkFjdGl2aXR5VXRpbHM8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SURlc2NyaXB0b3I8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SUVuYWJsZU9wZXJhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JRmlsdGVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JTGF1bmNoT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklMYXVuY2hPcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5T3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklQb2xpY3lSZWxhdGlvbnNoaXA8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5U3RhdGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVBvbGljeVN0YXRlRW51bTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklRdWlja0ZpeEFjdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUXVpY2tGaXhBY3Rpb25JbmZvPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JU2VydmljZVBvbGljeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+UG9saWN5UmVsYXRpb25zaGlwSW1wbDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiIHRhcmdldD0iY2xhc3NGcmFtZSI+UmVnaXN0cnlVdGlsczwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiIHRhcmdldD0iY2xhc3NGcmFtZSI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiIHRhcmdldD0iY2xhc3NGcmFtZSI+U2VydmljZVV0aWxzPC9BPgotPEJSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTcyYjEzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUFsbCBDbGFzc2VzCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIj4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci08Qj5BbGwgQ2xhc3NlczwvQj48L0ZPTlQ+Ci08QlI+Ci0KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+QWN0aXZpdHlVdGlsczwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEk+SURlc2NyaXB0b3I8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxJPklFbmFibGVPcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxJPklGaWx0ZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxJPklMYXVuY2hPcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxJPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48ST5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48ST5JUG9saWN5T3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxJPklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48ST5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48ST5JUG9saWN5UmVsYXRpb25zaGlwPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxJPklQb2xpY3lTdGF0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEk+SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxJPklQb2xpY3lTdGF0ZUVudW08L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEk+SVF1aWNrRml4QWN0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48ST5JUXVpY2tGaXhBY3Rpb25JbmZvPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEk+SVNlcnZpY2VQb2xpY3k8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEk+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEk+SVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscyI+UmVnaXN0cnlVdGlsczwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj5TZXJ2aWNlVXRpbHM8L0E+Ci08QlI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvY29uc3RhbnQtdmFsdWVzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvY29uc3RhbnQtdmFsdWVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NjRiMTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2NvbnN0YW50LXZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUNvbnN0YW50IEZpZWxkIFZhbHVlcwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkNvbnN0YW50IEZpZWxkIFZhbHVlcyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9jb25zdGFudC12YWx1ZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJjb25zdGFudC12YWx1ZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08Q0VOVEVSPgotPEgxPgotQ29uc3RhbnQgRmllbGQgVmFsdWVzPC9IMT4KLTwvQ0VOVEVSPgotPEhSIFNJWkU9IjQiIE5PU0hBREU+Ci08Qj5Db250ZW50czwvQj48VUw+Ci08TEk+PEEgSFJFRj0iI29yZy5lY2xpcHNlIj5vcmcuZWNsaXBzZS4qPC9BPgotPC9VTD4KLQotPEEgTkFNRT0ib3JnLmVjbGlwc2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Rk9OVCBTSVpFPSIrMiI+Ci1vcmcuZWNsaXBzZS4qPC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIzIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlPC9BPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwjRGVmYXVsdFZhbHVlS2V5Ij5EZWZhdWx0VmFsdWVLZXk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iZGVmYXVsdC52YWx1ZS5rZXkiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMyI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bS5GQUxTRV9FTlVNIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwjRkFMU0VfRU5VTSI+RkFMU0VfRU5VTTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJvcmcuZWNsaXBzZS53c3QuZmFsc2UiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bS5UUlVFX0VOVU0iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCNUUlVFX0VOVU0iPlRSVUVfRU5VTTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJvcmcuZWNsaXBzZS53c3QudHJ1ZSI8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIzIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjUExVR0lOX0lEIj5QTFVHSU5fSUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IjwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjMiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sI1BMVUdJTl9JRCI+UExVR0lOX0lEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sP2NvbnN0YW50LXZhbHVlcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImNvbnN0YW50LXZhbHVlcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2RlcHJlY2F0ZWQtbGlzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2RlcHJlY2F0ZWQtbGlzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NThhMzA5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9kZXByZWNhdGVkLWxpc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1EZXByZWNhdGVkIExpc3QKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJEZXByZWNhdGVkIExpc3QiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/ZGVwcmVjYXRlZC1saXN0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPkRlcHJlY2F0ZWQgQVBJPC9CPjwvSDI+Ci08L0NFTlRFUj4KLTxIUiBTSVpFPSI0IiBOT1NIQURFPgotPEI+Q29udGVudHM8L0I+PFVMPgotPC9VTD4KLQotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9kZXByZWNhdGVkLWxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9oZWxwLWRvYy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2hlbHAtZG9jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYTg4OWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2hlbHAtZG9jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotQVBJIEhlbHAKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJBUEkgSGVscCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/aGVscC1kb2MuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJoZWxwLWRvYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDE+Ci1Ib3cgVGhpcyBBUEkgRG9jdW1lbnQgSXMgT3JnYW5pemVkPC9IMT4KLTwvQ0VOVEVSPgotVGhpcyBBUEkgKEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSkgZG9jdW1lbnQgaGFzIHBhZ2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGl0ZW1zIGluIHRoZSBuYXZpZ2F0aW9uIGJhciwgZGVzY3JpYmVkIGFzIGZvbGxvd3MuPEgzPgotT3ZlcnZpZXc8L0gzPgotPEJMT0NLUVVPVEU+Ci0KLTxQPgotVGhlIDxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+T3ZlcnZpZXc8L0E+IHBhZ2UgaXMgdGhlIGZyb250IHBhZ2Ugb2YgdGhpcyBBUEkgZG9jdW1lbnQgYW5kIHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgcGFja2FnZXMgd2l0aCBhIHN1bW1hcnkgZm9yIGVhY2guICBUaGlzIHBhZ2UgY2FuIGFsc28gY29udGFpbiBhbiBvdmVyYWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXQgb2YgcGFja2FnZXMuPC9CTE9DS1FVT1RFPgotPEgzPgotUGFja2FnZTwvSDM+Ci08QkxPQ0tRVU9URT4KLQotPFA+Ci1FYWNoIHBhY2thZ2UgaGFzIGEgcGFnZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBpdHMgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcywgd2l0aCBhIHN1bW1hcnkgZm9yIGVhY2guIFRoaXMgcGFnZSBjYW4gY29udGFpbiBmb3VyIGNhdGVnb3JpZXM6PFVMPgotPExJPkludGVyZmFjZXMgKGl0YWxpYyk8TEk+Q2xhc3NlczxMST5FbnVtczxMST5FeGNlcHRpb25zPExJPkVycm9yczxMST5Bbm5vdGF0aW9uIFR5cGVzPC9VTD4KLTwvQkxPQ0tRVU9URT4KLTxIMz4KLUNsYXNzL0ludGVyZmFjZTwvSDM+Ci08QkxPQ0tRVU9URT4KLQotPFA+Ci1FYWNoIGNsYXNzLCBpbnRlcmZhY2UsIG5lc3RlZCBjbGFzcyBhbmQgbmVzdGVkIGludGVyZmFjZSBoYXMgaXRzIG93biBzZXBhcmF0ZSBwYWdlLiBFYWNoIG9mIHRoZXNlIHBhZ2VzIGhhcyB0aHJlZSBzZWN0aW9ucyBjb25zaXN0aW5nIG9mIGEgY2xhc3MvaW50ZXJmYWNlIGRlc2NyaXB0aW9uLCBzdW1tYXJ5IHRhYmxlcywgYW5kIGRldGFpbGVkIG1lbWJlciBkZXNjcmlwdGlvbnM6PFVMPgotPExJPkNsYXNzIGluaGVyaXRhbmNlIGRpYWdyYW08TEk+RGlyZWN0IFN1YmNsYXNzZXM8TEk+QWxsIEtub3duIFN1YmludGVyZmFjZXM8TEk+QWxsIEtub3duIEltcGxlbWVudGluZyBDbGFzc2VzPExJPkNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbjxMST5DbGFzcy9pbnRlcmZhY2UgZGVzY3JpcHRpb24KLTxQPgotPExJPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PExJPkZpZWxkIFN1bW1hcnk8TEk+Q29uc3RydWN0b3IgU3VtbWFyeTxMST5NZXRob2QgU3VtbWFyeQotPFA+Ci08TEk+RmllbGQgRGV0YWlsPExJPkNvbnN0cnVjdG9yIERldGFpbDxMST5NZXRob2QgRGV0YWlsPC9VTD4KLUVhY2ggc3VtbWFyeSBlbnRyeSBjb250YWlucyB0aGUgZmlyc3Qgc2VudGVuY2UgZnJvbSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24gZm9yIHRoYXQgaXRlbS4gVGhlIHN1bW1hcnkgZW50cmllcyBhcmUgYWxwaGFiZXRpY2FsLCB3aGlsZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb25zIGFyZSBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGlzIHByZXNlcnZlcyB0aGUgbG9naWNhbCBncm91cGluZ3MgZXN0YWJsaXNoZWQgYnkgdGhlIHByb2dyYW1tZXIuPC9CTE9DS1FVT1RFPgotPC9CTE9DS1FVT1RFPgotPEgzPgotQW5ub3RhdGlvbiBUeXBlPC9IMz4KLTxCTE9DS1FVT1RFPgotCi08UD4KLUVhY2ggYW5ub3RhdGlvbiB0eXBlIGhhcyBpdHMgb3duIHNlcGFyYXRlIHBhZ2Ugd2l0aCB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOjxVTD4KLTxMST5Bbm5vdGF0aW9uIFR5cGUgZGVjbGFyYXRpb248TEk+QW5ub3RhdGlvbiBUeXBlIGRlc2NyaXB0aW9uPExJPlJlcXVpcmVkIEVsZW1lbnQgU3VtbWFyeTxMST5PcHRpb25hbCBFbGVtZW50IFN1bW1hcnk8TEk+RWxlbWVudCBEZXRhaWw8L1VMPgotPC9CTE9DS1FVT1RFPgotPC9CTE9DS1FVT1RFPgotPEgzPgotRW51bTwvSDM+Ci08QkxPQ0tRVU9URT4KLQotPFA+Ci1FYWNoIGVudW0gaGFzIGl0cyBvd24gc2VwYXJhdGUgcGFnZSB3aXRoIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6PFVMPgotPExJPkVudW0gZGVjbGFyYXRpb248TEk+RW51bSBkZXNjcmlwdGlvbjxMST5FbnVtIENvbnN0YW50IFN1bW1hcnk8TEk+RW51bSBDb25zdGFudCBEZXRhaWw8L1VMPgotPC9CTE9DS1FVT1RFPgotPEgzPgotVXNlPC9IMz4KLTxCTE9DS1FVT1RFPgotRWFjaCBkb2N1bWVudGVkIHBhY2thZ2UsIGNsYXNzIGFuZCBpbnRlcmZhY2UgaGFzIGl0cyBvd24gVXNlIHBhZ2UuICBUaGlzIHBhZ2UgZGVzY3JpYmVzIHdoYXQgcGFja2FnZXMsIGNsYXNzZXMsIG1ldGhvZHMsIGNvbnN0cnVjdG9ycyBhbmQgZmllbGRzIHVzZSBhbnkgcGFydCBvZiB0aGUgZ2l2ZW4gY2xhc3Mgb3IgcGFja2FnZS4gR2l2ZW4gYSBjbGFzcyBvciBpbnRlcmZhY2UgQSwgaXRzIFVzZSBwYWdlIGluY2x1ZGVzIHN1YmNsYXNzZXMgb2YgQSwgZmllbGRzIGRlY2xhcmVkIGFzIEEsIG1ldGhvZHMgdGhhdCByZXR1cm4gQSwgYW5kIG1ldGhvZHMgYW5kIGNvbnN0cnVjdG9ycyB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSBBLiAgWW91IGNhbiBhY2Nlc3MgdGhpcyBwYWdlIGJ5IGZpcnN0IGdvaW5nIHRvIHRoZSBwYWNrYWdlLCBjbGFzcyBvciBpbnRlcmZhY2UsIHRoZW4gY2xpY2tpbmcgb24gdGhlICJVc2UiIGxpbmsgaW4gdGhlIG5hdmlnYXRpb24gYmFyLjwvQkxPQ0tRVU9URT4KLTxIMz4KLVRyZWUgKENsYXNzIEhpZXJhcmNoeSk8L0gzPgotPEJMT0NLUVVPVEU+Ci1UaGVyZSBpcyBhIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+Q2xhc3MgSGllcmFyY2h5PC9BPiBwYWdlIGZvciBhbGwgcGFja2FnZXMsIHBsdXMgYSBoaWVyYXJjaHkgZm9yIGVhY2ggcGFja2FnZS4gRWFjaCBoaWVyYXJjaHkgcGFnZSBjb250YWlucyBhIGxpc3Qgb2YgY2xhc3NlcyBhbmQgYSBsaXN0IG9mIGludGVyZmFjZXMuIFRoZSBjbGFzc2VzIGFyZSBvcmdhbml6ZWQgYnkgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIHN0YXJ0aW5nIHdpdGggPGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4uIFRoZSBpbnRlcmZhY2VzIGRvIG5vdCBpbmhlcml0IGZyb20gPGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4uPFVMPgotPExJPldoZW4gdmlld2luZyB0aGUgT3ZlcnZpZXcgcGFnZSwgY2xpY2tpbmcgb24gIlRyZWUiIGRpc3BsYXlzIHRoZSBoaWVyYXJjaHkgZm9yIGFsbCBwYWNrYWdlcy48TEk+V2hlbiB2aWV3aW5nIGEgcGFydGljdWxhciBwYWNrYWdlLCBjbGFzcyBvciBpbnRlcmZhY2UgcGFnZSwgY2xpY2tpbmcgIlRyZWUiIGRpc3BsYXlzIHRoZSBoaWVyYXJjaHkgZm9yIG9ubHkgdGhhdCBwYWNrYWdlLjwvVUw+Ci08L0JMT0NLUVVPVEU+Ci08SDM+Ci1EZXByZWNhdGVkIEFQSTwvSDM+Ci08QkxPQ0tRVU9URT4KLVRoZSA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZCBBUEk8L0E+IHBhZ2UgbGlzdHMgYWxsIG9mIHRoZSBBUEkgdGhhdCBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gQSBkZXByZWNhdGVkIEFQSSBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZSwgZ2VuZXJhbGx5IGR1ZSB0byBpbXByb3ZlbWVudHMsIGFuZCBhIHJlcGxhY2VtZW50IEFQSSBpcyB1c3VhbGx5IGdpdmVuLiBEZXByZWNhdGVkIEFQSXMgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIGltcGxlbWVudGF0aW9ucy48L0JMT0NLUVVPVEU+Ci08SDM+Ci1JbmRleDwvSDM+Ci08QkxPQ0tRVU9URT4KLVRoZSA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPkluZGV4PC9BPiBjb250YWlucyBhbiBhbHBoYWJldGljIGxpc3Qgb2YgYWxsIGNsYXNzZXMsIGludGVyZmFjZXMsIGNvbnN0cnVjdG9ycywgbWV0aG9kcywgYW5kIGZpZWxkcy48L0JMT0NLUVVPVEU+Ci08SDM+Ci1QcmV2L05leHQ8L0gzPgotVGhlc2UgbGlua3MgdGFrZSB5b3UgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgY2xhc3MsIGludGVyZmFjZSwgcGFja2FnZSwgb3IgcmVsYXRlZCBwYWdlLjxIMz4KLUZyYW1lcy9ObyBGcmFtZXM8L0gzPgotVGhlc2UgbGlua3Mgc2hvdyBhbmQgaGlkZSB0aGUgSFRNTCBmcmFtZXMuICBBbGwgcGFnZXMgYXJlIGF2YWlsYWJsZSB3aXRoIG9yIHdpdGhvdXQgZnJhbWVzLgotPFA+Ci08SDM+Ci1TZXJpYWxpemVkIEZvcm08L0gzPgotRWFjaCBzZXJpYWxpemFibGUgb3IgZXh0ZXJuYWxpemFibGUgY2xhc3MgaGFzIGEgZGVzY3JpcHRpb24gb2YgaXRzIHNlcmlhbGl6YXRpb24gZmllbGRzIGFuZCBtZXRob2RzLiBUaGlzIGluZm9ybWF0aW9uIGlzIG9mIGludGVyZXN0IHRvIHJlLWltcGxlbWVudG9ycywgbm90IHRvIGRldmVsb3BlcnMgdXNpbmcgdGhlIEFQSS4gV2hpbGUgdGhlcmUgaXMgbm8gbGluayBpbiB0aGUgbmF2aWdhdGlvbiBiYXIsIHlvdSBjYW4gZ2V0IHRvIHRoaXMgaW5mb3JtYXRpb24gYnkgZ29pbmcgdG8gYW55IHNlcmlhbGl6ZWQgY2xhc3MgYW5kIGNsaWNraW5nICJTZXJpYWxpemVkIEZvcm0iIGluIHRoZSAiU2VlIGFsc28iIHNlY3Rpb24gb2YgdGhlIGNsYXNzIGRlc2NyaXB0aW9uLgotPFA+Ci08SDM+Ci1Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0gzPgotVGhlIDxhIGhyZWY9ImNvbnN0YW50LXZhbHVlcy5odG1sIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+IHBhZ2UgbGlzdHMgdGhlIHN0YXRpYyBmaW5hbCBmaWVsZHMgYW5kIHRoZWlyIHZhbHVlcy4KLTxQPgotPEZPTlQgU0laRT0iLTEiPgotPEVNPgotVGhpcyBoZWxwIGZpbGUgYXBwbGllcyB0byBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgdXNpbmcgdGhlIHN0YW5kYXJkIGRvY2xldC48L0VNPgotPC9GT05UPgotPEJSPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/aGVscC1kb2MuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJoZWxwLWRvYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1Y2FjZmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1BLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iQS1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIExFVFRFUiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfQV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkE8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sI2FjY2VwdChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj48Qj5hY2NlcHQoSVNlcnZpY2VQb2xpY3kpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRmlsdGVyPC9BPgotPEREPkRldGVybWluZXMgaWYgYSBwb2xpY3kgc2hvdWxkIGJlIGFjY2VwdGVkIG9yIG5vdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwjYWN0aW9uKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSkiPjxCPmFjdGlvbihJU2VydmljZVBvbGljeSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVF1aWNrRml4QWN0aW9uPC9BPgotPEREPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGlzIGFjdGlvbiB0byByZXNvbHZlCi0gYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5IHByb2JsZW0uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+PEI+QWN0aXZpdHlVdGlsczwvQj48L0E+IC0gQ2xhc3MgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM8L0E+PEREPlVzZWQgYnkgdGhlIEVjbGlwc2UgYWN0aXZpdGllcyBmcmFtZXdvcmsuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmh0bWwjQWN0aXZpdHlVdGlscygpIj48Qj5BY3Rpdml0eVV0aWxzKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj5BY3Rpdml0eVV0aWxzPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNhZGRDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIsIGJvb2xlYW4pIj48Qj5hZGRDaGlsZENoYW5nZUxpc3RlbmVyKElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLCBib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPlRoaXMgbWV0aG9kIGFsbG93cyBjYWxscyB0byBsaXN0ZW5lciB0byBhbnkgY2hpbGQgY2hhbmdlIHRoYXQgaXMKLSBtYWRlIGluIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGlzIAotIGxvY2F0ZWQgaW4gdGhlIHRyZWUgb2Ygc2VydmljZSBwb2xpY2llcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNhZGRQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIpIj48Qj5hZGRQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPgotPEREPkFkZHMgYSBjaGlsZCBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCNhZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIsIGJvb2xlYW4pIj48Qj5hZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLCBib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGU8L0E+Ci08REQ+QWRkcyBhIHBvbGljeSBzdGF0ZSBjaGFuZ2UgbGlzdGVuZXIgdG8gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjYWRkUHJvamVjdExvYWRMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIpIj48Qj5hZGRQcm9qZWN0TG9hZExpc3RlbmVyKElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+QWRkIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcikiPjxCPmFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKElTdGF0dXNDaGFuZ2VMaXN0ZW5lcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5BZGRzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBMRVRURVImbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjRiODVmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVAtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJQLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTkuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEwLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfUF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlA8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sI1BMVUdJTl9JRCI+PEI+UExVR0lOX0lEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwjUExVR0lOX0lEIj48Qj5QTFVHSU5fSUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48REQ+VGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBpbnRlcmZhY2UuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwjUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbChqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5KSI+PEI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbChMaXN0Jmx0O0lTdGF0ZUVudW1lcmF0aW9uSXRlbSZndDssIElTZXJ2aWNlUG9saWN5KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw8L0E+Ci08REQ+QSBzaW1wbGUgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UG9saWN5UmVsYXRpb25zaGlwSW1wbDwvQj48L0E+IC0gQ2xhc3MgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PEREPlRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIElQb2xpY3lSZWxhdGlvbnNoaXAKLSBpbnRlcmZhY2UuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwjUG9saWN5UmVsYXRpb25zaGlwSW1wbChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdCwgamF2YS51dGlsLkxpc3QpIj48Qj5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsKElQb2xpY3lFbnVtZXJhdGlvbkxpc3QsIExpc3QmbHQ7SVBvbGljeUVudW1lcmF0aW9uTGlzdCZndDspPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+UG9saWN5UmVsYXRpb25zaGlwSW1wbDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwjcG9saWN5U3RhdGVDaGFuZ2Uob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cG9saWN5U3RhdGVDaGFuZ2UoSVNlcnZpY2VQb2xpY3ksIFN0cmluZywgU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0E+Ci08REQ+Q2FsbGVkIHdoZW4gYSBzdGF0ZSBjaGFuZ2UgZXZlbnQgb2NjdXJzIGZvciBhIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCNwdXREZWZhdWx0VmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbikiPjxCPnB1dERlZmF1bHRWYWx1ZShTdHJpbmcsIFN0cmluZywgYm9vbGVhbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlPC9BPgotPEREPlRoaXMgbWV0aG9kIHNldHMgdGhlIGRlZmF1bHQgZm9yIGEgcGFydGljdWxhciBrZXkuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI3B1dFZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5wdXRWYWx1ZShTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlPC9BPgotPEREPlRoaXMgbWV0aG9kIHNldHMgc29tZSBzdGF0ZSBmb3IgYSBzZXJ2aWNlIHBvbGljeS4KLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTkuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEwLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTExLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMmI3N2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTExLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotUS1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlEtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTExLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfUV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlE8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyhib29sZWFuKSI+PEI+cXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyhib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPkluZGljYXRlcyB3aGV0aGVyIGNoaWxkIGNoYW5nZSBsaXN0ZW5lcnMgc2hvdWxkIGJlIHF1ZXVlZCBvciBub3QuCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMC5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlY8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI1MGE2YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1SLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iUi1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMS5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMy5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlY8L0E+IDxIUj4KLTxBIE5BTUU9Il9SXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+UjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiPjxCPlJlZ2lzdHJ5VXRpbHM8L0I+PC9BPiAtIENsYXNzIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzPC9BPjxERD5UaGlzIGNsYXNzIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSBwbHVnaW4gdG8gdXNlLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sI1JlZ2lzdHJ5VXRpbHMoKSI+PEI+UmVnaXN0cnlVdGlscygpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscyI+UmVnaXN0cnlVdGlsczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNyZW1vdmVDaGlsZChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj48Qj5yZW1vdmVDaGlsZChJU2VydmljZVBvbGljeSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZW1vdmVzIGEgY2hpbGQgc2VydmljZSBwb2xpY3kgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNyZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIsIGJvb2xlYW4pIj48Qj5yZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLCBib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPlJlbW92ZXMgYSBjaGlsZCBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjcmVtb3ZlUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKSI+PEI+cmVtb3ZlUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcihJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZW1vdmVzIGEgY2hpbGQgbGlzdGVuZXIgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCNyZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIpIj48Qj5yZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGU8L0E+Ci08REQ+UmVtb3ZlcyBhIHBvbGljeSBzdGF0ZSBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNyZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcikiPjxCPnJlbW92ZVByb2plY3RMb2FkTGlzdGVuZXIoSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT4KLTxERD5SZW1vdmVzIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcmVtb3ZlU2VydmljZVBvbGljeShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj48Qj5yZW1vdmVTZXJ2aWNlUG9saWN5KElTZXJ2aWNlUG9saWN5KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPlJlbW92ZXMgYSBzZXJ2aWNlIHBvbGljeSBmcm9tIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNyZW1vdmVTdGF0dXNDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcikiPjxCPnJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyKElTdGF0dXNDaGFuZ2VMaXN0ZW5lcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZW1vdmVzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjcmVzdG9yZURlZmF1bHRzKCkiPjxCPnJlc3RvcmVEZWZhdWx0cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Ci08REQ+UmVzdG9yZXMgdGhlIHBvbGljeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjcmVzdG9yZURlZmF1bHRzKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+PEI+cmVzdG9yZURlZmF1bHRzKElQcm9qZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPgotPEREPlJlc3RvcmVzIHRoZSBwb2xpY3kgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcmVzdG9yZURlZmF1bHRzKCkiPjxCPnJlc3RvcmVEZWZhdWx0cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+UmVzdG9yZXMgdGhlIHdvcmtzcGFjZSBsZXZlbCBkZWZhdWx0cy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcmVzdG9yZURlZmF1bHRzKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+PEI+cmVzdG9yZURlZmF1bHRzKElQcm9qZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPlJlc3RvcmVzIHRoZSBwcm9qZWN0IGxldmVsIGRlZmF1bHRzLgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjdhNDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotUy1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlMtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfU18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlM8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48REQ+VGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjU2VydmljZVBvbGljeUFjdGl2YXRvcigpIj48Qj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9BPgotPEREPlRoZSBjb25zdHJ1Y3RvcgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48REQ+VGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkoKSI+PEI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT4KLTxERD5UaGUgY29uc3RydWN0b3IKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQj48L0E+IC0gQ2xhc3MgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PEREPlRoaXMgY2xhc3MgaXMgdXNlZCB0byBhY2Nlc3MgYW5kIGFkZCBzZXJ2aWNlIHBvbGljaWVzIHRvIHRoZSBwbGF0Zm9ybS48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48REQ+VGhpcyBjbGFzcyBpcyB1c2VkIHRvIGdldCBTZXJ2aWNlIHBvbGljeSBVSSBpbmZvcm1hdGlvbi48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj48Qj5TZXJ2aWNlVXRpbHM8L0I+PC9BPiAtIENsYXNzIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzPC9BPjxERD5UaGlzIGNsYXNzIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kIGZvciBzZXJ2aWNlIHBvbGljaWVzLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwjU2VydmljZVV0aWxzKCkiPjxCPlNlcnZpY2VVdGlscygpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj5TZXJ2aWNlVXRpbHM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0Q29udGV4dEhlbHBJZChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0Q29udGV4dEhlbHBJZChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+Ci08REQ+U2V0cyB0aGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCNzZXRDdXJyZW50SXRlbShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0Q3VycmVudEl0ZW0oU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlRW51bTwvQT4KLTxERD5TZXRzIHRoZSBjdXJyZW50IGVudW0gaXRlbS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNzZXREZXNjcmlwdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0RGVzY3JpcHRpb24oU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPgotPEREPlNldHMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGRlc2NyaXB0b3IuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0SWNvbkJ1bmRsZUlkKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRJY29uQnVuZGxlSWQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPgotPEREPlNldHMgdGhlIGljb24gYnVuZGxlIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0SWNvblBhdGgoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldEljb25QYXRoKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4KLTxERD5TZXRzIHRoZSBpY29uIHBhdGNoIGZvciB0aGlzIGRlc2NyaXB0b3IuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0TG9uZ05hbWUoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldExvbmdOYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4KLTxERD5TZXRzIHRoZSBsb25nIG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCNzZXRNdXRhYmxlKGJvb2xlYW4pIj48Qj5zZXRNdXRhYmxlKGJvb2xlYW4pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgYm9vbGVhbikiPjxCPnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoSVByb2plY3QsIGJvb2xlYW4pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+U2V0cyB3aGV0aGVyIGEgcHJvamVjdCBzcGVjaWZpYyBzZXJ2aWNlIHBvbGljeSBwcmVmZXJlbmNlcyBpcyBlbmFibGVkIG9yIG5vdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNzZXRSZWxhdGlvbnNoaXBzKGphdmEudXRpbC5MaXN0KSI+PEI+c2V0UmVsYXRpb25zaGlwcyhMaXN0Jmx0O0lQb2xpY3lSZWxhdGlvbnNoaXAmZ3Q7KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPgotPEREPlNldHMgdGhlIHJlbGF0aW9uc2hpcHMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0U2hvcnROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRTaG9ydE5hbWUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPgotPEREPlNldHMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjc2V0U3RhdGVJdGVtKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0LCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0U3RhdGVJdGVtKElQcm9qZWN0LCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjc2V0U3RhdHVzKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzKSI+PEI+c2V0U3RhdHVzKElTdGF0dXMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Ci08REQ+U2V0cyB0aGUgc3RhdHVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCNzb3J0TGlzdChqYXZhLnV0aWwuTGlzdCkiPjxCPnNvcnRMaXN0KExpc3QmbHQ7SVNlcnZpY2VQb2xpY3kmZ3Q7KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPlNlcnZpY2VVdGlsczwvQT4KLTxERD5Tb3J0cyBhIGxpc3Qgb2Ygc2VydmljZSBwb2xpY2llcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KSI+PEI+c3RhcnQoQnVuZGxlQ29udGV4dCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkiPjxCPnN0YXJ0KEJ1bmRsZUNvbnRleHQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCNzdGF0dXNDaGFuZ2Uob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cywgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMpIj48Qj5zdGF0dXNDaGFuZ2UoSVNlcnZpY2VQb2xpY3ksIElTdGF0dXMsIElTdGF0dXMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjwvQT4KLTxERD5DYWxsZWQgd2hlbiBhIHN0YXR1cyBjaGFuZ2UgZXZlbnQgb2NjdXJzLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkiPjxCPnN0b3AoQnVuZGxlQ29udGV4dCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KSI+PEI+c3RvcChCdW5kbGVDb250ZXh0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9BPgotPEREPiZuYnNwOwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNGVkZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVC1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlQtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfVF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlQ8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sI1RSVUVfRU5VTSI+PEI+VFJVRV9FTlVNPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPgotPEREPiZuYnNwOwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE1Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTNjOGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE1Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVi1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlYtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBMRVRURVI8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0xNS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotPEEgTkFNRT0iX1ZfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5WPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sI3ZhbHVlT2YoamF2YS5sYW5nLlN0cmluZykiPjxCPnZhbHVlT2YoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGVudW0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgZW51bSBjb25zdGFudCBvZiB0aGlzIHR5cGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sI3ZhbHVlcygpIj48Qj52YWx1ZXMoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGVudW0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+Ci08REQ+UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBjb25zdGFudHMgb2YgdGhpcyBlbnVtIHR5cGUsIGluCi10aGUgb3JkZXIgdGhleSdyZSBkZWNsYXJlZC4KLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgTEVUVEVSPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xNS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlY8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjN2M1M2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1DLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iQy1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTMuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotPEEgTkFNRT0iX0NfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5DPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sI2NoaWxkQ2hhbmdlKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCkiPjxCPmNoaWxkQ2hhbmdlKExpc3QmbHQ7SVNlcnZpY2VQb2xpY3kmZ3Q7LCBMaXN0Jmx0O0Jvb2xlYW4mZ3Q7KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9BPgotPEREPlRoZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggYW4gYXJyYXkgb2YgY2hpbGQgY2hhbmdlcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjY29tbWl0Q2hhbmdlcygpIj48Qj5jb21taXRDaGFuZ2VzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT4KLTxERD5DYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSB0aGUgc2VydmljZSBwb2xpY2llcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjY29tbWl0Q2hhbmdlcyhvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPjxCPmNvbW1pdENoYW5nZXMoSVByb2plY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+Q2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGNvbW1pdCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gdGhlIHNlcnZpY2UgcG9saWNpZXMgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNjcmVhdGVTZXJ2aWNlUG9saWN5KG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmNyZWF0ZVNlcnZpY2VQb2xpY3koSVNlcnZpY2VQb2xpY3ksIFN0cmluZywgU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+VGhpcyBtZXRob2QgY3JlYXRlcyBhbiBJU2VydmljZVBvbGljeSBvYmplY3QuCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTMuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3YzQxZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUQtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJELUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNC5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfRF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkQ8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwjRGVmYXVsdFZhbHVlS2V5Ij48Qj5EZWZhdWx0VmFsdWVLZXk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNkaXNjYXJkQ2hhbmdlcygpIj48Qj5kaXNjYXJkQ2hhbmdlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+Q2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYWxsIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGFsbAotIHRoZSBzZXJ2aWNlIHBvbGljaWVzLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNkaXNjYXJkQ2hhbmdlcyhvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPjxCPmRpc2NhcmRDaGFuZ2VzKElQcm9qZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPkNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkaXNjYXJkIGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSB0aGUgc2VydmljZSBwb2xpY2llcyBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTQuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0zLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYwMmIzNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUUtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJFLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTMuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNS5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfRV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkU8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwjZWFybHlTdGFydHVwKCkiPjxCPmVhcmx5U3RhcnR1cCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+Ci08REQ+Q2FsbGVkIGJ5IEVjbGlwc2Ugd2hlbiBpdCBzdGFydHMgdXAuCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0zLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC00Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5YTNkZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUYtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJGLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTQuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfRl8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkY8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sI0ZBTFNFX0VOVU0iPjxCPkZBTFNFX0VOVU08L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZUVudW08L0E+Ci08REQ+Jm5ic3A7Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC00Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTYuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC01Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE1NTU4Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUctSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJHLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNy5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTYuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfR18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkc8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sI2dldEFjdGlvbigpIj48Qj5nZXRBY3Rpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVF1aWNrRml4QWN0aW9uSW5mbzwvQT4KLTxERD5SZXR1cm5zIHRoZSBhY3Rpb24gZm9yIHRoaXMgcXVpY2sgZml4LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldEFsbE9wZXJhdGlvbnMoKSI+PEI+Z2V0QWxsT3BlcmF0aW9ucygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9BPgotPEREPlJldHVybnMgYWxsIHRoZSBvcGVyYXRpb25zIGZvciBhbGwga25vd24gcG9saWNpZXMuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2dldEFsbFBvbGljeUlkcygpIj48Qj5nZXRBbGxQb2xpY3lJZHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPlJldHVybnMgYWxsIHNlcnZpY2UgcG9saWN5IElEcyB0aGF0IGFyZSBkZWZpbmVkLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwjZ2V0QXR0cmlidXRlKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXRBdHRyaWJ1dGUoSUNvbmZpZ3VyYXRpb25FbGVtZW50LCBTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiPlJlZ2lzdHJ5VXRpbHM8L0E+Ci08REQ+R2V0cyBhIGF0dHJpYnV0ZSB2YWx1ZSB3aGVyZSB0aGUgYXR0cmlidXRlIG5hbWUgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sI2dldEF0dHJpYnV0ZU5hbWUob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCwgamF2YS5sYW5nLlN0cmluZykiPjxCPmdldEF0dHJpYnV0ZU5hbWUoSUNvbmZpZ3VyYXRpb25FbGVtZW50LCBTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiPlJlZ2lzdHJ5VXRpbHM8L0E+Ci08REQ+VGhpcyBtZXRob2QgdGFrZXMgaW4gYSBsb3dlciBjYXNlIGF0dHJpYnV0ZSBuYW1lLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldENoaWxkcmVuKCkiPjxCPmdldENoaWxkcmVuKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXRDb250ZXh0SGVscElkKCkiPjxCPmdldENvbnRleHRIZWxwSWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPgotPEREPlJldHVybnMgdGhlIGNvbnRleHQgaGVscCBpZC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sI2dldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyKCkiPjxCPmdldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+QWN0aXZpdHlVdGlsczwvQT4KLTxERD5SZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgZmlsdGVyIGJhc2VkIG9uIHRoZSBFY2xpcHNlIGFjdGl2aXRpZXMgc2V0dGluZ3MuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCNnZXRDdXJyZW50SXRlbSgpIj48Qj5nZXRDdXJyZW50SXRlbSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPgotPEREPlJldHVybnMgdGhlIGN1cnJlbnQgZW51bSBpdGVtLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjZ2V0RGVmYXVsdCgpIj48Qj5nZXREZWZhdWx0KCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwjZ2V0RGVmYXVsdCgpIj48Qj5nZXREZWZhdWx0KCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+Ci08REQ+UmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCNnZXREZWZhdWx0SWQoKSI+PEI+Z2V0RGVmYXVsdElkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZUVudW08L0E+Ci08REQ+UmV0dXJucyB0aGUgZGVmYXVsdCBlbnVtIGl0ZW0gZm9yIHRoaXMgZW51bWVyYXRpb24uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXREZWZhdWx0SXRlbSgpIj48Qj5nZXREZWZhdWx0SXRlbSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIGRlZmF1bHQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjZ2V0RGVzY3JpcHRpb24oKSI+PEI+Z2V0RGVzY3JpcHRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPgotPEREPlJldHVybnMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGRlc2NyaXB0b3IuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0RGVzY3JpcHRvcigpIj48Qj5nZXREZXNjcmlwdG9yKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjZ2V0RGVzY3JpcHRvcigpIj48Qj5nZXREZXNjcmlwdG9yKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCNnZXREZXNjcmlwdG9yKCkiPjxCPmdldERlc2NyaXB0b3IoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVF1aWNrRml4QWN0aW9uSW5mbzwvQT4KLTxERD5SZXR1cm5zIGEgZGVzY3JpcHRvciBmb3IgdGhpcyBxdWljayBmaXguCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRFbnVtZXJhdGlvbklkKCkiPjxCPmdldEVudW1lcmF0aW9uSWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSBlbnVtIElEIGZvciB0aGlzIG9wZXJhdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sI2dldEVudW1lcmF0aW9uTGlzdCgpIj48Qj5nZXRFbnVtZXJhdGlvbkxpc3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4KLTxERD5SZXR1cm5zIHRoZSBzdGF0ZSBlbnVtZXJhdGlvbiBsaXN0IGl0ZW1zLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwjZ2V0RW51bWVyYXRpb25MaXN0KCkiPjxCPmdldEVudW1lcmF0aW9uTGlzdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT4KLTxERD5SZXR1cm5zIGEgbGlzdCBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sI2dldEVudW1JZCgpIj48Qj5nZXRFbnVtSWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlRW51bTwvQT4KLTxERD5SZXR1cm5zIHRoZSBlbnVtZXJhdGlvbiBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlIHBvbGljeS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXRJY29uQnVuZGxlSWQoKSI+PEI+Z2V0SWNvbkJ1bmRsZUlkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBpY29uIGJ1bmRsZSBpZC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXRJY29uUGF0aCgpIj48Qj5nZXRJY29uUGF0aCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgaWNvbiBwYXRoIHJlbGF0aXZlIHRvIGFuIGljb24gYnVuZGxlLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldElkKCkiPjxCPmdldElkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZXR1cm5zIHRoZSB1bmlxdWUgSUQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sI2dldElkKCkiPjxCPmdldElkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPgotPEREPlJldHVybnMgdGhlIElEIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2dldElkKCkiPjxCPmdldElkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdW5pcXVlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwjZ2V0SW1hZ2VEZXNjcmlwdG9yKGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT4KLTxERD5SZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotIGFzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZ2V0SW5zdGFuY2UoKSI+PEI+Z2V0SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT4KLTxERD5SZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwjZ2V0SW5zdGFuY2UoKSI+PEI+Z2V0SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0E+Ci08REQ+UmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIFVJIG9iamVjdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXRMb25nTmFtZSgpIj48Qj5nZXRMb25nTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgbG9uZyBuYW1lIGZvciB0aGUgZGVzY3JpcHRvci4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwjZ2V0TG9uZ05hbWUoKSI+PEI+Z2V0TG9uZ05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+Ci08REQ+UmV0dXJucyB0aGUgbG9uZyBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRPcGVyYXRpb24ob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+Z2V0T3BlcmF0aW9uKElTZXJ2aWNlUG9saWN5LCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9BPgotPEREPlJldHVybnMgYW4gb3BlcmF0aW9uIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzZXJ2aWNlIHBvbGljeQotIGFuZCBoYXMgdGhlIHNwZWNpZmllZCBpZC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2dldE9wZXJhdGlvbktpbmQoKSI+PEI+Z2V0T3BlcmF0aW9uS2luZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIGtpbmQgb2Ygc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbnMob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBib29sZWFuKSI+PEI+Z2V0T3BlcmF0aW9ucyhJU2VydmljZVBvbGljeSwgYm9vbGVhbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0E+Ci08REQ+UmV0dXJucyB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIGZvciB0aGlzIHBvbGljeS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRPcGVyYXRpb25zTGlzdChqYXZhLnV0aWwuTGlzdCwgYm9vbGVhbikiPjxCPmdldE9wZXJhdGlvbnNMaXN0KExpc3QmbHQ7SVNlcnZpY2VQb2xpY3kmZ3Q7LCBib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTwvQT4KLTxERD5SZXR1cm5zIGEgbGlzdCBvZiBsaXN0IHBvbGljeSBvcGVyYXRpb25zIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGgKLSB0aGUgc3BlY2lmaWVkIHNlcnZpY2UgcG9saWNpZXMuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UGFyZW50UG9saWN5KCkiPjxCPmdldFBhcmVudFBvbGljeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Ci08REQ+UmV0dXJucyB0aGUgcGFyZW50IHNlcnZpY2UgcG9saWN5IG9iamVjdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sI2dldFBvbGljeSgpIj48Qj5nZXRQb2xpY3koKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4KLTxERD5SZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwjZ2V0UG9saWN5KCkiPjxCPmdldFBvbGljeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT4KLTxERD5SZXR1cm5zIGEgc2VydmljZSBwb2xpY3kuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCNnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKSI+PEI+Z2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+Ci08REQ+UmV0dXJucyB0aGUgcG9saWN5IGVudW1lcmF0aW9uIGxpc3QgZm9yIHRoaXMgcmVsYXRpb25zaGlwLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwjZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkiPjxCPmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+UG9saWN5UmVsYXRpb25zaGlwSW1wbDwvQT4KLTxERD5SZXR1cm5zIHRoZSBwb2xpY3kgZW51bWVyYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbnNoaXAuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRQb2xpY3lJZFBhdHRlcm4oKSI+PEI+Z2V0UG9saWN5SWRQYXR0ZXJuKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgaWQgcGF0dGVybiBmb3IgdGhpcyBvcGVyYXRpb24uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UG9saWN5U3RhdGUoKSI+PEI+Z2V0UG9saWN5U3RhdGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPgotPEREPlJldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRQb2xpY3lTdGF0ZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPjxCPmdldFBvbGljeVN0YXRlKElQcm9qZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPgotPEREPlJldHVybnMgdGhlIElQb2xpY3lTdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UG9saWN5U3RhdGVFbnVtKCkiPjxCPmdldFBvbGljeVN0YXRlRW51bSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Ci08REQ+UmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGVudW1lcmF0aW9uIG9iamVjdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRQb2xpY3lTdGF0ZUVudW0ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48Qj5nZXRQb2xpY3lTdGF0ZUVudW0oSVByb2plY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Ci08REQ+UmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGVudW1lcmF0aW9uIG9iamVjdCBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwjZ2V0UXVpY2tGaXhlcyhvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cykiPjxCPmdldFF1aWNrRml4ZXMoSVN0YXR1cyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0E+Ci08REQ+UmV0dXJucyBhIGxpc3Qgb2YgcXVpY2sgZml4IGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgc3RhdHVzIG9iamVjdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sI2dldFJlbGF0ZWRQb2xpY2llcygpIj48Qj5nZXRSZWxhdGVkUG9saWNpZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQT4KLTxERD5SZXR1cm5zIHRoZSByZWxhdGVkIHBvbGljaWVzIGZvciB0aGlzIHJlbGF0aW9uc2hpcC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sI2dldFJlbGF0ZWRQb2xpY2llcygpIj48Qj5nZXRSZWxhdGVkUG9saWNpZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0E+Ci08REQ+UmV0dXJucyB0aGUgcmVsYXRlZCBwb2xpY2llcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UmVsYXRpb25zaGlwcygpIj48Qj5nZXRSZWxhdGlvbnNoaXBzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZXR1cm5zIGEgbGlzdCBvZiByZWxhdGlvbnNoaXBzIHRvIG90aGVyIElTZXJ2aWNlUG9saWN5IG9iamVjdHMuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2dldFJvb3RTZXJ2aWNlUG9saWNpZXMob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklGaWx0ZXIpIj48Qj5nZXRSb290U2VydmljZVBvbGljaWVzKElGaWx0ZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+Ci08REQ+UmV0dXJucyB0aGUgbGlzdCBvZiByb290IHBvbGljaWVzIGZvciB0aGUgcGxhdGZvcm0gZ2l2ZW4gYSBmaWx0ZXIuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2dldFNlcnZpY2VQb2xpY3koamF2YS5sYW5nLlN0cmluZykiPjxCPmdldFNlcnZpY2VQb2xpY3koU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPlJldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBnaXZlbiBpdCdzIHVuaXF1ZSBJRC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2dldFNlcnZpY2VQb2xpY3koKSI+PEI+Z2V0U2VydmljZVBvbGljeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHNlcnZpY2UgcG9saWN5IGZvciB0aGlzIG9wZXJhdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXRTaG9ydE5hbWUoKSI+PEI+Z2V0U2hvcnROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBzaG9ydCBuYW1lIGZvciB0aGUgZGVzY3JpcHRvcgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCNnZXRTaG9ydE5hbWUoKSI+PEI+Z2V0U2hvcnROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPgotPEREPlJldHVybnMgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRTdGF0ZUVudW1lcmF0aW9uKGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXRTdGF0ZUVudW1lcmF0aW9uKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2dldFN0YXRlSXRlbShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPjxCPmdldFN0YXRlSXRlbShJUHJvamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgY3VycmVudCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZ2V0U3RhdGVJdGVtRW51bWVyYXRpb24oamF2YS5sYW5nLlN0cmluZykiPjxCPmdldFN0YXRlSXRlbUVudW1lcmF0aW9uKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRTdGF0dXMoKSI+PEI+Z2V0U3RhdHVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4KLTxERD5SZXR1cm5zIHRoZSBzdGF0dXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI2dldFZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXRWYWx1ZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT4KLTxERD5UaGlzIG1ldGhvZCBnZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC01Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTcuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTYuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC02Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMwZmFjYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUktSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTYuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOC5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5WPC9BPiA8SFI+Ci08QSBOQU1FPSJfSV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkk8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklEZXNjcmlwdG9yPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PEREPlRoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIGRlc2NyaXB0aW9uIGZvciBhIHNlcnZpY2UgcG9saWN5LjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SUVuYWJsZU9wZXJhdGlvbjwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPjxERD5UaGlzIGludGVyZmFjZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVuYWJsZWRDbGFzcyBhdHRyaWJ1dGUgb2YgdGhlCi0gZW5hYmxlZCBlbGVtZW50LjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SUZpbHRlcjwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPjxERD5UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGZpbHRlciBzZXJ2aWNlIHBvbGljaWVzLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SUxhdW5jaE9wZXJhdGlvbjwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPjxERD5UaGlzIGludGVyZmFjZSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGxhdW5jaENsYXNzIGF0dHJpYnV0ZSBvZgotIHRoZSBjb21wbGV4IGVsZW1lbnQuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0E+PEREPiZuYnNwOzxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPjxERD5UaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgcG9saWN5IGFuZCBhIGxpc3QKLSBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklQb2xpY3lPcGVyYXRpb248L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48REQ+VGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiB0aGF0IGhhcyBiZWVuIGRlZmluZWQKLSBpbiB0aGUgcGx1Z2luLnhtbCBtZXRhIGRhdGEuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0I+PC9BPiAtIEVudW0gaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+PEREPkluZGljYXRlcyB0aGUga2luZCBvZiBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gdGhhdCB0aGlzIG9iamVjdCByZXByZXNlbnRzLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0E+PEREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY29kZSB0aGF0IG5lZWRzIHRvIGV4ZWN1dGUgd2hlbiB0aGUKLSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBpcyBsb2FkZWQuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPC9BPjxERD5UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlZ2lzdGVyIGNvZGUgdGhhdCBuZWVkcyB0byBsb2FkZWQgd2hlbiBhIHBhcnRpY3VsYXIKLSBwcm9qZWN0IGlzIGxvYWRlZCBpbnRvIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklQb2xpY3lSZWxhdGlvbnNoaXA8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48REQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4KLSBzZXJ2aWNlIHBvbGljaWVzLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5U3RhdGU8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48REQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBzZXJ2aWNlIHBvbGljeSBleHRlbmRlcnMgdG8gc2F2ZSB0aGUgc3RhdGUgb2YKLSB0aGVyZSBwb2xpY2llcy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQT48REQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB3aGVuIHRoZSBkZXZlbG9wZXIgd2FudHMgdG8gbGlzdGVuZXIgdG8gc3RhdGUKLSBjaGFuZ2VzIGZvciBhIHBhcnRpY3VsYXIgc2VydmljZSBwb2xpY3kuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5U3RhdGVFbnVtPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PEREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBzdGF0ZSB3aGVuIGFuIGVudW1lcmF0aW9uIGlzIHVzZWQKLSB0byBwZXJzaXN0IHN0YXRlLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUXVpY2tGaXhBY3Rpb248L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48REQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBleHRlbmRlcnMgdG8gYWRkIHF1aWNrIGZpeGVzIHRvIHRoZSBzZXJ2aWNlIHBvbGljeSB1aQotIGZyYW1ld29yay48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklRdWlja0ZpeEFjdGlvbkluZm88L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48REQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBzdG9yZSBxdWljayBmaXggYWN0aW9uIGluZm9ybWF0aW9uLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwjaXNEZWZhdWx0KCkiPjxCPmlzRGVmYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhpcyBpcyB0aGUgZGVmYXVsdCBpdGVtIG9yIG5vdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjaXNFbmFibGVkKGphdmEubGFuZy5PYmplY3QpIj48Qj5pc0VuYWJsZWQoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPgotPEREPkluZGljYXRlcyBpZiB0aGUgcHJvcGVydHkgcGFnZSBmb3IgYSBwcm9qZWN0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBwb3B1cAotIG1lbnUgb3Igbm90LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmh0bWwjaXNFbmFibGVkKGphdmEudXRpbC5MaXN0KSI+PEI+aXNFbmFibGVkKExpc3QmbHQ7SVNlcnZpY2VQb2xpY3kmZ3Q7KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SUVuYWJsZU9wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNpc0VuYWJsZWQoamF2YS51dGlsLkxpc3QpIj48Qj5pc0VuYWJsZWQoTGlzdCZsdDtJU2VydmljZVBvbGljeSZndDspPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JU2VydmljZVBvbGljeTwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPjxERD5UaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGlkZWEgb2YgYSBzZXJ2aWNlIHBvbGljeTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwjaXNNdXRhYmxlKCkiPjxCPmlzTXV0YWJsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhlIHN0YXRlIG9mIHRoaXMgcG9saWN5IGlzIG11dGlibGUgb3Igbm90LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2lzUHJlZGVmaW5lZCgpIj48Qj5pc1ByZWRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPgotPEREPlJldHVybnMgaWYgdGhpcyBzZXJ2aWNlIHBvbGljeSBpcyBkZWZpbmVkIGJ5IGFuIGV4dGVuc2lvbiBvciBub3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2lzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPjxCPmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChJUHJvamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT4KLTxERD5SZXR1cm5zIGlmIHRoZSBwYXJ0aWN1bGFyIHByb2plY3QgaGFzIGJlZW4gZW5hYmxlZCBvciBub3Qgb24gaXQncwotIHNlcnZpY2UgcG9saWN5IHByb3BlcnR5IHBhZ2UuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PEREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtIHRoYXQgd2FzCi0gZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbiBpbiBwbHVnaW4ueG1sIG1ldGEgZGF0YS48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPC9BPjxERD5UaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IGNvZGUgdGhhdCBpcyBpbnRlcmVzdGVkIGluIGxpc3RlbmluZyB0byBzdGF0dXMKLSBjaGFuZ2UgZXZlbnRzIG9mIHNlcnZpY2UgcG9saWNpZXMuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjaXNVc2VEZWZhdWx0RGF0YSgpIj48Qj5pc1VzZURlZmF1bHREYXRhKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHVzZXMgZGVmYXVsdCBzdGF0ZSBvciBub3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNpc1dvcmtzcGFjZU9ubHkoKSI+PEI+aXNXb3Jrc3BhY2VPbmx5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB3aGV0aGVyIHRoaXMgaXMgYSB3b3Jrc3BhY2Ugb25seSBvcGVyYXRpb24gb3Igbm90LgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNi5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC04Lmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC03Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlY8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC04Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOGE3MDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1MLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTC1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC03Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTkuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTguaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC04Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotPEEgTkFNRT0iX0xfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5MPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCNsYXVuY2goamF2YS51dGlsLkxpc3QpIj48Qj5sYXVuY2goTGlzdCZsdDtJU2VydmljZVBvbGljeSZndDspPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JTGF1bmNoT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JTGF1bmNoT3BlcmF0aW9uPC9BPgotPEREPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGlzIGNvbXBsZXggb3BlcmF0aW9uLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjbGF1bmNoT3BlcmF0aW9uKGphdmEudXRpbC5MaXN0KSI+PEI+bGF1bmNoT3BlcmF0aW9uKExpc3QmbHQ7SVNlcnZpY2VQb2xpY3kmZ3Q7KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT4KLTxERD5MYXVuY2hlcyB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGlmIHRoaXMgaXMgYSBjb21wbGV4IG9wZXJhdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sI2xvYWQoKSI+PEI+bG9hZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjwvQT4KLTxERD5DYWxsZWQgb25jZSB3aGVuIHRoZSBzZXJ2aWNlIHBsYXRmb3JtIGlzIGxvYWRlZCBpbiB0aGUgc3lzdGVtLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sI2xvYWQob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48Qj5sb2FkKElQcm9qZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQT4KLTxERD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIGEgcHJvamVjdCBsb2FkZWQgaW50byB0aGUgc2VydmljZSBwb2xpY3kKLSBwbGF0Zm9ybS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sI2xvYWREZXNjcmlwdG9yKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQpIj48Qj5sb2FkRGVzY3JpcHRvcihJQ29uZmlndXJhdGlvbkVsZW1lbnQpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiPlJlZ2lzdHJ5VXRpbHM8L0E+Ci08REQ+TG9hZHMgdGhlIGF0dHJpYnV0ZXMgZm9yIGEgZGVzY3JpcHRvciBlbGVtZW50LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjbG9nRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPjxCPmxvZ0Vycm9yKFN0cmluZywgVGhyb3dhYmxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9BPgotPEREPkxvZ3MgYW4gZXJyb3Igd2l0aCB0aGlzIHBsdWdpbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwjbG9nRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPjxCPmxvZ0Vycm9yKFN0cmluZywgVGhyb3dhYmxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT4KLTxERD5Mb2dzIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgcGx1Z2luLgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNy5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC05Lmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC04Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlY8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC05Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTg4OTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1PLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTy1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC04Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC05Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlY8L0E+IDxIUj4KLTxBIE5BTUU9Il9PXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+TzwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9CPjwvQT4gLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTxERD4mbmJzcDs8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQj48L0E+IC0gcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPEREPiZuYnNwOzxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQj48L0E+IC0gcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8REQ+Jm5ic3A7PERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzPC9CPjwvQT4gLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczxERD4mbmJzcDs8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHM8L0I+PC9BPiAtIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzPEREPiZuYnNwOzwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTguaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC05Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+VjwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjRiYjQxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgRnJhbWVzZXQvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvZnJhbWVzZXQuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4LS0+Ci08VElUTEU+Ci1HZW5lcmF0ZWQgRG9jdW1lbnRhdGlvbiAoVW50aXRsZWQpCi08L1RJVExFPgotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgIHRhcmdldFBhZ2UgPSAiIiArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7Ci0gICAgaWYgKHRhcmdldFBhZ2UgIT0gIiIgJiYgdGFyZ2V0UGFnZSAhPSAidW5kZWZpbmVkIikKLSAgICAgICB0YXJnZXRQYWdlID0gdGFyZ2V0UGFnZS5zdWJzdHJpbmcoMSk7Ci0gICAgZnVuY3Rpb24gbG9hZEZyYW1lcygpIHsKLSAgICAgICAgaWYgKHRhcmdldFBhZ2UgIT0gIiIgJiYgdGFyZ2V0UGFnZSAhPSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgICB0b3AuY2xhc3NGcmFtZS5sb2NhdGlvbiA9IHRvcC50YXJnZXRQYWdlOwotICAgIH0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLTwvSEVBRD4KLTxGUkFNRVNFVCBjb2xzPSIyMCUsODAlIiB0aXRsZT0iIiBvbkxvYWQ9InRvcC5sb2FkRnJhbWVzKCkiPgotPEZSQU1FU0VUIHJvd3M9IjMwJSw3MCUiIHRpdGxlPSIiIG9uTG9hZD0idG9wLmxvYWRGcmFtZXMoKSI+Ci08RlJBTUUgc3JjPSJvdmVydmlldy1mcmFtZS5odG1sIiBuYW1lPSJwYWNrYWdlTGlzdEZyYW1lIiB0aXRsZT0iQWxsIFBhY2thZ2VzIj4KLTxGUkFNRSBzcmM9ImFsbGNsYXNzZXMtZnJhbWUuaHRtbCIgbmFtZT0icGFja2FnZUZyYW1lIiB0aXRsZT0iQWxsIGNsYXNzZXMgYW5kIGludGVyZmFjZXMgKGV4Y2VwdCBub24tc3RhdGljIG5lc3RlZCB0eXBlcykiPgotPC9GUkFNRVNFVD4KLTxGUkFNRSBzcmM9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgbmFtZT0iY2xhc3NGcmFtZSIgdGl0bGU9IlBhY2thZ2UsIGNsYXNzIGFuZCBpbnRlcmZhY2UgZGVzY3JpcHRpb25zIiBzY3JvbGxpbmc9InllcyI+Ci08Tk9GUkFNRVM+Ci08SDI+Ci1GcmFtZSBBbGVydDwvSDI+Ci0KLTxQPgotVGhpcyBkb2N1bWVudCBpcyBkZXNpZ25lZCB0byBiZSB2aWV3ZWQgdXNpbmcgdGhlIGZyYW1lcyBmZWF0dXJlLiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSwgeW91IGFyZSB1c2luZyBhIG5vbi1mcmFtZS1jYXBhYmxlIHdlYiBjbGllbnQuCi08QlI+Ci1MaW5rIHRvPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj5Ob24tZnJhbWUgdmVyc2lvbi48L0E+Ci08L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2ZjVlMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NTEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM3IEVEVCAyMDA4IC0tPgotPFRJVExFPgotSURlc2NyaXB0b3IKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3IgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJRGVzY3JpcHRvciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lEZXNjcmlwdG9yLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklEZXNjcmlwdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSURlc2NyaXB0b3I8L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JRGVzY3JpcHRvcjwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIHRoZSBpZGVhIG9mIGEgZGVzY3JpcHRpb24gZm9yIGEgc2VydmljZSBwb2xpY3kuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sI2dldENvbnRleHRIZWxwSWQoKSI+Z2V0Q29udGV4dEhlbHBJZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGNvbnRleHQgaGVscCBpZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXREZXNjcmlwdGlvbigpIj5nZXREZXNjcmlwdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGRlc2NyaXB0b3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjZ2V0SWNvbkJ1bmRsZUlkKCkiPmdldEljb25CdW5kbGVJZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGljb24gYnVuZGxlIGlkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sI2dldEljb25QYXRoKCkiPmdldEljb25QYXRoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgaWNvbiBwYXRoIHJlbGF0aXZlIHRvIGFuIGljb24gYnVuZGxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sI2dldExvbmdOYW1lKCkiPmdldExvbmdOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbG9uZyBuYW1lIGZvciB0aGUgZGVzY3JpcHRvci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNnZXRTaG9ydE5hbWUoKSI+Z2V0U2hvcnROYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2hvcnQgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3I8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNzZXRDb250ZXh0SGVscElkKGphdmEubGFuZy5TdHJpbmcpIj5zZXRDb250ZXh0SGVscElkPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2NvbnRleHRIZWxwSWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBjb250ZXh0IGhlbHAgaWQgZm9yIHRoaXMgZGVzY3JpcHRvci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCNzZXREZXNjcmlwdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+c2V0RGVzY3JpcHRpb248L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZGVzY3JpcHRpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBkZXNjcmlwdG9yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sI3NldEljb25CdW5kbGVJZChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0SWNvbkJ1bmRsZUlkPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2ljb25CdW5kbGVJZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGljb24gYnVuZGxlIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0SWNvblBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNldEljb25QYXRoPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2ljb25QYXRoKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgaWNvbiBwYXRjaCBmb3IgdGhpcyBkZXNjcmlwdG9yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sI3NldExvbmdOYW1lKGphdmEubGFuZy5TdHJpbmcpIj5zZXRMb25nTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtsb25nTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGxvbmcgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwjc2V0U2hvcnROYW1lKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTaG9ydE5hbWU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0U2hvcnROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNob3J0TmFtZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRTaG9ydE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzaG9ydCBuYW1lIGZvciB0aGUgZGVzY3JpcHRvcgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTaG9ydE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFNob3J0TmFtZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRTaG9ydE5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9uZ05hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TG9uZ05hbWU8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TG9uZ05hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBsb25nIG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIGxvbmcgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMb25nTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9uZ05hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TG9uZ05hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtsb25nTmFtZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBsb25nIG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sb25nTmFtZTwvQ09ERT4gLSA8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlc2NyaXB0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlc2NyaXB0aW9uPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldERlc2NyaXB0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgZGVzY3JpcHRvci4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBkZXNjcmlwdG9yLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RGVzY3JpcHRpb24oamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERlc2NyaXB0aW9uPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldERlc2NyaXB0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZGVzY3JpcHRpb24pPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgZGVzY3JpcHRvci4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGVzY3JpcHRpb248L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJY29uUGF0aCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJY29uUGF0aDwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRJY29uUGF0aDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGljb24gcGF0aCByZWxhdGl2ZSB0byBhbiBpY29uIGJ1bmRsZS4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBpY29uIHBhdGggZm9yIHRoaXMgZGVzY3JpcHRvci4gIFRoaXMgcGF0aAotIGlzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gc3BlY2lmaWVkIGJ5IHRoZSBpY29uIGJ1bmRsZSBpZC4gIFRoaXMKLSBtZXRob2QgbWF5IHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoaXMgZGVzY3JpcHRvci48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEljb25QYXRoKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRJY29uUGF0aDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRJY29uUGF0aDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2ljb25QYXRoKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIGljb24gcGF0Y2ggZm9yIHRoaXMgZGVzY3JpcHRvci4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aWNvblBhdGg8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJY29uQnVuZGxlSWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SWNvbkJ1bmRsZUlkPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldEljb25CdW5kbGVJZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGljb24gYnVuZGxlIGlkLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIGJ1bmRsZSBJRCBvZiBhIHBsdWdpbiB0aGF0IGNvbnRhaW5zIGFuIGljb24uICBUaGlzCi0gbWV0aG9kIG1heSByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBpY29uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlc2NyaXB0b3IuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRJY29uQnVuZGxlSWQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEljb25CdW5kbGVJZDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRJY29uQnVuZGxlSWQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtpY29uQnVuZGxlSWQpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgaWNvbiBidW5kbGUgaWQgZm9yIHRoaXMgZGVzY3JpcHRvci4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aWNvbkJ1bmRsZUlkPC9DT0RFPiAtIDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q29udGV4dEhlbHBJZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb250ZXh0SGVscElkPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldENvbnRleHRIZWxwSWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBjb250ZXh0IGhlbHAgaWQuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuICBUaGlzIG1ldGhvZAotIG1heSByZXR1cm4gbnVsbCBpZiBubyBjb250ZXh0IGhhcyBiZWVuIHNwZWNpZmllZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldENvbnRleHRIZWxwSWQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENvbnRleHRIZWxwSWQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0Q29udGV4dEhlbHBJZDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2NvbnRleHRIZWxwSWQpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNvbnRleHRIZWxwSWQ8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lEZXNjcmlwdG9yLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklEZXNjcmlwdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Zjc2N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM4IEVEVCAyMDA4IC0tPgotPFRJVExFPgotSUZpbHRlcgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSUZpbHRlciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lGaWx0ZXIuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSUZpbHRlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElGaWx0ZXI8L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JRmlsdGVyPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGZpbHRlciBzZXJ2aWNlIHBvbGljaWVzLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sI2FjY2VwdChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5hY2NlcHQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RldGVybWluZXMgaWYgYSBwb2xpY3kgc2hvdWxkIGJlIGFjY2VwdGVkIG9yIG5vdC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImFjY2VwdChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj48IS0tIC0tPjwvQT48SDM+Ci1hY2NlcHQ8L0gzPgotPFBSRT4KLWJvb2xlYW4gPEI+YWNjZXB0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSk8L1BSRT4KLTxETD4KLTxERD5EZXRlcm1pbmVzIGlmIGEgcG9saWN5IHNob3VsZCBiZSBhY2NlcHRlZCBvciBub3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBvbGljeTwvQ09ERT4gLSB0aGUgc2VydmljZSBwb2xpY3kuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdHJ1ZSBpZiB0aGlzIHBvbGljeSBpcyBhY2NlcHRlZCBieSB0aGUgZmlsdGVyLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JRmlsdGVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklGaWx0ZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkZGFiZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JUG9saWN5RW51bWVyYXRpb25MaXN0Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3QgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJUG9saWN5RW51bWVyYXRpb25MaXN0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBJUG9saWN5RW51bWVyYXRpb25MaXN0PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gSW1wbGVtZW50aW5nIENsYXNzZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIHRoZSBjb21iaW5hdGlvbiBvZiBhIHBvbGljeSBhbmQgYSBsaXN0Ci0gb2Ygc3RhdGUgZW51bWVyYXRpb24gaXRlbXMuICBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHdpdGggdGhlIElQb2xpY3lSZWxhdGlvbnNoaXAKLSBpbnRlcmZhY2UuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+Jmd0OzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sI2dldEVudW1lcmF0aW9uTGlzdCgpIj5nZXRFbnVtZXJhdGlvbkxpc3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdGF0ZSBlbnVtZXJhdGlvbiBsaXN0IGl0ZW1zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sI2dldFBvbGljeSgpIj5nZXRQb2xpY3k8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBsaXN0LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0UG9saWN5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBvbGljeTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4gPEI+Z2V0UG9saWN5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgc2VydmljZSBwb2xpY3kgZm9yIHRoaXMgbGlzdC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgc2VydmljZSBwb2xpY3kuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbnVtZXJhdGlvbkxpc3QoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RW51bWVyYXRpb25MaXN0PC9IMz4KLTxQUkU+Ci1qYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+Jmd0OyA8Qj5nZXRFbnVtZXJhdGlvbkxpc3Q8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzdGF0ZSBlbnVtZXJhdGlvbiBsaXN0IGl0ZW1zLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBsaXN0IG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGNhYWM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlQb2xpY3lSZWxhdGlvbnNoaXAKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IklQb2xpY3lSZWxhdGlvbnNoaXAiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSVBvbGljeVJlbGF0aW9uc2hpcDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIEltcGxlbWVudGluZyBDbGFzc2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPklQb2xpY3lSZWxhdGlvbnNoaXA8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuCi0gc2VydmljZSBwb2xpY2llcy4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sI2dldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpIj5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwb2xpY3kgZW51bWVyYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbnNoaXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCNnZXRSZWxhdGVkUG9saWNpZXMoKSI+Z2V0UmVsYXRlZFBvbGljaWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcmVsYXRlZCBwb2xpY2llcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4gPEI+Z2V0UG9saWN5RW51bWVyYXRpb25MaXN0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgcG9saWN5IGVudW1lcmF0aW9uIGxpc3QgZm9yIHRoaXMgcmVsYXRpb25zaGlwLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNvdXJjZSBzZXJ2aWNlIHBvbGljeSBhbG9uZyB3aXRoIGEgbGlzdAotIG9mIHBvc3NpYmxlIHN0YXRlcyB0aGF0IHRoaXMgc291cmNlIHBvbGljeSBjb3VsZCBiZSBpbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFJlbGF0ZWRQb2xpY2llcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRSZWxhdGVkUG9saWNpZXM8L0gzPgotPFBSRT4KLWphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDsgPEI+Z2V0UmVsYXRlZFBvbGljaWVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgcmVsYXRlZCBwb2xpY2llcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBhIGxpc3Qgb2Ygb3RoZXIgdGFyZ2V0IHNlcnZpY2UgcG9saWNpZXMgYW5kIHRoZSBzdGF0ZXMgdGhhdAotIHRoZXNlIHBvbGljaWVzIG11c3QgYmUgaW4gdG8gc2F0aXNmeSB0aGUgcmVsYXRpb25zaGlwLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2QyYmYwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM4IEVEVCAyMDA4IC0tPgotPFRJVExFPgotSVBvbGljeVN0YXRlCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IklQb2xpY3lTdGF0ZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lTdGF0ZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVN0YXRlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSVBvbGljeVN0YXRlPC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SVBvbGljeVN0YXRlPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IHNlcnZpY2UgcG9saWN5IGV4dGVuZGVycyB0byBzYXZlIHRoZSBzdGF0ZSBvZgotIHRoZXJlIHBvbGljaWVzLiAgTm90ZTogZXh0ZW5kZXJzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGlmIHRoZXNlIGNoYW5nZXMKLSBhcmUgY29tbWl0dGVkIG9yIGRpc2NhcmRlZC4gIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgZnJhbWV3b3JrLiAgRm9yIGV4YW1wbGUKLSBpZiBhbiBleHRlbmRlciBtYWtlcyBhIG51bWJlciBvZiBjYWxscyB0byB0aGUgcHV0VmFsdWUgbWV0aG9kIGFuZCBhdCBzb21lCi0gcG9pbnQgU2VydmljZVBvbGljeVBsYXRmb3JtLmRpc2NhcmQoKSBpcyBjYWxsZWQsIHRoZSBmcmFtZXdvcmsgd2lsbCBoYW5kbGUKLSB0aGUgZGlzY2FyZGluZyBvZiB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBwdXRWYWx1ZSBtZXRob2QgY2FsbHMuCi0gCi0gTm90ZTogdGhpcyBkYXRhIHdpbGwgZXZlbnR1YWxseSBiZSBzdG9yZWQgaW4gRWNsaXBzZSB3aXRoIHRoZSBmb2xsb3dpbmcga2V5OgotIAotICAgICBzZXJ2aWNlUG9saWN5SWQgKyAiLiIgKyBrZXkKLSAgICAgCi0gICAgIHdoZXJlIHNlcnZpY2VQb2xpY3lJZCBpcyB0aGUgdW5pcXVlIGlkIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5IGFuZCB0aGUga2V5Ci0gICAgIGlzIHRoZSBrZXkgc3BlY2lmaWVkIGluIHRoZSBwdXRWYWx1ZSBtZXRob2QuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI0RlZmF1bHRWYWx1ZUtleSI+RGVmYXVsdFZhbHVlS2V5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwjYWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLCBib29sZWFuKSI+YWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiZuYnNwO25vdGlmeU9ubHlPbkNvbW1pdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgYSBwb2xpY3kgc3RhdGUgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI2dldFZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5nZXRWYWx1ZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBnZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI2lzTXV0YWJsZSgpIj5pc011dGFibGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHdoZXRoZXIgdGhlIHN0YXRlIG9mIHRoaXMgcG9saWN5IGlzIG11dGlibGUgb3Igbm90LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCNwdXREZWZhdWx0VmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbikiPnB1dERlZmF1bHRWYWx1ZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCi0gICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RlZmF1bHRWYWx1ZSwKLSAgICAgICAgICAgICAgICBib29sZWFuJm5ic3A7b3ZlcnJpZGVFeGlzdGluZyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgbWV0aG9kIHNldHMgdGhlIGRlZmF1bHQgZm9yIGEgcGFydGljdWxhciBrZXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI3B1dFZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5wdXRWYWx1ZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCi0gICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBzZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI3JlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcikiPnJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgcG9saWN5IHN0YXRlIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sI3NldE11dGFibGUoYm9vbGVhbikiPnNldE11dGFibGU8L0E+PC9CPihib29sZWFuJm5ic3A7bXV0YWJsZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IkRlZmF1bHRWYWx1ZUtleSI+PCEtLSAtLT48L0E+PEgzPgotRGVmYXVsdFZhbHVlS2V5PC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5EZWZhdWx0VmFsdWVLZXk8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImlzTXV0YWJsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc011dGFibGU8L0gzPgotPFBSRT4KLWJvb2xlYW4gPEI+aXNNdXRhYmxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB3aGV0aGVyIHRoZSBzdGF0ZSBvZiB0aGlzIHBvbGljeSBpcyBtdXRpYmxlIG9yIG5vdC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoaXMgcG9saWN5IGlzIG11dGFibGUuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRNdXRhYmxlKGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRNdXRhYmxlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldE11dGFibGU8L0I+KGJvb2xlYW4mbmJzcDttdXRhYmxlKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bXV0YWJsZTwvQ09ERT4gLSBzZXRzIHdoZXRoZXIgdGhpcyBwb2xpY3kgaXMgbXV0YWJsZSBvciBub3QuICBOb3RlOgotIGlmIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBJUG9saWN5U3RhdGUgb2JqZWN0IGlzIHByZWRlZmluZWQgY2FsbGluZwotIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwdXRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcHV0VmFsdWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+cHV0VmFsdWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCi0gICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5UaGlzIG1ldGhvZCBzZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBhIGtleSBmb3IgdGhpcyBwb2xpY3kgc3RhdGUuPEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSB2YWx1ZSBvZiB0aGUgcG9saWN5IHN0YXRlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VmFsdWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFZhbHVlPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldFZhbHVlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvUFJFPgotPERMPgotPEREPlRoaXMgbWV0aG9kIGdldHMgc29tZSBzdGF0ZSBmb3IgYSBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZXJlCi0gaXMgbm8gcGVyc2lzdGVkIHZhbHVlIGZvciB0aGlzIGtleSB0aGUgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlCi0gcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIGEga2V5IGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGtleSBzcGVjaWZpZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwdXREZWZhdWx0VmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLXB1dERlZmF1bHRWYWx1ZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5wdXREZWZhdWx0VmFsdWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCi0gICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZGVmYXVsdFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiZuYnNwO292ZXJyaWRlRXhpc3RpbmcpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBtZXRob2Qgc2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBwYXJ0aWN1bGFyIGtleS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIHRoZSBrZXk8REQ+PENPREU+ZGVmYXVsdFZhbHVlPC9DT0RFPiAtIHRoZSBkZWZhdWx0IHZhbHVlLjxERD48Q09ERT5vdmVycmlkZUV4aXN0aW5nPC9DT0RFPiAtIGluZGljYXRlcyBpZiBhIGV4aXN0aW5nIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIG92ZXJyaWRkZW4uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIsIGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1hZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9IMz4KLTxQUkU+Ci12b2lkIDxCPmFkZFBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuJm5ic3A7bm90aWZ5T25seU9uQ29tbWl0KTwvUFJFPgotPERMPgotPEREPkFkZHMgYSBwb2xpY3kgc3RhdGUgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxpc3RlbmVyPC9DT0RFPiAtIHRoZSBsaXN0ZW5lcjxERD48Q09ERT5ub3RpZnlPbmx5T25Db21taXQ8L0NPREU+IC0gaW5kaWNhdGVzIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlCi0gY2FsbGVkIGZvciBhbGwgc3RhdGUgY2hhbmdlcyBvciBvbmx5IHdoZW4gdGhlIHN0YXRlIGRhdGEgaXMKLSBjb21taXR0ZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L1BSRT4KLTxETD4KLTxERD5SZW1vdmVzIGEgcG9saWN5IHN0YXRlIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxpc3RlbmVyPC9DT0RFPiAtIDwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5U3RhdGUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lTdGF0ZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2M5MTE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlQb2xpY3lTdGF0ZUVudW0KLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IklQb2xpY3lTdGF0ZUVudW0iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVN0YXRlRW51bS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElQb2xpY3lTdGF0ZUVudW08L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JUG9saWN5U3RhdGVFbnVtPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgc3RhdGUgd2hlbiBhbiBlbnVtZXJhdGlvbiBpcyB1c2VkCi0gdG8gcGVyc2lzdCBzdGF0ZS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sI0ZBTFNFX0VOVU0iPkZBTFNFX0VOVU08L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCNUUlVFX0VOVU0iPlRSVUVfRU5VTTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCNnZXRDdXJyZW50SXRlbSgpIj5nZXRDdXJyZW50SXRlbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGN1cnJlbnQgZW51bSBpdGVtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwjZ2V0RGVmYXVsdElkKCkiPmdldERlZmF1bHRJZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGRlZmF1bHQgZW51bSBpdGVtIGZvciB0aGlzIGVudW1lcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwjZ2V0RW51bUlkKCkiPmdldEVudW1JZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGVudW1lcmF0aW9uIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwjc2V0Q3VycmVudEl0ZW0oamF2YS5sYW5nLlN0cmluZykiPnNldEN1cnJlbnRJdGVtPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2l0ZW1JZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGN1cnJlbnQgZW51bSBpdGVtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlRSVUVfRU5VTSI+PCEtLSAtLT48L0E+PEgzPgotVFJVRV9FTlVNPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5UUlVFX0VOVU08L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bS5UUlVFX0VOVU0iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFMU0VfRU5VTSI+PCEtLSAtLT48L0E+PEgzPgotRkFMU0VfRU5VTTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+RkFMU0VfRU5VTTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtLkZBTFNFX0VOVU0iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRFbnVtSWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RW51bUlkPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldEVudW1JZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGVudW1lcmF0aW9uIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5LgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIGVudW1lcmF0aW9uIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmYXVsdElkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmF1bHRJZDwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXREZWZhdWx0SWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBkZWZhdWx0IGVudW0gaXRlbSBmb3IgdGhpcyBlbnVtZXJhdGlvbi4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBkZWZhdWx0IGVudW0gaXRlbSBmb3IgdGhpcyBlbnVtZXJhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEN1cnJlbnRJdGVtKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDdXJyZW50SXRlbTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRDdXJyZW50SXRlbTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2l0ZW1JZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBjdXJyZW50IGVudW0gaXRlbS4gIFRoaXMgZW51bSBpdGVtIGlkIG5lZWRzIHRvIGJlIGFuZCBlbnVtIGl0ZW0KLSBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnVtZXJhdGlvbi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aXRlbUlkPC9DT0RFPiAtIDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q3VycmVudEl0ZW0oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q3VycmVudEl0ZW08L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4gPEI+Z2V0Q3VycmVudEl0ZW08L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBjdXJyZW50IGVudW0gaXRlbS4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBjdXJyZW50IGVudW0gaXRlbS48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVBvbGljeVN0YXRlRW51bS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTRkMmM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JU2VydmljZVBvbGljeQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IklTZXJ2aWNlUG9saWN5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVNlcnZpY2VQb2xpY3kuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJU2VydmljZVBvbGljeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElTZXJ2aWNlUG9saWN5PC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SVNlcnZpY2VQb2xpY3k8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLVRoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIHNlcnZpY2UgcG9saWN5Ci08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2FkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcikiPmFkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGEgY2hpbGQgbGlzdGVuZXIgdG8gdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcikiPmFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0Q2hpbGRyZW4oKSI+Z2V0Q2hpbGRyZW48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0RGVzY3JpcHRvcigpIj5nZXREZXNjcmlwdG9yPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRJZCgpIj5nZXRJZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UGFyZW50UG9saWN5KCkiPmdldFBhcmVudFBvbGljeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHBhcmVudCBzZXJ2aWNlIHBvbGljeSBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UG9saWN5U3RhdGUoKSI+Z2V0UG9saWN5U3RhdGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwb2xpY3kgc3RhdGUgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UG9saWN5U3RhdGUob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj5nZXRQb2xpY3lTdGF0ZTwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIElQb2xpY3lTdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRQb2xpY3lTdGF0ZUVudW0oKSI+Z2V0UG9saWN5U3RhdGVFbnVtPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGVudW1lcmF0aW9uIG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZUVudW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldFBvbGljeVN0YXRlRW51bShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPmdldFBvbGljeVN0YXRlRW51bTwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBlbnVtZXJhdGlvbiBvYmplY3QgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldFJlbGF0aW9uc2hpcHMoKSI+Z2V0UmVsYXRpb25zaGlwczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgSVNlcnZpY2VQb2xpY3kgb2JqZWN0cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0U3RhdHVzKCkiPmdldFN0YXR1czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHN0YXR1cyBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNpc1ByZWRlZmluZWQoKSI+aXNQcmVkZWZpbmVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBpZiB0aGlzIHNlcnZpY2UgcG9saWN5IGlzIGRlZmluZWQgYnkgYW4gZXh0ZW5zaW9uIG9yIG5vdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNyZW1vdmVDaGlsZChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5yZW1vdmVDaGlsZDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmVtb3ZlcyBhIGNoaWxkIHNlcnZpY2UgcG9saWN5IGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNyZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIpIj5yZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmVtb3ZlcyBhIGNoaWxkIGxpc3RlbmVyIGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNyZW1vdmVTdGF0dXNDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcikiPnJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjcmVzdG9yZURlZmF1bHRzKCkiPnJlc3RvcmVEZWZhdWx0czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Jlc3RvcmVzIHRoZSBwb2xpY3kgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI3Jlc3RvcmVEZWZhdWx0cyhvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPnJlc3RvcmVEZWZhdWx0czwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Jlc3RvcmVzIHRoZSBwb2xpY3kgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNzZXRSZWxhdGlvbnNoaXBzKGphdmEudXRpbC5MaXN0KSI+c2V0UmVsYXRpb25zaGlwczwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5UmVsYXRpb25zaGlwPC9BPiZndDsmbmJzcDtyZWxhdGlvbnNoaXBzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgcmVsYXRpb25zaGlwcyBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNzZXRTdGF0dXMob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMpIj5zZXRTdGF0dXM8L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyZuYnNwO3N0YXR1cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHN0YXR1cyBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImlzUHJlZGVmaW5lZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1ByZWRlZmluZWQ8L0gzPgotPFBSRT4KLWJvb2xlYW4gPEI+aXNQcmVkZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBpZiB0aGlzIHNlcnZpY2UgcG9saWN5IGlzIGRlZmluZWQgYnkgYW4gZXh0ZW5zaW9uIG9yIG5vdC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRydWUgaWYgdGhpcyBTZXJ2aWNlIHBvbGljeSBpcyBkZWZpbmVkIGluIHBsdWdpbi54bWwgCi0gbWV0YSBkYXRhLiAgT3RoZXJ3aXNlLCBmYWxzZSBpcyByZXR1cm5lZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElkPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldElkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdW5pcXVlIElEIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlc2NyaXB0b3IoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVzY3JpcHRvcjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4gPEI+Z2V0RGVzY3JpcHRvcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFJlbGF0aW9uc2hpcHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UmVsYXRpb25zaGlwczwvSDM+Ci08UFJFPgotamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+Jmd0OyA8Qj5nZXRSZWxhdGlvbnNoaXBzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGxpc3Qgb2YgcmVsYXRpb25zaGlwcyB0byBvdGhlciBJU2VydmljZVBvbGljeSBvYmplY3RzLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgSVNlcnZpY2VQb2xpY3kgb2JqZWN0cy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFJlbGF0aW9uc2hpcHMoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRSZWxhdGlvbnNoaXBzPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFJlbGF0aW9uc2hpcHM8L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5UmVsYXRpb25zaGlwPC9BPiZndDsmbmJzcDtyZWxhdGlvbnNoaXBzKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHJlbGF0aW9uc2hpcHMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlbGF0aW9uc2hpcHM8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZXN0b3JlRGVmYXVsdHMoKSI+PCEtLSAtLT48L0E+PEgzPgotcmVzdG9yZURlZmF1bHRzPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnJlc3RvcmVEZWZhdWx0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJlc3RvcmVzIHRoZSBwb2xpY3kgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiAgQWxsIGxvY2FsbHkgYWRkZWQKLSBjaGlsZCBwb2xpY2llcyB3aWxsIGJlIHJlbW92ZWQuICBUaGUgc3RhdGUgb2YgZWFjaCBwb2xpY3kgd2lsbAotIGJlIHNldCB0byBpcyBkZWZhdWx0IHZhbHVlLiAgIE5vdGU6IHRoZSBjaGFuZ2VzIG1hZGUgY2FsbGluZwotIHRoaXMgbWV0aG9kIGNhbiBiZSB1bmRvbmUgaWYgdGhlIHBsYXRmb3JtIHBlcmZvcm1zIGEgZGlzY2FyZENoYW5nZXMKLSBvcGVyYXRpb24uICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgcGxhZm9ybSBwZXJmb3JtcyBhIGNvbW1pdENoYW5nZXMKLSBvcGVyYXRpb24gdGhlc2UgY2hhbmdlcyB3aWxsIGJlIHNhdmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZXN0b3JlRGVmYXVsdHMob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1yZXN0b3JlRGVmYXVsdHM8L0gzPgotPFBSRT4KLXZvaWQgPEI+cmVzdG9yZURlZmF1bHRzPC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QpPC9QUkU+Ci08REw+Ci08REQ+UmVzdG9yZXMgdGhlIHBvbGljeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgCi0gVGhlIHN0YXRlIG9mIGVhY2ggcG9saWN5IHdpbGwgYmUgc2V0IHRvIGlzIGRlZmF1bHQgdmFsdWUuICAgCi0gTm90ZTogdGhlIGNoYW5nZXMgbWFkZSBjYWxsaW5nCi0gdGhpcyBtZXRob2QgY2FuIGJlIHVuZG9uZSBpZiB0aGUgcGxhdGZvcm0gcGVyZm9ybXMgYSBkaXNjYXJkQ2hhbmdlcwotIG9wZXJhdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIHRoZSBwbGFmb3JtIHBlcmZvcm1zIGEgY29tbWl0Q2hhbmdlcwotIG9wZXJhdGlvbiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBvbGljeVN0YXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBvbGljeVN0YXRlPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGU8L0E+IDxCPmdldFBvbGljeVN0YXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBvbGljeVN0YXRlKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UG9saWN5U3RhdGU8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT4gPEI+Z2V0UG9saWN5U3RhdGU8L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBJUG9saWN5U3RhdGUgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0PC9DT0RFPiAtIHRoZSBwcm9qZWN0LgotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgSVBvbGljeVN0YXRlIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBvbGljeVN0YXRlRW51bSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb2xpY3lTdGF0ZUVudW08L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPiA8Qj5nZXRQb2xpY3lTdGF0ZUVudW08L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBwb2xpY3kgc3RhdGUgZW51bWVyYXRpb24gb2JqZWN0LiAgTm90ZTogdGhpcyBpcyBqdXN0Ci0gYSB3cmFwcGVyIGFyb3VuZCB0aGUgcG9saWN5IHN0YXRlIG9iamVjdC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBzdGF0ZSBlbnVtZXJhdGlvbiBvYmplY3QgZm9yIHRoaXMgc2VydmljZQotIHBvbGljeS4gIElmIHRoaXMgcG9saWN5IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gZW51bWVyYXRpb24KLSBudWxsIHdpbGwgYmUgcmV0dXJuZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQb2xpY3lTdGF0ZUVudW0ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb2xpY3lTdGF0ZUVudW08L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPiA8Qj5nZXRQb2xpY3lTdGF0ZUVudW08L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBwb2xpY3kgc3RhdGUgZW51bWVyYXRpb24gb2JqZWN0IGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gIAotIE5vdGU6IHRoaXMgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBwb2xpY3kgc3RhdGUgb2JqZWN0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0PC9DT0RFPiAtIHRoZSBwcm9qZWN0Ci08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIHN0YXRlIGVudW1lcmF0aW9uIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gIElmCi0gbm8gc3RhdGUgZW51bWVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlIHBvbGljeQotIG51bGwgd2lsbCBiZSByZXR1cm5lZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBhcmVudFBvbGljeSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJlbnRQb2xpY3k8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+IDxCPmdldFBhcmVudFBvbGljeTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHBhcmVudCBzZXJ2aWNlIHBvbGljeSBvYmplY3QuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgcGFyZW50IHBvbGljeSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4gIElmIHRoaXMKLSBzZXJ2aWNlIHBvbGljeSBoYXMgbm8gcGFyZW50IHRoZW4gbnVsbCBpcyByZXR1cm5lZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENoaWxkcmVuKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENoaWxkcmVuPC9IMz4KLTxQUkU+Ci1qYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsgPEI+Z2V0Q2hpbGRyZW48L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgY2hpbGQgc2VydmljZSBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4gIENoYW5nZXMKLSBtYWRlIHRvIHRoZSByZXR1cm5lZCBsaXN0IGRvIG5vdCBjaGFuZ2UgdGhlIHVuZGVybHlpbmcgbnVtYmVyIG9mIGNoaWxkcmVuCi0gZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVDaGlsZChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVDaGlsZDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5yZW1vdmVDaGlsZDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9QUkU+Ci08REw+Ci08REQ+UmVtb3ZlcyBhIGNoaWxkIHNlcnZpY2UgcG9saWN5IGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZSBwb2xpY3kgc3BlY2lmaWVkCi0gaXMgbnVsbCBvciBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gQWxzbywgaWYgdGhpcyBzZXJ2aWNlIHBvbGljeSBpcyBwcmVkZWZpbmVkIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBoYXZlCi0gbm8gZWZmZWN0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wb2xpY3k8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGRQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1hZGRQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9IMz4KLTxQUkU+Ci12b2lkIDxCPmFkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L1BSRT4KLTxETD4KLTxERD5BZGRzIGEgY2hpbGQgbGlzdGVuZXIgdG8gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bGlzdGVuZXI8L0NPREU+IC0gdGhlIGxpc3RlbmVyPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnJlbW92ZVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L1BSRT4KLTxETD4KLTxERD5SZW1vdmVzIGEgY2hpbGQgbGlzdGVuZXIgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saXN0ZW5lcjwvQ09ERT4gLSA8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVN0YXR1c0NoYW5nZUxpc3RlbmVyKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0gzPgotPFBSRT4KLXZvaWQgPEI+YWRkU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyKTwvUFJFPgotPERMPgotPEREPkFkZHMgYSBzdGF0dXMgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuIFdoZW4gdGhlIHN0YXR1cyBjaGFuZ2VzCi0gdGhpcyBsaXN0ZW5lciB3aWxsIGJlIG5vdGlmaWVkLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saXN0ZW5lcjwvQ09ERT4gLSA8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVN0YXR1c0NoYW5nZUxpc3RlbmVyKSI+PCEtLSAtLT48L0E+PEgzPgotcmVtb3ZlU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0gzPgotPFBSRT4KLXZvaWQgPEI+cmVtb3ZlU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyKTwvUFJFPgotPERMPgotPEREPlJlbW92ZXMgYSBzdGF0dXMgY2hhbmdlIGxpc3RlbmVyIGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bGlzdGVuZXI8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTdGF0dXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U3RhdHVzPC9IMz4KLTxQUkU+Ci1vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyA8Qj5nZXRTdGF0dXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzdGF0dXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgc3RhdHVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U3RhdHVzKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U3RhdHVzPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFN0YXR1czwvQj4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMmbmJzcDtzdGF0dXMpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgc3RhdHVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdGF0dXM8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lTZXJ2aWNlUG9saWN5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYWEwNDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JU3RhdGVFbnVtZXJhdGlvbkl0ZW0KLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSVN0YXRlRW51bWVyYXRpb25JdGVtIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBJU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtIHRoYXQgd2FzCi0gZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbiBpbiBwbHVnaW4ueG1sIG1ldGEgZGF0YS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sI2dldElkKCkiPmdldElkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgSUQgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCNnZXRMb25nTmFtZSgpIj5nZXRMb25nTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGxvbmcgbmFtZSBvZiB0aGlzIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sI2dldFNob3J0TmFtZSgpIj5nZXRTaG9ydE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwjaXNEZWZhdWx0KCkiPmlzRGVmYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgd2hldGhlciB0aGlzIGlzIHRoZSBkZWZhdWx0IGl0ZW0gb3Igbm90LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0SWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SWQ8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0SWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBJRCBvZiB0aGlzIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0uCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgSUQgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2hvcnROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNob3J0TmFtZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRTaG9ydE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldExvbmdOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvbmdOYW1lPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldExvbmdOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbG9uZyBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBsb25nIG5hbWUgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNEZWZhdWx0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzRGVmYXVsdDwvSDM+Ci08UFJFPgotYm9vbGVhbiA8Qj5pc0RlZmF1bHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhpcyBpcyB0aGUgZGVmYXVsdCBpdGVtIG9yIG5vdC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRydWUgaWYgdGhpcyBlbnVtZXJhdGlvbiBpdGVtIGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzCi0gZW51bWVyYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNzA5ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM4IEVEVCAyMDA4IC0tPgotPFRJVExFPgotUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsIGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsPC9IMj4KLTxQUkU+Ci1qYXZhLmxhbmcuT2JqZWN0Ci0gIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGNsYXNzIDxCPlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw8L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDxEVD5pbXBsZW1lbnRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUG9saWN5RW51bWVyYXRpb25MaXN0IGludGVyZmFjZS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCNQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKGphdmEudXRpbC5MaXN0LCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsPC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPiZndDsmbmJzcDtlbnVtTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHNpbXBsZSBjb25zdHJ1Y3RvciBmb3IgdGhpcyBjbGFzcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwjZ2V0RW51bWVyYXRpb25MaXN0KCkiPmdldEVudW1lcmF0aW9uTGlzdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sI2dldFBvbGljeSgpIj5nZXRQb2xpY3k8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKGphdmEudXRpbC5MaXN0LCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj48IS0tIC0tPjwvQT48SDM+Ci1Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPiZndDsmbmJzcDtlbnVtTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5KTwvUFJFPgotPERMPgotPEREPkEgc2ltcGxlIGNvbnN0cnVjdG9yIGZvciB0aGlzIGNsYXNzLgotPFA+Ci08REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmVudW1MaXN0PC9DT0RFPiAtIDxERD48Q09ERT5wb2xpY3k8L0NPREU+IC0gPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RW51bWVyYXRpb25MaXN0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVudW1lcmF0aW9uTGlzdDwvSDM+Ci08UFJFPgotcHVibGljIGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4mZ3Q7IDxCPmdldEVudW1lcmF0aW9uTGlzdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBsaXN0IG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwjZ2V0RW51bWVyYXRpb25MaXN0KCkiPmdldEVudW1lcmF0aW9uTGlzdDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBsaXN0IG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UG9saWN5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBvbGljeTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+IDxCPmdldFBvbGljeTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBzZXJ2aWNlIHBvbGljeS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sI2dldFBvbGljeSgpIj5nZXRQb2xpY3k8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgc2VydmljZSBwb2xpY3kuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjM5ODlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVBvbGljeVJlbGF0aW9uc2hpcEltcGwKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5UmVsYXRpb25zaGlwSW1wbCBjbGFzcyI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iUG9saWN5UmVsYXRpb25zaGlwSW1wbCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9GT05UPgotPEJSPgotQ2xhc3MgUG9saWN5UmVsYXRpb25zaGlwSW1wbDwvSDI+Ci08UFJFPgotamF2YS5sYW5nLk9iamVjdAotICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9CPjxEVD5leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQT48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVBvbGljeVJlbGF0aW9uc2hpcAotIGludGVyZmFjZS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCNQb2xpY3lSZWxhdGlvbnNoaXBJbXBsKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0LCBqYXZhLnV0aWwuTGlzdCkiPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4mbmJzcDtwb2xpY3lFbnVtZXJhdGlvbkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDsmbmJzcDtyZWxhdGVkUG9saWNpZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sI2dldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpIj5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwb2xpY3kgZW51bWVyYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbnNoaXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCNnZXRSZWxhdGVkUG9saWNpZXMoKSI+Z2V0UmVsYXRlZFBvbGljaWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcmVsYXRlZCBwb2xpY2llcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJQb2xpY3lSZWxhdGlvbnNoaXBJbXBsKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0LCBqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLVBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4mbmJzcDtwb2xpY3lFbnVtZXJhdGlvbkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4mZ3Q7Jm5ic3A7cmVsYXRlZFBvbGljaWVzKTwvUFJFPgotPERMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+IDxCPmdldFBvbGljeUVudW1lcmF0aW9uTGlzdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHBvbGljeSBlbnVtZXJhdGlvbiBsaXN0IGZvciB0aGlzIHJlbGF0aW9uc2hpcC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sI2dldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpIj5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzb3VyY2Ugc2VydmljZSBwb2xpY3kgYWxvbmcgd2l0aCBhIGxpc3QKLSBvZiBwb3NzaWJsZSBzdGF0ZXMgdGhhdCB0aGlzIHNvdXJjZSBwb2xpY3kgY291bGQgYmUgaW4uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRSZWxhdGVkUG9saWNpZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UmVsYXRlZFBvbGljaWVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+Jmd0OyA8Qj5nZXRSZWxhdGVkUG9saWNpZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSByZWxhdGVkIHBvbGljaWVzIGZvciB0aGlzIHJlbGF0aW9uc2hpcC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sI2dldFJlbGF0ZWRQb2xpY2llcygpIj5nZXRSZWxhdGVkUG9saWNpZXM8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgbGlzdCBvZiBvdGhlciB0YXJnZXQgc2VydmljZSBwb2xpY2llcyBhbmQgdGhlIHN0YXRlcyB0aGF0Ci0gdGhlc2UgcG9saWNpZXMgbXVzdCBiZSBpbiB0byBzYXRpc2Z5IHRoZSByZWxhdGlvbnNoaXAuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjE4YTdlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVNlcnZpY2VQb2xpY3lBY3RpdmF0b3IKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvciBjbGFzcyI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iU2VydmljZVBvbGljeUFjdGl2YXRvciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9IMj4KLTxQUkU+Ci1qYXZhLmxhbmcuT2JqZWN0Ci0gIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj5vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luCi0gICAgICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD5vcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yPC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgY2xhc3MgPEI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQj48RFQ+ZXh0ZW5kcyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luPC9ETD4KLTwvUFJFPgotCi08UD4KLVRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjUExVR0lOX0lEIj5QTFVHSU5fSUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPlBMVUdJTl9QUkVGRVJFTkNFX1NDT1BFLCBQUkVGRVJFTkNFU19ERUZBVUxUX09WRVJSSURFX0JBU0VfTkFNRSwgUFJFRkVSRU5DRVNfREVGQVVMVF9PVkVSUklERV9GSUxFX05BTUU8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjU2VydmljZVBvbGljeUFjdGl2YXRvcigpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0cnVjdG9yPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sI2dldERlZmF1bHQoKSI+Z2V0RGVmYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjbG9nRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPmxvZ0Vycm9yPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO21lc3NhZ2UsCi0gICAgICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlJm5ic3A7ZXhjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TG9ncyBhbiBlcnJvciB3aXRoIHRoaXMgcGx1Z2luLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpIj5zdGFydDwvQT48L0I+KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Jm5ic3A7Y29udGV4dCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkiPnN0b3A8L0E+PC9CPihvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCZuYnNwO2NvbnRleHQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5maW5kLCBmaW5kLCBnZXRCdW5kbGUsIGdldERlc2NyaXB0b3IsIGdldExvZywgZ2V0UGx1Z2luUHJlZmVyZW5jZXMsIGdldFN0YXRlTG9jYXRpb24sIGludGVybmFsSW5pdGlhbGl6ZURlZmF1bHRQbHVnaW5QcmVmZXJlbmNlcywgaXNEZWJ1Z2dpbmcsIG9wZW5TdHJlYW0sIG9wZW5TdHJlYW0sIHNhdmVQbHVnaW5QcmVmZXJlbmNlcywgc2V0RGVidWdnaW5nLCBzaHV0ZG93biwgc3RhcnR1cCwgdG9TdHJpbmc8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlBMVUdJTl9JRCI+PCEtLSAtLT48L0E+PEgzPgotUExVR0lOX0lEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+UExVR0lOX0lEPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IoKSI+PCEtLSAtLT48L0E+PEgzPgotU2VydmljZVBvbGljeUFjdGl2YXRvcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RydWN0b3IKLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkiPjwhLS0gLS0+PC9BPjxIMz4KLXN0YXJ0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zdGFydDwvQj4ob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQmbmJzcDtjb250ZXh0KQotICAgICAgICAgICB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbjwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zdGFydDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPnN0YXJ0PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT5vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpIj48IS0tIC0tPjwvQT48SDM+Ci1zdG9wPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zdG9wPC9CPihvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCZuYnNwO2NvbnRleHQpCi0gICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c3RvcDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPnN0b3A8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZhdWx0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0E+IDxCPmdldERlZmF1bHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgc2hhcmVkIGluc3RhbmNlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJsb2dFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKSI+PCEtLSAtLT48L0E+PEgzPgotbG9nRXJyb3I8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgdm9pZCA8Qj5sb2dFcnJvcjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlRocm93YWJsZSZuYnNwO2V4Yyk8L1BSRT4KLTxETD4KLTxERD5Mb2dzIGFuIGVycm9yIHdpdGggdGhpcyBwbHVnaW4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gPEREPjxDT0RFPmV4YzwvQ09ERT4gLSA8L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYTQ1YmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TZXJ2aWNlUG9saWN5UGxhdGZvcm0KLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtIGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTZXJ2aWNlUG9saWN5UGxhdGZvcm0iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm08L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWNjZXNzIGFuZCBhZGQgc2VydmljZSBwb2xpY2llcyB0byB0aGUgcGxhdGZvcm0uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNhZGRDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIsIGJvb2xlYW4pIj5hZGRDaGlsZENoYW5nZUxpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuJm5ic3A7b25Db21taXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBhbGxvd3MgY2FsbHMgdG8gbGlzdGVuZXIgdG8gYW55IGNoaWxkIGNoYW5nZSB0aGF0IGlzCi0gbWFkZSBpbiB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gcmVnYXJkbGVzcyBvZiB3aGVyZSBpdCBpcyAKLSBsb2NhdGVkIGluIHRoZSB0cmVlIG9mIHNlcnZpY2UgcG9saWNpZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2FkZFByb2plY3RMb2FkTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyKSI+YWRkUHJvamVjdExvYWRMaXN0ZW5lcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGQgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNjb21taXRDaGFuZ2VzKCkiPmNvbW1pdENoYW5nZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSB0aGUgc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjY29tbWl0Q2hhbmdlcyhvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPmNvbW1pdENoYW5nZXM8L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSB0aGUgc2VydmljZSBwb2xpY2llcyBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNjcmVhdGVTZXJ2aWNlUG9saWN5KG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmNyZWF0ZVNlcnZpY2VQb2xpY3k8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2lkLAotICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZW51bUxpc3RJZCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RlZmF1bHRFbnVtSWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIElTZXJ2aWNlUG9saWN5IG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZGlzY2FyZENoYW5nZXMoKSI+ZGlzY2FyZENoYW5nZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gdGhlIHNlcnZpY2UgcG9saWNpZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2Rpc2NhcmRDaGFuZ2VzKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+ZGlzY2FyZENoYW5nZXM8L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gdGhlIHNlcnZpY2UgcG9saWNpZXMgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuU2V0Jmx0O2phdmEubGFuZy5TdHJpbmcmZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRBbGxQb2xpY3lJZHMoKSI+Z2V0QWxsUG9saWN5SWRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbGwgc2VydmljZSBwb2xpY3kgSURzIHRoYXQgYXJlIGRlZmluZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZ2V0SW5zdGFuY2UoKSI+Z2V0SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyhvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSUZpbHRlcikiPmdldFJvb3RTZXJ2aWNlUG9saWNpZXM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4mbmJzcDtmaWx0ZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBsaXN0IG9mIHJvb3QgcG9saWNpZXMgZm9yIHRoZSBwbGF0Zm9ybSBnaXZlbiBhIGZpbHRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2dldFNlcnZpY2VQb2xpY3koamF2YS5sYW5nLlN0cmluZykiPmdldFNlcnZpY2VQb2xpY3k8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7aWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgZ2l2ZW4gaXQncyB1bmlxdWUgSUQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRTdGF0ZUVudW1lcmF0aW9uKGphdmEubGFuZy5TdHJpbmcpIj5nZXRTdGF0ZUVudW1lcmF0aW9uPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2VudW1JZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0U3RhdGVJdGVtRW51bWVyYXRpb248L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7c3RhdGVJdGVtSWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjaXNFbmFibGVkKGphdmEubGFuZy5PYmplY3QpIj5pc0VuYWJsZWQ8L0E+PC9CPihqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7b2JqZWN0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0eSBwYWdlIGZvciBhIHByb2plY3Qgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIHBvcHVwCi0gbWVudSBvciBub3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2lzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZDwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgaWYgdGhlIHBhcnRpY3VsYXIgcHJvamVjdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdCBvbiBpdCdzCi0gc2VydmljZSBwb2xpY3kgcHJvcGVydHkgcGFnZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyhib29sZWFuKSI+cXVldWVDaGlsZENoYW5nZUxpc3RlbmVyczwvQT48L0I+KGJvb2xlYW4mbmJzcDtxdWV1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luZGljYXRlcyB3aGV0aGVyIGNoaWxkIGNoYW5nZSBsaXN0ZW5lcnMgc2hvdWxkIGJlIHF1ZXVlZCBvciBub3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI3JlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciwgYm9vbGVhbikiPnJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtvbkNvbW1pdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYSBjaGlsZCBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI3JlbW92ZVByb2plY3RMb2FkTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyKSI+cmVtb3ZlUHJvamVjdExvYWRMaXN0ZW5lcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcmVtb3ZlU2VydmljZVBvbGljeShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5yZW1vdmVTZXJ2aWNlUG9saWN5PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgc2VydmljZSBwb2xpY3kgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI3Jlc3RvcmVEZWZhdWx0cygpIj5yZXN0b3JlRGVmYXVsdHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXN0b3JlcyB0aGUgd29ya3NwYWNlIGxldmVsIGRlZmF1bHRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNyZXN0b3JlRGVmYXVsdHMob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj5yZXN0b3JlRGVmYXVsdHM8L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXN0b3JlcyB0aGUgcHJvamVjdCBsZXZlbCBkZWZhdWx0cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgYm9vbGVhbikiPnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQ8L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgd2hldGhlciBhIHByb2plY3Qgc3BlY2lmaWMgc2VydmljZSBwb2xpY3kgcHJlZmVyZW5jZXMgaXMgZW5hYmxlZCBvciBub3QuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldEluc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEluc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPiA8Qj5nZXRJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0VuYWJsZWQoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzRW5hYmxlZDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNFbmFibGVkPC9CPihqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7b2JqZWN0KTwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBpZiB0aGUgcHJvcGVydHkgcGFnZSBmb3IgYSBwcm9qZWN0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBwb3B1cAotIG1lbnUgb3Igbm90LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vYmplY3Q8L0NPREU+IC0gCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdHJ1ZSBpZiB0aGlzIHBsYXRmb3JtIGlzIGVuYWJsZWQgZm9yIHNwZWNpZmllZCBvYmplY3QuICBJbiBtb3N0Ci0gY2FzZXMgdGhlIHNwZWNpZmllZCBvYmplY3Qgd2lsbCBiZSBhbiBJUHJvamVjdC4gIFRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgY2FsbGVkCi0gdG8gZGV0ZXJtaW5lIGlmIGEgdGhlIHNlcnZpY2UgcG9saWN5IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tbWl0Q2hhbmdlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21taXRDaGFuZ2VzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jb21taXRDaGFuZ2VzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGNvbW1pdCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gdGhlIHNlcnZpY2UgcG9saWNpZXMuICBUaGUgbWV0aG9kIG9ubHkgYXBwbGllcyB0byBzdGF0ZSBjaGFuZ2VzIGF0IHRoZSB3b3Jrc3BhY2UKLSBsZXZlbC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZGlzY2FyZENoYW5nZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZGlzY2FyZENoYW5nZXM8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmRpc2NhcmRDaGFuZ2VzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYWxsIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGFsbAotIHRoZSBzZXJ2aWNlIHBvbGljaWVzLiAgVGhlIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gc3RhdGUgY2hhbmdlcyBhdCB0aGUgd29ya3NwYWNlCi0gbGV2ZWwuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbW1pdENoYW5nZXMob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21taXRDaGFuZ2VzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jb21taXRDaGFuZ2VzPC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QpPC9QUkU+Ci08REw+Ci08REQ+Q2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGNvbW1pdCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gdGhlIHNlcnZpY2UgcG9saWNpZXMgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgVGhlIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gCi0gc3RhdGUgY2hhbmdlcyBhdCB0aGUgcHJvamVjdCBsZXZlbC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZGlzY2FyZENoYW5nZXMob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1kaXNjYXJkQ2hhbmdlczwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+ZGlzY2FyZENoYW5nZXM8L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L1BSRT4KLTxETD4KLTxERD5DYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gdGhlIHNlcnZpY2UgcG9saWNpZXMgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgVGhlIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gCi0gc3RhdGUgY2hhbmdlcyBhdCB0aGUgcHJvamVjdCBsZXZlbC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QWxsUG9saWN5SWRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEFsbFBvbGljeUlkczwvSDM+Ci08UFJFPgotcHVibGljIGphdmEudXRpbC5TZXQmbHQ7amF2YS5sYW5nLlN0cmluZyZndDsgPEI+Z2V0QWxsUG9saWN5SWRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbGwgc2VydmljZSBwb2xpY3kgSURzIHRoYXQgYXJlIGRlZmluZWQuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBhbGwgc2VydmljZSBwb2xpY3kgSURzIHRoYXQgYXJlIGRlZmluZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRSb290U2VydmljZVBvbGljaWVzKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Um9vdFNlcnZpY2VQb2xpY2llczwvSDM+Ci08UFJFPgotcHVibGljIGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyA8Qj5nZXRSb290U2VydmljZVBvbGljaWVzPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4mbmJzcDtmaWx0ZXIpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbGlzdCBvZiByb290IHBvbGljaWVzIGZvciB0aGUgcGxhdGZvcm0gZ2l2ZW4gYSBmaWx0ZXIuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmZpbHRlcjwvQ09ERT4gLSBhIGZpbHRlciBhIHRoZSBzZXJ2aWNlIHBvbGljaWVzLiAgVGhpcyBtZXRob2QgbWF5IGJlIG51bGwgaWYKLSBubyBmaWx0ZXIgaXMgcmVxdWlyZWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYWxsIHJvb3QgbGV2ZWwgc2VydmljZSBwb2xpY2llcy4gIElmIGEgZmlsdGVyIGlzIHNwZWNpZmllZAotIHNvbWUgc2VydmljZSBwb2xpY2llcyBtYXkgYmUgcmVtb3ZlZCBmcm9tIHRoZSByZXR1cm5lZCBsaXN0LiAgQSByb290Ci0gbGV2ZWwgc2VydmljZSBwb2xpY3kgaXMgZGVmaW5lZCB0byBiZSBhIHNlcnZpY2UgcG9saWN5IHdpdGggbm8gcGFyZW50LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2VydmljZVBvbGljeShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2VydmljZVBvbGljeTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+IDxCPmdldFNlcnZpY2VQb2xpY3k8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtpZCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgZ2l2ZW4gaXQncyB1bmlxdWUgSUQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmlkPC9DT0RFPiAtIAotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgZ2l2ZW4gaXQncyB1bmlxdWUgSUQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZDwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgaWYgdGhlIHBhcnRpY3VsYXIgcHJvamVjdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdCBvbiBpdCdzCi0gc2VydmljZSBwb2xpY3kgcHJvcGVydHkgcGFnZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdDwvQ09ERT4gLSAKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgcHJvamVjdCBoYXMgYmVlbiBlbmFibGVkIGZvcgotIHByb2plY3Qgc3BlY2lmaWMgcG9saWN5IHByZWZlcmVuY2VzLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQ8L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgd2hldGhlciBhIHByb2plY3Qgc3BlY2lmaWMgc2VydmljZSBwb2xpY3kgcHJlZmVyZW5jZXMgaXMgZW5hYmxlZCBvciBub3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3Q8L0NPREU+IC0gPEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVzdG9yZURlZmF1bHRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXJlc3RvcmVEZWZhdWx0czwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+cmVzdG9yZURlZmF1bHRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmVzdG9yZXMgdGhlIHdvcmtzcGFjZSBsZXZlbCBkZWZhdWx0cy4gIE5vdGU6IHRoZSBzdGF0ZSBjaGFuZ2VzIG1hZGUgYnkgCi0gY2FsbGluZyB0aGlzIG1ldGhvZCBuZWVkIHRvIGJlIGNvbW1pdHRlZCBvciBkaXNjYXJkZWQgYnkgdGhlIHBsYXRmb3JtLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZXN0b3JlRGVmYXVsdHMob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1yZXN0b3JlRGVmYXVsdHM8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnJlc3RvcmVEZWZhdWx0czwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvUFJFPgotPERMPgotPEREPlJlc3RvcmVzIHRoZSBwcm9qZWN0IGxldmVsIGRlZmF1bHRzLiAgTm90ZTogdGhlIHN0YXRlIGNoYW5nZXMgbWFkZSBieSAKLSBjYWxsaW5nIHRoaXMgbWV0aG9kIG5lZWQgdG8gYmUgY29tbWl0dGVkIG9yIGRpc2NhcmRlZCBieSB0aGUgcGxhdGZvcm0uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3Q8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVTZXJ2aWNlUG9saWN5KG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZVNlcnZpY2VQb2xpY3k8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiA8Qj5jcmVhdGVTZXJ2aWNlUG9saWN5PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtlbnVtTGlzdElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RlZmF1bHRFbnVtSWQpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBtZXRob2QgY3JlYXRlcyBhbiBJU2VydmljZVBvbGljeSBvYmplY3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBhcmVudDwvQ09ERT4gLSB0aGUgcGFyZW50IHBvbGljeSBmb3IgdGhpcyBwb2xpY3kuICBJZiB0aGlzIHBvbGljeSBoYXMgbm8gCi0gcGFyZW50IG51bGwgbWF5IGJlIHNwZWNpZmllZC48REQ+PENPREU+aWQ8L0NPREU+IC0gVGhpcyBpcyBhIHVuaXF1ZSBpZCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZSBpZCBzcGVjaWZpZWQKLSBpcyBub3QgdW5pcXVlIHRyYWlsaW5nIG51bWVyaWNhbCBkaWdpdHMgaW4gdGhlIGlkIHdpbGwgYmUgc3RyaXBwZWQgb2ZmLiAgCi0gTnVtZXJpY2FsIGRpZ2l0cyB3aWxsIHRoZW4gYmUgYWRkZWQgdG8gZW5kIG9mIHRoZSBpZCB0byBtYWtlIGl0IHVuaXF1ZS4KLSBJZiB0aGUgaWQgaXMgZW1wdHkgb3IgbnVsbCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzaWduIGEgdW5pcXVlIGlkLjxERD48Q09ERT5lbnVtTGlzdElkPC9DT0RFPiAtIElmIHRoaXMgcG9saWN5J3Mgc3RhdGUgaXMgZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbgotIHRoZSBlbnVtZXJhdGlvbiBpZCBzaG91bGQgYmUgc3BlY2lmaWVkIGhlcmUuICBPdGhlcndpc2UgbnVsbCBzaG91bGQgYmUKLSBzcGVjaWZpZWQuPEREPjxDT0RFPmRlZmF1bHRFbnVtSWQ8L0NPREU+IC0gSWYgdGhpcyBwb2xpY3kncyBzdGF0ZSBpcyBkZWZpbmVkIGJ5IGFuIGVudW1lcmF0aW9uCi0gdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHZhbHVlLiAgVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCAKLSBpZiBub3QgdXNpbmcgYW4gZW51bWVyYXRpb24gb3IgaWYgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGVudW1lcmF0aW9uCi0gc2hvdWxkIGJlIHVzZWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBvYmplY3QuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVTZXJ2aWNlUG9saWN5KG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSkiPjwhLS0gLS0+PC9BPjxIMz4KLXJlbW92ZVNlcnZpY2VQb2xpY3k8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnJlbW92ZVNlcnZpY2VQb2xpY3k8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5KTwvUFJFPgotPERMPgotPEREPlJlbW92ZXMgYSBzZXJ2aWNlIHBvbGljeSBmcm9tIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cG9saWN5PC9DT0RFPiAtIHRoZSBzZXJ2aWNlIHBvbGljeTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLCBib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lcjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+YWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuJm5ic3A7b25Db21taXQpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBtZXRob2QgYWxsb3dzIGNhbGxzIHRvIGxpc3RlbmVyIHRvIGFueSBjaGlsZCBjaGFuZ2UgdGhhdCBpcwotIG1hZGUgaW4gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaXQgaXMgCi0gbG9jYXRlZCBpbiB0aGUgdHJlZSBvZiBzZXJ2aWNlIHBvbGljaWVzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saXN0ZW5lcjwvQ09ERT4gLSA8REQ+PENPREU+b25Db21taXQ8L0NPREU+IC0gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBsaXN0ZW5lciBzaG91bGQgYmUgaW52b2tlZCB3aGVuCi0gdGhlIHRoZSBwbGF0Zm9ybSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJxdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzKGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1xdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5xdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzPC9CPihib29sZWFuJm5ic3A7cXVldWUpPC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIHdoZXRoZXIgY2hpbGQgY2hhbmdlIGxpc3RlbmVycyBzaG91bGQgYmUgcXVldWVkIG9yIG5vdC4gIElmCi0gdGhleSBhcmUgcXVldWVkIHRoZW4gY2hpbGQgY2hhbmdlIGV2ZW50cyB3aWxsIGJlIHF1ZXVlIHVwIHVudGlsIHRoaXMKLSBtZXRob2QgaXMgY2FsbGVkIHdpdGggYSBmYWxzZSBwYXJhbWV0ZXIuICBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2hpbGQKLSBjaGFuZ2UgZXZlbnQgbGlzdGVuZXJzIGFyZSBub3RpY2VkIG9mIGFkZCB0aGUgZXZlbnRzIHRoYXQgaGF2ZSBvY2N1cnJlZC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cXVldWU8L0NPREU+IC0gPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIsIGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5yZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtvbkNvbW1pdCk8L1BSRT4KLTxETD4KLTxERD5SZW1vdmVzIGEgY2hpbGQgY2hhbmdlIGxpc3RlbmVyIGZyb20gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saXN0ZW5lcjwvQ09ERT4gLSA8REQ+PENPREU+b25Db21taXQ8L0NPREU+IC0gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgbGlzdGVuZXIgc2hvdWxkIGJlIHJlbW92ZWQKLSBmcm9tIHRoZSBvbkNvbW1pdCBsaXN0LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWRkUHJvamVjdExvYWRMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1hZGRQcm9qZWN0TG9hZExpc3RlbmVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5hZGRQcm9qZWN0TG9hZExpc3RlbmVyPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyKTwvUFJFPgotPERMPgotPEREPkFkZCBhIHByb2plY3QgcGxhdGZvcm0gbGlzdGVuZXIuICBXaGVuIGEgcGFydGljdWxhciBwcm9qZWN0IGlzIHJlZmVyZW5jZWQKLSBieSBpbiB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gdGhpcyBsaXN0ZW5lciB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QKLSB0aW1lIHRoZSBwcm9qZWN0IGlzIGxvYWRlZCBpbnRvIHRoZSBzeXN0ZW0uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxpc3RlbmVyPC9DT0RFPiAtIHRoZSBsaXN0ZW5lcjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVtb3ZlUHJvamVjdExvYWRMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5yZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9BPiZuYnNwO2xpc3RlbmVyKTwvUFJFPgotPERMPgotPEREPlJlbW92ZXMgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saXN0ZW5lcjwvQ09ERT4gLSB0aGUgbGlzdGVuZXI8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFN0YXRlRW51bWVyYXRpb24oamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFN0YXRlRW51bWVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyBqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+Jmd0OyA8Qj5nZXRTdGF0ZUVudW1lcmF0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZW51bUlkKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZW51bUlkPC9DT0RFPiAtIAotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgbGlzdCBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcyBnaXZlbiB0aGUgdW5pcXVlCi0gZW51bWVyYXRpb24gSUQgZm9yIHRoaXMgZW51bWVyYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U3RhdGVJdGVtRW51bWVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+IDxCPmdldFN0YXRlSXRlbUVudW1lcmF0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7c3RhdGVJdGVtSWQpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdGF0ZUl0ZW1JZDwvQ09ERT4gLSAKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBhIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0gZ2l2ZW4gdGhpcyBJRCBmb3IgdGhpcyBlbnVtZXJhdGlvbgotIGl0ZW0uPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSURlc2NyaXB0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lEZXNjcmlwdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOWRkNDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSURlc2NyaXB0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3IKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3IiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VJRGVzY3JpcHRvci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklEZXNjcmlwdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklTZXJ2aWNlUG9saWN5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXREZXNjcmlwdG9yKCkiPmdldERlc2NyaXB0b3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JUXVpY2tGaXhBY3Rpb25JbmZvLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sI2dldERlc2NyaXB0b3IoKSI+Z2V0RGVzY3JpcHRvcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBkZXNjcmlwdG9yIGZvciB0aGlzIHF1aWNrIGZpeC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeU9wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXREZXNjcmlwdG9yKCkiPmdldERlc2NyaXB0b3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvXGNsYXNzLXVzZUlEZXNjcmlwdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSURlc2NyaXB0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lGaWx0ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lGaWx0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA5ZmRmOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JRmlsdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklGaWx0ZXIKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSUZpbHRlciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSUZpbHRlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklGaWx0ZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklGaWx0ZXI8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRmlsdGVyPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklGaWx0ZXI8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyhvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSUZpbHRlcikiPmdldFJvb3RTZXJ2aWNlUG9saWNpZXM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4mbmJzcDtmaWx0ZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBsaXN0IG9mIHJvb3QgcG9saWNpZXMgZm9yIHRoZSBwbGF0Zm9ybSBnaXZlbiBhIGZpbHRlci48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklGaWx0ZXI8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+QWN0aXZpdHlVdGlscy48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCNnZXRDdXJyZW50QWN0aXZpdGllc0ZpbHRlcigpIj5nZXRDdXJyZW50QWN0aXZpdGllc0ZpbHRlcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBmaWx0ZXIgYmFzZWQgb24gdGhlIEVjbGlwc2UgYWN0aXZpdGllcyBzZXR0aW5ncy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSUZpbHRlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklGaWx0ZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IwY2NlMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3QKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+Q2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCBpbXBsZW1lbnQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgaW50ZXJmYWNlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+UG9saWN5UmVsYXRpb25zaGlwSW1wbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCNnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKSI+Z2V0UG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcG9saWN5IGVudW1lcmF0aW9uIGxpc3QgZm9yIHRoaXMgcmVsYXRpb25zaGlwLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeVJlbGF0aW9uc2hpcC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCNnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKSI+Z2V0UG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcG9saWN5IGVudW1lcmF0aW9uIGxpc3QgZm9yIHRoaXMgcmVsYXRpb25zaGlwLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCByZXR1cm4gdHlwZXMgd2l0aCBhcmd1bWVudHMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+UG9saWN5UmVsYXRpb25zaGlwSW1wbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCNnZXRSZWxhdGVkUG9saWNpZXMoKSI+Z2V0UmVsYXRlZFBvbGljaWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcmVsYXRlZCBwb2xpY2llcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeVJlbGF0aW9uc2hpcC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCNnZXRSZWxhdGVkUG9saWNpZXMoKSI+Z2V0UmVsYXRlZFBvbGljaWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcmVsYXRlZCBwb2xpY2llcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5Db25zdHJ1Y3RvcnMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwjUG9saWN5UmVsYXRpb25zaGlwSW1wbChvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdCwgamF2YS51dGlsLkxpc3QpIj5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+Jm5ic3A7cG9saWN5RW51bWVyYXRpb25MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4mZ3Q7Jm5ic3A7cmVsYXRlZFBvbGljaWVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5Db25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB3aXRoIHR5cGUgYXJndW1lbnRzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCNQb2xpY3lSZWxhdGlvbnNoaXBJbXBsKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0LCBqYXZhLnV0aWwuTGlzdCkiPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQT4mbmJzcDtwb2xpY3lFbnVtZXJhdGlvbkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPiZndDsmbmJzcDtyZWxhdGVkUG9saWNpZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0YjQyZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lSZWxhdGlvbnNoaXAKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lSZWxhdGlvbnNoaXA8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5UmVsYXRpb25zaGlwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+Q2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCBpbXBsZW1lbnQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIElQb2xpY3lSZWxhdGlvbnNoaXAKLSBpbnRlcmZhY2UuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB0aGF0IHJldHVybiB0eXBlcyB3aXRoIGFyZ3VtZW50cyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5UmVsYXRpb25zaGlwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+Jmd0OzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JU2VydmljZVBvbGljeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjZ2V0UmVsYXRpb25zaGlwcygpIj5nZXRSZWxhdGlvbnNoaXBzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGxpc3Qgb2YgcmVsYXRpb25zaGlwcyB0byBvdGhlciBJU2VydmljZVBvbGljeSBvYmplY3RzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kIHBhcmFtZXRlcnMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHdpdGggdHlwZSBhcmd1bWVudHMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVNlcnZpY2VQb2xpY3kuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI3NldFJlbGF0aW9uc2hpcHMoamF2YS51dGlsLkxpc3QpIj5zZXRSZWxhdGlvbnNoaXBzPC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+Jmd0OyZuYnNwO3JlbGF0aW9uc2hpcHMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSByZWxhdGlvbnNoaXBzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VJUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVBvbGljeVN0YXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5U3RhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5NzQ5OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5U3RhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VJUG9saWN5U3RhdGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5U3RhdGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGU8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVNlcnZpY2VQb2xpY3kuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldFBvbGljeVN0YXRlKCkiPmdldFBvbGljeVN0YXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcG9saWN5IHN0YXRlIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklTZXJ2aWNlUG9saWN5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRQb2xpY3lTdGF0ZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPmdldFBvbGljeVN0YXRlPC9BPjwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgSVBvbGljeVN0YXRlIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VJUG9saWN5U3RhdGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5U3RhdGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lQb2xpY3lTdGF0ZUVudW0uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lQb2xpY3lTdGF0ZUVudW0uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM5NzcxNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5U3RhdGVFbnVtLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW0KLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSVBvbGljeVN0YXRlRW51bS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW08L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5U3RhdGVFbnVtPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlRW51bTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lTdGF0ZUVudW08L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlRW51bTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVNlcnZpY2VQb2xpY3kuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldFBvbGljeVN0YXRlRW51bSgpIj5nZXRQb2xpY3lTdGF0ZUVudW08L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwb2xpY3kgc3RhdGUgZW51bWVyYXRpb24gb2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlRW51bTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVNlcnZpY2VQb2xpY3kuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI2dldFBvbGljeVN0YXRlRW51bShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPmdldFBvbGljeVN0YXRlRW51bTwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBlbnVtZXJhdGlvbiBvYmplY3QgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VJUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVN0YXRlRW51bS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVNlcnZpY2VQb2xpY3kuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lTZXJ2aWNlUG9saWN5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOWU2YzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVNlcnZpY2VQb2xpY3kuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VJU2VydmljZVBvbGljeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklTZXJ2aWNlUG9saWN5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjY3JlYXRlU2VydmljZVBvbGljeShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5jcmVhdGVTZXJ2aWNlUG9saWN5PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtpZCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2VudW1MaXN0SWQsCi0gICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtkZWZhdWx0RW51bUlkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBtZXRob2QgY3JlYXRlcyBhbiBJU2VydmljZVBvbGljeSBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklTZXJ2aWNlUG9saWN5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRQYXJlbnRQb2xpY3koKSI+Z2V0UGFyZW50UG9saWN5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcGFyZW50IHNlcnZpY2UgcG9saWN5IG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCNnZXRQb2xpY3koKSI+Z2V0UG9saWN5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JUG9saWN5RW51bWVyYXRpb25MaXN0LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sI2dldFBvbGljeSgpIj5nZXRQb2xpY3k8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm0uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRTZXJ2aWNlUG9saWN5KGphdmEubGFuZy5TdHJpbmcpIj5nZXRTZXJ2aWNlUG9saWN5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2lkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHNlcnZpY2UgcG9saWN5IGdpdmVuIGl0J3MgdW5pcXVlIElELjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCByZXR1cm4gdHlwZXMgd2l0aCBhcmd1bWVudHMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklTZXJ2aWNlUG9saWN5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNnZXRDaGlsZHJlbigpIj5nZXRDaGlsZHJlbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyhvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSUZpbHRlcikiPmdldFJvb3RTZXJ2aWNlUG9saWNpZXM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4mbmJzcDtmaWx0ZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBsaXN0IG9mIHJvb3QgcG9saWNpZXMgZm9yIHRoZSBwbGF0Zm9ybSBnaXZlbiBhIGZpbHRlci48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklGaWx0ZXIuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwjYWNjZXB0KG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSkiPmFjY2VwdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGV0ZXJtaW5lcyBpZiBhIHBvbGljeSBzaG91bGQgYmUgYWNjZXB0ZWQgb3Igbm90LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm0uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNjcmVhdGVTZXJ2aWNlUG9saWN5KG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmNyZWF0ZVNlcnZpY2VQb2xpY3k8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2lkLAotICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZW51bUxpc3RJZCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RlZmF1bHRFbnVtSWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIElTZXJ2aWNlUG9saWN5IG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JU2VydmljZVBvbGljeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjcmVtb3ZlQ2hpbGQob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5KSI+cmVtb3ZlQ2hpbGQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYSBjaGlsZCBzZXJ2aWNlIHBvbGljeSBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcmVtb3ZlU2VydmljZVBvbGljeShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5yZW1vdmVTZXJ2aWNlUG9saWN5PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgc2VydmljZSBwb2xpY3kgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5Db25zdHJ1Y3RvcnMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCNQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKGphdmEudXRpbC5MaXN0LCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsPC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPiZndDsmbmJzcDtlbnVtTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHNpbXBsZSBjb25zdHJ1Y3RvciBmb3IgdGhpcyBjbGFzcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwjcG9saWN5U3RhdGVDaGFuZ2Uob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+cG9saWN5U3RhdGVDaGFuZ2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSwKLSAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCi0gICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7b2xkVmFsdWUsCi0gICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmV3VmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsZWQgd2hlbiBhIHN0YXRlIGNoYW5nZSBldmVudCBvY2N1cnMgZm9yIGEgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVN0YXR1c0NoYW5nZUxpc3RlbmVyLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sI3N0YXR1c0NoYW5nZShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzLCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cykiPnN0YXR1c0NoYW5nZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzJm5ic3A7b2xkU3RhdHVzLAotICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzJm5ic3A7bmV3U3RhdHVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2FsbGVkIHdoZW4gYSBzdGF0dXMgY2hhbmdlIGV2ZW50IG9jY3Vycy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZCBwYXJhbWV0ZXJzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0E+IHdpdGggdHlwZSBhcmd1bWVudHMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sI2NoaWxkQ2hhbmdlKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCkiPmNoaWxkQ2hhbmdlPC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7Jm5ic3A7Y2hpbGQsCi0gICAgICAgICAgICBqYXZhLnV0aWwuTGlzdCZsdDtqYXZhLmxhbmcuQm9vbGVhbiZndDsmbmJzcDthZGRlZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggYW4gYXJyYXkgb2YgY2hpbGQgY2hhbmdlcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeU9wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRTZXJ2aWNlUG9saWN5KCkiPmdldFNlcnZpY2VQb2xpY3k8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBvcGVyYXRpb24uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JUXVpY2tGaXhBY3Rpb24uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCNhY3Rpb24ob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5KSI+YWN0aW9uPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhpcyBhY3Rpb24gdG8gcmVzb2x2ZQotIGEgcGFydGljdWxhciBzZXJ2aWNlIHBvbGljeSBwcm9ibGVtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtVUkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIGphdmEubGFuZy5TdHJpbmcpIj5nZXRPcGVyYXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSwKLSAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7aWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIG9wZXJhdGlvbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2VydmljZSBwb2xpY3kKLSBhbmQgaGFzIHRoZSBzcGVjaWZpZWQgaWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtVUkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbnMob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBib29sZWFuKSI+Z2V0T3BlcmF0aW9uczwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgICBib29sZWFuJm5ic3A7aXNXb3Jrc3BhY2UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgZm9yIHRoaXMgcG9saWN5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kIHBhcmFtZXRlcnMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+IHdpdGggdHlwZSBhcmd1bWVudHMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Jmd0OyZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtVUkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbnNMaXN0KGphdmEudXRpbC5MaXN0LCBib29sZWFuKSI+Z2V0T3BlcmF0aW9uc0xpc3Q8L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDtwb2xpY2llcywKLSAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtpc1dvcmtzcGFjZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IG9mIGxpc3QgcG9saWN5IG9wZXJhdGlvbnMgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAotIHRoZSBzcGVjaWZpZWQgc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JUG9saWN5T3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2lzRW5hYmxlZChqYXZhLnV0aWwuTGlzdCkiPmlzRW5hYmxlZDwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3NlbGVjdGVkUG9saWNpZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklFbmFibGVPcGVyYXRpb24uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmh0bWwjaXNFbmFibGVkKGphdmEudXRpbC5MaXN0KSI+aXNFbmFibGVkPC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7Jm5ic3A7c2VsZWN0ZWRQb2xpY2llcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgd2hldGhlciB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JTGF1bmNoT3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sI2xhdW5jaChqYXZhLnV0aWwuTGlzdCkiPmxhdW5jaDwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3NlbGVjdGVkUG9saWNpZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhpcyBjb21wbGV4IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JUG9saWN5T3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2xhdW5jaE9wZXJhdGlvbihqYXZhLnV0aWwuTGlzdCkiPmxhdW5jaE9wZXJhdGlvbjwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3NlbGVjdGVkUG9saWNpZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMYXVuY2hlcyB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGlmIHRoaXMgaXMgYSBjb21wbGV4IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzPC9BPiB0aGF0IHJldHVybiB0eXBlcyB3aXRoIGFyZ3VtZW50cyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVV0aWxzLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwjc29ydExpc3QoamF2YS51dGlsLkxpc3QpIj5zb3J0TGlzdDwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3Vuc29ydGVkTGlzdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NvcnRzIGEgbGlzdCBvZiBzZXJ2aWNlIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kIHBhcmFtZXRlcnMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM8L0E+IHdpdGggdHlwZSBhcmd1bWVudHMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VVdGlscy48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5odG1sI3NvcnRMaXN0KGphdmEudXRpbC5MaXN0KSI+c29ydExpc3Q8L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDt1bnNvcnRlZExpc3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTb3J0cyBhIGxpc3Qgb2Ygc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvXGNsYXNzLXVzZUlTZXJ2aWNlUG9saWN5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZDQxZDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW0iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU3RhdGVFbnVtZXJhdGlvbkl0ZW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklQb2xpY3lTdGF0ZUVudW0uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwjZ2V0Q3VycmVudEl0ZW0oKSI+Z2V0Q3VycmVudEl0ZW08L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjdXJyZW50IGVudW0gaXRlbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm0uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0U3RhdGVJdGVtRW51bWVyYXRpb248L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7c3RhdGVJdGVtSWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHRoYXQgcmV0dXJuIHR5cGVzIHdpdGggYXJndW1lbnRzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCNnZXRFbnVtZXJhdGlvbkxpc3QoKSI+Z2V0RW51bWVyYXRpb25MaXN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGxpc3Qgb2Ygc3RhdGUgZW51bWVyYXRpb24gaXRlbXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklQb2xpY3lFbnVtZXJhdGlvbkxpc3QuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwjZ2V0RW51bWVyYXRpb25MaXN0KCkiPmdldEVudW1lcmF0aW9uTGlzdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHN0YXRlIGVudW1lcmF0aW9uIGxpc3QgaXRlbXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2dldFN0YXRlRW51bWVyYXRpb24oamF2YS5sYW5nLlN0cmluZykiPmdldFN0YXRlRW51bWVyYXRpb248L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZW51bUlkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5Db25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB3aXRoIHR5cGUgYXJndW1lbnRzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwjUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbChqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5KSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT4mZ3Q7Jm5ic3A7ZW51bUxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBzaW1wbGUgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OWFmNjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvXGNsYXNzLXVzZVBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw8L0I+PC9IMj4KLTwvQ0VOVEVSPgotTm8gdXNhZ2Ugb2Ygb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDg2MWVhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5UmVsYXRpb25zaGlwSW1wbCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1xjbGFzcy11c2VQb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIENsYXNzPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsCi08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlUG9saWN5UmVsYXRpb25zaGlwSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlBvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVmMzc2Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBDbGFzczxicj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwjZ2V0RGVmYXVsdCgpIj5nZXREZWZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMjM2NDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9cY2xhc3MtdXNlU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm0uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCNnZXRJbnN0YW5jZSgpIj5nZXRJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvXGNsYXNzLXVzZVNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YzYwODUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwjY2hpbGRDaGFuZ2UoamF2YS51dGlsLkxpc3QsIGphdmEudXRpbC5MaXN0KSI+Y2hpbGRDaGFuZ2U8L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDtjaGlsZCwKLSAgICAgICAgICAgIGphdmEudXRpbC5MaXN0Jmx0O2phdmEubGFuZy5Cb29sZWFuJmd0OyZuYnNwO2FkZGVkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhbiBhcnJheSBvZiBjaGlsZCBjaGFuZ2VzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iY2hpbGRDaGFuZ2UoamF2YS51dGlsLkxpc3QsIGphdmEudXRpbC5MaXN0KSI+PCEtLSAtLT48L0E+PEgzPgotY2hpbGRDaGFuZ2U8L0gzPgotPFBSRT4KLXZvaWQgPEI+Y2hpbGRDaGFuZ2U8L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO2NoaWxkLAotICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuTGlzdCZsdDtqYXZhLmxhbmcuQm9vbGVhbiZndDsmbmJzcDthZGRlZCk8L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9mIGNoaWxkIGNoYW5nZXMuICBFYWNoIGNoaWxkIGl0ZW0KLSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGFkZGVkIGl0ZW0gYXQgdGhlIHNhbWUgaW5kZXggdmFsdWUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNoaWxkPC9DT0RFPiAtIHNlcnZpY2UgcG9saWNpZXMgdGhhdCBoYXZlIGNoYW5nZWQuPEREPjxDT0RFPmFkZGVkPC9DT0RFPiAtIGluZGljYXRlcyBpZiB0aGUgYXNzb2NpYXRlIHBvbGljeSB3YXMgYWRkZWQgb3IgcmVtb3ZlZC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDVjZDRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlZ2lzdGVyIGNvZGUgdGhhdCBuZWVkcyB0byBleGVjdXRlIHdoZW4gdGhlCi0gc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gaXMgbG9hZGVkLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sI2xvYWQoKSI+bG9hZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NhbGxlZCBvbmNlIHdoZW4gdGhlIHNlcnZpY2UgcGxhdGZvcm0gaXMgbG9hZGVkIGluIHRoZSBzeXN0ZW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJsb2FkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxvYWQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+bG9hZDwvQj4oKTwvUFJFPgotPERMPgotPEREPkNhbGxlZCBvbmNlIHdoZW4gdGhlIHNlcnZpY2UgcGxhdGZvcm0gaXMgbG9hZGVkIGluIHRoZSBzeXN0ZW0uICBUaGlzCi0gbWF5IG5vdCBuZWNlc3NhcmlseSBoYXBwZW4gd2hlbiBFY2xpcHNlIGluaXRpYWxseSBzdGFydHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGZmZTY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY29kZSB0aGF0IG5lZWRzIHRvIGxvYWRlZCB3aGVuIGEgcGFydGljdWxhcgotIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCNsb2FkKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+bG9hZDwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gYSBwcm9qZWN0IGxvYWRlZCBpbnRvIHRoZSBzZXJ2aWNlIHBvbGljeQotIHBsYXRmb3JtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibG9hZChvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxvYWQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+bG9hZDwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvUFJFPgotPERMPgotPEREPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gYSBwcm9qZWN0IGxvYWRlZCBpbnRvIHRoZSBzZXJ2aWNlIHBvbGljeQotIHBsYXRmb3JtLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0PC9DT0RFPiAtIHRoZSBwcm9qZWN0PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZWMxNWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSBpcyB1c2VkIHdoZW4gdGhlIGRldmVsb3BlciB3YW50cyB0byBsaXN0ZW5lciB0byBzdGF0ZQotIGNoYW5nZXMgZm9yIGEgcGFydGljdWxhciBzZXJ2aWNlIHBvbGljeS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sI3BvbGljeVN0YXRlQ2hhbmdlKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnBvbGljeVN0YXRlQ2hhbmdlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3ksCi0gICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAotICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO29sZFZhbHVlLAotICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO25ld1ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2FsbGVkIHdoZW4gYSBzdGF0ZSBjaGFuZ2UgZXZlbnQgb2NjdXJzIGZvciBhIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0icG9saWN5U3RhdGVDaGFuZ2Uob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcG9saWN5U3RhdGVDaGFuZ2U8L0gzPgotPFBSRT4KLXZvaWQgPEI+cG9saWN5U3RhdGVDaGFuZ2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAotICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7b2xkVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtuZXdWYWx1ZSk8L1BSRT4KLTxETD4KLTxERD5DYWxsZWQgd2hlbiBhIHN0YXRlIGNoYW5nZSBldmVudCBvY2N1cnMgZm9yIGEgc2VydmljZSBwb2xpY3kuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBvbGljeTwvQ09ERT4gLSB0aGUgc2VydmljZSBwb2xpY3k8REQ+PENPREU+a2V5PC9DT0RFPiAtIHRoZSBrZXkgb2YgdGhlIHN0YXRlIHRoYXQgY2hhbmdlZC48REQ+PENPREU+b2xkVmFsdWU8L0NPREU+IC0gdGhlIG9sZCB2YWx1ZSBvZiB0aGUgc3RhdGUgdGhhdCBjaGFuZ2VkLjxERD48Q09ERT5uZXdWYWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzdGF0ZSB0aGF0IGNoYW5nZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjFiNjZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlTdGF0dXNDaGFuZ2VMaXN0ZW5lcgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSVN0YXR1c0NoYW5nZUxpc3RlbmVyIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElTdGF0dXNDaGFuZ2VMaXN0ZW5lcjwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBjb2RlIHRoYXQgaXMgaW50ZXJlc3RlZCBpbiBsaXN0ZW5pbmcgdG8gc3RhdHVzCi0gY2hhbmdlIGV2ZW50cyBvZiBzZXJ2aWNlIHBvbGljaWVzLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sI3N0YXR1c0NoYW5nZShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzLCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cykiPnN0YXR1c0NoYW5nZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzJm5ic3A7b2xkU3RhdHVzLAotICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzJm5ic3A7bmV3U3RhdHVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2FsbGVkIHdoZW4gYSBzdGF0dXMgY2hhbmdlIGV2ZW50IG9jY3Vycy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InN0YXR1c0NoYW5nZShvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzLCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cykiPjwhLS0gLS0+PC9BPjxIMz4KLXN0YXR1c0NoYW5nZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zdGF0dXNDaGFuZ2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMmbmJzcDtvbGRTdGF0dXMsCi0gICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyZuYnNwO25ld1N0YXR1cyk8L1BSRT4KLTxETD4KLTxERD5DYWxsZWQgd2hlbiBhIHN0YXR1cyBjaGFuZ2UgZXZlbnQgb2NjdXJzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wb2xpY3k8L0NPREU+IC0gdGhlIHNlcnZpY2UgcG9saWN5LjxERD48Q09ERT5vbGRTdGF0dXM8L0NPREU+IC0gdGhlIG9sZCBzdGF0dXMuPEREPjxDT0RFPm5ld1N0YXR1czwvQ09ERT4gLSB0aGUgbmV3IHN0YXR1cy48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZDUzOWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL1xjbGFzcy11c2VJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI2FkZENoaWxkQ2hhbmdlTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciwgYm9vbGVhbikiPmFkZENoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtvbkNvbW1pdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgbWV0aG9kIGFsbG93cyBjYWxscyB0byBsaXN0ZW5lciB0byBhbnkgY2hpbGQgY2hhbmdlIHRoYXQgaXMKLSBtYWRlIGluIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGlzIAotIGxvY2F0ZWQgaW4gdGhlIHRyZWUgb2Ygc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JU2VydmljZVBvbGljeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwjYWRkUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKSI+YWRkUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgYSBjaGlsZCBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5odG1sI3JlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciwgYm9vbGVhbikiPnJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtvbkNvbW1pdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYSBjaGlsZCBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVNlcnZpY2VQb2xpY3kuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sI3JlbW92ZVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcikiPnJlbW92ZVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgY2hpbGQgbGlzdGVuZXIgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9cY2xhc3MtdXNlSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjdkZTJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvXGNsYXNzLXVzZUlQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcgotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvXGNsYXNzLXVzZUlQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzk1OWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvXGNsYXNzLXVzZUlQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjYWRkUHJvamVjdExvYWRMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIpIj5hZGRQcm9qZWN0TG9hZExpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZCBhIHByb2plY3QgcGxhdGZvcm0gbGlzdGVuZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjcmVtb3ZlUHJvamVjdExvYWRMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIpIj5yZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL1xjbGFzcy11c2VJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvY2xhc3MtdXNlL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9jbGFzcy11c2UvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhMDZiMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9jbGFzcy11c2UvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvXGNsYXNzLXVzZUlQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeVN0YXRlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwjYWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLCBib29sZWFuKSI+YWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiZuYnNwO25vdGlmeU9ubHlPbkNvbW1pdCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgYSBwb2xpY3kgc3RhdGUgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeVN0YXRlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmh0bWwjcmVtb3ZlUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKSI+cmVtb3ZlUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvQT4mbmJzcDtsaXN0ZW5lcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYSBwb2xpY3kgc3RhdGUgY2hhbmdlIGxpc3RlbmVyIGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvXGNsYXNzLXVzZUlQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NhMGM3YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9jbGFzcy11c2UvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JU3RhdHVzQ2hhbmdlTGlzdGVuZXIKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL1xjbGFzcy11c2VJU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklTZXJ2aWNlUG9saWN5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcikiPmFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklTZXJ2aWNlUG9saWN5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCNyZW1vdmVTdGF0dXNDaGFuZ2VMaXN0ZW5lcihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcikiPnJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0E+Jm5ic3A7bGlzdGVuZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9cY2xhc3MtdXNlSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLWZyYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExODYwMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1mcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycwotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMgcGFja2FnZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIj4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVUaXRsZUZvbnQiPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPC9BPjwvRk9OVD4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotSW50ZXJmYWNlczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjwvST48L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjE2ZjQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEgyPgotUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzCi08L0gyPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkludGVyZmFjZSBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjwvQT48L0I+PC9URD4KLTxURD4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY29kZSB0aGF0IG5lZWRzIHRvIGV4ZWN1dGUgd2hlbiB0aGUKLSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBpcyBsb2FkZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY29kZSB0aGF0IG5lZWRzIHRvIGxvYWRlZCB3aGVuIGEgcGFydGljdWxhcgotIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgd2hlbiB0aGUgZGV2ZWxvcGVyIHdhbnRzIHRvIGxpc3RlbmVyIHRvIHN0YXRlCi0gY2hhbmdlcyBmb3IgYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBjb2RlIHRoYXQgaXMgaW50ZXJlc3RlZCBpbiBsaXN0ZW5pbmcgdG8gc3RhdHVzCi0gY2hhbmdlIGV2ZW50cyBvZiBzZXJ2aWNlIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLTxETD4KLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5QUkVWIFBBQ0tBR0U8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhZTNhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIENsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMgQ2xhc3MgSGllcmFyY2h5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci1IaWVyYXJjaHkgRm9yIFBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycwotPC9IMj4KLTwvQ0VOVEVSPgotPERMPgotPERUPjxCPlBhY2thZ2UgSGllcmFyY2hpZXM6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy10cmVlLmh0bWwiPkFsbCBQYWNrYWdlczwvQT48L0RMPgotPEhSPgotPEgyPgotSW50ZXJmYWNlIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+SVN0YXR1c0NoYW5nZUxpc3RlbmVyPC9CPjwvQT48L1VMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS10cmVlLmh0bWwiPjxCPlBSRVY8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5ORVhUPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2UtdXNlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXVzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTYxMWNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2UtdXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIFBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIFBhY2thZ2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL2NsYXNzLXVzZS9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY29kZSB0aGF0IG5lZWRzIHRvIGxvYWRlZCB3aGVuIGEgcGFydGljdWxhcgotIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9jbGFzcy11c2UvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGlzIHVzZWQgd2hlbiB0aGUgZGV2ZWxvcGVyIHdhbnRzIHRvIGxpc3RlbmVyIHRvIHN0YXRlCi0gY2hhbmdlcyBmb3IgYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9jbGFzcy11c2UvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBjb2RlIHRoYXQgaXMgaW50ZXJlc3RlZCBpbiBsaXN0ZW5pbmcgdG8gc3RhdHVzCi0gY2hhbmdlIGV2ZW50cyBvZiBzZXJ2aWNlIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2UtZnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1mcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTVmOWY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1mcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci08Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lVGl0bGVGb250Ij4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1JbnRlcmZhY2VzPC9GT05UPiZuYnNwOwotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPgotPEJSPgotPEEgSFJFRj0iSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SURlc2NyaXB0b3I8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JRmlsdGVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IklQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJUG9saWN5UmVsYXRpb25zaGlwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklQb2xpY3lSZWxhdGlvbnNoaXA8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iSVBvbGljeVN0YXRlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklQb2xpY3lTdGF0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklQb2xpY3lTdGF0ZUVudW08L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SVNlcnZpY2VQb2xpY3k8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iSVN0YXRlRW51bWVyYXRpb25JdGVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvST48L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLUNsYXNzZXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHRhcmdldD0iY2xhc3NGcmFtZSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT4KLTxCUj4KLTxBIEhSRUY9IlBvbGljeVJlbGF0aW9uc2hpcEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsPC9BPgotPEJSPgotPEEgSFJFRj0iU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0E+Ci08QlI+Ci08QSBIUkVGPSJTZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0ODVjNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSBwYWNrYWdlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIFBBQ0tBR0UmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08SDI+Ci1QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeQotPC9IMj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5JbnRlcmZhY2UgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIGRlc2NyaXB0aW9uIGZvciBhIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklGaWx0ZXI8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBmaWx0ZXIgc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgY29tYmluYXRpb24gb2YgYSBwb2xpY3kgYW5kIGEgbGlzdAotIG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4KLSBzZXJ2aWNlIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlPC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgYnkgc2VydmljZSBwb2xpY3kgZXh0ZW5kZXJzIHRvIHNhdmUgdGhlIHN0YXRlIG9mCi0gdGhlcmUgcG9saWNpZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVBvbGljeVN0YXRlRW51bTwvQT48L0I+PC9URD4KLTxURD5UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgc3RhdGUgd2hlbiBhbiBlbnVtZXJhdGlvbiBpcyB1c2VkCi0gdG8gcGVyc2lzdCBzdGF0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIHRoZSBpZGVhIG9mIGEgc2VydmljZSBwb2xpY3k8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQT48L0I+PC9URD4KLTxURD5UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgc3RhdGUgZW51bWVyYXRpb24gaXRlbSB0aGF0IHdhcwotIGRlZmluZWQgYnkgYW4gZW51bWVyYXRpb24gaW4gcGx1Z2luLnhtbCBtZXRhIGRhdGEuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+UG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDwvQT48L0I+PC9URD4KLTxURD5UaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUG9saWN5RW51bWVyYXRpb25MaXN0IGludGVyZmFjZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVBvbGljeVJlbGF0aW9uc2hpcAotIGludGVyZmFjZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQT48L0I+PC9URD4KLTxURD5UaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWNjZXNzIGFuZCBhZGQgc2VydmljZSBwb2xpY2llcyB0byB0aGUgcGxhdGZvcm0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci0KLTxQPgotPERMPgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIFBBQ0tBR0UmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2UtdHJlZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWQ3OGI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS10cmVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IENsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSBDbGFzcyBIaWVyYXJjaHkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+TkVYVDwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotSGllcmFyY2h5IEZvciBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeQotPC9IMj4KLTwvQ0VOVEVSPgotPERMPgotPERUPjxCPlBhY2thZ2UgSGllcmFyY2hpZXM6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy10cmVlLmh0bWwiPkFsbCBQYWNrYWdlczwvQT48L0RMPgotPEhSPgotPEgyPgotQ2xhc3MgSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YS5sYW5nLk9iamVjdDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4gKGltcGxlbWVudHMgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvcikKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yPC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtPC9CPjwvQT48L1VMPgotPC9VTD4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JRGVzY3JpcHRvcjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JRmlsdGVyPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklQb2xpY3lTdGF0ZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5U3RhdGVFbnVtPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JU2VydmljZVBvbGljeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQj48L0E+PC9VTD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+TkVYVDwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS11c2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS11c2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI3YTVkMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2UtdXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIFBhY2thZ2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotQ2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lEZXNjcmlwdG9yLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JRGVzY3JpcHRvcjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGlkZWEgb2YgYSBkZXNjcmlwdGlvbiBmb3IgYSBzZXJ2aWNlIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSUZpbHRlci5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SUZpbHRlcjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGZpbHRlciBzZXJ2aWNlIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5RW51bWVyYXRpb25MaXN0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5RW51bWVyYXRpb25MaXN0PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgY29tYmluYXRpb24gb2YgYSBwb2xpY3kgYW5kIGEgbGlzdAotIG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JUG9saWN5UmVsYXRpb25zaGlwLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5UmVsYXRpb25zaGlwPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuCi0gc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVBvbGljeVN0YXRlLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JUG9saWN5U3RhdGU8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBzZXJ2aWNlIHBvbGljeSBleHRlbmRlcnMgdG8gc2F2ZSB0aGUgc3RhdGUgb2YKLSB0aGVyZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVBvbGljeVN0YXRlRW51bS5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeVN0YXRlRW51bTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgc3RhdGUgd2hlbiBhbiBlbnVtZXJhdGlvbiBpcyB1c2VkCi0gdG8gcGVyc2lzdCBzdGF0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVNlcnZpY2VQb2xpY3kuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklTZXJ2aWNlUG9saWN5PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIHNlcnZpY2UgcG9saWN5PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVN0YXRlRW51bWVyYXRpb25JdGVtPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtIHRoYXQgd2FzCi0gZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbiBpbiBwbHVnaW4ueG1sIG1ldGEgZGF0YS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvU2VydmljZVBvbGljeUFjdGl2YXRvci5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm08L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBjbGFzcyBpcyB1c2VkIHRvIGFjY2VzcyBhbmQgYWRkIHNlcnZpY2UgcG9saWNpZXMgdG8gdGhlIHBsYXRmb3JtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotQ2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVNlcnZpY2VQb2xpY3kuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzIj48Qj5JU2VydmljZVBvbGljeTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGlkZWEgb2YgYSBzZXJ2aWNlIHBvbGljeTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1DbGFzc2VzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiB1c2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSURlc2NyaXB0b3IuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklEZXNjcmlwdG9yPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIGRlc2NyaXB0aW9uIGZvciBhIHNlcnZpY2UgcG9saWN5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2NsYXNzLXVzZS9JU2VydmljZVBvbGljeS5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SVNlcnZpY2VQb2xpY3k8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIHRoZSBpZGVhIG9mIGEgc2VydmljZSBwb2xpY3k8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotQ2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvY2xhc3MtdXNlL0lGaWx0ZXIuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPklGaWx0ZXI8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBmaWx0ZXIgc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9jbGFzcy11c2UvSVNlcnZpY2VQb2xpY3kuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPklTZXJ2aWNlUG9saWN5PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyB0aGUgaWRlYSBvZiBhIHNlcnZpY2UgcG9saWN5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzNDA5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JRW5hYmxlT3BlcmF0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb24gaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJRW5hYmxlT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSUVuYWJsZU9wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklFbmFibGVPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBJRW5hYmxlT3BlcmF0aW9uPC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SUVuYWJsZU9wZXJhdGlvbjwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbmFibGVkQ2xhc3MgYXR0cmlidXRlIG9mIHRoZQotIGVuYWJsZWQgZWxlbWVudC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCNpc0VuYWJsZWQoamF2YS51dGlsLkxpc3QpIj5pc0VuYWJsZWQ8L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDtzZWxlY3RlZFBvbGljaWVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iaXNFbmFibGVkKGphdmEudXRpbC5MaXN0KSI+PCEtLSAtLT48L0E+PEgzPgotaXNFbmFibGVkPC9IMz4KLTxQUkU+Ci1ib29sZWFuIDxCPmlzRW5hYmxlZDwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7Jm5ic3A7c2VsZWN0ZWRQb2xpY2llcyk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNlbGVjdGVkUG9saWNpZXM8L0NPREU+IC0gdGhlIHNlbGVjdGVkIHNlcnZpY2UgcG9saWNpZXMuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgd2hldGhlciB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSUVuYWJsZU9wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklFbmFibGVPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JTGF1bmNoT3BlcmF0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2MzA2Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JTGF1bmNoT3BlcmF0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklMYXVuY2hPcGVyYXRpb24gaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJTGF1bmNoT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSUxhdW5jaE9wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBJTGF1bmNoT3BlcmF0aW9uPC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SUxhdW5jaE9wZXJhdGlvbjwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBsYXVuY2hDbGFzcyBhdHRyaWJ1dGUgb2YKLSB0aGUgY29tcGxleCBlbGVtZW50LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sI2xhdW5jaChqYXZhLnV0aWwuTGlzdCkiPmxhdW5jaDwvQT48L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3NlbGVjdGVkUG9saWNpZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhpcyBjb21wbGV4IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImxhdW5jaChqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxhdW5jaDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5sYXVuY2g8L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3NlbGVjdGVkUG9saWNpZXMpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoaXMgY29tcGxleCBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNlbGVjdGVkUG9saWNpZXM8L0NPREU+IC0gYSBsaXN0IG9mIHRoZSBzZXJ2aWNlIHBvbGljaWVzIHRoYXQgd2VyZSBzZWxlY3RlZC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSUxhdW5jaE9wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNDM1ZDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzggRURUIDIwMDggLS0+Ci08VElUTEU+Ci1JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kIGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNlbnVtX2NvbnN0YW50X3N1bW1hcnkiPkVOVU0gQ09OU1RBTlRTPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2VudW1fY29uc3RhbnRfZGV0YWlsIj5FTlVNIENPTlNUQU5UUzwvQT4mbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvRk9OVD4KLTxCUj4KLUVudW0gSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9IMj4KLTxQUkU+Ci1qYXZhLmxhbmcuT2JqZWN0Ci0gIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj5qYXZhLmxhbmcuRW51bSZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9BPiZndDsKLSAgICAgIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9CPiA8REQ+amF2YS5pby5TZXJpYWxpemFibGUsIGphdmEubGFuZy5Db21wYXJhYmxlJmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+Jmd0OzwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBpbnRlcmZhY2U6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBzdGF0aWMgZW51bSA8Qj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLkVudW0mbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT4mZ3Q7PC9ETD4KLTwvUFJFPgotCi08UD4KLUluZGljYXRlcyB0aGUga2luZCBvZiBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gdGhhdCB0aGlzIG9iamVjdCByZXByZXNlbnRzLgotIDx1bD4KLSA8bGk+ZW51bWVyYXRpb246IGluZGljYXRlcyB0aGF0IGEgbGlzdCBvZiBlbnVtZXJhdGVkIHZhbHVlcyBpcyBhc3NvY2lhdGVkLjwvbGk+Ci0gPGxpPnNlbGVjdGlvbjogaW5kaWNhdGVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHNvbWUKLSBib29sZWFuIG9wZXJhdGlvbjwvbGk+Ci0gPGxpPiBpY29uU2VsZWN0aW9uOiB0aGlzIG9wZXJhdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBzZWxlY3Rpb24gb3BlcmF0aW9uCi0gZXhjZXB0IHRoYXQgaXQgdmlzdWFsIHN0YXRlIGlzIHJlbmRlcmVkIHZpYSBhbiBpY29uLjwvbGk+Ci0gPGxpPmNvbXBsZXg6IGluZGljYXRlcyB0aGF0IHNvbWUgY29tcGxleCBvcGVyYXRpb24gaXMgcmVxdWlyZWQgdG8gcmVuZGVyCi0gYW5kIHBlcnNpc3Qgc29tZSBwb2xpY3kgZGF0YS4gIFRoaXMgb3BlcmF0aW9uIHdpbGwgYmUgcmVuZGVyZWQgdmlhIGEgVUkKLSBidXR0b24uICBXaGVuIHRoaXMgYnV0dG9uIGlzIHNlbGVjdGVkIHRoZSBsYXVuY2ggY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSBvcGVyYXRpb24gaXMgY2FsbGVkLjwvbGk+ICAgCi0gPHVsLz4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09PT09IEVOVU0gQ09OU1RBTlQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZW51bV9jb25zdGFudF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+RW51bSBDb25zdGFudCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCNjb21wbGV4Ij5jb21wbGV4PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sI2VudW1lcmF0aW9uIj5lbnVtZXJhdGlvbjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCNpY29uU2VsZWN0aW9uIj5pY29uU2VsZWN0aW9uPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sI3NlbGVjdGlvbiI+c2VsZWN0aW9uPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sI3ZhbHVlT2YoamF2YS5sYW5nLlN0cmluZykiPnZhbHVlT2Y8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGVudW0gY29uc3RhbnQgb2YgdGhpcyB0eXBlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCN2YWx1ZXMoKSI+dmFsdWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBjb25zdGFudHMgb2YgdGhpcyBlbnVtIHR5cGUsIGluCi10aGUgb3JkZXIgdGhleSdyZSBkZWNsYXJlZC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5FbnVtIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuRW51bTwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmNvbXBhcmVUbywgZXF1YWxzLCBnZXREZWNsYXJpbmdDbGFzcywgaGFzaENvZGUsIG5hbWUsIG9yZGluYWwsIHRvU3RyaW5nLCB2YWx1ZU9mPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLk9iamVjdDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldENsYXNzLCBub3RpZnksIG5vdGlmeUFsbCwgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBFTlVNIENPTlNUQU5UIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZW51bV9jb25zdGFudF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5FbnVtIENvbnN0YW50IERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJlbnVtZXJhdGlvbiI+PCEtLSAtLT48L0E+PEgzPgotZW51bWVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT4gPEI+ZW51bWVyYXRpb248L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2VsZWN0aW9uIj48IS0tIC0tPjwvQT48SDM+Ci1zZWxlY3Rpb248L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT4gPEI+c2VsZWN0aW9uPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imljb25TZWxlY3Rpb24iPjwhLS0gLS0+PC9BPjxIMz4KLWljb25TZWxlY3Rpb248L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT4gPEI+aWNvblNlbGVjdGlvbjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21wbGV4Ij48IS0tIC0tPjwvQT48SDM+Ci1jb21wbGV4PC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+IDxCPmNvbXBsZXg8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ2YWx1ZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotdmFsdWVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+W10gPEI+dmFsdWVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBjb25zdGFudHMgb2YgdGhpcyBlbnVtIHR5cGUsIGluCi10aGUgb3JkZXIgdGhleSdyZSBkZWNsYXJlZC4gIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGl0ZXJhdGUKLW92ZXIgdGhlIGNvbnN0YW50cyBhcyBmb2xsb3dzOgotPHByZT4KLWZvcihJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQgYyA6IElQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC52YWx1ZXMoKSkKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGMpOwotPC9wcmU+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29uc3RhbnRzIG9mIHRoaXMgZW51bSB0eXBlLCBpbgotdGhlIG9yZGVyIHRoZXkncmUgZGVjbGFyZWQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InZhbHVlT2YoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXZhbHVlT2Y8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT4gPEI+dmFsdWVPZjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgZW51bSBjb25zdGFudCBvZiB0aGlzIHR5cGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCi1UaGUgc3RyaW5nIG11c3QgbWF0Y2ggPEk+ZXhhY3RseTwvST4gYW4gaWRlbnRpZmllciB1c2VkIHRvIGRlY2xhcmUgYW4KLWVudW0gY29uc3RhbnQgaW4gdGhpcyB0eXBlLiAgKEV4dHJhbmVvdXMgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSAKLW5vdCBwZXJtaXR0ZWQuKQotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIHRoZSBuYW1lIG9mIHRoZSBlbnVtIGNvbnN0YW50IHRvIGJlIHJldHVybmVkLgotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgZW51bSBjb25zdGFudCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+amF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQ09ERT4gLSBpZiB0aGlzIGVudW0gdHlwZSBoYXMgbm8gY29uc3RhbnQKLXdpdGggdGhlIHNwZWNpZmllZCBuYW1lPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2VudW1fY29uc3RhbnRfc3VtbWFyeSI+RU5VTSBDT05TVEFOVFM8L0E+Jm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZW51bV9jb25zdGFudF9kZXRhaWwiPkVOVU0gQ09OU1RBTlRTPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmJlNjQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlQb2xpY3lPcGVyYXRpb24KLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbiBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IklQb2xpY3lPcGVyYXRpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElQb2xpY3lPcGVyYXRpb248L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JUG9saWN5T3BlcmF0aW9uPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSByZXByZXNlbnRzIGEgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHRoYXQgaGFzIGJlZW4gZGVmaW5lZAotIGluIHRoZSBwbHVnaW4ueG1sIG1ldGEgZGF0YS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgdGhlIGtpbmQgb2YgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHRoYXQgdGhpcyBvYmplY3QgcmVwcmVzZW50cy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXREZWZhdWx0SXRlbSgpIj5nZXREZWZhdWx0SXRlbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGRlZmF1bHQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjZ2V0RGVzY3JpcHRvcigpIj5nZXREZXNjcmlwdG9yPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRFbnVtZXJhdGlvbklkKCkiPmdldEVudW1lcmF0aW9uSWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBlbnVtIElEIGZvciB0aGlzIG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2dldElkKCkiPmdldElkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdW5pcXVlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRPcGVyYXRpb25LaW5kKCkiPmdldE9wZXJhdGlvbktpbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBraW5kIG9mIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2dldFBvbGljeUlkUGF0dGVybigpIj5nZXRQb2xpY3lJZFBhdHRlcm48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBpZCBwYXR0ZXJuIGZvciB0aGlzIG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRTZXJ2aWNlUG9saWN5KCkiPmdldFNlcnZpY2VQb2xpY3k8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBvcGVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRTdGF0ZUl0ZW0ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj5nZXRTdGF0ZUl0ZW08L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjdXJyZW50IGVudW1lcmF0aW9uIGl0ZW0gZm9yIHRoaXMgb3BlcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjaXNFbmFibGVkKGphdmEudXRpbC5MaXN0KSI+aXNFbmFibGVkPC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7Jm5ic3A7c2VsZWN0ZWRQb2xpY2llcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNpc1VzZURlZmF1bHREYXRhKCkiPmlzVXNlRGVmYXVsdERhdGE8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gdXNlcyBkZWZhdWx0IHN0YXRlIG9yIG5vdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sI2lzV29ya3NwYWNlT25seSgpIj5pc1dvcmtzcGFjZU9ubHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHdoZXRoZXIgdGhpcyBpcyBhIHdvcmtzcGFjZSBvbmx5IG9wZXJhdGlvbiBvciBub3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNsYXVuY2hPcGVyYXRpb24oamF2YS51dGlsLkxpc3QpIj5sYXVuY2hPcGVyYXRpb248L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDtzZWxlY3RlZFBvbGljaWVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TGF1bmNoZXMgdGhlIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBpZiB0aGlzIGlzIGEgY29tcGxleCBvcGVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNzZXRTdGF0ZUl0ZW0ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QsIGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdGF0ZUl0ZW08L0E+PC9CPihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCZuYnNwO3Byb2plY3QsCi0gICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3N0YXRlSXRlbSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRJZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJZDwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRJZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHVuaXF1ZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgdW5pcXVlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlc2NyaXB0b3IoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVzY3JpcHRvcjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRGVzY3JpcHRvcjwvQT4gPEI+Z2V0RGVzY3JpcHRvcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNXb3Jrc3BhY2VPbmx5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzV29ya3NwYWNlT25seTwvSDM+Ci08UFJFPgotYm9vbGVhbiA8Qj5pc1dvcmtzcGFjZU9ubHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhpcyBpcyBhIHdvcmtzcGFjZSBvbmx5IG9wZXJhdGlvbiBvciBub3QuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0cnVlIGlmIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHNob3VsZCBvbmx5IGFwcGVhcgotIGluIHRoZSB3b3Jrc3BhY2Ugc2VydmljZSBwb2xpY3kgcHJlZmVyZW5jZSBwYWdlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0T3BlcmF0aW9uS2luZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPcGVyYXRpb25LaW5kPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9BPiA8Qj5nZXRPcGVyYXRpb25LaW5kPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUga2luZCBvZiBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUga2luZCBvZiBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbnVtZXJhdGlvbklkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVudW1lcmF0aW9uSWQ8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0RW51bWVyYXRpb25JZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGVudW0gSUQgZm9yIHRoaXMgb3BlcmF0aW9uLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIGVudW1lcmF0aW9uIElEIGlmIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGlzCi0gYW4gZW51bWVyYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZhdWx0SXRlbSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZhdWx0SXRlbTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXREZWZhdWx0SXRlbTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGRlZmF1bHQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBpZiB0aGlzIGlzIGFuIGVudW1lcmF0aW9uIGl0IHJldHVybnMgdGhlIGRlZmF1bHQgaXRlbSBmb3IgdGhpcwotIGVudW1lcmF0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGF1bmNoT3BlcmF0aW9uKGphdmEudXRpbC5MaXN0KSI+PCEtLSAtLT48L0E+PEgzPgotbGF1bmNoT3BlcmF0aW9uPC9IMz4KLTxQUkU+Ci12b2lkIDxCPmxhdW5jaE9wZXJhdGlvbjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7Jm5ic3A7c2VsZWN0ZWRQb2xpY2llcyk8L1BSRT4KLTxETD4KLTxERD5MYXVuY2hlcyB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGlmIHRoaXMgaXMgYSBjb21wbGV4IG9wZXJhdGlvbi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c2VsZWN0ZWRQb2xpY2llczwvQ09ERT4gLSB0aGUgc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzRW5hYmxlZChqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzRW5hYmxlZDwvSDM+Ci08UFJFPgotYm9vbGVhbiA8Qj5pc0VuYWJsZWQ8L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3NlbGVjdGVkUG9saWNpZXMpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c2VsZWN0ZWRQb2xpY2llczwvQ09ERT4gLSB0aGUgc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcy4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBvbGljeUlkUGF0dGVybigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb2xpY3lJZFBhdHRlcm48L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0UG9saWN5SWRQYXR0ZXJuPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgaWQgcGF0dGVybiBmb3IgdGhpcyBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9uLgotIEFsbCBzZXJ2aWNlIHBvbGljeSBJRCB0aGF0IG1hdGNoIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgYXNzb2NpYXRlZAotIHdpdGggdGhpcyBvcGVyYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTZXJ2aWNlUG9saWN5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlcnZpY2VQb2xpY3k8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+IDxCPmdldFNlcnZpY2VQb2xpY3k8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgc2VydmljZSBwb2xpY3kgZm9yIHRoaXMgb3BlcmF0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3RhdGVJdGVtKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U3RhdGVJdGVtPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldFN0YXRlSXRlbTwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3Q8L0NPREU+IC0gdGhlIHByb2plY3QgaWYgdGhpcyBpcyBwcm9qZWN0IHByb3BlcnR5IHBhZ2UgaXRlbS4KLSBGb3IgdGhlIHByZWZlcmVuY2UgcGFnZSBjb250ZXh0IG51bGwgc2hvdWxkIGJlIHNwZWNpZmllZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgY3VycmVudCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFN0YXRlSXRlbShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFN0YXRlSXRlbTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRTdGF0ZUl0ZW08L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCwKLSAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtzdGF0ZUl0ZW0pPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgY3VycmVudCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdDwvQ09ERT4gLSB0aGUgcHJvamVjdCBpZiB0aGlzIGlzIHByb2plY3QgcHJvcGVydHkgcGFnZSBpdGVtLgotIEZvciB0aGUgcHJlZmVyZW5jZSBwYWdlIGNvbnRleHQgbnVsbCBzaG91bGQgYmUgc3BlY2lmaWVkLjxERD48Q09ERT5zdGF0ZUl0ZW08L0NPREU+IC0gdGhlIGl0ZW0uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1VzZURlZmF1bHREYXRhKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVXNlRGVmYXVsdERhdGE8L0gzPgotPFBSRT4KLWJvb2xlYW4gPEI+aXNVc2VEZWZhdWx0RGF0YTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiB1c2VzIGRlZmF1bHQgc3RhdGUgb3Igbm90LgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiB1c2VzIGRlZmF1bHQgc3RhdGUgb3Igbm90LjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YWUwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlRdWlja0ZpeEFjdGlvbgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb24gaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJUXVpY2tGaXhBY3Rpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUXVpY2tGaXhBY3Rpb24uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklRdWlja0ZpeEFjdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElRdWlja0ZpeEFjdGlvbjwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPklRdWlja0ZpeEFjdGlvbjwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBleHRlbmRlcnMgdG8gYWRkIHF1aWNrIGZpeGVzIHRvIHRoZSBzZXJ2aWNlIHBvbGljeSB1aQotIGZyYW1ld29yay4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sI2FjdGlvbihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3kpIj5hY3Rpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGlzIGFjdGlvbiB0byByZXNvbHZlCi0gYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5IHByb2JsZW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJhY3Rpb24ob3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5KSI+PCEtLSAtLT48L0E+PEgzPgotYWN0aW9uPC9IMz4KLTxQUkU+Ci12b2lkIDxCPmFjdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3kpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoaXMgYWN0aW9uIHRvIHJlc29sdmUKLSBhIHBhcnRpY3VsYXIgc2VydmljZSBwb2xpY3kgcHJvYmxlbS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cG9saWN5PC9DT0RFPiAtIFRoZSBwb2xpY3kgdGhhdCB0aGlzIHF1aWNrIGZpeCBhcHBsaWVzIHRvLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUXVpY2tGaXhBY3Rpb24uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklRdWlja0ZpeEFjdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTRjNDE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlRdWlja0ZpeEFjdGlvbkluZm8KLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uSW5mbyBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IklRdWlja0ZpeEFjdGlvbkluZm8iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIElRdWlja0ZpeEFjdGlvbkluZm88L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JUXVpY2tGaXhBY3Rpb25JbmZvPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHN0b3JlIHF1aWNrIGZpeCBhY3Rpb24gaW5mb3JtYXRpb24uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUXVpY2tGaXhBY3Rpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwjZ2V0QWN0aW9uKCkiPmdldEFjdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGFjdGlvbiBmb3IgdGhpcyBxdWljayBmaXguPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SURlc2NyaXB0b3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwjZ2V0RGVzY3JpcHRvcigpIj5nZXREZXNjcmlwdG9yPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGRlc2NyaXB0b3IgZm9yIHRoaXMgcXVpY2sgZml4LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RGVzY3JpcHRvcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZXNjcmlwdG9yPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklEZXNjcmlwdG9yPC9BPiA8Qj5nZXREZXNjcmlwdG9yPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGRlc2NyaXB0b3IgZm9yIHRoaXMgcXVpY2sgZml4LgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBkZXNjcmlwdG9yIGZvciB0aGlzIHF1aWNrIGZpeC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEFjdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBY3Rpb248L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklRdWlja0ZpeEFjdGlvbjwvQT4gPEI+Z2V0QWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgYWN0aW9uIGZvciB0aGlzIHF1aWNrIGZpeC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBhY3Rpb24gZm9yIHRoaXMgcXVpY2sgZml4LjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1MGM5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkgY2xhc3MiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4KLSAgICAgIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9CPiA8REQ+b3JnLmVjbGlwc2UudWkuSVN0YXJ0dXAsIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I8L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0I+PERUPmV4dGVuZHMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjxEVD5pbXBsZW1lbnRzIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwPC9ETD4KLTwvUFJFPgotCi08UD4KLVRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNQTFVHSU5fSUQiPlBMVUdJTl9JRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luPC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+UExVR0lOX1BSRUZFUkVOQ0VfU0NPUEUsIFBSRUZFUkVOQ0VTX0RFRkFVTFRfT1ZFUlJJREVfQkFTRV9OQU1FLCBQUkVGRVJFTkNFU19ERUZBVUxUX09WRVJSSURFX0ZJTEVfTkFNRTwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sI1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSSgpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RydWN0b3I8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sI2Vhcmx5U3RhcnR1cCgpIj5lYXJseVN0YXJ0dXA8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsZWQgYnkgRWNsaXBzZSB3aGVuIGl0IHN0YXJ0cyB1cC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNnZXREZWZhdWx0KCkiPmdldERlZmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNnZXRJbWFnZURlc2NyaXB0b3IoamF2YS5sYW5nLlN0cmluZykiPmdldEltYWdlRGVzY3JpcHRvcjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLSBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sI2xvZ0Vycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpIj5sb2dFcnJvcjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlLAotICAgICAgICAgamF2YS5sYW5nLlRocm93YWJsZSZuYnNwO2V4Yyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0xvZ3MgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBwbHVnaW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KSI+c3RhcnQ8L0E+PC9CPihvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCZuYnNwO2NvbnRleHQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwjc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkiPnN0b3A8L0E+PC9CPihvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCZuYnNwO2NvbnRleHQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5maW5kLCBmaW5kLCBnZXRCdW5kbGUsIGdldERlc2NyaXB0b3IsIGdldExvZywgZ2V0UGx1Z2luUHJlZmVyZW5jZXMsIGdldFN0YXRlTG9jYXRpb24sIGludGVybmFsSW5pdGlhbGl6ZURlZmF1bHRQbHVnaW5QcmVmZXJlbmNlcywgaXNEZWJ1Z2dpbmcsIG9wZW5TdHJlYW0sIG9wZW5TdHJlYW0sIHNhdmVQbHVnaW5QcmVmZXJlbmNlcywgc2V0RGVidWdnaW5nLCBzaHV0ZG93biwgc3RhcnR1cCwgdG9TdHJpbmc8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlBMVUdJTl9JRCI+PCEtLSAtLT48L0E+PEgzPgotUExVR0lOX0lEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+UExVR0lOX0lEPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iU2VydmljZVBvbGljeUFjdGl2YXRvclVJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLVNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdHJ1Y3RvcgotPFA+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InN0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KSI+PCEtLSAtLT48L0E+PEgzPgotc3RhcnQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnN0YXJ0PC9CPihvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCZuYnNwO2NvbnRleHQpCi0gICAgICAgICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnN0YXJ0PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvcjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+c3RhcnQ8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkiPjwhLS0gLS0+PC9BPjxIMz4KLXN0b3A8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnN0b3A8L0I+KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Jm5ic3A7Y29udGV4dCkKLSAgICAgICAgICB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbjwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zdG9wPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvcjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+c3RvcDwvQ09ERT4gaW4gY2xhc3MgPENPREU+b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJbWFnZURlc2NyaXB0b3IoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEltYWdlRGVzY3JpcHRvcjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3IgPEI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotIGFzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5BbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZhdWx0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9BPiA8Qj5nZXREZWZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHNoYXJlZCBpbnN0YW5jZTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibG9nRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWxvZ0Vycm9yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIHZvaWQgPEI+bG9nRXJyb3I8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5UaHJvd2FibGUmbmJzcDtleGMpPC9QUkU+Ci08REw+Ci08REQ+TG9ncyBlcnJvciBtZXNzYWdlIGZvciB0aGlzIHBsdWdpbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWVzc2FnZTwvQ09ERT4gLSA8REQ+PENPREU+ZXhjPC9DT0RFPiAtIDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZWFybHlTdGFydHVwKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWVhcmx5U3RhcnR1cDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+ZWFybHlTdGFydHVwPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q2FsbGVkIGJ5IEVjbGlwc2Ugd2hlbiBpdCBzdGFydHMgdXAuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+ZWFybHlTdGFydHVwPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0MDI4OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotU2VydmljZVBvbGljeVBsYXRmb3JtVUkKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeVBsYXRmb3JtVUkgY2xhc3MiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTwvSDI+Ci08UFJFPgotamF2YS5sYW5nLk9iamVjdAotICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9CPgotPC9QUkU+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgY2xhc3MgPEI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2V0IFNlcnZpY2UgcG9saWN5IFVJIGluZm9ybWF0aW9uLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Jmd0OzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRBbGxPcGVyYXRpb25zKCkiPmdldEFsbE9wZXJhdGlvbnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFsbCB0aGUgb3BlcmF0aW9ucyBmb3IgYWxsIGtub3duIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldEluc3RhbmNlKCkiPmdldEluc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIFVJIG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIGphdmEubGFuZy5TdHJpbmcpIj5nZXRPcGVyYXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSwKLSAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7aWQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIG9wZXJhdGlvbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2VydmljZSBwb2xpY3kKLSBhbmQgaGFzIHRoZSBzcGVjaWZpZWQgaWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwjZ2V0T3BlcmF0aW9ucyhvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIGJvb2xlYW4pIj5nZXRPcGVyYXRpb25zPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mbmJzcDtwb2xpY3ksCi0gICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtpc1dvcmtzcGFjZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgdGhpcyBwb2xpY3kuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0Jmx0O2phdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPiZndDsmZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbnNMaXN0KGphdmEudXRpbC5MaXN0LCBib29sZWFuKSI+Z2V0T3BlcmF0aW9uc0xpc3Q8L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDtwb2xpY2llcywKLSAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtpc1dvcmtzcGFjZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IG9mIGxpc3QgcG9saWN5IG9wZXJhdGlvbnMgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAotIHRoZSBzcGVjaWZpZWQgc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklRdWlja0ZpeEFjdGlvbkluZm88L0E+Jmd0OzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRRdWlja0ZpeGVzKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzKSI+Z2V0UXVpY2tGaXhlczwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzJm5ic3A7c3RhdHVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGxpc3Qgb2YgcXVpY2sgZml4IGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgc3RhdHVzIG9iamVjdC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy5PYmplY3Q8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5lcXVhbHMsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9BPiA8Qj5nZXRJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBVSSBvYmplY3QuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIFVJIG9iamVjdC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEFsbE9wZXJhdGlvbnMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QWxsT3BlcmF0aW9uczwvSDM+Ci08UFJFPgotcHVibGljIGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPiZndDsgPEI+Z2V0QWxsT3BlcmF0aW9uczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYWxsIHRoZSBvcGVyYXRpb25zIGZvciBhbGwga25vd24gcG9saWNpZXMuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBhbGwgdGhlIG9wZXJhdGlvbnMgZm9yIGFsbCBrbm93biBwb2xpY2llcy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9wZXJhdGlvbihvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3ksIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPcGVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT4gPEI+Z2V0T3BlcmF0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7aWQpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBvcGVyYXRpb24gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5Ci0gYW5kIGhhcyB0aGUgc3BlY2lmaWVkIGlkLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wb2xpY3k8L0NPREU+IC0gdGhlIHNlcnZpY2UgcG9saWN5PEREPjxDT0RFPmlkPC9DT0RFPiAtIHRoZSBvcGVyYXRpb24gaWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIG9wZXJhdGlvbiBiZWluZyBzZWFyY2hlZCBmb3Igb3IgbnVsbCBpcyBub3QgZm91bmQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPcGVyYXRpb25zKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE9wZXJhdGlvbnM8L0gzPgotPFBSRT4KLXB1YmxpYyBqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT4mZ3Q7IDxCPmdldE9wZXJhdGlvbnM8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiZuYnNwO2lzV29ya3NwYWNlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgdGhpcyBwb2xpY3kuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBvbGljeTwvQ09ERT4gLSB0aGUgcG9saWN5PEREPjxDT0RFPmlzV29ya3NwYWNlPC9DT0RFPiAtIHRydWUgaWYgdGhpcyBpcyBhIHByZWZlcmVuY2UgcGFnZSBjb250ZXh0Ci08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgdGhpcyBwb2xpY3kuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPcGVyYXRpb25zTGlzdChqYXZhLnV0aWwuTGlzdCwgYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE9wZXJhdGlvbnNMaXN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS51dGlsLkxpc3QmbHQ7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Jmd0OyZndDsgPEI+Z2V0T3BlcmF0aW9uc0xpc3Q8L0I+KGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jmd0OyZuYnNwO3BvbGljaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuJm5ic3A7aXNXb3Jrc3BhY2UpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGxpc3Qgb2YgbGlzdCBwb2xpY3kgb3BlcmF0aW9ucyB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRoCi0gdGhlIHNwZWNpZmllZCBzZXJ2aWNlIHBvbGljaWVzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wb2xpY2llczwvQ09ERT4gLSA8REQ+PENPREU+aXNXb3Jrc3BhY2U8L0NPREU+IC0gCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBsaXN0IHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIG9wZXJhdGlvbnMuICBFYWNoIGxpc3QKLSBhcyB0aGUgdG9wIGxldmVsIGNvbnRhaW5zIGxpc3Qgb2YgSVBvbGljeU9wZXJhdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIAotIHNhbWUgYmFzZSBvcGVyYXRpb24uICBIb3dldmVyLCB0aGV5IHdpbGwgZWFjaCBoYXZlIGRpZmZlcmVudCBhc3NvY2lhdGVkCi0gcG9saWNpZXMuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRRdWlja0ZpeGVzKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UXVpY2tGaXhlczwvSDM+Ci08UFJFPgotcHVibGljIGphdmEudXRpbC5MaXN0Jmx0OzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUXVpY2tGaXhBY3Rpb25JbmZvPC9BPiZndDsgPEI+Z2V0UXVpY2tGaXhlczwvQj4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMmbmJzcDtzdGF0dXMpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGxpc3Qgb2YgcXVpY2sgZml4IGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgc3RhdHVzIG9iamVjdC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3RhdHVzPC9DT0RFPiAtIAotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIGEgbGlzdCBvZiBxdWljayBmaXhlcyBmb3IgdGhpcyBzdGF0dXMgb2JqZWN0LiAgSWYKLSBubyBxdWljayBmaXhlcyBhcmUgYXZhaWxhYmxlIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lFbmFibGVPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lFbmFibGVPcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJhYWViMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9JRW5hYmxlT3BlcmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb24KLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUVuYWJsZU9wZXJhdGlvbiI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklFbmFibGVPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb248L0I+PC9IMj4KLTwvQ0VOVEVSPgotTm8gdXNhZ2Ugb2Ygb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb24KLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklFbmFibGVPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lMYXVuY2hPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lMYXVuY2hPcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiZThhZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9JTGF1bmNoT3BlcmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklMYXVuY2hPcGVyYXRpb24KLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUxhdW5jaE9wZXJhdGlvbiI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklMYXVuY2hPcGVyYXRpb248L0I+PC9IMj4KLTwvQ0VOVEVSPgotTm8gdXNhZ2Ugb2Ygb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklMYXVuY2hPcGVyYXRpb24KLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NmUzNjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1xjbGFzcy11c2VJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBDbGFzczxicj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeU9wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCNnZXRPcGVyYXRpb25LaW5kKCkiPmdldE9wZXJhdGlvbktpbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBraW5kIG9mIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwjdmFsdWVPZihqYXZhLmxhbmcuU3RyaW5nKSI+dmFsdWVPZjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZW51bSBjb25zdGFudCBvZiB0aGlzIHR5cGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwjdmFsdWVzKCkiPnZhbHVlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29uc3RhbnRzIG9mIHRoaXMgZW51bSB0eXBlLCBpbgotdGhlIG9yZGVyIHRoZXkncmUgZGVjbGFyZWQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvXGNsYXNzLXVzZUlQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVBvbGljeU9wZXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVBvbGljeU9wZXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjkxMzk2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lQb2xpY3lPcGVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1xjbGFzcy11c2VJUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUG9saWN5T3BlcmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwjZ2V0T3BlcmF0aW9uKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgamF2YS5sYW5nLlN0cmluZykiPmdldE9wZXJhdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SVNlcnZpY2VQb2xpY3k8L0E+Jm5ic3A7cG9saWN5LAotICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtpZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gb3BlcmF0aW9uIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzZXJ2aWNlIHBvbGljeQotIGFuZCBoYXMgdGhlIHNwZWNpZmllZCBpZC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+IHRoYXQgcmV0dXJuIHR5cGVzIHdpdGggYXJndW1lbnRzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRBbGxPcGVyYXRpb25zKCkiPmdldEFsbE9wZXJhdGlvbnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFsbCB0aGUgb3BlcmF0aW9ucyBmb3IgYWxsIGtub3duIHBvbGljaWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVBvbGljeU9wZXJhdGlvbjwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRPcGVyYXRpb25zKG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeSwgYm9vbGVhbikiPmdldE9wZXJhdGlvbnM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZuYnNwO3BvbGljeSwKLSAgICAgICAgICAgICAgYm9vbGVhbiZuYnNwO2lzV29ya3NwYWNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIGZvciB0aGlzIHBvbGljeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+Jmd0OyZndDs8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtVUkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI2dldE9wZXJhdGlvbnNMaXN0KGphdmEudXRpbC5MaXN0LCBib29sZWFuKSI+Z2V0T3BlcmF0aW9uc0xpc3Q8L0E+PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDtwb2xpY2llcywKLSAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtpc1dvcmtzcGFjZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IG9mIGxpc3QgcG9saWN5IG9wZXJhdGlvbnMgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAotIHRoZSBzcGVjaWZpZWQgc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSVBvbGljeU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL0lRdWlja0ZpeEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVF1aWNrRml4QWN0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNDQ0ZGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVF1aWNrRml4QWN0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb248L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklRdWlja0ZpeEFjdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVF1aWNrRml4QWN0aW9uPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUXVpY2tGaXhBY3Rpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUXVpY2tGaXhBY3Rpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPklRdWlja0ZpeEFjdGlvbkluZm8uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwjZ2V0QWN0aW9uKCkiPmdldEFjdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGFjdGlvbiBmb3IgdGhpcyBxdWljayBmaXguPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDk5NTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbkluZm8iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvXGNsYXNzLXVzZUlRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVF1aWNrRml4QWN0aW9uSW5mbzwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklRdWlja0ZpeEFjdGlvbkluZm88L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+IHRoYXQgcmV0dXJuIHR5cGVzIHdpdGggYXJndW1lbnRzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklRdWlja0ZpeEFjdGlvbkluZm88L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SVF1aWNrRml4QWN0aW9uSW5mbzwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCNnZXRRdWlja0ZpeGVzKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzKSI+Z2V0UXVpY2tGaXhlczwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzJm5ic3A7c3RhdHVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGxpc3Qgb2YgcXVpY2sgZml4IGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgc3RhdHVzIG9iamVjdC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlSVF1aWNrRml4QWN0aW9uSW5mby5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzA5YTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9cY2xhc3MtdXNlU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCNnZXREZWZhdWx0KCkiPmdldERlZmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvXGNsYXNzLXVzZVNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjN2NjYWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1xjbGFzcy11c2VTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwjZ2V0SW5zdGFuY2UoKSI+Z2V0SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gVUkgb2JqZWN0LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1xjbGFzcy11c2VTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2UtZnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1mcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTIwZWZiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1mcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci08Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lVGl0bGVGb250Ij4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+PC9GT05UPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1JbnRlcmZhY2VzPC9GT05UPiZuYnNwOwotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPgotPEJSPgotPEEgSFJFRj0iSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5JRW5hYmxlT3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IklMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SUxhdW5jaE9wZXJhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklQb2xpY3lPcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklRdWlja0ZpeEFjdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJJUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklRdWlja0ZpeEFjdGlvbkluZm88L0k+PC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1DbGFzc2VzPC9GT05UPiZuYnNwOwotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPgotPEJSPgotPEEgSFJFRj0iU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiIHRhcmdldD0iY2xhc3NGcmFtZSI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9BPgotPEJSPgotPEEgSFJFRj0iU2VydmljZVBvbGljeVBsYXRmb3JtVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotRW51bXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCIgdGl0bGU9ImVudW0gaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzFiMWI1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08SDI+Ci1QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aQotPC9IMj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5JbnRlcmZhY2UgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+SUVuYWJsZU9wZXJhdGlvbjwvQT48L0I+PC9URD4KLTxURD5UaGlzIGludGVyZmFjZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVuYWJsZWRDbGFzcyBhdHRyaWJ1dGUgb2YgdGhlCi0gZW5hYmxlZCBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklMYXVuY2hPcGVyYXRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBsYXVuY2hDbGFzcyBhdHRyaWJ1dGUgb2YKLSB0aGUgY29tcGxleCBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiB0aGF0IGhhcyBiZWVuIGRlZmluZWQKLSBpbiB0aGUgcGx1Z2luLnhtbCBtZXRhIGRhdGEuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUXVpY2tGaXhBY3Rpb248L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBleHRlbmRlcnMgdG8gYWRkIHF1aWNrIGZpeGVzIHRvIHRoZSBzZXJ2aWNlIHBvbGljeSB1aQotIGZyYW1ld29yay48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5JUXVpY2tGaXhBY3Rpb25JbmZvPC9BPjwvQj48L1REPgotPFREPlRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gc3RvcmUgcXVpY2sgZml4IGFjdGlvbiBpbmZvcm1hdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTwvQT48L0I+PC9URD4KLTxURD5UaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTwvQT48L0I+PC9URD4KLTxURD5UaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2V0IFNlcnZpY2UgcG9saWN5IFVJIGluZm9ybWF0aW9uLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5FbnVtIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQT48L0I+PC9URD4KLTxURD5JbmRpY2F0ZXMgdGhlIGtpbmQgb2YgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHRoYXQgdGhpcyBvYmplY3QgcmVwcmVzZW50cy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci08REw+Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2UtdHJlZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQyM2E2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS10cmVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIENsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSBDbGFzcyBIaWVyYXJjaHkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkKLTwvSDI+Ci08L0NFTlRFUj4KLTxETD4KLTxEVD48Qj5QYWNrYWdlIEhpZXJhcmNoaWVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctdHJlZS5odG1sIj5BbGwgUGFja2FnZXM8L0E+PC9ETD4KLTxIUj4KLTxIMj4KLUNsYXNzIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmEubGFuZy5PYmplY3Q8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luIChpbXBsZW1lbnRzIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3IpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCkKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJPC9CPjwvQT48L1VMPgotPC9VTD4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklFbmFibGVPcGVyYXRpb248L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SUxhdW5jaE9wZXJhdGlvbjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUG9saWN5T3BlcmF0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SVF1aWNrRml4QWN0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklRdWlja0ZpeEFjdGlvbkluZm88L0I+PC9BPjwvVUw+Ci08SDI+Ci1FbnVtIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmEubGFuZy5PYmplY3Q8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZhLmxhbmcuRW51bSZsdDtFJmd0OyAoaW1wbGVtZW50cyBqYXZhLmxhbmcuQ29tcGFyYWJsZSZsdDtUJmd0OywgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5odG1sIiB0aXRsZT0iZW51bSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQj48L0E+PC9VTD4KLTwvVUw+Ci08L1VMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5QUkVWPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+TkVYVDwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS11c2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS11c2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmMDk5OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2UtdXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIFBhY2thZ2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+IHVzZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9JUG9saWN5T3BlcmF0aW9uLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUG9saWN5T3BlcmF0aW9uPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gdGhhdCBoYXMgYmVlbiBkZWZpbmVkCi0gaW4gdGhlIHBsdWdpbi54bWwgbWV0YSBkYXRhLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgdGhlIGtpbmQgb2YgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHRoYXQgdGhpcyBvYmplY3QgcmVwcmVzZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVF1aWNrRml4QWN0aW9uLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUXVpY2tGaXhBY3Rpb248L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBleHRlbmRlcnMgdG8gYWRkIHF1aWNrIGZpeGVzIHRvIHRoZSBzZXJ2aWNlIHBvbGljeSB1aQotIGZyYW1ld29yay48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9jbGFzcy11c2UvSVF1aWNrRml4QWN0aW9uSW5mby5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SVF1aWNrRml4QWN0aW9uSW5mbzwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHN0b3JlIHF1aWNrIGZpeCBhY3Rpb24gaW5mb3JtYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvY2xhc3MtdXNlL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL2NsYXNzLXVzZS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sI29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+U2VydmljZVBvbGljeVBsYXRmb3JtVUk8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBjbGFzcyBpcyB1c2VkIHRvIGdldCBTZXJ2aWNlIHBvbGljeSBVSSBpbmZvcm1hdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTM3NjY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUFjdGl2aXR5VXRpbHMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuQWN0aXZpdHlVdGlscyBjbGFzcyI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iQWN0aXZpdHlVdGlscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0FjdGl2aXR5VXRpbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQWN0aXZpdHlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzPC9GT05UPgotPEJSPgotQ2xhc3MgQWN0aXZpdHlVdGlsczwvSDI+Ci08UFJFPgotamF2YS5sYW5nLk9iamVjdAotICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzLkFjdGl2aXR5VXRpbHM8L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5BY3Rpdml0eVV0aWxzPC9CPjxEVD5leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L0RMPgotPC9QUkU+Ci0KLTxQPgotVXNlZCBieSB0aGUgRWNsaXBzZSBhY3Rpdml0aWVzIGZyYW1ld29yay4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCNBY3Rpdml0eVV0aWxzKCkiPkFjdGl2aXR5VXRpbHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JRmlsdGVyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sI2dldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyKCkiPmdldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHNlcnZpY2UgcG9saWN5IGZpbHRlciBiYXNlZCBvbiB0aGUgRWNsaXBzZSBhY3Rpdml0aWVzIHNldHRpbmdzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLk9iamVjdDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmVxdWFscywgZ2V0Q2xhc3MsIGhhc2hDb2RlLCBub3RpZnksIG5vdGlmeUFsbCwgdG9TdHJpbmcsIHdhaXQsIHdhaXQsIHdhaXQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iQWN0aXZpdHlVdGlscygpIj48IS0tIC0tPjwvQT48SDM+Ci1BY3Rpdml0eVV0aWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+QWN0aXZpdHlVdGlsczwvQj4oKTwvUFJFPgotPERMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDdXJyZW50QWN0aXZpdGllc0ZpbHRlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDdXJyZW50QWN0aXZpdGllc0ZpbHRlcjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+SUZpbHRlcjwvQT4gPEI+Z2V0Q3VycmVudEFjdGl2aXRpZXNGaWx0ZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc2VydmljZSBwb2xpY3kgZmlsdGVyIGJhc2VkIG9uIHRoZSBFY2xpcHNlIGFjdGl2aXRpZXMgc2V0dGluZ3MuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyBhIHNlcnZpY2UgcG9saWN5IGZpbHRlciBiYXNlZCBvbiB0aGUgRWNsaXBzZSBhY3Rpdml0aWVzIHNldHRpbmdzLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9BY3Rpdml0eVV0aWxzLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkFjdGl2aXR5VXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MzEwNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TZXJ2aWNlVXRpbHMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuU2VydmljZVV0aWxzIGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTZXJ2aWNlVXRpbHMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TZXJ2aWNlVXRpbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTZXJ2aWNlVXRpbHM8L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPjxCPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5TZXJ2aWNlVXRpbHM8L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5TZXJ2aWNlVXRpbHM8L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGNsYXNzIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kIGZvciBzZXJ2aWNlIHBvbGljaWVzLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwjU2VydmljZVV0aWxzKCkiPlNlcnZpY2VVdGlsczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCNzb3J0TGlzdChqYXZhLnV0aWwuTGlzdCkiPnNvcnRMaXN0PC9BPjwvQj4oamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7Jm5ic3A7dW5zb3J0ZWRMaXN0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U29ydHMgYSBsaXN0IG9mIHNlcnZpY2UgcG9saWNpZXMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJTZXJ2aWNlVXRpbHMoKSI+PCEtLSAtLT48L0E+PEgzPgotU2VydmljZVV0aWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2VydmljZVV0aWxzPC9CPigpPC9QUkU+Ci08REw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InNvcnRMaXN0KGphdmEudXRpbC5MaXN0KSI+PCEtLSAtLT48L0E+PEgzPgotc29ydExpc3Q8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgamF2YS51dGlsLkxpc3QmbHQ7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij5JU2VydmljZVBvbGljeTwvQT4mZ3Q7IDxCPnNvcnRMaXN0PC9CPihqYXZhLnV0aWwuTGlzdCZsdDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklTZXJ2aWNlUG9saWN5PC9BPiZndDsmbmJzcDt1bnNvcnRlZExpc3QpPC9QUkU+Ci08REw+Ci08REQ+U29ydHMgYSBsaXN0IG9mIHNlcnZpY2UgcG9saWNpZXMuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnVuc29ydGVkTGlzdDwvQ09ERT4gLSBhbiB1bnNvcnRlZCBsaXN0Ci08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgYSBsaXN0IG9mIHNvcnRlZCBzZXJ2aWNlIHBvbGljaWVzIGJhc2Ugbm90IHRoZWlyIGxvbmcgbmFtZXMuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NlcnZpY2VVdGlscy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTZXJ2aWNlVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9jbGFzcy11c2UvQWN0aXZpdHlVdGlscy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9jbGFzcy11c2UvQWN0aXZpdHlVdGlscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM2MDM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvY2xhc3MtdXNlL0FjdGl2aXR5VXRpbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5BY3Rpdml0eVV0aWxzCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuQWN0aXZpdHlVdGlscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1xjbGFzcy11c2VBY3Rpdml0eVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQWN0aXZpdHlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIENsYXNzPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5BY3Rpdml0eVV0aWxzPC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5BY3Rpdml0eVV0aWxzCi08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9cY2xhc3MtdXNlQWN0aXZpdHlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkFjdGl2aXR5VXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvY2xhc3MtdXNlL1NlcnZpY2VVdGlscy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9jbGFzcy11c2UvU2VydmljZVV0aWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMGNkMjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9jbGFzcy11c2UvU2VydmljZVV0aWxzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuU2VydmljZVV0aWxzCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuU2VydmljZVV0aWxzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9cY2xhc3MtdXNlU2VydmljZVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzLlNlcnZpY2VVdGlsczwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuU2VydmljZVV0aWxzCi08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1xjbGFzcy11c2VTZXJ2aWNlVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTZXJ2aWNlVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1mcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NDljNGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMgcGFja2FnZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIj4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVUaXRsZUZvbnQiPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQT48L0ZPTlQ+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLUNsYXNzZXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJBY3Rpdml0eVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiIHRhcmdldD0iY2xhc3NGcmFtZSI+QWN0aXZpdHlVdGlsczwvQT4KLTxCUj4KLTxBIEhSRUY9IlNlcnZpY2VVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlNlcnZpY2VVdGlsczwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWFjOGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+TkVYVCBQQUNLQUdFPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxIMj4KLVBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzCi08L0gyPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+QWN0aXZpdHlVdGlsczwvQT48L0I+PC9URD4KLTxURD5Vc2VkIGJ5IHRoZSBFY2xpcHNlIGFjdGl2aXRpZXMgZnJhbWV3b3JrLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj5TZXJ2aWNlVXRpbHM8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBjbGFzcyBjb250YWlucyB1dGlsaXR5IG1ldGhvZCBmb3Igc2VydmljZSBwb2xpY2llcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci08REw+Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+TkVYVCBQQUNLQUdFPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NWFjMjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMgQ2xhc3MgSGllcmFyY2h5Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIENsYXNzIEhpZXJhcmNoeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvcGFja2FnZS10cmVlLmh0bWwiPjxCPlBSRVY8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5ORVhUPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci1IaWVyYXJjaHkgRm9yIFBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzCi08L0gyPgotPC9DRU5URVI+Ci08REw+Ci08RFQ+PEI+UGFja2FnZSBIaWVyYXJjaGllczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+QWxsIFBhY2thZ2VzPC9BPjwvREw+Ci08SFI+Ci08SDI+Ci1DbGFzcyBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZhLmxhbmcuT2JqZWN0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPkFjdGl2aXR5VXRpbHM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMiPjxCPlNlcnZpY2VVdGlsczwvQj48L0E+PC9VTD4KLTwvVUw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2UtdXNlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2UtdXNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5Njc5NmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXVzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIFBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBQYWNrYWdlPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmQ1ODAwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzozOCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVJlZ2lzdHJ5VXRpbHMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuUmVnaXN0cnlVdGlscyBjbGFzcyI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iUmVnaXN0cnlVdGlscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1JlZ2lzdHJ5VXRpbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJSZWdpc3RyeVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBSZWdpc3RyeVV0aWxzPC9IMj4KLTxQUkU+Ci1qYXZhLmxhbmcuT2JqZWN0Ci0gIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuUmVnaXN0cnlVdGlsczwvQj4KLTwvUFJFPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGNsYXNzIDxCPlJlZ2lzdHJ5VXRpbHM8L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGNsYXNzIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSBwbHVnaW4gdG8gdXNlLgotIEl0IGNvbnRhaW5zIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgcGFyc2luZyB0aGUgc2VydmljZSBwb2xpY3kgZXh0ZW5zaW9uIHBvaW50LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sI1JlZ2lzdHJ5VXRpbHMoKSI+UmVnaXN0cnlVdGlsczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sI2dldEF0dHJpYnV0ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0QXR0cmlidXRlPC9BPjwvQj4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCZuYnNwO2VsZW1lbnQsCi0gICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2F0dHJpYnV0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgYSBhdHRyaWJ1dGUgdmFsdWUgd2hlcmUgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2UgaW5zZW5zaXRpdmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCNnZXRBdHRyaWJ1dGVOYW1lKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj5nZXRBdHRyaWJ1dGVOYW1lPC9BPjwvQj4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCZuYnNwO2VsZW1lbnQsCi0gICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDthdHRyaWJ1dGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCB0YWtlcyBpbiBhIGxvd2VyIGNhc2UgYXR0cmlidXRlIG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeS5EZXNjcmlwdG9ySW1wbDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sI2xvYWREZXNjcmlwdG9yKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQpIj5sb2FkRGVzY3JpcHRvcjwvQT48L0I+KG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQmbmJzcDtlbGVtZW50KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TG9hZHMgdGhlIGF0dHJpYnV0ZXMgZm9yIGEgZGVzY3JpcHRvciBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLk9iamVjdDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmVxdWFscywgZ2V0Q2xhc3MsIGhhc2hDb2RlLCBub3RpZnksIG5vdGlmeUFsbCwgdG9TdHJpbmcsIHdhaXQsIHdhaXQsIHdhaXQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iUmVnaXN0cnlVdGlscygpIj48IS0tIC0tPjwvQT48SDM+Ci1SZWdpc3RyeVV0aWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+UmVnaXN0cnlVdGlsczwvQj4oKTwvUFJFPgotPERMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJsb2FkRGVzY3JpcHRvcihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50KSI+PCEtLSAtLT48L0E+PEgzPgotbG9hZERlc2NyaXB0b3I8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5LkRlc2NyaXB0b3JJbXBsIDxCPmxvYWREZXNjcmlwdG9yPC9CPihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50Jm5ic3A7ZWxlbWVudCk8L1BSRT4KLTxETD4KLTxERD5Mb2FkcyB0aGUgYXR0cmlidXRlcyBmb3IgYSBkZXNjcmlwdG9yIGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmVsZW1lbnQ8L0NPREU+IC0gdGhlIGRlc2NyaXB0b3IgZWxlbWVudAotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBkYXRhIGZvciB0aGlzIGVsZW1lbnQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRBdHRyaWJ1dGVOYW1lKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGVOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgPEI+Z2V0QXR0cmlidXRlTmFtZTwvQj4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCZuYnNwO2VsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7YXR0cmlidXRlKTwvUFJFPgotPERMPgotPEREPlRoaXMgbWV0aG9kIHRha2VzIGluIGEgbG93ZXIgY2FzZSBhdHRyaWJ1dGUgbmFtZS4gIEl0IHdpbGwgdGhlbiByZXR1cm4KLSB0aGUgc2FtZSBhdHRyaWJ1dGUgbmFtZSB0aGF0IGluY2x1ZGVzIHBvdGVudGlhbGx5IHVwcGVyY2FzZSBjaGFyYWN0ZXJzLgotIFRoaXMgbWV0aG9kIGFsbG93cyBjbGllbnRzIHRvIHNwZWNpZnkgYXR0cmlidXRlIG5hbWVzIGluIGEgY2FzZSBpbnNlbnNpdGl2ZQotIGZhc2hpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmVsZW1lbnQ8L0NPREU+IC0gdGhlIGVsZW1lbnQ8REQ+PENPREU+YXR0cmlidXRlPC9DT0RFPiAtIHRoZSBhdHRyaWJ1dGUKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgbG93ZXJjYXNlIGF0dHJpYnV0ZSBuYW1lLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRBdHRyaWJ1dGU8L0I+KG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQmbmJzcDtlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7YXR0cmlidXRlKTwvUFJFPgotPERMPgotPEREPkdldHMgYSBhdHRyaWJ1dGUgdmFsdWUgd2hlcmUgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2UgaW5zZW5zaXRpdmUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmVsZW1lbnQ8L0NPREU+IC0gdGhlIGVsZW1lbnQuPEREPjxDT0RFPmF0dHJpYnV0ZTwvQ09ERT4gLSB0aGUgYXR0cmlidXRlIHRvIGdldC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIGZvciB0aGlzIGF0dHJpYnV0ZSBvciBudWxsIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvUmVnaXN0cnlVdGlscy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlJlZ2lzdHJ5VXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9jbGFzcy11c2UvUmVnaXN0cnlVdGlscy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9jbGFzcy11c2UvUmVnaXN0cnlVdGlscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzVkNTRkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvY2xhc3MtdXNlL1JlZ2lzdHJ5VXRpbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6NDAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscy5SZWdpc3RyeVV0aWxzCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuUmVnaXN0cnlVdGlscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscyI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1xjbGFzcy11c2VSZWdpc3RyeVV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUmVnaXN0cnlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIENsYXNzPGJyPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscy5SZWdpc3RyeVV0aWxzPC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscy5SZWdpc3RyeVV0aWxzCi08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9cY2xhc3MtdXNlUmVnaXN0cnlVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlJlZ2lzdHJ5VXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS1mcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNTZlN2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMgcGFja2FnZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIj4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVUaXRsZUZvbnQiPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlsczwvQT48L0ZPTlQ+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLUNsYXNzZXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJSZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiIHRhcmdldD0iY2xhc3NGcmFtZSI+UmVnaXN0cnlVdGlsczwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTRhNmM3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjM5IEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgUEFDS0FHRTwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEgyPgotUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMKLTwvSDI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzIj5SZWdpc3RyeVV0aWxzPC9BPjwvQj48L1REPgotPFREPlRoaXMgY2xhc3MgaXMgb25seSBpbnRlbmRlZCBmb3Igb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIHBsdWdpbiB0byB1c2UuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci0KLTxQPgotPERMPgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIFBBQ0tBR0U8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YWRkODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMgQ2xhc3MgSGllcmFyY2h5Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzIENsYXNzIEhpZXJhcmNoeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwiPjxCPlBSRVY8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMKLTwvSDI+Ci08L0NFTlRFUj4KLTxETD4KLTxEVD48Qj5QYWNrYWdlIEhpZXJhcmNoaWVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctdHJlZS5odG1sIj5BbGwgUGFja2FnZXM8L0E+PC9ETD4KLTxIUj4KLTxIMj4KLUNsYXNzIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmEubGFuZy5PYmplY3Q8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscyI+PEI+UmVnaXN0cnlVdGlsczwvQj48L0E+PC9VTD4KLTwvVUw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS11c2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS11c2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5MDczNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2UtdXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIFBhY2thZ2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzPC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vdmVydmlldy1mcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL292ZXJ2aWV3LWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2RlMWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL292ZXJ2aWV3LWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIEZyaSBNYXkgMTYgMTc6MDc6MzkgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1PdmVydmlldwotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Ik92ZXJ2aWV3LCBXZWIgVG9vbHMgUGxhdGZvcm06IFdlYiBzZXJ2aWNlcyBBUEkgZG9jdW1lbnRhdGlvbiI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIj4KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEggQUxJR049ImxlZnQiIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lVGl0bGVGb250Ij4KLTxCPjwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9ImFsbGNsYXNzZXMtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPkFsbCBDbGFzc2VzPC9BPjwvRk9OVD4KLTxQPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLVBhY2thZ2VzPC9GT05UPgotPEJSPgotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLWZyYW1lLmh0bWwiIHRhcmdldD0icGFja2FnZUZyYW1lIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9GT05UPgotPEJSPgotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvcGFja2FnZS1mcmFtZS5odG1sIiB0YXJnZXQ9InBhY2thZ2VGcmFtZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2UtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2UtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL3BhY2thZ2UtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlsczwvQT48L0ZPTlQ+Ci08QlI+Ci08L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotJm5ic3A7Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3ZlcnZpZXctc3VtbWFyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL292ZXJ2aWV3LXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmNGM5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3ZlcnZpZXctc3VtbWFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gRnJpIE1heSAxNiAxNzowNzo0MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU92ZXJ2aWV3Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iT3ZlcnZpZXcsIFdlYiBUb29scyBQbGF0Zm9ybTogV2ViIHNlcnZpY2VzIEFQSSBkb2N1bWVudGF0aW9uIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJPdmVydmlldyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sP292ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMT4KLVdlYiBUb29scyBQbGF0Zm9ybTogV2ViIHNlcnZpY2VzIEFQSSBkb2N1bWVudGF0aW9uCi08L0gxPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+UGFja2FnZXM8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjIwJSI+PEI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L0E+PC9CPjwvVEQ+Ci08VEQ+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMjAlIj48Qj48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzPC9BPjwvQj48L1REPgotPFREPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjIwJSI+PEI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L0E+PC9CPjwvVEQ+Ci08VEQ+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMjAlIj48Qj48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczwvQT48L0I+PC9URD4KLTxURD4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIyMCUiPjxCPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzPC9BPjwvQj48L1REPgotPFREPiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0mbmJzcDs8SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/b3ZlcnZpZXctc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vdmVydmlldy10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvb3ZlcnZpZXctdHJlZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwMzFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9vdmVydmlldy10cmVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBGcmkgTWF5IDE2IDE3OjA3OjQwIEVEVCAyMDA4IC0tPgotPFRJVExFPgotQ2xhc3MgSGllcmFyY2h5Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iQ2xhc3MgSGllcmFyY2h5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/b3ZlcnZpZXctdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotSGllcmFyY2h5IEZvciBBbGwgUGFja2FnZXM8L0gyPgotPC9DRU5URVI+Ci08REw+Ci08RFQ+PEI+UGFja2FnZSBIaWVyYXJjaGllczo8L0I+PEREPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9wYWNrYWdlLXRyZWUuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9BPiwgPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9wYWNrYWdlLXRyZWUuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczwvQT4sIDxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9wYWNrYWdlLXRyZWUuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpPC9BPiwgPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL3BhY2thZ2UtdHJlZS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM8L0E+LCA8QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvcGFja2FnZS10cmVlLmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlsczwvQT48L0RMPgotPEhSPgotPEgyPgotQ2xhc3MgSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YS5sYW5nLk9iamVjdDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzIj48Qj5BY3Rpdml0eVV0aWxzPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luIChpbXBsZW1lbnRzIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3IpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+U2VydmljZVBvbGljeUFjdGl2YXRvcjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+U2VydmljZVBvbGljeUFjdGl2YXRvclVJPC9CPjwvQT4gKGltcGxlbWVudHMgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXApCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlBvbGljeVJlbGF0aW9uc2hpcEltcGw8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPklQb2xpY3lSZWxhdGlvbnNoaXA8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMiPjxCPlJlZ2lzdHJ5VXRpbHM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscyI+PEI+U2VydmljZVV0aWxzPC9CPjwvQT48L1VMPgotPC9VTD4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JRGVzY3JpcHRvcjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JRW5hYmxlT3BlcmF0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklGaWx0ZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SUxhdW5jaE9wZXJhdGlvbjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeUVudW1lcmF0aW9uTGlzdDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUG9saWN5T3BlcmF0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeVJlbGF0aW9uc2hpcDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklQb2xpY3lTdGF0ZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycyI+PEI+SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI+PEI+SVBvbGljeVN0YXRlRW51bTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiPjxCPklRdWlja0ZpeEFjdGlvbjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIj48Qj5JUXVpY2tGaXhBY3Rpb25JbmZvPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ij48Qj5JU2VydmljZVBvbGljeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiPjxCPklTdGF0ZUVudW1lcmF0aW9uSXRlbTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMiPjxCPklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjwvQj48L0E+PC9VTD4KLTxIMj4KLUVudW0gSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YS5sYW5nLk9iamVjdDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmEubGFuZy5FbnVtJmx0O0UmZ3Q7IChpbXBsZW1lbnRzIGphdmEubGFuZy5Db21wYXJhYmxlJmx0O1QmZ3Q7LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmh0bWwiIHRpdGxlPSJlbnVtIGluIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI+PEI+SVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kPC9CPjwvQT48L1VMPgotPC9VTD4KLTwvVUw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/b3ZlcnZpZXctdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9wYWNrYWdlLWxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvcGFja2FnZS1saXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Q0NDBhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9wYWNrYWdlLWxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeQ0KLW9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMNCi1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkNCi1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMNCi1vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMNCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvcmVzb3VyY2VzL2luaGVyaXQuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL3Jlc291cmNlcy9pbmhlcml0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxNDg2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3JlZmVyZW5jZS9hcGkvcmVzb3VyY2VzL2luaGVyaXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL3N0eWxlc2hlZXQuY3NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvYXBpL3N0eWxlc2hlZXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGMzNzM3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2FwaS9zdHlsZXNoZWV0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qIEphdmFkb2Mgc3R5bGUgc2hlZXQgKi8NCi0NCi0vKiBEZWZpbmUgY29sb3JzLCBmb250cyBhbmQgb3RoZXIgc3R5bGUgYXR0cmlidXRlcyBoZXJlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyAqLw0KLQ0KLS8qIFBhZ2UgYmFja2dyb3VuZCBjb2xvciAqLw0KLWJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGIH0NCi0NCi0vKiBIZWFkaW5ncyAqLw0KLWgxIHsgZm9udC1zaXplOiAxNDUlIH0NCi0NCi0vKiBUYWJsZSBjb2xvcnMgKi8NCi0uVGFibGVIZWFkaW5nQ29sb3IgICAgIHsgYmFja2dyb3VuZDogI0NDQ0NGRiB9IC8qIERhcmsgbWF1dmUgKi8NCi0uVGFibGVTdWJIZWFkaW5nQ29sb3IgIHsgYmFja2dyb3VuZDogI0VFRUVGRiB9IC8qIExpZ2h0IG1hdXZlICovDQotLlRhYmxlUm93Q29sb3IgICAgICAgICB7IGJhY2tncm91bmQ6ICNGRkZGRkYgfSAvKiBXaGl0ZSAqLw0KLQ0KLS8qIEZvbnQgdXNlZCBpbiBsZWZ0LWhhbmQgZnJhbWUgbGlzdHMgKi8NCi0uRnJhbWVUaXRsZUZvbnQgICB7IGZvbnQtc2l6ZTogMTAwJTsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYgfQ0KLS5GcmFtZUhlYWRpbmdGb250IHsgZm9udC1zaXplOiAgOTAlOyBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiB9DQotLkZyYW1lSXRlbUZvbnQgICAgeyBmb250LXNpemU6ICA5MCU7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIH0NCi0NCi0vKiBOYXZpZ2F0aW9uIGJhciBmb250cyBhbmQgY29sb3JzICovDQotLk5hdkJhckNlbGwxICAgIHsgYmFja2dyb3VuZC1jb2xvcjojRUVFRUZGO30gLyogTGlnaHQgbWF1dmUgKi8NCi0uTmF2QmFyQ2VsbDFSZXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwOEI7fSAvKiBEYXJrIEJsdWUgKi8NCi0uTmF2QmFyRm9udDEgICAgeyBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgY29sb3I6IzAwMDAwMDt9DQotLk5hdkJhckZvbnQxUmV2IHsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNvbG9yOiNGRkZGRkY7fQ0KLQ0KLS5OYXZCYXJDZWxsMiAgICB7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7fQ0KLS5OYXZCYXJDZWxsMyAgICB7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7fQ0KLQ0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2V4dC9pbmRleC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvZXh0L2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Njc1NjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvZXh0L2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotICAgIAk8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRSQU5TSVRJT05BTC8vRU4iPgotCQk8aHRtbCB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPgotPGhlYWQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0JCTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBUaGlzIHBhZ2UgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgbGljZW5zZS4gRm9yIGZ1bGwgZGV0YWlscyBzZWUgdGhlIExFR0FMIGluIHRoZSBkb2N1bWVudGF0aW9uIGJvb2sgdGhhdCBjb250YWlucyB0aGlzIHBhZ2UuIiA+Ci0KLSAgIAkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0gICAJCTx0aXRsZT5XZWJTZXJ2aWNlcyBFeHRlbnNpb24gUG9pbnRzPC90aXRsZT4KLQkJPExJTksgUkVMPSJTVFlMRVNIRUVUIiBIUkVGPSIuLi8uLi9ib29rLmNzcyIgQ0hBUlNFVD0iSVNPLTg4NTktMSIgVFlQRT0idGV4dC9jc3MiPgotCQk8L2hlYWQ+Ci08Ym9keSBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzgwMDA4MCI+Ci08Y2VudGVyPgotPGgxPldlYlNlcnZpY2VzIEV4dGVuc2lvbiBQb2ludHMgPC9oMT4KLTwvY2VudGVyPlRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50cyBjYW4gYmUgdXNlZCB0byBleHRlbmQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgV1NUIFdlYiBzZXJ2aWNlcyBpbmZyYXN0cnVjdHVyZTogPGgzPgotPGEgbmFtZT0id2Vic2VydmljZSI+PC9hPldlYiBzZXJ2aWNlIEFQSTwvaDM+Ci08dWw+Ci08bGk+Ci08YSBocmVmPSJvcmdfZWNsaXBzZV93c3Rfd3Nfc2VydmljZV9wb2xpY3lfc2VydmljZXBvbGljeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuc2VydmljZXBvbGljeTwvYT4KLTwvbGk+Ci08bGk+Ci08YSBocmVmPSJvcmdfZWNsaXBzZV93c3Rfd3Nfc2VydmljZV9wb2xpY3lfdWlfc2VydmljZXBvbGljeXVpLmh0bWwiPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9saWN5dWk8L2E+Ci08L2xpPgotPC91bD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2V4dC9vcmdfZWNsaXBzZV93c3Rfd3Nfc2VydmljZV9wb2xpY3lfc2VydmljZXBvbGljeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvZXh0L29yZ19lY2xpcHNlX3dzdF93c19zZXJ2aWNlX3BvbGljeV9zZXJ2aWNlcG9saWN5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZGU1ODIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvZXh0L29yZ19lY2xpcHNlX3dzdF93c19zZXJ2aWNlX3BvbGljeV9zZXJ2aWNlcG9saWN5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotPEhFQUQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+U2VydmljZSBwb2xpY3k8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vYm9vay5jc3MiKTs8L3N0eWxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vc2NoZW1hLmNzcyIpOzwvc3R5bGU+Ci08L0hFQUQ+Ci08Qk9EWT4KLTxIMSBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPlNlcnZpY2UgcG9saWN5PC9IMT4KLTxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPklkZW50aWZpZXI6IDwvaDY+b3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnNlcnZpY2VQb2xpY3k8cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5TaW5jZTogPC9oNj4xLjAKLTxwPjwvcD4KLQotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RGVzY3JpcHRpb246IDwvaDY+VGhpcyBleHRlbnNpb24gYWxsb3dzIGV4dGVuZGVycyB0byBkZWZpbmUgc2VydmljZSBwb2xpY2llcy48cD4KLTxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkNvbmZpZ3VyYXRpb24gTWFya3VwOjwvaDY+Ci08cD48L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmV4dGVuc2lvbiI+ZXh0ZW5zaW9uPC9hPiAoPGEgaHJlZj0iI2Uuc2VydmljZVBvbGljeSI+c2VydmljZVBvbGljeTwvYT4rKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBleHRlbnNpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wb2ludCZuYnNwO0NEQVRBICNSRVFVSVJFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuc2VydmljZVBvbGljeSI+c2VydmljZVBvbGljeTwvYT4gKDxhIGhyZWY9IiNlLnBvbGljeSI+cG9saWN5PC9hPj8gLCA8YSBocmVmPSIjZS5lbnVtZXJhdGlvbiI+ZW51bWVyYXRpb248L2E+PyAsIDxhIGhyZWY9IiNlLmxvYWRMaXN0ZW5lciI+bG9hZExpc3RlbmVyPC9hPj8gLCA8YSBocmVmPSIjZS5lbmFibGVtZW50Ij5lbmFibGVtZW50PC9hPj8pKyZndDs8L3A+Ci08cD48L3A+Ci08YnI+PGJyPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5wb2xpY3kiPnBvbGljeTwvYT4gKDxhIGhyZWY9IiNlLmRlc2NyaXB0b3IiPmRlc2NyaXB0b3I8L2E+ICwgPGEgaHJlZj0iI2UucmVsYXRpb25zaGlwIj5yZWxhdGlvbnNoaXA8L2E+KiAsIDxhIGhyZWY9IiNlLnN0YXRlIj5zdGF0ZTwvYT4qKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBwb2xpY3k8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wYXJlbnRQb2xpY3lJZCZuYnNwO0NEQVRBICNJTVBMSUVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5lbnVtTGlzdElkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5kZWZhdWx0RW51bUlkJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5tdXRhYmxlJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7KHRydWUgfCBmYWxzZSkgImZhbHNlIiZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5wYXJlbnRQb2xpY3lJZDwvYj4gLSBTcGVjaWZpZXMgdGhlIHBhcmVudCBwb2xpY3kgaWQgZm9yIHRoaXMgcG9saWN5LiAgSWYgdGhpcyBpcyBhIHJvb3QgcG9saWN5IHRoaXMgYXR0cmlidXRlIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkLjwvbGk+Ci08bGk+PGI+aWQ8L2I+IC0gVGhlIHVuaXF1ZSBpZCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS48L2xpPgotPGxpPjxiPmVudW1MaXN0SWQ8L2I+IC0gSWYgdGhpcyBwb2xpY3kncyBzdGF0ZSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gZW51bWVyYXRpb24gdGhlbiB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIGlkIG9mIHRoaXMgZW51bWVyYXRpb24uPC9saT4KLTxsaT48Yj5kZWZhdWx0RW51bUlkPC9iPiAtIFRoaXMgYXR0cmlidXRlIHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgZW51bUxpc3RJZCBpcyBhbHNvIHNwZWNpZmllZC4gIEl0IGlzIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZW51bSB2YWx1ZSBkZWZpbmVkIGJ5IHRoZSBlbnVtZXJhdGlvbi48L2xpPgotPGxpPjxiPm11dGFibGU8L2I+IC0gSW5kaWNhdGVzIGlmIHRoaXMgcG9saWN5IGhhcyBtdXRhYmxlIGRhdGEgb3Igbm90LjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZGVzY3JpcHRvciI+ZGVzY3JpcHRvcjwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZGVzY3JpcHRvcjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmRlc2NyaXB0aW9uJm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5zaG9ydE5hbWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmxvbmdOYW1lJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5jb250ZXh0SGVscElkJm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pY29uUGF0aCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEJmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmRlc2NyaXB0aW9uPC9iPiAtIEEgZGVzY3JpcHRpb24gb2YgdGhpcyBzZXJ2aWNlIHBvbGljeS48L2xpPgotPGxpPjxiPnNob3J0TmFtZTwvYj4gLSBUaGUgc2hvcnQgbmFtZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5LiAgTm90ZTogaWYgYSBzaG9ydCBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbG9uZyBuYW1lLjwvbGk+Ci08bGk+PGI+bG9uZ05hbWU8L2I+IC0gVGhlIGxvbmcgbmFtZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5LiAgTm90ZTogaWYgYSBsb25nIG5hbWUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBzaG9ydE5hbWUgdmFsdWUuPC9saT4KLTxsaT48Yj5jb250ZXh0SGVscElkPC9iPiAtIFRoZSBjb250ZXh0IGhlbHAgaWQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kgaWYgaXQgaXMgcmVxdWlyZWQuPC9saT4KLTxsaT48Yj5pY29uUGF0aDwvYj4gLSBBIHBsdWdpbiByZWxhdGl2ZSBwYXRoIHRvIHNvbWUgaWNvbiBmaWxlIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUucmVsYXRpb25zaGlwIj5yZWxhdGlvbnNoaXA8L2E+ICg8YSBocmVmPSIjZS50YXJnZXRQb2xpY3kiPnRhcmdldFBvbGljeTwvYT4rKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCByZWxhdGlvbnNoaXA8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5lbnVtTGlzdCZuYnNwO0NEQVRBICNSRVFVSVJFRCZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotU3BlY2lmaWVzIGEgc3RhdGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBzZXJ2aWNlIHBvbGljeSBhbmQgdGhlIHN0YXRlcyBvZiBvdGhlciBzZXJ2aWNlIHBvbGljaWVzLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmVudW1MaXN0PC9iPiAtIDwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUudGFyZ2V0UG9saWN5Ij50YXJnZXRQb2xpY3k8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIHRhcmdldFBvbGljeTwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aXRlbUxpc3QmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+aWQ8L2I+IC0gPC9saT4KLTxsaT48Yj5pdGVtTGlzdDwvYj4gLSA8L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmVudW1lcmF0aW9uIj5lbnVtZXJhdGlvbjwvYT4gKDxhIGhyZWY9IiNlLml0ZW0iPml0ZW08L2E+KykmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZW51bWVyYXRpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5kZWZhdWx0Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRCZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5kZWZhdWx0PC9iPiAtIDwvbGk+Ci08bGk+PGI+aWQ8L2I+IC0gPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5pdGVtIj5pdGVtPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBpdGVtPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5zaG9ydE5hbWUmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmxvbmdOYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+aWQ8L2I+IC0gPC9saT4KLTxsaT48Yj5zaG9ydE5hbWU8L2I+IC0gPC9saT4KLTxsaT48Yj5sb25nTmFtZTwvYj4gLSA8L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmxvYWRMaXN0ZW5lciI+bG9hZExpc3RlbmVyPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBsb2FkTGlzdGVuZXI8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5jbGFzcyZuYnNwO0NEQVRBICNJTVBMSUVEJmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmNsYXNzPC9iPiAtIEEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIgaW50ZXJmYWNlLiAgVGhlIGxvYWQgbWV0aG9kIG9mIHRoaXMgY2xhc3Mgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgU2VydmljZVBvbGljeSBmcmFtZXdvcmsgaXMgZmlyc3QgbG9hZGVkLjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuc3RhdGUiPnN0YXRlPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBzdGF0ZTwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmtleSZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnZhbHVlJm5ic3A7Q0RBVEEgI1JFUVVJUkVEJmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1UaGlzIGVsZW1lbnQgYWxsb3dzIHRoZSBleHRlbmRlciB0byBkZWZpbmUgc3RhdGUgZGF0YSBmb3IgdGhpcyBwb2xpY3kuPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+a2V5PC9iPiAtIFRoZSBrZXkgZm9yIHRoaXMgc3RhdGUgZGF0YS48L2xpPgotPGxpPjxiPnZhbHVlPC9iPiAtIFRoZSB2YWx1ZSBvZiB0aGlzIHN0YXRlIGRhdGEuPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5lbmFibGVtZW50Ij5lbmFibGVtZW50PC9hPiAoPGEgaHJlZj0iI2Uubm90Ij5ub3Q8L2E+ICwgPGEgaHJlZj0iI2UuYW5kIj5hbmQ8L2E+ICwgPGEgaHJlZj0iI2Uub3IiPm9yPC9hPiAsIDxhIGhyZWY9IiNlLmluc3RhbmNlb2YiPmluc3RhbmNlb2Y8L2E+ICwgPGEgaHJlZj0iI2UudGVzdCI+dGVzdDwvYT4gLCA8YSBocmVmPSIjZS5zeXN0ZW1UZXN0Ij5zeXN0ZW1UZXN0PC9hPiAsIDxhIGhyZWY9IiNlLmVxdWFscyI+ZXF1YWxzPC9hPiAsIDxhIGhyZWY9IiNlLmNvdW50Ij5jb3VudDwvYT4gLCA8YSBocmVmPSIjZS53aXRoIj53aXRoPC9hPiAsIDxhIGhyZWY9IiNlLnJlc29sdmUiPnJlc29sdmU8L2E+ICwgPGEgaHJlZj0iI2UuYWRhcHQiPmFkYXB0PC9hPiAsIDxhIGhyZWY9IiNlLml0ZXJhdGUiPml0ZXJhdGU8L2E+ICwgPGEgaHJlZj0iI2UucmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+KSomZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLUEgZ2VuZXJpYyByb290IGVsZW1lbnQuIFRoZSBlbGVtZW50IGNhbiBiZSB1c2VkIGluc2lkZSBhbiBleHRlbnNpb24gcG9pbnQgdG8gZGVmaW5lIGl0cyBlbmFibGVtZW50IGV4cHJlc3Npb24uCi0gICAgICAgICAgICBUaGUgY2hpbGRyZW4gb2YgYW4gZW5hYmxlbWVudCBleHByZXNzaW9uIGFyZSBjb21iaW5lZCB1c2luZyB0aGUgYW5kIG9wZXJhdG9yLjwvcD4KLTxicj48YnI+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLm5vdCI+bm90PC9hPiAoPGEgaHJlZj0iI2Uubm90Ij5ub3Q8L2E+IHwgPGEgaHJlZj0iI2UuYW5kIj5hbmQ8L2E+IHwgPGEgaHJlZj0iI2Uub3IiPm9yPC9hPiB8IDxhIGhyZWY9IiNlLmluc3RhbmNlb2YiPmluc3RhbmNlb2Y8L2E+IHwgPGEgaHJlZj0iI2UudGVzdCI+dGVzdDwvYT4gfCA8YSBocmVmPSIjZS5zeXN0ZW1UZXN0Ij5zeXN0ZW1UZXN0PC9hPiB8IDxhIGhyZWY9IiNlLmVxdWFscyI+ZXF1YWxzPC9hPiB8IDxhIGhyZWY9IiNlLmNvdW50Ij5jb3VudDwvYT4gfCA8YSBocmVmPSIjZS53aXRoIj53aXRoPC9hPiB8IDxhIGhyZWY9IiNlLnJlc29sdmUiPnJlc29sdmU8L2E+IHwgPGEgaHJlZj0iI2UuYWRhcHQiPmFkYXB0PC9hPiB8IDxhIGhyZWY9IiNlLml0ZXJhdGUiPml0ZXJhdGU8L2E+IHwgPGEgaHJlZj0iI2UucmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+KSZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IHJlcHJlc2VudCBhIE5PVCBvcGVyYXRpb24gb24gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGl0J3Mgc3ViLWVsZW1lbnQgZXhwcmVzc2lvbi48L3A+Ci08YnI+PGJyPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5hbmQiPmFuZDwvYT4gKDxhIGhyZWY9IiNlLm5vdCI+bm90PC9hPiAsIDxhIGhyZWY9IiNlLmFuZCI+YW5kPC9hPiAsIDxhIGhyZWY9IiNlLm9yIj5vcjwvYT4gLCA8YSBocmVmPSIjZS5pbnN0YW5jZW9mIj5pbnN0YW5jZW9mPC9hPiAsIDxhIGhyZWY9IiNlLnRlc3QiPnRlc3Q8L2E+ICwgPGEgaHJlZj0iI2Uuc3lzdGVtVGVzdCI+c3lzdGVtVGVzdDwvYT4gLCA8YSBocmVmPSIjZS5lcXVhbHMiPmVxdWFsczwvYT4gLCA8YSBocmVmPSIjZS5jb3VudCI+Y291bnQ8L2E+ICwgPGEgaHJlZj0iI2Uud2l0aCI+d2l0aDwvYT4gLCA8YSBocmVmPSIjZS5yZXNvbHZlIj5yZXNvbHZlPC9hPiAsIDxhIGhyZWY9IiNlLmFkYXB0Ij5hZGFwdDwvYT4gLCA8YSBocmVmPSIjZS5pdGVyYXRlIj5pdGVyYXRlPC9hPiAsIDxhIGhyZWY9IiNlLnJlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPikqJmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1UaGlzIGVsZW1lbnQgcmVwcmVzZW50IGFuIEFORCBvcGVyYXRpb24gb24gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGFsbCBpdCdzIHN1Yi1lbGVtZW50cyBleHByZXNzaW9ucy48L3A+Ci08YnI+PGJyPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5vciI+b3I8L2E+ICg8YSBocmVmPSIjZS5ub3QiPm5vdDwvYT4gLCA8YSBocmVmPSIjZS5hbmQiPmFuZDwvYT4gLCA8YSBocmVmPSIjZS5vciI+b3I8L2E+ICwgPGEgaHJlZj0iI2UuaW5zdGFuY2VvZiI+aW5zdGFuY2VvZjwvYT4gLCA8YSBocmVmPSIjZS50ZXN0Ij50ZXN0PC9hPiAsIDxhIGhyZWY9IiNlLnN5c3RlbVRlc3QiPnN5c3RlbVRlc3Q8L2E+ICwgPGEgaHJlZj0iI2UuZXF1YWxzIj5lcXVhbHM8L2E+ICwgPGEgaHJlZj0iI2UuY291bnQiPmNvdW50PC9hPiAsIDxhIGhyZWY9IiNlLndpdGgiPndpdGg8L2E+ICwgPGEgaHJlZj0iI2UucmVzb2x2ZSI+cmVzb2x2ZTwvYT4gLCA8YSBocmVmPSIjZS5hZGFwdCI+YWRhcHQ8L2E+ICwgPGEgaHJlZj0iI2UuaXRlcmF0ZSI+aXRlcmF0ZTwvYT4gLCA8YSBocmVmPSIjZS5yZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4pKiZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IHJlcHJlc2VudCBhbiAgT1Igb3BlcmF0aW9uIG9uIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBhbGwgaXQncyBzdWItZWxlbWVudCBleHByZXNzaW9ucy48L3A+Ci08YnI+PGJyPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5pbnN0YW5jZW9mIj5pbnN0YW5jZW9mPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBpbnN0YW5jZW9mPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+dmFsdWUmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZWxlbWVudCBpcyB1c2VkIHRvIHBlcmZvcm0gYW4gaW5zdGFuY2VvZiBjaGVjayBvZiB0aGUgb2JqZWN0IGluIGZvY3VzLiBUaGUgZXhwcmVzc2lvbiByZXR1cm5zCi0gICAgICAgICAgICBFdmFsdWF0aW9uUmVzdWx0LlRSVUUgaWYgdGhlIG9iamVjdCdzIHR5cGUgaXMgYSBzdWIgdHlwZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICAgICAgICAgIE90aGVyd2lzZSBFdmFsdWF0aW9uUmVzdWx0LkZBTFNFIGlzIHJldHVybmVkLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPnZhbHVlPC9iPiAtIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgYSBjbGFzcyBvciBpbnRlcmZhY2UuPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS50ZXN0Ij50ZXN0PC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCB0ZXN0PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cHJvcGVydHkmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5hcmdzJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij52YWx1ZSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Zm9yY2VQbHVnaW5BY3RpdmF0aW9uJm5ic3A7KHRydWUgfCBmYWxzZSkgJmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1UaGlzIGVsZW1lbnQgaXMgdXNlZCB0byBldmFsdWF0ZSB0aGUgcHJvcGVydHkgc3RhdGUgb2YgdGhlIG9iamVjdCBpbiBmb2N1cy4gVGhlIHNldCBvZgotICAgICAgICAgICAgdGVzdGFibGUgcHJvcGVydGllcyBjYW4gYmUgZXh0ZW5kZWQgdXNpbmcgdGhlIHByb3BlcnkgdGVzdGVyIGV4dGVuc2lvbiBwb2ludC4gVGhlIHRlc3QKLSAgICAgICAgICAgIGV4cHJlc3Npb24gcmV0dXJucyBFdmFsdWF0aW9uUmVzdWx0Lk5PVF9MT0FERUQgaWYgdGhlIHByb3BlcnR5IHRlc3RlciBkb2luZyB0aGUgYWN0dWFsCi0gICAgICAgICAgICB0ZXN0aW5nIGlzbid0IGxvYWRlZCB5ZXQgYW5kIHRoZSBhdHRyaWJ1dGUgZm9yY2VQbHVnaW5BY3RpdmF0aW9uIGlzIHNldCB0byBmYWxzZS4gCi0gICAgICAgICAgICBJZiBmb3JjZVBsdWdpbkFjdGl2YXRpb24gaXMgc2V0IHRvIHRydWUgYW5kIHRoZSBldmFsdWF0aW9uIGNvbnRleHQgdXNlZCB0byBldmFsdWF0ZQotICAgICAgICAgICAgdGhpcyBleHByZXNzaW9uIHN1cHBvcnQgcGx1Zy1pbiBhY3RpdmF0aW9uIHRoZW4gZXZhbHVhdGluZyB0aGUgcHJvcGVydHkgd2lsbCByZXN1bHQgaW4gCi0gICAgICAgICAgICBhY3RpdmF0aW5nIHRoZSBwbHVnLWluIGRlZmluaW5nIHRoZSB0ZXN0ZXIuPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+cHJvcGVydHk8L2I+IC0gdGhlIG5hbWUgb2YgYW4gb2JqZWN0J3MgcHJvcGVydHkgdG8gdGVzdC48L2xpPgotPGxpPjxiPmFyZ3M8L2I+IC0gYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBwcm9wZXJ0eSB0ZXN0ZXIuIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgc2VwZXJhdGVkCi0gICAgICAgICAgICAgICAgICBieSBjb21tYXMuIEVhY2ggaW5kaXZpZHVhbCBhcmd1bWVudCBpcyBjb252ZXJ0ZWQgaW50byBhIEphdmEgYmFzZSB0eXBlIHVzaW5nIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICBydWxlcyBhcyBkZWZpbmVkIGZvciB0aGUgdmFsdWUgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IGV4cHJlc3Npb24uPC9saT4KLTxsaT48Yj52YWx1ZTwvYj4gLSB0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiBDYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvcGVydHkgCi0gICAgICAgICAgICAgICAgICBpcyBhIGJvb2xlYW4gcHJvcGVydHkuIFRoZSB0ZXN0IGV4cHJlc3Npb24gaXMgc3VwcG9zZWQgdG8gcmV0dXJuIAotRXZhbHVhdGlvblJlc3VsdC5UUlVFIGlmIHRoZSBwcm9wZXJ0eSBtYXRjaGVzIHRoZSB2YWx1ZSBhbmQgRXZhbHVhdGlvblJlc3VsdC5GQUxTRQotb3RoZXJ3aXNlLiBUaGUgdmFsdWUgYXR0cmlidXRlIGlzIGNvbnZlcnRlZCBpbnRvIGEgSmF2YSBiYXNlIHR5cGUgdXNpbmcgdGhlIGZvbGxvd2luZwotcnVsZXM6Ci08dWw+Ci0gPGxpPnRoZSBzdHJpbmcgJnF1b3Q7dHJ1ZSZxdW90OyBpcyBjb252ZXJ0ZWQgaW50byBCb29sZWFuLlRSVUU8L2xpPgotIDxsaT50aGUgc3RyaW5nICZxdW90O2ZhbHNlJnF1b3Q7IGlzIGNvbnZlcnRlZCBpbnRvIEJvb2xlYW4uRkFMU0U8L2xpPgotIDxsaT5pZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgZG90IHRoZW4gdGhlIGludGVycHJldGVyIHRyaWVzIHRvIGNvbnZlcnQKLSB0aGUgdmFsdWUgaW50byBhIEZsb2F0IG9iamVjdC4gSWYgdGhpcyBmYWlscyB0aGUgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgYQotIGphdmEubGFuZy5TdHJpbmc8L2xpPgotIDxsaT5pZiB0aGUgc3RyaW5nIG9ubHkgY29uc2lzdHMgb2YgbnVtYmVycyB0aGVuIHRoZSBpbnRlcnByZXRlcgotIGNvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhbiBJbnRlZ2VyIG9iamVjdC48L2xpPgotIDxsaT5pbiBhbGwgb3RoZXIgY2FzZXMgdGhlIHN0cmluZyBpcyB0cmVhdGVkIGFzIGEgamF2YS5sYW5nLlN0cmluZzwvbGk+Ci0gPGxpPnRoZSBjb252ZXJzaW9uIG9mIHRoZSBzdHJpbmcgaW50byBhIEJvb2xlYW4sIEZsb2F0LCBvciBJbnRlZ2VyIGNhbgotIGJlIHN1cHByZXNzZWQgYnkgc3Vycm91bmRpbmcgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuIEZvcgotIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgdmFsdWU9JnF1b3Q7J3RydWUnJnF1b3Q7IGlzIGNvbnZlcnRlZCBpbnRvIHRoZQotIHN0cmluZyAmcXVvdDt0cnVlJnF1b3Q7PC9saT4KLTwvdWw+PC9saT4KLTxsaT48Yj5mb3JjZVBsdWdpbkFjdGl2YXRpb248L2I+IC0gYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgcGx1Zy1pbiBjb250cmlidXRpbmcgdGhlIHByb3BlcnR5IHRlc3RlcgotICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGxvYWRlZCBpZiBuZWNlc3NhcnkuIEFzIHN1Y2gsIHRoaXMgZmxhZyBzaG91bGQgYmUgdXNlZCBqdWRpY2lvdXNseSwgCi0gICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwbHVnLWluIGFjdGl2YXRpb25zLiBNb3N0IGNsaWVudHMgc2hvdWxkIGF2b2lkCi0gICAgICAgICAgICAgICAgICBzZXR0aW5nIHRoaXMgZmxhZyB0byB0cnVlLiBUaGlzIGZsYWcgaXMgb25seSBob25vcmVkIGlmIHRoZSBldmFsdWF0aW9uIGNvbnRleHQKLSAgICAgICAgICAgICAgICAgIHVzZWQgdG8gZXZhbHVhdGUgdGhpcyBleHByZXNzaW9uIGFsbG93cyBwbHVnLWluIGFjdGl2YXRpb24uIE90aGVyd2lzZSB0aGUgZmxhZwotICAgICAgICAgICAgICAgICAgaXMgaWdub3JlZCBhbmQgbm8gcGx1Zy1pbiBsb2FkaW5nIHRha2VzIHBsYWNlLjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuc3lzdGVtVGVzdCI+c3lzdGVtVGVzdDwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1Qgc3lzdGVtVGVzdDwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnByb3BlcnR5Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+dmFsdWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRlc3RzIGEgc3lzdGVtIHByb3BlcnR5IGJ5IGNhbGxpbmcgdGhlIFN5c3RlbS5nZXRQcm9wZXJ0eSBtZXRob2QgYW5kIGNvbXBhcmVzIHRoZSByZXN1bHQKLSAgICAgICAgICAgIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHRoZSB2YWx1ZSBhdHRyaWJ1dGUuPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+cHJvcGVydHk8L2I+IC0gdGhlIG5hbWUgb2YgYW4gc3lzdGVtIHByb3BlcnR5IHRvIHRlc3QuPC9saT4KLTxsaT48Yj52YWx1ZTwvYj4gLSB0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBzdHJpbmcgdmFsdWUuPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5lcXVhbHMiPmVxdWFsczwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZXF1YWxzPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+dmFsdWUmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZWxlbWVudCBpcyB1c2VkIHRvIHBlcmZvcm0gYW4gZXF1YWxzIGNoZWNrIG9mIHRoZSBvYmplY3QgaW4gZm9jdXMuIFRoZSBleHByZXNzaW9uIHJldHVybnMKLSAgICAgICAgICAgIEV2YWx1YXRpb25SZXN1bHQuVFJVRSBpZiB0aGUgb2JqZWN0IGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYXR0cmlidXRlIHZhbHVlLiBPdGhlcndpc2UKLSAgICAgICAgICAgIEV2YWx1YXRpb25SZXN1bHQuRkFMU0UgaXMgcmV0dXJuZWQuPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+dmFsdWU8L2I+IC0gdGhlIGV4cGVjdGVkIHZhbHVlLiBUaGUgdmFsdWUgcHJvdmlkZWQgYXMgYSBzdHJpbmcgaXMgY29udmVydGVkIGludG8KLSAgICAgICAgICAgICAgICAgIGEgSmF2YSBiYXNlIHR5cGUgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgZm9yIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgb2YgdGhlIHRlc3QgZXhwcmVzc2lvbi48L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmNvdW50Ij5jb3VudDwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgY291bnQ8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij52YWx1ZSZuYnNwO0NEQVRBICNSRVFVSVJFRCZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IGlzIHVzZWQgdG8gdGVzdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY29sbGVjdGlvbi48L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj52YWx1ZTwvYj4gLSBhbiBleHByZXNzaW9uIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGxpc3QuIEZvbGxvd2luZyB3aWxkY2FyZAotICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBjYW4gYmUgdXNlZDoKLSAgICAgICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICAgICAgPGR0Pio8L2R0PiA8ZGQ+YW55IG51bWJlciBvZiBlbGVtZW50czwvZGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxkdD4/PC9kdD4gPGRkPm5vIGVsZW1lbnRzIG9yIG9uZSBlbGVtZW50PC9kZD4KLSAgICAgICAgICAgICAgICAgICAgPGR0Pis8L2R0PiA8ZGQ+b25lIG9yIG1vcmUgZWxlbWVudHM8L2RkPgotICAgICAgICAgICAgICAgICAgICA8ZHQ+ITwvZHQ+IDxkZD5ubyBlbGVtZW50czwvZGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxkdD5pbnRlZ2VyIHZhbHVlPC9kdD4gPGRkPnRoZSBsaXN0IG11c3QgY29udGFpbiB0aGUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzPC9kZD4KLSAgICAgICAgICAgICAgICAgIDwvZGw+PC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS53aXRoIj53aXRoPC9hPiAoPGEgaHJlZj0iI2Uubm90Ij5ub3Q8L2E+ICwgPGEgaHJlZj0iI2UuYW5kIj5hbmQ8L2E+ICwgPGEgaHJlZj0iI2Uub3IiPm9yPC9hPiAsIDxhIGhyZWY9IiNlLmluc3RhbmNlb2YiPmluc3RhbmNlb2Y8L2E+ICwgPGEgaHJlZj0iI2UudGVzdCI+dGVzdDwvYT4gLCA8YSBocmVmPSIjZS5zeXN0ZW1UZXN0Ij5zeXN0ZW1UZXN0PC9hPiAsIDxhIGhyZWY9IiNlLmVxdWFscyI+ZXF1YWxzPC9hPiAsIDxhIGhyZWY9IiNlLmNvdW50Ij5jb3VudDwvYT4gLCA8YSBocmVmPSIjZS53aXRoIj53aXRoPC9hPiAsIDxhIGhyZWY9IiNlLnJlc29sdmUiPnJlc29sdmU8L2E+ICwgPGEgaHJlZj0iI2UuYWRhcHQiPmFkYXB0PC9hPiAsIDxhIGhyZWY9IiNlLml0ZXJhdGUiPml0ZXJhdGU8L2E+ICwgPGEgaHJlZj0iI2UucmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+KSomZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1Qgd2l0aDwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnZhcmlhYmxlJm5ic3A7Q0RBVEEgI1JFUVVJUkVEJmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1UaGlzIGVsZW1lbnQgY2hhbmdlcyB0aGUgb2JqZWN0IHRvIGJlIGluc3BlY3RlZCBmb3IgYWxsIGl0cyBjaGlsZCBlbGVtZW50IHRvIHRoZSBvYmplY3QKLSAgICAgICAgICAgIHJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuIHZhcmlhYmxlLiBJZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSByZXNvbHZlZCB0aGVuIHRoZSBleHByZXNzaW9uCi0gICAgICAgICAgICB3aWxsIHRocm93IGEgRXhwcmVzc2lvbkV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgaXQuIFRoZSBjaGlsZHJlbiBvZiBhIHdpdGggZXhwcmVzc2lvbiAKLSAgICAgICAgICAgIGFyZSBjb21iaW5lZCB1c2luZyB0aGUgYW5kIG9wZXJhdG9yLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPnZhcmlhYmxlPC9iPiAtIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSB1c2VkIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIEl0IGlzIHVwIHRvIHRoZSBldmFsdWF0b3IKLSAgICAgICAgICAgICAgICAgIG9mIGFuIGV4dGVuc2lvbiBwb2ludCB0byBwcm92aWRlIHRoZSB2YXJpYWJsZSBpbiB0aGUgdmFyaWFibGUgcG9vbC48L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLnJlc29sdmUiPnJlc29sdmU8L2E+ICg8YSBocmVmPSIjZS5ub3QiPm5vdDwvYT4gLCA8YSBocmVmPSIjZS5hbmQiPmFuZDwvYT4gLCA8YSBocmVmPSIjZS5vciI+b3I8L2E+ICwgPGEgaHJlZj0iI2UuaW5zdGFuY2VvZiI+aW5zdGFuY2VvZjwvYT4gLCA8YSBocmVmPSIjZS50ZXN0Ij50ZXN0PC9hPiAsIDxhIGhyZWY9IiNlLnN5c3RlbVRlc3QiPnN5c3RlbVRlc3Q8L2E+ICwgPGEgaHJlZj0iI2UuZXF1YWxzIj5lcXVhbHM8L2E+ICwgPGEgaHJlZj0iI2UuY291bnQiPmNvdW50PC9hPiAsIDxhIGhyZWY9IiNlLndpdGgiPndpdGg8L2E+ICwgPGEgaHJlZj0iI2UucmVzb2x2ZSI+cmVzb2x2ZTwvYT4gLCA8YSBocmVmPSIjZS5hZGFwdCI+YWRhcHQ8L2E+ICwgPGEgaHJlZj0iI2UuaXRlcmF0ZSI+aXRlcmF0ZTwvYT4gLCA8YSBocmVmPSIjZS5yZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4pKiZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCByZXNvbHZlPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+dmFyaWFibGUmbmJzcDtDREFUQSAjUkVRVUlSRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5hcmdzJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZWxlbWVudCBjaGFuZ2VzIHRoZSBvYmplY3QgdG8gYmUgaW5zcGVjdGVkIGZvciBhbGwgaXRzIGNoaWxkIGVsZW1lbnQgdG8gdGhlIG9iamVjdAotICAgICAgICAgICAgcmVmZXJlbmNlZCBieSB0aGUgZ2l2ZW4gdmFyaWFibGUuIElmIHRoZSB2YXJpYWJsZSBjYW4gbm90IGJlIHJlc29sdmVkIHRoZW4gdGhlIGV4cHJlc3Npb24KLSAgICAgICAgICAgIHdpbGwgdGhyb3cgYSBFeHByZXNzaW9uRXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBpdC4gVGhlIGNoaWxkcmVuIG9mIGEgd2l0aCBleHByZXNzaW9uIAotICAgICAgICAgICAgYXJlIGNvbWJpbmVkIHVzaW5nIHRoZSBhbmQgb3BlcmF0b3IuPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+dmFyaWFibGU8L2I+IC0gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIHJlc29sdmVkLiBUaGlzIHZhcmlhYmxlIGlzIHRoZW4gdXNlZCBhcyB0aGUgb2JqZWN0IGluIGZvY3VzCi0gICAgICAgICAgICAgICAgICBmb3IgY2hpbGQgZWxlbWVudCBldmFsdWF0aW9uLiBJdCBpcyB1cCB0byB0aGUgZXZhbHVhdG9yIG9mIGFuIGV4dGVuc2lvbiBwb2ludCB0byBwcm92aWRlIGEgCi0gICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHZhcmlhYmxlIHJlc29sdmVyIChzZWUgSVZhcmlhYmxlUmVzb2x2ZXIpIHRocm91Z2ggdGhlIGV2YWx1YXRpb24gY29udGV4dCBwYXNzZWQKLSAgICAgICAgICAgICAgICAgIHRvIHRoZSByb290IGV4cHJlc3Npb24gZWxlbWVudCB3aGVuIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uPC9saT4KLTxsaT48Yj5hcmdzPC9iPiAtIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdmFyaWFibGUgcmVzb2x2ZXIuIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgc2VwZXJhdGVkCi0gICAgICAgICAgICAgICAgICBieSBjb21tYXMuIEVhY2ggaW5kaXZpZHVhbCBhcmd1bWVudCBpcyBjb252ZXJ0ZWQgaW50byBhIEphdmEgYmFzZSB0eXBlIHVzaW5nIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICBydWxlcyBhcyBkZWZpbmVkIGZvciB0aGUgdmFsdWUgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IGV4cHJlc3Npb24uPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5hZGFwdCI+YWRhcHQ8L2E+ICg8YSBocmVmPSIjZS5ub3QiPm5vdDwvYT4gLCA8YSBocmVmPSIjZS5hbmQiPmFuZDwvYT4gLCA8YSBocmVmPSIjZS5vciI+b3I8L2E+ICwgPGEgaHJlZj0iI2UuaW5zdGFuY2VvZiI+aW5zdGFuY2VvZjwvYT4gLCA8YSBocmVmPSIjZS50ZXN0Ij50ZXN0PC9hPiAsIDxhIGhyZWY9IiNlLnN5c3RlbVRlc3QiPnN5c3RlbVRlc3Q8L2E+ICwgPGEgaHJlZj0iI2UuZXF1YWxzIj5lcXVhbHM8L2E+ICwgPGEgaHJlZj0iI2UuY291bnQiPmNvdW50PC9hPiAsIDxhIGhyZWY9IiNlLndpdGgiPndpdGg8L2E+ICwgPGEgaHJlZj0iI2UucmVzb2x2ZSI+cmVzb2x2ZTwvYT4gLCA8YSBocmVmPSIjZS5hZGFwdCI+YWRhcHQ8L2E+ICwgPGEgaHJlZj0iI2UuaXRlcmF0ZSI+aXRlcmF0ZTwvYT4gLCA8YSBocmVmPSIjZS5yZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4pKiZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBhZGFwdDwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnR5cGUmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZWxlbWVudCBpcyB1c2VkIHRvIGFkYXB0IHRoZSBvYmplY3QgaW4gZm9jdXMgdG8gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IHRoZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHR5cGUuIFRoZSBleHByZXNzaW9uIHJldHVybnMgbm90IGxvYWRlZCBpZiBlaXRoZXIgdGhlIGFkYXB0ZXIgb3IgdGhlIHR5cGUgcmVmZXJlbmNlZCBpc24ndAotICAgICAgICAgICAgbG9hZGVkIHlldC4gSXQgdGhyb3dzIGEgRXhwcmVzc2lvbkV4Y2VwdGlvbiBkdXJpbmcgZXZhbHVhdGlvbiBpZiB0aGUgdHlwZSBuYW1lIGRvZXNuJ3QgZXhpc3QgCi0gICAgICAgICAgICBhdCBhbGwuIFRoZSBjaGlsZHJlbiBvZiBhbiBhZGFwdCBleHByZXNzaW9uIGFyZSBjb21iaW5lZCB1c2luZyB0aGUgYW5kIG9wZXJhdG9yLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPnR5cGU8L2I+IC0gdGhlIHR5cGUgdG8gd2hpY2ggdGhlIG9iamVjdCBpbiBmb2N1cyBpcyB0byBiZSBhZGFwdGVkLjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuaXRlcmF0ZSI+aXRlcmF0ZTwvYT4gKDxhIGhyZWY9IiNlLm5vdCI+bm90PC9hPiAsIDxhIGhyZWY9IiNlLmFuZCI+YW5kPC9hPiAsIDxhIGhyZWY9IiNlLm9yIj5vcjwvYT4gLCA8YSBocmVmPSIjZS5pbnN0YW5jZW9mIj5pbnN0YW5jZW9mPC9hPiAsIDxhIGhyZWY9IiNlLnRlc3QiPnRlc3Q8L2E+ICwgPGEgaHJlZj0iI2Uuc3lzdGVtVGVzdCI+c3lzdGVtVGVzdDwvYT4gLCA8YSBocmVmPSIjZS5lcXVhbHMiPmVxdWFsczwvYT4gLCA8YSBocmVmPSIjZS5jb3VudCI+Y291bnQ8L2E+ICwgPGEgaHJlZj0iI2Uud2l0aCI+d2l0aDwvYT4gLCA8YSBocmVmPSIjZS5yZXNvbHZlIj5yZXNvbHZlPC9hPiAsIDxhIGhyZWY9IiNlLmFkYXB0Ij5hZGFwdDwvYT4gLCA8YSBocmVmPSIjZS5pdGVyYXRlIj5pdGVyYXRlPC9hPiAsIDxhIGhyZWY9IiNlLnJlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPikqJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGl0ZXJhdGU8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5vcGVyYXRvciZuYnNwOyhvcnxhbmQpIDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlmRW1wdHkmbmJzcDsmbmJzcDsodHJ1ZSB8IGZhbHNlKSAmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZWxlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBhIHZhcmlhYmxlIHRoYXQgaXMgb2YgdHlwZSBqYXZhLnV0aWwuQ29sbGVjdGlvbi4gSWYKLSAgICAgICAgICAgIHRoZSBvYmplY3QgaW4gZm9jdXMgaXMgbm90IG9mIHR5cGUgamF2YS51dGlsLkNvbGxlY3Rpb24gdGhlbiBhbiBFeHByZXNzaW9uRXhjZXB0aW9uIHdpbGwKLSAgICAgICAgICAgIGJlIHRocm93biB3aGlsZSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPm9wZXJhdG9yPC9iPiAtIGVpdGhlciAiYW5kIiBvciAib3IiLiBUaGUgb3BlcmF0b3IgZGVmaW5lcyBob3cgdGhlIGNoaWxkCi0gICAgICAgICAgICAgICAgICBlbGVtZW50cyB3aWxsIGJlIGNvbWJpbmVkLiBJZiBub3Qgc3BlY2lmaWVkLCAiYW5kIiB3aWxsIGJlIHVzZWQuPC9saT4KLTxsaT48Yj5pZkVtcHR5PC9iPiAtIHRoZSB2YWx1ZSByZXR1cm4gZnJvbSB0aGUgaXRlcmF0ZSBleHByZXNzaW9uIGlmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LiBJZgotICAgICAgICAgICAgICAgICBub3Qgc3BlY2lmaWVkIHRoZW4gdHJ1ZSBpcyByZXR1cm5lZCB3aGVuIHRoZSBvcGVyYXRvciBlcXVhbHMgImFuZCIgCi0gICAgICAgICAgICAgICAgIGFuZCBmYWxzZSBpcyByZXR1cm4gaWYgdGhlIG9wZXJhdG9yIGVxdWFscyAib3IiLjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUucmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIHJlZmVyZW5jZTwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmRlZmluaXRpb25JZCZuYnNwO0NEQVRBICNSRVFVSVJFRCZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IGlzIHVzZWQgdG8gcmVmZXJlbmNlIGFuIGV4cHJlc3Npb24gZnJvbSB0aGUgPGI+b3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5kZWZpbml0aW9uczwvYj4gZXh0ZW5zaW9uIHBvaW50LiAgVGhlIGV4cHJlc3Npb24gZGVmaW5pdGlvbiB3aWxsIGJlIGV2YWx1YXRlZCB3aXRoaW4gdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBlbGVtZW50IHVzaW5nIHRoZSBjdXJyZW50IGV2YWx1YXRpb24gY29udGV4dC48L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5kZWZpbml0aW9uSWQ8L2I+IC0gVGhlIHVuaXF1ZSBpZCBvZiBhbiBleHByZXNzaW9uIGZyb20gPGI+b3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5kZWZpbml0aW9uczwvYj4uPC9saT4KLTwvdWw+Ci08YnI+PGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RXhhbXBsZXM6IDwvaDY+W0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotPHA+PC9wPgotCi08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5TdXBwbGllZCBJbXBsZW1lbnRhdGlvbjogPC9oNj5bRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQotPHA+PC9wPgotCi08YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotPC9wPgotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvZXh0L29yZ19lY2xpcHNlX3dzdF93c19zZXJ2aWNlX3BvbGljeV91aV9zZXJ2aWNlcG9saWN5dWkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvcmVmZXJlbmNlL2V4dC9vcmdfZWNsaXBzZV93c3Rfd3Nfc2VydmljZV9wb2xpY3lfdWlfc2VydmljZXBvbGljeXVpLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDhlMzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9yZWZlcmVuY2UvZXh0L29yZ19lY2xpcHNlX3dzdF93c19zZXJ2aWNlX3BvbGljeV91aV9zZXJ2aWNlcG9saWN5dWkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5TZXJ2aWNlIHBvbGljeSBVSTwvdGl0bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9ib29rLmNzcyIpOzwvc3R5bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9zY2hlbWEuY3NzIik7PC9zdHlsZT4KLTwvSEVBRD4KLTxCT0RZPgotPEgxIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+U2VydmljZSBwb2xpY3kgVUk8L0gxPgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kudWkuc2VydmljZVBvbGljeVVJPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+U2luY2U6IDwvaDY+MS4wCi08cD48L3A+Ci0KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkRlc2NyaXB0aW9uOiA8L2g2PlRoaXMgZXh0ZW5zaW9uIGFsbG93cyBleHRlbmRlcnMgdG8gYWRkIHNlcnZpY2UgcG9saWN5IFVJIG9wZXJhdGlvbnMgZm9yIHRoZQotICAgICAgICAgc2VydmljZSBwb2xpY2llcyB0aGF0IHRoZXkgaGF2ZSBhZGRlZC48cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5Db25maWd1cmF0aW9uIE1hcmt1cDo8L2g2PgotPHA+PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5leHRlbnNpb24iPmV4dGVuc2lvbjwvYT4gKDxhIGhyZWY9IiNlLnNlcnZpY2VQb2xpY3lVSSI+c2VydmljZVBvbGljeVVJPC9hPispJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGV4dGVuc2lvbjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnBvaW50Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWUmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRCZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5zZXJ2aWNlUG9saWN5VUkiPnNlcnZpY2VQb2xpY3lVSTwvYT4gKDxhIGhyZWY9IiNlLm9wZXJhdGlvbiI+b3BlcmF0aW9uPC9hPiogfCA8YSBocmVmPSIjZS5xdWlja0ZpeCI+cXVpY2tGaXg8L2E+KikmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZXh0ZW5zaW9uIGlzIGludGVuZGVkIGZvciBleHRlbmRlcnMgd2hvIHdhbnQgdG8gYWRkIFVJIG9wZXJhdGlvbnMgdG8gdGhlIFNlcnZpY2UgcG9saWNpZXMgdGhhdCB0aGV5IGhhdmUgZGVmaW5lZC48L3A+Ci08YnI+PGJyPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5kZXNjcmlwdG9yIj5kZXNjcmlwdG9yPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBkZXNjcmlwdG9yPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+ZGVzY3JpcHRpb24mbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnNob3J0TmFtZSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bG9uZ05hbWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmNvbnRleHRIZWxwSWQmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmljb25wYXRoJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLUEgZGVzY3JpcHRvciBmb3IgdGhpcyBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gb3IgYWN0aW9uLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmRlc2NyaXB0aW9uPC9iPiAtIEEgZGVzY3JpcHRpb24gb2YgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi48L2xpPgotPGxpPjxiPnNob3J0TmFtZTwvYj4gLSBUaGUgc2hvcnQgbmFtZSBvZiB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLiAgTm90ZTogaWYgYSBzaG9ydCBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbG9uZyBuYW1lLjwvbGk+Ci08bGk+PGI+bG9uZ05hbWU8L2I+IC0gVGhlIGxvbmcgbmFtZSBvZiB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLiAgTm90ZTogaWYgYSBsb25nIG5hbWUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBzaG9ydE5hbWUgdmFsdWUuPC9saT4KLTxsaT48Yj5jb250ZXh0SGVscElkPC9iPiAtIFRoZSBjb250ZXh0IGhlbHAgaWQgZm9yIHRoaXMgc2VydmljZSBvcGVyYXRpb24gaWYgaXQgaXMgcmVxdWlyZWQuPC9saT4KLTxsaT48Yj5pY29ucGF0aDwvYj4gLSBBIHBsdWdpbiByZWxhdGl2ZSBwYXRoIHRvIHNvbWUgaWNvbiBmaWxlIGZvciB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUub3BlcmF0aW9uIj5vcGVyYXRpb248L2E+ICg8YSBocmVmPSIjZS5kZXNjcmlwdG9yIj5kZXNjcmlwdG9yPC9hPiAsIDxhIGhyZWY9IiNlLmVuYWJsZWQiPmVuYWJsZWQ8L2E+PyAsICg8YSBocmVmPSIjZS5lbnVtZXJhdGlvbiI+ZW51bWVyYXRpb248L2E+IHwgPGEgaHJlZj0iI2Uuc2VsZWN0aW9uIj5zZWxlY3Rpb248L2E+IHwgPGEgaHJlZj0iI2UuY29tcGxleCI+Y29tcGxleDwvYT4pKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBvcGVyYXRpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnBvbGljeVBhdHRlcm4mbmJzcDtDREFUQSAjUkVRVUlSRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij53b3Jrc3BhY2VPbmx5Jm5ic3A7KHRydWUgfCBmYWxzZSkgPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+ZGVmYXVsdGRhdGEmbmJzcDsmbmJzcDsmbmJzcDsodHJ1ZSB8IGZhbHNlKSAidHJ1ZSImZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLURlZmluZXMgYSBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+aWQ8L2I+IC0gVGhpcyB1bmlxdWUgaWQgb2YgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi48L2xpPgotPGxpPjxiPnBvbGljeVBhdHRlcm48L2I+IC0gVGhlIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggc2VydmljZSBwb2xpY2VzIHRoaXMgb3BlcmF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aC4gIEFueSBKYXZhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXkgYmUgc3BlY2lmaWVkLiAgVGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdXNlZCB0byBtYXRjaCB0aGUgaWRzIG9mIGFsbCBrbm93biBzZXJ2aWNlIHBvbGljeSBpZHMuPC9saT4KLTxsaT48Yj53b3Jrc3BhY2VPbmx5PC9iPiAtIFRoaXMgYXR0cmlidXRlIGluZGljYXRlcyBpZiB0aGlzIG9wZXJhdGlvbiBpcyBvbmx5IHRvIGJlIHVzZWQgaW4gdGhlIHdvcmtzcGFjZSBwcmVmZXJlbmNlIHBhZ2UuICBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGl0IGlzIGRlZmF1bHRlZCB0byBmYWxzZS48L2xpPgotPGxpPjxiPmRlZmF1bHRkYXRhPC9iPiAtIDwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZW51bWVyYXRpb24iPmVudW1lcmF0aW9uPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBlbnVtZXJhdGlvbjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+ZGVmYXVsdEl0ZW0mbmJzcDtDREFUQSAjSU1QTElFRCZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IGRlZmluZXMgdGhlIGVudW1lcmF0aW9uIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmlkPC9iPiAtIFRoZSBpZCBvZiB0aGlzIGVudW1lcmF0aW9uLjwvbGk+Ci08bGk+PGI+ZGVmYXVsdEl0ZW08L2I+IC0gT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldCBieSB0aGUgZW51bWVyYXRpb24uPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5zZWxlY3Rpb24iPnNlbGVjdGlvbjwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1Qgc2VsZWN0aW9uPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWNvbiZuYnNwOyh0cnVlIHwgZmFsc2UpICZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGEgc29tZSBraW5kIG9mIFVJIGJvb2xlYW4gc2VsZWN0aW9uLiAgQWxsIHNlcnZpY2UgcG9saWNpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9uIHNob3VsZCB1c2UgdGhlIG9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5ib29sZWFuRW51bSBlbnVtZXJhdGlvbi48L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5pY29uPC9iPiAtIFRoaXMgYm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIGJvb2xlYW4gc2VsZWN0aW9uIHNob3VsZCBiZSByZW5kZXJlZCB2aWEgYW4gaWNvbi48L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmNvbXBsZXgiPmNvbXBsZXg8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGNvbXBsZXg8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5sYXVuY2hDbGFzcyZuYnNwO0NEQVRBICNSRVFVSVJFRCZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGNvbXBsZXggdG8gcmVuZGVyIGFuZCBwZXJzaXN0LiAgVGhlIGxhdW5jaENsYXNzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBkaWFsb2cgdG8gc2V0IG1vcmUgY29tcGxleCBkYXRhLiAgVGhlIGV4dGVuZGVyIHdpbGwgbmVlZCB0byBjYWxsIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBBUEkgdG8gcGVyc2lzdCBkYXRhIG9uIGVhY2ggcG9saWN5IGFzIHJlcXVpcmVkLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmxhdW5jaENsYXNzPC9iPiAtIEEgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBkaWFsb2cuICBUaGUgY2xhc3Mgc3BlY2lmaWVkIG11c3QgaW1wbGVtZW50IHRoZSBJTGF1bmNoT3BlcmF0aW9uIGludGVyZmFjZS48L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmVuYWJsZWQiPmVuYWJsZWQ8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGVuYWJsZWQ8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5lbmFibGVkQ2xhc3MmbmJzcDtDREFUQSAjSU1QTElFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm11bHRpc2VsZWN0Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLUluZGljYXRlcyBpZiB0aGlzIG9wZXJhdGlvbiBpcyBlbmFibGVkL2dyYXllZCBvdXQgb3Igbm90IGluIHRoZSBVSS48L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5lbmFibGVkQ2xhc3M8L2I+IC0gVGhlIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgYXR0cmlidXRlIG11Y2ggaW1wbGVtZW50IHRoZSBJRW5hYmxlT3BlcmF0aW9uIGludGVyZmFjZS4gIFRoaXMgY2xhc3MgYWxsb3dzIGV4dGVuZGVycyB0byBwcm92aWRlIGEgbW9yZSBjb21wbGV4IGxvZ2ljIGZvciB3aGVuIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LjwvbGk+Ci08bGk+PGI+bXVsdGlzZWxlY3Q8L2I+IC0gSW5kaWNhdGVzIGlmIHRoaXMgb3BlcmF0aW9uIGFsbG93cyBtdWx0aXBsZSBzZWxlY3Rpb24gb2YgcG9saWN5IG9iamVjdHMgb3Igbm90LjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUucXVpY2tGaXgiPnF1aWNrRml4PC9hPiAoPGEgaHJlZj0iI2UuYWN0aW9uIj5hY3Rpb248L2E+KykmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgcXVpY2tGaXg8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wbHVnaW5JZCZuYnNwO0NEQVRBICNSRVFVSVJFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmNvZGUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVRoaXMgZWxlbWVudCBhbGxvd3MgZXh0ZW5kZXJzIHRvIGFkZCBxdWljayBmaXhlcyB0byB0aGUgU2VydmljZSBwb2xpY3kgVUkgZnJhbWV3b3Jrcy48L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5wbHVnaW5JZDwvYj4gLSBUaGUgcGx1Z2luIGlkIHRoYXQgdGhlIGVuY2xvc2VkIHF1aWNrIGZpeCBhY3Rpb25zIGFwcGx5IHRvLiAgVGhpcyBpcyB0aGUgaWQgdGhhdCB3aWxsIG1hdGNoIHRoZSBwbHVnaW4gaWQgZnJvbSB0aGUgSVN0YXR1cyBvZiBhIFNlcnZpY2VQb2xpY3kgb2JqZWN0LjwvbGk+Ci08bGk+PGI+Y29kZTwvYj4gLSBUaGUgY29kZSB0aGF0IHRoZSBlbmNsb3NlZCBxdWljayBmaXggYWN0aW9ucyBhcHBseSB0by4gIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCB3aWxsIG1hdGNoIHRoZSBjb2RlIGZyb20gdGhlIElTdGF0dXMgb2YgYSBTZXJ2aWNlUG9saWN5IG9iamVjdC48L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmFjdGlvbiI+YWN0aW9uPC9hPiAoPGEgaHJlZj0iI2UuZGVzY3JpcHRvciI+ZGVzY3JpcHRvcjwvYT4pJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGFjdGlvbjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmNsYXNzJm5ic3A7Q0RBVEEgI1JFUVVJUkVEJmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1UaGUgZWxlbWVudCBpcyB1c2VkIHRvIGFkZCBhIHF1aWNrIGZpeCBhY3Rpb24uPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+Y2xhc3M8L2I+IC0gVGhlIGNsYXNzIHRoYXQgdGhlIGZyYW1ld29yayB3aWxsIGNhbGwgZm9yIGEgcGFydGljdWxhciBxdWljayBmaXggYWN0aW9uLiAgVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudCB0aGUgSVF1aWNrRml4QWN0aW9uIGludGVyZmFjZS48L2xpPgotPC91bD4KLTxicj48aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5FeGFtcGxlczogPC9oNj5bRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCi08cD48L3A+Ci0KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPlN1cHBsaWVkIEltcGxlbWVudGF0aW9uOiA8L2g2PltFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi08cD48L3A+Ci0KLTxicj4KLTxwIGNsYXNzPSJub3RlIFNjaGVtYUNvcHlyaWdodCI+Ci08L3A+Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3NjaGVtYS5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3NjaGVtYS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZmJmMjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy9zY2hlbWEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotSDYuQ2FwdGlvbkZpZ0NvbHVtbiNoZWFkZXIgew0KLQlmb250LXNpemU6MTZweDsgDQotCWRpc3BsYXk6aW5saW5lDQotfQ0KLQ0KLVAuTm90ZSNjb3B5cmlnaHQgew0KLQlmb250LXNpemU6IHNtYWxsZXI7IA0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWNvbG9yOiAjMzM2Njk5OyANCi0JZGlzcGxheTppbmxpbmU7DQotCW1hcmdpbi10b3A6IDMuMDAwMDAwcHQ7DQotCW1hcmdpbi1ib3R0b206IDExLjAwMDAwMHB0Ow0KLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0Ow0KLX0NCi0NCi1QLkNvZGUjZHRkIHsNCi0JY29sb3I6ICM4MDAwMDA7IA0KLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0Ow0KLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0Ow0KLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1sZWZ0OiAxMC4wMDAwMDBwdDsNCi19DQotDQotUC5Db2RlI2R0ZEF0dGxpc3Qgew0KLQljb2xvcjogIzgwMDAwMDsgDQotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsNCi0JbWFyZ2luLWxlZnQ6IDIwLjAwMDAwMHB0Ow0KLX0NCi0NCi1QLkNvZGUjdGFnIHsNCi0JY29sb3I6ICMwMDAwODA7IA0KLQlkaXNwbGF5OmlubGluZTsNCi0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsNCi0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsNCi0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0Ow0KLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsNCi19DQotDQotUC5Db2RlI2NzdHJpbmcgew0KLQljb2xvcjogIzAwODAwMDsgDQotCWRpc3BsYXk6aW5saW5lOw0KLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0Ow0KLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0Ow0KLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0OwkNCi19DQotDQotLkNvbmZpZ01hcmt1cCNlbGVtZW50RGVzYyB7DQotCWNvbG9yOiBibGFjazsNCi0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsNCi0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsNCi0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0Ow0KLQltYXJnaW4tbGVmdDogMTAuMDAwMDAwcHQ7DQotfQ0KLQ0KLS5Db25maWdNYXJrdXAjYXR0bGlzdERlc2Mgew0KLQljb2xvcjogYmxhY2s7DQotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7DQotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsNCi0JbWFyZ2luLWxlZnQ6IDMyLjAwMDAwMHB0Ow0KLX0NCi0NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3RvcGljc19FeHRQb2ludF9SZWZlcmVuY2UueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYy90b3BpY3NfRXh0UG9pbnRfUmVmZXJlbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhYzg4Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3RvcGljc19FeHRQb2ludF9SZWZlcmVuY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCSAJPHRvYyBsYWJlbD0iRXh0ZW5zaW9uIFBvaW50cyBSZWZlcmVuY2UiPgotPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuc2VydmljZXBvbGljeSIgaHJlZj0icmVmZXJlbmNlL2V4dC9vcmdfZWNsaXBzZV93c3Rfd3Nfc2VydmljZV9wb2xpY3lfc2VydmljZXBvbGljeS5odG1sIi8+Ci08dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9saWN5dWkiIGhyZWY9InJlZmVyZW5jZS9leHQvb3JnX2VjbGlwc2Vfd3N0X3dzX3NlcnZpY2VfcG9saWN5X3VpX3NlcnZpY2Vwb2xpY3l1aS5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvdG9waWNzX1JlZmVyZW5jZS54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5hcGkuZG9jL3RvcGljc19SZWZlcmVuY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjRmODdkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MvdG9waWNzX1JlZmVyZW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIERlZmluZSB0b3BpY3MgZm9yIHRoZSByZWZlcmVuY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0b2MgbGFiZWw9IldlYiBTZXJ2aWNlIHJlZmVyZW5jZSIgbGlua190bz0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL3JlZmVyZW5jZV90b2MueG1sI2phdmFkb2Nfd2Vic2VydmljZXMiPgotCTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIEFQSSBSZWZlcmVuY2UiIGhyZWY9InJlZmVyZW5jZS9hcGkvaW5kZXguaHRtbCI+Ci0JCTwhLS0gVGhlIGphdmFkb2N0b2MueG1sIHRvYyBpcyBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkLiAtLT4KLQkJPGxpbmsgdG9jPSJqYXZhZG9jdG9jLnhtbCIgLz4KLQk8L3RvcGljPgotCQotCQotCTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIEV4dGVuc2lvbiBQb2ludHMgUmVmZXJlbmNlIiBocmVmPSJyZWZlcmVuY2UvZXh0L2luZGV4Lmh0bWwiPgotCQotCSAgICA8IS0tIFRoZSB0b3BpY3NfRXh0UG9pbnRzLVJlZmVyZW5jZS54bWwgdG9jIGlzIGdlbmVyYXRlZCBieSB0aGUgYnVpbGQuIC0tPgotCQk8bGluayB0b2M9InRvcGljc19FeHRQb2ludF9SZWZlcmVuY2UueG1sIiAvPgotCTwvdG9waWM+Ci0JCi08L3RvYz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3NTAxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiMjM4MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4Njk1YzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjNiNTdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wbHVnaW5OYW1lICAgPSBXZWIgU2VydmljZXMgVUkKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdlNzFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MudWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNzc4ZGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLQotPGNvbnRleHRzPgotCi08IS0tV1NJUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUFdTSTAwMDEiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj5UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzLCBhbmQgc2VjdXJlZCBXZWIgc2VydmljZXMsIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuCi0KLVlvdSBjYW4gc2V0IHRoZSBsZXZlbCBvZiBjb21wbGlhbmNlIGZvciBlaXRoZXIgdGhlIEJhc2ljIFByb2ZpbGUgYW5kIHRoZSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUsIG9yIGZvciB0aGUgQXR0YWNobWVudHMgUHJvZmlsZS4gWW91IGNhbiBzZWxlY3QgZnJvbSB0aHJlZSBsZXZlbHMgb2YgY29tcGxpYW5jZSB3aXRoIFdTLUkgc3BlY2lmaWNhdGlvbnM6Ci0tIFJlcXVpcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBwcmV2ZW50cyB5b3UgZnJvbSBjcmVhdGluZyBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UuCi0tIFN1Z2dlc3QgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LgotLSBJZ25vcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UgYW5kIGRvZXMgbm90IG5vdGlmeSB5b3Ugb2Ygbm9uLWNvbXBsaWFuY2UuCi0KLVlvdSBjYW4gYWxzbyBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi0KLUlmIHlvdSBzZWxlY3QgdG8gd2FpdCBmb3IgV1NETCB2YWxpZGF0aW9uIHRvIGNvbXBsZXRlLCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgd2lsbCBwcmV2ZW50IHlvdSBmcm9tIGdvaW5nIGZvcndhcmQgYW5kIGNvbXBsZXRpbmcgYWRkaXRpb25hbCB3aXphcmQgcGFnZXMgb25jZSB5b3UgaGF2ZSBzZWxlY3RlZCB5b3VyIFdTREwgZmlsZSB1bnRpbCB0aGF0IFdTREwgZmlsZSBoYXMgYmVlbiB2YWxpZGF0ZWQuIElmIHRoZSBXU0RMIGZpbGUgaXMgbm90IHZhbGlkLCB5b3Ugd2lsbCBiZSBnaXZlbiB0aGUgb3B0aW9uIG9mIGV4aXRpbmcgdGhlIHdpemFyZCBvciBjb250aW51aW5nIHdpdGggdGhlIGludmFsaWQgV1NETCBmaWxlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDA0Ij4KLTxkZXNjcmlwdGlvbj5UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzLCBhbmQgc2VjdXJlZCBXZWIgc2VydmljZXMsIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuCi1Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgY29tcGxpYW5jZSBmb3IgZWl0aGVyIHRoZSBCYXNpYyBQcm9maWxlIGFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4gc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOgotLSBSZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLgotLSBTdWdnZXN0IFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLCBidXQgcHJvdmlkZXMgYSB2aXNpYmxlIHdhcm5pbmcgc3RhdGluZyBob3cgdGhlIHNlcnZpY2UgaXMgbm9uLWNvbXBsaWFudC4KLS0gSWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDA4Ij4KLTxkZXNjcmlwdGlvbj5UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzLCBhbmQgc2VjdXJlZCBXZWIgc2VydmljZXMsIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuCi1Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgY29tcGxpYW5jZSBmb3IgZWl0aGVyIHRoZSBCYXNpYyBQcm9maWxlIGFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4gc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOgotLSBSZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLgotLSBTdWdnZXN0IFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLCBidXQgcHJvdmlkZXMgYSB2aXNpYmxlIHdhcm5pbmcgc3RhdGluZyBob3cgdGhlIHNlcnZpY2UgaXMgbm9uLWNvbXBsaWFudC4KLS0gSWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDA5Ij4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwMTAiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDAxMSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTSTAwMDEyIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1JZiB5b3Ugc2VsZWN0IHRvIHdhaXQgZm9yIFdTREwgdmFsaWRhdGlvbiB0byBjb21wbGV0ZSwgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwgcHJldmVudCB5b3UgZnJvbSBnb2luZyBmb3J3YXJkIGFuZCBjb21wbGV0aW5nIGFkZGl0aW9uYWwgd2l6YXJkIHBhZ2VzIG9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgeW91ciBXU0RMIGZpbGUgdW50aWwgdGhhdCBXU0RMIGZpbGUgaGFzIGJlZW4gdmFsaWRhdGVkLiBJZiB0aGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZCwgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wdGlvbiBvZiBleGl0aW5nIHRoZSB3aXphcmQgb3IgY29udGludWluZyB3aXRoIHRoZSBpbnZhbGlkIFdTREwgZmlsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwOSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDEwIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAxMSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTIiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08L2NvbnRleHRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlMzYwZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmI3NTFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3Y7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5oZWxwO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjEwMCw0LjAuMCkiCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYm9vay5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYm9vay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZDg4ODAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2Jvb2suY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGltcG9ydCAiLi4vUFJPRFVDVF9QTFVHSU4vYm9vay5jc3MiOwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwMTI2Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgamF2YWRvY3RvYy54bWwsXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlLyxcCi0gICAgICAgICAgICAgICB0b3BpY3NfUmVmZXJlbmNlLnhtbCxcCi0gICAgICAgICAgICAgICB0b3BpY3NfRXh0UG9pbnRfUmVmZXJlbmNlLnhtbCxcCi0gICAgICAgICAgICAgICBub3RpY2VzLmh0bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBib29rLmNzcyxcCi0gICAgICAgICAgICAgICBzY2hlbWEuY3NzCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYnVpbGREb2NzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZERvY3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDNmOGEzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZERvY3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgbmFtZT0icHJvamVjdCIgZGVmYXVsdD0iZGVmYXVsdCI+Ci0JPHRhcmdldCBuYW1lPSJkZWZhdWx0Ij4KLQkJPGFudCBhbnRmaWxlPSJidWlsZEphdmFkb2MueG1sIiBkaXI9IiR7YmFzZWRpcn0iLz4KLQkJPGFudCBhbnRmaWxlPSJidWlsZEV4dERvY3MueG1sIiBkaXI9IiR7YmFzZWRpcn0iLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZEV4dERvY3MucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZEV4dERvY3MucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QyYTBjMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYnVpbGRFeHREb2NzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZm9ybWF0aW9uIGZvciBleHRlbnNpb24gcG9pbnQgb3ZlcnZpZXcgZG9jdW1lbnQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgT3ZlcnZpZXcgZG9jdW1lbnQgdGl0bGUKLXRpdGxlID0gV1NETCBFTUYgTW9kZWwgRXh0ZW5zaW9uIFBvaW50cwotaGVhZGVyID0gV1NETCBFTUYgTW9kZWwgRXh0ZW5zaW9uIFBvaW50cyAKLSMgSW50cm9kdWN0aW9uIHBhcmFncmFwaAotb3ZlcnZpZXcgPSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludHMgY2FuIGJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFdTREwgRU1GIE1vZGVsOiAKLQotIyBBIGxpc3Qgb2YgdGhlIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlCi0jIGV4dGVuc2lvbiBwb2ludCBkb2N1bWVudGF0aW9uLgotbGlzdGVkLWV4dC1wb2ludHM9b3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvYnVpbGRFeHREb2NzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZEV4dERvY3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDM3ZjE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZEV4dERvY3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IG5hbWU9IkJ1aWxkIEV4dGVuc2lvbiBQb2ludCBEb2N1bWVudGF0aW9uIiBkZWZhdWx0PSJjcmVhdGVFeHREb2NzIiBiYXNlZGlyPSIuIj4KLQotCTxwcm9wZXJ0eSBmaWxlPSJidWlsZEV4dERvY3MucHJvcGVydGllcyIvPgotCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXREaXIiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImFwaW91dHB1dERpciIgdmFsdWU9IiR7b3V0cHV0RGlyfSR7ZmlsZS5zZXBhcmF0b3J9cmVmZXJlbmNlJHtmaWxlLnNlcGFyYXRvcn1leHRlbnNpb24tcG9pbnRzIi8+Ci0KLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZUV4dERvY3MiIGRlcGVuZHM9ImJ1aWxkRXh0RG9jcywgY3JlYXRlRG9jTGlzdGluZ3MiLz4KLQotIAk8dGFyZ2V0IG5hbWU9ImJ1aWxkRXh0RG9jcyI+Ci0gCQkKLSAJCTwhLS0gY2xlYW51cCBvbGQgLS0+Ci0gCQk8ZGVsZXRlPgotIAkgCQk8ZmlsZXNldCBkaXI9IiR7YXBpb3V0cHV0RGlyfSIgY2FzZXNlbnNpdGl2ZT0ieWVzIiBpZD0iZXh0LWRvY3MtbGlzdC1lbnQiPgotIAkgCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5odG1sIi8+Ci0gCQkJPC9maWxlc2V0PgotIAkJPC9kZWxldGU+Ci0gCQkKLSAJCTwhLS0gZ2VuZXJhdGUgbmV3IGh0bWwgZnJvbSBleHQtcHQgc2NoZW1hcyAtLT4KLSAJCTxwZGUuY29udmVydFNjaGVtYVRvSFRNTCBtYW5pZmVzdD0iLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwvcGx1Z2luLnhtbCIgZGVzdGluYXRpb249IiR7YXBpb3V0cHV0RGlyfSIgLz4KLSAJCQotIAkJPCEtLSBHZXQgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9uIGRvYyBmaWxlcy4gLS0+Ci0gCQk8ZmlsZXNldCBkaXI9IiR7YXBpb3V0cHV0RGlyfSIgY2FzZXNlbnNpdGl2ZT0ieWVzIiBpZD0iZXh0LWRvY3MtbGlzdC1lbnQiID4KLSAJCQk8aW5jbHVkZSBuYW1lPSIqKi8qLmh0bWwiLz4KLQkJPC9maWxlc2V0PgotIAkJCi0gCQk8IS0tIENvbnZlcnQgdGhlIGxpc3QgdG8gYW4gWE1MIHJlcHJlc2VudGF0aW9uLiAtLT4KLSAJCTxwYXRoY29udmVydCBwcm9wZXJ0eT0iZXh0LWRvYy1lbnQiIHJlZmlkPSJleHQtZG9jcy1saXN0LWVudCIgcGF0aHNlcD0iJmx0Oy9maWxlJmd0OyR7bGluZS5zZXBhcmF0b3J9Jmx0O2ZpbGUmZ3Q7IiA+Ci0gCQkJPG1hcCBmcm9tPSIke2FwaW91dHB1dERpcn0ke2ZpbGUuc2VwYXJhdG9yfSIgdG89IiIvPgotIAkJPC9wYXRoY29udmVydD4KLSAJCTxlY2hvIGZpbGU9ImV4dGRvY3MueG1sIj4mbHQ7ZmlsZXMgY29tcG9uZW50PSJ3c2RsIiZndDsmbHQ7ZmlsZSZndDske2V4dC1kb2MtZW50fSZsdDsvZmlsZSZndDsmbHQ7L2ZpbGVzJmd0OzwvZWNobz4KLSAJCSAJCQkJCQkKLSAJPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjcmVhdGVEb2NMaXN0aW5ncyI+Ci0JCTwhLS0gQ3JlYXRlIHRoZSBvdmVydmlldyBkb2N1bWVudC4gLS0+Ci0JCTx4c2x0IGJhc2VkaXI9IiR7YmFzZWRpcn0iIGluPSJleHREb2NMaXN0aW5ncy54bWwiIG91dD0iJHthcGlvdXRwdXREaXJ9JHtmaWxlLnNlcGFyYXRvcn1pbmRleC5odG1sIiBzdHlsZT0iZXh0RG9jT3ZlcnZpZXcueHNsIj4KLQkgIAkJPHBhcmFtIG5hbWU9InRpdGxlIiBleHByZXNzaW9uPSIke3RpdGxlfSIvPgotCSAgCQk8cGFyYW0gbmFtZT0iaGVhZGVyIiBleHByZXNzaW9uPSIke2hlYWRlcn0iLz4KLQkgIAkJPHBhcmFtIG5hbWU9Im92ZXJ2aWV3IiBleHByZXNzaW9uPSIke292ZXJ2aWV3fSIvPgotCQkJPHBhcmFtIG5hbWU9Imxpc3RlZC1leHQtcG9pbnRzIiBleHByZXNzaW9uPSIke2xpc3RlZC1leHQtcG9pbnRzfSIvPgotCQk8L3hzbHQ+Ci0JCQkKLQkJPCEtLSBDcmVhdGUgdGhlIGV4dGVudGlvbiBwb2ludCB0b2MuIC0tPgotCQk8eHNsdCBiYXNlZGlyPSIke2Jhc2VkaXJ9IiBpbj0iZXh0RG9jTGlzdGluZ3MueG1sIiBvdXQ9InRvcGljc19FeHRQb2ludF9SZWZlcmVuY2UueG1sIiBzdHlsZT0iZXh0RG9jVG9jLnhzbCI+Ci0JCQk8cGFyYW0gbmFtZT0ibGlzdGVkLWV4dC1wb2ludHMiIGV4cHJlc3Npb249IiR7bGlzdGVkLWV4dC1wb2ludHN9Ii8+Ci0JCQk8b3V0cHV0cHJvcGVydHkgbmFtZT0ibWV0aG9kIiB2YWx1ZT0ieG1sIi8+Ci0JCQk8b3V0cHV0cHJvcGVydHkgbmFtZT0iaW5kZW50IiB2YWx1ZT0ieWVzIi8+Ci0JCTwveHNsdD4KLQkJCQotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9idWlsZEphdmFkb2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2J1aWxkSmF2YWRvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MjI2YzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2J1aWxkSmF2YWRvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJqYXZhZG9jIgotICAgIGRlZmF1bHQ9Im1haW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0JCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImJ1aWxkRGlyZWN0b3J5IgotICAgICAgICB2YWx1ZT0iJHtiYXNlZGlyfS8uLi8uLiIgLz4KLQotICAgIDwhLS0gPSA9ID0gc3RhbmRhcmQgcHJvcGVydGllcyBwYXR0ZXJuID0gPSA9IC0tPgotICAgIDwhLS0gCi0gICAgICAgIEZpcnN0IGdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgICAgTm90ZSB0byBiZSBjcm9zcy1wbGF0Zm9ybSwgImVudmlyb25tZW50IHZhcmlhYmxlcyIgYXJlIG9ubHkgYXBwcm9wcmlhdGUgZm9yIAotICAgICAgICBzb21lIHZhcmlhYmxlcywgZS5nLiBvbmVzIHdlIHNldCwgc2luY2UgcHJvcGVydGllcyBhcmUgY2FzZSBzZW5zaXRpdmUsIGV2ZW4gaWYgCi0gICAgICAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24geW91ciBvcGVyYXRpbmcgc3lzdGVtIGFyZSBub3QsIGUuZy4gaXQgd2lsbCAKLSAgICAgICAgYmUgJHtlbnYuUGF0aH0gbm90ICR7ZW52LlBBVEh9IG9uIFdpbmRvd3MgLS0+Ci0gICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+Ci0KLSAgICA8IS0tIAotICAgICAgICBMZXQgdXNlcnMgb3ZlcnJpZGUgc3RhbmRhcmQgcHJvcGVydGllcywgaWYgZGVzaXJlZC4KLSAgICAgICAgSWYgdGhpcyBkaXJlY3RvcnkvZmlsZXMgZG9lcyBub3QgZXhpc3QsIHRoZW4gaXQgd2lsbCBiZSBpZ25vcmVkLCAKLSAgICAgICAgYW5kIGRlZmF1bHRzIHVzZWQuCi0gICAgLS0+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIGZpbGU9IiR7ZW52LkxPQ0FMX0JVSUxEX1BST1BFUlRJRVNfRElSfS8ke2FudC5wcm9qZWN0Lm5hbWV9LnByb3BlcnRpZXMiIC8+Ci0KLSAgICA8cHJvcGVydHkgZmlsZT0iamF2YWRvYy5wcm9wZXJ0aWVzIiAvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXREaXIiIHZhbHVlPSIke2Jhc2VkaXJ9IiAvPgotCi0JPHRhcmdldAotICAgICAgICBuYW1lPSJtYWluIgotICAgICAgICBkZXBlbmRzPSJqYXZhZG9jLCBwYWNrYWdldG9jIgotICAgICAgICBkZXNjcmlwdGlvbj0iQnVpbGRzIFBsdWdpbiBKYXZhZG9jIiAvPgotCi0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJqYXZhZG9jIgotICAgICAgICBkZXBlbmRzPSJnZXRTa2lwSmF2YURvY1BhcmFtIgotICAgICAgICB1bmxlc3M9ImRvc2tpcEphdmFEb2MiPgotICAgIAk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIAk8ZWNobyBtZXNzYWdlPSJvdXRwdXRkaXI6ICR7b3V0cHV0RGlyfSIgLz4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NwYXRoOiAke0oyU0UtMS41fSIgLz4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotCi0gICAgICAgIDxqYXZhZG9jCi0gICAgICAgICAgICBhY2Nlc3M9InB1YmxpYyIKLSAgICAgICAgICAgIGF1dGhvcj0iZmFsc2UiCi0gICAgICAgICAgICBkZXN0ZGlyPSIke291dHB1dERpcn0vcmVmZXJlbmNlL2FwaSIKLSAgICAgICAgICAgIGRvY3RpdGxlPSIke2FwaS50aXRsZX0iCi0gICAgICAgICAgICBub2RlcHJlY2F0ZWQ9ImZhbHNlIgotICAgICAgICAgICAgbm9kZXByZWNhdGVkbGlzdD0iZmFsc2UiCi0gICAgICAgICAgICBub2luZGV4PSJmYWxzZSIKLSAgICAgICAgICAgIG5vbmF2YmFyPSJmYWxzZSIKLSAgICAgICAgICAgIG5vdHJlZT0iZmFsc2UiCi0gICAgICAgICAgICBFbmNvZGluZz0iSVNPLTg4NTktMSIKLSAgICAgICAgICAgIHBhY2thZ2VuYW1lcz0iJHthcGkucGFja2FnZXN9IgotICAgICAgICAgICAgc291cmNlcGF0aD0iJHtwbHVnaW4uc291cmNlZm9sZGVyc30iCi0gICAgICAgICAgICBzcGxpdGluZGV4PSJ0cnVlIgotICAgICAgICAgICAgdXNlPSJ0cnVlIgotICAgICAgICAgICAgdmVyc2lvbj0idHJ1ZSIKLSAgICAgICAgICAgIGJyZWFraXRlcmF0b3I9InllcyIKLSAgICAgICAgICAgIHZlcmJvc2U9ImZhbHNlIgotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAJY2xhc3NwYXRoPSIiPgotICAgICAgICAJCi0gICAgICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgCTxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS8uLi8iPgotICAgICAgICAgICAgCQk8aW5jbHVkZSBuYW1lPSJqYXZheC53c2RsLyouamFyIi8+Ci0gICAgICAgICAgICAJCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLnhzZC8qLmphciIvPgotCQkJCTwvZmlsZXNldD4KLSAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICAgICAgCi0JCQk8dGFnIG5hbWU9Imlnbm9yZSIgICAgIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0JCQk8dGFnIG5hbWU9ImdlbmVyYXRlZCIgIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0JCQk8dGFnIG5hbWU9Im1vZGVsIiAgICAgIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0JCQk8dGFnIG5hbWU9Im1vZGlmaWFibGUiIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0JCQk8dGFnIG5hbWU9ImV4dGVuZHMiICAgIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0JCQk8dGFnIG5hbWU9ImltcGxlbWVudHMiIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0JCQk8dGFnIG5hbWU9Im9yZGVyZWQiICAgIGRlc2NyaXB0aW9uPSJpZ25vcmUiIGVuYWJsZWQ9ImZhbHNlIi8+Ci0KLSAgICAgICAgPC9qYXZhZG9jPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPHRhcmdldCBuYW1lPSJwYWNrYWdldG9jIj4KLSAgICAgICAgPGxvYWRmaWxlCi0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBwcm9wZXJ0eT0id3RwLnBhY2thZ2VzIgotICAgICAgICAgICAgc3JjRmlsZT0iJHtvdXRwdXREaXJ9L3JlZmVyZW5jZS9hcGkvcGFja2FnZS1saXN0Ij4KLSAgICAgICAgICAgIDxmaWx0ZXJjaGFpbj4KLSAgICAgICAgICAgICAgICA8ZmlsdGVycmVhZGVyCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS50b29scy5hbnQuZmlsdGVycy5QcmVmaXhMaW5lcyI+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhbQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0icHJlZml4IgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiZsdDsvcGFja2FnZSZndDsmbHQ7cGFja2FnZSZndDsiIC8+Ci0gICAgICAgICAgICAgICAgPC9maWx0ZXJyZWFkZXI+Ci0gICAgICAgICAgICAgICAgPHN0cmlwbGluZWJyZWFrcyAvPgotICAgICAgICAgICAgPC9maWx0ZXJjaGFpbj4KLSAgICAgICAgPC9sb2FkZmlsZT4KLQotICAgICAgICA8IS0tIENyZWF0ZSBwYWNrYWdlcy54bWwgZmlsZSAtLT4KLSAgICAgICAgPGVjaG8gZmlsZT0icGFja2FnZXMueG1sIj4KLSAgICAgICAgICAgICZsdDtwYWNrYWdlcyZndDsmbHQ7cGFja2FnZSZndDske3d0cC5wYWNrYWdlc30mbHQ7L3BhY2thZ2UmZ3Q7Jmx0Oy9wYWNrYWdlcyZndDsKLSAgICAgICAgPC9lY2hvPgotCi0gICAgICAgIDx4c2x0Ci0gICAgICAgICAgICBiYXNlZGlyPSIke2Jhc2VkaXJ9L2J1aWxkIgotICAgICAgICAgICAgaW49InBhY2thZ2VzLnhtbCIKLSAgICAgICAgICAgIG91dD0iamF2YWRvY3RvYy54bWwiCi0gICAgICAgICAgICBzdHlsZT0iamF2YWRvY1RvYy54c2wiPgotICAgICAgICAgICAgPG91dHB1dHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ibWV0aG9kIgotICAgICAgICAgICAgICAgIHZhbHVlPSJ4bWwiIC8+Ci0gICAgICAgICAgICA8b3V0cHV0cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmRlbnQiCi0gICAgICAgICAgICAgICAgdmFsdWU9InllcyIgLz4KLSAgICAgICAgPC94c2x0PgotICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0iZ2V0U2tpcEphdmFEb2NQYXJhbSIKLSAgICAgICAgaWY9InNraXBKYXZhRG9jIj4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0ic2tpcEphdmFEb2M6ICR7c2tpcEphdmFEb2N9IiAvPgotICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkb3NraXBKYXZhRG9jIj4KLSAgICAgICAgICAgIDxlcXVhbHMKLSAgICAgICAgICAgICAgICBhcmcxPSIke3NraXBKYXZhRG9jfSIKLSAgICAgICAgICAgICAgICBhcmcyPSJ0cnVlIgotICAgICAgICAgICAgICAgIHRyaW09InRydWUiCi0gICAgICAgICAgICAgICAgY2FzZXNlbnNpdGl2ZT0iZmFsc2UiIC8+Ci0gICAgICAgIDwvY29uZGl0aW9uPgotICAgIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9leHREb2NMaXN0aW5ncy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvZXh0RG9jTGlzdGluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjdjZjNlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9leHREb2NMaXN0aW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29tcG9uZW50cz4KLQk8Y29tcG9uZW50IG5hbWU9IldTREwgQVBJIiBpZD0id3NkbCIgZmlsZT0iZXh0ZG9jcy54bWwiLz4KLTwvY29tcG9uZW50cz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9leHREb2NPdmVydmlldy54c2wgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvZXh0RG9jT3ZlcnZpZXcueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjcwYTRlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9leHREb2NPdmVydmlldy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPgotICAgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiLz4KLSAgICA8eHNsOnBhcmFtIG5hbWU9ImhlYWRlciIvPgotICAgIDx4c2w6cGFyYW0gbmFtZT0ib3ZlcnZpZXciLz4KLSAgICA8eHNsOnBhcmFtIG5hbWU9Imxpc3RlZC1leHQtcG9pbnRzIi8+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tcG9uZW50cyI+Ci0gICAgCQotICAgIAk8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+Ci0gICAgCSZsdDshRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVFJBTlNJVElPTkFMLy9FTiImZ3Q7Ci0JCTwveHNsOnRleHQ+Ci0JCTxodG1sPgotCQk8aGVhZD4KLQkJPHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPgotCQkmbHQ7bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gVGhpcyBwYWdlIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGxpY2Vuc2UuIEZvciBmdWxsIGRldGFpbHMgc2VlIHRoZSBMRUdBTCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBib29rIHRoYXQgY29udGFpbnMgdGhpcyBwYWdlLiIgJmd0OwotCi0gICAJCSZsdDttZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiJmd0OwotICAgCQk8L3hzbDp0ZXh0PgotICAgCQk8dGl0bGU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0aXRsZSIvPjwvdGl0bGU+Ci0gICAJCTx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj4KLQkJJmx0O0xJTksgUkVMPSJTVFlMRVNIRUVUIiBIUkVGPSIuLi8uLi9ib29rLmNzcyIgQ0hBUlNFVD0iSVNPLTg4NTktMSIgVFlQRT0idGV4dC9jc3MiJmd0OwotCQk8L3hzbDp0ZXh0PgotCQk8L2hlYWQ+Ci0JCTxib2R5IGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODAwMDgwIj4KLQotCQk8Y2VudGVyPgotCQk8aDE+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRoZWFkZXIiLz48L2gxPgotCQk8L2NlbnRlcj4KLQotCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG92ZXJ2aWV3Ii8+Ci0gICAgCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJjb21wb25lbnQiPgotICAgIAkJPHhzbDpzb3J0IHNlbGVjdD0iQGlkIi8+Ci0gICAgCQk8aDM+PGEgbmFtZT0ie0BpZH0iPjwvYT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2gzPgotICAgIAkJPHVsPgotICAgIAkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJkb2N1bWVudChAZmlsZSkvZmlsZXMvZmlsZSI+Ci0gICAgICAgCQkJCTx4c2w6c29ydCBzZWxlY3Q9InRleHQoKSIvPgotICAgIAkJCQkgPHhzbDppZiB0ZXN0PSJjb250YWlucygkbGlzdGVkLWV4dC1wb2ludHMsIHRyYW5zbGF0ZShzdWJzdHJpbmcodGV4dCgpLCAwLCBzdHJpbmctbGVuZ3RoKHRleHQoKSkgLSA0KSwnXycsJy4nKSkiPiAKLSAgCQkJCQkJPGxpPgotICAJCQkJCQkJPGEgaHJlZj0ie3RleHQoKX0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0cmFuc2xhdGUoc3Vic3RyaW5nKHRleHQoKSwgMCwgc3RyaW5nLWxlbmd0aCh0ZXh0KCkpIC0gNCksJ18nLCcuJykiLz48L2E+IAotICAJCQkJCQk8L2xpPgotICAJCQkJCTwveHNsOmlmPgotICAgIAkJCTwveHNsOmZvci1lYWNoPgotICAgIAkJPC91bD4KLSAgICAJPC94c2w6Zm9yLWVhY2g+Ci0gICAgCTwvYm9keT4KLQkJPC9odG1sPgotICAgIDwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9leHREb2NUb2MueHNsIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2V4dERvY1RvYy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNDI0OWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2V4dERvY1RvYy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCi0gICAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9InhhbGFuIj4KLSAgICA8eHNsOnBhcmFtIG5hbWU9Imxpc3RlZC1leHQtcG9pbnRzIi8+Ci0gICAgCi0gICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbXBvbmVudHMiPgotICAgICAJPHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPgotJmx0Oz9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPyZndDsKLQkgCTwveHNsOnRleHQ+Ci0JCTx0b2MgbGFiZWw9IkV4dGVuc2lvbiBQb2ludHMgUmVmZXJlbmNlIj4KLQotICAgIAk8eHNsOmZvci1lYWNoIHNlbGVjdD0iY29tcG9uZW50Ij4KLSAgICAJCTx4c2w6c29ydCBzZWxlY3Q9IkBpZCIvPgotICAgIAkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJkb2N1bWVudChAZmlsZSkvZmlsZXMvZmlsZSI+Ci0gICAgICAgCQkJCTx4c2w6c29ydCBzZWxlY3Q9InRleHQoKSIvPgotICAgIAkJCQk8eHNsOmlmIHRlc3Q9ImNvbnRhaW5zKCRsaXN0ZWQtZXh0LXBvaW50cywgdHJhbnNsYXRlKHN1YnN0cmluZyh0ZXh0KCksIDAsIHN0cmluZy1sZW5ndGgodGV4dCgpKSAtIDQpLCdfJywnLicpKSI+IAotCSAJCQkJCQotCSAJCQkJCTx0b3BpYyBsYWJlbD0ie3RyYW5zbGF0ZShzdWJzdHJpbmcodGV4dCgpLCAwLCBzdHJpbmctbGVuZ3RoKHRleHQoKSkgLSA0KSwnXycsJy4nKX0iIGhyZWY9InJlZmVyZW5jZS9leHRlbnNpb24tcG9pbnRzL3t0ZXh0KCl9IiAvPgotICAJCQkJCQotICAJCQkJCTwveHNsOmlmPgotICAgIAkJCTwveHNsOmZvci1lYWNoPgotICAgIAk8L3hzbDpmb3ItZWFjaD4KLSAgICAJCi0JCTwvdG9jPiAKLQk8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvZXh0ZG9jcy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvZXh0ZG9jcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZDYwNjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2V4dGRvY3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08ZmlsZXMgY29tcG9uZW50PSJ3c2RsIj48ZmlsZT5vcmdfZWNsaXBzZV93c3Rfd3NkbF9jb250ZW50R2VuZXJhdG9ycy5odG1sPC9maWxlPgotPGZpbGU+b3JnX2VjbGlwc2Vfd3N0X3dzZGxfZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuaHRtbDwvZmlsZT48L2ZpbGVzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9qYXZhZG9jLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvamF2YWRvYy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmQ3Njc3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9qYXZhZG9jLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLXBsdWdpbi5zb3VyY2Vmb2xkZXJzPS4uL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsO1wKLS4uL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwO1wKLS4uL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lO1wKLS4uL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwO1wKLQotCi1hcGkucGFja2FnZXM9b3JnLmVjbGlwc2Uud3N0LndzZGwsXAotb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCxcCi1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAsXAotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLFwKLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcAotCi0KLWFwaS50aXRsZT1XZWIgVG9vbHMgUGxhdGZvcm06IFdTREwgRU1GIE1vZGVsIEFQSSBkb2N1bWVudGF0aW9uCi0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9qYXZhZG9jLnhzbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9qYXZhZG9jLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4MjRlNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvamF2YWRvYy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4c2w6c3R5bGVzaGVldAotCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotCXZlcnNpb249IjEuMCI+Ci0KLQk8eHNsOnZhcmlhYmxlIG5hbWU9InJvb3QiPgotCQk8eHNsOmNob29zZT4KLQkJCTx4c2w6d2hlbiB0ZXN0PSIvaHRtbC9oZWFkL21ldGFbQG5hbWU9J3Jvb3QnXS9AY29udGVudCI+Ci0JCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii9odG1sL2hlYWQvbWV0YVtAbmFtZT0ncm9vdCddL0Bjb250ZW50IiAvPgotCQkJPC94c2w6d2hlbj4KLQkJCTx4c2w6b3RoZXJ3aXNlPgotCQkJCTx4c2w6dGV4dD4uLi8uLjwveHNsOnRleHQ+Ci0JCQk8L3hzbDpvdGhlcndpc2U+Ci0JCTwveHNsOmNob29zZT4KLQk8L3hzbDp2YXJpYWJsZT4KLQotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgotCTwveHNsOnRlbXBsYXRlPgotCi0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaHRtbCI+Ci0JCTxodG1sPgotCQkJPGhlYWQ+Ci0JCQkJPG1ldGEKLQkJCQkJY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiCi0JCQkJCWh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLQkJCQk8bGluawotCQkJCQl0eXBlPSJ0ZXh0L2NzcyIKLQkJCQkJaHJlZj0ieyRyb290fS9hcGlzdHlsZXMuY3NzIgotCQkJCQlyZWw9InN0eWxlc2hlZXQiIC8+Ci0JCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJoZWFkL3RpdGxlIiAvPgotCQkJPC9oZWFkPgotCQkJPGJvZHk+IAotCQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzCi0JCQkJCXNlbGVjdD0iYm9keS8qIgotCQkJCQltb2RlPSJib2R5IiAvPgotCQkJPC9ib2R5PgotCQk8L2h0bWw+Ci0JPC94c2w6dGVtcGxhdGU+Ci0KLQk8eHNsOnRlbXBsYXRlCi0JCW1hdGNoPSJoMSIKLQkJbW9kZT0iYmFubmVyIj4KLQkJPHRhYmxlCi0JCQlib3JkZXI9IjAiCi0JCQljZWxscGFkZGluZz0iMiIKLQkJCWNlbGxzcGFjaW5nPSI1IgotCQkJd2lkdGg9IjEwMCUiPgotCQkJPHRib2R5PgotCQkJCTx0cj4KLQkJCQkJPHRkCi0JCQkJCQlhbGlnbj0ibGVmdCIKLQkJCQkJCXdpZHRoPSI2MCUiPgotCQkJCQkJPGZvbnQgY2xhc3M9ImluZGV4dG9wIj4KLQkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIgLz4KLQkJCQkJCTwvZm9udD4KLQkJCQkJCTxiciAvPgotCQkJCQkJPGZvbnQgY2xhc3M9ImluZGV4c3ViIj4KLQkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iL2h0bWwvaGVhZC90aXRsZSIgLz4KLQkJCQkJCTwvZm9udD4KLQkJCQkJPC90ZD4KLQkJCQkJPHRkIHdpZHRoPSI0MCUiPgotCQkJCQkJPGltZwotCQkJCQkJCXNyYz0ieyRyb290fS9vdmVydmlldy9JZGVhLmpwZyIKLQkJCQkJCQlhbGlnbj0ibWlkZGxlIgotCQkJCQkJCWhlaWdodD0iODYiCi0JCQkJCQkJaHNwYWNlPSI1MCIKLQkJCQkJCQl3aWR0aD0iMTIwIiAvPgotCQkJCQk8L3RkPgotCQkJCTwvdHI+Ci0JCQk8L3Rib2R5PgotCQk8L3RhYmxlPgotCTwveHNsOnRlbXBsYXRlPgotCi0JPHhzbDp0ZW1wbGF0ZQotCQltYXRjaD0iaDEiCi0JCW1vZGU9ImJvZHkiIC8+Ci0KLQk8eHNsOnRlbXBsYXRlCi0JCW1hdGNoPSJoMiIKLQkJbW9kZT0iYm9keSI+Ci0KLQkJPHRhYmxlCi0JCQlib3JkZXI9IjAiCi0JCQljZWxscGFkZGluZz0iMiIKLQkJCWNlbGxzcGFjaW5nPSI1IgotCQkJd2lkdGg9IjEwMCUiPgotCQkJPHRib2R5PgotCQkJCTx0cj4KLQkJCQkJPHRkCi0JCQkJCQljb2xzcGFuPSIyIgotCQkJCQkJYWxpZ249ImxlZnQiCi0JCQkJCQliZ2NvbG9yPSIjMDA4MGMwIgotCQkJCQkJdmFsaWduPSJ0b3AiPgotCQkJCQkJPGI+Ci0JCQkJCQkJPGZvbnQKLQkJCQkJCQkJY29sb3I9IiNmZmZmZmYiCi0JCQkJCQkJCWZhY2U9IkFyaWFsLEhlbHZldGljYSI+Ci0JCQkJCQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzIC8+Ci0JCQkJCQkJPC9mb250PgotCQkJCQkJPC9iPgotCQkJCQk8L3RkPgotCQkJCTwvdHI+Ci0JCQk8L3Rib2R5PgotCQk8L3RhYmxlPgotCTwveHNsOnRlbXBsYXRlPgotCi0JPHhzbDp0ZW1wbGF0ZQotCQltYXRjaD0iaDMiCi0JCW1vZGU9ImJvZHkiPgotCQk8aW1nCi0JCQlzcmM9Inskcm9vdH0vaW1hZ2VzL0FkYXJyb3cuZ2lmIgotCQkJYm9yZGVyPSIwIgotCQkJaGVpZ2h0PSIxNiIKLQkJCXdpZHRoPSIxNiIgLz4KLQkJPHhzbDphcHBseS10ZW1wbGF0ZXMgLz4KLQk8L3hzbDp0ZW1wbGF0ZT4KLQotCTx4c2w6dGVtcGxhdGUKLQkJbWF0Y2g9IioiCi0JCW1vZGU9ImJvZHkiPgotCi0JCTx4c2w6Y29weT4KLQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iKnxAKnx0ZXh0KCkiIC8+Ci0JCTwveHNsOmNvcHk+Ci0JPC94c2w6dGVtcGxhdGU+Ci0KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIqfEAqfHRleHQoKSI+Ci0JCTx4c2w6Y29weT4KLQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iKnxAKnx0ZXh0KCkiIC8+Ci0JCTwveHNsOmNvcHk+Ci0JPC94c2w6dGVtcGxhdGU+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvamF2YWRvY1RvYy54c2wgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvamF2YWRvY1RvYy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNzE3OTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2phdmFkb2NUb2MueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IgotICAgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJ4YWxhbiI+Ci0gICAgCi0gICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhY2thZ2VzIj4KLSAgICAgPHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPgotJmx0Oz9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPyZndDsKLQkgPC94c2w6dGV4dD4KLQkgPHRvYyBsYWJlbD0iSmF2YWRvYyBQYWNrYWdlcyBSZWZlcmVuY2UiPgotCSA8eHNsOmZvci1lYWNoIHNlbGVjdD0icGFja2FnZSI+Ci0JIDx4c2w6c29ydCBzZWxlY3Q9InRleHQoKSIvPgotCSAJPHhzbDppZiB0ZXN0PSJ0ZXh0KCkgIT0gJyciPgotCSAJCTx0b3BpYyBsYWJlbD0ie3RleHQoKX0iIGhyZWY9InJlZmVyZW5jZS9hcGkve3RyYW5zbGF0ZSh0ZXh0KCksJy4nLCcvJyl9L3BhY2thZ2Utc3VtbWFyeS5odG1sIi8+Ci0JIAk8L3hzbDppZj4KLQkgPC94c2w6Zm9yLWVhY2g+Ci0JCi0JIDwvdG9jPiAKLQk8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvamF2YWRvY3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvamF2YWRvY3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjY0N2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L2phdmFkb2N0b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQkgPHRvYyBsYWJlbD0iSmF2YWRvYyBQYWNrYWdlcyBSZWZlcmVuY2UiPgotPHRvcGljIGhyZWY9InJlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIvPgotPHRvcGljIGhyZWY9InJlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIi8+Ci08dG9waWMgaHJlZj0icmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiLz4KLTx0b3BpYyBocmVmPSJyZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIvPgotPHRvcGljIGhyZWY9InJlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L25vdGljZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9ub3RpY2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZDBkZjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L25vdGljZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhZG9jdHlwZSBodG1sIHB1YmxpYyAiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy9lbiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TElOSyBSRUw9IlNUWUxFU0hFRVQiIEhSRUY9ImJvb2suY3NzIiBDSEFSU0VUPSJJU08tODg1OS0xIgotCVRZUEU9InRleHQvY3NzIj4KLTx0aXRsZT5MZWdhbCBOb3RpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDM+PGEgTkFNRT0iTm90aWNlcyI+PC9hPk5vdGljZXM8L2gzPgotPHA+VGhlIG1hdGVyaWFsIGluIHRoaXMgZ3VpZGUgaXMgQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24gYW5kCi1vdGhlcnMgMjAwMCwgMjAwOC48L3A+Ci08cD48YSBocmVmPSJhYm91dC5odG1sIj5UZXJtcyBhbmQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhlIHVzZSBvZiB0aGlzCi1ndWlkZS48L2E+PC9wPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3BhY2thZ2VzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9wYWNrYWdlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZjNmMTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3BhY2thZ2VzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi0gICAgICAgICAgICA8cGFja2FnZXM+PHBhY2thZ2U+PC9wYWNrYWdlPjxwYWNrYWdlPm9yZy5lY2xpcHNlLndzdC53c2RsPC9wYWNrYWdlPjxwYWNrYWdlPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvcGFja2FnZT48cGFja2FnZT5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L3BhY2thZ2U+PHBhY2thZ2U+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9wYWNrYWdlPjxwYWNrYWdlPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L3BhY2thZ2U+PC9wYWNrYWdlcz4KLSAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmI5MzZhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFRvIGNvZGUgZGV2ZWxvcGVyOgotIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQotIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCi0jICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCi0jICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXBsdWdpbk5hbWUgPSBXU0RMIEVNRiBNb2RlbCBKYXZhZG9jIERvY3VtZW50YXRpb24KLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGNiMjIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KLTxwbHVnaW4+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgIDx0b2MgZmlsZT0idG9waWNzX1JlZmVyZW5jZS54bWwiIC8+Ci0JICA8dG9jIGZpbGU9ImphdmFkb2N0b2MueG1sIi8+Ci0JICA8dG9jIGZpbGU9InRvcGljc19FeHRQb2ludF9SZWZlcmVuY2UueG1sIi8+ICAgICAgCi0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVhZG1lLnR4dCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTI3MjlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotVG8gZ2VuZXJhdGUgamF2YWRvYyBmb2xsb3cgdGhlc2Ugc3RlcHM6Ci0KLS0gbWFrZSBzdXJlIHlvdSBoYXZlIHRoZXNlIHBsdWctaW5zIGluIHRoZSB3b3Jrc3BhY2UKLQlvcmcuZWNsaXBzZS53c3Qud3NkbAotCWphdmF4LndzZGwgKGFzIGEgYmluYXJ5IGltcG9ydCkKLQlvcmcuZWNsaXBzZS54c2QgKGFzIGEgYmluYXJ5IGltcG9ydCkKLQkKLS0gcnVuIHRoZSBtYWluIGJ1aWxkLnhtbCBzY3JpcHQgd2l0aCB0aGUgYW50UnVubmVyIGFwcGxpY2F0aW9uCi0JY3JlYXRlIGEgbmV3IHBsYXRmb3JtIGxhdW5jaCBjb25maWd1cmF0aW9uCi0Jc2VsZWN0IHJ1biBhbiBhcHBsaWNhdGlvbgotCXNlbGVjdCBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgYXMgdGhlIGFwcGxpY2F0aW9uIHRvIHJ1bgotCWFkZCB0aGUgZm9sbG93aW5nIGFzIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyAKLQkJLWJ1aWxkZmlsZSB7d29ya3NwYWNlX2xvY31cb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdlxidWlsZERvY3MueG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvYWxsY2xhc3Nlcy1mcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvYWxsY2xhc3Nlcy1mcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTU1ZmRiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2FsbGNsYXNzZXMtZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1BbGwgQ2xhc3NlcwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci08Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotPEI+QWxsIENsYXNzZXM8L0I+PC9GT05UPgotPEJSPgotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5CaW5kaW5nPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkJpbmRpbmdGYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5CaW5kaW5nSW5wdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkJpbmRpbmdPcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkJpbmRpbmdPdXRwdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkRlZmluaXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5FeHRlbnNpYmlsaXR5RWxlbWVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+RXh0ZW5zaWJsZUVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5GYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SFRUUEFkZHJlc3M8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkhUVFBCaW5kaW5nPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5IVFRQRmFjdG9yeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5IVFRQT3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5IVFRQUGFja2FnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkhUVFBVcmxFbmNvZGVkPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SFRUUFVybFJlcGxhY2VtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkltcG9ydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPklucHV0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NZXNzYWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NZXNzYWdlUmVmZXJlbmNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FQ29udGVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+TUlNRUZhY3Rvcnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPk1JTUVNaW1lWG1sPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+TUlNRVBhY2thZ2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FUGFydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5OYW1lc3BhY2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+T3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPk91dHB1dDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+UGFydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+UG9ydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlBvcnRUeXBlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TZXJ2aWNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQQWRkcmVzczwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+U09BUEJpbmRpbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBCb2R5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQRmFjdG9yeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBGYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQSGVhZGVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQSGVhZGVyQmFzZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBIZWFkZXJGYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQT3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQUGFja2FnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5UeXBlczwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPldTRExDb25zdGFudHM8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5XU0RMRGlhZ25vc3RpYzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+V1NETEVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5XU0RMRmFjdG9yeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPldTRExQYWNrYWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPldTRExQYXJzZXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5XU0RMUGx1Z2luPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+V1NETFJlc291cmNlSW1wbDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQyZGEwYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1BbGwgQ2xhc3NlcwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci08Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotPEI+QWxsIENsYXNzZXM8L0I+PC9GT05UPgotPEJSPgotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+QmluZGluZzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+QmluZGluZ0ZhdWx0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48ST5CaW5kaW5nSW5wdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48ST5CaW5kaW5nT3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+QmluZGluZ091dHB1dDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPkRlZmluaXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48ST5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxJPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPkV4dGVuc2libGVFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPkZhdWx0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEk+SFRUUEFkZHJlc3M8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48ST5IVFRQQmluZGluZzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxJPkhUVFBGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48ST5IVFRQT3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEk+SFRUUFBhY2thZ2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48ST5IVFRQUGFja2FnZS5MaXRlcmFsczwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxJPkhUVFBVcmxFbmNvZGVkPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxJPkhUVFBVcmxSZXBsYWNlbWVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+SW1wb3J0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPklucHV0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+TWVzc2FnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPk1lc3NhZ2VSZWZlcmVuY2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48ST5NSU1FQ29udGVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxJPk1JTUVGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEk+TUlNRU1pbWVYbWw8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48ST5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxJPk1JTUVQYWNrYWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEk+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48ST5NSU1FUGFydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+TmFtZXNwYWNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48ST5PcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPk91dHB1dDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPlBhcnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48ST5Qb3J0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPlBvcnRUeXBlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+U2VydmljZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxJPlNPQVBBZGRyZXNzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEk+U09BUEJpbmRpbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48ST5TT0FQQm9keTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxJPlNPQVBGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxJPlNPQVBGYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEk+U09BUEhlYWRlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxJPlNPQVBIZWFkZXJCYXNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxJPlNPQVBIZWFkZXJGYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEk+U09BUE9wZXJhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxJPlNPQVBQYWNrYWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEk+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEk+VHlwZXM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEk+V1NETERpYWdub3N0aWM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPldTRExFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPldTRExGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPldTRExQYWNrYWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPldTRExQYWNrYWdlLkxpdGVyYWxzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlSW1wbDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxJPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2NvbnN0YW50LXZhbHVlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvY29uc3RhbnQtdmFsdWVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMjUxYzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvY29uc3RhbnQtdmFsdWVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTI4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUNvbnN0YW50IEZpZWxkIFZhbHVlcwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkNvbnN0YW50IEZpZWxkIFZhbHVlcyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9jb25zdGFudC12YWx1ZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJjb25zdGFudC12YWx1ZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08Q0VOVEVSPgotPEgxPgotQ29uc3RhbnQgRmllbGQgVmFsdWVzPC9IMT4KLTwvQ0VOVEVSPgotPEhSIFNJWkU9IjQiIE5PU0hBREU+Ci08Qj5Db250ZW50czwvQj48VUw+Ci08TEk+PEEgSFJFRj0iI29yZy5lY2xpcHNlIj5vcmcuZWNsaXBzZS4qPC9BPgotPC9VTD4KLQotPEEgTkFNRT0ib3JnLmVjbGlwc2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Rk9OVCBTSVpFPSIrMiI+Ci1vcmcuZWNsaXBzZS4qPC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIzIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElORyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElORyI+QklORElORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TIj5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5CSU5ESU5HX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VMRU1FTlQiPkJJTkRJTkdfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX19FUE9SVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX19FUE9SVF9UWVBFIj5CSU5ESU5HX19FUE9SVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19fUU5BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX1FOQU1FIj5CSU5ESU5HX19RTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19fVU5ERUZJTkVEIj5CSU5ESU5HX19VTkRFRklORUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUIj5CSU5ESU5HX0ZBVUxUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5CSU5ESU5HX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkJJTkRJTkdfRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUX19FRkFVTFQiPkJJTkRJTkdfRkFVTFRfX0VGQVVMVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfX0VMRU1FTlQiPkJJTkRJTkdfRkFVTFRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUX19OQU1FIj5CSU5ESU5HX0ZBVUxUX19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPkJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GRUFUVVJFX0NPVU5UIj5CSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUIj5CSU5ESU5HX0lOUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5CSU5ESU5HX0lOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkJJTkRJTkdfSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fRUlOUFVUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX19FSU5QVVQiPkJJTkRJTkdfSU5QVVRfX0VJTlBVVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfSU5QVVRfX0VMRU1FTlQiPkJJTkRJTkdfSU5QVVRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX19OQU1FIj5CSU5ESU5HX0lOUFVUX19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQiPkJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTiI+QklORElOR19PUEVSQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5CSU5ESU5HX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUIj5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUIj5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkJJTkRJTkdfT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRUxFTUVOVCI+QklORElOR19PUEVSQVRJT05fX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04iPkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX05BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19OQU1FIj5CSU5ESU5HX09QRVJBVElPTl9fTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPkJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVQiPkJJTkRJTkdfT1VUUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkJJTkRJTkdfT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1VUUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+QklORElOR19PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1VUUFVUX19FTEVNRU5UIj5CSU5ESU5HX09VVFBVVF9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCI+QklORElOR19PVVRQVVRfX0VPVVRQVVQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfX05BTUUiPkJJTkRJTkdfT1VUUFVUX19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCI+QklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT04iPkRFRklOSVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkRFRklOSVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRUJJTkRJTkdTIj5ERUZJTklUSU9OX19FQklORElOR1M8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5ERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0VJTVBPUlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FSU1QT1JUUyI+REVGSU5JVElPTl9fRUlNUE9SVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTEVNRU5UIj5ERUZJTklUSU9OX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTUVTU0FHRVMiPkRFRklOSVRJT05fX0VNRVNTQUdFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTkFNRVNQQUNFUyI+REVGSU5JVElPTl9fRU5BTUVTUEFDRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VOQ09ESU5HIj5ERUZJTklUSU9OX19FTkNPRElORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FUE9SVF9UWVBFUyI+REVGSU5JVElPTl9fRVBPUlRfVFlQRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FU0VSVklDRVMiPkRFRklOSVRJT05fX0VTRVJWSUNFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEyPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VUWVBFUyI+REVGSU5JVElPTl9fRVRZUEVTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0xPQ0FUSU9OIj5ERUZJTklUSU9OX19MT0NBVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19RTkFNRSI+REVGSU5JVElPTl9fUU5BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFIj5ERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQiPkRFRklOSVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ET01fRE9DVU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RPTV9ET0NVTUVOVCI+RE9NX0RPQ1VNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRPTV9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNET01fRUxFTUVOVCI+RE9NX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40OTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuZU5BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNlTkFNRSI+ZU5BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4id3NkbCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLmVOU19QUkVGSVgiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNlTlNfUFJFRklYIj5lTlNfUFJFRklYPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IndzZGwiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5lTlNfVVJJIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZU5TX1VSSSI+ZU5TX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+RVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCI+RVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFIj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQkxFX0VMRU1FTlQiPkVYVEVOU0lCTEVfRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEyPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+RVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UIj5FWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPkVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRkFVTFQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUIj5GQVVMVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE1PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkZBVUxUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRUxFTUVOVCI+RkFVTFRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5GQVVMVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX19FTUVTU0FHRSI+RkFVTFRfX0VNRVNTQUdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRkFVTFRfX05BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX19OQU1FIj5GQVVMVF9fTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkZBVUxUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPkZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElORyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkciPklCSU5ESU5HPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX0ZBVUxUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19GQVVMVCI+SUJJTkRJTkdfRkFVTFQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zMzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCI+SUJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPklCSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElOR19JTlBVVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfSU5QVVQiPklCSU5ESU5HX0lOUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQiPklCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElOR19PUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX09QRVJBVElPTiI+SUJJTkRJTkdfT1BFUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+SUJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElOR19PVVRQVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX09VVFBVVCI+SUJJTkRJTkdfT1VUUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCI+SUJJTkRJTkdfT1VUUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JREVGSU5JVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSURFRklOSVRJT04iPklERUZJTklUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQiPklERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JRVhURU5TSUJJTElUWV9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRVhURU5TSUJJTElUWV9FTEVNRU5UIj5JRVhURU5TSUJJTElUWV9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5JRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JRVhURU5TSU9OX1JFR0lTVFJZIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRVhURU5TSU9OX1JFR0lTVFJZIj5JRVhURU5TSU9OX1JFR0lTVFJZPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklFWFRFTlNJT05fUkVHSVNUUllfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUVYVEVOU0lPTl9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UIj5JRVhURU5TSU9OX1JFR0lTVFJZX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JRkFVTFQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lGQVVMVCI+SUZBVUxUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklGQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRkFVTFRfRkVBVFVSRV9DT1VOVCI+SUZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JSU1QT1JUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSU1QT1JUIj5JSU1QT1JUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklJTVBPUlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUlNUE9SVF9GRUFUVVJFX0NPVU5UIj5JSU1QT1JUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JSU5QVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lJTlBVVCI+SUlOUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklJTlBVVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSU5QVVRfRkVBVFVSRV9DT1VOVCI+SUlOUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JSVRFUkFUT1IiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lJVEVSQVRPUiI+SUlURVJBVE9SPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklJVEVSQVRPUl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSVRFUkFUT1JfRkVBVFVSRV9DT1VOVCI+SUlURVJBVE9SX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTElTVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUxJU1QiPklMSVNUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mzc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklMSVNUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lMSVNUX0ZFQVRVUkVfQ09VTlQiPklMSVNUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTUFQIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTUFQIj5JTUFQPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mzg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNQVBfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1BUF9GRUFUVVJFX0NPVU5UIj5JTUFQX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTUVTU0FHRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1FU1NBR0UiPklNRVNTQUdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPklNRVNTQUdFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTVBPUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNUE9SVCI+SU1QT1JUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+SU1QT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0VERUZJTklUSU9OIj5JTVBPUlRfX0VERUZJTklUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+SU1QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNUE9SVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19FTEVNRU5UIj5JTVBPUlRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUEiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNUE9SVF9fRVNDSEVNQSI+SU1QT1JUX19FU0NIRU1BPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNUE9SVF9fTE9DQVRJT05fVVJJIj5JTVBPUlRfX0xPQ0FUSU9OX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNUE9SVF9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19OQU1FU1BBQ0VfVVJJIj5JTVBPUlRfX05BTUVTUEFDRV9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTVBPUlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX0ZFQVRVUkVfQ09VTlQiPklNUE9SVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU5QVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUIj5JTlBVVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEzPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPklOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklOUFVUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTlBVVF9fRUxFTUVOVCI+SU5QVVRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTlBVVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19FTUVTU0FHRSI+SU5QVVRfX0VNRVNTQUdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU5QVVRfX05BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19OQU1FIj5JTlBVVF9fTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklOUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX0ZFQVRVUkVfQ09VTlQiPklOUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJT1BFUkFUSU9OIj5JT1BFUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklPUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU9QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5JT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JT1VUUFVUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJT1VUUFVUIj5JT1VUUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklPVVRQVVRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU9VVFBVVF9GRUFUVVJFX0NPVU5UIj5JT1VUUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBBUlQiPklQQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklQQVJUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lQQVJUX0ZFQVRVUkVfQ09VTlQiPklQQVJUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUE9SVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBPUlQiPklQT1JUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklQT1JUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lQT1JUX0ZFQVRVUkVfQ09VTlQiPklQT1JUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUE9SVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJUE9SVF9UWVBFIj5JUE9SVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklQT1JUX1RZUEVfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj5JUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JU0VSVklDRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVNFUlZJQ0UiPklTRVJWSUNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklTRVJWSUNFX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lTRVJWSUNFX0ZFQVRVUkVfQ09VTlQiPklTRVJWSUNFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JVFlQRVMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lUWVBFUyI+SVRZUEVTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklUWVBFU19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJVFlQRVNfRkVBVFVSRV9DT1VOVCI+SVRZUEVTX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JVVJMIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJVVJMIj5JVVJMPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mzk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklVUkxfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVVSTF9GRUFUVVJFX0NPVU5UIj5JVVJMX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFIj5NRVNTQUdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPk1FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+TUVTU0FHRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FTEVNRU5UIj5NRVNTQUdFX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FUEFSVFMiPk1FU1NBR0VfX0VQQVJUUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfX1FOQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19RTkFNRSI+TUVTU0FHRV9fUU5BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfX1VOREVGSU5FRCI+TUVTU0FHRV9fVU5ERUZJTkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPk1FU1NBR0VfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRSI+TUVTU0FHRV9SRUZFUkVOQ0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+TUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5NRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0VMRU1FTlQiPk1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UiPk1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSI+TUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UIj5NRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTkFNRVNQQUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNOQU1FU1BBQ0UiPk5BTUVTUEFDRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE5PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1BSRUZJWCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTkFNRVNQQUNFX19QUkVGSVgiPk5BTUVTUEFDRV9fUFJFRklYPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI05BTUVTUEFDRV9fVVJJIj5OQU1FU1BBQ0VfX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk5BTUVTUEFDRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNOQU1FU1BBQ0VfRkVBVFVSRV9DT1VOVCI+TkFNRVNQQUNFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTiI+T1BFUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPk9QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRUZBVUxUUyI+T1BFUkFUSU9OX19FRkFVTFRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRUlOUFVUIj5PUEVSQVRJT05fX0VJTlBVVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19FTEVNRU5UIj5PUEVSQVRJT05fX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRU9VVFBVVCI+T1BFUkFUSU9OX19FT1VUUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkciPk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19OQU1FIj5PUEVSQVRJT05fX05BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX1NUWUxFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX1NUWUxFIj5PUEVSQVRJT05fX1NUWUxFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fVU5ERUZJTkVEIj5PUEVSQVRJT05fX1VOREVGSU5FRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+T1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9UWVBFIj5PUEVSQVRJT05fVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ4PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PVVRQVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09VVFBVVCI+T1VUUFVUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9VVFBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+T1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1VUUFVUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0VMRU1FTlQiPk9VVFBVVF9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9VVFBVVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09VVFBVVF9fRU1FU1NBR0UiPk9VVFBVVF9fRU1FU1NBR0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PVVRQVVRfX05BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09VVFBVVF9fTkFNRSI+T1VUUFVUX19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1VUUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09VVFBVVF9GRUFUVVJFX0NPVU5UIj5PVVRQVVRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlQiPlBBUlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+UEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0VMRU1FTlQiPlBBUlRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OIj5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTEVNRU5UX05BTUUiPlBBUlRfX0VMRU1FTlRfTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTUVTU0FHRSI+UEFSVF9fRU1FU1NBR0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX19OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19OQU1FIj5QQVJUX19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19UWVBFX0RFRklOSVRJT04iPlBBUlRfX1RZUEVfREVGSU5JVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9fVFlQRV9OQU1FIj5QQVJUX19UWVBFX05BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfRkVBVFVSRV9DT1VOVCI+UEFSVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+OTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVCI+UE9SVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5QT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX19FQklORElORyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9fRUJJTkRJTkciPlBPUlRfX0VCSU5ESU5HPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfX0VMRU1FTlQiPlBPUlRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX19OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX19OQU1FIj5QT1JUX19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX0ZFQVRVUkVfQ09VTlQiPlBPUlRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFIj5QT1JUX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX1RZUEVfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlBPUlRfVFlQRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+UE9SVF9UWVBFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfVFlQRV9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19FTEVNRU5UIj5QT1JUX1RZUEVfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX0VPUEVSQVRJT05TIj5QT1JUX1RZUEVfX0VPUEVSQVRJT05TPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9UWVBFX19RTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19RTkFNRSI+UE9SVF9UWVBFX19RTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfVFlQRV9fVU5ERUZJTkVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX1VOREVGSU5FRCI+UE9SVF9UWVBFX19VTkRFRklORUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX1RZUEVfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQiPlBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUU5BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1FOQU1FIj5RTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ3PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5TRVJWSUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFIj5TRVJWSUNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuU0VSVklDRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlNFUlZJQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlNFUlZJQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+U0VSVklDRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5TRVJWSUNFX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19FTEVNRU5UIj5TRVJWSUNFX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19FUE9SVFMiPlNFUlZJQ0VfX0VQT1JUUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19RTkFNRSI+U0VSVklDRV9fUU5BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX1VOREVGSU5FRCI+U0VSVklDRV9fVU5ERUZJTkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuU0VSVklDRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX0ZFQVRVUkVfQ09VTlQiPlNFUlZJQ0VfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlRZUEVTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNUWVBFUyI+VFlQRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+VFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlRZUEVTX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVFlQRVNfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5UWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5UWVBFU19fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVFlQRVNfX0VMRU1FTlQiPlRZUEVTX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVFlQRVNfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVFlQRVNfRkVBVFVSRV9DT1VOVCI+VFlQRVNfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4iPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEIj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNXU0RMX0VMRU1FTlQiPldTRExfRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNXU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+V1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1dTRExfRUxFTUVOVF9fRUxFTUVOVCI+V1NETF9FTEVNRU5UX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1dTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5XU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLldTRExfRVhDRVBUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNXU0RMX0VYQ0VQVElPTiI+V1NETF9FWENFUFRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ1PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMyI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5lTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNlTkFNRSI+ZU5BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iaHR0cCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5lTlNfUFJFRklYIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2VOU19QUkVGSVgiPmVOU19QUkVGSVg8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iaHR0cCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5lTlNfVVJJIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2VOU19VUkkiPmVOU19VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvSFRUUCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1MiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0FERFJFU1MiPkhUVFBfQUREUkVTUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5IVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0FERFJFU1NfX0VMRU1FTlQiPkhUVFBfQUREUkVTU19fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fRUxFTUVOVF9UWVBFIj5IVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJIj5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19SRVFVSVJFRCI+SFRUUF9BRERSRVNTX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj5IVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkciPkhUVFBfQklORElORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5IVFRQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX0VMRU1FTlQiPkhUVFBfQklORElOR19fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fRUxFTUVOVF9UWVBFIj5IVFRQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9CSU5ESU5HX19SRVFVSVJFRCI+SFRUUF9CSU5ESU5HX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX1ZFUkIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX1ZFUkIiPkhUVFBfQklORElOR19fVkVSQjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19GRUFUVVJFX0NPVU5UIj5IVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OIj5IVFRQX09QRVJBVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+SFRUUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OX19FTEVNRU5UIj5IVFRQX09QRVJBVElPTl9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSI+SFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSI+SFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX09QRVJBVElPTl9fUkVRVUlSRUQiPkhUVFBfT1BFUkFUSU9OX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+SFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfRU5DT0RFRCI+SFRUUF9VUkxfRU5DT0RFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkhUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVCI+SFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UX1RZUEUiPkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX0VOQ09ERURfX1JFUVVJUkVEIj5IVFRQX1VSTF9FTkNPREVEX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQiPkhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX1JFUExBQ0VNRU5UIj5IVFRQX1VSTF9SRVBMQUNFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UIj5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlRfVFlQRSI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVF9fUkVRVUlSRUQiPkhUVFBfVVJMX1JFUExBQ0VNRU5UX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9BRERSRVNTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfQUREUkVTUyI+SUhUVFBfQUREUkVTUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPklIVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9CSU5ESU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfQklORElORyI+SUhUVFBfQklORElORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPklIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9PUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9PUEVSQVRJT04iPklIVFRQX09QRVJBVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5JSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9VUkxfRU5DT0RFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX1VSTF9FTkNPREVEIj5JSFRUUF9VUkxfRU5DT0RFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVCI+SUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9VUkxfUkVQTEFDRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9VUkxfUkVQTEFDRU1FTlQiPklIVFRQX1VSTF9SRVBMQUNFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX1VSTF9SRVBMQUNFTUVOVF9GRUFUVVJFX0NPVU5UIj5JSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIzIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLmVOQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2VOQU1FIj5lTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJtaW1lIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLmVOU19QUkVGSVgiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZU5TX1BSRUZJWCI+ZU5TX1BSRUZJWDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJtaW1lIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLmVOU19VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZU5TX1VSSSI+ZU5TX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9NSU1FIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX0NPTlRFTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9DT05URU5UIj5JTUlNRV9DT05URU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVCI+SU1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX01JTUVfWE1MIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjSU1JTUVfTUlNRV9YTUwiPklNSU1FX01JTUVfWE1MPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UIj5JTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX01VTFRJUEFSVF9SRUxBVEVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjSU1JTUVfTVVMVElQQVJUX1JFTEFURUQiPklNSU1FX01VTFRJUEFSVF9SRUxBVEVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9GRUFUVVJFX0NPVU5UIj5JTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX1BBUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9QQVJUIj5JTUlNRV9QQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCI+SU1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLkxJU1QiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNMSVNUIj5MSVNUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVCI+TUlNRV9DT05URU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPk1JTUVfQ09OVEVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fRUxFTUVOVCI+TUlNRV9DT05URU5UX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UX19FTEVNRU5UX1RZUEUiPk1JTUVfQ09OVEVOVF9fRUxFTUVOVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX0NPTlRFTlRfX0VQQVJUIj5NSU1FX0NPTlRFTlRfX0VQQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX0NPTlRFTlRfX1JFUVVJUkVEIj5NSU1FX0NPTlRFTlRfX1JFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fVFlQRSI+TUlNRV9DT05URU5UX19UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQiPk1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUwiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MIj5NSU1FX01JTUVfWE1MPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+TUlNRV9NSU1FX1hNTF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MX19FTEVNRU5UIj5NSU1FX01JTUVfWE1MX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRSI+TUlNRV9NSU1FX1hNTF9fRUxFTUVOVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTF9fRVBBUlQiPk1JTUVfTUlNRV9YTUxfX0VQQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTF9fUkVRVUlSRUQiPk1JTUVfTUlNRV9YTUxfX1JFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+TUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTVVMVElQQVJUX1JFTEFURURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlRfVFlQRSI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fUkVRVUlSRUQiPk1JTUVfTVVMVElQQVJUX1JFTEFURURfX1JFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTVVMVElQQVJUX1JFTEFURURfRkVBVFVSRV9DT1VOVCI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVCI+TUlNRV9QQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPk1JTUVfUEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVF9fRUxFTUVOVCI+TUlNRV9QQVJUX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX19FTEVNRU5UX1RZUEUiPk1JTUVfUEFSVF9fRUxFTUVOVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX1BBUlRfX1JFUVVJUkVEIj5NSU1FX1BBUlRfX1JFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQiPk1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjMiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuZU5BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZU5BTUUiPmVOQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+InNvYXAiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuZU5TX1BSRUZJWCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNlTlNfUFJFRklYIj5lTlNfUFJFRklYPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+InNvYXAiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuZU5TX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNlTlNfVVJJIj5lTlNfVVJJPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQUREUkVTUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0FERFJFU1MiPklTT0FQX0FERFJFU1M8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT45PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj5JU09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQklORElORyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0JJTkRJTkciPklTT0FQX0JJTkRJTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UIj5JU09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQk9EWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0JPRFkiPklTT0FQX0JPRFk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLklTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCI+SVNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLklTT0FQX0ZBVUxUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfRkFVTFQiPklTT0FQX0ZBVUxUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVCI+SVNPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9IRUFERVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9IRUFERVIiPklTT0FQX0hFQURFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfSEVBREVSX0ZBVUxUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfSEVBREVSX0ZBVUxUIj5JU09BUF9IRUFERVJfRkFVTFQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLklTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfSEVBREVSX0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPklTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLklTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQiPklTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLklTT0FQX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX09QRVJBVElPTiI+SVNPQVBfT1BFUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5JU09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU1RSSU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNUUklORyI+SVNUUklORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE1PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9BRERSRVNTIj5TT0FQX0FERFJFU1M8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+U09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9BRERSRVNTX19FTEVNRU5UIj5TT0FQX0FERFJFU1NfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSI+U09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+U09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQUREUkVTU19fUkVRVUlSRUQiPlNPQVBfQUREUkVTU19fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+U09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HIj5TT0FQX0JJTkRJTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+U09BUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HX19FTEVNRU5UIj5TT0FQX0JJTkRJTkdfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRSI+U09BUF9CSU5ESU5HX19FTEVNRU5UX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fUkVRVUlSRUQiPlNPQVBfQklORElOR19fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19TVFlMRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fU1RZTEUiPlNPQVBfQklORElOR19fU1RZTEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJIj5TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+U09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZIj5TT0FQX0JPRFk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+U09BUF9CT0RZX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj5TT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19FTEVNRU5UIj5TT0FQX0JPRFlfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VMRU1FTlRfVFlQRSI+U09BUF9CT0RZX19FTEVNRU5UX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VQQVJUUyI+U09BUF9CT0RZX19FUEFSVFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJIj5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9fUkVRVUlSRUQiPlNPQVBfQk9EWV9fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19VU0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX1VTRSI+U09BUF9CT0RZX19VU0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCI+U09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFQiPlNPQVBfRkFVTFQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMiPlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX0VMRU1FTlQiPlNPQVBfRkFVTFRfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fRUxFTUVOVF9UWVBFIj5TT0FQX0ZBVUxUX19FTEVNRU5UX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX05BTUUiPlNPQVBfRkFVTFRfX05BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkiPlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0ZBVUxUX19SRVFVSVJFRCI+U09BUF9GQVVMVF9fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fVVNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fVVNFIj5TT0FQX0ZBVUxUX19VU0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj5TT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUiI+U09BUF9IRUFERVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlNPQVBfSEVBREVSX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fRUVOQ09ESU5HX1NUWUxFUyI+U09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fRUxFTUVOVCI+U09BUF9IRUFERVJfX0VMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19FTEVNRU5UX1RZUEUiPlNPQVBfSEVBREVSX19FTEVNRU5UX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VNRVNTQUdFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VNRVNTQUdFIj5TT0FQX0hFQURFUl9fRU1FU1NBR0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT45PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VQQVJUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VQQVJUIj5TT0FQX0hFQURFUl9fRVBBUlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFMiPlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fTUVTU0FHRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19NRVNTQUdFIj5TT0FQX0hFQURFUl9fTUVTU0FHRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19OQU1FU1BBQ0VfVVJJIj5TT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19QQVJUIj5TT0FQX0hFQURFUl9fUEFSVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fUkVRVUlSRUQiPlNPQVBfSEVBREVSX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fVVNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX1VTRSI+U09BUF9IRUFERVJfX1VTRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRSI+U09BUF9IRUFERVJfQkFTRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlNPQVBfSEVBREVSX0JBU0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUyI+U09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVCI+U09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEUiPlNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFIj5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX0VQQVJUIj5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEwPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UiPlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkkiPlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX1BBUlQiPlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRCI+U09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fVVNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fVVNFIj5TT0FQX0hFQURFUl9CQVNFX19VU0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UIj5TT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFQiPlNPQVBfSEVBREVSX0ZBVUxUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMiPlNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlQiPlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fRUxFTUVOVF9UWVBFIj5TT0FQX0hFQURFUl9GQVVMVF9fRUxFTUVOVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FTUVTU0FHRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19FTUVTU0FHRSI+U09BUF9IRUFERVJfRkFVTFRfX0VNRVNTQUdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+OTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19FUEFSVCI+U09BUF9IRUFERVJfRkFVTFRfX0VQQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9fTUVTU0FHRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19NRVNTQUdFIj5TT0FQX0hFQURFUl9GQVVMVF9fTUVTU0FHRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19OQU1FU1BBQ0VfVVJJIj5TT0FQX0hFQURFUl9GQVVMVF9fTkFNRVNQQUNFX1VSSTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9fUEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19QQVJUIj5TT0FQX0hFQURFUl9GQVVMVF9fUEFSVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fUkVRVUlSRUQiPlNPQVBfSEVBREVSX0ZBVUxUX19SRVFVSVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9fVVNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX1VTRSI+U09BUF9IRUFERVJfRkFVTFRfX1VTRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCI+U09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjExPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQiPlNPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT04iPlNPQVBfT1BFUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT05fX0VMRU1FTlQiPlNPQVBfT1BFUkFUSU9OX19FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFIj5TT0FQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX19SRVFVSVJFRCI+U09BUF9PUEVSQVRJT05fX1JFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJIj5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TVFlMRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX19TVFlMRSI+U09BUF9PUEVSQVRJT05fX1NUWUxFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5TT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjMiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuQklORElORyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0JJTkRJTkciPkJJTkRJTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuQklORElOR19BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjQklORElOR19BVFRSSUJVVEUiPkJJTkRJTkdfQVRUUklCVVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ImJpbmRpbmciPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNCSU5ESU5HX0VMRU1FTlRfVEFHIj5CSU5ESU5HX0VMRU1FTlRfVEFHPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ImJpbmRpbmciPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuREVGSU5JVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0RFRklOSVRJT04iPkRFRklOSVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuREVGSU5JVElPTl9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNERUZJTklUSU9OX0VMRU1FTlRfVEFHIj5ERUZJTklUSU9OX0VMRU1FTlRfVEFHPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ImRlZmluaXRpb25zIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNET0NVTUVOVEFUSU9OIj5ET0NVTUVOVEFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRyI+RE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJkb2N1bWVudGF0aW9uIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0VMRU1FTlRfQVRUUklCVVRFIj5FTEVNRU5UX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJlbGVtZW50IjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkVOQ09ESU5HX0FUVFJJQlVURSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNFTkNPRElOR19BVFRSSUJVVEUiPkVOQ09ESU5HX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJlbmNvZGluZyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5GQVVMVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0ZBVUxUIj5GQVVMVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5GQVVMVF9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNGQVVMVF9FTEVNRU5UX1RBRyI+RkFVTFRfRUxFTUVOVF9UQUc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iZmF1bHQiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuSU1QT1JUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjSU1QT1JUIj5JTVBPUlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuSU1QT1JUX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0lNUE9SVF9FTEVNRU5UX1RBRyI+SU1QT1JUX0VMRU1FTlRfVEFHPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ImltcG9ydCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5JTlBVVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0lOUFVUIj5JTlBVVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5JTlBVVF9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNJTlBVVF9FTEVNRU5UX1RBRyI+SU5QVVRfRUxFTUVOVF9UQUc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iaW5wdXQiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0xPQ0FUSU9OX0FUVFJJQlVURSI+TE9DQVRJT05fQVRUUklCVVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ImxvY2F0aW9uIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk1FU1NBR0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNNRVNTQUdFIj5NRVNTQUdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI01FU1NBR0VfQVRUUklCVVRFIj5NRVNTQUdFX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJtZXNzYWdlIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk1FU1NBR0VfRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjTUVTU0FHRV9FTEVNRU5UX1RBRyI+TUVTU0FHRV9FTEVNRU5UX1RBRzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJtZXNzYWdlIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI05BTUVfQVRUUklCVVRFIj5OQU1FX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJuYW1lIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjTkFNRVNQQUNFX0FUVFJJQlVURSI+TkFNRVNQQUNFX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJuYW1lc3BhY2UiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjT1BFUkFUSU9OIj5PUEVSQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuT1BFUkFUSU9OX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI09QRVJBVElPTl9FTEVNRU5UX1RBRyI+T1BFUkFUSU9OX0VMRU1FTlRfVEFHPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Im9wZXJhdGlvbiI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5PVVRQVVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNPVVRQVVQiPk9VVFBVVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5PVVRQVVRfRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjT1VUUFVUX0VMRU1FTlRfVEFHIj5PVVRQVVRfRUxFTUVOVF9UQUc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4ib3V0cHV0IjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlBBUkFNRVRFUl9PUkRFUl9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUEFSQU1FVEVSX09SREVSX0FUVFJJQlVURSI+UEFSQU1FVEVSX09SREVSX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJwYXJhbWV0ZXJPcmRlciI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5QQVJUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUEFSVCI+UEFSVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1BBUlRfRUxFTUVOVF9UQUciPlBBUlRfRUxFTUVOVF9UQUc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4icGFydCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5QT1JUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUE9SVCI+UE9SVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEwPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuUE9SVF9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQT1JUX0VMRU1FTlRfVEFHIj5QT1JUX0VMRU1FTlRfVEFHPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+InBvcnQiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuUE9SVF9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUE9SVF9UWVBFIj5QT1JUX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlBPUlRfVFlQRV9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQT1JUX1RZUEVfRUxFTUVOVF9UQUciPlBPUlRfVFlQRV9FTEVNRU5UX1RBRzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJwb3J0VHlwZSI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5SRVNPVVJDRV9VUklfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1JFU09VUkNFX1VSSV9BVFRSSUJVVEUiPlJFU09VUkNFX1VSSV9BVFRSSUJVVEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4icmVzb3VyY2VVUkkiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzE5OTkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzE5OTkiPlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8xOTk5PC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAwXzEwIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1NDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAwXzEwIj5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYSI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSI+U0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDE8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuU0VSVklDRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1NFUlZJQ0UiPlNFUlZJQ0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlNFUlZJQ0VfRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjU0VSVklDRV9FTEVNRU5UX1RBRyI+U0VSVklDRV9FTEVNRU5UX1RBRzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJzZXJ2aWNlIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlRBUkdFVE5BTUVTUEFDRV9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSI+VEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJ0YXJnZXROYW1lc3BhY2UiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjVFlQRV9BVFRSSUJVVEUiPlRZUEVfQVRUUklCVVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+InR5cGUiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuVFlQRVMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNUWVBFUyI+VFlQRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlRZUEVTX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1RZUEVTX0VMRU1FTlRfVEFHIj5UWVBFU19FTEVNRU5UX1RBRzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJ0eXBlcyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjV1NETF9OQU1FU1BBQ0VfVVJJIj5XU0RMX05BTUVTUEFDRV9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjWFNEX05BTUVTUEFDRV9VUkkiPlhTRF9OQU1FU1BBQ0VfVVJJPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjMiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkuRVJST1IiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNFUlJPUiI+RVJST1I8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUwiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNGQVRBTCI+RkFUQUw8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkuSU5GT1JNQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNJTkZPUk1BVElPTiI+SU5GT1JNQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkuV0FSTklORyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI1dBUk5JTkciPldBUk5JTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMyI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbC5DT05USU5VRV9PTl9MT0FEX0VSUk9SIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI0NPTlRJTlVFX09OX0xPQURfRVJST1IiPkNPTlRJTlVFX09OX0xPQURfRVJST1I8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iQ09OVElOVUVfT05fTE9BRF9FUlJPUiI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbC5UUkFDS19MT0NBVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNUUkFDS19MT0NBVElPTiI+VFJBQ0tfTE9DQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iVFJBQ0tfTE9DQVRJT04iPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwuVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVMiPlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsLldTRExfRU5DT0RJTkciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjV1NETF9FTkNPRElORyI+V1NETF9FTkNPRElORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJXU0RMX0VOQ09ESU5HIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsLldTRExfSkFYUF9DT05GSUciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjV1NETF9KQVhQX0NPTkZJRyI+V1NETF9KQVhQX0NPTkZJRzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJXU0RMX0pBWFBfQ09ORklHIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsLldTRExfSkFYUF9QT09MIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI1dTRExfSkFYUF9QT09MIj5XU0RMX0pBWFBfUE9PTDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJXU0RMX0pBWFBfUE9PTCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbC5XU0RMX1BST0dSRVNTX01PTklUT1IiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjV1NETF9QUk9HUkVTU19NT05JVE9SIj5XU0RMX1BST0dSRVNTX01PTklUT1I8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iV1NETF9QUk9HUkVTU19NT05JVE9SIjwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/Y29uc3RhbnQtdmFsdWVzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iY29uc3RhbnQtdmFsdWVzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9kZXByZWNhdGVkLWxpc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2RlcHJlY2F0ZWQtbGlzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTJhNmNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2RlcHJlY2F0ZWQtbGlzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLURlcHJlY2F0ZWQgTGlzdAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkRlcHJlY2F0ZWQgTGlzdCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9kZXByZWNhdGVkLWxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+RGVwcmVjYXRlZCBBUEk8L0I+PC9IMj4KLTwvQ0VOVEVSPgotPEhSIFNJWkU9IjQiIE5PU0hBREU+Ci08Qj5Db250ZW50czwvQj48VUw+Ci08L1VMPgotCi08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sP2RlcHJlY2F0ZWQtbGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaGVscC1kb2MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2hlbHAtZG9jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMTgxNTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaGVscC1kb2MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1BUEkgSGVscAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkFQSSBIZWxwIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9oZWxwLWRvYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMT4KLUhvdyBUaGlzIEFQSSBEb2N1bWVudCBJcyBPcmdhbml6ZWQ8L0gxPgotPC9DRU5URVI+Ci1UaGlzIEFQSSAoQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlKSBkb2N1bWVudCBoYXMgcGFnZXMgY29ycmVzcG9uZGluZyB0byB0aGUgaXRlbXMgaW4gdGhlIG5hdmlnYXRpb24gYmFyLCBkZXNjcmliZWQgYXMgZm9sbG93cy48SDM+Ci1PdmVydmlldzwvSDM+Ci08QkxPQ0tRVU9URT4KLQotPFA+Ci1UaGUgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj5PdmVydmlldzwvQT4gcGFnZSBpcyB0aGUgZnJvbnQgcGFnZSBvZiB0aGlzIEFQSSBkb2N1bWVudCBhbmQgcHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBwYWNrYWdlcyB3aXRoIGEgc3VtbWFyeSBmb3IgZWFjaC4gIFRoaXMgcGFnZSBjYW4gYWxzbyBjb250YWluIGFuIG92ZXJhbGwgZGVzY3JpcHRpb24gb2YgdGhlIHNldCBvZiBwYWNrYWdlcy48L0JMT0NLUVVPVEU+Ci08SDM+Ci1QYWNrYWdlPC9IMz4KLTxCTE9DS1FVT1RFPgotCi08UD4KLUVhY2ggcGFja2FnZSBoYXMgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGl0cyBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzLCB3aXRoIGEgc3VtbWFyeSBmb3IgZWFjaC4gVGhpcyBwYWdlIGNhbiBjb250YWluIGZvdXIgY2F0ZWdvcmllczo8VUw+Ci08TEk+SW50ZXJmYWNlcyAoaXRhbGljKTxMST5DbGFzc2VzPExJPkVudW1zPExJPkV4Y2VwdGlvbnM8TEk+RXJyb3JzPExJPkFubm90YXRpb24gVHlwZXM8L1VMPgotPC9CTE9DS1FVT1RFPgotPEgzPgotQ2xhc3MvSW50ZXJmYWNlPC9IMz4KLTxCTE9DS1FVT1RFPgotCi08UD4KLUVhY2ggY2xhc3MsIGludGVyZmFjZSwgbmVzdGVkIGNsYXNzIGFuZCBuZXN0ZWQgaW50ZXJmYWNlIGhhcyBpdHMgb3duIHNlcGFyYXRlIHBhZ2UuIEVhY2ggb2YgdGhlc2UgcGFnZXMgaGFzIHRocmVlIHNlY3Rpb25zIGNvbnNpc3Rpbmcgb2YgYSBjbGFzcy9pbnRlcmZhY2UgZGVzY3JpcHRpb24sIHN1bW1hcnkgdGFibGVzLCBhbmQgZGV0YWlsZWQgbWVtYmVyIGRlc2NyaXB0aW9uczo8VUw+Ci08TEk+Q2xhc3MgaW5oZXJpdGFuY2UgZGlhZ3JhbTxMST5EaXJlY3QgU3ViY2xhc3NlczxMST5BbGwgS25vd24gU3ViaW50ZXJmYWNlczxMST5BbGwgS25vd24gSW1wbGVtZW50aW5nIENsYXNzZXM8TEk+Q2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uPExJPkNsYXNzL2ludGVyZmFjZSBkZXNjcmlwdGlvbgotPFA+Ci08TEk+TmVzdGVkIENsYXNzIFN1bW1hcnk8TEk+RmllbGQgU3VtbWFyeTxMST5Db25zdHJ1Y3RvciBTdW1tYXJ5PExJPk1ldGhvZCBTdW1tYXJ5Ci08UD4KLTxMST5GaWVsZCBEZXRhaWw8TEk+Q29uc3RydWN0b3IgRGV0YWlsPExJPk1ldGhvZCBEZXRhaWw8L1VMPgotRWFjaCBzdW1tYXJ5IGVudHJ5IGNvbnRhaW5zIHRoZSBmaXJzdCBzZW50ZW5jZSBmcm9tIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBmb3IgdGhhdCBpdGVtLiBUaGUgc3VtbWFyeSBlbnRyaWVzIGFyZSBhbHBoYWJldGljYWwsIHdoaWxlIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuIFRoaXMgcHJlc2VydmVzIHRoZSBsb2dpY2FsIGdyb3VwaW5ncyBlc3RhYmxpc2hlZCBieSB0aGUgcHJvZ3JhbW1lci48L0JMT0NLUVVPVEU+Ci08L0JMT0NLUVVPVEU+Ci08SDM+Ci1Bbm5vdGF0aW9uIFR5cGU8L0gzPgotPEJMT0NLUVVPVEU+Ci0KLTxQPgotRWFjaCBhbm5vdGF0aW9uIHR5cGUgaGFzIGl0cyBvd24gc2VwYXJhdGUgcGFnZSB3aXRoIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6PFVMPgotPExJPkFubm90YXRpb24gVHlwZSBkZWNsYXJhdGlvbjxMST5Bbm5vdGF0aW9uIFR5cGUgZGVzY3JpcHRpb248TEk+UmVxdWlyZWQgRWxlbWVudCBTdW1tYXJ5PExJPk9wdGlvbmFsIEVsZW1lbnQgU3VtbWFyeTxMST5FbGVtZW50IERldGFpbDwvVUw+Ci08L0JMT0NLUVVPVEU+Ci08L0JMT0NLUVVPVEU+Ci08SDM+Ci1FbnVtPC9IMz4KLTxCTE9DS1FVT1RFPgotCi08UD4KLUVhY2ggZW51bSBoYXMgaXRzIG93biBzZXBhcmF0ZSBwYWdlIHdpdGggdGhlIGZvbGxvd2luZyBzZWN0aW9uczo8VUw+Ci08TEk+RW51bSBkZWNsYXJhdGlvbjxMST5FbnVtIGRlc2NyaXB0aW9uPExJPkVudW0gQ29uc3RhbnQgU3VtbWFyeTxMST5FbnVtIENvbnN0YW50IERldGFpbDwvVUw+Ci08L0JMT0NLUVVPVEU+Ci08SDM+Ci1Vc2U8L0gzPgotPEJMT0NLUVVPVEU+Ci1FYWNoIGRvY3VtZW50ZWQgcGFja2FnZSwgY2xhc3MgYW5kIGludGVyZmFjZSBoYXMgaXRzIG93biBVc2UgcGFnZS4gIFRoaXMgcGFnZSBkZXNjcmliZXMgd2hhdCBwYWNrYWdlcywgY2xhc3NlcywgbWV0aG9kcywgY29uc3RydWN0b3JzIGFuZCBmaWVsZHMgdXNlIGFueSBwYXJ0IG9mIHRoZSBnaXZlbiBjbGFzcyBvciBwYWNrYWdlLiBHaXZlbiBhIGNsYXNzIG9yIGludGVyZmFjZSBBLCBpdHMgVXNlIHBhZ2UgaW5jbHVkZXMgc3ViY2xhc3NlcyBvZiBBLCBmaWVsZHMgZGVjbGFyZWQgYXMgQSwgbWV0aG9kcyB0aGF0IHJldHVybiBBLCBhbmQgbWV0aG9kcyBhbmQgY29uc3RydWN0b3JzIHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIEEuICBZb3UgY2FuIGFjY2VzcyB0aGlzIHBhZ2UgYnkgZmlyc3QgZ29pbmcgdG8gdGhlIHBhY2thZ2UsIGNsYXNzIG9yIGludGVyZmFjZSwgdGhlbiBjbGlja2luZyBvbiB0aGUgIlVzZSIgbGluayBpbiB0aGUgbmF2aWdhdGlvbiBiYXIuPC9CTE9DS1FVT1RFPgotPEgzPgotVHJlZSAoQ2xhc3MgSGllcmFyY2h5KTwvSDM+Ci08QkxPQ0tRVU9URT4KLVRoZXJlIGlzIGEgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj5DbGFzcyBIaWVyYXJjaHk8L0E+IHBhZ2UgZm9yIGFsbCBwYWNrYWdlcywgcGx1cyBhIGhpZXJhcmNoeSBmb3IgZWFjaCBwYWNrYWdlLiBFYWNoIGhpZXJhcmNoeSBwYWdlIGNvbnRhaW5zIGEgbGlzdCBvZiBjbGFzc2VzIGFuZCBhIGxpc3Qgb2YgaW50ZXJmYWNlcy4gVGhlIGNsYXNzZXMgYXJlIG9yZ2FuaXplZCBieSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUgc3RhcnRpbmcgd2l0aCA8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPi4gVGhlIGludGVyZmFjZXMgZG8gbm90IGluaGVyaXQgZnJvbSA8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPi48VUw+Ci08TEk+V2hlbiB2aWV3aW5nIHRoZSBPdmVydmlldyBwYWdlLCBjbGlja2luZyBvbiAiVHJlZSIgZGlzcGxheXMgdGhlIGhpZXJhcmNoeSBmb3IgYWxsIHBhY2thZ2VzLjxMST5XaGVuIHZpZXdpbmcgYSBwYXJ0aWN1bGFyIHBhY2thZ2UsIGNsYXNzIG9yIGludGVyZmFjZSBwYWdlLCBjbGlja2luZyAiVHJlZSIgZGlzcGxheXMgdGhlIGhpZXJhcmNoeSBmb3Igb25seSB0aGF0IHBhY2thZ2UuPC9VTD4KLTwvQkxPQ0tRVU9URT4KLTxIMz4KLURlcHJlY2F0ZWQgQVBJPC9IMz4KLTxCTE9DS1FVT1RFPgotVGhlIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkIEFQSTwvQT4gcGFnZSBsaXN0cyBhbGwgb2YgdGhlIEFQSSB0aGF0IGhhdmUgYmVlbiBkZXByZWNhdGVkLiBBIGRlcHJlY2F0ZWQgQVBJIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLCBnZW5lcmFsbHkgZHVlIHRvIGltcHJvdmVtZW50cywgYW5kIGEgcmVwbGFjZW1lbnQgQVBJIGlzIHVzdWFsbHkgZ2l2ZW4uIERlcHJlY2F0ZWQgQVBJcyBtYXkgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgaW1wbGVtZW50YXRpb25zLjwvQkxPQ0tRVU9URT4KLTxIMz4KLUluZGV4PC9IMz4KLTxCTE9DS1FVT1RFPgotVGhlIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+SW5kZXg8L0E+IGNvbnRhaW5zIGFuIGFscGhhYmV0aWMgbGlzdCBvZiBhbGwgY2xhc3NlcywgaW50ZXJmYWNlcywgY29uc3RydWN0b3JzLCBtZXRob2RzLCBhbmQgZmllbGRzLjwvQkxPQ0tRVU9URT4KLTxIMz4KLVByZXYvTmV4dDwvSDM+Ci1UaGVzZSBsaW5rcyB0YWtlIHlvdSB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBjbGFzcywgaW50ZXJmYWNlLCBwYWNrYWdlLCBvciByZWxhdGVkIHBhZ2UuPEgzPgotRnJhbWVzL05vIEZyYW1lczwvSDM+Ci1UaGVzZSBsaW5rcyBzaG93IGFuZCBoaWRlIHRoZSBIVE1MIGZyYW1lcy4gIEFsbCBwYWdlcyBhcmUgYXZhaWxhYmxlIHdpdGggb3Igd2l0aG91dCBmcmFtZXMuCi08UD4KLTxIMz4KLVNlcmlhbGl6ZWQgRm9ybTwvSDM+Ci1FYWNoIHNlcmlhbGl6YWJsZSBvciBleHRlcm5hbGl6YWJsZSBjbGFzcyBoYXMgYSBkZXNjcmlwdGlvbiBvZiBpdHMgc2VyaWFsaXphdGlvbiBmaWVsZHMgYW5kIG1ldGhvZHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgb2YgaW50ZXJlc3QgdG8gcmUtaW1wbGVtZW50b3JzLCBub3QgdG8gZGV2ZWxvcGVycyB1c2luZyB0aGUgQVBJLiBXaGlsZSB0aGVyZSBpcyBubyBsaW5rIGluIHRoZSBuYXZpZ2F0aW9uIGJhciwgeW91IGNhbiBnZXQgdG8gdGhpcyBpbmZvcm1hdGlvbiBieSBnb2luZyB0byBhbnkgc2VyaWFsaXplZCBjbGFzcyBhbmQgY2xpY2tpbmcgIlNlcmlhbGl6ZWQgRm9ybSIgaW4gdGhlICJTZWUgYWxzbyIgc2VjdGlvbiBvZiB0aGUgY2xhc3MgZGVzY3JpcHRpb24uCi08UD4KLTxIMz4KLUNvbnN0YW50IEZpZWxkIFZhbHVlczwvSDM+Ci1UaGUgPGEgaHJlZj0iY29uc3RhbnQtdmFsdWVzLmh0bWwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT4gcGFnZSBsaXN0cyB0aGUgc3RhdGljIGZpbmFsIGZpZWxkcyBhbmQgdGhlaXIgdmFsdWVzLgotPFA+Ci08Rk9OVCBTSVpFPSItMSI+Ci08RU0+Ci1UaGlzIGhlbHAgZmlsZSBhcHBsaWVzIHRvIEFQSSBkb2N1bWVudGF0aW9uIGdlbmVyYXRlZCB1c2luZyB0aGUgc3RhbmRhcmQgZG9jbGV0LjwvRU0+Ci08L0ZPTlQ+Ci08QlI+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9oZWxwLWRvYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZTRjZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUEtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJBLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgTEVUVEVSJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yLmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0xLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9BXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+QTwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sI2FkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkiPjxCPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYXJ0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+PEI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+Ci08REQ+QWRkcyBhbiBFeHRlbnNpYmlsaXR5RWxlbWVudCB0byB0aGUgJzxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCNhZGRNSU1FUGFydChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCkiPjxCPmFkZE1JTUVQYXJ0KE1JTUVQYXJ0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI2F0dGFjaGVkKEVPYmplY3QpIj48Qj5hdHRhY2hlZChFT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIExFVFRFUiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzYjBkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotTC1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkwtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOS5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMS5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9MXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+TDwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0xJU1QiPjxCPkxJU1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkxpc3Q8L2VtPicgZGF0YSB0eXBlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTElTVCI+PEI+TElTVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5MaXN0PC9lbT4nIGRhdGEgdHlwZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0xPQ0FUSU9OX0FUVFJJQlVURSI+PEI+TE9DQVRJT05fQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJsb2NhdGlvbiI8L2NvZGU+LgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOS5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMS5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTEuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTExLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YzdkMTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1NLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTS1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMC5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9NXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+TTwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TWVzc2FnZTwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI01FU1NBR0UiPjxCPk1FU1NBR0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRSI+PEI+TUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NZXNzYWdlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRSI+PEI+TUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+TWVzc2FnZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+TUVTU0FHRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PEI+TUVTU0FHRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FTEVNRU5UIj48Qj5NRVNTQUdFX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRV9fRVBBUlRTIj48Qj5NRVNTQUdFX19FUEFSVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FUEFSVFMiPjxCPk1FU1NBR0VfX0VQQVJUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNRVNTQUdFX19RTkFNRSI+PEI+TUVTU0FHRV9fUU5BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19RTkFNRSI+PEI+TUVTU0FHRV9fUU5BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRV9fVU5ERUZJTkVEIj48Qj5NRVNTQUdFX19VTkRFRklORUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9fVU5ERUZJTkVEIj48Qj5NRVNTQUdFX19VTkRFRklORUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNNRVNTQUdFX0FUVFJJQlVURSI+PEI+TUVTU0FHRV9BVFRSSUJVVEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+Im1lc3NhZ2UiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNNRVNTQUdFX0VMRU1FTlRfVEFHIj48Qj5NRVNTQUdFX0VMRU1FTlRfVEFHPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im1lc3NhZ2UiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfRkVBVFVSRV9DT1VOVCI+PEI+TUVTU0FHRV9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1lc3NhZ2U8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI01FU1NBR0VfUkVGRVJFTkNFIj48Qj5NRVNTQUdFX1JFRkVSRU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfUkVGRVJFTkNFIj48Qj5NRVNTQUdFX1JFRkVSRU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5NRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPk1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UIj48Qj5NRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI01FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSI+PEI+TUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFIj48Qj5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUiPjxCPk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSI+PEI+TUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UIj48Qj5NRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5NZXNzYWdlUmVmZXJlbmNlPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sI01JTUVfQ09OVEVOVCI+PEI+TUlNRV9DT05URU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkNvbnRlbnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UIj48Qj5NSU1FX0NPTlRFTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkNvbnRlbnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPk1JTUVfQ09OVEVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UX19FTEVNRU5UIj48Qj5NSU1FX0NPTlRFTlRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9DT05URU5UX19FTEVNRU5UX1RZUEUiPjxCPk1JTUVfQ09OVEVOVF9fRUxFTUVOVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9DT05URU5UX19FUEFSVCI+PEI+TUlNRV9DT05URU5UX19FUEFSVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX0NPTlRFTlRfX0VQQVJUIj48Qj5NSU1FX0NPTlRFTlRfX0VQQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX0NPTlRFTlRfX1JFUVVJUkVEIj48Qj5NSU1FX0NPTlRFTlRfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNSU1FX0NPTlRFTlRfX1RZUEUiPjxCPk1JTUVfQ09OVEVOVF9fVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fVFlQRSI+PEI+TUlNRV9DT05URU5UX19UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UIj48Qj5NSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Db250ZW50PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9NSU1FX1hNTCI+PEI+TUlNRV9NSU1FX1hNTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NaW1lIFhtbDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MIj48Qj5NSU1FX01JTUVfWE1MPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5NaW1lIFhtbDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPk1JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfX0VMRU1FTlQiPjxCPk1JTUVfTUlNRV9YTUxfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTF9fRUxFTUVOVF9UWVBFIj48Qj5NSU1FX01JTUVfWE1MX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNSU1FX01JTUVfWE1MX19FUEFSVCI+PEI+TUlNRV9NSU1FX1hNTF9fRVBBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTF9fRVBBUlQiPjxCPk1JTUVfTUlNRV9YTUxfX0VQQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MX19SRVFVSVJFRCI+PEI+TUlNRV9NSU1FX1hNTF9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+PEI+TUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1pbWUgWG1sPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+PEI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEIj48Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlQiPjxCPk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVF9UWVBFIj48Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUIj48Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNSU1FIFBhcnQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUIj48Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNSU1FIFBhcnQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fUkVRVUlSRUQiPjxCPk1JTUVfTVVMVElQQVJUX1JFTEFURURfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPjxCPk1JTUVfTVVMVElQQVJUX1JFTEFURURfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sI01JTUVfUEFSVCI+PEI+TUlNRV9QQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUIj48Qj5NSU1FX1BBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPk1JTUVfUEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PEI+TUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX19FTEVNRU5UIj48Qj5NSU1FX1BBUlRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX19FTEVNRU5UX1RZUEUiPjxCPk1JTUVfUEFSVF9fRUxFTUVOVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX19SRVFVSVJFRCI+PEI+TUlNRV9QQVJUX19SRVFVSVJFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQiPjxCPk1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVDb250ZW50PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbnRlbnQ8L2I+PC9lbT4nPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRUZhY3Rvcnk8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48REQ+VGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU1pbWVYbWw8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWltZSBYbWw8L2I+PC9lbT4nPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhY2thZ2U8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48REQ+VGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48REQ+RGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIAotICAgZWFjaCBjbGFzcywKLSAgIGVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLAotICAgZWFjaCBlbnVtLAotICAgYW5kIGVhY2ggZGF0YSB0eXBlCi0gCi0gPCE8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FUGFydDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JzwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0xMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTExLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk1NTk1MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU4tSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJOLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTExLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0xMi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotPEEgTkFNRT0iX05fIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5OPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjTkFNRV9BVFRSSUJVVEUiPjxCPk5BTUVfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5hbWVzcGFjZTwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZXNwYWNlPC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNOQU1FU1BBQ0UiPjxCPk5BTUVTUEFDRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5OYW1lc3BhY2U8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNOQU1FU1BBQ0UiPjxCPk5BTUVTUEFDRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+TmFtZXNwYWNlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTkFNRVNQQUNFX19QUkVGSVgiPjxCPk5BTUVTUEFDRV9fUFJFRklYPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI05BTUVTUEFDRV9fUFJFRklYIj48Qj5OQU1FU1BBQ0VfX1BSRUZJWDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVmaXg8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTkFNRVNQQUNFX19VUkkiPjxCPk5BTUVTUEFDRV9fVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI05BTUVTUEFDRV9fVVJJIj48Qj5OQU1FU1BBQ0VfX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI05BTUVTUEFDRV9BVFRSSUJVVEUiPjxCPk5BTUVTUEFDRV9BVFRSSUJVVEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+Im5hbWVzcGFjZSI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTkFNRVNQQUNFX0ZFQVRVUkVfQ09VTlQiPjxCPk5BTUVTUEFDRV9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5hbWVzcGFjZTwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI25vZGVUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5ub2RlVHlwZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+UmV0dXJucyBhIG5vZGUgdHlwZSBnaXZlbiB0aGUgU3RyaW5nIG5hbWUgb2YgZWxlbWVudCB0YWcuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUob3JnLnczYy5kb20uTm9kZSkiPjxCPm5vZGVUeXBlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+UmV0dXJucyBhIG5vZGUgdHlwZSBkZWZpbmVkIGluIFdTRExDb25zdGFudHMgZ2l2ZW4gdGhlIERPTSBub2RlLgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2I1OGNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTEzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotTy1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Ik8tSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfT18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPk88L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+T3BlcmF0aW9uPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNPUEVSQVRJT04iPjxCPk9QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvcGVyYXRpb24iPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI09QRVJBVElPTiI+PEI+T1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTiI+PEI+T1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+T1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPk9QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNPUEVSQVRJT05fX0VGQVVMVFMiPjxCPk9QRVJBVElPTl9fRUZBVUxUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0VGQVVMVFMiPjxCPk9QRVJBVElPTl9fRUZBVUxUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX19FSU5QVVQiPjxCPk9QRVJBVElPTl9fRUlOUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRUlOUFVUIj48Qj5PUEVSQVRJT05fX0VJTlBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19FTEVNRU5UIj48Qj5PUEVSQVRJT05fX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNPUEVSQVRJT05fX0VPVVRQVVQiPjxCPk9QRVJBVElPTl9fRU9VVFBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19FT1VUUFVUIj48Qj5PUEVSQVRJT05fX0VPVVRQVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkciPjxCPk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFyYW1ldGVyIE9yZGVyaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkciPjxCPk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFyYW1ldGVyIE9yZGVyaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX19OQU1FIj48Qj5PUEVSQVRJT05fX05BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fTkFNRSI+PEI+T1BFUkFUSU9OX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX19TVFlMRSI+PEI+T1BFUkFUSU9OX19TVFlMRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fU1RZTEUiPjxCPk9QRVJBVElPTl9fU1RZTEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX19VTkRFRklORUQiPjxCPk9QRVJBVElPTl9fVU5ERUZJTkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fVU5ERUZJTkVEIj48Qj5PUEVSQVRJT05fX1VOREVGSU5FRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI09QRVJBVElPTl9FTEVNRU5UX1RBRyI+PEI+T1BFUkFUSU9OX0VMRU1FTlRfVEFHPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im9wZXJhdGlvbiI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjxCPk9QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9wZXJhdGlvbjwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX1RZUEUiPjxCPk9QRVJBVElPTl9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT4nIGRhdGEgdHlwZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX1RZUEUiPjxCPk9QRVJBVElPTl9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPiAtIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw8REQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0I+PC9BPiAtIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPEREPiZuYnNwOzxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQj48L0E+IC0gcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8REQ+Jm5ic3A7PERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvQT4gLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDxERD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9CPjwvQT4gLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8REQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk91dHB1dDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3V0cHV0PC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjT1VUUFVUIj48Qj5PVVRQVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3V0cHV0IjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNPVVRQVVQiPjxCPk9VVFBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5PdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVQiPjxCPk9VVFBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+T3V0cHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPk9VVFBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1VUUFVUX19FTEVNRU5UIj48Qj5PVVRQVVRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0VNRVNTQUdFIj48Qj5PVVRQVVRfX0VNRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09VVFBVVF9fTkFNRSI+PEI+T1VUUFVUX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI09VVFBVVF9FTEVNRU5UX1RBRyI+PEI+T1VUUFVUX0VMRU1FTlRfVEFHPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im91dHB1dCI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1VUUFVUX0ZFQVRVUkVfQ09VTlQiPjxCPk9VVFBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk91dHB1dDwvZW0+JyBjbGFzcwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTEzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2NjOGY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotUC1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlAtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfUF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlA8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQQVJBTUVURVJfT1JERVJfQVRUUklCVVRFIj48Qj5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJwYXJhbWV0ZXJPcmRlciI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3BhcnNlKG9yZy54bWwuc2F4LklucHV0U291cmNlKSI+PEI+cGFyc2UoSW5wdXRTb3VyY2UpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD5QYXJzZXMgdGhlIFhNTCBjb250ZW50IHJlYWQgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFtLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UGFydDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1BBUlQiPjxCPlBBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icGFydCI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUEFSVCI+PEI+UEFSVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5QYXJ0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVCI+PEI+UEFSVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+UEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PEI+UEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTEVNRU5UIj48Qj5QQVJUX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTiI+PEI+UEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTiI+PEI+UEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BBUlRfX0VMRU1FTlRfTkFNRSI+PEI+UEFSVF9fRUxFTUVOVF9OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0VMRU1FTlRfTkFNRSI+PEI+UEFSVF9fRUxFTUVOVF9OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQQVJUX19FTUVTU0FHRSI+PEI+UEFSVF9fRU1FU1NBR0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTUVTU0FHRSI+PEI+UEFSVF9fRU1FU1NBR0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUEFSVF9fTkFNRSI+PEI+UEFSVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9fTkFNRSI+PEI+UEFSVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BBUlRfX1RZUEVfREVGSU5JVElPTiI+PEI+UEFSVF9fVFlQRV9ERUZJTklUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGUgRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX1RZUEVfREVGSU5JVElPTiI+PEI+UEFSVF9fVFlQRV9ERUZJTklUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQQVJUX19UWVBFX05BTUUiPjxCPlBBUlRfX1RZUEVfTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19UWVBFX05BTUUiPjxCPlBBUlRfX1RZUEVfTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1BBUlRfRUxFTUVOVF9UQUciPjxCPlBBUlRfRUxFTUVOVF9UQUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icGFydCI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9GRUFUVVJFX0NPVU5UIj48Qj5QQVJUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UG9ydDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydDwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1BPUlQiPjxCPlBPUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydCI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUE9SVCI+PEI+UE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5Qb3J0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVCI+PEI+UE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+UG9ydDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+UE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQT1JUX19FQklORElORyI+PEI+UE9SVF9fRUJJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX19FQklORElORyI+PEI+UE9SVF9fRUJJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPlBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9fRUxFTUVOVCI+PEI+UE9SVF9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BPUlRfX05BTUUiPjxCPlBPUlRfX05BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfX05BTUUiPjxCPlBPUlRfX05BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUE9SVF9FTEVNRU5UX1RBRyI+PEI+UE9SVF9FTEVNRU5UX1RBRzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0IjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX0ZFQVRVUkVfQ09VTlQiPjxCPlBPUlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3J0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUE9SVF9UWVBFIj48Qj5QT1JUX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydFR5cGUiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BPUlRfVFlQRSI+PEI+UE9SVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlBvcnQgVHlwZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfVFlQRSI+PEI+UE9SVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5Qb3J0IFR5cGU8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+UE9SVF9UWVBFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfVFlQRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPlBPUlRfVFlQRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX0VMRU1FTlQiPjxCPlBPUlRfVFlQRV9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BPUlRfVFlQRV9fRU9QRVJBVElPTlMiPjxCPlBPUlRfVFlQRV9fRU9QRVJBVElPTlM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfVFlQRV9fRU9QRVJBVElPTlMiPjxCPlBPUlRfVFlQRV9fRU9QRVJBVElPTlM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQT1JUX1RZUEVfX1FOQU1FIj48Qj5QT1JUX1RZUEVfX1FOQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19RTkFNRSI+PEI+UE9SVF9UWVBFX19RTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQT1JUX1RZUEVfX1VOREVGSU5FRCI+PEI+UE9SVF9UWVBFX19VTkRFRklORUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19VTkRFRklORUQiPjxCPlBPUlRfVFlQRV9fVU5ERUZJTkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUE9SVF9UWVBFX0VMRU1FTlRfVEFHIj48Qj5QT1JUX1RZUEVfRUxFTUVOVF9UQUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydFR5cGUiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj48Qj5QT1JUX1RZUEVfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3J0IFR5cGU8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Qb3J0VHlwZTwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydCBUeXBlPC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjcHJvY2Vzc2luZ0luc3RydWN0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0xNC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhhYmExYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVEtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJRLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0xNS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotPEEgTkFNRT0iX1FfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5RPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNRTkFNRSI+PEI+UU5BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNRTkFNRSI+PEI+UU5BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGRhdGEgdHlwZQotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE1Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE2Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTk1YzUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotUi1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlItSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE2Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTYuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfUl8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlI8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjcmVnaXN0ZXJGYWN0b3J5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KSI+PEI+cmVnaXN0ZXJGYWN0b3J5KFN0cmluZywgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3Jlc29sdmVFbnRpdHkoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPnJlc29sdmVFbnRpdHkoU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNSRVNPVVJDRV9VUklfQVRUUklCVVRFIj48Qj5SRVNPVVJDRV9VUklfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJyZXNvdXJjZVVSSSI8L2NvZGU+LgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE2Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTYuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xNy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmY1YzRkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE3Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotUy1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlMtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE3Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfU18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlM8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMTk5OSI+PEI+U0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzE5OTk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMCI+PEI+U0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDBfMTA8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSI+PEI+U0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDE8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNzZXJpYWxpemUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy53M2MuZG9tLkRvY3VtZW50KSI+PEI+c2VyaWFsaXplKE91dHB1dFN0cmVhbSwgRG9jdW1lbnQpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjc2VyaWFsaXplKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcudzNjLmRvbS5Eb2N1bWVudCwgamF2YS5sYW5nLlN0cmluZykiPjxCPnNlcmlhbGl6ZShPdXRwdXRTdHJlYW0sIERvY3VtZW50LCBTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjc2VyaWFsaXplKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcudzNjLmRvbS5FbGVtZW50KSI+PEI+c2VyaWFsaXplKE91dHB1dFN0cmVhbSwgRWxlbWVudCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlSW1wbDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNzZXJpYWxpemUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXJpYWxpemUoT3V0cHV0U3RyZWFtLCBFbGVtZW50LCBTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXJ2aWNlPC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjU0VSVklDRSI+PEI+U0VSVklDRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJzZXJ2aWNlIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTRVJWSUNFIj48Qj5TRVJWSUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlNlcnZpY2U8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFIj48Qj5TRVJWSUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5TZXJ2aWNlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjU0VSVklDRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5TRVJWSUNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5TRVJWSUNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX0VMRU1FTlQiPjxCPlNFUlZJQ0VfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTRVJWSUNFX19FUE9SVFMiPjxCPlNFUlZJQ0VfX0VQT1JUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX0VQT1JUUyI+PEI+U0VSVklDRV9fRVBPUlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1NFUlZJQ0VfX1FOQU1FIj48Qj5TRVJWSUNFX19RTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX1FOQU1FIj48Qj5TRVJWSUNFX19RTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTRVJWSUNFX19VTkRFRklORUQiPjxCPlNFUlZJQ0VfX1VOREVGSU5FRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19VTkRFRklORUQiPjxCPlNFUlZJQ0VfX1VOREVGSU5FRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1NFUlZJQ0VfRUxFTUVOVF9UQUciPjxCPlNFUlZJQ0VfRUxFTUVOVF9UQUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ic2VydmljZSI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjU0VSVklDRV9GRUFUVVJFX0NPVU5UIj48Qj5TRVJWSUNFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2VydmljZTwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjc2V0Q29sdW1uKGludCkiPjxCPnNldENvbHVtbihpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08REQ+U2V0cyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjb2x1bW4gYXR0cmlidXRlLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXRDb250YWluZXIoamF2YS5sYW5nLk9iamVjdCkiPjxCPnNldENvbnRhaW5lcihPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWM8L0E+Ci08REQ+U2V0cyB0aGUgQ29udGFpbmVyIG9mIHRoZSBlcnJvcgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjc2V0Q29udGFpbmVyKGphdmEubGFuZy5PYmplY3QpIj48Qj5zZXRDb250YWluZXIoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNzZXREb2N1bWVudChvcmcudzNjLmRvbS5Eb2N1bWVudCkiPjxCPnNldERvY3VtZW50KERvY3VtZW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4KLTxERD5TZXRzIGEgVzNDIERPTSBEb2N1bWVudCB0byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgdXAgYSBET00gRWxlbWVudCB0cmVlIGZvciB0aGUgV1NETCBtb2RlbC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj48Qj5zZXREb2N1bWVudGF0aW9uRWxlbWVudChFbGVtZW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj48Q09ERT48ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjc2V0RG9jdW1lbnRMb2NhdG9yKG9yZy54bWwuc2F4LkxvY2F0b3IpIj48Qj5zZXREb2N1bWVudExvY2F0b3IoTG9jYXRvcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNzZXRFQmluZGluZyhvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nKSI+PEI+c2V0RUJpbmRpbmcoQmluZGluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0RUJpbmRpbmcoKSI+PENPREU+PGVtPkVCaW5kaW5nPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI3NldEVCaW5kaW5nSW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0KSI+PEI+c2V0RUJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIElucHV0PC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI3NldEVCaW5kaW5nT3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQpIj48Qj5zZXRFQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ09wZXJhdGlvbjwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ091dHB1dCgpIj48Q09ERT48ZW0+RUJpbmRpbmcgT3V0cHV0PC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjc2V0RURlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPjxCPnNldEVEZWZpbml0aW9uKERlZmluaXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkltcG9ydDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVEZWZpbml0aW9uKCkiPjxDT0RFPjxlbT5FRGVmaW5pdGlvbjwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI3NldEVGYXVsdChvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCkiPjxCPnNldEVGYXVsdChGYXVsdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0ZhdWx0PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0RUZhdWx0KCkiPjxDT0RFPjxlbT5FRmF1bHQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNzZXRFSW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpIj48Qj5zZXRFSW5wdXQoSW5wdXQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI2dldEVJbnB1dCgpIj48Q09ERT48ZW0+RUlucHV0PC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+PEI+c2V0RUlucHV0KElucHV0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PcGVyYXRpb248L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+PGVtPkVJbnB1dDwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+PEI+c2V0RWxlbWVudChFbGVtZW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPjxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldEVsZW1lbnREZWNsYXJhdGlvbihvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uKSI+PEI+c2V0RWxlbWVudERlY2xhcmF0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkiPjxDT0RFPjxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldEVsZW1lbnROYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5zZXRFbGVtZW50TmFtZShRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudE5hbWUoKSI+PENPREU+PGVtPkVsZW1lbnQgTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0RWxlbWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldEVsZW1lbnRUeXBlKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj48Q09ERT48ZW0+RWxlbWVudCBUeXBlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPjxCPnNldEVNZXNzYWdlKE1lc3NhZ2UpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFTWVzc2FnZSgpIj48Q09ERT48ZW0+RU1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPjxCPnNldEVNZXNzYWdlKE1lc3NhZ2UpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+PEI+c2V0RU1lc3NhZ2UoTWVzc2FnZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj48Qj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKERlZmluaXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+Ci08REQ+U2V0cyB0aGUgZW5jbG9zaW5nIGRlZmluaXRpb24gb2YgdGhpcyBXU0RMIGVsZW1lbnQuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI3NldEVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRFbmNvZGluZyhTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVuY29kaW5nKCkiPjxDT0RFPjxlbT5FbmNvZGluZzwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldEVuY29kaW5nU3R5bGVzKGphdmEudXRpbC5MaXN0KSI+PEI+c2V0RW5jb2RpbmdTdHlsZXMoTGlzdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjc2V0RU9wZXJhdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24pIj48Qj5zZXRFT3BlcmF0aW9uKE9wZXJhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPcGVyYXRpb248L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RU9wZXJhdGlvbigpIj48Q09ERT48ZW0+RU9wZXJhdGlvbjwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNzZXRFT3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCkiPjxCPnNldEVPdXRwdXQoT3V0cHV0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNnZXRFT3V0cHV0KCkiPjxDT0RFPjxlbT5FT3V0cHV0PC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0RU91dHB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQpIj48Qj5zZXRFT3V0cHV0KE91dHB1dCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RU91dHB1dCgpIj48Q09ERT48ZW0+RU91dHB1dDwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI3NldEVQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpIj48Qj5zZXRFUGFydChQYXJ0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVDb250ZW50PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjc2V0RVBhcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCkiPjxCPnNldEVQYXJ0KFBhcnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU1pbWVYbWw8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+PEI+c2V0RVBhcnQoUGFydCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPjxlbT5FUGFydDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNzZXRFUG9ydFR5cGUob3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUpIj48Qj5zZXRFUG9ydFR5cGUoUG9ydFR5cGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVQb3J0VHlwZSgpIj48Q09ERT48ZW0+RVBvcnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldEVTY2hlbWEob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSkiPjxCPnNldEVTY2hlbWEoWFNEU2NoZW1hKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRFU2NoZW1hKCkiPjxDT0RFPjxlbT5FU2NoZW1hPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI3NldEVUeXBlcyhvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcykiPjxCPnNldEVUeXBlcyhUeXBlcyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPjxDT0RFPjxlbT5FVHlwZXM8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNzZXRGYXVsdChqYXZheC53c2RsLkZhdWx0KSI+PEI+c2V0RmF1bHQoRmF1bHQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdGYXVsdDwvQT4KLTxERD5UaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVGYXVsdChGYXVsdCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI3NldElucHV0KGphdmF4LndzZGwuSW5wdXQpIj48Qj5zZXRJbnB1dChJbnB1dCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPgotPEREPlRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgc2V0RUlucHV0KElucHV0KSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI3NldEtleShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0S2V5KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT4KLTxERD5TZXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGtleS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI3NldEtleShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0S2V5KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI3NldExpbmUoaW50KSI+PEI+c2V0TGluZShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI3NldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRMb2NhdGlvbihTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldExvY2F0aW9uKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbjwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjc2V0TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykiPjxCPnNldExvY2F0aW9uKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbG9hY3Rpb24gYXR0cmlidXRlLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sI3NldExvY2F0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRMb2NhdGlvblVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEFkZHJlc3M8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCNzZXRMb2NhdGlvblVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0TG9jYXRpb25VUkkoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI3NldExvY2F0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRMb2NhdGlvblVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEFkZHJlc3M8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjc2V0TG9jYXRpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldExvY2F0aW9uVVJJKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldE1lc3NhZ2UoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldE1lc3NhZ2UoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRNZXNzYWdlKCkiPjxDT0RFPjxlbT5NZXNzYWdlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNzZXRNZXNzYWdlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRNZXNzYWdlKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT4KLTxERD5TZXRzIGEgbmV3IHZhbHVlIGZvciB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldE5hbWUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldE5hbWUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0TmFtZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0TmFtZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0TmFtZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0TmFtZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXROYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXROYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXROYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI3NldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0TmFtZXNwYWNlVVJJKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNzZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldE5hbWVzcGFjZVVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYXVsdDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldE5hbWVzcGFjZVVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNzZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldE5hbWVzcGFjZVVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkltcG9ydDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXROb2RlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5zZXROb2RlKE5vZGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWM8L0E+Ci08REQ+U2V0cyB0aGUgRE9NIE5vZGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjc2V0Tm9kZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+c2V0Tm9kZShOb2RlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNzZXRPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQpIj48Qj5zZXRPdXRwdXQoT3V0cHV0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4KLTxERD5UaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVPdXRwdXQoT3V0cHV0KSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjc2V0UGFydChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0UGFydChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUNvbnRlbnQ8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjc2V0UGFydChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0UGFydChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU1pbWVYbWw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0UGFydChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0UGFydChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRQYXJ0KCkiPjxDT0RFPjxlbT5QYXJ0PC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjc2V0UHJlZml4KGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRQcmVmaXgoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5OYW1lc3BhY2U8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCNnZXRQcmVmaXgoKSI+PENPREU+PGVtPlByZWZpeDwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNzZXRRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+c2V0UU5hbWUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNzZXRRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+c2V0UU5hbWUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNzZXRRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+c2V0UU5hbWUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjc2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldFFOYW1lKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjc2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldFFOYW1lKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+U2VydmljZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldFJlcXVpcmVkKGJvb2xlYW4pIj48Qj5zZXRSZXF1aXJlZChib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPjxDT0RFPjxlbT5SZXF1aXJlZDwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldFNjaGVtYShvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hKSI+PEI+c2V0U2NoZW1hKFhTRFNjaGVtYSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgc2V0RVNjaGVtYShYU0RTY2hlbWEpLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0U2NoZW1hKG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEpIj48Qj5zZXRTY2hlbWEoWFNEU2NoZW1hKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRTY2hlbWEoKSI+PENPREU+PGVtPlNjaGVtYTwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj48Qj5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPgotPEREPlNldHMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj48Qj5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjc2V0U29hcEFjdGlvblVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0U29hcEFjdGlvblVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQT3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTb2FwQWN0aW9uVVJJKCkiPjxDT0RFPjxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNzZXRTdHlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0U3R5bGUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCaW5kaW5nPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNzZXRTdHlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0U3R5bGUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUE9wZXJhdGlvbjwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0U3R5bGUoamF2YXgud3NkbC5PcGVyYXRpb25UeXBlKSI+PEI+c2V0U3R5bGUoT3BlcmF0aW9uVHlwZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI3NldFRhcmdldE5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0VGFyZ2V0TmFtZXNwYWNlKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkiPjxDT0RFPjxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjc2V0VHJhbnNwb3J0VVJJKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRUcmFuc3BvcnRVUkkoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCaW5kaW5nPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0VHJhbnNwb3J0VVJJKCkiPjxDT0RFPjxlbT5UcmFuc3BvcnQgVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjc2V0VHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0VHlwZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUNvbnRlbnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRUeXBlKCkiPjxDT0RFPjxlbT5UeXBlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldFR5cGVEZWZpbml0aW9uKG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbikiPjxCPnNldFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlRGVmaW5pdGlvbigpIj48Q09ERT48ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldFR5cGVOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5zZXRUeXBlTmFtZShRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZU5hbWUoKSI+PENPREU+PGVtPlR5cGUgTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNzZXRVbmRlZmluZWQoYm9vbGVhbikiPjxCPnNldFVuZGVmaW5lZChib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+PEI+c2V0VW5kZWZpbmVkKGJvb2xlYW4pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNzZXRVbmRlZmluZWQoYm9vbGVhbikiPjxCPnNldFVuZGVmaW5lZChib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PcGVyYXRpb248L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNzZXRVbmRlZmluZWQoYm9vbGVhbikiPjxCPnNldFVuZGVmaW5lZChib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+PEI+c2V0VW5kZWZpbmVkKGJvb2xlYW4pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5TZXJ2aWNlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCNzZXRVUkkoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldFVSSShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk5hbWVzcGFjZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFVSSSgpIj48Q09ERT48ZW0+VVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjc2V0VXNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRVc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCb2R5PC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjc2V0VXNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRVc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRVc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldFVzZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sI3NldFZlcmIoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldFZlcmIoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT48ZW0+VmVyYjwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQUREUkVTUyI+PEI+U09BUF9BRERSRVNTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9BRERSRVNTIj48Qj5TT0FQX0FERFJFU1M8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPlNPQVBfQUREUkVTU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9BRERSRVNTX19FTEVNRU5UIj48Qj5TT0FQX0FERFJFU1NfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEUiPjxCPlNPQVBfQUREUkVTU19fRUxFTUVOVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkiPjxCPlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+PEI+U09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX1JFUVVJUkVEIj48Qj5TT0FQX0FERFJFU1NfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+PEI+U09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QWRkcmVzczwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQklORElORyI+PEI+U09BUF9CSU5ESU5HPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HIj48Qj5TT0FQX0JJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPlNPQVBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HX19FTEVNRU5UIj48Qj5TT0FQX0JJTkRJTkdfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HX19FTEVNRU5UX1RZUEUiPjxCPlNPQVBfQklORElOR19fRUxFTUVOVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CSU5ESU5HX19SRVFVSVJFRCI+PEI+U09BUF9CSU5ESU5HX19SRVFVSVJFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9CSU5ESU5HX19TVFlMRSI+PEI+U09BUF9CSU5ESU5HX19TVFlMRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JJTkRJTkdfX1NUWUxFIj48Qj5TT0FQX0JJTkRJTkdfX1NUWUxFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkkiPjxCPlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSI+PEI+U09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19GRUFUVVJFX0NPVU5UIj48Qj5TT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9CT0RZIj48Qj5TT0FQX0JPRFk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+Qm9keTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFkiPjxCPlNPQVBfQk9EWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+Qm9keTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+U09BUF9CT0RZX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVMiPjxCPlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj48Qj5TT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VMRU1FTlQiPjxCPlNPQVBfQk9EWV9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VMRU1FTlRfVFlQRSI+PEI+U09BUF9CT0RZX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0JPRFlfX0VQQVJUUyI+PEI+U09BUF9CT0RZX19FUEFSVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19FUEFSVFMiPjxCPlNPQVBfQk9EWV9fRVBBUlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkiPjxCPlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSI+PEI+U09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9fUkVRVUlSRUQiPjxCPlNPQVBfQk9EWV9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQk9EWV9fVVNFIj48Qj5TT0FQX0JPRFlfX1VTRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19VU0UiPjxCPlNPQVBfQk9EWV9fVVNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQiPjxCPlNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJvZHk8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0ZBVUxUIj48Qj5TT0FQX0ZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkZhdWx0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFQiPjxCPlNPQVBfRkFVTFQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkZhdWx0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+U09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyI+PEI+U09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyI+PEI+U09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX0VMRU1FTlQiPjxCPlNPQVBfRkFVTFRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fRUxFTUVOVF9UWVBFIj48Qj5TT0FQX0ZBVUxUX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0ZBVUxUX19OQU1FIj48Qj5TT0FQX0ZBVUxUX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fTkFNRSI+PEI+U09BUF9GQVVMVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJIj48Qj5TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+PEI+U09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0ZBVUxUX19SRVFVSVJFRCI+PEI+U09BUF9GQVVMVF9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfRkFVTFRfX1VTRSI+PEI+U09BUF9GQVVMVF9fVVNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0ZBVUxUX19VU0UiPjxCPlNPQVBfRkFVTFRfX1VTRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PEI+U09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkZhdWx0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVIiPjxCPlNPQVBfSEVBREVSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlcjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUiI+PEI+U09BUF9IRUFERVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlcjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5TT0FQX0hFQURFUl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVMiPjxCPlNPQVBfSEVBREVSX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VMRU1FTlQiPjxCPlNPQVBfSEVBREVSX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19FTEVNRU5UX1RZUEUiPjxCPlNPQVBfSEVBREVSX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fRU1FU1NBR0UiPjxCPlNPQVBfSEVBREVSX19FTUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VQQVJUIj48Qj5TT0FQX0hFQURFUl9fRVBBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTIj48Qj5TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFMiPjxCPlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhlYWRlciBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX01FU1NBR0UiPjxCPlNPQVBfSEVBREVSX19NRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19OQU1FU1BBQ0VfVVJJIj48Qj5TT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fUEFSVCI+PEI+U09BUF9IRUFERVJfX1BBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX1JFUVVJUkVEIj48Qj5TT0FQX0hFQURFUl9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19VU0UiPjxCPlNPQVBfSEVBREVSX19VU0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFIj48Qj5TT0FQX0hFQURFUl9CQVNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlciBCYXNlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0UiPjxCPlNPQVBfSEVBREVSX0JBU0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlciBCYXNlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+U09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUyI+PEI+U09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUyI+PEI+U09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQiPjxCPlNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFIj48Qj5TT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSI+PEI+U09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UiPjxCPlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FUEFSVCI+PEI+U09BUF9IRUFERVJfQkFTRV9fRVBBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRVBBUlQiPjxCPlNPQVBfSEVBREVSX0JBU0VfX0VQQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFIj48Qj5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSI+PEI+U09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJIj48Qj5TT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSI+PEI+U09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19QQVJUIj48Qj5TT0FQX0hFQURFUl9CQVNFX19QQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fUEFSVCI+PEI+U09BUF9IRUFERVJfQkFTRV9fUEFSVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRCI+PEI+U09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfSEVBREVSX0JBU0VfX1VTRSI+PEI+U09BUF9IRUFERVJfQkFTRV9fVVNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19VU0UiPjxCPlNPQVBfSEVBREVSX0JBU0VfX1VTRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfRkVBVFVSRV9DT1VOVCI+PEI+U09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlciBCYXNlPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVJfRkFVTFQiPjxCPlNPQVBfSEVBREVSX0ZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVCI+PEI+U09BUF9IRUFERVJfRkFVTFQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5TT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMiPjxCPlNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlQiPjxCPlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUiPjxCPlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fRU1FU1NBR0UiPjxCPlNPQVBfSEVBREVSX0ZBVUxUX19FTUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VQQVJUIj48Qj5TT0FQX0hFQURFUl9GQVVMVF9fRVBBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19NRVNTQUdFIj48Qj5TT0FQX0hFQURFUl9GQVVMVF9fTUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+PEI+U09BUF9IRUFERVJfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX1BBUlQiPjxCPlNPQVBfSEVBREVSX0ZBVUxUX19QQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19SRVFVSVJFRCI+PEI+U09BUF9IRUFERVJfRkFVTFRfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fVVNFIj48Qj5TT0FQX0hFQURFUl9GQVVMVF9fVVNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PEI+U09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UIj48Qj5TT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlcjwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfT1BFUkFUSU9OIj48Qj5TT0FQX09QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT04iPjxCPlNPQVBfT1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+U09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX19FTEVNRU5UIj48Qj5TT0FQX09QRVJBVElPTl9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFIj48Qj5TT0FQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT05fX1JFUVVJUkVEIj48Qj5TT0FQX09QRVJBVElPTl9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkiPjxCPlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkiPjxCPlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX09QRVJBVElPTl9fU1RZTEUiPjxCPlNPQVBfT1BFUkFUSU9OX19TVFlMRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fU1RZTEUiPjxCPlNPQVBfT1BFUkFUSU9OX19TVFlMRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PEI+U09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PcGVyYXRpb248L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBBZGRyZXNzPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPic8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQm9keTwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Cb2R5PC9iPjwvZW0+JzxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBGYWN0b3J5PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PEREPlRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmF1bHQ8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPic8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyQmFzZTwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgQmFzZTwvYj48L2VtPic8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBGYXVsdDwvYj48L2VtPic8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+JzxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBQYWNrYWdlPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PEREPlRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PEREPkRlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKLSAKLSAgIGVhY2ggY2xhc3MsCi0gICBlYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcywKLSAgIGVhY2ggZW51bSwKLSAgIGFuZCBlYWNoIGRhdGEgdHlwZQotIAotIDwhPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3N0YXJ0Q0RBVEEoKSI+PEI+c3RhcnRDREFUQSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNzdGFydERvY3VtZW50KCkiPjxCPnN0YXJ0RG9jdW1lbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjc3RhcnREVEQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPnN0YXJ0RFREKFN0cmluZywgU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykiPjxCPnN0YXJ0RWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBBdHRyaWJ1dGVzKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjc3RhcnRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykiPjxCPnN0YXJ0RW50aXR5KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPiZuYnNwOwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE3Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0xOC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk5ZjBlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVC1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlQtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE4Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTguaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfVF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlQ8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNUQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFIj48Qj5UQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0YXJnZXROYW1lc3BhY2UiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNUUkFDS19MT0NBVElPTiI+PEI+VFJBQ0tfTE9DQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUmVzb3VyY2VJbXBsPC9BPgotPEREPkFkZCB0aGlzIG9wdGlvbiB3aXRoIGEgdmFsdWUgb2YgQm9vbGVhbi5UUlVFIHRvIHRoZSBvcHRpb25zIG1hcCB3aGVuCi0gbG9hZGluZyBhIHJlc291cmNlIHRvIGluc3RydWN0IHRoZSBsb2FkZXIgdG8gdHJhY2sgc291cmNlIGNvZGUgbG9jYXRpb24gZm9yCi0gZWFjaCBub2RlIGluIHRoZSBzb3VyY2UgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjVFlQRV9BVFRSSUJVVEUiPjxCPlRZUEVfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0eXBlIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+VHlwZXM8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlR5cGVzPC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjVFlQRVMiPjxCPlRZUEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InR5cGVzIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNUWVBFUyI+PEI+VFlQRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+VHlwZXM8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNUWVBFUyI+PEI+VFlQRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlR5cGVzPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+VFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVFlQRVNfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5UWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNUWVBFU19fRUxFTUVOVCI+PEI+VFlQRVNfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjVFlQRVNfRUxFTUVOVF9UQUciPjxCPlRZUEVTX0VMRU1FTlRfVEFHPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InR5cGVzIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNUWVBFU19GRUFUVVJFX0NPVU5UIj48Qj5UWVBFU19GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlR5cGVzPC9lbT4nIGNsYXNzCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xNy5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xOS5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTguaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xOC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTE5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NmViYjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMTkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1VLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVS1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xOC5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMC5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMTkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xOS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9VXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+VTwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTiI+PEI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNoaWxkcmVuPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4iPjxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UIj48Qj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPjxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+PEI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPjxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj48Qj51cGRhdGVFbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4KLTxERD5FbnN1cmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgRE9NIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5lbGVtZW50PC9DT0RFPjwvQT4gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSBpLmUuLCBpdCBzZXJpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIG1haW50YWlucyBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoYXQgc2VyaWFsaXphdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPjxCPnVwZGF0ZUVsZW1lbnQoYm9vbGVhbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4KLTxERD5FbnN1cmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgRE9NIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5lbGVtZW50PC9DT0RFPjwvQT4gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSBpLmUuLCBpdCBzZXJpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIG1haW50YWlucyBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoYXQgc2VyaWFsaXphdGlvbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNVU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyI+PEI+VVNFX0VYVEVOU0lPTl9GQUNUT1JJRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUmVzb3VyY2VJbXBsPC9BPgotPEREPiZuYnNwOwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTE5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjZmE3OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotQi1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkItSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMS5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0zLmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0yLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9CXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+QjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZzwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0JJTkRJTkciPjxCPkJJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElORyI+PEI+QklORElORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkciPjxCPkJJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+QklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TIj48Qj5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TIj48Qj5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5CSU5ESU5HX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VMRU1FTlQiPjxCPkJJTkRJTkdfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX19FUE9SVF9UWVBFIj48Qj5CSU5ESU5HX19FUE9SVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19fRVBPUlRfVFlQRSI+PEI+QklORElOR19fRVBPUlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19fUU5BTUUiPjxCPkJJTkRJTkdfX1FOQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfX1FOQU1FIj48Qj5CSU5ESU5HX19RTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX1VOREVGSU5FRCI+PEI+QklORElOR19fVU5ERUZJTkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX19VTkRFRklORUQiPjxCPkJJTkRJTkdfX1VOREVGSU5FRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjQklORElOR19BVFRSSUJVVEUiPjxCPkJJTkRJTkdfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJiaW5kaW5nIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjQklORElOR19FTEVNRU5UX1RBRyI+PEI+QklORElOR19FTEVNRU5UX1RBRzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJiaW5kaW5nIjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUIj48Qj5CSU5ESU5HX0ZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19GQVVMVCI+PEI+QklORElOR19GQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5CSU5ESU5HX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5CSU5ESU5HX0ZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfX0VGQVVMVCI+PEI+QklORElOR19GQVVMVF9fRUZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVGYXVsdDwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX0ZBVUxUX19FRkFVTFQiPjxCPkJJTkRJTkdfRkFVTFRfX0VGQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUX19FTEVNRU5UIj48Qj5CSU5ESU5HX0ZBVUxUX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GQVVMVF9fTkFNRSI+PEI+QklORElOR19GQVVMVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfRkFVTFRfX05BTUUiPjxCPkJJTkRJTkdfRkFVTFRfX05BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PEI+QklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+PEI+QklORElOR19GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmc8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfSU5QVVQiPjxCPkJJTkRJTkdfSU5QVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX0lOUFVUIj48Qj5CSU5ESU5HX0lOUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPkJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPkJJTkRJTkdfSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9fRUlOUFVUIj48Qj5CSU5ESU5HX0lOUFVUX19FSU5QVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfSU5QVVRfX0VJTlBVVCI+PEI+QklORElOR19JTlBVVF9fRUlOUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfSU5QVVRfX0VMRU1FTlQiPjxCPkJJTkRJTkdfSU5QVVRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX19OQU1FIj48Qj5CSU5ESU5HX0lOUFVUX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19JTlBVVF9fTkFNRSI+PEI+QklORElOR19JTlBVVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UIj48Qj5CSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZyBJbnB1dDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT04iPjxCPkJJTkRJTkdfT1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OIj48Qj5CSU5ESU5HX09QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPkJJTkRJTkdfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMiPjxCPkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyI+PEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCI+PEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCI+PEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVCI+PEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVCI+PEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPkJJTkRJTkdfT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FTEVNRU5UIj48Qj5CSU5ESU5HX09QRVJBVElPTl9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OIj48Qj5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OIj48Qj5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX05BTUUiPjxCPkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19PUEVSQVRJT05fX05BTUUiPjxCPkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48Qj5CSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVCI+PEI+QklORElOR19PVVRQVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgT3V0cHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19PVVRQVVQiPjxCPkJJTkRJTkdfT1VUUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgT3V0cHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+QklORElOR19PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5CSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9fRUxFTUVOVCI+PEI+QklORElOR19PVVRQVVRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCI+PEI+QklORElOR19PVVRQVVRfX0VPVVRQVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCI+PEI+QklORElOR19PVVRQVVRfX0VPVVRQVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1VUUFVUX19OQU1FIj48Qj5CSU5ESU5HX09VVFBVVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1VUUFVUX19OQU1FIj48Qj5CSU5ESU5HX09VVFBVVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCI+PEI+QklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nRmF1bHQ8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgRmF1bHQ8L2I+PC9lbT4nLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ0lucHV0PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIElucHV0PC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE9wZXJhdGlvbjwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ091dHB1dDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nLjwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTEuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMy5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0yMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTRhNTRlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVi1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlYtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTIwLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMjAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfVl8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlY8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNWQUxVRVMiPjxCPlZBTFVFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+QSBwdWJsaWMgcmVhZC1vbmx5IGxpc3Qgb2YgYWxsIHRoZSAnPGVtPjxiPkRpYWdub3N0aWMgU2V2ZXJpdHk8L2I+PC9lbT4nCi0gZW51bWVyYXRvcnMuCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xOS5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMS5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMjAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMjEuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTIxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYzMxMjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMjEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1XLUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVy1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMC5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMjEuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9XXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+VzwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI1dBUk5JTkciPjxCPldBUk5JTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPgotPEREPlRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIG5vdCB0b28gYmFkIGFuZCB0aGF0IHRoZQotIGRlZmluaXRpb24gaXMgbGlrZWx5IHN1aXRhYmxlIGZvciB1c2UuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjd2FybmluZyhvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikiPjxCPndhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNXQVJOSU5HX0xJVEVSQUwiPjxCPldBUk5JTkdfTElURVJBTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+VGhlICc8ZW0+PGI+V2FybmluZzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNXU0RMX0VMRU1FTlQiPjxCPldTRExfRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjV1NETF9FTEVNRU5UIj48Qj5XU0RMX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkVsZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNXU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+V1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNXU0RMX0VMRU1FTlRfX0VMRU1FTlQiPjxCPldTRExfRUxFTUVOVF9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjV1NETF9FTEVNRU5UX19FTEVNRU5UIj48Qj5XU0RMX0VMRU1FTlRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PEI+V1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWxlbWVudDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI1dTRExfRU5DT0RJTkciPjxCPldTRExfRU5DT0RJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUmVzb3VyY2VJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjV1NETF9FWENFUFRJT04iPjxCPldTRExfRVhDRVBUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkV4Y2VwdGlvbjwvZW0+JyBkYXRhIHR5cGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1dTRExfRVhDRVBUSU9OIj48Qj5XU0RMX0VYQ0VQVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RXhjZXB0aW9uPC9lbT4nIGRhdGEgdHlwZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI1dTRExfSkFYUF9DT05GSUciPjxCPldTRExfSkFYUF9DT05GSUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUmVzb3VyY2VJbXBsPC9BPgotPEREPlRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGFzIGFuIG9wdGlvbiBvbiBSZXNvdXJjZSNsb2FkIG1ldGhvZHMgdG8gc3BlY2lmeSBKQVhQIGNvbmZpZ3VyYXRpb24KLSB0aGF0IGNyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgU0FYLCBET00gcGFyc2VycyBhbmQgVHJhbnNmb3JtZXIuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjV1NETF9KQVhQX1BPT0wiPjxCPldTRExfSkFYUF9QT09MPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlSW1wbDwvQT4KLTxERD5UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gb24gUmVzb3VyY2UjbG9hZCBtZXRob2RzIHRvIHNwZWNpZnkgSkFYUCBwb29sIHRvIGJlIHVzZWQKLSBmb3IgbG9hZGluZyBhbmQgc2VyaWFsaXppbmcgWE1MIFNjaGVtYXMuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjV1NETF9OQU1FU1BBQ0VfVVJJIj48Qj5XU0RMX05BTUVTUEFDRV9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNXU0RMX1BST0dSRVNTX01PTklUT1IiPjxCPldTRExfUFJPR1JFU1NfTU9OSVRPUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5XU0RMQ29uc3RhbnRzPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjxERD5UaGlzIGNsYXNzIGRlZmluZXMgY29uc3RhbnRzIGZvciBXU0RMIGVsZW1lbnQgdGFncyBhbmQgcmVsZXZhbnQgbmFtZXNwYWNlcy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjV1NETENvbnN0YW50cygpIj48Qj5XU0RMQ29uc3RhbnRzKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5XU0RMRGlhZ25vc3RpYzwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+PEREPkdlbmVyYXRlZCBieSB0aGUgV1NETCBtb2RlbCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIG1lY2hhbmlzbXMuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5XU0RMRGlhZ25vc3RpY0ltcGw8L0I+PC9BPiAtIENsYXNzIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+PEREPkRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdTRExEaWFnbm9zdGljIGludGVyZmFjZS48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNXU0RMRGlhZ25vc3RpY0ltcGwoKSI+PEI+V1NETERpYWdub3N0aWNJbXBsKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT4KLTxERD5EZWZhdWx0IGNvbnN0cnVjdG9yLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjV1NETERpYWdub3N0aWNJbXBsKG9yZy5lY2xpcHNlLnhzZC5YU0REaWFnbm9zdGljKSI+PEI+V1NETERpYWdub3N0aWNJbXBsKFhTRERpYWdub3N0aWMpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08REQ+V3JhcHMgYW4gWFNEIGRpYWdub3N0aWMgaW50byBhIFdTREwgZGlhZ25vc3RpYy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0I+PC9BPiAtIENsYXNzIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+PEREPldTREwgZGlhZ25vc3RpYyBzZXZlcml0eSBsZXZlbHMgdHlwZSBzYWZlIGVudW1lcmF0aW9uLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMRWxlbWVudDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExGYWN0b3J5PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5UaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETFBhY2thZ2U8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PEREPlRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+RGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIAotICAgZWFjaCBjbGFzcywKLSAgIGVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLAotICAgZWFjaCBlbnVtLAotICAgYW5kIGVhY2ggZGF0YSB0eXBlCi0gCi0gPCE8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5XU0RMUGFyc2VyPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjxERD5UaGUgPGI+U0FYIFBhcnNlcjwvYj4gZm9yIHRoZSBXU0RMIG1vZGVsLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNXU0RMUGFyc2VyKCkiPjxCPldTRExQYXJzZXIoKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+RGVmYXVsdCBjb25zdHJ1Y3Rvci4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNXU0RMUGFyc2VyKGphdmEudXRpbC5NYXApIj48Qj5XU0RMUGFyc2VyKE1hcCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBXU0RMIHBhcnNlciBnaXZlbiBhIHNldCBvZiBwYXJzaW5nIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExQbHVnaW48L0I+PC9BPiAtIENsYXNzIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+VGhlIDxiPlBsdWdpbjwvYj4gZm9yIHRoZSBtb2RlbC48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PEREPlRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwjV1NETFBsdWdpbkltcGxlbWVudGF0aW9uKCkiPjxCPldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbigpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbnN0YW5jZS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjxERD5UaGlzIGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBsb2FkaW5nIG9mIFdTREwgb3IgWFNEIHJlc291cmNlIGZyb20KLSBVUkkncyB0aGF0IGRvbid0IGVuZCB3aXRoIC54c2Qgb3IgLndzZGwgZXh0ZW5zaW9ucy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCNXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeSkiPjxCPldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETFJlc291cmNlSW1wbDwvQj48L0E+IC0gQ2xhc3MgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT48REQ+VGhlIDxiPlJlc291cmNlPC9iPiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG1vZGVsLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNXU0RMUmVzb3VyY2VJbXBsKFVSSSkiPjxCPldTRExSZXNvdXJjZUltcGwoVVJJKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UKLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0yMS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIxLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0yMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMjIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwOTdkZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0yMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVgtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgTEVUVEVSPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMjIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0yMi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9YXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+WDwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1hTRF9OQU1FU1BBQ0VfVVJJIj48Qj5YU0RfTkFNRVNQQUNFX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UIj48Qj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPjxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+PEI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEiPjxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUE8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSI+PEI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2hlbWE8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PEI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBMRVRURVI8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0yMi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0zLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC0zLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDQyM2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtMy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUMtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJDLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTIuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNC5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtMy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfQ18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkM8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpIj48Qj5jaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNjb21tZW50KGNoYXJbXSwgaW50LCBpbnQpIj48Qj5jb21tZW50KGNoYXJbXSwgaW50LCBpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNDT05USU5VRV9PTl9MT0FEX0VSUk9SIj48Qj5DT05USU5VRV9PTl9MT0FEX0VSUk9SPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlSW1wbDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUJpbmRpbmcoKSI+PEI+Y3JlYXRlQmluZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVCaW5kaW5nRmF1bHQoKSI+PEI+Y3JlYXRlQmluZGluZ0ZhdWx0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUJpbmRpbmdJbnB1dCgpIj48Qj5jcmVhdGVCaW5kaW5nSW5wdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBJbnB1dDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlQmluZGluZ09wZXJhdGlvbigpIj48Qj5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVCaW5kaW5nT3V0cHV0KCkiPjxCPmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZURlZmluaXRpb24oKSI+PEI+Y3JlYXRlRGVmaW5pdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCNjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+Y3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjxCPmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlRmF1bHQoKSI+PEI+Y3JlYXRlRmF1bHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNjcmVhdGVIVFRQQWRkcmVzcygpIj48Qj5jcmVhdGVIVFRQQWRkcmVzcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwjY3JlYXRlSFRUUEJpbmRpbmcoKSI+PEI+Y3JlYXRlSFRUUEJpbmRpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2NyZWF0ZUhUVFBPcGVyYXRpb24oKSI+PEI+Y3JlYXRlSFRUUE9wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNjcmVhdGVIVFRQVXJsRW5jb2RlZCgpIj48Qj5jcmVhdGVIVFRQVXJsRW5jb2RlZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2NyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpIj48Qj5jcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVJbXBvcnQoKSI+PEI+Y3JlYXRlSW1wb3J0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkltcG9ydDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlSW5wdXQoKSI+PEI+Y3JlYXRlSW5wdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5wdXQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZU1lc3NhZ2UoKSI+PEI+Y3JlYXRlTWVzc2FnZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NZXNzYWdlPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjY3JlYXRlTUlNRUNvbnRlbnQoKSI+PEI+Y3JlYXRlTUlNRUNvbnRlbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29udGVudDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sI2NyZWF0ZU1JTUVNaW1lWG1sKCkiPjxCPmNyZWF0ZU1JTUVNaW1lWG1sKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pbWUgWG1sPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKSI+PEI+Y3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCNjcmVhdGVNSU1FUGFydCgpIj48Qj5jcmVhdGVNSU1FUGFydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVOYW1lc3BhY2UoKSI+PEI+Y3JlYXRlTmFtZXNwYWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWVzcGFjZTwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlT3BlcmF0aW9uKCkiPjxCPmNyZWF0ZU9wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZU91dHB1dCgpIj48Qj5jcmVhdGVPdXRwdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVQYXJ0KCkiPjxCPmNyZWF0ZVBhcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlUG9ydCgpIj48Qj5jcmVhdGVQb3J0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZVBvcnRUeXBlKCkiPjxCPmNyZWF0ZVBvcnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQgVHlwZTwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlU2VydmljZSgpIj48Qj5jcmVhdGVTZXJ2aWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlcnZpY2U8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQQWRkcmVzcygpIj48Qj5jcmVhdGVTT0FQQWRkcmVzcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEJpbmRpbmcoKSI+PEI+Y3JlYXRlU09BUEJpbmRpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sI2NyZWF0ZVNPQVBCb2R5KCkiPjxCPmNyZWF0ZVNPQVBCb2R5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJvZHk8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQRmF1bHQoKSI+PEI+Y3JlYXRlU09BUEZhdWx0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEhlYWRlcigpIj48Qj5jcmVhdGVTT0FQSGVhZGVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sI2NyZWF0ZVNPQVBIZWFkZXJCYXNlKCkiPjxCPmNyZWF0ZVNPQVBIZWFkZXJCYXNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBCYXNlPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEhlYWRlckZhdWx0KCkiPjxCPmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQT3BlcmF0aW9uKCkiPjxCPmNyZWF0ZVNPQVBPcGVyYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVUeXBlcygpIj48Qj5jcmVhdGVUeXBlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UeXBlczwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjxCPmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCNjcmVhdGVXU0RMNEpGYWN0b3J5KCkiPjxCPmNyZWF0ZVdTREw0SkZhY3RvcnkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW48L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48Qj5jcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMi5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC00Lmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC0zLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhhYmE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1ELUluZGV4Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iRC1JbmRleCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0zLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC00Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotPEEgTkFNRT0iX0RfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5EPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5EZWZpbml0aW9uPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZWZpbml0aW9uPC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjREVGSU5JVElPTiI+PEI+REVGSU5JVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkZWZpbml0aW9ucyI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTiI+PEI+REVGSU5JVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT04iPjxCPkRFRklOSVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+REVGSU5JVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FQklORElOR1MiPjxCPkRFRklOSVRJT05fX0VCSU5ESU5HUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19FQklORElOR1MiPjxCPkRFRklOSVRJT05fX0VCSU5ESU5HUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5ERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VJTVBPUlRTIj48Qj5ERUZJTklUSU9OX19FSU1QT1JUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VJTVBPUlRTIj48Qj5ERUZJTklUSU9OX19FSU1QT1JUUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRUxFTUVOVCI+PEI+REVGSU5JVElPTl9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VNRVNTQUdFUyI+PEI+REVGSU5JVElPTl9fRU1FU1NBR0VTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VNRVNTQUdFUyI+PEI+REVGSU5JVElPTl9fRU1FU1NBR0VTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRU5BTUVTUEFDRVMiPjxCPkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjREVGSU5JVElPTl9fRU5BTUVTUEFDRVMiPjxCPkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTkNPRElORyI+PEI+REVGSU5JVElPTl9fRU5DT0RJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjREVGSU5JVElPTl9fRU5DT0RJTkciPjxCPkRFRklOSVRJT05fX0VOQ09ESU5HPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRVBPUlRfVFlQRVMiPjxCPkRFRklOSVRJT05fX0VQT1JUX1RZUEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjREVGSU5JVElPTl9fRVBPUlRfVFlQRVMiPjxCPkRFRklOSVRJT05fX0VQT1JUX1RZUEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FU0VSVklDRVMiPjxCPkRFRklOSVRJT05fX0VTRVJWSUNFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19FU0VSVklDRVMiPjxCPkRFRklOSVRJT05fX0VTRVJWSUNFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VUWVBFUyI+PEI+REVGSU5JVElPTl9fRVRZUEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19FVFlQRVMiPjxCPkRFRklOSVRJT05fX0VUWVBFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19MT0NBVElPTiI+PEI+REVGSU5JVElPTl9fTE9DQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjREVGSU5JVElPTl9fTE9DQVRJT04iPjxCPkRFRklOSVRJT05fX0xPQ0FUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fUU5BTUUiPjxCPkRFRklOSVRJT05fX1FOQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX1FOQU1FIj48Qj5ERUZJTklUSU9OX19RTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UiPjxCPkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFIj48Qj5ERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBOYW1lc3BhY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjREVGSU5JVElPTl9FTEVNRU5UX1RBRyI+PEI+REVGSU5JVElPTl9FTEVNRU5UX1RBRzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkZWZpbml0aW9ucyI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UIj48Qj5ERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVmaW5pdGlvbjwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0RPQ1VNRU5UQVRJT04iPjxCPkRPQ1VNRU5UQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZG9jdW1lbnRhdGlvbiI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0RPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUciPjxCPkRPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZG9jdW1lbnRhdGlvbiI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRE9NX0RPQ1VNRU5UIj48Qj5ET01fRE9DVU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+JyBkYXRhIHR5cGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RPTV9ET0NVTUVOVCI+PEI+RE9NX0RPQ1VNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+JyBkYXRhIHR5cGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RPTV9FTEVNRU5UIj48Qj5ET01fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicgZGF0YSB0eXBlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNET01fRUxFTUVOVCI+PEI+RE9NX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicgZGF0YSB0eXBlCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0zLmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC00Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC01Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC01Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiN2IyMzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUUtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJFLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTQuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfRV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkU8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNlSU5TVEFOQ0UiPjxCPmVJTlNUQU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNlSU5TVEFOQ0UiPjxCPmVJTlNUQU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCNlSU5TVEFOQ0UiPjxCPmVJTlNUQU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVGYWN0b3J5PC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNlSU5TVEFOQ0UiPjxCPmVJTlNUQU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNlSU5TVEFOQ0UiPjxCPmVJTlNUQU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNlSU5TVEFOQ0UiPjxCPmVJTlNUQU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2VJTlNUQU5DRSI+PEI+ZUlOU1RBTkNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+Ci08REQ+VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZUlOU1RBTkNFIj48Qj5lSU5TVEFOQ0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjRUxFTUVOVF9BVFRSSUJVVEUiPjxCPkVMRU1FTlRfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJlbGVtZW50IjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+PEI+ZWxlbWVudENoYW5nZWQoRWxlbWVudCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4KLTxERD5DYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBoYXMgY2hhbmdlZDsKLSB0aGUgZWxlbWVudCBzaG91bGQgdHlwaWNhbGx5IGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUgcmV0dXJuZWQgPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPjxDT0RFPldTRExFbGVtZW50LmdldEVsZW1lbnQoKTwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2VOQU1FIj48Qj5lTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBwYWNrYWdlIG5hbWUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNlTkFNRSI+PEI+ZU5BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgcGFja2FnZSBuYW1lCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZU5BTUUiPjxCPmVOQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZU5BTUUiPjxCPmVOQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0VOQ09ESU5HX0FUVFJJQlVURSI+PEI+RU5DT0RJTkdfQVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETENvbnN0YW50czwvQT4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJlbmNvZGluZyI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2VuZENEQVRBKCkiPjxCPmVuZENEQVRBKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2VuZERvY3VtZW50KCkiPjxCPmVuZERvY3VtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2VuZERURCgpIj48Qj5lbmREVEQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+ZW5kRWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZW5kRW50aXR5KGphdmEubGFuZy5TdHJpbmcpIj48Qj5lbmRFbnRpdHkoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZU5TX1BSRUZJWCI+PEI+ZU5TX1BSRUZJWDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZU5TX1BSRUZJWCI+PEI+ZU5TX1BSRUZJWDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZU5TX1BSRUZJWCI+PEI+ZU5TX1BSRUZJWDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNlTlNfUFJFRklYIj48Qj5lTlNfUFJFRklYPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNlTlNfVVJJIj48Qj5lTlNfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2VOU19VUkkiPjxCPmVOU19VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZU5TX1VSSSI+PEI+ZU5TX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2VOU19VUkkiPjxCPmVOU19VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRVJST1IiPjxCPkVSUk9SPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4KLTxERD5UaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvYmxlbSBpcyBiYWQgYW5kIHRoYXQgdGhlIHNjaGVtYSBpcwotIGxpa2VseSBub3Qgc3VpdGFibGUgZm9yIHVzZS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNlcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikiPjxCPmVycm9yKFNBWFBhcnNlRXhjZXB0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRVJST1JfTElURVJBTCI+PEI+RVJST1JfTElURVJBTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+VGhlICc8ZW0+PGI+RXJyb3I8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJJTElUWV9FTEVNRU5UIj48Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVCI+PEI+RVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UIj48Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSI+PEI+RVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFIj48Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEIj48Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPjxCPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PEI+RVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT48REQ+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjxERD4KLSA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UIj48Qj5FWFRFTlNJQkxFX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0VYVEVOU0lCTEVfRUxFTUVOVCI+PEI+RVhURU5TSUJMRV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5FWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PEI+RVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0VYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPkVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVCI+PEI+RVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPjxCPkVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkV4dGVuc2libGVFbGVtZW50PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmxlIEVsZW1lbnQ8L2I+PC9lbT4nLjwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTQuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNi5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1NjE3YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC02Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotRi1JbmRleAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkYtSW5kZXgiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNS5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC03Lmh0bWwiPjxCPk5FWFQgTEVUVEVSPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uL2luZGV4Lmh0bWw/aW5kZXgtZmlsZXNpbmRleC02Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxBIEhSRUY9ImluZGV4LTEuaHRtbCI+QTwvQT4gPEEgSFJFRj0iaW5kZXgtMi5odG1sIj5CPC9BPiA8QSBIUkVGPSJpbmRleC0zLmh0bWwiPkM8L0E+IDxBIEhSRUY9ImluZGV4LTQuaHRtbCI+RDwvQT4gPEEgSFJFRj0iaW5kZXgtNS5odG1sIj5FPC9BPiA8QSBIUkVGPSJpbmRleC02Lmh0bWwiPkY8L0E+IDxBIEhSRUY9ImluZGV4LTcuaHRtbCI+RzwvQT4gPEEgSFJFRj0iaW5kZXgtOC5odG1sIj5IPC9BPiA8QSBIUkVGPSJpbmRleC05Lmh0bWwiPkk8L0E+IDxBIEhSRUY9ImluZGV4LTEwLmh0bWwiPkw8L0E+IDxBIEhSRUY9ImluZGV4LTExLmh0bWwiPk08L0E+IDxBIEhSRUY9ImluZGV4LTEyLmh0bWwiPk48L0E+IDxBIEhSRUY9ImluZGV4LTEzLmh0bWwiPk88L0E+IDxBIEhSRUY9ImluZGV4LTE0Lmh0bWwiPlA8L0E+IDxBIEhSRUY9ImluZGV4LTE1Lmh0bWwiPlE8L0E+IDxBIEhSRUY9ImluZGV4LTE2Lmh0bWwiPlI8L0E+IDxBIEhSRUY9ImluZGV4LTE3Lmh0bWwiPlM8L0E+IDxBIEhSRUY9ImluZGV4LTE4Lmh0bWwiPlQ8L0E+IDxBIEhSRUY9ImluZGV4LTE5Lmh0bWwiPlU8L0E+IDxBIEhSRUY9ImluZGV4LTIwLmh0bWwiPlY8L0E+IDxBIEhSRUY9ImluZGV4LTIxLmh0bWwiPlc8L0E+IDxBIEhSRUY9ImluZGV4LTIyLmh0bWwiPlg8L0E+IDxIUj4KLTxBIE5BTUU9Il9GXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+RjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI0ZBVEFMIj48Qj5GQVRBTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+VGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgcmVhbGx5IGJhZCBhbmQgdGhhdCBmdXJ0aGVyCi0gcHJvY2Vzc2luZyBpcyBsaWtlbHkgbm90IHBvc3NpYmxlLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI0ZBVEFMX0xJVEVSQUwiPjxCPkZBVEFMX0xJVEVSQUw8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPgotPEREPlRoZSAnPGVtPjxiPkZhdGFsPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNmYXRhbEVycm9yKG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbikiPjxCPmZhdGFsRXJyb3IoU0FYRXhjZXB0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZmF0YWxFcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikiPjxCPmZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5GYXVsdDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNGQVVMVCI+PEI+RkFVTFQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZmF1bHQiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUIj48Qj5GQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNGQVVMVCI+PEI+RkFVTFQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjxCPkZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX19FTEVNRU5UIj48Qj5GQVVMVF9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX19FTUVTU0FHRSI+PEI+RkFVTFRfX0VNRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX19OQU1FIj48Qj5GQVVMVF9fTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNGQVVMVF9FTEVNRU5UX1RBRyI+PEI+RkFVTFRfRUxFTUVOVF9UQUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZmF1bHQiPC9jb2RlPi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPjxCPkZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmF1bHQ8L2VtPicgY2xhc3MKLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTUuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtNy5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTYuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4LWZpbGVzL2luZGV4LTcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4Zjk4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC03Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUctSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJHLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTYuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOC5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtNy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfR18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkc8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNnZXQoamF2YS5sYW5nLlN0cmluZykiPjxCPmdldChTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+UmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gc3BlY2lmaWVkIGxpdGVyYWwgdmFsdWUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjZ2V0KGludCkiPjxCPmdldChpbnQpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+UmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gc3BlY2lmaWVkIGludGVnZXIgdmFsdWUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0QXR0cmlidXRlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXRBdHRyaWJ1dGUoRWxlbWVudCwgU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlJldHVybnMgYW4gYXR0cmlidXRlIHZhbHVlIGdpdmVuIHRoZSBhdHRyaWJ1dGVOYW1lIGluIHRoZSBlbGVtZW50LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZygpIj48Qj5nZXRCaW5kaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKSI+PEI+Z2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRFQmluZGluZ09wZXJhdGlvbnMoKSI+PENPREU+PGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ19FUG9ydFR5cGUoKSI+PEI+Z2V0QmluZGluZ19FUG9ydFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RVBvcnRUeXBlKCkiPjxDT0RFPjxlbT5FUG9ydCBUeXBlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdfUU5hbWUoKSI+PEI+Z2V0QmluZGluZ19RTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ19VbmRlZmluZWQoKSI+PEI+Z2V0QmluZGluZ19VbmRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nRmF1bHQoKSI+PEI+Z2V0QmluZGluZ0ZhdWx0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+QmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCkiPjxCPmdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXRFRmF1bHQoKSI+PENPREU+PGVtPkVGYXVsdDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nRmF1bHRfTmFtZSgpIj48Qj5nZXRCaW5kaW5nRmF1bHRfTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0lucHV0KCkiPjxCPmdldEJpbmRpbmdJbnB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0lucHV0X0VJbnB1dCgpIj48Qj5nZXRCaW5kaW5nSW5wdXRfRUlucHV0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPjxlbT5FSW5wdXQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0lucHV0X05hbWUoKSI+PEI+Z2V0QmluZGluZ0lucHV0X05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb24oKSI+PEI+Z2V0QmluZGluZ09wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzKCkiPjxCPmdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ0ZhdWx0cygpIj48Q09ERT48ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpIj48Qj5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdJbnB1dCgpIj48Q09ERT48ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpIj48Qj5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nT3V0cHV0KCkiPjxDT0RFPjxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCkiPjxCPmdldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPjxDT0RFPjxlbT5FT3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpIj48Qj5nZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3V0cHV0KCkiPjxCPmdldEJpbmRpbmdPdXRwdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+QmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCkiPjxCPmdldEJpbmRpbmdPdXRwdXRfRU91dHB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNnZXRFT3V0cHV0KCkiPjxDT0RFPjxlbT5FT3V0cHV0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPdXRwdXRfTmFtZSgpIj48Qj5nZXRCaW5kaW5nT3V0cHV0X05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjZ2V0QnlOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXRCeU5hbWUoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPgotPEREPlJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotIHNwZWNpZmllZCBuYW1lLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldENoaWxkcmVuKCkiPjxCPmdldENoaWxkcmVuKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNoaWxkcmVuPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldENvbHVtbigpIj48Qj5nZXRDb2x1bW4oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXRDb250YWluZXIoKSI+PEI+Z2V0Q29udGFpbmVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT4KLTxERD5yZXR1cm5zIHRoZSBFbGVtZW50IHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldENvbnRhaW5lcigpIj48Qj5nZXRDb250YWluZXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPjxCPmdldENvbnRhaW5lcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyByZWZlcmVuY2UuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkiPjxCPmdldERlZmF1bHRTYXZlT3B0aW9ucygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlSW1wbDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNnZXREZWZpbml0aW9uKCkiPjxCPmdldERlZmluaXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+Ci08REQ+UmV0dXJucyB0aGUgcmVzb3VyY2UncyBEZWZpbml0aW9uLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbigpIj48Qj5nZXREZWZpbml0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkRlZmluaXRpb248L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKSI+PEI+Z2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFQmluZGluZ3MoKSI+PENPREU+PGVtPkVCaW5kaW5nczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VJbXBvcnRzKCkiPjxCPmdldERlZmluaXRpb25fRUltcG9ydHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFSW1wb3J0cygpIj48Q09ERT48ZW0+RUltcG9ydHM8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKSI+PEI+Z2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFTWVzc2FnZXMoKSI+PENPREU+PGVtPkVNZXNzYWdlczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCkiPjxCPmdldERlZmluaXRpb25fRU5hbWVzcGFjZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFTmFtZXNwYWNlcygpIj48Q09ERT48ZW0+RU5hbWVzcGFjZXM8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpIj48Qj5nZXREZWZpbml0aW9uX0VuY29kaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVuY29kaW5nKCkiPjxDT0RFPjxlbT5FbmNvZGluZzwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKSI+PEI+Z2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVBvcnRUeXBlcygpIj48Q09ERT48ZW0+RVBvcnQgVHlwZXM8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKSI+PEI+Z2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFU2VydmljZXMoKSI+PENPREU+PGVtPkVTZXJ2aWNlczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VUeXBlcygpIj48Qj5nZXREZWZpbml0aW9uX0VUeXBlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFVHlwZXMoKSI+PENPREU+PGVtPkVUeXBlczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0xvY2F0aW9uKCkiPjxCPmdldERlZmluaXRpb25fTG9jYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0TG9jYXRpb24oKSI+PENPREU+PGVtPkxvY2F0aW9uPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fUU5hbWUoKSI+PEI+Z2V0RGVmaW5pdGlvbl9RTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKSI+PEI+Z2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkiPjxDT0RFPjxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXREaWFnbm9zdGljcygpIj48Qj5nZXREaWFnbm9zdGljcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD5Qcm92aWRlcyBhIGNvbGxlY3Rpb24gd2l0aCB0aGUgZGlhZ25vc3RpY3MgZ2VuZXJhdGVkIGR1cmluZyBwYXJzaW5nLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXREb2N1bWVudCgpIj48Qj5nZXREb2N1bWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlJldHVybnMgYSBXM0MgRE9NIERvY3VtZW50IGJ1aWx0IGZyb20gdGhlIGlucHV0IFdTREwgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0RG9jdW1lbnQoKSI+PEI+Z2V0RG9jdW1lbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+UHJvdmlkZXMgdGhlIERPTSBkb2N1bWVudCBjcmVhdGVkIGJ5IHBhcnNpbmcgdGhlIFdTREwgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj48Qj5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERPTURvY3VtZW50KCkiPjxCPmdldERPTURvY3VtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8Q09ERT48ZW0+RE9NIERvY3VtZW50PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RE9NRWxlbWVudCgpIj48Qj5nZXRET01FbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8Q09ERT48ZW0+RE9NIEVsZW1lbnQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPjxCPmdldEVCaW5kaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ0ZhdWx0cygpIj48Qj5nZXRFQmluZGluZ0ZhdWx0cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+PEI+Z2V0RUJpbmRpbmdJbnB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkiPjxCPmdldEVCaW5kaW5nT3BlcmF0aW9ucygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ091dHB1dCgpIj48Qj5nZXRFQmluZGluZ091dHB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVCaW5kaW5ncygpIj48Qj5nZXRFQmluZGluZ3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVEZWZpbml0aW9uKCkiPjxCPmdldEVEZWZpbml0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRFRW5jb2RpbmdTdHlsZXMoKSI+PEI+Z2V0RUVuY29kaW5nU3R5bGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFRW5jb2RpbmdTdHlsZXMoKSI+PEI+Z2V0RUVuY29kaW5nU3R5bGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxCPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYXJ0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PEI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj48Qj5nZXRFRmF1bHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUZhdWx0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFRmF1bHRzKCkiPjxCPmdldEVGYXVsdHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PcGVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVJbXBvcnRzKCkiPjxCPmdldEVJbXBvcnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUltcG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI2dldEVJbnB1dCgpIj48Qj5nZXRFSW5wdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFSW5wdXQoKSI+PEI+Z2V0RUlucHV0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPjxCPmdldEVsZW1lbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFbGVtZW50RGVjbGFyYXRpb24oKSI+PEI+Z2V0RWxlbWVudERlY2xhcmF0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWxlbWVudCBEZWNsYXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVsZW1lbnROYW1lKCkiPjxCPmdldEVsZW1lbnROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWxlbWVudCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRFbGVtZW50VGFnKGludCkiPjxCPmdldEVsZW1lbnRUYWcoaW50KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlJldHVybnMgYSBTdHJpbmcgbmFtZSBvZiBlbGVtZW50IHRhZyBnaXZlbiB0aGUgbm9kZVR5cGUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj48Qj5nZXRFbGVtZW50VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFTWVzc2FnZSgpIj48Qj5nZXRFTWVzc2FnZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNnZXRFTWVzc2FnZSgpIj48Qj5nZXRFTWVzc2FnZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PEI+Z2V0RU1lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVNZXNzYWdlcygpIj48Qj5nZXRFTWVzc2FnZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sI2dldEVNSU1FUGFydCgpIj48Qj5nZXRFTUlNRVBhcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNSU1FIFBhcnQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFTmFtZXNwYWNlcygpIj48Qj5nZXRFTmFtZXNwYWNlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+PEI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgRGVmaW5pdGlvbiB0aGF0IGNvbnRhaW5zIHRoaXMgV1NETCBlbGVtZW50LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFbmNvZGluZygpIj48Qj5nZXRFbmNvZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRFbmNvZGluZygpIj48Qj5nZXRFbmNvZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFbmNvZGluZ1N0eWxlcygpIj48Qj5nZXRFbmNvZGluZ1N0eWxlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0RW5kQ29sdW1uKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5nZXRFbmRDb2x1bW4oTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFBhcnNlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBjb2x1bW4gYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgZW5kcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRFbmRMaW5lKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5nZXRFbmRMaW5lKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPjxCPmdldEVPcGVyYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ09wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2dldEVPcGVyYXRpb25zKCkiPjxCPmdldEVPcGVyYXRpb25zKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PEI+Z2V0RU91dHB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVPdXRwdXQoKSI+PEI+Z2V0RU91dHB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKSI+PEI+Z2V0RVBhcmFtZXRlck9yZGVyaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldEVQYXJ0KCkiPjxCPmdldEVQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjZ2V0RVBhcnQoKSI+PEI+Z2V0RVBhcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVNaW1lWG1sPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFUGFydCgpIj48Qj5nZXRFUGFydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldEVQYXJ0cygpIj48Qj5nZXRFUGFydHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCb2R5PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2dldEVQYXJ0cygpIj48Qj5nZXRFUGFydHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNnZXRFUG9ydHMoKSI+PEI+Z2V0RVBvcnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlNlcnZpY2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RVBvcnRUeXBlKCkiPjxCPmdldEVQb3J0VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFUG9ydFR5cGVzKCkiPjxCPmdldEVQb3J0VHlwZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0RVNjaGVtYSgpIj48Qj5nZXRFU2NoZW1hKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFU2VydmljZXMoKSI+PEI+Z2V0RVNlcnZpY2VzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVNlcnZpY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPjxCPmdldEVUeXBlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCkiPjxCPmdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj48Q09ERT48ZW0+RWxlbWVudCBUeXBlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCkiPjxCPmdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPjxDT0RFPjxlbT5SZXF1aXJlZDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpIj48Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBsdWdpbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PEI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFydDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPgotPEREPlRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2libGVFbGVtZW50KCkiPjxCPmdldEV4dGVuc2libGVFbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48Qj5nZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PENPREU+PGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sI2dldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpIj48Qj5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjZ2V0RmFjdG9yeShVUkkpIj48Qj5nZXRGYWN0b3J5KFVSSSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sI2dldEZhY3RvcnkoVVJJLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+Z2V0RmFjdG9yeShVUkksIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXRGYXVsdCgpIj48Qj5nZXRGYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdGYXVsdDwvQT4KLTxERD5UaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVGYXVsdCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEZhdWx0KCkiPjxCPmdldEZhdWx0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5GYXVsdDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCNnZXRIZWFkZXJGYXVsdHMoKSI+PEI+Z2V0SGVhZGVyRmF1bHRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SGVhZGVyIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SFRUUEFkZHJlc3MoKSI+PEI+Z2V0SFRUUEFkZHJlc3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKSI+PEI+Z2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQmluZGluZygpIj48Qj5nZXRIVFRQQmluZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQmluZGluZ19WZXJiKCkiPjxCPmdldEhUVFBCaW5kaW5nX1ZlcmIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCNnZXRWZXJiKCkiPjxDT0RFPjxlbT5WZXJiPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQRmFjdG9yeSgpIj48Qj5nZXRIVFRQRmFjdG9yeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQT3BlcmF0aW9uKCkiPjxCPmdldEhUVFBPcGVyYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBPcGVyYXRpb25fTG9jYXRpb25VUkkoKSI+PEI+Z2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwjZ2V0SFRUUFBhY2thZ2UoKSI+PEI+Z2V0SFRUUFBhY2thZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPgotPEREPlJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBVcmxFbmNvZGVkKCkiPjxCPmdldEhUVFBVcmxFbmNvZGVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PENPREU+PGVtPlVybCBFbmNvZGVkPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKSI+PEI+Z2V0SFRUUFVybFJlcGxhY2VtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUJpbmRpbmcoKSI+PEI+Z2V0SUJpbmRpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklCaW5kaW5nPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUJpbmRpbmdGYXVsdCgpIj48Qj5nZXRJQmluZGluZ0ZhdWx0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JQmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElCaW5kaW5nSW5wdXQoKSI+PEI+Z2V0SUJpbmRpbmdJbnB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJQmluZGluZ09wZXJhdGlvbigpIj48Qj5nZXRJQmluZGluZ09wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUJpbmRpbmdPdXRwdXQoKSI+PEI+Z2V0SUJpbmRpbmdPdXRwdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElEZWZpbml0aW9uKCkiPjxCPmdldElEZWZpbml0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JRGVmaW5pdGlvbjwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48Qj5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKSI+PEI+Z2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUZhdWx0KCkiPjxCPmdldElGYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUZhdWx0PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldElIVFRQQWRkcmVzcygpIj48Qj5nZXRJSFRUUEFkZHJlc3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SUhUVFBCaW5kaW5nKCkiPjxCPmdldElIVFRQQmluZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgQmluZGluZzwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRJSFRUUE9wZXJhdGlvbigpIj48Qj5nZXRJSFRUUE9wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldElIVFRQVXJsRW5jb2RlZCgpIj48Qj5nZXRJSFRUUFVybEVuY29kZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldElIVFRQVXJsUmVwbGFjZW1lbnQoKSI+PEI+Z2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUltcG9ydCgpIj48Qj5nZXRJSW1wb3J0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JSW1wb3J0PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUlucHV0KCkiPjxCPmdldElJbnB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUlucHV0PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUl0ZXJhdG9yKCkiPjxCPmdldElJdGVyYXRvcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUl0ZXJhdG9yPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUxpc3QoKSI+PEI+Z2V0SUxpc3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklMaXN0PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SU1hcCgpIj48Qj5nZXRJTWFwKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JTWFwPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SU1lc3NhZ2UoKSI+PEI+Z2V0SU1lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNZXNzYWdlPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldElNSU1FQ29udGVudCgpIj48Qj5nZXRJTUlNRUNvbnRlbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNSU1FIENvbnRlbnQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0SU1JTUVNaW1lWG1sKCkiPjxCPmdldElNSU1FTWltZVhtbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1JTUUgTWltZSBYbWw8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkiPjxCPmdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0SU1JTUVQYXJ0KCkiPjxCPmdldElNSU1FUGFydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1JTUUgUGFydDwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEltcG9ydCgpIj48Qj5nZXRJbXBvcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5JbXBvcnQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0X0VEZWZpbml0aW9uKCkiPjxCPmdldEltcG9ydF9FRGVmaW5pdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVEZWZpbml0aW9uKCkiPjxDT0RFPjxlbT5FRGVmaW5pdGlvbjwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnRfRVNjaGVtYSgpIj48Qj5nZXRJbXBvcnRfRVNjaGVtYSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVTY2hlbWEoKSI+PENPREU+PGVtPkVTY2hlbWE8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCkiPjxCPmdldEltcG9ydF9Mb2NhdGlvblVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0X05hbWVzcGFjZVVSSSgpIj48Qj5nZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXRJbnB1dCgpIj48Qj5nZXRJbnB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT4KLTxERD5UaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVJbnB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElucHV0KCkiPjxCPmdldElucHV0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5JbnB1dDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJT3BlcmF0aW9uKCkiPjxCPmdldElPcGVyYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklPcGVyYXRpb248L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJT3V0cHV0KCkiPjxCPmdldElPdXRwdXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklPdXRwdXQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJUGFydCgpIj48Qj5nZXRJUGFydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVBhcnQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJUG9ydCgpIj48Qj5nZXRJUG9ydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVBvcnQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJUG9ydFR5cGUoKSI+PEI+Z2V0SVBvcnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JUG9ydCBUeXBlPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SVNlcnZpY2UoKSI+PEI+Z2V0SVNlcnZpY2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTZXJ2aWNlPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldElTT0FQQWRkcmVzcygpIj48Qj5nZXRJU09BUEFkZHJlc3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEFkZHJlc3M8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0SVNPQVBCaW5kaW5nKCkiPjxCPmdldElTT0FQQmluZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNPQVAgQmluZGluZzwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRJU09BUEJvZHkoKSI+PEI+Z2V0SVNPQVBCb2R5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JU09BUCBCb2R5PC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldElTT0FQRmF1bHQoKSI+PEI+Z2V0SVNPQVBGYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNPQVAgRmF1bHQ8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0SVNPQVBIZWFkZXIoKSI+PEI+Z2V0SVNPQVBIZWFkZXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEhlYWRlcjwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRJU09BUEhlYWRlckZhdWx0KCkiPjxCPmdldElTT0FQSGVhZGVyRmF1bHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRJU09BUE9wZXJhdGlvbigpIj48Qj5nZXRJU09BUE9wZXJhdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldElTdHJpbmcoKSI+PEI+Z2V0SVN0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPklTdHJpbmc8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJVHlwZXMoKSI+PEI+Z2V0SVR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JVHlwZXM8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJVVJMKCkiPjxCPmdldElVUkwoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklVUkw8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldEtleSgpIj48Qj5nZXRLZXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPgotPEREPkdldHMgdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0S2V5KCkiPjxCPmdldEtleSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNnZXRMaW5lKCkiPjxCPmdldExpbmUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldExpc3QoKSI+PEI+Z2V0TGlzdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPkxpc3Q8L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldExvY2F0aW9uKCkiPjxCPmdldExvY2F0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0TG9jYXRpb24oKSI+PEI+Z2V0TG9jYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxCPmdldExvY2F0aW9uVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQWRkcmVzczwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PEI+Z2V0TG9jYXRpb25VUkkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxCPmdldExvY2F0aW9uVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQWRkcmVzczwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxCPmdldExvY2F0aW9uVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TWVzc2FnZSgpIj48Qj5nZXRNZXNzYWdlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldE1lc3NhZ2UoKSI+PEI+Z2V0TWVzc2FnZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlKCkiPjxCPmdldE1lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+TWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlX0VQYXJ0cygpIj48Qj5nZXRNZXNzYWdlX0VQYXJ0cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2dldEVQYXJ0cygpIj48Q09ERT48ZW0+RVBhcnRzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE1lc3NhZ2VfUU5hbWUoKSI+PEI+Z2V0TWVzc2FnZV9RTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZV9VbmRlZmluZWQoKSI+PEI+Z2V0TWVzc2FnZV9VbmRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlUmVmZXJlbmNlKCkiPjxCPmdldE1lc3NhZ2VSZWZlcmVuY2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZVJlZmVyZW5jZV9FTWVzc2FnZSgpIj48Qj5nZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKSI+PEI+Z2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVDb250ZW50KCkiPjxCPmdldE1JTUVDb250ZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+PGVtPkNvbnRlbnQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVDb250ZW50X0VQYXJ0KCkiPjxCPmdldE1JTUVDb250ZW50X0VQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FQ29udGVudF9UeXBlKCkiPjxCPmdldE1JTUVDb250ZW50X1R5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRUeXBlKCkiPjxDT0RFPjxlbT5UeXBlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FRmFjdG9yeSgpIj48Qj5nZXRNSU1FRmFjdG9yeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FTWltZVhtbCgpIj48Qj5nZXRNSU1FTWltZVhtbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxDT0RFPjxlbT5NaW1lIFhtbDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKSI+PEI+Z2V0TUlNRU1pbWVYbWxfRVBhcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkiPjxCPmdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+PGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKSI+PEI+Z2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCNnZXRFTUlNRVBhcnQoKSI+PENPREU+PGVtPkVNSU1FIFBhcnQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sI2dldE1JTUVQYWNrYWdlKCkiPjxCPmdldE1JTUVQYWNrYWdlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FUGFydCgpIj48Qj5nZXRNSU1FUGFydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxDT0RFPjxlbT5QYXJ0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxCPmdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PENPREU+PGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCNnZXRNSU1FUGFydHMoKSI+PEI+Z2V0TUlNRVBhcnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj48Qj5nZXROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhdWx0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdGYXVsdDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxCPmdldE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNnZXROYW1lKCkiPjxCPmdldE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjZ2V0TmFtZSgpIj48Qj5nZXROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Qj5nZXROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXROYW1lKCkiPjxCPmdldE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0TmFtZSgpIj48Qj5nZXROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXROYW1lc3BhY2UoKSI+PEI+Z2V0TmFtZXNwYWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+TmFtZXNwYWNlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE5hbWVzcGFjZV9QcmVmaXgoKSI+PEI+Z2V0TmFtZXNwYWNlX1ByZWZpeCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFByZWZpeCgpIj48Q09ERT48ZW0+UHJlZml4PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE5hbWVzcGFjZV9VUkkoKSI+PEI+Z2V0TmFtZXNwYWNlX1VSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFVSSSgpIj48Q09ERT48ZW0+VVJJPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PEI+Z2V0TmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxCPmdldE5hbWVzcGFjZVVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYXVsdDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PEI+Z2V0TmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PEI+Z2V0TmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXROb2RlKCkiPjxCPmdldE5vZGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPgotPEREPkdldHMgdGhlIERPTSBOb2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldE5vZGUoKSI+PEI+Z2V0Tm9kZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb24oKSI+PEI+Z2V0T3BlcmF0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9FRmF1bHRzKCkiPjxCPmdldE9wZXJhdGlvbl9FRmF1bHRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFRmF1bHRzKCkiPjxDT0RFPjxlbT5FRmF1bHRzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9FSW5wdXQoKSI+PEI+Z2V0T3BlcmF0aW9uX0VJbnB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVJbnB1dCgpIj48Q09ERT48ZW0+RUlucHV0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9FT3V0cHV0KCkiPjxCPmdldE9wZXJhdGlvbl9FT3V0cHV0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RU91dHB1dCgpIj48Q09ERT48ZW0+RU91dHB1dDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCkiPjxCPmdldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVQYXJhbWV0ZXJPcmRlcmluZygpIj48Q09ERT48ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fTmFtZSgpIj48Qj5nZXRPcGVyYXRpb25fTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uX1N0eWxlKCkiPjxCPmdldE9wZXJhdGlvbl9TdHlsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fVW5kZWZpbmVkKCkiPjxCPmdldE9wZXJhdGlvbl9VbmRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvblR5cGUoKSI+PEI+Z2V0T3BlcmF0aW9uVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPk9wZXJhdGlvbiBUeXBlPC9lbT48L0NPREU+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNnZXRPdXRwdXQoKSI+PEI+Z2V0T3V0cHV0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPdXRwdXQ8L0E+Ci08REQ+VGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFT3V0cHV0KCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3V0cHV0KCkiPjxCPmdldE91dHB1dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPk91dHB1dDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjZ2V0UGFydCgpIj48Qj5nZXRQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT4KLTxERD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjZ2V0UGFydCgpIj48Qj5nZXRQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT4KLTxERD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0UGFydCgpIj48Qj5nZXRQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnQoKSI+PEI+Z2V0UGFydCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5QYXJ0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uKCkiPjxCPmdldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVsZW1lbnREZWNsYXJhdGlvbigpIj48Q09ERT48ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0X0VsZW1lbnROYW1lKCkiPjxCPmdldFBhcnRfRWxlbWVudE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudE5hbWUoKSI+PENPREU+PGVtPkVsZW1lbnQgTmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0X0VNZXNzYWdlKCkiPjxCPmdldFBhcnRfRU1lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfTmFtZSgpIj48Qj5nZXRQYXJ0X05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0X1R5cGVEZWZpbml0aW9uKCkiPjxCPmdldFBhcnRfVHlwZURlZmluaXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZURlZmluaXRpb24oKSI+PENPREU+PGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0X1R5cGVOYW1lKCkiPjxCPmdldFBhcnRfVHlwZU5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZU5hbWUoKSI+PENPREU+PGVtPlR5cGUgTmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2dldFBsdWdpbigpIj48Qj5nZXRQbHVnaW4oKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luPC9BPgotPEREPlJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2dldFBsdWdpblJlc291cmNlTG9jYXRvcigpIj48Qj5nZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW48L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0KCkiPjxCPmdldFBvcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+UG9ydDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0X0VCaW5kaW5nKCkiPjxCPmdldFBvcnRfRUJpbmRpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0RUJpbmRpbmcoKSI+PENPREU+PGVtPkVCaW5kaW5nPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBvcnRfTmFtZSgpIj48Qj5nZXRQb3J0X05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0VHlwZSgpIj48Qj5nZXRQb3J0VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+UG9ydCBUeXBlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBvcnRUeXBlX0VPcGVyYXRpb25zKCkiPjxCPmdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2dldEVPcGVyYXRpb25zKCkiPjxDT0RFPjxlbT5FT3BlcmF0aW9uczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0VHlwZV9RTmFtZSgpIj48Qj5nZXRQb3J0VHlwZV9RTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBvcnRUeXBlX1VuZGVmaW5lZCgpIj48Qj5nZXRQb3J0VHlwZV9VbmRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFByZWZpeCgpIj48Qj5nZXRQcmVmaXgoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5OYW1lc3BhY2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJlZml4PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sI2dldFByb3RvY29sVG9GYWN0b3J5TWFwKCkiPjxCPmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0UU5hbWUoKSI+PEI+Z2V0UU5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldFFOYW1lKCkiPjxCPmdldFFOYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRRTmFtZSgpIj48Qj5nZXRRTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2dldFFOYW1lKCkiPjxCPmdldFFOYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2dldFFOYW1lKCkiPjxCPmdldFFOYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlNlcnZpY2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UU5hbWUoKSI+PEI+Z2V0UU5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRTY2hlbWEoKSI+PEI+Z2V0U2NoZW1hKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPgotPEREPlRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RVNjaGVtYSgpLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0U2NoZW1hKCkiPjxCPmdldFNjaGVtYSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sI2dldFNjaGVtYXMoKSI+PEI+Z2V0U2NoZW1hcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+Ci08REQ+UmV0dXJucyBhIExpc3Qgb2YgaW5saW5lIFhTRFNjaGVtYSBpbnN0YW5jZXMgaW4gdGhpcyBUeXBlcy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sI2dldFNjaGVtYXMoamF2YS5sYW5nLlN0cmluZykiPjxCPmdldFNjaGVtYXMoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlR5cGVzPC9BPgotPEREPlJldHVybnMgYSBMaXN0IG9mIGlubGluZSBYU0RTY2hlbWEgaW5zdGFuY2VzIGluIHRoaXMgVHlwZXMuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRTZXJ2aWNlKCkiPjxCPmdldFNlcnZpY2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+U2VydmljZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRTZXJ2aWNlX0VQb3J0cygpIj48Qj5nZXRTZXJ2aWNlX0VQb3J0cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2dldEVQb3J0cygpIj48Q09ERT48ZW0+RVBvcnRzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFNlcnZpY2VfUU5hbWUoKSI+PEI+Z2V0U2VydmljZV9RTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0U2VydmljZV9VbmRlZmluZWQoKSI+PEI+Z2V0U2VydmljZV9VbmRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldFNldmVyaXR5KCkiPjxCPmdldFNldmVyaXR5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT4KLTxERD5Qcm92aWRlcyB0aGlzIGRpYWdub3N0aWMncyBzZXZlcml0eS4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldFNldmVyaXR5KCkiPjxCPmdldFNldmVyaXR5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI2dldFNvYXBBY3Rpb25VUkkoKSI+PEI+Z2V0U29hcEFjdGlvblVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQT3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEFkZHJlc3MoKSI+PEI+Z2V0U09BUEFkZHJlc3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKSI+PEI+Z2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQmluZGluZygpIj48Qj5nZXRTT0FQQmluZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQmluZGluZ19TdHlsZSgpIj48Qj5nZXRTT0FQQmluZGluZ19TdHlsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCkiPjxCPmdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFRyYW5zcG9ydFVSSSgpIj48Q09ERT48ZW0+VHJhbnNwb3J0IFVSSTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHkoKSI+PEI+Z2V0U09BUEJvZHkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+Qm9keTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCkiPjxCPmdldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0RUVuY29kaW5nU3R5bGVzKCkiPjxDT0RFPjxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQm9keV9FUGFydHMoKSI+PEI+Z2V0U09BUEJvZHlfRVBhcnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRFUGFydHMoKSI+PENPREU+PGVtPkVQYXJ0czwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCkiPjxCPmdldFNPQVBCb2R5X05hbWVzcGFjZVVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHlfVXNlKCkiPjxCPmdldFNPQVBCb2R5X1VzZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldFVzZSgpIj48Q09ERT48ZW0+VXNlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmFjdG9yeSgpIj48Qj5nZXRTT0FQRmFjdG9yeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHQoKSI+PEI+Z2V0U09BUEZhdWx0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5GYXVsdDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlcygpIj48Qj5nZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X05hbWUoKSI+PEI+Z2V0U09BUEZhdWx0X05hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X05hbWVzcGFjZVVSSSgpIj48Qj5nZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X1VzZSgpIj48Qj5nZXRTT0FQRmF1bHRfVXNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldFVzZSgpIj48Q09ERT48ZW0+VXNlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyKCkiPjxCPmdldFNPQVBIZWFkZXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5IZWFkZXI8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJfSGVhZGVyRmF1bHRzKCkiPjxCPmdldFNPQVBIZWFkZXJfSGVhZGVyRmF1bHRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sI2dldEhlYWRlckZhdWx0cygpIj48Q09ERT48ZW0+SGVhZGVyIEZhdWx0czwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2UoKSI+PEI+Z2V0U09BUEhlYWRlckJhc2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+SGVhZGVyIEJhc2U8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlcygpIj48Qj5nZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVFbmNvZGluZ1N0eWxlcygpIj48Q09ERT48ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKSI+PEI+Z2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFTWVzc2FnZSgpIj48Q09ERT48ZW0+RU1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCkiPjxCPmdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCkiPjxCPmdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRNZXNzYWdlKCkiPjxDT0RFPjxlbT5NZXNzYWdlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKSI+PEI+Z2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkiPjxCPmdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRQYXJ0KCkiPjxDT0RFPjxlbT5QYXJ0PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKSI+PEI+Z2V0U09BUEhlYWRlckJhc2VfVXNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJGYXVsdCgpIj48Qj5nZXRTT0FQSGVhZGVyRmF1bHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUE9wZXJhdGlvbigpIj48Qj5nZXRTT0FQT3BlcmF0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKSI+PEI+Z2V0U09BUE9wZXJhdGlvbl9Tb2FwQWN0aW9uVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTb2FwQWN0aW9uVVJJKCkiPjxDT0RFPjxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBPcGVyYXRpb25fU3R5bGUoKSI+PEI+Z2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNnZXRTT0FQUGFja2FnZSgpIj48Qj5nZXRTT0FQUGFja2FnZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0U3RhcnRDb2x1bW4ob3JnLnczYy5kb20uTm9kZSkiPjxCPmdldFN0YXJ0Q29sdW1uKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIHN0YXJ0cy4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRTdGFydExpbmUob3JnLnczYy5kb20uTm9kZSkiPjxCPmdldFN0YXJ0TGluZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPlJldHVybnMgdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFN0eWxlKCkiPjxCPmdldFN0eWxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQmluZGluZzwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj48Qj5nZXRTdHlsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQT3BlcmF0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj48Qj5nZXRTdHlsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldFN1YnN0aXR1dGlvbnMoKSI+PEI+Z2V0U3Vic3RpdHV0aW9ucygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWM8L0E+Ci08REQ+UmV0dXJucyBhIGxpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBwYXJhbWV0ZXJzIGFzIFN0cmluZ3MuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNnZXRTdWJzdGl0dXRpb25zKCkiPjxCPmdldFN1YnN0aXR1dGlvbnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRUYXJnZXROYW1lc3BhY2UoKSI+PEI+Z2V0VGFyZ2V0TmFtZXNwYWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0VHJhbnNwb3J0VVJJKCkiPjxCPmdldFRyYW5zcG9ydFVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJpbmRpbmc8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjZ2V0VHlwZSgpIj48Qj5nZXRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZURlZmluaXRpb24oKSI+PEI+Z2V0VHlwZURlZmluaXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlTmFtZSgpIj48Qj5nZXRUeXBlTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRUeXBlcygpIj48Qj5nZXRUeXBlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+VHlwZXM8L2VtPjwvQ09ERT48L0E+JwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjxCPmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpIj48Qj5nZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldENoaWxkcmVuKCkiPjxDT0RFPjxlbT5DaGlsZHJlbjwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0VVJJKCkiPjxCPmdldFVSSSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk5hbWVzcGFjZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldFVzZSgpIj48Qj5nZXRVc2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCb2R5PC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldFVzZSgpIj48Qj5nZXRVc2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRVc2UoKSI+PEI+Z2V0VXNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2dldFVzZXJEYXRhKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5nZXRVc2VyRGF0YShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUGFyc2VyPC9BPgotPEREPlJldHVybnMgdGhlIHVzZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Qj5nZXRWZXJiKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQmluZGluZzwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZXJiPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50KCkiPjxCPmdldFdTRExFbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCkiPjxCPmdldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj48Q09ERT48ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT48L0NPREU+PC9BPicKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50X0VsZW1lbnQoKSI+PEI+Z2V0V1NETEVsZW1lbnRfRWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT48ZW0+RWxlbWVudDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRXU0RMRXhjZXB0aW9uKCkiPjxCPmdldFdTRExFeGNlcHRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5FeGNlcHRpb248L2VtPjwvQ09ERT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRXU0RMRmFjdG9yeSgpIj48Qj5nZXRXU0RMRmFjdG9yeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2dldFdTRExQYWNrYWdlKCkiPjxCPmdldFdTRExQYWNrYWdlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjxCPmdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPjwvQT4nCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKSI+PEI+Z2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRTY2hlbWEoKSI+PENPREU+PGVtPlNjaGVtYTwvZW0+PC9DT0RFPjwvQT4nCi08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC02Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTguaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC03Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC04Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC04Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2Mjk2NzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtOC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUgtSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJILUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTcuaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOS5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtOC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTguaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtYWluIj48L0E+Ci08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci08QSBOQU1FPSJfSF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkg8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0FERFJFU1MiPjxCPkhUVFBfQUREUkVTUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX0FERFJFU1MiPjxCPkhUVFBfQUREUkVTUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5BZGRyZXNzPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5IVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fRUxFTUVOVCI+PEI+SFRUUF9BRERSRVNTX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fRUxFTUVOVF9UWVBFIj48Qj5IVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJIj48Qj5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0hUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJIj48Qj5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19SRVFVSVJFRCI+PEI+SFRUUF9BRERSRVNTX19SRVFVSVJFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPjxCPkhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFkZHJlc3M8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkciPjxCPkhUVFBfQklORElORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX0JJTkRJTkciPjxCPkhUVFBfQklORElORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48Qj5IVFRQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fRUxFTUVOVCI+PEI+SFRUUF9CSU5ESU5HX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fRUxFTUVOVF9UWVBFIj48Qj5IVFRQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fUkVRVUlSRUQiPjxCPkhUVFBfQklORElOR19fUkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfQklORElOR19fVkVSQiI+PEI+SFRUUF9CSU5ESU5HX19WRVJCPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0hUVFBfQklORElOR19fVkVSQiI+PEI+SFRUUF9CSU5ESU5HX19WRVJCPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjxCPkhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmc8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX09QRVJBVElPTiI+PEI+SFRUUF9PUEVSQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX09QRVJBVElPTiI+PEI+SFRUUF9PUEVSQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPkhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX09QRVJBVElPTl9fRUxFTUVOVCI+PEI+SFRUUF9PUEVSQVRJT05fX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSI+PEI+SFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkkiPjxCPkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJIj48Qj5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX09QRVJBVElPTl9fUkVRVUlSRUQiPjxCPkhUVFBfT1BFUkFUSU9OX19SRVFVSVJFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PEI+SFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PcGVyYXRpb248L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEIj48Qj5IVFRQX1VSTF9FTkNPREVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5VcmwgRW5jb2RlZDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX1VSTF9FTkNPREVEIj48Qj5IVFRQX1VSTF9FTkNPREVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlVybCBFbmNvZGVkPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PEI+SFRUUF9VUkxfRU5DT0RFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVCI+PEI+SFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UX1RZUEUiPjxCPkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX0VOQ09ERURfX1JFUVVJUkVEIj48Qj5IVFRQX1VSTF9FTkNPREVEX19SRVFVSVJFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UIj48Qj5IVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVCI+PEI+SFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlVybCBSZXBsYWNlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVCI+PEI+SFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX1JFUExBQ0VNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPkhUVFBfVVJMX1JFUExBQ0VNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVCI+PEI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlRfVFlQRSI+PEI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX1JFUExBQ0VNRU5UX19SRVFVSVJFRCI+PEI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX1JFUVVJUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVF9GRUFUVVJFX0NPVU5UIj48Qj5IVFRQX1VSTF9SRVBMQUNFTUVOVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEFkZHJlc3M8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPic8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQmluZGluZzwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+JzxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBGYWN0b3J5PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+PEREPlRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLjxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFBhY2thZ2U8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48REQ+VGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9BPiAtIEludGVyZmFjZSBpbiA8QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48REQ+RGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIAotICAgZWFjaCBjbGFzcywKLSAgIGVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLAotICAgZWFjaCBlbnVtLAotICAgYW5kIGVhY2ggZGF0YSB0eXBlCi0gCi0gPCE8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsRW5jb2RlZDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VcmwgRW5jb2RlZDwvYj48L2VtPic8RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybFJlcGxhY2VtZW50PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+PEREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPic8L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC03Lmh0bWwiPjxCPlBSRVYgTEVUVEVSPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTkuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTguaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC04Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC05Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC1maWxlcy9pbmRleC05Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMjZkZTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvaW5kZXgtZmlsZXMvaW5kZXgtOS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjA4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUktSW5kZXgKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJLUluZGV4IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vb3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9ImluZGV4LTguaHRtbCI+PEI+UFJFViBMRVRURVI8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+PEI+TkVYVCBMRVRURVI8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vaW5kZXguaHRtbD9pbmRleC1maWxlc2luZGV4LTkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC05Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEEgSFJFRj0iaW5kZXgtMS5odG1sIj5BPC9BPiA8QSBIUkVGPSJpbmRleC0yLmh0bWwiPkI8L0E+IDxBIEhSRUY9ImluZGV4LTMuaHRtbCI+QzwvQT4gPEEgSFJFRj0iaW5kZXgtNC5odG1sIj5EPC9BPiA8QSBIUkVGPSJpbmRleC01Lmh0bWwiPkU8L0E+IDxBIEhSRUY9ImluZGV4LTYuaHRtbCI+RjwvQT4gPEEgSFJFRj0iaW5kZXgtNy5odG1sIj5HPC9BPiA8QSBIUkVGPSJpbmRleC04Lmh0bWwiPkg8L0E+IDxBIEhSRUY9ImluZGV4LTkuaHRtbCI+STwvQT4gPEEgSFJFRj0iaW5kZXgtMTAuaHRtbCI+TDwvQT4gPEEgSFJFRj0iaW5kZXgtMTEuaHRtbCI+TTwvQT4gPEEgSFJFRj0iaW5kZXgtMTIuaHRtbCI+TjwvQT4gPEEgSFJFRj0iaW5kZXgtMTMuaHRtbCI+TzwvQT4gPEEgSFJFRj0iaW5kZXgtMTQuaHRtbCI+UDwvQT4gPEEgSFJFRj0iaW5kZXgtMTUuaHRtbCI+UTwvQT4gPEEgSFJFRj0iaW5kZXgtMTYuaHRtbCI+UjwvQT4gPEEgSFJFRj0iaW5kZXgtMTcuaHRtbCI+UzwvQT4gPEEgSFJFRj0iaW5kZXgtMTguaHRtbCI+VDwvQT4gPEEgSFJFRj0iaW5kZXgtMTkuaHRtbCI+VTwvQT4gPEEgSFJFRj0iaW5kZXgtMjAuaHRtbCI+VjwvQT4gPEEgSFJFRj0iaW5kZXgtMjEuaHRtbCI+VzwvQT4gPEEgSFJFRj0iaW5kZXgtMjIuaHRtbCI+WDwvQT4gPEhSPgotPEEgTkFNRT0iX0lfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5JPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElORyI+PEI+SUJJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUJJTkRJTkciPjxCPklCSU5ESU5HPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfRkFVTFQiPjxCPklCSU5ESU5HX0ZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HX0ZBVUxUIj48Qj5JQklORElOR19GQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPjxCPklCSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjxCPklCSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmc8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0lOUFVUIj48Qj5JQklORElOR19JTlBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJQklORElOR19JTlBVVCI+PEI+SUJJTkRJTkdfSU5QVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UIj48Qj5JQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIElucHV0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19PUEVSQVRJT04iPjxCPklCSU5ESU5HX09QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUJJTkRJTkdfT1BFUkFUSU9OIj48Qj5JQklORElOR19PUEVSQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjxCPklCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfT1VUUFVUIj48Qj5JQklORElOR19PVVRQVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HX09VVFBVVCI+PEI+SUJJTkRJTkdfT1VUUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UIj48Qj5JQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lERUZJTklUSU9OIj48Qj5JREVGSU5JVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SURlZmluaXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJREVGSU5JVElPTiI+PEI+SURFRklOSVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SURlZmluaXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UIj48Qj5JREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklEZWZpbml0aW9uPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRVhURU5TSUJJTElUWV9FTEVNRU5UIj48Qj5JRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUVYVEVOU0lCSUxJVFlfRUxFTUVOVCI+PEI+SUVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj48Qj5JRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUVYVEVOU0lPTl9SRUdJU1RSWSI+PEI+SUVYVEVOU0lPTl9SRUdJU1RSWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lFWFRFTlNJT05fUkVHSVNUUlkiPjxCPklFWFRFTlNJT05fUkVHSVNUUlk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lFWFRFTlNJT05fUkVHSVNUUllfRkVBVFVSRV9DT1VOVCI+PEI+SUVYVEVOU0lPTl9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lGQVVMVCI+PEI+SUZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJRkFVTFQiPjxCPklGQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRkFVTFRfRkVBVFVSRV9DT1VOVCI+PEI+SUZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUZhdWx0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfQUREUkVTUyI+PEI+SUhUVFBfQUREUkVTUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgQWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJSFRUUF9BRERSRVNTIj48Qj5JSFRUUF9BRERSRVNTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj48Qj5JSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX0JJTkRJTkciPjxCPklIVFRQX0JJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUhUVFBfQklORElORyI+PEI+SUhUVFBfQklORElORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBCaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+PEI+SUhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9PUEVSQVRJT04iPjxCPklIVFRQX09QRVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0lIVFRQX09QRVJBVElPTiI+PEI+SUhUVFBfT1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PEI+SUhUVFBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfVVJMX0VOQ09ERUQiPjxCPklIVFRQX1VSTF9FTkNPREVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJSFRUUF9VUkxfRU5DT0RFRCI+PEI+SUhUVFBfVVJMX0VOQ09ERUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVCI+PEI+SUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX1VSTF9SRVBMQUNFTUVOVCI+PEI+SUhUVFBfVVJMX1JFUExBQ0VNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUhUVFBfVVJMX1JFUExBQ0VNRU5UIj48Qj5JSFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0lIVFRQX1VSTF9SRVBMQUNFTUVOVF9GRUFUVVJFX0NPVU5UIj48Qj5JSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lJTVBPUlQiPjxCPklJTVBPUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklJbXBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJSU1QT1JUIj48Qj5JSU1QT1JUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklJbXBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSU1QT1JUX0ZFQVRVUkVfQ09VTlQiPjxCPklJTVBPUlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSW1wb3J0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSU5QVVQiPjxCPklJTlBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUlucHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUlOUFVUIj48Qj5JSU5QVVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUlucHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUlOUFVUX0ZFQVRVUkVfQ09VTlQiPjxCPklJTlBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklJbnB1dDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUlURVJBVE9SIj48Qj5JSVRFUkFUT1I8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklJdGVyYXRvcjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lJVEVSQVRPUiI+PEI+SUlURVJBVE9SPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklJdGVyYXRvcjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lJVEVSQVRPUl9GRUFUVVJFX0NPVU5UIj48Qj5JSVRFUkFUT1JfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSXRlcmF0b3I8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lMSVNUIj48Qj5JTElTVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUxpc3Q8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJTElTVCI+PEI+SUxJU1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUxpc3Q8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTElTVF9GRUFUVVJFX0NPVU5UIj48Qj5JTElTVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklMaXN0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTUFQIj48Qj5JTUFQPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTWFwPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU1BUCI+PEI+SU1BUDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JTWFwPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1BUF9GRUFUVVJFX0NPVU5UIj48Qj5JTUFQX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1hcDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1FU1NBR0UiPjxCPklNRVNTQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTWVzc2FnZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNRVNTQUdFIj48Qj5JTUVTU0FHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JTWVzc2FnZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPjxCPklNRVNTQUdFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1lc3NhZ2U8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9DT05URU5UIj48Qj5JTUlNRV9DT05URU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBDb250ZW50PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sI0lNSU1FX0NPTlRFTlQiPjxCPklNSU1FX0NPTlRFTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgQ29udGVudDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQiPjxCPklNSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjSU1JTUVfTUlNRV9YTUwiPjxCPklNSU1FX01JTUVfWE1MPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJTUlNRV9NSU1FX1hNTCI+PEI+SU1JTUVfTUlNRV9YTUw8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgTWltZSBYbWw8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjSU1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+PEI+SU1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX01VTFRJUEFSVF9SRUxBVEVEIj48Qj5JTUlNRV9NVUxUSVBBUlRfUkVMQVRFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU1JTUVfTVVMVElQQVJUX1JFTEFURUQiPjxCPklNSU1FX01VTFRJUEFSVF9SRUxBVEVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPjxCPklNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9QQVJUIj48Qj5JTUlNRV9QQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBQYXJ0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sI0lNSU1FX1BBUlQiPjxCPklNSU1FX1BBUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgUGFydDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQiPjxCPklNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBQYXJ0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkltcG9ydDwvQj48L0E+IC0gSW50ZXJmYWNlIGluIDxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48REQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW1wb3J0PC9iPjwvZW0+Jy48RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjSU1QT1JUIj48Qj5JTVBPUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW1wb3J0IjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlQiPjxCPklNUE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SW1wb3J0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU1QT1JUIj48Qj5JTVBPUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SW1wb3J0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPklNUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0VERUZJTklUSU9OIj48Qj5JTVBPUlRfX0VERUZJTklUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNUE9SVF9fRURFRklOSVRJT04iPjxCPklNUE9SVF9fRURFRklOSVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RURlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48Qj5JTVBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19FTEVNRU5UIj48Qj5JTVBPUlRfX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0VTQ0hFTUEiPjxCPklNUE9SVF9fRVNDSEVNQTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNUE9SVF9fRVNDSEVNQSI+PEI+SU1QT1JUX19FU0NIRU1BPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0xPQ0FUSU9OX1VSSSI+PEI+SU1QT1JUX19MT0NBVElPTl9VUkk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNUE9SVF9fTE9DQVRJT05fVVJJIj48Qj5JTVBPUlRfX0xPQ0FUSU9OX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX05BTUVTUEFDRV9VUkkiPjxCPklNUE9SVF9fTkFNRVNQQUNFX1VSSTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNUE9SVF9fTkFNRVNQQUNFX1VSSSI+PEI+SU1QT1JUX19OQU1FU1BBQ0VfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjSU1QT1JUX0VMRU1FTlRfVEFHIj48Qj5JTVBPUlRfRUxFTUVOVF9UQUc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW1wb3J0IjwvY29kZT4uCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfRkVBVFVSRV9DT1VOVCI+PEI+SU1QT1JUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW1wb3J0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjSU5GT1JNQVRJT04iPjxCPklORk9STUFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4KLTxERD5UaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvYmxlbSBpcyBvbmx5IHBvdGVudGlhbCBhbmQgdGhhdCB0aGUKLSBkZWZpbml0aW9uIGlzIHZlcnkgbGlrZWx5IHN1aXRhYmxlIGZvciB1c2UuCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjSU5GT1JNQVRJT05fTElURVJBTCI+PEI+SU5GT1JNQVRJT05fTElURVJBTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08REQ+VGhlICc8ZW0+PGI+SW5mb3JtYXRpb248L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPklucHV0PC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjxERD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnB1dDwvYj48L2VtPicuPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0lOUFVUIj48Qj5JTlBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbnB1dCI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU5QVVQiPjxCPklOUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JbnB1dDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lOUFVUIj48Qj5JTlBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JbnB1dDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjxCPklOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PEI+SU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdAotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU5QVVRfX0VMRU1FTlQiPjxCPklOUFVUX19FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU5QVVRfX0VNRVNTQUdFIj48Qj5JTlBVVF9fRU1FU1NBR0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU5QVVRfX05BTUUiPjxCPklOUFVUX19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0lOUFVUX0VMRU1FTlRfVEFHIj48Qj5JTlBVVF9FTEVNRU5UX1RBRzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbnB1dCI8L2NvZGU+LgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU5QVVRfRkVBVFVSRV9DT1VOVCI+PEI+SU5QVVRfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnB1dDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCNJTlNUQU5DRSI+PEI+SU5TVEFOQ0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luPC9BPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbi4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lPUEVSQVRJT04iPjxCPklPUEVSQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJT1BFUkFUSU9OIj48Qj5JT1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjxCPklPUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JT3BlcmF0aW9uPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJT1VUUFVUIj48Qj5JT1VUUFVUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JT3V0cHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU9VVFBVVCI+PEI+SU9VVFBVVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JT3V0cHV0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU9VVFBVVF9GRUFUVVJFX0NPVU5UIj48Qj5JT1VUUFVUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU91dHB1dDwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBBUlQiPjxCPklQQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JUGFydDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lQQVJUIj48Qj5JUEFSVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JUGFydDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lQQVJUX0ZFQVRVUkVfQ09VTlQiPjxCPklQQVJUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBhcnQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lQT1JUIj48Qj5JUE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJUE9SVCI+PEI+SVBPUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJUE9SVF9GRUFUVVJFX0NPVU5UIj48Qj5JUE9SVF9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQb3J0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJUE9SVF9UWVBFIj48Qj5JUE9SVF9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JUG9ydCBUeXBlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVBPUlRfVFlQRSI+PEI+SVBPUlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JUG9ydCBUeXBlPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj48Qj5JUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBvcnQgVHlwZTwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVNFUlZJQ0UiPjxCPklTRVJWSUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JU2VydmljZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lTRVJWSUNFIj48Qj5JU0VSVklDRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU2VydmljZTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lTRVJWSUNFX0ZFQVRVUkVfQ09VTlQiPjxCPklTRVJWSUNFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNlcnZpY2U8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNpc01hdGNoaW5nTmFtZXNwYWNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5pc01hdGNoaW5nTmFtZXNwYWNlKFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPgotPEREPlJldHVybnMgdHJ1ZSBpZiBuYW1lc3BhY2UxIGVxdWFscyB0byBuYW1lc3BhY2UyLgotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0FERFJFU1MiPjxCPklTT0FQX0FERFJFU1M8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNPQVBfQUREUkVTUyI+PEI+SVNPQVBfQUREUkVTUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBBZGRyZXNzPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+PEI+SVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9CSU5ESU5HIj48Qj5JU09BUF9CSU5ESU5HPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBCaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI0lTT0FQX0JJTkRJTkciPjxCPklTT0FQX0JJTkRJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgQmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjxCPklTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBCaW5kaW5nPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQk9EWSI+PEI+SVNPQVBfQk9EWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgQm9keTwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJU09BUF9CT0RZIj48Qj5JU09BUF9CT0RZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJvZHk8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UIj48Qj5JU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQm9keTwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0ZBVUxUIj48Qj5JU09BUF9GQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNPQVBfRkFVTFQiPjxCPklTT0FQX0ZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPjxCPklTT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9IRUFERVIiPjxCPklTT0FQX0hFQURFUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgSGVhZGVyPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI0lTT0FQX0hFQURFUiI+PEI+SVNPQVBfSEVBREVSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEhlYWRlcjwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9IRUFERVJfRkFVTFQiPjxCPklTT0FQX0hFQURFUl9GQVVMVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI0lTT0FQX0hFQURFUl9GQVVMVCI+PEI+SVNPQVBfSEVBREVSX0ZBVUxUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PEI+SVNPQVBfSEVBREVSX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQiPjxCPklTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEhlYWRlcjwvZW0+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX09QRVJBVElPTiI+PEI+SVNPQVBfT1BFUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNPQVBfT1BFUkFUSU9OIj48Qj5JU09BUF9PUEVSQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48Qj5JU09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBPcGVyYXRpb248L2VtPicgY2xhc3MKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+PEI+aXNSZXF1aXJlZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTVFJJTkciPjxCPklTVFJJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPklTdHJpbmc8L2VtPicgZGF0YSB0eXBlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNUUklORyI+PEI+SVNUUklORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5JU3RyaW5nPC9lbT4nIGRhdGEgdHlwZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNpc1VuZGVmaW5lZCgpIj48Qj5pc1VuZGVmaW5lZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxCPmlzVW5kZWZpbmVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Qj5pc1VuZGVmaW5lZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZQotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjaXNVbmRlZmluZWQoKSI+PEI+aXNVbmRlZmluZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxCPmlzVW5kZWZpbmVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlNlcnZpY2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNpc1dTRExOYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPjxCPmlzV1NETE5hbWVzcGFjZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExDb25zdGFudHM8L0E+Ci08REQ+UmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBuYW1lc3BhY2UgaXMgdGhlIFdTREwgbmFtZXNwYWNlIG9yIG5vdC4KLTxEVD48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lUWVBFUyI+PEI+SVRZUEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JVHlwZXM8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJVFlQRVMiPjxCPklUWVBFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JVHlwZXM8L2VtPjwvQ09ERT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJVFlQRVNfRkVBVFVSRV9DT1VOVCI+PEI+SVRZUEVTX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVR5cGVzPC9lbT4nIGNsYXNzCi08RFQ+PEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJVVJMIj48Qj5JVVJMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JVVJMPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVVSTCI+PEI+SVVSTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlLkxpdGVyYWxzPC9BPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JVVJMPC9lbT48L0NPREU+JyBjbGFzcwotPERUPjxBIEhSRUY9Ii4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVVSTF9GRUFUVVJFX0NPVU5UIj48Qj5JVVJMX0ZFQVRVUkVfQ09VTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVVSTDwvZW0+JyBjbGFzcwotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9vdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iaW5kZXgtOC5odG1sIj48Qj5QUkVWIExFVFRFUjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJpbmRleC0xMC5odG1sIj48Qj5ORVhUIExFVFRFUjwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi9pbmRleC5odG1sP2luZGV4LWZpbGVzaW5kZXgtOS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LTkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08QSBIUkVGPSJpbmRleC0xLmh0bWwiPkE8L0E+IDxBIEhSRUY9ImluZGV4LTIuaHRtbCI+QjwvQT4gPEEgSFJFRj0iaW5kZXgtMy5odG1sIj5DPC9BPiA8QSBIUkVGPSJpbmRleC00Lmh0bWwiPkQ8L0E+IDxBIEhSRUY9ImluZGV4LTUuaHRtbCI+RTwvQT4gPEEgSFJFRj0iaW5kZXgtNi5odG1sIj5GPC9BPiA8QSBIUkVGPSJpbmRleC03Lmh0bWwiPkc8L0E+IDxBIEhSRUY9ImluZGV4LTguaHRtbCI+SDwvQT4gPEEgSFJFRj0iaW5kZXgtOS5odG1sIj5JPC9BPiA8QSBIUkVGPSJpbmRleC0xMC5odG1sIj5MPC9BPiA8QSBIUkVGPSJpbmRleC0xMS5odG1sIj5NPC9BPiA8QSBIUkVGPSJpbmRleC0xMi5odG1sIj5OPC9BPiA8QSBIUkVGPSJpbmRleC0xMy5odG1sIj5PPC9BPiA8QSBIUkVGPSJpbmRleC0xNC5odG1sIj5QPC9BPiA8QSBIUkVGPSJpbmRleC0xNS5odG1sIj5RPC9BPiA8QSBIUkVGPSJpbmRleC0xNi5odG1sIj5SPC9BPiA8QSBIUkVGPSJpbmRleC0xNy5odG1sIj5TPC9BPiA8QSBIUkVGPSJpbmRleC0xOC5odG1sIj5UPC9BPiA8QSBIUkVGPSJpbmRleC0xOS5odG1sIj5VPC9BPiA8QSBIUkVGPSJpbmRleC0yMC5odG1sIj5WPC9BPiA8QSBIUkVGPSJpbmRleC0yMS5odG1sIj5XPC9BPiA8QSBIUkVGPSJpbmRleC0yMi5odG1sIj5YPC9BPiA8SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTBiNTc5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBGcmFtZXNldC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9mcmFtZXNldC5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDgtLT4KLTxUSVRMRT4KLUdlbmVyYXRlZCBEb2N1bWVudGF0aW9uIChVbnRpdGxlZCkKLTwvVElUTEU+Ci08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgdGFyZ2V0UGFnZSA9ICIiICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKLSAgICBpZiAodGFyZ2V0UGFnZSAhPSAiIiAmJiB0YXJnZXRQYWdlICE9ICJ1bmRlZmluZWQiKQotICAgICAgIHRhcmdldFBhZ2UgPSB0YXJnZXRQYWdlLnN1YnN0cmluZygxKTsKLSAgICBpZiAodGFyZ2V0UGFnZS5pbmRleE9mKCI6IikgIT0gLTEpCi0gICAgICAgIHRhcmdldFBhZ2UgPSAidW5kZWZpbmVkIjsKLSAgICBmdW5jdGlvbiBsb2FkRnJhbWVzKCkgewotICAgICAgICBpZiAodGFyZ2V0UGFnZSAhPSAiIiAmJiB0YXJnZXRQYWdlICE9ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgIHRvcC5jbGFzc0ZyYW1lLmxvY2F0aW9uID0gdG9wLnRhcmdldFBhZ2U7Ci0gICAgfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotPC9IRUFEPgotPEZSQU1FU0VUIGNvbHM9IjIwJSw4MCUiIHRpdGxlPSIiIG9uTG9hZD0idG9wLmxvYWRGcmFtZXMoKSI+Ci08RlJBTUVTRVQgcm93cz0iMzAlLDcwJSIgdGl0bGU9IiIgb25Mb2FkPSJ0b3AubG9hZEZyYW1lcygpIj4KLTxGUkFNRSBzcmM9Im92ZXJ2aWV3LWZyYW1lLmh0bWwiIG5hbWU9InBhY2thZ2VMaXN0RnJhbWUiIHRpdGxlPSJBbGwgUGFja2FnZXMiPgotPEZSQU1FIHNyYz0iYWxsY2xhc3Nlcy1mcmFtZS5odG1sIiBuYW1lPSJwYWNrYWdlRnJhbWUiIHRpdGxlPSJBbGwgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcyAoZXhjZXB0IG5vbi1zdGF0aWMgbmVzdGVkIHR5cGVzKSI+Ci08L0ZSQU1FU0VUPgotPEZSQU1FIHNyYz0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiBuYW1lPSJjbGFzc0ZyYW1lIiB0aXRsZT0iUGFja2FnZSwgY2xhc3MgYW5kIGludGVyZmFjZSBkZXNjcmlwdGlvbnMiIHNjcm9sbGluZz0ieWVzIj4KLTxOT0ZSQU1FUz4KLTxIMj4KLUZyYW1lIEFsZXJ0PC9IMj4KLQotPFA+Ci1UaGlzIGRvY3VtZW50IGlzIGRlc2lnbmVkIHRvIGJlIHZpZXdlZCB1c2luZyB0aGUgZnJhbWVzIGZlYXR1cmUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCB5b3UgYXJlIHVzaW5nIGEgbm9uLWZyYW1lLWNhcGFibGUgd2ViIGNsaWVudC4KLTxCUj4KLUxpbmsgdG88QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPk5vbi1mcmFtZSB2ZXJzaW9uLjwvQT4KLTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRhOGUxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTAgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1CaW5kaW5nCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkJpbmRpbmciOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9CaW5kaW5nLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBCaW5kaW5nPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuQmluZGluZywgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkJpbmRpbmc8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkJpbmRpbmc8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMAotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCi0gPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBiaW5kaW5nIGVsZW1lbnQuIEEgYmluZGluZyBkZWZpbmVzIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbCBkZXRhaWxzIGZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0VHlwZS4gVGhlcmUgbWF5IGJlIGFueSBudW1iZXIgb2YgYmluZGluZ3MgZm9yIGEgZ2l2ZW4gcG9ydFR5cGUuCi0gPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RVBvcnRUeXBlKCkiPjxDT0RFPjxlbT5FUG9ydCBUeXBlPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVCaW5kaW5nT3BlcmF0aW9ucygpIj48Q09ERT48ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+PC9DT0RFPjwvQT48L2xpPgotIDwvdWw+Ci0gPC9wPjwvREQ+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmcoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZygpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVCaW5kaW5nT3BlcmF0aW9ucygpIj5nZXRFQmluZGluZ09wZXJhdGlvbnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZyBPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UG9ydFR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRFUG9ydFR5cGUoKSI+Z2V0RVBvcnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldFFOYW1lKCkiPmdldFFOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNpc1VuZGVmaW5lZCgpIj5pc1VuZGVmaW5lZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI3NldEVQb3J0VHlwZShvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSkiPnNldEVQb3J0VHlwZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RVBvcnRUeXBlKCkiPjxDT0RFPjxlbT5FUG9ydCBUeXBlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI3NldFFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRRTmFtZTwvQT48L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNzZXRVbmRlZmluZWQoYm9vbGVhbikiPnNldFVuZGVmaW5lZDwvQT48L0I+KGJvb2xlYW4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5CaW5kaW5nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5CaW5kaW5nPC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+YWRkQmluZGluZ09wZXJhdGlvbiwgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGdldEJpbmRpbmdPcGVyYXRpb24sIGdldEJpbmRpbmdPcGVyYXRpb25zLCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCwgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzLCBnZXRQb3J0VHlwZSwgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIHNldFBvcnRUeXBlPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0UU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UU5hbWU8L0gzPgotPFBSRT4KLWphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgPEI+Z2V0UU5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0UU5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkJpbmRpbmc8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI3NldFFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Q09ERT5zZXRRTmFtZShRTmFtZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdfUU5hbWUoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZ19RTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRRTmFtZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRRTmFtZTwvQj4oamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldFFOYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5CaW5kaW5nPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldFFOYW1lKCkiPjxDT0RFPmdldFFOYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNVbmRlZmluZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNVbmRlZmluZWQ8L0gzPgotPFBSRT4KLWJvb2xlYW4gPEI+aXNVbmRlZmluZWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5pc1VuZGVmaW5lZDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuQmluZGluZzwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+PENPREU+c2V0VW5kZWZpbmVkKGJvb2xlYW4pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nX1VuZGVmaW5lZCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nX1VuZGVmaW5lZCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFVuZGVmaW5lZChib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VW5kZWZpbmVkPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFVuZGVmaW5lZDwvQj4oYm9vbGVhbiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRVbmRlZmluZWQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkJpbmRpbmc8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPmlzVW5kZWZpbmVkKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RVBvcnRUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVQb3J0VHlwZTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UG9ydFR5cGU8L0E+IDxCPmdldEVQb3J0VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNzZXRFUG9ydFR5cGUob3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUpIj48Q09ERT5zZXRFUG9ydFR5cGUoUG9ydFR5cGUpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nX0VQb3J0VHlwZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nX0VQb3J0VHlwZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVQb3J0VHlwZShvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVQb3J0VHlwZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFUG9ydFR5cGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVQb3J0VHlwZSgpIj48Q09ERT48ZW0+RVBvcnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRFUG9ydFR5cGUoKSI+PENPREU+Z2V0RVBvcnRUeXBlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVCaW5kaW5nT3BlcmF0aW9uczwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0RUJpbmRpbmdPcGVyYXRpb25zPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5CaW5kaW5nT3BlcmF0aW9uPC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvQmluZGluZy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc0YWZmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDA0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MCBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUJpbmRpbmdGYXVsdAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkJpbmRpbmdGYXVsdCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0JpbmRpbmdGYXVsdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ0ZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBCaW5kaW5nRmF1bHQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5CaW5kaW5nRmF1bHQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5CaW5kaW5nRmF1bHQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgRmF1bHQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGZhdWx0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEEgZmF1bHQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBmYXVsdCB3aXRoIHRoZSBzYW1lIG5hbWUuIAotIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLQotIDxwPgotIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSA8dWw+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj48Q09ERT48ZW0+RUZhdWx0PC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gPC91bD4KLSA8L3A+PC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0ZhdWx0KCkiPjxDT0RFPldTRExQYWNrYWdlLmdldEJpbmRpbmdGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj5nZXRFRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZheC53c2RsLkZhdWx0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEZhdWx0KCkiPmdldEZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFRmF1bHQoKSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjc2V0RUZhdWx0KG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0KSI+c2V0RUZhdWx0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj48Q09ERT48ZW0+RUZhdWx0PC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjc2V0RmF1bHQoamF2YXgud3NkbC5GYXVsdCkiPnNldEZhdWx0PC9BPjwvQj4oamF2YXgud3NkbC5GYXVsdCZuYnNwO2ZhdWx0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFRmF1bHQoRmF1bHQpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj5zZXROYW1lPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuQmluZGluZ0ZhdWx0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCwgZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldEV4dGVuc2liaWxpdHlFbGVtZW50cywgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5hbWU8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuQmluZGluZ0ZhdWx0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nRmF1bHRfTmFtZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nRmF1bHRfTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldE5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkJpbmRpbmdGYXVsdDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5nZXROYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RUZhdWx0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVGYXVsdDwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+IDxCPmdldEVGYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVGYXVsdDwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUZhdWx0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI3NldEVGYXVsdChvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCkiPjxDT0RFPnNldEVGYXVsdChGYXVsdCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdGYXVsdF9FRmF1bHQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZ0ZhdWx0X0VGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVGYXVsdChvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVGYXVsdDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFRmF1bHQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0RUZhdWx0KCkiPjxDT0RFPjxlbT5FRmF1bHQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj48Q09ERT5nZXRFRmF1bHQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGYXVsdDwvSDM+Ci08UFJFPgotamF2YXgud3NkbC5GYXVsdCA8Qj5nZXRGYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFRmF1bHQoKSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0RUZhdWx0KCkiPjxDT0RFPmdldEVGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEZhdWx0KGphdmF4LndzZGwuRmF1bHQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRGYXVsdDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRGYXVsdDwvQj4oamF2YXgud3NkbC5GYXVsdCZuYnNwO2ZhdWx0KTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFRmF1bHQoRmF1bHQpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZmF1bHQ8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI3NldEVGYXVsdChvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCkiPjxDT0RFPnNldEVGYXVsdChGYXVsdCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9CaW5kaW5nRmF1bHQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkJpbmRpbmdGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGM5NmNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDA0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUJpbmRpbmdJbnB1dAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkJpbmRpbmdJbnB1dCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0JpbmRpbmdJbnB1dC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBCaW5kaW5nSW5wdXQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5CaW5kaW5nSW5wdXQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5CaW5kaW5nSW5wdXQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIGlucHV0IGVsZW1lbnQgd2l0aGluIGFuIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgaW5wdXQgb2YgdGhlIG9wZXJhdGlvbi4gCi0gPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPjxlbT5FSW5wdXQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD48L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nSW5wdXQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZ0lucHV0KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPmdldEVJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmF4LndzZGwuSW5wdXQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0SW5wdXQoKSI+Z2V0SW5wdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVJbnB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNzZXRFSW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpIj5zZXRFSW5wdXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPjxlbT5FSW5wdXQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNzZXRJbnB1dChqYXZheC53c2RsLklucHV0KSI+c2V0SW5wdXQ8L0E+PC9CPihqYXZheC53c2RsLklucHV0Jm5ic3A7aW5wdXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVJbnB1dChJbnB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPnNldE5hbWU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5CaW5kaW5nSW5wdXQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50LCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCwgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzLCBzZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXROYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXROYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5CaW5kaW5nSW5wdXQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXROYW1lKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdJbnB1dF9OYW1lKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldEJpbmRpbmdJbnB1dF9OYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TmFtZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXROYW1lPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuQmluZGluZ0lucHV0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPmdldE5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RUlucHV0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT4gPEI+Z2V0RUlucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjc2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+PENPREU+c2V0RUlucHV0KElucHV0KTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0lucHV0X0VJbnB1dCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nSW5wdXRfRUlucHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RUlucHV0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVJbnB1dDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+PGVtPkVJbnB1dDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPmdldEVJbnB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElucHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElucHV0PC9IMz4KLTxQUkU+Ci1qYXZheC53c2RsLklucHV0IDxCPmdldElucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVJbnB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+Z2V0RUlucHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0SW5wdXQoamF2YXgud3NkbC5JbnB1dCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldElucHV0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldElucHV0PC9CPihqYXZheC53c2RsLklucHV0Jm5ic3A7aW5wdXQpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVJbnB1dChJbnB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5pbnB1dDwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjc2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+PENPREU+c2V0RUlucHV0KElucHV0KTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0JpbmRpbmdJbnB1dC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VmNTY4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MDQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotQmluZGluZ09wZXJhdGlvbgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24gaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJCaW5kaW5nT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvQmluZGluZ09wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkJpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIEJpbmRpbmdPcGVyYXRpb248L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uLCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmEuaW8uU2VyaWFsaXphYmxlLCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+QmluZGluZ09wZXJhdGlvbjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgT3BlcmF0aW9uPC9iPjwvZW0+Jy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMAotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCi0gPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSB3aXRoaW4gdGhlIGJpbmRpbmcncyBwb3J0VHlwZS4gCi0gPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPjxDT0RFPjxlbT5FT3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIElucHV0PC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nT3V0cHV0KCkiPjxDT0RFPjxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdGYXVsdHMoKSI+PENPREU+PGVtPkVCaW5kaW5nIEZhdWx0czwvZW0+PC9DT0RFPjwvQT48L2xpPgotIDwvdWw+Ci0gPC9wPjwvREQ+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb24oKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZ09wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nRmF1bHRzKCkiPmdldEVCaW5kaW5nRmF1bHRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+Z2V0RUJpbmRpbmdJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdPdXRwdXQoKSI+Z2V0RUJpbmRpbmdPdXRwdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RU9wZXJhdGlvbigpIj5nZXRFT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNzZXRFQmluZGluZ0lucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCkiPnNldEVCaW5kaW5nSW5wdXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdJbnB1dCgpIj48Q09ERT48ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjc2V0RUJpbmRpbmdPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCkiPnNldEVCaW5kaW5nT3V0cHV0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdPdXRwdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNzZXRFT3BlcmF0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbikiPnNldEVPcGVyYXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RU9wZXJhdGlvbigpIj48Q09ERT48ZW0+RU9wZXJhdGlvbjwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj5zZXROYW1lPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2FkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkiPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb248L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRCaW5kaW5nRmF1bHQsIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50LCBnZXRCaW5kaW5nRmF1bHQsIGdldEJpbmRpbmdGYXVsdHMsIGdldEJpbmRpbmdJbnB1dCwgZ2V0QmluZGluZ091dHB1dCwgZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldEV4dGVuc2liaWxpdHlFbGVtZW50cywgZ2V0T3BlcmF0aW9uLCBzZXRCaW5kaW5nSW5wdXQsIHNldEJpbmRpbmdPdXRwdXQsIHNldERvY3VtZW50YXRpb25FbGVtZW50LCBzZXRPcGVyYXRpb248L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5hbWU8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXROYW1lKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXROYW1lPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldE5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+Z2V0TmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVPcGVyYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RU9wZXJhdGlvbjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4gPEI+Z2V0RU9wZXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNzZXRFT3BlcmF0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbikiPjxDT0RFPnNldEVPcGVyYXRpb24oT3BlcmF0aW9uKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVPcGVyYXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RU9wZXJhdGlvbjwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFT3BlcmF0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVPcGVyYXRpb24oKSI+PENPREU+PGVtPkVPcGVyYXRpb248L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FT3BlcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RU9wZXJhdGlvbigpIj48Q09ERT5nZXRFT3BlcmF0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RUJpbmRpbmdJbnB1dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFQmluZGluZ0lucHV0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPiA8Qj5nZXRFQmluZGluZ0lucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI3NldEVCaW5kaW5nSW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0KSI+PENPREU+c2V0RUJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RUJpbmRpbmdJbnB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFQmluZGluZ0lucHV0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVCaW5kaW5nSW5wdXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdJbnB1dCgpIj48Q09ERT48ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+PENPREU+Z2V0RUJpbmRpbmdJbnB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVCaW5kaW5nT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVCaW5kaW5nT3V0cHV0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPdXRwdXQ8L0E+IDxCPmdldEVCaW5kaW5nT3V0cHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI3NldEVCaW5kaW5nT3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQpIj48Q09ERT5zZXRFQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0KTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RUJpbmRpbmdPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVCaW5kaW5nT3V0cHV0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVCaW5kaW5nT3V0cHV0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPdXRwdXQ8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdPdXRwdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nT3V0cHV0KCkiPjxDT0RFPmdldEVCaW5kaW5nT3V0cHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RUJpbmRpbmdGYXVsdHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RUJpbmRpbmdGYXVsdHM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVCaW5kaW5nRmF1bHRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+QmluZGluZ0ZhdWx0PC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0ZhdWx0cygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ09wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NTYwMTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUJpbmRpbmdPdXRwdXQKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iQmluZGluZ091dHB1dCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0JpbmRpbmdPdXRwdXQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ091dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgQmluZGluZ091dHB1dDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLkJpbmRpbmdPdXRwdXQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5CaW5kaW5nT3V0cHV0PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ091dHB1dCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRCaW5kaW5nT3V0cHV0KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0RU91dHB1dCgpIj5nZXRFT3V0cHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZheC53c2RsLk91dHB1dDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0T3V0cHV0KCkiPmdldE91dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RU91dHB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjc2V0RU91dHB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQpIj5zZXRFT3V0cHV0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+PGVtPkVPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjc2V0T3V0cHV0KGphdmF4LndzZGwuT3V0cHV0KSI+c2V0T3V0cHV0PC9BPjwvQj4oamF2YXgud3NkbC5PdXRwdXQmbmJzcDtvdXRwdXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVPdXRwdXQoT3V0cHV0KSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuQmluZGluZ091dHB1dCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuQmluZGluZ091dHB1dDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50LCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCwgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzLCBzZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXROYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXROYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5CaW5kaW5nT3V0cHV0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldE5hbWUoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ091dHB1dF9OYW1lKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldEJpbmRpbmdPdXRwdXRfTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXROYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5CaW5kaW5nT3V0cHV0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5nZXROYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RU91dHB1dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFT3V0cHV0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPiA8Qj5nZXRFT3V0cHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI3NldEVPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KSI+PENPREU+c2V0RU91dHB1dChPdXRwdXQpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RU91dHB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFT3V0cHV0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVPdXRwdXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0RU91dHB1dCgpIj48Q09ERT48ZW0+RU91dHB1dDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNnZXRFT3V0cHV0KCkiPjxDT0RFPmdldEVPdXRwdXQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPdXRwdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T3V0cHV0PC9IMz4KLTxQUkU+Ci1qYXZheC53c2RsLk91dHB1dCA8Qj5nZXRPdXRwdXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RU91dHB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+Z2V0RU91dHB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE91dHB1dChqYXZheC53c2RsLk91dHB1dCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE91dHB1dDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRPdXRwdXQ8L0I+KGphdmF4LndzZGwuT3V0cHV0Jm5ic3A7b3V0cHV0KTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFT3V0cHV0KE91dHB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vdXRwdXQ8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjc2V0RU91dHB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQpIj48Q09ERT5zZXRFT3V0cHV0KE91dHB1dCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9CaW5kaW5nT3V0cHV0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkJpbmRpbmdPdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGU5MGZmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc1NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTEgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1EZWZpbml0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkRlZmluaXRpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9EZWZpbml0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJEZWZpbml0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBEZWZpbml0aW9uPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuRGVmaW5pdGlvbiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkRlZmluaXRpb248L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkRlZmluaXRpb248L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZWZpbml0aW9uPC9iPjwvZW0+Jy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMDwvREQ+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7b3JnLnczYy5kb20uRG9jdW1lbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldERvY3VtZW50KCkiPmdldERvY3VtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFczQyBET00gRG9jdW1lbnQgYnVpbHQgZnJvbSB0aGUgaW5wdXQgV1NETCBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVCaW5kaW5ncygpIj5nZXRFQmluZGluZ3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RUltcG9ydHMoKSI+Z2V0RUltcG9ydHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFTWVzc2FnZXMoKSI+Z2V0RU1lc3NhZ2VzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVOYW1lc3BhY2VzKCkiPmdldEVOYW1lc3BhY2VzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU5hbWVzcGFjZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFbmNvZGluZygpIj5nZXRFbmNvZGluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVQb3J0VHlwZXMoKSI+Z2V0RVBvcnRUeXBlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVTZXJ2aWNlcygpIj5nZXRFU2VydmljZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5UeXBlczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVUeXBlcygpIj5nZXRFVHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRMb2NhdGlvbigpIj5nZXRMb2NhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0UU5hbWUoKSI+Z2V0UU5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldFRhcmdldE5hbWVzcGFjZSgpIj5nZXRUYXJnZXROYW1lc3BhY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXJnZXQgTmFtZXNwYWNlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjc2V0RG9jdW1lbnQob3JnLnczYy5kb20uRG9jdW1lbnQpIj5zZXREb2N1bWVudDwvQT48L0I+KG9yZy53M2MuZG9tLkRvY3VtZW50Jm5ic3A7ZG9jdW1lbnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIGEgVzNDIERPTSBEb2N1bWVudCB0byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgdXAgYSBET00gRWxlbWVudCB0cmVlIGZvciB0aGUgV1NETCBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjc2V0RW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPnNldEVuY29kaW5nPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RW5jb2RpbmcoKSI+PENPREU+PGVtPkVuY29kaW5nPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI3NldEVUeXBlcyhvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcykiPnNldEVUeXBlczwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlR5cGVzPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPjxDT0RFPjxlbT5FVHlwZXM8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjc2V0TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykiPnNldExvY2F0aW9uPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0TG9jYXRpb24oKSI+PENPREU+PGVtPkxvY2F0aW9uPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI3NldFFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRRTmFtZTwvQT48L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNzZXRUYXJnZXROYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPnNldFRhcmdldE5hbWVzcGFjZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldFRhcmdldE5hbWVzcGFjZSgpIj48Q09ERT48ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2FkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkiPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLkRlZmluaXRpb24iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLkRlZmluaXRpb248L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRCaW5kaW5nLCBhZGRFeHRlbnNpYmlsaXR5RWxlbWVudCwgYWRkSW1wb3J0LCBhZGRNZXNzYWdlLCBhZGROYW1lc3BhY2UsIGFkZFBvcnRUeXBlLCBhZGRTZXJ2aWNlLCBjcmVhdGVCaW5kaW5nLCBjcmVhdGVCaW5kaW5nRmF1bHQsIGNyZWF0ZUJpbmRpbmdJbnB1dCwgY3JlYXRlQmluZGluZ09wZXJhdGlvbiwgY3JlYXRlQmluZGluZ091dHB1dCwgY3JlYXRlRmF1bHQsIGNyZWF0ZUltcG9ydCwgY3JlYXRlSW5wdXQsIGNyZWF0ZU1lc3NhZ2UsIGNyZWF0ZU9wZXJhdGlvbiwgY3JlYXRlT3V0cHV0LCBjcmVhdGVQYXJ0LCBjcmVhdGVQb3J0LCBjcmVhdGVQb3J0VHlwZSwgY3JlYXRlU2VydmljZSwgY3JlYXRlVHlwZXMsIGdldEJpbmRpbmcsIGdldEJpbmRpbmdzLCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCwgZ2V0RG9jdW1lbnRCYXNlVVJJLCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMsIGdldEV4dGVuc2lvblJlZ2lzdHJ5LCBnZXRJbXBvcnRzLCBnZXRJbXBvcnRzLCBnZXRNZXNzYWdlLCBnZXRNZXNzYWdlcywgZ2V0TmFtZXNwYWNlLCBnZXROYW1lc3BhY2VzLCBnZXRQb3J0VHlwZSwgZ2V0UG9ydFR5cGVzLCBnZXRQcmVmaXgsIGdldFNlcnZpY2UsIGdldFNlcnZpY2VzLCBnZXRUeXBlcywgcmVtb3ZlQmluZGluZywgcmVtb3ZlTWVzc2FnZSwgcmVtb3ZlUG9ydFR5cGUsIHJlbW92ZVNlcnZpY2UsIHNldERvY3VtZW50YXRpb25FbGVtZW50LCBzZXREb2N1bWVudEJhc2VVUkksIHNldEV4dGVuc2lvblJlZ2lzdHJ5LCBzZXRUeXBlczwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFRhcmdldE5hbWVzcGFjZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUYXJnZXROYW1lc3BhY2U8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0VGFyZ2V0TmFtZXNwYWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRUYXJnZXROYW1lc3BhY2U8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkRlZmluaXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjc2V0VGFyZ2V0TmFtZXNwYWNlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRUYXJnZXROYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFRhcmdldE5hbWVzcGFjZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRUYXJnZXROYW1lc3BhY2U8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRUYXJnZXROYW1lc3BhY2UoKSI+PENPREU+PGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRUYXJnZXROYW1lc3BhY2U8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkRlZmluaXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRUYXJnZXROYW1lc3BhY2UoKSI+PENPREU+Z2V0VGFyZ2V0TmFtZXNwYWNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9jYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TG9jYXRpb248L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TG9jYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjc2V0TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldExvY2F0aW9uKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fTG9jYXRpb24oKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMb2NhdGlvbjwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRMb2NhdGlvbjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldExvY2F0aW9uKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbjwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0TG9jYXRpb24oKSI+PENPREU+Z2V0TG9jYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRRTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRRTmFtZTwvSDM+Ci08UFJFPgotamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSA8Qj5nZXRRTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRRTmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuRGVmaW5pdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjc2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPnNldFFOYW1lKFFOYW1lKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9RTmFtZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXREZWZpbml0aW9uX1FOYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFFOYW1lPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFFOYW1lPC9CPihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0UU5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkRlZmluaXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+Z2V0UU5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbmNvZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbmNvZGluZzwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRFbmNvZGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FbmNvZGluZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RW5jb2Rpbmc8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNzZXRFbmNvZGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0RW5jb2RpbmcoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXREZWZpbml0aW9uX0VuY29kaW5nKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVuY29kaW5nPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVuY29kaW5nPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RW5jb2RpbmcoKSI+PENPREU+PGVtPkVuY29kaW5nPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RW5jb2Rpbmc8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFbmNvZGluZygpIj48Q09ERT5nZXRFbmNvZGluZygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVNZXNzYWdlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFTWVzc2FnZXM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVNZXNzYWdlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5NZXNzYWdlPC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTWVzc2FnZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFUG9ydFR5cGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVQb3J0VHlwZXM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVQb3J0VHlwZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+UG9ydFR5cGU8L0NPREU+PC9BPi4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldERlZmluaXRpb25fRVBvcnRUeXBlcygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVCaW5kaW5ncygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFQmluZGluZ3M8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVCaW5kaW5nczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5CaW5kaW5nPC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZ3M8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmdzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFU2VydmljZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RVNlcnZpY2VzPC9IMz4KLTxQUkU+Ci1FTGlzdCA8Qj5nZXRFU2VydmljZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+U2VydmljZTwvQ09ERT48L0E+LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVNlcnZpY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVTZXJ2aWNlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fRVNlcnZpY2VzKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldERlZmluaXRpb25fRVNlcnZpY2VzKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RU5hbWVzcGFjZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RU5hbWVzcGFjZXM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVOYW1lc3BhY2VzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU5hbWVzcGFjZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5OYW1lc3BhY2U8L0NPREU+PC9BPi4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVOYW1lc3BhY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVOYW1lc3BhY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RVR5cGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVUeXBlczwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+IDxCPmdldEVUeXBlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FVHlwZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNzZXRFVHlwZXMob3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMpIj48Q09ERT5zZXRFVHlwZXMoVHlwZXMpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VUeXBlcygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXREZWZpbml0aW9uX0VUeXBlcygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVUeXBlcyhvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVUeXBlczwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFVHlwZXM8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlR5cGVzPC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVUeXBlcygpIj48Q09ERT48ZW0+RVR5cGVzPC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPjxDT0RFPmdldEVUeXBlcygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVJbXBvcnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVJbXBvcnRzPC9IMz4KLTxQUkU+Ci1FTGlzdCA8Qj5nZXRFSW1wb3J0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbXBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+SW1wb3J0PC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FSW1wb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FSW1wb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fRUltcG9ydHMoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERvY3VtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERvY3VtZW50PC9IMz4KLTxQUkU+Ci1vcmcudzNjLmRvbS5Eb2N1bWVudCA8Qj5nZXREb2N1bWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gUmV0dXJucyBhIFczQyBET00gRG9jdW1lbnQgYnVpbHQgZnJvbSB0aGUgaW5wdXQgV1NETCBkb2N1bWVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5XM0MgRE9NIERvY3VtZW50LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RG9jdW1lbnQob3JnLnczYy5kb20uRG9jdW1lbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXREb2N1bWVudDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXREb2N1bWVudDwvQj4ob3JnLnczYy5kb20uRG9jdW1lbnQmbmJzcDtkb2N1bWVudCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFNldHMgYSBXM0MgRE9NIERvY3VtZW50IHRvIGJlIHVzZWQgd2hlbiBidWlsZGluZyB1cCBhIERPTSBFbGVtZW50IHRyZWUgZm9yIHRoZSBXU0RMIG1vZGVsLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5kb2N1bWVudDwvQ09ERT4gLSBXM0MgRE9NIERvY3VtZW50LjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9EZWZpbml0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJEZWZpbml0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWFhNGY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkV4dGVuc2liaWxpdHlFbGVtZW50IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQmluZGluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQT3BlcmF0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQVXJsRW5jb2RlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxSZXBsYWNlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUNvbnRlbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVNaW1lWG1sPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBBZGRyZXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQmluZGluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJvZHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyRmF1bHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUE9wZXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj5nZXRFbGVtZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0RWxlbWVudFR5cGU8L0E+PC9CPihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+PENPREU+PGVtPkVsZW1lbnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQj4oYm9vbGVhbiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+PENPREU+PGVtPlJlcXVpcmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImlzUmVxdWlyZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNSZXF1aXJlZDwvSDM+Ci08UFJFPgotYm9vbGVhbiA8Qj5pc1JlcXVpcmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlcXVpcmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZXF1aXJlZDwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRSZXF1aXJlZChib29sZWFuKSI+PENPREU+c2V0UmVxdWlyZWQoYm9vbGVhbik8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0UmVxdWlyZWQoYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFJlcXVpcmVkPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFJlcXVpcmVkPC9CPihib29sZWFuJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+PENPREU+PGVtPlJlcXVpcmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVxdWlyZWQ8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjaXNSZXF1aXJlZCgpIj48Q09ERT5pc1JlcXVpcmVkKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RWxlbWVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RWxlbWVudFR5cGU8L0gzPgotPFBSRT4KLWphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgPEI+Z2V0RWxlbWVudFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRFbGVtZW50VHlwZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+c2V0RWxlbWVudFR5cGUoUU5hbWUpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFbGVtZW50VHlwZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFbGVtZW50VHlwZTwvQj4oamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj48Q09ERT48ZW0+RWxlbWVudCBUeXBlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0RWxlbWVudFR5cGU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj48Q09ERT5nZXRFbGVtZW50VHlwZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3OGY2YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUV4dGVuc2libGVFbGVtZW50Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJFeHRlbnNpYmxlRWxlbWVudCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkV4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBFeHRlbnNpYmxlRWxlbWVudDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0ZhdWx0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ09wZXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkltcG9ydDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+U2VydmljZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlR5cGVzPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5FeHRlbnNpYmxlRWxlbWVudDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmxlIEVsZW1lbnQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCZuYnNwO2V4dEVsZW1lbnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGFuIEV4dGVuc2liaWxpdHlFbGVtZW50IHRvIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0NPREU+PC9BPi4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvSDM+Ci08UFJFPgotamF2YS51dGlsLkxpc3QgPEI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxDT0RFPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQj4oamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Jm5ic3A7ZXh0RWxlbWVudCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEFkZHMgYW4gRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdG8gdGhlICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmV4dEVsZW1lbnQ8L0NPREU+IC0gQW4gRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdG8gYmUgYWRkZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkV4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTQ3ZWY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotRmF1bHQKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkZhdWx0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRmF1bHQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgRmF1bHQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkZhdWx0LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkZhdWx0PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4sIGphdmF4LndzZGwuRmF1bHQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRGYXVsdCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPmdldEVNZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+c2V0RU1lc3NhZ2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuRmF1bHQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLkZhdWx0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldE1lc3NhZ2UsIGdldE5hbWUsIHNldERvY3VtZW50YXRpb25FbGVtZW50LCBzZXRNZXNzYWdlLCBzZXROYW1lPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRmF1bHQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTAxNDFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTA3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUltcG9ydAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkltcG9ydCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0ltcG9ydC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSW1wb3J0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBJbXBvcnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkltcG9ydCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5JbXBvcnQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkltcG9ydDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkltcG9ydDwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0SW1wb3J0KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVEZWZpbml0aW9uKCkiPmdldEVEZWZpbml0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RURlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVTY2hlbWEoKSI+Z2V0RVNjaGVtYTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldExvY2F0aW9uVVJJKCkiPmdldExvY2F0aW9uVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+Z2V0TmFtZXNwYWNlVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO29yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0U2NoZW1hKCkiPmdldFNjaGVtYTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RVNjaGVtYSgpLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldEVEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFRGVmaW5pdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0RURlZmluaXRpb24oKSI+PENPREU+PGVtPkVEZWZpbml0aW9uPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjc2V0RVNjaGVtYShvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hKSI+c2V0RVNjaGVtYTwvQT48L0I+KG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0RVNjaGVtYSgpIj48Q09ERT48ZW0+RVNjaGVtYTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldExvY2F0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXRMb2NhdGlvblVSSTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZXNwYWNlVVJJPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNzZXRTY2hlbWEob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSkiPnNldFNjaGVtYTwvQT48L0I+KG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEmbmJzcDtzY2hlbWEpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVTY2hlbWEoWFNEU2NoZW1hKS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5JbXBvcnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLkltcG9ydDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldERlZmluaXRpb24sIGdldERvY3VtZW50YXRpb25FbGVtZW50LCBzZXREZWZpbml0aW9uLCBzZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWVzcGFjZVVSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TmFtZXNwYWNlVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXROYW1lc3BhY2VVUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkltcG9ydDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZXNwYWNlVVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEltcG9ydF9OYW1lc3BhY2VVUkkoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0SW1wb3J0X05hbWVzcGFjZVVSSSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TmFtZXNwYWNlVVJJPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldE5hbWVzcGFjZVVSSTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0TmFtZXNwYWNlVVJJPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5JbXBvcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT5nZXROYW1lc3BhY2VVUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRMb2NhdGlvblVSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMb2NhdGlvblVSSTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRMb2NhdGlvblVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldExvY2F0aW9uVVJJPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5JbXBvcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldExvY2F0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXRMb2NhdGlvblVSSShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnRfTG9jYXRpb25VUkkoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TG9jYXRpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExvY2F0aW9uVVJJPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldExvY2F0aW9uVVJJPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0TG9jYXRpb25VUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLkltcG9ydDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT5nZXRMb2NhdGlvblVSSSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVEZWZpbml0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVEZWZpbml0aW9uPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+IDxCPmdldEVEZWZpbml0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RURlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjc2V0RURlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPjxDT0RFPnNldEVEZWZpbml0aW9uKERlZmluaXRpb24pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnRfRURlZmluaXRpb24oKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0SW1wb3J0X0VEZWZpbml0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RURlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVEZWZpbml0aW9uPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVEZWZpbml0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRFRGVmaW5pdGlvbigpIj48Q09ERT48ZW0+RURlZmluaXRpb248L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0RURlZmluaXRpb24oKSI+PENPREU+Z2V0RURlZmluaXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFU2NoZW1hKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVTY2hlbWE8L0gzPgotPFBSRT4KLW9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEgPEI+Z2V0RVNjaGVtYTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldEVTY2hlbWEob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSkiPjxDT0RFPnNldEVTY2hlbWEoWFNEU2NoZW1hKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0X0VTY2hlbWEoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0SW1wb3J0X0VTY2hlbWEoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFU2NoZW1hKG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFU2NoZW1hPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVTY2hlbWE8L0I+KG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVTY2hlbWEoKSI+PENPREU+PGVtPkVTY2hlbWE8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRFU2NoZW1hKCkiPjxDT0RFPmdldEVTY2hlbWEoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTY2hlbWEoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2NoZW1hPC9IMz4KLTxQUkU+Ci1vcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hIDxCPmdldFNjaGVtYTwvQj4oKTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFU2NoZW1hKCkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVTY2hlbWEoKSI+PENPREU+Z2V0RVNjaGVtYSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNjaGVtYShvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U2NoZW1hPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFNjaGVtYTwvQj4ob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSZuYnNwO3NjaGVtYSk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgc2V0RVNjaGVtYShYU0RTY2hlbWEpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zY2hlbWE8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNzZXRFU2NoZW1hKG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEpIj48Q09ERT5zZXRFU2NoZW1hKFhTRFNjaGVtYSk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9JbXBvcnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkltcG9ydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFmMmJiOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUlucHV0Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJbnB1dCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0lucHV0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IklucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSW5wdXQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLklucHV0LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPklucHV0PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4sIGphdmF4LndzZGwuSW5wdXQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnB1dDwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbnB1dCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRJbnB1dCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPmdldEVNZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+c2V0RU1lc3NhZ2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuSW5wdXQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLklucHV0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldE1lc3NhZ2UsIGdldE5hbWUsIHNldERvY3VtZW50YXRpb25FbGVtZW50LCBzZXRNZXNzYWdlLCBzZXROYW1lPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSW5wdXQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSW5wdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU5YjQyNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotTWVzc2FnZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJNZXNzYWdlIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTWVzc2FnZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTWVzc2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgTWVzc2FnZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuTWVzc2FnZSwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5NZXNzYWdlPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5NZXNzYWdlPC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE1lc3NhZ2UoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRFUGFydHMoKSI+Z2V0RVBhcnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjZ2V0UU5hbWUoKSI+Z2V0UU5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2lzVW5kZWZpbmVkKCkiPmlzVW5kZWZpbmVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjc2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldFFOYW1lPC9BPjwvQj4oamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+c2V0VW5kZWZpbmVkPC9BPjwvQj4oYm9vbGVhbiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2FkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkiPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLk1lc3NhZ2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLk1lc3NhZ2U8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRQYXJ0LCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCwgZ2V0T3JkZXJlZFBhcnRzLCBnZXRQYXJ0LCBnZXRQYXJ0cywgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRRTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRRTmFtZTwvSDM+Ci08UFJFPgotamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSA8Qj5nZXRRTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRRTmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuTWVzc2FnZTwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjc2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPnNldFFOYW1lKFFOYW1lKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZV9RTmFtZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRNZXNzYWdlX1FOYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFFOYW1lPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFFOYW1lPC9CPihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0UU5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLk1lc3NhZ2U8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+Z2V0UU5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1VuZGVmaW5lZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1VuZGVmaW5lZDwvSDM+Ci08UFJFPgotYm9vbGVhbiA8Qj5pc1VuZGVmaW5lZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmlzVW5kZWZpbmVkPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5NZXNzYWdlPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjc2V0VW5kZWZpbmVkKGJvb2xlYW4pIj48Q09ERT5zZXRVbmRlZmluZWQoYm9vbGVhbik8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE1lc3NhZ2VfVW5kZWZpbmVkKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE1lc3NhZ2VfVW5kZWZpbmVkKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VW5kZWZpbmVkKGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRVbmRlZmluZWQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0VW5kZWZpbmVkPC9CPihib29sZWFuJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldFVuZGVmaW5lZDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuTWVzc2FnZTwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+aXNVbmRlZmluZWQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFUGFydHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RVBhcnRzPC9IMz4KLTxQUkU+Ci1FTGlzdCA8Qj5nZXRFUGFydHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+UGFydDwvQ09ERT48L0E+LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE1lc3NhZ2VfRVBhcnRzKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE1lc3NhZ2VfRVBhcnRzKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NZXNzYWdlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNZXNzYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1NWI4Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotTWVzc2FnZVJlZmVyZW5jZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJNZXNzYWdlUmVmZXJlbmNlIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTWVzc2FnZVJlZmVyZW5jZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIE1lc3NhZ2VSZWZlcmVuY2U8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5GYXVsdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+TWVzc2FnZVJlZmVyZW5jZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlUmVmZXJlbmNlKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE1lc3NhZ2VSZWZlcmVuY2UoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPmdldEVNZXNzYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPnNldEVNZXNzYWdlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPnNldE5hbWU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXROYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldE5hbWUoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE1lc3NhZ2VSZWZlcmVuY2VfTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5nZXROYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RU1lc3NhZ2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RU1lc3NhZ2U8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4gPEI+Z2V0RU1lc3NhZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPjxDT0RFPnNldEVNZXNzYWdlKE1lc3NhZ2UpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RU1lc3NhZ2U8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0RU1lc3NhZ2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4mbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNnZXRFTWVzc2FnZSgpIj48Q09ERT48ZW0+RU1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPmdldEVNZXNzYWdlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODk2YmYwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU5hbWVzcGFjZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Ik5hbWVzcGFjZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL05hbWVzcGFjZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTmFtZXNwYWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBOYW1lc3BhY2U8L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5OYW1lc3BhY2U8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZXNwYWNlPC9iPjwvZW0+Jy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMDwvREQ+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE5hbWVzcGFjZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXROYW1lc3BhY2UoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0UHJlZml4KCkiPmdldFByZWZpeDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0VVJJKCkiPmdldFVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjc2V0UHJlZml4KGphdmEubGFuZy5TdHJpbmcpIj5zZXRQcmVmaXg8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFByZWZpeCgpIj48Q09ERT48ZW0+UHJlZml4PC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjc2V0VVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXRVUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFVSSSgpIj48Q09ERT48ZW0+VVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRVUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VVJJPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldFVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI3NldFVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0VVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE5hbWVzcGFjZV9VUkkoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0TmFtZXNwYWNlX1VSSSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VVJJPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFVSSTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0VVJJKCkiPjxDT0RFPjxlbT5VUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFVSSSgpIj48Q09ERT5nZXRVUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQcmVmaXgoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UHJlZml4PC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldFByZWZpeDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHJlZml4PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QcmVmaXg8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI3NldFByZWZpeChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0UHJlZml4KFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE5hbWVzcGFjZV9QcmVmaXgoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0TmFtZXNwYWNlX1ByZWZpeCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFByZWZpeChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0UHJlZml4PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFByZWZpeDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0UHJlZml4KCkiPjxDT0RFPjxlbT5QcmVmaXg8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QcmVmaXg8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFByZWZpeCgpIj48Q09ERT5nZXRQcmVmaXgoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL05hbWVzcGFjZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTmFtZXNwYWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MDlmMWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotT3BlcmF0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvT3BlcmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgT3BlcmF0aW9uPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5PcGVyYXRpb24sIGphdmEuaW8uU2VyaWFsaXphYmxlLCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+T3BlcmF0aW9uPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5PcGVyYXRpb248L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE9wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RUZhdWx0cygpIj5nZXRFRmF1bHRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFSW5wdXQoKSI+Z2V0RUlucHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RU91dHB1dCgpIj5nZXRFT3V0cHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVQYXJhbWV0ZXJPcmRlcmluZygpIj5nZXRFUGFyYW1ldGVyT3JkZXJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFyYW1ldGVyIE9yZGVyaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YXgud3NkbC5PcGVyYXRpb25UeXBlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPmdldFN0eWxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2lzVW5kZWZpbmVkKCkiPmlzVW5kZWZpbmVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNzZXRFSW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpIj5zZXRFSW5wdXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPjxlbT5FSW5wdXQ8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNzZXRFT3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCkiPnNldEVPdXRwdXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFT3V0cHV0KCkiPjxDT0RFPjxlbT5FT3V0cHV0PC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI3NldFN0eWxlKGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZSkiPnNldFN0eWxlPC9BPjwvQj4oamF2YXgud3NkbC5PcGVyYXRpb25UeXBlJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+c2V0VW5kZWZpbmVkPC9BPjwvQj4oYm9vbGVhbiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuT3BlcmF0aW9uIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5PcGVyYXRpb248L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRGYXVsdCwgZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldEZhdWx0LCBnZXRGYXVsdHMsIGdldElucHV0LCBnZXRPdXRwdXQsIGdldFBhcmFtZXRlck9yZGVyaW5nLCBzZXREb2N1bWVudGF0aW9uRWxlbWVudCwgc2V0SW5wdXQsIHNldE91dHB1dCwgc2V0UGFyYW1ldGVyT3JkZXJpbmc8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRTdHlsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdHlsZTwvSDM+Ci08UFJFPgotamF2YXgud3NkbC5PcGVyYXRpb25UeXBlIDxCPmdldFN0eWxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFN0eWxlPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5PcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0U3R5bGUoamF2YXgud3NkbC5PcGVyYXRpb25UeXBlKSI+PENPREU+c2V0U3R5bGUoT3BlcmF0aW9uVHlwZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9TdHlsZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fU3R5bGUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTdHlsZShqYXZheC53c2RsLk9wZXJhdGlvblR5cGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTdHlsZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRTdHlsZTwvQj4oamF2YXgud3NkbC5PcGVyYXRpb25UeXBlJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj48Q09ERT48ZW0+U3R5bGU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRTdHlsZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuT3BlcmF0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+Z2V0U3R5bGUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5hbWU8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuT3BlcmF0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fTmFtZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldE5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLk9wZXJhdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5nZXROYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNVbmRlZmluZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNVbmRlZmluZWQ8L0gzPgotPFBSRT4KLWJvb2xlYW4gPEI+aXNVbmRlZmluZWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5pc1VuZGVmaW5lZDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuT3BlcmF0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNzZXRVbmRlZmluZWQoYm9vbGVhbikiPjxDT0RFPnNldFVuZGVmaW5lZChib29sZWFuKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uX1VuZGVmaW5lZCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fVW5kZWZpbmVkKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VW5kZWZpbmVkKGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRVbmRlZmluZWQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0VW5kZWZpbmVkPC9CPihib29sZWFuJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0VW5kZWZpbmVkPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5PcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+aXNVbmRlZmluZWQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RUlucHV0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT4gPEI+Z2V0RUlucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+PENPREU+c2V0RUlucHV0KElucHV0KTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uX0VJbnB1dCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fRUlucHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RUlucHV0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVJbnB1dDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+PGVtPkVJbnB1dDwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPmdldEVJbnB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVPdXRwdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RU91dHB1dDwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT4gPEI+Z2V0RU91dHB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI3NldEVPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KSI+PENPREU+c2V0RU91dHB1dChPdXRwdXQpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fRU91dHB1dCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fRU91dHB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RU91dHB1dDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFT3V0cHV0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RU91dHB1dCgpIj48Q09ERT48ZW0+RU91dHB1dDwvZW0+PC9DT0RFPjwvQT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+Z2V0RU91dHB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVGYXVsdHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RUZhdWx0czwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0RUZhdWx0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPkZhdWx0PC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fRUZhdWx0cygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fRUZhdWx0cygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVQYXJhbWV0ZXJPcmRlcmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFUGFyYW1ldGVyT3JkZXJpbmc8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVQYXJhbWV0ZXJPcmRlcmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+UGFydDwvQ09ERT48L0E+LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFyYW1ldGVyIE9yZGVyaW5nPC9lbT4nIHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9PcGVyYXRpb24uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNWFhNjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotT3V0cHV0Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iT3V0cHV0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvT3V0cHV0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJPdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBPdXRwdXQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+LCBqYXZheC53c2RsLk91dHB1dCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5PdXRwdXQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPiwgamF2YXgud3NkbC5PdXRwdXQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PdXRwdXQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3V0cHV0KCkiPjxDT0RFPldTRExQYWNrYWdlLmdldE91dHB1dCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPmdldEVNZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+c2V0RU1lc3NhZ2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KSI+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RUV4dGVuc2liaWxpdHlFbGVtZW50czwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuT3V0cHV0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5PdXRwdXQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXREb2N1bWVudGF0aW9uRWxlbWVudCwgZ2V0TWVzc2FnZSwgZ2V0TmFtZSwgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIHNldE1lc3NhZ2UsIHNldE5hbWU8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9PdXRwdXQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik91dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTkwNTJhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU3MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTEgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1QYXJ0Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlBhcnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9QYXJ0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUGFydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgUGFydDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuUGFydCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5QYXJ0PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5QYXJ0PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0KCkiPjxDT0RFPldTRExQYWNrYWdlLmdldFBhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO29yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb248L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVsZW1lbnREZWNsYXJhdGlvbigpIj5nZXRFbGVtZW50RGVjbGFyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudE5hbWUoKSI+Z2V0RWxlbWVudE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFTWVzc2FnZSgpIj5nZXRFTWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO29yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZURlZmluaXRpb24oKSI+Z2V0VHlwZURlZmluaXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlTmFtZSgpIj5nZXRUeXBlTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldEVsZW1lbnREZWNsYXJhdGlvbihvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uKSI+c2V0RWxlbWVudERlY2xhcmF0aW9uPC9BPjwvQj4ob3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkiPjxDT0RFPjxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldEVsZW1lbnROYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50TmFtZTwvQT48L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVsZW1lbnROYW1lKCkiPjxDT0RFPjxlbT5FbGVtZW50IE5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPnNldEVNZXNzYWdlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPnNldE5hbWU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldFR5cGVEZWZpbml0aW9uKG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbikiPnNldFR5cGVEZWZpbml0aW9uPC9BPjwvQj4ob3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlRGVmaW5pdGlvbigpIj48Q09ERT48ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldFR5cGVOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRUeXBlTmFtZTwvQT48L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldFR5cGVOYW1lKCkiPjxDT0RFPjxlbT5UeXBlIE5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5QYXJ0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5QYXJ0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldEV4dGVuc2lvbkF0dHJpYnV0ZSwgZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcywgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIHNldEV4dGVuc2lvbkF0dHJpYnV0ZTwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXROYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXROYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5QYXJ0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldE5hbWUoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydF9OYW1lKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldFBhcnRfTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXROYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5QYXJ0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5nZXROYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RWxlbWVudE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RWxlbWVudE5hbWU8L0gzPgotPFBSRT4KLWphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgPEI+Z2V0RWxlbWVudE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVsZW1lbnQgTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRFbGVtZW50TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuUGFydDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldEVsZW1lbnROYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Q09ERT5zZXRFbGVtZW50TmFtZShRTmFtZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfRWxlbWVudE5hbWUoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UGFydF9FbGVtZW50TmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVsZW1lbnROYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFbGVtZW50TmFtZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFbGVtZW50TmFtZTwvQj4oamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVsZW1lbnROYW1lKCkiPjxDT0RFPjxlbT5FbGVtZW50IE5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRFbGVtZW50TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuUGFydDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudE5hbWUoKSI+PENPREU+Z2V0RWxlbWVudE5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUeXBlTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUeXBlTmFtZTwvSDM+Ci08UFJFPgotamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSA8Qj5nZXRUeXBlTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFR5cGVOYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5QYXJ0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjc2V0VHlwZU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPnNldFR5cGVOYW1lKFFOYW1lKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydF9UeXBlTmFtZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRQYXJ0X1R5cGVOYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VHlwZU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFR5cGVOYW1lPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFR5cGVOYW1lPC9CPihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZU5hbWUoKSI+PENPREU+PGVtPlR5cGUgTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldFR5cGVOYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5QYXJ0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlIE5hbWU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlTmFtZSgpIj48Q09ERT5nZXRUeXBlTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFR5cGVEZWZpbml0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFR5cGVEZWZpbml0aW9uPC9IMz4KLTxQUkU+Ci1vcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb24gPEI+Z2V0VHlwZURlZmluaXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjc2V0VHlwZURlZmluaXRpb24ob3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uKSI+PENPREU+c2V0VHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0X1R5cGVEZWZpbml0aW9uKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldFBhcnRfVHlwZURlZmluaXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRUeXBlRGVmaW5pdGlvbihvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRUeXBlRGVmaW5pdGlvbjwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRUeXBlRGVmaW5pdGlvbjwvQj4ob3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZURlZmluaXRpb24oKSI+PENPREU+PGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldFR5cGVEZWZpbml0aW9uKCkiPjxDT0RFPmdldFR5cGVEZWZpbml0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVsZW1lbnREZWNsYXJhdGlvbjwvSDM+Ci08UFJFPgotb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbiA8Qj5nZXRFbGVtZW50RGVjbGFyYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjc2V0RWxlbWVudERlY2xhcmF0aW9uKG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb24pIj48Q09ERT5zZXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFbGVtZW50RGVjbGFyYXRpb24ob3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVsZW1lbnREZWNsYXJhdGlvbjwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFbGVtZW50RGVjbGFyYXRpb248L0I+KG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb24mbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFbGVtZW50RGVjbGFyYXRpb24oKSI+PENPREU+PGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkiPjxDT0RFPmdldEVsZW1lbnREZWNsYXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVNZXNzYWdlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVNZXNzYWdlPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+IDxCPmdldEVNZXNzYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI3NldEVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UpIj48Q09ERT5zZXRFTWVzc2FnZShNZXNzYWdlKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydF9FTWVzc2FnZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRQYXJ0X0VNZXNzYWdlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVNZXNzYWdlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVNZXNzYWdlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFTWVzc2FnZSgpIj48Q09ERT5nZXRFTWVzc2FnZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvUGFydC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2Y5NjNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTEgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Qb3J0Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlBvcnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9Qb3J0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJQb3J0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBQb3J0PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5Qb3J0LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPlBvcnQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLlBvcnQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0PC9iPjwvZW0+Jy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMDwvREQ+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBvcnQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UG9ydCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0RUJpbmRpbmcoKSI+Z2V0RUJpbmRpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZzwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNzZXRFQmluZGluZyhvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nKSI+c2V0RUJpbmRpbmc8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmc8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNnZXRFQmluZGluZygpIj48Q09ERT48ZW0+RUJpbmRpbmc8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5Qb3J0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5Qb3J0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGdldEJpbmRpbmcsIGdldERvY3VtZW50YXRpb25FbGVtZW50LCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMsIHNldEJpbmRpbmcsIHNldERvY3VtZW50YXRpb25FbGVtZW50PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldE5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLlBvcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0X05hbWUoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UG9ydF9OYW1lKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TmFtZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXROYW1lPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldE5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLlBvcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPmdldE5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFQmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFQmluZGluZzwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPiA8Qj5nZXRFQmluZGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZzwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmc8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNzZXRFQmluZGluZyhvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nKSI+PENPREU+c2V0RUJpbmRpbmcoQmluZGluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBvcnRfRUJpbmRpbmcoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UG9ydF9FQmluZGluZygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVCaW5kaW5nKG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFQmluZGluZzwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFQmluZGluZzwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPjxDT0RFPjxlbT5FQmluZGluZzwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0RUJpbmRpbmcoKSI+PENPREU+Z2V0RUJpbmRpbmcoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1BvcnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlBvcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDljNjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTEgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Qb3J0VHlwZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iUG9ydFR5cGUiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9Qb3J0VHlwZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9ydFR5cGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFBvcnRUeXBlPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5Qb3J0VHlwZSwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5Qb3J0VHlwZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuUG9ydFR5cGU8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0IFR5cGU8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydFR5cGUoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UG9ydFR5cGUoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjZ2V0RU9wZXJhdGlvbnMoKSI+Z2V0RU9wZXJhdGlvbnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRRTmFtZSgpIj5nZXRRTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2lzVW5kZWZpbmVkKCkiPmlzVW5kZWZpbmVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI3NldFFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRRTmFtZTwvQT48L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+c2V0VW5kZWZpbmVkPC9BPjwvQj4oYm9vbGVhbiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5Qb3J0VHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuUG9ydFR5cGU8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRPcGVyYXRpb24sIGdldERvY3VtZW50YXRpb25FbGVtZW50LCBnZXRPcGVyYXRpb24sIGdldE9wZXJhdGlvbnMsIHNldERvY3VtZW50YXRpb25FbGVtZW50PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0UU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UU5hbWU8L0gzPgotPFBSRT4KLWphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgPEI+Z2V0UU5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0UU5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLlBvcnRUeXBlPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjc2V0UU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPnNldFFOYW1lKFFOYW1lKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydFR5cGVfUU5hbWUoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UG9ydFR5cGVfUU5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0UU5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0UU5hbWU8L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0UU5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLlBvcnRUeXBlPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT5nZXRRTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzVW5kZWZpbmVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVW5kZWZpbmVkPC9IMz4KLTxQUkU+Ci1ib29sZWFuIDxCPmlzVW5kZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+aXNVbmRlZmluZWQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLlBvcnRUeXBlPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+PENPREU+c2V0VW5kZWZpbmVkKGJvb2xlYW4pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0VHlwZV9VbmRlZmluZWQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VW5kZWZpbmVkKGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRVbmRlZmluZWQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0VW5kZWZpbmVkPC9CPihib29sZWFuJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRVbmRlZmluZWQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLlBvcnRUeXBlPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+aXNVbmRlZmluZWQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFT3BlcmF0aW9ucygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFT3BlcmF0aW9uczwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0RU9wZXJhdGlvbnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPk9wZXJhdGlvbjwvQ09ERT48L0E+LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvUG9ydFR5cGUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlBvcnRUeXBlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyNTNhMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotU2VydmljZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTZXJ2aWNlIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU2VydmljZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNlcnZpY2U8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgamF2YXgud3NkbC5TZXJ2aWNlLCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+U2VydmljZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuU2VydmljZTwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0U2VydmljZSgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRTZXJ2aWNlKCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjZ2V0RVBvcnRzKCkiPmdldEVQb3J0czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2dldFFOYW1lKCkiPmdldFFOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNpc1VuZGVmaW5lZCgpIj5pc1VuZGVmaW5lZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI3NldFFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRRTmFtZTwvQT48L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNzZXRVbmRlZmluZWQoYm9vbGVhbikiPnNldFVuZGVmaW5lZDwvQT48L0I+KGJvb2xlYW4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5TZXJ2aWNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5TZXJ2aWNlPC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+YWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGFkZFBvcnQsIGdldERvY3VtZW50YXRpb25FbGVtZW50LCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMsIGdldFBvcnQsIGdldFBvcnRzLCBzZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFFOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFFOYW1lPC9IMz4KLTxQUkU+Ci1qYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIDxCPmdldFFOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFFOYW1lPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5TZXJ2aWNlPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNzZXRRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+c2V0UU5hbWUoUU5hbWUpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRTZXJ2aWNlX1FOYW1lKCkiPjxDT0RFPldTRExQYWNrYWdlLmdldFNlcnZpY2VfUU5hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0UU5hbWU8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0UU5hbWU8L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRRTmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuU2VydmljZTwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT5nZXRRTmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzVW5kZWZpbmVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVW5kZWZpbmVkPC9IMz4KLTxQUkU+Ci1ib29sZWFuIDxCPmlzVW5kZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI3NldFVuZGVmaW5lZChib29sZWFuKSI+PENPREU+c2V0VW5kZWZpbmVkKGJvb2xlYW4pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRTZXJ2aWNlX1VuZGVmaW5lZCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFVuZGVmaW5lZChib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VW5kZWZpbmVkPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFVuZGVmaW5lZDwvQj4oYm9vbGVhbiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT5pc1VuZGVmaW5lZCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVQb3J0cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFUG9ydHM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVQb3J0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5Qb3J0PC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUG9ydHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBvcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0U2VydmljZV9FUG9ydHMoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0U2VydmljZV9FUG9ydHMoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NlcnZpY2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTZXJ2aWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2U0NDlmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVHlwZXMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcyBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlR5cGVzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvVHlwZXMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iVHlwZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFR5cGVzPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YS5pby5TZXJpYWxpemFibGUsIGphdmF4LndzZGwuVHlwZXMsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5UeXBlczwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuVHlwZXM8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UeXBlczwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRUeXBlcygpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRUeXBlcygpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCNnZXRTY2hlbWFzKCkiPmdldFNjaGVtYXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgTGlzdCBvZiBpbmxpbmUgWFNEU2NoZW1hIGluc3RhbmNlcyBpbiB0aGlzIFR5cGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sI2dldFNjaGVtYXMoamF2YS5sYW5nLlN0cmluZykiPmdldFNjaGVtYXM8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlVVJJKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIExpc3Qgb2YgaW5saW5lIFhTRFNjaGVtYSBpbnN0YW5jZXMgaW4gdGhpcyBUeXBlcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIj5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5UeXBlcyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuVHlwZXM8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCwgZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQsIGdldEV4dGVuc2liaWxpdHlFbGVtZW50cywgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRTY2hlbWFzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNjaGVtYXM8L0gzPgotPFBSRT4KLWphdmEudXRpbC5MaXN0IDxCPmdldFNjaGVtYXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFJldHVybnMgYSBMaXN0IG9mIGlubGluZSBYU0RTY2hlbWEgaW5zdGFuY2VzIGluIHRoaXMgVHlwZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+TGlzdCBvZiBYU0RTY2hlbWEgaW5zdGFuY2VzLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlhTRFNjaGVtYTwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNjaGVtYXMoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNjaGVtYXM8L0gzPgotPFBSRT4KLWphdmEudXRpbC5MaXN0IDxCPmdldFNjaGVtYXM8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lc3BhY2VVUkkpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBSZXR1cm5zIGEgTGlzdCBvZiBpbmxpbmUgWFNEU2NoZW1hIGluc3RhbmNlcyBpbiB0aGlzIFR5cGVzLiBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mCi0gdGhlIHNjaGVtYXMgYXJlIHRoZSBzYW1lIGFzIG5hbWVzcGFjZVVSSSBhcmd1bWVudCB2YWx1ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZXNwYWNlVVJJPC9DT0RFPiAtIHRhcmdldE5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hcyB0byBiZSBzZWFyY2hlZCBmb3IuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPkxpc3Qgb2YgWFNEU2NoZW1hIGluc3RhbmNlcy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5YU0RTY2hlbWE8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1R5cGVzLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlR5cGVzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNDkxOTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjxDT0RFPldTRExQYWNrYWdlLmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0Q2hpbGRyZW4oKSI+Z2V0Q2hpbGRyZW48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+Z2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+aXNSZXF1aXJlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0RWxlbWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRSZXF1aXJlZChib29sZWFuKSI+c2V0UmVxdWlyZWQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRSZXF1aXJlZCwgc2V0UmVxdWlyZWQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDaGlsZHJlbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDaGlsZHJlbjwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0Q2hpbGRyZW48L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQ09ERT48L0E+LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q2hpbGRyZW48L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2hpbGRyZW48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50X0NoaWxkcmVuKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2OGVjYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MSBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVdTRExFbGVtZW50Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJXU0RMRWxlbWVudCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExFbGVtZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgV1NETEVsZW1lbnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQWRkcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEJpbmRpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFVybEVuY29kZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQVXJsUmVwbGFjZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVDb250ZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYXJ0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+U2VydmljZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEFkZHJlc3M8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCaW5kaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYXVsdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJGYXVsdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQT3BlcmF0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPldTRExFbGVtZW50PC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0V1NETEVsZW1lbnQoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0V1NETEVsZW1lbnQoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+PC9CPihvcmcudzNjLmRvbS5FbGVtZW50Jm5ic3A7Y2hhbmdlZEVsZW1lbnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBoYXMgY2hhbmdlZDsKLSB0aGUgZWxlbWVudCBzaG91bGQgdHlwaWNhbGx5IGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUgcmV0dXJuZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPjxDT0RFPmdldEVsZW1lbnQoKTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyByZWZlcmVuY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO29yZy53M2MuZG9tLkVsZW1lbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO29yZy53M2MuZG9tLkVsZW1lbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT48L0I+KG9yZy53M2MuZG9tLkVsZW1lbnQmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj48Q09ERT48ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPjwvQj4ob3JnLnczYy5kb20uRWxlbWVudCZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+PENPREU+PGVtPkVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+Jm5ic3A7ZGVmaW5pdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGVuY2xvc2luZyBkZWZpbml0aW9uIG9mIHRoaXMgV1NETCBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RW5zdXJlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIERPTSA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+PENPREU+ZWxlbWVudDwvQ09ERT48L0E+IGJvdGggZXhpc3RzIGFuZCBpcyB1cC10by1kYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kZWwsCi0gaS5lLiwgaXQgc2VyaWFsaXplcyB0aGUgY29tcG9uZW50IGFuZCBtYWludGFpbnMgYW4gYXNzb2NpYXRpb24gd2l0aCB0aGF0IHNlcmlhbGl6YXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQj4oYm9vbGVhbiZuYnNwO2RlZXApPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFbnN1cmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgRE9NIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5lbGVtZW50PC9DT0RFPjwvQT4gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSBpLmUuLCBpdCBzZXJpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIG1haW50YWlucyBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoYXQgc2VyaWFsaXphdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldERvY3VtZW50YXRpb25FbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERvY3VtZW50YXRpb25FbGVtZW50PC9IMz4KLTxQUkU+Ci1vcmcudzNjLmRvbS5FbGVtZW50IDxCPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+PENPREU+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCkiPjxDT0RFPldTRExQYWNrYWdlLmdldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERvY3VtZW50YXRpb25FbGVtZW50PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9CPihvcmcudzNjLmRvbS5FbGVtZW50Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPjxDT0RFPjxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+PENPREU+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVsZW1lbnQ8L0gzPgotPFBSRT4KLW9yZy53M2MuZG9tLkVsZW1lbnQgPEI+Z2V0RWxlbWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIFRoaXMgaXMgdGhlIHVuZGVybHlpbmcgRE9NIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50LCAKLSBpLmUuLCB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPjxDT0RFPnNlcmlhbGl6YXRpb248L0NPREU+PC9BPiBvZiB0aGlzIGNvbXBvbmVudC4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+PENPREU+c2V0RWxlbWVudChFbGVtZW50KTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRXU0RMRWxlbWVudF9FbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RWxlbWVudDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFbGVtZW50PC9CPihvcmcudzNjLmRvbS5FbGVtZW50Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+PENPREU+PGVtPkVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50PC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+PENPREU+Z2V0RWxlbWVudCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPiA8Qj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBSZXR1cm5zIHRoZSBEZWZpbml0aW9uIHRoYXQgY29udGFpbnMgdGhpcyBXU0RMIGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVuY2xvc2luZ0RlZmluaXRpb248L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPiZuYnNwO2RlZmluaXRpb24pPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBTZXRzIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbiBvZiB0aGlzIFdTREwgZWxlbWVudC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGVmaW5pdGlvbjwvQ09ERT4gLSB0aGUgRGVmaW5pdGlvbiB0aGF0IGNvbnRhaW5zIHRoaXMgV1NETCBlbGVtZW50LgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idXBkYXRlRWxlbWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci11cGRhdGVFbGVtZW50PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnVwZGF0ZUVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5FbnN1cmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgRE9NIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5lbGVtZW50PC9DT0RFPjwvQT4gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSBpLmUuLCBpdCBzZXJpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIG1haW50YWlucyBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoYXQgc2VyaWFsaXphdGlvbi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+PENPREU+dXBkYXRlRWxlbWVudChib29sZWFuKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5nZXRFbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idXBkYXRlRWxlbWVudChib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgotdXBkYXRlRWxlbWVudDwvSDM+Ci08UFJFPgotdm9pZCA8Qj51cGRhdGVFbGVtZW50PC9CPihib29sZWFuJm5ic3A7ZGVlcCk8L1BSRT4KLTxETD4KLTxERD5FbnN1cmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgRE9NIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5lbGVtZW50PC9DT0RFPjwvQT4gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSBpLmUuLCBpdCBzZXJpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIG1haW50YWlucyBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoYXQgc2VyaWFsaXphdGlvbi4KLSBGb3IgPGNvZGU+ZGVlcCA9PSB0cnVlPC9jb2RlPiwgCi0gb3Igd2hlbiA8Y29kZT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+PENPREU+Z2V0RWxlbWVudCgpPC9DT0RFPjwvQT4gPT0gbnVsbDwvY29kZT4sIAotIHRoaXMgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+PENPREU+dXBkYXRlRWxlbWVudCgpPC9DT0RFPjwvQT47Ci0gb3RoZXJ3aXNlLCBpdCB1cGRhdGVzIGp1c3QgdGhlIERPTSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXBvbmVudCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPjxDT0RFPnVwZGF0ZUVsZW1lbnQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5nZXRFbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q29udGFpbmVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENvbnRhaW5lcjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+IDxCPmdldENvbnRhaW5lcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvbnRhaW5lcjwvYj48L2VtPicgcmVmZXJlbmNlLgotIFRoaXMgcmVwcmVzZW50cyB0aGUgY29uY3JldGUgY29udGFpbmVyIG9mIHRoaXMgY29tcG9uZW50LCAKLSBpLmUuLCB0aGUgaW52ZXJzZSBvZiB0aGUgYmxhY2sgZGlhbW9uZCByZWxhdGlvbnMgaW4gdGhlIFVNTCBtb2RlbC4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29udGFpbmVyPC9lbT4nIHJlZmVyZW5jZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1lbGVtZW50Q2hhbmdlZDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5lbGVtZW50Q2hhbmdlZDwvQj4ob3JnLnczYy5kb20uRWxlbWVudCZuYnNwO2NoYW5nZWRFbGVtZW50KTwvUFJFPgotPERMPgotPEREPkNhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBnaXZlbiBlbGVtZW50IGhhcyBjaGFuZ2VkOwotIHRoZSBlbGVtZW50IHNob3VsZCB0eXBpY2FsbHkgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+PENPREU+Z2V0RWxlbWVudCgpPC9DT0RFPjwvQT4uCi0gSXQgaXMgZXhwZWN0ZWQgdGhhdCBjbGllbnRzIHdpbGwgbm90IGNhbGwgdGhpcyB0aGVtc2VsdmVzIAotIHNpbmNlIHRoZSBET00gZXZlbnQgbGlzdGVuZXJzIGF0dGFjaGVkIHRvIHRoZSB1bmRlcmx5aW5nIERPTSB3aWxsIGludm9rZSB0aGVzZSBhdXRvbWF0aWNhbGx5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5jaGFuZ2VkRWxlbWVudDwvQ09ERT4gLSB0aGUgRE9NIGVsZW1lbnQgY2hhbmdlZCBmb3IgdGhpcyBpbnN0YW5jZS48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETEVsZW1lbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTEwZDM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NjMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUxIEVEVCAyMDA4IC0tPgotPFRJVExFPgotV1NETEZhY3RvcnkKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IldTRExGYWN0b3J5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETEZhY3RvcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFdTRExGYWN0b3J5PC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+V1NETEZhY3Rvcnk8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+V1NETFBhY2thZ2U8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2VJTlNUQU5DRSI+ZUlOU1RBTkNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnk8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVCaW5kaW5nKCkiPmNyZWF0ZUJpbmRpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdGYXVsdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVCaW5kaW5nRmF1bHQoKSI+Y3JlYXRlQmluZGluZ0ZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlQmluZGluZ0lucHV0KCkiPmNyZWF0ZUJpbmRpbmdJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBJbnB1dDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPcGVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlQmluZGluZ09wZXJhdGlvbigpIj5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPdXRwdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlQmluZGluZ091dHB1dCgpIj5jcmVhdGVCaW5kaW5nT3V0cHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlRGVmaW5pdGlvbigpIj5jcmVhdGVEZWZpbml0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCkiPmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlRmF1bHQoKSI+Y3JlYXRlRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlSW1wb3J0KCkiPmNyZWF0ZUltcG9ydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW1wb3J0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUlucHV0KCkiPmNyZWF0ZUlucHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnB1dDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlTWVzc2FnZSgpIj5jcmVhdGVNZXNzYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NZXNzYWdlPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5OYW1lc3BhY2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlTmFtZXNwYWNlKCkiPmNyZWF0ZU5hbWVzcGFjZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZXNwYWNlPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PcGVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlT3BlcmF0aW9uKCkiPmNyZWF0ZU9wZXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlT3V0cHV0KCkiPmNyZWF0ZU91dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVQYXJ0KCkiPmNyZWF0ZVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZVBvcnQoKSI+Y3JlYXRlUG9ydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVQb3J0VHlwZSgpIj5jcmVhdGVQb3J0VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydCBUeXBlPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+U2VydmljZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVTZXJ2aWNlKCkiPmNyZWF0ZVNlcnZpY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlcnZpY2U8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlVHlwZXMoKSI+Y3JlYXRlVHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlR5cGVzPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkiPmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+Y3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2dldFdTRExQYWNrYWdlKCkiPmdldFdTRExQYWNrYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZUlOU1RBTkNFIj48IS0tIC0tPjwvQT48SDM+Ci1lSU5TVEFOQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4gPEI+ZUlOU1RBTkNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iY3JlYXRlUG9ydFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlUG9ydFR5cGU8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPiA8Qj5jcmVhdGVQb3J0VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydCBUeXBlPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydCBUeXBlPC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlT3BlcmF0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZU9wZXJhdGlvbjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4gPEI+Y3JlYXRlT3BlcmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVNZXNzYWdlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZU1lc3NhZ2U8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4gPEI+Y3JlYXRlTWVzc2FnZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1lc3NhZ2U8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVQYXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZVBhcnQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4gPEI+Y3JlYXRlUGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVCaW5kaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUJpbmRpbmc8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT4gPEI+Y3JlYXRlQmluZGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUJpbmRpbmdPcGVyYXRpb248L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ09wZXJhdGlvbjwvQT4gPEI+Y3JlYXRlQmluZGluZ09wZXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVNlcnZpY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlU2VydmljZTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5TZXJ2aWNlPC9BPiA8Qj5jcmVhdGVTZXJ2aWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2VydmljZTwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVBvcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlUG9ydDwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0PC9BPiA8Qj5jcmVhdGVQb3J0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4gPEI+Y3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZURlZmluaXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlRGVmaW5pdGlvbjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPiA8Qj5jcmVhdGVEZWZpbml0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVmaW5pdGlvbjwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZUltcG9ydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVJbXBvcnQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+IDxCPmNyZWF0ZUltcG9ydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW1wb3J0PC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW1wb3J0PC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlSW5wdXQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPiA8Qj5jcmVhdGVJbnB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5wdXQ8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnB1dDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZU91dHB1dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVPdXRwdXQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+IDxCPmNyZWF0ZU91dHB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlRmF1bHQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPiA8Qj5jcmVhdGVGYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZUJpbmRpbmdJbnB1dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVCaW5kaW5nSW5wdXQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+IDxCPmNyZWF0ZUJpbmRpbmdJbnB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBJbnB1dDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVCaW5kaW5nT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUJpbmRpbmdPdXRwdXQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4gPEI+Y3JlYXRlQmluZGluZ091dHB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZUJpbmRpbmdGYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVCaW5kaW5nRmF1bHQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+IDxCPmNyZWF0ZUJpbmRpbmdGYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBGYXVsdDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVOYW1lc3BhY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlTmFtZXNwYWNlPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TmFtZXNwYWNlPC9BPiA8Qj5jcmVhdGVOYW1lc3BhY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWVzcGFjZTwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVR5cGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZVR5cGVzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5UeXBlczwvQT4gPEI+Y3JlYXRlVHlwZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlR5cGVzPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHlwZXM8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiA8Qj5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+IDxCPmNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0V1NETFBhY2thZ2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0V1NETFBhY2thZ2U8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPiA8Qj5nZXRXU0RMUGFja2FnZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExGYWN0b3J5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ4NzUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODI1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVdTRExQYWNrYWdlLkxpdGVyYWxzCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTGl0ZXJhbHMgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJXU0RMUGFja2FnZS5MaXRlcmFscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFdTRExQYWNrYWdlLkxpdGVyYWxzPC9IMj4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgaW50ZXJmYWNlOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgc3RhdGljIGludGVyZmFjZSA8Qj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gPHVsPgotICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gPC91bD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElORyI+QklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlMiPkJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfX0VQT1JUX1RZUEUiPkJJTkRJTkdfX0VQT1JUX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX19RTkFNRSI+QklORElOR19fUU5BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19fVU5ERUZJTkVEIj5CSU5ESU5HX19VTkRFRklORUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19GQVVMVCI+QklORElOR19GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfRkFVTFRfX0VGQVVMVCI+QklORElOR19GQVVMVF9fRUZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX0ZBVUxUX19OQU1FIj5CSU5ESU5HX0ZBVUxUX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX0lOUFVUIj5CSU5ESU5HX0lOUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIElucHV0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19JTlBVVF9fRUlOUFVUIj5CSU5ESU5HX0lOUFVUX19FSU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfSU5QVVRfX05BTUUiPkJJTkRJTkdfSU5QVVRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OIj5CSU5ESU5HX09QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTIj5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQiPkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OIj5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19OQU1FIj5CSU5ESU5HX09QRVJBVElPTl9fTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjQklORElOR19PVVRQVVQiPkJJTkRJTkdfT1VUUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1VUUFVUX19FT1VUUFVUIj5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0JJTkRJTkdfT1VUUFVUX19OQU1FIj5CSU5ESU5HX09VVFBVVF9fTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjREVGSU5JVElPTiI+REVGSU5JVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VCSU5ESU5HUyI+REVGSU5JVElPTl9fRUJJTkRJTkdTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VJTVBPUlRTIj5ERUZJTklUSU9OX19FSU1QT1JUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUltcG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VNRVNTQUdFUyI+REVGSU5JVElPTl9fRU1FU1NBR0VTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VOQU1FU1BBQ0VTIj5ERUZJTklUSU9OX19FTkFNRVNQQUNFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU5hbWVzcGFjZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX0VOQ09ESU5HIj5ERUZJTklUSU9OX19FTkNPRElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19FUE9SVF9UWVBFUyI+REVGSU5JVElPTl9fRVBPUlRfVFlQRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19FU0VSVklDRVMiPkRFRklOSVRJT05fX0VTRVJWSUNFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVNlcnZpY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19FVFlQRVMiPkRFRklOSVRJT05fX0VUWVBFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjREVGSU5JVElPTl9fTE9DQVRJT04iPkRFRklOSVRJT05fX0xPQ0FUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0RFRklOSVRJT05fX1FOQU1FIj5ERUZJTklUSU9OX19RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFIj5ERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgTmFtZXNwYWNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFRGF0YVR5cGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNET01fRE9DVU1FTlQiPkRPTV9ET0NVTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFRGF0YVR5cGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNET01fRUxFTUVOVCI+RE9NX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkRPTSBFbGVtZW50PC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEIj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UIj5FWFRFTlNJQkxFX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0VYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0ZBVUxUIj5GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HIj5JQklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HX0ZBVUxUIj5JQklORElOR19GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HX0lOUFVUIj5JQklORElOR19JTlBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HX09QRVJBVElPTiI+SUJJTkRJTkdfT1BFUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lCSU5ESU5HX09VVFBVVCI+SUJJTkRJTkdfT1VUUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lERUZJTklUSU9OIj5JREVGSU5JVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SURlZmluaXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lFWFRFTlNJQklMSVRZX0VMRU1FTlQiPklFWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lFWFRFTlNJT05fUkVHSVNUUlkiPklFWFRFTlNJT05fUkVHSVNUUlk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lGQVVMVCI+SUZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lJTVBPUlQiPklJTVBPUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklJbXBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lJTlBVVCI+SUlOUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lJVEVSQVRPUiI+SUlURVJBVE9SPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JSXRlcmF0b3I8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lMSVNUIj5JTElTVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUxpc3Q8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNQVAiPklNQVA8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNYXA8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNRVNTQUdFIj5JTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU1lc3NhZ2U8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNUE9SVCI+SU1QT1JUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JbXBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJTVBPUlRfX0VERUZJTklUSU9OIj5JTVBPUlRfX0VERUZJTklUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI0lNUE9SVF9fRVNDSEVNQSI+SU1QT1JUX19FU0NIRU1BPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU1QT1JUX19MT0NBVElPTl9VUkkiPklNUE9SVF9fTE9DQVRJT05fVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJTVBPUlRfX05BTUVTUEFDRV9VUkkiPklNUE9SVF9fTkFNRVNQQUNFX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU5QVVQiPklOUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JbnB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU9QRVJBVElPTiI+SU9QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU9VVFBVVCI+SU9VVFBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVBBUlQiPklQQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JUGFydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVBPUlQiPklQT1JUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JUG9ydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVBPUlRfVFlQRSI+SVBPUlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVBvcnQgVHlwZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNFUlZJQ0UiPklTRVJWSUNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU2VydmljZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVRZUEVTIj5JVFlQRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklUeXBlczwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVVSTCI+SVVSTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVVSTDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRSI+TUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+TWVzc2FnZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI01FU1NBR0VfX0VQQVJUUyI+TUVTU0FHRV9fRVBBUlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI01FU1NBR0VfX1FOQU1FIj5NRVNTQUdFX19RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNRVNTQUdFX19VTkRFRklORUQiPk1FU1NBR0VfX1VOREVGSU5FRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRSI+TUVTU0FHRV9SRUZFUkVOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFIj5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUiPk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNOQU1FU1BBQ0UiPk5BTUVTUEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+TmFtZXNwYWNlPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTkFNRVNQQUNFX19QUkVGSVgiPk5BTUVTUEFDRV9fUFJFRklYPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QcmVmaXg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNOQU1FU1BBQ0VfX1VSSSI+TkFNRVNQQUNFX19VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OIj5PUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI09QRVJBVElPTl9fRUZBVUxUUyI+T1BFUkFUSU9OX19FRkFVTFRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNPUEVSQVRJT05fX0VJTlBVVCI+T1BFUkFUSU9OX19FSU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI09QRVJBVElPTl9fRU9VVFBVVCI+T1BFUkFUSU9OX19FT1VUUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HIj5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI09QRVJBVElPTl9fTkFNRSI+T1BFUkFUSU9OX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX19TVFlMRSI+T1BFUkFUSU9OX19TVFlMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNPUEVSQVRJT05fX1VOREVGSU5FRCI+T1BFUkFUSU9OX19VTkRFRklORUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RURhdGFUeXBlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1BFUkFUSU9OX1RZUEUiPk9QRVJBVElPTl9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjT1VUUFVUIj5PVVRQVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPk91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUEFSVCI+UEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04iPlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgRGVjbGFyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQQVJUX19FTEVNRU5UX05BTUUiPlBBUlRfX0VMRU1FTlRfTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUEFSVF9fRU1FU1NBR0UiPlBBUlRfX0VNRVNTQUdFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BBUlRfX05BTUUiPlBBUlRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQQVJUX19UWVBFX0RFRklOSVRJT04iPlBBUlRfX1RZUEVfREVGSU5JVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUEFSVF9fVFlQRV9OQU1FIj5QQVJUX19UWVBFX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUE9SVCI+UE9SVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UG9ydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BPUlRfX0VCSU5ESU5HIj5QT1JUX19FQklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQT1JUX19OQU1FIj5QT1JUX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNQT1JUX1RZUEUiPlBPUlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UG9ydCBUeXBlPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUE9SVF9UWVBFX19FT1BFUkFUSU9OUyI+UE9SVF9UWVBFX19FT1BFUkFUSU9OUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1BPUlRfVFlQRV9fUU5BTUUiPlBPUlRfVFlQRV9fUU5BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjUE9SVF9UWVBFX19VTkRFRklORUQiPlBPUlRfVFlQRV9fVU5ERUZJTkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VEYXRhVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1FOQU1FIj5RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1NFUlZJQ0UiPlNFUlZJQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlNlcnZpY2U8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTRVJWSUNFX19FUE9SVFMiPlNFUlZJQ0VfX0VQT1JUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTRVJWSUNFX19RTkFNRSI+U0VSVklDRV9fUU5BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU0VSVklDRV9fVU5ERUZJTkVEIj5TRVJWSUNFX19VTkRFRklORUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjVFlQRVMiPlRZUEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5UeXBlczwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTiI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNXU0RMX0VMRU1FTlQiPldTRExfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1dTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjV1NETF9FTEVNRU5UX19FTEVNRU5UIj5XU0RMX0VMRU1FTlRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VEYXRhVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sI1dTRExfRVhDRVBUSU9OIj5XU0RMX0VYQ0VQVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RXhjZXB0aW9uPC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwjWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IldTRExfRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotV1NETF9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPldTRExfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+V1NETEVsZW1lbnRJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0V1NETEVsZW1lbnQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETF9FTEVNRU5UX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX0VMRU1FTlRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPldTRExfRUxFTUVOVF9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotUE9SVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlBPUlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UG9ydCBUeXBlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Qb3J0VHlwZUltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRQb3J0VHlwZSgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQT1JUX1RZUEVfX1FOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfX1FOQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5QT1JUX1RZUEVfX1FOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRV9fVU5ERUZJTkVEIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfX1VOREVGSU5FRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+UE9SVF9UWVBFX19VTkRFRklORUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRV9fRU9QRVJBVElPTlMiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfVFlQRV9fRU9QRVJBVElPTlM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPlBPUlRfVFlQRV9fRU9QRVJBVElPTlM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5PUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3BlcmF0aW9uSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE9wZXJhdGlvbigpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX1NUWUxFIj48IS0tIC0tPjwvQT48SDM+Ci1PUEVSQVRJT05fX1NUWUxFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5PUEVSQVRJT05fX1NUWUxFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9QRVJBVElPTl9fTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5PUEVSQVRJT05fX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX1VOREVGSU5FRCI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX19VTkRFRklORUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPk9QRVJBVElPTl9fVU5ERUZJTkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX0VJTlBVVCI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX19FSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPk9QRVJBVElPTl9fRUlOUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX0VPVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fRU9VVFBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+T1BFUkFUSU9OX19FT1VUUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1BFUkFUSU9OX19FRkFVTFRTIj48IS0tIC0tPjwvQT48SDM+Ci1PUEVSQVRJT05fX0VGQVVMVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPk9QRVJBVElPTl9fRUZBVUxUUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HIj48IS0tIC0tPjwvQT48SDM+Ci1PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcmFtZXRlciBPcmRlcmluZzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRSI+PCEtLSAtLT48L0E+PEgzPgotTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5NRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NZXNzYWdlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NZXNzYWdlSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE1lc3NhZ2UoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRV9fUU5BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfX1FOQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5NRVNTQUdFX19RTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfX1VOREVGSU5FRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+TUVTU0FHRV9fVU5ERUZJTkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX19FUEFSVFMiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfX0VQQVJUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+TUVTU0FHRV9fRVBBUlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+UEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UGFydEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRQYXJ0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPlBBUlRfX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX19FTEVNRU5UX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX0VMRU1FTlRfTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+UEFSVF9fRUxFTUVOVF9OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX19UWVBFX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX1RZUEVfTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+UEFSVF9fVFlQRV9OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX19UWVBFX0RFRklOSVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX1RZUEVfREVGSU5JVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+UEFSVF9fVFlQRV9ERUZJTklUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUEFSVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX0VNRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5QQVJUX19FTUVTU0FHRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPkJJTkRJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0QmluZGluZygpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX19RTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19fUU5BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPkJJTkRJTkdfX1FOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfX1VOREVGSU5FRCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19fVU5ERUZJTkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5CSU5ESU5HX19VTkRFRklORUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfX0VQT1JUX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfX0VQT1JUX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkJJTkRJTkdfX0VQT1JUX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PUEVSQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+QklORElOR19PUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5CaW5kaW5nT3BlcmF0aW9uSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldEJpbmRpbmdPcGVyYXRpb24oKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PUEVSQVRJT05fX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5CSU5ESU5HX09QRVJBVElPTl9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+QklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VSVklDRSI+PCEtLSAtLT48L0E+PEgzPgotU0VSVklDRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5TRVJWSUNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5TZXJ2aWNlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TZXJ2aWNlSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldFNlcnZpY2UoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VSVklDRV9fUU5BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0VfX1FOQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TRVJWSUNFX19RTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTRVJWSUNFX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0VfX1VOREVGSU5FRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U0VSVklDRV9fVU5ERUZJTkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTRVJWSUNFX19FUE9SVFMiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0VfX0VQT1JUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+U0VSVklDRV9fRVBPUlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+UE9SVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UG9ydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UG9ydEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRQb3J0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPlBPUlRfX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQT1JUX19FQklORElORyI+PCEtLSAtLT48L0E+PEgzPgotUE9SVF9fRUJJTkRJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPlBPUlRfX0VCSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZzwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVYVEVOU0lCSUxJVFlfRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotRVhURU5TSUJJTElUWV9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPkVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+RVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+REVGSU5JVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RGVmaW5pdGlvbkltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXREZWZpbml0aW9uKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBOYW1lc3BhY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19MT0NBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotREVGSU5JVElPTl9fTE9DQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPkRFRklOSVRJT05fX0xPQ0FUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX1FOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19RTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+REVGSU5JVElPTl9fUU5BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRU5DT0RJTkciPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0VOQ09ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5ERUZJTklUSU9OX19FTkNPRElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FSU1QT1JUUyI+PCEtLSAtLT48L0E+PEgzPgotREVGSU5JVElPTl9fRUlNUE9SVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkRFRklOSVRJT05fX0VJTVBPUlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRVRZUEVTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FVFlQRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkRFRklOSVRJT05fX0VUWVBFUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRU1FU1NBR0VTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FTUVTU0FHRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkRFRklOSVRJT05fX0VNRVNTQUdFUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FUE9SVF9UWVBFUyI+PCEtLSAtLT48L0E+PEgzPgotREVGSU5JVElPTl9fRVBPUlRfVFlQRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkRFRklOSVRJT05fX0VQT1JUX1RZUEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRUJJTkRJTkdTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FQklORElOR1M8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkRFRklOSVRJT05fX0VCSU5ESU5HUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmdzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FU0VSVklDRVMiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0VTRVJWSUNFUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+REVGSU5JVElPTl9fRVNFUlZJQ0VTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FTkFNRVNQQUNFUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+REVGSU5JVElPTl9fRU5BTUVTUEFDRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTVBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JTVBPUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkltcG9ydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SW1wb3J0SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldEltcG9ydCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTVBPUlRfX05BTUVTUEFDRV9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVF9fTkFNRVNQQUNFX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+SU1QT1JUX19OQU1FU1BBQ0VfVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1QT1JUX19MT0NBVElPTl9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVF9fTE9DQVRJT05fVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5JTVBPUlRfX0xPQ0FUSU9OX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1QT1JUX19FREVGSU5JVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSU1QT1JUX19FREVGSU5JVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+SU1QT1JUX19FREVGSU5JVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RURlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTVBPUlRfX0VTQ0hFTUEiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVF9fRVNDSEVNQTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+SU1QT1JUX19FU0NIRU1BPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRVhURU5TSUJMRV9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1FWFRFTlNJQkxFX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+RVhURU5TSUJMRV9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkV4dGVuc2libGVFbGVtZW50SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldEV4dGVuc2libGVFbGVtZW50KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLUVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlBVVCI+PCEtLSAtLT48L0E+PEgzPgotSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SU5QVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklucHV0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5JbnB1dEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJbnB1dCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLU9VVFBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5PVVRQVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPk91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3V0cHV0SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE91dHB1dCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQVVMVCI+PCEtLSAtLT48L0E+PEgzPgotRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+RkFVTFQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5GYXVsdEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRGYXVsdCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX0lOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0lOUFVUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPkJJTkRJTkdfSU5QVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdJbnB1dEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRCaW5kaW5nSW5wdXQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19JTlBVVF9fTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19JTlBVVF9fTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+QklORElOR19JTlBVVF9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfSU5QVVRfX0VJTlBVVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19JTlBVVF9fRUlOUFVUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5CSU5ESU5HX0lOUFVUX19FSU5QVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfT1VUUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX09VVFBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5CSU5ESU5HX09VVFBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdPdXRwdXRJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0QmluZGluZ091dHB1dCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09VVFBVVF9fTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PVVRQVVRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPkJJTkRJTkdfT1VUUFVUX19OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PVVRQVVRfX0VPVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1VUUFVUX19FT1VUUFVUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfRkFVTFQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+QklORElOR19GQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ0ZhdWx0SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldEJpbmRpbmdGYXVsdCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX0ZBVUxUX19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZBVUxUX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5CSU5ESU5HX0ZBVUxUX19OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19GQVVMVF9fRUZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZBVUxUX19FRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPkJJTkRJTkdfRkFVTFRfX0VGQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTkFNRVNQQUNFIj48IS0tIC0tPjwvQT48SDM+Ci1OQU1FU1BBQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+TkFNRVNQQUNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5OYW1lc3BhY2U8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk5hbWVzcGFjZUltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXROYW1lc3BhY2UoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTkFNRVNQQUNFX19VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLU5BTUVTUEFDRV9fVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5OQU1FU1BBQ0VfX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTkFNRVNQQUNFX19QUkVGSVgiPjwhLS0gLS0+PC9BPjxIMz4KLU5BTUVTUEFDRV9fUFJFRklYPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5OQU1FU1BBQ0VfX1BSRUZJWDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJlZml4PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVBPUlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotSVBPUlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JUE9SVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JUG9ydCBUeXBlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Qb3J0VHlwZTwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElQb3J0VHlwZSgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1JT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklPUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk9wZXJhdGlvbjwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElPcGVyYXRpb24oKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUlOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1JSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUlOUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPklucHV0PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SUlucHV0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklPVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUlPVVRQVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SU9VVFBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3V0cHV0PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SU91dHB1dCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJRkFVTFQiPjwhLS0gLS0+PC9BPjxIMz4KLUlGQVVMVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JRkFVTFQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RmF1bHQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJRmF1bHQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLUlNRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklNRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JTWVzc2FnZTwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TWVzc2FnZTwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElNZXNzYWdlKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklQQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1JUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlBhcnQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJUGFydCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU0VSVklDRSI+PCEtLSAtLT48L0E+PEgzPgotSVNFUlZJQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SVNFUlZJQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTZXJ2aWNlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TZXJ2aWNlPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SVNlcnZpY2UoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlQT1JUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklQT1JUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JUG9ydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UG9ydDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElQb3J0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklCSU5ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElORzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JQklORElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmc8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJQmluZGluZygpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJQklORElOR19PUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLUlCSU5ESU5HX09QRVJBVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JQklORElOR19PUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ09wZXJhdGlvbjwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElCaW5kaW5nT3BlcmF0aW9uKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklCSU5ESU5HX0lOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElOR19JTlBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JQklORElOR19JTlBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdJbnB1dDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElCaW5kaW5nSW5wdXQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUJJTkRJTkdfT1VUUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElOR19PVVRQVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUJJTkRJTkdfT1VUUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdPdXRwdXQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJQmluZGluZ091dHB1dCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJQklORElOR19GQVVMVCI+PCEtLSAtLT48L0E+PEgzPgotSUJJTkRJTkdfRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUJJTkRJTkdfRkFVTFQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5CaW5kaW5nRmF1bHQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJQmluZGluZ0ZhdWx0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklFWFRFTlNJQklMSVRZX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlFWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSURFRklOSVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLUlERUZJTklUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklERUZJTklUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JRGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RGVmaW5pdGlvbjwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElEZWZpbml0aW9uKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklJTVBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlJTVBPUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUlNUE9SVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUltcG9ydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SW1wb3J0PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SUltcG9ydCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTElTVCI+PCEtLSAtLT48L0E+PEgzPgotSUxJU1Q8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUxJU1Q8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklMaXN0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5MaXN0PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SUxpc3QoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1BUCI+PCEtLSAtLT48L0E+PEgzPgotSU1BUDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JTUFQPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JTWFwPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NYXA8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJTWFwKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklVUkwiPjwhLS0gLS0+PC9BPjxIMz4KLUlVUkw8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SVVSTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVVSTDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+VVJMPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SVVSTCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJRVhURU5TSU9OX1JFR0lTVFJZIj48IS0tIC0tPjwvQT48SDM+Ci1JRVhURU5TSU9OX1JFR0lTVFJZPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklFWFRFTlNJT05fUkVHSVNUUlk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkV4dGVuc2lvblJlZ2lzdHJ5PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlRZUEVTIj48IS0tIC0tPjwvQT48SDM+Ci1UWVBFUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5UWVBFUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+VHlwZXM8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlR5cGVzSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldFR5cGVzKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklJVEVSQVRPUiI+PCEtLSAtLT48L0E+PEgzPgotSUlURVJBVE9SPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklJVEVSQVRPUjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUl0ZXJhdG9yPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5JdGVyYXRvcjwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElJdGVyYXRvcigpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJVFlQRVMiPjwhLS0gLS0+PC9BPjxIMz4KLUlUWVBFUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JVFlQRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklUeXBlczwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+VHlwZXM8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJVHlwZXMoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4iPjwhLS0gLS0+PC9BPjxIMz4KLVVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSI+PCEtLSAtLT48L0E+PEgzPgotWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRV9SRUZFUkVOQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfUkVGRVJFTkNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPk1FU1NBR0VfUkVGRVJFTkNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TWVzc2FnZVJlZmVyZW5jZUltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRNZXNzYWdlUmVmZXJlbmNlKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfUkVGRVJFTkNFX19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFX1JFRkVSRU5DRV9fTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+TUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+TUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlFOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1RTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVEYXRhVHlwZSA8Qj5RTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlFOYW1lPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0UU5hbWUoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1BFUkFUSU9OX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRURhdGFUeXBlIDxCPk9QRVJBVElPTl9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3BlcmF0aW9uVHlwZTwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE9wZXJhdGlvblR5cGUoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRE9NX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLURPTV9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRURhdGFUeXBlIDxCPkRPTV9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5ET00gRWxlbWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RWxlbWVudDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldERPTUVsZW1lbnQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETF9FWENFUFRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLVdTRExfRVhDRVBUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRURhdGFUeXBlIDxCPldTRExfRVhDRVBUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5FeGNlcHRpb248L2VtPicgZGF0YSB0eXBlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPldTRExFeGNlcHRpb248L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRXU0RMRXhjZXB0aW9uKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRPTV9ET0NVTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotRE9NX0RPQ1VNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRURhdGFUeXBlIDxCPkRPTV9ET0NVTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nIGRhdGEgdHlwZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Eb2N1bWVudDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldERPTURvY3VtZW50KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4ZWZmMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUzOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTEgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1XU0RMUGFja2FnZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iV1NETFBhY2thZ2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMUGFja2FnZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgV1NETFBhY2thZ2U8L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5XU0RMUGFja2FnZTwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gPHVsPgotICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gPC91bD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSBUaGUgV1NETCBtb2RlbCBjb250YWlucyBjbGFzc2VzIGZvciB0aGUgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKS4KLSAKLSBXU0RMIGRlc2NyaWJlcyBuZXR3b3JrIHNlcnZpY2VzIGFzIHNldHMgb2YgZW5kcG9pbnRzIG9wZXJhdGluZyBvbiBtZXNzYWdlcy4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGFyZSBkZXNjcmliZWQgYWJzdHJhY3RseSwgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sIGFuZCBtZXNzYWdlIGZvcm1hdCB0byBkZWZpbmUgYW4gZW5kcG9pbnQuCi0gCi0gV1NETCBkZXNjcmliZXMgdGhlIGZvcm1hdHMgb2YgdGhlIG1lc3NhZ2VzIGV4Y2hhbmdlZCBieSB0aGUgc2VydmljZXMsIGFuZCBzdXBwb3J0cyB0aGUgWE1MIFNjaGVtYXMgc3BlY2lmaWNhdGlvbiBhcyBpdHMgY2Fub25pY2FsIHR5cGUgc3lzdGVtLiBUaGlzIHBhY2thZ2UgdXNlcyBhbiBYTUwgU2NoZW1hIEluZm9zZXQgbW9kZWwgcGFja2FnZSAoc2VlIHRoZSBYU0QgcGFja2FnZSkgdG8gZGVzY3JpYmUgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0cy4KLSAKLSBUaGUgbW9kZWwgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkaWFncmFtcywgbmFtZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcHRlcnMgaW4gdGhlIFdTREwgMS4xIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvTk9URS13c2RsLTIwMDEwMzE1KQotIC0gMi4xIERlZmluaXRpb24sIHNob3dzIHRoZSBXU0RMIGRlZmluaXRpb24gZWxlbWVudCBhbmQgdGhlIFdTREwgZG9jdW1lbnQgc3RydWN0dXJlCi0gLSAyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmcsIHNob3dzIHRoZSBuYW1lc3BhY2UgYW5kIGltcG9ydCBtZWNoYW5pc20KLSAtIDIuMS4zIEV4dGVuc2liaWxpdHksIHNob3dzIHRoZSBXU0RMIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtCi0gLSAyLjIgVHlwZXMsIHNob3dzIHRoZSB1c2Ugb2YgWE1MIFNjaGVtYSB0eXBlcyBpbiBXU0RMCi0gLSAyLjMgTWVzc2FnZXMsIDIuNCBQb3J0VHlwZXMsIDIuNSBCaW5kaW5ncyBhbmQgMi43IFNlcnZpY2VzLCBzaG93IHRoZSBtYWpvciBXU0RMIGVsZW1lbnRzIGFuZCB0aGVpciByZWxhdGlvbnMuCi0gCi0gVGhlIFdTREwgY2xhc3NlcyBleHRlbmQgdGhlIGphdmF4LndzZGwgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEpTUiAxMTAuIENsYXNzZXMgd2l0aCBpbnRlcmZhY2UgYW5kIGRhdGF0eXBlIHN0ZXJlb3R5cGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGVzZSBub24tTU9GIGludGVyZmFjZXMuCi0gPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+V1NETEZhY3Rvcnk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gCi0gICBlYWNoIGNsYXNzLAotICAgZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsCi0gICBlYWNoIGVudW0sCi0gICBhbmQgZWFjaCBkYXRhIHR5cGUKLSAKLSA8ITwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HIj5CSU5ESU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlMiPkJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5CSU5ESU5HX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX0VMRU1FTlQiPkJJTkRJTkdfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX19FUE9SVF9UWVBFIj5CSU5ESU5HX19FUE9SVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19fUU5BTUUiPkJJTkRJTkdfX1FOQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfX1VOREVGSU5FRCI+QklORElOR19fVU5ERUZJTkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUIj5CSU5ESU5HX0ZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5CSU5ESU5HX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5CSU5ESU5HX0ZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfX0VGQVVMVCI+QklORElOR19GQVVMVF9fRUZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0ZBVUxUX19FTEVNRU5UIj5CSU5ESU5HX0ZBVUxUX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19GQVVMVF9fTkFNRSI+QklORElOR19GQVVMVF9fTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCI+QklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+QklORElOR19GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfSU5QVVQiPkJJTkRJTkdfSU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIElucHV0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkJJTkRJTkdfSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9fRUlOUFVUIj5CSU5ESU5HX0lOUFVUX19FSU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfSU5QVVRfX0VMRU1FTlQiPkJJTkRJTkdfSU5QVVRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX0lOUFVUX19OQU1FIj5CSU5ESU5HX0lOUFVUX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UIj5CSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT04iPkJJTkRJTkdfT1BFUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkJJTkRJTkdfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0JJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMiPkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUIj5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVCI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PUEVSQVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5CSU5ESU5HX09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRUxFTUVOVCI+QklORElOR19PUEVSQVRJT05fX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiI+QklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9fTkFNRSI+QklORElOR19PUEVSQVRJT05fX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5CSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVCI+QklORElOR19PVVRQVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+QklORElOR19PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjQklORElOR19PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5CSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9fRUxFTUVOVCI+QklORElOR19PVVRQVVRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCI+QklORElOR19PVVRQVVRfX0VPVVRQVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9fTkFNRSI+QklORElOR19PVVRQVVRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UIj5CSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OIj5ERUZJTklUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5ERUZJTklUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VCSU5ESU5HUyI+REVGSU5JVElPTl9fRUJJTkRJTkdTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5ERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VJTVBPUlRTIj5ERUZJTklUSU9OX19FSU1QT1JUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUltcG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0VMRU1FTlQiPkRFRklOSVRJT05fX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTUVTU0FHRVMiPkRFRklOSVRJT05fX0VNRVNTQUdFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTkFNRVNQQUNFUyI+REVGSU5JVElPTl9fRU5BTUVTUEFDRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19FTkNPRElORyI+REVGSU5JVElPTl9fRU5DT0RJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRVBPUlRfVFlQRVMiPkRFRklOSVRJT05fX0VQT1JUX1RZUEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRVNFUlZJQ0VTIj5ERUZJTklUSU9OX19FU0VSVklDRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTZXJ2aWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fRVRZUEVTIj5ERUZJTklUSU9OX19FVFlQRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fX0xPQ0FUSU9OIj5ERUZJTklUSU9OX19MT0NBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNERUZJTklUSU9OX19RTkFNRSI+REVGSU5JVElPTl9fUU5BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRSI+REVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RFRklOSVRJT05fRkVBVFVSRV9DT1VOVCI+REVGSU5JVElPTl9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZWZpbml0aW9uPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0RPTV9ET0NVTUVOVCI+RE9NX0RPQ1VNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNET01fRUxFTUVOVCI+RE9NX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5ET00gRWxlbWVudDwvZW0+JyBkYXRhIHR5cGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZU5BTUUiPmVOQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBwYWNrYWdlIG5hbWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2VOU19QUkVGSVgiPmVOU19QUkVGSVg8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2VOU19VUkkiPmVOU19VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFIj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+RVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+RVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQkxFX0VMRU1FTlQiPkVYVEVOU0lCTEVfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UIj5FWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+RVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVCI+RkFVTFQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5GYXVsdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+RkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5GQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRUxFTUVOVCI+RkFVTFRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fRU1FU1NBR0UiPkZBVUxUX19FTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9fTkFNRSI+RkFVTFRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNGQVVMVF9GRUFUVVJFX0NPVU5UIj5GQVVMVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYXVsdDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElORyI+SUJJTkRJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfRkFVTFQiPklCSU5ESU5HX0ZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQiPklCSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPklCSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX0lOUFVUIj5JQklORElOR19JTlBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIElucHV0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UIj5JQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBJbnB1dDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJQklORElOR19PUEVSQVRJT04iPklCSU5ESU5HX09QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPklCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUJJTkRJTkdfT1VUUFVUIj5JQklORElOR19PVVRQVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UIj5JQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lERUZJTklUSU9OIj5JREVGSU5JVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklEZWZpbml0aW9uPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UIj5JREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRGVmaW5pdGlvbjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRVhURU5TSUJJTElUWV9FTEVNRU5UIj5JRVhURU5TSUJJTElUWV9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5JRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUVYVEVOU0lPTl9SRUdJU1RSWSI+SUVYVEVOU0lPTl9SRUdJU1RSWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lFWFRFTlNJT05fUkVHSVNUUllfRkVBVFVSRV9DT1VOVCI+SUVYVEVOU0lPTl9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lGQVVMVCI+SUZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUZhdWx0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJRkFVTFRfRkVBVFVSRV9DT1VOVCI+SUZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklGYXVsdDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSU1QT1JUIj5JSU1QT1JUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUltcG9ydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUlNUE9SVF9GRUFUVVJFX0NPVU5UIj5JSU1QT1JUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklJbXBvcnQ8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUlOUFVUIj5JSU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lJTlBVVF9GRUFUVVJFX0NPVU5UIj5JSU5QVVRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUlucHV0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lJVEVSQVRPUiI+SUlURVJBVE9SPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUl0ZXJhdG9yPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJSVRFUkFUT1JfRkVBVFVSRV9DT1VOVCI+SUlURVJBVE9SX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklJdGVyYXRvcjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTElTVCI+SUxJU1Q8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTGlzdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSUxJU1RfRkVBVFVSRV9DT1VOVCI+SUxJU1RfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUxpc3Q8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1BUCI+SU1BUDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklNYXA8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNQVBfRkVBVFVSRV9DT1VOVCI+SU1BUF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTWFwPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNRVNTQUdFIj5JTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklNZXNzYWdlPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTUVTU0FHRV9GRUFUVVJFX0NPVU5UIj5JTUVTU0FHRV9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTWVzc2FnZTwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlQiPklNUE9SVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkltcG9ydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPklNUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0VERUZJTklUSU9OIj5JTVBPUlRfX0VERUZJTklUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPklNUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX0VMRU1FTlQiPklNUE9SVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNUE9SVF9fRVNDSEVNQSI+SU1QT1JUX19FU0NIRU1BPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU1QT1JUX19MT0NBVElPTl9VUkkiPklNUE9SVF9fTE9DQVRJT05fVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTVBPUlRfX05BTUVTUEFDRV9VUkkiPklNUE9SVF9fTkFNRVNQQUNFX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lNUE9SVF9GRUFUVVJFX0NPVU5UIj5JTVBPUlRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW1wb3J0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUIj5JTlBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklucHV0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPklOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19FTEVNRU5UIj5JTlBVVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19FTUVTU0FHRSI+SU5QVVRfX0VNRVNTQUdFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX19OQU1FIj5JTlBVVF9fTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lOUFVUX0ZFQVRVUkVfQ09VTlQiPklOUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklucHV0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lPUEVSQVRJT04iPklPUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPklPUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU9wZXJhdGlvbjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJT1VUUFVUIj5JT1VUUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSU9VVFBVVF9GRUFUVVJFX0NPVU5UIj5JT1VUUFVUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklPdXRwdXQ8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBBUlQiPklQQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lQQVJUX0ZFQVRVUkVfQ09VTlQiPklQQVJUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQYXJ0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lQT1JUIj5JUE9SVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklQb3J0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJUE9SVF9GRUFUVVJFX0NPVU5UIj5JUE9SVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JUG9ydDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJUE9SVF9UWVBFIj5JUE9SVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVBvcnQgVHlwZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj5JUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQb3J0IFR5cGU8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVNFUlZJQ0UiPklTRVJWSUNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNlcnZpY2U8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lTRVJWSUNFX0ZFQVRVUkVfQ09VTlQiPklTRVJWSUNFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTZXJ2aWNlPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI0lUWVBFUyI+SVRZUEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVR5cGVzPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJVFlQRVNfRkVBVFVSRV9DT1VOVCI+SVRZUEVTX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklUeXBlczwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNJVVJMIj5JVVJMPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVVSTDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjSVVSTF9GRUFUVVJFX0NPVU5UIj5JVVJMX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklVUkw8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRSI+TUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk1lc3NhZ2U8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+TUVTU0FHRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+TUVTU0FHRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX19FTEVNRU5UIj5NRVNTQUdFX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9fRVBBUlRTIj5NRVNTQUdFX19FUEFSVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9fUU5BTUUiPk1FU1NBR0VfX1FOQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI01FU1NBR0VfX1VOREVGSU5FRCI+TUVTU0FHRV9fVU5ERUZJTkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPk1FU1NBR0VfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWVzc2FnZTwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRSI+TUVTU0FHRV9SRUZFUkVOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+TUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTUVTU0FHRV9SRUZFUkVOQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5NRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVCI+TUVTU0FHRV9SRUZFUkVOQ0VfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UiPk1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSI+TUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNNRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UIj5NRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNOQU1FU1BBQ0UiPk5BTUVTUEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk5hbWVzcGFjZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjTkFNRVNQQUNFX19QUkVGSVgiPk5BTUVTUEFDRV9fUFJFRklYPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVmaXg8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNOQU1FU1BBQ0VfX1VSSSI+TkFNRVNQQUNFX19VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI05BTUVTUEFDRV9GRUFUVVJFX0NPVU5UIj5OQU1FU1BBQ0VfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TmFtZXNwYWNlPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTiI+T1BFUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+T1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPk9QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0VGQVVMVFMiPk9QRVJBVElPTl9fRUZBVUxUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19FSU5QVVQiPk9QRVJBVElPTl9fRUlOUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX0VMRU1FTlQiPk9QRVJBVElPTl9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fRU9VVFBVVCI+T1BFUkFUSU9OX19FT1VUUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HIj5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9fTkFNRSI+T1BFUkFUSU9OX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1BFUkFUSU9OX19TVFlMRSI+T1BFUkFUSU9OX19TVFlMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPUEVSQVRJT05fX1VOREVGSU5FRCI+T1BFUkFUSU9OX19VTkRFRklORUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09QRVJBVElPTl9UWVBFIj5PUEVSQVRJT05fVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVQiPk9VVFBVVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPk9VVFBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1VUUFVUX19FTEVNRU5UIj5PVVRQVVRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNPVVRQVVRfX0VNRVNTQUdFIj5PVVRQVVRfX0VNRVNTQUdFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI09VVFBVVF9fTkFNRSI+T1VUUFVUX19OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjT1VUUFVUX0ZFQVRVUkVfQ09VTlQiPk9VVFBVVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PdXRwdXQ8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVCI+UEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+UEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+UEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTEVNRU5UIj5QQVJUX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTiI+UEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBEZWNsYXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX0VMRU1FTlRfTkFNRSI+UEFSVF9fRUxFTUVOVF9OQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19FTUVTU0FHRSI+UEFSVF9fRU1FU1NBR0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9fTkFNRSI+UEFSVF9fTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BBUlRfX1RZUEVfREVGSU5JVElPTiI+UEFSVF9fVFlQRV9ERUZJTklUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQQVJUX19UWVBFX05BTUUiPlBBUlRfX1RZUEVfTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUEFSVF9GRUFUVVJFX0NPVU5UIj5QQVJUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVCI+UE9SVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+UE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX19FQklORElORyI+UE9SVF9fRUJJTkRJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPlBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9fRUxFTUVOVCI+UE9SVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfX05BTUUiPlBPUlRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX0ZFQVRVUkVfQ09VTlQiPlBPUlRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9ydDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEUiPlBPUlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlBvcnQgVHlwZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlBPUlRfVFlQRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5QT1JUX1RZUEVfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19FTEVNRU5UIj5QT1JUX1RZUEVfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX0VPUEVSQVRJT05TIj5QT1JUX1RZUEVfX0VPUEVSQVRJT05TPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjUE9SVF9UWVBFX19RTkFNRSI+UE9SVF9UWVBFX19RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNQT1JUX1RZUEVfX1VOREVGSU5FRCI+UE9SVF9UWVBFX19VTkRFRklORUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1BPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj5QT1JUX1RZUEVfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9ydCBUeXBlPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1FOQU1FIj5RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFIj5TRVJWSUNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+U2VydmljZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjU0VSVklDRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TRVJWSUNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5TRVJWSUNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfX0VMRU1FTlQiPlNFUlZJQ0VfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19FUE9SVFMiPlNFUlZJQ0VfX0VQT1JUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNTRVJWSUNFX19RTkFNRSI+U0VSVklDRV9fUU5BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjU0VSVklDRV9fVU5ERUZJTkVEIj5TRVJWSUNFX19VTkRFRklORUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1NFUlZJQ0VfRkVBVFVSRV9DT1VOVCI+U0VSVklDRV9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TZXJ2aWNlPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1RZUEVTIj5UWVBFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlR5cGVzPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNUWVBFU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5UWVBFU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNUWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPlRZUEVTX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1RZUEVTX19FTEVNRU5UIj5UWVBFU19fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1RZUEVTX0ZFQVRVUkVfQ09VTlQiPlRZUEVTX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlR5cGVzPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UIj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4iPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hpbGRyZW48L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UIj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1VOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1dTRExfRUxFTUVOVCI+V1NETF9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNXU0RMX0VMRU1FTlRfX0VMRU1FTlQiPldTRExfRUxFTUVOVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1dTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5XU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWxlbWVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNXU0RMX0VYQ0VQVElPTiI+V1NETF9FWENFUFRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5FeGNlcHRpb248L2VtPicgZGF0YSB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI1hTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2hlbWE8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCkiPmdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVCaW5kaW5nT3BlcmF0aW9ucygpIj48Q09ERT48ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nX0VQb3J0VHlwZSgpIj5nZXRCaW5kaW5nX0VQb3J0VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RVBvcnRUeXBlKCkiPjxDT0RFPjxlbT5FUG9ydCBUeXBlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdfUU5hbWUoKSI+Z2V0QmluZGluZ19RTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdfVW5kZWZpbmVkKCkiPmdldEJpbmRpbmdfVW5kZWZpbmVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZygpIj5nZXRCaW5kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdGYXVsdF9FRmF1bHQoKSI+Z2V0QmluZGluZ0ZhdWx0X0VGYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXRFRmF1bHQoKSI+PENPREU+PGVtPkVGYXVsdDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nRmF1bHRfTmFtZSgpIj5nZXRCaW5kaW5nRmF1bHRfTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0ZhdWx0KCkiPmdldEJpbmRpbmdGYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5CaW5kaW5nIEZhdWx0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdJbnB1dF9FSW5wdXQoKSI+Z2V0QmluZGluZ0lucHV0X0VJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+PGVtPkVJbnB1dDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nSW5wdXRfTmFtZSgpIj5nZXRCaW5kaW5nSW5wdXRfTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0lucHV0KCkiPmdldEJpbmRpbmdJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5CaW5kaW5nIElucHV0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKSI+Z2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0ZhdWx0czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ0ZhdWx0cygpIj48Q09ERT48ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpIj5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIElucHV0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQoKSI+Z2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdPdXRwdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3BlcmF0aW9uX0VPcGVyYXRpb24oKSI+Z2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPjxDT0RFPjxlbT5FT3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpIj5nZXRCaW5kaW5nT3BlcmF0aW9uX05hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3BlcmF0aW9uKCkiPmdldEJpbmRpbmdPcGVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPdXRwdXRfRU91dHB1dCgpIj5nZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+PGVtPkVPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ091dHB1dF9OYW1lKCkiPmdldEJpbmRpbmdPdXRwdXRfTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPdXRwdXQoKSI+Z2V0QmluZGluZ091dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+QmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKSI+Z2V0RGVmaW5pdGlvbl9FQmluZGluZ3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RUJpbmRpbmdzKCkiPjxDT0RFPjxlbT5FQmluZGluZ3M8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpIj5nZXREZWZpbml0aW9uX0VJbXBvcnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVJbXBvcnRzKCkiPjxDT0RFPjxlbT5FSW1wb3J0czwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VNZXNzYWdlcygpIj5nZXREZWZpbml0aW9uX0VNZXNzYWdlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFTWVzc2FnZXMoKSI+PENPREU+PGVtPkVNZXNzYWdlczwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCkiPmdldERlZmluaXRpb25fRU5hbWVzcGFjZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RU5hbWVzcGFjZXMoKSI+PENPREU+PGVtPkVOYW1lc3BhY2VzPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fRW5jb2RpbmcoKSI+Z2V0RGVmaW5pdGlvbl9FbmNvZGluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RW5jb2RpbmcoKSI+PENPREU+PGVtPkVuY29kaW5nPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fRVBvcnRUeXBlcygpIj5nZXREZWZpbml0aW9uX0VQb3J0VHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVBvcnRUeXBlcygpIj48Q09ERT48ZW0+RVBvcnQgVHlwZXM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKSI+Z2V0RGVmaW5pdGlvbl9FU2VydmljZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVNlcnZpY2VzKCkiPjxDT0RFPjxlbT5FU2VydmljZXM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKSI+Z2V0RGVmaW5pdGlvbl9FVHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVUeXBlcygpIj48Q09ERT48ZW0+RVR5cGVzPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fTG9jYXRpb24oKSI+Z2V0RGVmaW5pdGlvbl9Mb2NhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0TG9jYXRpb24oKSI+PENPREU+PGVtPkxvY2F0aW9uPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fUU5hbWUoKSI+Z2V0RGVmaW5pdGlvbl9RTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCkiPmdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRUYXJnZXROYW1lc3BhY2UoKSI+PENPREU+PGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uKCkiPmdldERlZmluaXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkRlZmluaXRpb248L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFRGF0YVR5cGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRET01Eb2N1bWVudCgpIj5nZXRET01Eb2N1bWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5ET00gRG9jdW1lbnQ8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VEYXRhVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERPTUVsZW1lbnQoKSI+Z2V0RE9NRWxlbWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5ET00gRWxlbWVudDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+PENPREU+PGVtPkVsZW1lbnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZCgpIj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+PENPREU+PGVtPlJlcXVpcmVkPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxDT0RFPjxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2libGVFbGVtZW50KCkiPmdldEV4dGVuc2libGVFbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RmF1bHQoKSI+Z2V0RmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5GYXVsdDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElCaW5kaW5nKCkiPmdldElCaW5kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmc8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElCaW5kaW5nRmF1bHQoKSI+Z2V0SUJpbmRpbmdGYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklCaW5kaW5nIEZhdWx0PC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJQmluZGluZ0lucHV0KCkiPmdldElCaW5kaW5nSW5wdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JQmluZGluZyBJbnB1dDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUJpbmRpbmdPcGVyYXRpb24oKSI+Z2V0SUJpbmRpbmdPcGVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElCaW5kaW5nT3V0cHV0KCkiPmdldElCaW5kaW5nT3V0cHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJRGVmaW5pdGlvbigpIj5nZXRJRGVmaW5pdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklEZWZpbml0aW9uPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+Z2V0SUV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkiPmdldElFeHRlbnNpb25SZWdpc3RyeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElGYXVsdCgpIj5nZXRJRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JRmF1bHQ8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElJbXBvcnQoKSI+Z2V0SUltcG9ydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklJbXBvcnQ8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElJbnB1dCgpIj5nZXRJSW5wdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JSW5wdXQ8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElJdGVyYXRvcigpIj5nZXRJSXRlcmF0b3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JSXRlcmF0b3I8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElMaXN0KCkiPmdldElMaXN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUxpc3Q8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElNYXAoKSI+Z2V0SU1hcDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNYXA8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElNZXNzYWdlKCkiPmdldElNZXNzYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1lc3NhZ2U8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnRfRURlZmluaXRpb24oKSI+Z2V0SW1wb3J0X0VEZWZpbml0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVEZWZpbml0aW9uKCkiPjxDT0RFPjxlbT5FRGVmaW5pdGlvbjwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnRfRVNjaGVtYSgpIj5nZXRJbXBvcnRfRVNjaGVtYTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRFU2NoZW1hKCkiPjxDT0RFPjxlbT5FU2NoZW1hPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEltcG9ydF9Mb2NhdGlvblVSSSgpIj5nZXRJbXBvcnRfTG9jYXRpb25VUkk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkiPmdldEltcG9ydF9OYW1lc3BhY2VVUkk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0KCkiPmdldEltcG9ydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5JbXBvcnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRJbnB1dCgpIj5nZXRJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPklucHV0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SU9wZXJhdGlvbigpIj5nZXRJT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU9wZXJhdGlvbjwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SU91dHB1dCgpIj5nZXRJT3V0cHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU91dHB1dDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SVBhcnQoKSI+Z2V0SVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JUGFydDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SVBvcnQoKSI+Z2V0SVBvcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JUG9ydDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SVBvcnRUeXBlKCkiPmdldElQb3J0VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklQb3J0IFR5cGU8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElTZXJ2aWNlKCkiPmdldElTZXJ2aWNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNlcnZpY2U8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElUeXBlcygpIj5nZXRJVHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JVHlwZXM8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldElVUkwoKSI+Z2V0SVVSTDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklVUkw8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlX0VQYXJ0cygpIj5nZXRNZXNzYWdlX0VQYXJ0czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRFUGFydHMoKSI+PENPREU+PGVtPkVQYXJ0czwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlX1FOYW1lKCkiPmdldE1lc3NhZ2VfUU5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlX1VuZGVmaW5lZCgpIj5nZXRNZXNzYWdlX1VuZGVmaW5lZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+TWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCkiPmdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKSI+Z2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIj5nZXRNZXNzYWdlUmVmZXJlbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXROYW1lc3BhY2VfUHJlZml4KCkiPmdldE5hbWVzcGFjZV9QcmVmaXg8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0UHJlZml4KCkiPjxDT0RFPjxlbT5QcmVmaXg8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TmFtZXNwYWNlX1VSSSgpIj5nZXROYW1lc3BhY2VfVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sI2dldFVSSSgpIj48Q09ERT48ZW0+VVJJPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TmFtZXNwYWNlKCkiPmdldE5hbWVzcGFjZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5OYW1lc3BhY2U8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uX0VGYXVsdHMoKSI+Z2V0T3BlcmF0aW9uX0VGYXVsdHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFRmF1bHRzKCkiPjxDT0RFPjxlbT5FRmF1bHRzPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9FSW5wdXQoKSI+Z2V0T3BlcmF0aW9uX0VJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+PGVtPkVJbnB1dDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fRU91dHB1dCgpIj5nZXRPcGVyYXRpb25fRU91dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFT3V0cHV0KCkiPjxDT0RFPjxlbT5FT3V0cHV0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKSI+Z2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVQYXJhbWV0ZXJPcmRlcmluZygpIj48Q09ERT48ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25fTmFtZSgpIj5nZXRPcGVyYXRpb25fTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9TdHlsZSgpIj5nZXRPcGVyYXRpb25fU3R5bGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbl9VbmRlZmluZWQoKSI+Z2V0T3BlcmF0aW9uX1VuZGVmaW5lZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uKCkiPmdldE9wZXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFRGF0YVR5cGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb25UeXBlKCkiPmdldE9wZXJhdGlvblR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8Q09ERT48ZW0+T3BlcmF0aW9uIFR5cGU8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE91dHB1dCgpIj5nZXRPdXRwdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+T3V0cHV0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uKCkiPmdldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFbGVtZW50RGVjbGFyYXRpb24oKSI+PENPREU+PGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydF9FbGVtZW50TmFtZSgpIj5nZXRQYXJ0X0VsZW1lbnROYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFbGVtZW50TmFtZSgpIj48Q09ERT48ZW0+RWxlbWVudCBOYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfRU1lc3NhZ2UoKSI+Z2V0UGFydF9FTWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfTmFtZSgpIj5nZXRQYXJ0X05hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydF9UeXBlRGVmaW5pdGlvbigpIj5nZXRQYXJ0X1R5cGVEZWZpbml0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlRGVmaW5pdGlvbigpIj48Q09ERT48ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnRfVHlwZU5hbWUoKSI+Z2V0UGFydF9UeXBlTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZU5hbWUoKSI+PENPREU+PGVtPlR5cGUgTmFtZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnQoKSI+Z2V0UGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0X0VCaW5kaW5nKCkiPmdldFBvcnRfRUJpbmRpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPjxDT0RFPjxlbT5FQmluZGluZzwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0X05hbWUoKSI+Z2V0UG9ydF9OYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydCgpIj5nZXRQb3J0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5Qb3J0PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBvcnRUeXBlX0VPcGVyYXRpb25zKCkiPmdldFBvcnRUeXBlX0VPcGVyYXRpb25zPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRFT3BlcmF0aW9ucygpIj48Q09ERT48ZW0+RU9wZXJhdGlvbnM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydFR5cGVfUU5hbWUoKSI+Z2V0UG9ydFR5cGVfUU5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCkiPmdldFBvcnRUeXBlX1VuZGVmaW5lZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0VHlwZSgpIj5nZXRQb3J0VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlBvcnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VEYXRhVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFFOYW1lKCkiPmdldFFOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0U2VydmljZV9FUG9ydHMoKSI+Z2V0U2VydmljZV9FUG9ydHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjZ2V0RVBvcnRzKCkiPjxDT0RFPjxlbT5FUG9ydHM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0U2VydmljZV9RTmFtZSgpIj5nZXRTZXJ2aWNlX1FOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0U2VydmljZV9VbmRlZmluZWQoKSI+Z2V0U2VydmljZV9VbmRlZmluZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRTZXJ2aWNlKCkiPmdldFNlcnZpY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlNlcnZpY2U8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRUeXBlcygpIj5nZXRUeXBlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlR5cGVzPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpIj5nZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRDaGlsZHJlbigpIj48Q09ERT48ZW0+Q2hpbGRyZW48L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+Z2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+PENPREU+PGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRXU0RMRWxlbWVudF9FbGVtZW50KCkiPmdldFdTRExFbGVtZW50X0VsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPjxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0V1NETEVsZW1lbnQoKSI+Z2V0V1NETEVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RURhdGFUeXBlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0V1NETEV4Y2VwdGlvbigpIj5nZXRXU0RMRXhjZXB0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPkV4Y2VwdGlvbjwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0V1NETEZhY3RvcnkoKSI+Z2V0V1NETEZhY3Rvcnk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCkiPmdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X1NjaGVtYTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldFNjaGVtYSgpIj48Q09ERT48ZW0+U2NoZW1hPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+Z2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZU5BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLWVOQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5lTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgcGFja2FnZSBuYW1lLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLmVOQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVOU19VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLWVOU19VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPmVOU19VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5lTlNfVVJJIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVOU19QUkVGSVgiPjwhLS0gLS0+PC9BPjxIMz4KLWVOU19QUkVGSVg8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPmVOU19QUkVGSVg8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuZU5TX1BSRUZJWCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlSU5TVEFOQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLWVJTlNUQU5DRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPiA8Qj5lSU5TVEFOQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETF9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+V1NETF9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RWxlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+V1NETEVsZW1lbnRJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0V1NETEVsZW1lbnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETF9FTEVNRU5UX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX0VMRU1FTlRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+V1NETF9FTEVNRU5UX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5XU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWxlbWVudDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFWFRFTlNJQkxFX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUVYVEVOU0lCTEVfRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5FWFRFTlNJQkxFX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkV4dGVuc2libGVFbGVtZW50SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldEV4dGVuc2libGVFbGVtZW50KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+RVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1FWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5FWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotUE9SVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlBvcnQgVHlwZTwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UG9ydFR5cGVJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0UG9ydFR5cGUoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QT1JUX1RZUEVfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9UWVBFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUE9SVF9UWVBFX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UE9SVF9UWVBFX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfVFlQRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UE9SVF9UWVBFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfVFlQRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUE9SVF9UWVBFX19RTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotUE9SVF9UWVBFX19RTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QT1JUX1RZUEVfX1FOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfVFlQRV9fUU5BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUE9SVF9UWVBFX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfVFlQRV9fVU5ERUZJTkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlRfVFlQRV9fVU5ERUZJTkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX1RZUEVfX1VOREVGSU5FRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQT1JUX1RZUEVfX0VPUEVSQVRJT05TIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfX0VPUEVSQVRJT05TPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlRfVFlQRV9fRU9QRVJBVElPTlM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QT1JUX1RZUEVfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9ydCBUeXBlPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk9QRVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3BlcmF0aW9uSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE9wZXJhdGlvbigpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk9QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PUEVSQVRJT05fX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PUEVSQVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX1NUWUxFIj48IS0tIC0tPjwvQT48SDM+Ci1PUEVSQVRJT05fX1NUWUxFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk9QRVJBVElPTl9fU1RZTEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX19TVFlMRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PUEVSQVRJT05fX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX05BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1BFUkFUSU9OX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fVU5ERUZJTkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk9QRVJBVElPTl9fVU5ERUZJTkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fX1VOREVGSU5FRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX0VJTlBVVCI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX19FSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1BFUkFUSU9OX19FSU5QVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9QRVJBVElPTl9fRU9VVFBVVCI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX19FT1VUUFVUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk9QRVJBVElPTl9fRU9VVFBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX0VGQVVMVFMiPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fRUZBVUxUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PUEVSQVRJT05fX0VGQVVMVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkciPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1FU1NBR0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5NZXNzYWdlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NZXNzYWdlSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE1lc3NhZ2UoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1FU1NBR0VfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfX1FOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFX19RTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX19RTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX19RTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX19VTkRFRklORUQiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfX1VOREVGSU5FRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX19VTkRFRklORUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfX1VOREVGSU5FRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX19FUEFSVFMiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfX0VQQVJUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX19FUEFSVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotTUVTU0FHRV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1FU1NBR0VfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWVzc2FnZTwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UGFydEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRQYXJ0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUEFSVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotUEFSVF9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QQVJUX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1QQVJUX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBBUlRfX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX19OQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlRfX0VMRU1FTlRfTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotUEFSVF9fRUxFTUVOVF9OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBBUlRfX0VMRU1FTlRfTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlRfX1RZUEVfTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotUEFSVF9fVFlQRV9OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBBUlRfX1RZUEVfTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9OQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlRfX1RZUEVfREVGSU5JVElPTiI+PCEtLSAtLT48L0E+PEgzPgotUEFSVF9fVFlQRV9ERUZJTklUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBBUlRfX1RZUEVfREVGSU5JVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBEZWNsYXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUEFSVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlRfX0VNRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBBUlRfX0VNRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotUEFSVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBBUlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QQVJUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElORyI+PCEtLSAtLT48L0E+PEgzPgotQklORElORzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ0ltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRCaW5kaW5nKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX19RTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19fUU5BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19fUU5BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19fUU5BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19fVU5ERUZJTkVEIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX19VTkRFRklORUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19fVU5ERUZJTkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX19VTkRFRklORUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19fRVBPUlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19fRVBPUlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX19FUE9SVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PUEVSQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ09wZXJhdGlvbkltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09QRVJBVElPTl9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PUEVSQVRJT05fX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PUEVSQVRJT05fX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PUEVSQVRJT05fX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX05BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNFUlZJQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U0VSVklDRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlNlcnZpY2U8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNlcnZpY2VJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0U2VydmljZSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5TRVJWSUNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNFUlZJQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU0VSVklDRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNFUlZJQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuU0VSVklDRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNFUlZJQ0VfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0VfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U0VSVklDRV9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlNFUlZJQ0VfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VSVklDRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNFUlZJQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuU0VSVklDRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VSVklDRV9fUU5BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0VfX1FOQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNFUlZJQ0VfX1FOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNFUlZJQ0VfX1VOREVGSU5FRCI+PCEtLSAtLT48L0E+PEgzPgotU0VSVklDRV9fVU5ERUZJTkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNFUlZJQ0VfX1VOREVGSU5FRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuU0VSVklDRV9fVU5ERUZJTkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNFUlZJQ0VfX0VQT1JUUyI+PCEtLSAtLT48L0E+PEgzPgotU0VSVklDRV9fRVBPUlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNFUlZJQ0VfX0VQT1JUUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5TRVJWSUNFX19FUE9SVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VSVklDRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TRVJWSUNFX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U0VSVklDRV9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TZXJ2aWNlPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlNFUlZJQ0VfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQT1JUIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5Qb3J0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Qb3J0SW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldFBvcnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuUE9SVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQT1JUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UE9SVF9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfX05BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUE9SVF9fRUJJTkRJTkciPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfX0VCSU5ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlRfX0VCSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZzwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotUE9SVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlBPUlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9ydDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5QT1JUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRVhURU5TSUJJTElUWV9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1FWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+RVhURU5TSUJJTElUWV9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+RVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRFRklOSVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5EZWZpbml0aW9uPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5EZWZpbml0aW9uSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldERlZmluaXRpb24oKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5ERUZJTklUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRFRklOSVRJT05fX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5ERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+REVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fTE9DQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0xPQ0FUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRFRklOSVRJT05fX0xPQ0FUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX1FOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19RTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5ERUZJTklUSU9OX19RTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19RTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FTkNPRElORyI+PCEtLSAtLT48L0E+PEgzPgotREVGSU5JVElPTl9fRU5DT0RJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+REVGSU5JVElPTl9fRU5DT0RJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRUlNUE9SVFMiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0VJTVBPUlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRFRklOSVRJT05fX0VJTVBPUlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRVRZUEVTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FVFlQRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+REVGSU5JVElPTl9fRVRZUEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRU1FU1NBR0VTIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX19FTUVTU0FHRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+REVGSU5JVElPTl9fRU1FU1NBR0VTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fX0VNRVNTQUdFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FUE9SVF9UWVBFUyI+PCEtLSAtLT48L0E+PEgzPgotREVGSU5JVElPTl9fRVBPUlRfVFlQRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+REVGSU5JVElPTl9fRVBPUlRfVFlQRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX19FQklORElOR1MiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0VCSU5ESU5HUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5ERUZJTklUSU9OX19FQklORElOR1M8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRFRklOSVRJT05fX0VTRVJWSUNFUyI+PCEtLSAtLT48L0E+PEgzPgotREVGSU5JVElPTl9fRVNFUlZJQ0VTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRFRklOSVRJT05fX0VTRVJWSUNFUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVNlcnZpY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5ERUZJTklUSU9OX19FU0VSVklDRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9fRU5BTUVTUEFDRVMiPjwhLS0gLS0+PC9BPjxIMz4KLURFRklOSVRJT05fX0VOQU1FU1BBQ0VTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTmFtZXNwYWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5BTUVTUEFDRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+REVGSU5JVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZWZpbml0aW9uPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRFRklOSVRJT05fRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTVBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTVBPUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JbXBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkltcG9ydEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJbXBvcnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklNUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTVBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTVBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1QT1JUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTVBPUlRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1QT1JUX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklNUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1QT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1QT1JUX19OQU1FU1BBQ0VfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1JTVBPUlRfX05BTUVTUEFDRV9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1QT1JUX19OQU1FU1BBQ0VfVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19OQU1FU1BBQ0VfVVJJIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklNUE9SVF9fTE9DQVRJT05fVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1JTVBPUlRfX0xPQ0FUSU9OX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTVBPUlRfX0xPQ0FUSU9OX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1QT1JUX19FREVGSU5JVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSU1QT1JUX19FREVGSU5JVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTVBPUlRfX0VERUZJTklUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1QT1JUX19FU0NIRU1BIj48IS0tIC0tPjwvQT48SDM+Ci1JTVBPUlRfX0VTQ0hFTUE8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1QT1JUX19FU0NIRU1BPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklNUE9SVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTVBPUlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTVBPUlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW1wb3J0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNUE9SVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfUkVGRVJFTkNFIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFX1JFRkVSRU5DRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX1JFRkVSRU5DRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NZXNzYWdlUmVmZXJlbmNlSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE1lc3NhZ2VSZWZlcmVuY2UoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotTUVTU0FHRV9SRUZFUkVOQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUVTU0FHRV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlBVVCI+PCEtLSAtLT48L0E+PEgzPgotSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU5QVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JbnB1dDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SW5wdXRJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SW5wdXQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU5QVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklOUFVUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTlBVVF9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTlBVVF9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklOUFVUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlBVVF9fTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotSU5QVVRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU5QVVRfX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTlBVVF9fTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlBVVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLUlOUFVUX19FTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTlBVVF9fRU1FU1NBR0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU5QVVRfX0VNRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklOUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlOUFVUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU5QVVRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW5wdXQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSU5QVVRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLU9VVFBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PVVRQVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5PdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk91dHB1dEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRPdXRwdXQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1VUUFVUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9VVFBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1VUUFVUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1PVVRQVVRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1VUUFVUX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1VUUFVUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLU9VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1VUUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1VUUFVUX19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1PVVRQVVRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1VUUFVUX19OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1VUUFVUX19OQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9VVFBVVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLU9VVFBVVF9fRU1FU1NBR0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1VUUFVUX19FTUVTU0FHRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5PVVRQVVRfX0VNRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik9VVFBVVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1PVVRQVVRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5PVVRQVVRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3V0cHV0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLk9VVFBVVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1GQVVMVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5GQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5GYXVsdEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRGYXVsdCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5GQVVMVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFVTFRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUZBVUxUX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkZBVUxUX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRkFVTFRfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1GQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+RkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkZBVUxUX19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1GQVVMVF9fTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5GQVVMVF9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkZBVUxUX19OQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkZBVUxUX19FTUVTU0FHRSI+PCEtLSAtLT48L0E+PEgzPgotRkFVTFRfX0VNRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkZBVUxUX19FTUVTU0FHRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5GQVVMVF9fRU1FU1NBR0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFVTFRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotRkFVTFRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5GQVVMVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYXVsdDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5GQVVMVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfSU5QVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19JTlBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdJbnB1dEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRCaW5kaW5nSW5wdXQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19JTlBVVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX0lOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX0lOUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX0lOUFVUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0lOUFVUX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfSU5QVVRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0lOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX0lOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfSU5QVVRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfSU5QVVRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19JTlBVVF9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX05BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19JTlBVVF9fRUlOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0lOUFVUX19FSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19JTlBVVF9fRUlOUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09VVFBVVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PVVRQVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PVVRQVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ091dHB1dEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRCaW5kaW5nT3V0cHV0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09VVFBVVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PVVRQVVRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19PVVRQVVRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1VUUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PVVRQVVRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1VUUFVUX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfT1VUUFVUX19OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX05BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PVVRQVVRfX0VPVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfT1VUUFVUX19FT1VUUFVUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfT1VUUFVUX19FT1VUUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfRkFVTFQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19GQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmcgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdGYXVsdEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRCaW5kaW5nRmF1bHQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuQklORElOR19GQVVMVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCSU5ESU5HX0ZBVUxUX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZBVUxUX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkJJTkRJTkdfRkFVTFRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HX0ZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfRkFVTFRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLUJJTkRJTkdfRkFVTFRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19GQVVMVF9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX05BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19GQVVMVF9fRUZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZBVUxUX19FRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19GQVVMVF9fRUZBVUxUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+QklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJOQU1FU1BBQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLU5BTUVTUEFDRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5OQU1FU1BBQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5OYW1lc3BhY2U8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk5hbWVzcGFjZUltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXROYW1lc3BhY2UoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTkFNRVNQQUNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5BTUVTUEFDRV9fVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1OQU1FU1BBQ0VfX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5OQU1FU1BBQ0VfX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTkFNRVNQQUNFX19QUkVGSVgiPjwhLS0gLS0+PC9BPjxIMz4KLU5BTUVTUEFDRV9fUFJFRklYPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk5BTUVTUEFDRV9fUFJFRklYPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVmaXg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1BSRUZJWCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJOQU1FU1BBQ0VfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotTkFNRVNQQUNFX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TkFNRVNQQUNFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5hbWVzcGFjZTwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5OQU1FU1BBQ0VfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJUE9SVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1JUE9SVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklQT1JUX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JUG9ydCBUeXBlPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Qb3J0VHlwZTwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElQb3J0VHlwZSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUE9SVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklQT1JUX1RZUEVfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSVBPUlRfVFlQRV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklQT1JUX1RZUEVfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBvcnQgVHlwZTwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU9QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSU9QRVJBVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JT1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3BlcmF0aW9uPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SU9wZXJhdGlvbigpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JT1BFUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklPUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSU9QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklPUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUlOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1JSU5QVVQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUlOUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUlucHV0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5JbnB1dDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElJbnB1dCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JSU5QVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUlOUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlJTlBVVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklJTlBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSW5wdXQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUlOUFVUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU9VVFBVVCI+PCEtLSAtLT48L0E+PEgzPgotSU9VVFBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JT1VUUFVUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU91dHB1dDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3V0cHV0PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SU91dHB1dCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JT1VUUFVUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklPVVRQVVRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSU9VVFBVVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklPVVRQVVRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU91dHB1dDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JT1VUUFVUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1JRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUZBVUxUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5GYXVsdDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElGYXVsdCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JRkFVTFQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUZBVUxUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlGQVVMVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklGQVVMVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRmF1bHQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUZBVUxUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLUlNRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklNRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU1lc3NhZ2U8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1lc3NhZ2U8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJTWVzc2FnZSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JTUVTU0FHRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUVTU0FHRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTUVTU0FHRV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklNRVNTQUdFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNZXNzYWdlPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNRVNTQUdFX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVBBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlQQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklQQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlBhcnQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJUGFydCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJUEFSVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JUEFSVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklQQVJUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQYXJ0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklQQVJUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVNFUlZJQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLUlTRVJWSUNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTRVJWSUNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNlcnZpY2U8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNlcnZpY2U8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJU2VydmljZSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JU0VSVklDRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU0VSVklDRV9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JU0VSVklDRV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTRVJWSUNFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTZXJ2aWNlPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklTRVJWSUNFX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlQT1JUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklQT1JUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVBvcnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlBvcnQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJUG9ydCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JUE9SVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJUE9SVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JUE9SVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklQT1JUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQb3J0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklQT1JUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUJJTkRJTkciPjwhLS0gLS0+PC9BPjxIMz4KLUlCSU5ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklCSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmc8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJQmluZGluZygpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJQklORElOR19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElOR19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklCSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUJJTkRJTkdfT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElOR19PUEVSQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUJJTkRJTkdfT1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5CaW5kaW5nT3BlcmF0aW9uPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUJJTkRJTkdfT1BFUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElOR19PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JQklORElOR19PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklCSU5ESU5HX0lOUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1JQklORElOR19JTlBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JQklORElOR19JTlBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklCaW5kaW5nIElucHV0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5CaW5kaW5nSW5wdXQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJQmluZGluZ0lucHV0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklCSU5ESU5HX0lOUFVUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlCSU5ESU5HX0lOUFVUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJQklORElOR19PVVRQVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUlCSU5ESU5HX09VVFBVVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JQklORElOR19PVVRQVVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdPdXRwdXQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJQmluZGluZ091dHB1dCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElOR19PVVRQVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUJJTkRJTkdfT1VUUFVUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUJJTkRJTkdfT1VUUFVUX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUJJTkRJTkdfRkFVTFQiPjwhLS0gLS0+PC9BPjxIMz4KLUlCSU5ESU5HX0ZBVUxUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklCSU5ESU5HX0ZBVUxUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdGYXVsdDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElCaW5kaW5nRmF1bHQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUJJTkRJTkdfRkFVTFQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSUJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JQklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBGYXVsdDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JQklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklFWFRFTlNJQklMSVRZX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlFWFRFTlNJQklMSVRZX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUVYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkV4dGVuc2liaWxpdHlFbGVtZW50PC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklFWFRFTlNJQklMSVRZX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJREVGSU5JVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSURFRklOSVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SURFRklOSVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JRGVmaW5pdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RGVmaW5pdGlvbjwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElEZWZpbml0aW9uKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklERUZJTklUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlERUZJTklUSU9OX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SURFRklOSVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SURlZmluaXRpb248L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSURFRklOSVRJT05fRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJSU1QT1JUIj48IS0tIC0tPjwvQT48SDM+Ci1JSU1QT1JUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklJTVBPUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSW1wb3J0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5JbXBvcnQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJSW1wb3J0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklJTVBPUlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUlNUE9SVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JSU1QT1JUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUlNUE9SVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSW1wb3J0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklJTVBPUlRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTElTVCI+PCEtLSAtLT48L0E+PEgzPgotSUxJU1Q8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUxJU1Q8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTGlzdDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TGlzdDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElMaXN0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklMSVNUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklMSVNUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlMSVNUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUxJU1RfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUxpc3Q8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUxJU1RfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUFQIj48IS0tIC0tPjwvQT48SDM+Ci1JTUFQPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklNQVA8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTWFwPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NYXA8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJTWFwKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNQVAiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1BUF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTUFQX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1BUF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTWFwPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklNQVBfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJVVJMIj48IS0tIC0tPjwvQT48SDM+Ci1JVVJMPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklVUkw8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JVVJMPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5VUkw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJVVJMKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklVUkwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVVSTF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JVVJMX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SVVSTF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JVVJMPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklVUkxfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJRVhURU5TSU9OX1JFR0lTVFJZIj48IS0tIC0tPjwvQT48SDM+Ci1JRVhURU5TSU9OX1JFR0lTVFJZPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklFWFRFTlNJT05fUkVHSVNUUlk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5FeHRlbnNpb25SZWdpc3RyeTwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldElFeHRlbnNpb25SZWdpc3RyeSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JRVhURU5TSU9OX1JFR0lTVFJZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklFWFRFTlNJT05fUkVHSVNUUllfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSUVYVEVOU0lPTl9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklFWFRFTlNJT05fUkVHSVNUUllfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5JRVhURU5TSU9OX1JFR0lTVFJZX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVFlQRVMiPjwhLS0gLS0+PC9BPjxIMz4KLVRZUEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlRZUEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+VHlwZXM8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlR5cGVzSW1wbDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldFR5cGVzKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlRZUEVTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlRZUEVTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVRZUEVTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+VFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVFlQRVNfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJUWVBFU19fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotVFlQRVNfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+VFlQRVNfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5UWVBFU19fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJUWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPjwhLS0gLS0+PC9BPjxIMz4KLVRZUEVTX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5UWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5UWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVFlQRVNfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotVFlQRVNfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5UWVBFU19GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UeXBlczwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5UWVBFU19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklJVEVSQVRPUiI+PCEtLSAtLT48L0E+PEgzPgotSUlURVJBVE9SPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklJVEVSQVRPUjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklJdGVyYXRvcjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SXRlcmF0b3I8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJSXRlcmF0b3IoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSUlURVJBVE9SIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklJVEVSQVRPUl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JSVRFUkFUT1JfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JSVRFUkFUT1JfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUl0ZXJhdG9yPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklJVEVSQVRPUl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklUWVBFUyI+PCEtLSAtLT48L0E+PEgzPgotSVRZUEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklUWVBFUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklUeXBlczwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+VHlwZXM8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRJVHlwZXMoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuSVRZUEVTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklUWVBFU19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JVFlQRVNfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JVFlQRVNfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVR5cGVzPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLklUWVBFU19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsPC9DT0RFPiwgCi08Q09ERT5XU0RMUGFja2FnZUltcGwuZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLVVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLVVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+VU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4iPjwhLS0gLS0+PC9BPjxIMz4KLVVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU48L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoaWxkcmVuPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGw8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSI+PCEtLSAtLT48L0E+PEgzPgotWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2hlbWE8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+WFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJRTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotUU5BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+UU5BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5RTmFtZTwvZW0+JyBkYXRhIHR5cGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UU5hbWU8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRRTmFtZSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5RTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotT1BFUkFUSU9OX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+T1BFUkFUSU9OX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+T3BlcmF0aW9uVHlwZTwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldE9wZXJhdGlvblR5cGUoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuT1BFUkFUSU9OX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRE9NX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLURPTV9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkRPTV9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicgZGF0YSB0eXBlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkVsZW1lbnQ8L0NPREU+LCAKLTxDT0RFPldTRExQYWNrYWdlSW1wbC5nZXRET01FbGVtZW50KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRPTV9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldTRExfRVhDRVBUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX0VYQ0VQVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5XU0RMX0VYQ0VQVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkV4Y2VwdGlvbjwvZW0+JyBkYXRhIHR5cGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+V1NETEV4Y2VwdGlvbjwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldFdTRExFeGNlcHRpb24oKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UuV1NETF9FWENFUFRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRE9NX0RPQ1VNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1ET01fRE9DVU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+RE9NX0RPQ1VNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nIGRhdGEgdHlwZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Eb2N1bWVudDwvQ09ERT4sIAotPENPREU+V1NETFBhY2thZ2VJbXBsLmdldERPTURvY3VtZW50KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkRPTV9ET0NVTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFdTRExFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFdTRExFbGVtZW50PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0V1NETEVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RWxlbWVudDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5XU0RMRWxlbWVudDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudDwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPjxDT0RFPjxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPjxDT0RFPldTRExFbGVtZW50LmdldERvY3VtZW50YXRpb25FbGVtZW50KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50KCkiPjxDT0RFPmdldFdTRExFbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRXU0RMRWxlbWVudF9FbGVtZW50PC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFdTRExFbGVtZW50X0VsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPjxDT0RFPjxlbT5FbGVtZW50PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbGVtZW50PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj48Q09ERT5XU0RMRWxlbWVudC5nZXRFbGVtZW50KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFdTRExFbGVtZW50KCkiPjxDT0RFPmdldFdTRExFbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UG9ydFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UG9ydFR5cGU8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRQb3J0VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlBvcnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcnQgVHlwZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5Qb3J0VHlwZTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQb3J0VHlwZV9RTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb3J0VHlwZV9RTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRQb3J0VHlwZV9RTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sI2dldFFOYW1lKCkiPjxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UU5hbWU8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT5Qb3J0VHlwZS5nZXRRTmFtZSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQb3J0VHlwZSgpIj48Q09ERT5nZXRQb3J0VHlwZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBvcnRUeXBlX1VuZGVmaW5lZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb3J0VHlwZV9VbmRlZmluZWQ8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0UG9ydFR5cGVfVW5kZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+UG9ydFR5cGUuaXNVbmRlZmluZWQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydFR5cGUoKSI+PENPREU+Z2V0UG9ydFR5cGUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb3J0VHlwZV9FT3BlcmF0aW9uczwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRQb3J0VHlwZV9FT3BlcmF0aW9uczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjZ2V0RU9wZXJhdGlvbnMoKSI+PENPREU+PGVtPkVPcGVyYXRpb25zPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVPcGVyYXRpb25zPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwjZ2V0RU9wZXJhdGlvbnMoKSI+PENPREU+UG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydFR5cGUoKSI+PENPREU+Z2V0UG9ydFR5cGUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPcGVyYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T3BlcmF0aW9uPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0T3BlcmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+T3BlcmF0aW9uPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9wZXJhdGlvbl9TdHlsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPcGVyYXRpb25fU3R5bGU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0T3BlcmF0aW9uX1N0eWxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3R5bGU8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+T3BlcmF0aW9uLmdldFN0eWxlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE9wZXJhdGlvbigpIj48Q09ERT5nZXRPcGVyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPcGVyYXRpb25fTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPcGVyYXRpb25fTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRPcGVyYXRpb25fTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+T3BlcmF0aW9uLmdldE5hbWUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uKCkiPjxDT0RFPmdldE9wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9wZXJhdGlvbl9VbmRlZmluZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T3BlcmF0aW9uX1VuZGVmaW5lZDwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRPcGVyYXRpb25fVW5kZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPjxlbT5VbmRlZmluZWQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT5PcGVyYXRpb24uaXNVbmRlZmluZWQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uKCkiPjxDT0RFPmdldE9wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9wZXJhdGlvbl9FSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T3BlcmF0aW9uX0VJbnB1dDwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRPcGVyYXRpb25fRUlucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVJbnB1dCgpIj48Q09ERT48ZW0+RUlucHV0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5FSW5wdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPk9wZXJhdGlvbi5nZXRFSW5wdXQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0T3BlcmF0aW9uKCkiPjxDT0RFPmdldE9wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9wZXJhdGlvbl9FT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE9wZXJhdGlvbl9FT3V0cHV0PC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldE9wZXJhdGlvbl9FT3V0cHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+PGVtPkVPdXRwdXQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVPdXRwdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RU91dHB1dCgpIj48Q09ERT5PcGVyYXRpb24uZ2V0RU91dHB1dCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb24oKSI+PENPREU+Z2V0T3BlcmF0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0T3BlcmF0aW9uX0VGYXVsdHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T3BlcmF0aW9uX0VGYXVsdHM8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0T3BlcmF0aW9uX0VGYXVsdHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFRmF1bHRzKCkiPjxDT0RFPjxlbT5FRmF1bHRzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVGYXVsdHM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RUZhdWx0cygpIj48Q09ERT5PcGVyYXRpb24uZ2V0RUZhdWx0cygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb24oKSI+PENPREU+Z2V0T3BlcmF0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKSI+PENPREU+PGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKSI+PENPREU+T3BlcmF0aW9uLmdldEVQYXJhbWV0ZXJPcmRlcmluZygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRPcGVyYXRpb24oKSI+PENPREU+Z2V0T3BlcmF0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWVzc2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNZXNzYWdlPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0TWVzc2FnZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+TWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1lc3NhZ2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5NZXNzYWdlPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1lc3NhZ2VfUU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWVzc2FnZV9RTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRNZXNzYWdlX1FOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT5NZXNzYWdlLmdldFFOYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldE1lc3NhZ2UoKSI+PENPREU+Z2V0TWVzc2FnZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1lc3NhZ2VfVW5kZWZpbmVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1lc3NhZ2VfVW5kZWZpbmVkPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldE1lc3NhZ2VfVW5kZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbmRlZmluZWQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPk1lc3NhZ2UuaXNVbmRlZmluZWQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZSgpIj48Q09ERT5nZXRNZXNzYWdlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWVzc2FnZV9FUGFydHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWVzc2FnZV9FUGFydHM8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0TWVzc2FnZV9FUGFydHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwjZ2V0RVBhcnRzKCkiPjxDT0RFPjxlbT5FUGFydHM8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBhcnRzPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCNnZXRFUGFydHMoKSI+PENPREU+TWVzc2FnZS5nZXRFUGFydHMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZSgpIj48Q09ERT5nZXRNZXNzYWdlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UGFydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0UGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBhcnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5QYXJ0PC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBhcnRfTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0X05hbWU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0UGFydF9OYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPlBhcnQuZ2V0TmFtZSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0KCkiPjxDT0RFPmdldFBhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQYXJ0X0VsZW1lbnROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBhcnRfRWxlbWVudE5hbWU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0UGFydF9FbGVtZW50TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudE5hbWUoKSI+PENPREU+PGVtPkVsZW1lbnQgTmFtZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RWxlbWVudCBOYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFbGVtZW50TmFtZSgpIj48Q09ERT5QYXJ0LmdldEVsZW1lbnROYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFBhcnQoKSI+PENPREU+Z2V0UGFydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBhcnRfVHlwZU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UGFydF9UeXBlTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRQYXJ0X1R5cGVOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRUeXBlTmFtZSgpIj48Q09ERT48ZW0+VHlwZSBOYW1lPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlIE5hbWU8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldFR5cGVOYW1lKCkiPjxDT0RFPlBhcnQuZ2V0VHlwZU5hbWUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydCgpIj48Q09ERT5nZXRQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UGFydF9UeXBlRGVmaW5pdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0X1R5cGVEZWZpbml0aW9uPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFBhcnRfVHlwZURlZmluaXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldFR5cGVEZWZpbml0aW9uKCkiPjxDT0RFPjxlbT5UeXBlIERlZmluaXRpb248L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0VHlwZURlZmluaXRpb24oKSI+PENPREU+UGFydC5nZXRUeXBlRGVmaW5pdGlvbigpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRQYXJ0KCkiPjxDT0RFPmdldFBhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbjwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkiPjxDT0RFPjxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFbGVtZW50RGVjbGFyYXRpb24oKSI+PENPREU+UGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydCgpIj48Q09ERT5nZXRQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UGFydF9FTWVzc2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0X0VNZXNzYWdlPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFBhcnRfRU1lc3NhZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU1lc3NhZ2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPlBhcnQuZ2V0RU1lc3NhZ2UoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UGFydCgpIj48Q09ERT5nZXRQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCaW5kaW5nPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0QmluZGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5CaW5kaW5nPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdfUU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ19RTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRCaW5kaW5nX1FOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRRTmFtZSgpIj48Q09ERT5CaW5kaW5nLmdldFFOYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmcoKSI+PENPREU+Z2V0QmluZGluZygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdfVW5kZWZpbmVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdfVW5kZWZpbmVkPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldEJpbmRpbmdfVW5kZWZpbmVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT48ZW0+VW5kZWZpbmVkPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbmRlZmluZWQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2lzVW5kZWZpbmVkKCkiPjxDT0RFPkJpbmRpbmcuaXNVbmRlZmluZWQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZygpIj48Q09ERT5nZXRCaW5kaW5nKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmluZGluZ19FUG9ydFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ19FUG9ydFR5cGU8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0QmluZGluZ19FUG9ydFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVQb3J0VHlwZSgpIj48Q09ERT48ZW0+RVBvcnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVBvcnQgVHlwZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwjZ2V0RVBvcnRUeXBlKCkiPjxDT0RFPkJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmcoKSI+PENPREU+Z2V0QmluZGluZygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVCaW5kaW5nT3BlcmF0aW9ucygpIj48Q09ERT48ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRFQmluZGluZ09wZXJhdGlvbnMoKSI+PENPREU+QmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZygpIj48Q09ERT5nZXRCaW5kaW5nKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmluZGluZ09wZXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCaW5kaW5nT3BlcmF0aW9uPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0QmluZGluZ09wZXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPkJpbmRpbmdPcGVyYXRpb248L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmluZGluZ09wZXJhdGlvbl9OYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdPcGVyYXRpb25fTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRCaW5kaW5nT3BlcmF0aW9uX05hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldE5hbWUoKSI+PENPREU+QmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb24oKSI+PENPREU+Z2V0QmluZGluZ09wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCaW5kaW5nT3BlcmF0aW9uX0VPcGVyYXRpb248L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPjxDT0RFPjxlbT5FT3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FT3BlcmF0aW9uPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPjxDT0RFPkJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3BlcmF0aW9uKCkiPjxDT0RFPmdldEJpbmRpbmdPcGVyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0PC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdJbnB1dCgpIj48Q09ERT48ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ0lucHV0KCkiPjxDT0RFPkJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRCaW5kaW5nT3BlcmF0aW9uKCkiPjxDT0RFPmdldEJpbmRpbmdPcGVyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQ8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdPdXRwdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RUJpbmRpbmcgT3V0cHV0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ091dHB1dCgpIj48Q09ERT5CaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb24oKSI+PENPREU+Z2V0QmluZGluZ09wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0ZhdWx0czwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nRmF1bHRzKCkiPjxDT0RFPjxlbT5FQmluZGluZyBGYXVsdHM8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFQmluZGluZ0ZhdWx0cygpIj48Q09ERT5CaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPcGVyYXRpb24oKSI+PENPREU+Z2V0QmluZGluZ09wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNlcnZpY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2VydmljZTwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldFNlcnZpY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlNlcnZpY2U8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+U2VydmljZTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTZXJ2aWNlX1FOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlcnZpY2VfUU5hbWU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0U2VydmljZV9RTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+PGVtPlFOYW1lPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjZ2V0UU5hbWUoKSI+PENPREU+U2VydmljZS5nZXRRTmFtZSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRTZXJ2aWNlKCkiPjxDT0RFPmdldFNlcnZpY2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTZXJ2aWNlX1VuZGVmaW5lZDwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTZXJ2aWNlX1VuZGVmaW5lZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjaXNVbmRlZmluZWQoKSI+PENPREU+PGVtPlVuZGVmaW5lZDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCNpc1VuZGVmaW5lZCgpIj48Q09ERT5TZXJ2aWNlLmlzVW5kZWZpbmVkKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFNlcnZpY2UoKSI+PENPREU+Z2V0U2VydmljZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNlcnZpY2VfRVBvcnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlcnZpY2VfRVBvcnRzPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFNlcnZpY2VfRVBvcnRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sI2dldEVQb3J0cygpIj48Q09ERT48ZW0+RVBvcnRzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVQb3J0czwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwjZ2V0RVBvcnRzKCkiPjxDT0RFPlNlcnZpY2UuZ2V0RVBvcnRzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldFNlcnZpY2UoKSI+PENPREU+Z2V0U2VydmljZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBvcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UG9ydDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldFBvcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlBvcnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+UG9ydDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQb3J0X05hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UG9ydF9OYW1lPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFBvcnRfTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5Qb3J0LmdldE5hbWUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydCgpIj48Q09ERT5nZXRQb3J0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UG9ydF9FQmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQb3J0X0VCaW5kaW5nPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFBvcnRfRUJpbmRpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPjxDT0RFPjxlbT5FQmluZGluZzwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUJpbmRpbmc8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPjxDT0RFPlBvcnQuZ2V0RUJpbmRpbmcoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0UG9ydCgpIj48Q09ERT5nZXRQb3J0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZDwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+PENPREU+PGVtPlJlcXVpcmVkPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZXF1aXJlZDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+PENPREU+RXh0ZW5zaWJpbGl0eUVsZW1lbnQuaXNSZXF1aXJlZCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48Q09ERT5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+PENPREU+PGVtPkVsZW1lbnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RWxlbWVudCBUeXBlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+PENPREU+RXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+PENPREU+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZpbml0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmluaXRpb248L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXREZWZpbml0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5EZWZpbml0aW9uPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVmaW5pdGlvbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPkRlZmluaXRpb248L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2U8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldFRhcmdldE5hbWVzcGFjZSgpIj48Q09ERT48ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkiPjxDT0RFPkRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+Z2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb25fTG9jYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbjwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXREZWZpbml0aW9uX0xvY2F0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRMb2NhdGlvbigpIj48Q09ERT48ZW0+TG9jYXRpb248L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRMb2NhdGlvbigpIj48Q09ERT5EZWZpbml0aW9uLmdldExvY2F0aW9uKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+Z2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb25fUU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmaW5pdGlvbl9RTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXREZWZpbml0aW9uX1FOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRRTmFtZSgpIj48Q09ERT48ZW0+UU5hbWU8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRRTmFtZSgpIj48Q09ERT5EZWZpbml0aW9uLmdldFFOYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+Z2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb25fRW5jb2RpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmaW5pdGlvbl9FbmNvZGluZzwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXREZWZpbml0aW9uX0VuY29kaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFbmNvZGluZygpIj48Q09ERT48ZW0+RW5jb2Rpbmc8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuY29kaW5nPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFbmNvZGluZygpIj48Q09ERT5EZWZpbml0aW9uLmdldEVuY29kaW5nKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+Z2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb25fRUltcG9ydHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmaW5pdGlvbl9FSW1wb3J0czwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXREZWZpbml0aW9uX0VJbXBvcnRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVJbXBvcnRzKCkiPjxDT0RFPjxlbT5FSW1wb3J0czwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FSW1wb3J0czwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RUltcG9ydHMoKSI+PENPREU+RGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uKCkiPjxDT0RFPmdldERlZmluaXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZpbml0aW9uX0VUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZpbml0aW9uX0VUeXBlczwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXREZWZpbml0aW9uX0VUeXBlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPjxDT0RFPjxlbT5FVHlwZXM8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVUeXBlczwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPjxDT0RFPkRlZmluaXRpb24uZ2V0RVR5cGVzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+Z2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb25fRU1lc3NhZ2VzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmluaXRpb25fRU1lc3NhZ2VzPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldERlZmluaXRpb25fRU1lc3NhZ2VzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVNZXNzYWdlcygpIj48Q09ERT48ZW0+RU1lc3NhZ2VzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVNZXNzYWdlczwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RU1lc3NhZ2VzKCkiPjxDT0RFPkRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldERlZmluaXRpb24oKSI+PENPREU+Z2V0RGVmaW5pdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb25fRVBvcnRUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZpbml0aW9uX0VQb3J0VHlwZXM8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVQb3J0VHlwZXMoKSI+PENPREU+PGVtPkVQb3J0IFR5cGVzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVQb3J0IFR5cGVzPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFUG9ydFR5cGVzKCkiPjxDT0RFPkRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uKCkiPjxDT0RFPmdldERlZmluaXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZpbml0aW9uX0VCaW5kaW5ncygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZpbml0aW9uX0VCaW5kaW5nczwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXREZWZpbml0aW9uX0VCaW5kaW5nczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFQmluZGluZ3MoKSI+PENPREU+PGVtPkVCaW5kaW5nczwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FQmluZGluZ3M8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVCaW5kaW5ncygpIj48Q09ERT5EZWZpbml0aW9uLmdldEVCaW5kaW5ncygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uKCkiPjxDT0RFPmdldERlZmluaXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZpbml0aW9uX0VTZXJ2aWNlczwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXREZWZpbml0aW9uX0VTZXJ2aWNlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFU2VydmljZXMoKSI+PENPREU+PGVtPkVTZXJ2aWNlczwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FU2VydmljZXM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVTZXJ2aWNlcygpIj48Q09ERT5EZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXREZWZpbml0aW9uKCkiPjxDT0RFPmdldERlZmluaXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmluaXRpb25fRU5hbWVzcGFjZXM8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNnZXRFTmFtZXNwYWNlcygpIj48Q09ERT48ZW0+RU5hbWVzcGFjZXM8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RU5hbWVzcGFjZXM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVOYW1lc3BhY2VzKCkiPjxDT0RFPkRlZmluaXRpb24uZ2V0RU5hbWVzcGFjZXMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0RGVmaW5pdGlvbigpIj48Q09ERT5nZXREZWZpbml0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SW1wb3J0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEltcG9ydDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldEltcG9ydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5JbXBvcnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbXBvcnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPkltcG9ydDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEltcG9ydF9OYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0SW1wb3J0X05hbWVzcGFjZVVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPkltcG9ydC5nZXROYW1lc3BhY2VVUkkoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0KCkiPjxDT0RFPmdldEltcG9ydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEltcG9ydF9Mb2NhdGlvblVSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbXBvcnRfTG9jYXRpb25VUkk8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0SW1wb3J0X0xvY2F0aW9uVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT5JbXBvcnQuZ2V0TG9jYXRpb25VUkkoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0KCkiPjxDT0RFPmdldEltcG9ydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEltcG9ydF9FRGVmaW5pdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbXBvcnRfRURlZmluaXRpb248L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0SW1wb3J0X0VEZWZpbml0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVEZWZpbml0aW9uKCkiPjxDT0RFPjxlbT5FRGVmaW5pdGlvbjwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RURlZmluaXRpb248L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0RURlZmluaXRpb24oKSI+PENPREU+SW1wb3J0LmdldEVEZWZpbml0aW9uKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEltcG9ydCgpIj48Q09ERT5nZXRJbXBvcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJbXBvcnRfRVNjaGVtYSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbXBvcnRfRVNjaGVtYTwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRJbXBvcnRfRVNjaGVtYTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRFU2NoZW1hKCkiPjxDT0RFPjxlbT5FU2NoZW1hPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FU2NoZW1hPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI2dldEVTY2hlbWEoKSI+PENPREU+SW1wb3J0LmdldEVTY2hlbWEoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0SW1wb3J0KCkiPjxDT0RFPmdldEltcG9ydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEV4dGVuc2libGVFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEV4dGVuc2libGVFbGVtZW50PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0RXh0ZW5zaWJsZUVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+RXh0ZW5zaWJsZUVsZW1lbnQ8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldEV4dGVuc2libGVFbGVtZW50X0VFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PENPREU+PGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48Q09ERT5FeHRlbnNpYmxlRWxlbWVudC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEV4dGVuc2libGVFbGVtZW50KCkiPjxDT0RFPmdldEV4dGVuc2libGVFbGVtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SW5wdXQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJbnB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPklucHV0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW5wdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+SW5wdXQ8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0T3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE91dHB1dDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldE91dHB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5PdXRwdXQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PdXRwdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPk91dHB1dDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGYXVsdDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldEZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5GYXVsdDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ0lucHV0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0QmluZGluZ0lucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPkJpbmRpbmcgSW5wdXQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5CaW5kaW5nSW5wdXQ8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmluZGluZ0lucHV0X05hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ0lucHV0X05hbWU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0QmluZGluZ0lucHV0X05hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPkJpbmRpbmdJbnB1dC5nZXROYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdJbnB1dCgpIj48Q09ERT5nZXRCaW5kaW5nSW5wdXQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nSW5wdXRfRUlucHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdJbnB1dF9FSW5wdXQ8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0QmluZGluZ0lucHV0X0VJbnB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNnZXRFSW5wdXQoKSI+PENPREU+PGVtPkVJbnB1dDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUlucHV0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sI2dldEVJbnB1dCgpIj48Q09ERT5CaW5kaW5nSW5wdXQuZ2V0RUlucHV0KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdJbnB1dCgpIj48Q09ERT5nZXRCaW5kaW5nSW5wdXQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdPdXRwdXQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRCaW5kaW5nT3V0cHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5CaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+QmluZGluZ091dHB1dDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nT3V0cHV0X05hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ091dHB1dF9OYW1lPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldEJpbmRpbmdPdXRwdXRfTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5CaW5kaW5nT3V0cHV0LmdldE5hbWUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ091dHB1dCgpIj48Q09ERT5nZXRCaW5kaW5nT3V0cHV0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpbmRpbmdPdXRwdXRfRU91dHB1dDwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+PGVtPkVPdXRwdXQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVPdXRwdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+QmluZGluZ091dHB1dC5nZXRFT3V0cHV0KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sI2dldEJpbmRpbmdPdXRwdXQoKSI+PENPREU+Z2V0QmluZGluZ091dHB1dCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdGYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCaW5kaW5nRmF1bHQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRCaW5kaW5nRmF1bHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+QmluZGluZyBGYXVsdDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPkJpbmRpbmdGYXVsdDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaW5kaW5nRmF1bHRfTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCaW5kaW5nRmF1bHRfTmFtZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRCaW5kaW5nRmF1bHRfTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldE5hbWUoKSI+PENPREU+QmluZGluZ0ZhdWx0LmdldE5hbWUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0ZhdWx0KCkiPjxDT0RFPmdldEJpbmRpbmdGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmluZGluZ0ZhdWx0X0VGYXVsdDwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRCaW5kaW5nRmF1bHRfRUZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj48Q09ERT48ZW0+RUZhdWx0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FRmF1bHQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwjZ2V0RUZhdWx0KCkiPjxDT0RFPkJpbmRpbmdGYXVsdC5nZXRFRmF1bHQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0QmluZGluZ0ZhdWx0KCkiPjxDT0RFPmdldEJpbmRpbmdGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE5hbWVzcGFjZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2U8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXROYW1lc3BhY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+TmFtZXNwYWNlPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZXNwYWNlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5OYW1lc3BhY2U8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TmFtZXNwYWNlX1VSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2VfVVJJPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldE5hbWVzcGFjZV9VUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0VVJJKCkiPjxDT0RFPjxlbT5VUkk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVSSTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCNnZXRVUkkoKSI+PENPREU+TmFtZXNwYWNlLmdldFVSSSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXROYW1lc3BhY2UoKSI+PENPREU+Z2V0TmFtZXNwYWNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TmFtZXNwYWNlX1ByZWZpeCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2VfUHJlZml4PC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldE5hbWVzcGFjZV9QcmVmaXg8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwjZ2V0UHJlZml4KCkiPjxDT0RFPjxlbT5QcmVmaXg8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlByZWZpeDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCNnZXRQcmVmaXgoKSI+PENPREU+TmFtZXNwYWNlLmdldFByZWZpeCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXROYW1lc3BhY2UoKSI+PENPREU+Z2V0TmFtZXNwYWNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SVBvcnRUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElQb3J0VHlwZTwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElQb3J0VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklQb3J0IFR5cGU8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQb3J0IFR5cGU8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+UG9ydFR5cGU8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJT3BlcmF0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElPcGVyYXRpb248L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJT3BlcmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU9wZXJhdGlvbjwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU9wZXJhdGlvbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5PcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SUlucHV0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SUlucHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUlucHV0PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSW5wdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SW5wdXQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJT3V0cHV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElPdXRwdXQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJT3V0cHV0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU91dHB1dDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU91dHB1dDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5PdXRwdXQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SUZhdWx0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SUZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUZhdWx0PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRmF1bHQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RmF1bHQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJTWVzc2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJTWVzc2FnZTwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElNZXNzYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1lc3NhZ2U8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklNZXNzYWdlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1lc3NhZ2U8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJUGFydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJUGFydDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElQYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVBhcnQ8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQYXJ0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlBhcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJU2VydmljZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJU2VydmljZTwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElTZXJ2aWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNlcnZpY2U8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTZXJ2aWNlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNlcnZpY2U8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJUG9ydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJUG9ydDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElQb3J0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVBvcnQ8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQb3J0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlBvcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJQmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJQmluZGluZzwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElCaW5kaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmc8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklCaW5kaW5nPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmc8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJQmluZGluZ09wZXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJQmluZGluZ09wZXJhdGlvbjwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElCaW5kaW5nT3BlcmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ09wZXJhdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElCaW5kaW5nSW5wdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SUJpbmRpbmdJbnB1dDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElCaW5kaW5nSW5wdXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JQmluZGluZyBJbnB1dDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+QmluZGluZ0lucHV0PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SUJpbmRpbmdPdXRwdXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SUJpbmRpbmdPdXRwdXQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJQmluZGluZ091dHB1dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklCaW5kaW5nIE91dHB1dDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdPdXRwdXQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJQmluZGluZ0ZhdWx0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElCaW5kaW5nRmF1bHQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJQmluZGluZ0ZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkJpbmRpbmdGYXVsdDwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkV4dGVuc2liaWxpdHlFbGVtZW50PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SURlZmluaXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SURlZmluaXRpb248L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJRGVmaW5pdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklEZWZpbml0aW9uPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRGVmaW5pdGlvbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5EZWZpbml0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SUltcG9ydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJSW1wb3J0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SUltcG9ydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklJbXBvcnQ8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklJbXBvcnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SW1wb3J0PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SUxpc3QoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SUxpc3Q8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJTGlzdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklMaXN0PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTGlzdDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5MaXN0PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SU1hcCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJTWFwPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SU1hcDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNYXA8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklNYXA8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TWFwPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SVVSTCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJVVJMPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SVVSTDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklVUkw8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklVUkw8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+VVJMPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElFeHRlbnNpb25SZWdpc3RyeTwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElFeHRlbnNpb25SZWdpc3RyeTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RXh0ZW5zaW9uUmVnaXN0cnk8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUeXBlczwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldFR5cGVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT48ZW0+VHlwZXM8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UeXBlczwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5UeXBlczwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJSXRlcmF0b3IoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SUl0ZXJhdG9yPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SUl0ZXJhdG9yPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUl0ZXJhdG9yPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSXRlcmF0b3I8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SXRlcmF0b3I8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJVHlwZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SVR5cGVzPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SVR5cGVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVR5cGVzPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JVHlwZXM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+VHlwZXM8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+PGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50X0NoaWxkcmVuPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldENoaWxkcmVuKCkiPjxDT0RFPjxlbT5DaGlsZHJlbjwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5DaGlsZHJlbjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRDaGlsZHJlbigpIj48Q09ERT5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0Q2hpbGRyZW4oKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjxDT0RFPmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X1NjaGVtYSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWE8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0U2NoZW1hKCkiPjxDT0RFPjxlbT5TY2hlbWE8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlNjaGVtYTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldFNjaGVtYSgpIj48Q09ERT5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5nZXRTY2hlbWEoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+PENPREU+Z2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNZXNzYWdlUmVmZXJlbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1lc3NhZ2VSZWZlcmVuY2U8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRNZXNzYWdlUmVmZXJlbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxDT0RFPjxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+TWVzc2FnZVJlZmVyZW5jZTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldE1lc3NhZ2VSZWZlcmVuY2VfTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT48ZW0+TmFtZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjZ2V0TmFtZSgpIj48Q09ERT5NZXNzYWdlUmVmZXJlbmNlLmdldE5hbWUoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIj48Q09ERT5nZXRNZXNzYWdlUmVmZXJlbmNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWVzc2FnZVJlZmVyZW5jZV9FTWVzc2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU1lc3NhZ2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPk1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIj48Q09ERT5nZXRNZXNzYWdlUmVmZXJlbmNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UU5hbWU8L0gzPgotPFBSRT4KLUVEYXRhVHlwZSA8Qj5nZXRRTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5RTmFtZTwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPlFOYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlFOYW1lPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0T3BlcmF0aW9uVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPcGVyYXRpb25UeXBlPC9IMz4KLTxQUkU+Ci1FRGF0YVR5cGUgPEI+Z2V0T3BlcmF0aW9uVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5PcGVyYXRpb24gVHlwZTwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk9wZXJhdGlvblR5cGU8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRET01FbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERPTUVsZW1lbnQ8L0gzPgotPFBSRT4KLUVEYXRhVHlwZSA8Qj5nZXRET01FbGVtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPkRPTSBFbGVtZW50PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+RWxlbWVudDwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFdTRExFeGNlcHRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0V1NETEV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotRURhdGFUeXBlIDxCPmdldFdTRExFeGNlcHRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8Q09ERT48ZW0+RXhjZXB0aW9uPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RXhjZXB0aW9uPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPldTRExFeGNlcHRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRET01Eb2N1bWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRET01Eb2N1bWVudDwvSDM+Ci08UFJFPgotRURhdGFUeXBlIDxCPmdldERPTURvY3VtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPkRPTSBEb2N1bWVudDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5Eb2N1bWVudDwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFdTRExGYWN0b3J5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFdTRExGYWN0b3J5PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT4gPEI+Z2V0V1NETEZhY3Rvcnk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETFBhY2thZ2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTAxYjg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1XU0RMUGx1Z2luCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbiBjbGFzcyI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iV1NETFBsdWdpbiI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExQbHVnaW4uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGx1Z2luLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUNsYXNzIFdTRExQbHVnaW48L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPkVNRlBsdWdpbgotICAgICAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW48L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBmaW5hbCBjbGFzcyA8Qj5XU0RMUGx1Z2luPC9CPjxEVD5leHRlbmRzIEVNRlBsdWdpbjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGUgPGI+UGx1Z2luPC9iPiBmb3IgdGhlIG1vZGVsLgotIFRoZSBXU0RMIG1vZGVsIG5lZWRzIHRvIGJlIGFibGUgdG8gcnVuIHdpdGhpbiBhbiBFY2xpcHNlIHdvcmtiZW5jaCwKLSB3aXRoaW4gYSBoZWFkbGVzcyBFY2xpcHNlIHdvcmtzcGFjZSwgb3IganVzdCBzdGFuZC1hbG9uZSBhcyBwYXJ0IAotIG9mIHNvbWUgb3RoZXIgYXBwbGljYXRpb24uCi0gVG8gc3VwcG9ydCB0aGlzLCBhbGwgYWNjZXNzIGlzIGRpcmVjdGVkIHRvIHRoZSBzdGF0aWMgbWV0aG9kcywKLSB3aGljaCBjYW4gcmVkaXJlY3QgdGhlIHNlcnZpY2UgYXMgYXBwb3ByaWF0ZSB0byB0aGUgcnVudGltZS4KLSBEdXJpbmcgc3RhbmQtYWxvbmUgaW52b2NhdGlvbiBubyBwbHVnaW4gaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UuCi0gSW4gdGhpcyBjYXNlIHlvdSB3aWxsIG5lZWQgdGhlIHJlc291cmNlcyBqYXIgb24gdGhlIGNsYXNzIHBhdGguCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+PHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gPC9wPjwvQ09ERT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBsdWdpbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI0lOU1RBTkNFIj5JTlNUQU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwbHVnaW4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2NyZWF0ZVdTREw0SkZhY3RvcnkoKSI+Y3JlYXRlV1NETDRKRmFjdG9yeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWVzcGFjZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpIj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCNnZXRQbHVnaW4oKSI+Z2V0UGx1Z2luPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7UmVzb3VyY2VMb2NhdG9yPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCNnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSI+Z2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJJTlNUQU5DRSI+PCEtLSAtLT48L0E+PEgzPgotSU5TVEFOQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW48L0E+IDxCPklOU1RBTkNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbi4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBsdWdpblJlc291cmNlTG9jYXRvcjwvSDM+Ci08UFJFPgotcHVibGljIFJlc291cmNlTG9jYXRvciA8Qj5nZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBsdWdpbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQbHVnaW48L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9BPiA8Qj5nZXRQbHVnaW48L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBzaW5nbGV0b24gaW5zdGFuY2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9BPiA8Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lc3BhY2UpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTwvQT4gPEI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVdTREw0SkZhY3RvcnkoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlV1NETDRKRmFjdG9yeTwvSDM+Ci08UFJFPgotcHVibGljIGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeSA8Qj5jcmVhdGVXU0RMNEpGYWN0b3J5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExQbHVnaW4uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGx1Z2luLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYmEyMjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotV1NETFBsdWdpbkltcGxlbWVudGF0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbkltcGxlbWVudGF0aW9uIGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJXU0RMUGx1Z2luSW1wbGVtZW50YXRpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGw8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBXU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPkVjbGlwc2VQbHVnaW4KLSAgICAgIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0I+PERUPmV4dGVuZHMgRWNsaXBzZVBsdWdpbjwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCi0gPHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sI1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbigpIj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGluc3RhbmNlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy5PYmplY3Q8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5lcXVhbHMsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGluc3RhbmNlLgotPFA+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWM5YTE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2luY2U6PC9CPjwvRFQ+Ci0gIDxERD4xLjA8L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj48Q09ERT5XU0RMUGFja2FnZS5nZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7b3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldFNjaGVtYSgpIj5nZXRTY2hlbWE8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TY2hlbWE8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0U2NoZW1hKG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEpIj5zZXRTY2hlbWE8L0E+PC9CPihvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0U2NoZW1hKCkiPjxDT0RFPjxlbT5TY2hlbWE8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj5nZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjaXNSZXF1aXJlZCgpIj5pc1JlcXVpcmVkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldFJlcXVpcmVkKGJvb2xlYW4pIj5zZXRSZXF1aXJlZDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFNjaGVtYSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTY2hlbWE8L0gzPgotPFBSRT4KLW9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEgPEI+Z2V0U2NoZW1hPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TY2hlbWE8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNjaGVtYTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRTY2hlbWEob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSkiPjxDT0RFPnNldFNjaGVtYShYU0RTY2hlbWEpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKSI+PENPREU+V1NETFBhY2thZ2UuZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U2NoZW1hKG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTY2hlbWE8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0U2NoZW1hPC9CPihvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldFNjaGVtYSgpIj48Q09ERT48ZW0+U2NoZW1hPC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NoZW1hPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldFNjaGVtYSgpIj48Q09ERT5nZXRTY2hlbWEoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI0MGVkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUhUVFBBZGRyZXNzCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSFRUUEFkZHJlc3MiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQQWRkcmVzcy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUEFkZHJlc3MuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBIVFRQQWRkcmVzczwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkhUVFBBZGRyZXNzPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+Jy4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQotIDxwPgotIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSA8dWw+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT48L2xpPgotIDwvdWw+Ci0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SFRUUEFkZHJlc3MoKSI+PENPREU+SFRUUFBhY2thZ2UuZ2V0SFRUUEFkZHJlc3MoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+Z2V0TG9jYXRpb25VUkk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sI3NldExvY2F0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXRMb2NhdGlvblVSSTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TG9jYXRpb25VUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TG9jYXRpb25VUkk8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TG9jYXRpb25VUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRMb2NhdGlvblVSSTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCNzZXRMb2NhdGlvblVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TG9jYXRpb25VUkkoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBBZGRyZXNzX0xvY2F0aW9uVVJJKCkiPjxDT0RFPkhUVFBQYWNrYWdlLmdldEhUVFBBZGRyZXNzX0xvY2F0aW9uVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TG9jYXRpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExvY2F0aW9uVVJJPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldExvY2F0aW9uVVJJPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0TG9jYXRpb25VUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzczwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT5nZXRMb2NhdGlvblVSSSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSFRUUEFkZHJlc3MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZjc5NmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotSFRUUEJpbmRpbmcKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJIVFRQQmluZGluZyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0hUVFBCaW5kaW5nLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUEJpbmRpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBIVFRQQmluZGluZzwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkhUVFBCaW5kaW5nPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmc8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQotIDxwPgotIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSA8dWw+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT48ZW0+VmVyYjwvZW0+PC9DT0RFPjwvQT48L2xpPgotIDwvdWw+Ci0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SFRUUEJpbmRpbmcoKSI+PENPREU+SFRUUFBhY2thZ2UuZ2V0SFRUUEJpbmRpbmcoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj5nZXRWZXJiPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVyYjwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjc2V0VmVyYihqYXZhLmxhbmcuU3RyaW5nKSI+c2V0VmVyYjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT48ZW0+VmVyYjwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0VmVyYigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRWZXJiPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldFZlcmI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZXJiPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZXJiPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFZlcmI8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZzwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlcmI8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sI3NldFZlcmIoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldFZlcmIoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBCaW5kaW5nX1ZlcmIoKSI+PENPREU+SFRUUFBhY2thZ2UuZ2V0SFRUUEJpbmRpbmdfVmVyYigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFZlcmIoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFZlcmI8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0VmVyYjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT48ZW0+VmVyYjwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldFZlcmI8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZzwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVyYjwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT5nZXRWZXJiKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQQmluZGluZy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhN2FmYWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotSFRUUEZhY3RvcnkKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3RvcnkgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJIVFRQRmFjdG9yeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0hUVFBGYWN0b3J5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIEhUVFBGYWN0b3J5PC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+SFRUUEZhY3Rvcnk8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPkhUVFBQYWNrYWdlPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNlSU5TVEFOQ0UiPmVJTlNUQU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNjcmVhdGVIVFRQQWRkcmVzcygpIj5jcmVhdGVIVFRQQWRkcmVzczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNjcmVhdGVIVFRQQmluZGluZygpIj5jcmVhdGVIVFRQQmluZGluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwjY3JlYXRlSFRUUE9wZXJhdGlvbigpIj5jcmVhdGVIVFRQT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQVXJsRW5jb2RlZDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwjY3JlYXRlSFRUUFVybEVuY29kZWQoKSI+Y3JlYXRlSFRUUFVybEVuY29kZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVybCBFbmNvZGVkPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxSZXBsYWNlbWVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwjY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50KCkiPmNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2dldEhUVFBQYWNrYWdlKCkiPmdldEhUVFBQYWNrYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZUlOU1RBTkNFIj48IS0tIC0tPjwvQT48SDM+Ci1lSU5TVEFOQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPiA8Qj5lSU5TVEFOQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJjcmVhdGVIVFRQQmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVIVFRQQmluZGluZzwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQmluZGluZzwvQT4gPEI+Y3JlYXRlSFRUUEJpbmRpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlSFRUUE9wZXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVIVFRQT3BlcmF0aW9uPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT4gPEI+Y3JlYXRlSFRUUE9wZXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudDwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFVybFJlcGxhY2VtZW50PC9BPiA8Qj5jcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZUhUVFBVcmxFbmNvZGVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUhUVFBVcmxFbmNvZGVkPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPiA8Qj5jcmVhdGVIVFRQVXJsRW5jb2RlZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZUhUVFBBZGRyZXNzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUhUVFBBZGRyZXNzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPiA8Qj5jcmVhdGVIVFRQQWRkcmVzczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRIVFRQUGFja2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRIVFRQUGFja2FnZTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT4gPEI+Z2V0SFRUUFBhY2thZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQRmFjdG9yeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMThlZWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1IVFRQT3BlcmF0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24gaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJIVFRQT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSFRUUE9wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIEhUVFBPcGVyYXRpb248L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkhUVFBPcGVyYXRpb248L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uPC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQotIDxwPgotIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSA8dWw+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gPC91bD4KLSA8L3A+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQT3BlcmF0aW9uKCkiPjxDT0RFPkhUVFBQYWNrYWdlLmdldEhUVFBPcGVyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCNnZXRMb2NhdGlvblVSSSgpIj5nZXRMb2NhdGlvblVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCNzZXRMb2NhdGlvblVSSShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TG9jYXRpb25VUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TG9jYXRpb25VUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TG9jYXRpb25VUkk8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TG9jYXRpb25VUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRMb2NhdGlvblVSSTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjc2V0TG9jYXRpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldExvY2F0aW9uVVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCkiPjxDT0RFPkhUVFBQYWNrYWdlLmdldEhUVFBPcGVyYXRpb25fTG9jYXRpb25VUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMb2NhdGlvblVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9jYXRpb25VUkk8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TG9jYXRpb25VUkk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldExvY2F0aW9uVVJJPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPmdldExvY2F0aW9uVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQT3BlcmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0N2UwYzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OTUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotSFRUUFBhY2thZ2UuTGl0ZXJhbHMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuTGl0ZXJhbHMgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJIVFRQUGFja2FnZS5MaXRlcmFscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0gyPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBpbnRlcmZhY2U6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIHN0YXRpYyBpbnRlcmZhY2UgPEI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIDx1bD4KLSAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotIDwvdWw+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX0FERFJFU1MiPkhUVFBfQUREUkVTUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+SFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0hUVFBfQklORElORyI+SFRUUF9CSU5ESU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0hUVFBfQklORElOR19fVkVSQiI+SFRUUF9CSU5ESU5HX19WRVJCPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZXJiPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSFRUUF9PUEVSQVRJT04iPkhUVFBfT1BFUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSI+SFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSFRUUF9VUkxfRU5DT0RFRCI+SFRUUF9VUkxfRU5DT0RFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+VXJsIEVuY29kZWQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVCI+SFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlVybCBSZXBsYWNlbWVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0lIVFRQX0FERFJFU1MiPklIVFRQX0FERFJFU1M8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJSFRUUF9CSU5ESU5HIj5JSFRUUF9CSU5ESU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBCaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSUhUVFBfT1BFUkFUSU9OIj5JSFRUUF9PUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sI0lIVFRQX1VSTF9FTkNPREVEIj5JSFRUUF9VUkxfRU5DT0RFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJSFRUUF9VUkxfUkVQTEFDRU1FTlQiPklIVFRQX1VSTF9SRVBMQUNFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IkhUVFBfQklORElORyI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9CSU5ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPkhUVFBfQklORElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUEJpbmRpbmdJbXBsPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SFRUUEJpbmRpbmcoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9CSU5ESU5HX19WRVJCIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX0JJTkRJTkdfX1ZFUkI8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPkhUVFBfQklORElOR19fVkVSQjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVyYjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX09QRVJBVElPTjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5IVFRQX09QRVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5IVFRQT3BlcmF0aW9uSW1wbDwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldEhUVFBPcGVyYXRpb24oKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+SFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9VUkxfUkVQTEFDRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfVVJMX1JFUExBQ0VNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPkhUVFBfVVJMX1JFUExBQ0VNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBVcmxSZXBsYWNlbWVudEltcGw8L0NPREU+LCAKLTxDT0RFPkhUVFBQYWNrYWdlSW1wbC5nZXRIVFRQVXJsUmVwbGFjZW1lbnQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9VUkxfRU5DT0RFRCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfRU5DT0RFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5IVFRQX1VSTF9FTkNPREVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5VcmwgRW5jb2RlZDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUFVybEVuY29kZWRJbXBsPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SFRUUFVybEVuY29kZWQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9BRERSRVNTIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX0FERFJFU1M8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SFRUUF9BRERSRVNTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5BZGRyZXNzPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5IVFRQQWRkcmVzc0ltcGw8L0NPREU+LCAKLTxDT0RFPkhUVFBQYWNrYWdlSW1wbC5nZXRIVFRQQWRkcmVzcygpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJSFRUUF9BRERSRVNTIj48IS0tIC0tPjwvQT48SDM+Ci1JSFRUUF9BRERSRVNTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklIVFRQX0FERFJFU1M8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBBZGRyZXNzPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SUhUVFBBZGRyZXNzKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX0JJTkRJTkciPjwhLS0gLS0+PC9BPjxIMz4KLUlIVFRQX0JJTkRJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUhUVFBfQklORElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgQmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUEJpbmRpbmc8L0NPREU+LCAKLTxDT0RFPkhUVFBQYWNrYWdlSW1wbC5nZXRJSFRUUEJpbmRpbmcoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUhUVFBfT1BFUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1JSFRUUF9PUEVSQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUhUVFBfT1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBPcGVyYXRpb248L0NPREU+LCAKLTxDT0RFPkhUVFBQYWNrYWdlSW1wbC5nZXRJSFRUUE9wZXJhdGlvbigpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJSFRUUF9VUkxfRU5DT0RFRCI+PCEtLSAtLT48L0E+PEgzPgotSUhUVFBfVVJMX0VOQ09ERUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SUhUVFBfVVJMX0VOQ09ERUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5IVFRQVXJsRW5jb2RlZDwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldElIVFRQVXJsRW5jb2RlZCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJSFRUUF9VUkxfUkVQTEFDRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlIVFRQX1VSTF9SRVBMQUNFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JSFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUFVybFJlcGxhY2VtZW50PC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZTcxYmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjM1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUhUVFBQYWNrYWdlCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSFRUUFBhY2thZ2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQUGFja2FnZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBIVFRQUGFja2FnZTwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkhUVFBQYWNrYWdlPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSA8dWw+Ci0gICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSA8L3VsPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT5IVFRQRmFjdG9yeTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIAotICAgZWFjaCBjbGFzcywKLSAgIGVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLAotICAgZWFjaCBlbnVtLAotICAgYW5kIGVhY2ggZGF0YSB0eXBlCi0gCi0gPCE8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2VOQU1FIj5lTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcGFja2FnZSBuYW1lPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZU5TX1BSRUZJWCI+ZU5TX1BSRUZJWDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2VOU19VUkkiPmVOU19VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTIj5IVFRQX0FERFJFU1M8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5BZGRyZXNzPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkhUVFBfQUREUkVTU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19FTEVNRU5UIj5IVFRQX0FERFJFU1NfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19FTEVNRU5UX1RZUEUiPkhUVFBfQUREUkVTU19fRUxFTUVOVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkkiPkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX19SRVFVSVJFRCI+SFRUUF9BRERSRVNTX19SRVFVSVJFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPkhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZGRyZXNzPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkciPkhUVFBfQklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+SFRUUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX0VMRU1FTlQiPkhUVFBfQklORElOR19fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRSI+SFRUUF9CSU5ESU5HX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX1JFUVVJUkVEIj5IVFRQX0JJTkRJTkdfX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfX1ZFUkIiPkhUVFBfQklORElOR19fVkVSQjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVyYjwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+SFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmc8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OIj5IVFRQX09QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX09QRVJBVElPTl9fRUxFTUVOVCI+SFRUUF9PUEVSQVRJT05fX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSI+SFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkkiPkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX09QRVJBVElPTl9fUkVRVUlSRUQiPkhUVFBfT1BFUkFUSU9OX19SRVFVSVJFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+SFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEIj5IVFRQX1VSTF9FTkNPREVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+VXJsIEVuY29kZWQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkhUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlQiPkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVF9UWVBFIj5IVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9FTkNPREVEX19SRVFVSVJFRCI+SFRUUF9VUkxfRU5DT0RFRF9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVCI+SFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VcmwgRW5jb2RlZDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlQiPkhUVFBfVVJMX1JFUExBQ0VNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UIj5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNIVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVF9UWVBFIj5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSFRUUF9VUkxfUkVQTEFDRU1FTlRfX1JFUVVJUkVEIj5IVFRQX1VSTF9SRVBMQUNFTUVOVF9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI0hUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQiPkhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfQUREUkVTUyI+SUhUVFBfQUREUkVTUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPklIVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfQklORElORyI+SUhUVFBfQklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPklIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQmluZGluZzwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfT1BFUkFUSU9OIj5JSFRUUF9PUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+SUhUVFBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfVVJMX0VOQ09ERUQiPklIVFRQX1VSTF9FTkNPREVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UIj5JSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjSUhUVFBfVVJMX1JFUExBQ0VNRU5UIj5JSFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNJSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCI+SUhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpIj5nZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBBZGRyZXNzKCkiPmdldEhUVFBBZGRyZXNzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5BZGRyZXNzPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQmluZGluZ19WZXJiKCkiPmdldEhUVFBCaW5kaW5nX1ZlcmI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT48ZW0+VmVyYjwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQmluZGluZygpIj5nZXRIVFRQQmluZGluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBGYWN0b3J5KCkiPmdldEhUVFBGYWN0b3J5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWw8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCkiPmdldEhUVFBPcGVyYXRpb25fTG9jYXRpb25VUkk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT48ZW0+TG9jYXRpb24gVVJJPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBPcGVyYXRpb24oKSI+Z2V0SFRUUE9wZXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SFRUUFVybEVuY29kZWQoKSI+Z2V0SFRUUFVybEVuY29kZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PENPREU+PGVtPlVybCBFbmNvZGVkPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldEhUVFBVcmxSZXBsYWNlbWVudCgpIj5nZXRIVFRQVXJsUmVwbGFjZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SUhUVFBBZGRyZXNzKCkiPmdldElIVFRQQWRkcmVzczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRJSFRUUEJpbmRpbmcoKSI+Z2V0SUhUVFBCaW5kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgQmluZGluZzwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sI2dldElIVFRQT3BlcmF0aW9uKCkiPmdldElIVFRQT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SUhUVFBVcmxFbmNvZGVkKCkiPmdldElIVFRQVXJsRW5jb2RlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpIj5nZXRJSFRUUFVybFJlcGxhY2VtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImVOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1lTkFNRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+ZU5BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuZU5BTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZU5TX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotZU5TX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+ZU5TX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5lTlNfVVJJIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVOU19QUkVGSVgiPjwhLS0gLS0+PC9BPjxIMz4KLWVOU19QUkVGSVg8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPmVOU19QUkVGSVg8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLmVOU19QUkVGSVgiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZUlOU1RBTkNFIj48IS0tIC0tPjwvQT48SDM+Ci1lSU5TVEFOQ0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPiA8Qj5lSU5TVEFOQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9CSU5ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX0JJTkRJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9CSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUEJpbmRpbmdJbXBsPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SFRUUEJpbmRpbmcoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfQklORElORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0JJTkRJTkdfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfQklORElOR19fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX0JJTkRJTkdfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfQklORElOR19fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfQklORElOR19fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9CSU5ESU5HX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19SRVFVSVJFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9CSU5ESU5HX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9CSU5ESU5HX19FTEVNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0JJTkRJTkdfX1ZFUkIiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfQklORElOR19fVkVSQjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX0JJTkRJTkdfX1ZFUkI8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZzwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9PUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfT1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5IVFRQT3BlcmF0aW9uSW1wbDwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldEhUVFBPcGVyYXRpb24oKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9PUEVSQVRJT05fX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfT1BFUkFUSU9OX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfT1BFUkFUSU9OX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfT1BFUkFUSU9OX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9PUEVSQVRJT05fX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfT1BFUkFUSU9OX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX1VSTF9SRVBMQUNFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBVcmxSZXBsYWNlbWVudEltcGw8L0NPREU+LCAKLTxDT0RFPkhUVFBQYWNrYWdlSW1wbC5nZXRIVFRQVXJsUmVwbGFjZW1lbnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfVVJMX1JFUExBQ0VNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfVVJMX1JFUExBQ0VNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfVVJMX1JFUExBQ0VNRU5UX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfUkVQTEFDRU1FTlRfX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfVVJMX1JFUExBQ0VNRU5UX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9VUkxfUkVQTEFDRU1FTlRfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX1VSTF9SRVBMQUNFTUVOVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9VUkxfRU5DT0RFRCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfRU5DT0RFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX1VSTF9FTkNPREVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+VXJsIEVuY29kZWQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBVcmxFbmNvZGVkSW1wbDwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldEhUVFBVcmxFbmNvZGVkKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfRU5DT0RFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX0VOQ09ERURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX1VSTF9FTkNPREVEX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX1VSTF9FTkNPREVEX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfRU5DT0RFRF9fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9VUkxfRU5DT0RFRF9fUkVRVUlSRUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX0VOQ09ERURfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfVVJMX0VOQ09ERURfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVybCBFbmNvZGVkPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSFRUUF9BRERSRVNTIj48IS0tIC0tPjwvQT48SDM+Ci1IVFRQX0FERFJFU1M8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9BRERSRVNTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUEFkZHJlc3NJbXBsPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SFRUUEFkZHJlc3MoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfQUREUkVTUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0FERFJFU1NfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfQUREUkVTU19fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5IVFRQX0FERFJFU1NfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkhUVFBfQUREUkVTU19fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLUhUVFBfQUREUkVTU19fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9BRERSRVNTX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTX19SRVFVSVJFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9BRERSRVNTX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9BRERSRVNTX19FTEVNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFkZHJlc3M8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX0FERFJFU1MiPjwhLS0gLS0+PC9BPjxIMz4KLUlIVFRQX0FERFJFU1M8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUhUVFBfQUREUkVTUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBBZGRyZXNzPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SUhUVFBBZGRyZXNzKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9BRERSRVNTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSUhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklIVFRQX0FERFJFU1NfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSUhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX0JJTkRJTkciPjwhLS0gLS0+PC9BPjxIMz4KLUlIVFRQX0JJTkRJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUhUVFBfQklORElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBCaW5kaW5nPC9DT0RFPiwgCi08Q09ERT5IVFRQUGFja2FnZUltcGwuZ2V0SUhUVFBCaW5kaW5nKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9CSU5ESU5HIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSUhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklIVFRQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQmluZGluZzwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSUhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSUhUVFBfT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklIVFRQX09QRVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUE9wZXJhdGlvbjwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldElIVFRQT3BlcmF0aW9uKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5JSFRUUF9PUEVSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUhUVFBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlIVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklIVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLklIVFRQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklIVFRQX1VSTF9FTkNPREVEIj48IS0tIC0tPjwvQT48SDM+Ci1JSFRUUF9VUkxfRU5DT0RFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JSFRUUF9VUkxfRU5DT0RFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5IVFRQVXJsRW5jb2RlZDwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldElIVFRQVXJsRW5jb2RlZCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSUhUVFBfVVJMX0VOQ09ERUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JSFRUUF9VUkxfRU5DT0RFRF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSUhUVFBfVVJMX0VOQ09ERURfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJSFRUUF9VUkxfUkVQTEFDRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlIVFRQX1VSTF9SRVBMQUNFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JSFRUUF9VUkxfUkVQTEFDRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBVcmxSZXBsYWNlbWVudDwvQ09ERT4sIAotPENPREU+SFRUUFBhY2thZ2VJbXBsLmdldElIVFRQVXJsUmVwbGFjZW1lbnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlLklIVFRQX1VSTF9SRVBMQUNFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSUhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SUhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuSUhUVFBfVVJMX1JFUExBQ0VNRU5UX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRIVFRQQmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRIVFRQQmluZGluZzwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldEhUVFBCaW5kaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPkhUVFBCaW5kaW5nPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEhUVFBCaW5kaW5nX1ZlcmIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SFRUUEJpbmRpbmdfVmVyYjwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRIVFRQQmluZGluZ19WZXJiPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sI2dldFZlcmIoKSI+PENPREU+PGVtPlZlcmI8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlcmI8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwjZ2V0VmVyYigpIj48Q09ERT5IVFRQQmluZGluZy5nZXRWZXJiKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQmluZGluZygpIj48Q09ERT5nZXRIVFRQQmluZGluZygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEhUVFBPcGVyYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SFRUUE9wZXJhdGlvbjwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldEhUVFBPcGVyYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT5IVFRQT3BlcmF0aW9uPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEhUVFBPcGVyYXRpb25fTG9jYXRpb25VUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+SFRUUE9wZXJhdGlvbi5nZXRMb2NhdGlvblVSSSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwjZ2V0SFRUUE9wZXJhdGlvbigpIj48Q09ERT5nZXRIVFRQT3BlcmF0aW9uKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SFRUUFVybFJlcGxhY2VtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEhUVFBVcmxSZXBsYWNlbWVudDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldEhUVFBVcmxSZXBsYWNlbWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PENPREU+PGVtPlVybCBSZXBsYWNlbWVudDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT5IVFRQVXJsUmVwbGFjZW1lbnQ8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SFRUUFVybEVuY29kZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SFRUUFVybEVuY29kZWQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRIVFRQVXJsRW5jb2RlZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Q09ERT48ZW0+VXJsIEVuY29kZWQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxDT0RFPkhUVFBVcmxFbmNvZGVkPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEhUVFBBZGRyZXNzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEhUVFBBZGRyZXNzPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SFRUUEFkZHJlc3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PENPREU+PGVtPkFkZHJlc3M8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PENPREU+SFRUUEFkZHJlc3M8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkk8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPkhUVFBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQQWRkcmVzcygpIj48Q09ERT5nZXRIVFRQQWRkcmVzcygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElIVFRQQWRkcmVzcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJSFRUUEFkZHJlc3M8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJSFRUUEFkZHJlc3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JSFRUUCBBZGRyZXNzPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBBZGRyZXNzPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkhUVFBBZGRyZXNzPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SUhUVFBCaW5kaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElIVFRQQmluZGluZzwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElIVFRQQmluZGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklIVFRQIEJpbmRpbmc8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUEJpbmRpbmc8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJSFRUUE9wZXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJSFRUUE9wZXJhdGlvbjwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElIVFRQT3BlcmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUE9wZXJhdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElIVFRQVXJsRW5jb2RlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJSFRUUFVybEVuY29kZWQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJSFRUUFVybEVuY29kZWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUFVybEVuY29kZWQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJSFRUUFVybFJlcGxhY2VtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElIVFRQVXJsUmVwbGFjZW1lbnQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJSFRUUFVybFJlcGxhY2VtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+SFRUUFVybFJlcGxhY2VtZW50PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SFRUUEZhY3RvcnkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SFRUUEZhY3Rvcnk8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+IDxCPmdldEhUVFBGYWN0b3J5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0hUVFBQYWNrYWdlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjA5M2U0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUhUVFBVcmxFbmNvZGVkCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSFRUUFVybEVuY29kZWQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQVXJsRW5jb2RlZC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQVXJsRW5jb2RlZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBIVFRQVXJsRW5jb2RlZDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkhUVFBVcmxFbmNvZGVkPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VcmwgRW5jb2RlZDwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQVXJsRW5jb2RlZCgpIj48Q09ERT5IVFRQUGFja2FnZS5nZXRIVFRQVXJsRW5jb2RlZCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj5nZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjaXNSZXF1aXJlZCgpIj5pc1JlcXVpcmVkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldFJlcXVpcmVkKGJvb2xlYW4pIj5zZXRSZXF1aXJlZDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0hUVFBVcmxFbmNvZGVkLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBVcmxFbmNvZGVkLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMGQ2NmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUhUVFBVcmxSZXBsYWNlbWVudAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJIVFRQVXJsUmVwbGFjZW1lbnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgSFRUUFVybFJlcGxhY2VtZW50PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkhUVFBVcmxSZXBsYWNlbWVudDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKSI+PENPREU+SFRUUFBhY2thZ2UuZ2V0SFRUUFVybFJlcGxhY2VtZW50KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBBZGRyZXNzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBBZGRyZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYTEyY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQQWRkcmVzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUEFkZHJlc3MuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQWRkcmVzczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SFRUUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2NyZWF0ZUhUVFBBZGRyZXNzKCkiPmNyZWF0ZUhUVFBBZGRyZXNzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQQWRkcmVzcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBCaW5kaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBCaW5kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4N2U5ZGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQQmluZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUEJpbmRpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQmluZGluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SFRUUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2NyZWF0ZUhUVFBCaW5kaW5nKCkiPmNyZWF0ZUhUVFBCaW5kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQQmluZGluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBGYWN0b3J5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNGViYTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQRmFjdG9yeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQRmFjdG9yeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5GaWVsZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+IGRlY2xhcmVkIGFzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5IVFRQRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQRmFjdG9yeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUEZhY3Rvcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkhUVFBQYWNrYWdlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNnZXRIVFRQRmFjdG9yeSgpIj5nZXRIVFRQRmFjdG9yeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUE9wZXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTllYjFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUE9wZXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBPcGVyYXRpb248L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQT3BlcmF0aW9uPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBPcGVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkhUVFBGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCNjcmVhdGVIVFRQT3BlcmF0aW9uKCkiPmNyZWF0ZUhUVFBPcGVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk4ZGU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuTGl0ZXJhbHMKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuTGl0ZXJhbHMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZS5MaXRlcmFsczwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UuTGl0ZXJhbHMKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUFBhY2thZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUFBhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYxM2JhMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBQYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9cY2xhc3MtdXNlSFRUUFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPkZpZWxkcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT4gZGVjbGFyZWQgYXMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkhUVFBQYWNrYWdlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCNlSU5TVEFOQ0UiPmVJTlNUQU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQUGFja2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SFRUUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2dldEhUVFBQYWNrYWdlKCkiPmdldEhUVFBQYWNrYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBVcmxFbmNvZGVkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBVcmxFbmNvZGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZWQzN2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQVXJsRW5jb2RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBVcmxFbmNvZGVkLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSFRUUFVybEVuY29kZWQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQVXJsRW5jb2RlZDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SFRUUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2NyZWF0ZUhUVFBVcmxFbmNvZGVkKCkiPmNyZWF0ZUhUVFBVcmxFbmNvZGVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9cY2xhc3MtdXNlSFRUUFVybEVuY29kZWQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQVXJsRW5jb2RlZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZDYxZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL1xjbGFzcy11c2VIVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJIVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFVybFJlcGxhY2VtZW50PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQj48L0E+PC9URD4KLTxURD4mbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQVXJsUmVwbGFjZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxSZXBsYWNlbWVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxSZXBsYWNlbWVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SFRUUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5odG1sI2NyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpIj5jcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvXGNsYXNzLXVzZUhUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkhUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtZnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNzdjYjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCBwYWNrYWdlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZVRpdGxlRm9udCI+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjwvRk9OVD4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotSW50ZXJmYWNlczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IkhUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkhUVFBBZGRyZXNzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IkhUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkhUVFBCaW5kaW5nPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IkhUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkhUVFBGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IkhUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SFRUUE9wZXJhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJIVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5IVFRQUGFja2FnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJIVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5IVFRQUGFja2FnZS5MaXRlcmFsczwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJIVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5IVFRQVXJsRW5jb2RlZDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJIVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SFRUUFVybFJlcGxhY2VtZW50PC9JPjwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE3NWI3OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5QUkVWIFBBQ0tBR0U8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEgyPgotUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAKLTwvSDI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+SW50ZXJmYWNlIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQWRkcmVzczwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQQmluZGluZzwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5UaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj5IVFRQT3BlcmF0aW9uPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFBhY2thZ2U8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBQYWNrYWdlLkxpdGVyYWxzPC9BPjwvQj48L1REPgotPFREPkRlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKLSAKLSAgIGVhY2ggY2xhc3MsCi0gICBlYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcywKLSAgIGVhY2ggZW51bSwKLSAgIGFuZCBlYWNoIGRhdGEgdHlwZQotIAotIDwhPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBFbmNvZGVkPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFVybFJlcGxhY2VtZW50PC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci08REw+Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5QUkVWIFBBQ0tBR0U8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMWViYzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtdHJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCBDbGFzcyBIaWVyYXJjaHkKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAgQ2xhc3MgSGllcmFyY2h5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5QUkVWPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+TkVYVDwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotSGllcmFyY2h5IEZvciBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cAotPC9IMj4KLTwvQ0VOVEVSPgotPERMPgotPERUPjxCPlBhY2thZ2UgSGllcmFyY2hpZXM6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy10cmVlLmh0bWwiPkFsbCBQYWNrYWdlczwvQT48L0RMPgotPEhSPgotPEgyPgotSW50ZXJmYWNlIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4pCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQWRkcmVzczwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsRW5jb2RlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybFJlcGxhY2VtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBCaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiAoYWxzbyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxFbmNvZGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybFJlcGxhY2VtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBGYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQUGFja2FnZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmphdmEuaW8uU2VyaWFsaXphYmxlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQWRkcmVzczwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsRW5jb2RlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsUmVwbGFjZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETEVsZW1lbnQ8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQWRkcmVzczwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsRW5jb2RlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybFJlcGxhY2VtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQpCi08L1VMPgotPC9VTD4KLTwvVUw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5QUkVWPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+TkVYVDwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXVzZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtdXNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmN2RkNzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtdXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIFBhY2thZ2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+IHVzZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQQWRkcmVzcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEFkZHJlc3M8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUEJpbmRpbmcuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBCaW5kaW5nPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBGYWN0b3J5Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQRmFjdG9yeTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUE9wZXJhdGlvbi5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvY2xhc3MtdXNlL0hUVFBQYWNrYWdlLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQUGFja2FnZTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9jbGFzcy11c2UvSFRUUFVybEVuY29kZWQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxFbmNvZGVkPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBFbmNvZGVkPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2NsYXNzLXVzZS9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxSZXBsYWNlbWVudDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VcmwgUmVwbGFjZW1lbnQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzNjA5YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1NSU1FQ29udGVudAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Ik1JTUVDb250ZW50IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTUlNRUNvbnRlbnQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVDb250ZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgTUlNRUNvbnRlbnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5NSU1FQ29udGVudDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29udGVudDwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8cD4KLSBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gPHVsPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldFR5cGUoKSI+PENPREU+PGVtPlR5cGU8L2VtPjwvQ09ERT48L0E+PC9saT4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVDb250ZW50KCkiPjxDT0RFPk1JTUVQYWNrYWdlLmdldE1JTUVDb250ZW50KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldEVQYXJ0KCkiPmdldEVQYXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldFBhcnQoKSI+Z2V0UGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRUeXBlKCkiPmdldFR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+c2V0RVBhcnQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPjxlbT5FUGFydDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI3NldFBhcnQoamF2YS5sYW5nLlN0cmluZykiPnNldFBhcnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFydCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI3NldFR5cGUoamF2YS5sYW5nLlN0cmluZykiPnNldFR5cGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldFR5cGUoKSI+PENPREU+PGVtPlR5cGU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj5nZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjaXNSZXF1aXJlZCgpIj5pc1JlcXVpcmVkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldFJlcXVpcmVkKGJvb2xlYW4pIj5zZXRSZXF1aXJlZDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VHlwZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRUeXBlPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNzZXRUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXRUeXBlKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FQ29udGVudF9UeXBlKCkiPjxDT0RFPk1JTUVQYWNrYWdlLmdldE1JTUVDb250ZW50X1R5cGUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRUeXBlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFR5cGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldFR5cGUoKSI+PENPREU+PGVtPlR5cGU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRUeXBlPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldFR5cGUoKSI+PENPREU+Z2V0VHlwZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVQYXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVQYXJ0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+IDxCPmdldEVQYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjc2V0RVBhcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCkiPjxDT0RFPnNldEVQYXJ0KFBhcnQpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKSI+PENPREU+TUlNRVBhY2thZ2UuZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RVBhcnQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0RVBhcnQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4mbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPjxlbT5FUGFydDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRFUGFydCgpIj48Q09ERT5nZXRFUGFydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFBhcnQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFBhcnQ8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0UGFydDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3BhcnQpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRQYXJ0PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQYXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBhcnQ8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0UGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRQYXJ0PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL01JTUVDb250ZW50Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FQ29udGVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzc4YjA3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzU0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU1JTUVGYWN0b3J5Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTUlNRUZhY3RvcnkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NSU1FRmFjdG9yeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgTUlNRUZhY3Rvcnk8L0gyPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5NSU1FRmFjdG9yeTwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+TUlNRVBhY2thZ2U8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUZhY3Rvcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sI2VJTlNUQU5DRSI+ZUlOU1RBTkNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnk8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUNvbnRlbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sI2NyZWF0ZU1JTUVDb250ZW50KCkiPmNyZWF0ZU1JTUVDb250ZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250ZW50PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU1pbWVYbWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sI2NyZWF0ZU1JTUVNaW1lWG1sKCkiPmNyZWF0ZU1JTUVNaW1lWG1sPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaW1lIFhtbDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCNjcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpIj5jcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjY3JlYXRlTUlNRVBhcnQoKSI+Y3JlYXRlTUlNRVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjZ2V0TUlNRVBhY2thZ2UoKSI+Z2V0TUlNRVBhY2thZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3Rvcnk8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJlSU5TVEFOQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLWVJTlNUQU5DRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUZhY3Rvcnk8L0E+IDxCPmVJTlNUQU5DRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImNyZWF0ZU1JTUVDb250ZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZU1JTUVDb250ZW50PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVDb250ZW50PC9BPiA8Qj5jcmVhdGVNSU1FQ29udGVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29udGVudDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnRlbnQ8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVNSU1FUGFydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVNSU1FUGFydDwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFydDwvQT4gPEI+Y3JlYXRlTUlNRVBhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+IDxCPmNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlTUlNRU1pbWVYbWwoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlTUlNRU1pbWVYbWw8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU1pbWVYbWw8L0E+IDxCPmNyZWF0ZU1JTUVNaW1lWG1sPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pbWUgWG1sPC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TUlNRVBhY2thZ2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TUlNRVBhY2thZ2U8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+IDxCPmdldE1JTUVQYWNrYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTUlNRUZhY3RvcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzA3ZGU5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU1JTUVNaW1lWG1sCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTUlNRU1pbWVYbWwiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NSU1FTWltZVhtbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVNaW1lWG1sLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgTUlNRU1pbWVYbWw8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5NSU1FTWltZVhtbDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sPC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWltZSBYbWw8L2I+PC9lbT4nLgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVNaW1lWG1sKCkiPjxDT0RFPk1JTUVQYWNrYWdlLmdldE1JTUVNaW1lWG1sKCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sI2dldEVQYXJ0KCkiPmdldEVQYXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sI2dldFBhcnQoKSI+Z2V0UGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+c2V0RVBhcnQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPjxlbT5FUGFydDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sI3NldFBhcnQoamF2YS5sYW5nLlN0cmluZykiPnNldFBhcnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFydCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RVBhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RVBhcnQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4gPEI+Z2V0RVBhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+PENPREU+c2V0RVBhcnQoUGFydCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FTWltZVhtbF9FUGFydCgpIj48Q09ERT5NSU1FUGFja2FnZS5nZXRNSU1FTWltZVhtbF9FUGFydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFUGFydDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFUGFydDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPmdldEVQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0UGFydChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0UGFydDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRQYXJ0PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFydCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldFBhcnQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UGFydDwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRQYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFBhcnQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTUlNRU1pbWVYbWwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FTWltZVhtbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmU3MWVkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU1JTUVNdWx0aXBhcnRSZWxhdGVkCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTUlNRU11bHRpcGFydFJlbGF0ZWQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nLgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCNnZXRFTUlNRVBhcnQoKSI+PENPREU+PGVtPkVNSU1FIFBhcnQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkiPjxDT0RFPk1JTUVQYWNrYWdlLmdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sI2FkZE1JTUVQYXJ0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0KSI+YWRkTUlNRVBhcnQ8L0E+PC9CPihqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCZuYnNwO21pbWVQYXJ0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sI2dldEVNSU1FUGFydCgpIj5nZXRFTUlNRVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTUlNRSBQYXJ0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwjZ2V0TUlNRVBhcnRzKCkiPmdldE1JTUVQYXJ0czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RU1JTUVQYXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVNSU1FUGFydDwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0RU1JTUVQYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1JTUUgUGFydDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Q09ERT5NSU1FUGFydDwvQ09ERT48L0E+LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1JTUUgUGFydDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTUlNRSBQYXJ0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkX0VNSU1FUGFydCgpIj48Q09ERT5NSU1FUGFja2FnZS5nZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGRNSU1FUGFydChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCkiPjwhLS0gLS0+PC9BPjxIMz4KLWFkZE1JTUVQYXJ0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPmFkZE1JTUVQYXJ0PC9CPihqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCZuYnNwO21pbWVQYXJ0KTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+YWRkTUlNRVBhcnQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1JTUVQYXJ0cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNSU1FUGFydHM8L0gzPgotPFBSRT4KLWphdmEudXRpbC5MaXN0IDxCPmdldE1JTUVQYXJ0czwvQj4oKTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0TUlNRVBhcnRzPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQzNjMyNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1NSU1FUGFja2FnZS5MaXRlcmFscwotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5MaXRlcmFscyBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Ik1JTUVQYWNrYWdlLkxpdGVyYWxzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBNSU1FUGFja2FnZS5MaXRlcmFsczwvSDI+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGludGVyZmFjZTo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgc3RhdGljIGludGVyZmFjZSA8Qj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gPHVsPgotICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gPC91bD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sI0lNSU1FX0NPTlRFTlQiPklNSU1FX0NPTlRFTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNSU1FIENvbnRlbnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJTUlNRV9NSU1FX1hNTCI+SU1JTUVfTUlNRV9YTUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNSU1FIE1pbWUgWG1sPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSU1JTUVfTVVMVElQQVJUX1JFTEFURUQiPklNSU1FX01VTFRJUEFSVF9SRUxBVEVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sI0lNSU1FX1BBUlQiPklNSU1FX1BBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNSU1FIFBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VEYXRhVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNMSVNUIj5MSVNUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5MaXN0PC9lbT4nIGRhdGEgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9DT05URU5UIj5NSU1FX0NPTlRFTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkNvbnRlbnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9DT05URU5UX19FUEFSVCI+TUlNRV9DT05URU5UX19FUEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9DT05URU5UX19UWVBFIj5NSU1FX0NPTlRFTlRfX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNSU1FX01JTUVfWE1MIj5NSU1FX01JTUVfWE1MPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5NaW1lIFhtbDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNNSU1FX01JTUVfWE1MX19FUEFSVCI+TUlNRV9NSU1FX1hNTF9fRVBBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1JTUUgUGFydDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9QQVJUIj5NSU1FX1BBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwjTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+TUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJNSU1FX0NPTlRFTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfQ09OVEVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5NSU1FX0NPTlRFTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkNvbnRlbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVDb250ZW50SW1wbDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldE1JTUVDb250ZW50KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfQ09OVEVOVF9fVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9DT05URU5UX19UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5NSU1FX0NPTlRFTlRfX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX0NPTlRFTlRfX0VQQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX0NPTlRFTlRfX0VQQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5NSU1FX0NPTlRFTlRfX0VQQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9QQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPk1JTUVfUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TUlNRVBhcnRJbXBsPC9DT0RFPiwgCi08Q09ERT5NSU1FUGFja2FnZUltcGwuZ2V0TUlNRVBhcnQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+TUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTVVMVElQQVJUX1JFTEFURUQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNSU1FIFBhcnQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTUlNRV9YTUwiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTUlNRV9YTUw8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+TUlNRV9NSU1FX1hNTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+TWltZSBYbWw8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVNaW1lWG1sSW1wbDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldE1JTUVNaW1lWG1sKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTUlNRV9YTUxfX0VQQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX01JTUVfWE1MX19FUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+TUlNRV9NSU1FX1hNTF9fRVBBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1JTUVfUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotSU1JTUVfUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JTUlNRV9QQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBQYXJ0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FUGFydDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldElNSU1FUGFydCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+PCEtLSAtLT48L0E+PEgzPgotSU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUlNRV9DT05URU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTUlNRV9DT05URU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklNSU1FX0NPTlRFTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklNSU1FIENvbnRlbnQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVDb250ZW50PC9DT0RFPiwgCi08Q09ERT5NSU1FUGFja2FnZUltcGwuZ2V0SU1JTUVDb250ZW50KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklNSU1FX01JTUVfWE1MIj48IS0tIC0tPjwvQT48SDM+Ci1JTUlNRV9NSU1FX1hNTDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JTUlNRV9NSU1FX1hNTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgTWltZSBYbWw8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVNaW1lWG1sPC9DT0RFPiwgCi08Q09ERT5NSU1FUGFja2FnZUltcGwuZ2V0SU1JTUVNaW1lWG1sKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxJU1QiPjwhLS0gLS0+PC9BPjxIMz4KLUxJU1Q8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFRGF0YVR5cGUgPEI+TElTVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+TGlzdDwvZW0+JyBkYXRhIHR5cGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TGlzdDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldExpc3QoKTwvQ09ERT48L0RMPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTVmZjJjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU0OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1NSU1FUGFja2FnZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Ik1JTUVQYWNrYWdlIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTUlNRVBhY2thZ2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIE1JTUVQYWNrYWdlPC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+TUlNRVBhY2thZ2U8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotIDx1bD4KLSAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotIDwvdWw+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxDT0RFPk1JTUVGYWN0b3J5PC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gCi0gICBlYWNoIGNsYXNzLAotICAgZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsCi0gICBlYWNoIGVudW0sCi0gICBhbmQgZWFjaCBkYXRhIHR5cGUKLSAKLSA8ITwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNlSU5TVEFOQ0UiPmVJTlNUQU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZU5BTUUiPmVOQU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBwYWNrYWdlIG5hbWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNlTlNfUFJFRklYIj5lTlNfUFJFRklYPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZU5TX1VSSSI+ZU5TX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9DT05URU5UIj5JTUlNRV9DT05URU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgQ29udGVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVCI+SU1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9NSU1FX1hNTCI+SU1JTUVfTUlNRV9YTUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQiPklNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIE1pbWUgWG1sPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+SU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPklNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNJTUlNRV9QQVJUIj5JTUlNRV9QQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgUGFydDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI0lNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCI+SU1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBQYXJ0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNMSVNUIj5MSVNUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+TGlzdDwvZW0+JyBkYXRhIHR5cGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVCI+TUlNRV9DT05URU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+Q29udGVudDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5NSU1FX0NPTlRFTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fRUxFTUVOVCI+TUlNRV9DT05URU5UX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fRUxFTUVOVF9UWVBFIj5NSU1FX0NPTlRFTlRfX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fRVBBUlQiPk1JTUVfQ09OVEVOVF9fRVBBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fUkVRVUlSRUQiPk1JTUVfQ09OVEVOVF9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9fVFlQRSI+TUlNRV9DT05URU5UX19UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UIj5NSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29udGVudDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTCI+TUlNRV9NSU1FX1hNTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk1pbWUgWG1sPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5NSU1FX01JTUVfWE1MX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MX19FTEVNRU5UIj5NSU1FX01JTUVfWE1MX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRSI+TUlNRV9NSU1FX1hNTF9fRUxFTUVOVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NSU1FX1hNTF9fRVBBUlQiPk1JTUVfTUlNRV9YTUxfX0VQQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01JTUVfWE1MX19SRVFVSVJFRCI+TUlNRV9NSU1FX1hNTF9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+TUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaW1lIFhtbDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlRfVFlQRSI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVF9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1JTUUgUGFydDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfTVVMVElQQVJUX1JFTEFURURfX1JFUVVJUkVEIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19SRVFVSVJFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9GRUFUVVJFX0NPVU5UIj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX1BBUlQiPk1JTUVfUEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+TUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNNSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVF9fRUxFTUVOVCI+TUlNRV9QQVJUX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVF9fRUxFTUVOVF9UWVBFIj5NSU1FX1BBUlRfX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVF9fUkVRVUlSRUQiPk1JTUVfUEFSVF9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI01JTUVfUEFSVF9GRUFUVVJFX0NPVU5UIj5NSU1FX1BBUlRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldElNSU1FQ29udGVudCgpIj5nZXRJTUlNRUNvbnRlbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JTUlNRSBDb250ZW50PC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0SU1JTUVNaW1lWG1sKCkiPmdldElNSU1FTWltZVhtbDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNSU1FIE1pbWUgWG1sPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkiPmdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0SU1JTUVQYXJ0KCkiPmdldElNSU1FUGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklNSU1FIFBhcnQ8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VEYXRhVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRMaXN0KCkiPmdldExpc3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8Q09ERT48ZW0+TGlzdDwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FQ29udGVudF9FUGFydCgpIj5nZXRNSU1FQ29udGVudF9FUGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVDb250ZW50X1R5cGUoKSI+Z2V0TUlNRUNvbnRlbnRfVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRUeXBlKCkiPjxDT0RFPjxlbT5UeXBlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVDb250ZW50KCkiPmdldE1JTUVDb250ZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxDT0RFPjxlbT5Db250ZW50PC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRUZhY3RvcnkoKSI+Z2V0TUlNRUZhY3Rvcnk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVNaW1lWG1sX0VQYXJ0KCkiPmdldE1JTUVNaW1lWG1sX0VQYXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPjxlbT5FUGFydDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FTWltZVhtbCgpIj5nZXRNSU1FTWltZVhtbDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Q09ERT48ZW0+TWltZSBYbWw8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkX0VNSU1FUGFydCgpIj5nZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCNnZXRFTUlNRVBhcnQoKSI+PENPREU+PGVtPkVNSU1FIFBhcnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKSI+Z2V0TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+PGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPmdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxDT0RFPjxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FUGFydCgpIj5nZXRNSU1FUGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZU5BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLWVOQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5lTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgcGFja2FnZSBuYW1lLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5lTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlTlNfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1lTlNfVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5lTlNfVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLmVOU19VUkkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZU5TX1BSRUZJWCI+PCEtLSAtLT48L0E+PEgzPgotZU5TX1BSRUZJWDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+ZU5TX1BSRUZJWDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuZU5TX1BSRUZJWCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlSU5TVEFOQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLWVJTlNUQU5DRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+IDxCPmVJTlNUQU5DRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX0NPTlRFTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfQ09OVEVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX0NPTlRFTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5Db250ZW50PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FQ29udGVudEltcGw8L0NPREU+LCAKLTxDT0RFPk1JTUVQYWNrYWdlSW1wbC5nZXRNSU1FQ29udGVudCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfQ09OVEVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX0NPTlRFTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX0NPTlRFTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfQ09OVEVOVF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9DT05URU5UX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfQ09OVEVOVF9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9DT05URU5UX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9DT05URU5UX19SRVFVSVJFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX0NPTlRFTlRfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfQ09OVEVOVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX0NPTlRFTlRfX0VMRU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX0NPTlRFTlRfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRUxFTUVOVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfQ09OVEVOVF9fVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9DT05URU5UX19UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfQ09OVEVOVF9fVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9DT05URU5UX19FUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9DT05URU5UX19FUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX0NPTlRFTlRfX0VQQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX0VQQVJUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29udGVudDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9QQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX1BBUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9QQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TUlNRVBhcnRJbXBsPC9DT0RFPiwgCi08Q09ERT5NSU1FUGFja2FnZUltcGwuZ2V0TUlNRVBhcnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX1BBUlRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfUEFSVF9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX1BBUlRfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfUEFSVF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfUEFSVF9fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9QQVJUX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19SRVFVSVJFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX1BBUlRfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9QQVJUX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9QQVJUX19FTEVNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTVVMVElQQVJUX1JFTEFURUQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9NVUxUSVBBUlRfUkVMQVRFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGw8L0NPREU+LCAKLTxDT0RFPk1JTUVQYWNrYWdlSW1wbC5nZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURURfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURURfX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfTVVMVElQQVJUX1JFTEFURURfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19SRVFVSVJFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VMRU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTUlNRSBQYXJ0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLU1JTUVfTVVMVElQQVJUX1JFTEFURURfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlNRV9NSU1FX1hNTCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NSU1FX1hNTDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5NSU1FX01JTUVfWE1MPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+TWltZSBYbWw8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVNaW1lWG1sSW1wbDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldE1JTUVNaW1lWG1sKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NSU1FX1hNTF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX01JTUVfWE1MX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1NSU1FX01JTUVfWE1MX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfTUlNRV9YTUxfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX01JTUVfWE1MX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NSU1FX1hNTF9fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9NSU1FX1hNTF9fUkVRVUlSRUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NSU1FX1hNTF9fRUxFTUVOVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNSU1FX01JTUVfWE1MX19FUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NSU1FX1hNTF9fRVBBUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TUlNRV9NSU1FX1hNTF9fRVBBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPk1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWltZSBYbWw8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUlNRV9QQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1JTUlNRV9QQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklNSU1FX1BBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBQYXJ0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FUGFydDwvQ09ERT4sIAotPENPREU+TUlNRVBhY2thZ2VJbXBsLmdldElNSU1FUGFydCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UuSU1JTUVfUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTUlNRV9QQVJUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIFBhcnQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCI+PCEtLSAtLT48L0E+PEgzPgotSU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1JTUVfTVVMVElQQVJUX1JFTEFURUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0NPREU+LCAKLTxDT0RFPk1JTUVQYWNrYWdlSW1wbC5nZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX01VTFRJUEFSVF9SRUxBVEVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1JTUVfTVVMVElQQVJUX1JFTEFURURfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1JTUVfQ09OVEVOVCI+PCEtLSAtLT48L0E+PEgzPgotSU1JTUVfQ09OVEVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JTUlNRV9DT05URU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgQ29udGVudDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TUlNRUNvbnRlbnQ8L0NPREU+LCAKLTxDT0RFPk1JTUVQYWNrYWdlSW1wbC5nZXRJTUlNRUNvbnRlbnQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLklNSU1FX0NPTlRFTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SU1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5JTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU1JTUVfTUlNRV9YTUwiPjwhLS0gLS0+PC9BPjxIMz4KLUlNSU1FX01JTUVfWE1MPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklNSU1FX01JTUVfWE1MPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SU1JTUUgTWltZSBYbWw8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPk1JTUVNaW1lWG1sPC9DT0RFPiwgCi08Q09ERT5NSU1FUGFja2FnZUltcGwuZ2V0SU1JTUVNaW1lWG1sKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5JTUlNRV9NSU1FX1hNTCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIE1pbWUgWG1sPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5JTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxJU1QiPjwhLS0gLS0+PC9BPjxIMz4KLUxJU1Q8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+TElTVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkxpc3Q8L2VtPicgZGF0YSB0eXBlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkxpc3Q8L0NPREU+LCAKLTxDT0RFPk1JTUVQYWNrYWdlSW1wbC5nZXRMaXN0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5MSVNUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TUlNRUNvbnRlbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TUlNRUNvbnRlbnQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRNSU1FQ29udGVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Q09ERT48ZW0+Q29udGVudDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbnRlbnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Q09ERT5NSU1FQ29udGVudDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNSU1FQ29udGVudF9UeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1JTUVDb250ZW50X1R5cGU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0TUlNRUNvbnRlbnRfVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRUeXBlKCkiPjxDT0RFPjxlbT5UeXBlPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldFR5cGUoKSI+PENPREU+TUlNRUNvbnRlbnQuZ2V0VHlwZSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRUNvbnRlbnQoKSI+PENPREU+Z2V0TUlNRUNvbnRlbnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNSU1FQ29udGVudF9FUGFydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNSU1FQ29udGVudF9FUGFydDwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRNSU1FQ29udGVudF9FUGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVQYXJ0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPk1JTUVDb250ZW50LmdldEVQYXJ0KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCNnZXRNSU1FQ29udGVudCgpIj48Q09ERT5nZXRNSU1FQ29udGVudCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1JTUVQYXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1JTUVQYXJ0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0TUlNRVBhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+TUlNRVBhcnQ8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxDT0RFPjxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjxDT0RFPk1JTUVQYXJ0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVQYXJ0KCkiPjxDT0RFPmdldE1JTUVQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Q09ERT48ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxDT0RFPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1JTUVNdWx0aXBhcnRSZWxhdGVkX0VNSU1FUGFydCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQ8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwjZ2V0RU1JTUVQYXJ0KCkiPjxDT0RFPjxlbT5FTUlNRSBQYXJ0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVNSU1FIFBhcnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwjZ2V0RU1JTUVQYXJ0KCkiPjxDT0RFPk1JTUVNdWx0aXBhcnRSZWxhdGVkLmdldEVNSU1FUGFydCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKSI+PENPREU+Z2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNSU1FTWltZVhtbCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNSU1FTWltZVhtbDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldE1JTUVNaW1lWG1sPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxDT0RFPjxlbT5NaW1lIFhtbDwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1pbWUgWG1sPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PENPREU+TUlNRU1pbWVYbWw8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TUlNRU1pbWVYbWxfRVBhcnQ8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0TUlNRU1pbWVYbWxfRVBhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FUGFydDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNnZXRFUGFydCgpIj48Q09ERT5NSU1FTWltZVhtbC5nZXRFUGFydCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRU1pbWVYbWwoKSI+PENPREU+Z2V0TUlNRU1pbWVYbWwoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJTUlNRVBhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SU1JTUVQYXJ0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SU1JTUVQYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1JTUUgUGFydDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgUGFydDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FUGFydDwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJTUlNRUNvbnRlbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SU1JTUVDb250ZW50PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SU1JTUVDb250ZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SU1JTUUgQ29udGVudDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgQ29udGVudDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5NSU1FQ29udGVudDwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElNSU1FTWltZVhtbCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJTUlNRU1pbWVYbWw8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJTUlNRU1pbWVYbWw8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+TUlNRU1pbWVYbWw8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRMaXN0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExpc3Q8L0gzPgotPFBSRT4KLUVEYXRhVHlwZSA8Qj5nZXRMaXN0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPkxpc3Q8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5MaXN0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPkxpc3Q8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNSU1FRmFjdG9yeSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNSU1FRmFjdG9yeTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT4gPEI+Z2V0TUlNRUZhY3Rvcnk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvTUlNRVBhY2thZ2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGFkMDdlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU1JTUVQYXJ0Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iTUlNRVBhcnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NSU1FUGFydC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRVBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBNSU1FUGFydDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPk1JTUVQYXJ0PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+Jy4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQotIDxwPgotIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSA8dWw+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj48Q09ERT48ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVQYXJ0KCkiPjxDT0RFPk1JTUVQYWNrYWdlLmdldE1JTUVQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sI2FkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkiPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj4oamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Jm5ic3A7ZXh0ZW5zaWJpbGl0eUVsZW1lbnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIj5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+Z2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+Z2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+aXNSZXF1aXJlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0RWxlbWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRSZXF1aXJlZChib29sZWFuKSI+c2V0UmVxdWlyZWQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRSZXF1aXJlZCwgc2V0UmVxdWlyZWQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRSZXF1aXJlZCwgc2V0UmVxdWlyZWQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PENPREU+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0NPREU+PC9BPi4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2dldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PENPREU+TUlNRVBhY2thZ2UuZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkiPjwhLS0gLS0+PC9BPjxIMz4KLWFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9IMz4KLTxQUkU+Ci12b2lkIDxCPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9CPihqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQmbmJzcDtleHRlbnNpYmlsaXR5RWxlbWVudCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmFkZEV4dGVuc2liaWxpdHlFbGVtZW50PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzPC9IMz4KLTxQUkU+Ci1qYXZhLnV0aWwuTGlzdCA8Qj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldEV4dGVuc2liaWxpdHlFbGVtZW50czwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9NSU1FUGFydC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRVBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FQ29udGVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FQ29udGVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTljZmVhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRUNvbnRlbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL1xjbGFzcy11c2VNSU1FQ29udGVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVDb250ZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUNvbnRlbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPk1JTUVGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCNjcmVhdGVNSU1FQ29udGVudCgpIj5jcmVhdGVNSU1FQ29udGVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29udGVudDwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9cY2xhc3MtdXNlTUlNRUNvbnRlbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FQ29udGVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjA1YzQxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRUZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3RvcnkKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3RvcnkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL1xjbGFzcy11c2VNSU1FRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+RmllbGRzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPiBkZWNsYXJlZCBhcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVGYWN0b3J5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FRmFjdG9yeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+TUlNRUZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sI2VJTlNUQU5DRSI+ZUlOU1RBTkNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnk8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRUZhY3Rvcnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FUGFja2FnZS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwjZ2V0TUlNRUZhY3RvcnkoKSI+Z2V0TUlNRUZhY3Rvcnk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbDwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9cY2xhc3MtdXNlTUlNRUZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FTWltZVhtbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FTWltZVhtbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWVmMDcxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRU1pbWVYbWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL1xjbGFzcy11c2VNSU1FTWltZVhtbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVNaW1lWG1sLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU1pbWVYbWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPk1JTUVGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCNjcmVhdGVNSU1FTWltZVhtbCgpIj5jcmVhdGVNSU1FTWltZVhtbDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWltZSBYbWw8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvXGNsYXNzLXVzZU1JTUVNaW1lWG1sLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRU1pbWVYbWwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5Yjk0ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvY2xhc3MtdXNlL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9cY2xhc3MtdXNlTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKSI+Y3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL1xjbGFzcy11c2VNSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvY2xhc3MtdXNlL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvY2xhc3MtdXNlL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NmEwM2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5MaXRlcmFscwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5MaXRlcmFscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvXGNsYXNzLXVzZU1JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZS5MaXRlcmFscwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9cY2xhc3MtdXNlTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FUGFja2FnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FUGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTNlYWE2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRVBhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL1xjbGFzcy11c2VNSU1FUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1JTUVQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+RmllbGRzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPiBkZWNsYXJlZCBhcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+TUlNRVBhY2thZ2UuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sI2VJTlNUQU5DRSI+ZUlOU1RBTkNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhY2thZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjZ2V0TUlNRVBhY2thZ2UoKSI+Z2V0TUlNRVBhY2thZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3Rvcnk8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvXGNsYXNzLXVzZU1JTUVQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRVBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRVBhcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRVBhcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcwNWU2YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvY2xhc3MtdXNlL01JTUVQYXJ0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9cY2xhc3MtdXNlTUlNRVBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNSU1FUGFydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQ8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhcnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhcnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRVBhcnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYXJ0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwjY3JlYXRlTUlNRVBhcnQoKSI+Y3JlYXRlTUlNRVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvXGNsYXNzLXVzZU1JTUVQYXJ0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTUlNRVBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLWZyYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1mcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWJhYWYwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUgcGFja2FnZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIj4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVUaXRsZUZvbnQiPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48L0ZPTlQ+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLUludGVyZmFjZXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJNSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FQ29udGVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJNSU1FRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FRmFjdG9yeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJNSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FTWltZVhtbDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJNSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJNSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FUGFja2FnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJNSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FUGFja2FnZS5MaXRlcmFsczwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJNSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5NSU1FUGFydDwvST48L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDVkMmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSBwYWNrYWdlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08SDI+Ci1QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZQotPC9IMj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5JbnRlcmZhY2UgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVDb250ZW50PC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbnRlbnQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVGYWN0b3J5PC9BPjwvQj48L1REPgotPFREPlRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYWNrYWdlPC9BPjwvQj48L1REPgotPFREPlRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFja2FnZS5MaXRlcmFsczwvQT48L0I+PC9URD4KLTxURD5EZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gCi0gICBlYWNoIGNsYXNzLAotICAgZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsCi0gICBlYWNoIGVudW0sCi0gICBhbmQgZWFjaCBkYXRhIHR5cGUKLSAKLSA8ITwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FUGFydDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLTxETD4KLTwvREw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5QUkVWIFBBQ0tBR0U8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMDg2MWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2UtdHJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSBDbGFzcyBIaWVyYXJjaHkKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUgQ2xhc3MgSGllcmFyY2h5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUKLTwvSDI+Ci08L0NFTlRFUj4KLTxETD4KLTxEVD48Qj5QYWNrYWdlIEhpZXJhcmNoaWVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctdHJlZS5odG1sIj5BbGwgUGFja2FnZXM8L0E+PC9ETD4KLTxIUj4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRUNvbnRlbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU1pbWVYbWw8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FQ29udGVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTWltZVhtbDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FUGFydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhY2thZ2U8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVQYWNrYWdlLkxpdGVyYWxzPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5qYXZhLmlvLlNlcmlhbGl6YWJsZTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRUNvbnRlbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNaW1lWG1sPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETEVsZW1lbnQ8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FQ29udGVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTWltZVhtbDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FUGFydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQpCi08L1VMPgotPC9VTD4KLTwvVUw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS11c2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXVzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzAyZmMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXVzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIFBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBQYWNrYWdlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1DbGFzc2VzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPiB1c2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRUNvbnRlbnQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVDb250ZW50PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbnRlbnQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvY2xhc3MtdXNlL01JTUVGYWN0b3J5Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FRmFjdG9yeTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRU1pbWVYbWwuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNaW1lWG1sPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1pbWUgWG1sPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2NsYXNzLXVzZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvY2xhc3MtdXNlL01JTUVQYWNrYWdlLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FUGFja2FnZTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9jbGFzcy11c2UvTUlNRVBhcnQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVQYXJ0PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhMzc4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TT0FQQWRkcmVzcwotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzcyBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNPQVBBZGRyZXNzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEFkZHJlc3MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU09BUEFkZHJlc3M8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5TT0FQQWRkcmVzczwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzPC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8cD4KLSBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gPHVsPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBBZGRyZXNzKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBBZGRyZXNzKCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPmdldExvY2F0aW9uVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCNzZXRMb2NhdGlvblVSSShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TG9jYXRpb25VUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNnZXRFbGVtZW50VHlwZSgpIj5nZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjaXNSZXF1aXJlZCgpIj5pc1JlcXVpcmVkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldFJlcXVpcmVkKGJvb2xlYW4pIj5zZXRSZXF1aXJlZDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZWxlbWVudENoYW5nZWQob3JnLnczYy5kb20uRWxlbWVudCkiPmVsZW1lbnRDaGFuZ2VkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRDb250YWluZXIoKSI+Z2V0Q29udGFpbmVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIj5nZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudCgpIj5nZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldERvY3VtZW50YXRpb25FbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXREb2N1bWVudGF0aW9uRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudCgpIj51cGRhdGVFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KGJvb2xlYW4pIj51cGRhdGVFbGVtZW50PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldFJlcXVpcmVkLCBzZXRSZXF1aXJlZDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldExvY2F0aW9uVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvY2F0aW9uVVJJPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldExvY2F0aW9uVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0TG9jYXRpb25VUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwjc2V0TG9jYXRpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldExvY2F0aW9uVVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvY2F0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMb2NhdGlvblVSSTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRMb2NhdGlvblVSSTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+PGVtPkxvY2F0aW9uIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldExvY2F0aW9uVVJJPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwjZ2V0TG9jYXRpb25VUkkoKSI+PENPREU+Z2V0TG9jYXRpb25VUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBBZGRyZXNzLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQQWRkcmVzcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTdiZGYwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVNPQVBCaW5kaW5nCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iU09BUEJpbmRpbmciOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TT0FQQmluZGluZy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU09BUEJpbmRpbmc8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5TT0FQQmluZGluZzwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nPC9ETD4KLTwvUFJFPgotCi08UD4KLTwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8cD4KLSBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gPHVsPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFRyYW5zcG9ydFVSSSgpIj48Q09ERT48ZW0+VHJhbnNwb3J0IFVSSTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT48L2xpPgotIDwvdWw+Ci0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJpbmRpbmcoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEJpbmRpbmcoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0U3R5bGUoKSI+Z2V0U3R5bGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0VHJhbnNwb3J0VVJJKCkiPmdldFRyYW5zcG9ydFVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI3NldFN0eWxlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHlsZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjc2V0VHJhbnNwb3J0VVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXRUcmFuc3BvcnRVUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFRyYW5zcG9ydFVSSSgpIj48Q09ERT48ZW0+VHJhbnNwb3J0IFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0VHJhbnNwb3J0VVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRyYW5zcG9ydFVSSTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRUcmFuc3BvcnRVUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFRyYW5zcG9ydFVSSTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjc2V0VHJhbnNwb3J0VVJJKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXRUcmFuc3BvcnRVUkkoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQQmluZGluZ19UcmFuc3BvcnRVUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRUcmFuc3BvcnRVUkkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFRyYW5zcG9ydFVSSTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRUcmFuc3BvcnRVUkk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFRyYW5zcG9ydFVSSSgpIj48Q09ERT48ZW0+VHJhbnNwb3J0IFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNldFRyYW5zcG9ydFVSSTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNnZXRUcmFuc3BvcnRVUkkoKSI+PENPREU+Z2V0VHJhbnNwb3J0VVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3R5bGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U3R5bGU8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0U3R5bGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0U3R5bGU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNzZXRTdHlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0U3R5bGUoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCaW5kaW5nX1N0eWxlKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBCaW5kaW5nX1N0eWxlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U3R5bGUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFN0eWxlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFN0eWxlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNnZXRTdHlsZSgpIj48Q09ERT48ZW0+U3R5bGU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRTdHlsZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+Z2V0U3R5bGUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBCaW5kaW5nLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEJpbmRpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0YjcwNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TT0FQQm9keQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNPQVBCb2R5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEJvZHkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQQm9keS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNPQVBCb2R5PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5pby5TZXJpYWxpemFibGUsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+U09BUEJvZHk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJvZHk8L2I+PC9lbT4nLgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldEVFbmNvZGluZ1N0eWxlcygpIj48Q09ERT48ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldEVQYXJ0cygpIj48Q09ERT48ZW0+RVBhcnRzPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gPC91bD4KLSA8L3A+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQm9keSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQQm9keSgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0RUVuY29kaW5nU3R5bGVzKCkiPmdldEVFbmNvZGluZ1N0eWxlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRFUGFydHMoKSI+Z2V0RVBhcnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+Z2V0TmFtZXNwYWNlVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0VXNlKCkiPmdldFVzZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjc2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXROYW1lc3BhY2VVUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI3NldFVzZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0VXNlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPmdldEVuY29kaW5nU3R5bGVzLCBnZXRQYXJ0cywgc2V0RW5jb2RpbmdTdHlsZXMsIHNldFBhcnRzPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0VXNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFVzZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRVc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRVc2U8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjc2V0VXNlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXRVc2UoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCb2R5X1VzZSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQQm9keV9Vc2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRVc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFVzZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRVc2U8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldFVzZSgpIj48Q09ERT48ZW0+VXNlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0VXNlPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0VXNlKCkiPjxDT0RFPmdldFVzZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE5hbWVzcGFjZVVSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0TmFtZXNwYWNlVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXROYW1lc3BhY2VVUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI3NldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZXNwYWNlVVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQm9keV9OYW1lc3BhY2VVUkkoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXROYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZXNwYWNlVVJJPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXROYW1lc3BhY2VVUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPmdldE5hbWVzcGFjZVVSSSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVFbmNvZGluZ1N0eWxlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFRW5jb2RpbmdTdHlsZXM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVFbmNvZGluZ1N0eWxlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIDxDT0RFPlN0cmluZzwvQ09ERT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVQYXJ0cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFUGFydHM8L0gzPgotPFBSRT4KLUVMaXN0IDxCPmdldEVQYXJ0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Q09ERT5QYXJ0PC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUGFydHM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnRzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCb2R5X0VQYXJ0cygpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQQm9keV9FUGFydHMoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBCb2R5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEJvZHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3N2IzMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TT0FQRmFjdG9yeQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeSBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNPQVBGYWN0b3J5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEZhY3RvcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTT0FQRmFjdG9yeTwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPlNPQVBGYWN0b3J5PC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT5TT0FQUGFja2FnZTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQWRkcmVzczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEFkZHJlc3MoKSI+Y3JlYXRlU09BUEFkZHJlc3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQmluZGluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEJpbmRpbmcoKSI+Y3JlYXRlU09BUEJpbmRpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEJvZHkoKSI+Y3JlYXRlU09BUEJvZHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJvZHk8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhdWx0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQRmF1bHQoKSI+Y3JlYXRlU09BUEZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEhlYWRlcigpIj5jcmVhdGVTT0FQSGVhZGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXI8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEhlYWRlckJhc2UoKSI+Y3JlYXRlU09BUEhlYWRlckJhc2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBCYXNlPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJGYXVsdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEhlYWRlckZhdWx0KCkiPmNyZWF0ZVNPQVBIZWFkZXJGYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQT3BlcmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQT3BlcmF0aW9uKCkiPmNyZWF0ZVNPQVBPcGVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNnZXRTT0FQUGFja2FnZSgpIj5nZXRTT0FQUGFja2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImVJTlNUQU5DRSI+PCEtLSAtLT48L0E+PEgzPgotZUlOU1RBTkNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT4gPEI+ZUlOU1RBTkNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iY3JlYXRlU09BUEJpbmRpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlU09BUEJpbmRpbmc8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJpbmRpbmc8L0E+IDxCPmNyZWF0ZVNPQVBCaW5kaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVNPQVBCb2R5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZVNPQVBCb2R5PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCb2R5PC9BPiA8Qj5jcmVhdGVTT0FQQm9keTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Qm9keTwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJvZHk8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVTT0FQSGVhZGVyQmFzZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVTT0FQSGVhZGVyQmFzZTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4gPEI+Y3JlYXRlU09BUEhlYWRlckJhc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBCYXNlPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVTT0FQRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlU09BUEZhdWx0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+IDxCPmNyZWF0ZVNPQVBGYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5hIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVNPQVBPcGVyYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlU09BUE9wZXJhdGlvbjwvSDM+Ci08UFJFPgotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBPcGVyYXRpb248L0E+IDxCPmNyZWF0ZVNPQVBPcGVyYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNyZWF0ZVNPQVBBZGRyZXNzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZVNPQVBBZGRyZXNzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBBZGRyZXNzPC9BPiA8Qj5jcmVhdGVTT0FQQWRkcmVzczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPicuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjcmVhdGVTT0FQSGVhZGVyRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlU09BUEhlYWRlckZhdWx0PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyRmF1bHQ8L0E+IDxCPmNyZWF0ZVNPQVBIZWFkZXJGYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY3JlYXRlU09BUEhlYWRlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVTT0FQSGVhZGVyPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlcjwvQT4gPEI+Y3JlYXRlU09BUEhlYWRlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyPC9lbT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyPC9lbT4nLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUFBhY2thZ2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUFBhY2thZ2U8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+IDxCPmdldFNPQVBQYWNrYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEZhY3RvcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGMzYjY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQyNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TT0FQRmF1bHQKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iU09BUEZhdWx0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEZhdWx0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU09BUEZhdWx0PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5pby5TZXJpYWxpemFibGUsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPlNPQVBGYXVsdDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQotIDxwPgotIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSA8dWw+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldFVzZSgpIj48Q09ERT48ZW0+VXNlPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gPC91bD4KLSA8L3A+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHQoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEZhdWx0KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPmdldE5hbWVzcGFjZVVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXRVc2UoKSI+Z2V0VXNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0TmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldE5hbWUoKSI+PENPREU+PGVtPk5hbWU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjc2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXROYW1lc3BhY2VVUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjc2V0VXNlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRVc2U8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0RW5jb2RpbmdTdHlsZXMsIHNldEVuY29kaW5nU3R5bGVzPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0VXNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFVzZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRVc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRVc2U8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNzZXRVc2UoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldFVzZShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X1VzZSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQRmF1bHRfVXNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VXNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRVc2U8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0VXNlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRVc2U8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldFVzZSgpIj48Q09ERT5nZXRVc2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lc3BhY2VVUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZXNwYWNlVVJJPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldE5hbWVzcGFjZVVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0TmFtZXNwYWNlVVJJPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI3NldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZXNwYWNlVVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5hbWVzcGFjZVVSSTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXROYW1lc3BhY2VVUkk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXROYW1lc3BhY2VVUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+Z2V0TmFtZXNwYWNlVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldE5hbWU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X05hbWUoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEZhdWx0X05hbWUoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXROYW1lPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldE5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0TmFtZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldE5hbWUoKSI+PENPREU+Z2V0TmFtZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEZhdWx0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGRkZjYxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotU09BUEhlYWRlcgotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iU09BUEhlYWRlciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBIZWFkZXIuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQSGVhZGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU09BUEhlYWRlcjwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmEuaW8uU2VyaWFsaXphYmxlLCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyLCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPlNPQVBIZWFkZXI8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI8L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXI8L2I+PC9lbT4nLgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCi0gPHA+Ci0gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotIDx1bD4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sI2dldEhlYWRlckZhdWx0cygpIj48Q09ERT48ZW0+SGVhZGVyIEZhdWx0czwvZW0+PC9DT0RFPjwvQT48L2xpPgotIDwvdWw+Ci0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlcigpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQSGVhZGVyKCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sI2dldEhlYWRlckZhdWx0cygpIj5nZXRIZWFkZXJGYXVsdHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVFbmNvZGluZ1N0eWxlcygpIj5nZXRFRW5jb2RpbmdTdHlsZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFTWVzc2FnZSgpIj5nZXRFTWVzc2FnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVuY29kaW5nU3R5bGVzKCkiPmdldEVuY29kaW5nU3R5bGVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RVBhcnQoKSI+Z2V0RVBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRNZXNzYWdlKCkiPmdldE1lc3NhZ2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+Z2V0TmFtZXNwYWNlVVJJPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0UGFydCgpIj5nZXRQYXJ0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0VXNlKCkiPmdldFVzZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldEVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UpIj5zZXRFTWVzc2FnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldEVuY29kaW5nU3R5bGVzKGphdmEudXRpbC5MaXN0KSI+c2V0RW5jb2RpbmdTdHlsZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+c2V0RVBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRNZXNzYWdlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRNZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj5zZXROYW1lc3BhY2VVUkk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRQYXJ0KGphdmEubGFuZy5TdHJpbmcpIj5zZXRQYXJ0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0VXNlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRVc2U8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5hZGRTT0FQSGVhZGVyRmF1bHQsIGdldEVuY29kaW5nU3R5bGVzLCBnZXRNZXNzYWdlLCBnZXROYW1lc3BhY2VVUkksIGdldFBhcnQsIGdldFNPQVBIZWFkZXJGYXVsdHMsIGdldFVzZSwgc2V0RW5jb2RpbmdTdHlsZXMsIHNldE1lc3NhZ2UsIHNldE5hbWVzcGFjZVVSSSwgc2V0UGFydCwgc2V0VXNlPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0SGVhZGVyRmF1bHRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEhlYWRlckZhdWx0czwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0SGVhZGVyRmF1bHRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SGVhZGVyIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+U09BUEhlYWRlckZhdWx0PC9DT0RFPjwvQT4uCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5IZWFkZXIgRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhlYWRlciBGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBIZWFkZXIuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQSGVhZGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MzgyY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotU09BUEhlYWRlckJhc2UKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTT0FQSGVhZGVyQmFzZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBIZWFkZXJCYXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEhlYWRlckJhc2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTT0FQSGVhZGVyQmFzZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckZhdWx0PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5TT0FQSGVhZGVyQmFzZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0RMPgotPC9QUkU+Ci0KLTxQPgotPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgQmFzZTwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8cD4KLSBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gPHVsPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFVzZSgpIj48Q09ERT48ZW0+VXNlPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RUVuY29kaW5nU3R5bGVzKCkiPjxDT0RFPjxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TWVzc2FnZSgpIj48Q09ERT48ZW0+TWVzc2FnZTwvZW0+PC9DT0RFPjwvQT48L2xpPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFBhcnQoKSI+PENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFTWVzc2FnZSgpIj48Q09ERT48ZW0+RU1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+PC9saT4KLSAgIDxsaT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBIZWFkZXJCYXNlKCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFTGlzdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFRW5jb2RpbmdTdHlsZXMoKSI+Z2V0RUVuY29kaW5nU3R5bGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+Z2V0RU1lc3NhZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5MaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVuY29kaW5nU3R5bGVzKCkiPmdldEVuY29kaW5nU3R5bGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RVBhcnQoKSI+Z2V0RVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TWVzc2FnZSgpIj5nZXRNZXNzYWdlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPmdldE5hbWVzcGFjZVVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFBhcnQoKSI+Z2V0UGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFVzZSgpIj5nZXRVc2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldEVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UpIj5zZXRFTWVzc2FnZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0RW5jb2RpbmdTdHlsZXMoamF2YS51dGlsLkxpc3QpIj5zZXRFbmNvZGluZ1N0eWxlczwvQT48L0I+KGphdmEudXRpbC5MaXN0Jm5ic3A7ZW5jb2RpbmdTdHlsZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+c2V0RVBhcnQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPjxlbT5FUGFydDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldE1lc3NhZ2UoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldE1lc3NhZ2U8L0E+PC9CPihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE1lc3NhZ2UoKSI+PENPREU+PGVtPk1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPnNldE5hbWVzcGFjZVVSSTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0UGFydChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0UGFydDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0UGFydCgpIj48Q09ERT48ZW0+UGFydDwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldFVzZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0VXNlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2dldEVsZW1lbnRUeXBlKCkiPmdldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNpc1JlcXVpcmVkKCkiPmlzUmVxdWlyZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI3NldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRFbGVtZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0UmVxdWlyZWQoYm9vbGVhbikiPnNldFJlcXVpcmVkPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNlbGVtZW50Q2hhbmdlZChvcmcudzNjLmRvbS5FbGVtZW50KSI+ZWxlbWVudENoYW5nZWQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkiPmdldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbGVtZW50KCkiPmdldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVuY2xvc2luZ0RlZmluaXRpb24oKSI+Z2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldERvY3VtZW50YXRpb25FbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbGVtZW50KG9yZy53M2MuZG9tLkVsZW1lbnQpIj5zZXRFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCN1cGRhdGVFbGVtZW50KCkiPnVwZGF0ZUVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikiPnVwZGF0ZUVsZW1lbnQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+Z2V0UmVxdWlyZWQsIHNldFJlcXVpcmVkPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0VXNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFVzZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRVc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRVc2UoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldFVzZShTdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2VfVXNlKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBIZWFkZXJCYXNlX1VzZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFVzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VXNlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFVzZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFVzZSgpIj48Q09ERT5nZXRVc2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lc3BhY2VVUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZXNwYWNlVVJJPC9IMz4KLTxQUkU+Ci1qYXZhLmxhbmcuU3RyaW5nIDxCPmdldE5hbWVzcGFjZVVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldE5hbWVzcGFjZVVSSShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0TmFtZXNwYWNlVVJJKFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXROYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLXZvaWQgPEI+c2V0TmFtZXNwYWNlVVJJPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+Z2V0TmFtZXNwYWNlVVJJKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RUVuY29kaW5nU3R5bGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVFbmNvZGluZ1N0eWxlczwvSDM+Ci08UFJFPgotRUxpc3QgPEI+Z2V0RUVuY29kaW5nU3R5bGVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUgPENPREU+U3RyaW5nPC9DT0RFPi4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDxwPgotIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXMoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RU1lc3NhZ2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RU1lc3NhZ2U8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4gPEI+Z2V0RU1lc3NhZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+PENPREU+c2V0RU1lc3NhZ2UoTWVzc2FnZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFTWVzc2FnZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFTWVzc2FnZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPmdldEVNZXNzYWdlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RVBhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RVBhcnQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4gPEI+Z2V0RVBhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSA8L3A+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRFUGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KSI+PENPREU+c2V0RVBhcnQoUGFydCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9FUGFydCgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQSGVhZGVyQmFzZV9FUGFydCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRFUGFydDwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRFUGFydDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVQYXJ0KCkiPjxDT0RFPmdldEVQYXJ0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWVzc2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNZXNzYWdlPC9IMz4KLTxQUkU+Ci1qYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIDxCPmdldE1lc3NhZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWVzc2FnZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0TWVzc2FnZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+c2V0TWVzc2FnZShRTmFtZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRNZXNzYWdlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRNZXNzYWdlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldE1lc3NhZ2U8L0I+KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE1lc3NhZ2UoKSI+PENPREU+PGVtPk1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NZXNzYWdlPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRNZXNzYWdlKCkiPjxDT0RFPmdldE1lc3NhZ2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQYXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBhcnQ8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0UGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRQYXJ0KGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZXRQYXJ0KFN0cmluZyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkiPjxDT0RFPlNPQVBQYWNrYWdlLmdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRQYXJ0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRQYXJ0PC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFBhcnQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFBhcnQoKSI+PENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRQYXJ0KCkiPjxDT0RFPmdldFBhcnQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbmNvZGluZ1N0eWxlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbmNvZGluZ1N0eWxlczwvSDM+Ci08UFJFPgotamF2YS51dGlsLkxpc3QgPEI+Z2V0RW5jb2RpbmdTdHlsZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFbmNvZGluZ1N0eWxlcyhqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVuY29kaW5nU3R5bGVzPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldEVuY29kaW5nU3R5bGVzPC9CPihqYXZhLnV0aWwuTGlzdCZuYnNwO2VuY29kaW5nU3R5bGVzKTwvUFJFPgotPERMPgotPEREPjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUEhlYWRlckJhc2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQSGVhZGVyQmFzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzIxNjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVNPQVBIZWFkZXJGYXVsdAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTT0FQSGVhZGVyRmF1bHQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TT0FQSGVhZGVyRmF1bHQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU09BUEhlYWRlckZhdWx0PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5pby5TZXJpYWxpemFibGUsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5TT0FQSGVhZGVyRmF1bHQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBGYXVsdDwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyRmF1bHQoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUEhlYWRlckZhdWx0KCk8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RUVuY29kaW5nU3R5bGVzKCkiPmdldEVFbmNvZGluZ1N0eWxlczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVNZXNzYWdlKCkiPmdldEVNZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RW5jb2RpbmdTdHlsZXMoKSI+Z2V0RW5jb2RpbmdTdHlsZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFUGFydCgpIj5nZXRFUGFydDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj5nZXROYW1lc3BhY2VVUkk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRQYXJ0KCkiPmdldFBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRVc2UoKSI+Z2V0VXNlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPnNldEVNZXNzYWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0RW5jb2RpbmdTdHlsZXMoamF2YS51dGlsLkxpc3QpIj5zZXRFbmNvZGluZ1N0eWxlczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldEVQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpIj5zZXRFUGFydDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldE1lc3NhZ2UoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldE1lc3NhZ2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPnNldE5hbWVzcGFjZVVSSTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI3NldFBhcnQoamF2YS5sYW5nLlN0cmluZykiPnNldFBhcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRVc2UoamF2YS5sYW5nLlN0cmluZykiPnNldFVzZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+Z2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+aXNSZXF1aXJlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0RWxlbWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRSZXF1aXJlZChib29sZWFuKSI+c2V0UmVxdWlyZWQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRSZXF1aXJlZCwgc2V0UmVxdWlyZWQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRFbmNvZGluZ1N0eWxlcywgZ2V0TWVzc2FnZSwgZ2V0TmFtZXNwYWNlVVJJLCBnZXRQYXJ0LCBnZXRVc2UsIHNldEVuY29kaW5nU3R5bGVzLCBzZXRNZXNzYWdlLCBzZXROYW1lc3BhY2VVUkksIHNldFBhcnQsIHNldFVzZTwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1NPQVBIZWFkZXJGYXVsdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBIZWFkZXJGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNTBjMjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TT0FQT3BlcmF0aW9uCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24gaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTT0FQT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUE9wZXJhdGlvbi5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTT0FQT3BlcmF0aW9uPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5pby5TZXJpYWxpemFibGUsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGludGVyZmFjZSA8Qj5TT0FQT3BlcmF0aW9uPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0KLSA8cD4KLSBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gPHVsPgotICAgPGxpPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjZ2V0U29hcEFjdGlvblVSSSgpIj48Q09ERT48ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT48L0NPREU+PC9BPjwvbGk+Ci0gICA8bGk+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj48Q09ERT48ZW0+U3R5bGU8L2VtPjwvQ09ERT48L0E+PC9saT4KLSA8L3VsPgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBPcGVyYXRpb24oKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUE9wZXJhdGlvbigpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI2dldFNvYXBBY3Rpb25VUkkoKSI+Z2V0U29hcEFjdGlvblVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj5nZXRTdHlsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI3NldFNvYXBBY3Rpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPnNldFNvYXBBY3Rpb25VUkk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjZ2V0U29hcEFjdGlvblVSSSgpIj48Q09ERT48ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNzZXRTdHlsZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3R5bGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjZ2V0U3R5bGUoKSI+PENPREU+PGVtPlN0eWxlPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQj48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjZ2V0RWxlbWVudFR5cGUoKSI+Z2V0RWxlbWVudFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI2lzUmVxdWlyZWQoKSI+aXNSZXF1aXJlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjc2V0RWxlbWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldEVsZW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNzZXRSZXF1aXJlZChib29sZWFuKSI+c2V0UmVxdWlyZWQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2VsZW1lbnRDaGFuZ2VkKG9yZy53M2MuZG9tLkVsZW1lbnQpIj5lbGVtZW50Q2hhbmdlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSI+Z2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI2dldEVsZW1lbnQoKSI+Z2V0RWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIj5nZXRFbmNsb3NpbmdEZWZpbml0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNzZXREb2N1bWVudGF0aW9uRWxlbWVudChvcmcudzNjLmRvbS5FbGVtZW50KSI+c2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVsZW1lbnQob3JnLnczYy5kb20uRWxlbWVudCkiPnNldEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3NldEVuY2xvc2luZ0RlZmluaXRpb24ob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbikiPnNldEVuY2xvc2luZ0RlZmluaXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sI3VwZGF0ZUVsZW1lbnQoKSI+dXBkYXRlRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjdXBkYXRlRWxlbWVudChib29sZWFuKSI+dXBkYXRlRWxlbWVudDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRSZXF1aXJlZCwgc2V0UmVxdWlyZWQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5nZXRSZXF1aXJlZCwgc2V0UmVxdWlyZWQ8L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRTb2FwQWN0aW9uVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNvYXBBY3Rpb25VUkk8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0U29hcEFjdGlvblVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPHA+Ci0gSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gPC9wPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmdldFNvYXBBY3Rpb25VUkk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdmFsdWUgb2YgdGhlICc8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI3NldFNvYXBBY3Rpb25VUkkoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNldFNvYXBBY3Rpb25VUkkoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpIj48Q09ERT5TT0FQUGFja2FnZS5nZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTb2FwQWN0aW9uVVJJKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTb2FwQWN0aW9uVVJJPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldFNvYXBBY3Rpb25VUkk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwjZ2V0U29hcEFjdGlvblVSSSgpIj48Q09ERT48ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT48L0NPREU+PC9BPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0U29hcEFjdGlvblVSSTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTb2FwQWN0aW9uVVJJKCkiPjxDT0RFPmdldFNvYXBBY3Rpb25VUkkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTdHlsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdHlsZTwvSDM+Ci08UFJFPgotamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRTdHlsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8cD4KLSBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotIDwvcD4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5nZXRTdHlsZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNzZXRTdHlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0U3R5bGUoU3RyaW5nKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBPcGVyYXRpb25fU3R5bGUoKSI+PENPREU+U09BUFBhY2thZ2UuZ2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFN0eWxlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTdHlsZTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRTdHlsZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj48Q09ERT48ZW0+U3R5bGU8L2VtPjwvQ09ERT48L0E+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXRTdHlsZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPjxDT0RFPmdldFN0eWxlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TT0FQT3BlcmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUE9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmIwZTYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAyOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TT0FQUGFja2FnZS5MaXRlcmFscwotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5MaXRlcmFscyBpbnRlcmZhY2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNPQVBQYWNrYWdlLkxpdGVyYWxzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNPQVBQYWNrYWdlLkxpdGVyYWxzPC9IMj4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgaW50ZXJmYWNlOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIDxCPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKLSA8dWw+Ci0gICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSA8L3VsPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNPQVBfQUREUkVTUyI+SVNPQVBfQUREUkVTUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgQWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI0lTT0FQX0JJTkRJTkciPklTT0FQX0JJTkRJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJU09BUF9CT0RZIj5JU09BUF9CT0RZPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBCb2R5PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNPQVBfRkFVTFQiPklTT0FQX0ZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI0lTT0FQX0hFQURFUiI+SVNPQVBfSEVBREVSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNJU09BUF9IRUFERVJfRkFVTFQiPklTT0FQX0hFQURFUl9GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjSVNPQVBfT1BFUkFUSU9OIj5JU09BUF9PUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RURhdGFUeXBlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI0lTVFJJTkciPklTVFJJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPklTdHJpbmc8L2VtPicgZGF0YSB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0FERFJFU1MiPlNPQVBfQUREUkVTUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+U09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQklORElORyI+U09BUF9CSU5ESU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQklORElOR19fU1RZTEUiPlNPQVBfQklORElOR19fU1RZTEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSI+U09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9CT0RZIj5TT0FQX0JPRFk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJvZHk8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj5TT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0JPRFlfX0VQQVJUUyI+U09BUF9CT0RZX19FUEFSVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSI+U09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfQk9EWV9fVVNFIj5TT0FQX0JPRFlfX1VTRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9GQVVMVCI+U09BUF9GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyI+U09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfRkFVTFRfX05BTUUiPlNPQVBfRkFVTFRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+U09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0ZBVUxUX19VU0UiPlNPQVBfRkFVTFRfX1VTRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVIiPlNPQVBfSEVBREVSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFMiPlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFIj5TT0FQX0hFQURFUl9CQVNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXIgQmFzZTwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTIj5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UiPlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FUEFSVCI+U09BUF9IRUFERVJfQkFTRV9fRVBBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UiPlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSI+U09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19QQVJUIj5TT0FQX0hFQURFUl9CQVNFX19QQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfSEVBREVSX0JBU0VfX1VTRSI+U09BUF9IRUFERVJfQkFTRV9fVVNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX0hFQURFUl9GQVVMVCI+U09BUF9IRUFERVJfRkFVTFQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfT1BFUkFUSU9OIj5TT0FQX09QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sI1NPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkiPlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCNTT0FQX09QRVJBVElPTl9fU1RZTEUiPlNPQVBfT1BFUkFUSU9OX19TVFlMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JJTkRJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+U09BUF9CSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5CaW5kaW5nPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQQmluZGluZ0ltcGw8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRTT0FQQmluZGluZygpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HX19TVFlMRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CSU5ESU5HX19TVFlMRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U09BUF9CSU5ESU5HX19TVFlMRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JPRFkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQk9EWTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5TT0FQX0JPRFk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkJvZHk8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBCb2R5SW1wbDwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldFNPQVBCb2R5KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fVVNFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JPRFlfX1VTRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U09BUF9CT0RZX19VU0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVMiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JPRFlfX0VQQVJUUyI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CT0RZX19FUEFSVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPlNPQVBfQk9EWV9fRVBBUlRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+U09BUF9IRUFERVJfQkFTRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SGVhZGVyIEJhc2U8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXJCYXNlSW1wbDwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldFNPQVBIZWFkZXJCYXNlKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX1VTRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfQkFTRV9fVVNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0hFQURFUl9CQVNFX19VU0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfQkFTRV9fUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfQkFTRV9fUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U09BUF9IRUFERVJfQkFTRV9fUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVSZWZlcmVuY2UgPEI+U09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfQkFTRV9fRVBBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfX0VQQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRVJlZmVyZW5jZSA8Qj5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0ZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlNPQVBfRkFVTFQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPkZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQRmF1bHRJbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUEZhdWx0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfX1VTRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9GQVVMVF9fVVNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0ZBVUxUX19VU0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQXR0cmlidXRlIDxCPlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0ZBVUxUX19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19OQU1FPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0ZBVUxUX19OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9PUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlNPQVBfT1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBPcGVyYXRpb25JbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUE9wZXJhdGlvbigpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Tb2FwIEFjdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX09QRVJBVElPTl9fU1RZTEUiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfT1BFUkFUSU9OX19TVFlMRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVBdHRyaWJ1dGUgPEI+U09BUF9PUEVSQVRJT05fX1NUWUxFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQUREUkVTUyI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9BRERSRVNTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlNPQVBfQUREUkVTUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+QWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEFkZHJlc3NJbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUEFkZHJlc3MoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUF0dHJpYnV0ZSA8Qj5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfRkFVTFQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlNPQVBfSEVBREVSX0ZBVUxUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXIgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXJGYXVsdEltcGw8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRTT0FQSGVhZGVyRmF1bHQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVIiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPlNPQVBfSEVBREVSPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXJJbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUEhlYWRlcigpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUyI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFUmVmZXJlbmNlIDxCPlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU09BUF9CSU5ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9CSU5ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklTT0FQX0JJTkRJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBCaW5kaW5nPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0SVNPQVBCaW5kaW5nKCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0FERFJFU1MiPjwhLS0gLS0+PC9BPjxIMz4KLUlTT0FQX0FERFJFU1M8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SVNPQVBfQUREUkVTUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgQWRkcmVzczwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEFkZHJlc3M8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRJU09BUEFkZHJlc3MoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVNPQVBfQk9EWSI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfQk9EWTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIEVDbGFzcyA8Qj5JU09BUF9CT0RZPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBCb2R5PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQQm9keTwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldElTT0FQQm9keSgpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU09BUF9GQVVMVCI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SVNPQVBfRkFVTFQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQRmF1bHQ8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRJU09BUEZhdWx0KCk8L0NPREU+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRUNsYXNzIDxCPklTT0FQX09QRVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQT3BlcmF0aW9uPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0SVNPQVBPcGVyYXRpb24oKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVNPQVBfSEVBREVSX0ZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9IRUFERVJfRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SVNPQVBfSEVBREVSX0ZBVUxUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXJGYXVsdDwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldElTT0FQSGVhZGVyRmF1bHQoKTwvQ09ERT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVNPQVBfSEVBREVSIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9IRUFERVI8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBFQ2xhc3MgPEI+SVNPQVBfSEVBREVSPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXI8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRJU09BUEhlYWRlcigpPC9DT0RFPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU1RSSU5HIj48IS0tIC0tPjwvQT48SDM+Ci1JU1RSSU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgRURhdGFUeXBlIDxCPklTVFJJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPklTdHJpbmc8L2VtPicgZGF0YSB0eXBlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlN0cmluZzwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldElTdHJpbmcoKTwvQ09ERT48L0RMPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMzhjZDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVNPQVBQYWNrYWdlCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iU09BUFBhY2thZ2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TT0FQUGFja2FnZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTT0FQUGFja2FnZTwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPlNPQVBQYWNrYWdlPC9CPjwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSA8dWw+Ci0gICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSA8L3VsPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT5TT0FQRmFjdG9yeTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIAotICAgZWFjaCBjbGFzcywKLSAgIGVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLAotICAgZWFjaCBlbnVtLAotICAgYW5kIGVhY2ggZGF0YSB0eXBlCi0gCi0gPCE8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2VOQU1FIj5lTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcGFja2FnZSBuYW1lPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZU5TX1BSRUZJWCI+ZU5TX1BSRUZJWDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2VOU19VUkkiPmVOU19VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQUREUkVTUyI+SVNPQVBfQUREUkVTUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPklTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQWRkcmVzczwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQklORElORyI+SVNPQVBfQklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPklTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQmluZGluZzwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfQk9EWSI+SVNPQVBfQk9EWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJvZHk8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQiPklTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQm9keTwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfRkFVTFQiPklTT0FQX0ZBVUxUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+SVNPQVAgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj5JU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBGYXVsdDwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfSEVBREVSIj5JU09BUF9IRUFERVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9IRUFERVJfRkFVTFQiPklTT0FQX0hFQURFUl9GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI0lTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UIj5JU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVCI+SVNPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEhlYWRlcjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNPQVBfT1BFUkFUSU9OIj5JU09BUF9PUEVSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBPcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNJU09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCI+SVNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjSVNUUklORyI+SVNUUklORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPklTdHJpbmc8L2VtPicgZGF0YSB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1MiPlNPQVBfQUREUkVTUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+U09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0VMRU1FTlQiPlNPQVBfQUREUkVTU19fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSI+U09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSI+U09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfX1JFUVVJUkVEIj5TT0FQX0FERFJFU1NfX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+U09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFkZHJlc3M8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElORyI+U09BUF9CSU5ESU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fRUxFTUVOVCI+U09BUF9CSU5ESU5HX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fRUxFTUVOVF9UWVBFIj5TT0FQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fUkVRVUlSRUQiPlNPQVBfQklORElOR19fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fU1RZTEUiPlNPQVBfQklORElOR19fU1RZTEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSI+U09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQklORElOR19GRUFUVVJFX0NPVU5UIj5TT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZzwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZIj5TT0FQX0JPRFk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5Cb2R5PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlNPQVBfQk9EWV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj5TT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VMRU1FTlQiPlNPQVBfQk9EWV9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VMRU1FTlRfVFlQRSI+U09BUF9CT0RZX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0JPRFlfX0VQQVJUUyI+U09BUF9CT0RZX19FUEFSVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSI+U09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9fUkVRVUlSRUQiPlNPQVBfQk9EWV9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9fVVNFIj5TT0FQX0JPRFlfX1VTRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfQk9EWV9GRUFUVVJFX0NPVU5UIj5TT0FQX0JPRFlfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Qm9keTwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVCI+U09BUF9GQVVMVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkZhdWx0PC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTIj5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fRUxFTUVOVCI+U09BUF9GQVVMVF9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0ZBVUxUX19FTEVNRU5UX1RZUEUiPlNPQVBfRkFVTFRfX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX05BTUUiPlNPQVBfRkFVTFRfX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+U09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0ZBVUxUX19SRVFVSVJFRCI+U09BUF9GQVVMVF9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfRkFVTFRfX1VTRSI+U09BUF9GQVVMVF9fVVNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj5TT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkZhdWx0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUiI+U09BUF9IRUFERVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0hFQURFUl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVMiPlNPQVBfSEVBREVSX19FRU5DT0RJTkdfU1RZTEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VMRU1FTlQiPlNPQVBfSEVBREVSX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19FTEVNRU5UX1RZUEUiPlNPQVBfSEVBREVSX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fRU1FU1NBR0UiPlNPQVBfSEVBREVSX19FTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX0VQQVJUIj5TT0FQX0hFQURFUl9fRVBBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTIj5TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SGVhZGVyIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3Q8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19NRVNTQUdFIj5TT0FQX0hFQURFUl9fTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSSI+U09BUF9IRUFERVJfX05BTUVTUEFDRV9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfX1BBUlQiPlNPQVBfSEVBREVSX19QQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX19SRVFVSVJFRCI+U09BUF9IRUFERVJfX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9fVVNFIj5TT0FQX0hFQURFUl9fVVNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRSI+U09BUF9IRUFERVJfQkFTRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkhlYWRlciBCYXNlPC9lbT48L0NPREU+JyBjbGFzczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTIj5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVCI+U09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEUiPlNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFIj5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fRVBBUlQiPlNPQVBfSEVBREVSX0JBU0VfX0VQQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFIj5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkkiPlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9fUEFSVCI+U09BUF9IRUFERVJfQkFTRV9fUEFSVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRCI+U09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0JBU0VfX1VTRSI+U09BUF9IRUFERVJfQkFTRV9fVVNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UIj5TT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlciBCYXNlPC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVCI+U09BUF9IRUFERVJfRkFVTFQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXIgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5TT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMiPlNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlQiPlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUiPlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fRU1FU1NBR0UiPlNPQVBfSEVBREVSX0ZBVUxUX19FTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX0VQQVJUIj5TT0FQX0hFQURFUl9GQVVMVF9fRVBBUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19NRVNTQUdFIj5TT0FQX0hFQURFUl9GQVVMVF9fTUVTU0FHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+U09BUF9IRUFERVJfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfX1BBUlQiPlNPQVBfSEVBREVSX0ZBVUxUX19QQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfSEVBREVSX0ZBVUxUX19SRVFVSVJFRCI+U09BUF9IRUFERVJfRkFVTFRfX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GQVVMVF9fVVNFIj5TT0FQX0hFQURFUl9GQVVMVF9fVVNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCI+U09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UIj5TT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXI8L2VtPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OIj5TT0FQX09QRVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPk9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3M8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPlNPQVBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fRUxFTUVOVCI+U09BUF9PUEVSQVRJT05fX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSI+U09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX19SRVFVSVJFRCI+U09BUF9PUEVSQVRJT05fX1JFUVVJUkVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJIj5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Tb2FwIEFjdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjU09BUF9PUEVSQVRJT05fX1NUWUxFIj5TT0FQX09QRVJBVElPTl9fU1RZTEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI1NPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPlNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9wZXJhdGlvbjwvZW0+JyBjbGFzczwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldElTT0FQQWRkcmVzcygpIj5nZXRJU09BUEFkZHJlc3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JU09BUCBBZGRyZXNzPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0SVNPQVBCaW5kaW5nKCkiPmdldElTT0FQQmluZGluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEJpbmRpbmc8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRJU09BUEJvZHkoKSI+Z2V0SVNPQVBCb2R5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNPQVAgQm9keTwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldElTT0FQRmF1bHQoKSI+Z2V0SVNPQVBGYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEZhdWx0PC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0SVNPQVBIZWFkZXIoKSI+Z2V0SVNPQVBIZWFkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXI8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRJU09BUEhlYWRlckZhdWx0KCkiPmdldElTT0FQSGVhZGVyRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPjwvQ09ERT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRJU09BUE9wZXJhdGlvbigpIj5nZXRJU09BUE9wZXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RURhdGFUeXBlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldElTdHJpbmcoKSI+Z2V0SVN0cmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxDT0RFPjxlbT5JU3RyaW5nPC9lbT48L0NPREU+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCkiPmdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEFkZHJlc3MoKSI+Z2V0U09BUEFkZHJlc3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkFkZHJlc3M8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCaW5kaW5nX1N0eWxlKCkiPmdldFNPQVBCaW5kaW5nX1N0eWxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCkiPmdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNnZXRUcmFuc3BvcnRVUkkoKSI+PENPREU+PGVtPlRyYW5zcG9ydCBVUkk8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJpbmRpbmcoKSI+Z2V0U09BUEJpbmRpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpIj5nZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRFRW5jb2RpbmdTdHlsZXMoKSI+PENPREU+PGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCb2R5X0VQYXJ0cygpIj5nZXRTT0FQQm9keV9FUGFydHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRFUGFydHMoKSI+PENPREU+PGVtPkVQYXJ0czwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCkiPmdldFNPQVBCb2R5X05hbWVzcGFjZVVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+PGVtPk5hbWVzcGFjZSBVUkk8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBCb2R5X1VzZSgpIj5nZXRTT0FQQm9keV9Vc2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHkoKSI+Z2V0U09BUEJvZHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkJvZHk8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmFjdG9yeSgpIj5nZXRTT0FQRmFjdG9yeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlcygpIj5nZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBGYXVsdF9OYW1lKCkiPmdldFNPQVBGYXVsdF9OYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCkiPmdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0X1VzZSgpIj5nZXRTT0FQRmF1bHRfVXNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHQoKSI+Z2V0U09BUEZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFUmVmZXJlbmNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJfSGVhZGVyRmF1bHRzKCkiPmdldFNPQVBIZWFkZXJfSGVhZGVyRmF1bHRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCNnZXRIZWFkZXJGYXVsdHMoKSI+PENPREU+PGVtPkhlYWRlciBGYXVsdHM8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlcigpIj5nZXRTT0FQSGVhZGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkhlYWRlcjwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCkiPmdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVFbmNvZGluZ1N0eWxlcygpIj48Q09ERT48ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VSZWZlcmVuY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKSI+Z2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RVJlZmVyZW5jZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9FUGFydCgpIj5nZXRTT0FQSGVhZGVyQmFzZV9FUGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKSI+Z2V0U09BUEhlYWRlckJhc2VfTWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRNZXNzYWdlKCkiPjxDT0RFPjxlbT5NZXNzYWdlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUF0dHJpYnV0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKSI+Z2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VBdHRyaWJ1dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2VfUGFydCgpIj5nZXRTT0FQSGVhZGVyQmFzZV9QYXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFBhcnQoKSI+PENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlX1VzZSgpIj5nZXRTT0FQSGVhZGVyQmFzZV9Vc2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQ2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2UoKSI+Z2V0U09BUEhlYWRlckJhc2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkhlYWRlciBCYXNlPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7RUNsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJGYXVsdCgpIj5nZXRTT0FQSGVhZGVyRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5IZWFkZXIgRmF1bHQ8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpIj5nZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTb2FwQWN0aW9uVVJJKCkiPjxDT0RFPjxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtFQXR0cmlidXRlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBPcGVyYXRpb25fU3R5bGUoKSI+Z2V0U09BUE9wZXJhdGlvbl9TdHlsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VDbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQT3BlcmF0aW9uKCkiPmdldFNPQVBPcGVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+T3BlcmF0aW9uPC9lbT48L0NPREU+PC9BPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJlTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotZU5BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPmVOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBwYWNrYWdlIG5hbWUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLmVOQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVOU19VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLWVOU19VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPmVOU19VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuZU5TX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlTlNfUFJFRklYIj48IS0tIC0tPjwvQT48SDM+Ci1lTlNfUFJFRklYPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5lTlNfUFJFRklYPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5lTlNfUFJFRklYIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVJTlNUQU5DRSI+PCEtLSAtLT48L0E+PEgzPgotZUlOU1RBTkNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT4gPEI+ZUlOU1RBTkNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQklORElORyI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CSU5ESU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQklORElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBCaW5kaW5nSW1wbDwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldFNPQVBCaW5kaW5nKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0JJTkRJTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JJTkRJTkdfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9CSU5ESU5HX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JJTkRJTkdfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JJTkRJTkdfX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQklORElOR19fUkVRVUlSRUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQklORElOR19fRUxFTUVOVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQklORElOR19fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JJTkRJTkdfX1NUWUxFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JJTkRJTkdfX1NUWUxFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQklORElOR19fU1RZTEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fU1RZTEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0JPRFkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQk9EWTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0JPRFk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5Cb2R5PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQQm9keUltcGw8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRTT0FQQm9keSgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JPRFlfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0JPRFlfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CT0RZX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQk9EWV9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0JPRFlfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CT0RZX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CT0RZX19SRVFVSVJFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0JPRFlfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0JPRFlfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JPRFlfX0VMRU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0JPRFlfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUxFTUVOVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fVVNFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JPRFlfX1VTRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0JPRFlfX1VTRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fVVNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQk9EWV9fRVBBUlRTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0JPRFlfX0VQQVJUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0JPRFlfX0VQQVJUUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Cb2R5PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9CQVNFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0JBU0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXIgQmFzZTwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEhlYWRlckJhc2VJbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUEhlYWRlckJhc2UoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX1VTRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfQkFTRV9fVVNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0JBU0VfX1VTRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1VTRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX1BBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfX1BBUlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfQkFTRV9fUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfQkFTRV9fRVBBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfX0VQQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0JBU0VfX0VQQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0JBU0VfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlciBCYXNlPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9GQVVMVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9GQVVMVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0ZBVUxUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBGYXVsdEltcGw8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRTT0FQRmF1bHQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfRkFVTFQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfRkFVTFRfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9GQVVMVF9fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19SRVFVSVJFRDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0ZBVUxUX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9GQVVMVF9fRUxFTUVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9GQVVMVF9fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUxFTUVOVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfX1VTRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9GQVVMVF9fVVNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfRkFVTFRfX1VTRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX1VTRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfRkFVTFRfX05BTUU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9GQVVMVF9fTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmF1bHQ8L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9PUEVSQVRJT048L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9PUEVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBPcGVyYXRpb25JbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUE9wZXJhdGlvbigpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX09QRVJBVElPTl9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9PUEVSQVRJT05fX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9PUEVSQVRJT05fX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9PUEVSQVRJT05fX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX09QRVJBVElPTl9fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9PUEVSQVRJT05fX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX09QRVJBVElPTl9fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfT1BFUkFUSU9OX19TVFlMRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9PUEVSQVRJT05fX1NUWUxFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfT1BFUkFUSU9OX19TVFlMRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfQUREUkVTUyI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9BRERSRVNTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQUREUkVTUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPkFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBBZGRyZXNzSW1wbDwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldFNPQVBBZGRyZXNzKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0FERFJFU1MiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQUREUkVTU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQUREUkVTU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9BRERSRVNTX19FTEVNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0FERFJFU1NfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9BRERSRVNTX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0FERFJFU1NfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0FERFJFU1NfX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQUREUkVTU19fUkVRVUlSRUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQUREUkVTU19fRUxFTUVOVF9UWVBFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQUREUkVTU19fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZGRyZXNzPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9GQVVMVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfRkFVTFQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfRkFVTFQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXIgRmF1bHQ8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXJGYXVsdEltcGw8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRTT0FQSGVhZGVyRmF1bHQoKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0ZBVUxUX19SRVFVSVJFRCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfRkFVTFRfX1JFUVVJUkVEPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0ZBVUxUX19SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFRfX1JFUVVJUkVEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEU8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlRfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfRkFVTFRfX1VTRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfRkFVTFRfX1VTRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9GQVVMVF9fVVNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFRfX1VTRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9GQVVMVF9fTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfRkFVTFRfX05BTUVTUEFDRV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFRfX05BTUVTUEFDRV9VUkkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfRkFVTFRfX01FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19NRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0ZBVUxUX19NRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19NRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0ZBVUxUX19QQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9GQVVMVF9fUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9GQVVMVF9fUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GQVVMVF9fUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9GQVVMVF9fRU1FU1NBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19FTUVTU0FHRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9GQVVMVF9fRU1FU1NBR0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FTUVTU0FHRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9GQVVMVF9fRVBBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZBVUxUX19FUEFSVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9GQVVMVF9fRVBBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUX19FUEFSVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlciBGYXVsdDwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUiI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVI8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVI8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5IZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXJJbXBsPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0U09BUEhlYWRlcigpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVIiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9fRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VMRU1FTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfX1JFUVVJUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9fUkVRVUlSRUQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfX1JFUVVJUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfX0VMRU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0VMRU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9fRUxFTUVOVF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VMRU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9fVVNFIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9fVVNFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX19VU0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fVVNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX19OQU1FU1BBQ0VfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSTwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fTkFNRVNQQUNFX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9fRUVOQ09ESU5HX1NUWUxFUyI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVM8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fRUVOQ09ESU5HX1NUWUxFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTT0FQX0hFQURFUl9fTUVTU0FHRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX01FU1NBR0U8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfX01FU1NBR0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX01FU1NBR0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU09BUF9IRUFERVJfX1BBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX19QQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX19QQVJUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19QQVJUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX19FTUVTU0FHRSI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0VNRVNTQUdFPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX19FTUVTU0FHRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VNRVNTQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX19FUEFSVCI+PCEtLSAtLT48L0E+PEgzPgotU09BUF9IRUFERVJfX0VQQVJUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPlNPQVBfSEVBREVSX19FUEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0VQQVJUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTIj48IS0tIC0tPjwvQT48SDM+Ci1TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SGVhZGVyIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNPQVBfSEVBREVSX0ZFQVRVUkVfQ09VTlQ8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+U09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SGVhZGVyPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5TT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0JJTkRJTkciPjwhLS0gLS0+PC9BPjxIMz4KLUlTT0FQX0JJTkRJTkc8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SVNPQVBfQklORElORzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJpbmRpbmc8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBCaW5kaW5nPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0SVNPQVBCaW5kaW5nKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9CSU5ESU5HIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQmluZGluZzwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0FERFJFU1MiPjwhLS0gLS0+PC9BPjxIMz4KLUlTT0FQX0FERFJFU1M8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SVNPQVBfQUREUkVTUzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEFkZHJlc3M8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBBZGRyZXNzPC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0SVNPQVBBZGRyZXNzKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9BRERSRVNTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQWRkcmVzczwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0JPRFkiPjwhLS0gLS0+PC9BPjxIMz4KLUlTT0FQX0JPRFk8L0gzPgotPFBSRT4KLXN0YXRpYyBmaW5hbCBpbnQgPEI+SVNPQVBfQk9EWTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEJvZHk8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBCb2R5PC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0SVNPQVBCb2R5KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9CT0RZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQm9keTwvZW0+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfQk9EWV9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0ZBVUxUIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9GQVVMVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JU09BUF9GQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEZhdWx0PC9lbT48L0NPREU+JyBjbGFzcy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQRmF1bHQ8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRJU09BUEZhdWx0KCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9GQVVMVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEZhdWx0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX09QRVJBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfT1BFUkFUSU9OPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX09QRVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUE9wZXJhdGlvbjwvQ09ERT4sIAotPENPREU+U09BUFBhY2thZ2VJbXBsLmdldElTT0FQT3BlcmF0aW9uKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9PUEVSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSVNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBPcGVyYXRpb248L2VtPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLklTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0hFQURFUl9GQVVMVCI+PCEtLSAtLT48L0E+PEgzPgotSVNPQVBfSEVBREVSX0ZBVUxUPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTT0FQX0hFQURFUl9GQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPENPREU+PGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+PC9DT0RFPicgY2xhc3MuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEhlYWRlckZhdWx0PC9DT0RFPiwgCi08Q09ERT5TT0FQUGFja2FnZUltcGwuZ2V0SVNPQVBIZWFkZXJGYXVsdCgpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfSEVBREVSX0ZBVUxUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU09BUF9IRUFERVIiPjwhLS0gLS0+PC9BPjxIMz4KLUlTT0FQX0hFQURFUjwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JU09BUF9IRUFERVI8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxDT0RFPjxlbT5JU09BUCBIZWFkZXI8L2VtPjwvQ09ERT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXI8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRJU09BUEhlYWRlcigpPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UuSVNPQVBfSEVBREVSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UIj48IS0tIC0tPjwvQT48SDM+Ci1JU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVDwvSDM+Ci08UFJFPgotc3RhdGljIGZpbmFsIGludCA8Qj5JU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nIGNsYXNzLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJU1RSSU5HIj48IS0tIC0tPjwvQT48SDM+Ci1JU1RSSU5HPC9IMz4KLTxQUkU+Ci1zdGF0aWMgZmluYWwgaW50IDxCPklTVFJJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5JU3RyaW5nPC9lbT4nIGRhdGEgdHlwZS4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TdHJpbmc8L0NPREU+LCAKLTxDT0RFPlNPQVBQYWNrYWdlSW1wbC5nZXRJU3RyaW5nKCk8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5JU1RSSU5HIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0U09BUEJpbmRpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEJpbmRpbmc8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRTT0FQQmluZGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+QmluZGluZzwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT5TT0FQQmluZGluZzwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQQmluZGluZ19UcmFuc3BvcnRVUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNnZXRUcmFuc3BvcnRVUkkoKSI+PENPREU+PGVtPlRyYW5zcG9ydCBVUkk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRyYW5zcG9ydCBVUkk8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwjZ2V0VHJhbnNwb3J0VVJJKCkiPjxDT0RFPlNPQVBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJpbmRpbmcoKSI+PENPREU+Z2V0U09BUEJpbmRpbmcoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQQmluZGluZ19TdHlsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQQmluZGluZ19TdHlsZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQQmluZGluZ19TdHlsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCNnZXRTdHlsZSgpIj48Q09ERT48ZW0+U3R5bGU8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0eWxlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sI2dldFN0eWxlKCkiPjxDT0RFPlNPQVBCaW5kaW5nLmdldFN0eWxlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQmluZGluZygpIj48Q09ERT5nZXRTT0FQQmluZGluZygpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBCb2R5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBCb2R5PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0U09BUEJvZHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkJvZHk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Cb2R5PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+U09BUEJvZHk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUEJvZHlfVXNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBCb2R5X1VzZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQQm9keV9Vc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0VXNlKCkiPjxDT0RFPjxlbT5Vc2U8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRVc2UoKSI+PENPREU+U09BUEJvZHkuZ2V0VXNlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQm9keSgpIj48Q09ERT5nZXRTT0FQQm9keSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBCb2R5X05hbWVzcGFjZVVSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQQm9keV9OYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PENPREU+U09BUEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQm9keSgpIj48Q09ERT5nZXRTT0FQQm9keSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXM8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0RUVuY29kaW5nU3R5bGVzKCkiPjxDT0RFPjxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwjZ2V0RUVuY29kaW5nU3R5bGVzKCkiPjxDT0RFPlNPQVBCb2R5LmdldEVFbmNvZGluZ1N0eWxlcygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEJvZHkoKSI+PENPREU+Z2V0U09BUEJvZHkoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQQm9keV9FUGFydHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEJvZHlfRVBhcnRzPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFNPQVBCb2R5X0VQYXJ0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sI2dldEVQYXJ0cygpIj48Q09ERT48ZW0+RVBhcnRzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkVQYXJ0czwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCNnZXRFUGFydHMoKSI+PENPREU+U09BUEJvZHkuZ2V0RVBhcnRzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQQm9keSgpIj48Q09ERT5nZXRTT0FQQm9keSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBIZWFkZXJCYXNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBIZWFkZXJCYXNlPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0U09BUEhlYWRlckJhc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkhlYWRlciBCYXNlPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT5TT0FQSGVhZGVyQmFzZTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEhlYWRlckJhc2VfVXNlPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFNPQVBIZWFkZXJCYXNlX1VzZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRVc2UoKSI+PENPREU+PGVtPlVzZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXNlPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFVzZSgpIj48Q09ERT5TT0FQSGVhZGVyQmFzZS5nZXRVc2UoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlKCkiPjxDT0RFPmdldFNPQVBIZWFkZXJCYXNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPjxlbT5OYW1lc3BhY2UgVVJJPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT5TT0FQSGVhZGVyQmFzZS5nZXROYW1lc3BhY2VVUkkoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlKCkiPjxDT0RFPmdldFNPQVBIZWFkZXJCYXNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlczwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFRW5jb2RpbmdTdHlsZXMoKSI+PENPREU+PGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFRW5jb2RpbmdTdHlsZXMoKSI+PENPREU+U09BUEhlYWRlckJhc2UuZ2V0RUVuY29kaW5nU3R5bGVzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZSgpIj48Q09ERT5nZXRTT0FQSGVhZGVyQmFzZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEhlYWRlckJhc2VfTWVzc2FnZTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldE1lc3NhZ2UoKSI+PENPREU+PGVtPk1lc3NhZ2U8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1lc3NhZ2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0TWVzc2FnZSgpIj48Q09ERT5TT0FQSGVhZGVyQmFzZS5nZXRNZXNzYWdlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZSgpIj48Q09ERT5nZXRTT0FQSGVhZGVyQmFzZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEhlYWRlckJhc2VfUGFydDwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQSGVhZGVyQmFzZV9QYXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldFBhcnQoKSI+PENPREU+PGVtPlBhcnQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBhcnQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0UGFydCgpIj48Q09ERT5TT0FQSGVhZGVyQmFzZS5nZXRQYXJ0KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQSGVhZGVyQmFzZSgpIj48Q09ERT5nZXRTT0FQSGVhZGVyQmFzZSgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlPC9IMz4KLTxQUkU+Ci1FUmVmZXJlbmNlIDxCPmdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU1lc3NhZ2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+U09BUEhlYWRlckJhc2UuZ2V0RU1lc3NhZ2UoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXJCYXNlKCkiPjxDT0RFPmdldFNPQVBIZWFkZXJCYXNlKCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQ8L0gzPgotPFBSRT4KLUVSZWZlcmVuY2UgPEI+Z2V0U09BUEhlYWRlckJhc2VfRVBhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RVBhcnQoKSI+PENPREU+PGVtPkVQYXJ0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FUGFydDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFUGFydCgpIj48Q09ERT5TT0FQSGVhZGVyQmFzZS5nZXRFUGFydCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEhlYWRlckJhc2UoKSI+PENPREU+Z2V0U09BUEhlYWRlckJhc2UoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEZhdWx0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0U09BUEZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+RmF1bHQ8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT5TT0FQRmF1bHQ8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUEZhdWx0X1VzZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQRmF1bHRfVXNlPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFNPQVBGYXVsdF9Vc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldFVzZSgpIj48Q09ERT48ZW0+VXNlPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2U8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldFVzZSgpIj48Q09ERT5TT0FQRmF1bHQuZ2V0VXNlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHQoKSI+PENPREU+Z2V0U09BUEZhdWx0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUEZhdWx0X05hbWVzcGFjZVVSSSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sI2dldE5hbWVzcGFjZVVSSSgpIj48Q09ERT48ZW0+TmFtZXNwYWNlIFVSSTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPjxDT0RFPlNPQVBGYXVsdC5nZXROYW1lc3BhY2VVUkkoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBGYXVsdCgpIj48Q09ERT5nZXRTT0FQRmF1bHQoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBGYXVsdF9FRW5jb2RpbmdTdHlsZXM8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+U09BUEZhdWx0PC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEZhdWx0KCkiPjxDT0RFPmdldFNPQVBGYXVsdCgpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBGYXVsdF9OYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBGYXVsdF9OYW1lPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFNPQVBGYXVsdF9OYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPjxlbT5OYW1lPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCNnZXROYW1lKCkiPjxDT0RFPlNPQVBGYXVsdC5nZXROYW1lKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmF1bHQoKSI+PENPREU+Z2V0U09BUEZhdWx0KCk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUE9wZXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQT3BlcmF0aW9uPC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0U09BUE9wZXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5PcGVyYXRpb248L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPlNPQVBPcGVyYXRpb248L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U09BUE9wZXJhdGlvbl9Tb2FwQWN0aW9uVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSTwvSDM+Ci08UFJFPgotRUF0dHJpYnV0ZSA8Qj5nZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTb2FwQWN0aW9uVVJJKCkiPjxDT0RFPjxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI2dldFNvYXBBY3Rpb25VUkkoKSI+PENPREU+U09BUE9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQT3BlcmF0aW9uKCkiPjxDT0RFPmdldFNPQVBPcGVyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQT3BlcmF0aW9uX1N0eWxlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBPcGVyYXRpb25fU3R5bGU8L0gzPgotPFBSRT4KLUVBdHRyaWJ1dGUgPEI+Z2V0U09BUE9wZXJhdGlvbl9TdHlsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sI2dldFN0eWxlKCkiPjxDT0RFPjxlbT5TdHlsZTwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3R5bGU8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCNnZXRTdHlsZSgpIj48Q09ERT5TT0FQT3BlcmF0aW9uLmdldFN0eWxlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQT3BlcmF0aW9uKCkiPjxDT0RFPmdldFNPQVBPcGVyYXRpb24oKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQQWRkcmVzcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQQWRkcmVzczwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldFNPQVBBZGRyZXNzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPjxlbT5BZGRyZXNzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPlNPQVBBZGRyZXNzPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJPC9IMz4KLTxQUkU+Ci1FQXR0cmlidXRlIDxCPmdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxDT0RFPjxlbT5Mb2NhdGlvbiBVUkk8L2VtPjwvQ09ERT48L0E+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCNnZXRMb2NhdGlvblVSSSgpIj48Q09ERT5TT0FQQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZ2V0U09BUEFkZHJlc3MoKSI+PENPREU+Z2V0U09BUEFkZHJlc3MoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQSGVhZGVyRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U09BUEhlYWRlckZhdWx0PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0U09BUEhlYWRlckZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Q09ERT48ZW0+SGVhZGVyIEZhdWx0PC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxDT0RFPlNPQVBIZWFkZXJGYXVsdDwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQSGVhZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBIZWFkZXI8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRTT0FQSGVhZGVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+PGVtPkhlYWRlcjwvZW0+PC9DT0RFPjwvQT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PENPREU+U09BUEhlYWRlcjwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0czwvSDM+Ci08UFJFPgotRVJlZmVyZW5jZSA8Qj5nZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwjZ2V0SGVhZGVyRmF1bHRzKCkiPjxDT0RFPjxlbT5IZWFkZXIgRmF1bHRzPC9lbT48L0NPREU+PC9BPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkhlYWRlciBGYXVsdHM8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCNnZXRIZWFkZXJGYXVsdHMoKSI+PENPREU+U09BUEhlYWRlci5nZXRIZWFkZXJGYXVsdHMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sI2dldFNPQVBIZWFkZXIoKSI+PENPREU+Z2V0U09BUEhlYWRlcigpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElTT0FQQmluZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJU09BUEJpbmRpbmc8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJU09BUEJpbmRpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JU09BUCBCaW5kaW5nPC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU09BUCBCaW5kaW5nPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBCaW5kaW5nPC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SVNPQVBBZGRyZXNzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElTT0FQQWRkcmVzczwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElTT0FQQWRkcmVzczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEFkZHJlc3M8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEFkZHJlc3M8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJU09BUEJvZHkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SVNPQVBCb2R5PC9IMz4KLTxQUkU+Ci1FQ2xhc3MgPEI+Z2V0SVNPQVBCb2R5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNPQVAgQm9keTwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQm9keTwvZW0+Jy48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5TT0FQQm9keTwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldElTT0FQRmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SVNPQVBGYXVsdDwvSDM+Ci08UFJFPgotRUNsYXNzIDxCPmdldElTT0FQRmF1bHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxDT0RFPjxlbT5JU09BUCBGYXVsdDwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEZhdWx0PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SVNPQVBPcGVyYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SVNPQVBPcGVyYXRpb248L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJU09BUE9wZXJhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBPcGVyYXRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJU09BUEhlYWRlckZhdWx0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElTT0FQSGVhZGVyRmF1bHQ8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJU09BUEhlYWRlckZhdWx0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8Q09ERT48ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT48L0NPREU+Jy4KLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPicuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+U09BUEhlYWRlckZhdWx0PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SVNPQVBIZWFkZXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SVNPQVBIZWFkZXI8L0gzPgotPFBSRT4KLUVDbGFzcyA8Qj5nZXRJU09BUEhlYWRlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPENPREU+PGVtPklTT0FQIEhlYWRlcjwvZW0+PC9DT0RFPicuCi0gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlNPQVBIZWFkZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJU3RyaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldElTdHJpbmc8L0gzPgotPFBSRT4KLUVEYXRhVHlwZSA8Qj5nZXRJU3RyaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPENPREU+PGVtPklTdHJpbmc8L2VtPjwvQ09ERT4nLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5JU3RyaW5nPC9lbT4nLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlN0cmluZzwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNPQVBGYWN0b3J5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNPQVBGYWN0b3J5PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPiA8Qj5nZXRTT0FQRmFjdG9yeTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9TT0FQUGFja2FnZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQQWRkcmVzcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQQWRkcmVzcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTViNDU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEFkZHJlc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQQWRkcmVzcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQWRkcmVzczwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBBZGRyZXNzPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBBZGRyZXNzPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQWRkcmVzczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U09BUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sI2NyZWF0ZVNPQVBBZGRyZXNzKCkiPmNyZWF0ZVNPQVBBZGRyZXNzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZGRyZXNzPC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQQWRkcmVzcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBBZGRyZXNzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBCaW5kaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBCaW5kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMTBlOTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQQmluZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEJpbmRpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCaW5kaW5nPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJpbmRpbmc8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJpbmRpbmc8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBCaW5kaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TT0FQRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEJpbmRpbmcoKSI+Y3JlYXRlU09BUEJpbmRpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEJpbmRpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEJvZHkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEJvZHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQzNjAwMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBCb2R5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9cY2xhc3MtdXNlU09BUEJvZHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQQm9keS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJvZHk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJvZHk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNPQVBGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQQm9keSgpIj5jcmVhdGVTT0FQQm9keTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Qm9keTwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9cY2xhc3MtdXNlU09BUEJvZHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQQm9keS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2RmYjU2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3RvcnkKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3RvcnkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5GaWVsZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+IGRlY2xhcmVkIGFzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhY3Rvcnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TT0FQRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhY3Rvcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNPQVBQYWNrYWdlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCNnZXRTT0FQRmFjdG9yeSgpIj5nZXRTT0FQRmFjdG9yeTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBGYXVsdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQRmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlMjVmZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBGYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEZhdWx0PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmF1bHQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNPQVBGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQRmF1bHQoKSI+Y3JlYXRlU09BUEZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQSGVhZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBIZWFkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5YmFjOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBIZWFkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQSGVhZGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEhlYWRlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXI8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXI8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNPQVBGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNjcmVhdGVTT0FQSGVhZGVyKCkiPmNyZWF0ZVNPQVBIZWFkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQSGVhZGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEhlYWRlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQSGVhZGVyQmFzZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQSGVhZGVyQmFzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmM3YjdlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEhlYWRlckJhc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQSGVhZGVyQmFzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBIZWFkZXJCYXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5TdWJpbnRlcmZhY2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJGYXVsdDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgRmF1bHQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U09BUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sI2NyZWF0ZVNPQVBIZWFkZXJCYXNlKCkiPmNyZWF0ZVNPQVBIZWFkZXJCYXNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgQmFzZTwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9cY2xhc3MtdXNlU09BUEhlYWRlckJhc2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQSGVhZGVyQmFzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQSGVhZGVyRmF1bHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEhlYWRlckZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2N2MwNWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQSGVhZGVyRmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckZhdWx0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJGYXVsdDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckZhdWx0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckZhdWx0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TT0FQRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwjY3JlYXRlU09BUEhlYWRlckZhdWx0KCkiPmNyZWF0ZVNPQVBIZWFkZXJGYXVsdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9cY2xhc3MtdXNlU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBPcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUE9wZXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzU4M2I2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUE9wZXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUE9wZXJhdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUE9wZXJhdGlvbjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBPcGVyYXRpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUE9wZXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U09BUEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sI2NyZWF0ZVNPQVBPcGVyYXRpb24oKSI+Y3JlYXRlU09BUE9wZXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkODFlYTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5MaXRlcmFscwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5MaXRlcmFscyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvXGNsYXNzLXVzZVNPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZS5MaXRlcmFscwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9cY2xhc3MtdXNlU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQUGFja2FnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQUGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2NjNmY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUFBhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1xjbGFzcy11c2VTT0FQUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNPQVBQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5GaWVsZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+IGRlY2xhcmVkIGFzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBQYWNrYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TT0FQUGFja2FnZS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwjZUlOU1RBTkNFIj5lSU5TVEFOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNPQVBGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuaHRtbCNnZXRTT0FQUGFja2FnZSgpIj5nZXRTT0FQUGFja2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9cY2xhc3MtdXNlU09BUFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTT0FQUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UtZnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MGFiM2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UtZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCBwYWNrYWdlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZVRpdGxlRm9udCI+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotSW50ZXJmYWNlczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IlNPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBBZGRyZXNzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBCaW5kaW5nPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBCb2R5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBGYWN0b3J5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQRmF1bHQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQSGVhZGVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBIZWFkZXJCYXNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQSGVhZGVyRmF1bHQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5TT0FQT3BlcmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBQYWNrYWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9JPjwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2MzczYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08SDI+Ci1QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcAotPC9IMj4KLQotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi08UD4KLTxCPlNlZTo8L0I+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8QSBIUkVGPSIjcGFja2FnZV9kZXNjcmlwdGlvbiI+PEI+RGVzY3JpcHRpb248L0I+PC9BPgotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+SW50ZXJmYWNlIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQWRkcmVzczwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQmluZGluZzwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQQm9keTwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Cb2R5PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5UaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYXVsdDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEJhc2U8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyRmF1bHQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEZhdWx0PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBPcGVyYXRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQUGFja2FnZTwvQT48L0I+PC9URD4KLTxURD5UaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUFBhY2thZ2UuTGl0ZXJhbHM8L0E+PC9CPjwvVEQ+Ci08VEQ+RGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotIAotICAgZWFjaCBjbGFzcywKLSAgIGVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLAotICAgZWFjaCBlbnVtLAotICAgYW5kIGVhY2ggZGF0YSB0eXBlCi0gCi0gPCE8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci08QSBOQU1FPSJwYWNrYWdlX2Rlc2NyaXB0aW9uIj48IS0tIC0tPjwvQT48SDI+Ci1QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCBEZXNjcmlwdGlvbgotPC9IMj4KLQotPFA+Ci08cD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotICAgICAgICAgICAgICAgIDwvcD4KLTx0YWJsZSB3aWR0aD0iNTAwIj4KLTx0cj4KLTx0ZD4KLTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLSAgICAgICAgICAgICAgICA8L3A+Ci08L3RkPgotPC90cj4KLTwvdGFibGU+Ci08UD4KLQotPFA+Ci08REw+Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXRyZWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXRyZWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmOWIyMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS10cmVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIENsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCBDbGFzcyBIaWVyYXJjaHkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5QUkVWPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAKLTwvSDI+Ci08L0NFTlRFUj4KLTxETD4KLTxEVD48Qj5QYWNrYWdlIEhpZXJhcmNoaWVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctdHJlZS5odG1sIj5BbGwgUGFja2FnZXM8L0E+PC9ETD4KLTxIUj4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJvZHk8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckJhc2U8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlcjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCkKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciAoYWxzbyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiAoYWxzbyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmEuaW8uU2VyaWFsaXphYmxlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQWRkcmVzczwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUFBhY2thZ2U8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBQYWNrYWdlLkxpdGVyYWxzPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMRWxlbWVudDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXJCYXNlPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uKQotPC9VTD4KLTwvVUw+Ci08L1VMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS10cmVlLmh0bWwiPjxCPlBSRVY8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+TkVYVDwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXVzZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UtdXNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZjVmYTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UtdXNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIFBhY2thZ2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotQ2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBBZGRyZXNzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQWRkcmVzczwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQQmluZGluZy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEJvZHkuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJvZHk8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBGYWN0b3J5Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmFjdG9yeTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUEZhdWx0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmF1bHQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBIZWFkZXIuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2NsYXNzLXVzZS9TT0FQSGVhZGVyQmFzZS5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckJhc2U8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEJhc2U8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBIZWFkZXJGYXVsdC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBGYXVsdDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9jbGFzcy11c2UvU09BUE9wZXJhdGlvbi5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUE9wZXJhdGlvbjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvY2xhc3MtdXNlL1NPQVBQYWNrYWdlLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQUGFja2FnZTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2ZTdiNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmc8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlQmluZGluZygpIj5jcmVhdGVCaW5kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+UG9ydC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPmdldEVCaW5kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+UG9ydC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI3NldEVCaW5kaW5nKG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcpIj5zZXRFQmluZGluZzwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sI2dldEVCaW5kaW5nKCkiPjxDT0RFPjxlbT5FQmluZGluZzwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VCaW5kaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdGYXVsdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdGYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDllM2I4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9CaW5kaW5nRmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlQmluZGluZ0ZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ0ZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdGYXVsdDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0ZhdWx0PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0ZhdWx0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVCaW5kaW5nRmF1bHQoKSI+Y3JlYXRlQmluZGluZ0ZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlQmluZGluZ0ZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ0ZhdWx0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZ0lucHV0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZ0lucHV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZThhODguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdJbnB1dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VCaW5kaW5nSW5wdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJCaW5kaW5nSW5wdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUJpbmRpbmdJbnB1dCgpIj5jcmVhdGVCaW5kaW5nSW5wdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+QmluZGluZ09wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+Z2V0RUJpbmRpbmdJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5CaW5kaW5nT3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjc2V0RUJpbmRpbmdJbnB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQpIj5zZXRFQmluZGluZ0lucHV0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdJbnB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nSW5wdXQoKSI+PENPREU+PGVtPkVCaW5kaW5nIElucHV0PC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlQmluZGluZ0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ0lucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZ09wZXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdPcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzMzdlZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZ09wZXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VCaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ09wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPcGVyYXRpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ09wZXJhdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ09wZXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlQmluZGluZ09wZXJhdGlvbigpIj5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VCaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iQmluZGluZ09wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdPdXRwdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9CaW5kaW5nT3V0cHV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZmU4MDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdPdXRwdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlQmluZGluZ091dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkJpbmRpbmdPdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPdXRwdXQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPdXRwdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUJpbmRpbmdPdXRwdXQoKSI+Y3JlYXRlQmluZGluZ091dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5CaW5kaW5nT3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjZ2V0RUJpbmRpbmdPdXRwdXQoKSI+Z2V0RUJpbmRpbmdPdXRwdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+QmluZGluZ09wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI3NldEVCaW5kaW5nT3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQpIj5zZXRFQmluZGluZ091dHB1dDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVCaW5kaW5nT3V0cHV0KCkiPjxDT0RFPjxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlQmluZGluZ091dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkJpbmRpbmdPdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9EZWZpbml0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRGVmaW5pdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjJhOGYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9EZWZpbml0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZURlZmluaXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJEZWZpbml0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb248L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlRGVmaW5pdGlvbigpIj5jcmVhdGVEZWZpbml0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+SW1wb3J0LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCNnZXRFRGVmaW5pdGlvbigpIj5nZXRFRGVmaW5pdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRWxlbWVudC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCNnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkiPmdldEVuY2xvc2luZ0RlZmluaXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBEZWZpbml0aW9uIHRoYXQgY29udGFpbnMgdGhpcyBXU0RMIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5EZWZpbml0aW9uPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5JbXBvcnQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sI3NldEVEZWZpbml0aW9uKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pIj5zZXRFRGVmaW5pdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwjZ2V0RURlZmluaXRpb24oKSI+PENPREU+PGVtPkVEZWZpbml0aW9uPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEVsZW1lbnQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKSI+c2V0RW5jbG9zaW5nRGVmaW5pdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4mbmJzcDtkZWZpbml0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgZW5jbG9zaW5nIGRlZmluaXRpb24gb2YgdGhpcyBXU0RMIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETFJlc291cmNlSW1wbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjZ2V0RGVmaW5pdGlvbigpIj5nZXREZWZpbml0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcmVzb3VyY2UncyBEZWZpbml0aW9uLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VEZWZpbml0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iRGVmaW5pdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1Y2IyNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzMyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5TdWJpbnRlcmZhY2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSI+Y3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5TdWJpbnRlcmZhY2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBFbmNvZGVkPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFVybFJlcGxhY2VtZW50PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+U3ViaW50ZXJmYWNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250ZW50PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYXJ0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPlN1YmludGVyZmFjZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEFkZHJlc3M8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJpbmRpbmc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJvZHk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9keTwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYXVsdDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEJhc2U8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyRmF1bHQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEZhdWx0PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBPcGVyYXRpb248L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCNjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+Y3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2xvY2FsTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0V4dGVuc2libGVFbGVtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2Yjc3OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5TdWJpbnRlcmZhY2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdGYXVsdDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIEZhdWx0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nSW5wdXQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBJbnB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkJpbmRpbmdPcGVyYXRpb248L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPcGVyYXRpb248L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3V0cHV0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZWZpbml0aW9uPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW1wb3J0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklucHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk91dHB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0IFR5cGU8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5TZXJ2aWNlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHlwZXM8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0ZhdWx0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyYTc4MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlRmF1bHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5GYXVsdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlRmF1bHQoKSI+Y3JlYXRlRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5CaW5kaW5nRmF1bHQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI2dldEVGYXVsdCgpIj5nZXRFRmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5CaW5kaW5nRmF1bHQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sI3NldEVGYXVsdChvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCkiPnNldEVGYXVsdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCNnZXRFRmF1bHQoKSI+PENPREU+PGVtPkVGYXVsdDwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlRmF1bHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJGYXVsdC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0ltcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0ltcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTQwM2RkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9JbXBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlSW1wb3J0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSW1wb3J0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkltcG9ydDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW1wb3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVJbXBvcnQoKSI+Y3JlYXRlSW1wb3J0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbXBvcnQ8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VJbXBvcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJJbXBvcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9JbnB1dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0lucHV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMjA1MzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0lucHV0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZUlucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSW5wdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZUlucHV0KCkiPmNyZWF0ZUlucHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnB1dDwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+T3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCNnZXRFSW5wdXQoKSI+Z2V0RUlucHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkJpbmRpbmdJbnB1dC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPmdldEVJbnB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPk9wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjc2V0RUlucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KSI+c2V0RUlucHV0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVJbnB1dCgpIj48Q09ERT48ZW0+RUlucHV0PC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+QmluZGluZ0lucHV0LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCNzZXRFSW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpIj5zZXRFSW5wdXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbnB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0Lmh0bWwjZ2V0RUlucHV0KCkiPjxDT0RFPjxlbT5FSW5wdXQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZUlucHV0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iSW5wdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9NZXNzYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvTWVzc2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTkzODhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9NZXNzYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZU1lc3NhZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJNZXNzYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZU1lc3NhZ2UoKSI+Y3JlYXRlTWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlBhcnQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCNnZXRFTWVzc2FnZSgpIj5nZXRFTWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NZXNzYWdlUmVmZXJlbmNlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+Z2V0RU1lc3NhZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5QYXJ0LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjc2V0RU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSkiPnNldEVNZXNzYWdlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwjZ2V0RU1lc3NhZ2UoKSI+PENPREU+PGVtPkVNZXNzYWdlPC9lbT48L0NPREU+PC9BPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+TWVzc2FnZVJlZmVyZW5jZS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI3NldEVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UpIj5zZXRFTWVzc2FnZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TT0FQSGVhZGVyQmFzZS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjZ2V0RU1lc3NhZ2UoKSI+Z2V0RU1lc3NhZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPiB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPlNPQVBIZWFkZXJCYXNlLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNzZXRFTWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKSI+c2V0RU1lc3NhZ2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2U8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVNZXNzYWdlKCkiPjxDT0RFPjxlbT5FTWVzc2FnZTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VNZXNzYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTWVzc2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9NZXNzYWdlUmVmZXJlbmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MGM4MzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL01lc3NhZ2VSZWZlcmVuY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik1lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPlN1YmludGVyZmFjZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RmF1bHQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+SW5wdXQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5wdXQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PdXRwdXQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VNZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL05hbWVzcGFjZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL05hbWVzcGFjZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjg2OTVlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9OYW1lc3BhY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlTmFtZXNwYWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iTmFtZXNwYWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk5hbWVzcGFjZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TmFtZXNwYWNlPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5OYW1lc3BhY2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TmFtZXNwYWNlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVOYW1lc3BhY2UoKSI+Y3JlYXRlTmFtZXNwYWNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lc3BhY2U8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VOYW1lc3BhY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJOYW1lc3BhY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9PcGVyYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9PcGVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5YTQ0NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvT3BlcmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZU9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik9wZXJhdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb248L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PcGVyYXRpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlT3BlcmF0aW9uKCkiPmNyZWF0ZU9wZXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PcGVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkJpbmRpbmdPcGVyYXRpb24uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uaHRtbCNnZXRFT3BlcmF0aW9uKCkiPmdldEVPcGVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5CaW5kaW5nT3BlcmF0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjc2V0RU9wZXJhdGlvbihvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24pIj5zZXRFT3BlcmF0aW9uPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk9wZXJhdGlvbjwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sI2dldEVPcGVyYXRpb24oKSI+PENPREU+PGVtPkVPcGVyYXRpb248L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJPcGVyYXRpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9PdXRwdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9PdXRwdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3MDFmMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvT3V0cHV0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZU91dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ik91dHB1dC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlT3V0cHV0KCkiPmNyZWF0ZU91dHB1dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPk9wZXJhdGlvbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmh0bWwjZ2V0RU91dHB1dCgpIj5nZXRFT3V0cHV0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkJpbmRpbmdPdXRwdXQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCNnZXRFT3V0cHV0KCkiPmdldEVPdXRwdXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5PcGVyYXRpb24uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI3NldEVPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KSI+c2V0RU91dHB1dDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5PdXRwdXQ8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+PGVtPkVPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JyBjb250YWlubWVudCByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5CaW5kaW5nT3V0cHV0LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwjc2V0RU91dHB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQpIj5zZXRFT3V0cHV0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk91dHB1dDwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sI2dldEVPdXRwdXQoKSI+PENPREU+PGVtPkVPdXRwdXQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VPdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJPdXRwdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9QYXJ0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvUGFydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjI4ZGRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9QYXJ0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZVBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJQYXJ0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZVBhcnQoKSI+Y3JlYXRlUGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FTWltZVhtbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjZ2V0RVBhcnQoKSI+Z2V0RVBhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+TUlNRUNvbnRlbnQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sI2dldEVQYXJ0KCkiPmdldEVQYXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FTWltZVhtbC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwjc2V0RVBhcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCkiPnNldEVQYXJ0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5NSU1FQ29udGVudC48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwjc2V0RVBhcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCkiPnNldEVQYXJ0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UGFydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+U09BUEhlYWRlckJhc2UuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sI2dldEVQYXJ0KCkiPmdldEVQYXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5TT0FQSGVhZGVyQmFzZS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwjc2V0RVBhcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCkiPnNldEVQYXJ0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5QYXJ0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCNnZXRFUGFydCgpIj48Q09ERT48ZW0+RVBhcnQ8L2VtPjwvQ09ERT48L0E+JyByZWZlcmVuY2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlUGFydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlBhcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9Qb3J0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvUG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njc0MTQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9Qb3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZVBvcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJQb3J0Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UG9ydDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVQb3J0KCkiPmNyZWF0ZVBvcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQ8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlUG9ydC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlBvcnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9Qb3J0VHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1BvcnRUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYTg1M2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1BvcnRUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZVBvcnRUeXBlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUG9ydFR5cGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnRUeXBlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UG9ydFR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZVBvcnRUeXBlKCkiPmNyZWF0ZVBvcnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0IFR5cGU8L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UG9ydFR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkJpbmRpbmcuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNnZXRFUG9ydFR5cGUoKSI+Z2V0RVBvcnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+UG9ydFR5cGU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkJpbmRpbmcuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCNzZXRFUG9ydFR5cGUob3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUpIj5zZXRFUG9ydFR5cGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sI2dldEVQb3J0VHlwZSgpIj48Q09ERT48ZW0+RVBvcnQgVHlwZTwvZW0+PC9DT0RFPjwvQT4nIHJlZmVyZW5jZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlUG9ydFR5cGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJQb3J0VHlwZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1NlcnZpY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9TZXJ2aWNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYmMwMTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1NlcnZpY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlU2VydmljZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNlcnZpY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5TZXJ2aWNlPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+U2VydmljZTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlNlcnZpY2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlNlcnZpY2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZVNlcnZpY2UoKSI+Y3JlYXRlU2VydmljZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2VydmljZTwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VTZXJ2aWNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2VydmljZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1R5cGVzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvVHlwZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhNjBmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvVHlwZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlVHlwZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJUeXBlcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5UeXBlczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjY3JlYXRlVHlwZXMoKSI+Y3JlYXRlVHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlR5cGVzPC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlR5cGVzPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5EZWZpbml0aW9uLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwjZ2V0RVR5cGVzKCkiPmdldEVUeXBlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkRlZmluaXRpb24uPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCNzZXRFVHlwZXMob3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMpIj5zZXRFVHlwZXM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5UeXBlczwvQT4mbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSAnPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sI2dldEVUeXBlcygpIj48Q09ERT48ZW0+RVR5cGVzPC9lbT48L0NPREU+PC9BPicgY29udGFpbm1lbnQgcmVmZXJlbmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VUeXBlcy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlR5cGVzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3Y2Q4YTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExGYWN0b3J5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sI2NyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpIj5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETEVsZW1lbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMRWxlbWVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWFmZDQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMRWxlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VXU0RMRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0I+PC9BPjwvVEQ+Ci08VEQ+Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+U3ViaW50ZXJmYWNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBGYXVsdDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgT3BlcmF0aW9uPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE91dHB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVmaW5pdGlvbjwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJsZSBFbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW1wb3J0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklucHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk91dHB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0IFR5cGU8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5TZXJ2aWNlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHlwZXM8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEVsZW1lbnQuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvbnRhaW5lcjwvYj48L2VtPicgcmVmZXJlbmNlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5TdWJpbnRlcmZhY2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBBZGRyZXNzPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBCaW5kaW5nPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUE9wZXJhdGlvbjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPkhUVFBVcmxFbmNvZGVkPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBFbmNvZGVkPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+SFRUUFVybFJlcGxhY2VtZW50PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBSZXBsYWNlbWVudDwvYj48L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+U3ViaW50ZXJmYWNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FQ29udGVudDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250ZW50PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj5NSU1FTWltZVhtbDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPk1JTUVQYXJ0PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPlN1YmludGVyZmFjZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEVsZW1lbnQ8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEFkZHJlc3M8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJpbmRpbmc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEJvZHk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9keTwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBGYXVsdDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPic8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50ZXJmYWNlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEJhc2U8L2I+PC9lbT4nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludGVyZmFjZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyRmF1bHQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyIEZhdWx0PC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBPcGVyYXRpb248L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+JzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETEVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1dTRExGYWN0b3J5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkMGJkNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETEZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5GaWVsZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiBkZWNsYXJlZCBhcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNlSU5TVEFOQ0UiPmVJTlNUQU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETEZhY3Rvcnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRmFjdG9yeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETFBhY2thZ2UuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwjZ2V0V1NETEZhY3RvcnkoKSI+Z2V0V1NETEZhY3Rvcnk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbDwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRmFjdG9yeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1dTRExQYWNrYWdlLkxpdGVyYWxzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAyNWQ2Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5MaXRlcmFscwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlLkxpdGVyYWxzIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5MaXRlcmFsczwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZS5MaXRlcmFscwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1dTRExQYWNrYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETFBhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQxYjE5Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETFBhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGFja2FnZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5GaWVsZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiBkZWNsYXJlZCBhcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQYWNrYWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMUGFja2FnZS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCNlSU5TVEFOQ0UiPmVJTlNUQU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdGhhdCByZXR1cm4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETEZhY3RvcnkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwjZ2V0V1NETFBhY2thZ2UoKSI+Z2V0V1NETFBhY2thZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3Rvcnk8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZVdTRExQYWNrYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBhY2thZ2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMUGx1Z2luLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvV1NETFBsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjc1MmYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMUGx1Z2luLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZVdTRExQbHVnaW4uaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUGx1Z2luLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjwvQj48L0gyPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotUGFja2FnZXMgdGhhdCB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW48L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW48L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5GaWVsZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiBkZWNsYXJlZCBhcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBsdWdpbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMUGx1Z2luLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwjSU5TVEFOQ0UiPklOU1RBTkNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VXU0RMUGx1Z2luLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBsdWdpbi5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTkwNDJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbgotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbkltcGxlbWVudGF0aW9uIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgQ2xhc3M8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbjwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETFBsdWdpbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2dldFBsdWdpbigpIj5nZXRQbHVnaW48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9cY2xhc3MtdXNlV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzI2ZDczLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL1xjbGFzcy11c2VYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRmFjdG9yeS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCNjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpIj5jcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPic8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvXGNsYXNzLXVzZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtZnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtZnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiNmQ3NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci08Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lVGl0bGVGb250Ij4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotSW50ZXJmYWNlczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IkJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5CaW5kaW5nPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IkJpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkJpbmRpbmdGYXVsdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJCaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5CaW5kaW5nSW5wdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkJpbmRpbmdPcGVyYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkJpbmRpbmdPdXRwdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkRlZmluaXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5FeHRlbnNpYmlsaXR5RWxlbWVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJFeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkV4dGVuc2libGVFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IkZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+RmF1bHQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SW1wb3J0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IklucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+SW5wdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPk1lc3NhZ2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPk1lc3NhZ2VSZWZlcmVuY2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iTmFtZXNwYWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+TmFtZXNwYWNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Ik9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPk9wZXJhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5PdXRwdXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlBhcnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlBvcnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5Qb3J0VHlwZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJTZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+U2VydmljZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJUeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlR5cGVzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJXU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPldTRExFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IldTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+V1NETEZhY3Rvcnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48ST5XU0RMUGFja2FnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJXU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPldTRExQYWNrYWdlLkxpdGVyYWxzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0k+PC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1DbGFzc2VzPC9GT05UPiZuYnNwOwotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPgotPEJSPgotPEEgSFJFRj0iV1NETFBsdWdpbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+V1NETFBsdWdpbjwvQT4KLTxCUj4KLTxBIEhSRUY9IldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiIHRhcmdldD0iY2xhc3NGcmFtZSI+V1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyOGM5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbAotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53c2RsIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBQQUNLQUdFJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPk5FWFQgUEFDS0FHRTwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxIMj4KLVBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwKLTwvSDI+Ci0KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotPFA+Ci08Qj5TZWU6PC9CPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEEgSFJFRj0iI3BhY2thZ2VfZGVzY3JpcHRpb24iPjxCPkRlc2NyaXB0aW9uPC9CPjwvQT4KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkludGVyZmFjZSBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZzwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nRmF1bHQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBGYXVsdDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ0lucHV0PC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5CaW5kaW5nT3BlcmF0aW9uPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgT3BlcmF0aW9uPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+QmluZGluZ091dHB1dDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE91dHB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVmaW5pdGlvbjwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJsZSBFbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkZhdWx0PC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5JbXBvcnQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW1wb3J0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPklucHV0PC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklucHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZTwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TmFtZXNwYWNlPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWVzcGFjZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3BlcmF0aW9uPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+T3V0cHV0PC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk91dHB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBhcnQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlBvcnQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5Qb3J0VHlwZTwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0IFR5cGU8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5TZXJ2aWNlPC9BPjwvQj48L1REPgotPFREPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+VHlwZXM8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHlwZXM8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMRWxlbWVudDwvQT48L0I+PC9URD4KLTxURD5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExGYWN0b3J5PC9BPjwvQj48L1REPgotPFREPlRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+V1NETFBhY2thZ2U8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQT48L0I+PC9URD4KLTxURD5EZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gCi0gICBlYWNoIGNsYXNzLAotICAgZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsCi0gICBlYWNoIGVudW0sCi0gICBhbmQgZWFjaCBkYXRhIHR5cGUKLSAKLSA8ITwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPjwvVEQ+Ci08VEQ+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luPC9BPjwvQj48L1REPgotPFREPlRoZSA8Yj5QbHVnaW48L2I+IGZvciB0aGUgbW9kZWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLTxBIE5BTUU9InBhY2thZ2VfZGVzY3JpcHRpb24iPjwhLS0gLS0+PC9BPjxIMj4KLVBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwgRGVzY3JpcHRpb24KLTwvSDI+Ci0KLTxQPgotPHA+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLSAgICAgICAgICAgICAgICA8L3A+Ci08dGFibGUgd2lkdGg9IjUwMCI+Ci08dHI+Ci08dGQ+Ci08cD5UaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gbG9hZCwgbW9kaWZ5LCBhbmQgc2F2ZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0gICAgICAgICAgICAgICAgPC9wPgotPC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPFA+Ci0KLTxQPgotPERMPgotPC9ETD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIFBBQ0tBR0UmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+TkVYVCBQQUNLQUdFPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXRyZWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtdHJlZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTQ2OTk0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtdHJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsIENsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53c2RsIENsYXNzIEhpZXJhcmNoeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotSGllcmFyY2h5IEZvciBQYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsCi08L0gyPgotPC9DRU5URVI+Ci08REw+Ci08RFQ+PEI+UGFja2FnZSBIaWVyYXJjaGllczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+QWxsIFBhY2thZ2VzPC9BPjwvREw+Ci08SFI+Ci08SDI+Ci1DbGFzcyBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZhLmxhbmcuT2JqZWN0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+RWNsaXBzZVBsdWdpbjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbjwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPkVNRlBsdWdpbjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMUGx1Z2luPC9CPjwvQT48L1VMPgotPC9VTD4KLTwvVUw+Ci08SDI+Ci1JbnRlcmZhY2UgSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPikKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5OYW1lc3BhY2U8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmphdmEuaW8uU2VyaWFsaXphYmxlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nRmF1bHQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ0ZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nSW5wdXQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ0lucHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nT3V0cHV0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3V0cHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5EZWZpbml0aW9uPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5EZWZpbml0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5GYXVsdDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuSW1wb3J0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkltcG9ydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuSW5wdXQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5JbnB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLk1lc3NhZ2U8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk1lc3NhZ2U8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLk9wZXJhdGlvbjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLk91dHB1dDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PdXRwdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5QYXJ0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5Qb3J0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Qb3J0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5Qb3J0VHlwZTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnRUeXBlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5TZXJ2aWNlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5UeXBlczxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlR5cGVzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExFbGVtZW50PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5FeHRlbnNpYmxlRWxlbWVudDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmcpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ0ZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nSW5wdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ0lucHV0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdPdXRwdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ091dHB1dCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RGVmaW5pdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5EZWZpbml0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkltcG9ydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5JbXBvcnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk1lc3NhZ2U8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuTWVzc2FnZSkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TWVzc2FnZVJlZmVyZW5jZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuRmF1bHQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5JbnB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5JbnB1dCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PdXRwdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuT3V0cHV0KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLlBhcnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuUG9ydCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnRUeXBlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLlBvcnRUeXBlKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLlNlcnZpY2UpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5UeXBlczwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5UeXBlcykKLTwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETEZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExQYWNrYWdlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMUGFja2FnZS5MaXRlcmFsczwvQj48L0E+PC9VTD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5ORVhUPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXVzZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS11c2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkNDczZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXVzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBQYWNrYWdlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9CPjwvQT48L1REPgotPFREPiZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB1c2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdGYXVsdC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nRmF1bHQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBGYXVsdDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvQmluZGluZ0lucHV0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdJbnB1dDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIElucHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9CaW5kaW5nT3BlcmF0aW9uLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdPcGVyYXRpb248L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPcGVyYXRpb248L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0JpbmRpbmdPdXRwdXQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ091dHB1dDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE91dHB1dDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRGVmaW5pdGlvbi5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5EZWZpbml0aW9uPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlZmluaXRpb248L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJsZSBFbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9GYXVsdC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5GYXVsdDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvSW1wb3J0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkltcG9ydDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbXBvcnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0lucHV0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPklucHV0PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklucHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9NZXNzYWdlLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk1lc3NhZ2U8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvTWVzc2FnZVJlZmVyZW5jZS5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5NZXNzYWdlUmVmZXJlbmNlPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1lc3NhZ2UgUmVmZXJlbmNlPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9OYW1lc3BhY2UuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TmFtZXNwYWNlPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWVzcGFjZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvT3BlcmF0aW9uLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk9wZXJhdGlvbjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL091dHB1dC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PdXRwdXQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3V0cHV0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9QYXJ0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBhcnQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvUG9ydC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Qb3J0PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1BvcnRUeXBlLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnRUeXBlPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcnQgVHlwZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvU2VydmljZS5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcnZpY2U8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1R5cGVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlR5cGVzPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlR5cGVzPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMRWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMRWxlbWVudDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMRmFjdG9yeS5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMRmFjdG9yeTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMUGFja2FnZS5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMUGFja2FnZTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMUGx1Z2luLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExQbHVnaW48L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIDxiPlBsdWdpbjwvYj4gZm9yIHRoZSBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETFBsdWdpbkltcGxlbWVudGF0aW9uPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB1c2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMRWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+V1NETEVsZW1lbnQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB1c2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9QYXJ0Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5QYXJ0PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL1dTRExFbGVtZW50Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5XU0RMRWxlbWVudDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotQ2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHVzZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvY2xhc3MtdXNlL01lc3NhZ2UuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPk1lc3NhZ2U8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9jbGFzcy11c2UvUGFydC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+UGFydDwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9XU0RMRWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+V1NETEVsZW1lbnQ8L0I+PC9BPjwvQj4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1DbGFzc2VzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9EZWZpbml0aW9uLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+RGVmaW5pdGlvbjwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZWZpbml0aW9uPC9iPjwvZW0+Jy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2NsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMTRiYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgaW50ZXJmYWNlIDxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQj48L0RMPgotPC9QUkU+Ci0KLTxQPgotPHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCNjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+Y3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2xvY2FsTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4gPEI+Y3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bG9jYWxOYW1lKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTJhOWU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkgaW50ZXJmYWNlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9IMj4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLTxwPgotIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMDwvREQ+Ci08L0RMPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjcmVnaXN0ZXJGYWN0b3J5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KSI+cmVnaXN0ZXJGYWN0b3J5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT4mbmJzcDtmYWN0b3J5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJyZWdpc3RlckZhY3RvcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkpIj48IS0tIC0tPjwvQT48SDM+Ci1yZWdpc3RlckZhY3Rvcnk8L0gzPgotPFBSRT4KLXZvaWQgPEI+cmVnaXN0ZXJGYWN0b3J5PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L0E+Jm5ic3A7ZmFjdG9yeSk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjZjk5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMTIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotV1NETENvbnN0YW50cwotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cyBjbGFzcyI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iV1NETENvbnN0YW50cyI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExDb25zdGFudHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETENvbnN0YW50cy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvRk9OVD4KLTxCUj4KLUNsYXNzIFdTRExDb25zdGFudHM8L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czwvQj4KLTwvUFJFPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGNsYXNzIDxCPldTRExDb25zdGFudHM8L0I+PERUPmV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvREw+Ci08L1BSRT4KLQotPFA+Ci1UaGlzIGNsYXNzIGRlZmluZXMgY29uc3RhbnRzIGZvciBXU0RMIGVsZW1lbnQgdGFncyBhbmQgcmVsZXZhbnQgbmFtZXNwYWNlcy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMDwvREQ+Ci08L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjQklORElORyI+QklORElORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImJpbmRpbmciPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNCSU5ESU5HX0FUVFJJQlVURSI+QklORElOR19BVFRSSUJVVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0JJTkRJTkdfRUxFTUVOVF9UQUciPkJJTkRJTkdfRUxFTUVOVF9UQUc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJiaW5kaW5nIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNERUZJTklUSU9OIj5ERUZJTklUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZGVmaW5pdGlvbnMiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNERUZJTklUSU9OX0VMRU1FTlRfVEFHIj5ERUZJTklUSU9OX0VMRU1FTlRfVEFHPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZGVmaW5pdGlvbnMiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0RPQ1VNRU5UQVRJT04iPkRPQ1VNRU5UQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkb2N1bWVudGF0aW9uIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRyI+RE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImRvY3VtZW50YXRpb24iPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNFTEVNRU5UX0FUVFJJQlVURSI+RUxFTUVOVF9BVFRSSUJVVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4iZWxlbWVudCI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0VOQ09ESU5HX0FUVFJJQlVURSI+RU5DT0RJTkdfQVRUUklCVVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImVuY29kaW5nIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNGQVVMVCI+RkFVTFQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJmYXVsdCI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0ZBVUxUX0VMRU1FTlRfVEFHIj5GQVVMVF9FTEVNRU5UX1RBRzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImZhdWx0IjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNJTVBPUlQiPklNUE9SVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImltcG9ydCI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0lNUE9SVF9FTEVNRU5UX1RBRyI+SU1QT1JUX0VMRU1FTlRfVEFHPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW1wb3J0IjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNJTlBVVCI+SU5QVVQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbnB1dCI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI0lOUFVUX0VMRU1FTlRfVEFHIj5JTlBVVF9FTEVNRU5UX1RBRzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImlucHV0IjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjTE9DQVRJT05fQVRUUklCVVRFIj5MT0NBVElPTl9BVFRSSUJVVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4ibG9jYXRpb24iPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI01FU1NBR0UiPk1FU1NBR0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJtZXNzYWdlIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjTUVTU0FHRV9BVFRSSUJVVEUiPk1FU1NBR0VfQVRUUklCVVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+Im1lc3NhZ2UiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNNRVNTQUdFX0VMRU1FTlRfVEFHIj5NRVNTQUdFX0VMRU1FTlRfVEFHPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI05BTUVfQVRUUklCVVRFIj5OQU1FX0FUVFJJQlVURTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjTkFNRVNQQUNFX0FUVFJJQlVURSI+TkFNRVNQQUNFX0FUVFJJQlVURTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lc3BhY2UiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI09QRVJBVElPTiI+T1BFUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3BlcmF0aW9uIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjT1BFUkFUSU9OX0VMRU1FTlRfVEFHIj5PUEVSQVRJT05fRUxFTUVOVF9UQUc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvcGVyYXRpb24iPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI09VVFBVVCI+T1VUUFVUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3V0cHV0IjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjT1VUUFVUX0VMRU1FTlRfVEFHIj5PVVRQVVRfRUxFTUVOVF9UQUc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvdXRwdXQiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQQVJBTUVURVJfT1JERVJfQVRUUklCVVRFIj5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InBhcmFtZXRlck9yZGVyIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQQVJUIj5QQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icGFydCI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1BBUlRfRUxFTUVOVF9UQUciPlBBUlRfRUxFTUVOVF9UQUc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwYXJ0IjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQT1JUIj5QT1JUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydCI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1BPUlRfRUxFTUVOVF9UQUciPlBPUlRfRUxFTUVOVF9UQUc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0IjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNQT1JUX1RZUEUiPlBPUlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnRUeXBlIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjUE9SVF9UWVBFX0VMRU1FTlRfVEFHIj5QT1JUX1RZUEVfRUxFTUVOVF9UQUc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0VHlwZSI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1JFU09VUkNFX1VSSV9BVFRSSUJVVEUiPlJFU09VUkNFX1VSSV9BVFRSSUJVVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4icmVzb3VyY2VVUkkiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMTk5OSI+U0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzE5OTk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hNTFNjaGVtYSI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1NDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAwXzEwIj5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMTAvWE1MU2NoZW1hIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEiPlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1NFUlZJQ0UiPlNFUlZJQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJzZXJ2aWNlIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjU0VSVklDRV9FTEVNRU5UX1RBRyI+U0VSVklDRV9FTEVNRU5UX1RBRzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InNlcnZpY2UiPC9jb2RlPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNUQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFIj5UQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InRhcmdldE5hbWVzcGFjZSI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1RZUEVfQVRUUklCVVRFIj5UWVBFX0FUVFJJQlVURTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0eXBlIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNUWVBFUyI+VFlQRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJ0eXBlcyI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1RZUEVTX0VMRU1FTlRfVEFHIj5UWVBFU19FTEVNRU5UX1RBRzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InR5cGVzIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjV1NETF9OQU1FU1BBQ0VfVVJJIj5XU0RMX05BTUVTUEFDRV9VUkk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI8L2NvZGU+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1hTRF9OQU1FU1BBQ0VfVVJJIj5YU0RfTkFNRVNQQUNFX1VSSTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjwvY29kZT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI1dTRExDb25zdGFudHMoKSI+V1NETENvbnN0YW50czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRBdHRyaWJ1dGUob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLlN0cmluZykiPmdldEF0dHJpYnV0ZTwvQT48L0I+KG9yZy53M2MuZG9tLkVsZW1lbnQmbmJzcDtlbGVtZW50LAotICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDthdHRyaWJ1dGVOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBhdHRyaWJ1dGUgdmFsdWUgZ2l2ZW4gdGhlIGF0dHJpYnV0ZU5hbWUgaW4gdGhlIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0RWxlbWVudFRhZyhpbnQpIj5nZXRFbGVtZW50VGFnPC9BPjwvQj4oaW50Jm5ic3A7bm9kZVR5cGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgU3RyaW5nIG5hbWUgb2YgZWxlbWVudCB0YWcgZ2l2ZW4gdGhlIG5vZGVUeXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2lzTWF0Y2hpbmdOYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmlzTWF0Y2hpbmdOYW1lc3BhY2U8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlMSwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWVzcGFjZTIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRydWUgaWYgbmFtZXNwYWNlMSBlcXVhbHMgdG8gbmFtZXNwYWNlMi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNpc1dTRExOYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPmlzV1NETE5hbWVzcGFjZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lc3BhY2UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWVzcGFjZSBpcyB0aGUgV1NETCBuYW1lc3BhY2Ugb3Igbm90LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUob3JnLnczYy5kb20uTm9kZSkiPm5vZGVUeXBlPC9BPjwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbm9kZSB0eXBlIGRlZmluZWQgaW4gV1NETENvbnN0YW50cyBnaXZlbiB0aGUgRE9NIG5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNub2RlVHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+bm9kZVR5cGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bG9jYWxOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5vZGUgdHlwZSBnaXZlbiB0aGUgU3RyaW5nIG5hbWUgb2YgZWxlbWVudCB0YWcuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJCSU5ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CSU5ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRFbGVtZW50VGFnKGludCkiPjxDT0RFPmdldEVsZW1lbnRUYWcoaW50KS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuQklORElORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5ERUZJTklUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZGVmaW5pdGlvbnMiPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0RWxlbWVudFRhZyhpbnQpIj48Q09ERT5nZXRFbGVtZW50VGFnKGludCkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkRFRklOSVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRE9DVU1FTlRBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotRE9DVU1FTlRBVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+RE9DVU1FTlRBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImRvY3VtZW50YXRpb24iPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0RWxlbWVudFRhZyhpbnQpIj48Q09ERT5nZXRFbGVtZW50VGFnKGludCkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFVTFQiPjwhLS0gLS0+PC9BPjxIMz4KLUZBVUxUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQVVMVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImZhdWx0IjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5GQVVMVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTVBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SU1QT1JUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW1wb3J0IjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5JTVBPUlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU5QVVQiPjwhLS0gLS0+PC9BPjxIMz4KLUlOUFVUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5JTlBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImlucHV0IjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5JTlBVVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJNRVNTQUdFIj48IS0tIC0tPjwvQT48SDM+Ci1NRVNTQUdFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5NRVNTQUdFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRFbGVtZW50VGFnKGludCkiPjxDT0RFPmdldEVsZW1lbnRUYWcoaW50KS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuTUVTU0FHRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+T1BFUkFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3BlcmF0aW9uIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5PUEVSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iT1VUUFVUIj48IS0tIC0tPjwvQT48SDM+Ci1PVVRQVVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk9VVFBVVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im91dHB1dCI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRFbGVtZW50VGFnKGludCkiPjxDT0RFPmdldEVsZW1lbnRUYWcoaW50KS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuT1VUUFVUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlBBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwYXJ0IjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5QQVJUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlBPUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0IjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5QT1JUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotUE9SVF9UWVBFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5QT1JUX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0VHlwZSI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRFbGVtZW50VGFnKGludCkiPjxDT0RFPmdldEVsZW1lbnRUYWcoaW50KS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuUE9SVF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNFUlZJQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUlZJQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlNFUlZJQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJzZXJ2aWNlIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEVsZW1lbnRUYWcoaW50KSI+PENPREU+Z2V0RWxlbWVudFRhZyhpbnQpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5TRVJWSUNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlRZUEVTIj48IS0tIC0tPjwvQT48SDM+Ci1UWVBFUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+VFlQRVM8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJ0eXBlcyI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRFbGVtZW50VGFnKGludCkiPjxDT0RFPmdldEVsZW1lbnRUYWcoaW50KS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuVFlQRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQklORElOR19FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PEgzPgotQklORElOR19FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPkJJTkRJTkdfRUxFTUVOVF9UQUc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJiaW5kaW5nIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI25vZGVUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5ub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJERUZJTklUSU9OX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1ERUZJTklUSU9OX0VMRU1FTlRfVEFHPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+REVGSU5JVElPTl9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImRlZmluaXRpb25zIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI25vZGVUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5ub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuREVGSU5JVElPTl9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1ET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+RE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImRvY3VtZW50YXRpb24iPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPm5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkZBVUxUX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1GQVVMVF9FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPkZBVUxUX0VMRU1FTlRfVEFHPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZmF1bHQiPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPm5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5GQVVMVF9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTVBPUlRfRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxIMz4KLUlNUE9SVF9FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPklNUE9SVF9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImltcG9ydCI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNub2RlVHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLklNUE9SVF9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlBVVF9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PEgzPgotSU5QVVRfRUxFTUVOVF9UQUc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5JTlBVVF9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImlucHV0IjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI25vZGVUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5ub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuSU5QVVRfRUxFTUVOVF9UQUciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRV9FTEVNRU5UX1RBRyI+PCEtLSAtLT48L0E+PEgzPgotTUVTU0FHRV9FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPk1FU1NBR0VfRUxFTUVOVF9UQUc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJtZXNzYWdlIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI25vZGVUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5ub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuTUVTU0FHRV9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUEVSQVRJT05fRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxIMz4KLU9QRVJBVElPTl9FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPk9QRVJBVElPTl9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im9wZXJhdGlvbiI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNub2RlVHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk9QRVJBVElPTl9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPVVRQVVRfRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxIMz4KLU9VVFBVVF9FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPk9VVFBVVF9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im91dHB1dCI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNub2RlVHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk9VVFBVVF9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQQVJUX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1QQVJUX0VMRU1FTlRfVEFHPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+UEFSVF9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBhcnQiPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPm5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBPUlRfRUxFTUVOVF9UQUciPjwhLS0gLS0+PC9BPjxIMz4KLVBPUlRfRUxFTUVOVF9UQUc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5QT1JUX0VMRU1FTlRfVEFHPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydCI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNub2RlVHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlBPUlRfRUxFTUVOVF9UQUciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUE9SVF9UWVBFX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1QT1JUX1RZUEVfRUxFTUVOVF9UQUc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5QT1JUX1RZUEVfRUxFTUVOVF9UQUc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0VHlwZSI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNub2RlVHlwZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlBPUlRfVFlQRV9FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTRVJWSUNFX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1TRVJWSUNFX0VMRU1FTlRfVEFHPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+U0VSVklDRV9FTEVNRU5UX1RBRzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InNlcnZpY2UiPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPm5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5TRVJWSUNFX0VMRU1FTlRfVEFHIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlRZUEVTX0VMRU1FTlRfVEFHIj48IS0tIC0tPjwvQT48SDM+Ci1UWVBFU19FTEVNRU5UX1RBRzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPlRZUEVTX0VMRU1FTlRfVEFHPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4idHlwZXMiPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjbm9kZVR5cGUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPm5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5UWVBFU19FTEVNRU5UX1RBRyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJOQU1FX0FUVFJJQlVURSI+PCEtLSAtLT48L0E+PEgzPgotTkFNRV9BVFRSSUJVVEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5OQU1FX0FUVFJJQlVURTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEF0dHJpYnV0ZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Z2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRV9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+TUVTU0FHRV9BVFRSSUJVVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRBdHRyaWJ1dGUob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPmdldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJJTkRJTkdfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48SDM+Ci1CSU5ESU5HX0FUVFJJQlVURTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPkJJTkRJTkdfQVRUUklCVVRFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImJpbmRpbmciPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0QXR0cmlidXRlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5nZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5CSU5ESU5HX0FUVFJJQlVURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJUWVBFX0FUVFJJQlVURSI+PCEtLSAtLT48L0E+PEgzPgotVFlQRV9BVFRSSUJVVEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5UWVBFX0FUVFJJQlVURTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0eXBlIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEF0dHJpYnV0ZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Z2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRU5DT0RJTkdfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48SDM+Ci1FTkNPRElOR19BVFRSSUJVVEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5FTkNPRElOR19BVFRSSUJVVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4iZW5jb2RpbmciPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0QXR0cmlidXRlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5nZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5FTkNPRElOR19BVFRSSUJVVEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSI+PCEtLSAtLT48L0E+PEgzPgotVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPlRBUkdFVE5BTUVTUEFDRV9BVFRSSUJVVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4idGFyZ2V0TmFtZXNwYWNlIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEF0dHJpYnV0ZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Z2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJSRVNPVVJDRV9VUklfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48SDM+Ci1SRVNPVVJDRV9VUklfQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+UkVTT1VSQ0VfVVJJX0FUVFJJQlVURTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJyZXNvdXJjZVVSSSI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRBdHRyaWJ1dGUob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPmdldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLlJFU09VUkNFX1VSSV9BVFRSSUJVVEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRUxFTUVOVF9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxIMz4KLUVMRU1FTlRfQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+RUxFTUVOVF9BVFRSSUJVVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4iZWxlbWVudCI8L2NvZGU+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCNnZXRBdHRyaWJ1dGUob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPmdldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxPQ0FUSU9OX0FUVFJJQlVURSI+PCEtLSAtLT48L0E+PEgzPgotTE9DQVRJT05fQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+TE9DQVRJT05fQVRUUklCVVRFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImxvY2F0aW9uIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEF0dHJpYnV0ZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Z2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlBBUkFNRVRFUl9PUkRFUl9BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxIMz4KLVBBUkFNRVRFUl9PUkRFUl9BVFRSSUJVVEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InBhcmFtZXRlck9yZGVyIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sI2dldEF0dHJpYnV0ZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Z2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS48L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMuUEFSQU1FVEVSX09SREVSX0FUVFJJQlVURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJOQU1FU1BBQ0VfQVRUUklCVVRFIj48IS0tIC0tPjwvQT48SDM+Ci1OQU1FU1BBQ0VfQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+TkFNRVNQQUNFX0FUVFJJQlVURTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lc3BhY2UiPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwjZ2V0QXR0cmlidXRlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5nZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldTRExfTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotV1NETF9OQU1FU1BBQ0VfVVJJPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+V1NETF9OQU1FU1BBQ0VfVVJJPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPC9jb2RlPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYU0RfTkFNRVNQQUNFX1VSSSI+PCEtLSAtLT48L0E+PEgzPgotWFNEX05BTUVTUEFDRV9VUkk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5YU0RfTkFNRVNQQUNFX1VSSTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMTk5OSI+PCEtLSAtLT48L0E+PEgzPgotU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzE5OTk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMTk5OTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMTk5OSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMCI+PCEtLSAtLT48L0E+PEgzPgotU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDBfMTA8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMTAvWE1MU2NoZW1hIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSI+PCEtLSAtLT48L0E+PEgzPgotU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDE8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjwvY29kZT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJXU0RMQ29uc3RhbnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLVdTRExDb25zdGFudHM8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5XU0RMQ29uc3RhbnRzPC9CPigpPC9QUkU+Ci08REw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldEVsZW1lbnRUYWcoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RWxlbWVudFRhZzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPmdldEVsZW1lbnRUYWc8L0I+KGludCZuYnNwO25vZGVUeXBlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBTdHJpbmcgbmFtZSBvZiBlbGVtZW50IHRhZyBnaXZlbiB0aGUgbm9kZVR5cGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5vZGVUeXBlPC9DT0RFPiAtIGEgY29uc3RhbnQgZGVmaW5lZCBpbiBXU0RMQ29uc3RhbnRzLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5lbGVtZW50IHRhZy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5vZGVUeXBlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1ub2RlVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+bm9kZVR5cGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtsb2NhbE5hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5vZGUgdHlwZSBnaXZlbiB0aGUgU3RyaW5nIG5hbWUgb2YgZWxlbWVudCB0YWcuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxvY2FsTmFtZTwvQ09ERT4gLSB0aGUgbG9jYWwgbmFtZSBvZiBlbGVtZW50IHRhZy4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBub2RlIHR5cGUgZGVmaW5lZCBpbiBXU0RMQ29uc3RhbnRzLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibm9kZVR5cGUob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5vZGVUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5ub2RlVHlwZTwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5vZGUgdHlwZSBkZWZpbmVkIGluIFdTRExDb25zdGFudHMgZ2l2ZW4gdGhlIERPTSBub2RlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5ub2RlPC9DT0RFPiAtIGEgRE9NIG5vZGUuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbm9kZSB0eXBlIGRlZmluZWQgaW4gV1NETENvbnN0YW50cy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzV1NETE5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotaXNXU0RMTmFtZXNwYWNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGJvb2xlYW4gPEI+aXNXU0RMTmFtZXNwYWNlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGlzIHRoZSBXU0RMIG5hbWVzcGFjZSBvciBub3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWVzcGFjZTwvQ09ERT4gLSBhIG5hbWVzcGFjZS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+d2hldGhlciB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGlzIHRoZSBXU0RMIG5hbWVzcGFjZSBvciBub3QuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc01hdGNoaW5nTmFtZXNwYWNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1pc01hdGNoaW5nTmFtZXNwYWNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGJvb2xlYW4gPEI+aXNNYXRjaGluZ05hbWVzcGFjZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWVzcGFjZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlMik8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRydWUgaWYgbmFtZXNwYWNlMSBlcXVhbHMgdG8gbmFtZXNwYWNlMi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZXNwYWNlMTwvQ09ERT4gLSBhIG5hbWVzcGFjZS48REQ+PENPREU+bmFtZXNwYWNlMjwvQ09ERT4gLSBhIG5hbWVzcGFjZS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiBuYW1lc3BhY2UxIGVxdWFscyB0byBuYW1lc3BhY2UyLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRBdHRyaWJ1dGU8L0I+KG9yZy53M2MuZG9tLkVsZW1lbnQmbmJzcDtlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7YXR0cmlidXRlTmFtZSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSBnaXZlbiB0aGUgYXR0cmlidXRlTmFtZSBpbiB0aGUgZWxlbWVudC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZWxlbWVudDwvQ09ERT4gLSBhIERPTSBlbGVtZW50IHRvIHNlYXJjaCBmb3IgdGhlIGF0dHJpYnV0ZSBmcm9tLjxERD48Q09ERT5hdHRyaWJ1dGVOYW1lPC9DT0RFPiAtIGFuIGF0dHJpYnV0ZSB0byBmaW5kIGZyb20gdGhlIGVsZW1lbnQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmFuIGF0dHJpYnV0ZSB2YWx1ZS48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETENvbnN0YW50cy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMQ29uc3RhbnRzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiMThlMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotV1NETERpYWdub3N0aWMKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljIGludGVyZmFjZSI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iV1NETERpYWdub3N0aWMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMRGlhZ25vc3RpYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExEaWFnbm9zdGljLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFdTRExEaWFnbm9zdGljPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gSW1wbGVtZW50aW5nIENsYXNzZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBpbnRlcmZhY2UgPEI+V1NETERpYWdub3N0aWM8L0I+PC9ETD4KLTwvUFJFPgotCi08UD4KLUdlbmVyYXRlZCBieSB0aGUgV1NETCBtb2RlbCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIG1lY2hhbmlzbXMuCi0gCi0gPHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzCi0gQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSA8L3A+Ci0gCi0gVGhpcyBpbnRlcmZhY2UgaXMgYSBjYW5kaWRhdGUgdG8gYmVjb21pbmcgYSBmaXJzdCBjbGFzcyBXU0RMIG1vZGVsIG9iamVjdC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5PYmplY3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXR1cm5zIHRoZSBFbGVtZW50IHdoZXJlIHRoZSBlcnJvciBvY2N1cnM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwjZ2V0S2V5KCkiPmdldEtleTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtvcmcudzNjLmRvbS5Ob2RlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXROb2RlKCkiPmdldE5vZGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldFNldmVyaXR5KCkiPmdldFNldmVyaXR5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UHJvdmlkZXMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXRTdWJzdGl0dXRpb25zKCkiPmdldFN1YnN0aXR1dGlvbnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbGlzdCB3aXRoIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHBhcmFtZXRlcnMgYXMgU3RyaW5ncy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwjc2V0Q29udGFpbmVyKGphdmEubGFuZy5PYmplY3QpIj5zZXRDb250YWluZXI8L0E+PC9CPihqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7Y29udGFpbmVyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgQ29udGFpbmVyIG9mIHRoZSBlcnJvcjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXRLZXkoamF2YS5sYW5nLlN0cmluZykiPnNldEtleTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXROb2RlKG9yZy53M2MuZG9tLk5vZGUpIj5zZXROb2RlPC9BPjwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI3NldFNldmVyaXR5KG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eSkiPnNldFNldmVyaXR5PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiZuYnNwO3NldmVyaXR5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIGRpYWdub3N0aWMncyBzZXZlcml0eS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFNldmVyaXR5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNldmVyaXR5PC9IMz4KLTxQUkU+Ci08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+IDxCPmdldFNldmVyaXR5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UHJvdmlkZXMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YW4gWFNERGlhZ25vc3RpY1NldmVyaXR5PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTZXZlcml0eTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRTZXZlcml0eTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiZuYnNwO3NldmVyaXR5KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNldmVyaXR5PC9DT0RFPiAtIHRoZSBuZXcgZGlhZ25vc3RpYyBzZXZlcml0eS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEtleSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRLZXk8L0gzPgotPFBSRT4KLWphdmEubGFuZy5TdHJpbmcgPEI+Z2V0S2V5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBTdHJpbmcgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRLZXkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEtleTwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRLZXk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGtleS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gdGhlIG5ldyBtZXNzYWdlIGtleSB2YWx1ZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE5vZGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Tm9kZTwvSDM+Ci08UFJFPgotb3JnLnczYy5kb20uTm9kZSA8Qj5nZXROb2RlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgRE9NIE5vZGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycwotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBET00gbm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXROb2RlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXROb2RlPC9IMz4KLTxQUkU+Ci12b2lkIDxCPnNldE5vZGU8L0I+KG9yZy53M2MuZG9tLk5vZGUmbmJzcDtub2RlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIERPTSBOb2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bm9kZTwvQ09ERT4gLSA8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENvbnRhaW5lcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb250YWluZXI8L0gzPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QgPEI+Z2V0Q29udGFpbmVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+cmV0dXJucyB0aGUgRWxlbWVudCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+LSBPYmplY3Qgb2YgdHlwZSBYU0RDb25jcmV0ZUNvbXBvbmVudCBpZiB0aGUgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbWVzIGZyb20gdGhlIGlubGluZSBzY2hlbWEgb2YgYSB3c2RsIGZpbGUKLSAgICAgICAgICAgICAgICAgLSBvYmplY3Qgb2YgdHlwZSBXU0RMRWxlbWVudCBpZiB0aGUgZXJyb3IgY29tZXMgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgcGFydCBvZiB0aGUgd3NkbCBmaWxlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDb250YWluZXIoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENvbnRhaW5lcjwvSDM+Ci08UFJFPgotdm9pZCA8Qj5zZXRDb250YWluZXI8L0I+KGphdmEubGFuZy5PYmplY3QmbmJzcDtjb250YWluZXIpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgQ29udGFpbmVyIG9mIHRoZSBlcnJvcgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5jb250YWluZXI8L0NPREU+IC0gYW4gT2JqZWN0IG9mIGVpdGhlciBYU0RDb25jcmV0ZUNvbXBvbmVudCBvciBXU0RMRWxlbWVudDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3Vic3RpdHV0aW9ucygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdWJzdGl0dXRpb25zPC9IMz4KLTxQUkU+Ci1FTGlzdCA8Qj5nZXRTdWJzdGl0dXRpb25zPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGxpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBwYXJhbWV0ZXJzIGFzIFN0cmluZ3MuCi08UD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBsaXN0IHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycyBhcyBTdHJpbmdzLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMRGlhZ25vc3RpYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExEaWFnbm9zdGljLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWY1ZmNiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ODMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUyIEVEVCAyMDA4IC0tPgotPFRJVExFPgotV1NETERpYWdub3N0aWNJbXBsCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY0ltcGwgY2xhc3MiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IldTRExEaWFnbm9zdGljSW1wbCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBXU0RMRGlhZ25vc3RpY0ltcGw8L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPkVPYmplY3RJbXBsCi0gICAgICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY0ltcGw8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWM8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgY2xhc3MgPEI+V1NETERpYWdub3N0aWNJbXBsPC9CPjxEVD5leHRlbmRzIEVPYmplY3RJbXBsPERUPmltcGxlbWVudHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvREw+Ci08L1BSRT4KLQotPFA+Ci1EZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBXU0RMRGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgY2xhc3MgaXMgYmFzZWQKLSBvbiBYU0REaWFnbm9zdGljSW1wbAotIDxwPgotIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gPC9wPgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI1dTRExEaWFnbm9zdGljSW1wbCgpIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWZhdWx0IGNvbnN0cnVjdG9yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNXU0RMRGlhZ25vc3RpY0ltcGwob3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWMpIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+PC9CPihvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpYyZuYnNwO3hzZERpYWdub3N0aWMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXcmFwcyBhbiBYU0QgZGlhZ25vc3RpYyBpbnRvIGEgV1NETCBkaWFnbm9zdGljLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0Q29sdW1uKCkiPmdldENvbHVtbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0Q29udGFpbmVyKCkiPmdldENvbnRhaW5lcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3JldHVybnMgdGhlIEVsZW1lbnQgd2hlcmUgdGhlIGVycm9yIG9jY3VyczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0S2V5KCkiPmdldEtleTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNnZXRMaW5lKCkiPmdldExpbmU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldExvY2F0aW9uKCkiPmdldExvY2F0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNnZXRNZXNzYWdlKCkiPmdldE1lc3NhZ2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7b3JnLnczYy5kb20uTm9kZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldE5vZGUoKSI+Z2V0Tm9kZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIERPTSBOb2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI2dldFNldmVyaXR5KCkiPmdldFNldmVyaXR5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UHJvdmlkZXMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO0VMaXN0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0U3Vic3RpdHV0aW9ucygpIj5nZXRTdWJzdGl0dXRpb25zPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGxpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBwYXJhbWV0ZXJzIGFzIFN0cmluZ3MuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNzZXRDb2x1bW4oaW50KSI+c2V0Q29sdW1uPC9BPjwvQj4oaW50Jm5ic3A7bmV3Q29sdW1uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjb2x1bW4gYXR0cmlidXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjc2V0Q29udGFpbmVyKGphdmEubGFuZy5PYmplY3QpIj5zZXRDb250YWluZXI8L0E+PC9CPihqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7Y29udGFpbmVyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgQ29udGFpbmVyIG9mIHRoZSBlcnJvcjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjc2V0S2V5KGphdmEubGFuZy5TdHJpbmcpIj5zZXRLZXk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGtleS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI3NldExpbmUoaW50KSI+c2V0TGluZTwvQT48L0I+KGludCZuYnNwO25ld0xpbmUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI3NldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpIj5zZXRMb2NhdGlvbjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtsb2NhdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIG9mIHRoZSBsb2FjdGlvbiBhdHRyaWJ1dGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNzZXRNZXNzYWdlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRNZXNzYWdlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25ld01lc3NhZ2UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIGEgbmV3IHZhbHVlIGZvciB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNzZXROb2RlKG9yZy53M2MuZG9tLk5vZGUpIj5zZXROb2RlPC9BPjwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCNzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj5zZXRTZXZlcml0eTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4mbmJzcDtuZXdTZXZlcml0eSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJXU0RMRGlhZ25vc3RpY0ltcGwoKSI+PCEtLSAtLT48L0E+PEgzPgotV1NETERpYWdub3N0aWNJbXBsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+V1NETERpYWdub3N0aWNJbXBsPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+RGVmYXVsdCBjb25zdHJ1Y3Rvci4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETERpYWdub3N0aWNJbXBsKG9yZy5lY2xpcHNlLnhzZC5YU0REaWFnbm9zdGljKSI+PCEtLSAtLT48L0E+PEgzPgotV1NETERpYWdub3N0aWNJbXBsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+V1NETERpYWdub3N0aWNJbXBsPC9CPihvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpYyZuYnNwO3hzZERpYWdub3N0aWMpPC9QUkU+Ci08REw+Ci08REQ+V3JhcHMgYW4gWFNEIGRpYWdub3N0aWMgaW50byBhIFdTREwgZGlhZ25vc3RpYy4gVXNlZCB0byByZXBvcnQgcHJvYmxlbXMgaW4KLSBpbmxpbmUgc2NoZW1hcy4KLTxQPgotPERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT54c2REaWFnbm9zdGljPC9DT0RFPiAtIHRoZSBYU0QgZGlhZ25vc3RpYyBvYmplY3QgdG8gd3JhcC4gTXVzdCBub3QgYmUgbnVsbC48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDb2x1bW4oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29sdW1uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldENvbHVtbjwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TGluZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMaW5lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldExpbmU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldExvY2F0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvY2F0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRMb2NhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWVzc2FnZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNZXNzYWdlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRNZXNzYWdlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTZXZlcml0eSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTZXZlcml0eTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4gPEI+Z2V0U2V2ZXJpdHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXRTZXZlcml0eSgpIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UHJvdmlkZXMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldFNldmVyaXR5KCkiPmdldFNldmVyaXR5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmFuIFhTRERpYWdub3N0aWNTZXZlcml0eTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q29sdW1uKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENvbHVtbjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Q29sdW1uPC9CPihpbnQmbmJzcDtuZXdDb2x1bW4pPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjb2x1bW4gYXR0cmlidXRlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uZXdDb2x1bW48L0NPREU+IC0gdGhlIG5ldyBjb2x1bW4gdmFsdWUuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMaW5lKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExpbmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExpbmU8L0I+KGludCZuYnNwO25ld0xpbmUpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMb2NhdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9jYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExvY2F0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bG9jYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgb2YgdGhlIGxvYWN0aW9uIGF0dHJpYnV0ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bG9jYXRpb248L0NPREU+IC0gYSBTdHJpbmcgd2l0aCB0aGUgbmV3IHZhbHVlIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRNZXNzYWdlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRNZXNzYWdlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRNZXNzYWdlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmV3TWVzc2FnZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIGEgbmV3IHZhbHVlIGZvciB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5ld01lc3NhZ2U8L0NPREU+IC0gYSBTdHJpbmcgd2l0aCB0aGUgbmV3IG1lc3NhZ2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTZXZlcml0eTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0U2V2ZXJpdHk8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4mbmJzcDtuZXdTZXZlcml0eSk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGlzIGRpYWdub3N0aWMncyBzZXZlcml0eS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwjc2V0U2V2ZXJpdHkob3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY1NldmVyaXR5KSI+c2V0U2V2ZXJpdHk8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5ld1NldmVyaXR5PC9DT0RFPiAtIHRoZSBuZXcgZGlhZ25vc3RpYyBzZXZlcml0eS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEtleSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRLZXk8L0gzPgotPFBSRT4KLXB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxCPmdldEtleTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldEtleSgpIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+R2V0cyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldEtleSgpIj5nZXRLZXk8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBTdHJpbmcgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRLZXkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEtleTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0S2V5PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwjc2V0S2V5KGphdmEubGFuZy5TdHJpbmcpIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI3NldEtleShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0S2V5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSB0aGUgbmV3IG1lc3NhZ2Uga2V5IHZhbHVlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3Vic3RpdHV0aW9ucygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdWJzdGl0dXRpb25zPC9IMz4KLTxQUkU+Ci1wdWJsaWMgRUxpc3QgPEI+Z2V0U3Vic3RpdHV0aW9uczwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldFN1YnN0aXR1dGlvbnMoKSI+V1NETERpYWdub3N0aWM8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgYSBsaXN0IHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycyBhcyBTdHJpbmdzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXRTdWJzdGl0dXRpb25zKCkiPmdldFN1YnN0aXR1dGlvbnM8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBsaXN0IHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycyBhcyBTdHJpbmdzLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Tm9kZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROb2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgb3JnLnczYy5kb20uTm9kZSA8Qj5nZXROb2RlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwjZ2V0Tm9kZSgpIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+R2V0cyB0aGUgRE9NIE5vZGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycwotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNnZXROb2RlKCkiPmdldE5vZGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIERPTSBub2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnM8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE5vZGUob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5vZGU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldE5vZGU8L0I+KG9yZy53M2MuZG9tLk5vZGUmbmJzcDtub2RlKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI3NldE5vZGUob3JnLnczYy5kb20uTm9kZSkiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI3NldE5vZGUob3JnLnczYy5kb20uTm9kZSkiPnNldE5vZGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENvbnRhaW5lcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb250YWluZXI8L0gzPgotPFBSRT4KLXB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxCPmdldENvbnRhaW5lcjwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldENvbnRhaW5lcigpIj5XU0RMRGlhZ25vc3RpYzwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+cmV0dXJucyB0aGUgRWxlbWVudCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldENvbnRhaW5lcigpIj5nZXRDb250YWluZXI8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+LSBPYmplY3Qgb2YgdHlwZSBYU0RDb25jcmV0ZUNvbXBvbmVudCBpZiB0aGUgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbWVzIGZyb20gdGhlIGlubGluZSBzY2hlbWEgb2YgYSB3c2RsIGZpbGUKLSAgICAgICAgICAgICAgICAgLSBvYmplY3Qgb2YgdHlwZSBXU0RMRWxlbWVudCBpZiB0aGUgZXJyb3IgY29tZXMgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgcGFydCBvZiB0aGUgd3NkbCBmaWxlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDb250YWluZXIoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENvbnRhaW5lcjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Q29udGFpbmVyPC9CPihqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7Y29udGFpbmVyKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI3NldENvbnRhaW5lcihqYXZhLmxhbmcuT2JqZWN0KSI+V1NETERpYWdub3N0aWM8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIENvbnRhaW5lciBvZiB0aGUgZXJyb3IKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwjc2V0Q29udGFpbmVyKGphdmEubGFuZy5PYmplY3QpIj5zZXRDb250YWluZXI8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNvbnRhaW5lcjwvQ09ERT4gLSBhbiBPYmplY3Qgb2YgZWl0aGVyIFhTRENvbmNyZXRlQ29tcG9uZW50IG9yIFdTRExFbGVtZW50PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ3YmRmNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1XU0RMRGlhZ25vc3RpY1NldmVyaXR5Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY1NldmVyaXR5IGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJXU0RMRGlhZ25vc3RpY1NldmVyaXR5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvRk9OVD4KLTxCUj4KLUNsYXNzIFdTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPkFic3RyYWN0RW51bWVyYXRvcgotICAgICAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPjxCPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eTwvQj4KLTwvUFJFPgotPEhSPgotPERMPgotPERUPjxQUkU+cHVibGljIGZpbmFsIGNsYXNzIDxCPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0I+PERUPmV4dGVuZHMgQWJzdHJhY3RFbnVtZXJhdG9yPC9ETD4KLTwvUFJFPgotCi08UD4KLVdTREwgZGlhZ25vc3RpYyBzZXZlcml0eSBsZXZlbHMgdHlwZSBzYWZlIGVudW1lcmF0aW9uLiBUaGlzIGNsYXNzIGlzIHNpbWlsYXIKLSB0byBYU0REaWFnbm9zdGljU2V2ZXJpdHkuCi0gPHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzCi0gQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSA8L3A+Ci08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNFUlJPUiI+RVJST1I8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgYmFkIGFuZCB0aGF0IHRoZSBzY2hlbWEgaXMKLSBsaWtlbHkgbm90IHN1aXRhYmxlIGZvciB1c2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRVJST1JfTElURVJBTCI+RVJST1JfTElURVJBTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgJzxlbT48Yj5FcnJvcjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNGQVRBTCI+RkFUQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgcmVhbGx5IGJhZCBhbmQgdGhhdCBmdXJ0aGVyCi0gcHJvY2Vzc2luZyBpcyBsaWtlbHkgbm90IHBvc3NpYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI0ZBVEFMX0xJVEVSQUwiPkZBVEFMX0xJVEVSQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlICc8ZW0+PGI+RmF0YWw8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjSU5GT1JNQVRJT04iPklORk9STUFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIG9ubHkgcG90ZW50aWFsIGFuZCB0aGF0IHRoZQotIGRlZmluaXRpb24gaXMgdmVyeSBsaWtlbHkgc3VpdGFibGUgZm9yIHVzZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNJTkZPUk1BVElPTl9MSVRFUkFMIj5JTkZPUk1BVElPTl9MSVRFUkFMPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSAnPGVtPjxiPkluZm9ybWF0aW9uPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7amF2YS51dGlsLkxpc3Q8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjVkFMVUVTIj5WQUxVRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBwdWJsaWMgcmVhZC1vbmx5IGxpc3Qgb2YgYWxsIHRoZSAnPGVtPjxiPkRpYWdub3N0aWMgU2V2ZXJpdHk8L2I+PC9lbT4nCi0gZW51bWVyYXRvcnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNXQVJOSU5HIj5XQVJOSU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIG5vdCB0b28gYmFkIGFuZCB0aGF0IHRoZQotIGRlZmluaXRpb24gaXMgbGlrZWx5IHN1aXRhYmxlIGZvciB1c2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjV0FSTklOR19MSVRFUkFMIj5XQVJOSU5HX0xJVEVSQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlICc8ZW0+PGI+V2FybmluZzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI2dldChpbnQpIj5nZXQ8L0E+PC9CPihpbnQmbmJzcDt2YWx1ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI2dldChqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2xpdGVyYWwpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSAnPGVtPjxiPkRpYWdub3N0aWMgU2V2ZXJpdHk8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUKLSBzcGVjaWZpZWQgbGl0ZXJhbCB2YWx1ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNnZXRCeU5hbWUoamF2YS5sYW5nLlN0cmluZykiPmdldEJ5TmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gc3BlY2lmaWVkIG5hbWUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJGQVRBTCI+PCEtLSAtLT48L0E+PEgzPgotRkFUQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkZBVEFMPC9CPjwvUFJFPgotPERMPgotPEREPlRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIHJlYWxseSBiYWQgYW5kIHRoYXQgZnVydGhlcgotIHByb2Nlc3NpbmcgaXMgbGlrZWx5IG5vdCBwb3NzaWJsZS4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRkFUQUxfTElURVJBTCI+PENPREU+RkFUQUxfTElURVJBTDwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFUlJPUiI+PCEtLSAtLT48L0E+PEgzPgotRVJST1I8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVSUk9SPC9CPjwvUFJFPgotPERMPgotPEREPlRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIGJhZCBhbmQgdGhhdCB0aGUgc2NoZW1hIGlzCi0gbGlrZWx5IG5vdCBzdWl0YWJsZSBmb3IgdXNlLgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCNFUlJPUl9MSVRFUkFMIj48Q09ERT5FUlJPUl9MSVRFUkFMPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY1NldmVyaXR5LkVSUk9SIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldBUk5JTkciPjwhLS0gLS0+PC9BPjxIMz4KLVdBUk5JTkc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPldBUk5JTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgbm90IHRvbyBiYWQgYW5kIHRoYXQgdGhlCi0gZGVmaW5pdGlvbiBpcyBsaWtlbHkgc3VpdGFibGUgZm9yIHVzZS4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjV0FSTklOR19MSVRFUkFMIj48Q09ERT5XQVJOSU5HX0xJVEVSQUw8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkuV0FSTklORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTkZPUk1BVElPTiI+PCEtLSAtLT48L0E+PEgzPgotSU5GT1JNQVRJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPklORk9STUFUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIG9ubHkgcG90ZW50aWFsIGFuZCB0aGF0IHRoZQotIGRlZmluaXRpb24gaXMgdmVyeSBsaWtlbHkgc3VpdGFibGUgZm9yIHVzZS4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjSU5GT1JNQVRJT05fTElURVJBTCI+PENPREU+SU5GT1JNQVRJT05fTElURVJBTDwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eS5JTkZPUk1BVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQVRBTF9MSVRFUkFMIj48IS0tIC0tPjwvQT48SDM+Ci1GQVRBTF9MSVRFUkFMPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4gPEI+RkFUQUxfTElURVJBTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgJzxlbT48Yj5GYXRhbDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI0ZBVEFMIj48Q09ERT5GQVRBTDwvQ09ERT48L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVSUk9SX0xJVEVSQUwiPjwhLS0gLS0+PC9BPjxIMz4KLUVSUk9SX0xJVEVSQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiA8Qj5FUlJPUl9MSVRFUkFMPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRVJST1IiPjxDT0RFPkVSUk9SPC9DT0RFPjwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV0FSTklOR19MSVRFUkFMIj48IS0tIC0tPjwvQT48SDM+Ci1XQVJOSU5HX0xJVEVSQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiA8Qj5XQVJOSU5HX0xJVEVSQUw8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlICc8ZW0+PGI+V2FybmluZzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI1dBUk5JTkciPjxDT0RFPldBUk5JTkc8L0NPREU+PC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTkZPUk1BVElPTl9MSVRFUkFMIj48IS0tIC0tPjwvQT48SDM+Ci1JTkZPUk1BVElPTl9MSVRFUkFMPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4gPEI+SU5GT1JNQVRJT05fTElURVJBTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgJzxlbT48Yj5JbmZvcm1hdGlvbjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI0lORk9STUFUSU9OIj48Q09ERT5JTkZPUk1BVElPTjwvQ09ERT48L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlZBTFVFUyI+PCEtLSAtLT48L0E+PEgzPgotVkFMVUVTPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEudXRpbC5MaXN0IDxCPlZBTFVFUzwvQj48L1BSRT4KLTxETD4KLTxERD5BIHB1YmxpYyByZWFkLW9ubHkgbGlzdCBvZiBhbGwgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicKLSBlbnVtZXJhdG9ycy4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiA8Qj5nZXQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtsaXRlcmFsKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotIHNwZWNpZmllZCBsaXRlcmFsIHZhbHVlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCeU5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJ5TmFtZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+IDxCPmdldEJ5TmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gc3BlY2lmaWVkIG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiA8Qj5nZXQ8L0I+KGludCZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYxZjVkNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTIgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1XU0RMUGFyc2VyCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUGFyc2VyIGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJXU0RMUGFyc2VyIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETFBhcnNlci5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBhcnNlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvRk9OVD4KLTxCUj4KLUNsYXNzIFdTRExQYXJzZXI8L0gyPgotPFBSRT4KLWphdmEubGFuZy5PYmplY3QKLSAgPElNRyBTUkM9Ii4uLy4uLy4uLy4uLy4uL3Jlc291cmNlcy9pbmhlcml0LmdpZiIgQUxUPSJleHRlbmRlZCBieSAiPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIKLSAgICAgIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExQYXJzZXI8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD5vcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguRFRESGFuZGxlciwgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXIsIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyPC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+PFBSRT5wdWJsaWMgY2xhc3MgPEI+V1NETFBhcnNlcjwvQj48RFQ+ZXh0ZW5kcyBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyPERUPmltcGxlbWVudHMgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyPC9ETD4KLTwvUFJFPgotCi08UD4KLVRoZSA8Yj5TQVggUGFyc2VyPC9iPiBmb3IgdGhlIFdTREwgbW9kZWwuIFRoaXMgY2xhc3MnIG1haW4gcmVzcG9uc2liaWxpdHkgaXMKLSB0byBjb21wdXRlIGxpbmUvY29sdW1uIGluZm9ybWF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIHNvdXJjZSBYTUwKLSBkb2N1bWVudC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gYSBtYXAgb2YgZWFjaCBub2RlIHRvIGl0cyB1c2VyIGRhdGEuCi0gPHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzCi0gQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSA8L3A+Ci0gCi0gW0lTU1VFXSBNb3N0IG9mIHRoaXMgY2xhc3MnIGltcGxlbWVudGF0aW9uIGlzIGEgY2xvbmUgb2YgWFNEUGFyc2VyLiBUaGVyZSBhcmUKLSBwbGFucyB0byB3b3JrIG9uIGNsb3NlbHkgaW50ZWdyYXRpbmcgdGhpcyBjbGFzcyBhbmQgWFNEUGFyc2VyIHRvIHByb3ZpZGUgZm9yCi0gdGhlIG1vc3QgZWZmaWNpZW50IHByb2Nlc3Npbmcgb2YgaW5saW5lIHNjaGVtYXMuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI1dTRExQYXJzZXIoKSI+V1NETFBhcnNlcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RlZmF1bHQgY29uc3RydWN0b3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNXU0RMUGFyc2VyKGphdmEudXRpbC5NYXApIj5XU0RMUGFyc2VyPC9BPjwvQj4oamF2YS51dGlsLk1hcCZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgV1NETCBwYXJzZXIgZ2l2ZW4gYSBzZXQgb2YgcGFyc2luZyBvcHRpb25zLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpIj5jaGFyYWN0ZXJzPC9BPjwvQj4oY2hhcltdJm5ic3A7Y2hhcmFjdGVycywKLSAgICAgICAgICAgaW50Jm5ic3A7c3RhcnQsCi0gICAgICAgICAgIGludCZuYnNwO2xlbmd0aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2NvbW1lbnQoY2hhcltdLCBpbnQsIGludCkiPmNvbW1lbnQ8L0E+PC9CPihjaGFyW10mbmJzcDtjaGFyYWN0ZXJzLAotICAgICAgICBpbnQmbmJzcDtzdGFydCwKLSAgICAgICAgaW50Jm5ic3A7bGVuZ3RoKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZW5kQ0RBVEEoKSI+ZW5kQ0RBVEE8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNlbmREb2N1bWVudCgpIj5lbmREb2N1bWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2VuZERURCgpIj5lbmREVEQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNlbmRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5lbmRFbGVtZW50PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3VyaSwKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2xvY2FsTmFtZSwKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3FOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZW5kRW50aXR5KGphdmEubGFuZy5TdHJpbmcpIj5lbmRFbnRpdHk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2Vycm9yKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKSI+ZXJyb3I8L0E+PC9CPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiZuYnNwO2V4Y2VwdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2ZhdGFsRXJyb3Iob3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uKSI+ZmF0YWxFcnJvcjwvQT48L0I+KG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiZuYnNwO2V4Y2VwdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2ZhdGFsRXJyb3Iob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pIj5mYXRhbEVycm9yPC9BPjwvQj4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24mbmJzcDtleGNlcHRpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7amF2YS51dGlsLkNvbGxlY3Rpb248L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0RGlhZ25vc3RpY3MoKSI+Z2V0RGlhZ25vc3RpY3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQcm92aWRlcyBhIGNvbGxlY3Rpb24gd2l0aCB0aGUgZGlhZ25vc3RpY3MgZ2VuZXJhdGVkIGR1cmluZyBwYXJzaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtvcmcudzNjLmRvbS5Eb2N1bWVudDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXREb2N1bWVudCgpIj5nZXREb2N1bWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Byb3ZpZGVzIHRoZSBET00gZG9jdW1lbnQgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSBXU0RMIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2dldEVuY29kaW5nKCkiPmdldEVuY29kaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRFbmRDb2x1bW4ob3JnLnczYy5kb20uTm9kZSkiPmdldEVuZENvbHVtbjwvQT48L0I+KG9yZy53M2MuZG9tLk5vZGUmbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRFbmRMaW5lKG9yZy53M2MuZG9tLk5vZGUpIj5nZXRFbmRMaW5lPC9BPjwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBsaW5lIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRTdGFydENvbHVtbihvcmcudzNjLmRvbS5Ob2RlKSI+Z2V0U3RhcnRDb2x1bW48L0E+PC9CPihvcmcudzNjLmRvbS5Ob2RlJm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRTdGFydExpbmUob3JnLnczYy5kb20uTm9kZSkiPmdldFN0YXJ0TGluZTwvQT48L0I+KG9yZy53M2MuZG9tLk5vZGUmbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEudXRpbC5NYXA8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0VXNlckRhdGEob3JnLnczYy5kb20uTm9kZSkiPmdldFVzZXJEYXRhPC9BPjwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3BhcnNlKG9yZy54bWwuc2F4LklucHV0U291cmNlKSI+cGFyc2U8L0E+PC9CPihvcmcueG1sLnNheC5JbnB1dFNvdXJjZSZuYnNwO2lucHV0U291cmNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oamF2YS5pby5JbnB1dFN0cmVhbSZuYnNwO2lucHV0U3RyZWFtKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIHRoZSBYTUwgY29udGVudCByZWFkIGZyb20gdGhlIGdpdmVuIGlucHV0IHN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnByb2Nlc3NpbmdJbnN0cnVjdGlvbjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RhdGEpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7b3JnLnhtbC5zYXguSW5wdXRTb3VyY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+cmVzb2x2ZUVudGl0eTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwdWJsaWNJZCwKLSAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3N5c3RlbUlkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjc2V0RG9jdW1lbnRMb2NhdG9yKG9yZy54bWwuc2F4LkxvY2F0b3IpIj5zZXREb2N1bWVudExvY2F0b3I8L0E+PC9CPihvcmcueG1sLnNheC5Mb2NhdG9yJm5ic3A7bG9jYXRvcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3N0YXJ0Q0RBVEEoKSI+c3RhcnRDREFUQTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3N0YXJ0RG9jdW1lbnQoKSI+c3RhcnREb2N1bWVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI3N0YXJ0RFREKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5zdGFydERURDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lLAotICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3B1YmxpY0lkLAotICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3N5c3RlbUlkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpIj5zdGFydEVsZW1lbnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dXJpLAotICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtsb2NhbE5hbWUsCi0gICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3FOYW1lLAotICAgICAgICAgICAgIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMmbmJzcDthdHRyaWJ1dGVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjc3RhcnRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykiPnN0YXJ0RW50aXR5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCN3YXJuaW5nKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKSI+d2FybmluZzwvQT48L0I+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uJm5ic3A7ZXhjZXB0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyPC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZW5kUHJlZml4TWFwcGluZywgaWdub3JhYmxlV2hpdGVzcGFjZSwgbm90YXRpb25EZWNsLCBza2lwcGVkRW50aXR5LCBzdGFydFByZWZpeE1hcHBpbmcsIHVucGFyc2VkRW50aXR5RGVjbDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy5PYmplY3Q8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5lcXVhbHMsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IldTRExQYXJzZXIoKSI+PCEtLSAtLT48L0E+PEgzPgotV1NETFBhcnNlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPldTRExQYXJzZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5EZWZhdWx0IGNvbnN0cnVjdG9yLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJXU0RMUGFyc2VyKGphdmEudXRpbC5NYXApIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMUGFyc2VyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+V1NETFBhcnNlcjwvQj4oamF2YS51dGlsLk1hcCZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIFdTREwgcGFyc2VyIGdpdmVuIGEgc2V0IG9mIHBhcnNpbmcgb3B0aW9ucy4KLTxQPgotPERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIGEgTWFwIG9mIFN0cmluZyB0byBPYmplY3QsIHBhc3NlZCBhbG9uZyB0aHJvdWdoIHRoZSBSZXNvdXJjZVNldCBhbmQgUmVzb3VyY2UuPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RW5kQ29sdW1uKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbmRDb2x1bW48L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgaW50IDxCPmdldEVuZENvbHVtbjwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5vZGU8L0NPREU+IC0gdGhlIG5vZGUgdG8gcXVlcnkuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBjb2x1bW4gYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgZW5kcy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVuZExpbmUob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVuZExpbmU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgaW50IDxCPmdldEVuZExpbmU8L0I+KG9yZy53M2MuZG9tLk5vZGUmbmJzcDtub2RlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgZW5kcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bm9kZTwvQ09ERT4gLSB0aGUgbm9kZSB0byBxdWVyeS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgZW5kcy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFN0YXJ0Q29sdW1uKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdGFydENvbHVtbjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBpbnQgPEI+Z2V0U3RhcnRDb2x1bW48L0I+KG9yZy53M2MuZG9tLk5vZGUmbmJzcDtub2RlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5vZGU8L0NPREU+IC0gdGhlIG5vZGUgdG8gcXVlcnkuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBjb2x1bW4gYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3RhcnRMaW5lKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdGFydExpbmU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgaW50IDxCPmdldFN0YXJ0TGluZTwvQj4ob3JnLnczYy5kb20uTm9kZSZuYnNwO25vZGUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5vZGU8L0NPREU+IC0gdGhlIG5vZGUgdG8gcXVlcnkuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBsaW5lIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIHN0YXJ0cy48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFVzZXJEYXRhKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRVc2VyRGF0YTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBqYXZhLnV0aWwuTWFwIDxCPmdldFVzZXJEYXRhPC9CPihvcmcudzNjLmRvbS5Ob2RlJm5ic3A7bm9kZSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLiBJZiB0aGUgbm9kZSBoYXMgbm8gdXNlcgotIGRhdGEsIGEgbmV3IGVtcHR5IG1hcCBpcyBjcmVhdGVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5ub2RlPC9DT0RFPiAtIHRoZSBub2RlIHRvIHF1ZXJ5LgotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdXNlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNoYXJhY3RlcnMoY2hhcltdLCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNoYXJhY3RlcnM8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmNoYXJhY3RlcnM8L0I+KGNoYXJbXSZuYnNwO2NoYXJhY3RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtsZW5ndGgpCi0gICAgICAgICAgICAgICAgdGhyb3dzIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5jaGFyYWN0ZXJzPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXI8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPmNoYXJhY3RlcnM8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21tZW50KGNoYXJbXSwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21tZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jb21tZW50PC9CPihjaGFyW10mbmJzcDtjaGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bGVuZ3RoKQotICAgICAgICAgICAgIHRocm93cyBvcmcueG1sLnNheC5TQVhFeGNlcHRpb248L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Y29tbWVudDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVuZENEQVRBKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWVuZENEQVRBPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5lbmRDREFUQTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5lbmRDREFUQTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVuZERvY3VtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWVuZERvY3VtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5lbmREb2N1bWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5lbmREb2N1bWVudDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyPC9DT0RFPjxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT5lbmREb2N1bWVudDwvQ09ERT4gaW4gY2xhc3MgPENPREU+b3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVuZERURCgpIj48IS0tIC0tPjwvQT48SDM+Ci1lbmREVEQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmVuZERURDwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5lbmREVEQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5vcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlbmRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1lbmRFbGVtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5lbmRFbGVtZW50PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dXJpLAotICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cU5hbWUpCi0gICAgICAgICAgICAgICAgdGhyb3dzIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5lbmRFbGVtZW50PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXI8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPmVuZEVsZW1lbnQ8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlbmRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWVuZEVudGl0eTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+ZW5kRW50aXR5PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+ZW5kRW50aXR5PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZXJyb3Iob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1lcnJvcjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+ZXJyb3I8L0I+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uJm5ic3A7ZXhjZXB0aW9uKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5lcnJvcjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+ZXJyb3I8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmYXRhbEVycm9yKG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWZhdGFsRXJyb3I8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmZhdGFsRXJyb3I8L0I+KG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiZuYnNwO2V4Y2VwdGlvbik8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZhdGFsRXJyb3Iob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1mYXRhbEVycm9yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5mYXRhbEVycm9yPC9CPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiZuYnNwO2V4Y2VwdGlvbik8L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+ZmF0YWxFcnJvcjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+ZmF0YWxFcnJvcjwvQ09ERT4gaW4gY2xhc3MgPENPREU+b3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERpYWdub3N0aWNzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERpYWdub3N0aWNzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gPEI+Z2V0RGlhZ25vc3RpY3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Qcm92aWRlcyBhIGNvbGxlY3Rpb24gd2l0aCB0aGUgZGlhZ25vc3RpY3MgZ2VuZXJhdGVkIGR1cmluZyBwYXJzaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgQ29sbGVjdGlvbiBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PENPREU+V1NETERpYWdub3N0aWM8L0NPREU+PC9BPiBvYmplY3RzLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RG9jdW1lbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RG9jdW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCA8Qj5nZXREb2N1bWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlByb3ZpZGVzIHRoZSBET00gZG9jdW1lbnQgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSBXU0RMIGRvY3VtZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSByZXN1bHRpbmcgRE9NIGRvY3VtZW50LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+cGFyc2U8L0I+KG9yZy54bWwuc2F4LklucHV0U291cmNlJm5ic3A7aW5wdXRTb3VyY2UpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnBhcnNlPC9CPihqYXZhLmlvLklucHV0U3RyZWFtJm5ic3A7aW5wdXRTdHJlYW0pPC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIHRoZSBYTUwgY29udGVudCByZWFkIGZyb20gdGhlIGdpdmVuIGlucHV0IHN0cmVhbS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5wdXRTdHJlYW08L0NPREU+IC0gdGhlIHNvdXJjZSBpbnB1dCBzdHJlYW0uIE11c3Qgbm90IGJlIG51bGwuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXByb2Nlc3NpbmdJbnN0cnVjdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+cHJvY2Vzc2luZ0luc3RydWN0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtkYXRhKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb248L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5vcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+cHJvY2Vzc2luZ0luc3RydWN0aW9uPC9DT0RFPiBpbiBjbGFzcyA8Q09ERT5vcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcmVzb2x2ZUVudGl0eTwvSDM+Ci08UFJFPgotcHVibGljIG9yZy54bWwuc2F4LklucHV0U291cmNlIDxCPnJlc29sdmVFbnRpdHk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwdWJsaWNJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtzeXN0ZW1JZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5yZXNvbHZlRW50aXR5PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPnJlc29sdmVFbnRpdHk8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREb2N1bWVudExvY2F0b3Iob3JnLnhtbC5zYXguTG9jYXRvcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERvY3VtZW50TG9jYXRvcjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RG9jdW1lbnRMb2NhdG9yPC9CPihvcmcueG1sLnNheC5Mb2NhdG9yJm5ic3A7bG9jYXRvcik8L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c2V0RG9jdW1lbnRMb2NhdG9yPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXI8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPnNldERvY3VtZW50TG9jYXRvcjwvQ09ERT4gaW4gY2xhc3MgPENPREU+b3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN0YXJ0Q0RBVEEoKSI+PCEtLSAtLT48L0E+PEgzPgotc3RhcnRDREFUQTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c3RhcnRDREFUQTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zdGFydENEQVRBPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+b3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyPC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic3RhcnREb2N1bWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1zdGFydERvY3VtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zdGFydERvY3VtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnN0YXJ0RG9jdW1lbnQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5vcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+c3RhcnREb2N1bWVudDwvQ09ERT4gaW4gY2xhc3MgPENPREU+b3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN0YXJ0RFREKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zdGFydERURDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c3RhcnREVEQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3B1YmxpY0lkLAotICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3N5c3RlbUlkKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zdGFydERURDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN0YXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzKSI+PCEtLSAtLT48L0E+PEgzPgotc3RhcnRFbGVtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zdGFydEVsZW1lbnQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2xvY2FsTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnhtbC5zYXguQXR0cmlidXRlcyZuYnNwO2F0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICB0aHJvd3Mgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnN0YXJ0RWxlbWVudDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPm9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyPC9DT0RFPjxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT5zdGFydEVsZW1lbnQ8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzdGFydEVudGl0eShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc3RhcnRFbnRpdHk8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnN0YXJ0RW50aXR5PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c3RhcnRFbnRpdHk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5vcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ3YXJuaW5nKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotd2FybmluZzwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+d2FybmluZzwvQj4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24mbmJzcDtleGNlcHRpb24pPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPndhcm5pbmc8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT5vcmcueG1sLnNheC5FcnJvckhhbmRsZXI8L0NPREU+PERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPndhcm5pbmc8L0NPREU+IGluIGNsYXNzIDxDT0RFPm9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbmNvZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbmNvZGluZzwvSDM+Ci08UFJFPgotcHVibGljIGphdmEubGFuZy5TdHJpbmcgPEI+Z2V0RW5jb2Rpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETFBhcnNlci5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBhcnNlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgyZGM5Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeQotPC9USVRMRT4KLQotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5IGNsYXNzIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvRk9OVD4KLTxCUj4KLUNsYXNzIFdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeTwvSDI+Ci08UFJFPgotamF2YS5sYW5nLk9iamVjdAotICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsCi0gICAgICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnk8L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnk8L0I+PERUPmV4dGVuZHMgUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsPC9ETD4KLTwvUFJFPgotCi08UD4KLVRoaXMgY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGxvYWRpbmcgb2YgV1NETCBvciBYU0QgcmVzb3VyY2UgZnJvbQotIFVSSSdzIHRoYXQgZG9uJ3QgZW5kIHdpdGggLnhzZCBvciAud3NkbCBleHRlbnNpb25zLgotIAotIFRoZXNlIFVSSSdzIGZvaWwgRU1GJ3Mgc3RhbmRhcmQgcmVzb3VyY2UgbG9hZGluZyBtZWNoYW5pc20gd2ljaCBhc3N1bWVzIHRoYXQKLSBhIHJlc291cmNlIHR5cGUgY2FuIGFsd2F5cyBiZSBkZWR1Y2VkIGZyb20gdGhlIGZpbGUgZXh0ZW5zaW9uLgotIAotICBDb2RlIEV4YW1wbGU6Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LklOU1RBTkNFKTsKLSAgICByZXNvdXJjZVNldC5zZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShyZWdpc3RyeSk7Ci0gPHA+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gPC9wPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNpbmNlOjwvQj48L0RUPgotICA8REQ+MS4wPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxQPgotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkpIj5XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnk8L0E+PC9CPihSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5Jm5ic3A7cGFyZW50KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTWFwPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkiPmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtGYWN0b3J5PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjZ2V0RmFjdG9yeShVUkkpIj5nZXRGYWN0b3J5PC9BPjwvQj4oVVJJJm5ic3A7dXJpKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO1Jlc291cmNlLkZhY3Rvcnk8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCNnZXRGYWN0b3J5KFVSSSwgamF2YS5sYW5nLlN0cmluZykiPmdldEZhY3Rvcnk8L0E+PC9CPihVUkkmbmJzcDt1cmksCi0gICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtjb250ZW50VHlwZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtqYXZhLnV0aWwuTWFwPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKSI+Z2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXA8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy5PYmplY3Q8L0I+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT5lcXVhbHMsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5KSI+PCEtLSAtLT48L0E+PEgzPgotV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9CPihSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5Jm5ic3A7cGFyZW50KTwvUFJFPgotPERMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS51dGlsLk1hcCA8Qj5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXA8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFByb3RvY29sVG9GYWN0b3J5TWFwPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS51dGlsLk1hcCA8Qj5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcDwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RmFjdG9yeShVUkkpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGYWN0b3J5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgRmFjdG9yeSA8Qj5nZXRGYWN0b3J5PC9CPihVUkkmbmJzcDt1cmkpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGYWN0b3J5KFVSSSwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZhY3Rvcnk8L0gzPgotPFBSRT4KLXB1YmxpYyBSZXNvdXJjZS5GYWN0b3J5IDxCPmdldEZhY3Rvcnk8L0I+KFVSSSZuYnNwO3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2NvbnRlbnRUeXBlKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzUwNjU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVdTRExSZXNvdXJjZUltcGwKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwgY2xhc3MiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IldTRExSZXNvdXJjZUltcGwiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExSZXNvdXJjZUltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBXU0RMUmVzb3VyY2VJbXBsPC9IMj4KLTxQUkU+Ci1qYXZhLmxhbmcuT2JqZWN0Ci0gIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj5SZXNvdXJjZUltcGwKLSAgICAgIDxJTUcgU1JDPSIuLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw8L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD48UFJFPnB1YmxpYyBjbGFzcyA8Qj5XU0RMUmVzb3VyY2VJbXBsPC9CPjxEVD5leHRlbmRzIFJlc291cmNlSW1wbDwvREw+Ci08L1BSRT4KLQotPFA+Ci08IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotIFRoZSA8Yj5SZXNvdXJjZTwvYj4gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtb2RlbC4KLSBUaGlzIHNwZWNpYWxpemVkIHJlc291cmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGl0J3Mgb3duIHdheSBvZiBtYWtpbmcga2V5cyBhbmQgCi0gaHJlZnMsIGFuZCBpdCdzIG93biBzZXJpYWxpemF0aW9uLiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCBmb3Igc3ViY2xhc3NpbmcgCi0gb3V0c2lkZSBvZiB0aGUgbW9kZWwgaW1wbGVtZW50YXRpb247IGl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgaXMgd2l0aCB0aGUgCi0gUmVzb3VyY2UgZnJhbWV3b3JrLgotIDxwPgotIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotIDwvcD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KLSAgPEREPjEuMDwvREQ+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDwvQ09ERT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI0NPTlRJTlVFX09OX0xPQURfRVJST1IiPkNPTlRJTlVFX09OX0xPQURfRVJST1I8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjVFJBQ0tfTE9DQVRJT04iPlRSQUNLX0xPQ0FUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZCB0aGlzIG9wdGlvbiB3aXRoIGEgdmFsdWUgb2YgQm9vbGVhbi5UUlVFIHRvIHRoZSBvcHRpb25zIG1hcCB3aGVuCi0gbG9hZGluZyBhIHJlc291cmNlIHRvIGluc3RydWN0IHRoZSBsb2FkZXIgdG8gdHJhY2sgc291cmNlIGNvZGUgbG9jYXRpb24gZm9yCi0gZWFjaCBub2RlIGluIHRoZSBzb3VyY2UgZG9jdW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVMiPlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI1dTRExfRU5DT0RJTkciPldTRExfRU5DT0RJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjV1NETF9KQVhQX0NPTkZJRyI+V1NETF9KQVhQX0NPTkZJRzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gb24gUmVzb3VyY2UjbG9hZCBtZXRob2RzIHRvIHNwZWNpZnkgSkFYUCBjb25maWd1cmF0aW9uCi0gdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIFNBWCwgRE9NIHBhcnNlcnMgYW5kIFRyYW5zZm9ybWVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI1dTRExfSkFYUF9QT09MIj5XU0RMX0pBWFBfUE9PTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gb24gUmVzb3VyY2UjbG9hZCBtZXRob2RzIHRvIHNwZWNpZnkgSkFYUCBwb29sIHRvIGJlIHVzZWQKLSBmb3IgbG9hZGluZyBhbmQgc2VyaWFsaXppbmcgWE1MIFNjaGVtYXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjV1NETF9QUk9HUkVTU19NT05JVE9SIj5XU0RMX1BST0dSRVNTX01PTklUT1I8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI1dTRExSZXNvdXJjZUltcGwoVVJJKSI+V1NETFJlc291cmNlSW1wbDwvQT48L0I+KFVSSSZuYnNwO3VyaSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI2F0dGFjaGVkKEVPYmplY3QpIj5hdHRhY2hlZDwvQT48L0I+KEVPYmplY3QmbmJzcDtlT2JqZWN0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2phdmEudXRpbC5NYXA8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkiPmdldERlZmF1bHRTYXZlT3B0aW9uczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkRlZmluaXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI2dldERlZmluaXRpb24oKSI+Z2V0RGVmaW5pdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHJlc291cmNlJ3MgRGVmaW5pdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCNzZXJpYWxpemUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy53M2MuZG9tLkRvY3VtZW50KSI+c2VyaWFsaXplPC9BPjwvQj4oamF2YS5pby5PdXRwdXRTdHJlYW0mbmJzcDtvdXRwdXRTdHJlYW0sCi0gICAgICAgICAgb3JnLnczYy5kb20uRG9jdW1lbnQmbmJzcDtkb2N1bWVudCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI3NlcmlhbGl6ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLnczYy5kb20uRG9jdW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj5zZXJpYWxpemU8L0E+PC9CPihqYXZhLmlvLk91dHB1dFN0cmVhbSZuYnNwO291dHB1dFN0cmVhbSwKLSAgICAgICAgICBvcmcudzNjLmRvbS5Eb2N1bWVudCZuYnNwO2RvY3VtZW50LAotICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtlbmNvZGluZyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5odG1sI3NlcmlhbGl6ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLnczYy5kb20uRWxlbWVudCkiPnNlcmlhbGl6ZTwvQT48L0I+KGphdmEuaW8uT3V0cHV0U3RyZWFtJm5ic3A7b3V0cHV0U3RyZWFtLAotICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQmbmJzcDtlbGVtZW50KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwjc2VyaWFsaXplKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+c2VyaWFsaXplPC9BPjwvQj4oamF2YS5pby5PdXRwdXRTdHJlYW0mbmJzcDtvdXRwdXRTdHJlYW0sCi0gICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCZuYnNwO2VsZW1lbnQsCi0gICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2VuY29kaW5nKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+ZXF1YWxzLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJVU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyI+PCEtLSAtLT48L0E+PEgzPgotVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5VU0VfRVhURU5TSU9OX0ZBQ1RPUklFUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbC5VU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDT05USU5VRV9PTl9MT0FEX0VSUk9SIj48IS0tIC0tPjwvQT48SDM+Ci1DT05USU5VRV9PTl9MT0FEX0VSUk9SPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgPEI+Q09OVElOVUVfT05fTE9BRF9FUlJPUjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbC5DT05USU5VRV9PTl9MT0FEX0VSUk9SIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldTRExfRU5DT0RJTkciPjwhLS0gLS0+PC9BPjxIMz4KLVdTRExfRU5DT0RJTkc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5XU0RMX0VOQ09ESU5HPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsLldTRExfRU5DT0RJTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NETF9QUk9HUkVTU19NT05JVE9SIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMX1BST0dSRVNTX01PTklUT1I8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5XU0RMX1BST0dSRVNTX01PTklUT1I8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwuV1NETF9QUk9HUkVTU19NT05JVE9SIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlRSQUNLX0xPQ0FUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1UUkFDS19MT0NBVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPlRSQUNLX0xPQ0FUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPkFkZCB0aGlzIG9wdGlvbiB3aXRoIGEgdmFsdWUgb2YgQm9vbGVhbi5UUlVFIHRvIHRoZSBvcHRpb25zIG1hcCB3aGVuCi0gbG9hZGluZyBhIHJlc291cmNlIHRvIGluc3RydWN0IHRoZSBsb2FkZXIgdG8gdHJhY2sgc291cmNlIGNvZGUgbG9jYXRpb24gZm9yCi0gZWFjaCBub2RlIGluIHRoZSBzb3VyY2UgZG9jdW1lbnQuCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2dldFVzZXJEYXRhKG9yZy53M2MuZG9tLk5vZGUpIj48Q09ERT5XU0RMUGFyc2VyLmdldFVzZXJEYXRhKG9yZy53M2MuZG9tLk5vZGUpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0U3RhcnRDb2x1bW4ob3JnLnczYy5kb20uTm9kZSkiPjxDT0RFPldTRExQYXJzZXIuZ2V0U3RhcnRDb2x1bW4ob3JnLnczYy5kb20uTm9kZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCNnZXRFbmRDb2x1bW4ob3JnLnczYy5kb20uTm9kZSkiPjxDT0RFPldTRExQYXJzZXIuZ2V0RW5kQ29sdW1uKG9yZy53M2MuZG9tLk5vZGUpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwjZ2V0U3RhcnRMaW5lKG9yZy53M2MuZG9tLk5vZGUpIj48Q09ERT5XU0RMUGFyc2VyLmdldFN0YXJ0TGluZShvcmcudzNjLmRvbS5Ob2RlKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5odG1sI2dldEVuZExpbmUob3JnLnczYy5kb20uTm9kZSkiPjxDT0RFPldTRExQYXJzZXIuZ2V0RW5kTGluZShvcmcudzNjLmRvbS5Ob2RlKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbC5UUkFDS19MT0NBVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJXU0RMX0pBWFBfUE9PTCI+PCEtLSAtLT48L0E+PEgzPgotV1NETF9KQVhQX1BPT0w8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5XU0RMX0pBWFBfUE9PTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gb24gUmVzb3VyY2UjbG9hZCBtZXRob2RzIHRvIHNwZWNpZnkgSkFYUCBwb29sIHRvIGJlIHVzZWQKLSBmb3IgbG9hZGluZyBhbmQgc2VyaWFsaXppbmcgWE1MIFNjaGVtYXMuCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlJlc291cmNlI2xvYWQoSW5wdXRTdHJlYW0sIE1hcCk8L0NPREU+LCAKLTxDT0RFPlJlc291cmNlI2xvYWQoTWFwKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsLldTRExfSkFYUF9QT09MIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldTRExfSkFYUF9DT05GSUciPjwhLS0gLS0+PC9BPjxIMz4KLVdTRExfSkFYUF9DT05GSUc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5XU0RMX0pBWFBfQ09ORklHPC9CPjwvUFJFPgotPERMPgotPEREPlRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGFzIGFuIG9wdGlvbiBvbiBSZXNvdXJjZSNsb2FkIG1ldGhvZHMgdG8gc3BlY2lmeSBKQVhQIGNvbmZpZ3VyYXRpb24KLSB0aGF0IGNyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgU0FYLCBET00gcGFyc2VycyBhbmQgVHJhbnNmb3JtZXIuCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPlJlc291cmNlI2xvYWQoSW5wdXRTdHJlYW0sIE1hcCk8L0NPREU+LCAKLTxDT0RFPlJlc291cmNlI2xvYWQoTWFwKTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsLldTRExfSkFYUF9DT05GSUciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iV1NETFJlc291cmNlSW1wbChVUkkpIj48IS0tIC0tPjwvQT48SDM+Ci1XU0RMUmVzb3VyY2VJbXBsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+V1NETFJlc291cmNlSW1wbDwvQj4oVVJJJm5ic3A7dXJpKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLiAKLSA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiAKLSA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLTxQPgotPERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT51cmk8L0NPREU+IC0gdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIxIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldERlZmluaXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmaW5pdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RGVmaW5pdGlvbjwvQT4gPEI+Z2V0RGVmaW5pdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHJlc291cmNlJ3MgRGVmaW5pdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2VyaWFsaXplKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcudzNjLmRvbS5Eb2N1bWVudCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNlcmlhbGl6ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyB2b2lkIDxCPnNlcmlhbGl6ZTwvQj4oamF2YS5pby5PdXRwdXRTdHJlYW0mbmJzcDtvdXRwdXRTdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkRvY3VtZW50Jm5ic3A7ZG9jdW1lbnQpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXJpYWxpemUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy53M2MuZG9tLkRvY3VtZW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2VyaWFsaXplPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIHZvaWQgPEI+c2VyaWFsaXplPC9CPihqYXZhLmlvLk91dHB1dFN0cmVhbSZuYnNwO291dHB1dFN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRG9jdW1lbnQmbmJzcDtkb2N1bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2VuY29kaW5nKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2VyaWFsaXplKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcudzNjLmRvbS5FbGVtZW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2VyaWFsaXplPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIHZvaWQgPEI+c2VyaWFsaXplPC9CPihqYXZhLmlvLk91dHB1dFN0cmVhbSZuYnNwO291dHB1dFN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCZuYnNwO2VsZW1lbnQpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXJpYWxpemUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXJpYWxpemU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgdm9pZCA8Qj5zZXJpYWxpemU8L0I+KGphdmEuaW8uT3V0cHV0U3RyZWFtJm5ic3A7b3V0cHV0U3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS5FbGVtZW50Jm5ic3A7ZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2VuY29kaW5nKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYXR0YWNoZWQoRU9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWF0dGFjaGVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5hdHRhY2hlZDwvQj4oRU9iamVjdCZuYnNwO2VPYmplY3QpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZhdWx0U2F2ZU9wdGlvbnMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmYXVsdFNhdmVPcHRpb25zPC9IMz4KLTxQUkU+Ci1wdWJsaWMgamF2YS51dGlsLk1hcCA8Qj5nZXREZWZhdWx0U2F2ZU9wdGlvbnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvV1NETFJlc291cmNlSW1wbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZDc2MGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBJbnRlcmZhY2U8YnI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT4gaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPiB0aGF0IHJldHVybiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMUGx1Z2luLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmh0bWwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KGphdmEubGFuZy5TdHJpbmcpIj5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1Vc2VzIG9mIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPk1ldGhvZHMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT4gd2l0aCBwYXJhbWV0ZXJzIG9mIHR5cGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjcmVnaXN0ZXJGYWN0b3J5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KSI+cmVnaXN0ZXJGYWN0b3J5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT4mbmJzcDtmYWN0b3J5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlZGUxZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIEludGVyZmFjZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIEludGVyZmFjZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0iI29yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVVzZXMgb2YgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9BPiBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+TWV0aG9kcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETFBsdWdpbi48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5odG1sI2dldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCkiPmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMQ29uc3RhbnRzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMQ29uc3RhbnRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMWNkZjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvV1NETENvbnN0YW50cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzCi08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlV1NETENvbnN0YW50cy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExDb25zdGFudHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBDbGFzczxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM8L0I+PC9IMj4KLTwvQ0VOVEVSPgotTm8gdXNhZ2Ugb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzCi08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlV1NETENvbnN0YW50cy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExDb25zdGFudHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExEaWFnbm9zdGljLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMRGlhZ25vc3RpYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjMxZDgzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExEaWFnbm9zdGljLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBJbnRlcmZhY2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYwotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgSW50ZXJmYWNlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMRGlhZ25vc3RpYy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExEaWFnbm9zdGljLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgSW50ZXJmYWNlPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWM8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWM8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+Q2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPiB0aGF0IGltcGxlbWVudCA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWM8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNJbXBsPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdTRExEaWFnbm9zdGljIGludGVyZmFjZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvXGNsYXNzLXVzZVdTRExEaWFnbm9zdGljLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETERpYWdub3N0aWMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvV1NETERpYWdub3N0aWNJbXBsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MTc4NTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvV1NETERpYWdub3N0aWNJbXBsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljSW1wbAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY0ltcGwiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBDbGFzczxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljSW1wbDwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljSW1wbAotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNWM3NjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLVVzZXMgb2YgQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpY1NldmVyaXR5Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkiOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgotCi08SFI+Ci08QSBOQU1FPSJtYWluIj48L0E+Ci08Q0VOVEVSPgotPEgyPgotPEI+VXNlcyBvZiBDbGFzczxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0I+PC9IMj4KLTwvQ0VOVEVSPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLVBhY2thZ2VzIHRoYXQgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSIjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQj48L0E+PC9URD4KLTxURD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLiZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci08QSBOQU1FPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotVXNlcyBvZiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+IGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+RmllbGRzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+IGRlY2xhcmVkIGFzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRVJST1JfTElURVJBTCI+RVJST1JfTElURVJBTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgJzxlbT48Yj5FcnJvcjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjRkFUQUxfTElURVJBTCI+RkFUQUxfTElURVJBTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgJzxlbT48Yj5GYXRhbDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjSU5GT1JNQVRJT05fTElURVJBTCI+SU5GT1JNQVRJT05fTElURVJBTDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgJzxlbT48Yj5JbmZvcm1hdGlvbjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjV0FSTklOR19MSVRFUkFMIj5XQVJOSU5HX0xJVEVSQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlICc8ZW0+PGI+V2FybmluZzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+IHRoYXQgcmV0dXJuIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjZ2V0KGludCkiPmdldDwvQT48L0I+KGludCZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gc3BlY2lmaWVkIGludGVnZXIgdmFsdWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eS48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjZ2V0KGphdmEubGFuZy5TdHJpbmcpIj5nZXQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bGl0ZXJhbCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotIHNwZWNpZmllZCBsaXRlcmFsIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPldTRExEaWFnbm9zdGljU2V2ZXJpdHkuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sI2dldEJ5TmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0QnlOYW1lPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSAnPGVtPjxiPkRpYWdub3N0aWMgU2V2ZXJpdHk8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUKLSBzcGVjaWZpZWQgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRGlhZ25vc3RpY0ltcGwuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwjZ2V0U2V2ZXJpdHkoKSI+Z2V0U2V2ZXJpdHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj5XU0RMRGlhZ25vc3RpYy48L0I+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sI2dldFNldmVyaXR5KCkiPmdldFNldmVyaXR5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UHJvdmlkZXMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj5NZXRob2RzIGluIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+IHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWNJbXBsLjwvQj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5odG1sI3NldFNldmVyaXR5KG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eSkiPnNldFNldmVyaXR5PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpY1NldmVyaXR5PC9BPiZuYnNwO25ld1NldmVyaXR5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+V1NETERpYWdub3N0aWMuPC9CPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCNzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpIj5zZXRTZXZlcml0eTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQT4mbmJzcDtzZXZlcml0eSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5DbGFzczwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vcGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9cY2xhc3MtdXNlV1NETERpYWdub3N0aWNTZXZlcml0eS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExQYXJzZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExQYXJzZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwMzk3Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMUGFyc2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExQYXJzZXIKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFBhcnNlciI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMUGFyc2VyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBhcnNlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIENsYXNzPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFBhcnNlcjwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExQYXJzZXIKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMUGFyc2VyLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFBhcnNlci5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9jbGFzcy11c2UvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhZTUwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Ci08L1RJVExFPgotCi0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+Q2xhc3M8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvXGNsYXNzLXVzZVdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IldTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIENsYXNzPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9CPjwvSDI+Ci08L0NFTlRFUj4KLU5vIHVzYWdlIG9mIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Ci08UD4KLTxIUj4KLQotCi08IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExSZXNvdXJjZUltcGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL1dTRExSZXNvdXJjZUltcGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhiZTU5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMUmVzb3VyY2VJbXBsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotVXNlcyBvZiBDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwKLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJVc2VzIG9mIENsYXNzIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbCI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFJlc291cmNlSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDI+Ci08Qj5Vc2VzIG9mIENsYXNzPGJyPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDwvQj48L0gyPgotPC9DRU5URVI+Ci1ObyB1c2FnZSBvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkNsYXNzPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi9wYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1xjbGFzcy11c2VXU0RMUmVzb3VyY2VJbXBsLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iV1NETFJlc291cmNlSW1wbC5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLWZyYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UtZnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU2ZjlmZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UtZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLW9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIHBhY2thZ2UiPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci08Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lVGl0bGVGb250Ij4KLTxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT48L0ZPTlQ+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLUludGVyZmFjZXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PEk+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjxJPldTRExEaWFnbm9zdGljPC9JPjwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotQ2xhc3NlczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IldTRExDb25zdGFudHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+V1NETENvbnN0YW50czwvQT4KLTxCUj4KLTxBIEhSRUY9IldTRExEaWFnbm9zdGljSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5XU0RMRGlhZ25vc3RpY0ltcGw8L0E+Ci08QlI+Ci08QSBIUkVGPSJXU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+Ci08QlI+Ci08QSBIUkVGPSJXU0RMUGFyc2VyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPldTRExQYXJzZXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9BPgotPEJSPgotPEEgSFJFRj0iV1NETFJlc291cmNlSW1wbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5XU0RMUmVzb3VyY2VJbXBsPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMmVkMmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsCi08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCBwYWNrYWdlIj4KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5QUkVWIFBBQ0tBR0U8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBQQUNLQUdFPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPEgyPgotUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsCi08L0gyPgotCi0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLTxQPgotPEI+U2VlOjwvQj4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxBIEhSRUY9IiNwYWNrYWdlX2Rlc2NyaXB0aW9uIj48Qj5EZXNjcmlwdGlvbjwvQj48L0E+Ci08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5JbnRlcmZhY2UgU3VtbWFyeTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD4KLSA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0E+PC9CPjwvVEQ+Ci08VEQ+Ci0gPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljPC9BPjwvQj48L1REPgotPFREPkdlbmVyYXRlZCBieSB0aGUgV1NETCBtb2RlbCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIG1lY2hhbmlzbXMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMQ29uc3RhbnRzPC9BPjwvQj48L1REPgotPFREPlRoaXMgY2xhc3MgZGVmaW5lcyBjb25zdGFudHMgZm9yIFdTREwgZWxlbWVudCB0YWdzIGFuZCByZWxldmFudCBuYW1lc3BhY2VzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljSW1wbDwvQT48L0I+PC9URD4KLTxURD5EZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBXU0RMRGlhZ25vc3RpYyBpbnRlcmZhY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0E+PC9CPjwvVEQ+Ci08VEQ+V1NETCBkaWFnbm9zdGljIHNldmVyaXR5IGxldmVscyB0eXBlIHNhZmUgZW51bWVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExQYXJzZXI8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIDxiPlNBWCBQYXJzZXI8L2I+IGZvciB0aGUgV1NETCBtb2RlbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnk8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgbG9hZGluZyBvZiBXU0RMIG9yIFhTRCByZXNvdXJjZSBmcm9tCi0gVVJJJ3MgdGhhdCBkb24ndCBlbmQgd2l0aCAueHNkIG9yIC53c2RsIGV4dGVuc2lvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPldTRExSZXNvdXJjZUltcGw8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIDxiPlJlc291cmNlPC9iPiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG1vZGVsLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLTxBIE5BTUU9InBhY2thZ2VfZGVzY3JpcHRpb24iPjwhLS0gLS0+PC9BPjxIMj4KLVBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCBEZXNjcmlwdGlvbgotPC9IMj4KLQotPFA+Ci08cD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotICAgICAgICAgICAgICAgIDwvcD4KLTx0YWJsZSB3aWR0aD0iNTAwIj4KLTx0cj4KLTx0ZD4KLTxwPgotICAgICAgICAgICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLSAgICAgICAgICAgICAgICA8L3A+Ci08L3RkPgotPC90cj4KLTwvdGFibGU+Ci08UD4KLQotPFA+Ci08REw+Ci08L0RMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS11c2UuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgUEFDS0FHRTwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXRyZWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyODA5MGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXRyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIENsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwgQ2xhc3MgSGllcmFyY2h5IjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLXRyZWUuaHRtbCI+PEI+UFJFVjwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsCi08L0gyPgotPC9DRU5URVI+Ci08REw+Ci08RFQ+PEI+UGFja2FnZSBIaWVyYXJjaGllczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+QWxsIFBhY2thZ2VzPC9BPjwvREw+Ci08SFI+Ci08SDI+Ci1DbGFzcyBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZhLmxhbmcuT2JqZWN0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+QWJzdHJhY3RFbnVtZXJhdG9yPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyIChpbXBsZW1lbnRzIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5EVERIYW5kbGVyLCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciwgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExQYXJzZXI8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+RU9iamVjdEltcGw8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5XU0RMRGlhZ25vc3RpY0ltcGw8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+UmVzb3VyY2VJbXBsPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExSZXNvdXJjZUltcGw8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETENvbnN0YW50czwvQj48L0E+PC9VTD4KLTwvVUw+Ci08SDI+Ci1JbnRlcmZhY2UgSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExEaWFnbm9zdGljPC9CPjwvQT48L1VMPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS10cmVlLmh0bWwiPjxCPlBSRVY8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXVzZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXVzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjE1ZDNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS11c2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1Vc2VzIG9mIFBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbAotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlVzZXMgb2YgUGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIjsKLX0KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPC9OT1NDUklQVD4KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Ci0KLQotPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8QSBIUkVGPSIjbWFpbiI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLTxCPlVzZXMgb2YgUGFja2FnZTxicj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Ci1QYWNrYWdlcyB0aGF0IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9BPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9IiNvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9CPjwvQT48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuJm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLTxBIE5BTUU9Im9yZy5lY2xpcHNlLndzdC53c2RsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotQ2xhc3NlcyBpbiA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPiB1c2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuaHRtbCNvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5PC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEEgTkFNRT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KLUNsYXNzZXMgaW4gPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDwvQT4gdXNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjwvRk9OVD48L1RIPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvY2xhc3MtdXNlL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMRGlhZ25vc3RpYy5odG1sI29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExEaWFnbm9zdGljPC9CPjwvQT48L0I+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dlbmVyYXRlZCBieSB0aGUgV1NETCBtb2RlbCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIG1lY2hhbmlzbXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL2NsYXNzLXVzZS9XU0RMRGlhZ25vc3RpY1NldmVyaXR5Lmh0bWwjb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETERpYWdub3N0aWNTZXZlcml0eTwvQj48L0E+PC9CPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXU0RMIGRpYWdub3N0aWMgc2V2ZXJpdHkgbGV2ZWxzIHR5cGUgc2FmZSBlbnVtZXJhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS11c2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXVzZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3ZlcnZpZXctZnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL292ZXJ2aWV3LWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNDIwYmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3ZlcnZpZXctZnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MiBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLU92ZXJ2aWV3Ci08L1RJVExFPgotCi08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iT3ZlcnZpZXcsIFdlYiBUb29scyBQbGF0Zm9ybTogV1NETCBFTUYgTW9kZWwgQVBJIGRvY3VtZW50YXRpb24iPgotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLQotPC9IRUFEPgotCi08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSI+Ci0KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBTVU1NQVJZPSIiPgotPFRSPgotPFRIIEFMSUdOPSJsZWZ0IiBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZVRpdGxlRm9udCI+Ci08Qj48L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij48QSBIUkVGPSJhbGxjbGFzc2VzLWZyYW1lLmh0bWwiIHRhcmdldD0icGFja2FnZUZyYW1lIj5BbGwgQ2xhc3NlczwvQT48L0ZPTlQ+Ci08UD4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1QYWNrYWdlczwvRk9OVD4KLTxCUj4KLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLWZyYW1lLmh0bWwiIHRhcmdldD0icGFja2FnZUZyYW1lIj5vcmcuZWNsaXBzZS53c3Qud3NkbDwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL3BhY2thZ2UtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL3BhY2thZ2UtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UtZnJhbWUuaHRtbCIgdGFyZ2V0PSJwYWNrYWdlRnJhbWUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLWZyYW1lLmh0bWwiIHRhcmdldD0icGFja2FnZUZyYW1lIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjwvRk9OVD4KLTxCUj4KLTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0mbmJzcDsKLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL292ZXJ2aWV3LXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI5ZDAyYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNS4wKSBvbiBXZWQgTWF5IDIxIDEzOjA2OjUzIEVEVCAyMDA4IC0tPgotPFRJVExFPgotT3ZlcnZpZXcKLTwvVElUTEU+Ci0KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJPdmVydmlldywgV2ViIFRvb2xzIFBsYXRmb3JtOiBXU0RMIEVNRiBNb2RlbCBBUEkgZG9jdW1lbnRhdGlvbiI+Ci0KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLQotPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gd2luZG93VGl0bGUoKQotewotICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iT3ZlcnZpZXciOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbD9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfdG9wIj48L0E+Ci08IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxBIE5BTUU9Im1haW4iPjwvQT4KLTxDRU5URVI+Ci08SDE+Ci1XZWIgVG9vbHMgUGxhdGZvcm06IFdTREwgRU1GIE1vZGVsIEFQSSBkb2N1bWVudGF0aW9uCi08L0gxPgotPC9DRU5URVI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMiI+PEZPTlQgU0laRT0iKzIiPgotPEI+UGFja2FnZXM8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjIwJSI+PEI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsPC9BPjwvQj48L1REPgotPFREPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMjAlIj48Qj48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT48L0I+PC9URD4KLTxURD4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIyMCUiPjxCPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPjwvQj48L1REPgotPFREPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjIwJSI+PEI+PEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+PC9CPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIyMCUiPjxCPjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw8L0E+PC9CPjwvVEQ+Ci08VEQ+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotJm5ic3A7PEhSPgotCi0KLTwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sP292ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KLTwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vdmVydmlldy10cmVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9vdmVydmlldy10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NjEzZjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvb3ZlcnZpZXctdHJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjUuMCkgb24gV2VkIE1heSAyMSAxMzowNjo1MyBFRFQgMjAwOCAtLT4KLTxUSVRMRT4KLUNsYXNzIEhpZXJhcmNoeQotPC9USVRMRT4KLQotCi08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci0KLTxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIHdpbmRvd1RpdGxlKCkKLXsKLSAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IkNsYXNzIEhpZXJhcmNoeSI7Ci19Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTwvTk9TQ1JJUFQ+Ci0KLTwvSEVBRD4KLQotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0id2luZG93VGl0bGUoKTsiPgotCi0KLTwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPEEgSFJFRj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUj4KLTxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5Vc2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxBIEhSRUY9IiNtYWluIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sP292ZXJ2aWV3LXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPEEgTkFNRT0ibWFpbiI+PC9BPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgQWxsIFBhY2thZ2VzPC9IMj4KLTwvQ0VOVEVSPgotPERMPgotPERUPjxCPlBhY2thZ2UgSGllcmFyY2hpZXM6PC9CPjxERD48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLXRyZWUuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0E+LCA8QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvcGFja2FnZS10cmVlLmh0bWwiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDwvQT4sIDxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9wYWNrYWdlLXRyZWUuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lPC9BPiwgPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UtdHJlZS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0E+LCA8QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UtdHJlZS5odG1sIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsPC9BPjwvREw+Ci08SFI+Ci08SDI+Ci1DbGFzcyBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5qYXZhLmxhbmcuT2JqZWN0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+QWJzdHJhY3RFbnVtZXJhdG9yPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExEaWFnbm9zdGljU2V2ZXJpdHk8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyIChpbXBsZW1lbnRzIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5EVERIYW5kbGVyLCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciwgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExQYXJzZXI8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+RWNsaXBzZVBsdWdpbjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbjwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPkVNRlBsdWdpbjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMUGx1Z2luPC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+RU9iamVjdEltcGw8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj48Qj5XU0RMRGlhZ25vc3RpY0ltcGw8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsIj5XU0RMRGlhZ25vc3RpYzwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5PC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+UmVzb3VyY2VJbXBsPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPldTRExSZXNvdXJjZUltcGw8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETENvbnN0YW50czwvQj48L0E+PC9VTD4KLTwvVUw+Ci08SDI+Ci1JbnRlcmZhY2UgSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPldTRExFbGVtZW50PC9BPikKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBCaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxFbmNvZGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsUmVwbGFjZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVDb250ZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNaW1lWG1sPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVQYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlcjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckJhc2U8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlcjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCkKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyAoYWxzbyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxFbmNvZGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybEVuY29kZWQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsUmVwbGFjZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybFJlcGxhY2VtZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FQ29udGVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVDb250ZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNaW1lWG1sPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU1pbWVYbWw8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCAoYWxzbyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTXVsdGlwYXJ0UmVsYXRlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FUGFydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVQYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyAoYWxzbyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlKQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQm9keTwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXJCYXNlPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXJGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIChhbHNvIGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiPjxCPkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBGYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQUGFja2FnZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVGYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FUGFja2FnZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5MaXRlcmFscy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5OYW1lc3BhY2U8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmphdmEuaW8uU2VyaWFsaXphYmxlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuQmluZGluZ0ZhdWx0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0LCBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLkJpbmRpbmdJbnB1dDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nSW5wdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ0lucHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24sIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuQmluZGluZ091dHB1dDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ091dHB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ091dHB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0LCBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLkRlZmluaXRpb248VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkRlZmluaXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkRlZmluaXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuRGVmaW5pdGlvbiwgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5GYXVsdDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkZhdWx0LCBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQWRkcmVzczwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBCaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUE9wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUE9wZXJhdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxFbmNvZGVkLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsRW5jb2RlZDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxFbmNvZGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxSZXBsYWNlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybFJlcGxhY2VtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQVXJsUmVwbGFjZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5JbXBvcnQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+SW1wb3J0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkltcG9ydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLkltcG9ydCkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuSW5wdXQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5JbnB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5JbnB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5JbnB1dCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuTWVzc2FnZTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TWVzc2FnZTwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+TWVzc2FnZTwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLk1lc3NhZ2UpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVDb250ZW50PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRUNvbnRlbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNaW1lWG1sPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU1pbWVYbWw8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVQYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLk9wZXJhdGlvbjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+T3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5PdXRwdXQ8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+T3V0cHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PdXRwdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4sIGphdmF4LndzZGwuT3V0cHV0KQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5QYXJ0PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuUGFydCkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuUG9ydDxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UG9ydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UG9ydDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLlBvcnQpCi08TEkgVFlQRT0iY2lyY2xlIj5qYXZheC53c2RsLlBvcnRUeXBlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+UG9ydFR5cGU8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Qb3J0VHlwZTwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLlBvcnRUeXBlKQotPExJIFRZUEU9ImNpcmNsZSI+amF2YXgud3NkbC5TZXJ2aWNlPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuU2VydmljZSkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQWRkcmVzczwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcykKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJvZHk8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQm9keTwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIgKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPikKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPmphdmF4LndzZGwuVHlwZXM8VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5UeXBlczwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlR5cGVzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuVHlwZXMpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBQYWNrYWdlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLkxpdGVyYWxzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQUGFja2FnZS5MaXRlcmFsczwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbCI+PEI+V1NETERpYWdub3N0aWM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExFbGVtZW50PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZywgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQsIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nSW5wdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ0lucHV0LCBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJsZUVsZW1lbnQ8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3V0cHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQsIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RGVmaW5pdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5EZWZpbml0aW9uLCBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwIj48Qj5IVFRQT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUFVybEVuY29kZWQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxSZXBsYWNlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRUNvbnRlbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU1pbWVYbWw8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRU11bHRpcGFydFJlbGF0ZWQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEJvZHk8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyLCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj5TT0FQSGVhZGVyQmFzZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyQmFzZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXJGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0KQotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQSGVhZGVyRmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5FeHRlbnNpYmxlRWxlbWVudDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmcpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+QmluZGluZ0ZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nSW5wdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ0lucHV0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5CaW5kaW5nT3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkJpbmRpbmdPdXRwdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuQmluZGluZ091dHB1dCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RGVmaW5pdGlvbjwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5EZWZpbml0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+RmF1bHQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuRmF1bHQsIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+SW1wb3J0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkltcG9ydCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPklucHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLklucHV0LCBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPk1lc3NhZ2VSZWZlcmVuY2U8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5NZXNzYWdlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLk1lc3NhZ2UpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk1lc3NhZ2VSZWZlcmVuY2U8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPkZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLkZhdWx0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+SW5wdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuSW5wdXQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+T3V0cHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLk91dHB1dCkKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+T3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLk9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5PdXRwdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4sIGphdmF4LndzZGwuT3V0cHV0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5QYXJ0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLlBhcnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuUG9ydCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnRUeXBlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLlBvcnRUeXBlKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5TZXJ2aWNlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLlNlcnZpY2UpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5UeXBlczwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5UeXBlcykKLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5GYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5GYXVsdCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBBZGRyZXNzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCI+PEI+SFRUUEJpbmRpbmc8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxFbmNvZGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPjxCPkhUVFBVcmxSZXBsYWNlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+SW1wb3J0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuSW1wb3J0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+SW5wdXQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuSW5wdXQsIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+TWVzc2FnZVJlZmVyZW5jZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk1lc3NhZ2U8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5NZXNzYWdlKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5NZXNzYWdlUmVmZXJlbmNlPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5GYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5GYXVsdCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPklucHV0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLklucHV0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk91dHB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgamF2YXgud3NkbC5PdXRwdXQpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRUNvbnRlbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj48Qj5NSU1FTWltZVhtbDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUiPjxCPk1JTUVNdWx0aXBhcnRSZWxhdGVkPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSI+PEI+TUlNRVBhcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+T3BlcmF0aW9uPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuT3BlcmF0aW9uKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPk91dHB1dDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5NZXNzYWdlUmVmZXJlbmNlPC9BPiwgamF2YXgud3NkbC5PdXRwdXQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBhcnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5QYXJ0KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5Qb3J0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuUG9ydCkKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlBvcnRUeXBlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuUG9ydFR5cGUpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlNlcnZpY2U8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2libGVFbGVtZW50PC9BPiwgamF2YXgud3NkbC5TZXJ2aWNlKQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEFkZHJlc3M8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwIj48Qj5TT0FQQmluZGluZzwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZykKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBCb2R5PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmlsaXR5RWxlbWVudDwvQT4sIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5KQotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+RXh0ZW5zaWJpbGl0eUVsZW1lbnQ8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPlNPQVBIZWFkZXJCYXNlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXJCYXNlPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXI8L0I+PC9BPiAoYWxzbyBleHRlbmRzIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+PEI+U09BUEhlYWRlckZhdWx0PC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQpCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBIZWFkZXJGYXVsdDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCI+U09BUEhlYWRlckJhc2U8L0E+LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAiPjxCPlNPQVBPcGVyYXRpb248L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPkV4dGVuc2liaWxpdHlFbGVtZW50PC9BPiwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbikKLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPlR5cGVzPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj5FeHRlbnNpYmxlRWxlbWVudDwvQT4sIGphdmF4LndzZGwuVHlwZXMpCi08TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPm9yZy5lY2xpcHNlLndzdC53c2RsLjxBIEhSRUY9Im9yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmVjbGlwc2Uud3N0LndzZGwiPjxCPldTRExGYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5vcmcuZWNsaXBzZS53c3Qud3NkbC48QSBIUkVGPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5lY2xpcHNlLndzdC53c2RsIj48Qj5XU0RMUGFja2FnZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+b3JnLmVjbGlwc2Uud3N0LndzZGwuPEEgSFJFRj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuTGl0ZXJhbHMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuZWNsaXBzZS53c3Qud3NkbCI+PEI+V1NETFBhY2thZ2UuTGl0ZXJhbHM8L0I+PC9BPjwvVUw+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEEgSFJFRj0iI21haW4iPjxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/b3ZlcnZpZXctdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLSAgPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci0KLQotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgotPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL3BhY2thZ2UtbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvYXBpL3BhY2thZ2UtbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlmOGU1OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9wYWNrYWdlLWxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC53c2RsCi1vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAKLW9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZQotb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwCi1vcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9yZXNvdXJjZXMvaW5oZXJpdC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9yZXNvdXJjZXMvaW5oZXJpdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MTQ4NjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvcmVzb3VyY2VzL2luaGVyaXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvc2VyaWFsaXplZC1mb3JtLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9zZXJpYWxpemVkLWZvcm0uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YyODMyZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9zZXJpYWxpemVkLWZvcm0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS41LjApIG9uIFdlZCBNYXkgMjEgMTM6MDY6NTMgRURUIDIwMDggLS0+Ci08VElUTEU+Ci1TZXJpYWxpemVkIEZvcm0KLTwvVElUTEU+Ci0KLQotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotCi08U0NSSVBUIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiB3aW5kb3dUaXRsZSgpCi17Ci0gICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTZXJpYWxpemVkIEZvcm0iOwotfQotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08L05PU0NSSVBUPgotCi08L0hFQUQ+Ci0KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9IndpbmRvd1RpdGxlKCk7Ij4KLQotCi08IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxBIEhSRUY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFI+Ci08VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyIgU1VNTUFSWT0iIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+VXNlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWw/c2VyaWFsaXplZC1mb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0ic2VyaWFsaXplZC1mb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci0gIDxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotCi0KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KLTwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KLQotPEhSPgotPENFTlRFUj4KLTxIMT4KLVNlcmlhbGl6ZWQgRm9ybTwvSDE+Ci08L0NFTlRFUj4KLTxIUiBTSVpFPSI0IiBOT1NIQURFPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImNlbnRlciI+PEZPTlQgU0laRT0iKzIiPgotPEI+UGFja2FnZTwvQj4gPEI+b3JnLmVjbGlwc2Uud3N0LndzZGw8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLTxIUiBTSVpFPSI0IiBOT1NIQURFPgotCi08VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEggQUxJR049ImNlbnRlciI+PEZPTlQgU0laRT0iKzIiPgotPEI+UGFja2FnZTwvQj4gPEI+b3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwPC9CPjwvRk9OVD48L1RIPgotPC9UUj4KLTwvVEFCTEU+Ci08SFIgU0laRT0iNCIgTk9TSEFERT4KLQotPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFRIIEFMSUdOPSJjZW50ZXIiPjxGT05UIFNJWkU9IisyIj4KLTxCPlBhY2thZ2U8L0I+IDxCPm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTwvQj48L0ZPTlQ+PC9USD4KLTwvVFI+Ci08L1RBQkxFPgotPEhSIFNJWkU9IjQiIE5PU0hBREU+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxUSCBBTElHTj0iY2VudGVyIj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5QYWNrYWdlPC9CPiA8Qj5vcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA8L0I+PC9GT05UPjwvVEg+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08SFI+Ci0KLQotPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgotPFRSPgotPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlVzZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sP3NlcmlhbGl6ZWQtZm9ybS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InNlcmlhbGl6ZWQtZm9ybS5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotICA8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLQotCi08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPEEgTkFNRT0ic2tpcC1uYXZiYXJfYm90dG9tIj48L0E+Ci08IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9hcGkvc3R5bGVzaGVldC5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9zdHlsZXNoZWV0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQzMWZkYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2FwaS9zdHlsZXNoZWV0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qIEphdmFkb2Mgc3R5bGUgc2hlZXQgKi8KLQotLyogRGVmaW5lIGNvbG9ycywgZm9udHMgYW5kIG90aGVyIHN0eWxlIGF0dHJpYnV0ZXMgaGVyZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgKi8KLQotLyogUGFnZSBiYWNrZ3JvdW5kIGNvbG9yICovCi1ib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRiB9Ci0KLS8qIEhlYWRpbmdzICovCi1oMSB7IGZvbnQtc2l6ZTogMTQ1JSB9Ci0KLS8qIFRhYmxlIGNvbG9ycyAqLwotLlRhYmxlSGVhZGluZ0NvbG9yICAgICB7IGJhY2tncm91bmQ6ICNDQ0NDRkYgfSAvKiBEYXJrIG1hdXZlICovCi0uVGFibGVTdWJIZWFkaW5nQ29sb3IgIHsgYmFja2dyb3VuZDogI0VFRUVGRiB9IC8qIExpZ2h0IG1hdXZlICovCi0uVGFibGVSb3dDb2xvciAgICAgICAgIHsgYmFja2dyb3VuZDogI0ZGRkZGRiB9IC8qIFdoaXRlICovCi0KLS8qIEZvbnQgdXNlZCBpbiBsZWZ0LWhhbmQgZnJhbWUgbGlzdHMgKi8KLS5GcmFtZVRpdGxlRm9udCAgIHsgZm9udC1zaXplOiAxMDAlOyBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiB9Ci0uRnJhbWVIZWFkaW5nRm9udCB7IGZvbnQtc2l6ZTogIDkwJTsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYgfQotLkZyYW1lSXRlbUZvbnQgICAgeyBmb250LXNpemU6ICA5MCU7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIH0KLQotLyogTmF2aWdhdGlvbiBiYXIgZm9udHMgYW5kIGNvbG9ycyAqLwotLk5hdkJhckNlbGwxICAgIHsgYmFja2dyb3VuZC1jb2xvcjojRUVFRUZGO30gLyogTGlnaHQgbWF1dmUgKi8KLS5OYXZCYXJDZWxsMVJldiB7IGJhY2tncm91bmQtY29sb3I6IzAwMDA4Qjt9IC8qIERhcmsgQmx1ZSAqLwotLk5hdkJhckZvbnQxICAgIHsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNvbG9yOiMwMDAwMDA7fQotLk5hdkJhckZvbnQxUmV2IHsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNvbG9yOiNGRkZGRkY7fQotCi0uTmF2QmFyQ2VsbDIgICAgeyBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGO30KLS5OYXZCYXJDZWxsMyAgICB7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7fQotCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2V4dGVuc2lvbi1wb2ludHMvaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvZXh0ZW5zaW9uLXBvaW50cy9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODllODgyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvZXh0ZW5zaW9uLXBvaW50cy9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSAgICAJPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUUkFOU0lUSU9OQUwvL0VOIj4KLQkJPGh0bWwgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4KLTxoZWFkPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotCQk8bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gVGhpcyBwYWdlIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGxpY2Vuc2UuIEZvciBmdWxsIGRldGFpbHMgc2VlIHRoZSBMRUdBTCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBib29rIHRoYXQgY29udGFpbnMgdGhpcyBwYWdlLiIgPgotCi0gICAJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotICAgCQk8dGl0bGU+V1NETCBFTUYgTW9kZWwgRXh0ZW5zaW9uIFBvaW50czwvdGl0bGU+Ci0JCTxMSU5LIFJFTD0iU1RZTEVTSEVFVCIgSFJFRj0iLi4vLi4vYm9vay5jc3MiIENIQVJTRVQ9IklTTy04ODU5LTEiIFRZUEU9InRleHQvY3NzIj4KLQkJPC9oZWFkPgotPGJvZHkgdmxpbms9IiM4MDAwODAiIGxpbms9IiMwMDAwRkYiPgotPGNlbnRlcj4KLTxoMT5XU0RMIEVNRiBNb2RlbCBFeHRlbnNpb24gUG9pbnRzIDwvaDE+Ci08L2NlbnRlcj5UaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludHMgY2FuIGJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFdTREwgRU1GIE1vZGVsOiA8aDM+Ci08YSBuYW1lPSJ3c2RsIj48L2E+V1NETCBBUEk8L2gzPgotPHVsPgotPGxpPgotPGEgaHJlZj0ib3JnX2VjbGlwc2Vfd3N0X3dzZGxfZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuaHRtbCI+b3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvZXh0ZW5zaW9uLXBvaW50cy9vcmdfZWNsaXBzZV93c3Rfd3NkbF9jb250ZW50R2VuZXJhdG9ycy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9leHRlbnNpb24tcG9pbnRzL29yZ19lY2xpcHNlX3dzdF93c2RsX2NvbnRlbnRHZW5lcmF0b3JzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZThkOTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3JlZmVyZW5jZS9leHRlbnNpb24tcG9pbnRzL29yZ19lY2xpcHNlX3dzdF93c2RsX2NvbnRlbnRHZW5lcmF0b3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5Qb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9yczwvdGl0bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9ib29rLmNzcyIpOzwvc3R5bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9zY2hlbWEuY3NzIik7PC9zdHlsZT4KLTwvSEVBRD4KLTxCT0RZPgotPEgxIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+UG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnM8L0gxPgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3Qud3NkbC5jb250ZW50R2VuZXJhdG9yczxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPlNpbmNlOiA8L2g2PjxiPlRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuPC9iPgotPHA+PC9wPgotCi08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5EZXNjcmlwdGlvbjogPC9oNj5UaGUgUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIGN1c3RvbSBnZW5lcmF0b3JzIGZvciBQb3J0cyBhbmQgQmluZGluZ3MuPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+Q29uZmlndXJhdGlvbiBNYXJrdXA6PC9oNj4KLTxwPjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+ICg8YSBocmVmPSIjZS5jb250ZW50R2VuZXJhdG9yIj5jb250ZW50R2VuZXJhdG9yPC9hPikmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZXh0ZW5zaW9uPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cG9pbnQmbmJzcDtDREFUQSAjUkVRVUlSRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bmFtZSZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEJmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1UaGUgUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIGN1c3RvbSBjb250ZW50IGdlbmVyYXRvcnMgZm9yIFdTREwgUG9ydHMgYW5kIEJpbmRpbmdzLjwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPnBvaW50PC9iPiAtIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQ8L2xpPgotPGxpPjxiPmlkPC9iPiAtIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZTwvbGk+Ci08bGk+PGI+bmFtZTwvYj4gLSBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2U8L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmNvbnRlbnRHZW5lcmF0b3IiPmNvbnRlbnRHZW5lcmF0b3I8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGNvbnRlbnRHZW5lcmF0b3I8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bmFtZXNwYWNlJm5ic3A7Q0RBVEEgI1JFUVVJUkVEPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3MmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+bmFtZTwvYj4gLSBOYW1lIHVzZWQgZm9yIHRoaXMgcGFydGljdWxhciBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UuPC9saT4KLTxsaT48Yj5uYW1lc3BhY2U8L2I+IC0gVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLjwvbGk+Ci08bGk+PGI+Y2xhc3M8L2I+IC0gVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyA8Y29kZT5vcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjwvY29kZT4uPC9saT4KLTwvdWw+Ci08YnI+PGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RXhhbXBsZXM6IDwvaDY+VGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY29udGVudCBnZW5lcmF0b3IgY29udHJpYnV0aW9uOgotPHByZSBjbGFzcz0iRXhhbXBsZSI+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5jb250ZW50R2VuZXJhdG9ycyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPiZndDsKLSAgICAgICZsdDtjb250ZW50R2VuZXJhdG9yCi0gICAgICAgICAgICBuYW1lPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtTT0FQJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBuYW1lc3BhY2U9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGNsYXNzPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuZ2VuZXJhdG9yLlNPQVBDb250ZW50R2VuZXJhdG9yJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotPC9zcGFuPjwvcHJlPgotPHA+PC9wPgotCi08YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLjxicj4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCA8YQotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPgotCi08L3A+Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvcmVmZXJlbmNlL2V4dGVuc2lvbi1wb2ludHMvb3JnX2VjbGlwc2Vfd3N0X3dzZGxfZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvZXh0ZW5zaW9uLXBvaW50cy9vcmdfZWNsaXBzZV93c3Rfd3NkbF9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzUwMDgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9yZWZlcmVuY2UvZXh0ZW5zaW9uLXBvaW50cy9vcmdfZWNsaXBzZV93c3Rfd3NkbF9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotPEhFQUQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+V1NETCBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmFjdG9yaWVzPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL2Jvb2suY3NzIik7PC9zdHlsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL3NjaGVtYS5jc3MiKTs8L3N0eWxlPgotPC9IRUFEPgotPEJPRFk+Ci08SDEgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5XU0RMIEV4dGVuc2liaWxpdHkgRWxlbWVudCBGYWN0b3JpZXM8L0gxPgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3Qud3NkbC5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllczxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPlNpbmNlOiA8L2g2PjxiPlRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuPC9iPgotPHA+PC9wPgotCi08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5EZXNjcmlwdGlvbjogPC9oNj5UaGUgV1NETCBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmFjdG9yaWVzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBmYWN0b3JpZXMgZm9yIGNyZWF0aW5nIGN1c3RvbSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLjxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkNvbmZpZ3VyYXRpb24gTWFya3VwOjwvaDY+Ci08cD48L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmV4dGVuc2lvbiI+ZXh0ZW5zaW9uPC9hPiAoPGEgaHJlZj0iI2UuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ij5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L2E+KSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBleHRlbnNpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wb2ludCZuYnNwO0NEQVRBICNSRVFVSVJFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQmZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+cG9pbnQ8L2I+IC0gYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludDwvbGk+Ci08bGk+PGI+aWQ8L2I+IC0gYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlPC9saT4KLTxsaT48Yj5uYW1lPC9iPiAtIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZTwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ij5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWVzcGFjZSZuYnNwO0NEQVRBICNSRVFVSVJFRDxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmNsYXNzJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEJmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPm5hbWVzcGFjZTwvYj4gLSBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uPC9saT4KLTxsaT48Yj5jbGFzczwvYj4gLSBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIDxjb2RlPm9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5PC9jb2RlPi48L2xpPgotPC91bD4KLTxicj48aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5FeGFtcGxlczogPC9oNj5UaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGZhY3RvcnkgY29udHJpYnV0aW9uOgotPHByZSBjbGFzcz0iRXhhbXBsZSI+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllcyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPiZndDsKLSAgICAgICZsdDtleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkKLSAgICAgICAgICAgIG5hbWVzcGFjZT08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgY2xhc3M9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4vJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci08L3NwYW4+PC9wcmU+Ci08cD48L3A+Ci0KLTxicj4KLTxwIGNsYXNzPSJub3RlIFNjaGVtYUNvcHlyaWdodCI+Ci1Db3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuPGJyPgotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IDxhCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+Ci0KLTwvcD4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi9zY2hlbWEuY3NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3NjaGVtYS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZjlkMDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2L3NjaGVtYS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1INi5DYXB0aW9uRmlnQ29sdW1uI2hlYWRlciB7Ci0JZm9udC1zaXplOjE2cHg7IAotCWRpc3BsYXk6aW5saW5lCi19Ci0KLVAuTm90ZSNjb3B5cmlnaHQgewotCWZvbnQtc2l6ZTogc21hbGxlcjsgCi0JZm9udC1zdHlsZTogbm9ybWFsOwotCWNvbG9yOiAjMzM2Njk5OyAKLQlkaXNwbGF5OmlubGluZTsKLQltYXJnaW4tdG9wOiAzLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDExLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsKLX0KLQotUC5Db2RlI2R0ZCB7Ci0JY29sb3I6ICM4MDAwMDA7IAotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi1QLkNvZGUjZHRkQXR0bGlzdCB7Ci0JY29sb3I6ICM4MDAwMDA7IAotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDIwLjAwMDAwMHB0OwotfQotCi1QLkNvZGUjdGFnIHsKLQljb2xvcjogIzAwMDA4MDsgCi0JZGlzcGxheTppbmxpbmU7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsKLX0KLQotUC5Db2RlI2NzdHJpbmcgewotCWNvbG9yOiAjMDA4MDAwOyAKLQlkaXNwbGF5OmlubGluZTsKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0OwkKLX0KLQotLkNvbmZpZ01hcmt1cCNlbGVtZW50RGVzYyB7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi0uQ29uZmlnTWFya3VwI2F0dGxpc3REZXNjIHsKLQljb2xvcjogYmxhY2s7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMzIuMDAwMDAwcHQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi90b3BpY3NfRXh0UG9pbnRfUmVmZXJlbmNlLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi90b3BpY3NfRXh0UG9pbnRfUmVmZXJlbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg1NzllYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvdG9waWNzX0V4dFBvaW50X1JlZmVyZW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0JIAk8dG9jIGxhYmVsPSJFeHRlbnNpb24gUG9pbnRzIFJlZmVyZW5jZSI+Ci08dG9waWMgaHJlZj0icmVmZXJlbmNlL2V4dGVuc2lvbi1wb2ludHMvb3JnX2VjbGlwc2Vfd3N0X3dzZGxfZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC53c2RsLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi90b3BpY3NfUmVmZXJlbmNlLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwuZG9jLmlzdi90b3BpY3NfUmVmZXJlbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhY2YzNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YvdG9waWNzX1JlZmVyZW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIERlZmluZSB0b3BpY3MgZm9yIHRoZSByZWZlcmVuY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0b2MgbGFiZWw9IldTREwgRU1GIG1vZGVsIHJlZmVyZW5jZSIgbGlua190bz0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL3JlZmVyZW5jZV90b2MueG1sI2phdmFkb2Nfd2Vic2VydmljZXMiPgotCQotCTx0b3BpYyBsYWJlbD0iV1NETCBFTUYgTW9kZWwgQVBJIFJlZmVyZW5jZSIgaHJlZj0icmVmZXJlbmNlL2FwaS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPgotCQotCQk8IS0tIFRoZSBqYXZhZG9jdG9jLnhtbCB0b2MgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZC4gLS0+Ci0JCTxsaW5rIHRvYz0iamF2YWRvY3RvYy54bWwiIC8+Ci0JCQotCTwvdG9waWM+Ci0JCi0JCi0JPHRvcGljIGxhYmVsPSJXU0RMIEVNRiBNb2RlbCBFeHRlbnNpb24gUG9pbnRzIFJlZmVyZW5jZSIgaHJlZj0icmVmZXJlbmNlL2V4dGVuc2lvbi1wb2ludHMvaW5kZXguaHRtbCI+Ci0JCi0JICAgIDwhLS0gVGhlIHRvcGljc19FeHRQb2ludHMtUmVmZXJlbmNlLnhtbCB0b2MgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZC4gLS0+Ci0JCTxsaW5rIHRvYz0idG9waWNzX0V4dFBvaW50X1JlZmVyZW5jZS54bWwiIC8+Ci0JCQotCTwvdG9waWM+Ci08L3RvYz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YWRmOTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcl8xLjAuMC5qYXIKLWJ1aWxkLnhtbAotYmFrCi10ZW1wCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4NTEwMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWMyNjQ3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIEFwciAxNiAxODowMToyNSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZWM1ZDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI1N1biBBcHIgMTYgMTg6MDE6MzIgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQwOGJjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wMS0wOSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgZm9yIG5ldyBESVRBLU9UIHZlcnNpb24KLQkyMDA4LTA1LTA1IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCB0byBhZGQgZ2VuZXJhdGlvbiBvZiBwcmUtYnVpbHQgaGVscCBpbmRleC4gCi0JLSBNdXN0IGRlbGV0ZSAvaW5kZXggZm9sZGVyIGJlZm9yZSBydW5uaW5nIGJ1aWxkCi0JCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjMuMy4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c2RsX2J1aWxkX3RvYy5kaXRhbWFwIiAvPiAgICAJCQotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJidWlsZC5pbmRleCIgZGVzY3JpcHRpb249IkJ1aWxkcyBzZWFyY2ggaW5kZXggZm9yIHRoZSBwbHVnLWluIiBpZj0iZWNsaXBzZS5ydW5uaW5nIj4KLQkgICAgIDxoZWxwLmJ1aWxkSGVscEluZGV4IG1hbmlmZXN0PSJwbHVnaW4ueG1sIiBkZXN0aW5hdGlvbj0iLiIvPgotCTwvdGFyZ2V0PgkKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGYwMjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjU1MC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwNDQ5MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSB3c3dzZGxlZGl0b3JjX3RvYy54bWwsXAotICAgICAgICAgICAgICAgd3N3c2RsZWRpdG9ydF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgaW1hZ2VzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLQkJCSAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc3JjLmluY2x1ZGVzID0gKi5tYXBsaXN0LFwKLSAgICAgICAgICAgICAgICouZGl0YW1hcCxcCi0gICAgICAgICAgICAgICBjb25jZXB0cy8qLmRpdGEsXAotICAgICAgICAgICAgICAgdGFza3MvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRhMWJlNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NkbGVkIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIGVkaXRvcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwKLXZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLjwvc2hvcnRkZXNjPgotPGNvbmJvZHk+Ci08cD5Vc2luZyB0aGUgV1NETCBlZGl0b3IsIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08dWw+Ci08bGk+Q3JlYXRlIG5ldyBXU0RMIGZpbGVzPC9saT4KLTxsaT5WYWxpZGF0ZSBhbmQgZWRpdCBXU0RMIGZpbGVzPC9saT4KLTxsaT5DcmVhdGUgYW5kIGRlbGV0ZTogIDx1bD4KLTxsaT5TZXJ2aWNlczogdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy4gVGhlc2UgYXJlIHRoZSByb290Ci1lbGVtZW50cyBvZiBhbGwgV1NETCBmaWxlcy48L2xpPgotPGxpPlBvcnRzOiBzcGVjaWZ5IGFuIGFkZHJlc3MgZm9yIGEgYmluZGluZywgdGh1cyBkZWZpbmluZyBhIHNpbmdsZSBjb21tdW5pY2F0aW9uCi1lbmRwb2ludC48L2xpPgotPGxpPkJpbmRpbmdzOiBzcGVjaWZ5IGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBmb3IKLXRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9saT4KLTxsaT5Qb3J0IHR5cGVzOiBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIHRoYXQgZWFjaCByZWZlciB0byBhbiBpbnB1dCBtZXNzYWdlCi1hbmQgb3V0cHV0IG1lc3NhZ2VzLjwvbGk+Ci08bGk+T3BlcmF0aW9uczogaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotPGxpPk1lc3NhZ2VzOiByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4KLUEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24KLXdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci08bGk+UGFydHM6IGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQKLW9mIGEgbWVzc2FnZS48P1B1YiBDYXJldD8+PC9saT4KLTxsaT5UeXBlczogZGVzY3JpYmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCi1XU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlCi1XM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS48L2xpPgotPGxpPkltcG9ydCBzdGF0ZW1lbnRzOiB1c2VkIHRvIGFzc29jaWF0ZSBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uIDwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+SW1wb3J0IGV4aXN0aW5nIFdTREwgZmlsZXMgZm9yIHN0cnVjdHVyZWQgdmlld2luZzwvbGk+Ci08bGk+R2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudC48L2xpPgotPC91bD4KLTxwPlRoZSBXU0RMIHN1cHBvcnQgaW4gdGhlIFdTREwgZWRpdG9yIGlzIGJhc2VkIG9uIHRoZSBXM0MgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKSAxLjE8L3hyZWY+LiBUaGUgV1NETCBzcGVjaWZpY2F0aW9uIGZyb20gdGhlIFczQyBXZWIgc2l0ZSBpcwotYWxzbyB1c2VkIGZvciB2YWxpZGF0aW9uLiZuYnNwOyA8L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSIuLi90YXNrcy90ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+Ci08P1B1YiAqMDAwMDAwMjUzND8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTkxNTc3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NkbGVkIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgZWRpdG9yPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NkbGVkIj48YSBuYW1lPSJjd3NkbGVkIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LAotdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuPC9wPgotCi08cD5Vc2luZyB0aGUgV1NETCBlZGl0b3IsIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzo8L3A+Ci0KLTx1bD4KLTxsaT5DcmVhdGUgbmV3IFdTREwgZmlsZXM8L2xpPgotCi08bGk+VmFsaWRhdGUgYW5kIGVkaXQgV1NETCBmaWxlczwvbGk+Ci0KLTxsaT5DcmVhdGUgYW5kIGRlbGV0ZTogIDx1bD4KLTxsaT5TZXJ2aWNlczogdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy4gVGhlc2UgYXJlIHRoZSByb290Ci1lbGVtZW50cyBvZiBhbGwgV1NETCBmaWxlcy48L2xpPgotCi08bGk+UG9ydHM6IHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IgYSBiaW5kaW5nLCB0aHVzIGRlZmluaW5nIGEgc2luZ2xlIGNvbW11bmljYXRpb24KLWVuZHBvaW50LjwvbGk+Ci0KLTxsaT5CaW5kaW5nczogc3BlY2lmeSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yCi10aGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLjwvbGk+Ci0KLTxsaT5Qb3J0IHR5cGVzOiBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIHRoYXQgZWFjaCByZWZlciB0byBhbiBpbnB1dCBtZXNzYWdlCi1hbmQgb3V0cHV0IG1lc3NhZ2VzLjwvbGk+Ci0KLTxsaT5PcGVyYXRpb25zOiBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2VzLjwvbGk+Ci0KLTxsaT5NZXNzYWdlczogcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotCi08bGk+UGFydHM6IGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQKLW9mIGEgbWVzc2FnZS48L2xpPgotCi08bGk+VHlwZXM6IGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLgotV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZQotVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuPC9saT4KLQotPGxpPkltcG9ydCBzdGF0ZW1lbnRzOiB1c2VkIHRvIGFzc29jaWF0ZSBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uIDwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+SW1wb3J0IGV4aXN0aW5nIFdTREwgZmlsZXMgZm9yIHN0cnVjdHVyZWQgdmlld2luZzwvbGk+Ci0KLTxsaT5HZW5lcmF0ZSBkb2N1bWVudGF0aW9uIGZyb20gYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTwvdWw+Ci0KLTxwPlRoZSBXU0RMIHN1cHBvcnQgaW4gdGhlIFdTREwgZWRpdG9yIGlzIGJhc2VkIG9uIHRoZSBXM0MgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgMS4xPC9hPi4gVGhlIFdTREwgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0MgV2ViIHNpdGUgaXMKLWFsc28gdXNlZCBmb3IgdmFsaWRhdGlvbi7CoCA8L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdGVkdHdzZGwuaHRtbCI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvc3Ryb25nPjxiciAvPgotT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90YXNrcy90ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL2h0dHBza2VsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL2h0dHBza2VsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlNjY4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9odHRwc2tlbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zaG93LWhpZGUtYmluZGluZy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zaG93LWhpZGUtYmluZGluZy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTliNTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc2hvdy1oaWRlLWJpbmRpbmcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc29hcHNrZWwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc29hcHNrZWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQyNzM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXBza2VsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvd3NkbGVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYmUzYjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvd3NkbGVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L19mLmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvX2YuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzFlNTMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvX2YuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZjQ3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYTE2MWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE3OjI3OjA4IEVEVCAyMDA4DQotb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXI9b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJcbjEuMC40MDAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YzM2ZjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6Mjc6MDggRURUIDIwMDgNCi1sdWNlbmU9MS45LjEudjIwMDgwMzA2MTgxMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4zLjEwMC52MjAwODA0MjU/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOTk5YzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAxNzoyNzowOCBFRFQgMjAwOA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuaHRtbD0wDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZTg4MzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjgzODAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9teXBsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gVGhpcyBpcyB0aGUgcGx1Z2luIGZvciBkZWNsYXJpbmcgdGhlIGhlbHAgICAgICAgICAtLT4KLTwhLS0gY29udHJpYnV0aW9ucyBmb3IgdXNpbmcgdGhlIHRvb2wuICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MueG1sIi8+ICAgCi0gICAgPHRvYyBmaWxlPSJ3c3dzZGxlZGl0b3JjX3RvYy54bWwiLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICAgICAKLTwvZXh0ZW5zaW9uPgotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZWI5OWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDFlNjIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGluZGV4PgotICA8ZW50cnkga2V5d29yZD0iV1NETCBmaWxlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCN0aW1wd3NkbCIgdGl0bGU9IkltcG9ydGluZyBhIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sI3RjcnR3c2RsIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZWRpdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCN0ZWR0d3NkbCIgdGl0bGU9IkVkaXRpbmcgV1NETCBmaWxlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkc3J2Yy5odG1sI3RhZGRzcnZjIiB0aXRsZT0iQWRkaW5nIGEgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InBvcnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcG9ydC5odG1sI3RhZGRwb3J0IiB0aXRsZT0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJzZXR0aW5nIHBvcnQgdHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRwcnR0Lmh0bWwjdHNldHBydHQiIHRpdGxlPSJTZXR0aW5nIGEgcG9ydCB0eXBlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYmluZGluZ3MiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiIHRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im9wZXJhdGlvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwjdGFkZG9wZXIiIHRpdGxlPSJBZGRpbmcgYW4gb3BlcmF0aW9uIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibWVzc2FnZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwjYWRkaW5nYW1lc3NhZ2UiIHRpdGxlPSJBZGRpbmcgYSBtZXNzYWdlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibWVzc2FnZSBwYXJ0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCN0YWRkcGFydCIgdGl0bGU9IkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iaW1wb3J0IHN0YXRlbWVudHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnRpbXB0Lmh0bWwjdGNydGltcHQiIHRpdGxlPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwjdGNydHR5cGUiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnRpbmcgV1NETCBmaWxlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCN0aW1wd3NkbCIgdGl0bGU9IkltcG9ydGluZyBhIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIFdTREwgZmlsZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR3c2RsLmh0bWwjdGNydHdzZGwiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJlZGl0aW5nIFdTREwgZmlsZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwjdGVkdHdzZGwiIHRpdGxlPSJFZGl0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgc2VydmljZXMgdG8gV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCN0YWRkc3J2YyIgdGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBwb3J0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCN0YWRkcG9ydCIgdGl0bGU9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBwb3J0IHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sI3RzZXRwcnR0IiB0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImJpbmRpbmdzIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIiB0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBXU0RMIGJpbmRpbmdzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIiB0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBvcGVyYXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sI3RhZGRvcGVyIiB0aXRsZT0iQWRkaW5nIGFuIG9wZXJhdGlvbiIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIG1lc3NhZ2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sI2FkZGluZ2FtZXNzYWdlIiB0aXRsZT0iQWRkaW5nIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwjdGFkZHBhcnQiIHRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sI3RjcnRpbXB0IiB0aXRsZT0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIFdTREwgdHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwjdGNydHR5cGUiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjE2NDIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXU0RMIEVkaXRvciBEb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjgzODAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFRoaXMgaXMgdGhlIHBsdWdpbiBmb3IgZGVjbGFyaW5nIHRoZSBoZWxwICAgICAgICAgLS0+Ci08IS0tIGNvbnRyaWJ1dGlvbnMgZm9yIHVzaW5nIHRoZSB0b29sLiAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLnhtbCIvPiAgIAotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9yY190b2MueG1sIi8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgICAgCi08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjJlNTljLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0iYWRkaW5nYW1lc3NhZ2UiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08c2hvcnRkZXNjPk1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybSBrZXlyZWY9InRhZGRtZXNzfDF8V2Vic2VydmljZXNhZGRpbmdXU0RMbWVzc2FnZXMiIHN0YXR1cz0idW5jaGFuZ2VkIj5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBtZXNzYWdlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0KLWtleXJlZj0idGFkZG1lc3N8MnxXU0RMbWVzc2FnZXMiIHN0YXR1cz0idW5jaGFuZ2VkIj5XU0RMIGZpbGVzPGluZGV4dGVybT5tZXNzYWdlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBtZXNzYWdlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcgYnkgcmlnaHQtY2xpY2tpbmcKLXRoZSA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyIGFuZCBjbGlja2luZyA8Yj5BZGQgTWVzc2FnZTwvYj4uPC9wPjxwPlRvIGNyZWF0ZQotYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudAotYW5kIGNsaWNrIDxiPlNldCBNZXNzYWdlID4gTmV3IE1lc3NhZ2UuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBpbiB0aGUgPHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+IHBhbmUKLW9mIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9jbWQ+PGluZm8+VGhpcyBuYW1lIHNob3VsZCBiZSBhIHVuaXF1ZSBhbW9uZ3N0IGFsbAotbWVzc2FnZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBuZXcgbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgRGVzaWduIHZpZXcgd2l0aGluIHRoZSBwb3J0Ci10eXBlLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cG9zdHJlcT48cD4gPGI+Tm90ZTwvYj46IE1lc3NhZ2VzIGFyZSByZWZlcmVuY2VkIHdpdGhpbiBhIHBvcnQgdHlwZSAoc3BlY2lmaWNhbGx5Ci1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBvYmplY3RzKS4gVGhlIGlucHV0LCBvdXRwdXQgYW5kCi1mYXVsdCBvYmplY3RzIHdpdGhpbiBhIGJpbmRpbmcgZG8gbm90IHJlZmVyZW5jZSBtZXNzYWdlcy4gSGVuY2UgeW91IGNhbm5vdAotY3JlYXRlIGEgbmV3IG1lc3NhZ2UgYnkgcmlnaHQgY2xpY2tpbmcgb24gYSBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCB3aXRoaW4KLWEgYmluZGluZyAodGhlc2UgYXJlIGFsc28ga25vd24gYXMgYmluZGluZyBpbnB1dCwgYmluZGluZyBvdXRwdXQgYW5kIGJpbmRpbmcKLWZhdWx0cykuPC9wPjxub3RlIHR5cGU9InRpcCI+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LAotb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFVuZGVyIHRoZSAgPGI+UG9ydCBUeXBlczwvYj4gZm9sZGVyLAotcmlnaHQtY2xpY2sgeW91ciBlbGVtZW50IGFuZCBjbGljayA8Yj5TZXQgTWVzc2FnZSA+IEFkZCBNZXNzYWdlPC9iPi4gWW91cgotbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSB2aWV3IHVuZGVyIHRoZSA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyLjwvbm90ZT48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9InJldXNpbmdhbWVzc2FnZSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZXVzaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlRvIHJldXNlIGEgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50LCBjb21wbGV0ZQotdGhlIGZvbGxvd2luZyBzdGVwczo8L3ByZXJlcT4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPGI+U2V0IE1lc3NhZ2UgPiBFeGlzdGluZyBNZXNzYWdlLjwvYj48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGw8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdSBjYW4gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgbGlzdCBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6PC9jbWQ+PGluZm8+PHVsPgotPGxpPjxiPldvcmtzcGFjZTwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLTxsaT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci08bGk+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvbGk+Ci08bGk+PGI+V29ya2luZyBTZXRzPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIGV4aXN0aW5nIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayAgPGI+T0s8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxwb3N0cmVxPjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iaW1wb3J0aW5nYW1lc3NhZ2UiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SW1wb3J0aW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08cHJlcmVxPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCBlbGVtZW50LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wcmVyZXE+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxiPlNldCBNZXNzYWdlID4gRXhpc3RpbmcgTWVzc2FnZS48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBtZXNzYWdlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvY21kPgotPGluZm8+PHVsPgotPGxpPjxiPldvcmtzcGFjZTwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLTxsaT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci08bGk+PGI+V29ya2luZyBTZXRzPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHBvc3RyZXE+WW91IGNhbiBub3cgYWRkIHBhcnRzIHRvIHlvdXIgbWVzc2FnZS4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi90YXNrcy90YWRkcGFydC5kaXRhIiBzY29wZT0icGVlciI+QWRkaW5nCi1hIHBhcnQgdG8gYSBtZXNzYWdlPC94cmVmPi48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZTQ5YWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIG1lc3NhZ2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iTWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLiBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLiBXU0RMIG1lc3NhZ2VzIGFyZSB0b3AgbGV2ZWwgb2JqZWN0cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgbWVzc2FnZXMsIFdTREwgZmlsZXMsIG1lc3NhZ2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlcywgV1NETCBmaWxlcywgbWVzc2FnZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImFkZGluZ2FtZXNzYWdlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYWRkaW5nYW1lc3NhZ2UiPjxhIG5hbWU9ImFkZGluZ2FtZXNzYWdlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYSBtZXNzYWdlPC9oMT4KLQotCi0KLTxkaXY+PHA+TWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS4gV1NETCBtZXNzYWdlcyBhcmUgdG9wIGxldmVsIG9iamVjdHMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZAotYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuPC9wPgotCi08ZGl2IGNsYXNzPSJwIiAvPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIGNyZWF0ZSBhIG1lc3NhZ2UgdXNpbmcgdGhlIE91dGxpbmUgdmlldyBieSByaWdodC1jbGlja2luZwotdGhlIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyIGFuZCBjbGlja2luZyA8c3Ryb25nPkFkZCBNZXNzYWdlPC9zdHJvbmc+LjwvcD4KLTxwPlRvIGNyZWF0ZQotYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudAotYW5kIGNsaWNrIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBOZXcgTWVzc2FnZS48L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIHRoZSBuYW1lIG9mIHRoZSBtZXNzYWdlIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiBwYW5lCi1vZiB0aGUgUHJvcGVydGllcyB2aWV3Ljwvc3Bhbj4gVGhpcyBuYW1lIHNob3VsZCBiZSBhIHVuaXF1ZSBhbW9uZ3N0IGFsbAotbWVzc2FnZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VGhlIG5ldyBtZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBEZXNpZ24gdmlldyB3aXRoaW4gdGhlIHBvcnQKLXR5cGUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPk5vdGU8L3N0cm9uZz46IE1lc3NhZ2VzIGFyZSByZWZlcmVuY2VkIHdpdGhpbiBhIHBvcnQgdHlwZSAoc3BlY2lmaWNhbGx5Ci1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBvYmplY3RzKS4gVGhlIGlucHV0LCBvdXRwdXQgYW5kCi1mYXVsdCBvYmplY3RzIHdpdGhpbiBhIGJpbmRpbmcgZG8gbm90IHJlZmVyZW5jZSBtZXNzYWdlcy4gSGVuY2UgeW91IGNhbm5vdAotY3JlYXRlIGEgbmV3IG1lc3NhZ2UgYnkgcmlnaHQgY2xpY2tpbmcgb24gYSBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCB3aXRoaW4KLWEgYmluZGluZyAodGhlc2UgYXJlIGFsc28ga25vd24gYXMgYmluZGluZyBpbnB1dCwgYmluZGluZyBvdXRwdXQgYW5kIGJpbmRpbmcKLWZhdWx0cykuPC9wPgotPGRpdiBjbGFzcz0idGlwIj48c3BhbiBjbGFzcz0idGlwdGl0bGUiPlRpcDo8L3NwYW4+IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwKLW91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxzdHJvbmc+UG9ydCBUeXBlczwvc3Ryb25nPiBmb2xkZXIsCi1yaWdodC1jbGljayB5b3VyIGVsZW1lbnQgYW5kIGNsaWNrIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBBZGQgTWVzc2FnZTwvc3Ryb25nPi4gWW91cgotbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSB2aWV3IHVuZGVyIHRoZSA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlci48L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0icmV1c2luZ2FtZXNzYWdlIj48YSBuYW1lPSJyZXVzaW5nYW1lc3NhZ2UiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmV1c2luZyBhIG1lc3NhZ2U8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0icCI+VG8gcmV1c2UgYSBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGNvbXBsZXRlCi10aGUgZm9sbG93aW5nIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBFeGlzdGluZyBNZXNzYWdlLjwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L3NwYW4+IDx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+Q3VycmVudCBSZXNvdXJjZTwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldCBvZgotZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRoZSBleGlzdGluZyBtZXNzYWdlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiIgLz4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJpbXBvcnRpbmdhbWVzc2FnZSI+PGEgbmFtZT0iaW1wb3J0aW5nYW1lc3NhZ2UiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0aW5nIGEgbWVzc2FnZTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJwIj5JZiB5b3Ugd2FudCB0byBpbXBvcnQgYW4gZXhpc3RpbmcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LAotb3IgZmF1bHQgZWxlbWVudCwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBFeGlzdGluZyBNZXNzYWdlLjwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPllvdSBjYW4gaW1wb3J0IGEgbWVzc2FnZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3NwYW4+Ci0gPHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VGhlIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPllvdSBjYW4gbm93IGFkZCBwYXJ0cyB0byB5b3VyIG1lc3NhZ2UuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLAotc2VlIDxhIGhyZWY9InRhZGRwYXJ0Lmh0bWwiPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC9hPi48L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzFjMzgzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkb3BlciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYW4gb3BlcmF0aW9uPC90aXRsZT4KLTxzaG9ydGRlc2M+QW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMKLWFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQKLWRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgb3BlcmF0aW9uczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMIGZpbGVzPGluZGV4dGVybT5vcGVyYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5Vc2luZyB0aGVzZSwgeW91IGNhbiBkZWNsYXJlIGZvdXIgdHJhbnNtaXNzaW9uIHByaW1pdGl2ZXMgdGhhdCBhbgotZW5kcG9pbnQgY2FuIHN1cHBvcnQ6PHVsPgotPGxpPiA8Yj5PbmUtd2F5PC9iPjogdGhlIGVuZHBvaW50IHJlY2VpdmVzIGEgbWVzc2FnZS48L2xpPgotPGxpPiA8Yj5SZXF1ZXN0LXJlc3BvbnNlPC9iPjogdGhlIGVuZHBvaW50IHJlY2VpdmVzIGEgbWVzc2FnZSwgYW5kIHNlbmRzIGEKLWNvcnJlbGF0ZWQgbWVzc2FnZS48L2xpPgotPGxpPiA8Yj5Tb2xpY2l0LXJlc3BvbnNlPC9iPjogdGhlIGVuZHBvaW50IHNlbmRzIGEgbWVzc2FnZSwgYW5kIHJlY2VpdmVzIGEKLWNvcnJlbGF0ZWQgbWVzc2FnZS48L2xpPgotPGxpPiA8Yj5Ob3RpZmljYXRpb248L2I+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLjwvbGk+Ci08L3VsPjxwPllvdSBjYW4gYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSBvciBhIHBvcnQgYmluZGluZy48L3A+PHA+VG8KLWFkZCBhbiBvcGVyYXRpb24gdG8gYSBwb3J0IHR5cGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgdHlwZS48L2NtZD48aW5mbz5DbGljayA8Yj5BZGQKLU9wZXJhdGlvbjwvYj4uIFRvIHNlbGVjdCB0aGUgbmV3IG9wZXJhdGlvbiwgY2xpY2sgdGhlIG9wZXJhdGlvbiBpbiB0aGUgcG9ydAotdHlwZSBvYmplY3QuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxiPkdlbmVyYWw8L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+UmlnaHQgY2xpY2sgb24gdGhlIG9wZXJhdGlvbiB0byBhZGQgaW5wdXQsIG91dHB1dCBvciBmYXVsdCBvYmplY3RzLjwvY21kPgotPGluZm8+RGVwZW5kaW5nIG9uIGFuIG9wZXJhdGlvbidzIGlucHV0cyBhbmQgb3V0cHV0cyBpdCBjYW4gYmUgY2xhc3NpZmllZAotYXMgZm9sbG93czo8dWw+Ci08bGk+PGI+T25lIHdheSBvcGVyYXRpb248L2I+OiBpbnB1dCA8L2xpPgotPGxpPjxiPlJlcXVlc3QgcmVzcG9uc2Ugb3BlcmF0aW9uPC9iPjogaW5wdXQsIG91dHB1dCA8L2xpPgotPGxpPjxiPiBTb2xpY2l0IHJlc3BvbnNlIG9wZXJhdGlvbjwvYj46IG91dHB1dCwgaW5wdXQgPC9saT4KLTxsaT48Yj5Ob3RpZmljYXRpb24gb3BlcmF0aW9uPC9iPjogb3V0cHV0PC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wZXJhdGlvbgoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+IDxiPlRpcDwvYj46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgb3BlcmF0aW9uIGZvciB5b3VyIHBvcnQKLXR5cGUgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gUmlnaHQgY2xpY2sgb24gYSBwb3J0IHR5cGUgaW4gdGhlIDx1aWNvbnRyb2w+UG9ydAotVHlwZTwvdWljb250cm9sPiBmb2xkZXIgYW5kIHNlbGVjdCA8dWljb250cm9sPkFkZCBPcGVyYXRpb248L3VpY29udHJvbD4uPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzkxNGIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYW4gb3BlcmF0aW9uIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFuIG9wZXJhdGlvbiBuYW1lcyB0aGUgb3BlcmF0aW9uIGFuZCBsaXN0cyB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQgZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdCBkZXNjcmliZXMgYW55IGVycm9yIGRhdGEgdGhlIG9wZXJhdGlvbiBtYXkgcmV0dXJuLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgb3BlcmF0aW9ucywgV1NETCBmaWxlcywgb3BlcmF0aW9ucyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgb3BlcmF0aW9ucywgV1NETCBmaWxlcywgb3BlcmF0aW9ucyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkb3BlciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhbiBvcGVyYXRpb248L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRvcGVyIj48YSBuYW1lPSJ0YWRkb3BlciI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGFuIG9wZXJhdGlvbjwvaDE+Ci0KLQotCi08ZGl2PjxwPkFuIG9wZXJhdGlvbiBuYW1lcyB0aGUgb3BlcmF0aW9uIGFuZCBsaXN0cyB0aGUgZXhwZWN0ZWQgaW5wdXRzCi1hbmQgb3V0cHV0cy4gVGhlIG9wZXJhdGlvbiBlbGVtZW50IG1heSBhbHNvIGNvbnRhaW4gYSBmYXVsdCBzdWItZWxlbWVudCB0aGF0Ci1kZXNjcmliZXMgYW55IGVycm9yIGRhdGEgdGhlIG9wZXJhdGlvbiBtYXkgcmV0dXJuLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VXNpbmcgdGhlc2UsIHlvdSBjYW4gZGVjbGFyZSBmb3VyIHRyYW5zbWlzc2lvbiBwcmltaXRpdmVzIHRoYXQgYW4KLWVuZHBvaW50IGNhbiBzdXBwb3J0Ojx1bD4KLTxsaT4gPHN0cm9uZz5PbmUtd2F5PC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5SZXF1ZXN0LXJlc3BvbnNlPC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLCBhbmQgc2VuZHMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5Tb2xpY2l0LXJlc3BvbnNlPC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLCBhbmQgcmVjZWl2ZXMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5Ob3RpZmljYXRpb248L3N0cm9uZz46IHRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UuPC9saT4KLQotPC91bD4KLTxwPllvdSBjYW4gYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSBvciBhIHBvcnQgYmluZGluZy48L3A+Ci08cD5UbwotYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCB0eXBlLjwvc3Bhbj4gQ2xpY2sgPHN0cm9uZz5BZGQKLU9wZXJhdGlvbjwvc3Ryb25nPi4gVG8gc2VsZWN0IHRoZSBuZXcgb3BlcmF0aW9uLCBjbGljayB0aGUgb3BlcmF0aW9uIGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodCBjbGljayBvbiB0aGUgb3BlcmF0aW9uIHRvIGFkZCBpbnB1dCwgb3V0cHV0IG9yIGZhdWx0IG9iamVjdHMuPC9zcGFuPgotIERlcGVuZGluZyBvbiBhbiBvcGVyYXRpb24ncyBpbnB1dHMgYW5kIG91dHB1dHMgaXQgY2FuIGJlIGNsYXNzaWZpZWQKLWFzIGZvbGxvd3M6PHVsPgotPGxpPjxzdHJvbmc+T25lIHdheSBvcGVyYXRpb248L3N0cm9uZz46IGlucHV0IDwvbGk+Ci0KLTxsaT48c3Ryb25nPlJlcXVlc3QgcmVzcG9uc2Ugb3BlcmF0aW9uPC9zdHJvbmc+OiBpbnB1dCwgb3V0cHV0IDwvbGk+Ci0KLTxsaT48c3Ryb25nPiBTb2xpY2l0IHJlc3BvbnNlIG9wZXJhdGlvbjwvc3Ryb25nPjogb3V0cHV0LCBpbnB1dCA8L2xpPgotCi08bGk+PHN0cm9uZz5Ob3RpZmljYXRpb24gb3BlcmF0aW9uPC9zdHJvbmc+OiBvdXRwdXQ8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3BlcmF0aW9uCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSAgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPlRpcDwvc3Ryb25nPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBvcGVyYXRpb24gZm9yIHlvdXIgcG9ydAotdHlwZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiBhIHBvcnQgdHlwZSBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UG9ydAotVHlwZTwvc3Bhbj4gZm9sZGVyIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIE9wZXJhdGlvbjwvc3Bhbj4uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzI4N2JjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcGFydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkFsbCBtZXNzYWdlcyBjb250YWluIG9uZSBvciBtb3JlIHBhcnRzLiBQYXJ0cyBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20KLWZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uCi1hc3NvY2lhdGVzIGVhY2ggcGFydCB3aXRoIGEgdHlwZSB1c2luZyBhIG1lc3NhZ2UtdHlwaW5nIGF0dHJpYnV0ZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPm1lc3NhZ2UgcGFydHM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGFkZCBhIHBhcnQgdG8gYSBtZXNzYWdlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBhbiBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBvYmplY3QgYW5kCi1jbGljayA8Yj5BZGQgUGFydDwvYj4uPC9jbWQ+PHN0ZXByZXN1bHQ+VGhlIHBhcnQgaXMgYWRkZWQgdG8gdGhlIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCdzIG1lc3NhZ2UgcmVmZXJlbmNlLiBUbyBzZWxlY3QgdGhlIHBhcnQsIGNsaWNrIHRoZSBwYXJ0IGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L3N0ZXByZXN1bHQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgcGFydC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdXIgcGFydCBjYW4gcmVmZXIgdG8gZWl0aGVyIGEgPGI+VHlwZTwvYj4gb3IgYW4gPGI+RWxlbWVudDwvYj4uPC9jbWQ+Ci08aW5mbz5TZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBhcyB0aGUgPGI+UmVmZXJlbmNlIEtpbmQ8L2I+IC48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCA8Yj5UeXBlPC9iPiwgeW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nCi1hbiBYTUwgc2NoZW1hIGRhdGEgdHlwZSBmcm9tIHRoZSA8Yj5UeXBlPC9iPiBkcm9wIGRvd24gbGlzdC48L2NtZD48aW5mbz5UaGUKLWxpc3Qgb2YgdHlwZXMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQgWE1MIHNjaGVtYXMuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IHNlbGVjdGVkIDxiPkVsZW1lbnQ8L2I+ICwgeW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nCi1hbiBYTUwgc2NoZW1hIGVsZW1lbnQgZnJvbSB0aGUgIDxiPkVsZW1lbnQ8L2I+IGRyb3AgZG93biBsaXN0LjwvY21kPjxpbmZvPlRoZQotbGlzdCBvZiBlbGVtZW50cyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZCBYTUwgc2NoZW1hcy48L2luZm8+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PG5vdGUgdHlwZT0idGlwIj4gWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwYXJ0IGZvciB5b3VyIG1lc3NhZ2UKLXVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFVuZGVyIHRoZSAgPGI+TWVzc2FnZXM8L2I+IGZvbGRlciwgcmlnaHQtY2xpY2sgeW91cgotZWxlbWVudCBhbmQgY2xpY2sgPGI+QWRkIFBhcnQ8L2I+LiBZb3VyIHBhcnQgd2lsbCBhdXRvbWF0aWNhbGx5IGFwcGVhciBpbgotdGhlIE91dGxpbmUgdmlldyAodW5kZXIgdGhlIDxiPk1lc3NhZ2VzPC9iPiBmb2xkZXIpLCBidXQgaXQgd2lsbCBvbmx5IGFwcGVhcgotaW4gdGhlIERlc2lnbiB2aWV3IGlmIHRoZSBtZXNzYWdlIHlvdSBhZGRlZCBpdCB0byBjdXJyZW50bHkgZG9lcy48L25vdGU+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNzE2MDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQWxsIG1lc3NhZ2VzIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFydHMuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gVGhlIG1lc3NhZ2UgZGVmaW5pdGlvbiBhc3NvY2lhdGVzIGVhY2ggcGFydCB3aXRoIGEgdHlwZSB1c2luZyBhIG1lc3NhZ2UtdHlwaW5nIGF0dHJpYnV0ZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQWxsIG1lc3NhZ2VzIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFydHMuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gVGhlIG1lc3NhZ2UgZGVmaW5pdGlvbiBhc3NvY2lhdGVzIGVhY2ggcGFydCB3aXRoIGEgdHlwZSB1c2luZyBhIG1lc3NhZ2UtdHlwaW5nIGF0dHJpYnV0ZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHMsIFdTREwgZmlsZXMsIG1lc3NhZ2UgcGFydHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHMsIFdTREwgZmlsZXMsIG1lc3NhZ2UgcGFydHMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFkZHBhcnQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZHBhcnQiPjxhIG5hbWU9InRhZGRwYXJ0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkFsbCBtZXNzYWdlcyBjb250YWluIG9uZSBvciBtb3JlIHBhcnRzLiBQYXJ0cyBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20KLWZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uCi1hc3NvY2lhdGVzIGVhY2ggcGFydCB3aXRoIGEgdHlwZSB1c2luZyBhIG1lc3NhZ2UtdHlwaW5nIGF0dHJpYnV0ZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGFkZCBhIHBhcnQgdG8gYSBtZXNzYWdlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBhbiBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBvYmplY3QgYW5kCi1jbGljayA8c3Ryb25nPkFkZCBQYXJ0PC9zdHJvbmc+Ljwvc3Bhbj4gVGhlIHBhcnQgaXMgYWRkZWQgdG8gdGhlIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCdzIG1lc3NhZ2UgcmVmZXJlbmNlLiBUbyBzZWxlY3QgdGhlIHBhcnQsIGNsaWNrIHRoZSBwYXJ0IGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBwYXJ0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPllvdXIgcGFydCBjYW4gcmVmZXIgdG8gZWl0aGVyIGEgPHN0cm9uZz5UeXBlPC9zdHJvbmc+IG9yIGFuIDxzdHJvbmc+RWxlbWVudDwvc3Ryb25nPi48L3NwYW4+Ci0gU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gYXMgdGhlIDxzdHJvbmc+UmVmZXJlbmNlIEtpbmQ8L3N0cm9uZz4gLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugc2VsZWN0ZWQgPHN0cm9uZz5UeXBlPC9zdHJvbmc+LCB5b3Ugbm93IGhhdmUgdGhlIG9wdGlvbiBvZiBzZWxlY3RpbmcKLWFuIFhNTCBzY2hlbWEgZGF0YSB0eXBlIGZyb20gdGhlIDxzdHJvbmc+VHlwZTwvc3Ryb25nPiBkcm9wIGRvd24gbGlzdC48L3NwYW4+IFRoZQotbGlzdCBvZiB0eXBlcyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZCBYTUwgc2NoZW1hcy48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBzZWxlY3RlZCA8c3Ryb25nPkVsZW1lbnQ8L3N0cm9uZz4gLCB5b3Ugbm93IGhhdmUgdGhlIG9wdGlvbiBvZiBzZWxlY3RpbmcKLWFuIFhNTCBzY2hlbWEgZWxlbWVudCBmcm9tIHRoZSAgPHN0cm9uZz5FbGVtZW50PC9zdHJvbmc+IGRyb3AgZG93biBsaXN0Ljwvc3Bhbj4gVGhlCi1saXN0IG9mIGVsZW1lbnRzIGNvbWVzIGZyb20gYW55IGF2YWlsYWJsZSByZWZlcmVuY2VkIFhNTCBzY2hlbWFzLjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InRpcCI+PHNwYW4gY2xhc3M9InRpcHRpdGxlIj5UaXA6PC9zcGFuPiAgWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwYXJ0IGZvciB5b3VyIG1lc3NhZ2UKLXVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFVuZGVyIHRoZSAgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPiBmb2xkZXIsIHJpZ2h0LWNsaWNrIHlvdXIKLWVsZW1lbnQgYW5kIGNsaWNrIDxzdHJvbmc+QWRkIFBhcnQ8L3N0cm9uZz4uIFlvdXIgcGFydCB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZWFyIGluCi10aGUgT3V0bGluZSB2aWV3ICh1bmRlciB0aGUgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPiBmb2xkZXIpLCBidXQgaXQgd2lsbCBvbmx5IGFwcGVhcgotaW4gdGhlIERlc2lnbiB2aWV3IGlmIHRoZSBtZXNzYWdlIHlvdSBhZGRlZCBpdCB0byBjdXJyZW50bHkgZG9lcy48L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlMDFkYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwb3J0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGFkZHBvcnQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L3RpdGxlPgotPHNob3J0ZGVzYz5BIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcwotZm9yIGEgYmluZGluZy4gVGhlIHBvcnQgY29udGFpbnMgYSAnYmluZGluZycgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcyBhIGJpbmRpbmcKLWFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBwb3J0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMIGZpbGVzPGluZGV4dGVybT5wb3J0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+U2VydmljZXMgYXJlIHVzZWQgdG8gZ3JvdXAgc2V0cyBvZiByZWxhdGVkIHBvcnRzIHRvZ2V0aGVyLiBQb3J0cwotd2l0aGluIGEgc2VydmljZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVsYXRpb25zaGlwOjwvcD48dWw+Ci08bGk+Tm9uZSBvZiB0aGUgcG9ydHMgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIChmb3IgZXhhbXBsZSwgdGhlIG91dHB1dAotb2Ygb25lIHBvcnQgaXMgbm90IHRoZSBpbnB1dCBvZiBhbm90aGVyKS48L2xpPgotPGxpPklmIGEgc2VydmljZSBoYXMgc2V2ZXJhbCBwb3J0cyB0aGF0IHNoYXJlIGEgcG9ydCB0eXBlLCBidXQgZW1wbG95IGRpZmZlcmVudAotYmluZGluZ3Mgb3IgYWRkcmVzc2VzLCB0aGUgcG9ydHMgYXJlIGFsdGVybmF0aXZlcy4gRWFjaCBwb3J0IHByb3ZpZGVzIHNlbWFudGljYWxseQotZXF1aXZhbGVudCBiZWhhdmlvciAod2l0aGluIHRoZSB0cmFuc3BvcnQgYW5kIG1lc3NhZ2UgZm9ybWF0IGxpbWl0YXRpb25zIGltcG9zZWQKLWJ5IGVhY2ggYmluZGluZykuPC9saT4KLTxsaT5Zb3UgY2FuIGRldGVybWluZSBhIHNlcnZpY2UncyBwb3J0IHR5cGVzIGJ5IGV4YW1pbmluZyBpdHMgcG9ydHMuIFVzaW5nCi10aGlzIGluZm9ybWF0aW9uLCBhIHVzZXIgY2FuIGRldGVybWluZSBpZiBhIGdpdmVuIG1hY2hpbmUgc3VwcG9ydHMgYWxsIHRoZQotb3BlcmF0aW9ucyBuZWVkZWQgdG8gY29tcGxldGUgYSBnaXZlbiB0YXNrLjwvbGk+Ci08L3VsPjxwPlRvIGFkZCBhIHBvcnQgdG8gYSBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgdGhlIHNlcnZpY2UgeW91IHdhbnQgdG8gYWRkIGEgcG9ydAotdG8sIHRoZW4gY2xpY2sgPGI+QWRkIFBvcnQuPC9iPiA8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkZpbGwgaW4gdGhlIDxiPk5hbWU8L2I+IGZvciB0aGUgcG9ydC48L2NtZD48aW5mbz5UaGUgbmFtZSBvZiB0aGUKLXBvcnQgc2hvdWxkIHByb3ZpZGUgaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBwb3J0cyBkZWZpbmVkIHdpdGhpbgotdGhlIHNlcnZpY2UuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IGEgPGI+QmluZGluZzwvYj4gYW5kIDx1aWNvbnRyb2w+UHJvdG9jb2w8L3VpY29udHJvbD4gZm9yCi10aGUgcG9ydCwgYW5kIGVudGVyIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3J0IGludG8gdGhlIDx1aWNvbnRyb2w+QWRkcmVzczwvdWljb250cm9sPiBmaWVsZC4KLUNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvY21kPjxpbmZvPlRvIHNlbGVjdCB0aGUgbmV3IHBvcnQsIGNsaWNrCi10aGUgcG9ydCBpbiB0aGUgc2VydmljZSBvYmplY3QuIFlvdSBjYW4gY2hhbmdlIHRoZSBpbmZvcm1hdGlvbiB5b3UgZW50ZXJlZAotYWJvdXQgdGhpcyBwb3J0IGFueSB0aW1lIGluIHRoZSA8dWljb250cm9sPkdlbmVyYWw8L3VpY29udHJvbD4gcGFuZS48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQgaW4KLXRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lIG9mIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxiPkV4dGVuc2lvbnM8L2I+IHBhbmUuIFlvdSBjYW4KLWVpdGhlciBhZGQsIHNvcnQsIG9yIHJlbW92ZSBleHRlbnNpb25zLiA8L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5Zb3UgY2FuIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIHJlLXVzZSBhbiBleGlzdGluZwotb25lLCBvciBpbXBvcnQgb25lLiBBIDxiPkJpbmRpbmc8L2I+IGRlZmluZXMgdGhlIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbAotZGV0YWlscyBmb3Igb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBGb3IKLW1vcmUgaW5mb3JtYXRpb24sIHNlZSA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Ii4uL3Rhc2tzL3RzZXRiaW5kLmRpdGEiIHNjb3BlPSJwZWVyIj5TZXR0aW5nCi1hIGJpbmRpbmc8L3hyZWY+IC48L3A+PHA+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgeW91ciBzZXJ2aWNlIHVuZGVyIHRoZSA8Yj5TZXJ2aWNlczwvYj4gZm9sZGVyIGFuZCBjbGlja2luZyA8Yj5BZGQKLVBvcnQ8L2I+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzUyZjk4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZyBhbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzIGZvciBhIGJpbmRpbmcuIFRoZSBwb3J0IGNvbnRhaW5zIGEgJ2JpbmRpbmcnIGF0dHJpYnV0ZSB0aGF0IHJlZmVyZW5jZXMgYSBiaW5kaW5nIGFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIHBvcnRzLCBXU0RMIGZpbGVzLCBwb3J0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgcG9ydHMsIFdTREwgZmlsZXMsIHBvcnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRwb3J0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRwb3J0Ij48YSBuYW1lPSJ0YWRkcG9ydCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L2gxPgotCi0KLQotPGRpdj48cD5BIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcwotZm9yIGEgYmluZGluZy4gVGhlIHBvcnQgY29udGFpbnMgYSAnYmluZGluZycgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcyBhIGJpbmRpbmcKLWFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlNlcnZpY2VzIGFyZSB1c2VkIHRvIGdyb3VwIHNldHMgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4gUG9ydHMKLXdpdGhpbiBhIHNlcnZpY2UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlbGF0aW9uc2hpcDo8L3A+Ci08dWw+Ci08bGk+Tm9uZSBvZiB0aGUgcG9ydHMgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIChmb3IgZXhhbXBsZSwgdGhlIG91dHB1dAotb2Ygb25lIHBvcnQgaXMgbm90IHRoZSBpbnB1dCBvZiBhbm90aGVyKS48L2xpPgotCi08bGk+SWYgYSBzZXJ2aWNlIGhhcyBzZXZlcmFsIHBvcnRzIHRoYXQgc2hhcmUgYSBwb3J0IHR5cGUsIGJ1dCBlbXBsb3kgZGlmZmVyZW50Ci1iaW5kaW5ncyBvciBhZGRyZXNzZXMsIHRoZSBwb3J0cyBhcmUgYWx0ZXJuYXRpdmVzLiBFYWNoIHBvcnQgcHJvdmlkZXMgc2VtYW50aWNhbGx5Ci1lcXVpdmFsZW50IGJlaGF2aW9yICh3aXRoaW4gdGhlIHRyYW5zcG9ydCBhbmQgbWVzc2FnZSBmb3JtYXQgbGltaXRhdGlvbnMgaW1wb3NlZAotYnkgZWFjaCBiaW5kaW5nKS48L2xpPgotCi08bGk+WW91IGNhbiBkZXRlcm1pbmUgYSBzZXJ2aWNlJ3MgcG9ydCB0eXBlcyBieSBleGFtaW5pbmcgaXRzIHBvcnRzLiBVc2luZwotdGhpcyBpbmZvcm1hdGlvbiwgYSB1c2VyIGNhbiBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtYWNoaW5lIHN1cHBvcnRzIGFsbCB0aGUKLW9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbXBsZXRlIGEgZ2l2ZW4gdGFzay48L2xpPgotCi08L3VsPgotPHA+VG8gYWRkIGEgcG9ydCB0byBhIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8c3Ryb25nPkFkZCBQb3J0Ljwvc3Ryb25nPiA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5GaWxsIGluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZm9yIHRoZSBwb3J0Ljwvc3Bhbj4gVGhlIG5hbWUgb2YgdGhlCi1wb3J0IHNob3VsZCBwcm92aWRlIGl0IHdpdGggYSB1bmlxdWUgbmFtZSBhbW9uZ3N0IGFsbCB0aGUgcG9ydHMgZGVmaW5lZCB3aXRoaW4KLXRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IGEgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGFuZCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm90b2NvbDwvc3Bhbj4gZm9yCi10aGUgcG9ydCwgYW5kIGVudGVyIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3J0IGludG8gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZHJlc3M8L3NwYW4+IGZpZWxkLgotQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQsIGNsaWNrCi10aGUgcG9ydCBpbiB0aGUgc2VydmljZSBvYmplY3QuIFlvdSBjYW4gY2hhbmdlIHRoZSBpbmZvcm1hdGlvbiB5b3UgZW50ZXJlZAotYWJvdXQgdGhpcyBwb3J0IGFueSB0aW1lIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiBwYW5lLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkIGluCi10aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUgb2YgdGhlIFByb3BlcnRpZXMgdmlldy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxzdHJvbmc+RXh0ZW5zaW9uczwvc3Ryb25nPiBwYW5lLiBZb3UgY2FuCi1laXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy4gPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgcmUtdXNlIGFuIGV4aXN0aW5nCi1vbmUsIG9yIGltcG9ydCBvbmUuIEEgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGRlZmluZXMgdGhlIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbAotZGV0YWlscyBmb3Igb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBGb3IKLW1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSJ0c2V0YmluZC5odG1sIj5TZXRodG1sIGEgYmluZGluZzwvYT4gLjwvcD4KLTxwPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHlvdXIgc2VydmljZSB1bmRlciB0aGUgPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkCi1Qb3J0PC9zdHJvbmc+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNmMjI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkc3J2YyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBzZXJ2aWNlPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlICA8c3lzdGVtb3V0cHV0PnNlcnZpY2U8L3N5c3RlbW91dHB1dD4gZWxlbWVudCBpcyBhIGNvbGxlY3Rpb24KLW9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIHNlcnZpY2VzIHRvIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+c2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIG5ldyBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8Yj5BZGQKLVNlcnZpY2U8L2I+LiBUbyBzZWxlY3QgdGhlIG5ldyBzZXJ2aWNlLCBjbGljayB0aGUgc2VydmljZSBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS4gSW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLAotdHlwZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZS48L2NtZD48aW5mbz5UaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gbWFuYWdlIGV4dGVuc2lvbnMsIGNsaWNrIHRoZSA8Yj5FeHRlbnNpb25zPC9iPiBwYW5lLiBZb3UgY2FuCi1laXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy48ZHJhZnQtY29tbWVudD4gUmVmZXIgdG8gdGhlIHJlbGF0ZWQKLXRhc2tzIGZvciBtb3JlIGRldGFpbHMuIEFkZCBsaW5rIHRvIHRoZSBYU0QgRWRpdG9yIHBsdWdpbiB0b3BpYyBmb3IgIkFkZGluZwotZXh0ZW5zaW9uIGNvbXBvbmVudHMiPC9kcmFmdC1jb21tZW50PjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5UaXA8L2I+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc2VydmljZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3Ci1ieSByaWdodC1jbGlja2luZyB0aGUgPGI+U2VydmljZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkIFNlcnZpY2U8L2I+LjwvcD48cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5MzEwNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBzZXJ2aWNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgc2VydmljZXMgdG8gV1NETCwgV1NETCBmaWxlcywgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBzZXJ2aWNlcyB0byBXU0RMLCBXU0RMIGZpbGVzLCBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkc3J2YyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRzcnZjIj48YSBuYW1lPSJ0YWRkc3J2YyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgc2VydmljZTwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnNlcnZpY2U8L3R0PiBlbGVtZW50IGlzIGEgY29sbGVjdGlvbgotb2YgcmVsYXRlZCBwb3J0cyBhbmQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VydmljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhIG5ldyBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8c3Ryb25nPkFkZAotU2VydmljZTwvc3Ryb25nPi4gVG8gc2VsZWN0IHRoZSBuZXcgc2VydmljZSwgY2xpY2sgdGhlIHNlcnZpY2Ugb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS4gSW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwKLXR5cGUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuPC9zcGFuPiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIG1hbmFnZSBleHRlbnNpb25zLCBjbGljayB0aGUgPHN0cm9uZz5FeHRlbnNpb25zPC9zdHJvbmc+IHBhbmUuIFlvdSBjYW4KLWVpdGhlciBhZGQsIHNvcnQsIG9yIHJlbW92ZSBleHRlbnNpb25zLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBzZXJ2aWNlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHRoZSA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+IGZvbGRlciBhbmQgY2xpY2tpbmcgPHN0cm9uZz5BZGQgU2VydmljZTwvc3Ryb25nPi48L3A+Ci08cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkYWZmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydGltcHQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvdGl0bGU+Ci08c2hvcnRkZXNjPlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yCi1YTUwgc2NoZW1hcyBpbnRvIHlvdXIgV1NETCBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIG1vcmUgbW9kdWxhcgotV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIDxiPmltcG9ydDwvYj4gc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbgotb2YgdGhlIGRpZmZlcmVudCBlbGVtZW50cyBvZiBhIHNlcnZpY2UgZGVmaW5pdGlvbiBpbnRvIGluZGVwZW5kZW50IGRvY3VtZW50cywKLXdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGFzIG5lZWRlZC4gVGhpcyB0ZWNobmlxdWUgaGVscHMgaW4gd3JpdGluZyBjbGVhcmVyCi1zZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwKLW9mIGFic3RyYWN0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPmltcG9ydCBzdGF0ZW1lbnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBPdXRsaW5lIHZpZXcsIHJpZ2h0LWNsaWNrIHRoZSA8Yj5JbXBvcnRzPC9iPiBmb2xkZXIgYW5kCi1jbGljayA8Yj5BZGQgSW1wb3J0LjwvYj4gU2VsZWN0IHlvdXIgbmV3IGltcG9ydCBzdGF0ZW1lbnQuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIHRoZSBpY29uIHRvIHRoZSByaWdodCBvZiB0aGUgPGI+TG9jYXRpb248L2I+IGZpZWxkIHRvIG9wZW4KLXRoZSBTZWxlY3QgRmlsZSB3aW5kb3cuPHVpY29udHJvbD48L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSBXU0RMIGZpbGUgb3IgWE1MIFNjaGVtYSB0byBpbXBvcnQgYnkgZG9pbmcgb25lIG9mIHRoZQotZm9sbG93aW5nOjwvY21kPjxpbmZvPjx1bD4KLTxsaT5TZWxlY3QgYSBmaWxlIGZyb20gYW5vdGhlciBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UgaW4gdGhlIDx1aWNvbnRyb2w+V29ya3NwYWNlCi1GaWxlczwvdWljb250cm9sPiBzZWN0aW9uLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5JbXBvcnQgRmlsZXM8L3VpY29udHJvbD4gYW5kIHRoZW4gPHVpY29udHJvbD5Ccm93c2U8L3VpY29udHJvbD4gdG8KLWZpbmQgYW5kIHNlbGVjdCBmaWxlcyBvdXRzaWRlIHRoZSB3b3Jrc3BhY2UuIENsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+IGFmdGVyCi1jb21wbGV0aW5nIHRoaXMgSW1wb3J0IHdpemFyZC48L2xpPgotPC91bD5DbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3YW50IHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pk9uY2UgeW91IHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCB5b3Ugd2lzaCB0byBpbXBvcnQsCi10aGUgaW1wb3J0IG9iamVjdCdzIGxhYmVsIGNoYW5nZXMgdG8gcmVmbGVjdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBJbXBvcnRlZAotV1NETCBjb21wb25lbnRzIG1heSBub3cgYmUgdmlzaWJsZSB3aXRoaW4gdGhlIGVkaXRvci48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3ZjljMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50cywgV1NETCBmaWxlcywgaW1wb3J0IHN0YXRlbWVudHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzLCBXU0RMIGZpbGVzLCBpbXBvcnQgc3RhdGVtZW50cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y3J0aW1wdCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnRpbXB0Ij48YSBuYW1lPSJ0Y3J0aW1wdCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yCi1YTUwgc2NoZW1hcyBpbnRvIHlvdXIgV1NETCBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIG1vcmUgbW9kdWxhcgotV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIDxzdHJvbmc+aW1wb3J0PC9zdHJvbmc+IHN0YXRlbWVudCBhbGxvd3MgdGhlIHNlcGFyYXRpb24KLW9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsCi13aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlcgotc2VydmljZSBkZWZpbml0aW9ucywgYnkgc2VwYXJhdGluZyB0aGUgZGVmaW5pdGlvbnMgYWNjb3JkaW5nIHRvIHRoZWlyIGxldmVsCi1vZiBhYnN0cmFjdGlvbi48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBPdXRsaW5lIHZpZXcsIHJpZ2h0LWNsaWNrIHRoZSA8c3Ryb25nPkltcG9ydHM8L3N0cm9uZz4gZm9sZGVyIGFuZAotY2xpY2sgPHN0cm9uZz5BZGQgSW1wb3J0Ljwvc3Ryb25nPiBTZWxlY3QgeW91ciBuZXcgaW1wb3J0IHN0YXRlbWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgdGhlIGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSA8c3Ryb25nPkxvY2F0aW9uPC9zdHJvbmc+IGZpZWxkIHRvIG9wZW4KLXRoZSBTZWxlY3QgRmlsZSB3aW5kb3cuPHNwYW4gY2xhc3M9InVpY29udHJvbCIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IGEgV1NETCBmaWxlIG9yIFhNTCBTY2hlbWEgdG8gaW1wb3J0IGJ5IGRvaW5nIG9uZSBvZiB0aGUKLWZvbGxvd2luZzo8L3NwYW4+IDx1bD4KLTxsaT5TZWxlY3QgYSBmaWxlIGZyb20gYW5vdGhlciBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldvcmtzcGFjZQotRmlsZXM8L3NwYW4+IHNlY3Rpb24uPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydCBGaWxlczwvc3Bhbj4gYW5kIHRoZW4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnJvd3NlPC9zcGFuPiB0bwotZmluZCBhbmQgc2VsZWN0IGZpbGVzIG91dHNpZGUgdGhlIHdvcmtzcGFjZS4gQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPiBhZnRlcgotY29tcGxldGluZyB0aGlzIEltcG9ydCB3aXphcmQuPC9saT4KLQotPC91bD4KLUNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3YW50IHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+T25jZSB5b3Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50IHlvdSB3aXNoIHRvIGltcG9ydCwKLXRoZSBpbXBvcnQgb2JqZWN0J3MgbGFiZWwgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIEltcG9ydGVkCi1XU0RMIGNvbXBvbmVudHMgbWF5IG5vdyBiZSB2aXNpYmxlIHdpdGhpbiB0aGUgZWRpdG9yLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjZmRlYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydHR5cGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L3RpdGxlPgotPHNob3J0ZGVzYz5UeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIFdTREwgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+dHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPldTREwgYWxsb3dzIHR5cGUgc3lzdGVtcyB0byBiZSBhZGRlZCB2aWEgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLUFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXkgYXBwZWFyIHVuZGVyIHRoZSAgPGI+dHlwZXM8L2I+IGVsZW1lbnQgdG8gaWRlbnRpZnkKLXRoZSB0eXBlIGRlZmluaXRpb24gc3lzdGVtIGJlaW5nIHVzZWQgYW5kIHRvIHByb3ZpZGUgYW4gWE1MIGNvbnRhaW5lciBlbGVtZW50Ci1mb3IgdGhlIHR5cGUgZGVmaW5pdGlvbnMuPC9wPjxwPlRvIGFkZCBhbiBYU0QgdHlwZSBvciBlbGVtZW50IHRvIHlvdXIgV1NETAotZmlsZTogPC9wPjwvY29udGV4dD4KLTxzdGVwcy11bm9yZGVyZWQ+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGFycm93IGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3J0Ci10eXBlIG9iamVjdCB0byBvcGVuIHRoYXQgb3BlcmF0aW9uIGluIHRoZSBYTUwgc2NoZW1hIGVkaXRvci48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzLXVub3JkZXJlZD4KLTxyZXN1bHQ+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWE1MIHNjaGVtYXMsIHNlZSB0aGUgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iLy4uLy4uL29yZy5lY2xpcHNlLndzdC54c2RlZGl0b3IuZG9jLnVzZXIvdG9waWNzL2N4bWxzY2VkLmRpdGEiIHNjb3BlPSJwZWVyIj5YTUwKLXNjaGVtYSBlZGl0b3IgZG9jdW1lbnRhdGlvbjwveHJlZj4gZm9yIGxpbmtzIHRvIG9ubGluZSByZXNvdXJjZXMuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTBkODlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlR5cGVzIGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBXU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlIFczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4gV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZSBXM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGNyZWF0aW5nIFdTREwgdHlwZXMsIFdTREwgZmlsZXMsIHR5cGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBXU0RMIHR5cGVzLCBXU0RMIGZpbGVzLCB0eXBlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y3J0dHlwZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0Y3J0dHlwZSI+PGEgbmFtZT0idGNydHR5cGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlPC9oMT4KLQotCi0KLTxkaXY+PHA+VHlwZXMgZGVzY3JpYmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCi1XU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlCi1XM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldTREwgYWxsb3dzIHR5cGUgc3lzdGVtcyB0byBiZSBhZGRlZCB2aWEgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLUFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXkgYXBwZWFyIHVuZGVyIHRoZSAgPHN0cm9uZz50eXBlczwvc3Ryb25nPiBlbGVtZW50IHRvIGlkZW50aWZ5Ci10aGUgdHlwZSBkZWZpbml0aW9uIHN5c3RlbSBiZWluZyB1c2VkIGFuZCB0byBwcm92aWRlIGFuIFhNTCBjb250YWluZXIgZWxlbWVudAotZm9yIHRoZSB0eXBlIGRlZmluaXRpb25zLjwvcD4KLTxwPlRvIGFkZCBhbiBYU0QgdHlwZSBvciBlbGVtZW50IHRvIHlvdXIgV1NETAotZmlsZTogPC9wPgotPC9kaXY+Ci0KLQotPGRpdiBjbGFzcz0icCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCBjbGljayB0aGUgYXJyb3cgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIHBvcnQKLXR5cGUgb2JqZWN0IHRvIG9wZW4gdGhhdCBvcGVyYXRpb24gaW4gdGhlIFhNTCBzY2hlbWEgZWRpdG9yLjwvc3Bhbj48L2Rpdj4KLQotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBYTUwgc2NoZW1hcywgc2VlIHRoZSA8YSBocmVmPSIvLi4vLi4vb3JnLmVjbGlwc2Uud3N0LnhzZGVkaXRvci5kb2MudXNlci90b3BpY3MvY3htbHNjZWQuZGl0YSI+WE1MIHNjaGVtYSBlZGl0b3IgZG9jdW1lbnRhdGlvbjwvYT4gZm9yIGxpbmtzIHRvIG9ubGluZSByZXNvdXJjZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkyYTcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0Y3J0d3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L3RpdGxlPgotPHNob3J0ZGVzYz5Zb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwKLWVkaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5jcmVhdGluZyBXU0RMIGZpbGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIFdTREwgZmlsZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5DcmVhdGUgYSBwcm9qZWN0IHRvIGNvbnRhaW4gdGhlIFdTREwgZG9jdW1lbnQuPC9jbWQ+PGluZm8+SXQgZG9lcwotbm90IG1hdHRlciB3aGF0IGtpbmQgb2YgcHJvamVjdCB5b3UgY3JlYXRlLjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSB3b3JrYmVuY2gsIGNsaWNrIDxtZW51Y2FzY2FkZT48dWljb250cm9sPkZpbGU8L3VpY29udHJvbD4KLTx1aWNvbnRyb2w+TmV3PC91aWNvbnRyb2w+PHVpY29udHJvbD5PdGhlcjwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZCBzZWxlY3QgPG1lbnVjYXNjYWRlPgotPHVpY29udHJvbD5XZWIgU2VydmljZXM8L3VpY29udHJvbD48dWljb250cm9sPldTREw8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2NtZD4KLTxpbmZvPkNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBXU0RMIGZpbGUuPC9jbWQ+Ci08aW5mbz5JbiB0aGUgIDx1aWNvbnRyb2w+RmlsZSBuYW1lPC91aWNvbnRyb2w+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZQotV1NETCBmaWxlLiBUaGUgbmFtZSBvZiB5b3VyIFhNTCBmaWxlIG11c3QgZW5kIGluICA8c3lzdGVtb3V0cHV0Pi53c2RsPC9zeXN0ZW1vdXRwdXQ+PC9pbmZvPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+IGFuZCBlbnRlciB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uCi1vbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQ6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkEgPHVpY29udHJvbD5UYXJnZXQgbmFtZXNwYWNlPC91aWNvbnRyb2w+IGZvciB0aGUgV1NETCBmaWxlCi1vciBhY2NlcHQgdGhlIGRlZmF1bHQgKDxjb2RlcGg+aHR0cDovL3d3dy5leGFtcGxlLm9yZy88aT5NeVdTRExGaWxlPC9pPi88L2NvZGVwaD4pLjwvY21kPgotPGluZm8+VGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgdXNlZCBmb3IgdGhlIG5hbWVzIG9mIG1lc3NhZ2VzIGFuZCB0aGUgcG9ydAotdHlwZSwgYmluZGluZyBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMIGZpbGUuIFRoZSB2YWx1ZSBtdXN0IHRha2UgdGhlCi1mb3JtIG9mIGEgdmFsaWQgVVJJIChmb3IgZXhhbXBsZSwgPGNvZGVwaD5odHRwOi8vd3d3Lm15Y29tcGFueS5jb20vbXlzZXJ2aWNlLzwvY29kZXBoPik8L2luZm8+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlRoZSA8dWljb250cm9sPlByZWZpeDwvdWljb250cm9sPiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldAotbmFtZXNwYWNlLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IDx1aWNvbnRyb2w+Q3JlYXRlIFdTREwgU2tlbGV0b248L3VpY29udHJvbD4gaWYgeW91IHdhbnQKLXRoZSB3aXphcmQgdG8gY3JlYXRlIHRoZSBza2VsZXRvbiBvZiB0aGUgV1NETCBmaWxlLjwvY21kPjxpbmZvPlRoaXMgd2lsbCBnZW5lcmF0ZQotdGhlIFdTREwgZWxlbWVudHMgcmVxdWlyZWQgZm9yIHlvdXIgc2VydmljZSwgaW5jbHVkaW5nIGJpbmRpbmdzLCBwb3J0cyBhbmQKLW1lc3NhZ2VzLiBZb3UgY2FuIHRoZW4gbW9kaWZ5IHRoZXNlIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB5b3VyIFdlYiBzZXJ2aWNlCi0uPC9pbmZvPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+SWYgeW91IGhhdmUgY2hvc2VuIHRvIGNyZWF0ZSBhIFdTREwgc2tlbGV0b24sIHNlbGVjdCB0aGUgYmluZGluZwotb3B0aW9ucyB5b3Ugd2FudCB0byB1c2UgaW4gdGhlIDx1aWNvbnRyb2w+UHJvdG9jb2w8L3VpY29udHJvbD4gZHJvcCBkb3duLgotVGhlIG9wdGlvbnMgYXJlIFNPQVAgYW5kIEhUVFAuIFVzZSB0aGUgU09BUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHRvIGV4Y2hhbmdlCi1zdHJ1Y3R1cmVkIGFuZCB0eXBlZCBpbmZvcm1hdGlvbi4gVXNlIHRoZSBIVFRQIHByb3RvY29sIHdoZW4geW91IHdhbnQgeW91cgotYXBwbGljYXRpb24gY2xpZW50IHRvIGp1c3QgcmVxdWVzdCBvciB1cGRhdGUgaW5mb3JtYXRpb24uPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD48L2NtZD48aW5mbz5JZiB5b3Ugc2VsZWN0IFNPQVAgeW91IGNhbiB0aGVuIHNlbGVjdCB0aGUgZW5jb2RpbmcKLXN0eWxlIHlvdSB3YW50IHRvIHVzZTo8dWw+Ci08bGk+PHVpY29udHJvbD5kb2N1bWVudCBsaXRlcmFsPC91aWNvbnRyb2w+LiBEb2N1bWVudCBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbAotZW5jb2RpbmcuIFVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzZW5kIFNPQVAgbWVzc2FnZXMgdGhhdAotY2FuIGJlIHZhbGlkYXRlZCBieSBhbiBYTUwgdmFsaWRhdG9yLiAgQWxsIHRoZSBkYXRhIHR5cGVzIGluIHRoZSBTT0FQIG1lc3NhZ2UKLWJvZHkgYXJlIGRlZmluZWQgaW4gYSBzY2hlbWEsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gc2NoZW1hIGVsZW1lbnRzLiA8L2xpPgotPGxpPjx1aWNvbnRyb2w+cnBjIGxpdGVyYWw8L3VpY29udHJvbD4uIFJQQyBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbCBlbmNvZGluZy4KLVVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBvcGVyYXRpb24gbWV0aG9kIG5hbWVzCi1pbiB5b3VyIFNPQVAgbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRpc3BhdGNoIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gIERhdGEKLXR5cGVzIG11c3QgYmUgZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLTxsaT48dWljb250cm9sPnJwYyBlbmNvZGVkPC91aWNvbnRyb2w+LiBSUEMgc3R5bGUgbWVzc2FnZXMgYW5kIFNPQVAgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gZW5jb2RlIGRhdGEgZ3JhcGhzIGluIHlvdXIgU09BUAotbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRlc2VyaWFsaXplIHRoZSBvYmplY3QgZGF0YS4gIERhdGEgdHlwZXMgbXVzdCBiZQotZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+PC9jbWQ+PGluZm8+SWYgeW91IHNlbGVjdCBIVFRQIHlvdSBjYW4gc2VsZWN0IHdoZXRoZXIgdG8gY3JlYXRlCi1hbiBIVFRQIGdldHRlciBvciBzZXR0ZXIuPHVsPgotPGxpPjx1aWNvbnRyb2w+SFRUUCBHRVQ8L3VpY29udHJvbD4uIEEgR0VUIHJlcXVlc3QgZmV0Y2hlcyBkYXRhIGZyb20gYSBXZWIKLXNlcnZlciBiYXNlZCBvbiBhbiBVUkwgdmFsdWUgYW5kIGEgc2V0IG9mIEhUVFAgaGVhZGVycy4gVXNlIHRoaXMgbWV0aG9kIHdoZW4KLXlvdSB3YW50IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdC4gPC9saT4KLTxsaT48dWljb250cm9sPkhUVFAgUE9TVDwvdWljb250cm9sPi4gQSBQT1NUIHJlcXVlc3Qgc2VuZHMgYWRkaXRpb25hbCBkYXRhCi10byB0aGUgc2VydmVyLCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIFVSTCBhbmQgdGhlIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byBzZW5kIGRhdGEgZW5jbG9zZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48aW5mbz5UaGUgV1NETCBmaWxlCi1vcGVucyBpbiB0aGUgV1NETCBlZGl0b3IuPC9pbmZvPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPklmIHlvdSBjcmVhdGVkIGEgV1NETCBmaWxlIHdpdGggYSBza2VsZXRvbiB1c2luZyBTT0FQIGJpbmRpbmdzLAotaXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOjwvcD48cD48aW1hZ2UgYWx0PSJJbWFnZSBvZiBhIFdTREwgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncyIKLWhyZWY9Ii4uL2ltYWdlcy9zb2Fwc2tlbC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+PC9wPjxwPklmIHlvdSBjcmVhdGVkCi1hIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgSFRUUCBiaW5kaW5ncywgaXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0bwotdGhlIGZvbGxvd2luZzo8L3A+PHA+PGltYWdlIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MiCi1ocmVmPSIuLi9pbWFnZXMvaHR0cHNrZWwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRpbXB3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmU5MDhiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBXU0RMIGZpbGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCBmaWxlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRpbXB3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGNydHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnR3c2RsIj48YSBuYW1lPSJ0Y3J0d3NkbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9oMT4KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMCi1lZGl0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBjcmVhdGUgYSBXU0RMIGZpbGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q3JlYXRlIGEgcHJvamVjdCB0byBjb250YWluIHRoZSBXU0RMIGRvY3VtZW50Ljwvc3Bhbj4gSXQgZG9lcwotbm90IG1hdHRlciB3aGF0IGtpbmQgb2YgcHJvamVjdCB5b3UgY3JlYXRlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIHdvcmtiZW5jaCwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV3PC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk90aGVyPC9zcGFuPjwvc3Bhbj4gYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPgotPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2VzPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldTREw8L3NwYW4+PC9zcGFuPi48L3NwYW4+Ci0gQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBXU0RMIGZpbGUuPC9zcGFuPgotIEluIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZSBuYW1lPC9zcGFuPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUKLVdTREwgZmlsZS4gVGhlIG5hbWUgb2YgeW91ciBYTUwgZmlsZSBtdXN0IGVuZCBpbiAgPHR0IGNsYXNzPSJzeXNvdXQiPi53c2RsPC90dD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+IGFuZCBlbnRlciB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uCi1vbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQ6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5BIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhcmdldCBuYW1lc3BhY2U8L3NwYW4+IGZvciB0aGUgV1NETCBmaWxlCi1vciBhY2NlcHQgdGhlIGRlZmF1bHQgKDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvPGVtPk15V1NETEZpbGU8L2VtPi88L3NhbXA+KS48L3NwYW4+Ci0gVGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgdXNlZCBmb3IgdGhlIG5hbWVzIG9mIG1lc3NhZ2VzIGFuZCB0aGUgcG9ydAotdHlwZSwgYmluZGluZyBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMIGZpbGUuIFRoZSB2YWx1ZSBtdXN0IHRha2UgdGhlCi1mb3JtIG9mIGEgdmFsaWQgVVJJIChmb3IgZXhhbXBsZSwgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL3d3dy5teWNvbXBhbnkuY29tL215c2VydmljZS88L3NhbXA+KQotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlZml4PC9zcGFuPiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldAotbmFtZXNwYWNlLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DcmVhdGUgV1NETCBTa2VsZXRvbjwvc3Bhbj4gaWYgeW91IHdhbnQKLXRoZSB3aXphcmQgdG8gY3JlYXRlIHRoZSBza2VsZXRvbiBvZiB0aGUgV1NETCBmaWxlLjwvc3Bhbj4gVGhpcyB3aWxsIGdlbmVyYXRlCi10aGUgV1NETCBlbGVtZW50cyByZXF1aXJlZCBmb3IgeW91ciBzZXJ2aWNlLCBpbmNsdWRpbmcgYmluZGluZ3MsIHBvcnRzIGFuZAotbWVzc2FnZXMuIFlvdSBjYW4gdGhlbiBtb2RpZnkgdGhlc2UgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHlvdXIgV2ViIHNlcnZpY2UKLS48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBoYXZlIGNob3NlbiB0byBjcmVhdGUgYSBXU0RMIHNrZWxldG9uLCBzZWxlY3QgdGhlIGJpbmRpbmcKLW9wdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm90b2NvbDwvc3Bhbj4gZHJvcCBkb3duLgotVGhlIG9wdGlvbnMgYXJlIFNPQVAgYW5kIEhUVFAuIFVzZSB0aGUgU09BUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHRvIGV4Y2hhbmdlCi1zdHJ1Y3R1cmVkIGFuZCB0eXBlZCBpbmZvcm1hdGlvbi4gVXNlIHRoZSBIVFRQIHByb3RvY29sIHdoZW4geW91IHdhbnQgeW91cgotYXBwbGljYXRpb24gY2xpZW50IHRvIGp1c3QgcmVxdWVzdCBvciB1cGRhdGUgaW5mb3JtYXRpb24uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4gLz4gSWYgeW91IHNlbGVjdCBTT0FQIHlvdSBjYW4gdGhlbiBzZWxlY3QgdGhlIGVuY29kaW5nCi1zdHlsZSB5b3Ugd2FudCB0byB1c2U6PHVsPgotPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPmRvY3VtZW50IGxpdGVyYWw8L3NwYW4+LiBEb2N1bWVudCBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbAotZW5jb2RpbmcuIFVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzZW5kIFNPQVAgbWVzc2FnZXMgdGhhdAotY2FuIGJlIHZhbGlkYXRlZCBieSBhbiBYTUwgdmFsaWRhdG9yLiAgQWxsIHRoZSBkYXRhIHR5cGVzIGluIHRoZSBTT0FQIG1lc3NhZ2UKLWJvZHkgYXJlIGRlZmluZWQgaW4gYSBzY2hlbWEsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gc2NoZW1hIGVsZW1lbnRzLiA8L2xpPgotCi08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+cnBjIGxpdGVyYWw8L3NwYW4+LiBSUEMgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgb3BlcmF0aW9uIG1ldGhvZCBuYW1lcwotaW4geW91ciBTT0FQIG1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkaXNwYXRjaCB0aGUgc3BlY2lmaWVkIG1ldGhvZHMuICBEYXRhCi10eXBlcyBtdXN0IGJlIGRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci0KLTxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5ycGMgZW5jb2RlZDwvc3Bhbj4uIFJQQyBzdHlsZSBtZXNzYWdlcyBhbmQgU09BUCBlbmNvZGluZy4KLVVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBlbmNvZGUgZGF0YSBncmFwaHMgaW4geW91ciBTT0FQCi1tZXNzYWdlcyBzbyBhIHNlcnZlciBjYW4gZGVzZXJpYWxpemUgdGhlIG9iamVjdCBkYXRhLiAgRGF0YSB0eXBlcyBtdXN0IGJlCi1kZWZpbmVkLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIFhTRCB0eXBlcy48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3BhbiAvPiBJZiB5b3Ugc2VsZWN0IEhUVFAgeW91IGNhbiBzZWxlY3Qgd2hldGhlciB0byBjcmVhdGUKLWFuIEhUVFAgZ2V0dGVyIG9yIHNldHRlci48dWw+Ci08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+SFRUUCBHRVQ8L3NwYW4+LiBBIEdFVCByZXF1ZXN0IGZldGNoZXMgZGF0YSBmcm9tIGEgV2ViCi1zZXJ2ZXIgYmFzZWQgb24gYW4gVVJMIHZhbHVlIGFuZCBhIHNldCBvZiBIVFRQIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QuIDwvbGk+Ci0KLTxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5IVFRQIFBPU1Q8L3NwYW4+LiBBIFBPU1QgcmVxdWVzdCBzZW5kcyBhZGRpdGlvbmFsIGRhdGEKLXRvIHRoZSBzZXJ2ZXIsIHNwZWNpZmllZCBhZnRlciB0aGUgVVJMIGFuZCB0aGUgaGVhZGVycy4gVXNlIHRoaXMgbWV0aG9kIHdoZW4KLXlvdSB3YW50IHRvIHNlbmQgZGF0YSBlbmNsb3NlZCBpbiB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRoZSBXU0RMIGZpbGUKLW9wZW5zIGluIHRoZSBXU0RMIGVkaXRvci48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3UgY3JlYXRlZCBhIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncywKLWl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08cD48YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3NvYXBza2VsLmdpZiIgYWx0PSJJbWFnZSBvZiBhIFdTREwgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncyIgLz48YnIgLz48L3A+Ci08cD5JZiB5b3UgY3JlYXRlZAotYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MsIGl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8KLXRoZSBmb2xsb3dpbmc6PC9wPgotPHA+PGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy9odHRwc2tlbC5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MiIC8+PGJyIC8+PC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRpbXB3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODgwOWQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGVkdHdzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTxzaG9ydGRlc2M+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwKLWVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoCi1hbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+ZWRpdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmVkaXRpbmcgV1NETCBmaWxlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBvcGVuIGEgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvciwgZG91YmxlLWNsaWNrIGl0IGluIHRoZQotTmF2aWdhdG9yIHZpZXcgb3IgcmlnaHQtY2xpY2sgaXQgYW5kIGNsaWNrICA8Yj5PcGVuIFdpdGggPiBXU0RMIEVkaXRvci48L2I+PC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZWRpdGlzb3VyY2V2aWV3Ij4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBTb3VyY2UgdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5UbyBlZGl0IGEgV1NETCBmaWxlIGluIHRoZSBTb3VyY2UgdmlldywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9wZW4geW91ciBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgdGhlICA8dWljb250cm9sPlNvdXJjZTwvdWljb250cm9sPiB0YWIuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHNvdXJjZSBjb2RlIHlvdSB3YW50IHRvIGVkaXQuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+QXQgYW55IHRpbWUsIHlvdSBjYW4gc3dpdGNoIHRvIHRoZSBTb3VyY2UgdmlldyB0byByZXZpZXcgdGhlIHNvdXJjZQotY29kZSBvZiB0aGUgV1NETCBmaWxlLiBZb3UgY2FuIGFsc28gZWRpdCB5b3VyIFdTREwgZmlsZSBkaXJlY3RseSBpbiB0aGUgU291cmNlCi12aWV3LjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZWRpdGVkaXR2aWV3Ij4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBEZXNpZ24gdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgRGVzaWduIHZpZXcgcHJvdmlkZXMgYSBncmFwaGljYWwgd2F5IHRvIGJyb3dzZSBhbmQgZWRpdCB5b3VyCi1XU0RMIGZpbGUuIEVhY2ggdHlwZSBvZiB0b3AgbGV2ZWwgV1NETCBvYmplY3QgaXMgc2hvd24gd2l0aGluIGEgdGFidWxhciB2aWV3Ci0oZm9yIGV4YW1wbGUsIHNlcnZpY2UsIGJpbmRpbmcsIHBvcnQgdHlwZSkuIEVhY2ggdGFidWxhciB2aWV3IGNvbnRhaW5zIG9uZQotb3IgbW9yZSByb3dzIHRoYXQgcmVwcmVzZW50IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdC4gVGhlIHNlcnZpY2UsIGJpbmRpbmcsCi1hbmQgcG9ydCB0eXBlIG9iamVjdHMgYXJlICdsaW5rZWQnLiBBIGxpbmUgZGlzcGxheXMgdG8gZGVub3RlIGEgcmVmZXJlbmNlCi0ob3IgYXNzb2NpYXRpb24pIGJldHdlZW4gdGhlc2Ugb2JqZWN0cy48L3A+PHA+IDxpbWFnZSBhbHQ9IkltYWdlIG9mIGEgV1NETCBmaWxlIG9wZW4gaW4gdGhlIFdTREwgZWRpdG9yIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRwcm9wZXJ0aWVzdmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgUHJvcGVydGllcyB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBQcm9wZXJ0aWVzIHZpZXcgZGlzcGxheXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYW5kIGVkaXRhYmxlCi1hdHRyaWJ1dGUgdmFsdWVzIG9mIGEgc2VsZWN0ZWQgV1NETCBvYmplY3QgYW5kIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcGFuZXMKLXRvIGVkaXQ6PC9wPjx1bD4KLTxsaT4gPHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+IHBhbmUsIHdoaWNoIGRpc3BsYXlzIGEgbGlzdCBvZiBvYmplY3QKLWF0dHJpYnV0ZXMuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Eb2N1bWVudGF0aW9uPC91aWNvbnRyb2w+IHBhbmUsIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24KLXlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQuPC9saT4KLTxsaT4gPHVpY29udHJvbD5FeHRlbnNpb25zPC91aWNvbnRyb2w+IHBhbmUsIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGV4dGVuc2lvbgotY29tcG9uZW50cy48L2xpPgotPC91bD48ZHJhZnQtY29tbWVudD4gW0xlZ2FjeSBUaXRsZV0gU2hvd2luZyBCaW5kaW5ncyBpbiB0aGUgRGVzaWduIFtMZWdhY3kKLUNvbnRleHRdQnkgZGVmYXVsdCBiaW5kaW5ncyBhcmUgc2hvd24gaW4gdGhlIERlc2lnbiBWaWV3LiBTZWxlY3QgdGhlIHNob3cvaGlkZQotYmluZGluZyBidXR0b24gYXQgdGhlIHRvcCBsZWZ0IG9mIHRoZSBEZXNpZ24gVmlldyB0byBoaWRlIHRoZSBiaW5kaW5ncy4gV2l0aAotdGhlIGJpbmRpbmdzIGhpZGRlbiBhIHNlcnZpY2UgY2FuIGJlIGJyb3dzZWQgZnJvbSBhIHB1cmVseSBhYnN0cmFjdCBsZXZlbAotd2l0aG91dCBzaG93aW5nIGJpbmRpbmcgaW5mb3JtYXRpb24uIFdoZW4gdGhlIG5lZWQgYXJpc2VzIHRvIHVuZGVyc3RhbmQgdGhlCi1jb25jcmV0ZSBkZXRhaWxzIHJlcHJlc2VudGVkIGJ5IHRoZSBiaW5kaW5nLCBzZWxlY3QgdGhlIHNob3cvaGlkZSBiaW5kaW5nCi1idXR0b24gYWdhaW4gdG8gbWFrZSB0aGVtIHZpc2libGUuIHZpZXcgW1dyaXRlciBjb21tZW50c10gUmVtb3ZlIHRvcGljICJTaG93aW5nCi1iaW5kaW5ncy4uLiIgYmVjYXVzZSB0aGVyZSBpcyBubyBzaG93L2hpZGUgYmluZGluZyBmdW5jdGlvbiBpbiB0aGUgbmV3IEdVSTwvZHJhZnQtY29tbWVudD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRvdXRsaW5ldmlldyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBPdXRsaW5lIHZpZXc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIE91dGxpbmUgdmlldyB3aWxsIHNob3cgeW91IGFsbCB0aGUgaXRlbXMgaW4geW91ciBXU0RMIGZpbGUKLWFzIHlvdSBhZGQgdGhlbS4gSW4gdGhpcyB2aWV3LCB5b3UgY2FuIGJvdGggY3JlYXRlIGFuZCBkZWxldGUgV1NETCBjb21wb25lbnRzLjwvcD48cD5UaGUKLU91dGxpbmUgdmlldyBjb250YWlucyB0aGUgZm9sbG93aW5nIGZvbGRlcnMgeW91IGNhbiB1c2UgKGJ5IHJpZ2h0LWNsaWNraW5nCi1hbmQgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24pIHRvIGVkaXQgeW91ciBXU0RMIGZpbGU6PC9wPjx1bD4KLTxsaT4gPGI+SW1wb3J0czwvYj4mbmJzcDtzdGF0ZW1lbnRzLCB3aGljaCBhcmUgdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2UKLXdpdGggYSBkb2N1bWVudCBsb2NhdGlvbi48L2xpPgotPGxpPiA8Yj5UeXBlczwvYj4sIHdoaWNoIHByb3ZpZGUgZGF0YSB0eXBlIGRlZmluaXRpb25zIHVzZWQgdG8gZGVzY3JpYmUgdGhlCi1tZXNzYWdlcyBleGNoYW5nZWQuIFlvdSBjYW5ub3QgZWRpdCBhbnkgdHlwZXMgZGlyZWN0bHkgdXNpbmcgdGhpcyBmb2xkZXIuPC9saT4KLTxsaT4gPGI+U2VydmljZXM8L2I+LCB3aGljaCBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy48L2xpPgotPGxpPiA8Yj5CaW5kaW5nczwvYj4sIHdoaWNoIHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zCi1mb3IgdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotPGxpPiA8Yj5Qb3J0IFR5cGU8L2I+LCB3aGljaCBpcyBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zLiBFYWNoIG9wZXJhdGlvbgotcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gPC9saT4KLTxsaT4gPGI+TWVzc2FnZXM8L2I+LCB3aGljaCByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZwotdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQKLXdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci08L3VsPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGltcHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWUxNmM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFZGl0aW5nIFdTREwgZmlsZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIGVkaXRpbmcsIFdlYiBzZXJ2aWNlcywgZWRpdGluZyBXU0RMIGZpbGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgZWRpdGluZywgV2ViIHNlcnZpY2VzLCBlZGl0aW5nIFdTREwgZmlsZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRlZHR3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0ZWR0d3NkbCI+PGEgbmFtZT0idGVkdHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkVkaXRpbmcgV1NETCBmaWxlczwvaDE+Ci0KLQotCi08ZGl2PjxwPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMCi1lZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaAotYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBvcGVuIGEgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvciwgZG91YmxlLWNsaWNrIGl0IGluIHRoZQotTmF2aWdhdG9yIHZpZXcgb3IgcmlnaHQtY2xpY2sgaXQgYW5kIGNsaWNrICA8c3Ryb25nPk9wZW4gV2l0aCAmZ3Q7IFdTREwgRWRpdG9yLjwvc3Ryb25nPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImVkaXRpc291cmNldmlldyI+PGEgbmFtZT0iZWRpdGlzb3VyY2V2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIFNvdXJjZSB2aWV3PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGVkaXQgYSBXU0RMIGZpbGUgaW4gdGhlIFNvdXJjZSB2aWV3LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+T3BlbiB5b3VyIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNvdXJjZTwvc3Bhbj4gdGFiLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSBzb3VyY2UgY29kZSB5b3Ugd2FudCB0byBlZGl0Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5BdCBhbnkgdGltZSwgeW91IGNhbiBzd2l0Y2ggdG8gdGhlIFNvdXJjZSB2aWV3IHRvIHJldmlldyB0aGUgc291cmNlCi1jb2RlIG9mIHRoZSBXU0RMIGZpbGUuIFlvdSBjYW4gYWxzbyBlZGl0IHlvdXIgV1NETCBmaWxlIGRpcmVjdGx5IGluIHRoZSBTb3VyY2UKLXZpZXcuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iZWRpdGVkaXR2aWV3Ij48YSBuYW1lPSJlZGl0ZWRpdHZpZXciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+RWRpdGluZyBpbiB0aGUgRGVzaWduIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIERlc2lnbiB2aWV3IHByb3ZpZGVzIGEgZ3JhcGhpY2FsIHdheSB0byBicm93c2UgYW5kIGVkaXQgeW91cgotV1NETCBmaWxlLiBFYWNoIHR5cGUgb2YgdG9wIGxldmVsIFdTREwgb2JqZWN0IGlzIHNob3duIHdpdGhpbiBhIHRhYnVsYXIgdmlldwotKGZvciBleGFtcGxlLCBzZXJ2aWNlLCBiaW5kaW5nLCBwb3J0IHR5cGUpLiBFYWNoIHRhYnVsYXIgdmlldyBjb250YWlucyBvbmUKLW9yIG1vcmUgcm93cyB0aGF0IHJlcHJlc2VudCB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QuIFRoZSBzZXJ2aWNlLCBiaW5kaW5nLAotYW5kIHBvcnQgdHlwZSBvYmplY3RzIGFyZSAnbGlua2VkJy4gQSBsaW5lIGRpc3BsYXlzIHRvIGRlbm90ZSBhIHJlZmVyZW5jZQotKG9yIGFzc29jaWF0aW9uKSBiZXR3ZWVuIHRoZXNlIG9iamVjdHMuPC9wPgotPHA+IDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGVkaXRvci5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIGZpbGUgb3BlbiBpbiB0aGUgV1NETCBlZGl0b3IiIC8+PGJyIC8+PC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImVkaXRwcm9wZXJ0aWVzdmlldyI+PGEgbmFtZT0iZWRpdHByb3BlcnRpZXN2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIFByb3BlcnRpZXMgdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgUHJvcGVydGllcyB2aWV3IGRpc3BsYXlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIGFuZCBlZGl0YWJsZQotYXR0cmlidXRlIHZhbHVlcyBvZiBhIHNlbGVjdGVkIFdTREwgb2JqZWN0IGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIHBhbmVzCi10byBlZGl0OjwvcD4KLTx1bD4KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4gcGFuZSwgd2hpY2ggZGlzcGxheXMgYSBsaXN0IG9mIG9iamVjdAotYXR0cmlidXRlcy48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRvY3VtZW50YXRpb248L3NwYW4+IHBhbmUsIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24KLXlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FeHRlbnNpb25zPC9zcGFuPiBwYW5lLCB3aGljaCBpcyB1c2VkIHRvIGFkZCBleHRlbnNpb24KLWNvbXBvbmVudHMuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImVkaXRvdXRsaW5ldmlldyI+PGEgbmFtZT0iZWRpdG91dGxpbmV2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIE91dGxpbmUgdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgT3V0bGluZSB2aWV3IHdpbGwgc2hvdyB5b3UgYWxsIHRoZSBpdGVtcyBpbiB5b3VyIFdTREwgZmlsZQotYXMgeW91IGFkZCB0aGVtLiBJbiB0aGlzIHZpZXcsIHlvdSBjYW4gYm90aCBjcmVhdGUgYW5kIGRlbGV0ZSBXU0RMIGNvbXBvbmVudHMuPC9wPgotPHA+VGhlCi1PdXRsaW5lIHZpZXcgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmb2xkZXJzIHlvdSBjYW4gdXNlIChieSByaWdodC1jbGlja2luZwotYW5kIHNlbGVjdGluZyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uKSB0byBlZGl0IHlvdXIgV1NETCBmaWxlOjwvcD4KLTx1bD4KLTxsaT4gPHN0cm9uZz5JbXBvcnRzPC9zdHJvbmc+wqBzdGF0ZW1lbnRzLCB3aGljaCBhcmUgdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2UKLXdpdGggYSBkb2N1bWVudCBsb2NhdGlvbi48L2xpPgotCi08bGk+IDxzdHJvbmc+VHlwZXM8L3N0cm9uZz4sIHdoaWNoIHByb3ZpZGUgZGF0YSB0eXBlIGRlZmluaXRpb25zIHVzZWQgdG8gZGVzY3JpYmUgdGhlCi1tZXNzYWdlcyBleGNoYW5nZWQuIFlvdSBjYW5ub3QgZWRpdCBhbnkgdHlwZXMgZGlyZWN0bHkgdXNpbmcgdGhpcyBmb2xkZXIuPC9saT4KLQotPGxpPiA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+LCB3aGljaCBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy48L2xpPgotCi08bGk+IDxzdHJvbmc+QmluZGluZ3M8L3N0cm9uZz4sIHdoaWNoIHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zCi1mb3IgdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotCi08bGk+IDxzdHJvbmc+UG9ydCBUeXBlPC9zdHJvbmc+LCB3aGljaCBpcyBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zLiBFYWNoIG9wZXJhdGlvbgotcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gPC9saT4KLQotPGxpPiA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+LCB3aGljaCByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZwotdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQKLXdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0aW1wd3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiI+SW1wb3J0aW5nIGEgV1NETCBmaWxlPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDJlYjU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0aW1wd3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5JbXBvcnRpbmcgV1NETCBmaWxlczwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+WW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUKLVdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5Ci10byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPmltcG9ydGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmltcG9ydGluZyBXU0RMIGZpbGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UKLWZyb20gYSBXU0RMIGZpbGUuIFlvdSBtdXN0IGZpcnN0IGNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUuIEEgV1NETCBmaWxlCi1jYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIFRoaXMgaXMgZGVzY3JpYmVkIGluOiAgPHhyZWYgaHJlZj0iLi4vdGFza3MvdGNydHdzZGwuZGl0YSIKLXNjb3BlPSJwZWVyIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L3hyZWY+LiBUbyBpbXBvcnQgYSBXU0RMIGZpbGUgZm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LjwvcD48cD4gPHVpY29udHJvbD5QcmVyZXF1aXNpdGU6PC91aWNvbnRyb2w+IENyZWF0ZQotYSBwcm9qZWN0LiBJdCBpcyByZWNvbW1lbmQgdGhhdCB5b3UgY3JlYXRlIGEgV2ViIHByb2plY3Qgc28gdGhhdCB0aGUgV1NETAotY2FuIGJlIGVhc2lseSB1c2VkIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgYXJ0aWZhY3RzIGFuZCBkZXBsb3llZC48L3A+PHA+Rm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgV2ViIHByb2plY3QsIHJlZmVyIHRvIHRoZSBXZWIgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQKLWRvY3VtZW50YXRpb24uPC9wPjxwPlRvIGltcG9ydCBhIFdTREwgZmlsZSB0byB5b3VyIFdlYiBwcm9qZWN0LCBjb21wbGV0ZSB0aGUKLWZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5TZWxlY3QgeW91ciBwcm9qZWN0IGluIHRoZSBKYXZhIEVFIE5hdmlnYXRvciBwYW5lLCBhbmQgZnJvbSB0aGUgPHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+IG1lbnUsCi1zZWxlY3QgPHVpY29udHJvbD5JbXBvcnQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPjx1aWNvbnRyb2w+RmlsZQotU3lzdGVtPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4gYW5kIGNsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+QnJvd3NlPC91aWNvbnRyb2w+IG9uIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHdpemFyZAotdG8gc2VsZWN0IHRoZSBkaXJlY3RvcmllcyBmcm9tIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIGFkZCB0aGUgV1NETC48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIGltcG9ydCBzZWxlY3Rpb24gcGFuZXMsIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gc2VsZWN0Ci1leGFjdGx5IHRoZSByZXNvdXJjZXMgeW91IHdhbnQgdG8gYWRkOiAgPC9jbWQ+PGluZm8+PHVsPgotPGxpPkV4cGFuZCB0aGUgaGllcmFyY2hpZXMgaW4gdGhlIGxlZnQgcGFuZSBhbmQgc2VsZWN0IG9yIGNsZWFyIHRoZSBjaGVja2JveGVzCi10aGF0IHJlcHJlc2VudCB0aGUgZm9sZGVycyBpbiB0aGUgc2VsZWN0ZWQgZGlyZWN0b3J5LiBUaGVuIGluIHRoZSByaWdodCBwYW5lLAotc2VsZWN0IG9yIGNsZWFyIGNoZWNrIGJveGVzIGZvciBpbmRpdmlkdWFsIGZpbGVzLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5GaWx0ZXIgVHlwZXM8L3VpY29udHJvbD4gdG8gZmlsdGVyIHRoZSBjdXJyZW50IHNlbGVjdGlvbgotZm9yIGZpbGVzIG9mIGEgc3BlY2lmaWMgdHlwZS48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+U2VsZWN0IEFsbDwvdWljb250cm9sPiB0byBzZWxlY3QgYWxsIHJlc291cmNlcyBpbiB0aGUKLWRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBkZXNlbGVjdCB0aGUgb25lcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0byBhZGQuPC9saT4KLTxsaT5DbGljayA8dWljb250cm9sPkRlc2VsZWN0IEFsbDwvdWljb250cm9sPiB0byBkZXNlbGVjdCBhbGwgcmVzb3VyY2VzIGluCi10aGUgZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGNob29zZSBpbmRpdmlkdWFsIHJlc291cmNlcyB0byBhZGQuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U3BlY2lmeSB0aGUgV29ya2JlbmNoIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBiZSB0aGUgaW1wb3J0Ci1kZXN0aW5hdGlvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPldoZW4geW91IGhhdmUgZmluaXNoZWQgc3BlY2lmeWluZyB5b3VyIGltcG9ydCBvcHRpb25zLCBjbGljayA8dWljb250cm9sPkZpbmlzaC48L3VpY29udHJvbD48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkFsdGVybmF0ZWx5LCB5b3UgY2FuIGltcG9ydCBhIFdTREwgZmlsZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlci4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5kaXRhIgotc2NvcGU9InBlZXIiPiBVc2luZyB0aGUgV1NETCBFeHBsb3JlcjwveHJlZj4uICA8L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI4YjczYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5IHRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIGltcG9ydGluZywgV2ViIHNlcnZpY2VzLCBpbXBvcnRpbmcgV1NETCBmaWxlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIGltcG9ydGluZywgV2ViIHNlcnZpY2VzLCBpbXBvcnRpbmcgV1NETCBmaWxlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGltcHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5JbXBvcnRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGltcHdzZGwiPjxhIG5hbWU9InRpbXB3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2gxPgotCi0KLQotCi08ZGl2PjxwPllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlCi1XU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eQotdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZQotZnJvbSBhIFdTREwgZmlsZS4gWW91IG11c3QgZmlyc3QgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZS4gQSBXU0RMIGZpbGUKLWNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXU0RMIGVkaXRvci4gVGhpcyBpcyBkZXNjcmliZWQgaW46ICA8YSBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5odG1sIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+LiBUbyBpbXBvcnQgYSBXU0RMIGZpbGUgZm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LjwvcD4KLTxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVyZXF1aXNpdGU6PC9zcGFuPiBDcmVhdGUKLWEgcHJvamVjdC4gSXQgaXMgcmVjb21tZW5kIHRoYXQgeW91IGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHNvIHRoYXQgdGhlIFdTREwKLWNhbiBiZSBlYXNpbHkgdXNlZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGFydGlmYWN0cyBhbmQgZGVwbG95ZWQuPC9wPgotPHA+Rm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgV2ViIHByb2plY3QsIHJlZmVyIHRvIHRoZSBXZWIgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQKLWRvY3VtZW50YXRpb24uPC9wPgotPHA+VG8gaW1wb3J0IGEgV1NETCBmaWxlIHRvIHlvdXIgV2ViIHByb2plY3QsIGNvbXBsZXRlIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHByb2plY3QgaW4gdGhlIEphdmEgRUUgTmF2aWdhdG9yIHBhbmUsIGFuZCBmcm9tIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPiBtZW51LAotc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlCi1TeXN0ZW08L3NwYW4+PC9zcGFuPiBhbmQgY2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnJvd3NlPC9zcGFuPiBvbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQKLXRvIHNlbGVjdCB0aGUgZGlyZWN0b3JpZXMgZnJvbSB3aGljaCB5b3Ugd291bGQgbGlrZSB0byBhZGQgdGhlIFdTREwuPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgaW1wb3J0IHNlbGVjdGlvbiBwYW5lcywgdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBzZWxlY3QKLWV4YWN0bHkgdGhlIHJlc291cmNlcyB5b3Ugd2FudCB0byBhZGQ6ICA8L3NwYW4+IDx1bD4KLTxsaT5FeHBhbmQgdGhlIGhpZXJhcmNoaWVzIGluIHRoZSBsZWZ0IHBhbmUgYW5kIHNlbGVjdCBvciBjbGVhciB0aGUgY2hlY2tib3hlcwotdGhhdCByZXByZXNlbnQgdGhlIGZvbGRlcnMgaW4gdGhlIHNlbGVjdGVkIGRpcmVjdG9yeS4gVGhlbiBpbiB0aGUgcmlnaHQgcGFuZSwKLXNlbGVjdCBvciBjbGVhciBjaGVjayBib3hlcyBmb3IgaW5kaXZpZHVhbCBmaWxlcy48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsdGVyIFR5cGVzPC9zcGFuPiB0byBmaWx0ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCi1mb3IgZmlsZXMgb2YgYSBzcGVjaWZpYyB0eXBlLjwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZWxlY3QgQWxsPC9zcGFuPiB0byBzZWxlY3QgYWxsIHJlc291cmNlcyBpbiB0aGUKLWRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBkZXNlbGVjdCB0aGUgb25lcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0byBhZGQuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlc2VsZWN0IEFsbDwvc3Bhbj4gdG8gZGVzZWxlY3QgYWxsIHJlc291cmNlcyBpbgotdGhlIGRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBjaG9vc2UgaW5kaXZpZHVhbCByZXNvdXJjZXMgdG8gYWRkLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNwZWNpZnkgdGhlIFdvcmtiZW5jaCBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgYmUgdGhlIGltcG9ydAotZGVzdGluYXRpb24uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBzcGVjaWZ5aW5nIHlvdXIgaW1wb3J0IG9wdGlvbnMsIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaC48L3NwYW4+PC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QWx0ZXJuYXRlbHksIHlvdSBjYW4gaW1wb3J0IGEgV1NETCBmaWxlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyLgotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvOiAgPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9hPi4gIDwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZDA1ODkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0c2V0YmluZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5TZXR0aW5nIGEgYmluZGluZzwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgYmluZGluZyBpcyBhIHRvcCBsZXZlbCBXU0RMIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgY29uY3JldGUgc3BlY2lmaWNhdGlvbgotcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nCi1yZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeQotY2xvc2VseSB0byB0aGF0IG9mIHRoZSBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGNvbnRhaW5zIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLShmb3IgZXhhbXBsZSwgU09BUCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLgotRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmJpbmRpbmdzPGluZGV4dGVybT5jcmVhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+c2V0dGluZwotV1NETCBiaW5kaW5nczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+YmluZGluZ3M8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBiaW5kaW5nIGJ5IHJpZ2h0IGNsaWNraW5nIGluIGFueSBibGFuayBzcGFjZQotaW4gdGhlIERlc2lnbiB2aWV3IGFuZCBzZWxlY3RpbmcgPHVpY29udHJvbD5BZGQgQmluZGluZzwvdWljb250cm9sPi4gWW91IGNhbgotY3JlYXRlIGEgbmV3IGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iY3JlYXRlbmV3YmluZCI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgYmluZGluZzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgPGI+U2V0IEJpbmRpbmcKLT4gTmV3IEJpbmRpbmc8L2I+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBiaW5kaW5nLjwvY21kPjxpbmZvPlRoZQotbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIGFsbCBiaW5kaW5ncyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwKLWRvY3VtZW50LiBDbGljayA8Yj5PSy48L2I+IFRvIHNlbGVjdCB0aGUgbmV3IGJpbmRpbmcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pjxub3RlPkEgPGI+UG9ydFR5cGU8L2I+IGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kCi10aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIFlvdSBjYW4gZWl0aGVyIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yCi15b3VyIGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi90YXNrcy90c2V0cHJ0dC5kaXRhIiBzY29wZT0icGVlciI+U2V0dGluZwotYSBQb3J0IFR5cGU8L3hyZWY+Ljwvbm90ZT48bm90ZSB0eXBlPSJ0aXAiPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgYmluZGluZwotZm9yIHlvdXIgcG9ydCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiB0aGUgPHVpY29udHJvbD5CaW5kaW5nczwvdWljb250cm9sPiBmb2xkZXIKLWFuZCBzZWxlY3QgPHVpY29udHJvbD5BZGQgQmluZGluZzwvdWljb250cm9sPi48L25vdGU+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9InJldXNlYmluZGluZyI+Ci08dGl0bGU+UmV1c2luZyBhIGJpbmRpbmcgZm9yIGEgcG9ydDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyByZXVzZSBhIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHNlbGVjdCB5b3VyIHBvcnQuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkZyb20gdGhlIDxiPkJpbmRpbmc8L2I+IGRyb3AgZG93biBsaXN0LCBzZWxlY3QgdGhlIGJpbmRpbmcgeW91Ci13YW50IHRvIHVzZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJyZWdlbmVyYXRpbmdhYmluZGluZyI+Ci08dGl0bGU+UmVnZW5lcmF0aW5nIGEgYmluZGluZzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5UbyByZWdlbmVyYXRlIGEgYmluZGluZywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlJpZ2h0LWNsaWNrIHRoZSBiaW5kaW5nIHlvdSB3YW50IHRvIHJlZ2VuZXJhdGUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgPHVpY29udHJvbD5HZW5lcmF0ZSBCaW5kaW5nIENvbnRlbnQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TcGVjaWZ5IHRoZSByZXF1aXJlZCBiaW5kaW5nIGluZm9ybWF0aW9uLiBJZiB5b3UgYXJlIG1vZGlmeWluZwotYW4gZXhpc3RpbmcgYmluZGluZywgc2VsZWN0IHRoZSA8dWljb250cm9sPk92ZXJ3cml0ZSBleGlzdGluZyBiaW5kaW5nIGluZm9ybWF0aW9uPC91aWNvbnRyb2w+IGNoZWNrCi1ib3guPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iaW1wYmluZGluZyI+Ci08dGl0bGU+SW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+VG8gaW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgIDxiPlNldCBCaW5kaW5nCi0+IEV4aXN0aW5nIEJpbmRpbmcuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3UgY2FuIGltcG9ydCBhIGJpbmRpbmcgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+RW5jbG9zaW5nIFByb2plY3Q8L2I+OiBsaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj46IGxpc3RzIHRoZSBiaW5kaW5nIHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyCi1jdXJyZW50IGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0Ci1vZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgYmluZGluZ3Mgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxiPk9LPC9iPi4gSW4KLXRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNhNjQ2MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU2V0dGluZyBhIGJpbmRpbmciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBiaW5kaW5nIGlzIGEgdG9wIGxldmVsIFdTREwgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBjb25jcmV0ZSBzcGVjaWZpY2F0aW9uIHJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeSBjbG9zZWx5IHRvIHRoYXQgb2YgdGhlIHBvcnQgdHlwZS4gVGhlIGJpbmRpbmcgY29udGFpbnMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyAoZm9yIGV4YW1wbGUsIFNPQVAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4gRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24gcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBUaGUgc3RydWN0dXJlIG9mIGEgYmluZGluZyBjb3JyZXNwb25kcyB2ZXJ5IGNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIChmb3IgZXhhbXBsZSwgU09BUCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLiBFYWNoIHBvcnQgd2l0aGluIGEgc2VydmljZSByZWZlcmVuY2VzIGV4YWN0bHkgb25lIGJpbmRpbmcuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBiaW5kaW5ncywgY3JlYXRpbmcsIHNldHRpbmcgV1NETCBiaW5kaW5ncywgV1NETCBmaWxlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYmluZGluZ3MsIGNyZWF0aW5nLCBzZXR0aW5nIFdTREwgYmluZGluZ3MsIFdTREwgZmlsZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRzZXRiaW5kIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+U2V0dGluZyBhIGJpbmRpbmc8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRzZXRiaW5kIj48YSBuYW1lPSJ0c2V0YmluZCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U2V0dGluZyBhIGJpbmRpbmc8L2gxPgotCi0KLQotPGRpdj48cD5BIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24KLXJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZwotcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkKLWNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0oZm9yIGV4YW1wbGUsIFNPQVAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4KLUVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgYmluZGluZyBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZCBCaW5kaW5nPC9zcGFuPi4gWW91IGNhbgotY3JlYXRlIGEgbmV3IGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iY3JlYXRlbmV3YmluZCI+PGEgbmFtZT0iY3JlYXRlbmV3YmluZCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5DcmVhdGluZyBhIG5ldyBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IGFuZCBjbGljayA8c3Ryb25nPlNldCBCaW5kaW5nCi0mZ3Q7IE5ldyBCaW5kaW5nPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIGJpbmRpbmcuPC9zcGFuPiBUaGUKLW5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBhbW9uZyBhbGwgYmluZGluZ3MgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMCi1kb2N1bWVudC4gQ2xpY2sgPHN0cm9uZz5PSy48L3N0cm9uZz4gVG8gc2VsZWN0IHRoZSBuZXcgYmluZGluZywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0LgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluZGluZyB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkCi1pbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBBIDxzdHJvbmc+UG9ydFR5cGU8L3N0cm9uZz4gaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQKLXRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IKLXlvdXIgYmluZGluZywgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKLXNlZSA8YSBocmVmPSJ0c2V0cHJ0dC5odG1sIj5TZXR0aW5nIGEgUG9ydCBUeXBlPC9hPi48L2Rpdj4KLTxkaXYgY2xhc3M9InRpcCI+PHNwYW4gY2xhc3M9InRpcHRpdGxlIj5UaXA6PC9zcGFuPiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IGJpbmRpbmcKLWZvciB5b3VyIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gUmlnaHQgY2xpY2sgb24gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJpbmRpbmdzPC9zcGFuPiBmb2xkZXIKLWFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIEJpbmRpbmc8L3NwYW4+LjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9InJldXNlYmluZGluZyI+PGEgbmFtZT0icmV1c2ViaW5kaW5nIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlJldXNpbmcgYSBiaW5kaW5nIGZvciBhIHBvcnQ8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gcmV1c2UgYSBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHNlbGVjdCB5b3VyIHBvcnQuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5Gcm9tIHRoZSA8c3Ryb25nPkJpbmRpbmc8L3N0cm9uZz4gZHJvcCBkb3duIGxpc3QsIHNlbGVjdCB0aGUgYmluZGluZyB5b3UKLXdhbnQgdG8gdXNlLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJyZWdlbmVyYXRpbmdhYmluZGluZyI+PGEgbmFtZT0icmVnZW5lcmF0aW5nYWJpbmRpbmciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmVnZW5lcmF0aW5nIGEgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyByZWdlbmVyYXRlIGEgYmluZGluZywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPlJpZ2h0LWNsaWNrIHRoZSBiaW5kaW5nIHlvdSB3YW50IHRvIHJlZ2VuZXJhdGUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhdGUgQmluZGluZyBDb250ZW50PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNwZWNpZnkgdGhlIHJlcXVpcmVkIGJpbmRpbmcgaW5mb3JtYXRpb24uIElmIHlvdSBhcmUgbW9kaWZ5aW5nCi1hbiBleGlzdGluZyBiaW5kaW5nLCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk92ZXJ3cml0ZSBleGlzdGluZyBiaW5kaW5nIGluZm9ybWF0aW9uPC9zcGFuPiBjaGVjawotYm94Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJpbXBiaW5kaW5nIj48YSBuYW1lPSJpbXBiaW5kaW5nIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgYW5kIGNsaWNrICA8c3Ryb25nPlNldCBCaW5kaW5nCi0mZ3Q7IEV4aXN0aW5nIEJpbmRpbmcuPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPllvdSBjYW4gaW1wb3J0IGEgYmluZGluZyBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLQotPGxpPjxzdHJvbmc+RW5jbG9zaW5nIFByb2plY3Q8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkN1cnJlbnQgUmVzb3VyY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5nIHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyCi1jdXJyZW50IGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+OiBsaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldAotb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgYmluZGluZ3Mgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uIEluCi10aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODk3M2ZhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNldHBydHQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyBhIHBvcnQgdHlwZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdAotbWVzc2FnZXMgaW52b2x2ZWQuIEVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuCi1BIHBvcnQgdHlwZSBpcyByZWZlcmVuY2VkIGJ5IGEgYmluZGluZyBvYmplY3QuIEVhY2ggYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkKLW9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcwotZXhhY3RseSBvbmUgcG9ydCB0eXBlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMIGZpbGVzPGluZGV4dGVybT5zZXR0aW5nIHBvcnQgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5zZXR0aW5nIHBvcnQgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBwb3J0IHR5cGUgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8dWljb250cm9sPkFkZCBQb3J0VHlwZTwvdWljb250cm9sPi4gQXMgYQotY29udmVuaWVuY2UgeW91IGNhbiBhbHNvIGFkZCBhIHBvcnQgdHlwZSB2aWEgYSBiaW5kaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNyZWF0ZSBhIHBvcnQgdHlwZSBhbmQgbW9kaWZ5IHRoZSBiaW5kaW5nIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBvcnQgdHlwZSBpbgotb25lIGFjdGlvbi4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCByZS11c2UKLWFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJjcmVhdGVwb3J0dHlwZSI+Ci08dGl0bGU+Q3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgPGI+U2V0IFBvcnRUeXBlID4gTmV3IFBvcnRUeXBlPC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgcG9ydCB0eXBlIGluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCBhbmQgY2xpY2sgPGI+T0s8L2I+LjwvY21kPgotPGluZm8+VGhlIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lIGFtb25nIGFsbCBwb3J0IHR5cGVzIGRlZmluZWQgd2l0aGluIGluCi10aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuIFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQgdHlwZSwgY2xpY2sgdGhlIHBvcnQgdHlwZQotb2JqZWN0LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHR5cGUKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+IDxub3RlIHR5cGU9InRpcCI+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZwotdXNpbmcgdGhlIE91dGxpbmUgdmlldy48L25vdGU+PHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgcG9ydCB0eXBlLCB5b3UgY2FuCi1hZGQgb3BlcmF0aW9ucyB0byBpdCwgd2hpY2ggY2FuIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJyZXVzZXBvcnR0eXBlIj4KLTx0aXRsZT5SZXVzZSBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIHJldXNlIGEgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIGNvbXBsZXRlIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8Yj5TZXQgUG9ydCBUeXBlID4gRXhpc3RpbmcgUG9ydFR5cGU8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdSBjYW4gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgbGlzdCBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkN1cnJlbnQgUmVzb3VyY2U8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5Xb3JraW5nIFNldHM8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQKLXNldCBvZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdAotZmlsZXMgZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUKLXNlbGVjdGVkIHRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgZXhpc3RpbmcgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPGI+T0s8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iaW1wb3J0cG9ydHR5cGUiPgotPHRpdGxlPkltcG9ydCBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywKLWNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxiPlNldCBQb3J0IFR5cGUgPiBFeGlzdGluZyBQb3J0VHlwZS48L2I+PC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBwb3J0IHR5cGUgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uCi1JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI5YmIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTZXR0aW5nIGEgcG9ydCB0eXBlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgc2V0dGluZyBwb3J0IHR5cGVzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBzZXR0aW5nIHBvcnQgdHlwZXMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNldHBydHQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIGEgcG9ydCB0eXBlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c2V0cHJ0dCI+PGEgbmFtZT0idHNldHBydHQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNldHRpbmcgYSBwb3J0IHR5cGU8L2gxPgotCi0KLQotPGRpdj48cD5BIHBvcnQgdHlwZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QKLW1lc3NhZ2VzIGludm9sdmVkLiBFYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLgotQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5Ci1vbmUgcG9ydCB0eXBlLiBTaW5jZSBlYWNoIHBvcnQgcmVmZXJzIHRvIGV4YWN0bHkgb25lIGJpbmRpbmcsIGVhY2ggcG9ydCBoYXMKLWV4YWN0bHkgb25lIHBvcnQgdHlwZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgcG9ydCB0eXBlIGJ5IHJpZ2h0IGNsaWNraW5nIGluIGFueSBibGFuayBzcGFjZQotaW4gdGhlIERlc2lnbiB2aWV3IGFuZCBzZWxlY3RpbmcgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIFBvcnRUeXBlPC9zcGFuPi4gQXMgYQotY29udmVuaWVuY2UgeW91IGNhbiBhbHNvIGFkZCBhIHBvcnQgdHlwZSB2aWEgYSBiaW5kaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNyZWF0ZSBhIHBvcnQgdHlwZSBhbmQgbW9kaWZ5IHRoZSBiaW5kaW5nIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBvcnQgdHlwZSBpbgotb25lIGFjdGlvbi4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCByZS11c2UKLWFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJjcmVhdGVwb3J0dHlwZSI+PGEgbmFtZT0iY3JlYXRlcG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+Q3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgPHN0cm9uZz5TZXQgUG9ydFR5cGUgJmd0OyBOZXcgUG9ydFR5cGU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgaW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci0gVGhlIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lIGFtb25nIGFsbCBwb3J0IHR5cGVzIGRlZmluZWQgd2l0aGluIGluCi10aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuIFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQgdHlwZSwgY2xpY2sgdGhlIHBvcnQgdHlwZQotb2JqZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPiA8ZGl2IGNsYXNzPSJ0aXAiPjxzcGFuIGNsYXNzPSJ0aXB0aXRsZSI+VGlwOjwvc3Bhbj4gWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZwotdXNpbmcgdGhlIE91dGxpbmUgdmlldy48L2Rpdj4KLTxwPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIHBvcnQgdHlwZSwgeW91IGNhbgotYWRkIG9wZXJhdGlvbnMgdG8gaXQsIHdoaWNoIGNhbiBzZW5kIGFuZCByZWNlaXZlIG1lc3NhZ2VzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJyZXVzZXBvcnR0eXBlIj48YSBuYW1lPSJyZXVzZXBvcnR0eXBlIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlJldXNlIGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IHdhbnQgdG8gcmV1c2UgYSBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayAgPHN0cm9uZz5TZXQgUG9ydCBUeXBlICZndDsgRXhpc3RpbmcgUG9ydFR5cGU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5DdXJyZW50IFJlc291cmNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkCi1zZXQgb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgZXhpc3RpbmcgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJpbXBvcnRwb3J0dHlwZSI+PGEgbmFtZT0iaW1wb3J0cG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0IGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLAotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8c3Ryb25nPlNldCBQb3J0IFR5cGUgJmd0OyBFeGlzdGluZyBQb3J0VHlwZS48L3N0cm9uZz48L3NwYW4+Ci08L2xpPgotCi08bGk+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5Zb3UgY2FuIGltcG9ydCBhIHBvcnQgdHlwZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxzdHJvbmc+Q2hvb3NlPC9zdHJvbmc+LiBZb3UgY2FuIHNlbGVjdAotZmlsZXMgZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUKLXNlbGVjdGVkIHRoZSBmaWxlcywgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L2xpPgotCi08L3VsPgotCi08L2xpPgotCi08bGk+PHNwYW4+VGhlIHBvcnQgdHlwZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uCi1JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3NkbF9idWlsZF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3NkbF9idWlsZF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyMTcyMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzZGxfYnVpbGRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIg0KLSAibWFwLmR0ZCI+DQotPG1hcCBpZD0id3NkbGJ1aWxkbWFwIiB0aXRsZT0iVXNlZCBvbmx5IHRvIGJ1aWxkIHBsdWdpbiAtIG5vdCB1c2VkIGluIHByb2R1Y3QiPg0KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGVkaXRvciI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdGltcHdzZGwuZGl0YSIgbmF2dGl0bGU9IkltcG9ydGluZyBXU0RMIGZpbGVzIj48L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgV1NETCBmaWxlcyI+PC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBlZGl0b3IiPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90ZWR0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iRWRpdGluZyBXU0RMIGZpbGVzIj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHNydmMuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRwb3J0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdHNldHBydHQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IlNldHRpbmcgYSBwb3J0IHR5cGUiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzZXRiaW5kLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZG9wZXIuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhbiBvcGVyYXRpb24iPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRtZXNzLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBtZXNzYWdlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcGFydC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnRpbXB0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50Ij4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0dHlwZS5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSINCi1uYXZ0aXRsZT0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+DQotPC9tYXA+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c2RsX2J1aWxkX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzZGxfYnVpbGRfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5ZmU2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzZGxfYnVpbGRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGFiZWw9IlVzZWQgb25seSB0byBidWlsZCBwbHVnaW4gLSBub3QgdXNlZCBpbiBwcm9kdWN0IiB0b3BpYz0iY29uY2VwdHMvY3dzZGxlZC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yIiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyIgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iU2V0dGluZyBhIHBvcnQgdHlwZSIgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIGEgYmluZGluZyIgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYW4gb3BlcmF0aW9uIiBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIG1lc3NhZ2UiIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhiZjFmMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c3dzZGxlZGl0b3JjIgotaWQ9Indzd3NkbGVkaXRvcmMiIHRpdGxlPSJ3c3dzZGxlZGl0b3JjIj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGVkaXRvciI+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTgyNmIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3N3c2RsZWRpdG9yYyIgbGFiZWw9Indzd3NkbGVkaXRvcmMiIHRvcGljPSJjb25jZXB0cy9jd3NkbGVkLmh0bWwiPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCIvPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzBhNTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iCi0gIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzd3NkbGVkaXRvcnQiCi1pZD0id3N3c2RsZWRpdG9ydCIgdGl0bGU9Indzd3NkbGVkaXRvcnQiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RpbXB3c2RsLmRpdGEiIG5hdnRpdGxlPSJJbXBvcnRpbmcgV1NETCBmaWxlcyI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgV1NETCBmaWxlcyI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGVkaXRvciI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGVkdHdzZGwuZGl0YSIgbmF2dGl0bGU9IkVkaXRpbmcgV1NETCBmaWxlcyI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHNydmMuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcG9ydC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90c2V0cHJ0dC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzZXRiaW5kLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRvcGVyLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYW4gb3BlcmF0aW9uIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZG1lc3MuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIG1lc3NhZ2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcGFydC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0aW1wdC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnR0eXBlLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSI+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEiCi1uYXZ0aXRsZT0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+Ci08L21hcD4KLTw/UHViICowMDAwMDAxNzEzPz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ODRlMDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3N3c2RsZWRpdG9ydCIgbGFiZWw9Indzd3NkbGVkaXRvcnQiIHRvcGljPSJ0YXNrcy90aW1wd3NkbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyIgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iU2V0dGluZyBhIHBvcnQgdHlwZSIgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIGEgYmluZGluZyIgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYW4gb3BlcmF0aW9uIiBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIG1lc3NhZ2UiIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWE2OWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJfMS4wLjAuamFyCi1iYWsKLXRlbXAKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3YzQ2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MzdjOWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMDcgMjM6MDk6MTAgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NjgwMDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCTIwMDgtMDUtMDUgS2F0ZSBQcmljZSA8a2F0ZXBAY2EuaWJtLmNvbT4KLQktIG1vZGlmaWVkIHRvIGFkZCBnZW5lcmF0aW9uIG9mIHByZS1idWlsdCBoZWxwIGluZGV4LiAKLQktIE11c3QgZGVsZXRlIC9pbmRleCBmb2xkZXIgYmVmb3JlIHJ1bm5pbmcgYnVpbGQKLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMS41LjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249Indzd3NpdGVzdF90b2MuZGl0YW1hcCIgLz4gICAgCQkKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iYnVpbGQuaW5kZXgiIGRlc2NyaXB0aW9uPSJCdWlsZHMgc2VhcmNoIGluZGV4IGZvciB0aGUgcGx1Zy1pbiIgaWY9ImVjbGlwc2UucnVubmluZyI+Ci0JICAgICA8aGVscC5idWlsZEhlbHBJbmRleCBtYW5pZmVzdD0icGx1Z2luLnhtbCIgZGVzdGluYXRpb249Ii4iLz4KLQk8L3RhcmdldD4JCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMWZkNmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMS5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDM0YmEwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGFza3MvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHdzd3NpdGVzdF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGluZGV4LyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gKi5tYXBsaXN0LFwKLSAgICAgICAgICAgICAgICouZGl0YW1hcCxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmRpdGEKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy90cmFmZmljLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMxZWE0YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmNhZDg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvd3NpdmFsaWNvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvXzMuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA5N2QzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZjQ3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MDMyMzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6MzQ6MjMgRURUIDIwMDgNCi1vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJcbjEuMC4yMDMucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWZhMDlkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6MzQ6MjMgRURUIDIwMDgNCi1sdWNlbmU9MS45LjEudjIwMDgwMzA2MTgxMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4zLjEwMC52MjAwODA0MjU/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzA4ZGRmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE3OjM0OjIzIEVEVCAyMDA4DQotL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjU3OTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3OTZhY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzaXRlc3RfdG9jLnhtbCIvPiAKLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+ICAKLTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIubWFwbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q1OGEyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzaXRlc3RfdG9jLmRpdGFtYXAiLz4KLSAgPC9uYXY+Ci0gIDxsaW5rPgotICAgIDxtYXAgZmlsZT0id3N3c2l0ZXN0X3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMmQ0YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGluZGV4PgotICA8ZW50cnkga2V5d29yZD0iV1NETCBmaWxlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwjdHdzZGx2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sI3R3c2RsdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB0cmFmZmljIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIiB0aXRsZT0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImludGVyb3BlcmFiaWxpdHkiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iVENQL0lQIE1vbml0b3IiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0ZXN0aW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzNmZlYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXUy1JIFZhbGlkYXRpb24gRG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5NmFjZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzaXRlc3RfdG9jLnhtbCIvPiAKLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+ICAKLTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZmNmU5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRtb25pdG9yIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgb3IgU09BUCBtb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50LAoteW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0idG1vbml0b3J8MXxUQ1AvSVBNb25pdG9ydGVzdGluZ1dlYnNlcnZpY2VzIiBzdGF0dXM9InVuY2hhbmdlZCI+VENQL0lQCi1Nb25pdG9yPGluZGV4dGVybT50ZXN0aW5nIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0ga2V5cmVmPSJ0bW9uaXRvcnwyfFdlYnNlcnZpY2VzdGVzdGluZ3RyYWZmaWMiCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50ZXN0aW5nIHRyYWZmaWM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0ga2V5cmVmPSJ0bW9uaXRvcnwzfFdlYnNlcnZpY2VzbW9uaXRvcmluZ1RDUC9JUHRyYWZmaWMiIHN0YXR1cz0idW5jaGFuZ2VkIj5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5tb25pdG9yaW5nIFRDUC9JUCB0cmFmZmljPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjxwPiBQcmVyZXF1aXNpdGVzOiA8L3A+PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2U8L2xpPgotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uPC9saT4KLTwvdWw+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIG9yIFdlYiBzZXJ2aWNlCi1jbGllbnQgd2l6YXJkcywgeW91IGNhbiBzZWxlY3QgdG8gc2V0IHVwIGFuZCBydW4gdGhlIFRDUC9JUCBNb25pdG9yIGF1dG9tYXRpY2FsbHkuCi1BbHRlcm5hdGVseSwgeW91IGNhbiBzZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yIG1hbnVhbGx5IGJ5IGNvbXBsZXRpbmcgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiwgaW52b2tlIHRoZSBnZXRFbmRQb2ludCBtZXRob2QuIFJlY29yZAotdGhpcyBlbmRwb2ludC4gVGhlIGRlZmF1bHQgZW5kcG9pbnQgZm9yIGEgV2ViIHNlcnZpY2UgaXM6IGh0dHA6Ly9sb2NhbGhvc3Q6Jmx0O3BvcnQ+LyZsdDt3ZWIKLW1vZHVsZSBjb250ZXh0IHJvb3Q+L3NlcnZpY2VzLyZsdDtwb3J0PjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgc2VydmVyIHRvIGFjdCBhcyB0aGUgVENQL0lQIE1vbml0b3I6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkZyb20gdGhlIFdpbmRvdyBtZW51LCBzZWxlY3QgPHVpY29udHJvbD5QcmVmZXJlbmNlczwvdWljb250cm9sPi4gPC9jbWQ+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3csIGV4cGFuZCA8dWljb250cm9sPlJ1bi9EZWJ1ZzwvdWljb250cm9sPiwKLWFuZCB0aGVuIHNlbGVjdCA8dWljb250cm9sPlRDUC9JUCBNb25pdG9yPC91aWNvbnRyb2w+LiA8L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5TaG93IFRDUC9JUCBNb25pdG9yIFZpZXcgd2hlbiB0aGVyZSBpcwotYWN0aXZpdHk8L3VpY29udHJvbD4gY2hlY2sgYm94LiA8L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlVuZGVyIHRoZSBUQ1AvSVAgTW9uaXRvcnMgbGlzdHMsIGNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LgotQSBOZXcgTW9uaXRvciBkaWFsb2cgb3BlbnMuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6IDwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08Y2hvaWNldGFibGU+Ci08Y2hoZWFkPjxjaG9wdGlvbmhkPk9wdGlvbjwvY2hvcHRpb25oZD48Y2hkZXNjaGQ+RGVzY3JpcHRpb248L2NoZGVzY2hkPjwvY2hoZWFkPgotPGNocm93PjxjaG9wdGlvbj5Mb2NhbCBtb25pdG9yaW5nIHBvcnQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSBhIHVuaXF1ZQotcG9ydCBudW1iZXIgb24geW91ciBsb2NhbCBtYWNoaW5lLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPkhvc3QgbmFtZTwvY2hvcHRpb24+PGNoZGVzYz5TcGVjaWZ5IHRoZSBob3N0IG5hbWUgb3IgSVAgYWRkcmVzcwotb2YgdGhlIG1hY2hpbmUgd2hlcmUgdGhlIHNlcnZlciBpcyBydW5uaW5nLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlBvcnQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHJlbW90ZQotc2VydmVyLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlR5cGU8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB3aGV0aGVyIHRoZSByZXF1ZXN0IHR5cGUgZnJvbQotdGhlIFdlYiBicm93c2VyIGFyZSBzZW50IGJ5IEhUVFAgb3IgVENQL0lQLiBJZiB0aGUgSFRUUCBvcHRpb24gaXMgc2VsZWN0ZWQKLXRoZSByZXF1ZXN0cyBmcm9tIHRoZSBXZWIgYnJvd3NlciBhcmUgbW9kaWZpZWQgc28gdGhhdCB0aGUgSFRUUCBoZWFkZXIgcG9pbnRzCi10byB0aGUgcmVtb3RlIG1hY2hpbmUgYW5kIHNlcGFyYXRlZCBpZiBtdWx0aXBsZSBIVFRQIHJlcXVlc3RzIGFyZSByZWNlaXZlZAotaW4gdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgdGhlIFRDUC9JUCBvcHRpb24gaXMgc2VsZWN0ZWQsIGFsbCB0aGUgcmVxdWVzdHMKLWFyZSBzZW50IGJ5dGUgZm9yIGJ5dGUuIDwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlRpbWVvdXQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSBob3cgbG9uZyB5b3Ugd291bGQgbGlrZQotdGhlIG1vbml0b3IgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjb25uZWN0IGFnYWluLjwvY2hkZXNjPjwvY2hyb3c+Ci08L2Nob2ljZXRhYmxlPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JbiBvcmRlciB0byByb3V0ZSB0aGUgV2ViIHNlcnZpY2UgdGhyb3VnaCB0aGUgbW9uaXRvciwgdGhlIGVuZHBvaW50Ci1vZiB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IG11c3QgYmUgY2hhbmdlZC4gVGhlIFRDUC9JUCBNb25pdG9yIGxpc3RlbnMgb24gcG9ydAotOTA4MS4gSW4gdGhlIFdlYiBicm93c2VyIHdpbmRvdyB1c2VkIGluIHN0ZXAgMSwgaW52b2tlIHRoZSBzZXRFbmRQb2ludCBtZXRob2QsCi1hbmQgY2hhbmdlIHRoZSBlbmRwb2ludCBzbyB0aGF0IGl0IGRpcmVjdHMgdG8gcG9ydCA5MDgxLiBGb3IgZXhhbXBsZSwgdGhlCi1kZWZhdWx0IHdvdWxkIGJlOiA8Y29kZXBoPmh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS93ZWJfbW9kdWxlX2NvbnRleHRfcm9vdC9zZXJ2bGV0L3JwY3JvdXRlcjwvY29kZXBoPiBJbnZva2UKLXRoZSBnZXRFbmRQb2ludCBtZXRob2QgYWdhaW4gdG8gZW5zdXJlIHRoYXQgeW91ciBjaGFuZ2UgaGFzIGJlZW4gaW1wbGVtZW50ZWQuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBhIFdlYiBzZXJ2aWNlIG1ldGhvZCBpbiB0aGUgTWV0aG9kcyBwYW5lLiBJbnZva2UgdGhpcyBtZXRob2QuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNoYW5nZSB0byB0aGUgVENQL0lQIE1vbml0b3IgdmlldyBieSBzZWxlY3RpbmcgdGhlIFRDUC9JUCBNb25pdG9yCi10YWIgaW4gdGhlIFNlcnZlcnMgdmlldy4gVGhpcyB3aWxsIGRpc3BsYXkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGFpcnMgdGhhdAotYXJlIGJlaW5nIHJvdXRlZCB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4gSXQgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZwotcGljdHVyZTogIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRyYWZmaWMiIGhyZWY9Ii4uL2ltYWdlcy90cmFmZmljLmdpZiIKLXBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWFnZSBhbHQ9IldTLUkgdmFsaWRhdGlvbiBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiPjwvaW1hZ2U+IGljb24uIEluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsCi1zZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kIHNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLiA8L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PlRoaXMgbG9nIGZpbGUgd2lsbCBiZSB2YWxpZGF0ZWQgZm9yIFdTLUkgY29tcGxpYW5jZS4gWW91IGNhbiBvcGVuCi10aGUgbG9nIGZpbGUgaW4gYW4gWE1MIGVkaXRvciB0byBleGFtaW5lIGl0cyBjb250ZW50cy48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNPQVA8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhMDM1NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwgeW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQsIHlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlRDUC9JUCBNb25pdG9yLCB0ZXN0aW5nIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCB0ZXN0aW5nIHRyYWZmaWMsIFdlYiBzZXJ2aWNlcywgbW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlRDUC9JUCBNb25pdG9yLCB0ZXN0aW5nIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCB0ZXN0aW5nIHRyYWZmaWMsIFdlYiBzZXJ2aWNlcywgbW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0bW9uaXRvciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgb3IgU09BUCBtb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0bW9uaXRvciI+PGEgbmFtZT0idG1vbml0b3IiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwKLXlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHA+IFByZXJlcXVpc2l0ZXM6IDwvcD4KLTx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlPC9saT4KLQotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIG9yIFdlYiBzZXJ2aWNlCi1jbGllbnQgd2l6YXJkcywgeW91IGNhbiBzZWxlY3QgdG8gc2V0IHVwIGFuZCBydW4gdGhlIFRDUC9JUCBNb25pdG9yIGF1dG9tYXRpY2FsbHkuCi1BbHRlcm5hdGVseSwgeW91IGNhbiBzZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yIG1hbnVhbGx5IGJ5IGNvbXBsZXRpbmcgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uLCBpbnZva2UgdGhlIGdldEVuZFBvaW50IG1ldGhvZC4gUmVjb3JkCi10aGlzIGVuZHBvaW50LiBUaGUgZGVmYXVsdCBlbmRwb2ludCBmb3IgYSBXZWIgc2VydmljZSBpczogaHR0cDovL2xvY2FsaG9zdDombHQ7cG9ydCZndDsvJmx0O3dlYgotbW9kdWxlIGNvbnRleHQgcm9vdCZndDsvc2VydmljZXMvJmx0O3BvcnQmZ3Q7PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DcmVhdGUgYSBzZXJ2ZXIgdG8gYWN0IGFzIHRoZSBUQ1AvSVAgTW9uaXRvcjo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVmZXJlbmNlczwvc3Bhbj4uIDwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJlZmVyZW5jZXMgd2luZG93LCBleHBhbmQgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuL0RlYnVnPC9zcGFuPiwKLWFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UQ1AvSVAgTW9uaXRvcjwvc3Bhbj4uIDwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93IFRDUC9JUCBNb25pdG9yIFZpZXcgd2hlbiB0aGVyZSBpcwotYWN0aXZpdHk8L3NwYW4+IGNoZWNrIGJveC4gPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5VbmRlciB0aGUgVENQL0lQIE1vbml0b3JzIGxpc3RzLCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LgotQSBOZXcgTW9uaXRvciBkaWFsb2cgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6IDwvc3Bhbj48L2xpPgotCi08L29sPgotCi0KLTx0YWJsZSBjbGFzcz0iY2hvaWNldGFibGVib3JkZXIiIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0IiBydWxlcz0icm93cyIgZnJhbWU9ImhzaWRlcyIgYm9yZGVyPSIxIj4KLTx0aGVhZD48dHI+PHRoIHZhbGlnbj0iYm90dG9tIiBpZD0iTjEwMEY0LW9wdGlvbiI+T3B0aW9uPC90aD4KLTx0aCB2YWxpZ249ImJvdHRvbSIgaWQ9Ik4xMDBGNC1kZXNjIj5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPgotPHRib2R5PgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtb3B0aW9uIiBpZD0iTjEwMTBEIj48c3Ryb25nPkxvY2FsIG1vbml0b3JpbmcgcG9ydDwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1kZXNjIE4xMDEwRCI+U3BlY2lmeSBhIHVuaXF1ZQotcG9ydCBudW1iZXIgb24geW91ciBsb2NhbCBtYWNoaW5lLjwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtb3B0aW9uIiBpZD0iTjEwMTFDIj48c3Ryb25nPkhvc3QgbmFtZTwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1kZXNjIE4xMDExQyI+U3BlY2lmeSB0aGUgaG9zdCBuYW1lIG9yIElQIGFkZHJlc3MKLW9mIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEY0LW9wdGlvbiIgaWQ9Ik4xMDEyQiI+PHN0cm9uZz5Qb3J0PC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEY0LWRlc2MgTjEwMTJCIj5TcGVjaWZ5IHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcmVtb3RlCi1zZXJ2ZXIuPC90ZD4KLTwvdHI+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1vcHRpb24iIGlkPSJOMTAxM0EiPjxzdHJvbmc+VHlwZTwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1kZXNjIE4xMDEzQSI+U3BlY2lmeSB3aGV0aGVyIHRoZSByZXF1ZXN0IHR5cGUgZnJvbQotdGhlIFdlYiBicm93c2VyIGFyZSBzZW50IGJ5IEhUVFAgb3IgVENQL0lQLiBJZiB0aGUgSFRUUCBvcHRpb24gaXMgc2VsZWN0ZWQKLXRoZSByZXF1ZXN0cyBmcm9tIHRoZSBXZWIgYnJvd3NlciBhcmUgbW9kaWZpZWQgc28gdGhhdCB0aGUgSFRUUCBoZWFkZXIgcG9pbnRzCi10byB0aGUgcmVtb3RlIG1hY2hpbmUgYW5kIHNlcGFyYXRlZCBpZiBtdWx0aXBsZSBIVFRQIHJlcXVlc3RzIGFyZSByZWNlaXZlZAotaW4gdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgdGhlIFRDUC9JUCBvcHRpb24gaXMgc2VsZWN0ZWQsIGFsbCB0aGUgcmVxdWVzdHMKLWFyZSBzZW50IGJ5dGUgZm9yIGJ5dGUuIDwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtb3B0aW9uIiBpZD0iTjEwMTQ5Ij48c3Ryb25nPlRpbWVvdXQ8L3N0cm9uZz48L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtZGVzYyBOMTAxNDkiPlNwZWNpZnkgaG93IGxvbmcgeW91IHdvdWxkIGxpa2UKLXRoZSBtb25pdG9yIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29ubmVjdCBhZ2Fpbi48L3RkPgotPC90cj4KLQotPC90Ym9keT48L3RhYmxlPgotCi08L2xpPgotCi08bGk+PHNwYW4+SW4gb3JkZXIgdG8gcm91dGUgdGhlIFdlYiBzZXJ2aWNlIHRocm91Z2ggdGhlIG1vbml0b3IsIHRoZSBlbmRwb2ludAotb2YgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBtdXN0IGJlIGNoYW5nZWQuIFRoZSBUQ1AvSVAgTW9uaXRvciBsaXN0ZW5zIG9uIHBvcnQKLTkwODEuIEluIHRoZSBXZWIgYnJvd3NlciB3aW5kb3cgdXNlZCBpbiBzdGVwIDEsIGludm9rZSB0aGUgc2V0RW5kUG9pbnQgbWV0aG9kLAotYW5kIGNoYW5nZSB0aGUgZW5kcG9pbnQgc28gdGhhdCBpdCBkaXJlY3RzIHRvIHBvcnQgOTA4MS4gRm9yIGV4YW1wbGUsIHRoZQotZGVmYXVsdCB3b3VsZCBiZTogPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL2xvY2FsaG9zdDo5MDgxL3dlYl9tb2R1bGVfY29udGV4dF9yb290L3NlcnZsZXQvcnBjcm91dGVyPC9zYW1wPiBJbnZva2UKLXRoZSBnZXRFbmRQb2ludCBtZXRob2QgYWdhaW4gdG8gZW5zdXJlIHRoYXQgeW91ciBjaGFuZ2UgaGFzIGJlZW4gaW1wbGVtZW50ZWQuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCBhIFdlYiBzZXJ2aWNlIG1ldGhvZCBpbiB0aGUgTWV0aG9kcyBwYW5lLiBJbnZva2UgdGhpcyBtZXRob2QuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNoYW5nZSB0byB0aGUgVENQL0lQIE1vbml0b3IgdmlldyBieSBzZWxlY3RpbmcgdGhlIFRDUC9JUCBNb25pdG9yCi10YWIgaW4gdGhlIFNlcnZlcnMgdmlldy4gVGhpcyB3aWxsIGRpc3BsYXkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGFpcnMgdGhhdAotYXJlIGJlaW5nIHJvdXRlZCB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4gSXQgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZwotcGljdHVyZTogIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvdHJhZmZpYy5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhZmZpYyIgLz48YnIgLz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlRvIGVuc3VyZSB0aGF0IHlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LAoteW91IGNhbiBnZW5lcmF0ZSBhIGxvZyBmaWxlIGJ5IGNsaWNraW5nIHRoZSAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIiBhbHQ9IldTLUkgdmFsaWRhdGlvbiBpY29uIiAvPiBpY29uLiBJbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLAotc2VsZWN0IGEgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGFuZCBzcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC4gPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhpcyBsb2cgZmlsZSB3aWxsIGJlIHZhbGlkYXRlZCBmb3IgV1MtSSBjb21wbGlhbmNlLiBZb3UgY2FuIG9wZW4KLXRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbCI+U09BUDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjJiMzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHdzZGx2YWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5JZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQKLXRoZSBXU0RMIHRoYXQgaXMgZ2VuZXJhdGVkIHNob3VsZCBiZSB2YWxpZC4gSG93ZXZlciwgaWYgeW91IGhhdmUgaW1wb3J0ZWQKLWEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMCi10byBlbnN1cmUgaXQgaXMgdmFsaWQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0idHdzZGx2YWx8MXxXU0RMdmFsaWRhdGluZyIgc3RhdHVzPSJ1bmNoYW5nZWQiPldTREwKLWZpbGVzPGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybSBrZXlyZWY9InR3c2RsdmFsfDJ8V2Vic2VydmljZXN2YWxpZGF0aW5nV1NETCIKLXN0YXR1cz0idW5jaGFuZ2VkIj5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnZhbGlkYXRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5JZiB5b3UgaGF2ZSBzZWxlY3RlZCBSZXF1aXJlIG9yIFN1Z2dlc3QgV1MtSSBDb21wbGlhbmNlIG9uIHRoZQotV1MtSSBDb21wbGlhbmNlIHByZWZlcmVuY2UgcGFnZSwgdGhlIHZhbGlkYXRpb24gYWxzbyBjaGVja3MgV1MtSSBjb21wbGlhbmNlLgotSWYgeW91IGhhdmUgc2VsZWN0ZWQgSWdub3JlIFdTLUkgQ29tcGxpYW5jZSB0aGUgdmFsaWRhdG9yIHdpbGwgb25seSBjaGVjawotdGhlIHZhbGlkaXR5IG9mIHRoZSBXU0RMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIFdTLUkgY29tcGxpYW5jZQotbGV2ZWxzLCByZWZlciB0bzogIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmRpdGEiCi1zY29wZT0icGVlciI+IFNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwveHJlZj4uPC9wPjxwPlRoZSBXU0RMCi1WYWxpZGF0b3IgY29tcGFyZXMgdGhlIFdTREwgZmlsZSBpbiB5b3VyIHByb2plY3QgdG8gdGhlIFczQyAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKSAxLjE8L3hyZWY+IHNwZWNpZmljYXRpb25zLCBhbmQgdGhlIFdTLUkgY29tcGxpYW5jZSBzZXR0aW5ncwotdGhhdCB5b3UgaGF2ZSBzZWxlY3RlZC48L3A+PHA+VG8gdmFsaWRhdGUgeW91ciBXU0RMLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSBXU0RMIGZpbGUgaW4gdGhlICA8Yj5Qcm9qZWN0IE5hdmlnYXRvcjwvYj4gdmlldy48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+UmlnaHQtY2xpY2sgdGhlIFdTREwgZmlsZSwgYW5kIHNlbGVjdCAgPGI+VmFsaWRhdGU8L2I+PC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+QW55IHByb2JsZW1zIGVuY291bnRlcmVkIHdoaWxlIHZhbGlkYXRpbmcgdGhlIGZpbGUgd2lsbCBiZSBzaG93biBpbgotdGhlICA8Yj5UYXNrczwvYj4gdmlldy48cD5XaGVuIHlvdSByZWJ1aWxkIGEgcHJvamVjdCBvciBzYXZlIGEgcmVzb3VyY2UsIHRoZQotV1NETCBWYWxpZGF0b3IgY2FuIGJlIHNldCB0byBydW4gYXV0b21hdGljYWxseS4gVG8gZG8gdGhpcywgZnJvbSB0aGUgV2luZG93Ci1tZW51LCBzZWxlY3QgIDxiPlByZWZlcmVuY2VzPC9iPiA+ICA8Yj5WYWxpZGF0aW9uPC9iPi4gRW5zdXJlIHRoYXQgdGhlIFdTREwKLVZhbGlkYXRvciBjaGVjayBib3ggaW4gdGhlIEJ1aWxkIGNvbHVtbiBpcyBzZWxlY3RlZC48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTLUk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNldHRpbmcgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjliMzVkNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlZhbGlkYXRpbmcgV1NETCBmaWxlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdGhlIFdTREwgdGhhdCBpcyBnZW5lcmF0ZWQgc2hvdWxkIGJlIHZhbGlkLiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBpbXBvcnRlZCBhIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETCB0byBlbnN1cmUgaXQgaXMgdmFsaWQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkIGEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMIHRvIGVuc3VyZSBpdCBpcyB2YWxpZC4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIHZhbGlkYXRpbmcsIFdlYiBzZXJ2aWNlcywgdmFsaWRhdGluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2RsdmFsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NkbHZhbCI+PGEgbmFtZT0idHdzZGx2YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlZhbGlkYXRpbmcgV1NETCBmaWxlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SWYgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkCi10aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkCi1hIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETAotdG8gZW5zdXJlIGl0IGlzIHZhbGlkLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IGhhdmUgc2VsZWN0ZWQgUmVxdWlyZSBvciBTdWdnZXN0IFdTLUkgQ29tcGxpYW5jZSBvbiB0aGUKLVdTLUkgQ29tcGxpYW5jZSBwcmVmZXJlbmNlIHBhZ2UsIHRoZSB2YWxpZGF0aW9uIGFsc28gY2hlY2tzIFdTLUkgY29tcGxpYW5jZS4KLUlmIHlvdSBoYXZlIHNlbGVjdGVkIElnbm9yZSBXUy1JIENvbXBsaWFuY2UgdGhlIHZhbGlkYXRvciB3aWxsIG9ubHkgY2hlY2sKLXRoZSB2YWxpZGl0eSBvZiB0aGUgV1NETC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyBXUy1JIGNvbXBsaWFuY2UKLWxldmVscywgcmVmZXIgdG86ICA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+LjwvcD4KLTxwPlRoZSBXU0RMCi1WYWxpZGF0b3IgY29tcGFyZXMgdGhlIFdTREwgZmlsZSBpbiB5b3VyIHByb2plY3QgdG8gdGhlIFczQyAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgMS4xPC9hPiBzcGVjaWZpY2F0aW9ucywgYW5kIHRoZSBXUy1JIGNvbXBsaWFuY2Ugc2V0dGluZ3MKLXRoYXQgeW91IGhhdmUgc2VsZWN0ZWQuPC9wPgotPHA+VG8gdmFsaWRhdGUgeW91ciBXU0RMLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPlNlbGVjdCBhIFdTREwgZmlsZSBpbiB0aGUgIDxzdHJvbmc+UHJvamVjdCBOYXZpZ2F0b3I8L3N0cm9uZz4gdmlldy48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+UmlnaHQtY2xpY2sgdGhlIFdTREwgZmlsZSwgYW5kIHNlbGVjdCAgPHN0cm9uZz5WYWxpZGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5BbnkgcHJvYmxlbXMgZW5jb3VudGVyZWQgd2hpbGUgdmFsaWRhdGluZyB0aGUgZmlsZSB3aWxsIGJlIHNob3duIGluCi10aGUgIDxzdHJvbmc+VGFza3M8L3N0cm9uZz4gdmlldy48cD5XaGVuIHlvdSByZWJ1aWxkIGEgcHJvamVjdCBvciBzYXZlIGEgcmVzb3VyY2UsIHRoZQotV1NETCBWYWxpZGF0b3IgY2FuIGJlIHNldCB0byBydW4gYXV0b21hdGljYWxseS4gVG8gZG8gdGhpcywgZnJvbSB0aGUgV2luZG93Ci1tZW51LCBzZWxlY3QgIDxzdHJvbmc+UHJlZmVyZW5jZXM8L3N0cm9uZz4gJmd0OyAgPHN0cm9uZz5WYWxpZGF0aW9uPC9zdHJvbmc+LiBFbnN1cmUgdGhhdCB0aGUgV1NETAotVmFsaWRhdG9yIGNoZWNrIGJveCBpbiB0aGUgQnVpbGQgY29sdW1uIGlzIHNlbGVjdGVkLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIj5TZXR0aW5nIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NmM4YTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0d3NpdmFsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5WYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5BcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzCi1jcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlCi1wcm9kdWNlcyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0d3NpdmFsfDF8V1MtSXZhbGlkYXRpbmciIHN0YXR1cz0idW5jaGFuZ2VkIj5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5pbnRlcm9wZXJhYmlsaXR5PGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtIGtleXJlZj0idHdzaXZhbHwyfFdlYnNlcnZpY2VzdmFsaWRhdGluZ1dTLUljb21wbGlhbmNlaW50ZXJvcGVyYWJpbGl0eXZhbGlkYXRpbmciCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT52YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZTxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+dmFsaWRhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtCi0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPiBQcmVyZXF1aXNpdGVzOiBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIHZhbGlkYXRpb24gdG9vbCB0byBlbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsIHlvdSBtdXN0IGhhdmUgY29tcGxldGVkIHRoZQotZm9sbG93aW5nIHN0ZXBzOjx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR3c2RsdmFsLmRpdGEiPlZhbGlkYXRlIHRoZSBXU0RMIHRoYXQgaXMgcHJvZHVjZWQuPC94cmVmPiA8L2xpPgotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0bW9uaXRvci5kaXRhIj5TZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yLjwveHJlZj4gRW5zdXJlIHRoYXQKLXlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRyYWZmaWMgaXMgZGlyZWN0ZWQgdGhyb3VnaCB0aGUgVENQL0lQCi1Nb25pdG9yLjwvbGk+Ci08L3VsPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+VG8gdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbnZva2UgYSBtZXRob2QgaW4geW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdG8gZ2VuZXJhdGUKLXRyYWZmaWMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWFnZSBhbHQ9IlZhbGlkYXRlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIj4KLTwvaW1hZ2U+IGljb24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kCi1zcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD4gVGhpcyBsb2cgZmlsZSB3aWxsIHNob3cgd2hldGhlciBvciBub3QgbWVzc2FnZXMgc2VudCB0byBhbmQgZnJvbQoteW91ciBXZWIgc2VydmljZSBhcmUgV1MtSSBjb21wbGlhbnQsIGFuZCBsaXN0IGFueSBub24tY29tcGxpYW50IGVsZW1lbnRzLgotWW91IGNhbiBvcGVuIHRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMmEwYzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQXMgd2VsbCBhcyBzZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZHVyaW5nIFdlYiBzZXJ2aWNlcyBjcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlIHByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzIGNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UgcHJvZHVjZXMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBpbnRlcm9wZXJhYmlsaXR5LCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBpbnRlcm9wZXJhYmlsaXR5LCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHdzaXZhbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2l2YWwiPjxhIG5hbWU9InR3c2l2YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFzIHdlbGwgYXMgc2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGR1cmluZyBXZWIgc2VydmljZXMKLWNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UKLXByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+IFByZXJlcXVpc2l0ZXM6IEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdmFsaWRhdGlvbiB0b29sIHRvIGVuc3VyZSB0aGF0Ci15b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwgeW91IG11c3QgaGF2ZSBjb21wbGV0ZWQgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0d3NkbHZhbC5odG1sIj5WYWxpZGF0ZSB0aGUgV1NETCB0aGF0IGlzIHByb2R1Y2VkLjwvYT4gPC9saT4KLQotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRtb25pdG9yLmh0bWwiPlNldCB1cCB0aGUgVENQL0lQIE1vbml0b3IuPC9hPiBFbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdHJhZmZpYyBpcyBkaXJlY3RlZCB0aHJvdWdoIHRoZSBUQ1AvSVAKLU1vbml0b3IuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyB2YWxpZGF0ZSB5b3VyIFdlYiBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW52b2tlIGEgbWV0aG9kIGluIHlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRvIGdlbmVyYXRlCi10cmFmZmljIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VG8gZW5zdXJlIHRoYXQgeW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsCi15b3UgY2FuIGdlbmVyYXRlIGEgbG9nIGZpbGUgYnkgY2xpY2tpbmcgdGhlICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiIGFsdD0iVmFsaWRhdGUgaWNvbiIgLz4gaWNvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdCBhIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBhbmQKLXNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj4gVGhpcyBsb2cgZmlsZSB3aWxsIHNob3cgd2hldGhlciBvciBub3QgbWVzc2FnZXMgc2VudCB0byBhbmQgZnJvbQoteW91ciBXZWIgc2VydmljZSBhcmUgV1MtSSBjb21wbGlhbnQsIGFuZCBsaXN0IGFueSBub24tY29tcGxpYW50IGVsZW1lbnRzLgotWW91IGNhbiBvcGVuIHRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V1MtSTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmRpdGEiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTgyYzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIiAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3N3c2l0ZXN0IgotaWQ9Indzd3NpdGVzdCIgdGl0bGU9Indzd3NpdGVzdCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHdzZGx2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1NETCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bW9uaXRvci5kaXRhIiBuYXZ0aXRsZT0iVGVzdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgVENQL0lQIE1vbml0b3IiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NpdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSBvZiBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMiPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTAyMGFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzd3NpdGVzdCIgbGFiZWw9Indzd3NpdGVzdCIgdG9waWM9InRhc2tzL3R3c2RsdmFsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIiBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCIvPgotPC90b2M+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVmZmE3OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0NDgwYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5YmUzMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgQ29yZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgU2VydmljZXMgY29yZS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MDMyNDYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMi4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4wLjQucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5sb2c0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjIuMTUucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS53c2lsNGoiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcudWRkaTRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmRpc2NvdmVyeSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnJwYyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnNvYXAiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4yLjAucXVhbGlmaWVyIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLmF4aXMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4Lm1haWwiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJqYXZheC5hY3RpdmF0aW9uIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmFiZmI0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4MWQ0Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08UD5KdW5lLCAyMDA4PC9QPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTBkYTg1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBDb3JlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZDUxMmQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzOWQwZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXBsdWdpbk5hbWU9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgQ29yZSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0OWU5Zi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9XAotZXBsLXYxMC5odG1sLFwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLWxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYTk0ZDUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdTIENvcmUgRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIFdTVCBXUyBjb3JlLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5KdW5lIDA2LCAyMDA3PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODFkNDYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotPFA+SnVuZSwgMjAwODwvUD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08aDM+U291cmNlIENvZGU8L2gzPgotPHA+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHNvdXJjZSBjb2RlIHppcCBmaWxlcyAoJnF1b3Q7U291cmNlIFppcHMmcXVvdDspIHRoYXQgY29ycmVzcG9uZCB0byBiaW5hcnkgY29udGVudCBpbiBvdGhlciBwbHVnLWlucy4gVGhlc2UgU291cmNlIFppcHMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlCi1hZ3JlZW1lbnRzIGFuZC9vciBub3RpY2VzLiBEZXRhaWxzIGFib3V0IHRoZXNlIGxpY2Vuc2UgYWdyZWVtZW50cyBhbmQgbm90aWNlcyBhcmUgY29udGFpbmVkIGluICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgZmlsZXMgKCZxdW90O0Fib3V0cyZxdW90OykgbG9jYXRlZCBpbiBzdWItZGlyZWN0b3JpZXMgaW4gdGhlCi1zcmMvIGRpcmVjdG9yeSBvZiB0aGlzIHBsdWctaW4uIFN1Y2ggQWJvdXRzIGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgU291cmNlIFppcHMgaW4gdGhhdCBkaXJlY3RvcnksIG5vdCB0aGUgRVBMLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZmI3MzUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncw0KLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMNCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpDQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLg0KLQ0KLTA9QGJ1aWxkQA0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwZGE4NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgQ29yZVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRWNsaXBzZSBjb250cmlidXRvcnMgYW5kIG90aGVycyAyMDA1LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWQ1MTJkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzlkMGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wbHVnaW5OYW1lPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIENvcmUgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2NjcxZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYnVpbGQueG1sCi1mZWF0dXJlcwotcGx1Z2lucwotb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlXzEuMC4wLmJpbi5kaXN0LnppcApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2ViZWU3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNmY4MGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQotZ2VuZXJhdGUuZmVhdHVyZUBvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS5zb3VyY2U9b3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUsIGZlYXR1cmVAb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS5zb3VyY2UKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzA1YzI2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFBsdWctaW4gRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIHRoZSBXU1QgV2ViIHNlcnZpY2VzIHRvb2xzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA1NTg4Ny4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4yLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS5zb3VyY2UiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmFwaS5kb2MiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5kb2MuaXN2IgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkNTZlNC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlXzEuMC4wLmJpbi5kaXN0LnppcApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FlMjM1NC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYjMzYWQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MThlNjhhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgVGVzdHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIHNlcnZpY2VzIHRlc3RzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MWM1ZDQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuNDAxLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwM2E4YjAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3Njk0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MDBlMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFVJCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V2ViIFNlcnZpY2VzIFVJIHRvb2xzLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGQ0NDJkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4yLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sX3VpLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODFkNDYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPGgzPlNvdXJjZSBDb2RlPC9oMz4KLTxwPlRoaXMgcGx1Zy1pbiBjb250YWlucyBzb3VyY2UgY29kZSB6aXAgZmlsZXMgKCZxdW90O1NvdXJjZSBaaXBzJnF1b3Q7KSB0aGF0IGNvcnJlc3BvbmQgdG8gYmluYXJ5IGNvbnRlbnQgaW4gb3RoZXIgcGx1Zy1pbnMuIFRoZXNlIFNvdXJjZSBaaXBzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZQotYWdyZWVtZW50cyBhbmQvb3Igbm90aWNlcy4gRGV0YWlscyBhYm91dCB0aGVzZSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiAmcXVvdDthYm91dC5odG1sJnF1b3Q7IGZpbGVzICgmcXVvdDtBYm91dHMmcXVvdDspIGxvY2F0ZWQgaW4gc3ViLWRpcmVjdG9yaWVzIGluIHRoZQotc3JjLyBkaXJlY3Rvcnkgb2YgdGhpcyBwbHVnLWluLiBTdWNoIEFib3V0cyBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNvdXJjZSBaaXBzIGluIHRoYXQgZGlyZWN0b3J5LCBub3QgdGhlIEVQTC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM5Nzg3YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIFVJXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTY1NDUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotcGx1Z2luTmFtZT1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBVSSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2MyMjkyLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9XAotZXBsLXYxMC5odG1sLFwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLWxpY2Vuc2UuaHRtbAotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUuc291cmNlID0gb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmFkMjkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTUzMjIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV1MgVUkgRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIFdTVCBXUyBVSS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+SnVuZSAwNiwgMjAwNzwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+Ci0gICAKLTxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKLSAgIAotPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAotICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLSAgIAotPHVsPgotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0JPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0JPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPiAgIAotIAotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLQk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0JCQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0JPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci0KLTxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCi1jb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KLQotPGgzPkNyeXB0b2dyYXBoeTwvaDM+Ci0KLTxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KLSAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAotICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+Ci0gICAKLTxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODFkNDYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPGgzPlNvdXJjZSBDb2RlPC9oMz4KLTxwPlRoaXMgcGx1Zy1pbiBjb250YWlucyBzb3VyY2UgY29kZSB6aXAgZmlsZXMgKCZxdW90O1NvdXJjZSBaaXBzJnF1b3Q7KSB0aGF0IGNvcnJlc3BvbmQgdG8gYmluYXJ5IGNvbnRlbnQgaW4gb3RoZXIgcGx1Zy1pbnMuIFRoZXNlIFNvdXJjZSBaaXBzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZQotYWdyZWVtZW50cyBhbmQvb3Igbm90aWNlcy4gRGV0YWlscyBhYm91dCB0aGVzZSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiAmcXVvdDthYm91dC5odG1sJnF1b3Q7IGZpbGVzICgmcXVvdDtBYm91dHMmcXVvdDspIGxvY2F0ZWQgaW4gc3ViLWRpcmVjdG9yaWVzIGluIHRoZQotc3JjLyBkaXJlY3Rvcnkgb2YgdGhpcyBwbHVnLWluLiBTdWNoIEFib3V0cyBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNvdXJjZSBaaXBzIGluIHRoYXQgZGlyZWN0b3J5LCBub3QgdGhlIEVQTC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZmI3MzUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MNCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzDQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQ0KLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4NCi0NCi0wPUBidWlsZEANCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM5Nzg3YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIFVJXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTY1NDUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotcGx1Z2luTmFtZT1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBVSSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZWZmNTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmVfMS4wLjAuamFyCi1vcmcuZWNsaXBzZS53c3QueG1sX3VzZXJkb2MuZmVhdHVyZV8xLjAuMC5qYXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDU2NzVlLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3Njk0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhNTg1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgVXNlciBEb2N1bWVudGF0aW9uCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V1NUIFdlYiBzZXJ2aWNlcyB1c2VyIGRvY3VtZW50YXRpb24KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWI1YzcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4xLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9ImxpY2Vuc2UuaHRtbCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDQ1OTguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIwNTBjOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUzODZmNy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIERlYyAxNyAxNzozNjo1OSBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjUwMjYwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlhYzJlYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NETCAxLjUgRmVhdHVyZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTREwgMS41IEZlYXR1cmUKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSwgMjAwOFxuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzhhZGM3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjUuMy5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgaW1hZ2U9ImVjbGlwc2VfdXBkYXRlXzEyMC5qcGciPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJqYXZheC53c2RsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuNS4xLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWJmYjQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyODk4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc2M2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJlN2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZGIxMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyODozMyBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzcwNDAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjM5IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDczMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0LmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmVhYzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdC5qYXIKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3QuamFyCi1vdXRwdXQudGVzdC5qYXIgPSBiaW4vCi1zb3VyY2UudGVzdC5qYXIgPSB0ZXN0cy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VQcm94eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjdhNDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBcmVhU2VydmljZVByb3h5IGltcGxlbWVudHMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgewotICBwcml2YXRlIFN0cmluZyBfZW5kcG9pbnQgPSBudWxsOwotICBwcml2YXRlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGFyZWFTZXJ2aWNlX1BvcnRUeXBlID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBBcmVhU2VydmljZVByb3h5KCkgewotICAgIF9pbml0QXJlYVNlcnZpY2VQcm94eSgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgX2luaXRBcmVhU2VydmljZVByb3h5KCkgewotICAgIHRyeSB7Ci0gICAgICBhcmVhU2VydmljZV9Qb3J0VHlwZSA9IChuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoKSkuZ2V0QXJlYVNlcnZpY2VTT0FQKCk7Ci0gICAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgIT0gbnVsbCkgewotICAgICAgICBpZiAoX2VuZHBvaW50ICE9IG51bGwpCi0gICAgICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpYXJlYVNlcnZpY2VfUG9ydFR5cGUpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgX2VuZHBvaW50ID0gKFN0cmluZykoKGphdmF4LnhtbC5ycGMuU3R1YilhcmVhU2VydmljZV9Qb3J0VHlwZSkuX2dldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gc2VydmljZUV4Y2VwdGlvbikge30KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpIHsKLSAgICByZXR1cm4gX2VuZHBvaW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpIHsKLSAgICBfZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgICgoamF2YXgueG1sLnJwYy5TdHViKWFyZWFTZXJ2aWNlX1BvcnRUeXBlKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlX1BvcnRUeXBlKCkgewotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSA9PSBudWxsKQotICAgICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gICAgcmV0dXJuIGFyZWFTZXJ2aWNlX1BvcnRUeXBlOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgY2FsY3VsYXRlUmVjdEFyZWEob3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucyBwYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uewotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSA9PSBudWxsKQotICAgICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gICAgcmV0dXJuIGFyZWFTZXJ2aWNlX1BvcnRUeXBlLmNhbGN1bGF0ZVJlY3RBcmVhKHBhcmFtZXRlcnMpOwotICB9Ci0gIAotICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlU09BUFN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlYjkyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBcmVhU2VydmljZVNPQVBTdHViLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VTT0FQU3R1YiBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YiBpbXBsZW1lbnRzIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIHsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyQ2xhc3NlcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlclFOYW1lcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlckZhY3RvcmllcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZERlc2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLQotICAgIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYyBbXSBfb3BlcmF0aW9uczsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIF9vcGVyYXRpb25zID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjWzFdOwotICAgICAgICBfaW5pdE9wZXJhdGlvbkRlc2MxKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBfaW5pdE9wZXJhdGlvbkRlc2MxKCl7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIG9wZXI7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjIHBhcmFtOwotICAgICAgICBvcGVyID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjKCk7Ci0gICAgICAgIG9wZXIuc2V0TmFtZSgiQ2FsY3VsYXRlUmVjdEFyZWEiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAicGFyYW1ldGVycyIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpLCBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zLmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgImFyZWEiKSk7Ci0gICAgICAgIG9wZXIuc2V0U3R5bGUob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5TdHlsZS5ET0NVTUVOVCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1swXSA9IG9wZXI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VTT0FQU3R1YigpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMobnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoamF2YS5uZXQuVVJMIGVuZHBvaW50VVJMLCBqYXZheC54bWwucnBjLlNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhzZXJ2aWNlKTsKLSAgICAgICAgIHN1cGVyLmNhY2hlZEVuZHBvaW50ID0gZW5kcG9pbnRVUkw7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBzZXJ2aWNlOwotICAgICAgICB9Ci0gICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKXN1cGVyLnNlcnZpY2UpLnNldFR5cGVNYXBwaW5nVmVyc2lvbigiMS4yIik7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgY2xzOwotICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZTsKLSAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcU5hbWUyOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGJlYW5zZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhblNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGJlYW5kZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhbkRlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZW51bXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5FbnVtU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZW51bWRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5FbnVtRGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBhcnJheXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5BcnJheVNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGFycmF5ZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkFycmF5RGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzaW1wbGVzZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuU2ltcGxlU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLlNpbXBsZURlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlbGlzdHNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVMaXN0U2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlbGlzdGRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVMaXN0RGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIHFOYW1lID0gbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgY2FjaGVkU2VyUU5hbWVzLmFkZChxTmFtZSk7Ci0gICAgICAgICAgICBjbHMgPSBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zLmNsYXNzOwotICAgICAgICAgICAgY2FjaGVkU2VyQ2xhc3Nlcy5hZGQoY2xzKTsKLSAgICAgICAgICAgIGNhY2hlZFNlckZhY3Rvcmllcy5hZGQoYmVhbnNmKTsKLSAgICAgICAgICAgIGNhY2hlZERlc2VyRmFjdG9yaWVzLmFkZChiZWFuZGYpOwotCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBjcmVhdGVDYWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBzdXBlci5fY3JlYXRlQ2FsbCgpOwotICAgICAgICAgICAgaWYgKHN1cGVyLm1haW50YWluU2Vzc2lvblNldCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldE1haW50YWluU2Vzc2lvbihzdXBlci5tYWludGFpblNlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFVzZXJuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRVc2VybmFtZShzdXBlci5jYWNoZWRVc2VybmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBhc3N3b3JkKHN1cGVyLmNhY2hlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHN1cGVyLmNhY2hlZEVuZHBvaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRUaW1lb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUaW1lb3V0KHN1cGVyLmNhY2hlZFRpbWVvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBvcnROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQb3J0TmFtZShzdXBlci5jYWNoZWRQb3J0TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24ga2V5cyA9IHN1cGVyLmNhY2hlZFByb3BlcnRpZXMua2V5cygpOwotICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSA9IChqYXZhLmxhbmcuU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkoa2V5LCBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFsbCB0aGUgdHlwZSBtYXBwaW5nIGluZm9ybWF0aW9uIGlzIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGNhbGwgaXMgbWFkZS4KLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIG1hcHBpbmcgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbgotICAgICAgICAgICAgLy8gdGhlIFR5cGVNYXBwaW5nUmVnaXN0cnkgb2YgdGhlIHNlcnZpY2UsIHdoaWNoCi0gICAgICAgICAgICAvLyBpcyB0aGUgcmVhc29uIHdoeSByZWdpc3RyYXRpb24gaXMgb25seSBuZWVkZWQgZm9yIHRoZSBmaXJzdCBjYWxsLgotICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2FsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG11c3Qgc2V0IGVuY29kaW5nIHN0eWxlIGJlZm9yZSByZWdpc3RlcmluZyBzZXJpYWxpemVycwotICAgICAgICAgICAgICAgICAgICBfY2FsbC5zZXRFbmNvZGluZ1N0eWxlKG51bGwpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhY2hlZFNlckZhY3Rvcmllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGNscyA9IChqYXZhLmxhbmcuQ2xhc3MpIGNhY2hlZFNlckNsYXNzZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSBjYWNoZWRTZXJRTmFtZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCB4ID0gY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2YgPSAoamF2YS5sYW5nLkNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZGYgPSAoamF2YS5sYW5nLkNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsLnJlZ2lzdGVyVHlwZU1hcHBpbmcoY2xzLCBxTmFtZSwgc2YsIGRmLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgamF2YXgueG1sLnJwYy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSBzZiA9IChvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuU2VyaWFsaXplckZhY3RvcnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRTZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXJGYWN0b3J5IGRmID0gKG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXJGYWN0b3J5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsLnJlZ2lzdGVyVHlwZU1hcHBpbmcoY2xzLCBxTmFtZSwgc2YsIGRmLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gX2NhbGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgX3QpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0KCJGYWlsdXJlIHRyeWluZyB0byBnZXQgdGhlIENhbGwgb2JqZWN0IiwgX3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGNhbGN1bGF0ZVJlY3RBcmVhKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMgcGFyYW1ldGVycykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLk5vRW5kUG9pbnRFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBjcmVhdGVDYWxsKCk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbihfb3BlcmF0aW9uc1swXSk7Ci0gICAgICAgIF9jYWxsLnNldFVzZVNPQVBBY3Rpb24odHJ1ZSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBBY3Rpb25VUkkoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS9OZXdPcGVyYXRpb24iKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoIiIsICJDYWxjdWxhdGVSZWN0QXJlYSIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtwYXJhbWV0ZXJzfSk7Ci0KLSAgICAgICAgaWYgKF9yZXNwIGluc3RhbmNlb2YgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKV9yZXNwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZXh0cmFjdEF0dGFjaG1lbnRzKF9jYWxsKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBfcmVzcCkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBfZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBvcmcuYXBhY2hlLmF4aXMudXRpbHMuSmF2YVV0aWxzLmNvbnZlcnQoX3Jlc3AsIGZsb2F0LmNsYXNzKSkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gIH0gY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgYXhpc0ZhdWx0RXhjZXB0aW9uKSB7Ci0gIHRocm93IGF4aXNGYXVsdEV4Y2VwdGlvbjsKLX0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9Qb3J0VHlwZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjVmNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQXJlYVNlcnZpY2VfUG9ydFR5cGUuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQXJlYVNlcnZpY2VfUG9ydFR5cGUgZXh0ZW5kcyBqYXZhLnJtaS5SZW1vdGUgewotICAgIHB1YmxpYyBmbG9hdCBjYWxjdWxhdGVSZWN0QXJlYShvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zIHBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwOTMyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQXJlYVNlcnZpY2VfU2VydmljZSBleHRlbmRzIGphdmF4LnhtbC5ycGMuU2VydmljZSB7Ci0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQQWRkcmVzcygpOwotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUCgpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VTT0FQKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGZjMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IgZXh0ZW5kcyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UgaW1wbGVtZW50cyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9TZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcigpIHsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcihvcmcuYXBhY2hlLmF4aXMuRW5naW5lQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgc3VwZXIoY29uZmlnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoamF2YS5sYW5nLlN0cmluZyB3c2RsTG9jLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHNOYW1lKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIod3NkbExvYywgc05hbWUpOwotICAgIH0KLQotICAgIC8vIFVzZSB0byBnZXQgYSBwcm94eSBjbGFzcyBmb3IgQXJlYVNlcnZpY2VTT0FQCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9BcmVhUHJvai9zZXJ2aWNlcy9BcmVhU2VydmljZVNPQVAiOwotCi0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQQWRkcmVzcygpIHsKLSAgICAgICAgcmV0dXJuIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzOwotICAgIH0KLQotICAgIC8vIFRoZSBXU0REIHNlcnZpY2UgbmFtZSBkZWZhdWx0cyB0byB0aGUgcG9ydCBuYW1lLgotICAgIHByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUgPSAiQXJlYVNlcnZpY2VTT0FQIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB7Ci0gICAgICAgIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUCgpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgIGphdmEubmV0LlVSTCBlbmRwb2ludDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGVuZHBvaW50ID0gbmV3IGphdmEubmV0LlVSTChBcmVhU2VydmljZVNPQVBfYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRBcmVhU2VydmljZVNPQVAoZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZVNPQVAoamF2YS5uZXQuVVJMIHBvcnRBZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIgX3N0dWIgPSBuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1Yihwb3J0QWRkcmVzcywgdGhpcyk7Ci0gICAgICAgICAgICBfc3R1Yi5zZXRQb3J0TmFtZShnZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgZSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBcmVhU2VydmljZVNPQVBFbmRwb2ludEFkZHJlc3MoamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB7Ci0gICAgICAgIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzID0gYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSkgewotICAgICAgICAgICAgICAgIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIgX3N0dWIgPSBuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1YihuZXcgamF2YS5uZXQuVVJMKEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgX3N0dWIuc2V0UG9ydE5hbWUoZ2V0QXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKHQpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oIlRoZXJlIGlzIG5vIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2U6ICAiICsgKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSA9PSBudWxsID8gIm51bGwiIDogc2VydmljZUVuZHBvaW50SW50ZXJmYWNlLmdldE5hbWUoKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcG9ydE5hbWUsIENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChwb3J0TmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGphdmEubGFuZy5TdHJpbmcgaW5wdXRQb3J0TmFtZSA9IHBvcnROYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICBpZiAoIkFyZWFTZXJ2aWNlU09BUCIuZXF1YWxzKGlucHV0UG9ydE5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0QXJlYVNlcnZpY2VTT0FQKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgamF2YS5ybWkuUmVtb3RlIF9zdHViID0gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICAgICAgKChvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlN0dWIpIF9zdHViKS5zZXRQb3J0TmFtZShwb3J0TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBnZXRTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgIkFyZWFTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuSGFzaFNldCBwb3J0cyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIGdldFBvcnRzKCkgewotICAgICAgICBpZiAocG9ydHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcG9ydHMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKLSAgICAgICAgICAgIHBvcnRzLmFkZChuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJBcmVhU2VydmljZVNPQVAiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotaWYgKCJBcmVhU2VydmljZVNPQVAiLmVxdWFscyhwb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHNldEFyZWFTZXJ2aWNlU09BUEVuZHBvaW50QWRkcmVzcyhhZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAoteyAvLyBVbmtub3duIFBvcnQgTmFtZQotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiIENhbm5vdCBzZXQgRW5kcG9pbnQgQWRkcmVzcyBmb3IgVW5rbm93biBQb3J0IiArIHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzZXRFbmRwb2ludEFkZHJlc3MocG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCksIGFkZHJlc3MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9EaW1lbnNpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMTBmOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogRGltZW5zaW9ucy5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGNsYXNzIERpbWVuc2lvbnMgIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIHByaXZhdGUgZmxvYXQgd2lkdGg7Ci0gICAgcHJpdmF0ZSBmbG9hdCBoZWlnaHQ7Ci0KLSAgICBwdWJsaWMgRGltZW5zaW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGltZW5zaW9ucygKLSAgICAgICAgICAgZmxvYXQgd2lkdGgsCi0gICAgICAgICAgIGZsb2F0IGhlaWdodCkgewotICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgd2lkdGggdmFsdWUgZm9yIHRoaXMgRGltZW5zaW9ucy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHdpZHRoCi0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldFdpZHRoKCkgewotICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB3aWR0aCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEBwYXJhbSB3aWR0aAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7Ci0gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhlaWdodCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEByZXR1cm4gaGVpZ2h0Ci0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldEhlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuIGhlaWdodDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhlaWdodCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEBwYXJhbSBoZWlnaHQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRIZWlnaHQoZmxvYXQgaGVpZ2h0KSB7Ci0gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotICAgIHByaXZhdGUgamF2YS5sYW5nLk9iamVjdCBfX2VxdWFsc0NhbGMgPSBudWxsOwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGltZW5zaW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgRGltZW5zaW9ucyBvdGhlciA9IChEaW1lbnNpb25zKSBvYmo7Ci0gICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoX19lcXVhbHNDYWxjICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoX19lcXVhbHNDYWxjID09IG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgX19lcXVhbHNDYWxjID0gb2JqOwotICAgICAgICBib29sZWFuIF9lcXVhbHM7Ci0gICAgICAgIF9lcXVhbHMgPSB0cnVlICYmIAotICAgICAgICAgICAgdGhpcy53aWR0aCA9PSBvdGhlci5nZXRXaWR0aCgpICYmCi0gICAgICAgICAgICB0aGlzLmhlaWdodCA9PSBvdGhlci5nZXRIZWlnaHQoKTsKLSAgICAgICAgX19lcXVhbHNDYWxjID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIF9lcXVhbHM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIF9faGFzaENvZGVDYWxjID0gZmFsc2U7Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIGlmIChfX2hhc2hDb2RlQ2FsYykgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgX19oYXNoQ29kZUNhbGMgPSB0cnVlOwotICAgICAgICBpbnQgX2hhc2hDb2RlID0gMTsKLSAgICAgICAgX2hhc2hDb2RlICs9IG5ldyBGbG9hdChnZXRXaWR0aCgpKS5oYXNoQ29kZSgpOwotICAgICAgICBfaGFzaENvZGUgKz0gbmV3IEZsb2F0KGdldEhlaWdodCgpKS5oYXNoQ29kZSgpOwotICAgICAgICBfX2hhc2hDb2RlQ2FsYyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gX2hhc2hDb2RlOwotICAgIH0KLQotICAgIC8vIFR5cGUgbWV0YWRhdGEKLSAgICBwcml2YXRlIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uVHlwZURlc2MgdHlwZURlc2MgPQotICAgICAgICBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlR5cGVEZXNjKERpbWVuc2lvbnMuY2xhc3MsIHRydWUpOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgdHlwZURlc2Muc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJkaW1lbnNpb25zIikpOwotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uRWxlbWVudERlc2MgZWxlbUZpZWxkID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5FbGVtZW50RGVzYygpOwotICAgICAgICBlbGVtRmllbGQuc2V0RmllbGROYW1lKCJ3aWR0aCIpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgIndpZHRoIikpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXROaWxsYWJsZShmYWxzZSk7Ci0gICAgICAgIHR5cGVEZXNjLmFkZEZpZWxkRGVzYyhlbGVtRmllbGQpOwotICAgICAgICBlbGVtRmllbGQgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLkVsZW1lbnREZXNjKCk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRGaWVsZE5hbWUoImhlaWdodCIpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgImhlaWdodCIpKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldFhtbFR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBlbGVtRmllbGQuc2V0TmlsbGFibGUoZmFsc2UpOwotICAgICAgICB0eXBlRGVzYy5hZGRGaWVsZERlc2MoZWxlbUZpZWxkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdHlwZSBtZXRhZGF0YSBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5UeXBlRGVzYyBnZXRUeXBlRGVzYygpIHsKLSAgICAgICAgcmV0dXJuIHR5cGVEZXNjOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBDdXN0b20gU2VyaWFsaXplcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLlNlcmlhbGl6ZXIgZ2V0U2VyaWFsaXplcigKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBtZWNoVHlwZSwgCi0gICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBfamF2YVR5cGUsICAKLSAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBfeG1sVHlwZSkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgICAgbmV3ICBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5TZXJpYWxpemVyKAotICAgICAgICAgICAgX2phdmFUeXBlLCBfeG1sVHlwZSwgdHlwZURlc2MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBDdXN0b20gRGVzZXJpYWxpemVyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuRGVzZXJpYWxpemVyIGdldERlc2VyaWFsaXplcigKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBtZWNoVHlwZSwgCi0gICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBfamF2YVR5cGUsICAKLSAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBfeG1sVHlwZSkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgICAgbmV3ICBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5EZXNlcmlhbGl6ZXIoCi0gICAgICAgICAgICBfamF2YVR5cGUsIF94bWxUeXBlLCB0eXBlRGVzYyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhN2Q0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlci5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29udmVydGVyIGV4dGVuZHMgamF2YS5ybWkuUmVtb3RlIHsKLSAgICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIGZsb2F0IGZhcmVuaGVpdFRvQ2Vsc2l1cyhmbG9hdCBmYXJlbmhlaXQpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYTdjNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJQcm94eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclByb3h5IGltcGxlbWVudHMgd3RwLkNvbnZlcnRlciB7Ci0gIHByaXZhdGUgU3RyaW5nIF9lbmRwb2ludCA9IG51bGw7Ci0gIHByaXZhdGUgd3RwLkNvbnZlcnRlciBjb252ZXJ0ZXIgPSBudWxsOwotICAKLSAgcHVibGljIENvbnZlcnRlclByb3h5KCkgewotICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIF9pbml0Q29udmVydGVyUHJveHkoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGNvbnZlcnRlciA9IChuZXcgd3RwLkNvbnZlcnRlclNlcnZpY2VMb2NhdG9yKCkpLmdldENvbnZlcnRlcigpOwotICAgICAgaWYgKGNvbnZlcnRlciAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChfZW5kcG9pbnQgIT0gbnVsbCkKLSAgICAgICAgICAoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgX2VuZHBvaW50ID0gKFN0cmluZykoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9nZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnQoKSB7Ci0gICAgcmV0dXJuIF9lbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Ci0gICAgX2VuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgaWYgKGNvbnZlcnRlciAhPSBudWxsKQotICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpY29udmVydGVyKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKCkgewotICAgIGlmIChjb252ZXJ0ZXIgPT0gbnVsbCkKLSAgICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgICByZXR1cm4gY29udmVydGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb257Ci0gICAgaWYgKGNvbnZlcnRlciA9PSBudWxsKQotICAgICAgX2luaXRDb252ZXJ0ZXJQcm94eSgpOwotICAgIHJldHVybiBjb252ZXJ0ZXIuY2Vsc2l1c1RvRmFyZW5oZWl0KGNlbHNpdXMpOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgZmFyZW5oZWl0VG9DZWxzaXVzKGZsb2F0IGZhcmVuaGVpdCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbnsKLSAgICBpZiAoY29udmVydGVyID09IG51bGwpCi0gICAgICBfaW5pdENvbnZlcnRlclByb3h5KCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlci5mYXJlbmhlaXRUb0NlbHNpdXMoZmFyZW5oZWl0KTsKLSAgfQotICAKLSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRhYWZlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBDb252ZXJ0ZXJTZXJ2aWNlLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGludGVyZmFjZSBDb252ZXJ0ZXJTZXJ2aWNlIGV4dGVuZHMgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHsKLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJBZGRyZXNzKCk7Ci0KLSAgICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uOwotCi0gICAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmNWNkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yIGV4dGVuZHMgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlIGltcGxlbWVudHMgd3RwLkNvbnZlcnRlclNlcnZpY2UgewotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKCkgewotICAgIH0KLQotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKG9yZy5hcGFjaGUuYXhpcy5FbmdpbmVDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBzdXBlcihjb25maWcpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvcihqYXZhLmxhbmcuU3RyaW5nIHdzZGxMb2MsIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgc05hbWUpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzdXBlcih3c2RsTG9jLCBzTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRvIGdldCBhIHByb3h5IGNsYXNzIGZvciBDb252ZXJ0ZXIKLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQ29udmVydGVyX2FkZHJlc3MgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbnZlcnRlclByb2ovc2VydmljZXMvQ29udmVydGVyIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENvbnZlcnRlckFkZHJlc3MoKSB7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXJfYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvLyBUaGUgV1NERCBzZXJ2aWNlIG5hbWUgZGVmYXVsdHMgdG8gdGhlIHBvcnQgbmFtZS4KLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQ29udmVydGVyV1NERFNlcnZpY2VOYW1lID0gIkNvbnZlcnRlciI7Ci0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udmVydGVyV1NERFNlcnZpY2VOYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgewotICAgICAgICBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcigpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgIGphdmEubmV0LlVSTCBlbmRwb2ludDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGVuZHBvaW50ID0gbmV3IGphdmEubmV0LlVSTChDb252ZXJ0ZXJfYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRDb252ZXJ0ZXIoZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcihqYXZhLm5ldC5VUkwgcG9ydEFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgd3RwLkNvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBfc3R1YiA9IG5ldyB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViKHBvcnRBZGRyZXNzLCB0aGlzKTsKLSAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbnZlcnRlckVuZHBvaW50QWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHsKLSAgICAgICAgQ29udmVydGVyX2FkZHJlc3MgPSBhZGRyZXNzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAod3RwLkNvbnZlcnRlci5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkpIHsKLSAgICAgICAgICAgICAgICB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViIF9zdHViID0gbmV3IHd0cC5Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIobmV3IGphdmEubmV0LlVSTChDb252ZXJ0ZXJfYWRkcmVzcyksIHRoaXMpOwotICAgICAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbih0KTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBzdHViIGltcGxlbWVudGF0aW9uIGZvciB0aGUgaW50ZXJmYWNlOiAgIiArIChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UgPT0gbnVsbCA/ICJudWxsIiA6IHNlcnZpY2VFbmRwb2ludEludGVyZmFjZS5nZXROYW1lKCkpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBpZiAocG9ydE5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgfQotICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGlucHV0UG9ydE5hbWUgPSBwb3J0TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgaWYgKCJDb252ZXJ0ZXIiLmVxdWFscyhpbnB1dFBvcnROYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldENvbnZlcnRlcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgIGphdmEucm1pLlJlbW90ZSBfc3R1YiA9IGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViKSBfc3R1Yikuc2V0UG9ydE5hbWUocG9ydE5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgZ2V0U2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJDb252ZXJ0ZXJTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuSGFzaFNldCBwb3J0cyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIGdldFBvcnRzKCkgewotICAgICAgICBpZiAocG9ydHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcG9ydHMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKLSAgICAgICAgICAgIHBvcnRzLmFkZChuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJDb252ZXJ0ZXIiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotaWYgKCJDb252ZXJ0ZXIiLmVxdWFscyhwb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHNldENvbnZlcnRlckVuZHBvaW50QWRkcmVzcyhhZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAoteyAvLyBVbmtub3duIFBvcnQgTmFtZQotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiIENhbm5vdCBzZXQgRW5kcG9pbnQgQWRkcmVzcyBmb3IgVW5rbm93biBQb3J0IiArIHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzZXRFbmRwb2ludEFkZHJlc3MocG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCksIGFkZHJlc3MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTdhYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YiBpbXBsZW1lbnRzIHd0cC5Db252ZXJ0ZXIgewotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJDbGFzc2VzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyUU5hbWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkRGVzZXJGYWN0b3JpZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotCi0gICAgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIFtdIF9vcGVyYXRpb25zOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgX29wZXJhdGlvbnMgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2NbMl07Ci0gICAgICAgIF9pbml0T3BlcmF0aW9uRGVzYzEoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9pbml0T3BlcmF0aW9uRGVzYzEoKXsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2Mgb3BlcjsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MgcGFyYW07Ci0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJjZWxzaXVzVG9GYXJlbmhlaXQiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1cyIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IiksIGZsb2F0LmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImNlbHNpdXNUb0ZhcmVuaGVpdFJldHVybiIpKTsKLSAgICAgICAgb3Blci5zZXRTdHlsZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlN0eWxlLldSQVBQRUQpOwotICAgICAgICBvcGVyLnNldFVzZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlVzZS5MSVRFUkFMKTsKLSAgICAgICAgX29wZXJhdGlvbnNbMF0gPSBvcGVyOwotCi0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJmYXJlbmhlaXRUb0NlbHNpdXMiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0IiksIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjLklOLCBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSwgZmxvYXQuY2xhc3MsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG9wZXIuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5UeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5DbGFzcyhmbG9hdC5jbGFzcyk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuUU5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0VG9DZWxzaXVzUmV0dXJuIikpOwotICAgICAgICBvcGVyLnNldFN0eWxlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuU3R5bGUuV1JBUFBFRCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1sxXSA9IG9wZXI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKCkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKGphdmEubmV0LlVSTCBlbmRwb2ludFVSTCwgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMoc2VydmljZSk7Ci0gICAgICAgICBzdXBlci5jYWNoZWRFbmRwb2ludCA9IGVuZHBvaW50VVJMOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIoamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBzZXJ2aWNlOwotICAgICAgICB9Ci0gICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKXN1cGVyLnNlcnZpY2UpLnNldFR5cGVNYXBwaW5nVmVyc2lvbigiMS4yIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBjcmVhdGVDYWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBzdXBlci5fY3JlYXRlQ2FsbCgpOwotICAgICAgICAgICAgaWYgKHN1cGVyLm1haW50YWluU2Vzc2lvblNldCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldE1haW50YWluU2Vzc2lvbihzdXBlci5tYWludGFpblNlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFVzZXJuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRVc2VybmFtZShzdXBlci5jYWNoZWRVc2VybmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBhc3N3b3JkKHN1cGVyLmNhY2hlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHN1cGVyLmNhY2hlZEVuZHBvaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRUaW1lb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUaW1lb3V0KHN1cGVyLmNhY2hlZFRpbWVvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBvcnROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQb3J0TmFtZShzdXBlci5jYWNoZWRQb3J0TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24ga2V5cyA9IHN1cGVyLmNhY2hlZFByb3BlcnRpZXMua2V5cygpOwotICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSA9IChqYXZhLmxhbmcuU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkoa2V5LCBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBfY2FsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSBfdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQoIkZhaWx1cmUgdHJ5aW5nIHRvIGdldCB0aGUgQ2FsbCBvYmplY3QiLCBfdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5Ob0VuZFBvaW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gY3JlYXRlQ2FsbCgpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb24oX29wZXJhdGlvbnNbMF0pOwotICAgICAgICBfY2FsbC5zZXRVc2VTT0FQQWN0aW9uKHRydWUpOwotICAgICAgICBfY2FsbC5zZXRTT0FQQWN0aW9uVVJJKCIiKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1c1RvRmFyZW5oZWl0IikpOwotCi0gICAgICAgIHNldFJlcXVlc3RIZWFkZXJzKF9jYWxsKTsKLSAgICAgICAgc2V0QXR0YWNobWVudHMoX2NhbGwpOwotIHRyeSB7ICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IF9yZXNwID0gX2NhbGwuaW52b2tlKG5ldyBqYXZhLmxhbmcuT2JqZWN0W10ge25ldyBqYXZhLmxhbmcuRmxvYXQoY2Vsc2l1cyl9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotICAgIHB1YmxpYyBmbG9hdCBmYXJlbmhlaXRUb0NlbHNpdXMoZmxvYXQgZmFyZW5oZWl0KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuTm9FbmRQb2ludEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IGNyZWF0ZUNhbGwoKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uKF9vcGVyYXRpb25zWzFdKTsKLSAgICAgICAgX2NhbGwuc2V0VXNlU09BUEFjdGlvbih0cnVlKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUEFjdGlvblVSSSgiIik7Ci0gICAgICAgIF9jYWxsLnNldEVuY29kaW5nU3R5bGUobnVsbCk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbC5TRU5EX1RZUEVfQVRUUiwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5BeGlzRW5naW5lLlBST1BfRE9NVUxUSVJFRlMsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRTT0FQVmVyc2lvbihvcmcuYXBhY2hlLmF4aXMuc29hcC5TT0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFMpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb25OYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImZhcmVuaGVpdFRvQ2Vsc2l1cyIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtuZXcgamF2YS5sYW5nLkZsb2F0KGZhcmVuaGVpdCl9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWY2YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KU1QgV2ViIFNlcnZpY2VzIEF4aXMgQ29uc3VtcHRpb24gQ29yZSBUZXN0Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3YTYwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdW5pdHRlc3QvTG9jYXRvclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5KYXZhRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5TdGRvdXRQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsLlV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlRmluZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotCi1wdWJsaWMgY2xhc3MgTG9jYXRvclRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUgKCkKLQl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKExvY2F0b3JUZXN0cy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9BeGlzQ2xpZW50TG9jYXRvciAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTiB0ZXN0X0F4aXNDbGllbnRMb2NhdG9yIik7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW10geyJKYXZhMSIsIkphdmEyIiwiSmF2YTMifTsKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCQlmb3IgKGludCB4PTA7IHg8cHJvamVjdE5hbWVzLmxlbmd0aDsgeCsrKQotCQkJewotCQkJCXByb2plY3RzW3hdID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1t4XSk7Ci0JCQl9Ci0JCQlVdGlsLmluaXQoKTsKLQkJCXRyeQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IFV0aWwuY3JlYXRlSmF2YVByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJCQkJVXRpbC5hZGRSZXF1aXJlZEphcnNUb0phdmFQcm9qZWN0KGphdmFQcm9qZWN0KTsKLQkJCQkJVXRpbC5jb3B5RXhhbXBsZXNUb0phdmFQcm9qZWN0KGphdmFQcm9qZWN0LG5ldyBKYXZhRmlsdGVyKCkpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJCXsKLQkJCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCWZhaWwoIkZhaWxlZCB0byBhY2Nlc3Mgb3IgY3JlYXRlIHByZXJlcXVpc2l0ZSBwcm9qZWN0cyIpOwotCQkJfQotCQkJV2ViU2VydmljZUZpbmRlciBmaW5kZXIgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCk7Ci0JCQlTdHJpbmdbXSBjYXRlZ29yeUlkcyA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlJZHMoKTsKLQkJCWludCBuID0gLTE7Ci0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBuZXcgU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCQlmb3IgKGludCBpPTA7IGk8Y2F0ZWdvcnlJZHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXRlZ29yeSBJRCA9IFsiK2NhdGVnb3J5SWRzW2ldKyJdIik7Ci0JCQkJaWYgKGNhdGVnb3J5SWRzW2ldLmVxdWFscygib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiKSkKLQkJCQl7Ci0JCQkJCW4gPSBpOwotCQkJCQlJdGVyYXRvciBpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciw2KTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxwcm9qZWN0cyxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge3Byb2plY3RzWzBdfSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsMik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge3Byb2plY3RzWzFdLHByb2plY3RzWzJdfSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNCk7Ci0JCQkJCUlQcm9qZWN0IG5vU3VjaFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIm5vU3VjaFByb2plY3QiKTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxuZXcgSVByb2plY3RbXSB7bm9TdWNoUHJvamVjdH0sbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDApOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoIkF4aXMgbG9jYXRvciBleHRlbnNpb24gbWlzc2luZy4iLG4gPj0gMCk7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVOREVEIHRlc3RfQXhpc0NsaWVudExvY2F0b3IiKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYXNzZXJ0Rm91bmRDbGllbnRzICggSXRlcmF0b3IgaXRlciwgaW50IHggKQotCXsKLQkJaW50IHAgPSAwOwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJCU9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLQkJCWFzc2VydFRydWUoIkZpbmRlciByZXR1cm5lZCBhICIrb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpKyIgaW5zdGVhZCBvZiBhIFdlYlNlcnZpY2VDbGllbnRJbmZvLiIsb2JqIGluc3RhbmNlb2YgV2ViU2VydmljZUNsaWVudEluZm8pOwotCQkJcCsrOwotCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IChXZWJTZXJ2aWNlQ2xpZW50SW5mbylvYmo7Ci0JCQlTdHJpbmcgcHJveHlDbGFzc1VSTCA9IHdzY0luZm8uZ2V0SW1wbFVSTCgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBeGlzIGNsaWVudCBwcm94eSBjbGFzcyA9IFsiK3Byb3h5Q2xhc3NVUkwrIl0iKTsKLQkJCWlmICh3c2NJbmZvIGluc3RhbmNlb2YgV2ViU2VydmljZUphdmFDbGllbnRJbmZvKQotCQkJewotCQkJCVdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbyB3c2NKSW5mbyA9IChXZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8pd3NjSW5mbzsKLQkJCQlhc3NlcnROb3ROdWxsKCJGb3VuZCBhbiB1bmV4cGVjdGVkIG51bGwgSVR5cGUiLHdzY0pJbmZvLmdldFR5cGUoKSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJBeGlzIGNsaWVudCBwcm94eSBJVHlwZSA9IFsiK3dzY0pJbmZvLmdldFR5cGUoKSsiXSIpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoIkZvdW5kICIrcCsiIHByb3hpZXMgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgIit4KyIuIixwID09IHgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0ZpbHRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNmMwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1wdWJsaWMgaW50ZXJmYWNlIEZpbHRlcgotewotCXB1YmxpYyBib29sZWFuIGFjY2VwdCAoIE9iamVjdCBvYmplY3QgKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2MjA2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9KYXZhRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1wdWJsaWMgY2xhc3MgSmF2YUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQgKCBPYmplY3Qgb2JqZWN0ICkKLQl7Ci0JCXJldHVybiBvYmplY3QudG9TdHJpbmcoKS5lbmRzV2l0aCgiLmphdmEiKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1N0ZG91dFByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODhiMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLQotcHVibGljIGNsYXNzIFN0ZG91dFByb2dyZXNzTW9uaXRvciBleHRlbmRzIE51bGxQcm9ncmVzc01vbml0b3IKLXsKLQotCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUrIiwgIit0b3RhbFdvcmsrIiB1bml0KHMpIHJlbWFpbmluZykuIik7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gRG9uZS4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIituYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIit3b3JrKyIgdW5pdChzKSBjb21wbGV0ZWQuIik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzkwMjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYxMjExICAgMTYyMjg4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3b3Jrc3BhY2UgcGF0aHMgd2l0aCBzcGFjZXMgYnJlYWsgSmF2YSBFZGl0b3IgTGF1bmNoCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBVdGlsCi17Ci0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhpcyB0ZXN0c3VpdGUuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGluaXQgKCkKLQl7Ci0JCVN0cmluZyB3b3Jrc3BhY2VPU1BhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJXb3Jrc3BhY2UgPSBbIit3b3Jrc3BhY2VPU1BhdGgrIl0iKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlIGEgSmF2YSBwcm9qZWN0IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0byBjcmVhdGUuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUphdmFQcm9qZWN0IGNyZWF0ZUphdmFQcm9qZWN0ICggU3RyaW5nIG5hbWUgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSByb290LmdldFByb2plY3QobmFtZSk7Ci0JCWlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBwcm9qZWN0IFsiK25hbWUrIl0iKTsKLQkJCXByb2plY3QuY3JlYXRlKG51bGwpOwotCQkJcHJvamVjdC5vcGVuKG51bGwpOwotCSAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOwotCSAgICAgICAgZGVzYy5zZXROYXR1cmVJZHMobmV3IFN0cmluZ1tdIHtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkgICAgICAgIElDb21tYW5kIGNtZCA9IGRlc2MubmV3Q29tbWFuZCgpOwotCSAgICAgICAgY21kLnNldEJ1aWxkZXJOYW1lKEphdmFDb3JlLkJVSUxERVJfSUQpOwotCSAgICAgICAgZGVzYy5zZXRCdWlsZFNwZWMobmV3IElDb21tYW5kW10ge2NtZH0pOwotCSAgICAgICAgcHJvamVjdC5zZXREZXNjcmlwdGlvbihkZXNjLG51bGwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgSmF2YSBwcm9qZWN0IFsiK25hbWUrIl0iKTsKLQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQlqYXZhUHJvamVjdC5vcGVuKG51bGwpOwotCQlyZXR1cm4gamF2YVByb2plY3Q7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgQXhpcyBqYXJzIGFuZCB0aGUgSlJFIHRvIHRoZSBjbGFzc3BhdGggb2YgdGhlIGdpdmVuIHByb2plY3QuCi0JICogQHBhcmFtIGphdmFQcm9qZWN0IFRoZSBwcm9qZWN0IHRvIGFkZCBheGlzLmphciB0by4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgamFyIGNvdWxkIG5vdCBiZSBhZGRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkUmVxdWlyZWRKYXJzVG9KYXZhUHJvamVjdCAoIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCS8vIEdldCB0aGUgY3VycmVudCBjbGFzc3BhdGggYXMgYSBsaXN0LgotCQlJQ2xhc3NwYXRoRW50cnlbXSBjbGFzc3BhdGggPSBqYXZhUHJvamVjdC5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoamF2YS51dGlsLkFycmF5cy5hc0xpc3QoY2xhc3NwYXRoKSk7Ci0JCQotCQkvLyBBZGQgdGhlIEpSRSB0byB0aGUgbGlzdC4KLQkJSUNsYXNzcGF0aEVudHJ5IGNvbiA9IEphdmFDb3JlLm5ld0NvbnRhaW5lckVudHJ5KG5ldyBQYXRoKCJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiKSk7Ci0JCWxpc3QuYWRkKGNvbik7Ci0JCQotCQkvLyBBZGQgdGhlIEF4aXMgamFycyB0byB0aGUgbGlzdC4KLQkJU3RyaW5nW10gamFycyA9IG5ldyBTdHJpbmdbXSB7Ci0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImF4aXMuamFyIiwKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwiY29tbW9ucy1kaXNjb3ZlcnktMC4yLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuY29tbW9uc19sb2dnaW5nIiwiY29tbW9ucy1sb2dnaW5nLTEuMC40LmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImpheHJwYy5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmpha2FydGFfbG9nNGoiLCJsb2c0ai0xLjIuOC5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJzYWFqLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsIndzZGw0ai0xLjUuMS5qYXIiCi0JCX07Ci0JCQotCQlmb3IgKGludCBpPTA7IGk8amFycy5sZW5ndGg7IGkrPTIpCi0JCXsKLQkJCUlQYXRoIGphciA9IGdldEF4aXNQbHVnaW5KYXJQYXRoKGphcnNbaV0samFyc1tpKzFdKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nIGphciBbIitqYXIudG9TdHJpbmcoKSsiXSIpOwotCQkJSUNsYXNzcGF0aEVudHJ5IGphckVudHJ5ID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KGphcixudWxsLG51bGwpOwotCQkJbGlzdC5hZGQoamFyRW50cnkpOwotCQl9Ci0JCQotCQkvLyBVcGRhdGUgdGhlIGN1cnJlbnQgY2xhc3NwYXRoIGZyb20gdGhlIGxpc3QuCi0JCUlDbGFzc3BhdGhFbnRyeVtdIG5ld0NsYXNzcGF0aCA9IChJQ2xhc3NwYXRoRW50cnlbXSlsaXN0LnRvQXJyYXkobmV3IElDbGFzc3BhdGhFbnRyeVswXSk7Ci0JCWphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXdDbGFzc3BhdGgsbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgbmFtZWQgamFyIGluIHRoZSBBeGlzIHBsdWdpbi4KLQkgKiBAcmV0dXJuIFRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG5hbWVkIGphciBpbiB0aGUgQXhpcyBwbHVnaW4uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBwYXRoIGNvdWxkIG5vdCBiZSBjb21wdXRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEF4aXNQbHVnaW5KYXJQYXRoICggU3RyaW5nIHBsdWdpbk5hbWUsIFN0cmluZyBqYXJOYW1lICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5OYW1lKTsKLQkJaWYgKGJ1bmRsZSA9PSBudWxsKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIixudWxsKSk7Ci0JCX0KLQkJVVJMIGF4aXNVUkwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSxuZXcgUGF0aCgibGliLyIramFyTmFtZSksbnVsbCk7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgbG9jYWxBeGlzVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKGF4aXNVUkwpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUobmV3IFVSSShVUklFbmNvZGVyLmVuY29kZShsb2NhbEF4aXNVUkwudG9TdHJpbmcoKSwgIlVURi04IikpKTsKLQkJCXJldHVybiBuZXcgUGF0aChmaWxlLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBlbmNvZGUgamFyIHBhdGggZm9yIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLHVlZSkpOwkJCQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLGlvZSkpOwotCQl9Ci0JCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gdXNlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIix1c2UpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBDb3BpZXMgZXhhbXBsZXMgdG8gdGhlIGdpdmVuIEphdmEgcHJvamVjdC4KLQkgKiBAcGFyYW0gamF2YVByb2plY3QgVGhlIHByb2plY3QgdG8gY29weSB0aGUgZXhhbXBsZXMgdG8uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlc1RvSmF2YVByb2plY3QgKCBJSmF2YVByb2plY3QgamF2YVByb2plY3QsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUHJvamVjdCBwcm9qZWN0ID0gamF2YVByb2plY3QuZ2V0UHJvamVjdCgpOwotCQlTdHJpbmcgc291cmNlUGF0aCA9IHByb2plY3QuZ2V0TmFtZSgpOwotCQljb3B5RXhhbXBsZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cyIsImRhdGEvYXhpc1NvdXJjZTEiLHNvdXJjZVBhdGgsZmlsdGVyKTsKLQkJY29weUV4YW1wbGUoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMiLCJkYXRhL2F4aXNTb3VyY2UyIixzb3VyY2VQYXRoLGZpbHRlcik7Ci0JCXByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5GVUxMX0JVSUxELG51bGwpOwotCQl0cnkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBidWlsZCB0byBjb21wbGV0ZSIpOwotCQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELG51bGwpOwotCQl9Ci0JCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJewotCQkJLy9EbyBub3RoaW5nLgotCQl9Ci0JfQotCQotCS8qKgotCSAqIFJlY3Vyc2l2ZWx5IGNvcGllcyBmaWxlcyBmcm9tIGEgcGx1Z2luIHRvIHRoZSB3b3Jrc3BhY2UuCi0JICogQHBhcmFtIHNvdXJjZVBsdWdpbiBUaGUgcGx1Z2luIHRvIGNvcHkgZnJvbS4KLQkgKiBAcGFyYW0gc291cmNlUm9vdCBUaGUgcGx1Z2luLXJlbGF0ZWQgcGF0aCB0byBjb3B5IGZyb20uCi0JICogQHBhcmFtIHRhcmdldFdvcmtzcGFjZVBhdGggVGhlIHdvcmtzcGFjZSBwYXRoIHRvIGNvcHkgdG8uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlICggU3RyaW5nIHNvdXJjZVBsdWdpbiwgU3RyaW5nIHNvdXJjZVJvb3QsIFN0cmluZyB0YXJnZXRXb3Jrc3BhY2VQYXRoLCBGaWx0ZXIgZmlsdGVyICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShzb3VyY2VQbHVnaW4pOwotCQlpZiAoYnVuZGxlID09IG51bGwpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiAiK3NvdXJjZVBsdWdpbixudWxsKSk7Ci0JCX0KLQkJRW51bWVyYXRpb24gZSA9IGJ1bmRsZS5nZXRFbnRyeVBhdGhzKHNvdXJjZVJvb3QpOwotCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJewotCQkJU3RyaW5nIHBhdGggPSBlLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVuZGxlIHBhdGggPSBbIitwYXRoKyJdIik7Ci0JCQljb3B5RXhhbXBsZUZpbGUoYnVuZGxlLHBhdGgsbmV3IFBhdGgoc291cmNlUm9vdCkuc2VnbWVudENvdW50KCksdGFyZ2V0V29ya3NwYWNlUGF0aCxmaWx0ZXIpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RXhhbXBsZUZpbGUgKCBCdW5kbGUgYnVuZGxlLCBTdHJpbmcgcGF0aCwgaW50IG9mZnNldCwgU3RyaW5nIHRhcmdldFdvcmtzcGFjZVBhdGgsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUGF0aCByZWR1Y2VkUGF0aCA9IG5ldyBQYXRoKHBhdGgpLnJlbW92ZUZpcnN0U2VnbWVudHMob2Zmc2V0KTsKLQkJSVBhdGggdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKHRhcmdldFdvcmtzcGFjZVBhdGgpLmFwcGVuZChyZWR1Y2VkUGF0aCk7Ci0JCWlmIChwYXRoLmVuZHNXaXRoKCIvIikpCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm9sZGVyID0gWyIrcGF0aCsiXSBUYXJnZXQgPSBbIit0YXJnZXRQYXRoKyJdIik7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKHRhcmdldFBhdGgpOwotCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpCi0JCQl7Ci0JCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQl9Ci0JCQlFbnVtZXJhdGlvbiBlID0gYnVuZGxlLmdldEVudHJ5UGF0aHMocGF0aCk7Ci0JCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCXsKLQkJCQlTdHJpbmcgc3VicGF0aCA9IGUubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJCWNvcHlFeGFtcGxlRmlsZShidW5kbGUsc3VicGF0aCxvZmZzZXQsdGFyZ2V0V29ya3NwYWNlUGF0aCxmaWx0ZXIpOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWxlID0gWyIrcGF0aCsiXSBUYXJnZXQgPSBbIit0YXJnZXRQYXRoKyJdIik7Ci0JCQlpZiAoZmlsdGVyLmFjY2VwdChwYXRoKSkKLQkJCXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcGllZCBbIitwYXRoKyJdIik7Ci0JCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeShwYXRoKTsKLQkJCQljb3B5RmlsZSh1cmwsdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlGaWxlICggVVJMIHVybCwgSVBhdGggdGFyZ2V0UGF0aCApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUodGFyZ2V0UGF0aCk7Ci0JCXRyeQotCQl7Ci0JCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCQkJZmlsZS5jcmVhdGUoc3RyZWFtLHRydWUsbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIklPRXhjZXB0aW9uIGNvcHlpbmcgZmlsZSIsaW9lKSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDgxMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotYXhpc1BlcmZtc3IuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OGUxYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjZlOGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyODowNSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDYzY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NTQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZmFmNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2U7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDMucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBwZXJmdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UucGx1Z2luLlBlcmZvcm1hbmNlUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS5wbHVnaW4sCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjAiLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cywKLSBvcmcuZWNsaXBzZS5qZW0udXRpbCwKLSBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZSwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMjVlNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwZXJmb3JtYW5jZS54bWwsXAotICAgICAgICAgICAgICAgcGVyZnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBiaW4vCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBwZXJmdGVzdHMuamFyCi1zb3VyY2UucGVyZnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5wZXJmdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGJhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJwZXJmb3JtYW5jZSIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0icGVyZi10ZXN0cy1maWxlIiB2YWx1ZT0iJHt0ZXN0RGlyfS9wZXJmb3JtYW5jZS10ZXN0cy54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2Vfd3NfcGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD0ke3Rlc3REaXJ9LyR7dG9tY2F0NTBEaXJ9Ii8+Ci0gICAgICAKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2Vfc3VpdGUiPgotICAJCi0gIAk8IS0tIEl0ZXJhdGlvbiAxIC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotICAJCi0gIAk8IS0tIEl0ZXJhdGlvbiAyIC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotCi0gIAk8IS0tIEl0ZXJhdGlvbiAzIC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotCi0gIAk8IS0tIEl0ZXJhdGlvbiA0IC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotCi0gIAk8IS0tIEl0ZXJhdGlvbiA1IC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotICAJCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIiBkZXBlbmRzPSJpbml0LHBlcmZvcm1hbmNlX3N1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZDg5YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDI0ICAgMTM4MDYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPUpTVCBXZWIgU2VydmljZXMgUGVyZm9ybWFuY2UgUGx1Zy1pbgotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjRjMWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMiAgMTg1MjA4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIEJvdHRvbSB1cCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBQZXJmbXNyQlVKYXZhQXhpc1RDNTAgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDUwVGVzdCB7Ci0JLy8gQ29uc3RhbnRzCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSAgV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsgCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5CVV9QUk9KRUNUX05BTUU7Ci0gICAgCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29yayBzcGFjZSAKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAgIAotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwkJCi0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJCVUphdmEvc3JjIixmb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSk7Ci0JCS8vIEVuc3VyZSB0aGF0IEVjaG8uY2xhc3MgaXMgYnVpbHQgaW46Ci0JCS8vIDxXZWIgUHJvamVjdD4vV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvZm9vL0VjaG8uY2xhc3MKLQkJSlVuaXRVdGlscy5kaXNhYmxlVmFsaWRhdGlvbih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCQotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKHdlYlByb2plY3Q9PW51bGwgfHwgIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IDUuMAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwkKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQkKLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0QlVKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgCUlTdGF0dXNbXSBzdGF0dXM7Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkgICAgSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIpOwotCi0JICAgIAotCSAgICBQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JICAgIFBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9CT1RUT01fVVAsU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCQkKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0JCQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCQlhc3NlcnRUcnVlKHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJ3c2RsIikubWVtYmVycygpLmxlbmd0aCA+IDApOwotICAgIAotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy9zaG93IGVycm9ycwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJCVUphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFJlbW92ZSB0aGUgRUFSIGZyb20gdGhlIHNlcnZlci4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkvL0pVbml0VXRpbHMucmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihzZXJ2ZXJfLHdlYlByb2plY3QsZW52Xyk7Ci0JCQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotICAgICAgICBhc3NlcnRGYWxzZSh3ZWJQcm9qZWN0LmV4aXN0cygpKTsKLQkJCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NDQ1ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMiAgMTg1MjA4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgIAotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQ2xpZW50IHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIFBlcmZtc3JDbGllbnRBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQ0xJRU5UX1BST0pFQ1RfTkFNRTsKLQkKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSxTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgIAotCS8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsJCQotCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAgICAgCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7Ci0JCUpVbml0VXRpbHMuc2V0Q2xpZW50U2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpZW50QXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewkKLQkgIAlJU3RhdHVzW10gc3RhdHVzOwotCSAgCQotCQlKVW5pdFV0aWxzLmVuYWJsZVByb3h5R2VuZXJhdGlvbih0cnVlKTsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JCUpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiKTsKLQkKLQkJUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCQlQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQ0xJRU5ULFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JICAgIAotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCi0JfQotCQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2VzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBzcmNGb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7Ci0gICAgCi0JCS8vSUZvbGRlciBzcmNGb2xkZXIgPSBKVW5pdFV0aWxzLmdldFNvdXJjZUZvbGRlckZvcldlYlByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCUlGb2xkZXIgZm9sZGVyID0gc3JjRm9sZGVyLmdldEZvbGRlcigiZm9vIik7Ci0JCWFzc2VydFRydWUoZm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCQkKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7ICAgICAgIAotCi0JfQotCQotICAvKioKLSAgICogUmVtb3ZlIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDM4MzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMiAgMTg1MjA4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgCi0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogVG9wIGRvd24gcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgY2xhc3MgUGVyZm1zclRESmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuVERfUFJPSkVDVF9OQU1FOwotICAKLSAgcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0JICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCSAgICB9Ci0JICB9Ci0JICAKLQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsJCQotCQlJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsKLQkJCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgdjUuMCBzZXJ2ZXIKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCi0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdFRESmF2YUF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgICAgSVN0YXR1c1tdIHN0YXR1czsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JCUpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiKTsKLQkJCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX1RPUF9ET1dOLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JICAgIAotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCi0JfQotCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotICAgICAgICBJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsgICAgCi0gICAgCi0JCQotCQlJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJUREphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgcmVxdWlyZWQKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIwYmIxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9BbGxQZXJmb3JtYW5jZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA5MDQwMiAgMjYzODczIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgTW92ZSBBeGlzMiBwZWZvcm1hbmNlIHRlc3RzIHRvIG5ldyBwbHVnaW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTA7Ci0KLXB1YmxpYyBjbGFzcyBBbGxQZXJmb3JtYW5jZVRlc3RzIHsKLQkKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgIAotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZSIpOwotICAgIC8vJEpVbml0LUJFR0lOJAotICAgIAotICAgIC8vIENoZWNrIGZvciBUb21jYXQgNS4wIHNlcnZlcgotCVN0cmluZyBzID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotCWlmIChzPT1udWxsKXsKLQkJcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidG9tY2F0NTBEaXIiKTsKLQl9Ci0KLQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyQlVKYXZhQXhpc1RDNTAuY2xhc3MpOwotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zclRESmF2YUF4aXNUQzUwLmNsYXNzKTsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JDbGllbnRBeGlzVEM1MC5jbGFzcyk7Ci0JfSBlbHNlIHsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJXYXJuaW5nOiBUb21jYXQgNS4wIG5vdCBmb3VuZCAtIHBlcmZvcm1hbmNlIHRlc3RzIHNraXBwZWQiKTsKLQl9Ci0KLQkKLQkKLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9wbHVnaW4vUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODI2MmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgUGVyZm9ybWFuY2VQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgUGVyZm9ybWFuY2VQbHVnaW4gcGx1Z2luOwotCi0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBQZXJmb3JtYW5jZVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBQZXJmb3JtYW5jZVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvRWNsaXBzZVBlcmZvcm1hbmNlTG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGYxYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotcHVibGljIGNsYXNzIEVjbGlwc2VQZXJmb3JtYW5jZUxvZyBpbXBsZW1lbnRzIElMb2cgewotCi0gIHByaXZhdGUgYm9vbGVhbiBydW5TdGF0ZSA9IGZhbHNlOwotICBQZXJmb3JtYW5jZSBwZXJmID0gbnVsbDsgICAgICAKLSAgUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBudWxsOyAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChTdHJpbmcgb3B0aW9uKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgSVN0YXR1cyBzdGF0dXMpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBJU3RhdHVzIHN0YXR1cykgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIE9iamVjdCBvYmplY3QpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBPYmplY3Qgb2JqZWN0KSB7Ci0gICAgCi0gICAgaWYgKG1ldGhvZC5lcXVhbHMoInJ1bkNvbW1hbmQiKSkgewotCi0gICAgICB0cnkgewotICAgICAgICBpZiAoIXJ1blN0YXRlKSB7Ci0gICAgICAgICAgLy8gYmVnaW4gcGVyZm9ybWFuY2UgcmVjb3JkaW5nCi0gICAgICAgICAgcGVyZiA9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsgICAgICAKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyID0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKCgoU3RyaW5nKW9iamVjdCkudG9TdHJpbmcoKSk7ICAgICAgICAgIAotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLSAgICAgICAgICBydW5TdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLy8gZW5kIHBlcmZvcm1hbmNlIHJlY29yZGluZwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0gICAgICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLSAgICAgICAgICBydW5TdGF0ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBoYW5kbGUgZXhjZXB0aW9uCi0gICAgICB9ICAgICAgICAKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZDM4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMyMSAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkR5bmFtaWNQb3B1cEpVbml0V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIFBlcmZvcm1hbmNlSlVuaXRVdGlscyB7Ci0gIAotCXByaXZhdGUgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hXaXphcmQoU3RyaW5nIHBsdWdpbk5TLFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKCk7Ci0KLSAgICAgICAgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKHN0YXR1c0hhbmRsZXIpOwotICAgICAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEod2l6YXJkSWQpOwotICAgICAgICBQcm9ncmVzc01vbml0b3JEaWFsb2cgbW9uaXRvciA9IG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgCXdpemFyZC5ydW5IZWFkTGVzcyhpbml0aWFsU2VsZWN0aW9uLCBtb25pdG9yKTsKLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdGF0dXNIYW5kbGVyLmdldEFsbFJlcG9ydHMoKTsKLQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDcmVhdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDb25zdW1wdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyM2ZiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InRlc3RzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc2M2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTgwZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5NDBhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI1RodSBNYXkgMzEgMTQ6Mjc6MzkgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnN0YW5jZS9vcmcuZWNsaXBzZS5jb3JlLm5ldC9vcmcuZWNsaXBzZS5jb3JlLm5ldC5oYXNNaWdyYXRlZD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhMmExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjU4IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwYWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDMucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cywKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4sCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSIzLjguMCIsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWwsCi0gb3JnLmVjbGlwc2Uud3N0LndzLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS5qZHQuZGVidWcudWksCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1NzZlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGRhdGEvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcmVhZG1lLnR4dCxcCi0gICAgICAgICAgICAgICB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYmluLwotamFycy5jb21waWxlLm9yZGVyID0gdGVzdHMuamFyCi1zb3VyY2UudGVzdHMuamFyID0gdGVzdHMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL2NsaWVudC9FY2hvUHJveHlUZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9jbGllbnQvRWNob1Byb3h5VGVzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMGUzYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL2NsaWVudC9FY2hvUHJveHlUZXN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS5pby4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJlY2hvUHJveHkiIGNsYXNzPSJmb28uRWNob1Byb3h5IiBzY29wZT0icmVxdWVzdCIvPgotPGh0bWw+Ci08JUAgaW5jbHVkZSBmaWxlID0gIi9vdXRwdXRGaWxlUGF0aC5qc3BmIiAlPgotPCUKLSAgIC8vIEhUVFAvUE9TVCBwYXJhbWV0ZXI6Ci0gICAvLyB0ZXN0SW5wdXQgLSB0aGUgU3RyaW5nIGFyZ3VtZW50IHRvIGNhbGwgdGhlIHByb3h5IHdpdGguCi0gICBTdHJpbmcgdGVzdElucHV0ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RJbnB1dCIpOwotICAgCi0gICAvLyBFeGVjdXRlIHRoZSBXZWIgc2VydmljZS4KLSAgIFN0cmluZyByZXN1bHQgPSBlY2hvUHJveHkuZWNob1N0cmluZyh0ZXN0SW5wdXQpOwotICAgCi0gICAvLyBXcml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXRGaWxlUGF0aC4KLSAgIFByaW50V3JpdGVyIHB3ID0gbnVsbDsKLSAgIHRyeQotICAgewotICAgICBwdyA9IG5ldyBQcmludFdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRwdXRGaWxlUGF0aCkpOwotICAgICBwdy5wcmludChyZXN1bHQpOwotICAgICBwdy5mbHVzaCgpOwotICAgfSAgIAotICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgewotICAgfQotICAgZmluYWxseQotICAgewotICAgICBpZiAocHcgIT0gbnVsbCkKLSAgICAgICBwdy5jbG9zZSgpOwotICAgfQotJT4KLTwvYm9keT4KLTxwPgotdGVzdElucHV0OiA8JT10ZXN0SW5wdXQlPgotPHA+Ci1vdXRwdXRGaWxlUGF0aDogPCU9b3V0cHV0RmlsZVBhdGglPgotPHA+Ci1UaGUgcmVzdWx0IGlzIDwlPXJlc3VsdCU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL3NyYy9mb28vRWNoby5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL3NyYy9mb28vRWNoby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg5M2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9zcmMvZm9vL0VjaG8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGFja2FnZSBmb287Ci0KLXB1YmxpYyBjbGFzcyBFY2hvCi17Ci0JcHVibGljIFN0cmluZyBlY2hvU3RyaW5nKFN0cmluZyBpbnB1dCkKLQl7Ci0JCXJldHVybiBpbnB1dDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvVERKYXZhL0VjaG8ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1RESmF2YS9FY2hvLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZGYzMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvVERKYXZhL0VjaG8ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9mb28iIHhtbG5zOmltcGw9Imh0dHA6Ly9mb28iIHhtbG5zOmludGY9Imh0dHA6Ly9mb28iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6d3NpPSJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4xL3hzZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHdzZGw6dHlwZXM+Ci0gIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZm9vIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmltcGw9Imh0dHA6Ly9mb28iIHhtbG5zOmludGY9Imh0dHA6Ly9mb28iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgIDxlbGVtZW50IG5hbWU9ImVjaG9TdHJpbmdSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJlY2hvU3RyaW5nUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImlucHV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiPgotCi0gICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImltcGw6ZWNob1N0cmluZ1Jlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdSZXF1ZXN0Ij4KLQotICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbXBsOmVjaG9TdHJpbmciIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkVjaG8iPgotCi0gICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0KLSAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImltcGw6ZWNob1N0cmluZ1JlcXVlc3QiIG5hbWU9ImVjaG9TdHJpbmdSZXF1ZXN0Ii8+Ci0KLSAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbXBsOmVjaG9TdHJpbmdSZXNwb25zZSIgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIi8+Ci0KLSAgICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgIDwvd3NkbDpwb3J0VHlwZT4KLQotICAgPHdzZGw6YmluZGluZyBuYW1lPSJFY2hvU29hcEJpbmRpbmciIHR5cGU9ImltcGw6RWNobyI+Ci0KLSAgICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQotICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotCi0gICAgICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotCi0gICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJlY2hvU3RyaW5nUmVxdWVzdCI+Ci0KLSAgICAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0KLSAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiPgotCi0gICAgICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotCi0gICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImltcGw6RWNob1NvYXBCaW5kaW5nIiBuYW1lPSJFY2hvIj4KLQotICAgICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9UZXN0V2ViL3NlcnZpY2VzL0VjaG8iLz4KLQotICAgICAgPC93c2RsOnBvcnQ+Ci0KLSAgIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZDgxZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJlOWViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTVGVzdFByb2plY3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL3dlYmNsaWVudC9vdXRwdXRGaWxlUGF0aC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvd2ViY2xpZW50L291dHB1dEZpbGVQYXRoLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YTdhZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvd2ViY2xpZW50L291dHB1dEZpbGVQYXRoLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+ICAKLTwlCi0gICBTdHJpbmcgb3V0cHV0RmlsZVBhdGggPSByZXF1ZXN0LmdldFBhcmFtZXRlcigib3V0cHV0RmlsZVBhdGgiKTsKLSU+ICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTM5NDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KYXZhIFdlYiBTZXJ2aWNlcyBUb29scyBUZXN0cwotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBPUFVQX1RFU1RfV1NETD1UZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTj1HZW5lcmF0ZSBKYXZhIGJlYW4gc2tlbGV0b24KLUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZPUdlbmVyYXRlIENsaWVudAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjQ1NTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQkgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgICAgCi0gICAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgICAgCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYWN0aW9uLldTRExGaWxlTWVudSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAKLSAgICAgIDwvZXh0ZW5zaW9uPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgotICAgICAgICAgPGZhY3RvcnkgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuV1NDdXN0b21BZGFwdGVyRmFjdG9yeSIgCi0gICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiPgotICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiLz4KLSAgICAgICAgIDwvZmFjdG9yeT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotCi0gICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgotICAgICAgICAgPGZhY3RvcnkgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuV1NDdXN0b21BZGFwdGVyRmFjdG9yeSIgCi0gICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiPgotICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0iamF2YS5sYW5nLlN0cmluZyIvPgotICAgICAgICAgPC9mYWN0b3J5PgotICAgICAgPC9leHRlbnNpb24+ICAKLSAgICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3JlYWRtZS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMyOTU0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgaW4gYXJlOiAKLQotLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD1FOlxcVG9tY2F0XFxUb21jYXQ1LjAKLQotLCB3aGVyZSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiIGlzIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSBvZiB5b3VyIFRvbWNhdCB2NS4wIHNlcnZlci4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdlNGM1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPSR7dGVzdERpcn0vJHt0b21jYXQ1MERpcn0iLz4KLQkKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0ianN0LXdzLWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qc3Rfd3NfZm9sZGVyIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7anN0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtqc3Qtd3MtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuQWxsV1NKVW5pdFRlc3RzIiAvPgotICAgCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgIAkKLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvV1NXaXphcmRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL1dTV2l6YXJkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGI4ZTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvV1NXaXphcmRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTIxNyAgMTg3MjgwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAyMDcgIDIxNzM0NiBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NXaXphcmRUZXN0IGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzCi17Ci0JcHJvdGVjdGVkIElFbnZpcm9ubWVudCBlbnZfOwotCXByb3RlY3RlZCBJUnVudGltZSBzZXJ2ZXJSdW50aW1lXzsKLQlwcm90ZWN0ZWQgSVNlcnZlciBzZXJ2ZXJfOwotCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZGVmYXVsdFVSTF8gPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyI7Ci0JCi0JLyoqCi0JICogU2V0IHVwIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBXZWIgU2VydmljZSBXaXphcmQgSlVuaXQgdGVzdC4gU2V0dXAgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczoKLQkgKiAxKSBPYnRhaW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGVudmlyb25tZW50LgotCSAqIDIpIEluc3RhbGwgdGhlIHNlcnZlciBydW50aW1lLgotCSAqIDMpIEluc3RhbGwgdGhlIGlucHV0IGRhdGEuIFRoaXMgbWF5IGluY2x1ZGUgcHJvamVjdHMsIHNvdXJjZSBmaWxlcyBldGMuCi0JICogNCkgSW5zdGFsbCBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmVyIGlmIHJlcXVpcmVkLiBUaGlzIG1heSBhbHNvIGluY2x1ZGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5wdXQgZGF0YSBvbiB0aGUgc2VydmVyLgotCSAqIDUpIEluaXRpYWxpemUgdGhlIEoyRUUsIFdlYiBTZXJ2aWNlIFJ1bnRpbWUgYW5kIFNlcnZlciB0eXBlIGRlZmF1bHRzIGZvciB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkIHRvIHVzZS4KLQkgKiA2KSBJbml0aWFsaXplIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBvYmplY3QgdG8gc2V0IHRoZSBjb250ZXh0IGZvciB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBHZXQgYW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgd2l0aCB0aGUgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgdG8gbWluaW1pemUgVUkgZGlhbG9nIGJsb2Nrcy4KLQkgIAlQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JCUVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICAgIGhhbmRsZXIgICAgICAgICA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpOwotCQlFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnZpcm9ubWVudCAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQkgIAotCQllbnZfID0gZW52aXJvbm1lbnQ7IAotCQlhc3NlcnRUcnVlKGVudl8gIT0gbnVsbCk7Ci0JCQotCQlzZXJ2ZXJfID0gbnVsbDsKLQkJSlVuaXRVdGlscy5oaWRlQWN0aW9uRGlhbG9ncygpOwotCQlpbnN0YWxsU2VydmVyUnVudGltZSgpOwotCQlpbnN0YWxsU2VydmVyKCk7Ci0JCQotCQkvLyB1bnppcCBwcmUtY29uZmlndXJlZCB3b3Jrc3BhY2UgcHJvamVjdHMKLQkJLy9pZiAoIVByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChXU0pVbml0Q29uc3RhbnRzLkJVX1BST0pFQ1RfTkFNRSkuZXhpc3RzKCkpCi0JCQljcmVhdGVQcm9qZWN0cygpOwkJCi0JCQotCQlpbnN0YWxsSW5wdXREYXRhKCk7Ci0JCWluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKTsKLQkJaW5pdEluaXRpYWxTZWxlY3Rpb24oKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5zdGFsbCB0aGUgc2VydmVyIHJ1bnRpbWUuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsU2VydmVyUnVudGltZSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5zdGFsbHMgdGhlIGlucHV0IGRhdGEgZnJvbSBhbiBhZ2dyZWdhdG9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW52aXJvbm1lbnQsIHJ1bnRpbWUKLQkgKiBhbmQgc2VydmVyIGFyZSBjb3JyZWN0bHkgc2V0IG9uIHRoZSBhZ2dyZWdhdGUgc2luY2UgaXRzIGxpZmVjeWNsZSBtZXRob2RzIGFyZSBub3QgbmVjZXNzYXJpbHkKLQkgKiBjYWxsZWQuCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBzZXJ2ZXJSdW50aW1lCi0JICogQHBhcmFtIHNlcnZlcgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgaW5zdGFsbElucHV0RGF0YShJRW52aXJvbm1lbnQgZW52LElSdW50aW1lIHNlcnZlclJ1bnRpbWUsSVNlcnZlciBzZXJ2ZXIpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWVudl8gPSBlbnY7Ci0JCXNlcnZlclJ1bnRpbWVfID0gc2VydmVyUnVudGltZTsKLQkJc2VydmVyXyA9IHNlcnZlcjsKLQkJLy9pbnN0YWxsSW5wdXREYXRhKCk7Ci0JfQotCQotCS8vIENyZWF0ZXMgcHJvamVjdHMgZnJvbSB0aGUgcHJvdmlkZWQgWklQIGZpbGUuCi0vLwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY3JlYXRlUHJvamVjdHMoKSB7Ci0vLwkJSVBhdGggbG9jYWxaaXBQYXRoID0gZ2V0TG9jYWxQYXRoKCk7Ci0vLwkJUHJvamVjdFVuemlwVXRpbCB1dGlsID0gbmV3IFByb2plY3RVbnppcFV0aWwobG9jYWxaaXBQYXRoLCBwZXJmX3Byb2plY3ROYW1lcyk7Ci0vLwkJcmV0dXJuIHV0aWwuY3JlYXRlUHJvamVjdHMoKTsKLS8vCX0KLQkKLS8vCXByaXZhdGUgc3RhdGljIElQYXRoIGdldExvY2FsUGF0aCgpIHsKLS8vCQlVUkwgdXJsID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmZpbmQocGVyZl96aXBGaWxlUGF0aCk7Ci0vLwkJdHJ5IHsKLS8vCQkJdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh1cmwpOwotLy8JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJcmV0dXJuIG5ldyBQYXRoKHVybC5nZXRQYXRoKCkpOwotLy8JfQkKLQkKLSAgICAvKioKLSAgICAgKiBDcmVhdGUgdGhlIG5lY2Vzc2FyeSBwcm9qZWN0cyBmb3IgdGhlIHRlc3RzLiAgVGhpcyBjb3VsZCBiZSBXZWIsIEphdmEsIG9yIG90aGVyIEoyRUUgcHJvamVjdHMuCi0gICAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5zdGFsbCB0aGUgaW5wdXQgZGF0YSBmb3IgdGhlIHRlc3QuIFRoaXMgbWF5IGluY2x1ZGUgcHJvamVjdHMsIHNvdXJjZSBmaWxlcyBldGMuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbnN0YWxsIGFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2ZXIuIFRoaXMgbWF5IGFsc28gY29uZmlndXJlIGlucHV0IGRhdGEgb24gdGhlIHNlcnZlci4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluc3RhbGxTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluaXRpYWxpemUgdGhlIEoyRUUgbGV2ZWwsIFdlYiBTZXJ2aWNlIHJ1bnRpbWUgdHlwZSBhbmQgU2VydmVyIGRlZmF1bHRzIGZvciB0aGUgdGVzdCBjYXNlLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gd2hpY2ggZHJpdmVzIHRoZSBXZWIgU2VydmljZSB3aXphcmQuIFRoaXMgY291bGQgaW5jbHVkZSBzb3VyY2UgSmF2YSBmaWxlcywKLQkgKiBXU0RMIFVSTHMgYW5kIGV2ZW4gRUpCcy4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBDbGVhbiB1cCB0aGUgd29ya3NwYWNlLiBDbGVhbnVwIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0JICogMSkgRGVsZXRlIHRoZSBpbnB1dCBkYXRhLiBUaGlzIHNob3VsZCBpbmNsdWRlIHJlbW92YWwgb2YgY29uZmlndXJhdGlvbiBkYXRhIG9uIHRoZSBzZXJ2ZXIgaWYgbmVjZXNzYXJ5LgotCSAqIDIpIFN0b3AgdGhlIHNlcnZlci4KLQkgKiAzKSBEZWxldGUgdGhlIHNlcnZlci4KLQkgKiA0KSBEZWxldGUgdGhlIHNlcnZlciBydW50aW1lLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJc3RvcFNlcnZlcigpOwotLy8JCWRlbGV0ZVNlcnZlcigpOwotLy8gICAgICBkZWxldGVJbnB1dERhdGEoKTsKLS8vCQlkZWxldGVTZXJ2ZXJSdW50aW1lKCk7Ci0JfQotCQotCS8qKgotCSAqIERlbGV0ZSB0aGUgaW5wdXQgZGF0YS4gVGhpcyBzaG91bGQgaW5jbHVkZSByZW1vdmFsIG9mIHByb2plY3RzLCBzcmMgZmlsZXMgZXRjLiBhcyB3ZWxsIGFzIHJlbW92YWwgb2YgYW55IHNlcnZlciBjb25maWd1cmVkIGRhdGEuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIFN0b3AgdGhlIHNlcnZlciBpZiBpdCBpcyBydW5uaW5nLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc3RvcFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWlmIChzZXJ2ZXJfICE9IG51bGwgJiYgc2VydmVyXy5nZXRTZXJ2ZXJTdGF0ZSgpID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCkKLQkJCXNlcnZlcl8uc3RvcCh0cnVlKTsKLQkJYXNzZXJ0VHJ1ZShzZXJ2ZXJfLmdldFNlcnZlclN0YXRlKCkgPT0gSVNlcnZlci5TVEFURV9TVE9QUEVEKTsKLQl9Ci0JCi0JLyoqCi0JICogRGVsZXRlIHRoZSBzZXJ2ZXIuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpZiAoc2VydmVyXyAhPSBudWxsKQotCQkJc2VydmVyXy5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogRGVsZXRlIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZVNlcnZlclJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpZiAoc2VydmVyUnVudGltZV8gIT0gbnVsbCkKLQkJCXNlcnZlclJ1bnRpbWVfLmRlbGV0ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGRlZmF1bHQgVVJMIGluIHRoZSBmb3JtIG9mOiBodHRwOi8vbG9jYWxob3N0OjkwODAvPGNvbnRleHRSb290Pi88cGF0aD4KLQkgKiBAcGFyYW0gcGF0aCAtIGEgZmlsZSBvciBVUkwgcmVsYXRpdmUgcGF0aC4KLQkgKiBAcGFyYW0gY29udGV4dFJvb3QgLSB0aGUgY29udGV4dCByb290IG9mIHRoZSBXZWIgbW9kdWxlIGZvciB0aGlzIFVSTC4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREZWZhdWx0VVJMKFN0cmluZyBwYXRoLFN0cmluZyBjb250ZXh0Um9vdCkKLQl7Ci0JCVN0cmluZ0J1ZmZlciB1cmwgPSBuZXcgU3RyaW5nQnVmZmVyKGRlZmF1bHRVUkxfKTsKLQkJdXJsLmFwcGVuZChjb250ZXh0Um9vdCk7Ci0JCXVybC5hcHBlbmQoJy8nKTsKLQkJdXJsLmFwcGVuZChwYXRoKTsKLQkJcmV0dXJuIHVybC50b1N0cmluZygpOwotCX0JCi0JCi0JcHJvdGVjdGVkIHZvaWQgbG9nQmFkU3RhdHVzKElTdGF0dXMgc3RhdHVzKQotCXsKLQkJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhTdGF0dXNVdGlscy5pbmZvU3RhdHVzKCIqKiogSlNULldTIEpVTklUIEVSUk9SIChTVEFSVCkgKioqIikpOwotCQlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0JCVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coU3RhdHVzVXRpbHMuaW5mb1N0YXR1cygiKioqIEpTVC5XUyBKVU5JVCBFUlJPUiAoRU5EKSAqKioiKSk7Ci0JfQotCQotCS8qKgotCSAqIFNwaW4gdGhlIGV2ZW50IGxvb3AgZm9yIGF3aGlsZSB0byBnaXZlIGJhY2tncm91bmQgYWN0aXZpdHkgYSBjaGFuY2UgdG8KLQkgKiBkaWUgZG93bi4gVGhpcyBkZWNyZWFzZXMgdGhlIGNoYW5jZSB0aGF0IHVucmVsYXRlZCBiYWNrZ3JvdW5kIHdvcmsgd2lsbAotCSAqIGFmZmVjdCByZXN1bHRzIGZvciB0aGUgc2NlbmFyaW8gYmVpbmcgdGVzdGVkLgotCSAqIAotCSAqIEBwYXJhbSBkdXJhdGlvbgotCSAqICAgICAgICAgICAgVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwaW4gdGhlIGV2ZW50IGxvb3AuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcnVuRXZlbnRMb29wKGZpbmFsIGludCBkdXJhdGlvbikgewotCQlmaW5hbCBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLQkJUnVubmFibGUgdXBkYXRlID0gbmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCWxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCQl3aGlsZSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCA8IGR1cmF0aW9uKSB7Ci0JCQkJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkKLQkJCQkJCWRpc3BsYXkuc2xlZXAoKTsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSA9PSBudWxsKQotCQkJZGlzcGxheS5zeW5jRXhlYyh1cGRhdGUpOwotCQllbHNlCi0JCQl1cGRhdGUucnVuKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvV1NXaXphcmRUb21jYXQ1MFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NjI2YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvV1NXaXphcmRUb21jYXQ1MFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLldTV2l6YXJkVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU1dpemFyZFRvbWNhdDUwVGVzdCBleHRlbmRzIFdTV2l6YXJkVGVzdCB7Ci0gIAotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLQkgIAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLndhcy50ZXN0cy5XU1dpemFyZFRlc3QjaW5zdGFsbFNlcnZlclJ1bnRpbWUoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5zdGFsbFNlcnZlclJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgIHNlcnZlclJ1bnRpbWVfID0gSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXJSdW50aW1lKFJVTlRJTUVUWVBFSURfVEM1MCwgU0VSVkVSX0lOU1RBTExfUEFUSCk7Ci0gIH0KLQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLndhcy50ZXN0cy5XU1dpemFyZFRlc3QjaW5zdGFsbFNlcnZlcigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICBzZXJ2ZXJfID0gSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXIoIkFwYWNoZSBUb21jYXQgdjUwIiwgU0VSVkVSVFlQRUlEX1RDNTAsIHNlcnZlclJ1bnRpbWVfLCBlbnZfLCBudWxsICk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyYzdjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbiIpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMDllNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwMzE0ICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMzAgIDIwODEyNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEwMzEgIDIwODEyNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMTYgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RSZXN1bHQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB0byBydW4gYWxsIHRoZSB1bml0dGVzdCB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTSlVuaXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cwotewotICAvKioKLSAgICogTWV0aG9kIHBhcnNlQXJncy4KLSAgICogCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VBcmdzKE9iamVjdCBhcmdzKQotICB7Ci0gICAgLy8gdHlwaWNpYWxseSBhcmdzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsCi0gICAgLy8gbm90IHN1cmUgd2hlbiBpdCB3b3VsZG4ndCBiZS4KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBuZXcgQWxsV1NKVW5pdFRlc3RzKCkucnVuTWFpbihhcmdzKTsKLSAgfQotCi0gIAotICBwdWJsaWMgT2JqZWN0IHJ1bk1haW4oT2JqZWN0IGFyZ3MpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBUZXN0UnVubmVyIHRlc3RSdW5uZXIgPSBudWxsOwotCi0gICAgICBwYXJzZUFyZ3MoYXJncyk7Ci0KLSAgICAgIHRlc3RSdW5uZXIgPSBuZXcgVGVzdFJ1bm5lcihTeXN0ZW0ub3V0KTsKLQotICAgICAgVGVzdCBzdWl0ZSA9IHN1aXRlKCk7Ci0gICAgICBUZXN0UmVzdWx0IHRlc3RSZXN1bHQgPSB0ZXN0UnVubmVyLmRvUnVuKHN1aXRlLCBmYWxzZSk7Ci0gICAgICBwcmludEhlYWRlcih0ZXN0UmVzdWx0KTsgICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLSAgICAKLSAgICBUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBDb21wb25lbnRDcmVhdGlvblRlc3RzLnN1aXRlKCkgKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggSjJFRVV0aWxzVGVzdHMuc3VpdGUoKSApOwotICAgCi0gICAgLy8gVGVzdHMgd2hpY2ggcmVxdWlyZSBhIFRvbWNhdCBzZXJ2ZXIKLSAgICBTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLSAgICBpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0vLyAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBCVUphdmFBeGlzVEM1MC5zdWl0ZSgpICk7Ci0gICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggVERKYXZhQXhpc1RDNTAuc3VpdGUoKSApOwotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIENsaWVudEF4aXNUQzUwLnN1aXRlKCkgKTsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBTZXJ2ZXJDcmVhdGlvblRlc3RzLnN1aXRlKCkpOwotCi0gICAgfQotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBSZXNvdXJjZVV0aWxzVGVzdHMuc3VpdGUoKSApOwotCi0gICAgcmV0dXJuIHRlc3RTdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludHMgdGhlIGhlYWRlciBvZiB0aGUgcmVwb3J0Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcmludEhlYWRlcihUZXN0UmVzdWx0IHJlc3VsdCkKLSAgewotICAgIGlmIChyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludCgiT0siKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICgiICsgcmVzdWx0LnJ1bkNvdW50KCkgKyAiIHRlc3RzKSIpOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTFVSRVMhISEiKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlRlc3RzIHJ1bjogIgotICAgICAgICAgICsgcmVzdWx0LnJ1bkNvdW50KCkKLSAgICAgICAgICArICIsICBGYWlsdXJlczogIgotICAgICAgICAgICsgcmVzdWx0LmZhaWx1cmVDb3VudCgpCi0gICAgICAgICAgKyAiLCAgRXJyb3JzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZXJyb3JDb3VudCgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzM2IwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0JVSmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA1MDkgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMjE3ICAgMTg3MjgwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAyMDcgICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwNDI5ICAgMjI4OTQ1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQm90dG9tIHVwIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJVSmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7IAotCXByaXZhdGUgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQlVfUFJPSkVDVF9OQU1FOwotICAgIAotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEJVSmF2YUF4aXNUQzUwLmNsYXNzKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwkJCi0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJCVUphdmEvc3JjIixmb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSk7Ci0JCS8vIEVuc3VyZSB0aGF0IEVjaG8uY2xhc3MgaXMgYnVpbHQgaW46Ci0JCS8vIDxXZWIgUHJvamVjdD4vV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvZm9vL0VjaG8uY2xhc3MKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCS8vYXNzZXJ0VHJ1ZShKVW5pdFV0aWxzLmdldENsYXNzZXNGb2xkZXJGb3JXZWJQcm9qZWN0KFdFQl9QUk9KRUNUX05BTUUpLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmNsYXNzIikpLmV4aXN0cygpKTsKLQkJCi0JCQotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKHdlYlByb2plY3Q9PW51bGwgfHwgIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IDUuMAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RCVUphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOOiBCVUphdmFBeGlzVEM1MCIpOwotCQkKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICAKLQkgICAgSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsIGVudl8sIG51bGwpOwotCSAgICBKVW5pdFV0aWxzLmRpc2FibGVXU0lEaWFsb2cod2ViUHJvamVjdCk7Ci0KLQkgICAgSVN0YXR1c1tdIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQk9UVE9NX1VQLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0KLSAgICAgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQkJCi0JfQotCQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJdHJ5IHsKLQkgICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkgICAgCi0JICAgICAgICBJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCSAgICAgICAgaWYgKCF3c2RsRm9sZGVyLmV4aXN0cygpKXsKLQkgICAgICAgIAlydW5FdmVudExvb3AoNjAwMCk7ICAvLyA2IHNlY29uZHMKLQkgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcCB3aGlsZSB3c2RsIGZvbGRlciBpcyBjcmVhdGVkLi4uIik7Ci0JICAgICAgICB9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFzc2VydCBCVSB3c2RsIGZvbGRlciBleGlzdHM/ID0gIit3c2RsRm9sZGVyLmV4aXN0cygpKTsKLQkgICAgICAgIGFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCQkKLQkJCWlmICghKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKXsKLQkJCQlydW5FdmVudExvb3AoNjAwMCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3Agd2hpbGUgY29udGVudHMgb2Ygd3NkbCBmb2xlciBhcmUgY3JlYXRlZC4uLiIpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBc3NlcnQgQlUgd3NkbCBmaWxlIGV4aXN0cy4gIyBvZiBmaWxlcyA9ICIgKyAod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpOwotCQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkgICAgCi0JCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIkFzc2VydCBudW1iZXIgb2YgZXJyb3IgcmVwb3J0cyBpcyB6ZXJvIiwgMCwgcy5sZW5ndGgpOwotCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFTkQ6IEJVSmF2YUF4aXNUQzUwIik7Ci0JCX0KLQkJZmluYWxseXsKLQkJCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJCS8vCi0JCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCQlsb2dCYWRTdGF0dXMoc1tpXSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gUmVtb3ZlIHRoZSBFQVIgZnJvbSB0aGUgc2VydmVyLgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCS8vSlVuaXRVdGlscy5yZW1vdmVNb2R1bGVGcm9tU2VydmVyKHNlcnZlcl8sd2ViUHJvamVjdCxlbnZfKTsKLQkJCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHdlYlByb2plY3QuZXhpc3RzKCkpOwotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NsaWVudEF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NsaWVudEF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0N2NkYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9DbGllbnRBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzExMTYgICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTIxNyAgIDE4NzI4MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMjA3ICAgMjE3MzQ2IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDQyOSAgIDIyODk0NSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIENsaWVudCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGllbnRBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0JcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQ0xJRU5UX1BST0pFQ1RfTkFNRTsKLQkKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCi0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKENsaWVudEF4aXNUQzUwLmNsYXNzKTsKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSxTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotCS8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsJCQotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wICAgIAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCQlKVW5pdFV0aWxzLnNldENsaWVudFNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHVibGljIHZvaWQgdGVzdENsaWVudEF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOOiBDbGllbnRBeGlzVEM1MCIpOwotCQkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotICAgICAgICAKLQkJSVN0YXR1c1tdIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQ0xJRU5ULFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0KLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJdHJ5IHsKLQkgICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JICAgIAotCSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbih3ZWJQcm9qZWN0KTsKLQkgICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotCSAgICAKLQkJCS8vSUZvbGRlciBzcmNGb2xkZXIgPSBKVW5pdFV0aWxzLmdldFNvdXJjZUZvbGRlckZvcldlYlByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpewotCQkJCXJ1bkV2ZW50TG9vcCg2MDAwKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcCB3aGlsZSBzb3VyY2UgcGFja2FnZSBpcyBjcmVhdGVkLi4uIik7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFzc2VydCBjbGllbnQgamF2YSBwYWNrYWdlIGV4aXN0cz8gPSAiK2ZvbGRlci5leGlzdHMoKSk7Ci0JCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCi0JCQkKLQkJCWlmICghKGZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpewotCQkJCXJ1bkV2ZW50TG9vcCg2MDAwKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcCB3aGlsZSBjb250ZW50cyBvZiB3c2RsIGZvbGVyIGFyZSBjcmVhdGVkLi4uIik7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudCBKYXZhIGZpbGVzIGV4aXN0cz8gPSAiKyhmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKTsKLQkJCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCQotCQkJLy8gQ2hlY2sgc3RhdHVzIGhhbmRsZXIgZm9yIGVycm9ycwotCQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkJYXNzZXJ0RXF1YWxzKCJBc3NlcnQgbnVtYmVyIG9mIGNsaWVudCBlcnJvciByZXBvcnRzIGlzIHplcm8iLCAwLCBzLmxlbmd0aCk7Ci0JCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVORDogQ2xpZW50QXhpc1RDNTAiKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJCWlmIChzLmxlbmd0aCA+IDApewotCQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJCWxvZ0JhZFN0YXR1cyhzW2ldKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCQl9Ci0JCQl9ICAgCQkJCi0JCX0KLQl9Ci0JCi0gIC8qKgotICAgKiBSZW1vdmUgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9Db21wb25lbnRDcmVhdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMmI3NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9Db21wb25lbnRDcmVhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXRvb2xzLmNvbW1vbi50ZXN0LmFwaXRvb2xzLlByb2plY3RVbnppcFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotLyoqCi0gKiBUZXN0cyB0aGUgdmFyaW91cyBDb21wb25lbnQgY3JlYXRpb24gY29tbWFuZHMKLSAqLwotcHVibGljIGNsYXNzIENvbXBvbmVudENyZWF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKENvbXBvbmVudENyZWF0aW9uVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V2ViQ29tcG9uZW50Q3JlYXRpb24oKXsKLQotICAgICAgICBjcmVhdGVTZXJ2ZXJSdW50aW1lKCk7Ci0gICAgICAgIGNyZWF0ZUR5bmFtaWNXZWJNb2R1bGUocHJvamVjdE5hbWVzKTsKLSAgICAgICAgLy9jcmVhdGVQcm9qZWN0cygpOwotICAgICAgICAvL2NyZWF0ZVdlYk1vZHVsZShwcm9qZWN0TmFtZSwgcHJvamVjdE5hbWUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKTsKLSAgICAgICAgLy9jcmVhdGVXZWJNb2R1bGUocHJvamVjdDJOYW1lLCBwcm9qZWN0Mk5hbWUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKTsKLQotCX0KLSAgCi0JLy8gQ3JlYXRlcyBwcm9qZWN0cyBmcm9tIHRoZSBwcm92aWRlZCBaSVAgZmlsZS4KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY3JlYXRlUHJvamVjdHMoKSB7Ci0JCUlQYXRoIGxvY2FsWmlwUGF0aCA9IGdldExvY2FsUGF0aCgpOwotCQlQcm9qZWN0VW56aXBVdGlsIHV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbChsb2NhbFppcFBhdGgsIHByb2plY3ROYW1lcyk7Ci0JCXJldHVybiB1dGlsLmNyZWF0ZVByb2plY3RzKCk7Ci0JfQotCQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggZ2V0TG9jYWxQYXRoKCkgewotCQlVUkwgdXJsID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmZpbmQoemlwRmlsZVBhdGgpOwotCQl0cnkgewotCQkJdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh1cmwpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXcgUGF0aCh1cmwuZ2V0UGF0aCgpKTsKLQl9CQotICAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVTZXJ2ZXJSdW50aW1lKCl7Ci0gICAgICAKLSAgICAgIHRyeSB7Ci0gICAgICAgIEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfSAgICAgIAotICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUR5bmFtaWNXZWJNb2R1bGUoU3RyaW5nW10gcHJvamVjdE5hbWVzKXsKLSAgICAJCi0gICAgICBmb3IgKGludCBpPTA7aTxwcm9qZWN0TmFtZXMubGVuZ3RoO2krKykgewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKHByb2plY3ROYW1lc1tpXSwgcHJvamVjdE5hbWVzW2ldLCBudWxsLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgbnVsbCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkgICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCSAgICAgIGFzc2VydFRydWUocC5leGlzdHMoKSk7Ci0gICAgICB9Ci0gICAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvSjJFRVV0aWxzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvSjJFRVV0aWxzVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4OTE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0oyRUVVdGlsc1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotLyoqCi0gKiBAYXV0aG9yIHNlbmdwbAotICoKLSAqLwotcHVibGljIGNsYXNzIEoyRUVVdGlsc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzewotCi0gICAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0MSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0MiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBJUHJvamVjdCBlamJQcm9qZWN0ID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBjb21wMSA9IHdlYkNvbXBvbmVudE5hbWU7Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJCi0JCS8vIFByb2plY3QgYW5kIGNvbXBvbmVudCBuYW1lcyBpbml0aWFsaXplZCBoZXJlIQotCQlwcm9qZWN0MSA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCWFzc2VydE5vdE51bGwocHJvamVjdDEpOwotCQkKLQkJcHJvamVjdDIgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdDJOYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChwcm9qZWN0Mik7Ci0gICAgCi0gICAgICAgIGVqYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWpiUHJvamVjdE5hbWUpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGVqYlByb2plY3QpOwotCQkKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQkvLyBUT0RPIENsZWFyIHRoZSB3b3Jrc3BhY2UKLQkJCi0JfQotCi0JIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEoyRUVVdGlsc1Rlc3RzLmNsYXNzKTsKLQkgIH0KLQkgCi0JICBwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50c0V4aXN0KCl7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0Q29tcG9uZW50RXhpc3RzIC4uLiIpOwotCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjMSA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KHByb2plY3QxKTsKLQkJICBJVmlydHVhbENvbXBvbmVudCB2YzIgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudChwcm9qZWN0Mi5nZXROYW1lKCkpOwotCQkgIAotCQkgIGFzc2VydFRydWUodmMxLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKEoyRUVVdGlscy5leGlzdHMocHJvamVjdDEpKTsKLQkJICBhc3NlcnRUcnVlKHZjMi5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShKMkVFVXRpbHMuZXhpc3RzKHByb2plY3QyLmdldE5hbWUoKSwgcHJvamVjdDJOYW1lKSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdENvbXBvbmVudEV4aXN0cyAuLi4iKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdGVzdExvY2F0aW9uR2V0dGVyTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdExvY2F0aW9uR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICBJUGF0aCBsb2MxID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QxKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYkNvbnRlbnRQYXRoIG9mIHByb2plY3QxID0gIitsb2MxKTsKLQkJICBJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihsb2MxKTsKLQkJICBhc3NlcnRUcnVlKHJlcy5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMudG9TdHJpbmcoKS5lbmRzV2l0aCgiV2ViQ29udGVudCIpKTsKLQkJICAKLQkJICBJUGF0aCBsb2MyID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QyKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYkNvbnRlbnRQYXRoIG9mIHByb2plY3QyID0gIitsb2MyKTsKLQkJICBJUmVzb3VyY2UgcmVzMiA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIobG9jMik7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMyLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKHJlczIudG9TdHJpbmcoKS5lbmRzV2l0aCgiV2ViQ29udGVudCIpKTsJCSAgCi0JCSAgCi0JCSAgSVBhdGggbG9jMyA9IEoyRUVVdGlscy5nZXRXZWJJbmZQYXRoKHByb2plY3QxKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYi1JTkYgcGF0aCA9ICIrbG9jMyk7Ci0JCSAgSVJlc291cmNlIHJlczMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGxvYzMpOwotCQkgIGFzc2VydFRydWUocmVzMy5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMzLnRvU3RyaW5nKCkuZW5kc1dpdGgoIldFQi1JTkYiKSk7Ci0JCSAgCi0JCSAgSUNvbnRhaW5lciBjb250YWluZXIgPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcihwcm9qZWN0Mik7Ci0JCSAgSVJlc291cmNlIHJlczQgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGNvbnRhaW5lci5nZXRGdWxsUGF0aCgpKTsKLQkJICBhc3NlcnRFcXVhbHMocmVzMiwgcmVzNCk7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdExvY2F0aW9uR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdGVzdEoyRUVWZXJzaW9uTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdEoyRUVWZXJzaW9uTWV0aG9kcyAuLi4iKTsKLQkgIAkJICAKLQkJICBTdHJpbmcgajMgPSBKMkVFVXRpbHMuZ2V0SjJFRVZlcnNpb25Bc1N0cmluZyhwcm9qZWN0MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJKMkVFVmVyc2lvbiBwMSBhcyBTdHJpbmc6ICIrajMpOwotCQkgIGFzc2VydEVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfNF9URVhULCBqMyk7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnQgdmMyID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQocHJvamVjdDIpOwotCQkgIGludCBqMiA9IEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbih2YzIpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiSjJFRVZlcnNpb25zIHAxOiAiK2oyKTsJCSAgCi0JCSAgYXNzZXJ0RXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlNFUlZMRVRfMl80LCBqMik7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdEoyRUVWZXJzaW9uTWV0aG9kcyAuLi4iKTsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudEdldHRlck1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RDb21wb25lbnRHZXR0ZXJNZXRob2RzIC4uLiIpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzID0gSjJFRVV0aWxzLmdldEFsbENvbXBvbmVudHMoKTsKLQkJICBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKHZjcyk7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MyID0gSjJFRVV0aWxzLmdldEFsbEVBUkNvbXBvbmVudHMoKTsKLQkJICBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKHZjczIpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzMyA9IEoyRUVVdGlscy5nZXRBbGxXZWJDb21wb25lbnRzKCk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3MzKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjczQgPSBKMkVFVXRpbHMuZ2V0V2ViQ29tcG9uZW50cyhwcm9qZWN0MSk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3M0KTsKLQkJICAKLQkJICBTdHJpbmdbXSBuYW1lcyA9IEoyRUVVdGlscy5nZXRXZWJDb21wb25lbnROYW1lcyhwcm9qZWN0Mik7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lcyk7Ci0JCSAgCi0JCSAgU3RyaW5nW10gbmFtZXMyID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0Q29tcG9uZW50c0J5VHlwZShwcm9qZWN0MSwgSjJFRVV0aWxzLldFQiB8IEoyRUVVdGlscy5FSkIpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzMik7Ci0JCSAgCi0JCSAgSVByb2plY3RbXSBwcm9qZWN0cyA9IEoyRUVVdGlscy5nZXRBbGxGbGV4aWJsZVByb2plY3RzKCk7Ci0JCSAgZm9yIChpbnQgaT0wO2k8cHJvamVjdHMubGVuZ3RoO2krKyl7Ci0JCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRmxleCBwcm9qZWN0ICIraSsiID0gIitwcm9qZWN0c1tpXSk7Ci0JCSAgfQotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RDb21wb25lbnRHZXR0ZXJNZXRob2RzIC4uLiIpOwotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyhJVmlydHVhbENvbXBvbmVudFtdIHZjcyl7Ci0JCSAgZm9yIChpbnQgaT0wOyBpPHZjcy5sZW5ndGg7aSsrKXsKLQkJCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSB2Y3NbaV07Ci0JCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiVkM6IFByb2plY3QgPSAiK3ZjLmdldFByb2plY3QoKSsiIE5hbWUgPSAiK3ZjLmdldE5hbWUoKSk7Ci0JCQkgIGFzc2VydFRydWUodmMuZXhpc3RzKCkpOwotCQkJICAKLQkJICB9Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgdm9pZCBwcmludE5hbWVTdHJpbmdzKFN0cmluZ1tdIG5hbWVzKXsKLQkJICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKXsKLQkJCSAgU3lzdGVtLm91dC5wcmludGxuKCJOYW1lIitpKyIgPSAiK25hbWVzW2ldKTsKLQkJICB9Ci0JICB9Ci0JICAKLSAgICAgIHB1YmxpYyB2b2lkIGR0ZXN0QXNzb2NpYXRlQ29tcG9uZW50Q29tbWFuZCgpewotICAgICAgICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0QXNzb2NpYXRlQ29tcG9uZW50Q29tbWFuZCAuLi4iKTsKLSAgICAgICAgCi0gICAgICAgIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGFtd2UgPSBuZXcgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQoKTsKLSAgICAgICAgYW13ZS5zZXRFYXIoZWFyQ29tcE5hbWUpOwotICAgICAgICBhbXdlLnNldEVBUlByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBhbXdlLnNldE1vZHVsZShjb21wMSk7Ci0gICAgICAgIGFtd2Uuc2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIGFtd2UuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RBc3NvY2lhdGVDb21wb25lbnRDb21tYW5kIC4uLiIpOyAgICAgCi0gICAgICB9Ci0gICAgCi0JICBwdWJsaWMgdm9pZCBkdGVzdFJlZmVyZW5jaW5nR2V0dGVyTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdFJlZmVyZW5jaW5nR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oImlzQ29tcG9uZW50QXNzb2NpYXRlZCAuLiIpOwotCQkgIEoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQocHJvamVjdDEsIHByb2plY3QxKTsKLQkJCi0JCSAgU3RyaW5nW10gbmFtZXMgPSBKMkVFVXRpbHMudG9Db21wb25lbnROYW1lc0FycmF5KEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VBUkNvbXBvbmVudHMocHJvamVjdDEpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzKTsKLQkJICBTdHJpbmdbXSBuYW1lczIgPSBKMkVFVXRpbHMudG9Db21wb25lbnROYW1lc0FycmF5KEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VBUkNvbXBvbmVudHMocHJvamVjdDIpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzMik7Ci0JCSAgCi0JCSAgU3RyaW5nW10gbmFtZXMzID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdXZWJDb21wb25lbnRzRnJvbUVBUihwcm9qZWN0MSkpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMzKTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0UmVmZXJlbmNpbmdHZXR0ZXJNZXRob2RzIC4uLiIpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBkdGVzdElzQ29tcG9uZW50TWV0aG9kcygpewotCQkKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RJc0NvbXBvbmVudE1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JCSAgLy9hc3NlcnRGYWxzZShKMkVFVXRpbHMuaXNFSkIyMENvbXBvbmVudChlamJQcm9qZWN0LCBlamJDb21wb25lbnROYW1lKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShKMkVFVXRpbHMuaXNFSkIyMENvbXBvbmVudChlamJQcm9qZWN0KSk7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdElzQ29tcG9uZW50TWV0aG9kcyAuLi4iKTsKLQkgIH0KLQkgIAotCi0JICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMmY2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLQotLyoqCi0gKiBNaW5pbWFsIGFwcCB0byBydW4gYXMgRWNsaXBzZSAiYXBwbGljYXRpb24iCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hUZXN0IGltcGxlbWVudHMgSVBsYXRmb3JtUnVubmFibGUKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlI3J1bihPYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0KLSAgICBPYmplY3QgcmVzdWx0ID0gbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFRocm93YWJsZSkKLSAgICAgIHsKLSAgICAgICAgKChUaHJvd2FibGUpIHJlc3VsdCkucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdHMgZGlkbid0IHJldHVybiAnb2snIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gSVBsYXRmb3JtUnVubmFibGUuRVhJVF9PSzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9SZXNvdXJjZVV0aWxzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVzb3VyY2VVdGlsc1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjhlZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9SZXNvdXJjZVV0aWxzVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLS8qKgotICogSlVuaXQgdGVzdHMgZm9yIHNlbGVjdGl2ZSBSZXNvdXJjZVV0aWxzIG1ldGhvZHMuICBDYWxscyB3aGljaCByZXR1cm4gYSBzaW1wbGUgU3RyaW5nIG9yIHJlbHkgb24gYSBJUmVzb3VyY2UKLSAqIEFQSSBuZWVkIG5vdCBiZSB0ZXN0ZWQuICBUaGUgZm9jdXMgaXMgbWFpbmx5IHRvIGV4ZXJjaXNlIENvbXBvbmVudCBhbmQgRmxleGlibGUgcHJvamVjdCBBUElzLiAKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VVdGlsc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzewotCi0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVzb3VyY2VVdGlsc1Rlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbXBvbmVudFR5cGUoKXsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCVN0cmluZyBjb21wb25lbnRUeXBlID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRUeXBlKHByb2plY3QpOwotCQlhc3NlcnRFcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSwgY29tcG9uZW50VHlwZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRPZigpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihwcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBmb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgICAgICAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgIGVudiAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQotICAgICAgICAgICAgSUZpbGUgZmlsZSA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotICAgICAgICAgICAgaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0gICAgICAgICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJCVUphdmEvc3JjIiwgZm9sZGVyLCBlbnYsIG51bGwgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgCWV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgSVBhdGggamF2YUZpbGVQYXRoID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSkuZ2V0RnVsbFBhdGgoKTsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKGphdmFGaWxlUGF0aCk7Ci0gICAgICAgIGFzc2VydFRydWUodmMuZXhpc3RzKCkpOwotICAgICAgICAKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKYXZhU291cmNlTG9jYXRpb24oKXsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCVN0cmluZyBqYXZhU291cmNlTG9jID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24ocHJvamVjdCkudG9TdHJpbmcoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIHNvdXJjZSBsb2NhdGlvbiA9ICIramF2YVNvdXJjZUxvYyk7Ci0JCWFzc2VydFRydWUoamF2YVNvdXJjZUxvYy5lbmRzV2l0aCgic3JjIikpOwotCQkKLQkJLy8gZ2V0IGFsbCB0aGUgSmF2YVNvdXJjZUxvY2F0aW9ucyB2aWEgdGhlIFZpcnR1YWxDb21wb25lbnQKLQkJSVZpcnR1YWxDb21wb25lbnQgdmMxID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjMiA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlJVmlydHVhbENvbXBvbmVudFtdIHZjcyA9IG5ldyBJVmlydHVhbENvbXBvbmVudFtde3ZjMSwgdmMyfTsKLQkJSVBhdGhbXSBwYXRocyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyh2Y3MpOwotCQkKLQkJLy8gdmVyaWZ5IGZpcnN0IGZvbGRlciBleGlzdHMKLQkJSVBhdGggcGF0aDEgPSAoSVBhdGgpcGF0aHNbMF07Ci0JCUlSZXNvdXJjZSByZXNvdXJjZSAgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShwYXRoMSk7Ci0JCWlmIChyZXNvdXJjZS5leGlzdHMoKSl7Ci0JCQlhc3NlcnRFcXVhbHMoSVJlc291cmNlLkZPTERFUiwgcmVzb3VyY2UuZ2V0VHlwZSgpKTsKLQkJfQotCi0JCS8vIHZlcmlmeSBzZWNvbmQgZm9sZGVyIGV4aXN0cwotCQlJUGF0aCBwYXRoMiA9IChJUGF0aClwYXRoc1sxXTsKLQkJSVJlc291cmNlIHJlc291cmNlMiAgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShwYXRoMik7Ci0JCWlmIChyZXNvdXJjZTIuZXhpc3RzKCkpewotCQkJYXNzZXJ0RXF1YWxzKElSZXNvdXJjZS5GT0xERVIsIHJlc291cmNlMi5nZXRUeXBlKCkpOwotCQl9CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdlYkNvbXBvbmVudFNlcnZlclJvb3QoKSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMuZ2V0V2ViQ29tcG9uZW50U2VydmVyUm9vdChwcm9qZWN0KTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvU2VydmVyQ3JlYXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9TZXJ2ZXJDcmVhdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlM2QwNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9TZXJ2ZXJDcmVhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0aW9uRmFpbGVkRXJyb3I7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyQ3JlYXRpb25UZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50c3sKLQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFNlcnZlckNyZWF0aW9uVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBpbml0KCl7Ci0JICAgIHRyeSB7Ci0gICAgICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIKTsgICAgICAgICAgCi0JICAgICAgSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXJSdW50aW1lKFJVTlRJTUVUWVBFSURfVEM1MCwgU0VSVkVSX0lOU1RBTExfUEFUSCk7Ci0JICAgIH0KLQkgICAgY2F0Y2goRXhjZXB0aW9uIGUpewotCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0gCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVUb21jYXR2NVNlcnZlcigpewotCQlpbml0KCk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFRvbWNhdCB2NSBzZXJ2ZXIuIik7Ci0JCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3NjID0gbmV3IENyZWF0ZVNlcnZlckNvbW1hbmQoKTsKLQkJY3NjLnNldFNlcnZlckZhY3RvcnlpZChTRVJWRVJUWVBFSURfVEM1MCk7Ci0JCWNzYy5leGVjdXRlKG51bGwsIG51bGwgKTsKLQkJCi0JCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJU3RyaW5nIGluc3RJZCA9IGNzYy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyIGluc3RhbmNlIElkID0gIitpbnN0SWQpOwotCQlpZiAoaW5zdElkIT1udWxsKXsKLQkJICBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoaW5zdElkKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKHNlcnZlcik7Ci0JCQotCQl0cnkgewotCQkJc2VydmVyLmRlbGV0ZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCW5ldyBBc3NlcnRpb25GYWlsZWRFcnJvcigpOwotCQl9Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgVG9tY2F0IHY1IHNlcnZlci4iKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlYXR0ZW1wdENyZWF0ZVRvbWNhdHY1U2VydmVyKCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdGluZyB0byBjcmVhdGUgMm5kIFRvbWNhdCB2NSBzZXJ2ZXIuIik7Ci0JCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3NjID0gbmV3IENyZWF0ZVNlcnZlckNvbW1hbmQoKTsKLQkJY3NjLnNldFNlcnZlckZhY3RvcnlpZChTRVJWRVJUWVBFSURfVEM1MCk7Ci0JCWNzYy5leGVjdXRlKG51bGwsIG51bGwgKTsKLQkJCi0JCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJU3RyaW5nIGluc3RJZCA9IGNzYy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCWlmIChpbnN0SWQhPW51bGwpIHsKLQkJICBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoaW5zdElkKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKHNlcnZlcik7Ci0JCQotCQl0cnkgewotCQkJc2VydmVyLmRlbGV0ZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCW5ldyBBc3NlcnRpb25GYWlsZWRFcnJvcigpOwotCQl9Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgYXR0ZW1wdGluZyAybmQgVG9tY2F0IHY1IHNlcnZlciBjcmVhdGlvbi4iKTsJCQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdkYzUzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA1MDkgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMjE3ICAgMTg3MjgwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAyMDcgICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwNDI5ICAgMjI4OTQ1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIFRESmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuVERfUFJPSkVDVF9OQU1FOwotICAKLSAgcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLQkKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRESmF2YUF4aXNUQzUwLmNsYXNzKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0JICAgIAlKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7CSAgICAJCi0JICAgIH0KLQkgIH0KLQkgIAotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsJCQotCQlJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCB2NS4wIHNlcnZlcgotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwkKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0KLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0VERKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOOiBUREphdmFBeGlzVEM1MCIpOwotCQkKLQkgIElTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX1RPUF9ET1dOLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCX0KLQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJdHJ5IHsKLQkgICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JICAgICAgICBJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsgICAgCi0JICAgIAotCQkJCi0JCQlJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCSAgICAgICAgaWYgKCF3c2RsRm9sZGVyLmV4aXN0cygpKXsKLQkgICAgICAgIAlydW5FdmVudExvb3AoNjAwMCk7Ci0JICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3Agd2hpbGUgd3NkbCBmb2xkZXIgaXMgY3JlYXRlZC4uLiIpOwotCSAgICAgICAgfQotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBc3NlcnQgVEQgd3NkbCBmb2xkZXIgZXhpc3RzID0gIit3c2RsRm9sZGVyLmV4aXN0cygpKTsKLQkJCWFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCQkJCQotCQkJaWYgKCEod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpewotCQkJCXJ1bkV2ZW50TG9vcCg2MDAwKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcCB3aGlsZSBjb250ZW50cyBvZiB3c2RsIGZvbGVyIGFyZSBjcmVhdGVkLi4uIik7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFzc2VydCBURCB3c2RsIGZpbGUgZXhpc3RzLiAgIyBvZiBmaWxlcyA9ICIgKyAod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpOwotCQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCQotCQotCQkJLy8gQ2hlY2sgc3RhdHVzIGhhbmRsZXIgZm9yIGVycm9ycwotCQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkJYXNzZXJ0RXF1YWxzKCJBc3NlcnQgbnVtYmVyIG9mIGVycm9yIHJlcG9ydHMgaXMgemVybyIsIDAsIHMubGVuZ3RoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFTkQ6IFRESmF2YUF4aXNUQzUwIik7Ci0JCX0KLQkJZmluYWxseXsKLQkJCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJCS8vCi0JCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCQlsb2dCYWRTdGF0dXMoc1tpXSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQotCQkJfSAKLQkJfQotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiByZXF1aXJlZAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2MjRiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAKLSAqIDIwMDcxMTE2ICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci0KLQotcHVibGljIGludGVyZmFjZSBXU0pVbml0Q29uc3RhbnRzIHsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUzIgPSAib3JnLmVjbGlwc2UuanN0LndzLnJ1bnRpbWUuYXhpczIiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19BWElTMl9SVU5USU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jcmVhdGlvbi5heGlzMldlYlNlcnZpY2VSVCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViUHJvamVjdE5hbWUgPSAiV2ViUHJvamVjdCI7Ci0gIAotICAvLyBmbGV4aWJsZSBwcm9qZWN0IHN0cnVjdHVyZSAxCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgcHJvamVjdE5hbWUgPSAiRmxleFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudE5hbWUgPSAid2ViQ29tcG9uZW50IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnQyTmFtZSA9ICJ3ZWJDb21wMiI7Ci0KLSAgLy8gZmxleGlibGUgcHJvamVjdCBzdHJ1Y3R1cmUgMgotICBwdWJsaWMgZmluYWwgU3RyaW5nIHByb2plY3QyTmFtZSA9ICJGbGV4UHJvamVjdDIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXAzTmFtZSA9ICJ3ZWJDb21wMyI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDROYW1lID0gIndlYkNvbXA0IjsKLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlamJQcm9qZWN0TmFtZSA9ICJGbGV4RUpCUHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiQ29tcG9uZW50TmFtZSA9ICJlamJDb21wb25lbnQiOwotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50UHJvamVjdE5hbWUgPSAiRmxleEFwcENsaWVudFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudENvbXBOYW1lID0gImFwcENsaWVudENvbXBvbmVudCI7ICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWFyQ29tcE5hbWUgPSAiRUFSQ29tcG9uZW50IjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBQYXRoIHppcEZpbGVQYXRoID0gbmV3IFBhdGgoIi9kYXRhL1dTVGVzdFByb2plY3RzLnppcCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gcHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tde3Byb2plY3ROYW1lLCBwcm9qZWN0Mk5hbWV9OwotICAKLSAgLy8gcGVyZm9ybWFuY2UgY29uc3RhbnRzCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgQlVfUFJPSkVDVF9OQU1FID0gIlRlc3RXZWIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFREX1BST0pFQ1RfTkFNRSA9ICJUZXN0VERQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gIlRlc3RXZWJDbGllbnQiOwotICAKLSAgcHVibGljIGZpbmFsIFBhdGggcGVyZl96aXBGaWxlUGF0aCA9IG5ldyBQYXRoKCIvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIHBlcmZfcHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tde0JVX1BST0pFQ1RfTkFNRSwgVERfUFJPSkVDVF9OQU1FLCBDTElFTlRfUFJPSkVDVF9OQU1FfTsKLSAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZVJ1bnRpbWVUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlUnVudGltZVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYWMwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlUnVudGltZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE4ICAgMTI3MTg5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkuanJlcy5KUkVzVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JVk1JbnN0YWxsMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGxUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSmF2YVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5WTVN0YW5kaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuRmFjZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICogV2ViU2VydmljZVJ1bnRpbWVUZXN0cyBjb250YWlucyB0aGUgSlVuaXQgdGVzdHMgd2hpY2ggY292ZXIgcHJvamVjdAotICogY3JlYXRpb24sIHByb2plY3QgZmlsdGVyaW5nLCBhbmQgcHJvamVjdCB0eXBlIGZpbHRlcmluZyBmb3IgdGhlIEF4aXMKLSAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIEluIG9yZGVyIGZvciB0aGUgdGVzdCB0byBydW4gc3VjY2Vzc2Z1bGx5OgotICogPG9sPgotICogPGxpPlRoZSBFY2xpcHNlIHRlc3QgZW52aXJvbm1lbnQgbXVzdCBiZSBsYXVuY2hlZCB3aXRoIEpESzEuNC4yPC9saT4KLSAqIDxsaT5UaGUgZm9sbG93aW5nIFZNIGFyZ3VtZW50cyBtdXN0IGJlIHNwZWNpZmllZDoKLSAqIDx1bD4KLSAqICAgPGxpPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1OiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIFRvbWNhdCA1LjUgc2VydmVyLDxicj4gCi0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NT1kOlxqYWthcnRhLXRvbWNhdC01LjUuOQotICogICA8bGk+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgVG9tY2F0IDUuMCBzZXJ2ZXIsPGJyPgotICogICBmb3IgZXhhbXBsZSwgdXNlIC1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9ZDpcamFrYXJ0YS10b21jYXQtNS4wLjI4ICAgCi0gKiAgIDxsaT5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MTogdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgYSBUb21jYXQgNC4xIHNlcnZlciw8YnI+Ci0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MT1kOlxqYWthcnRhLXRvbWNhdC00LjEuMjkKLSAqICAgPGxpPmphdmEuMTUuaW5zdGFsbC5wYXRoOiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIEphdmEgMS41IEpESyw8YnI+Ci0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURqYXZhLjE1Lmluc3RhbGwucGF0aD1kOlxqZGsxLjUuMF8wMgotICogPC91bD48L2xpPgotICogPC9vbD4KLSAqIAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgCi0gIC8vU2VydmVyIGluc3RhbGwgcGF0aHMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzU1ID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSIpOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1MCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNDEgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxIik7Ci0gIAotICAvL0pESyAxLjUgaW5zdGFsbCBpbmZvCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuMTUuaW5zdGFsbC5wYXRoIik7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX1RZUEUgPSAib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfTkFNRSA9ICJKYXZhMTUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBMTVfVk1fSU5TVEFMTF9KQVZBRE9DID0gImh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2FwaS8iOwotICAKLSAgLy9SdW50aW1lIHR5cGUgaWRzIGFucyBzZXJ2ZXIgdHlwZSBpZHMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1NSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNDEgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS40MSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzQxID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxIjsgIAotICAKLSAgLy9SdW50aW1lIGlkcyBmb3IgcnVudGltZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRUlEX1RDNTUgPSAiVG9tY2F0NTVSdW50aW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRUlEX1RDNTAgPSAiVG9tY2F0NTBSdW50aW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRUlEX1RDNDEgPSAiVG9tY2F0NDFSdW50aW1lIjsKLSAgCi0gIC8vV2ViIHNlcnZpY2UgcnVudGltZSBleHRlbnNpb24gaWRzIGZvciBBeGlzCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfUlVOVElNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTVBMX0pBVkEgPSAib3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVhJU19TRVJWSUNFX1JVTlRJTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9JTVBMX0pBVkEgPSAib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi53ZWIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uamF2YSI7Ci0gIAotICAvL1ZhcmlvdXMgY29uc3RhbnRzIHVzZWQgYnkgdGhlIHRlc3QgY2FzZSBmb3IgaWRlbnRpZnlpbmcgc2VydmljZS9jbGllbnQgc2lkZSBhbmQgCi0gIC8vZm9yIHNldHRpbmcgbmFtZXMgb24gY3JlYXRlZCBwcm9qZWN0cy4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9TSURFID0gInMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfU0lERSA9ICJjIjsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUVfUFJFRklYID0gInRjIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FX1NVRkZJWCA9ICJwcm9qZWN0IjsKLSAgCi0gIC8vSVByb2plY3RGYWNldFZlcnNpb25zIHVzZWQgaW4gdGhlIGV4cGVjdGVkIHJlc3VsdHMKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBXRUIyMyA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfM19URVhUKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBXRUIyNCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfNF9URVhUKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBKQVZBMTQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0pBVkEpLmdldFZlcnNpb24oSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCk7Ci0gIHByaXZhdGUgZmluYWwgSVByb2plY3RGYWNldFZlcnNpb24gSkFWQTUwID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9KQVZBKS5nZXRWZXJzaW9uKCI1LjAiKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBVVElMSVRZMTAgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfTU9EVUxFKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8wX1RFWFQpOyAgCi0gIAotICBwcml2YXRlIGZpbmFsIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIFRFTVBMQVRFX1dFQiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUpOwotICBwcml2YXRlIGZpbmFsIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIFRFTVBMQVRFX1VUSUxJVFkgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZShJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURSk7Ci0gIAotICBwcml2YXRlIGludCBtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb247Ci0gIAotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV2ViU2VydmljZVJ1bnRpbWVUZXN0cy5jbGFzcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBpbml0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSF9UQzU1KTsKLSAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSF9UQzUwKTsKLSAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSF9UQzQxKTsKLSAgICAgIGFzc2VydE5vdE51bGwoSkFWQTE1X1ZNX0lOU1RBTExfUEFUSCk7Ci0gICAgICAKLSAgICAgIC8vQ3JlYXRlIGEgc2VydmVyIHJ1bnRpbWU6IFRvbWNhdCA0LjEgd2l0aCBKREsgMS40LjIKLSAgICAgIGNyZWF0ZVRvbWNhdFNlcnZlclJ1bnRpbWUoUlVOVElNRUlEX1RDNDEsIFJVTlRJTUVUWVBFSURfVEM0MSwgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzQxKTsKLSAgICAgIAotICAgICAgLy9DcmVhdGUgYSBzZXJ2ZXIgcnVudGltZTogVG9tY2F0IDUuMCB3aXRoIEpESyAxLjQuMgotICAgICAgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShSVU5USU1FSURfVEM1MCwgUlVOVElNRVRZUEVJRF9UQzUwLCBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTApOwotICAgICAgCi0gICAgICAvL0NyZWF0ZSBhIHNlcnZlciBydW50aW1lOiBUb21jYXQgNS41IHdpdGggSkRLIDEuNQotICAgICAgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShSVU5USU1FSURfVEM1NSwgUlVOVElNRVRZUEVJRF9UQzU1LCBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTUpOwotICAgICAgCi0gICAgICAKLSAgICAgIAotICAgICAgU3RyaW5nIG11bHRpcGxlcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibXVsdGlwbGVzIik7IC8vdGhpcyBpcyBhbiBvcHRpb25hbCBwcm9wZXJ5IC0gZGVmYXVsdGVkIHRvIDEKLSAgICAgIGlmIChtdWx0aXBsZXMgIT0gbnVsbCAmJiAoSW50ZWdlci5wYXJzZUludChtdWx0aXBsZXMpID4gMCkpCi0gICAgICB7Ci0gICAgICAgIG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbiA9IEludGVnZXIucGFyc2VJbnQobXVsdGlwbGVzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uID0gMTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotICB9ICAKLSAgCi0gIHByaXZhdGUgSVJ1bnRpbWUgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgcnVudGltZVR5cGVJZCwgU3RyaW5nIHNlcnZlckluc3RhbGxQYXRoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBJUnVudGltZVR5cGUgcnQgPSBTZXJ2ZXJDb3JlLmZpbmRSdW50aW1lVHlwZShydW50aW1lVHlwZUlkKTsKLSAgICBJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gcnQuY3JlYXRlUnVudGltZShydW50aW1lSWQsIG51bGwpOwotICAgIHdjLnNldExvY2F0aW9uKG5ldyBQYXRoKHNlcnZlckluc3RhbGxQYXRoKSk7Ci0gICAgSVJ1bnRpbWUgcnVudGltZSA9IHdjLnNhdmUodHJ1ZSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKHJ1bnRpbWVUeXBlSWQuZXF1YWxzKFJVTlRJTUVUWVBFSURfVEM1NSkpCi0gICAgewotICAgICAgLy9DcmVhdGUgYSBuZXcgSVZNSW5zdGFsbAotICAgICAgSVZNSW5zdGFsbFR5cGUgdHlwZSA9IEphdmFSdW50aW1lLmdldFZNSW5zdGFsbFR5cGUoSkFWQTE1X1ZNX0lOU1RBTExfVFlQRSk7Ci0gICAgICBJVk1JbnN0YWxsIG5ld1ZNID0gbmV3IFZNU3RhbmRpbih0eXBlLCBjcmVhdGVVbmlxdWVJZCh0eXBlKSk7IAotICAgICAgbmV3Vk0uc2V0SW5zdGFsbExvY2F0aW9uKG5ldyBGaWxlKEpBVkExNV9WTV9JTlNUQUxMX1BBVEgpLmdldEFic29sdXRlRmlsZSgpKTsKLSAgICAgIG5ld1ZNLnNldE5hbWUoSkFWQTE1X1ZNX0lOU1RBTExfTkFNRSk7Ci0gICAgICBuZXdWTS5zZXRKYXZhZG9jTG9jYXRpb24obmV3IFVSTChKQVZBMTVfVk1fSU5TVEFMTF9KQVZBRE9DKSk7Ci0gICAgICBpZiAobmV3Vk0gaW5zdGFuY2VvZiBJVk1JbnN0YWxsMikKLSAgICAgIHsKLSAgICAgICAgSVZNSW5zdGFsbDIgbmV3Vk0yID0gKElWTUluc3RhbGwyKSBuZXdWTTsKLSAgICAgICAgbmV3Vk0yLnNldFZNQXJncyhudWxsKTsKLSAgICAgIH0KLSAgICAgIG5ld1ZNLnNldExpYnJhcnlMb2NhdGlvbnMobnVsbCk7ICAgICAgCi0KLSAgICAgIC8vQWRkIHRoZSBuZXcgSVZNSW5zdGFsbCB0byB0aGUgbWFzdGVyIGxpc3QuCi0gICAgICBJVk1JbnN0YWxsW10gdm1zID0gbmV3IElWTUluc3RhbGxbXXtuZXdWTX07Ci0gICAgICAvL1RPRE8gUmVwbGFjZSB1c2Ugb2YgdGhlIGludGVybmFsIGNsYXNzIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5qcmVzLkpSRXNVcGRhdGVyCi0gICAgICAvL3dpdGggc29tZXRoaW5nIHB1YmxpYy4gTm90IHN1cmUgaWYgc29tZXRoaW5nIHB1YmxpYyBpcyBhdmFpbGFibGUgYXQgdGhpcyB0aW1lLiBOZWVkIHRvIGNoZWNrLgotICAgICAgSlJFc1VwZGF0ZXIgdXBkYXRlciA9IG5ldyBKUkVzVXBkYXRlcigpOwotICAgICAgSVZNSW5zdGFsbCBkZWZhdWx0Vk0gPSBKYXZhUnVudGltZS5nZXREZWZhdWx0Vk1JbnN0YWxsKCk7Ci0gICAgICB1cGRhdGVyLnVwZGF0ZUpSRVNldHRpbmdzKHZtcywgZGVmYXVsdFZNKTsKLSAgICAgIAotICAgICAgLy9HZXQgdGhlIG5ldyBJVk1JbnN0YWxsCi0gICAgICBJVk1JbnN0YWxsVHlwZSB2bVR5cGUgPSBKYXZhUnVudGltZS5nZXRWTUluc3RhbGxUeXBlKEpBVkExNV9WTV9JTlNUQUxMX1RZUEUpOwotICAgICAgSVZNSW5zdGFsbCBqYXZhMTVWTSA9IHZtVHlwZS5maW5kVk1JbnN0YWxsQnlOYW1lKEpBVkExNV9WTV9JTlNUQUxMX05BTUUpOwotICAgIAotICAgICAgLy9TZXQgdGhlIHRvbWNhdCBydW50aW1lIHRvIHVzZSB0aGUgbmV3IEphdmEgMTUgSkRLLgotICAgICAgSVJ1bnRpbWVXb3JraW5nQ29weSB3YzIgPSBydW50aW1lLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0gICAgICAvL1RPRE8gUmVwbGFjZSB1c2Ugb2YgdGhlIGludGVybmFsIGNsYXNzIAotICAgICAgLy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLklUb21jYXRSdW50aW1lV29ya2luZ0NvcHkKLSAgICAgIC8vd2l0aCBzb21ldGhpbmcgcHVibGljLiBFbmhhbmNlbWVudCAxMjc4ODQgaGFzIGJlZW4gb3BlbmVkIHRvIHJlcXVlc3QgQVBJCi0gICAgICAvL2ZvciB0aGlzLgotICAgICAgSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weSB0Y3djID0gKElUb21jYXRSdW50aW1lV29ya2luZ0NvcHkpd2MyLmxvYWRBZGFwdGVyKElUb21jYXRSdW50aW1lV29ya2luZ0NvcHkuY2xhc3MsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgdGN3Yy5zZXRWTUluc3RhbGwoamF2YTE1Vk0pOwotICAgICAgd2MyLnNhdmUodHJ1ZSwgbnVsbCk7ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRSdW50aW1lKHJ1bnRpbWVJZCk7Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlVW5pcXVlSWQoSVZNSW5zdGFsbFR5cGUgdm1UeXBlKQotICB7Ci0gICAgU3RyaW5nIGlkID0gbnVsbDsKLSAgICBkbwotICAgIHsKLSAgICAgIGlkID0gU3RyaW5nLnZhbHVlT2YoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwotICAgIH0gd2hpbGUgKHZtVHlwZS5maW5kVk1JbnN0YWxsKGlkKSAhPSBudWxsKTsKLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0cyBwcm9qZWN0IGNyZWF0aW9uIGFuZCBmaWx0ZXJpbmcgZm9yIHRoZSBBeGlzIFdlYiBzZXJ2aWNlCi0gICAqIHJ1bnRpbWUuIFRlc3RzIGNvdmVyIGFsbCB2YWxpZCBjb21iaW5hdGlvbnMgb2YgU2VydmljZVJ1bnRpbWVzLCAKLSAgICogVG9tY2F0IHNlcnZlcnMsIGFuZCBKMkVFIHByb2plY3QgdHlwZXMgYW5kIHdlbGwgYXMgYWxsIHZhbGlkICAKLSAgICogY29tYmluYXRpb25zIG9mIENsaWVudFJ1bnRpbWVzLCBUb21jYXQgc2VydmVycywgYW5kIEoyRUUgcHJvamVjdCB0eXBlcy4KLSAgICovICAKLSAgcHVibGljIHZvaWQgdGVzdFByb2plY3RDcmVhdGlvbkFuZEZpbHRlcmluZygpCi0gIHsKLSAgICBpbml0KCk7Ci0gICAgCi0gICAgU3RyaW5nW10gdGVtcGxhdGVJZHMgPSBuZXcgU3RyaW5nW117SUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURX07Ci0gICAgU3RyaW5nW10gc2NlbmFyaW9zID0gbmV3IFN0cmluZ1tde1NFUlZJQ0VfU0lERSwKLSAgICAgICAgU0VSVklDRV9TSURFLAotICAgICAgICBTRVJWSUNFX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREV9OwotICAgIFN0cmluZ1tdIHNlcnZpY2VDbGllbnRSdW50aW1lSWRzID0gbmV3IFN0cmluZ1tde0FYSVNfU0VSVklDRV9SVU5USU1FLAotICAgICAgICBBWElTX1NFUlZJQ0VfUlVOVElNRSwKLSAgICAgICAgQVhJU19TRVJWSUNFX1JVTlRJTUUsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9XRUIsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9KQVZBLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkF9OwotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVzID0gbmV3IFN0cmluZ1tde1NFUlZFUlRZUEVJRF9UQzQxLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1MCwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTUsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzQxLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1MCwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTUsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzQxLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1MCwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTV9OwotICAgIAotICAgIAotICAgIC8vRXhwZWN0ZWQgUmVzdWx0czoKLSAgICAKLSAgICBJUHJvamVjdEZhY2V0VmVyc2lvbltdW10gZXhwZWN0ZWRGYWNldHMgPSBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXVtdeyBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyMywgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjI0LCBKQVZBNTB9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyMywgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjI0LCBKQVZBNTB9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtVVElMSVRZMTAsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1VUSUxJVFkxMCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117VVRJTElUWTEwLCBKQVZBNTB9LAotICAgIH07Ci0gICAgCi0gICAgU3RyaW5nW10gZXhwZWN0ZWRSdW50aW1lcyA9IG5ldyBTdHJpbmdbXSB7UlVOVElNRUlEX1RDNDEsCi0gICAgICAgIFJVTlRJTUVJRF9UQzUwLAotICAgICAgICBSVU5USU1FSURfVEM1NSwKLSAgICAgICAgUlVOVElNRUlEX1RDNDEsCi0gICAgICAgIFJVTlRJTUVJRF9UQzUwLAotICAgICAgICBSVU5USU1FSURfVEM1NSwKLSAgICAgICAgUlVOVElNRUlEX1RDNDEsCi0gICAgICAgIFJVTlRJTUVJRF9UQzUwLAotICAgICAgICBSVU5USU1FSURfVEM1NSAgICAgICAgCi0gICAgfTsKLSAgICAKLSAgICBTdHJpbmcgYmlnUHJlZml4ID0gUFJPSkVDVF9OQU1FX1BSRUZJWCsiMCIrUFJPSkVDVF9OQU1FX1NVRkZJWDsKLSAgICBTdHJpbmdbXSBleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2UgPSBuZXcgU3RyaW5nW10geyBiaWdQcmVmaXgrIjAiLCAKLSAgICAgICAgYmlnUHJlZml4KyIxIiwKLSAgICAgICAgYmlnUHJlZml4KyIyIiwKLSAgICAgICAgYmlnUHJlZml4KyIzIiwKLSAgICAgICAgYmlnUHJlZml4KyI0IiwKLSAgICAgICAgYmlnUHJlZml4KyI1IiAgICAgICAgCi0gICAgfTsKLSAgICAKLSAgICBTdHJpbmdbXSBleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudCA9IG5ldyBTdHJpbmdbXSB7IGJpZ1ByZWZpeCsiMCIsIAotICAgICAgICBiaWdQcmVmaXgrIjEiLAotICAgICAgICBiaWdQcmVmaXgrIjIiLAotICAgICAgICBiaWdQcmVmaXgrIjMiLAotICAgICAgICBiaWdQcmVmaXgrIjQiLAotICAgICAgICBiaWdQcmVmaXgrIjUiLAotICAgICAgICBiaWdQcmVmaXgrIjYiLAotICAgICAgICBiaWdQcmVmaXgrIjciLAotICAgICAgICBiaWdQcmVmaXgrIjgiLAotICAgIH07Ci0gICAgCi0gICAgYm9vbGVhbltdIGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzU2VydmljZSA9IG5ldyBib29sZWFuW10ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwotICAgIGJvb2xlYW5bXSBleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudFdlYiA9IG5ldyBib29sZWFuW10ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwotICAgIGJvb2xlYW5bXSBleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudEphdmEgPSBuZXcgYm9vbGVhbltdIHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlfTsKLSAgICAKLSAgICAKLSAgICAvL1R1cm4gYXV0by1idWlsZCBvZmYKLSAgICBWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gbmV3IFZhbGlkYXRpb25NYW5hZ2VyKCk7Ci0gICAgbWFuYWdlci5kaXNhYmxlQXV0b0J1aWxkKCk7Ci0gICAgCi0gICAgLy9DcmVhdGUgdGhlIHByb2plY3RzCi0gICAgZm9yIChpbnQgaT0wOyBpPG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbjsgaSsrKQotICAgIHsKLSAgICAgIGNyZWF0ZVByb2plY3RzKHRlbXBsYXRlSWRzLCBzY2VuYXJpb3MsIHNlcnZpY2VDbGllbnRSdW50aW1lSWRzLCBzZXJ2ZXJUeXBlcywgUFJPSkVDVF9OQU1FX1BSRUZJWCtpKTsKLSAgICB9ICAKLSAgICAKLSAgICAvL1Jlc3RvcmUgYXV0by1idWlsZAotICAgIG1hbmFnZXIucmVzdG9yZUF1dG9CdWlsZCgpOwotICAgIAotICAgIC8vQ2hlY2sgRXhwZWN0ZWQgUmVzdWx0czoKLSAgICAKLSAgICAvL0NoZWNrIGZhY2V0cyBhbmQgcnVudGltZSBvbiB0aGUgZmlyc3QgIjAidGggc2V0IG9mIGNyZWF0ZWQgcHJvamVjdHMuIElnbm9yZSBoaWdoZXIgbXVsdGlwbGVzIHNpbmNlIHRoZXkKLSAgICAvL2FyZSBkdXBsaWNhdGVzLiAgICAKLSAgICBmb3IgKGludCBqPTA7IGo8ZXhwZWN0ZWRGYWNldHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gYmlnUHJlZml4K2o7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwocHJvamVjdCk7Ci0gICAgICBhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChmUHJvamVjdCk7Ci0KLSAgICAgICAgLy9DaGVjayBmYWNldHMKLSAgICAgICAgLy9iZWdpbiBkZWJ1ZwotICAgICAgICBJdGVyYXRvciBwZmFjZXRzID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwZmFjZXRzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAJSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKXBmYWNldHMubmV4dCgpOwotICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJmYWNldD0iK3Bmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRJZCgpKyIsIHZlcnNpb249IitwZnYuZ2V0VmVyc2lvblN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaz0wOyBrPGV4cGVjdGVkRmFjZXRzW2pdLmxlbmd0aDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgYXNzZXJ0VHJ1ZShmUHJvamVjdC5oYXNQcm9qZWN0RmFjZXQoZXhwZWN0ZWRGYWNldHNbal1ba10pKTsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBydW50aW1lCi0gICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSBmUHJvamVjdC5nZXRSdW50aW1lKCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZlJ1bnRpbWUpOwotICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChzUnVudGltZSk7Ci0gICAgICAgIGFzc2VydFRydWUoc1J1bnRpbWUuZ2V0SWQoKS5lcXVhbHMoZXhwZWN0ZWRSdW50aW1lc1tqXSkpOwotICAgICAgICAKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0NoZWNrIHRoYXQgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUoLi4pIHJldHVybnMKLSAgICAvL3RoZSByaWdodCBzZXQgb2YgcHJvamVjdHMKLSAgICBTdHJpbmcgc2VydmljZVR5cGUgPSBTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApICsgIi8iICsgU0VSVklDRV9JTVBMX0pBVkE7Ci0gICAgU3RyaW5nW10gcHJvamVjdHNGb3JBeGlzU2VydmljZSA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yU2VydmljZVR5cGVBbmRSdW50aW1lKHNlcnZpY2VUeXBlLCBBWElTX1JVTlRJTUUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoLCBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlLmxlbmd0aCk7Ci0gICAgTGlzdCBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlTGlzdC5hZGQocHJvamVjdHNGb3JBeGlzU2VydmljZVtpXSk7ICAgICAgCi0gICAgfQotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZShwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlTGlzdC5jb250YWlucyhleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2VbaV0pKTsKLSAgICB9Ci0gICAgCi0gICAgLy9DaGVjayB0aGF0IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yQ2xpZW50VHlwZUFuZFJ1bnRpbWUoLi4pIHJldHVybnMKLSAgICAvL3RoZSByaWdodCBzZXQgb2YgcHJvamVjdHMgICAgCi0gICAgU3RyaW5nW10gcHJvamVjdHNGb3JBeGlzQ2xpZW50ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZShDTElFTlRfSU1QTF9KQVZBLCBBWElTX1JVTlRJTUUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGgsIHByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGgpOwotICAgIExpc3QgcHJvamVjdHNGb3JBeGlzQ2xpZW50TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHByb2plY3RzRm9yQXhpc0NsaWVudExpc3QuYWRkKHByb2plY3RzRm9yQXhpc0NsaWVudFtpXSk7ICAgICAgCi0gICAgfQotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHByb2plY3RzRm9yQXhpc0NsaWVudExpc3QuY29udGFpbnMoZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNDbGllbnRbaV0pKTsKLSAgICB9ICAgIAotICAgIAotICAgIC8vQ2hlY2sgdGhhdCB0aGUgQXhpcyBzZXJ2aWNlIGFuZCBjbGllbnQgcnVudGltZXMnIHByb2plY3QgY29tcGF0aWJpbGl0eSBjaGVja2luZyBpcyB3b3JraW5nCi0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBiaWdQcmVmaXgraTsgICAgICAKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEJvb2xlYW5zRm9yQXhpc1NlcnZpY2VbaV0sIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRQcm9qZWN0KEFYSVNfU0VSVklDRV9SVU5USU1FLCBwcm9qZWN0TmFtZSkpOyAgICAKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudFdlYltpXSwgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0UHJvamVjdChBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwgcHJvamVjdE5hbWUpKTsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudEphdmFbaV0sIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoQVhJU19DTElFTlRfUlVOVElNRV9KQVZBLCBwcm9qZWN0TmFtZSkpOwotICAgIH0gCi0gICAgCi0gICAgLy9UdXJuIGF1dG8tYnVpbGQgb2ZmCi0gICAgbWFuYWdlci5kaXNhYmxlQXV0b0J1aWxkKCk7Ci0gICAgICAgIAotICAgIC8vRGVsZXRlIHRoZSBwcm9qZWN0cwotICAgIGZvciAoaW50IGk9MDsgaTxtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb247IGkrKykKLSAgICB7Ci0gICAgICBkZWxldGVQcm9qZWN0cyh0ZW1wbGF0ZUlkcy5sZW5ndGgsIFBST0pFQ1RfTkFNRV9QUkVGSVgraSk7Ci0gICAgfSAgICAgIAotCi0gICAgLy9SZXN0b3JlIGF1dG8tYnVpbGQKLSAgICBtYW5hZ2VyLnJlc3RvcmVBdXRvQnVpbGQoKTsgICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVByb2plY3RzKGludCBuLCBTdHJpbmcgbmFtZVByZWZpeCkKLSAgewotICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lUHJlZml4ICsgUFJPSkVDVF9OQU1FX1NVRkZJWCArIGk7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KG5hbWUpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIC8vRG9uJ3QgZmFpbCB0aGUgdGVzdCBjYXNlIGlmIHByb2plY3QgZGVsZXRpb24gZmFpbHMuCi0gICAgICB9Ci0gICAgfQotICB9ICAKLSAgCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0cyhTdHJpbmdbXSB0ZW1wbGF0ZUlkcywgU3RyaW5nW10gc2NlbmFyaW9zLCBTdHJpbmdbXSBzZXJ2aWNlQ2xpZW50UnVudGltZUlkcywgU3RyaW5nW10gc2VydmVyVHlwZXMsIFN0cmluZyBuYW1lUHJlZml4ICkKLSAgewotICAgIGludCBuID0gdGVtcGxhdGVJZHMubGVuZ3RoOwotICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lUHJlZml4ICsgUFJPSkVDVF9OQU1FX1NVRkZJWCArIGk7Ci0gICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMgPSBudWxsOwotICAgICAgaWYgKHNjZW5hcmlvc1tpXS5lcXVhbHMoQ0xJRU5UX1NJREUpKQotICAgICAgewotCi0gICAgICAgICAgcmZ2cyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlQ2xpZW50UnVudGltZUlkc1tpXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoc2NlbmFyaW9zW2ldLmVxdWFscyhTRVJWSUNFX1NJREUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmZ2cyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZUNsaWVudFJ1bnRpbWVJZHNbaV0pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJmdnMgPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0gICAgICBjb21tYW5kLnNldFByb2plY3ROYW1lKG5hbWUpOwotICAgICAgY29tbWFuZC5zZXRUZW1wbGF0ZUlkKHRlbXBsYXRlSWRzW2ldKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMocmZ2cyk7ICAgICAgICAgICAKLSAgICAgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHNlcnZlclR5cGVzW2ldKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCBudWxsICk7ICAgIAotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgZmFpbCgpOwotICAgICAgfQotICAgICAgCi0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KG5hbWUpOwotICAgICAgRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZnZzLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICB9ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBUZXN0cyBwcm9qZWN0IHR5cGUgZmlsdGVyaW5nIGZvciB0aGUgQXhpcyBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBUZXN0cyBjb3ZlciBhbGwgU2VydmljZVJ1bnRpbWVzIGFuZCBDbGllbnRSdW50aW1lcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQcm9qZWN0VHlwZUZpbHRlcmluZygpCi0gIHsgIAotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10gZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZSA9IG5ldyBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIHtURU1QTEFURV9XRUJ9OwotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10gZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViID0gbmV3IElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10ge1RFTVBMQVRFX1dFQn07Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSBleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhID0gbmV3IElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10ge1RFTVBMQVRFX1VUSUxJVFl9OwotICAgIAotICAgIFNldCB0ZW1wbGF0ZXNGb3JBeGlzU2VydmljZSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKEFYSVNfU0VSVklDRV9SVU5USU1FKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5sZW5ndGgsdGVtcGxhdGVzRm9yQXhpc1NlcnZpY2Uuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLmNvbnRhaW5zKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc1NlcnZpY2VbaV0pKTsKLSAgICB9Ci0gICAgU2V0IHRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLmxlbmd0aCwgdGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYi5zaXplKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZSh0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLmNvbnRhaW5zKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYltpXSkpOwotICAgIH0gICAgCi0gICAgU2V0IHRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yQ2xpZW50UnVudGltZShBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLmxlbmd0aCwgdGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLmNvbnRhaW5zKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmFbaV0pKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0R5bmFtaWNQb3B1cEpVbml0V2l6YXJkLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvRHluYW1pY1BvcHVwSlVuaXRXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE3MmY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvRHluYW1pY1BvcHVwSlVuaXRXaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuSUVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLXB1YmxpYyBjbGFzcyBEeW5hbWljUG9wdXBKVW5pdFdpemFyZCBleHRlbmRzIER5bmFtaWNQb3B1cFdpemFyZCB7Ci0JcHJpdmF0ZSBJRWNsaXBzZVN0YXR1c0hhbmRsZXIgaGFuZGxlcl87Ci0gICAgcHJpdmF0ZSBJTG9nIGxvZ187Ci0JcHVibGljIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyKQotCXsKLQkJaGFuZGxlcl8gPSBoYW5kbGVyOwotCX0KLSAgCi0gICAgcHVibGljIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyLCBJTG9nIGxvZykKLSAgICB7Ci0gICAgICAgIGhhbmRsZXJfID0gaGFuZGxlcjsKLSAgICAgICAgbG9nXyA9IGxvZzsKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgcnVuSGVhZExlc3MoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLElSdW5uYWJsZUNvbnRleHQgY29udGV4dCkgewotCQkKLQkJUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnZpcm9ubWVudCAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXJfICk7Ci0JCWlmIChsb2dfIT1udWxsKQotICAgICAgICAgIGVudmlyb25tZW50LnNldExvZyhsb2dfKTsKLSAgICAKLQkJRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgICAgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7CSAgICAKLQkJRGF0YUZsb3dNYW5hZ2VyICAgICAgICAgICAgZGF0YU1hbmFnZXIgICAgID0gbmV3IERhdGFGbG93TWFuYWdlciggZGF0YVJlZ2lzdHJ5XywgZW52aXJvbm1lbnQgKTsKLQkJU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIgbWFuYWdlciAgICAgICAgID0gbmV3IFNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyKGVudmlyb25tZW50LCBkYXRhTWFuYWdlcik7Ci0JCSAgCi0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKXdpemFyZEVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsKLQkgICAgfQotCSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotCSAgICB7Ci0JICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIAotCQljb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeV8gKTsKLQkJCi0JCUNvbW1hbmRGcmFnbWVudCAgICAgICAgICAgIHJvb3RGcmFnbWVudCAgICA9IGdldFJvb3RGcmFnbWVudCggc2VsZWN0aW9uLCBudWxsICk7Ci0JCW1hbmFnZXIuc2V0Um9vdEZyYWdtZW50KCByb290RnJhZ21lbnQgKTsKLQkJbWFuYWdlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggY29udGV4dCApOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvSlVuaXRVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmY0MDQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDMxNCAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5XYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlcy5BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FbnZpcm9ubWVudFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuVmFsaWRhdG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotCi1wdWJsaWMgY2xhc3MgSlVuaXRVdGlscyB7Ci0JLy8gQmVnaW4gU2VydmVyIFV0aWxpdGllcwotCXB1YmxpYyBzdGF0aWMgSVJ1bnRpbWUgY3JlYXRlU2VydmVyUnVudGltZShTdHJpbmcgcnVudGltZVR5cGVJZCxTdHJpbmcgc2VydmVySW5zdGFsbFBhdGgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUlSdW50aW1lVHlwZSBydCA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUeXBlKHJ1bnRpbWVUeXBlSWQpOwotCQlTdHJpbmcgdGN2ZXJzaW9uID0gcnVudGltZVR5cGVJZC5zdWJzdHJpbmcocnVudGltZVR5cGVJZC5sYXN0SW5kZXhPZigiLiIpKzEpOwotCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gcnQuY3JlYXRlUnVudGltZSh0Y3ZlcnNpb24rIlJ1bnRpbWUiLCBudWxsKTsKLQkJd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoc2VydmVySW5zdGFsbFBhdGgpKTsKLQkJCi0JCXJldHVybiB3Yy5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoU3RyaW5nIG5hbWUsU3RyaW5nIHNlcnZlclR5cGVJZCxJUnVudGltZSBydW50aW1lLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotICAgICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsgCi0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2ZXJzLmxlbmd0aDtpKyspewotICAgICAgICBpZihzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyhzZXJ2ZXJUeXBlLmdldElkKCkpKXsKLSAgICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsgIAotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIElTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXYyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCxudWxsLCBtb25pdG9yICk7Ci0JICBzZXJ2ZXJXYy5zZXROYW1lKG5hbWUpOwotCSAgc2VydmVyV2Muc2V0UnVudGltZShydW50aW1lKTsKLSAgICAgIElTZXJ2ZXIgc2VydmVyID0gc2VydmVyV2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yICk7Ci0gICAgICByZXR1cm4gc2VydmVyOwotCX0JCi0JCi0JLyoqCi0JICogY3JlYXRlU2VydmVyIGFuZCBpbnN0YWxsIEpSRSBmb3IgU2VydmVycyByZXF1aXJpbmcgYSBzcGVjaWZpYyBKUkUKLQkgKiBAcGFyYW0gamF2YVJ1bnRpbWVQYXRoIEpSRSBpbnN0YWxsIGxvY2F0aW9uOyBpLmUuIEU6XFxKYXZhMTQxCi0JICogQHBhcmFtIGpyZUlEIEpSRSBpZDsgaS5lLiBqYXZhMTQxCi0JICogQHBhcmFtIG5hbWUgc2VydmVyIG5hbWUKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIHNlcnZlciB0eXBlIGlkCi0JICogQHBhcmFtIHJ1bnRpbWUgSVJ1bnRpbWUKLQkgKiBAcGFyYW0gZW52IElFbnZpcm9ubWVudAotCSAqIEByZXR1cm4gIHNlcnZlciBJU2VydmVyCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoU3RyaW5nIGphdmFSdW50aW1lUGF0aCwgU3RyaW5nIGpyZUlELCBTdHJpbmcgbmFtZSxTdHJpbmcgc2VydmVyVHlwZUlkLElSdW50aW1lIHJ1bnRpbWUsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOyAKLSAgICBmb3IgKGludCBpPTA7aTxzZXJ2ZXJzLmxlbmd0aDtpKyspewotICAgICAgaWYoc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc2VydmVyVHlwZS5nZXRJZCgpKSl7Ci0gICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOyAgCi0gICAgICB9Ci0gICAgfQotCi0JCUlTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXYyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCxudWxsLCBtb25pdG9yICk7Ci0JCXNlcnZlcldjLnNldE5hbWUobmFtZSk7Ci0JCXNlcnZlcldjLnNldFJ1bnRpbWUocnVudGltZSk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IHNlcnZlcldjLnNhdmVBbGwodHJ1ZSwgbW9uaXRvciApOwotCQkKLQkJcmV0dXJuIHNlcnZlcjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHN0YXJ0U2VydmVyKElTZXJ2ZXIgc2VydmVyLElFbnZpcm9ubWVudCBlbnYpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWZpbmFsIElTZXJ2ZXIgY3VycmVudFNlcnZlciA9IHNlcnZlcjsKLQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkgIGN1cnJlbnRTZXJ2ZXIuc3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG1vbml0b3IgKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUludGVycnVwdGVkRXhjZXB0aW9uIHdyYXBwZXIgPSBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQkJCQl3cmFwcGVyLnNldFN0YWNrVHJhY2UoZS5nZXRTdGFja1RyYWNlKCkpOwotCQkJCQl0aHJvdyB3cmFwcGVyOwotCQkJCX0KLQkJCX0KLQkJfTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSxmYWxzZSxydW5uYWJsZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVFQVJGcm9tU2VydmVyKElTZXJ2ZXIgc2VydmVyLElQcm9qZWN0IGVhclByb2plY3QsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW50IG51bWJlck9mTW9kdWxlcyA9IHNlcnZlci5nZXRNb2R1bGVzKCkubGVuZ3RoOwotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCXsKLSAgICAgIGZpbmFsIElNb2R1bGUgZWFyUHJvamVjdE1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKGVhclByb2plY3QpOwotICAgICAgZmluYWwgSU1vZHVsZVtdIG1vZHVsZXMgPSB7ZWFyUHJvamVjdE1vZHVsZX07Ci0JCQluZXcgU2VydmVyVXRpbHMoKS5tb2RpZnlNb2R1bGVzKGVudiwgc2VydmVyLGVhclByb2plY3RNb2R1bGUsZmFsc2UsIG1vbml0b3IgKTsKLQkJICAJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQkgIAlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJCXsKLQkJICAJCSAgCWZvciAoaW50IGk9MDtpPDEwMDA7aSsrKQotCQkgIAkJICAJewotCQkgIAkJICAJCWludCBtb2R1bGVTdGF0ZSA9IGN1cnJlbnRTZXJ2ZXIuZ2V0TW9kdWxlU3RhdGUobW9kdWxlcyk7Ci0JCSAgCQkgIAkJaWYgKG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCB8fCBtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQSU5HKQotCQkgIAkJICAJCXsKLQkJICAJCSAgCQkgIHRyeQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgVGhyZWFkLnNsZWVwKDMwMCk7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQl9Ci0JCSAgCQkgIAkJZWxzZQotCQkgIAkJICAJCQlicmVhazsKLQkJICAJCSAgCX0gIAkJCSAgCQkJCi0JCQkJfSAgCQkKLQkJCX07Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQkJCXJldHVybiAoc2VydmVyLmdldE1vZHVsZXMoKS5sZW5ndGggPT0gKG51bWJlck9mTW9kdWxlcy0xKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihJU2VydmVyIHNlcnZlciwgSVByb2plY3Qgd2ViUHJvamVjdCwgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgIGludCBudW1iZXJPZk1vZHVsZXMgPSBzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aDsKLQkJaWYgKHNlcnZlciAhPSBudWxsKQotCQl7Ci0gICAgICBmaW5hbCBJTW9kdWxlIHdlYlByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZSh3ZWJQcm9qZWN0KTsKLSAgICAgIGZpbmFsIElNb2R1bGVbXSBtb2R1bGVzID0ge3dlYlByb2plY3RNb2R1bGV9OwotCi0JCQluZXcgU2VydmVyVXRpbHMoKS5tb2RpZnlNb2R1bGVzKGVudiwgc2VydmVyLHdlYlByb2plY3RNb2R1bGUsZmFsc2UsIG1vbml0b3IgKTsKLQkJICAJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQkgIAlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJCXsKLQkJICAJCSAgCWZvciAoaW50IGk9MDtpPDEwMDA7aSsrKQotCQkgIAkJICAJewotCQkgIAkJICAJCWludCBtb2R1bGVTdGF0ZSA9IGN1cnJlbnRTZXJ2ZXIuZ2V0TW9kdWxlU3RhdGUobW9kdWxlcyk7Ci0JCSAgCQkgIAkJaWYgKG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCB8fCBtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQSU5HKQotCQkgIAkJICAJCXsKLQkJICAJCSAgCQkgIHRyeQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgVGhyZWFkLnNsZWVwKDMwMCk7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQl9Ci0JCSAgCQkgIAkJZWxzZQotCQkgIAkJICAJCQlicmVhazsKLQkJICAJCSAgCX0gIAkJCSAgCQkJCi0JCQkJfSAgCQkKLQkJCX07Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQkJCS8vVGhyZWFkLnNsZWVwKDYwMDApOwotCQkJcmV0dXJuIChzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aCA9PSAobnVtYmVyT2ZNb2R1bGVzLTEpKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCS8vIEJlZ2luOiBHZW5lcmFsIEVjbGlwc2UgVXRpbGl0aWVzCi0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHN5bmNCdWlsZFByb2plY3QoSVByb2plY3QgcHJvamVjdCxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuRlVMTF9CVUlMRCwgbW9uaXRvciApOwotCQlXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCBjbWQgPSBuZXcgV2FpdEZvckF1dG9CdWlsZENvbW1hbmQoKTsKLSAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCQljbWQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHlUZXN0RmlsZXMoU3RyaW5nIHBhdGhTdHJpbmcsaW50IHJvb3RTZWdtZW50TGVuZ3RoLElGb2xkZXIgZGVzdEZvbGRlcixJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlFbnVtZXJhdGlvbiBlID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocGF0aFN0cmluZyk7Ci0JCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotCQl7Ci0JCQlTdHJpbmcgZmlsZVBhdGggPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLQkJCWlmIChmaWxlUGF0aC5lbmRzV2l0aCgiLyIpKQotCQkJCWNvcHlUZXN0RmlsZXMoZmlsZVBhdGgscm9vdFNlZ21lbnRMZW5ndGgsZGVzdEZvbGRlcixlbnYsIG1vbml0b3IgKTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlJUGF0aCBmaWxlSVBhdGggPSBuZXcgUGF0aChmaWxlUGF0aCk7Ci0JCQkJRmlsZVJlc291cmNlVXRpbHMuY29weUZpbGUoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCksCi0JCQkJCQkJCQkJICAgZmlsZUlQYXRoLnJlbW92ZUxhc3RTZWdtZW50cyhmaWxlSVBhdGguc2VnbWVudENvdW50KCktcm9vdFNlZ21lbnRMZW5ndGgpLCAvLyAvZGF0YS88c3ViZGlyPgotCQkJCQkJCQkJCSAgIChuZXcgUGF0aChmaWxlUGF0aCkpLnJlbW92ZUZpcnN0U2VnbWVudHMocm9vdFNlZ21lbnRMZW5ndGgpLCAvLyBmaWxlcyBhZnRlciAvZGF0YS88c3ViZGlyPgotCQkJCQkJCQkJCSAgIGRlc3RGb2xkZXIuZ2V0RnVsbFBhdGgoKSwKLQkJCQkJCQkJCQkgICBtb25pdG9yLAotCQkJCQkJCQkJCSAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5VGVzdERhdGEoU3RyaW5nIGRhdGFTdWJkaXJlY3RvcnksSUZvbGRlciBkZXN0Rm9sZGVyLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBwYXRoU3RyaW5nID0gIi9kYXRhLyIrZGF0YVN1YmRpcmVjdG9yeTsKLQkJY29weVRlc3RGaWxlcyhwYXRoU3RyaW5nLG5ldyBQYXRoKHBhdGhTdHJpbmcpLnNlZ21lbnRDb3VudCgpLGRlc3RGb2xkZXIsZW52LCBtb25pdG9yKTsKLQkJCi0JfQotCQotCS8vIEJlZ2luOiBXZWIgU2VydmljZXMgVXRpbGl0aWVzCi0JcHVibGljIHN0YXRpYyB2b2lkIGhpZGVBY3Rpb25EaWFsb2dzKCkKLQl7Ci0JCVBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBhY3Rpb25EaWFsb2dzQ3R4ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JCUFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gYWN0aW9uRGlhbG9nUHJlZnMgID0gYWN0aW9uRGlhbG9nc0N0eC5nZXREaWFsb2dzKCk7Ci0JCWZvciAoaW50IGk9MDtpPGFjdGlvbkRpYWxvZ1ByZWZzLmxlbmd0aDtpKyspCi0JCQlhY3Rpb25EaWFsb2dzQ3R4LnNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoYWN0aW9uRGlhbG9nUHJlZnNbaV0uZ2V0SWQoKSx0cnVlKTsJCQotCX0KLQkKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVQcm94eUdlbmVyYXRpb24oYm9vbGVhbiBlbmFibGUpCi0JewotCQlTY2VuYXJpb0NvbnRleHQgY3R4ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCQlib29sZWFuIHByZXZpb3VzU2V0dGluZyA9IGN0eC5nZXRHZW5lcmF0ZVByb3h5KCk7Ci0JCWN0eC5zZXRHZW5lcmF0ZVByb3h5KGVuYWJsZSk7Ci0JCXJldHVybiBwcmV2aW91c1NldHRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVPdmVyd3JpdGUoYm9vbGVhbiBlbmFibGUpCi0JewotCQlSZXNvdXJjZUNvbnRleHQgY3R4ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotCQlib29sZWFuIHByZXZpb3VzU2V0dGluZyA9IGN0eC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpOwotCQljdHguc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGVuYWJsZSk7Ci0JCXJldHVybiBwcmV2aW91c1NldHRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRSdW50aW1lUHJlZmVyZW5jZShTdHJpbmcgcnQpewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJY29udGV4dC5zZXRSdW50aW1lSWQocnQpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVdTSURpYWxvZyhJUHJvamVjdCBwcm9qZWN0KXsKLQkgIAotCSAgUGVyc2lzdGVudFdTSUNvbnRleHQgY3R4ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsKLQkgIGN0eC51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgCi0JICBQZXJzaXN0ZW50V1NJQ29udGV4dCBjdHgyID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOwotCSAgY3R4Mi51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRXU1J1bnRpbWVTZXJ2ZXIoU3RyaW5nIHdzUnVudGltZUlkLFN0cmluZyBzZXJ2ZXJUeXBlSWQpCi0JewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgc2VydmVyUnVudGltZUN0eCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJc2VydmVyUnVudGltZUN0eC5zZXRSdW50aW1lSWQod3NSdW50aW1lSWQpOwotCQlzZXJ2ZXJSdW50aW1lQ3R4LnNldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJUeXBlSWQpOwkJCi0JfQotCQotCi0JcHJpdmF0ZSBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaFdpemFyZChTdHJpbmcgcGx1Z2luTlMsU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoKTsKLQotICAgICAgICBEeW5hbWljUG9wdXBKVW5pdFdpemFyZCB3aXphcmQgPSBuZXcgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoc3RhdHVzSGFuZGxlcik7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSh3aXphcmRJZCk7Ci0gICAgICAgIFByb2dyZXNzTW9uaXRvckRpYWxvZyBtb25pdG9yID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgICB0cnkgewotICAgICAgICAJd2l6YXJkLnJ1bkhlYWRMZXNzKGluaXRpYWxTZWxlY3Rpb24sIG1vbml0b3IpOwotICAgICAgICB9IAotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpewotICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCXJldHVybiBuZXcgSVN0YXR1c1tde1N0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGUpfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdHVzSGFuZGxlci5nZXRBbGxSZXBvcnRzKCk7Ci0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ3JlYXRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ29uc3VtcHRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNyZWF0ZVdlYk1vZHVsZShTdHJpbmcgd2ViUHJvamVjdE5hbWUsIFN0cmluZyBtb2R1bGVOYW1lLCBTdHJpbmcgc2VydmVySW5zdGFuY2VJRCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU3RyaW5nIGoyZWVWZXJzaW9uLCBJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKXsKLQotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgdHJ5ewotCSAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY3JlYXRlV2ViID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCSAgICBjcmVhdGVXZWIuc2V0UHJvamVjdE5hbWUod2ViUHJvamVjdE5hbWUpOwotICAgICAgICBjcmVhdGVXZWIuc2V0UHJvamVjdE5hbWUobW9kdWxlTmFtZSk7Ci0gICAgICAgIGNyZWF0ZVdlYi5zZXRUZW1wbGF0ZUlkKCJ0ZW1wbGF0ZS5qc3Qud2ViIik7Ci0JICAgIGNyZWF0ZVdlYi5zZXRTZXJ2ZXJGYWN0b3J5SWQoc2VydmVyRmFjdG9yeUlkKTsKLQkgICAgY3JlYXRlV2ViLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVySW5zdGFuY2VJRCk7Ci0JICAgIGNyZWF0ZVdlYi5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdKTsKLSAgICAgICAgY3JlYXRlV2ViLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgcmV0dXJuIGNyZWF0ZVdlYi5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpewotCSAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZSApOwotCSAgfQotCSAgcmV0dXJuIHN0YXR1czsKLQkgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGlzYWJsZVZhbGlkYXRpb24oSVByb2plY3QgcHJvamVjdCl7Ci0JCQotICAgIAkvLyBkaXNhYmxlIHZhbGlkYXRvcnMgZm9yIHByb2plY3QKLQkJdHJ5Ci0JCXsKLQkJCVZhbGlkYXRvck1hbmFnZXIgdm0gPSBWYWxpZGF0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKTsKLQkJCXZtLmRpc2FibGVBbGxWYWxpZGF0b3JzKHByb2plY3QsIG51bGwpOwkJCQotCQkJCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBzZXQgVmFsaWRhdG9ycy4uLiIpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKSB7Ci0JCVBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IChQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KVdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlUHJveHkoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldEluc3RhbGxDbGllbnQoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldE1vbml0b3JXZWJTZXJ2aWNlKGZhbHNlKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlV2ViU2VydmljZShTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCk7ICAgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2xpZW50U2NlbmFyaW9EZWZhdWx0KCkgewotCQlQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSAoUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dClXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0JICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCB0cnVlICk7Ci0JICAgICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldEluc3RhbGxDbGllbnQoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldE1vbml0b3JXZWJTZXJ2aWNlKGZhbHNlKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlQ2xpZW50KFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvU2NlbmFyaW9Db25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTllNWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1wdWJsaWMgY2xhc3MgU2NlbmFyaW9Db25zdGFudHMgewotCS8vIEJvdHRvbSB1cCBKYXZhIG9yIEVKQiB0byBXZWIgU2VydmljZSB3aXphcmQgSUQuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0laQVJESURfQk9UVE9NX1VQID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIjsKLQkKLQkvLyBUb3AgZG93biBXU0RMIHRvIFNrZWxldG9uIFdlYiBTZXJ2aWNlIHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9UT1BfRE9XTiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI7Ci0JCi0JLy8gV2ViIFNlcnZpY2UgY2xpZW50IHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9DTElFTlQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIjsJCi0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvcjoKLQkvLyAxKSBKYXZhIHNvdXJjZSAoYm90dG9tLXVwKQotCS8vIDIpIFdTREwgb3IgV1NJTCAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfSUZJTEUgPSAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgSmF2YSBjb21waWxhdGlvbiB1bml0cyAoaS5lLiBKYXZhIGNsYXNzZXMgc2VsZWN0ZWQgaW4gdGhlIEphdmEgcGVyc3BlY3RpdmUpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9DT01QSUxBVElPTlVOSVQgPSAib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ29tcGlsYXRpb25Vbml0IjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgc2VydmljZSBzZWxlY3RlZCBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRUlNUEwgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFdTRExSZXNvdXJjZUltcGwgKHRvcC1kb3duIG9yIGNsaWVudCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX1dTRExTRVJWSUNFSU1QTCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUltcGwiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBTZXJ2aWNlUmVmICh0b3AtZG93biBvciBjbGllbnQpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9TRVJWSUNFUkVGID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFNlcnZpY2VJbXBsQmVhbiAoYm90dG9tLXVwKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRUlNUExCRUFOID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW4iOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBCZWFuTGluayAoYm90dG9tLXVwKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfQkVBTkxJTksgPSAib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rIjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvV1NDdXN0b21BZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWI4NGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci0KLS8qKgotICogVGhlIFdTQ3VzdG9tQWRhcHRlckZhY3RvcnkgaXMgYW4gQWRhcHRlckZhY3Rvcnkgc2ltaWxhciB0byBvbmUgYW4gYWRvcHRlciB3b3VsZCBwcm92aWRlIHRvIGFkYXB0IGEgY3VzdG9tIG9iamVjdCAKLSAqIHRvIGEgV1NETCB1cmkgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd291bGQgdGFrZSBhcyBpbnB1dC4gIFRoZSBTZXJ2bGV0IExpbmssIAotICogcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHVuZGVyIHRoZSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggb2YgdGhlIEoyRUUgUHJvamVjdCBFeHBsb3JlciwgaXMgCi0gKiB1c2VkIGFzIHRoZSAiY3VzdG9tIG9iamVjdCIgaW4gdGhpcyB0ZXN0LgotICoKLSAqLwotcHVibGljIGNsYXNzIFdTQ3VzdG9tQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJQWRhcHRlckZhY3RvcnkgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3NbXSB0eXBlcyA9IHsKLQkJSUZpbGUuY2xhc3MsIFN0cmluZy5jbGFzcwotCX07Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5DbGFzcykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKLQkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZsZXRMaW5rICYmICgoYWRhcHRlclR5cGUgPT0gSUZpbGUuY2xhc3MgKSB8fCAoYWRhcHRlclR5cGUgPT0gU3RyaW5nLmNsYXNzKSkpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0QWRhcHRlciBvbiAiK2FkYXB0YWJsZU9iamVjdC50b1N0cmluZygpKTsKLQkJCVNlcnZsZXRMaW5rIGJlYW5MaW5rID0gKFNlcnZsZXRMaW5rKSBhZGFwdGFibGVPYmplY3Q7Ci0KLQkJCUlGaWxlIHdzZGxGaWxlID0gZ2V0V1NETEZpbGUoYmVhbkxpbmspOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsRmlsZSA9ICIrd3NkbEZpbGUpOwotCQkJaWYgKGFkYXB0ZXJUeXBlID09IElGaWxlLmNsYXNzKSB7Ci0JCQkJcmV0dXJuIHdzZGxGaWxlOwotCQkJfSBlbHNlIAotCQkJCWlmIChhZGFwdGVyVHlwZSA9PSBTdHJpbmcuY2xhc3MpIHsKLQkJCQkJVVJJIHdzZGxVcmkgPSB3c2RsRmlsZS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQlTdHJpbmcgd3NkbEZpbGVTdHJpbmcgPSBudWxsOwotCQkJCQlpZiAod3NkbFVyaSAhPSBudWxsKSB7Ci0JCQkJCQl3c2RsRmlsZVN0cmluZyA9IHdzZGxVcmkudG9TdHJpbmcoKTsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigid3NkbEZpbGVTdHJpbmcgPSAiK3dzZGxGaWxlU3RyaW5nKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4gd3NkbEZpbGVTdHJpbmc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKLQkgKi8KLQlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gYmVhbiBUaGUgU2VydmljZUltcGxCZWFuCi0JICogQHJldHVybiBUaGUgSUZpbGUgcmVwcmVzZW50aW5nIHRoZSBXU0RMIGZpbGUgZm9yIHRoaXMgU2VydmljZUltcGxCZWFuLgotCSAqLwotCXByaXZhdGUgSUZpbGUgZ2V0V1NETEZpbGUoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLQkJICBFT2JqZWN0IGVPYmplY3QgPSBiZWFuLmVDb250YWluZXIoKTsKLQkJICBpZiAoZU9iamVjdCA9PSBudWxsKQotCQkJICByZXR1cm4gbnVsbDsKLQkgICAgICAgICAgCi0JCSAgZU9iamVjdCA9IGVPYmplY3QuZUNvbnRhaW5lcigpOwotCSAgICAgIAotCQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZURlc2NyaXB0aW9uKSB7Ci0JCQkgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKSBlT2JqZWN0OwotCQkJICAKLQkJCSAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh3c2QpOyAgICAJICAKLQkgICAgCSAgCi0JCQkgIElQYXRoIHBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7ICAgIAkgCi0JCQkgIHBhdGggPSBwYXRoLmFwcGVuZCh3c2QuZ2V0V3NkbEZpbGUoKSk7IAotCQkJICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShwYXRoKTsgCSAgCi0JCQkgICAgICAJICAgIAotCQkgIH0KLQkJICByZXR1cm4gbnVsbDsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICogQHBhcmFtIGxpbmsgVGhlIFNlcnZsZXRMaW5rCi0JICogQHJldHVybiBUaGUgSUZpbGUgcmVwcmVzZW50aW5nIHRoZSBXU0RMIGZpbGUgZm9yIHRoaXMgU2VydmxldExpbmsKLQkgKi8KLQlwcml2YXRlIElGaWxlIGdldFdTRExGaWxlKFNlcnZsZXRMaW5rIGxpbmspIHsKLQkJICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLQkJICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLQkJCSAgcmV0dXJuIGdldFdTRExGaWxlKChTZXJ2aWNlSW1wbEJlYW4pIGVPYmplY3QpOwotCQkgIHJldHVybiBudWxsOwotCSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcyZWUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiM2UxYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTU2YTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0NCwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3ksCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLAotIG9yZy5lY2xpcHNlLnVpCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVhZmI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZjQzYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNyYy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjI5MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1TZXJ2aWNlIHBvbGljeQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyMTgzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0gIAotICA8IS0tIFdlIG5lZWQgdGhpcyBwbHVnaW4gdG8gYmUgbG9hZGVkIGF0IHN0YXJ0dXAgdGltZSBzbyB0aGF0IHRoZQotICAgICAgIFNlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3RlciBjbGFzcyB3aWxsIGFsd2F5cyBiZSBsb2FkZWQuICBJZiB0aGlzIGlzCi0gICAgICAgbm90IGRvbmUgdGhlbiB0aGUgU2VydmljZSBQb2xpY3kgcHJvamVjdCBwcm9wZXJ0eSBwYWdlIHdpbGwgYXBwZWFyCi0gICAgICAgb24gYWxsIHByb2plY3QgcHJvcGVydHkgcGFnZXMgdW50aWwgdGhlIHBsdWdpbiBoYXMgYmVlbiBsb2FkZWQuIAotICAgICAgIC0tPgotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIi8+Ci0gIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5wcm9wZXJ0eVRlc3RlcnMiPgotICAgIDxwcm9wZXJ0eVRlc3RlcgotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kuZm9vIgotICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiCi0gICAgICBuYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kuZm9vIgotICAgICAgcHJvcGVydGllcz0icHJvamVjdEhhc0ZPT2ZpbGVzIgotICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmludGVybmFsLnByb3BlcnRpZXMuRk9PRmlsZVByb3BlcnR5VGVzdGVyIj4KLSAgICA8L3Byb3BlcnR5VGVzdGVyPgotIAk8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5zZXJ2aWNlcG9saWN5Ij4KLSAgICAgPHNlcnZpY2VQb2xpY3k+Ci0gICAgICA8ZW5hYmxlbWVudD4KLSAgICAgICAgIDx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5LmZvby5wcm9qZWN0SGFzRk9PZmlsZXMiLz4KLSAgICAgICA8L2VuYWJsZW1lbnQ+IAotICAgICAgIDxwb2xpY3kgcGFyZW50UG9saWN5SWQ9InNvbWVwYXJlbnQiIGlkPSJpZDEiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiBtdXRhYmxlPSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQxIHNob3J0TmFtZSIgZGVzY3JpcHRpb249ImlkMSBkZXNjcmlwdGlvbiIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4gb3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiBvcmcuZWNsaXBzZS53c3QuZXJyb3IiLz4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQzIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiIvPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDQiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5lcnJvciIvPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIyIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybjIgb3JnLmVjbGlwc2Uud3N0LmVycm9yMiIvPgotICAJCQk8dGFyZ2V0UG9saWN5IGlkPSJpZF9ib29sZWFuMiIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LmZhbHNlIi8+ICAKLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPgotICAgICAgICAgCi0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQzIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiBvcmcuZWNsaXBzZS53c3QuZXJyb3IiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9InNvbWVwYXJlbnQiPgotICAgICAgICAgPGRlc2NyaXB0b3IgbG9uZ05hbWU9InBhcmVudCBsb25nbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDIiIHBhcmVudFBvbGljeUlkPSJzb21lcGFyZW50IiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iCi0gICAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlPSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQyIHNob3J0bmFtZSIgY29udGV4dEhlbHBJZD0ic29tZWNvbnRleHRpZC5BMDAxIi8+Ci0gICAgICAgICA8c3RhdGUga2V5PSJpZDJfa2V5IiB2YWx1ZT0iaWQyX3ZhbHVlIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkMyIgcGFyZW50UG9saWN5SWQ9ImlkMiIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMyBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQ1IiBwYXJlbnRQb2xpY3lJZD0iaWQzIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ1IHNob3J0IG5hbWUiLz4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyIiAKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+ICAKLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDYiIHBhcmVudFBvbGljeUlkPSJpZDUiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDYgc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotCi0gICAgICAgPHBvbGljeSBpZD0iaWQxMCIgcGFyZW50UG9saWN5SWQ9ImlkMjIiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDEwIHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDExIiBwYXJlbnRQb2xpY3lJZD0iaWQxMCIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMTEgc2hvcnQgbmFtZSIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIiIAotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4gIAotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkMTIiIHBhcmVudFBvbGljeUlkPSJpZDExIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQxMiBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQ3IiBwYXJlbnRQb2xpY3lJZD0iaWQyIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ3IHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDgiIHBhcmVudFBvbGljeUlkPSJpZDciIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDggc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkOSIgcGFyZW50UG9saWN5SWQ9ImlkOCIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkOSBzaG9ydCBuYW1lIi8+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMiIgCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPiAgCi0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQ0IiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkNCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iaWQ0IGxvbmcgbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDIyIiBwYXJlbnRQb2xpY3lJZD0ic29tZXBhcmVudCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bTIiCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3Qud2FybjIiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDIyIHNob3J0bmFtZSIgY29udGV4dEhlbHBJZD0ic29tZWNvbnRleHRpZC5BMDAxIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWRfYm9vbGVhbjEiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5ib29sZWFuRW51bSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LnRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJib29sZWFuMSBzaG9ydCBuYW1lIiBsb25nTmFtZT0iYm9vbGVhbjEgbG9uZyBuYW1lIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkX2Jvb2xlYW4yIiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuYm9vbGVhbkVudW0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC50cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iYm9vbGVhbjIgc2hvcnQgbmFtZSIgbG9uZ05hbWU9ImJvb2xlYW4yIGxvbmcgbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtMiIgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUyIj4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3QuaWdub3JlMiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iSUdOT1JFIFNIT1JUTkFNRTIiIGxvbmdOYW1lPSJJR05PUkUgTE9OR05BTUUyIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC53YXJuMiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iV0FSTiBTSE9SVE5BTUUyIiBsb25nTmFtZT0iV0FSTiBMT05HTkFNRTIiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yMiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iRVJST1IgU0hPUlROQU1FMiIgbG9uZ05hbWU9IkVSUk9SIExPTkdOQU1FMiIgLz4KLSAgICAgICA8L2VudW1lcmF0aW9uPiAKLSAgICAgICAKLSAgICAgPC9zZXJ2aWNlUG9saWN5PiAgICAgIAotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9saWN5dWkiPgotICAgICA8c2VydmljZVBvbGljeVVJPiAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjEiIGRlZmF1bHRkYXRhPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkM3xpZDIiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MSBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MSBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0idHJ1ZSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uMiIgZGVmYXVsdGRhdGE9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWRcZC4qIiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTIgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTIgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIvPgotICAgICAgICAgPGVuYWJsZWQgbXVsdGlzZWxlY3Q9ImZhbHNlIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+IAotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uMyIgZGVmYXVsdGRhdGE9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkNCIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3kzIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kzIGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiIGRlZmF1bHRkYXRhPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkMXxpZDJ8aWQzIiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTQgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTQgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjUiIGRlZmF1bHRkYXRhPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZDIyIiB3b3Jrc3BhY2VPbmx5PSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5NSBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5NSBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtMiIvPgotICAgICAgIDwvb3BlcmF0aW9uPiAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkuYm9vbGVhbi5vcGVyYXRpb24xIiBkZWZhdWx0ZGF0YT0iZmFsc2UiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWRfYm9vbC4qIiB3b3Jrc3BhY2VPbmx5PSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MmIgYm9vbCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MmIgYm9vbCBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8c2VsZWN0aW9uLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLmJvb2xlYW4ub3BlcmF0aW9uMiIgZGVmYXVsdGRhdGE9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWRfYm9vbGVhbjIiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MyBib29sIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kzIGJvb2wgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPHNlbGVjdGlvbiBpY29uPSJ0cnVlIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5jb21wbGV4Lm9wZXJhdGlvbjEiIGRlZmF1bHRkYXRhPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJzb21lcGFyZW50fCBpZDQiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5NCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5NCBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8Y29tcGxleCBsYXVuY2hDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuVGVzdExhdW5jaENsYXNzIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgIGVuYWJsZWRDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuVGVzdEVuYWJsZWRDbGFzcyIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxxdWlja0ZpeCBwbHVnaW5JZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QiCi0gICAgICAgICAgICAgICAgIGNvZGU9IjEiPgotICAgICAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmFjdGlvbjEiPgotICAgICAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0icXVpY2sgZml4IDEgZm9yIGNvZGUgMSIvPgotICAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmFjdGlvbjIiPgotICAgICAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0icXVpY2sgZml4IDIgZm9yIGNvZGUgMSIvPgotICAgICAgICAgIDwvYWN0aW9uPgotICAgICAgIDwvcXVpY2tGaXg+Ci0gICAgICAgCi0gICAgICAgPHF1aWNrRml4IHBsdWdpbklkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdCIKLSAgICAgICAgICAgICAgICAgY29kZT0iMiI+Ci0gICAgICAgICAgPGFjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuYWN0aW9uMyI+Ci0gICAgICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJxdWljayBmaXggMSBmb3IgY29kZSAyIi8+Ci0gICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgPC9xdWlja0ZpeD4KLSAgICAgPC9zZXJ2aWNlUG9saWN5VUk+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5UZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiOTAzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUFQQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lSZWxhdGlvbnNoaXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotCi1AU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKSAvLyROT04tTkxTLTEkCi1wdWJsaWMgY2xhc3MgTWFpblRlc3RlciBleHRlbmRzIFRlc3RDYXNlCi17ICAKLSAgIAotICAgcHVibGljIHZvaWQgdGVzdEV4dGVuc2lvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgcG9saWN5TGlzdCA9IHBsYXRmb3JtLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIG51bGwgKTsKLSAgICAgCi0gICAgIGZvciggSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogcG9saWN5TGlzdCApCi0gICAgIHsKLSAgICAgICBkaXNwbGF5UG9saWN5Tm9kZSggcG9saWN5ICk7Ci0gICAgIH0gICAKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09IEVudW1lcmF0aW9uczoiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlcnJvcldhcm5FbnVtID0gcGxhdGZvcm0uZ2V0U3RhdGVFbnVtZXJhdGlvbiggIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJFbnVtIGlkOiAiICsgIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBlcnJvcldhcm5FbnVtICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgaWQ6ICIgKyBpdGVtLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgc2hvcnRuYW1lOiAiICsgaXRlbS5nZXRTaG9ydE5hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBsb25nbmFtZTogIiArIGl0ZW0uZ2V0TG9uZ05hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBpc0RlZmF1bHQ6ICIgKyBpdGVtLmlzRGVmYXVsdCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgZGlzcGxheVBvbGljeU5vZGUoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gICB7Ci0gICAgIElTZXJ2aWNlUG9saWN5IHBhcmVudFBvbGljeSA9IHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKTsKLSAgICAgSURlc2NyaXB0b3IgICAgIGRlc2NyaXB0b3IgICA9IHBvbGljeS5nZXREZXNjcmlwdG9yKCk7Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGb3VuZCBwb2xpY3k6ICIgKyBwb2xpY3kuZ2V0SWQoKSArICIgcGFyZW50aWQ6IiArIChwYXJlbnRQb2xpY3kgPT0gbnVsbCA/ICJudWxsIiA6IHBhcmVudFBvbGljeS5nZXRJZCgpKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IHBvbGljeS5nZXRDaGlsZHJlbigpICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgY2hpbGQgaWQ6ICIgKyBjaGlsZC5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgICAKLSAgICAgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzID0gcG9saWN5LmdldFJlbGF0aW9uc2hpcHMoKTsKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggICIgIHJlbGF0aW9uc2hpcHM6IiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBmb3IoIElQb2xpY3lSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwIDogcmVsYXRpb25zaGlwcyApCi0gICAgIHsKLSAgICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHNvdXJjZUxpc3QgICAgID0gcmVsYXRpb25zaGlwLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gdGFyZ2V0TGlzdCAgICAgPSByZWxhdGlvbnNoaXAuZ2V0UmVsYXRlZFBvbGljaWVzKCk7Ci0gICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+ICBzb3VyY2VFbnVtTGlzdCA9IHNvdXJjZUxpc3QuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0gICAgICAgCi0gICAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA6IHNvdXJjZUVudW1MaXN0ICkKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgIiArIGl0ZW0uZ2V0SWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGZvciggSVBvbGljeUVudW1lcmF0aW9uTGlzdCBwb2xpY3lFbnVtTGlzdCA6IHRhcmdldExpc3QgKQotICAgICAgIHsKLSAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lJZCAgICAgICA9IHBvbGljeUVudW1MaXN0LmdldFBvbGljeSgpLmdldElkKCk7Ci0gICAgICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gdGFyZ2V0RW51bUxpc3QgPSBwb2xpY3lFbnVtTGlzdC5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAgICAgIAotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgIHBvbGljeSBpZDogIiArIHBvbGljeUlkICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIAotICAgICAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gdGFyZ2V0SXRlbSA6IHRhcmdldEVudW1MaXN0ICkKLSAgICAgICAgIHsKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgdGFyZ2V0IGVudW0gaWQ6ICIgKyB0YXJnZXRJdGVtLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgfQotICAgICAgIH0KLSAgICAgfQotICAgICAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkRlc2NyaXB0b3I6IiApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgc2hvcnQgbmFtZTogIiArIGRlc2NyaXB0b3IuZ2V0U2hvcnROYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGxvbmcgbmFtZTogIiArIGRlc2NyaXB0b3IuZ2V0TG9uZ05hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgZGVzY3JpcHRpb246ICIgKyBkZXNjcmlwdG9yLmdldERlc2NyaXB0aW9uKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGNvbnRleHQgaGVscDogIiArIGRlc2NyaXB0b3IuZ2V0Q29udGV4dEhlbHBJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBpY29uIHBhdGg6ICIgKyBkZXNjcmlwdG9yLmdldEljb25QYXRoKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGljb24gcGF0aCBidW5kbGUgaWQ6ICIgKyBkZXNjcmlwdG9yLmdldEljb25CdW5kbGVJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiPT09IiApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IHBvbGljeS5nZXRDaGlsZHJlbigpICkKLSAgICAgewotICAgICAgIGRpc3BsYXlQb2xpY3lOb2RlKCBjaGlsZCApOwotICAgICB9ICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RFbnVtZXJhdGlvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDEgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDIgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDMgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBzdGF0ZTEgICAgPSBpZDEuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBzdGF0ZTIgICAgPSBpZDIuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBzdGF0ZTMgICAgPSBpZDMuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtMSAgICAgPSBzdGF0ZTEuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0yICAgICA9IHN0YXRlMi5nZXRDdXJyZW50SXRlbSgpOwotICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbTMgICAgID0gc3RhdGUzLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiVW5leHBlY3RlZCBzaG9ydG5hbWU6IiArIGl0ZW0xLmdldFNob3J0TmFtZSgpLCBpdGVtMS5nZXRTaG9ydE5hbWUoKS5lcXVhbHMoICJpZ25vcmUiKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgYXNzZXJ0VHJ1ZSggIlVuZXhwZWN0ZWQgc2hvcnRuYW1lOiIgKyBpdGVtMi5nZXRTaG9ydE5hbWUoKSwgaXRlbTIuZ2V0U2hvcnROYW1lKCkuZXF1YWxzKCAid2FybiIpICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBhc3NlcnRUcnVlKCAiVW5leHBlY3RlZCBzaG9ydG5hbWU6IiArIGl0ZW0zLmdldFNob3J0TmFtZSgpLCBpdGVtMy5nZXRTaG9ydE5hbWUoKS5lcXVhbHMoICJlcnJvciIpICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJpZDEgdmFsdWU6IiArIGl0ZW0xLmdldFNob3J0TmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiaWQyIHZhbHVlOiIgKyBpdGVtMi5nZXRTaG9ydE5hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RQb2xpY3lTdGF0ZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGlkMSAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgICAgIGVudW1TdGF0ZSA9IGlkMS5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtICA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgaWdub3JlSWQgID0gIm9yZy5lY2xpcHNlLndzdC5pZ25vcmUiOyAvLyROT04tTkxTLTEkCi0gICAgIFN0cmluZyAgICAgICAgICAgICAgICB3YXJuSWQgICAgPSAib3JnLmVjbGlwc2Uud3N0Lndhcm4iOyAvLyROT04tTkxTLTEkCi0gICAgIFN0cmluZyAgICAgICAgICAgICAgICBlcnJvcklkICAgPSAib3JnLmVjbGlwc2Uud3N0LmVycm9yIjsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkRlZmF1bHQgZW51bSBub3Q6IiArIGlnbm9yZUlkLCBlbnVtSXRlbS5nZXRJZCgpLmVxdWFscyggaWdub3JlSWQgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBlbnVtU3RhdGUuc2V0Q3VycmVudEl0ZW0oIHdhcm5JZCApOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIlVwZGF0ZWQgZW51bSBub3Q6IiArIHdhcm5JZCwgZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIHdhcm5JZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBsYXRmb3JtLmRpc2NhcmRDaGFuZ2VzKCk7Ci0gICAgIGVudW1JdGVtID0gZW51bVN0YXRlLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRGlzY2FyZCBlbnVtIG5vdDoiICsgaWdub3JlSWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBpZ25vcmVJZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGVudW1TdGF0ZS5zZXRDdXJyZW50SXRlbSggZXJyb3JJZCApOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBhc3NlcnRUcnVlKCAiRXJyb3IgZW51bSBub3Q6IiArIGVycm9ySWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBlcnJvcklkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBhc3NlcnRUcnVlKCAiRXJyb3IgZW51bSBub3Q6IiArIGVycm9ySWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBlcnJvcklkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcm9qZWN0UHJlZmVyZW5jZXMgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgIAotICAgICB0cnkKLSAgICAgewotICAgICAgIFN0cmluZ1tdICAgICAgICAgICAga2V5cyAgICAgICAgICAgICAgID0gcHJvamVjdFByZWZlcmVuY2VzLmtleXMoKTsKLSAgICAgCi0gICAgICAgZm9yKCBTdHJpbmcga2V5IDoga2V5cyApCi0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiS2V5PSIgKyBrZXkgKyAiIHZhbHVlPSIgKyBwcm9qZWN0UHJlZmVyZW5jZXMuZ2V0KCBrZXksICIiICkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgIH0KLSAgICAgfQotICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgIHsKLSAgICAgICBhc3NlcnRUcnVlKCAiRXhjZXB0aW9uIHRocm93biIgKyBleGMuZ2V0TWVzc2FnZSgpLCBmYWxzZSApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdFVuaXF1ZUlkcygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIHBvbGljeSAgICA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21laWQiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZCIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3kgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZWlkIiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZDEiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWVpZCIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21laWQyIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21laWQxIiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZDMiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWU1NWlkNSIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21lNTVpZDUiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWU1NWlkNSIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21lNTVpZDEiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgfQotIAotICAgCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHZvaWQgdGVzdE9sZFdTSUNvbnRleHQoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgcGxhdGZvcm0gICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIGFwUG9saWN5ICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lhcCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5U3RhdGVFbnVtICAgICAgICAgYXBTdGF0ZSAgICAgPSBhcFBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIHNzYnBQb2xpY3kgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIiApOyAvLyROT04tTkxTLTEkCi0gICAgIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgICBhcENvbnRleHQgICA9IG5ldyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0KCk7Ci0gICAgIFBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCBzc2JwQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQoKTsKLSAgICAgSVdvcmtzcGFjZVJvb3QgICAgICAgICAgIHJvb3QgICAgICAgID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgSVByb2plY3QgICAgICAgICAgICAgICAgIHByb2plY3QgICAgID0gcm9vdC5nZXRQcm9qZWN0KCJUZXN0UHJvamVjdCIpOyAvLyROT04tTkxTLTEkCi0gICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICBpdGVtICAgICAgICA9IG51bGw7Ci0gICAgIAotICAgICB0cnkKLSAgICAgewotICAgICAgIHByb2plY3QuY3JlYXRlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICB9Ci0gICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgIHsKLSAgICAgICBhc3NlcnRUcnVlKCAiQ29yZSBleGNlcHRpb246IiArIGV4Yy5nZXRNZXNzYWdlKCksIGZhbHNlICk7ICAgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICAgIAotICAgICBJUG9saWN5U3RhdGVFbnVtICBhcFByb2pTdGF0ZSAgID0gYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKCBwcm9qZWN0ICk7Ci0gICAgIElQb2xpY3lTdGF0ZUVudW0gIHNzYnBQcm9qU3RhdGUgPSBzc2JwUG9saWN5LmdldFBvbGljeVN0YXRlRW51bSggcHJvamVjdCApOwotICAgICAKLSAgICAgLy8gRW5zdXJlIHRoYXQgcHJvamVjdCBwcmVmZXJlbmNlcyBhcmUgZ290dGVuIGZyb20gdGhlIHdvcmtzcGFjZQotICAgICBhcFN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBhcFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBpdGVtID0gYXBQcm9qU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotICAgICBhc3NlcnRUcnVlKCAiQXAgdmFsdWUgbm90IGlnbm9yZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIGFwU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBhcFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIGl0ZW0gPSBhcFByb2pTdGF0ZS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgIGFzc2VydFRydWUoICJBcCB2YWx1ZSBub3QgcmVxdWlyZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0ICwgdHJ1ZSApOwotICAgICBpdGVtID0gYXBQcm9qU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotICAgICBhc3NlcnRUcnVlKCAiQXAgdmFsdWUgbm90IGluZ29yZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoIHByb2plY3QgKTsKLSAgICAgaXRlbSA9IGFwUHJvalN0YXRlLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIHZhbHVlIG5vdCBpbmdvcmUsIGJ1dCBnb3QgIiArIGl0ZW0sIGl0ZW0uZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBTdHJpbmcgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IGlnbm9yZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFwU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBhcENvbnRleHRWYWx1ZSA9IGFwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgaWdub3JlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCwgZmFsc2UgKTsKLSAgICAgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IGlnbm9yZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhcFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCBwcm9qZWN0ICk7Ci0gICAgIGFwQ29udGV4dFZhbHVlID0gYXBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCBzdWdnZXN0LCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIHByb2plY3QsIHRydWUgKTsKLSAgICAgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgc3NicFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgU3RyaW5nIHNzYnBDb250ZXh0VmFsdWUgPSBzc2JwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiU1NCUCBjb250ZXh0IG5vdCBzdWdnZXN0LCBidXQgIiArIHNzYnBDb250ZXh0VmFsdWUsIHNzYnBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBzc2JwUHJvalN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBzc2JwQ29udGV4dFZhbHVlID0gc3NicENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiU1NCUCBjb250ZXh0IG5vdCByZXF1aXJlLCBidXQgIiArIHNzYnBDb250ZXh0VmFsdWUsIHNzYnBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0TXV0YWJsZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgYXBQb2xpY3kgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaWFwIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICBzc2JwUG9saWN5ICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3Npc3NicCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgd3NpUG9saWN5ICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiUm9vdCB3c2kgcG9saWN5IGlzIG11dGFibGUiLCAhd3NpUG9saWN5LmdldFBvbGljeVN0YXRlKCkuaXNNdXRhYmxlKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiQXAgcG9saWN5IGlzIG5vdCBtdXRhYmxlIiwgYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5pc011dGFibGUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJTU0JQIHBvbGljeSBpcyBub3QgbXV0YWJsZSIsIHNzYnBQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5pc011dGFibGUoKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RDaGlsZENoYW5nZUxpc3RlbmVycygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBDaGlsZENoYW5nZUxpc3RlbmVyICAgbGlzdGVuZXIgPSBuZXcgQ2hpbGRDaGFuZ2VMaXN0ZW5lcigpOwotICAgICAKLSAgICAgcGxhdGZvcm0uYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lciwgZmFsc2UgKTsKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IGZhbHNlOwotICAgICAKLSAgICAgSVNlcnZpY2VQb2xpY3kgcGFyZW50ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgYWRkZWQiLCBsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gZmFsc2U7Ci0gICAgIElTZXJ2aWNlUG9saWN5IGNoaWxkMSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIHBhcmVudCwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgYWRkZWQiLCBsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gZmFsc2U7Ci0gICAgIGxpc3RlbmVyLmNvdW50ICAgPSAwOwotICAgICBJU2VydmljZVBvbGljeSBjaGlsZDIgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBjaGlsZDEsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICBJU2VydmljZVBvbGljeSBjaGlsZDMgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBjaGlsZDIsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGFkZGVkIiwgbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDIiLCBsaXN0ZW5lci5jb3VudCA9PSAyICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gdHJ1ZTsKLSAgICAgbGlzdGVuZXIuY291bnQgICA9IDA7Ci0gICAgIAotICAgICBjaGlsZDIucmVtb3ZlQ2hpbGQoIGNoaWxkMyApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IHJlbW92ZWQiLCAhbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDEiLCBsaXN0ZW5lci5jb3VudCA9PSAxICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gdHJ1ZTsKLSAgICAgbGlzdGVuZXIuY291bnQgICA9IDA7Ci0gICAgIAotICAgICAvLyBTaG91bGQgcmVtb3ZlIHBhcmVudCwgY2hpbGQxLCBhbmQgY2hpbGQyCi0gICAgIHBsYXRmb3JtLnJlbW92ZVNlcnZpY2VQb2xpY3koIHBhcmVudCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IHJlbW92ZWQiLCAhbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDMiLCBsaXN0ZW5lci5jb3VudCA9PSAzICk7Ci0gICAgIAotICAgICBwbGF0Zm9ybS5yZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKCBsaXN0ZW5lciwgZmFsc2UgKTsKLSAgICAgCi0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7ICAgCi0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSB0cnVlOwotICAgICBsaXN0ZW5lci5jb3VudCAgID0gMDsKLSAgICAgCi0gICAgIHBhcmVudCA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICBjaGlsZDEgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBwYXJlbnQsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGNhbGxlZCIsICFsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgaXNhZGRlZCBjaGFuZ2VkIiwgbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDAiLCBsaXN0ZW5lci5jb3VudCA9PSAwICk7Ci0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0ZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgaWQyICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOwotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgdmFsdWUgICAgPSBpZDIuZ2V0UG9saWN5U3RhdGUoKS5nZXRWYWx1ZSggImlkMl9rZXkiICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0ZWQgc3RhdGUgdmFsdWUgdG8gYmUgaWQyX3ZhbHVlLiIsIHZhbHVlLmVxdWFscyggImlkMl92YWx1ZSIgKSApOwotICAgfQotICAgCi0gICBwcml2YXRlIGNsYXNzIENoaWxkQ2hhbmdlTGlzdGVuZXIgaW1wbGVtZW50cyBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcgotICAgewotICAgICBwdWJsaWMgYm9vbGVhbiBjaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOwotICAgICBwdWJsaWMgYm9vbGVhbiBpc0FkZGVkID0gZmFsc2U7Ci0gICAgIHB1YmxpYyBpbnQgICAgIGNvdW50ID0gMDs7Ci0gICAgIAotICAgICBwdWJsaWMgdm9pZCBjaGlsZENoYW5nZShMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZExpc3QsIExpc3Q8Qm9vbGVhbj4gYWRkZWRMaXN0KQotICAgICB7Ci0gICAgICAgY2hpbGRFdmVudE9jY3VyZWQgPSB0cnVlOwotICAgICAgIGlzQWRkZWQgPSBhZGRlZExpc3QuZ2V0KDApOwotICAgICAgIGNvdW50Kys7Ci0gICAgIH0KLSAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVUlUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVUlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhZTU1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblVJVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5BY3Rpdml0eVV0aWxzOwotCi1wdWJsaWMgY2xhc3MgTWFpblVJVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UKLXsgIAotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9ucygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gIG9wZXJhdGlvbnMgICA9IHBsYXRmb3JtVUkuZ2V0QWxsT3BlcmF0aW9ucygpOwotICAgICAKLSAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMgKQotICAgICB7Ci0gICAgICAgZGlzcGxheU9wZXJhdGlvbiggb3BlcmF0aW9uICk7Ci0gICAgIH0gIAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0T3BlcmF0aW9uQ2FjaGUoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICBwbGF0Zm9ybSAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDEgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDIgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDMgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDQgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDFfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDFfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQxICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMSwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQ0ICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDNfaWQ0ICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQxICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMSwgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0MSA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyggaWQxLCB0cnVlICk7Ci0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdDIgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMoIGlkMiwgdHJ1ZSApOwotICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGxpc3QzID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zKCBpZDMsIHRydWUgKTsKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0NCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyggaWQ0LCB0cnVlICk7Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcbkRpc3BsYXkgbGlzdHMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0MSIsIGxpc3QxICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0MiIsIGxpc3QyICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0MyIsIGxpc3QzICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0NCIsIGxpc3Q0ICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGNoZWNrQ29udGVudHMoICJMaXN0MSIsIGxpc3QxLCBuZXcgSVBvbGljeU9wZXJhdGlvbltdeyBvcDJfaWQxLCBvcDRfaWQxIH0gKTsgLy8kTk9OLU5MUy0xJAotICAgICBjaGVja0NvbnRlbnRzKCAiTGlzdDIiLCBsaXN0MiwgbmV3IElQb2xpY3lPcGVyYXRpb25bXXsgb3AxX2lkMiwgb3AyX2lkMiwgb3A0X2lkMiB9ICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgY2hlY2tDb250ZW50cyggIkxpc3QzIiwgbGlzdDMsIG5ldyBJUG9saWN5T3BlcmF0aW9uW117IG9wMV9pZDMsIG9wMl9pZDMsIG9wNF9pZDMgfSApOyAvLyROT04tTkxTLTEkCi0gICAgIGNoZWNrQ29udGVudHMoICJMaXN0NCIsIGxpc3Q0LCBuZXcgSVBvbGljeU9wZXJhdGlvbltdeyBvcDJfaWQ0LCBvcDNfaWQ0IH0gKTsgLy8kTk9OLU5MUy0xJAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0RW5hYmxlZE9wZXJhdGlvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSBwbGF0Zm9ybVVJICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMSAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDIgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQzICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkNCAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBwb2xpY3lMaXN0MSA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIHBvbGljeUxpc3QyID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AxICAgICAgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24zIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkMSApOwotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkMiApOwotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkMyApOwotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkNCApOwotICAgICBwb2xpY3lMaXN0Mi5hZGQoIGlkNCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGVkIG9wZXJhdGlvbiB0byBub3QgYmUgZW5hYmxlZCIsICFvcDEuaXNFbmFibGVkKCBwb2xpY3lMaXN0MSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGVkIG9wZXJhdGlvbiB0byBiZSBlbmFibGVkIiwgb3AxLmlzRW5hYmxlZCggcG9saWN5TGlzdDIgKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RRdWlja0ZpeEFjdGlvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSAgICBwbGF0Zm9ybVVJICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICAgIGlkMSAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU3RhdHVzICAgICAgICAgICAgICAgICAgICBzdGF0dXMxICAgICA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdCIsIDEsICJzb21lIGVycm9yIiwgbnVsbCApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgSVN0YXR1cyAgICAgICAgICAgICAgICAgICAgc3RhdHVzMiAgICAgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QiLCAyLCAic29tZSBlcnJvciIsIG51bGwgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gIGZpeExpc3QxICAgID0gcGxhdGZvcm1VSS5nZXRRdWlja0ZpeGVzKCBzdGF0dXMxICk7Ci0gICAgIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gIGZpeExpc3QyICAgID0gcGxhdGZvcm1VSS5nZXRRdWlja0ZpeGVzKCBzdGF0dXMyICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0aW5nIHR3byBxdWljayBmaXhlcyIsIGZpeExpc3QxLnNpemUoKSA9PSAyICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGlvbiBvbmUgcXVpY2sgZml4IiwgZml4TGlzdDIuc2l6ZSgpID09IDEgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJUXVpY2tGaXhBY3Rpb25JbmZvIGFjdGlvbkluZm8gOiBmaXhMaXN0MSApCi0gICAgIHsKLSAgICAgICBJUXVpY2tGaXhBY3Rpb24gYWN0aW9uID0gYWN0aW9uSW5mby5nZXRBY3Rpb24oKTsKLSAgICAgICBpZDEuc2V0U3RhdHVzKCBzdGF0dXMxICk7Ci0gICAgICAgCi0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBub3QgT0siLCAhaWQxLmdldFN0YXR1cygpLmlzT0soKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgYWN0aW9uLmFjdGlvbiggaWQxICk7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBPayAiLCBpZDEuZ2V0U3RhdHVzKCkuaXNPSygpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgICAKLSAgICAgZm9yKCBJUXVpY2tGaXhBY3Rpb25JbmZvIGFjdGlvbkluZm8gOiBmaXhMaXN0MiApCi0gICAgIHsKLSAgICAgICBJUXVpY2tGaXhBY3Rpb24gYWN0aW9uID0gYWN0aW9uSW5mby5nZXRBY3Rpb24oKTsKLSAgICAgICBpZDEuc2V0U3RhdHVzKCBzdGF0dXMyICk7Ci0gICAgICAgCi0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBub3QgT0siLCAhaWQxLmdldFN0YXR1cygpLmlzT0soKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgYWN0aW9uLmFjdGlvbiggaWQxICk7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBPayAiLCBpZDEuZ2V0U3RhdHVzKCkuaXNPSygpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0QWN0aXZpdGllc0ZpbHRlcigpCi0gICB7Ci0gICAgIElGaWx0ZXIgICAgICAgICAgICAgICAgICAgIGFjdGl2aXRpZXNGaWx0ZXIgPSBBY3Rpdml0eVV0aWxzLmdldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgIHBsYXRmb3JtICAgICAgICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgICAgcG9saWN5TGlzdCAgICAgICA9IHBsYXRmb3JtLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIGFjdGl2aXRpZXNGaWx0ZXIgKTsKLSAgICAgICAgIAotICAgICBkaXNwbGF5UG9saWNpZXMoIHBvbGljeUxpc3QgKTsKLSAgIH0KLSAgIAotICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRPcGVyYXRpb25zTGlzdCgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgIHBsYXRmb3JtICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgcGxhdGZvcm1VSSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMSAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMiAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMyAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkNCAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQ0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMV9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb24xIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMV9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb24xIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDEgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQxLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDQgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wM19pZDQgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24zIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDEgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQxLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIGlkTGlzdDEgICAgPSBudWxsOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBpZExpc3QyICAgID0gbnVsbDsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgaWRMaXN0MyAgICA9IG51bGw7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIGlkTGlzdDQgICAgPSBudWxsOwotICAgICAKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3QxID0gbnVsbDsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3QyID0gbnVsbDsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3QzID0gbnVsbDsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3Q0ID0gbnVsbDsKLSAgICAgCi0gICAgIGNoZWNrTGlzdDEgPSBsbCggbChvcDJfaWQxKSwgbChvcDRfaWQxKSApOwotICAgICBjaGVja0xpc3QyID0gbGwoIGwob3AxX2lkMiksIGwob3AyX2lkMSwgb3AyX2lkMiksIGwob3A0X2lkMSwgb3A0X2lkMikgKTsKLSAgICAgY2hlY2tMaXN0MyA9IGxsKCBsKG9wMV9pZDIsIG9wMV9pZDMpLCBsKG9wMl9pZDEsIG9wMl9pZDIsIG9wMl9pZDMpLCBsKG9wNF9pZDEsIG9wNF9pZDIsIG9wNF9pZDMpICk7Ci0gICAgIGNoZWNrTGlzdDQgPSBsbCggbChvcDFfaWQyLCBvcDFfaWQzKSwgbChvcDJfaWQxLCBvcDJfaWQyLCBvcDJfaWQzLCBvcDJfaWQ0KSwgbChvcDNfaWQ0KSwgbChvcDRfaWQxLCBvcDRfaWQyLCBvcDRfaWQzKSApOwotICAgICAKLSAgICAgaWRMaXN0MSA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEgfSApOwotICAgICBpZExpc3QyID0gQXJyYXlzLmFzTGlzdCggbmV3IElTZXJ2aWNlUG9saWN5W117IGlkMSwgaWQyIH0gKTsKLSAgICAgaWRMaXN0MyA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEsIGlkMiwgaWQzIH0gKTsKLSAgICAgaWRMaXN0NCA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEsIGlkMiwgaWQzLCBpZDQgfSApOwotICAgICAKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcExpc3QxID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggaWRMaXN0MSwgdHJ1ZSApOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wTGlzdDIgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KCBpZExpc3QyLCB0cnVlICk7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gb3BMaXN0MyA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3QoIGlkTGlzdDMsIHRydWUgKTsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcExpc3Q0ID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggaWRMaXN0NCwgdHJ1ZSApOwotICAgICAKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0MSIsIG9wTGlzdDEsIGNoZWNrTGlzdDEgKTsKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0MiIsIG9wTGlzdDIsIGNoZWNrTGlzdDIgKTsKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0MyIsIG9wTGlzdDMsIGNoZWNrTGlzdDMgKTsKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0NCIsIG9wTGlzdDQsIGNoZWNrTGlzdDQgKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGxsKCBMaXN0PElQb2xpY3lPcGVyYXRpb24+Li4uIG9wTGlzdCApCi0gICB7Ci0gICAgIHJldHVybiBBcnJheXMuYXNMaXN0KCBvcExpc3QgKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGwoIElQb2xpY3lPcGVyYXRpb24uLi4gb3BMaXN0ICkKLSAgIHsKLSAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoIG9wTGlzdCApOwotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgdmVyaWZ5TGlzdHMoIFN0cmluZyBsaXN0TmFtZSwgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBsaXN0MSwgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBsaXN0MiApCi0gICB7Ci0gICAgIGFzc2VydFRydWUoIGxpc3ROYW1lICsgIiBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUuIiwgbGlzdDEuc2l6ZSgpID09IGxpc3QyLnNpemUoKSApOwotICAgICAgICAgICAgIAotICAgICBmb3IoIGludCBsaXN0SW5kZXggPSAwIDsgbGlzdEluZGV4IDwgbGlzdDEuc2l6ZSgpOyBsaXN0SW5kZXgrKyApCi0gICAgIHsKLSAgICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeUxpc3QxID0gbGlzdDEuZ2V0KCBsaXN0SW5kZXggKTsKLSAgICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeUxpc3QyID0gZmluZExpc3QoIHBvbGljeUxpc3QxLmdldCgwKS5nZXRJZCgpLCBsaXN0MiApOwotICAgICAgIAotICAgICAgIGFzc2VydFRydWUoIGxpc3ROYW1lICsgIiBuZXN0ZWQgbGlzdCBhdCBpbmRleCAiICsgbGlzdEluZGV4ICsgIiBpcyBub3QgdGhlIHNhbWUgc2l6ZS4iLCBwb2xpY3lMaXN0MS5zaXplKCkgPT0gcG9saWN5TGlzdDIuc2l6ZSgpICk7Ci0gICAgICAgCi0gICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBvbGljeUxpc3QxLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgewotICAgICAgICAgSVBvbGljeU9wZXJhdGlvbiBvcDEgPSBwb2xpY3lMaXN0MS5nZXQoIGluZGV4ICk7Ci0gICAgICAgICAKLSAgICAgICAgIGFzc2VydFRydWUoIGxpc3ROYW1lICsgIiBvcGVyYXRpb24gbm90IGZvdW5kIiwgZmluZE9wKCBvcDEsIHBvbGljeUxpc3QyICkgKTsKLSAgICAgICB9Ci0gICAgIH0gIAotICAgfQotICAKLSAgIHByaXZhdGUgYm9vbGVhbiBmaW5kT3AoIElQb2xpY3lPcGVyYXRpb24gb3AsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdCApCi0gICB7Ci0gICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgIAotICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gZm91bmRPcCA6IGxpc3QgKQotICAgICB7Ci0gICAgICAgaWYoIG9wID09IGZvdW5kT3AgKQotICAgICAgIHsKLSAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIHJldHVybiByZXN1bHQ7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBmaW5kTGlzdCggU3RyaW5nIGlkLCBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IHNlYXJjaExpc3QgKQotICAgewotICAgICBmb3IoIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5TGlzdCA6IHNlYXJjaExpc3QgKQotICAgICB7Ci0gICAgICAgaWYoIHBvbGljeUxpc3QuZ2V0KDApLmdldElkKCkuZXF1YWxzKCBpZCApICkKLSAgICAgICB7Ci0gICAgICAgICByZXR1cm4gcG9saWN5TGlzdDsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0IG5vdCBmb3VuZCBmb3IgaWQiICsgaWQsIGZhbHNlICk7Ci0gICAgIHJldHVybiBudWxsOwotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgZGlzcGxheVBvbGljaWVzKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY3lMaXN0ICkKLSAgIHsKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTGlzdGluZyBzZXJ2aWNlIHBvbGljaWVzOiIgKTsKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBwb2xpY3kgOiBwb2xpY3lMaXN0ICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgIiArIHBvbGljeS5nZXRJZCgpICk7Ci0gICAgIH0KLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGRpc3BsYXlMaXN0KCBTdHJpbmcgc2V0TmFtZSwgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25MaXN0ICkKLSAgIHsKLSAgICAgU3lzdGVtLm91dC5wcmludCggc2V0TmFtZSArICI6ICIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IG9wZXJhdGlvbkxpc3QgKQotICAgICB7Ci0gICAgICAgU3lzdGVtLm91dC5wcmludCggb3BlcmF0aW9uLmdldElkKCkgKyAiLCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGNoZWNrQ29udGVudHMoIFN0cmluZyBzZXROYW1lLCBMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvblNldCwgSVBvbGljeU9wZXJhdGlvbltdIG9wZXJhdGlvbkFycmF5ICkKLSAgIHsKLSAgICAgYXNzZXJ0VHJ1ZSggIlNldCBhbmQgYXJyYXkgc2l6ZXMgZG9uJ3QgbWF0Y2ggZm9yICIgKyBzZXROYW1lICsgIi4iLCBvcGVyYXRpb25TZXQuc2l6ZSgpID09IG9wZXJhdGlvbkFycmF5Lmxlbmd0aCApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9uQXJyYXkgKQotICAgICB7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggc2V0TmFtZSArICIgZG9lcyBub3QgY29udGFpbiBvcGVyYXRpb24gIiArIG9wZXJhdGlvbi5nZXRJZCgpICsgIi4iLCBvcGVyYXRpb25TZXQuY29udGFpbnMoIG9wZXJhdGlvbiApICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICB9Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBkaXNwbGF5T3BlcmF0aW9uKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiApCi0gICB7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHplcm9Qb2xpY2llcyA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IG1hbnlQb2xpY2llcyA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIG51bGwgKTsKLSAgICAgSURlc2NyaXB0b3IgICAgICAgICAgIGRlc2NyaXB0b3IgICA9IG9wZXJhdGlvbi5nZXREZXNjcmlwdG9yKCk7Ci0gICAgIFN0cmluZyAgICAgICAgICAgICAgIHNob3J0TmFtZSAgICA9IGRlc2NyaXB0b3IuZ2V0U2hvcnROYW1lKCk7Ci0gICAgIFN0cmluZyAgICAgICAgICAgICAgIGxvbmdOYW1lICAgICA9IGRlc2NyaXB0b3IuZ2V0TG9uZ05hbWUoKTsKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIk9wZXJhdGlvbiBpZDogIiArIG9wZXJhdGlvbi5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIHNob3J0IG5hbWU6ICIgKyBzaG9ydE5hbWUgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgbG9uZyBuYW1lOiAiICsgbG9uZ05hbWUgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgcGF0dGVybjogIiArIG9wZXJhdGlvbi5nZXRQb2xpY3lJZFBhdHRlcm4oKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBpc0VuYWJsZWQgemVybzogIiArIG9wZXJhdGlvbi5pc0VuYWJsZWQoIHplcm9Qb2xpY2llcyApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGlzRW5hYmxlZCBtYW55OiAiICsgb3BlcmF0aW9uLmlzRW5hYmxlZCggbWFueVBvbGljaWVzICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgc3dpdGNoKCBvcGVyYXRpb24uZ2V0T3BlcmF0aW9uS2luZCgpICkKLSAgICAgewotICAgICAgIGNhc2Ugc2VsZWN0aW9uOgotICAgICAgIHsKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBzZWxlY3Rpb246IHRydWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGNhc2UgaWNvblNlbGVjdGlvbjoKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgc2VsZWN0aW9uIGljb246IHRydWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGNhc2UgZW51bWVyYXRpb246Ci0gICAgICAgeyAgICAgIAotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGVudW1lcmF0aW9uIGlkOiAiICsgb3BlcmF0aW9uLmdldEVudW1lcmF0aW9uSWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICBicmVhazsgIAotICAgICAgIH0KLSAgICAgICAKLSAgICAgICBjYXNlIGNvbXBsZXg6Ci0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGNvbXBsZXg6IHRydWUiICk7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICBvcGVyYXRpb24ubGF1bmNoT3BlcmF0aW9uKCB6ZXJvUG9saWNpZXMgKTsKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWZjZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1NlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiBpbXBsZW1lbnRzIElTdGFydHVwIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS50ZXN0IjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvciBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvcigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgICAKLSAgICBnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpCi0gIHsKLSAgICAvLyBETyBub3RoaW5nLiAgQWxsIHdlIHdhbnQgdG8gZG8gaXMgZ2V0IHRoZSBwbHVnaW4gbG9hZGVkIGF0IFVJIHN0YXJ0IHRpbWUuCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0RW5hYmxlZENsYXNzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdEVuYWJsZWRDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmI4ZDMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0RW5hYmxlZENsYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0RW5hYmxlZENsYXNzIGltcGxlbWVudHMgSUVuYWJsZU9wZXJhdGlvbgotewotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIElzIGVuYWJsZWQgb3BlcmF0aW9uIGNhbGxlZC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RMYXVuY2hDbGFzcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RMYXVuY2hDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzk0NWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0TGF1bmNoQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUxhdW5jaE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RMYXVuY2hDbGFzcyBpbXBsZW1lbnRzIElMYXVuY2hPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgdm9pZCBsYXVuY2goTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcykKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBMYXVuY2ggY2xhc3MgY2FsbGVkLiIgKTsgLy8kTk9OLU5MUy0xJAotICB9ICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24xLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGMzNGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24xLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgYWN0aW9uMSBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGFjdGlvbihJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBwb2xpY3kuc2V0U3RhdHVzKCBTdGF0dXMuT0tfU1RBVFVTICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTNlODU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgYWN0aW9uMiBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGFjdGlvbihJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBwb2xpY3kuc2V0U3RhdHVzKCBTdGF0dXMuT0tfU1RBVFVTICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24zLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQ5NzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgYWN0aW9uMyBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGFjdGlvbihJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBwb2xpY3kuc2V0U3RhdHVzKCBTdGF0dXMuT0tfU1RBVFVTICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9pbnRlcm5hbC9wcm9wZXJ0aWVzL0ZPT0ZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2ludGVybmFsL3Byb3BlcnRpZXMvRk9PRmlsZVByb3BlcnR5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ODNlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2ludGVybmFsL3Byb3BlcnRpZXMvRk9PRmlsZVByb3BlcnR5VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmludGVybmFsLnByb3BlcnRpZXM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuUHJvcGVydHlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGT09GaWxlUHJvcGVydHlUZXN0ZXIgZXh0ZW5kcyBQcm9wZXJ0eVRlc3RlcgotewotICBwdWJsaWMgYm9vbGVhbiB0ZXN0KE9iamVjdCByZWNlaXZlciwgU3RyaW5nIHByb3BlcnR5LCBPYmplY3RbXSBhcmdzLCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYoIHJlY2VpdmVyIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBoYXNGT09maWxlKCAoSUNvbnRhaW5lcikgcmVjZWl2ZXIgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0ZPT2ZpbGUoIElDb250YWluZXIgY29udGFpbmVyICkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ICAgPSBmYWxzZTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2VbXSBjaGlsZHJlbiA9IGNvbnRhaW5lci5tZW1iZXJzKCk7Ci0gICAgICAKLSAgICAgIGZvciggSVJlc291cmNlIGNoaWxkIDogY2hpbGRyZW4gKQotICAgICAgewotICAgICAgICBpZiggY2hpbGQgaW5zdGFuY2VvZiBJQ29udGFpbmVyICkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGhhc0ZPT2ZpbGUoIChJQ29udGFpbmVyKSBjaGlsZCApOwotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGNoaWxkIGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gY2hpbGQuZ2V0RmlsZUV4dGVuc2lvbigpLmVxdWFsc0lnbm9yZUNhc2UoICJmb28iICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgc2luZ2xlIGZvbyBmaWxlIHdlIHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAgICBpZiggcmVzdWx0ICkgYnJlYWs7Ci0gICAgICB9ICAgIAotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBleGNlcHRpb24gYW5kIHJldHVybiBmYWxzZS4gIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5OGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc5NjhiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKLWphdmFDb21waWxlci50ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWYyYmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkMTA0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mjk6MTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODdhOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jTW9uIEFwciAyNCAxMDoyNzo1NCBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MQotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkxOTBhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMi5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSIzLjguMCIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbCwKLSBvcmcuZWNsaXBzZS5qZmFjZSwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGEsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3QsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzFiOTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICByZWFkbWUudHh0LFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotamFycy5jb21waWxlLm9yZGVyID0gdGVzdHMuamFyCi1zb3VyY2UudGVzdHMuamFyID0gdGVzdHMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvbG9jYXRvci90ZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkMzFjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJBcmVhU2VydmljZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6ZGltZW5zaW9ucyIvPgotICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJkaW1lbnNpb25zIj4KLSAgICAgIAk8eHNkOnNlcXVlbmNlPgotICAgICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0id2lkdGgiIHR5cGU9InhzZDpmbG9hdCI+PC94c2Q6ZWxlbWVudD4KLSAgICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImhlaWdodCIgdHlwZT0ieHNkOmZsb2F0Ij48L3hzZDplbGVtZW50PgotICAgICAgCTwveHNkOnNlcXVlbmNlPgotICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYVJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczphcmVhIiBuYW1lPSJhcmVhIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6cGFyYW1ldGVycyIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQXJlYVNlcnZpY2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6Q2FsY3VsYXRlUmVjdEFyZWFSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOkNhbGN1bGF0ZVJlY3RBcmVhUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQXJlYVNlcnZpY2VTT0FQIiB0eXBlPSJ0bnM6QXJlYVNlcnZpY2UiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFyZWFTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpBcmVhU2VydmljZVNPQVAiIG5hbWU9IkFyZWFTZXJ2aWNlU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmciLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMi8zL3Rlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yLzMvdGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGQ2MmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yLzMvdGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIAotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnRlc3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dHhzZD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIgotCXhtbG5zOnR4c2QyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QyIj4KLQotCTx3c2RsOnR5cGVzPgotCQk8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gCQkgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZDIiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uLy4uLzJhL3Rlc3QueHNkIiAvPgotCQkJPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vLi4vdGVzdC54c2QiIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9ImlucHV0IiBlbGVtZW50PSJ0eHNkOlRlc3RTdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Im91dHB1dCIgZWxlbWVudD0idHhzZDI6VGVzdFN0cmluZzIiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlRlc3RQb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idGVzdDpOZXdPcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idGVzdDpOZXdPcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJOZXdCaW5kaW5nIiB0eXBlPSJ0ZXN0OlRlc3RQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0L05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS9zdGFydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3N0YXJ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjI3YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3N0YXJ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc3RhcnQvIgkJCi0JeG1sbnM6dGVzdD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgkgCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCi0JPHdzZGw6aW1wb3J0IGxvY2F0aW9uPSIuLi8yLzMvdGVzdC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iLz4KLQkKLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vdGVzdC54c2QiIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQkKLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlN0YXJ0Ij4KLQkJPHdzZGw6cG9ydCBuYW1lPSJOZXdQb3J0IiBiaW5kaW5nPSJ0ZXN0Ok5ld0JpbmRpbmciPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iPjwvc29hcDphZGRyZXNzPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLQkKLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS90ZXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS90ZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2ZmZlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvdGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIAotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZDIiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgIDxlbGVtZW50IG5hbWU9IlRlc3RTdHJpbmcyIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci90ZXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvdGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZTY0NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci90ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgCi0JeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIiAKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iVGVzdFN0cmluZyIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MjBmYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MzNlYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDI0ICAgMTM4MDYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdTVCBXZWIgU2VydmljZXMgVGVzdAotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDUyOWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5jb250cmlidXRpb24xIj4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iUG9wdXAgdGVzdCBtZW51IgotICAgICAgICAgICAgICAgcGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLm1lbnUxIj4KLSAgICAgICAgICAgIDxzZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgIG5hbWU9Imdyb3VwMSI+Ci0gICAgICAgICAgICA8L3NlcGFyYXRvcj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSJQb3B1cCB0ZXN0IGFjdGlvbiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5OZXdBY3Rpb24iCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAubWVudTEvZ3JvdXAxIgotICAgICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5uZXdBY3Rpb24iPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcmVhZG1lLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWRlMDM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1DdXJyZW50bHkgbm8gYXJndW1lbnRzIHRvIGJlIHBhc3NlZCBpbi4gIFNlZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMgZm9yIGFkZGluZwotYXJndW1lbnRzIHdoZW4gcnVubmluZyB0ZXN0IHN1aXRlIChpLmUuIHNlcnZlciBpbnN0YWxsIGxvY2F0aW9uLi4uKQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjkxYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDwhLS0gY29tbWVudGVkIGZvciBub3cgdW50aWwgc3VjaCBhIHRpbWUgYXMgd2UgbmVlZCB0byBjYWxsIGEgc2VydmVyIGZvciB3c3QgdGVzdHMgLS0+Ci0gIDwhLS08cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPSR7dGVzdERpcn0vJHt0b21jYXQ1MERpcn0iLz4gLS0+Ci0JCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndzdC13cy1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X3dzX2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LXdzLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0LkFsbFdTSlVuaXRUZXN0cyIgLz4KLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci08IS0tICAgCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgCS0tPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0L3BvcHVwL05ld0FjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0L3BvcHVwL05ld0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmExYmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdC9wb3B1cC9OZXdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU9iamVjdEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTmV3QWN0aW9uIGltcGxlbWVudHMgSU9iamVjdEFjdGlvbkRlbGVnYXRlIHsKLQotICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gIAotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBY3Rpb24xLgotCSAqLwotCXB1YmxpYyBOZXdBY3Rpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJT2JqZWN0QWN0aW9uRGVsZWdhdGUjc2V0QWN0aXZlUGFydChJQWN0aW9uLCBJV29ya2JlbmNoUGFydCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVQYXJ0KElBY3Rpb24gYWN0aW9uLCBJV29ya2JlbmNoUGFydCB0YXJnZXRQYXJ0KSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjcnVuKElBY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSAKLQl7Ci0JICBEeW5hbWljV2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljV2l6YXJkKCk7Ci0JICBXaXphcmREaWFsb2cgIGRpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coIG51bGwsIHdpemFyZCApOwotCSAgCi0JICB0cnkKLQkgIHsKLQkgICAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSggIm9yZy5lY2xpcHNlLndzdC53cy50ZXN0cyIgKTsKLQkgICAgd2l6YXJkLnNldEluaXRpYWxEYXRhKCAib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiLCBidW5kbGUsICJpY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIiwgIlBldGVyIHRpdGxlIiApOwotCSAgICB3aXphcmQuaW5pdCggUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKSwgc2VsZWN0aW9uICk7Ci0JICAgIAotCSAgICBkaWFsb2cub3BlbigpOwotCSAgfQotCSAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLQkgIHsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotCX0KLQotCS8qKgotCSAqIEBzZWUgSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiwgSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgCi0JewotCSAgaWYoIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICB0aGlzLnNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbiApIHNlbGVjdGlvbjsKLSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL2RhdGEvTG9jYXRvcldvcmtzcGFjZVNldHVwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL2RhdGEvTG9jYXRvcldvcmtzcGFjZVNldHVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTVmYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9kYXRhL0xvY2F0b3JXb3Jrc3BhY2VTZXR1cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGE7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50cm8uSUludHJvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKiAgU2V0cyB1cCBsb2NhdG9yIHRlc3QgZGF0YSAtIHVzZXMgc2FtZSBkYXRhIGZpbGUgYnV0IHJlbmFtZXMgaXQgZm9yIGVhY2ggdXNlCi0gKiAgV29ya3NwYWNlIHN0cnVjdHVyZSBjcmVhdGVkIGxvb2tzIGxpa2UgdGhpczoKLSAqICAKLSAqICByb290Ci0gKiAgLS1wcm9qZWN0MQotICogICAgfC0tLS1mb2xkZXIxCi0gKiAgICAgICAgIHwtLS0tLWZvbGRlcjIKLSAqICAgICAgICAgICAgICAgfC0tLS0tLW9uZS53c2RsCi0gKiAgICAgICAgIHwtLS0tLXR3by53c2RsCi0gKiAgICB8LS0tLWZvbGRlcjMKLSAqICAgICAgICAgfC0tLS0tdGhyZWUud3NkbAotICogICAgICAgICB8LS0tLS1mb3VyLndzZGwgCi0gKiAgLS1wcm9qZWN0MgotICogICAgfC0tLS1maXZlLndzZGwKLSAqICAgIHwtLS0tZm9sZGVyNAotICogICAgfC0tLS1mb2xkZXI1Ci0gKiAgICAgICAgIHwtLS0tLXNpeC53c2RsCi0gKiAgLS1wcm9qZWN0MwotICogICAgfC0tLS1vbmUueG1sCi0gKi8KLQotcHVibGljIGNsYXNzIExvY2F0b3JXb3Jrc3BhY2VTZXR1cCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPSkVDVDFfTkFNRSA9ICJQcm9qZWN0MSI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVIxX05BTUUgPSAiRm9sZGVyMSI7ICAvL2NvbnRhaW5zIFdTREwgZmlsZSBhbmQgb25lIGZvbGRlciAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjJfTkFNRSA9ICJGb2xkZXIyIjsgIC8vbmVzdGVkIGluIGZvbGRlciAxIGFuZCBjb250YWlucyBXU0RMIGZpbGUKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjNfTkFNRSA9ICJGb2xkZXIzIjsgIC8vY29udGFpbnMgdHdvIFdTREwgZmlsZXMKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1QyX05BTUUgPSAiUHJvamVjdDIiOyAvL2NvbnRhaW5zIFdTREwgZmlsZSBhbmQgdHdvIGZvbGRlcnMKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjRfTkFNRSA9ICJGb2xkZXI0IjsgIC8vY29udGFpbnMgbm8gV1NETAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSNV9OQU1FID0gIkZvbGRlcjUiOyAgLy9jb250YWlucyBvbmUgV1NETCBmaWxlCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9KRUNUM19OQU1FID0gIlByb2plY3QzIjsgIC8vY29udGFpbnMgbm8gV1NETCBmaWxlcyBidXQgb25lIFhNTCBmaWxlCi0JICAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX09ORSA9ICJvbmUud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9UV08gPSAidHdvLndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfVEhSRUUgPSAidGhyZWUud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9GT1VSID0gImZvdXIud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9GSVZFID0gImZpdmUud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9TSVggPSAic2l4LndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgWE1MRklMRV9PTkUgPSAib25lLlhNTCI7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFDVFVBTF9URVNURklMRVBBVEggPSAiZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbCI7Ci0JICAJICAKLQkgIHByaXZhdGUgSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKExvY2F0b3JXb3Jrc3BhY2VTZXR1cC5jbGFzcywgIkxvY2F0b3JXb3Jrc3BhY2VTZXR1cCIpOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBjbG9zZUludHJvKCkKLQkgIHsKLQkgICAgSUludHJvTWFuYWdlciBpbnRyb01hbmFnZXIgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEludHJvTWFuYWdlcigpOwotCSAgICBJSW50cm9QYXJ0IGludHJvUGFydCA9IGludHJvTWFuYWdlci5nZXRJbnRybygpOwotCSAgICBpZiAoaW50cm9QYXJ0ICE9IG51bGwpCi0JICAgICAgaW50cm9NYW5hZ2VyLmNsb3NlSW50cm8oaW50cm9QYXJ0KTsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JICAgIElQcm9qZWN0IHNpbXBsZVByb2plY3QgPSByb290LmdldFByb2plY3QobmFtZSk7Ci0JICAgIHNpbXBsZVByb2plY3QuY3JlYXRlKG51bGwpOwotCSAgICBzaW1wbGVQcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICAgIHJldHVybiBzaW1wbGVQcm9qZWN0OwotCSAgfQotCi0JICBwcm90ZWN0ZWQgSUZvbGRlciBjcmVhdGVGb2xkZXIoSUNvbnRhaW5lciBwYXJlbnQsIFN0cmluZyBmb2xkZXJOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgewotCQlJRm9sZGVyIGZvbGRlcjEgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLSAgICAgICAgZm9sZGVyMS5jcmVhdGUoZmFsc2UsIHRydWUsIG51bGwpOwotCSAgICByZXR1cm4gZm9sZGVyMTsKLQkgIH0KLQotCSAgCi0JICBwcm90ZWN0ZWQgdm9pZCBjb3B5RmlsZShJQ29udGFpbmVyIHByb2plY3QsIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLQkgIHsKLQkJICAKLQkgICAgSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZShuZXcgUGF0aChkZXN0KSk7Ci0JICAgIGZpbGUuY3JlYXRlKFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShzb3VyY2UpLm9wZW5TdHJlYW0oKSwgdHJ1ZSwgbnVsbCk7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKGZpbGUuZXhpc3RzKCkpOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBqb2luQXV0b0J1aWxkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgIHsKLQkgICAgYm9vbGVhbiBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0JICAgIHdoaWxlIChpbnRlcnJ1cHRlZCkKLQkgICAgewotCSAgICAgIHRyeQotCSAgICAgIHsKLQkgICAgICAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0JICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlOwotCSAgICAgIH0KLQkgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkgICAgICB7Ci0JICAgICAgICBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHRlc3RTZXR1cCgpIHRocm93cyBFeGNlcHRpb24KLQkgIHsKLQkJICB0cnl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tIGxvY2F0b3IgZGF0YSBzZXR1cCBzdGFydGluZyIpOwotCSAgICBjbG9zZUludHJvKCk7Ci0KLQkgICAgSVByb2plY3QgcHJvamVjdDEgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1QxX05BTUUpOwotCSAgICBJRm9sZGVyIGZvbGRlcjEgPSBjcmVhdGVGb2xkZXIocHJvamVjdDEsIEZPTERFUjFfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjEsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX1RXTyk7Ci0JICAgIElGb2xkZXIgZm9sZGVyMiA9IGNyZWF0ZUZvbGRlcihmb2xkZXIxLCBGT0xERVIyX05BTUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXIyLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9PTkUpOwotCSAgICBJRm9sZGVyIGZvbGRlcjMgPSBjcmVhdGVGb2xkZXIocHJvamVjdDEsIEZPTERFUjNfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjMsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX1RIUkVFKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMywgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfRk9VUik7Ci0JICAgIAotCSAgICBJUHJvamVjdCBwcm9qZWN0MiA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVDJfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKHByb2plY3QyLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9GSVZFKTsKLQkgICAgY3JlYXRlRm9sZGVyKHByb2plY3QyLCBGT0xERVI0X05BTUUpOyAgLy9mb2xkZXIgd2l0aCBubyBjb250ZW50Ci0JICAgIElGb2xkZXIgZm9sZGVyNSA9IGNyZWF0ZUZvbGRlcihwcm9qZWN0MiwgRk9MREVSNV9OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyNSwgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfU0lYKTsKLQkgICAgSVByb2plY3QgcHJvamVjdDMgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1QzX05BTUUpOwotCSAgICBjb3B5RmlsZShwcm9qZWN0MywgQUNUVUFMX1RFU1RGSUxFUEFUSCwgWE1MRklMRV9PTkUpOwotCQkgIH0KLQkJICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgewotCQkJICBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkgIH0KLQkgCi0JCS8vY29kZSB0byBjaGVjayB3b3Jrc3BhY2Ugc2V0IHVwIC0gZGVidWcKLQkJLypEYXRhUmVzb3VyY2VWaXNpdG9yIHZpc2l0b3IgPSBuZXcgRGF0YVJlc291cmNlVmlzaXRvcigpOwotCSAgICByb290LmFjY2VwdCh2aXNpdG9yKTsKLQkgICAgdmlzaXRvci52aXNpdChyb290KTsqLwotCSAgICAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0gbG9jYXRvciBkYXRhIHNldHVwIGNvbXBsZXRlIik7Ci0JICB9Ci0JCi0JcHJvdGVjdGVkIGNsYXNzIERhdGFSZXNvdXJjZVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VWaXNpdG9yCi0JewotICAgIAlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2UgcmVzb3VyY2UpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLSAgICAJCWlmICgocmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgfHwgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikpCi0gICAgCQl7Ci0gICAgCQkgIFN5c3RlbS5vdXQucHJpbnRsbigidmlzaXRpbmcgIiArIHJlc291cmNlLmdldE5hbWUoKSk7ICAgIAkJICAKLSAgICAJCX0KLSAgICAJCWVsc2UgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgCQl7Ci0gICAgCQkJU3lzdGVtLm91dC5wcmludGxuKCJmb3VuZCBmaWxlICIgKyByZXNvdXJjZS5nZXROYW1lKCkpOyAgICAJCQkKLSAgICAJCX0KLSAgICAJCXJldHVybiB0cnVlOwotICAgIAl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTZiNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGNjZGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5kYXRhLkxvY2F0b3JXb3Jrc3BhY2VTZXR1cDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFJlc3VsdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdG8gcnVuIGFsbCB0aGUgdW5pdHRlc3QgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxXU0pVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAvKioKLSAgICogTWV0aG9kIHBhcnNlQXJncy4KLSAgICogCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VBcmdzKE9iamVjdCBhcmdzKQotICB7Ci0gICAgLy8gdHlwaWNpYWxseSBhcmdzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsCi0gICAgLy8gbm90IHN1cmUgd2hlbiBpdCB3b3VsZG4ndCBiZS4KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBuZXcgQWxsV1NKVW5pdFRlc3RzKCkucnVuTWFpbihhcmdzKTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgcnVuTWFpbihPYmplY3QgYXJncykKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIFRlc3RSdW5uZXIgdGVzdFJ1bm5lciA9IG51bGw7Ci0KLSAgICAgIHBhcnNlQXJncyhhcmdzKTsKLQotICAgICAgdGVzdFJ1bm5lciA9IG5ldyBUZXN0UnVubmVyKFN5c3RlbS5vdXQpOwotIAotCi0gICAgICBUZXN0IHN1aXRlID0gc3VpdGUoKTsKLSAgICAgIFRlc3RSZXN1bHQgdGVzdFJlc3VsdCA9IHRlc3RSdW5uZXIuZG9SdW4oc3VpdGUsIGZhbHNlKTsKLSAgICAgIHByaW50SGVhZGVyKHRlc3RSZXN1bHQpOyAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gLy9hZGQgdW5pdCB0ZXN0cyB0byBzdWl0ZSBoZXJlLi4uCi0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIExvY2F0b3JXb3Jrc3BhY2VTZXR1cC5zdWl0ZSgpKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggV2ViU2VydmljZUZpbmRlclRlc3RzLnN1aXRlKCkpOwotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBXU0RMQ29waWVyVGVzdHMuc3VpdGUoKSk7Ci0gICAgcmV0dXJuIHRlc3RTdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludHMgdGhlIGhlYWRlciBvZiB0aGUgcmVwb3J0Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcmludEhlYWRlcihUZXN0UmVzdWx0IHJlc3VsdCkKLSAgewotICAgIGlmIChyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludCgiT0siKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICgiICsgcmVzdWx0LnJ1bkNvdW50KCkgKyAiIHRlc3RzKSIpOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTFVSRVMhISEiKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlRlc3RzIHJ1bjogIgotICAgICAgICAgICsgcmVzdWx0LnJ1bkNvdW50KCkKLSAgICAgICAgICArICIsICBGYWlsdXJlczogIgotICAgICAgICAgICsgcmVzdWx0LmZhaWx1cmVDb3VudCgpCi0gICAgICAgICAgKyAiLCAgRXJyb3JzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZXJyb3JDb3VudCgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNmVmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLQotLyoqCi0gKiBNaW5pbWFsIGFwcCB0byBydW4gYXMgRWNsaXBzZSAiYXBwbGljYXRpb24iCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hUZXN0IGltcGxlbWVudHMgSVBsYXRmb3JtUnVubmFibGUKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlI3J1bihPYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0KLSAgICBPYmplY3QgcmVzdWx0ID0gbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFRocm93YWJsZSkKLSAgICAgIHsKLSAgICAgICAgKChUaHJvd2FibGUpIHJlc3VsdCkucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdHMgZGlkbid0IHJldHVybiAnb2snIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gSVBsYXRmb3JtUnVubmFibGUuRVhJVF9PSzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9SZWdpc3RyeVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1JlZ2lzdHJ5VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhMzZlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1JlZ2lzdHJ5VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5VRERJUmVnaXN0cnlTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlICgpCi0JewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShSZWdpc3RyeVRlc3RzLmNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFRheG9ub215IG1vZGVsIGFuZCBwYXNzZXMgaXQgdG8KLQkgKiA8Y29kZT5SZWdpc3RyeVNlcnZpY2Uuc2F2ZVRheG9ub215KCk8L2NvZGU+Ci0JICogd2hlcmUgdGhlIG1vZGVsIGlzIHBlcnNpc3RlZCB0byBhIHBsYXRmb3JtCi0JICogc3BlY2lmaWVkIHRlbXBvcmFyeSBmaWxlc3lzdGVtIGxvY2F0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVUYXhvbm9teSAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlVGF4b25vbXkiKTsKLQkJdHJ5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlIGFuZCBUYXhvbm9teSIpOwotCQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkJCQotCQkJVGF4b25vbXkgdGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZGluZyBhIHNpbXBsZSBUYXhvbm9teSBtb2RlbCIpOwotCQkJdGF4b25vbXkuc2V0SWQoIm15LnRheG9ub215Iik7Ci0JCQl0YXhvbm9teS5zZXROYW1lKCJNeSBUYXhvbm9teSIpOwotCQkJRUxpc3QgbGlzdCA9IHRheG9ub215LmdldENhdGVnb3J5KCk7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTEgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTEuc2V0TmFtZSgiTXkgZmlyc3QgY2F0ZWdvcnkiKTsKLQkJCWNhdGVnb3J5MS5zZXRDb2RlKCIxIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTIgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTIuc2V0TmFtZSgiTXkgc2Vjb25kIGNhdGVnb3J5Iik7Ci0JCQljYXRlZ29yeTIuc2V0Q29kZSgiMiIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkzID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkzLnNldE5hbWUoIk15IHRoaXJkIGNhdGVnb3J5Iik7Ci0JCQljYXRlZ29yeTMuc2V0Q29kZSgiMi4xIik7Ci0JCQljYXRlZ29yeTIuZ2V0Q2F0ZWdvcnkoKS5hZGQoY2F0ZWdvcnkzKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5MSk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTIpOwotCi0JCQlGaWxlIGZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ0YXhvbm9teS4iLCIueG1sIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNhdmluZyB0aGUgVGF4b25vbXkgbW9kZWwgdG8gIitmaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0JCQlyZWdpc3RyeVNlcnZpY2Uuc2F2ZVRheG9ub215KGZpbGUudG9VUkwoKSx0YXhvbm9teSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCXsKLQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK2V4Yy5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVRheG9ub215XG4iKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgVURESSBSZWdpc3RyeSBtb2RlbCBhbmQgcGFzc2VzIGl0IHRvCi0JICogPGNvZGU+UmVnaXN0cnlTZXJ2aWNlLnNhdmVSZWdpc3RyeSgpPC9jb2RlPgotCSAqIHdoZXJlIHRoZSBtb2RlbCBpcyBwZXJzaXN0ZWQgdG8gYSBwbGF0Zm9ybQotCSAqIHNwZWNpZmllZCB0ZW1wb3JhcnkgZmlsZXN5c3RlbSBsb2NhdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlUmVnaXN0cnkgKCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlRJTkcgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVJlZ2lzdHJ5Iik7Ci0JCXRyeQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSwgVURESVJlZ2lzdHJ5U2VydmljZSBhbmQgUmVnaXN0cnkiKTsKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJCVVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCQkKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSB1ZGRpUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIGEgc2ltcGxlIFJlZ2lzdHJ5IG1vZGVsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0SWQoIm15LnJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0VmVyc2lvbigiMi4wIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0RGlzY292ZXJ5VVJMKCJodHRwOi8vc29tZS5kaXNjb3ZlcnkudXJsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0UHVibGljYXRpb25VUkwoImh0dHA6Ly9zb21lLnB1YmxpY2F0aW9uLnVybCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERlZmF1bHRMb2dpbigiaG9ja2V5ZmFuYXRpYyIpOwotCQkJTmFtZSBuYW1lID0gUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOYW1lKCk7Ci0JCQluYW1lLnNldFZhbHVlKCJNeSBSZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LmdldE5hbWUoKS5hZGQobmFtZSk7Ci0JCQlUYXhvbm9teSB0YXhvbm9teVJlZiA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotCQkJdGF4b25vbXlSZWYuc2V0UmVmKCJteS50YXhvbm9teSIpOwotCQkJVGF4b25vbWllcyB0ID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJCWlmICh0ID09IG51bGwpCi0JCQl7Ci0JCQkJdCA9IFVERElSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRheG9ub21pZXMoKTsKLQkJCQl1ZGRpUmVnaXN0cnkuc2V0VGF4b25vbWllcyh0KTsKLQkJCX0KLQkJCUVMaXN0IGUgPSB0LmdldFRheG9ub215KCk7Ci0JCQllLmFkZCh0YXhvbm9teVJlZik7Ci0KLQkJCUZpbGUgZmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInJlZ2lzdHJ5LiIsIi54bWwiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F2aW5nIHRoZSBSZWdpc3RyeSBtb2RlbCB0byAiK2ZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLQkJCXJlZ2lzdHJ5U2VydmljZS5zYXZlUmVnaXN0cnkoZmlsZS50b1VSTCgpLHVkZGlSZWdpc3RyeSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCXsKLQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK2V4Yy5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVJlZ2lzdHJ5XG4iKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgVURESSBSZWdpc3RyeSBtb2RlbCBhbmQgYSBuZXcgVGF4b25vbXkKLQkgKiBtb2RlbCwgYXNzb2NpYXRlcyB0aGUgbGF0dGVyIHdpdGggdGhlIGZvcm1lciwgYW5kCi0JICogZHJpdmVzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXIuc2F2ZVJlZ2lzdHJ5KCk8L2NvZGU+Ci0JICogdG8gc2F2ZSB0aGUgbW9kZWxzIGFuZCB0aGUgaW5kZXggZG9jdW1lbnQgdG8gdGhlCi0JICogcHJlZmVycmVkIGxvY2F0aW9uIG9mIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IG1hbmFnZXIuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5KCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlRJTkcgdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5Iik7Ci0JCXRyeSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSBhbmQgR2V0dGluZyBSZWdpc3RyeU1hbmFnZXIiKTsJCi0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQotCQkJSVJlZ2lzdHJ5TWFuYWdlciByZWdNYW5hZ2VyID0gcmVnaXN0cnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGxvY2F0aW9uIG9mIHRoZSBkZWZhdWx0IGluZGV4IGlzICIgKyByZWdNYW5hZ2VyLmdldFVSTCgpKTsKLQotCQkJLy9idWlsZCB0aGUgaG9ja2V5IHRheG9ub215Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIHRoZSBob2NrZXkgVGF4b25vbXkgbW9kZWwiKTsKLQkJCVRheG9ub215IGhvY2tleVRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0JCQlob2NrZXlUYXhvbm9teS5zZXRJZCgiaG9ja2V5LnRheG9ub215Iik7Ci0JCQlob2NrZXlUYXhvbm9teS5zZXROYW1lKCJob2NrZXkgVGF4b25vbXkiKTsKLQkJCUVMaXN0IGxpc3QgPSBob2NrZXlUYXhvbm9teS5nZXRDYXRlZ29yeSgpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkxID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnk0ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnk0LnNldE5hbWUoIlBybyIpOwotCQkJY2F0ZWdvcnk0LnNldENvZGUoIjQiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5NSA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5NS5zZXROYW1lKCJBSEwiKTsKLQkJCWNhdGVnb3J5NS5zZXRDb2RlKCI0LjEiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5NiA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5Ni5zZXROYW1lKCJOSEwiKTsKLQkJCWNhdGVnb3J5Ni5zZXRDb2RlKCI0LjIiKTsKLQkJCWNhdGVnb3J5MS5zZXROYW1lKCJKdW5pb3IiKTsKLQkJCWNhdGVnb3J5MS5zZXRDb2RlKCIxIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTIgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTIuc2V0TmFtZSgiTWlkZ2V0Iik7Ci0JCQljYXRlZ29yeTIuc2V0Q29kZSgiMiIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkzID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkzLnNldE5hbWUoIkJhbnRhbSIpOwotCQkJY2F0ZWdvcnkzLnNldENvZGUoIjMiKTsKLQkJCWNhdGVnb3J5NC5nZXRDYXRlZ29yeSgpLmFkZChjYXRlZ29yeTUpOwotCQkJY2F0ZWdvcnk0LmdldENhdGVnb3J5KCkuYWRkKGNhdGVnb3J5Nik7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTEpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkyKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5Myk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTQpOwotCQkJCi0JCQkvL3NhdmUgdGhlIGhvY2tleSB0YXhvbm9teQotCQkJVGF4b25vbXkgaG9ja2V5VGF4b25vbXlSZWYgPSByZWdNYW5hZ2VyLnNhdmVUYXhvbm9teShob2NrZXlUYXhvbm9teSk7Ci0KLQkJCS8vbWFrZSB0aGUgaG9ja2V5IHJlZ2lzdHJ5Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIHRoZSBob2NrZXkgUmVnaXN0cnkgbW9kZWwiKTsKLQkJCVVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCQkKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSB1ZGRpUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldElkKCJob2NrZXkucmVnaXN0cnkiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRWZXJzaW9uKCIyLjAiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREZWZhdWx0TG9naW4oImhvY2tleWZhbmF0aWMiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREaXNjb3ZlcnlVUkwoImh0dHA6Ly9zb21lLmRpc2NvdmVyeS51cmwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRQdWJsaWNhdGlvblVSTCgiaHR0cDovL3NvbWUucHVibGljYXRpb24udXJsIik7Ci0JCQlOYW1lIG5hbWUgPSBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5hbWUoKTsKLQkJCW5hbWUuc2V0VmFsdWUoIkhvY2tleSBSZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LmdldE5hbWUoKS5hZGQobmFtZSk7Ci0KLQkJCS8vIEFkZCB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0YXhvbm9teSAoc2F2ZWQgYWJvdmUpIHRvIHRoZSByZWdpc3RyeS4gIAotCQkJdWRkaVJlZ2lzdHJ5U2VydmljZS5hZGRUYXhvbm9teSh1ZGRpUmVnaXN0cnksaG9ja2V5VGF4b25vbXlSZWYpOwotCi0JCQkvKgotCQkJVURESVRheG9ub215RmluZGVyIFVJVEZpbmRlciA9IG5ldyBVRERJVGF4b25vbXlGaW5kZXIoKTsKLQkJCXJlZ01hbmFnZXIuYWRkVGF4b25vbXlGaW5kZXIodWRkaVJlZ2lzdHJ5LmdldENsYXNzKCkuZ2V0TmFtZSgpLFVJVEZpbmRlcik7Ci0JCQkqLwotCQkJLy8gU2F2ZSB0aGUgdGhpbmcuCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNhdmluZyB0aGUgaG9ja2V5IFJlZ2lzdHJ5IG1vZGVsIik7Ci0JCQlyZWdNYW5hZ2VyLnNhdmVSZWdpc3RyeSh1ZGRpUmVnaXN0cnkpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQl7Ci0JCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlmYWlsKCJVbmV4cGVjdGVkIFRocm93YWJsZSBbIitleGMuZ2V0TWVzc2FnZSgpKyJdIik7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSEVEIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX3NhdmVSZWdpc3RyeVxuIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBMb2FkcyB0aGUgcmVnaXN0cnkgYW5kIHRheG9ub215IGluIHRoZSBpbmRleCBjcmVhdGVkIGluCi0JICogdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5LCB0aGVuIGFzc2VydHMgdGhhdCB0aGUKLQkgKiBjb250ZW50IG9mIHRoZSBtb2RlbCBpcyB3aGF0IHdlIGV4cGVjdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9sb2FkUmVnaXN0cnkoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9sb2FkUmVnaXN0cnkiKTsKLQkJdHJ5IHsKLQkJCS8vIFNldHVwCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSBhbmQgR2V0dGluZyBSZWdpc3RyeU1hbmFnZXIiKTsJCi0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQotCQkJSVJlZ2lzdHJ5TWFuYWdlciByZWdNYW5hZ2VyID0gcmVnaXN0cnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkJCQotCQkJLy8gR2V0IHRoZSBvbmUgcmVnaXN0cnkgVVJJIHdlIGV4cGVjdCwgYW5kIGxvYWQgdGhlIHJlZ2lzdHJ5LgotCQkJU3RyaW5nW10gcmVnaXN0cmllcyA9IHJlZ01hbmFnZXIuZ2V0UmVnaXN0cnlVUklzKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHJlZ2lzdHJpZXMgIityZWdpc3RyaWVzLmxlbmd0aCxyZWdpc3RyaWVzLmxlbmd0aCwxKTsKLQkJCVN0cmluZyB1cmkgPSByZWdpc3RyaWVzWzBdOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkaW5nIHJlZ2lzdHJ5ICIgKyB1cmkpOwotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSByZWdNYW5hZ2VyLmxvYWRSZWdpc3RyeSh1cmkpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCByZWdpc3RyeSAiICsgcmVnaXN0cnkuZ2V0SWQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIkRpZCBub3QgZmluZCBob2NrZXkgcmVnaXN0cnkiLCJob2NrZXkucmVnaXN0cnkiLHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJCi0JCQkvLyBJdCdzIHN1cHBvc2VkIHRvIGJlIGEgVURESSByZWdpc3RyeS4gVmVyaWZ5IGl0IGFuZCBjaGVjayBpdHMgdmFsdWVzLgotCQkJYXNzZXJ0VHJ1ZSgiUmVnaXN0cnkgaXMgbm90IGEgVURESVJlZ2lzdHJ5IiwocmVnaXN0cnkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkpKTsKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSAoVURESVJlZ2lzdHJ5KXJlZ2lzdHJ5OwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXRWZXJzaW9uKCksIjIuMCIpOwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXREZWZhdWx0TG9naW4oKSwiaG9ja2V5ZmFuYXRpYyIpOwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXREaXNjb3ZlcnlVUkwoKSwiaHR0cDovL3NvbWUuZGlzY292ZXJ5LnVybCIpOwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXRQdWJsaWNhdGlvblVSTCgpLCJodHRwOi8vc29tZS5wdWJsaWNhdGlvbi51cmwiKTsKLQkJCQotCQkJLy8gTG9hZCB0aGUgdGF4b25vbWllcyB1c2VkIHRoZSBVRERJIHJlZ2lzdHJ5LgotCQkJVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQkJVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnTWFuYWdlci5sb2FkVGF4b25vbWllcyh1ZGRpUmVnaXN0cnlTZXJ2aWNlLmdldFRheG9ub215VVJJcyh1ZGRpUmVnaXN0cnkpKTsKLQkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBudW1iZXIgb2YgdGF4b25vbWllcyAiK3RheG9ub21pZXMubGVuZ3RoLHRheG9ub21pZXMubGVuZ3RoLDEpOwotCQkJVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzWzBdOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCB0YXhvbm9teSAiICsgdGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJEaWQgbm90IGZpbmQgaG9ja2V5IHRheG9ub215IiwiaG9ja2V5LnRheG9ub215Iix0YXhvbm9teS5nZXRJZCgpKTsKLQkJCQotCQkJLy8gRHVtcCBvdXQgdGhlIHZhbHVlcyAobm8gYXNzZXJ0aW9ucyBoZXJlKS4KLQkJCUVMaXN0IGNMaXN0ID0gdGF4b25vbXkuZ2V0Q2F0ZWdvcnkoKTsKLQkJCWZvcihpbnQgaSA9IDA7aTxjTGlzdC5zaXplKCk7aSsrKXsKLQkJCQlDYXRlZ29yeSBjYXRlZ29yeSA9IChDYXRlZ29yeSljTGlzdC5nZXQoaSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBjYXRlZ29yeSAiICsgY2F0ZWdvcnkuZ2V0TmFtZSgpKTsKLQkJCQlFTGlzdCBjMkxpc3QgPSBjYXRlZ29yeS5nZXRDYXRlZ29yeSgpOwotCQkJCWZvcihpbnQgaiA9IDA7ajxjMkxpc3Quc2l6ZSgpO2orKyl7Ci0JCQkJCUNhdGVnb3J5IGlDYXRlZ29yeSA9IChDYXRlZ29yeSljMkxpc3QuZ2V0KGopOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIHN1YmNhdGVnb3J5ICIgKyBpQ2F0ZWdvcnkuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9CQkJCQkKLQkJfQotCQljYXRjaChFeGNlcHRpb24gdCkKLQkJewotCQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK3QuZ2V0TWVzc2FnZSgpKyJdIik7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSEVEIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX2xvYWRSZWdpc3RyeVxuIik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Rlc3RCdW5kbGVVdGlscy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9UZXN0QnVuZGxlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyMmExMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Rlc3RCdW5kbGVVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uLkJ1bmRsZVV0aWxzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5WZXJzaW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdEJ1bmRsZVV0aWxzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdEdldFZlcnNpb24oKSB7Ci0JCVZlcnNpb24gdmVyc2lvbiA9IEJ1bmRsZVV0aWxzLmdldFZlcnNpb24oIm9yZy5lY2xpcHNlLndzdC53cyIpOwotCQlhc3NlcnROb3ROdWxsKCJ2ZXJzaW9uIHNob3VsZCBuZXZlciBiZSBudWxsIiwgdmVyc2lvbik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTRExDb3BpZXJUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0RMQ29waWVyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1ZTdhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTRExDb3BpZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEyNiAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLldTRExDb3BpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBKVW5pdCB0ZXN0cyBmb3IgV1NETENvcGllcgotICovCi1wdWJsaWMgY2xhc3MgV1NETENvcGllclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX0RJUiAgICAgPSAiZGF0YS93c2RsY29waWVyLyI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSMSA9ICJ3c2RsMSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSMiA9ICJ3c2RsMiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSMyA9ICJ3c2RsMyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSNCA9ICJ3c2RsNCI7Ci0JCi0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCi0JLyoqCi0JICogUmV0dXJuIHN1aXRlIG9mIHRlc3RzIHRvIHJ1bi4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgVGVzdFN1aXRlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiV1NETENvcGllclRlc3RzIik7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2UxIikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlMiIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTMiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2U0IikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlNSIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTYiKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0JCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRlc3QgbWV0aG9kIG5hbWUuCi0JICovCi0JcHVibGljIFdTRExDb3BpZXJUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJXU0RMQ29waWVyVGVzdHMiKTsKLQkgICAgCi0JICAgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkgICAgCXByb2plY3QuY3JlYXRlKG51bGwpOwotCSAgICAJCi0JICAgIGlmICghcHJvamVjdC5pc09wZW4oKSkKLQkgICAgCXByb2plY3Qub3BlbihudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBmb2xkZXIuCi0JICogQHBhcmFtIG5hbWUgTmFtZSBvZiBmb2xkZXIuCi0JICogQHJldHVybiBUaGUgY3JlYXRlZCBmb2xkZXIuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElGb2xkZXIgY3JlYXRlRm9sZGVyKFN0cmluZyBuYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGb2xkZXIgZm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIobmV3IFBhdGgobmFtZSkpOwotICAgICAgICBmb2xkZXIuY3JlYXRlKGZhbHNlLCB0cnVlLCBudWxsKTsKLQkgICAgcmV0dXJuIGZvbGRlcjsKLQl9Ci0JCi0JLyoKLQkgKiBWYWxpZGF0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBvZiB0aGUgdGFyZ2V0IGZvbGRlciBhZnRlciBjb3B5aW5nLgotCSAqLwotCXByaXZhdGUgdm9pZCB2YWxpZGF0ZShJRm9sZGVyIGZvbGRlciwgU3RyaW5nIGZpbGVuYW1lKSB7CQkKLQkJYXNzZXJ0Tm90TnVsbChmb2xkZXIuZmluZE1lbWJlcigiMS8yLzMvdGVzdC53c2RsIikpOwotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCIxLzJhLyIgKyBmaWxlbmFtZSkpOwotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCIxLzJhL3Rlc3QueHNkIikpOwotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCJ0ZXN0LnhzZCIpKTsJCQotCX0KLQkKLQkvKgotCSAqIFZhbGlkYXRlIHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBmaWxlcyBoYXZlIG5vdCBjaGFuZ2VkLgotCSAqLwotCXByaXZhdGUgbG9uZ1tdIHZhbGlkYXRlVGltZXN0YW1wcyhJRm9sZGVyIGZvbGRlciwgbG9uZ1tdIG9sZFRpbWVzdGFtcHMpIHsKLQkJCi0JCWxvbmdbXSBjdXJyZW50VGltZXN0YW1wcyA9IG5ldyBsb25nWzNdOwotCQkKLQkJY3VycmVudFRpbWVzdGFtcHNbMF0gPSBmb2xkZXIuZmluZE1lbWJlcigiMS8yLzMvdGVzdC53c2RsIikuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJaWYgKG9sZFRpbWVzdGFtcHMgIT0gbnVsbCkgYXNzZXJ0RXF1YWxzKGN1cnJlbnRUaW1lc3RhbXBzWzBdLCBvbGRUaW1lc3RhbXBzWzBdKTsKLQotCQljdXJyZW50VGltZXN0YW1wc1sxXSA9IGZvbGRlci5maW5kTWVtYmVyKCIxLzJhL3Rlc3QueHNkIikuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJaWYgKG9sZFRpbWVzdGFtcHMgIT0gbnVsbCkgYXNzZXJ0RXF1YWxzKGN1cnJlbnRUaW1lc3RhbXBzWzFdLCBvbGRUaW1lc3RhbXBzWzFdKTsKLQkJCi0JCWN1cnJlbnRUaW1lc3RhbXBzWzJdID0gZm9sZGVyLmZpbmRNZW1iZXIoInRlc3QueHNkIikuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJaWYgKG9sZFRpbWVzdGFtcHMgIT0gbnVsbCkgYXNzZXJ0RXF1YWxzKGN1cnJlbnRUaW1lc3RhbXBzWzJdLCBvbGRUaW1lc3RhbXBzWzJdKTsKLQkJCi0JCXJldHVybiBjdXJyZW50VGltZXN0YW1wczsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBjYXNlICMxCi0JICogLSBjb3BpZXMgd3NkbCBmcm9tIHRlc3QgZGF0YSBkaXJlY3RvcnkgdXNpbmcgZmlsZTovIFVSSSAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTEoKSB7Ci0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KERBVEFfRElSICsgIjEvMmEvc3RhcnQud3NkbCIpOwkJCQkKLQkJCXVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJCi0JCQlJRm9sZGVyIGZvbGRlciA9IGNyZWF0ZUZvbGRlcihXU0RMX0ZPTERFUjEpOwotCQkJU3RyaW5nIGZvbGRlclVSSSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgZm9sZGVyLmdldEZ1bGxQYXRoKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgdXJsKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICAiICsgZm9sZGVyVVJJKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSSh1cmwudG9TdHJpbmcoKSk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7Ci0JCQkKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkKLQkJCXZhbGlkYXRlKGZvbGRlciwgInN0YXJ0LndzZGwiKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGNhc2UgIzIKLQkgKiAtIGNvcGllcyB3c2RsIGZyb20gb25lIGZvbGRlciB0byBhbm90aGVyIHVzaW5nIHBsYXRmb3JtOi9yZXNvdXJjZSBVUkkKLQkgKiAtIGFsc28gY2hhbmdlcyB0aGUgdGFyZ2V0IGZpbGVuYW1lCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2UyKCkgewotCQl0cnkgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKS5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCUlGb2xkZXIgZm9sZGVyID0gY3JlYXRlRm9sZGVyKFdTRExfRk9MREVSMik7CQkJCi0JCQkKLQkJCVN0cmluZyBwYXRoID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOyAJCQkJCQkJCQkKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSBmb2xkZXIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwkJCQotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwotCQkJY29waWVyLnNldFRhcmdldEZpbGVuYW1lKCJuZXduYW1lLndzZGwiKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJdmFsaWRhdGUoZm9sZGVyLCAibmV3bmFtZS53c2RsIik7Ci0JCQlhc3NlcnRFcXVhbHMoY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCksICIxLzJhL25ld25hbWUud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CQotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdCBjYXNlICMzCi0JICogLSBydW5zIHRoZSBXU0RMQ29waWVyIHdpdGhvdXQgc3BlY2lmeWluZyBhIHNvdXJjZSBVUkkgKG9wZXJhdGlvbiBzaG91bGQgZmFpbCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTMoKSB7Ci0JCXRyeSB7CQkJCi0JCQlJRm9sZGVyIGZvbGRlciA9IGNyZWF0ZUZvbGRlcihXU0RMX0ZPTERFUjMpOwotCQkJCi0JCQlTdHJpbmcgZm9sZGVyVVJJID0gZm9sZGVyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206IE4vQSIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7CQkJCi0JCQkKLQkJCXRyeSB7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGhlcmUiLCBmYWxzZSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjZSk7Ci0JCQl9Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKLQkJfQotCX0JCi0KLQkvKioKLQkgKiBUZXN0IGNhc2UgIzQKLQkgKiAtIHJ1bnMgdGhlIFdTRExDb3BpZXIgd2l0aG91dCBjcmVhdGluZyBhIHRhcmdldCBmb2xkZXIKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTQoKSB7Ci0JCXRyeSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjEpLmZpbmRNZW1iZXIoIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJSUZvbGRlciBmb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjQpOwotCQkJCQkJCi0JCQlTdHJpbmcgcGF0aCA9IHJlc291cmNlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSAicGxhdGZvcm06L3Jlc291cmNlIiArIGZvbGRlci5nZXRGdWxsUGF0aCgpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJYXNzZXJ0VHJ1ZSghZm9sZGVyLmV4aXN0cygpKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSShwYXRoKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQkJdmFsaWRhdGUoZm9sZGVyLCAic3RhcnQud3NkbCIpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsJCQkKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGNhc2UgIzUKLQkgKiAtIHJ1bnMgdGhlIFdTRExDb3BpZXIgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdGFyZ2V0IGZvbGRlciAob3BlcmF0aW9uIHNob3VsZCBmYWlsKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlNSgpIHsKLQkJdHJ5IHsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSkuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN0cmluZyBwYXRoID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOyAJCQkJCQkJCQkJCQkJCQkKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyBwYXRoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICBOL0EiKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSShwYXRoKTsJCQkKLQkJCQotCQkJdHJ5IHsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgaGVyZSIsIGZhbHNlKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGNlKTsKLQkJCX0KLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwkJCQotCQl9Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgY2FzZSAjNgotCSAqIC0gY29waWVzIHdzZGwgZnJvbSBvbmUgZm9sZGVyIG9udG8gaXRzZWxmIHVzaW5nIHBsYXRmb3JtOi9yZXNvdXJjZSBVUkkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTYoKSB7Ci0JCXRyeSB7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSk7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBmb2xkZXIuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN0cmluZyBwYXRoID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOyAJCQkJCQkKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSBmb2xkZXIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCQkJCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwkJCQotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwkJCQotCi0JCQlsb25nW10gb2xkVGltZXN0YW1wcyA9IHZhbGlkYXRlVGltZXN0YW1wcyhmb2xkZXIsIG51bGwpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQl2YWxpZGF0ZShmb2xkZXIsICJzdGFydC53c2RsIik7Ci0JCQl2YWxpZGF0ZVRpbWVzdGFtcHMoZm9sZGVyLCBvbGRUaW1lc3RhbXBzKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CQotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQotfQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2U1ZmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLQotcHVibGljIGludGVyZmFjZSBXU0pVbml0Q29uc3RhbnRzIHsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MucnVudGltZS5heGlzMTEiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYlByb2plY3ROYW1lID0gIldQIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJQcm9qZWN0Mk5hbWUgPSAiV1AyIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnROYW1lID0gIndlYkNvbXBvbmVudCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcG9uZW50Mk5hbWUgPSAid2ViQ29tcDIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXAzTmFtZSA9ICJ3ZWJDb21wMyI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDROYW1lID0gIndlYkNvbXA0IjsKLSAgCi0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYlByb2plY3ROYW1lID0gIkVKQlByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYkNvbXBvbmVudE5hbWUgPSAiZWpiQ29tcG9uZW50IjsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudFByb2plY3ROYW1lID0gIkFwcENsaWVudFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudENvbXBOYW1lID0gImFwcENsaWVudENvbXBvbmVudCI7ICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWFyQ29tcE5hbWUgPSAiRUFSQ29tcG9uZW50IjsKLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VGaW5kZXJUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlRmluZGVyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxZjE5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VGaW5kZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV2ViU2VydmljZUZpbmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VGaW5kZXJUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cyB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoV2ViU2VydmljZUZpbmRlclRlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdTRmluZGVyKCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRpbmcgd2ViIHNlcnZpY2UgZmluZGVyIik7Ci0JCVdlYlNlcnZpY2VGaW5kZXIgd3NmID0gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJhdHRlbXB0aW5nIHRvIGxvY2F0ZSBhbGwgd2ViIHNlcnZpY2VzIGluIHdvcmtzcGFjZSIpOwotCQlJdGVyYXRvciB3c0l0ZXJhdG9yID0gd3NmLmdldFdlYlNlcnZpY2VzKG51bGwpOwotCQl3aGlsZSAod3NJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IChXZWJTZXJ2aWNlSW5mbykgd3NJdGVyYXRvci5uZXh0KCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIndlYlNlcnZpY2UgVVJMOiAiICsgd3NJbmZvLmdldFdzZGxVUkwoKSk7Ci0JCX0KLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmluaXNoZWQgZmluZGluZyBhbGwgd2Vic2VydmljZXMiKTsKLQkJIAotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9CdWlsZENsYXNzcGF0aC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9CdWlsZENsYXNzcGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDk2MjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQnVpbGRDbGFzc3BhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk1hbmlmZXN0RWxlbWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5Db25zdGFudHM7Ci0KLS8qKgotICogVGhpcyBwcm9ncmFtIHdpbGwgZ2VuZXJhdGUgYSBjbGFzc3BhdGggdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZCB0aGUgd3NleHBsb3Jlci53YXIgZmlsZS4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgQnVpbGRDbGFzc3BhdGggaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZQotewotICAgIHB1YmxpYyBPYmplY3QgcnVuKE9iamVjdCBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIAotICAgIHsgICAgICAgIAotICAgICAgUmVzb3VyY2VCdW5kbGUgcGx1Z2luUmVxdWlyZXMgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYucHJvcGVydHkudG9vbHMuRXhwbG9yZXJSZXF1aXJlcyIgKTsKLSAgICAgIEVudW1lcmF0aW9uICAgIHJlcXVpcmVLZXlzICAgPSBwbHVnaW5SZXF1aXJlcy5nZXRLZXlzKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCByZXF1aXJlS2V5cy5oYXNNb3JlRWxlbWVudHMoKSApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKXJlcXVpcmVLZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGJ1aWxkQ2xhc3NwYXRoKCBwbHVnaW5SZXF1aXJlcy5nZXRTdHJpbmcoa2V5KSApOwotICAgICAgfQotICAgICAgICAgICAgCi0gICAgICByZXR1cm4gSVBsYXRmb3JtUnVubmFibGUuRVhJVF9PSzsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGJ1aWxkQ2xhc3NwYXRoKCBTdHJpbmcgcGx1Z2luSWQgKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgQnVuZGxlIGJ1bmRsZSAgICA9IFBsYXRmb3JtLmdldEJ1bmRsZSggcGx1Z2luSWQgKTsKLSAgICAgIFN0cmluZyBjbGFzc3BhdGggPSAoU3RyaW5nKWJ1bmRsZS5nZXRIZWFkZXJzKCkuZ2V0KCBDb25zdGFudHMuQlVORExFX0NMQVNTUEFUSCApOwotICAgICAgU3RyaW5nIGxvY2F0aW9uICA9IGJ1bmRsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgICAKLSAgICAgIC8vIEFkZCBjbGFzc3BhdGggdG8gbGlzdAotICAgICAgTWFuaWZlc3RFbGVtZW50W10gY2xhc3NwYXRocyA9IE1hbmlmZXN0RWxlbWVudC5wYXJzZUhlYWRlcihDb25zdGFudHMuQlVORExFX0NMQVNTUEFUSCwgY2xhc3NwYXRoKTsKLSAgICAgIAotICAgICAgaWYoIGNsYXNzcGF0aHMgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGFzc3BhdGhzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbmV3UGF0aCA9IG51bGw7Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIFNXVCBwbHVnaW4gc2luY2UgaXQKLSAgICAgICAgICBpZiggbG9jYXRpb24uaW5kZXhPZiggIm9yZy5lY2xpcHNlLnN3dCIgKSAhPSAtMSApCi0gICAgICAgICAgewotICAgICAgICAgICAgICBCdW5kbGVbXSBidW5kbGVzICAgICA9IFBsYXRmb3JtLmdldEZyYWdtZW50cyggYnVuZGxlICk7ICAKLSAgICAgICAgICAgICAgU3RyaW5nICAgbmV3TG9jYXRpb24gPSBidW5kbGVzWzBdLmdldExvY2F0aW9uKCkuc3Vic3RyaW5nKDgpOwotICAgICAgICAgICAgICBTdHJpbmcgICBwYXRoICAgICAgICA9IGNsYXNzcGF0aHNbaW5kZXhdLmdldFZhbHVlKCkucmVwbGFjZUZpcnN0KCAiXFwkd3NcXCQiLCAid3Mvd2luMzIiKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIG5ld1BhdGggPSBuZXdMb2NhdGlvbiArIHBhdGg7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoIGxvY2F0aW9uLnN0YXJ0c1dpdGgoICJ1cGRhdGUiICkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV3UGF0aCA9IGxvY2F0aW9uLnN1YnN0cmluZyg4KSArIGNsYXNzcGF0aHNbaW5kZXhdLmdldFZhbHVlKCk7ICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmKCBsb2NhdGlvbi5zdGFydHNXaXRoKCAiaW5pdGlhbCIgKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5ld1BhdGggPSBsb2NhdGlvbi5zdWJzdHJpbmcoMjMpICsgY2xhc3NwYXRoc1tpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiggbG9jYXRpb24uc3RhcnRzV2l0aCggIlN5c3RlbSIgKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFsbExvY2F0aW9uKCkuZ2V0VVJMKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoNik7Ci0gICAgICAgICAgICAgIG5ld1BhdGggPSBwbGF0Zm9ybUxvY2F0aW9uICsgInBsdWdpbnMvb3JnLmVjbGlwc2Uub3NnaV8zLjAuMS8iICsgY2xhc3NwYXRoc1tpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgU3lzdGVtLm91dC5wcmludCggbmV3UGF0aCArICc7Jyk7IAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9Db3B5UHJvcGVydHlGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9Db3B5UHJvcGVydHlGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGVlNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQ29weVByb3BlcnR5RmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDb3B5UHJvcGVydHlGaWxlcyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFN0cmluZyAgICAgIG5ld1BhdGggICAgICAgPSBhcmdzWzJdOwotICAgIFN0cmluZyAgICAgIHBhdGhSZWxhdGl2ZVRvPSBhcmdzWzNdOwotICAgIFZlY3RvciAgICAgIHByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHBsdWdpbkRpciAgICAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIHBsdWdpbkZpbGVzW2luZGV4XSApOwotICAgICAgCi0gICAgICBpZiggcGx1Z2luRGlyICE9IG51bGwgKQotICAgICAgewotICAgICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBwcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbXXsgImJpbiIsICJidWlsZC5wcm9wZXJ0aWVzIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSAgICA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFN0cmluZyBwcm9wTmFtZSAgICA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHBsdWdpbkluZGV4ID0gcHJvcE5hbWUuaW5kZXhPZiggcGF0aFJlbGF0aXZlVG8gKTsKLSAgICAgIGludCAgICBmaXJzdFNsYXNoICA9IHByb3BOYW1lLmluZGV4T2YoICJcXCIsIHBsdWdpbkluZGV4ICk7Ci0gICAgICBpbnQgICAgbmV4dFNsYXNoICAgPSBwcm9wTmFtZS5pbmRleE9mKCAiXFwiLCBmaXJzdFNsYXNoKzEgKTsKLSAgICAgIFN0cmluZyBwbHVnaW5OYW1lICA9IHByb3BOYW1lLnN1YnN0cmluZyggZmlyc3RTbGFzaCArIDEsIG5leHRTbGFzaCApOwotICAgICAgaW50ICAgIHVuZGVySW5kZXggID0gcGx1Z2luTmFtZS5pbmRleE9mKCAnXycgKTsKLSAgICAgIAotICAgICAgaWYoIHVuZGVySW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgICBwbHVnaW5OYW1lID0gcGx1Z2luTmFtZS5zdWJzdHJpbmcoIDAsIHVuZGVySW5kZXggKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIG5ld05hbWUgPSBuZXdQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyAicGx1Z2lucyIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcGx1Z2luTmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArIHByb3BOYW1lLnN1YnN0cmluZyggbmV4dFNsYXNoKzEsIHByb3BOYW1lLmxlbmd0aCgpICk7Ci0gICAgICAKLSAgICAgIEZpbGUgICAgICAgIG5ld0ZpbGUgPSBuZXcgRmlsZSggbmV3TmFtZSApOwotICAgICAgRmlsZSAgICAgICAgcGFyZW50ICA9IG5ldyBGaWxlKCBuZXdGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICBQcmludFdyaXRlciB3cml0ZXIgID0gbnVsbDsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHBhcmVudC5ta2RpcnMoKTsKLSAgICAgICAgCi0gICAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG5ld0ZpbGUgKSk7Ci0gICAgICAgIFN0cmluZ1tdIGxpbmVzID0gVXRpbHMucmVhZExpbmVzKCBwcm9wRmlsZSApOwotICAgICAgICAKLSAgICAgICAgZm9yKCBpbnQgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZXMubGVuZ3RoOyBsaW5lSW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICB3cml0ZXIucHJpbnRsbiggbGluZXNbbGluZUluZGV4XSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsgCi0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRDb250ZXh0SWRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRDb250ZXh0SWRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjYzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kQ29udGV4dElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBmaW5kIENvbnRleHQgSURzIGluIHNvdXJjZSBmaWxlcy4KLSAqIGFyZ3NbMF0gPSBUaGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBzb3VyY2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBzZWFyY2hlZC4KLSAqIGFyZ3NbMV0gPSBBIGZpbGUgY29udGFpbmluZyBwbHVnaW4gc291cmNlIGRpcmVjdG9yaWVzLiAgRWFjaCBsaW5lIHNob3VsZCBjb250YWluCi0gKiAgICAgICAgICAgYSBwYXRoIHRvIGEgc291cmNlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgYXJnc1swXSBwYXJhbWV0ZXIuCi0gKiBhcmdzWzJdID0gVGhlIG91dHB1dCBmaWxlIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaW5kQ29udGV4dElkcyAKLXsKLSAgcHVibGljIHZvaWQgZmluZElkcyggU3RyaW5nIHJvb3REaXJlY3RvcnksIFN0cmluZyBzb3VyY2VEaXJlY3RvcnlOYW1lLCBTdHJpbmcgb3V0cHV0RmlsZU5hbWUgKQotICB7Ci0JRmlsZSAgICAgICAgc291cmNlRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKCBzb3VyY2VEaXJlY3RvcnlOYW1lICk7Ci0JU3RyaW5nW10gICAgc3JjRGlyTGluZXMgICAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyggc291cmNlRGlyZWN0b3J5RmlsZSApOwotCVByaW50V3JpdGVyIG91dHB1dEZpbGUgICAgICAgICAgPSBudWxsOwotCQkKLQl0cnkKLQl7Ci0JICBvdXRwdXRGaWxlID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggb3V0cHV0RmlsZU5hbWUgKSApOwotCQotCSAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0RpckxpbmVzLmxlbmd0aDsgaW5kZXgrKyApCi0JICB7Ci0JCVN0cmluZyBzb3VyY2VEaXJOYW1lICAgPSBzcmNEaXJMaW5lc1tpbmRleF07Ci0JICAgIEZpbGUgICBzb3VyY2VEaXJlY3RvcnkgPSBuZXcgRmlsZSggcm9vdERpcmVjdG9yeSwgc291cmNlRGlyTmFtZSApOwotCSAgCi0JICAgIG91dHB1dEZpbGUucHJpbnRsbiggIj09PT09PT5Db250ZXh0IElEcyBmb3IgcGx1Z2luIGRpcmVjdG9yeTogIiArIHNvdXJjZURpck5hbWUgKTsKLQkgICAgCi0JICAgIGZpbmRJZHNGb3JhRGlyZWN0b3J5KCBzb3VyY2VEaXJlY3RvcnksIG91dHB1dEZpbGUgKTsKLQkgIH0KLQl9Ci0JY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotCXsKLQkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JZmluYWxseQotCXsKLQkgIGlmKCBvdXRwdXRGaWxlICE9IG51bGwgKQotCSAgewotCSAgICBvdXRwdXRGaWxlLmNsb3NlKCk7Ci0JICB9Ci0JfQotICB9Ci0gIAotICBzdGF0aWMgcHVibGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaW5kQ29udGV4dElkcyBmaW5kSWRzID0gbmV3IEZpbmRDb250ZXh0SWRzKCk7Ci0gICAgCi0gICAgaWYoIGFyZ3MubGVuZ3RoICE9IDMgKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkVycm9yOiBleHBlY3RpbmcgYSByb290IGRpcmVjdG9yeSwgdGhlIHNvdXJjZSBkaXJlY3RvcnkgZmlsZSBuYW1lLCBhbmQgYW4gb3V0cHV0IGZpbGUgYXMgcGFyYW1ldGVycy4iICk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGZpbmRJZHMuZmluZElkcyggYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSApOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gZmluZElkc0ZvcmFEaXJlY3RvcnkoIEZpbGUgc291cmNlRGlyZWN0b3J5LCBQcmludFdyaXRlciBvdXRwdXRGaWxlICkKLSAgewotCVZlY3RvciAgZmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0JYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQotICAgIFV0aWxzLmdldEZpbGVzKCBzb3VyY2VEaXJlY3RvcnksIGZpbGVzLCAiamF2YSIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBmaWxlLgotICAgIGZvciggaW50IGZpbGVJbmRleCA9IDA7IGZpbGVJbmRleCA8IGZpbGVzLnNpemUoKTsgZmlsZUluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIGxpbmVzID0gVXRpbHMucmVhZExpbmVzKCAoRmlsZSlmaWxlcy5lbGVtZW50QXQoZmlsZUluZGV4KSApOwkKLSAgICAgIAotICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggbGluZSBpbiB0aGUgZmlsZS4KLSAgICAgIGZvciggaW50IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGxpbmVzLmxlbmd0aDsgbGluZUluZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgbGluZSA9IGxpbmVzW2xpbmVJbmRleF07Ci0gICAgICAgIAotICAgICAgICBpZiggbGluZS5pbmRleE9mKCJDT05URVhUX0lEIikgIT0gLTEgKQotICAgICAgICB7Ci0gICAgICAgICAgb3V0cHV0RmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmb3VuZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kRHVwbGljYXRlS2V5cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kRHVwbGljYXRlS2V5cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDJmZmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZER1cGxpY2F0ZUtleXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgRmluZER1cGxpY2F0ZUtleXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgICAgIHN0YXJ0UGF0aCAgICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkZpbGVzICAgPSBVdGlscy5yZWFkTGluZXMoIGFyZ3NbMV0gKTsKLSAgICBWZWN0b3IgICAgICBwcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIEhhc2h0YWJsZSAgIGtleXMgICAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgICAgICA9IG51bGw7Ci0gICAgSGFzaHRhYmxlICAgc3JjS2V5cyAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBWZWN0b3IgICAgICBzcmNGaWxlcyAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciAgICAgIHByb3BOYW1lcyAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgICAgcGx1Z2luTmFtZXMgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5BcnJheSAgID0gbnVsbDsKLSAgICBIYXNodGFibGUgICBzcmNQbHVnaW5NYXAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGFyZ3NbMl0gKSk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwbHVnaW5EaXIgICAgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBwbHVnaW5GaWxlc1tpbmRleF0gKTsKLSAgICAgIAotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgcHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nW117ICJiaW4iLCAiYnVpbGQucHJvcGVydGllcyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2V4cGxvcmVyLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1ZGRpLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2RsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2lsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYXZvcml0ZXMucHJvcGVydGllcyIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgc3JjRmlsZXMsICJqYXZhIiwgbmV3IFN0cmluZ1swXSApOwotICAgIH0KLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBGaWxlICAgcGFyZW50ICAgPSBuZXcgRmlsZSggcHJvcEZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIAotICAgICAgLy8gU2tpcCBwcm9wZXJ0aWVzIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgotICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIHBhcmVudC5nZXROYW1lKCksIHBsdWdpbkZpbGVzICkgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIHByb3BOYW1lID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgc3JjU3RhcnQgPSBwcm9wTmFtZS5pbmRleE9mKCAic3JjIiApOwotICAgICAgCi0gICAgICBpZiggc3JjU3RhcnQgIT0gLTEgKQotICAgICAgewotICAgICAgICBpbnQgbGFzdFNsYXNoID0gcHJvcE5hbWUubGFzdEluZGV4T2YoICdcXCcgKTsKLSAgICAgICAgaW50IGxhc3REb3QgICA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0U2xhc2ggKTsKLSAgICAgICAgU3RyaW5nIG5hbWUyICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0RG90ICk7Ci0gICAgICAgIG5hbWUgID0gbmFtZS5yZXBsYWNlKCAnXFwnLCAnLicgKTsgCi0gICAgICAgIG5hbWUyID0gbmFtZTIucmVwbGFjZSggJ1xcJywgJy4nICk7Ci0gICAgICAgIAotICAgICAgICBwbHVnaW5OYW1lcy5hZGQoIG5hbWUgKTsKLSAgICAgICAgcGx1Z2luTmFtZXMuYWRkKCBuYW1lMiApOwotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbiggcHJvcE5hbWUgKyAiPj4iICsgbmFtZSArICI+PiIgKyBuYW1lMiApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwbHVnaW5BcnJheSA9IChTdHJpbmdbXSlwbHVnaW5OYW1lcy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgCi0gICAgLy8gRmluZCBhbGwgdGhlIGphdmEgc3RyaW5ncy4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3JjRmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgICBzcmNGaWxlICAgICA9IChGaWxlKXNyY0ZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBWZWN0b3IgICBmaWxlU3JjS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIGxpbmVzICAgICAgID0gVXRpbHMucmVhZExpbmVzKHNyY0ZpbGUgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgc3JjSW5kZXggPSAwOyBzcmNJbmRleCA8IGxpbmVzLmxlbmd0aDsgc3JjSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFV0aWxzLmZpbmRKYXZhU3RyaW5ncyggbGluZXNbc3JjSW5kZXhdLCBmaWxlU3JjS2V5cyApOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IoIGludCBrZXlzSW5kZXggPSAwOyBrZXlzSW5kZXggPCBmaWxlU3JjS2V5cy5zaXplKCk7IGtleXNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICBrZXkgICAgID0gKFN0cmluZylmaWxlU3JjS2V5cy5lbGVtZW50QXQoIGtleXNJbmRleCApOwotICAgICAgICBIYXNoU2V0IGZpbGVTZXQgPSAoSGFzaFNldClzcmNLZXlzLmdldCgga2V5ICk7Ci0gICAgICAgIAotICAgICAgICBpZiggZmlsZVNldCA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGZpbGVTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgIHNyY0tleXMucHV0KCBrZXksIGZpbGVTZXQgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIGtleSwgcGx1Z2luQXJyYXkgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNoU2V0IG5hbWVzID0gKEhhc2hTZXQpc3JjUGx1Z2luTWFwLmdldCggc3JjRmlsZSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBuYW1lcyA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICBzcmNQbHVnaW5NYXAucHV0KCBzcmNGaWxlLCBuYW1lcyApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBuYW1lcy5hZGQoIGtleSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaWxlU2V0LmFkZCggc3JjRmlsZSApOwotICAgICAgfQotICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGludCBjb3VudCA9IDE7Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yIHByb3BLZXlzID0gVXRpbHMuZ2V0UHJvcGVydHlLZXlzKCBwcm9wRmlsZSApOyAgCi0gICAgICBGaWxlICAgcGFyZW50ICAgPSBuZXcgRmlsZSggcHJvcEZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIAotICAgICAgLy8gU2tpcCBwcm9wZXJ0aWVzIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgotICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIHBhcmVudC5nZXROYW1lKCksIHBsdWdpbkZpbGVzICkgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAgICAgCi0gICAgICBmb3IoIGludCBwcm9wSW5kZXggPSAwOyBwcm9wSW5kZXggPCBwcm9wS2V5cy5zaXplKCk7IHByb3BJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByb3BLZXkgPSAoU3RyaW5nKXByb3BLZXlzLmVsZW1lbnRBdCggcHJvcEluZGV4ICk7Ci0gICAgICAgIAotICAgICAgICBpZigga2V5cy5jb250YWluc0tleShwcm9wS2V5KSAmJiAhcHJvcEtleS5zdGFydHNXaXRoKCAiUExVR0lOIiApKQotICAgICAgICB7Ci0gICAgICAgICAgRmlsZSBvcmlnRmlsZSA9IChGaWxlKWtleXMuZ2V0KCBwcm9wS2V5ICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgU3RyaW5nIG9yaWdOYW1lID0gb3JpZ0ZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgICAgU3RyaW5nIHByb3BOYW1lID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgb3JpZ05hbWUgPSBvcmlnTmFtZS5zdWJzdHJpbmcoIGFyZ3NbMF0ubGVuZ3RoKCksIG9yaWdOYW1lLmxlbmd0aCgpICk7Ci0gICAgICAgICAgcHJvcE5hbWUgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIGFyZ3NbMF0ubGVuZ3RoKCksIHByb3BOYW1lLmxlbmd0aCgpICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgSGFzaFNldCBmaWxlU2V0ID0gKEhhc2hTZXQpc3JjS2V5cy5nZXQoIHByb3BLZXkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggZmlsZVNldCAhPSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZXIucHJpbnRsbiggY291bnQgKyAiIFByb3BlcnR5OiAiICsgcHJvcEtleSArICIgaXMgaW4gYm90aCAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ05hbWUgKyAiIGFuZCAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBJdGVyYXRvciBpdGVyID0gZmlsZVNldC5pdGVyYXRvcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGaWxlIGZpbGUgPSAoRmlsZSlpdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oICIgID4iICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgSGFzaFNldCAgbmFtZXMgPSAoSGFzaFNldClzcmNQbHVnaW5NYXAuZ2V0KCBmaWxlICk7Ci0gICAgICAgICAgICAgIEl0ZXJhdG9yIG5hbWVJdGVyID0gbmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIHdoaWxlKCBuYW1lSXRlci5oYXNOZXh0KCkgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oICIgICAgPiIgKyBuYW1lSXRlci5uZXh0KCkgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBrZXlzLnB1dCggcHJvcEtleSwgcHJvcEZpbGUgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUGVyY2VudFN0cmluZy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUGVyY2VudFN0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2RlZjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFBlcmNlbnRTdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBGaW5kUGVyY2VudFN0cmluZyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFByaW50V3JpdGVyIHdyaXRlciAgICAgICAgPSBudWxsOwotICAgIFZlY3RvciAgICAgIHNyY0ZpbGVzICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggYXJnc1syXSApKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHBsdWdpbkRpciAgICAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIHBsdWdpbkZpbGVzW2luZGV4XSApOwotICAgICAgCi0gICAgICBpZiggcGx1Z2luRGlyICE9IG51bGwgKQotICAgICAgewotICAgICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBzcmNGaWxlcywgImphdmEiLCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgIAotICAgIC8vIEZpbmQgYWxsIHRoZSBqYXZhIHN0cmluZ3MuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0ZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgICAgc3JjRmlsZSAgICAgPSAoRmlsZSlzcmNGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yICAgZmlsZVNyY0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBsaW5lcyAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyhzcmNGaWxlICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCBsaW5lcy5sZW5ndGg7IHNyY0luZGV4KysgKQotICAgICAgewotICAgICAgICBVdGlscy5maW5kSmF2YVN0cmluZ3MoIGxpbmVzW3NyY0luZGV4XSwgZmlsZVNyY0tleXMgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZm9yKCBpbnQga2V5c0luZGV4ID0gMDsga2V5c0luZGV4IDwgZmlsZVNyY0tleXMuc2l6ZSgpOyBrZXlzSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAga2V5ID0gKFN0cmluZylmaWxlU3JjS2V5cy5lbGVtZW50QXQoIGtleXNJbmRleCApOwotICAgICAgICAKLSAgICAgICAgaWYoIGtleS5zdGFydHNXaXRoKCIlIiApICkKLSAgICAgICAgewotICAgICAgICAgIHdyaXRlci5wcmludGxuKCBrZXkgKyAiID4+ICIgKyBzcmNGaWxlLmdldE5hbWUoKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQcm9wZXJ0eU1vdmVtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQcm9wZXJ0eU1vdmVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjYzNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUHJvcGVydHlNb3ZlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnR5UmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgRmluZFByb3BlcnR5TW92ZW1lbnQgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgb2xkUGF0aCAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgRmlsZSBuZXdQYXRoICAgID0gbmV3IEZpbGUoIGFyZ3NbMV0gKTsKLSAgICBGaWxlIG91dHB1dEZpbGUgPSBuZXcgRmlsZSggYXJnc1syXSApOwotICAgCi0gICAgVmVjdG9yICAgIG9sZFByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgIG5ld1Byb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgSGFzaHRhYmxlIG9sZEtleU1hcCAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSGFzaHRhYmxlIG5ld0tleU1hcCAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCi0gICAgVXRpbHMuZ2V0RmlsZXMoIG9sZFBhdGgsIG9sZFByb3BlcnR5RmlsZXMsICJwcm9wZXJ0aWVzIiwgbmV3IFN0cmluZ1swXSApOwotICAgIFV0aWxzLmdldEZpbGVzKCBuZXdQYXRoLCBuZXdQcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbMF0gKTsKLQotICAgIGJ1aWxkTWFwKCBvbGRQcm9wZXJ0eUZpbGVzLCBvbGRLZXlNYXAgKTsKLSAgICBidWlsZE1hcCggbmV3UHJvcGVydHlGaWxlcywgbmV3S2V5TWFwICk7Ci0gICAgCi0gICAgU2V0ICAgICAgICAgbmV3S2V5U2V0ID0gbmV3S2V5TWFwLmVudHJ5U2V0KCk7Ci0gICAgSXRlcmF0b3IgICAgaXRlciAgICAgID0gbmV3S2V5U2V0Lml0ZXJhdG9yKCk7Ci0gICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBvdXRwdXRGaWxlICkpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgJiYgd3JpdGVyICE9IG51bGwgKQotICAgIHsKLSAgICAgIE1hcC5FbnRyeSBlbnRyeSAgICAgICA9IChNYXAuRW50cnkpaXRlci5uZXh0KCk7Ci0gICAgICBTdHJpbmcgICAgcHJvcGVydHkgICAgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgU3RyaW5nICAgIG5ld0ZpbGVOYW1lID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgU3RyaW5nICAgIG9sZEZpbGVOYW1lID0gKFN0cmluZylvbGRLZXlNYXAuZ2V0KCBwcm9wZXJ0eSApOwotICAgICAgCi0gICAgICBpZiggb2xkRmlsZU5hbWUgPT0gbnVsbCB8fCBuZXdGaWxlTmFtZS5lcXVhbHMoIG9sZEZpbGVOYW1lICkgKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLiAgRWl0aGVyIHRoaXMga2V5IGRpZG4ndCBleGlzdCBpbiB0aGUgb2xkIHByb3BlcnR5Ci0gICAgICAgIC8vIGZpbGVzIG9yIHRoaXMga2V5IGlzIHN0aWxsIGluIHRoZSBzYW1lIHByb3BlcnR5IGZpbGUuCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHdyaXRlci5wcmludGxuKCBwcm9wZXJ0eSArICIgIiArIG9sZEZpbGVOYW1lICsgIiAiICsgbmV3RmlsZU5hbWUgKTsgCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBidWlsZE1hcCggVmVjdG9yIGlucHV0RmlsZXMsIEhhc2h0YWJsZSBrZXlNYXAgKQotICB7Ci0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgICAgICBwcm9wRmlsZSAgICA9IChGaWxlKWlucHV0RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFN0cmluZyAgICAgIHByb3BOYW1lICAgID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgICAgICBwbHVnaW5JbmRleCA9IHByb3BOYW1lLmluZGV4T2YoICJwbHVnaW5zIiApOwotICAgICAgU3RyaW5nICAgICAgcHJvcFN0cmluZyAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHBsdWdpbkluZGV4LCBwcm9wTmFtZS5sZW5ndGgoKSApOyAgICAgIAotICAgICAgSW5wdXRTdHJlYW0gc3RyZWFtICAgICAgPSBudWxsOwotICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggcHJvcEZpbGUgKTsKLSAgICAgICAgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBuZXcgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZSggc3RyZWFtICk7Ci0gICAgICAgIAotICAgICAgICBFbnVtZXJhdGlvbiBrZXlzID0gYnVuZGxlLmdldEtleXMoKTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxlKCBrZXlzLmhhc01vcmVFbGVtZW50cygpICkKLSAgICAgICAgewotICAgICAgICAgIGtleU1hcC5wdXQoIGtleXMubmV4dEVsZW1lbnQoKSwgcHJvcFN0cmluZyApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiggc3RyZWFtICE9IG51bGwgKSBzdHJlYW0uY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0dlblBsdWdpblByb3BlcnRpZXNGcm9tUGx1Z2luWG1sLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0dlblBsdWdpblByb3BlcnRpZXNGcm9tUGx1Z2luWG1sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NmRkZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9HZW5QbHVnaW5Qcm9wZXJ0aWVzRnJvbVBsdWdpblhtbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci0KLXB1YmxpYyBjbGFzcyBHZW5QbHVnaW5Qcm9wZXJ0aWVzRnJvbVBsdWdpblhtbCAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgc3RhcnRQYXRoID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBTdHJpbmdbXSBwbHVnaW5GaWxlcyA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHBsdWdpbkZpbGVzW2luZGV4XTsKLSAgICAgIAotICAgICAgSGFzaFNldCBrZXlzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgIEZpbGUgICAgZGlyICA9IFV0aWxzLmdldEZpbGUoIHN0YXJ0UGF0aCwgZmlsZW5hbWUgKTsKLSAgICAgIEZpbGUgICAgZmlsZSA9IFV0aWxzLmdldEZpbGUoIGRpciwgInBsdWdpbi54bWwiICk7Ci0KLSAgICAgIGlmKCBmaWxlID09IG51bGwgKSBjb250aW51ZTsKLSAgICAgIAotICAgICAgVXRpbHMuZ2V0UGx1Z2luWE1MS2V5cyggZmlsZSwga2V5cyApOwotCi0gICAgICBGaWxlIHByb3BmaWxlID0gVXRpbHMuZ2V0RmlsZSggZGlyLCAicGx1Z2luLnByb3BlcnRpZXMiICk7Ci0gICAgICAKLSAgICAgIGlmKCBrZXlzLnNpemUoKSA+IDAgJiYgcHJvcGZpbGUgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTm8gcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBmb3I6IiArIGZpbGUgKTsKLSAgICAgICAgICBwcm9wZmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoICJwcmVmaXgiLCAic3VmZml4IiApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZigga2V5cy5zaXplKCkgPT0gMCApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgICAgICAgCi0gICAgICBGaWxlICAgICAgICAgICBvdXRwdXRGaWxlID0gbmV3IEZpbGUoIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsgInBsdWdpbi5wcm9wZXJ0aWVzLm5ldyIgKTsKLSAgICAgIEZpbGUgICAgICAgICAgIGRlbEZpbGUgPSBuZXcgRmlsZSggZGlyLmdldEFic29sdXRlUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKyAicGx1Z2luLnByb3BlcnRpZXMuZGVsIiApOwotICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgICA9IG51bGw7Ci0gICAgICBQcmludFdyaXRlciBkZWxXcml0ZXIgID0gbnVsbDsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG91dHB1dEZpbGUgKSApOwotICAgICAgICBkZWxXcml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBkZWxGaWxlICkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJHZW5lcmF0aW5nIG91dHB1dCB0bzoiICsgb3V0cHV0RmlsZSApOwotICAgICAgICBVdGlscy5jcmVhdGVPdXRwdXRGaWxlKCBrZXlzLCBwcm9wZmlsZSwgd3JpdGVyLCBkZWxXcml0ZXIgKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOyAKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgICBpZiggZGVsV3JpdGVyICE9IG51bGwgKSBkZWxXcml0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAKLSAgICB9Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9MaXN0UHJvcGVydHlGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9MaXN0UHJvcGVydHlGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTBhNmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvTGlzdFByb3BlcnR5RmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0UHJvcGVydHlGaWxlcyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgVmVjdG9yICAgICAgcHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBVdGlscy5nZXRGaWxlcyggc3RhcnRQYXRoLCBwcm9wZXJ0eUZpbGVzLCAiYmFja3VwIiwgbmV3IFN0cmluZ1tdeyAiYmluIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgICAgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBTdHJpbmcgcHJvcE5hbWUgICAgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICBwbHVnaW5JbmRleCA9IHByb3BOYW1lLmluZGV4T2YoICJwbHVnaW5zIiApOwotICAgICAgaW50ICAgIGZpcnN0U2xhc2ggID0gcHJvcE5hbWUuaW5kZXhPZiggIlxcIiwgcGx1Z2luSW5kZXggKTsKLSAgICAgIGludCAgICBuZXh0U2xhc2ggICA9IHByb3BOYW1lLmluZGV4T2YoICJcXCIsIGZpcnN0U2xhc2grMSApOwotICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBmaXJzdFNsYXNoICsgMSwgbmV4dFNsYXNoICk7Ci0gICAgICBpbnQgICAgdW5kZXJJbmRleCAgPSBwbHVnaW5OYW1lLmluZGV4T2YoICdfJyApOwotICAgICAgCi0gICAgICBpZiggdW5kZXJJbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHBsdWdpbk5hbWUgPSBwbHVnaW5OYW1lLnN1YnN0cmluZyggMCwgdW5kZXJJbmRleCApOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmcgbmV3TmFtZSA9ICJkZWwgIHBsdWdpbnMiICsgCi0gICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcGx1Z2luTmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcHJvcE5hbWUuc3Vic3RyaW5nKCBuZXh0U2xhc2grMSwgcHJvcE5hbWUubGVuZ3RoKCkgKTsKLQotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBuZXdOYW1lICk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZUJyYWNrZXRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZUJyYWNrZXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTY4MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVCcmFja2V0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmF3dC5CdXR0b247Ci1pbXBvcnQgamF2YS5hd3QuRXZlbnQ7Ci1pbXBvcnQgamF2YS5hd3QuRnJhbWU7Ci1pbXBvcnQgamF2YS5hd3QuR3JpZExheW91dDsKLWltcG9ydCBqYXZhLmF3dC5UZXh0QXJlYTsKLWltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKLWltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIFJlbW92ZUJyYWNrZXRzIGV4dGVuZHMgRnJhbWUgCi17Ci0gIC8qKgotICAgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzYxNzI5MjMyMDI5OTgyNDE3Nkw7Ci0gIHByaXZhdGUgVGV4dEFyZWEgaW5wdXRBcmVhXzsKLSAgcHJpdmF0ZSBUZXh0QXJlYSBvdXRwdXRBcmVhXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBidXR0b25fOwotICAKLSAgcHVibGljIFJlbW92ZUJyYWNrZXRzKCkKLSAgewotICAJc3VwZXIoICJDb252ZXJ0IEhUTUwgYnJhY2tldHMiICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIAotICB7Ci0gIAlSZW1vdmVCcmFja2V0cyBjb252ZXJ0ID0gbmV3IFJlbW92ZUJyYWNrZXRzKCk7Ci0gIAkKLSAgCWNvbnZlcnQuYnVpbGRVSSgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYnVpbGRVSSgpCi0gIHsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDMsMSk7Ci0gICAgLy9sYXlvdXQuc2V0Q29sdW1ucygxKTsKLSAgICBzZXRMYXlvdXQoIGxheW91dCApOwotICAgIAotICAgIGlucHV0QXJlYV8gID0gbmV3IFRleHRBcmVhKCAxMCwgNTAgKTsKLSAgICBvdXRwdXRBcmVhXyA9IG5ldyBUZXh0QXJlYSggMTAsIDUwICk7Ci0gICAgYnV0dG9uXyAgICAgPSBuZXcgQnV0dG9uKCAiUHJlc3MgaGVyZSB0byBjb252ZXJ0IHRvIEhUTUwiICk7Ci0gICAgCi0gICAgaW5wdXRBcmVhXy5zZXRFZGl0YWJsZSggdHJ1ZSApOwotICAgIG91dHB1dEFyZWFfLnNldEVkaXRhYmxlKCB0cnVlICk7Ci0gICAgYnV0dG9uXy5hZGRBY3Rpb25MaXN0ZW5lciggbmV3IEFjdGlvbkxpc3RlbmVyKCkKLSAgICAJCSAgICAgICAgICAgICAgICAgICB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoIEFjdGlvbkV2ZW50IGV2dCApCi0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUZXh0KCk7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgCQkgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgYWRkKCBpbnB1dEFyZWFfICk7Ci0gICAgYWRkKCBidXR0b25fICk7Ci0gICAgYWRkKCBvdXRwdXRBcmVhXyApOwotICAgIC8vc2V0U2l6ZSggMTAwLCAxMDAgKTsKLSAgICBwYWNrKCk7Ci0gICAgc2hvdygpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVFdmVudCggRXZlbnQgZXZ0ICkKLSAgewotICAgIGlmKCBldnQuaWQgPT0gRXZlbnQuV0lORE9XX0RFU1RST1kgKQotICAgIHsKLSAgICAgIFN5c3RlbS5leGl0KDApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRUZXh0KCkKLSAgewotICAJU3RyaW5nIGlucHV0U3RyaW5nID0gaW5wdXRBcmVhXy5nZXRUZXh0KCk7Ci0gIAlTdHJpbmcgb3V0cHV0U3RyaW5nID0gaW5wdXRTdHJpbmcucmVwbGFjZUFsbCggIjwiLCAiJmx0OyIpOwotICAJCi0gIAlvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcucmVwbGFjZUFsbCggIj4iLCAiJmd0OyIgKTsKLSAgCQotICAJb3V0cHV0QXJlYV8uc2V0VGV4dCggb3V0cHV0U3RyaW5nICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlVW51c2VkS2V5cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVVbnVzZWRLZXlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZWE4NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVVbnVzZWRLZXlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlVW51c2VkS2V5cyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFZlY3RvciAgICAgIHByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSGFzaHRhYmxlICAga2V5cyAgICAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBIYXNodGFibGUgICBzcmNLZXlzICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFZlY3RvciAgICAgIHNyY0ZpbGVzICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgICAgcHJvcE5hbWVzICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgICAgICBwbHVnaW5OYW1lcyAgID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkFycmF5ICAgPSBudWxsOwotICAgIEhhc2h0YWJsZSAgIHNyY1BsdWdpbk1hcCAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCi0gICAgCi0gICAgLy8gRmluZCBhbGwgdGhlIHByb3BlcnR5IGZpbGVzLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwbHVnaW5EaXIgICAgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBwbHVnaW5GaWxlc1tpbmRleF0gKTsKLSAgICAgIAotICAgICAgaWYoIHBsdWdpbkRpciA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUGx1Z2luOiAiICsgcGx1Z2luRmlsZXNbaW5kZXhdICsgIiBub3QgZm91bmQhIiApOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgcHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nW117ICJiaW4iLCAiYnVpbGQucHJvcGVydGllcyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2V4cGxvcmVyLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1ZGRpLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2RsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2lsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYXZvcml0ZXMucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ld3Byb3BzLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxwcm9wcy5wcm9wZXJ0aWVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHNyY0ZpbGVzLCAiamF2YSIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgRmlsZSAgIHBhcmVudCAgID0gbmV3IEZpbGUoIHByb3BGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICAKLSAgICAgIC8vIFNraXAgcHJvcGVydGllcyBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KLSAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBwYXJlbnQuZ2V0TmFtZSgpLCBwbHVnaW5GaWxlcyApICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN0cmluZyBwcm9wTmFtZSA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHNyY1N0YXJ0ID0gcHJvcE5hbWUuaW5kZXhPZiggInNyYyIgKTsKLSAgICAgIAotICAgICAgaWYoIHNyY1N0YXJ0ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RTbGFzaCA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnXFwnICk7Ci0gICAgICAgIGludCBsYXN0RG90ICAgPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJy4nICk7Ci0gICAgICAgIFN0cmluZyBuYW1lICAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdFNsYXNoICk7Ci0gICAgICAgIFN0cmluZyBuYW1lMiAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdERvdCApOwotICAgICAgICBuYW1lICA9IG5hbWUucmVwbGFjZSggJ1xcJywgJy4nICk7IAotICAgICAgICBuYW1lMiA9IG5hbWUyLnJlcGxhY2UoICdcXCcsICcuJyApOwotICAgICAgICAKLSAgICAgICAgcGx1Z2luTmFtZXMuYWRkKCBuYW1lICk7Ci0gICAgICAgIHBsdWdpbk5hbWVzLmFkZCggbmFtZTIgKTsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIHByb3BOYW1lICsgIj4+IiArIG5hbWUgKyAiPj4iICsgbmFtZTIgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcGx1Z2luQXJyYXkgPSAoU3RyaW5nW10pcGx1Z2luTmFtZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICAgIAotICAgIC8vIEZpbmQgYWxsIHRoZSBqYXZhIHN0cmluZ3MuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0ZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgICAgc3JjRmlsZSAgICAgPSAoRmlsZSlzcmNGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yICAgZmlsZVNyY0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBsaW5lcyAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyhzcmNGaWxlICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCBsaW5lcy5sZW5ndGg7IHNyY0luZGV4KysgKQotICAgICAgewotICAgICAgICBVdGlscy5maW5kSmF2YVN0cmluZ3MoIGxpbmVzW3NyY0luZGV4XSwgZmlsZVNyY0tleXMgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZm9yKCBpbnQga2V5c0luZGV4ID0gMDsga2V5c0luZGV4IDwgZmlsZVNyY0tleXMuc2l6ZSgpOyBrZXlzSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAga2V5ICAgICA9IChTdHJpbmcpZmlsZVNyY0tleXMuZWxlbWVudEF0KCBrZXlzSW5kZXggKTsKLSAgICAgICAgSGFzaFNldCBmaWxlU2V0ID0gKEhhc2hTZXQpc3JjS2V5cy5nZXQoIGtleSApOwotICAgICAgICAKLSAgICAgICAgaWYoIGZpbGVTZXQgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBmaWxlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICBzcmNLZXlzLnB1dCgga2V5LCBmaWxlU2V0ICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBrZXksIHBsdWdpbkFycmF5ICkgKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaFNldCBuYW1lcyA9IChIYXNoU2V0KXNyY1BsdWdpbk1hcC5nZXQoIHNyY0ZpbGUgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbmFtZXMgPT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgc3JjUGx1Z2luTWFwLnB1dCggc3JjRmlsZSwgbmFtZXMgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgbmFtZXMuYWRkKCBrZXkgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmlsZVNldC5hZGQoIHNyY0ZpbGUgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnQgY291bnQgPSAxOwotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFZlY3RvciBwcm9wS2V5cyA9IFV0aWxzLmdldFByb3BlcnR5S2V5cyggcHJvcEZpbGUgKTsgIAotICAgICAgRmlsZSAgIHBhcmVudCAgID0gbmV3IEZpbGUoIHByb3BGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICAKLSAgICAgIC8vIFNraXAgcHJvcGVydGllcyBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KLSAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBwYXJlbnQuZ2V0TmFtZSgpLCBwbHVnaW5GaWxlcyApICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgIFN0cmluZyBwcm9wTmFtZSAgID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgc3JjU3RhcnQgICA9IHByb3BOYW1lLmluZGV4T2YoICJzcmMiICk7Ci0gICAgICBTdHJpbmcgZm9sZGVyTmFtZSA9ICIiOwotICAgICAgU3RyaW5nIHBrZ05hbWUgID0gIiI7Ci0gICAgICAKLSAgICAgIGlmKCBzcmNTdGFydCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIGludCBsYXN0U2xhc2ggPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJ1xcJyApOwotICAgICAgICBTdHJpbmcgbmFtZSAgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBzcmNTdGFydCArIDQsIGxhc3RTbGFzaCApOwotICAgICAgICBuYW1lICA9IG5hbWUucmVwbGFjZSggJ1xcJywgJy4nICk7IAotICAgICAgICAKLSAgICAgICAgcGtnTmFtZSAgICA9IG5hbWU7Ci0gICAgICAgIGZvbGRlck5hbWUgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIDAsIGxhc3RTbGFzaCArIDEgKTsgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpICk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBuZXdQcm9wTmFtZSA9IGZvbGRlck5hbWUgKyAibmV3cHJvcHMucHJvcGVydGllcyI7Ci0gICAgICBTdHJpbmcgZGVsUHJvcE5hbWUgPSBmb2xkZXJOYW1lICsgImRlbHByb3BzLnByb3BlcnRpZXMiOwotICAgICAgCi0gICAgICBQcmludFdyaXRlciBuZXdQcm9wZXJ0eUZpbGUgPSBudWxsOwotICAgICAgUHJpbnRXcml0ZXIgZGVsUHJvcGVydHlGaWxlID0gbnVsbDsKLSAgICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgbmV3UHJvcGVydHlGaWxlID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggbmV3UHJvcE5hbWUgKSk7Ci0gICAgICAgIGRlbFByb3BlcnR5RmlsZSA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGRlbFByb3BOYW1lICkpOwotICAgICAgICAKLSAgICAgICAgVXRpbHMuY3JlYXRlT3V0cHV0RmlsZSggc3JjS2V5cy5rZXlTZXQoKSwgcHJvcEZpbGUsIG5ld1Byb3BlcnR5RmlsZSwgZGVsUHJvcGVydHlGaWxlICk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsgCi0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmKCBuZXdQcm9wZXJ0eUZpbGUgIT0gbnVsbCApIG5ld1Byb3BlcnR5RmlsZS5jbG9zZSgpOwotICAgICAgICBpZiggZGVsUHJvcGVydHlGaWxlICE9IG51bGwgKSBkZWxQcm9wZXJ0eUZpbGUuY2xvc2UoKTsKLSAgICAgIH0gICAgIAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VcGRhdGVGZWF0dXJlWE1MRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXBkYXRlRmVhdHVyZVhNTEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZmFlZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VcGRhdGVGZWF0dXJlWE1MRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVGZWF0dXJlWE1MRmlsZXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAJU3RyaW5nIHJvb3RQYXRoICAgICA9IGFyZ3NbMF07Ci0gIAlGaWxlICAgcm9vdEZpbGUgICAgID0gbmV3IEZpbGUoIHJvb3RQYXRoICk7Ci0gIAlWZWN0b3IgZmVhdHVyZUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAJCi0gIAlnZXRGaWxlcyggZmVhdHVyZUZpbGVzLCByb290RmlsZSApOwotICAJCi0gIAlpbnQgc2l6ZSA9IGZlYXR1cmVGaWxlcy5zaXplKCk7Ci0gIAkKLSAgCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCsrICkKLSAgCXsKLSAgCSAgRmlsZSAgICAgZmlsZSAgICAgID0gKEZpbGUpZmVhdHVyZUZpbGVzLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgCSAgU3RyaW5nICAgZmlsZU5hbWUgID0gZmlsZS5nZXROYW1lKCk7Ci0gIAkgIGludCAgICAgIGxhbmdJbmRleCA9IGZpbGVOYW1lLmluZGV4T2YoICJmZWF0dXJlXyIgKTsKLSAgCSAgaW50ICAgICAgZG90SW5kZXggID0gZmlsZU5hbWUuaW5kZXhPZiggJy4nLCBsYW5nSW5kZXggKTsKLSAgCSAgU3RyaW5nICAgbGFuZyAgICAgID0gZmlsZU5hbWUuc3Vic3RyaW5nKCBsYW5nSW5kZXggKyA4LCBkb3RJbmRleCApOwotICAJICBTdHJpbmdbXSBsaW5lcyAgICAgPSBVdGlscy5yZWFkTGluZXMoIGZpbGUgKTsKLSAgCSAgCi0JICBQcmludFdyaXRlciB3cml0ZXIgICAgID0gbnVsbDsKLSAgCSAgRmlsZVdyaXRlciAgZmlsZVdyaXRlciA9IG51bGw7Ci0gIAkgIAotICAJICB0cnkKLQkgIHsKLQkgICAgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKCBmaWxlICk7Ci0gIAkgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBmaWxlV3JpdGVyICk7Ci0gIAkgICAgCi0gIAkgICAgZm9yKCBpbnQgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZXMubGVuZ3RoOyBsaW5lSW5kZXgrKyApCi0gIAkgICAgewotICAJICAJICBTdHJpbmcgbGluZSA9IGxpbmVzW2xpbmVJbmRleF07Ci0gIAkgIAkKLSAgCSAgCSAgaWYoIGxpbmUuaW5kZXhPZiggImxpY2Vuc2VVUkwiICkgIT0gLTEgKQotICAJICAJICB7Ci0gIAkgIAkJd3JpdGVyLnByaW50bG4oICJsaWNlbnNlVVJMPWxpY2Vuc2VfIiArIGxhbmcgKyAiLmh0bWwiICk7Ci0gIAkgIAkgIH0KLSAgCSAgCSAgZWxzZQotICAJICAJICB7Ci0gIAkgIAkJd3JpdGVyLnByaW50bG4oIGxpbmUgKTsKLSAgCSAgCSAgfQotICAJICAgIH0KLQkgIH0KLSAgCSAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotCSAgewotICAJICAJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotICAJICBmaW5hbGx5Ci0JICB7Ci0gIAkgIAl0cnkKLQkJewotICAJICAJICB3cml0ZXIuY2xvc2UoKTsKLSAgCSAgCSAgZmlsZVdyaXRlci5jbG9zZSgpOwotCQl9Ci0gIAkgIAljYXRjaCggRXhjZXB0aW9uIGV4YyApCi0JCXsKLSAgCSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JICB9Ci0gIAl9Ci0gIH0KLSAgCi0gIHN0YXRpYyBwcml2YXRlIHZvaWQgZ2V0RmlsZXMoIFZlY3RvciBmaWxlcywgRmlsZSBwYXRoICkKLSAgewotICAgIGlmKCBwYXRoLmlzRGlyZWN0b3J5KCkgKQotICAgIHsKLSAgICAgIEZpbGVbXSBjaGlsZHJlbiA9IHBhdGgubGlzdEZpbGVzKCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgCWdldEZpbGVzKCBmaWxlcywgY2hpbGRyZW5baW5kZXhdICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgcGF0aE5hbWUgPSBwYXRoLmdldE5hbWUoKTsKLSAgICAgICAgICAgIAotICAgICAgaW50ICAgIGluZGV4ICAgID0gcGF0aE5hbWUuaW5kZXhPZiggImZlYXR1cmVfIiApOwotICAgICAgCi0gICAgICBpZiggaW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgCWZpbGVzLmFkZCggcGF0aCApOwotICAgICAgfQotICAgIH0gIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1V0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjBkYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnR5UmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIFV0aWxzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlT3V0cHV0RmlsZSggQ29sbGVjdGlvbiBrZXlzLCBGaWxlIHByb3BzRmlsZSwgUHJpbnRXcml0ZXIgb3V0cHV0RmlsZSwgUHJpbnRXcml0ZXIgZGVsZXRlRmlsZSApCi0gIHsKLSAgICBTdHJpbmdbXSBsaW5lcyAgICAgICAgPSByZWFkTGluZXMoIHByb3BzRmlsZSApOwotICAgIGJvb2xlYW4gIGNvbnRpbnVlTGluZSA9IGZhbHNlOwotICAgIGJvb2xlYW4gIGRlbGV0ZUtleSAgICA9IGZhbHNlOwotICAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgICBsaW5lID0gbGluZXNbaW5kZXhdLnRyaW0oKTsKLSAgICAgIAotICAgICAgaWYoIGNvbnRpbnVlTGluZSApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlTGluZSA9IGxpbmUuZW5kc1dpdGgoICJcXCIgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCAhZGVsZXRlS2V5ICkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dEZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRlbGV0ZUZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgY29udGludWVMaW5lID0gbGluZS5lbmRzV2l0aCggIlxcIiApOwotICAgICAgCi0gICAgICBib29sZWFuICB2YWxpZEtleSAgICAgPSBpc0xpbmVLZXkoIGtleXMsIGxpbmUgKTsKLSAgICAgIGJvb2xlYW4gIGhhc0tleSAgICAgICA9IGxpbmUuaW5kZXhPZiggJz0nICkgIT0gLTE7Ci0gICAgICAKLSAgICAgIGlmKCB2YWxpZEtleSApCi0gICAgICB7Ci0gICAgICAgIG91dHB1dEZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICBkZWxldGVLZXkgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGhhc0tleSApCi0gICAgICB7Ci0gICAgICAgIGRlbGV0ZUtleSA9IHRydWU7Ci0gICAgICAgIGRlbGV0ZUZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvdXRwdXRGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xpbmVLZXkoIENvbGxlY3Rpb24ga2V5cywgU3RyaW5nIGxpbmUgKQotICB7Ci0gICAgYm9vbGVhbiAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgSXRlcmF0b3IgaXRlciAgID0ga2V5cy5pdGVyYXRvcigpOwotICAgIGludCAgICAgIGVxdWFsSW5kZXggPSBsaW5lLmluZGV4T2YoICc9JyApOwotICAgIFN0cmluZyAgIGtleSAgICAgICAgPSBudWxsOwotICAgIAotICAgIGlmKCBlcXVhbEluZGV4ICE9IC0xICYmICFsaW5lLnN0YXJ0c1dpdGgoICIjIiApKQotICAgIHsKLSAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKCAwLCBlcXVhbEluZGV4ICk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlKCBpdGVyLmhhc05leHQoKSAmJiBrZXkgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RyaW5nIGNvbGxlY3Rpb25LZXkgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOwotICAgICAgaWYoIGtleS5lcXVhbHMoIGNvbGxlY3Rpb25LZXkgKSB8fCBjb2xsZWN0aW9uS2V5LmVxdWFscyggJyUnICsga2V5ICkgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGdldFBsdWdpblhNTEtleXMoIEZpbGUgZmlsZSwgSGFzaFNldCBrZXlzICkKLSAgewotICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlciggZmlsZSApICk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCBsaW5lICE9IG51bGwgKQotICAgICAgewotICAgICAgICBWZWN0b3IgbGluZWtleXMgPSBmaW5kS2V5cyggbGluZSApOwotICAgICAgICBrZXlzLmFkZEFsbCggbGluZWtleXMgKTsKLSAgICAgICAgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKCByZWFkZXIgIT0gbnVsbCApIHJlYWRlci5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0RmlsZSggRmlsZSBiYXNlLCBmaW5hbCBTdHJpbmcgY2hpbGQgKQotICB7Ci0gICAgRmlsZVtdIGZpbGUgPSBiYXNlLmxpc3RGaWxlcyggbmV3IEZpbGVuYW1lRmlsdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoIEZpbGUgZmlsZSwgU3RyaW5nIG5hbWUgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBuYW1lLmluZGV4T2YoICdfJyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGluZGV4ICE9IC0xICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyggMCwgaW5kZXggKTsgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZS5lbmRzV2l0aCggY2hpbGQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgcmV0dXJuIGZpbGUubGVuZ3RoID09IDAgPyBudWxsIDogZmlsZVswXTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBWZWN0b3IgZmluZEtleXMoIFN0cmluZyBsaW5lICkKLSAgewotICAgIFZlY3RvciBrZXlzICAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIGludCAgICBxdW90ZXN0YXJ0ID0gbGluZS5pbmRleE9mKCAnIicgKTsKLSAgICBpbnQgICAgcXVvdGVlbmQgICA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZXN0YXJ0ICsgMSApOwotICAgIAotICAgIHdoaWxlKCBxdW90ZXN0YXJ0ICE9IC0xICYmIHF1b3RlZW5kICE9IC0xICYmIHF1b3Rlc3RhcnQgPCBxdW90ZWVuZCApCi0gICAgewotICAgICAgU3RyaW5nIGtleSA9IGxpbmUuc3Vic3RyaW5nKCBxdW90ZXN0YXJ0KzEsIHF1b3RlZW5kICk7Ci0gICAgICAKLSAgICAgIGlmKCBrZXkuc3RhcnRzV2l0aCggIiUiKSApCi0gICAgICB7Ci0gICAgICAgIGtleXMuYWRkKCBrZXkuc3Vic3RyaW5nKDEsIGtleS5sZW5ndGgoKSApICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHF1b3Rlc3RhcnQgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVlbmQrMSApOwotICAgICAgcXVvdGVlbmQgICA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZXN0YXJ0KzEgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGtleXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBmaW5kSmF2YVN0cmluZ3MoIFN0cmluZyBsaW5lLCBWZWN0b3Iga2V5cyApCi0gIHsKLSAgICBpbnQgICAgcXVvdGVzdGFydCA9IGxpbmUuaW5kZXhPZiggJyInICk7Ci0gICAgaW50ICAgIHF1b3RlZW5kICAgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVzdGFydCArIDEgKTsKLSAgICAKLSAgICB3aGlsZSggcXVvdGVzdGFydCAhPSAtMSAmJiBxdW90ZWVuZCAhPSAtMSAmJiBxdW90ZXN0YXJ0IDwgcXVvdGVlbmQgKQotICAgIHsKLSAgICAgIC8vIEZpbmQgbGFzdCByZWFsIGVuZGluZyBxdW90ZS4KLSAgICAgIHdoaWxlKCBxdW90ZXN0YXJ0ICE9IC0xICYmIHF1b3RlZW5kICE9IC0xICYmIGxpbmUuY2hhckF0KCBxdW90ZWVuZC0xICkgPT0gJ1xcJyApCi0gICAgICB7Ci0gICAgICAgIHF1b3RlZW5kID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3RlZW5kICsgMSApOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiggcXVvdGVzdGFydCA9PSAtMSB8fCBxdW90ZWVuZCA9PSAtMSB8fCBxdW90ZXN0YXJ0ID4gcXVvdGVlbmQgKSBicmVhazsKLSAgICAgIAotICAgICAgU3RyaW5nIGtleSA9IGxpbmUuc3Vic3RyaW5nKCBxdW90ZXN0YXJ0KzEsIHF1b3RlZW5kICk7Ci0gICAgICAKLSAgICAgIGtleXMuYWRkKCBrZXkgKTsKLSAgICAgIAotICAgICAgcXVvdGVzdGFydCA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZWVuZCsxICk7Ci0gICAgICBxdW90ZWVuZCAgID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3Rlc3RhcnQrMSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSByZWFkTGluZXMoIEZpbGUgZmlsZSApCi0gIHsKLSAgICBWZWN0b3IgZmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKCBmaWxlICkgKTsKLSAgICAgIAotICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIAotICAgICAgd2hpbGUoIGxpbmUgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGZpbGVzLmFkZCggbGluZSApOwotICAgICAgICBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJQcm9ibGVtIG9wZW5pbmcgZmlsZToiICsgZmlsZSApOwotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKCByZWFkZXIgIT0gbnVsbCApIHJlYWRlci5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pZmlsZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIHJlYWRMaW5lcyggU3RyaW5nIGZpbGUgKQotICB7Ci0gICAgcmV0dXJuIHJlYWRMaW5lcyggbmV3IEZpbGUoIGZpbGUgKSApOwotICB9Ci0gICAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXRGaWxlcyggRmlsZSBmaWxlLCBWZWN0b3IgZmlsZXMsIFN0cmluZyBmaWxlU3VmZml4LCBTdHJpbmdbXSBleGNsdWRlRmlsZXMgKQotICB7Ci0gICAgaWYoIHN0cmluZ0luQXJyYXkoIGZpbGUuZ2V0TmFtZSgpLCBleGNsdWRlRmlsZXMgKSApCi0gICAgewotICAgICAgLy8gZG8gbm90aGluZwotICAgIH0KLSAgICBlbHNlIGlmKCBmaWxlLmlzRGlyZWN0b3J5KCkgKQotICAgIHsKLSAgICAgIEZpbGVbXSBkaXJmaWxlcyA9IGZpbGUubGlzdEZpbGVzKCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBkaXJmaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBnZXRGaWxlcyggZGlyZmlsZXNbaW5kZXhdLCBmaWxlcywgZmlsZVN1ZmZpeCwgZXhjbHVkZUZpbGVzICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoIGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCBmaWxlU3VmZml4ICkgKQotICAgIHsKLSAgICAgIGZpbGVzLmFkZCggZmlsZSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHN0cmluZ0luQXJyYXkoIFN0cmluZyBuYW1lLCBTdHJpbmdbXSBuYW1lcyApCi0gIHsKLSAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG5hbWVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgaWYoIG5hbWUuZXF1YWxzKCBuYW1lc1tpbmRleF0gKSkKLSAgICAgIHsKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldFByb3BlcnR5S2V5cyggRmlsZSBmaWxlICkKLSAgewotICAgIFZlY3RvciAgICAgIGtleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSW5wdXRTdHJlYW0gc3RyZWFtID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmaWxlICk7Ci0gICAgICAKLSAgICAgIFByb3BlcnR5UmVzb3VyY2VCdW5kbGUgYnVuZGxlICA9IG5ldyBQcm9wZXJ0eVJlc291cmNlQnVuZGxlKCBzdHJlYW0gKTsKLSAgICAgIEVudW1lcmF0aW9uICAgICAgICAgICAga2V5RW51bSA9IGJ1bmRsZS5nZXRLZXlzKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCBrZXlFbnVtLmhhc01vcmVFbGVtZW50cygpICkKLSAgICAgIHsKLSAgICAgICAga2V5cy5hZGQoIGtleUVudW0ubmV4dEVsZW1lbnQoKSApOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKCBzdHJlYW0gIT0gbnVsbCApIHN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBrZXlzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE2OGQwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGVyZm9ybWFuY2UiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dCIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BsdWdpbi9XU1BsdWdpbiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3ZhbGlkYXRpb24vaW50ZXJuYWwvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE0NTZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXBlcmZvcm1hbmNlLmphcgotamF2YUNvbXBpbGVyLnBlcmZvcm1hbmNlLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzZlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+CQotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0gICAgIAk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMmM1MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIFNlcCAyNiAwNjozMToxMiBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NWZhZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jU3VuIEp1biAwMyAwMDo0MTo0NCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmYzhkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDEKLUJ1bmRsZS1DbGFzc1BhdGg6IHBlcmZvcm1hbmNlLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW4KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Ci1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSIzLjguMCIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2UudGVzdCwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWksCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2UudGVzdCwKLSBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4OTQ0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5wZXJmb3JtYW5jZS5qYXIgPSBwZXJmb3JtYW5jZS8KLW91dHB1dC5wZXJmb3JtYW5jZS5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwZXJmb3JtYW5jZS5qYXIsXAotICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UueG1sLFwKLSAgICAgICAgICAgICAgIGRhdGEvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNjIyNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgbG9jYXRpb249InNhbXBsZTg5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYzc4YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0ic2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249Ii5cc2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2N2UxNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249InNhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgbG9jYXRpb249Ii4vc2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5M2ZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0ic2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuL3NhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlM2UwZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249InNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii4vc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNWU0NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249InNhbXBsZTE5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgbG9jYXRpb249Ii4vc2FtcGxlMzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDY3YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249InNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii4vc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZWNiNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249InNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgbG9jYXRpb249Ii5cc2FtcGxlMTk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFiNjM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSJzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgbG9jYXRpb249Ii5cc2FtcGxlODE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTg5MTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSJzYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuL3NhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgbG9jYXRpb249Ii5cc2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWFkN2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSJzYW1wbGUxODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgbG9jYXRpb249Ii5cc2FtcGxlOTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmQ2MDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIGxvY2F0aW9uPSJzYW1wbGU0MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIGxvY2F0aW9uPSIuL3NhbXBsZTg1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgbG9jYXRpb249Ii5cc2FtcGxlMjA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWJjYTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIGxvY2F0aW9uPSJzYW1wbGU2NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTE1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii5cc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmYWQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0ic2FtcGxlNTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWZlMjY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIGxvY2F0aW9uPSJzYW1wbGU1Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249Ii5cc2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWZhOWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIGxvY2F0aW9uPSJzYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTMxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0YWEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiBsb2NhdGlvbj0ic2FtcGxlNzkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTE3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyOTA2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0ic2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTcwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ExNzA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0ic2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY1ZWJhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiBsb2NhdGlvbj0ic2FtcGxlMTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OTYxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgbG9jYXRpb249InNhbXBsZTYyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgbG9jYXRpb249Ii4vc2FtcGxlMjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIwNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgbG9jYXRpb249InNhbXBsZTk1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249Ii4vc2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk1NGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIGxvY2F0aW9uPSJzYW1wbGU4NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgbG9jYXRpb249Ii5cc2FtcGxlOTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzBjODBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSJzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgbG9jYXRpb249Ii5cc2FtcGxlNDcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5Yjc0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiBsb2NhdGlvbj0ic2FtcGxlNTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiBsb2NhdGlvbj0iLi9zYW1wbGUzNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTY1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2I3Y2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIGxvY2F0aW9uPSJzYW1wbGU0NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249Ii5cc2FtcGxlODk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGZhY2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIGxvY2F0aW9uPSJzYW1wbGUxNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIGxvY2F0aW9uPSIuL3NhbXBsZTMwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLlxzYW1wbGU4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1YTI3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0ic2FtcGxlNDU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ZjQ5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiBsb2NhdGlvbj0ic2FtcGxlMzQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzBlZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgbG9jYXRpb249InNhbXBsZTIwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249Ii4vc2FtcGxlMTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDY2YjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgbG9jYXRpb249InNhbXBsZTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIGxvY2F0aW9uPSIuL3NhbXBsZTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0iLlxzYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxN2YxYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgbG9jYXRpb249Ii5cc2FtcGxlNTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVmYWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIGxvY2F0aW9uPSJzYW1wbGUyNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgbG9jYXRpb249Ii5cc2FtcGxlNjA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWUwMjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSJzYW1wbGU5Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTgxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgbG9jYXRpb249Ii5cc2FtcGxlNjU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmM4YmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIGxvY2F0aW9uPSJzYW1wbGUxNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgbG9jYXRpb249Ii5cc2FtcGxlODEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRkZjlkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiBsb2NhdGlvbj0ic2FtcGxlNjM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLi9zYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTg2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWQ3NTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIGxvY2F0aW9uPSJzYW1wbGU5MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSIuL3NhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgbG9jYXRpb249Ii5cc2FtcGxlNjMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzE4Mjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIGxvY2F0aW9uPSJzYW1wbGUyODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSIuL3NhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249Ii5cc2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmY3Mjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIGxvY2F0aW9uPSJzYW1wbGU4NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgbG9jYXRpb249Ii5cc2FtcGxlNDg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmQwODFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIGxvY2F0aW9uPSJzYW1wbGUxNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii4vc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIGxvY2F0aW9uPSIuXHNhbXBsZTUyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjNmYwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0ic2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljMTY2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiBsb2NhdGlvbj0ic2FtcGxlMzc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5NzlhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiBsb2NhdGlvbj0ic2FtcGxlOTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIGxvY2F0aW9uPSIuXHNhbXBsZTkxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ZTRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiBsb2NhdGlvbj0ic2FtcGxlNzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjZiMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgbG9jYXRpb249InNhbXBsZTczNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgbG9jYXRpb249Ii4vc2FtcGxlNDQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MzNkYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiBsb2NhdGlvbj0ic2FtcGxlNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTczOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgbG9jYXRpb249Ii5cc2FtcGxlMTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiNGE0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiBsb2NhdGlvbj0ic2FtcGxlNDkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTllMjY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSJzYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgbG9jYXRpb249Ii5cc2FtcGxlNDA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjJmOTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249InNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiBsb2NhdGlvbj0iLi9zYW1wbGU2MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmNzFlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiBsb2NhdGlvbj0ic2FtcGxlOTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTM0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyMjNlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiBsb2NhdGlvbj0ic2FtcGxlNjA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjVlZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgbG9jYXRpb249InNhbXBsZTY0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgbG9jYXRpb249Ii4vc2FtcGxlNDA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YzBiYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgbG9jYXRpb249InNhbXBsZTk4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgbG9jYXRpb249Ii4vc2FtcGxlOTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiBsb2NhdGlvbj0iLlxzYW1wbGU1ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDg3MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgbG9jYXRpb249InNhbXBsZTk0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249Ii4vc2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYTQwODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgbG9jYXRpb249InNhbXBsZTQ5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgbG9jYXRpb249Ii4vc2FtcGxlNTgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDVjNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249InNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzM2M4ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249InNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgbG9jYXRpb249Ii4vc2FtcGxlNjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVmNzg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIGxvY2F0aW9uPSJzYW1wbGU2NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTc4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii5cc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMDAyNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgbG9jYXRpb249InNhbXBsZTk5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZmY1OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0ic2FtcGxlMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249Ii4vc2FtcGxlNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIGxvY2F0aW9uPSIuXHNhbXBsZTc2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiYzU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiBsb2NhdGlvbj0ic2FtcGxlODQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiMWZmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiBsb2NhdGlvbj0ic2FtcGxlNTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTIyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MjkwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiBsb2NhdGlvbj0ic2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlM2VkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiBsb2NhdGlvbj0ic2FtcGxlNjU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIGxvY2F0aW9uPSIuXHNhbXBsZTI4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0ZWVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiBsb2NhdGlvbj0ic2FtcGxlMjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxY2MzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSJzYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgbG9jYXRpb249Ii4vc2FtcGxlNjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNGQzMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249InNhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgbG9jYXRpb249Ii4vc2FtcGxlMTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDgxZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgbG9jYXRpb249InNhbXBsZTM3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249Ii4vc2FtcGxlNDEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjUxNWViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgbG9jYXRpb249InNhbXBsZTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI3NDQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0ic2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0iLi9zYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTczNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ3YjliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiBsb2NhdGlvbj0ic2FtcGxlMTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE5NWNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiBsb2NhdGlvbj0ic2FtcGxlMzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuXHNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjMDRjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiBsb2NhdGlvbj0ic2FtcGxlOTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSIuL3NhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNGQ2NjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249InNhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgbG9jYXRpb249Ii4vc2FtcGxlNDE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MWIyYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgbG9jYXRpb249InNhbXBsZTkyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249Ii4vc2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYjA0ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgbG9jYXRpb249InNhbXBsZTg5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgbG9jYXRpb249Ii4vc2FtcGxlMjUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIGxvY2F0aW9uPSIuXHNhbXBsZTc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWJiZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIGxvY2F0aW9uPSJzYW1wbGUxNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgbG9jYXRpb249Ii5cc2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTRjZTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIGxvY2F0aW9uPSJzYW1wbGU2OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgbG9jYXRpb249Ii5cc2FtcGxlNDAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDY3MGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIGxvY2F0aW9uPSJzYW1wbGUzMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIGxvY2F0aW9uPSIuL3NhbXBsZTUwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii5cc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc3YmY5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiBsb2NhdGlvbj0ic2FtcGxlODUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiBsb2NhdGlvbj0iLi9zYW1wbGUzNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIGxvY2F0aW9uPSIuXHNhbXBsZTkyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM0YWEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIGxvY2F0aW9uPSJzYW1wbGU2NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTg3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFiYTgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249InNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTYwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzYWY4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiBsb2NhdGlvbj0ic2FtcGxlNDcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTc3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg4NWFiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0ic2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSIuL3NhbXBsZTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiBsb2NhdGlvbj0iLlxzYW1wbGUzOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjMxMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgbG9jYXRpb249InNhbXBsZTUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU1NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZDVhOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249Ii4vc2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYWJiZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgbG9jYXRpb249InNhbXBsZTYzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii4vc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YjljZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgbG9jYXRpb249InNhbXBsZTI0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgbG9jYXRpb249Ii4vc2FtcGxlNDgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTkxZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0ic2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTY1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgbG9jYXRpb249Ii5cc2FtcGxlNzYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzkyZmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIGxvY2F0aW9uPSJzYW1wbGU4NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhZmM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiBsb2NhdGlvbj0ic2FtcGxlOTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0iLi9zYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTYxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzcxMDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIGxvY2F0aW9uPSJzYW1wbGU0ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgbG9jYXRpb249Ii5cc2FtcGxlODI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzhiMzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIGxvY2F0aW9uPSJzYW1wbGU1Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249Ii5cc2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2NjYjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIGxvY2F0aW9uPSJzYW1wbGU4OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTk2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii5cc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2I1ZDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIGxvY2F0aW9uPSJzYW1wbGU5NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgbG9jYXRpb249Ii5cc2FtcGxlNDgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YThmMmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249InNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiBsb2NhdGlvbj0iLi9zYW1wbGUzODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOTE0YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249InNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgbG9jYXRpb249Ii4vc2FtcGxlODI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA1YWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSJzYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgbG9jYXRpb249Ii5cc2FtcGxlNjA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGRiMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249InNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIGxvY2F0aW9uPSIuXHNhbXBsZTk2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUxMDNmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiBsb2NhdGlvbj0ic2FtcGxlNzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiBsb2NhdGlvbj0iLi9zYW1wbGUyODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTMyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZmMjJmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0ic2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjNhNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIGxvY2F0aW9uPSJzYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTI2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLlxzYW1wbGU4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTljYzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIGxvY2F0aW9uPSJzYW1wbGU1ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgbG9jYXRpb249Ii5cc2FtcGxlODM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjAzZjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSJzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgbG9jYXRpb249Ii5cc2FtcGxlMzkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjRkNjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIGxvY2F0aW9uPSJzYW1wbGU1ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTUwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgbG9jYXRpb249Ii5cc2FtcGxlOTUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdlZDcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIGxvY2F0aW9uPSJzYW1wbGU5NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTExNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249Ii5cc2FtcGxlMjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGQ2ZTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIGxvY2F0aW9uPSJzYW1wbGU0MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgbG9jYXRpb249Ii5cc2FtcGxlMjk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTQwYTBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgbG9jYXRpb249InNhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA2ZmQ4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiBsb2NhdGlvbj0ic2FtcGxlNzM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU5NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgbG9jYXRpb249Ii5cc2FtcGxlNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZjRmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249InNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgbG9jYXRpb249Ii4vc2FtcGxlMzgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NDQ1ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249InNhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgbG9jYXRpb249Ii4vc2FtcGxlNzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzE4NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgbG9jYXRpb249InNhbXBsZTc2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgbG9jYXRpb249Ii4vc2FtcGxlNTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Nzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1N2EwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0ic2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuXHNhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDA3MjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIGxvY2F0aW9uPSJzYW1wbGU3NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMmExNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgbG9jYXRpb249InNhbXBsZTQ1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249Ii4vc2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMWU3YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgbG9jYXRpb249InNhbXBsZTUyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgbG9jYXRpb249Ii4vc2FtcGxlNTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MjhmMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgbG9jYXRpb249InNhbXBsZTEzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMTIzZTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIGxvY2F0aW9uPSJzYW1wbGU5ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIGxvY2F0aW9uPSIuL3NhbXBsZTEzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgbG9jYXRpb249Ii5cc2FtcGxlMzQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjYwY2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIGxvY2F0aW9uPSJzYW1wbGUyMDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTM2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgbG9jYXRpb249Ii5cc2FtcGxlNzM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDMzMmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIGxvY2F0aW9uPSJzYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTY4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgbG9jYXRpb249Ii5cc2FtcGxlNjA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjY3MTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIGxvY2F0aW9uPSJzYW1wbGU5MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgbG9jYXRpb249Ii5cc2FtcGxlMTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDQwZTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIGxvY2F0aW9uPSJzYW1wbGU2NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgbG9jYXRpb249Ii5cc2FtcGxlMzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWE0ZWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIGxvY2F0aW9uPSJzYW1wbGU5OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIGxvY2F0aW9uPSIuL3NhbXBsZTc0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii5cc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWYyNWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIGxvY2F0aW9uPSJzYW1wbGUzMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIGxvY2F0aW9uPSIuL3NhbXBsZTE4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249Ii5cc2FtcGxlNDEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyNTUyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiBsb2NhdGlvbj0ic2FtcGxlOTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0iLi9zYW1wbGUxNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIGxvY2F0aW9uPSIuXHNhbXBsZTMyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzNlNGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSJzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTkwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii5cc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDczOWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIGxvY2F0aW9uPSJzYW1wbGU3MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii5cc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTU0MTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSJzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgbG9jYXRpb249Ii5cc2FtcGxlNDU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWYyMDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgbG9jYXRpb249InNhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiBsb2NhdGlvbj0iLi9zYW1wbGUyNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ2NDNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiBsb2NhdGlvbj0ic2FtcGxlMjYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIyMjc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiBsb2NhdGlvbj0ic2FtcGxlNDA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii4vc2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZmFhOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249InNhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249Ii4vc2FtcGxlMjAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzJjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgbG9jYXRpb249InNhbXBsZTk3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii4vc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YjJiZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgbG9jYXRpb249InNhbXBsZTMzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgbG9jYXRpb249Ii4vc2FtcGxlMzkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NjgxYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgbG9jYXRpb249InNhbXBsZTg5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgbG9jYXRpb249Ii4vc2FtcGxlMTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZkZjU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIGxvY2F0aW9uPSJzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTg4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgbG9jYXRpb249Ii5cc2FtcGxlOTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTEzY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgbG9jYXRpb249InNhbXBsZTg0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgbG9jYXRpb249Ii4vc2FtcGxlNzEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzODliNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249InNhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249Ii4vc2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjU3NDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgbG9jYXRpb249InNhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii4vc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2Nzk4MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249InNhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii4vc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmMyNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgbG9jYXRpb249InNhbXBsZTk3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgbG9jYXRpb249Ii4vc2FtcGxlMzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTQwNjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIGxvY2F0aW9uPSJzYW1wbGUyMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249Ii5cc2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjliZjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIGxvY2F0aW9uPSJzYW1wbGU3NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiBsb2NhdGlvbj0iLlxzYW1wbGU5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMjRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0ic2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIGxvY2F0aW9uPSIuXHNhbXBsZTUyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkYmMwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0ic2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIGxvY2F0aW9uPSIuXHNhbXBsZTkxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlMmViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiBsb2NhdGlvbj0ic2FtcGxlNDY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmUxNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249InNhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTcxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODI0ZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIGxvY2F0aW9uPSJzYW1wbGU2OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIGxvY2F0aW9uPSIuL3NhbXBsZTYyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5MzI1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiBsb2NhdGlvbj0ic2FtcGxlODM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3MmZkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0ic2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTgxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0NGNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiBsb2NhdGlvbj0ic2FtcGxlNzQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDBmYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0ic2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249Ii5cc2FtcGxlODU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQ2ODUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249InNhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSIuXHNhbXBsZTg5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg3YmU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiBsb2NhdGlvbj0ic2FtcGxlMzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIGxvY2F0aW9uPSIuXHNhbXBsZTg2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk4YzhhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiBsb2NhdGlvbj0ic2FtcGxlMjY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTU2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU1MTE4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiBsb2NhdGlvbj0ic2FtcGxlNjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTg1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5NTkxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiBsb2NhdGlvbj0ic2FtcGxlNjcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSIuXHNhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MWJjMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249InNhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZGM3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiBsb2NhdGlvbj0ic2FtcGxlOTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIGxvY2F0aW9uPSIuXHNhbXBsZTI2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhNDY3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0ic2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOThjZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgbG9jYXRpb249InNhbXBsZTYyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgbG9jYXRpb249Ii4vc2FtcGxlODc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYWJmNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgbG9jYXRpb249InNhbXBsZTUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgbG9jYXRpb249Ii4vc2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTQwOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249InNhbXBsZTM2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgbG9jYXRpb249Ii5cc2FtcGxlMTI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTJhZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSJzYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgbG9jYXRpb249Ii5cc2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzlkZjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgbG9jYXRpb249InNhbXBsZTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwNDExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0ic2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTg5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4ZjFjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0ic2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiBsb2NhdGlvbj0iLi9zYW1wbGUxNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZDBjNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249InNhbXBsZTQzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249Ii4vc2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTdhYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIGxvY2F0aW9uPSJzYW1wbGUzOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249Ii5cc2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMWM4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgbG9jYXRpb249InNhbXBsZTM1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgbG9jYXRpb249Ii4vc2FtcGxlNjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYjk1ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0ic2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTU0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249Ii5cc2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmUxMWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSJzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgbG9jYXRpb249Ii5cc2FtcGxlMzg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmI1NTk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIGxvY2F0aW9uPSJzYW1wbGU1MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249Ii5cc2FtcGxlODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5N2Q0OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgbG9jYXRpb249InNhbXBsZTM3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249Ii4vc2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjIyYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgbG9jYXRpb249InNhbXBsZTUwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgbG9jYXRpb249Ii4vc2FtcGxlNjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTZhNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249InNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNDU1NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgbG9jYXRpb249InNhbXBsZTEwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249Ii4vc2FtcGxlNjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiBsb2NhdGlvbj0iLlxzYW1wbGU5OTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NmUyOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgbG9jYXRpb249InNhbXBsZTMwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249Ii4vc2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiBsb2NhdGlvbj0iLlxzYW1wbGU2MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NTc1OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249InNhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii4vc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTlhZDI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSJzYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgbG9jYXRpb249Ii5cc2FtcGxlNDgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzODNjM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiBsb2NhdGlvbj0ic2FtcGxlMjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii5cc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTg0ZTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIGxvY2F0aW9uPSJzYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgbG9jYXRpb249Ii5cc2FtcGxlMjU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzMxNjU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249InNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiBsb2NhdGlvbj0iLlxzYW1wbGU3NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNzM4NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249InNhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgbG9jYXRpb249Ii4vc2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MjE0YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249InNhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgbG9jYXRpb249Ii4vc2FtcGxlMzQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzNmMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSJzYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU5NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MDQ1OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249InNhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249Ii4vc2FtcGxlNDE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYmQwNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgbG9jYXRpb249InNhbXBsZTU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgbG9jYXRpb249Ii4vc2FtcGxlMzU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjk5MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgbG9jYXRpb249InNhbXBsZTY5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGRlN2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIGxvY2F0aW9uPSJzYW1wbGU1MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgbG9jYXRpb249Ii5cc2FtcGxlMTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM1ZTFhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiBsb2NhdGlvbj0ic2FtcGxlOTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmYxNzg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSJzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5MGE0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiBsb2NhdGlvbj0ic2FtcGxlNzk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiBsb2NhdGlvbj0iLi9zYW1wbGUyOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTY3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlNDBlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0ic2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIGxvY2F0aW9uPSIuXHNhbXBsZTEzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5ZDQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0ic2FtcGxlODk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTQzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNjZTlkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249Ii5cc2FtcGxlMjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNjNlODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgbG9jYXRpb249InNhbXBsZTUwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgbG9jYXRpb249Ii4vc2FtcGxlNzQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODYyYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgbG9jYXRpb249InNhbXBsZTU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249Ii4vc2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZjRiYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgbG9jYXRpb249InNhbXBsZTIxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii4vc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuXHNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUxMjBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIGxvY2F0aW9uPSJzYW1wbGUzODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIGxvY2F0aW9uPSIuL3NhbXBsZTExNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii5cc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWU4YmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIGxvY2F0aW9uPSJzYW1wbGU0MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTc0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgbG9jYXRpb249Ii5cc2FtcGxlODYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3ODU0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0ic2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIGxvY2F0aW9uPSIuXHNhbXBsZTgyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGY0MDVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIGxvY2F0aW9uPSJzYW1wbGUzNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgbG9jYXRpb249Ii5cc2FtcGxlOTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGY1ZmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSJzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgbG9jYXRpb249Ii5cc2FtcGxlOTY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzZmNDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIGxvY2F0aW9uPSJzYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii5cc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDI5ZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSJzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuL3NhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249Ii5cc2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc0NDNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIGxvY2F0aW9uPSJzYW1wbGU0NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTczMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgbG9jYXRpb249Ii5cc2FtcGxlOTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjBjNjJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0ic2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii4vc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNWQ0MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgbG9jYXRpb249InNhbXBsZTIxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgbG9jYXRpb249Ii4vc2FtcGxlOTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MGFmOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0ic2FtcGxlMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTkyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgbG9jYXRpb249Ii5cc2FtcGxlMjM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGM1N2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIGxvY2F0aW9uPSJzYW1wbGUxNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwZWExOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDA5MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249InNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgbG9jYXRpb249Ii4vc2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2YTc0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiBsb2NhdGlvbj0ic2FtcGxlODMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiBsb2NhdGlvbj0iLi9zYW1wbGU4NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgbG9jYXRpb249Ii5cc2FtcGxlMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMjUzYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgbG9jYXRpb249InNhbXBsZTMwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgbG9jYXRpb249Ii4vc2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYjBjYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgbG9jYXRpb249InNhbXBsZTk5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgbG9jYXRpb249Ii4vc2FtcGxlMTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MjBiNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgbG9jYXRpb249InNhbXBsZTEyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0iLi9zYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249Ii5cc2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjk5NzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIGxvY2F0aW9uPSJzYW1wbGU3NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgbG9jYXRpb249Ii5cc2FtcGxlNzMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDM0N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4N2NmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSJzYW1wbGUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgbG9jYXRpb249Ii4vc2FtcGxlNzgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjUxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249InNhbXBsZTM1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgbG9jYXRpb249Ii4vc2FtcGxlODk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNzkzMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYzEyNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgbG9jYXRpb249InNhbXBsZTQwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhMjljNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0ic2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTY2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmJlYjNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSJzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTM5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249Ii5cc2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjBhZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249InNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgbG9jYXRpb249Ii4vc2FtcGxlMzQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjJhYTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSJzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTU4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1NzJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0ic2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmYzg2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiBsb2NhdGlvbj0ic2FtcGxlMTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0iLi9zYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlYjI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiBsb2NhdGlvbj0ic2FtcGxlMTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTczMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmMmQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0ic2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIGxvY2F0aW9uPSIuXHNhbXBsZTg2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzNDhlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0ic2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIGxvY2F0aW9uPSIuXHNhbXBsZTI2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3MThkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiBsb2NhdGlvbj0ic2FtcGxlOTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTYwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViYmNmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiBsb2NhdGlvbj0ic2FtcGxlNjQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU5ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjNmY4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiBsb2NhdGlvbj0ic2FtcGxlMzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiBsb2NhdGlvbj0iLi9zYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIGxvY2F0aW9uPSIuXHNhbXBsZTE1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZTE2NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249InNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgbG9jYXRpb249Ii4vc2FtcGxlODcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwMTYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0ic2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgbG9jYXRpb249Ii5cc2FtcGxlNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOTk5ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249InNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249Ii4vc2FtcGxlMTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMWU4MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249InNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgbG9jYXRpb249Ii4vc2FtcGxlMTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDU3N2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiBsb2NhdGlvbj0ic2FtcGxlNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTI3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgbG9jYXRpb249Ii5cc2FtcGxlNjQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTE1YTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIGxvY2F0aW9uPSJzYW1wbGU4Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTQyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgbG9jYXRpb249Ii5cc2FtcGxlMjA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzc2NmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgbG9jYXRpb249InNhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThmZTEzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiBsb2NhdGlvbj0ic2FtcGxlMTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIGxvY2F0aW9uPSIuXHNhbXBsZTQxOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlkNzYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiBsb2NhdGlvbj0ic2FtcGxlNDYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIGxvY2F0aW9uPSIuXHNhbXBsZTc2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2MDM3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiBsb2NhdGlvbj0ic2FtcGxlMTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyOGRmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0ic2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIGxvY2F0aW9uPSIuXHNhbXBsZTk5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYThmYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0ic2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTk0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZDVkNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249InNhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249Ii4vc2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjhlZTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIGxvY2F0aW9uPSJzYW1wbGU1NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTIwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgbG9jYXRpb249Ii5cc2FtcGxlODgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODQzNjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgbG9jYXRpb249InNhbXBsZTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYTNjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgbG9jYXRpb249InNhbXBsZTQ2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249Ii4vc2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZTZiMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgbG9jYXRpb249InNhbXBsZTM3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgbG9jYXRpb249Ii4vc2FtcGxlNDYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YmM5NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgbG9jYXRpb249InNhbXBsZTMzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgbG9jYXRpb249Ii5cc2FtcGxlMTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTFkNzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIGxvY2F0aW9uPSJzYW1wbGU3Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTU5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii5cc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmE0YzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSJzYW1wbGU1ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgbG9jYXRpb249Ii5cc2FtcGxlMjgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjA2YmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIGxvY2F0aW9uPSJzYW1wbGU5MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTYyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249Ii5cc2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVkOTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSJzYW1wbGU4OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTM1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgbG9jYXRpb249Ii5cc2FtcGxlODA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwYmQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiBsb2NhdGlvbj0ic2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii5cc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThlZjVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiBsb2NhdGlvbj0ic2FtcGxlNjUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY3ZjFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0ic2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0N2RiM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgbG9jYXRpb249InNhbXBsZTg1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgbG9jYXRpb249Ii4vc2FtcGxlNTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1M2RmNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgbG9jYXRpb249InNhbXBsZTcyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249Ii4vc2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDcwMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgbG9jYXRpb249InNhbXBsZTU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249Ii5cc2FtcGxlMjgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDlmOGRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIGxvY2F0aW9uPSJzYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTMxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgbG9jYXRpb249Ii5cc2FtcGxlNzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjdjZDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSIuXHNhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyOTcyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiBsb2NhdGlvbj0ic2FtcGxlMzE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTMzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2ZWJjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0ic2FtcGxlMTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YmJkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiBsb2NhdGlvbj0ic2FtcGxlMTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii4vc2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgbG9jYXRpb249Ii5cc2FtcGxlNDcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVlY2I4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0ic2FtcGxlNDMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTMzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTQ2M2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSJzYW1wbGU2NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTU0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgbG9jYXRpb249Ii5cc2FtcGxlMzk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjE0NGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSJzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIGxvY2F0aW9uPSIuL3NhbXBsZTU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgbG9jYXRpb249Ii5cc2FtcGxlNDY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzEzZmE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIGxvY2F0aW9uPSJzYW1wbGU3ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIGxvY2F0aW9uPSIuL3NhbXBsZTE4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgbG9jYXRpb249Ii5cc2FtcGxlNjQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY0M2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIGxvY2F0aW9uPSJzYW1wbGUyNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVlYWUxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0ic2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0NWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0ic2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiBsb2NhdGlvbj0iLi9zYW1wbGUzOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzMTNlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiBsb2NhdGlvbj0ic2FtcGxlMjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0Y2QzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSJzYW1wbGU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgbG9jYXRpb249Ii4vc2FtcGxlMTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiBsb2NhdGlvbj0iLlxzYW1wbGU0MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmE5YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgbG9jYXRpb249InNhbXBsZTI3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NGY5ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0ic2FtcGxlNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuL3NhbXBsZTk5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgbG9jYXRpb249Ii5cc2FtcGxlMzgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4NzA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0ic2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiBsb2NhdGlvbj0iLi9zYW1wbGU1Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIGxvY2F0aW9uPSIuXHNhbXBsZTk1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTZlOTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSJzYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249Ii5cc2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmY0YmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSJzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTE5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgbG9jYXRpb249Ii5cc2FtcGxlMTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdmMjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIGxvY2F0aW9uPSJzYW1wbGUzMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgbG9jYXRpb249Ii5cc2FtcGxlNjMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQ3ZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIGxvY2F0aW9uPSJzYW1wbGUxMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTcyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwZWVmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiBsb2NhdGlvbj0ic2FtcGxlMjQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiBsb2NhdGlvbj0iLi9zYW1wbGU2MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjYjQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSJzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii4vc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZGUxZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgbG9jYXRpb249InNhbXBsZTI2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgbG9jYXRpb249Ii4vc2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiBsb2NhdGlvbj0iLlxzYW1wbGU4NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGJhYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgbG9jYXRpb249InNhbXBsZTg3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYjFjZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249InNhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZGM5MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249InNhbXBsZTgwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgbG9jYXRpb249Ii4vc2FtcGxlODg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzEyY2NhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIGxvY2F0aW9uPSJzYW1wbGU3Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTYzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgbG9jYXRpb249Ii5cc2FtcGxlMzczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYmEwZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgbG9jYXRpb249InNhbXBsZTMzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgbG9jYXRpb249Ii4vc2FtcGxlMTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiBsb2NhdGlvbj0iLlxzYW1wbGUxODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MGIwMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgbG9jYXRpb249InNhbXBsZTg3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249Ii4vc2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjQ3ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249InNhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjMjQwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiBsb2NhdGlvbj0ic2FtcGxlNDQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2YWJlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSJzYW1wbGU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgbG9jYXRpb249Ii4vc2FtcGxlNTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSIuXHNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDA2NjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0ic2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249Ii4vc2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OWU3OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgbG9jYXRpb249InNhbXBsZTQxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249Ii4vc2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMjJmM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgbG9jYXRpb249InNhbXBsZTI1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNTg5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgbG9jYXRpb249InNhbXBsZTY0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii4vc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NTRjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249InNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii4vc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2FlYzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgbG9jYXRpb249Ii4vc2FtcGxlMjM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiBsb2NhdGlvbj0iLlxzYW1wbGUxODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjMDNjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0ic2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249Ii5cc2FtcGxlNTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjFhYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgbG9jYXRpb249Ii5cc2FtcGxlMzg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmE1MzY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIGxvY2F0aW9uPSJzYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLlxzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyNmU4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLi9zYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSIuXHNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhNTNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiBsb2NhdGlvbj0ic2FtcGxlNjAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTE2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRkY2Q5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0ic2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmNzYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiBsb2NhdGlvbj0ic2FtcGxlOTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiBsb2NhdGlvbj0iLi9zYW1wbGUyMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhMDMwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0ic2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLi9zYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzOWYzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiBsb2NhdGlvbj0ic2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQzYmUzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSJzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgbG9jYXRpb249Ii4vc2FtcGxlNDYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTgwZjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIGxvY2F0aW9uPSJzYW1wbGU5NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgbG9jYXRpb249Ii5cc2FtcGxlNTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NjkwMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0ic2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTc5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWM3ZDRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIGxvY2F0aW9uPSJzYW1wbGUxNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii5cc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTM2N2JiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSJzYW1wbGUyNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgbG9jYXRpb249Ii5cc2FtcGxlNjc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzdmNTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIGxvY2F0aW9uPSJzYW1wbGU1NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTJmZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIGxvY2F0aW9uPSJzYW1wbGU0NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIGxvY2F0aW9uPSIuL3NhbXBsZTMyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3ZDBiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiBsb2NhdGlvbj0ic2FtcGxlMjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiOWNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiBsb2NhdGlvbj0ic2FtcGxlMTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyNDQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiBsb2NhdGlvbj0ic2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTI2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4YWM0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiBsb2NhdGlvbj0ic2FtcGxlNjUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRiNzA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiBsb2NhdGlvbj0ic2FtcGxlMzc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTkwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYTJlODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgbG9jYXRpb249InNhbXBsZTgxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgbG9jYXRpb249Ii4vc2FtcGxlMTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzNjI1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiBsb2NhdGlvbj0ic2FtcGxlMzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTM2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4YzE5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0ic2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSIuXHNhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3MmMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiBsb2NhdGlvbj0ic2FtcGxlMjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODA0OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249InNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii4vc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViNmQzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSJzYW1wbGU1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgbG9jYXRpb249Ii4vc2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJlYWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIGxvY2F0aW9uPSJzYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgbG9jYXRpb249Ii5cc2FtcGxlODYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDdhNzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIGxvY2F0aW9uPSJzYW1wbGU4ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgbG9jYXRpb249Ii5cc2FtcGxlMzA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzZmZDhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249InNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgbG9jYXRpb249Ii4vc2FtcGxlMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgbG9jYXRpb249Ii5cc2FtcGxlODA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcwMWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSJzYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIGxvY2F0aW9uPSIuL3NhbXBsZTczMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgbG9jYXRpb249Ii5cc2FtcGxlMzgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZhZWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249InNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiBsb2NhdGlvbj0iLi9zYW1wbGU0OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODAwNzM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249InNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJjMzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIGxvY2F0aW9uPSJzYW1wbGU5MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSIuL3NhbXBsZTc2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgbG9jYXRpb249Ii5cc2FtcGxlMzU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODU2ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgbG9jYXRpb249InNhbXBsZTcwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249Ii4vc2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiBsb2NhdGlvbj0iLlxzYW1wbGU5ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZDRhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0ic2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIGxvY2F0aW9uPSIuL3NhbXBsZTExNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgbG9jYXRpb249Ii5cc2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2M5ODNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSJzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgbG9jYXRpb249Ii5cc2FtcGxlNzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWM2NTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIGxvY2F0aW9uPSJzYW1wbGU5MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTMxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgbG9jYXRpb249Ii5cc2FtcGxlNjU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAwZDBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249InNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTEyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTk5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0ic2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5YmJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTMzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4OWYxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiBsb2NhdGlvbj0ic2FtcGxlMTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJiZDYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiBsb2NhdGlvbj0ic2FtcGxlMzM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIGxvY2F0aW9uPSIuXHNhbXBsZTUyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiM2UxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0ic2FtcGxlNTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiBsb2NhdGlvbj0iLi9zYW1wbGU5MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIGxvY2F0aW9uPSIuXHNhbXBsZTE0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODhkNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249InNhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249Ii4vc2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMxNzA3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSJzYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgbG9jYXRpb249Ii4vc2FtcGxlNzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5Njg3ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MWVkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgbG9jYXRpb249InNhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgbG9jYXRpb249Ii5cc2FtcGxlNjA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzY3YjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIGxvY2F0aW9uPSJzYW1wbGU5NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZiOGQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiBsb2NhdGlvbj0ic2FtcGxlNDQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkxZjBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiBsb2NhdGlvbj0ic2FtcGxlNzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMjIzMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249InNhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgbG9jYXRpb249Ii4vc2FtcGxlMTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMzZhYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgbG9jYXRpb249InNhbXBsZTE3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgbG9jYXRpb249Ii4vc2FtcGxlMzE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjcyM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgbG9jYXRpb249InNhbXBsZTQwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgbG9jYXRpb249Ii4vc2FtcGxlMzc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZDI5ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgbG9jYXRpb249InNhbXBsZTQ1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLi9zYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgbG9jYXRpb249Ii5cc2FtcGxlNDU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ2NzhhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgbG9jYXRpb249Ii4vc2FtcGxlNjA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1Mzk5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSJzYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgbG9jYXRpb249Ii4vc2FtcGxlOTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNTAzOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE2MGYxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0ic2FtcGxlODk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk3NzEzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiBsb2NhdGlvbj0ic2FtcGxlNTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTY5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhOTFhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0ic2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3NzAwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiBsb2NhdGlvbj0ic2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwOWM2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgbG9jYXRpb249Ii4vc2FtcGxlNzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGY2NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249InNhbXBsZTk0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgbG9jYXRpb249Ii4vc2FtcGxlMzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDQ2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249Ii5cc2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGRkOWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTg5OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgbG9jYXRpb249InNhbXBsZTE3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgbG9jYXRpb249Ii4vc2FtcGxlOTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2ZTI5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0ic2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiBsb2NhdGlvbj0iLi9zYW1wbGU4NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzk2ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSJzYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTMwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249Ii5cc2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2EzZDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSJzYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTY2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgbG9jYXRpb249Ii5cc2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmNjN2VlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIGxvY2F0aW9uPSJzYW1wbGU4MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTE5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgbG9jYXRpb249Ii5cc2FtcGxlNjE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmFiOWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIGxvY2F0aW9uPSJzYW1wbGU3MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIGxvY2F0aW9uPSIuL3NhbXBsZTE2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii5cc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFiZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIGxvY2F0aW9uPSJzYW1wbGUzODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIGxvY2F0aW9uPSIuL3NhbXBsZTg2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgbG9jYXRpb249Ii5cc2FtcGxlOTIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDRiNWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIGxvY2F0aW9uPSJzYW1wbGU1NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgbG9jYXRpb249Ii5cc2FtcGxlNTMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTQzOGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIGxvY2F0aW9uPSJzYW1wbGUyMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIGxvY2F0aW9uPSIuL3NhbXBsZTYwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgbG9jYXRpb249Ii5cc2FtcGxlMTYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWY4OGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIGxvY2F0aW9uPSJzYW1wbGU0MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTMxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLlxzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5ZGI4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiBsb2NhdGlvbj0ic2FtcGxlNDI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTk1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYzIyMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgbG9jYXRpb249InNhbXBsZTM1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgbG9jYXRpb249Ii4vc2FtcGxlMTA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3YTQ2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiBsb2NhdGlvbj0ic2FtcGxlMTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3OWUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiBsb2NhdGlvbj0ic2FtcGxlODY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTI2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM3YmVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTkzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY3MTJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0ic2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgbG9jYXRpb249Ii5cc2FtcGxlMzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NDIxYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249InNhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii4vc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiBsb2NhdGlvbj0iLlxzYW1wbGUyNTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NDZmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgbG9jYXRpb249InNhbXBsZTg3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgbG9jYXRpb249Ii4vc2FtcGxlNzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiBsb2NhdGlvbj0iLlxzYW1wbGU5MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMmQ4MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgbG9jYXRpb249InNhbXBsZTE3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249Ii4vc2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OTUyODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgbG9jYXRpb249InNhbXBsZTI2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYWI2ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249InNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgbG9jYXRpb249Ii4vc2FtcGxlODkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NmZjYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgbG9jYXRpb249InNhbXBsZTg0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgbG9jYXRpb249Ii4vc2FtcGxlMTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDM4YjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSJzYW1wbGU3MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIGxvY2F0aW9uPSIuL3NhbXBsZTkyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249Ii5cc2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Njk2MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249InNhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249Ii4vc2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZjUxMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgbG9jYXRpb249InNhbXBsZTExNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249Ii4vc2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3Y2QxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgbG9jYXRpb249InNhbXBsZTU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgbG9jYXRpb249Ii4vc2FtcGxlNzk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NDdmNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249InNhbXBsZTc4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249Ii4vc2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZDcxOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0ic2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgbG9jYXRpb249Ii5cc2FtcGxlNjI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWZjYmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIGxvY2F0aW9uPSJzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg5NDUxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0ic2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuL3NhbXBsZTgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMTI2YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249InNhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249Ii4vc2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLlxzYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYTk3YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgbG9jYXRpb249InNhbXBsZTc1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgbG9jYXRpb249Ii4vc2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YjZjZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgbG9jYXRpb249InNhbXBsZTY2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii5cc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMDY5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiBsb2NhdGlvbj0ic2FtcGxlMjU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzE3ODFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSJzYW1wbGUzNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249Ii4vc2FtcGxlNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjNDM2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0ic2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTU3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY3ZTg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiBsb2NhdGlvbj0ic2FtcGxlODY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI1ZjA1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiBsb2NhdGlvbj0ic2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3YTc1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiBsb2NhdGlvbj0ic2FtcGxlMjk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYzZTg0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiBsb2NhdGlvbj0ic2FtcGxlNTA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZlZTU0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiBsb2NhdGlvbj0ic2FtcGxlMTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzYWYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiBsb2NhdGlvbj0ic2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIGxvY2F0aW9uPSIuXHNhbXBsZTExOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjZWE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0ic2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViNTg1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiBsb2NhdGlvbj0ic2FtcGxlMzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii4vc2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgbG9jYXRpb249Ii5cc2FtcGxlMTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlMTA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiBsb2NhdGlvbj0ic2FtcGxlNDAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmE3ODg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIGxvY2F0aW9uPSJzYW1wbGU1NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSIuL3NhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249Ii5cc2FtcGxlMzI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU4MWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIGxvY2F0aW9uPSJzYW1wbGU2MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgbG9jYXRpb249Ii5cc2FtcGxlMTA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2NhM2E5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIGxvY2F0aW9uPSJzYW1wbGU1NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuL3NhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgbG9jYXRpb249Ii5cc2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzBhMDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIGxvY2F0aW9uPSJzYW1wbGU1NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii5cc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDA5ZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSJzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249Ii5cc2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTNlMjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249InNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UwMzY2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTUwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1YjA3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiBsb2NhdGlvbj0ic2FtcGxlMTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgbG9jYXRpb249Ii5cc2FtcGxlMTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDFhN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgbG9jYXRpb249InNhbXBsZTc4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii4vc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NWIyYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgbG9jYXRpb249InNhbXBsZTkyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249Ii4vc2FtcGxlMjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWE2NDM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249InNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzcyZGZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249InNhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MzVhZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgbG9jYXRpb249InNhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgbG9jYXRpb249Ii4vc2FtcGxlNzk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiBsb2NhdGlvbj0iLlxzYW1wbGU5NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NWI3MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgbG9jYXRpb249Ii4vc2FtcGxlNzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NzZjODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgbG9jYXRpb249InNhbXBsZTEwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii4vc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2Mjc4ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgbG9jYXRpb249InNhbXBsZTY0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMDIwODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiBsb2NhdGlvbj0ic2FtcGxlODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgbG9jYXRpb249Ii5cc2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjhlNTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIGxvY2F0aW9uPSIuXHNhbXBsZTM4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhNmFjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiBsb2NhdGlvbj0ic2FtcGxlNDczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiBsb2NhdGlvbj0iLi9zYW1wbGU4OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODliZDRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0ic2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzNmZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiBsb2NhdGlvbj0ic2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYWZiYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249InNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgbG9jYXRpb249Ii4vc2FtcGxlNzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiBsb2NhdGlvbj0iLlxzYW1wbGU1NjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ3NzI3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiBsb2NhdGlvbj0ic2FtcGxlOTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIGxvY2F0aW9uPSIuXHNhbXBsZTkxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdmZGFkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiBsb2NhdGlvbj0ic2FtcGxlMTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlYzExMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0ic2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0iLi9zYW1wbGUyODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTY2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhYjg5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiBsb2NhdGlvbj0ic2FtcGxlNTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU1ZGVmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0ic2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTk5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNjODM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiBsb2NhdGlvbj0ic2FtcGxlOTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiBsb2NhdGlvbj0iLi9zYW1wbGU3NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkNGVjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiBsb2NhdGlvbj0ic2FtcGxlNTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhZjk4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0ic2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTU0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjYjFlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0ic2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzM2I0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiBsb2NhdGlvbj0ic2FtcGxlNjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIGxvY2F0aW9uPSIuXHNhbXBsZTkwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGRhOGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIGxvY2F0aW9uPSJzYW1wbGUyMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii5cc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4OTkwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgbG9jYXRpb249InNhbXBsZTQ2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii4vc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4YWYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiBsb2NhdGlvbj0ic2FtcGxlOTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSIuXHNhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1NzI5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiBsb2NhdGlvbj0ic2FtcGxlNzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiBsb2NhdGlvbj0iLi9zYW1wbGU5NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTg1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyNWU0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiBsb2NhdGlvbj0ic2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ODhjYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgbG9jYXRpb249Ii4vc2FtcGxlMzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzI1MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgbG9jYXRpb249InNhbXBsZTM0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgbG9jYXRpb249Ii4vc2FtcGxlNjAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSIuXHNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTJkNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIGxvY2F0aW9uPSJzYW1wbGU2MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTY1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgbG9jYXRpb249Ii5cc2FtcGxlNDQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2RmY2U3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIGxvY2F0aW9uPSJzYW1wbGUyNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSIuL3NhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii5cc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmYxNmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSJzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgbG9jYXRpb249Ii5cc2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTg3MjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIGxvY2F0aW9uPSJzYW1wbGU3NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2ZTAxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiBsb2NhdGlvbj0ic2FtcGxlNTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIGxvY2F0aW9uPSIuXHNhbXBsZTQ5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODZkZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249InNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249Ii4vc2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiBsb2NhdGlvbj0iLlxzYW1wbGUyNTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0NDQ4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiBsb2NhdGlvbj0ic2FtcGxlODk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU3OTcyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiBsb2NhdGlvbj0ic2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNDI4NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249InNhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii4vc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiBsb2NhdGlvbj0iLlxzYW1wbGU1NTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNGU0MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgbG9jYXRpb249InNhbXBsZTUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249Ii4vc2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmQ0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgbG9jYXRpb249InNhbXBsZTc4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgbG9jYXRpb249Ii4vc2FtcGxlMjkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYTZjMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249InNhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgbG9jYXRpb249Ii4vc2FtcGxlNDQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWJlMmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSJzYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249Ii5cc2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWNiNjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSJzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTY4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgbG9jYXRpb249Ii5cc2FtcGxlNTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDQ3NGI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSJzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgbG9jYXRpb249Ii5cc2FtcGxlNTI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTU3YjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSJzYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTE1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii5cc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4ZWM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0ic2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiBsb2NhdGlvbj0iLi9zYW1wbGU0OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTY3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGUzN2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIGxvY2F0aW9uPSJzYW1wbGU5NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTkxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgbG9jYXRpb249Ii5cc2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWExM2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIGxvY2F0aW9uPSJzYW1wbGUzNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgbG9jYXRpb249Ii5cc2FtcGxlNDg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzQ4MmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSJzYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzk2MzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSJzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSIuL3NhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgbG9jYXRpb249Ii5cc2FtcGxlNjk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQxYTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249InNhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGI0NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgbG9jYXRpb249InNhbXBsZTM5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgbG9jYXRpb249Ii4vc2FtcGxlNzA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNjU1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249InNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgbG9jYXRpb249Ii4vc2FtcGxlMTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTZkNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgbG9jYXRpb249InNhbXBsZTI4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMDkyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgbG9jYXRpb249InNhbXBsZTM4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgbG9jYXRpb249Ii4vc2FtcGxlMTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMTdiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgbG9jYXRpb249InNhbXBsZTY0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgbG9jYXRpb249Ii4vc2FtcGxlOTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGYzZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSJzYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii5cc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTIwY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249InNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgbG9jYXRpb249Ii4vc2FtcGxlNzEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYjM4MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249InNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii4vc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmEyYjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSJzYW1wbGUyNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgbG9jYXRpb249Ii5cc2FtcGxlNTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2JhYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIGxvY2F0aW9uPSJzYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIGxvY2F0aW9uPSIuL3NhbXBsZTM4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLlxzYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgxMGE1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0ic2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2Y2ZkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiBsb2NhdGlvbj0ic2FtcGxlMzAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiBsb2NhdGlvbj0iLi9zYW1wbGU5MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIGxvY2F0aW9uPSIuXHNhbXBsZTQxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkZWYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0ic2FtcGxlNDg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIyYzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIGxvY2F0aW9uPSJzYW1wbGU3OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIGxvY2F0aW9uPSIuL3NhbXBsZTg1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgbG9jYXRpb249Ii5cc2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWZhZjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSJzYW1wbGUyMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTM1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii5cc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWExYThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIGxvY2F0aW9uPSJzYW1wbGU3MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NDBhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgbG9jYXRpb249InNhbXBsZTYzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgbG9jYXRpb249Ii4vc2FtcGxlMjQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiBsb2NhdGlvbj0iLlxzYW1wbGU1Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyYjY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiBsb2NhdGlvbj0ic2FtcGxlNzMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjNTllOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiBsb2NhdGlvbj0ic2FtcGxlMjMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGViNDY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiBsb2NhdGlvbj0ic2FtcGxlNDM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLi9zYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ3YzAzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0ic2FtcGxlNDU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTUwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThmOWY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0ic2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3OWVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5OThlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0ic2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGIyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgbG9jYXRpb249InNhbXBsZTQ1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii4vc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZDA0ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0ic2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTY4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgbG9jYXRpb249Ii5cc2FtcGxlODcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjI3OWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIGxvY2F0aW9uPSJzYW1wbGUzMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIGxvY2F0aW9uPSIuL3NhbXBsZTcyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgbG9jYXRpb249Ii5cc2FtcGxlNjEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzYmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiBsb2NhdGlvbj0ic2FtcGxlMTUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTg4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWIyYmRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIGxvY2F0aW9uPSJzYW1wbGU5MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTE2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTlkM2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSJzYW1wbGUyODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii5cc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2FlYWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIGxvY2F0aW9uPSJzYW1wbGU4MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii5cc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDMwZDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTcxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiMWViOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiBsb2NhdGlvbj0ic2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgyNDJjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiBsb2NhdGlvbj0ic2FtcGxlMTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIGxvY2F0aW9uPSIuXHNhbXBsZTE2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVkOTgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiBsb2NhdGlvbj0ic2FtcGxlNDk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0iLi9zYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSIuXHNhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2ZWQ1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0ic2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTEyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwMTBiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiBsb2NhdGlvbj0ic2FtcGxlMzAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiBsb2NhdGlvbj0iLi9zYW1wbGUyNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMGVmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiBsb2NhdGlvbj0ic2FtcGxlMzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU1ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYzg4NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0ic2FtcGxlMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTEzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgbG9jYXRpb249Ii5cc2FtcGxlNTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyODQxOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgbG9jYXRpb249InNhbXBsZTYyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2MDIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0ic2FtcGxlMjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDE0ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249InNhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDgyZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgbG9jYXRpb249InNhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFlZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSJzYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTY5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii5cc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDBkYjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIGxvY2F0aW9uPSJzYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTI3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgbG9jYXRpb249Ii5cc2FtcGxlODMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2IzZDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSJzYW1wbGU3MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii4vc2FtcGxlODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuXHNhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM2Njc5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiBsb2NhdGlvbj0ic2FtcGxlNzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiBsb2NhdGlvbj0iLi9zYW1wbGU5MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSIuXHNhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiYzQ4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0ic2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1YTA2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0ic2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ODJjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgbG9jYXRpb249InNhbXBsZTQ3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgbG9jYXRpb249Ii4vc2FtcGxlMjU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY1NTg5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiBsb2NhdGlvbj0ic2FtcGxlNDE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiBsb2NhdGlvbj0iLi9zYW1wbGUzODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk4OGViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiBsb2NhdGlvbj0ic2FtcGxlOTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRkYTg0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0ic2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTY0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZGYwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiBsb2NhdGlvbj0ic2FtcGxlNzU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiBsb2NhdGlvbj0iLi9zYW1wbGUyNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0YjIyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0ic2FtcGxlMTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTc1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjczOTVhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiBsb2NhdGlvbj0ic2FtcGxlMTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZjQxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249InNhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiBsb2NhdGlvbj0iLlxzYW1wbGU4MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWNlNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249InNhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgbG9jYXRpb249Ii4vc2FtcGxlOTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMTY0Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249InNhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgbG9jYXRpb249Ii4vc2FtcGxlNTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzMzZGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIGxvY2F0aW9uPSJzYW1wbGU5MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii5cc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhYTYyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiBsb2NhdGlvbj0ic2FtcGxlODUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiBsb2NhdGlvbj0iLi9zYW1wbGUyNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTc0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzk3OWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSJzYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgbG9jYXRpb249Ii5cc2FtcGxlMzg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDdmZjYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSJzYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249Ii5cc2FtcGxlMzEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODgyZWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSJzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSIuL3NhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3ZGUwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0ic2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTExMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBmOGI4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiBsb2NhdGlvbj0ic2FtcGxlMjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYWM0ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgbG9jYXRpb249InNhbXBsZTYzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgbG9jYXRpb249Ii4vc2FtcGxlNjcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiBsb2NhdGlvbj0iLlxzYW1wbGUzMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYzg1OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgbG9jYXRpb249InNhbXBsZTUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgbG9jYXRpb249Ii4vc2FtcGxlNDczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYzJhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgbG9jYXRpb249InNhbXBsZTQ0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiBsb2NhdGlvbj0iLlxzYW1wbGUyNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTFlNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249InNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgbG9jYXRpb249Ii4vc2FtcGxlODI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YzA4NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgbG9jYXRpb249InNhbXBsZTcwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249Ii4vc2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDMyNzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIGxvY2F0aW9uPSJzYW1wbGUzMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSIuL3NhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii5cc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMGIxN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiBsb2NhdGlvbj0ic2FtcGxlNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgbG9jYXRpb249Ii5cc2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDY5YmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIGxvY2F0aW9uPSJzYW1wbGUzNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249Ii5cc2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjI4ZGUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249InNhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLi9zYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFjZWU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiBsb2NhdGlvbj0ic2FtcGxlMzEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTEwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlYmFiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiBsb2NhdGlvbj0ic2FtcGxlOTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4NDQ1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiBsb2NhdGlvbj0ic2FtcGxlMjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTEzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlYmVhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0ic2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1YjRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0ic2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTk4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc0MGQ0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiBsb2NhdGlvbj0ic2FtcGxlNDgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkZjc1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiBsb2NhdGlvbj0ic2FtcGxlNzM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuL3NhbXBsZTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0YmZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0ic2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiBsb2NhdGlvbj0iLi9zYW1wbGUyNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDA1YjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIGxvY2F0aW9uPSJzYW1wbGU5MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSIuL3NhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgbG9jYXRpb249Ii5cc2FtcGxlMzE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMzY3NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgbG9jYXRpb249InNhbXBsZTY0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgbG9jYXRpb249Ii4vc2FtcGxlNTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MzY1ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiBsb2NhdGlvbj0ic2FtcGxlOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIGxvY2F0aW9uPSIuL3NhbXBsZTM0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU3NmNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0ic2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5MDVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiBsb2NhdGlvbj0ic2FtcGxlNTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I2MmMyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiBsb2NhdGlvbj0iLi9zYW1wbGU4NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2NjYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiBsb2NhdGlvbj0ic2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1OGQ0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSJzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMGEzNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgbG9jYXRpb249InNhbXBsZTc1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0iLi9zYW1wbGU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyZGJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiBsb2NhdGlvbj0ic2FtcGxlODYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIGxvY2F0aW9uPSIuXHNhbXBsZTkyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU5ZDkxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSJzYW1wbGUxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgbG9jYXRpb249Ii4vc2FtcGxlMzczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5NWRlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiBsb2NhdGlvbj0ic2FtcGxlNTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjBlZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIGxvY2F0aW9uPSIuXHNhbXBsZTg1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlM2FiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiBsb2NhdGlvbj0ic2FtcGxlMTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmJiZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249InNhbXBsZTQ1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgbG9jYXRpb249Ii4vc2FtcGxlMTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5Yzg1ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgbG9jYXRpb249InNhbXBsZTg5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgbG9jYXRpb249Ii5cc2FtcGxlMTg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGMyYmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSJzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTU0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlZWZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249InNhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgbG9jYXRpb249Ii5cc2FtcGxlNTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGMyYjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiBsb2NhdGlvbj0iLi9zYW1wbGUyMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIGxvY2F0aW9uPSIuXHNhbXBsZTM2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA2NTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0ic2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIGxvY2F0aW9uPSIuXHNhbXBsZTY1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1M2Y0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSJzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgbG9jYXRpb249Ii4vc2FtcGxlNTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmJmMGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSJzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii5cc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ExNDFkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiBsb2NhdGlvbj0ic2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0iLi9zYW1wbGU0ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTk5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTZiZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSJzYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgbG9jYXRpb249Ii5cc2FtcGxlMTA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzg0NjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0ic2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIGxvY2F0aW9uPSIuXHNhbXBsZTE4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkZDAwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiBsb2NhdGlvbj0ic2FtcGxlNDc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMwNGVjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0ic2FtcGxlNzgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjMjMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiBsb2NhdGlvbj0ic2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlNzZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiBsb2NhdGlvbj0ic2FtcGxlMjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxODc4ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgbG9jYXRpb249InNhbXBsZTY4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0iLlxzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkMzRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTUyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhYzFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiBsb2NhdGlvbj0ic2FtcGxlOTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0YWE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0ic2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTg0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwN2M1MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249InNhbXBsZTExOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgbG9jYXRpb249Ii4vc2FtcGxlNjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc0NDUyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0ic2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIGxvY2F0aW9uPSIuL3NhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MjdlZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0ic2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249Ii5cc2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzk3MDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSJzYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249Ii5cc2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGI1NWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSJzYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgbG9jYXRpb249Ii5cc2FtcGxlNTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDUwMDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIGxvY2F0aW9uPSJzYW1wbGU0NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmNlYzNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIGxvY2F0aW9uPSJzYW1wbGU3MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzNmZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiBsb2NhdGlvbj0ic2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlMWMxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiBsb2NhdGlvbj0ic2FtcGxlNTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU5NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4MmMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiBsb2NhdGlvbj0ic2FtcGxlMzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ2YzU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiBsb2NhdGlvbj0ic2FtcGxlNjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249Ii5cc2FtcGxlNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDliOGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSJzYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgbG9jYXRpb249Ii5cc2FtcGxlNjU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjYyMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249InNhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOGU1YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgbG9jYXRpb249InNhbXBsZTEzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii4vc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2IwNGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSJzYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzZTFiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0ic2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTc3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM0OTkwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiBsb2NhdGlvbj0ic2FtcGxlNjY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIGxvY2F0aW9uPSIuXHNhbXBsZTE4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxNzE3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiBsb2NhdGlvbj0ic2FtcGxlMTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSIuXHNhbXBsZTU4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlmMmM2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiBsb2NhdGlvbj0ic2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTkwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwNmQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiBsb2NhdGlvbj0ic2FtcGxlMTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjMzRjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiBsb2NhdGlvbj0ic2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiBsb2NhdGlvbj0iLi9zYW1wbGUyNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhMmI2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSJzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgbG9jYXRpb249Ii4vc2FtcGxlNTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmU5MzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIGxvY2F0aW9uPSJzYW1wbGUzNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgbG9jYXRpb249Ii5cc2FtcGxlNDYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZTFhMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgbG9jYXRpb249InNhbXBsZTkyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgbG9jYXRpb249Ii5cc2FtcGxlOTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTQ0NjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIGxvY2F0aW9uPSJzYW1wbGUzMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSIuL3NhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgbG9jYXRpb249Ii5cc2FtcGxlMzM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGEzNTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIGxvY2F0aW9uPSJzYW1wbGU5MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRjZGM5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiBsb2NhdGlvbj0ic2FtcGxlNDUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSIuXHNhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2NTNhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSJzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgbG9jYXRpb249Ii4vc2FtcGxlNjI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmY2ZjNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgbG9jYXRpb249InNhbXBsZTg4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249Ii4vc2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZjE5ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgbG9jYXRpb249InNhbXBsZTE3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii4vc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiBsb2NhdGlvbj0iLlxzYW1wbGUxNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2JhMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249InNhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgbG9jYXRpb249Ii5cc2FtcGxlNzU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmIwNGNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSJzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii5cc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBlZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIGxvY2F0aW9uPSJzYW1wbGU0NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgbG9jYXRpb249Ii5cc2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwY2M1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiBsb2NhdGlvbj0ic2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTQzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2MxYmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIGxvY2F0aW9uPSJzYW1wbGUxNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIGxvY2F0aW9uPSIuL3NhbXBsZTg4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgbG9jYXRpb249Ii5cc2FtcGxlNDM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWIxYzg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIGxvY2F0aW9uPSJzYW1wbGU4MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249Ii5cc2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjEyYTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIGxvY2F0aW9uPSJzYW1wbGUxNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgbG9jYXRpb249Ii5cc2FtcGxlNTExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2JkY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSJzYW1wbGU1ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgbG9jYXRpb249Ii5cc2FtcGxlNDc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzc3OWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIGxvY2F0aW9uPSJzYW1wbGU1MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTkzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjgzNjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIGxvY2F0aW9uPSJzYW1wbGUyNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii4vc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczMDg1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiBsb2NhdGlvbj0ic2FtcGxlNDc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTEwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4OWZhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIGxvY2F0aW9uPSJzYW1wbGU2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249Ii4vc2FtcGxlMjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYWRjNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgbG9jYXRpb249InNhbXBsZTI4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii4vc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiBsb2NhdGlvbj0iLlxzYW1wbGUzODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzFhNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgbG9jYXRpb249InNhbXBsZTI1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgbG9jYXRpb249Ii4vc2FtcGxlNTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii5cc2FtcGxlMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNmNmZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgbG9jYXRpb249InNhbXBsZTM3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgbG9jYXRpb249Ii4vc2FtcGxlNzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU1OTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxMWEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiBsb2NhdGlvbj0ic2FtcGxlNzE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249Ii4vc2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgbG9jYXRpb249Ii5cc2FtcGxlMjMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDM2MDRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSJzYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii5cc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2U2NTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIGxvY2F0aW9uPSJzYW1wbGU5Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDVkMjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249InNhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk1N2Y1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiBsb2NhdGlvbj0ic2FtcGxlNzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiBsb2NhdGlvbj0iLi9zYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTc4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiMTFjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiBsb2NhdGlvbj0ic2FtcGxlNTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTcyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiBsb2NhdGlvbj0ic2FtcGxlNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiBsb2NhdGlvbj0iLlxzYW1wbGU4OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjYzOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgbG9jYXRpb249InNhbXBsZTEzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249Ii4vc2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNjI5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249InNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgbG9jYXRpb249Ii4vc2FtcGxlOTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiBsb2NhdGlvbj0iLlxzYW1wbGU4NzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNWI1ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgbG9jYXRpb249InNhbXBsZTk2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgbG9jYXRpb249Ii4vc2FtcGxlNDAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLlxzYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWRhMDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIGxvY2F0aW9uPSJzYW1wbGUzMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIGxvY2F0aW9uPSIuL3NhbXBsZTQyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249Ii5cc2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjU3NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgbG9jYXRpb249InNhbXBsZTQwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLi9zYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiOWVmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiBsb2NhdGlvbj0ic2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhNWEyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMTdmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiBsb2NhdGlvbj0ic2FtcGxlNTI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIGxvY2F0aW9uPSIuXHNhbXBsZTYyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhM2Q4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiBsb2NhdGlvbj0ic2FtcGxlNDg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIGxvY2F0aW9uPSIuXHNhbXBsZTUyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVhNGU2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0ic2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0NDgwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiBsb2NhdGlvbj0ic2FtcGxlMTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuXHNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzMjY3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0ic2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyZjQzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiBsb2NhdGlvbj0ic2FtcGxlOTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTk3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBjNjc4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiBsb2NhdGlvbj0ic2FtcGxlODE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGNlZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgbG9jYXRpb249InNhbXBsZTMwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgbG9jYXRpb249Ii4vc2FtcGxlNDExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIwOTEzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIGxvY2F0aW9uPSJzYW1wbGU4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYjgwNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249InNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgbG9jYXRpb249Ii4vc2FtcGxlMjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiBsb2NhdGlvbj0iLlxzYW1wbGU0NTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249InNhbXBsZTExNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii5cc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTlmNWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIGxvY2F0aW9uPSJzYW1wbGUzMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0iLlxzYW1wbGU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjA3M2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIGxvY2F0aW9uPSJzYW1wbGU5MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgbG9jYXRpb249Ii5cc2FtcGxlOTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDExZDUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIGxvY2F0aW9uPSJzYW1wbGU2MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIGxvY2F0aW9uPSIuL3NhbXBsZTMxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgbG9jYXRpb249Ii5cc2FtcGxlNTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzU4YmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIGxvY2F0aW9uPSJzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTI1OTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIGxvY2F0aW9uPSJzYW1wbGU1Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTI3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgbG9jYXRpb249Ii5cc2FtcGxlMTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWY1ZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIGxvY2F0aW9uPSJzYW1wbGU0MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249Ii5cc2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzZiMTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSJzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMThkZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249InNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgbG9jYXRpb249Ii4vc2FtcGxlMzIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE2MjdlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiBsb2NhdGlvbj0ic2FtcGxlNTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTY3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjJjYzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIGxvY2F0aW9uPSJzYW1wbGU0Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTI1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgbG9jYXRpb249Ii5cc2FtcGxlMTgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWYyMDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIGxvY2F0aW9uPSJzYW1wbGU1OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIGxvY2F0aW9uPSIuL3NhbXBsZTEyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDU3NTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSJzYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuL3NhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgbG9jYXRpb249Ii5cc2FtcGxlNDAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U0NTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSJzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIGxvY2F0aW9uPSIuL3NhbXBsZTgyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249Ii5cc2FtcGxlOTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzBkYmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249InNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQwN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiBsb2NhdGlvbj0ic2FtcGxlNDQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTkyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYyOWFiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiBsb2NhdGlvbj0ic2FtcGxlMzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTg4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlMTIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiBsb2NhdGlvbj0ic2FtcGxlNjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiBsb2NhdGlvbj0iLi9zYW1wbGU5NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmMjNjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiBsb2NhdGlvbj0ic2FtcGxlNjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTc2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMzNTI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiBsb2NhdGlvbj0ic2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZmQyZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgbG9jYXRpb249InNhbXBsZTM2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0NGEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiBsb2NhdGlvbj0ic2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTc2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyOTdiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0ic2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIGxvY2F0aW9uPSIuXHNhbXBsZTExNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmYjM4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0ic2FtcGxlNDU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIGxvY2F0aW9uPSIuXHNhbXBsZTM0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzYTUzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiBsb2NhdGlvbj0ic2FtcGxlODY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIGxvY2F0aW9uPSIuXHNhbXBsZTcxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg0N2YzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0ic2FtcGxlNjUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZlOWQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiBsb2NhdGlvbj0ic2FtcGxlNzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiBsb2NhdGlvbj0iLi9zYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE2MzIyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0ic2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkxMWExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiBsb2NhdGlvbj0ic2FtcGxlMzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249Ii5cc2FtcGxlNjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzOWI4NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgbG9jYXRpb249InNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0iLlxzYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMWRmZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgbG9jYXRpb249InNhbXBsZTc2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249Ii4vc2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0iLlxzYW1wbGUyODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjE0YWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSJzYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgbG9jYXRpb249Ii5cc2FtcGxlNTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMmQ0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgbG9jYXRpb249InNhbXBsZTQyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgbG9jYXRpb249Ii4vc2FtcGxlNzM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiBsb2NhdGlvbj0iLlxzYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjRmNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgbG9jYXRpb249Ii4vc2FtcGxlMzY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNGJhNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0ic2FtcGxlNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUwYjFkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249InNhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTY5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgbG9jYXRpb249Ii5cc2FtcGxlNjM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWQ4YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIGxvY2F0aW9uPSJzYW1wbGUxNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249Ii5cc2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjg0NmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSJzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgbG9jYXRpb249Ii5cc2FtcGxlMjg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDEzNjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIGxvY2F0aW9uPSJzYW1wbGU3MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIGxvY2F0aW9uPSIuL3NhbXBsZTI0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgbG9jYXRpb249Ii5cc2FtcGxlNjc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjg4M2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIGxvY2F0aW9uPSJzYW1wbGU5MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIGxvY2F0aW9uPSIuL3NhbXBsZTg2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgbG9jYXRpb249Ii5cc2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmIwYTM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSJzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTYzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgbG9jYXRpb249Ii5cc2FtcGxlMjIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGI3NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSJzYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSIuL3NhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuXHNhbXBsZTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmZiNmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249InNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWRjYmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIGxvY2F0aW9uPSJzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249Ii5cc2FtcGxlMjg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDY3Mzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIGxvY2F0aW9uPSJzYW1wbGU2OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSIuL3NhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii5cc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2NmZWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249InNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTUyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhOTZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0ic2FtcGxlMTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1NDRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiBsb2NhdGlvbj0ic2FtcGxlNjg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0iLi9zYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyNjM1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSJzYW1wbGU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249Ii4vc2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNzY2NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgbG9jYXRpb249InNhbXBsZTM5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249Ii4vc2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWNlMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgbG9jYXRpb249InNhbXBsZTg2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OTE2ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgbG9jYXRpb249InNhbXBsZTkwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZmFmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgbG9jYXRpb249InNhbXBsZTE1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgbG9jYXRpb249Ii4vc2FtcGxlNzYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0iLlxzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjRjZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIGxvY2F0aW9uPSJzYW1wbGUyODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTQzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249Ii5cc2FtcGxlOTMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjZiOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249InNhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0iLi9zYW1wbGU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgbG9jYXRpb249Ii5cc2FtcGxlODA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA2MWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIGxvY2F0aW9uPSJzYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIGxvY2F0aW9uPSIuL3NhbXBsZTEwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii5cc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmNhOTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIGxvY2F0aW9uPSJzYW1wbGUyNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTkyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii5cc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWI0ZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSJzYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFkZjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSJzYW1wbGU3NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249Ii5cc2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmY3ODVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIGxvY2F0aW9uPSJzYW1wbGU4Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgbG9jYXRpb249Ii5cc2FtcGxlMjQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGEyODc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIGxvY2F0aW9uPSJzYW1wbGUzMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgbG9jYXRpb249Ii5cc2FtcGxlNjk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTExYTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiBsb2NhdGlvbj0iLi9zYW1wbGUxODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMjNlMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgbG9jYXRpb249InNhbXBsZTMzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii4vc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZGUyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgbG9jYXRpb249InNhbXBsZTQ2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgbG9jYXRpb249Ii4vc2FtcGxlMjc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3MGRmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiBsb2NhdGlvbj0ic2FtcGxlODg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTk2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2IxMzQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSJzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0NTAyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiBsb2NhdGlvbj0ic2FtcGxlNTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhODEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiBsb2NhdGlvbj0ic2FtcGxlNjk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTk1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmZmJjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0ic2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiBsb2NhdGlvbj0iLi9zYW1wbGU4OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIGxvY2F0aW9uPSIuXHNhbXBsZTg1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk2OGZlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIGxvY2F0aW9uPSJzYW1wbGUzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgbG9jYXRpb249Ii4vc2FtcGxlNDI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiBsb2NhdGlvbj0iLlxzYW1wbGU1NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZTEzNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgbG9jYXRpb249InNhbXBsZTk2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgbG9jYXRpb249Ii4vc2FtcGxlOTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiBsb2NhdGlvbj0iLlxzYW1wbGU1NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NGFiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249InNhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249Ii5cc2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmY0ZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIGxvY2F0aW9uPSJzYW1wbGU3MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiBsb2NhdGlvbj0iLlxzYW1wbGU3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3OGQ5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiBsb2NhdGlvbj0ic2FtcGxlNDgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii5cc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZThhYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249InNhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii4vc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDUxMmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgbG9jYXRpb249InNhbXBsZTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLi9zYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDhlZTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIGxvY2F0aW9uPSJzYW1wbGU1NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTg4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgbG9jYXRpb249Ii5cc2FtcGxlNzU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFlNjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSJzYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIGxvY2F0aW9uPSIuL3NhbXBsZTg3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgbG9jYXRpb249Ii5cc2FtcGxlOTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGY4NWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIGxvY2F0aW9uPSJzYW1wbGUzNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIGxvY2F0aW9uPSIuL3NhbXBsZTcxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgbG9jYXRpb249Ii5cc2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTYyNWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIGxvY2F0aW9uPSJzYW1wbGU5NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgbG9jYXRpb249Ii5cc2FtcGxlMjM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTY0OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIGxvY2F0aW9uPSJzYW1wbGU3MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgbG9jYXRpb249Ii5cc2FtcGxlMTM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2UyY2Q0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIGxvY2F0aW9uPSJzYW1wbGU3MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTc3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgbG9jYXRpb249Ii5cc2FtcGxlMzIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTEwNWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIGxvY2F0aW9uPSJzYW1wbGU4NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgbG9jYXRpb249Ii5cc2FtcGxlOTI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzc0MjBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIGxvY2F0aW9uPSJzYW1wbGU3MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTkwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgbG9jYXRpb249Ii5cc2FtcGxlNzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjM3ZGU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIGxvY2F0aW9uPSJzYW1wbGU2MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249Ii4vc2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTM0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ1ZDdlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiBsb2NhdGlvbj0ic2FtcGxlNzYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyY2U1YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgbG9jYXRpb249InNhbXBsZTYxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgbG9jYXRpb249Ii4vc2FtcGxlOTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVkZTU1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgbG9jYXRpb249Ii4vc2FtcGxlNjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiBsb2NhdGlvbj0iLlxzYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZjE2N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgbG9jYXRpb249InNhbXBsZTkxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIGxvY2F0aW9uPSIuXHNhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlZWFiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiBsb2NhdGlvbj0ic2FtcGxlNDYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuXHNhbXBsZTI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDIxNTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSJzYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTg4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgbG9jYXRpb249Ii5cc2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGNkNTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIGxvY2F0aW9uPSJzYW1wbGU3Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249Ii5cc2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjAwYThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSJzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3MTYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiBsb2NhdGlvbj0ic2FtcGxlODE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii5cc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTlmZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249InNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii5cc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzY3NzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIGxvY2F0aW9uPSJzYW1wbGU3OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgbG9jYXRpb249Ii5cc2FtcGxlMTA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTNlNTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIGxvY2F0aW9uPSJzYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuL3NhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiBsb2NhdGlvbj0iLlxzYW1wbGUyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDlmMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgbG9jYXRpb249InNhbXBsZTE0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249Ii4vc2FtcGxlNjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzNTE4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0ic2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YWYxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgbG9jYXRpb249InNhbXBsZTY2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgbG9jYXRpb249Ii4vc2FtcGxlOTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMzE0MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249InNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgbG9jYXRpb249Ii4vc2FtcGxlNDYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MGM3ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTM2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgbG9jYXRpb249Ii5cc2FtcGxlODE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQ2NGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIGxvY2F0aW9uPSJzYW1wbGUyMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgbG9jYXRpb249Ii5cc2FtcGxlOTEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjRkOThjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249InNhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNzgyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgbG9jYXRpb249InNhbXBsZTkyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249Ii4vc2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOGY3ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgbG9jYXRpb249InNhbXBsZTQyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgbG9jYXRpb249Ii4vc2FtcGxlMTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTg1Y2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSJzYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249Ii5cc2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjQyYjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIGxvY2F0aW9uPSJzYW1wbGUyMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTM3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii5cc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlNGVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0ic2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIGxvY2F0aW9uPSIuXHNhbXBsZTQxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTBjMDRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIGxvY2F0aW9uPSJzYW1wbGUxMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249Ii5cc2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTUwOGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIGxvY2F0aW9uPSJzYW1wbGU4NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTg3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249Ii5cc2FtcGxlMzQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UzMWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSJzYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgbG9jYXRpb249Ii5cc2FtcGxlMTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2EyMzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIGxvY2F0aW9uPSJzYW1wbGU3Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTkzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgbG9jYXRpb249Ii5cc2FtcGxlNDc3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTZkNzg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSJzYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2OTU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiBsb2NhdGlvbj0ic2FtcGxlNjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTk4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMTY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0ic2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxMzY1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiBsb2NhdGlvbj0ic2FtcGxlOTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMTU1ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249InNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii4vc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiBsb2NhdGlvbj0iLlxzYW1wbGUzMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMmNiYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgbG9jYXRpb249Ii4vc2FtcGxlODYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYjA0MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgbG9jYXRpb249InNhbXBsZTUzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgbG9jYXRpb249Ii4vc2FtcGxlMzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiBsb2NhdGlvbj0iLlxzYW1wbGU2MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5ZTE4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiBsb2NhdGlvbj0ic2FtcGxlNDQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NGM1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiBsb2NhdGlvbj0ic2FtcGxlNjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249Ii5cc2FtcGxlNzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTVkNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgbG9jYXRpb249InNhbXBsZTk0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgbG9jYXRpb249Ii4vc2FtcGxlNDI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU5NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOTM1NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249InNhbXBsZTkzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgbG9jYXRpb249Ii4vc2FtcGxlNzUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjM2MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249InNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii4vc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MjU3MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgbG9jYXRpb249InNhbXBsZTQwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgbG9jYXRpb249Ii4vc2FtcGxlNTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMjIzYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgbG9jYXRpb249InNhbXBsZTY2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgbG9jYXRpb249Ii4vc2FtcGxlNjg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSIuXHNhbXBsZTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDY5YjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIGxvY2F0aW9uPSJzYW1wbGU4MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgbG9jYXRpb249Ii5cc2FtcGxlOTgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2QzM2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIGxvY2F0aW9uPSJzYW1wbGUyMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgbG9jYXRpb249Ii5cc2FtcGxlNjY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzgzNmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIGxvY2F0aW9uPSJzYW1wbGU1ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249Ii4vc2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmM2I1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiBsb2NhdGlvbj0ic2FtcGxlNDcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTM2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZThjM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgbG9jYXRpb249InNhbXBsZTY4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgbG9jYXRpb249Ii4vc2FtcGxlNDc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiOGFjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0ic2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTk1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdmYzU3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIGxvY2F0aW9uPSJzYW1wbGU5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiBsb2NhdGlvbj0iLlxzYW1wbGUzOTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzdmZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249InNhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgbG9jYXRpb249Ii4vc2FtcGxlMTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNThlMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgbG9jYXRpb249InNhbXBsZTM5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii4vc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMjg1MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgbG9jYXRpb249InNhbXBsZTY5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDhjMDQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSJzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgbG9jYXRpb249Ii5cc2FtcGxlOTkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTczMGZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSJzYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTE3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249Ii5cc2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWYwODU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSJzYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgbG9jYXRpb249Ii5cc2FtcGxlOTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODc4N2VjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIGxvY2F0aW9uPSJzYW1wbGU2NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgbG9jYXRpb249Ii5cc2FtcGxlMjQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYzNjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSJzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSIuL3NhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgbG9jYXRpb249Ii5cc2FtcGxlODI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4NmNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiBsb2NhdGlvbj0ic2FtcGxlNDM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLi9zYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYjQzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgbG9jYXRpb249InNhbXBsZTkwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgbG9jYXRpb249Ii5cc2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNlODg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIGxvY2F0aW9uPSJzYW1wbGUxMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIGxvY2F0aW9uPSIuL3NhbXBsZTM5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgbG9jYXRpb249Ii5cc2FtcGxlMjY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDBiNDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSJzYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIGxvY2F0aW9uPSIuL3NhbXBsZTUwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249Ii5cc2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjBjZTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSJzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuL3NhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgbG9jYXRpb249Ii5cc2FtcGxlMTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmMyOTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSJzYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgbG9jYXRpb249Ii5cc2FtcGxlODM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDM3YjBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIGxvY2F0aW9uPSJzYW1wbGU1MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIGxvY2F0aW9uPSIuL3NhbXBsZTM3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii5cc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmY4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSJzYW1wbGU4OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii5cc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2ZmYjM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIGxvY2F0aW9uPSJzYW1wbGU0NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgbG9jYXRpb249Ii5cc2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDM1NjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIGxvY2F0aW9uPSJzYW1wbGU3NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgbG9jYXRpb249Ii5cc2FtcGxlMTc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWVhZjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSJzYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTg2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii5cc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjYzY4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSJzYW1wbGU3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgbG9jYXRpb249Ii4vc2FtcGxlNzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4MzY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiBsb2NhdGlvbj0ic2FtcGxlMzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0MGZhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0ic2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4YWQ5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiBsb2NhdGlvbj0ic2FtcGxlNjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiBsb2NhdGlvbj0iLi9zYW1wbGU1MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVhYjA2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiBsb2NhdGlvbj0ic2FtcGxlMzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTg3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2NTFlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiBsb2NhdGlvbj0ic2FtcGxlODIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTIzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0OWRmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiBsb2NhdGlvbj0ic2FtcGxlNzI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiBsb2NhdGlvbj0iLi9zYW1wbGUzMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMGI4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiBsb2NhdGlvbj0ic2FtcGxlODc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwNGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiBsb2NhdGlvbj0ic2FtcGxlMjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTcwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZhODNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiBsb2NhdGlvbj0ic2FtcGxlMTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVmYmVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0ic2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLi9zYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249Ii5cc2FtcGxlNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTVhMjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIGxvY2F0aW9uPSJzYW1wbGU4NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTE0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgbG9jYXRpb249Ii5cc2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYjI1NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249InNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgbG9jYXRpb249Ii4vc2FtcGxlOTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNWYzMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgbG9jYXRpb249InNhbXBsZTI2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii4vc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMWQ5N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgbG9jYXRpb249InNhbXBsZTg0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii4vc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTFiYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgbG9jYXRpb249InNhbXBsZTMxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgbG9jYXRpb249Ii4vc2FtcGxlMTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZGNmODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249InNhbXBsZTI4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgbG9jYXRpb249Ii4vc2FtcGxlOTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiBsb2NhdGlvbj0iLlxzYW1wbGUyNDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMjNiMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgbG9jYXRpb249InNhbXBsZTE3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgbG9jYXRpb249Ii4vc2FtcGxlNTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzUwZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgbG9jYXRpb249InNhbXBsZTc3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii4vc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NTJhY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTk5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgbG9jYXRpb249Ii5cc2FtcGxlMzI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDIyMGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSJzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0iLlxzYW1wbGU5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZjFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0ic2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0iLi9zYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGViYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgbG9jYXRpb249InNhbXBsZTkzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249Ii4vc2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkOTIyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSJzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgbG9jYXRpb249Ii4vc2FtcGxlNzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmIwNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0ic2FtcGxlOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgbG9jYXRpb249Ii5cc2FtcGxlMzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQ3Zjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSJzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIGxvY2F0aW9uPSIuL3NhbXBsZTM4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgbG9jYXRpb249Ii5cc2FtcGxlMjA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTc2ZjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIGxvY2F0aW9uPSJzYW1wbGU3NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuL3NhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249Ii5cc2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjMzMzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIGxvY2F0aW9uPSJzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTYzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249Ii5cc2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDNmNzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIGxvY2F0aW9uPSJzYW1wbGU2MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTg2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgbG9jYXRpb249Ii5cc2FtcGxlNjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTQ2ZWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSJzYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgbG9jYXRpb249Ii5cc2FtcGxlOTE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGQ2MTEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIGxvY2F0aW9uPSJzYW1wbGUyNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTM3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii5cc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmNhYTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIGxvY2F0aW9uPSJzYW1wbGU5MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIGxvY2F0aW9uPSIuL3NhbXBsZTU5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTEzYTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249InNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTQwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmE4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgbG9jYXRpb249InNhbXBsZTU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NDNhM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgbG9jYXRpb249InNhbXBsZTQxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgbG9jYXRpb249Ii4vc2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmFlNzc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIGxvY2F0aW9uPSJzYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTczNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249Ii5cc2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTdjMWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIGxvY2F0aW9uPSJzYW1wbGUyMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249Ii4vc2FtcGxlMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3MWY5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSJzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLi9zYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249Ii5cc2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzgxZmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIGxvY2F0aW9uPSJzYW1wbGUxODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249Ii4vc2FtcGxlMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1YmEwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiBsb2NhdGlvbj0ic2FtcGxlODYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTY3MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgbG9jYXRpb249InNhbXBsZTk5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ODQ4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgbG9jYXRpb249InNhbXBsZTQ3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249Ii4vc2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTFkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249InNhbXBsZTY0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgbG9jYXRpb249Ii4vc2FtcGxlNjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZWQyNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249InNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgbG9jYXRpb249Ii4vc2FtcGxlNDYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0iLlxzYW1wbGU3ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2IzMDhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSJzYW1wbGU2NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgbG9jYXRpb249Ii5cc2FtcGxlNjk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZGIxNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgbG9jYXRpb249InNhbXBsZTQyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgbG9jYXRpb249Ii4vc2FtcGxlMzg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmY2YxMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgbG9jYXRpb249InNhbXBsZTI3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgbG9jYXRpb249Ii4vc2FtcGxlNzQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0iLlxzYW1wbGUyODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyOTZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249InNhbXBsZTQxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgbG9jYXRpb249Ii4vc2FtcGxlMjc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYTU2OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgbG9jYXRpb249InNhbXBsZTg0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgbG9jYXRpb249Ii4vc2FtcGxlMTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNDFjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgbG9jYXRpb249InNhbXBsZTgxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgbG9jYXRpb249Ii4vc2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNjk5NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249InNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249Ii4vc2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVmZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgbG9jYXRpb249InNhbXBsZTcwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii4vc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNjE2OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgbG9jYXRpb249Ii5cc2FtcGxlNDc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2UyY2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIGxvY2F0aW9uPSJzYW1wbGU3OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTcwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgbG9jYXRpb249Ii5cc2FtcGxlNjYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGFiZDE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249InNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYzIzNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgbG9jYXRpb249InNhbXBsZTc5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249Ii4vc2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllZmMwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiBsb2NhdGlvbj0ic2FtcGxlODg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTU4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmNjJjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiBsb2NhdGlvbj0ic2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0iLi9zYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMwYWUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiBsb2NhdGlvbj0ic2FtcGxlNDM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhMTk2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiBsb2NhdGlvbj0ic2FtcGxlODM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuXHNhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjZWFkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0ic2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTc4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ0YTc3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiBsb2NhdGlvbj0ic2FtcGxlNTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMyMTcwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249Ii5cc2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWMxOGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIGxvY2F0aW9uPSJzYW1wbGU1MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249Ii5cc2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWI5ZDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIGxvY2F0aW9uPSJzYW1wbGU1NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii5cc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzJjOTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSJzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTkxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgbG9jYXRpb249Ii5cc2FtcGxlNDk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1MjQ4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiBsb2NhdGlvbj0ic2FtcGxlODM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTg0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQ3YjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIGxvY2F0aW9uPSJzYW1wbGUxNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTQyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgbG9jYXRpb249Ii5cc2FtcGxlNzc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjJmNjA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSJzYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgbG9jYXRpb249Ii5cc2FtcGxlMTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiOWE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSJzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIGxvY2F0aW9uPSIuL3NhbXBsZTc3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii5cc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjcyYWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIGxvY2F0aW9uPSJzYW1wbGUxOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249Ii5cc2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2RjNDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIGxvY2F0aW9uPSJzYW1wbGUxMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTc2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249Ii5cc2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmFiZTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSJzYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTc1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgbG9jYXRpb249Ii5cc2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjNmNDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIGxvY2F0aW9uPSJzYW1wbGU4NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIGxvY2F0aW9uPSIuL3NhbXBsZTUwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyNzk2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiBsb2NhdGlvbj0ic2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2NjgwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiBsb2NhdGlvbj0ic2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTY3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjZDdlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiBsb2NhdGlvbj0ic2FtcGxlOTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIGxvY2F0aW9uPSIuXHNhbXBsZTgzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmI4NGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIGxvY2F0aW9uPSJzYW1wbGUzNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIGxvY2F0aW9uPSIuL3NhbXBsZTEzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgbG9jYXRpb249Ii5cc2FtcGxlNDY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZmJmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgbG9jYXRpb249InNhbXBsZTQ4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgbG9jYXRpb249Ii4vc2FtcGxlMjEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZjE5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiBsb2NhdGlvbj0ic2FtcGxlOTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExNzVmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiBsb2NhdGlvbj0ic2FtcGxlMTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiBsb2NhdGlvbj0iLi9zYW1wbGUzODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5Y2UxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0ic2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTc2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjNTRjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0ic2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NjA5NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249InNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTAzNzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIGxvY2F0aW9uPSJzYW1wbGU5NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgbG9jYXRpb249Ii5cc2FtcGxlNzM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzAxN2Y0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIGxvY2F0aW9uPSJzYW1wbGU1ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuL3NhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgbG9jYXRpb249Ii5cc2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2YwMGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSJzYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249Ii4vc2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTU3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljODIzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiBsb2NhdGlvbj0ic2FtcGxlNzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ5OGFhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0ic2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiBsb2NhdGlvbj0iLi9zYW1wbGU4NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTI5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjM0NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgbG9jYXRpb249Ii4vc2FtcGxlNTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiBsb2NhdGlvbj0iLlxzYW1wbGU4ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVjZDU2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0ic2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTM2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkMzBhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiBsb2NhdGlvbj0ic2FtcGxlNTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIGxvY2F0aW9uPSIuXHNhbXBsZTI4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY5YTVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0ic2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjdkZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249InNhbXBsZTIxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii4vc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiBsb2NhdGlvbj0iLlxzYW1wbGU1ODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNzhjZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgbG9jYXRpb249InNhbXBsZTcxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgbG9jYXRpb249Ii4vc2FtcGxlODA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiBsb2NhdGlvbj0iLlxzYW1wbGU5NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2N2NjZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249InNhbXBsZTg5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgbG9jYXRpb249Ii4vc2FtcGxlNDU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiBsb2NhdGlvbj0iLlxzYW1wbGU1OTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwODNjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249InNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgbG9jYXRpb249Ii4vc2FtcGxlMTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2Y4MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0ic2FtcGxlMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuXHNhbXBsZTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZGNjMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249InNhbXBsZTI4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgbG9jYXRpb249Ii5cc2FtcGxlMzExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTBhMzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIGxvY2F0aW9uPSJzYW1wbGU3Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTM2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgbG9jYXRpb249Ii5cc2FtcGxlODQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1NjQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0ic2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSIuXHNhbXBsZTkzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmIwOWFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIGxvY2F0aW9uPSJzYW1wbGUyNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTcyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgbG9jYXRpb249Ii5cc2FtcGxlNDA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDg5MmZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIGxvY2F0aW9uPSJzYW1wbGU5NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgbG9jYXRpb249Ii5cc2FtcGxlNTM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2MxNDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTc2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1MmNmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiBsb2NhdGlvbj0ic2FtcGxlNzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIGxvY2F0aW9uPSIuXHNhbXBsZTE0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgxMjc3MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgbG9jYXRpb249InNhbXBsZTEwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuL3NhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk5ZTU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiBsb2NhdGlvbj0ic2FtcGxlMzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIGxvY2F0aW9uPSIuXHNhbXBsZTExOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyOWMyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiBsb2NhdGlvbj0ic2FtcGxlNDAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyZjlkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiBsb2NhdGlvbj0ic2FtcGxlMjU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiBsb2NhdGlvbj0iLi9zYW1wbGU4NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1YWE1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiBsb2NhdGlvbj0ic2FtcGxlNDg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOWYzYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgbG9jYXRpb249InNhbXBsZTY5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgbG9jYXRpb249Ii4vc2FtcGxlOTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0iLlxzYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTk5YjljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIGxvY2F0aW9uPSJzYW1wbGUzMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgbG9jYXRpb249Ii5cc2FtcGxlMzAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NDJkMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0ic2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFjZTI5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiBsb2NhdGlvbj0ic2FtcGxlNTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTIxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NjkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiBsb2NhdGlvbj0ic2FtcGxlNjk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiBsb2NhdGlvbj0iLi9zYW1wbGUxODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSIuXHNhbXBsZTM1My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkOTc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiBsb2NhdGlvbj0ic2FtcGxlOTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWE0M2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIGxvY2F0aW9uPSJzYW1wbGUzMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgbG9jYXRpb249Ii5cc2FtcGxlMjMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQ4NzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIGxvY2F0aW9uPSJzYW1wbGU4MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249Ii5cc2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTdlMjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIGxvY2F0aW9uPSJzYW1wbGU5NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSIuL3NhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgbG9jYXRpb249Ii5cc2FtcGxlODc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDQ5Yzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIGxvY2F0aW9uPSJzYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgbG9jYXRpb249Ii5cc2FtcGxlMjgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTZhMGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIGxvY2F0aW9uPSJzYW1wbGU1Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTUzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249Ii5cc2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmQ2ODY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSJzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249Ii5cc2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3YmNiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0ic2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMwYWYxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgbG9jYXRpb249Ii4vc2FtcGxlMzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNmRmM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgbG9jYXRpb249InNhbXBsZTIxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgbG9jYXRpb249Ii4vc2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZTk5OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgbG9jYXRpb249InNhbXBsZTQ4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgbG9jYXRpb249Ii4vc2FtcGxlMzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNThmMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249InNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249Ii4vc2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLlxzYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZWRjMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249InNhbXBsZTkzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgbG9jYXRpb249Ii4vc2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjdlZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249InNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgbG9jYXRpb249Ii4vc2FtcGxlOTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjUzMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249InNhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249Ii4vc2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSIuXHNhbXBsZTgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmZiNGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIGxvY2F0aW9uPSJzYW1wbGUyMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249Ii5cc2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGUzNGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIGxvY2F0aW9uPSJzYW1wbGUyMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii4vc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhODI5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiBsb2NhdGlvbj0ic2FtcGxlOTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIGxvY2F0aW9uPSIuXHNhbXBsZTI0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZDY5ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgbG9jYXRpb249InNhbXBsZTE1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgbG9jYXRpb249Ii4vc2FtcGxlNDUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiMjc4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSJzYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii4vc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTM0ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgbG9jYXRpb249InNhbXBsZTExOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgbG9jYXRpb249Ii4vc2FtcGxlMTA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMjEwYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgbG9jYXRpb249InNhbXBsZTI0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgbG9jYXRpb249Ii4vc2FtcGxlNTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNGMyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249InNhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzU4NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgbG9jYXRpb249InNhbXBsZTQ0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii4vc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWE2ZWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIGxvY2F0aW9uPSJzYW1wbGUxMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIGxvY2F0aW9uPSIuL3NhbXBsZTExMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTUxMmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIGxvY2F0aW9uPSJzYW1wbGU3NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTYxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgbG9jYXRpb249Ii5cc2FtcGxlNTA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUzMzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIGxvY2F0aW9uPSJzYW1wbGUxNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIGxvY2F0aW9uPSIuL3NhbXBsZTY4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgbG9jYXRpb249Ii5cc2FtcGxlNDUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzdlM2M4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIGxvY2F0aW9uPSJzYW1wbGU1MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTIxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgbG9jYXRpb249Ii5cc2FtcGxlMTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIxYzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNTYzM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgbG9jYXRpb249InNhbXBsZTQzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgbG9jYXRpb249Ii4vc2FtcGxlOTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZlZmQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiBsb2NhdGlvbj0ic2FtcGxlNjIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTQzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5ZGNkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiBsb2NhdGlvbj0ic2FtcGxlNjEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZmM2Y2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0ic2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii5cc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDZjYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0ic2FtcGxlOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIGxvY2F0aW9uPSIuL3NhbXBsZTY0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgbG9jYXRpb249Ii5cc2FtcGxlODcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzY5ZDBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIGxvY2F0aW9uPSJzYW1wbGU3NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTc2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgbG9jYXRpb249Ii5cc2FtcGxlNjg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzdmMGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIGxvY2F0aW9uPSJzYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSIuL3NhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgbG9jYXRpb249Ii5cc2FtcGxlMzY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTRkYTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIGxvY2F0aW9uPSJzYW1wbGUyMDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTgxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3YTRhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiBsb2NhdGlvbj0ic2FtcGxlNTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTk4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZlZWJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0ic2FtcGxlOTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuL3NhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjcwNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgbG9jYXRpb249InNhbXBsZTkyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii5cc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5N2FiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiBsb2NhdGlvbj0ic2FtcGxlNTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0NGZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0ic2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0iLi9zYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA1MDE2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0ic2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIGxvY2F0aW9uPSIuXHNhbXBsZTUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ5ZjlhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiBsb2NhdGlvbj0ic2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Y2M4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NTgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiBsb2NhdGlvbj0ic2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIGxvY2F0aW9uPSIuXHNhbXBsZTE4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4YmJkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0ic2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiBsb2NhdGlvbj0iLi9zYW1wbGU3NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5Mjk3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiBsb2NhdGlvbj0ic2FtcGxlNDQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiBsb2NhdGlvbj0iLi9zYW1wbGU1MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1ODMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiBsb2NhdGlvbj0ic2FtcGxlNzQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTU0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkNmQ2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiBsb2NhdGlvbj0ic2FtcGxlNTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiBsb2NhdGlvbj0iLi9zYW1wbGU4MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTE3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmOGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSJzYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249Ii4vc2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTM1ZmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIGxvY2F0aW9uPSJzYW1wbGU3ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249Ii5cc2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyODMzYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgbG9jYXRpb249InNhbXBsZTI5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgbG9jYXRpb249Ii4vc2FtcGxlNzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDhiNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgbG9jYXRpb249InNhbXBsZTg0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgbG9jYXRpb249Ii4vc2FtcGxlNTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZGM0ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgbG9jYXRpb249InNhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgbG9jYXRpb249Ii4vc2FtcGxlOTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNTNhZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSJzYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI4NWFlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0ic2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiBsb2NhdGlvbj0iLi9zYW1wbGU5MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFmZmYxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiBsb2NhdGlvbj0ic2FtcGxlOTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI5NjhjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0ic2FtcGxlOTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU0Mjg5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiBsb2NhdGlvbj0ic2FtcGxlMjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIGxvY2F0aW9uPSIuXHNhbXBsZTI1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxMjY1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiBsb2NhdGlvbj0ic2FtcGxlMzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuL3NhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZGFjZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249InNhbXBsZTYxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLlxzYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzIzYWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSJzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE2Yzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIGxvY2F0aW9uPSJzYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSIuL3NhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249Ii5cc2FtcGxlMTE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMzNTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249InNhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiNDQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0ic2FtcGxlMzA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTExNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhNDMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0ic2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiBsb2NhdGlvbj0iLi9zYW1wbGU0MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWFhZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgbG9jYXRpb249InNhbXBsZTY5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgbG9jYXRpb249Ii4vc2FtcGxlMjgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjA2MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgbG9jYXRpb249InNhbXBsZTE0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgbG9jYXRpb249Ii4vc2FtcGxlOTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuXHNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmE1NGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIGxvY2F0aW9uPSJzYW1wbGUyMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgbG9jYXRpb249Ii5cc2FtcGxlNzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWQwODhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIGxvY2F0aW9uPSJzYW1wbGUxNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIGxvY2F0aW9uPSIuL3NhbXBsZTE3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgbG9jYXRpb249Ii5cc2FtcGxlNzczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDQ1NjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSJzYW1wbGU4NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgbG9jYXRpb249Ii5cc2FtcGxlMzAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTc4ZWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSJzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTE2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgbG9jYXRpb249Ii5cc2FtcGxlNzI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDlmZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzZWVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjM5ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTlmZjBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1Y2EzNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3NjMyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGE2OGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkODhjMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFkYTY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IzMTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MDI5OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzNDg0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDNlNDBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNhZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0NGUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzVkZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMTVmZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc3MWM1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDYwODNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0M2U4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ0Yjk5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGU5Zjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1M2FiMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyNmUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkZmIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDVlMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1NDQwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWRjOTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzllMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk5OWRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDAwMmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMWFiYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1ZWNiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjFlMGQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NjU0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NzcxNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjc3MTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNjA4OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEzMTYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjg1OGQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGMwMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhYTVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGUyMmZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMGMzOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzNThkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjY1ZGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzU3YTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4NTQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjAwZWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5N2EwZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ2MGQ1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTBiYWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMjg4YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2OGNhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDk5NzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Nzk1NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiM2RkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUzODBlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjkzOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0N2UwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGFhZmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTVkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YWY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGVhODc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjY1MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4YWJlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDU1ZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkY2IzOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNmIxMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTFiNGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZDk1ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwNTRlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzJmMzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOWEzNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ODVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzM5ZjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNzA4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDViYzk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmM1NDY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWE2OTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4NGY2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGM2ZDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjA4NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI4NmQ0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTBlYzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTRjZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdiMjE5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGNmODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODI3NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFlY2QyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwMWE5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODQyMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIzNDc4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDQ3MWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZTdhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwYmU0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmRjMzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NGMwNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3ZTY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU1ZGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjVlYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZDE4NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmM4NzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNGNlMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzOTRmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmZiZmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZjJjZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ0ZjU3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjllYTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOWJkOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRiMWZlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWY4NzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwNGYzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMWIxMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWMyYzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZmY5Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc4MWIyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjNlN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYjczMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU4ZjYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTgxNjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTZhZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE4N2M5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmYwNTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjliNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3MDAxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2FiNTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjMzNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwODkyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGFkMjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTFiYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxMjAzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzMzZWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MTdmYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlZTUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2NGQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWQ2MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyY2JiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY3MjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmOWM5ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlYmQ4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTJlOWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNmJkNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiZDUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjBiNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMzc3NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYWRiZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDA5ZmNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNTUxYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwOTdiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmY5OTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzBkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiZGI0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDU5YzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MGY2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiMmEyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAzMjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTZiNzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1ZjIxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODhlNzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2EzYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3NjlmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2UwYTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMWM1NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZmNWRjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjlhOGZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YTJkMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhZDc1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NjMwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjYwNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4MDMwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWE1ODE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZGNlODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5ZTNiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTIyN2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZGVlZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE3YTUxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTJhYjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NTgxNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDNhZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTIyOGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMmMxMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0NTVjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmE2Y2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMmNlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiNWVlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODQxZmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMjAxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzYmUxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJhNzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTUzMDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0YjUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdlYjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MjdkZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5MTRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWZjYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTJhYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVlZjhhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTBmOTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjgwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3ZmY3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1MjgxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMTZjZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ3NDA4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjFhZGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNDhmNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZhODNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWEzNjVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWRlZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjOThlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjFhMDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzODVkOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDQ2NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQ5ZTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzI4ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4MzU2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjMxNDQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NTY4ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTllNWViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2EzZDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4M2E4YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkYjFiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQ5MTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5MWNjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmUzNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FmYmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OTcyMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkN2JjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2JkMDYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZWIwNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyYjBhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWY0MmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmIyZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjZjE2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGY4ZTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgzMjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmMTUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGIyNTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZDdlMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNiY2ViNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDA2MjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2I5NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEzODZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2UzNWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMDlkYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3OTA4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxZjEzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyM2IyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhNWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTgxY2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjQ1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwMmM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2IwZDVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjdlZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5MGI1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU0ZmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGM3MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZWQzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjBlNmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2Njk5YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU4MDY1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzhmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmOTYzMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3ZjM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzBlOTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMmUwY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM3M2U0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDJjNGI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM2NjhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4ODcwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjQxZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MWZmYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiMzViNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGM5MjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2JmNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhZGFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGFjNDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzQ3YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3MzQzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1NTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZWUxYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQwZDRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmUyMzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ODlhNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNiMTI0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjkyNjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NWNiYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1Y2MzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDA2Y2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDRlNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlY2QxZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJiNTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZjBkZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzOGNhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWZmYzExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiODkzM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjZTdkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODUzNGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZDA2MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJiMDY5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGM2ZWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGU0MWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmYWE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmFiMmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzM4NTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0ODdmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjcyODVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNGVhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMjcyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWQ3MTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzN2YxOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljNzBmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlYzBlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NTFjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiNWRlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGM1NmNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NTAzOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNjM2I4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDVlMTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NWQ5NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY0MWU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmNkNTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjA5ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTA1ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTE4YzU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZDFhN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJmNDBkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM5ZjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YWMwYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4NGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjcwZmFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzQyMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxODBmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGRmMWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4YzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDg5ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzYyZjE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNmZmMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE4NGU2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGY1MWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmN2RjMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiYzVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTQ5YWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MGFjNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyZjdkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDhlYWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE3MzVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4NTA4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzY2ZWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZDcyMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkOTg1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGUwNzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMDU3YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkNThmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWZiMjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZjMwNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxNDcwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MDQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MWVkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwMGZlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDcxMTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjFlYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY0NTlmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODM0ZmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNTY4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzNDcwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDU2MzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjBlMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOWI0MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzUyZGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NDdlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhjN2M3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWQ2N2UzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViY2Y2NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3ZjljZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTNiODRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZDZjYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ5Mjk5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzk5ZmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTcwNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkYzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTdhNmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiM2RmODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliYzg3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTE1YmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWI3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1NWQ3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWIyMWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYzgyNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhODEyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzNDk1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MDU3ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyN2RmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjYxMDYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNDhmN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiYWMyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTZmZWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODNjZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwNDdmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTYwNDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiODVhYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDA3YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE5Nzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMmM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhYzg5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM4OWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNDA2ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1ZWRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjc1OWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjhmOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyZmU3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjI1ZDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGMxMGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkMDZkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDYzZTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YTMyZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0ZDIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGRmNjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZmU0MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0NTk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmQyNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YTg4NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2YzRkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExNDM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYmJmNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmNWIxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTlmZWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDBhYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE4NGNjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjJlMDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNGFjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNmQ1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDNmZTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzJiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGZmNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmYzZTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTk4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxM2RiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjY0Njk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNWE5MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ5ZWFkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGE3YjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYjI0MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI5ZjRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZThkOWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxODU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODgxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDJjYTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NGUwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQyYTJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTIwMmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDRhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3ZTcxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODYwZmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YjZlYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiM2RjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDA5M2YyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWUyYTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjYmU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg3ZGRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOTMxODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzODkyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGY0MGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODQzNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwMmMxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmFkZjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOGZjZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk1ZWMyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMjVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZTUyZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczMDU0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmE5YWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YjI4YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI2NTc2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmU3YTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OGNmZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyYTgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmExOWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYWI1MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNTEyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE3MjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZTY2Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5YTNiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOThlNzFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDY2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0NTg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OThjODg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNTU1NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVjZDQyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjU3NGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDBmNzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY3NGM0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmE3NGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzQ3MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4OGQ5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY5YzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhODgzN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZiMDYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzE1MzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjU1ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1M2E3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRhZmM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZjkzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5Y2Q0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWE5ZjAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmQ2ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk3OGM0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWM0YmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMWMzNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczNTYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2JjMzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YjEyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5M2IzMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTIzMThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWJmMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MWE0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWUzMWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZmQzYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxODM0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjJkMzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZDhmMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmYzliNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzU3NDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQwNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjYTU5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjZkYzBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZGM2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxMTUxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzMyYjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MGQ4MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczOWY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzI1YTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MDZjN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdhMTM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlNTFkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMWJjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwYmI3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmFlMTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMDg4ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkNGMwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWQwZGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMDM1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0YzAxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTNhODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhN2JkMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OGI1NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTA1MDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYmJkYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwNGRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzViNzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYjRjNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjNjdjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTA3Y2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YjUzZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhiMjA5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWM4ZDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyMmQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NjYwMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTBmMjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTIxNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhMWJiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmRhMWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMmE4OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU2NzNhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTI0ZjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZDJkZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmOTRiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzRhYTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFhNGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ4YjY5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTYwYTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZmNhMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzYTJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGFhY2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzg0MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3MDE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDk3ZWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYTVkZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmNjQ0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5MGE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGYwYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwY2Y1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTI3ZDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NWJlMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y5OTMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDg0OTBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MTRmMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhNDJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODk1NDYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OTQ3ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNzcyZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjZjNmVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTY0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJkMjZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTdmNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwN2Y2ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxYmIyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE2YTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYWZiYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNWQ5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzE1YTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzU0ZTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwZTk5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWM0ZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjU4MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiZDYzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjk2OTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYjRlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4MDY2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmMyN2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NTM0NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmN2FkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ODJjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjM2MzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4NWZiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODMyNjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmJhMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2YTY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjhmZTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDdlMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxZDQ3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2UwNTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyN2M5YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNDAwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2I0MjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDc5NWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFmZjIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTgzNGNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNmNmMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4ZjA0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjNlOTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMjIwMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlMDkwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2MxMWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGI5ZTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4Nzc5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjFhY2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYWFhN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjljOGU2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWE3OGMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjdkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkMjFjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTBlNmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTg2NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRhYTNhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWViMzA5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NjUyZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0Njc2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmUwODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMDQxOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0YmNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDg0YzVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZGVjOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNmJlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzQ5ODgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTkwOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDMxM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTk4MDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDJmZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk1NjczOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDgyNGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTVjOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxMmU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ5NDQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZTUxZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiYmRkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTBlYzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MGE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTUwMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmExZjMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMDZlMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyOTY3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWEzMWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTc2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzOWM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDczZmZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTliYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxMmUzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzNiMmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM3MGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFiYjU3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWM2OWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNGZmMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwNmM2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njc4ZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTVlOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFjZGViMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTE5YzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYWU1OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5YjdlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZjM0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjkwZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmNWI3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjZiMjQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NWVmOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5NTY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDllYmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZmFhYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYwYWUyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmY4MDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMGZlMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZDZkYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc5N2ZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMzZjOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI3MGIzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTM5ZTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTllNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlkODgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWRjMmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYjQ1ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVlZDZjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTBiZDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjAzNWQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4OWE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTkxNWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NmMwODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhmMzRmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDc4ODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTE3ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMxNmY3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzg0NTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Yjg4NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjMGQwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhNWY5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWJlZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0NTVhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2MDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZmYyOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE2OGQ0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2YyMTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWFhMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNzJiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODM3MjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTJkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZjViZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUwYzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDQwM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1YTkyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTAzOTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YWFjMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0OWNiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDdkY2JhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYTFmYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAwYTAwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDlhOWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTFmNjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThmNmVjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWJlMDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NTg1NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE4N2YyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTIyMzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTBmMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFkNmJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJhNmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODliOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhZGE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5N2Q4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYjZjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlYTM4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQ5MDgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYWE0NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyNzE2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYThiMmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNGRiMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkZGI5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTcxZGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjA1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzODczYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTYyNmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkY2FhNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExMDQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2MwMGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YTZmYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzOGY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTU0YWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZmM0YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzMDMyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzEwZmUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3MWIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTgyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTE3NmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYTRiMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNTQ2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGQxOTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NzY0MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3ZjhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGNkNjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMDk1YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0MTFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAwMmIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM2YmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmMTA3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJjMzNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MjAzN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE1OTVmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTA3NTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyODY4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzljYmMwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWRhYzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTQzYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjMDJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhZGQ2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmY2ZkNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwZmNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjY3NDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTdkMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmMTQyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWFkOTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYmMwMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0YzUxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjI1Nzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjkyNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZWM5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGFiNzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZGM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1MzZiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjBkODM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGFkYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI1MTgxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA1MmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ODIxZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzYTE3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDE1NTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2VkNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5NmI5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTJiNTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTQyZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjNDc5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjk1MTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmM2IxYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY4OTVjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTA4ZTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNjEyMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYyYTM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0OTI3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTE5NDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3ZTkzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDM0NDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNmY3MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiNDA3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTU2MzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiM2ZkMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyMTMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTIyM2Y2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ODUwMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMWQwN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE1Yzg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhOTgyYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhMGJkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzJhNTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDUyNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE1YzdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTE1NmRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ODhiNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5OTZiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTcyYzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTdiMzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiZjAyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTBkNTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYWRhNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiMzI2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2JkY2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZGM2MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2ZmRmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDMxOGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MzI0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY2MTIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzZGMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMDE0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY0ZjJiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmZiN2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NTkyOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkYTU3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDNiNTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjBiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIwYzg5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUyZjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiM2NkNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZjIyZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mzg0NDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Njc1OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllMmQxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2I3MzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjhhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAyMTUwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzQ1YmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNmQxYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyMTMyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYThiNzljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzg1MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWI5NmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MmRkMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwNDgzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDUwOTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZTA4MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0MjU2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjNhYmNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGJmMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkMjhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjk4ZTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzBlNDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI5NzI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDgxMDg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDE0ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3YjY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzE0NTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZTNmOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiYmYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzUxODUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OTc0OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkNWU5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0MzhhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYzZjZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4Y2UzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjlkNjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNWEyZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJmNzk2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWEyOGM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTNmOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzMGFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJjZGJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjN2JjNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZWRlMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjNhZDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MjZiNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhNTFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ0ZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzZhODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYyNDhlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGNkNzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOTlkODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZjYmQxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzAzZmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NjMTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRlMDY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NThjYWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMzAwYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhNzRiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTc5NmRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTNlNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3NWM4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjhkZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMTFkZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEwZmFhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY5YTdkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NjU4OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmMjVlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA4MzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZTllYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhMWU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjQ4ZjAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMjVjYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjM2EzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDVkMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYzQ4ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzY0ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmZmMTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZTM1ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjODlmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTkwZWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Y2IyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2OTgzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2UyMDM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMTRkZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhNzlhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDgxYjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmNkMzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDViZWVkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmEyYTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZjcxYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3NDgzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDRkZjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZTdhNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyZDBkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc3MTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDliZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1ZDk1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2NDZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTQxMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQxY2JhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2E0ODk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWNiYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0MDFlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMThlODFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNWY2MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA2ZDc3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQyYzFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjQ5YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNGJhMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmNmN2RlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNGEzNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA2Y2IxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzNlMDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzA0YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExZTk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWYzMTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MmYzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkzMGI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODE4NmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJhNmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzZmMxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNzA3ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmJiODgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdiNzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkY2Y4OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGFhYjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmYyZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4MTgzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3MjI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDBiMmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGZmYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzMmExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3ZWI2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2M1ZDliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiN2JkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZTk5Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlNDhhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTNmNDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmE3ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDQwZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczNmNiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5NDQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiNTk4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTMwNDNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk0OWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzM4NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY3YTdmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwMTY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzJkNzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0N2RjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTFiYWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWRkMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzZTE1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjNzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzE0Yzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDA3ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2NjAwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTFlOGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWUxOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzFkNmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1N2NiYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzM2JhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNmNzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOTc4ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhYzYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2NmNWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODQ3NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2NDNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc3MGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZTk2NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2NzkxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3ZDQ4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjExNTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZjZiOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwMGFmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjM2MDhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjU4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkOTM2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTIxN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDM2OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWJiMTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YjZiYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2EzYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQzZTA3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWZhYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1ZDUyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxOTk1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjFjMDY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOWYzZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOTM3ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NjEzNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwMzM2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Q1Nzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OThkMzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzYwMmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ODQzY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc2YTVmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGFkZDU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMTY0ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjViNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ3OTNiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDRjZjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWE5NjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MjEwNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3NmQ1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzNmMGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDRkMzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMTIwNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWY2YTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZDY3ZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE2MjJjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MThhZjM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NWY2NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhNzZjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmIyZTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWZhZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkxNWFlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDcxOWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWM0MTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGM1MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjYzNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmM1NjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGY0OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0YjNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmNkM2I1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMDRmMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFmYzI3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTBiM2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOGMyNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliNDE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3MjIyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWM1YzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2NzM3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjNkMGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMjJkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ1NTYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTNhZGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ODM1MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmZmJhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1ZmY3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDZmZDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNWY5ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGQ2Zjc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4YTJkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTEzMDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTFjMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkyNGE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MDc0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmNGMzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjE1YTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZDg5ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE4ZmZhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2UxNmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDM3NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk1NjMxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjZlNDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTJmOTA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWQ1MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTQzYzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZmZjODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5MTdlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjljZjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyODRiYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYmQwMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2YWQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjNjFjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc4YjBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzk4NGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmU1ZjQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNTM1MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ3MjU3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWU3MDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZmI1YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NzJiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzA5NTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzlhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmZmViOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWY5ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWFhMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxZDAyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkOTJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTU3YTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDQ4ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhM2UzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI3YjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyN2JmMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhkNjZhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZmZjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZjgzNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkOGY5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODI5YmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOGIzNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzY3NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwNjUyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNDQ3YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3ZTE5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2U2YjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NDI1OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmNDcwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTkzOWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZWUyMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2NzI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRiMDg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlODlmY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE5YTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODAyOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2NjZjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmY2Y2YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNjA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDAyZDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRiNWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NTI1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOTRiNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FjN2YyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTZjNjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMTUxNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMjNiN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFlMzY5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTMxZTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMGNkNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmODU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWRmY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MmUyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdjMmY3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTRlYjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYjJlYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxYjMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QxZDE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTgwZGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MTUxMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjM0NGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiOWIzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzNTY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzRiZDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTEyZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVjMDA1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWU5NzUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZWM4MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2MzI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTI4MmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjNhOTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWMyZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2ZhYzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NWRlNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzOWY0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTI1YjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYTg0MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMzQ0N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiOTU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWE2YWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NmQ5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyN2I5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyN2UzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODYxNWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4NTllMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjBhNTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NTE5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiZjQ1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzViNTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNmE2MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTAxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlNDhhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDE4OGNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjBjNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3NzU1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjBlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTJkYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRmNGI4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzJjOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMwNjc0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjVmMTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWNlODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMTgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjkwMDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MTlkMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiNDQ5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2I4MjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YTkzMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDZiMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEzMmYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjVmZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmYTE5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFmNTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMzZhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0YjAwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjFlYzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzE0YzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNzQ4NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBmY2FmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjFmNzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGYxNTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMmVjMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4NWQ0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTJjOTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4YzBlMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmYzkxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyNjRmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE2ZDVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMzllMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGU4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGJmZjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NGZkMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YTgwODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlOGJhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Mzc2ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYyMzk1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWE5YWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZDE2YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjZTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmQ3ODJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDEzYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ3MDdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1YjQ0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTdhYzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjZmYThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYTk4YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDZkNGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyY2Q4NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYzZjZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjZTlhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDgwZDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYjFhZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlNTdlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjhhZjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZmFjMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzI1N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjk4NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VlY2JkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYWJjNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxMjUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM0NTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzN2ZmZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRiNTE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlZjc4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTQ2NzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Y2FkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMDg2ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5OTQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmMmU5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JlYjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRhNWUxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTM0ZWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NWQ3OGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZWE2ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlhODVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWI5ODBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjE0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2NTNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmZmQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGI2ODMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNjMDdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MzI4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQyMzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZDdmOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkZmQ0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDg3NjhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGZlYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRjODg3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjExYzYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWFlYmU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMGI5MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYwNjRlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVkNGM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVkZGRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk2ZTExMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjdkMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMTY0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3ZmNlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTdiZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxY2Q3NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlMDc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcyMDEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzc3Y2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNjJkMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MzY5MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3MjliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyYzdjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTRmMWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDVkNDJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YThlYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4YWU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1ZmJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjRjODA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMzE1MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzZThjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzExNDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2YzYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2FiNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYzYxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwMTU3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWYyYTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzQ3NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExNTk1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y0NWJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2NhZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMzE0NWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5YmRjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDlhMDkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNTY2NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4MmY3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhNzYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjRlN2JkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyYjhkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBiODY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MGQyYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MTY3ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5MWFjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTA0NzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OWViMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzU4OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2ZGRlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjFmNWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTNlN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOGQ4YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjllYjI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNDUyZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExNzAzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzYyMjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2IxN2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOGM1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMxMGU5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTdiMmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZDdkZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNDI2ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlM2QzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI5MzFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNzY4ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMTA0YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZTYxOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1YWY4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjhhMThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZTY5NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5MWI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Y2NWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3OThlMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5MTA0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwMzNhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWJlYTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3ZDNjY2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZjQ4ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3Yjg2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1ZTY4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDlkZWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZjlhYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5M2E0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmRlYzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2N2I4ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE0YzllNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkYTc1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA0N2EzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY5NDhlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjM3ZTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNTk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3NDkyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODhhZjU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOTI3MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzNDAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQ4ZDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNGYyZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZmZjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgwOWZlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmFkNzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OTQ4NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0NDNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmM4NzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMGRiZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YzFkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWMxNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VmMTI4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzFhMTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDU0NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhNzYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDVmNTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1OTM1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDVkMDkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMWM1MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyNGE4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTAyOWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWY4NmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNWJmMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4NDNmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzJiMzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwODc0MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjU1MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhNjVmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYTU0NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EyODg2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg4NDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmE1OTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MDM1ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMWZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2JjY2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzAzYWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTIxOGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MmM5OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNWZiYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM2NTgxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNzRlZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzMTY3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2UzYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjNhYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcyMzc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDI4NGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDgzMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFjZGUwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjBlNTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMzVlODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjIyN2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU3N2U4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGUzZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZjY4MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2UxZGQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNjBjYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1OGFmZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3ZThmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjAzMDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZTY4NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4Y2YzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3ZTliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZDQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjkzZDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDQ3Mzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NGJjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhYjRmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWVhOWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzY2NiMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiMTc5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE5MGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzRiYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyZTlkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZkZjgyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmUwZjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMzg4NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OWMxOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhZDcxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZmQ1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4Y2ZkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGRiMjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOWMxYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlYTdkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBkMTZjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDk1OWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODU4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3OTFlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzgxZTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzBjNWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTliYWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4MmZjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODIzZjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzY5MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxN2Q3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRlZjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3Zjc0NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjOTE4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDZmNmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2E3MTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4N2E1OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NzE0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZjNzc4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MmIwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThmZjMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDdiMDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MGNlYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5Y2IwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmYxMWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZGVmNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRkNzFmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTNmMjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjgwNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZWUyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzOWU4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjhkMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0OTc0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzA3Y2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2ZjYzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2FjZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZmZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2MzNmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMjZjYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNmOTVlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczMzE1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjYTZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3YmE1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhM2YyYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllYzE0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjBmMzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2FlNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWM1MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkMjRiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTkxOWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZmJlN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwNzQxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJkZWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2Q3NDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODgyY2ZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MzQzYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0Y2MxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGZmYzc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTgwMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzYzZhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTY5NWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Y2EzNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2ZTIyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRmZTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNGI5ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDU3Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4NmRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MDE2ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlOTJiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGNlOTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NDMzNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxZjVhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWM4YjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjIzZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyMjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWRiNjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MWNiMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTZlNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZDJkODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzBjYmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMmY5NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlNjEzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWIwYTljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDg0NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlZDdiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwMDA5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDM1ZmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmFiM2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjFjZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTg1YjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxMjBhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlNGFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjQwNTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjOWNhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGRiZTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZGQ5NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyODg4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTNlNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOGVhMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODU4ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4NDdhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjY0OTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjU5Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMGMzOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVhYTIzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwODk3YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAxNmY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjg4ODQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZTQ3YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZmFiOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQwY2ZhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ0OTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZWZiM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJjNmZiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmM3Njk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGEwZjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGQxYzFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyY2UxZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmMGQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzIyZjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjYTRkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTA3MGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MDc1NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiYmQ0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDI1OGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzMwMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NWMzMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzY2VhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDk0NzM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZTVhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhODUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGViNzJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZWE2ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5OTZjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWI3MTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWViZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjYjk5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2YwNmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWI0NzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOWFlNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjE3MGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzFlNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2YzNjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzgxNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmOTEyYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjZWI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzhmNGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYTc0NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2ZmY1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNmNjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmNiYjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYjY4ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzUwNGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYTQxYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzNjMzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWZmZjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODBkYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJiODMyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDk1YmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjBiMWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDFlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZDczMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmOTM0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGUyYmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNzUwOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjZGM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGIyZmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTIxMTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzhiZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3ZmQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGVjY2U5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3M2VjYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1ZDE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2QwZWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2NiZDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMDFkMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWVhY2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Yjg5YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmNTFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzNhYTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjA2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5Y2E4MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyNTZkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzkwOWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZThkNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3MzA4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIwYmNlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjFlYjc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0OTQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzU5NDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYTk5NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxODBkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU2MDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZDE0OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4MDBjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDUwOTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMWJmODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYzJmYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZTlkMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1YzUzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMjg2YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEwMzBlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWU3Y2RhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjc2ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxZTc5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjkyZTY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYzY2NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg0N2IyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjExYzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYzdhMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhN2IwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1Yzc2OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZlY2NiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTMwNzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3NjhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmRjMmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjQ5NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4YmU0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FlZmEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNmZWM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWEzMjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzN2ExNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4ZGVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTgxNmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjM3MjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTlhNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDNjMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxMGNiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM4MzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZWEyMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmY2Y0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGRhYWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTc3M2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOTU1YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyZTE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGYwNjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzk1OTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDVjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI0NTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDBkMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIyOGJmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmEwYzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYWMwYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiYjhiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkyOWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzM2RkMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhZWIzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTNjY2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODMxOTEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGZiY2Q5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI0NDI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA5MTZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmN2M5ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhNzExYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ZmMTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzRmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNWRkMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhODk1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OThkNWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWQ3NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYjIxZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4N2QwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODZjNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZlMTg1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjBlODVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiN2E2YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiMWY0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmI2MjM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZjI2MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFlNDZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhZTQzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzA4N2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjMxMjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOTkxMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE5MTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNGU2ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyNTEwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjgwNmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NmNmYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzExNjUzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjljMWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNTY1ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmOTUxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODVkNTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWM3OTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjJlNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY1MjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTA5M2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYjA3YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YjcwZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFmZGE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTZmY2VjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWQ3Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1Mzg5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjQzMzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMDFiZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTFlMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdjZjY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Yzk5YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2YzAwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjI1MTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYzY3NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM1MmRlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM3Yzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNmEzZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkZDgxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2U2OTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiM2U4ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDI3NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzNGU3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmIzMzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjY5OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzNjhmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjA1M2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMDI5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdmMjRhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI5MzA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTY2NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkZGVkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTViMTg5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2NGFkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDA5YjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxNTk3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlOGFmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTFiYWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YTFhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1OWQ5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWFmZTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTJlOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2MTBmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjVmZjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NzU3OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWEwNzUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMGVjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDZkMmRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzdlNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTc2NzFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNWJiN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4NGU3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODA2OTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYzIxN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OWU1ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwZjYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTAyZTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNTk0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YjE1N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMTBlZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczZTcyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODg3MWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMjFlNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhlNDJhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWViNGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYzY1ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVlZDdmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFmYTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1N2E3MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0NTVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE2N2YyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTg2MmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGJjY2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyMGMzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTQ2ZDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZGQxODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1ZDE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTNhMWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZThkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyODgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmE2MTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZGNkYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiMGQ3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyMmRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3ZTA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NmU1OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4YTE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTVhMjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYzYzYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhZTcxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTVkMGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYWIwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViODkzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzUyMDc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNmM0ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjMyMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0MWQ5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZWUxN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzN2EzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjY0N2RlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZDJhNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4ZTMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODkyZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjhlMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0OTZmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWQzNzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZGNhZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMGRkYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlYzVkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMjIwNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3YjZmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDhiNGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNDYyMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1ZWU4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmQ5YTM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5M2RkOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVlOGZiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGYxMDc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwN2E0MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZjQ4MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5OGRiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGU0NmU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmVjOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZjU3ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmNDlhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2JjY2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZmExMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5OWM0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGI2MzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjAyNzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzY2U3Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzJlYWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYTUyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA2N2ZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjFmZWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNzQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYwODMyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjY4MDc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZGY3YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3YTdhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzRlMmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Y2I0MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Njg1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODhmODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4Mjc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNGY2NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1Y2NlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjE4YTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MzY2MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4MjMzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGNjNzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTVkYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4OWU0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjU5Y2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZWJjYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NzJjMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YTIwNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMmM4NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1YzU2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTlhMjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzUyZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiMjZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg0NGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTkwNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJjYTY3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODk4NWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkY2Q3ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU0ZTI0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZjU1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVkNjE0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDg0OGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZjBiMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3NzU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzIyYzJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YzYzNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmM1MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmOGM3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2U1NDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTEzOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDM5MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViM2NkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA2MWNkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTM3YTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyNzgxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzNhODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjN2FmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTRlMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3MTcyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTQyNzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YzlhYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxZDIyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODYxYWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YWVhZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkODhkODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkNmI1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMzJhMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmOWQ0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE4MWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYzNjZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMmU1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMzYjIxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDZmZTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NWFlOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1Y2RmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDg1NTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzI1MDQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNzZlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4NjlhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjQ3NDM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNmEyYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Y2NkMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjYjZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjc2MzA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ODgyZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxY2JjNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxNTU4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmUyODQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE1MDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MDY0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5YjVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjBmMjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTY3MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJmNzE0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMWIyZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZmY1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDZlYzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZmFiYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU0NjU1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NGU0ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI5MmUwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODEwOTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOGUxOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmMWFiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUzM2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTAyN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0YWE5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTYxYjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYmZhMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FiMmIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDUwYzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Q1NmQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTQ5MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDlmYTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5Mzg3ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MwNTQ1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVkMmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTZmY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhMjAwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNjhiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGJmM2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYjU2ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1YTE4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1YzNjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI0YmMzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmJkYjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZWJmNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBiMTI0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWNlNjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0M2YyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhYjkxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODIyZDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYjNhYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyOTJhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzExMzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjAzMGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzOGQ4MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTNhYTAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTU1MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU4NDFmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njg2ZjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNDQ1MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3N2JiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODc0ZDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNDk3Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYTJkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkODk4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRlYmFkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTc5ZDFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwYjdkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTViZDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMzg3ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhZjJmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGFlMzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOGZjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxMmFiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTQ3MzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjc5OWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzAzYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwNDdiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAiIG5hbWU9IklucHV0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAiIG5hbWU9Ik91dHB1dDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEiIG5hbWU9IklucHV0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEiIG5hbWU9Ik91dHB1dDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMSIgdHlwZT0idG5zOlBvcnRUeXBlMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIiIG5hbWU9IklucHV0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIiIG5hbWU9Ik91dHB1dDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMiIG5hbWU9IklucHV0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMiIG5hbWU9Ik91dHB1dDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQiIG5hbWU9IklucHV0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQiIG5hbWU9Ik91dHB1dDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNCIgdHlwZT0idG5zOlBvcnRUeXBlMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUiIG5hbWU9IklucHV0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUiIG5hbWU9Ik91dHB1dDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNSIgdHlwZT0idG5zOlBvcnRUeXBlMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYiIG5hbWU9IklucHV0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYiIG5hbWU9Ik91dHB1dDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNiIgdHlwZT0idG5zOlBvcnRUeXBlMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTciIG5hbWU9IklucHV0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTciIG5hbWU9Ik91dHB1dDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNyIgdHlwZT0idG5zOlBvcnRUeXBlMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgiIG5hbWU9IklucHV0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgiIG5hbWU9Ik91dHB1dDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOCIgdHlwZT0idG5zOlBvcnRUeXBlMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkiIG5hbWU9IklucHV0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkiIG5hbWU9Ik91dHB1dDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOSIgdHlwZT0idG5zOlBvcnRUeXBlMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAiIG5hbWU9IklucHV0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAiIG5hbWU9Ik91dHB1dDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEiIG5hbWU9IklucHV0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEiIG5hbWU9Ik91dHB1dDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIiIG5hbWU9IklucHV0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIiIG5hbWU9Ik91dHB1dDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMiIG5hbWU9IklucHV0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMiIG5hbWU9Ik91dHB1dDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQiIG5hbWU9IklucHV0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQiIG5hbWU9Ik91dHB1dDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUiIG5hbWU9IklucHV0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUiIG5hbWU9Ik91dHB1dDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYiIG5hbWU9IklucHV0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYiIG5hbWU9Ik91dHB1dDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjciIG5hbWU9IklucHV0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjciIG5hbWU9Ik91dHB1dDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgiIG5hbWU9IklucHV0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgiIG5hbWU9Ik91dHB1dDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkiIG5hbWU9IklucHV0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkiIG5hbWU9Ik91dHB1dDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAiIG5hbWU9IklucHV0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAiIG5hbWU9Ik91dHB1dDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEiIG5hbWU9IklucHV0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEiIG5hbWU9Ik91dHB1dDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMSIgdHlwZT0idG5zOlBvcnRUeXBlMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIiIG5hbWU9IklucHV0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIiIG5hbWU9Ik91dHB1dDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMiIG5hbWU9IklucHV0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMiIG5hbWU9Ik91dHB1dDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQiIG5hbWU9IklucHV0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQiIG5hbWU9Ik91dHB1dDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNCIgdHlwZT0idG5zOlBvcnRUeXBlMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUiIG5hbWU9IklucHV0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUiIG5hbWU9Ik91dHB1dDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNSIgdHlwZT0idG5zOlBvcnRUeXBlMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYiIG5hbWU9IklucHV0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYiIG5hbWU9Ik91dHB1dDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNiIgdHlwZT0idG5zOlBvcnRUeXBlMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzciIG5hbWU9IklucHV0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzciIG5hbWU9Ik91dHB1dDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNyIgdHlwZT0idG5zOlBvcnRUeXBlMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgiIG5hbWU9IklucHV0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgiIG5hbWU9Ik91dHB1dDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOCIgdHlwZT0idG5zOlBvcnRUeXBlMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkiIG5hbWU9IklucHV0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkiIG5hbWU9Ik91dHB1dDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOSIgdHlwZT0idG5zOlBvcnRUeXBlMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAiIG5hbWU9IklucHV0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAiIG5hbWU9Ik91dHB1dDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEiIG5hbWU9IklucHV0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEiIG5hbWU9Ik91dHB1dDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIiIG5hbWU9IklucHV0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIiIG5hbWU9Ik91dHB1dDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMiIG5hbWU9IklucHV0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMiIG5hbWU9Ik91dHB1dDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQiIG5hbWU9IklucHV0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQiIG5hbWU9Ik91dHB1dDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUiIG5hbWU9IklucHV0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUiIG5hbWU9Ik91dHB1dDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYiIG5hbWU9IklucHV0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYiIG5hbWU9Ik91dHB1dDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDciIG5hbWU9IklucHV0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDciIG5hbWU9Ik91dHB1dDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgiIG5hbWU9IklucHV0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgiIG5hbWU9Ik91dHB1dDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkiIG5hbWU9IklucHV0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkiIG5hbWU9Ik91dHB1dDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAiIG5hbWU9IklucHV0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAiIG5hbWU9Ik91dHB1dDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEiIG5hbWU9IklucHV0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEiIG5hbWU9Ik91dHB1dDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIiIG5hbWU9IklucHV0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIiIG5hbWU9Ik91dHB1dDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMiIG5hbWU9IklucHV0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMiIG5hbWU9Ik91dHB1dDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQiIG5hbWU9IklucHV0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQiIG5hbWU9Ik91dHB1dDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUiIG5hbWU9IklucHV0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUiIG5hbWU9Ik91dHB1dDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYiIG5hbWU9IklucHV0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYiIG5hbWU9Ik91dHB1dDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTciIG5hbWU9IklucHV0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTciIG5hbWU9Ik91dHB1dDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgiIG5hbWU9IklucHV0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgiIG5hbWU9Ik91dHB1dDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkiIG5hbWU9IklucHV0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkiIG5hbWU9Ik91dHB1dDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAiIG5hbWU9IklucHV0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAiIG5hbWU9Ik91dHB1dDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEiIG5hbWU9IklucHV0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEiIG5hbWU9Ik91dHB1dDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIiIG5hbWU9IklucHV0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIiIG5hbWU9Ik91dHB1dDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMiIG5hbWU9IklucHV0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMiIG5hbWU9Ik91dHB1dDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQiIG5hbWU9IklucHV0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQiIG5hbWU9Ik91dHB1dDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUiIG5hbWU9IklucHV0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUiIG5hbWU9Ik91dHB1dDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYiIG5hbWU9IklucHV0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYiIG5hbWU9Ik91dHB1dDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjciIG5hbWU9IklucHV0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjciIG5hbWU9Ik91dHB1dDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgiIG5hbWU9IklucHV0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgiIG5hbWU9Ik91dHB1dDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkiIG5hbWU9IklucHV0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkiIG5hbWU9Ik91dHB1dDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAiIG5hbWU9IklucHV0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAiIG5hbWU9Ik91dHB1dDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEiIG5hbWU9IklucHV0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEiIG5hbWU9Ik91dHB1dDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIiIG5hbWU9IklucHV0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIiIG5hbWU9Ik91dHB1dDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMiIG5hbWU9IklucHV0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMiIG5hbWU9Ik91dHB1dDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQiIG5hbWU9IklucHV0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQiIG5hbWU9Ik91dHB1dDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUiIG5hbWU9IklucHV0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUiIG5hbWU9Ik91dHB1dDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYiIG5hbWU9IklucHV0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYiIG5hbWU9Ik91dHB1dDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzciIG5hbWU9IklucHV0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzciIG5hbWU9Ik91dHB1dDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgiIG5hbWU9IklucHV0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgiIG5hbWU9Ik91dHB1dDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkiIG5hbWU9IklucHV0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkiIG5hbWU9Ik91dHB1dDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAiIG5hbWU9IklucHV0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAiIG5hbWU9Ik91dHB1dDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MCIgdHlwZT0idG5zOlBvcnRUeXBlODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEiIG5hbWU9IklucHV0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEiIG5hbWU9Ik91dHB1dDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MSIgdHlwZT0idG5zOlBvcnRUeXBlODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIiIG5hbWU9IklucHV0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIiIG5hbWU9Ik91dHB1dDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MiIgdHlwZT0idG5zOlBvcnRUeXBlODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMiIG5hbWU9IklucHV0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMiIG5hbWU9Ik91dHB1dDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MyIgdHlwZT0idG5zOlBvcnRUeXBlODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQiIG5hbWU9IklucHV0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQiIG5hbWU9Ik91dHB1dDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NCIgdHlwZT0idG5zOlBvcnRUeXBlODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUiIG5hbWU9IklucHV0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUiIG5hbWU9Ik91dHB1dDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NSIgdHlwZT0idG5zOlBvcnRUeXBlODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYiIG5hbWU9IklucHV0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYiIG5hbWU9Ik91dHB1dDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NiIgdHlwZT0idG5zOlBvcnRUeXBlODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODciIG5hbWU9IklucHV0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODciIG5hbWU9Ik91dHB1dDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NyIgdHlwZT0idG5zOlBvcnRUeXBlODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgiIG5hbWU9IklucHV0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgiIG5hbWU9Ik91dHB1dDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OCIgdHlwZT0idG5zOlBvcnRUeXBlODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkiIG5hbWU9IklucHV0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkiIG5hbWU9Ik91dHB1dDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OSIgdHlwZT0idG5zOlBvcnRUeXBlODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAiIG5hbWU9IklucHV0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAiIG5hbWU9Ik91dHB1dDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEiIG5hbWU9IklucHV0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEiIG5hbWU9Ik91dHB1dDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIiIG5hbWU9IklucHV0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIiIG5hbWU9Ik91dHB1dDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMiIG5hbWU9IklucHV0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMiIG5hbWU9Ik91dHB1dDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQiIG5hbWU9IklucHV0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQiIG5hbWU9Ik91dHB1dDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUiIG5hbWU9IklucHV0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUiIG5hbWU9Ik91dHB1dDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYiIG5hbWU9IklucHV0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYiIG5hbWU9Ik91dHB1dDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTciIG5hbWU9IklucHV0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTciIG5hbWU9Ik91dHB1dDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgiIG5hbWU9IklucHV0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgiIG5hbWU9Ik91dHB1dDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkiIG5hbWU9IklucHV0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkiIG5hbWU9Ik91dHB1dDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwOGEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249InNhbXBsZTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIGxvY2F0aW9uPSIuL3NhbXBsZTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEyYTJiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249InNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjNDJkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249InNhbXBsZTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuXHNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4ZGRlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249InNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249Ii5cc2FtcGxlNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODkwNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSJzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NmRlMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249InNhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODU3MjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0ic2FtcGxlOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWNlZmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiBsb2NhdGlvbj0ic2FtcGxlOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YThhZmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSJzYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSIuL3NhbXBsZTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii5cc2FtcGxlNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjM0ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSJzYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0iLi9zYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYWJmMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSJzYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYjM4MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSJzYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjY4NTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249Ii4vc2FtcGxlMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OGViYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSJzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YjAzMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSJzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuXHNhbXBsZTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmIwODExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0ic2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc0MTAwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249InNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEwYzE3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgbG9jYXRpb249InNhbXBsZTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIGxvY2F0aW9uPSIuL3NhbXBsZTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuXHNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxYmFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249InNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlOTU3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlN2I1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyMzg5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249InNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U0ZWJlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249InNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWY3MzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0ic2FtcGxlNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLi9zYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjhlYWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0ic2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3Yjg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249InNhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii5cc2FtcGxlMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZjM4YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249InNhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249Ii4vc2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgbG9jYXRpb249Ii5cc2FtcGxlNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzdkMWM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0ic2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249Ii4vc2FtcGxlMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249Ii5cc2FtcGxlNjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTg5N2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0ic2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii4vc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii5cc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTIxZmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0ic2FtcGxlNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii4vc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii5cc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTg2N2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLi9zYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSIuXHNhbXBsZTc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkZWE1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249InNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii5cc2FtcGxlNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YTc2OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249InNhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249Ii4vc2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249Ii5cc2FtcGxlNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGU3YTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiBsb2NhdGlvbj0ic2FtcGxlNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMzQ5ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSJzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzMWViMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249InNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA2MjhiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjMzYjM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiBsb2NhdGlvbj0ic2FtcGxlODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjZjMzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiBsb2NhdGlvbj0ic2FtcGxlMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249Ii4vc2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODczMmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWVjYTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249Ii4vc2FtcGxlMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249Ii5cc2FtcGxlODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODY3OTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0ic2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgbG9jYXRpb249Ii4vc2FtcGxlNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii5cc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTY0ZGEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0ic2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTY3M2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiBsb2NhdGlvbj0ic2FtcGxlNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249Ii4vc2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii5cc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTBjNzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YTYwYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSJzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiBsb2NhdGlvbj0iLlxzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI1MTYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249InNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSIuL3NhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhZmM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249InNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5Mjc4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249InNhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIGxvY2F0aW9uPSIuXHNhbXBsZTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhOTNhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZjZGI5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgbG9jYXRpb249InNhbXBsZTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIGxvY2F0aW9uPSIuXHNhbXBsZTUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzOTI0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgbG9jYXRpb249InNhbXBsZTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSIuL3NhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZTljMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSJzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2ZiZDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiBsb2NhdGlvbj0ic2FtcGxlOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzE3YTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0ic2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLi9zYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSIuXHNhbXBsZTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkNGE3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTdjMmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0ic2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZjkyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSJzYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiBsb2NhdGlvbj0iLlxzYW1wbGU0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOGE4NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIGxvY2F0aW9uPSJzYW1wbGUxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmRmNGFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiBsb2NhdGlvbj0ic2FtcGxlMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249Ii5cc2FtcGxlMjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDFmMjc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0ic2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLi9zYW1wbGU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhMjI3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgbG9jYXRpb249InNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSIuL3NhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhMDk3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0ic2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLlxzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNjEzMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSJzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiBsb2NhdGlvbj0iLi9zYW1wbGUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTgwNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249InNhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii5cc2FtcGxlODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDg2MjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuL3NhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwODdkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSJzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0iLlxzYW1wbGU3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2FjZTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0ic2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZjljNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSJzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNGI2ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSJzYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMTMwMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIGxvY2F0aW9uPSJzYW1wbGU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249Ii5cc2FtcGxlNTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzhmNjYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0ic2FtcGxlMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249Ii4vc2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGI5OTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiBsb2NhdGlvbj0ic2FtcGxlNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgbG9jYXRpb249Ii4vc2FtcGxlNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii5cc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjhjMjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0ic2FtcGxlMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiNjNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249InNhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSIuL3NhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmYWUzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MGM0MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSJzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0iLi9zYW1wbGU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLlxzYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjZlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249InNhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii4vc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyNTY0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgbG9jYXRpb249InNhbXBsZTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSIuL3NhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIGxvY2F0aW9uPSIuXHNhbXBsZTg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzY3ODAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSJzYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSIuL3NhbXBsZTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuXHNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM5OThkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249InNhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOGFkNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIGxvY2F0aW9uPSJzYW1wbGU5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgbG9jYXRpb249Ii5cc2FtcGxlOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzljZjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0ic2FtcGxlNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii5cc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAyMzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0ic2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii4vc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTJhOGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0ic2FtcGxlMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii4vc2FtcGxlODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249Ii5cc2FtcGxlNjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjM5Yzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0ic2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgbG9jYXRpb249Ii5cc2FtcGxlODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODRiM2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0ic2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdkMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0ic2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDliMWM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIGxvY2F0aW9uPSIuXHNhbXBsZTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYzYyZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSJzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjN2NkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249InNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSIuXHNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2YTYyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgbG9jYXRpb249InNhbXBsZTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSIuL3NhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxZjAxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249InNhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuL3NhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxYjI5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249InNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSIuXHNhbXBsZTk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyZmUxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249InNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdjNTA3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249InNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuL3NhbXBsZTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhODNkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249InNhbXBsZTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSIuXHNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1NmFhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249InNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjYmU0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249InNhbXBsZTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIGxvY2F0aW9uPSIuXHNhbXBsZTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViNDM4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249InNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii5cc2FtcGxlMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDA5ZmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2VlYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWIzOWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2FlZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkZmIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjc3MTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NTdhMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUzODBlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjZiMTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YTY5MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwMWE5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQxODUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA0ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxYjEyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjliNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjRkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhZGJmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTZiNzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTYzMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0M2FmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTUzMDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTI4MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0NDY2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5MWNjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmUzNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4MzI1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFmMTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZWQzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNjY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzU1Nzg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlY2QxZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlNDFlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWVjMGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTA1ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGMwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTA4OWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTczNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MDQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzliNDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzA1MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzNDk1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQwN2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYzEwZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExNDM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOThmZjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4ODEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWUyYTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTI1ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE1MTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDBmNzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYWZjNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzYjMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQwNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZTUxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU4YjU1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyMmQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NjYwMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxYTRkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTkwYTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNzcyZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1NGU5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjY4MmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNDAwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhiOWU2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWIzMDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDMxM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjBhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTk1MDJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMzcwZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZjM0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQ2ZGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MDM1ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhNWY5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGY1YmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMWY2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5N2Q4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg3M2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcxYjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhODJlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM2YmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYWRkNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllYzk4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2VkNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDkyN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExZDA3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTdiMzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzM2RjMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmMjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzg1MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwZTQzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDQzOGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZWRlMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjYzE2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjlhN2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzY0ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjZDM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTY0NmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNGJhMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkNDFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMTJkYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWIzMjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFkMTQ0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTg4ZmYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmQ4ZDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGI5Yjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTM2MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZjQ1ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2YzEyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzUwYjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMTBjYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlNjg3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWMwNWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYmIwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjVjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZTZiY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU1ZWFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcwZjRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTAwMjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2Yjg4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGVhMGI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MzAzZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNiNTc2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY4YWFlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzIyODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhODE2NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyNmExOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFhNGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NjFhYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1MjFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWVkYmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MTBkNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1NjE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1MTY3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTE1ZDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU3M2NjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzgwYmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmFmN2E2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGMwNjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTQzYjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzlmMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1MDg0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkNWRjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjg2MWZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNGI1NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzc4MmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk5YTVlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzA2YTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNmNhNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1ZDIxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5OWExNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM5YjM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYTdkYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwMDY3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWZmNDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NGIyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjMDMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTdjZDNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMmEyODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MjIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhjMmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZGE4MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzZjNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzMxMDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTIxZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwYWQxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWJmODExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4YjUzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZGU4ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYzYxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyZmQyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0MzA5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTkzNGJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWMwZTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NzE4MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3NTI2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTYwNjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Y2ZkNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlMWQ1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTdiMDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzAyZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MmMzZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ0MDFlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzRiZjRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMTU3ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzOTQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQwNGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MGUwNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0NDFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQxYWMzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjg4ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MGE5YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyMTcyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwYTIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2ZjMjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjEwMzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YTk0M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZTQxNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFiMzQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjOWU1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWUzM2U5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmM2ZWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkY2RiOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5MWViZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDE3OTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODBiODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmZTgzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2RjMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMWVhYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZTU5ZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjViY2YyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJkZTQzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NmI5Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmNGE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFkY2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGI0ZDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJkYTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjAyZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjOGIyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODBjMTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMWQzODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViMTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE3N2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2FmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzNTA3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWViZDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ODc3ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1ZTg0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWM4NGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Mjc3NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcyNDM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFlNmIxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc4NjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhYjJiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMWIyNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3YWRiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzk4MDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NDg3NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMzE4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjg5OWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODQ3MDNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZDI4ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwODlhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDhjMDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMWMwNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzM2Y5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzAxZDkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhY2I0ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZjgwNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ3NWZiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWI4YWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTExLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOGIzYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiZTUyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmFkYWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTczZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YTA4ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTVjN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTk4MGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZmM5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjYWFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmJkNGJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTM4OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzNTRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTUxZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMTYxNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY4NTAzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGNjNjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZWU5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZmMGYyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTYxYzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOWRiODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDc2N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1OWE2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQ0ZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwODQ3ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmMWRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTFmNWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUxY2VhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTk0MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYxNGM2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5ZTE2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE0NzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZGFlY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiN2M3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGUyZTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDM1ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwYzNjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxYjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2UwNjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmI0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YzkxN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhhZDQwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmZkZTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjUyMzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTkzOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3MDY4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTE4NWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YTVkNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZDE1MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBLQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTBkYmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMzY5OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YzMyOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0ic2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuL3NhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YzkyNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0ic2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMjFlOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0ic2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSIuL3NhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZGMxYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYWUzMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0ic2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Y2JlMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0ic2FtcGxlNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLlxzYW1wbGUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MzFmZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0ic2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZTJlODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0ic2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YThmNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiBsb2NhdGlvbj0iLlxzYW1wbGUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDlmZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzZWVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA0ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTFjYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4YzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MjJkMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MGE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcxYjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmY2RhMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTZhYzkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2MGNkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0YWZjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWUxYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGFlZTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDAyNjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDI2MTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3NWFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc1OWZhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0YzViNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3MjgxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM0N2E1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDFjMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MDRlM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGJiNTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4ZWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUyODFiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA5NzI0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkY2JmMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NmNmNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGVlODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTU5MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2RlZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMmI2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyZDVhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMWFkZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmYyY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTZkMjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjZDRmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyM2MzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJlMjk0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3MDE3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiYTdmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxYzQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU3YWM5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhZjMzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0MGYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhNzFiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5NmM0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZGFkZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTYyZmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NGE3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTFmM2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTU0YjAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTQzZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmNlNWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzc4MWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzE1MDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTA2NzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWQ1Njk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWYzYzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzNTZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkYmY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcwNDRhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViOTk5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjYjFlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0YzQyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4YjFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMjc5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiYzJkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmY2OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNzg4YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1Nzc0ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2Q4ZmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQxMzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JlYWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjJlNzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiOTU3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiYjExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkM2E5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIyOTU0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMWM4MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYTdmYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZTIwNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NWFkYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzI5MmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzZkYTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZlZWQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0NzBlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxNDhjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDljNGY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1OGVhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyMTU2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ0NTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2I3ZDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTRkYzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1MDliNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMDg3ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2MzYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNzExZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzMwODk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkYzUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjZjVjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM3YTFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhOGY5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhYzg1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1MDZiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ZTBkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzMDQ1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZDc1MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjliNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjkzMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM1OGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJlZjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWQ4YzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzM3M2U1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3N2E1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA3OTI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzVkYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmRhZDM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFLQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJhN2M4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UiIG5hbWU9IklucHV0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZSIgbmFtZT0iT3V0cHV0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmciIHR5cGU9InRuczpQb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQiIGJpbmRpbmc9InRuczpCaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMU1CLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFNQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzZiYzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMU1CLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMCIgbmFtZT0iSW5wdXQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTAiIG5hbWU9Ik91dHB1dDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzAiIHR5cGU9InRuczpQb3J0VHlwZTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MCIgYmluZGluZz0idG5zOkJpbmRpbmcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEiIG5hbWU9IklucHV0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxIiBuYW1lPSJPdXRwdXQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyIiBuYW1lPSJJbnB1dDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMiIgbmFtZT0iT3V0cHV0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMiIgdHlwZT0idG5zOlBvcnRUeXBlMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMyIgbmFtZT0iSW5wdXQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMiIG5hbWU9Ik91dHB1dDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMiIHR5cGU9InRuczpQb3J0VHlwZTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MyIgYmluZGluZz0idG5zOkJpbmRpbmczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQiIG5hbWU9IklucHV0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0IiBuYW1lPSJPdXRwdXQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1IiBuYW1lPSJJbnB1dDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNSIgbmFtZT0iT3V0cHV0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNSIgdHlwZT0idG5zOlBvcnRUeXBlNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNiIgbmFtZT0iSW5wdXQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYiIG5hbWU9Ik91dHB1dDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYiIHR5cGU9InRuczpQb3J0VHlwZTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTciIG5hbWU9IklucHV0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3IiBuYW1lPSJPdXRwdXQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDciIGJpbmRpbmc9InRuczpCaW5kaW5nNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4IiBuYW1lPSJJbnB1dDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOCIgbmFtZT0iT3V0cHV0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOCIgdHlwZT0idG5zOlBvcnRUeXBlOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOSIgbmFtZT0iSW5wdXQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkiIG5hbWU9Ik91dHB1dDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkiIHR5cGU9InRuczpQb3J0VHlwZTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwIiBuYW1lPSJJbnB1dDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwIiBuYW1lPSJPdXRwdXQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAiIHR5cGU9InRuczpQb3J0VHlwZTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExIiBuYW1lPSJJbnB1dDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExIiBuYW1lPSJPdXRwdXQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEiIHR5cGU9InRuczpQb3J0VHlwZTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyIiBuYW1lPSJJbnB1dDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyIiBuYW1lPSJPdXRwdXQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIiIHR5cGU9InRuczpQb3J0VHlwZTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzIiBuYW1lPSJJbnB1dDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzIiBuYW1lPSJPdXRwdXQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMiIHR5cGU9InRuczpQb3J0VHlwZTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0IiBuYW1lPSJJbnB1dDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0IiBuYW1lPSJPdXRwdXQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQiIHR5cGU9InRuczpQb3J0VHlwZTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1IiBuYW1lPSJJbnB1dDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1IiBuYW1lPSJPdXRwdXQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUiIHR5cGU9InRuczpQb3J0VHlwZTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2IiBuYW1lPSJJbnB1dDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2IiBuYW1lPSJPdXRwdXQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYiIHR5cGU9InRuczpQb3J0VHlwZTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3IiBuYW1lPSJJbnB1dDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3IiBuYW1lPSJPdXRwdXQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTciIHR5cGU9InRuczpQb3J0VHlwZTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4IiBuYW1lPSJJbnB1dDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4IiBuYW1lPSJPdXRwdXQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgiIHR5cGU9InRuczpQb3J0VHlwZTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5IiBuYW1lPSJJbnB1dDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5IiBuYW1lPSJPdXRwdXQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkiIHR5cGU9InRuczpQb3J0VHlwZTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwIiBuYW1lPSJJbnB1dDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwIiBuYW1lPSJPdXRwdXQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAiIHR5cGU9InRuczpQb3J0VHlwZTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxIiBuYW1lPSJJbnB1dDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxIiBuYW1lPSJPdXRwdXQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEiIHR5cGU9InRuczpQb3J0VHlwZTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyIiBuYW1lPSJJbnB1dDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyIiBuYW1lPSJPdXRwdXQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzIiBuYW1lPSJJbnB1dDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzIiBuYW1lPSJPdXRwdXQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMiIHR5cGU9InRuczpQb3J0VHlwZTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0IiBuYW1lPSJJbnB1dDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0IiBuYW1lPSJPdXRwdXQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQiIHR5cGU9InRuczpQb3J0VHlwZTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1IiBuYW1lPSJJbnB1dDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1IiBuYW1lPSJPdXRwdXQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUiIHR5cGU9InRuczpQb3J0VHlwZTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2IiBuYW1lPSJJbnB1dDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2IiBuYW1lPSJPdXRwdXQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYiIHR5cGU9InRuczpQb3J0VHlwZTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3IiBuYW1lPSJJbnB1dDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3IiBuYW1lPSJPdXRwdXQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjciIHR5cGU9InRuczpQb3J0VHlwZTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4IiBuYW1lPSJJbnB1dDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4IiBuYW1lPSJPdXRwdXQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgiIHR5cGU9InRuczpQb3J0VHlwZTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5IiBuYW1lPSJJbnB1dDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5IiBuYW1lPSJPdXRwdXQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkiIHR5cGU9InRuczpQb3J0VHlwZTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwIiBuYW1lPSJJbnB1dDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwIiBuYW1lPSJPdXRwdXQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAiIHR5cGU9InRuczpQb3J0VHlwZTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxIiBuYW1lPSJJbnB1dDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxIiBuYW1lPSJPdXRwdXQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEiIHR5cGU9InRuczpQb3J0VHlwZTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyIiBuYW1lPSJJbnB1dDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyIiBuYW1lPSJPdXRwdXQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIiIHR5cGU9InRuczpQb3J0VHlwZTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzIiBuYW1lPSJJbnB1dDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzIiBuYW1lPSJPdXRwdXQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0IiBuYW1lPSJJbnB1dDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0IiBuYW1lPSJPdXRwdXQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQiIHR5cGU9InRuczpQb3J0VHlwZTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1IiBuYW1lPSJJbnB1dDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1IiBuYW1lPSJPdXRwdXQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUiIHR5cGU9InRuczpQb3J0VHlwZTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2IiBuYW1lPSJJbnB1dDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2IiBuYW1lPSJPdXRwdXQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYiIHR5cGU9InRuczpQb3J0VHlwZTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3IiBuYW1lPSJJbnB1dDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3IiBuYW1lPSJPdXRwdXQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzciIHR5cGU9InRuczpQb3J0VHlwZTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4IiBuYW1lPSJJbnB1dDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4IiBuYW1lPSJPdXRwdXQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgiIHR5cGU9InRuczpQb3J0VHlwZTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5IiBuYW1lPSJJbnB1dDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5IiBuYW1lPSJPdXRwdXQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkiIHR5cGU9InRuczpQb3J0VHlwZTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwIiBuYW1lPSJJbnB1dDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwIiBuYW1lPSJPdXRwdXQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAiIHR5cGU9InRuczpQb3J0VHlwZTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxIiBuYW1lPSJJbnB1dDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxIiBuYW1lPSJPdXRwdXQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEiIHR5cGU9InRuczpQb3J0VHlwZTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyIiBuYW1lPSJJbnB1dDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyIiBuYW1lPSJPdXRwdXQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIiIHR5cGU9InRuczpQb3J0VHlwZTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzIiBuYW1lPSJJbnB1dDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzIiBuYW1lPSJPdXRwdXQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMiIHR5cGU9InRuczpQb3J0VHlwZTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0IiBuYW1lPSJJbnB1dDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0IiBuYW1lPSJPdXRwdXQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1IiBuYW1lPSJJbnB1dDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1IiBuYW1lPSJPdXRwdXQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUiIHR5cGU9InRuczpQb3J0VHlwZTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2IiBuYW1lPSJJbnB1dDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2IiBuYW1lPSJPdXRwdXQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYiIHR5cGU9InRuczpQb3J0VHlwZTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3IiBuYW1lPSJJbnB1dDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3IiBuYW1lPSJPdXRwdXQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDciIHR5cGU9InRuczpQb3J0VHlwZTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4IiBuYW1lPSJJbnB1dDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4IiBuYW1lPSJPdXRwdXQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgiIHR5cGU9InRuczpQb3J0VHlwZTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5IiBuYW1lPSJJbnB1dDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5IiBuYW1lPSJPdXRwdXQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkiIHR5cGU9InRuczpQb3J0VHlwZTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwIiBuYW1lPSJJbnB1dDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwIiBuYW1lPSJPdXRwdXQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAiIHR5cGU9InRuczpQb3J0VHlwZTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxIiBuYW1lPSJJbnB1dDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxIiBuYW1lPSJPdXRwdXQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEiIHR5cGU9InRuczpQb3J0VHlwZTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyIiBuYW1lPSJJbnB1dDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyIiBuYW1lPSJPdXRwdXQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIiIHR5cGU9InRuczpQb3J0VHlwZTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzIiBuYW1lPSJJbnB1dDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzIiBuYW1lPSJPdXRwdXQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMiIHR5cGU9InRuczpQb3J0VHlwZTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0IiBuYW1lPSJJbnB1dDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0IiBuYW1lPSJPdXRwdXQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQiIHR5cGU9InRuczpQb3J0VHlwZTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1IiBuYW1lPSJJbnB1dDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1IiBuYW1lPSJPdXRwdXQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUiIHR5cGU9InRuczpQb3J0VHlwZTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2IiBuYW1lPSJJbnB1dDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2IiBuYW1lPSJPdXRwdXQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYiIHR5cGU9InRuczpQb3J0VHlwZTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3IiBuYW1lPSJJbnB1dDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3IiBuYW1lPSJPdXRwdXQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTciIHR5cGU9InRuczpQb3J0VHlwZTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4IiBuYW1lPSJJbnB1dDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4IiBuYW1lPSJPdXRwdXQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgiIHR5cGU9InRuczpQb3J0VHlwZTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5IiBuYW1lPSJJbnB1dDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5IiBuYW1lPSJPdXRwdXQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkiIHR5cGU9InRuczpQb3J0VHlwZTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwIiBuYW1lPSJJbnB1dDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwIiBuYW1lPSJPdXRwdXQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAiIHR5cGU9InRuczpQb3J0VHlwZTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxIiBuYW1lPSJJbnB1dDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxIiBuYW1lPSJPdXRwdXQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEiIHR5cGU9InRuczpQb3J0VHlwZTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyIiBuYW1lPSJJbnB1dDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyIiBuYW1lPSJPdXRwdXQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIiIHR5cGU9InRuczpQb3J0VHlwZTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzIiBuYW1lPSJJbnB1dDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzIiBuYW1lPSJPdXRwdXQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMiIHR5cGU9InRuczpQb3J0VHlwZTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0IiBuYW1lPSJJbnB1dDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0IiBuYW1lPSJPdXRwdXQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQiIHR5cGU9InRuczpQb3J0VHlwZTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1IiBuYW1lPSJJbnB1dDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1IiBuYW1lPSJPdXRwdXQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUiIHR5cGU9InRuczpQb3J0VHlwZTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2IiBuYW1lPSJJbnB1dDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2IiBuYW1lPSJPdXRwdXQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYiIHR5cGU9InRuczpQb3J0VHlwZTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3IiBuYW1lPSJJbnB1dDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3IiBuYW1lPSJPdXRwdXQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjciIHR5cGU9InRuczpQb3J0VHlwZTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4IiBuYW1lPSJJbnB1dDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4IiBuYW1lPSJPdXRwdXQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgiIHR5cGU9InRuczpQb3J0VHlwZTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5IiBuYW1lPSJJbnB1dDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5IiBuYW1lPSJPdXRwdXQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkiIHR5cGU9InRuczpQb3J0VHlwZTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwIiBuYW1lPSJJbnB1dDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwIiBuYW1lPSJPdXRwdXQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAiIHR5cGU9InRuczpQb3J0VHlwZTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxIiBuYW1lPSJJbnB1dDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxIiBuYW1lPSJPdXRwdXQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEiIHR5cGU9InRuczpQb3J0VHlwZTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyIiBuYW1lPSJJbnB1dDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyIiBuYW1lPSJPdXRwdXQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIiIHR5cGU9InRuczpQb3J0VHlwZTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczIiBuYW1lPSJJbnB1dDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczIiBuYW1lPSJPdXRwdXQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMiIHR5cGU9InRuczpQb3J0VHlwZTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0IiBuYW1lPSJJbnB1dDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0IiBuYW1lPSJPdXRwdXQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQiIHR5cGU9InRuczpQb3J0VHlwZTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1IiBuYW1lPSJJbnB1dDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1IiBuYW1lPSJPdXRwdXQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUiIHR5cGU9InRuczpQb3J0VHlwZTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2IiBuYW1lPSJJbnB1dDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2IiBuYW1lPSJPdXRwdXQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYiIHR5cGU9InRuczpQb3J0VHlwZTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3IiBuYW1lPSJJbnB1dDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3IiBuYW1lPSJPdXRwdXQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzciIHR5cGU9InRuczpQb3J0VHlwZTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4IiBuYW1lPSJJbnB1dDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4IiBuYW1lPSJPdXRwdXQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgiIHR5cGU9InRuczpQb3J0VHlwZTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5IiBuYW1lPSJJbnB1dDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5IiBuYW1lPSJPdXRwdXQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkiIHR5cGU9InRuczpQb3J0VHlwZTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwIiBuYW1lPSJJbnB1dDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwIiBuYW1lPSJPdXRwdXQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAiIHR5cGU9InRuczpQb3J0VHlwZTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxIiBuYW1lPSJJbnB1dDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxIiBuYW1lPSJPdXRwdXQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEiIHR5cGU9InRuczpQb3J0VHlwZTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyIiBuYW1lPSJJbnB1dDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyIiBuYW1lPSJPdXRwdXQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIiIHR5cGU9InRuczpQb3J0VHlwZTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzIiBuYW1lPSJJbnB1dDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzIiBuYW1lPSJPdXRwdXQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMiIHR5cGU9InRuczpQb3J0VHlwZTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0IiBuYW1lPSJJbnB1dDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0IiBuYW1lPSJPdXRwdXQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQiIHR5cGU9InRuczpQb3J0VHlwZTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1IiBuYW1lPSJJbnB1dDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1IiBuYW1lPSJPdXRwdXQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUiIHR5cGU9InRuczpQb3J0VHlwZTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2IiBuYW1lPSJJbnB1dDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2IiBuYW1lPSJPdXRwdXQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYiIHR5cGU9InRuczpQb3J0VHlwZTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3IiBuYW1lPSJJbnB1dDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3IiBuYW1lPSJPdXRwdXQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODciIHR5cGU9InRuczpQb3J0VHlwZTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4IiBuYW1lPSJJbnB1dDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4IiBuYW1lPSJPdXRwdXQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgiIHR5cGU9InRuczpQb3J0VHlwZTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5IiBuYW1lPSJJbnB1dDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5IiBuYW1lPSJPdXRwdXQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkiIHR5cGU9InRuczpQb3J0VHlwZTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwIiBuYW1lPSJJbnB1dDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwIiBuYW1lPSJPdXRwdXQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAiIHR5cGU9InRuczpQb3J0VHlwZTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxIiBuYW1lPSJJbnB1dDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxIiBuYW1lPSJPdXRwdXQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEiIHR5cGU9InRuczpQb3J0VHlwZTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyIiBuYW1lPSJJbnB1dDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyIiBuYW1lPSJPdXRwdXQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIiIHR5cGU9InRuczpQb3J0VHlwZTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzIiBuYW1lPSJJbnB1dDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzIiBuYW1lPSJPdXRwdXQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMiIHR5cGU9InRuczpQb3J0VHlwZTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0IiBuYW1lPSJJbnB1dDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0IiBuYW1lPSJPdXRwdXQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQiIHR5cGU9InRuczpQb3J0VHlwZTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1IiBuYW1lPSJJbnB1dDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1IiBuYW1lPSJPdXRwdXQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUiIHR5cGU9InRuczpQb3J0VHlwZTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2IiBuYW1lPSJJbnB1dDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2IiBuYW1lPSJPdXRwdXQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYiIHR5cGU9InRuczpQb3J0VHlwZTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3IiBuYW1lPSJJbnB1dDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3IiBuYW1lPSJPdXRwdXQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTciIHR5cGU9InRuczpQb3J0VHlwZTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4IiBuYW1lPSJJbnB1dDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4IiBuYW1lPSJPdXRwdXQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgiIHR5cGU9InRuczpQb3J0VHlwZTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5IiBuYW1lPSJJbnB1dDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5IiBuYW1lPSJPdXRwdXQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkiIHR5cGU9InRuczpQb3J0VHlwZTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMCIgbmFtZT0iSW5wdXQxMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAwIiBuYW1lPSJPdXRwdXQxMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAxIiBuYW1lPSJJbnB1dDEwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDEiIG5hbWU9Ik91dHB1dDEwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDIiIG5hbWU9IklucHV0MTAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMiIgbmFtZT0iT3V0cHV0MTAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDIiIHR5cGU9InRuczpQb3J0VHlwZTEwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMyIgbmFtZT0iSW5wdXQxMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAzIiBuYW1lPSJPdXRwdXQxMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMyIgdHlwZT0idG5zOlBvcnRUeXBlMTAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA0IiBuYW1lPSJJbnB1dDEwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDQiIG5hbWU9Ik91dHB1dDEwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDUiIG5hbWU9IklucHV0MTA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNSIgbmFtZT0iT3V0cHV0MTA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDUiIHR5cGU9InRuczpQb3J0VHlwZTEwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNiIgbmFtZT0iSW5wdXQxMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA2IiBuYW1lPSJPdXRwdXQxMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNiIgdHlwZT0idG5zOlBvcnRUeXBlMTA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA3IiBuYW1lPSJJbnB1dDEwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDciIG5hbWU9Ik91dHB1dDEwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDgiIG5hbWU9IklucHV0MTA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOCIgbmFtZT0iT3V0cHV0MTA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDgiIHR5cGU9InRuczpQb3J0VHlwZTEwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOSIgbmFtZT0iSW5wdXQxMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA5IiBuYW1lPSJPdXRwdXQxMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOSIgdHlwZT0idG5zOlBvcnRUeXBlMTA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEwIiBuYW1lPSJJbnB1dDExMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTAiIG5hbWU9Ik91dHB1dDExMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTEiIG5hbWU9IklucHV0MTExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMSIgbmFtZT0iT3V0cHV0MTExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTEiIHR5cGU9InRuczpQb3J0VHlwZTExMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMiIgbmFtZT0iSW5wdXQxMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEyIiBuYW1lPSJPdXRwdXQxMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMiIgdHlwZT0idG5zOlBvcnRUeXBlMTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEzIiBuYW1lPSJJbnB1dDExMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTMiIG5hbWU9Ik91dHB1dDExMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTQiIG5hbWU9IklucHV0MTE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNCIgbmFtZT0iT3V0cHV0MTE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTQiIHR5cGU9InRuczpQb3J0VHlwZTExNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNSIgbmFtZT0iSW5wdXQxMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE1IiBuYW1lPSJPdXRwdXQxMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNSIgdHlwZT0idG5zOlBvcnRUeXBlMTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE2IiBuYW1lPSJJbnB1dDExNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTYiIG5hbWU9Ik91dHB1dDExNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTciIG5hbWU9IklucHV0MTE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNyIgbmFtZT0iT3V0cHV0MTE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTciIHR5cGU9InRuczpQb3J0VHlwZTExNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOCIgbmFtZT0iSW5wdXQxMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE4IiBuYW1lPSJPdXRwdXQxMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOCIgdHlwZT0idG5zOlBvcnRUeXBlMTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE5IiBuYW1lPSJJbnB1dDExOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTkiIG5hbWU9Ik91dHB1dDExOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjAiIG5hbWU9IklucHV0MTIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMCIgbmFtZT0iT3V0cHV0MTIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjAiIHR5cGU9InRuczpQb3J0VHlwZTEyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMSIgbmFtZT0iSW5wdXQxMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIxIiBuYW1lPSJPdXRwdXQxMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMSIgdHlwZT0idG5zOlBvcnRUeXBlMTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIyIiBuYW1lPSJJbnB1dDEyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjIiIG5hbWU9Ik91dHB1dDEyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjMiIG5hbWU9IklucHV0MTIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMyIgbmFtZT0iT3V0cHV0MTIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjMiIHR5cGU9InRuczpQb3J0VHlwZTEyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNCIgbmFtZT0iSW5wdXQxMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI0IiBuYW1lPSJPdXRwdXQxMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNCIgdHlwZT0idG5zOlBvcnRUeXBlMTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI1IiBuYW1lPSJJbnB1dDEyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjUiIG5hbWU9Ik91dHB1dDEyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjYiIG5hbWU9IklucHV0MTI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNiIgbmFtZT0iT3V0cHV0MTI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjYiIHR5cGU9InRuczpQb3J0VHlwZTEyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNyIgbmFtZT0iSW5wdXQxMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI3IiBuYW1lPSJPdXRwdXQxMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNyIgdHlwZT0idG5zOlBvcnRUeXBlMTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI4IiBuYW1lPSJJbnB1dDEyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjgiIG5hbWU9Ik91dHB1dDEyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjkiIG5hbWU9IklucHV0MTI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOSIgbmFtZT0iT3V0cHV0MTI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjkiIHR5cGU9InRuczpQb3J0VHlwZTEyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMCIgbmFtZT0iSW5wdXQxMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMwIiBuYW1lPSJPdXRwdXQxMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMCIgdHlwZT0idG5zOlBvcnRUeXBlMTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMxIiBuYW1lPSJJbnB1dDEzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzEiIG5hbWU9Ik91dHB1dDEzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzIiIG5hbWU9IklucHV0MTMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMiIgbmFtZT0iT3V0cHV0MTMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzIiIHR5cGU9InRuczpQb3J0VHlwZTEzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMyIgbmFtZT0iSW5wdXQxMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMzIiBuYW1lPSJPdXRwdXQxMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM0IiBuYW1lPSJJbnB1dDEzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzQiIG5hbWU9Ik91dHB1dDEzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzUiIG5hbWU9IklucHV0MTM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNSIgbmFtZT0iT3V0cHV0MTM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzUiIHR5cGU9InRuczpQb3J0VHlwZTEzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNiIgbmFtZT0iSW5wdXQxMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM2IiBuYW1lPSJPdXRwdXQxMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNiIgdHlwZT0idG5zOlBvcnRUeXBlMTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM3IiBuYW1lPSJJbnB1dDEzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzciIG5hbWU9Ik91dHB1dDEzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzgiIG5hbWU9IklucHV0MTM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOCIgbmFtZT0iT3V0cHV0MTM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzgiIHR5cGU9InRuczpQb3J0VHlwZTEzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOSIgbmFtZT0iSW5wdXQxMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM5IiBuYW1lPSJPdXRwdXQxMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOSIgdHlwZT0idG5zOlBvcnRUeXBlMTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQwIiBuYW1lPSJJbnB1dDE0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDAiIG5hbWU9Ik91dHB1dDE0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDEiIG5hbWU9IklucHV0MTQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MSIgbmFtZT0iT3V0cHV0MTQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDEiIHR5cGU9InRuczpQb3J0VHlwZTE0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MiIgbmFtZT0iSW5wdXQxNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQyIiBuYW1lPSJPdXRwdXQxNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MiIgdHlwZT0idG5zOlBvcnRUeXBlMTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQzIiBuYW1lPSJJbnB1dDE0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDMiIG5hbWU9Ik91dHB1dDE0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDQiIG5hbWU9IklucHV0MTQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NCIgbmFtZT0iT3V0cHV0MTQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDQiIHR5cGU9InRuczpQb3J0VHlwZTE0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NSIgbmFtZT0iSW5wdXQxNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ1IiBuYW1lPSJPdXRwdXQxNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ2IiBuYW1lPSJJbnB1dDE0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDYiIG5hbWU9Ik91dHB1dDE0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDciIG5hbWU9IklucHV0MTQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NyIgbmFtZT0iT3V0cHV0MTQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDciIHR5cGU9InRuczpQb3J0VHlwZTE0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OCIgbmFtZT0iSW5wdXQxNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ4IiBuYW1lPSJPdXRwdXQxNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ5IiBuYW1lPSJJbnB1dDE0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDkiIG5hbWU9Ik91dHB1dDE0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTAiIG5hbWU9IklucHV0MTUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MCIgbmFtZT0iT3V0cHV0MTUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTAiIHR5cGU9InRuczpQb3J0VHlwZTE1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MSIgbmFtZT0iSW5wdXQxNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUxIiBuYW1lPSJPdXRwdXQxNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MSIgdHlwZT0idG5zOlBvcnRUeXBlMTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUyIiBuYW1lPSJJbnB1dDE1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTIiIG5hbWU9Ik91dHB1dDE1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTMiIG5hbWU9IklucHV0MTUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MyIgbmFtZT0iT3V0cHV0MTUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTMiIHR5cGU9InRuczpQb3J0VHlwZTE1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NCIgbmFtZT0iSW5wdXQxNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU0IiBuYW1lPSJPdXRwdXQxNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NCIgdHlwZT0idG5zOlBvcnRUeXBlMTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU1IiBuYW1lPSJJbnB1dDE1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTUiIG5hbWU9Ik91dHB1dDE1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTYiIG5hbWU9IklucHV0MTU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NiIgbmFtZT0iT3V0cHV0MTU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTYiIHR5cGU9InRuczpQb3J0VHlwZTE1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NyIgbmFtZT0iSW5wdXQxNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU3IiBuYW1lPSJPdXRwdXQxNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NyIgdHlwZT0idG5zOlBvcnRUeXBlMTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU4IiBuYW1lPSJJbnB1dDE1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTgiIG5hbWU9Ik91dHB1dDE1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTkiIG5hbWU9IklucHV0MTU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OSIgbmFtZT0iT3V0cHV0MTU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTkiIHR5cGU9InRuczpQb3J0VHlwZTE1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MCIgbmFtZT0iSW5wdXQxNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYwIiBuYW1lPSJPdXRwdXQxNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MCIgdHlwZT0idG5zOlBvcnRUeXBlMTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYxIiBuYW1lPSJJbnB1dDE2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjEiIG5hbWU9Ik91dHB1dDE2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjIiIG5hbWU9IklucHV0MTYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MiIgbmFtZT0iT3V0cHV0MTYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjIiIHR5cGU9InRuczpQb3J0VHlwZTE2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MyIgbmFtZT0iSW5wdXQxNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYzIiBuYW1lPSJPdXRwdXQxNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MyIgdHlwZT0idG5zOlBvcnRUeXBlMTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY0IiBuYW1lPSJJbnB1dDE2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjQiIG5hbWU9Ik91dHB1dDE2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjUiIG5hbWU9IklucHV0MTY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NSIgbmFtZT0iT3V0cHV0MTY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjUiIHR5cGU9InRuczpQb3J0VHlwZTE2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NiIgbmFtZT0iSW5wdXQxNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY2IiBuYW1lPSJPdXRwdXQxNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NiIgdHlwZT0idG5zOlBvcnRUeXBlMTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY3IiBuYW1lPSJJbnB1dDE2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjciIG5hbWU9Ik91dHB1dDE2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjgiIG5hbWU9IklucHV0MTY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OCIgbmFtZT0iT3V0cHV0MTY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjgiIHR5cGU9InRuczpQb3J0VHlwZTE2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OSIgbmFtZT0iSW5wdXQxNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY5IiBuYW1lPSJPdXRwdXQxNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OSIgdHlwZT0idG5zOlBvcnRUeXBlMTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcwIiBuYW1lPSJJbnB1dDE3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzAiIG5hbWU9Ik91dHB1dDE3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzEiIG5hbWU9IklucHV0MTcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MSIgbmFtZT0iT3V0cHV0MTcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzEiIHR5cGU9InRuczpQb3J0VHlwZTE3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MiIgbmFtZT0iSW5wdXQxNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcyIiBuYW1lPSJPdXRwdXQxNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MiIgdHlwZT0idG5zOlBvcnRUeXBlMTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTczIiBuYW1lPSJJbnB1dDE3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzMiIG5hbWU9Ik91dHB1dDE3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTczIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzQiIG5hbWU9IklucHV0MTc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NCIgbmFtZT0iT3V0cHV0MTc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzQiIHR5cGU9InRuczpQb3J0VHlwZTE3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NSIgbmFtZT0iSW5wdXQxNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc1IiBuYW1lPSJPdXRwdXQxNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NSIgdHlwZT0idG5zOlBvcnRUeXBlMTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc2IiBuYW1lPSJJbnB1dDE3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzYiIG5hbWU9Ik91dHB1dDE3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzciIG5hbWU9IklucHV0MTc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NyIgbmFtZT0iT3V0cHV0MTc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzciIHR5cGU9InRuczpQb3J0VHlwZTE3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OCIgbmFtZT0iSW5wdXQxNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc4IiBuYW1lPSJPdXRwdXQxNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OCIgdHlwZT0idG5zOlBvcnRUeXBlMTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc5IiBuYW1lPSJJbnB1dDE3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzkiIG5hbWU9Ik91dHB1dDE3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODAiIG5hbWU9IklucHV0MTgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MCIgbmFtZT0iT3V0cHV0MTgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODAiIHR5cGU9InRuczpQb3J0VHlwZTE4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MSIgbmFtZT0iSW5wdXQxODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgxIiBuYW1lPSJPdXRwdXQxODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MSIgdHlwZT0idG5zOlBvcnRUeXBlMTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MSIgYmluZGluZz0idG5zOkJpbmRpbmcxODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgyIiBuYW1lPSJJbnB1dDE4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODIiIG5hbWU9Ik91dHB1dDE4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODMiIG5hbWU9IklucHV0MTgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MyIgbmFtZT0iT3V0cHV0MTgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODMiIHR5cGU9InRuczpQb3J0VHlwZTE4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NCIgbmFtZT0iSW5wdXQxODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg0IiBuYW1lPSJPdXRwdXQxODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NCIgdHlwZT0idG5zOlBvcnRUeXBlMTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NCIgYmluZGluZz0idG5zOkJpbmRpbmcxODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg1IiBuYW1lPSJJbnB1dDE4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODUiIG5hbWU9Ik91dHB1dDE4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODYiIG5hbWU9IklucHV0MTg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NiIgbmFtZT0iT3V0cHV0MTg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODYiIHR5cGU9InRuczpQb3J0VHlwZTE4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NyIgbmFtZT0iSW5wdXQxODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg3IiBuYW1lPSJPdXRwdXQxODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NyIgdHlwZT0idG5zOlBvcnRUeXBlMTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NyIgYmluZGluZz0idG5zOkJpbmRpbmcxODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg4IiBuYW1lPSJJbnB1dDE4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODgiIG5hbWU9Ik91dHB1dDE4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODkiIG5hbWU9IklucHV0MTg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OSIgbmFtZT0iT3V0cHV0MTg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODkiIHR5cGU9InRuczpQb3J0VHlwZTE4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MCIgbmFtZT0iSW5wdXQxOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkwIiBuYW1lPSJPdXRwdXQxOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MCIgdHlwZT0idG5zOlBvcnRUeXBlMTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkxIiBuYW1lPSJJbnB1dDE5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTEiIG5hbWU9Ik91dHB1dDE5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTIiIG5hbWU9IklucHV0MTkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MiIgbmFtZT0iT3V0cHV0MTkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTIiIHR5cGU9InRuczpQb3J0VHlwZTE5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MyIgbmFtZT0iSW5wdXQxOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkzIiBuYW1lPSJPdXRwdXQxOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MyIgdHlwZT0idG5zOlBvcnRUeXBlMTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk0IiBuYW1lPSJJbnB1dDE5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTQiIG5hbWU9Ik91dHB1dDE5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTUiIG5hbWU9IklucHV0MTk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NSIgbmFtZT0iT3V0cHV0MTk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTUiIHR5cGU9InRuczpQb3J0VHlwZTE5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NiIgbmFtZT0iSW5wdXQxOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk2IiBuYW1lPSJPdXRwdXQxOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NiIgdHlwZT0idG5zOlBvcnRUeXBlMTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk3IiBuYW1lPSJJbnB1dDE5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTciIG5hbWU9Ik91dHB1dDE5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTgiIG5hbWU9IklucHV0MTk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OCIgbmFtZT0iT3V0cHV0MTk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTgiIHR5cGU9InRuczpQb3J0VHlwZTE5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OSIgbmFtZT0iSW5wdXQxOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk5IiBuYW1lPSJPdXRwdXQxOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OSIgdHlwZT0idG5zOlBvcnRUeXBlMTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAwIiBuYW1lPSJJbnB1dDIwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDAiIG5hbWU9Ik91dHB1dDIwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDEiIG5hbWU9IklucHV0MjAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMSIgbmFtZT0iT3V0cHV0MjAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDEiIHR5cGU9InRuczpQb3J0VHlwZTIwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMiIgbmFtZT0iSW5wdXQyMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAyIiBuYW1lPSJPdXRwdXQyMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMiIgdHlwZT0idG5zOlBvcnRUeXBlMjAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAzIiBuYW1lPSJJbnB1dDIwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDMiIG5hbWU9Ik91dHB1dDIwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDQiIG5hbWU9IklucHV0MjA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNCIgbmFtZT0iT3V0cHV0MjA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDQiIHR5cGU9InRuczpQb3J0VHlwZTIwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNSIgbmFtZT0iSW5wdXQyMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA1IiBuYW1lPSJPdXRwdXQyMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNSIgdHlwZT0idG5zOlBvcnRUeXBlMjA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA2IiBuYW1lPSJJbnB1dDIwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDYiIG5hbWU9Ik91dHB1dDIwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDciIG5hbWU9IklucHV0MjA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNyIgbmFtZT0iT3V0cHV0MjA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDciIHR5cGU9InRuczpQb3J0VHlwZTIwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMjA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwOCIgbmFtZT0iSW5wdXQyMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA4IiBuYW1lPSJPdXRwdXQyMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwOCIgdHlwZT0idG5zOlBvcnRUeXBlMjA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA5IiBuYW1lPSJJbnB1dDIwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDkiIG5hbWU9Ik91dHB1dDIwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTAiIG5hbWU9IklucHV0MjEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMCIgbmFtZT0iT3V0cHV0MjEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTAiIHR5cGU9InRuczpQb3J0VHlwZTIxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMSIgbmFtZT0iSW5wdXQyMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjExIiBuYW1lPSJPdXRwdXQyMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMSIgdHlwZT0idG5zOlBvcnRUeXBlMjExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEyIiBuYW1lPSJJbnB1dDIxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTIiIG5hbWU9Ik91dHB1dDIxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTMiIG5hbWU9IklucHV0MjEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMyIgbmFtZT0iT3V0cHV0MjEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTMiIHR5cGU9InRuczpQb3J0VHlwZTIxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNCIgbmFtZT0iSW5wdXQyMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE0IiBuYW1lPSJPdXRwdXQyMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNCIgdHlwZT0idG5zOlBvcnRUeXBlMjE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE1IiBuYW1lPSJJbnB1dDIxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTUiIG5hbWU9Ik91dHB1dDIxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTYiIG5hbWU9IklucHV0MjE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNiIgbmFtZT0iT3V0cHV0MjE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTYiIHR5cGU9InRuczpQb3J0VHlwZTIxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNyIgbmFtZT0iSW5wdXQyMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE3IiBuYW1lPSJPdXRwdXQyMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNyIgdHlwZT0idG5zOlBvcnRUeXBlMjE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE4IiBuYW1lPSJJbnB1dDIxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTgiIG5hbWU9Ik91dHB1dDIxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTkiIG5hbWU9IklucHV0MjE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxOSIgbmFtZT0iT3V0cHV0MjE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTkiIHR5cGU9InRuczpQb3J0VHlwZTIxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMCIgbmFtZT0iSW5wdXQyMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIwIiBuYW1lPSJPdXRwdXQyMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIxIiBuYW1lPSJJbnB1dDIyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjEiIG5hbWU9Ik91dHB1dDIyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjIiIG5hbWU9IklucHV0MjIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMiIgbmFtZT0iT3V0cHV0MjIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMyIgbmFtZT0iSW5wdXQyMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIzIiBuYW1lPSJPdXRwdXQyMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI0IiBuYW1lPSJJbnB1dDIyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjQiIG5hbWU9Ik91dHB1dDIyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjUiIG5hbWU9IklucHV0MjI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNSIgbmFtZT0iT3V0cHV0MjI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjUiIHR5cGU9InRuczpQb3J0VHlwZTIyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNiIgbmFtZT0iSW5wdXQyMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI2IiBuYW1lPSJPdXRwdXQyMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI3IiBuYW1lPSJJbnB1dDIyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjciIG5hbWU9Ik91dHB1dDIyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjgiIG5hbWU9IklucHV0MjI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyOCIgbmFtZT0iT3V0cHV0MjI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjgiIHR5cGU9InRuczpQb3J0VHlwZTIyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyOSIgbmFtZT0iSW5wdXQyMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI5IiBuYW1lPSJPdXRwdXQyMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMwIiBuYW1lPSJJbnB1dDIzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzAiIG5hbWU9Ik91dHB1dDIzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzEiIG5hbWU9IklucHV0MjMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMSIgbmFtZT0iT3V0cHV0MjMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzEiIHR5cGU9InRuczpQb3J0VHlwZTIzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMiIgbmFtZT0iSW5wdXQyMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMyIiBuYW1lPSJPdXRwdXQyMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMiIgdHlwZT0idG5zOlBvcnRUeXBlMjMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMzIiBuYW1lPSJJbnB1dDIzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzMiIG5hbWU9Ik91dHB1dDIzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzQiIG5hbWU9IklucHV0MjM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNCIgbmFtZT0iT3V0cHV0MjM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzQiIHR5cGU9InRuczpQb3J0VHlwZTIzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNSIgbmFtZT0iSW5wdXQyMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM1IiBuYW1lPSJPdXRwdXQyMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNSIgdHlwZT0idG5zOlBvcnRUeXBlMjM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM2IiBuYW1lPSJJbnB1dDIzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzYiIG5hbWU9Ik91dHB1dDIzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzciIG5hbWU9IklucHV0MjM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNyIgbmFtZT0iT3V0cHV0MjM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzciIHR5cGU9InRuczpQb3J0VHlwZTIzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMjM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzOCIgbmFtZT0iSW5wdXQyMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM4IiBuYW1lPSJPdXRwdXQyMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzOCIgdHlwZT0idG5zOlBvcnRUeXBlMjM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM5IiBuYW1lPSJJbnB1dDIzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzkiIG5hbWU9Ik91dHB1dDIzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDAiIG5hbWU9IklucHV0MjQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MCIgbmFtZT0iT3V0cHV0MjQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDAiIHR5cGU9InRuczpQb3J0VHlwZTI0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MSIgbmFtZT0iSW5wdXQyNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQxIiBuYW1lPSJPdXRwdXQyNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MSIgdHlwZT0idG5zOlBvcnRUeXBlMjQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQyIiBuYW1lPSJJbnB1dDI0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDIiIG5hbWU9Ik91dHB1dDI0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDMiIG5hbWU9IklucHV0MjQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MyIgbmFtZT0iT3V0cHV0MjQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDMiIHR5cGU9InRuczpQb3J0VHlwZTI0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NCIgbmFtZT0iSW5wdXQyNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ0IiBuYW1lPSJPdXRwdXQyNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NCIgdHlwZT0idG5zOlBvcnRUeXBlMjQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ1IiBuYW1lPSJJbnB1dDI0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDUiIG5hbWU9Ik91dHB1dDI0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDYiIG5hbWU9IklucHV0MjQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NiIgbmFtZT0iT3V0cHV0MjQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDYiIHR5cGU9InRuczpQb3J0VHlwZTI0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NyIgbmFtZT0iSW5wdXQyNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ3IiBuYW1lPSJPdXRwdXQyNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NyIgdHlwZT0idG5zOlBvcnRUeXBlMjQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ4IiBuYW1lPSJJbnB1dDI0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDgiIG5hbWU9Ik91dHB1dDI0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDkiIG5hbWU9IklucHV0MjQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0OSIgbmFtZT0iT3V0cHV0MjQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDkiIHR5cGU9InRuczpQb3J0VHlwZTI0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MCIgbmFtZT0iSW5wdXQyNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUwIiBuYW1lPSJPdXRwdXQyNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MCIgdHlwZT0idG5zOlBvcnRUeXBlMjUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUxIiBuYW1lPSJJbnB1dDI1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTEiIG5hbWU9Ik91dHB1dDI1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTIiIG5hbWU9IklucHV0MjUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MiIgbmFtZT0iT3V0cHV0MjUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTIiIHR5cGU9InRuczpQb3J0VHlwZTI1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MyIgbmFtZT0iSW5wdXQyNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUzIiBuYW1lPSJPdXRwdXQyNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MyIgdHlwZT0idG5zOlBvcnRUeXBlMjUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU0IiBuYW1lPSJJbnB1dDI1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTQiIG5hbWU9Ik91dHB1dDI1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTUiIG5hbWU9IklucHV0MjU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NSIgbmFtZT0iT3V0cHV0MjU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTUiIHR5cGU9InRuczpQb3J0VHlwZTI1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NiIgbmFtZT0iSW5wdXQyNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU2IiBuYW1lPSJPdXRwdXQyNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NiIgdHlwZT0idG5zOlBvcnRUeXBlMjU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU3IiBuYW1lPSJJbnB1dDI1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTciIG5hbWU9Ik91dHB1dDI1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTgiIG5hbWU9IklucHV0MjU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1OCIgbmFtZT0iT3V0cHV0MjU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTgiIHR5cGU9InRuczpQb3J0VHlwZTI1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1OSIgbmFtZT0iSW5wdXQyNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU5IiBuYW1lPSJPdXRwdXQyNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1OSIgdHlwZT0idG5zOlBvcnRUeXBlMjU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYwIiBuYW1lPSJJbnB1dDI2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjAiIG5hbWU9Ik91dHB1dDI2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjEiIG5hbWU9IklucHV0MjYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MSIgbmFtZT0iT3V0cHV0MjYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjEiIHR5cGU9InRuczpQb3J0VHlwZTI2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MiIgbmFtZT0iSW5wdXQyNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYyIiBuYW1lPSJPdXRwdXQyNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MiIgdHlwZT0idG5zOlBvcnRUeXBlMjYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYzIiBuYW1lPSJJbnB1dDI2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjMiIG5hbWU9Ik91dHB1dDI2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjQiIG5hbWU9IklucHV0MjY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NCIgbmFtZT0iT3V0cHV0MjY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjQiIHR5cGU9InRuczpQb3J0VHlwZTI2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NSIgbmFtZT0iSW5wdXQyNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY1IiBuYW1lPSJPdXRwdXQyNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NSIgdHlwZT0idG5zOlBvcnRUeXBlMjY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY2IiBuYW1lPSJJbnB1dDI2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjYiIG5hbWU9Ik91dHB1dDI2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjciIG5hbWU9IklucHV0MjY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NyIgbmFtZT0iT3V0cHV0MjY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjciIHR5cGU9InRuczpQb3J0VHlwZTI2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2OCIgbmFtZT0iSW5wdXQyNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY4IiBuYW1lPSJPdXRwdXQyNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2OCIgdHlwZT0idG5zOlBvcnRUeXBlMjY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY5IiBuYW1lPSJJbnB1dDI2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjkiIG5hbWU9Ik91dHB1dDI2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzAiIG5hbWU9IklucHV0MjcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MCIgbmFtZT0iT3V0cHV0MjcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzAiIHR5cGU9InRuczpQb3J0VHlwZTI3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MSIgbmFtZT0iSW5wdXQyNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcxIiBuYW1lPSJPdXRwdXQyNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MSIgdHlwZT0idG5zOlBvcnRUeXBlMjcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcyIiBuYW1lPSJJbnB1dDI3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzIiIG5hbWU9Ik91dHB1dDI3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzMiIG5hbWU9IklucHV0MjczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MyIgbmFtZT0iT3V0cHV0MjczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzMiIHR5cGU9InRuczpQb3J0VHlwZTI3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NCIgbmFtZT0iSW5wdXQyNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc0IiBuYW1lPSJPdXRwdXQyNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NCIgdHlwZT0idG5zOlBvcnRUeXBlMjc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc1IiBuYW1lPSJJbnB1dDI3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzUiIG5hbWU9Ik91dHB1dDI3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzYiIG5hbWU9IklucHV0Mjc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NiIgbmFtZT0iT3V0cHV0Mjc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzYiIHR5cGU9InRuczpQb3J0VHlwZTI3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NyIgbmFtZT0iSW5wdXQyNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc3IiBuYW1lPSJPdXRwdXQyNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NyIgdHlwZT0idG5zOlBvcnRUeXBlMjc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc4IiBuYW1lPSJJbnB1dDI3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzgiIG5hbWU9Ik91dHB1dDI3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzkiIG5hbWU9IklucHV0Mjc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3OSIgbmFtZT0iT3V0cHV0Mjc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzkiIHR5cGU9InRuczpQb3J0VHlwZTI3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MCIgbmFtZT0iSW5wdXQyODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgwIiBuYW1lPSJPdXRwdXQyODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MCIgdHlwZT0idG5zOlBvcnRUeXBlMjgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MCIgYmluZGluZz0idG5zOkJpbmRpbmcyODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgxIiBuYW1lPSJJbnB1dDI4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODEiIG5hbWU9Ik91dHB1dDI4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODIiIG5hbWU9IklucHV0MjgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MiIgbmFtZT0iT3V0cHV0MjgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODIiIHR5cGU9InRuczpQb3J0VHlwZTI4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MyIgbmFtZT0iSW5wdXQyODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgzIiBuYW1lPSJPdXRwdXQyODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MyIgdHlwZT0idG5zOlBvcnRUeXBlMjgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MyIgYmluZGluZz0idG5zOkJpbmRpbmcyODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg0IiBuYW1lPSJJbnB1dDI4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODQiIG5hbWU9Ik91dHB1dDI4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODUiIG5hbWU9IklucHV0Mjg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NSIgbmFtZT0iT3V0cHV0Mjg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODUiIHR5cGU9InRuczpQb3J0VHlwZTI4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NiIgbmFtZT0iSW5wdXQyODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg2IiBuYW1lPSJPdXRwdXQyODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NiIgdHlwZT0idG5zOlBvcnRUeXBlMjg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NiIgYmluZGluZz0idG5zOkJpbmRpbmcyODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg3IiBuYW1lPSJJbnB1dDI4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODciIG5hbWU9Ik91dHB1dDI4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODgiIG5hbWU9IklucHV0Mjg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4OCIgbmFtZT0iT3V0cHV0Mjg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODgiIHR5cGU9InRuczpQb3J0VHlwZTI4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4OSIgbmFtZT0iSW5wdXQyODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg5IiBuYW1lPSJPdXRwdXQyODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4OSIgdHlwZT0idG5zOlBvcnRUeXBlMjg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4OSIgYmluZGluZz0idG5zOkJpbmRpbmcyODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkwIiBuYW1lPSJJbnB1dDI5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTAiIG5hbWU9Ik91dHB1dDI5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTEiIG5hbWU9IklucHV0MjkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MSIgbmFtZT0iT3V0cHV0MjkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTEiIHR5cGU9InRuczpQb3J0VHlwZTI5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MiIgbmFtZT0iSW5wdXQyOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkyIiBuYW1lPSJPdXRwdXQyOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MiIgdHlwZT0idG5zOlBvcnRUeXBlMjkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MiIgYmluZGluZz0idG5zOkJpbmRpbmcyOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkzIiBuYW1lPSJJbnB1dDI5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTMiIG5hbWU9Ik91dHB1dDI5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTQiIG5hbWU9IklucHV0Mjk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NCIgbmFtZT0iT3V0cHV0Mjk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTQiIHR5cGU9InRuczpQb3J0VHlwZTI5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NSIgbmFtZT0iSW5wdXQyOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk1IiBuYW1lPSJPdXRwdXQyOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NSIgdHlwZT0idG5zOlBvcnRUeXBlMjk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk2IiBuYW1lPSJJbnB1dDI5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTYiIG5hbWU9Ik91dHB1dDI5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTciIG5hbWU9IklucHV0Mjk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NyIgbmFtZT0iT3V0cHV0Mjk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTciIHR5cGU9InRuczpQb3J0VHlwZTI5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5OCIgbmFtZT0iSW5wdXQyOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk4IiBuYW1lPSJPdXRwdXQyOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5OCIgdHlwZT0idG5zOlBvcnRUeXBlMjk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5OCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk5IiBuYW1lPSJJbnB1dDI5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTkiIG5hbWU9Ik91dHB1dDI5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDAiIG5hbWU9IklucHV0MzAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMCIgbmFtZT0iT3V0cHV0MzAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDAiIHR5cGU9InRuczpQb3J0VHlwZTMwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMSIgbmFtZT0iSW5wdXQzMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAxIiBuYW1lPSJPdXRwdXQzMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMSIgdHlwZT0idG5zOlBvcnRUeXBlMzAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMSIgYmluZGluZz0idG5zOkJpbmRpbmczMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAyIiBuYW1lPSJJbnB1dDMwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDIiIG5hbWU9Ik91dHB1dDMwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDMiIG5hbWU9IklucHV0MzAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMyIgbmFtZT0iT3V0cHV0MzAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDMiIHR5cGU9InRuczpQb3J0VHlwZTMwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNCIgbmFtZT0iSW5wdXQzMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA0IiBuYW1lPSJPdXRwdXQzMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNCIgdHlwZT0idG5zOlBvcnRUeXBlMzA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNCIgYmluZGluZz0idG5zOkJpbmRpbmczMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA1IiBuYW1lPSJJbnB1dDMwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDUiIG5hbWU9Ik91dHB1dDMwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDYiIG5hbWU9IklucHV0MzA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNiIgbmFtZT0iT3V0cHV0MzA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDYiIHR5cGU9InRuczpQb3J0VHlwZTMwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNyIgbmFtZT0iSW5wdXQzMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA3IiBuYW1lPSJPdXRwdXQzMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNyIgdHlwZT0idG5zOlBvcnRUeXBlMzA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNyIgYmluZGluZz0idG5zOkJpbmRpbmczMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA4IiBuYW1lPSJJbnB1dDMwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDgiIG5hbWU9Ik91dHB1dDMwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDkiIG5hbWU9IklucHV0MzA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwOSIgbmFtZT0iT3V0cHV0MzA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDkiIHR5cGU9InRuczpQb3J0VHlwZTMwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMCIgbmFtZT0iSW5wdXQzMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEwIiBuYW1lPSJPdXRwdXQzMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMCIgdHlwZT0idG5zOlBvcnRUeXBlMzEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMCIgYmluZGluZz0idG5zOkJpbmRpbmczMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzExIiBuYW1lPSJJbnB1dDMxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTEiIG5hbWU9Ik91dHB1dDMxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTIiIG5hbWU9IklucHV0MzEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMiIgbmFtZT0iT3V0cHV0MzEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTIiIHR5cGU9InRuczpQb3J0VHlwZTMxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMyIgbmFtZT0iSW5wdXQzMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEzIiBuYW1lPSJPdXRwdXQzMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMyIgdHlwZT0idG5zOlBvcnRUeXBlMzEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMyIgYmluZGluZz0idG5zOkJpbmRpbmczMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE0IiBuYW1lPSJJbnB1dDMxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTQiIG5hbWU9Ik91dHB1dDMxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTUiIG5hbWU9IklucHV0MzE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNSIgbmFtZT0iT3V0cHV0MzE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTUiIHR5cGU9InRuczpQb3J0VHlwZTMxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNiIgbmFtZT0iSW5wdXQzMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE2IiBuYW1lPSJPdXRwdXQzMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNiIgdHlwZT0idG5zOlBvcnRUeXBlMzE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNiIgYmluZGluZz0idG5zOkJpbmRpbmczMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE3IiBuYW1lPSJJbnB1dDMxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTciIG5hbWU9Ik91dHB1dDMxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTgiIG5hbWU9IklucHV0MzE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxOCIgbmFtZT0iT3V0cHV0MzE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTgiIHR5cGU9InRuczpQb3J0VHlwZTMxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxOSIgbmFtZT0iSW5wdXQzMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE5IiBuYW1lPSJPdXRwdXQzMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxOSIgdHlwZT0idG5zOlBvcnRUeXBlMzE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxOSIgYmluZGluZz0idG5zOkJpbmRpbmczMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIwIiBuYW1lPSJJbnB1dDMyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjAiIG5hbWU9Ik91dHB1dDMyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjEiIG5hbWU9IklucHV0MzIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMSIgbmFtZT0iT3V0cHV0MzIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjEiIHR5cGU9InRuczpQb3J0VHlwZTMyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMiIgbmFtZT0iSW5wdXQzMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIyIiBuYW1lPSJPdXRwdXQzMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMiIgYmluZGluZz0idG5zOkJpbmRpbmczMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIzIiBuYW1lPSJJbnB1dDMyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjMiIG5hbWU9Ik91dHB1dDMyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjQiIG5hbWU9IklucHV0MzI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNCIgbmFtZT0iT3V0cHV0MzI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjQiIHR5cGU9InRuczpQb3J0VHlwZTMyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNSIgbmFtZT0iSW5wdXQzMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI1IiBuYW1lPSJPdXRwdXQzMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNSIgdHlwZT0idG5zOlBvcnRUeXBlMzI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNSIgYmluZGluZz0idG5zOkJpbmRpbmczMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI2IiBuYW1lPSJJbnB1dDMyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjYiIG5hbWU9Ik91dHB1dDMyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjciIG5hbWU9IklucHV0MzI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNyIgbmFtZT0iT3V0cHV0MzI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjciIHR5cGU9InRuczpQb3J0VHlwZTMyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyOCIgbmFtZT0iSW5wdXQzMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI4IiBuYW1lPSJPdXRwdXQzMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyOCIgdHlwZT0idG5zOlBvcnRUeXBlMzI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyOCIgYmluZGluZz0idG5zOkJpbmRpbmczMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI5IiBuYW1lPSJJbnB1dDMyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjkiIG5hbWU9Ik91dHB1dDMyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzAiIG5hbWU9IklucHV0MzMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMCIgbmFtZT0iT3V0cHV0MzMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzAiIHR5cGU9InRuczpQb3J0VHlwZTMzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMSIgbmFtZT0iSW5wdXQzMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMxIiBuYW1lPSJPdXRwdXQzMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMSIgdHlwZT0idG5zOlBvcnRUeXBlMzMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMyIiBuYW1lPSJJbnB1dDMzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzIiIG5hbWU9Ik91dHB1dDMzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzMiIG5hbWU9IklucHV0MzMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMyIgbmFtZT0iT3V0cHV0MzMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNCIgbmFtZT0iSW5wdXQzMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM0IiBuYW1lPSJPdXRwdXQzMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNCIgdHlwZT0idG5zOlBvcnRUeXBlMzM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNCIgYmluZGluZz0idG5zOkJpbmRpbmczMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM1IiBuYW1lPSJJbnB1dDMzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzUiIG5hbWU9Ik91dHB1dDMzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzYiIG5hbWU9IklucHV0MzM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNiIgbmFtZT0iT3V0cHV0MzM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzYiIHR5cGU9InRuczpQb3J0VHlwZTMzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNyIgbmFtZT0iSW5wdXQzMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM3IiBuYW1lPSJPdXRwdXQzMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNyIgdHlwZT0idG5zOlBvcnRUeXBlMzM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNyIgYmluZGluZz0idG5zOkJpbmRpbmczMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM4IiBuYW1lPSJJbnB1dDMzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzgiIG5hbWU9Ik91dHB1dDMzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzkiIG5hbWU9IklucHV0MzM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzOSIgbmFtZT0iT3V0cHV0MzM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzkiIHR5cGU9InRuczpQb3J0VHlwZTMzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MCIgbmFtZT0iSW5wdXQzNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQwIiBuYW1lPSJPdXRwdXQzNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MCIgdHlwZT0idG5zOlBvcnRUeXBlMzQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MCIgYmluZGluZz0idG5zOkJpbmRpbmczNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQxIiBuYW1lPSJJbnB1dDM0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDEiIG5hbWU9Ik91dHB1dDM0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDIiIG5hbWU9IklucHV0MzQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MiIgbmFtZT0iT3V0cHV0MzQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDIiIHR5cGU9InRuczpQb3J0VHlwZTM0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MyIgbmFtZT0iSW5wdXQzNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQzIiBuYW1lPSJPdXRwdXQzNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MyIgdHlwZT0idG5zOlBvcnRUeXBlMzQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MyIgYmluZGluZz0idG5zOkJpbmRpbmczNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ0IiBuYW1lPSJJbnB1dDM0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDQiIG5hbWU9Ik91dHB1dDM0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDUiIG5hbWU9IklucHV0MzQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NSIgbmFtZT0iT3V0cHV0MzQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDUiIHR5cGU9InRuczpQb3J0VHlwZTM0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NiIgbmFtZT0iSW5wdXQzNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ2IiBuYW1lPSJPdXRwdXQzNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NiIgdHlwZT0idG5zOlBvcnRUeXBlMzQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NiIgYmluZGluZz0idG5zOkJpbmRpbmczNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ3IiBuYW1lPSJJbnB1dDM0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDciIG5hbWU9Ik91dHB1dDM0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDgiIG5hbWU9IklucHV0MzQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0OCIgbmFtZT0iT3V0cHV0MzQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDgiIHR5cGU9InRuczpQb3J0VHlwZTM0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0OSIgbmFtZT0iSW5wdXQzNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ5IiBuYW1lPSJPdXRwdXQzNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0OSIgdHlwZT0idG5zOlBvcnRUeXBlMzQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0OSIgYmluZGluZz0idG5zOkJpbmRpbmczNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUwIiBuYW1lPSJJbnB1dDM1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTAiIG5hbWU9Ik91dHB1dDM1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTEiIG5hbWU9IklucHV0MzUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MSIgbmFtZT0iT3V0cHV0MzUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTEiIHR5cGU9InRuczpQb3J0VHlwZTM1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MiIgbmFtZT0iSW5wdXQzNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUyIiBuYW1lPSJPdXRwdXQzNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MiIgdHlwZT0idG5zOlBvcnRUeXBlMzUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MiIgYmluZGluZz0idG5zOkJpbmRpbmczNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUzIiBuYW1lPSJJbnB1dDM1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTMiIG5hbWU9Ik91dHB1dDM1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTQiIG5hbWU9IklucHV0MzU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NCIgbmFtZT0iT3V0cHV0MzU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTQiIHR5cGU9InRuczpQb3J0VHlwZTM1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NSIgbmFtZT0iSW5wdXQzNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU1IiBuYW1lPSJPdXRwdXQzNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NSIgdHlwZT0idG5zOlBvcnRUeXBlMzU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NSIgYmluZGluZz0idG5zOkJpbmRpbmczNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU2IiBuYW1lPSJJbnB1dDM1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTYiIG5hbWU9Ik91dHB1dDM1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTciIG5hbWU9IklucHV0MzU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NyIgbmFtZT0iT3V0cHV0MzU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTciIHR5cGU9InRuczpQb3J0VHlwZTM1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1OCIgbmFtZT0iSW5wdXQzNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU4IiBuYW1lPSJPdXRwdXQzNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1OCIgdHlwZT0idG5zOlBvcnRUeXBlMzU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1OCIgYmluZGluZz0idG5zOkJpbmRpbmczNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU5IiBuYW1lPSJJbnB1dDM1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTkiIG5hbWU9Ik91dHB1dDM1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjAiIG5hbWU9IklucHV0MzYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MCIgbmFtZT0iT3V0cHV0MzYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjAiIHR5cGU9InRuczpQb3J0VHlwZTM2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MSIgbmFtZT0iSW5wdXQzNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYxIiBuYW1lPSJPdXRwdXQzNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MSIgdHlwZT0idG5zOlBvcnRUeXBlMzYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MSIgYmluZGluZz0idG5zOkJpbmRpbmczNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYyIiBuYW1lPSJJbnB1dDM2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjIiIG5hbWU9Ik91dHB1dDM2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjMiIG5hbWU9IklucHV0MzYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MyIgbmFtZT0iT3V0cHV0MzYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjMiIHR5cGU9InRuczpQb3J0VHlwZTM2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NCIgbmFtZT0iSW5wdXQzNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY0IiBuYW1lPSJPdXRwdXQzNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NCIgdHlwZT0idG5zOlBvcnRUeXBlMzY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NCIgYmluZGluZz0idG5zOkJpbmRpbmczNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY1IiBuYW1lPSJJbnB1dDM2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjUiIG5hbWU9Ik91dHB1dDM2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjYiIG5hbWU9IklucHV0MzY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NiIgbmFtZT0iT3V0cHV0MzY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjYiIHR5cGU9InRuczpQb3J0VHlwZTM2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NyIgbmFtZT0iSW5wdXQzNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY3IiBuYW1lPSJPdXRwdXQzNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NyIgdHlwZT0idG5zOlBvcnRUeXBlMzY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NyIgYmluZGluZz0idG5zOkJpbmRpbmczNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY4IiBuYW1lPSJJbnB1dDM2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjgiIG5hbWU9Ik91dHB1dDM2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjkiIG5hbWU9IklucHV0MzY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2OSIgbmFtZT0iT3V0cHV0MzY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjkiIHR5cGU9InRuczpQb3J0VHlwZTM2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MCIgbmFtZT0iSW5wdXQzNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcwIiBuYW1lPSJPdXRwdXQzNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MCIgdHlwZT0idG5zOlBvcnRUeXBlMzcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MCIgYmluZGluZz0idG5zOkJpbmRpbmczNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcxIiBuYW1lPSJJbnB1dDM3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzEiIG5hbWU9Ik91dHB1dDM3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzIiIG5hbWU9IklucHV0MzcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MiIgbmFtZT0iT3V0cHV0MzcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzIiIHR5cGU9InRuczpQb3J0VHlwZTM3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MyIgbmFtZT0iSW5wdXQzNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzczIiBuYW1lPSJPdXRwdXQzNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MyIgdHlwZT0idG5zOlBvcnRUeXBlMzczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MyIgYmluZGluZz0idG5zOkJpbmRpbmczNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc0IiBuYW1lPSJJbnB1dDM3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzQiIG5hbWU9Ik91dHB1dDM3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzUiIG5hbWU9IklucHV0Mzc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NSIgbmFtZT0iT3V0cHV0Mzc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzUiIHR5cGU9InRuczpQb3J0VHlwZTM3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NiIgbmFtZT0iSW5wdXQzNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc2IiBuYW1lPSJPdXRwdXQzNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NiIgdHlwZT0idG5zOlBvcnRUeXBlMzc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NiIgYmluZGluZz0idG5zOkJpbmRpbmczNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc3IiBuYW1lPSJJbnB1dDM3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzciIG5hbWU9Ik91dHB1dDM3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzgiIG5hbWU9IklucHV0Mzc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3OCIgbmFtZT0iT3V0cHV0Mzc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzgiIHR5cGU9InRuczpQb3J0VHlwZTM3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3OSIgbmFtZT0iSW5wdXQzNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc5IiBuYW1lPSJPdXRwdXQzNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3OSIgdHlwZT0idG5zOlBvcnRUeXBlMzc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3OSIgYmluZGluZz0idG5zOkJpbmRpbmczNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgwIiBuYW1lPSJJbnB1dDM4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODAiIG5hbWU9Ik91dHB1dDM4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODEiIG5hbWU9IklucHV0MzgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MSIgbmFtZT0iT3V0cHV0MzgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODEiIHR5cGU9InRuczpQb3J0VHlwZTM4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MiIgbmFtZT0iSW5wdXQzODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgyIiBuYW1lPSJPdXRwdXQzODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MiIgdHlwZT0idG5zOlBvcnRUeXBlMzgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MiIgYmluZGluZz0idG5zOkJpbmRpbmczODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgzIiBuYW1lPSJJbnB1dDM4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODMiIG5hbWU9Ik91dHB1dDM4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODQiIG5hbWU9IklucHV0Mzg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NCIgbmFtZT0iT3V0cHV0Mzg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODQiIHR5cGU9InRuczpQb3J0VHlwZTM4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NSIgbmFtZT0iSW5wdXQzODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg1IiBuYW1lPSJPdXRwdXQzODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NSIgdHlwZT0idG5zOlBvcnRUeXBlMzg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NSIgYmluZGluZz0idG5zOkJpbmRpbmczODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg2IiBuYW1lPSJJbnB1dDM4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODYiIG5hbWU9Ik91dHB1dDM4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODciIG5hbWU9IklucHV0Mzg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NyIgbmFtZT0iT3V0cHV0Mzg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODciIHR5cGU9InRuczpQb3J0VHlwZTM4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODciIGJpbmRpbmc9InRuczpCaW5kaW5nMzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4OCIgbmFtZT0iSW5wdXQzODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg4IiBuYW1lPSJPdXRwdXQzODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4OCIgdHlwZT0idG5zOlBvcnRUeXBlMzg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4OCIgYmluZGluZz0idG5zOkJpbmRpbmczODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg5IiBuYW1lPSJJbnB1dDM4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODkiIG5hbWU9Ik91dHB1dDM4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTAiIG5hbWU9IklucHV0MzkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MCIgbmFtZT0iT3V0cHV0MzkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTAiIHR5cGU9InRuczpQb3J0VHlwZTM5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MSIgbmFtZT0iSW5wdXQzOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkxIiBuYW1lPSJPdXRwdXQzOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MSIgdHlwZT0idG5zOlBvcnRUeXBlMzkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MSIgYmluZGluZz0idG5zOkJpbmRpbmczOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkyIiBuYW1lPSJJbnB1dDM5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTIiIG5hbWU9Ik91dHB1dDM5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTMiIG5hbWU9IklucHV0MzkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MyIgbmFtZT0iT3V0cHV0MzkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTMiIHR5cGU9InRuczpQb3J0VHlwZTM5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NCIgbmFtZT0iSW5wdXQzOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk0IiBuYW1lPSJPdXRwdXQzOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NCIgdHlwZT0idG5zOlBvcnRUeXBlMzk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NCIgYmluZGluZz0idG5zOkJpbmRpbmczOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk1IiBuYW1lPSJJbnB1dDM5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTUiIG5hbWU9Ik91dHB1dDM5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTYiIG5hbWU9IklucHV0Mzk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NiIgbmFtZT0iT3V0cHV0Mzk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTYiIHR5cGU9InRuczpQb3J0VHlwZTM5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NyIgbmFtZT0iSW5wdXQzOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk3IiBuYW1lPSJPdXRwdXQzOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NyIgdHlwZT0idG5zOlBvcnRUeXBlMzk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NyIgYmluZGluZz0idG5zOkJpbmRpbmczOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk4IiBuYW1lPSJJbnB1dDM5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTgiIG5hbWU9Ik91dHB1dDM5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTkiIG5hbWU9IklucHV0Mzk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5OSIgbmFtZT0iT3V0cHV0Mzk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTkiIHR5cGU9InRuczpQb3J0VHlwZTM5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMCIgbmFtZT0iSW5wdXQ0MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAwIiBuYW1lPSJPdXRwdXQ0MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMCIgdHlwZT0idG5zOlBvcnRUeXBlNDAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAxIiBuYW1lPSJJbnB1dDQwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDEiIG5hbWU9Ik91dHB1dDQwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDIiIG5hbWU9IklucHV0NDAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMiIgbmFtZT0iT3V0cHV0NDAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDIiIHR5cGU9InRuczpQb3J0VHlwZTQwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMyIgbmFtZT0iSW5wdXQ0MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAzIiBuYW1lPSJPdXRwdXQ0MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMyIgdHlwZT0idG5zOlBvcnRUeXBlNDAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA0IiBuYW1lPSJJbnB1dDQwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDQiIG5hbWU9Ik91dHB1dDQwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDUiIG5hbWU9IklucHV0NDA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNSIgbmFtZT0iT3V0cHV0NDA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDUiIHR5cGU9InRuczpQb3J0VHlwZTQwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNiIgbmFtZT0iSW5wdXQ0MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA2IiBuYW1lPSJPdXRwdXQ0MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNiIgdHlwZT0idG5zOlBvcnRUeXBlNDA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA3IiBuYW1lPSJJbnB1dDQwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDciIG5hbWU9Ik91dHB1dDQwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDgiIG5hbWU9IklucHV0NDA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwOCIgbmFtZT0iT3V0cHV0NDA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDgiIHR5cGU9InRuczpQb3J0VHlwZTQwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwOSIgbmFtZT0iSW5wdXQ0MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA5IiBuYW1lPSJPdXRwdXQ0MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwOSIgdHlwZT0idG5zOlBvcnRUeXBlNDA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEwIiBuYW1lPSJJbnB1dDQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTAiIG5hbWU9Ik91dHB1dDQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTEiIG5hbWU9IklucHV0NDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMSIgbmFtZT0iT3V0cHV0NDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTEiIHR5cGU9InRuczpQb3J0VHlwZTQxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMiIgbmFtZT0iSW5wdXQ0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEyIiBuYW1lPSJPdXRwdXQ0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMiIgdHlwZT0idG5zOlBvcnRUeXBlNDEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEzIiBuYW1lPSJJbnB1dDQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTMiIG5hbWU9Ik91dHB1dDQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTQiIG5hbWU9IklucHV0NDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNCIgbmFtZT0iT3V0cHV0NDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTQiIHR5cGU9InRuczpQb3J0VHlwZTQxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNSIgbmFtZT0iSW5wdXQ0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE1IiBuYW1lPSJPdXRwdXQ0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNSIgdHlwZT0idG5zOlBvcnRUeXBlNDE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE2IiBuYW1lPSJJbnB1dDQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTYiIG5hbWU9Ik91dHB1dDQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTciIG5hbWU9IklucHV0NDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNyIgbmFtZT0iT3V0cHV0NDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTciIHR5cGU9InRuczpQb3J0VHlwZTQxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxOCIgbmFtZT0iSW5wdXQ0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE4IiBuYW1lPSJPdXRwdXQ0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxOCIgdHlwZT0idG5zOlBvcnRUeXBlNDE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE5IiBuYW1lPSJJbnB1dDQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTkiIG5hbWU9Ik91dHB1dDQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjAiIG5hbWU9IklucHV0NDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMCIgbmFtZT0iT3V0cHV0NDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjAiIHR5cGU9InRuczpQb3J0VHlwZTQyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMSIgbmFtZT0iSW5wdXQ0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIxIiBuYW1lPSJPdXRwdXQ0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMSIgdHlwZT0idG5zOlBvcnRUeXBlNDIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIyIiBuYW1lPSJJbnB1dDQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjIiIG5hbWU9Ik91dHB1dDQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjMiIG5hbWU9IklucHV0NDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMyIgbmFtZT0iT3V0cHV0NDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjMiIHR5cGU9InRuczpQb3J0VHlwZTQyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNCIgbmFtZT0iSW5wdXQ0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI0IiBuYW1lPSJPdXRwdXQ0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNCIgdHlwZT0idG5zOlBvcnRUeXBlNDI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI1IiBuYW1lPSJJbnB1dDQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjUiIG5hbWU9Ik91dHB1dDQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjYiIG5hbWU9IklucHV0NDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNiIgbmFtZT0iT3V0cHV0NDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjYiIHR5cGU9InRuczpQb3J0VHlwZTQyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNyIgbmFtZT0iSW5wdXQ0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI3IiBuYW1lPSJPdXRwdXQ0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNyIgdHlwZT0idG5zOlBvcnRUeXBlNDI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI4IiBuYW1lPSJJbnB1dDQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjgiIG5hbWU9Ik91dHB1dDQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjkiIG5hbWU9IklucHV0NDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyOSIgbmFtZT0iT3V0cHV0NDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjkiIHR5cGU9InRuczpQb3J0VHlwZTQyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMCIgbmFtZT0iSW5wdXQ0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMwIiBuYW1lPSJPdXRwdXQ0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMCIgdHlwZT0idG5zOlBvcnRUeXBlNDMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMxIiBuYW1lPSJJbnB1dDQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzEiIG5hbWU9Ik91dHB1dDQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzIiIG5hbWU9IklucHV0NDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMiIgbmFtZT0iT3V0cHV0NDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzIiIHR5cGU9InRuczpQb3J0VHlwZTQzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMyIgbmFtZT0iSW5wdXQ0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMzIiBuYW1lPSJPdXRwdXQ0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMyIgdHlwZT0idG5zOlBvcnRUeXBlNDMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM0IiBuYW1lPSJJbnB1dDQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzQiIG5hbWU9Ik91dHB1dDQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzUiIG5hbWU9IklucHV0NDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNSIgbmFtZT0iT3V0cHV0NDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzUiIHR5cGU9InRuczpQb3J0VHlwZTQzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNiIgbmFtZT0iSW5wdXQ0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM2IiBuYW1lPSJPdXRwdXQ0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNiIgdHlwZT0idG5zOlBvcnRUeXBlNDM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM3IiBuYW1lPSJJbnB1dDQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzciIG5hbWU9Ik91dHB1dDQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzgiIG5hbWU9IklucHV0NDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzOCIgbmFtZT0iT3V0cHV0NDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzgiIHR5cGU9InRuczpQb3J0VHlwZTQzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzOSIgbmFtZT0iSW5wdXQ0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM5IiBuYW1lPSJPdXRwdXQ0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzOSIgdHlwZT0idG5zOlBvcnRUeXBlNDM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQwIiBuYW1lPSJJbnB1dDQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDAiIG5hbWU9Ik91dHB1dDQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDEiIG5hbWU9IklucHV0NDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MSIgbmFtZT0iT3V0cHV0NDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDEiIHR5cGU9InRuczpQb3J0VHlwZTQ0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MiIgbmFtZT0iSW5wdXQ0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQyIiBuYW1lPSJPdXRwdXQ0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQzIiBuYW1lPSJJbnB1dDQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDMiIG5hbWU9Ik91dHB1dDQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDQiIG5hbWU9IklucHV0NDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NCIgbmFtZT0iT3V0cHV0NDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NSIgbmFtZT0iSW5wdXQ0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ1IiBuYW1lPSJPdXRwdXQ0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ2IiBuYW1lPSJJbnB1dDQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDYiIG5hbWU9Ik91dHB1dDQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDciIG5hbWU9IklucHV0NDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NyIgbmFtZT0iT3V0cHV0NDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDciIHR5cGU9InRuczpQb3J0VHlwZTQ0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0OCIgbmFtZT0iSW5wdXQ0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ4IiBuYW1lPSJPdXRwdXQ0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ5IiBuYW1lPSJJbnB1dDQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDkiIG5hbWU9Ik91dHB1dDQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTAiIG5hbWU9IklucHV0NDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MCIgbmFtZT0iT3V0cHV0NDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTAiIHR5cGU9InRuczpQb3J0VHlwZTQ1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MSIgbmFtZT0iSW5wdXQ0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUxIiBuYW1lPSJPdXRwdXQ0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MSIgdHlwZT0idG5zOlBvcnRUeXBlNDUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUyIiBuYW1lPSJJbnB1dDQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTIiIG5hbWU9Ik91dHB1dDQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTMiIG5hbWU9IklucHV0NDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MyIgbmFtZT0iT3V0cHV0NDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTMiIHR5cGU9InRuczpQb3J0VHlwZTQ1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NCIgbmFtZT0iSW5wdXQ0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU0IiBuYW1lPSJPdXRwdXQ0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NCIgdHlwZT0idG5zOlBvcnRUeXBlNDU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU1IiBuYW1lPSJJbnB1dDQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTUiIG5hbWU9Ik91dHB1dDQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTYiIG5hbWU9IklucHV0NDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NiIgbmFtZT0iT3V0cHV0NDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTYiIHR5cGU9InRuczpQb3J0VHlwZTQ1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NyIgbmFtZT0iSW5wdXQ0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU3IiBuYW1lPSJPdXRwdXQ0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NyIgdHlwZT0idG5zOlBvcnRUeXBlNDU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU4IiBuYW1lPSJJbnB1dDQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTgiIG5hbWU9Ik91dHB1dDQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTkiIG5hbWU9IklucHV0NDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1OSIgbmFtZT0iT3V0cHV0NDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTkiIHR5cGU9InRuczpQb3J0VHlwZTQ1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MCIgbmFtZT0iSW5wdXQ0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYwIiBuYW1lPSJPdXRwdXQ0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MCIgdHlwZT0idG5zOlBvcnRUeXBlNDYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYxIiBuYW1lPSJJbnB1dDQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjEiIG5hbWU9Ik91dHB1dDQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjIiIG5hbWU9IklucHV0NDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MiIgbmFtZT0iT3V0cHV0NDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjIiIHR5cGU9InRuczpQb3J0VHlwZTQ2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MyIgbmFtZT0iSW5wdXQ0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYzIiBuYW1lPSJPdXRwdXQ0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MyIgdHlwZT0idG5zOlBvcnRUeXBlNDYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY0IiBuYW1lPSJJbnB1dDQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjQiIG5hbWU9Ik91dHB1dDQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjUiIG5hbWU9IklucHV0NDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NSIgbmFtZT0iT3V0cHV0NDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjUiIHR5cGU9InRuczpQb3J0VHlwZTQ2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NiIgbmFtZT0iSW5wdXQ0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY2IiBuYW1lPSJPdXRwdXQ0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NiIgdHlwZT0idG5zOlBvcnRUeXBlNDY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY3IiBuYW1lPSJJbnB1dDQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjciIG5hbWU9Ik91dHB1dDQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjgiIG5hbWU9IklucHV0NDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2OCIgbmFtZT0iT3V0cHV0NDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjgiIHR5cGU9InRuczpQb3J0VHlwZTQ2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2OSIgbmFtZT0iSW5wdXQ0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY5IiBuYW1lPSJPdXRwdXQ0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2OSIgdHlwZT0idG5zOlBvcnRUeXBlNDY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcwIiBuYW1lPSJJbnB1dDQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzAiIG5hbWU9Ik91dHB1dDQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzEiIG5hbWU9IklucHV0NDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MSIgbmFtZT0iT3V0cHV0NDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzEiIHR5cGU9InRuczpQb3J0VHlwZTQ3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MiIgbmFtZT0iSW5wdXQ0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcyIiBuYW1lPSJPdXRwdXQ0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MiIgdHlwZT0idG5zOlBvcnRUeXBlNDcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDczIiBuYW1lPSJJbnB1dDQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzMiIG5hbWU9Ik91dHB1dDQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDczIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzQiIG5hbWU9IklucHV0NDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NCIgbmFtZT0iT3V0cHV0NDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzQiIHR5cGU9InRuczpQb3J0VHlwZTQ3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NSIgbmFtZT0iSW5wdXQ0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc1IiBuYW1lPSJPdXRwdXQ0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NSIgdHlwZT0idG5zOlBvcnRUeXBlNDc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc2IiBuYW1lPSJJbnB1dDQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzYiIG5hbWU9Ik91dHB1dDQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzciIG5hbWU9IklucHV0NDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NyIgbmFtZT0iT3V0cHV0NDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzciIHR5cGU9InRuczpQb3J0VHlwZTQ3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNDc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3OCIgbmFtZT0iSW5wdXQ0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc4IiBuYW1lPSJPdXRwdXQ0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3OCIgdHlwZT0idG5zOlBvcnRUeXBlNDc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc5IiBuYW1lPSJJbnB1dDQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzkiIG5hbWU9Ik91dHB1dDQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODAiIG5hbWU9IklucHV0NDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MCIgbmFtZT0iT3V0cHV0NDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODAiIHR5cGU9InRuczpQb3J0VHlwZTQ4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MSIgbmFtZT0iSW5wdXQ0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgxIiBuYW1lPSJPdXRwdXQ0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MSIgdHlwZT0idG5zOlBvcnRUeXBlNDgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgyIiBuYW1lPSJJbnB1dDQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODIiIG5hbWU9Ik91dHB1dDQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODMiIG5hbWU9IklucHV0NDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MyIgbmFtZT0iT3V0cHV0NDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODMiIHR5cGU9InRuczpQb3J0VHlwZTQ4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NCIgbmFtZT0iSW5wdXQ0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg0IiBuYW1lPSJPdXRwdXQ0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NCIgdHlwZT0idG5zOlBvcnRUeXBlNDg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg1IiBuYW1lPSJJbnB1dDQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODUiIG5hbWU9Ik91dHB1dDQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODYiIG5hbWU9IklucHV0NDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NiIgbmFtZT0iT3V0cHV0NDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODYiIHR5cGU9InRuczpQb3J0VHlwZTQ4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NyIgbmFtZT0iSW5wdXQ0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg3IiBuYW1lPSJPdXRwdXQ0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NyIgdHlwZT0idG5zOlBvcnRUeXBlNDg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc0ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg4IiBuYW1lPSJJbnB1dDQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODgiIG5hbWU9Ik91dHB1dDQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODkiIG5hbWU9IklucHV0NDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4OSIgbmFtZT0iT3V0cHV0NDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODkiIHR5cGU9InRuczpQb3J0VHlwZTQ4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MCIgbmFtZT0iSW5wdXQ0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkwIiBuYW1lPSJPdXRwdXQ0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MCIgdHlwZT0idG5zOlBvcnRUeXBlNDkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkxIiBuYW1lPSJJbnB1dDQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTEiIG5hbWU9Ik91dHB1dDQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTIiIG5hbWU9IklucHV0NDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MiIgbmFtZT0iT3V0cHV0NDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTIiIHR5cGU9InRuczpQb3J0VHlwZTQ5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MyIgbmFtZT0iSW5wdXQ0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkzIiBuYW1lPSJPdXRwdXQ0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MyIgdHlwZT0idG5zOlBvcnRUeXBlNDkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc0OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk0IiBuYW1lPSJJbnB1dDQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTQiIG5hbWU9Ik91dHB1dDQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTUiIG5hbWU9IklucHV0NDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NSIgbmFtZT0iT3V0cHV0NDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTUiIHR5cGU9InRuczpQb3J0VHlwZTQ5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NiIgbmFtZT0iSW5wdXQ0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk2IiBuYW1lPSJPdXRwdXQ0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NiIgdHlwZT0idG5zOlBvcnRUeXBlNDk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc0OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk3IiBuYW1lPSJJbnB1dDQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTciIG5hbWU9Ik91dHB1dDQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTgiIG5hbWU9IklucHV0NDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5OCIgbmFtZT0iT3V0cHV0NDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTgiIHR5cGU9InRuczpQb3J0VHlwZTQ5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5OSIgbmFtZT0iSW5wdXQ0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk5IiBuYW1lPSJPdXRwdXQ0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5OSIgdHlwZT0idG5zOlBvcnRUeXBlNDk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAwIiBuYW1lPSJJbnB1dDUwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDAiIG5hbWU9Ik91dHB1dDUwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDEiIG5hbWU9IklucHV0NTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwMSIgbmFtZT0iT3V0cHV0NTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDEiIHR5cGU9InRuczpQb3J0VHlwZTUwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwMiIgbmFtZT0iSW5wdXQ1MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAyIiBuYW1lPSJPdXRwdXQ1MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwMiIgdHlwZT0idG5zOlBvcnRUeXBlNTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwMiIgYmluZGluZz0idG5zOkJpbmRpbmc1MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAzIiBuYW1lPSJJbnB1dDUwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDMiIG5hbWU9Ik91dHB1dDUwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDQiIG5hbWU9IklucHV0NTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwNCIgbmFtZT0iT3V0cHV0NTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDQiIHR5cGU9InRuczpQb3J0VHlwZTUwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwNSIgbmFtZT0iSW5wdXQ1MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA1IiBuYW1lPSJPdXRwdXQ1MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwNSIgdHlwZT0idG5zOlBvcnRUeXBlNTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwNSIgYmluZGluZz0idG5zOkJpbmRpbmc1MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA2IiBuYW1lPSJJbnB1dDUwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDYiIG5hbWU9Ik91dHB1dDUwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDciIG5hbWU9IklucHV0NTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwNyIgbmFtZT0iT3V0cHV0NTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDciIHR5cGU9InRuczpQb3J0VHlwZTUwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwOCIgbmFtZT0iSW5wdXQ1MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA4IiBuYW1lPSJPdXRwdXQ1MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwOCIgdHlwZT0idG5zOlBvcnRUeXBlNTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwOCIgYmluZGluZz0idG5zOkJpbmRpbmc1MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA5IiBuYW1lPSJJbnB1dDUwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDkiIG5hbWU9Ik91dHB1dDUwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTAiIG5hbWU9IklucHV0NTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxMCIgbmFtZT0iT3V0cHV0NTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTAiIHR5cGU9InRuczpQb3J0VHlwZTUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxMSIgbmFtZT0iSW5wdXQ1MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTExIiBuYW1lPSJPdXRwdXQ1MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxMSIgdHlwZT0idG5zOlBvcnRUeXBlNTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxMSIgYmluZGluZz0idG5zOkJpbmRpbmc1MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEyIiBuYW1lPSJJbnB1dDUxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTIiIG5hbWU9Ik91dHB1dDUxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTMiIG5hbWU9IklucHV0NTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxMyIgbmFtZT0iT3V0cHV0NTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTMiIHR5cGU9InRuczpQb3J0VHlwZTUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxNCIgbmFtZT0iSW5wdXQ1MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE0IiBuYW1lPSJPdXRwdXQ1MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxNCIgdHlwZT0idG5zOlBvcnRUeXBlNTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxNCIgYmluZGluZz0idG5zOkJpbmRpbmc1MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE1IiBuYW1lPSJJbnB1dDUxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTUiIG5hbWU9Ik91dHB1dDUxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTYiIG5hbWU9IklucHV0NTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxNiIgbmFtZT0iT3V0cHV0NTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTYiIHR5cGU9InRuczpQb3J0VHlwZTUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxNyIgbmFtZT0iSW5wdXQ1MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE3IiBuYW1lPSJPdXRwdXQ1MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxNyIgdHlwZT0idG5zOlBvcnRUeXBlNTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxNyIgYmluZGluZz0idG5zOkJpbmRpbmc1MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE4IiBuYW1lPSJJbnB1dDUxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTgiIG5hbWU9Ik91dHB1dDUxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTkiIG5hbWU9IklucHV0NTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxOSIgbmFtZT0iT3V0cHV0NTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTkiIHR5cGU9InRuczpQb3J0VHlwZTUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyMCIgbmFtZT0iSW5wdXQ1MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIwIiBuYW1lPSJPdXRwdXQ1MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyMCIgdHlwZT0idG5zOlBvcnRUeXBlNTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyMCIgYmluZGluZz0idG5zOkJpbmRpbmc1MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIxIiBuYW1lPSJJbnB1dDUyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjEiIG5hbWU9Ik91dHB1dDUyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjIiIG5hbWU9IklucHV0NTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyMiIgbmFtZT0iT3V0cHV0NTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjIiIHR5cGU9InRuczpQb3J0VHlwZTUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyMyIgbmFtZT0iSW5wdXQ1MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIzIiBuYW1lPSJPdXRwdXQ1MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyMyIgdHlwZT0idG5zOlBvcnRUeXBlNTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyMyIgYmluZGluZz0idG5zOkJpbmRpbmc1MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI0IiBuYW1lPSJJbnB1dDUyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjQiIG5hbWU9Ik91dHB1dDUyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjUiIG5hbWU9IklucHV0NTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyNSIgbmFtZT0iT3V0cHV0NTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjUiIHR5cGU9InRuczpQb3J0VHlwZTUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyNiIgbmFtZT0iSW5wdXQ1MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI2IiBuYW1lPSJPdXRwdXQ1MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyNiIgdHlwZT0idG5zOlBvcnRUeXBlNTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyNiIgYmluZGluZz0idG5zOkJpbmRpbmc1MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI3IiBuYW1lPSJJbnB1dDUyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjciIG5hbWU9Ik91dHB1dDUyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjgiIG5hbWU9IklucHV0NTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyOCIgbmFtZT0iT3V0cHV0NTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjgiIHR5cGU9InRuczpQb3J0VHlwZTUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyOSIgbmFtZT0iSW5wdXQ1MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI5IiBuYW1lPSJPdXRwdXQ1MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyOSIgdHlwZT0idG5zOlBvcnRUeXBlNTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyOSIgYmluZGluZz0idG5zOkJpbmRpbmc1MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMwIiBuYW1lPSJJbnB1dDUzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzAiIG5hbWU9Ik91dHB1dDUzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzEiIG5hbWU9IklucHV0NTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzMSIgbmFtZT0iT3V0cHV0NTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzEiIHR5cGU9InRuczpQb3J0VHlwZTUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzMiIgbmFtZT0iSW5wdXQ1MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMyIiBuYW1lPSJPdXRwdXQ1MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzMiIgdHlwZT0idG5zOlBvcnRUeXBlNTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzMiIgYmluZGluZz0idG5zOkJpbmRpbmc1MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMzIiBuYW1lPSJJbnB1dDUzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzMiIG5hbWU9Ik91dHB1dDUzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzQiIG5hbWU9IklucHV0NTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzNCIgbmFtZT0iT3V0cHV0NTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzQiIHR5cGU9InRuczpQb3J0VHlwZTUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzNSIgbmFtZT0iSW5wdXQ1MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM1IiBuYW1lPSJPdXRwdXQ1MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzNSIgdHlwZT0idG5zOlBvcnRUeXBlNTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzNSIgYmluZGluZz0idG5zOkJpbmRpbmc1MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM2IiBuYW1lPSJJbnB1dDUzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzYiIG5hbWU9Ik91dHB1dDUzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzciIG5hbWU9IklucHV0NTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzNyIgbmFtZT0iT3V0cHV0NTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzciIHR5cGU9InRuczpQb3J0VHlwZTUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzOCIgbmFtZT0iSW5wdXQ1MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM4IiBuYW1lPSJPdXRwdXQ1MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzOCIgdHlwZT0idG5zOlBvcnRUeXBlNTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzOCIgYmluZGluZz0idG5zOkJpbmRpbmc1MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM5IiBuYW1lPSJJbnB1dDUzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzkiIG5hbWU9Ik91dHB1dDUzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDAiIG5hbWU9IklucHV0NTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0MCIgbmFtZT0iT3V0cHV0NTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDAiIHR5cGU9InRuczpQb3J0VHlwZTU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0MSIgbmFtZT0iSW5wdXQ1NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQxIiBuYW1lPSJPdXRwdXQ1NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0MSIgdHlwZT0idG5zOlBvcnRUeXBlNTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0MSIgYmluZGluZz0idG5zOkJpbmRpbmc1NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQyIiBuYW1lPSJJbnB1dDU0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDIiIG5hbWU9Ik91dHB1dDU0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDMiIG5hbWU9IklucHV0NTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0MyIgbmFtZT0iT3V0cHV0NTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDMiIHR5cGU9InRuczpQb3J0VHlwZTU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0NCIgbmFtZT0iSW5wdXQ1NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ0IiBuYW1lPSJPdXRwdXQ1NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ1IiBuYW1lPSJJbnB1dDU0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDUiIG5hbWU9Ik91dHB1dDU0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDYiIG5hbWU9IklucHV0NTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0NiIgbmFtZT0iT3V0cHV0NTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDYiIHR5cGU9InRuczpQb3J0VHlwZTU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0NyIgbmFtZT0iSW5wdXQ1NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ3IiBuYW1lPSJPdXRwdXQ1NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0NyIgdHlwZT0idG5zOlBvcnRUeXBlNTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ4IiBuYW1lPSJJbnB1dDU0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDgiIG5hbWU9Ik91dHB1dDU0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDkiIG5hbWU9IklucHV0NTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0OSIgbmFtZT0iT3V0cHV0NTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDkiIHR5cGU9InRuczpQb3J0VHlwZTU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1MCIgbmFtZT0iSW5wdXQ1NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUwIiBuYW1lPSJPdXRwdXQ1NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUxIiBuYW1lPSJJbnB1dDU1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTEiIG5hbWU9Ik91dHB1dDU1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTIiIG5hbWU9IklucHV0NTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1MiIgbmFtZT0iT3V0cHV0NTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTIiIHR5cGU9InRuczpQb3J0VHlwZTU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1MyIgbmFtZT0iSW5wdXQ1NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUzIiBuYW1lPSJPdXRwdXQ1NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU0IiBuYW1lPSJJbnB1dDU1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTQiIG5hbWU9Ik91dHB1dDU1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTUiIG5hbWU9IklucHV0NTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1NSIgbmFtZT0iT3V0cHV0NTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTUiIHR5cGU9InRuczpQb3J0VHlwZTU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1NiIgbmFtZT0iSW5wdXQ1NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU2IiBuYW1lPSJPdXRwdXQ1NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU3IiBuYW1lPSJJbnB1dDU1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTciIG5hbWU9Ik91dHB1dDU1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTgiIG5hbWU9IklucHV0NTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1OCIgbmFtZT0iT3V0cHV0NTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTgiIHR5cGU9InRuczpQb3J0VHlwZTU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1OSIgbmFtZT0iSW5wdXQ1NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU5IiBuYW1lPSJPdXRwdXQ1NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYwIiBuYW1lPSJJbnB1dDU2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjAiIG5hbWU9Ik91dHB1dDU2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjEiIG5hbWU9IklucHV0NTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2MSIgbmFtZT0iT3V0cHV0NTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjEiIHR5cGU9InRuczpQb3J0VHlwZTU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2MiIgbmFtZT0iSW5wdXQ1NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYyIiBuYW1lPSJPdXRwdXQ1NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2MiIgdHlwZT0idG5zOlBvcnRUeXBlNTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2MiIgYmluZGluZz0idG5zOkJpbmRpbmc1NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYzIiBuYW1lPSJJbnB1dDU2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjMiIG5hbWU9Ik91dHB1dDU2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjQiIG5hbWU9IklucHV0NTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2NCIgbmFtZT0iT3V0cHV0NTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjQiIHR5cGU9InRuczpQb3J0VHlwZTU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2NSIgbmFtZT0iSW5wdXQ1NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY1IiBuYW1lPSJPdXRwdXQ1NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2NSIgdHlwZT0idG5zOlBvcnRUeXBlNTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY2IiBuYW1lPSJJbnB1dDU2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjYiIG5hbWU9Ik91dHB1dDU2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjciIG5hbWU9IklucHV0NTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2NyIgbmFtZT0iT3V0cHV0NTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjciIHR5cGU9InRuczpQb3J0VHlwZTU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2OCIgbmFtZT0iSW5wdXQ1NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY4IiBuYW1lPSJPdXRwdXQ1NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2OCIgdHlwZT0idG5zOlBvcnRUeXBlNTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2OCIgYmluZGluZz0idG5zOkJpbmRpbmc1NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY5IiBuYW1lPSJJbnB1dDU2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjkiIG5hbWU9Ik91dHB1dDU2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzAiIG5hbWU9IklucHV0NTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3MCIgbmFtZT0iT3V0cHV0NTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzAiIHR5cGU9InRuczpQb3J0VHlwZTU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3MSIgbmFtZT0iSW5wdXQ1NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTcxIiBuYW1lPSJPdXRwdXQ1NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3MSIgdHlwZT0idG5zOlBvcnRUeXBlNTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3MSIgYmluZGluZz0idG5zOkJpbmRpbmc1NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTcyIiBuYW1lPSJJbnB1dDU3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzIiIG5hbWU9Ik91dHB1dDU3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzMiIG5hbWU9IklucHV0NTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3MyIgbmFtZT0iT3V0cHV0NTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzMiIHR5cGU9InRuczpQb3J0VHlwZTU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3NCIgbmFtZT0iSW5wdXQ1NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc0IiBuYW1lPSJPdXRwdXQ1NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3NCIgdHlwZT0idG5zOlBvcnRUeXBlNTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc1IiBuYW1lPSJJbnB1dDU3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzUiIG5hbWU9Ik91dHB1dDU3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzYiIG5hbWU9IklucHV0NTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3NiIgbmFtZT0iT3V0cHV0NTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzYiIHR5cGU9InRuczpQb3J0VHlwZTU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3NyIgbmFtZT0iSW5wdXQ1NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc3IiBuYW1lPSJPdXRwdXQ1NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3NyIgdHlwZT0idG5zOlBvcnRUeXBlNTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc4IiBuYW1lPSJJbnB1dDU3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzgiIG5hbWU9Ik91dHB1dDU3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzkiIG5hbWU9IklucHV0NTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3OSIgbmFtZT0iT3V0cHV0NTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzkiIHR5cGU9InRuczpQb3J0VHlwZTU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4MCIgbmFtZT0iSW5wdXQ1ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgwIiBuYW1lPSJPdXRwdXQ1ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4MCIgdHlwZT0idG5zOlBvcnRUeXBlNTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4MCIgYmluZGluZz0idG5zOkJpbmRpbmc1ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgxIiBuYW1lPSJJbnB1dDU4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODEiIG5hbWU9Ik91dHB1dDU4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODIiIG5hbWU9IklucHV0NTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4MiIgbmFtZT0iT3V0cHV0NTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODIiIHR5cGU9InRuczpQb3J0VHlwZTU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4MyIgbmFtZT0iSW5wdXQ1ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgzIiBuYW1lPSJPdXRwdXQ1ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4MyIgdHlwZT0idG5zOlBvcnRUeXBlNTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4MyIgYmluZGluZz0idG5zOkJpbmRpbmc1ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg0IiBuYW1lPSJJbnB1dDU4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODQiIG5hbWU9Ik91dHB1dDU4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODUiIG5hbWU9IklucHV0NTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4NSIgbmFtZT0iT3V0cHV0NTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODUiIHR5cGU9InRuczpQb3J0VHlwZTU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4NiIgbmFtZT0iSW5wdXQ1ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg2IiBuYW1lPSJPdXRwdXQ1ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4NiIgdHlwZT0idG5zOlBvcnRUeXBlNTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4NiIgYmluZGluZz0idG5zOkJpbmRpbmc1ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg3IiBuYW1lPSJJbnB1dDU4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODciIG5hbWU9Ik91dHB1dDU4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODgiIG5hbWU9IklucHV0NTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4OCIgbmFtZT0iT3V0cHV0NTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODgiIHR5cGU9InRuczpQb3J0VHlwZTU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4OSIgbmFtZT0iSW5wdXQ1ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg5IiBuYW1lPSJPdXRwdXQ1ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4OSIgdHlwZT0idG5zOlBvcnRUeXBlNTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4OSIgYmluZGluZz0idG5zOkJpbmRpbmc1ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkwIiBuYW1lPSJJbnB1dDU5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTAiIG5hbWU9Ik91dHB1dDU5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTEiIG5hbWU9IklucHV0NTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5MSIgbmFtZT0iT3V0cHV0NTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTEiIHR5cGU9InRuczpQb3J0VHlwZTU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5MiIgbmFtZT0iSW5wdXQ1OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkyIiBuYW1lPSJPdXRwdXQ1OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5MiIgdHlwZT0idG5zOlBvcnRUeXBlNTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5MiIgYmluZGluZz0idG5zOkJpbmRpbmc1OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkzIiBuYW1lPSJJbnB1dDU5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTMiIG5hbWU9Ik91dHB1dDU5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTQiIG5hbWU9IklucHV0NTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5NCIgbmFtZT0iT3V0cHV0NTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTQiIHR5cGU9InRuczpQb3J0VHlwZTU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5NSIgbmFtZT0iSW5wdXQ1OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk1IiBuYW1lPSJPdXRwdXQ1OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5NSIgdHlwZT0idG5zOlBvcnRUeXBlNTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5NSIgYmluZGluZz0idG5zOkJpbmRpbmc1OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk2IiBuYW1lPSJJbnB1dDU5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTYiIG5hbWU9Ik91dHB1dDU5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTciIG5hbWU9IklucHV0NTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5NyIgbmFtZT0iT3V0cHV0NTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTciIHR5cGU9InRuczpQb3J0VHlwZTU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5OCIgbmFtZT0iSW5wdXQ1OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk4IiBuYW1lPSJPdXRwdXQ1OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5OCIgdHlwZT0idG5zOlBvcnRUeXBlNTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk5IiBuYW1lPSJJbnB1dDU5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTkiIG5hbWU9Ik91dHB1dDU5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDAiIG5hbWU9IklucHV0NjAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwMCIgbmFtZT0iT3V0cHV0NjAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDAiIHR5cGU9InRuczpQb3J0VHlwZTYwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwMSIgbmFtZT0iSW5wdXQ2MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAxIiBuYW1lPSJPdXRwdXQ2MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwMSIgdHlwZT0idG5zOlBvcnRUeXBlNjAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwMSIgYmluZGluZz0idG5zOkJpbmRpbmc2MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAyIiBuYW1lPSJJbnB1dDYwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDIiIG5hbWU9Ik91dHB1dDYwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDMiIG5hbWU9IklucHV0NjAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwMyIgbmFtZT0iT3V0cHV0NjAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDMiIHR5cGU9InRuczpQb3J0VHlwZTYwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwNCIgbmFtZT0iSW5wdXQ2MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA0IiBuYW1lPSJPdXRwdXQ2MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwNCIgdHlwZT0idG5zOlBvcnRUeXBlNjA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwNCIgYmluZGluZz0idG5zOkJpbmRpbmc2MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA1IiBuYW1lPSJJbnB1dDYwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDUiIG5hbWU9Ik91dHB1dDYwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDYiIG5hbWU9IklucHV0NjA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwNiIgbmFtZT0iT3V0cHV0NjA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDYiIHR5cGU9InRuczpQb3J0VHlwZTYwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwNyIgbmFtZT0iSW5wdXQ2MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA3IiBuYW1lPSJPdXRwdXQ2MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwNyIgdHlwZT0idG5zOlBvcnRUeXBlNjA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwNyIgYmluZGluZz0idG5zOkJpbmRpbmc2MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA4IiBuYW1lPSJJbnB1dDYwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDgiIG5hbWU9Ik91dHB1dDYwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDkiIG5hbWU9IklucHV0NjA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwOSIgbmFtZT0iT3V0cHV0NjA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDkiIHR5cGU9InRuczpQb3J0VHlwZTYwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxMCIgbmFtZT0iSW5wdXQ2MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEwIiBuYW1lPSJPdXRwdXQ2MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxMCIgdHlwZT0idG5zOlBvcnRUeXBlNjEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxMCIgYmluZGluZz0idG5zOkJpbmRpbmc2MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjExIiBuYW1lPSJJbnB1dDYxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTEiIG5hbWU9Ik91dHB1dDYxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjExIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTIiIG5hbWU9IklucHV0NjEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxMiIgbmFtZT0iT3V0cHV0NjEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTIiIHR5cGU9InRuczpQb3J0VHlwZTYxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxMyIgbmFtZT0iSW5wdXQ2MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEzIiBuYW1lPSJPdXRwdXQ2MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxMyIgdHlwZT0idG5zOlBvcnRUeXBlNjEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxMyIgYmluZGluZz0idG5zOkJpbmRpbmc2MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE0IiBuYW1lPSJJbnB1dDYxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTQiIG5hbWU9Ik91dHB1dDYxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTUiIG5hbWU9IklucHV0NjE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxNSIgbmFtZT0iT3V0cHV0NjE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTUiIHR5cGU9InRuczpQb3J0VHlwZTYxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxNiIgbmFtZT0iSW5wdXQ2MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE2IiBuYW1lPSJPdXRwdXQ2MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxNiIgdHlwZT0idG5zOlBvcnRUeXBlNjE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxNiIgYmluZGluZz0idG5zOkJpbmRpbmc2MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE3IiBuYW1lPSJJbnB1dDYxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTciIG5hbWU9Ik91dHB1dDYxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTgiIG5hbWU9IklucHV0NjE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxOCIgbmFtZT0iT3V0cHV0NjE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTgiIHR5cGU9InRuczpQb3J0VHlwZTYxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxOSIgbmFtZT0iSW5wdXQ2MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE5IiBuYW1lPSJPdXRwdXQ2MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxOSIgdHlwZT0idG5zOlBvcnRUeXBlNjE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxOSIgYmluZGluZz0idG5zOkJpbmRpbmc2MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIwIiBuYW1lPSJJbnB1dDYyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjAiIG5hbWU9Ik91dHB1dDYyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjEiIG5hbWU9IklucHV0NjIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyMSIgbmFtZT0iT3V0cHV0NjIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjEiIHR5cGU9InRuczpQb3J0VHlwZTYyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyMiIgbmFtZT0iSW5wdXQ2MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIyIiBuYW1lPSJPdXRwdXQ2MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyMiIgdHlwZT0idG5zOlBvcnRUeXBlNjIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyMiIgYmluZGluZz0idG5zOkJpbmRpbmc2MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIzIiBuYW1lPSJJbnB1dDYyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjMiIG5hbWU9Ik91dHB1dDYyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjQiIG5hbWU9IklucHV0NjI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyNCIgbmFtZT0iT3V0cHV0NjI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjQiIHR5cGU9InRuczpQb3J0VHlwZTYyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyNSIgbmFtZT0iSW5wdXQ2MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI1IiBuYW1lPSJPdXRwdXQ2MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyNSIgdHlwZT0idG5zOlBvcnRUeXBlNjI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyNSIgYmluZGluZz0idG5zOkJpbmRpbmc2MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI2IiBuYW1lPSJJbnB1dDYyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjYiIG5hbWU9Ik91dHB1dDYyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjciIG5hbWU9IklucHV0NjI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyNyIgbmFtZT0iT3V0cHV0NjI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjciIHR5cGU9InRuczpQb3J0VHlwZTYyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyOCIgbmFtZT0iSW5wdXQ2MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI4IiBuYW1lPSJPdXRwdXQ2MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyOCIgdHlwZT0idG5zOlBvcnRUeXBlNjI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyOCIgYmluZGluZz0idG5zOkJpbmRpbmc2MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI5IiBuYW1lPSJJbnB1dDYyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjkiIG5hbWU9Ik91dHB1dDYyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzAiIG5hbWU9IklucHV0NjMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzMCIgbmFtZT0iT3V0cHV0NjMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzAiIHR5cGU9InRuczpQb3J0VHlwZTYzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzMSIgbmFtZT0iSW5wdXQ2MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMxIiBuYW1lPSJPdXRwdXQ2MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzMSIgdHlwZT0idG5zOlBvcnRUeXBlNjMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzMSIgYmluZGluZz0idG5zOkJpbmRpbmc2MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMyIiBuYW1lPSJJbnB1dDYzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzIiIG5hbWU9Ik91dHB1dDYzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzMiIG5hbWU9IklucHV0NjMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzMyIgbmFtZT0iT3V0cHV0NjMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzMiIHR5cGU9InRuczpQb3J0VHlwZTYzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzNCIgbmFtZT0iSW5wdXQ2MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM0IiBuYW1lPSJPdXRwdXQ2MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzNCIgdHlwZT0idG5zOlBvcnRUeXBlNjM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzNCIgYmluZGluZz0idG5zOkJpbmRpbmc2MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM1IiBuYW1lPSJJbnB1dDYzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzUiIG5hbWU9Ik91dHB1dDYzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzYiIG5hbWU9IklucHV0NjM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzNiIgbmFtZT0iT3V0cHV0NjM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzYiIHR5cGU9InRuczpQb3J0VHlwZTYzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzNyIgbmFtZT0iSW5wdXQ2MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM3IiBuYW1lPSJPdXRwdXQ2MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzNyIgdHlwZT0idG5zOlBvcnRUeXBlNjM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzNyIgYmluZGluZz0idG5zOkJpbmRpbmc2MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM4IiBuYW1lPSJJbnB1dDYzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzgiIG5hbWU9Ik91dHB1dDYzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzkiIG5hbWU9IklucHV0NjM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzOSIgbmFtZT0iT3V0cHV0NjM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzkiIHR5cGU9InRuczpQb3J0VHlwZTYzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0MCIgbmFtZT0iSW5wdXQ2NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQwIiBuYW1lPSJPdXRwdXQ2NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0MCIgdHlwZT0idG5zOlBvcnRUeXBlNjQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0MCIgYmluZGluZz0idG5zOkJpbmRpbmc2NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQxIiBuYW1lPSJJbnB1dDY0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDEiIG5hbWU9Ik91dHB1dDY0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDIiIG5hbWU9IklucHV0NjQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0MiIgbmFtZT0iT3V0cHV0NjQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDIiIHR5cGU9InRuczpQb3J0VHlwZTY0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0MyIgbmFtZT0iSW5wdXQ2NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQzIiBuYW1lPSJPdXRwdXQ2NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0MyIgdHlwZT0idG5zOlBvcnRUeXBlNjQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0MyIgYmluZGluZz0idG5zOkJpbmRpbmc2NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ0IiBuYW1lPSJJbnB1dDY0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDQiIG5hbWU9Ik91dHB1dDY0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDUiIG5hbWU9IklucHV0NjQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0NSIgbmFtZT0iT3V0cHV0NjQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDUiIHR5cGU9InRuczpQb3J0VHlwZTY0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0NiIgbmFtZT0iSW5wdXQ2NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ2IiBuYW1lPSJPdXRwdXQ2NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0NiIgdHlwZT0idG5zOlBvcnRUeXBlNjQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ3IiBuYW1lPSJJbnB1dDY0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDciIG5hbWU9Ik91dHB1dDY0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDgiIG5hbWU9IklucHV0NjQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0OCIgbmFtZT0iT3V0cHV0NjQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDgiIHR5cGU9InRuczpQb3J0VHlwZTY0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0OSIgbmFtZT0iSW5wdXQ2NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ5IiBuYW1lPSJPdXRwdXQ2NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0OSIgdHlwZT0idG5zOlBvcnRUeXBlNjQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0OSIgYmluZGluZz0idG5zOkJpbmRpbmc2NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUwIiBuYW1lPSJJbnB1dDY1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTAiIG5hbWU9Ik91dHB1dDY1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTEiIG5hbWU9IklucHV0NjUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1MSIgbmFtZT0iT3V0cHV0NjUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTEiIHR5cGU9InRuczpQb3J0VHlwZTY1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1MiIgbmFtZT0iSW5wdXQ2NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUyIiBuYW1lPSJPdXRwdXQ2NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1MiIgdHlwZT0idG5zOlBvcnRUeXBlNjUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1MiIgYmluZGluZz0idG5zOkJpbmRpbmc2NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUzIiBuYW1lPSJJbnB1dDY1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTMiIG5hbWU9Ik91dHB1dDY1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTQiIG5hbWU9IklucHV0NjU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1NCIgbmFtZT0iT3V0cHV0NjU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTQiIHR5cGU9InRuczpQb3J0VHlwZTY1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1NSIgbmFtZT0iSW5wdXQ2NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU1IiBuYW1lPSJPdXRwdXQ2NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1NSIgdHlwZT0idG5zOlBvcnRUeXBlNjU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU2IiBuYW1lPSJJbnB1dDY1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTYiIG5hbWU9Ik91dHB1dDY1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTciIG5hbWU9IklucHV0NjU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1NyIgbmFtZT0iT3V0cHV0NjU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTciIHR5cGU9InRuczpQb3J0VHlwZTY1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNjU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1OCIgbmFtZT0iSW5wdXQ2NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU4IiBuYW1lPSJPdXRwdXQ2NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1OCIgdHlwZT0idG5zOlBvcnRUeXBlNjU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1OCIgYmluZGluZz0idG5zOkJpbmRpbmc2NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU5IiBuYW1lPSJJbnB1dDY1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTkiIG5hbWU9Ik91dHB1dDY1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjAiIG5hbWU9IklucHV0NjYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2MCIgbmFtZT0iT3V0cHV0NjYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjAiIHR5cGU9InRuczpQb3J0VHlwZTY2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2MSIgbmFtZT0iSW5wdXQ2NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYxIiBuYW1lPSJPdXRwdXQ2NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYyIiBuYW1lPSJJbnB1dDY2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjIiIG5hbWU9Ik91dHB1dDY2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjMiIG5hbWU9IklucHV0NjYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2MyIgbmFtZT0iT3V0cHV0NjYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjMiIHR5cGU9InRuczpQb3J0VHlwZTY2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2NCIgbmFtZT0iSW5wdXQ2NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY0IiBuYW1lPSJPdXRwdXQ2NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY1IiBuYW1lPSJJbnB1dDY2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjUiIG5hbWU9Ik91dHB1dDY2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjYiIG5hbWU9IklucHV0NjY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2NiIgbmFtZT0iT3V0cHV0NjY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjYiIHR5cGU9InRuczpQb3J0VHlwZTY2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2NyIgbmFtZT0iSW5wdXQ2NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY3IiBuYW1lPSJPdXRwdXQ2NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY4IiBuYW1lPSJJbnB1dDY2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjgiIG5hbWU9Ik91dHB1dDY2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjkiIG5hbWU9IklucHV0NjY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2OSIgbmFtZT0iT3V0cHV0NjY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjkiIHR5cGU9InRuczpQb3J0VHlwZTY2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3MCIgbmFtZT0iSW5wdXQ2NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjcwIiBuYW1lPSJPdXRwdXQ2NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3MCIgdHlwZT0idG5zOlBvcnRUeXBlNjcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3MCIgYmluZGluZz0idG5zOkJpbmRpbmc2NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjcxIiBuYW1lPSJJbnB1dDY3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzEiIG5hbWU9Ik91dHB1dDY3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzIiIG5hbWU9IklucHV0NjcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3MiIgbmFtZT0iT3V0cHV0NjcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzIiIHR5cGU9InRuczpQb3J0VHlwZTY3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3MyIgbmFtZT0iSW5wdXQ2NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjczIiBuYW1lPSJPdXRwdXQ2NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3MyIgdHlwZT0idG5zOlBvcnRUeXBlNjczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3MyIgYmluZGluZz0idG5zOkJpbmRpbmc2NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc0IiBuYW1lPSJJbnB1dDY3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzQiIG5hbWU9Ik91dHB1dDY3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzUiIG5hbWU9IklucHV0Njc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3NSIgbmFtZT0iT3V0cHV0Njc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzUiIHR5cGU9InRuczpQb3J0VHlwZTY3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3NiIgbmFtZT0iSW5wdXQ2NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc2IiBuYW1lPSJPdXRwdXQ2NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3NiIgdHlwZT0idG5zOlBvcnRUeXBlNjc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc3IiBuYW1lPSJJbnB1dDY3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzciIG5hbWU9Ik91dHB1dDY3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzgiIG5hbWU9IklucHV0Njc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3OCIgbmFtZT0iT3V0cHV0Njc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzgiIHR5cGU9InRuczpQb3J0VHlwZTY3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3OSIgbmFtZT0iSW5wdXQ2NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc5IiBuYW1lPSJPdXRwdXQ2NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3OSIgdHlwZT0idG5zOlBvcnRUeXBlNjc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3OSIgYmluZGluZz0idG5zOkJpbmRpbmc2NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgwIiBuYW1lPSJJbnB1dDY4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODAiIG5hbWU9Ik91dHB1dDY4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODEiIG5hbWU9IklucHV0NjgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4MSIgbmFtZT0iT3V0cHV0NjgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODEiIHR5cGU9InRuczpQb3J0VHlwZTY4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4MiIgbmFtZT0iSW5wdXQ2ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgyIiBuYW1lPSJPdXRwdXQ2ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4MiIgdHlwZT0idG5zOlBvcnRUeXBlNjgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4MiIgYmluZGluZz0idG5zOkJpbmRpbmc2ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgzIiBuYW1lPSJJbnB1dDY4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODMiIG5hbWU9Ik91dHB1dDY4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODQiIG5hbWU9IklucHV0Njg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4NCIgbmFtZT0iT3V0cHV0Njg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODQiIHR5cGU9InRuczpQb3J0VHlwZTY4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4NSIgbmFtZT0iSW5wdXQ2ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg1IiBuYW1lPSJPdXRwdXQ2ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4NSIgdHlwZT0idG5zOlBvcnRUeXBlNjg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4NSIgYmluZGluZz0idG5zOkJpbmRpbmc2ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg2IiBuYW1lPSJJbnB1dDY4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODYiIG5hbWU9Ik91dHB1dDY4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODciIG5hbWU9IklucHV0Njg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4NyIgbmFtZT0iT3V0cHV0Njg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODciIHR5cGU9InRuczpQb3J0VHlwZTY4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODciIGJpbmRpbmc9InRuczpCaW5kaW5nNjg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4OCIgbmFtZT0iSW5wdXQ2ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg4IiBuYW1lPSJPdXRwdXQ2ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4OCIgdHlwZT0idG5zOlBvcnRUeXBlNjg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4OCIgYmluZGluZz0idG5zOkJpbmRpbmc2ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg5IiBuYW1lPSJJbnB1dDY4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODkiIG5hbWU9Ik91dHB1dDY4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTAiIG5hbWU9IklucHV0NjkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5MCIgbmFtZT0iT3V0cHV0NjkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTAiIHR5cGU9InRuczpQb3J0VHlwZTY5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5MSIgbmFtZT0iSW5wdXQ2OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkxIiBuYW1lPSJPdXRwdXQ2OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5MSIgdHlwZT0idG5zOlBvcnRUeXBlNjkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5MSIgYmluZGluZz0idG5zOkJpbmRpbmc2OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkyIiBuYW1lPSJJbnB1dDY5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTIiIG5hbWU9Ik91dHB1dDY5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTMiIG5hbWU9IklucHV0NjkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5MyIgbmFtZT0iT3V0cHV0NjkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTMiIHR5cGU9InRuczpQb3J0VHlwZTY5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5NCIgbmFtZT0iSW5wdXQ2OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk0IiBuYW1lPSJPdXRwdXQ2OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5NCIgdHlwZT0idG5zOlBvcnRUeXBlNjk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5NCIgYmluZGluZz0idG5zOkJpbmRpbmc2OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk1IiBuYW1lPSJJbnB1dDY5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTUiIG5hbWU9Ik91dHB1dDY5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTYiIG5hbWU9IklucHV0Njk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5NiIgbmFtZT0iT3V0cHV0Njk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTYiIHR5cGU9InRuczpQb3J0VHlwZTY5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5NyIgbmFtZT0iSW5wdXQ2OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk3IiBuYW1lPSJPdXRwdXQ2OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5NyIgdHlwZT0idG5zOlBvcnRUeXBlNjk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5NyIgYmluZGluZz0idG5zOkJpbmRpbmc2OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk4IiBuYW1lPSJJbnB1dDY5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTgiIG5hbWU9Ik91dHB1dDY5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTkiIG5hbWU9IklucHV0Njk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5OSIgbmFtZT0iT3V0cHV0Njk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTkiIHR5cGU9InRuczpQb3J0VHlwZTY5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwMCIgbmFtZT0iSW5wdXQ3MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAwIiBuYW1lPSJPdXRwdXQ3MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwMCIgdHlwZT0idG5zOlBvcnRUeXBlNzAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwMCIgYmluZGluZz0idG5zOkJpbmRpbmc3MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAxIiBuYW1lPSJJbnB1dDcwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDEiIG5hbWU9Ik91dHB1dDcwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDIiIG5hbWU9IklucHV0NzAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwMiIgbmFtZT0iT3V0cHV0NzAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDIiIHR5cGU9InRuczpQb3J0VHlwZTcwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwMyIgbmFtZT0iSW5wdXQ3MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAzIiBuYW1lPSJPdXRwdXQ3MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwMyIgdHlwZT0idG5zOlBvcnRUeXBlNzAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwMyIgYmluZGluZz0idG5zOkJpbmRpbmc3MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA0IiBuYW1lPSJJbnB1dDcwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDQiIG5hbWU9Ik91dHB1dDcwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDUiIG5hbWU9IklucHV0NzA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwNSIgbmFtZT0iT3V0cHV0NzA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDUiIHR5cGU9InRuczpQb3J0VHlwZTcwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwNiIgbmFtZT0iSW5wdXQ3MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA2IiBuYW1lPSJPdXRwdXQ3MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwNiIgdHlwZT0idG5zOlBvcnRUeXBlNzA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwNiIgYmluZGluZz0idG5zOkJpbmRpbmc3MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA3IiBuYW1lPSJJbnB1dDcwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDciIG5hbWU9Ik91dHB1dDcwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDgiIG5hbWU9IklucHV0NzA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwOCIgbmFtZT0iT3V0cHV0NzA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDgiIHR5cGU9InRuczpQb3J0VHlwZTcwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwOSIgbmFtZT0iSW5wdXQ3MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA5IiBuYW1lPSJPdXRwdXQ3MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwOSIgdHlwZT0idG5zOlBvcnRUeXBlNzA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwOSIgYmluZGluZz0idG5zOkJpbmRpbmc3MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEwIiBuYW1lPSJJbnB1dDcxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTAiIG5hbWU9Ik91dHB1dDcxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTEiIG5hbWU9IklucHV0NzExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxMSIgbmFtZT0iT3V0cHV0NzExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTEiIHR5cGU9InRuczpQb3J0VHlwZTcxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxMiIgbmFtZT0iSW5wdXQ3MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEyIiBuYW1lPSJPdXRwdXQ3MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxMiIgdHlwZT0idG5zOlBvcnRUeXBlNzEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxMiIgYmluZGluZz0idG5zOkJpbmRpbmc3MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEzIiBuYW1lPSJJbnB1dDcxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTMiIG5hbWU9Ik91dHB1dDcxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTQiIG5hbWU9IklucHV0NzE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxNCIgbmFtZT0iT3V0cHV0NzE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTQiIHR5cGU9InRuczpQb3J0VHlwZTcxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxNSIgbmFtZT0iSW5wdXQ3MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE1IiBuYW1lPSJPdXRwdXQ3MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxNSIgdHlwZT0idG5zOlBvcnRUeXBlNzE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxNSIgYmluZGluZz0idG5zOkJpbmRpbmc3MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE2IiBuYW1lPSJJbnB1dDcxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTYiIG5hbWU9Ik91dHB1dDcxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTciIG5hbWU9IklucHV0NzE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxNyIgbmFtZT0iT3V0cHV0NzE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTciIHR5cGU9InRuczpQb3J0VHlwZTcxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxOCIgbmFtZT0iSW5wdXQ3MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE4IiBuYW1lPSJPdXRwdXQ3MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxOCIgdHlwZT0idG5zOlBvcnRUeXBlNzE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxOCIgYmluZGluZz0idG5zOkJpbmRpbmc3MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE5IiBuYW1lPSJJbnB1dDcxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTkiIG5hbWU9Ik91dHB1dDcxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjAiIG5hbWU9IklucHV0NzIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyMCIgbmFtZT0iT3V0cHV0NzIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjAiIHR5cGU9InRuczpQb3J0VHlwZTcyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyMSIgbmFtZT0iSW5wdXQ3MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIxIiBuYW1lPSJPdXRwdXQ3MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyMSIgdHlwZT0idG5zOlBvcnRUeXBlNzIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyMSIgYmluZGluZz0idG5zOkJpbmRpbmc3MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIyIiBuYW1lPSJJbnB1dDcyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjIiIG5hbWU9Ik91dHB1dDcyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjMiIG5hbWU9IklucHV0NzIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyMyIgbmFtZT0iT3V0cHV0NzIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjMiIHR5cGU9InRuczpQb3J0VHlwZTcyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyNCIgbmFtZT0iSW5wdXQ3MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI0IiBuYW1lPSJPdXRwdXQ3MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyNCIgdHlwZT0idG5zOlBvcnRUeXBlNzI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyNCIgYmluZGluZz0idG5zOkJpbmRpbmc3MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI1IiBuYW1lPSJJbnB1dDcyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjUiIG5hbWU9Ik91dHB1dDcyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjYiIG5hbWU9IklucHV0NzI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyNiIgbmFtZT0iT3V0cHV0NzI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjYiIHR5cGU9InRuczpQb3J0VHlwZTcyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyNyIgbmFtZT0iSW5wdXQ3MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI3IiBuYW1lPSJPdXRwdXQ3MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyNyIgdHlwZT0idG5zOlBvcnRUeXBlNzI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyNyIgYmluZGluZz0idG5zOkJpbmRpbmc3MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI4IiBuYW1lPSJJbnB1dDcyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjgiIG5hbWU9Ik91dHB1dDcyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjkiIG5hbWU9IklucHV0NzI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyOSIgbmFtZT0iT3V0cHV0NzI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjkiIHR5cGU9InRuczpQb3J0VHlwZTcyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczMCIgbmFtZT0iSW5wdXQ3MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMwIiBuYW1lPSJPdXRwdXQ3MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczMCIgdHlwZT0idG5zOlBvcnRUeXBlNzMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczMCIgYmluZGluZz0idG5zOkJpbmRpbmc3MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMxIiBuYW1lPSJJbnB1dDczMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzEiIG5hbWU9Ik91dHB1dDczMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzIiIG5hbWU9IklucHV0NzMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczMiIgbmFtZT0iT3V0cHV0NzMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzIiIHR5cGU9InRuczpQb3J0VHlwZTczMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczMyIgbmFtZT0iSW5wdXQ3MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMzIiBuYW1lPSJPdXRwdXQ3MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczMyIgdHlwZT0idG5zOlBvcnRUeXBlNzMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczMyIgYmluZGluZz0idG5zOkJpbmRpbmc3MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM0IiBuYW1lPSJJbnB1dDczNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzQiIG5hbWU9Ik91dHB1dDczNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzUiIG5hbWU9IklucHV0NzM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczNSIgbmFtZT0iT3V0cHV0NzM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzUiIHR5cGU9InRuczpQb3J0VHlwZTczNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczNiIgbmFtZT0iSW5wdXQ3MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM2IiBuYW1lPSJPdXRwdXQ3MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczNiIgdHlwZT0idG5zOlBvcnRUeXBlNzM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczNiIgYmluZGluZz0idG5zOkJpbmRpbmc3MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM3IiBuYW1lPSJJbnB1dDczNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzciIG5hbWU9Ik91dHB1dDczNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzgiIG5hbWU9IklucHV0NzM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczOCIgbmFtZT0iT3V0cHV0NzM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzgiIHR5cGU9InRuczpQb3J0VHlwZTczOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczOSIgbmFtZT0iSW5wdXQ3MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM5IiBuYW1lPSJPdXRwdXQ3MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczOSIgdHlwZT0idG5zOlBvcnRUeXBlNzM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczOSIgYmluZGluZz0idG5zOkJpbmRpbmc3MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQwIiBuYW1lPSJJbnB1dDc0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDAiIG5hbWU9Ik91dHB1dDc0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDEiIG5hbWU9IklucHV0NzQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0MSIgbmFtZT0iT3V0cHV0NzQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDEiIHR5cGU9InRuczpQb3J0VHlwZTc0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0MiIgbmFtZT0iSW5wdXQ3NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQyIiBuYW1lPSJPdXRwdXQ3NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNzQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0MiIgYmluZGluZz0idG5zOkJpbmRpbmc3NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQzIiBuYW1lPSJJbnB1dDc0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDMiIG5hbWU9Ik91dHB1dDc0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDQiIG5hbWU9IklucHV0NzQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0NCIgbmFtZT0iT3V0cHV0NzQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDQiIHR5cGU9InRuczpQb3J0VHlwZTc0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0NSIgbmFtZT0iSW5wdXQ3NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ1IiBuYW1lPSJPdXRwdXQ3NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNzQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ2IiBuYW1lPSJJbnB1dDc0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDYiIG5hbWU9Ik91dHB1dDc0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDciIG5hbWU9IklucHV0NzQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0NyIgbmFtZT0iT3V0cHV0NzQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDciIHR5cGU9InRuczpQb3J0VHlwZTc0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0OCIgbmFtZT0iSW5wdXQ3NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ4IiBuYW1lPSJPdXRwdXQ3NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNzQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0OCIgYmluZGluZz0idG5zOkJpbmRpbmc3NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ5IiBuYW1lPSJJbnB1dDc0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDkiIG5hbWU9Ik91dHB1dDc0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTAiIG5hbWU9IklucHV0NzUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1MCIgbmFtZT0iT3V0cHV0NzUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTAiIHR5cGU9InRuczpQb3J0VHlwZTc1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1MSIgbmFtZT0iSW5wdXQ3NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUxIiBuYW1lPSJPdXRwdXQ3NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNzUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1MSIgYmluZGluZz0idG5zOkJpbmRpbmc3NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUyIiBuYW1lPSJJbnB1dDc1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTIiIG5hbWU9Ik91dHB1dDc1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTMiIG5hbWU9IklucHV0NzUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1MyIgbmFtZT0iT3V0cHV0NzUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTMiIHR5cGU9InRuczpQb3J0VHlwZTc1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1NCIgbmFtZT0iSW5wdXQ3NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU0IiBuYW1lPSJPdXRwdXQ3NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNzU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU1IiBuYW1lPSJJbnB1dDc1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTUiIG5hbWU9Ik91dHB1dDc1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTYiIG5hbWU9IklucHV0NzU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1NiIgbmFtZT0iT3V0cHV0NzU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTYiIHR5cGU9InRuczpQb3J0VHlwZTc1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1NyIgbmFtZT0iSW5wdXQ3NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU3IiBuYW1lPSJPdXRwdXQ3NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNzU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU4IiBuYW1lPSJJbnB1dDc1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTgiIG5hbWU9Ik91dHB1dDc1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTkiIG5hbWU9IklucHV0NzU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1OSIgbmFtZT0iT3V0cHV0NzU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTkiIHR5cGU9InRuczpQb3J0VHlwZTc1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2MCIgbmFtZT0iSW5wdXQ3NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYwIiBuYW1lPSJPdXRwdXQ3NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNzYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2MCIgYmluZGluZz0idG5zOkJpbmRpbmc3NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYxIiBuYW1lPSJJbnB1dDc2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjEiIG5hbWU9Ik91dHB1dDc2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjIiIG5hbWU9IklucHV0NzYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2MiIgbmFtZT0iT3V0cHV0NzYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjIiIHR5cGU9InRuczpQb3J0VHlwZTc2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2MyIgbmFtZT0iSW5wdXQ3NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYzIiBuYW1lPSJPdXRwdXQ3NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNzYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2MyIgYmluZGluZz0idG5zOkJpbmRpbmc3NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY0IiBuYW1lPSJJbnB1dDc2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjQiIG5hbWU9Ik91dHB1dDc2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjUiIG5hbWU9IklucHV0NzY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2NSIgbmFtZT0iT3V0cHV0NzY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjUiIHR5cGU9InRuczpQb3J0VHlwZTc2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2NiIgbmFtZT0iSW5wdXQ3NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY2IiBuYW1lPSJPdXRwdXQ3NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNzY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY3IiBuYW1lPSJJbnB1dDc2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjciIG5hbWU9Ik91dHB1dDc2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjgiIG5hbWU9IklucHV0NzY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2OCIgbmFtZT0iT3V0cHV0NzY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjgiIHR5cGU9InRuczpQb3J0VHlwZTc2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2OSIgbmFtZT0iSW5wdXQ3NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY5IiBuYW1lPSJPdXRwdXQ3NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNzY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2OSIgYmluZGluZz0idG5zOkJpbmRpbmc3NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzcwIiBuYW1lPSJJbnB1dDc3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzAiIG5hbWU9Ik91dHB1dDc3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzEiIG5hbWU9IklucHV0NzcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3MSIgbmFtZT0iT3V0cHV0NzcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzEiIHR5cGU9InRuczpQb3J0VHlwZTc3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3MiIgbmFtZT0iSW5wdXQ3NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzcyIiBuYW1lPSJPdXRwdXQ3NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzczIiBuYW1lPSJJbnB1dDc3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzMiIG5hbWU9Ik91dHB1dDc3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzQiIG5hbWU9IklucHV0Nzc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3NCIgbmFtZT0iT3V0cHV0Nzc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzQiIHR5cGU9InRuczpQb3J0VHlwZTc3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3NSIgbmFtZT0iSW5wdXQ3NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc1IiBuYW1lPSJPdXRwdXQ3NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc2IiBuYW1lPSJJbnB1dDc3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzYiIG5hbWU9Ik91dHB1dDc3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzciIG5hbWU9IklucHV0Nzc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3NyIgbmFtZT0iT3V0cHV0Nzc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzciIHR5cGU9InRuczpQb3J0VHlwZTc3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3OCIgbmFtZT0iSW5wdXQ3NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc4IiBuYW1lPSJPdXRwdXQ3NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc5IiBuYW1lPSJJbnB1dDc3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzkiIG5hbWU9Ik91dHB1dDc3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODAiIG5hbWU9IklucHV0NzgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4MCIgbmFtZT0iT3V0cHV0NzgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODAiIHR5cGU9InRuczpQb3J0VHlwZTc4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4MSIgbmFtZT0iSW5wdXQ3ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgxIiBuYW1lPSJPdXRwdXQ3ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4MSIgdHlwZT0idG5zOlBvcnRUeXBlNzgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4MSIgYmluZGluZz0idG5zOkJpbmRpbmc3ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgyIiBuYW1lPSJJbnB1dDc4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODIiIG5hbWU9Ik91dHB1dDc4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODMiIG5hbWU9IklucHV0NzgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4MyIgbmFtZT0iT3V0cHV0NzgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODMiIHR5cGU9InRuczpQb3J0VHlwZTc4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4NCIgbmFtZT0iSW5wdXQ3ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg0IiBuYW1lPSJPdXRwdXQ3ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4NCIgdHlwZT0idG5zOlBvcnRUeXBlNzg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4NCIgYmluZGluZz0idG5zOkJpbmRpbmc3ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg1IiBuYW1lPSJJbnB1dDc4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODUiIG5hbWU9Ik91dHB1dDc4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODYiIG5hbWU9IklucHV0Nzg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4NiIgbmFtZT0iT3V0cHV0Nzg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODYiIHR5cGU9InRuczpQb3J0VHlwZTc4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4NyIgbmFtZT0iSW5wdXQ3ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg3IiBuYW1lPSJPdXRwdXQ3ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4NyIgdHlwZT0idG5zOlBvcnRUeXBlNzg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4NyIgYmluZGluZz0idG5zOkJpbmRpbmc3ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg4IiBuYW1lPSJJbnB1dDc4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODgiIG5hbWU9Ik91dHB1dDc4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODkiIG5hbWU9IklucHV0Nzg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4OSIgbmFtZT0iT3V0cHV0Nzg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODkiIHR5cGU9InRuczpQb3J0VHlwZTc4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5MCIgbmFtZT0iSW5wdXQ3OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkwIiBuYW1lPSJPdXRwdXQ3OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5MCIgdHlwZT0idG5zOlBvcnRUeXBlNzkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5MCIgYmluZGluZz0idG5zOkJpbmRpbmc3OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkxIiBuYW1lPSJJbnB1dDc5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTEiIG5hbWU9Ik91dHB1dDc5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTIiIG5hbWU9IklucHV0NzkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5MiIgbmFtZT0iT3V0cHV0NzkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTIiIHR5cGU9InRuczpQb3J0VHlwZTc5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5MyIgbmFtZT0iSW5wdXQ3OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkzIiBuYW1lPSJPdXRwdXQ3OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5MyIgdHlwZT0idG5zOlBvcnRUeXBlNzkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5MyIgYmluZGluZz0idG5zOkJpbmRpbmc3OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk0IiBuYW1lPSJJbnB1dDc5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTQiIG5hbWU9Ik91dHB1dDc5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTUiIG5hbWU9IklucHV0Nzk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5NSIgbmFtZT0iT3V0cHV0Nzk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTUiIHR5cGU9InRuczpQb3J0VHlwZTc5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5NiIgbmFtZT0iSW5wdXQ3OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk2IiBuYW1lPSJPdXRwdXQ3OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5NiIgdHlwZT0idG5zOlBvcnRUeXBlNzk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5NiIgYmluZGluZz0idG5zOkJpbmRpbmc3OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk3IiBuYW1lPSJJbnB1dDc5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTciIG5hbWU9Ik91dHB1dDc5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTgiIG5hbWU9IklucHV0Nzk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5OCIgbmFtZT0iT3V0cHV0Nzk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTgiIHR5cGU9InRuczpQb3J0VHlwZTc5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5OSIgbmFtZT0iSW5wdXQ3OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk5IiBuYW1lPSJPdXRwdXQ3OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5OSIgdHlwZT0idG5zOlBvcnRUeXBlNzk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAwIiBuYW1lPSJJbnB1dDgwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDAiIG5hbWU9Ik91dHB1dDgwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDEiIG5hbWU9IklucHV0ODAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwMSIgbmFtZT0iT3V0cHV0ODAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDEiIHR5cGU9InRuczpQb3J0VHlwZTgwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nODAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwMiIgbmFtZT0iSW5wdXQ4MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAyIiBuYW1lPSJPdXRwdXQ4MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwMiIgdHlwZT0idG5zOlBvcnRUeXBlODAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwMiIgYmluZGluZz0idG5zOkJpbmRpbmc4MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAzIiBuYW1lPSJJbnB1dDgwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDMiIG5hbWU9Ik91dHB1dDgwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDQiIG5hbWU9IklucHV0ODA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwNCIgbmFtZT0iT3V0cHV0ODA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDQiIHR5cGU9InRuczpQb3J0VHlwZTgwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nODA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwNSIgbmFtZT0iSW5wdXQ4MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA1IiBuYW1lPSJPdXRwdXQ4MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwNSIgdHlwZT0idG5zOlBvcnRUeXBlODA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwNSIgYmluZGluZz0idG5zOkJpbmRpbmc4MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA2IiBuYW1lPSJJbnB1dDgwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDYiIG5hbWU9Ik91dHB1dDgwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDciIG5hbWU9IklucHV0ODA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwNyIgbmFtZT0iT3V0cHV0ODA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDciIHR5cGU9InRuczpQb3J0VHlwZTgwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDciIGJpbmRpbmc9InRuczpCaW5kaW5nODA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwOCIgbmFtZT0iSW5wdXQ4MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA4IiBuYW1lPSJPdXRwdXQ4MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwOCIgdHlwZT0idG5zOlBvcnRUeXBlODA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwOCIgYmluZGluZz0idG5zOkJpbmRpbmc4MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA5IiBuYW1lPSJJbnB1dDgwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDkiIG5hbWU9Ik91dHB1dDgwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTAiIG5hbWU9IklucHV0ODEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxMCIgbmFtZT0iT3V0cHV0ODEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTAiIHR5cGU9InRuczpQb3J0VHlwZTgxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nODEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxMSIgbmFtZT0iSW5wdXQ4MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODExIiBuYW1lPSJPdXRwdXQ4MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxMSIgdHlwZT0idG5zOlBvcnRUeXBlODExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxMSIgYmluZGluZz0idG5zOkJpbmRpbmc4MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEyIiBuYW1lPSJJbnB1dDgxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTIiIG5hbWU9Ik91dHB1dDgxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTMiIG5hbWU9IklucHV0ODEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxMyIgbmFtZT0iT3V0cHV0ODEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTMiIHR5cGU9InRuczpQb3J0VHlwZTgxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nODEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxNCIgbmFtZT0iSW5wdXQ4MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE0IiBuYW1lPSJPdXRwdXQ4MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxNCIgdHlwZT0idG5zOlBvcnRUeXBlODE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxNCIgYmluZGluZz0idG5zOkJpbmRpbmc4MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE1IiBuYW1lPSJJbnB1dDgxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTUiIG5hbWU9Ik91dHB1dDgxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTYiIG5hbWU9IklucHV0ODE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxNiIgbmFtZT0iT3V0cHV0ODE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTYiIHR5cGU9InRuczpQb3J0VHlwZTgxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nODE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxNyIgbmFtZT0iSW5wdXQ4MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE3IiBuYW1lPSJPdXRwdXQ4MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxNyIgdHlwZT0idG5zOlBvcnRUeXBlODE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxNyIgYmluZGluZz0idG5zOkJpbmRpbmc4MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE4IiBuYW1lPSJJbnB1dDgxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTgiIG5hbWU9Ik91dHB1dDgxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTkiIG5hbWU9IklucHV0ODE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxOSIgbmFtZT0iT3V0cHV0ODE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTkiIHR5cGU9InRuczpQb3J0VHlwZTgxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nODE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyMCIgbmFtZT0iSW5wdXQ4MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIwIiBuYW1lPSJPdXRwdXQ4MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyMCIgdHlwZT0idG5zOlBvcnRUeXBlODIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyMCIgYmluZGluZz0idG5zOkJpbmRpbmc4MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIxIiBuYW1lPSJJbnB1dDgyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjEiIG5hbWU9Ik91dHB1dDgyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjIiIG5hbWU9IklucHV0ODIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyMiIgbmFtZT0iT3V0cHV0ODIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjIiIHR5cGU9InRuczpQb3J0VHlwZTgyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyMyIgbmFtZT0iSW5wdXQ4MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIzIiBuYW1lPSJPdXRwdXQ4MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyMyIgdHlwZT0idG5zOlBvcnRUeXBlODIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyMyIgYmluZGluZz0idG5zOkJpbmRpbmc4MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI0IiBuYW1lPSJJbnB1dDgyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjQiIG5hbWU9Ik91dHB1dDgyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjUiIG5hbWU9IklucHV0ODI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyNSIgbmFtZT0iT3V0cHV0ODI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjUiIHR5cGU9InRuczpQb3J0VHlwZTgyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nODI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyNiIgbmFtZT0iSW5wdXQ4MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI2IiBuYW1lPSJPdXRwdXQ4MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyNiIgdHlwZT0idG5zOlBvcnRUeXBlODI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyNiIgYmluZGluZz0idG5zOkJpbmRpbmc4MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI3IiBuYW1lPSJJbnB1dDgyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjciIG5hbWU9Ik91dHB1dDgyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjgiIG5hbWU9IklucHV0ODI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyOCIgbmFtZT0iT3V0cHV0ODI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjgiIHR5cGU9InRuczpQb3J0VHlwZTgyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nODI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyOSIgbmFtZT0iSW5wdXQ4MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI5IiBuYW1lPSJPdXRwdXQ4MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyOSIgdHlwZT0idG5zOlBvcnRUeXBlODI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyOSIgYmluZGluZz0idG5zOkJpbmRpbmc4MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMwIiBuYW1lPSJJbnB1dDgzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzAiIG5hbWU9Ik91dHB1dDgzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzEiIG5hbWU9IklucHV0ODMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzMSIgbmFtZT0iT3V0cHV0ODMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzEiIHR5cGU9InRuczpQb3J0VHlwZTgzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nODMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzMiIgbmFtZT0iSW5wdXQ4MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMyIiBuYW1lPSJPdXRwdXQ4MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzMiIgdHlwZT0idG5zOlBvcnRUeXBlODMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzMiIgYmluZGluZz0idG5zOkJpbmRpbmc4MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMzIiBuYW1lPSJJbnB1dDgzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzMiIG5hbWU9Ik91dHB1dDgzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzQiIG5hbWU9IklucHV0ODM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzNCIgbmFtZT0iT3V0cHV0ODM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzQiIHR5cGU9InRuczpQb3J0VHlwZTgzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nODM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzNSIgbmFtZT0iSW5wdXQ4MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM1IiBuYW1lPSJPdXRwdXQ4MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzNSIgdHlwZT0idG5zOlBvcnRUeXBlODM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzNSIgYmluZGluZz0idG5zOkJpbmRpbmc4MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM2IiBuYW1lPSJJbnB1dDgzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzYiIG5hbWU9Ik91dHB1dDgzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzciIG5hbWU9IklucHV0ODM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzNyIgbmFtZT0iT3V0cHV0ODM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzciIHR5cGU9InRuczpQb3J0VHlwZTgzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzciIGJpbmRpbmc9InRuczpCaW5kaW5nODM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzOCIgbmFtZT0iSW5wdXQ4MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM4IiBuYW1lPSJPdXRwdXQ4MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzOCIgdHlwZT0idG5zOlBvcnRUeXBlODM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzOCIgYmluZGluZz0idG5zOkJpbmRpbmc4MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM5IiBuYW1lPSJJbnB1dDgzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzkiIG5hbWU9Ik91dHB1dDgzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDAiIG5hbWU9IklucHV0ODQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0MCIgbmFtZT0iT3V0cHV0ODQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDAiIHR5cGU9InRuczpQb3J0VHlwZTg0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nODQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0MSIgbmFtZT0iSW5wdXQ4NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQxIiBuYW1lPSJPdXRwdXQ4NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0MSIgdHlwZT0idG5zOlBvcnRUeXBlODQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0MSIgYmluZGluZz0idG5zOkJpbmRpbmc4NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQyIiBuYW1lPSJJbnB1dDg0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDIiIG5hbWU9Ik91dHB1dDg0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDMiIG5hbWU9IklucHV0ODQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0MyIgbmFtZT0iT3V0cHV0ODQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDMiIHR5cGU9InRuczpQb3J0VHlwZTg0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nODQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0NCIgbmFtZT0iSW5wdXQ4NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ0IiBuYW1lPSJPdXRwdXQ4NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0NCIgdHlwZT0idG5zOlBvcnRUeXBlODQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ1IiBuYW1lPSJJbnB1dDg0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDUiIG5hbWU9Ik91dHB1dDg0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDYiIG5hbWU9IklucHV0ODQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0NiIgbmFtZT0iT3V0cHV0ODQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDYiIHR5cGU9InRuczpQb3J0VHlwZTg0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0NyIgbmFtZT0iSW5wdXQ4NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ3IiBuYW1lPSJPdXRwdXQ4NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0NyIgdHlwZT0idG5zOlBvcnRUeXBlODQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ4IiBuYW1lPSJJbnB1dDg0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDgiIG5hbWU9Ik91dHB1dDg0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDkiIG5hbWU9IklucHV0ODQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0OSIgbmFtZT0iT3V0cHV0ODQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDkiIHR5cGU9InRuczpQb3J0VHlwZTg0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1MCIgbmFtZT0iSW5wdXQ4NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUwIiBuYW1lPSJPdXRwdXQ4NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1MCIgdHlwZT0idG5zOlBvcnRUeXBlODUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1MCIgYmluZGluZz0idG5zOkJpbmRpbmc4NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUxIiBuYW1lPSJJbnB1dDg1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTEiIG5hbWU9Ik91dHB1dDg1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTIiIG5hbWU9IklucHV0ODUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1MiIgbmFtZT0iT3V0cHV0ODUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTIiIHR5cGU9InRuczpQb3J0VHlwZTg1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nODUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1MyIgbmFtZT0iSW5wdXQ4NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUzIiBuYW1lPSJPdXRwdXQ4NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1MyIgdHlwZT0idG5zOlBvcnRUeXBlODUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1MyIgYmluZGluZz0idG5zOkJpbmRpbmc4NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU0IiBuYW1lPSJJbnB1dDg1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTQiIG5hbWU9Ik91dHB1dDg1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTUiIG5hbWU9IklucHV0ODU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1NSIgbmFtZT0iT3V0cHV0ODU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTUiIHR5cGU9InRuczpQb3J0VHlwZTg1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nODU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1NiIgbmFtZT0iSW5wdXQ4NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU2IiBuYW1lPSJPdXRwdXQ4NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1NiIgdHlwZT0idG5zOlBvcnRUeXBlODU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU3IiBuYW1lPSJJbnB1dDg1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTciIG5hbWU9Ik91dHB1dDg1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTgiIG5hbWU9IklucHV0ODU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1OCIgbmFtZT0iT3V0cHV0ODU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTgiIHR5cGU9InRuczpQb3J0VHlwZTg1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nODU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1OSIgbmFtZT0iSW5wdXQ4NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU5IiBuYW1lPSJPdXRwdXQ4NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1OSIgdHlwZT0idG5zOlBvcnRUeXBlODU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1OSIgYmluZGluZz0idG5zOkJpbmRpbmc4NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYwIiBuYW1lPSJJbnB1dDg2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjAiIG5hbWU9Ik91dHB1dDg2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjEiIG5hbWU9IklucHV0ODYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2MSIgbmFtZT0iT3V0cHV0ODYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjEiIHR5cGU9InRuczpQb3J0VHlwZTg2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nODYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2MiIgbmFtZT0iSW5wdXQ4NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYyIiBuYW1lPSJPdXRwdXQ4NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2MiIgdHlwZT0idG5zOlBvcnRUeXBlODYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2MiIgYmluZGluZz0idG5zOkJpbmRpbmc4NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYzIiBuYW1lPSJJbnB1dDg2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjMiIG5hbWU9Ik91dHB1dDg2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjQiIG5hbWU9IklucHV0ODY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2NCIgbmFtZT0iT3V0cHV0ODY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjQiIHR5cGU9InRuczpQb3J0VHlwZTg2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nODY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2NSIgbmFtZT0iSW5wdXQ4NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY1IiBuYW1lPSJPdXRwdXQ4NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2NSIgdHlwZT0idG5zOlBvcnRUeXBlODY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY2IiBuYW1lPSJJbnB1dDg2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjYiIG5hbWU9Ik91dHB1dDg2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjciIG5hbWU9IklucHV0ODY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2NyIgbmFtZT0iT3V0cHV0ODY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjciIHR5cGU9InRuczpQb3J0VHlwZTg2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjciIGJpbmRpbmc9InRuczpCaW5kaW5nODY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2OCIgbmFtZT0iSW5wdXQ4NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY4IiBuYW1lPSJPdXRwdXQ4NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2OCIgdHlwZT0idG5zOlBvcnRUeXBlODY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2OCIgYmluZGluZz0idG5zOkJpbmRpbmc4NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY5IiBuYW1lPSJJbnB1dDg2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjkiIG5hbWU9Ik91dHB1dDg2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzAiIG5hbWU9IklucHV0ODcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3MCIgbmFtZT0iT3V0cHV0ODcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzAiIHR5cGU9InRuczpQb3J0VHlwZTg3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nODcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3MSIgbmFtZT0iSW5wdXQ4NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODcxIiBuYW1lPSJPdXRwdXQ4NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3MSIgdHlwZT0idG5zOlBvcnRUeXBlODcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3MSIgYmluZGluZz0idG5zOkJpbmRpbmc4NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODcyIiBuYW1lPSJJbnB1dDg3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzIiIG5hbWU9Ik91dHB1dDg3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzMiIG5hbWU9IklucHV0ODczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3MyIgbmFtZT0iT3V0cHV0ODczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzMiIHR5cGU9InRuczpQb3J0VHlwZTg3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nODczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3NCIgbmFtZT0iSW5wdXQ4NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc0IiBuYW1lPSJPdXRwdXQ4NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3NCIgdHlwZT0idG5zOlBvcnRUeXBlODc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc1IiBuYW1lPSJJbnB1dDg3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzUiIG5hbWU9Ik91dHB1dDg3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzYiIG5hbWU9IklucHV0ODc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3NiIgbmFtZT0iT3V0cHV0ODc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzYiIHR5cGU9InRuczpQb3J0VHlwZTg3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nODc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3NyIgbmFtZT0iSW5wdXQ4NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc3IiBuYW1lPSJPdXRwdXQ4NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3NyIgdHlwZT0idG5zOlBvcnRUeXBlODc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc4IiBuYW1lPSJJbnB1dDg3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzgiIG5hbWU9Ik91dHB1dDg3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzkiIG5hbWU9IklucHV0ODc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3OSIgbmFtZT0iT3V0cHV0ODc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzkiIHR5cGU9InRuczpQb3J0VHlwZTg3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nODc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4MCIgbmFtZT0iSW5wdXQ4ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgwIiBuYW1lPSJPdXRwdXQ4ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4MCIgdHlwZT0idG5zOlBvcnRUeXBlODgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgxIiBuYW1lPSJJbnB1dDg4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODEiIG5hbWU9Ik91dHB1dDg4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODIiIG5hbWU9IklucHV0ODgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4MiIgbmFtZT0iT3V0cHV0ODgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODIiIHR5cGU9InRuczpQb3J0VHlwZTg4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4MyIgbmFtZT0iSW5wdXQ4ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgzIiBuYW1lPSJPdXRwdXQ4ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4MyIgdHlwZT0idG5zOlBvcnRUeXBlODgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg0IiBuYW1lPSJJbnB1dDg4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODQiIG5hbWU9Ik91dHB1dDg4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODUiIG5hbWU9IklucHV0ODg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4NSIgbmFtZT0iT3V0cHV0ODg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODUiIHR5cGU9InRuczpQb3J0VHlwZTg4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4NiIgbmFtZT0iSW5wdXQ4ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg2IiBuYW1lPSJPdXRwdXQ4ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4NiIgdHlwZT0idG5zOlBvcnRUeXBlODg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg3IiBuYW1lPSJJbnB1dDg4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODciIG5hbWU9Ik91dHB1dDg4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODgiIG5hbWU9IklucHV0ODg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4OCIgbmFtZT0iT3V0cHV0ODg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODgiIHR5cGU9InRuczpQb3J0VHlwZTg4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4OSIgbmFtZT0iSW5wdXQ4ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg5IiBuYW1lPSJPdXRwdXQ4ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4OSIgdHlwZT0idG5zOlBvcnRUeXBlODg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkwIiBuYW1lPSJJbnB1dDg5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTAiIG5hbWU9Ik91dHB1dDg5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTEiIG5hbWU9IklucHV0ODkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5MSIgbmFtZT0iT3V0cHV0ODkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTEiIHR5cGU9InRuczpQb3J0VHlwZTg5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nODkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5MiIgbmFtZT0iSW5wdXQ4OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkyIiBuYW1lPSJPdXRwdXQ4OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5MiIgdHlwZT0idG5zOlBvcnRUeXBlODkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5MiIgYmluZGluZz0idG5zOkJpbmRpbmc4OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkzIiBuYW1lPSJJbnB1dDg5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTMiIG5hbWU9Ik91dHB1dDg5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTQiIG5hbWU9IklucHV0ODk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5NCIgbmFtZT0iT3V0cHV0ODk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTQiIHR5cGU9InRuczpQb3J0VHlwZTg5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nODk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5NSIgbmFtZT0iSW5wdXQ4OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk1IiBuYW1lPSJPdXRwdXQ4OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5NSIgdHlwZT0idG5zOlBvcnRUeXBlODk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5NSIgYmluZGluZz0idG5zOkJpbmRpbmc4OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk2IiBuYW1lPSJJbnB1dDg5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTYiIG5hbWU9Ik91dHB1dDg5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTciIG5hbWU9IklucHV0ODk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5NyIgbmFtZT0iT3V0cHV0ODk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTciIHR5cGU9InRuczpQb3J0VHlwZTg5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTciIGJpbmRpbmc9InRuczpCaW5kaW5nODk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5OCIgbmFtZT0iSW5wdXQ4OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk4IiBuYW1lPSJPdXRwdXQ4OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5OCIgdHlwZT0idG5zOlBvcnRUeXBlODk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk5IiBuYW1lPSJJbnB1dDg5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTkiIG5hbWU9Ik91dHB1dDg5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDAiIG5hbWU9IklucHV0OTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwMCIgbmFtZT0iT3V0cHV0OTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDAiIHR5cGU9InRuczpQb3J0VHlwZTkwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwMSIgbmFtZT0iSW5wdXQ5MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAxIiBuYW1lPSJPdXRwdXQ5MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwMSIgdHlwZT0idG5zOlBvcnRUeXBlOTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwMSIgYmluZGluZz0idG5zOkJpbmRpbmc5MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAyIiBuYW1lPSJJbnB1dDkwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDIiIG5hbWU9Ik91dHB1dDkwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDMiIG5hbWU9IklucHV0OTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwMyIgbmFtZT0iT3V0cHV0OTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDMiIHR5cGU9InRuczpQb3J0VHlwZTkwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwNCIgbmFtZT0iSW5wdXQ5MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA0IiBuYW1lPSJPdXRwdXQ5MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwNCIgdHlwZT0idG5zOlBvcnRUeXBlOTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwNCIgYmluZGluZz0idG5zOkJpbmRpbmc5MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA1IiBuYW1lPSJJbnB1dDkwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDUiIG5hbWU9Ik91dHB1dDkwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDYiIG5hbWU9IklucHV0OTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwNiIgbmFtZT0iT3V0cHV0OTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDYiIHR5cGU9InRuczpQb3J0VHlwZTkwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwNyIgbmFtZT0iSW5wdXQ5MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA3IiBuYW1lPSJPdXRwdXQ5MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwNyIgdHlwZT0idG5zOlBvcnRUeXBlOTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwNyIgYmluZGluZz0idG5zOkJpbmRpbmc5MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA4IiBuYW1lPSJJbnB1dDkwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDgiIG5hbWU9Ik91dHB1dDkwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDkiIG5hbWU9IklucHV0OTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwOSIgbmFtZT0iT3V0cHV0OTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDkiIHR5cGU9InRuczpQb3J0VHlwZTkwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxMCIgbmFtZT0iSW5wdXQ5MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEwIiBuYW1lPSJPdXRwdXQ5MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxMCIgdHlwZT0idG5zOlBvcnRUeXBlOTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxMCIgYmluZGluZz0idG5zOkJpbmRpbmc5MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTExIiBuYW1lPSJJbnB1dDkxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTEiIG5hbWU9Ik91dHB1dDkxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTExIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTIiIG5hbWU9IklucHV0OTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxMiIgbmFtZT0iT3V0cHV0OTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTIiIHR5cGU9InRuczpQb3J0VHlwZTkxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxMyIgbmFtZT0iSW5wdXQ5MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEzIiBuYW1lPSJPdXRwdXQ5MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxMyIgdHlwZT0idG5zOlBvcnRUeXBlOTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxMyIgYmluZGluZz0idG5zOkJpbmRpbmc5MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE0IiBuYW1lPSJJbnB1dDkxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTQiIG5hbWU9Ik91dHB1dDkxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTUiIG5hbWU9IklucHV0OTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxNSIgbmFtZT0iT3V0cHV0OTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTUiIHR5cGU9InRuczpQb3J0VHlwZTkxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxNiIgbmFtZT0iSW5wdXQ5MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE2IiBuYW1lPSJPdXRwdXQ5MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxNiIgdHlwZT0idG5zOlBvcnRUeXBlOTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxNiIgYmluZGluZz0idG5zOkJpbmRpbmc5MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE3IiBuYW1lPSJJbnB1dDkxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTciIG5hbWU9Ik91dHB1dDkxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTgiIG5hbWU9IklucHV0OTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxOCIgbmFtZT0iT3V0cHV0OTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTgiIHR5cGU9InRuczpQb3J0VHlwZTkxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxOSIgbmFtZT0iSW5wdXQ5MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE5IiBuYW1lPSJPdXRwdXQ5MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxOSIgdHlwZT0idG5zOlBvcnRUeXBlOTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxOSIgYmluZGluZz0idG5zOkJpbmRpbmc5MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIwIiBuYW1lPSJJbnB1dDkyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjAiIG5hbWU9Ik91dHB1dDkyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjEiIG5hbWU9IklucHV0OTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyMSIgbmFtZT0iT3V0cHV0OTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjEiIHR5cGU9InRuczpQb3J0VHlwZTkyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyMiIgbmFtZT0iSW5wdXQ5MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIyIiBuYW1lPSJPdXRwdXQ5MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyMiIgdHlwZT0idG5zOlBvcnRUeXBlOTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyMiIgYmluZGluZz0idG5zOkJpbmRpbmc5MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIzIiBuYW1lPSJJbnB1dDkyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjMiIG5hbWU9Ik91dHB1dDkyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjQiIG5hbWU9IklucHV0OTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyNCIgbmFtZT0iT3V0cHV0OTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjQiIHR5cGU9InRuczpQb3J0VHlwZTkyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyNSIgbmFtZT0iSW5wdXQ5MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI1IiBuYW1lPSJPdXRwdXQ5MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyNSIgdHlwZT0idG5zOlBvcnRUeXBlOTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyNSIgYmluZGluZz0idG5zOkJpbmRpbmc5MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI2IiBuYW1lPSJJbnB1dDkyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjYiIG5hbWU9Ik91dHB1dDkyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjciIG5hbWU9IklucHV0OTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyNyIgbmFtZT0iT3V0cHV0OTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjciIHR5cGU9InRuczpQb3J0VHlwZTkyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjciIGJpbmRpbmc9InRuczpCaW5kaW5nOTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyOCIgbmFtZT0iSW5wdXQ5MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI4IiBuYW1lPSJPdXRwdXQ5MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyOCIgdHlwZT0idG5zOlBvcnRUeXBlOTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyOCIgYmluZGluZz0idG5zOkJpbmRpbmc5MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI5IiBuYW1lPSJJbnB1dDkyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjkiIG5hbWU9Ik91dHB1dDkyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzAiIG5hbWU9IklucHV0OTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzMCIgbmFtZT0iT3V0cHV0OTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzAiIHR5cGU9InRuczpQb3J0VHlwZTkzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzMSIgbmFtZT0iSW5wdXQ5MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMxIiBuYW1lPSJPdXRwdXQ5MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzMSIgdHlwZT0idG5zOlBvcnRUeXBlOTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzMSIgYmluZGluZz0idG5zOkJpbmRpbmc5MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMyIiBuYW1lPSJJbnB1dDkzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzIiIG5hbWU9Ik91dHB1dDkzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzMiIG5hbWU9IklucHV0OTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzMyIgbmFtZT0iT3V0cHV0OTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzMiIHR5cGU9InRuczpQb3J0VHlwZTkzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzNCIgbmFtZT0iSW5wdXQ5MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM0IiBuYW1lPSJPdXRwdXQ5MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzNCIgdHlwZT0idG5zOlBvcnRUeXBlOTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzNCIgYmluZGluZz0idG5zOkJpbmRpbmc5MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM1IiBuYW1lPSJJbnB1dDkzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzUiIG5hbWU9Ik91dHB1dDkzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzYiIG5hbWU9IklucHV0OTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzNiIgbmFtZT0iT3V0cHV0OTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzYiIHR5cGU9InRuczpQb3J0VHlwZTkzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzNyIgbmFtZT0iSW5wdXQ5MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM3IiBuYW1lPSJPdXRwdXQ5MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzNyIgdHlwZT0idG5zOlBvcnRUeXBlOTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzNyIgYmluZGluZz0idG5zOkJpbmRpbmc5MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM4IiBuYW1lPSJJbnB1dDkzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzgiIG5hbWU9Ik91dHB1dDkzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzkiIG5hbWU9IklucHV0OTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzOSIgbmFtZT0iT3V0cHV0OTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzkiIHR5cGU9InRuczpQb3J0VHlwZTkzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0MCIgbmFtZT0iSW5wdXQ5NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQwIiBuYW1lPSJPdXRwdXQ5NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0MCIgdHlwZT0idG5zOlBvcnRUeXBlOTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0MCIgYmluZGluZz0idG5zOkJpbmRpbmc5NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQxIiBuYW1lPSJJbnB1dDk0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDEiIG5hbWU9Ik91dHB1dDk0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDIiIG5hbWU9IklucHV0OTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0MiIgbmFtZT0iT3V0cHV0OTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDIiIHR5cGU9InRuczpQb3J0VHlwZTk0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0MyIgbmFtZT0iSW5wdXQ5NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQzIiBuYW1lPSJPdXRwdXQ5NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0MyIgdHlwZT0idG5zOlBvcnRUeXBlOTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0MyIgYmluZGluZz0idG5zOkJpbmRpbmc5NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ0IiBuYW1lPSJJbnB1dDk0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDQiIG5hbWU9Ik91dHB1dDk0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDUiIG5hbWU9IklucHV0OTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0NSIgbmFtZT0iT3V0cHV0OTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDUiIHR5cGU9InRuczpQb3J0VHlwZTk0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0NiIgbmFtZT0iSW5wdXQ5NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ2IiBuYW1lPSJPdXRwdXQ5NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0NiIgdHlwZT0idG5zOlBvcnRUeXBlOTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ3IiBuYW1lPSJJbnB1dDk0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDciIG5hbWU9Ik91dHB1dDk0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDgiIG5hbWU9IklucHV0OTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0OCIgbmFtZT0iT3V0cHV0OTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDgiIHR5cGU9InRuczpQb3J0VHlwZTk0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0OSIgbmFtZT0iSW5wdXQ5NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ5IiBuYW1lPSJPdXRwdXQ5NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0OSIgdHlwZT0idG5zOlBvcnRUeXBlOTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUwIiBuYW1lPSJJbnB1dDk1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTAiIG5hbWU9Ik91dHB1dDk1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTEiIG5hbWU9IklucHV0OTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1MSIgbmFtZT0iT3V0cHV0OTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTEiIHR5cGU9InRuczpQb3J0VHlwZTk1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1MiIgbmFtZT0iSW5wdXQ5NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUyIiBuYW1lPSJPdXRwdXQ5NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1MiIgdHlwZT0idG5zOlBvcnRUeXBlOTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1MiIgYmluZGluZz0idG5zOkJpbmRpbmc5NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUzIiBuYW1lPSJJbnB1dDk1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTMiIG5hbWU9Ik91dHB1dDk1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTQiIG5hbWU9IklucHV0OTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1NCIgbmFtZT0iT3V0cHV0OTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTQiIHR5cGU9InRuczpQb3J0VHlwZTk1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1NSIgbmFtZT0iSW5wdXQ5NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU1IiBuYW1lPSJPdXRwdXQ5NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1NSIgdHlwZT0idG5zOlBvcnRUeXBlOTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU2IiBuYW1lPSJJbnB1dDk1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTYiIG5hbWU9Ik91dHB1dDk1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTciIG5hbWU9IklucHV0OTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1NyIgbmFtZT0iT3V0cHV0OTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTciIHR5cGU9InRuczpQb3J0VHlwZTk1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1OCIgbmFtZT0iSW5wdXQ5NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU4IiBuYW1lPSJPdXRwdXQ5NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1OCIgdHlwZT0idG5zOlBvcnRUeXBlOTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1OCIgYmluZGluZz0idG5zOkJpbmRpbmc5NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU5IiBuYW1lPSJJbnB1dDk1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTkiIG5hbWU9Ik91dHB1dDk1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjAiIG5hbWU9IklucHV0OTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2MCIgbmFtZT0iT3V0cHV0OTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjAiIHR5cGU9InRuczpQb3J0VHlwZTk2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2MSIgbmFtZT0iSW5wdXQ5NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYxIiBuYW1lPSJPdXRwdXQ5NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2MSIgdHlwZT0idG5zOlBvcnRUeXBlOTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2MSIgYmluZGluZz0idG5zOkJpbmRpbmc5NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYyIiBuYW1lPSJJbnB1dDk2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjIiIG5hbWU9Ik91dHB1dDk2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjMiIG5hbWU9IklucHV0OTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2MyIgbmFtZT0iT3V0cHV0OTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjMiIHR5cGU9InRuczpQb3J0VHlwZTk2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2NCIgbmFtZT0iSW5wdXQ5NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY0IiBuYW1lPSJPdXRwdXQ5NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2NCIgdHlwZT0idG5zOlBvcnRUeXBlOTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY1IiBuYW1lPSJJbnB1dDk2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjUiIG5hbWU9Ik91dHB1dDk2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjYiIG5hbWU9IklucHV0OTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2NiIgbmFtZT0iT3V0cHV0OTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjYiIHR5cGU9InRuczpQb3J0VHlwZTk2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2NyIgbmFtZT0iSW5wdXQ5NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY3IiBuYW1lPSJPdXRwdXQ5NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2NyIgdHlwZT0idG5zOlBvcnRUeXBlOTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY4IiBuYW1lPSJJbnB1dDk2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjgiIG5hbWU9Ik91dHB1dDk2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjkiIG5hbWU9IklucHV0OTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2OSIgbmFtZT0iT3V0cHV0OTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjkiIHR5cGU9InRuczpQb3J0VHlwZTk2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3MCIgbmFtZT0iSW5wdXQ5NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTcwIiBuYW1lPSJPdXRwdXQ5NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3MCIgdHlwZT0idG5zOlBvcnRUeXBlOTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3MCIgYmluZGluZz0idG5zOkJpbmRpbmc5NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTcxIiBuYW1lPSJJbnB1dDk3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzEiIG5hbWU9Ik91dHB1dDk3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzIiIG5hbWU9IklucHV0OTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3MiIgbmFtZT0iT3V0cHV0OTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzIiIHR5cGU9InRuczpQb3J0VHlwZTk3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3MyIgbmFtZT0iSW5wdXQ5NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTczIiBuYW1lPSJPdXRwdXQ5NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3MyIgdHlwZT0idG5zOlBvcnRUeXBlOTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3MyIgYmluZGluZz0idG5zOkJpbmRpbmc5NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc0IiBuYW1lPSJJbnB1dDk3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzQiIG5hbWU9Ik91dHB1dDk3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzUiIG5hbWU9IklucHV0OTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3NSIgbmFtZT0iT3V0cHV0OTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzUiIHR5cGU9InRuczpQb3J0VHlwZTk3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3NiIgbmFtZT0iSW5wdXQ5NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc2IiBuYW1lPSJPdXRwdXQ5NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3NiIgdHlwZT0idG5zOlBvcnRUeXBlOTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc3IiBuYW1lPSJJbnB1dDk3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzciIG5hbWU9Ik91dHB1dDk3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzgiIG5hbWU9IklucHV0OTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3OCIgbmFtZT0iT3V0cHV0OTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzgiIHR5cGU9InRuczpQb3J0VHlwZTk3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3OSIgbmFtZT0iSW5wdXQ5NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc5IiBuYW1lPSJPdXRwdXQ5NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3OSIgdHlwZT0idG5zOlBvcnRUeXBlOTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3OSIgYmluZGluZz0idG5zOkJpbmRpbmc5NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgwIiBuYW1lPSJJbnB1dDk4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODAiIG5hbWU9Ik91dHB1dDk4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODEiIG5hbWU9IklucHV0OTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4MSIgbmFtZT0iT3V0cHV0OTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODEiIHR5cGU9InRuczpQb3J0VHlwZTk4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4MiIgbmFtZT0iSW5wdXQ5ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgyIiBuYW1lPSJPdXRwdXQ5ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4MiIgdHlwZT0idG5zOlBvcnRUeXBlOTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4MiIgYmluZGluZz0idG5zOkJpbmRpbmc5ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgzIiBuYW1lPSJJbnB1dDk4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODMiIG5hbWU9Ik91dHB1dDk4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODQiIG5hbWU9IklucHV0OTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4NCIgbmFtZT0iT3V0cHV0OTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODQiIHR5cGU9InRuczpQb3J0VHlwZTk4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4NSIgbmFtZT0iSW5wdXQ5ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg1IiBuYW1lPSJPdXRwdXQ5ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4NSIgdHlwZT0idG5zOlBvcnRUeXBlOTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4NSIgYmluZGluZz0idG5zOkJpbmRpbmc5ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg2IiBuYW1lPSJJbnB1dDk4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODYiIG5hbWU9Ik91dHB1dDk4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODciIG5hbWU9IklucHV0OTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4NyIgbmFtZT0iT3V0cHV0OTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODciIHR5cGU9InRuczpQb3J0VHlwZTk4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODciIGJpbmRpbmc9InRuczpCaW5kaW5nOTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4OCIgbmFtZT0iSW5wdXQ5ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg4IiBuYW1lPSJPdXRwdXQ5ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4OCIgdHlwZT0idG5zOlBvcnRUeXBlOTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4OCIgYmluZGluZz0idG5zOkJpbmRpbmc5ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg5IiBuYW1lPSJJbnB1dDk4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODkiIG5hbWU9Ik91dHB1dDk4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTAiIG5hbWU9IklucHV0OTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5MCIgbmFtZT0iT3V0cHV0OTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTAiIHR5cGU9InRuczpQb3J0VHlwZTk5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5MSIgbmFtZT0iSW5wdXQ5OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkxIiBuYW1lPSJPdXRwdXQ5OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkyIiBuYW1lPSJJbnB1dDk5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTIiIG5hbWU9Ik91dHB1dDk5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTMiIG5hbWU9IklucHV0OTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5MyIgbmFtZT0iT3V0cHV0OTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTMiIHR5cGU9InRuczpQb3J0VHlwZTk5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5NCIgbmFtZT0iSW5wdXQ5OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk0IiBuYW1lPSJPdXRwdXQ5OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk1IiBuYW1lPSJJbnB1dDk5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTUiIG5hbWU9Ik91dHB1dDk5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTYiIG5hbWU9IklucHV0OTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5NiIgbmFtZT0iT3V0cHV0OTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTYiIHR5cGU9InRuczpQb3J0VHlwZTk5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5NyIgbmFtZT0iSW5wdXQ5OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk3IiBuYW1lPSJPdXRwdXQ5OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk4IiBuYW1lPSJJbnB1dDk5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTgiIG5hbWU9Ik91dHB1dDk5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTkiIG5hbWU9IklucHV0OTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5OSIgbmFtZT0iT3V0cHV0OTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTkiIHR5cGU9InRuczpQb3J0VHlwZTk5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMjAwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMjAwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFkMzcwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzIwMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2MjA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTAiIG5hbWU9IklucHV0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UwIiBuYW1lPSJPdXRwdXQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24wIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxIiBuYW1lPSJJbnB1dDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMSIgbmFtZT0iT3V0cHV0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMSIgdHlwZT0idG5zOlBvcnRUeXBlMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMiIgbmFtZT0iSW5wdXQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIiIG5hbWU9Ik91dHB1dDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIiIHR5cGU9InRuczpQb3J0VHlwZTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMiIG5hbWU9IklucHV0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzIiBuYW1lPSJPdXRwdXQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0IiBuYW1lPSJJbnB1dDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNCIgbmFtZT0iT3V0cHV0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNCIgdHlwZT0idG5zOlBvcnRUeXBlNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNSIgbmFtZT0iSW5wdXQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUiIG5hbWU9Ik91dHB1dDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUiIHR5cGU9InRuczpQb3J0VHlwZTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYiIG5hbWU9IklucHV0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2IiBuYW1lPSJPdXRwdXQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3IiBuYW1lPSJJbnB1dDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNyIgbmFtZT0iT3V0cHV0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNyIgdHlwZT0idG5zOlBvcnRUeXBlNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOCIgbmFtZT0iSW5wdXQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgiIG5hbWU9Ik91dHB1dDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgiIHR5cGU9InRuczpQb3J0VHlwZTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkiIG5hbWU9IklucHV0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5IiBuYW1lPSJPdXRwdXQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMCIgbmFtZT0iSW5wdXQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMCIgbmFtZT0iT3V0cHV0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMSIgbmFtZT0iSW5wdXQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMSIgbmFtZT0iT3V0cHV0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMiIgbmFtZT0iSW5wdXQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMiIgbmFtZT0iT3V0cHV0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMyIgbmFtZT0iSW5wdXQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMyIgbmFtZT0iT3V0cHV0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNCIgbmFtZT0iSW5wdXQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNCIgbmFtZT0iT3V0cHV0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNCIgYmluZGluZz0idG5zOkJpbmRpbmcxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNSIgbmFtZT0iSW5wdXQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNSIgbmFtZT0iT3V0cHV0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNSIgYmluZGluZz0idG5zOkJpbmRpbmcxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNiIgbmFtZT0iSW5wdXQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNiIgbmFtZT0iT3V0cHV0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNiIgYmluZGluZz0idG5zOkJpbmRpbmcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNyIgbmFtZT0iSW5wdXQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNyIgbmFtZT0iT3V0cHV0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNyIgYmluZGluZz0idG5zOkJpbmRpbmcxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOCIgbmFtZT0iSW5wdXQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOCIgbmFtZT0iT3V0cHV0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOCIgYmluZGluZz0idG5zOkJpbmRpbmcxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOSIgbmFtZT0iSW5wdXQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOSIgbmFtZT0iT3V0cHV0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOSIgYmluZGluZz0idG5zOkJpbmRpbmcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMCIgbmFtZT0iSW5wdXQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMCIgbmFtZT0iT3V0cHV0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMSIgbmFtZT0iSW5wdXQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMSIgbmFtZT0iT3V0cHV0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMiIgbmFtZT0iSW5wdXQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMiIgbmFtZT0iT3V0cHV0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMyIgbmFtZT0iSW5wdXQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMyIgbmFtZT0iT3V0cHV0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNCIgbmFtZT0iSW5wdXQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNCIgbmFtZT0iT3V0cHV0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNSIgbmFtZT0iSW5wdXQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNSIgbmFtZT0iT3V0cHV0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNiIgbmFtZT0iSW5wdXQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNiIgbmFtZT0iT3V0cHV0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNyIgbmFtZT0iSW5wdXQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNyIgbmFtZT0iT3V0cHV0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOCIgbmFtZT0iSW5wdXQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOCIgbmFtZT0iT3V0cHV0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOSIgbmFtZT0iSW5wdXQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOSIgbmFtZT0iT3V0cHV0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMCIgbmFtZT0iSW5wdXQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMCIgbmFtZT0iT3V0cHV0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMSIgbmFtZT0iSW5wdXQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMSIgbmFtZT0iT3V0cHV0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMiIgbmFtZT0iSW5wdXQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMiIgbmFtZT0iT3V0cHV0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMyIgbmFtZT0iSW5wdXQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMyIgbmFtZT0iT3V0cHV0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNCIgbmFtZT0iSW5wdXQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNCIgbmFtZT0iT3V0cHV0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNCIgYmluZGluZz0idG5zOkJpbmRpbmczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNSIgbmFtZT0iSW5wdXQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNSIgbmFtZT0iT3V0cHV0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNSIgYmluZGluZz0idG5zOkJpbmRpbmczNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNiIgbmFtZT0iSW5wdXQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNiIgbmFtZT0iT3V0cHV0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNiIgYmluZGluZz0idG5zOkJpbmRpbmczNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNyIgbmFtZT0iSW5wdXQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNyIgbmFtZT0iT3V0cHV0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNyIgYmluZGluZz0idG5zOkJpbmRpbmczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOCIgbmFtZT0iSW5wdXQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOCIgbmFtZT0iT3V0cHV0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOCIgYmluZGluZz0idG5zOkJpbmRpbmczOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOSIgbmFtZT0iSW5wdXQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOSIgbmFtZT0iT3V0cHV0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOSIgYmluZGluZz0idG5zOkJpbmRpbmczOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MCIgbmFtZT0iSW5wdXQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MCIgbmFtZT0iT3V0cHV0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MSIgbmFtZT0iSW5wdXQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MSIgbmFtZT0iT3V0cHV0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MiIgbmFtZT0iSW5wdXQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MiIgbmFtZT0iT3V0cHV0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MyIgbmFtZT0iSW5wdXQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MyIgbmFtZT0iT3V0cHV0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NCIgbmFtZT0iSW5wdXQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NCIgbmFtZT0iT3V0cHV0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NSIgbmFtZT0iSW5wdXQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NSIgbmFtZT0iT3V0cHV0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NiIgbmFtZT0iSW5wdXQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NiIgbmFtZT0iT3V0cHV0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NyIgbmFtZT0iSW5wdXQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NyIgbmFtZT0iT3V0cHV0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OCIgbmFtZT0iSW5wdXQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OCIgbmFtZT0iT3V0cHV0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OSIgbmFtZT0iSW5wdXQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OSIgbmFtZT0iT3V0cHV0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MCIgbmFtZT0iSW5wdXQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MCIgbmFtZT0iT3V0cHV0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MSIgbmFtZT0iSW5wdXQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MSIgbmFtZT0iT3V0cHV0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MiIgbmFtZT0iSW5wdXQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MiIgbmFtZT0iT3V0cHV0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MyIgbmFtZT0iSW5wdXQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MyIgbmFtZT0iT3V0cHV0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NCIgbmFtZT0iSW5wdXQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NCIgbmFtZT0iT3V0cHV0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NSIgbmFtZT0iSW5wdXQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NSIgbmFtZT0iT3V0cHV0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NiIgbmFtZT0iSW5wdXQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NiIgbmFtZT0iT3V0cHV0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NyIgbmFtZT0iSW5wdXQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NyIgbmFtZT0iT3V0cHV0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OCIgbmFtZT0iSW5wdXQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OCIgbmFtZT0iT3V0cHV0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OSIgbmFtZT0iSW5wdXQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OSIgbmFtZT0iT3V0cHV0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MCIgbmFtZT0iSW5wdXQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MCIgbmFtZT0iT3V0cHV0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MSIgbmFtZT0iSW5wdXQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MSIgbmFtZT0iT3V0cHV0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MiIgbmFtZT0iSW5wdXQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MiIgbmFtZT0iT3V0cHV0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MyIgbmFtZT0iSW5wdXQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MyIgbmFtZT0iT3V0cHV0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NCIgbmFtZT0iSW5wdXQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NCIgbmFtZT0iT3V0cHV0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NSIgbmFtZT0iSW5wdXQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NSIgbmFtZT0iT3V0cHV0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NiIgbmFtZT0iSW5wdXQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NiIgbmFtZT0iT3V0cHV0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NyIgbmFtZT0iSW5wdXQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NyIgbmFtZT0iT3V0cHV0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OCIgbmFtZT0iSW5wdXQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OCIgbmFtZT0iT3V0cHV0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OSIgbmFtZT0iSW5wdXQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OSIgbmFtZT0iT3V0cHV0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MCIgbmFtZT0iSW5wdXQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MCIgbmFtZT0iT3V0cHV0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MSIgbmFtZT0iSW5wdXQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MSIgbmFtZT0iT3V0cHV0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MiIgbmFtZT0iSW5wdXQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MiIgbmFtZT0iT3V0cHV0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MyIgbmFtZT0iSW5wdXQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MyIgbmFtZT0iT3V0cHV0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NCIgbmFtZT0iSW5wdXQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NCIgbmFtZT0iT3V0cHV0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NSIgbmFtZT0iSW5wdXQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NSIgbmFtZT0iT3V0cHV0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NiIgbmFtZT0iSW5wdXQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NiIgbmFtZT0iT3V0cHV0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NyIgbmFtZT0iSW5wdXQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NyIgbmFtZT0iT3V0cHV0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OCIgbmFtZT0iSW5wdXQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OCIgbmFtZT0iT3V0cHV0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OSIgbmFtZT0iSW5wdXQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OSIgbmFtZT0iT3V0cHV0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MCIgbmFtZT0iSW5wdXQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MCIgbmFtZT0iT3V0cHV0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MSIgbmFtZT0iSW5wdXQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MSIgbmFtZT0iT3V0cHV0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MiIgbmFtZT0iSW5wdXQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MiIgbmFtZT0iT3V0cHV0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MyIgbmFtZT0iSW5wdXQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MyIgbmFtZT0iT3V0cHV0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NCIgbmFtZT0iSW5wdXQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NCIgbmFtZT0iT3V0cHV0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NSIgbmFtZT0iSW5wdXQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NSIgbmFtZT0iT3V0cHV0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NiIgbmFtZT0iSW5wdXQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NiIgbmFtZT0iT3V0cHV0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NyIgbmFtZT0iSW5wdXQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NyIgbmFtZT0iT3V0cHV0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OCIgbmFtZT0iSW5wdXQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OCIgbmFtZT0iT3V0cHV0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OSIgbmFtZT0iSW5wdXQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OSIgbmFtZT0iT3V0cHV0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MCIgbmFtZT0iSW5wdXQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MCIgbmFtZT0iT3V0cHV0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MSIgbmFtZT0iSW5wdXQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MSIgbmFtZT0iT3V0cHV0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MiIgbmFtZT0iSW5wdXQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MiIgbmFtZT0iT3V0cHV0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MyIgbmFtZT0iSW5wdXQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MyIgbmFtZT0iT3V0cHV0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NCIgbmFtZT0iSW5wdXQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NCIgbmFtZT0iT3V0cHV0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NSIgbmFtZT0iSW5wdXQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NSIgbmFtZT0iT3V0cHV0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NiIgbmFtZT0iSW5wdXQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NiIgbmFtZT0iT3V0cHV0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NyIgbmFtZT0iSW5wdXQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NyIgbmFtZT0iT3V0cHV0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OCIgbmFtZT0iSW5wdXQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OCIgbmFtZT0iT3V0cHV0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OSIgbmFtZT0iSW5wdXQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OSIgbmFtZT0iT3V0cHV0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDAiIG5hbWU9IklucHV0MTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMCIgbmFtZT0iT3V0cHV0MTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDAiIHR5cGU9InRuczpQb3J0VHlwZTEwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMSIgbmFtZT0iSW5wdXQxMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAxIiBuYW1lPSJPdXRwdXQxMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMSIgdHlwZT0idG5zOlBvcnRUeXBlMTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAyIiBuYW1lPSJJbnB1dDEwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDIiIG5hbWU9Ik91dHB1dDEwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDMiIG5hbWU9IklucHV0MTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMyIgbmFtZT0iT3V0cHV0MTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDMiIHR5cGU9InRuczpQb3J0VHlwZTEwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNCIgbmFtZT0iSW5wdXQxMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA0IiBuYW1lPSJPdXRwdXQxMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNCIgdHlwZT0idG5zOlBvcnRUeXBlMTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA1IiBuYW1lPSJJbnB1dDEwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDUiIG5hbWU9Ik91dHB1dDEwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDYiIG5hbWU9IklucHV0MTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNiIgbmFtZT0iT3V0cHV0MTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDYiIHR5cGU9InRuczpQb3J0VHlwZTEwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNyIgbmFtZT0iSW5wdXQxMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA3IiBuYW1lPSJPdXRwdXQxMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNyIgdHlwZT0idG5zOlBvcnRUeXBlMTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA4IiBuYW1lPSJJbnB1dDEwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDgiIG5hbWU9Ik91dHB1dDEwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDkiIG5hbWU9IklucHV0MTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOSIgbmFtZT0iT3V0cHV0MTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDkiIHR5cGU9InRuczpQb3J0VHlwZTEwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMCIgbmFtZT0iSW5wdXQxMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEwIiBuYW1lPSJPdXRwdXQxMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMCIgdHlwZT0idG5zOlBvcnRUeXBlMTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTExIiBuYW1lPSJJbnB1dDExMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTEiIG5hbWU9Ik91dHB1dDExMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTIiIG5hbWU9IklucHV0MTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMiIgbmFtZT0iT3V0cHV0MTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTIiIHR5cGU9InRuczpQb3J0VHlwZTExMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMyIgbmFtZT0iSW5wdXQxMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEzIiBuYW1lPSJPdXRwdXQxMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMyIgdHlwZT0idG5zOlBvcnRUeXBlMTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE0IiBuYW1lPSJJbnB1dDExNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTQiIG5hbWU9Ik91dHB1dDExNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTUiIG5hbWU9IklucHV0MTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNSIgbmFtZT0iT3V0cHV0MTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTUiIHR5cGU9InRuczpQb3J0VHlwZTExNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNiIgbmFtZT0iSW5wdXQxMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE2IiBuYW1lPSJPdXRwdXQxMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNiIgdHlwZT0idG5zOlBvcnRUeXBlMTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE3IiBuYW1lPSJJbnB1dDExNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTciIG5hbWU9Ik91dHB1dDExNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTgiIG5hbWU9IklucHV0MTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOCIgbmFtZT0iT3V0cHV0MTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTgiIHR5cGU9InRuczpQb3J0VHlwZTExOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOSIgbmFtZT0iSW5wdXQxMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE5IiBuYW1lPSJPdXRwdXQxMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOSIgdHlwZT0idG5zOlBvcnRUeXBlMTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIwIiBuYW1lPSJJbnB1dDEyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjAiIG5hbWU9Ik91dHB1dDEyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjEiIG5hbWU9IklucHV0MTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMSIgbmFtZT0iT3V0cHV0MTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjEiIHR5cGU9InRuczpQb3J0VHlwZTEyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMiIgbmFtZT0iSW5wdXQxMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIyIiBuYW1lPSJPdXRwdXQxMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIzIiBuYW1lPSJJbnB1dDEyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjMiIG5hbWU9Ik91dHB1dDEyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjQiIG5hbWU9IklucHV0MTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNCIgbmFtZT0iT3V0cHV0MTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjQiIHR5cGU9InRuczpQb3J0VHlwZTEyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNSIgbmFtZT0iSW5wdXQxMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI1IiBuYW1lPSJPdXRwdXQxMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNSIgdHlwZT0idG5zOlBvcnRUeXBlMTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI2IiBuYW1lPSJJbnB1dDEyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjYiIG5hbWU9Ik91dHB1dDEyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjciIG5hbWU9IklucHV0MTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNyIgbmFtZT0iT3V0cHV0MTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjciIHR5cGU9InRuczpQb3J0VHlwZTEyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOCIgbmFtZT0iSW5wdXQxMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI4IiBuYW1lPSJPdXRwdXQxMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOCIgdHlwZT0idG5zOlBvcnRUeXBlMTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI5IiBuYW1lPSJJbnB1dDEyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjkiIG5hbWU9Ik91dHB1dDEyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzAiIG5hbWU9IklucHV0MTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMCIgbmFtZT0iT3V0cHV0MTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzAiIHR5cGU9InRuczpQb3J0VHlwZTEzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMSIgbmFtZT0iSW5wdXQxMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMxIiBuYW1lPSJPdXRwdXQxMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMSIgdHlwZT0idG5zOlBvcnRUeXBlMTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMyIiBuYW1lPSJJbnB1dDEzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzIiIG5hbWU9Ik91dHB1dDEzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzMiIG5hbWU9IklucHV0MTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMyIgbmFtZT0iT3V0cHV0MTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzMiIHR5cGU9InRuczpQb3J0VHlwZTEzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNCIgbmFtZT0iSW5wdXQxMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM0IiBuYW1lPSJPdXRwdXQxMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNCIgdHlwZT0idG5zOlBvcnRUeXBlMTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM1IiBuYW1lPSJJbnB1dDEzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzUiIG5hbWU9Ik91dHB1dDEzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzYiIG5hbWU9IklucHV0MTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNiIgbmFtZT0iT3V0cHV0MTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzYiIHR5cGU9InRuczpQb3J0VHlwZTEzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNyIgbmFtZT0iSW5wdXQxMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM3IiBuYW1lPSJPdXRwdXQxMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNyIgdHlwZT0idG5zOlBvcnRUeXBlMTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM4IiBuYW1lPSJJbnB1dDEzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzgiIG5hbWU9Ik91dHB1dDEzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzkiIG5hbWU9IklucHV0MTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOSIgbmFtZT0iT3V0cHV0MTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzkiIHR5cGU9InRuczpQb3J0VHlwZTEzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MCIgbmFtZT0iSW5wdXQxNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQwIiBuYW1lPSJPdXRwdXQxNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MCIgdHlwZT0idG5zOlBvcnRUeXBlMTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQxIiBuYW1lPSJJbnB1dDE0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDEiIG5hbWU9Ik91dHB1dDE0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDIiIG5hbWU9IklucHV0MTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MiIgbmFtZT0iT3V0cHV0MTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDIiIHR5cGU9InRuczpQb3J0VHlwZTE0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MyIgbmFtZT0iSW5wdXQxNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQzIiBuYW1lPSJPdXRwdXQxNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MyIgdHlwZT0idG5zOlBvcnRUeXBlMTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ0IiBuYW1lPSJJbnB1dDE0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDQiIG5hbWU9Ik91dHB1dDE0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDUiIG5hbWU9IklucHV0MTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NSIgbmFtZT0iT3V0cHV0MTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDUiIHR5cGU9InRuczpQb3J0VHlwZTE0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NiIgbmFtZT0iSW5wdXQxNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ2IiBuYW1lPSJPdXRwdXQxNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NiIgdHlwZT0idG5zOlBvcnRUeXBlMTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ3IiBuYW1lPSJJbnB1dDE0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDciIG5hbWU9Ik91dHB1dDE0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDgiIG5hbWU9IklucHV0MTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OCIgbmFtZT0iT3V0cHV0MTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDgiIHR5cGU9InRuczpQb3J0VHlwZTE0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OSIgbmFtZT0iSW5wdXQxNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ5IiBuYW1lPSJPdXRwdXQxNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUwIiBuYW1lPSJJbnB1dDE1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTAiIG5hbWU9Ik91dHB1dDE1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTEiIG5hbWU9IklucHV0MTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MSIgbmFtZT0iT3V0cHV0MTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTEiIHR5cGU9InRuczpQb3J0VHlwZTE1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MiIgbmFtZT0iSW5wdXQxNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUyIiBuYW1lPSJPdXRwdXQxNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MiIgdHlwZT0idG5zOlBvcnRUeXBlMTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUzIiBuYW1lPSJJbnB1dDE1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTMiIG5hbWU9Ik91dHB1dDE1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTQiIG5hbWU9IklucHV0MTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NCIgbmFtZT0iT3V0cHV0MTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTQiIHR5cGU9InRuczpQb3J0VHlwZTE1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NSIgbmFtZT0iSW5wdXQxNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU1IiBuYW1lPSJPdXRwdXQxNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NSIgdHlwZT0idG5zOlBvcnRUeXBlMTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU2IiBuYW1lPSJJbnB1dDE1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTYiIG5hbWU9Ik91dHB1dDE1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTciIG5hbWU9IklucHV0MTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NyIgbmFtZT0iT3V0cHV0MTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTciIHR5cGU9InRuczpQb3J0VHlwZTE1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OCIgbmFtZT0iSW5wdXQxNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU4IiBuYW1lPSJPdXRwdXQxNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OCIgdHlwZT0idG5zOlBvcnRUeXBlMTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU5IiBuYW1lPSJJbnB1dDE1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTkiIG5hbWU9Ik91dHB1dDE1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjAiIG5hbWU9IklucHV0MTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MCIgbmFtZT0iT3V0cHV0MTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjAiIHR5cGU9InRuczpQb3J0VHlwZTE2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MSIgbmFtZT0iSW5wdXQxNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYxIiBuYW1lPSJPdXRwdXQxNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MSIgdHlwZT0idG5zOlBvcnRUeXBlMTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYyIiBuYW1lPSJJbnB1dDE2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjIiIG5hbWU9Ik91dHB1dDE2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjMiIG5hbWU9IklucHV0MTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MyIgbmFtZT0iT3V0cHV0MTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjMiIHR5cGU9InRuczpQb3J0VHlwZTE2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NCIgbmFtZT0iSW5wdXQxNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY0IiBuYW1lPSJPdXRwdXQxNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NCIgdHlwZT0idG5zOlBvcnRUeXBlMTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY1IiBuYW1lPSJJbnB1dDE2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjUiIG5hbWU9Ik91dHB1dDE2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjYiIG5hbWU9IklucHV0MTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NiIgbmFtZT0iT3V0cHV0MTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjYiIHR5cGU9InRuczpQb3J0VHlwZTE2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NyIgbmFtZT0iSW5wdXQxNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY3IiBuYW1lPSJPdXRwdXQxNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NyIgdHlwZT0idG5zOlBvcnRUeXBlMTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY4IiBuYW1lPSJJbnB1dDE2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjgiIG5hbWU9Ik91dHB1dDE2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjkiIG5hbWU9IklucHV0MTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OSIgbmFtZT0iT3V0cHV0MTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjkiIHR5cGU9InRuczpQb3J0VHlwZTE2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MCIgbmFtZT0iSW5wdXQxNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcwIiBuYW1lPSJPdXRwdXQxNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MCIgdHlwZT0idG5zOlBvcnRUeXBlMTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcxIiBuYW1lPSJJbnB1dDE3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzEiIG5hbWU9Ik91dHB1dDE3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzIiIG5hbWU9IklucHV0MTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MiIgbmFtZT0iT3V0cHV0MTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzIiIHR5cGU9InRuczpQb3J0VHlwZTE3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MyIgbmFtZT0iSW5wdXQxNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTczIiBuYW1lPSJPdXRwdXQxNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MyIgdHlwZT0idG5zOlBvcnRUeXBlMTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc0IiBuYW1lPSJJbnB1dDE3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzQiIG5hbWU9Ik91dHB1dDE3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzUiIG5hbWU9IklucHV0MTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NSIgbmFtZT0iT3V0cHV0MTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzUiIHR5cGU9InRuczpQb3J0VHlwZTE3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NiIgbmFtZT0iSW5wdXQxNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc2IiBuYW1lPSJPdXRwdXQxNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NiIgdHlwZT0idG5zOlBvcnRUeXBlMTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc3IiBuYW1lPSJJbnB1dDE3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzciIG5hbWU9Ik91dHB1dDE3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzgiIG5hbWU9IklucHV0MTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OCIgbmFtZT0iT3V0cHV0MTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzgiIHR5cGU9InRuczpQb3J0VHlwZTE3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OSIgbmFtZT0iSW5wdXQxNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc5IiBuYW1lPSJPdXRwdXQxNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OSIgdHlwZT0idG5zOlBvcnRUeXBlMTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgwIiBuYW1lPSJJbnB1dDE4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODAiIG5hbWU9Ik91dHB1dDE4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODEiIG5hbWU9IklucHV0MTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MSIgbmFtZT0iT3V0cHV0MTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODEiIHR5cGU9InRuczpQb3J0VHlwZTE4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MiIgbmFtZT0iSW5wdXQxODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgyIiBuYW1lPSJPdXRwdXQxODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MiIgdHlwZT0idG5zOlBvcnRUeXBlMTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MiIgYmluZGluZz0idG5zOkJpbmRpbmcxODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgzIiBuYW1lPSJJbnB1dDE4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODMiIG5hbWU9Ik91dHB1dDE4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODQiIG5hbWU9IklucHV0MTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NCIgbmFtZT0iT3V0cHV0MTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODQiIHR5cGU9InRuczpQb3J0VHlwZTE4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NSIgbmFtZT0iSW5wdXQxODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg1IiBuYW1lPSJPdXRwdXQxODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NSIgdHlwZT0idG5zOlBvcnRUeXBlMTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NSIgYmluZGluZz0idG5zOkJpbmRpbmcxODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg2IiBuYW1lPSJJbnB1dDE4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODYiIG5hbWU9Ik91dHB1dDE4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODciIG5hbWU9IklucHV0MTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NyIgbmFtZT0iT3V0cHV0MTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODciIHR5cGU9InRuczpQb3J0VHlwZTE4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODciIGJpbmRpbmc9InRuczpCaW5kaW5nMTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OCIgbmFtZT0iSW5wdXQxODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg4IiBuYW1lPSJPdXRwdXQxODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OCIgdHlwZT0idG5zOlBvcnRUeXBlMTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OCIgYmluZGluZz0idG5zOkJpbmRpbmcxODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg5IiBuYW1lPSJJbnB1dDE4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODkiIG5hbWU9Ik91dHB1dDE4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTAiIG5hbWU9IklucHV0MTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MCIgbmFtZT0iT3V0cHV0MTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTAiIHR5cGU9InRuczpQb3J0VHlwZTE5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MSIgbmFtZT0iSW5wdXQxOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkxIiBuYW1lPSJPdXRwdXQxOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MSIgdHlwZT0idG5zOlBvcnRUeXBlMTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkyIiBuYW1lPSJJbnB1dDE5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTIiIG5hbWU9Ik91dHB1dDE5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTMiIG5hbWU9IklucHV0MTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MyIgbmFtZT0iT3V0cHV0MTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTMiIHR5cGU9InRuczpQb3J0VHlwZTE5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NCIgbmFtZT0iSW5wdXQxOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk0IiBuYW1lPSJPdXRwdXQxOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NCIgdHlwZT0idG5zOlBvcnRUeXBlMTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk1IiBuYW1lPSJJbnB1dDE5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTUiIG5hbWU9Ik91dHB1dDE5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTYiIG5hbWU9IklucHV0MTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NiIgbmFtZT0iT3V0cHV0MTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTYiIHR5cGU9InRuczpQb3J0VHlwZTE5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NyIgbmFtZT0iSW5wdXQxOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk3IiBuYW1lPSJPdXRwdXQxOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NyIgdHlwZT0idG5zOlBvcnRUeXBlMTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk4IiBuYW1lPSJJbnB1dDE5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTgiIG5hbWU9Ik91dHB1dDE5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTkiIG5hbWU9IklucHV0MTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OSIgbmFtZT0iT3V0cHV0MTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTkiIHR5cGU9InRuczpQb3J0VHlwZTE5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvNTAwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvNTAwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VhYjgzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzUwMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAiIG5hbWU9IklucHV0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAiIG5hbWU9Ik91dHB1dDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEiIG5hbWU9IklucHV0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEiIG5hbWU9Ik91dHB1dDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMSIgdHlwZT0idG5zOlBvcnRUeXBlMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIiIG5hbWU9IklucHV0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIiIG5hbWU9Ik91dHB1dDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMiIG5hbWU9IklucHV0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMiIG5hbWU9Ik91dHB1dDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQiIG5hbWU9IklucHV0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQiIG5hbWU9Ik91dHB1dDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNCIgdHlwZT0idG5zOlBvcnRUeXBlMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUiIG5hbWU9IklucHV0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUiIG5hbWU9Ik91dHB1dDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNSIgdHlwZT0idG5zOlBvcnRUeXBlMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYiIG5hbWU9IklucHV0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYiIG5hbWU9Ik91dHB1dDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNiIgdHlwZT0idG5zOlBvcnRUeXBlMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTciIG5hbWU9IklucHV0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTciIG5hbWU9Ik91dHB1dDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNyIgdHlwZT0idG5zOlBvcnRUeXBlMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgiIG5hbWU9IklucHV0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgiIG5hbWU9Ik91dHB1dDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOCIgdHlwZT0idG5zOlBvcnRUeXBlMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkiIG5hbWU9IklucHV0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkiIG5hbWU9Ik91dHB1dDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOSIgdHlwZT0idG5zOlBvcnRUeXBlMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAiIG5hbWU9IklucHV0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAiIG5hbWU9Ik91dHB1dDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEiIG5hbWU9IklucHV0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEiIG5hbWU9Ik91dHB1dDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIiIG5hbWU9IklucHV0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIiIG5hbWU9Ik91dHB1dDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMiIG5hbWU9IklucHV0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMiIG5hbWU9Ik91dHB1dDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQiIG5hbWU9IklucHV0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQiIG5hbWU9Ik91dHB1dDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUiIG5hbWU9IklucHV0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUiIG5hbWU9Ik91dHB1dDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYiIG5hbWU9IklucHV0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYiIG5hbWU9Ik91dHB1dDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjciIG5hbWU9IklucHV0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjciIG5hbWU9Ik91dHB1dDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgiIG5hbWU9IklucHV0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgiIG5hbWU9Ik91dHB1dDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkiIG5hbWU9IklucHV0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkiIG5hbWU9Ik91dHB1dDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAiIG5hbWU9IklucHV0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAiIG5hbWU9Ik91dHB1dDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEiIG5hbWU9IklucHV0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEiIG5hbWU9Ik91dHB1dDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMSIgdHlwZT0idG5zOlBvcnRUeXBlMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIiIG5hbWU9IklucHV0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIiIG5hbWU9Ik91dHB1dDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMiIG5hbWU9IklucHV0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMiIG5hbWU9Ik91dHB1dDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQiIG5hbWU9IklucHV0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQiIG5hbWU9Ik91dHB1dDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNCIgdHlwZT0idG5zOlBvcnRUeXBlMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUiIG5hbWU9IklucHV0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUiIG5hbWU9Ik91dHB1dDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNSIgdHlwZT0idG5zOlBvcnRUeXBlMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYiIG5hbWU9IklucHV0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYiIG5hbWU9Ik91dHB1dDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNiIgdHlwZT0idG5zOlBvcnRUeXBlMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzciIG5hbWU9IklucHV0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzciIG5hbWU9Ik91dHB1dDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNyIgdHlwZT0idG5zOlBvcnRUeXBlMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgiIG5hbWU9IklucHV0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgiIG5hbWU9Ik91dHB1dDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOCIgdHlwZT0idG5zOlBvcnRUeXBlMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkiIG5hbWU9IklucHV0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkiIG5hbWU9Ik91dHB1dDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOSIgdHlwZT0idG5zOlBvcnRUeXBlMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAiIG5hbWU9IklucHV0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAiIG5hbWU9Ik91dHB1dDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEiIG5hbWU9IklucHV0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEiIG5hbWU9Ik91dHB1dDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIiIG5hbWU9IklucHV0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIiIG5hbWU9Ik91dHB1dDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMiIG5hbWU9IklucHV0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMiIG5hbWU9Ik91dHB1dDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQiIG5hbWU9IklucHV0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQiIG5hbWU9Ik91dHB1dDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUiIG5hbWU9IklucHV0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUiIG5hbWU9Ik91dHB1dDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYiIG5hbWU9IklucHV0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYiIG5hbWU9Ik91dHB1dDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDciIG5hbWU9IklucHV0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDciIG5hbWU9Ik91dHB1dDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgiIG5hbWU9IklucHV0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgiIG5hbWU9Ik91dHB1dDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkiIG5hbWU9IklucHV0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkiIG5hbWU9Ik91dHB1dDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAiIG5hbWU9IklucHV0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAiIG5hbWU9Ik91dHB1dDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEiIG5hbWU9IklucHV0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEiIG5hbWU9Ik91dHB1dDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIiIG5hbWU9IklucHV0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIiIG5hbWU9Ik91dHB1dDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMiIG5hbWU9IklucHV0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMiIG5hbWU9Ik91dHB1dDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQiIG5hbWU9IklucHV0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQiIG5hbWU9Ik91dHB1dDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUiIG5hbWU9IklucHV0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUiIG5hbWU9Ik91dHB1dDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYiIG5hbWU9IklucHV0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYiIG5hbWU9Ik91dHB1dDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTciIG5hbWU9IklucHV0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTciIG5hbWU9Ik91dHB1dDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgiIG5hbWU9IklucHV0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgiIG5hbWU9Ik91dHB1dDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkiIG5hbWU9IklucHV0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkiIG5hbWU9Ik91dHB1dDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAiIG5hbWU9IklucHV0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAiIG5hbWU9Ik91dHB1dDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEiIG5hbWU9IklucHV0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEiIG5hbWU9Ik91dHB1dDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIiIG5hbWU9IklucHV0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIiIG5hbWU9Ik91dHB1dDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMiIG5hbWU9IklucHV0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMiIG5hbWU9Ik91dHB1dDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQiIG5hbWU9IklucHV0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQiIG5hbWU9Ik91dHB1dDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUiIG5hbWU9IklucHV0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUiIG5hbWU9Ik91dHB1dDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYiIG5hbWU9IklucHV0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYiIG5hbWU9Ik91dHB1dDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjciIG5hbWU9IklucHV0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjciIG5hbWU9Ik91dHB1dDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgiIG5hbWU9IklucHV0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgiIG5hbWU9Ik91dHB1dDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkiIG5hbWU9IklucHV0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkiIG5hbWU9Ik91dHB1dDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAiIG5hbWU9IklucHV0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAiIG5hbWU9Ik91dHB1dDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEiIG5hbWU9IklucHV0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEiIG5hbWU9Ik91dHB1dDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIiIG5hbWU9IklucHV0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIiIG5hbWU9Ik91dHB1dDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMiIG5hbWU9IklucHV0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMiIG5hbWU9Ik91dHB1dDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQiIG5hbWU9IklucHV0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQiIG5hbWU9Ik91dHB1dDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUiIG5hbWU9IklucHV0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUiIG5hbWU9Ik91dHB1dDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYiIG5hbWU9IklucHV0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYiIG5hbWU9Ik91dHB1dDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzciIG5hbWU9IklucHV0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzciIG5hbWU9Ik91dHB1dDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgiIG5hbWU9IklucHV0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgiIG5hbWU9Ik91dHB1dDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkiIG5hbWU9IklucHV0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkiIG5hbWU9Ik91dHB1dDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAiIG5hbWU9IklucHV0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAiIG5hbWU9Ik91dHB1dDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MCIgdHlwZT0idG5zOlBvcnRUeXBlODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEiIG5hbWU9IklucHV0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEiIG5hbWU9Ik91dHB1dDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MSIgdHlwZT0idG5zOlBvcnRUeXBlODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIiIG5hbWU9IklucHV0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIiIG5hbWU9Ik91dHB1dDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MiIgdHlwZT0idG5zOlBvcnRUeXBlODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMiIG5hbWU9IklucHV0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMiIG5hbWU9Ik91dHB1dDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MyIgdHlwZT0idG5zOlBvcnRUeXBlODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQiIG5hbWU9IklucHV0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQiIG5hbWU9Ik91dHB1dDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NCIgdHlwZT0idG5zOlBvcnRUeXBlODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUiIG5hbWU9IklucHV0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUiIG5hbWU9Ik91dHB1dDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NSIgdHlwZT0idG5zOlBvcnRUeXBlODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYiIG5hbWU9IklucHV0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYiIG5hbWU9Ik91dHB1dDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NiIgdHlwZT0idG5zOlBvcnRUeXBlODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODciIG5hbWU9IklucHV0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODciIG5hbWU9Ik91dHB1dDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NyIgdHlwZT0idG5zOlBvcnRUeXBlODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgiIG5hbWU9IklucHV0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgiIG5hbWU9Ik91dHB1dDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OCIgdHlwZT0idG5zOlBvcnRUeXBlODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkiIG5hbWU9IklucHV0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkiIG5hbWU9Ik91dHB1dDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OSIgdHlwZT0idG5zOlBvcnRUeXBlODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAiIG5hbWU9IklucHV0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAiIG5hbWU9Ik91dHB1dDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEiIG5hbWU9IklucHV0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEiIG5hbWU9Ik91dHB1dDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIiIG5hbWU9IklucHV0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIiIG5hbWU9Ik91dHB1dDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMiIG5hbWU9IklucHV0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMiIG5hbWU9Ik91dHB1dDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQiIG5hbWU9IklucHV0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQiIG5hbWU9Ik91dHB1dDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUiIG5hbWU9IklucHV0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUiIG5hbWU9Ik91dHB1dDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYiIG5hbWU9IklucHV0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYiIG5hbWU9Ik91dHB1dDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTciIG5hbWU9IklucHV0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTciIG5hbWU9Ik91dHB1dDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgiIG5hbWU9IklucHV0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgiIG5hbWU9Ik91dHB1dDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkiIG5hbWU9IklucHV0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkiIG5hbWU9Ik91dHB1dDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAwIiBuYW1lPSJJbnB1dDEwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDAiIG5hbWU9Ik91dHB1dDEwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDEiIG5hbWU9IklucHV0MTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMSIgbmFtZT0iT3V0cHV0MTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDEiIHR5cGU9InRuczpQb3J0VHlwZTEwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMiIgbmFtZT0iSW5wdXQxMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAyIiBuYW1lPSJPdXRwdXQxMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMiIgdHlwZT0idG5zOlBvcnRUeXBlMTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAzIiBuYW1lPSJJbnB1dDEwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDMiIG5hbWU9Ik91dHB1dDEwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDQiIG5hbWU9IklucHV0MTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNCIgbmFtZT0iT3V0cHV0MTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDQiIHR5cGU9InRuczpQb3J0VHlwZTEwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNSIgbmFtZT0iSW5wdXQxMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA1IiBuYW1lPSJPdXRwdXQxMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNSIgdHlwZT0idG5zOlBvcnRUeXBlMTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA2IiBuYW1lPSJJbnB1dDEwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDYiIG5hbWU9Ik91dHB1dDEwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDciIG5hbWU9IklucHV0MTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNyIgbmFtZT0iT3V0cHV0MTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDciIHR5cGU9InRuczpQb3J0VHlwZTEwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOCIgbmFtZT0iSW5wdXQxMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA4IiBuYW1lPSJPdXRwdXQxMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOCIgdHlwZT0idG5zOlBvcnRUeXBlMTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA5IiBuYW1lPSJJbnB1dDEwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDkiIG5hbWU9Ik91dHB1dDEwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTAiIG5hbWU9IklucHV0MTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMCIgbmFtZT0iT3V0cHV0MTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTAiIHR5cGU9InRuczpQb3J0VHlwZTExMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMSIgbmFtZT0iSW5wdXQxMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTExIiBuYW1lPSJPdXRwdXQxMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMSIgdHlwZT0idG5zOlBvcnRUeXBlMTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEyIiBuYW1lPSJJbnB1dDExMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTIiIG5hbWU9Ik91dHB1dDExMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTMiIG5hbWU9IklucHV0MTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMyIgbmFtZT0iT3V0cHV0MTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTMiIHR5cGU9InRuczpQb3J0VHlwZTExMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNCIgbmFtZT0iSW5wdXQxMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE0IiBuYW1lPSJPdXRwdXQxMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNCIgdHlwZT0idG5zOlBvcnRUeXBlMTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE1IiBuYW1lPSJJbnB1dDExNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTUiIG5hbWU9Ik91dHB1dDExNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTYiIG5hbWU9IklucHV0MTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNiIgbmFtZT0iT3V0cHV0MTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTYiIHR5cGU9InRuczpQb3J0VHlwZTExNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNyIgbmFtZT0iSW5wdXQxMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE3IiBuYW1lPSJPdXRwdXQxMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNyIgdHlwZT0idG5zOlBvcnRUeXBlMTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE4IiBuYW1lPSJJbnB1dDExOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTgiIG5hbWU9Ik91dHB1dDExOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTkiIG5hbWU9IklucHV0MTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOSIgbmFtZT0iT3V0cHV0MTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTkiIHR5cGU9InRuczpQb3J0VHlwZTExOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMCIgbmFtZT0iSW5wdXQxMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIwIiBuYW1lPSJPdXRwdXQxMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMCIgdHlwZT0idG5zOlBvcnRUeXBlMTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIxIiBuYW1lPSJJbnB1dDEyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjEiIG5hbWU9Ik91dHB1dDEyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjIiIG5hbWU9IklucHV0MTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMiIgbmFtZT0iT3V0cHV0MTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjIiIHR5cGU9InRuczpQb3J0VHlwZTEyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMyIgbmFtZT0iSW5wdXQxMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIzIiBuYW1lPSJPdXRwdXQxMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMyIgdHlwZT0idG5zOlBvcnRUeXBlMTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI0IiBuYW1lPSJJbnB1dDEyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjQiIG5hbWU9Ik91dHB1dDEyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjUiIG5hbWU9IklucHV0MTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNSIgbmFtZT0iT3V0cHV0MTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjUiIHR5cGU9InRuczpQb3J0VHlwZTEyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNiIgbmFtZT0iSW5wdXQxMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI2IiBuYW1lPSJPdXRwdXQxMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNiIgdHlwZT0idG5zOlBvcnRUeXBlMTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI3IiBuYW1lPSJJbnB1dDEyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjciIG5hbWU9Ik91dHB1dDEyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjgiIG5hbWU9IklucHV0MTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOCIgbmFtZT0iT3V0cHV0MTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjgiIHR5cGU9InRuczpQb3J0VHlwZTEyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOSIgbmFtZT0iSW5wdXQxMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI5IiBuYW1lPSJPdXRwdXQxMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOSIgdHlwZT0idG5zOlBvcnRUeXBlMTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMwIiBuYW1lPSJJbnB1dDEzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzAiIG5hbWU9Ik91dHB1dDEzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzEiIG5hbWU9IklucHV0MTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMSIgbmFtZT0iT3V0cHV0MTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzEiIHR5cGU9InRuczpQb3J0VHlwZTEzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMiIgbmFtZT0iSW5wdXQxMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMyIiBuYW1lPSJPdXRwdXQxMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMiIgdHlwZT0idG5zOlBvcnRUeXBlMTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMzIiBuYW1lPSJJbnB1dDEzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzMiIG5hbWU9Ik91dHB1dDEzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzQiIG5hbWU9IklucHV0MTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNCIgbmFtZT0iT3V0cHV0MTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzQiIHR5cGU9InRuczpQb3J0VHlwZTEzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNSIgbmFtZT0iSW5wdXQxMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM1IiBuYW1lPSJPdXRwdXQxMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNSIgdHlwZT0idG5zOlBvcnRUeXBlMTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM2IiBuYW1lPSJJbnB1dDEzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzYiIG5hbWU9Ik91dHB1dDEzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzciIG5hbWU9IklucHV0MTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNyIgbmFtZT0iT3V0cHV0MTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzciIHR5cGU9InRuczpQb3J0VHlwZTEzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOCIgbmFtZT0iSW5wdXQxMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM4IiBuYW1lPSJPdXRwdXQxMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOCIgdHlwZT0idG5zOlBvcnRUeXBlMTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM5IiBuYW1lPSJJbnB1dDEzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzkiIG5hbWU9Ik91dHB1dDEzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDAiIG5hbWU9IklucHV0MTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MCIgbmFtZT0iT3V0cHV0MTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDAiIHR5cGU9InRuczpQb3J0VHlwZTE0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MSIgbmFtZT0iSW5wdXQxNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQxIiBuYW1lPSJPdXRwdXQxNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MSIgdHlwZT0idG5zOlBvcnRUeXBlMTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQyIiBuYW1lPSJJbnB1dDE0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDIiIG5hbWU9Ik91dHB1dDE0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDMiIG5hbWU9IklucHV0MTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MyIgbmFtZT0iT3V0cHV0MTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDMiIHR5cGU9InRuczpQb3J0VHlwZTE0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NCIgbmFtZT0iSW5wdXQxNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ0IiBuYW1lPSJPdXRwdXQxNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ1IiBuYW1lPSJJbnB1dDE0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDUiIG5hbWU9Ik91dHB1dDE0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDYiIG5hbWU9IklucHV0MTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NiIgbmFtZT0iT3V0cHV0MTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDYiIHR5cGU9InRuczpQb3J0VHlwZTE0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NyIgbmFtZT0iSW5wdXQxNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ3IiBuYW1lPSJPdXRwdXQxNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NyIgdHlwZT0idG5zOlBvcnRUeXBlMTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ4IiBuYW1lPSJJbnB1dDE0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDgiIG5hbWU9Ik91dHB1dDE0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDkiIG5hbWU9IklucHV0MTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OSIgbmFtZT0iT3V0cHV0MTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDkiIHR5cGU9InRuczpQb3J0VHlwZTE0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MCIgbmFtZT0iSW5wdXQxNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUwIiBuYW1lPSJPdXRwdXQxNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MCIgdHlwZT0idG5zOlBvcnRUeXBlMTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUxIiBuYW1lPSJJbnB1dDE1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTEiIG5hbWU9Ik91dHB1dDE1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTIiIG5hbWU9IklucHV0MTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MiIgbmFtZT0iT3V0cHV0MTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTIiIHR5cGU9InRuczpQb3J0VHlwZTE1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MyIgbmFtZT0iSW5wdXQxNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUzIiBuYW1lPSJPdXRwdXQxNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MyIgdHlwZT0idG5zOlBvcnRUeXBlMTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU0IiBuYW1lPSJJbnB1dDE1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTQiIG5hbWU9Ik91dHB1dDE1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTUiIG5hbWU9IklucHV0MTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NSIgbmFtZT0iT3V0cHV0MTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTUiIHR5cGU9InRuczpQb3J0VHlwZTE1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NiIgbmFtZT0iSW5wdXQxNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU2IiBuYW1lPSJPdXRwdXQxNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NiIgdHlwZT0idG5zOlBvcnRUeXBlMTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU3IiBuYW1lPSJJbnB1dDE1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTciIG5hbWU9Ik91dHB1dDE1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTgiIG5hbWU9IklucHV0MTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OCIgbmFtZT0iT3V0cHV0MTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTgiIHR5cGU9InRuczpQb3J0VHlwZTE1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OSIgbmFtZT0iSW5wdXQxNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU5IiBuYW1lPSJPdXRwdXQxNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OSIgdHlwZT0idG5zOlBvcnRUeXBlMTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYwIiBuYW1lPSJJbnB1dDE2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjAiIG5hbWU9Ik91dHB1dDE2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjEiIG5hbWU9IklucHV0MTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MSIgbmFtZT0iT3V0cHV0MTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjEiIHR5cGU9InRuczpQb3J0VHlwZTE2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MiIgbmFtZT0iSW5wdXQxNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYyIiBuYW1lPSJPdXRwdXQxNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MiIgdHlwZT0idG5zOlBvcnRUeXBlMTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYzIiBuYW1lPSJJbnB1dDE2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjMiIG5hbWU9Ik91dHB1dDE2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjQiIG5hbWU9IklucHV0MTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NCIgbmFtZT0iT3V0cHV0MTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjQiIHR5cGU9InRuczpQb3J0VHlwZTE2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NSIgbmFtZT0iSW5wdXQxNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY1IiBuYW1lPSJPdXRwdXQxNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NSIgdHlwZT0idG5zOlBvcnRUeXBlMTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY2IiBuYW1lPSJJbnB1dDE2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjYiIG5hbWU9Ik91dHB1dDE2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjciIG5hbWU9IklucHV0MTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NyIgbmFtZT0iT3V0cHV0MTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjciIHR5cGU9InRuczpQb3J0VHlwZTE2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OCIgbmFtZT0iSW5wdXQxNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY4IiBuYW1lPSJPdXRwdXQxNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OCIgdHlwZT0idG5zOlBvcnRUeXBlMTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY5IiBuYW1lPSJJbnB1dDE2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjkiIG5hbWU9Ik91dHB1dDE2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzAiIG5hbWU9IklucHV0MTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MCIgbmFtZT0iT3V0cHV0MTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzAiIHR5cGU9InRuczpQb3J0VHlwZTE3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MSIgbmFtZT0iSW5wdXQxNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcxIiBuYW1lPSJPdXRwdXQxNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MSIgdHlwZT0idG5zOlBvcnRUeXBlMTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcyIiBuYW1lPSJJbnB1dDE3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzIiIG5hbWU9Ik91dHB1dDE3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzMiIG5hbWU9IklucHV0MTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MyIgbmFtZT0iT3V0cHV0MTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzMiIHR5cGU9InRuczpQb3J0VHlwZTE3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NCIgbmFtZT0iSW5wdXQxNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc0IiBuYW1lPSJPdXRwdXQxNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NCIgdHlwZT0idG5zOlBvcnRUeXBlMTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc1IiBuYW1lPSJJbnB1dDE3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzUiIG5hbWU9Ik91dHB1dDE3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzYiIG5hbWU9IklucHV0MTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NiIgbmFtZT0iT3V0cHV0MTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzYiIHR5cGU9InRuczpQb3J0VHlwZTE3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NyIgbmFtZT0iSW5wdXQxNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc3IiBuYW1lPSJPdXRwdXQxNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NyIgdHlwZT0idG5zOlBvcnRUeXBlMTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc4IiBuYW1lPSJJbnB1dDE3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzgiIG5hbWU9Ik91dHB1dDE3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzkiIG5hbWU9IklucHV0MTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OSIgbmFtZT0iT3V0cHV0MTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzkiIHR5cGU9InRuczpQb3J0VHlwZTE3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MCIgbmFtZT0iSW5wdXQxODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgwIiBuYW1lPSJPdXRwdXQxODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MCIgdHlwZT0idG5zOlBvcnRUeXBlMTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MCIgYmluZGluZz0idG5zOkJpbmRpbmcxODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgxIiBuYW1lPSJJbnB1dDE4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODEiIG5hbWU9Ik91dHB1dDE4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODIiIG5hbWU9IklucHV0MTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MiIgbmFtZT0iT3V0cHV0MTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODIiIHR5cGU9InRuczpQb3J0VHlwZTE4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MyIgbmFtZT0iSW5wdXQxODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgzIiBuYW1lPSJPdXRwdXQxODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MyIgdHlwZT0idG5zOlBvcnRUeXBlMTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MyIgYmluZGluZz0idG5zOkJpbmRpbmcxODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg0IiBuYW1lPSJJbnB1dDE4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODQiIG5hbWU9Ik91dHB1dDE4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODUiIG5hbWU9IklucHV0MTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NSIgbmFtZT0iT3V0cHV0MTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODUiIHR5cGU9InRuczpQb3J0VHlwZTE4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NiIgbmFtZT0iSW5wdXQxODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg2IiBuYW1lPSJPdXRwdXQxODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NiIgdHlwZT0idG5zOlBvcnRUeXBlMTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NiIgYmluZGluZz0idG5zOkJpbmRpbmcxODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg3IiBuYW1lPSJJbnB1dDE4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODciIG5hbWU9Ik91dHB1dDE4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODgiIG5hbWU9IklucHV0MTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OCIgbmFtZT0iT3V0cHV0MTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODgiIHR5cGU9InRuczpQb3J0VHlwZTE4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OSIgbmFtZT0iSW5wdXQxODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg5IiBuYW1lPSJPdXRwdXQxODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OSIgdHlwZT0idG5zOlBvcnRUeXBlMTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OSIgYmluZGluZz0idG5zOkJpbmRpbmcxODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkwIiBuYW1lPSJJbnB1dDE5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTAiIG5hbWU9Ik91dHB1dDE5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTEiIG5hbWU9IklucHV0MTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MSIgbmFtZT0iT3V0cHV0MTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTEiIHR5cGU9InRuczpQb3J0VHlwZTE5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MiIgbmFtZT0iSW5wdXQxOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkyIiBuYW1lPSJPdXRwdXQxOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MiIgdHlwZT0idG5zOlBvcnRUeXBlMTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkzIiBuYW1lPSJJbnB1dDE5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTMiIG5hbWU9Ik91dHB1dDE5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTQiIG5hbWU9IklucHV0MTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NCIgbmFtZT0iT3V0cHV0MTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTQiIHR5cGU9InRuczpQb3J0VHlwZTE5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NSIgbmFtZT0iSW5wdXQxOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk1IiBuYW1lPSJPdXRwdXQxOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NSIgdHlwZT0idG5zOlBvcnRUeXBlMTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk2IiBuYW1lPSJJbnB1dDE5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTYiIG5hbWU9Ik91dHB1dDE5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTciIG5hbWU9IklucHV0MTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NyIgbmFtZT0iT3V0cHV0MTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTciIHR5cGU9InRuczpQb3J0VHlwZTE5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OCIgbmFtZT0iSW5wdXQxOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk4IiBuYW1lPSJPdXRwdXQxOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OCIgdHlwZT0idG5zOlBvcnRUeXBlMTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk5IiBuYW1lPSJJbnB1dDE5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTkiIG5hbWU9Ik91dHB1dDE5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDAiIG5hbWU9IklucHV0MjAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMCIgbmFtZT0iT3V0cHV0MjAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDAiIHR5cGU9InRuczpQb3J0VHlwZTIwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMSIgbmFtZT0iSW5wdXQyMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAxIiBuYW1lPSJPdXRwdXQyMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMSIgdHlwZT0idG5zOlBvcnRUeXBlMjAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAyIiBuYW1lPSJJbnB1dDIwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDIiIG5hbWU9Ik91dHB1dDIwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDMiIG5hbWU9IklucHV0MjAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMyIgbmFtZT0iT3V0cHV0MjAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDMiIHR5cGU9InRuczpQb3J0VHlwZTIwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNCIgbmFtZT0iSW5wdXQyMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA0IiBuYW1lPSJPdXRwdXQyMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNCIgdHlwZT0idG5zOlBvcnRUeXBlMjA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA1IiBuYW1lPSJJbnB1dDIwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDUiIG5hbWU9Ik91dHB1dDIwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDYiIG5hbWU9IklucHV0MjA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNiIgbmFtZT0iT3V0cHV0MjA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDYiIHR5cGU9InRuczpQb3J0VHlwZTIwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNyIgbmFtZT0iSW5wdXQyMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA3IiBuYW1lPSJPdXRwdXQyMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNyIgdHlwZT0idG5zOlBvcnRUeXBlMjA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA4IiBuYW1lPSJJbnB1dDIwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDgiIG5hbWU9Ik91dHB1dDIwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDkiIG5hbWU9IklucHV0MjA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwOSIgbmFtZT0iT3V0cHV0MjA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDkiIHR5cGU9InRuczpQb3J0VHlwZTIwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMCIgbmFtZT0iSW5wdXQyMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEwIiBuYW1lPSJPdXRwdXQyMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMCIgdHlwZT0idG5zOlBvcnRUeXBlMjEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjExIiBuYW1lPSJJbnB1dDIxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTEiIG5hbWU9Ik91dHB1dDIxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjExIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTIiIG5hbWU9IklucHV0MjEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMiIgbmFtZT0iT3V0cHV0MjEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTIiIHR5cGU9InRuczpQb3J0VHlwZTIxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMyIgbmFtZT0iSW5wdXQyMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEzIiBuYW1lPSJPdXRwdXQyMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMyIgdHlwZT0idG5zOlBvcnRUeXBlMjEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE0IiBuYW1lPSJJbnB1dDIxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTQiIG5hbWU9Ik91dHB1dDIxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTUiIG5hbWU9IklucHV0MjE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNSIgbmFtZT0iT3V0cHV0MjE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTUiIHR5cGU9InRuczpQb3J0VHlwZTIxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNiIgbmFtZT0iSW5wdXQyMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE2IiBuYW1lPSJPdXRwdXQyMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNiIgdHlwZT0idG5zOlBvcnRUeXBlMjE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE3IiBuYW1lPSJJbnB1dDIxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTciIG5hbWU9Ik91dHB1dDIxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTgiIG5hbWU9IklucHV0MjE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxOCIgbmFtZT0iT3V0cHV0MjE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTgiIHR5cGU9InRuczpQb3J0VHlwZTIxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxOSIgbmFtZT0iSW5wdXQyMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE5IiBuYW1lPSJPdXRwdXQyMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxOSIgdHlwZT0idG5zOlBvcnRUeXBlMjE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIwIiBuYW1lPSJJbnB1dDIyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjAiIG5hbWU9Ik91dHB1dDIyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjEiIG5hbWU9IklucHV0MjIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMSIgbmFtZT0iT3V0cHV0MjIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjEiIHR5cGU9InRuczpQb3J0VHlwZTIyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMiIgbmFtZT0iSW5wdXQyMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIyIiBuYW1lPSJPdXRwdXQyMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIzIiBuYW1lPSJJbnB1dDIyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjMiIG5hbWU9Ik91dHB1dDIyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjQiIG5hbWU9IklucHV0MjI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNCIgbmFtZT0iT3V0cHV0MjI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjQiIHR5cGU9InRuczpQb3J0VHlwZTIyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNSIgbmFtZT0iSW5wdXQyMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI1IiBuYW1lPSJPdXRwdXQyMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI2IiBuYW1lPSJJbnB1dDIyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjYiIG5hbWU9Ik91dHB1dDIyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjciIG5hbWU9IklucHV0MjI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNyIgbmFtZT0iT3V0cHV0MjI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjciIHR5cGU9InRuczpQb3J0VHlwZTIyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyOCIgbmFtZT0iSW5wdXQyMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI4IiBuYW1lPSJPdXRwdXQyMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI5IiBuYW1lPSJJbnB1dDIyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjkiIG5hbWU9Ik91dHB1dDIyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzAiIG5hbWU9IklucHV0MjMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMCIgbmFtZT0iT3V0cHV0MjMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzAiIHR5cGU9InRuczpQb3J0VHlwZTIzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMSIgbmFtZT0iSW5wdXQyMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMxIiBuYW1lPSJPdXRwdXQyMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMSIgdHlwZT0idG5zOlBvcnRUeXBlMjMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMyIiBuYW1lPSJJbnB1dDIzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzIiIG5hbWU9Ik91dHB1dDIzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzMiIG5hbWU9IklucHV0MjMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMyIgbmFtZT0iT3V0cHV0MjMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzMiIHR5cGU9InRuczpQb3J0VHlwZTIzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNCIgbmFtZT0iSW5wdXQyMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM0IiBuYW1lPSJPdXRwdXQyMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNCIgdHlwZT0idG5zOlBvcnRUeXBlMjM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM1IiBuYW1lPSJJbnB1dDIzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzUiIG5hbWU9Ik91dHB1dDIzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzYiIG5hbWU9IklucHV0MjM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNiIgbmFtZT0iT3V0cHV0MjM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzYiIHR5cGU9InRuczpQb3J0VHlwZTIzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNyIgbmFtZT0iSW5wdXQyMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM3IiBuYW1lPSJPdXRwdXQyMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNyIgdHlwZT0idG5zOlBvcnRUeXBlMjM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM4IiBuYW1lPSJJbnB1dDIzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzgiIG5hbWU9Ik91dHB1dDIzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzkiIG5hbWU9IklucHV0MjM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzOSIgbmFtZT0iT3V0cHV0MjM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzkiIHR5cGU9InRuczpQb3J0VHlwZTIzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MCIgbmFtZT0iSW5wdXQyNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQwIiBuYW1lPSJPdXRwdXQyNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MCIgdHlwZT0idG5zOlBvcnRUeXBlMjQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQxIiBuYW1lPSJJbnB1dDI0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDEiIG5hbWU9Ik91dHB1dDI0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDIiIG5hbWU9IklucHV0MjQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MiIgbmFtZT0iT3V0cHV0MjQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDIiIHR5cGU9InRuczpQb3J0VHlwZTI0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MyIgbmFtZT0iSW5wdXQyNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQzIiBuYW1lPSJPdXRwdXQyNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MyIgdHlwZT0idG5zOlBvcnRUeXBlMjQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ0IiBuYW1lPSJJbnB1dDI0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDQiIG5hbWU9Ik91dHB1dDI0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDUiIG5hbWU9IklucHV0MjQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NSIgbmFtZT0iT3V0cHV0MjQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDUiIHR5cGU9InRuczpQb3J0VHlwZTI0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NiIgbmFtZT0iSW5wdXQyNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ2IiBuYW1lPSJPdXRwdXQyNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NiIgdHlwZT0idG5zOlBvcnRUeXBlMjQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ3IiBuYW1lPSJJbnB1dDI0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDciIG5hbWU9Ik91dHB1dDI0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDgiIG5hbWU9IklucHV0MjQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0OCIgbmFtZT0iT3V0cHV0MjQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDgiIHR5cGU9InRuczpQb3J0VHlwZTI0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0OSIgbmFtZT0iSW5wdXQyNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ5IiBuYW1lPSJPdXRwdXQyNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0OSIgdHlwZT0idG5zOlBvcnRUeXBlMjQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUwIiBuYW1lPSJJbnB1dDI1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTAiIG5hbWU9Ik91dHB1dDI1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTEiIG5hbWU9IklucHV0MjUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MSIgbmFtZT0iT3V0cHV0MjUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTEiIHR5cGU9InRuczpQb3J0VHlwZTI1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MiIgbmFtZT0iSW5wdXQyNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUyIiBuYW1lPSJPdXRwdXQyNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MiIgdHlwZT0idG5zOlBvcnRUeXBlMjUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUzIiBuYW1lPSJJbnB1dDI1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTMiIG5hbWU9Ik91dHB1dDI1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTQiIG5hbWU9IklucHV0MjU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NCIgbmFtZT0iT3V0cHV0MjU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTQiIHR5cGU9InRuczpQb3J0VHlwZTI1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NSIgbmFtZT0iSW5wdXQyNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU1IiBuYW1lPSJPdXRwdXQyNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NSIgdHlwZT0idG5zOlBvcnRUeXBlMjU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU2IiBuYW1lPSJJbnB1dDI1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTYiIG5hbWU9Ik91dHB1dDI1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTciIG5hbWU9IklucHV0MjU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NyIgbmFtZT0iT3V0cHV0MjU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTciIHR5cGU9InRuczpQb3J0VHlwZTI1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1OCIgbmFtZT0iSW5wdXQyNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU4IiBuYW1lPSJPdXRwdXQyNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1OCIgdHlwZT0idG5zOlBvcnRUeXBlMjU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU5IiBuYW1lPSJJbnB1dDI1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTkiIG5hbWU9Ik91dHB1dDI1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjAiIG5hbWU9IklucHV0MjYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MCIgbmFtZT0iT3V0cHV0MjYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjAiIHR5cGU9InRuczpQb3J0VHlwZTI2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MSIgbmFtZT0iSW5wdXQyNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYxIiBuYW1lPSJPdXRwdXQyNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MSIgdHlwZT0idG5zOlBvcnRUeXBlMjYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYyIiBuYW1lPSJJbnB1dDI2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjIiIG5hbWU9Ik91dHB1dDI2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjMiIG5hbWU9IklucHV0MjYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MyIgbmFtZT0iT3V0cHV0MjYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjMiIHR5cGU9InRuczpQb3J0VHlwZTI2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NCIgbmFtZT0iSW5wdXQyNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY0IiBuYW1lPSJPdXRwdXQyNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NCIgdHlwZT0idG5zOlBvcnRUeXBlMjY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY1IiBuYW1lPSJJbnB1dDI2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjUiIG5hbWU9Ik91dHB1dDI2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjYiIG5hbWU9IklucHV0MjY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NiIgbmFtZT0iT3V0cHV0MjY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjYiIHR5cGU9InRuczpQb3J0VHlwZTI2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NyIgbmFtZT0iSW5wdXQyNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY3IiBuYW1lPSJPdXRwdXQyNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NyIgdHlwZT0idG5zOlBvcnRUeXBlMjY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY4IiBuYW1lPSJJbnB1dDI2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjgiIG5hbWU9Ik91dHB1dDI2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjkiIG5hbWU9IklucHV0MjY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2OSIgbmFtZT0iT3V0cHV0MjY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjkiIHR5cGU9InRuczpQb3J0VHlwZTI2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MCIgbmFtZT0iSW5wdXQyNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcwIiBuYW1lPSJPdXRwdXQyNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MCIgdHlwZT0idG5zOlBvcnRUeXBlMjcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcxIiBuYW1lPSJJbnB1dDI3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzEiIG5hbWU9Ik91dHB1dDI3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzIiIG5hbWU9IklucHV0MjcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MiIgbmFtZT0iT3V0cHV0MjcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzIiIHR5cGU9InRuczpQb3J0VHlwZTI3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MyIgbmFtZT0iSW5wdXQyNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjczIiBuYW1lPSJPdXRwdXQyNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MyIgdHlwZT0idG5zOlBvcnRUeXBlMjczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc0IiBuYW1lPSJJbnB1dDI3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzQiIG5hbWU9Ik91dHB1dDI3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzUiIG5hbWU9IklucHV0Mjc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NSIgbmFtZT0iT3V0cHV0Mjc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzUiIHR5cGU9InRuczpQb3J0VHlwZTI3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NiIgbmFtZT0iSW5wdXQyNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc2IiBuYW1lPSJPdXRwdXQyNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NiIgdHlwZT0idG5zOlBvcnRUeXBlMjc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc3IiBuYW1lPSJJbnB1dDI3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzciIG5hbWU9Ik91dHB1dDI3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzgiIG5hbWU9IklucHV0Mjc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3OCIgbmFtZT0iT3V0cHV0Mjc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzgiIHR5cGU9InRuczpQb3J0VHlwZTI3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3OSIgbmFtZT0iSW5wdXQyNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc5IiBuYW1lPSJPdXRwdXQyNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3OSIgdHlwZT0idG5zOlBvcnRUeXBlMjc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgwIiBuYW1lPSJJbnB1dDI4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODAiIG5hbWU9Ik91dHB1dDI4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODEiIG5hbWU9IklucHV0MjgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MSIgbmFtZT0iT3V0cHV0MjgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODEiIHR5cGU9InRuczpQb3J0VHlwZTI4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MiIgbmFtZT0iSW5wdXQyODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgyIiBuYW1lPSJPdXRwdXQyODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MiIgdHlwZT0idG5zOlBvcnRUeXBlMjgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MiIgYmluZGluZz0idG5zOkJpbmRpbmcyODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgzIiBuYW1lPSJJbnB1dDI4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODMiIG5hbWU9Ik91dHB1dDI4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODQiIG5hbWU9IklucHV0Mjg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NCIgbmFtZT0iT3V0cHV0Mjg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODQiIHR5cGU9InRuczpQb3J0VHlwZTI4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NSIgbmFtZT0iSW5wdXQyODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg1IiBuYW1lPSJPdXRwdXQyODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NSIgdHlwZT0idG5zOlBvcnRUeXBlMjg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NSIgYmluZGluZz0idG5zOkJpbmRpbmcyODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg2IiBuYW1lPSJJbnB1dDI4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODYiIG5hbWU9Ik91dHB1dDI4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODciIG5hbWU9IklucHV0Mjg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NyIgbmFtZT0iT3V0cHV0Mjg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODciIHR5cGU9InRuczpQb3J0VHlwZTI4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODciIGJpbmRpbmc9InRuczpCaW5kaW5nMjg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4OCIgbmFtZT0iSW5wdXQyODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg4IiBuYW1lPSJPdXRwdXQyODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4OCIgdHlwZT0idG5zOlBvcnRUeXBlMjg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4OCIgYmluZGluZz0idG5zOkJpbmRpbmcyODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg5IiBuYW1lPSJJbnB1dDI4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODkiIG5hbWU9Ik91dHB1dDI4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTAiIG5hbWU9IklucHV0MjkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MCIgbmFtZT0iT3V0cHV0MjkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTAiIHR5cGU9InRuczpQb3J0VHlwZTI5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MSIgbmFtZT0iSW5wdXQyOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkxIiBuYW1lPSJPdXRwdXQyOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MSIgdHlwZT0idG5zOlBvcnRUeXBlMjkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkyIiBuYW1lPSJJbnB1dDI5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTIiIG5hbWU9Ik91dHB1dDI5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTMiIG5hbWU9IklucHV0MjkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MyIgbmFtZT0iT3V0cHV0MjkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTMiIHR5cGU9InRuczpQb3J0VHlwZTI5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NCIgbmFtZT0iSW5wdXQyOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk0IiBuYW1lPSJPdXRwdXQyOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NCIgdHlwZT0idG5zOlBvcnRUeXBlMjk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk1IiBuYW1lPSJJbnB1dDI5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTUiIG5hbWU9Ik91dHB1dDI5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTYiIG5hbWU9IklucHV0Mjk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NiIgbmFtZT0iT3V0cHV0Mjk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTYiIHR5cGU9InRuczpQb3J0VHlwZTI5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NyIgbmFtZT0iSW5wdXQyOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk3IiBuYW1lPSJPdXRwdXQyOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NyIgdHlwZT0idG5zOlBvcnRUeXBlMjk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NyIgYmluZGluZz0idG5zOkJpbmRpbmcyOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk4IiBuYW1lPSJJbnB1dDI5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTgiIG5hbWU9Ik91dHB1dDI5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTkiIG5hbWU9IklucHV0Mjk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5OSIgbmFtZT0iT3V0cHV0Mjk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTkiIHR5cGU9InRuczpQb3J0VHlwZTI5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMCIgbmFtZT0iSW5wdXQzMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAwIiBuYW1lPSJPdXRwdXQzMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMCIgYmluZGluZz0idG5zOkJpbmRpbmczMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAxIiBuYW1lPSJJbnB1dDMwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDEiIG5hbWU9Ik91dHB1dDMwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDIiIG5hbWU9IklucHV0MzAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMiIgbmFtZT0iT3V0cHV0MzAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDIiIHR5cGU9InRuczpQb3J0VHlwZTMwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMyIgbmFtZT0iSW5wdXQzMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAzIiBuYW1lPSJPdXRwdXQzMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMyIgdHlwZT0idG5zOlBvcnRUeXBlMzAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMyIgYmluZGluZz0idG5zOkJpbmRpbmczMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA0IiBuYW1lPSJJbnB1dDMwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDQiIG5hbWU9Ik91dHB1dDMwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDUiIG5hbWU9IklucHV0MzA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNSIgbmFtZT0iT3V0cHV0MzA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDUiIHR5cGU9InRuczpQb3J0VHlwZTMwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNiIgbmFtZT0iSW5wdXQzMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA2IiBuYW1lPSJPdXRwdXQzMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNiIgdHlwZT0idG5zOlBvcnRUeXBlMzA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNiIgYmluZGluZz0idG5zOkJpbmRpbmczMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA3IiBuYW1lPSJJbnB1dDMwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDciIG5hbWU9Ik91dHB1dDMwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDgiIG5hbWU9IklucHV0MzA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwOCIgbmFtZT0iT3V0cHV0MzA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDgiIHR5cGU9InRuczpQb3J0VHlwZTMwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwOSIgbmFtZT0iSW5wdXQzMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA5IiBuYW1lPSJPdXRwdXQzMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwOSIgdHlwZT0idG5zOlBvcnRUeXBlMzA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwOSIgYmluZGluZz0idG5zOkJpbmRpbmczMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEwIiBuYW1lPSJJbnB1dDMxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTAiIG5hbWU9Ik91dHB1dDMxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTEiIG5hbWU9IklucHV0MzExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMSIgbmFtZT0iT3V0cHV0MzExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTEiIHR5cGU9InRuczpQb3J0VHlwZTMxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMiIgbmFtZT0iSW5wdXQzMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEyIiBuYW1lPSJPdXRwdXQzMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMiIgdHlwZT0idG5zOlBvcnRUeXBlMzEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMiIgYmluZGluZz0idG5zOkJpbmRpbmczMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEzIiBuYW1lPSJJbnB1dDMxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTMiIG5hbWU9Ik91dHB1dDMxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTQiIG5hbWU9IklucHV0MzE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNCIgbmFtZT0iT3V0cHV0MzE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTQiIHR5cGU9InRuczpQb3J0VHlwZTMxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNSIgbmFtZT0iSW5wdXQzMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE1IiBuYW1lPSJPdXRwdXQzMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNSIgdHlwZT0idG5zOlBvcnRUeXBlMzE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNSIgYmluZGluZz0idG5zOkJpbmRpbmczMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE2IiBuYW1lPSJJbnB1dDMxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTYiIG5hbWU9Ik91dHB1dDMxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTciIG5hbWU9IklucHV0MzE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNyIgbmFtZT0iT3V0cHV0MzE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTciIHR5cGU9InRuczpQb3J0VHlwZTMxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxOCIgbmFtZT0iSW5wdXQzMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE4IiBuYW1lPSJPdXRwdXQzMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxOCIgdHlwZT0idG5zOlBvcnRUeXBlMzE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxOCIgYmluZGluZz0idG5zOkJpbmRpbmczMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE5IiBuYW1lPSJJbnB1dDMxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTkiIG5hbWU9Ik91dHB1dDMxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjAiIG5hbWU9IklucHV0MzIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMCIgbmFtZT0iT3V0cHV0MzIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjAiIHR5cGU9InRuczpQb3J0VHlwZTMyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMSIgbmFtZT0iSW5wdXQzMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIxIiBuYW1lPSJPdXRwdXQzMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMSIgdHlwZT0idG5zOlBvcnRUeXBlMzIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMSIgYmluZGluZz0idG5zOkJpbmRpbmczMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIyIiBuYW1lPSJJbnB1dDMyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjIiIG5hbWU9Ik91dHB1dDMyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjMiIG5hbWU9IklucHV0MzIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMyIgbmFtZT0iT3V0cHV0MzIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjMiIHR5cGU9InRuczpQb3J0VHlwZTMyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNCIgbmFtZT0iSW5wdXQzMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI0IiBuYW1lPSJPdXRwdXQzMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNCIgdHlwZT0idG5zOlBvcnRUeXBlMzI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNCIgYmluZGluZz0idG5zOkJpbmRpbmczMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI1IiBuYW1lPSJJbnB1dDMyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjUiIG5hbWU9Ik91dHB1dDMyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjYiIG5hbWU9IklucHV0MzI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNiIgbmFtZT0iT3V0cHV0MzI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjYiIHR5cGU9InRuczpQb3J0VHlwZTMyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNyIgbmFtZT0iSW5wdXQzMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI3IiBuYW1lPSJPdXRwdXQzMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNyIgdHlwZT0idG5zOlBvcnRUeXBlMzI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNyIgYmluZGluZz0idG5zOkJpbmRpbmczMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI4IiBuYW1lPSJJbnB1dDMyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjgiIG5hbWU9Ik91dHB1dDMyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjkiIG5hbWU9IklucHV0MzI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyOSIgbmFtZT0iT3V0cHV0MzI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjkiIHR5cGU9InRuczpQb3J0VHlwZTMyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMCIgbmFtZT0iSW5wdXQzMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMwIiBuYW1lPSJPdXRwdXQzMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMCIgdHlwZT0idG5zOlBvcnRUeXBlMzMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMxIiBuYW1lPSJJbnB1dDMzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzEiIG5hbWU9Ik91dHB1dDMzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzIiIG5hbWU9IklucHV0MzMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMiIgbmFtZT0iT3V0cHV0MzMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzIiIHR5cGU9InRuczpQb3J0VHlwZTMzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMyIgbmFtZT0iSW5wdXQzMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMzIiBuYW1lPSJPdXRwdXQzMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM0IiBuYW1lPSJJbnB1dDMzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzQiIG5hbWU9Ik91dHB1dDMzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzUiIG5hbWU9IklucHV0MzM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNSIgbmFtZT0iT3V0cHV0MzM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzUiIHR5cGU9InRuczpQb3J0VHlwZTMzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNiIgbmFtZT0iSW5wdXQzMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM2IiBuYW1lPSJPdXRwdXQzMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNiIgdHlwZT0idG5zOlBvcnRUeXBlMzM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNiIgYmluZGluZz0idG5zOkJpbmRpbmczMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM3IiBuYW1lPSJJbnB1dDMzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzciIG5hbWU9Ik91dHB1dDMzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzgiIG5hbWU9IklucHV0MzM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzOCIgbmFtZT0iT3V0cHV0MzM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzgiIHR5cGU9InRuczpQb3J0VHlwZTMzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzOSIgbmFtZT0iSW5wdXQzMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM5IiBuYW1lPSJPdXRwdXQzMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzOSIgdHlwZT0idG5zOlBvcnRUeXBlMzM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzOSIgYmluZGluZz0idG5zOkJpbmRpbmczMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQwIiBuYW1lPSJJbnB1dDM0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDAiIG5hbWU9Ik91dHB1dDM0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDEiIG5hbWU9IklucHV0MzQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MSIgbmFtZT0iT3V0cHV0MzQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDEiIHR5cGU9InRuczpQb3J0VHlwZTM0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MiIgbmFtZT0iSW5wdXQzNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQyIiBuYW1lPSJPdXRwdXQzNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MiIgdHlwZT0idG5zOlBvcnRUeXBlMzQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MiIgYmluZGluZz0idG5zOkJpbmRpbmczNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQzIiBuYW1lPSJJbnB1dDM0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDMiIG5hbWU9Ik91dHB1dDM0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDQiIG5hbWU9IklucHV0MzQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NCIgbmFtZT0iT3V0cHV0MzQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDQiIHR5cGU9InRuczpQb3J0VHlwZTM0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NSIgbmFtZT0iSW5wdXQzNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ1IiBuYW1lPSJPdXRwdXQzNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NSIgdHlwZT0idG5zOlBvcnRUeXBlMzQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NSIgYmluZGluZz0idG5zOkJpbmRpbmczNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ2IiBuYW1lPSJJbnB1dDM0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDYiIG5hbWU9Ik91dHB1dDM0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDciIG5hbWU9IklucHV0MzQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NyIgbmFtZT0iT3V0cHV0MzQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDciIHR5cGU9InRuczpQb3J0VHlwZTM0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0OCIgbmFtZT0iSW5wdXQzNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ4IiBuYW1lPSJPdXRwdXQzNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0OCIgdHlwZT0idG5zOlBvcnRUeXBlMzQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0OCIgYmluZGluZz0idG5zOkJpbmRpbmczNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ5IiBuYW1lPSJJbnB1dDM0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDkiIG5hbWU9Ik91dHB1dDM0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTAiIG5hbWU9IklucHV0MzUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MCIgbmFtZT0iT3V0cHV0MzUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTAiIHR5cGU9InRuczpQb3J0VHlwZTM1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MSIgbmFtZT0iSW5wdXQzNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUxIiBuYW1lPSJPdXRwdXQzNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MSIgdHlwZT0idG5zOlBvcnRUeXBlMzUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MSIgYmluZGluZz0idG5zOkJpbmRpbmczNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUyIiBuYW1lPSJJbnB1dDM1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTIiIG5hbWU9Ik91dHB1dDM1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTMiIG5hbWU9IklucHV0MzUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MyIgbmFtZT0iT3V0cHV0MzUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTMiIHR5cGU9InRuczpQb3J0VHlwZTM1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NCIgbmFtZT0iSW5wdXQzNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU0IiBuYW1lPSJPdXRwdXQzNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NCIgdHlwZT0idG5zOlBvcnRUeXBlMzU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NCIgYmluZGluZz0idG5zOkJpbmRpbmczNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU1IiBuYW1lPSJJbnB1dDM1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTUiIG5hbWU9Ik91dHB1dDM1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTYiIG5hbWU9IklucHV0MzU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NiIgbmFtZT0iT3V0cHV0MzU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTYiIHR5cGU9InRuczpQb3J0VHlwZTM1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NyIgbmFtZT0iSW5wdXQzNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU3IiBuYW1lPSJPdXRwdXQzNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NyIgdHlwZT0idG5zOlBvcnRUeXBlMzU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NyIgYmluZGluZz0idG5zOkJpbmRpbmczNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU4IiBuYW1lPSJJbnB1dDM1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTgiIG5hbWU9Ik91dHB1dDM1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTkiIG5hbWU9IklucHV0MzU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1OSIgbmFtZT0iT3V0cHV0MzU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTkiIHR5cGU9InRuczpQb3J0VHlwZTM1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MCIgbmFtZT0iSW5wdXQzNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYwIiBuYW1lPSJPdXRwdXQzNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MCIgdHlwZT0idG5zOlBvcnRUeXBlMzYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MCIgYmluZGluZz0idG5zOkJpbmRpbmczNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYxIiBuYW1lPSJJbnB1dDM2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjEiIG5hbWU9Ik91dHB1dDM2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjIiIG5hbWU9IklucHV0MzYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MiIgbmFtZT0iT3V0cHV0MzYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjIiIHR5cGU9InRuczpQb3J0VHlwZTM2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MyIgbmFtZT0iSW5wdXQzNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYzIiBuYW1lPSJPdXRwdXQzNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MyIgdHlwZT0idG5zOlBvcnRUeXBlMzYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MyIgYmluZGluZz0idG5zOkJpbmRpbmczNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY0IiBuYW1lPSJJbnB1dDM2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjQiIG5hbWU9Ik91dHB1dDM2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjUiIG5hbWU9IklucHV0MzY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NSIgbmFtZT0iT3V0cHV0MzY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjUiIHR5cGU9InRuczpQb3J0VHlwZTM2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NiIgbmFtZT0iSW5wdXQzNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY2IiBuYW1lPSJPdXRwdXQzNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NiIgdHlwZT0idG5zOlBvcnRUeXBlMzY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NiIgYmluZGluZz0idG5zOkJpbmRpbmczNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY3IiBuYW1lPSJJbnB1dDM2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjciIG5hbWU9Ik91dHB1dDM2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjgiIG5hbWU9IklucHV0MzY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2OCIgbmFtZT0iT3V0cHV0MzY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjgiIHR5cGU9InRuczpQb3J0VHlwZTM2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2OSIgbmFtZT0iSW5wdXQzNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY5IiBuYW1lPSJPdXRwdXQzNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2OSIgdHlwZT0idG5zOlBvcnRUeXBlMzY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2OSIgYmluZGluZz0idG5zOkJpbmRpbmczNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcwIiBuYW1lPSJJbnB1dDM3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzAiIG5hbWU9Ik91dHB1dDM3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzEiIG5hbWU9IklucHV0MzcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MSIgbmFtZT0iT3V0cHV0MzcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzEiIHR5cGU9InRuczpQb3J0VHlwZTM3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MiIgbmFtZT0iSW5wdXQzNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcyIiBuYW1lPSJPdXRwdXQzNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MiIgdHlwZT0idG5zOlBvcnRUeXBlMzcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MiIgYmluZGluZz0idG5zOkJpbmRpbmczNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzczIiBuYW1lPSJJbnB1dDM3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzMiIG5hbWU9Ik91dHB1dDM3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzQiIG5hbWU9IklucHV0Mzc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NCIgbmFtZT0iT3V0cHV0Mzc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzQiIHR5cGU9InRuczpQb3J0VHlwZTM3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NSIgbmFtZT0iSW5wdXQzNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc1IiBuYW1lPSJPdXRwdXQzNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NSIgdHlwZT0idG5zOlBvcnRUeXBlMzc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NSIgYmluZGluZz0idG5zOkJpbmRpbmczNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc2IiBuYW1lPSJJbnB1dDM3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzYiIG5hbWU9Ik91dHB1dDM3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzciIG5hbWU9IklucHV0Mzc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NyIgbmFtZT0iT3V0cHV0Mzc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzciIHR5cGU9InRuczpQb3J0VHlwZTM3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3OCIgbmFtZT0iSW5wdXQzNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc4IiBuYW1lPSJPdXRwdXQzNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3OCIgdHlwZT0idG5zOlBvcnRUeXBlMzc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3OCIgYmluZGluZz0idG5zOkJpbmRpbmczNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc5IiBuYW1lPSJJbnB1dDM3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzkiIG5hbWU9Ik91dHB1dDM3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODAiIG5hbWU9IklucHV0MzgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MCIgbmFtZT0iT3V0cHV0MzgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODAiIHR5cGU9InRuczpQb3J0VHlwZTM4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MSIgbmFtZT0iSW5wdXQzODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgxIiBuYW1lPSJPdXRwdXQzODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MSIgdHlwZT0idG5zOlBvcnRUeXBlMzgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MSIgYmluZGluZz0idG5zOkJpbmRpbmczODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgyIiBuYW1lPSJJbnB1dDM4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODIiIG5hbWU9Ik91dHB1dDM4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODMiIG5hbWU9IklucHV0MzgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MyIgbmFtZT0iT3V0cHV0MzgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODMiIHR5cGU9InRuczpQb3J0VHlwZTM4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NCIgbmFtZT0iSW5wdXQzODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg0IiBuYW1lPSJPdXRwdXQzODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NCIgdHlwZT0idG5zOlBvcnRUeXBlMzg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NCIgYmluZGluZz0idG5zOkJpbmRpbmczODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg1IiBuYW1lPSJJbnB1dDM4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODUiIG5hbWU9Ik91dHB1dDM4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODYiIG5hbWU9IklucHV0Mzg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NiIgbmFtZT0iT3V0cHV0Mzg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODYiIHR5cGU9InRuczpQb3J0VHlwZTM4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NyIgbmFtZT0iSW5wdXQzODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg3IiBuYW1lPSJPdXRwdXQzODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NyIgdHlwZT0idG5zOlBvcnRUeXBlMzg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NyIgYmluZGluZz0idG5zOkJpbmRpbmczODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg4IiBuYW1lPSJJbnB1dDM4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODgiIG5hbWU9Ik91dHB1dDM4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODkiIG5hbWU9IklucHV0Mzg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4OSIgbmFtZT0iT3V0cHV0Mzg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODkiIHR5cGU9InRuczpQb3J0VHlwZTM4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MCIgbmFtZT0iSW5wdXQzOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkwIiBuYW1lPSJPdXRwdXQzOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MCIgdHlwZT0idG5zOlBvcnRUeXBlMzkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MCIgYmluZGluZz0idG5zOkJpbmRpbmczOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkxIiBuYW1lPSJJbnB1dDM5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTEiIG5hbWU9Ik91dHB1dDM5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTIiIG5hbWU9IklucHV0MzkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MiIgbmFtZT0iT3V0cHV0MzkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTIiIHR5cGU9InRuczpQb3J0VHlwZTM5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MyIgbmFtZT0iSW5wdXQzOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkzIiBuYW1lPSJPdXRwdXQzOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MyIgdHlwZT0idG5zOlBvcnRUeXBlMzkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MyIgYmluZGluZz0idG5zOkJpbmRpbmczOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk0IiBuYW1lPSJJbnB1dDM5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTQiIG5hbWU9Ik91dHB1dDM5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTUiIG5hbWU9IklucHV0Mzk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NSIgbmFtZT0iT3V0cHV0Mzk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTUiIHR5cGU9InRuczpQb3J0VHlwZTM5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NiIgbmFtZT0iSW5wdXQzOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk2IiBuYW1lPSJPdXRwdXQzOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NiIgdHlwZT0idG5zOlBvcnRUeXBlMzk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NiIgYmluZGluZz0idG5zOkJpbmRpbmczOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk3IiBuYW1lPSJJbnB1dDM5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTciIG5hbWU9Ik91dHB1dDM5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTgiIG5hbWU9IklucHV0Mzk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5OCIgbmFtZT0iT3V0cHV0Mzk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTgiIHR5cGU9InRuczpQb3J0VHlwZTM5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5OSIgbmFtZT0iSW5wdXQzOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk5IiBuYW1lPSJPdXRwdXQzOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5OSIgdHlwZT0idG5zOlBvcnRUeXBlMzk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5OSIgYmluZGluZz0idG5zOkJpbmRpbmczOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAwIiBuYW1lPSJJbnB1dDQwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDAiIG5hbWU9Ik91dHB1dDQwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDEiIG5hbWU9IklucHV0NDAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMSIgbmFtZT0iT3V0cHV0NDAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDEiIHR5cGU9InRuczpQb3J0VHlwZTQwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMiIgbmFtZT0iSW5wdXQ0MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAyIiBuYW1lPSJPdXRwdXQ0MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMiIgdHlwZT0idG5zOlBvcnRUeXBlNDAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAzIiBuYW1lPSJJbnB1dDQwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDMiIG5hbWU9Ik91dHB1dDQwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDQiIG5hbWU9IklucHV0NDA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNCIgbmFtZT0iT3V0cHV0NDA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDQiIHR5cGU9InRuczpQb3J0VHlwZTQwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNSIgbmFtZT0iSW5wdXQ0MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA1IiBuYW1lPSJPdXRwdXQ0MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNSIgdHlwZT0idG5zOlBvcnRUeXBlNDA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA2IiBuYW1lPSJJbnB1dDQwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDYiIG5hbWU9Ik91dHB1dDQwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDciIG5hbWU9IklucHV0NDA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNyIgbmFtZT0iT3V0cHV0NDA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDciIHR5cGU9InRuczpQb3J0VHlwZTQwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwOCIgbmFtZT0iSW5wdXQ0MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA4IiBuYW1lPSJPdXRwdXQ0MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwOCIgdHlwZT0idG5zOlBvcnRUeXBlNDA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA5IiBuYW1lPSJJbnB1dDQwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDkiIG5hbWU9Ik91dHB1dDQwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTAiIG5hbWU9IklucHV0NDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMCIgbmFtZT0iT3V0cHV0NDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTAiIHR5cGU9InRuczpQb3J0VHlwZTQxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMSIgbmFtZT0iSW5wdXQ0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDExIiBuYW1lPSJPdXRwdXQ0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMSIgdHlwZT0idG5zOlBvcnRUeXBlNDExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEyIiBuYW1lPSJJbnB1dDQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTIiIG5hbWU9Ik91dHB1dDQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTMiIG5hbWU9IklucHV0NDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMyIgbmFtZT0iT3V0cHV0NDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTMiIHR5cGU9InRuczpQb3J0VHlwZTQxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNCIgbmFtZT0iSW5wdXQ0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE0IiBuYW1lPSJPdXRwdXQ0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNCIgdHlwZT0idG5zOlBvcnRUeXBlNDE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE1IiBuYW1lPSJJbnB1dDQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTUiIG5hbWU9Ik91dHB1dDQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTYiIG5hbWU9IklucHV0NDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNiIgbmFtZT0iT3V0cHV0NDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTYiIHR5cGU9InRuczpQb3J0VHlwZTQxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNyIgbmFtZT0iSW5wdXQ0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE3IiBuYW1lPSJPdXRwdXQ0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNyIgdHlwZT0idG5zOlBvcnRUeXBlNDE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE4IiBuYW1lPSJJbnB1dDQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTgiIG5hbWU9Ik91dHB1dDQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTkiIG5hbWU9IklucHV0NDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxOSIgbmFtZT0iT3V0cHV0NDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTkiIHR5cGU9InRuczpQb3J0VHlwZTQxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMCIgbmFtZT0iSW5wdXQ0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIwIiBuYW1lPSJPdXRwdXQ0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMCIgdHlwZT0idG5zOlBvcnRUeXBlNDIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIxIiBuYW1lPSJJbnB1dDQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjEiIG5hbWU9Ik91dHB1dDQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjIiIG5hbWU9IklucHV0NDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMiIgbmFtZT0iT3V0cHV0NDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjIiIHR5cGU9InRuczpQb3J0VHlwZTQyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMyIgbmFtZT0iSW5wdXQ0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIzIiBuYW1lPSJPdXRwdXQ0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMyIgdHlwZT0idG5zOlBvcnRUeXBlNDIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI0IiBuYW1lPSJJbnB1dDQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjQiIG5hbWU9Ik91dHB1dDQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjUiIG5hbWU9IklucHV0NDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNSIgbmFtZT0iT3V0cHV0NDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjUiIHR5cGU9InRuczpQb3J0VHlwZTQyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNiIgbmFtZT0iSW5wdXQ0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI2IiBuYW1lPSJPdXRwdXQ0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNiIgdHlwZT0idG5zOlBvcnRUeXBlNDI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI3IiBuYW1lPSJJbnB1dDQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjciIG5hbWU9Ik91dHB1dDQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjgiIG5hbWU9IklucHV0NDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyOCIgbmFtZT0iT3V0cHV0NDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjgiIHR5cGU9InRuczpQb3J0VHlwZTQyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyOSIgbmFtZT0iSW5wdXQ0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI5IiBuYW1lPSJPdXRwdXQ0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyOSIgdHlwZT0idG5zOlBvcnRUeXBlNDI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMwIiBuYW1lPSJJbnB1dDQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzAiIG5hbWU9Ik91dHB1dDQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzEiIG5hbWU9IklucHV0NDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMSIgbmFtZT0iT3V0cHV0NDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzEiIHR5cGU9InRuczpQb3J0VHlwZTQzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMiIgbmFtZT0iSW5wdXQ0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMyIiBuYW1lPSJPdXRwdXQ0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMiIgdHlwZT0idG5zOlBvcnRUeXBlNDMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMzIiBuYW1lPSJJbnB1dDQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzMiIG5hbWU9Ik91dHB1dDQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzQiIG5hbWU9IklucHV0NDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNCIgbmFtZT0iT3V0cHV0NDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzQiIHR5cGU9InRuczpQb3J0VHlwZTQzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNSIgbmFtZT0iSW5wdXQ0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM1IiBuYW1lPSJPdXRwdXQ0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNSIgdHlwZT0idG5zOlBvcnRUeXBlNDM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM2IiBuYW1lPSJJbnB1dDQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzYiIG5hbWU9Ik91dHB1dDQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzciIG5hbWU9IklucHV0NDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNyIgbmFtZT0iT3V0cHV0NDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzciIHR5cGU9InRuczpQb3J0VHlwZTQzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNDM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzOCIgbmFtZT0iSW5wdXQ0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM4IiBuYW1lPSJPdXRwdXQ0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzOCIgdHlwZT0idG5zOlBvcnRUeXBlNDM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM5IiBuYW1lPSJJbnB1dDQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzkiIG5hbWU9Ik91dHB1dDQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDAiIG5hbWU9IklucHV0NDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MCIgbmFtZT0iT3V0cHV0NDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDAiIHR5cGU9InRuczpQb3J0VHlwZTQ0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MSIgbmFtZT0iSW5wdXQ0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQxIiBuYW1lPSJPdXRwdXQ0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQyIiBuYW1lPSJJbnB1dDQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDIiIG5hbWU9Ik91dHB1dDQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDMiIG5hbWU9IklucHV0NDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MyIgbmFtZT0iT3V0cHV0NDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDMiIHR5cGU9InRuczpQb3J0VHlwZTQ0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NCIgbmFtZT0iSW5wdXQ0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ0IiBuYW1lPSJPdXRwdXQ0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ1IiBuYW1lPSJJbnB1dDQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDUiIG5hbWU9Ik91dHB1dDQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDYiIG5hbWU9IklucHV0NDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NiIgbmFtZT0iT3V0cHV0NDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDYiIHR5cGU9InRuczpQb3J0VHlwZTQ0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NyIgbmFtZT0iSW5wdXQ0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ3IiBuYW1lPSJPdXRwdXQ0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ4IiBuYW1lPSJJbnB1dDQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDgiIG5hbWU9Ik91dHB1dDQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDkiIG5hbWU9IklucHV0NDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0OSIgbmFtZT0iT3V0cHV0NDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDkiIHR5cGU9InRuczpQb3J0VHlwZTQ0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MCIgbmFtZT0iSW5wdXQ0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUwIiBuYW1lPSJPdXRwdXQ0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MCIgdHlwZT0idG5zOlBvcnRUeXBlNDUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUxIiBuYW1lPSJJbnB1dDQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTEiIG5hbWU9Ik91dHB1dDQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTIiIG5hbWU9IklucHV0NDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MiIgbmFtZT0iT3V0cHV0NDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTIiIHR5cGU9InRuczpQb3J0VHlwZTQ1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MyIgbmFtZT0iSW5wdXQ0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUzIiBuYW1lPSJPdXRwdXQ0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MyIgdHlwZT0idG5zOlBvcnRUeXBlNDUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU0IiBuYW1lPSJJbnB1dDQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTQiIG5hbWU9Ik91dHB1dDQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTUiIG5hbWU9IklucHV0NDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NSIgbmFtZT0iT3V0cHV0NDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTUiIHR5cGU9InRuczpQb3J0VHlwZTQ1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NiIgbmFtZT0iSW5wdXQ0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU2IiBuYW1lPSJPdXRwdXQ0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NiIgdHlwZT0idG5zOlBvcnRUeXBlNDU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU3IiBuYW1lPSJJbnB1dDQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTciIG5hbWU9Ik91dHB1dDQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTgiIG5hbWU9IklucHV0NDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1OCIgbmFtZT0iT3V0cHV0NDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTgiIHR5cGU9InRuczpQb3J0VHlwZTQ1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1OSIgbmFtZT0iSW5wdXQ0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU5IiBuYW1lPSJPdXRwdXQ0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1OSIgdHlwZT0idG5zOlBvcnRUeXBlNDU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYwIiBuYW1lPSJJbnB1dDQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjAiIG5hbWU9Ik91dHB1dDQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjEiIG5hbWU9IklucHV0NDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MSIgbmFtZT0iT3V0cHV0NDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjEiIHR5cGU9InRuczpQb3J0VHlwZTQ2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MiIgbmFtZT0iSW5wdXQ0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYyIiBuYW1lPSJPdXRwdXQ0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MiIgdHlwZT0idG5zOlBvcnRUeXBlNDYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYzIiBuYW1lPSJJbnB1dDQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjMiIG5hbWU9Ik91dHB1dDQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjQiIG5hbWU9IklucHV0NDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NCIgbmFtZT0iT3V0cHV0NDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjQiIHR5cGU9InRuczpQb3J0VHlwZTQ2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NSIgbmFtZT0iSW5wdXQ0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY1IiBuYW1lPSJPdXRwdXQ0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NSIgdHlwZT0idG5zOlBvcnRUeXBlNDY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY2IiBuYW1lPSJJbnB1dDQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjYiIG5hbWU9Ik91dHB1dDQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjciIG5hbWU9IklucHV0NDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NyIgbmFtZT0iT3V0cHV0NDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjciIHR5cGU9InRuczpQb3J0VHlwZTQ2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNDY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2OCIgbmFtZT0iSW5wdXQ0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY4IiBuYW1lPSJPdXRwdXQ0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2OCIgdHlwZT0idG5zOlBvcnRUeXBlNDY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY5IiBuYW1lPSJJbnB1dDQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjkiIG5hbWU9Ik91dHB1dDQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzAiIG5hbWU9IklucHV0NDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MCIgbmFtZT0iT3V0cHV0NDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzAiIHR5cGU9InRuczpQb3J0VHlwZTQ3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MSIgbmFtZT0iSW5wdXQ0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcxIiBuYW1lPSJPdXRwdXQ0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MSIgdHlwZT0idG5zOlBvcnRUeXBlNDcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcyIiBuYW1lPSJJbnB1dDQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzIiIG5hbWU9Ik91dHB1dDQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzMiIG5hbWU9IklucHV0NDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MyIgbmFtZT0iT3V0cHV0NDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzMiIHR5cGU9InRuczpQb3J0VHlwZTQ3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NCIgbmFtZT0iSW5wdXQ0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc0IiBuYW1lPSJPdXRwdXQ0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NCIgdHlwZT0idG5zOlBvcnRUeXBlNDc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc1IiBuYW1lPSJJbnB1dDQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzUiIG5hbWU9Ik91dHB1dDQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzYiIG5hbWU9IklucHV0NDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NiIgbmFtZT0iT3V0cHV0NDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzYiIHR5cGU9InRuczpQb3J0VHlwZTQ3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NyIgbmFtZT0iSW5wdXQ0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc3IiBuYW1lPSJPdXRwdXQ0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NyIgdHlwZT0idG5zOlBvcnRUeXBlNDc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc4IiBuYW1lPSJJbnB1dDQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzgiIG5hbWU9Ik91dHB1dDQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzkiIG5hbWU9IklucHV0NDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3OSIgbmFtZT0iT3V0cHV0NDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzkiIHR5cGU9InRuczpQb3J0VHlwZTQ3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MCIgbmFtZT0iSW5wdXQ0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgwIiBuYW1lPSJPdXRwdXQ0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MCIgdHlwZT0idG5zOlBvcnRUeXBlNDgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgxIiBuYW1lPSJJbnB1dDQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODEiIG5hbWU9Ik91dHB1dDQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODIiIG5hbWU9IklucHV0NDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MiIgbmFtZT0iT3V0cHV0NDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODIiIHR5cGU9InRuczpQb3J0VHlwZTQ4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MyIgbmFtZT0iSW5wdXQ0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgzIiBuYW1lPSJPdXRwdXQ0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MyIgdHlwZT0idG5zOlBvcnRUeXBlNDgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc0ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg0IiBuYW1lPSJJbnB1dDQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODQiIG5hbWU9Ik91dHB1dDQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODUiIG5hbWU9IklucHV0NDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NSIgbmFtZT0iT3V0cHV0NDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODUiIHR5cGU9InRuczpQb3J0VHlwZTQ4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NiIgbmFtZT0iSW5wdXQ0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg2IiBuYW1lPSJPdXRwdXQ0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NiIgdHlwZT0idG5zOlBvcnRUeXBlNDg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc0ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg3IiBuYW1lPSJJbnB1dDQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODciIG5hbWU9Ik91dHB1dDQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODgiIG5hbWU9IklucHV0NDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4OCIgbmFtZT0iT3V0cHV0NDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODgiIHR5cGU9InRuczpQb3J0VHlwZTQ4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4OSIgbmFtZT0iSW5wdXQ0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg5IiBuYW1lPSJPdXRwdXQ0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4OSIgdHlwZT0idG5zOlBvcnRUeXBlNDg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkwIiBuYW1lPSJJbnB1dDQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTAiIG5hbWU9Ik91dHB1dDQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTEiIG5hbWU9IklucHV0NDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MSIgbmFtZT0iT3V0cHV0NDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTEiIHR5cGU9InRuczpQb3J0VHlwZTQ5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MiIgbmFtZT0iSW5wdXQ0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkyIiBuYW1lPSJPdXRwdXQ0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MiIgdHlwZT0idG5zOlBvcnRUeXBlNDkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc0OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkzIiBuYW1lPSJJbnB1dDQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTMiIG5hbWU9Ik91dHB1dDQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTQiIG5hbWU9IklucHV0NDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NCIgbmFtZT0iT3V0cHV0NDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTQiIHR5cGU9InRuczpQb3J0VHlwZTQ5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NSIgbmFtZT0iSW5wdXQ0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk1IiBuYW1lPSJPdXRwdXQ0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NSIgdHlwZT0idG5zOlBvcnRUeXBlNDk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk2IiBuYW1lPSJJbnB1dDQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTYiIG5hbWU9Ik91dHB1dDQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTciIG5hbWU9IklucHV0NDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NyIgbmFtZT0iT3V0cHV0NDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTciIHR5cGU9InRuczpQb3J0VHlwZTQ5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5OCIgbmFtZT0iSW5wdXQ0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk4IiBuYW1lPSJPdXRwdXQ0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5OCIgdHlwZT0idG5zOlBvcnRUeXBlNDk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk5IiBuYW1lPSJJbnB1dDQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTkiIG5hbWU9Ik91dHB1dDQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiZjk2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TdG9ja1F1b3RlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlN0b2NrUXVvdGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1N0b2NrUXVvdGUvIj4NCi0gIDx3c2RsOnR5cGVzPg0KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TdG9ja1F1b3RlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImdldFF1b3RlUmVzcG9uc2UiPg0KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgPHhzZDphbGw+DQotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRpY2tlclN5bWJvbCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLSAgICAgICAgICA8L3hzZDphbGw+DQotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCi0gICAgICA8L3hzZDplbGVtZW50Pg0KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRRdW90ZVJlcXVlc3QiPg0KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgPHhzZDphbGw+DQotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4NCi0gICAgICAgICAgPC94c2Q6YWxsPg0KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQotICAgICAgPC94c2Q6ZWxlbWVudD4NCi0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSGVhZGVycyI+DQotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJoZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCi0gICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLSAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCi0gICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+DQotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQotICAgICAgPC94c2Q6ZWxlbWVudD4NCi0gICAgPC94c2Q6c2NoZW1hPg0KLSAgPC93c2RsOnR5cGVzPg0KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJnZXRRdW90ZVJlc3BvbnNlIj4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6Z2V0UXVvdGVSZXNwb25zZSIgbmFtZT0iZ2V0UXVvdGVSZXNwb25zZSIvPg0KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpIZWFkZXJzIiBuYW1lPSJoZWFkZXJzIi8+DQotICA8L3dzZGw6bWVzc2FnZT4NCi0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0UXVvdGVSZXF1ZXN0Ij4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6Z2V0UXVvdGVSZXF1ZXN0IiBuYW1lPSJnZXRRdW90ZVJlcXVlc3QiLz4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6SGVhZGVycyIgbmFtZT0iaGVhZGVycyIvPg0KLSAgPC93c2RsOm1lc3NhZ2U+DQotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJTdG9ja1F1b3RlIj4NCi0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFF1b3RlIj4NCi0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0UXVvdGVSZXF1ZXN0Ii8+DQotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRRdW90ZVJlc3BvbnNlIi8+DQotICAgIDwvd3NkbDpvcGVyYXRpb24+DQotICA8L3dzZGw6cG9ydFR5cGU+DQotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlN0b2NrUXVvdGVTT0FQIiB0eXBlPSJ0bnM6U3RvY2tRdW90ZSI+DQotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPg0KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0UXVvdGUiPg0KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvU3RvY2tRdW90ZS9nZXRRdW90ZSIvPg0KLSAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iZ2V0UXVvdGVSZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICAgIDxzb2FwOmhlYWRlciBtZXNzYWdlPSJ0bnM6Z2V0UXVvdGVSZXF1ZXN0IiBwYXJ0PSJoZWFkZXJzIiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L3dzZGw6aW5wdXQ+DQotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iZ2V0UXVvdGVSZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgICA8c29hcDpoZWFkZXIgbWVzc2FnZT0idG5zOmdldFF1b3RlUmVzcG9uc2UiIHBhcnQ9ImhlYWRlcnMiIHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvd3NkbDpvdXRwdXQ+DQotICAgIDwvd3NkbDpvcGVyYXRpb24+DQotICA8L3dzZGw6YmluZGluZz4NCi0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU3RvY2tRdW90ZSI+DQotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOlN0b2NrUXVvdGVTT0FQIiBuYW1lPSJTdG9ja1F1b3RlU09BUCI+DQotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnIi8+DQotICAgIDwvd3NkbDpwb3J0Pg0KLSAgPC93c2RsOnNlcnZpY2U+DQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAzZWY0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icGVyZm9ybWFuY2UiIGJhc2VkaXI9Ii4iPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0icGVyZi10ZXN0cy1maWxlIiB2YWx1ZT0iJHt0ZXN0RGlyfS9wZXJmb3JtYW5jZS10ZXN0cy54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvYWdpczgwRGlyPSR7dGVzdERpcn0gLURwcm9qZWN0RGlyPSR7dGVzdERpcn0vT0FHSVM4LjAgLVhteDUxMk0iLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2Vfd3NkbF9wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlX3dzZGxfcGVyZm9ybWFuY2UiLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0gIAotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHBlcmZvcm1hbmNlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlX3N1aXRlIj4KLQotICAgIDxhbnRjYWxsIHRhcmdldD0icmVhZE9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJyZWFkT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJlYWRPQUdJU1dTRExUZXN0Y2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIi8+Ci0gIAkKLSAgICA8YW50Y2FsbCB0YXJnZXQ9Im9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0ib3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJvcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UiLz4KLQotICAgIDxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMUtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4yMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMjAwS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuNTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW41MDBLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xTUJGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFNQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMU1CRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSIvPgotCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiLz4KLQotCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLSAgCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIi8+Ci0gCi0gIAk8IS0tCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIi8+Ci0gIAktLT4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotPCEtLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotLS0+IAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJyZWFkT0FHSVNXU0RMVGVzdGNhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUmVhZE9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCQotICA8dGFyZ2V0IG5hbWU9Im9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5PcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIvPgotICAgIDwvYW50PgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5PcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotCSAgPHRhcmdldCBuYW1lPSJPcGVuMUtCRmlsZVRlc3RDYXNlIj4KLQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xS0JGaWxlVGVzdENhc2UiLz4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCSAgICA8L2FudD4KLQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjEwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjIwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjUwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjFNQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xTUJGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLSAgCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIiBkZXBlbmRzPSJpbml0LHBlcmZvcm1hbmNlX3N1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OGI5Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSCgKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LldTRExTY2FsYWJpbGl0eVRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzCi17Ci0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSIpOwotICAgIC8vJEpVbml0LUJFR0lOJAotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFdTRExTY2FsYWJpbGl0eVRlc3RzLnN1aXRlKCkpOwotICAgIC8vJEpVbml0LUVORCQKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYjExNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVByb3h5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVByb3h5VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLQotcHVibGljIGNsYXNzIE9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHVibGljIHZvaWQgdGVzdFJlYWRXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb2FnaXM4MERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib2FnaXM4MERpciIpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG9hZ2lzODBEaXIpOwotICAgIGlmICghb2FnaXM4MERpci5lbmRzV2l0aCgiLyIpICYmICFvYWdpczgwRGlyLmVuZHNXaXRoKCJcXCIpKQotICAgICAgb2FnaXM4MERpciA9IG9hZ2lzODBEaXIgKyAiLyI7Ci0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShvYWdpczgwRGlyICsgIk9BR0lTOC4wIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJzcCIpOwotICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0gICAgICBjb3B5KGRpciwgcHJvamVjdCk7Ci0gICAgICBqb2luQmFja2dyb3VuZEpvYnMoKTsKLSAgICAgIGZpbmFsIExpc3Qgd3NkbHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBwcm9qZWN0LmFjY2VwdAotICAgICAgKAotICAgICAgICBuZXcgSVJlc291cmNlUHJveHlWaXNpdG9yKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZVByb3h5IHByb3h5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcm94eS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdzZGxzLmFkZChwcm94eS5yZXF1ZXN0UmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIElDb250YWluZXIuSU5DTFVERV9QSEFOVE9NUwotICAgICAgKTsKLSAgICAgIHRhZ0FzU3VtbWFyeSgiT3BlbiBPQUdJUyBXU0RMIiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVR9KTsKLSAgICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgb3BlbldTREwoKElGaWxlKWl0Lm5leHQoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvcHkoRmlsZSBzcmMsIElDb250YWluZXIgZGVzdCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVtdIGNoaWxkcmVuID0gc3JjLmxpc3RGaWxlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBjaGlsZHJlbltpXS5nZXROYW1lKCk7Ci0gICAgICBpZiAoY2hpbGRyZW5baV0uaXNEaXJlY3RvcnkoKSkKLSAgICAgIHsKLSAgICAgICAgSUZvbGRlciBmb2xkZXIgPSBkZXN0LmdldEZvbGRlcihuZXcgUGF0aChuYW1lKSk7Ci0gICAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGNvcHkoY2hpbGRyZW5baV0sIGZvbGRlcik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChuYW1lLmVuZHNXaXRoKCIud3NkbCIpIHx8IG5hbWUuZW5kc1dpdGgoIi54c2QiKSkKLSAgICAgIHsKLSAgICAgICAgSUZpbGUgZmlsZSA9IGRlc3QuZ2V0RmlsZShuZXcgUGF0aChuYW1lKSk7Ci0gICAgICAgIGZpbGUuY3JlYXRlKG5ldyBGaWxlSW5wdXRTdHJlYW0oY2hpbGRyZW5baV0pLCB0cnVlLCBudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgam9pbkJhY2tncm91bmRKb2JzKCkKLSAgewotICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLSAgICAgICAgd2hpbGUgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQgPCA1MDAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BsYXkuc2xlZXAoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBvcGVuV1NETChJRmlsZSBmaWxlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLm9wZW5FZGl0b3IobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSwgUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9FRElUT1JfSUQsIHRydWUpOwotICAgIHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1YWI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludHJvLklJbnRyb1BhcnQ7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJQcm9qZWN0IjsKLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuY2xhc3MsICJPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2xvc2VJbnRybygpCi0gIHsKLSAgICBJSW50cm9NYW5hZ2VyIGludHJvTWFuYWdlciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SW50cm9NYW5hZ2VyKCk7Ci0gICAgSUludHJvUGFydCBpbnRyb1BhcnQgPSBpbnRyb01hbmFnZXIuZ2V0SW50cm8oKTsKLSAgICBpZiAoaW50cm9QYXJ0ICE9IG51bGwpCi0gICAgICBpbnRyb01hbmFnZXIuY2xvc2VJbnRybyhpbnRyb1BhcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJUHJvamVjdCBzaW1wbGVQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotICAgIHNpbXBsZVByb2plY3QuY3JlYXRlKG51bGwpOwotICAgIHNpbXBsZVByb2plY3Qub3BlbihudWxsKTsKLSAgICByZXR1cm4gc2ltcGxlUHJvamVjdDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNvcHlGaWxlKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIElGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUoZGVzdCk7Ci0gICAgZmlsZS5jcmVhdGUoUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHNvdXJjZSkub3BlblN0cmVhbSgpLCB0cnVlLCBudWxsKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGpvaW5BdXRvQnVpbGQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgd2hpbGUgKGludGVycnVwdGVkKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBjbG9zZUludHJvKCk7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICBjb3B5RmlsZShwcm9qZWN0LCAiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIsICJTdG9ja1F1b3RlLndzZGwiKTsKLSAgICBqb2luQXV0b0J1aWxkKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2JlNWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzLCAiT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBJUHJvamVjdCBnZXRQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0gICAgcHJvamVjdC5vcGVuKG51bGwpOwotICAgIHByb2plY3QucmVmcmVzaExvY2FsKElQcm9qZWN0LkRFUFRIX0lORklOSVRFLCBudWxsKTsKLSAgICBqb2luQXV0b0J1aWxkKCk7Ci0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBqb2luQXV0b0J1aWxkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gaW50ZXJydXB0ZWQgPSB0cnVlOwotICAgIHdoaWxlIChpbnRlcnJ1cHRlZCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIElFZGl0b3JQYXJ0IG9wZW5FZGl0b3IoSUVkaXRvcklucHV0IGVkaXRvcklucHV0LCBTdHJpbmcgZWRpdG9yaWQpIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotICB7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIHJldHVybiB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLm9wZW5FZGl0b3IoZWRpdG9ySW5wdXQsIGVkaXRvcmlkLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGNsb3NlRWRpdG9yKElFZGl0b3JQYXJ0IGVkaXRvcikKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICByZXR1cm4gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5jbG9zZUVkaXRvcihlZGl0b3IsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuU3RvY2tRdW90ZVdTREwoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdChPcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5QUk9KRUNUX05BTUUpOwotICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IG5ldyBGaWxlRWRpdG9ySW5wdXQoKElGaWxlKXByb2plY3QuZmluZE1lbWJlcigiU3RvY2tRdW90ZS53c2RsIikpOwotICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IG9wZW5FZGl0b3IoZWRpdG9ySW5wdXQsIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfRURJVE9SX0lEKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICBjbG9zZUVkaXRvcihlZGl0b3JQYXJ0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzVhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gIC8vIFRPRE86IFRoZXNlIHR3byBjb25zdGFudHMgc2hvdWxkIHJlYWxseSBiZSBwdWxsZWQgZnJvbSB0aGUgcGx1Z2luIHdoaWNoIGRlY2xhcmVzIGl0LgotICAvLyBUaGlzIHdpbGwgYXZvaWQgIm1hZ2ljIHN0cmluZyIgZGVwZW5kZW5jaWVzIHdoaWNoIGNhbiBiZSBlYXNpbHkgYnJva2VuLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1ZBTElEQVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLndzZGwiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UiOwkvLyROT04tTkxTLTEkCi0JCi0gIC8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgUGVyZm9ybWFuY2VQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZE9BR0lTV1NETFRlc3RjYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkT0FHSVNXU0RMVGVzdGNhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2OTY4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkT0FHSVNXU0RMVGVzdGNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMUmVhZGVySW1wbDsKLQotcHVibGljIGNsYXNzIFJlYWRPQUdJU1dTRExUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBMaXN0IGRlZnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlYWRXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMC93cy93c2RsIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gd3NkbHMgPSBkaXIubGlzdEZpbGVzCi0gICAgICAoCi0gICAgICAgIG5ldyBGaWxlRmlsdGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJSZWFkIE9BR0lTIFdTREwiLCBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5XT1JLSU5HX1NFVH0pOwotICAgICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHJlYWRXU0RMKHdzZGxzW2ldLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlYWRXU0RMKFN0cmluZyBsb2NhdGlvbikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFdTRExSZWFkZXJJbXBsIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotICAgIGRlZnMuYWRkKHJlYWRlci5yZWFkV1NETChsb2NhdGlvbikpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOThhMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIFJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuY2xhc3MsICJSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSIpOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkU3RvY2tRdW90ZVdTRExfRU1GKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICBVUkwgd3NkbCA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIpOwotICAgIAotCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFdTRExSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0JcmVzb3VyY2Uuc2V0VVJJKFVSSS5jcmVhdGVVUkkod3NkbC50b1N0cmluZygpKSk7Ci0gICAgamF2YS51dGlsLk1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLkNPTlRJTlVFX09OX0xPQURfRVJST1IsQm9vbGVhbi52YWx1ZU9mKHRydWUpKTsKLSAgICBtYXAucHV0KFdTRExSZXNvdXJjZUltcGwuVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVMsQm9vbGVhbi52YWx1ZU9mKHRydWUpKTsKLQlyZXNvdXJjZS5sb2FkKG1hcCk7IAotCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHJlc291cmNlLmdldERlZmluaXRpb24oKTsKLQlkZWZpbml0aW9uLmdldFFOYW1lKCk7Ci0JCi0Jc3RvcE1lYXN1cmluZygpOwotCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCWFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTBkMDk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotcHVibGljIGNsYXNzIFJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MsICJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFN0b2NrUXVvdGVXU0RMKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICBVUkwgd3NkbCA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIpOwotICAgIFdTRExGYWN0b3J5SW1wbCBmYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgIFdTRExSZWFkZXIgcmVhZGVyID0gZmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcmVhZGVyLnJlYWRXU0RMKHdzZGwudG9TdHJpbmcoKSwgbmV3IElucHV0U291cmNlKHdzZGwub3BlblN0cmVhbSgpKSk7Ci0gICAgZGVmaW5pdGlvbi5nZXRRTmFtZSgpOwotICAgIHN0b3BNZWFzdXJpbmcoKTsKLQljb21taXRNZWFzdXJlbWVudHMoKTsKLQlhc3NlcnRQZXJmb3JtYW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZmM3ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQkgIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgICB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgfSAKLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMC93cy93c2RsIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gd3NkbHMgPSBkaXIubGlzdEZpbGVzCi0gICAgICAoCi0gICAgICAgIG5ldyBGaWxlRmlsdGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJWYWxpZGF0ZSBPQUdJUyBXU0RMIiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVR9KTsKLQkgIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxzLmxlbmd0aDsgaSsrKQotICAgICAgICB2YWxpZGF0ZVdTREwod3NkbHNbaV0udG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVXU0RMKFN0cmluZyBsb2NhdGlvbikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRvci52YWxpZGF0ZShsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZWFhYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgotICAgIFdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgfSAKLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMC93cy93c2RsIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gd3NkbHMgPSBkaXIubGlzdEZpbGVzCi0gICAgICAoCi0gICAgICAgIG5ldyBGaWxlRmlsdGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJWYWxpZGF0ZSBPQUdJUyBXU0RMIHdpdGggV1MtSSIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUfSk7Ci0JICB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0JICBzdGFydE1lYXN1cmluZygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2Rscy5sZW5ndGg7IGkrKykKLSAgICAgICAgdmFsaWRhdGVXU0RMKHdzZGxzW2ldLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlV1NETChTdHJpbmcgbG9jYXRpb24pIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0b3IudmFsaWRhdGUobG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTAyYzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgICB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgfSAgCi0gIAotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzLCAiVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7Ci0gICAgU3RyaW5nIHBhdGggPSB3c2RsLnRvU3RyaW5nKCk7Ci0KLSAgICBzdGFydE1lYXN1cmluZygpOwotICAgIHZhbGlkYXRvci52YWxpZGF0ZShwYXRoKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZDVmYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICB9ICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5jbGFzcywgIlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVN0b2NrUXVvdGVXU0koKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgVVJMIHdzZGwgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoImRhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwiKTsKLSAgICBTdHJpbmcgcGF0aCA9IHdzZGwudG9TdHJpbmcoKTsKLQotICAgIHN0YXJ0TWVhc3VyaW5nKCk7CQotICAgIHZhbGlkYXRvci52YWxpZGF0ZShwYXRoKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkMjVhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5PbmVWYWxpZGF0b3JPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLS8qKgotICogVGVzdCBmb3IgdmFsaWRhdGlvbiBvZiA1MCBXU0RMIGZpbGVzIGluIHRoZSBzYW1wbGUgd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIEtpaHVwIEJvbywgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlIHsKLQkKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuY2xhc3MsICJUZXN0Iik7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JCS8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBXUy1JIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgcnVuLgotCQlXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLQkJUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLQkJd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFdTRExQcm9qZWN0VmFsaWRhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicHJvamVjdERpciIpOwotCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChwcm9qZWN0RGlyKTsKLQkJaWYgKCFwcm9qZWN0RGlyLmVuZHNXaXRoKCIvIikgJiYgIXByb2plY3REaXIuZW5kc1dpdGgoIlxcIikpCi0JCQlwcm9qZWN0RGlyID0gcHJvamVjdERpciArICIvIjsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShwcm9qZWN0RGlyKTsKLQkJaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgiV1NETFByb2plY3QiKTsKLQkJCXByb2plY3QuY3JlYXRlKG51bGwpOwotCQkJcHJvamVjdC5vcGVuKG51bGwpOwotCQkJY29weShkaXIsIHByb2plY3QpOwotCQkJam9pbkJhY2tncm91bmRKb2JzKCk7Ci0KLQkJCUlXb3Jrc3BhY2VSdW5uYWJsZSBteVJ1bm5hYmxlID0gbmV3IE9uZVZhbGlkYXRvck9wZXJhdGlvbigKLQkJCQkJcHJvamVjdCwKLSAgICAgICAgICBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX1ZBTElEQVRPUl9JRCwKLQkJCQkJdHJ1ZSwgCi0JCQkJCWZhbHNlKTsKLQkJCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCi0JCQl0YWdBc1N1bW1hcnkoIlZhbGlkYXRlIFdTREwgUHJvamVjdCIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUIH0pOwotCQkJc3RhcnRNZWFzdXJpbmcoKTsKLQkJCXdvcmtzcGFjZS5ydW4obXlSdW5uYWJsZSwgbnVsbCk7Ci0JCQkvLyBwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuQ0xFQU5fQlVJTEQsbnVsbCk7Ci0JCQlzdG9wTWVhc3VyaW5nKCk7Ci0JCQljb21taXRNZWFzdXJlbWVudHMoKTsKLQkJCWFzc2VydFBlcmZvcm1hbmNlKCk7Ci0JCX0gZWxzZQotCQkJZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvcHkoRmlsZSBzcmMsIElDb250YWluZXIgZGVzdCkgdGhyb3dzIENvcmVFeGNlcHRpb24sCi0JCQlGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlGaWxlW10gY2hpbGRyZW4gPSBzcmMubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBuYW1lID0gY2hpbGRyZW5baV0uZ2V0TmFtZSgpOwotCQkJaWYgKGNoaWxkcmVuW2ldLmlzRGlyZWN0b3J5KCkpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IGRlc3QuZ2V0Rm9sZGVyKG5ldyBQYXRoKG5hbWUpKTsKLQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCWNvcHkoY2hpbGRyZW5baV0sIGZvbGRlcik7Ci0JCQl9IGVsc2UgewotCQkJCUlGaWxlIGZpbGUgPSBkZXN0LmdldEZpbGUobmV3IFBhdGgobmFtZSkpOwotCQkJCWZpbGUuY3JlYXRlKG5ldyBGaWxlSW5wdXRTdHJlYW0oY2hpbGRyZW5baV0pLCB0cnVlLCBudWxsKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBqb2luQmFja2dyb3VuZEpvYnMoKSB7Ci0JCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQl0cnkgewotCQkJCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbigKLQkJCQkJCQlSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCURpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCQkJCXdoaWxlIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0IDwgNTAwMCkgewotCQkJCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIHsKLQkJCQkJCWRpc3BsYXkuc2xlZXAoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ3NjM4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMTAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcxZmYxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4xMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk2NmU0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMUtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjFLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMUtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFNQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFNQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDc0YzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xTUJGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMU1CRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xTUIud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjFNQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMjAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTcyNjk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4yMDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMjAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjIwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW41MDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYjQxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjUwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS81MDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuNTAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDQxM2Q2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnNjYWxhYmlsaXR5Lk9wZW5FZGl0b3JUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UgZXh0ZW5kcyBPcGVuRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRFZGl0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9FRElUT1JfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5CVU5ETEVfSUQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThiM2M3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MTAwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2ZWRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDEwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MTAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjOGE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzVhN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAyNTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDI1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExNzI5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDUwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54NTAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODg2NWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gNzU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3Blbng3NSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1MjYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZS5pbnRlcm5hbC5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW47Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbkVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RWRpdG9ySWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfRURJVE9SX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRCdW5kbGVJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uQlVORExFX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTAwS0Iud3NkbCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMWRiNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qCi0qIENvbnRyaWJ1dG9yczoKLSogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnNjYWxhYmlsaXR5LlJlcGVhdFJ1blZhbGlkYXRvclRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UuaW50ZXJuYWwudXRpbC5FZGl0b3JUZXN0SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25GcmFtZXdvcms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLlZhbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRWYWxpZGF0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9WQUxJREFUT1JfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5CVU5ETEVfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMDBLQi53c2RsIjsKLSAgfQotICAKLSAgCi0JcHJvdGVjdGVkIHZvaWQgcnVuVmFsaWRhdG9yKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLAotCQkJVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0KLQkJd2FpdEZvckpvYnMoKTsKLQkJdHVybm9mZk90aGVyVmFsaWRhdG9ycyhnZXRWYWxpZGF0b3JJZCgpKTsKLQotCQlWYWxpZGF0aW9uRnJhbWV3b3JrIHZmID0gVmFsaWRhdGlvbkZyYW1ld29yay5nZXREZWZhdWx0KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSB7IGZpbGUuZ2V0UHJvamVjdCgpIH07Ci0JCXRyeSB7Ci0JCQkvLyBqdXN0IHJ1biB2YWxpZGF0aW9uCi0JCQl2Zi52YWxpZGF0ZShwcm9qZWN0cywgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHdhaXRGb3JKb2JzKCkgewotCQl0cnkgewotCQkJRWRpdG9yVGVzdEhlbHBlci5qb2luQmFja2dyb3VuZEFjdGl2aXRpZXMoKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNpbmNlIG90aGVyIHBsdWctaW5zIGNhbiBhZGQgYW5kIHJlbW92ZSB2YWxpZGF0b3JzLCB0dXJuIG9mZiBhbGwgdGhlIG9uZXMKLQkgKiB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGVzZSB0ZXN0cy4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdHVybm9mZk90aGVyVmFsaWRhdG9ycyhTdHJpbmcgaWQpIHsKLQkJVmFsaWRhdG9yW10gdmFscyA9IFZhbE1hbmFnZXIuZ2V0RGVmYXVsdCgpLmdldFZhbGlkYXRvcnMoKTsKLQkJaW50IGxlbmd0aCA9IHZhbHMubGVuZ3RoOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQlWYWxpZGF0b3IgdiA9IHZhbHNbaV07Ci0JCQlpZiAoIXYuZ2V0VmFsaWRhdG9yQ2xhc3NuYW1lKCkuc3RhcnRzV2l0aChpZCkpIHsKLQkJCQl2LnNldEJ1aWxkVmFsaWRhdGlvbihmYWxzZSk7Ci0JCQkJdi5zZXRNYW51YWxWYWxpZGF0aW9uKGZhbHNlKTsKLQkJCX0KLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NTU0ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxMDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4MTAwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGI3YmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDEwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDEwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyMTE2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXgxKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc3ZDY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDI1OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDI1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGJkMTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDUwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDUwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2NiYjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDc1OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDc1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2N2MwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSoKLSogQ29udHJpYnV0b3JzOgotKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZS5pbnRlcm5hbC5zY2FsYWJpbGl0eS5SdW5WYWxpZGF0b3JUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnV0aWwuRWRpdG9yVGVzdEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uRnJhbWV3b3JrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZSBleHRlbmRzIFJ1blZhbGlkYXRvclRlc3RDYXNlCi17Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRWYWxpZGF0b3JJZCgpCi0gIHsKLSAgICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX1ZBTElEQVRPUl9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QnVuZGxlSWQoKQotICB7Ci0gICAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uQlVORExFX0lEOwotICB9Ci0KLQotCXByb3RlY3RlZCB2b2lkIHJ1blZhbGlkYXRvcihJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwKLQkJCVZhbGlkYXRpb25FeGNlcHRpb24gewotCi0JCXdhaXRGb3JKb2JzKCk7Ci0JCXR1cm5vZmZPdGhlclZhbGlkYXRvcnMoZ2V0VmFsaWRhdG9ySWQoKSk7Ci0KLQkJVmFsaWRhdGlvbkZyYW1ld29yayB2ZiA9IFZhbGlkYXRpb25GcmFtZXdvcmsuZ2V0RGVmYXVsdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0geyBmaWxlLmdldFByb2plY3QoKSB9OwotCQl0cnkgewotCQkJLy8ganVzdCBydW4gdmFsaWRhdGlvbgotCQkJdmYudmFsaWRhdGUocHJvamVjdHMsIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCB3YWl0Rm9ySm9icygpIHsKLQkJdHJ5IHsKLQkJCUVkaXRvclRlc3RIZWxwZXIuam9pbkJhY2tncm91bmRBY3Rpdml0aWVzKCk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTaW5jZSBvdGhlciBwbHVnLWlucyBjYW4gYWRkIGFuZCByZW1vdmUgdmFsaWRhdG9ycywgdHVybiBvZmYgYWxsIHRoZSBvbmVzCi0JICogdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlc2UgdGVzdHMuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHR1cm5vZmZPdGhlclZhbGlkYXRvcnMoU3RyaW5nIGlkKSB7Ci0JCVZhbGlkYXRvcltdIHZhbHMgPSBWYWxNYW5hZ2VyLmdldERlZmF1bHQoKS5nZXRWYWxpZGF0b3JzKCk7Ci0JCWludCBsZW5ndGggPSB2YWxzLmxlbmd0aDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJVmFsaWRhdG9yIHYgPSB2YWxzW2ldOwotCQkJaWYgKCF2LmdldFZhbGlkYXRvckNsYXNzbmFtZSgpLnN0YXJ0c1dpdGgoaWQpKSB7Ci0JCQkJdi5zZXRCdWlsZFZhbGlkYXRpb24oZmFsc2UpOwotCQkJCXYuc2V0TWFudWFsVmFsaWRhdGlvbihmYWxzZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMjA3NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWVlODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0MzI4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODVkODEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMTAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzN2MzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OWNjM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNTM3YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkMjIzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Y4MDUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMWY5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmEyOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWUzODBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjFLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU4Nzc5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMU1CLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xTUJGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjg1MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMjAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjIwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyY2IyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzUwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW41MDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvV1NETFNjYWxhYmlsaXR5VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2N2E5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIKAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIFdTRExTY2FsYWJpbGl0eVRlc3RzCi17Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Iik7Ci0gICAgLy8kSlVuaXQtQkVHSU4kCi0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMjAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotLy8gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4xTUJGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMTBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4xS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuNTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLS8vICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotLy8gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZDBmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlCi1CdW5kbGUtTmFtZS4wID0gV1NETCBQZXJmb3JtYW5jZSBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1MDhjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGwudGVzdHMudWkuamFyCi1qYXZhQ29tcGlsZXIud3NkbC50ZXN0cy51aS5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmYjc4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE1ZTBkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTdW4gSnVuIDAzIDAwOjQ3OjA1IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTViMjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogV1NETCBNb2RlbCBVSSBTYW1wbGVzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGwudGVzdHMudWkuamFyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxNThlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS53c2RsLnRlc3RzLnVpLmphciA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB3c2RsLnRlc3RzLnVpLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjVmMTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHBsdWdpbj4KLQotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5vYmplY3RfY29udHJpYnV0aW9uIj4KLSAgICAgICAgIDwhLS0KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICBsYWJlbD0iR2VuZXJhdGUgV1NETCBTYW1wbGUiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLkdlbmVyYXRlV1NETEFjdGlvbkRlbGVnYXRlIgotICAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLmdlbmVyYXRlX3dzZGxfYWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgLS0+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgbGFiZWw9IkNvbnZlcnQgdG8gV1NETCAyLjAgRG9jdW1lbnQiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLkNvbnZlcnRXU0RMMjBBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5jb252ZXJ0X3dzZGxfYWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhZWZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvQ29udmVydFdTREwyMEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuV1NETENvbnZlcnRlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBDb252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgSUZpbGUgaWZpbGUgPSBudWxsOwotICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICBPYmplY3QgZWxlbWVudCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJaWZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0gICAgICAgIElQYXRoIHBhdGggPSBpZmlsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICBJUGF0aCBwYXRoMiA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotICAgICAgICBTdHJpbmcgb3V0cHV0ID0gcGF0aDIudG9TdHJpbmcoKSArICIvIiArIGdldE5ld05hbWUoaWZpbGUpOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0JCSAgICB7ICAKLSAgICAgICAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKCJmaWxlOi8iICsgcGF0aC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIFdTRExDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFdTRExDb252ZXJ0ZXIoZGVmKTsKLSAgICAgICAgICAgIGNvbnZlcnRlci5nZW5lcmF0ZTIwKG91dHB1dCk7Ci0gICAgICAgICAgICBJQ29udGFpbmVyIGZvbGRlciA9IGlmaWxlLmdldFBhcmVudCgpOwotICAgICAgICAgICAgZm9sZGVyLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfT05FLG51bGwpOwotCQkgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgICB7Ci0gICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldE5ld05hbWUoSUZpbGUgaWZpbGUpCi0gIHsKLSAgICAvLyBBc3NlcnQgY3VycmVudE5hbWUgaGFzIGEgZmlsZSBleHRlbnNpb24sIGUuZy4gZm9vLndzZGwuCi0gICAgLy8gVGhpcyB3aWxsIHJldHVybiBmb29WMjAud3NkbC4KLSAgICBTdHJpbmcgY3VycmVudE5hbWUgPSBpZmlsZS5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBjdXJyZW50TmFtZS5zdWJzdHJpbmcoMCxjdXJyZW50TmFtZS5pbmRleE9mKCIuIikpOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBjdXJyZW50TmFtZS5zdWJzdHJpbmcoY3VycmVudE5hbWUuaW5kZXhPZigiLiIpKTsKLSAgICBTdHJpbmcgbmV3TmFtZSA9IG5hbWUgKyAiVjIwIiArIGV4dGVuc2lvbjsKLSAgICByZXR1cm4gbmV3TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDk1MTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETEdlbmVyYXRpb25UZXN0OwotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgSUZpbGUgaWZpbGUgPSBudWxsOwotICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICBPYmplY3QgZWxlbWVudCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJaWZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0gICAgICAgIElQYXRoIHBhdGggPSBpZmlsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICBwYXRoID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0gICAgICAgIFN0cmluZyBvdXRwdXQgPSBwYXRoLnRvU3RyaW5nKCkgKyAiL015U2FtcGxlLndzZGwiOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0JCXsKLSAgICAgICAgICAobmV3IFdTRExHZW5lcmF0aW9uVGVzdCgpKS5nZW5lcmF0ZVRlbXBlcmF0dXJlU2VydmljZShvdXRwdXQpOwotCQl9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1YzFiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9YTUxDb25zdGFudHMiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93c2RsLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYmE5OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c2RsLnRlc3RzLmphcgotamF2YUNvbXBpbGVyLndzZGwudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MTNhNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTAzMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIFNlcCAyNiAwNTo0NDo1NCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNmJiYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLSNTdW4gQXByIDE1IDAyOjM0OjIyIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9lbnVtX2NvbnN0YW50PTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZXhwbGljaXRfY29uc3RydWN0b3JfY2FsbD01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX21ldGhvZF9pbnZvY2F0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fcXVhbGlmaWVkX2FsbG9jYXRpb25fZXhwcmVzc2lvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXNzaWdubWVudD0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0yMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0yMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29uZGl0aW9uYWxfZXhwcmVzc2lvbj0zNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZXhwcmVzc2lvbnNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0zNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTY4Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTg0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj04NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZV9zaGlmdGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPWVuZF9vZl9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9jb25zdGFudD1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9zd2l0Y2g9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfbGluZV9jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Vsc2VfaW5faWZfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X21ldGhvZF9ib2R5PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2Vsc2Vfc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZW1wdHlfYXJyYXlfaW5pdGlhbGl6ZXJfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2ltcGxlX2lmX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF90aGVuX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5saW5lU3BsaXQ9MTQwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2VtcHR5X2xpbmVzX3RvX3ByZXNlcnZlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5wdXRfZW1wdHlfc3RhdGVtZW50X29uX25ld19saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXNwYWNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5zaXplPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDVjMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RodSBNYXIgMDggMTA6MjM6MzUgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1mb3JtYXR0ZXJfcHJvZmlsZT1fRU1GQ29kZUZvcm1hdHRlci5wcm9maWxlCi1mb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmEyNTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RodSBBcHIgMTIgMDA6MDc6MDkgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1yZXNvbHZlLnJlcXVpcmVidW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlM2U5NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDUucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUueGVyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UueHNkLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjAiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjUuMCwxLjYuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGwudGVzdHMuamFyCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTAwYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB3c2RsLnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBzYW1wbGVzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc291cmNlLndzZGwudGVzdHMuamFyID0gc3JjLwotamF2YWNXYXJuaW5ncy53c2RsLnRlc3RzLmphcj0tZGlzY291cmFnZWQKLXNvdXJjZS53c2RsLnRlc3RzLmphciA9IHNyYy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGFkMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWUgPSBXU0RMIEpVbml0IFRlc3QKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZDRjMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nRmF1bHRSZWNvbmNpbGlhdGlvbi9CaW5kaW5nRmF1bHRTYW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmY2EwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iDQotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQluYW1lPSJCaW5kaW5nRmF1bHRTYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIj4NCi0JPHdzZGw6dHlwZXM+DQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlLyINCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24xUmVzcG9uc2UiPg0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotDQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50Pg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJSZXNwb25zZSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50Pg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiPg0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJPC94c2Q6c2NoZW1hPg0KLQk8L3dzZGw6dHlwZXM+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMVJlcXVlc3QiPg0KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMSIgbmFtZT0icGFyYW1ldGVycyIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMVJlc3BvbnNlIj4NCi0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk9wZXJhdGlvbjFSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4NCi0JCTx3c2RsOnBhcnQgbmFtZT0iRmF1bHQiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24xRmF1bHQiIC8+DQotCTwvd3NkbDptZXNzYWdlPg0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik9wZXJhdGlvbjJSZXF1ZXN0Ij4NCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjIiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yUmVzcG9uc2UiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMlJlc3BvbnNlIj48L3dzZGw6cGFydD4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yRmF1bHQxIj48L3dzZGw6cGFydD4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yRmF1bHQyIj48L3dzZGw6cGFydD4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlNhbXBsZVBvcnQiPg0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPg0KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpPcGVyYXRpb24xUmVxdWVzdCIgLz4NCi0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjFSZXNwb25zZSIgLz4NCi0JCTwvd3NkbDpvcGVyYXRpb24+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+DQotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjJSZXF1ZXN0IiAvPg0KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMlJlc3BvbnNlIiAvPg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIG1lc3NhZ2U9InRuczpPcGVyYXRpb24yRmF1bHQxIiAvPg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiIG1lc3NhZ2U9InRuczpPcGVyYXRpb24yRmF1bHQyIiAvPg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JPC93c2RsOnBvcnRUeXBlPg0KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlNhbXBsZVBvcnRTT0FQQmluZGluZyIgdHlwZT0idG5zOlNhbXBsZVBvcnQiPg0KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPg0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS9PcGVyYXRpb24xIiAvPg0KLQkJCTx3c2RsOmlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6aW5wdXQ+DQotCQkJPHdzZGw6b3V0cHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6b3V0cHV0Pg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCI+DQotCQkJCTxzb2FwOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCIgLz4NCi0JCQk8L3dzZGw6ZmF1bHQ+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS9PcGVyYXRpb24yIiAvPg0KLQkJCTx3c2RsOmlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6aW5wdXQ+DQotCQkJPHdzZGw6b3V0cHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6b3V0cHV0Pg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiPg0KLQkJCQk8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIC8+DQotCQkJPC93c2RsOmZhdWx0Pg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiPg0KLQkJCQk8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiIC8+DQotCQkJPC93c2RsOmZhdWx0Pg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JPC93c2RsOmJpbmRpbmc+DQotCTx3c2RsOnNlcnZpY2UgbmFtZT0iU2FtcGxlU2VydmljZSI+DQotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTYW1wbGVQb3J0U09BUEJpbmRpbmciIG5hbWU9IlNhbXBsZVBvcnQiPg0KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPg0KLQkJPC93c2RsOnBvcnQ+DQotCTwvd3NkbDpzZXJ2aWNlPg0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjMwMjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QyIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZTIiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdDMiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24yIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0MiIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UyIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uMyI+Ci0JCQk8d3NkbDppbnB1dCBuYW1lPSJJbnB1dDMiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0MyIgLz4KLQkJCTx3c2RsOm91dHB1dCBuYW1lPSJPdXRwdXQzIiBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UzIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQotCTx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uU09BUCIKLQkJdHlwZT0idG5zOkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uMiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9OZXdPcGVyYXRpb24yIiAvPgotCQkJPHdzZGw6aW5wdXQgbmFtZT0iSW5wdXQyIj4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBuYW1lPSJPdXRwdXQyIj4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24zIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL05ld09wZXJhdGlvbjMiIC8+Ci0JCQk8d3NkbDppbnB1dCBuYW1lPSJJbnB1dDMiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG5hbWU9Ik91dHB1dDMiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvblNPQVAiCi0JCQluYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb25TT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvRHVwbGljYXRlU0FYRXhjZXB0aW9uL1NBWEV4Y2VwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZjQzMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucwotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VQcmVmaXhOb3RCb3VuZC8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJOYW1lc3BhY2VQcmVmaXhOb3RCb3VuZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlUHJlZml4Tm90Qm91bmQvIj4KLQk8dW5kZWZpbmVkOnRlc3QgLz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvRnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5L0V4dGVuZGVkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YmRmNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuZGVkV1NETC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iRXh0ZW5kZWRXU0RMIgotCXhtbG5zOmV4dD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpb25zLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5kZWRXU0RMLyI+Ci0KLQk8d3NkbDppbXBvcnQgbG9jYXRpb249IkltcG9ydGVkLndzZGwiCi0JCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iPgotCQk8ZXh0OmltcG9ydCAvPgotCTwvd3NkbDppbXBvcnQ+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCTxleHQ6bWVzc2FnZSAvPgotCQk8d3NkbDpwYXJ0IG5hbWU9ImV4dGVuZGVkUGFydCI+Ci0JCQk8ZXh0OnBhcnQgLz4KLQkJPC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJleHRlbmRlZFBvcnRUeXBlIj4KLQkJPGV4dDpwb3J0VHlwZSAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iZXh0ZW5kZWRPcGVyYXRpb24iPgotCQkJPGV4dDpvcGVyYXRpb24gLz4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCQkJPGV4dDppbnB1dCAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCQkJPGV4dDpvdXRwdXQgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCQk8d3NkbDpmYXVsdCBuYW1lPSJleHRlbmRlZEZhdWx0IiBtZXNzYWdlPSJleHRlbmRlZE1lc3NhZ2UiPgotCQkJCTxleHQ6ZmF1bHQgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvSW1wb3J0ZWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvRnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5L0ltcG9ydGVkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYzAwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvSW1wb3J0ZWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0ZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSW1wb3J0ZWQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iSW1wb3J0ZWRTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0ZWQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0ZWQiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydGVkU09BUCIgbmFtZT0iSW1wb3J0ZWRTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9CYWRJbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvR2V0V1NETFR5cGUvQmFkSW1wb3J0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhOGE3ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9CYWRJbXBvcnQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2JhZHdzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJiYWR3c2RsIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvYmFkd3NkbC8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lLyIgbG9jYXRpb249IkltcG9ydE1lLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9CYWRJbXBvcnQiIHNjaGVtYUxvY2F0aW9uPSJCYWRJbXBvcnQueHNkIj48L3hzZDppbXBvcnQ+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9iYWR3c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9ImJhZHdzZGwiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iYmFkd3NkbFNPQVAiIHR5cGU9InRuczpiYWR3c2RsIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2JhZHdzZGwvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iYmFkd3NkbCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6YmFkd3NkbFNPQVAiIG5hbWU9ImJhZHdzZGxTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9JbXBvcnRNZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9JbXBvcnRNZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODg5OWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvR2V0V1NETFR5cGUvSW1wb3J0TWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSW1wb3J0TWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMSI+Ci0gICAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgIAkJPHhzZDpzZXF1ZW5jZT4KLQotICAgICAgCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkltcG9ydE1lTWVzc2FnZVJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJJbXBvcnRNZU1lc3NhZ2VSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iSW1wb3J0TWVNZXNzYWdlRXh0cmEiPgotICAJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTEiPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSW1wb3J0TWUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOkltcG9ydE1lTWVzc2FnZVJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6SW1wb3J0TWVNZXNzYWdlUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydFBvcnRUeXBlRXh0cmEiPgotICAJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gIAkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLSAgCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotICAJPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydE1lU09BUCIgdHlwZT0idG5zOkltcG9ydE1lIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydEJpbmRpbmdFeHRyYSIKLSAgCXR5cGU9InRuczpJbXBvcnRQb3J0VHlwZUV4dHJhIj4KLSAgCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotICAJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotICAJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gIAkJPHNvYXA6b3BlcmF0aW9uCi0gIAkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvTmV3T3BlcmF0aW9uIiAvPgotICAJCTx3c2RsOmlucHV0PgotICAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLSAgCQk8L3dzZGw6aW5wdXQ+Ci0gIAkJPHdzZGw6b3V0cHV0PgotICAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLSAgCQk8L3dzZGw6b3V0cHV0PgotICAJPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0TWUiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydE1lU09BUCIgbmFtZT0iSW1wb3J0TWVTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkltcG9ydFNlcnZpY2VFeHRyYSI+Ci0gIAk8d3NkbDpwb3J0IG5hbWU9IkltcG9ydFBvcnRFeHRyYSIgYmluZGluZz0idG5zOkltcG9ydEJpbmRpbmdFeHRyYSI+Ci0gIAkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0gIAk8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9IYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzL0RvY3VtZW50ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzMTEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkRvY3VtZW50ZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvIj4KLQk8d3NkbDpkb2N1bWVudGF0aW9uPkRlZmluaXRpb25zIGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudGVkLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+TWVzc2FnZSBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkRvY3VtZW50ZWQiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJUG9ydCB0eXBlIGRvY3VtZW50YXRpb24uCi0JCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJT3BlcmF0aW9uIGRvY3VtZW50YXRpb24uCi0JCQk8L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IkRvY3VtZW50ZWRTT0FQIiB0eXBlPSJ0bnM6RG9jdW1lbnRlZCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+QmluZGluZyBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRlZC9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJEb2N1bWVudGVkIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5TZXJ2aWNlIGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkRvY3VtZW50ZWRTT0FQIiBuYW1lPSJEb2N1bWVudGVkU09BUCI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlBvcnQgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0c1dpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb24vSW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRzV2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi9JbXBvcnRXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MDdhOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRzV2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi9JbXBvcnRXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydFdpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb24vIgotCXhtbG5zOndzZGwwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydFdpdGhOb25TdGFuZGFyZFdTRExGaWxlRXh0ZW5zaW9uL3dzZGwwLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi94c2QwIj4KLQotCTx3c2RsOmltcG9ydAotCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0V2l0aE5vblN0YW5kYXJkV1NETEZpbGVFeHRlbnNpb24vd3NkbDAvIgotCQlsb2NhdGlvbj0iTm9uU3RhbmRhcmRXU0RMRmlsZUV4dGVuc2lvbi53c2RsMCI+PC93c2RsOmltcG9ydD4KLQkJCi0JPHdzZGw6aW1wb3J0Ci0JCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24veHNkMCIKLQkJbG9jYXRpb249Ik5vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QxIj4KLQk8L3dzZGw6aW1wb3J0PgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydFdpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb24vIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDE6SW1wb3J0ZWRUeXBlVmlhV1NETEltcG9ydCI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJOZXdQb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbiI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0id3NkbDA6SW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvblNPQVAiCi0JCQluYW1lPSJJbXBvcnRXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uL05vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRzV2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi9Ob25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg5ZGI4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uL05vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QwCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9uU3RhbmRhcmRTY2hlbWFGaWxlRXh0ZW5zaW9uL3hzZDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24veHNkMCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5ld1R5cGUiIHRlc3RYU0QwPSJwYXNzZWQiPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAJCTxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uL05vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QxIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRzV2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi9Ob25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1ZmQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uL05vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QxCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9uU3RhbmRhcmRTY2hlbWFGaWxlRXh0ZW5zaW9uL3hzZDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24veHNkMCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IkltcG9ydGVkVHlwZVZpYVdTRExJbXBvcnQiIHRlc3RYU0QxPSJwYXNzZWQiPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAJCTxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uL05vblN0YW5kYXJkV1NETEZpbGVFeHRlbnNpb24ud3NkbDAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uL05vblN0YW5kYXJkV1NETEZpbGVFeHRlbnNpb24ud3NkbDAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OWUzNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRzV2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi9Ob25TdGFuZGFyZFdTRExGaWxlRXh0ZW5zaW9uLndzZGwwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJJbXBvcnRXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0V2l0aE5vblN0YW5kYXJkV1NETEZpbGVFeHRlbnNpb24vd3NkbDAvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0V2l0aE5vblN0YW5kYXJkV1NETEZpbGVFeHRlbnNpb24vd3NkbDAvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRXaXRoTm9uU3RhbmRhcmRXU0RMRmlsZUV4dGVuc2lvbi93c2RsMC8iIHhtbG5zOnhzZDA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9uU3RhbmRhcmRTY2hlbWFGaWxlRXh0ZW5zaW9uL3hzZDAiPgotICAgICAgICAgICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ik5vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QwIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9uU3RhbmRhcmRTY2hlbWFGaWxlRXh0ZW5zaW9uL3hzZDAiPjwveHNkOmltcG9ydD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDA6TmV3VHlwZSIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydFdpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb25TT0FQIiB0eXBlPSJ0bnM6SW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRXaXRoTm9uU3RhbmRhcmRXU0RMRmlsZUV4dGVuc2lvbi93c2RsMC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9BLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDYyMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9BLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6Yj0iaHR0cDovL0IiCi0JeG1sbnM6dG5zPSJodHRwOi8vQSIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQluYW1lPSJBIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0EiPgkJCi0JPHdzZGw6aW1wb3J0IGxvY2F0aW9uPSJCLndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL0IiLz4JCQkJCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4JCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iYjpCVHlwZSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4JCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0icG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3AiPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczptZXNzYWdlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9CLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTg2NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9CLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JbmFtZT0iQiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0IiPgotCQkJPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJCVHlwZSI+Ci0JCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgkKLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOGM5OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9NaXNzaW5nTmFtZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4NCi08L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9XaXRoTmFtZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9XaXRoTmFtZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTA5YjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vV2l0aE5hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgbmFtZT0iV1NETEZpbGUiPg0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MjliMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyINCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNpbXBsZSINCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyI+DQotDQotCTx3c2RsOnR5cGVzPg0KLQ0KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCINCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TaW1wbGUvIj4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uSW5wdXQiPg0KLQ0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQ0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMSINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMiINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQ0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb25PdXRwdXQiPg0KLQ0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQ0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMSINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMiINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJPC94c2Q6c2NoZW1hPg0KLQk8L3dzZGw6dHlwZXM+DQotDQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ibXlPcGVyYXRpb25SZXNwb25zZSI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9Im15T3BlcmF0aW9uUmVzcG9uc2UiDQotCQkJZWxlbWVudD0idG5zOk9wZXJhdGlvbk91dHB1dCIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotDQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ibXlPcGVyYXRpb25SZXF1ZXN0Ij4NCi0JCTx3c2RsOnBhcnQgeG1sbnM6cGFydHRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iDQotCQkJbmFtZT0ibXlPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJwYXJ0dG5zOk9wZXJhdGlvbklucHV0IiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0NCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTXlQb3J0VHlwZSI+DQotDQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0ibXlPcGVyYXRpb24iPg0KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpteU9wZXJhdGlvblJlcXVlc3QiIC8+DQotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpteU9wZXJhdGlvblJlc3BvbnNlIiAvPg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JPC93c2RsOnBvcnRUeXBlPg0KLQkNCi08L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2UyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjJlZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImV4YW1wbGUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9ImV4YW1wbGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCQluYW1lPSJleGFtcGxlU09BUCIgdHlwZT0idG5zOmV4YW1wbGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvZXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJleGFtcGxlIj4KLQkJPHdzZGw6cG9ydCB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQkJCWJpbmRpbmc9InRuczpleGFtcGxlU09BUCIgbmFtZT0iZXhhbXBsZVNPQVAiPgotCQkJPGFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQwODc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mby54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzN2Q4YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXJlYUNvZGUiIHR5cGU9InhzZDppbnQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWRkcmVzc1R5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InN0cmVldCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjaXR5IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDljNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNvbnRhY3RJbmZvU2VydmljZSIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIj4KLQotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQkJCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JCQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JCQkJc2NoZW1hTG9jYXRpb249IkNvbnRhY3RJbmZvLnhzZCIgLz4KLQkJCTx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJDb25maXJtYXRpb24ueHNkIiAvPgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVQaG9uZU51bWJlclJlcXVlc3RNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9ImNvbnRhY3Q6cGhvbmVOdW1iZXIiIG5hbWU9ImlucHV0MSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9IkNvbmZpcm1hdGlvbiIgbmFtZT0ib3V0cHV0MSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIj4KLQkJPHdzZGw6cGFydCB0eXBlPSJjb250YWN0OmFkZHJlc3NUeXBlIiBuYW1lPSJpbnB1dDIiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IHR5cGU9IkNvbmZpcm1hdGlvblR5cGUiIG5hbWU9Im91dHB1dDIiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJ0ZXN0UG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0idXBkYXRlUGhvbmVOdW1iZXIiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZVBob25lTnVtYmVyUmVxdWVzdE1zZyIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6dXBkYXRlUGhvbmVOdW1iZXJSZXNwb25zZU1zZyIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9InVwZGF0ZUFkZHJlc3MiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczp1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDZhZWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLm9yZyINCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0iT3BlcmF0aW9uU3R5bGVUZXN0IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLm9yZyI+DQotDQotCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPg0KLQkJPGpheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT50cnVlPC9qYXh3czplbmFibGVXcmFwcGVyU3R5bGU+DQotCQk8amF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9qYXh3czplbmFibGVBc3luY01hcHBpbmc+DQotCTwvamF4d3M6YmluZGluZ3M+DQotDQotCTx0eXBlcz4NCi0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUub3JnIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLm9yZyI+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9InF1b3RlUmVxdWVzdCIgdHlwZT0idG5zOnF1b3RlUmVxdWVzdFR5cGUiIC8+DQotDQotCQkJPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJxdW90ZVJlcXVlc3RUeXBlIj4NCi0JCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdG9ja1N5bWJvbCIgdHlwZT0ieHNkOmludCIgLz4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFuc2FjdGlvbkRhdGUiIHR5cGU9InhzZDpkYXRlIiAvPg0KLQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0icXVvdGVSZXNwb25zZSIgdHlwZT0idG5zOnF1b3RlUmVzcG9uc2VUeXBlIiAvPg0KLQ0KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icXVvdGVSZXNwb25zZVR5cGUiPg0KLQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6ZG91YmxlIiAvPg0KLQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0icXVvdGVFcnJvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0NCi0JCTwveHNkOnNjaGVtYT4NCi0JPC90eXBlcz4NCi0NCi0JPG1lc3NhZ2UgbmFtZT0iUXVvdGUiPg0KLQkJPHBhcnQgbmFtZT0icGFyYW1zIiBlbGVtZW50PSJ0bnM6cXVvdGVSZXF1ZXN0IiAvPg0KLQk8L21lc3NhZ2U+DQotDQotCTxtZXNzYWdlIG5hbWU9IlF1b3RlUmVzcG9uc2UiPg0KLQkJPHBhcnQgbmFtZT0icmVzdWx0IiBlbGVtZW50PSJ0bnM6cXVvdGVSZXNwb25zZSIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJRdW90ZUVycm9yIj4NCi0JCTxwYXJ0IG5hbWU9ImVycm9yIiBlbGVtZW50PSJ0bnM6cXVvdGVFcnJvciIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8cG9ydFR5cGUgbmFtZT0iUXVvdGVQb3J0VHlwZSI+DQotDQotCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCQk8amF4d3M6Y2xhc3MgbmFtZT0iUXVvdGVQcm92aWRlckltcGwiIC8+DQotCQkJPGpheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT50cnVlPC9qYXh3czplbmFibGVXcmFwcGVyU3R5bGU+DQotCQkJPGpheHdzOmVuYWJsZUFzeW5jTWFwcGluZz5mYWxzZTwvamF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPg0KLQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCTxvcGVyYXRpb24gbmFtZT0iR2V0UXVvdGUiPg0KLQ0KLQkJCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiDQotCQkJCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4NCi0JCQkJPGpheHdzOm1ldGhvZCBuYW1lPSJnZXRRdW90ZSIgLz4NCi0JCQkJPGpheHdzOnBhcmFtZXRlciBwYXJ0PSJ3c2RsOmRlZmluaXRpb25zL3dzZGw6bWVzc2FnZVtAbmFtZT0nUXVvdGUnXS93c2RsOnBhcnRbQG5hbWU9J3BhcmFtcyddIg0KLQkJCQkJY2hpbGRFbGVtZW50TmFtZT0idG5zOnN0b2NrU3ltYm9sIiBuYW1lPSJzeW1ib2wiIC8+DQotCQkJCTxqYXh3czpwYXJhbWV0ZXIgcGFydD0id3NkbDpkZWZpbml0aW9ucy93c2RsOm1lc3NhZ2VbQG5hbWU9J1F1b3RlJ10vd3NkbDpwYXJ0W0BuYW1lPSdwYXJhbXMnXSINCi0JCQkJCWNoaWxkRWxlbWVudE5hbWU9InRuczp0cmFuc2FjdGlvbkRhdGUiIG5hbWU9ImRhdGUiIC8+DQotCQkJCTxqYXh3czplbmFibGVXcmFwcGVyU3R5bGU+dHJ1ZTwvamF4d3M6ZW5hYmxlV3JhcHBlclN0eWxlPg0KLQkJCQk8amF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9qYXh3czplbmFibGVBc3luY01hcHBpbmc+DQotCQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlF1b3RlIiAvPg0KLQ0KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlF1b3RlUmVzcG9uc2UiIC8+DQotDQotCQkJPGZhdWx0IG5hbWU9IlF1b3RlRXJyb3IiIG1lc3NhZ2U9InRuczpRdW90ZUVycm9yIj4NCi0NCi0JCQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJCQk8amF4d3M6Y2xhc3MgbmFtZT0iUXVvdGVFeGNlcHRpb24iIC8+DQotCQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPC9mYXVsdD4NCi0JCTwvb3BlcmF0aW9uPg0KLQk8L3BvcnRUeXBlPg0KLQ0KLQk8YmluZGluZyBuYW1lPSJRdW90ZUJpbmRpbmciIHR5cGU9InRuczpRdW90ZVBvcnRUeXBlIj4NCi0NCi0JCTxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIgLz4NCi0NCi0JCTxvcGVyYXRpb24gbmFtZT0iR2V0UXVvdGUiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIC8+DQotCQkJPGlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L2lucHV0Pg0KLQkJCTxvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvb3V0cHV0Pg0KLQkJCTxmYXVsdCBuYW1lPSJRdW90ZUVycm9yIj4NCi0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iUXVvdGVFcnJvciIgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvZmF1bHQ+DQotCQk8L29wZXJhdGlvbj4NCi0NCi0JPC9iaW5kaW5nPg0KLQ0KLQk8c2VydmljZSBuYW1lPSJRdW90ZVNlcnZpY2UiPg0KLQ0KLQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJPGpheHdzOmNsYXNzIG5hbWU9IlF1b3RhdGlvblNlcnZpY2UiIC8+DQotCQk8L2pheHdzOmJpbmRpbmdzPg0KLQ0KLQkJPHBvcnQgbmFtZT0iUXVvdGVQb3J0IiBiaW5kaW5nPSJ0bnM6UXVvdGVCaW5kaW5nIj4NCi0NCi0JCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCQkJPGpheHdzOm1ldGhvZCBuYW1lPSJnZXRRdW90YXRpb25TZXJ2aWNlIiAvPg0KLQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3F1b3RlIiAvPg0KLQ0KLQkJPC9wb3J0Pg0KLQ0KLQk8L3NlcnZpY2U+DQotDQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1JlY29uY2lsZU5vbldTRExFbGVtZW50cy9SZWNvbmNpbGVOb25XU0RMRWxlbWVudHMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzL1JlY29uY2lsZU5vbldTRExFbGVtZW50cy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGI3ODU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzL1JlY29uY2lsZU5vbldTRExFbGVtZW50cy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZWNvbmNpbGVOb25XU0RMRWxlbWVudHMvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlJlY29uY2lsZU5vbldTRExFbGVtZW50c1NPQVAiIHR5cGU9InRuczpSZWNvbmNpbGVOb25XU0RMRWxlbWVudHMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlJlY29uY2lsZU5vbldTRExFbGVtZW50cyI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6UmVjb25jaWxlTm9uV1NETEVsZW1lbnRzU09BUCIgbmFtZT0iUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvUmVjb25jaWxlc0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpYmxlRWxlbWVudFNhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9SZWNvbmNpbGVzRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVFbGVtZW50U2FtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MzYxMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9SZWNvbmNpbGVzRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVFbGVtZW50U2FtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkJpbmRpbmdGYXVsdFNhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlLyI+Ci0JPHhzZDphbm5vdGF0aW9uPgotCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQlBbm5vdGF0aW9uCi0gCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzZDphbm5vdGF0aW9uPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9IiIgbG9jYXRpb249IiI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlBbm5vdGF0aW9uCi0gCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3dzZGw6aW1wb3J0PgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJQW5ub3RhdGlvbgotIAkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24xIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMVJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjIiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJSZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24xRmF1bHQxIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik9wZXJhdGlvbjFSZXF1ZXN0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCUFubm90YXRpb24KLSAJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpPcGVyYXRpb24xIiBuYW1lPSJwYXJhbWV0ZXJzIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCUFubm90YXRpb24KLSAJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpPcGVyYXRpb24xUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xRmF1bHQiPgotCQk8d3NkbDpwYXJ0IG5hbWU9IkZhdWx0IiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMUZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMlJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik9wZXJhdGlvbjJSZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjJSZXNwb25zZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMkZhdWx0MSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yRmF1bHQyIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMkZhdWx0MiI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xRmF1bHQxIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMUZhdWx0MSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlBbm5vdGF0aW9uCi0gCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0JCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCQlBbm5vdGF0aW9uCi0gCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMVJlcXVlc3QiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJQW5ub3RhdGlvbgotIAkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMVJlc3BvbnNlIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCUFubm90YXRpb24KLSAJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9InRuczpPcGVyYXRpb24xRmF1bHQxIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCUFubm90YXRpb24KLSAJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3dzZGw6ZmF1bHQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iU2FtcGxlUG9ydFNPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6U2FtcGxlUG9ydCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlBbm5vdGF0aW9uCi0gCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0JCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCQlBbm5vdGF0aW9uCi0gCQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQk8L3hzZDphbm5vdGF0aW9uPgotCi0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS9PcGVyYXRpb24xIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQlBbm5vdGF0aW9uCi0gCQkJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCUFubm90YXRpb24KLSAJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCUFubm90YXRpb24KLSAJCQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQotCQkJCTxzb2FwOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCIgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iU2FtcGxlU2VydmljZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlBbm5vdGF0aW9uCi0gCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTYW1wbGVQb3J0U09BUEJpbmRpbmciIG5hbWU9IlNhbXBsZVBvcnQiPgotCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJQW5ub3RhdGlvbgotIAkJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvUmVjb25jaWxlc0ltcG9ydHNXaXRoTm9Mb2NhdGlvbi9NYWluLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1JlY29uY2lsZXNJbXBvcnRzV2l0aE5vTG9jYXRpb24vTWFpbi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzVlMTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvUmVjb25jaWxlc0ltcG9ydHNXaXRoTm9Mb2NhdGlvbi9NYWluLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0IvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkIiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0IvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6d3NkbDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQS8iIC8+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJCIj4KLQkJPHdzZGw6cG9ydCBuYW1lPSJOZXdQb3J0IiBiaW5kaW5nPSJ3c2RsMTpBU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1RhcmdldE5hbWVzcGFjZS9UYXJnZXROYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVGFyZ2V0TmFtZXNwYWNlL1RhcmdldE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGZkOWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVGFyZ2V0TmFtZXNwYWNlL1RhcmdldE5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IlRhcmdldE5hbWVzcGFjZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVGFyZ2V0TmFtZXNwYWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9UYXJnZXROYW1lc3BhY2UvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1RhcmdldE5hbWVzcGFjZS8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlRhcmdldE5hbWVzcGFjZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlRhcmdldE5hbWVzcGFjZVNPQVAiIHR5cGU9InRuczpUYXJnZXROYW1lc3BhY2UiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1RhcmdldE5hbWVzcGFjZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJUYXJnZXROYW1lc3BhY2UiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpUYXJnZXROYW1lc3BhY2VTT0FQIiBuYW1lPSJUYXJnZXROYW1lc3BhY2VTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZGU4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgbmFtZT0iVGVzdFNlcnZpY2UiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnL1NlcnZpY2UvIg0KLQl4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnL1NlcnZpY2UvIg0KLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl4bWxuczp0ZXN0PSJodHRwOi8vdGVzdC5vcmcvIj4NCi0JPHR5cGVzPg0KLQkJPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQkJCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVzdC5vcmcvIg0KLQkJCQlzY2hlbWFMb2NhdGlvbj0iVGVzdDEueHNkIiAvPg0KLQkJPC94czpzY2hlbWE+DQotCQk8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotCQkJPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCQkJCXNjaGVtYUxvY2F0aW9uPSJUZXN0Mi54c2QiIC8+DQotCQk8L3hzOnNjaGVtYT4NCi0JPC90eXBlcz4NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdFJlcXVlc3QiPg0KLQkJPHBhcnQgbmFtZT0icmVxdWVzdFBhcnQiIHR5cGU9InRlc3Q6TXlUeXBlIiAvPg0KLQk8L21lc3NhZ2U+DQotCTxtZXNzYWdlIG5hbWU9InRlc3RSZXNwb25zZSI+DQotCQk8cGFydCBuYW1lPSJyZXNwb25zZVBhcnQiIGVsZW1lbnQ9InRlc3Q6TXlFbGVtZW50IiAvPg0KLQk8L21lc3NhZ2U+DQotCTxwb3J0VHlwZSBuYW1lPSJUZXN0UG9ydCI+DQotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPg0KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6dGVzdFJlcXVlc3QiIG5hbWU9InRlc3RSZXF1ZXN0IiAvPg0KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOnRlc3RSZXNwb25zZSIgbmFtZT0idGVzdFJlc3BvbnNlIiAvPg0KLQkJPC9vcGVyYXRpb24+DQotDQotCTwvcG9ydFR5cGU+DQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzM2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnLyI+DQotPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjgxYTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3QyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnLyINCi0JeG1sbnM6dG5zPSJodHRwOi8vdGVzdC5vcmcvIj4NCi0JDQotCTxlbGVtZW50IG5hbWU9Ik15RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+DQotDQotCTxzaW1wbGVUeXBlIG5hbWU9Ik15VHlwZSI+DQotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj48L3Jlc3RyaWN0aW9uPg0KLQk8L3NpbXBsZVR5cGU+DQotDQotPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlc0V4dGVuc2liaWxpdHkvVHlwZXNFeHRlbnNpYmlsaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ1NjY4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXNFeHRlbnNpYmlsaXR5LyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUeXBlc0V4dGVuc2liaWxpdHkiCi0JeG1sbnM6dHlwZUV4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL090aGVyVHlwZXMvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9UeXBlc0V4dGVuc2liaWxpdHkvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHR5cGVFeDp0eXBlRGVmIC8+Ci0JCTx4c2Q6c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXMvIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx0eXBlRXg6dHlwZURlZiAvPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL0ltcG9ydE1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTREw0SlJlbW92ZS9JbXBvcnRNZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODg5OWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL0ltcG9ydE1lLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkltcG9ydE1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZTEiPgotICAgICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0KLSAgICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJJbXBvcnRNZU1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iSW1wb3J0TWVNZXNzYWdlUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkltcG9ydE1lTWVzc2FnZUV4dHJhIj4KLSAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3UGFydCIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UxIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydE1lIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpJbXBvcnRNZU1lc3NhZ2VSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOkltcG9ydE1lTWVzc2FnZVJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRQb3J0VHlwZUV4dHJhIj4KLSAgCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0gIAkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLSAgCTwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRNZVNPQVAiIHR5cGU9InRuczpJbXBvcnRNZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRCaW5kaW5nRXh0cmEiCi0gIAl0eXBlPSJ0bnM6SW1wb3J0UG9ydFR5cGVFeHRyYSI+Ci0gIAk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLSAgCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLSAgCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAJCTxzb2FwOm9wZXJhdGlvbgotICAJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lL05ld09wZXJhdGlvbiIgLz4KLSAgCQk8d3NkbDppbnB1dD4KLSAgCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0gIAkJPC93c2RsOmlucHV0PgotICAJCTx3c2RsOm91dHB1dD4KLSAgCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0gIAkJPC93c2RsOm91dHB1dD4KLSAgCTwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkltcG9ydE1lIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpJbXBvcnRNZVNPQVAiIG5hbWU9IkltcG9ydE1lU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRTZXJ2aWNlRXh0cmEiPgotICAJPHdzZGw6cG9ydCBuYW1lPSJJbXBvcnRQb3J0RXh0cmEiIGJpbmRpbmc9InRuczpJbXBvcnRCaW5kaW5nRXh0cmEiPgotICAJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotICAJPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMNEpSZW1vdmUvUmVtb3ZlVmlhV1NETDRKLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTREw0SlJlbW92ZS9SZW1vdmVWaWFXU0RMNEoud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3NDRiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTREw0SlJlbW92ZS9SZW1vdmVWaWFXU0RMNEoud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iUmVtb3ZlVmlhV1NETDRKIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUmVtb3ZlVmlhV1NETDRKLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JlbW92ZVZpYVdTREw0Si8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iPgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIiBsb2NhdGlvbj0iSW1wb3J0TWUud3NkbCI+PC93c2RsOmltcG9ydD4KLSAgICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUmVtb3ZlVmlhV1NETDRKLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMSI+Ci0gICAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgIAkJPHhzZDpzZXF1ZW5jZT4KLQotICAgICAgCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlbW92ZVZpYVdTREw0Sk1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVtb3ZlVmlhV1NETDRKTWVzc2FnZVJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZW1vdmVWaWFXU0RMNEpNZXNzYWdlRXh0cmEiPgotICAJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTEiPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUmVtb3ZlVmlhV1NETDRKIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZW1vdmVWaWFXU0RMNEpNZXNzYWdlUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZW1vdmVWaWFXU0RMNEpNZXNzYWdlUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW5Qb3J0VHlwZUV4dHJhIj4KLSAgCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0gIAkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLSAgCTwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJSZW1vdmVWaWFXU0RMNEpTT0FQIiB0eXBlPSJ0bnM6UmVtb3ZlVmlhV1NETDRKIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JlbW92ZVZpYVdTREw0Si9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJNYWluQmluZGluZ0V4dHJhIiB0eXBlPSJ0bnM6TWFpblBvcnRUeXBlRXh0cmEiPgotICAJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0gIAkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0gIAk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgCQk8c29hcDpvcGVyYXRpb24KLSAgCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SZW1vdmVWaWFXU0RMNEovTmV3T3BlcmF0aW9uIiAvPgotICAJCTx3c2RsOmlucHV0PgotICAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLSAgCQk8L3dzZGw6aW5wdXQ+Ci0gIAkJPHdzZGw6b3V0cHV0PgotICAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLSAgCQk8L3dzZGw6b3V0cHV0PgotICAJPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iUmVtb3ZlVmlhV1NETDRKIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpSZW1vdmVWaWFXU0RMNEpTT0FQIiBuYW1lPSJSZW1vdmVWaWFXU0RMNEpTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9Ik1haW5TZXJ2aWNlRXh0cmEiPgotICAJPHdzZGw6cG9ydCBuYW1lPSJNYWluUG9ydEV4dHJhIiBiaW5kaW5nPSJ0bnM6TWFpbkJpbmRpbmdFeHRyYSI+Ci0gIAkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0gIAk8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9maXJzdGxldmVsLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9maXJzdGxldmVsLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYjhkYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vZmlyc3RsZXZlbC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4NCi0gICAgPGltcG9ydCBsb2NhdGlvbj0ic2Vjb25kbGV2ZWwud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+DQotCTxtZXNzYWdlIG5hbWU9InRlc3RJTlBVVG1lc3NhZ2UiPg0KLQkJPHBhcnQgbmFtZT0idGVzdElOcGFydCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLQk8L21lc3NhZ2U+DQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYTQyYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vbWFpbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiANCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiANCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4NCi0gICAgDQotICAgIDxpbXBvcnQgbG9jYXRpb249ImZpcnN0bGV2ZWwud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+DQotICAgIA0KLSAgICA8cG9ydFR5cGUgbmFtZT0iVGVzdFBvcnRUeXBlIj4NCi0NCi0gICAgCTxvcGVyYXRpb24gbmFtZT0iVGVzdE9wZXJhdGlvbiI+DQotDQotICAgIAkJPCEtLSBUaGlzIGlzIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IGxldmVsIGltcG9ydCAtLT4NCi0NCi0gICAgCQk8aW5wdXQgbWVzc2FnZT0idG5zOnRlc3RJTlBVVG1lc3NhZ2UiLz4NCi0NCi0gICAgCQk8IS0tIFRoaXMgaXMgbG9jYXRlZCBpbiB0aGUgc2Vjb25kIGxldmVsIGltcG9ydCAtLT4NCi0NCi0gICAgCQk8b3V0cHV0IG1lc3NhZ2U9InRuczp0ZXN0T1VUUFVUbWVzc2FnZSIvPg0KLQ0KLSAgICAJPC9vcGVyYXRpb24+DQotDQotICAgIDwvcG9ydFR5cGU+DQotICAgIA0KLTwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vc2Vjb25kbGV2ZWwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL3NlY29uZGxldmVsLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMmVmZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vc2Vjb25kbGV2ZWwud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgDQotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgDQotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIA0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPg0KLQ0KLQk8IS0tIEhlcmUgdG8gZm9yY2UgYSBjeWNsaWMgaW1wb3J0IHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBkb2VzIG5vdCBnbyBpbnRvIGFuIGluZmluaXRlIHJlY3Vyc2lvbi4gLS0+DQotCQ0KLSAgICA8aW1wb3J0IGxvY2F0aW9uPSJtYWluLndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJ0ZXN0T1VUUFVUbWVzc2FnZSI+DQotCQk8cGFydCBuYW1lPSJ0ZXN0T1VUcGFydCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLQk8L21lc3NhZ2U+DQotDQotCTwhLS0gRHVwbGljYXRlZCBoZXJlIHRvIGFsbG93IHRlc3RpbmcgdGhlIGltcG9ydHMgdHJlZSB0cmF2ZXJzYWwgb3JkZXIuDQotCVRoaXMgbWVzc2FnZSB3aWxsIGJlICJtYXNrZWQiIGJ5IHRoZSBvbmUgZGVjbGFyZWQgaW4gdGhlIGZpcnN0bGV2ZWwud3NkbCAtLT4NCi0NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdElOUFVUbWVzc2FnZSI+DQotCQk8cGFydCBuYW1lPSJ0ZXN0SU5wYXJ0IiB0eXBlPSJ4c2Q6aW50Ii8+DQotCTwvbWVzc2FnZT4NCi0NCi08L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQRXhhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWE0Yjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIKLQl4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQRXhhbXBsZS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSFRUUEV4YW1wbGUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0hUVFBFeGFtcGxlLyI+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkhUVFBFeGFtcGxlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iSFRUUEV4YW1wbGVIVFRQIiB0eXBlPSJ0bnM6SFRUUEV4YW1wbGUiPgotCQk8aHR0cDpiaW5kaW5nIHZlcmI9IkdFVCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8aHR0cDpvcGVyYXRpb24gbG9jYXRpb249Ii9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8aHR0cDp1cmxFbmNvZGVkIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPG1pbWU6Y29udGVudCB0eXBlPSJ0ZXh0L3htbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJIVFRQRXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkhUVFBFeGFtcGxlSFRUUCIKLQkJCW5hbWU9IkhUVFBFeGFtcGxlSFRUUCI+Ci0JCQk8aHR0cDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUFRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyMTFlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzM2Q0NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRUV4YW1wbGUiPgotCTx0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJYTUxEYXRhIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQxIiB0eXBlPSJ4c2Q6aW50Ij48L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3R5cGVzPgotCTxtZXNzYWdlIG5hbWU9IlJlcXVlc3RNc2ciPgotCQk8cGFydCBuYW1lPSJyZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdCIgLz4KLQk8L21lc3NhZ2U+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNc2ciPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlIiAvPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZURhdGEiIHR5cGU9InhzZDpiYXNlNjRCaW5hcnkiIC8+Ci0JCTxwYXJ0IG5hbWU9InhtbERhdGEiIGVsZW1lbnQ9InRuczpYTUxEYXRhIiAvPgotCTwvbWVzc2FnZT4KLQk8cG9ydFR5cGUgbmFtZT0iTUlNRUV4YW1wbGVQb3J0VHlwZSI+Ci0JCTxvcGVyYXRpb24gbmFtZT0idGVzdE9wZXJhdGlvbiI+Ci0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNc2ciIC8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1zZyIgLz4KLQkJPC9vcGVyYXRpb24+Ci0JPC9wb3J0VHlwZT4KLQk8YmluZGluZyBuYW1lPSJNSU1FRXhhbXBsZUJpbmRpbmciIHR5cGU9InRuczpNSU1FRXhhbXBsZVBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIKLQkJCXN0eWxlPSJkb2N1bWVudCIgLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRUV4YW1wbGUvdGVzdE9wZXJhdGlvbiIgLz4KLQkJCTxpbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvaW5wdXQ+Ci0JCQk8b3V0cHV0PgotCQkJCTxtaW1lOm11bHRpcGFydFJlbGF0ZWQ+Ci0JCQkJCTxtaW1lOnBhcnQgbmFtZT0icmVzcG9uc2UiPgotCQkJCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQkJCTwvbWltZTpwYXJ0PgotCQkJCQk8bWltZTpwYXJ0IG5hbWU9InJlc3BvbnNlRGF0YSI+Ci0JCQkJCQk8bWltZTpjb250ZW50IHBhcnQ9InJlc3BvbnNlRGF0YSIgdHlwZT0idGV4dC9iaW5hcnkiIC8+Ci0JCQkJCTwvbWltZTpwYXJ0PgotCQkJCTwvbWltZTptdWx0aXBhcnRSZWxhdGVkPgotCQkJCTxtaW1lOm1pbWVYTUwgcGFydD0ieG1sRGF0YSIgLz4KLQkJCTwvb3V0cHV0PgotCQk8L29wZXJhdGlvbj4KLQk8L2JpbmRpbmc+Ci0JPHNlcnZpY2UgbmFtZT0iTUlNRUV4YW1wbGVTZXJ2aWNlIj4KLQkJPHBvcnQgbmFtZT0iTUlNRUV4YW1wbGVQb3J0IiBiaW5kaW5nPSJ0bnM6TUlNRUV4YW1wbGVCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9NSU1FRXhhbXBsZSIgLz4KLQkJPC9wb3J0PgotCTwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRVRlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVUZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzE2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRVRlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QiPgotCTx0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdCI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJYTUxEYXRhIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQxIiB0eXBlPSJ4c2Q6aW50Ij48L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3R5cGVzPgotCTxtZXNzYWdlIG5hbWU9IlJlcXVlc3RNc2ciPgotCQk8cGFydCBuYW1lPSJyZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdCIgLz4KLQk8L21lc3NhZ2U+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNc2ciPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlIiAvPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZURhdGEiIHR5cGU9InhzZDpiYXNlNjRCaW5hcnkiIC8+Ci0JCTxwYXJ0IG5hbWU9InhtbERhdGEiIGVsZW1lbnQ9InRuczpYTUxEYXRhIiAvPgotCTwvbWVzc2FnZT4KLQk8cG9ydFR5cGUgbmFtZT0iTUlNRVRlc3RQb3J0VHlwZSI+Ci0JCTxvcGVyYXRpb24gbmFtZT0idGVzdE9wZXJhdGlvbiI+Ci0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNc2ciIC8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1zZyIgLz4KLQkJPC9vcGVyYXRpb24+Ci0JPC9wb3J0VHlwZT4KLQk8YmluZGluZyBuYW1lPSJNSU1FVGVzdEJpbmRpbmciIHR5cGU9InRuczpNSU1FVGVzdFBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIKLQkJCXN0eWxlPSJkb2N1bWVudCIgLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QvdGVzdE9wZXJhdGlvbiIgLz4KLQkJCTxpbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvaW5wdXQ+Ci0JCQk8b3V0cHV0PgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJNSU1FVGVzdFNlcnZpY2UiPgotCQk8cG9ydCBuYW1lPSJNSU1FVGVzdFBvcnQiIGJpbmRpbmc9InRuczpNSU1FVGVzdEJpbmRpbmciPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL01JTUVUZXN0IiAvPgotCQk8L3BvcnQ+Ci0JPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiODMwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJEb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIj4KLQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQk8d3NkbDp0eXBlcz4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx4c2Q6c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbkZhdWx0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uSGVhZGVyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImhlYWRlciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbkhlYWRlckZhdWx0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImhlYWRlckZhdWx0IgotCQkJCQkJCXR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9IlRlc3RNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25IZWFkZXIiIG5hbWU9InRlc3RIZWFkZXIiIC8+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlckZhdWx0IgotCQkJbmFtZT0idGVzdEhlYWRlckZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdE1zZyI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IgotCQkJbmFtZT0icGFyYW1ldGVycyI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPC93c2RsOnBhcnQ+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlciIgbmFtZT0iaGVhZGVyIiAvPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25IZWFkZXJGYXVsdCIKLQkJCW5hbWU9ImhlYWRlckZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvbkZhdWx0TXNnIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uRmF1bHQiIG5hbWU9ImZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdE1zZyI+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZU1zZyI+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImZhdWx0IgotCQkJCW1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25GYXVsdE1zZyI+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCIKLQkJdHlwZT0idG5zOkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0icGFyYW1ldGVycyIgLz4KLQkJCQk8c29hcDpoZWFkZXIgdXNlPSJsaXRlcmFsIiBwYXJ0PSJoZWFkZXIiCi0JCQkJCW1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIj4KLQkJCQkJPHNvYXA6aGVhZGVyZmF1bHQgdXNlPSJsaXRlcmFsIiBwYXJ0PSJoZWFkZXJGYXVsdCIKLQkJCQkJCW1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIiAvPgotCQkJCTwvc29hcDpoZWFkZXI+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImZhdWx0Ij4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iZmF1bHQiIHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCIKLQkJCW5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENFbmNvZGVkU09BUEV4YW1wbGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzAyYTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS8iPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGVTT0FQIgotCQl0eXBlPSJ0bnM6UlBDRW5jb2RlZFNPQVBFeGFtcGxlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENFbmNvZGVkU09BUEV4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keQotCQkJCQllbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIKLQkJCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS8iCi0JCQkJCXVzZT0iZW5jb2RlZCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5Ci0JCQkJCWVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJlbmNvZGVkIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlJQQ0VuY29kZWRTT0FQRXhhbXBsZVNPQVAiCi0JCQluYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGVTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYTc3YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyI+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHQiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvbkZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25GYXVsdCIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJSUENMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQl0eXBlPSJ0bnM6UlBDTGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keQotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkKLQkJCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS8iCi0JCQkJCXVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCQk8d3NkbDpmYXVsdCBuYW1lPSJmYXVsdCI+Ci0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iZmF1bHQiCi0JCQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIgotCQkJCQl1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6ZmF1bHQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJSUENMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpSUENMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQkJbmFtZT0iUlBDTGl0ZXJhbFNPQVBFeGFtcGxlU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvU09BUFRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjZWI5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5MmU4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSoud3NkbC5vdXQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9JbXBvcnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0ltcG9ydGVkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYTgyZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0ltcG9ydGVkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSW1wb3J0ZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRlZCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRlZFNPQVAiIHR5cGU9InRuczpJbXBvcnRlZCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkltcG9ydGVkIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkltcG9ydGVkU09BUCIgYmluZGluZz0idG5zOkltcG9ydGVkU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWJiMjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvTG9hZEFuZFByaW50VGVzdC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJMb2FkQW5kUHJpbnRUZXN0IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIgeG1sbnM6d3NkbDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIGxvY2F0aW9uPSJJbXBvcnRlZC53c2RsIj48L3dzZGw6aW1wb3J0PgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uTmV3RmF1bHQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25OZXdGYXVsdCI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvbk5ld0ZhdWx0IgotICAJCWVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25OZXdGYXVsdCI+Ci0gIAk8L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkxvYWRBbmRQcmludFRlc3QiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9Ik5ld0ZhdWx0IiBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uTmV3RmF1bHQiPjwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iTG9hZEFuZFByaW50VGVzdFNPQVAiIHR5cGU9InRuczpMb2FkQW5kUHJpbnRUZXN0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvTG9hZEFuZFByaW50VGVzdC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9Ik5ld0ZhdWx0Ij48L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTG9hZEFuZFByaW50VGVzdCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TG9hZEFuZFByaW50VGVzdFNPQVAiIG5hbWU9IkxvYWRBbmRQcmludFRlc3RTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9BbGxUZXN0Q2FzZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9BbGxUZXN0Q2FzZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThkY2M0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQWxsVGVzdENhc2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zLkhUVFBFeHRlbnNpb25zVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zLk1JTUVFeHRlbnNpb25zVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zLlNPQVBFeHRlbnNpb25zVGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIEFsbFRlc3RDYXNlcyBleHRlbmRzIFRlc3RDYXNlCi17Ci0KLSAgcHVibGljIEFsbFRlc3RDYXNlcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KElubGluZVNjaGVtYVRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChMb2FkQW5kU2VyaWFsaXphdGlvblRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChTZW1hbnRpY1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMR2VuZXJhdGlvblRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMNEpBUElUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoV1NETEVNRkFQSVRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChVdGlsVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KEJ1Z0ZpeGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KExvY2F0aW9uVHJhY2tpbmdUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoUmVmYWN0b3JpbmdUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoU09BUEV4dGVuc2lvbnNUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoSFRUUEV4dGVuc2lvbnNUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoTUlNRUV4dGVuc2lvbnNUZXN0LnN1aXRlKCkpOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNWY3ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIENvbnRhaW5zIHVuaXQgdGVzdHMgZm9yIHJlcG9ydGVkIGJ1Z3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHVibGljIEJ1Z0ZpeGVzVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlR5cGVBbmRFbGVtZW50UmVzb2x1dGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0VHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJNSU1FR2V0VHlwZU5hbWUiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFJldHVybnNQcm9wZXJRTmFtZUZvck1JTUVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkltcG9ydHNFbGVtZW50T3JkZXIiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFBsYWNlc0ltcG9ydHNBZnRlclRoZURlZmluaXRpb25FbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZXNvbHZlV1NETEVsZW1lbnQiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFJlc29sdmVzRWxlbWVudEluSW1wb3J0cygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUGFydHNTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTZXJpYWxpemVzUGFydHNJblNPQVBCb2R5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJJbXBvcnRzU2VyaWFsaXphdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U2VyaWFsaXplc0ltcG9ydHNCZWZvcmVUeXBlcygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiTG9jYWxOYW1lc3BhY2VQcmVmaXhlcyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U3VwcG9ydHNMb2NhbE5hbWVzcGFjZVByZWZpeGVzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJPcGVyYXRpb25FeHRlbnNpb25FbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0VG9sbGVyYXRlc0V4dGVuc2lvbkVsZW1lbnRzRm9yT3BlcmF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZWNvbmNpbGVzQmluZGluZ0ZhdWx0cyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVjb25jaWxlc0JpbmRpbmdGYXVsdHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkR1cGxpY2F0ZVNBWEVycm9yRGlhZ25vc3RpY3MiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEF2b2lkRHVwbGljYXRlU0FYRXhjZXB0aW9uRGlhZ25vc3RpY3MoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJGdWxsRWxlbWVudEV4dGVuc2liaWxpdHkiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEZ1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eSgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiVHlwZXNFeHRlbnNpYmlsaXR5IikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0VHlwZXNFeHRlbnNpYmlsaXR5KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkFsbG93TnVsbE5hbWVzcGFjZVVSSSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdEFsbG93TnVsbE5hbWVzcGFjZVVSSSgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJMb2Fkc05hbWVsZXNzRGVmaW5pdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdExvYWRzTmFtZWxlc3NEZWZpbml0aW9uKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkhhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RIYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlN1cHBvcnRzTG9jYWxOU0ZvckV4dGVuc2liaWxpdHlFbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFN1cHBvcnRzTG9jYWxOU0ZvckV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RJbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUHJvcGFnYXRlc1RhcmdldE5hbWVzcGFjZUNoYW5nZSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFByb3BhZ2F0ZXNUYXJnZXROYW1lc3BhY2VDaGFuZ2UoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlbW92ZUJpbmRpbmciKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RSZW1vdmVCaW5kaW5nKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZW1vdmVNZXNzYWdlIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0UmVtb3ZlTWVzc2FnZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUmVtb3ZlUG9ydFR5cGUiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RSZW1vdmVQb3J0VHlwZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUmVtb3ZlU2VydmljZSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFJlbW92ZVNlcnZpY2UoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkdldFdTRExUeXBlIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0R2V0V1NETFR5cGUoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkludmFsaWRYU0RJbXBvcnRzIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0SW52YWxpZFhTREltcG9ydHMoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlY29uY2lsZU5vbldTRExFbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFJlY29uY2lsZU5vbldTRExFbGVtZW50cygpOwotICAgICAgfQotICAgIH0pOyAgICAgICAgCi0gICAgCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZWNvbmNpbGVzSW1wb3J0c1dpdGhOb0xvY2F0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0UmVjb25jaWxlc0ltcG9ydHNXaXRoTm9Mb2NhdGlvbigpOwotICAgICAgfQotICAgIH0pOyAKLSAgICAKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlY29uY2lsZXNFeHRlbnNpYmxlRWxlbWVudHMiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RSZWNvbmNpbGVzRXh0ZW5zaWJsZUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkltcG9ydHNXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0SW1wb3J0c1dpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb24oKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEzMzMxMAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFR5cGVBbmRFbGVtZW50UmVzb2x1dGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVGhlcmUgYXJlIHR3byBpbmxpbmUgc2NoZW1hcywgZWFjaCBpbXBvcnRpbmcgYW4gZXh0ZXJuYWwgc2NoZW1hLgotICAgICAgLy8gVGhlIGZpcnN0IHNjaGVtYSBpcyBlbXB0eSBhbmQgdXNlZCBqdXN0IHRvIHNob3cgdGhlIHR5cGUgcmVzb2x1dGlvbgotICAgICAgLy8gbWVjaGFuaXNtJ3MgZmF1bHQuCi0gICAgICAvLyBUaGUgc2NoZW1hIGNvbnRhaW5pbmcgdGhlIHR5cGUgYW5kIGVsZW1lbnQgZGVjbGFyYXRpb24gd2UncmUgaW50ZXJlc3RlZAotICAgICAgLy8gaW4gaXMgdGhlIHNlY29uZCBzY2hlbWEgaW4gdGhlIGNvbGxlY3Rpb24uCi0KLSAgICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEgPSAoWFNEU2NoZW1hKWRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0U2NoZW1hcygpLmdldCgxKTsKLQotICAgICAgLy8gVGhlIGZpcnN0IGFuZCBvbmx5IGNvbXBvbmVudCBpbiB0aGlzIHNjaGVtYSBpcyBhbiBpbXBvcnQuCi0KLSAgICAgIFhTREltcG9ydCB4c2RJbXBvcnQgPSAoWFNESW1wb3J0KWlubGluZVNjaGVtYS5nZXRDb250ZW50cygpLmdldCgwKTsKLQotICAgICAgLy8gVGhlIGltcG9ydGVkIHNjaGVtYSB3YXMgcmVzb2x2ZWQgd2hlbiB0aGUgcmVzb3VyY2Ugd2FzIGxvYWRlZC4KLSAgICAgIC8vIFRoaXMgaXMgdGhlIHNjaGVtYSBjb250YWluaW5nIG91ciB0eXBlL2VsZW1lbnQuCi0KLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSB4c2RJbXBvcnQuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsKLQotICAgICAgLy8gTm93IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcmVzb2x2ZWQgdHlwZS9lbGVtZW50IGZvciB0aGUgbWVzc2FnZXMgaW4KLSAgICAgIC8vIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICAvLyBhcmUgdGhlIG9uZXMgaW4gdGhlIHNjaGVtYSBhbmQgbm90IHNvbWUgYm9ndXMgb25lcy4KLQotICAgICAgSXRlcmF0b3IgbWVzc2FnZXNJdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG1lc3NhZ2VzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSltZXNzYWdlc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGlmIChuYW1lLmVxdWFscygidGVzdFJlcXVlc3QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2Uga25vdyB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0IGluIHRoZSBtZXNzYWdlIGFuZCBpdCByZWZlcnMgdG8gYQotICAgICAgICAgIC8vIHR5cGUuIE1ha2Ugc3VyZSB0aGUgdHlwZSBjYW4gYmUgcmVzb2x2ZWQuCi0KLSAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLSAgICAgICAgICBYU0RUeXBlRGVmaW5pdGlvbiBteVR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICAgICAgYXNzZXJ0RXF1YWxzKHNjaGVtYSwgbXlUeXBlLmdldENvbnRhaW5lcigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuYW1lLmVxdWFscygidGVzdFJlc3BvbnNlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgb25seSBvbmUgcGFydCBpbiB0aGUgbWVzc2FnZSBhbmQgaXQgcmVmZXJzIHRvIGFuCi0gICAgICAgICAgLy8gZWxlbWVudC4KLQotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KW1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotICAgICAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBteUVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgICAgIGFzc2VydEVxdWFscyhzY2hlbWEsIG15RWxlbWVudC5nZXRDb250YWluZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzM5NTMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5zUHJvcGVyUU5hbWVGb3JNSU1FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIE1JTUVGYWN0b3J5IGZhY3RvcnkgPSBNSU1FUGFja2FnZS5lSU5TVEFOQ0UuZ2V0TUlNRUZhY3RvcnkoKTsKLQotICAgIE1JTUVDb250ZW50IGNvbnRlbnQgPSBmYWN0b3J5LmNyZWF0ZU1JTUVDb250ZW50KCk7Ci0gICAgUU5hbWUgY29udGVudEVsZW1lbnRUeXBlID0gY29udGVudC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgY29udGVudEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHLCBjb250ZW50RWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgTUlNRU1pbWVYbWwgbWltZVhtbCA9IGZhY3RvcnkuY3JlYXRlTUlNRU1pbWVYbWwoKTsKLSAgICBRTmFtZSBtaW1lWG1sRWxlbWVudFR5cGUgPSBtaW1lWG1sLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBtaW1lWG1sRWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfWE1MX0VMRU1FTlRfVEFHLCBtaW1lWG1sRWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgTUlNRU11bHRpcGFydFJlbGF0ZWQgbXVsdGlwYXJ0UmVsYXRlZCA9IGZhY3RvcnkuY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLSAgICBRTmFtZSBtdWx0aXBhcnRSZWxhdGVkRWxlbWVudFR5cGUgPSBtdWx0aXBhcnRSZWxhdGVkLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBtdWx0aXBhcnRSZWxhdGVkRWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1VTFRJUEFSVF9SRUxBVEVEX0VMRU1FTlRfVEFHLCBtdWx0aXBhcnRSZWxhdGVkRWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgTUlNRVBhcnQgcGFydCA9IGZhY3RvcnkuY3JlYXRlTUlNRVBhcnQoKTsKLSAgICBRTmFtZSBwYXJ0RWxlbWVudFR5cGUgPSBwYXJ0LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBwYXJ0RWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcsIHBhcnRFbGVtZW50VHlwZS5nZXRMb2NhbFBhcnQoKSk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzcwNDAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQbGFjZXNJbXBvcnRzQWZ0ZXJUaGVEZWZpbml0aW9uRWxlbWVudCgpCi0gIHsKLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExGYWN0b3J5KCk7Ci0KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gInRlc3ROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShuYW1lc3BhY2UsICJ0ZXN0RGVmaW5pdGlvbiIpKTsgLy8kTk9OLU5MUy0xJCAgCi0gICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYWN0b3J5LmNyZWF0ZVNlcnZpY2UoKTsKLSAgICBzZXJ2aWNlLnNldFFOYW1lKG5ldyBRTmFtZShuYW1lc3BhY2UsICJ0ZXN0U2VydmljZSIpKTsgLy8kTk9OLU5MUy0xJAotICAgIGRlZmluaXRpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLQotICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gZmFjdG9yeS5jcmVhdGVJbXBvcnQoKTsKLSAgICBkZWZpbml0aW9uLmFkZEltcG9ydCh3c2RsSW1wb3J0KTsKLQotICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0KLSAgICBOb2RlTGlzdCBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgTm9kZSBmaXJzdENoaWxkID0gZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbi5pdGVtKDApOwotCi0gICAgYXNzZXJ0U2FtZShpbXBvcnRFbGVtZW50LCBmaXJzdENoaWxkKTsKLQotICAgIE5vZGUgc2Vjb25kQ2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMSk7Ci0KLSAgICBhc3NlcnRTYW1lKHNlcnZpY2VFbGVtZW50LCBzZWNvbmRDaGlsZCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzc4NjYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZlc0VsZW1lbnRJbkltcG9ydHMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL21haW4ud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSI7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVGhpcyB0ZXN0IGF0dGVtcHRzIHRvIGxvY2F0ZSBhIG1lc3NhZ2UgbG9jYXRlZCBpbiB0aGUgZmlyc3QgbGV2ZWwKLSAgICAgIC8vIGltcG9ydC4KLQotICAgICAgUU5hbWUgZmlyc3RMZXZlbE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0SU5QVVRtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBmaXJzdExldmVsTWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShmaXJzdExldmVsTWVzc2FnZVFOYW1lKTsKLQotICAgICAgYXNzZXJ0Tm90TnVsbChmaXJzdExldmVsTWVzc2FnZSk7Ci0KLSAgICAgIC8vIFRoaXMgdGVzdCBhdHRlbXB0cyB0byBsb2NhdGUgYSBtZXNzYWdlIGxvY2F0ZWQgaW4gdGhlIHNlY29uZCBsZXZlbAotICAgICAgLy8gaW1wb3J0LgotCi0gICAgICBRTmFtZSBzZWNvbmRMZXZlbE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0T1VUUFVUbWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2Ugc2Vjb25kTGV2ZWxNZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHNlY29uZExldmVsTWVzc2FnZVFOYW1lKTsKLQotICAgICAgYXNzZXJ0Tm90TnVsbChzZWNvbmRMZXZlbE1lc3NhZ2UpOwotCi0gICAgICAvLyBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHdlIGRvIGEgYnJlYWR0aCBmaXJzdCB0cmF2ZXJzYWwgdG8ga2VlcCB0aGluZ3MKLSAgICAgIC8vIHdvcmtpbmcgYXBwcm94aW1hdGl2ZWx5IGFzIHRoZSBvbGQgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlZCB0byBjaGVjawotICAgICAgLy8gb25seSB0aGUgZGVmaW5pdGlvbiBhbmQgaXRzIGZpcnN0IGxldmVsIGltcG9ydHMuIFRoZSBmaXJzdCBtZXNzYWdlIGlzCi0gICAgICAvLyBkZWZpbmVkIGluIGZpcnN0bGV2ZWwud3NkbCBhcyB3ZWxsIGFzIHNlY29uZGxldmVsLndzZGwgYnV0IHRoZQotICAgICAgLy8gYWxnb3JpdGhtIHNob3VsZCBmaW5kIHRoZSBvbmUgaW4gZmlyc3RsZXZlbC53c2RsLgotCi0gICAgICBJbXBvcnQgZmlyc3RMZXZlbEltcG9ydCA9IChJbXBvcnQpZGVmaW5pdGlvbi5nZXRJbXBvcnRzKHRhcmdldE5hbWVzcGFjZSkuZ2V0KDApOwotICAgICAgRGVmaW5pdGlvbiBmaXJzdExldmVsRGVmaW5pdGlvbiA9IGZpcnN0TGV2ZWxJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKGZpcnN0TGV2ZWxEZWZpbml0aW9uLCAoKE1lc3NhZ2UpZmlyc3RMZXZlbE1lc3NhZ2UpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEzNzk5MAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZXNQYXJ0c0luU09BUEJvZHkoKQotICB7Ci0gICAgLy8gQnVpbGQgYW4gaW4tbWVtb3J5IFdTREwgZGVmaW5pdGlvbi4KLQotICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0V1NETEZhY3RvcnkoKTsKLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAidGVzdE5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdERlZmluaXRpb24iKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgdGFyZ2V0TmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ4c2QiLCBYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOyAvLyROT04tTkxTLTEkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInNvYXAiLCBTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZhY3RvcnkuY3JlYXRlTWVzc2FnZSgpOwotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0TWVzc2FnZSIpOwotICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0KLSAgICBQYXJ0IHBhcnQxID0gZmFjdG9yeS5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIHBhcnQxTmFtZSA9ICJwYXJ0MSI7IC8vJE5PTi1OTFMtMSQgCi0gICAgcGFydDEuc2V0TmFtZShwYXJ0MU5hbWUpOwotICAgIHBhcnQxLnNldFR5cGVOYW1lKG5ldyBRTmFtZShYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBtZXNzYWdlLmFkZFBhcnQocGFydDEpOwotCi0gICAgUGFydCBwYXJ0MiA9IGZhY3RvcnkuY3JlYXRlUGFydCgpOwotICAgIFN0cmluZyBwYXJ0Mk5hbWUgPSAicGFydDIiOyAvLyROT04tTkxTLTEkIAotICAgIHBhcnQyLnNldE5hbWUocGFydDJOYW1lKTsKLSAgICBwYXJ0Mi5zZXRUeXBlTmFtZShuZXcgUU5hbWUoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIikpOyAvLyROT04tTkxTLTEkCi0gICAgbWVzc2FnZS5hZGRQYXJ0KHBhcnQyKTsKLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gZmFjdG9yeS5jcmVhdGVQb3J0VHlwZSgpOwotICAgIFFOYW1lIHBvcnRRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0UG9ydCIpOyAvLyROT04tTkxTLTEkCi0gICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFFOYW1lKTsKLSAgICBkZWZpbml0aW9uLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gInRlc3RPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkIAotICAgIG9wZXJhdGlvbi5zZXROYW1lKG9wZXJhdGlvbk5hbWUpOwotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pOwotCi0gICAgSW5wdXQgaW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInRlc3RCaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICBiaW5kaW5nLnNldFFOYW1lKGJpbmRpbmdRTmFtZSk7Ci0gICAgYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICBiaW5kaW5nLmFkZEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEZhY3RvcnkoKTsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLQotICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgLy8gVGVzdCB0aGUgIm5vIHBhcnRzIiBzY2VuYXJpby4gSW4gdGhpcyBjYXNlIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgc2hvdWxkIG5vdAotICAgIC8vIGJlIHByZXNlbnQuCi0KLSAgICBFbGVtZW50IHNvYXBCb2R5RWxlbWVudCA9IHNvYXBCb2R5LmdldEVsZW1lbnQoKTsKLSAgICBBdHRyIHBhcnRzQXR0cmlidXRlTm9kZSA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFKTsKLSAgICBhc3NlcnROdWxsKHBhcnRzQXR0cmlidXRlTm9kZSk7Ci0KLSAgICAvLyBUZXN0IHRoZSBzY2VuYXJpbyB3aGVuIHRoZSBib2R5IHNwZWNpZmllcyBvbmUgcGFydC4gSW4gdGhpcyBjYXNlIHRoZQotICAgIC8vIHBhcnRzIGF0dHJpYnV0ZQotICAgIC8vIHNob3VsZCBiZSBwcmVzZW50IGFuZCBsb29rIGxpa2UgdGhpcyBwYXJ0cz0icGFydDEiCi0KLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHBhcnRzLmFkZChwYXJ0MSk7Ci0gICAgc29hcEJvZHkuc2V0UGFydHMocGFydHMpOwotCi0gICAgc29hcEJvZHkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgc29hcEJvZHlFbGVtZW50ID0gc29hcEJvZHkuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBwYXJ0c0F0dHJpYnV0ZVZhbHVlID0gc29hcEJvZHlFbGVtZW50LmdldEF0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHBhcnQxTmFtZSwgcGFydHNBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICAvLyBUZXN0IHRoZSBzY2VuYXJpbyB3aGVuIHRoZSBib2R5IHNwZWNpZmllcyB0d28gcGFydHMuIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAvLyBzaG91bGQgYmUgcHJlc2VudCBhbmQgbG9vayBsaWtlIHRoaXMgcGFydHM9InBhcnQxIHBhcnQyIgotCi0gICAgcGFydHMuYWRkKHBhcnQyKTsKLSAgICBzb2FwQm9keS5zZXRQYXJ0cyhwYXJ0cyk7Ci0KLSAgICBzb2FwQm9keS51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBzb2FwQm9keUVsZW1lbnQgPSBzb2FwQm9keS5nZXRFbGVtZW50KCk7Ci0gICAgcGFydHNBdHRyaWJ1dGVWYWx1ZSA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5QQVJUU19BVFRSSUJVVEUpOwotICAgIGFzc2VydEVxdWFscyhwYXJ0MU5hbWUgKyAiICIgKyBwYXJ0Mk5hbWUsIHBhcnRzQXR0cmlidXRlVmFsdWUpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzgwMzMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVzSW1wb3J0c0JlZm9yZVR5cGVzKCkKLSAgewotICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0V1NETEZhY3RvcnkoKTsKLQotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAidGVzdE5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKG5hbWVzcGFjZSwgInRlc3REZWZpbml0aW9uIikpOyAvLyROT04tTkxTLTEkICAKLSAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIFR5cGVzIHR5cGVzID0gZmFjdG9yeS5jcmVhdGVUeXBlcygpOwotICAgIGRlZmluaXRpb24uc2V0VHlwZXModHlwZXMpOwotCi0gICAgSW1wb3J0IHdzZGxJbXBvcnQgPSBmYWN0b3J5LmNyZWF0ZUltcG9ydCgpOwotICAgIGRlZmluaXRpb24uYWRkSW1wb3J0KHdzZGxJbXBvcnQpOwotCi0gICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gdHlwZXMuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotCi0gICAgTm9kZUxpc3QgZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbiA9IGRlZmluaXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgwKTsKLQotICAgIGFzc2VydFNhbWUoaW1wb3J0RWxlbWVudCwgZmlyc3RDaGlsZCk7Ci0KLSAgICBOb2RlIHNlY29uZENoaWxkID0gZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbi5pdGVtKDEpOwotCi0gICAgYXNzZXJ0U2FtZSh0eXBlc0VsZW1lbnQsIHNlY29uZENoaWxkKTsKLQotICAgIC8vIEJsb3cgYXdheSB0aGUgYmFja2luZyBET00uCi0KLSAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQobnVsbCk7Ci0gICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIHR5cGVzRWxlbWVudCA9IHR5cGVzLmdldEVsZW1lbnQoKTsKLSAgICBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0KLSAgICBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZmlyc3RDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgwKTsKLQotICAgIGFzc2VydFNhbWUoaW1wb3J0RWxlbWVudCwgZmlyc3RDaGlsZCk7Ci0KLSAgICBzZWNvbmRDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgxKTsKLQotICAgIGFzc2VydFNhbWUodHlwZXNFbGVtZW50LCBzZWNvbmRDaGlsZCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0NTI2MwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlbW92ZU1lc3NhZ2UoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9hZCBhIHdzZGwgdGhhdCBpbXBvcnRzIGFub3RoZXIgd3NkbAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL1JlbW92ZVZpYVdTREw0Si53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIGltcG9ydGVkVGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHRvdGFsTWVzc2FnZXMgPSA1OwotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSB3c2RsIHdhcyBsb2FkZWQgcHJvcGVybHkKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBtZXNzYWdlcyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSkiLCB0b3RhbE1lc3NhZ2VzLCBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIG1lc3NhZ2VzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKSkiLCB0b3RhbE1lc3NhZ2VzLCBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IG1lc3NhZ2VFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuTUVTU0FHRV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgbWVzc2FnZXMgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxNZXNzYWdlcywgbWVzc2FnZUVsZW1lbnRzLmdldExlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgbWVzc2FnZSB3ZSdyZSBnb2luZyB0byByZW1vdmUgY3VycmVudGx5IGV4aXN0cwotICAgICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIlJlbW92ZVZpYVdTREw0Sk1lc3NhZ2VFeHRyYSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2UgbWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5hYmxlIHRvIGZpbmQgUmVtb3ZlVmlhV1NETDRKTWVzc2FnZUV4dHJhIiwgbWVzc2FnZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gcmVtb3ZlIHRoZSBtZXNzYWdlCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2UgcmVtb3ZlZE1lc3NhZ2UgPSBkZWZpbml0aW9uLnJlbW92ZU1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydEVxdWFscygiSW5jb3JyZWN0IG1lc3NhZ2UgcmVtb3ZlZCIsIG1lc3NhZ2UsIHJlbW92ZWRNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgbWVzc2FnZSBpcyBnb25lCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2Ugbm9uZXhpc3RNZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJSZW1vdmVWaWFXU0RMNEpNZXNzYWdlRXh0cmEgc3RpbGwgZXhpc3RzIGluIG1vZGVsIiwgbm9uZXhpc3RNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgbm93IDEgbGVzcyBtZXNzYWdlCi0gICAgICBhc3NlcnRFcXVhbHMoIk1lc3NhZ2Ugd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkpIiwgdG90YWxNZXNzYWdlcy0xLCBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJNZXNzYWdlIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKSkiLCB0b3RhbE1lc3NhZ2VzLTEsIGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIG1lc3NhZ2VFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuTUVTU0FHRV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIk1lc3NhZ2Ugd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxNZXNzYWdlcy0xLCBtZXNzYWdlRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBpbXBvcnRlZCBtZXNzYWdlIHdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBjdXJyZW50bHkgZXhpc3RzCi0gICAgICBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUoaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UsICJJbXBvcnRNZU1lc3NhZ2VFeHRyYSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBtZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmFibGUgdG8gZmluZCBJbXBvcnRNZU1lc3NhZ2VFeHRyYSIsIG1lc3NhZ2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIGF0dGVtcHQgdG8gcmVtb3ZlIHRoZSBpbXBvcnRlZCBtZXNzYWdlCi0gICAgICByZW1vdmVkTWVzc2FnZSA9IGRlZmluaXRpb24ucmVtb3ZlTWVzc2FnZShtZXNzYWdlUU5hbWUpOwotICAgICAgYXNzZXJ0TnVsbCgiSW1wb3J0TWVNZXNzYWdlRXh0cmEgd2FzIGluY29ycmVjdGx5IHJlbW92ZWQiLCByZW1vdmVkTWVzc2FnZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGltcG9ydGVkIG1lc3NhZ2Ugc3RpbGwgZXhpc3RzCi0gICAgICBtZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJJbXBvcnRNZU1lc3NhZ2VFeHRyYSBubyBsb25nZXIgZXhpc3RzIiwgbWVzc2FnZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgbm9uZXhpc3RNZXNzYWdlID0gZGVmaW5pdGlvbi5yZW1vdmVNZXNzYWdlKG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJkb2VzbnRleGlzdCIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0TnVsbCgiQSBub24tZXhpc3RpbmcgbWVzc2FnZSB3YXMgcmVtb3ZlZCIsIG5vbmV4aXN0TWVzc2FnZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDUyNjMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVTZXJ2aWNlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIGxvYWQgYSB3c2RsIHRoYXQgaW1wb3J0cyBhbm90aGVyIHdzZGwKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1dTREw0SlJlbW92ZS9SZW1vdmVWaWFXU0RMNEoud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIFN0cmluZyBpbXBvcnRlZFRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lLyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGludCB0b3RhbFNlcnZpY2VzID0gMjsKLSAgICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgd3NkbCB3YXMgbG9hZGVkIHByb3Blcmx5Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgc2VydmljZXMgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkpIiwgdG90YWxTZXJ2aWNlcywgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBzZXJ2aWNlcyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkpIiwgdG90YWxTZXJ2aWNlcywgZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBzZXJ2aWNlRWxlbWVudHMgPSBkZWZpbml0aW9uRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCBXU0RMQ29uc3RhbnRzLlNFUlZJQ0VfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIHNlcnZpY2VzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgRE9NKSIsIHRvdGFsU2VydmljZXMsIHNlcnZpY2VFbGVtZW50cy5nZXRMZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIHNlcnZpY2Ugd2UncmUgZ29pbmcgdG8gcmVtb3ZlIGN1cnJlbnRseSBleGlzdHMKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJNYWluU2VydmljZUV4dHJhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuU2VydmljZSBzZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmFibGUgdG8gZmluZCBNYWluU2VydmljZUV4dHJhIiwgc2VydmljZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gcmVtb3ZlIHRoZSBzZXJ2aWNlCi0gICAgICBqYXZheC53c2RsLlNlcnZpY2UgcmVtb3ZlZFNlcnZpY2UgPSBkZWZpbml0aW9uLnJlbW92ZVNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICAgIGFzc2VydEVxdWFscygiSW5jb3JyZWN0IHNlcnZpY2UgcmVtb3ZlZCIsIHNlcnZpY2UsIHJlbW92ZWRTZXJ2aWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgc2VydmljZSBpcyBnb25lCi0gICAgICBqYXZheC53c2RsLlNlcnZpY2Ugbm9uZXhpc3RTZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJNYWluU2VydmljZUV4dHJhIHN0aWxsIGV4aXN0cyBpbiBtb2RlbCIsIG5vbmV4aXN0U2VydmljZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vdyAxIGxlc3Mgc2VydmljZQotICAgICAgYXNzZXJ0RXF1YWxzKCJTZXJ2aWNlIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpKSIsIHRvdGFsU2VydmljZXMtMSwgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGFzc2VydEVxdWFscygiU2VydmljZSB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkpIiwgdG90YWxTZXJ2aWNlcy0xLCBkZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBzZXJ2aWNlRWxlbWVudHMgPSBkZWZpbml0aW9uRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCBXU0RMQ29uc3RhbnRzLlNFUlZJQ0VfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJTZXJ2aWNlIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgRE9NKSIsIHRvdGFsU2VydmljZXMtMSwgc2VydmljZUVsZW1lbnRzLmdldExlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgaW1wb3J0ZWQgc2VydmljZSB3ZSdyZSBnb2luZyB0byByZW1vdmUgY3VycmVudGx5IGV4aXN0cwotICAgICAgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKGltcG9ydGVkVGFyZ2V0TmFtZXNwYWNlLCAiSW1wb3J0U2VydmljZUV4dHJhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVuYWJsZSB0byBmaW5kIEltcG9ydFNlcnZpY2VFeHRyYSIsIHNlcnZpY2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIGF0dGVtcHQgdG8gcmVtb3ZlIHRoZSBpbXBvcnRlZCBzZXJ2aWNlCi0gICAgICByZW1vdmVkU2VydmljZSA9IGRlZmluaXRpb24ucmVtb3ZlU2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgYXNzZXJ0TnVsbCgiSW1wb3J0U2VydmljZUV4dHJhIHdhcyBpbmNvcnJlY3RseSByZW1vdmVkIiwgcmVtb3ZlZFNlcnZpY2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBpbXBvcnRlZCBzZXJ2aWNlIHN0aWxsIGV4aXN0cwotICAgICAgc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiSW1wb3J0U2VydmljZUV4dHJhIG5vIGxvbmdlciBleGlzdHMiLCBzZXJ2aWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBub25leGlzdFNlcnZpY2UgPSBkZWZpbml0aW9uLnJlbW92ZVNlcnZpY2UobmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgImRvZXNudGV4aXN0IikpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnROdWxsKCJBIG5vbi1leGlzdGluZyBzZXJ2aWNlIHdhcyByZW1vdmVkIiwgbm9uZXhpc3RTZXJ2aWNlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0NTI2MwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUJpbmRpbmcoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9hZCBhIHdzZGwgdGhhdCBpbXBvcnRzIGFub3RoZXIgd3NkbAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL1JlbW92ZVZpYVdTREw0Si53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIGltcG9ydGVkVGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHRvdGFsQmluZGluZ3MgPSAyOwotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSB3c2RsIHdhcyBsb2FkZWQgcHJvcGVybHkKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBiaW5kaW5ncyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKSkiLCB0b3RhbEJpbmRpbmdzLCBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIGJpbmRpbmdzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKSkiLCB0b3RhbEJpbmRpbmdzLCBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IGJpbmRpbmdFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgYmluZGluZ3Mgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxCaW5kaW5ncywgYmluZGluZ0VsZW1lbnRzLmdldExlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgYmluZGluZyB3ZSdyZSBnb2luZyB0byByZW1vdmUgY3VycmVudGx5IGV4aXN0cwotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIk1haW5CaW5kaW5nRXh0cmEiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcgPSBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVuYWJsZSB0byBmaW5kIE1haW5CaW5kaW5nRXh0cmEiLCBiaW5kaW5nKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyByZW1vdmUgdGhlIGJpbmRpbmcKLSAgICAgIGphdmF4LndzZGwuQmluZGluZyByZW1vdmVkQmluZGluZyA9IGRlZmluaXRpb24ucmVtb3ZlQmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgYmluZGluZyByZW1vdmVkIiwgYmluZGluZywgcmVtb3ZlZEJpbmRpbmcpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBiaW5kaW5nIGlzIGdvbmUKLSAgICAgIGphdmF4LndzZGwuQmluZGluZyBub25leGlzdEJpbmRpbmcgPSBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICAgIGFzc2VydE51bGwoIk1haW5CaW5kaW5nRXh0cmEgc3RpbGwgZXhpc3RzIGluIG1vZGVsIiwgbm9uZXhpc3RCaW5kaW5nKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgbm93IDEgbGVzcyBiaW5kaW5nCi0gICAgICBhc3NlcnRFcXVhbHMoIkJpbmRpbmcgd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkpIiwgdG90YWxCaW5kaW5ncy0xLCBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJCaW5kaW5nIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKSkiLCB0b3RhbEJpbmRpbmdzLTEsIGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIGJpbmRpbmdFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkJpbmRpbmcgd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxCaW5kaW5ncy0xLCBiaW5kaW5nRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBpbXBvcnRlZCBiaW5kaW5nIHdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBjdXJyZW50bHkgZXhpc3RzCi0gICAgICBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUoaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UsICJJbXBvcnRCaW5kaW5nRXh0cmEiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYmluZGluZyA9IGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5hYmxlIHRvIGZpbmQgSW1wb3J0QmluZGluZ0V4dHJhIiwgYmluZGluZyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gYXR0ZW1wdCB0byByZW1vdmUgdGhlIGltcG9ydGVkIGJpbmRpbmcKLSAgICAgIHJlbW92ZWRCaW5kaW5nID0gZGVmaW5pdGlvbi5yZW1vdmVCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJJbXBvcnRCaW5kaW5nRXh0cmEgd2FzIGluY29ycmVjdGx5IHJlbW92ZWQiLCByZW1vdmVkQmluZGluZyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGltcG9ydGVkIGJpbmRpbmcgc3RpbGwgZXhpc3RzCi0gICAgICBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJJbXBvcnRCaW5kaW5nRXh0cmEgbm8gbG9uZ2VyIGV4aXN0cyIsIGJpbmRpbmcpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG5vbmV4aXN0QmluZGluZyA9IGRlZmluaXRpb24ucmVtb3ZlQmluZGluZyhuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiZG9lc250ZXhpc3QiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGFzc2VydE51bGwoIkEgbm9uLWV4aXN0aW5nIGJpbmRpbmcgd2FzIHJlbW92ZWQiLCBub25leGlzdEJpbmRpbmcpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0gICAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1MjYzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlUG9ydFR5cGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9hZCBhIHdzZGwgdGhhdCBpbXBvcnRzIGFub3RoZXIgd3NkbAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL1JlbW92ZVZpYVdTREw0Si53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIGltcG9ydGVkVGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHRvdGFsUG9ydFR5cGVzID0gMjsKLSAgICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgd3NkbCB3YXMgbG9hZGVkIHByb3Blcmx5Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgcG9ydCB0eXBlcyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkpIiwgdG90YWxQb3J0VHlwZXMsIGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIHBvcnQgdHlwZXMgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKSkiLCB0b3RhbFBvcnRUeXBlcywgZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgTm9kZUxpc3QgcG9ydFR5cGVFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuUE9SVF9UWVBFX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBwb3J0IHR5cGVzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgRE9NKSIsIHRvdGFsUG9ydFR5cGVzLCBwb3J0VHlwZUVsZW1lbnRzLmdldExlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgcG9ydCB0eXBlIHdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBjdXJyZW50bHkgZXhpc3RzCi0gICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIk1haW5Qb3J0VHlwZUV4dHJhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuUG9ydFR5cGUgcG9ydFR5cGUgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5hYmxlIHRvIGZpbmQgTWFpblBvcnRUeXBlRXh0cmEiLCBwb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gcmVtb3ZlIHRoZSBwb3J0VHlwZQotICAgICAgamF2YXgud3NkbC5Qb3J0VHlwZSByZW1vdmVkUG9ydFR5cGUgPSBkZWZpbml0aW9uLnJlbW92ZVBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgcG9ydFR5cGUgcmVtb3ZlZCIsIHBvcnRUeXBlLCByZW1vdmVkUG9ydFR5cGUpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBwb3J0VHlwZSBpcyBnb25lCi0gICAgICBqYXZheC53c2RsLlBvcnRUeXBlIG5vbmV4aXN0UG9ydFR5cGUgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0TnVsbCgiTWFpblBvcnRUeXBlRXh0cmEgc3RpbGwgZXhpc3RzIGluIG1vZGVsIiwgbm9uZXhpc3RQb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vdyAxIGxlc3MgcG9ydFR5cGUKLSAgICAgIGFzc2VydEVxdWFscygiUG9ydFR5cGUgd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldFBvcnRUeXBlcygpKSIsIHRvdGFsUG9ydFR5cGVzLTEsIGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJQb3J0VHlwZSB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpKSIsIHRvdGFsUG9ydFR5cGVzLTEsIGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBwb3J0VHlwZUVsZW1lbnRzID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgV1NETENvbnN0YW50cy5QT1JUX1RZUEVfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJQb3J0VHlwZSB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIERPTSkiLCB0b3RhbFBvcnRUeXBlcy0xLCBwb3J0VHlwZUVsZW1lbnRzLmdldExlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgaW1wb3J0ZWQgcG9ydFR5cGUgd2UncmUgZ29pbmcgdG8gcmVtb3ZlIGN1cnJlbnRseSBleGlzdHMKLSAgICAgIHBvcnRUeXBlUU5hbWUgPSBuZXcgUU5hbWUoaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UsICJJbXBvcnRQb3J0VHlwZUV4dHJhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHBvcnRUeXBlID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShwb3J0VHlwZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVuYWJsZSB0byBmaW5kIEltcG9ydFBvcnRUeXBlRXh0cmEiLCBwb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gYXR0ZW1wdCB0byByZW1vdmUgdGhlIGltcG9ydGVkIHBvcnRUeXBlCi0gICAgICByZW1vdmVkUG9ydFR5cGUgPSBkZWZpbml0aW9uLnJlbW92ZVBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0TnVsbCgiSW1wb3J0UG9ydFR5cGVFeHRyYSB3YXMgaW5jb3JyZWN0bHkgcmVtb3ZlZCIsIHJlbW92ZWRQb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGltcG9ydGVkIHBvcnRUeXBlIHN0aWxsIGV4aXN0cwotICAgICAgcG9ydFR5cGUgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiSW1wb3J0UG9ydFR5cGVFeHRyYSBubyBsb25nZXIgZXhpc3RzIiwgcG9ydFR5cGUpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG5vbmV4aXN0UG9ydFR5cGUgPSBkZWZpbml0aW9uLnJlbW92ZVBvcnRUeXBlKG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJkb2VzbnRleGlzdCIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0TnVsbCgiQSBub24tZXhpc3RpbmcgcG9ydFR5cGUgd2FzIHJlbW92ZWQiLCBub25leGlzdFBvcnRUeXBlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE1MDU1MwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFN1cHBvcnRzTG9jYWxOYW1lc3BhY2VQcmVmaXhlcygpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlLndzZGwiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly90ZW1wdXJpLm9yZy9TaW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgcmVzcG9uc2UgbWVzc2FnZSdzIHBhcnQgZWxlbWVudCBpcyByZXNvbHZlZCBPSy4KLQotICAgIFFOYW1lIHJlc3BvbnNlTWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIm15T3BlcmF0aW9uUmVzcG9uc2UiKTsgLy8vLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5NZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShyZXNwb25zZU1lc3NhZ2VRTmFtZSk7Ci0KLSAgICBQYXJ0IHJlc3BvbnNlUGFydCA9IChQYXJ0KXJlc3BvbnNlTWVzc2FnZS5nZXRQYXJ0KCJteU9wZXJhdGlvblJlc3BvbnNlIik7IC8vLy8kTk9OLU5MUy0xJAotCi0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uID0gcmVzcG9uc2VQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZUVsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZUVsZW1lbnREZWNsYXJhdGlvbi5nZXRDb250YWluZXIoKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSByZXF1ZXN0IG1lc3NhZ2UncyBwYXJ0IGVsZW1lbnQgaXMgcmVzb2x2ZWQgT0suCi0gICAgLy8gVGhpcyBwYXJ0IGRlZmluZXMgYSBsb2NhbCBuYW1lc3BhY2UgcHJlZml4Ci0KLSAgICBRTmFtZSByZXF1ZXN0TWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIm15T3BlcmF0aW9uUmVxdWVzdCIpOyAvLy8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLk1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UocmVxdWVzdE1lc3NhZ2VRTmFtZSk7Ci0KLSAgICBQYXJ0IHJlcXVlc3RQYXJ0ID0gKFBhcnQpcmVxdWVzdE1lc3NhZ2UuZ2V0UGFydCgibXlPcGVyYXRpb25SZXF1ZXN0Iik7IC8vLy8kTk9OLU5MUy0xJAotCi0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlcXVlc3RFbGVtZW50RGVjbGFyYXRpb24gPSByZXF1ZXN0UGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQotICAgIGFzc2VydE5vdE51bGwocmVxdWVzdEVsZW1lbnREZWNsYXJhdGlvbik7Ci0KLSAgICAvLyBOb3cgdG8gbWFrZSBzdXJlIHRoZSBET00gaXMgcmVjb25jaWxlZCBwcm9wZXJseSBhbmQgdXNlcyB0aGUgbG9jYWwgbmFtZXNwYWNlIHByZWZpeCwgCi0gICAgLy8gbGV0J3MgdHJ5IHRvIGNoYW5nZSB0aGUgcGFydCdzIGVsZW1lbnQgZGVjbGFyYXRpb24uIFdlJ2xsIHVzZSB0aGUgcmVzcG9uc2UgcGFydCBlbGVtZW50Ci0gICAgLy8ganVzdCBiZWNhdXNlIGl0IGlzIGNvbnZlbmllbnQuCi0KLSAgICByZXF1ZXN0UGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24pOwotCi0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IHJlcXVlc3RQYXJ0LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgZWxlbWVudEF0dHJpYnV0ZVZhbHVlID0gcGFydEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSwgInBhcnR0bnM6IiArIHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTcxMDcKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUb2xsZXJhdGVzRXh0ZW5zaW9uRWxlbWVudHNGb3JPcGVyYXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9PcGVyYXRpb25TdHlsZS9PcGVyYXRpb25TdHlsZVRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKWRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLmdldCgwKTsKLSAgICBFTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnMuZ2V0KDApOwotICAgIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IG9wZXJhdGlvbi5nZXRTdHlsZSgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSwgb3BlcmF0aW9uVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNjQ1NjUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWNvbmNpbGVzQmluZGluZ0ZhdWx0cygpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgLy8gVGVzdCB0aGUgYWJub3JtYWwgY2FzZSB3aGVuIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiB0cmllcyB0byBiaW5kIGEgZmF1bHQKLSAgICAvLyBidXQgdGhlIGZhdWx0IGlzIG1pc3NpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UgdGhlCi0gICAgLy8gZmF1bHQgb2J0YWluZWQgZnJvbSB0aGUgYmluZGluZyBvcGVyYXRpb24ncyBmYXVsdCBzaG91bGQgYmUgbnVsbC4KLQotICAgIExpc3QgYmluZGluZ3MgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWJpbmRpbmdzLmdldCgwKTsKLSAgICBMaXN0IGJpbmRpbmdPcGVyYXRpb25zID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWJpbmRpbmdPcGVyYXRpb25zLmdldCgwKTsKLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdCgiT3BlcmF0aW9uMUZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBGYXVsdCBmYXVsdCA9IGJpbmRpbmdGYXVsdC5nZXRFRmF1bHQoKTsKLSAgICBhc3NlcnROdWxsKGZhdWx0KTsKLQotICAgIC8vIFRlc3QgdGhlIG5vcm1hbCBjYXNlIHdoZW4gdGhlIG9wZXJhdGlvbiBhbmQgYmluZGluZyBvcGVyYXRpb24gYXJlIGluCi0gICAgLy8gc3luY2guIEluIHRoaXMgY2FzZSB0aGUgZmF1bHQgZGVmaW5lZCBpbiB0aGUgb3BlcmF0aW9uIHNob3VsZCBtYXRjaAotICAgIC8vIHRoZSBvbmUgb2J0YWluZWQgZnJvbSB0aGUgYmluZGluZyBvcGVyYXRpb24ncyBmYXVsdC4KLQotICAgIExpc3QgcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpcG9ydFR5cGVzLmdldCgwKTsKLSAgICBFTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnMuZ2V0KDEpOwotICAgIGphdmF4LndzZGwuRmF1bHQgZXhwZWN0ZWRGYXVsdDEgPSBvcGVyYXRpb24uZ2V0RmF1bHQoIk9wZXJhdGlvbjJGYXVsdDEiKTsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuRmF1bHQgZXhwZWN0ZWRGYXVsdDIgPSBvcGVyYXRpb24uZ2V0RmF1bHQoIk9wZXJhdGlvbjJGYXVsdDIiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uMiA9IChCaW5kaW5nT3BlcmF0aW9uKWJpbmRpbmdPcGVyYXRpb25zLmdldCgxKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmF1bHQgb2J0YWluZWQgZnJvbSB0aGUgYmluZGluZyBmYXVsdCBpcyBub3QgbnVsbCBhbmQKLSAgICAvLyBtYXRjaGVzIHRoZSBvbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uLgotCi0gICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdDEgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24yLmdldEJpbmRpbmdGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MSIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5GYXVsdCBhY3R1YWxGYXVsdDEgPSBiaW5kaW5nRmF1bHQxLmdldEVGYXVsdCgpOwotICAgIGFzc2VydE5vdE51bGwoYWN0dWFsRmF1bHQxKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRGYXVsdDEsIGFjdHVhbEZhdWx0MSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGZhdWx0IG9idGFpbmVkIGZyb20gdGhlIGJpbmRpbmcgZmF1bHQgaXMgbm90IG51bGwgYW5kCi0gICAgLy8gbWF0Y2hlcyB0aGUgb25lIGluIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbi4KLQotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQyID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nT3BlcmF0aW9uMi5nZXRCaW5kaW5nRmF1bHQoIk9wZXJhdGlvbjJGYXVsdDIiKTsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuRmF1bHQgYWN0dWFsRmF1bHQyID0gYmluZGluZ0ZhdWx0Mi5nZXRFRmF1bHQoKTsKLSAgICBhc3NlcnROb3ROdWxsKGFjdHVhbEZhdWx0Mik7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRmF1bHQyLCBhY3R1YWxGYXVsdDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMDU5Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QXZvaWREdXBsaWNhdGVTQVhFeGNlcHRpb25EaWFnbm9zdGljcygpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTWFrZSBzdXJlIHdlIHRyYWNrIGxvY2F0aW9uIHRvIGFsbG93IHRoZSBXU0RMUGFyc2VyIHRvIGtpY2sgaW4uCi0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwiLCB0cnVlLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZSByZXNvdXJjZSA9IGRlZmluaXRpb24uZVJlc291cmNlKCk7Ci0gICAgRUxpc3QgZXJyb3JzID0gcmVzb3VyY2UuZ2V0RXJyb3JzKCk7Ci0gICAgaW50IGV4cGVjdGVkU2l6ZSA9IDE7Ci0gICAgaW50IGFjdHVhbFNpemUgPSBlcnJvcnMuc2l6ZSgpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFNpemUsIGFjdHVhbFNpemUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNTc2Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRICi0gICAgICAgICsgInNhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iOyAvLyROT04tTkxTLTEkCi0gICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuUG9ydFR5cGUgcG9ydFR5cGUgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgU3RyaW5nIGlucHV0M05hbWUgPSAiSW5wdXQzIjsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBvdXRwdXQzTmFtZSA9ICJPdXRwdXQzIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZmlyc3Qgb3BlcmF0aW9uIC0gd2hpY2ggaGFzIG5vIG5hbWVkIGlucHV0L291dHB1dCBpcyBiZWluZwotICAgIC8vIGZvdW5kLgotCi0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIG9wZXJhdGlvbjEgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb24ob3BlcmF0aW9uTmFtZSwgbnVsbCwgbnVsbCk7Ci0KLSAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uU09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcgPSBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uMSA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb25OYW1lLCBudWxsLCBudWxsKTsKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBhY3R1YWxPcGVyYXRpb24xID0gYmluZGluZ09wZXJhdGlvbjEuZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9uMSwgYWN0dWFsT3BlcmF0aW9uMSk7Ci0KLSAgICAvLyBUaGUgc2Vjb25kIG9wZXJhdGlvbiAtIHdoaWNoIGhhcyBubyBuYW1lZCBpbnB1dC9vdXRwdXQgaXMgYmVpbmcgZm91bmQKLSAgICAvLyBzaG91bGQgbm90IGJlIHJlY29uY2lsZWQgYmVjYXVzZSB0aGUgYmluZGluZyBzcGVjaWZpZXMgdGhlIGlucHV0IGFuZAotICAgIC8vIG91dHB1dC4KLQotICAgIFN0cmluZyBpbnB1dDJOYW1lID0gIklucHV0MiI7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgb3V0cHV0Mk5hbWUgPSAiT3V0cHV0MiI7IC8vJE5PTi1OTFMtMSQKLQotICAgIFN0cmluZyBvcGVyYXRpb24yTmFtZSA9ICJOZXdPcGVyYXRpb24yIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbjJOYW1lLCBpbnB1dDJOYW1lLCBvdXRwdXQyTmFtZSk7Ci0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gYWN0dWFsT3BlcmF0aW9uMiA9IGJpbmRpbmdPcGVyYXRpb24yLmdldE9wZXJhdGlvbigpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG51bGwsIGFjdHVhbE9wZXJhdGlvbjIpOwotCi0gICAgLy8gVGhlIHRoaXJkIG9wZXJhdGlvbiBzcGVjaWZpZXMgYW4gaW5wdXQgYW5kIG91dHB1dCBuYW1lLCBhbmQgdGhlIGJpbmRpbmcKLSAgICAvLyBvcGVyYXRpb24gd2lsbCByZWNvbmNpbGUgZmluZSBiZWNhdXNlIHRoZSBpdCBhbHNvIHNwZWNpZmllcyB0aGUgcHJvcGVyCi0gICAgLy8gaW5wdXQgYW5kIG91dHB1dCBuYW1lLgotCi0gICAgU3RyaW5nIG9wZXJhdGlvbjNOYW1lID0gIk5ld09wZXJhdGlvbjMiOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gb3BlcmF0aW9uMyA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbihvcGVyYXRpb24zTmFtZSwgaW5wdXQzTmFtZSwgb3V0cHV0M05hbWUpOwotCi0gICAgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24zID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbjNOYW1lLCBpbnB1dDNOYW1lLCBvdXRwdXQzTmFtZSk7Ci0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gYWN0dWFsT3BlcmF0aW9uMyA9IGJpbmRpbmdPcGVyYXRpb24zLmdldE9wZXJhdGlvbigpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG9wZXJhdGlvbjMsIGFjdHVhbE9wZXJhdGlvbjMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc3ODUyCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5KCkKLSAgewotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2lvbnMvIjsgLy8kTk9OLU5MUy0xJCAKLSAgICBFTGlzdCBpbXBvcnRzID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpOwotICAgIGFzc2VydEZhbHNlKGltcG9ydHMuaXNFbXB0eSgpKTsKLSAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpbXBvcnRzLmdldCgwKTsKLSAgICBjaGVja0V4dGVuc2lvbih0aGVJbXBvcnQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJpbXBvcnQiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRUxpc3QgbWVzc2FnZXMgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2VzLmlzRW1wdHkoKSk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpbWVzc2FnZXMuZ2V0KDApOwotICAgIGNoZWNrRXh0ZW5zaW9uKG1lc3NhZ2UsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIFBhcnQgcGFydCA9IChQYXJ0KW1lc3NhZ2UuZ2V0UGFydCgiZXh0ZW5kZWRQYXJ0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKHBhcnQpOwotICAgIGNoZWNrRXh0ZW5zaW9uKHBhcnQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJwYXJ0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgIEVMaXN0IHBvcnRUeXBlcyA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpOwotICAgIGFzc2VydEZhbHNlKHBvcnRUeXBlcy5pc0VtcHR5KCkpOwotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKXBvcnRUeXBlcy5nZXQoMCk7Ci0gICAgY2hlY2tFeHRlbnNpb24ocG9ydFR5cGUsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJwb3J0VHlwZSIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilwb3J0VHlwZS5nZXRPcGVyYXRpb24oImV4dGVuZGVkT3BlcmF0aW9uIiwgbnVsbCwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKG9wZXJhdGlvbik7Ci0gICAgY2hlY2tFeHRlbnNpb24ob3BlcmF0aW9uLCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAib3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIGFzc2VydE5vdE51bGwoaW5wdXQpOwotICAgIGNoZWNrRXh0ZW5zaW9uKGlucHV0LCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAiaW5wdXQiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQpOwotICAgIGNoZWNrRXh0ZW5zaW9uKG91dHB1dCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgIm91dHB1dCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClvcGVyYXRpb24uZ2V0RmF1bHQoImV4dGVuZGVkRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwoZmF1bHQpOwotICAgIGNoZWNrRXh0ZW5zaW9uKGZhdWx0LCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAiZmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB0aGUgZ2l2ZW4gZXh0ZW5zaWJsZSBlbGVtZW50IHRvIG1ha2Ugc3VyZSB0aGF0IGl0cyBhc3N1bWVkIG9uZSBhbmQgb25seSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgbWF0Y2hlcyB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBsb2NhbCBuYW1lLgotICAgKiBAcGFyYW0gZXh0ZW5zaWJsZUVsZW1lbnQgdGhlIGV4dGVuc2libGUgZWxlbWVudCB0byB0ZXN0LgotICAgKiBAcGFyYW0gZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSB0aGUgZXhwZWN0ZWQgbmFtZXNwYWNlIFVSSS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBleHBlY3RlZCBlbGVtZW50IG5hbWUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tFeHRlbnNpb24oRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQsIFN0cmluZyBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCBTdHJpbmcgZWxlbWVudE5hbWUpCi0gIHsKLSAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGV4dGVuc2libGVFbGVtZW50LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGFzc2VydEZhbHNlKGV4dGVuc2liaWxpdHlFbGVtZW50cy5pc0VtcHR5KCkpOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgUU5hbWUgZWxlbWVudFR5cGUgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpOwotICAgIFN0cmluZyBuc1VSSSA9IGVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgIFN0cmluZyBsb2NhbFBhcnQgPSBlbGVtZW50VHlwZS5nZXRMb2NhbFBhcnQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgbnNVUkkpOwotICAgIGFzc2VydEVxdWFscyhsb2NhbFBhcnQsIGVsZW1lbnROYW1lKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MzYxCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHlwZXNFeHRlbnNpYmlsaXR5KCkKLSAgewotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9UeXBlc0V4dGVuc2liaWxpdHkvVHlwZXNFeHRlbnNpYmlsaXR5LndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgIAotICAgIFN0cmluZyBvdGhlclR5cGVzTmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvT3RoZXJUeXBlcy8iOyAvLyROT04tTkxTLTEkCi0KLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotICAgIFFOYW1lIGVsZW1lbnRUeXBlID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICBhc3NlcnRFcXVhbHMob3RoZXJUeXBlc05hbWVzcGFjZSwgZWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscygidHlwZURlZiIsIGVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0U2NoZW1hcygpOwotICAgIGFzc2VydEVxdWFscygxLCBzY2hlbWFzLnNpemUoKSk7Ci0gICAgCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgxKTsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gc2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChzY2hlbWEpOwotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbGFyYXRpb24gPSBzY2hlbWEucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbigidGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50RGVjbGFyYXRpb24pOwotICAgIGFzc2VydE5vdE51bGwoZWxlbWVudERlY2xhcmF0aW9uLmdldENvbnRhaW5lcigpKTsgICAgCi0gICAgCi0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgyKTsKLSAgICBlbGVtZW50VHlwZSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG90aGVyVHlwZXNOYW1lc3BhY2UsIGVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGVEZWYiLCBlbGVtZW50VHlwZS5nZXRMb2NhbFBhcnQoKSk7IC8vJE5PTi1OTFMtMSQgICAgCi0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzg1NTUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbGxvd051bGxOYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSI7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIFRoZSBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciB0aGUgb3V0cHV0IG1lc3NhZ2UgcGFydCBpcyBzcGVjaWZpZWQgaW4gYQotICAgIC8vIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuIEl0IHNob3VsZCByZXNvbHZlIGZpbmUgYW5kIGhhdmUgYSBudWxsCi0gICAgLy8gbmFtZXNwYWNlIFVSSS4KLQotICAgIFFOYW1lIG91dHB1dDFRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ1cGRhdGVQaG9uZU51bWJlclJlc3BvbnNlTXNnIik7IC8vJE5PTi1OTFMtMSQKLSAgICBNZXNzYWdlIG91dHB1dDFNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG91dHB1dDFRTmFtZSk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQxTWVzc2FnZSk7Ci0KLSAgICBQYXJ0IHBhcnQxID0gKFBhcnQpb3V0cHV0MU1lc3NhZ2UuZ2V0UGFydCgib3V0cHV0MSIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChwYXJ0MSk7Ci0KLSAgICBRTmFtZSBvdXRwdXQyRWxlbWVudE5hbWUgPSBwYXJ0MS5nZXRFbGVtZW50TmFtZSgpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MkVsZW1lbnROYW1lKTsKLSAgICBhc3NlcnRFcXVhbHMoWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLCBvdXRwdXQyRWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIG91dHB1dDJFbGVtZW50RGVjbGFyYXRpb24gPSBwYXJ0MS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJFbGVtZW50RGVjbGFyYXRpb24pOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbi5nZXRDb250YWluZXIoKSk7Ci0gICAgYXNzZXJ0TnVsbChvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQotICAgIC8vIFRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBvdXRwdXQgbWVzc2FnZSBwYXJ0IGlzIHNwZWNpZmllZCBpbiBhCi0gICAgLy8gc2NoZW1hIHdpdGggbm8gdGFyZ2V0IG5hbWVzcGFjZS4gSXQgc2hvdWxkIHJlc29sdmUgZmluZSBhbmQgaGF2ZSBhIG51bGwKLSAgICAvLyBuYW1lc3BhY2UgVVJJLgotCi0gICAgUU5hbWUgb3V0cHV0MlFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInVwZGF0ZUFkZHJlc3NSZXNwb25zZU1zZyIpOyAvLyROT04tTkxTLTEkCi0gICAgTWVzc2FnZSBvdXRwdXQyTWVzc2FnZSA9IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZShvdXRwdXQyUU5hbWUpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0Mk1lc3NhZ2UpOwotCi0gICAgUGFydCBwYXJ0MiA9IChQYXJ0KW91dHB1dDJNZXNzYWdlLmdldFBhcnQoIm91dHB1dDIiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwocGFydDEpOwotCi0gICAgUU5hbWUgb3V0cHV0MlR5cGVOYW1lID0gcGFydDIuZ2V0VHlwZU5hbWUoKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJUeXBlTmFtZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFhNTENvbnN0YW50cy5OVUxMX05TX1VSSSwgb3V0cHV0MlR5cGVOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgIFhTRFR5cGVEZWZpbml0aW9uIG91dHB1dDJUeXBlRGVmaW5pdGlvbiA9IHBhcnQyLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyVHlwZURlZmluaXRpb24pOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MlR5cGVEZWZpbml0aW9uLmdldENvbnRhaW5lcigpKTsKLSAgICBhc3NlcnROdWxsKG91dHB1dDJUeXBlRGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDUzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9hZHNOYW1lbGVzc0RlZmluaXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy9UZXN0IHdpdGggbmFtZWxlc3MgZGVmaW5pdGlvbgotICAgICAgCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9NaXNzaW5nTmFtZS53c2RsIik7Ci0gICAgICBhc3NlcnROdWxsKGRlZmluaXRpb24uZ2V0UU5hbWUoKSk7Ci0KLSAgICAgIC8vVGVzdCB3aXRoIG5hbWVkIGRlZmluaXRpb24KLSAgICAgIAotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL1dpdGhOYW1lLndzZGwiKTsKLSAgICAgIGFzc2VydE5vdE51bGwoZGVmaW5pdGlvbik7Ci0gICAgICBRTmFtZSBuYW1lID0gZGVmaW5pdGlvbi5nZXRRTmFtZSgpOyAKLSAgICAgIGFzc2VydE5vdE51bGwobmFtZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIldTRExGaWxlIiwgbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE1MTY3NAotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEhhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTG9hZCBhIHNhbXBsZSBXU0RMIGRvY3VtZW50IHRoYXQgaGFzIGRvY3VtZW50YXRpb24gZWxlbWVudHMgaW4gYWxsIGFsbG93ZWQgcGxhY2VzLgotICAgICAgCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9IYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzL0RvY3VtZW50ZWQud3NkbCIpOwotICAgICAgCi0gICAgICAvLyBNYWtlIHN1cmUgaW1wb3J0cyBhcmUgYWRkZWQgYWZ0ZXIgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudC4KLSAgICAgIAotICAgICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRTsKLSAgICAgIEltcG9ydCBhbkltcG9ydCA9IGZhY3RvcnkuY3JlYXRlSW1wb3J0KCk7Ci0gICAgICBhbkltcG9ydC5zZXROYW1lc3BhY2VVUkkoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKLSAgICAgIGRlZmluaXRpb24uYWRkSW1wb3J0KGFuSW1wb3J0KTsKLSAgICAgIAotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBFbGVtZW50IGV4cGVjdGVkSW1wb3J0RWxlbWVudCA9IGdldE5leHRFbGVtZW50KGRlZmluaXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBFbGVtZW50IGltcG9ydEVsZW1lbnQgPSBhbkltcG9ydC5nZXRFbGVtZW50KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoaW1wb3J0RWxlbWVudCwgZXhwZWN0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICAgIAotICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvdmVya2lsbCBzaW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUgYmFzZSBjbGFzcyBXU0RMRWxlbWVudEltcGwgYnV0Li4uCi0gICAgICAKLSAgICAgIC8vIE1ha2Ugc3VyZSBuZXcgbWVzc2FnZSBwYXJ0cyBhcmUgYWRkZWQgYWZ0ZXIgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBhbmQgYXMgdGhlIGxhc3QgZWxlbWVudC4KLQotICAgICAgTWVzc2FnZSBhTWVzc2FnZSA9IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuZ2V0KDApOwotICAgICAgUGFydCBuZXdQYXJ0ID0gZmFjdG9yeS5jcmVhdGVQYXJ0KCk7Ci0gICAgICBhTWVzc2FnZS5hZGRQYXJ0KG5ld1BhcnQpOwotCi0gICAgICBFbGVtZW50IG1lc3NhZ2VFbGVtZW50ID0gYU1lc3NhZ2UuZ2V0RWxlbWVudCgpOwotCi0gICAgICBFbGVtZW50IG1lc3NhZ2VEb2N1bWVudGF0aW9uRWxlbWVudCA9IGFNZXNzYWdlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKG1lc3NhZ2VEb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBFbGVtZW50IGZpcnN0Q2hpbGRFbGVtZW50ID0gZ2V0Rmlyc3RDaGlsZEVsZW1lbnQobWVzc2FnZUVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2VEb2N1bWVudGF0aW9uRWxlbWVudCwgZmlyc3RDaGlsZEVsZW1lbnQpOwotICAgICAgCi0gICAgICBFbGVtZW50IHBhcnRFbGVtZW50ID0gbmV3UGFydC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGxhc3RDaGlsZEVsZW1lbnQgPSBnZXRMYXN0Q2hpbGRFbGVtZW50KG1lc3NhZ2VFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhwYXJ0RWxlbWVudCwgbGFzdENoaWxkRWxlbWVudCk7Ci0gICAgICAKLSAgICAgIC8vIE1ha2Ugc3VyZSBuZXcgb3BlcmF0aW9ucyBhcmUgYWRkZWQgYWZ0ZXIgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBhbmQgYXMgdGhlIGxhc3QgZWxlbWVudC4KLQotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuZ2V0KDApOwotICAgICAgT3BlcmF0aW9uIG5ld09wZXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24obmV3T3BlcmF0aW9uKTsKLSAgICAgIAotICAgICAgRWxlbWVudCBwb3J0VHlwZUVsZW1lbnQgPSBwb3J0VHlwZS5nZXRFbGVtZW50KCk7Ci0KLSAgICAgIEVsZW1lbnQgcG9ydFR5cGVEb2N1bWVudGF0aW9uRWxlbWVudCA9IHBvcnRUeXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHBvcnRUeXBlRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgZmlyc3RDaGlsZEVsZW1lbnQgPSBnZXRGaXJzdENoaWxkRWxlbWVudChwb3J0VHlwZUVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKHBvcnRUeXBlRG9jdW1lbnRhdGlvbkVsZW1lbnQsIGZpcnN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgRWxlbWVudCBuZXdPcGVyYXRpb25FbGVtZW50ID0gbmV3T3BlcmF0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIGxhc3RDaGlsZEVsZW1lbnQgPSBnZXRMYXN0Q2hpbGRFbGVtZW50KHBvcnRUeXBlRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMobmV3T3BlcmF0aW9uRWxlbWVudCwgbGFzdENoaWxkRWxlbWVudCk7Ci0gICAgICAKLSAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGVsZW1lbnQgaXMgYWRkZWQgYWZ0ZXIgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBhbmQgYXMgdGhlIGxhc3QgZWxlbWVudC4KLSAgICAgIAotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5nZXQoMCk7Ci0gICAgICBPdXRwdXQgb3V0cHV0ID0gZmFjdG9yeS5jcmVhdGVPdXRwdXQoKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgICAgRWxlbWVudCBvcGVyYXRpb25FbGVtZW50ID0gb3BlcmF0aW9uLmdldEVsZW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBvcGVyYXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCA9IG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChvcGVyYXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBmaXJzdENoaWxkRWxlbWVudCA9IGdldEZpcnN0Q2hpbGRFbGVtZW50KG9wZXJhdGlvbkVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKG9wZXJhdGlvbkRvY3VtZW50YXRpb25FbGVtZW50LCBmaXJzdENoaWxkRWxlbWVudCk7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgb3V0cHV0RWxlbWVudCA9IG91dHB1dC5nZXRFbGVtZW50KCk7Ci0gICAgICBsYXN0Q2hpbGRFbGVtZW50ID0gZ2V0TGFzdENoaWxkRWxlbWVudChvcGVyYXRpb25FbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhvdXRwdXRFbGVtZW50LCBsYXN0Q2hpbGRFbGVtZW50KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE5ODM5MAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFN1cHBvcnRzTG9jYWxOU0ZvckV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXJpID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZTIud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5jcmVhdGVXU0RMNEpGYWN0b3J5KCk7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICAgIGphdmF4LndzZGwuRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCh1cmkpOwotCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvZXhhbXBsZS8iOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIC8vIFRlc3QgYSBsb2NhbCBTT0FQIG5hbWVzcGFjZSBwcmVmaXggZGVjbGFyYXRpb24uCi0KLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJleGFtcGxlU09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZyA9IGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChiaW5kaW5nKTsKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IHNvYXBCaW5kaW5nID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHNvYXBCaW5kaW5nKTsKLSAgICAgIFFOYW1lIGJpbmRpbmdFbGVtZW50VHlwZSA9IHNvYXBCaW5kaW5nLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmdFbGVtZW50VHlwZSk7Ci0gICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gYmluZGluZ0VsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNPQVBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRywgbG9jYWxQYXJ0KTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBiaW5kaW5nRWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIG5hbWVzcGFjZVVSSSk7Ci0gICAgICBhc3NlcnRUcnVlKHNvYXBCaW5kaW5nIGluc3RhbmNlb2YgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcpOwotCi0gICAgICAvLyBUZXN0IGEgZGVmYXVsdCBTT0FQIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhdCB0aGUgcG9ydCBsZXZlbC4KLQotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgImV4YW1wbGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICAgIFBvcnQgcG9ydCA9IHNlcnZpY2UuZ2V0UG9ydCgiZXhhbXBsZVNPQVAiKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBzb2FwQWRkcmVzcyA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotICAgICAgYXNzZXJ0Tm90TnVsbChzb2FwQWRkcmVzcyk7Ci0gICAgICBRTmFtZSBwb3J0RWxlbWVudFR5cGUgPSBzb2FwQWRkcmVzcy5nZXRFbGVtZW50VHlwZSgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChwb3J0RWxlbWVudFR5cGUpOwotICAgICAgbG9jYWxQYXJ0ID0gcG9ydEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNPQVBDb25zdGFudHMuQUREUkVTU19FTEVNRU5UX1RBRywgbG9jYWxQYXJ0KTsKLSAgICAgIG5hbWVzcGFjZVVSSSA9IHBvcnRFbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGFzc2VydEVxdWFscyhTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgbmFtZXNwYWNlVVJJKTsKLSAgICAgIGFzc2VydFRydWUoc29hcEFkZHJlc3MgaW5zdGFuY2VvZiBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyk7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgZ2V0TmV4dEVsZW1lbnQoRWxlbWVudCBhbkVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBhbkVsZW1lbnQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gKEVsZW1lbnQpbm9kZTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXRGaXJzdENoaWxkRWxlbWVudChFbGVtZW50IGFuRWxlbWVudCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGFuRWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIChFbGVtZW50KW5vZGU7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgZ2V0TGFzdENoaWxkRWxlbWVudChFbGVtZW50IGFuRWxlbWVudCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGFuRWxlbWVudC5nZXRMYXN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gbm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIChFbGVtZW50KW5vZGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIwODQ4NQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdElubGluZVR5cGVzRnJvbUltcG9ydHNBcmVWaXNpYmxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0lubGluZVR5cGVzRnJvbUltcG9ydHNBcmVWaXNpYmxlL0Eud3NkbCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9BIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIm1lc3NhZ2UiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKG1lc3NhZ2UpOwotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KCJwYXJhbWV0ZXJzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGFzc2VydE5vdE51bGwocGFydCk7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbiA9IHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIGFzc2VydE5vdE51bGwodHlwZURlZmluaXRpb24pOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHR5cGVEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vQiIsIG5hbWVzcGFjZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkJUeXBlIiwgdHlwZURlZmluaXRpb24uZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk2Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UHJvcGFnYXRlc1RhcmdldE5hbWVzcGFjZUNoYW5nZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9UYXJnZXROYW1lc3BhY2UvVGFyZ2V0TmFtZXNwYWNlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBTdHJpbmcgb2xkVGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotICAgICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKG9sZFRhcmdldE5hbWVzcGFjZSwgIk5ld09wZXJhdGlvblJlcXVlc3QiKTsKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKG1lc3NhZ2UpOwotCi0gICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKG9sZFRhcmdldE5hbWVzcGFjZSwgIlRhcmdldE5hbWVzcGFjZSIpOwotICAgICAgamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHBvcnRUeXBlKTsKLSAgICAgIAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKG9sZFRhcmdldE5hbWVzcGFjZSwgIlRhcmdldE5hbWVzcGFjZVNPQVAiKTsKLSAgICAgIGphdmF4LndzZGwuQmluZGluZyBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmcpOwotCi0gICAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUob2xkVGFyZ2V0TmFtZXNwYWNlLCAiVGFyZ2V0TmFtZXNwYWNlIik7Ci0gICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChzZXJ2aWNlKTsKLQotICAgICAgU3RyaW5nIG5ld1RhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05ld1RhcmdldE5hbWVzcGFjZS8iOyAKLSAgICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKG5ld1RhcmdldE5hbWVzcGFjZSk7Ci0gICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBBdHRyIHRhcmdldE5hbWVzcGFjZU5vZGUgPSBkZWZpbml0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKFdTRExDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHRhcmdldE5hbWVzcGFjZU5vZGUpOwotICAgICAgYXNzZXJ0RXF1YWxzKG5ld1RhcmdldE5hbWVzcGFjZSwgdGFyZ2V0TmFtZXNwYWNlTm9kZS5nZXRWYWx1ZSgpKTsKLSAgICAgIAotICAgICAgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKG5ld1RhcmdldE5hbWVzcGFjZSwgbWVzc2FnZVFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwobWVzc2FnZSk7Ci0gICAgIAotICAgICAgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZShuZXdUYXJnZXROYW1lc3BhY2UsIHBvcnRUeXBlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgcG9ydFR5cGUgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChwb3J0VHlwZSk7Ci0KLSAgICAgIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZShuZXdUYXJnZXROYW1lc3BhY2UsIGJpbmRpbmdRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmcpOwotCi0gICAgICBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUobmV3VGFyZ2V0TmFtZXNwYWNlLCBzZXJ2aWNlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChzZXJ2aWNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDcyOTYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRXU0RMVHlwZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvR2V0V1NETFR5cGUvQmFkSW1wb3J0LndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICAgIC8vIHRlc3QgYWxsIGRpcmVjdCBjaGlsZCBlbGVtZW50cyBvZiBkZWZpbml0aW9uIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBleHBlY3RlZCB0eXBlCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBpbnQgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoZGVmaW5pdGlvbkVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJEZWZpbml0aW9uIHR5cGUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCIsIFdTRExDb25zdGFudHMuREVGSU5JVElPTiwgdHlwZSk7ICAvLyROT04tTkxTLTEkCi0KLSAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBkZWZpbml0aW9uRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oMCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkltcG9ydCB0eXBlIGluY29ycmVjdGx5IGlkZW50aWZpZWQiLCBXU0RMQ29uc3RhbnRzLklNUE9SVCwgdHlwZSk7ICAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoInhzZDppbXBvcnQgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgLTEsIHR5cGUpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJUeXBlcyB0eXBlIGluY29ycmVjdGx5IGlkZW50aWZpZWQiLCBXU0RMQ29uc3RhbnRzLlRZUEVTLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJNZXNzYWdlIHR5cGUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCIsIFdTRExDb25zdGFudHMuTUVTU0FHRSwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoIk1lc3NhZ2UgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgV1NETENvbnN0YW50cy5NRVNTQUdFLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJQb3J0IHR5cGUgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgV1NETENvbnN0YW50cy5QT1JUX1RZUEUsIHR5cGUpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkJpbmRpbmcgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgV1NETENvbnN0YW50cy5CSU5ESU5HLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJTZXJ2aWNlIHR5cGUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCIsIFdTRExDb25zdGFudHMuU0VSVklDRSwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDcyOTYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkWFNESW1wb3J0cygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbCB0aGF0IGNvbnRhaW5zIGFuIHhzZDppbXBvcnQgb3V0c2lkZSBvZiB3c2RsOnR5cGVzCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9CYWRJbXBvcnQud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIHRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSB2YWxpZCB3c2RsOmltcG9ydAotICAgICAgTWFwIGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEltcG9ydHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygiSW5jb3JyZWN0IG51bWJlciBvZiBpbXBvcnRzIiwgMSwgaW1wb3J0cy5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIHRoZSBiYWQgeHNkOmltcG9ydCBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQKLSAgICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMiLCAxLCBleHRFbGVtZW50cy5zaXplKCkpOyAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvYXR0YWNobWVudC5jZ2k/YnVnaWQ9MjU3Mjc5Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVjb25jaWxlTm9uV1NETEVsZW1lbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArIAotICAgICAgICAic2FtcGxlcy9CdWdGaXhlcy9SZWNvbmNpbGVOb25XU0RMRWxlbWVudHMvUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgCi0gICAgICBEZWZpbml0aW9uIG5ld0RlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVGhlIG5ldyBkZWZpbml0aW9uIGNhbm5vdCBiZSBudWxsIixuZXdEZWZpbml0aW9uKTsKLSAgICAgIAotICAgICAgLy8gVGhlIG5hbWVzcGFjZSBpbiB0aGUgV1NETCBkZWZpbml0aW9uIGlzIG5vdCBpbnN0YW5jZXMgb2YgV1NETEVsZW1lbnQsIGl0IGlzIGFuCi0gICAgICAvLyBpbnN0YW5jZXMgb2YgTmFtZXNwYWNlSW1wbAotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoIndzZGwiLCAiaHR0cDovL2V4YW1wbGUub3JnIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgbmV3RGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIERvY3VtZW50IG5ld0RvY3VtZW50ID0gbmV3RGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVGhlIG5ldyBkZWZpbml0aW9uJ3MgZG9jdW1lbnQgY2Fubm90IGJlIG51bGwiLG5ld0RvY3VtZW50KTsgLy8kTk9OLU5MUy0xJAotICAgICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVGhlIGRlZmluaXRpb24gbXVzdCBoYXZlIFR5cGVzIix0eXBlcyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIE5vZGUgdHlwZXNOb2RlID0gKHR5cGVzLmdldEVsZW1lbnQoKSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJUaGUgVHlwZXMgZWxlbWVudCBjYW5ub3QgYmUgbnVsbCIsdHlwZXNOb2RlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgTm9kZSB0b0ltcG9ydCA9IG5ld0RvY3VtZW50LmltcG9ydE5vZGUodHlwZXNOb2RlLCB0cnVlKTsKLSAgICAgIAotICAgICAgLy8gQXBwZW5kIGNoaWxkIHdpbGwgY2FsbCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbC5lbGVtZW50Q29udGVudHNDaGFuZ2VkKEVsZW1lbnQpCi0gICAgICAvLyB3aGljaCBjaGFuZ2VzIGlzUmVjb25jaWxpbmcgdG8gdHJ1ZSBhbmQgY2FsbHMgCi0gICAgICAvLyBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbC5yZWNvbmNpbGVDb250ZW50cyhFbGVtZW50KSBhbmQgY2hhbmdlcyBpc1JlY29uY2lsaW5nIHRvCi0gICAgICAvLyBmYWxzZSBhZnRlci4gIEhvd2V2ZXIsIGR1ZSB0byBhIENsYXNzQ2FzdCBleGNlcHRpb24gaW4gcmVjb25jaWxlQ29udGVudHMsIGlzUmVjb25jaWxpbmcgaXMgbmV2ZXIgY2hhbmdlZCB0bwotICAgICAgLy8gZmFsc2UuICBUaGUgcmVzdWx0IGlzIG5ld2x5IGFkZGVkIFdTREwgZWxlbWVudHMgbm90IHNob3dpbmcgdXAgaW4gdGhlIEVNRiBtb2RlbC4gICAgICAgCi0gICAgICBuZXdEZWZpbml0aW9uLmdldEVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0b0ltcG9ydCk7Ci0gICAgICAKLSAgICAgIC8vIFRoZSBidWcgd291bGQgaGF2ZSBzZXQgaXNSZWNvbmNpbGluZyB0byB0cnVlIGFuZCBzbyBtZXNzYWdlcyB3aWxsIG5vdCBiZSByZWNvbmNpbGVkCi0gICAgICBhc3NlcnROb3ROdWxsKCJUaGUgZGVmaW5pdGlvbiBtdXN0IGhhdmUgbWVzc2FnZXMiLGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgTWVzc2FnZSBtZXNzYWdlVG9BZGQgPSAoKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKAotICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVjb25jaWxlTm9uV1NETEVsZW1lbnRzLyIsIk5ld09wZXJhdGlvblJlcXVlc3QiKSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIE5vZGUgbWVzc2FnZU5vZGUgPSBtZXNzYWdlVG9BZGQuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVGhlIG1lc3NhZ2UgdG8gYWRkIHRvIHRoZSBuZXcgZGVmaW5pdGlvbiBjYW5ub3QgYmUgbnVsbCIsbWVzc2FnZU5vZGUpOyAvLyROT04tTkxTLTEkCi0gICAgICBOb2RlIHRvSW1wb3J0MiA9IG5ld0RlZmluaXRpb24uZ2V0RG9jdW1lbnQoKS5pbXBvcnROb2RlKG1lc3NhZ2VOb2RlLGZhbHNlKTsKLSAgICAgIAotICAgICAgYXNzZXJ0VHJ1ZSgiTm8gbWVzc2FnZXMgc2hvdWxkIGV4aXN0IixuZXdEZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLnNpemUoKSA9PSAwKTsgLy8kTk9OLU5MUy0xJAotICAgICAgbmV3RGVmaW5pdGlvbi5nZXRFbGVtZW50KCkuYXBwZW5kQ2hpbGQodG9JbXBvcnQyKTsKLSAgICAgIC8vIFRoZSBidWcgY2F1c2VzIHRoZSBtZXNzYWdlIHRvIGJlIGFkZGVkCi0gICAgICBhc3NlcnRUcnVlKCJBIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCIsIG5ld0RlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuc2l6ZSgpID09IDEpOyAvLyROT04tTkxTLTEkICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvYXR0YWNobWVudC5jZ2k/YnVnaWQ9MjU3Mjc5Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVjb25jaWxlc0ltcG9ydHNXaXRoTm9Mb2NhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAKLSAgICAgICAgInNhbXBsZXMvQnVnRml4ZXMvUmVjb25jaWxlc0ltcG9ydHNXaXRoTm9Mb2NhdGlvbi9NYWluLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CLyI7Ci0gICAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiQiIpOwotICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoc2VydmljZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NDA0Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVjb25jaWxlc0V4dGVuc2libGVFbGVtZW50cygpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgLy8gVGhlIHNhbXBsZSBXU0RMIGFscmVhZHkgaGFzIGFuIDxhbm5vdGF0aW9uPiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgZm9yIGVhY2ggZXh0ZW5zaWJsZSBlbGVtZW50Ci0gICAgLy8gV2Ugd2lsbCBsb29wIHRocm91Z2ggZXZlcnkgZXh0ZW5zaWJsZSBlbGVtZW50IGFuZCByZW1vdmUgdGhlIGFubm90YXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAgLy8gYW5kIGZvcmNlIHRoZSBtb2RlbCB0byB1cGRhdGUsIHRodXMgY2FsbGluZyB0aGUgcmVjb25jaWxpYXRpb24gY29kZS4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyB0aGF0Ci0gICAgLy8gdGhlIGFubm90YXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbW9kZWwuCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1JlY29uY2lsZXNFeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZUVsZW1lbnRTYW1wbGUud3NkbCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIC8vIERlZmluaXRpb24KLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQoZGVmaW5pdGlvbiwgMSk7Ci0gICAgCi0gICAgLy8gSW1wb3J0Ci0gICAgRUxpc3QgaW1wb3J0cyA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKTsKLSAgICBJbXBvcnQgbXlJbXBvcnQgPSAoSW1wb3J0KSBpbXBvcnRzLmdldCgwKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQobXlJbXBvcnQsIDEpOwotICAgIAotICAgIC8vIFR5cGU6IG9yaWdpbmFsIGlzIHR3byBiZWNhdXNlIGl0IGhhcyA8YW5ub3RhdGlvbj4gYW5kIDxzY2hlbWE+Ci0gICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgIGVuc3VyZUV4dGVuc2liaWxpdHlFbGVtZW50UmVtb3ZlZCh0eXBlcywgMik7Ci0gICAgCi0gICAgLy8gU2VydmljZQotICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuZ2V0KDApOwotICAgIGVuc3VyZUV4dGVuc2liaWxpdHlFbGVtZW50UmVtb3ZlZChzZXJ2aWNlLCAxKTsKLSAgICAKLSAgICAvLyBQb3J0Ci0gICAgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCBwb3J0ID0gKG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQpc2VydmljZS5nZXRFUG9ydHMoKS5nZXQoMCk7Ci0gICAgZW5zdXJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRSZW1vdmVkKHBvcnQsIDIpOwotICAgIAotICAgIC8vIEJpbmRpbmc6IG9yaWdpbmFsIGlzIDIgYmVjYXVzZSBpdCBoYXMgPGFubm90YXRpb24+IGFuZCA8c29hcDpiaW5kaW5nPgotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQoYmluZGluZywgMik7Ci0gICAgCi0gICAgLy8gQmluZGluZyBPcGVyYXRpb246IG9yaWdpbmFsIGlzIDIgYmVjYXVzZSBpdCBoYXMgPGFubm90YXRpb24+IGFuZCA8c29hcDpvcGVyYXRpb24+Ci0gICAgTGlzdCBiaW5kaW5nT3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgZW5zdXJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRSZW1vdmVkKGJpbmRpbmdPcGVyYXRpb24sIDIpOyAgICAKLSAgICAKLSAgICAvLyBCaW5kaW5nIElucHV0OiBvcmlnaW5hbCBpcyAyIGJlY2F1c2UgaXQgaGFzIDxhbm5vdGF0aW9uPiBhbmQgPHNvYXA6Ym9keT4KLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCk7Ci0gICAgZW5zdXJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRSZW1vdmVkKGJpbmRpbmdJbnB1dCwgMik7Ci0gICAgCi0gICAgLy8gQmluZGluZyBPdXRwdXQ6IG9yaWdpbmFsIGlzIDIgYmVjYXVzZSBpdCBoYXMgPGFubm90YXRpb24+IGFuZCA8c29hcDpib2R5PgotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQoYmluZGluZ091dHB1dCwgMik7Ci0gICAgCi0gICAgLy8gQmluZGluZyBGYXVsdDogb3JpZ2luYWwgaXMgMiBiZWNhdXNlIGl0IGhhcyA8YW5ub3RhdGlvbj4gYW5kIDxzb2FwOmZhdWx0PiAgICAKLSAgICBFTGlzdCBiaW5kaW5nRmF1bHRzID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpOwotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdHMuZ2V0KDApOwotICAgIGVuc3VyZUV4dGVuc2liaWxpdHlFbGVtZW50UmVtb3ZlZChiaW5kaW5nRmF1bHQsIDIpOwotICAgIAotICAgIC8vIFBvcnQgVHlwZQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gYmluZGluZy5nZXRFUG9ydFR5cGUoKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQocG9ydFR5cGUsIDEpOwotICAgIAotICAgIC8vIE9wZXJhdGlvbgotICAgIEVMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvcGVyYXRpb25zLmdldCgwKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQob3BlcmF0aW9uLCAxKTsKLSAgICAKLSAgICAvLyBPdXRwdXQKLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQob3V0cHV0LCAxKTsKLSAgICAKLSAgICAvLyBJbnB1dAotICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIGVuc3VyZUV4dGVuc2liaWxpdHlFbGVtZW50UmVtb3ZlZChpbnB1dCwgMSk7Ci0gICAgCi0gICAgLy8gZmF1bHQgCi0gICAgRUxpc3QgZmF1bHRzID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKTsKLSAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgZmF1bHRzLmdldCgwKTsKLSAgICBlbnN1cmVFeHRlbnNpYmlsaXR5RWxlbWVudFJlbW92ZWQoZmF1bHQsIDEpOwotICAgIAotICAgIC8vIE1lc3NhZ2UKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgIGVuc3VyZUV4dGVuc2liaWxpdHlFbGVtZW50UmVtb3ZlZChtZXNzYWdlLCAxKTsKLSAgICAKLSAgICAvLyBQYXJ0Ci0gICAgRUxpc3QgcGFydHMgPSBtZXNzYWdlLmdldEVQYXJ0cygpOwotICAgIFBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0cy5nZXQoMCk7Ci0gICAgZW5zdXJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRSZW1vdmVkKHBhcnQsIDEpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlIHRoZSBmaXJzdCBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuIFRoZSBleHBlY3RlZCByZXN1bHQgaXMgb3JpZ2luYWwgc2l6ZSB3aWxsIGRlY3JlbWVudCBieSAxCi0gICAqLwotICBwcml2YXRlIHZvaWQgZW5zdXJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRSZW1vdmVkKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50LCBpbnQgb3JpZ2luYWxTaXplKSAKLSAgewotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9yaWdpbmFsU2l6ZSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCA9IG51bGw7Ci0gICAgSXRlcmF0b3IgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBleHRlbnNpYmlsaXR5RWxlbWVudHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSAKLSAgICAgIHsKLSAgICAgICAgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgb2JqZWN0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50ID09IG51bGwpIAotICAgIHsKLSAgICAgIGZhaWwoIkNhbm5vdCBmaW5kIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuIik7Ci0gICAgfQotICAgIEVsZW1lbnQgZWxlbWVudCA9IHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RWxlbWVudCgpLnJlbW92ZUNoaWxkKGVsZW1lbnQpOwotICAgIGV4dGVuc2libGVFbGVtZW50LmVsZW1lbnRDaGFuZ2VkKGV4dGVuc2libGVFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9yaWdpbmFsU2l6ZSAtIDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0c1dpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb24oKSAKLSAgewotICAgIFN0cmluZyBXU0RMX05TID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0V2l0aE5vblN0YW5kYXJkV1NETEZpbGVFeHRlbnNpb24vd3NkbDAvIjsgLy8kTk9OLU5MUy0xJCAKLSAgICBTdHJpbmcgWFNEX05TID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9uU3RhbmRhcmRTY2hlbWFGaWxlRXh0ZW5zaW9uL3hzZDAiOyAvLyROT04tTkxTLTEkIAotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIGxvYWQgYSB3c2RsIHRoYXQgaW1wb3J0cyBhbm90aGVyIFdTREwgd2l0aCBub24tc3RhbmRhcmQgZmlsZSBleHRlbnNpb24gKC53c2RsMCkgd2hpY2ggaW4gdHVybgotICAgICAgLy8gaW1wb3J0cyBhIFhTRCB3aXRoIG5vbi1zdGFuZGFyZCBmaWxlIGV4dGVuc2lvbiAoLnhzZDApCi0gICAgICAvLyBJbXBvcnRXaXRoTm9uU3RhbmRhcmRGaWxlRXh0ZW5zaW9uLndzZGwgYWxzbyBpbXBvcnRzIGEgWFNEIChOb25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMSkgdXNpbmcgPHdzZGw6aW1wb3J0PgotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvSW1wb3J0c1dpdGhOb25TdGFuZGFyZEZpbGVFeHRlbnNpb24vSW1wb3J0V2l0aE5vblN0YW5kYXJkRmlsZUV4dGVuc2lvbi53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gdGhlcmUgc2hvdWxkIG9ubHkgYmUgdHdvIHZhbGlkIDx3c2RsOmltcG9ydD5zIC0gTm9uU3RhbmRhcmRXU0RMRmlsZUV4dGVuc2lvbi53c2RsMCBhbmQgTm9uU3RhbmRhcmRTY2hlbWFGaWxlRXh0ZW5zaW9uLnhzZDEKLSAgICAgIEVMaXN0IGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBudW1iZXIgb2YgaW1wb3J0cyIsIDIsIGltcG9ydHMuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5zaXplKCk7IGkrKykgewotICAgICAgICBJbXBvcnQgbXlJbXBvcnQgPSAoSW1wb3J0KSBpbXBvcnRzLmdldChpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiSW5jb3JyZWN0IGltcG9ydGVkIG5hbWVzcGFjZSIsIFdTRExfTlMuZXF1YWxzKG15SW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKSB8fCBYU0RfTlMuZXF1YWxzKG15SW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKSk7IC8vJE5PTi1OTFMtMSQgCi0gICAgICAgIGlmIChXU0RMX05TLmVxdWFscyhteUltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSkpIHsKLSAgICAgICAvLyBXU0RMIGltcG9ydDogbWFrZSBzdXJlIHRoZSBiaW5kaW5nIGluIHRoZSBpbXBvcnRlZCBOb25TdGFuZGFyZFdTRExGaWxlRXh0ZW5zaW9uLndzZGwwIGlzIHJlc29sdmVkCi0gICAgICAgICAgRGVmaW5pdGlvbiBpbXBvcnRlZERlZmluaXRpb24gPSBteUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOyAKLSAgICAgICAgICBhc3NlcnROb3ROdWxsKGltcG9ydGVkRGVmaW5pdGlvbik7Ci0gICAgICAgICAgTWFwIGJpbmRpbmdzID0gaW1wb3J0ZWREZWZpbml0aW9uLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGJpbmRpbmcgZWxlbWVudHMgaW4gaW1wb3J0ZWQgV1NETCIsIDEsIGJpbmRpbmdzLnNpemUoKSk7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gR28gdG8gdGhlIHJlc29sdmVkICJOZXdUeXBlIiBjb21wbGV4IHR5cGUgZWxlbWVudCBhbmQgcmVhZHMgaXRzIHRlc3RYU0QwIGF0dHJpYnV0ZSwgYW5kIHZlcmlmeSBpdCdzIGFjY2Vzc2libGUuIAotICAgICAgICAgIExpc3Qgc2NoZW1hcyA9IGltcG9ydGVkRGVmaW5pdGlvbi5nZXRFVHlwZXMoKS5nZXRTY2hlbWFzKCk7Ci0gICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNjaGVtYXMuc2l6ZSgpKTsKLSAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlzY2hlbWFzLmdldCgwKTsKLSAgICAgICAgICBFTGlzdCB0eXBlcyA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKTsKLSAgICAgICAgICBhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBudW1iZXIgb2YgdHlwZXMgZGVmaW5pdGlvbnMgaW4gdGhlIGlubGluZSBzY2hlbWEgb2YgdGhlIGltcG9ydGVkIFdTREwiLCAxLCB0eXBlcy5zaXplKCkpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIE9iamVjdCB0eXBlID0gdHlwZXMuZ2V0KDApOwotICAgICAgICAgIGFzc2VydFRydWUoIk5vdCBjb21wbGV4IHR5cGUiLCB0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKTsKLSAgICAgICAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGVEZWZpbml0aW9uID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZTsKLSAgICAgICAgICBhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBuYW1lIGZvciB0aGUgQ29tcGxleFR5cGUgaW1wb3J0ZWQgZnJvbSBOb25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMCIsICJOZXdUeXBlIiwgY29tcGxleFR5cGVEZWZpbml0aW9uLmdldE5hbWUoKSk7ICAvLyROT04tTkxTLTEkICROT04tTkxTLTIkCi0gICAgICAgICAgU3RyaW5nIHRlc3RBdHRyaWJ1dGUgPSBjb21wbGV4VHlwZURlZmluaXRpb24uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZSgidGVzdFhTRDAiKTsgIAotICAgICAgICAgIGFzc2VydEVxdWFscygiSW5jb3JyZWN0IHRlc3QgYXR0cmlidXRlIGZvciB0aGUgQ29tcGxleFR5cGUgaW1wb3J0ZWQgZnJvbSBOb25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMCIsICJwYXNzZWQiLCB0ZXN0QXR0cmlidXRlKTsgLy8kTk9OLU5MUy0xJCAkTk9OLU5MUy0yJAotICAgICAgICB9IGVsc2UgewotICAgICAgIC8vIHNjaGVtYSBpbXBvcnQ6IG1ha2Ugc3VyZSB0aGUgY29tcGxleCB0eXBlIGluIHRoZSBpbXBvcnRlZCBOb25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMSBpcyByZXNvbHZlZAotICAgICAgICAgIC8vIEdvIHRvIHRoZSByZXNvbHZlZCAiSW1wb3J0ZWRUeXBlVmlhV1NETEltcG9ydCIgY29tcGxleCB0eXBlIGVsZW1lbnQgYW5kIHJlYWRzIGl0cyB0ZXN0WFNEMSBhdHRyaWJ1dGUsIGFuZCB2ZXJpZnkgaXQncyBhY2Nlc3NpYmxlLgotICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBteUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0gICAgICAgICAgRUxpc3QgdHlwZXMgPSBzY2hlbWEuZ2V0VHlwZURlZmluaXRpb25zKCk7Ci0gICAgICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgbnVtYmVyIG9mIHR5cGVzIGRlZmluaXRpb25zIGluIGltcG9ydGVkIFhTRCIsIDEsIHR5cGVzLnNpemUoKSk7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCi0gICAgICAgICAgT2JqZWN0IHR5cGUgPSB0eXBlcy5nZXQoMCk7Ci0gICAgICAgICAgYXNzZXJ0VHJ1ZSgiTm90IGNvbXBsZXggdHlwZSIsIHR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pOwotICAgICAgICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZURlZmluaXRpb24gPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlOwotICAgICAgICAgIGFzc2VydEVxdWFscygiSW5jb3JyZWN0IG5hbWUgZm9yIHRoZSBDb21wbGV4VHlwZSBpbXBvcnRlZCBmcm9tIE5vblN0YW5kYXJkU2NoZW1hRmlsZUV4dGVuc2lvbi54c2QxIiwgIkltcG9ydGVkVHlwZVZpYVdTRExJbXBvcnQiLCBjb21wbGV4VHlwZURlZmluaXRpb24uZ2V0TmFtZSgpKTsgIC8vJE5PTi1OTFMtMSQgJE5PTi1OTFMtMiQKLSAgICAgICAgICBTdHJpbmcgdGVzdEF0dHJpYnV0ZSA9IGNvbXBsZXhUeXBlRGVmaW5pdGlvbi5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCJ0ZXN0WFNEMSIpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGFzc2VydEVxdWFscygiSW5jb3JyZWN0IHRlc3QgYXR0cmlidXRlIGZvciB0aGUgQ29tcGxleFR5cGUgaW1wb3J0ZWQgZnJvbSBOb25TdGFuZGFyZFNjaGVtYUZpbGVFeHRlbnNpb24ueHNkMSIsICJwYXNzZWQiLCB0ZXN0QXR0cmlidXRlKTsgIC8vJE5PTi1OTFMtMSQgJE5PTi1OTFMtMiQKLSAgICAgICAgfQotICAgICAgfSAKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvSW5saW5lU2NoZW1hVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0lubGluZVNjaGVtYVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3ZjQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvSW5saW5lU2NoZW1hVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHVibGljIElubGluZVNjaGVtYVRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSW5saW5lU2NoZW1hVGVzdCgiSW5saW5lU2NoZW1hIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SW5saW5lU2NoZW1hKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSW5saW5lU2NoZW1hVGVzdCgiSW5saW5lU2NoZW1hV2l0aFdTREw0SiIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdElubGluZVNjaGVtYVdpdGhXU0RMNEooKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lU2NoZW1hKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgICB0cmF2ZXJzZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lU2NoZW1hV2l0aFdTREw0SigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBsb2FkRGVmaW5pdGlvbkZvcldTREw0Sigic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgdHJhdmVyc2VEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdHJhdmVyc2VEZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZGVmaW5pdGlvbik7Ci0KLSAgICBJdGVyYXRvciBpdGVyID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydCBteUltcG9ydCA9IChJbXBvcnQpaXRlci5uZXh0KCk7Ci0gICAgICB0cmF2ZXJzZUltcG9ydChteUltcG9ydCk7Ci0gICAgfQotCi0gICAgLy8gR2V0IElubGluZSBTY2hlbWEKLSAgICBUeXBlcyB0eXBlcyA9IChvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcylkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIjx0eXBlcz4gaXMgbnVsbCIsIHR5cGVzKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldFNjaGVtYXMoKS5pdGVyYXRvcigpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIjx0eXBlcz4gZG9lcyBub3QgaGF2ZSBpbmxpbmUgPHNjaGVtYT5zIiwgaXRlcmF0b3IuaGFzTmV4dCgpKTsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgdHJhdmVyc2VTY2hlbWEoc2NoZW1hKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdHJhdmVyc2VJbXBvcnQoSW1wb3J0IG15SW1wb3J0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICAvLyAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBteUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotICAgIC8vICAgIHRyYXZlcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZVNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gbnVsbDsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiTm8gPGVsZW1lbnQ+cyBhcmUgZm91bmQiLCBpdGVyYXRvci5oYXNOZXh0KCkpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZWxlbWVudERlY2wgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgaWYgKGVsZW1lbnREZWNsLmdldE5hbWUoKS5lcXVhbHMoIk5ld09wZXJhdGlvblJlc3BvbnNlIikpCi0gICAgICAgIHRyYXZlcnNlRWxlbWVudERlY2woZWxlbWVudERlY2wpOwotICAgICAgZWxzZSBpZiAoZWxlbWVudERlY2wuZ2V0TmFtZSgpLmVxdWFscygiTmV3T3BlcmF0aW9uUmVxdWVzdCIpKQotICAgICAgICB0cmF2ZXJzZUVsZW1lbnREZWNsKGVsZW1lbnREZWNsKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdHJhdmVyc2VFbGVtZW50RGVjbChYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wpCi0gIHsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gZWxlbWVudERlY2wuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPGVsZW1lbnQ+IGRvZXMgbm90IGhhdmUgPHNpbXBsZVR5cGU+IiwgdHlwZSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKTsKLSAgICBpZiAodHlwZS5nZXRDb21wbGV4VHlwZSgpID09IG51bGwpIC8vIHNpbXBsZSB0eXBlCi0gICAgICByZXR1cm47IC8vIFRCRCAtIEN1cnJlbnRseSB0aGlzIGFsd2F5cyByZXR1cm5zIGF0IHRoaXMgcG9pbnQuCi0gICAgWFNEUGFydGljbGVDb250ZW50IGNvbnRlbnQgPSB0eXBlLmdldENvbXBsZXhUeXBlKCkuZ2V0Q29udGVudCgpOwotICAgIHRyYXZlcnNlTW9kZWxHcm91cCgoWFNETW9kZWxHcm91cCljb250ZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZU1vZGVsR3JvdXAoWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsKLSAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgcGFydGljbGVDb250ZW50ID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHBhcnRpY2xlQ29udGVudCA9ICgoWFNEUGFydGljbGUpaXRlcmF0b3IubmV4dCgpKS5nZXRDb250ZW50KCk7Ci0gICAgICBpZiAocGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBpZiAoKChYU0RFbGVtZW50RGVjbGFyYXRpb24pcGFydGljbGVDb250ZW50KS5pc0VsZW1lbnREZWNsYXJhdGlvblJlZmVyZW5jZSgpKQotICAgICAgICAgIHRyYXZlcnNlRWxlbWVudERlY2woKChYU0RFbGVtZW50RGVjbGFyYXRpb24pcGFydGljbGVDb250ZW50KS5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRyYXZlcnNlRWxlbWVudERlY2woKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBsb2FkRGVmaW5pdGlvbkZvcldTREw0SihTdHJpbmcgd3NkbEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFdTRExSZWFkZXIgcmVhZGVyID0gKG5ldyBXU0RMRmFjdG9yeUltcGwoKSkubmV3V1NETFJlYWRlcigpOwotICAgIFN0cmluZyBzID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyB3c2RsRmlsZTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAob3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbilyZWFkZXIucmVhZFdTREwocywgbmV3IElucHV0U291cmNlKG5ldyBGaWxlSW5wdXRTdHJlYW0ocykpKTsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTI3ZGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9Mb2FkQW5kU2VyaWFsaXphdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLlhNTERpZmY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgVmVjdG9yIHdzZGxGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLQotICBzdGF0aWMgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBFeGVjdXRlcyBhIHN0YW5kLWFsb25lIHRlc3QuCi0gICAqIEBwYXJhbSBvYmplY3RzIGFuIGFycmF5IG9mIFN0cmluZ3MgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotICAgKiBAc2VlICNydW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotICAgIHN1aXRlLmFkZFRlc3QobmV3IExvYWRBbmRTZXJpYWxpemF0aW9uVGVzdCgiTG9hZEFuZFN0b3JlIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0TG9hZEFuZFN0b3JlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHN1aXRlLmFkZFRlc3QgLy8gd3RwIGJ1ZyA3OTMyNgotICAgIChuZXcgTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0KCJDb21wYXJlIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0Q29tcGFyZSgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogTG9hZCBmcm9tIHRoZSBXU0RMIGRlZmluaXRpb25zIGZpbGUgYW5kIHN0b3JlIGJhY2sgdG8gYSBkaWZmZXJlbnQgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2FkQW5kU3RvcmUoKQotICB7Ci0gICAgU3RyaW5nIFRFU1RfREFUQV9ESVIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRlc3REYXRhRGlyIik7Ci0gICAgLy9Bc3NlcnQuYXNzZXJ0Tm90TnVsbCh0ZXN0RGF0YURpcik7Ci0gICAgRmlsZSBkaXIgPSBudWxsOwotICAgIGlmIChURVNUX0RBVEFfRElSICE9IG51bGwpCi0gICAgICBkaXIgPSBuZXcgRmlsZShURVNUX0RBVEFfRElSKTsKLSAgICBlbHNlCi0gICAgICAvLyBLQjogaWYgeW91IGFyZSBoZXJlLCBmaXggdGV4dC54bWwKLSAgICAgIGRpciA9IG5ldyBGaWxlKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZSIpOyAvLyBmYWxsYmFjawotCi0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBsaXN0RGF0YUZpbGVzKGRpcik7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBGaWxlIG15RmlsZSA9IG51bGw7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbEZpbGVzLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgbXlGaWxlID0gKEZpbGUpd3NkbEZpbGVzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlGaWxlLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgbG9hZChteUZpbGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgcHJpbnQobXlGaWxlLnRvU3RyaW5nKCkgKyAiLm91dCIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICBmYWlsKGRpci50b1N0cmluZygpKTsKLQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxpc3REYXRhRmlsZXMoRmlsZSBzcmMpCi0gIHsKLSAgICBpZiAoIXNyYy5pc0RpcmVjdG9yeSgpKQotICAgICAgcmV0dXJuOyAvLyBBc3NlcnRpb24gZmFpbGVkCi0KLSAgICBmaWx0ZXJXU0RMRmlsZXMoc3JjKTsgLy8gQWRkIFdTREwgZmlsZXMgaW4gdGhlIHNyYyBkaXJlY3RvcnkKLQotICAgIEZpbGVbXSBjaGlsZHJlbiA9IHNyYy5saXN0RmlsZXMoKTsKLSAgICBGaWxlIG15RmlsZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIG15RmlsZSA9IGNoaWxkcmVuW2ldOwotICAgICAgaWYgKG15RmlsZS5pc0RpcmVjdG9yeSgpKQotICAgICAgewotICAgICAgICBpZiAoIkNWUyIuZXF1YWxzKG15RmlsZS5nZXROYW1lKCkpKQotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGxpc3REYXRhRmlsZXMobXlGaWxlKTsgLy8gVmlzaXQgc3ViLWRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbHRlcldTRExGaWxlcyhGaWxlIGRpcikKLSAgewotICAgIEZpbGVbXSB3c2RscyA9IGRpci5saXN0RmlsZXMobmV3IEZpbGVGaWx0ZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgZm9yIChpbnQgaiA9IDA7IGogPCB3c2Rscy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICB3c2RsRmlsZXMuYWRkKHdzZGxzW2pdKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBMb2FkIGZyb20gdGhlIFdTREwgZGVmaW5pdGlvbnMgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBsb2FkKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoZmlsZW5hbWUpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZGVmaW5pdGlvbik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZWZpbml0aW9uLmVSZXNvdXJjZSgpIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCk7Ci0KLSAgICAgIFdTRExSZXNvdXJjZUltcGwgd3NkbFJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHdzZGxSZXNvdXJjZSk7Ci0KLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCi0gICAgICBXU0RMUmVzb3VyY2VJbXBsLnNlcmlhbGl6ZShTeXN0ZW0ub3V0LCBlbGVtZW50KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFN0b3JlIHRoZSBXU0RMIGRlZmluaXRpb25zIHRvIGEgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcmludChTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQsIGNyZWF0ZXMgYSBuZXcgYXNzb2NpYXRlZCBET00gZWxlbWVudCwgYW5kIHRoZW4gcHJpbnRzIGl0LgotICAgICAgLy8gVGhpcyBpcyBhIGdvb2QgdGVzdCBmb3IgaG93IHdlbGwgc2VyaWFsaXphdGlvbiB3b3JrcyBmb3IgYSBtb2RlbCBjcmVhdGVkICJib3R0b20gdXAiLgotICAgICAgLy8KLSAgICAgIGRlZmluaXRpb24uc2V0RG9jdW1lbnQobnVsbCk7Ci0gICAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQobnVsbCk7Ci0gICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgICAgRGVmaW5pdGlvbkxvYWRlci5zdG9yZShkZWZpbml0aW9uLCBmaWxlbmFtZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29tcGFyZSB0aGUgb3V0cHV0IFdTREwgZmlsZSB0byB0aGUgb3JpZ2luYWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZSgpCi0gIHsKLSAgICBYTUxEaWZmIHhtbGRpZmYgPSBuZXcgWE1MRGlmZigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEZpbGUgbXlGaWxlID0gbnVsbDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbEZpbGVzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBteUZpbGUgPSAoRmlsZSl3c2RsRmlsZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSh4bWxkaWZmLmRpZmYobXlGaWxlLnRvU3RyaW5nKCksIG15RmlsZS50b1N0cmluZygpICsgIi5vdXQiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9Mb2NhdGlvblRyYWNraW5nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvY2F0aW9uVHJhY2tpbmdUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMjQwYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvY2F0aW9uVHJhY2tpbmdUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFRlc3QgY2xhc3MgdXNlZCB0byB2YWxpZGF0ZSB0aGUgV1NETCBtb2RlbCBzb3VyY2UgbG9jYXRpb24gdHJhY2tpbmcKLSAqIG1lY2hhbmlzbS4KLSAqLwotcHVibGljIGNsYXNzIExvY2F0aW9uVHJhY2tpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotICAgIHN1aXRlLmFkZFRlc3QobmV3IExvY2F0aW9uVHJhY2tpbmdUZXN0KCkKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0VHJhY2tzTG9jYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoZSBsb2NhdGlvbiB0cmFja2luZyBtZWNoYW5pc20gcHJvdmlkZWQgYnkgdGhlIFdTREwgbW9kZWwgcmVzb3VyY2UKLSAgICogbG9hZGVyLgotICAgKiAKLSAgICogQHNlZSBXU0RMUmVzb3VyY2VJbXBsCi0gICAqIEBzZWUgV1NETFBhcnNlcgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRyYWNrc0xvY2F0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBmaWxlTmFtZSA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCkgKyAiL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiOyAvLyROT04tTkxTLTEkCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoZmlsZU5hbWUsIHRydWUsIHRydWUpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZGVmaW5pdGlvbik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZWZpbml0aW9uLmVSZXNvdXJjZSgpIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCk7Ci0KLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBXU0RMUGFyc2VyLmdldFN0YXJ0TGluZShkZWZpbml0aW9uRWxlbWVudCkpOwotCi0gICAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgICBFbGVtZW50IHR5cGVzRWxlbWVudCA9IHR5cGVzLmdldEVsZW1lbnQoKTsKLSAgICAgIGFzc2VydEVxdWFscyg0LCBXU0RMUGFyc2VyLmdldFN0YXJ0TGluZSh0eXBlc0VsZW1lbnQpKTsKLQotICAgICAgTGlzdCB0eXBlc0V4dGVuc2liaWxpdHlFbGVtZW50cyA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0KLSAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHNjaGVtYUV4dGVuc2lvbiA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCl0eXBlc0V4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBzY2hlbWFFeHRlbnNpb24uZ2V0U2NoZW1hKCk7Ci0KLSAgICAgIEVsZW1lbnQgc2NoZW1hRWxlbWVudCA9IHNjaGVtYS5nZXRFbGVtZW50KCk7Ci0KLSAgICAgIGFzc2VydEVxdWFscyg1LCBYU0RQYXJzZXIuZ2V0U3RhcnRMaW5lKHNjaGVtYUVsZW1lbnQpKTsKLQotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlcXVlc3RFbGVtZW50RGVjbGFyYXRpb24gPSBzY2hlbWEucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbigiTmV3T3BlcmF0aW9uUmVxdWVzdCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIEVsZW1lbnQgcmVxdWVzdEVsZW1lbnQgPSByZXF1ZXN0RWxlbWVudERlY2xhcmF0aW9uLmdldEVsZW1lbnQoKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKDcsIFhTRFBhcnNlci5nZXRTdGFydExpbmUocmVxdWVzdEVsZW1lbnQpKTsKLQotICAgICAgTGlzdCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgc2VydmljZXMuc2l6ZSgpKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VzLmdldCgwKTsKLQotICAgICAgRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IHNlcnZpY2UuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDQyLCBXU0RMUGFyc2VyLmdldFN0YXJ0TGluZShzZXJ2aWNlRWxlbWVudCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTXlSZXNvbHZlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL015UmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk5NzRkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTXlSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotcHVibGljIGNsYXNzIE15UmVzb2x2ZXIgaW1wbGVtZW50cyBFbnRpdHlSZXNvbHZlcgotewotICBwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAgIGlmIChzeXN0ZW1JZC5lcXVhbHMoImh0dHA6Ly93d3cubXlob3N0LmNvbS90b2RheSIpKQotICAgIHsKLSAgICAgIC8vIHJldHVybiBhIHNwZWNpYWwgaW5wdXQgc291cmNlCi0gICAgICAvL015UmVhZGVyIHJlYWRlciA9IG5ldyBNeVJlYWRlcigpOwotICAgICAgLy9yZXR1cm4gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0gICAgICByZXR1cm4gbmV3IElucHV0U291cmNlKHN5c3RlbUlkKTsgLy8gVEJECi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9QYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjdmODRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9QYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci0KLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotCi0gIHB1YmxpYyBQYXJzZXJUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgUGFyc2VyVGVzdCgiUGFyc2VyIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UGFyc2VyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlcigpCi0gIHsKLSAgICBFbnRpdHlSZXNvbHZlciBteVJlc29sdmVyID0gbmV3IE15UmVzb2x2ZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIi4vc2FtcGxlcy9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIERvY3VtZW50QnVpbGRlciBteUJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICBteUJ1aWxkZXIuc2V0RW50aXR5UmVzb2x2ZXIobXlSZXNvbHZlcik7Ci0gICAgICBEb2N1bWVudCBkb2MgPSBteUJ1aWxkZXIucGFyc2UoaXMpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIkRvY3VtZW50IGlzIG51bGwiLCBkb2MpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9SZWZhY3RvcmluZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9SZWZhY3RvcmluZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3OTQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvUmVmYWN0b3JpbmdUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci0KLQotcHVibGljIGNsYXNzIFJlZmFjdG9yaW5nVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHB1YmxpYyBSZWZhY3RvcmluZ1Rlc3QoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgUmVmYWN0b3JpbmdUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0KCJSZWZhY3RvcmluZyIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFJlZmFjdG9yaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlZmFjdG9yaW5nKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEJlZm9yZSBydW5uaW5nIHRoaXMgdGVzdCwgbW9kaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFdTREwgZmlsZQotICAgICAgZ2VuZXJhdGVXU0RMKFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCkgKyJzYW1wbGVzL2dlbmVyYXRlZC9SZWZhY3RvcmluZ1Rlc3Qud3NkbCIpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gZGVmZWN0IDY1OTQKLSAgcHVibGljIHZvaWQgcmVuYW1lT3BlcmF0aW9uKE9wZXJhdGlvbiBvcCkKLSAgewotICAgIElucHV0IGlucHV0ID0gb3AuZ2V0RUlucHV0KCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoaW5wdXQpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwobWVzc2FnZSk7Ci0KLSAgICBvcC5zZXROYW1lKCJSZW5hbWVkIiArIG9wLmdldE5hbWUoKSk7Ci0gICAgUU5hbWUgbmV3UU5hbWUgPSBuZXcgUU5hbWUobWVzc2FnZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCAiUmVuYW1lZCIgKyBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIG1lc3NhZ2Uuc2V0UU5hbWUobmV3UU5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVXU0RMKFN0cmluZyBvdXRwdXRGaWxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKG91dHB1dEZpbGUpKTsKLSAgICByZXNvdXJjZVNldC5nZXRSZXNvdXJjZXMoKS5hZGQocmVzb3VyY2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgRGVmaW5pdGlvbiAtIFRlbXBlcmF0dXJlCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgIlRlbXBlcmF0dXJlIikpOwotICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotCi0gICAgLy8gVGFyZ2V0IG5hbWVzcGFjZSAtIGh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tCi0gICAgZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tIik7Ci0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInRucyIsICJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbSIpOwotCi0gICAgLy8gT3RoZXIgbmFtZXNwYWNlcyAtIHdzZGwsIHNvYXAsIHhzZAotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ3c2RsIiwgV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ4c2QiLCBXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgic29hcCIsIFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJKTsKLQotICAgIC8vCi0gICAgLy8gTGV0J3Mgc3RhcnQgYnVpbGRpbmcgdHdvIG1lc3NhZ2VzCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIFBhcnQgLSBaaXBDb2RlCi0gICAgUGFydCBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICBwYXJ0LnNldE5hbWUoIlppcENvZGUiKTsKLSAgICBwYXJ0LnNldFR5cGVOYW1lKG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIikpOwotCi0gICAgLy8gQ3JlYXRlIGEgTWVzc2FnZSAtIEdldFRlbXBlcmF0dXJlSW5wdXQKLSAgICBNZXNzYWdlIGlucHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgaW5wdXRNZXNzYWdlLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiR2V0VGVtcGVyYXR1cmVJbnB1dCIpKTsKLSAgICBpbnB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UoaW5wdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhIFBhcnQgLSBUZW1wZXJhdHVyZQotICAgIHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiVGVtcGVyYXR1cmUiKTsKLSAgICBwYXJ0LnNldFR5cGVOYW1lKG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAiZmxvYXQiKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVPdXRwdXQKLSAgICBNZXNzYWdlIG91dHB1dE1lc3NhZ2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG91dHB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZU91dHB1dCIpKTsKLSAgICBvdXRwdXRNZXNzYWdlLmFkZFBhcnQocGFydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG91dHB1dE1lc3NhZ2UpOwotCi0gICAgLy8KLSAgICAvLyBOZXh0LCBidWlsZCBhIFBvcnRUeXBlCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhbiBJbnB1dCAtIEdldFRlbXBlcmF0dXJlSW5wdXQKLSAgICBJbnB1dCBpbnB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAgIGlucHV0LnNldE1lc3NhZ2UoaW5wdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPdXRwdXQgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE91dHB1dCBvdXRwdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3V0cHV0KCk7Ci0gICAgb3V0cHV0LnNldE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gT3BlcmF0aW9uIC0gR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBvcGVyYXRpb24uc2V0TmFtZSgiR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgb3BlcmF0aW9uLnNldElucHV0KGlucHV0KTsKLSAgICBvcGVyYXRpb24uc2V0T3V0cHV0KG91dHB1dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBQb3J0VHlwZQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgcG9ydFR5cGUuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUluZm9TT0FQIikpOwotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkUG9ydFR5cGUocG9ydFR5cGUpOwotCi0gICAgLy8KLSAgICAvLyBDcmVhdGUgdGhlIHNlY29uZCBzZXQgb3AgT3BlcmF0aW9ucwotICAgIC8vCi0KLSAgICAvLyBDcmVhdGUgYSBQYXJ0Ci0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJQYXJ0MiIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlCi0gICAgTWVzc2FnZSBpbnB1dE1lc3NhZ2UyID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2UyLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiSW5wdXRNZXNzYWdlMiIpKTsKLSAgICBpbnB1dE1lc3NhZ2UyLmFkZFBhcnQocGFydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKGlucHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydAotICAgIHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiUGFydDMiKTsKLSAgICBwYXJ0LnNldFR5cGVOYW1lKG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAiZmxvYXQiKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVPdXRwdXQKLSAgICBNZXNzYWdlIG91dHB1dE1lc3NhZ2UyID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBvdXRwdXRNZXNzYWdlMi5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIk91dHB1dE1lc3NhZ2UyIikpOwotICAgIG91dHB1dE1lc3NhZ2UyLmFkZFBhcnQocGFydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG91dHB1dE1lc3NhZ2UyKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbnB1dAotICAgIElucHV0IGlucHV0MiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAgIGlucHV0Mi5zZXRNZXNzYWdlKGlucHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dDIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3V0cHV0KCk7Ci0gICAgb3V0cHV0Mi5zZXRNZXNzYWdlKG91dHB1dE1lc3NhZ2UyKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uMiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBvcGVyYXRpb24yLnNldE5hbWUoIk9wZXJhdGlvbjIiKTsKLSAgICBvcGVyYXRpb24yLnNldElucHV0KGlucHV0Mik7Ci0gICAgb3BlcmF0aW9uMi5zZXRPdXRwdXQob3V0cHV0Mik7Ci0KLSAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24ob3BlcmF0aW9uMik7Ci0KLSAgICByZW5hbWVPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICByZW5hbWVPcGVyYXRpb24ob3BlcmF0aW9uMik7Ci0KLSAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvU2VtYW50aWNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvU2VtYW50aWNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1NlbWFudGljVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFNlbWFudGljVGVzdCBleHRlbmRzIERlZmluaXRpb25WaXNpdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFNlbWFudGljVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqLwotICBwdWJsaWMgU2VtYW50aWNUZXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHN1cGVyKGRlZmluaXRpb24pOwotICB9Ci0KLSAgLyogIAotICAgcHJpdmF0ZSB2b2lkIHNlcmlhbGl6ZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgIHsKLSAgIFNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvYyk7Ci0gICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwieWVzIik7Ci0gICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCJVVEYtOCIpOwotICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwiNCIpOwotICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKGRvbVNvdXJjZSxuZXcgU3RyZWFtUmVzdWx0KG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lKSkpOwotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgY3JlYXRlRG9jdW1lbnQoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICAgewotICAgZG9jID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgRWxlbWVudCBjcmVhdGVXU0RMRWxlbWVudChTdHJpbmcgbmFtZSkKLSAgIHsKLSAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbCIsbmFtZSk7Ci0gICBpZiAod3NkbE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKQotICAgZWxlbWVudC5zZXRQcmVmaXgod3NkbE5hbWVzcGFjZVByZWZpeCk7Ci0gICAKLSAgIHJldHVybiBlbGVtZW50OwotICAgfQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0RG9jdW1lbnRhdGlvbihFbGVtZW50IGRvY0VsZW1lbnQpCi0gIHsKLSAgICBpZiAoZG9jRWxlbWVudCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIHByaW50bG4oImRvY3VtZW50YXRpb246ICIgKyBkb2NFbGVtZW50KTsgLy8gVEJEIC0gc2VyaWFsaXplIGRvY0VsZW1lbnQKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmludGxuKFN0cmluZyBzKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKHMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgZGVmaW5pdGlvbnMuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oZGVmLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgUU5hbWUgcW5hbWUgPSBkZWYuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oInRhcmdldE5hbWVzcGFjZTogIiArIHRhcmdldE5hbWVzcGFjZSk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGRlZi5nZXROYW1lc3BhY2VzKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLQotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcHJlZml4ID0gKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBuYW1lc3BhY2UgPSBkZWYuZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0gICAgICBwcmludGxuKCJuYW1lc3BhY2UgcHJlZml4OiAiICsgcHJlZml4ICsgIiwgbmFtZXNwYWNlIFVSSTogIiArIG5hbWVzcGFjZSk7Ci0gICAgfQotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotICAgIHByaW50bG4oIkxlYXZpbmcgZGVmaW5pdGlvbnMuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0SW1wb3J0KG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB3c2RsSW1wb3J0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgaW1wb3J0Li4uIik7Ci0gICAgLy8gRGV0ZXJtaW5lIGlmIHdlIDxpbXBvcnQ+IGEgc2NoZW1hLgotICAgIGlmIChpbXBvcnRpbmdTY2hlbWEod3NkbEltcG9ydCkpCi0gICAgewotICAgICAgcHJpbnRsbigiPGltcG9ydD5pbmcgWE1MIFNjaGVtYSIpOwotCi0gICAgICAvLyAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9mb28uY29tIiBzY2hlbWFMb2NhdGlvbj0gImJhci54c2QiLz4KLSAgICAgIHByaW50bG4oIm5hbWVzcGFjZTogIiArIHdzZGxJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgcHJpbnRsbigic2NoZW1hTG9jYXRpb246ICIgKyB3c2RsSW1wb3J0LmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgdmlzaXREb2N1bWVudGF0aW9uKHdzZGxJbXBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwcmludGxuKCI8aW1wb3J0PmluZyBXU0RMIik7Ci0gICAgICB2aXNpdERvY3VtZW50YXRpb24od3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgcHJpbnRsbigiTGVhdmluZyBpbXBvcnQuLi4iKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRpbmdTY2hlbWEoSW1wb3J0IG15SW1wb3J0KQotICB7Ci0gICAgaWYgKG15SW1wb3J0LmdldERlZmluaXRpb24oKSAhPSBudWxsKSAvLyBpdCBpcyBXU0RMIGltcG9ydAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRUeXBlcyhvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcykKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyB0eXBlcy4uLiIpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRTY2hlbWFzKCkuaXRlcmF0b3IoKTsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgcHJpbnRsbigiaW4tbGluZSBzY2hlbWE6ICIgKyBzY2hlbWEpOwotICAgIH0KLSAgICBwcmludGxuKCJMZWF2aW5nIHR5cGVzLi4uIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdFBhcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBwYXJ0Li4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgcG9ydFR5cGUuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24ocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgc3VwZXIudmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBwb3J0VHlwZS4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIG9wZXJhdGlvbi4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBuYW1lKTsKLQotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIkZhaWxlZCBkZXRlcm1pbmluZyBPcGVyYXRpb24gVHlwZSIsIG9wVHlwZSk7Ci0KLSAgICBpZiAoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFID09IG9wVHlwZSkKLSAgICAgIHByaW50bG4oIm9wIHR5cGU6ICIgKyAiaW4tb3V0Iik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFID09IG9wVHlwZSkKLSAgICAgIHByaW50bG4oIm9wIHR5cGUiICsgIm91dC1pbiIpOwotICAgIGVsc2UgaWYgKE9wZXJhdGlvblR5cGUuTk9USUZJQ0FUSU9OID09IG9wVHlwZSkKLSAgICAgIHByaW50bG4oIm9wIHR5cGUiICsgIm91dC1vbmx5Iik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5PTkVfV0FZID09IG9wVHlwZSkKLSAgICAgIHByaW50bG4oIm9wIHR5cGUiICsgImluLW9ubHkiKTsKLQotICAgIHN1cGVyLnZpc2l0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBvcGVyYXRpb24uLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0SW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgaW5wdXQuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG5hbWUpOwotCi0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIHJlc29sdmUgdGhlIG1lc3NhZ2UiLCBtZXNzYWdlKTsKLQotICAgIHByaW50bG4oIkxlYXZpbmcgaW5wdXQuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0T3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBvdXRwdXQuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIG5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgbmFtZSk7Ci0KLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBvdXRwdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIHJlc29sdmUgdGhlIG1lc3NhZ2UiLCBtZXNzYWdlKTsKLQotICAgIHByaW50bG4oIkxlYXZpbmcgb3V0cHV0Li4uIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEZhdWx0KG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGZhdWx0Li4uIik7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBmYXVsdC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRCaW5kaW5nKG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZy4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgUU5hbWUgcW5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgcG9ydFR5cGUiLCBwb3J0VHlwZSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUoIjxzb2FwQm9keT4gaXMgbWlzc2luZyIsIHNvYXBCb2R5VmlzaXRlZCk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUoIjxzb2FwQmluZGluZz4gaXMgbWlzc2luZyIsIHNvYXBCaW5kaW5nVmlzaXRlZCk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUoIjxzb2FwT3BlcmF0aW9uPiBpcyBtaXNzaW5nIiwgc29hcE9wZXJhdGlvblZpc2l0ZWQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgYmluZGluZy4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGJpbmRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGJpbmRpbmdPcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIkZhaWxlZCB0byByZXNvbHZlIHRoZSBvcGVyYXRpb24iLCBvcGVyYXRpb24pOwotCi0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBvcGVyYXRpb25OYW1lKTsKLSAgICB9Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIG9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBpbnB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBpbnB1dE5hbWUgPSBpbnB1dC5nZXROYW1lKCk7Ci0gICAgaWYgKGlucHV0TmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIGlucHV0TmFtZSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdJbnB1dChpbnB1dCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIGlucHV0Li4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nIG91dHB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgaWYgKG91dHB1dE5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBvdXRwdXROYW1lKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgYmluZGluZyBvdXRwdXQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBmYXVsdCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGJpbmRpbmcgZmF1bHQuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBFbGVtZW50IGZhdWx0RWxlbWVudCA9IGZhdWx0LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgIT0gbnVsbCkKLSAgICAgIGZhdWx0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBmYXVsdE5hbWUpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgYmluZGluZyBmYXVsdC4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHNlcnZpY2UuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFFOYW1lIHFuYW1lID0gc2VydmljZS5nZXRRTmFtZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJWYWxpZGF0aW9uIEVycm9yOiBzZXJ2aWNlIGlzIG1pc3NpbmcgdGhlIG5hbWUgYXR0cmlidXRlIiwgcW5hbWUpOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIHN1cGVyLnZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIHNlcnZpY2UuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UG9ydChvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHBvcnQuLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24ocG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gcG9ydC5nZXROYW1lKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIlZhbGlkYXRpb24gRXJyb3I6IHBvcnQgaXMgbWlzc2luZyB0aGUgbmFtZSBhdHRyaWJ1dGUiLCBwb3J0KTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIHBvcnQuZ2V0TmFtZSgpKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIHJlc29sdmUgdGhlIGJpbmRpbmciLCBiaW5kaW5nKTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBBZGRyZXNzPiBpcyBtaXNzaW5nIiwgc29hcEFkZHJlc3NWaXNpdGVkKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIHBvcnQuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQsIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmxlRWxlbWVudCBvd25lciwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuLi4iKTsKLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4uLiIpOwotICB9Ci0KLSAgLy9OZWVkcyB0byBpbXByb3ZlIHRoaXMgcGFydAotICBwcml2YXRlIGJvb2xlYW4gc29hcE9wZXJhdGlvblZpc2l0ZWQgPSBmYWxzZTsKLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQT3BlcmF0aW9uKFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbikKLSAgewotICAgIHNvYXBPcGVyYXRpb25WaXNpdGVkID0gdHJ1ZTsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQT3BlcmF0aW9uLi4uIik7Ci0gICAgcHJpbnRsbigic29hcEFjdGlvbjogIiArIHNvYXBPcGVyYXRpb24uZ2V0U29hcEFjdGlvblVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBPcGVyYXRpb24uLi4iKTsKLSAgfQotCi0gIC8vTmVlZHMgdG8gaW1wcm92ZSB0aGlzIHBhcnQKLSAgcHJpdmF0ZSBib29sZWFuIHNvYXBCb2R5VmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCb2R5KFNPQVBCb2R5IHNvYXBCb2R5KQotICB7Ci0gICAgc29hcEJvZHlWaXNpdGVkID0gdHJ1ZTsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQQm9keS4uLiIpOwotICAgIHByaW50bG4oInVzZTogIiArIHNvYXBCb2R5LmdldFVzZSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBCb2R5Li4uIik7Ci0gIH0KLQotICAvL05lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwQmluZGluZ1Zpc2l0ZWQgPSBmYWxzZTsKLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQmluZGluZyhTT0FQQmluZGluZyBzb2FwQmluZGluZykKLSAgewotICAgIHNvYXBCaW5kaW5nVmlzaXRlZCA9IHRydWU7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgICBwcmludGxuKCJzdHlsZTogIiArIHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIHByaW50bG4oInRyYW5zcG9ydDogIiArIHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBCaW5kaW5nLi4uIik7Ci0gIH0KLQotICAvLyBOZWVkcyB0byBpbXByb3ZlIHRoaXMgcGFydAotICBwcml2YXRlIGJvb2xlYW4gc29hcEFkZHJlc3NWaXNpdGVkID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEFkZHJlc3MoU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MpCi0gIHsKLSAgICBzb2FwQWRkcmVzc1Zpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gICAgcHJpbnRsbigibG9jYXRpb246ICIgKyBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU2VtYW50aWNUZXN0KCJNb2RlbFNlbWFudGljVGVzdCIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1vZGVsU2VtYW50aWMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1vZGVsU2VtYW50aWMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWYgPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIsIHRydWUpOwotICAgICAgU2VtYW50aWNUZXN0IHRlc3QgPSBuZXcgU2VtYW50aWNUZXN0KGRlZik7Ci0gICAgICB0ZXN0LnZpc2l0KCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbChlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9VdGlsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1V0aWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3Nzg0NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1V0aWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgVXRpbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHVibGljIFV0aWxUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJXU0RMQ29uc3RhbnRzIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0Q29uc3RhbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgVXRpbFRlc3QoIldTRExSZXNvdXJjZUZhY3RvcnlJbXBsIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0V1NETFJlc291cmNlRmFjdG9yeUltcGwoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiV1NETFJlc291cmNlSW1wbCIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFdTRExSZXNvdXJjZUltcGwoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgVXRpbFRlc3QoIkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHN0YXRpYyBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvbnN0YW50cygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpbnQgdHlwZSA9IFdTRExDb25zdGFudHMubm9kZVR5cGUoV1NETENvbnN0YW50cy5QT1JUX0VMRU1FTlRfVEFHKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJOb2RlIHR5cGUgaXMgbm90IHRoYXQgb2YgcG9ydCIsIHR5cGUgPT0gMTApOwotCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgaW50IGRlZmluaXRpb25Ob2RlVHlwZSA9IFdTRExDb25zdGFudHMubm9kZVR5cGUoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIk5vZGUgdHlwZSBpcyBub3QgdGhhdCBvZiBkZWZpbml0aW9uIiwgZGVmaW5pdGlvbk5vZGVUeXBlID09IDEpOwotCi0gICAgICBib29sZWFuIGlzV1NETE5hbWVzcGFjZSA9IFdTRExDb25zdGFudHMuaXNXU0RMTmFtZXNwYWNlKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKCJUaGlzIHNob3VsZCBub3QgYmUgdGhlIFdTREwgTmFtZXNwYWNlIiwgaXNXU0RMTmFtZXNwYWNlKTsKLQotICAgICAgYm9vbGVhbiBpc01hdGNoaW5nID0gV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnIiwgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJpc01hdGNoaW5nTmFtZXNwYWNlIGlzIGluY29ycmVjdCIsIGlzTWF0Y2hpbmcpOwotCi0gICAgICBTdHJpbmcgYXR0ciA9IFdTRExDb25zdGFudHMuZ2V0QXR0cmlidXRlKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpLCAibmFtZSIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoImdldEF0dHJpYnV0ZSBpcyBpbmNvcnJlY3QiLCBhdHRyLmVxdWFscygiTG9hZEFuZFByaW50VGVzdCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCBmYWN0b3J5SW1wbCA9IG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSBmYWN0b3J5SW1wbC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlRmlsZVVSSSgiLi9zYW1wbGVzL2NyZWF0ZVJlc291cmNlVGVzdC53c2RsIikpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlJlc291cmNlIGlzIG5vdCBvZiB0eXBlIFdTRExSZXNvdXJjZUltcGwiLCByZXNvdXJjZSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFdTRExSZXNvdXJjZUltcGwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETFJlc291cmNlSW1wbCByZXNvdXJjZUltcGwgPSBuZXcgV1NETFJlc291cmNlSW1wbChVUkkuY3JlYXRlRmlsZVVSSSgiLi9zYW1wbGVzL2NyZWF0ZVJlc291cmNlVGVzdC53c2RsIikpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlJlc291cmNlIGlzIG5vdCBvZiB0eXBlIFdTRExSZXNvdXJjZUltcGwiLCByZXNvdXJjZUltcGwgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZWZpbml0aW9uLmVSZXNvdXJjZSgpIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCk7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotCi0gICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBXU0RMUmVzb3VyY2VJbXBsLnNlcmlhbGl6ZShTeXN0ZW0ub3V0LCBlbGVtZW50LCBudWxsKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGRvY3VtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGRvY3VtZW50LCBudWxsKTsKLSAgICAgIH0KLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHJlc291cmNlSW1wbC5hdHRhY2hlZChkZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLQotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotICAgICAgaWYgKGZhY3RvcnkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSBmYWN0b3J5LmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkhFQURFUl9FTEVNRU5UX1RBRyk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJQcm9ibGVtIGNyZWF0aW5nIFNPQVAgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IiwgZWUgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIGNsYXNzIFRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEV4dGVuc2liaWxpdHlFbGVtZW50Ci0gIHsKLSAgICBTdHJpbmcgbnMsIG5hbWU7Ci0KLSAgICBwdWJsaWMgVGVzdEV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBucywgU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIHRoaXMubnMgPSBuczsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUobnMsIG5hbWUpOwotICAgICAgfQotICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICAgIH0KLSAgfQotCi0gIGNsYXNzIFdTRExUZXN0RmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotICB7Ci0gICAgcHVibGljIFdTRExUZXN0RmFjdG9yeSgpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgVGVzdEV4dGVuc2liaWxpdHlFbGVtZW50KG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpOwotICAgICAgZmFjdG9yeVJlZ2lzdHJ5LnJlZ2lzdGVyRmFjdG9yeSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiwgbmV3IFdTRExUZXN0RmFjdG9yeSgpKTsKLQotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIik7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IGZhY3RvcnkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIsICJUZXN0RWxlbWVudCIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIjEuIFByb2JsZW0gY3JlYXRpbmcgY3VzdG9tIFRlc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IiwgZWUgaW5zdGFuY2VvZiBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIjIuIFByb2JsZW0gY3JlYXRpbmcgY3VzdG9tIFRlc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IiwgZWUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoIlRlc3RFbGVtZW50IikpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIjMuIFByb2JsZW0gY3JlYXRpbmcgY3VzdG9tIFRlc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IiwgZWUuZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoCi0gICAgICAgICJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKSk7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETDRKQVBJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTREw0SkFQSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkYWM3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETDRKQVBJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLldTREw0SkRlZmluaXRpb25WaXNpdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFdTREw0SkFQSVRlc3QgZXh0ZW5kcyBXU0RMNEpEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuY3JlYXRlV1NETDRKRmFjdG9yeSgpOwotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBuZXdEZWZpbml0aW9uOwotCi0gIHByaXZhdGUgTWVzc2FnZSBjdXJyZW50TWVzc2FnZTsKLQotICBwcml2YXRlIFNlcnZpY2UgY3VycmVudFNlcnZpY2U7Ci0KLSAgcHJpdmF0ZSBQb3J0VHlwZSBjdXJyZW50UG9ydFR5cGU7Ci0KLSAgcHJpdmF0ZSBPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbjsKLQotICBwcml2YXRlIEJpbmRpbmcgY3VycmVudEJpbmRpbmc7Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgV1NETDRKQVBJVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqLwotICBwdWJsaWMgV1NETDRKQVBJVGVzdChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzdXBlcihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmludGxuKFN0cmluZyBzKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKHMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgbmV3RGVmaW5pdGlvbiA9IGZhY3RvcnkubmV3RGVmaW5pdGlvbigpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZGVmLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0UU5hbWUoZGVmLmdldFFOYW1lKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgIG5ld0RlZmluaXRpb24uYWRkTmFtZXNwYWNlKHByZWZpeCwgbmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICBzdXBlci52aXNpdERlZmluaXRpb24oZGVmKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB3c2RsSW1wb3J0KQotICB7Ci0gICAgSW1wb3J0IG15SW1wb3J0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVJbXBvcnQoKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZEltcG9ydChteUltcG9ydCk7Ci0KLSAgICAvLyBlLmcuIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZm9vLmNvbSIgc2NoZW1hTG9jYXRpb249ICJiYXIueHNkIi8+Ci0gICAgbXlJbXBvcnQuc2V0TmFtZXNwYWNlVVJJKHdzZGxJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15SW1wb3J0LnNldExvY2F0aW9uVVJJKHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQod3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIG15SW1wb3J0LnNldERlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFR5cGVzKFR5cGVzIHR5cGVzKQotICB7Ci0gICAgVHlwZXMgbXlUeXBlcyA9IG5ld0RlZmluaXRpb24uY3JlYXRlVHlwZXMoKTsKLSAgICBteVR5cGVzLnNldERvY3VtZW50YXRpb25FbGVtZW50KHR5cGVzLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgLyoKLSAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXRFbGVtZW50ID0gbnVsbDsKLSAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgewotICAgICBleHRlbnNpYmlsaXRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgbXlUeXBlcy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXRFbGVtZW50KTsKLSAgICAgfSovCi0gICAgbmV3RGVmaW5pdGlvbi5zZXRUeXBlcyhteVR5cGVzKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpCi0gIHsKLSAgICBQYXJ0IG15UGFydCA9IG5ld0RlZmluaXRpb24uY3JlYXRlUGFydCgpOwotICAgIG15UGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChwYXJ0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15UGFydC5zZXROYW1lKHBhcnQuZ2V0TmFtZSgpKTsKLSAgICBteVBhcnQuc2V0RWxlbWVudE5hbWUocGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBteVBhcnQuc2V0VHlwZU5hbWUocGFydC5nZXRUeXBlTmFtZSgpKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGFydC5nZXRFeHRlbnNpb25BdHRyaWJ1dGVzKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBRTmFtZSBrZXkgPSBudWxsOwotICAgIFFOYW1lIHZhbHVlID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGtleSA9IChRTmFtZSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2YWx1ZSA9IChRTmFtZSlwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZShrZXkpOwotICAgICAgbXlQYXJ0LnNldEV4dGVuc2lvbkF0dHJpYnV0ZShrZXksIHZhbHVlKTsKLSAgICB9Ci0gICAgY3VycmVudE1lc3NhZ2UuYWRkUGFydChteVBhcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIGN1cnJlbnRNZXNzYWdlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgc3VwZXIudmlzaXRNZXNzYWdlKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRQb3J0VHlwZSA9IG5ld0RlZmluaXRpb24uY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFFOYW1lKHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXRVbmRlZmluZWQocG9ydFR5cGUuaXNVbmRlZmluZWQoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5hZGRQb3J0VHlwZShjdXJyZW50UG9ydFR5cGUpOwotCi0gICAgc3VwZXIudmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudE9wZXJhdGlvbiA9IG5ld0RlZmluaXRpb24uY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXROYW1lKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0U3R5bGUob3BlcmF0aW9uLmdldFN0eWxlKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0VW5kZWZpbmVkKG9wZXJhdGlvbi5pc1VuZGVmaW5lZCgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFBhcmFtZXRlck9yZGVyaW5nKG9wZXJhdGlvbi5nZXRQYXJhbWV0ZXJPcmRlcmluZygpKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuYWRkT3BlcmF0aW9uKGN1cnJlbnRPcGVyYXRpb24pOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBJbnB1dCBteUlucHV0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5zZXRNZXNzYWdlKGlucHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRJbnB1dChteUlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBPdXRwdXQgbXlPdXRwdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZU91dHB1dCgpOwotICAgIG15T3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteU91dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgIG15T3V0cHV0LnNldE1lc3NhZ2Uob3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRPdXRwdXQobXlPdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIEZhdWx0IG15RmF1bHQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUZhdWx0KCk7Ci0gICAgbXlGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICBteUZhdWx0LnNldE1lc3NhZ2UoZmF1bHQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLmFkZEZhdWx0KG15RmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5hZGRCaW5kaW5nKGN1cnJlbnRCaW5kaW5nKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nLnNldERvY3VtZW50YXRpb25FbGVtZW50KGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0UU5hbWUoYmluZGluZy5nZXRRTmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRQb3J0VHlwZShiaW5kaW5nLmdldFBvcnRUeXBlKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldFVuZGVmaW5lZChiaW5kaW5nLmlzVW5kZWZpbmVkKCkpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nKGJpbmRpbmcpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgbXlJbnB1dCA9IG5ld0RlZmluaXRpb24uY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgbXlJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUlucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQobXlJbnB1dCk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdJbnB1dChpbnB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IG15T3V0cHV0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChteU91dHB1dCk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdPdXRwdXQob3V0cHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBmYXVsdCkKLSAgewotICAgIEJpbmRpbmdGYXVsdCBteUZhdWx0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICBteUZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15RmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmFkZEJpbmRpbmdGYXVsdChteUZhdWx0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0ZhdWx0KGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBjdXJyZW50U2VydmljZSA9IG5ld0RlZmluaXRpb24uY3JlYXRlU2VydmljZSgpOwotICAgIGN1cnJlbnRTZXJ2aWNlLnNldERvY3VtZW50YXRpb25FbGVtZW50KHNlcnZpY2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0UU5hbWUoc2VydmljZS5nZXRRTmFtZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZFNlcnZpY2UoY3VycmVudFNlcnZpY2UpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIFBvcnQgbXlQb3J0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQb3J0KCk7Ci0gICAgbXlQb3J0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQb3J0LnNldE5hbWUocG9ydC5nZXROYW1lKCkpOwotICAgIG15UG9ydC5zZXRCaW5kaW5nKHBvcnQuZ2V0QmluZGluZygpKTsKLSAgICBjdXJyZW50U2VydmljZS5hZGRQb3J0KG15UG9ydCk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnQocG9ydCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KQotICB7Ci0gICAgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB2aXNpdFNPQVBCb2R5KChTT0FQQm9keSlleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgIHZpc2l0U09BUEJpbmRpbmcoKFNPQVBCaW5kaW5nKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgdmlzaXRTT0FQQWRkcmVzcygoU09BUEFkZHJlc3MpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgIHZpc2l0U09BUE9wZXJhdGlvbigoU09BUE9wZXJhdGlvbilleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQT3BlcmF0aW9uKFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbikKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBPcGVyYXRpb24uLi4iKTsKLSAgICBwcmludGxuKCJzb2FwQWN0aW9uOiAiICsgc29hcE9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJvZHkoU09BUEJvZHkgc29hcEJvZHkpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQQm9keS4uLiIpOwotICAgIHByaW50bG4oInVzZTogIiArIHNvYXBCb2R5LmdldFVzZSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBCb2R5Li4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQmluZGluZyhTT0FQQmluZGluZyBzb2FwQmluZGluZykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCaW5kaW5nLi4uIik7Ci0gICAgcHJpbnRsbigic3R5bGU6ICIgKyBzb2FwQmluZGluZy5nZXRTdHlsZSgpKTsKLSAgICBwcmludGxuKCJ0cmFuc3BvcnQ6ICIgKyBzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBTT0FQQmluZGluZy4uLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEFkZHJlc3MoU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQQWRkcmVzcy4uLiIpOwotICAgIHByaW50bG4oImxvY2F0aW9uOiAiICsgc29hcEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBTT0FQQWRkcmVzcy4uLiIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTREw0SkFQSVRlc3QoIk1vZGVsU2VtYW50aWNUZXN0IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0TW9kZWxTZW1hbnRpYygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTZW1hbnRpYygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IGxvYWREZWZpbml0aW9uRm9yV1NETDRKKCIuL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIFdTREw0SkFQSVRlc3QgdGVzdCA9IG5ldyBXU0RMNEpBUElUZXN0KGRlZik7Ci0gICAgICB0ZXN0LnZpc2l0KCk7Ci0gICAgICBzZXJpYWxpemUodGVzdC5uZXdEZWZpbml0aW9uLCAiLi9zYW1wbGVzL0Nsb25lZExvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIEFzc2VydC5mYWlsKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNlcmlhbGl6ZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBjbG9uZWRGaWxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBXU0RMV3JpdGVyIHdyaXRlciA9IGZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotICAgIC8vIFN0cmluZyBzID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBjbG9uZWRGaWxlOwotICAgIC8vIHdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgbmV3IEZpbGVPdXRwdXRTdHJlYW0ocykpOwotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGxvYWREZWZpbml0aW9uRm9yV1NETDRKKFN0cmluZyB3c2RsRmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICBTdHJpbmcgcyA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgd3NkbEZpbGU7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcmVhZGVyLnJlYWRXU0RMKHMsIG5ldyBJbnB1dFNvdXJjZShuZXcgRmlsZUlucHV0U3RyZWFtKHMpKSk7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEVNRkFQSVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMRU1GQVBJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmFjNWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMRU1GQVBJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFdTRExFTUZBUElUZXN0IGV4dGVuZHMgRGVmaW5pdGlvblZpc2l0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBEZWZpbml0aW9uIG5ld0RlZmluaXRpb247Ci0KLSAgcHJpdmF0ZSBNZXNzYWdlIGN1cnJlbnRNZXNzYWdlOwotCi0gIHByaXZhdGUgU2VydmljZSBjdXJyZW50U2VydmljZTsKLQotICBwcml2YXRlIFBvcnRUeXBlIGN1cnJlbnRQb3J0VHlwZTsKLQotICBwcml2YXRlIE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uOwotCi0gIHByaXZhdGUgQmluZGluZyBjdXJyZW50QmluZGluZzsKLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpYmxlRWxlbWVudCBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQ7Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBXU0RMRU1GQVBJVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqLwotICBwdWJsaWMgV1NETEVNRkFQSVRlc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICAvLyBVc2UgV1NETEVsZW1lbnQgdG8gaW5jcmVhc2UgdGhlIEFQSSBjb3ZlcmFnZSBpbiB0aGUgcmVwb3J0cwotICAgIFdTRExFbGVtZW50IHJvb3QgPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBuZXdEZWZpbml0aW9uID0gKERlZmluaXRpb24pcm9vdDsKLQotICAgIHJvb3Quc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZGVmLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIHJvb3QuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICByb290LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgcm9vdC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgcm9vdC5nZXRDb250YWluZXIoKTsKLQotICAgIG5ld0RlZmluaXRpb24uc2V0UU5hbWUoZGVmLmdldFFOYW1lKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldExvY2F0aW9uKGRlZi5nZXRMb2NhdGlvbigpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldEVuY29kaW5nKGRlZi5nZXRFbmNvZGluZygpKTsKLQotICAgIC8vIGdldEVOYW1lc3BhY2VzIGRvZXMgbm90IHdvcmsuCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWYuZ2V0RU5hbWVzcGFjZXMoKS5pdGVyYXRvcigpOwotICAgIE5hbWVzcGFjZSBucyA9IG51bGw7Ci0gICAgU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIHVyaSA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBucyA9IGZhY3RvcnkuY3JlYXRlTmFtZXNwYWNlKCk7Ci0gICAgICBwcmVmaXggPSAoKE5hbWVzcGFjZSlpdGVyYXRvci5uZXh0KCkpLmdldFByZWZpeCgpOwotICAgICAgdXJpID0gKChOYW1lc3BhY2UpaXRlcmF0b3IubmV4dCgpKS5nZXRVUkkoKTsKLSAgICAgIG5zLnNldFVSSSh1cmkpOwotICAgICAgbnMuc2V0UHJlZml4KHByZWZpeCk7Ci0gICAgICBuZXdEZWZpbml0aW9uLmdldEVOYW1lc3BhY2VzKCkuYWRkKG5zKTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXROYW1lc3BhY2VzKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgIG5ld0RlZmluaXRpb24uYWRkTmFtZXNwYWNlKHByZWZpeCwgbmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgLy9uZXdEZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IGRlZjsKLSAgICBzdXBlci52aXNpdERlZmluaXRpb24oZGVmKTsKLQotICAgIHJvb3Quc2V0RWxlbWVudChudWxsKTsKLSAgICByb290LnVwZGF0ZUVsZW1lbnQodHJ1ZSk7Ci0gICAgcm9vdC5nZXRFbGVtZW50KCk7Ci0gICAgcm9vdC5zZXRFbGVtZW50KG51bGwpOwotICAgIHJvb3QudXBkYXRlRWxlbWVudCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBJbXBvcnQgbXlJbXBvcnQgPSBmYWN0b3J5LmNyZWF0ZUltcG9ydCgpOwotICAgIG5ld0RlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5hZGQobXlJbXBvcnQpOwotCi0gICAgLy8gZS5nLiA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgIG15SW1wb3J0LnNldE5hbWVzcGFjZVVSSSh3c2RsSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteUltcG9ydC5zZXRMb2NhdGlvblVSSSh3c2RsSW1wb3J0LmdldExvY2F0aW9uVVJJKCkpOwotICAgIG15SW1wb3J0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHdzZGxJbXBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbXBvcnQuc2V0RURlZmluaXRpb24od3NkbEltcG9ydC5nZXRFRGVmaW5pdGlvbigpKTsKLSAgICBteUltcG9ydC5zZXRFU2NoZW1hKHdzZGxJbXBvcnQuZ2V0RVNjaGVtYSgpKTsKLSAgICBteUltcG9ydC5zZXRTY2hlbWEod3NkbEltcG9ydC5nZXRTY2hlbWEoKSk7Ci0gICAgbXlJbXBvcnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBUeXBlcyBteVR5cGVzID0gZmFjdG9yeS5jcmVhdGVUeXBlcygpOwotICAgIG15VHlwZXMuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodHlwZXMuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gbnVsbDsKLSAgICB0eXBlcy5nZXRTY2hlbWFzKCJodHRwOi8vdGVtcHVyaS5vcmcvTG9hZEFuZFByaW50VGVzdC8iKTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15VHlwZXM7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGVlKTsKLSAgICB9Ci0KLSAgICBteVR5cGVzLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldEVUeXBlcyhteVR5cGVzKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpCi0gIHsKLSAgICBQYXJ0IG15UGFydCA9IGZhY3RvcnkuY3JlYXRlUGFydCgpOwotICAgIG15UGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChwYXJ0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15UGFydC5zZXROYW1lKHBhcnQuZ2V0TmFtZSgpKTsKLSAgICBteVBhcnQuc2V0RWxlbWVudE5hbWUocGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBteVBhcnQuc2V0VHlwZU5hbWUocGFydC5nZXRUeXBlTmFtZSgpKTsKLSAgICBteVBhcnQuc2V0RU1lc3NhZ2UocGFydC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteVBhcnQuc2V0RWxlbWVudERlY2xhcmF0aW9uKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkpOwotICAgIG15UGFydC5zZXRUeXBlRGVmaW5pdGlvbihwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFFOYW1lIGtleSA9IG51bGw7Ci0gICAgUU5hbWUgdmFsdWUgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAga2V5ID0gKFFOYW1lKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZhbHVlID0gKFFOYW1lKXBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSk7Ci0gICAgICBteVBhcnQuc2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSwgdmFsdWUpOwotICAgIH0KLSAgICBjdXJyZW50TWVzc2FnZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICAgIGN1cnJlbnRNZXNzYWdlLmFkZFBhcnQobXlQYXJ0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBjdXJyZW50UG9ydFR5cGUgPSBmYWN0b3J5LmNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldERvY3VtZW50YXRpb25FbGVtZW50KHBvcnRUeXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXRRTmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0VW5kZWZpbmVkKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpOwotCi0gICAgY3VycmVudFBvcnRUeXBlLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuYWRkKGN1cnJlbnRQb3J0VHlwZSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50T3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE5hbWUob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRTdHlsZShvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRVbmRlZmluZWQob3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpOwotICAgIG9wZXJhdGlvbi5nZXRFUGFyYW1ldGVyT3JkZXJpbmcoKTsgLy8gVEJECi0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICAgIGN1cnJlbnRQb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLmFkZChjdXJyZW50T3BlcmF0aW9uKTsKLQotICAgIHN1cGVyLnZpc2l0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIk9wZXJhdGlvbiBUeXBlIGlzOiAiICsgb3BlcmF0aW9uLmdldFN0eWxlKCkpOwotICAgIC8vb3BlcmF0aW9uLnNldFN0eWxlKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIk9wZXJhdGlvbiBUeXBlIGlzOiAiICsgb3BlcmF0aW9uLmdldFN0eWxlKCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIGN1cnJlbnRNZXNzYWdlID0gZmFjdG9yeS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgY3VycmVudE1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZS5nZXRRTmFtZSgpKTsKLSAgICBjdXJyZW50TWVzc2FnZS5zZXRVbmRlZmluZWQobWVzc2FnZS5pc1VuZGVmaW5lZCgpKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZE1lc3NhZ2UoY3VycmVudE1lc3NhZ2UpOwotCi0gICAgc3VwZXIudmlzaXRNZXNzYWdlKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIE1lc3NhZ2VSZWZlcmVuY2UgbXlJbnB1dCA9IGZhY3RvcnkuY3JlYXRlSW5wdXQoKTsKLSAgICBteUlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15SW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgIG15SW5wdXQuZ2V0TmFtZSgpOwotICAgIG15SW5wdXQuc2V0RU1lc3NhZ2UoaW5wdXQuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgbXlJbnB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0RUlucHV0KChJbnB1dClteUlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBPdXRwdXQgbXlPdXRwdXQgPSBmYWN0b3J5LmNyZWF0ZU91dHB1dCgpOwotICAgIG15T3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteU91dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgIG15T3V0cHV0LnNldEVNZXNzYWdlKG91dHB1dC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteU91dHB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0RU91dHB1dChteU91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgRmF1bHQgbXlGYXVsdCA9IGZhY3RvcnkuY3JlYXRlRmF1bHQoKTsKLSAgICBteUZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15RmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgIG15RmF1bHQuc2V0RU1lc3NhZ2UoZmF1bHQuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgbXlGYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICAgIGN1cnJlbnRPcGVyYXRpb24uZ2V0RUZhdWx0cygpLmFkZChteUZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBjdXJyZW50QmluZGluZyA9IGZhY3RvcnkuY3JlYXRlQmluZGluZygpOwotICAgIG5ld0RlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuYWRkKGN1cnJlbnRCaW5kaW5nKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nLnNldERvY3VtZW50YXRpb25FbGVtZW50KGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0UU5hbWUoYmluZGluZy5nZXRRTmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRFUG9ydFR5cGUoYmluZGluZy5nZXRFUG9ydFR5cGUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0VW5kZWZpbmVkKGJpbmRpbmcuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQgPSBjdXJyZW50QmluZGluZzsKLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEVPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuYWRkKGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBpbnB1dCkKLSAgewotICAgIEJpbmRpbmdJbnB1dCBteUlucHV0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBteUlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15SW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgIG15SW5wdXQuc2V0SW5wdXQoaW5wdXQuZ2V0SW5wdXQoKSk7Ci0gICAgbXlJbnB1dC5zZXRFSW5wdXQoaW5wdXQuZ2V0RUlucHV0KCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEVCaW5kaW5nSW5wdXQobXlJbnB1dCk7Ci0KLSAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQgPSBteUlucHV0OwotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIEJpbmRpbmdPdXRwdXQgbXlPdXRwdXQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICBteU91dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TmFtZShvdXRwdXQuZ2V0TmFtZSgpKTsKLSAgICBteU91dHB1dC5zZXRPdXRwdXQob3V0cHV0LmdldE91dHB1dCgpKTsKLSAgICBteU91dHB1dC5zZXRFT3V0cHV0KG91dHB1dC5nZXRFT3V0cHV0KCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEVCaW5kaW5nT3V0cHV0KG15T3V0cHV0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15T3V0cHV0OwotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgQmluZGluZ0ZhdWx0IG15RmF1bHQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgbXlGYXVsdC5zZXRFRmF1bHQoZmF1bHQuZ2V0RUZhdWx0KCkpOwotICAgIG15RmF1bHQuc2V0RmF1bHQoZmF1bHQuZ2V0RmF1bHQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5hZGQobXlGYXVsdCk7Ci0KLSAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQgPSBteUZhdWx0OwotICAgIHN1cGVyLnZpc2l0QmluZGluZ0ZhdWx0KGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBjdXJyZW50U2VydmljZSA9IGZhY3RvcnkuY3JlYXRlU2VydmljZSgpOwotICAgIGN1cnJlbnRTZXJ2aWNlLnNldERvY3VtZW50YXRpb25FbGVtZW50KHNlcnZpY2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0UU5hbWUoc2VydmljZS5nZXRRTmFtZSgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRVbmRlZmluZWQoc2VydmljZS5pc1VuZGVmaW5lZCgpKTsKLQotICAgIG5ld0RlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuYWRkKGN1cnJlbnRTZXJ2aWNlKTsKLQotICAgIHN1cGVyLnZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydChQb3J0IHBvcnQpCi0gIHsKLSAgICBQb3J0IG15UG9ydCA9IGZhY3RvcnkuY3JlYXRlUG9ydCgpOwotICAgIG15UG9ydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15UG9ydC5zZXROYW1lKHBvcnQuZ2V0TmFtZSgpKTsKLSAgICBteVBvcnQuc2V0RUJpbmRpbmcocG9ydC5nZXRFQmluZGluZygpKTsKLQotICAgIGN1cnJlbnRTZXJ2aWNlLmdldEVQb3J0cygpLmFkZChteVBvcnQpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlQb3J0OwotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KQotICB7Ci0gICAgLy8gVG8gbW92ZSB1cCB0aGUgQVBJIHRlc3QgY292ZXJhZ2UKLSAgICBvd25lci5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgb3duZXIuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZmFjdG9yeS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIFdTRExQbHVnaW4uZ2V0UGx1Z2luKCk7Ci0gICAgV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKTsKLQotICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2VlID0gbnVsbDsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdWVlID0gbnVsbDsKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBteUVFID0gbnVsbDsKLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICBteUVFID0gZmFjdG9yeS5jcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgeHNlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClteUVFOwotICAgICAgeHNlZS5zZXRTY2hlbWEoKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudCkuZ2V0U2NoZW1hKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbXlFRSA9IGZhY3RvcnkuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB1ZWUgPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KW15RUU7Ci0gICAgICB1ZWUuZ2V0Q2hpbGRyZW4oKTsgLy8gVEJECi0gICAgfQotICAgIG15RUUuc2V0RWxlbWVudFR5cGUoZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKSk7Ci0gICAgbXlFRS5zZXRSZXF1aXJlZChleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRSZXF1aXJlZCgpKTsKLSAgICBteUVFLnNldFJlcXVpcmVkKGV4dGVuc2liaWxpdHlFbGVtZW50LmlzUmVxdWlyZWQoKSk7Ci0gICAgaWYgKGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCAhPSBudWxsKQotICAgICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KG15RUUpOwotCi0gICAgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB2aXNpdFNPQVBCb2R5KChTT0FQQm9keSlleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgIHZpc2l0U09BUEJpbmRpbmcoKFNPQVBCaW5kaW5nKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgdmlzaXRTT0FQQWRkcmVzcygoU09BUEFkZHJlc3MpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgIHZpc2l0U09BUE9wZXJhdGlvbigoU09BUE9wZXJhdGlvbilleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQRmF1bHQpCi0gICAgICB2aXNpdFNPQVBGYXVsdCgoU09BUEZhdWx0KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpCi0gICAgICB2aXNpdFNPQVBIZWFkZXIoKFNPQVBIZWFkZXIpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEhlYWRlckZhdWx0KQotICAgICAgdmlzaXRTT0FQSGVhZGVyRmF1bHQoKFNPQVBIZWFkZXJGYXVsdClleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQRmF1bHQoU09BUEZhdWx0IHNvYXBGYXVsdCkKLSAgewotICAgIFNPQVBGYXVsdCBteVNvYXBGYXVsdCA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQRmF1bHQoKTsKLSAgICBteVNvYXBGYXVsdC5zZXRFbmNvZGluZ1N0eWxlcyhzb2FwRmF1bHQuZ2V0RW5jb2RpbmdTdHlsZXMoKSk7Ci0gICAgbXlTb2FwRmF1bHQuc2V0TmFtZShzb2FwRmF1bHQuZ2V0TmFtZSgpKTsKLSAgICBteVNvYXBGYXVsdC5zZXROYW1lc3BhY2VVUkkoc29hcEZhdWx0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBGYXVsdC5zZXRVc2Uoc29hcEZhdWx0LmdldFVzZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBIZWFkZXIoU09BUEhlYWRlciBzb2FwSGVhZGVyKQotICB7Ci0gICAgLy8gVXNlIFNPQVBIZWFkZXJCYXNlIHRvIGluY3JlYXNlIHRoZSBBUEkgY292ZXJhZ2UgdmFsdWVzIGluIHRoZSByZXBvcnRzCi0KLSAgICBTT0FQSGVhZGVyQmFzZSB5b3VyU29hcEhlYWRlciA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQSGVhZGVyQmFzZSgpOwotICAgIHlvdXJTb2FwSGVhZGVyLmdldEVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgICBTT0FQSGVhZGVyQmFzZSBteVNvYXBIZWFkZXIgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlcigpOwotICAgIG15U29hcEhlYWRlci5zZXRNZXNzYWdlKHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgIG15U29hcEhlYWRlci5zZXRQYXJ0KHNvYXBIZWFkZXIuZ2V0UGFydCgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0UGFydCgpOwotICAgIG15U29hcEhlYWRlci5zZXROYW1lc3BhY2VVUkkoc29hcEhlYWRlci5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgbXlTb2FwSGVhZGVyLmdldE5hbWVzcGFjZVVSSSgpOwotICAgIG15U29hcEhlYWRlci5zZXRVc2Uoc29hcEhlYWRlci5nZXRVc2UoKSk7Ci0gICAgbXlTb2FwSGVhZGVyLmdldFVzZSgpOwotICAgICgoU09BUEhlYWRlcilzb2FwSGVhZGVyKS5nZXRIZWFkZXJGYXVsdHMoKTsgLy8gVEJECi0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQSGVhZGVyRmF1bHQoU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCkKLSAgewotICAgIFNPQVBIZWFkZXJGYXVsdCBteVNvYXBIZWFkZXJGYXVsdCA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQSGVhZGVyRmF1bHQoKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXRNZXNzYWdlKHNvYXBIZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCkpOwotICAgIG15U29hcEhlYWRlckZhdWx0LnNldFBhcnQoc29hcEhlYWRlckZhdWx0LmdldFBhcnQoKSk7Ci0gICAgbXlTb2FwSGVhZGVyRmF1bHQuc2V0TmFtZXNwYWNlVVJJKHNvYXBIZWFkZXJGYXVsdC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgbXlTb2FwSGVhZGVyRmF1bHQuc2V0VXNlKHNvYXBIZWFkZXJGYXVsdC5nZXRVc2UoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQT3BlcmF0aW9uKFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbikKLSAgewotICAgIFNPQVBPcGVyYXRpb24gbXlTb2FwT3BlcmF0aW9uID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLSAgICBteVNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKSk7Ci0gICAgbXlTb2FwT3BlcmF0aW9uLnNldFN0eWxlKHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQm9keShTT0FQQm9keSBzb2FwQm9keSkKLSAgewotICAgIFNPQVBCb2R5IG15U29hcEJvZHkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBteVNvYXBCb2R5LnNldEVuY29kaW5nU3R5bGVzKHNvYXBCb2R5LmdldEVuY29kaW5nU3R5bGVzKCkpOwotICAgIG15U29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBCb2R5LnNldFBhcnRzKHNvYXBCb2R5LmdldFBhcnRzKCkpOwotICAgIG15U29hcEJvZHkuc2V0VXNlKHNvYXBCb2R5LmdldFVzZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgU09BUEJpbmRpbmcgbXlTb2FwQmluZGluZyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgIG15U29hcEJpbmRpbmcuc2V0U3R5bGUoc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0gICAgbXlTb2FwQmluZGluZy5zZXRUcmFuc3BvcnRVUkkoc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEFkZHJlc3MoU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MpCi0gIHsKLSAgICBTT0FQQWRkcmVzcyBteVNvYXBBZGRyZXNzID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgbXlTb2FwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMRU1GQVBJVGVzdCgiTW9kZWxTZW1hbnRpY1Rlc3QiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNb2RlbFNlbWFudGljKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNb2RlbFNlbWFudGljKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiLCB0cnVlKTsKLSAgICAgIFdTRExFTUZBUElUZXN0IHRlc3QgPSBuZXcgV1NETEVNRkFQSVRlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICAgIHNlcmlhbGl6ZSh0ZXN0Lm5ld0RlZmluaXRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIEFzc2VydC5mYWlsKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNlcmlhbGl6ZShEZWZpbml0aW9uIGRlZikgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIndzZGwiLCBuZXcgV1NETFJlc291cmNlRmFjdG9yeUltcGwoKSk7Ci0gICAgV1NETFJlc291cmNlSW1wbCB3c2RsTWFpblJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotICAgIHdzZGxNYWluUmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmKTsKLQotICAgIElXb3Jrc3BhY2VSb290IG15V29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgSVByb2plY3QgbXlXZWJQcm9qZWN0ID0gbXlXb3Jrc3BhY2VSb290LmdldFByb2plY3QoIm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIik7Ci0gICAgaWYgKCFteVdlYlByb2plY3QuZXhpc3RzKCkpCi0gICAgICBteVdlYlByb2plY3QuY3JlYXRlKG51bGwpOwotCi0gICAgU3RyaW5nIGJhc2VEaXIgPSBteVdlYlByb2plY3QuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCi0gICAgRGVmaW5pdGlvbkxvYWRlci5zdG9yZShkZWYsIGJhc2VEaXIgKyAiL0Nsb25lZExvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExHZW5lcmF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExHZW5lcmF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2E5YjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMR2VuZXJhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci0KLQotcHVibGljIGNsYXNzIFdTRExHZW5lcmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHB1YmxpYyBXU0RMR2VuZXJhdGlvblRlc3QoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgV1NETEdlbmVyYXRpb25UZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgV1NETEdlbmVyYXRpb25UZXN0KCJTYW1wbGVXU0RMR2VuZXJhdGlvbiIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFNhbXBsZVdTRExHZW5lcmF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNhbXBsZVdTRExHZW5lcmF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGdlbmVyYXRlVGVtcGVyYXR1cmVTZXJ2aWNlKFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCkgKyJzYW1wbGVzL2dlbmVyYXRlZC9UZW1wZXJhdHVyZVNlcnZpY2Uud3NkbCIpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVUZW1wZXJhdHVyZVNlcnZpY2UoU3RyaW5nIG91dHB1dEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZUZpbGVVUkkob3V0cHV0RmlsZSkpOwotICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLmFkZChyZXNvdXJjZSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBEZWZpbml0aW9uIC0gVGVtcGVyYXR1cmUKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCAiVGVtcGVyYXR1cmUiKSk7Ci0gICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBUYXJnZXQgbmFtZXNwYWNlIC0gaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20KLSAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tIik7Ci0KLSAgICAvLyBPdGhlciBuYW1lc3BhY2VzIC0gd3NkbCwgc29hcCwgeHNkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoIndzZGwiLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInhzZCIsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgIGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpLnB1dCgic29hcCIsIFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJKTsKLQotICAgIC8vCi0gICAgLy8gTGV0J3Mgc3RhcnQgYnVpbGRpbmcgdHdvIG1lc3NhZ2VzCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIFBhcnQgLSBaaXBDb2RlCi0gICAgUGFydCBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICBwYXJ0LnNldE5hbWUoIlppcENvZGUiKTsKLSAgICBwYXJ0LnNldFR5cGVOYW1lKG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIikpOwotCi0gICAgLy8gQ3JlYXRlIGEgTWVzc2FnZSAtIEdldFRlbXBlcmF0dXJlSW5wdXQKLSAgICBNZXNzYWdlIGlucHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgaW5wdXRNZXNzYWdlLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiR2V0VGVtcGVyYXR1cmVJbnB1dCIpKTsKLSAgICBpbnB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UoaW5wdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhIFBhcnQgLSBUZW1wZXJhdHVyZQotICAgIHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiVGVtcGVyYXR1cmUiKTsKLSAgICBwYXJ0LnNldFR5cGVOYW1lKG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAiZmxvYXQiKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVPdXRwdXQKLSAgICBNZXNzYWdlIG91dHB1dE1lc3NhZ2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG91dHB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZU91dHB1dCIpKTsKLSAgICBvdXRwdXRNZXNzYWdlLmFkZFBhcnQocGFydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG91dHB1dE1lc3NhZ2UpOwotCi0gICAgLy8KLSAgICAvLyBOZXh0LCBidWlsZCBhIFBvcnRUeXBlCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhbiBJbnB1dCAtIEdldFRlbXBlcmF0dXJlSW5wdXQKLSAgICBJbnB1dCBpbnB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAgIGlucHV0LnNldE1lc3NhZ2UoaW5wdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPdXRwdXQgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE91dHB1dCBvdXRwdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3V0cHV0KCk7Ci0gICAgb3V0cHV0LnNldE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gT3BlcmF0aW9uIC0gR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBvcGVyYXRpb24uc2V0TmFtZSgiR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgb3BlcmF0aW9uLnNldElucHV0KGlucHV0KTsKLSAgICBvcGVyYXRpb24uc2V0T3V0cHV0KG91dHB1dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBQb3J0VHlwZQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgcG9ydFR5cGUuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUluZm9TT0FQIikpOwotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkUG9ydFR5cGUocG9ydFR5cGUpOwotCi0gICAgLy8KLSAgICAvLyBOb3csIGxldCdzIHdvcmsgb24gQmluZGluZwotICAgIC8vCi0KLSAgICAvLyBDcmVhdGUgYSBCaW5kaW5nIC0gR2V0VGVtcGVyYXR1cmVJbmZvU09BUAotICAgIEJpbmRpbmcgYmluZGluZyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgYmluZGluZy5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBCaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEJpbmRpbmcoKTsKLSAgICBzb2FwQmluZGluZy5zZXRTdHlsZSgicnBjIik7Ci0gICAgc29hcEJpbmRpbmcuc2V0VHJhbnNwb3J0VVJJKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiKTsKLSAgICBiaW5kaW5nLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCaW5kaW5nKTsKLQotICAgIC8vIENyZWF0ZSBhIEJpbmRpbmcgT3BlcmF0aW9uCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUoIkdldFRlbXBlcmF0dXJlRm9yWmlwQ29kZSIpOwotICAgIGJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgIC8vIENyZWF0ZSBhIFNPQVAgT3BlcmF0aW9uCi0gICAgU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLSAgICBzb2FwT3BlcmF0aW9uLnNldFNvYXBBY3Rpb25VUkkoImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tL0dldFRlbXBlcmF0dXJlRm9yWmlwQ29kZSIpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEJvZHkKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQm9keSgpOwotICAgIHNvYXBCb2R5LnNldFVzZSgiZW5jb2RlZCIpOwotICAgIHNvYXBCb2R5LmdldEVuY29kaW5nU3R5bGVzKCkuYWRkKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIpOwotICAgIHNvYXBCb2R5LnNldE5hbWVzcGFjZVVSSSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20vIik7Ci0KLSAgICAvLyBBZGQgYSBwYXJ0IChUZW1wZXJhdHVyZSkgdG8gdGhlIFNPQVAgYm9keSAoQnVnemlsbGEgMTA4MTc2KQotICAgIGphdmEudXRpbC5WZWN0b3IgdiA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgdi5hZGQocGFydCk7Ci0gICAgc29hcEJvZHkuc2V0UGFydHModik7Ci0gICAgKChTT0FQQm9keUltcGwpc29hcEJvZHkpLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIC8vIENyZWF0ZSBhIEJpbmRpbmcgSW5wdXQKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQoYmluZGluZ0lucHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFNPQVAgQm9keQotICAgIHNvYXBCb2R5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKCJlbmNvZGVkIik7Ci0gICAgc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKS5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbS8iKTsKLQotICAgIC8vIENyZWF0ZSBhIEJpbmRpbmcgT3V0cHV0Ci0gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3VwdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgIGJpbmRpbmdPdXB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXB1dCk7Ci0KLSAgICAvLwotICAgIC8vIEZpbmFsbHksIHdlIGFyZSBidWlsZGluZyBhIFNlcnZpY2UKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBBZGRyZXNzCi0gICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICBzb2FwQWRkcmVzcy5zZXRMb2NhdGlvblVSSSgiaHR0cDovL3RvZG8tc29tZS1hZGRyZXNzLyIpOwotCi0gICAgLy8gQ3JlYXRlIGEgUG9ydCAtIEdldFRlbXBlcmF0dXJlSW5mb1NPQVAKLSAgICBQb3J0IHBvcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydCgpOwotICAgIHBvcnQuc2V0TmFtZSgiR2V0VGVtcGVyYXR1cmVJbmZvU09BUCIpOwotICAgIHBvcnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICBwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBBZGRyZXNzKTsKLQotICAgIC8vIENyZWF0ZSBhIFNlcnZpY2UgLSBUZW1wZXJhdHVyZVNlcnZpY2UKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2VydmljZSgpOwotICAgIHNlcnZpY2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJUZW1wZXJhdHVyZVNlcnZpY2UiKSk7Ci0gICAgc2VydmljZS5hZGRQb3J0KHBvcnQpOwotICAgIGRlZmluaXRpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLQotICAgIC8vCi0gICAgLy8gUGhldywgd2UgYXJlIGRvbmUuIExldCdzIHNlcmlhbGl6ZSBpdC4KLSAgICAvLwotCi0gICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETFRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETFRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZDQ2MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSCgKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnLWluIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotICBwcml2YXRlIHN0YXRpYyBXU0RMVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0gIC8vUmVzb3VyY2UgYnVuZGxlLgotICBwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGU7Ci0KLSAgLyoqCi0gICAqIFRoZSBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMVGVzdHNQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBwbHVnaW4gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChjb250ZXh0KTsKLSAgICBwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICAgIHBsdWdpbiA9IG51bGw7Ci0gICAgcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotICAgIHBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcGx1Z2luOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0gICAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpCi0gIHsKLSAgICBSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBXU0RMVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4ga2V5OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHJlc291cmNlQnVuZGxlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KQotICAgIHsKLSAgICAgIHJlc291cmNlQnVuZGxlID0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc291cmNlQnVuZGxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnLWluLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnLWluCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvSFRUUEV4dGVuc2lvbnNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9IVFRQRXh0ZW5zaW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4Yjk4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9IVFRQRXh0ZW5zaW9uc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuZXh0ZW5zaW9uczsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybEVuY29kZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yLkhUVFBDb250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgSFRUUCBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgSFRUUEV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgV1NETEV4dGVuc2lvbnNUZXN0Ci17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRERSRVNTX0xPQ0FUSU9OX1VSSSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIVFRQRmFjdG9yeSBIVFRQX0ZBQ1RPUlkgPSBIVFRQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfTE9DQVRJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUFRlc3QvTmV3T3BlcmF0aW9uIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfTkFNRVNQQUNFID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUFRlc3QvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJCX0dFVCA9ICJHRVQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfUFVUID0gIlBVVCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEhUVFBFeHRlbnNpb25zVGVzdCgiSFRUUEV4dGVuc2lvbnNDcmVhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SFRUUEV4dGVuc2lvbnNDcmVhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEhUVFBFeHRlbnNpb25zVGVzdCgiRU1GU2VyaWFsaXphdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RU1GU2VyaWFsaXphdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEhUVFBFeHRlbnNpb25zVGVzdCgiSFRUUEV4dGVuc2lvbnNSZWNvbmNpbGlhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SFRUUEV4dGVuc2lvbnNSZWNvbmNpbGlhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEhUVFBFeHRlbnNpb25zVGVzdCgiSFRUUENvbnRlbnRHZW5lcmF0b3IiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEhUVFBDb250ZW50R2VuZXJhdG9yKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIEhUVFBFeHRlbnNpb25zVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBFeHRlbnNpb25zQ3JlYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBUZXN0LndzZGwiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSAiSFRUUFRlc3RIVFRQIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBhZGRIVFRQQmluZGluZyhiaW5kaW5nKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKCJOZXdPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBhZGRIVFRQT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCk7Ci0KLSAgICAgIGFkZEhUVFBCaW5kaW5nSW5wdXQoYmluZGluZ0lucHV0KTsKLQotICAgICAgYWRkSFRUUEFkZHJlc3MoZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIkhUVFBFeGFtcGxlIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0hUVFBFeGFtcGxlLyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgc2VydmljZS50b1N0cmluZygpOwotCi0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIkhUVFBFeGFtcGxlSFRUUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IChIVFRQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBodHRwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIsIGxvY2F0aW9uVVJJKTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbigKLSAgICAgICAgaHR0cEFkZHJlc3MsCi0gICAgICAgIEhUVFBDb25zdGFudHMuTE9DQVRJT05fVVJJX0FUVFJJQlVURSwKLSAgICAgICAgInRlc3QiLAotICAgICAgICBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJIVFRQRXhhbXBsZUhUVFAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBiaW5kaW5nTmFtZSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEhUVFBCaW5kaW5nIGh0dHBCaW5kaW5nID0gKEhUVFBCaW5kaW5nKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyB2ZXJiID0gaHR0cEJpbmRpbmcuZ2V0VmVyYigpOwotICAgICAgYXNzZXJ0RXF1YWxzKFZFUkJfR0VULCB2ZXJiKTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbihodHRwQmluZGluZywgSFRUUENvbnN0YW50cy5WRVJCX0FUVFJJQlVURSwgVkVSQl9QVVQsIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfQklORElOR19fVkVSQik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBsb2FkcyBhIFdTREwgbW9kZWwgdGhlbiBzYXZlcyBpdCB1c2luZyB0aGUgZGVmYXVsdCBFTUYgc2VyaWFsaXphdGlvbgotICAgKiBpbnN0ZWFkIG9mIHRoZSBXU0RMIFhNTCBmb3JtYXQsIHRoZW4gbG9hZHMgaXQgYWdhaW4uIFRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UKLSAgICogdGhlIEVNRiBlKiBtZXRob2RzIHRvIGFpZCBpbiBpZGVudGlmeWluZyByZWFsIGNvZGUgY292ZXJhZ2UgaXNzdWVzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RU1GU2VyaWFsaXphdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUEV4YW1wbGUud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL2dlbmVyYXRlZC9IVFRQRXhhbXBsZS54bWwiKTsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7Ci0gICAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gICAgICByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICAgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoZmlsZVVSSSwgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RIVFRQQ29udGVudEdlbmVyYXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIEhUVFBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSAoSFRUUENvbnRlbnRHZW5lcmF0b3IpQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWUoCi0gICAgICAgICJIVFRQIik7Ci0gICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSAiaHR0cDovL3Rlc3Qub3JnL2V4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBjb250ZW50R2VuZXJhdG9yLnNldEFkZHJlc3NMb2NhdGlvbihsb2NhdGlvblVSSSk7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLnNldFZlcmIoSFRUUENvbnRlbnRHZW5lcmF0b3IuVkVSQl9HRVQpOwotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiSFRUUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUoVEFSR0VUX05BTUVTUEFDRSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiSFRUUFRlc3RIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygwLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudChwb3J0KTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgICBhc3NlcnRUcnVlKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpOwotICAgICAgSFRUUEFkZHJlc3MgaHR0cEFkZHJlc3MgPSAoSFRUUEFkZHJlc3MpZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gICAgICBhc3NlcnRFcXVhbHMobG9jYXRpb25VUkksIGh0dHBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUoVEFSR0VUX05BTUVTUEFDRSwgIkhUVFBUZXN0SFRUUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCAiSFRUUFRlc3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShwb3J0VHlwZVFOYW1lKTsKLQotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdDb250ZW50KGJpbmRpbmcsIHBvcnRUeXBlKTsKLQotICAgICAgLy8gVE9ETyBDb21wbGV0ZSB0aGlzIHRlc3QuCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBBZGRyZXNzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBBZGRyZXNzKCk7Ci0gICAgaHR0cEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoQUREUkVTU19MT0NBVElPTl9VUkkpOwotCi0gICAgaHR0cEFkZHJlc3MudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9ICJIVFRQVGVzdCI7IC8vJE5PTi1OTFMtMSQKLSAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUoVEFSR0VUX05BTUVTUEFDRSwgc2VydmljZU5hbWUpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgIHNlcnZpY2UudG9TdHJpbmcoKTsKLQotICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiSFRUUFRlc3RIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgICBwb3J0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkSFRUUEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgYmluZGluZy50b1N0cmluZygpOwotCi0gICAgSFRUUEJpbmRpbmcgaHR0cEJpbmRpbmcgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUEJpbmRpbmcoKTsKLSAgICBiaW5kaW5nLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBCaW5kaW5nKTsKLQotICAgIGh0dHBCaW5kaW5nLnNldFZlcmIoVkVSQl9HRVQpOwotCi0gICAgaHR0cEJpbmRpbmcudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRIVFRQQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBiaW5kaW5nSW5wdXQudG9TdHJpbmcoKTsKLQotICAgIEhUVFBVcmxFbmNvZGVkIGh0dHBVUkxFbmNvZGVkID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBVcmxFbmNvZGVkKCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBVUkxFbmNvZGVkKTsKLQotICAgIGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5jbGVhcigpOwotCi0gICAgSFRUUFVybFJlcGxhY2VtZW50IGh0dHBVUkxSZXBsYWNlbWVudCA9IEhUVFBfRkFDVE9SWS5jcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVSTFJlcGxhY2VtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRIVFRQT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGJpbmRpbmdPcGVyYXRpb24udG9TdHJpbmcoKTsKLQotICAgIEhUVFBPcGVyYXRpb24gaHR0cE9wZXJhdGlvbiA9IEhUVFBfRkFDVE9SWS5jcmVhdGVIVFRQT3BlcmF0aW9uKCk7Ci0KLSAgICBodHRwT3BlcmF0aW9uLnNldExvY2F0aW9uVVJJKEhUVFBfTE9DQVRJT05fVVJJKTsKLQotICAgIGh0dHBPcGVyYXRpb24udG9TdHJpbmcoKTsKLQotICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9NSU1FRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL01JTUVFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzhhMmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL01JTUVFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogVGVzdHMgdGhlIE1JTUUgYmluZGluZyBleHRlbnNpb25zLiAKLSAqLwotcHVibGljIGNsYXNzIE1JTUVFeHRlbnNpb25zVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1JTUVGYWN0b3J5IE1JTUVfRkFDVE9SWSA9IE1JTUVGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTT0FQRmFjdG9yeSBTT0FQX0ZBQ1RPUlkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX05BTUVTUEFDRSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVUZXN0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgTUlNRUV4dGVuc2lvbnNUZXN0KCJNSU1FRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNSU1FRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgTUlNRUV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNSU1FRU1GU2VyaWFsaXphdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IE1JTUVFeHRlbnNpb25zVGVzdCgiTUlNRUV4dGVuc2lvbnNSZWNvbmNpbGlhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0TUlNRUV4dGVuc2lvbnNSZWNvbmNpbGlhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyBNSU1FRXh0ZW5zaW9uc1Rlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNSU1FRXh0ZW5zaW9uc0NyZWF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FVGVzdC53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIk1JTUVUZXN0QmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBiaW5kaW5nTmFtZSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKCJ0ZXN0T3BlcmF0aW9uIiwgbnVsbCwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpOwotCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtdWx0aXBhcnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLSAgICAgIGJpbmRpbmdPdXRwdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQobXVsdGlwYXJ0KTsKLSAgICAgIG11bHRpcGFydC50b1N0cmluZygpOwotICAgICAgRWxlbWVudCBtdWx0aXBhcnRFbGVtZW50ID0gbXVsdGlwYXJ0LmdldEVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwobXVsdGlwYXJ0RWxlbWVudCk7Ci0KLSAgICAgIE1JTUVQYXJ0IG1pbWVQYXJ0ID0gTUlNRV9GQUNUT1JZLmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICBtdWx0aXBhcnQuYWRkTUlNRVBhcnQobWltZVBhcnQpOwotICAgICAgRWxlbWVudCBtaW1lUGFydEVsZW1lbnQgPSBtaW1lUGFydC5nZXRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBtaW1lUGFydEVsZW1lbnRzID0gbXVsdGlwYXJ0RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBNSU1FQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1pbWVQYXJ0RWxlbWVudHMuZ2V0TGVuZ3RoKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKG1pbWVQYXJ0RWxlbWVudCwgbWltZVBhcnRFbGVtZW50cy5pdGVtKDApKTsKLQotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICAgIHNvYXBCb2R5LnNldFVzZSgibGl0ZXJhbCIpOwotICAgICAgbWltZVBhcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJvZHkpOwotICAgICAgbWltZVBhcnQudG9TdHJpbmcoKTsKLSAgICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtZW50ID0gc29hcEJvZHkuZ2V0RWxlbWVudCgpOwotICAgICAgTm9kZUxpc3Qgc29hcEJvZHlFbGVtZW50cyA9IG1pbWVQYXJ0RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkJPRFlfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNvYXBCb2R5RWxlbWVudHMuZ2V0TGVuZ3RoKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKHNvYXBCb2R5RWxlbWVudCwgc29hcEJvZHlFbGVtZW50cy5pdGVtKDApKTsKLSAgICAgIAotICAgICAgbWltZVBhcnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRVBhcnQoKTsKLSAgICAgIG11bHRpcGFydC5hZGRNSU1FUGFydChtaW1lUGFydCk7Ci0KLSAgICAgIE1JTUVDb250ZW50IG1pbWVDb250ZW50ID0gTUlNRV9GQUNUT1JZLmNyZWF0ZU1JTUVDb250ZW50KCk7Ci0gICAgICBtaW1lQ29udGVudC5zZXRQYXJ0KCJyZXNwb25zZURhdGEiKTsKLSAgICAgIG1pbWVDb250ZW50LnNldFR5cGUoInRleHQvYmluYXJ5Iik7Ci0gICAgICBtaW1lQ29udGVudC50b1N0cmluZygpOwotICAgICAgCi0gICAgICBtaW1lUGFydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lQ29udGVudCk7Ci0gICAgICAKLSAgICAgIG1pbWVQYXJ0RWxlbWVudCA9IG1pbWVQYXJ0LmdldEVsZW1lbnQoKTsKLSAgICAgIG1pbWVQYXJ0RWxlbWVudHMgPSBtdWx0aXBhcnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMiwgbWltZVBhcnRFbGVtZW50cy5nZXRMZW5ndGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWltZVBhcnRFbGVtZW50LCBtaW1lUGFydEVsZW1lbnRzLml0ZW0oMSkpOwotICAgICAgCi0gICAgICBMaXN0IG1pbWVQYXJ0cyA9IG11bHRpcGFydC5nZXRNSU1FUGFydHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygyLCBtaW1lUGFydHMuc2l6ZSgpKTsKLSAgICAgIAotICAgICAgTUlNRU1pbWVYbWwgbWltZVhNTCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FTWltZVhtbCgpOwotICAgICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lWE1MKTsKLSAgICAgIG1pbWVYTUwuc2V0UGFydCgieG1sRGF0YSIpOwotICAgICAgbWltZVhNTC50b1N0cmluZygpOwotICAgICAgCi0gICAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZmluaXRpb24sICJzYW1wbGVzL2dlbmVyYXRlZC9NSU1FVGVzdE91dC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJNSU1FRXhhbXBsZUJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBiaW5kaW5nTmFtZSk7Ci0gICAgICBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RNSU1FRU1GU2VyaWFsaXphdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL2dlbmVyYXRlZC9NSU1FRXhhbXBsZS54bWwiKTsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7Ci0gICAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gICAgICByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICAgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoZmlsZVVSSSwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9TT0FQRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1NPQVBFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDRjMmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1NPQVBFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuZ2VuZXJhdG9yLlNPQVBDb250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogVGVzdHMgdGhlIFNPQVAgYmluZGluZyBleHRlbnNpb25zLiAKLSAqLwotcHVibGljIGNsYXNzIFNPQVBFeHRlbnNpb25zVGVzdCBleHRlbmRzIFdTRExFeHRlbnNpb25zVGVzdAotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9UUkFOU1BPUlRfVVJJID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQUNUSU9OX1VSSSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NPQVBUZXN0L05ld09wZXJhdGlvbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU09BUEZhY3RvcnkgU09BUF9GQUNUT1JZID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9ET0NVTUVOVCA9ICJkb2N1bWVudCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfUlBDID0gInJwYyI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0xJVEVSQUwgPSAibGl0ZXJhbCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0VOQ09ERUQgPSAiZW5jb2RlZCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFNPQVBFeHRlbnNpb25zVGVzdCgiU09BUEV4dGVuc2lvbnNDcmVhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U09BUEV4dGVuc2lvbnNDcmVhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFNPQVBFeHRlbnNpb25zVGVzdCgiRU1GU2VyaWFsaXphdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RU1GU2VyaWFsaXphdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFNPQVBFeHRlbnNpb25zVGVzdCgiU09BUEV4dGVuc2lvbnNSZWNvbmNpbGlhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U09BUEV4dGVuc2lvbnNSZWNvbmNpbGlhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFNPQVBFeHRlbnNpb25zVGVzdCgiU09BUENvbnRlbnRHZW5lcmF0b3IiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFNPQVBDb250ZW50R2VuZXJhdG9yKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIFNPQVBFeHRlbnNpb25zVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBFeHRlbnNpb25zQ3JlYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1NPQVBUZXN0LndzZGwiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSAiU09BUFRlc3RTT0FQIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NPQVBUZXN0LyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBhZGRTT0FQQmluZGluZyhiaW5kaW5nKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKCJOZXdPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBhZGRTT0FQT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nSW5wdXQoYmluZGluZ0lucHV0KTsKLQotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpOwotCi0gICAgICBhZGRTT0FQQmluZGluZ091dHB1dChiaW5kaW5nT3V0cHV0KTsKLQotICAgICAgU3RyaW5nIGZhdWx0TmFtZSA9ICJmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KGZhdWx0TmFtZSk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nRmF1bHQoYmluZGluZ0ZhdWx0KTsKLQotICAgICAgYWRkU09BUEFkZHJlc3MoZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTT0FQQ29udGVudEdlbmVyYXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvU09BUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFNPQVBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSAoU09BUENvbnRlbnRHZW5lcmF0b3IpQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWUoCi0gICAgICAgICJTT0FQIik7Ci0gICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSAiaHR0cDovL3Rlc3Qub3JnL2V4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBjb250ZW50R2VuZXJhdG9yLnNldEFkZHJlc3NMb2NhdGlvbihsb2NhdGlvblVSSSk7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX0RPQ1VNRU5UKTsKLQotICAgICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIlNPQVBUZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NPQVBUZXN0LyI7IC8vJE5PTi1OTFMtMSQgCi0gICAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBzZXJ2aWNlTmFtZSk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLQotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJTT0FQVGVzdFNPQVAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDAsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KHBvcnQpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICAgIGFzc2VydFRydWUoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyk7Ci0gICAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgIGFzc2VydEVxdWFscyhsb2NhdGlvblVSSSwgc29hcEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKSk7Ci0KLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJTT0FQVGVzdFNPQVAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiU09BUFRlc3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShwb3J0VHlwZVFOYW1lKTsKLQotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdDb250ZW50KGJpbmRpbmcsIHBvcnRUeXBlKTsKLQotICAgICAgLy8gVE9ETyBDb21wbGV0ZSB0aGlzIHRlc3QuCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBsb2FkcyBhIFdTREwgbW9kZWwgdGhlbiBzYXZlcyBpdCB1c2luZyB0aGUgZGVmYXVsdCBFTUYgc2VyaWFsaXphdGlvbgotICAgKiBpbnN0ZWFkIG9mIHRoZSBXU0RMIFhNTCBmb3JtYXQsIHRoZW4gbG9hZHMgaXQgYWdhaW4uIFRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UKLSAgICogdGhlIEVNRiBlKiBtZXRob2RzIHRvIGFpZCBpbiBpZGVudGlmeWluZyByZWFsIGNvZGUgY292ZXJhZ2UgaXNzdWVzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RU1GU2VyaWFsaXphdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL2dlbmVyYXRlZC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS54bWwiKTsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7Ci0gICAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gICAgICByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICAgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoZmlsZVVSSSwgZmFsc2UpOwotCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGZpbGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL2dlbmVyYXRlZC9SUENMaXRlcmFsU09BUEV4YW1wbGUueG1sIik7Ci0gICAgICByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICAgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7Ci0gICAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gICAgICByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICAgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoZmlsZVVSSSwgdHJ1ZSk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS54bWwiKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgc2VydmljZS50b1N0cmluZygpOwotCi0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBBZGRyZXNzLCBTT0FQQ29uc3RhbnRzLkxPQ0FUSU9OX0FUVFJJQlVURSwgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkpOwotCi0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSAiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IChTT0FQQmluZGluZylleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBTdHJpbmcgc3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNUWUxFX0RPQ1VNRU5ULCBzdHlsZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEJpbmRpbmcsIFNPQVBDb25zdGFudHMuU1RZTEVfQVRUUklCVVRFLCBTVFlMRV9SUEMsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQklORElOR19fU1RZTEUpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBCaW5kaW5nLCBTT0FQQ29uc3RhbnRzLlRSQU5TUE9SVF9BVFRSSUJVVEUsIEhUVFBfVFJBTlNQT1JUX1VSSSwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKCJOZXdPcGVyYXRpb24iLCBudWxsLCBudWxsKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbilleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBzdHlsZSA9IHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICAgIGFzc2VydEVxdWFscyhTVFlMRV9ET0NVTUVOVCwgc3R5bGUpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBPcGVyYXRpb24sIFNPQVBDb25zdGFudHMuU1RZTEVfQVRUUklCVVRFLCBTVFlMRV9SUEMsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfT1BFUkFUSU9OX19TVFlMRSk7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSAoQmluZGluZ0lucHV0KWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMiwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0KLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyB1c2UgPSBzb2FwQm9keS5nZXRVc2UoKTsKLSAgICAgIGFzc2VydEVxdWFscyhVU0VfTElURVJBTCwgdXNlKTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbihzb2FwQm9keSwgU09BUENvbnN0YW50cy5VU0VfQVRUUklCVVRFLCBVU0VfRU5DT0RFRCwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CT0RZX19VU0UpOwotCi0gICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcilleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDEpOwotCi0gICAgICBTdHJpbmcgcGFydCA9IHNvYXBIZWFkZXIuZ2V0UGFydCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJoZWFkZXIiLCBwYXJ0KTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbihzb2FwSGVhZGVyLCBTT0FQQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFLCAidGVzdCIsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQpOwotCi0gICAgICBRTmFtZSBpbnB1dE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIik7Ci0gICAgICBNZXNzYWdlIGlucHV0TWVzc2FnZSA9IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZShpbnB1dE1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGlucHV0TWVzc2FnZSk7Ci0KLSAgICAgIFFOYW1lIHNvYXBIZWFkZXJNZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKTsKLSAgICAgIGFzc2VydEVxdWFscyhpbnB1dE1lc3NhZ2VRTmFtZSwgc29hcEhlYWRlck1lc3NhZ2VRTmFtZSk7Ci0KLSAgICAgIEVsZW1lbnQgc29hcEhlYWRlckVsZW1lbnQgPSBzb2FwSGVhZGVyLmdldEVsZW1lbnQoKTsKLSAgICAgIEF0dHIgbWVzc2FnZUF0dHJpYnV0ZSA9IHNvYXBIZWFkZXJFbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSk7Ci0KLSAgICAgIFFOYW1lIHRlc3RNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiVGVzdE1zZyIpOwotICAgICAgTWVzc2FnZSB0ZXN0TWVzc2FnZSA9IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZSh0ZXN0TWVzc2FnZVFOYW1lKTsKLSAgICAgIG1lc3NhZ2VBdHRyaWJ1dGUuc2V0VmFsdWUoInRuczpUZXN0TXNnIik7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2UsIHNvYXBIZWFkZXIuZ2V0RU1lc3NhZ2UoKSk7Ci0KLSAgICAgIFFOYW1lIG1lc3NhZ2UgPSBzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKTsKLSAgICAgIGFzc2VydEVxdWFscyh0ZXN0TWVzc2FnZVFOYW1lLCBtZXNzYWdlKTsKLQotICAgICAgc29hcEhlYWRlci5zZXRNZXNzYWdlKG51bGwpOwotICAgICAgbWVzc2FnZUF0dHJpYnV0ZSA9IHNvYXBIZWFkZXJFbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSk7Ci0gICAgICBhc3NlcnROdWxsKG1lc3NhZ2VBdHRyaWJ1dGUpOwotCi0gICAgICBMaXN0IHNvYXBIZWFkZXJGYXVsdHMgPSBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzb2FwSGVhZGVyRmF1bHRzLnNpemUoKSk7Ci0gICAgICBzb2FwSGVhZGVyRmF1bHRzLmNsZWFyKCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJGYXVsdE5vZGVzID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKDAsIGhlYWRlckZhdWx0Tm9kZXMuZ2V0TGVuZ3RoKCkpOwotCi0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IHNvYXBIZWFkZXJFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgc29hcEhlYWRlckZhdWx0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcpOwotICAgICAgc29hcEhlYWRlckVsZW1lbnQuYXBwZW5kQ2hpbGQoc29hcEhlYWRlckZhdWx0RWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgc29hcEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCkuc2l6ZSgpKTsKLSAgICAgIHNvYXBIZWFkZXJGYXVsdEVsZW1lbnQuc2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUsICJ0bnM6VGVzdE1zZyIpOwotICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHQpc29hcEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCkuZ2V0KDApOwotICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RNZXNzYWdlUU5hbWUsIHNvYXBIZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RNZXNzYWdlLCBzb2FwSGVhZGVyRmF1bHQuZ2V0RU1lc3NhZ2UoKSk7Ci0KLSAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KCJmYXVsdCIpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IChTT0FQRmF1bHQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIG5hbWUgPSBzb2FwRmF1bHQuZ2V0TmFtZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJmYXVsdCIsIG5hbWUpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBGYXVsdCwgU09BUENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgInRlc3QiLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0ZBVUxUX19OQU1FKTsKLQotICAgICAgc29hcEZhdWx0LnNldE5hbWVzcGFjZVVSSSgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS90ZXN0Iik7Ci0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBGYXVsdCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCAidGVzdCIsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQWRkcmVzcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQQWRkcmVzcygpOwotICAgIHNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKExPQ0FUSU9OX1VSSSk7Ci0KLSAgICBzb2FwQWRkcmVzcy50b1N0cmluZygpOwotCi0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIlNPQVBUZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBzZXJ2aWNlTmFtZSk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgc2VydmljZS50b1N0cmluZygpOwotCi0gICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJTT0FQVGVzdFNPQVAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotICAgIHBvcnQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQQmluZGluZygpOwotCi0gICAgc29hcEJpbmRpbmcuc2V0U3R5bGUoU1RZTEVfRE9DVU1FTlQpOwotICAgIHNvYXBCaW5kaW5nLnNldFRyYW5zcG9ydFVSSShIVFRQX1RSQU5TUE9SVF9VUkkpOwotCi0gICAgc29hcEJpbmRpbmcudG9TdHJpbmcoKTsKLQotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotICAgIGJpbmRpbmcudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQpCi0gIHsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gYmluZGluZ0ZhdWx0LmdldE5hbWUoKTsKLQotICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEZhdWx0KCk7Ci0gICAgc29hcEZhdWx0LnNldE5hbWUoZmF1bHROYW1lKTsKLSAgICBzb2FwRmF1bHQudG9TdHJpbmcoKTsKLQotICAgIHNvYXBGYXVsdC5zZXRVc2UoVVNFX0xJVEVSQUwpOwotCi0gICAgYmluZGluZ0ZhdWx0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBGYXVsdCk7Ci0gICAgYmluZGluZ0ZhdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkU09BUEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0KQotICB7Ci0gICAgYmluZGluZ0lucHV0LnRvU3RyaW5nKCk7Ci0KLSAgICBTT0FQQm9keSBpbnB1dFNPQVBCb2R5ID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGlucHV0U09BUEJvZHkpOwotCi0gICAgaW5wdXRTT0FQQm9keS5zZXRVc2UoVVNFX0xJVEVSQUwpOwotCi0gICAgTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmcgbWVzc2FnZU5hbWUgPSAiTmV3T3BlcmF0aW9uUmVxdWVzdCI7IC8vJE5PTi1OTFMtMSQKLSAgICBEZWZpbml0aW9uIGVuY2xvc2luZ0RlZmluaXRpb24gPSBiaW5kaW5nSW5wdXQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBlbmNsb3NpbmdEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIG1lc3NhZ2VOYW1lKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBlbmNsb3NpbmdEZWZpbml0aW9uOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpOwotICAgIFBhcnQgcGFydCA9IChQYXJ0KW1lc3NhZ2UuZ2V0UGFydCgicGFyYW1ldGVycyIpOyAvLyROT04tTkxTLTEkCi0gICAgcGFydHMuYWRkKHBhcnQpOwotICAgIGlucHV0U09BUEJvZHkuc2V0UGFydHMocGFydHMpOwotICAgIGlucHV0U09BUEJvZHkudG9TdHJpbmcoKTsKLQotICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQSGVhZGVyKCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBIZWFkZXIpOwotCi0gICAgc29hcEhlYWRlci5zZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0KLSAgICBTdHJpbmcgaGVhZGVyUGFydCA9ICJoZWFkZXIiOyAvLyROT04tTkxTLTEkCi0gICAgc29hcEhlYWRlci5zZXRQYXJ0KGhlYWRlclBhcnQpOwotCi0gICAgc29hcEhlYWRlci5zZXRVc2UoVVNFX0xJVEVSQUwpOwotCi0gICAgc29hcEhlYWRlci50b1N0cmluZygpOwotCi0gICAgYWRkU09BUEhlYWRlckZhdWx0KG1lc3NhZ2VRTmFtZSwgc29hcEhlYWRlcik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkU09BUEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0KQotICB7Ci0gICAgLy8gRXhlcmNpc2Ugc29tZSBvZiB0aGUgUlBDIC8gZW5jb2RlZCBzdHVmZi4KLQotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKFVTRV9FTkNPREVEKTsKLQotICAgIEVMaXN0IGVuY29kaW5nU3R5bGVzID0gbmV3IEJhc2ljRUxpc3QoKTsKLSAgICBlbmNvZGluZ1N0eWxlcy5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgZW5jb2RpbmdTdHlsZXMuYWRkKCJ0ZXN0Iik7Ci0gICAgCi0gICAgc29hcEJvZHkuc2V0RW5jb2RpbmdTdHlsZXMoZW5jb2RpbmdTdHlsZXMpOwotICAgIAotICAgIExpc3QgZUVuY29kaW5nU3R5bGVzID0gc29hcEJvZHkuZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGVFbmNvZGluZ1N0eWxlcy5zaXplKCkpOwotICAgIAotICAgIHNvYXBCb2R5LnRvU3RyaW5nKCk7Ci0KLSAgICBiaW5kaW5nT3V0cHV0LnRvU3RyaW5nKCk7Ci0gICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkU09BUEhlYWRlckZhdWx0KFFOYW1lIG1lc3NhZ2VRTmFtZSwgU09BUEhlYWRlciBzb2FwSGVhZGVyKQotICB7Ci0gICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQSGVhZGVyRmF1bHQoKTsKLSAgICBzb2FwSGVhZGVyLmFkZFNPQVBIZWFkZXJGYXVsdChzb2FwSGVhZGVyRmF1bHQpOwotCi0gICAgTGlzdCBzb2FwSGVhZGVyRmF1bHRzID0gc29hcEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHNvYXBIZWFkZXJGYXVsdHMuc2l6ZSgpKTsKLSAgICBTT0FQSGVhZGVyRmF1bHQgZXhwZWN0ZWRTb2FwSGVhZGVyRmF1bHQgPSAoU09BUEhlYWRlckZhdWx0KXNvYXBIZWFkZXJGYXVsdHMuZ2V0KDApOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFNvYXBIZWFkZXJGYXVsdCwgc29hcEhlYWRlckZhdWx0KTsKLQotICAgIHNvYXBIZWFkZXJGYXVsdC5zZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0KLSAgICBTdHJpbmcgaGVhZGVyRmF1bHRQYXJ0ID0gImhlYWRlckZhdWx0MSI7IC8vJE5PTi1OTFMtMSQKLSAgICBzb2FwSGVhZGVyRmF1bHQuc2V0UGFydChoZWFkZXJGYXVsdFBhcnQpOwotCi0gICAgLy8gVGVzdCB0aGUgcmVtb3ZlIHBhcnQuCi0KLSAgICBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5jbGVhcigpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLSAgICBzb2FwT3BlcmF0aW9uLnNldFN0eWxlKFNUWUxFX0RPQ1VNRU5UKTsKLSAgICBzb2FwT3BlcmF0aW9uLnNldFNvYXBBY3Rpb25VUkkoU09BUF9BQ1RJT05fVVJJKTsKLQotICAgIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKTsKLQotICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0gICAgYmluZGluZ09wZXJhdGlvbi50b1N0cmluZygpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvV1NETEV4dGVuc2lvbnNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9XU0RMRXh0ZW5zaW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3NzlhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9XU0RMRXh0ZW5zaW9uc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotCi0vKioKLSAqIEJhc2UgY2xhc3MgZm9yIFdTREwgZXh0ZW5zaW9uIHRlc3RzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETEV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSB0ZXN0IHdpdGggdGhlIGdpdmVuIG5hbWUuIAotICAgKiBAcGFyYW0gbmFtZSB0aGUgdGVzdCBuYW1lLgotICAgKi8KLSAgcHVibGljIFdTRExFeHRlbnNpb25zVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIGEgU3RyaW5nIGF0dHJpYnV0ZSByZWNvbmNpbGlhdGlvbi4gVGhlIGNvZGUgY2hhbmdlcyB0aGUgYXR0cmlidXRlIHZhbHVlIHRocm91Z2ggdGhlIERPTSBhbmQgY29tcGFyZXMgaXQgd2l0aCB0aGUgdmFsdWUgb2J0YWluZWQgYnkgY2FsbGluZyBlR2V0LgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgdGhlIFdTREwgZWxlbWVudCB0byB0ZXN0Ci0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIHRoZSBhdHRyaWJ1dGUgbmFtZQotICAgKiBAcGFyYW0gZXhwZWN0ZWRWYWx1ZSB0aGUgZXhwZWN0ZWQgdmFsdWUKLSAgICogQHBhcmFtIGZlYXR1cmUgdGhlIEVNRiBmZWF0dXJlIG9mIHRoZSBhdHRyaWJ1dGUgdG8gdGVzdC4gCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50LAotICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lLAotICAgIFN0cmluZyBleHBlY3RlZFZhbHVlLAotICAgIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKQotICB7Ci0gICAgRU9iamVjdCBlT2JqZWN0ID0gKEVPYmplY3Qpd3NkbEVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgaW5pdGlhbFZhbHVlID0gKFN0cmluZyllT2JqZWN0LmVHZXQoZmVhdHVyZSk7Ci0gICAgCi0gICAgRWxlbWVudCBlbGVtZW50ID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgIGVPYmplY3QuZVVuc2V0KGZlYXR1cmUpOwotICAgIEF0dHIgYXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZU5hbWUpOwotICAgIGFzc2VydE51bGwoYXR0cmlidXRlKTsKLQotICAgIGVPYmplY3QuZVNldChmZWF0dXJlLCBpbml0aWFsVmFsdWUpOwotICAgIAotICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGVOYW1lKTsKLSAgICBhdHRyaWJ1dGUuc2V0VmFsdWUoZXhwZWN0ZWRWYWx1ZSk7Ci0KLSAgICBTdHJpbmcgYWN0dWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRWYWx1ZSwgYWN0dWFsVmFsdWUpOwotICAgIAotICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwotICAgIGFjdHVhbFZhbHVlID0gKFN0cmluZyllT2JqZWN0LmVHZXQoZmVhdHVyZSk7Ci0gICAgYXNzZXJ0TnVsbChhY3R1YWxWYWx1ZSk7Ci0KLSAgICBlT2JqZWN0LmVTZXQoZmVhdHVyZSwgaW5pdGlhbFZhbHVlKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25Mb2FkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25Mb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MGI2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9EZWZpbml0aW9uTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIERlZmluaXRpb25Mb2FkZXIKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgc3RhdGljIG1ldGhvZHMgb25seS4KLSAgICovCi0gIHByaXZhdGUgRGVmaW5pdGlvbkxvYWRlcigpCi0gIHsKLSAgfQotCi0gIHN0YXRpYyBwdWJsaWMgRGVmaW5pdGlvbiBsb2FkKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbG9hZChmaWxlbmFtZSwgZmFsc2UpOwotICB9Ci0KLSAgc3RhdGljIHB1YmxpYyBEZWZpbml0aW9uIGxvYWQoU3RyaW5nIGZpbGVuYW1lLCBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbG9hZChmaWxlbmFtZSwgdXNlRXh0ZW5zaW9uRmFjdG9yaWVzLCBmYWxzZSk7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIERlZmluaXRpb24gbG9hZChTdHJpbmcgZmlsZW5hbWUsIGJvb2xlYW4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzLCBib29sZWFuIHRyYWNrTG9jYXRpb24pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLy8gZmlsZW5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aAotCi0gICAgVVJJIHVyaSA9IG51bGw7Ci0gICAgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZW5hbWUpOwotCi0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgIHJlc291cmNlU2V0LmdldEFkYXB0ZXJGYWN0b3JpZXMoKS5hZGQobmV3IFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeSgpKTsKLQotICAgIFdTRExSZXNvdXJjZUltcGwgd3NkbE1haW5SZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKXJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioud3NkbCIpKTsKLSAgICB3c2RsTWFpblJlc291cmNlLnNldFVSSSh1cmkpOwotICAgIGphdmEudXRpbC5NYXAgbWFwID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIG1hcC5wdXQoV1NETFJlc291cmNlSW1wbC5DT05USU5VRV9PTl9MT0FEX0VSUk9SLCBCb29sZWFuLnZhbHVlT2YodHJ1ZSkpOwotICAgIG1hcC5wdXQoV1NETFJlc291cmNlSW1wbC5VU0VfRVhURU5TSU9OX0ZBQ1RPUklFUywgQm9vbGVhbi52YWx1ZU9mKHVzZUV4dGVuc2lvbkZhY3RvcmllcykpOwotICAgIG1hcC5wdXQoV1NETFJlc291cmNlSW1wbC5UUkFDS19MT0NBVElPTiwgQm9vbGVhbi52YWx1ZU9mKHRyYWNrTG9jYXRpb24pKTsKLSAgICB3c2RsTWFpblJlc291cmNlLmxvYWQobWFwKTsKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciByZXNvdXJjZXMgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZXMoKS5pdGVyYXRvcigpOyByZXNvdXJjZXMuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3QgcmVzb3VyY2UgPSByZXNvdXJjZXMubmV4dCgpOwotICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFJlc291cmNlSW1wbCB3c2RsUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZTsKLSAgICAgICAgZGVmaW5pdGlvbiA9IHdzZGxSZXNvdXJjZS5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIHJldHVybiBkZWZpbml0aW9uOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgc3RhdGljIHB1YmxpYyB2b2lkIHN0b3JlKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIC8vIGZpbGVuYW1lIGlzIGFuIGFic29sdXRlIHBhdGgKLQotICAgIFJlc291cmNlIHJlc291cmNlID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICByZXNvdXJjZS5zZXRVUkkoVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZW5hbWUpKTsKLSAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9EZWZpbml0aW9uVmlzaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvblZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmYTYyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9EZWZpbml0aW9uVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGVmaW5pdGlvblZpc2l0b3IgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgRGVmaW5pdGlvblZpc2l0b3IoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uVmlzaXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgLy8gbWFpbiBlbnRyeQotICBwdWJsaWMgdm9pZCB2aXNpdCgpCi0gIHsKLSAgICB2aXNpdERlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGRlZi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0SW1wb3J0KChJbXBvcnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIFR5cGVzIHR5cGVzID0gZGVmLmdldEVUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgdmlzaXRUeXBlcyh0eXBlcyk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdE1lc3NhZ2UoKE1lc3NhZ2UpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFBvcnRUeXBlKChQb3J0VHlwZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RUJpbmRpbmdzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nKChCaW5kaW5nKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRFU2VydmljZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFNlcnZpY2UoKFNlcnZpY2UpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGRlZiwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB3c2RsSW1wb3J0KTsKLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdFR5cGVzKFR5cGVzIHR5cGVzKTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UGFydCgoUGFydClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCk7Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdE9wZXJhdGlvbigoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgdmlzaXRJbnB1dCgoSW5wdXQpaW5wdXQpOwotCi0gICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgdmlzaXRPdXRwdXQoKE91dHB1dClvdXRwdXQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RmF1bHQoKEZhdWx0KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KTsKLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2aXNpdE91dHB1dChPdXRwdXQgb3V0cHV0KTsKLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbilpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGJpbmRpbmcsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgQmluZGluZ0lucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLSAgICB2aXNpdEJpbmRpbmdJbnB1dCgoQmluZGluZ0lucHV0KWlucHV0KTsKLQotICAgIEJpbmRpbmdPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0QmluZGluZ0ZhdWx0KChCaW5kaW5nRmF1bHQpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gb3BlcmF0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KG9wZXJhdGlvbiwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBpbnB1dCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gaW5wdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoaW5wdXQsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBvdXRwdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQob3V0cHV0LCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBmYXVsdCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZmF1bHQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZmF1bHQsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFBvcnQoKFBvcnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gc2VydmljZS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChzZXJ2aWNlLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydChQb3J0IHBvcnQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQocG9ydCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG93bmVyLCBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTREw0SkRlZmluaXRpb25WaXNpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9XU0RMNEpEZWZpbml0aW9uVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzBiZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTREw0SkRlZmluaXRpb25WaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTREw0SkRlZmluaXRpb25WaXNpdG9yIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTREw0SkRlZmluaXRpb25WaXNpdG9yKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8vIG1haW4gZW50cnkKLSAgcHVibGljIHZvaWQgdmlzaXQoKQotICB7Ci0gICAgdmlzaXREZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgamF2YS51dGlsLk1hcCBpbXBvcnRzID0gZGVmLmdldEltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGltcG9ydHMua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBJbXBvcnQgbXlJbXBvcnQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgbXlJbXBvcnQgPSAoSW1wb3J0KSgoamF2YS51dGlsLkFycmF5TGlzdClpbXBvcnRzLmdldChpdGVyYXRvci5uZXh0KCkpKS5nZXQoMCk7Ci0gICAgICB2aXNpdEltcG9ydChteUltcG9ydCk7Ci0gICAgfQotCi0gICAgVHlwZXMgdHlwZXMgPSBkZWYuZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIHZpc2l0VHlwZXModHlwZXMpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdE1lc3NhZ2UoKE1lc3NhZ2UpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydFR5cGUoKFBvcnRUeXBlKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRCaW5kaW5ncygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0QmluZGluZygoQmluZGluZylpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFNlcnZpY2UoKFNlcnZpY2UpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB3c2RsSW1wb3J0KTsKLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdFR5cGVzKFR5cGVzIHR5cGVzKTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQYXJ0KChQYXJ0KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRPcGVyYXRpb24oKE9wZXJhdGlvbilpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgdmlzaXRJbnB1dCgoSW5wdXQpaW5wdXQpOwotCi0gICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRPdXRwdXQoKTsKLSAgICB2aXNpdE91dHB1dCgoT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBqYXZhLnV0aWwuTWFwIGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRGYXVsdHMoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGZhdWx0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEZhdWx0IGZhdWx0ID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGZhdWx0ID0gKEZhdWx0KWZhdWx0cy5nZXQoaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgIHZpc2l0RmF1bHQoZmF1bHQpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEJpbmRpbmdPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgQmluZGluZ0lucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgIHZpc2l0QmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpaW5wdXQpOwotCi0gICAgQmluZGluZ091dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpOwotICAgIHZpc2l0QmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dClvdXRwdXQpOwotCi0gICAgamF2YS51dGlsLk1hcCBiaW5kaW5nRmF1bHRzID0gb3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmdGYXVsdHMua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ0ZhdWx0cy5nZXQoaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgIHZpc2l0QmluZGluZ0ZhdWx0KGJpbmRpbmdGYXVsdCk7Ci0gICAgfQotCi0gICAgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBpbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBvdXRwdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBmYXVsdCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFBvcnQoKFBvcnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gc2VydmljZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExDb252ZXJ0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExDb252ZXJ0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5YjAyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9XU0RMQ29udmVydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29udmVydGVyIGV4dGVuZHMgRGVmaW5pdGlvblZpc2l0b3IKLXsKLSAgcHJpdmF0ZSBEb2N1bWVudCBkb2M7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGRlc2NyaXB0aW9uOwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50VHlwZXM7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRTZXJ2aWNlOwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50RW5kcG9pbnQ7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRJbnRlcmZhY2U7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRPcGVyYXRpb247Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRCaW5kaW5nOwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ09wZXJhdGlvbjsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmdJbnB1dDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmdPdXRwdXQ7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRCaW5kaW5nRmF1bHQ7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbE5hbWVzcGFjZVByZWZpeDsKLQotICBwcml2YXRlIFN0cmluZyB4c2ROYW1lc3BhY2VQcmVmaXg7Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBXU0RMQ29udmVydGVyKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMQ29udmVydGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHN1cGVyKGRlZmluaXRpb24pOwotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGUyMChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIGNyZWF0ZURvY3VtZW50KCk7Ci0gICAgdmlzaXQoKTsKLSAgICBzZXJpYWxpemUoZmlsZW5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNlcmlhbGl6ZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvYyk7Ci0gICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0gICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi04Iik7Ci0gICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsKLSAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lKSkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZURvY3VtZW50KCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIGRvYyA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKS5uZXdEb2N1bWVudCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGNyZWF0ZVdTRExFbGVtZW50KFN0cmluZyBuYW1lKQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsIiwgbmFtZSk7Ci0gICAgaWYgKHdzZGxOYW1lc3BhY2VQcmVmaXggIT0gbnVsbCkKLSAgICAgIGVsZW1lbnQuc2V0UHJlZml4KHdzZGxOYW1lc3BhY2VQcmVmaXgpOwotCi0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJvY2Vzc0RvY3VtZW50YXRpb24oRWxlbWVudCBkb2NFbGVtZW50LCBFbGVtZW50IHBhcmVudCkKLSAgewotICAgIGlmIChkb2NFbGVtZW50ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICBFbGVtZW50IGFkb3B0ZWREb2NFbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoZG9jRWxlbWVudCwgdHJ1ZSk7Ci0gICAgcGFyZW50LmFwcGVuZENoaWxkKGFkb3B0ZWREb2NFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIGRlc2NyaXB0aW9uID0gY3JlYXRlV1NETEVsZW1lbnQoImRlc2NyaXB0aW9uIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oZGVmLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGRlc2NyaXB0aW9uKTsKLQotICAgIC8vIFRCRCAtIERldGVybWluZSBsYXRlciBpZiB3ZSB3YW50IHRvIGNvbnZlcnQgdGhlIGRvY3VtZW50IHRvIHVzZSBTT0FQIDEuMi4KLSAgICAvLyBIb3dldmVyIGFkZGluZyB0aGVzZSB0d28gbmFtZXNwYWNlcyBtYXkgbm90IGJlIGhhcm1mdWwuCi0gICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczpzb2FwZW52IiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wIik7Ci0gICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczp3c29hcCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3NvYXAxMiIpOwotCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICBpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwpCi0gICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIsIHRhcmdldE5hbWVzcGFjZSk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGRlZi5nZXROYW1lc3BhY2VzKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLSAgICAvKgotICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIKLSAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIqLwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcHJlZml4ID0gKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBuYW1lc3BhY2UgPSBkZWYuZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0KLSAgICAgIGlmICgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgewotICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID09IDApIC8vIG1lYW50IHRvIGJlIGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxucyIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgcHJlZml4LCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsIik7Ci0gICAgICAgICAgd3NkbE5hbWVzcGFjZVByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRQcmVmaXgod3NkbE5hbWVzcGFjZVByZWZpeCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNPQVAgMS4yCi0gICAgICBpZiAoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgewotICAgICAgICAvLyBTT0FQIDEuMgotICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcCIpOwotCi0gICAgICAgIC8vIFdTREwgMi4wIGJpbmRpbmcgZm9yIFNPQVAgMS4yCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6d3NvYXAiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC9zb2FwMTIiKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vaWYgKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAvLyAgY29udGludWU7Ci0KLSAgICAgIGlmICgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICB4c2ROYW1lc3BhY2VQcmVmaXggPSBwcmVmaXg7IC8vIFdlIHdpbGwgdXNlIHRoaXMgaW4gdmlzaXRJbXBvcnQoKS4KLQotICAgICAgaWYgKHByZWZpeC5sZW5ndGgoKSA9PSAwKSAvLyBtZWFudCB0byBiZSBkZWZhdWx0IG5hbWVzcGFjZQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zIiArIHByZWZpeCwgbmFtZXNwYWNlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgcHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIGRvYy5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7Ci0gICAgc3VwZXIudmlzaXREZWZpbml0aW9uKGRlZik7Ci0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0SW1wb3J0KG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB3c2RsSW1wb3J0KQotICB7Ci0gICAgLy8gRGV0ZXJtaW5lIGlmIHdlIDxpbXBvcnQ+IGEgc2NoZW1hLgotICAgIGlmIChpbXBvcnRpbmdTY2hlbWEod3NkbEltcG9ydCkpCi0gICAgewotICAgICAgY3VycmVudFR5cGVzID0gY3JlYXRlV1NETEVsZW1lbnQoInR5cGVzIik7Ci0gICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50VHlwZXMpOwotCi0gICAgICAvLyAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9mb28uY29tIiBzY2hlbWFMb2NhdGlvbj0gImJhci54c2QiLz4KLSAgICAgIEVsZW1lbnQgc2NoZW1hSW1wb3J0ID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiaW1wb3J0Iik7Ci0gICAgICBpZiAoeHNkTmFtZXNwYWNlUHJlZml4ID09IG51bGwpIC8vIG5lZWQgdG8gYWRkIG9uZQotICAgICAgewotICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0gICAgICAgIHhzZE5hbWVzcGFjZVByZWZpeCA9ICJ4cyI7Ci0gICAgICAgIHNjaGVtYUltcG9ydC5zZXRQcmVmaXgoeHNkTmFtZXNwYWNlUHJlZml4KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCEiIi5lcXVhbHMoeHNkTmFtZXNwYWNlUHJlZml4KSkgLy8gaXQgaXMgbm90IGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgIHNjaGVtYUltcG9ydC5zZXRQcmVmaXgoeHNkTmFtZXNwYWNlUHJlZml4KTsKLQotICAgICAgc2NoZW1hSW1wb3J0LnNldEF0dHJpYnV0ZSgibmFtZXNwYWNlIiwgd3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBzY2hlbWFJbXBvcnQuc2V0QXR0cmlidXRlKCJzY2hlbWFMb2NhdGlvbiIsIHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHNjaGVtYUltcG9ydCk7Ci0gICAgICBjdXJyZW50VHlwZXMuYXBwZW5kQ2hpbGQoc2NoZW1hSW1wb3J0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotICAgICAgRWxlbWVudCBhZG9wdGVkSW1wb3J0RWxlbWVudCA9IChFbGVtZW50KWRvYy5pbXBvcnROb2RlKGltcG9ydEVsZW1lbnQsIHRydWUpOwotICAgICAgcHJvY2Vzc0RvY3VtZW50YXRpb24od3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBhZG9wdGVkSW1wb3J0RWxlbWVudCk7Ci0gICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZChhZG9wdGVkSW1wb3J0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydGluZ1NjaGVtYShJbXBvcnQgbXlJbXBvcnQpCi0gIHsKLSAgICBpZiAobXlJbXBvcnQuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpIC8vIGl0IGlzIFdTREwgaW1wb3J0Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdFR5cGVzKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIC8vIGN1cnJlbnRUeXBlcyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdmlzaXRJbXBvcnQoKS4KLSAgICBpZiAoY3VycmVudFR5cGVzID09IG51bGwpCi0gICAgewotICAgICAgY3VycmVudFR5cGVzID0gY3JlYXRlV1NETEVsZW1lbnQoInR5cGVzIik7Ci0gICAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbih0eXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50VHlwZXMpOwotICAgICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudFR5cGVzKTsKLSAgICB9Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldFNjaGVtYXMoKS5pdGVyYXRvcigpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotICAgIEVsZW1lbnQgc2NoZW1hRWxlbWVudCA9IG51bGw7Ci0gICAgRWxlbWVudCBhZG9wdGVkU2NoZW1hRWxlbWVudCA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBzY2hlbWEgPSAoWFNEU2NoZW1hKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHNjaGVtYS51cGRhdGVFbGVtZW50KCk7Ci0gICAgICBzY2hlbWFFbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIGFkb3B0ZWRTY2hlbWFFbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoc2NoZW1hRWxlbWVudCwgdHJ1ZSk7Ci0gICAgICBjdXJyZW50VHlwZXMuYXBwZW5kQ2hpbGQoYWRvcHRlZFNjaGVtYUVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBjdXJyZW50SW50ZXJmYWNlID0gY3JlYXRlV1NETEVsZW1lbnQoImludGVyZmFjZSIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHBvcnRUeXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRJbnRlcmZhY2UpOwotCi0gICAgRWxlbWVudCBwb3J0VHlwZUVsZW1lbnQgPSBwb3J0VHlwZS5nZXRFbGVtZW50KCk7Ci0gICAgaWYgKHBvcnRUeXBlRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRJbnRlcmZhY2Uuc2V0QXR0cmlidXRlKCJuYW1lIiwgcG9ydFR5cGVFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRJbnRlcmZhY2UpOwotICAgIHN1cGVyLnZpc2l0UG9ydFR5cGUocG9ydFR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRPcGVyYXRpb24gPSBjcmVhdGVXU0RMRWxlbWVudCgib3BlcmF0aW9uIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRPcGVyYXRpb24pOwotCi0gICAgRWxlbWVudCBvcGVyYXRpb25FbGVtZW50ID0gb3BlcmF0aW9uLmdldEVsZW1lbnQoKTsKLSAgICBpZiAob3BlcmF0aW9uRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0QXR0cmlidXRlKCJuYW1lIiwgb3BlcmF0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7Ci0KLSAgICBPcGVyYXRpb25UeXBlIG9wVHlwZSA9IG9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgIGlmIChPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoInBhdHRlcm4iLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMy93c2RsL2luLW91dCIpOwotICAgIGVsc2UgaWYgKE9wZXJhdGlvblR5cGUuU09MSUNJVF9SRVNQT05TRSA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvb3V0LWluIik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT04gPT0gb3BUeXBlKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoInBhdHRlcm4iLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMy93c2RsL291dC1vbmx5Iik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5PTkVfV0FZID09IG9wVHlwZSkKLSAgICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0QXR0cmlidXRlKCJwYXR0ZXJuIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDMvd3NkbC9pbi1vbmx5Iik7Ci0KLSAgICBjdXJyZW50SW50ZXJmYWNlLmFwcGVuZENoaWxkKGN1cnJlbnRPcGVyYXRpb24pOwotICAgIHN1cGVyLnZpc2l0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdElucHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIEVsZW1lbnQgY3VycmVudElucHV0ID0gY3JlYXRlV1NETEVsZW1lbnQoImlucHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudElucHV0KTsKLQotICAgIEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gaW5wdXQuZ2V0RWxlbWVudCgpOwotCi0gICAgaWYgKGlucHV0RWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRJbnB1dC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2VMYWJlbCIsIGlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7Ci0KLSAgICBFbGVtZW50IHBhcnRFbGVtZW50ID0gZ2V0UGFydEVsZW1lbnQoaW5wdXQpOwotICAgIGlmIChwYXJ0RWxlbWVudC5oYXNBdHRyaWJ1dGUoImVsZW1lbnQiKSkKLSAgICAgIGN1cnJlbnRJbnB1dC5zZXRBdHRyaWJ1dGUoImVsZW1lbnQiLCBwYXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKSk7Ci0gICAgLy8gVEJEIC0gd2hhdCBpZiB0aGUgcGFydCB1c2VzICJ0eXBlIj8KLQotICAgIGN1cnJlbnRPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudElucHV0KTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXRQYXJ0RWxlbWVudChNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotICAgIC8vIFRCRCAtIGZvciBub3csIHRha2UgdGhlIGZpcnN0IHBhcnQuCi0gICAgUGFydCBwYXJ0ID0gKFBhcnQpaXRlcmF0b3IubmV4dCgpOwotICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnQoKTsKLSAgICByZXR1cm4gcGFydEVsZW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdE91dHB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE91dHB1dChPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgRWxlbWVudCBjdXJyZW50T3V0cHV0ID0gY3JlYXRlV1NETEVsZW1lbnQoIm91dHB1dCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50T3V0cHV0KTsKLQotICAgIEVsZW1lbnQgb3V0cHV0RWxlbWVudCA9IG91dHB1dC5nZXRFbGVtZW50KCk7Ci0KLSAgICBpZiAob3V0cHV0RWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRPdXRwdXQuc2V0QXR0cmlidXRlKCJtZXNzYWdlTGFiZWwiLCBvdXRwdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBnZXRQYXJ0RWxlbWVudChvdXRwdXQpOwotICAgIGlmIChwYXJ0RWxlbWVudC5oYXNBdHRyaWJ1dGUoImVsZW1lbnQiKSkKLSAgICAgIGN1cnJlbnRPdXRwdXQuc2V0QXR0cmlidXRlKCJlbGVtZW50IiwgcGFydEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJlbGVtZW50IikpOwotICAgIC8vIFRCRCAtIHdoYXQgaWYgdGhlIHBhcnQgdXNlcyAidHlwZSI/Ci0KLSAgICBjdXJyZW50T3BlcmF0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRPdXRwdXQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRGYXVsdChvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0QmluZGluZyhvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nID0gY3JlYXRlV1NETEVsZW1lbnQoImJpbmRpbmciKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nKTsKLQotICAgIEVsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSBiaW5kaW5nLmdldEVsZW1lbnQoKTsKLSAgICBpZiAoYmluZGluZ0VsZW1lbnQuaGFzQXR0cmlidXRlKCJuYW1lIikpCi0gICAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBiaW5kaW5nRWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7Ci0gICAgaWYgKGJpbmRpbmdFbGVtZW50Lmhhc0F0dHJpYnV0ZSgidHlwZSIpKQotICAgICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJpbnRlcmZhY2UiLCBiaW5kaW5nRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSk7Ci0KLSAgICAvLyBUQkQgLSBpcyB0aGUgbmV4dCBsaW5lIGZpeGVkIGZvciBTT0FQPwotICAgIGN1cnJlbnRCaW5kaW5nLnNldEF0dHJpYnV0ZSgidHlwZSIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc29hcDEyIik7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ3c29hcDpwcm90b2NvbCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAvYmluZGluZ3MvSFRUUCIpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldEF0dHJpYnV0ZSgid3NvYXA6bWVwRGVmYXVsdCIsICJodHRwOi8vd3d3LnczLm9yZy4yMDAzLzA1L3NvYXAvbWVwL3JlcXVlc3QtcmVzcG9uc2UiKTsKLQotICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRCaW5kaW5nKTsKLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbiA9IGNyZWF0ZVdTRExFbGVtZW50KCJvcGVyYXRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpLmdldE5hbWUoKTsKLQotICAgIC8vIERldGVybWluZSBwcmVmaXgKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gbnVsbDsKLSAgICBEZWZpbml0aW9uIGRlZiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZiAhPSBudWxsKQotICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHByZWZpeCA9IGRlZi5nZXRQcmVmaXgodGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICAgIHByZWZpeCA9ICIiOwotICAgIGVsc2UKLSAgICAgIHByZWZpeCArPSAiOiI7Ci0KLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoInJlZiIsIHByZWZpeCArIG9wZXJhdGlvbk5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmcuYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdPcGVyYXRpb24pOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdJbnB1dCA9IGNyZWF0ZVdTRExFbGVtZW50KCJpbnB1dCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nSW5wdXQpOwotCi0gICAgRWxlbWVudCBpbnB1dEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICBpZiAoaW5wdXROYW1lICE9IG51bGwpCi0gICAgICBpbnB1dEVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgaW5wdXROYW1lKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRCaW5kaW5nSW5wdXQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nT3V0cHV0ID0gY3JlYXRlV1NETEVsZW1lbnQoIm91dHB1dCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50QmluZGluZ091dHB1dCk7Ci0KLSAgICBFbGVtZW50IG91dHB1dEVsZW1lbnQgPSBvdXRwdXQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBvdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICBpZiAob3V0cHV0TmFtZSAhPSBudWxsKQotICAgICAgb3V0cHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBvdXRwdXROYW1lKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRCaW5kaW5nT3V0cHV0KTsKLSAgICBzdXBlci52aXNpdEJpbmRpbmdPdXRwdXQob3V0cHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBmYXVsdCkKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nRmF1bHQgPSBjcmVhdGVXU0RMRWxlbWVudCgiZmF1bHQiKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50QmluZGluZ0ZhdWx0KTsKLQotICAgIEVsZW1lbnQgZmF1bHRFbGVtZW50ID0gZmF1bHQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgICAgZmF1bHRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIGZhdWx0TmFtZSk7Ci0KLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50QmluZGluZ0ZhdWx0KTsKLSAgICBzdXBlci52aXNpdEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgY3VycmVudFNlcnZpY2UgPSBjcmVhdGVXU0RMRWxlbWVudCgic2VydmljZSIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHNlcnZpY2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudFNlcnZpY2UpOwotCi0gICAgRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IHNlcnZpY2UuZ2V0RWxlbWVudCgpOwotICAgIGlmIChzZXJ2aWNlRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRTZXJ2aWNlLnNldEF0dHJpYnV0ZSgibmFtZSIsIHNlcnZpY2VFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRTZXJ2aWNlKTsKLSAgICBzdXBlci52aXNpdFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdFBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydChQb3J0IHBvcnQpCi0gIHsKLSAgICBjdXJyZW50RW5kcG9pbnQgPSBjcmVhdGVXU0RMRWxlbWVudCgiZW5kcG9pbnQiKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRFbmRwb2ludCk7Ci0KLSAgICBFbGVtZW50IHBvcnRFbGVtZW50ID0gcG9ydC5nZXRFbGVtZW50KCk7Ci0gICAgaWYgKHBvcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudEVuZHBvaW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIHBvcnRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICBpZiAocG9ydEVsZW1lbnQuaGFzQXR0cmlidXRlKCJiaW5kaW5nIikpCi0gICAgICBjdXJyZW50RW5kcG9pbnQuc2V0QXR0cmlidXRlKCJiaW5kaW5nIiwgcG9ydEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJiaW5kaW5nIikpOwotCi0gICAgLy8gQWRkIGludGVyZmFjZSB0byBjdXJyZW50IHNlcnZpY2UKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkgLy8gYmluZGluZyBjb3VsZCBub3QgYmUgcmVzb2x2ZWQKLSAgICB7Ci0gICAgICBFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gYmluZGluZy5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoYmluZGluZ0VsZW1lbnQuaGFzQXR0cmlidXRlKCJ0eXBlIikpCi0gICAgICAgIGN1cnJlbnRTZXJ2aWNlLnNldEF0dHJpYnV0ZSgiaW50ZXJmYWNlIiwgYmluZGluZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIikpOwotICAgIH0KLQotICAgIGN1cnJlbnRTZXJ2aWNlLmFwcGVuZENoaWxkKGN1cnJlbnRFbmRwb2ludCk7Ci0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG93bmVyLCBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIC8vIFRCRCAtIEl0IGlzIG5vdCBqdXN0IFNPQVAgYmluZGluZwotICAgIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwpCi0gICAgewotICAgICAgRWxlbWVudCBzb2FwRWxlbWVudCA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChzb2FwRWxlbWVudC5oYXNBdHRyaWJ1dGUoImxvY2F0aW9uIikpCi0gICAgICAgIGN1cnJlbnRFbmRwb2ludC5zZXRBdHRyaWJ1dGUoImFkZHJlc3MiLCBzb2FwRWxlbWVudC5nZXRBdHRyaWJ1dGUoImxvY2F0aW9uIikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRWxlbWVudCBkb21FbGVtZW50ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgRWxlbWVudCBhZG9wdGVkRE9NRWxlbWVudCA9IChFbGVtZW50KWRvYy5pbXBvcnROb2RlKGRvbUVsZW1lbnQsIHRydWUpOwotCi0gICAgICBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsKQotICAgICAgICBkZXNjcmlwdGlvbi5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGRlc2NyaXB0aW9uLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwpCi0gICAgICAgIGN1cnJlbnRTZXJ2aWNlLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudFNlcnZpY2UuZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0VHlwZUltcGwpCi0gICAgICAgIGN1cnJlbnRJbnRlcmZhY2UuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50SW50ZXJmYWNlLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCkKLSAgICAgICAgY3VycmVudE9wZXJhdGlvbi5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRPcGVyYXRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCkKLSAgICAgICAgY3VycmVudEJpbmRpbmcuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50QmluZGluZy5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0lucHV0SW1wbCkKLSAgICAgICAgY3VycmVudEJpbmRpbmdJbnB1dC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nSW5wdXQuZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3V0cHV0SW1wbCkKLSAgICAgICAgY3VycmVudEJpbmRpbmdPdXRwdXQuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50QmluZGluZ091dHB1dC5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdGYXVsdEltcGwpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5nRmF1bHQuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50QmluZGluZ0ZhdWx0LmdldEZpcnN0Q2hpbGQoKSk7Ci0KLSAgICB9Ci0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29udmVydGVyKCJDb252ZXJ0IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0Q29udmVydCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29udmVydCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZCgiZDovZWNsaXBzZTMwMS9lY2xpcHNlL3dvcmtzcGFjZS9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9QVEFUaW1lRGlzdHJpYnV0aW9uLndzZGwiKTsKLSAgICAgIFdTRExDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFdTRExDb252ZXJ0ZXIoZGVmKTsKLSAgICAgIGNvbnZlcnRlci5nZW5lcmF0ZTIwKCJkOi9lY2xpcHNlMzAxL2VjbGlwc2Uvd29ya3NwYWNlL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL1BUQVRpbWVEaXN0cmlidXRpb24yMC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gICAgLyoKLSAgICAgdHJ5Ci0gICAgIHsKLSAgICAgRGVmaW5pdGlvbiBkZWYgPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoYXJnc1swXSk7Ci0gICAgIFdTRExDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFdTRExDb252ZXJ0ZXIoZGVmKTsKLSAgICAgY29udmVydGVyLmdlbmVyYXRlMjAoInRlc3QyMC53c2RsIik7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICB7Ci0gICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgIH0qLwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9XU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzU3YTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExNb2RlbExvY2F0b3I7Ci0KLQotcHVibGljIGNsYXNzIFdTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICBwcm90ZWN0ZWQgQ3VzdG9tV1NETE1vZGVsTG9jYXRvciBjdXN0b21XU0RMTW9kZWxMb2NhdG9yID0gbmV3IEN1c3RvbVdTRExNb2RlbExvY2F0b3IoKTsKLQotICBjbGFzcyBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gIHsKLSAgICBwdWJsaWMgU3RyaW5nIHJlc29sdmVVUkkoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICAgIHsKLSAgICAgIHJldHVybiBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICAgIHsKLSAgICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIGN1c3RvbVdTRExNb2RlbExvY2F0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hNTERpZmYuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hNTERpZmYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjZTkzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YTUxEaWZmLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgWE1MRGlmZgotewotICBwcml2YXRlIFByaW50U3RyZWFtIG91dCA9IFN5c3RlbS5vdXQ7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIERJRkZfRUxFTUVOVF9OT0RFX09OTFkgPSBmYWxzZTsKLQotICBwdWJsaWMgYm9vbGVhbiBkaWZmKFN0cmluZyBmaWxlMSwgU3RyaW5nIGZpbGUyKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGRpZmYoZmlsZTEsIGZpbGUyLCBmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkaWZmKFN0cmluZyBmaWxlMSwgU3RyaW5nIGZpbGUyLCBib29sZWFuIGVsZW1lbnRPbmx5KSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnQgZG9jMSA9IGdldERvY3VtZW50KGZpbGUxKTsKLSAgICBEb2N1bWVudCBkb2MyID0gZ2V0RG9jdW1lbnQoZmlsZTIpOwotICAgIERJRkZfRUxFTUVOVF9OT0RFX09OTFkgPSBlbGVtZW50T25seTsKLSAgICByZXR1cm4gZGlmZihkb2MxLCBkb2MyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoRG9jdW1lbnQgZG9jMSwgRG9jdW1lbnQgZG9jMikKLSAgewotICAgIEVsZW1lbnQgcm9vdDEgPSBkb2MxLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgIEVsZW1lbnQgcm9vdDIgPSBkb2MyLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVybiBjb21wYXJlTm9kZXMocm9vdDEsIHJvb3QyKTsKLSAgfQotCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIHVyaSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgIERvY3VtZW50IGRvYyA9IGJ1aWxkZXIucGFyc2UodXJpKTsKLSAgICByZXR1cm4gZG9jOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNvbXBhcmVOb2RlcyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKQotICB7Ci0gICAgaWYgKERJRkZfRUxFTUVOVF9OT0RFX09OTFkpCi0gICAgewotICAgICAgLy8gQ29tcGFyZSBvbmx5IGVsZW1lbnQgbm9kZXMgaW4gdGhlIGNoaWxkcmVuLgotICAgICAgZmlsdGVyTm9uRWxlbWVudE5vZGVzKG5vZGUxKTsKLSAgICAgIGZpbHRlck5vbkVsZW1lbnROb2Rlcyhub2RlMik7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUxLmdldE5vZGVUeXBlKCkgIT0gbm9kZTIuZ2V0Tm9kZVR5cGUoKSB8fCBub2RlMS5nZXROb2RlTmFtZSgpICE9IG5vZGUyLmdldE5vZGVOYW1lKCkpCi0gICAgewotICAgICAgcHJpbnRsbigiTm9kZSB0eXBlIG9yIG5vZGUgbmFtZSBpcyBkaWZmZXJlbnQ6Iik7Ci0gICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghY29tcGFyZUF0dHJpYnV0ZXMobm9kZTEsIG5vZGUyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5vZGVMaXN0IG5vZGVMaXN0MSA9IG5vZGUxLmdldENoaWxkTm9kZXMoKTsKLSAgICBOb2RlTGlzdCBub2RlTGlzdDIgPSBub2RlMi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgaWYgKG5vZGVMaXN0MS5nZXRMZW5ndGgoKSAhPSBub2RlTGlzdDIuZ2V0TGVuZ3RoKCkpCi0gICAgewotICAgICAgcHJpbnRsbigiVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpcyBkaWZmZXJlbnQ6Iik7Ci0gICAgICAvL3ByaW50bG4oIk5vZGUgMTogIiArIG5vZGVMaXN0MS5nZXRMZW5ndGgoKSk7Ci0gICAgICAvL3ByaW50bG4oIk5vZGUgMjogIiArIG5vZGVMaXN0Mi5nZXRMZW5ndGgoKSk7Ci0gICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBpbnQgbGVuZ3RoID0gbm9kZUxpc3QxLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcmVzdWx0ID0gY29tcGFyZU5vZGVzKG5vZGVMaXN0MS5pdGVtKGkpLCBub2RlTGlzdDIuaXRlbShpKSk7Ci0gICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBmaWx0ZXJOb25FbGVtZW50Tm9kZXMoTm9kZSBub2RlKQotICB7Ci0gICAgTm9kZSBmaXJzdENoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGZpcnN0Q2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlLnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpOwotICAgICAgZmlyc3RDaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgIH0KLQotICAgIE5vZGUgc2libGluZyA9IGZpcnN0Q2hpbGQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICBOb2RlIGRlbGV0ZU1lID0gbnVsbDsKLSAgICB3aGlsZSAoc2libGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChzaWJsaW5nLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICB7Ci0gICAgICAgIGRlbGV0ZU1lID0gc2libGluZzsKLSAgICAgICAgc2libGluZyA9IHNpYmxpbmcuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChkZWxldGVNZSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZUF0dHJpYnV0ZXMoTm9kZSBub2RlMSwgTm9kZSBub2RlMikKLSAgewotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwMSA9IG5vZGUxLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBOYW1lZE5vZGVNYXAgbm9kZU1hcDIgPSBub2RlMi5nZXRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAobm9kZU1hcDEgPT0gbnVsbCB8fCBub2RlTWFwMiA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChub2RlTWFwMSA9PSBudWxsICYmIG5vZGVNYXAyID09IG51bGwpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG5vZGVNYXAxLmdldExlbmd0aCgpICE9IG5vZGVNYXAyLmdldExlbmd0aCgpKQotICAgIHsKLSAgICAgIHByaW50bG4oIlRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpcyBkaWZmZXJlbnQ6Iik7Ci0gICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIE5vZGUgYXR0ck5vZGUxID0gbnVsbDsKLSAgICBOb2RlIGF0dHJOb2RlMiA9IG51bGw7Ci0gICAgaW50IGxlbmd0aCA9IG5vZGVNYXAxLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXR0ck5vZGUxID0gbm9kZU1hcDEuaXRlbShpKTsKLSAgICAgIGF0dHJOb2RlMiA9IG5vZGVNYXAyLmdldE5hbWVkSXRlbShhdHRyTm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICBpZiAoYXR0ck5vZGUyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIlRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIGluIE5vZGUgMjogIiArIGF0dHJOb2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghYXR0ck5vZGUxLmdldE5vZGVWYWx1ZSgpLmVxdWFscyhhdHRyTm9kZTIuZ2V0Tm9kZVZhbHVlKCkpKQotICAgICAgewotICAgICAgICBwcmludGxuKCJUaGUgYXR0cmlidXRlIHZhbHVlcyBhcmUgZGlmZmVyZW50OiIpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpICsgIiwiICsgYXR0ck5vZGUxLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSArICIsIiArIGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJpbnRsbihTdHJpbmcgcykKLSAgewotICAgIG91dC5wcmludGxuKHMpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU5ZmIyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyOwotCi0KLXB1YmxpYyBjbGFzcyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgcHJvdGVjdGVkIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJJbXBsIHNjaGVtYUxvY2F0b3IgPSBuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwoKTsKLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlci5jbGFzczsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0TmV3KE5vdGlmaWVyIHRhcmdldCwgT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hTG9jYXRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMmZlZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbCBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlcgotewotICBwdWJsaWMgU3RyaW5nIHJlc29sdmVTY2hlbWFMb2NhdGlvbihYU0RTY2hlbWEgeHNkU2NoZW1hLCBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgc2NoZW1hTG9jYXRpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgYmFzZUxvY2F0aW9uID0geHNkU2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCkucmVzb2x2ZShiYXNlTG9jYXRpb24sIG5hbWVzcGFjZVVSSSwgc2NoZW1hTG9jYXRpb25VUkkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBZGF0cGVyRm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFhTRFNjaGVtYUxvY2F0b3IuY2xhc3M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZTdlZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQkJCi0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIgLz4KLQk8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTx0c3RhbXAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ3c3QtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiLz4KLQkJPGRlbGV0ZSBkaXI9IiR7d3N0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgCTxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dzdC1mb2xkZXJ9Ii8+Ci0gICAgICAJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICAJCTxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5BbGxUZXN0Q2FzZXMiIC8+Ci0gICAJCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgIAk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwNzZiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLSAgICA8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODc4MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OGVkYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotI1dlZCBKdWwgMjMgMTE6MTk6MjcgRURUIDIwMDgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkV4ZW1wdEV4Y2VwdGlvbkFuZFRocm93YWJsZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmYzNDRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGx1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IjMuOC4xIiwKLSBvcmcuZWNsaXBzZS53c3QueHNkLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjQuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZjFmYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB3c2RsdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB3c2RsdWl0ZXN0cy5qYXIKLXNvdXJjZS53c2RsdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQud3NkbHVpdGVzdHMuamFyID0gYmluLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZGUwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gV1NETCBVSSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTBjYzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvLyBUaGUgcGx1Zy1pbiBJRAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMiOwotICBwcml2YXRlIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlID0gbnVsbDsKLQotICAvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0gIHByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47Ci0KLSAgLyoqCi0gICAqIFRoZSBjb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFjdGl2YXRvcigpCi0gIHsKLSAgICBwbHVnaW4gPSB0aGlzOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZQotICAgKiBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dAotICAgKiApCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUKLSAgICogb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dAotICAgKiApCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgcGx1Z2luID0gbnVsbDsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL0FsbFdTRExVSVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQWxsV1NETFVJVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyMWQ3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQWxsV1NETFVJVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogV3JhcHBlciB0ZXN0IHN1aXRlIGZvciBhbGwgV1NETCBVSSB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTRExVSVRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxXU0RMVUlUZXN0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQWxsV1NETFVJVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFdTRExVSVRlc3RzIik7Ci0gICAgLy8gVW51c2VkIFhTRCBpbXBvcnRzIHRlc3RzIGluIFdTREwgZmlsZXMKLSAgICBhZGRUZXN0KFdTRExVbnVzZWRUZXN0cy5zdWl0ZSgpKTsKLSAgICAvLyBXU0RMIHhtbCBucyB0YWJsZSBjbGVhbnVwCi0gICAgYWRkVGVzdChXU0RMWE1MTlNDbGVhbnVwVGVzdHMuc3VpdGUoKSk7Ci0gICAgLy8gVW51c2VkIFdTREwgSW1wb3J0cwotICAgIGFkZFRlc3QoVW51c2VkV1NETEltcG9ydHNUZXN0cy5zdWl0ZSgpKTsKLSAgICAvLyBNaXNjIGJ1ZyBmaXhlcwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OGYwODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMSW1wb3J0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy5BY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VJbXBsOwotCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBBY3RpdmF0b3IuZ2V0SW5zdGFsbFVSTCgpOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRVNfRk9MREVSID0gInRlc3RyZXNvdXJjZXMiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRDX1JPT1RfRk9MREVSID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyAiLyIgKyBSRVNPVVJDRVNfRk9MREVSICsgIi9XU0RMIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgV1NETEltcG9ydE1hbmFnZXIgaW1wb3J0TWFuYWdlciA9IG5ldyBXU0RMSW1wb3J0TWFuYWdlcigpOwotCi0gIHB1YmxpYyBCYXNlVGVzdENhc2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgQmFzZVRlc3RDYXNlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIGdldFhTRFNjaGVtYShTdHJpbmcgcGF0aCkKLSAgewotICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShwYXRoKTsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICBYU0RSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoWFNEUmVzb3VyY2VJbXBsKSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSByZXNvdXJjZS5nZXRTY2hlbWEoKTsKLSAgICBhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0gICAgcmV0dXJuIHNjaGVtYTsKLSAgfQotCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGdldERlZmluaXRpb24oU3RyaW5nIHBhdGgpCi0gIHsKLSAgICBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkocGF0aCk7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgV1NETFJlc291cmNlSW1wbCByZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb24pOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAwMzBmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMuaW50ZXJuYWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlhTRFR5cGVTeXN0ZW1Qcm92aWRlcjsKLQotCi0vKioKLSAqIENvbnRhaW5zIHVuaXQgdGVzdHMgZm9yIHJlcG9ydGVkIGJ1Z3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHVibGljIEJ1Z0ZpeGVzVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKEJ1Z0ZpeGVzVGVzdC5jbGFzcy5nZXROYW1lKCkpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJCdWlsdEluVHlwZXMiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEJ1aWx0SW5UeXBlcygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDM4MDAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCdWlsdEluVHlwZXMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvQnVpbHRJblR5cGUvTmV3V1NETEZpbGUxLndzZGwiKTsgIC8vJE5PTi1OTFMtMSQKLQotICAgICAgWFNEVHlwZVN5c3RlbVByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFhTRFR5cGVTeXN0ZW1Qcm92aWRlcigpOwotICAgICAgTGlzdCB0eXBlcyA9IHByb3ZpZGVyLmdldEJ1aWx0SW5UeXBlTmFtZXNMaXN0KGRlZmluaXRpb24pOwotICAgICAgYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGZpbmQgYnVpbHQgaW4gc2NoZW1hIHR5cGVzIiwgIXR5cGVzLmlzRW1wdHkoKSk7ICAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL1VudXNlZFdTRExJbXBvcnRzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS90ZXN0cy9pbnRlcm5hbC9VbnVzZWRXU0RMSW1wb3J0c1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMmMyMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL1VudXNlZFdTRExJbXBvcnRzVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotCi1wdWJsaWMgY2xhc3MgVW51c2VkV1NETEltcG9ydHNUZXN0cyBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShVbnVzZWRXU0RMSW1wb3J0c1Rlc3RzLmNsYXNzKTsKLSAgfQotCi0vLwotLy8gVGVzdGluZyBVU0VEIFdTREwgaW1wb3J0cyAoVGhhdCB0aGV5IGFyZW4ndCByZW1vdmVkIG1pc3Rha2VubHkpCi0vLwotCi0gIHB1YmxpYyB2b2lkIHRlc3RVc2VkV1NETEltcG9ydDAwMSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDIud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRXU0RMVW51c2VkSW1wb3J0cygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gICAgaW1wb3J0TWFuYWdlci5jbGVhbnVwKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VXNlZFdTRExJbXBvcnQwMDIoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvY29yZS9NYWluMDA0LndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVzZWRXU0RMSW1wb3J0MDAzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwNi53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFdTRExVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVc2VkV1NETEltcG9ydDAwNCgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDgud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRXU0RMVW51c2VkSW1wb3J0cygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICAvLwotLy8gVGVzdGluZyBvZiBVTlVTRUQgV1NETCBpbXBvcnRzCi0vLwotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRXU0RMSW1wb3J0MDAxKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwMS53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFdTRExVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBJbXBvcnQgaW1wMSA9IChJbXBvcnQpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIpKTsKLSAgICBhc3NlcnRUcnVlKGltcDEuZ2V0TG9jYXRpb25VUkkoKS5lcXVhbHMoIkltcG9ydDAwMS53c2RsIikpOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ3c2RsMSIpKTsKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVudXNlZFdTRExJbXBvcnQwMDIoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvY29yZS9NYWluMDAzLndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIEltcG9ydCBpbXAxID0gKEltcG9ydCkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAxLndzZGwiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoIndzZGwxIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVudXNlZFdTRExJbXBvcnQwMDMoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvY29yZS9NYWluMDA1LndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIEltcG9ydCBpbXAxID0gKEltcG9ydCkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAxLndzZGwiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoIndzZGwxIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVudXNlZFdTRExJbXBvcnQwMDQoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvY29yZS9NYWluMDA3LndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIEltcG9ydCBpbXAxID0gKEltcG9ydCkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAxLndzZGwiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVudXNlZFdTRExJbXBvcnQwMDUoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvY29yZS9NYWluMDA5LndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIEltcG9ydCBpbXAxID0gKEltcG9ydCkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9GaWxlTm90Rm91bmQvIikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiV1NETEZpbGVOb3RGb3VuZC53c2RsIikpOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVudXNlZFdTRExJbXBvcnQwMDYoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvdGVzdC9NYWluMDAxLndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIEltcG9ydCBpbXAxID0gKEltcG9ydCkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAxLndzZGwiKSk7Ci0gICAgSW1wb3J0IGltcDIgPSAoSW1wb3J0KSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKGltcDIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMi8iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAyLmdldExvY2F0aW9uVVJJKCkuZXF1YWxzKCJJbXBvcnQwMDIud3NkbCIpKTsKLQotICAgIFNldCB1bnVzZWRXU0RMUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFdTRExQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5jb250YWlucygid3NkbDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoIndzZGwyIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1peFdTRExJbXBvcnQwMDEoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvV1NETEltcG9ydHMvdGVzdC9NYWluMDAyLndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0V1NETFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDQpOwotICAgIEltcG9ydCBpbXAxID0gKEltcG9ydCkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAxLndzZGwiKSk7Ci0gICAgSW1wb3J0IGltcDIgPSAoSW1wb3J0KSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKGltcDIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMi8iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAyLmdldExvY2F0aW9uVVJJKCkuZXF1YWxzKCJJbXBvcnQwMDIud3NkbCIpKTsKLSAgICBJbXBvcnQgaW1wMyA9IChJbXBvcnQpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoaW1wMy5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IikpOwotICAgIGFzc2VydFRydWUoaW1wMy5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiLi4vLi4vLi4vWFNEL1VudXNlZC9JbXBvcnQxLnhzZCIpKTsKLSAgICBJbXBvcnQgaW1wNCA9IChJbXBvcnQpIGxpc3QuZ2V0KDMpOwotICAgIGFzc2VydFRydWUoaW1wNC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIpKTsKLSAgICBhc3NlcnRUcnVlKGltcDQuZ2V0TG9jYXRpb25VUkkoKS5lcXVhbHMoIi4uLy4uLy4uL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gNCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoIndzZGwxIikpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ3c2RsMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5jb250YWlucygieHNkMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5jb250YWlucygieHNkMiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNaXhXU0RMSW1wb3J0MDAyKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwMy53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFdTRExVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBJbXBvcnQgaW1wMSA9IChJbXBvcnQpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIpKTsKLSAgICBhc3NlcnRUcnVlKGltcDEuZ2V0TG9jYXRpb25VUkkoKS5lcXVhbHMoIkltcG9ydDAwMS53c2RsIikpOwotICAgIEltcG9ydCBpbXAyID0gKEltcG9ydCkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAyLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDIvIikpOwotICAgIGFzc2VydFRydWUoaW1wMi5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAyLndzZGwiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoIndzZGwxIikpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ3c2RsMiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNaXhXU0RMSW1wb3J0MDAzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNC53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFdTRExVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBJbXBvcnQgaW1wMSA9IChJbXBvcnQpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIpKTsKLSAgICBhc3NlcnRUcnVlKGltcDEuZ2V0TG9jYXRpb25VUkkoKS5lcXVhbHMoIkltcG9ydDAwMS53c2RsIikpOwotICAgIEltcG9ydCBpbXAyID0gKEltcG9ydCkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbXAyLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDIvIikpOwotICAgIGFzc2VydFRydWUoaW1wMi5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiSW1wb3J0MDAyLndzZGwiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoIndzZGwxIikpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ3c2RsMiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNaXhXU0RMSW1wb3J0MDA0KCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNS53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFdTRExVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLQotICAgIFNldCB1bnVzZWRXU0RMUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFdTRExQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNaXhXU0RMSW1wb3J0MDA1KCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNi53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFdTRExVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBJbXBvcnQgaW1wMSA9IChJbXBvcnQpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IikpOwotICAgIGFzc2VydFRydWUoaW1wMS5nZXRMb2NhdGlvblVSSSgpLmVxdWFscygiLi4vLi4vLi4vWFNEL1VudXNlZC9JbXBvcnQxLnhzZCIpKTsKLSAgICBJbXBvcnQgaW1wMiA9IChJbXBvcnQpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoaW1wMi5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIpKTsKLSAgICBhc3NlcnRUcnVlKGltcDIuZ2V0TG9jYXRpb25VUkkoKS5lcXVhbHMoIi4uLy4uLy4uL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoInhzZDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoInhzZDIiKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL1dTRExVbnVzZWRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL1dTRExVbnVzZWRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWU2MDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS90ZXN0cy9pbnRlcm5hbC9XU0RMVW51c2VkVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVW51c2VkVGVzdHMgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFVudXNlZFRlc3RzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRJbXBvcnQwMDEoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjEud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJBLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCJCLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRJbXBvcnQwMDIoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjIud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJBLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCJCLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRJbXBvcnQwMDMoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjMud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJBLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCJCLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRJbXBvcnQwMDQoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjQud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSA3KTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJBLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCJCLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCJDLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDQgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgzKTsKLSAgICBhc3NlcnRUcnVlKCJDLnhzZCIuZXF1YWxzKGQ0LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDUgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg0KTsKLSAgICBhc3NlcnRUcnVlKCJELnhzZCIuZXF1YWxzKGQ1LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDYgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg1KTsKLSAgICBhc3NlcnRUcnVlKCJFLnhzZCIuZXF1YWxzKGQ2LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDcgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg2KTsKLSAgICBhc3NlcnRUcnVlKCJGLnhzZCIuZXF1YWxzKGQ3LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRJbXBvcnQwMDUoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjUud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQyLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRJbXBvcnQwMDYoKQotICB7Ci0gICAgLyogZHVwbGljYXRlIHVudXNlZCBpbXBvcnRzIGluIHR3byBpbmxpbmUgc2NoZW1hcyAqLwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW42LndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkSW1wb3J0cygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0Mi54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0Mi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkSW1wb3J0MDA3KCkKLSAgewotICAgIC8qIGR1cGxpY2F0ZSB1bnVzZWQgaW1wb3J0cyBpbiB0d28gaW5saW5lIHNjaGVtYXMgKi8KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluNy53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZEltcG9ydHMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDMueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL1dTRExYTUxOU0NsZWFudXBUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL1dTRExYTUxOU0NsZWFudXBUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDM1NzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS90ZXN0cy9pbnRlcm5hbC9XU0RMWE1MTlNDbGVhbnVwVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgV1NETFhNTE5TQ2xlYW51cFRlc3RzIGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFdTRExYTUxOU0NsZWFudXBUZXN0cy5jbGFzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwMSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgTWFwIG1hcCA9IChNYXApIGltcG9ydE1hbmFnZXIuZ2V0U2NoZW1hVG9QcmVmaXhNYXAoKTsKLSAgICBTZXQgc2NoZW1hcyA9IG1hcC5rZXlTZXQoKTsKLSAgICAvLyBUd28gaW5saW5lIHNjaGVtYXMKLSAgICBhc3NlcnRUcnVlKHNjaGVtYXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUoZXh0RWxlbWVudHMuc2l6ZSgpID09IDIpOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUUxID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoMCk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTAxID0geHNkRUUxLmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczAxID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAxLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDEuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMS5jb250YWlucygidG5zMDQiKSk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTIgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgxKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDIgPSB4c2RFRTIuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDIgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDIuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMi5jb250YWlucygidG5zMDUiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAyLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLQotICAgIFNldCB1bnVzZWRXU0RMUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFdTRExQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDIoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIE1hcCBtYXAgPSAoTWFwKSBpbXBvcnRNYW5hZ2VyLmdldFNjaGVtYVRvUHJlZml4TWFwKCk7Ci0gICAgU2V0IHNjaGVtYXMgPSBtYXAua2V5U2V0KCk7Ci0gICAgLy8gT25lIGlubGluZSBzY2hlbWEKLSAgICBhc3NlcnRUcnVlKHNjaGVtYXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUoZXh0RWxlbWVudHMuc2l6ZSgpID09IDEpOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUUxID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoMCk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTAxID0geHNkRUUxLmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczAxID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAxLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDEuY29udGFpbnMoInRuczAyIikpOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDAzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDMud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0KLSAgICBMaXN0IGV4dEVsZW1lbnRzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICBNYXAgbWFwID0gKE1hcCkgaW1wb3J0TWFuYWdlci5nZXRTY2hlbWFUb1ByZWZpeE1hcCgpOwotICAgIFNldCBzY2hlbWFzID0gbWFwLmtleVNldCgpOwotICAgIC8vIE9uZSBpbmxpbmUgc2NoZW1hCi0gICAgYXNzZXJ0VHJ1ZShzY2hlbWFzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKGV4dEVsZW1lbnRzLnNpemUoKSA9PSAxKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDApOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMSA9IHhzZEVFMS5nZXRTY2hlbWEoKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMwMSA9IChTZXQpIG1hcC5nZXQoaW5saW5lU2NoZW1hMDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMS5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAxLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLQotICAgIFNldCB1bnVzZWRXU0RMUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFdTRExQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA0KCkKLSAgewotICAgIC8vIFRlc3RzIG51bGwgdXNlZCBwcmVmaXggZm9yIFdTREwgdGFyZ2V0IG5hbWVzcGFjZQotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNC53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIE1hcCBtYXAgPSAoTWFwKSBpbXBvcnRNYW5hZ2VyLmdldFNjaGVtYVRvUHJlZml4TWFwKCk7Ci0gICAgU2V0IHNjaGVtYXMgPSBtYXAua2V5U2V0KCk7Ci0gICAgLy8gT25lIGlubGluZSBzY2hlbWEKLSAgICBhc3NlcnRUcnVlKHNjaGVtYXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUoZXh0RWxlbWVudHMuc2l6ZSgpID09IDEpOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUUxID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoMCk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTAxID0geHNkRUUxLmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczAxID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAxLnNpemUoKSA9PSAwKTsKLQotICAgIFNldCB1bnVzZWRXU0RMUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFdTRExQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA1KCkKLSAgewotICAgIC8vIFRlc3QgbnVsbCB1bnVzZWQgcHJlZml4IGluIFdTREwgeG1sbnMgdGFibGUKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LndzZGwiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKGRlZmluaXRpb24pOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgTWFwIG1hcCA9IChNYXApIGltcG9ydE1hbmFnZXIuZ2V0U2NoZW1hVG9QcmVmaXhNYXAoKTsKLSAgICBTZXQgc2NoZW1hcyA9IG1hcC5rZXlTZXQoKTsKLSAgICAvLyBPbmUgaW5saW5lIHNjaGVtYQotICAgIGFzc2VydFRydWUoc2NoZW1hcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZShleHRFbGVtZW50cy5zaXplKCkgPT0gMSk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTEgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgwKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDEgPSB4c2RFRTEuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDEgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDEuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMS5jb250YWlucygidG5zMDIiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDYoKQotICB7Ci0gICAgLy8gVGVzdHMgcmVtb3ZhbCBvZiBzb2FwIHhtbG5zIGVudHJ5IGluIFdTREwgbnMgdGFibGUKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0KLSAgICBMaXN0IGV4dEVsZW1lbnRzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICBNYXAgbWFwID0gKE1hcCkgaW1wb3J0TWFuYWdlci5nZXRTY2hlbWFUb1ByZWZpeE1hcCgpOwotICAgIFNldCBzY2hlbWFzID0gbWFwLmtleVNldCgpOwotICAgIC8vIE9uZSBpbmxpbmUgc2NoZW1hCi0gICAgYXNzZXJ0VHJ1ZShzY2hlbWFzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKGV4dEVsZW1lbnRzLnNpemUoKSA9PSAxKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDApOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMSA9IHhzZEVFMS5nZXRTY2hlbWEoKTsKLQotICAgIFNldCB1bnVzZWRQcmVmaXhlczAxID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAxLnNpemUoKSA9PSAwKTsKLQotICAgIFNldCB1bnVzZWRXU0RMUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFdTRExQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5jb250YWlucygic29hcCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA3KCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDcud3NkbCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoZGVmaW5pdGlvbik7Ci0KLSAgICBMaXN0IGV4dEVsZW1lbnRzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICBNYXAgbWFwID0gKE1hcCkgaW1wb3J0TWFuYWdlci5nZXRTY2hlbWFUb1ByZWZpeE1hcCgpOwotICAgIFNldCBzY2hlbWFzID0gbWFwLmtleVNldCgpOwotICAgIC8vIEZpdmUgaW5saW5lIHNjaGVtYXMKLSAgICBhc3NlcnRUcnVlKHNjaGVtYXMuc2l6ZSgpID09IDYpOwotICAgIGFzc2VydFRydWUoZXh0RWxlbWVudHMuc2l6ZSgpID09IDYpOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUUxID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoMCk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTAxID0geHNkRUUxLmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczAxID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAxLnNpemUoKSA9PSAwKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMiA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDEpOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMiA9IHhzZEVFMi5nZXRTY2hlbWEoKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMwMiA9IChTZXQpIG1hcC5nZXQoaW5saW5lU2NoZW1hMDIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMi5zaXplKCkgPT0gMCk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTMgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgyKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDMgPSB4c2RFRTMuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDMgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAzKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDMuc2l6ZSgpID09IDApOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUU0ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoMyk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTA0ID0geHNkRUU0LmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczA0ID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwNCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczA0LnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDQuY29udGFpbnMobnVsbCkpOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUU1ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoNCk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTA1ID0geHNkRUU1LmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczA1ID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwNSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczA1LnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDUuY29udGFpbnMoInVudXNlZDAxIikpOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUU2ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoNSk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTA2ID0geHNkRUU2LmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczA2ID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwNik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczA2LnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDYuY29udGFpbnMoInVudXNlZDAxIikpOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDgoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwOC53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIE1hcCBtYXAgPSAoTWFwKSBpbXBvcnRNYW5hZ2VyLmdldFNjaGVtYVRvUHJlZml4TWFwKCk7Ci0gICAgU2V0IHNjaGVtYXMgPSBtYXAua2V5U2V0KCk7Ci0gICAgLy8gRml2ZSBpbmxpbmUgc2NoZW1hcwotICAgIGFzc2VydFRydWUoc2NoZW1hcy5zaXplKCkgPT0gNik7Ci0gICAgYXNzZXJ0VHJ1ZShleHRFbGVtZW50cy5zaXplKCkgPT0gNik7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTEgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgwKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDEgPSB4c2RFRTEuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDEgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDEuc2l6ZSgpID09IDApOwotCi0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRUUyID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoMSk7Ci0gICAgWFNEU2NoZW1hIGlubGluZVNjaGVtYTAyID0geHNkRUUyLmdldFNjaGVtYSgpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlczAyID0gKFNldCkgbWFwLmdldChpbmxpbmVTY2hlbWEwMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlczAyLnNpemUoKSA9PSAwKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMyA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDIpOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMyA9IHhzZEVFMy5nZXRTY2hlbWEoKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMwMyA9IChTZXQpIG1hcC5nZXQoaW5saW5lU2NoZW1hMDMpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMy5zaXplKCkgPT0gMCk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgzKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDQgPSB4c2RFRTQuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDQgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTA0KTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDQuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwNC5jb250YWlucyhudWxsKSk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCg0KTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDUgPSB4c2RFRTUuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDUgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTA1KTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDUuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwNS5jb250YWlucygidW51c2VkMDEiKSk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTYgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCg1KTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDYgPSB4c2RFRTYuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDYgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTA2KTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDYuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwNi5jb250YWlucygidW51c2VkMDEiKSk7Ci0KLSAgICBTZXQgdW51c2VkV1NETFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRXU0RMUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ3c2RsVXNlZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFdTRExQcmVmaXhlcy5jb250YWlucygidXNlZDAxIikpOyAvLyB1c2VkIGluIHhzZCBidXQgdW51c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gV1NETAotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgV1NETHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwOSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMS53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIE1hcCBtYXAgPSAoTWFwKSBpbXBvcnRNYW5hZ2VyLmdldFNjaGVtYVRvUHJlZml4TWFwKCk7Ci0gICAgU2V0IHNjaGVtYXMgPSBtYXAua2V5U2V0KCk7Ci0gICAgLy8gVHdvIGlubGluZSBzY2hlbWFzCi0gICAgYXNzZXJ0VHJ1ZShzY2hlbWFzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKGV4dEVsZW1lbnRzLnNpemUoKSA9PSAyKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDApOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMSA9IHhzZEVFMS5nZXRTY2hlbWEoKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMwMSA9IChTZXQpIG1hcC5nZXQoaW5saW5lU2NoZW1hMDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMS5zaXplKCkgPT0gMCk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTIgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgxKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDIgPSB4c2RFRTIuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDIgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDIuc2l6ZSgpID09IDApOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgV1NETHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxMCgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluNS53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIE1hcCBtYXAgPSAoTWFwKSBpbXBvcnRNYW5hZ2VyLmdldFNjaGVtYVRvUHJlZml4TWFwKCk7Ci0gICAgU2V0IHNjaGVtYXMgPSBtYXAua2V5U2V0KCk7Ci0gICAgLy8gVHdvIGlubGluZSBzY2hlbWFzCi0gICAgYXNzZXJ0VHJ1ZShzY2hlbWFzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKGV4dEVsZW1lbnRzLnNpemUoKSA9PSAyKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDApOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMSA9IHhzZEVFMS5nZXRTY2hlbWEoKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMwMSA9IChTZXQpIG1hcC5nZXQoaW5saW5lU2NoZW1hMDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMS5zaXplKCkgPT0gMCk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTIgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgxKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDIgPSB4c2RFRTIuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDIgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDIuc2l6ZSgpID09IDApOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgV1NETHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxMSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluNy53c2RsIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChkZWZpbml0aW9uKTsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIE1hcCBtYXAgPSAoTWFwKSBpbXBvcnRNYW5hZ2VyLmdldFNjaGVtYVRvUHJlZml4TWFwKCk7Ci0gICAgU2V0IHNjaGVtYXMgPSBtYXAua2V5U2V0KCk7Ci0gICAgLy8gVHdvIGlubGluZSBzY2hlbWFzCi0gICAgYXNzZXJ0VHJ1ZShzY2hlbWFzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKGV4dEVsZW1lbnRzLnNpemUoKSA9PSAyKTsKLQotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZEVFMSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudHMuZ2V0KDApOwotICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEwMSA9IHhzZEVFMS5nZXRTY2hlbWEoKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMwMSA9IChTZXQpIG1hcC5nZXQoaW5saW5lU2NoZW1hMDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMwMS5zaXplKCkgPT0gMCk7Ci0KLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFRTIgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzLmdldCgxKTsKLSAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hMDIgPSB4c2RFRTIuZ2V0U2NoZW1hKCk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzMDIgPSAoU2V0KSBtYXAuZ2V0KGlubGluZVNjaGVtYTAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzMDIuc2l6ZSgpID09IDApOwotCi0gICAgU2V0IHVudXNlZFdTRExQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkV1NETFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRXU0RMUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkV1NETFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QxIikpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTZkM2M4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzLmludGVybmFsLkFsbFdTRExVSVRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9CdWlsdEluVHlwZS9OZXdXU0RMRmlsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9CdWlsdEluVHlwZS9OZXdXU0RMRmlsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0YTc3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvQnVpbHRJblR5cGUvTmV3V1NETEZpbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTmV3V1NETEZpbGUxIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdXU0RMRmlsZTEvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUxLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczpwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUxLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3AzIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3AzUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJvcDNSZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6b3AzUmVzcG9uc2UiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ib3AzUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpvcDMiPjwvd3NkbDpwYXJ0PgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld1BhcnQiIHR5cGU9InA6c3RyaW5nIj48L3dzZGw6cGFydD4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0MSIgdHlwZT0icDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld1BhcnQyIiB0eXBlPSJwOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3UGFydDQiIHR5cGU9InA6c3RyaW5nIj48L3dzZGw6cGFydD4KLQkKLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0MyIgdHlwZT0icDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9InAyIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Im9wMyI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6b3AzUmVxdWVzdCIgbmFtZT0iYWFhIj48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOm9wM1Jlc3BvbnNlIiBuYW1lPSJiYmIiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iYjEiIHR5cGU9InRuczpwMiI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJvcDMiPgotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUxL29wMyIgLz4KLQkJCTx3c2RsOmlucHV0IG5hbWU9ImFhYSI+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbmFtZT0iYmJiIj4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJzMSI+Ci0JCTx3c2RsOnBvcnQgbmFtZT0iTmV3UG9ydCIgYmluZGluZz0idG5zOmIxIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9JbXBvcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5MDIyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiA+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9NdWx0aXBsZUlubGluZVNjaGVtYXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvTXVsdGlwbGVJbmxpbmVTY2hlbWFzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjM2JmODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9NdWx0aXBsZUlubGluZVNjaGVtYXMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNdWx0aXBsZUlubGluZVNjaGVtYXMiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL011bHRpcGxlSW5saW5lU2NoZW1hcy8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL011bHRpcGxlSW5saW5lU2NoZW1hcy8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6YWJjPSJodHRwOi8vYWJjIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL011bHRpcGxlSW5saW5lU2NoZW1hcy8iPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOmJvb2xlYW4iIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZmZmIj48L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL011bHRpcGxlSW5saW5lU2NoZW1hcy8xIj4KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjwveHNkOmNvbXBsZXhUeXBlPgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTXVsdGlwbGVJbmxpbmVTY2hlbWFzLzIiPgotCQkJCi0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vYWJjIj4KLQkJCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9ImFiYzpJbXBFbGVtMSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNdWx0aXBsZUlubGluZVNjaGVtYXMiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJNdWx0aXBsZUlubGluZVNjaGVtYXNTT0FQIiB0eXBlPSJ0bnM6TXVsdGlwbGVJbmxpbmVTY2hlbWFzIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL011bHRpcGxlSW5saW5lU2NoZW1hcy9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJNdWx0aXBsZUlubGluZVNjaGVtYXMiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpNdWx0aXBsZUlubGluZVNjaGVtYXNTT0FQIiBuYW1lPSJNdWx0aXBsZUlubGluZVNjaGVtYXNTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0ltcG9ydHNXaXRoTmFtZXNwYWNlL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0ltcG9ydHNXaXRoTmFtZXNwYWNlL3JlZkJ5UGFydEVsZW1lbnQvVW51c2VkL01haW4ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9yZWZCeVBhcnRFbGVtZW50L1VudXNlZC9NYWluLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjg2NzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0ltcG9ydHNXaXRoTmFtZXNwYWNlL3JlZkJ5UGFydEVsZW1lbnQvVW51c2VkL01haW4ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNYWluIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb24iPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvSW1wb3J0c1dpdGhOYW1lc3BhY2UvcmVmQnlQYXJ0RWxlbWVudC9Vc2VkL01haW4ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9yZWZCeVBhcnRFbGVtZW50L1VzZWQvTWFpbi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQwYzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9yZWZCeVBhcnRFbGVtZW50L1VzZWQvTWFpbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik1haW4iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ4c2QxOkltcEVsZW0xIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpblBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML0ltcG9ydHNXaXRoTmFtZXNwYWNlL3JlZkJ5UGFydFR5cGUvVXNlZC9NYWluLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvSW1wb3J0c1dpdGhOYW1lc3BhY2UvcmVmQnlQYXJ0VHlwZS9Vc2VkL01haW4ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDljOGFjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvSW1wb3J0c1dpdGhOYW1lc3BhY2UvcmVmQnlQYXJ0VHlwZS9Vc2VkL01haW4ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNYWluIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkMTpJbXBDVDEiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvTXVsdGlwbGVJbmxpbmVTY2hlbWFzL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML011bHRpcGxlSW5saW5lU2NoZW1hcy9JbXBvcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5ZmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvTXVsdGlwbGVJbmxpbmVTY2hlbWFzL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML011bHRpcGxlSW5saW5lU2NoZW1hcy9yZWZCeVBhcnRFbGVtZW50L1VudXNlZC9NYWluLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvTXVsdGlwbGVJbmxpbmVTY2hlbWFzL3JlZkJ5UGFydEVsZW1lbnQvVW51c2VkL01haW4ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBkYWNkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvTXVsdGlwbGVJbmxpbmVTY2hlbWFzL3JlZkJ5UGFydEVsZW1lbnQvVW51c2VkL01haW4ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNYWluIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCSAgIAk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb24iPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvTXVsdGlwbGVJbmxpbmVTY2hlbWFzL3JlZkJ5UGFydEVsZW1lbnQvVXNlZC9NYWluLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvTXVsdGlwbGVJbmxpbmVTY2hlbWFzL3JlZkJ5UGFydEVsZW1lbnQvVXNlZC9NYWluLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MTg0ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML011bHRpcGxlSW5saW5lU2NoZW1hcy9yZWZCeVBhcnRFbGVtZW50L1VzZWQvTWFpbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik1haW4iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ4c2QxOkltcEVsZW0xIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpblBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML011bHRpcGxlSW5saW5lU2NoZW1hcy9yZWZCeVBhcnRUeXBlL1VzZWQvTWFpbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML011bHRpcGxlSW5saW5lU2NoZW1hcy9yZWZCeVBhcnRUeXBlL1VzZWQvTWFpbi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTdjMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9NdWx0aXBsZUlubGluZVNjaGVtYXMvcmVmQnlQYXJ0VHlwZS9Vc2VkL01haW4ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNYWluIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCSAgIAk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkMTpJbXBDVDEiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC9JbXBvcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5ZmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC9JbXBvcnQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvSW1wb3J0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmE3NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC9JbXBvcnQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDJDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wMkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wMkF0dHIxIiB0eXBlPSJ0bnM6SW1wMlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXAyQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDJFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAyU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDJTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDJDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvSW1wb3J0My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL0ltcG9ydDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzE1ZDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvSW1wb3J0My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDQueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wM0NUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbXAzR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXAzQXR0cjEiIHR5cGU9InRuczpJbXAzU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDNBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW1wM0VsZW0xIiB0eXBlPSJRMTpJbXA0Q1QxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDNTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wM1NUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wM0NUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC9JbXBvcnQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvSW1wb3J0NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTE5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC9JbXBvcnQ0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0IiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA0Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDRHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDRBdHRyMSIgdHlwZT0idG5zOkltcDRTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA0RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA0U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA0Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDRFbGVtMiIgdHlwZT0iUTE6SW1wM0NUMiI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL3Rlc3QvTWFpbjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODliYWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik1haW4iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCSAgIAk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSJBLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249IkIueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2QxOkltcENUMSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW5Qb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVxdWVzdCI+PC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW4yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4OWJhYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW4yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWFpbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNkMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249IkEueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkgICAJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQkgICAJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iQi54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDE6SW1wQ1QxIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpblBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW4zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL3Rlc3QvTWFpbjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMwNDVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL3Rlc3QvTWFpbjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNYWluIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkgICAJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJBLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkgICAJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQkgICAJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJCLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2QxOkltcENUMSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW5Qb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVxdWVzdCI+PC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW40LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOTc2NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW40LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWFpbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNkMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJICAgCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQi54c2QiPjwveHNkOmluY2x1ZGU+Ci0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWE+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iQy54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+PC94c2Q6aW1wb3J0PiAKLSAgICAgICAgICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJDLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj48L3hzZDppbXBvcnQ+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iRC54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+PC94c2Q6aW1wb3J0PgotICAgICAgICAgICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkUueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPjwveHNkOmltcG9ydD4gCi0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWE+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iRi54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+PC94c2Q6aW1wb3J0PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2QxOkltcENUMSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW5Qb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVxdWVzdCI+PC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW41LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYjcxZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW41LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWFpbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNkMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDIueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJICAgCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkgICAJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDE6SW1wQ1QxIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpblBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1VudXNlZC90ZXN0L01haW42LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL3Rlc3QvTWFpbjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcyNzM5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL3Rlc3QvTWFpbjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJNYWluIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCQkgICAJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0Mi54c2QiPgotCQkJPC94c2Q6aW1wb3J0PgotCQkgICAJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCSAgIAk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCSAgIAk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQyLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkMTpJbXBDVDEiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TWFpbk9wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvVW51c2VkL3Rlc3QvTWFpbjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjk0OTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9VbnVzZWQvdGVzdC9NYWluNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik1haW4iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDMueHNkIj4KLQkJCTwveHNkOmltcG9ydD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpblBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik1haW5PcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk1haW5PcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvSW1wb3J0MDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9JbXBvcnQwMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiNWE5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9JbXBvcnQwMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydDAwMSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydDAwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnQwMDFTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0MDAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnQwMDEiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydDAwMVNPQVAiIG5hbWU9IkltcG9ydDAwMVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWU0MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAxLyIKLQluYW1lPSJNYWluMDAxIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAxLyIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIj4KLQkKLQk8IS0tIFVudXNlZCBJbXBvcnQgLS0+Ci0JCi0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgotCQlsb2NhdGlvbj0iSW1wb3J0MDAxLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMDIwOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAyLyIKLSAgICBuYW1lPSJNYWluMDAyIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAyLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgotCQotCTwhLS0gVXNlZCBJbXBvcnQgLS0+Ci0JCi0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgotCQlsb2NhdGlvbj0iSW1wb3J0MDAxLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci0JCi0JPHdzZGw6c2VydmljZSBuYW1lPSJNYWluU2VydmljZSI+Ci0JCTx3c2RsOnBvcnQgbmFtZT0iTmV3UG9ydCIgYmluZGluZz0id3NkbDE6SW1wb3J0MDAxU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyI+PC9zb2FwOmFkZHJlc3M+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGE2MDJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAzLyIKLSAgICBuYW1lPSJNYWluMDAzIgotICAgCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDMvIj4KLQotCTwhLS0gVW51c2VkIEltcG9ydCAtLT4KLQkKLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCi0JCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+Ci0JPC93c2RsOmltcG9ydD4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzMmI1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNC8iCi0gICAgbmFtZT0iTWFpbjAwNCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIj4KLQkKLQk8IS0tIFVzZWQgSW1wb3J0IC0tPgotCQotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKLQkJbG9jYXRpb249IkltcG9ydDAwMS53c2RsIj4KLQk8L3dzZGw6aW1wb3J0PgotCQotCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpblNlcnZpY2UiPgotCQk8d3NkbDpwb3J0IG5hbWU9Ik5ld1BvcnQiIGJpbmRpbmc9IndzZGwxOkltcG9ydDAwMVNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iPjwvc29hcDphZGRyZXNzPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVjMTNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNS8iCi0gICAgbmFtZT0iTWFpbjAwNSIKLSAgIAl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA1LyI+Ci0KLQk8IS0tIFVudXNlZCBJbXBvcnQgLS0+Ci0JCi0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKLQkJbG9jYXRpb249IkltcG9ydDAwMS53c2RsIj4KLQk8L2ltcG9ydD4KLTwvZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZTIwYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDYvIgotICAgIG5hbWU9Ik1haW4wMDYiCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLSAgIAl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA2LyI+Ci0KLQk8IS0tIFVzZWQgSW1wb3J0IC0tPgotCQotCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCi0JCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+Ci0JPC9pbXBvcnQ+Ci0JCi0JPHNlcnZpY2UgbmFtZT0iTWFpblNlcnZpY2UiPgotCQk8cG9ydCBuYW1lPSJOZXdQb3J0IiBiaW5kaW5nPSJ3c2RsMTpJbXBvcnQwMDFTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIj48L3NvYXA6YWRkcmVzcz4KLQkJPC9wb3J0PgotCTwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNjZiNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA3LyIKLQluYW1lPSJNYWluMDA3IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA3LyIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIj4KLQkKLQk8IS0tIFVudXNlZCBJbXBvcnQgLS0+Ci0JCi0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgotCQlsb2NhdGlvbj0iSW1wb3J0MDAxLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvY29yZS9NYWluMDA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MDcwZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA3LyIKLQluYW1lPSJNYWluMDA3IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA3LyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgotCQotCTwhLS0gVXNlZCBJbXBvcnQgLS0+Ci0JCi0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgotCQlsb2NhdGlvbj0iSW1wb3J0MDAxLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci0JCi0JPHdzZGw6c2VydmljZSBuYW1lPSJNYWluU2VydmljZSI+Ci0JCTx3c2RsOnBvcnQgbmFtZT0iTmV3UG9ydCIgYmluZGluZz0iSW1wb3J0MDAxU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyI+PC9zb2FwOmFkZHJlc3M+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL2NvcmUvTWFpbjAwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGNiZjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9jb3JlL01haW4wMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwOS8iCi0JbmFtZT0iTWFpbjAwOSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwOS8iPgotCQotCTwhLS0gVW51c2VkIEludmFsaWQgSW1wb3J0IC0tPgotCQotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRmlsZU5vdEZvdW5kLyIKLQkJbG9jYXRpb249IldTRExGaWxlTm90Rm91bmQud3NkbCI+Ci0JPC93c2RsOmltcG9ydD4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy90ZXN0L0ltcG9ydDAwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvSW1wb3J0MDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYjVhOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvSW1wb3J0MDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnQwMDEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnQwMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iSW1wb3J0MDAxU09BUCIgdHlwZT0idG5zOkltcG9ydDAwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0MDAxIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpJbXBvcnQwMDFTT0FQIiBuYW1lPSJJbXBvcnQwMDFTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvSW1wb3J0MDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9JbXBvcnQwMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkYTJjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9JbXBvcnQwMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMi8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydDAwMiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMi8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAyLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydDAwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnQwMDJTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0MDAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMi9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnQwMDIiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydDAwMlNPQVAiIG5hbWU9IkltcG9ydDAwMlNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9NYWluMDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9NYWluMDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDY0OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDEvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik1haW4wMDEiCi0JeG1sbnM6d3NkbDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKLQl4bWxuczp3c2RsMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDIvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAxLyI+Ci0KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iIGxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+PC93c2RsOmltcG9ydD4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMi8iIGxvY2F0aW9uPSJJbXBvcnQwMDIud3NkbCI+PC93c2RsOmltcG9ydD4KLSAgICAKLSAgICA8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDEvIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluMDAxIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTWFpbjAwMVNPQVAiIHR5cGU9InRuczpNYWluMDAxIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDEvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpbjAwMSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk1haW4wMDFTT0FQIiBuYW1lPSJNYWluMDAxU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9NYWluMDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9NYWluMDAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNWMxOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDIvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik1haW4wMDIiCi0JeG1sbnM6d3NkbDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKLQl4bWxuczp3c2RsMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDIvIgotCXhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotICAgIHhtbG5zOnhzZDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwMi8iPgotCi0gICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIiBsb2NhdGlvbj0iSW1wb3J0MDAxLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDIvIiBsb2NhdGlvbj0iSW1wb3J0MDAyLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGxvY2F0aW9uPSIuLi8uLi8uLi9YU0QvVW51c2VkL0ltcG9ydDEueHNkIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIgbG9jYXRpb249Ii4uLy4uLy4uL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QiPjwvd3NkbDppbXBvcnQ+Ci0gICAgCi0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAyLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpbjAwMiI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik1haW4wMDJTT0FQIiB0eXBlPSJ0bnM6TWFpbjAwMiI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAyL05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9Ik1haW4wMDIiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpNYWluMDAyU09BUCIgbmFtZT0iTWFpbjAwMlNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM4MjBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy90ZXN0L01haW4wMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAzLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDAzIgotCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCi0JeG1sbnM6d3NkbDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAyLyIKLQl4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLSAgICB4bWxuczp4c2QyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDMvIj4KLQotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIgbG9jYXRpb249IkltcG9ydDAwMS53c2RsIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAyLyIgbG9jYXRpb249IkltcG9ydDAwMi53c2RsIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBsb2NhdGlvbj0iLi4vLi4vLi4vWFNEL1VudXNlZC9JbXBvcnQxLnhzZCI+PC93c2RsOmltcG9ydD4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiIGxvY2F0aW9uPSIuLi8uLi8uLi9YU0QvVW51c2VkL0ltcG9ydDYueHNkIj48L3dzZGw6aW1wb3J0PgotICAgIAotICAgIDx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwMy8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InhzZDE6SW1wRWxlbTEiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0ieHNkMjpJbXA2RWxlbTEiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpbjAwMyI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik1haW4wMDNTT0FQIiB0eXBlPSJ0bnM6TWFpbjAwMyI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAzL05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9Ik1haW4wMDMiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpNYWluMDAzU09BUCIgbmFtZT0iTWFpbjAwM1NPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjA4MTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy90ZXN0L01haW4wMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA0LyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDA0IgotCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCi0JeG1sbnM6d3NkbDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAyLyIKLQl4bWxuczp4c2QxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLSAgICB4bWxuczp4c2QyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDQvIj4KLQotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIgbG9jYXRpb249IkltcG9ydDAwMS53c2RsIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAyLyIgbG9jYXRpb249IkltcG9ydDAwMi53c2RsIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBsb2NhdGlvbj0iLi4vLi4vLi4vWFNEL1VudXNlZC9JbXBvcnQxLnhzZCI+PC93c2RsOmltcG9ydD4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiIGxvY2F0aW9uPSIuLi8uLi8uLi9YU0QvVW51c2VkL0ltcG9ydDYueHNkIj48L3dzZGw6aW1wb3J0PgotICAgIAotICAgIDx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNC8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IHR5cGU9InhzZDE6SW1wQ1QxIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IHR5cGU9InhzZDI6SW1wNkNUMSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluMDA0Ij4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTWFpbjAwNFNPQVAiIHR5cGU9InRuczpNYWluMDA0Ij4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDQvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpbjAwNCI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk1haW4wMDRTT0FQIiBuYW1lPSJNYWluMDA0U09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9NYWluMDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvdGVzdC9NYWluMDA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMmRmNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDUvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik1haW4wMDUiCi0JeG1sbnM6eHNkMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0gICAgeG1sbnM6eHNkMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA1LyI+Ci0KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgbG9jYXRpb249Ii4uLy4uLy4uL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QiPjwvd3NkbDppbXBvcnQ+Ci0gICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2IiBsb2NhdGlvbj0iLi4vLi4vLi4vWFNEL1VudXNlZC9JbXBvcnQ2LnhzZCI+PC93c2RsOmltcG9ydD4KLSAgICAKLSAgICA8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDUvIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCB0eXBlPSJ4c2QxOkltcENUMSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCB0eXBlPSJ4c2QyOkltcDZDVDEiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpbjAwNSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik1haW4wMDVTT0FQIiB0eXBlPSJ0bnM6TWFpbjAwNSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA1L05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9Ik1haW4wMDUiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpNYWluMDA1U09BUCIgbmFtZT0iTWFpbjAwNVNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL3Rlc3QvTWFpbjAwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmFkMDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy90ZXN0L01haW4wMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA2LyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDA2IgotCXhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotICAgIHhtbG5zOnhzZDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNi8iPgotCi0gICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGxvY2F0aW9uPSIuLi8uLi8uLi9YU0QvVW51c2VkL0ltcG9ydDEueHNkIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIgbG9jYXRpb249Ii4uLy4uLy4uL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QiPjwvd3NkbDppbXBvcnQ+Ci0gICAgCi0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA2LyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpbjAwNiI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik1haW4wMDZTT0FQIiB0eXBlPSJ0bnM6TWFpbjAwNiI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA2L05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9Ik1haW4wMDYiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpNYWluMDA2U09BUCIgbmFtZT0iTWFpbjAwNlNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC9JbXBvcnQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC9JbXBvcnQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJ0bnM6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXBFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTMzNTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWFpbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0gICAgeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAxLyIKLSAgICB4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDIvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzZDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJICAgIHhtbG5zOnRuczAzPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMy8iCi0JCSAgICB4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDQvIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQkJICAgCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbk9wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCSAgICB4bWxuczp0bnMwNT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDYvIgotCQkgICAgeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjA3LyIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JCSAgIAk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCI+Ci0JCQk8L3hzZDppbXBvcnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtIiB0eXBlPSJ4c2QxOkltcENUMiI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik1haW5PcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2QxOkltcENUMSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJNYWluT3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW5Qb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJNYWluT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVxdWVzdCI+PC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpNYWluT3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzdlNmQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0gICAgeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAxLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDAyIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQkJICAgIHhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMy8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW4wMDIiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJNYWluMDAyU09BUCIgdHlwZT0idG5zOk1haW4wMDIiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJNYWluMDAyIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TWFpbjAwMlNPQVAiIG5hbWU9Ik1haW4wMDJTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjU3ZDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0gICAgeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAxLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDAzIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQkJICAgIHhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMy8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphcHBpbmZvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRuczAxOnRlc3RFbGVtZW50IC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDphcHBpbmZvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW4wMDIiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJNYWluMDAyU09BUCIgdHlwZT0idG5zOk1haW4wMDIiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJNYWluMDAyIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TWFpbjAwMlNPQVAiIG5hbWU9Ik1haW4wMDJTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzgxMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDA0IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0iTmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik1haW4wMDQiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9Ik5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTWFpbjAwNFNPQVAiIHR5cGU9Ik1haW4wMDQiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJNYWluMDA0Ij4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJNYWluMDA0U09BUCIgbmFtZT0iTWFpbjAwNFNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2M2EyODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLSAgICB4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDEvIgotICAgIHhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4tTlVMTC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iTWFpbjAwNSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JCSAgICB4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDIvIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0bnMwMTp0ZXN0RWxlbWVudCAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluMDAyIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTWFpbjAwMlNPQVAiIHR5cGU9InRuczpNYWluMDAyIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpbjAwMiI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk1haW4wMDJTT0FQIiBuYW1lPSJNYWluMDAyU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzOTgwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik1haW4wMDYiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluMDA2Ij4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTWFpbjAwNlNPQVAiIHR5cGU9InRuczpNYWluMDA2Ij4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJNYWluMDA2Ij4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzEyMWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iTWFpbjAwNyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAxLyI+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3MiIHR5cGU9InhzZDpieXRlIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdCI+Ci0gICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFhYSI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMi8iCi0gICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAyLyIKLSAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAzLyIKLSAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9VbnVzZWRBQUEvIgotICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDQvIgotICAgICAgICAgIHhtbG5zOnVudXNlZDAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1VudXNlZC8iCi0gICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCTwveHNkOnNjaGVtYT4KLQkJCi0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDUvIgotICAgICAgICAgIHhtbG5zOnVzZWQwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDEvIgotICAgICAgICAgIHhtbG5zOnVudXNlZDAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1VudXNlZC8iICAgICAgICAgIAotICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhYWEiIHR5cGU9InhzZDpieXRlIj4KLSAgICAgICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgICAgPHhzZDphcHBpbmZvPgotICAgICAgICAgICAgICAgICAgIDx1c2VkMDE6ZHVtbXlFbGVtLz4KLSAgICAgICAgICAgICAgICA8L3hzZDphcHBpbmZvPgotICAgICAgICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCi0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpbjAwNyI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik1haW4wMDdTT0FQIiB0eXBlPSJ0bnM6TWFpbjAwNyI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluL05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9Ik1haW4wMDciPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpNYWluMDA3U09BUCIgbmFtZT0iTWFpbjAwN1NPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOWJjYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJNYWluMDA4IgotCXhtbG5zPSJodHRwOi8vVU5VU0VELU5VTEwiCi0JeG1sbnM6dXNlZDAxPSJodHRwOi8vWFNEVXNlZFdTRExVbnVzZWQiCi0JeG1sbnM6d3NkbFVzZWQ9Imh0dHA6Ly9XU0RMVXNlZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbi8iPgotICAgIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9XU0RMVXNlZCIgbG9jYXRpb249Ii4vYWJjLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDEvIj4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzcyIgdHlwZT0ieHNkOmJ5dGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImN0Ij4KLSAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWFhIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAyLyIKLSAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDIvIgotICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDMvIgotICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1VudXNlZEFBQS8iCi0gICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCTwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wNC8iCi0gICAgICAgICAgeG1sbnM6dW51c2VkMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVW51c2VkLyIKLSAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJPC94c2Q6c2NoZW1hPgotCQkKLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wNS8iCi0gICAgICAgICAgeG1sbnM6dXNlZDAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMS8iCi0gICAgICAgICAgeG1sbnM6dW51c2VkMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVW51c2VkLyIgICAgICAgICAgCi0gICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFhYSIgdHlwZT0ieHNkOmJ5dGUiPgotICAgICAgICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICA8eHNkOmFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICAgPHVzZWQwMTpkdW1teUVsZW0vPgotICAgICAgICAgICAgICAgIDwveHNkOmFwcGluZm8+Ci0gICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNYWluMDA4Ij4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTWFpbjAwOFNPQVAiIHR5cGU9InRuczpNYWluMDA4Ij4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4vTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpbjAwOCI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk1haW4wMDhTT0FQIiBuYW1lPSJNYWluMDA4U09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGJhNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDJDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wMkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wMkF0dHIxIiB0eXBlPSJ0bnM6SW1wMlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXAyQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDJFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAyU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDJTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDJDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxNWQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDQueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wM0NUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbXAzR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXAzQXR0cjEiIHR5cGU9InRuczpJbXAzU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDNBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW1wM0VsZW0xIiB0eXBlPSJRMTpJbXA0Q1QxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDNTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wM1NUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wM0NUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDUxOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0IiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA0Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDRHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDRBdHRyMSIgdHlwZT0idG5zOkltcDRTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA0RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA0U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA0Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDRFbGVtMiIgdHlwZT0iUTE6SW1wM0NUMiI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjBlODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDUiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDYueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXA1R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXA1QXR0cjEiIHR5cGU9InRuczpJbXA1U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDVBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDVTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA1RWxlbTIiIHR5cGU9IlExOkltcDZDVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDE1ZWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXA2R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXA2QXR0cjEiIHR5cGU9InRuczpJbXA2U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDZBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDZTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA2RWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmMxR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMxQXR0cjEiIHR5cGU9InRuczpJbmMxU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzFBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTMueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMkNUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbmMyR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMyQXR0cjEiIHR5cGU9InRuczpJbmMyU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzJBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzJTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMlNUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMkNUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTAyMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTQueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jM0NUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbmMzR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMzQXR0cjEiIHR5cGU9InRuczpJbmMzU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzNBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5jM0VsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzNTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jM1NUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jM0NUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTliMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM0R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM0QXR0cjEiIHR5cGU9InRuczpJbmM0U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzRBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzRTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MmMzNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM1R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM1QXR0cjEiIHR5cGU9InRuczpJbmM1U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzVBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzVTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNmQ0ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM2Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzZHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzZBdHRyMSIgdHlwZT0idG5zOkluYzZTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM2RWxlbTEiIHR5cGU9IlExOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM2U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2ZDAwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9wcm92aXNpb25hbC9jb3JlL0lNZXNzYWdlIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGZlZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZXRlc3RzLmphcgotamF2YUNvbXBpbGVyLndzZGx2YWxpZGF0ZXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhNmRiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDIwZTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1NjowNSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTRmYTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6NDc6MjcgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1NmY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNGcmkgRmViIDE3IDE0OjIzOjU5IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE2NmQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1NTowMiBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjcxN2JlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDMKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGx2YWxpZGF0ZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVfUFJPVklERVJfTkFNRQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjAiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2Uud3N0LndzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuYXBhY2hlLmFudCwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIiwKLSBvcmcuYXBhY2hlLnhlcmNlcywKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDQ1Y2ZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uud3NkbHZhbGlkYXRldGVzdHMuamFyID0gc3JjLwotb3V0cHV0LndzZGx2YWxpZGF0ZXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHdzZGx2YWxpZGF0ZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI3OGUwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdAotX1BMVUdJTl9OQU1FICAgICAgID0gV1NETCBWYWxpZGF0b3IgVGVzdHMgUGx1Zy1pbgotX1BST1ZJREVSX05BTUUgICAgID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZTdjNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsMTF2YWxpZGF0b3IiPgotICAgICAgPHZhbGlkYXRvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuU2ltcGxlRXh0ZW5zaW9uc1ZhbGlkYXRvciIKLSAgICAgICAgICAgIG5hbWVzcGFjZT0iaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvRXh0ZW5zaW9ucyI+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5jYXRhbG9nQ29udHJpYnV0aW9ucyI+Ci0gICAgICA8Y2F0YWxvZ0NvbnRyaWJ1dGlvbj4KLSAgICAgICAgIDx1cmkKLSAgICAgICAgICAgICAgIG5hbWU9Imh0dHA6Ly9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL0V4dGVuc2lvbnMiCi0gICAgICAgICAgICAgICB1cmk9InRlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpb25zLnhzZCI+Ci0gICAgICAgICA8L3VyaT4KLSAgICAgIDwvY2F0YWxvZ0NvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4NDg2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbkluZm9JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbk1lc3NhZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIFRlc3QgdGhlIFdTREwgdmFsaWRhdGlvbiBmcmFtZXdvcmsgVmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JXcmFwcGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4gVGVzdHMgdG8gYmUgcGVyZm9ybWVkOjxici8+Ci0gICAqIDEuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuPGJyLz4KLSAgICogMi4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCA9IG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCk7Ci0JICB2YWxpZGF0b3Iuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsIjsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIGNvbnRleHQpOwotCSAgdmFsaWRhdG9yLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLQkgIHZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBjb250ZXh0KTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgdmFsaWRhdG9yLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLQkgIGFzc2VydFRydWUoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGEgdmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQkgIAotICAgICAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQyID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQkgIHZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24oY29udGV4dDIpOwotCSAgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBjb250ZXh0Mik7Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQyKTsKLQkgIHZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24oY29udGV4dDIpOwotCSAgcmVwb3J0MiA9IG51bGw7Ci0JICBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIGNvbnRleHQyKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgdmFsaWRhdG9yLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICBhc3NlcnRGYWxzZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYW4gaW52YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gbG9jYXRlIHBsdWctaW4gbG9jYXRpb246ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBzZXR1cFZhbGlkYXRpb24gbWV0aG9kLgotICAgKiAxLiBUZXN0IHRoYXQgYWZ0ZXIgcnVuIGZvciBhIGNvbnRleHQgWE1MIGFuZCBYU0QgZ3JhbW1hciBwb29scyBleGlzdCBmb3IgdGhlIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2V0dXBWYWxpZGF0aW9uKCkKLSAgewotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCQotCU5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCA9IG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCk7Ci0JYXNzZXJ0TnVsbCgiQW4gWE1MIGdyYW1tYXIgcG9vbCBhbHJlYWR5IGV4aXN0cyBmb3IgdGhlIGNvbnRleHQuIiwgdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sRm9yQ29udGV4dChjb250ZXh0KSk7Ci0JYXNzZXJ0TnVsbCgiQW4gWFNEIGdyYW1tYXIgcG9vbCBhbHJlYWR5IGV4aXN0cyBmb3IgdGhlIGNvbnRleHQuIiwgdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sRm9yQ29udGV4dChjb250ZXh0KSk7Ci0JCi0JdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLQkKLQlhc3NlcnROb3ROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGRvZXMgbm90IGV4aXN0IGFmdGVyIHRoZSBzZXR1cFZhbGlkYXRpb24gbWV0aG9kIGlzIHJ1bi4iLCB2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQlhc3NlcnROb3ROdWxsKCJBbiBYU0QgZ3JhbW1hciBwb29sIGRvZXMgbm90IGV4aXN0IGFmdGVyIHRoZSBzZXR1cFZhbGlkYXRpb24gbWV0aG9kIGlzIHJ1bi4iLCB2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQkKLQl2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xzTWFwKCkuY2xlYXIoKTsKLQl2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xzTWFwKCkuY2xlYXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHRlYXJkb3duVmFsaWRhdGlvbiBtZXRob2QuCi0gICAqIDEuIFRlc3QgdGhhdCBhZnRlciBydW4gZm9yIGEgY29udGV4dCBYTUwgYW5kIFhTRCBncmFtbWFyIHBvb2xzIGRvIG5vdCBleGlzdCBmb3IgdGhlIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGVhcmRvd25WYWxpZGF0aW9uKCkKLSAgewotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCQotCU5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCA9IG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCk7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLnB1dChjb250ZXh0LCBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCkpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5wdXQoY29udGV4dCwgbmV3IElubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsKCkpOwotCQotCXZhbGlkYXRvci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dCk7Ci0JCi0JYXNzZXJ0TnVsbCgiQW4gWE1MIGdyYW1tYXIgcG9vbCBleGlzdHMgYWZ0ZXIgdGhlIHRlYXJkb3duVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCWFzc2VydE51bGwoIkFuIFhTRCBncmFtbWFyIHBvb2wgZXhpc3RzIGFmdGVyIHRoZSB0ZWFyZG93blZhbGlkYXRpb24gbWV0aG9kIGlzIHJ1bi4iLCB2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQkKLQl2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xzTWFwKCkuY2xlYXIoKTsKLQl2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xzTWFwKCkuY2xlYXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgY29udmVydGluZyBhIG1lc3NhZ2UuIFRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIAotICAgKiBuZXcgcmVwb3J0LgotICAgKiAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0gICAqIDIuIFRlc3QgdGhhdCBhIG5lc3RlZCBtZXNzYWdlIGlzIGFkZGVkIGFzIGEgbmVzdGVkIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q29udmVydE1lc3NhZ2UoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IGEgcmVndWxhciBtZXNzYWdlIGlzIGFkZGVkIGFzIGlzLgotCVZhbGlkYXRpb25NZXNzYWdlSW1wbCBtZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbCgibWVzc2FnZSIsIDEsIDIsIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IsICJmaWxlOi9zb21ldXJpIik7Ci0JVmFsaWRhdGlvbkluZm8gcmVwb3J0ID0gbmV3IFZhbGlkYXRpb25JbmZvKCJmaWxlOi9zb21ldXJpIik7Ci0JdmFsaWRhdG9yLmNvbnZlcnRNZXNzYWdlKG1lc3NhZ2UsIHJlcG9ydCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgbGluZSBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRMaW5lTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGhhcyBhbiBpbmNvcnJlY3RseSByZWdpc3RyZWQgbmVzdGVkIG1lc3NhZ2UuIiwgMCwgcmVwb3J0LmdldE5lc3RlZE1lc3NhZ2VzKCkuc2l6ZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotCVZhbGlkYXRpb25NZXNzYWdlSW1wbCBtZXNzYWdlMiA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIm1lc3NhZ2UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SLCAiZmlsZTovc29tZXVyaTIiKTsKLQlWYWxpZGF0aW9uSW5mbyByZXBvcnQyID0gbmV3IFZhbGlkYXRpb25JbmZvKCJmaWxlOi9zb21ldXJpIik7Ci0JdmFsaWRhdG9yLmNvbnZlcnRNZXNzYWdlKG1lc3NhZ2UyLCByZXBvcnQyKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXBvcnQgd2l0aCB0aGUgbmVzdGVkIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSAxIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiVGhlIGNvbnRhaW5lciBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkyIiwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRVcmkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgY29udGFpbmVyIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSAxIG5lc3RlZCBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG5lc3RlZCBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkyIiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRVcmkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0TWVzc2FnZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBuZXN0ZWQgbWVzc2FnZSBsaW5lIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMSwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRMaW5lTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG5lc3RlZCBtZXNzYWdlIGNvbHVtbiBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIDIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0Q29sdW1uTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG5lc3RlZCBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFNldmVyaXR5KCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhIG5lc3RlZCBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBjb252ZXJ0aW5nIGEgV1NETCB2YWxpZGF0aW9uIHJlcG9ydCB0byBhIFhNTCB2YWxpZGF0aW9uIHJlcG9ydC4KLSAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG5ldyByZXBvcnQuCi0gICAqIDEuIFRlc3QgdGhhdCBhIHJlZ3VsYXIgbWVzc2FnZSBpcyBhZGRlZCBhcyBpcy4KLSAgICogMi4gVGVzdCB0aGF0IGEgbmVzdGVkIG1lc3NhZ2UgaXMgYWRkZWQgYXMgYSBuZXN0ZWQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IGEgcmVndWxhciBtZXNzYWdlIGlzIGFkZGVkIGFzIGlzLgotCVZhbGlkYXRpb25JbmZvSW1wbCB3c2RscmVwb3J0ID0gbmV3IFZhbGlkYXRpb25JbmZvSW1wbCgiZmlsZTovc29tZXVyaSIsIG5ldyBNZXNzYWdlR2VuZXJhdG9yKFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLnZhbGlkYXRld3NkbCIpKSk7Ci0Jd3NkbHJlcG9ydC5hZGRFcnJvcigibWVzc2FnZSIsIDEsIDIsICJmaWxlOi9zb21ldXJpIik7Ci0JVmFsaWRhdGlvblJlcG9ydCByZXBvcnQgPSB2YWxpZGF0b3IuY29udmVydFJlcG9ydFRvWE1MUmVwb3J0KHdzZGxyZXBvcnQpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcG9ydCBkb2VzIG5vdCBoYXZlIDEgbWVzc2FnZS4iLCAxLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHN0cmluZyBpcyBpbmNvcnJlY3QuIiwgIm1lc3NhZ2UiLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TWVzc2FnZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TGluZU51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGNvbHVtbiBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIDIsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBzZXZlcml0eSBpcyBpbmNvcnJlY3QuIiwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX05PUk1BTCwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFNldmVyaXR5KCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaSIsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRVcmkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBoYXMgYW4gaW5jb3JyZWN0bHkgcmVnaXN0cmVkIG5lc3RlZCBtZXNzYWdlLiIsIDAsIHJlcG9ydC5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGEgbmVzdGVkIG1lc3NhZ2UgaXMgYWRkZWQgYXMgYSBuZXN0ZWQgbWVzc2FnZS4KLQlWYWxpZGF0aW9uSW5mb0ltcGwgd3NkbHJlcG9ydDIgPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKCJmaWxlOi9zb21ldXJpIiwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IoUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UudmFsaWRhdGV3c2RsIikpKTsKLQl3c2RscmVwb3J0Mi5hZGRFcnJvcigibWVzc2FnZSIsIDEsIDIsICJmaWxlOi9zb21ldXJpMiIpOwotCVZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MiA9IHZhbGlkYXRvci5jb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQod3NkbHJlcG9ydDIpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcG9ydCBkb2VzIG5vdCBoYXZlIDEgbWVzc2FnZS4iLCAxLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpMiIsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSAxIG5lc3RlZCBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHN0cmluZyBpcyBpbmNvcnJlY3QuIiwgIm1lc3NhZ2UiLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldE1lc3NhZ2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBsaW5lIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMSwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRMaW5lTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBzZXZlcml0eSBpcyBpbmNvcnJlY3QuIiwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX05PUk1BTCwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRTZXZlcml0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGRvZXMgbm90IGhhdmUgYSBuZXN0ZWQgbWVzc2FnZS4iLCAxLCByZXBvcnQyLmdldE5lc3RlZE1lc3NhZ2VzKCkuc2l6ZSgpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNhZDM4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgZXh0ZW5kcyB2YWxpZGF0b3IgdG8gZXhwb3NlIHRoZSBwcm90ZWN0ZWQgbWV0aG9kcwotICogZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgVmFsaWRhdG9yIAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IjYWRkSW5mb1RvTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0gIHsKLQlzdXBlci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI3NldHVwVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXR1cFZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCXN1cGVyLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdG9yI3RlYXJkb3duVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZWFyZG93blZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCXN1cGVyLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdG9yI2NvbnZlcnRNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgY29udmVydE1lc3NhZ2UoSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UsIFZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCkgCi0gIHsKLQlzdXBlci5jb252ZXJ0TWVzc2FnZShtZXNzYWdlLCBjb252ZXJ0ZWRSZXBvcnQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjY29udmVydFJlcG9ydFRvWE1MUmVwb3J0KG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQpCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvblJlcG9ydCBjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQoSVZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSAKLSAgewotCXJldHVybiBzdXBlci5jb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQocmVwb3J0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgWE1MIGdyYW1tYXIgcG9vbCBkZWZpbmVkIGZvciB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqIAkJVGhlIGNvbnRleHQgdG8gdXNlIHRvIHJldHJpZXZlIHRoZSBYTUwgZ3JhbW1hciBwb29sLgotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhNTCBncmFtbWFyIHBvb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG9yIG51bGwgaWYgbm9uZSBpcyBhc3NvY2lhdGVkLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhNTEdyYW1tYXJQb29sRm9yQ29udGV4dChOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpCi0gIHsKLQlyZXR1cm4gKFhNTEdyYW1tYXJQb29sKXhtbEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFhTRCBncmFtbWFyIHBvb2wgZGVmaW5lZCBmb3IgdGhlIGdpdmVuIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dAotICAgKiAJCVRoZSBjb250ZXh0IHRvIHVzZSB0byByZXRyaWV2ZSB0aGUgWFNEIGdyYW1tYXIgcG9vbC4KLSAgICogQHJldHVybgotICAgKiAJCVRoZSBYU0QgZ3JhbW1hciBwb29sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCBvciBudWxsIGlmIG5vbmUgaXMgYXNzb2NpYXRlZC4KLSAgICovCi0gIHB1YmxpYyBYTUxHcmFtbWFyUG9vbCBnZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KQotICB7Ci0JcmV0dXJuIChYTUxHcmFtbWFyUG9vbCl4c2RHcmFtbWFyUG9vbHMuZ2V0KGNvbnRleHQpOwotICB9Ci0gIAotICAvKioKLSAgICogRXhwb3NlIHRoZSBYTUwgZ3JhbW1hciBwb29scyBIYXNoTWFwIGZvciB0ZXN0aW5nLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBYTUwgZ3JhbW1hciBwb29scyBIYXNoTWFwLgotICAgKi8KLSAgcHVibGljIEhhc2hNYXAgZ2V0WE1MR3JhbW1hclBvb2xzTWFwKCkKLSAgewotCXJldHVybiB4bWxHcmFtbWFyUG9vbHM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFeHBvc2UgdGhlIFhTRCBncmFtbWFyIHBvb2xzIEhhc2hNYXAgZm9yIHRlc3RpbmcuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhTRCBncmFtbWFyIHBvb2xzIEhhc2hNYXAuCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXRYU0RHcmFtbWFyUG9vbHNNYXAoKQotICB7Ci0JcmV0dXJuIHhzZEdyYW1tYXJQb29sczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q3YjgzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCB0aGUgRWNsaXBzZSBzcGVjaWZpYyBXU0RMIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFdTRExWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdG8gZW5zdXJlIHRoZSBVUkkgcmVzb2x2ZXIgaXMgbm90IG51bGwgaW4gdGhlIEVjbGlwc2UKLSAgICogc3BlY2lmaWMgWE1MIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVUklSZXNvbHZlcklzUmVnaXN0ZXJlZCgpCi0gIHsKLQlXU0RMVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgV1NETFZhbGlkYXRvcldyYXBwZXIoKTsKLQlhc3NlcnROb3ROdWxsKCJUaGUgVVJJIHJlc29sdmVyIGlzIG51bGwuIiwgdmFsaWRhdG9yLmdldFVSSVJlc29sdmVyKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDIzNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogV3JhcHBlciBmb3IgdGhlIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IgY2xhc3MgdG8gYWxsb3cgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFdTRExWYWxpZGF0b3IgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdG9yV3JhcHBlcigpCi0gIHsKLQlzdXBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgV1NETCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgV1NETCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JcmV0dXJuIHVyaVJlc29sdmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhN2ZjZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRHVwbGljYXRlIGVycm9yIG1lc3NhZ2UgZm9yIHRlc3RpbmcKLV9SRUZfRklMRV9FUlJPUl9NRVNTQUdFICAgICAgICAgID0gUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAoezB9KS4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x2ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YzYwNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBVUklSZXNvbHZlciB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIFVSSVJlc29sdmVyVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIgPSBudWxsOwotIC8qKgotICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAqIAotICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVVJJUmVzb2x2ZXJUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQl1cmlSZXNvbHZlciA9IG5ldyBVUklSZXNvbHZlcigpOwkKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUFic29sdXRlRmlsZSgpCi0gIHsKLSAgCS8vIFN5c3RlbSBpZCBpcyBhYnNvbHV0ZSBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gImZpbGU6L2M6L3NvbWVwYXRoL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyBhYnNvbHV0ZSBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4iLCBzeXN0ZW1JZCwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIAkKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZSgpCi0gIHsKLSAgCS8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSAKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyBzaW1wbGUgcmVsYXRpdmUgYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVN0YXJ0c1dpdGhEb3REb3QoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIHdpdGggLi4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICIuLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgcmVsYXRpdmUgd2l0aCAuLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVN0YXJ0c1dpdGhEb3REb3RUd2ljZSgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgd2l0aCAuLi8uLi8KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIi4uLy4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4uLy4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgd2l0aCAuLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgcmVsYXRpdmUgd2l0aCAuLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdFR3aWNlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4vLi8KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIi4vLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgcmVsYXRpdmUgd2l0aCAuLy4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoU2xhc2goKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIGJlZ2lubmluZyB3aXRoIC8KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgcmVsYXRpdmUgYmVnaW5uaW5nIHdpdGggLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlRG90RG90SW5NaWRkbGUoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lcGF0aC8uLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgcmVsYXRpdmUgYW5kIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVGb3RJbk1pZGRsZSgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgLi8gaW4gdGhlIG1pZGRsZQotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAic29tZXBhdGgvLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgcmVsYXRpdmUgYW5kIGNvbnRhaW5zIC4vIGluIHRoZSBtaWRkbGUgYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1saXplUmVsYXRpdmVGaWxlRG90RG90SW5NaWRkbGVPZkJhc2UoKQotICB7Ci0gICAgLy8gQmFzZSBsb2NhdGlvbiBjb250YWlucyAuLi8gaW4gdGhlIG1pZGRsZQotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC8uLi9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoImJhc2VMb2NhdGlvbiBjb250YWlucyAuLi8gaW4gdGhlIG1pZGRsZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlRG90SW5NaWRkbGVPZkJhc2UoKQotICB7Ci0gICAgLy8gQmFzZSBsb2NhdGlvbiBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoLy4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gY29udGFpbnMgLi8gaW4gdGhlIG1pZGRsZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlQmFzZVN0YXJ0c1dpdGhTbGFzaERvdERvdCgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIC8uLi8gCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6Ly4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovLi4vc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlQmFzZVN0YXJ0c1dpdGhTbGFzaERvdCgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIC8uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi8uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aERvdERvdCgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4uLyAKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTouLi9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoImJhc2VMb2NhdGlvbiBzdGFydHMgd2l0aCAuLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6Li4vc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlQmFzZVN0YXJ0c1dpdGhEb3QoKQotICB7Ci0gICAgLy8gQmFzZSBsb2NhdGlvbiBzdGFydHMgd2l0aCAuLyAKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTouL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOnNvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVNvbWVkaXJEb3REb3QoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGNvbnRhaW5zIHNvbWVkaXIuLi8gaW4gdGhlIG1pZGRsZQotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAic29tZWRpci4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBoYXMgc29tZWRpci4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovc29tZXBhdGgvc29tZWRpci4uL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVNvbWVkaXJEb3QoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGNvbnRhaW5zIHNvbWVkaXIuLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaGFzIHNvbWVkaXIuLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovc29tZXBhdGgvc29tZWRpci4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplTnVsbFN5c3RlbUlkKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyBudWxsCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9IG51bGw7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIG51bGwuIiwgbnVsbCwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVOdWxsQmFzZUxvY2F0aW9uKCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gaXMgbnVsbAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9IG51bGw7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAic29tZWRpci4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIG51bGwuIiwgbnVsbCwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVTeXN0ZW1JZEFic29sdXRlTnVsbEJhc2VMb2NhdGlvbigpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGlzIG51bGwKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAibnVsbCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiZmlsZTovc29tZWRpci4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIG51bGwuIiwgImZpbGU6L3NvbWVkaXIuL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotCi0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYmM3NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLQotLyoqCi0gKiBUZXN0cyBmb3IgdGhlIEFudExvZ2dlci4KLSAqLwotcHVibGljIGNsYXNzIEFudExvZ2dlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgQW50TG9nZ2VyVGVzdFRhc2sgdGFzayA9IG51bGw7Ci0JCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0JdGFzayA9IG5ldyBBbnRMb2dnZXJUZXN0VGFzaygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQl0YXNrID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgZXJyb3JzIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nRXJyb3JXaXRoVGhyb3dhYmxlKCkKLSAgewotCUFudExvZ2dlciBsb2dnZXIgPSBuZXcgQW50TG9nZ2VyKHRhc2spOwotCWxvZ2dlci5sb2coIk1FU1NBR0UiLCBJTG9nZ2VyLlNFVl9FUlJPUiwgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0SW5mb3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiBlcnJvcnMgd2VyZSBub3QgcmVwb3J0ZWQuIiwgMiwgdGFzay5nZXRFcnJvcnMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRFcnJvcnMoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRFcnJvcnMoKS5nZXQoMSkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBsb2cgbWV0aG9kOgotICAgKiAxLiBsb2dzIHdhcm5pbmdzIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nV2FybmluZ1dpdGhUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX1dBUk5JTkcsIG5ldyBUaHJvd2FibGUoIlRIUk9XQUJMRSIpKTsKLQkKLQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgd2FybmluZ3Mgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEVycm9ycygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgd2FybmluZ3Mgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIgd2FybmluZ3Mgd2VyZSBub3QgcmVwb3J0ZWQuIiwgMiwgdGFzay5nZXRXYXJuaW5ncygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldFdhcm5pbmdzKCkuZ2V0KDApKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSB0aHJvd2FibGUgd2FzIG5vdCBUSFJPV0FCTEUuIiwgImphdmEubGFuZy5UaHJvd2FibGU6IFRIUk9XQUJMRSIsIHRhc2suZ2V0V2FybmluZ3MoKS5nZXQoMSkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBsb2cgbWV0aG9kOgotICAgKiAxLiBsb2dzIGluZm9zIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nSW5mb1dpdGhUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0lORk8sIG5ldyBUaHJvd2FibGUoIlRIUk9XQUJMRSIpKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIgaW5mb3Mgd2VyZSBub3QgcmVwb3J0ZWQuIiwgMiwgdGFzay5nZXRJbmZvcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEluZm9zKCkuZ2V0KDApKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSB0aHJvd2FibGUgd2FzIG5vdCBUSFJPV0FCTEUuIiwgImphdmEubGFuZy5UaHJvd2FibGU6IFRIUk9XQUJMRSIsIHRhc2suZ2V0SW5mb3MoKS5nZXQoMSkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBsb2cgbWV0aG9kOgotICAgKiAxLiBsb2dzIHZlcmJvc2VzIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nVmVyYm9zZVdpdGhUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX1ZFUkJPU0UsIG5ldyBUaHJvd2FibGUoIlRIUk9XQUJMRSIpKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB2ZXJib3NlcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB2ZXJib3NlcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB2ZXJib3NlcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0SW5mb3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiB2ZXJib3NlcyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldFZlcmJvc2VzKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0VmVyYm9zZXMoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgZXJyb3JzIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nRXJyb3JXaXRob3V0VGhyb3dhYmxlKCkKLSAgewotCUFudExvZ2dlciBsb2dnZXIgPSBuZXcgQW50TG9nZ2VyKHRhc2spOwotCWxvZ2dlci5sb2coIk1FU1NBR0UiLCBJTG9nZ2VyLlNFVl9FUlJPUik7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxIGVycm9yIHdhcyBub3QgcmVwb3J0ZWQuIiwgMSwgdGFzay5nZXRFcnJvcnMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRFcnJvcnMoKS5nZXQoMCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBsb2cgbWV0aG9kOgotICAgKiAxLiBsb2dzIHdhcm5pbmdzIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nV2FybmluZ1dpdGhvdXRUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX1dBUk5JTkcpOwotCQotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0SW5mb3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMSBlcnJvciB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0V2FybmluZ3MoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRXYXJuaW5ncygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgaW5mb3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dJbmZvV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfSU5GTyk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgaW5mb3Mgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgaW5mb3Mgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEVycm9ycygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxIGluZm8gd2FzIG5vdCByZXBvcnRlZC4iLCAxLCB0YXNrLmdldEluZm9zKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0SW5mb3MoKS5nZXQoMCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBsb2cgbWV0aG9kOgotICAgKiAxLiBsb2dzIHZlcmJvc2VzIGNvcnJlY3RseS4KLSAgICogMi4gcmVjb3JkcyB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCi0gICAqIDMuIHJlY29yZHMgdGhlIHRocm93YWJsZSBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9nVmVyYm9zZVdpdGhvdXRUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX1ZFUkJPU0UpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxIHZlcmJvc2Ugd2FzIG5vdCByZXBvcnRlZC4iLCAxLCB0YXNrLmdldFZlcmJvc2VzKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0VmVyYm9zZXMoKS5nZXQoMCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0VGFzay5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyVGVzdFRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyMjQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0VGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotCi0vKioKLSAqIEEgZHVtbXkgdGFzayB0aGF0IHdpbGwgYWxsb3cgdGVzdGluZyBvZiB0aGUgYW5kIGxvZ2dlci4KLSAqLwotcHVibGljIGNsYXNzIEFudExvZ2dlclRlc3RUYXNrIGV4dGVuZHMgVGFzayAKLXsKLSAgcHJvdGVjdGVkIExpc3QgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCB3YXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgaW5mb3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IHZlcmJvc2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2sjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbXNnLCBpbnQgbXNnTGV2ZWwpIAotICB7Ci0JaWYobXNnTGV2ZWwgPT0gUHJvamVjdC5NU0dfRVJSKQotCXsKLQkgIGVycm9ycy5hZGQobXNnKTsKLQl9Ci0JZWxzZSBpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19XQVJOKQotCXsKLQkgIHdhcm5pbmdzLmFkZChtc2cpOwotCX0KLQllbHNlIGlmKG1zZ0xldmVsID09IFByb2plY3QuTVNHX0lORk8pCi0JewotCSAgaW5mb3MuYWRkKG1zZyk7Ci0JfQotCWVsc2UgaWYobXNnTGV2ZWwgPT0gUHJvamVjdC5NU0dfVkVSQk9TRSkKLQl7Ci0JICB2ZXJib3Nlcy5hZGQobXNnKTsKLQl9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNsb2coamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbXNnKSAKLSAgewotCWxvZyhtc2csIFByb2plY3QuTVNHX0lORk8pOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBlcnJvcnMgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgZXJyb3JzIHRoYXQgd2VyZSBsb2dnZWQuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0JcmV0dXJuIGVycm9yczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgd2FybmluZ3MgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgd2FybmluZ3MgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFdhcm5pbmdzKCkKLSAgewotCXJldHVybiB3YXJuaW5nczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW5mb3MgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgaW5mb3MgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEluZm9zKCkKLSAgewotCXJldHVybiBpbmZvczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgdmVyYm9zZXMgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgdmVyYm9zZXMgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFZlcmJvc2VzKCkKLSAgewotCXJldHVybiB2ZXJib3NlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlVGFzay5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWUxMzFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZXhwb3NlIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgV1NETFZhbGlkYXRlIGNsYXNzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlVGFzayBleHRlbmRzIFdTRExWYWxpZGF0ZQotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50LldTRExWYWxpZGF0ZSNnZXRGaWxlTGlzdCgpCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRGaWxlTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIuZ2V0RmlsZUxpc3QoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OTc3NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5GaWxlU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLnNlbGVjdG9ycy5GaWxlbmFtZVNlbGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQmFzZVRlc3RDYXNlOwotCi0vKioKLSAqIFdTRExWYWxpZGF0ZSBhbnQgdGFzayB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgQkFTRV9ESVI7OwotICBwcml2YXRlIFByb2plY3QgcHJvamVjdDsKLQotIC8qKgotICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAqIAotICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFZhbGlkYXRlVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEJBU0VfRElSID0gUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gICAgICBCQVNFX0RJUiA9IEJBU0VfRElSLnJlcGxhY2UoJy8nLCBGaWxlLnNlcGFyYXRvckNoYXIpOwotICAgICAgaWYoQkFTRV9ESVIuc3RhcnRzV2l0aCgiXFwiKSkKLSAgICAgIHsKLSAgICAgICAgQkFTRV9ESVIgPSBCQVNFX0RJUi5zdWJzdHJpbmcoMSk7ICAKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgCi0gICAgfQotICAgIHByb2plY3QgPSBuZXcgUHJvamVjdCgpOwotICAgIHByb2plY3Quc2V0QmFzZURpcihuZXcgRmlsZShCQVNFX0RJUikpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IGEgc2luZ2xlIGZpbGUgd2l0aCBhIHJlbGF0aXZlIGxvY2F0aW9uIGlzIHJlc29sdmVkIHByb3Blcmx5LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlbGF0aXZlU2luZ2xlRmlsZUxvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyBmaWxlTG9jID0gImZpbGUud3NkbCI7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAoImZpbGU6Ly8vIiArIEJBU0VfRElSICsgZmlsZUxvYykucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgV1NETFZhbGlkYXRlVGFzayB3c2RsVmFsaWRhdGVUYXNrID0gbmV3IFdTRExWYWxpZGF0ZVRhc2soKTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgd3NkbFZhbGlkYXRlVGFzay5zZXRGaWxlKGZpbGVMb2MpOwotICAgIExpc3QgZmlsZUxpc3QgPSB3c2RsVmFsaWRhdGVUYXNrLmdldEZpbGVMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gb25seSBvbmUgZmlsZS4iLCAxLCBmaWxlTGlzdC5zaXplKCkpOwotICAgIC8vIFRoZSBmaWxlIGxvY2F0aW9ucyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UgdG8gYXZvaWQgZHJpdmUgbGV0dGVyIGNhc2UgZGlmZmVyZW5jZXMgb24gd2luZG93cy4gaWUuIEMgdnMgYy4KLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxpc3QuZ2V0KDApICsgIicgaXMgbm90IGNvcnJlY3RseSByZXNvbHZlZCB0byB0aGUgYmFzZSBsb2NhdGlvbi4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGFuIGFic29sdXRlIGxvY2F0aW9uIGlzIHJlc29sdmVkIHByb3Blcmx5LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFic29sdXRlU2luZ2xlRmlsZUxvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyBmaWxlTG9jID0gQkFTRV9ESVIgKyAiZmlsZS53c2RsIjsKLSAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9IChGSUxFX1BST1RPQ09MICsgZmlsZUxvYykucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgV1NETFZhbGlkYXRlVGFzayB3c2RsVmFsaWRhdGVUYXNrID0gbmV3IFdTRExWYWxpZGF0ZVRhc2soKTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgd3NkbFZhbGlkYXRlVGFzay5zZXRGaWxlKGZpbGVMb2MpOwotICAgIExpc3QgZmlsZUxpc3QgPSB3c2RsVmFsaWRhdGVUYXNrLmdldEZpbGVMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gb25seSBvbmUgZmlsZS4iLCAxLCBmaWxlTGlzdC5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbG9jYXRpb24gJyIgKyBmaWxlTG9jICsgIicgaXMgbW9kaWZpZWQuIiwgcmVzb2x2ZWRMb2NhdGlvbi50b0xvd2VyQ2FzZSgpLCAoKFN0cmluZylmaWxlTGlzdC5nZXQoMCkpLnRvTG93ZXJDYXNlKCkpOwotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IGEgc2luZ2xlIGZpbGUgd2l0aCBhbiBhYnNvbHV0ZSwgcmVtb3RlIGxvY2F0aW9uIGlzIHJlc29sdmVkIHByb3Blcmx5LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFic29sdXRlU2luZ2xlRmlsZVJlbW90ZUxvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gImh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAzLTA3L0NhdGFsb2cud3NkbCI7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSAiaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIjsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsb2NhdGlvbiAnIiArIGZpbGVMb2MgKyAiJyBpcyBtb2RpZmllZC4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLSAgCi0vKioKLSAgICogVGVzdCB0aGF0IGEgc2luZ2xlIGZpbGUgaW4gYSBmaWxlc2V0IHdpdGggYSByZWxhdGl2ZSBsb2NhdGlvbiBpcyByZXNvbHZlZCBwcm9wZXJseQotICAgKiB3aGVuIG5vIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVsYXRpdmVTaW5nbGVGaWxlSW5GaWxlc2V0Tm9EaXJTcGVjaWZpZWQoKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSAiRW1wdHkud3NkbCI7Ci0gICAgU3RyaW5nIGJhc2VfZGlyID0gQkFTRV9ESVIgKyBTQU1QTEVTX0RJUiArICJXU0RMIiArIEZpbGUuc2VwYXJhdG9yICsgIlNlbGZDb250YWluZWQiOwotICAgIFN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gKCJmaWxlOi8vLyIgKyBiYXNlX2RpciArICIvIiArIGZpbGVMb2MpLnJlcGxhY2UoJ1xcJywnLycpOwotICAgIGJhc2VfZGlyID0gYmFzZV9kaXIucmVwbGFjZSgnLycsIEZpbGUuc2VwYXJhdG9yQ2hhcik7Ci0gICAgCi0gICAgV1NETFZhbGlkYXRlVGFzayB3c2RsVmFsaWRhdGVUYXNrID0gbmV3IFdTRExWYWxpZGF0ZVRhc2soKTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgCi0gICAgRmlsZVNldCBmaWxlc2V0ID0gd3NkbFZhbGlkYXRlVGFzay5jcmVhdGVGaWxlc2V0KCk7Ci0gICAgZmlsZXNldC5zZXRQcm9qZWN0KHByb2plY3QpOwotICAgIGZpbGVzZXQuc2V0RGlyKG5ldyBGaWxlKGJhc2VfZGlyKSk7Ci0gICAKLSAgICBGaWxlbmFtZVNlbGVjdG9yIGZpbGVuYW1lU2VsZWN0b3IgPSBuZXcgRmlsZW5hbWVTZWxlY3RvcigpOwotICAgIGZpbGVuYW1lU2VsZWN0b3Iuc2V0TmFtZShmaWxlTG9jKTsKLSAgICBmaWxlc2V0LmFkZEZpbGVuYW1lKGZpbGVuYW1lU2VsZWN0b3IpOwotICAgIC8vZmlsZXNldC5zZXRGaWxlKG5ldyBGaWxlKGZpbGVMb2MpKTsKLSAgICAKLSAgICBMaXN0IGZpbGVMaXN0ID0gd3NkbFZhbGlkYXRlVGFzay5nZXRGaWxlTGlzdCgpOwotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbGlzdCBkb2VzIG5vdCBjb250YWluIG9ubHkgb25lIGZpbGUuIiwgMSwgZmlsZUxpc3Quc2l6ZSgpKTsKLSAgICAvLyBUaGUgZmlsZSBsb2NhdGlvbnMgYXJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIHRvIGF2b2lkIGRyaXZlIGxldHRlciBjYXNlIGRpZmZlcmVuY2VzIG9uIHdpbmRvd3MuIGllLiBDIHZzIGMuCi0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsb2NhdGlvbiAnIiArIGZpbGVMaXN0LmdldCgwKSArICInIGlzIG5vdCBjb3JyZWN0bHkgcmVzb2x2ZWQgdG8gdGhlIGJhc2UgbG9jYXRpb24uIiwgcmVzb2x2ZWRMb2NhdGlvbi50b0xvd2VyQ2FzZSgpLCAoKFN0cmluZylmaWxlTGlzdC5nZXQoMCkpLnRvTG93ZXJDYXNlKCkpOwotICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5N2U1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0OwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbk1lc3NhZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdG9yUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5VUklSZXNvbHZlcldyYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLlN0YW5kYXJkTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQmFzZVRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewkKLQlXU0RMVmFsaWRhdGVXcmFwcGVyIHZhbGlkYXRlID0gbnVsbDsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLQl7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXZhbGlkYXRlID0gbmV3IFdTRExWYWxpZGF0ZVdyYXBwZXIoKTsKLQkJV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gdmFsaWRhdGUuZ2V0V1NETFZhbGlkYXRvcigpOwotCQlVUklSZXNvbHZlcldyYXBwZXIgcmVzb2x2ZXIgPSBuZXcgVVJJUmVzb2x2ZXJXcmFwcGVyKCk7Ci0JCXdzZGxWYWxpZGF0b3IuYWRkVVJJUmVzb2x2ZXIocmVzb2x2ZXIpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJdmFsaWRhdGUgPSBudWxsOwotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IHRoZSB2YWxpZGF0ZUZpbGUgbWV0aG9kLgotCSAqIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCSAqIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JICogMy4gQSBmaWxlIHRoYXQgY2FuJ3QgYmUgZm91bmQgc2hvdWxkIHN1Y2NlZWQgYW5kIHJlcG9ydCB0aGF0IGl0J3MgaW52YWxpZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVGaWxlKCkKLQl7Ci0JCVN0cmluZyB2YWxpZEZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJaWYoUExVR0lOX0FCU09MVVRFX1BBVEguc3RhcnRzV2l0aCgiLyIpKQotCQl7Ci0JCQl2YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwiOwotCQl9Ci0JCVN0cmluZyBpbnZhbGlkRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJaW52YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCX0KLQkJU3RyaW5nIG5vbmV4aXN0YW50RmlsZSA9ICJub25leGlzdGFudGZpbGUud3NkbCI7Ci0JCS8vIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCQlJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUodmFsaWRGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIGZvciBhIHZhbGlkIGZpbGUuIiwgcmVwb3J0Lmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUoaW52YWxpZEZpbGUpOwotCQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSBub3QgcmVwb3J0ZWQgZm9yIGFuIGludmFsaWQgZmlsZS4iLCByZXBvcnQyLmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDMuIEEgZmlsZSB0aGF0IGNhbid0IGJlIGZvdW5kIHNob3VsZCBzdWNjZWVkIGFuZCByZXBvcnQgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDMgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUobm9uZXhpc3RhbnRGaWxlKTsKLQkJYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgbm90IHJlcG9ydGVkIGZvciBhIG5vbmV4aXN0YW50IGZpbGUuIiwgcmVwb3J0My5oYXNFcnJvcnMoKSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4KLQkgKiAxLiBUaGUgbWV0aG9kIHNob3VsZCBzdWNjZWVkIHdpdGggb25lIGZpbGUgc3BlY2lmaWVkLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgYW5kIHZhbGlkYXRlIDIgZmlsZXMgd2hlbiAyIGFyZSBzcGVjaWZpZWQuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0JewotCQlTdHJpbmcgdmFsaWRGaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlID0gImZpbGU6Ly8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJfQotCQlTdHJpbmcgdmFsaWRGaWxlMiA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlMiA9ICJmaWxlOi8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsIjsKLQkJfQotCQlJTG9nZ2VyIGN1cnJlbnRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCk7Ci0JCVdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgbG9nZ2VyID0gbmV3IFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIoKTsKLQkJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgCi0JCS8vIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCBvbmUgZmlsZSBzcGVjaWZpZWQuCi0JCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmFkZCh2YWxpZEZpbGUpOwotCQl2YWxpZGF0ZS52YWxpZGF0ZSgpOwotCQlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCQl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5jbGVhcigpOwotCQlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMi4gVGhlIG1ldGhvZCBzaG91bGQgc3VjY2VlZCBhbmQgdmFsaWRhdGUgMiBmaWxlcyB3aGVuIDIgYXJlIHNwZWNpZmllZC4KLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlKTsKLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlMik7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgdHdvIHZhbGlkIGZpbGVzIGZhaWxlZC4iLCBNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIoMiksIG5ldyBJbnRlZ2VyKDApfSksIGxvZ2dlci5nZXRJbmZvcygpLmdldCgwKSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAgCXZhbGlkYXRlLnNldFZlcmJvc2UodHJ1ZSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuYWRkKHZhbGlkRmlsZSk7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0ZJTEVfVkFMSUQsIG5ldyBPYmplY3RbXXt2YWxpZEZpbGV9KSwgbG9nZ2VyLmdldFZlcmJvc2VzKCkuZ2V0KDApKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCSAgCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmNsZWFyKCk7Ci0JICAJdmFsaWRhdGUuc2V0VmVyYm9zZShmYWxzZSk7Ci0JICAJbG9nZ2VyLmdldEluZm9zKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0VmVyYm9zZXMoKS5jbGVhcigpOwotCSAgCi0JICAJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihjdXJyZW50TG9nZ2VyKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgZ2V0TWVzc2FnZXMgbWV0aG9kLgotCSAqIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIGVycm9yLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9tYXR0ZWQgc3RyaW5nIGZvciAyIG1lc3NhZ2VzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRNZXNzYWdlcygpCi0JewkKLQkJSVZhbGlkYXRpb25NZXNzYWdlIGVycm9yTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SLCAiVVJJIik7Ci0JCUlWYWxpZGF0aW9uTWVzc2FnZSB3YXJuaW5nTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcsICJVUkkiKTsKLQkJLy8gMS4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZyBmb3IgYSBzaW5nbGUgZXJyb3IuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIGVycm9yTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlfTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0ZS5nZXRNZXNzYWdlcyhlcnJvck1lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgZXJyb3IgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0VSUk9SX01BUktFUiArICIgMToyIE1FU1NBR0UiLCBtZXNzYWdlKTsKLQkJCi0JCS8vIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIHdhcm5pbmdNZXNzYWdlcyA9IG5ldyBJVmFsaWRhdGlvbk1lc3NhZ2VbXXt3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMiA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHdhcm5pbmdNZXNzYWdlcyk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHdhcm5pbmcgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UyKTsKLQkJCi0JCS8vIDMuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvbWF0dGVkIHN0cmluZyBmb3IgMiBtZXNzYWdlcy4KLQkJSVZhbGlkYXRpb25NZXNzYWdlW10gdHdvTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlLCB3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMyA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHR3b01lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUd28gbWVzc2FnZXMgd2FzIG5vdCBjb3JyZWN0LiIsIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVIgKyAiIDE6MiBNRVNTQUdFXG4iICsgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UzKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgcGFyc2VBcmd1bWVudHMgbWV0aG9kLgotCSAqIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDIuIC1leHR2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JICogNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkgKiA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JICogNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JICogNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCSAqIAotCSAqIE5vdCBjdXJyZW50bHkgdGVzdGVkOgotCSAqIAkJLXNjaGVtYQotCSAqIAkJLXNjaGVtYURpcgotCSAqIAkJLXVyaXJlc29sdmVyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBhcnNlQXJndW1lbnRzKCkKLQl7Ci0JCS8vIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCQlTdHJpbmdbXSBhcmdzMSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1dTREwxMVZBTCwgImh0dHA6Ly93c2RsMTF2YWxpZGF0b3IiLCAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsaWRhdG9yIn07Ci0JCXZhbGlkYXRlLnBhcnNlQXJndW1lbnRzKGFyZ3MxKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgMS4xIHZhbGlkYXRvciB3YXMgbm90IHJlZ2lzdGVyZWQuIiwgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5oYXNSZWdpc3RlcmVkVmFsaWRhdG9yKCJodHRwOi8vd3NkbDExdmFsaWRhdG9yIikpOwotCQkKLQkJLy8gMi4gLWV4dHYgcGFyc2luZyBzdWNjZWVkcyBhbmQgcmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3Igd2l0aCB0aGUgV1NETCB2YWxpZGF0b3IuCi0JCVN0cmluZ1tdIGFyZ3MyID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvciIsICJ2YWxpZGF0b3JjbGFzcyJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzMik7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGV4dGVuc2lvbiB2YWxpZGF0b3Igd2FzIG5vdCByZWdpc3RlcmVkLiIsIFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcigiaHR0cDovL2V4dHZhbGlkYXRvciIsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpKTsKLQkJCi0JCS8vIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JCVN0cmluZ1tdIGFyZ3MzID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvcjIiLCAiLWR1bW15cGFyYW0ifTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczMpOwotCQlhc3NlcnRGYWxzZSgiVGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciB3YXMgcmVnaXN0ZXJlZCB3aXRob3V0IGVub3VnaCBpbmZvcm1hdGlvbi4iLCBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoImh0dHA6Ly9leHR2YWxpZGF0b3IyIiwgVmFsaWRhdG9yUmVnaXN0cnkuRVhUX1ZBTElEQVRPUikpOwotCQkKLQkJLy8gNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkJSUxvZ2dlciBjdXJyZW50TG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQlTdHJpbmdbXSBhcmdzNCA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX0xPR0dFUiwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5TdGFuZGFyZExvZ2dlciJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNCk7Ci0JCWFzc2VydFRydWUoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyBub3QgYSBTdGFuZGFyZExvZ2dlciIsIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKSBpbnN0YW5jZW9mIFN0YW5kYXJkTG9nZ2VyKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyB0aGUgc2FtZSBhcyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQuIiwgY3VycmVudExvZ2dlci5lcXVhbHMoTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpKSk7Ci0JCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5zZXRMb2dnZXIoY3VycmVudExvZ2dlcik7Ci0JCQotCQkvLyA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JCVN0cmluZ1tdIGFyZ3M1ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fUFJPUEVSVFkgKyAiU0FNUExFTkFNRT1TQU1QTEVWQUxVRSJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHBhcmFtZXRlciB3YXMgbm90IHNldCBjb3JyZWN0bHkuIiwgIlNBTVBMRVZBTFVFIiwgdmFsaWRhdGUuZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KCJTQU1QTEVOQU1FIikpOwotCQkKLQkJLy8gNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JCVN0cmluZ1tdIGFyZ3M2ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fVkVSQk9TRX07Ci0JCXZhbGlkYXRlLnNldFZlcmJvc2UoZmFsc2UpOwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNik7Ci0JCWFzc2VydFRydWUoIlZlcmJvc2UgaXMgbm90IHNldCB0byB0cnVlLiIsIHZhbGlkYXRlLmlzVmVyYm9zZSgpKTsKLQkJCi0JCVN0cmluZ1tdIGFyZ3M2YSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1ZFUkJPU0VfU0hPUlR9OwotCQl2YWxpZGF0ZS5zZXRWZXJib3NlKGZhbHNlKTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczZhKTsKLQkJYXNzZXJ0VHJ1ZSgiVmVyYm9zZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgdmFsaWRhdGUuaXNWZXJib3NlKCkpOwotCQkKLQkJLy8gNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCQlTdHJpbmdbXSBhcmdzNyA9IG5ldyBTdHJpbmdbXXsiZmlsZW5hbWUxLndzZGwiLCAiZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgImZvbGRlclxmaWxlbmFtZTMud3NkbCJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNyk7Ci0JCUxpc3Qgd3NkbEZpbGVzID0gdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCk7Ci0JCWFzc2VydEVxdWFscygiVGhlcmUgd2VyZSBub3QgMyBXU0RMIGZpbGVzIGxpc3RlZCB0byB2YWxpZGF0ZS4iLCAzLCB3c2RsRmlsZXMuc2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgZmlsZSBsaXN0IGRpZCBub3QgaW5jbHVkZSBmaWxlbmFtZTEud3NkbCIsIHdzZGxGaWxlcy5jb250YWlucygiZmlsZW5hbWUxLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXIvZmlsZW5hbWUyLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyXGZpbGVuYW1lMy53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXJcZmlsZW5hbWUzLndzZGwiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTJhNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLQotLyoqCi0gKiBBIGhlbHBlciBjbGFzcyBmb3IgdGVzdGluZyB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIG1lc3NhZ2VzIGxvZ2dlZC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHsKLQotCXByb3RlY3RlZCBMaXN0IGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB3YXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB2ZXJib3NlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLQl7Ci0JCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCQl7Ci0JCQllcnJvcnMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkJewotCQkJd2FybmluZ3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfSU5GTykKLQkJewotCQkJaW5mb3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQkJewotCQkJdmVyYm9zZXMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlRocm93YWJsZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0JewotCQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCQlsb2codGhyb3dhYmxlLnRvU3RyaW5nKCksIHNldmVyaXR5KTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBlcnJvciBsaXN0LgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBlcnJvciBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0JewotCQlyZXR1cm4gZXJyb3JzOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdhcm5pbmcgbGlzdC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogCQlUaGUgd2FybmluZyBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdhcm5pbmdzKCkKLQl7Ci0JCXJldHVybiB3YXJuaW5nczsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBpbmZvIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIGluZm8gbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRJbmZvcygpCi0JewotCQlyZXR1cm4gaW5mb3M7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2ZXJib3NlIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIHZlcmJvc2UgbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRWZXJib3NlcygpCi0JewotCQlyZXR1cm4gdmVyYm9zZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDA3YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIG9mIFdTRExWYWxpZGF0ZSB0aGF0IGV4cG9zZXMgaW50ZXJuYWxzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlV3JhcHBlciBleHRlbmRzIFdTRExWYWxpZGF0ZSAKLXsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGUjZ2V0TWVzc2FnZXMob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2VbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzKElWYWxpZGF0aW9uTWVzc2FnZVtdIG1lc3NhZ2VzKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRNZXNzYWdlcyhtZXNzYWdlcyk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0LldTRExWYWxpZGF0ZSNwYXJzZUFyZ3VtZW50cyhqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIHZvaWQgcGFyc2VBcmd1bWVudHMoU3RyaW5nW10gYXJncykgCi0JewotCQlzdXBlci5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIAotCXsKLQkJc3VwZXIudmFsaWRhdGUoKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlRmlsZShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBJVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZUZpbGUoU3RyaW5nIGZpbGVuYW1lKSAKLQl7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUZpbGUoZmlsZW5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGludGVybmFsIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBpbnRlcm5hbCBXU0RMIHZhbGlkYXRvci4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRvciBnZXRXU0RMVmFsaWRhdG9yKCkKLQl7Ci0JCXJldHVybiB3c2RsVmFsaWRhdG9yOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIFdTREwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBXU0RMIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKQotCXsKLQkJcmV0dXJuIGNvbmZpZ3VyYXRpb247Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBXU0RMIGZpbGVzIHRvIHZhbGlkYXRlLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBsaXN0IG9mIFdTREwgZmlsZXMgdG8gdmFsaWRhdGUuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V1NETEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RsRmlsZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWZXJib3NlKCkKLQl7Ci0JCXJldHVybiB2ZXJib3NlOwotCX0KLQkKLQkvKioKLQkgKiBTZXQgd2hldGhlciByZXBvcnRpbmcgc2hvdWxkIGJlIGRvbmUgaW4gYSB2ZXJib3NlIHdheS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVyYm9zZQotCSAqIAkJSWYgdHJ1ZSByZXBvcnRpbmcgd2lsbCBiZSBkb25lIGluIGEgdmVyYm9zZSB3YXksIG90aGVyd2lzZSBpdCB3aWxsIG5vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWZXJib3NlKGJvb2xlYW4gdmVyYm9zZSkKLQl7Ci0JCXRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3OTBhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNjaGVtYS5TY2hlbWFDb25zdGFudHM7Ci0KLS8qKgotICogVGVzdHMgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIgZ2VuZXJhdG9yOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0JcmV0dXJuIG5ldyBUZXN0U3VpdGUoSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBKVW5pdCBzZXR1cCBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVcCgpCi0gIHsKLQlnZW5lcmF0b3IgPSBuZXcgSW5saW5lU2NoZW1hR2VuZXJhdG9yV3JhcHBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IGNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoKQotICB7Ci0JLy8gVGVzdCBlbXB0eSBsaXN0LgotCWFzc2VydEZhbHNlKCJUaGUgbWV0aG9kIGRvZXMgbm90IHJldHVybiBmYWxzZSB3aGVuIGdpdmVuIGFuIGVtcHR5IGxpc3QuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobmV3IEFycmF5TGlzdCgpKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IGNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQgcmV0dXJucyBmYWxzZQotCS8vIHdoZW4gZ2l2ZW4gYSBsaXN0IHdpdGhvdXQgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLgotCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQlsaXN0LmFkZCgiaHR0cDovL25vdHNvYXBlbmNvZGluZ25hbWVzcGFjZSIpOwotCWFzc2VydEZhbHNlKCJUaGUgbWV0aG9kIGRvZXMgbm90IHJldHVybiBmYWxzZSB3aGVuIGdpdmVuIGEgbGlzdCB3aXRob3V0IHRoZSBTT0FQIGVudmVsb3BlIG5hbWVzcGFjZS4iLCBnZW5lcmF0b3IuY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChsaXN0KSk7Ci0JCi0JLy8gVGVzdCB0aGF0IGNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQgcmV0dXJucyB0cnVlCi0JLy8gd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aCB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuCi0JTGlzdCBsaXN0MiA9IG5ldyBBcnJheUxpc3QoKTsKLQlsaXN0Mi5hZGQoSW5saW5lU2NoZW1hR2VuZXJhdG9yV3JhcHBlci5TT0FQX0VOQ09ESU5HX1VSSSk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gdHJ1ZSB3aGVuIGdpdmVuIGEgbGlzdCB3aXRoIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4iLCBnZW5lcmF0b3IuY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChsaXN0MikpOwotICB9Ci0gIAotICAvKioKLSAgICogVE9ETzogSW1wbGVtZW50IHRlc3RzIGZvciB0aGUgQ3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgdG9kb0NyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBHZXRJbXBvcnROYW1lc3BhY2UgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgdG9kb0dldEltcG9ydE5hbWVzcGFjZXMoKSAKLSAgewotICB9Ci0KLSAgLyoqCi0gICAJKiBUZXN0IHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29ycmVjdCBuYW1lc3BhY2UKLSAgIAkqIHJlc29sdmVyLgotICAgCSovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXROU1Jlc29sdmVyKCkgCi0gIHsKLSAgICBEb2N1bWVudCBkb2MgPSBuZXcgRG9jdW1lbnRJbXBsKCk7Ci0JRWxlbWVudCByb290RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInNjaGVtYSIpOwotCi0JLy8gQ2hlY2sgdGhhdCB0aGUgcmVzb2x2ZXIgaXMgZW1wdHkuCi0JSGFzaHRhYmxlIHJlc29sdmVyID0gZ2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIocm9vdEVsZW0pOwotCWFzc2VydFRydWUoIlRoZSByZXNvbHZlciBpcyBub3QgZW1wdHkuIiwgcmVzb2x2ZXIuaXNFbXB0eSgpKTsKLQkKLQkvLyBDaGVjayB0aGUgcmVzb2x2ZXIgY29udGFpbnMgb25lIHZhbHVlLgotCXJvb3RFbGVtLnNldEF0dHJpYnV0ZSgieG1sbnMiLCBTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlyZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgZW1wdHkgbmFtZXNwYWNlLiIsIHJlc29sdmVyLmNvbnRhaW5zS2V5KCIiKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVzb2x2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhlIGVtcHR5IG5hbWVzcGFjZS4iLCBTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCByZXNvbHZlci5nZXQoIiIpKTsKLQkKLQkvLyBDaGVjayB0aGUgcmVzb2x2ZXIgY29udGFpbnMgdHdvIHZhbHVlcy4KLQlyb290RWxlbS5zZXRBdHRyaWJ1dGUoInhtbG5zOm90aGVyIiwgImh0dHA6Ly9vdGhlcm5hbWVzcGFjZSIpOwotCXJlc29sdmVyID0gZ2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIocm9vdEVsZW0pOwotCWFzc2VydFRydWUoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBvdGhlciBuYW1lc3BhY2UuIiwgcmVzb2x2ZXIuY29udGFpbnNLZXkoIm90aGVyIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBvdGhlciBuYW1lc3BhY2UuIiwgImh0dHA6Ly9vdGhlcm5hbWVzcGFjZSIsIHJlc29sdmVyLmdldCgib3RoZXIiKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIHN0aWxsIGNvbnRhaW5zIHRoZSBlbXB0eSBuYW1lc3BhY2UuCi0JYXNzZXJ0VHJ1ZSgiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGVtcHR5IG5hbWVzcGFjZSBhZnRlciBhZGRpbmcgYSBzZWNvbmQgbmFtZXNwYWNlLiIsIHJlc29sdmVyLmNvbnRhaW5zS2V5KCIiKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVzb2x2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhlIGVtcHR5IG5hbWVzcGFjZSBhZnRlciBhZGRpbmcgYSBzZWNvbmQgbmFtZXNwYWNlLiIsIFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsIHJlc29sdmVyLmdldCgiIikpOwotCQotCS8vIENoZWNrIHRoZSByZXNvbHZlciBkb2Vzbid0IGNvbnRhaW4gbm9uLXhtbG5zIGF0dHJpYnV0ZSB2YWx1ZS4KLQlyb290RWxlbS5zZXRBdHRyaWJ1dGUoInR5cGU6b3RoZXIyIiwgIm90aGVyMjp0eXBlIik7Ci0JcmVzb2x2ZXIgPSBnZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihyb290RWxlbSk7Ci0JYXNzZXJ0RmFsc2UoIlRoZSByZXNvbHZlciBjb250YWlucyB0aGUgb3RoZXIyIG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgib3RoZXIyIikpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXF1aXJlZCBwcmVmaXhlcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRQcmVmaXhlcygpIAotICB7Ci0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBubyByZXF1aXJlZCBuYW1lc3BhY2VzIGFuZCBubyBwcmVmaXguCi0JRG9jdW1lbnQgZG9jID0gbmV3IERvY3VtZW50SW1wbCgpOwotCUVsZW1lbnQgcm9vdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJzY2hlbWEiKTsKLQlyb290RWxlbS5zZXRBdHRyaWJ1dGUoInhtbG5zIixTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQkvL2RvYy5hcHBlbmRDaGlsZChyb290RWxlbSk7Ci0JCi0JTGlzdCByZXFOU3MgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW0pOwotCWFzc2VydEVxdWFscygiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gb25lIGVtcHR5IHN0cmluZy4iLCAxLCByZXFOU3Muc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIG9uZSBlbXB0eSBzdHJpbmcuIiwgIiIsIHJlcU5Tcy5nZXQoMCkpOwotCQotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbm8gcmVxdWlyZWQgbmFtZXNwYWNlcyBhbmQgdGhlIHhzZCBwcmVmaXguCi0JRWxlbWVudCByb290RWxlbTIgPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW0yLnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlMaXN0IHJlcU5TczIgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW0yKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnLiIsIDEsIHJlcU5TczIuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnLiIsICJ4c2QiLCByZXFOU3MyLmdldCgwKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhbiBlbGVtZW50IHdpdGggYSByZXF1aXJlZCBuYW1lc3BhY2UuCi0JRWxlbWVudCByb290RWxlbTQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW0yLnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGRpZmZOU0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vb3RoZXJuYW1lc3BhY2UiLCAib3RoZXI6ZWxlbWVudCIpOwotCXJvb3RFbGVtNC5hcHBlbmRDaGlsZChkaWZmTlNFbGVtKTsKLQlMaXN0IHJlcU5TczQgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW00KTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgcHJlZml4ICdvdGhlcicgd2hlbiB0aGUgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCBmb3IgYW4gZWxlbWVudC4iLCByZXFOU3M0LmNvbnRhaW5zKCJvdGhlciIpKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGEgdHlwZSB3aXRoIGEgcmVxdWlyZWQgbmFtZXNwYWNlLgotCUVsZW1lbnQgcm9vdEVsZW01ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtNS5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JRWxlbWVudCBvdGhlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6ZWxlbWVudCIpOwotCW90aGVyRWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNS5hcHBlbmRDaGlsZChvdGhlckVsZW0pOwotCUxpc3QgcmVxTlNzNSA9IGdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhyb290RWxlbTUpOwotCWFzc2VydFRydWUoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluICdvdGhlcicgd2hlbiB0aGUgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCBmb3IgYSB0eXBlLiIsIHJlcU5TczUuY29udGFpbnMoIm90aGVyIikpOwotCQotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYW4gaW1wb3J0LiBJbXBvcnQgZWxlbWVudHMgc2hvdWxkIGJlIGlnbm9yZWQuCi0JLy8gVGhpcyBpcyBhIGNvbnRyaXZlZCBleGFtcGxlIGFzIGl0IGNvbnRhaW5zIGEgdHlwZSBhdHRyaWJ1dGUgZm9yIHRoZSBpbXBvcnQgZWxlbWVudC4KLQlFbGVtZW50IHJvb3RFbGVtNiA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTYuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgaW1wb3J0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDppbXBvcnQiKTsKLQlpbXBvcnRFbGVtLnNldEF0dHJpYnV0ZSgidHlwZSIsICJvdGhlcjp0eXBlIik7Ci0Jcm9vdEVsZW02LmFwcGVuZENoaWxkKGltcG9ydEVsZW0pOwotCUxpc3QgcmVxTlNzNiA9IGdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhyb290RWxlbTYpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIG9uZSBzdHJpbmcgJ3hzZCcgd2hlbiBhbiBpbXBvcnQgZWxlbWVudCBpcyB1c2VkLiIsIDEsIHJlcU5TczYuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnIHdoZW4gYW4gaW1wb3J0IGVsZW1lbnQgaXMgdXNlZC4iLCAieHNkIiwgcmVxTlNzNi5nZXQoMCkpOwotCQotICAgIC8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYW4gaW5jbHVkZS4gSW5jbHVkZSBlbGVtZW50cyBzaG91bGQgYmUgaWdub3JlZC4KLSAgICAvLyBUaGlzIGlzIGEgY29udHJpdmVkIGV4YW1wbGUgYXMgaXQgY29udGFpbnMgYSB0eXBlIGF0dHJpYnV0ZSBmb3IgdGhlIGluY2x1ZGUgZWxlbWVudC4KLQlFbGVtZW50IHJvb3RFbGVtNyA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTcuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgaW5jbHVkZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNjaGVtYUNvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6aW5jbHVkZSIpOwotCWluY2x1ZGVFbGVtLnNldEF0dHJpYnV0ZSgidHlwZSIsICJvdGhlcjp0eXBlIik7Ci0Jcm9vdEVsZW03LmFwcGVuZENoaWxkKGluY2x1ZGVFbGVtKTsKLQlMaXN0IHJlcU5TczcgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW02KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnIHdoZW4gYW4gaW1wb3J0IGVsZW1lbnQgaXMgdXNlZC4iLCAxLCByZXFOU3M3LnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgInhzZCIsIHJlcU5TczcuZ2V0KDApKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGF0dHJpYnV0ZSB3aXRoIGEgcmVxdWlyZWQgbmFtZXNwYWNlLgotCUVsZW1lbnQgcm9vdEVsZW0zID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTY2hlbWFDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMy5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JRWxlbWVudCB3c2RsQXR0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU2NoZW1hQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDplbGVtZW50Iik7Ci0Jd3NkbEF0dEVsZW0uc2V0QXR0cmlidXRlTlMoQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAid3NkbDphcnJheVR5cGUiLCAic29tZXR5cGVbXSIpOwotCXJvb3RFbGVtMy5hcHBlbmRDaGlsZCh3c2RsQXR0RWxlbSk7Ci0JTGlzdCByZXFOU3MzID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtMyk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gJ3dzZGwnIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGFuIGF0dHJpYnV0ZS4iLCByZXFOU3MzLmNvbnRhaW5zKCJ3c2RsIikpOwotCQotICB9Ci0KLSAgLyoqCi0gICAqIFRPRE86IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIFJlbW92ZUltcG9ydHMgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgdG9kb1JlbW92ZUltcG9ydHMoKSAKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFRPRE86IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIFJlbW92ZUxvY2FsTmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZW1vdmVMb2NhbE5hbWVzcGFjZXMoKSAKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFRPRE86IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIFJlc29sdmVOYW1lc3BhY2UgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgdG9kb1Jlc29sdmVOYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXN0cmljdEltcG9ydHMoKSAKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzOWQyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFdyYXBwZXIgZm9yIElubGluZVNjaGVtYUdlbmVyYXRvciB0byBhbGxvdyB0ZXN0aW5nIHByb3RlY3RlZCBtZXRob2RzLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hR2VuZXJhdG9yV3JhcHBlciBleHRlbmRzIElubGluZVNjaGVtYUdlbmVyYXRvciAKLXsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChqYXZhLnV0aWwuTGlzdCkKLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKExpc3QgcmVxbnMpIAotCXsKLQkJcmV0dXJuIHN1cGVyLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQocmVxbnMpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS51dGlsLkxpc3QsIGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuSGFzaHRhYmxlLCBqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoRWxlbWVudCBlbGVtLCBMaXN0IGVsZW1lbnRzLCBMaXN0IHJlcXVpcmVkTmFtZXNwYWNlcywgSGFzaHRhYmxlIHJlcU5TRGVjbCwgU3RyaW5nIGZpbGVsb2NhdGlvbikgCi0JewotCQlyZXR1cm4gc3VwZXIuY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoZWxlbSwgZWxlbWVudHMsIHJlcXVpcmVkTmFtZXNwYWNlcywKLQkJCQlyZXFOU0RlY2wsIGZpbGVsb2NhdGlvbik7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNnZXRJbXBvcnROYW1lc3BhY2VzKG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHJvdGVjdGVkIExpc3QgZ2V0SW1wb3J0TmFtZXNwYWNlcyhFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmdldEltcG9ydE5hbWVzcGFjZXMoZWxlbSk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNnZXROU1Jlc29sdmVyKG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROU1Jlc29sdmVyKEVsZW1lbnQgZWxlbSkgCi0JewotCQlyZXR1cm4gc3VwZXIuZ2V0TlNSZXNvbHZlcihlbGVtKTsKLQl9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2dldE5hbWVzcGFjZVByZWZpeGVzKG9yZy53M2MuZG9tLkVsZW1lbnQpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIExpc3QgZ2V0TmFtZXNwYWNlUHJlZml4ZXMoRWxlbWVudCBlbGVtKSAKLSAgICB7Ci0JICAgIHJldHVybiBzdXBlci5nZXROYW1lc3BhY2VQcmVmaXhlcyhlbGVtKTsKLSAgICB9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3JlbW92ZUltcG9ydHMoamF2YS51dGlsLkxpc3QsIGphdmEudXRpbC5MaXN0KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IHJlbW92ZUltcG9ydHMoTGlzdCBuYW1lc3BhY2VzLCBMaXN0IGltcG9ydGVkTmFtZXNwYWNlcykgCi0JewotCQlyZXR1cm4gc3VwZXIucmVtb3ZlSW1wb3J0cyhuYW1lc3BhY2VzLCBpbXBvcnRlZE5hbWVzcGFjZXMpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjcmVtb3ZlTG9jYWxOYW1lc3BhY2VzKGphdmEudXRpbC5MaXN0LCBvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IHJlbW92ZUxvY2FsTmFtZXNwYWNlcyhMaXN0IG5hbWVzcGFjZXMsIEVsZW1lbnQgZWxlbSkgCi0JewotCQlyZXR1cm4gc3VwZXIucmVtb3ZlTG9jYWxOYW1lc3BhY2VzKG5hbWVzcGFjZXMsIGVsZW0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjcmVzb2x2ZU5hbWVzcGFjZXMoamF2YS51dGlsLkxpc3QsIGphdmEudXRpbC5IYXNodGFibGUsIGphdmEudXRpbC5IYXNodGFibGUpCi0JICovCi0JcHJvdGVjdGVkIEhhc2h0YWJsZSByZXNvbHZlTmFtZXNwYWNlcyhMaXN0IG5hbWVzcGFjZXMsIEhhc2h0YWJsZSBuc1Jlc29sdmVyLCBIYXNodGFibGUgcGFyZW50TlNSZXNvbHZlcikgCi0JewotCQlyZXR1cm4gc3VwZXIucmVzb2x2ZU5hbWVzcGFjZXMobmFtZXNwYWNlcywgbnNSZXNvbHZlciwgcGFyZW50TlNSZXNvbHZlcik7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNyZXN0cmljdEltcG9ydHMoamF2YS51dGlsLkxpc3QsIGphdmEudXRpbC5TZXQpCi0JICovCi0JcHJvdGVjdGVkIExpc3QgcmVzdHJpY3RJbXBvcnRzKExpc3QgbmFtZXNwYWNlcywgU2V0IHZhbGlkSW1wb3J0TlNzKSAKLQl7Ci0JCXJldHVybiBzdXBlci5yZXN0cmljdEltcG9ydHMobmFtZXNwYWNlcywgdmFsaWRJbXBvcnROU3MpOwotCX0KLSAgIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMWNkNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBXU0RMIHZhbGlkYXRvcidzIGludGVybmFsIFhNTCBjYXRhbG9nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgQ0FUQUxPR19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9DYXRhbG9nU2NoZW1hcy8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0JcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MQ2F0YWxvZ1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQlYTUxDYXRhbG9nLnJlc2V0KCk7Ci0gIH0KLQotCi0KLXB1YmxpYyB2b2lkIHRlc3RTY2hlbWFEaXIoKQotICB7Ci0JWE1MQ2F0YWxvZy5hZGRTY2hlbWFEaXIoUExVR0lOX0FCU09MVVRFX1BBVEggKyBDQVRBTE9HX0RJUik7Ci0JU3RyaW5nIGNhdGFsb2dMb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgQ0FUQUxPR19ESVI7Ci0JY2F0YWxvZ0xvY2F0aW9uID0gY2F0YWxvZ0xvY2F0aW9uLnJlcGxhY2UoJ1xcJywnLycpOwotICAgIHdoaWxlKGNhdGFsb2dMb2NhdGlvbi5zdGFydHNXaXRoKCIvIikpCi0gICAgewotICAgIAljYXRhbG9nTG9jYXRpb24gPSBjYXRhbG9nTG9jYXRpb24uc3Vic3RyaW5nKDEpOwotICAgIH0KLSAgICBjYXRhbG9nTG9jYXRpb24gPSBGSUxFX1BST1RPQ09MICsgY2F0YWxvZ0xvY2F0aW9uOwotCUlYTUxDYXRhbG9nIGNhdGFsb2cgPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCk7Ci0JU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSBjYXRhbG9nLnJlc29sdmVFbnRpdHlMb2NhdGlvbigiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWExIiwgIiIpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVkIGxvY2F0aW9uIGlzIG5vdCBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uIiwgY2F0YWxvZ0xvY2F0aW9uICsgInNjaGVtYTEueHNkIiwgcmVzb2x2ZWRMb2NhdGlvbik7Ci0JcmVzb2x2ZWRMb2NhdGlvbiA9IGNhdGFsb2cucmVzb2x2ZUVudGl0eUxvY2F0aW9uKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NjaGVtYTIiLCAiIik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2Vjb25kIHJlc29sdmVkIGxvY2F0aW9uIGlzIG5vdCBlcXVhbCB0byB0aGUgcmVzb2x2ZWQgbG9jYXRpb24uIiwgY2F0YWxvZ0xvY2F0aW9uICsgInNjaGVtYTIueHNkIiwgcmVzb2x2ZWRMb2NhdGlvbik7Ci0gIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFdTRExUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzNTBmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFdTRExUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuQW50TG9nZ2VyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudC5XU0RMVmFsaWRhdGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2dUZXN0OwotLyoqCi0gKiBUaGUgcm9vdCB0ZXN0IHN1aXRlIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIFdTREwgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsV1NETFRlc3RzIGV4dGVuZHMganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZQotewotICAvKioKLSAgICogQ3JlYXRlIHRoaXMgdGVzdCBzdWl0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhpcyB0ZXN0IHN1aXRlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQWxsV1NETFRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFdTRExUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsV1NETFRlc3RzIik7Ci0gICAgYWRkVGVzdChWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIC8vYWRkVGVzdChXU0RMVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhTRFRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChXU0RMVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFBhdGhzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFVSSVJlc29sdmVyVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFdTRExWYWxpZGF0ZVRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxDYXRhbG9nVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KElubGluZVNjaGVtYUdlbmVyYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdFN1aXRlKExpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShBbnRMb2dnZXJUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0LldTRExWYWxpZGF0ZVRlc3QuY2xhc3MpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMGE3ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLklubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi0vKioKLSAqIEJhc2UgdGVzdCBjYXNlIGNsYXNzIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gCi0gKiAtIGNyZWF0ZSBsb2dzCi0gKiAtIHJlYWQgZnJvbSBsb2dzCi0gKiAtIHJ1biBsb2cgY29tcGFyaXNvbiB0ZXN0cwotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgR0VORVJBVEVEX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvZ2VuZXJhdGVkUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIElERUFMX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgTE9HX0ZJTEVfTE9DQVRJT04gPSAicmVzdWx0cy5sb2ciOwotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyI7Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIAotICBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG51bGw7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQkKLSAgICBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ly9nZXRQbHVnaW5Mb2NhdGlvbigpOwotICAgIAotICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgotICAgIFdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgCi0gICAgY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLQlYTUxHcmFtbWFyUG9vbCB4c2RHcmFtbWFyUG9vbCA9IG5ldyBJbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbCgpOwotCVhNTEdyYW1tYXJQb29sIHhtbEdyYW1tYXJQb29sID0gbmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpOwotCWNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkoQ29uc3RhbnRzLlhNTFNDSEVNQV9DQUNIRV9BVFRSSUJVVEUsIHhzZEdyYW1tYXJQb29sKTsKLSAgICBjb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxfQ0FDSEVfQVRUUklCVVRFLCB4bWxHcmFtbWFyUG9vbCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0JY29uZmlndXJhdGlvbiA9IG51bGw7Ci0JCi0Jc3VwZXIudGVhckRvd24oKTsKLSAgfQotCi0vKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGxvZyB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cwotICAgKiB3aXRoIHRoZSBpZGVhbCByZXN1bHRzLiBUaGUgdGVzdCB3aWxsIG9ubHkgcGFzcyBpZiB0aGUgdHdvIGxvZyBmaWxlcyBhcmUgdGhlIHNhbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGxvZ2xvY2F0aW9uIFRoZSBsb2NhdGlvbiB0byBjcmVhdGUgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gaWRlYWxsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGlkZWFsIGxvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBsb2dsb2NhdGlvbiwgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24pCi0gIHsKLSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNyZWF0ZUxvZyhsb2dsb2NhdGlvbiwgdmFscmVwb3J0KTsKLSAgICAgIFN0cmluZyBnZW5lcmF0ZWRMb2cgPSBnZXRTdHJpbmdGcm9tRmlsZShsb2dsb2NhdGlvbik7Ci0gICAgICBTdHJpbmcgaWRlYWxMb2cgPSBnZXRTdHJpbmdGcm9tRmlsZShpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgICAgIGFzc2VydEVxdWFscyhpZGVhbExvZywgZ2VuZXJhdGVkTG9nKTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJDb3VsZCBub3QgY29tcGFyZSBsb2cgZmlsZXMiKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpZiBzdWNjZXNzZnVsLgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBUaHJvd24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhaW9uIG9mIHRoZSBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nRnJvbUZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBpZihmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOiIpKQotICAJewotICAJICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg2KTsKLSAgCSAgd2hpbGUoZmlsZW5hbWUuc3RhcnRzV2l0aCgiXFwiKSB8fCBmaWxlbmFtZS5zdGFydHNXaXRoKCIvIikpCi0gIAkgIHsKLSAgCSAgCWZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDEpOwotICAJICB9Ci0gIAl9Ci0gICAgU3RyaW5nQnVmZmVyIGZpbGVzdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgQnVmZmVyZWRSZWFkZXIgYnVmcmVhZGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlKTsKLSAgICAgIGJ1ZnJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOwotICAgICAgd2hpbGUgKGJ1ZnJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBmaWxlc3RyaW5nLmFwcGVuZChidWZyZWFkZXIucmVhZExpbmUoKSArICJcbiIpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICB9IGZpbmFsbHkKLSAgICB7Ci0gICAgICBidWZyZWFkZXIuY2xvc2UoKTsKLSAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZXN0cmluZy50b1N0cmluZygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgbG9nIGZpbGUgZm9yIGFuIFhTRCB0ZXN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSB0byBjcmVhdGUuCi0gICAqIEBwYXJhbSB2YWxyZXBvcnQgVGhlIHZhbGlkYXRpb24gcmVwb3J0IGZvciB0aGlzIGZpbGUuCi0gICAqIEByZXR1cm4gVGhlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgaWYgc3VjY2Vzc2Z1bCBvciBudWxsIGlmIG5vdCBzdWNjZXNzZnVsLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTG9nKFN0cmluZyBmaWxlbmFtZSwgSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0KQotICB7Ci0gICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgCXsKLSAgCSAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNik7Ci0gIAkgIHdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIlxcIikgfHwgZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKQotICAJICB7Ci0gIAkgIAlmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLSAgCSAgfQotICAJfQotICAgICBJVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxtZXNzYWdlcyA9IHZhbHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOy8vdmFsaWRhdG9yLmdldEVycm9ycygpLnNpemUoKSArIHZhbGlkYXRvci5nZXRXYXJuaW5ncygpLnNpemUoKTsKLSAgICAgU3RyaW5nQnVmZmVyIGVycm9yc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgU3RyaW5nQnVmZmVyIHdhcm5pbmdzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICBpbnQgbnVtZXJyb3JzID0gMDsKLSAgICAgaW50IG51bXdhcm5pbmdzID0gMDsKLSAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bW1lc3NhZ2VzOyBpKyspCi0gICAgIHsKLSAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0gICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgIG51bXdhcm5pbmdzKys7Ci0gICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChtZXNzYWdlICsgIiBbIiArIHZhbG1lcy5nZXRMaW5lKCkgKyIsICIgKyB2YWxtZXMuZ2V0Q29sdW1uKCkgKyJdXG4iKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgICBudW1lcnJvcnMrKzsKLSAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIGFueSBmaWxlIHJlZmVyZW5jZXMgbWFrZSB0aGVtIHJlbGF0aXZlLgotICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIigiKTsKLSAgICAgICAgIGVycm9yc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZSgpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbigpICsiXVxuIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcodmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCkpKTsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIGVycm9ycyAgICAgIDogIiArIG51bWVycm9ycyArICJcbiIpOwotICAgICBsb2cuYXBwZW5kKCJudW1iZXIgb2Ygd2FybmluZ3MgICAgOiAiICsgbnVtd2FybmluZ3MgKyAiXG5cbiIpOwotICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgIGlmKG51bWVycm9ycyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKGVycm9yc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgfQotICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgIGlmKG51bXdhcm5pbmdzID09IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCIobm9uZSlcbiIpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQod2FybmluZ3NTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgCi0gICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0U3RyZWFtID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGxvZ2ZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICBGaWxlIHBhcmVudCA9IGxvZ2ZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAJaWYgKCFwYXJlbnQuZXhpc3RzKCkpIAotICAJewotICAJICBwYXJlbnQubWtkaXJzKCk7Ci0gIAl9Ci0gICAgICBpZihsb2dmaWxlLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBsb2dmaWxlLmRlbGV0ZSgpOwotICAgICAgfQotICAgICAgbG9nZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0gICAgICAKLSAgICAgIG91dFN0cmVhbSA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lLCB0cnVlKSk7Ci0gICAgICBvdXRTdHJlYW0ud3JpdGVCeXRlcyhsb2cudG9TdHJpbmcoKSk7Ci0gICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKLQotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgd2UgY2FuJ3Qgd3JpdGUgdGhlIGxvZyB0aGVuIGNsZWFyIHRoZSBsb2cuCi0gICAgICBsb2cuZGVsZXRlKDAsIGxvZy5sZW5ndGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBsb2cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0UGx1Z2luTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gUExVR0lOX05BTUU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcykKLSAgewotICAgIHJldHVybiBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3RlZE1lc3NhZ2VzLCAwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhMaXN0IG5lc3RlZE1lc3NhZ2VzLCBpbnQgZGVwdGgpCi0gIHsKLSAgICBpZihuZXN0ZWRNZXNzYWdlcyAhPSBudWxsICYmIG5lc3RlZE1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSAiIjsKLSAgICAgIEl0ZXJhdG9yIG5lc3RlZE1lc0l0ZXIgPSBuZXN0ZWRNZXNzYWdlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUobmVzdGVkTWVzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElWYWxpZGF0aW9uTWVzc2FnZSBuZXN2YWxtZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlKW5lc3RlZE1lc0l0ZXIubmV4dCgpOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VTdHJpbmcgKz0gIiAiOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIGFueSBmaWxlIHJlZmVyZW5jZXMgbWFrZSB0aGVtIHJlbGF0aXZlLgotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG5lc3ZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIlsoXSIpOwotICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICgiLT4gIiArIG1lc3NhZ2UgKyAiIFsiICsgbmVzdmFsbWVzLmdldExpbmUoKSArIiwgIiArIG5lc3ZhbG1lcy5nZXRDb2x1bW4oKSArIl1cbiIpOwotICAgICAgICBtZXNzYWdlU3RyaW5nICs9IGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcobmVzdmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCksIGRlcHRoICsgMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVzc2FnZVN0cmluZzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQKLSAgICogYWRkIHRoZSBzcGVjaWZpZWQgZmlsZXMgdG8gdGhlIHByb2plY3QuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgVGhlIG5hbWUgZm9yIHRoZSBwcm9qZWN0LgotICAgKiBAcGFyYW0gZmlsZXMgQW4gYXJyYXkgb2YgZmlsZSBuYW1lcyBpbiB0aGUgZmlsZSBzeXN0ZW0gdGhhdAotICAgKiAgICAgICAgICAgICAgd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgcHJvamVjdC4KLSAgICogQHJldHVybiBUaGUgY3JlYXRlZCBwcm9qZWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmdbXSBmaWxlcykKLSAgewotICAgIGZpbmFsIElXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotICAgIGZpbmFsIElQcm9qZWN0IHByb2plY3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmKCFwcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLQkgIHsKLSAgICAgICAgZmFpbCgiQ291bGQgbm90IGNyZWF0ZSBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArIGUpOwotICAgICAgfSAKLSAgICB9Ci0gICAgaWYoIXByb2plY3QuaXNPcGVuKCkpCi0gICAgewotICAgICAgdHJ5Ci0JICB7Ci0gICAgICAgIHByb2plY3Qub3BlbihudWxsKTsKLQkgIH0KLSAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZmFpbCgiQ291bGQgbm90IG9wZW4gcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLQkgIH0KLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBwcm9qZWN0RGVzY3JpcHRpb24gPSBwcm9qZWN0LmdldERlc2NyaXB0aW9uKCk7IAotICAgICAgcHJvamVjdERlc2NyaXB0aW9uLnNldE5hbWUocHJvamVjdE5hbWUpOwotICAgICAgcHJvamVjdC5zZXREZXNjcmlwdGlvbihwcm9qZWN0RGVzY3JpcHRpb24sIG51bGwpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHByb2plY3QgcHJvcGVydGllcyBmb3IgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyAiLiAiICsgZSk7Ci0gICAgfQotCi0gICAgaWYoZmlsZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtZmlsZXMgPSBmaWxlcy5sZW5ndGg7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtZmlsZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0JCXsKLSAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlc1tpXTsKLSAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICAgIAotICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotICAgICAgICAgIElGaWxlIGlGaWxlID0gcHJvamVjdC5nZXRGaWxlKGZpbGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBpZighaUZpbGUuZXhpc3RzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaUZpbGUuY3JlYXRlKGluLCB0cnVlLCBudWxsKTsKLSAgICAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgICAgICAgfQotCQl9Ci0gICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlICIgKyBmaWxlc1tpXSk7Ci0JCX0gCi0gICAgICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIHByb2plY3QucmVmcmVzaExvY2FsKC0xLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAge30KLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0xpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMyOTUzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0xpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotLyoqCi0gKiBUZXN0cyBmb3IgbGluZSBudW1iZXIgYWRqdXN0bWVudHMgaW4gdGhlIFdTREwgdmFsaWRhdG9yJ3MKLSAqIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlIAotewotICBwcml2YXRlIFN0cmluZyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgPSAiTGluZU51bWJlckFkanVzdG1lbnRzLyI7Ci0KLSAgLyoqCi0gICAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Y3ZjY29tcGxleHR5cGUyMygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi4zLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi4zLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjRiKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJjdmMtY29tcGxleC10eXBlLjIuNC5iIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuNC5iLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWQxZTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0cyBmb3IgZmlsZSBwYXRocy4KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gRGVsZXRlIHRoZSBzaW1wbGUgcHJvamVjdCBmb3IgSW1wb3J0ZWRTY2hlbWFXaXRoU2NoZW1hSW1wb3J0IHRlc3QKLSAgICBzdXBlci50ZWFyRG93bigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGxhdGZvcm1VUkwvb25lLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQbGF0Zm9ybVVSTCgpCi0gIHsKLQlTdHJpbmcgdGVzdG5hbWUgPSAib25lIjsKLQlTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBsYXRmb3JtVVJMLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0JU3RyaW5nIHRlc3RmaWxlMiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGxhdGZvcm1VUkwvdHdvLndzZGwiOwotCVN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBsYXRmb3JtVVJMLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotCVN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLQkgCi0JY3JlYXRlU2ltcGxlUHJvamVjdCgidGVzdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZSx0ZXN0ZmlsZTJ9KTsKLQkKLQlydW5UZXN0KEZJTEVfUFJPVE9DT0wgKyB0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1NpbXBsZUV4dGVuc2lvbnNWYWxpZGF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvU2ltcGxlRXh0ZW5zaW9uc1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTQ5MWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvU2ltcGxlRXh0ZW5zaW9uc1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkVsZW1lbnRFeHRlbnNpYmxlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci0KLQotLyoqCi0gKiBBbiBleHRlbnNpb25zIHZhbGlkYXRvciB1c2VkIHRvIHRlc3QgdGhhdCBhIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucyAKLSAqIHZhbGlkYXRvciBpcyBjYWxsZWQgYnkgdGhlIG1haW4gV1NETCAxLjEgdmFsaWRhdG9yIHdoZW4gdmFsaWRhdGluZwotICogZGVmaW5pdGlvbnMgbGV2ZWwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAqLwotcHVibGljIGNsYXNzIFNpbXBsZUV4dGVuc2lvbnNWYWxpZGF0b3IgaW1wbGVtZW50cyBJV1NETDExVmFsaWRhdG9yCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSSA9ICJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9FeHRlbnNpb25zIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICBRTmFtZSBlbGVtZW50VHlwZSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgIAotICAgIGlmIChwYXJlbnRzLmlzRW1wdHkoKSB8fCAhKHBhcmVudHMuZ2V0KDApIGluc3RhbmNlb2YgRWxlbWVudEV4dGVuc2libGUpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkV2FybmluZygiVGhlIGN1cnJlbnQgcGFyZW50IGlzIGV4cGVjdGVkIHRvIGhhdmUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4iLCBlbGVtZW50KTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBpZiAoTlNfVVJJLmVxdWFscyhuYW1lc3BhY2VVUkkpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkV2FybmluZygiVGhlIHRlc3QgZXh0ZW5zaW9ucyB2YWxpZGF0b3IgZ290IGNhbGxlZC4iLCBlbGVtZW50KTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigiQmFkIGV4dGVuc2liaWxpdHkgZWxlbWVudCBuYW1lc3BhY2UuIiwgZWxlbWVudCk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1dTRExUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1dTRExUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzBiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogV1NETCB2YWxpZGF0aW9uIHRlc3RzIGZvciB0aGUgV1NETCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBXU0RMX0RJUiA9ICJXU0RMLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShXU0RMVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gRGVsZXRlIHRoZSBzaW1wbGUgcHJvamVjdCBmb3IgSW1wb3J0ZWRTY2hlbWFXaXRoU2NoZW1hSW1wb3J0IHRlc3QKLSAgICBzdXBlci50ZWFyRG93bigpOwotICB9Ci0gIAotICAvKioKLSAgICogSU1QT1JUIFRFU1RTCi0gICAqLwotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTREwiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFdTRExXaXRoV1NETEludmFsaWROUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW1wb3J0aW5nVHlwZXMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIldTRExJbXBvcnRpbmdUeXBlcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnROb25FeGlzdGFudEZpbGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE5vbkV4aXN0YW50RmlsZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V1NETE5hbWVzcGFjZUFBQSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiV1NETE5hbWVzcGFjZUFBQSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1NjaGVtYUlubXBvcnRpbmdTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdTRExJbXBvcnRpbmdTY2hlbWFJbm1wb3J0aW5nU2NoZW1hKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJXU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0WE1MSW52YWxpZFdTREwoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFhNTEludmFsaWRXU0RMIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RMLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9uZUFuZFR3bygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T25lQW5kVHdvIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9uZUFuZFR3b19PbmUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIm9uZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvdHdvLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd29fVHdvKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJ0d28iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RW1wdHlMb2NhdGlvbigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEVtcHR5TmFtZXNwYWNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFbXB0eU5hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlL0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJ0ZXN0LTEuMCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvU2ltcGxlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvU2ltcGxlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9TaW1wbGVJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V2l0aEluY29ycmVjdFNsYXNoKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2giOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENZQ0xJQyBURVNUUwotICAgKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQb3J0dHlwZVJlZk1lc3NhZ2UxKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQb3J0dHlwZVJlZk1lc3NhZ2UxIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ3ljbGljLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQb3J0dHlwZVJlZk1lc3NhZ2UyKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQb3J0dHlwZVJlZk1lc3NhZ2UyIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ3ljbGljLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZUlubGluZVR5cGVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlcmVuY2VJbmxpbmVUeXBlcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL0VtcHR5LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRW1wdHkiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vRGVmYXVsdE5hbWVzcGFjZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTm9EZWZhdWx0TmFtZXNwYWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvTm9EZWZhdWx0TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nSW52YWxpZFN0eWxlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJCaW5kaW5nSW52YWxpZFN0eWxlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkJpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkJpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRVc2UvQmluZGluZ0ludmFsaWRVc2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEJpbmRpbmdJbnZhbGlkVXNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJCaW5kaW5nSW52YWxpZFVzZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkJpbmRpbmdFbGVtZW50L0ludmFsaWRVc2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkRWxlbWVudC9NZXNzYWdlSW52YWxpZEVsZW1lbnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1lc3NhZ2VJbnZhbGlkRWxlbWVudCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTWVzc2FnZUludmFsaWRFbGVtZW50IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIk1lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkRWxlbWVudC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkRWxlbWVudC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TWVzc2FnZUludmFsaWRUeXBlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJNZXNzYWdlSW52YWxpZFR5cGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZFR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIk1lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIk1lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydFR5cGVJbnZhbGlkSW5wdXQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBvcnRUeXBlSW52YWxpZElucHV0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydFR5cGVJbnZhbGlkT3V0cHV0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQb3J0VHlwZUludmFsaWRPdXRwdXQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJ2aWNlSW52YWxpZEJpbmRpbmcoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNlcnZpY2VJbnZhbGlkQmluZGluZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZXJ2aWNlRWxlbWVudC9JbnZhbGlkQmluZGluZy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZXJ2aWNlRWxlbWVudC9Ob0FkZHJlc3MvU2VydmljZU5vQWRkcmVzcy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2VydmljZU5vQWRkcmVzcygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU2VydmljZU5vQWRkcmVzcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZXJ2aWNlRWxlbWVudC9Ob0FkZHJlc3MvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L05vQWRkcmVzcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZXJ2aWNlRWxlbWVudC9Ob0FkZHJlc3MvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkNhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML05hbWVzcGFjZURvZXNudFJlc29sdmUvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlRG9lc250UmVzb2x2ZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIk5hbWVzcGFjZURvZXNudFJlc29sdmUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW1lc3BhY2VSZXNvbHZlc0hUTUwoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5hbWVzcGFjZVJlc29sdmVzSFRNTCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIk5hbWVzcGFjZVJlc29sdmVzSFRNTC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlZmlsZVNlbGZJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNlbGZJbXBvcnQiOwotICAgIFN0cmluZyBmaWxlcHJlZml4ID0gRklMRV9QUk9UT0NPTDsKLSAgICAvLyBOZWVkIHRvIGVuc3VyZSB0aGUgVVJMIG9mIHRoZSB0ZXN0IGZpbGUgaXMgYXMgZXhwZWN0ZWQuCi0gICAgaWYoUExVR0lOX0FCU09MVVRFX1BBVEguc3RhcnRzV2l0aCgiLyIpKQotICAgIHsKLSAgICAgIGZpbGVwcmVmaXggPSBmaWxlcHJlZml4LnN1YnN0cmluZygwLCBmaWxlcHJlZml4Lmxlbmd0aCgpLTEpOwotICAgIH0KLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBmaWxlcHJlZml4ICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkltcG9ydC9TaW1wbGVGaWxlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVGaWxlSW52YWxpZFNlbGZJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNlbGZJbXBvcnQiOwotICAgIFN0cmluZyBmaWxlcHJlZml4ID0gRklMRV9QUk9UT0NPTDsKLSAgICAvLyBOZWVkIHRvIGVuc3VyZSB0aGUgVVJMIG9mIHRoZSB0ZXN0IGZpbGUgaXMgYXMgZXhwZWN0ZWQuCi0gICAgaWYoUExVR0lOX0FCU09MVVRFX1BBVEguc3RhcnRzV2l0aCgiLyIpKQotICAgIHsKLSAgICAgIGZpbGVwcmVmaXggPSBmaWxlcHJlZml4LnN1YnN0cmluZygwLCBmaWxlcHJlZml4Lmxlbmd0aCgpLTEpOwotICAgIH0KLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBmaWxlcHJlZml4ICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvQmFkRXh0ZW5zaWJsZUVsZW1lbnRzLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCYWRFeHRlbnNpYmxlRWxlbWVudHMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkJhZEV4dGVuc2libGVFbGVtZW50cyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkV4dGVuc2libGVFbGVtZW50cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZUJpbmRpbmcud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4dGVuc2libGVCaW5kaW5nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeHRlbnNpYmxlQmluZGluZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkV4dGVuc2libGVFbGVtZW50cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZVBvcnRUeXBlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmxlUG9ydFR5cGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4dGVuc2libGVQb3J0VHlwZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkV4dGVuc2libGVFbGVtZW50cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZVNlcnZpY2VQb3J0LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmxlU2VydmljZVBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4dGVuc2libGVTZXJ2aWNlUG9ydCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkV4dGVuc2libGVFbGVtZW50cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVEZWZpbml0aW9ucy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaWJsZURlZmluaXRpb25zKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeHRlbnNpYmxlRGVmaW5pdGlvbnMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiRXh0ZW5zaWJsZUVsZW1lbnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJFeHRlbnNpYmxlRWxlbWVudHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiRXh0ZW5zaWJsZUVsZW1lbnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1dTRExWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxZWFlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1dTRExWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotICAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gIHByaXZhdGUgc3RhdGljIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbiBwbHVnaW47Ci0gIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgcGx1Z2luID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RvcChjb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hTRFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM4MWZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hTRFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFhTRCB2YWxpZGF0aW9uIHRlc3RzIGZvciB0aGUgV1NETCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFhTRF9ESVIgPSAiWFNELyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplRW50aXRpZXNWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAibm9ybWFsaXplRW50aXRpZXNWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIkVudGl0aWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkVudGl0aWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplRW50aXRpZXNJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJub3JtYWxpemVFbnRpdGllc0ludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkVudGl0aWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZlclRvQW5vdGhlcklubGluZVR5cGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJPbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlNjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL1ZhbHVlQ29sb24vVmFsdWVDb2xvbi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsdWVDb2xvbigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVmFsdWVDb2xvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlZhbHVlQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiVmFsdWVDb2xvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlZhbHVlQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9OU1NjaGVtYSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Tm9OU1NjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWEvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0Tm9OU1NjaGVtYS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWEvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0ltcG9ydE5vTlNTY2hlbUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vTlNFbGVtZW50UmVmZXJlbmNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJOb05TRWxlbWVudFJlZmVyZW5jZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIk5vTlNFbGVtZW50UmVmZXJlbmNlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk5vTlNFbGVtZW50UmVmZXJlbmNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiTm9OU0VsZW1lbnRSZWZlcmVuY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYU5vTmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb1NjaGVtYUxvY2F0aW9uL0ltcG9ydE5vU2NoZW1hTG9jYXRpb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE5vU2NoZW1hTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE5vU2NoZW1hTG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb1NjaGVtYUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vU2NoZW1hTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb1NjaGVtYUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NTllZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0KLSAgPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzIi8+Ci0KLSAgPCEtLSBFbmQgQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImJ2dHdvcmtzcGFjZSIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZS1mb2xkZXIiIHZhbHVlPSIke2J2dHdvcmtzcGFjZX0vJHtwbHVnaW4tbmFtZX0iLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgICA8ZGVsZXRlPgotICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy4qLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgIDwhLS0gU3RhcnQgd2l0aCBjbGVhbiBkYXRhIHdvcmtzcGFjZSAtLT4gIAotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotCi0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZS1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsV1NETFRlc3RzIi8+Ci0gICAgPC9hbnQ+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mjk4M2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jdmMtY29tcGxleC10eXBlLjIuMzogRWxlbWVudCAnd3NkbDpvcGVyYXRpb24nIGNhbm5vdCBoYXZlIGNoYXJhY3RlciBbY2hpbGRyZW5dLCBiZWNhdXNlIHRoZSB0eXBlJ3MgY29udGVudCB0eXBlIGlzIGVsZW1lbnQtb25seS4gWzE2LCAzN10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MzkwNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jdmMtY29tcGxleC10eXBlLjIuNC5iOiBUaGUgY29udGVudCBvZiBlbGVtZW50ICd3c2RsOm9wZXJhdGlvbicgaXMgbm90IGNvbXBsZXRlLiBPbmUgb2YgJ3siaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOmRvY3VtZW50YXRpb24sIFdDWyMjb3RoZXI6Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIl0sICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI6aW5wdXQsICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI6b3V0cHV0fScgaXMgZXhwZWN0ZWQuIFsxNiwgMzddCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxOTJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZThhZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMgotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWVudW1lcmF0aW9uLXZhbGlkOiBWYWx1ZSAnSW52YWxpZFN0eWxlJyBpcyBub3QgZmFjZXQtdmFsaWQgd2l0aCByZXNwZWN0IHRvIGVudW1lcmF0aW9uICdbcnBjLCBkb2N1bWVudF0nLiBJdCBtdXN0IGJlIGEgdmFsdWUgZnJvbSB0aGUgZW51bWVyYXRpb24uIFsyMiwgOTBdCi1jdmMtYXR0cmlidXRlLjM6IFRoZSB2YWx1ZSAnSW52YWxpZFN0eWxlJyBvZiBhdHRyaWJ1dGUgJ3N0eWxlJyBvbiBlbGVtZW50ICdzb2FwOmJpbmRpbmcnIGlzIG5vdCB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gaXRzIHR5cGUsICd0U3R5bGVDaG9pY2UnLiBbMjIsIDkwXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRVc2UvQmluZGluZ0ludmFsaWRVc2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNTgyYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRVc2UvQmluZGluZ0ludmFsaWRVc2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWN2Yy1lbnVtZXJhdGlvbi12YWxpZDogVmFsdWUgJ0ludmFsaWRVc2UnIGlzIG5vdCBmYWNldC12YWxpZCB3aXRoIHJlc3BlY3QgdG8gZW51bWVyYXRpb24gJ1tsaXRlcmFsLCBlbmNvZGVkXScuIEl0IG11c3QgYmUgYSB2YWx1ZSBmcm9tIHRoZSBlbnVtZXJhdGlvbi4gWzI5LCA0Nl0KLWN2Yy1hdHRyaWJ1dGUuMzogVGhlIHZhbHVlICdJbnZhbGlkVXNlJyBvZiBhdHRyaWJ1dGUgJ3VzZScgb24gZWxlbWVudCAnc29hcDpib2R5JyBpcyBub3QgdmFsaWQgd2l0aCByZXNwZWN0IHRvIGl0cyB0eXBlLCAndXNlQ2hvaWNlJy4gWzI5LCA0Nl0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0JhZEV4dGVuc2libGVFbGVtZW50cy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvQmFkRXh0ZW5zaWJsZUVsZW1lbnRzLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDVmNjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvQmFkRXh0ZW5zaWJsZUVsZW1lbnRzLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ0JhZEV4dGVuc2libGVFbGVtZW50cycgcG9ydCB0eXBlIHNwZWNpZmllZCBmb3IgdGhlICdCYWRFeHRlbnNpYmxlRWxlbWVudHNTT0FQJyBiaW5kaW5nIGlzIHVuZGVmaW5lZC4gQ2hlY2sgdGhlICdCYWRFeHRlbnNpYmxlRWxlbWVudHMnIHBvcnQgdHlwZSBuYW1lIGFuZCBlbnN1cmUgaXQgaXMgZGVmaW5lZC4gWzQwLCA4Ml0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVCaW5kaW5nLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpYmxlQmluZGluZy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVCaW5kaW5nLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVEZWZpbml0aW9ucy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZURlZmluaXRpb25zLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMThlOTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZURlZmluaXRpb25zLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgdGVzdCBleHRlbnNpb25zIHZhbGlkYXRvciBnb3QgY2FsbGVkLiBbOCwgNDBdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpYmxlUG9ydFR5cGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVQb3J0VHlwZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVQb3J0VHlwZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpYmxlU2VydmljZVBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVTZXJ2aWNlUG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVTZXJ2aWNlUG9ydC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhYjYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBpcyBlbXB0eS4gQSBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZS4gWzcsIDU2XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA2MGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJycgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFs3LCA1M10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTZlYTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGVtcHR5LiBBIGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlLiBbNywgNDJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlL0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlNDY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS40OiBBdHRyaWJ1dGUgJ2xvY2F0aW9uJyBtdXN0IGFwcGVhciBvbiBlbGVtZW50ICd3c2RsOmltcG9ydCcuIFs3LCA0NF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDMwOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1RoaXNGaWxlRG9lc250RXhpc3Qud3NkbCcgZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkLiBDaGVjayB0aGF0IHRoZSBkb2N1bWVudCBleGlzdHMgYW5kIHRoYXQgdGhlIGxvY2F0aW9uIGlzIGNvcnJlY3QuIFszLCA4Nl0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNWU0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgZmlsZSBjYW5ub3QgYmUgaW1wb3J0ZWQgYmVjYXVzZSB0aGUgbmFtZXNwYWNlICdodHRwOi8vaW52YWxpZG5hbWVzcGFjZScgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nIG9mIHRoZSBpbXBvcnRlZCBkb2N1bWVudC4gWzMsIDczXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYmNhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSAnU0lNUExFV1NETC53c2RsJyBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW1wb3J0ZWQuIENoZWNrIHRoYXQgdGhlIGRvY3VtZW50IGV4aXN0cyBhbmQgdGhhdCB0aGUgbG9jYXRpb24gaXMgY29ycmVjdC4gWzMsIDc4XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNjJjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJ2h0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlJyBkb2VzIG5vdCBtYXRjaCB0aGUgdGFyZ2V0IG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFszLCA3OF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4NjgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbCkuICBbMSwgMF0KLS0+IEVsZW1lbnQgdHlwZSAid3NkbDpkZWZpbml0aW9ucyIgbXVzdCBiZSBmb2xsb3dlZCBieSBlaXRoZXIgYXR0cmlidXRlIHNwZWNpZmljYXRpb25zLCAiPiIgb3IgIi8+Ii4gWzQsIDNdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nVHlwZXMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjk5MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW4nLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAneHNkOnN0cmluJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICd4c2Q6c3RyaW4nIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gWzE2LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlMzM1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcGFydCAnTmV3T3BlcmF0aW9uUmVzcG9uc2UnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdJbnZhbGlkRWxlbWVudCcgZGVmaW5lZCBmb3IgaXRzIGVsZW1lbnQuIEVsZW1lbnQgZGVjbGFyYXRpb25zIG11c3QgcmVmZXIgdG8gdmFsaWQgdmFsdWVzIGRlZmluZWQgaW4gYSBzY2hlbWEuIFsxMCwgNzRdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWZlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHBhcnQgJ05ld09wZXJhdGlvblJlcXVlc3QnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdOZXdPcGVyYXRpb25SZXF1ZXN0JyBkZWZpbmVkIGZvciBpdHMgdHlwZS4gVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzEzLCA3NV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML05hbWVzcGFjZURvZXNudFJlc29sdmUvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjA1OGQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgaW5wdXQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSAnSW52YWxpZElucHV0Jy4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4gWzE3LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxNTkxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgb3V0cHV0IGVsZW1lbnQgaXMgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVkIG1lc3NhZ2UgJ0ludmFsaWRPdXRwdXQnLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBkZWZpbmVkLiBbMTgsIDQ5XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL0VtcHR5LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTUzNDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBwYXJ0ICdOZXdPcGVyYXRpb25SZXNwb25zZScgaGFzIGFuIGludmFsaWQgdmFsdWUgJ0ludmFsaWRFbGVtZW50JyBkZWZpbmVkIGZvciBpdHMgZWxlbWVudC4gRWxlbWVudCBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzE0LCA3MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY0MGU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1NlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAnIHBvcnQgaGFzIGFuIGludmFsaWQgYmluZGluZyAtICdJbmNvcnJlY3RCaW5kaW5nUmVmJy4gQ2hlY2sgdGhhdCB0aGUgJ0luY29ycmVjdEJpbmRpbmdSZWYnIGJpbmRpbmcgaXMgZGVmaW5lZC4gWzM0LCA4M10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWFhOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcG9ydCAnU2VydmljZU5vQWRkcmVzc1NPQVAnIGhhcyBubyBhZGRyZXNzIGRlZmluZWQuIEVhY2ggcG9ydCBtdXN0IGRlZmluZSBvbmUgYWRkcmVzcy4gWzM0LCA3OV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGFmNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgdmFsdWUgb2YgYXR0cmlidXRlICJ2YWx1ZSIgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSAieHNkOnBhdHRlcm4iIG11c3Qgbm90IGNvbnRhaW4gdGhlICc8JyBjaGFyYWN0ZXIuIFsxMSwgNTVdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9TY2hlbWFMb2NhdGlvbi9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9TY2hlbWFMb2NhdGlvbi9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjZlMTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vU2NoZW1hTG9jYXRpb24vSW1wb3J0Tm9TY2hlbWFMb2NhdGlvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NoZW1hX3JlZmVyZW5jZS40OiBGYWlsZWQgdG8gcmVhZCBzY2hlbWEgZG9jdW1lbnQgJ251bGwnLCBiZWNhdXNlIDEpIGNvdWxkIG5vdCBmaW5kIHRoZSBkb2N1bWVudDsgMikgdGhlIGRvY3VtZW50IGNvdWxkIG5vdCBiZSByZWFkOyAzKSB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBkb2N1bWVudCBpcyBub3QgPHhzZDpzY2hlbWE+LiBbOSwgNjFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0lubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDFhZDE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAneHNkOnN0cmluZ2EnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAneHNkOnN0cmluZ2EnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnLCBidXQgY29tcG9uZW50cyBmcm9tIHRoaXMgbmFtZXNwYWNlIGFyZSBub3QgcmVmZXJlbmNlYWJsZSBmcm9tIHNjaGVtYSBkb2N1bWVudCAndGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3hzZDpzdHJpbmdhJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCcuIFs3LCA2MV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODgxODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAyCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zcmMtcmVzb2x2ZS40LjI6IEVycm9yIHJlc29sdmluZyBjb21wb25lbnQgJ3R3bzpOZXdTaW1wbGVUeXBlJy4gSXQgd2FzIGRldGVjdGVkIHRoYXQgJ3R3bzpOZXdTaW1wbGVUeXBlJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly90ZW1wdXJpLm9yZy9SZWZlclRvQW5vdGhlcklubGluZVR5cGUyLycsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICd0d286TmV3U2ltcGxlVHlwZScgbmVlZHMgdG8gYmUgY2hhbmdlZC4gSWYgdGhpcyBpcyB0aGUgY29ycmVjdCBuYW1lc3BhY2UsIHRoZW4gYW4gYXBwcm9wcmlhdGUgJ2ltcG9ydCcgdGFnIHNob3VsZCBiZSBhZGRlZCB0byAndGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbCcuIFsxMywgNjddCi1zcmMtcmVzb2x2ZS40LjI6IEVycm9yIHJlc29sdmluZyBjb21wb25lbnQgJ29uZTpOZXdTaW1wbGVUeXBlJy4gSXQgd2FzIGRldGVjdGVkIHRoYXQgJ29uZTpOZXdTaW1wbGVUeXBlJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly90ZW1wdXJpLm9yZy9SZWZlclRvQW5vdGhlcklubGluZVR5cGUxLycsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICdvbmU6TmV3U2ltcGxlVHlwZScgbmVlZHMgdG8gYmUgY2hhbmdlZC4gSWYgdGhpcyBpcyB0aGUgY29ycmVjdCBuYW1lc3BhY2UsIHRoZW4gYW4gYXBwcm9wcmlhdGUgJ2ltcG9ydCcgdGFnIHNob3VsZCBiZSBhZGRlZCB0byAndGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbCcuIFsyNCwgNjddCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24ud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0ud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1ZhbHVlQ29sb24vVmFsdWVDb2xvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODliZTMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY3ZjLWNvbXBsZXgtdHlwZS4yLjMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5ld1dTRExGaWxlMSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9Ik5ld01lc3NhZ2UiPjwvd3NkbDppbnB1dD4KLWFhYWEKLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOWM1MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuNC5iLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuNC5iLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuNC5iLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJOZXdXU0RMRmlsZTEiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGxhdGZvcm1VUkwvb25lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyNzVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9vbmUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ib25lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvb25lLyI+Ci08d3NkbDppbXBvcnQKLSAgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3R3by8iCi0gIGxvY2F0aW9uPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdC90d28ud3NkbCIvPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGxhdGZvcm1VUkwvdHdvLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC90d28ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzMGRiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC90d28ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90d28vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idHdvIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdHdvLyI+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNDVkMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFN0eWxlLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFN0eWxlLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJCaW5kaW5nSW52YWxpZFN0eWxlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGVTT0FQIiB0eXBlPSJ0bnM6QmluZGluZ0ludmFsaWRTdHlsZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iSW52YWxpZFN0eWxlIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ludmFsaWRTdHlsZS9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJCaW5kaW5nSW52YWxpZFN0eWxlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGVTT0FQIiBiaW5kaW5nPSJ0bnM6QmluZGluZ0ludmFsaWRTdHlsZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRVc2UvQmluZGluZ0ludmFsaWRVc2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTRjMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkJpbmRpbmdJbnZhbGlkVXNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ludmFsaWRVc2UvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ludmFsaWRVc2UvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQmluZGluZ0ludmFsaWRVc2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZ0ludmFsaWRVc2VTT0FQIiB0eXBlPSJ0bnM6QmluZGluZ0ludmFsaWRVc2UiPgotICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9IkludmFsaWRVc2UiLz4KLSAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQmluZGluZ0ludmFsaWRVc2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQmluZGluZ0ludmFsaWRVc2VTT0FQIiBiaW5kaW5nPSJ0bnM6QmluZGluZ0ludmFsaWRVc2VTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGUxYzhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9ucy8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9ucy8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9ucyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Im9wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNlNGM1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjeWNsaWMxIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyIgeG1sbnM6Y3ljbGljMj0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzIvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzIvIiBsb2NhdGlvbj0iUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsIj48L3dzZGw6aW1wb3J0PgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJjeWNsaWMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImN5Y2xpYzI6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImN5Y2xpYzI6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMzUyOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzIvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY3ljbGljMiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIHhtbG5zOmN5Y2xpYzE9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyI+Ci0gIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyIgbG9jYXRpb249IlBvcnR0eXBlUmVmTWVzc2FnZTEud3NkbCI+PC93c2RsOmltcG9ydD4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iY3ljbGljMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJjeWNsaWMxOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJjeWNsaWMxOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvQmFkRXh0ZW5zaWJsZUVsZW1lbnRzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9CYWRFeHRlbnNpYmxlRWxlbWVudHMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViMjBlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9CYWRFeHRlbnNpYmxlRWxlbWVudHMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJCYWRFeHRlbnNpYmxlRWxlbWVudHMiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JhZEV4dGVuc2libGVFbGVtZW50cy8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JhZEV4dGVuc2libGVFbGVtZW50cy8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmFkRXh0ZW5zaWJsZUVsZW1lbnRzLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJCYWRFeHRlbnNpYmxlRWxlbWVudHMiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJCQk8eHNkOmFubm90YXRpb24+PC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj48L3hzZDphbm5vdGF0aW9uPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJCYWRFeHRlbnNpYmxlRWxlbWVudHNTT0FQIiB0eXBlPSJ0bnM6QmFkRXh0ZW5zaWJsZUVsZW1lbnRzIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JhZEV4dGVuc2libGVFbGVtZW50cy9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJCYWRFeHRlbnNpYmxlRWxlbWVudHMiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpCYWRFeHRlbnNpYmxlRWxlbWVudHNTT0FQIiBuYW1lPSJCYWRFeHRlbnNpYmxlRWxlbWVudHNTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVCaW5kaW5nLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpYmxlQmluZGluZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzJkNTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVCaW5kaW5nLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRXh0ZW5zaWJsZUJpbmRpbmciCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2libGVCaW5kaW5nLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5zaWJsZUJpbmRpbmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2libGVCaW5kaW5nLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UxIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlMSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iRXh0ZW5zaWJsZUJpbmRpbmciPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IkV4dGVuc2libGVCaW5kaW5nU09BUCIKLQkJdHlwZT0idG5zOkV4dGVuc2libGVCaW5kaW5nIj4KLQkJPHhzZDphbm5vdGF0aW9uPjwveHNkOmFubm90YXRpb24+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpYmxlQmluZGluZy9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8eHNkOmFubm90YXRpb24+PC94c2Q6YW5ub3RhdGlvbj4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTx4c2Q6YW5ub3RhdGlvbj48L3hzZDphbm5vdGF0aW9uPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTx4c2Q6YW5ub3RhdGlvbj48L3hzZDphbm5vdGF0aW9uPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Im15ZmF1bHQiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj48L3hzZDphbm5vdGF0aW9uPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCQotCTx3c2RsOnNlcnZpY2UgbmFtZT0iRXh0ZW5zaWJsZUJpbmRpbmciPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpFeHRlbnNpYmxlQmluZGluZ1NPQVAiIG5hbWU9IkV4dGVuc2libGVCaW5kaW5nU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVEZWZpbml0aW9ucy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZURlZmluaXRpb25zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YzJmZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZURlZmluaXRpb25zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJFeHRlbnNpYmxlRGVmaW5pdGlvbnMiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2libGVEZWZpbml0aW9ucy8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2libGVEZWZpbml0aW9ucy8iIAotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOmV4dD0iaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvRXh0ZW5zaW9ucyI+Ci0JPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0aW5nIHRoZSB2YWxpZGF0aW9uIG9mIGRlZmluaXRpb25zIGxldmVsIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JPGV4dDp0ZXN0RXh0ZW5zaW9uIHRlc3RBdHRyaWJ1dGU9IjEwIj50ZXN0PC9leHQ6dGVzdEV4dGVuc2lvbj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpYmxlUG9ydFR5cGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVQb3J0VHlwZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjEyNmNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVQb3J0VHlwZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkV4dGVuc2libGVQb3J0VHlwZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5zaWJsZVBvcnRUeXBlLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5zaWJsZVBvcnRUeXBlLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpYmxlUG9ydFR5cGUvIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj48L3hzZDphbm5vdGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJFeHRlbnNpYmxlUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj48L3hzZDphbm5vdGF0aW9uPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJFeHRlbnNpYmxlUG9ydFR5cGVTT0FQIiB0eXBlPSJ0bnM6RXh0ZW5zaWJsZVBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2libGVQb3J0VHlwZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJFeHRlbnNpYmxlUG9ydFR5cGUiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpFeHRlbnNpYmxlUG9ydFR5cGVTT0FQIiBuYW1lPSJFeHRlbnNpYmxlUG9ydFR5cGVTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2libGVTZXJ2aWNlUG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZVNlcnZpY2VQb3J0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNDM2NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9FeHRlbnNpYmxlRWxlbWVudHMvRXh0ZW5zaWJsZVNlcnZpY2VQb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRXh0ZW5zaWJsZVNlcnZpY2VQb3J0IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpYmxlU2VydmljZVBvcnQvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpYmxlU2VydmljZVBvcnQvIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2libGVTZXJ2aWNlUG9ydC8iPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iRXh0ZW5zaWJsZVNlcnZpY2VQb3J0Ij4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iRXh0ZW5zaWJsZVNlcnZpY2VQb3J0U09BUCIgdHlwZT0idG5zOkV4dGVuc2libGVTZXJ2aWNlUG9ydCI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpYmxlU2VydmljZVBvcnQvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iRXh0ZW5zaWJsZVNlcnZpY2VQb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPjwveHNkOmFubm90YXRpb24+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkV4dGVuc2libGVTZXJ2aWNlUG9ydFNPQVAiIG5hbWU9IkV4dGVuc2libGVTZXJ2aWNlUG9ydFNPQVAiPgotCQkJPHhzZDphbm5vdGF0aW9uPjwveHNkOmFubm90YXRpb24+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0V4dGVuc2libGVFbGVtZW50cy9FeHRlbnNpb25zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2lvbnMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWMzNzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvRXh0ZW5zaWJsZUVsZW1lbnRzL0V4dGVuc2lvbnMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9FeHRlbnNpb25zIiAKLQl4bWxuczp0bnM9Imh0dHA6Ly9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL0V4dGVuc2lvbnMiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9InRlc3RFeHRlbnNpb24iPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciID4KLQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdEF0dHJpYnV0ZSIgdHlwZT0ieHNkOmludGVnZXIiIC8+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzYzYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCW5hbWU9IkltcG9ydE9uZUFuZFR3byIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9JbXBvcnRPbmVBbmRUd28iIAotCXhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiCi0JeG1sbnM6d3NkbDI9Imh0dHA6Ly9hdGVtcHVyaS5vcmcvdHdvLndzZGwiPgotCi0JCi08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiIGxvY2F0aW9uPSJvbmUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIgbG9jYXRpb249InR3by53c2RsIi8+Ci0JCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwZmYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9vbmUud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiPgotCQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGYxNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmFtZXNwYWNlIG9mIHRoaXMgZG9jdW1lbnQgc3RhcnQgd2l0aCBhbiBhIGFzIGl0IHNob3VsZAotICAgICBiZSBpbXBvcnRlZCBmaXJzdCBieSBJbXBvcnRPbmVBbmRUd28ud3NkbC4gVGhlIG9yZGVyIG9mIHRoZSBpbXBvcnRzIGlzIGRldGVybWluZWQKLSAgICAgYnkgYWxwaGFiZXRpY2FsIG9yZGVyIG9mIHRoZSBuYW1lc3BhY2VzIGluIHRoaXMgZGVmZWN0LiAtLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgbmFtZT0idHdvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIiB4bWxuczp3c2RsMj0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIgotCQlsb2NhdGlvbj0ib25lLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9IndzZGwxOk1lc3NhZ2UiIG5hbWU9IklucHV0Ii8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0id3NkbDE6TWVzc2FnZSIgbmFtZT0iT3V0cHV0Ii8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlMb2NhdGlvbi9JbXBvcnRFbXB0eUxvY2F0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiODk2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSAgICAgICAgICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlMb2NhdGlvbiIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyI+Ci0gIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9zb21ldXJpIiBsb2NhdGlvbj0iIi8+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ibWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ibWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllYWY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlOYW1lc3BhY2UiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2UvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iIiBsb2NhdGlvbj0ic2ltcGxlLndzZGwiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL3NpbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMGYwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIiAKLSAgICAgICAgICAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9InNpbXBsZSIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzUyMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24iIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSIiIGxvY2F0aW9uPSIiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDIyNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vc29tZXVyaSIvPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Im1lc3NhZ2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3Njc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnROb25FeGlzdGFudEZpbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9ub25leGlzdGluZ2ZpbGUiIGxvY2F0aW9uPSJUaGlzRmlsZURvZXNudEV4aXN0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZWViMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LyIgeG1sbnM6c2NoZW1hPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+ICAgIAotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld01lc3NhZ2UiPgotICAgIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld01lc3NhZ2UiIGVsZW1lbnQ9InNjaGVtYTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLSAgICA8L3dzZGw6bWVzc2FnZT4gICAKLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFhMDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vaW52YWxpZG5hbWVzcGFjZSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzhlMmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydFdTRExXaXRoV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViYjkzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0iU0lNUExFV1NETC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4MmVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLSAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUMiIHNjaGVtYUxvY2F0aW9uPSIuXEMueHNkIi8+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BQyI+Ci0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNhbXBsZVR5cGUiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVFbGVtZW50IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTdjMTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL05ld1dTRExGaWxlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9OZXdXU0RMRmlsZS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUMiPgotICAJCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQy54c2QiLz4KLSAgCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhNzg4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0WE1MSW52YWxpZFdTREwvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0WE1MSW52YWxpZFdTREwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFhNTEludmFsaWRXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1hNTEludmFsaWRXU0RMLyIgbG9jYXRpb249IlhNTEludmFsaWRXU0RMLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5MmQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGlzbid0IGNsb3NlZC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJYTUxJbnZhbGlkV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvWE1MSW52YWxpZFdTREwvIgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iWE1MSW52YWxpZFdTREwiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iWE1MSW52YWxpZFdTRExTT0FQIiB0eXBlPSJ0bnM6WE1MSW52YWxpZFdTREwiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJYTUxJbnZhbGlkV1NETCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6WE1MSW52YWxpZFdTRExTT0FQIiBuYW1lPSJYTUxJbnZhbGlkV1NETFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmZmRjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpJbXBvcnRpbmdTY2hlbWFOb3RJbkRpcj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6cGxhaW5zY2hlbWE9Imh0dHA6Ly9wbGFpbnNjaGVtYSI+Ci0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9wbGFpbnNjaGVtYSIgc2NoZW1hTG9jYXRpb249InN1YmZvbGRlci9QbGFpblNjaGVtYS54c2QiPjwvaW1wb3J0PgotCTxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InBsYWluc2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjljN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS8iIHhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIiBsb2NhdGlvbj0ic3ViZm9sZGVyL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ3c2RsMTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGIxNjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJOb1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydCIKLQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6ZWxtcz0iY29tbW9uLmVsZW1lbnRzIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvY29tcGxleFR5cGU+Ci0JCTwvc2NoZW1hPgotCQk8c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJlbG1zOk15VHlwZSIgLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiCi0JCQluYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IgotCQkJbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TY2hlbWFOYW1lc3BhY2VBQUEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzUwZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIiB4bWxuczpTY2hlbWFOYW1lc3BhY2VBQUE9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC9pbXBvcnQtMS4wLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzNiYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImltcG9ydC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIiAvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L3Rlc3QtMS4wLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllMzliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL3Rlc3QtMS4wLndzZGwiCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idGVzdC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvdGVzdC0xLjAud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCIKLQkJbG9jYXRpb249ImltcG9ydC0xLjAud3NkbCIgLz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiZTc4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDM3ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETEltcG9ydGluZ1R5cGVzIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iIGxvY2F0aW9uPSJXU0RMT25seVR5cGVzLndzZGwiPjwvd3NkbDppbXBvcnQ+ICAgIAotICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3TWVzc2FnZSI+Ci0gICAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3TWVzc2FnZSIgZWxlbWVudD0id3NkbDE6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YzE4ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vQUFBIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETE5hbWVzcGFjZUFBQSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUFBIiBsb2NhdGlvbj0iU2NoZW1hTmFtZXNwYWNlQUFBLnhzZCI+PC93c2RsOmltcG9ydD4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNGY2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMT25seVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMT25seVR5cGVzLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExPbmx5VHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iPgotCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD48L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZWU1MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOnNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmMzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zaW1wbGV3c2RsLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9zaW1wbGV3c2RsLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbXBsZXdzZGwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIi8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzJmZDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydGVkSW1wb3J0aW5nU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iCi0gICAgICAgICAgICB4bWxuczpJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYT0iaHR0cDovL0ltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hIj4KLQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QiPjwveHNkOmltcG9ydD4KLQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9IkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAyYzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHhtbG5zOkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiPgotICA8c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxtaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc3ViZm9sZGVyL1BsYWluU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkZTc1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3BsYWluc2NoZW1hIiB4bWxuczpQbGFpblNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPHNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZGMxNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJGb28iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRm9vLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ianVuayI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ5IiB0eXBlPSJ4c2Q6c3RyaW4iLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZm9vIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YSIgbmFtZT0iZm9vIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iYmFyIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YiIgbmFtZT0iYmFyIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkZvbyI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRGb28iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOmJhciIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Zm9vIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGJlMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWVzc2FnZUludmFsaWRFbGVtZW50LyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6SW52YWxpZEVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9Ik1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiIHR5cGU9InRuczpNZXNzYWdlSW52YWxpZEVsZW1lbnQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJNZXNzYWdlSW52YWxpZEVsZW1lbnQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50U09BUCIgYmluZGluZz0idG5zOk1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM0ZWRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdXU0RMRmlsZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiB0eXBlPSJ0bnM6TmV3V1NETEZpbGUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiBiaW5kaW5nPSJ0bnM6TmV3V1NETEZpbGVTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZTc0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iPgotPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQlUaGlzIFdTREwgZG9jdW1lbnQgdGVzdHMgdGhhdCBhbiBlbGVtZW50IHNwZWNpZmllZCBmb3IgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0JdGhhdCBkb2VzIG5vdCByZXNvbHZlIHRvIGFueSByZXNvdXJjZSB2YWxpZGF0ZXMgY29ycmVjdGx5LgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9Ik5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlRG9lc250UmVzb2x2ZSI+Ci08ZXh0OmVsZW1lbnQgeG1sbnM6ZXh0PSJodHRwOi8vc2NoZW1hcy5ub25leGlzdGFudGRvbWFpbi5uZWQvZWxlbWVudCIvPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZURvZXNudFJlc29sdmUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMmYzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZVJlc29sdmVzSFRNTC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JVGhpcyBXU0RMIHRlc3RzIHRoYXQgYW4gZXh0ZW5zaW9uIGVsZW1lbnQgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYXQKLQlyZXNvbHZlcyB0byBhbiBIVE1MIGRvY3VtZW50IChub24tc2NoZW1hIGRvY3VtZW50KSBkb2VzIG5vdCBjYXVzZQotCXZhbGlkYXRpb24gZXJyb3JzLgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5hbWVzcGFjZVJlc29sdmVzSFRNTCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUxTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPGV4dDplbGVtZW50IHhtbG5zOmV4dD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCIgbmFtZT0iTmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMDJiMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iUG9ydFR5cGVJbnZhbGlkSW5wdXQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZElucHV0LyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6SW52YWxpZElucHV0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZElucHV0U09BUCIgdHlwZT0idG5zOlBvcnRUeXBlSW52YWxpZElucHV0Ij4NCi0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4NCi0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiIGJpbmRpbmc9InRuczpQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkMWI2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpJbnZhbGlkT3V0cHV0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiIHR5cGU9InRuczpQb3J0VHlwZUludmFsaWRPdXRwdXQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRPdXRwdXQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydFR5cGVJbnZhbGlkT3V0cHV0U09BUCIgYmluZGluZz0idG5zOlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvTm9EZWZhdWx0TmFtZXNwYWNlL05vRGVmYXVsdE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzMzZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iTm9EZWZhdWx0TmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIj4KLSAgPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLSAgICA8ZWxlbWVudE5vTmFtZXNwYWNlLz4KLSAgPC93c2RsOmRvY3VtZW50YXRpb24+ICAgIAotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9SZWZlcmVuY2VJbmxpbmVUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEzMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJlbmNlSW5saW5lVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iUmVmZXJlbmNlSW5saW5lVHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0gICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLSAgICAJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ0bnM6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0JCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PjwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGViY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS8iPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdXNlPSJlbmNvZGVkIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTQxM2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLyI+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UvIiB1c2U9ImVuY29kZWQiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlU09BUCIgbmFtZT0iU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTk3OWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUltcG9ydHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBzZWxmIGltcG9ydC4KLS0tPgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iIGxvY2F0aW9uPSJTZWxmSW1wb3J0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnRTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0Ij4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCIgbmFtZT0iSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvU2VsZkltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OTFkMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5MWQzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZS9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM4YzQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUFuIGludmFsaWQgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpJbnZhbGlkRWxlbWVudCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTM3NmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZUludmFsaWRCaW5kaW5nLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlSW52YWxpZEJpbmRpbmciPgotICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZXJ2aWNlSW52YWxpZEJpbmRpbmcvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlSW52YWxpZEJpbmRpbmdTT0FQIiBiaW5kaW5nPSJ0bnM6SW5jb3JyZWN0QmluZGluZ1JlZiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdhMDdmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZU5vQWRkcmVzcyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlNlcnZpY2VOb0FkZHJlc3MiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU2VydmljZU5vQWRkcmVzc1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlTm9BZGRyZXNzIj4KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZU5vQWRkcmVzcyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlTm9BZGRyZXNzU09BUCIgYmluZGluZz0idG5zOlNlcnZpY2VOb0FkZHJlc3NTT0FQIj4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNzE5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGRmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMiI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzIyOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSW52YWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnw8fD58fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVlYTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBWYWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRlc1ZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRlc1ZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnwmbHQ7fCZndDt8fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzODc4MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGRlZmluaXRpb25zIG5hbWU9IkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlIgotCXhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczpzY2g9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCi0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiPgkJCQotCQkJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWEueHNkIi8+Ci0JCTwveHNkOnNjaGVtYT4KLQkJCQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIgeG1sbnM6c2NoPSJodHRwOi8vdGVzdC5jb20vc2NoZW1hIj4KLQkJCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkVsZW1lbnQiIHR5cGU9InNjaDpNeVR5cGUiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+CQotCQotCTxtZXNzYWdlIG5hbWU9InJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJwYXJ0IiBlbGVtZW50PSJ0bnM6RWxlbWVudCIvPgotCTwvbWVzc2FnZT4JCQotCQotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2ZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiIAotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSI+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iYXR0b25lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJhdHR0d28iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwvY29tcGxleFR5cGU+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmViYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IgoteG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUZXN0IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vU2ltcGxlL1Rlc3QiPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9TaW1wbGUvVGVzdCIKLXhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJOb1Rucy54c2QiLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24xIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImlucHV0MSIgbmlsbGFibGU9InRydWUiIHR5cGU9Ik5vVG5zIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgICA8d3NkbDptZXNzYWdlIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0TXNnIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpvcGVyYXRpb24xIiBuYW1lPSJvcGVyYXRpb24xUGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJUZXN0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6b3BlcmF0aW9uMVJlcXVlc3RNc2ciIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5YzJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9Ob1Rucy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOb1RucyI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQ3OTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRTY2hlbWFOb05hbWVzcGFjZS8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0ibm9UTlMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydFNjaGVtYU5vTmFtZXNwYWNlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDgwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvbm9UTlMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9TY2hlbWFMb2NhdGlvbi9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9TY2hlbWFMb2NhdGlvbi9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGUyZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vU2NoZW1hTG9jYXRpb24vSW1wb3J0Tm9TY2hlbWFMb2NhdGlvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnROb1NjaGVtYUxvY2F0aW9uIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnROb1NjaGVtYUxvY2F0aW9uLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvRG9jTGl0ZXJhbC8iIC8+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA3OWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLyIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCI+Ci0JCQk8eHM6Y29tcGxleFR5cGUgbmFtZT0idHlwZVdpdGhNaW5NYXhPY2N1cnMiPgotCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0xIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0yIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJPC94czpjb21wbGV4VHlwZT4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0eXBlV2l0aFJlc3RyaWN0aW9uIj4KLQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCTx4czplbGVtZW50IG5hbWU9ImVsZW0zIj4KLQkJCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzb21ldGhpbmciLz4KLQkJCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCQkJPC94czpzaW1wbGVUeXBlPgotCQkJCQk8L3hzOmVsZW1lbnQ+Ci0JCQkJPC94czpzZXF1ZW5jZT4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDEzNzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hPgotCQotPC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzMDJkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJOb05TRWxlbWVudFJlZmVyZW5jZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDpkb2N1bWVudGF0aW9uPgotCVRoaXMgV1NETCBmaWxlIGRlbW9uc3RyYXRlcyBhIG1lc3NhZ2UgcmVmZXJyaW5nIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBkZWZpbmVkCi0JYnkgYW4gaW5saW5lIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gIDwvd3NkbDpkb2N1bWVudGF0aW9uPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MzNkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp4c2QxPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzEiIHhtbG5zOnhzZDI9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvMSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIj4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZ2EiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzIiPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIi8+Ci0JCSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ4c2QxOk5ld0dsb2JhbEVsZW1lbnQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjJkOTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIi8+Ci0gICAgICAgICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InR3bzpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIgotICAgICAgICAgICAgeG1sbnM6b25lPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMS8iPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIi8+Ci0JCSAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9Im9uZTpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5OGZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotCQkgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0d286TmV3U2ltcGxlVHlwZSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZWZlclRvQW5vdGhlcklubGluZVR5cGUyLyIKLSAgICAgICAgICAgIHhtbG5zOm9uZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIj4KLQkJICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ib25lOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxNDM3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIj4KLSAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ0aW1lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IihbMC05XXsyfTpbMC05XXsyfTpbMC05XXsyfSl8KCNlbXB0eSB2YWx1ZSkiLz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4gICAgICAgICAgCi0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjZjYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgCi0gICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQk8dHlwZXM+Ci0JCTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJCQk8eHM6YW5ub3RhdGlvbj4KLQkJCQkJPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQkJCQkJCTxjaG9pY2UgLz4KLQkJCQkJPC94czpkb2N1bWVudGF0aW9uPgotCQkJCTwveHM6YW5ub3RhdGlvbj4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvdHlwZXM+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0MzM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvVmFsdWVDb2xvbi8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iVmFsdWVDb2xvbiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9WYWx1ZUNvbG9uLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1ZhbHVlQ29sb24vIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvIHNvdXJjZT0iaHR0cDovL3NhbXBsZS5jb20iPgotCQkJCQkJPHhzZDppbml0aWFsVmFsdWUga2luZD0ic3RyaW5nX3ZhbHVlIiB2YWx1ZT0iOiIvPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjZhMTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3NpLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjg0OGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi10ZW1wLmZvbGRlcgotd3NpLnRlc3RzLmphcgotYnVpbGQueG1sCi1qYXZhQ29tcGlsZXIud3NpLnRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk1ZDE4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGI3OTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1OTozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWE3NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODo0OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNiNDI1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogd3NpLnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5XU0lUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzaSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IjMuOC4wIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS41LjAsMS42LjApIiwKLSBvcmcuZWNsaXBzZS5vc2dpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbAotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYzA3ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2Uud3NpLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC53c2kudGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gd3NpLnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0UmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMjkxNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMKLUJ1bmRsZS1OYW1lLjAgPSBXU0kgSlVuaXQgVGVzdAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0Jhc2ljUHJvZmlsZUFuYWx5emVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9CYXNpY1Byb2ZpbGVBbmFseXplclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4ZjBmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0Jhc2ljUHJvZmlsZUFuYWx5emVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQmFzaWNQcm9maWxlQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgQmFzaWNQcm9maWxlQW5hbHl6ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RSZXBvcnRXcml0ZXJJc0Nsb3NlZEFmdGVyUmVwb3J0SXNGaW5pc2hlZCgpIHRocm93cyBFeGNlcHRpb24gewotCQlEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCUFuYWx5emVyQ29uZmlnIGFuYWx5emVyY29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCk7Ci0JCUFzc2VydGlvblJlc3VsdHNPcHRpb24gYXJvID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0JCWFyby5zZXRTaG93TWVzc2FnZUVudHJ5KGZhbHNlKTsKLQkJYW5hbHl6ZXJjb25maWcuc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihhcm8pOwotCQlhbmFseXplcmNvbmZpZy5zZXRBZGRTdHlsZVNoZWV0KG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpKTsKLQkJRmlsZSByZXBvcnRGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgid3NpLXJlcG9ydCIsICIueG1sIik7Ci0JCWFuYWx5emVyY29uZmlnLnNldFJlcG9ydExvY2F0aW9uKHJlcG9ydEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQlCYXNpY1Byb2ZpbGVBbmFseXplciBhbmFseXplciA9IG5ldyBCYXNpY1Byb2ZpbGVBbmFseXplcihDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGFuYWx5emVyY29uZmlnKSk7Ci0JCQotCQlhbmFseXplci52YWxpZGF0ZUNvbmZvcm1hbmNlKCk7Ci0JCQotCQlib29sZWFuIGRlbGV0ZWQgPSByZXBvcnRGaWxlLmRlbGV0ZSgpOwotCQlhc3NlcnRUcnVlKGRlbGV0ZWQpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVDb25mb3JtYW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkOWJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVDb25mb3JtYW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBDb3JlQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9DQVNFX0ZJTEUgPSAidGVzdGNhc2UueG1sIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQURfSURfQVAgPSAiQVAxMCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX0lEX1NTQlAgPSAiU1NCUDEwIjsKLQotICAgIHByb3RlY3RlZCBTdHJpbmcgcGx1Z2luVVJJID0gbnVsbDsKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIHRhZElEID0gVEFEX0lEX0FQOwotCi0gICAgcHVibGljIENvcmVDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIHBsdWdpblVSSSA9IFdTSVRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXR1cCgpCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMuCi0gICAgICogQHBhcmFtIGZpbGVuYW1lIC0gdGhlIGxvY2F0aW9uIG9mIHRoZSB0ZXN0Y2FzZS54bWwgZmlsZS4KLSAgICAgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIExpc3QgZ2V0RXhwZWN0ZWRBc3NlcnRpb25GYWlsdXJlcyhTdHJpbmcgZmlsZW5hbWUpIHsKLSAgICAgICAgTGlzdCBhc3NlcnRpb25GYWlsdXJlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLgotICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IGJ1aWxkZXIucGFyc2UoZmlsZW5hbWUpOwotICAgICAgICAgICAgTm9kZUxpc3QgbGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYXNzZXJ0aW9uIik7Ci0gICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsKQotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpbGlzdC5pdGVtKGkpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRhZElEIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodGFkICE9IG51bGwpICYmIHRhZC5lcXVhbHModGhpcy50YWRJRCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlcy5hZGQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmVzID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXNzZXJ0aW9uRmFpbHVyZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZSB0aGUgYWN0dWFsIGVycm9ycyB3aXRoIHRoZSBleHBlY3RlZCBlcnJvcnMuCi0gICAgICogQHBhcmFtIGVycm9ycyB0aGUgYWN0dWFsIGFzc2VydGlvbiBmYWlsdXJlcwotICAgICAqIEBwYXJhbSBleHBlY3RlZEVycm9ycyB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgYW5hbHl6ZVJlc3VsdHMoTGlzdCBlcnJvcnMsIExpc3QgZXhwZWN0ZWRFcnJvcnMpIHsKLSAgICAgICAgTGlzdCBhY3R1YWxFcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGlmICgoZXJyb3JzICE9IG51bGwpICYmIChleHBlY3RlZEVycm9ycyAhPSBudWxsKSkgewotICAgICAgICAgICAgSXRlcmF0b3IgaSA9IGVycm9ycy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IgZSA9IChBc3NlcnRpb25FcnJvcilpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgYXNzZXJ0aW9uSWQgPSBlLmdldEFzc2VydGlvbklEKCk7Ci0gICAgICAgICAgICAgICAgYWN0dWFsRXJyb3JzLmFkZChhc3NlcnRpb25JZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWV4cGVjdGVkRXJyb3JzLmNvbnRhaW5zKGFzc2VydGlvbklkKSkgewotICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbmV4cGVjdGVkIGFzc2VydGlvbiBmYWlsdXJlOiAiICsgYXNzZXJ0aW9uSWQpOyAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGkgPSBleHBlY3RlZEVycm9ycy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFzc2VydGlvbklkID0gKFN0cmluZylpLm5leHQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsRXJyb3JzLmNvbnRhaW5zKGFzc2VydGlvbklkKSkgewotICAgICAgICAgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZTogIiArIGFzc2VydGlvbklkKTsgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRXJyb3JzLnNpemUoKSwgZXJyb3JzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBnaXZlbiB0YWQuCi0gICAgICogQHBhcmFtIHRpZCB0aGUgdGFkIGlkLgotICAgICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSB0YWQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUQURVUkkoU3RyaW5nIHRpZCkKLSAgICB7Ci0gICAgICAgIGlmICh0aWQuZXF1YWxzKFRBRF9JRF9BUCkpCi0gICAgICAgICAgICByZXR1cm4gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5BUF9BU1NFUlRJT05fRklMRTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1NCUF9BU1NFUlRJT05fRklMRTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDVmNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXIuTWVzc2FnZUFuYWx5emVyOwotCi1wdWJsaWMgY2xhc3MgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgZXh0ZW5kcyBDb3JlQ29uZm9ybWFuY2VUZXN0IAotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFX0xPR19CQVNFX0RJUkVDVE9SWSA9Ci0gICAgICAidGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9MT0dfRVhURU5TSU9OID0gIi53c2ltc2ciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0JBU0VfRElSRUNUT1JZID0gInRlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9FWFRFTlNJT04gPSAiLndzZGwiOwotCi0gIHB1YmxpYyBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdChTdHJpbmcgbmFtZSkgCi0gIHsKLSAgICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEpVbml0IHRlc3Q6IHZhbGlkYXRlIHRoZSBtZXNzYWdlIGxvZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkIGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIHRlc3ROYW1lIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNvbnRhaW5pbmcgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyB0YWRJRCkgewkKLSAgICAgIHRoaXMudGFkSUQgPSB0YWRJRDsKLQotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgZGV0ZXJtaW5pbmcgYmFzZSB1cmwiLCBwbHVnaW5VUkkpOwotICAgICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgKyAiLyIgKwotICAgICAgICAgICAgICBjYXRlZ29yeSArICIvIiArIHRlc3ROYW1lOwotICAgICAgU3RyaW5nIG1lc3NhZ2VMb2dGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsKLSAgICAgICAgICAgICAgTUVTU0FHRV9MT0dfRVhURU5TSU9OOwotICAgICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0KLSAgICAgIC8vIHZhbGlkYXRlIHRoZSBtZXNzYWdlIGxvZyBkb2N1bWVudAotICAgICAgTWVzc2FnZUFuYWx5emVyIGFuYWx5emVyID0gdmFsaWRhdGVDb25mb3JtYW5jZShtZXNzYWdlTG9nRmlsZSwgdGFkSUQpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5rbm93biBwcm9ibGVtcyBkdXJpbmcgdmFsaWRhdGlvbiIsIGFuYWx5emVyKTsKLQotICAgICAgLy8gcmV0cmlldmUgdGhlIGV4cGVjdGVkIGFzc2VydGlvbiBmYWlsdXJlcwotICAgICAgTGlzdCBleHBlY3RlZEVycm9ycyA9IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXModGVzdGNhc2VGaWxlKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlByb2JsZW1zIHJldHJpZXZpbmcgZXhwZWN0ZWQgZmFpbHVyZXMiLCBleHBlY3RlZEVycm9ycyk7Ci0KLSAgICAgIC8vIGNvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzCi0gICAgICBhbmFseXplUmVzdWx0cyhhbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKSwgZXhwZWN0ZWRFcnJvcnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSB3c2RsIGRvY3VtZW50IGFnYWluc3QgdGhlIHNwZWNpZmllZCBXUy1JIFByb2ZpbGUuCi0gICAqIEBwYXJhbSB0YWQgIHRoZSBXUy1JIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50Ci0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgd3NkbCBkb2N1bWVudAotICAgKiBAcmV0dXJuIHRoZSBXU0RMQW5hbHl6ZXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbGlkYXRpb24gcmVzdWx0cwotICAgKi8gIAotICBwcm90ZWN0ZWQgTWVzc2FnZUFuYWx5emVyIHZhbGlkYXRlQ29uZm9ybWFuY2UoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGFkSUQpIHsKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICAgIFdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0gICAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKCBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNUT1BfTk9OX1dTSSk7Ci0gICAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShnZXRUQURVUkkodGFkSUQpKTsKLQotICAgICAgICAgIGFuYWx5emVyID0gbmV3IE1lc3NhZ2VBbmFseXplcihmaWxlbmFtZSwgcHJlZmVyZW5jZXMpOwotCi0gICAgICAgICAgLy8gcnVuIHRoZSBjb25mb3JtYW5jZSBjaGVjayBhbmQgYWRkIGVycm9ycyBhbmQgd2FybmluZ3MgYXMgbmVlZGVkCi0gICAgICAgICAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0JCi0gICAgICByZXR1cm4gYW5hbHl6ZXI7Ci0gIH0KLQotICAKLSAgCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgd2l0aCBhIFdTREwgZmlsZQotICAgKiBAcGFyYW0gd3NkbEZpbGUgVVJJIG9mIHRoZSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIFdTRGF0YSBTdHJpbmcgYXJyYXkgY29udGFpbmluZzogZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZQotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGxvZyBhbmQgd3NkbCBmaWxlICh0aGV5IHNob3VsZCBiZSBsb2NhdGVkIGluIHRoZSBsb2cgYW5kIHdzZGwgcGF0aHMgcmVzcGVjdGl2ZWx5KQotICAgKi8KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJ1blRlc3RXaXRoV1NETChTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyB0ZXN0TmFtZSwgU3RyaW5nW10gV1NEYXRhKSB7CQotCi0gICAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyBkZXRlcm1pbmluZyBiYXNlIHVybCIsIHBsdWdpblVSSSk7Ci0gICAgICBTdHJpbmcgdGVzdERpcmVjdG9yeSAgPSBwbHVnaW5VUkkgKyBNRVNTQUdFX0xPR19CQVNFX0RJUkVDVE9SWSArICIvIiArCi0gICAgICAgICAgICAgIGNhdGVnb3J5ICsgIi8iICsgdGVzdE5hbWU7Ci0gICAgICBTdHJpbmcgbWVzc2FnZUxvZ0ZpbGUgPSAiZmlsZTovLyIgKyB0ZXN0RGlyZWN0b3J5ICsgIi8iICsgdGVzdE5hbWUgKwotICAgICAgICAgICAgICBNRVNTQUdFX0xPR19FWFRFTlNJT047Ci0gICAgICBTdHJpbmcgdGVzdGNhc2VGaWxlID0gdGVzdERpcmVjdG9yeSArICAiLyIgKyBURVNUX0NBU0VfRklMRTsKLSAgICAgIFN0cmluZyB3c2RsRmlsZSA9ICJmaWxlOi8vIiArIHBsdWdpblVSSSArIFdTRExfQkFTRV9ESVJFQ1RPUlkgKyAiLyIgKyBjYXRlZ29yeSArICIvIiArIHRlc3ROYW1lICsgV1NETF9FWFRFTlNJT047Ci0gICAgICAKLSAgICAgIC8vIHZhbGlkYXRlIHRoZSBtZXNzYWdlIGxvZyBkb2N1bWVudAotICAgICAgTWVzc2FnZUFuYWx5emVyIGFuYWx5emVyID0gdmFsaWRhdGVDb25mb3JtYW5jZVdpdGhXU0RMKG1lc3NhZ2VMb2dGaWxlLCB3c2RsRmlsZSwgV1NEYXRhKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVua25vd24gcHJvYmxlbXMgZHVyaW5nIHZhbGlkYXRpb24iLCBhbmFseXplcik7Ci0KLSAgICAgIC8vIHJldHJpZXZlIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgIExpc3QgZXhwZWN0ZWRFcnJvcnMgPSBnZXRFeHBlY3RlZEFzc2VydGlvbkZhaWx1cmVzKHRlc3RjYXNlRmlsZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCi0gICAgICAvLyBjb21wYXJlIHRoZSBhY3R1YWwgZXJyb3JzIHdpdGggdGhlIGV4cGVjdGVkIGVycm9ycwotICAgICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGxvZyB3aXRoIGEgV1NETCBmaWxlCi0gICAqIEBwYXJhbSB3c2RsRmlsZSBVUkkgb2YgdGhlIFdTREwgZmlsZQotICAgKiBAcGFyYW0gV1NEYXRhIFN0cmluZyBhcnJheSBjb250YWluaW5nOiBlbGVtZW50bmFtZSwgbmFtZXNwYWNlLCBwYXJlbnRuYW1lLCB0eXBlCi0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgbmFtZSBvZiB0aGUgbG9nIGFuZCB3c2RsIGZpbGUgKHRoZXkgc2hvdWxkIGJlIGxvY2F0ZWQgaW4gdGhlIGxvZyBhbmQgd3NkbCBwYXRocyByZXNwZWN0aXZlbHkpCi0gICAqIEByZXR1cm4gdGhlIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsaWRhdGlvbiByZXN1bHRzCi0gICAqLyAgCi0KLQlwcm90ZWN0ZWQgTWVzc2FnZUFuYWx5emVyIHZhbGlkYXRlQ29uZm9ybWFuY2VXaXRoV1NETChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB3c2RsRmlsZSwgU3RyaW5nW10gV1NEYXRhKSB7Ci0JICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotCSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKCBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNUT1BfTk9OX1dTSSk7Ci0JICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKGdldFRBRFVSSSh0YWRJRCkpOwotCQotCSAgICAgICAgYW5hbHl6ZXIgPSBuZXcgTWVzc2FnZUFuYWx5emVyKGZpbGVuYW1lLCB3c2RsRmlsZSwgV1NEYXRhWzBdLCAgV1NEYXRhWzFdLCBXU0RhdGFbMl0sIFdTRGF0YVszXSwgcHJlZmVyZW5jZXMpOwotCQotCSAgICAgICAgLy8gcnVuIHRoZSBjb25mb3JtYW5jZSBjaGVjayBhbmQgYWRkIGVycm9ycyBhbmQgd2FybmluZ3MgYXMgbmVlZGVkCi0JICAgICAgICBhbmFseXplci52YWxpZGF0ZUNvbmZvcm1hbmNlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICByZXR1cm4gbnVsbDsKLQkgICAgfQkKLQkgICAgcmV0dXJuIGFuYWx5emVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlV1NETENvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlV1NETENvbmZvcm1hbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODMzODRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTRExBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMUmVhZGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgQ29yZVdTRExDb25mb3JtYW5jZVRlc3QgZXh0ZW5kcyBDb3JlQ29uZm9ybWFuY2VUZXN0IAotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0JBU0VfRElSRUNUT1JZID0gInRlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9FWFRFTlNJT04gPSAiLndzZGwiOwotCi0gIHB1YmxpYyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdChTdHJpbmcgbmFtZSkgCi0gIHsKLSAgICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEpVbml0IHRlc3Q6IHZhbGlkYXRlIHRoZSB3c2RsIGRvY3VtZW50IGFnYWluc3QgdGhlIHNwZWNpZmllZCBXUy1JIFByb2ZpbGUuCi0gICAqIEBwYXJhbSB0YWQgaGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudAotICAgKiBAcGFyYW0gdGVzdE5hbWUgdGhlIG5hbWUgb2YgdGhlIHRlc3QgY29udGFpbmluZyB0aGUgd3NkbCBkb2N1bWVudAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdChTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyB0ZXN0TmFtZSwgU3RyaW5nIHRhZElEKQotICB7CQotCXRoaXMudGFkSUQgPSB0YWRJRDsKLQotICAgIGFzc2VydE5vdE51bGwoIlByb2JsZW1zIGRldGVybWluaW5nIGJhc2UgdXJsIiwgcGx1Z2luVVJJKTsKLSAgICBTdHJpbmcgdGVzdERpcmVjdG9yeSAgPSBwbHVnaW5VUkkgKyBXU0RMX0JBU0VfRElSRUNUT1JZICsgIi8iICsgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZTsKLSAgICBTdHJpbmcgd3NkbEZpbGUgPSAiZmlsZTovLyIgKyB0ZXN0RGlyZWN0b3J5ICsgIi8iICsgdGVzdE5hbWUgKyBXU0RMX0VYVEVOU0lPTjsKLSAgICBTdHJpbmcgdGVzdGNhc2VGaWxlID0gdGVzdERpcmVjdG9yeSArICAiLyIgKyBURVNUX0NBU0VfRklMRTsKLSAgICAKLQkvLyB2YWxpZGF0ZSB0aGUgV1NETCBkb2N1bWVudAotICAgIFdTRExBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2Uod3NkbEZpbGUsIHRhZElEKTsKLSAgICBhc3NlcnROb3ROdWxsKCJVbmtub3duIHByb2JsZW1zIGR1cmluZyB2YWxpZGF0aW9uIiwgYW5hbHl6ZXIpOwotICAgIAotCS8vIHJldHJpZXZlIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMKLQlMaXN0IGV4cGVjdGVkRXJyb3JzID0gZ2V0RXhwZWN0ZWRBc3NlcnRpb25GYWlsdXJlcyh0ZXN0Y2FzZUZpbGUpOwotCWFzc2VydE5vdE51bGwoIlByb2JsZW1zIHJldHJpZXZpbmcgZXhwZWN0ZWQgZmFpbHVyZXMiLCBleHBlY3RlZEVycm9ycyk7Ci0JCi0JLy8gY29tcGFyZSB0aGUgYWN0dWFsIGVycm9ycyB3aXRoIHRoZSBleHBlY3RlZCBlcnJvcnMKLSAgICBhbmFseXplUmVzdWx0cyhhbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKSwgZXhwZWN0ZWRFcnJvcnMpOwotICB9ICAgIAotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkICB0aGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICogQHJldHVybiB0aGUgV1NETEFuYWx5emVyIG9iamVjdCBjb250YWluaW5nIHRoZSB2YWxpZGF0aW9uIHJlc3VsdHMKLSAgICovICAKLSAgcHJvdGVjdGVkIFdTRExBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRhZElEKQotICB7Ci0JV1NETEFuYWx5emVyIGFuYWx5emVyID0gbnVsbDsKLSAgICB0cnkgCi0gICAgewotICAgCSAgV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgIAkgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotCSAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShnZXRUQURVUkkodGFkSUQpKTsKLQkJCi0JICBhbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIoZmlsZW5hbWUsIHByZWZlcmVuY2VzKTsKLQkgIHNldENvbmZpZ3VyYXRpb25zKGZpbGVuYW1lLCBhbmFseXplcik7Ci0JCQotCSAgLy8gcnVuIHRoZSBjb25mb3JtYW5jZSBjaGVjayBhbmQgYWRkIGVycm9ycyBhbmQgd2FybmluZ3MgYXMgbmVlZGVkCi0JICBhbmFseXplci52YWxpZGF0ZUNvbmZvcm1hbmNlKCk7Ci0gICAgfSAgICAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQkKLQlyZXR1cm4gYW5hbHl6ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHYXRoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBXU0RMIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSB0aGUgd3NkbCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGEgV1NETEFuYWx5emVyIG9iamVjdCBjb250YWluZyBjb25maWd1cmF0aW9uIGluZm8uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRDb25maWd1cmF0aW9ucyhTdHJpbmcgZmlsZW5hbWUsIFdTRExBbmFseXplciBhbmFseXplcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotCi0gICAgICAvLyBTZXQgZmVhdHVyZXMKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgZmFsc2UpOwotICAgICAgd3NkbFJlYWRlci5zZXRGZWF0dXJlKGNvbS5pYm0ud3NkbC5Db25zdGFudHMuRkVBVFVSRV9JTVBPUlRfRE9DVU1FTlRTLCB0cnVlKTsKLQotICAgICAgLy8gUGFyc2UgdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudChmaWxlbmFtZSk7Ci0JICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKGZpbGVuYW1lLCBkb2N1bWVudCk7Ci0gICAgICAvL0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHJlYWRlci5yZWFkV1NETChmaWxlbmFtZSk7Ci0KLQkgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCi0JICAvLyBnZXQgYWxsIHRoZSBjb2xsZWN0aW9ucyB3ZSBtYXkgbmVlZCB0byB2YWxpZGF0ZQotCSAgQ29sbGVjdGlvbiBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKTsKLQkgIENvbGxlY3Rpb24gYmluZGluZ3MgPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkudmFsdWVzKCk7Ci0JICBDb2xsZWN0aW9uIHBvcnRUeXBlcyA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCk7Ci0JICBDb2xsZWN0aW9uIG1lc3NhZ2VzID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpOwotCi0JICAvLyBUaGUgV1MtSSBjb25mb3JtYW5jZSB0b29scyByZXF1aXJlIHRoYXQgZWFjaCBzZXJ2aWNlIGJlIGFuYWx5emVkIHNlcGFyYXRlbHkuCi0JICAvLyBHZXQgYWxsIHRoZSBzZXJ2aWNlcyBhbmQgYW5hbHl6ZSB0aGVtLgotCSAgaWYgKHNlcnZpY2VzICE9IG51bGwgJiYgIXNlcnZpY2VzLmlzRW1wdHkoKSkKLQkgIHsKLQkgICAgSXRlcmF0b3Igc2VydmljZUl0ZXJhdG9yID0gc2VydmljZXMuaXRlcmF0b3IoKTsKLQotCSAgICB3aGlsZSAoc2VydmljZUl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgewotCSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2aWNlSXRlcmF0b3IubmV4dCgpOwotCi0JICAgICAgU3RyaW5nIHNlcnZpY2VuYW1lID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0JICAgICAgQ29sbGVjdGlvbiBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKTsKLQkgICAgICBpZiAocG9ydHMgIT0gbnVsbCAmJiAhcG9ydHMuaXNFbXB0eSgpKQotCSAgICAgIHsKLQkgICAgICAgIC8vIFRoZSBXUy1JIHRvb2xzIG11c3QgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcG9ydCB3aXRoaW4gZWFjaCBzZXJ2aWNlLgotCSAgICAgICAgSXRlcmF0b3IgcG9ydEl0ZXJhdG9yID0gcG9ydHMuaXRlcmF0b3IoKTsKLQkgICAgICAgIHdoaWxlIChwb3J0SXRlcmF0b3IuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgcG9ydEl0ZXJhdG9yLm5leHQoKTsKLQkJCSAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChzZXJ2aWNlbmFtZSwgbmFtZXNwYWNlLCBwb3J0LmdldE5hbWUoKSwgV1NETEFuYWx5emVyLlBPUlQpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgYmluZGluZyBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBiaW5kaW5nCi0JICAgICAgZWxzZSBpZiAoYmluZGluZ3MgIT0gbnVsbCAmJiAhYmluZGluZ3MuaXNFbXB0eSgpKQotCSAgICAgIHsKLQkgICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdJdGVyYXRvciA9IGJpbmRpbmdzLml0ZXJhdG9yKCk7Ci0KLQkgICAgICAgIHdoaWxlIChiaW5kaW5nSXRlcmF0b3IuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgYmluZGluZ0l0ZXJhdG9yLm5leHQoKTsKLQkgICAgICAgICAgU3RyaW5nIGJpbmRpbmduYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICBhbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KG51bGwsIG5hbWVzcGFjZSwgYmluZGluZ25hbWUsIFdTRExBbmFseXplci5CSU5ESU5HKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIHBvcnRUeXBlIGxldmVsIC0gY2hlY2sgZm9yIGV2ZXJ5IHBvcnRUeXBlCi0JICAgICAgZWxzZSBpZiAocG9ydFR5cGVzICE9IG51bGwgJiYgIXBvcnRUeXBlcy5pc0VtcHR5KCkpCi0JICAgICAgewotCSAgICAgICAgSXRlcmF0b3IgcG9ydFR5cGVJdGVyYXRvciA9IHBvcnRUeXBlcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUgKHBvcnRUeXBlSXRlcmF0b3IuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgcG9ydFR5cGVJdGVyYXRvci5uZXh0KCk7Ci0JICAgICAgICAgIFN0cmluZyBwb3J0VHlwZW5hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICBhbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KG51bGwsIG5hbWVzcGFjZSwgcG9ydFR5cGVuYW1lLCBXU0RMQW5hbHl6ZXIuUE9SVFRZUEUpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgbWVzc2FnZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBtZXNzYWdlCi0JICAgICAgZWxzZSBpZiAobWVzc2FnZXMgIT0gbnVsbCAmJiAhbWVzc2FnZXMuaXNFbXB0eSgpKQotCSAgICAgIHsKLQkgICAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyYXRvciA9IG1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0JICAgICAgICB3aGlsZSAobWVzc2FnZUl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NhZ2VJdGVyYXRvci5uZXh0KCk7Ci0JICAgICAgICAgIFN0cmluZyBtZXNzYWdlbmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIG1lc3NhZ2VuYW1lLCBXU0RMQW5hbHl6ZXIuTUVTU0FHRSk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0gICAgfQotCWNhdGNoIChFeGNlcHRpb24gZSkKLQl7Ci0gICAgICBmYWlsKCJVbmV4cGVjdGVkIHByb2JsZW1zIHNldHRpbmcgY29uZmlndXJhdGlvbnMiKTsKLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlQVBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMThkMzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlQVBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0KLS8qKgotICogSlVuaXQgdGVzdHMgdGhhdCB0ZXN0IG1lc3NhZ2UgbG9ncyBhZ2FpbnN0IHRoZSBXUy1JIEF0dGFjaG1lbnRzIHByb2ZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QgZXh0ZW5kcyBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlQVBUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTMwOV8xKCkgeyBydW5UZXN0KCJicCIsICIxMzA5LTEiLCBUQURfSURfQVApOyB9IAotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTMwOV8yKCkgeyBydW5UZXN0KCJicCIsICIxMzA5LTIiLCBUQURfSURfQVApOyB9IAotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTYwMF8xKCkgeyBydW5UZXN0KCJicCIsICIxNjAwLTEiLCBUQURfSURfQVApOyB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzliMzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdCBleHRlbmRzIENvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9HX0ZJTEVOQU1FID0gImxvZy53c2ltc2ciOwotCQotICAgIHB1YmxpYyBNZXNzYWdlTG9nQ29uZm9ybWFuY2VTT0FQMTJUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RfU09BUCgpIHsgcnVuVGVzdFdpdGhXU0RMKCJTT0FQMTIiLCAiU2ltcGxlTG9nIiwgbmV3IFN0cmluZ1tdIHsiSGVsbG8iLCAiaHR0cDovL3Rlc3QvIiwgIkhlbGxvU2VydmljZSIsICJwb3J0In0pOyB9IAotCi0gICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzOTI3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0KLS8qKgotICogSlVuaXQgdGVzdHMgdGhhdCB0ZXN0IG1lc3NhZ2UgbG9ncyBhZ2FpbnN0IHRoZSBXUy1JIFNpbXBsZSBTb2FwIEJpbmRpbmcKLSAqIHByb2ZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlTG9nQ29uZm9ybWFuY2VTU0JQVGVzdCBleHRlbmRzCi0gICAgICAgIENvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0IHsKLQotICAgIHB1YmxpYyBNZXNzYWdlTG9nQ29uZm9ybWFuY2VTU0JQVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdGVzdF8xMzA5XzEoKSB7IHJ1blRlc3QoImJwIiwgIjEzMDktMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMigpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0yIiwgVEFEX0lEX1NTQlApOyB9IAotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTYwMF8xKCkgeyBydW5UZXN0KCJicCIsICIxNjAwLTEiLCBUQURfSURfU1NCUCk7IH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU2VjdXJlV1NUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzNjMGQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU2VjdXJlV1NUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0KLS8qKgotICogSlVuaXQgdGVzdHMgdGhhdCB0ZXN0IG1lc3NhZ2UgbG9ncyBhZ2FpbnN0IHRoZSBXUy1JIEF0dGFjaG1lbnRzIHByb2ZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlTG9nQ29uZm9ybWFuY2VTZWN1cmVXU1Rlc3QgZXh0ZW5kcyBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPR19GSUxFTkFNRSA9ICJsb2cud3NpbXNnIjsKLQkKLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU2VjdXJlV1NUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RfU2VjdXJlV1NfTm9TZWN1cml5KCkgeyBydW5UZXN0V2l0aFdTREwoIlNlY3VyZVdTIiwgIk5vU2VjdXJpdHkiLCBuZXcgU3RyaW5nW10geyJXZWJTZXJ2aWNlIiwgImh0dHA6Ly9tYWluIiwgIldlYlNlcnZpY2VTZXJ2aWNlIiwgInBvcnQifSk7IH0gCi0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NlY3VyZVdTX1NpZ25hdHVyZSgpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJTaWduYXR1cmUiLCBuZXcgU3RyaW5nW10geyJXZWJTZXJ2aWNlIiwgImh0dHA6Ly9tYWluIiwgIldlYlNlcnZpY2VTZXJ2aWNlIiwgInBvcnQifSk7IH0gCi0gICAgCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19FbmNyeXB0aW9uKCkgeyBydW5UZXN0V2l0aFdTREwoIlNlY3VyZVdTIiwgIkVuY3J5cHRpb24iLCBuZXcgU3RyaW5nW10geyJXZWJTZXJ2aWNlIiwgImh0dHA6Ly9tYWluIiwgIldlYlNlcnZpY2VTZXJ2aWNlIiwgInBvcnQifSk7IH0KLSAgICAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NlY3VyZVdTX1NpZ25hdHVyZUFuZEVuY3J5cHRpb24oKSB7IHJ1blRlc3RXaXRoV1NETCgiU2VjdXJlV1MiLCAiU2lnbmF0dXJlQW5kRW5jcnlwdGlvbiIsIG5ldyBTdHJpbmdbXSB7IldlYlNlcnZpY2UiLCAiaHR0cDovL21haW4iLCAiV2ViU2VydmljZVNlcnZpY2UiLCAicG9ydCJ9KTsgfSAKLSAgICAKLQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9SZWdyZXNzaW9uQnVja2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMDM0ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9SZWdyZXNzaW9uQnVja2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgcnVucyBhbGwgb2YgdGhlIHRlc3RzIGltcGxlbWVudGVkIAotICogaW4gdGhpcyBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgUmVncmVzc2lvbkJ1Y2tldCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQkgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIAotCSAgewotCSAgICBUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlJlZ3Jlc3Npb24gQnVja2V0Iik7Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEUpKSB7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShXU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdC5jbGFzcykpOwotICAgICAgICB9Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKSkgewotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoV1NETENvbmZvcm1hbmNlQVBUZXN0LmNsYXNzKSk7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShNZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgfQotCSAgICAKLQkgICAgc3VpdGUuYWRkVGVzdChuZXcgVGVzdFN1aXRlKEJhc2ljUHJvZmlsZUFuYWx5emVyVGVzdC5jbGFzcykpOwotCSAgICAKLQkgICAgcmV0dXJuIHN1aXRlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGFkSXNBdmFpbGFibGUoU3RyaW5nIHRhZFVSSSkKLQkgIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwodGFkVVJJKTsKLQkJICBpcyA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCSAgaXMuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkgIHJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTRExDb25mb3JtYW5jZUFQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzU4M2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qIAotKiBDb250cmlidXRvcnM6Ci0qICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCB3c2RsIGRvY3VtZW50cyBhZ2FpbnN0IAotICogdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29uZm9ybWFuY2VBUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0vL3dzLWkgd3NkbHMKLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9vaygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rIiwgVEFEX0lEX0FQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rX3JwYygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rLXJwYyIsIFRBRF9JRF9BUCk7IH0KLSAvLyBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwTWFudWZhY3R1cmVyKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwTWFudWZhY3R1cmVyIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwV2FyZWhvdXNlKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwV2FyZWhvdXNlIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDEzXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTMtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yNDA2XzEoKSB7IHJ1blRlc3QoImJwIiwgIjI0MDYtMSIsIFRBRF9JRF9BUCk7IH0KLQotICAvLyBhcCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzI5NDFfMSgpIHsgcnVuVGVzdCgiYXAiLCAiMjk0MS0xIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyByZWR1bmRhbnQgdGVzdHMgLS0gYXNzZXJ0aW9ucyBmYWlsdXJlcyBjYXVnaHQgYnkgYmFzZSB3c2RsIHZhbGlkYXRvci4KLSAgcHVibGljIHZvaWQgdGVzdF8yMDEwXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDEwLTEiLCBUQURfSURfQVApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIC8vcHVibGljIHZvaWQgdGVzdF8yMDExXzQoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTQiLCBUQURfSURfQVApOyB9IAotICAvL3B1YmxpYyB2b2lkIHRlc3RfMjAxMV81KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS01IiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMiIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8zKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0zIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzQoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTQiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNSIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV82KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS02IiwgVEFEX0lEX0FQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMSIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMl8yKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMi0yIiwgVEFEX0lEX0FQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMSIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAzMl8yKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAzMi0yIiwgVEFEX0lEX0FQKTsgfSAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTRExDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTRExDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkY2Y3MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotLyoqCi0gKiBKVW5pdCB0ZXN0cyB0aGF0IHRlc3Qgd3NkbCBkb2N1bWVudHMgYWdhaW5zdCAKLSAqIHRoZSBXUy1JIFNpbXBsZSBTb2FwIEJpbmRpbmcgcHJvZmlsZS4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29uZm9ybWFuY2VTU0JQVGVzdCBleHRlbmRzIENvcmVXU0RMQ29uZm9ybWFuY2VUZXN0IAotewotICBwdWJsaWMgV1NETENvbmZvcm1hbmNlU1NCUFRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotICAvLyB3cy1pIHdzZGxzCi0gIHB1YmxpYyB2b2lkIHRlc3RfYWRkcmVzc0Jvb2soKSB7IHJ1blRlc3QoIndzaSIsICJhZGRyZXNzQm9vayIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rX3JwYygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rLXJwYyIsIFRBRF9JRF9TU0JQKTsgfQotICAvL3B1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwQ2F0YWxvZygpIHsgcnVuVGVzdCgid3NpIiwgInNhbXBsZUFwcENhdGFsb2ciLCBUQURfSURfU1NCUCk7IH0gIAotICBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcE1hbnVmYWN0dXJlcigpIHsgcnVuVGVzdCgid3NpIiwgInNhbXBsZUFwcE1hbnVmYWN0dXJlciIsIFRBRF9JRF9TU0JQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwV2FyZWhvdXNlKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwV2FyZWhvdXNlIiwgVEFEX0lEX1NTQlApOyB9IAotCi0gIC8vIGJwIHRlc3RzCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMl8xKCkgeyBydW5UZXN0KCJicCIsICIyMDEyLTEiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxM18xKCkgeyBydW5UZXN0KCJicCIsICIyMDEzLTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTRfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjAxNC0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxNF8zKCkgeyBydW5UZXN0KCJicCIsICIyMDE0LTMiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTdfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjAxNy0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOF8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE4LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOF80KCkgeyBydW5UZXN0KCJicCIsICIyMDE4LTQiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTlfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOS0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV8zKCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTMiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktNCIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAyMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMF8yKCkgeyBydW5UZXN0KCJicCIsICIyMDIwLTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIxMDVfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjEwNS0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjExN18xKCkgeyBydW5UZXN0KCJicCIsICIyMTE3LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIxMTdfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjExNy0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjQwNl8xKCkgeyBydW5UZXN0KCJicCIsICIyNDA2LTEiLCBUQURfSURfU1NCUCk7IH0KLQotICAvLyByZWR1bmRhbnQgdGVzdHMgLS0gYXNzZXJ0aW9ucyBmYWlsdXJlcyBjYXVnaHQgYnkgYmFzZSB3c2RsIHZhbGlkYXRvci4KLSAgcHVibGljIHZvaWQgdGVzdF8yMDEwXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDEwLTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTEiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8yKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0yIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMyIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgLy9wdWJsaWMgdm9pZCB0ZXN0XzIwMTFfNCgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtNCIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgLy9wdWJsaWMgdm9pZCB0ZXN0XzIwMTFfNSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtNSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8zKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0zIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNCgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNCIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV82KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS02IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMl8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTIiLCBUQURfSURfU1NCUCk7IH0gCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZmYzZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0lUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0qLwotcHVibGljIGNsYXNzIFdTSVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotIHByaXZhdGUgc3RhdGljIFdTSVRlc3RzUGx1Z2luIHBsdWdpbjsKLSBwcml2YXRlIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlID0gbnVsbDsKLQotIC8qKgotICAqIFRoZSBjb25zdHJ1Y3Rvci4KLSAgKi8KLSBwdWJsaWMgV1NJVGVzdHNQbHVnaW4oKQotIHsKLSAgIHN1cGVyKCk7Ci0gICBwbHVnaW4gPSB0aGlzOwotIH0KLQotIC8qKgotICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotICAqLwotIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotIHsKLSAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCXBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gfQotCi0gLyoqCi0gICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAqLwotIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gewotICAgc3VwZXIuc3RvcChjb250ZXh0KTsKLSB9Ci0KLSAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0gICovCi0gcHVibGljIHN0YXRpYyBXU0lUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSB7Ci0gICByZXR1cm4gcGx1Z2luOwotIH0KLSAKLSAvKioKLSAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAqIAotICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICovCi0gcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gewotICAgdHJ5Ci0gICB7Ci0gICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgewotICAgICByZXR1cm4gbnVsbDsKLSAgIH0KLSB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJlOGFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0JCQotCQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIi8+Ci0JCTxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIAk8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5SZWdyZXNzaW9uQnVja2V0IiAvPgotICAgCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWYxMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy9TaW1wbGVMb2cud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAzOjQwLjUzMiIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAyOjU4LjM0MloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtuczI6aGVsbG8geG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7YXJnMCZndDtnYWJlJmx0Oy9hcmcwJmd0OyZsdDsvbnMyOmhlbGxvJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgxPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL3RkMTIvSGVsbG9TZXJ2aWNlIEhUVFAvMS4xJiN4ZDsKLUhvc3Q6IGxvY2FsaG9zdDo5MDgxJiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsbXVsdGlwYXJ0L3JlbGF0ZWQsdGV4dC8qJiN4ZDsKLVVzZXItQWdlbnQ6IElCTSBXZWJTZXJ2aWNlcy8xLjAmI3hkOwotQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUmI3hkOwotUHJhZ21hOiBuby1jYWNoZSYjeGQ7Ci1TT0FQQWN0aW9uOiAmcXVvdDsmcXVvdDsmI3hkOwotQ29ubmVjdGlvbjogS2VlcC1BbGl2ZSYjeGQ7Ci1Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NvYXAreG1sOyBjaGFyc2V0PVVURi04JiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiAyNTgmI3hkOwotRGF0ZTogV2VkLCAyNCBKYW4gMjAwNyAxODowMjo1NyBHTVQmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIyIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVzcG9uc2UiIHRpbWVzdGFtcD0iMjAwNy0wMS0yNFQxMzowMjo1OC40NzJaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7bnMyOmhlbGxvUmVzcG9uc2UgeG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7cmV0dXJuJmd0O0hlbGxvLCBnYWJlISZsdDsvcmV0dXJuJmd0OyZsdDsvbnMyOmhlbGxvUmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODE8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc29hcCt4bWw7IGNoYXJzZXQ9VVRGLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotU2V0LUNvb2tpZTogSlNFU1NJT05JRD0wMDAwNXpGTVdZVXdHbHRMYS1qTnVOYXh3cTM6LTE7IFBhdGg9LyYjeGQ7Ci1UcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCYjeGQ7Ci1EYXRlOiBXZWQsIDI0IEphbiAyMDA3IDE4OjAyOjU3IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLUV4cGlyZXM6IFRodSwgMDEgRGVjIDE5OTQgMTY6MDA6MDAgR01UJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlPSZxdW90O3NldC1jb29raWUsIHNldC1jb29raWUyJnF1b3Q7JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NPQVAxMi9TaW1wbGVMb2cvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjEyZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgCTxhc3NlcnRpb24gaWQ9IkJQMTIwMSIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDE2MDAiIHRhZElEPSJBUDEwIi8+Ci0JCi0JPGFzc2VydGlvbiBpZD0iQlAxMjAxIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTYwMCIgdGFkSUQ9IkFQMTAiLz4KLQkKLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0KLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0JCi0KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL0VuY3J5cHRpb24ud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTg2MDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTI6MTU6NTguMzI1IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSJwd2kzMmRldi0yMDA2MTAwMmEgKFNSMykiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iV2luZG93cyBYUCIgdmVyc2lvbj0iNS4xIGJ1aWxkIDI2MDAgU2VydmljZSBQYWNrIDIiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC40LjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTA6NDc6MzAuNjUzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyZxdW90OyB4bWxuczpzb2FwZW5jPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsgeG1sbnM6d3NhPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0O3dzc2U6U2VjdXJpdHkgc29hcGVudjptdXN0VW5kZXJzdGFuZD0mcXVvdDsxJnF1b3Q7IHhtbG5zOndzc2U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0ZWRLZXkgeG1sbnM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyc2EtMV81JnF1b3Q7LyZndDsmbHQ7ZHM6S2V5SW5mbyB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6S2V5SWRlbnRpZmllciBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDlTdWJqZWN0S2V5SWRlbnRpZmllciZxdW90OyZndDsvNjJ3WE9iRUQ3ejZjMXlYN1Frdk4xdGhRZFk9Jmx0Oy93c3NlOktleUlkZW50aWZpZXImZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDtqcWRvZUtFS0txWGdRbnZXekRPL1d5SFBiMzVVWVdSenp3eVhBdlNIRllUaGczTzhZTTdIYmZZRjVKVUF2ODliaWk4SHVULzUyb0VYUnZMT2RBRklQVWxZRTBuUlNIK0pDYi90aW4rM1hEbHFtMEhTYi9wanp4S0cwNzRsbGNIZnR2Unpoc0oyUitDU3pYaTlwQ294R1ZUYkxSOU1oY3NXeDFpL1Z2RFBMWkU9Jmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0O1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0O0RhdGFSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMCZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2luY3JlbWVudCZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzAmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O3ZkVTQyc09vNi9XdjFWM3JvTUlWcGJKdXZnc0lFeDZtT3dsTldEcnI4amdrS3Y2NVZCQ3YyV0lNQVN3SFpWTFpaQXFKNHpnaUVWOXJwQ1hzN1FqKzhHTWZtVlI5VlpZdktLNWo1SEV2MXhiekIwSFBPc2E1QkE9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMTg3MSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDE1OjQ3OjMwIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDEwOjQ3OjMxLjA3NFoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7UFZVTzBhZmRBdU9ZRlAxbk12ZXpQNlVxWTRySW84M3hQR0o0clcrczdOa1BPSGRFckQvdG1idGJHOHVYQXllVDRpTFhNL0syK2ZTeWxuaThHRmlKWmt4b3owOGtNRWQxOS82YWVhZmJBMGl6VTlEVkFVS1JNL2VoQ2cyS0NZaTJ3WGhRYWpZZmtRdUZNR3VtQTlWS1Znclk3TmR1N2YvWWMvcG1JV3RRL3NvPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsvJmd0OyZsdDsvUmVmZXJlbmNlTGlzdCZndDsmbHQ7L0VuY3J5cHRlZEtleSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcvYW5vbnltb3VzJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aHR0cDovL21haW4vV2ViU2VydmljZS9pbmNyZW1lbnRSZXNwb25zZSZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc3Njc4LTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7d3NhOlJlbGF0ZXNUbyZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOlJlbGF0ZXNUbyZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O1JEU1M5THBrcEl1NWxXT1pyK2hmc0V6Tm91bGpENi9OUklmc1lQSDBYQ3R3cG9tNGFuL2daUzF2bDV1OXI1RFpVdXErV3BTSk9wZThOczltcVpsakNGSnZWbU1MR2Ira0MzaWc3akVKQ3ZicWM3OHFESVFDbWdMUE9yY2wxUTBaU2xoMjVBeDczZGU0SFdXT1BKUWpLUEhaWW9wY1U4TUsmbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7L0VuY3J5cHRlZERhdGEmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotQ29udGVudC1MZW5ndGg6IDE5OTQmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAxNTo0NzozMCBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTk1ODA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvTm9TZWN1cml0eS9Ob1NlY3VyaXR5LndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjOTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE0OjA2LjAwNSIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjgzNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL2xvY2FsaG9zdDo5MDgyL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudCB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDt2YWx1ZSZndDsxJmx0Oy92YWx1ZSZndDsmbHQ7L3A2MTk6aW5jcmVtZW50Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UgSFRUUC8xLjEmI3hkOwotSG9zdDogbG9jYWxob3N0OjkwODAmI3hkOwotQWNjZXB0OiBhcHBsaWNhdGlvbi9zb2FwK3htbCxtdWx0aXBhcnQvcmVsYXRlZCx0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogSUJNIFdlYlNlcnZpY2VzLzEuMCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90O2luY3JlbWVudCZxdW90OyYjeGQ7Ci1Db25uZWN0aW9uOiBLZWVwLUFsaXZlJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MZW5ndGg6IDYyMiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjEzOjUyIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjk3NloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUY1MC0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudFJlc3BvbnNlIHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O2luY3JlbWVudFJldHVybiZndDsyJmx0Oy9pbmNyZW1lbnRSZXR1cm4mZ3Q7Jmx0Oy9wNjE5OmluY3JlbWVudFJlc3BvbnNlJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA3NDUmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAyMzoxMzo1MiBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmVmZGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlL1NpZ25hdHVyZS53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMDVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODozOC41MjQiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODoyNi4wMDZaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMTYmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O2RITkNpRWNxeFhZU0RyYkJrM2FoQ2F0endLZz0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7TzZtaVE5bDZhbVduYVdpNVZXeG9nd3k2R0pLTVN1ZG1oczQxNy9xR085eVp2QXRjR3hwQUhJckVPV3pFL010L3BGTUgzbFVLbFJXMTNLdkdsbVJVdU1xTXJka3BFaEQ1dGdDUVpBclQwWFdFYVVaZWsrTW1tZk1oQ25COGFBbEVwVElhUmNXcC8wUm5OZEpYb3preWpib1Q3b3VVU0lKTi9LdG1CaE1XbGtnPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzE2JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZS9zZXJ2aWNlcy9XZWJTZXJ2aWNlJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aW5jcmVtZW50Jmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQyQjIxQkMtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3A2MTk6aW5jcmVtZW50IHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O3ZhbHVlJmd0OzEmbHQ7L3ZhbHVlJmd0OyZsdDsvcDYxOTppbmNyZW1lbnQmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+UE9TVCAvV2ViUHJvamVjdFdpdGhTaWduYXR1cmUvc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzY3MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjA4OjI2LjEyNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8xOCZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3NlIGRzICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCZndDsmbHQ7ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEmcXVvdDsvJmd0OyZsdDtkczpSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyZndDsmbHQ7ZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3N1IHA2MTkgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm0mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJnF1b3Q7LyZndDsmbHQ7ZHM6RGlnZXN0VmFsdWUmZ3Q7dG9IRDI1bmcrTFU0L1RKVm5YU3c0cXFZZk9nPSZsdDsvZHM6RGlnZXN0VmFsdWUmZ3Q7Jmx0Oy9kczpSZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpTaWduZWRJbmZvJmd0OyZsdDtkczpTaWduYXR1cmVWYWx1ZSZndDtrNlYwSjNyVmFJTjV6a3JrbE5ObHpBc2xMZGJJNHBJSWJCWGg0TDhvaDQ3N1VScElXOWsxUXAzY2NhYUdFb0phemVvZ3lxOFlxV0dsaUpEMGY1cWZaejdvQnE2QlJpMkp4QjYzRXoxSXhmWG0wdUJaUk5SR3g5SVZwZEEweTRpVnlGaUFnVVI1ZTdjSlR5L1h1bjd0THFtTjNYckdIMGR2ZHFGVE9LemkvV3M9Jmx0Oy9kczpTaWduYXR1cmVWYWx1ZSZndDsmbHQ7ZHM6S2V5SW5mbyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3g1MDlic3RfMTgmcXVvdDsgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5JnF1b3Q7LyZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0Oy9kczpTaWduYXR1cmUmZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5Jmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDJCMjI3QS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDJCMjFCQy0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7cDYxOTppbmNyZW1lbnRSZXNwb25zZSB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDtpbmNyZW1lbnRSZXR1cm4mZ3Q7MiZsdDsvaW5jcmVtZW50UmV0dXJuJmd0OyZsdDsvcDYxOTppbmNyZW1lbnRSZXNwb25zZSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MjwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5IVFRQLzEuMSAyMDAgT0smI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxhbmd1YWdlOiBlbi1VUyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzc5MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDhiODhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iRW5jcnlwdGlvbiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggc2lnbmF0dXJlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZUFuZEVuY3J5cHRpb24vU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTYzMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoyMDowOS44NzgiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoxOTo1OC4wNjFaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMjAmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O0VuY3J5cHRlZEtleSB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUmcXVvdDsvJmd0OyZsdDtkczpLZXlJbmZvIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpLZXlJZGVudGlmaWVyIFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOVN1YmplY3RLZXlJZGVudGlmaWVyJnF1b3Q7Jmd0Oy82MndYT2JFRDd6NmMxeVg3UWt2TjF0aFFkWT0mbHQ7L3dzc2U6S2V5SWRlbnRpZmllciZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2d1dUFySWdLMjBaUWtsc05rY2oxWHphQ21TdGcrMHJ4NTl0ZXVEMnBFQVhlUnZLYkNUemtmZ2xSdlg4Q24vRGlUQllOZXhiTmh2T2xqWC9zdWU1VUtKQTVKc21oU0Nqc3NHZnN3SmpZWFpuUmNuY0F3Q1R4Zm90dElxYXdXUUYxNjVCYXo4N3VPUjB5WTdhR2ltT0hpcEU3U05rUjVsbC84QWhtd1Y1Z0dXaz0mbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7UmVmZXJlbmNlTGlzdCZndDsmbHQ7RGF0YVJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfZW5jcnlwdGlvbl9pZF8yMSZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDtkczpTaWduYXR1cmUgeG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7ZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzc2UgZHMgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpDYW5vbmljYWxpemF0aW9uTWV0aG9kJmd0OyZsdDtkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfc2lnbmF0dXJlX2lkXzE5JnF1b3Q7Jmd0OyZsdDtkczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3UgcDYxOSAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOlRyYW5zZm9ybSZndDsmbHQ7L2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEmcXVvdDsvJmd0OyZsdDtkczpEaWdlc3RWYWx1ZSZndDtPejR6ZzFBUzlkeXBMUmt5bGxZOUlYTnRPQVU9Jmx0Oy9kczpEaWdlc3RWYWx1ZSZndDsmbHQ7L2RzOlJlZmVyZW5jZSZndDsmbHQ7L2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOlNpZ25hdHVyZVZhbHVlJmd0O0dvUkIyZUNsSGo3a240VnN5QlFZV3ZlTUZseFFGazVhb1hFL1BXRnNCQ1ZtVEd6eVJ3K0lzWm1EeHlNUFAxRXZ0NW16SUlWc2FwdDVmakZYenE1bGtLSkVRcCt0OFR2ZFJXU0lLK1VCL2pYeHVVdGttdCtaU2VLV2pjZWNSdFRadGRHb0x5MEEvMDZ4aitiQVdWNGlHNmZmTHVQMjZZaEc4WXMrcUpCNFpHVT0mbHQ7L2RzOlNpZ25hdHVyZVZhbHVlJmd0OyZsdDtkczpLZXlJbmZvJmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6UmVmZXJlbmNlIFVSST0mcXVvdDsjeDUwOWJzdF8yMCZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsvJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7L2RzOlNpZ25hdHVyZSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vbG9jYWxob3N0OjkwODIvV2ViUHJvamVjdFdpdGhTaWduYXR1cmVBbmRFbmNyeXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDM1QjEwOS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xOSZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkRGF0YSBJZD0mcXVvdDt3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMjEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2RkQWt4dHlhdWZMTGMxM2VQZTF0RFNpQ1F6K2g1SEwyUU4wZ1Y2aGM2UjNpM1dxS281Z1FCendVOEpzWldicDl2UTFWTXJRWW1lMlRZSGpzektuY0NaenhJdlNiakxaN25NT3VXRkY3QWQ4cDY3Y1dtL21QSnc9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZUFuZEVuY3J5cHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogNDc3OSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjE5OjU3IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE5OjU4LjI5MVoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8yMyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7WTFuSi9jU0h6b1FSbkZROHh5MG9Zd01BWmUrVzJqYmttV0ZNcnFHUy85OEZReHBvbnVLOVRLVlFSYjdOVTFiTXdTb05ZTW1wTmpibjNPRm13UWdWWHhzeGdGdUpIU3c3VVlYZjJjU1djZHE5QUxYTVI3TzRNT0szMktPVjM4R2dtUTRGUkdod2pwWFRwUGptUkovT0s1ZktvTmJSdHdIMmo5ZWlhcmtZd01VPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7LyZndDsmbHQ7L1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0Oy9FbmNyeXB0ZWRLZXkmZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O1NydlZ3bEtVdzdoOWd3UVZnWnR3ekhCZGUzWT0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7clJ6V3NLRGgrRkR5Rzd4b3llZDdnVUJYYWlyV0cvbk5kdkxFUjR3NS9ZZllRQWNMRlZHTU5jMjRmbDFJc1Z6RXBaZkVyWmx1NGt3WnlIanB0R0VEVlI0Tmg0Y3IrWk9KWFZtcFZPdHhPdmJKTmw0cGpMVTEvTjN3bFF5WUlHMHFCckVtRklMczNSTFdrMStYZUUyTmxLVldBbEpDREdZbU5kRXJyclpoMGtFPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzIzJnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy9hbm9ueW1vdXMmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtodHRwOi8vbWFpbi9XZWJTZXJ2aWNlL2luY3JlbWVudFJlc3BvbnNlJmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQzNUIyM0YtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDt3c2E6UmVsYXRlc1RvJmd0O3V1aWQ6MkQzNUIxMDktMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6UmVsYXRlc1RvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7IFR5cGU9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjQ29udGVudCZxdW90OyB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMmcXVvdDsvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDs3WWVFSTlDTXRqMERqcEZMeXBqQk1weFJBZ2Rtbm5xM2Q4MzIwa0J2TWhyUXViL0FIeVB3NmsxV2FqYjhJUTVuR0JmTklyQzRtMEZlaHRaWFVFU1h5alBmYlNHRjdzY09qcjF3eHpONFZBUnovdFdudVhTeVpReDZMbUo3S29wTWVxdnltZFAwM2hpaHNpRVpGSzhTTEJJYUdjbWxtQUhpJmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0Oy9FbmNyeXB0ZWREYXRhJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA0ODkwJiN4ZDsKLURhdGU6IFR1ZSwgMTYgSmFuIDIwMDcgMjM6MTk6NTcgR01UJiN4ZDsKLVNlcnZlcjogV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlci82LjEmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTwvbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MGNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJFbmNyeXB0aW9uIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIG1lc3NhZ2Ugd2l0aCBzaWduYXR1cmUgYW5kIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvMTMwOS0xLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkzNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUyOjMyLjQ4OCIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0iMS40LjIiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iTGludXgiIHZlcnNpb249IjIuNi4xNS4xIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuMy42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUxOjMwLjE5M1oiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY2MTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMTMwOS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBpcyBjb25mb3JtYW50IHRvIHJlcXVpcmVtZW50Ci0gICAgMTAxMS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi8xMzA5LTIud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODIwYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmY5Yzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjEzMDktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHdpdGggY2hpbGRyZW4gZm9sbG93aW5nIHRoZQotICAgIHNvYXA6Qm9keSBlbGVtZW50LCB0aHVzIGJyZWFraW5nIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS8xNjAwLTEud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWY2OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXIgeG1sbnM6dGVzdD0mcXVvdDtodHRwOi8vd3RwL3Rlc3QxNjAwLTEmcXVvdDsmZ3Q7Jmx0O3Rlc3Q6dGVzdEVsZW1lbnQvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xNjAwLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTM2ZDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE2MDAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggYQotICAgIGhlYWRlciBlbnRyeSB3aG9zZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBpbiB0aGUgc29hcDpoZWFkZXIgZWxlbWVudC4gIFRoaXMKLSAgICBpcyBjb25maXJtYW50IHRvIHJlcXVpcmVtZW50IDk5ODAgaW4gdGhlIEJhc2ljIFByb2ZpbGUgYnV0IGlzIGN1cnJlbnRseQotICAgIGZsYWdnZWQgYXMgYSBjb25mb3JtYW5jZSBlcnJvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni8xNDE5NjYud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDVmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMSYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9idWd6aWxsYS8xNDE5NjYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTI4MWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE0MTk2NiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgb25seSBhIHJlcXVlc3QgYW5kCi0gICAgYnJlYWtzIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0YzllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9IZWxsb1NlcnZpY2Vfc2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiB2ZXJzaW9uPSIxLjAiPgotCi0gIDx4czplbGVtZW50IHhtbG5zOm5zMT0iaHR0cDovL3Rlc3QvIiBuYW1lPSJoZWxsbyIgdHlwZT0ibnMxOmhlbGxvIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgeG1sbnM6bnMyPSJodHRwOi8vdGVzdC8iIG5hbWU9ImhlbGxvUmVzcG9uc2UiIHR5cGU9Im5zMjpoZWxsb1Jlc3BvbnNlIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvUmVzcG9uc2UiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9TaW1wbGVMb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWU4MzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXAxMj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSGVsbG9TZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LyI+Ci0gIDx0eXBlcz4KLSAgICA8eHNkOnNjaGVtYT4KLSAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiBzY2hlbWFMb2NhdGlvbj0iSGVsbG9TZXJ2aWNlX3NjaGVtYTEueHNkIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3R5cGVzPgotICA8bWVzc2FnZSBuYW1lPSJoZWxsbyI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iaGVsbG9SZXNwb25zZSI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iSGVsbG8iPgotICAgIDxvcGVyYXRpb24gbmFtZT0iaGVsbG8iPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpoZWxsbyIvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6aGVsbG9SZXNwb25zZSIvPgotICAgIDwvb3BlcmF0aW9uPgotICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJIZWxsb1BvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG8iPgotICAgIDxzb2FwMTI6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwL2JpbmRpbmdzL0hUVFAvIi8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJoZWxsbyI+Ci0gICAgICA8c29hcDEyOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXAxMjpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwMTI6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotICA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkhlbGxvU2VydmljZSI+Ci0gICAgPHBvcnQgYmluZGluZz0idG5zOkhlbGxvUG9ydEJpbmRpbmciIG5hbWU9IkhlbGxvUG9ydCI+Ci0gICAgICA8c29hcDEyOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS90ZDEyL0hlbGxvU2VydmljZSIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9Ob1NlY3VyaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxuczppbXBsPSJodHRwOi8vbWFpbiIgeG1sbnM6aW50Zj0iaHR0cDovL21haW4iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6d3NpPSJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4xL3hzZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHdzZGw6dHlwZXM+Ci0gIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXR1cm4iIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50Ij4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zY2hlbWE+Ci0gPC93c2RsOnR5cGVzPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnQiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVxdWVzdCIgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCIvPgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIi8+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpwb3J0VHlwZT4KLQotICAgPHdzZGw6YmluZGluZyBuYW1lPSJXZWJTZXJ2aWNlU29hcEJpbmRpbmciIHR5cGU9ImludGY6V2ViU2VydmljZSI+Ci0gPHdzYXc6VXNpbmdBZGRyZXNzaW5nIHdzZGw6cmVxdWlyZWQ9ImZhbHNlIiB4bWxuczp3c2F3PSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzA1L2FkZHJlc3Npbmcvd3NkbCIvPgotCi0gICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249ImluY3JlbWVudCIvPgotCi0gICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOmlucHV0PgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6b3V0cHV0PgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6YmluZGluZz4KLQotICAgPHdzZGw6c2VydmljZSBuYW1lPSJXZWJTZXJ2aWNlU2VydmljZSI+Ci0gICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXZWJTZXJ2aWNlU29hcEJpbmRpbmciIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwODAvV2ViUHJvamVjdFdpdGhFbmNyaXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UiLz4KLQotICAgIDwvd3NkbDpwb3J0PgotCi0gIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zOmltcGw9Imh0dHA6Ly9tYWluIiB4bWxuczppbnRmPSJodHRwOi8vbWFpbiIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp3c2k9Imh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSA8d3NkbDp0eXBlcz4KLSAgPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJldHVybiIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnQiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0idmFsdWUiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NjaGVtYT4KLSA8L3dzZGw6dHlwZXM+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudCIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXF1ZXN0IiBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ii8+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiLz4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOnBvcnRUeXBlPgotCi0gICA8d3NkbDpiaW5kaW5nIG5hbWU9IldlYlNlcnZpY2VTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpXZWJTZXJ2aWNlIj4KLSA8d3NhdzpVc2luZ0FkZHJlc3Npbmcgd3NkbDpyZXF1aXJlZD0iZmFsc2UiIHhtbG5zOndzYXc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDUvYWRkcmVzc2luZy93c2RsIi8+Ci0KLSAgICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotCi0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaW5jcmVtZW50Ii8+Ci0KLSAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6aW5wdXQ+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpiaW5kaW5nPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IldlYlNlcnZpY2VTZXJ2aWNlIj4KLSAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOldlYlNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSIvPgotCi0gICAgPC93c2RsOnBvcnQ+Ci0KLSAgPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvMjk0MS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ZTAwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmYXVsdE1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iZmF1bHQiIGVsZW1lbnQ9ImludGY6ZmF1bHQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9ImludGY6ZmF1bHRNZXNzYWdlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZhdWx0IiBwYXJ0PSJmYXVsdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODM5NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjI5NDEtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgd2l0aCBhIHNvYXA6aGVhZGVyZmF1bHQgZWxlbWVudCB0aGF0Ci0gICAgc2hvdWxkIHBhc3MgdGVzdCBhc3NlcnRpb24gQlAyOTQxLgotICA8L2Rlc2NyaXB0aW9uPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xLzIwMTItMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjkyYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVwb3J0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6U3BlY2ltZW4iIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TG90IiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2FtcGxlTGlzdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIiByZWY9InRuczpSZXBvcnQiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMYXN0TW9kaWZpZWQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTG90IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNwZWNpbWVuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpTYW1wbGVOYW1lIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkNvdW50IiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkxhc3RNb2RpZmllZCIgLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIiByZWY9InRuczpTYW1wbGVQcm92aWRlciIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZVByb3ZpZGVyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TnVtYmVyIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOlNhbXBsZUxpc3QiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0KLQotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ic2FtcGxlSWQiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InJlcG9ydCIgZWxlbWVudD0idG5zOlNhbXBsZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0U2FtcGxlIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOmdldFNhbXBsZVJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFNhbXBsZSI+Ci0JCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2dldFNhbXBsZSIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlNhbXBsZVNlcnZpY2UiPgotCQk8d3NkbDpwb3J0IG5hbWU9IlNhbXBsZVBvcnQiIGJpbmRpbmc9InRuczpTYW1wbGVCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5YjdiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTItMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgZmFpbHMgdGVzdCBhc3NlcnRpb24gQlAyMDEyLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvMjAxMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2MTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpQaG9uZU51bWJlciIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZThhZDVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMi0yIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDIwMTIuCi0gICAgCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS8yMDEzLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTkxMjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzODhkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTMtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgdXNlZCBpbiB0aGUgV1MtSSAKLSAgICBpbnRlcm9wZXJhYmlsaXR5IGRlbW8uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJBUDEwIi8+Ci0gICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xLzIwMTQtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDAyNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczEiIHR5cGU9InM6c3RyaW5nIi8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczIiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyBwYXJhbWV0ZXJzMSBwYXJhbWV0ZXJzMiI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2NzVmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi8yMDE0LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjUzMDY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMxIiB0eXBlPSJzOnN0cmluZyIvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMyIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMgcGFyYW1ldGVyczEiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWI0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTQtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIHdzZGw6b3BlcmF0aW9uIAotICAgIHdpdGggYSBwYXJhbWV0ZXJPcmRlciBhdHRyaWJ1dGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvMjAxNC0zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMSIgdHlwZT0iczpzdHJpbmciLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMiIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzcyYzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0xLzIwMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzVkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGE5NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE3LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIAotICAgIG11bHRpcGxlIHN0eWxlIHZhbHVlcyB3aXRoaW4gdGhlIHNhbWUgYmluZGluZy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0yLzIwMTctMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTBlZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2syIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nMiIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vazIiPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNmUzMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTctMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyAKLSAgICBtdWx0aXBsZSBzdHlsZSB2YWx1ZXMgYnV0IGluIGRpZmZlcmVudCBiaW5kaW5ncy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMS8yMDE4LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJhZjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDx0eXBlcy8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY2NTM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBwcmVjZWRpbmcgdGhlIHR5cGVzIGVsZW1lbnQuIAotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMTgtMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2I5NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgbG9jYXRpb249IjIwMThhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgbG9jYXRpb249IjIwMThiLndzZGwiLz4KLSAgPHR5cGVzLz4KLSAgCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjZjNTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBhbmQgMiBpbXBvcnQgZWxlbWVudHMgcHJlY2VkaW5nIHRoZSB0eXBlcyBlbGVtZW50LiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMy8yMDE4LTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDBkODViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTM0NjRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNC8yMDE4LTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDA1ODkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4LTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWI5YTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFmNTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIwMThhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS8yMDE5LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDc1MmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWQ2MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE5LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgZG9jdW1lbnQgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yLzIwMTktMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjAwZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm93aGVyZSIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YWUwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zLzIwMTktMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjM5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL25vd2hlcmUiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2VjMDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIGRvY3VtZW50IGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00LzIwMTktNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjgxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0OWE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS8yMDIwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjkwNDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjY2NiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi8yMDIwLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZmNjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSIyMDIwLnhzZCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3NDE4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIGluIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQgdGhhdCBoYXMgYSAKLSAgICB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBhYnNvbHV0ZSBVUkkuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDUtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDE1Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPHR5cGVzLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgbG9jYXRpb249IjIxMDVhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgbG9jYXRpb249IjIxMDViLndzZGwiLz4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFlNzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1Yi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzA3OWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3ZmMwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMDUtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSB0eXBlcwotICAgIGVsZW1lbnQgcHJlY2VkaW5nIHRoZSAyIGltcG9ydCBlbGVtZW50cy4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDExNDdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIGxvY2F0aW9uPSIyMTA1YS53c2RsIi8+Ci0gIDx0eXBlcy8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIGxvY2F0aW9uPSIyMTA1Yi53c2RsIi8+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxZTc5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwNzliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTk5ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTA1LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgdHlwZXMKLSAgICBlbGVtZW50IGJldHdlZW4gdGhlIDIgaW1wb3J0IGVsZW1lbnRzLiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xLzIxMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYjhmZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzN2FjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi8yMTE3LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgyMmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDAxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTE3LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgcnBjIGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iQVAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zLzIxMTctMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODhmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkMDcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMyI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci0KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvMjQwNi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyNDg2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPGRlZmluaXRpb25zIG5hbWU9IlNhbXBsZVNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJ6aXBjb2RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC9tZXNzYWdlPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlc3BvbnNlIj4KLQkJPHBhcnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4KLQk8L21lc3NhZ2U+Ci0JPHBvcnRUeXBlIG5hbWU9IlNhbXBsZVBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ii8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXNwb25zZSIvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJlbmNvZGVkIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIGVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi8+Ci0JCQk8L2lucHV0PgotCQkJPG91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0iZW5jb2RlZCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIvPgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJTYW1wbGVTZXJ2aWNlIj4KLQkJPGRvY3VtZW50YXRpb24+PC9kb2N1bWVudGF0aW9uPgotCQk8cG9ydCBuYW1lPSJTYW1wbGVQb3J0IiBiaW5kaW5nPSJ0bnM6U2FtcGxlQmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0JCTwvcG9ydD4KLQk8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2EyODdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjQwNi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjQwNi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDI0MDYuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9idWd6aWxsYS9lbXB0eVNvYXBCb2R5L2VtcHR5U29hcEJvZHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyMDI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHR5cGVzPgotICAgIDxzOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgIDxzOmVsZW1lbnQgbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICAgIDxzOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDxzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iYXJnIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICAgICAgICA8L3M6c2VxdWVuY2U+Ci0gICAgICAgIDwvczpjb21wbGV4VHlwZT4KLSAgICAgIDwvczplbGVtZW50PgotICAgIDwvczpzY2hlbWE+Ci0gIDwvdHlwZXM+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJzMDplY2hvU3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXNwb25zZSIvPgotCi0gIDxwb3J0VHlwZSBuYW1lPSJTZXJ2aWNlMVNvYXAiPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6c2V0TWVzc2FnZVJlcXVlc3QiIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOnNldE1lc3NhZ2VSZXNwb25zZSIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgPC9wb3J0VHlwZT4KLQotICA8YmluZGluZyBuYW1lPSJTZXJ2aWNlMVNvYXAiIHR5cGU9InMwOlNlcnZpY2UxU29hcCI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50IiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIiBzdHlsZT0iZG9jdW1lbnQiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gIDwvYmluZGluZz4KLQotICA8c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHBvcnQgbmFtZT0iU2VydmljZTFTb2FwIiBiaW5kaW5nPSJzMDpTZXJ2aWNlMVNvYXAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdC9XU0lTZXJ2aWNlL1NlcnZpY2UxLmFzbXgiIC8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxM2RhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvMjAxMC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5YmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDEwLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IGZhaWxzIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MzA4Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS54c2QiIHNjaGVtYUxvY2F0aW9uPSIyMDExLnhzZCIvPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTdmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSIyMDExLnhzZCIgCi0gICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiAKLSAgICAgICAgIHhtbG5zOmludGY9IjIwMTEtMS54c2QiIAotICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJuZXh0LnhzZCIgc2NoZW1hTG9jYXRpb249Im5leHQueHNkIi8+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2ODQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvbmV4dC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci0JICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIAkgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmI2NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG9uZm9ybWFudCB3c2RsLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMSIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzRkMDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEtMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDMwOGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICAgPGltcG9ydCBuYW1lc3BhY2U9IjIwMTEueHNkIiBzY2hlbWFMb2NhdGlvbj0iMjAxMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU3ZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0ibmV4dC54c2QiIHNjaGVtYUxvY2F0aW9uPSJuZXh0LnhzZCIvPgotICA8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvbmV4dC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvbmV4dC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MGE3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL25leHQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4xIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4czpzY2hlbWEgCi0gIHRhcmdldE5hbWVzcGFjZT0ibmV4dC54c2QiCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gIHhtbG5zOnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiAKLSAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTx4czphbm5vdGF0aW9uPgotCSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAJICA8L3hzOmRvY3VtZW50YXRpb24+Ci0JPC94czphbm5vdGF0aW9uPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEwOGJlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDExLTMiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMS4KLSAgICBIb3dldmVyIHRoZSBwcmVyZXF1aXNpdGUgQlAyMTAyIGZhaWxzIGJlZm9yZSB3ZSBhY3R1YWxseSBjYW4gZXhlY3V0ZSB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMDIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMDIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvMjAxMS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjODdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjZiMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNDU4MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS0xLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEtMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU3ZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0ibmV4dC54c2QiIHNjaGVtYUxvY2F0aW9uPSJuZXh0LnhzZCIvPgotICA8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0M2M0NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01L25leHQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDljYjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtNSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNjg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvMjAyMS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydHM9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2NjdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCB1c2VzIHBhcnRzIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NGY1MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0yLzIwMjEtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3YjZhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjdjZWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMy8yMDIxLTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOkFkZHJlc3MiIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjAxNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDRhYjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNC8yMDIxLTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIgLz4KLSAgIDwvd3NkbDptZXNzYWdlPiAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydHM9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1Y2M0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTQiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCB1c2VzIHBhcnRzIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWQ3ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01LzIwMjEtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YzkyOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS01Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBhcnQgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhODU1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTYvMjAyMS02LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2YxNTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjEtNiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIxLgotICAgIFNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBhcnQgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEzODBjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTEvMjAyMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhY2MwMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkZTFkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTIvMjAyMi0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmE4OTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjItMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIyLgotICAgIFNvYXBiaW5kOmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIyIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjIzNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xLzIwMzItMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCBuYW1lPSJmYXVsdDEiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOGIzMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAzMi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgVGhlIG5hbWUgYXR0cmlidXRlIHZhbHVlIG9uIHRoZSBTb2FwYmluZDpmYXVsdCBlbGVtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lIAotICAgIGF0dHJpYnV0ZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQgZWxlbWVudC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MmZhZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0yLzIwMzItMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IG5hbWU9ImZhdWx0MSIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzM0NTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMzItMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIyLgotICAgIFRoZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBvbiB0aGUgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgbmFtZSAKLSAgICBhdHRyaWJ1dGUgdmFsdWUgc3BlY2lmaWVkIG9uIHRoZSBwYXJlbnQgZWxlbWVudCB3c2RsOmZhdWx0IGVsZW1lbnQuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzc3YzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy9hZGRyZXNzQm9vay1ycGMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay1ycGMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWEyZjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iYWRkcmVzc0Jvb2stcnBjIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCB1c2VkIGluIHRoZSBXUy1JIAotICAgIGludGVyb3BlcmFiaWxpdHkgZGVtby4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2svYWRkcmVzc0Jvb2sud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0ODJkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YzY4YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2svdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9ImFkZHJlc3NCb29rIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCB1c2VkIGluIHRoZSBXUy1JIAotICAgIGludGVyb3BlcmFiaWxpdHkgZGVtby4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBDYXRhbG9nL3NhbXBsZUFwcENhdGFsb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGMyOTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIKLSB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotIHhtbG5zOmludGY9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAzLTA3L0NhdGFsb2cud3NkbCIKLSB4bWxuczppbXBsPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nX0ltcGwud3NkbCIKLSB4bWxuczpTT0FQLUVOQz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iCi0geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIiAKLQlsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIi8+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQ2F0YWxvZ1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQ2F0YWxvZyIgYmluZGluZz0iaW50ZjpDYXRhbG9nU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9DYXRhbG9nU2VydmljZSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBDYXRhbG9nL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzA1M2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBDYXRhbG9nIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgdGhlIFdTLUkgU2FtcGxlIEFwcGxpY2F0aW9uIGRlbW9uc3RyYXRpbmcgYXR0YWNobWVudCBzdXBwb3J0LgotICAgIFRoaXMgc2hvdWxkIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZS4KLSAgICBIb3dldmVyLCB0aGlzIHNob3VsZCBmYWlsIHRvIGNvbmZvcm0gdG8gdGhlIFdTLUkgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJTU0JQMjQwMyIgdGFkSUQ9IlNTQlAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMDY3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBNYW51ZmFjdHVyZXIvc2FtcGxlQXBwTWFudWZhY3R1cmVyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6U09BUC1FTkM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLQl4bWxuczppbXBsPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXJfSW1wbC53c2RsIiAKLQl4bWxuczppbnRmPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIgCi0JeG1sbnM6Y3Q9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L0NvbmZpZ3VyYXRpb24ueHNkIiAKLQl4bWxuczpjZmc9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L0NvbmZpZ3VyYXRpb24ud3NkbCIKLQl4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotCi0gICA8d3NkbDppbXBvcnQgbG9jYXRpb249Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIiAKLSAgIAkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIvPgotICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIgotCQlsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIi8+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iVGVzdFNlcnZpY2UiPgotICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOk1hbnVmYWN0dXJlclNvYXBCaW5kaW5nIiBuYW1lPSJUZXN0UG9ydCI+Ci0gICAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL1Rlc3RTZXJ2aWNlIi8+Ci0gICAgICA8L3dzZGw6cG9ydD4KLSAgIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzlmMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0ic2FtcGxlQXBwTWFudWZhY3R1cmVyIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgdGhlIFdTLUkgU2FtcGxlIEFwcGxpY2F0aW9uIGV4ZXJjaXNpbmcgdGhlICBNYW51ZmFjdHVyZXIgd3NkbCAKLSAgICBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlLgotICAgIFRoaXMgc2hvdWxkIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlLgotICAgIFRoaXMgc2hvdWxkIGFsc28gdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlMGQyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2Uvc2FtcGxlQXBwV2FyZWhvdXNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6aW50Zj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvV2FyZWhvdXNlLndzZGwiIAotCXhtbG5zOm1hbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiCi0JeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0KLSAgIDx3c2RsOmltcG9ydCBsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiIAotICAgCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIi8+Ci0gICA8d3NkbDppbXBvcnQgbG9jYXRpb249Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L1dhcmVob3VzZS53c2RsIiAKLSAgIAkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0wOC9XYXJlaG91c2Uud3NkbCIvPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlRlc3RTZXJ2aWNlIj4KLSAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXYXJlaG91c2VTb2FwQmluZGluZyIgbmFtZT0iVGVzdFBvcnQiPgotICAgICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9UZXN0U2VydmljZSIvPgotICAgICAgPC93c2RsOnBvcnQ+Ci0gICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwV2FyZWhvdXNlL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMwZGM1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBXYXJlaG91c2UiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyB0aGUgV1MtSSBTYW1wbGUgQXBwbGljYXRpb24gZXhlcmNpc2luZyB0aGUgIFdhcmVob3VzZSB3c2RsIAotICAgIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=